[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n__pycache__\n# **render_output/\n# **.tar.xz\n# **outputs/\n# **.zip\n# **BlenderNeRF/\n# **slurm_outs/\n# **slurm_scripts/\n# /assets/\n# tmp.out\n# **results\n# .vscode\n# # output\n# *.ply\n# *.pyc\n# *.png\n# *.jpg\n# log\n# **output\n# **.so\n# checkpoints_*/\ncheckpoints_continuous_mse/\ncheckpoints_discrete/\n# **wandb\n# **.glb\n# **cache**\n# **.npy\n# **cache**\n# **.npy**\n# **trainedweights\n# **nerfbaselines\n# **garfield**\n# **umi-on-legs**\n.env\n**egg-info**\n# *.pkl\n# *.log\n# *.cursor\n# # datasets/\n# *.pth\nbackup_data\n\nreal_scene_data/\nreal_scene_models/\noutputs/\nreal_scene_render_outputs/\nmpm_sim_outputs/\ninference_combined_mse_clip_results/"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 edward1997104\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <br>\n  <br>\n  <h1>Pixie: Physics from Pixels</h1>\n</div>\n\n<p align=\"center\">\n  <a href=\"https://pixie-3d.github.io/\">\n    <img alt=\"Project Page\" src=\"https://img.shields.io/badge/Project-Page-F0529C\">\n  </a>\n  <a href=\"https://arxiv.org/abs/2508.17437\">\n    <img alt=\"Arxiv paper link\" src=\"https://img.shields.io/badge/arxiv-2508.17437-blue\">\n  </a>\n    <!-- <a href=\"https://huggingface.co/datasets/vlongle/pixie/tree/main\">\n    <img alt=\"Model Checkpoints link\" src=\"https://img.shields.io/badge/%F0%9F%A4%97%20HF-Models-yellow\">\n  </a>\n  <a href=\"https://opensource.org/licenses/MIT\">\n    <img alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\">\n  </a> -->\n  <a href=\"https://x.com/LongLeRobot/status/1961139689886552481\">\n    <img alt=\"Twitter Thread\" src=\"https://img.shields.io/badge/Twitter-Thread-1DA1F2\">\n  </a>\n</p>\n\n<div align=\"center\">\n\n**[Long Le](https://vlongle.github.io/)**$^1$ · **[Ryan Lucas](https://ryanlucas3.github.io/)**$^2$ · **[Chen Wang](https://cwchenwang.github.io/)**$^1$ · **[Chuhao Chen](https://czzzzh.github.io/)**$^1$ · **[Dinesh Jayaraman](https://www.seas.upenn.edu/~dineshj/)**$^1$ · **[Eric Eaton](https://www.seas.upenn.edu/~eeaton/)**$^1$ · **[Lingjie Liu](https://lingjie0206.github.io/)**$^1$\n\n$^1$ University of Pennsylvania · $^2$ MIT\n\n</div>\n\n\n<div style=\"margin:50px; text-align: justify;\">\n<img style=\"width:100%;\" src=\"docs/assets/teaser_full_high_quality.gif\">\n\nPhotorealistic 3D reconstructions (NeRF, Gaussian Splatting) capture geometry & appearance but **lack physics**. This limits 3D reconstruction to static scenes. Recently, there has been a surge of interest in integrating physics into 3D modeling. But existing test‑time optimisation methods are slow and scene‑specific. **Pixie** trains a neural network that maps pretrained visual features (i.e., CLIP) to **dense material fields** of physical properties in a single forward pass, enabling fast and generalizable physics inference and simulation.\n\n## 🔔 Updates\n\n- **2026-03-05:** Released **PixieVerse** curated dataset on Hugging Face: [vlongle/pixieverse](https://huggingface.co/datasets/vlongle/pixieverse).\n- **2026-03-05:** Added direct download support for models and dataset (`scripts/download_models.py`, `scripts/download_data.py`) to avoid re-running full data mining/rendering.\n- **2026-03-05:** For detailed dataset download/unpack instructions and structure, see [data_readme.md](data_readme.md).\n\n## 💡 Contents\n\n1. [Installation](#installation)\n2. [Download Models and Dataset](#download-models)\n3. [Usage](#usage)\n4. [VLM Labeling](#vlm-labeling)\n5. [Training](#training)\n6. [Common Issues](#common-issues)\n7. [Citation](#citation)\n\n\n\n<h2 id=\"installation\">⚙️ Installation</h2>\n\n```\ngit clone git@github.com:vlongle/pixie.git\nconda create -n pixie python=3.10\nconda activate pixie\npip install -e .\n```\nInstall `torch` and `torchvision` according to your cuda version (e.g., 11.8, 12.1) and the [official instruction](https://pytorch.org/).\nInstall additional dependencies for f3rm (NeRF CLIP distilled feature field):\n\n```\n# ninja so compilation is faster!\npip install ninja \n# Install tinycudann (may take a while)\npip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch\n\n# Install third-party packages\npip install -e third_party/nerfstudio\npip install -e third_party/f3rm\n\n# Install PyTorch3D and other dependencies\npip install -v \"git+https://github.com/facebookresearch/pytorch3d.git@stable\"\npip install viser==0.2.7\npip install tyro==0.6.6\n```\n\nInstall PhysGaussian dependencies (for MPM simulation)\n\n```\npip install -v -e third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/\npip install -v -e third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/\n```\nInstall VLM utils \n\n```\npip install -e third_party/vlmx\n```\nInstall FlashAttention to use [Qwen2.5-VL](https://github.com/QwenLM/Qwen2.5-VL)\n\n```\nMAX_JOBS=16 pip install -v -U flash-attn --no-build-isolation\n```\n\nInstall dependencies / add-ons for Blender. We use [Blender 4.3.2](https://www.blender.org/download/).\n1. Install [BlenderNeRF](https://github.com/maximeraafat/BlenderNeRF) add-on and set `paths.blender_nerf_addon_path` to BlenderNeRF's zip file.\n2. Install python packages for Blender. Replace the path by your actual Blender path\n    ```\n    /home/{YOUR_USERNAME}/blender/blender-4.3.2-linux-x64/4.3/python/bin/python3.11 -m pip install objaverse\n    ```\nInstall the [Gaussian-Splatting addon](https://github.com/ReshotAI/gaussian-splatting-blender-addon) and set [paths.blender_gs_addon_path](config/paths/default.yaml) in the config.\n\n\nSet the appropriate api keys and select VLM models you'd like in [config/segmentation/default.yaml](config/segmentation/default.yaml), we support OpenAI, Claude, Google's Gemini, or Qwen (local, no api needed). You can also implement more model wrappers yourself following our template!\n\n<h2 id=\"download-models\">📥 Download Models and Dataset</h2>\n\nWe provide pre-trained model checkpoints via HuggingFace Datasets. To download the models:\n\n```bash\npython scripts/download_models.py\n```\n\nModel repo: [https://huggingface.co/datasets/vlongle/pixie](https://huggingface.co/datasets/vlongle/pixie)\n\n### Download PixieVerse dataset (recommended over re-generating)\n\nIf you mainly want to train/evaluate Pixie, you can skip the expensive data mining/rendering pipeline and directly download our curated PixieVerse dataset from Hugging Face:\n\nDataset repo: [https://huggingface.co/datasets/vlongle/pixieverse](https://huggingface.co/datasets/vlongle/pixieverse)\n\n```bash\n# Download archived dataset payloads\npython scripts/download_data.py \\\n  --dataset-repo vlongle/pixieverse \\\n  --dirs archives \\\n  --local-dir /path/to/pixieverse_root\n```\n\nFor quick testing, download a single class only:\n\n```bash\npython scripts/download_data.py \\\n  --dataset-repo vlongle/pixieverse \\\n  --dirs archives \\\n  --obj-class tree \\\n  --local-dir /path/to/pixieverse_root\n```\n\nThen unpack archives into the standard folder structure (`data/`, `render_outputs/`, etc.):\n\n```bash\nROOT=/path/to/pixieverse_root\nset -euo pipefail\n\nfor d in data outputs render_outputs vlm_seg_results vlm_seg_critic_results vlm_seg_mat_sample_results; do\n  src=\"$ROOT/archives/$d\"\n  dst=\"$ROOT/$d\"\n  mkdir -p \"$dst\"\n  [ -d \"$src\" ] || { echo \"[skip] $src not found\"; continue; }\n  echo \"[dir] $d\"\n  for a in \"$src\"/*.tar \"$src\"/*.tar.gz; do\n    [ -e \"$a\" ] || continue\n    echo \"  -> extracting $(basename \"$a\")\"\n    tar -xf \"$a\" -C \"$dst\" --checkpoint=2000 --checkpoint-action=echo=\"    ... extracted 2000 more entries\"\n    echo \"  <- done $(basename \"$a\")\"\n  done\ndone\n```\n\n<h2 id=\"usage\">🎯 Usage</h2>\n\n### Synthetic Objaverse\n\n```\npython pipeline.py obj_id=f420ea9edb914e1b9b7adebbacecc7d8 [physics.save_ply=false] [material_mode={vlm,neural}]\n```\n\n`save_ply=true` is slower, only used for rendering fancy phyiscs simulation in Blender. `material_mode=vlm` uses VLM for labeling the data based on our in-context tuned examples. This is how we generate our dataset! `material_mode=neural` uses our trained neural networks to produce physics predictions.\n\nThis code will:\n1. Download the objaverse asset `obj_id`\n2. Render it in Blender using `rendering.num_images` (default 200)\n3. Train a NeRF distilled CLIP field using `training_3d.nerf.max_iterations`\n4. Train a gaussian splatting model using `training_3d.gaussian_splatting.max_iterations`\n5. Generate a voxel feature grid from the CLIP field\n6. Either\n    - Apply the material dictionary predicted by a VLM (for generating data to train our model) `material_mode=vlm`\n    - Use our trained UNet model to predict the physics field `material_mode=neural`. \n7. Run the MPM physics solver using the physics parameters.\n\n\nRun\n```\npython render.py obj_id=f420ea9edb914e1b9b7adebbacecc7d8\n```\nfor fancy rendering in Blender.\n\nCheck the outputs in the notebook: [nbs/pixie.ipynb](nbs/pixie.ipynb).\n\n### Real Scene\n\nFor real scene, run \n```\npython pipeline.py \\\n    is_objaverse_object=false \\\n    obj_id=bonsai \\\n    material_mode=neural \\\n    paths.data_dir='${paths.base_path}/real_scene_data' \\\n    paths.outputs_dir='${paths.base_path}/real_scene_models' \\\n    paths.render_outputs_dir='${paths.base_path}/real_scene_render_outputs' \\\n    training.enforce_mask_consistency=false\n```\nUse `segmentation.neural.cache_results=true` if the latest inferene already contains `obj_id`.\n\nCheck the outputs in the notebook: [nbs/real_scene.ipynb](nbs/real_scene.ipynb).\n\n<h2 id=\"vlm-labeling\">🏷️ VLM Labeling</h2>\n\nIf you already downloaded PixieVerse from Hugging Face, you can skip this section.\nSee **Download PixieVerse dataset (recommended over re-generating)** above for the direct download + unpack instructions:\n[https://huggingface.co/datasets/vlongle/pixieverse](https://huggingface.co/datasets/vlongle/pixieverse)\n\nThis section is only for reproducing the full data mining / rendering / VLM filtering pipeline from scratch.\n\nBelow are the steps to reproduce our mining process from Objaverse. We extract high-quality single-object scenes from Objaverse for each of the 10 semantic classes. The precomputed [obj_ids_metadata.json](config/obj_ids_metadata.json) containing the list of `object_id` along with the `obj_class` and whether the object is considered `is_appropriate` (high-quality enough) by our `vlm_filtering` pipeline is provided. The preproduction steps are only provided for completeness.\n\n1. Compute the cosine similarity between each Objaverse object name to an object class we'd like (e.g., `tree`) and keep the `top_k` for our PixieVerse dataset.\n    ```\n    python data_curation/objaverse_selection.py\n   ```\n2. Download objaverse assets\n    ```\n    python data_curation/download_objaverse.py [data_curation.download.obj_class=tree] \n   ```\n3. Render 1 view per object\n    ```\n    python data_curation/render_objaverse_classes.py [data_curation.rendering.obj_class=tree] [data_curation.rendering.max_objs_per_class=1] [data_curation.rendering.timeout=80]\n    ```\n    Then use VLM to filter out low-quality assets\n    ```\n      python pixie/vlm_labeler/vlm_data_filtering.py [data_curation.vlm_filtering.obj_class=tree]\n    ```\n4. Manual filtering\nVLM does a decent job but not perfect. We run\n    ```\n    streamlit run data_curation/manual_data_filtering_correction.py [data_curation.manual_correction.obj_class=tree]\n    ```\n    which creates a web browser with the discarded images and the chosen images by VLM. You can skim through them quickly and tick the checkbox to flip the label and correct the VLM. Then, click \"save_changes\", this creates `all_results_corrected.json` which is basically `all_results.json` but which the checked boxes objects flipped.\n\n<h2 id=\"training\">🎓 Training</h2>\n\n1. Compute the normalization.\n    ```\n    python third_party/Wavelet-Generation/data_utils/inspect_ranges.py\n    ```\n2. Train the discrete and continuous 3D UNet models\n\n    Train discrete:\n    ```\n    python third_party/Wavelet-Generation/trainer/training_discrete.py\n    ```\n    Train continuous:\n    ```\n    python third_party/Wavelet-Generation/trainer/training_continuous_mse.py\n    ```\n    Adjust [training.training.batch_size](config/training/default.yaml) and other params as needed. We used 6 NVIDIA RTX A6000 GPU (~49 GB) for training each model with 128 CPUs and 450 GBs of RAM. Adjust your `batch_size` and `data_worker` according to your resource availability.\n3. Then run inference\n    ```\n    python third_party/Wavelet-Generation/trainer/inference_combined.py [obj_id=8e24a6d4d15c4c62ae053cfa67d99e67]\n    ```\n    If `obj_id` not provided, we will evaluate on the entire test set.\n4. Map the predicted voxel grid to world coordinate and interpolate to gaussian splatting, then run physics simulation. Taken care of by `pipeline.py`:\n    ```\n    python pipeline.py material_mode=neural obj_id=... [segmentation.neural.result_id='\"YOUR_RESULT_TIME_STAMP\"'] [segmentation.neural.feature_type=clip]\n    ```\n\n\n\n\n<h2 id=\"common-issues\">💀 Common Issues</h2>\n\nIf you ran into `UnicodeEncodeError: 'ascii' codec can't encode characters in position`, try to re-install warp_lang:\n\n```\npip install --force-reinstall warp_lang==0.10.1\n```\n\nIf you ran into `ValueError: numpy.dtype size changed, may indicate binary incompatibility`, try to re-install numpy:\n\n```\npip install --force-reinstall numpy==1.24.4\n```\nIf you run into issues installing `tinycudann`, try installing from source via `git clone ` following [their instruction](https://github.com/NVlabs/tiny-cuda-nn#pytorch-extension).\n\nIf you run into issue installing  gaussian-splatting submodules:\n```\npip install -v -e third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/\npip install -v -e third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/\n```\nTry installing without the `-e` flag.\n\n## 😊 Acknowledgement\nWe would like to thank the authors of [PhysGaussian](https://xpandora.github.io/PhysGaussian/), [F3RM](https://github.com/f3rm/f3rm), [Wavelet Generation](https://github.com/edward1997104/Wavelet-Generation), [Nerfstudio](https://github.com/nerfstudio-project/nerfstudio)  and others for releasing their source code.\n\n\n<h2 id=\"citation\">📚 Citation</h2>\n\nIf you find this codebase useful, please consider citing:\n\n```bibtex\n@article{le2025pixie,\n  title={Pixie: Fast and Generalizable Supervised Learning of 3D Physics from Pixels},\n  author={Le, Long and Lucas, Ryan and Wang, Chen and Chen, Chuhao and Jayaraman, Dinesh and Eaton, Eric and Liu, Lingjie},\n  journal={arXiv preprint arXiv:2508.17437},\n  year={2025}\n}\n```\n\n"
  },
  {
    "path": "config/config.yaml",
    "content": "defaults:\n  - _self_\n  - paths: default\n  - data_rendering: default\n  - output_rendering: default\n  - training_3d: default\n  - training: default\n  - voxelization: default\n  - segmentation: default\n  - physics: default\n  - data_curation: default\n  - mapping: default\n  - override hydra/hydra_logging: disabled\n  - override hydra/job_logging: disabled\n\n# Main object configuration\nobj_id: null  # Required: Objaverse object ID to process\nobj_path: null  # Optional: Path to the object file to process\nobj_class: null  # Auto-detected from obj_id\n\n# Pipeline control\noverwrite: false\noverwrite_voxel: false\nmaterial_mode: \"vlm\"  # \"vlm\" or \"neural\"\nis_objaverse_object: true"
  },
  {
    "path": "config/data_curation/default.yaml",
    "content": "# Data Curation Configuration\n# Configuration for objaverse object selection and categorization\n\n# Object selection parameters\nobjaverse_selection:\n  top_k: 500  # Number of top objects to select per category\n  batch_size: 128  # Batch size for encoding object names\n  # Model configuration\n  model:\n    name: \"all-MiniLM-L6-v2\"  # Sentence transformer model to use\n\n# Download parameters\ndownload:\n  max_objs_per_class: null  # Maximum number of objects to download per class (null = download all)\n  obj_class: null  # Specific object class to download (null = download all categories)\n  processes: null  # Number of processes for downloading (null = use CPU count)\n\n# Rendering parameters\nrendering:\n  max_objs_per_class: null  # Maximum number of objects to render per class (null = render all)\n  obj_class: null  # Specific object class to render (null = render all categories)\n  num_gpus: 1  # Number of GPUs to use for rendering\n  jobs_per_gpu: 1  # Number of rendering jobs to run per GPU\n  resolution: 400  # Resolution of rendered images\n  views: 1  # Number of views to render per object\n  timeout: 120  # Timeout in seconds for each render job\n  skip_existing: true  # Skip objects that have already been rendered\n\n# VLM data filtering parameters\nvlm_filtering:\n  obj_class: null  # Specific object class to filter (null = filter all)\n  num_workers: null  # Number of parallel workers (null = use CPU count)\n  overwrite: false  # Overwrite existing results\n  model_name: \"gemini-2.0-flash-exp\"  # VLM model to use\n  analyze_only: false  # Only analyze existing results without running VLM\n\n# Manual data filtering correction parameters\nmanual_correction:\n  obj_class: null  # Specific object class to correct (required)\n  input_file: \"all_results.json\"  # Input file name (without path)\n  output_file: \"all_results_corrected.json\"  # Output file name (without path)\n\n# Manual simulation validation parameters\nmanual_sim_validation:\n  obj_class: null  # Specific object class to validate (required)\n  input_file: \"all_results_corrected.json\"  # Input file name (without path)\n  output_file: \"all_results_validated.json\"  # Output file name (without path)\n  num_samples: -1  # Number of objects to inspect (-1 means all)\n  sample_id: 0  # Simulation sample id used in video path\n  grid_size: 64  # Grid size used in simulation output folder naming\n  columns_per_row: 8  # Number of videos shown per row\n  render_outputs_dir: null  # Optional override; defaults to paths.render_outputs_dir"
  },
  {
    "path": "config/data_rendering/default.yaml",
    "content": "# Blender rendering parameters\nnum_images: 200\ncamera_dist_min: 1.2\ncamera_dist_max: 1.8\ntransparent_bg: true\nscene_scale: 1.0\n\n# Output format\nformat: \"NGP\" "
  },
  {
    "path": "config/mapping/default.yaml",
    "content": "\n# Input paths\npred_path: null  # Path to prediction numpy array (required)\nmask_path: null  # Path to mask numpy array (required)\ngrid_feature_path: null  # Path to original voxel grid metadata (.npz file) (required)\n\n# Output paths\noutput_path: null  # Path to save the PLY file (required)\nworld_output_path: null  # Optional: Path to save the world frame PLY file\n\n# Object information\nobj_id: null  # Object ID (required)\n\n# Optional paths\ndataparser_path: null  # Optional: Path to dataparser_transforms.json file, used for mapping nerf to world space coordinate\n## for real-scene. For objaverse, nerf == world\n"
  },
  {
    "path": "config/obj_ids_metadata.json",
    "content": "{\n  \"003ebdf86df345d39dc166563229fb85\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is isolated, making it suitable for training data.\"\n    }\n  },\n  \"013b0fff25ab49c08ba1195ca7d7df46\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"020f20e5150a45cbbeeb64581129a9f1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crushed soda can, which belongs to the specified class. The quality is good, and a crushed state is relevant for physics simulation (e.g., as debris or after an impact).\"\n    }\n  },\n  \"030ac3c4365e4ea48584b4e808f4f2bc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (four cans), not a single object as required.\"\n    }\n  },\n  \"041b88d4453044d9871b0e4d32aa3a2c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two soda cans, but the requirement is to have only one single object per image.\"\n    }\n  },\n  \"041ca9b9db8242e29ffe8246d9c6e35f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is rectangular and does not resemble a soda can. It looks more like a small fridge or cooler.\"\n    }\n  },\n  \"046d238f335740b8a01848dc58ba3483\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the specified class. The quality is good, and the object is relevant for physics simulation (e.g., deformation, collision).\"\n    }\n  },\n  \"05990b201b514793adc8f609e302cf79\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the specified class. The quality is acceptable, and a crushed can is a valid state for physics simulation in a game.\"\n    }\n  },\n  \"05e6f8ed25e74242957b34f9256ffc47\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"08129621ded8409c951bd1ae9a260127\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"081618a116f94390b02d36c1f19f24a6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"08468b5b1ca04f7dbe4bfe8cfa1a65c9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a metal cylinder, but it lacks the defining features of a soda can, such as a pull-tab top, specific shape, or branding. It looks more like a generic metal cup or container component rather than a beverage can.\"\n    }\n  },\n  \"08be81ca5fa74718b5d95ac6a5a928f2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"09998ed235134ae39ae4435a136bcb51\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and zoomed in, making it impossible to clearly identify the object as a soda can.\"\n    }\n  },\n  \"0a0e0b51f1a74aedb88c29882298de18\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good (clear, well-lit), and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"0a336eadc4fc48b4b12cac03162d5195\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, causing the main body of the can to be almost invisible against the white background. Only the top is clearly discernible.\"\n    }\n  },\n  \"0a855105a1f14bd7a82305f6cf62e5fe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a very low-quality silhouette of a bottle with a straw, not a soda can. It lacks detail, texture, and realism, making it unsuitable for training.\"\n    }\n  },\n  \"0a97a6e5c2894bfba2d347d333756b0e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"0aab0bb3f4d1442bbae1ff99a5a6fb01\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a vending machine/display, multiple small cans, and a floor surface), not a single isolated soda can. The primary focus is the display unit, not an individual can suitable for physics simulation.\"\n    }\n  },\n  \"0ab233211a68479090c6888cd6929a16\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"0acc9d323119494d97ec03fff828706f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola can), which belongs to the specified class. The image quality is good, well-lit, and shows sufficient detail. It is suitable for physics simulation.\"\n    }\n  },\n  \"0ad3407cd8104ba58f71885c0e58ca9a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"0bcc421f7cbf40c0bc15ab2c1ee555a1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the target class. The image quality is acceptable, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"0c05c890dc3c4fd7a741389f10f0191e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"0c0fdfaaba9249e88c63c65ce950286a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"0cb72c2493ac458f8ee9982fa3486910\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"0d15fe8f1a6c4d96958d8da0edace433\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"0db78b8bfcdb4c559b3bc8f63cbb5689\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a soda can or any related item. It appears to be a part of a faucet handle or a similar fixture, not a beverage container.\"\n    }\n  },\n  \"0e352bdaace24f5e9a6ed4e459e85628\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it extremely difficult to identify the object as a soda can. Only a small portion of the top rim is vaguely visible against a white background.\"\n    }\n  },\n  \"0e36874cf495472d87a7f279c43a920d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plastic wastebasket, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"0e69a6714fec4c7ebbd95b00c1f31ab7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a black silhouette with no texture or detail, making it impossible to identify the object clearly as a soda can or assess its quality. It lacks the necessary visual information for training purposes.\"\n    }\n  },\n  \"0e897a1618874fb38450000ea50c6676\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can (or beverage can). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0eaaa5f3455b41818ee568a8f58ed9e9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit), and the object is isolated against a clean background. It is suitable for physics simulation training.\"\n    }\n  },\n  \"0f76c28a06a8485682f3639e7606d43c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object resembles a food can (like for soup or vegetables) due to its ridged structure, rather than a typical smooth-sided soda or beverage can. It does not clearly depict the 'soda_cans' class.\"\n    }\n  },\n  \"0fe850f9e4a848d58aa2c59e9dbf7fe0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct soda cans, violating the requirement for depicting only a single object.\"\n    }\n  },\n  \"10a464c915d0483ca58eff1514faa570\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the top lid of the soda can, not the entire object. This does not clearly depict the 'soda_cans' class.\"\n    }\n  },\n  \"117490ef21d249fba0f69bdb223523f9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can against a clean background. The quality is good, and it is suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"122b731d80f14411976178c6e6e6af45\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a jerrycan or fuel can, which is not a soda can or related beverage container.\"\n    }\n  },\n  \"12395e6ea77c4f519e0bd37bb086f86f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a milk can or churn, not a soda can or beverage can as defined by the class list.\"\n    }\n  },\n  \"126ebf50d9274597924ac25089c11181\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a glass with liquid and ice, not a soda can.\"\n    }\n  },\n  \"12c880e2a4d0458db5f5fd1068bbb386\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not look like a soda can. It appears to be some kind of bin or holder. Also, the image quality is low due to lack of texture and rendering artifacts at the bottom.\"\n    }\n  },\n  \"142f52dfe04c4faf8ee0cf7979a1303c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture or detail, making it difficult to clearly identify as a soda can. The object blends almost entirely with the white background.\"\n    }\n  },\n  \"144172191b714324b2114e4d6e55b724\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone planter or urn, not a soda can or any related object from the specified class list.\"\n    }\n  },\n  \"147de96f6b7943b9bb714f10bd6c847e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks texture or detail, making it impossible to clearly identify as a soda can. The object blends almost completely with the white background.\"\n    }\n  },\n  \"14b2db3cae484e0eb05cfd1fc0bd121e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in and blurry, making it impossible to clearly identify the object as a soda can. It does not show the overall shape or structure necessary for recognition or physics simulation.\"\n    }\n  },\n  \"157fd6b957894077bab3657cceeb1099\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"15da16de22b94083a8cae8b1b4c2ddf6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an incomplete or broken soda can, with a large gap in the middle. We need images of complete objects for physics simulation training.\"\n    }\n  },\n  \"18326cd8315c4712ab5d880efe79b44d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate for training purposes, and it represents an object commonly used in physics simulations in games.\"\n    }\n  },\n  \"18cd592bbf8f453aaf0acfe99bd4736a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (can, lid, ice cubes, liquid spill) rather than just a single soda can. We need images depicting only the primary object.\"\n    }\n  },\n  \"191d8ed962cd497797218fd9e042ed9d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple soda cans stacked together in a pyramid structure, not a single soda can as required. It also includes a base surface.\"\n    }\n  },\n  \"19b47739d88b45e895f7e4cdf4a0d98e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can of good quality, suitable for the class and physics simulation.\"\n    }\n  },\n  \"1a136f6aff0a40aea8ca1359d2b3771d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what appears to be a concrete trash receptacle or large ashtray, not a soda can or beverage can.\"\n    }\n  },\n  \"1a5e3960db804fb881ff879194eb348c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can, which belongs to the specified class list (soda can, aluminum can, beverage can, etc.). The quality is acceptable, and the object is suitable for physics simulation in a game environment. The weathered texture adds diversity.\"\n    }\n  },\n  \"1a67ade7bce34c0ba785f9544d460dfc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single cylindrical can, which fits within the broader terms like 'metal can' or 'aluminum can' provided in the class description, even if it lacks specific soda can branding or top features. The quality is adequate and it represents a suitable object for physics simulation.\"\n    }\n  },\n  \"1a837cbc14624a558841610ffcbfb445\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single soda can of good quality, suitable for the class and physics simulation.\"\n    }\n  },\n  \"1aba5376ea5c43ec84d01b9c0f713ee3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a metal trash can, not a soda can or any related beverage container.\"\n    }\n  },\n  \"1ac8fa7a38fb45bdb74261b63696ecad\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an object that looks like a pot or jar with a lid, not a soda can.\"\n    }\n  },\n  \"1b63dd4832144e89955ecf2f70e8af4b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single soda can, which belongs to the specified class. The image quality is adequate, and it depicts an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"1b812a87d8244f54ba527b8c75710327\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash can, not a soda can.\"\n    }\n  },\n  \"1ba8e29182f54cdb949ded96bea003a0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can or wastebasket, not a soda can.\"\n    }\n  },\n  \"1cc055b20dd7432d9a6b38feaa5f6692\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"1ef9262feffb42a18ba510c6b716f063\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single aluminum beverage can, which fits the 'soda_cans' category. The quality is good, and it's isolated against a clean background. This object is suitable for physics simulation.\"\n    }\n  },\n  \"1f48d13605314db8b62808af58a94f4d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a rectangular block, not a cylindrical soda can.\"\n    }\n  },\n  \"1fc1828ec1904802ba39e31209c86ab9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a soda bottle, not a soda can. The requested class is specifically 'soda_cans'.\"\n    }\n  },\n  \"214f7c1c48f64f6099c5e289aa6ae02d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a crushed soda can, which falls under the 'soda_cans' category. The quality is acceptable, and it represents a common state for this object in a game environment, making it suitable for physics simulation.\"\n    }\n  },\n  \"21a02300bd7044d788b73e44616032fe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is adequate, and the object is suitable for physics simulation in a video game context.\"\n    }\n  },\n  \"21b53105b2634ef187a2228d34a7a497\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, suitable for the class. Although stylized (low-poly), it is recognizable and appropriate for video game assets. It is well-lit and clear.\"\n    }\n  },\n  \"222a64dfd30e485cadfab49536ab2919\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"223bea685f984dc1beac00fd1fda166e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low. The object lacks texture and color, and the contrast between the white object and the white background is very poor, making the object difficult to clearly distinguish.\"\n    }\n  },\n  \"25086d394a554e9ca1017f97b6c9c729\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to clearly see the object. Only a small portion of the can top is visible, and the rest is washed out white.\"\n    }\n  },\n  \"251e637afab14c7aa9aae071c574ed1d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object as a soda can. The quality is too low for training data.\"\n    }\n  },\n  \"25673189b79c443aa24b85c404be95a2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily distorted and provides only a partial, warped view of the top of the soda can. It does not clearly depict the object class in a usable way for training.\"\n    }\n  },\n  \"25b65c5b7abd4cf78e58dff08fe58602\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"269cc79ce7ca4dcf88030e7b7151dc36\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related beverage container.\"\n    }\n  },\n  \"26ddd2c0c3484510bd5b6c4ca7a4bed0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"27f09e90c16a41e88dd6a547f67f4b59\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and lacks any texture or detail, making it impossible to confidently identify as a soda can. It appears as a generic black cylinder, which is too low quality for training data.\"\n    }\n  },\n  \"287068a7da8c47369112a933bea4721f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can or wastebasket, not a soda can.\"\n    }\n  },\n  \"28c9e2e9711847398b79f58681149779\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture or detail, making it difficult to identify as a soda can. It looks like a generic white shape.\"\n    }\n  },\n  \"28cc0955a78e4e2596e7585b90ca3be1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains more than one object (two soda cans), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"290f7307b65140dc8f843b4879a58f3d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single soda can of good quality, which is suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"2a29aa47ffd74b6395d07cd270db4735\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can (Red Bull), which belongs to the requested class 'soda_cans'. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"2a6e88ffbd7a4ad796a68a899274ebf6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit), and it shows only the object against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"2c4b0a5fc7614aed96edc8fe18359857\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crushed metal can, which belongs to the requested class 'soda_cans'. The quality is acceptable and it represents a state (crushed) that adds diversity and is relevant for physics simulations.\"\n    }\n  },\n  \"2c5933e817f14a2ca318176e28d84090\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a soda can or any related object. It appears to show a piece of crumpled material with a metallic rivet or button.\"\n    }\n  },\n  \"2c811cf3629842dc805645f79439cf74\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation (e.g., dropping, rolling).\"\n    }\n  },\n  \"2d00ecddc767481ca033490560392944\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an aerosol spray can or a similar pressurized container, not a soda can/beverage can.\"\n    }\n  },\n  \"2d80d079a75141f4a4a555aeffa1b9a4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola). Although it appears crushed or dented, this adds diversity and is still recognizable. The quality is acceptable for training data and relevant for physics simulation (e.g., deformable object).\"\n    }\n  },\n  \"2d92cc12ae7e448f9f508fbbde85c70e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a drink in a glass with toppings (ice cream/whipped cream, cherry, straw), not a soda can.\"\n    }\n  },\n  \"2da946af9bdb4569852789008fd57f5e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2dd1496c4d874a42804832b2bcdeaa92\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit) and it shows only the object against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"2df5e5af39f84f489b77b26e76f6285d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to discern details of the object. This low quality makes it unsuitable for training data.\"\n    }\n  },\n  \"2e97faac48044c31839a0694915004f2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture/detail, making it difficult to identify as a soda can. The shape also appears more rectangular than cylindrical.\"\n    }\n  },\n  \"2e9e6e123b3a40ffa0bc4336f237c94d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a white mesh basket, not a soda can. It also appears to be overexposed/too bright.\"\n    }\n  },\n  \"2f16d399a5cd46139bc74643342ce8e7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low. The object is heavily distorted and blurry, making it difficult to clearly identify as a soda can. It looks more like a generic crushed or melted cylinder.\"\n    }\n  },\n  \"3001868a0c0e42d3a20d3905d796fdc3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks sufficient detail to clearly identify the object as a soda can. Only the very top rim is slightly visible against the white background.\"\n    }\n  },\n  \"30bfa06a68a94728ba17ca3f9c99dea8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola), which belongs to the specified class. The image quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"319051695c2e4cc89605eac4b8879211\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola can), which belongs to the requested class. The image quality is good, it's well-lit, and shows the object cleanly against a neutral background. It's suitable for game development and physics simulation.\"\n    }\n  },\n  \"31fc3dc5c40143e98bd8dcf210a6237f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two soda cans, but the requirement is to have only ONE SINGLE OBJECT per image.\"\n    }\n  },\n  \"32c47e171fc54617aef4c5696f27a7a5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola) against a clean background. The quality is good (clear, well-lit, not blurry), and it represents an object suitable for physics simulation in a video game.\"\n    }\n  },\n  \"33d6fa3c813b445b92a24281202a47d7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"33dbd28d8f894f1091e7a4112ee20e3b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dumpster, not a soda can or any related object from the specified class list.\"\n    }\n  },\n  \"33fb4b71dbb4421a86427d56d892587a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a watering can, not a soda can. Additionally, the image quality is very poor due to extreme overexposure, making the object difficult to see clearly.\"\n    }\n  },\n  \"344bb30c8c02401fa0bd21e5be84eca9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a soda fountain/dispenser, not a soda can.\"\n    }\n  },\n  \"350d0e24758449bbbab39f7375b4d0eb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"354692b361b2406bb91deadde9f620ce\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone a soda can. The quality is extremely low.\"\n    }\n  },\n  \"361d58e7ef5040d28f6ae4e592949c2f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely dark and does not clearly depict a soda can. The object shown is unidentifiable and does not belong to the requested class.\"\n    }\n  },\n  \"36c25d2118bf44488ad8d6faf7fce037\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate for training, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"36d1eb5a0384409b939a48ab04dfd201\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright. The object is barely visible and cannot be identified.\"\n    }\n  },\n  \"37809cf8a36442b1a412abc27348ad8e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the top lid of the soda can, not the entire object. This is insufficient for representing the object class or for physics simulation training.\"\n    }\n  },\n  \"37d3a52f078445e39c98e6274fc75848\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a can of baked beans, which is a food can, not a soda can or beverage can as requested by the class description.\"\n    }\n  },\n  \"3809cb9cf2b74234b209cae46508df92\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (albeit opened with the tab detached, which is a common state). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3817d0662eba4ccfb8c0d7957f07e0c8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3836ff67877248c2a820e6a969984aac\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts dumpsters or large trash bins, not soda cans.\"\n    }\n  },\n  \"38b1dc2520474792801bb9a37a924b61\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional object (the blocky structure) besides the soda can. We need images depicting only the target object class.\"\n    }\n  },\n  \"38e9b8f80ada46f0bd1b76d698d4ca37\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts trash cans, not soda cans. Additionally, the image is too bright and contains two objects instead of one.\"\n    }\n  },\n  \"3959cdc6c8ca475eaa04f9a8d2dbf055\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the specified class. The quality is good, and the crushed state adds diversity and is relevant for physics simulation (e.g., deformation, interaction).\"\n    }\n  },\n  \"3964e19915c34da29815091e1d7a800c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can, suitable for the class. Although low-poly, the quality is acceptable and adds diversity. Soda cans are common objects for physics simulation in games.\"\n    }\n  },\n  \"396d67176e4f4525a2a97a59a5f71ed8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"39f6585a56fc40cf9ce001c136b68d78\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal can, which falls under the provided class definitions (specifically 'metal can' and 'aluminum can'). Although it's crushed and looks more like a food can than a typical soda can, it is still a relevant object for the category and its state (crushed) is useful for physics simulation diversity. The image quality is good.\"\n    }\n  },\n  \"39fc30490ae64668b86ea33c39280e20\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can shape, which is relevant to the class and suitable for physics simulation in a game.\"\n    }\n  },\n  \"3a18261cabeb4d13b819ce5c0dc3f485\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can object against a clean background. The quality is good, and it fits the requested class 'soda_cans'. The object is suitable for physics simulation.\"\n    }\n  },\n  \"3b4da8a238644ee7b02898096636d6f3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a soda can or any related beverage can. It appears to be a stylized container or basket, possibly a bin or part of a larger structure, with a cage-like top.\"\n    }\n  },\n  \"3bdfbfb9277746f897b5a3b5eeab24bc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a stylized weapon (possibly a shotgun or launcher), not a soda can.\"\n    }\n  },\n  \"3c59065fb82f4afb83ff0b756b25547c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an open metal can, likely a food can (like soup or beans), not a typical soda or beverage can. Soda cans have a distinct shape and opening mechanism.\"\n    }\n  },\n  \"3c5ebe6a312c41f89c3e77e0322131c4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a box, a spotlight, papers, multiple cans) rather than depicting a single soda can in isolation.\"\n    }\n  },\n  \"3cb28321e7784d15aea3fec16f07e6f3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in and blurry. It does not clearly depict a soda can; only a small, indistinct portion of a potentially metallic surface is visible.\"\n    }\n  },\n  \"3d0c9c38f10b4e739db811893dbac786\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can, which fits the requested class 'soda_cans' (including terms like 'aluminum can', 'beverage can'). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3d7d352abe4e4e9a8ca048268f26c66c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The quality is acceptable for game development, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"3d97cd65e13641a4a63f78490c748e18\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single cylindrical object consistent with the shape of a soda can or metal can. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3e95afcfbd394675a8d63adb344d9695\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be an old, rusted oil can or jerrycan, not a soda can or beverage can. Its shape and features (cap, handle) are inconsistent with the target class.\"\n    }\n  },\n  \"3f025f54191749daa88eb352554b2cbe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pack of multiple soda cans, not a single soda can as required by the instructions.\"\n    }\n  },\n  \"3f394b237f964456aaf61a310058ec3b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can/beverage can. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3f9bb348efda4f769f3ddf7900f9620c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a square container, not a cylindrical soda can.\"\n    }\n  },\n  \"408fb7a0597f47ad957db91d1821da90\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training purposes, even with the simple texture, and it's a common object for physics simulation in games.\"\n    }\n  },\n  \"40f7d2c5d8ff47a7a2fb85dc41ff6c73\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to see the details or even the full shape of the soda can. Only the very top is barely visible.\"\n    }\n  },\n  \"4188c24e47254ec3bebe9a46af7eefe4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, and only shows a small portion (the top) of the soda can. It does not clearly depict the full object.\"\n    }\n  },\n  \"4189fb8e955a4999a268b071cbc7098e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate for training purposes, and it represents an object commonly used in physics simulations within video games.\"\n    }\n  },\n  \"430aeed71ba54f35b5d49011278238f5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a planter or bin, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"4421768a05464242bcea4516ee686458\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor; it is excessively bright and washed out, making details difficult to discern.\"\n    }\n  },\n  \"444380c04bf14b2c9f4166723eb25636\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and only shows the very top part of the soda can, not the full object, making it difficult to discern details and unsuitable for training.\"\n    }\n  },\n  \"44513b83c2254f5d853a816241b022b8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4472e0073184489bbefeecc89281e735\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract drawing of an eye, not a soda can.\"\n    }\n  },\n  \"44c888130b7d4debbfd9f5db5e3a023f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple soda cans, but the requirement is to have only ONE SINGLE object per image.\"\n    }\n  },\n  \"4551ff1f90244f9c80c7e79a0206f717\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single, crushed metal can, which fits the description of 'aluminum can' or 'metal can' within the 'soda_cans' category. The quality is acceptable, and a crushed can is a plausible object for physics simulation in a game environment.\"\n    }\n  },\n  \"45d76185eaa94296aa68c29abd8dcda0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can of good quality, suitable for the class and physics simulation.\"\n    }\n  },\n  \"47c9a0cfb259423197688708494020b4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wastebasket or pen holder, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"47f4cbca51b841ba926baeff503a83d0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a waste bin or planter, not a soda can or any related beverage can.\"\n    }\n  },\n  \"47f925f2aa1e4c4a8f4fe1f6f85adf7d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation. The small surface it rests on is minimal and does not detract significantly from the main object.\"\n    }\n  },\n  \"4822e174c03c473ba922cb81d45fecb0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a trash can, not a soda can or any related beverage container.\"\n    }\n  },\n  \"48473effcdd444c8b0413e66bbf14bef\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two soda cans, but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"485af512e9844dbdb8543a1652792890\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to discern the details of the soda can. The object blends almost completely into the white background.\"\n    }\n  },\n  \"4955831f8cf541fbb87fa3ce719b8d72\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a soda can or any related item like an aluminum can or beverage can. It looks more like a trash bin or a decorative container.\"\n    }\n  },\n  \"497338f473004346a46126cf6529ad2e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4ac179c3447f4636a273d8574a61a1c5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit) and it shows only the target object. Soda cans are suitable objects for physics simulations in games.\"\n    }\n  },\n  \"4ace4fbc91124683976db7e9530f98ae\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good (clear, well-lit), and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"4b20d55f60474ed1995509ef7292b743\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4b6af44cf17d41eeab1076c3b99e4f5d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single soda can against a clean background. The quality is good, and it fits the requested object class. The texture is slightly stylized, but it is easily recognizable as a beverage can and adds diversity.\"\n    }\n  },\n  \"4bb3f5a1efb64f899aede309de4d63aa\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three cans), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"4bb75b0b0c084a46878aaa20e9613e99\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it very difficult to discern the object's details or even confirm it is a soda can. The quality is too low for training.\"\n    }\n  },\n  \"4c562321b4824284bccd26ac13c11e33\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and only shows a small portion (the top) of the soda can, making it difficult to recognize the full object and assess its properties. It lacks sufficient detail and completeness for training.\"\n    }\n  },\n  \"4c6aa70a707c48b4bb0a4db932b30dda\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training purposes, and it's a common object suitable for physics simulation in games.\"\n    }\n  },\n  \"4c78e610c0c14e4fa5a456de7f577b77\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape (especially the rounded top and the gap) and texture do not resemble a typical soda can.\"\n    }\n  },\n  \"4e0be610db9646929d8be84491f1a72f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple soda cans, but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"4e5d012176e5459d9b8cad929999072e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4efef883e04a45f99eb2fde1ed60e48e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making the object almost invisible and impossible to identify clearly. The quality is too low for training.\"\n    }\n  },\n  \"4fab339a56104e21b684693889d4586d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a soda can or any related object. It appears to be some kind of floral arrangement or offering.\"\n    }\n  },\n  \"516f4cd684184181b5a31e3781ac0957\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the specified class. The quality is acceptable, and a crushed can is a relevant object for physics simulation in a game environment.\"\n    }\n  },\n  \"5172a10f77964008a8e21deae03c6901\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making the soda can almost invisible and unsuitable for training data due to low quality.\"\n    }\n  },\n  \"51ae5554073a49fd9b4961975f847707\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"5345e829c48944e6934a5a7aec414246\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metallic box, not a soda can. The shape is rectangular, not cylindrical like a typical soda can.\"\n    }\n  },\n  \"5465c0ae35fd4c92861e69aec6e5d81a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object as a soda can. Only the very top rim is slightly visible against the white background.\"\n    }\n  },\n  \"5471355c677647849d4f6d495906607e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit, not blurry) and it shows only the target object against a clean background. Soda cans are common objects in games and suitable for physics simulation.\"\n    }\n  },\n  \"54d279b8d1b94864abd6987912d73741\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"554c294a093448039a57c7d0cc713102\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a heavily damaged and rusted can, making it difficult to definitively classify as a soda can and less representative for learning typical physics parameters of the class.\"\n    }\n  },\n  \"576e6bcadb764bb5ad91bf48d93a95a5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash bin, not a soda can.\"\n    }\n  },\n  \"57a01efd28664881b0ea3abe8dc922b9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low; it appears blurry and lacks sharp details, making it less suitable for high-quality training data.\"\n    }\n  },\n  \"57b87344eec2465cb0c3851ca4a38e90\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metal trash can, not a soda can or any related item like beverage can, aluminum can, etc.\"\n    }\n  },\n  \"584ce7acb3384c36bf252fde72063a56\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in or cropped, making it impossible to identify the object as a soda can or any related item.\"\n    }\n  },\n  \"58e68c3c29744d629e3a9c0bfb6744ee\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks contrast, making the object almost invisible against the white background. It's impossible to clearly identify it as a soda can or assess its quality.\"\n    }\n  },\n  \"593c4213b7f54b6cb4c0e284b9754b2d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a low-polygon geometric shape and does not resemble a soda can.\"\n    }\n  },\n  \"5a1593091e5d40d19ac3b842bd4aaefe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wire mesh basket or trash can, not a soda can.\"\n    }\n  },\n  \"5a4677f178764b0388de833ce4b501a0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5a561e2ad060465fb9452eba307a76b1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a rectangular block, not a cylindrical soda can.\"\n    }\n  },\n  \"5a7ae8e0097c4eea85e975d34031a538\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a soda can, but also includes three floating spheres above it, which are extraneous objects. We need images depicting only the single object (the soda can).\"\n    }\n  },\n  \"5ae7c0b5eb0c4727a91a6dcc60fa7c60\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a can, but its shape (short and wide) is more characteristic of a food can (like tuna or pet food) rather than a soda can or beverage can, which are typically taller and narrower.\"\n    }\n  },\n  \"5b35197337364d22935e6fd0d73864ac\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rock or mineral on a wooden base, not a soda can.\"\n    }\n  },\n  \"5ca5518ee79d422399a30814e2a293cf\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the requested class. The quality is acceptable for game development, and the crushed state adds useful diversity for physics simulation (e.g., deformation).\"\n    }\n  },\n  \"5ced3dc0737a4fdbb601a6c8e281e61d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two soda cans, but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"5df47c5d4d5b4e00a627b42221cd3392\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fire extinguisher or a similar type of canister, not a soda can.\"\n    }\n  },\n  \"5e1c5212624041a8901dfe3503107bde\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too abstract and lacks the texture and details (like the top pull-tab area or metallic sheen) to be clearly identified as a soda can. It looks more like a generic cylinder or cup.\"\n    }\n  },\n  \"5f03a624defc4596b44e0a09480615be\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cup with a lid and straw, not a soda can.\"\n    }\n  },\n  \"5f13b7f305e144f4bc380ebc4531600d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bottle, not a soda can. The requested class is specifically for cans.\"\n    }\n  },\n  \"5f38d9e1eeb94083adf9ad96dd906712\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can, which falls under the 'soda_cans' category (including 'aluminum can', 'beverage can', 'metal can', 'canned drink'). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5f58898e80fa4b11ab2ae9668d6aaa24\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"5fce345c30b54c58bf68413d2335c3a6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"5fec4e7648e248c58748b99353ff22ab\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several cans), whereas the requirement is for a single object per image. Additionally, the objects are very small and distant in the frame, making it difficult to discern details.\"\n    }\n  },\n  \"602dcf478b4e40e59e7a9613a13b32dd\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training purposes and it's suitable for physics simulation.\"\n    }\n  },\n  \"608514c9154f4075924bd85351079437\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a crushed beverage can, which falls under the 'soda_cans' category (specifically 'beverage can', 'metal can'). The crushed state adds diversity and is relevant for physics simulation scenarios (e.g., litter, impact). The quality is acceptable.\"\n    }\n  },\n  \"6118fc545f384653ba20e0ad454c6129\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a soda can. It shows generic cylindrical containers or canisters, which are not representative of the target class.\"\n    }\n  },\n  \"61f67a262a8c4a22bcb2e9059636b6d6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"626389bbefe342289b7214a5186cefb0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble a soda can or any related beverage can. It looks like a futuristic container or dispenser, possibly cut in half.\"\n    }\n  },\n  \"640b0c8287274629a7f4ff3ce74a5999\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted looks more like a food can (e.g., for soup or vegetables) rather than a typical soda or beverage can, based on its proportions and lid design. While it is a 'metal can', it does not strongly represent the 'soda_cans' class.\"\n    }\n  },\n  \"643479c457164b7bb9bf180f0ceb8757\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains glasses filled with liquid, not soda cans. It also depicts multiple objects instead of a single one.\"\n    }\n  },\n  \"64577337973647b9a9b33ecb73bcc52a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can, which belongs to the 'soda_cans' class. The quality is acceptable for training purposes, and it's a relevant object for physics simulation.\"\n    }\n  },\n  \"64719ae5723144818898a1474781a0ce\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks any texture or detail, making it impossible to identify the object as a soda can. The object blends almost entirely into the white background.\"\n    }\n  },\n  \"65d4eef2ea6d40a38a07c5b421d1bc68\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can with good lighting and clarity. It is suitable for the requested class and for physics simulation.\"\n    }\n  },\n  \"6656644a95fe417dba5af25d018b06e3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a white plastic basket or filter, not a soda can or anything related to the requested class.\"\n    }\n  },\n  \"66742a2e89ca46bda24f357ccc0a0acd\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object. The object itself is also extremely small within the frame.\"\n    }\n  },\n  \"685c0c5a9c3f4144993c4f146a527d8d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metal trash can, not a soda can.\"\n    }\n  },\n  \"68bcd3aba50240a3a34219003b1ed01a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soda cans), while the requirement is for images depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"6905e85a52cf4c5da93567e7bf487404\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making the object barely visible and unrecognizable as a soda can.\"\n    }\n  },\n  \"6c9596a6f5d0447aa7221d0bac6c1293\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good and suitable for training data. The object is relevant for physics simulation in a video game.\"\n    }\n  },\n  \"6d4998a63fa0496f9cd48b15ad59f463\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good (clear, well-lit) and it's suitable for physics simulation.\"\n    }\n  },\n  \"6dfa9d77b23d448cb90d01d402c91108\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden bucket, not a soda can or any related object.\"\n    }\n  },\n  \"70625b40007b4b6790dc6dad39b88d25\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape and texture do not clearly resemble a soda can or any related beverage can. It looks more like an abstract container or cup.\"\n    }\n  },\n  \"70ca81fe6f1546efabbfdbe5cfe81955\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"710061d2426349c097e0bd59c279c333\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making the object barely visible and unrecognizable as a soda can. The quality is too low for training.\"\n    }\n  },\n  \"710ced8a3938465197c19755f8142db3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is rectangular and blocky, not cylindrical like a soda can. It does not resemble any item in the 'soda_cans' class.\"\n    }\n  },\n  \"715f375555634780890d84a00a2007ec\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola can) with good quality and lighting, suitable for the class 'soda_cans' and physics simulation.\"\n    }\n  },\n  \"71669f5079874f8e95d27bbdaca0e4cc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"7306d77eab4d49ceb85fc63a77f6ec70\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure or framework, not a soda can.\"\n    }\n  },\n  \"739992f09ee34b8db3217520c31b2c2b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the target class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"73d6f638c8b04d5b8593eb01766d448b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a soda cup with a lid and straw, not a soda can (aluminum/metal can) as specified by the class list.\"\n    }\n  },\n  \"757489dfb8534e40934daab25ac01da1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small, round tin, possibly for cream or ointment, not a soda can or beverage can.\"\n    }\n  },\n  \"76262ad4b5544dc9bec5d715001c8ded\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"76c8a21063564b7fa658bf7b2819e1ce\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training data, and it's a relevant object for physics simulation in a game.\"\n    }\n  },\n  \"7770f54f4bec4456b088b1de2f3f8818\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a glass bottle, not a soda can (which is typically made of aluminum or metal).\"\n    }\n  },\n  \"7801926855924780bd4269c671cf0fae\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola) belonging to the specified class. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"783d25f6110d440ca91b2083e0149188\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making the object almost invisible and impossible to identify clearly as a soda can. The quality is too low for training data.\"\n    }\n  },\n  \"78c22afa5212423690b5712b40bdfa5f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"78cc4a0493974864b460bba37dc76b43\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"790fe3da984a408da1c18086b5e60bb6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plastic soda bottle, not a soda can (which is typically made of aluminum or metal).\"\n    }\n  },\n  \"793e4921baa1435399f8085d4b885466\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash can, not a soda can. While there might be a can inside, it is obscured and not the main subject of the image.\"\n    }\n  },\n  \"79bc3c7436214c39ad32e03e1b164738\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola), which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"7a54b5302f40454590e876a76146ad80\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"7ac7e1d92a8a45108916d1ccd0908caf\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"7b1b08aaee1c43b99c2d6797a7ee9c34\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that belongs to the 'soda_cans' class (specifically, an aluminum/beverage can). The image quality is good, and the object is isolated against a clean background. Cans are common objects in physics simulations.\"\n    }\n  },\n  \"7b29d29bb72e4bb3bd7401ab98c27915\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object as a soda can or discern any details.\"\n    }\n  },\n  \"7b8db9739c0d4feb98c491dff882060d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"7bd87ea90ec44d73867e3a91fe7efefb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"7daf996679c64815b48f650d1b3ff82d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"7dd41c5905dc4244846de06845fa3784\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a severely distorted and fragmented object that is unrecognizable as a soda can or any related item. The quality is too low for training purposes.\"\n    }\n  },\n  \"7e064d2cc7154290a771342147893621\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden structure, possibly a bin enclosure or small shed, not a soda can or any related item.\"\n    }\n  },\n  \"81a1f27f185f4b72a379602ec10b6012\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only the top part of a can, and its proportions (very wide and short) make it look more like a food can (e.g., tuna can) rather than a typical soda can.\"\n    }\n  },\n  \"8231fffef92d46f7ad656b773cb7486a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola), which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"82573d9b716d49679e0b47f2eaae854c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a crushed soda can, which belongs to the specified class. The quality is good, and it represents a valid state for physics simulation.\"\n    }\n  },\n  \"8300ee896a4145a89aa3f18cfddccdbb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"835a91de425147aaae2a05ea9d6ef308\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash receptacle and scattered trash, not a single soda can.\"\n    }\n  },\n  \"83802e475bb741cab0560a10fc5b2c31\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a soda maker or a similar appliance, not a soda can itself.\"\n    }\n  },\n  \"84ffce6116784c82b19708986b6b015d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (a soda can and a soda bottle), but the requirement is for images depicting only ONE single object.\"\n    }\n  },\n  \"854a178a730e41398124f2bdb7c0ae74\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is rectangular and looks more like a metal post or beam, not a cylindrical soda can.\"\n    }\n  },\n  \"854eb2eefb0b4828b2af3b2dc243136a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere with a space/galaxy texture, not a soda can.\"\n    }\n  },\n  \"85b8beb2b34e496791a489b12de7803d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can, suitable for the class. The quality is adequate for training, and it represents a common object for physics simulation.\"\n    }\n  },\n  \"8692b93aad0847cdad555d3e70c75da5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The objects in the image resemble barrels or large industrial cans rather than soda cans. Also, there are two objects present, not a single one.\"\n    }\n  },\n  \"86fc31e805f84be28c12c43c34c56f80\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single soda can (Coca-Cola can) which belongs to the specified class. The image quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"87930f0080814d65b5add1987327e122\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can with a distinct texture. The quality is good, and it's suitable for representing a beverage can in a physics simulation.\"\n    }\n  },\n  \"87d5bce4301c46d4b02ac318970b975f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a glass with a drink and a straw, not a soda can.\"\n    }\n  },\n  \"882a37821d24474d9fd36006ce2783d8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for game development, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"89bada2350d04d5d8005a5c0bbde6ca8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a disposable cup with a lid and straw, which is used for soft drinks, but it is not a soda can (typically made of aluminum).\"\n    }\n  },\n  \"8a1fd19bb9e54550a4345cab9941e6a7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a soda bottle, not a soda can. The requested class is 'soda_cans'.\"\n    }\n  },\n  \"8a58e2bfeb234a078975be3f4bedbd33\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"8a9b1d4638d340a9807988caa2b50699\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is not a soda can. It appears to be a jerry can or some other type of industrial container, not a beverage can.\"\n    }\n  },\n  \"8b08570d2cef4471b971ea11ac4fe3ff\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble a soda can or any related item. It appears to be two stacked block-like shapes, and the image is too dark to clearly identify the object or its material.\"\n    }\n  },\n  \"8b92426659dc4b0eb303c7d7280727b8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"8be6f79dd6704fc4a04cdfad08a2bb9e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright/overexposed, washing out details and making the texture look low quality.\"\n    }\n  },\n  \"8ccfd3bd1afa45a3af6f0738743e972b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"8ce213cab51a4ab793c58dbbf0de9195\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a cup or glass with a straw, not a soda can.\"\n    }\n  },\n  \"8ce8f9c97bc8440793157ca547e312a2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is a glass container with liquid, not a soda can. Soda cans are typically cylindrical and made of metal.\"\n    }\n  },\n  \"8d1c092f61ac4e239d2010688e170085\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects instead of one, and it is excessively bright, washing out details and making it low quality for training.\"\n    }\n  },\n  \"8e273ad665824e869a4d6440cb426dea\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training, despite the somewhat pixelated texture, as the object is easily recognizable. It is suitable for physics simulation.\"\n    }\n  },\n  \"8e98967d2401412b8edc7ac8bd355daf\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"8ef390c3554842049efaf620629728b3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which fits the requested class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"8f17d17132b6409b8716ecf272061748\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. While the texture quality is somewhat pixelated, the object is easily recognizable and suitable for use in physics simulations within a video game context. The lighting and composition are adequate.\"\n    }\n  },\n  \"8f17f58aa4f341aea0269904faa5f15e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/bright, making it impossible to see the full shape or texture of the soda can. Only the very top opening is vaguely visible.\"\n    }\n  },\n  \"8fa1dddf301b447eb1c9560040d75fb6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"902ea378c9a547cb9031a253f550fb8a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and stylized (voxelated/blocky). It does not clearly depict a recognizable soda can.\"\n    }\n  },\n  \"916ee4c40aa74b54923ec5b20004c577\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can.\"\n    }\n  },\n  \"91a4fc72e68a4313ac6733b2dd9756ee\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"928c257acd794839bc912a8df956bc7a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash can, not a soda can. Additionally, the image is extremely overexposed and lacks detail, making it low quality.\"\n    }\n  },\n  \"931d29a29b144cf6b785bf826c8aadd1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image resembles a glass or vase, not a soda can. The shape is incorrect for the target class.\"\n    }\n  },\n  \"93866874c4fa43f8b0befd8c3c03b580\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the very top rim of a cylindrical object, and the rest is completely washed out or missing. It does not clearly depict a soda can and is of very low quality.\"\n    }\n  },\n  \"93ea41969bf94511bdbc814834453873\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a bottle, not a soda can. Additionally, the object is extremely small in the image frame, making it difficult to discern details and assess quality.\"\n    }\n  },\n  \"94cebba4189646559f4200ad663bf30d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related beverage container.\"\n    }\n  },\n  \"94eedae37938412e8228cdd53bc856b1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a trash can, not a soda can.\"\n    }\n  },\n  \"9597bac9cfa946feb1e7fa2c41a3ebf9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single one. Additionally, the objects are very dark and lack the distinct features or textures typically associated with soda cans, making them difficult to identify clearly as belonging to the target class.\"\n    }\n  },\n  \"96aa6a20264848ab9c5be2478594ec44\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (five soda cans), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"96b925daae4d4dc89035123053d3055c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"9709dbae6c1e483180229c241ba04af6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"9818250a938546daba94389fd9171b69\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a trash can, not a soda can or beverage can.\"\n    }\n  },\n  \"986050ad95ca444caa07026c033e548a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely washed out and too bright, making the object almost invisible and unrecognizable as a soda can.\"\n    }\n  },\n  \"98c0fdc024494e6cafd322cbdfad7b89\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it is suitable for physics simulation purposes.\"\n    }\n  },\n  \"990933dd66b94d4ba934fc2f3fc95e90\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"990c08d7445743d8897841f82466e80a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"996516d842954aff9a3011d17727f7e0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"9965b7b5f7e04f2a9ecb6454741cc3fb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"99ed8d6c46c343729e63a0a581599add\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it is suitable for physics simulation purposes.\"\n    }\n  },\n  \"9a2c379684ed4ceb849d97a473c21e2c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the target class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9a492ec286494760859c2f5da23deb18\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rectangular container, possibly a planter or bin, not a cylindrical soda can.\"\n    }\n  },\n  \"9a8a172dc7f64f7fab80894393eb2314\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9a978cc6eac44e2babddca28abc3b4d9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it very difficult to clearly see the object. Only the very top of the can is slightly visible, and the rest is lost in white.\"\n    }\n  },\n  \"9a9eedff0d694219a6b22eb3317d1a66\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, not a soda can or any related object from the specified class list.\"\n    }\n  },\n  \"9b5ccf74eee5402686665c51aa126d61\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is not a soda can or any related type of beverage can. It appears to be some kind of container or possibly a stylized trash bin.\"\n    }\n  },\n  \"9bd3798628d147f3a2cfb5f6e32a63f2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soda cans) instead of a single object as requested.\"\n    }\n  },\n  \"9ceb9df031ce4615a772f2da4607724f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bottle, not a soda can. The shape is incorrect for the requested class.\"\n    }\n  },\n  \"9d136cd754054ee5b08119030e07f7aa\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks detail. Only the very top rim of a potential cylindrical object is faintly visible against the white background, making it impossible to clearly identify as a soda can. The quality is too low.\"\n    }\n  },\n  \"9d328cf4545e44efb315a96e11654174\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash bin, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"9d6496b196914955bee18a64cb60c870\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a coffee container (Folgers tub), not a soda can or beverage can as defined by the class description.\"\n    }\n  },\n  \"9eb3a65d95b44fa793246cd238030ae2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash can and trash bags, not a soda can or any related object from the specified class list.\"\n    }\n  },\n  \"a00a103c66634866bcff38172fa31a7d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, and the object is very small and lacks detail, making it difficult to clearly identify as a soda can. The quality is too low for training data.\"\n    }\n  },\n  \"a0a1eaf4185c440c816bc085f1af4bfb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single beverage can, which fits the 'soda_cans' class description (including terms like 'beverage can', 'aluminum can', 'metal can'). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a0a6b0c8378041e0ba0ed6adae1b93c8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple stacked objects that resemble bins or cups, not a single soda can.\"\n    }\n  },\n  \"a0e1bc11ca774a5e9f9379159aa0268b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict the object (soda can). Most of the can's body is missing or blends completely with the white background, making it unrecognizable and unsuitable for training.\"\n    }\n  },\n  \"a106786fe6b841639ef2234a93d91cd8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"a1335f1604b84ad9acda9177743bd890\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"a169b9d5818245168ea45e568fde3551\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a1a0847b92e446aa9ba5dfebe26568d5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the specified class. The quality is acceptable for game development and physics simulation, representing a deformed state of the object.\"\n    }\n  },\n  \"a1fb3ec987264287a2d7d6e999b36db3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soda cans stacked) instead of a single object as required.\"\n    }\n  },\n  \"a253b66202a64a56840ea4eb131e4fff\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The image quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"a26f1dc89ed24e39bcf89dd620673669\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vending machine, not a single soda can as requested by the class 'soda_cans'.\"\n    }\n  },\n  \"a373348973f44a6c9e764605c636af5e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can (aluminum can), which fits the requested class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a377b36213034bbeb7a4903f936b76d7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three views/instances of a soda can), violating the requirement for cleanly depicting ONE SINGLE OBJECT.\"\n    }\n  },\n  \"a3fc2ab724c949c5b38d2059782906e4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The bottom half of the soda can is extremely overexposed and too bright, obscuring the details and making the image low quality.\"\n    }\n  },\n  \"a52c6461680d4293a8ae8d29c26ad1d5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble a soda can or any related item. The shape is significantly different from a typical cylindrical beverage can.\"\n    }\n  },\n  \"a59abc3314d04fe1b00f00a7b16fad4d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a coffee can or a food can, not a soda can. Soda cans typically have a different shape and a pull-tab opening on top, which this can lacks.\"\n    }\n  },\n  \"a6cfd144a62e446c92f0987fb81d584f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a container with a lid, which looks more like a paint can or a food tin, not a soda can or beverage can as described in the target class.\"\n    }\n  },\n  \"a711de72361148b08b6d6d0a9195af64\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble a soda can. It appears to be some kind of abstract geometric shape or possibly a stylized bin, and it is also too bright, washing out details.\"\n    }\n  },\n  \"a7229ddcde4043f6a0e34ef3f6df19ff\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two soda cans, but the requirement is to have only one single object per image.\"\n    }\n  },\n  \"a7488154cf664a579a7c1fbc87235208\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a can, but its shape with prominent ridges is more characteristic of a food can (like soup or vegetables) rather than a soda can or beverage can.\"\n    }\n  },\n  \"a844b690449946ecb743c31e3ca3271b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a 3D model of a building, not a soda can or anything related to the specified class.\"\n    }\n  },\n  \"a8d5499be15f420dbd1379c33ebee4be\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a public trash bin, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"a8e5fa12b9644b21899bfd1a3f3ac1c2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is rectangular and appears to be a piece of furniture or electronic equipment (like a speaker or small cabinet), not a cylindrical soda can.\"\n    }\n  },\n  \"a9a9cd4a15194cf29772f2cfe336f301\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"a9ec83449cb54f56852f6090e45c682a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a metal trash can, not a soda can or any related object from the specified class list.\"\n    }\n  },\n  \"aa584c852bd647ca978d7f00efc72c5c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a dumpster, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"aaa11e57064848268d701a3586792d0d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for game development purposes, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"ab98557c5e3e495e8268754413cf29b5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too dark and the object's shape is not clearly defined enough to be reliably identified as a soda can. It lacks the characteristic features and details.\"\n    }\n  },\n  \"abc62a02babf4acea619b36db1c6d864\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, anthropomorphic character resembling a soda can with legs, not a standard soda can. This is unsuitable for learning realistic physics parameters for the object class 'soda_cans'. Additionally, the image quality is low.\"\n    }\n  },\n  \"abfabd0ce5f147fb9ce0b1e53a49e55a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"ac4d669a204f4995be019eff0cb27628\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"ac6e1946611e49419940903b14c9b5e0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"aca52679c57142ca9c92fa31b4690b35\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex, fantastical contraption, not a simple soda can as requested by the class description.\"\n    }\n  },\n  \"acfffb86384e43f9bad4b8ff4b802f7b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very low-polygon, abstract representation that barely resembles a soda can. It lacks the necessary detail and realism to be useful for training or physics simulation.\"\n    }\n  },\n  \"ae108b290236439cabe308cf2821e755\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"ae68a6ab5a724d33b1adbee86a774527\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a trash can, not a soda can.\"\n    }\n  },\n  \"af95b4cef0424857a10ab3ba07244619\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vending machine or refrigerator, not a soda can.\"\n    }\n  },\n  \"afce0b6ac8284e66883b6ba64a29565c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely low contrast and washed out, making the object almost invisible and impossible to identify as a soda can. The quality is too low for training data.\"\n    }\n  },\n  \"b05f49c1807a497bbcfe7a48b5884fc9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola can), which belongs to the specified class. The image quality is good, and it shows a standard object suitable for physics simulation.\"\n    }\n  },\n  \"b069d9a6359947289647ec2faba06702\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can/beverage can. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b0997492583c4309a1b90e2ed0e27709\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains boxes of baking soda and bottles of dish soap, not soda cans.\"\n    }\n  },\n  \"b0cc38534bb149489a8f0003d69bd57b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game environment. The stylized texture adds diversity.\"\n    }\n  },\n  \"b1886fdc827c4d44b66be40ca38ad3f3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coke can) which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"b1937273e63247c29080b87e250cdf03\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related beverage can.\"\n    }\n  },\n  \"b21cc66e2aee47e88489efd8f2616319\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can/beverage can. The quality is acceptable for training purposes, despite some brightness towards the bottom.\"\n    }\n  },\n  \"b2563a127c4e4d559713e7af5923dc3a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"b3101b84f826423697c46c302e840deb\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is adequate, and the object is suitable for physics simulation in a video game context.\"\n    }\n  },\n  \"b31a6fab683a47ab897bcd46e92b1b8b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts barrels or drums, not soda cans. The objects are the wrong size, shape, and type for the requested class.\"\n    }\n  },\n  \"b3257907af8248ab99cd27ff8c6a86d1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beverage can, which belongs to the 'soda_cans' class. The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"b35db4f477144eda815eceb30ff9eb19\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pink, blocky, abstract object that does not resemble a soda can in any way.\"\n    }\n  },\n  \"b38aa24407bd4df7aabe3e407135e607\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone a soda can. It appears to be overexposed or corrupted.\"\n    }\n  },\n  \"b3bfd8ec7a1849f0bade5298dc207340\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can with good quality and lighting. It is suitable for physics simulation training.\"\n    }\n  },\n  \"b3f2d2309afa4431bd2da501aea51592\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bottle, not a soda can. Soda cans are typically made of metal (aluminum) and have a different shape and opening mechanism.\"\n    }\n  },\n  \"b42722fc90774768bd619897657aae82\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object almost completely invisible and unidentifiable. It does not clearly depict a soda can and is of very low quality.\"\n    }\n  },\n  \"b450aa89357849f9afd24959369770d0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash bin or pedal bin, not a soda can.\"\n    }\n  },\n  \"b47bae44c2bd460b8ce194c6c43fd77d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only the pull tab of a can, not the entire soda can itself. It does not clearly depict the object class 'soda_cans'.\"\n    }\n  },\n  \"b521c9a1162d45d2b4f138206e114fd2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate for training data, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"b555371c60fd4dc1879f6fb34cae240c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a metal trash can, not a soda can.\"\n    }\n  },\n  \"b5bf847e1660449dbcd14b0601b44ec6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, lacks texture, and blends significantly with the white background, making it appear washed out and low quality.\"\n    }\n  },\n  \"b6baa101ae8b4079b0564d74c7f4d103\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and only shows a small portion of the object (the top rim), making it impossible to clearly identify it as a soda can.\"\n    }\n  },\n  \"b82ce3af0ebd465f86960db28704abb1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the top part of the soda can; the main body is cut off or missing. This does not depict the full object clearly.\"\n    }\n  },\n  \"b92be47157c54e8293927232b985b5a0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a glass or cup with liquid, not a soda can.\"\n    }\n  },\n  \"b9dbc5ee67d24be38603d60c1f493e50\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly see the object. Only a small portion of the top is vaguely visible.\"\n    }\n  },\n  \"ba31c57e764e4ed6bad5360ec47f2241\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"ba56c29685bf45178bcb9ada8e3b8121\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a rectangular prism, not a cylindrical soda can. It does not resemble any item in the 'soda_cans' class.\"\n    }\n  },\n  \"ba7e9af9841b4747aff873c9b383ab37\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a glass soda bottle, not a soda can as requested by the class definition.\"\n    }\n  },\n  \"babf04ce4e8b4b198c1671468d7c7f1a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object barely visible and lacking any discernible detail. It does not clearly depict a soda can and is of very low quality.\"\n    }\n  },\n  \"bb29c9da29c1416098a41e6b69466c6e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"bb575d75beda4c878d0b158e29eb7fbf\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, washing out almost the entire object. Only the very top and a hint of the bottom are visible, making it difficult to clearly depict the soda can.\"\n    }\n  },\n  \"bbe354abb6714da9b5a405487a2987ac\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola) with good quality and lighting. It is suitable for the class and relevant for physics simulation.\"\n    }\n  },\n  \"bc297fd86f2841ccb9a4f9d6b4c529c9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soda cans), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"be14535020724c3ca3328ec9e271ee0b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can/aluminum can against a clean background. The quality is good, and it's suitable for physics simulation purposes despite the somewhat stylized texture.\"\n    }\n  },\n  \"be889ff6886a4e89a089658364cd4816\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash bin, not a soda can.\"\n    }\n  },\n  \"bf7902fb64644da3beb0ce1fce07f4aa\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c0977a83efb24380a3520e6e2b9d60a8\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a large metal container with a lid and handles, resembling a trash can or storage container, not a soda can.\"\n    }\n  },\n  \"c0bf72e4f45242e8bf61de7f6cab12a3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a crushed soda can) belonging to the requested class. The quality is good, and a crushed can is relevant for physics simulation (deformation).\"\n    }\n  },\n  \"c0de336fc34146eea18f10363fe24f84\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bottle, not a soda can. The class requires images of cans (aluminum, metal, beverage, etc.).\"\n    }\n  },\n  \"c142b950461a419aa6423feebeb15a1f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, making it difficult to discern details. Additionally, it depicts two objects instead of a single one.\"\n    }\n  },\n  \"c1a422e9f21d4b8ba847f7941dde98f6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can with adequate quality and is suitable for physics simulation.\"\n    }\n  },\n  \"c1b4b95dd16546ffa7a12ca27f8f2e34\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a soda cup with a lid and straw, not a soda can as specified by the class list.\"\n    }\n  },\n  \"c23e4118c86946d9bc9508c40359e463\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and it is suitable for physics simulation purposes.\"\n    }\n  },\n  \"c33bc950cc5f4108b3e773bc7d3bc23e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash can, not a soda can.\"\n    }\n  },\n  \"c38d6aded9724a1694a941f7522a5ca3\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can (specifically a cola can). The quality is acceptable, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"c3cc5a3e1b5f47cbaf841aee7125b759\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"c4526bf6c2ba48f8acaad9a0783b0d1a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. Although it's a low-poly model with a stylized texture, it is recognizable and suitable for use in a video game, including physics simulations.\"\n    }\n  },\n  \"c4daf79847244e29baa267603db6d378\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple low-resolution, semi-transparent cylindrical objects that do not clearly resemble soda cans. The quality is too low, and the objects are too abstract for the intended purpose of physics simulation training.\"\n    }\n  },\n  \"c63a465fc3fc4b5dac6bf385bd954c2c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"c652836672494da79d507d56411a62e5\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, the object is heavily distorted and blurry, making it difficult to clearly identify as a soda can.\"\n    }\n  },\n  \"c85b4c605dc748c5bdbd4e63bf996234\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape (especially the octagonal top) and texture (worn, possibly stone or concrete-like) do not resemble a typical soda can. It lacks characteristic features like a pull tab or standard can top.\"\n    }\n  },\n  \"c892780a9051410a945456797dca1c48\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blue plastic bucket or container, not a soda can.\"\n    }\n  },\n  \"c9c6bae3e2ec401aad393a47cc127d2a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c9db0e3f1a4d4171af144788fa77484c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"ca977431f13049fb9a2ac6dce431d7ac\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object as a soda can or assess its quality.\"\n    }\n  },\n  \"cbb8037ffaf34988a83266162a9f5423\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"cc7f8708bf614a198e66d02d65374b18\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"cd5d48a76fe84035b6ef2a8d946b01f0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a soda can or any related item from the specified class list. It looks more like a stylized cup or bowl.\"\n    }\n  },\n  \"cdee0ee0c07849c1b605afb78d158d22\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (cola can), which belongs to the specified class. The quality is acceptable, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"ce26c54614784dac8b565070de16d5ff\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola) which belongs to the specified class. The image quality is good, with clear details and appropriate lighting. It is suitable for physics simulation.\"\n    }\n  },\n  \"cf4c4065679a4a648c121362a9633591\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a crushed soda can interacting with another surface and includes a detached fragment. We need images of clean, single, whole objects to learn their baseline physical properties.\"\n    }\n  },\n  \"d0199595eb1c475ca4662b378f501a41\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d0841b147e3740db91c987c6e413793d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct soda cans, violating the requirement for only a single object per image.\"\n    }\n  },\n  \"d0b81fdb4e514859bfcc95165144e8c7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two blocky objects that do not resemble soda cans in shape or appearance. It is unclear what these objects are supposed to represent.\"\n    }\n  },\n  \"d0bf0076e829471a8b7ea85dbc32b363\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows drinks in glasses, not soda cans. It also depicts multiple objects (two glasses and a tray) rather than a single object.\"\n    }\n  },\n  \"d1b90c9f9a1945ebb9acb441af19e453\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a can of food (lima beans), not a soda can or beverage can as specified by the class 'soda_cans'.\"\n    }\n  },\n  \"d28d0212f73f49369b1a4127e59d2cbe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a beverage cup with a lid and straw, not a soda can as specified by the class.\"\n    }\n  },\n  \"d3a98d793cc3454c9661ca0460d2a04f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mesh basket or pot, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"d4bb72c7650f44769370f3e9af00dad1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a hexagonal container or bin, not a soda can.\"\n    }\n  },\n  \"d602dc6ee3ce46e8ad26c24b0b2b4119\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metal bin or ashtray on a stand, not a soda can.\"\n    }\n  },\n  \"d7290a29dcdf433b9af6dd4b5a96da78\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash can, not a soda can.\"\n    }\n  },\n  \"d7bc6deece3244bcbf3768f58a59b006\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for a 3D asset, and it's suitable for physics simulation (e.g., dropping, rolling).\"\n    }\n  },\n  \"d7d788cb88f94286a15e0b51b3df4a3f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and only shows a partial, unrecognizable white object. It does not clearly depict a soda can.\"\n    }\n  },\n  \"d8917d94c920470595eabc8615a77b3e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it very difficult to discern the details of the soda can. The object blends almost entirely into the white background, rendering it unsuitable for high-quality training data.\"\n    }\n  },\n  \"d8c8569ab9774d72a2e429bb067cd9ab\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and indistinct in the image to clearly identify it as a soda can. The image quality is poor for training purposes.\"\n    }\n  },\n  \"dad6c6980337408b98f15eb67cd78143\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost unrecognizable. Additionally, the object depicted does not resemble a soda can or any related item from the class list.\"\n    }\n  },\n  \"db066d9c0c4e4bf98e6fdd8f94ad4a6e\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"dcda2657d0b846b6ad6671f57c1eefd7\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mesh wastebasket or a similar container, not a soda can or beverage can.\"\n    }\n  },\n  \"deec0f148e6c4b769b89c5258f1a20ac\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and lacks sufficient detail to be clearly identified as a soda can. The image primarily shows a marble surface with a tiny red object on it.\"\n    }\n  },\n  \"df12be70236a40c0b7be2f999813b894\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"e0eedd4004be49c78cd34f82a1fd6fb4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rectangular box or carton, not a cylindrical soda can.\"\n    }\n  },\n  \"e1dc6cd9e7dd475ab1eae45819d38755\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can, albeit a dirty one. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"e240d2d1da3142008265d75049a60b71\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash bin, which does not belong to the 'soda_cans' class.\"\n    }\n  },\n  \"e2d8e10342b54d47a6f13c9aa10fddcc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a soda cup with a lid and straw, not a soda can (aluminum can).\"\n    }\n  },\n  \"e31794846e984ab4a42f17f9010aec62\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and only shows the very top lid of the can. The main body of the object is not visible, making it unsuitable for training.\"\n    }\n  },\n  \"e32733d7941748a49483d6a26be82953\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plastic soda bottle, not a soda can (which is typically made of aluminum or metal).\"\n    }\n  },\n  \"e4fbfc1835ad42519d30983ae6c0ca6d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can against a clean background. The quality is adequate, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"e568d129df624238a3b5be46990f08ea\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a soda cup with a straw, not a soda can (which is typically made of aluminum).\"\n    }\n  },\n  \"e5e44452e9d9438a910b0c28d3a8a5fe\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, the object is distorted and does not clearly resemble a soda can. It looks more like a deformed bin or cup.\"\n    }\n  },\n  \"e63097b5257b41aa958f6332fa03141d\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is adequate for training, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"e71b640cd3024cefa54b7d03b448a6e9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash bin, not a soda can.\"\n    }\n  },\n  \"e73064e272d6432cb6f1101de7f03b79\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can of good quality, suitable for the specified class and physics simulation.\"\n    }\n  },\n  \"e761a2cde1c2414b9908b3a238e169a0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable for training data, and it's a common object for physics simulation in games.\"\n    }\n  },\n  \"e9045c71bc9c4acd8b29930fe86de9f9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects (a soda can and a bottle), violating the requirement for images depicting only one single object.\"\n    }\n  },\n  \"e915c0da07ce42a2b5ba080da135a751\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash can, not a soda can.\"\n    }\n  },\n  \"ea620d694ed241caa94e1cdfdea0884b\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a trash can, not a soda can or any related beverage container.\"\n    }\n  },\n  \"eb83c2f9a2e4470995755a714149444a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily distorted and fragmented, making it difficult to clearly identify the object. It appears to be a partial scan or rendering of a scene rather than a clean depiction of a single soda can or multiple soda cans. The quality is too low for training purposes.\"\n    }\n  },\n  \"ec8c11ae830d4114b4536be85f3434a9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and lacks any texture or detail, making it difficult to clearly identify as a soda can. It appears as a black silhouette rather than a realistic representation.\"\n    }\n  },\n  \"ee58ff87cb3e4ef59746582d3b580a96\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a soda can.\"\n    }\n  },\n  \"eed212b1c981466a9826a2a7dc1f8d60\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low. The object is very small within the frame, and the texture appears blurry/low resolution, making it unsuitable for high-quality training data.\"\n    }\n  },\n  \"eef7e31fbe3844d995c29fad413f1cf0\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a can of adhesive or sealant, not a soda can or beverage can.\"\n    }\n  },\n  \"ef546fb7a53749929ee0271da674f983\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soda cans) instead of a single object as required.\"\n    }\n  },\n  \"ef956b4cdd06464b8c3f0cef0bdb2229\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making it impossible to discern the details or even the full shape of the soda can. Only a faint outline of the top is visible.\"\n    }\n  },\n  \"f054256edfe34ed28d113341b02caa31\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can, albeit in a low-poly style. The quality is good, and it's suitable for use in a video game, including physics simulations.\"\n    }\n  },\n  \"f0e9d1b62f2f40718d0c0361267a81d4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it difficult to discern the details of the object. The quality is too low for training data.\"\n    }\n  },\n  \"f1fee32f875244679827c8a7962dd920\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a trash bin or parts of it, not a soda can.\"\n    }\n  },\n  \"f21a43f051f24c3d94bcd412948fd030\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object resembling a soda can. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f24c04715b874327baf86b74334c36d9\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. Although stylized (low-poly), it is recognizable, of sufficient quality, and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f28f781755a84a4e83e56e36d06c624f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soda can, which belongs to the specified class. Although it lacks texture and has somewhat flat lighting, the shape is clear and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"f2c07698c06b4ddf83bb6102e2fc69b6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation learning.\"\n    }\n  },\n  \"f3560f1b73a1498d9313a0f10fd11ef6\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can with good quality and lighting. It is suitable for the class and for physics simulation purposes.\"\n    }\n  },\n  \"f37f336c9fbe4b3ebcc737d86b26637f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the requested class. The quality is good, and it's a common object suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f50ca961cbcc4182a6f10074943d63c4\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cup or mug, not a soda can.\"\n    }\n  },\n  \"f5d97bc88d99451c87665ddb1edd4292\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rusty bucket, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"f61aeec14ff441abb0f6add5485a2e90\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains recycling bins, not soda cans.\"\n    }\n  },\n  \"f68987fa9f92438e9ceb3d4a06dc0d29\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is acceptable, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"f70c12cecfd54e03ba5d118907fe110a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"f753a659faae499282e882d63972d4c2\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a large bin or container, not a soda can or any related item from the specified class list.\"\n    }\n  },\n  \"f7562dd4f11f4cbaa2cac58c38a85e1c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a food can (like tuna or cat food), not a soda can or beverage can, based on its short, wide shape.\"\n    }\n  },\n  \"f92d2484547a4d35b240bafc09eb4400\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (five cans), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"faa995aa1e4347d48e4d969af3b2c44f\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to see the details or full shape of the soda can. Only the very top is partially visible against a completely white background.\"\n    }\n  },\n  \"fac722046abb4811bd3d88d5e39fdefc\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a square-shaped container, possibly a planter or bin, not a cylindrical soda can.\"\n    }\n  },\n  \"fb27f0ce28444135990ad8e6007b8eda\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object with the shape of a can, which fits the 'soda_cans' category (specifically 'aluminum can' or 'beverage can'). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"fd00d9cbdd1649e8a536af049994b5ed\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a public trash bin or ash tray attached to a pole, not a soda can.\"\n    }\n  },\n  \"fdc6b2fd40974708a07f1717a433e7c1\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"fdce9ba3485c4ff8a010616c69995a0a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere with a cosmic texture, not a soda can.\"\n    }\n  },\n  \"fe9f70ef9c1147b6828876f16fce9011\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows potion bottles or flasks, not soda cans.\"\n    }\n  },\n  \"feadfb9d10434182948d4e3e80117e71\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is not a soda can. It appears to be some kind of tool or weapon, possibly a grenade or flare gun, based on the shape and handle.\"\n    }\n  },\n  \"fecd4450f9d14948ba05d6d8dcec883c\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a can, fitting the 'soda_cans' class. While it is black and white and the texture quality isn't photorealistic, the shape is distinct and suitable for physics simulation purposes.\"\n    }\n  },\n  \"ffcdf4375a9245049b4fffdd46a1d63a\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a newspaper in addition to the soda can. We require images depicting only the single object of interest.\"\n    }\n  },\n  \"ffd7c2197b56413eab390d079970db72\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, low-polygon shape that does not resemble a soda can or any related item. It is not suitable for training a model for the 'soda_cans' class.\"\n    }\n  },\n  \"ffdbc5a9ae654f49977a1ca2fc626c24\": {\n    \"obj_class\": \"soda_cans\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soda can (Coca-Cola) which belongs to the 'soda_cans' class. The image quality is good, well-lit, and shows the object clearly against a neutral background. It is suitable for physics simulation training.\"\n    }\n  },\n  \"0045c7d3543f467e808af1320f7fe252\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making the object very difficult to discern from the background. It is not clearly depicted as any specific type of sports ball.\"\n    }\n  },\n  \"00ad7478cf0447f3b3494c00e7037177\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"00d9bd8bee204fe3a42c320ce24a32fd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bucket, which does not belong to the 'sport_balls' class.\"\n    }\n  },\n  \"01b3e318dce243fca3ba14dc648c9ab2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single, ball-shaped object against a clean background. While lacking specific texture or markings, its shape and color are consistent with certain types of sport balls (like a tennis ball or ping pong ball) and it is suitable for physics simulation.\"\n    }\n  },\n  \"01f0f072668a47d8b270db388034c9bb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a stylized, voxelated sphere and does not clearly represent any specific type of sport ball listed (basketball, soccer ball, tennis ball, etc.). While spherical, its appearance is too abstract and doesn't resemble a real-world sports ball, making it unsuitable for learning physics parameters related to that class.\"\n    }\n  },\n  \"02f0f15c1980486c91e3f4a29fe059ef\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bowl containing multiple dark, spherical objects that do not clearly resemble any common sports balls. They look more like decorative items or possibly large seeds/nuts. Additionally, the image contains multiple objects and a bowl, not a single, clean depiction of a sports ball.\"\n    }\n  },\n  \"04819557781441b6aeeefbf04268157f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a faceted polyhedron with a commercial logo (Nivea Sun), not a typical spherical sports ball like a basketball, soccer ball, or even a standard beach ball. Its shape and branding make it inappropriate for the 'sport_balls' class.\"\n    }\n  },\n  \"05eb4a68e56249c5b3db4ea937a57b6e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the requested 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"0651755826f848b59df701ed8bf693d8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which belongs to the sport_balls class. The image quality is good, and a beach ball is suitable for physics simulation.\"\n    }\n  },\n  \"06b4b9c1895945088510bcebb1bcee2b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"07060d7247774dfbaeb5154501b04f7a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image is an abstract geometric shape and does not resemble any type of sports ball.\"\n    }\n  },\n  \"07d690ffc3f044dfadb677c86bd7d69c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows an abstract scene with small figures on a platform.\"\n    }\n  },\n  \"082b525fc15a48eb80bd10d327007762\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture, making it difficult to identify the object. It does not clearly resemble any specific type of sports ball listed in the class description.\"\n    }\n  },\n  \"09577224c1ea4fadb86beb282daaf1b9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"09c4ba517a394c52b5087b6538f87ed8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too abstract and low-polygon. It lacks the defining features (shape, texture, markings) to be clearly identified as any specific type of sports ball listed in the class description.\"\n    }\n  },\n  \"0a96f1f19afc432bb22c3d74da546338\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"0ae3ea1d19374003a7e7e5f6657a1df2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image is an angular, box-like shape, not a sports ball. It does not belong to the specified class 'sport_balls'.\"\n    }\n  },\n  \"0af0dfdb7f134bf081fc8f9125a556ac\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a stylized, abstract spherical structure, not a recognizable sport ball like a basketball, soccer ball, tennis ball, etc. It does not fit the common definition or examples provided for the 'sport_balls' class.\"\n    }\n  },\n  \"0ba8b93f9997442fb4f5bd7cb10d4f3b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object. It does not appear to depict any type of sports ball.\"\n    }\n  },\n  \"0cf6bca4a409457797fdbe0737f93d66\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is spherical, but its texture and pattern do not resemble any recognizable sports ball. It looks more like an abstract object or perhaps a ball of yarn/string.\"\n    }\n  },\n  \"0d76207a619947f19158121f7fec74f9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: a paddle and a ball. We need images with only ONE object from the 'sport_balls' class.\"\n    }\n  },\n  \"0d8325148ea747468945c6ef73129bcf\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows abstract, blocky structures.\"\n    }\n  },\n  \"0dd3b1e39fd544f79d7464e174da3502\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a set of billiard balls), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"0def9f418739418984a48c8faa6561ea\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball backboard, which is related to basketball but is not a sport ball itself. The target class is 'sport_balls'.\"\n    }\n  },\n  \"0e2d798f5421490e962dc7be85db3c92\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and does not depict any recognizable object, let alone a sports ball.\"\n    }\n  },\n  \"0e5bf8bdf0fe42cb967989beb212967b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object (basketball) barely visible. This low quality makes it unsuitable for training data.\"\n    }\n  },\n  \"0ecc98014d684f548032eed7e89079b0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0ef01b42b7e1456c8b79a25f805ab71a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a hollow, cage-like sphere, which does not resemble any of the common sport balls listed (basketball, soccer ball, etc.). It appears to be a geometric structure rather than a functional sports ball.\"\n    }\n  },\n  \"11e572d8b4214f02955ed4f97dfe2afc\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"12cdcdb35ef44fee99f4eb344e0b0e72\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows a long, thin, rectangular object, not a ball.\"\n    }\n  },\n  \"13c4579c7efe4eb9b9dc5df5ab8114c6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"14a0c798a6c248449c42853e5646ddfc\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'sport_balls' class. It shows a patch of grass/ground.\"\n    }\n  },\n  \"15bd6087617a4a379953550c56edb839\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"160d712e0098495086b6d798ceaeb24e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The basketball is covered in a red liquid, which is not a standard representation of the object and may interfere with learning its typical physical properties.\"\n    }\n  },\n  \"172e5cd6c6d040228a6628f43393e482\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cricket pitch and field, not a single sport ball. While a tiny red dot might represent a cricket ball, it is not the main focus and is barely visible. We need images focusing solely on the sport ball itself.\"\n    }\n  },\n  \"17647dd372db4d059d21f11c9eccbd9e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic red sphere with low polygon count. It lacks any specific features or textures to clearly identify it as any particular type of sport ball (e.g., basketball lines, soccer ball panels, tennis ball fuzz). It's too abstract for the purpose of learning specific sport ball physics.\"\n    }\n  },\n  \"176d61750a5948779b24d7e93f022b8a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it impossible to clearly identify the object. It appears as a white shape on a white background and does not clearly depict any specific type of sport ball.\"\n    }\n  },\n  \"17dabce995894491af66c53d1ef65ef0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object in the center almost invisible and impossible to identify as a sports ball.\"\n    }\n  },\n  \"1856d9fa92ac43e5a9bd7777b7acce16\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two generic spheres, not a single, clearly identifiable sports ball from the specified classes. It also depicts two objects instead of one.\"\n    }\n  },\n  \"190b23e6d6c44b98a47841a83288e73c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic blue sphere, which does not clearly depict any specific type of sports ball from the provided list. It lacks identifying features or textures.\"\n    }\n  },\n  \"196caf120c9a49159ad1b877c8d595cd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single football, which belongs to the sport_balls class. The image quality is good, and the object is isolated against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"19f76a0df81747369acf46406b36afa6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1a38a86296524f35904eafb0289aeb75\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"1a8f1483cca84f81a3dbcea41b5a917f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a single object that resembles a red ping pong ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1abdab217ac741fdb3e4048b2ec911c7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted appears to be a Christmas ornament or bauble due to the hanging loop at the top, not a sport ball.\"\n    }\n  },\n  \"1b8123b23c8349b7b85af4a04a825d60\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a rock or a lumpy object, not any kind of sport ball.\"\n    }\n  },\n  \"1cafa2a3772d4fa4bcd990d3e8a2b1cf\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single golf ball, which belongs to the sport_balls class. The image quality is good, and the object is isolated, making it suitable for training data. Golf balls are relevant for physics simulations.\"\n    }\n  },\n  \"1ceee60f00904474b3685765d6619014\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (many balls and a basket), not a single sport ball as required.\"\n    }\n  },\n  \"1cefe2649fb546f29923ccaed833e0c1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested class 'sport_balls'. The image quality is adequate, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"1cff0d0506364ac6b4129b68cb4e27fe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and it only contains the object of interest. It is suitable for physics simulation.\"\n    }\n  },\n  \"1d14b2f4cf864208a9bfb0479881536d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1d1deedefdfe47e9835f0703957e576e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1dd4866650fa4aa18927e0834af132b1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a signpost, not a sport ball.\"\n    }\n  },\n  \"1e7d0d1fce524233aa01b5b5d879a6a1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single sports ball, likely a basketball or volleyball, against a clean background. The quality is good, and the object is suitable for physics simulation. The unusual colors add to dataset diversity.\"\n    }\n  },\n  \"1e9a74754fe04d708a260e0c0d0ed6ff\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic pink sphere with no texture or markings. While some sports balls are spherical, this image lacks any specific features to identify it clearly as belonging to the 'sport_balls' class (e.g., basketball lines, soccer ball panels, tennis ball fuzz, bowling ball holes). It is too generic.\"\n    }\n  },\n  \"1efe279909b04597858373c19901e8cd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"2049fef736434918ac238137a1d8f497\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"20a97fae56a64f52aab2cbafb8d1739e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object depicted is unclear and does not resemble any type of sports ball.\"\n    }\n  },\n  \"2145437568c14deebb2a5af92c3ce507\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple small objects that resemble marbles or decorative balls, not clearly identifiable sports balls from the specified list. Additionally, the requirement is for images depicting ONE SINGLE object.\"\n    }\n  },\n  \"21d4129b0ae842c5a6f09fc942811d4c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to discern the object's details. Additionally, the object's structure does not clearly resemble any common sports ball.\"\n    }\n  },\n  \"21e83e8c62754c3bbb31d15369abe83b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"223acccccba84344aa3eab2f652d265e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"227613a5458344dab9759f17f7566e2e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a highly distorted and fragmented 3D model that does not resemble any type of sports ball. The object is unrecognizable and appears to be a corrupted or incomplete model, making it unsuitable for training.\"\n    }\n  },\n  \"23279a2416e74abebca6b41f37cd5304\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single golf ball, which belongs to the sport_balls class. The image quality is good and suitable for training.\"\n    }\n  },\n  \"2343abdae7674f46ad85071858db93c6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"2365ce5e9f8f41d19581aea697053504\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"238e221932e0439aabe02f20dfa91cb7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a simple grey circle on a white background. It lacks sufficient detail, texture, or context to be clearly identified as any specific type of sports ball. The quality is too low for training purposes.\"\n    }\n  },\n  \"2399d7e0a9e349f78bd817121f5e7815\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a spring or coil, not a sports ball. Also, the image is too bright and lacks contrast.\"\n    }\n  },\n  \"24d284ad2bab4260b5ae8c6d67e27bc8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a generic dark sphere lacking any specific textures or markings (like seams, panels, dimples) that would clearly identify it as one of the listed sport balls (basketball, soccer ball, tennis ball, etc.). While it could potentially represent a bowling ball, the lack of detail makes it too ambiguous for the specific class.\"\n    }\n  },\n  \"24ecf27fc8964d08be948f4eb7768dbe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object. It does not appear to depict any object from the 'sport_balls' class.\"\n    }\n  },\n  \"250177705f89434b94f6e44b7e00734a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows only half of a sphere (a hemisphere), not a complete sports ball. This does not clearly depict the object class 'sport_balls' which typically refers to full spherical or prolate spheroid objects used in sports.\"\n    }\n  },\n  \"256e8cff3e874cafacd1b2530a84f7f0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"2592cb40eacd4cafb35187f963dc889f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the requested class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"25e1816c0e22444bb62816d3999d1b0b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which falls under the 'sport_balls' category. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"25ec4ef119b24f2b8a46c8441b9b074a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"2643d969f00a43fc8186aa8ec3fa45a2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a low-polygon, faceted shape, possibly a cube or similar polyhedron, and does not resemble any type of sports ball.\"\n    }\n  },\n  \"268888fd930a46dca8e3e62f2f743618\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a person (volleyball player) in addition to the volleyball. We need images of the sport ball object alone.\"\n    }\n  },\n  \"2917d0b66d834b20833aa1d4a3627c9e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains fragmented and distorted shapes that do not clearly depict any recognizable object, let alone a sports ball. The quality is too low and the object is not identifiable.\"\n    }\n  },\n  \"2b74e98be6834219b9e3cb533d558d2d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"2d0c0691c4814c74905db01ce5112048\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"2d34f241f56b49758532f018edd05619\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the soccer ball but also a distinct green surface (representing grass/field), violating the requirement to depict cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"2dbbc1914a484a71b90a58585387d9a7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a beach ball, which falls under the 'sport_balls' category. The image quality is good, and it shows a single object against a clean background, making it suitable for training.\"\n    }\n  },\n  \"2f2a8835e5cc40f98a6e6bc14f58a6f8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2f3803f9694b4db88a41d75e37daf75b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball hoop, not a sport ball. The object class requested is 'sport_balls'.\"\n    }\n  },\n  \"2f77a26ab3ec4cbb9e8f0b17f2af2786\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is adequate, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"2fd6f7dc02d8413da9af8195cf5f8239\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3062440ac11c46f18b8b86551cc3c3b4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. Although stylized (voxel art), it is easily recognizable. The image quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"308949e856d74180bbb3b2aa3d5ff25a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"31ab7b632c114639903fbd2d1c11039c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"31c5177bbb7341e7bcbc68ac2db9ace3\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a spherical structure made of interwoven strands, but it does not clearly resemble any standard sport ball like a basketball, soccer ball, tennis ball, etc. It appears more like a decorative or abstract object.\"\n    }\n  },\n  \"31cbc70e9e9d4bfa9a85ccf95b973dd0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or discern any details. It does not meet the quality standards for training data.\"\n    }\n  },\n  \"33928b27e24b42dda77b4f6eb83172c0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"33a30226e76b428e925521f2c2d8fa31\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"33c5f344ae9f4d289cf02709e801f273\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a bowling ball and several bowling pins), violating the requirement for depicting only a single object from the specified class.\"\n    }\n  },\n  \"33d01509e1fa4deeb23ccd807b686ad3\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and it is suitable for physics simulation training.\"\n    }\n  },\n  \"347ad3f458f5458daf32fdd8b5f39d9f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, but the requirement is to have only a single object per image.\"\n    }\n  },\n  \"35913fe4d7a34db6865e78e3a82451c7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture, making it difficult to discern details. It looks like an untextured 3D model render, which is not ideal for high-quality training data, especially for learning material properties for physics simulation.\"\n    }\n  },\n  \"36868988285f4b60b3e389e1aa1bab3f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a snow globe, not a sports ball.\"\n    }\n  },\n  \"36af0f7000404842872a6a13fe931ff8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (a bowling ball and a bowling pin), while the requirement is to depict only ONE SINGLE object from the target class.\"\n    }\n  },\n  \"36f001996fe044d18f969d59fe8d7a2a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely faint and washed out (too bright), making it impossible to clearly identify the object as a sports ball. The quality is too low for training purposes.\"\n    }\n  },\n  \"38236b7be1a943709ae337420aeeaa7c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"3985d0f92ed6478490c4273d82f7541a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic yellow sphere with no distinguishing features (like seams, panels, dimples, text, etc.) to clearly identify it as any specific type of sports ball. It is too ambiguous for the 'sport_balls' class.\"\n    }\n  },\n  \"3aab0a64b603430380860e8151c2fe1a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"3afbc0fe153146ccac248659acba9591\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it very difficult to clearly see the object (which appears to be a golf ball) against the white background. The lack of contrast and detail makes it low quality for training purposes.\"\n    }\n  },\n  \"3b1ffcb84a164cf9a488218bbf4ed3f9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and the object is barely visible, making it impossible to identify. The quality is too low for training.\"\n    }\n  },\n  \"3bc7eb1864314b8da5b1f277ae0d3889\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the sport_balls class. The image quality is good and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3c69763602904e7f8c7276b1b8459bd4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (ping pong table, net, paddles, ball) instead of cleanly depicting a single sport ball.\"\n    }\n  },\n  \"3ceae2eee6264843a77aaaf298134744\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3d60682818084a4da961fba3658569ef\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soccer balls) instead of a single object.\"\n    }\n  },\n  \"3e1390907a5447fd85d2baabb15add1c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sports ball.\"\n    }\n  },\n  \"3eee199318c94b9d8de3a2bc38b33ccb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3f22d17dc0fb4d8ebd731469d0122e88\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a very low-polygon, green, irregularly shaped sphere. It does not clearly resemble any specific type of sports ball listed (e.g., tennis ball, soccer ball, etc.) due to the lack of defining features, texture, or standard shape.\"\n    }\n  },\n  \"3f8debf633ed40da8d2d19d64632f98e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"400ce6fc25f54d149efd4cd429daa50f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"405f6ed74fa94dbd9a06629a334585db\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too dark and lacks sufficient detail and texture to clearly identify it as a specific type of sports ball. The quality is too low for training purposes.\"\n    }\n  },\n  \"40c3fee5315c4ef2acbb368484a1fc7b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4167ce901d624e45abc833cafd721fa9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble any recognizable sports ball. Additionally, there are multiple objects in the image (the yellow object and the blue cloth-like object).\"\n    }\n  },\n  \"41c7e9e391354cdfb1d2e4bd44c9a445\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object barely visible against the white background. It lacks sufficient detail and contrast to clearly depict any specific sports ball, rendering it unsuitable for training.\"\n    }\n  },\n  \"41f84ad265ff4aba8ef80f5fd079b0a8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, washing out the details and texture of the soccer ball, making it low quality for training data.\"\n    }\n  },\n  \"42183392f9c741ebb9bdb69b3ae5062d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to identify any object, let alone a sports ball.\"\n    }\n  },\n  \"42910a858ad24950b84de7f5ec770d32\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object resembling a volleyball or beach ball, which falls under the 'sport_balls' category. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"42f2dacd02f3427190be53974344844c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"43b9952b39d14295bfcc357786092c51\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a bowling ball, which falls under the 'sport_balls' class. The image quality is adequate, and it's suitable for physics simulation.\"\n    }\n  },\n  \"449cf1d7819c4f41b9fb26e61701e577\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object in the image is not clearly identifiable as any type of sports ball. It appears to be a reddish-brown dome or half-sphere with unclear features, making it unsuitable for the 'sport_balls' class.\"\n    }\n  },\n  \"44e652f9f89e42b2b40fece12aefd303\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a basketball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"451aaaab47f846ceb2c6fcee2d1c1488\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out (too bright) and the object is barely visible, making it impossible to identify or assess its quality.\"\n    }\n  },\n  \"45658eac7a8742d5940056d5eaa1dc96\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"45aee654bbd541d18c9cd1a6c951f72d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"46c8760116a342c69eddbe1c0c028b60\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows abstract geometric shapes.\"\n    }\n  },\n  \"46c91864ef384158b0078e20bdbfe3e9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is relevant for physics simulation.\"\n    }\n  },\n  \"47c6bfb547c0468dbaef0cca60d3fca2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"47d7910242904abbb0d630087b5ecfbe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single baseball, which belongs to the sport_balls class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"483fb35bd65543a2988c91b6a9b1e7d8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and far away in the image to be clearly identified as any type of sports ball.\"\n    }\n  },\n  \"48f2b91c32514fc591014933ffeff042\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It appears to be a fragment of an unrelated object, possibly a sign or post, and is poorly rendered.\"\n    }\n  },\n  \"49515826f03f491ab5429a4665401d0c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble any type of sports ball. It appears to be an abstract or mechanical component, not belonging to the specified class.\"\n    }\n  },\n  \"495f3440dc6643f4b9cf8bec88586792\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not clearly depict any recognizable sports ball. It appears to be a distorted or fragmented shape, not suitable for the 'sport_balls' class.\"\n    }\n  },\n  \"4970410b0b784b1d9f344d4d094cd6b5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a sports ball. It shows a cricket bat and wicket on a surface, but no ball is visible.\"\n    }\n  },\n  \"49b39158e44e40c68f91f7ead92cc9ec\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the requested 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4a0f6fd907a2481db570e1564e12c807\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture of the soccer ball appears distorted or low quality, with strange artifacts that make it look scratched or wrapped. This might not be suitable for learning accurate physics parameters. Additionally, the geometry seems somewhat low-poly.\"\n    }\n  },\n  \"4a6cd8d53cbc423da9e33299f4263aed\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is relevant for physics simulation. While the texture on the lower half is unusual, it still represents a sports ball, and diversity in textures is acceptable.\"\n    }\n  },\n  \"4ac321be32794d85a8ec7593913b7f85\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'sport_balls' class. It shows a post on a base.\"\n    }\n  },\n  \"4b2673dbf20843b89708166323c31b1f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a complex, interwoven sphere with a loop at the top, resembling an ornament or pendant rather than any standard sports ball like a basketball, soccer ball, or tennis ball.\"\n    }\n  },\n  \"4b5ae9b70251441a896a90fd14a79f66\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4bc0b18d07d94af0b192cc3e52ecd58e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4c27fd0640874d13aeb9023d5c075531\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4cc0ccbc90804eb5901939d61a6461bd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized tree-like object, not a sports ball. It does not belong to the specified class.\"\n    }\n  },\n  \"4d36c61cb8c04db09a4138f059187ab9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a sphere, but the texture with letters and numbers does not resemble any common sports ball. It looks more like a UV map or texture test sphere.\"\n    }\n  },\n  \"4d92ac7449634342935c26d8d3c8b39c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4df2619981e54625ad89b6bbfed70452\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-polygon, generic brown sphere that does not clearly resemble any specific type of sports ball. It lacks the necessary details (texture, seams, panels, color patterns) to be identified within the 'sport_balls' class.\"\n    }\n  },\n  \"4ef59adf1b9f4079921e7dacbd04c08e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested sport_balls class. The quality is acceptable for training, and the object is relevant for physics simulation.\"\n    }\n  },\n  \"4f0a006e663a4b03aef6c79afc7f50c2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"4fc634e0c771483681fc514f1b739185\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a red dome with a black base, not a recognizable sport ball from the provided list.\"\n    }\n  },\n  \"51563aebf67e41ce96b199a92248a8f6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (many balls) instead of a single object as required.\"\n    }\n  },\n  \"5198fa6b7cd04296987484d967b9cc47\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image has significant rendering artifacts or damage at the top of the basketball, making it appear incomplete or broken. This is not suitable for high-quality training data, especially for physics simulation.\"\n    }\n  },\n  \"51f2cfc77e3a4fedb40d0cb52994eab9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a very low-polygon, abstract pink sphere. It lacks any defining features or textures to clearly identify it as any specific type of sports ball (e.g., seams, color patterns). It's too generic and doesn't resemble a recognizable sports ball.\"\n    }\n  },\n  \"523ac862d2154a7e8c96b964fb7cb11f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a set of pool balls and a cue ball), violating the requirement for a single object per image. Additionally, while pool balls are used in a sport, they are not explicitly listed in the target classes and have distinct physics compared to most common 'sport balls'.\"\n    }\n  },\n  \"5311ede6883c4fb39f366f86559f58de\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"536d687777f0473dbc79f00ea4a17917\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5377e2fa1d904a8c919341c6b3e0f182\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the sport_balls class. The image quality is good, and the object is relevant for physics simulation.\"\n    }\n  },\n  \"549e6a9db463478887f54dfb6921103c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"5516e9e7628747b3902f1ef4e722c0c0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (billiard balls), violating the requirement for depicting only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"563a01e3d4d84e078eca33ec7c2d1479\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"567058de5d2c47df8b77e9c45a5a95f6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"570d317b99f94d7898fa30355d8083c5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Christmas ornament, not a sport ball.\"\n    }\n  },\n  \"578410b9289f493cb634903cb5207a33\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two tennis balls and a tennis racket), not just a single sport ball as required.\"\n    }\n  },\n  \"5796b62e40984a5bbcc83fe7b1ed831e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"57ec7545f8704db082e784cc79b6a7fc\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"583e886eb2334765acab222cda7d2bec\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single American football, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"58b5a30505e24792917fd940b4785cfe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"58d5f2eedc1e4eaaa580798162fa0006\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is adequate, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"591099fe4b6b46ba9387754aa0795795\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a cluster of four merged spheres and does not resemble any known type of sports ball.\"\n    }\n  },\n  \"5b94ae099617446eb4f5ea60427ccfcf\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5bbd19dc543a4234a15b25a1b40e2770\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any recognizable object from the sport_balls class. It appears to be an abstract, dark, glossy shape with unclear form, making it unsuitable for training.\"\n    }\n  },\n  \"5bd57db0ec4048378f21afc55f4dbd00\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Christmas ornament, not a sports ball like a basketball, soccer ball, or tennis ball.\"\n    }\n  },\n  \"5c22621990a24c32bbba27fb22859c8b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (many balls and a container), not a single object as required. Also, the image quality is poor due to the horizontal white bars cutting through it.\"\n    }\n  },\n  \"5c4c713b9e2841648762800f677856ce\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it very difficult to discern the details of the object. The quality is too low for training data.\"\n    }\n  },\n  \"5c8f46bd7a06484f941bb2bd420c87f0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sports ball.\"\n    }\n  },\n  \"5cc7a99302964b229921aa445a1fcbb8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5d31d395e0e24138900065b642ac8299\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single spherical object that resembles a bowling ball, which falls under the 'sport_balls' class. The quality is adequate for training purposes.\"\n    }\n  },\n  \"5d70537cfe2243f38704d15fe3a1c73c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and a tennis ball is a suitable object for physics simulation.\"\n    }\n  },\n  \"5df981cbb7744925834d66fe5a6e8504\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the specified class 'sport_balls'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5ebd04ad8a9647e999c04ae92dd2fe13\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5f007aed96f546d3b1b4b2ab732d4d63\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a valve or pipe fitting, not a sports ball.\"\n    }\n  },\n  \"5f158949c1084575abf02437f6b43028\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern the details of the object. The texture also appears somewhat artificial for a standard golf ball.\"\n    }\n  },\n  \"607bca1f9bb2447eaa67143515b73ca7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is recognizable as having a soccer ball pattern, but its shape is significantly deformed and not spherical like a standard soccer ball. This distortion makes it unsuitable for learning realistic physics parameters for a typical sports ball.\"\n    }\n  },\n  \"609a199724114bc68509068fa4abdf01\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"60a4ec95da6641ab979416817ce7afd0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making it difficult to clearly see the object and its details. The quality is too low for training data.\"\n    }\n  },\n  \"6165774d34a44aec96def5f799300f2c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"61ad5791acd54e268d2584e47ba05584\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snow globe, which does not belong to the 'sport_balls' class.\"\n    }\n  },\n  \"61c4ce97d62f4f33a706a71e35c1851f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a beach ball or a generic sports ball, which falls under the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"62039f6107524d0f8ea9f4754818f0fe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The quality is adequate, and the object is relevant for physics simulation.\"\n    }\n  },\n  \"623110733d80495b9a188c988312bda1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it difficult to clearly identify the object as any specific type of sport ball. It appears as a generic white shape.\"\n    }\n  },\n  \"626c140f036c4727bd8635a894fd6707\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a cricket ball or possibly an older style baseball, which falls under the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"628213628cd24f9a865dd4433c57d1a7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball court and hoop, not a sports ball like a basketball, soccer ball, etc.\"\n    }\n  },\n  \"62a54774980144edbd4314752c6f274c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two basketballs and a basketball hoop), not just a single sport ball as required.\"\n    }\n  },\n  \"62c334e64f9a467ea547a71a980f7094\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a sphere, but its texture (rusty/metallic/rocky) does not resemble any common sport ball listed in the class description. It does not clearly depict an object from the 'sport_balls' class.\"\n    }\n  },\n  \"63166fb4e3bb4f62a20f5ee560c33be2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a generic sphere with an unusual texture and does not clearly represent any specific type of sports ball (e.g., basketball, soccer ball, tennis ball, beach ball).\"\n    }\n  },\n  \"636816af68c049c4bc0ed31bc1493e6e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"638579292c8d4bbb858ef4473995abff\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object in the image is a sphere, but its texture and appearance do not resemble any common sport ball. It looks more like a rock or a heavily weathered, unidentifiable object.\"\n    }\n  },\n  \"6436d542531343c4addc9e0b96c5b059\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The quality is acceptable and it's suitable for physics simulation training.\"\n    }\n  },\n  \"6445cd60ffb44e5ab8c72cd81cdbc04c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts Coca-Cola cans, not any type of sport ball. Additionally, the rendering is incomplete and overexposed.\"\n    }\n  },\n  \"649f10d75f86431ea0930ba454d11c31\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large green plane interacting with the soccer ball, violating the requirement for depicting only a single object cleanly.\"\n    }\n  },\n  \"65b160fdee7d42f8b0a7e99e0fc8ec5b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball court, not a sport ball. It does not depict an object from the specified class 'sport_balls'.\"\n    }\n  },\n  \"6612a34c526b457b9fef451bc4b37507\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"665eceb299d2476dbe9b9c0474a5526b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image does not resemble any type of sports ball. It looks more like a stylized flower or trophy.\"\n    }\n  },\n  \"66678c6685f94e39a93907ca88710aee\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a sphere with a cap, resembling a Christmas ornament or possibly a stylized bomb/grenade, not any type of sport ball.\"\n    }\n  },\n  \"668c3ed381ca474182deca3bedecf613\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single golf ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"66c8cef480cc4b36b437a90c75972599\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"67e00f242ed3408594a39d314892f741\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball hoop and backboard assembly, not a sport ball itself (like a basketball, soccer ball, etc.).\"\n    }\n  },\n  \"6a30dbecdf1141a38c5295c9b2b28482\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a ball and chain, which is not a type of sports ball. It does not belong to the requested class.\"\n    }\n  },\n  \"6ae0871c4cb3436db8ba214fd7707553\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a golf club (putter), not a sport ball. It belongs to a different category of sports equipment.\"\n    }\n  },\n  \"6ba760b777a1429d9274fa9093228da6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation. The unusual color contributes to dataset diversity.\"\n    }\n  },\n  \"6bfa6420cc464081b90afc806e3997da\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is isolated against a clean background. This is suitable for training.\"\n    }\n  },\n  \"6c33cfc605d142d9a31191cc7fd8aaae\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sports ball.\"\n    }\n  },\n  \"6c3f25c769d247d8a56064b436fb387d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The objects in the image do not resemble any type of sports ball. They look more like helmets or bowls.\"\n    }\n  },\n  \"6c42309765bc43b79bc7f08968222268\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a soccer ball, albeit with an unusual texture. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"6c816c2eb3ae42a38faab5cb1434658c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"6c8327d1cce54558836186fd9342c761\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a toy gun or tool, not a sports ball.\"\n    }\n  },\n  \"6d5cd0054d9740228253bd9634723a95\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic sphere with a simple two-tone color. It lacks any specific textures, markings, or features (like seams, panels, dimples, specific colors) that would clearly identify it as one of the listed sport balls. It is too generic to be useful for the 'sport_balls' class.\"\n    }\n  },\n  \"6da5ede54a3a43eea44f311b02eeb136\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"6e95fde84bfe4335a39df3afb29f2af1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crumpled paper bag on a board, not a sports ball.\"\n    }\n  },\n  \"6e9da42de04049ab8ce952adad4b7592\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"6eb857a564f841208d3468aa2a0c4452\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a ground patch in addition to the beach ball. We require images with only the single target object against a clean background.\"\n    }\n  },\n  \"6ed393c5fdd742808f7ad0c12463e5a1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is ball-shaped but has letters on its panels, making it look more like a toy or educational object rather than a standard sports ball used in games like soccer, basketball, etc. It does not clearly depict a typical object from the 'sport_balls' class.\"\n    }\n  },\n  \"6ef81c26d9f541bd8ec9bc76e2855d2e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the seams or lines of a soccer ball pattern, not the ball itself. It lacks volume, texture, and shading, making it unsuitable for representing a physical object for simulation.\"\n    }\n  },\n  \"7079a5fc5bd74143b36d3f1a123a4f03\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a beach ball, which falls under the 'sport_balls' category. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"71174c56c9a641f6b21cf59edffad3f3\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object details almost invisible. This low quality makes it unsuitable for training.\"\n    }\n  },\n  \"711fd112317b4eb0943ece3f0a9227b7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"71ddc9eb324e46efb10a7d3a040af6f6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very low-polygon, abstract representation that barely resembles a soccer ball. The quality of the 3D model is too low and lacks the necessary detail to be useful for physics simulation training.\"\n    }\n  },\n  \"722be26079264550a508583d9ebf7519\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a faceted green sphere, which does not clearly resemble any common type of sports ball (like tennis, soccer, basketball, etc.). It looks more like a generic low-poly sphere or gem.\"\n    }\n  },\n  \"72dd148b11b045ae8970585cf4ad56c6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"72ecd4deff5f4886adc2455581f0333d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is adequate, and it's suitable for physics simulation.\"\n    }\n  },\n  \"731124f11bb24279b20dc3aa4ff591d6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large structure in addition to the small green sphere, which might be a ball. We need images depicting only the target object (a sports ball).\"\n    }\n  },\n  \"7390e7279ce34e93b69c7cf81ab6ed32\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is not recognizable as any type of sport ball listed in the class definition. It appears to be some kind of button or dome.\"\n    }\n  },\n  \"74166573c34c40bc977c7a8db5b92ff4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It appears to be some kind of ribbon or strap.\"\n    }\n  },\n  \"7471c06cc7204aaa8bb5983ab13db5db\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a pillar and some green material in addition to the white sphere (which might be a golf ball). We need images depicting only the sport ball itself.\"\n    }\n  },\n  \"747cd89b03e7434cbaf70028aebfca65\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a wireframe or skeletal structure of a ball, likely a soccer ball, rather than a fully rendered object. It lacks texture and solid form, making it unsuitable for learning physical properties like material for simulation.\"\n    }\n  },\n  \"74b56b99cc79448485f2ce603c99c074\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"757c9db98fc74368bbf5253d2db649a2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows a small fragment of a curved object, not a recognizable sport ball. It does not clearly depict the object class.\"\n    }\n  },\n  \"758f9c854fde422d8efa3b7f99858660\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball hoop and stand, not a sport ball like a basketball, soccer ball, etc.\"\n    }\n  },\n  \"75edd92fe20640dc96ec18b3a9412895\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a stone or concrete sphere, likely an architectural element, not a sport ball used in games. Its material and purpose are different from the target class.\"\n    }\n  },\n  \"7616f1adad4040e1bc33a5c4bff2d2f0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"77316c744dc24d969996857145d6717c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a stylized representation of a Poké Ball (specifically, a Love Ball) from the Pokémon franchise, not a real-world sports ball like those listed in the class definition.\"\n    }\n  },\n  \"78e27dad7d2f49b6b6405600799b680d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic blue sphere, which lacks any specific features (like patterns, lines, or textures) to clearly identify it as a sports ball (e.g., basketball, soccer ball, tennis ball). It's too ambiguous.\"\n    }\n  },\n  \"7945a0d7f2d540dcbb91f567783cd697\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single spherical object which can be considered a generic 'sports ball' or 'beach ball'. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"7a936528fe154261afeb89ca132741b4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture or detail, making it impossible to identify as any specific type of sport ball. It blends significantly with the white background, reducing its quality for training data.\"\n    }\n  },\n  \"7aa17e963bc84f63ad665e5f8d8d17de\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single sports ball (likely a soccer or volleyball) against a clean background. The quality is acceptable, and it represents an object commonly used in physics simulations.\"\n    }\n  },\n  \"7be0730ea025439590dc10ac7b4e127e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the specified class 'sport_balls'. The image quality is good, and it is suitable for physics simulation training. The worn texture adds diversity.\"\n    }\n  },\n  \"7bf2f8cc2bc54dfc9809c2245b5c775c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is adequate, and it's suitable for physics simulation.\"\n    }\n  },\n  \"7d185fa512604b3aaeca8a820c500661\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation (e.g., bouncing).\"\n    }\n  },\n  \"7def3dcdfef24920bb0fac7acf1042bc\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small in the image and lacks detail, making it difficult to clearly identify as a specific sports ball. The image quality is low for training purposes.\"\n    }\n  },\n  \"7f5f7e93482c40c8aee66fda16543d3a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the stitching of a baseball, not the complete ball itself. It does not clearly depict the object class.\"\n    }\n  },\n  \"7f60ec770fee4402aba503607c087705\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic white sphere with no texture or distinguishing features. It does not clearly depict any specific type of sport ball (e.g., golf ball dimples, ping pong ball seam/logo).\"\n    }\n  },\n  \"7fd4bb9ed8064e3ba948c891a5576860\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a ball pit structure containing many small balls, not a single, clearly identifiable sport ball from the specified list. We require images of one single object.\"\n    }\n  },\n  \"807f079951aa46ad8e59364e8a30c92d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (four balls). Additionally, these appear to be Poké Balls from the Pokémon franchise, which are fictional items and not actual sports balls like basketballs, soccer balls, etc.\"\n    }\n  },\n  \"80b94ea2406c4ff28b4120995764c6ed\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"80f10af6cb604d7cbbd141050d093b2b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and it is suitable for physics simulation training.\"\n    }\n  },\n  \"816dc0b3bb2140c9bb1f65fc031445fa\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it difficult to clearly identify the object as any specific type of sports ball. It appears as a faint white shape on a white background.\"\n    }\n  },\n  \"8175ffa9116840928a09a63bf40888c5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball that is cut in half and fragmented, not a complete object. It also contains another distorted shape. We need images of single, intact objects.\"\n    }\n  },\n  \"818462ce3d84424884d136db06e72244\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"82184b83687546ee9eedc4b84b13d496\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic white sphere surrounded by fragments, not a recognizable sport ball. It also contains multiple objects (the sphere and the fragments), violating the single object requirement.\"\n    }\n  },\n  \"826a69c6aa2b472098ad91f9ceca9020\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture of the ball does not resemble any common sports ball, making it difficult to classify within the specified 'sport_balls' category.\"\n    }\n  },\n  \"826abbe69b854518abe781db2d74ba3d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too heavily cropped and does not clearly depict any recognizable object, let alone a specific type of sports ball.\"\n    }\n  },\n  \"82fda2cfa8974171ae64d4e434aa4b9b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a sign or stand, not a sports ball.\"\n    }\n  },\n  \"8391723b273741a789add445ff7be896\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sports ball.\"\n    }\n  },\n  \"83c530db188d417189609264d4bdd7bd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble any standard sport ball. It appears to be a stylized object, possibly a toy or a fantasy item, with spikes and an unusual shape, making it unsuitable for the 'sport_balls' class.\"\n    }\n  },\n  \"84ea8b103e874a9b854fd962d3ed1c28\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a very small, abstract black shape that does not clearly depict any object from the 'sport_balls' class. It is unrecognizable.\"\n    }\n  },\n  \"854b9a4d04f544bcba320f6d9a6f4ee1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"8566e406c12d4143a1dd2a71e0b5fc25\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The quality is acceptable for a 3D render, and it's suitable for physics simulation.\"\n    }\n  },\n  \"859e465e7682443aabb068b925264f6e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, washing out details. While it has a spherical shape and a dimpled texture potentially resembling a golf ball, the texture is highly exaggerated and unrealistic, and the overall quality is poor due to the brightness.\"\n    }\n  },\n  \"85f5c6a7905245f291458cc6f2518ee1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"865e77c3ce8948809b28e53ba2285008\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a fragmented sphere with a large opening, it does not clearly depict any recognizable type of sport ball.\"\n    }\n  },\n  \"87ba443adeb44d2e88263cf4102eb64a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (grey spheres, yellow strands, a container) and none of the spheres are clearly identifiable as any specific type of sport ball. It does not depict a single, recognizable sport ball.\"\n    }\n  },\n  \"88590cf1e42e44bfb85ce3b6b1959648\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"886c780f5b75441dacbb5a9b0622ff83\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern the object's details. While it has a vaguely spherical shape composed of panels reminiscent of a soccer ball, it's highly abstract, fragmented, and doesn't clearly depict any recognizable sports ball.\"\n    }\n  },\n  \"8965462b14ea420690822ff6e3d1abd0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"8afd2bfbe8c14fad937f768617d55f9e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract geometric shape, not any recognizable type of sports ball.\"\n    }\n  },\n  \"8c9078e0f2a542a78e1f58498b52406c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"8d17cb0964334a6cbe4b0e293c238956\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"8d19a73d9cc64e6e8dbc0ff31eb260a5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely black and does not depict any object. It is too dark to be useful.\"\n    }\n  },\n  \"8dd8ce98a0304753820115845741a6bd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object or its features. The quality is too low for training data.\"\n    }\n  },\n  \"8e1fde9b90c642e38e3644460d27f9c6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a generic white faceted sphere and lacks the specific visual characteristics (color, texture, markings) to be clearly identified as any particular type of sports ball from the provided list. It appears too generic and low-detail for the intended purpose.\"\n    }\n  },\n  \"8e4d2af61f1742ce9e43561f9fdba055\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single tennis ball, which belongs to the sport_balls class. The quality is good, and it's a suitable object for physics simulation (e.g., bouncing).\"\n    }\n  },\n  \"8e9d8ac2dccc48e3bb817793cf1aebed\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it difficult to discern the object's details. Additionally, the object depicted does not resemble any type of sport ball.\"\n    }\n  },\n  \"8ed7f688d9b4441e931c45545043cd6e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"8efa7b8205714dc88a2e3e81b10ccf66\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble any known type of sport ball. It looks more like a fantasy or sci-fi artifact.\"\n    }\n  },\n  \"8f1cbc19dc414ad89097eabe063ada88\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"8fb1078a83014e378681539583ca0527\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several soccer balls), violating the requirement of depicting only a single object.\"\n    }\n  },\n  \"8fc1f5d1db3640f0a05c55ceff58b379\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable sport ball. It also contains multiple elements (fragments, structure on top) besides the central shape.\"\n    }\n  },\n  \"9085d6e964a64880a6af9c73af6d1777\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"913b42446b8e4f51bc6f03dd4f26277c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It appears to be an abstract molecular structure or a similar complex model, not a sports ball.\"\n    }\n  },\n  \"921f48b9a47d458a9d67cf46a42ff17e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic two-toned sphere. While it is a ball, it lacks any specific features (texture, markings, standard colors) to clearly identify it as a 'sport ball' from the provided list (e.g., basketball, soccer ball, tennis ball, etc.). It appears too abstract or like a basic geometric shape rather than a recognizable sports item.\"\n    }\n  },\n  \"93ed8a180c674f77a5e9431d4b58c7b8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"9537582b25fb4fdb9ef5478c3c06f77e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic red sphere with no specific markings or texture to identify it as any particular type of sport ball (e.g., basketball, soccer ball, tennis ball). It's too abstract and doesn't clearly depict the target class.\"\n    }\n  },\n  \"959a779a050745c5bd27f200928ddbc6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The quality is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"966c74cfad20469f8beb3afac62bb9ea\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic sphere with a simple two-tone color. It lacks the specific features, textures, or markings (like panels, seams, dimples) to be clearly identifiable as any particular type of sports ball (e.g., basketball, soccer ball, tennis ball, golf ball). It is too generic for the 'sport_balls' class.\"\n    }\n  },\n  \"97188bc15d6741cd93fcf58aa97cb015\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"9796bcdd0869446da27813947ecceb8b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic orange sphere which lacks the specific markings or texture (like lines on a basketball, panels on a soccer ball, fuzz on a tennis ball, etc.) to be clearly identifiable as a specific type of sports ball. It is too ambiguous for the 'sport_balls' class.\"\n    }\n  },\n  \"97b8b4e8a83045c5a5673f19d6b21e39\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic yellow-green sphere. While it resembles the color of a tennis ball, it lacks any defining features like seams or texture that would clearly identify it as a specific type of sports ball. It is too generic for the requested class.\"\n    }\n  },\n  \"98f0933f69164f7e80dff102b1f9a761\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"98f92c43f3da4f9e9f5f12010e7f7bd2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost invisible and impossible to identify. The quality is too low for training data.\"\n    }\n  },\n  \"9950ca58ace54ee2ba6ba8a1c7e15203\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"995bcdab5a2c467b982b7c8c1c13be89\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic sphere with no texture or markings. It does not clearly depict any specific type of sports ball (like a basketball, soccer ball, tennis ball, etc.) and lacks the visual detail needed to infer physical properties for simulation.\"\n    }\n  },\n  \"997171afcda64170a5d2d9d971ddc7a3\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out (too bright) and the object is not visible or identifiable.\"\n    }\n  },\n  \"9acb0b1a53964a8e906bc7425e43a6cd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9b502e4e436f4417b99736999ef7ef73\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern details. Additionally, the object depicted does not clearly resemble any common sports ball; it looks more like a decorative item or fruit in netting, and it includes a stand.\"\n    }\n  },\n  \"9ba2d35fe7a846a0bd6992d2cf7c6f51\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"9c7c903c46534033819298c8da948e31\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains other objects (cartoon hands) in addition to the ball, violating the 'one single object' requirement. The ball itself is also quite generic and not clearly identifiable as a specific type of sports ball.\"\n    }\n  },\n  \"9caca223d4ee4dd69cca3225c9b6d993\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic, low-polygon purple sphere. It lacks any specific details, textures, or markings (like panels, seams, dimples) to clearly identify it as any type of sports ball (e.g., basketball, soccer ball, tennis ball, etc.). It's too abstract and doesn't represent the target class adequately.\"\n    }\n  },\n  \"9e82d5dcfcb84c4a939f46d479a91121\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball/beach ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"9f63803d93714eadaa869c23cee0581d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object in the image does not resemble any type of sport ball. It looks more like a buzzer or a warning light.\"\n    }\n  },\n  \"a13c272c2ed7499ea637e58460985858\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Christmas ornament (bauble), not a sport ball.\"\n    }\n  },\n  \"a19b55cc3de341f7b793c184bfa89b1f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic semi-transparent red sphere. While it is ball-shaped, it does not clearly depict any specific type of sports ball listed (e.g., basketball, soccer ball, tennis ball). The texture and transparency are not characteristic of common sports balls.\"\n    }\n  },\n  \"a1c2cb94f9a449a280e7a199c34909b8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"a215508653e14f728845ac14a6466f6b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single cricket ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a24b4b74a40b42aeb083cd447b79683a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a table or bench, not an object from the 'sport_balls' class.\"\n    }\n  },\n  \"a26f7db1e4a6424db1cd25d58bfc63fe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robotic object, possibly a toy or drone, which is shaped somewhat like a soccer ball but has mechanical legs and other attachments. It is not a standard sports ball and therefore does not belong to the requested class.\"\n    }\n  },\n  \"a33244faa08a4cacaf4a2750b1307e57\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a3d4f2d7a5d74542b1c10bc4302db138\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a423e8bb9a374f258f5cb2b9ae642db8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic, untextured sphere. While it has the basic shape of some sports balls, it lacks any specific details (like seams, panels, color patterns, or texture) to clearly identify it as belonging to the 'sport_balls' class (e.g., basketball, soccer ball, tennis ball). It's too ambiguous for training purposes, especially for learning specific physical properties.\"\n    }\n  },\n  \"a43673bbcc7a467a9c418ca1dac87131\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere on a gear-like base, which does not clearly resemble any standard sports ball (basketball, soccer ball, tennis ball, etc.). Additionally, it includes the base, violating the rule of depicting only a single object from the target class.\"\n    }\n  },\n  \"a5ee4fbeb7104b4d927e27b10504be54\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a generic, somewhat lumpy sphere that does not clearly resemble any specific type of sports ball listed in the class description. The texture and shape are ambiguous.\"\n    }\n  },\n  \"a676438e46d74fa8bb69ba311aca5e47\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too cropped and does not clearly depict any recognizable sport ball. Only a small fragment of the object is visible.\"\n    }\n  },\n  \"a6a158611dbb4d76ba876d0aa14146cd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a7419d14543b4640b53d177a1606c2eb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a beach ball or a generic sports ball, which falls under the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a7c51545ecf0438ab0a877a31aac6571\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single sphere, which falls under the general category of 'sports ball' or could represent a simplified version of several specific types (like a beach ball or bowling ball). The image quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"a804776436c24d80823429bc5602d201\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several bowling balls stacked), not a single object as required.\"\n    }\n  },\n  \"a815ed8fec774767ba18485a12d5e102\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (four different balls), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"a9129483b3ca4d79b26fd749f7792001\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a sphere with an abstract wavy texture, which does not resemble any of the specified sport balls (basketball, soccer ball, football, etc.). It doesn't clearly depict an object from the target class.\"\n    }\n  },\n  \"a94add7a0b224046a1494a23e2ece2d5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an insect, not an object belonging to the sport_balls class.\"\n    }\n  },\n  \"a990620a0df04379bf4790dec9043f11\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects stacked together, and these objects do not appear to be sport balls. They look more like training markers or domes.\"\n    }\n  },\n  \"a9ba252be91f450e935c0356aafb870a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is spherical, but its texture and pattern (interwoven pink and yellow strands) do not resemble any recognizable sports ball like a basketball, soccer ball, tennis ball, etc. It looks more like a decorative object or a ball of yarn, making it unsuitable for the 'sport_balls' class.\"\n    }\n  },\n  \"a9e995cb9c5d4092afe8b2a05a04c1dd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulations.\"\n    }\n  },\n  \"a9ed84b06e6549e486aa585129a1cf48\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The quality is acceptable, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"aa2b985b302c49bd803dad2b5c24960c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted is a dome shape, not a sphere, and does not resemble any common sports ball.\"\n    }\n  },\n  \"aa611b8870e44e6d88d4a0b2ac9fe12e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a golf ball, which is in the class list, but it also prominently features a stylized golf green. We require images of only the single object itself, without significant additional elements or backgrounds.\"\n    }\n  },\n  \"aa98cb10cd6340709175b61928f63b49\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark, and the object's texture and color make it difficult to definitively identify as a specific type of sports ball. It also contains grass elements which distract from the main object.\"\n    }\n  },\n  \"aa9d24288a2c45c8875a59c0f7be5deb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object almost invisible and impossible to identify clearly as a sports ball. The quality is too low for training.\"\n    }\n  },\n  \"aadd36de6c214f1189490003ffbb40d9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic grey circle without any texture or markings. It cannot be clearly identified as any specific type of sports ball or even a generic sports ball. It lacks the necessary detail for the intended use case.\"\n    }\n  },\n  \"abdbeeb5609c48f9a801107c3cf01174\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"ac100cbc729245ef91580206eef2e4bd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a tennis ball (a type of sport ball), despite the unusual color. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ac7bae9592b14cc4a2b68f69723de768\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"acb0950d593b4a228e207c253b59971f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: a sports ball and a shoe. We require images depicting only ONE SINGLE OBJECT from the target class.\"\n    }\n  },\n  \"ad80889cf8094dfea4e888735e954ef1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is acceptable for training data, and a soccer ball is relevant for physics simulation.\"\n    }\n  },\n  \"adbb26da045e4ca8aad09461e414f2a5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a stylized, possibly sci-fi or fantasy orb, not a recognizable sports ball from the provided list (basketball, soccer ball, etc.). While spherical, its design and texture do not align with any common sports ball.\"\n    }\n  },\n  \"aea3e577bcf3450c986fcc82bfd18a33\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white space, and the object is too small and indistinct to be identified as any kind of sports ball.\"\n    }\n  },\n  \"af2ac66229dd4429953a9e5b9fc2fdc1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"af3d540f070e4fd18c036b3e73545b16\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern any details of the object or even confirm its shape reliably. It lacks the quality needed for training data.\"\n    }\n  },\n  \"af42c28a39cf4ade992ea6024355cdb5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. The object shown appears to be some kind of antenna or beacon.\"\n    }\n  },\n  \"b03e6a597b794953977c7d60c27492bd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a spiky, metallic object, not a sports ball like a basketball, soccer ball, etc. It does not belong to the requested class.\"\n    }\n  },\n  \"b0b50a16aa5d431e8ed799c1a413025c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single golf ball, which belongs to the 'sport_balls' class. The image quality is good, and a golf ball is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"b13a0d69d6ca48d4b125de2cc2e7f940\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single cricket ball, which belongs to the requested 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"b173574f823f425fb0cb710cde4278ca\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the requested 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"b1c66721f837407c9afb305ad7099ff0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball hoop, not a sports ball, which is the target class.\"\n    }\n  },\n  \"b25f2e3112a74ebb84a6c1b864afb750\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only half of a sphere, not a complete sports ball. It does not clearly depict any object from the specified class list.\"\n    }\n  },\n  \"b34ef557dc04429789c3338dc20ab3f3\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"b3c9aaebc7ce4f3497e5a58f165f0e3d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sports ball.\"\n    }\n  },\n  \"b45d9f4370104ee28a5d84652201a6d6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor. The white parts of the soccer ball are overexposed and lack detail, making it difficult to discern the texture and material properties needed for physics simulation.\"\n    }\n  },\n  \"b4c004563b954ce98aab692455ac3cf8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low and heavily pixelated, making it unsuitable for training data aimed at realistic physics simulation.\"\n    }\n  },\n  \"b50810d5562f42ddaeeb7fd6eeb2514a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: a small yellow sphere (potentially a tennis or ping pong ball) and a large, unidentified blue ellipsoid shape. We require images with only ONE single object from the target class.\"\n    }\n  },\n  \"b5c3fa8c6fa04972b62a4bc69127908b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic orange sphere lacking any specific details or textures that would clearly identify it as a particular type of sports ball (like a basketball, ping pong ball, etc.). It is too ambiguous for the target class.\"\n    }\n  },\n  \"b6bfe1c7bb3b4fd691f24914e430a2b2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. Although the color is unusual, the object is recognizable. The image quality is good and it's suitable for physics simulation training.\"\n    }\n  },\n  \"b6e6a061f91c477db1a6acb6c0637dd6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the specified class 'sport_balls'. The image quality is good, and the object is suitable for physics simulations.\"\n    }\n  },\n  \"b7357866e35e4e1181e7488ae0577bdb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single basketball, which belongs to the sport_balls class. The quality is acceptable for training data, and a basketball is suitable for physics simulation.\"\n    }\n  },\n  \"b77736c059414a1a826ec1049381dff5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed or the object is white on a white background, making it almost completely invisible. It does not clearly depict any object.\"\n    }\n  },\n  \"b81ac133ee664dcd997c486dc6edf169\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object identifiable as a basketball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"b88bfa1512224245b515526dddf2e4c7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, not one. Additionally, the objects depicted are Poké Balls, which are fictional items and not standard sport balls like those listed in the class description (basketball, soccer ball, etc.).\"\n    }\n  },\n  \"b89b03eb963740cc83407ac626a3855f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the sport_balls class. The quality is acceptable for training purposes, and the object is relevant for physics simulation in games.\"\n    }\n  },\n  \"bb06db406f8f415ab3ac597a3a202c27\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"bb2896720a1e4aefba3ab381d4b4554e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"bc10ff32ac7343b8b0b5d71cece675cb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single volleyball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"bc77491924ab4137802723a06639400e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: the ball and a stool. We require images depicting only a single object from the target class.\"\n    }\n  },\n  \"bd0a3801b75f4456a94ff4f7e7e1742a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is sufficient, and the object is relevant for physics simulation.\"\n    }\n  },\n  \"bd4b91dd054e4a33b1cd5e1d608e90c4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"bd5708568d9042bf8b0e4893a416e92e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"be2f59a574bb425397fade26b97a573c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tank, not an object belonging to the 'sport_balls' class. Additionally, the image is extremely bright and washed out, making it low quality.\"\n    }\n  },\n  \"bf8243bc8ec94acfbd966adcc5f1a11c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic, low-polygon grey sphere. It lacks any specific textures, markings, or features (like panels, seams, dimples) that would clearly identify it as any type of sports ball (e.g., soccer ball, basketball, golf ball). It is too abstract and does not clearly depict the object class.\"\n    }\n  },\n  \"c01eaa7ec0da452dba82af027dda5f75\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object recognizable as a sports ball. It shows abstract geometric shapes.\"\n    }\n  },\n  \"c05da41e02424af3bec092290766b080\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single spherical object with a colorful pattern, resembling a beach ball, which falls under the 'sport_balls' category. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c065c43f9c2b48ef93f4d1788d2de8da\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c08cfdbaf515464a8c1cc05b3ce8934d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"c13e5d9f7aa24a63aac90e2280de5aec\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object from the 'sport_balls' class. It appears to be a distorted texture or an extreme close-up that makes identification impossible.\"\n    }\n  },\n  \"c14e98b47fdc420395e56a26986a7f10\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c17637ca11494004bceced81e1fbb621\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c18644406e1a434688d13d84d7356022\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c1c38a0e17fa4497812b2b612ef4a38a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'sport_balls' class. It appears to be a wooden object being carved or shaped, along with a tool and shavings.\"\n    }\n  },\n  \"c2874bc9abb945488fc69da5fb3cfe2d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture or detail, making it difficult to identify as any specific type of sports ball. It appears as a generic white sphere.\"\n    }\n  },\n  \"c34f5cd749754ebaa3112fca99f531ef\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any recognizable object, let alone one belonging to the sport_balls class. It appears to be an extremely thin slice or edge of an object, making it impossible to identify.\"\n    }\n  },\n  \"c42d928fd28740849ccdb46e696fa3bc\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large collection of generic white balls, not a single identifiable sport ball from the specified list. The image quality is also poor due to excessive brightness, washing out details.\"\n    }\n  },\n  \"c458d71e886542a8ab2ec805b97a409c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic orange sphere with no specific markings or texture to identify it clearly as a particular type of sports ball (e.g., basketball lines, soccer panels, tennis ball fuzz). It is too abstract and lacks the details needed to represent a specific object within the 'sport_balls' class.\"\n    }\n  },\n  \"c489bd12674b4c46bd0a6f0e45c457e0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basketball hoop and backboard, not a sport ball like a basketball, soccer ball, etc.\"\n    }\n  },\n  \"c48f10e4102d4c3ba2282d0c35d85c21\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robotic spider or insect, not an object belonging to the 'sport_balls' class.\"\n    }\n  },\n  \"c64119f83ef54b5da36106662313a07c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested class 'sport_balls'. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c670f94cb535438da71fbd30b098de7e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere, but the texture is highly abstract and does not clearly resemble any recognizable type of sports ball. While diversity is encouraged, this texture is too far removed from typical sports balls to be useful for training.\"\n    }\n  },\n  \"c6da7a1179d84ddb83e089ce33c24c78\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, washing out almost all detail. The object is barely visible and cannot be clearly identified as any specific sports ball.\"\n    }\n  },\n  \"c6dfb019a1d44157963eca4ef5e5e06b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c8976802708d45c39b695e50a0648f2c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object (a soccer ball) almost invisible and indistinguishable from the background. This is low quality.\"\n    }\n  },\n  \"c94d08a3c24349bbbbd7213532cd05ee\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"caaf5be9a4fa4141bfe332e033ef4afe\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an extreme side view of an object, making it impossible to identify as any type of sport ball. It does not clearly depict the object class.\"\n    }\n  },\n  \"cb651df959b04b6cae38d05682601580\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and indistinct in the image to be clearly identified as a sport ball. The quality is too low for training purposes.\"\n    }\n  },\n  \"cc05187d1647454585f3ac0871dcc8fa\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object's faceted shape and unusual surface texture do not clearly resemble any common sports ball listed in the class description. It looks more like an abstract geometric shape or a crystal.\"\n    }\n  },\n  \"cc1404296da546ba8fb82d5b6b69a917\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single spherical object, which falls under the general category of 'sports ball' or potentially 'beach ball'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"cc7bf5c7a8b647c7b8f10701c4cd620f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"cd55f0ea3a784c64a1eac861c731950e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball court, not a sports ball like a basketball, soccer ball, etc. We need images of the balls themselves.\"\n    }\n  },\n  \"cd6f6c89fa5647d694991901f12becc2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a Pokeball, which is a fictional object and not a type of sports ball listed in the target classes (e.g., basketball, soccer ball, tennis ball).\"\n    }\n  },\n  \"cdcfd1ddce1a4cdfa4547ba5cf3dd5ba\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify any object, let alone a sports ball. The quality is too low for training data.\"\n    }\n  },\n  \"ce019945355c4ed7b8cc319b35997bad\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone a sports ball. It appears to be a blank or corrupted image.\"\n    }\n  },\n  \"cea266722325474984c2205a88c6fd52\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which belongs to the sport_balls class. The image quality is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"cee4b24f04c842688dc2e5cbc1cabfb5\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows an elongated, stick-like object.\"\n    }\n  },\n  \"cfbf6138f39443259ad5e0fea79183e8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is a geometric polyhedron with unusual textures and patterns. It does not resemble any known type of sports ball.\"\n    }\n  },\n  \"cfc9ec23107e4ee5922c50164d90e6f2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, making it difficult to discern the object's details. Furthermore, the object depicted does not resemble any type of sports ball.\"\n    }\n  },\n  \"d06d152ebbcc44f0b60f37ae9350bf35\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a generic red faceted sphere. It lacks specific details (like panels, seams, dimples, or texture) to be clearly identified as any particular type of sports ball (e.g., soccer ball, basketball, tennis ball, golf ball). It's too ambiguous for the 'sport_balls' class.\"\n    }\n  },\n  \"d0cf7d007c5540a293910f7ec6750e2a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (tennis ball and tennis racket), but we require images with only one single object from the target class.\"\n    }\n  },\n  \"d20edf1c5e104ebc846716a9270827b0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'sport_balls' class. It shows some kind of target or landing pad structure, not a ball.\"\n    }\n  },\n  \"d3e3d3f7a43146a6ba66d9bf64179a78\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a cartoon-like ball with an eye, not a realistic sports ball from the specified classes.\"\n    }\n  },\n  \"d3e763c7a11c43cbad239a89b9e174b2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a soccer ball, which belongs to the sport_balls class. Although it has a voxelated style, it is recognizable and represents diversity in object appearance. The image quality is good, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"d3fc2490cbe54e37b6d5b159704c787f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stand or mount, not a sport ball.\"\n    }\n  },\n  \"d4c560493a0846c5943f3aeea58acb72\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d5164a86118c4756a547e6010aa049ac\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image appears to be a billiard ball. While used in a sport, it doesn't align well with the typical examples provided (basketball, soccer ball, volleyball, etc.) which are mostly field/court/lane balls. It represents a different category (table sport ball) and might not fit the intended scope.\"\n    }\n  },\n  \"d518ab79c13a4b38bef5f017e1a9eb75\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small table or stand, not a sport ball.\"\n    }\n  },\n  \"d606c9efe6ac45df80366037d4c303f1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d61ed8963b264a71b25e8e04aed2b5a0\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation. The non-traditional color scheme adds diversity.\"\n    }\n  },\n  \"d654768b0a624940a8ac1f0be7319a8e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested 'sport_balls' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"d696e679e85e48bc987ec6df8116ec21\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (a bowling ball and a bowling pin), violating the requirement for a single object per image.\"\n    }\n  },\n  \"d9a6afedd95e43339ffd1bfd83da82a6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a beach ball, which falls under the 'sport_balls' category. The image quality is sufficient, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"da3a78d46abc4abfb699461b3421ff48\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted does not resemble any standard sports ball from the provided list. It looks more like a gem or a fantasy orb due to its texture and faceted surface.\"\n    }\n  },\n  \"da67ff0a13f749bd88a924d14575600e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation learning.\"\n    }\n  },\n  \"dab2073ee4084e5f8c5f8bfc53831b74\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the specified class 'sport_balls'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"db5f9c28708142909b15212625a127f9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"db6cf0d5580e47758d480a539fc3dc2d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a geometric structure made of rods and nodes, not a recognizable sports ball like a basketball, soccer ball, tennis ball, etc.\"\n    }\n  },\n  \"dba1bc53994340dcba81ce26eb9f24fd\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object. It does not resemble any type of sports ball.\"\n    }\n  },\n  \"dbbfa480a2e4476c8b0ca91667087f44\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a black rectangular box, not an object belonging to the 'sport_balls' class.\"\n    }\n  },\n  \"dc8224840a6b43f08688db0ce45be476\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"de15e5fbc38a4ea8a367e3c4b49b9080\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is acceptable for training, and it's a relevant object for physics simulation.\"\n    }\n  },\n  \"df285705169f4e5da9cefefd88bc0d3c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is spherical and orange, but the prominent seam and the protrusion on the side do not clearly match any standard sports ball listed in the class definition. It looks more like a stylized toy or container.\"\n    }\n  },\n  \"df9b3a2d51db493980d68fa3b56360bb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"dfc64112213444a6bc50a44e4f7eda82\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"dff7be715f90478282f75c80930f1c22\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e0368cec6d0c4d91b48960528f760b9f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the requested class 'sport_balls'. The quality is good and it is suitable for physics simulation.\"\n    }\n  },\n  \"e041d432d5c141e0a8f57ce2784ca47d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single sports ball. Additionally, the image is too bright/overexposed, and some objects are only partially visible.\"\n    }\n  },\n  \"e074fd16148746eeb23510ae33ddeb7f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor; it is extremely bright and washed out, making it difficult to discern details. Additionally, it only shows half of the object (a golf ball).\"\n    }\n  },\n  \"e2af87d30bce4ee08611c20bbab345e1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball hoop structure, not a sports ball which is the target class.\"\n    }\n  },\n  \"e353e1acbf0d4b03b3bf4a9b05785554\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sports court or enclosure, not an object from the 'sport_balls' class like a basketball, soccer ball, etc.\"\n    }\n  },\n  \"e3600e525d444209bc69b32de44c6bb8\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a ping pong table with paddles and multiple small ping pong balls. It does not show a single, clearly depicted sport ball as the main subject, violating the 'ONE SINGLE OBJECT' requirement.\"\n    }\n  },\n  \"e393be9a47a24a7cae6142e13f5686d1\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single soccer ball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e3b4e0d9e3864fb584adbacb7a8adeb2\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e3c254d284ab4135bda47edec32f6acf\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three soccer balls and a surface), violating the requirement for cleanly depicting only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"e3c719662981472f8479031a074bc727\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e400c7a42e24465695a12eae5de51b2b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flat plane, not a sport ball.\"\n    }\n  },\n  \"e48b6c655732464fae11b25bf09771aa\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic white sphere with no discernible features (texture, seams, patterns) to identify it as any specific type of sports ball. It lacks detail and is too generic for the 'sport_balls' class.\"\n    }\n  },\n  \"e5712bffe9714a6aaa148b6b262b748d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single ball, which falls under the general category of 'sports ball' or potentially 'beach ball'. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"e66d8bba16474007a91f7087608b7014\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (a soccer ball and a plain white ball), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"e69cc5f09157437596af827e25d6acd7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e6c5d0811bcd46a2905082b134701bd9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the 'sport_balls' class. The image quality is good and it is suitable for physics simulation.\"\n    }\n  },\n  \"e76702c2a51045dd82894cfce982447e\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a speed bag attached to a stand, not just a standalone sports ball like the examples provided (basketball, soccer ball, etc.). It depicts a composite object rather than a single ball.\"\n    }\n  },\n  \"e78940dc9bc14145bb22ec2586d3431c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a heavily distorted and incomplete rendering of a basketball. It is not a clear depiction of the object and is low quality due to the rendering artifacts.\"\n    }\n  },\n  \"e7d33789de2b4fd286cf9190b855de28\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"e83aa357cbbe4a5e8f47a028ae1166ce\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it difficult to discern the object's details and texture. Additionally, while it is spherical, it doesn't clearly resemble any standard sports ball from the provided list due to its structure (many holes) and the poor image quality.\"\n    }\n  },\n  \"e9d597bbf1ef4f9183ddf08ba8c28c88\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, lacks contrast, and the object is almost invisible against the white background. It is impossible to identify the object, let alone determine if it belongs to the sport_balls class.\"\n    }\n  },\n  \"ec14d4c49b0345209bf7a7388dacbd47\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is not a sport ball. It appears to be some kind of ring or decorative container, not belonging to the requested class. Additionally, the image quality is poor due to excessive brightness and low contrast.\"\n    }\n  },\n  \"ecb9a79b1b9e4fa6bf492ca5ccf06011\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a complex lattice sphere, which does not resemble any common sport ball like a basketball, soccer ball, tennis ball, etc. It appears to be more of an abstract or decorative object and is not representative of the 'sport_balls' class.\"\n    }\n  },\n  \"eccad1195469423aada2f0e7725a2890\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"ecf9096a85ac4fb7b9cc07fc53c57a14\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its details. It is of very low quality.\"\n    }\n  },\n  \"ed408aa92cc14dcba17839e648faba2a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a dome or half-sphere, not a full ball typically used in sports as listed in the class description (basketball, soccer ball, etc.). Therefore, it does not belong to the 'sport_balls' class.\"\n    }\n  },\n  \"ed57b69b571046ea8c67112732a65896\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a beach ball, which belongs to the 'sport_balls' class. The quality is good, and while it includes a small patch of ground/water, this provides context relevant for physics simulation (interaction with surfaces) without cluttering the image or obscuring the main object.\"\n    }\n  },\n  \"edc344dcc65440ea97b5eae84f1957a4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"edce643d9ea246b68fabad52dcfe92ec\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is spherical but does not resemble any standard sports ball listed in the class description. It appears to be a decorative or abstract object rather than a functional sports ball.\"\n    }\n  },\n  \"edfe6a80a7ac4cc88d24481a1f97418a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Christmas ornament (bauble), not a sport ball.\"\n    }\n  },\n  \"ee18423fb5a54fa6bfb07094848feb70\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is extremely bright/overexposed, making it difficult to see the details of the object clearly. The white parts blend almost completely with the background.\"\n    }\n  },\n  \"ee6c854ba31743bc8ac0a5c96316d662\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and blocky (voxelated) and does not clearly resemble any recognizable type of sports ball.\"\n    }\n  },\n  \"eee26aeb02e947008e3a258d99a0937b\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a broken tennis ball along with a fragment of another object (possibly a racket). We need images of single, intact objects.\"\n    }\n  },\n  \"ef5803a1fa694d429d3627d5a026d2ab\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its details. The quality is too low for training purposes.\"\n    }\n  },\n  \"efcea954e051494bbc710afd6bd4315a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone carving depicting people playing with a ball, not an actual sport ball itself. We need images of the sport balls, not representations of them.\"\n    }\n  },\n  \"f062524bd9cd436e8e859d7ae914ab6c\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any recognizable object, let alone a sports ball. It appears to be abstract geometric shapes.\"\n    }\n  },\n  \"f08dada8b253466daff7bfd6445c9e41\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single basketball, which belongs to the 'sport_balls' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"f0feb812d4b7416ab630e79a531dc601\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a Pokeball, which is a fictional object and not a real-world sports ball like those listed in the class description (basketball, soccer ball, etc.).\"\n    }\n  },\n  \"f1a674f036e047eaa074ad746964a6e4\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a can or container, not a sports ball.\"\n    }\n  },\n  \"f220d4765ec14daf80eb2a8a8d36c923\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a sphere, but the texture and pattern do not clearly identify it as any specific type of sports ball listed in the class description. It looks more like a generic patterned sphere or possibly a toy.\"\n    }\n  },\n  \"f33ed1f09bef4d9bb757c25c1304ec96\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object appears to be a ball of yarn or fabric, not a sports ball like those listed (basketball, soccer ball, etc.). It does not belong to the 'sport_balls' class.\"\n    }\n  },\n  \"f4fd481c74bc4e2bb55555f12cd6e1ba\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object in the image is spherical, but its texture is very irregular and lumpy, making it difficult to identify as any specific type of sports ball listed (e.g., basketball, soccer ball, tennis ball, etc.). It does not clearly depict an object from the target class.\"\n    }\n  },\n  \"f536b891d32847ae8b8660ccbf398611\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single golf ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"f6323fb9e501442fb1c60f931e713658\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three distinct sports balls and a stand) instead of a single object as required.\"\n    }\n  },\n  \"f7935e72f7754f2daca66cafeb8281eb\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a tennis ball, which belongs to the sport_balls class. Although the texture is simplified, the shape and seam pattern are characteristic. The image quality is good and suitable for training.\"\n    }\n  },\n  \"f7fb5ae0d11e4d37a2d9ebccfcba5592\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor due to excessive brightness/overexposure, which washes out details and makes the texture unclear. While the object shape resembles a sports ball (like a cricket ball), the poor lighting conditions make it unsuitable for high-quality training data.\"\n    }\n  },\n  \"f923538fe3034464aeeef036d2b6afe6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single baseball, which belongs to the 'sport_balls' class. The image quality is good, and the object is relevant for physics simulation in video games.\"\n    }\n  },\n  \"f93b0d8fb569440b8aa1449440a1614d\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a ball that is severely flattened or distorted, not representing a typical shape for any of the listed sport balls. This makes it unsuitable for learning standard physics parameters for the class.\"\n    }\n  },\n  \"f970bea6d4bd4bdbbd699321783138a9\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts chocolate truffles or similar food items on a plate, not any type of sports ball.\"\n    }\n  },\n  \"f9f92c3196ce41f9acac925d3c9f7116\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a basketball hoop and backboard, not a sport ball, which is the target class.\"\n    }\n  },\n  \"fad641f2a73e4924b8118acfe1bde2a7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tennis ball, which belongs to the sport_balls class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"fb5caecebe0d4fb0b9cbbc76a38cb413\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract geometric structure, not a sports ball like a basketball, soccer ball, etc. It does not belong to the specified class 'sport_balls'.\"\n    }\n  },\n  \"fb95c7cd06bd4ed3b056e2dde34d7295\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a white hemisphere with a hexagonal pattern, which does not clearly represent any specific or generic sports ball from the provided list. Additionally, the image is overly bright and lacks detail, making it unsuitable for quality training data, especially for inferring physics parameters.\"\n    }\n  },\n  \"fc8f1162901a4e38b506fe1ab229f296\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bowling ball, which belongs to the sport_balls class. The image quality is good and suitable for training.\"\n    }\n  },\n  \"fd042692e0d74c27927949ef923233bf\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a sphere, a hoop-like structure, blocks, grid structures) instead of just a single sports ball. The sphere itself is very generic and lacks the distinct features of a specific sports ball.\"\n    }\n  },\n  \"fda0ddc50a134455bedf3913fb6b2da7\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single beach ball, which is part of the 'sport_balls' class. The image quality is good and suitable for training data. Beach balls are relevant for physics simulation.\"\n    }\n  },\n  \"fdd5feaf7755475b892d4dd2e1d8f972\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a small basketball on a yellow cylinder, a patterned base, and a floating blue shape), not just a single sports ball as required.\"\n    }\n  },\n  \"fe8dcd2debcd43d79a9fa9ed6534bac6\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"feda0e94512d4bd992f294b8c179778f\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a sport ball.\"\n    }\n  },\n  \"ff3b7016740e403f902a7ee54b07ef52\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object (basketball) is too small and distant in the image, making it difficult to clearly discern its features and details. The focus is more on the floor than the ball.\"\n    }\n  },\n  \"ffffdd021dde4159a86bdb720a77fb1a\": {\n    \"obj_class\": \"sport_balls\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a ping pong ball, but it also prominently features a large red surface (likely a table) and another object in the background. The requirement is for images depicting cleanly ONE SINGLE OBJECT, and this image includes significant portions of other items.\"\n    }\n  },\n  \"00130eea9e884209be92f68378a817e8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rubber duck toy, which belongs to the specified class. The quality is acceptable, and it's suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"0093e31ebf034f6695809eea95578953\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects, not a single object. Additionally, none of the objects clearly depict a rubber duck or a typical bath toy from the specified class list.\"\n    }\n  },\n  \"00c2cd5dd3c147deab6a0b3b3cddb5a0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts some kind of structure or landscape element, not a rubber duck or related toy.\"\n    }\n  },\n  \"015d8349c1db4609a510d0f80edcedd5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy constructed from building blocks (like Lego), resembling a fish or submarine. This does not fit the description of 'rubber_ducks_and_toys', which typically refers to soft plastic or rubber bath toys like ducks or other animals.\"\n    }\n  },\n  \"01ce031bc24444fc8e7cf040129b4774\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost completely invisible and unrecognizable. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"0242fe38361c4bdabadcfddb42eb3325\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is poorly cropped and only shows a small, unrecognizable fragment of the object. It does not clearly depict a rubber duck or toy.\"\n    }\n  },\n  \"0291d4c4952f4f4a9abf974106d88933\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'bath toy' or 'rubber animal toy' description within the requested class. The quality is good, and it's suitable for physics simulation as a floating/squeaky toy.\"\n    }\n  },\n  \"02fa220795594ecb85284ec1dfc41a4c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"034c64470c6c4f0495aa880488cb34d7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object. It does not appear to be a rubber duck or related toy based on the faint outline visible.\"\n    }\n  },\n  \"0360a1056dba4140b2c6be3c4abec3a6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bead maze toy, which does not belong to the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber toy).\"\n    }\n  },\n  \"03ea80a7cf89477fa56c95803874c02d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily distorted and fragmented, making it impossible to clearly identify the object. It does not resemble a rubber duck or any recognizable toy from the specified class. The quality is too low for training purposes.\"\n    }\n  },\n  \"0454cbfcca314e6380fc770b69c75227\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy robot, which does not belong to the 'rubber_ducks_and_toys' class, even though it is a toy. The class specifically targets rubber ducks and similar bath/squeaky toys.\"\n    }\n  },\n  \"045e232051bf4469bef9372c98174172\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor, the object appears distorted and fragmented. Additionally, the object itself (some kind of activity walker toy) does not clearly belong to the specified class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"04a7205ca4974e01a1e769169f814076\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, but we require images with only a single object.\"\n    }\n  },\n  \"04e86d384a07414f8eb241920b830f88\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of wood or driftwood on grass, not a rubber duck or toy.\"\n    }\n  },\n  \"0599ce75f70b413e9e05528695047635\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not clearly depict any object, let alone one from the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"05f236fc94e84022b90168437c43b453\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a grey box, not an object belonging to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"06b32aca8ac84b648111c452a927ddf0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class that focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"08271bc54cef437bab577f8ea5738f50\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a handheld gaming console (Game Boy), which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"08d3d7cc1bbc4835973e54ced42902ca\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"09740836b5f04e8397a3b826ced11ab0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy tank, which does not fit the specified class of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, squeaky toys).\"\n    }\n  },\n  \"099f7ee70c7d4716aeecb05329009702\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy duck, which belongs to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"09beba2fa834415f89734b21376fd886\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rubber duck toy, which belongs to the specified class. The quality is good, and it shows a single object suitable for training data. The hat is an acceptable accessory for this type of toy.\"\n    }\n  },\n  \"0c864d88dd064f98957feaa395e62fff\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a 3D character model of Donald Duck in a T-pose, not a typical rubber duck or bath toy. It doesn't fit the common understanding or physical properties (like being a simple rubber/plastic floating toy) associated with the target class.\"\n    }\n  },\n  \"0d4c6b9982f444f4a40e20cc9b9df7ef\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized figurine or robot toy on a stand, not a rubber duck, bath toy, or similar item as specified by the class description.\"\n    }\n  },\n  \"0fc7273dcd1b4c7c957d0f5171f166b2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy tank, which does not belong to the 'rubber_ducks_and_toys' class. The class primarily focuses on bath toys like rubber ducks.\"\n    }\n  },\n  \"1027c7ffcb3748bb9f1284d40f399e5a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy shark, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class. The image quality is good.\"\n    }\n  },\n  \"107bdc7e95604050965de69cf7ab36b3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rubber animal toy, which fits within the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"108466abbd534984905f5cf0604dab52\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows an action figure (Hulkbuster), which does not fit the class description 'rubber_ducks_and_toys' that focuses on items like rubber ducks, bath toys, and squeaky toys.\"\n    }\n  },\n  \"10c18c7d09484517bfc4918cd042217f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and does not depict any recognizable object, let alone a rubber duck or toy. It is too bright and lacks content.\"\n    }\n  },\n  \"10ccb872a92f4573a338ddd40fa9910d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts stylized human figures, not rubber ducks or related toys.\"\n    }\n  },\n  \"113b1409db434066aec805acb957569c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-polygon, fragmented 3D model that does not resemble a rubber duck or any related toy. The quality is very poor, and the object is unrecognizable.\"\n    }\n  },\n  \"12e1b114a1334226b4cd460a4179e72c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden toy, not a rubber duck or similar bath toy as specified by the class description.\"\n    }\n  },\n  \"133a9252e82a4505af46eb012641e1e4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cannon, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"1371952c777c4f758fa1d3863de10297\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object completely unrecognizable.\"\n    }\n  },\n  \"1381f6287401493eaa5d2dc99a14da87\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows taxidermied ducks, not rubber ducks or toys.\"\n    }\n  },\n  \"13e7a7a4800a4b32b5541d0c73d8c66f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single object that can be interpreted as a 'rubber toy' or 'squeaky toy', fitting within the requested class 'rubber_ducks_and_toys'. While the shape is abstract and the texture is somewhat unusual, it represents diversity within the toy category and is suitable for physics simulation.\"\n    }\n  },\n  \"1436c0030b1a41e69041dfe5bca52e01\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy (a pig), which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good and suitable for training.\"\n    }\n  },\n  \"1467f79dc22e46c49e68a688865e9f70\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single floating toy duck, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"157a78afd2ed41e892fd153cc2aa0539\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a toy duck) belonging to the 'rubber_ducks_and_toys' class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"15c553092be0467b8b7e2510ceb4228c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden toy helicopter, which does not fit the description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, plastic duck).\"\n    }\n  },\n  \"1691f56428df4b3482614496c6e91083\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Santa Claus figure, which does not fit the specified class 'rubber_ducks_and_toys' that focuses on rubber ducks and similar bath/animal toys.\"\n    }\n  },\n  \"16d5c9e5557c41c7880cd89d8b714782\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several rubber ducks and a toy truck). We need images depicting only ONE single object from the specified class.\"\n    }\n  },\n  \"1803c0519e9143398cef07e31b0ceeff\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is an egg-shaped textured item, which does not clearly depict any specific object from the 'rubber_ducks_and_toys' class list (like a rubber duck, bath toy, etc.). It's too ambiguous.\"\n    }\n  },\n  \"185359b93eb3424ca73b5cd7719ccc0b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cabinet or wardrobe, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"193cf0e349cd48fbb94051db496f55e5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very abstract and poorly defined shape. It is difficult to confidently identify it as a rubber duck or any specific type of bath toy. The lack of clear features makes it unsuitable for the dataset.\"\n    }\n  },\n  \"19f3599a89ce43a4af821f8850cc2ed3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1a02fa2590ad496db9db5d1c64c7cff9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy vehicle, not a rubber duck or a similar bath toy as specified by the class description.\"\n    }\n  },\n  \"1a6788d9d2924a61bc22f352bf8e13e1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows toy blocks, which do not belong to the specified class 'rubber_ducks_and_toys'. Also, there appears to be a rendering artifact or another object partially visible on the right.\"\n    }\n  },\n  \"1a80d408b39c439e99ecaece86cc560a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright/overexposed, making it difficult to see the details of the object clearly. This impacts the quality required for training data.\"\n    }\n  },\n  \"1a8569c3721c4b65b8502a859c43be8d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rubber_ducks_and_toys' class, specifically as a 'rubber animal toy' or 'bath toy'. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"1a9460afcadf44ac9f1285c0b56d56fa\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (the toy whale and the wooden surface it's resting on, plus background elements) rather than cleanly depicting just the single toy object. The framing and cropping are also poor.\"\n    }\n  },\n  \"1aaae7a44f7c43f2853809a9afead22c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that is recognizable as a toy duck or bath toy, fitting the requested class. Although the texture/pattern is unusual (red with white cutouts), the shape is clear, the image quality is good, and it aligns with the request for diversity.\"\n    }\n  },\n  \"1b41e3e63867499cada873215bf255ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy truck, which does not belong to the 'rubber_ducks_and_toys' class. This class is specifically for items like rubber ducks, bath toys, and similar rubber/plastic animal toys.\"\n    }\n  },\n  \"1c0cf2363ef04f1eb78d5b11fcb4b790\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized character (possibly a duck or penguin) wearing clothes and riding a unicycle. While it could be considered a 'toy', it does not clearly represent the core concept of a 'rubber duck' or 'bath toy' as described in the class list. It's a complex composite object rather than a simple rubber toy.\"\n    }\n  },\n  \"1c5b01f4ebf14c4c968e3afd4061e001\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a blocky toy structure, not a rubber duck or similar bath/rubber toy as specified by the class list.\"\n    }\n  },\n  \"1cb94fdbc1994acf97540ef069eb0a6f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class. This class specifically targets rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"1d61e785d77946c9a026ff4cf2373fa5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is too abstract and does not clearly resemble a rubber duck or any recognizable bath toy. Its shape and texture make it difficult to identify as belonging to the target class.\"\n    }\n  },\n  \"1d64e844e963468f94506e9cad575680\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is too abstract and blocky. It does not clearly resemble a rubber duck or any recognizable toy from the specified class list.\"\n    }\n  },\n  \"1de6daa10a0c442aa64ec126ffce7e2d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"1ef90928c6994bb28d8069069dd5adce\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a realistic mallard duck, not a rubber duck or a toy duck as specified by the class description.\"\n    }\n  },\n  \"1f9bb82116bb4ad187c91181f9f137fd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a dragon figurine, which does not clearly fit into the 'rubber_ducks_and_toys' category, especially the common examples like rubber ducks or bath toys. It appears to be made of a harder material, not rubber, and doesn't resemble the typical items in this class.\"\n    }\n  },\n  \"1fa7224dabac432cb348c24d1743ae74\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"1fd7202af61c4b68afab3fc5997dc0bd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood and does not clearly resemble a rubber duck or a typical bath toy described in the class list.\"\n    }\n  },\n  \"208f64a19478420e9b5874f70315b214\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden barrel, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"209a493eeb534b519ab8e5e6377def19\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a model of a castle, not a rubber duck or a related bath/rubber toy.\"\n    }\n  },\n  \"20acbb7e28a0484f9512227684d8844c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very low-polygon, untextured model that is difficult to definitively identify as a rubber duck or bath toy. It lacks the necessary detail and visual quality for a game asset or for inferring material properties.\"\n    }\n  },\n  \"21201df8267b462a80dfaf6a15d3aec5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making the object almost completely invisible and impossible to identify. The quality is too low for training data.\"\n    }\n  },\n  \"2163c3e87e6244b0907978c9c480b8c3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metallic, chain-like object, which does not fit the description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber toy).\"\n    }\n  },\n  \"22848090bba74e738da4b7129fb22be5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object from the 'rubber_ducks_and_toys' class. The object shown appears to be made of wood or some other rigid material and does not resemble a rubber duck or similar bath toy.\"\n    }\n  },\n  \"22dbda7e09ef49d29203832a68b23bbf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a broken doll, not a rubber duck or typical bath toy. The fragmentation makes it unsuitable for representing a single, intact object for physics simulation.\"\n    }\n  },\n  \"24d569b8192e4b2092a7cb365127253c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a rubber duck or toy.\"\n    }\n  },\n  \"24e5266d9371450a856a8b3a6cebf273\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple unrelated objects (a duck toy, a plane/wall, and palm trees) instead of cleanly depicting just one object from the target class.\"\n    }\n  },\n  \"2542f004d5e44132b05f854d5a920180\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows only a partial rendering of the object (head and neck/upper torso), not the complete toy. This makes it difficult to clearly identify and unsuitable for representing a whole object in a physics simulation.\"\n    }\n  },\n  \"25a4fc14c9ea419db841159c2ed32f79\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a model tree, not a rubber duck or bath toy as specified by the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"263a3724f6b3476ca90de38e68d86c20\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy box or packaging, not a rubber duck or bath toy itself.\"\n    }\n  },\n  \"26dc0c0a081144af91a962494c147ad1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy dinosaur, which fits under the 'rubber animal toy' or 'rubber toy' categories within the requested class 'rubber_ducks_and_toys'. The image is clear, high-quality, and depicts a single object appropriate for the dataset.\"\n    }\n  },\n  \"26dcc434507245748ff822107c7ef53d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy (dolphin), which falls under the 'rubber_ducks_and_toys' class. The image quality is good and it's suitable for physics simulation.\"\n    }\n  },\n  \"270883cdfde245d29712e026fa4befe7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (dog toys), none of which clearly belong to the target class 'rubber_ducks_and_toys'. We need images of single objects like rubber ducks or bath toys.\"\n    }\n  },\n  \"271798cd680649e68be5958a7f1e072e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor. It is too bright, washed out, and appears fragmented or incomplete, making it difficult to clearly identify the object as a rubber duck or toy. It is not suitable for high-quality training data.\"\n    }\n  },\n  \"278d7637c0da43058ae6bc06b0b99bf2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a realistic-looking duck (possibly a mallard or a decoy), not a typical rubber duck or bath toy as described in the class definition. The texture and coloration are too realistic for the 'rubber_ducks_and_toys' category.\"\n    }\n  },\n  \"279ce324c8cf4e6b89011e92e233b107\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a model castle, which does not belong to the requested class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"27a576f6e8e749548a4b7f264def9d9c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and the object is barely visible, making it impossible to identify and unsuitable for training due to very low quality.\"\n    }\n  },\n  \"27e9f264726849699cd06ef7f85de7fe\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is poorly defined and abstract. It is difficult to clearly identify it as a rubber duck or any specific type of bath toy. The lighting is also quite dark on one side, obscuring details.\"\n    }\n  },\n  \"28c5055818a64b529660ed4261040f73\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object, possibly a box or block, which does not fit the 'rubber_ducks_and_toys' class description (rubber duck, bath toy, plastic duck, etc.).\"\n    }\n  },\n  \"294ffaaaefc54a92b7ac8ab3e4f0528e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any object, let alone determine if it belongs to the 'rubber_ducks_and_toys' class. The quality is too low for training data.\"\n    }\n  },\n  \"29c7804b96834717847269ed96fc162d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a green box, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"2a0a78e6c910418e86b81bee9b3d12d5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Christmas ornament, not a rubber duck or toy belonging to the specified class.\"\n    }\n  },\n  \"2a16de5706b34171bc20123e3581d561\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed bunny toy, which does not fit the class description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber toy, plastic duck).\"\n    }\n  },\n  \"2a82621f274445ff8898bdb620465f07\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a realistic duck model or decoy, possibly taxidermy or wood, mounted on a base. It does not fit the description of a 'rubber duck' or 'bath toy' as specified in the class list.\"\n    }\n  },\n  \"2b2f9ff59dcc48c5ab8563afdd184356\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a stylized rubber duck toy) belonging to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"2b4f4fdccde8429a84c17ef2e3363884\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy gun, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"2bc3403182964c9f92feeafad6cdabb6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to clearly discern the object's features and material. The contrast with the background is very low.\"\n    }\n  },\n  \"2bde84068e544f09b0a789768745d3fb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class. This class is specifically for rubber ducks, bath toys (typically animals or ducks), squeaky toys, etc.\"\n    }\n  },\n  \"2bf26171acd9479389aba4394ffa577b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it difficult to discern the details of the object. This constitutes low image quality.\"\n    }\n  },\n  \"2bf620389d93433191524431042942e9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract creature that does not clearly resemble a rubber duck or any of the specified toy types (bath toy, squeaky toy, etc.). The visual quality is also low.\"\n    }\n  },\n  \"2c0fcb5069fe488baf15c60f8b53a516\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a mechanical wooden automaton toy, not a rubber duck or a typical bath toy made of rubber or plastic as described in the class list.\"\n    }\n  },\n  \"2c87c9f71ee04f29853b90e31e27a5b5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a skull or trophy on a pedestal, not a rubber duck or similar toy.\"\n    }\n  },\n  \"2ccb17a769fd44158813f74d36fd3072\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy water gun, which does not fit the class description 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"2ddd2698d0984a788145d08652a96184\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image appears to be a trophy or statue, not a rubber duck or bath toy as specified by the class.\"\n    }\n  },\n  \"2e67af60601b4673ab6323574e26838a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The quality is adequate for training data, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"2f04db2ae9ae470aba628a7537bfac09\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'bath toy' or 'rubber animal toy' categories, which are part of the requested class. The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"2f20c6c7c1754e538c8a95ec2518e7b0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden stick, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"2f622128d566435a97564781735e0ab4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (sphere, blocks, spinning top), none of which belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"3008171041174814beb7135e63f686cb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized toy duck, which belongs to the requested class. The voxel art style adds diversity, and the image quality is good. Although it sits on a base, it appears to be part of the single toy object/trophy design.\"\n    }\n  },\n  \"304f877357de42a6a018b1d96fa571af\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy bear, which does not belong to the 'rubber_ducks_and_toys' class. The class specifically mentions ducks and related bath toys.\"\n    }\n  },\n  \"30c9908684fc458eb3655593fd0ce634\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is very low due to extreme overexposure/brightness, making details difficult to see and rendering it unsuitable for high-quality training data.\"\n    }\n  },\n  \"3173e9d9ec9e4bd184bf59686d08c373\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object, a pink toy duck, which falls under the 'rubber_ducks_and_toys' category. The quality is acceptable, and the low-poly style adds diversity. It represents an object suitable for physics simulation.\"\n    }\n  },\n  \"319ae87bdd364a70afd13b26026f0944\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed toy (looks like a teddy bear), which does not belong to the 'rubber_ducks_and_toys' class. This class is specifically for rubber or plastic bath toys like ducks.\"\n    }\n  },\n  \"3231416ac85443caade8d0a57fb7728f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"323a8be24f13461d89c8223c793bb226\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class. This class specifically includes rubber ducks, bath toys, and similar rubber/plastic animal toys.\"\n    }\n  },\n  \"327a076dc0764243b0d7156be505ac58\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the requested class. The quality is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"32c1ab55b7b8489dae3c9a0ecefdb170\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy truck, which does not belong to the 'rubber_ducks_and_toys' class that focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"32dc8a44ce3c4f2c8b20ebc393b4500b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and distant in the image, making it difficult to clearly discern its features. This impacts the overall quality for training data.\"\n    }\n  },\n  \"335ee7ce6cd84344aea79be8afddeceb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object, a toy duck (albeit with accessories like a hat), which belongs to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation purposes.\"\n    }\n  },\n  \"33619cf0e6b94714bd611fdbd1268cc7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"33a57e0e208a469e8034ab0ea978488b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class that primarily includes rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"33aea90c377546db9ed3678634a4972b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows the head and neck of the duck toy, not the complete object. We need images depicting the full object for training.\"\n    }\n  },\n  \"33f6c41fe1b5401cb4afb1addaa83a56\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is too abstract and lacks texture or defining features. While it vaguely resembles a figure in a float, it doesn't clearly depict a rubber duck or a recognizable bath toy from the specified class list.\"\n    }\n  },\n  \"344175298e1a46cba16285da2ad287d7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy duck character, which falls under the 'rubber_ducks_and_toys' category (specifically 'toy duck' or 'rubber animal toy'). The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"35c2fbb679e64c258c30dd5b4d55bba5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy robot, which does not fit the specific class description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy, floating toy, rubber animal toy).\"\n    }\n  },\n  \"36eb4051e23b4ae980259df3930336e7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, and the object is significantly obscured by a large yellow shape, making it difficult to clearly identify. This does not meet the quality requirements for the dataset.\"\n    }\n  },\n  \"370164a00a83463b830112dfc52435c6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a robot toy, which does not fit the specified class of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, etc.).\"\n    }\n  },\n  \"373e639c22004e4fb508e0f7a8c40ed6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rubber toy' or 'bath toy' categories, which are part of the requested class 'rubber_ducks_and_toys'. The image quality is good and suitable for training.\"\n    }\n  },\n  \"37757cff54e54ad4a63d1b2d3cc41181\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is taken from an extreme side angle, making the object completely unrecognizable. It's impossible to tell if it belongs to the 'rubber_ducks_and_toys' class or any class at all. The view does not clearly depict the object.\"\n    }\n  },\n  \"37f3ff420f414c128de6f1cf648415dc\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy truck, which does not belong to the specified class 'rubber_ducks_and_toys' that focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"38f89db1ace845df824bd72ff12ee10f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"3924864d17b14bf0a3d8e0fe44b3dd3a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"39584cd3ee4344ada7acb24b1ef48535\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object. The quality is too low for training data.\"\n    }\n  },\n  \"39d9fc4aacd14925bc8b965a4e60f93f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and the object is barely visible. It is too bright and does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"3a693a18e1dc48e897a9b8d64a4277ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy robot, which does not fit the specific class description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber animal toy).\"\n    }\n  },\n  \"3a7e7cb8d062471dab1f4245a157d8c3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy duck, which belongs to the specified class. The quality is good, and the unusual texture adds diversity.\"\n    }\n  },\n  \"3ab155c53a294b6ab226d947ec9aae5a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a woven ball toy, not a rubber duck or related bath/rubber toy as specified by the class definition.\"\n    }\n  },\n  \"3b0168f8cc9e4d739d5f7c5165cc706d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very abstract representation that barely resembles a rubber duck or toy. It lacks defining features like a beak, eyes, or distinct body shape, making it difficult to clearly identify as belonging to the target class.\"\n    }\n  },\n  \"3bf8d4def833493ea330f6494cb789ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor due to excessive brightness/overexposure, making details hard to see. Also, the object, while a toy, doesn't strongly resemble the typical items in the 'rubber_ducks_and_toys' class (like bath toys).\"\n    }\n  },\n  \"3c1f7d0c2212476da83b135ca14f41d7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image, especially from this top-down perspective, does not clearly depict a rubber duck or a typical bath toy. It looks more like a stylized pigeon or another type of bird figure, making it ambiguous for the target class.\"\n    }\n  },\n  \"3c56ae2d7ec34e80af39d3274ebafe75\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"3c96a2a3f207411987c6151e680b72d2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy boat, which fits into the broader category of 'bath toy' or 'floating toy' specified in the class description. The image quality is good and depicts a single object clearly.\"\n    }\n  },\n  \"3dd880c963b24af9824e186370fdef6b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a spring mechanism on a wooden base, not a rubber duck or similar bath toy.\"\n    }\n  },\n  \"3f2539831334454097110723cd96ec3a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy tank, which does not belong to the 'rubber_ducks_and_toys' class. The class is focused on bath toys like rubber ducks and similar items.\"\n    }\n  },\n  \"3f255d04efaf421f9cd9562ad67db441\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an anime-style character/figure, not a rubber duck or a similar bath/rubber toy as specified by the class.\"\n    }\n  },\n  \"3f74dc500e204feb9ee935533f12b9f8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (penguin toys), not a single object. Additionally, these appear to be plush toys rather than rubber or plastic bath toys as specified by the class description.\"\n    }\n  },\n  \"3fd311baa855474496f87d5e0d99f088\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation purposes (e.g., floating, dropping).\"\n    }\n  },\n  \"4022532d07184d6ab73daff60c7917e5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden Ferris wheel toy, which does not belong to the 'rubber_ducks_and_toys' class (e.g., rubber duck, bath toy, plastic duck).\"\n    }\n  },\n  \"40e366463b744c3e954c850a11ae3a56\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble any of the items listed in the 'rubber_ducks_and_toys' class (e.g., rubber duck, bath toy, rubber animal toy). It appears to be a different type of toy or object altogether.\"\n    }\n  },\n  \"40f64ed6859e47febe5762701f9dddda\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an incomplete 3D model (missing parts of the body/legs) of Donald Duck, not a typical rubber duck or bath toy. The incompleteness makes it unsuitable for the dataset.\"\n    }\n  },\n  \"4154a4c0868b43e2a4661d43b31aa855\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the target object (toy duck) but also includes a base/surface and another small object, violating the requirement for cleanly depicting only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"415c745ce5134ce98e99046583055952\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a doll/action figure (Jessie from Toy Story), which does not belong to the specified class of 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"41e58d8499b8400abcb13d4a67dd2a64\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too heavily cropped and does not clearly depict the object. It is impossible to identify the object as belonging to the 'rubber_ducks_and_toys' class from this view.\"\n    }\n  },\n  \"4226000d3f8d4b479af530d25f17b1a7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a hybrid object (duck-banana) which does not clearly represent the 'rubber_ducks_and_toys' class. While creative, it combines elements from different categories, making it unsuitable for training purposes, especially for learning physics properties specific to rubber toys.\"\n    }\n  },\n  \"422fb1c1b53f471496b419edba422aee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a rubber duck or any related toy from the specified class list. It looks more like a stylized grenade or torch.\"\n    }\n  },\n  \"42998e9beb444fd0b480e9d5dd5fb700\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the specified class 'rubber_ducks_and_toys' (which focuses on ducks, bath toys, and rubber animal toys).\"\n    }\n  },\n  \"42c616ac82bb4187b853e321f49bce22\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a rubber duck or any related toy. It appears to be a fragmented 3D scan of an interior space, which is irrelevant to the requested object class.\"\n    }\n  },\n  \"42efe6bc029a4f33a979cad0cb9a3ade\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a 3D model of a building complex and surrounding area, not a rubber duck or toy.\"\n    }\n  },\n  \"43aa1a941a1f4afdbb2c66194fef0096\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a simple brown and black geometric shape, which does not resemble a rubber duck or any other item listed in the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"43e98d202b434c888ddcf84775cf0c6d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows toy cars, which do not belong to the specified class 'rubber_ducks_and_toys'. Additionally, the image contains two objects, not a single object as required.\"\n    }\n  },\n  \"4411c16dbc6c4e479cc48f7ce4a9508b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"44ed58f391c04161a36665edd592d4c0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robot toy, which does not belong to the 'rubber_ducks_and_toys' class. The class is specifically for rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"467fd3bcc8b641f488cbb6a9d9e3520d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object resembles a duck decoy more than a rubber duck or bath toy. The texture appears rough, possibly wood or hard plastic, not the typical rubber or soft plastic associated with the target class. It doesn't clearly fit the description of a 'rubber duck' or 'bath toy'.\"\n    }\n  },\n  \"470becdc96224ca99b11e47b2c739bda\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rubber duck toy, but it is mounted on a large, non-removable pedestal, making it not a typical representation of a single rubber duck or bath toy. We want images of the toy itself, not as part of a larger structure or display.\"\n    }\n  },\n  \"47a99dcfd218456b9f78fb46723d8144\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy dog, which could potentially fit under 'rubber animal toy', but it does not strongly resemble the core items of the class (rubber ducks, bath toys) and appears to be more like a plush or hard plastic figurine rather than a rubber toy. Additionally, there are rendering artifacts around the base of the object, reducing the image quality.\"\n    }\n  },\n  \"4834657fd2054be889dd03332449bdb8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the toy object placed on a distinct wooden base, which is an additional object not belonging to the target class.\"\n    }\n  },\n  \"4b5d4f5cb114466ba84dc8d6e386fb7c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class. The class specifically mentions rubber ducks, bath toys, and rubber animal toys.\"\n    }\n  },\n  \"4cb5626dc14d4532a27b33663b541f81\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a realistic-looking duck (possibly a mallard), not a rubber duck or a toy duck as specified by the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"4d4db3dbf0af4051800550dd3e8d77da\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not depict anything recognizable as a rubber duck or toy.\"\n    }\n  },\n  \"4deba21f683a40fb86d411c90f24714a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pixelated character figure, not a rubber duck or bath toy.\"\n    }\n  },\n  \"4e7ee51036744396b01ec9ef8269fb54\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy police station playset, which does not belong to the specified class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"4f064b7b83ae45e0b0908693bfcea6c0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rubber animal toy, which falls under the specified class 'rubber_ducks_and_toys'. The quality is acceptable and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"4fa303a533214c688806a2290f105deb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its details. It does not appear to be a rubber duck or toy.\"\n    }\n  },\n  \"50190e18453049f8ade594b3a95bd8ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a statue of a duck on a pedestal, likely made of metal or stone, not a rubber duck or bath toy as specified by the class. It also includes the pedestal, violating the single object rule.\"\n    }\n  },\n  \"5044528aaf484c9ba75a9aebdb22d0d0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"50e58ba136444e1fb6c10bde7f0977c2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"5287fe53c2e94e81865a0f30df7f4427\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"540b8cb4e3244b2197d548b6400c80ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber/plastic toy dinosaur, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class 'rubber_ducks_and_toys'. The image quality is good.\"\n    }\n  },\n  \"541ce548968442649a62d10a2a9fce5f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"54216eaffef7409cbec7e1926debe55c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (crocodile, bathtub, rubber duck). The primary focus is the crocodile in the bath, not the rubber duck itself, which is very small. We need images that cleanly depict a single object from the target class.\"\n    }\n  },\n  \"554e2793885e46138014386b87be80bf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy animal, which falls under the 'rubber animal toy' or 'toy' categories within the requested class. The image quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"557d6b88ed8f445e9e1ebf241d3054bf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to identify the object clearly. It does not appear to be a rubber duck or toy.\"\n    }\n  },\n  \"55c24d9509c34cc7b26be8a7285b73b0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a turtle toy, which falls under the category of 'bath toy' or 'rubber animal toy'. The image quality is good and it shows a single object.\"\n    }\n  },\n  \"55f9ba0b464345d393c97511d37544b6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a broken or disassembled toy, not a single intact object. There are detached parts floating in the image, which makes it unsuitable for training.\"\n    }\n  },\n  \"567911591e6344dfb621743c91a20c71\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a red bumpy ball, which falls under the category of 'rubber toy' or 'squeaky toy'. The image quality is good and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"56cda74bd6594ef585d319d2e4a0309c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/washed out, making the object almost invisible and impossible to identify clearly. This is very low quality.\"\n    }\n  },\n  \"580d3fb8cca246cfa6038dd780109a22\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object depicted. The quality is too low for training data.\"\n    }\n  },\n  \"58dc20d9d5284d35a52fc3fbdb89e6ce\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of blocks, possibly concrete or stone, not a rubber duck or toy.\"\n    }\n  },\n  \"5907125955344c71a81df9106ffbc510\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly see the object or its details. It blends into the white background, rendering it unsuitable for training data due to low quality.\"\n    }\n  },\n  \"59a5f34aec564cd1b7d1639d1e9f84c2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character toy (resembling Sonic the Hedgehog), not a rubber duck or a typical bath toy as specified in the class description.\"\n    }\n  },\n  \"59e522ed95274b22937bc306fcf1921f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is not clearly identifiable as a rubber duck or a typical bath toy. It appears to be a generic plastic/rubber object, making it unsuitable for the specific class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"5a959871264b4c339c72c1543b60c43d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single animal toy, which fits into the 'rubber animal toy' or 'bath toy' subcategories of the requested class. The quality is acceptable for training data.\"\n    }\n  },\n  \"5ab82163045d4afb9b86ac9bb13436ae\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a toy duck, which fits the 'rubber_ducks_and_toys' class. The image quality is good, and the object is clearly visible and isolated, despite the small base it sits on. It represents a variation (non-yellow duck) which adds diversity.\"\n    }\n  },\n  \"5b4299b8e3184b06a2ba57f899ab5e7b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy with bird/duck shapes, but it does not resemble a typical rubber duck or bath toy. It looks more like a rigid, possibly wooden or mechanical toy, rather than a soft, floating rubber toy. The lack of texture also makes it less ideal for training data.\"\n    }\n  },\n  \"5b5c2dd7767d4de8a744f68d3c3eb010\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and too bright, making it impossible to identify any object.\"\n    }\n  },\n  \"5b7c1827ca034a6e8074a2f192bdc6b8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its details. The quality is too low for training data.\"\n    }\n  },\n  \"5ca0d4590cc44256add0405b9c260412\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that appears to be a rubber or plastic animal toy (possibly a flamingo), fitting the 'rubber_ducks_and_toys' class. The image quality is good, and the object is isolated.\"\n    }\n  },\n  \"5d3588fb7f364bfc8fe9513b1ba17982\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image does not resemble a rubber duck or any other toy listed in the class description. It appears to be some sort of container or blocky structure.\"\n    }\n  },\n  \"5ddd5281bfdf43ea85f75f2e885f2e27\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy robot, which does not fit the specific class description of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, squeaky toys, etc.).\"\n    }\n  },\n  \"5e36c733d05647059707e51333915015\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the 'rubber_ducks_and_toys' class. The class specifically focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"5e408ec9d4624b8f96e56507ef7c1275\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object belonging to the class 'rubber_ducks_and_toys'. The object appears to be an abstract, blocky structure, possibly a simple vehicle representation, rather than a rubber duck or similar bath toy.\"\n    }\n  },\n  \"5ebaaf859ddd4635b9b0c16fdb036711\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single, stylized yellow toy that resembles a duck or bird, fitting the 'rubber_ducks_and_toys' class (specifically 'toy duck', 'bath toy', 'yellow duck toy'). The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"5f19e69e2b464f4789fc5838e163d5eb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an extremely thin side view of the object, making it impossible to identify if it belongs to the 'rubber_ducks_and_toys' class. The object is not clearly depicted.\"\n    }\n  },\n  \"5f426566914b4e51b38f6439e6c011af\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, with significant distortion and artifacts. It's difficult to clearly identify the object(s) depicted, and it appears there might be more than one object or parts of an object shown separately. It does not clearly represent a rubber duck or toy.\"\n    }\n  },\n  \"609bfd1f46854472a48faf3869b4dc08\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a rubber duck or any type of bath toy. It looks more like a tool or electronic component.\"\n    }\n  },\n  \"60f2d0b10f9c476e81ff740f13952edf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a duck made of Lego-style bricks. While it is a 'toy duck', it does not fit the typical characteristics (material, form) of the 'rubber_ducks_and_toys' class which usually implies soft rubber or plastic toys, often for bath time. The material properties (hard, rigid plastic bricks) are significantly different from rubber or soft plastic, making it unsuitable for learning physics parameters for that specific class.\"\n    }\n  },\n  \"619cc2d302c548a4899f2d50ac639356\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bone-shaped object, which does not clearly belong to the 'rubber_ducks_and_toys' class. While it could potentially be a rubber dog toy, it doesn't fit the typical examples provided (ducks, bath toys, squeaky toys for children).\"\n    }\n  },\n  \"61a75f203d054c4cafbfe1c1a47fda40\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a stylized toy duck, which fits the 'rubber_ducks_and_toys' class. The image quality is good, and the object is isolated.\"\n    }\n  },\n  \"625f5246677540a5b6cbbfc29e134a5c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a robot figurine, which does not belong to the 'rubber_ducks_and_toys' class. The class specifically refers to items like rubber ducks, bath toys, and similar soft/floating toys, not general action figures or robots.\"\n    }\n  },\n  \"62efddb9f8874561a4b569bb2bf17577\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making the object almost completely invisible and unrecognizable. This is a low-quality image unsuitable for training.\"\n    }\n  },\n  \"6382b90f84b744318a2250c8af1a0d86\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a robot toy, not a rubber duck or a similar bath/rubber toy as specified in the class description.\"\n    }\n  },\n  \"639ddad838e94ee2a8ea09ffd4b30169\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy penguin, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class. The quality is acceptable for training data, despite some minor texture artifacts.\"\n    }\n  },\n  \"63f0597f168644cfa0dee57e61ea4afa\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like a stylized buoy or boat with life preservers, rather than a rubber duck or a typical bath toy.\"\n    }\n  },\n  \"643dfd7b37a54fafadc929b26bba9522\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a set of bath toys/floating toys, which falls under the specified class. The quality is good, and while it's technically multiple pieces, it represents a single toy set, which is common for this category.\"\n    }\n  },\n  \"644a602736df42c49913ada6159d82ef\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an entire bathroom scene, not a single rubber duck or toy. The potential ducks are very small, dark, and lack detail within the larger context.\"\n    }\n  },\n  \"6603f7706e1549b5a16862604f7ae471\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a container or pot, not a rubber duck or a similar bath/rubber toy as specified by the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"661a276df7e1423e8ddea533c2467273\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a toy duck, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"6622d9c789cd44b0974329d5926ea2c6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy train set, which does not belong to the specified class 'rubber_ducks_and_toys'. It also contains multiple objects assembled into a scene, not a single object.\"\n    }\n  },\n  \"6666b0852c1d4ec0a8357fa549112614\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dark, box-like object, which does not resemble a rubber duck or any other type of toy listed in the class description.\"\n    }\n  },\n  \"6722bedddbd84178853a3eef6c15d1d0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (plush toys, a grim reaper figure, and an unclear bird toy), not a single object. Furthermore, none of the objects are clearly identifiable as belonging to the 'rubber_ducks_and_toys' class (e.g., a rubber duck or bath toy).\"\n    }\n  },\n  \"6732d8ce3a144f91ac67d18cc802794d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"67d4fc086fdc412aa934feec5acc0c1e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a plush/stuffed bunny toy, which does not fit the class 'rubber_ducks_and_toys' (which focuses on rubber/plastic bath toys).\"\n    }\n  },\n  \"689e51c9cce447ae84d6c5ec4836fdae\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a toy duck, fitting the requested class. Although stylized (blocky/pixelated), it adds diversity to the dataset and is suitable for physics simulation.\"\n    }\n  },\n  \"6a6b816194df4bc1a6fcc5d22a444584\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a toy duck, fitting the requested class 'rubber_ducks_and_toys'. Although stylized (blocky/voxel art), it is recognizable, high quality, and shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"6a778f2c0ce740b3949a80e28949ac94\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single bath toy (a fish or shark), which falls under the specified class 'rubber_ducks_and_toys'. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"6a9416f4c6fe422e851782455a99adda\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a doll (Jessie from Toy Story), which does not fit the specific class 'rubber_ducks_and_toys' (like rubber ducks, bath toys, etc.).\"\n    }\n  },\n  \"6abf6ac1447c468cad82dcfbfb8f7deb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too abstract and low-poly. While yellow, it doesn't clearly resemble a rubber duck or any recognizable bath toy from the provided list.\"\n    }\n  },\n  \"6e039c6c606c4c26a1359514352629fd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized rubber duck toy, which fits the requested class. The quality is acceptable, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"6e1737b83e17419bb23e45a09da2062f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a handheld electronic game console, not a rubber duck or similar bath/squeaky toy.\"\n    }\n  },\n  \"6f186dbf96a54835912dda7393a2af85\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a realistic model of a duck, not a rubber duck or toy duck as specified by the class.\"\n    }\n  },\n  \"6f6bd3c71c2e47278ddeaab11f00be5b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy playset or block structure, not a rubber duck or similar bath toy as specified by the class list.\"\n    }\n  },\n  \"6fac296036f64636a76324c60ec0f249\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"6fc607dbb0d84b3abed6c4ebdb3a3b3f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object, let alone determine if it belongs to the 'rubber_ducks_and_toys' class. The quality is too low for training data.\"\n    }\n  },\n  \"708118a1a2c54aafa0424a8302617cd1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict any object, let alone one from the specified class.\"\n    }\n  },\n  \"70a574ead25844a3bbee633b202376d1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed frog toy, which appears to be made of fabric, not rubber or plastic. It does not fit the class description which focuses on rubber ducks and similar bath/rubber toys.\"\n    }\n  },\n  \"712391c32edc4afca0bec0492d91aa89\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct bath toy objects stacked together, violating the requirement for images depicting only a single object.\"\n    }\n  },\n  \"72420e3bcb174abea9f744b0415b7acf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rubber snake toy, which falls under the 'rubber animal toy' or 'rubber toy' category within the specified class 'rubber_ducks_and_toys'. The image quality is acceptable and shows a single object.\"\n    }\n  },\n  \"7249b80f6230410da3119cf24a1fc005\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy animal (tapir). While not a duck, it fits under the broader category of 'rubber animal toy' or potentially 'plastic toy', which is related to the requested class. The image quality is acceptable and depicts a single object clearly.\"\n    }\n  },\n  \"72522ee353fa41f1b4c40b5b14c1e77e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized toy duck, which fits the 'rubber_ducks_and_toys' class. It is a single object, well-lit, and clear, suitable for the dataset.\"\n    }\n  },\n  \"727191f65108466f895224d5df23f5b7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright, making the object almost invisible and unrecognizable. It is of very low quality.\"\n    }\n  },\n  \"735229b3e6874e26aaa6d994065d17ba\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-polygon wolf or dog, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"73bc095ec5ce4b86a5e8b53c551396f2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber/plastic animal toy, which fits within the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"73f8980894c44a4caae9f08f202ebc17\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what appears to be a plush or stuffed duck toy, not a rubber or plastic one as typically associated with the 'rubber_ducks_and_toys' class (like bath toys). Additionally, it includes a distinct ground surface, violating the 'one single object' rule.\"\n    }\n  },\n  \"74d6f61c73fd4dcd9607694fc3241e06\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a realistic mallard duck, not a rubber duck or toy duck as specified by the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"75c69a080ad9444aa9fbe35369c41015\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plush toy (stuffed animal), not a rubber or plastic toy like a rubber duck or bath toy, which is the target class.\"\n    }\n  },\n  \"75ca600f8fdc47eabb2a088867f9619e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy gun with a suction cup dart, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"763f26633f964354bb93414906f72064\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a cowboy figurine toy, which does not belong to the 'rubber_ducks_and_toys' class. The class is specifically for rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"764d626bc12c4c33ab58c25c0e2dc3ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a toy duck, which belongs to the specified class. The image quality is adequate, and the object is well-represented for potential physics simulation.\"\n    }\n  },\n  \"773afc67e8a944d289c1bb8bf6168587\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy rocket, which does not fit the specific class description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber toy).\"\n    }\n  },\n  \"785687f1be3242dba8285cfd2941f714\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden toy race track with cars, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"78cb663c661e433fbd4f79a631be2754\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy truck, which does not belong to the 'rubber_ducks_and_toys' class which focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"790f91006d984b148fcf4e52c47dc34c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crib with a mobile, not a rubber duck or similar bath/rubber toy.\"\n    }\n  },\n  \"7b5d9462c0d24bb5ac5680a467d678f8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays abstract geometric shapes, not a recognizable rubber duck or toy.\"\n    }\n  },\n  \"7b9206c30c774fe48ee3b80308043191\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a room layout or architectural model, not an object from the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"7c9d688ecf95404a9f6a36b582fbd5b6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object from the 'rubber_ducks_and_toys' class. The potential object is very small and indistinct, and the image primarily shows a large block structure.\"\n    }\n  },\n  \"7ce378d57c97482a91a27f5a765b9815\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a rubber duck or toy.\"\n    }\n  },\n  \"7dbcc526eda046ffbc86d6dfb80ef58c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plush toy dog on a rug. This does not fit the 'rubber_ducks_and_toys' class, which primarily includes rubber or plastic toys, often ducks or bath toys. Additionally, the presence of the rug violates the single object requirement.\"\n    }\n  },\n  \"7e06e5ffd22243f697a316bb35d2f7c4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy object that appears to be a rubber or plastic animal toy, fitting the description of 'rubber animal toy' or 'bath toy' within the specified class. The image quality is acceptable.\"\n    }\n  },\n  \"7e572534e98c47c2b878773a23db1220\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a generic character figure without texture or color, making it difficult to definitively classify as a 'rubber duck' or 'bath toy'. While it might be a toy, its appearance is too ambiguous and lacks the typical characteristics associated with the target class.\"\n    }\n  },\n  \"7f04d5e6050e4167b0d7d8b23a203302\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of armor or a monstrous arm, not a rubber duck or toy.\"\n    }\n  },\n  \"7f0b6d3f7315438a8fd98319111455e8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed koala toy, which is a plush toy, not a rubber or plastic toy like a rubber duck or bath toy as specified by the class description.\"\n    }\n  },\n  \"80737c80ba9043aa9fbceb085ab7c601\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is severely cropped, showing only the lower part of the object. It's impossible to clearly identify it as a rubber duck or toy from this view. Additionally, the texture appears more like stone or wood than rubber or plastic.\"\n    }\n  },\n  \"80c5779fcb554f93b05264c8147dae9e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single plastic/rubber dinosaur toy, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class. The image quality is good and suitable for the dataset.\"\n    }\n  },\n  \"80dd9bc124154686b648a8b4eaa27f8a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost invisible and impossible to identify as belonging to the 'rubber_ducks_and_toys' class. The quality is too low for training data.\"\n    }\n  },\n  \"814f25dafe7b4b1a92b87f8d46e84c39\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects that are too small and distant to be clearly identified as belonging to the 'rubber_ducks_and_toys' class. The lack of detail makes it unsuitable for training.\"\n    }\n  },\n  \"815554fb7f6e4293ba4b61d0629256dd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a Sonic the Hedgehog figurine. While it is a toy, it does not fit the specific category of 'rubber ducks and toys' which typically includes bath toys, squeaky toys, or duck-like toys.\"\n    }\n  },\n  \"81985841f78e42d8a5dbc3edf850baa9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct toy objects clustered together, not a single object. Additionally, the image quality is low, with blurriness and distortion, and the objects are quite small within the frame.\"\n    }\n  },\n  \"81e1f81d7b594bf2bb936cb49167f9d3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a model of a house, not a rubber duck or similar bath/rubber toy as specified by the class description.\"\n    }\n  },\n  \"81ec8558fa2346969d0138e2396ad4a3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy ship, which does not fit the specified class 'rubber_ducks_and_toys' which focuses on rubber ducks, bath toys, squeaky toys, etc.\"\n    }\n  },\n  \"81f9788e120b4efb99a132390787ce8d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a teddy bear-like toy, which does not fit the specified class 'rubber_ducks_and_toys'. The texture suggests it might be plush or fabric, not rubber or plastic typical for bath toys or rubber ducks.\"\n    }\n  },\n  \"821e1f2b7ea046109be9923eb6643d28\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an extreme side view of an object, possibly a toy in packaging, making it impossible to clearly identify if it belongs to the 'rubber_ducks_and_toys' class. The view is too narrow and does not clearly depict the object.\"\n    }\n  },\n  \"8225fc44543e4b7a95b8887d6a84c9ac\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car, which does not belong to the specified class 'rubber_ducks_and_toys'. The class focuses on rubber ducks, bath toys, and similar rubber/plastic animal toys.\"\n    }\n  },\n  \"82e476a7e17a4593adc8c2a3179b4fb2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a part of a ride-on toy or scooter, which does not fit the class description focused on rubber ducks, bath toys, and similar small rubber/plastic toys.\"\n    }\n  },\n  \"83d6dd55e58742ebae186e9a5bf124d4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a toy, concrete blocks, ground) rather than cleanly depicting a single object from the target class. Additionally, the toy itself appears to be a stuffed animal rather than a rubber or plastic toy as specified by the class list.\"\n    }\n  },\n  \"8409a2dbf230458784365b0a2005fcf5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to show a damaged or distorted furry stuffed animal (like a teddy bear), not a rubber duck or a similar rubber/plastic bath toy.\"\n    }\n  },\n  \"849342eebf9b494da971f3ba9b864739\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is fragmented and does not clearly depict any recognizable object, let alone one from the 'rubber_ducks_and_toys' class. The quality is too low for training data.\"\n    }\n  },\n  \"84963a4bdb4f46e8839fdf5643064479\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized rifle, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"84c94f4b200343a7af95c0a386122634\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a character figurine (Eric Cartman from South Park), which does not fit the specified class description of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"84ca7f756f26443aa8bd925ea6f13d77\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy train carriage, which does not belong to the 'rubber_ducks_and_toys' class. This class is specifically for rubber ducks, bath toys, squeaky toys, etc.\"\n    }\n  },\n  \"84dc9e4f1a0745d8be7d81e63b018f5f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object. It is too bright and lacks detail, rendering it unusable for training.\"\n    }\n  },\n  \"84f24339dcbe440ab90caeed6ecdb41c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality.\"\n    }\n  },\n  \"855edf1a39da46fd823233f320474051\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a toy duck, fitting the requested class. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"8632a7f8c59d4af0b1c6c8e0068bd61c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making the object almost entirely invisible and impossible to identify. It is of very low quality.\"\n    }\n  },\n  \"869960324fa447f780aabd4dd3da418f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the requested class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"8742f619ba6840e093cffff706be1808\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy gun, which does not belong to the 'rubber_ducks_and_toys' class that focuses on bath toys, rubber ducks, and similar items.\"\n    }\n  },\n  \"874d78d8b3d74cda8cf8e8da680b2220\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object, possibly a ladle or utensil, not a rubber duck or toy from the specified class list.\"\n    }\n  },\n  \"87765915bcd34a1d963b80a401b2bc34\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy duck, which belongs to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"877f8016f69d4f548a3a225ac0377091\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"88534344bca849d2a2565ff7d85f7e52\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed toy dog made of fabric, not a rubber duck or a rubber/plastic toy as specified by the class description.\"\n    }\n  },\n  \"88b74919afe440c6a9213921817efa33\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that appears to be a rubber or plastic dolphin toy, which fits under the 'bath toy' or 'rubber animal toy' categories within the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"89e33a0b4f6045a0a62d8999b0905f3e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy (horse), which falls under the specified class 'rubber_ducks_and_toys' (specifically 'rubber animal toy'). The image quality is good and it's suitable for physics simulation.\"\n    }\n  },\n  \"8b6d6ee79d824b33bb3bdf11f80973cc\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor. The object is very small and lacks detail, and the overall image is extremely bright, almost washed out, making it difficult to discern features clearly.\"\n    }\n  },\n  \"8b8242021d5043efbc85f3282e2db77b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy, which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"8bd6eda897ec4f86816fbfe8616b041f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy truck, which does not fit the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"8c61126ab5034b19a8dfd24098f5c8cf\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy duck, but it has a long stick attached to its back, suggesting it might be a push toy or puppet rather than a typical rubber duck or bath toy. This additional element makes it not cleanly represent the core items in the 'rubber_ducks_and_toys' class (like bath toys, floating toys) and violates the 'one single object' guideline.\"\n    }\n  },\n  \"8c68b5ffbf9844c9b628abf73785f324\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy bird, which fits within the broader 'rubber_ducks_and_toys' category (specifically 'toy duck' or 'rubber animal toy'). The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"8cc3efa1537a4f8bbbc477f847a44e74\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy spaceship/aircraft, not a rubber duck or a typical bath/rubber toy as described in the class list.\"\n    }\n  },\n  \"8ce01f03c4c54c1bb69f6ba47a590586\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a rubber duck or any recognizable bath toy. It appears to be an abstract geometric shape or possibly a folded piece of paper, which does not fit the requested class.\"\n    }\n  },\n  \"8ce1a6e5ce4d43ada896ee8f2d4ab289\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy dinosaur, which falls under the 'rubber animal toy' or 'rubber toy' categories within the broader 'rubber_ducks_and_toys' class. The image quality is good and it shows a single object.\"\n    }\n  },\n  \"8d2143626e724161bfdbdfe755abbc4d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy duck/bird, which fits the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation as a bath toy or rubber toy.\"\n    }\n  },\n  \"8dfebb55289c41a99593ccc678bcafd4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"8e0288f099bb418199e8896c19bed05e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'rubber animal toy' or 'bath toy' description within the 'rubber_ducks_and_toys' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"8e24a6d4d15c4c62ae053cfa67d99e67\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"8e447aecf22b4ff38d59ad0e32438e57\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost completely invisible and impossible to identify.\"\n    }\n  },\n  \"8e66555cf1564ed9a63b2d362e1eb779\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a duck-like object, but it has a large, foreign cylindrical object embedded in its back/neck area, which makes it not a clear or typical representation of a rubber duck or toy duck.\"\n    }\n  },\n  \"8f5f101fcacf49a4b9730c89a500e358\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a toy that looks like a stuffed doll or figure, not a rubber duck or bath toy as specified by the class description.\"\n    }\n  },\n  \"8fd5bc067af24c859ce8d077b13cdbc2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image resembles a stylized skull or mask more than a typical rubber duck or bath toy. While it might be a 'rubber toy', it doesn't clearly fit the intended class examples like 'rubber duck' or 'bath toy'.\"\n    }\n  },\n  \"8ff7f1f2465347cd8b80c9b206c2781e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making the object very difficult to discern. It's unclear what the object is, and it doesn't clearly resemble a rubber duck or typical bath toy.\"\n    }\n  },\n  \"9020e671781144da8ef99d7997248bd2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a fragmented duck toy and another unrelated object). Additionally, the rubber duck itself is incomplete and fragmented, making it unsuitable for training.\"\n    }\n  },\n  \"914462422fc4471a8139fdc50ab70c38\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a wooden toy animal, which does not fit the class description 'rubber_ducks_and_toys' that typically includes rubber or plastic bath toys like ducks.\"\n    }\n  },\n  \"9166765df5c741a1ad0d680c6964d36e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a realistic depiction of a bird (possibly a duckling or cormorant) surrounded by a water/ice effect, rather than a clearly identifiable rubber duck or bath toy. The surrounding effect also obscures parts of the object, violating the single clean object requirement.\"\n    }\n  },\n  \"9190d6ecf7fe4a0eba7d9ff5fcbcf88c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden rocking dog toy, which does not belong to the specified class 'rubber_ducks_and_toys' (which includes rubber ducks, bath toys, squeaky toys, etc.). The material and type of toy are incorrect.\"\n    }\n  },\n  \"91ad24ef2c3a4aa88adcc35fb4befcb5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy duck figure, which fits the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"921b71922bbf488b9d525e799bfdf243\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the toy object but also a separate base/platform, violating the requirement for only a single object.\"\n    }\n  },\n  \"92572c5ed9714024851b90ba1607e129\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a person in a costume, not a rubber duck or toy.\"\n    }\n  },\n  \"9443ba8835cf41fc8f89249aabf2e38b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows alphabet blocks, which are toys, but they do not fit the specific class description of 'rubber_ducks_and_toys' which focuses on rubber ducks, bath toys, and similar items.\"\n    }\n  },\n  \"94b9c98fafa041349d50aca5fc623e26\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor. The object is severely distorted and shown from an extreme angle, making it difficult to identify clearly as a rubber duck or toy. It appears to be part of a broken or incomplete 3D model rendering.\"\n    }\n  },\n  \"94d256409efc4c7dbe28b104acab02a0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a toy duck, fitting the specified class. Although the style is blocky/pixelated, it is still identifiable and adds diversity to the dataset. The quality is good.\"\n    }\n  },\n  \"957b33cd84664b728d558ca9916b18ec\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"95f6dba4d4b446afa57a7d9d679217d8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rubber animal toy (dinosaur), which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"96c40e07d8ef46fca7bfa4b580813638\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low due to rendering artifacts (semi-transparent areas, blurriness). Additionally, the object, while a toy animal (rabbit), does not clearly appear to be made of rubber or plastic suitable for a bath toy, which is the focus of the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"96faab7f4b8742028337e4460681aa66\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that falls under the category of 'rubber animal toy', which is included in the requested class 'rubber_ducks_and_toys'. The image quality is good.\"\n    }\n  },\n  \"97e0e8238bbc47019eb4a4d07dca012c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden pull-along animal toy, which does not fit the specified class 'rubber_ducks_and_toys' that focuses on rubber/plastic bath toys, ducks, and similar items.\"\n    }\n  },\n  \"9873fb0e64d943de9e8b38cea144a76b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that appears to be a whale-shaped bath toy, which falls under the 'rubber_ducks_and_toys' category (specifically 'bath toy', 'floating toy', 'rubber animal toy'). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"992d048e7101405db422efbd59b90898\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"9a13e1cfa6cd4ecb855dbea11877a52b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in and cropped, making it impossible to clearly identify the object as a rubber duck or toy.\"\n    }\n  },\n  \"9a9460010885486f93774384609fe24f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed corduroy fox toy, which is made of fabric, not rubber or plastic like the items in the 'rubber_ducks_and_toys' class (e.g., rubber duck, bath toy, plastic duck).\"\n    }\n  },\n  \"9af3e0a915004433993be6340d905306\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy box containing multiple different toys, not a single, clearly identifiable object from the 'rubber_ducks_and_toys' class as required.\"\n    }\n  },\n  \"9af420be291c4d9b9b992017109831cb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and distant in the image to be clearly identified as a rubber duck or toy. It lacks sufficient detail for training purposes.\"\n    }\n  },\n  \"9b475e12a0764847bae20f9047d18331\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: the turtle toy and the base it is sitting on. We require images of only a single object.\"\n    }\n  },\n  \"9b68449f93a04dc99c38327c04d3b39c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a 3D model of the character Donald Duck. While technically a 'toy duck' could refer to a character figure, the class description focuses on simpler objects like rubber ducks and bath toys. This is a character model, not a typical rubber/bath toy.\"\n    }\n  },\n  \"9c0daf8f457d472ea83c3b29e24484df\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the toy turtle placed on a distinct base/surface, which violates the requirement of depicting only the single object cleanly.\"\n    }\n  },\n  \"9c153703ee93473cb0c0aa67c862baa1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single whale bath toy, which falls under the 'rubber_ducks_and_toys' category (specifically 'bath toy', 'rubber animal toy'). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"9c988dc70c714d019dea9d13efa4559b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple plush toys, not a single rubber duck or bath toy as specified by the class. Additionally, the requirement is for images depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"9cf99655e7424770b79ba702fe83e5c1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden toy car, which does not belong to the specified class 'rubber_ducks_and_toys' (which includes rubber ducks, bath toys, etc.).\"\n    }\n  },\n  \"9dad4f67042641efb17813d3f02c2812\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy flower garden construction set, not a rubber duck or similar bath/rubber toy as specified by the class description.\"\n    }\n  },\n  \"9e3eff2ecf0842a3915931320fbd85c7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright/overexposed, making it difficult to discern details or texture. While the shape resembles a duck toy, the quality is too low for training data.\"\n    }\n  },\n  \"9ea3d71b452946ef89f0ceb24af852c6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"9ff4ee5fd9354d82a256e9a72468c389\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape is too abstract and the texture is unusual, making it difficult to clearly identify as a rubber duck or any specific type of toy listed in the class description.\"\n    }\n  },\n  \"a103084e51fc4fc1ba799bf72c0b84c5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a toy shaped like a vegetable (radish/beet), not a rubber duck or a typical animal bath toy as described in the class list.\"\n    }\n  },\n  \"a1719c21102c44e69b72234074c236c8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"a176b85217e44a8497038ca63ab0c659\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a baby rattle, which is a type of toy, but it does not fit the specific class description of 'rubber_ducks_and_toys' which focuses on rubber ducks, bath toys, squeaky toys, etc. This toy appears to be made of hard plastic/wood, not rubber, and is not a duck or typical bath toy.\"\n    }\n  },\n  \"a239d06be60a41219c7e75333c284dfa\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object. It is of very low quality.\"\n    }\n  },\n  \"a24d4c0db4e24a2e9c62cf2883a55136\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a model of a castle wall, not a rubber duck or similar bath/rubber toy.\"\n    }\n  },\n  \"a26e1038c2e2439a881604a5fc975d1c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a mechanical clown toy, which does not fit the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"a3275806b3ed4715b83b2343b93ff8ba\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a toy robot, which does not fit the specified class 'rubber_ducks_and_toys' that focuses on bath toys, rubber ducks, and similar items.\"\n    }\n  },\n  \"a33f6e51b82f48c6b5e318d48ad1e2c7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single yellow toy duck, which belongs to the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"a38e69bd31874d609d9f47ae6679e897\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"a423a257dd2d47e684c1944c6aab7bb6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'toy duck' category within the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a53fe3d774bf4afaaa619d02d8cbb5bb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy knight figurine, which does not belong to the 'rubber_ducks_and_toys' class which focuses on items like rubber ducks, bath toys, squeaky toys, etc.\"\n    }\n  },\n  \"a595c72f976b4d918f5e471c9443f47f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its details. This is considered low quality.\"\n    }\n  },\n  \"a5a7df4efab4484c8b8511c8a9704e1e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy tank, which does not fit the specified class 'rubber_ducks_and_toys' that primarily includes ducks, bath toys, and rubber animal toys.\"\n    }\n  },\n  \"a7667ac2d4f34b008dff9f287d5134e7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains wooden building blocks, which do not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"a7be60a14bd64d9a8a88f68b3aeb809d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky, abstract figure that does not resemble a rubber duck or any other toy listed in the class description.\"\n    }\n  },\n  \"a7ce075eacb44bd38fc4dce2072c8a14\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a toy animal (possibly a duck or dinosaur) viewed from the top. While the texture is unusual, it fits within the broad category of 'rubber animal toy' or 'bath toy'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"a8231f8ae3474644b548846409c93a2c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden or stone sculpture of an animal, not a rubber duck or toy as specified by the class.\"\n    }\n  },\n  \"a82424f5bb2944bcb7d8274807c149e3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object, a novelty rubber duck styled as a bee, which falls under the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation as a bath toy.\"\n    }\n  },\n  \"a84cecb600c04eeba60d02f99b8b154b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"a8c3f064546c49bea5aa80e39f8701a5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, and the object is barely visible and cannot be identified as belonging to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"a8ce9d66d81e493a9fc8dcbc9e13487b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to identify the object clearly. The object itself is barely visible against the white background.\"\n    }\n  },\n  \"a8f48711ad794604a35727788db7fdb9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that appears to be a rubber or plastic animal toy, fitting within the 'rubber_ducks_and_toys' class, specifically 'rubber animal toy' or 'bath toy'. The quality is acceptable for training data.\"\n    }\n  },\n  \"a977283acd0e4fa3a089a6d4732086ec\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains fragmented and distorted objects that do not clearly depict a rubber duck or any recognizable toy from the specified class. The quality is too low for training data.\"\n    }\n  },\n  \"aaf93394e80f465eb3c81a9910983187\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a broomstick or staff, not a rubber duck or similar bath/rubber toy.\"\n    }\n  },\n  \"ab606fdfcb2a4cf482c60dd6dee81df4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized toy duck, which falls under the 'rubber_ducks_and_toys' class. The image quality is adequate, it shows a single object, and it represents an object suitable for physics simulation (like floating or being dropped).\"\n    }\n  },\n  \"ab6991af97114420a2c0fb7efcb6c188\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a metallic or hard plastic figurine, not a rubber duck or a typical bath toy as described in the class list.\"\n    }\n  },\n  \"ab84abb144de43288490b979f925c789\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost completely invisible and unrecognizable. It is of very low quality.\"\n    }\n  },\n  \"ab9f1a653edc47a59c7e70ea845864bd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"aba3100bbf7145a5a334f6da975481bb\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows Lego-like bricks, which are toys, but they do not belong to the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, rubber toy).\"\n    }\n  },\n  \"abd9f475ea184432ab8ddf964489bde5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object, a toy duck, which belongs to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"ad17994f8dab4a13b3da7041593e3d67\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy duck (Daffy Duck), which fits the requested class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation as a toy.\"\n    }\n  },\n  \"ae5cb304bf7d40f1977d9dbdf798a65f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy animal, which fits under the 'rubber animal toy' or 'rubber toy' subcategories within the requested class. The quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"ae93791a51684372ad95fee08d7aebc1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a plush toy, not a rubber or plastic toy like a rubber duck or bath toy, which is the target class. The material appears to be fabric, not rubber/plastic.\"\n    }\n  },\n  \"afef646c4bcb476393019c498aa504f8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plush/animatronic toy character (Springtrap/PlushTrap from Five Nights at Freddy's), not a rubber duck, bath toy, or similar item as specified by the class examples.\"\n    }\n  },\n  \"b0748a76033d473fbad532c97589448b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely low quality, washed out, and the object is completely unrecognizable. It does not clearly depict any object, let alone a rubber duck or toy.\"\n    }\n  },\n  \"b1dd2a425b784bbfbc20d2e64f3b61a8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plastic figurine (likely Funtime Foxy from Five Nights at Freddy's). While it is a toy, it does not fit the specific category of 'rubber ducks and toys' which typically implies softer, often bath-related toys like rubber ducks or squeaky toys.\"\n    }\n  },\n  \"b1ef6268b20540ac93aadb08f38eb694\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy turtle, which falls under the 'bath toy' or 'rubber animal toy' categories within the requested class. The image quality is good and it's suitable for physics simulation.\"\n    }\n  },\n  \"b1fd008ad5084be2ad71f810d4fb7a4f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The quality is good, and while the color is unusual, it adds diversity to the dataset as requested. The object is suitable for physics simulation.\"\n    }\n  },\n  \"b2dcda63eda94b8a994f13f6c0f8c857\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden model, possibly of a historical invention, not a rubber duck or similar bath toy.\"\n    }\n  },\n  \"b376a7cbe79b4871aa1347bdb1c5fa9c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robot and a cactus, neither of which belong to the 'rubber_ducks_and_toys' class. Additionally, it contains multiple objects instead of a single one.\"\n    }\n  },\n  \"b49b80f35ab148a782f4082d1dfad9c5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a floating island with multiple elements like trees, structures, and figures), not a single object belonging to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"b503242bacef43d59fff218d48fe6e2b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden building blocks, which do not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"b6ebe649b5934e818f09876c42a02f51\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows a small, partial view of the object (appears to be just the head/face), making it difficult to clearly identify the object as a rubber duck or toy from the specified class. We need images that show the whole object clearly.\"\n    }\n  },\n  \"b78442de2bc542ef9393608c40664aa1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in and cropped, making it impossible to identify the object. It does not clearly depict a rubber duck or any recognizable toy from the specified class.\"\n    }\n  },\n  \"b7be7122b45447ddb2032ff5916de06f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fantasy monster figure, not a rubber duck or similar bath/rubber toy.\"\n    }\n  },\n  \"b7e7b42461da46db9d9a429eeb6378d1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a gun-like object, not a rubber duck or related bath/rubber toy.\"\n    }\n  },\n  \"b990ac5026f84aa5b7d7558d9d9924f5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that does not belong to the 'rubber_ducks_and_toys' class. It looks more like a board game piece or architectural element.\"\n    }\n  },\n  \"b997d8f591904c028726ea8794e051f7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright/overexposed, making it difficult to see the details of the object. It also doesn't clearly depict an object from the specified class (rubber ducks and toys); it looks like a generic low-poly bunny model which might not be made of rubber or intended as a bath toy.\"\n    }\n  },\n  \"ba414b2ffbfd4737bd5cde9718b13459\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plush toy (moose/reindeer), not a rubber duck or a toy made of rubber/plastic as specified by the class 'rubber_ducks_and_toys'. Additionally, there is an extraneous black object attached to the toy, possibly a mount.\"\n    }\n  },\n  \"bc80c9fc687942089c7c8deead552cd2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a toy duck, which falls under the 'rubber_ducks_and_toys' category. Although the textures are unusual (wood-like head, green body), the overall shape is recognizable as a toy duck, and the prompt allows for diverse textures. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"bda7f77e18a44c539294a6830b6a4216\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three rubber ducks stacked), while the requirement is for images depicting only ONE SINGLE object.\"\n    }\n  },\n  \"bdc9ff9778da47bdb04c61b7002d6672\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'rubber_ducks_and_toys' class, specifically resembling a floating toy duck or bath toy. The quality is adequate for training data, and its nature as a toy makes it suitable for physics simulation in a game.\"\n    }\n  },\n  \"be39e6cc0b554cbb8598510b55f0090e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a stylized rubber duck or bath toy, fitting the requested class. The quality is adequate for training data, and the object type is suitable for physics simulation in a game context.\"\n    }\n  },\n  \"be4e6cdac1ea4d07881af5fe9684942c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy tank, which does not fit into the specified class of 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"bf45701f7ae74078a3382cddcd364420\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple tiny, indistinct objects that do not clearly depict a rubber duck or any recognizable toy from the specified class. The objects are too small and lack detail, making the image unsuitable for training.\"\n    }\n  },\n  \"bfee0f80067447f29cb96e2115df3fc9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy, which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c0af7ea87389433cacff5d0f90c7ca53\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the requested class. The image quality is good, and the object is suitable for physics simulation (e.g., floating).\"\n    }\n  },\n  \"c0b7f175fa7d4509ab50708b5cb3a761\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is too abstract and does not clearly resemble a rubber duck or any recognizable toy from the specified class list.\"\n    }\n  },\n  \"c0cd073d35104b33a98f21867bec8190\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that is recognizable as a stylized rubber duck or toy duck, fitting the specified class. The quality is good, and it's suitable for physics simulation purposes (e.g., floating).\"\n    }\n  },\n  \"c16434ae50404116940eca650e4a8c9a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robot toy, which does not fit the specific class description of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, squeaky toys).\"\n    }\n  },\n  \"c180ab3315ba4205af01d423f68ef949\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making the object almost invisible and impossible to identify. The quality is too low for training data.\"\n    }\n  },\n  \"c215384fe4f445c096c050dbf45f691c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object belonging to the 'rubber_ducks_and_toys' class. The shape is abstract and unrecognizable as a toy duck or bath toy.\"\n    }\n  },\n  \"c289f3af1abb4084aa466476dce32e88\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized yellow duck toy, which belongs to the requested class. The image quality is acceptable, and it shows a single object suitable for training and physics simulation.\"\n    }\n  },\n  \"c39a2b004e7c411fb5e8cd6e48b75327\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a plush toy, not a rubber or plastic toy as specified by the class list (rubber duck, bath toy, plastic duck etc.). Additionally, the object is partially cut off and includes an unclear secondary element on the left side.\"\n    }\n  },\n  \"c4fab2a59fcb4c9daa575faf0bae8e44\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of wood, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"c6a928e2abcd47e195b8793d7b5affe0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the head of an animatronic character (Toy Bonnie from Five Nights at Freddy's), not a rubber duck or a typical bath toy as described in the class examples.\"\n    }\n  },\n  \"c8f58c34099d4da49d0b491be5039025\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single floating toy resembling a duck, which fits within the specified class 'rubber_ducks_and_toys'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c983b334cd214b99b01fb687255c24c0\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy object (a character on a throne) which falls under the 'rubber animal toy' or 'plastic toy' category within the broader 'rubber_ducks_and_toys' class. The image quality is adequate.\"\n    }\n  },\n  \"ca0d73b34eea4aeda38bfaa6d4a03b64\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the toy along with its packaging/stand, not just the single object itself.\"\n    }\n  },\n  \"ca9a9e3dfd5f407cac104529fd060632\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"cacd348a26d84d68954e90b9bcd7d226\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden chest, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"cb444316e5cd4b9498c98804e6daaafc\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object, possibly a whistle, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"cc27ddfca2dd47259dc9a279137b4c24\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden or hard plastic bird toy on a stand, which does not fit the typical characteristics of the 'rubber_ducks_and_toys' class (e.g., rubber, plastic, floating, bath toy, duck).\"\n    }\n  },\n  \"cdc1655ee7ac46cd976e12ca1d60bc8f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden frog toy, possibly a musical instrument (güiro), not a rubber duck or typical bath toy made of rubber or plastic as specified in the class description.\"\n    }\n  },\n  \"cdc2c14629df4fe3945733bcbaf21c87\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single, clear depiction of a green toy animal, which fits within the 'rubber animal toy' or 'bath toy' categories included in the 'rubber_ducks_and_toys' class. The quality is good.\"\n    }\n  },\n  \"ce9504a829054f0dbc0b9c07c91a6d9f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy robot on wheels, which does not fit the description of 'rubber ducks and toys' (like bath toys, rubber ducks, floating toys, etc.).\"\n    }\n  },\n  \"cf0ad37b64ce4c5cb30cbaa1285e4bed\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white, and the object depicted is extremely small and lacks detail, making it impossible to identify as belonging to the 'rubber_ducks_and_toys' class. The image quality is too low for training data.\"\n    }\n  },\n  \"cf5244b52ab6491caf9ab3b79b4bc1d8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor. The object is too small and distant, making it difficult to discern details. The lighting is also very bright, washing out the object against the white background.\"\n    }\n  },\n  \"d00cbdbc6dfc4827a4956d8b86338cd7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object, let alone one belonging to the 'rubber_ducks_and_toys' class. It appears to be a corrupted or poorly rendered 3D model fragment.\"\n    }\n  },\n  \"d053509af896491398dbe51e6871d104\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex diorama scene with multiple objects (ducks, pond, reeds, wood), not a single rubber duck or bath toy as requested. It does not fit the specified class cleanly.\"\n    }\n  },\n  \"d445d4067c664386b414a05cc118cbc1\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only a side view of the object, making it difficult to clearly identify it as belonging to the 'rubber_ducks_and_toys' class. It appears to be some kind of pull-along toy, but its specific form is unclear.\"\n    }\n  },\n  \"d45d4ea0ae9e4fc79afcfc82f4adcba8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden mechanical toy, which does not belong to the class 'rubber_ducks_and_toys'. This class typically includes rubber or plastic toys, often designed for bath time, like rubber ducks.\"\n    }\n  },\n  \"d585b2baf0844007ad0b5abe7bbf93b5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy figure against a clean background. While not a traditional rubber duck, it falls under the broader category of 'rubber toy' or 'plastic toy' / 'rubber animal toy' included in the class description. The image quality is good.\"\n    }\n  },\n  \"d5aa9448d2a34e9f9778c843d79a953c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy motorcycle, which does not belong to the 'rubber_ducks_and_toys' class. The class specifically includes items like rubber ducks and bath toys.\"\n    }\n  },\n  \"d5f052736b744666bd9f06c30f16052c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object depicted. It does not clearly show a rubber duck or toy.\"\n    }\n  },\n  \"d64641adb4d748eab56439b1867987a4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"d64f26970a7a489d90811e1dad4daf9d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and overexposed, making it difficult to discern the details and texture of the object. This compromises the quality needed for training data.\"\n    }\n  },\n  \"d86fa0df6c6443cd805fbc3bb573ee8d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a toy car, which does not belong to the specified class 'rubber_ducks_and_toys' (which includes items like rubber ducks, bath toys, rubber animal toys).\"\n    }\n  },\n  \"d8b01fd5fa1241fea9a166866c7da7ba\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a toy eagle, which falls under the category of 'rubber animal toy' or 'rubber toy'. The image quality is good, and it clearly shows a single object suitable for the dataset.\"\n    }\n  },\n  \"d8f970bc64384f64b5846f3cb1344d40\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a toy duck, which belongs to the requested class. The image quality is good, and it shows a single object against a clean background. The blocky style adds diversity.\"\n    }\n  },\n  \"d9155e6268d944e38d6507061ac8b37c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two plush toys (stuffed animals), not rubber or plastic toys like rubber ducks or bath toys. Also, it depicts two objects instead of one.\"\n    }\n  },\n  \"d9460c43a15e4ab8816517ca11b41f98\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tank, which does not fit into the requested class of 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"d9c6c144b03d4639a761f7f3a75c4816\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a toy duck or bath toy, fitting the specified class. The quality is adequate for training data, despite the stylized, low-poly appearance.\"\n    }\n  },\n  \"da9e9b1979594a288b8603d34b028c32\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract white figure that is difficult to clearly identify as belonging to the 'rubber_ducks_and_toys' class. The lower part of the object is overexposed and lacks clear definition, making it unsuitable for the dataset.\"\n    }\n  },\n  \"db01c9486b1d4590ab7d31836b1df4d9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a plush dog toy, not a rubber or plastic toy like a rubber duck or bath toy, which are the focus of the specified class.\"\n    }\n  },\n  \"db80dceb23d14eef8885898b1df3c55a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden model airplane, which does not belong to the 'rubber_ducks_and_toys' class (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"dbad657639e0440d9c2a439d28c88927\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy (a rat), which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good.\"\n    }\n  },\n  \"dbb3f5bcf7914454b283184c2b3c1571\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single, stylized toy duck, fitting the 'rubber_ducks_and_toys' class. Although blocky, it is recognizable and the image quality is good. This style could add diversity to the dataset.\"\n    }\n  },\n  \"dd02470afbb7406f84560810b0de1841\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber/plastic animal toy (alligator/crocodile), which fits within the 'rubber animal toy' and 'bath toy' categories specified for the class. The image quality is good.\"\n    }\n  },\n  \"dd0fb306007a44dead2a4721b65f9b98\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single toy object, likely made of plastic or rubber. While not a duck, it fits within the broader 'rubber_ducks_and_toys' category which includes 'rubber toy' and 'children's bath toy'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"de2c325307534a90bb0150834cb5cf76\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy figurine (knight/warrior), which does not belong to the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"de9b4e576114440f851d4e02e1df4fd2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stuffed animal toy, not a rubber or plastic toy like a rubber duck or bath toy, which is the target class.\"\n    }\n  },\n  \"defa0002d092411583d47869201e5c27\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image appears to be some sort of electronic device or radio, not a rubber duck or similar bath toy.\"\n    }\n  },\n  \"df0c34549ea84f428624fcf8d2613385\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object belonging to the 'rubber_ducks_and_toys' class. It appears to be an abstract wireframe or schematic, not a recognizable toy.\"\n    }\n  },\n  \"df1f767a40db46b68d6774e0f6b1e2fd\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy pirate ship on wheels, which does not fit the specified class of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, squeaky toys).\"\n    }\n  },\n  \"dfbf954b7d8b4f15b3c1f25e63981f69\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"e0c3cbc945204bcd9c7ef92518b8b972\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy (a squirrel), which falls under the specified class 'rubber_ducks_and_toys'. The image quality is good and it is suitable for use in physics simulation.\"\n    }\n  },\n  \"e12493a7481548129179d926b9a15b35\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden box, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"e1d671db933d4d5c9503b0190593a1ab\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a toy animal, but it appears to be made of fabric or plush material, not rubber or plastic as specified by the class 'rubber_ducks_and_toys'. Additionally, it includes a large piece of wood, violating the 'one single object' rule.\"\n    }\n  },\n  \"e213da3b642640b2bc34a9ff8ae318e2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"e243fab1a47d4427bff9de3ef44b1a15\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rubber_ducks_and_toys' class, specifically as a 'rubber toy' or 'bath toy'. The image quality is good, and the object is isolated against a clean background. It represents a type of toy suitable for the dataset and potential physics simulation.\"\n    }\n  },\n  \"e2aa707b672a400ca6d4bcdaf2fc9aff\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a stylized toy duck or rubber animal toy, fitting the specified class. The image quality is good, and the object is suitable for physics simulation purposes (e.g., floating, bouncing).\"\n    }\n  },\n  \"e32f552041384af6a9ad99279283960b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy car, which does not belong to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"e34398d7f0ac479dad3fe4e6936a8c9d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low. The object is fragmented, poorly rendered, and difficult to identify clearly as belonging to the 'rubber_ducks_and_toys' class. It appears to be attached to another fragmented surface, violating the single object requirement.\"\n    }\n  },\n  \"e3f5625bc22c4730870841f99f60f0a3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small in the frame, partially obscured, and it's difficult to clearly identify it as a rubber duck or toy duck. Additionally, there appears to be another object (a small plant or decoration) next to it, violating the single object requirement.\"\n    }\n  },\n  \"e48409ffce3242bfb2fe6a445e57cfb7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and low quality. It is impossible to clearly identify the object as belonging to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"e50b24d24f6a4b9d9c44e6f051194fc8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck, which belongs to the specified class. The image quality is good, and it's suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"e542871d099947de88212a4a86315a40\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized toy duck, fitting the 'rubber_ducks_and_toys' class. Although unusual (a duck in a banana), it is recognizable as a single toy object, is high quality, and suitable for physics simulation as a toy.\"\n    }\n  },\n  \"e6341bc0e0b646a1b073a5dc520d3d43\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the object depicted. It does not clearly show an object belonging to the 'rubber_ducks_and_toys' class and is of very low quality.\"\n    }\n  },\n  \"e6934ddb3982497e8ddb7936c56d089c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very abstract, low-polygon yellow figure that does not clearly resemble a rubber duck or any specific bath toy. It lacks defining features like a beak or wings, making it difficult to classify within the requested category.\"\n    }\n  },\n  \"e6a8ad8234024ccaa91cd46d9f1f608f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts several dog toys (rope toys, balls), not rubber ducks or bath toys as specified in the class description. It also contains multiple objects instead of a single clean depiction.\"\n    }\n  },\n  \"e74c849c92054fdbb231bba1643d09da\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily cropped, showing only a partial view of the object, and it appears to include part of a hand holding it. This makes it difficult to identify the object clearly and violates the single object requirement.\"\n    }\n  },\n  \"e83968579ab84a4787a508a855cf5e27\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single toy duck, which belongs to the 'rubber_ducks_and_toys' class. The image quality is good, and the object is suitable for physics simulation (e.g., floating, dropping).\"\n    }\n  },\n  \"e849c622ff2f4eeca9a48eee143f2a53\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a fragmented 3D scan showing multiple objects, not a clear depiction of a single rubber duck or bath toy. The quality is low and it contains many other items.\"\n    }\n  },\n  \"e99ae1c41a0d49f6871da7fbfb50b23c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object clearly. The quality is too low for training data.\"\n    }\n  },\n  \"e9bf5452511b42349db4f04e80249d1a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single penguin toy, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"ea5a4c4e9f654d6b827b1d2bce751a2c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a tub, water, reeds, a large white bird toy, and a small yellow duck toy) rather than cleanly depicting a single object from the target class.\"\n    }\n  },\n  \"eacad791c62b46859a724aceb4948953\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rubber_ducks_and_toys' class (specifically a yellow duck toy). The image quality is good, and the object is suitable for physics simulation (e.g., floating, bouncing).\"\n    }\n  },\n  \"ec01e929eab145a9a9825abbf9113d80\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely washed out and too bright, making it impossible to clearly identify the object or assess its quality. It does not clearly depict any recognizable object, let alone one from the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"ecaa22bd52ee46b1bc56c8b366391b58\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rubber chicken toy, which falls under the 'rubber toy' or 'squeaky toy' category within the specified class. The image quality is good, and it shows a single object.\"\n    }\n  },\n  \"ecf88e60d742411d8b060fb46bbaca23\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single elephant toy, which falls under the 'rubber animal toy' or 'bath toy' categories within the requested class. The image quality is good.\"\n    }\n  },\n  \"ed203f8516d54f4b89e5b8a1d4564a94\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, the object is blurry, distorted, and unrecognizable. It does not clearly depict a rubber duck or any identifiable toy.\"\n    }\n  },\n  \"ed255e4570ca467f905208b7a52b483f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue of a duck on a pedestal with greenery, not a rubber duck or toy as specified by the class. It also contains multiple elements (statue, base, plants) rather than a single object.\"\n    }\n  },\n  \"edae91e1793641a1b8e351f378b435e7\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct toy objects (plush pizza, rubber chew toy, tennis ball) combined, not a single object from the specified class list like a rubber duck or bath toy.\"\n    }\n  },\n  \"ee0510287c2e4c088b3e33ab8832b612\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the details or even clearly identify the object as belonging to the specified class. The quality is too low for training data.\"\n    }\n  },\n  \"f00b71c09f284980ae54d76ee1e00376\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a figurine of the character Mario, which does not belong to the 'rubber_ducks_and_toys' class (like rubber ducks, bath toys, squeaky toys).\"\n    }\n  },\n  \"f04f0c27b1fc408eb24cbbfa4ae19b01\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a toy duck or bird, fitting the 'rubber_ducks_and_toys' category. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f14a2439c9ce4908848d26a381c0393c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy gun, not a rubber duck or a similar bath/squeaky toy as specified by the class description.\"\n    }\n  },\n  \"f198d430b6854df9adfcb6060b90d237\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden block toys, not rubber ducks or bath toys as specified by the class description.\"\n    }\n  },\n  \"f1de4fc390db4266a509b9739350512a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber duck toy, which belongs to the specified class. The image quality is good, and it is suitable for use in physics simulations.\"\n    }\n  },\n  \"f255057d5e6d410c8cea68c7e1eb66e6\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (a fish toy, a stacking ring toy, and a small cylindrical object), violating the requirement for a single object per image.\"\n    }\n  },\n  \"f2a6a85f75da44a3926ae1c6d72900ee\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy blender, which does not fit the specified class 'rubber_ducks_and_toys' (e.g., rubber duck, bath toy, squeaky toy).\"\n    }\n  },\n  \"f2a8196313954566a2f7300ac21d8d3d\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts the word 'STORY' as a 3D model, not an object belonging to the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"f3450e0c3fd649e2ba8d6a72c415baa8\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to identify the object or assess its quality or relevance to the class.\"\n    }\n  },\n  \"f61945ebf6b54f5f893d7858944326d2\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making the object almost completely invisible and unidentifiable. The quality is far too low for training purposes.\"\n    }\n  },\n  \"f6e9b1c7a245434abe2599b1ce2428f9\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rubber animal toy, which falls under the specified class 'rubber_ducks_and_toys'. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f72bdc6ca4954532a6d3ab03cb40f3db\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single unicorn toy, which fits into the broader category of 'rubber animal toy' or 'rubber toy'. The quality is acceptable and it clearly depicts the object.\"\n    }\n  },\n  \"f7bd348278334e86b0653b6338ecdecc\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a specific cartoon character (Larry the Cucumber from VeggieTales) rather than a generic rubber duck or bath toy as described in the class list. While it could potentially be a toy, it doesn't fit the core examples of the class like 'rubber duck', 'bath toy', or 'squeaky toy'.\"\n    }\n  },\n  \"f7cfad21aa0f4779bb19800bc221de0c\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single rubber/plastic animal toy (dinosaur), which fits into the 'rubber animal toy' category within the requested class 'rubber_ducks_and_toys'. The image quality is good and it depicts a single object suitable for physics simulation.\"\n    }\n  },\n  \"f7de284abceb41189c97743ebd0f785a\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a doll-like figure, possibly a gnome or similar character, which does not fit the description of 'rubber_ducks_and_toys' (like rubber ducks, bath toys, squeaky toys).\"\n    }\n  },\n  \"f8b89f9933c443f88442cd8cf6575225\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any object, let alone one from the 'rubber_ducks_and_toys' class.\"\n    }\n  },\n  \"f9a8eca7d26c46f2ba63d6f8190f967f\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is of very low quality and does not clearly depict any recognizable object, let alone one from the specified class. It appears fragmented and incomplete.\"\n    }\n  },\n  \"f9b7a22aa2e44f01ab932e9548ab98f4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Slinky Dog toy, which does not fit the description of 'rubber ducks and toys' (like bath toys, rubber ducks, squeaky toys made of rubber).\"\n    }\n  },\n  \"faaefef7c01f4c39aca2745bbcb8c8b5\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized toy duck, which fits within the 'rubber_ducks_and_toys' class. The image quality is good, and it shows a single object suitable for physics simulation (e.g., floating, dropping).\"\n    }\n  },\n  \"fadbae2a59c34b838ebe35a03a4839e3\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy vehicle (truck or similar), not a rubber duck or a related bath toy as specified by the class list.\"\n    }\n  },\n  \"faf58bd8859744a2ac73719fefc5b454\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object belonging to the 'rubber_ducks_and_toys' class (specifically a toy duck). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"fb95e2ebbbfa4bb3aa8b1e50156349f4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an action figure toy in its packaging, viewed from the side. This does not fit the specific examples provided for the 'rubber_ducks_and_toys' class (like rubber ducks, bath toys). Additionally, the image includes the packaging, violating the rule of depicting only a single object, and the side view makes it difficult to clearly identify the object.\"\n    }\n  },\n  \"fbeb51e1b6a54326bf65f8e05400553b\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is too abstract and does not clearly resemble any specific item from the 'rubber_ducks_and_toys' class list (e.g., rubber duck, recognizable animal toy). Its form is ambiguous.\"\n    }\n  },\n  \"fc7895fba1ea448ca1d0158102dd1fa4\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks sufficient detail to clearly identify the object as belonging to the 'rubber_ducks_and_toys' class. The rendering quality appears low, especially at the bottom.\"\n    }\n  },\n  \"fcfe0ab5b4234d9dae675f8a911e47dc\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a blue whale bath toy, which falls under the 'bath toy' and 'rubber animal toy' categories within the specified class. The image quality is good, and it shows a single object clearly.\"\n    }\n  },\n  \"fd2315002f4144f7b8f08aca12857348\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract, blocky shape that does not clearly depict a rubber duck or any recognizable bath toy.\"\n    }\n  },\n  \"feae887e0bc74187acb2959239c6464e\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden toy truck, which does not fit the specified class 'rubber_ducks_and_toys'. The class focuses on rubber/plastic bath toys, primarily ducks or similar animal figures.\"\n    }\n  },\n  \"ff2a7e7ef9dc481ea9e10b933b188262\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a gun, which does not belong to the class 'rubber_ducks_and_toys'.\"\n    }\n  },\n  \"ff825afe79e8447cbe12d9ea36998d90\": {\n    \"obj_class\": \"rubber_ducks_and_toys\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a complex interlocking toy, which does not fit the typical examples provided for the class 'rubber_ducks_and_toys' (like rubber ducks, simple bath toys, squeaky toys). While technically a 'plastic toy', it's significantly different in form and likely material properties from the core concept of the class.\"\n    }\n  },\n  \"01cf51582696428d8de8f22ce51d8028\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rock, but it has an artificial label attached to it, which is not part of the natural object. We need clean images of the object itself.\"\n    }\n  },\n  \"025c1e16f9634c71be21574417c1b8a7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains artificial labels (tags) attached to the rock, which are not part of the natural object. We need clean depictions of the object itself.\"\n    }\n  },\n  \"031c365212854242a6f8571a867276db\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch or collection of many small pebbles/rocks fused together, rather than a single, distinct rock object. This format is less suitable for learning physics parameters for simulating individual objects like a single rock or boulder.\"\n    }\n  },\n  \"033d44f45c784da18b56e994d4271fe5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"03d1487fe9ce47ad8ac866be96c8517c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good quality and detail, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"041860b0d04a4438bb841ae6550e5025\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is acceptable for training purposes and suitable for physics simulation.\"\n    }\n  },\n  \"0455747c7ac848269830ed0dca33726c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"058375cbb160447bbcad4e960340eff3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a stand/pedestal which is not part of the 'rocks' class. Additionally, the texture/material rendering makes the object look metallic or like foil rather than a natural rock, which might not be suitable for learning realistic physics parameters.\"\n    }\n  },\n  \"058cda3170b045ab80faa3055dad7e6c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a rock, but it is embedded within a significant amount of ground debris (dirt, twigs, smaller rocks) which appears to be part of the 3D model itself, rather than just background. This violates the requirement to depict cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"05a588391ae24e71a4b44f9398576e57\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a texture of small rocks or rubble applied to a sphere, not a distinct rock object (like a single stone, boulder, or formation). We need images of individual objects for physics simulation, not just material textures.\"\n    }\n  },\n  \"0643e56638f14e8cbaffa83c9befbc43\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the class and physics simulation.\"\n    }\n  },\n  \"0646c1574a684f5db9cb7adbaf8a471b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"073a32a3db91417c8736efeeaf02d2a1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it represents an object suitable for physics simulation in a video game.\"\n    }\n  },\n  \"094083ae8c824459a40ec7cbd0bcb9cd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of rubble mixed with ground, grass, and another unclear object, not a single, clean depiction of an object from the 'rocks' class. It's a scene fragment rather than an isolated asset.\"\n    }\n  },\n  \"0a0122cd7d4b4eb08309e045a2578831\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good (clear, well-lit), and it's a suitable object for physics simulation in a game environment.\"\n    }\n  },\n  \"0a28e803f1654dbfa632e4177da9a977\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is good, and while it includes a small ground base, this is common for integrating such assets into game environments and doesn't detract from the main object. It is suitable for physics simulation as a static or potentially dynamic object.\"\n    }\n  },\n  \"0a711220a6f746d2852a98f8a516ac43\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains extraneous elements: a label attached to the rock and scale markers underneath it. We need clean images of the object itself.\"\n    }\n  },\n  \"0a928fba229b4ccc89f069a6050ca119\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is good, and it represents a single object suitable for physics simulation in a game.\"\n    }\n  },\n  \"0b32c00b67dd444e8304b54a2aad76a9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a piece of rock or stone. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0bd65d21fadb4803a01b4bbf4156ee53\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a small rock embedded in a larger, flat piece of ground or rock slab, rather than a single, distinct rock object suitable for physics simulation (like dropping or throwing). It looks more like a piece of terrain geometry.\"\n    }\n  },\n  \"0c1bede2d1e349c58bdd05ee4f7e0af8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a rock or stone fragment. The quality is good, and it is suitable for physics simulation purposes within a video game context.\"\n    }\n  },\n  \"0c86615b155a424ead324f854c545012\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation, but it also includes a large, prominent man-made structure built on top of it. We need images of *only* the rock object itself.\"\n    }\n  },\n  \"0c8980d907f24b21abcb36c6220e3284\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and abstract. It does not clearly depict any object from the 'rocks' class.\"\n    }\n  },\n  \"0d6c25e1688a4efa91c8d70c4041560d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock/stone against a clean background. The quality is good, and it's suitable for the 'rocks' class and physics simulation purposes.\"\n    }\n  },\n  \"0df75b1ee68f42a49fa8bce6bbe6f063\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object (possibly slate or fieldstone) which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"0e406357d6a242b2997309109aad077d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, it looks like a piece of slate or a rock fragment). The quality is acceptable, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"0e6a0d8569fb430fb1fe0c430824c6d9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a small island with structures, water, and vegetation) rather than just rocks or a rock formation. It contains multiple object types integrated together, violating the requirement for a single object focus.\"\n    }\n  },\n  \"0eebfed37246463fa31c149f5aea1a1c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rock formation' or 'natural stone' category. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0f76dec1147543188ba05e98c0785cfd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object identifiable as a rock or stone fragment. The quality is acceptable, and it represents a type of object suitable for physics simulation in a game.\"\n    }\n  },\n  \"0f7ee2f4fe694b1589b62a67502eb476\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone, suitable for the 'rocks' class. The quality is acceptable for training purposes, and it represents an object type relevant for physics simulation in a game.\"\n    }\n  },\n  \"0fd3fac20d5c410dae8eb8f6b41746f9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rock, but it is mounted on a man-made base and has a background structure with a sign. This violates the requirement of depicting cleanly ONE SINGLE OBJECT without additional elements.\"\n    }\n  },\n  \"0fdca00224624d089651853a09c165b1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a collection of rocks forming a single object/formation, which fits the specified class. The quality is good, and it represents an object commonly found in game environments suitable for physics simulation.\"\n    }\n  },\n  \"10b7a54e115f403f85b0cf5aeec10ec0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made stone marker or pillar, not a natural rock, boulder, or stone as implied by the class list. While made of stone, its form is artificial and doesn't fit the intended category of natural geological objects.\"\n    }\n  },\n  \"10dd47439daa40c89db4a744814cc634\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/boulder against a clean background. The quality is good, and it represents an object commonly used in physics simulations in video games.\"\n    }\n  },\n  \"111d1897f92947439e86efef1a6e71df\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains an extraneous object (a scale marker or label) attached to the rock, violating the requirement for cleanly depicting only the object itself.\"\n    }\n  },\n  \"1142c9435e0d470d9f8bff6eb42505db\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is acceptable for training purposes, and it represents a single object suitable for physics simulation (e.g., collision) in a game environment.\"\n    }\n  },\n  \"1182b3f562bc4a3aa050f4c5791cc894\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks detail and texture, making it impossible to identify the object as belonging to the 'rocks' class. The quality is too low for training purposes.\"\n    }\n  },\n  \"11f852c54a124278b5e4213f37a7206b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks or rubble, which falls under the specified class terms ('rubble', 'stone', 'rock formation'). The quality is good, and such an object is highly relevant for physics simulations in video games (e.g., environmental interaction, destruction).\"\n    }\n  },\n  \"12ab95b20d224fd8aab179b199090da1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large rock formation integrated with terrain, more like a static environment piece rather than a single, distinct rock object suitable for individual physics simulation (e.g., dropping, throwing).\"\n    }\n  },\n  \"12fa98094e174ffbb22cb8a1f1c4d569\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a man-made structure (like a pillar or marker) constructed from multiple stones, sitting on a patch of grass. It is not a single natural rock, boulder, or geological formation, and it includes the ground element, violating the 'single object' requirement.\"\n    }\n  },\n  \"135d90890f7b41adbbfcd0bcce8a735d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small stone embedded in a flat patch of ground/material, presented as a single object. This is not representative of a typical standalone rock, stone, or boulder suitable for individual physics simulation. It includes more than just the rock object itself.\"\n    }\n  },\n  \"1379ab9e53b3431aa724e24c8b3cfe0a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks/rubble, which falls under the specified class terms ('rubble', 'rock formation'). While composed of multiple smaller stones, it represents a type of object commonly used in game environments and relevant for physics simulation. The image quality is good.\"\n    }\n  },\n  \"13835c3280f343739e7021290fcb938e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or rock fragment. The quality is acceptable for training data, and it represents a solid object suitable for physics simulation.\"\n    }\n  },\n  \"1504a78451614fc39218d0d8ee2c702a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object's shape (a hollow cylinder/cone) is highly unnatural for a rock or geological formation. It looks more like a man-made object (e.g., a pot or pipe segment) with a rock texture applied, which is not suitable for learning the physics of natural rocks.\"\n    }\n  },\n  \"1605f2b201164c4d85501c7757bd4681\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"1765cea2e34843d4b8dc8e1484271f8c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class. The image quality is good, and it represents a single object suitable for use in a game environment.\"\n    }\n  },\n  \"17d40ecbfc0b444d8d35ae82e5d596a7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock-like object against a clean background. The quality is acceptable, and it is suitable for physics simulation.\"\n    }\n  },\n  \"193c20da95f24e16880c0c86bfacb6dc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that belongs to the 'rocks' class (specifically, it looks like a piece of slate or a sharp-edged stone). The quality is good, and it's isolated against a neutral background, making it suitable for training.\"\n    }\n  },\n  \"197f3306fac04592ac7774f3a3c9af1e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is low due to poor contrast and a washed-out appearance, making the object details faint.\"\n    }\n  },\n  \"19d557e1e79b4583bd1fa25fb80e897a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a man-made stone urn/sculpture on a pedestal, not a natural rock, boulder, or geological formation as defined by the class list. Additionally, the image is quite bright, potentially overexposed, especially at the base.\"\n    }\n  },\n  \"19f4b08da9e64bb78fed3d0f76e7bf92\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a collection of colorful geometric blocks, not objects that resemble rocks, stones, boulders, or any related terms in the specified class.\"\n    }\n  },\n  \"1ad829e2f464446fa4945562ab611255\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock-like object (possibly a mineral or stylized rock) which fits within the specified class. The image quality is good, and the object is suitable for physics simulation as a rigid body.\"\n    }\n  },\n  \"1d7d73e999e24d4a8a9129b736c52c04\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and texture quality. It is suitable for use in physics simulations.\"\n    }\n  },\n  \"1dbe2967a0904385b0f02c42e4bbf16a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of loose rubble/soil, not a single distinct rock object. While 'rubble' is listed in the class description, this asset represents an aggregate of many small pieces rather than one object, making it less suitable for learning the physics parameters of a single entity.\"\n    }\n  },\n  \"1e0c1acd6a374d98a6a1770827402081\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rock formation integrated into a flat base, resembling a piece of terrain rather than a single, distinct rock object suitable for individual physics simulation (like dropping or rolling).\"\n    }\n  },\n  \"1e3f5d75d77b4e838953f24409d108de\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock (specifically, a conglomerate rock). The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"1e7acdc9b7af4659b22e3757d91a8ba9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a very low-polygon, untextured object that only vaguely resembles a rock. It lacks the necessary detail and realism to be useful for training physics parameters based on visual appearance.\"\n    }\n  },\n  \"1f36313723454967af70815b02881624\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple objects that fall under the 'rocks' class, specifically resembling 'rubble' or 'stones'. While it shows multiple objects, this arrangement is common and relevant for physics simulation (e.g., simulating piles or debris). The image quality is adequate for its stylized appearance.\"\n    }\n  },\n  \"1f51fdb86585478c951d875276cee9da\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically a stone or rock fragment, possibly with moss/lichen). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"1ffbf980c0de43719c34cb0dc5a456e4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts several rocks clustered together, which falls under the 'rocks', 'stones', or 'rubble' categories. The quality is good, and while it's multiple objects, they form a single, coherent group suitable for physics simulation as a pile or individual components.\"\n    }\n  },\n  \"20196c0a787f4698a8d5ad67161909a6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low. It appears to be a very low-polygon render or an incomplete 3D scan, making it difficult to clearly identify as a specific rock or formation. The geometry is too coarse and fragmented for high-quality training data, especially for physics simulation learning.\"\n    }\n  },\n  \"201c902eb83f4d77bcecd63b7126e249\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that falls under the 'rock' or 'stone' category (specifically, it looks like a piece of flint or similar stone). The quality is good, and it's isolated against a white background. It's suitable for physics simulation as a small rock object.\"\n    }\n  },\n  \"204b56faaffc45c3b23e65c371908b93\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it represents an object suitable for physics simulation within the 'rocks' class.\"\n    }\n  },\n  \"20933d6bd4914a419af56cd5fccc094b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and use case in physics simulation.\"\n    }\n  },\n  \"212ccf560833437bb89cd6a504683696\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock-like object, possibly a carved stone or artifact, resting on a separate, distinct base or stand. This violates the requirement of showing only a single object cleanly, as the stand is included.\"\n    }\n  },\n  \"214a6b07c4724097baf62c1df3578e0e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"220bfdbb08664afea364df3150224689\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's texture and coloration (translucent yellow/blue) are highly stylized and do not resemble common rock types. It looks more like ice, crystal, or a fantasy material. Additionally, the hollowed-out top makes it atypical for a natural rock formation or boulder intended for general physics simulation.\"\n    }\n  },\n  \"22193ff3da2f4fe5bdf3a15839f3aa73\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flat surface texture representing multiple rocks embedded in the ground (like paving or terrain), not a single, distinct rock object suitable for individual physics simulation.\"\n    }\n  },\n  \"228a1eacd62849e6865f24ecbb3db49f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized rock formation or cluster of rocks/crystals in a low-poly style. While stylized and brightly colored, it falls under the 'rock formation' or 'rocks' category for game assets. The quality is adequate for this art style, and such objects are commonly used in game environments and physics simulations.\"\n    }\n  },\n  \"22aa59eb632242c3ac2441949c6750b6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image has a noticeable horizontal artifact (a white line) across the middle of the rock, which indicates a quality issue with the render or the underlying 3D model/texture. This makes it unsuitable for high-quality training data.\"\n    }\n  },\n  \"22c57525e4eb481f978805bec65a6749\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object resembling teeth or a jawbone made of rock-like material, not a natural rock, stone, boulder, or geological formation. It doesn't fit the typical definition of the 'rocks' class for general physics simulation.\"\n    }\n  },\n  \"2388acd5da1f4bea9754a3224f02424f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/boulder, which belongs to the specified class. The image quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"23b2b0d4611d407fb31e9fc487b9298d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"242d80ae14f541c5a8408a8085de8398\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a collection of rocks, sand, and possibly moss fused together, resembling a piece of terrain rather than a single distinct rock object suitable for individual physics simulation (e.g., dropping).\"\n    }\n  },\n  \"256c1de7451d4046916f85c3e21e7e31\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, it looks like a stone or a unique rock formation). The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"27335b5bc20943dbb9976ead5690f14d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains other objects (plants) in addition to the rock. We need images depicting only the single object of interest (rock) for clean physics parameter learning.\"\n    }\n  },\n  \"27e9480b8a64456c85fc210f4c3c86b2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to be a fragment or slice of a larger terrain or rock formation, rather than a distinct, single object like a boulder or stone. It looks incomplete and not representative of a standalone rock object suitable for physics simulation.\"\n    }\n  },\n  \"2872fa297c9c4976a7808fffc1ac51df\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and includes a particle effect, making it look more like a fantasy artifact or structure rather than a natural rock or stone suitable for general physics simulation training.\"\n    }\n  },\n  \"28b669436f494979b3282ef925d723e4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly slate) of good quality, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"29a69d285e764dad9de59a9d69385fb8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a thin piece of rock or slate, fitting within the 'rocks' class. The image quality is good, and it could be used in a physics simulation as debris or a specific type of rock.\"\n    }\n  },\n  \"29aa10142d0447cf94f0e4a568f80d64\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a rock or stone against a clean background. The quality is acceptable, and it fits within the requested class definitions. It represents a solid object suitable for physics simulation.\"\n    }\n  },\n  \"29f7385f22464959949bad619386240d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of abstract cubes, not an object belonging to the 'rocks' class (rock, stone, boulder, etc.).\"\n    }\n  },\n  \"2ac3a1feefdc40c59294b226e7c3a6b7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene or diorama containing multiple rocks and a patch of ground, not a single, isolated rock object as required.\"\n    }\n  },\n  \"2af51744663e410b8bc909c5f3436019\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for physics simulation training data.\"\n    }\n  },\n  \"2b4238ecc813444cb1efdaabdfe2e0b2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2b63f2a279a24bd5ac1cac46de4f3182\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified classes. The quality is good, and it represents a single, distinct object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"2c93230d1fce4233a5cc17cbae1a121c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone with good quality and lighting. It is suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"2cad6dfad648446393da11f9d24e79f5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a label attached to the rock, which is an extraneous object and not part of the rock itself. We need clean images of the object only.\"\n    }\n  },\n  \"2cee5c7cd56b46ae95dd395582cabad3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an extraneous object (a white tag or marker) on top of the rock, violating the 'cleanly ONE SINGLE OBJECT' rule.\"\n    }\n  },\n  \"2d5f24f744fa495e99c7edcbfbb5346a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is good, and it shows a single, distinct object suitable for physics simulation in a game.\"\n    }\n  },\n  \"2d6c792bf1904260bb2cf62dbf91eee8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, is of high quality, shows only the object, and is suitable for use in a video game environment, including potential physics simulation.\"\n    }\n  },\n  \"2e91783ae3d1479a86a9aafc74ae85c6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a stalactite or stalagmite, which falls under the category of 'rock formation' or 'geological formation'. The quality is good, and it represents a distinct type of rock structure suitable for physics simulation in relevant game environments.\"\n    }\n  },\n  \"2ef81a195ef34a9aa1ed42b90abc3aab\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an extremely thin, elongated object viewed edge-on. It is very difficult to clearly identify this as a rock or stone due to the perspective and unusual shape. It does not represent a typical object from the 'rocks' class and may be unsuitable for general physics simulation.\"\n    }\n  },\n  \"2fb133c9ce13411a992632fec18d1236\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of rocks or rubble, which falls under the specified class. Although stylized (low-poly), the quality is good (clear, well-lit), it represents a single logical object (a rock cluster/rubble pile), and is suitable for physics simulation in a game.\"\n    }\n  },\n  \"301833fedf0e45b3aeb9dac4261927e3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's color (purple) and texture (smooth, somewhat translucent with white spots) make it look more like a stylized gem or crystal rather than a typical rock, stone, or boulder. While it has a rock-like shape, its overall appearance deviates too much from the common understanding of the 'rocks' class for realistic physics simulation training.\"\n    }\n  },\n  \"30e5cf6914b2487ab1008f8c16869f55\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large rock (boulder) resting on a bed of smaller pebbles/gravel. This violates the requirement of depicting only ONE SINGLE OBJECT, as the pebbles constitute separate objects from the main boulder.\"\n    }\n  },\n  \"311a3bee14ca4cd798dcbcf08954e940\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of terrain with rocks and significant vegetation (grass), not a single, distinct rock object as requested. It's more of a landscape element.\"\n    }\n  },\n  \"31664c2e5ec64d3cbdf4362ada544592\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure made of multiple stones and bricks, not a single rock or natural rock formation. It also includes a grassy base, violating the 'one single object' requirement.\"\n    }\n  },\n  \"316c5896982446538e9a07b113483196\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified classes. The quality is good, and it represents a single, cohesive object suitable for use as an environmental asset in a video game where physics interactions (like collision) would be relevant.\"\n    }\n  },\n  \"358a3a1696254a7599fdf85330bebd25\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone block. The quality is acceptable for training purposes, and such an object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"36365ec36c504ffc8089eedf7f0ad7a7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rock formation' or 'geological formation' categories. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"36375af073854f568ad7a817806dda06\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is acceptable, and it represents a single cohesive object suitable for use in a video game environment.\"\n    }\n  },\n  \"36e4575d523e401cad9230d7f426505e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, and it's difficult to clearly identify the object as belonging to the 'rocks' class. It appears fragmented and contains other unrelated shapes.\"\n    }\n  },\n  \"380584e6232a47cf85e72b4c009708a3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"38629eed2e4b4801aaccd13eefc0e36b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock of good quality, suitable for the requested class and physics simulation.\"\n    }\n  },\n  \"39a49ad24271485a90872c3e631d30d4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple distinct rocks and a base surface, not a single isolated rock object as required.\"\n    }\n  },\n  \"3a52c96d9ee8423a853671806d9718df\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object against a clean background. The quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"3b452579500e412b95818ef3eefb337e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is extremely low. The object lacks any texture or detail, making it impossible to identify clearly as a rock or any specific type of stone. It appears as a simple, untextured geometric shape.\"\n    }\n  },\n  \"3c898a9c9d7a44f0a6659c1fd4f45e17\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, blocky, white object that does not resemble any type of rock, stone, or geological formation. It lacks the natural texture and shape characteristic of the target class.\"\n    }\n  },\n  \"3c8bba7c8c444fc0b7e1b40d1f59ca04\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is good, and it shows a single object suitable for physics simulation in a game.\"\n    }\n  },\n  \"3c9350db52d443c898faab37b8d840e8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a man-made floor tile or decorative panel with carvings, not a natural rock, stone, boulder, or geological formation as defined by the class list.\"\n    }\n  },\n  \"3d3de69b64414549b4b27f0171eeccac\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made structure (a pillar or column made of cut stones/bricks), not a single natural rock, boulder, pebble, or natural rock formation as requested by the class definition. While made of stone, it represents an assembled object rather than an individual rock suitable for general rock physics simulation.\"\n    }\n  },\n  \"3e2d581982e84ae0ac1dedf431cf7419\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with a distinct texture (possibly conglomerate or fossiliferous). The quality is good, and it's suitable for use in a physics simulation as a game asset.\"\n    }\n  },\n  \"3e66c20c1cb54395a759c9c8048d2a87\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, lacks color and texture, making it very difficult to identify as a rock. The quality is too low for training.\"\n    }\n  },\n  \"401b886e04a841bdb545f3b9d950d373\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape diorama containing multiple elements (land, water, trees, and possibly small rocks), not a single, clearly identifiable rock object as required.\"\n    }\n  },\n  \"413307a0fb3b4b06908d4cd5e8a37064\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two rock-like blocks, but they are placed on a distinct cobblestone base, which is a separate object/surface. This violates the requirement for depicting only a single object cleanly.\"\n    }\n  },\n  \"42a284167dcc42babc37ef1fa5409597\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple small rocks or pebbles (rubble), which falls under the requested class. The quality is good, and simulating a collection of small rocks is relevant for physics engines.\"\n    }\n  },\n  \"43577cb175a9417b9e2b57f59d98caf1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground with multiple rocks embedded in it, rather than a single, distinct rock object. This makes it unsuitable for learning the physics parameters of an individual rock.\"\n    }\n  },\n  \"43f1134427ac466385ad67efee08d634\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The image quality is good, and it represents an object commonly used in physics simulations in video games.\"\n    }\n  },\n  \"44c5590db69644c49bdc502c76013b23\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single piece of conglomerate rock, which belongs to the specified class. The quality is good, and it represents an object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"454db8788f684e2a823b2cbf41dee7a7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock against a clean background. The quality is good, and it represents an object suitable for the 'rocks' class and physics simulation in a game.\"\n    }\n  },\n  \"45fc357ad7674608ba667f34321f686a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (likely pumice or similar volcanic rock) with good quality and lighting. It fits the 'rocks' class and is suitable for physics simulation.\"\n    }\n  },\n  \"463a5215ab5b4e3daaa815f0f2c63033\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of many small rocks or pebbles, rather than a single distinct rock, boulder, or clear rock formation. It looks like a fragment of a larger ground scan and is not suitable for representing a single object for physics simulation.\"\n    }\n  },\n  \"47cb9f3c1d6e4134b2dec5a1ff02cdff\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a manufactured object (a stone tray with handles) rather than a natural rock or stone formation. Additionally, there is another object visible underneath the tray, violating the single object requirement.\"\n    }\n  },\n  \"47d1c6729a9347f78e856e9c3e54f5df\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a composite object featuring rock-like elements attached to metallic pillars and bases, not a standalone rock or natural rock formation. This violates the requirement for the image to cleanly depict a single object belonging solely to the 'rocks' class.\"\n    }\n  },\n  \"482eb73363084d78ba6fb8ab280f16a5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone object against a clean background. The quality is good, and it represents an object commonly used in physics simulations within video games.\"\n    }\n  },\n  \"48b1cfe470e749a8810fae0bd9ebc19f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cluster of rocks integrated with a patch of ground/terrain, not a distinct single rock object or a clear rock formation suitable for isolated physics simulation. The presence of the terrain base complicates the definition of the object as purely 'rocks'.\"\n    }\n  },\n  \"49a9b65d282b4895be4fe89868e8acf5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rock formation' or 'geological formation' category within the 'rocks' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4a09d9b9b8ff44b9ace7b23216286bdb\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stack of rocks, which falls under the 'rock formation' or 'geological formation' category. The quality is good, and it represents a single, cohesive object suitable for use in a game environment and physics simulation.\"\n    }\n  },\n  \"4a3292eff4384a5fb2491551675cd442\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a composite object, specifically a rock attached to a handle or structure, resembling a tool or weapon. It is not an image of just a rock, stone, boulder, etc., as required by the class definition and the need for clean, single-object examples.\"\n    }\n  },\n  \"4a333059d40848b58b626c803e82fdd8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump or driftwood, not an object from the 'rocks' class.\"\n    }\n  },\n  \"4a9016bd124d4af2b85d8413b1dd257f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation or a large stone slab, which belongs to the specified class. The quality is good, and it shows a single object suitable for use in a game environment and potentially physics simulations.\"\n    }\n  },\n  \"4b74c340d1bf47ccad35b57deb78b58a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a man-made pillar or column, which is an architectural element, not a natural rock, stone, boulder, or geological formation as specified by the class description.\"\n    }\n  },\n  \"4b76af33741b481298ccb21bf16fdcbc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a large rock or boulder, which belongs to the specified classes. The quality is good, and while it includes a small patch of ground/moss at the base, this is common for 3D scans of large natural objects and doesn't detract from the main subject. This type of object is suitable for physics simulation in a game environment (e.g., collision).\"\n    }\n  },\n  \"4caf4887845f4e04bcf68bc3df36afe9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple distinct rocks/pebbles, not a single object as required by the instructions.\"\n    }\n  },\n  \"4d393cc4521e48a8b16abb28f2e6bec7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, violating the requirement to depict only one single object.\"\n    }\n  },\n  \"4d9834bd08374e54a1cb072d3ae2509e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock-like object with adequate quality and lighting. It is suitable for the 'rocks' class and relevant for physics simulation.\"\n    }\n  },\n  \"4de10da4d6f54e538b928c7322ddb481\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class. The quality is good, and it represents a single object suitable for use in a video game environment and physics simulation.\"\n    }\n  },\n  \"50662b9029bb4d43955f3228b8ac5989\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stack of stones/fieldstones, which falls under the requested 'rocks' class (specifically terms like 'stone', 'fieldstone', 'rubble'). Although it's composed of multiple individual stones, such a stack can be considered a single game asset or used for physics simulation of collapsing structures or individual stone properties. The image quality is good.\"\n    }\n  },\n  \"506f25b6a2724f8ba67ab26cff66bdf3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"50bc1113c35d4787908f82ac9e9e628b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is very thin and flat, making it look more like a broken tile or a fragment rather than a typical rock, stone, or boulder. Its depiction as a member of the 'rocks' class is ambiguous.\"\n    }\n  },\n  \"50fbb4c8918e495691467c627749b1dd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation object, which belongs to the specified class. The quality is good, and it's suitable for use in physics simulations within a game environment.\"\n    }\n  },\n  \"5146fffc1a874715bf30fa51f426e8b6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains both a rock and grass elements. We require images depicting only a single object from the target class (rocks) to cleanly learn its physical properties.\"\n    }\n  },\n  \"521b0770cf3547e1becf3eafbc03f512\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly granite) with good lighting and clarity. It fits the 'rocks' class and is suitable for physics simulation.\"\n    }\n  },\n  \"527ecb24189b414c84605fd302328aee\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone. The quality is sufficient, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"53879b1817a240a398ee151a88159694\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly granite) with good lighting and detail. It is suitable for the 'rocks' class and relevant for physics simulation.\"\n    }\n  },\n  \"53c7d374554e440fa21ab43bb342e038\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (slate/stone) against a clean background. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"53ef6587932d46f1a301a4196f0ef7b7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a structure made of rocks/stones, which fits within the 'rock formation' or 'rubble' categories. The quality is good, and it represents a single, coherent object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"54243a946c1b417fa80588fff042d569\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a low-polygon representation of rocks or a rock formation. Although it lacks texture, the shape is recognizable and suitable for the 'rocks' class. It's a clean image of a single object relevant for physics simulation.\"\n    }\n  },\n  \"544f713b7f7e4fa682a3b79f6d2cb23d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a rock or any related object. It appears to be a fragment of an architectural element or molding, which is completely unrelated to the requested class.\"\n    }\n  },\n  \"54b8a0097d24400ea7e6dea69d2f635d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of acceptable quality, suitable for physics simulation training.\"\n    }\n  },\n  \"54f56ec9db844d6fb9179830b36d165b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two geometric shapes (a sphere and a square tile) with a lava-like texture, neither of which clearly represents a rock, stone, boulder, or any related term from the specified class list. The shapes are too artificial for the 'rocks' category.\"\n    }\n  },\n  \"56a22638c52b49df911f49d11ebaa5d4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects: the rocks and the base/platform they are sitting on. We need images depicting only the object class (rocks) itself.\"\n    }\n  },\n  \"56a68039afcb46738cbdf1da52d471a2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains other objects (plants/reeds) attached to the rock, violating the requirement for depicting only a single object from the specified class.\"\n    }\n  },\n  \"57a6eed2fdde4bf583d99dc1a61d12d0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a house on a patch of grass, not a rock or any related object.\"\n    }\n  },\n  \"57c1b51a5c1b41e48c6bf83f052f2e8a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large rock surface with a smaller rock and a metallic tool on it, not a single, isolated rock object as required. It appears to be a scan of a ground area rather than a distinct asset suitable for individual physics simulation.\"\n    }\n  },\n  \"581223c9e7aa4fd3aa9379e8d05eacb3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a rock, stone, boulder, or any related term. It appears to be a very low-polygon, abstract geometric shape with no texture, making it unsuitable for representing the 'rocks' class.\"\n    }\n  },\n  \"589c3308de5746e196950e4b88a9f244\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"58f20ac24ad14c6db61f64885d2b2d79\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the target object (rock) but also includes a base material and scale markers, violating the requirement for a clean depiction of a single object.\"\n    }\n  },\n  \"59171108131848e9b948bdf759a4f45b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock/stone of good quality, suitable for the requested class and physics simulation.\"\n    }\n  },\n  \"59abcf01ea4b4a5ca871ccc0ea703776\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock structure that is part of a larger installation, including a base and surrounding ground elements. It is not a clean depiction of a single rock object suitable for isolated physics simulation.\"\n    }\n  },\n  \"59ca61b367574f7da1d638f263d4d115\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically a piece of stone or rock). The image quality is good, and it's suitable for use in physics simulation.\"\n    }\n  },\n  \"5a7e4f99937d4ebda21663b589d46bd9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation consisting of larger pillar-like stones and smaller rubble, which falls under the specified classes. The image quality is good, and the object is suitable for use in physics simulations within a video game context.\"\n    }\n  },\n  \"5a84b18ffeb44ae697f9338971ac3c04\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object (likely slate or similar layered stone) with good quality and lighting. While there is a small marker on top (likely from the 3D scanning process), it doesn't significantly detract from the object itself. The object fits the requested class and is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"5a92ffcc1fe245768f269b28659d139f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5a9dc1d5b80b43ff9e6a32b73220eeef\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly slate or fieldstone) of adequate quality. It is suitable for the 'rocks' class and could be used in physics simulations.\"\n    }\n  },\n  \"5b709a4d5fea41b187534f9a46b70f81\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock (possibly granite) with good lighting and clarity. It fits the requested class and is suitable for physics simulation in a game.\"\n    }\n  },\n  \"5ba99c06b4414c188017f36a1c5d6336\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making the object barely visible. Furthermore, the object depicted does not resemble a rock, stone, boulder, or any related geological formation. It appears to be an abstract or man-made shape.\"\n    }\n  },\n  \"5bc7b6c782eb4942a87302181ef7640c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone, suitable for the requested class. The quality is good, and while the texture is somewhat stylized (greenish, translucent), it adds diversity and is still identifiable as a rock-like object appropriate for physics simulation in a game.\"\n    }\n  },\n  \"5c6598c62e4343b2ab456389c9ebd1b6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a picnic table and benches made of stone slabs, not a natural rock, boulder, or rock formation as required by the class definition.\"\n    }\n  },\n  \"5ca2eee177224b73835ab67a92a6ec22\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and clarity. It fits the specified class and is suitable for use in physics simulations.\"\n    }\n  },\n  \"5da8d840c21c48c1ba8f16a10ab24021\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"5eba582c14e94ca2bba8422118842c58\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made stone monument or structure, including carvings and a paved base. While made of stone, it doesn't represent a natural rock, boulder, or simple stone object typically used for physics simulations like dropping or rolling. It's more of an architectural element.\"\n    }\n  },\n  \"5ed3b9bca50d4bfb9957a6a0196647f4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone of good quality against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"5efac648b38445a0a4ae6adbb00e19bf\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright, making it impossible to identify the object or assess its quality.\"\n    }\n  },\n  \"5f09867f8eb84913affd02fade01080f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5f217216db794c2a9575e11da30bf217\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flat, irregular piece that looks more like a scanned section of rocky ground or terrain rather than a distinct, single rock object (like a boulder, stone, or pebble). It lacks the volume typically associated with rocks used in physics simulations.\"\n    }\n  },\n  \"5f2b7942fa11452ab248e0b553ba7037\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly slate or a similar type) with good lighting and quality. It is suitable for the 'rocks' class and appropriate for physics simulation.\"\n    }\n  },\n  \"5f758866e6bd4d46a078408477679480\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock formation or geological formation against a clean background. The quality is good, and it fits the requested class.\"\n    }\n  },\n  \"5fc842920aca4d3e86627674ef14e702\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"6088546dc4854643a3b8ba92f5d4f7cc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains three separate objects, while the requirement is to have only one single object per image for clean data collection.\"\n    }\n  },\n  \"61329dde575c4ef9b16426e2ae5c30b3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock against a clean background. The quality is good, and it represents an object commonly used in physics simulations in video games.\"\n    }\n  },\n  \"6148e2c4dec04b549e8237989fab20b0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"626c0cf2440f4987bfea9ea64e072f00\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground covered in small rocks/pebbles (rubble), rather than a single distinct rock object (like a boulder or stone). This is more representative of a terrain surface or material than an individual object suitable for the intended physics simulation (e.g., dropping a single rock).\"\n    }\n  },\n  \"62ac253d10c441928aa5158b458ad7ef\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is very thin and elongated, and does not clearly resemble a rock, stone, boulder, or any of the specified related terms. Its appearance is ambiguous and could be mistaken for other materials or formations. It is not a good representation of the 'rocks' class for training data.\"\n    }\n  },\n  \"6315f08c031449108de85707ff2d35ed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a perfect sphere with a rock texture applied. This is not representative of a natural rock, stone, or boulder, which typically have irregular shapes. While the texture fits, the geometry is unsuitable for learning general rock physics.\"\n    }\n  },\n  \"64cdb28feb954610aed658364b1112ff\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a type of rock or stone (specifically a flat stone or pebble). The quality is good, and it's suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"650152baa6dd4d0da784483fb431d6b5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, whereas the requirement is for images depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"658ebf60afef49ddbe9b75ca1c4fce64\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, a rock fragment or stone). The quality is acceptable, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"66832dd71eb24e0491c5226baa8738d7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation or a small rock wall, which falls under the 'rocks' class. The quality is good, and it represents a single cohesive object suitable for use in a game environment and potentially physics simulation (e.g., as a static obstacle or destructible element).\"\n    }\n  },\n  \"6a0917d9871e479797e5f3ed1510384f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flat surface or texture representing multiple stones fitted together (like paving or a ground texture), not a single, distinct object like a rock, boulder, or pebble that would be suitable for individual physics simulation.\"\n    }\n  },\n  \"6a8e8be9cfb940c18ccbfbd1e17606eb\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low due to rendering artifacts, distorted textures, and what appears to be incomplete or broken geometry, especially in the lower section and the side flap. It doesn't clearly depict a well-formed rock.\"\n    }\n  },\n  \"6bf936d1a014437584c77adc5ffdb4c5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows floor tiles made of stone (possibly slate), not a natural rock, boulder, pebble, or rock formation. While the material is related, the object itself is a man-made construction (tiling) and doesn't represent the intended class of objects for physics simulation.\"\n    }\n  },\n  \"6c1ee8ad4e5142e3b080d328f6fa0421\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it is suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"6cce919c70ce424baeb39c4a88b84fe4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the rock object placed on a distinct base or surface, along with some small marker-like objects. It does not depict cleanly ONE SINGLE object belonging to the 'rocks' class.\"\n    }\n  },\n  \"6e2d81d9a8c648e3978e8cf4775f81da\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object with good quality and texture, suitable for the 'rocks' class and physics simulation purposes.\"\n    }\n  },\n  \"6e7601c510c545e496e8d4fb38c462d4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the rock object placed on a distinct tiled ground surface, which violates the requirement of depicting only the single object cleanly.\"\n    }\n  },\n  \"6f5f6f5276454a4198132662b67f57a7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a perfect sphere with a rock texture applied to it, not an actual rock, stone, or boulder with a natural shape. This geometric shape is not representative of the object class for physics simulation purposes.\"\n    }\n  },\n  \"6f70b410d3b14132930fe6c7aa817a97\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object's texture is extremely smooth and uniform, lacking the typical characteristics of rock or stone (like grain, cracks, roughness). It looks more like polished amber, resin, or a stylized representation rather than a natural rock suitable for learning realistic physics properties.\"\n    }\n  },\n  \"6f737cbf6bd64a2d98b070c6dec65cf7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that belongs to the 'rocks' class (specifically, it looks like a stone or small boulder). The image quality is good, and it's suitable for use in physics simulations.\"\n    }\n  },\n  \"70e5b9f0955245c398d37c8218582230\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large rock formation or landscape segment, which is typically treated as static terrain in games rather than a dynamic physics object. It's not suitable for learning the physics of individual, interactable rocks or boulders.\"\n    }\n  },\n  \"712cbe5352d74a1990f263db6c238e3c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single piece of rock (slate or similar) against a clean background. The quality is good, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"726e8563eb634c529410f4e00857bbb3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stack of rocks (a rock formation/cairn), which belongs to the specified class. The quality is good, and the object is isolated against a clean background. While composed of multiple rocks, it forms a single conceptual object relevant for physics simulation (e.g., stability, collision).\"\n    }\n  },\n  \"734e0f691e004fd3bbf204c87f5205aa\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts three separate sections of what appears to be stone paving or wall sections, not individual rocks, boulders, or pebbles as defined by the class. These are likely static environmental assets rather than single dynamic objects suitable for physics simulation.\"\n    }\n  },\n  \"73ab493efe74416a8e09ac88cbb83850\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock embedded in a patch of ground, including a hole. This is not a clean representation of a single rock object, but rather a small environmental piece.\"\n    }\n  },\n  \"748be9e15b2d411883b3d176cecb3b97\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made pillar or pedestal structure, not a natural rock, stone, boulder, or geological formation as specified by the class list.\"\n    }\n  },\n  \"769cb0c7fcb047b79da72485a7d395bc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern the object's details and texture clearly. This low quality makes it unsuitable for training.\"\n    }\n  },\n  \"770c320c04d843b8aeadb33e7dec4c29\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The 3D model appears fragmented and incomplete, with visible holes or missing geometry, suggesting a low-quality asset that might not be suitable for high-quality game development or reliable physics simulation.\"\n    }\n  },\n  \"7711b2e600fe4658890ba8c1ddc157c3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, it looks like a stone or perhaps a fossilized shell, which is a type of rock formation). The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"7741407764284794bec24ced52270e93\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good (clear, well-lit), and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"77c9527f7b1d4d248616b096ca63b8dd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple rocks placed on a distinct patch of ground/rubble, which is part of the 3D model. This violates the requirement for a single, clean object, as it includes the ground base along with the rocks, making it less ideal for learning the physics parameters of individual rocks.\"\n    }\n  },\n  \"781b996d764b455ab65399b2413309e5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which belongs to the specified class. The quality is good, and it represents a single, distinct object suitable for use in a game environment and physics simulation.\"\n    }\n  },\n  \"781e3bb90e0f4c1ca81ab9aafab2bf76\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock/stone against a clean background. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"78265e5eeca249f1805f1e00bb931dfc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"7849d9d1d18a4bf39c921c3bce202c2f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fragmented and incomplete object. It doesn't clearly represent a whole rock, boulder, or stone, making it unsuitable for training purposes as it looks more like a rendering artifact or a partial scan rather than a distinct object.\"\n    }\n  },\n  \"796f0fb16de1495c9fe09077fb82e949\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the target object (a rock), but it also includes a patch of ground/base material and scale bars/rulers, violating the requirement for a clean depiction of a single object.\"\n    }\n  },\n  \"7a09ea1c56474fb48e5c546f2a1c5eb4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a sticker with a number on the rock, which is an extraneous object not part of the rock itself. We need clean images of the object only.\"\n    }\n  },\n  \"7aa1a1c3aebd40c982ac2e3cd201e7a8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of small rocks or rubble, which falls under the specified class list ('rubble', 'stone', 'pebble'). While it's multiple objects, a pile like this is a common entity in game environments and relevant for physics simulation (e.g., scattering). The image quality is good.\"\n    }\n  },\n  \"7ae9bd3e40d145988d6b3fa587e5958d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and detail. It is suitable for the 'rocks' class and relevant for physics simulation in a video game.\"\n    }\n  },\n  \"7b1db3670f1a41e388f9bbb77468f5d4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rocks' class (specifically, it looks like a piece of slate or a flat stone). The image quality is good, and it's suitable for use in physics simulations as a rock object.\"\n    }\n  },\n  \"7b44341e5f18445e9a7d2f814273b308\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized rock formation, which falls under the specified class 'rocks'. The quality is good, and it represents a single object suitable for use in a video game and potentially physics simulation (e.g., collision).\"\n    }\n  },\n  \"7b633ad64f5d482aa963953543361a8a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the dataset and physics simulation.\"\n    }\n  },\n  \"7d070c4e6ea148018286f4e87a80371b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation, which falls under the specified class. The quality is good, and it represents an object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"7d374d120b594824b6e39211a9802266\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fragment of a 3D model, likely a piece of terrain or a cliff section, rather than a distinct, single rock object. Large parts of the model are untextured and appear as simple geometric shapes, making it unsuitable as a clean representation of a rock for physics simulation training.\"\n    }\n  },\n  \"7d93e58500aa45d98b2fbf0dda711693\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone of reasonable quality, suitable for use in physics simulations within a video game.\"\n    }\n  },\n  \"7dad50f3a29e4d9f93b55b901de4bafe\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made structure (like a planter or pillar) constructed from stones, not a single natural rock, boulder, or geological formation. While made of stone, the object itself is a composite structure, which is not ideal for learning the general physics properties of individual rocks.\"\n    }\n  },\n  \"7dcf564c7f0b4a6a9b5c590500f9e5b9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, it looks like a blocky stone or fieldstone). The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"7e662113fa254040a36546719ec80add\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (likely flint or chert) which belongs to the specified classes. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"7e90a03ffde044ee9cf06375ad809a15\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large-scale geological formation (mountain range/terrain) rather than individual rocks, stones, or boulders suitable for typical physics simulation interactions (like dropping or throwing). While 'rock formation' is listed, this asset represents landscape/environment rather than a distinct, interactable object. Additionally, the image quality is somewhat low (blurry).\"\n    }\n  },\n  \"7fa93a917d1c487c91add08c34a5fe6f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified classes. The quality is good, and it represents a single, cohesive 3D model suitable for use in a game environment, potentially for physics simulation (e.g., collision).\"\n    }\n  },\n  \"7fb30f7dfe3e43e8a723481eaa6b8ae8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a rock, but it is rendered on a significant patch of ground/sand which appears to be part of the same 3D model. We need images of the object itself, isolated, for clean physics simulation data.\"\n    }\n  },\n  \"7ff644bea1e543b185ad67dcc9565f06\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground covered in many small pebbles and dirt, rather than a single, distinct rock object. This is more suitable as a terrain texture than an individual object for physics simulation.\"\n    }\n  },\n  \"80ec5a0f7f13418db720fffcd5b2c8dc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a man-made pillar or column, which is a distinct architectural object, not a natural rock, boulder, stone, or rock formation as specified by the class list.\"\n    }\n  },\n  \"815cbcc123a54199a86bc1328fa65a7c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears fragmented and incomplete, especially around the base. It looks like a low-quality render or a broken object, which is not suitable for learning general physics parameters for a solid rock.\"\n    }\n  },\n  \"81a547bd0c2f4cdab8974c8759a79c4d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely washed out and too bright, making the object almost invisible and impossible to identify clearly as belonging to the 'rocks' class. The quality is too low for training data.\"\n    }\n  },\n  \"81cb3c8d116d4361b56a34674e63db4e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very low-poly, abstract shape that does not clearly resemble a rock or any related terms. It lacks the natural texture and form expected for this class, making it unsuitable for training purposes, especially for physics simulation.\"\n    }\n  },\n  \"838da78852c34bf3bd835b86da2a2309\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low. It lacks texture and detail, and the object blends significantly with the white background, making it difficult to clearly identify as a rock or discern its full shape. It appears to be an untextured or poorly rendered 3D model, not suitable for high-quality training data.\"\n    }\n  },\n  \"841d3f6a252e4dcd9a6a37aa2a648a60\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of rocks, but it also includes other distinct objects like foliage, a blue tarp/plastic, and another pile of smaller gravel/pebbles with netting. This violates the requirement for depicting cleanly one single object or a cohesive formation belonging to the target class.\"\n    }\n  },\n  \"856611573ed042ddbb14758d85e712dc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a stone/rock. The quality is acceptable, and it represents an object commonly used in video games and suitable for physics simulation.\"\n    }\n  },\n  \"876b888a389d4e469299d731a5f3cb84\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation integrated with a significant amount of ground/terrain, rather than a single, distinct rock object. This violates the 'ONE SINGLE OBJECT' rule, as it's more of an environmental piece than an isolated rock.\"\n    }\n  },\n  \"879e695327e3465d9e649267909202ff\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cut block or core sample of rock layers. While it is technically rock, its artificial, cut shape is atypical for general-purpose rock assets used in game physics simulations, which usually feature naturally shaped rocks, boulders, or pebbles. This object looks more like a scientific specimen or display piece.\"\n    }\n  },\n  \"87ad4c3e669a47a4becb208f456e5d96\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of acceptable quality against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"8890cd94da0b43e1aec3eef5b6c3f05e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a rock or stone. The quality is adequate, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"891197ddc3da4306ad88ccf12e02144b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape is highly artificial and symmetrical, resembling a manufactured item or a test specimen rather than a natural rock, stone, boulder, or other geological formation listed in the class description.\"\n    }\n  },\n  \"891b4eeb816f4b879f90a6777f6167ed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object belonging to the specified class. The image quality is good (clear, well-lit, not blurry). The object is suitable for physics simulation.\"\n    }\n  },\n  \"898088e1de204eafa593ac5aafb7bca0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (display trays with many small rocks, a larger rock, and a cloth) rather than depicting cleanly ONE SINGLE rock object.\"\n    }\n  },\n  \"8aba025d37e7477da73e24f267cd48e5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class. The quality is good, and it represents a single, cohesive object suitable for use in a game environment and relevant for physics simulation (as a static collider with rock material properties).\"\n    }\n  },\n  \"8af28114776f401ebde6b921eeab9f70\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays abstract geometric shapes, not an object that belongs to the 'rocks' class (rock, stone, boulder, etc.).\"\n    }\n  },\n  \"8b8d9bfa88d44538a0bbe9f5e8712797\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains three separate spherical objects, not a single rock or stone. While the texture resembles pebbles, the shape is unnatural for the 'rocks' class and it violates the 'ONE SINGLE OBJECT' rule.\"\n    }\n  },\n  \"8da42a5347504da3a6307f13c73c3801\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, likely granite, with good texture and quality. It is suitable for physics simulation.\"\n    }\n  },\n  \"8e1daff699ed44e39ba808c8d0325032\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains both a rock and blades of grass, violating the requirement to depict only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"8ed55e2fb76a4c2a99699429a0fee918\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three rocks), whereas the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"8ed6cd99834b4c6eb107a47d3ae92415\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a pile of many small pebbles or gravel, not a single distinct rock object. While it contains rocks, it doesn't fit the requirement of representing one single object for physics simulation purposes.\"\n    }\n  },\n  \"9020af4538d24453b10d973ad91a3c39\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks (rubble), which fits the requested class. The quality is acceptable, and while it's multiple objects, a pile of rocks is a common and useful configuration for physics simulation in games.\"\n    }\n  },\n  \"90afa9c59c10419ab9aa08a2e6732bc4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it's a suitable object for physics simulation in a game environment.\"\n    }\n  },\n  \"90b511f3ed624a7096da6a0291c7cbdf\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture, making it difficult to identify the object as a rock or determine its material properties. The contrast between the object and the background is very low.\"\n    }\n  },\n  \"9123b2be54734f0d8ae50113649dd016\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects (a sphere and a flat piece), not a single object as required. The shapes also appear somewhat artificial for the 'rocks' class, especially the perfect sphere.\"\n    }\n  },\n  \"916dba30a5b641b088539ba785c1df3f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class. The image quality is good, and it shows a single object suitable for use as an environmental asset in a game where physics simulation might be relevant (e.g., collision, stability).\"\n    }\n  },\n  \"91cc6361837249a8b5e265e220fd002b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation or stack of stones, which fits the requested class. The quality is acceptable, and it represents a single object suitable for physics simulation in a game.\"\n    }\n  },\n  \"93467d6534cb403ca0c083b396d2dbce\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a rock. It is unusable due to being too bright or potentially corrupted.\"\n    }\n  },\n  \"935f9b6bc42144d4a1a5df6749ac4a41\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is acceptable for training purposes and the object is suitable for physics simulation.\"\n    }\n  },\n  \"94112f1c65d34ec79cd59813dea247f8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly slate or obsidian), which belongs to the requested class. The quality is good, and it's suitable for physics simulation training data.\"\n    }\n  },\n  \"946b521e27184b73b50e70a5c8994028\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a constructed pillar made of stone/brick, not a natural rock, boulder, stone, pebble, or geological formation as defined by the class list.\"\n    }\n  },\n  \"948de57d4f7c439686d83cc26fb83c79\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple objects (rocks and plants) rather than cleanly depicting a single rock object.\"\n    }\n  },\n  \"94a4036264384748b21707d65815ccba\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good (clear, well-lit), and it contains only the target object. It is suitable for physics simulation.\"\n    }\n  },\n  \"94c54803bbc0458c8406ca70baccd3e9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a low-polygon representation of rocks or a rock formation. It is well-lit, not blurry, and shows a single object suitable for the requested class. While low-poly, it is recognizable and could be used in stylized game environments or as a base for physics simulation.\"\n    }\n  },\n  \"963c2a84130e487ab89157fb647d0a2f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large geological formation which includes not only rocks but also significant vegetation (trees) and a building. This violates the requirement for depicting cleanly ONE SINGLE OBJECT. Furthermore, such large formations are typically static environment elements in games, not objects subjected to dynamic physics simulations like dropping or swaying.\"\n    }\n  },\n  \"96669da4fe0f4ca7a6ea649af4f0f2ac\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large geological formation (a cliff/hillside) with significant vegetation (trees, bushes). While it falls under 'rock formation', it's more like a piece of terrain than a single discrete object suitable for dynamic physics simulation (like dropping a rock). It also contains multiple elements (rock, soil, vegetation), not just a clean representation of a rock object.\"\n    }\n  },\n  \"9716e7726ce04bdc83dfd4990842e663\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows paving stones or bricks arranged into a path section and individual pieces, not natural rocks, boulders, or pebbles as defined by the class. It represents processed construction materials rather than natural geological formations.\"\n    }\n  },\n  \"972cca32466c4871ac57edd9037e5372\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene or terrain section with multiple pebbles/stones forming a ground cover and a wall structure, not a single, distinct rock object suitable for individual physics simulation as requested.\"\n    }\n  },\n  \"9853a5ee75074ea8b7a7d18e6228ea52\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large terrain segment or landscape piece, not a single, discrete rock object like a boulder or stone. This scale of object is generally not treated as a single entity for dynamic physics simulations (like dropping or material deformation) in game development.\"\n    }\n  },\n  \"986a18899dcf4122a7aa0d202fd20914\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation, which belongs to the specified class. The quality is good, and such formations are common in game environments where physics simulation might be applied (e.g., collision, destruction).\"\n    }\n  },\n  \"9886c9a09e3440818532f93b21c50344\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and resolution. It is suitable for the 'rocks' class and appropriate for physics simulation training.\"\n    }\n  },\n  \"98cfb014188245a984d174c294a494b7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"997f9775ee1d475abf22a51aed61c1b2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"9bbaace22d4b491784cce5e641301351\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (specifically resembling granite) against a clean background. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"9c42ca8140994bfca5029cf61b431214\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"9e1db6e63e2a4f9abea841c18334ff09\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flat terrain surface or texture, not a distinct, single rock object (like a boulder, pebble, or stone). It's unsuitable for training physics parameters for individual rock objects.\"\n    }\n  },\n  \"9e3435fd17f3454e929395a7eba14f54\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single stone/rock against a clean background. The quality is good, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"9eeb255ab3e041678ff66f52fb51128d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (the rock, the base it's sitting on, a coin, and paper) instead of just the single rock object.\"\n    }\n  },\n  \"9f149f722412421eb07fabd66b9a521a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a significant patch of grass attached to the base of the rock, violating the requirement to depict only ONE SINGLE OBJECT cleanly. While rocks are often found on grass, for physics simulation data, we need the isolated object.\"\n    }\n  },\n  \"9f63c64b2c27411d98ea442b78546451\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects arranged in a grid, not a single object or a natural formation. We require images depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"9fa361cea69d4c3681e3a518661c5712\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image includes a significant portion of the surrounding ground (dirt, roots, debris) integrated with the rock, making it not an image of a single, clean object as requested for physics simulation training.\"\n    }\n  },\n  \"9fa7eca826b34a87aefaa121d8356109\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object depicted does not resemble any type of rock, stone, boulder, or natural rock formation. It looks more like a stylized vase, goblet, or pedestal.\"\n    }\n  },\n  \"a0ae20ffa1fe4baca80d8f9eec673a08\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class terms. The image quality is good, and the object is suitable for use as an environmental prop in a video game and potentially for physics simulation (e.g., as a static collider or destructible object).\"\n    }\n  },\n  \"a19877953c284d5690f8a17ca9cd9ccf\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a man-made object (bollard or pillar), not a natural rock, stone, or geological formation as specified by the class description.\"\n    }\n  },\n  \"a2121e984fc143849389daed9cd3b68b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a shard or fragment of rock (like slate or part of a larger formation). The quality is good, and it fits within the requested class 'rocks', especially considering terms like 'rubble' and 'rock formation'. It's suitable for physics simulation as a piece of debris or a small environmental element.\"\n    }\n  },\n  \"a297586cb2e14f46922085b5a6058a69\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a29f3c59028a49d5bad6c3d00ee65370\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object identifiable as a piece of rock or stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a3c40d02b0c54cd5adc6788af69c2c10\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation, which falls under the specified class. The quality is good, and it's suitable for use in a game environment where its physical properties (like collision) would be relevant.\"\n    }\n  },\n  \"a3cad7e414d0491b890153f316fd7c0a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock with good lighting and clarity. It fits the requested class and is suitable for physics simulation.\"\n    }\n  },\n  \"a3db6dd1c31b4c63a8ce372d470bdf5d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, not a single object as required.\"\n    }\n  },\n  \"a4064bb86a5d468b9293656ceefeea31\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains significant rendering artifacts or texture stretching at the bottom, making it low quality for training.\"\n    }\n  },\n  \"a470d6acb10547c39d7c59663ee6fc17\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two rocks and a patch of ground) rather than a single, isolated rock object, which is preferred for learning individual object physics.\"\n    }\n  },\n  \"a478022f6bd04c65ae5d1761a28f8336\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock or stone fragment, which belongs to the specified class. The quality is acceptable, and the object is isolated against a clean background (ignoring the small artifacts which are separate from the main object). It represents a type of rock suitable for physics simulation in a game.\"\n    }\n  },\n  \"a47f75feda314a418e5228a1a4df35be\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of rocks/boulders, which falls under the 'rock formation' category within the specified class. The quality is adequate, and it represents a common object used in game environments and physics simulations.\"\n    }\n  },\n  \"a4f45addb72548dd9eded3f6e4a42661\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"a5f2261e60b44cdc840a558052f9fd66\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"a680f332c42543f68d679fa593082a53\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be interpreted as a stylized rock or stone, suitable for a game asset. The quality is good, and it fits the class definition, allowing for diverse textures.\"\n    }\n  },\n  \"a80b36a2f84749ba99f45de4f8220309\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is adequate, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"a8109c02067d46409ef4f2c6abc130e9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object's shape is too regular and artificial, resembling a man-made pillar or bollard rather than a natural rock, stone, or boulder, making it less suitable for the general 'rocks' class.\"\n    }\n  },\n  \"a854931cd87f443ab24c0f9cfbf01dd8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (likely granite) with good texture and lighting. It is suitable for the 'rocks' class and appropriate for physics simulation training.\"\n    }\n  },\n  \"a8aa352a1c8342a6bd3d8fd0d7e34581\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a rock.\"\n    }\n  },\n  \"a9f41ef93a0642fba3f972851bd80368\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a structure made of stone blocks, which falls under the 'stone' or 'rock formation' category. The quality is good, and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"aa01956c0060427a98d010ca6b595e58\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation of acceptable quality, suitable for the specified class and potential use in physics simulations.\"\n    }\n  },\n  \"ab69b6eb968244ad8d16a6f04c6bdbd9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a sticker with numbers on the rock, which is an extraneous element not suitable for training data representing natural rocks.\"\n    }\n  },\n  \"ab7c523c027640fca2df756915384e0f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fragment of a larger rock formation or landscape scan, rather than a clearly defined single object like a rock, boulder, or stone. It looks like an incomplete piece of terrain, making it less suitable for representing a distinct object for physics simulation.\"\n    }\n  },\n  \"ac4a7e9ac5804bcba7d43945aec18d6c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone formation. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"ada7f063d34548338ed477c825054685\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object identifiable as a rock or stone, fitting the specified class. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"adbc195285d7469e9d51bd088003659c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"ae1fd1caa7654592a4a9cfff9decc957\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation integrated with a patch of ground covered in many smaller pebbles and sand, rather than a single, isolated rock object. This violates the 'ONE SINGLE OBJECT' requirement.\"\n    }\n  },\n  \"ae89a3a1755844cab669229ef6e5e442\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object. It appears to be either blank or extremely overexposed.\"\n    }\n  },\n  \"aea4db45fb944e799f19c6428e014637\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, not a single object as required by the instructions.\"\n    }\n  },\n  \"af242934b2324ff6afd77eb2660940ca\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is ambiguous. While parts of it might resemble rock (especially the ends), the central section looks more like wood or a branch. It does not clearly depict an object solely belonging to the 'rocks' class.\"\n    }\n  },\n  \"af4de0c78f15414195c3754cb5957800\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the rock object along with a significant patch of ground/terrain attached to it, violating the requirement to depict only a single object from the specified class.\"\n    }\n  },\n  \"b03c15db5f004893ae91cf203b1ed778\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of rocks (rock formation), which belongs to the specified class. Although there are small tufts of grass, they are minor additions and the primary object is clearly identifiable as rocks. The image quality is good, and rocks are suitable objects for physics simulation in games.\"\n    }\n  },\n  \"b1ea917a0cab4fc9abf56aea51bd569e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good quality and lighting. It is suitable for use in physics simulations.\"\n    }\n  },\n  \"b278690b3e824f368ed0c22991c9a471\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone object against a clean background. The quality is good, and it's suitable for the 'rocks' class and physics simulation purposes.\"\n    }\n  },\n  \"b36fc9f64e6e4e4f879c51f251c939c0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, featuring numerous visual artifacts (pink lines/wireframes) that obscure the object. The color and texture are highly unrealistic for any type of rock, making it difficult to identify the object class clearly and unsuitable for physics simulation training.\"\n    }\n  },\n  \"b3b5c9781b59481fb96946583449ce87\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"b3e40cfb2095482b87dfce4a18e02017\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image has a rendering artifact or texture issue on the lower part of the rock, appearing as a semi-transparent overlay or incorrect texture application. This compromises the quality and clean depiction needed for training data.\"\n    }\n  },\n  \"b417a759eb26437fab1d64e72bf5a766\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object of acceptable quality, suitable for the specified class and physics simulation.\"\n    }\n  },\n  \"b41836aa047048ad80035ecb5f8a8ef6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a collection of rocks/pebbles forming a single chunk or piece of rubble/ground. The quality is good, and it represents a type of object commonly found in game environments that would require physics simulation (e.g., collision, gravity).\"\n    }\n  },\n  \"b45a40fd145c4b9ba7bc5351d344db17\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, whereas the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"b570650c1c274444853aba290ada0fc6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone of appropriate quality and isolation, suitable for physics simulation training.\"\n    }\n  },\n  \"b571ade4a4ca4a15b578029745d3cd64\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a rock or stone. The quality is good, and it is suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"b5a88f1c92f54d389ba67a132cb34c47\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image includes the rock object but also a significant portion of the ground (grass/dirt) it is sitting on, which is part of the 3D model. We need images of the object isolated for physics simulation training.\"\n    }\n  },\n  \"b63391e583d04a2aadb218db3e1e8687\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a block representing stone, which falls under the 'rocks' class. Although stylized and pixelated (like from Minecraft), it represents a single object suitable for physics simulation within games using a similar art style.\"\n    }\n  },\n  \"b6d703647beb45b58a54dd4bb3999453\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a rock formation, grass, and a bird) rather than cleanly depicting a single object from the 'rocks' class.\"\n    }\n  },\n  \"b6d97cfec8464046ac9c64f726f44b41\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a piece of rock or stone. The quality is adequate, and it represents an object suitable for physics simulation in a game environment (e.g., rubble, debris).\"\n    }\n  },\n  \"b740cfea80f24b38920039d72ea13b9d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks (rubble), which belongs to the specified class. The image quality is good, and a pile of rocks is a common object type used in game environments and physics simulations.\"\n    }\n  },\n  \"b74b4a44837644a3bba5d02fa3ca59c3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image displays multiple separate rock objects, not a single object as required.\"\n    }\n  },\n  \"b7ccc1907d2f468a87c0fc7868b4330f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single rock/stone against a clean background. The quality is acceptable, and it represents an object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"b8a31a762f544d04ae2dd3514ef0fe54\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat plane textured with pebbles/rubble, representing a ground surface or material texture rather than a single, distinct rock, boulder, or stone object. We need images of individual objects for physics simulation training, not surface textures.\"\n    }\n  },\n  \"b8d7ea9d15bc4ef287904de12f1d4466\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a rock or related item.\"\n    }\n  },\n  \"b98a595b53834521925101f6d01d4086\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object with good quality and lighting. It is suitable for physics simulation training.\"\n    }\n  },\n  \"bad36a83f09047538bae66c1b8115538\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically looks like slate or a flat stone). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"bb5c2170a9b7423abfb8f3f162c8c8de\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a hammer resting on the rock, violating the rule of depicting only ONE SINGLE OBJECT belonging to the target class.\"\n    }\n  },\n  \"bbc4cba22a32429e99d7e539b21b928f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple blocky, geometric objects that resemble man-made construction debris or cut stone rather than natural rocks or stones. It does not clearly depict a single object representative of the 'rocks' class in a natural form.\"\n    }\n  },\n  \"bc19ae33bed8429bb386f5d47912d31b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality against a clean background, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"bc2dab45170346719a87effce5f8d232\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, especially around the base and background, making it difficult to clearly discern the details of the object. This compromises the image quality needed for training data.\"\n    }\n  },\n  \"bca05a88c6d243bfab9494468045156b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a main rock object, but it is presented on a base composed of many smaller rocks and pebbles, violating the requirement for depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"bcc398878b2b4808a77691f8915b0b1a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock against a neutral background. The quality is good, and it's suitable for representing a rock/stone in a physics simulation.\"\n    }\n  },\n  \"bd20d8072df34b37a88c7447ca2ddbc3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of terrain with grass and two rocks embedded in it, not a single, isolated rock object. We need images of individual rocks for physics simulation training.\"\n    }\n  },\n  \"bd6b1dbc179448479ae2c4c27879f219\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good (clear, well-lit), and it represents an object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"bd72e7eeeba5469989d0d1ce49f18c2d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made structure (a section of a pillar or wall) constructed from stones, rather than a single, natural rock, boulder, or stone formation. While composed of rock material, it doesn't fit the typical definition of the requested class items for individual object physics simulation.\"\n    }\n  },\n  \"bd7ae3c82a294b67b95510bc78b9cbc0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is adequate, and it's a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"bdeb4bf143a94fc783001673573916a2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very simple geometric shape that does not resemble any object from the 'rocks' class (rock, stone, boulder, etc.). It lacks natural texture and form.\"\n    }\n  },\n  \"be1693f490754ecfafd39b03be0854b0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a structure made of rocks/stones, which falls under the 'rock formation' or 'rubble' aspect of the class definition. While it's not a single natural rock, it is a single, distinct asset composed primarily of rock material, suitable for representing ruins or environmental elements in a game. The image quality is adequate.\"\n    }\n  },\n  \"be2707a6e2f745ff9fd5d336e8295854\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene, possibly an archaeological site or landscape feature, containing earth, grass, and some rock structures integrated into the terrain. It does not show a single, distinct rock, stone, or boulder as required for the dataset. This is more of a terrain piece than an individual object suitable for physics simulation.\"\n    }\n  },\n  \"be48ce63441244789d48bddb9d21a6b4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object belonging to the 'rocks' class (specifically, a stone or piece of rock). The quality is good, and it's suitable for use in physics simulations.\"\n    }\n  },\n  \"be6f60278434439b84e4453b8522a1df\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"bf3dbbd47dac4fb68feb899abcbf2dac\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object (possibly a crate or part of a mechanism), not an object belonging to the 'rocks' class.\"\n    }\n  },\n  \"bf74935f5934465c97b4d4014fa39e30\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone. The quality is acceptable, and it's suitable for use in physics simulations.\"\n    }\n  },\n  \"bfed36b638984a978fe1c833030f89f6\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone with good lighting and texture detail, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"c01527384d4e4037a71cd257931f2711\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of pebbles/small stones, which falls under the 'rocks' category (specifically 'pebble', 'rubble', 'stone'). The image quality is good, and while it's multiple objects, a pile like this can be treated as a single entity for physics simulation purposes (e.g., simulating granular material).\"\n    }\n  },\n  \"c029549f93a84426921be507cee9d6d1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct rock objects, violating the requirement to depict only ONE SINGLE OBJECT per image.\"\n    }\n  },\n  \"c05511b5db234ec79e35d29b7eb370d0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the 'rock' or 'stone' description within the specified class. The quality is good, and it's isolated against a neutral background, making it suitable for the dataset.\"\n    }\n  },\n  \"c0a550e692ac441faac5f0142f5133f1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation, which belongs to the specified class. The quality is good, and it is suitable for use in physics simulations as a static or potentially destructible environmental object.\"\n    }\n  },\n  \"c117f1923cad4ecf9df61b6e3d633374\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks (rubble), which falls under the specified classes. The image quality is good, and this type of object is suitable for physics simulation in a game environment (e.g., scattering, collision).\"\n    }\n  },\n  \"c1a5080b4b904d8abb7b25e51a7655f3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the requested class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c1dc407c7db74103b93f6348996fd5f1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The 3D model render appears fragmented and incomplete, with jagged edges and missing parts. This indicates a low-quality asset not suitable for training.\"\n    }\n  },\n  \"c29fbdd8a8f341c4a395c6eae746d438\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock-like object shaped like a skull or fossil, not a generic rock, stone, or boulder. This specific shape makes it less representative of the general 'rocks' class.\"\n    }\n  },\n  \"c2c36e6434214e12ba7833c55e8599fa\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock, but it has additional, non-rock elements (glowing crystals) attached to it. This violates the requirement for the image to cleanly depict ONE SINGLE OBJECT belonging to the specified class (rocks).\"\n    }\n  },\n  \"c2fe1ed9da13430389424af3541d4afd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of terrain or landscape, not a single, discrete rock, stone, or boulder. While it contains rocky elements, it represents a piece of ground rather than an individual object suitable for typical physics simulations like dropping or rolling.\"\n    }\n  },\n  \"c314145427674c9dbd53018e1381dfbd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of ground with various elements (soil, moss, small rocks, potentially wood/pipe) rather than a single, distinct rock, boulder, or rock formation. It looks more like a terrain scan, which is not suitable for learning the physics of a single object from the 'rocks' class.\"\n    }\n  },\n  \"c389f766b289442ab787dd97c02b6e20\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fragment of terrain or landscape, not a distinct rock, stone, boulder, or rock formation as required by the class definition.\"\n    }\n  },\n  \"c42924a36a904ba69769b38f903fbe3e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely washed out and too bright, making it impossible to clearly identify the object or its details. It does not provide useful visual information for the 'rocks' class.\"\n    }\n  },\n  \"c4ca60d37cd448ee8c1206f4ad31bece\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rock' or 'stone' class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"c58949d0e11c482f9e2fe4f07f88667c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground covered in small pebbles/rubble, rather than a single, distinct rock, boulder, or stone object suitable for individual physics simulation. It also contains an ambiguous, potentially man-made object. The overall quality is also somewhat washed out.\"\n    }\n  },\n  \"c67ef906331c438384f96c85a397c065\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of pavement made of stones, not a single rock, boulder, or natural rock formation. This is not suitable for simulating the physics of an individual rock object.\"\n    }\n  },\n  \"c68d700c74f24e69ae4a73b8146f7fd8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good quality and texture, suitable for physics simulation.\"\n    }\n  },\n  \"c7081adaf7f1436ab22d9f71f9912981\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made pillar or column constructed from stone blocks, not a natural rock, boulder, pebble, or geological formation as specified by the class list.\"\n    }\n  },\n  \"c775885695c44936ad00ca6ac54f4cc0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an architectural pillar, which is a man-made structure, not a natural rock, stone, boulder, or geological formation as defined by the class list.\"\n    }\n  },\n  \"c7bc16708bf94eb98d56fe90ae9ac0e7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized pillar or column, which is a man-made structure, not a natural rock, boulder, stone, or geological formation as specified in the class list.\"\n    }\n  },\n  \"c7d3a3a246fe456bbd228cdd4a490465\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large terrain piece or landscape section, not a single, distinct rock, boulder, or similar object suitable for individual physics simulation as requested. It represents static environment geometry rather than a dynamic object.\"\n    }\n  },\n  \"c7e7d88fbb564489a01d3b5e0053c776\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/boulder, which belongs to the specified class. The quality is adequate for training purposes, and it represents an object commonly used in physics simulations.\"\n    }\n  },\n  \"c7e9384d01e544c0ae11d06938bb3a4c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made pillar or pedestal, which is a structure made of stone, not a natural rock, boulder, or stone as defined by the class list. It does not fit the category of natural geological formations or simple rocks.\"\n    }\n  },\n  \"c8b6d80ece6f46e6b763939d4f3f8f0b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a polished stone or pebble. Although it's egg-shaped and smooth, it falls under the 'stone' category and is suitable for physics simulation (e.g., rolling, dropping). The image quality is good.\"\n    }\n  },\n  \"c8d3ffe1917a471aaa8cdc3f7888d6a0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks/rubble, which falls under the specified class. The image quality is good, and this type of object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"c92daf65f88c437aa8094f8163340a8f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of stone pavement or flooring, which is a structure made of multiple stones, rather than a single discrete object like a rock, boulder, or pebble. While it contains stones, it doesn't represent a single object suitable for learning the physics of an individual rock.\"\n    }\n  },\n  \"c992f1f7638f4fb49f5a5ee40f956f1b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains stickers/labels attached to the rock, which are extraneous objects and not part of the natural rock itself. We need clean representations of the objects.\"\n    }\n  },\n  \"cb2b61bcba2e4c33bf707a51576987c9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"cd56279e12d242f9a962bcd603a02a26\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a rock or stone. Although the texture is very basic and dark, the shape is recognizable and suitable for the class. It is appropriate for physics simulation.\"\n    }\n  },\n  \"cd83730bd4944fbf918d7f712ed026eb\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, washing out details, especially on the white objects. Additionally, it depicts multiple stylized objects (potentially crystals rather than typical rocks) on a base platform, not a single clean object from the 'rocks' class.\"\n    }\n  },\n  \"cd97675c2c7e47a0826622a68750d85e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"cdd642c6d7f94733a1a2be728c6cebdb\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly slate or a similar type) against a clean background. The quality is good, and it is suitable for physics simulation purposes.\"\n    }\n  },\n  \"ce0e8eec24e64d6e9f39b227db40f750\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts very low-polygon shapes lacking any texture or detail, making it difficult to definitively identify as rocks and representing a low-quality asset unsuitable for training.\"\n    }\n  },\n  \"ce108b4403a348679ecc5661740569c2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the dataset and physics simulation.\"\n    }\n  },\n  \"ce32116968e54f1d8c5adb1acac8035a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The image quality is good (clear, well-lit) and it represents an object commonly used in physics simulations within video games.\"\n    }\n  },\n  \"cea1b61f14e34588b33196de72af8983\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation, which falls under the specified class. The quality is good, and it represents a single, cohesive object suitable for use in a game environment and physics simulation.\"\n    }\n  },\n  \"cf4828d135704058b69e9727f7f4c967\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"cf9544d1da0c40729a6583d02260b376\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically a rock or stone, possibly containing a fossil). The image quality is good, and it is suitable for use in physics simulation training.\"\n    }\n  },\n  \"d0176b4c899d449cb8f91ed52f356b1c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white space and does not clearly depict any object, making it impossible to identify if it belongs to the 'rocks' class or assess its quality.\"\n    }\n  },\n  \"d020c6228d6f4c44b6b46478b82f9bb7\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple distinct rock objects, not a single object as specified in the instructions.\"\n    }\n  },\n  \"d07e551992d34f98a74242c6c8fd66b3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"d08dc73787974841ad8ab3e7b2ad3c0b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple very small, low-detail objects that are not clearly identifiable as rocks or any related class. The image quality is poor due to the lack of detail and small size of the objects, and it violates the single object requirement.\"\n    }\n  },\n  \"d0b960ffa78d429cb9fdb13412406126\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts rocks/a rock formation, which belongs to the specified class. The quality is acceptable and it represents an object suitable for physics simulation in a video game.\"\n    }\n  },\n  \"d0c5a297eff04e35b3c49ca6b4b0a740\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that belongs to the 'rocks' class (specifically, a stone or rock, possibly with snow/ice). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d0dbfb23e9e748429b181eb19ead5e85\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of rocks, which falls under the specified classes. The quality is good, and it represents a single cohesive object suitable for use in a video game environment and physics simulation.\"\n    }\n  },\n  \"d152f2ea2940414e9aafb0e9d65e784a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object made of stone, resembling a stylized pillar or block. While not a natural rock, it falls under the 'stone' or 'rock formation' category in a broader sense suitable for game assets. The quality is adequate, and it represents an object commonly used in physics simulations within games.\"\n    }\n  },\n  \"d1f5788227684084a6a591486cd4e005\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks (rubble), which falls under the specified class terms. The image quality is good, and a pile of rocks is a suitable object for physics simulation in a game environment, either as a static prop or potentially destructible.\"\n    }\n  },\n  \"d2bdda6a4b9c4a70a02c3412ed5cb6ba\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (granite) with good quality and is suitable for physics simulation.\"\n    }\n  },\n  \"d2f4782380a34c3fb01544cadb5f391e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a carved stone monument or stele, which is a man-made object. While made of stone, it does not represent the natural forms like 'rock', 'boulder', 'pebble', or 'rock formation' typically associated with the class.\"\n    }\n  },\n  \"d5190b2aa7ec4cbf8d13df86f82a7e99\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object looks more like a crystal formation or mineral cluster rather than a typical rock, stone, or boulder. The shapes and colors are highly stylized and not representative of the general 'rocks' class for physics simulation purposes.\"\n    }\n  },\n  \"d5603cfcc8d0427a912520077dbda3b4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rubble/broken rocks (slate), which falls under the 'rocks' category. The image quality is good, and the object is isolated. A pile of rocks is a suitable object for physics simulation in a game environment.\"\n    }\n  },\n  \"d575c4abbbfb4f07883a3f91031bd298\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation with moss, which falls under the specified classes. The quality is good, and it represents a common type of object found in video game environments suitable for physics simulation (e.g., as a static obstacle or potentially movable object).\"\n    }\n  },\n  \"d5dab993eafe48cd8e83535d35eebc88\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a large rock, but it has a base of smaller pebbles and dirt attached, which means it does not depict cleanly one single object.\"\n    }\n  },\n  \"d742b51375904ac1b48a0e4b8265e86f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, futuristic pillar or pedestal, not a natural rock, stone, boulder, or any other item listed in the 'rocks' class definition.\"\n    }\n  },\n  \"d76e83f2446e4a07a0a620f2ee0d821b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a large stone/rock formation, which belongs to the specified class. The quality is acceptable. While it includes a small patch of ground at the base, this is integral to how such a large stone would naturally sit and does not detract significantly from the main object. It represents a common type of object used in game environments and suitable for physics simulation.\"\n    }\n  },\n  \"d81ccf4255d949cfbdc14695d2dfa990\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains the target object (a rock), but it also includes a distinct ground patch underneath it and a small white object (possibly debris or a label) on the patch. This violates the requirement to depict cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"d82c30f897914892a645c8bdd6e68b8e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a man-made stone pedestal, not a natural rock, boulder, or geological formation as described in the class list. While made of stone, it's a specific architectural object rather than a general representation of the 'rocks' class for environmental assets.\"\n    }\n  },\n  \"d8da0015419140a58662a7b3b750145f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image appears to be a piece of wood (like driftwood or a root), not a rock or stone. It does not belong to the specified class.\"\n    }\n  },\n  \"d8ff1bbe54d9405bb70d9da6c4940187\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone against a clean background. The quality is good, and it fits the 'rocks' class. It represents an object suitable for physics simulation.\"\n    }\n  },\n  \"d93706647a3c472798b20d7c11292844\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that is recognizable as a rock or mineral, fitting the 'rocks' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d94e028aa26b46e7a07dc3074bfe153c\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits within the 'rocks' class (specifically resembling coal or obsidian). The quality is good, and it's suitable for use in physics simulations within a game.\"\n    }\n  },\n  \"d9a7f67b0da142649d8f8e1d66d30a7f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of pebbles/small stones, which falls under the 'rocks' class (specifically 'pebble' or 'rubble'). The image quality is adequate, and it represents an object configuration relevant for physics simulation in games.\"\n    }\n  },\n  \"daa45aac70ef48f3ab679abb9ad35840\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"dab8b7b2c7d44eff903a95cc6537b502\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains significant vegetation growing on the rock formation, violating the requirement to depict only a single object class (rocks).\"\n    }\n  },\n  \"db693c07512d4d2d8b6bc944b23b1591\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple distinct rocks/pebbles, not a single object as requested by the guidelines.\"\n    }\n  },\n  \"dcb0a3dfd3164694ab34565253965a23\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains additional elements besides the rock, specifically a base platform and small markers/supports, which are not part of the rock object itself. We need clean images of single objects.\"\n    }\n  },\n  \"dd34f06465d9432ca2876a74253263d1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of rocks/rubble, which falls under the 'rocks' category (specifically 'rubble', 'pebble', 'stone'). The image quality is good, and it represents a single cohesive object suitable for a game environment and physics simulation (e.g., as a static collider or destructible object).\"\n    }\n  },\n  \"ddbfa7aa632b4186a1cd2a04845fbba5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several rocks and a patch of ground), not a single, isolated rock object as required for training.\"\n    }\n  },\n  \"decefdf38ccd473e8005c21d71973ae2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains the target object (rock) but also includes a wooden block underneath it, which is an extraneous object not belonging to the 'rocks' class. We need images depicting only the target object.\"\n    }\n  },\n  \"defc2a19f3b54507b1579dfd5b966b58\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it very difficult to clearly identify the object or its details. It does not clearly depict a rock or related object.\"\n    }\n  },\n  \"df6174edd31a439f874d1fc54a3adf77\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple rocks displayed on shelves, along with parts of the surrounding structure (shelves, wall, floor). We need images depicting only a single rock object.\"\n    }\n  },\n  \"dfb6533fbe6e4df8ada0c2312a07be01\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rock formation or pile of rubble, which falls under the specified class terms. The quality is acceptable, and it represents a single cohesive object suitable for use in a game environment and potentially physics simulation as a static or partially destructible object.\"\n    }\n  },\n  \"e11180c2d4624333862b2314f00b0101\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"e133f6d43eea43ed8fe8951118622c70\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (possibly flint or chert) with good quality and lighting. It fits the requested class and is suitable for physics simulation.\"\n    }\n  },\n  \"e1d8c2eac6774e818d7609637feab615\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (a rock/stone, possibly slate) belonging to the specified class. The quality is good, and it's suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"e287a5dadfaa4af7ae5c8deb64360d93\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object (possibly slate or a flat piece of rock) against a clean background. The quality is good, and it fits within the 'rocks' class. It could be used in a physics simulation.\"\n    }\n  },\n  \"e2a0314f8b8b4bfca59010d98984860b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains additional, unrelated objects (three grey squares) besides the main rock object.\"\n    }\n  },\n  \"e2f3025bc1a54d2391e156dbd65c5bd1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"e3ff46eac4d247d287f36a3115f52bed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows very low-polygon, untextured shapes that lack the detail and realism expected for rocks or stones in a game asset. They look more like placeholder geometry than actual rocks.\"\n    }\n  },\n  \"e42e9b723b3f4c74bc4bd5810d772a4e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"e489759082084c8d8dd1be32ac60edc4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor (appears washed out/overexposed) and the object's texture and pure white color do not clearly resemble any type of rock or stone. It looks more like styrofoam or plaster.\"\n    }\n  },\n  \"e820660d824045d28befc8d03bbbbabd\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the specified class and physics simulation purposes.\"\n    }\n  },\n  \"e852e1f3b508441aa9aeac0031c59d2b\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it's suitable for physics simulation training data.\"\n    }\n  },\n  \"e8b06f63b882483bbc20a6e56f181fee\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is very low-poly and lacks any realistic rock texture. It appears overly smooth, almost like plastic or untextured metal, and has a distinct horizontal line artifact across the middle, making it low quality and not representative of a rock for physics simulation training.\"\n    }\n  },\n  \"e935a568f9af46ddafbfe31ed1c360bf\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object resembling petrified wood, which falls under the category of rock/stone/geological formation. The image quality is good and it is suitable for physics simulation as a rock-like object.\"\n    }\n  },\n  \"ea11069c86ce410d8c8e7423d87344de\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex rock formation or a piece of terrain/environment, not a single, distinct rock object suitable for individual physics simulation as requested.\"\n    }\n  },\n  \"ea23d674b9ab4dab9b46ba7af34b3563\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (three rocks), while the requirement is for images depicting cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"eaa11fada6db408d9fc50da5d498ae26\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple rocks integrated with a patch of ground (grass and leaves), not a single, isolated rock object. This makes it unsuitable for learning the physics parameters of an individual rock.\"\n    }\n  },\n  \"eac8c3841acf4fe5959d5977639cd6ed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone object against a clean background. The quality is good, and it fits the requested class. While there is some writing on the rock, it doesn't significantly detract from its identification as a rock and its suitability for physics simulation.\"\n    }\n  },\n  \"eb5e8153c59c4b659fbf231450918e1e\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"eb83d3a9c8ce4b04a7237a05735c3de3\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the 'rocks' class and physics simulation.\"\n    }\n  },\n  \"ecccc01a892340bdbf1c9fb629aa8d6f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a rock formation or a piece of rock. The quality is good, and it fits within the specified class definitions. It could represent a unique geological formation, adding diversity to the dataset, and is suitable for physics simulation.\"\n    }\n  },\n  \"ecef3acb23d748f69bb7f9ce19064d12\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and does not clearly depict any object, let alone one belonging to the 'rocks' class. It is unusable for training.\"\n    }\n  },\n  \"ecfc671832d34bd9a315643b7c3fcd25\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, the objects depicted are very small, blurry, and lack detail, making them unsuitable for high-quality training data. It doesn't clearly depict a single object or a well-defined group.\"\n    }\n  },\n  \"ed9c5bac7f234222971ced832c478cfc\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rock, but it is placed on top of another object (a textured surface resembling a map or ground patch), violating the requirement for a single, clean object depiction.\"\n    }\n  },\n  \"eda7cdacdb0849b398569bdaf3a8cf07\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single stone/pebble, which belongs to the 'rocks' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"eea799245f0a45aba7b69bf7488a8372\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"eecff4b887d244809c3a2e69a0f65ad4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains artifacts from the 3d model rendering process, specifically a ruler-like object and some ground/base elements attached to the rock, which are not part of the rock itself. We need clean images of only the object.\"\n    }\n  },\n  \"efd657fb409b4649bdf7adfdebb9ea8a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains extraneous objects (stickers/labels) attached to the rock, which are not part of the object itself.\"\n    }\n  },\n  \"efecc83b6845421ba172df253de731ed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone with good lighting and clarity. It is suitable for physics simulation training.\"\n    }\n  },\n  \"f003c25ec482479b9a305d25ac655c07\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fragment or a surface scan of a rock formation rather than a distinct, standalone rock object. It appears incomplete and too thin, making it unsuitable for representing a typical rock object in a physics simulation.\"\n    }\n  },\n  \"f0bbc6a1d1ed4d05a20ecb28b4a5bbf1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a texture applied to a cube, not a distinct object like a rock, boulder, or stone. It represents a surface material rather than a single object suitable for physics simulation.\"\n    }\n  },\n  \"f16422ecd1864b3daa3228eab5de4d9f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object from the 'rocks' class. It appears to be a fragment of an unrelated 3D model, possibly architectural, and is not recognizable as a rock, stone, or geological formation.\"\n    }\n  },\n  \"f1776a04f9fc4ed8b65335e126b44b9a\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a staircase or ramp structure, not an object belonging to the 'rocks' class (rock, stone, boulder, etc.).\"\n    }\n  },\n  \"f1a218ca7a044309975c24932c3be81f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"f1bde4f6a8784280948700c00adfdc20\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of good quality, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"f1cfbe1e98cd4584882d8b1e534ae6d0\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock or stone. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"f222406dcfd14df6857fa5769c4b4f06\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a structure made of rocks (fieldstone/rubble), which fits within the requested class 'rocks' and its related terms like 'rock formation' or 'rubble'. The quality is good, and while it's composed of multiple stones and includes some grass at the base, it represents a single cohesive object relevant for game environments and physics simulation (material properties, collision).\"\n    }\n  },\n  \"f234923b17d244c4a85c4deaa67fc9d5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of terrain with multiple rocks embedded in it, rather than a single rock object. Additionally, some of the rocks have stylized cartoon eyes, making them unsuitable for learning realistic physics parameters.\"\n    }\n  },\n  \"f387432baf8c4e5b8e713a94b1c12d33\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'rocks' class (specifically, it looks like a mineral or a type of layered stone). The image quality is good, and it is suitable for use in physics simulations.\"\n    }\n  },\n  \"f3b8914d4e4145d6aee509d91d4659c1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock object against a clean background. The quality is good, and it is suitable for use in physics simulations.\"\n    }\n  },\n  \"f44e739e19094236abec653e8fa70a8d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a man-made object (possibly a stool, table, or planter) covered in stone tiles, not a natural rock, boulder, stone, or geological formation itself. It represents a composite object rather than a single object from the 'rocks' class list.\"\n    }\n  },\n  \"f5000f45f7f14140b3258a7b6c2e1d49\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a rock/stone. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"f5d6a8aa1a164348aba8110261427a70\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock or rock formation with good texture and lighting. It is suitable for the 'rocks' class and appropriate for physics simulation training.\"\n    }\n  },\n  \"f607a0790d394d4b8f7962e5e5b2f3f2\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a sphere with a tile texture applied to it. While the tiles might be made of stone, the object itself is not a rock, boulder, pebble, or natural stone formation. It represents a material texture rather than an object belonging to the 'rocks' class.\"\n    }\n  },\n  \"f63da49ec506459fb3da095dcf4f3e45\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a man-made structure (pillar/marker on a base) made of stone or concrete, not a natural rock, boulder, pebble, or geological formation as requested by the class description.\"\n    }\n  },\n  \"f664b6d999094a179da3a94eb0b6507d\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock of acceptable quality, suitable for physics simulation.\"\n    }\n  },\n  \"f7e4461d94b14abd9cd4aa94ceee47b4\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains significant non-rock elements (plants/cattails) alongside the rocks, violating the requirement to depict only a single object from the specified class.\"\n    }\n  },\n  \"f8e9ac11cd244db6845d4fb8e0cc48d8\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"fa015203576b44dd9743d24d6c34b5e1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of terrain or a diorama containing multiple rocks, dirt, and small vegetation elements, not a single, distinct rock object as requested. It represents a collection or a ground surface rather than an individual item suitable for learning the physics of a single rock.\"\n    }\n  },\n  \"fa2d189ffe174cc9b76ed4651a1ad426\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains labels/stickers attached to the rock and some scale markers next to it, which are not part of the natural object. We need clean images of the object itself.\"\n    }\n  },\n  \"fa6e7102ab1f4d32b619ea1357548625\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock formation (possibly slate or a similar layered rock) against a clean background. The quality is good, and the object is suitable for representing rocks or geological formations in a game environment and could be used in physics simulations.\"\n    }\n  },\n  \"fbb61efa400e435ca70ea9688b56d848\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple rocks arranged into a formation. While not a single rock, 'rock formation' is listed as an acceptable class, and this structure is suitable for physics simulation (e.g., stability, being knocked over). The image quality is good.\"\n    }\n  },\n  \"fd1b21398b20498ebb460d55f613caed\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and detail, suitable for the requested class and physics simulation purposes.\"\n    }\n  },\n  \"fd3f20982b244a138700f65c83f2e0e5\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock with good lighting and texture detail. It fits the 'rocks' class and is suitable for physics simulation.\"\n    }\n  },\n  \"fdb21f6a67464dc88e7707ddad21e5b1\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (a large boulder, two stacks of smaller stones/cairns, scattered pebbles, and a sandy base) rather than depicting a single, clean rock object.\"\n    }\n  },\n  \"fe36b8f958cb4d89810784b339054c3f\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock (likely volcanic/pumice) against a clean background. The quality is good, and it represents an object suitable for physics simulation in a video game.\"\n    }\n  },\n  \"feba4a4b232e4e848df6a5a775eb26cb\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/stone, which belongs to the specified class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"ff2abd47ba324c5ea0d6187696bd5581\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of rocks, which falls under the 'rock formation' or 'rubble' categories within the specified class. The image quality is good, and it represents a typical object that would be used in a game environment and could be subject to physics simulation.\"\n    }\n  },\n  \"ff4cb7c8725b47648a031b5c61e5c6d9\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (five pebble-like items), not a single object as required. Additionally, the objects have a very low-poly, artificial appearance and unnatural colors, making them poor representations of natural rocks or stones for physics simulation training.\"\n    }\n  },\n  \"uyL2NeSCFfWKOcCgDxb0lMNosJW\": {\n    \"obj_class\": \"rocks\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rock/boulder belonging to the specified class. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"004746f9a00342298c89eab88c5203c5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground with visible roots and mud/dirt, fitting the 'snowy ground', 'snowy terrain', and 'snow patch' descriptions within the 'snow_and_mud' class. The quality is good and it represents a surface type relevant for physics simulation.\"\n    }\n  },\n  \"007846cc3c3942239e7250bc2e90b5ab\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mountain range covered in snow, which does not fall into the specified classes (tree, ficus, fern, or grass). It's also not a single object, but rather a landscape.\"\n    }\n  },\n  \"00bd5bc9e6204ae0bed45285cc369e7b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains other prominent objects (fire hydrant, signpost) in addition to the snow, violating the requirement for depicting primarily a single object class (snow/mud terrain).\"\n    }\n  },\n  \"0189846e10e04c1db0c11199b64b7582\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, flat snowflake object, not actual snow or mud as a ground cover or terrain feature. This is not suitable for learning the physics of snow/mud materials as intended for the class 'snow_and_mud'.\"\n    }\n  },\n  \"029c99a07b0942d894e63902ce8c6b86\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a vehicle (possibly an airboat or snowmobile) resting on a patch of mud. The focus is on the vehicle, not the mud itself, which violates the requirement of cleanly depicting an object from the 'snow_and_mud' class.\"\n    }\n  },\n  \"033e9356487346dabbf2ac61134bf236\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small hut or structure, not snow or mud or any related terrain type.\"\n    }\n  },\n  \"0353d5024d2d435695536283ca1e9bee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict snow or mud. It appears to be a very thin, possibly corrupted or side-view rendering of a character model, which is irrelevant to the requested class.\"\n    }\n  },\n  \"03aa327834ad426fa012221b73c964cb\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy ground surface with puddles, which fits within the 'snow_and_mud' class (specifically 'muddy ground', 'muddy surface', 'mud puddle'). The image quality is good and it represents a surface type relevant for physics simulation in game development.\"\n    }\n  },\n  \"0519589338e94a61af200ec4d3ccf52c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a wooden fence, not snow or mud as the main subject. While there is some snow present at the base of the fence, it's not the focus and doesn't represent the class 'snow_and_mud' cleanly as a single object or terrain type.\"\n    }\n  },\n  \"0526b7534a00488c85c52b43361eb8c0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a terrain map with mountains and valleys, but it does not depict snow or mud. It appears to be a grassy/rocky landscape.\"\n    }\n  },\n  \"05e2c9ebe0eb47a9abf6937668502044\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden ramp, not snow or mud. It does not belong to the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"06199abc515d4850ade002767c980256\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy surface or terrain, which falls under the 'snow_and_mud' class. The quality is acceptable for a 3D render and suitable for physics simulation purposes (e.g., interaction with characters or objects).\"\n    }\n  },\n  \"063b9dd9de154b2ba57eebd7b34a9766\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dry, rocky/sandy terrain, not snow or mud as required by the class description.\"\n    }\n  },\n  \"063f43d785d3454b96221f9d25875639\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which falls under the 'snow_and_mud' class. The quality is good, and it represents a type of surface relevant for physics simulation (e.g., character movement, object interaction).\"\n    }\n  },\n  \"0652a5e6a97647358e5c9e624593ce1a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image displays a texture that clearly resembles packed snow or a snowy surface, which falls under the requested 'snow_and_mud' class. The quality is good, and representing the material on a sphere is acceptable for texture/material evaluation.\"\n    }\n  },\n  \"0713df01c3fe4e29a0505824d129f894\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of dirty snow or slush, which falls under the 'snow_and_mud' category. The quality is good, and it represents a terrain type relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"0776c1d02a78485cb84493262538af37\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pot or container, not snow or mud or any related item from the specified class list.\"\n    }\n  },\n  \"07c40079b4554a6cbfda45733b9e6d51\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts patches of snow on grassy ground, which falls under the 'snow patch' or 'snowy ground' categories within the requested class. The quality is good and it represents a common ground surface type relevant for physics simulation in games.\"\n    }\n  },\n  \"07db419ee00f413f8199d8a1b25b586a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy/slushy ground, which fits the 'snow_and_mud' class. The quality is acceptable, and it represents a terrain type suitable for physics simulation (e.g., character interaction with the ground).\"\n    }\n  },\n  \"08b4443a71c94647a1298346a1ea1203\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snow globe, which contains artificial snow as part of a decorative scene. It does not depict natural snow or mud in a way that would be useful for learning the physical properties of snow/mud terrain for simulation purposes. The primary object is the snow globe itself, not the snow within it.\"\n    }\n  },\n  \"09545e8908f0490e95717a592cbb8d81\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract geometric structure, not snow, mud, or any related terrain/landscape feature.\"\n    }\n  },\n  \"09f5325b362b47dea38689945d2b0776\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mechanical object, possibly a motor or part of a vehicle, not snow or mud or any related terrain feature.\"\n    }\n  },\n  \"0a5d1788e96e44cd95b23d27dabbad4d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized terrain patch using contour lines and grayscale shading, resembling a topographical map rather than a realistic representation of snow or mud. It lacks the necessary visual texture and color cues to clearly identify it as belonging to the 'snow_and_mud' class.\"\n    }\n  },\n  \"0a7fb227e2c147178c576bdb6c1c5ea7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is an object made of snow, not snow or mud as a terrain feature or material patch as described in the class list (e.g., snowy ground, mud puddle). Additionally, the image is very bright and low-poly, making it low quality.\"\n    }\n  },\n  \"0a8857e486ef4653a9caf7708725737c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (cars, wall, street sign) in addition to the snow, making it unsuitable for isolating the properties of snow itself for physics simulation.\"\n    }\n  },\n  \"0b27facccf43428eaf1b15565bd48395\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a texture representing muddy ground or terrain, which falls under the 'snow_and_mud' class. The quality is good and suitable for representing a surface material in a physics simulation.\"\n    }\n  },\n  \"0c3c3c319e5745d9aae8e785828763c2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image is also of good quality and suitable for physics simulation.\"\n    }\n  },\n  \"0d4e92809c37470db7ea1875d83e6dbb\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a distinct object (a cube with a snowflake symbol) sitting on the snow patch. We want images that depict only the 'snow_and_mud' class cleanly.\"\n    }\n  },\n  \"0d8a08ab332b4c05bb57b3b9592cc3c4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to depict a chunk of ice or a small glacier fragment, not snow or mud as defined by the class list. While related, ice has different physical properties than snow or mud, making this image unsuitable for learning the physics parameters associated with the 'snow_and_mud' class.\"\n    }\n  },\n  \"0db8319e21d64a9bad999dcf8c417cc8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a segment of terrain covered in what appears to be dirty snow or slush, potentially mixed with mud or bare earth. This fits within the 'snow_and_mud' class, specifically aligning with terms like 'snowy terrain', 'slush', or 'dirty snow'. The quality is acceptable for training purposes, and representing ground surfaces like this is relevant for physics simulation.\"\n    }\n  },\n  \"0e28d3c6a40a4d24ae05a60167ff9068\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of terrain that clearly resembles wet mud or a muddy surface, which falls under the requested class 'snow_and_mud'. The quality is good, and it represents a surface material relevant for physics simulations (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"0fd731b5ef0f410db5f9acfa1f459255\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a suitcase, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"1003dc5d4f9848c8ac69496fc3525db6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of dirt/sand with grass and a concrete border, not snow or mud.\"\n    }\n  },\n  \"14273570277c4c7ab3520893616746f6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground with some exposed muddy or rocky terrain, fitting the 'snow_and_mud' class. The quality is good, and it represents a surface type relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"14dd2d57e5b64e94ae3e1c6e9709c180\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch or drift of snow, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and it represents a material relevant for physics simulation.\"\n    }\n  },\n  \"151bc74cf9f74da8b9eebd11ac87d5ee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple small, unrelated objects (like a tree, candles, parts of a snowman) rather than focusing clearly on snow or mud as a surface, patch, or terrain feature suitable for physics simulation.\"\n    }\n  },\n  \"169e182f2acd47a7b38f3ca364929a3e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a brick structure, possibly a chimney, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"16a4927c7d7d4b959168b2015901bdda\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized scene with multiple objects (trees, obelisk, star) on a flat white ground. While the ground might represent snow, it's extremely simplistic, lacks realistic texture or detail, and is not the primary focus. The image contains too many other distinct objects and is not suitable for learning the physical properties of snow or mud.\"\n    }\n  },\n  \"180270cff5ed49bb97f6694111667a49\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a terracotta pot, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"180e8abf2eb74be9911aab55859cc2f3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dog model, not snow or mud or any related terrain.\"\n    }\n  },\n  \"18369f6bf09e4ae8b9b778b3e9eb5e68\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract purple shape, not snow or mud or any related concept.\"\n    }\n  },\n  \"1a2c754e5f8a4a54af051873ec1541c4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple objects (building, trees, rocks, furniture) covered in snow, rather than focusing solely on snow or snowy ground as a distinct object or material for physics simulation.\"\n    }\n  },\n  \"1a425660710f455db6f616be7c164ec5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, low-poly object that vaguely resembles a tree or a layered pile. It does not clearly depict snow or mud, and the green elements are inconsistent with the requested class.\"\n    }\n  },\n  \"1a877e3516ae49638cbea4f0ccbf8618\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict snow or mud. It shows a very thin, almost invisible object against a white background, making it impossible to identify as belonging to the target class.\"\n    }\n  },\n  \"1b100dd021124e718046779f1df8574f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any details or clearly identify it as snow or mud. The quality is too low for training data.\"\n    }\n  },\n  \"1b2d4949a5d44bbf87e6471e989cf8ee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground/terrain, which falls under the 'mud' category within the 'snow_and_mud' class. The quality is acceptable and it represents a surface relevant for physics simulation in games.\"\n    }\n  },\n  \"1c1eed8caa7345b489257b0d8b2523b9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts muddy ground, but it also contains significant amounts of other objects like broken concrete slabs and small pieces of trash. This makes it unsuitable for representing the 'snow_and_mud' class cleanly, especially for learning the physical properties of just the mud material.\"\n    }\n  },\n  \"1caf38367d4445a2b0c3206eef84662c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or determine if it belongs to the 'snow_and_mud' class. The quality is too low for training data.\"\n    }\n  },\n  \"1ccffb343f174056ae1ee92ca92a7334\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground, which falls under the 'snow_and_mud' class. The quality is acceptable and it represents a surface relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"1da6b4df2cf642baa6a28eade1ecba8c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks detail and texture, making it impossible to clearly identify as snow or mud. The quality is too low for training data.\"\n    }\n  },\n  \"1df32f49a62348f2bac1e00cc459488a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone snow or mud. It lacks any visual information or detail.\"\n    }\n  },\n  \"1f437196e8124a0d8b11a8e03c95b261\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which falls under the 'mud' and 'muddy terrain' categories within the snow_and_mud class. The quality is sufficient for training.\"\n    }\n  },\n  \"1fdf0421cc6a407e9107ac0fdc22a1ee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and too bright. It does not clearly depict snow or mud, or any discernible object.\"\n    }\n  },\n  \"2107b98652024775a083e97a80f5747c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of ground that resembles snow or light-colored mud, fitting the 'snow_and_mud' category (e.g., snowy ground, snow patch). The quality is adequate, and it represents a type of terrain relevant for physics simulation.\"\n    }\n  },\n  \"21e72e4a405144efbcf9d879907bfdd2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone snow or mud.\"\n    }\n  },\n  \"223f98e7e0b44e9e94f420140f6244bc\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, fragmented piece of what might be a path or ground, but it doesn't clearly depict snow or mud. It looks more like a distorted scan of a generic dirt surface with some other small objects attached. It's not a clear or representative example of the 'snow_and_mud' class and is of low quality for physics simulation purposes due to its fragmented nature.\"\n    }\n  },\n  \"23de5f8d88ee42308d53eaae4accaf43\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which fits within the requested 'snow_and_mud' class (specifically 'muddy ground', 'muddy terrain'). The quality is acceptable, and it represents a type of surface relevant for physics simulation in games.\"\n    }\n  },\n  \"23e801f96ce24d46804b493af9edf7be\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a spear or arrow, not snow or mud or any related terrain/surface.\"\n    }\n  },\n  \"24cd15da71ca4cdcb18956c2682bda34\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a patch of snow ('snowy ground', 'snow patch') which belongs to the requested class. The quality is good, and it represents a common natural scene suitable for physics simulation (e.g., interaction with the snow surface).\"\n    }\n  },\n  \"24e4855891cc455bb37582f9bdf0b3ec\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict snow, mud, or any related terrain or substance. It appears to be a stylized object, possibly a handle or part of a character model, which is completely unrelated to the requested class.\"\n    }\n  },\n  \"24f22ac22dab4acfa0af78cf6aed6b77\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a segment of rocky or dirt terrain, possibly with some sparse vegetation. It does not clearly show snow or mud, which are the defining characteristics of the target class.\"\n    }\n  },\n  \"2530da77ab5644bf8e8cf8f2869bf035\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which falls under the 'mud', 'muddy ground', or 'muddy terrain' categories within the requested class. The quality is acceptable and it represents a surface type relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"25383877adab48a4927f535b586241f7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of ground that resembles mud or muddy terrain, which fits within the 'snow_and_mud' class. The quality is acceptable and it represents a surface relevant for physics simulation (e.g., character movement, object interaction).\"\n    }\n  },\n  \"2653916e77c342baaca317f4327a7711\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, and it does not clearly depict either snow or mud. It looks like a distorted patch of ground, possibly grass and soil, but not distinctly mud or snow.\"\n    }\n  },\n  \"269e5c5fd2bf44f48f180f76d2d77439\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a tree covered in snow, not just the snow or snowy ground itself. The request requires images focusing solely on the 'snow_and_mud' class elements like snow patches, muddy ground, etc., without other dominant objects like a full tree.\"\n    }\n  },\n  \"26bd555e74734bb2860e36d7a9d87dee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tire, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"26f69cc44cb24f679487700c368260bf\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snow globe, which contains a miniature snowy scene. This is not a depiction of snow or mud as a natural terrain element suitable for learning physics parameters for game environments. The primary object is the snow globe, not the snow itself in a relevant context.\"\n    }\n  },\n  \"28cb5ffebb6b49698227432bbc0a6c64\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a concrete or stone structure, possibly a wall or barrier, not snow or mud.\"\n    }\n  },\n  \"2927e9af6c404aaa9f948a8ff015070c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a backyard patio with fences, stairs, tarps, etc.) that happens to have snow patches, rather than focusing primarily on the snow or mud itself as a material or distinct object/terrain feature. It contains too many other objects unrelated to the target class.\"\n    }\n  },\n  \"295db3e6392049909b1e1029292c80f0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts snow or snowy ground around a tree stump. While a stump is present, the snow is a prominent feature and fits the 'snow_and_mud' class. The image quality is good and suitable for training.\"\n    }\n  },\n  \"29fdf3ea9a82450797fefaae20c1a80f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (snow/ice formations, a character figure, an axe) rather than cleanly depicting only snow or mud terrain as required.\"\n    }\n  },\n  \"2a5e3e74aeb7494f80aa9db7c66cfb9f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is a constructed object made of snow, not a natural formation of snow or mud. It also includes other objects like a hat and scarf, violating the single object rule for this class which focuses on terrain/natural features.\"\n    }\n  },\n  \"2a62c7a2a940457c95e070b21827d9ca\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden planter box containing dry, cracked earth. It does not clearly depict snow or wet mud as the primary subject. The focus is on the planter box structure rather than the mud/snow material itself, which is what we need for physics simulation of terrain.\"\n    }\n  },\n  \"2bfd0614770a446e90af80e954bfa4ad\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a highly stylized, cartoonish object that vaguely resembles a snowball or icy planet. It does not realistically depict any form of snow or mud as found in nature or typical game environments. Therefore, it is unsuitable for learning realistic physics parameters for the 'snow_and_mud' class.\"\n    }\n  },\n  \"2c0386dd36124ad78f37dbf6432eac21\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky or cobblestone surface, not snow or mud.\"\n    }\n  },\n  \"2dd9c454863841ad99e92332c347eb8a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a block with a texture resembling a night sky or galaxy, not snow or mud.\"\n    }\n  },\n  \"2de202dfe8014b6cac6ea23ebbbb55ad\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy ground texture, which falls under the 'muddy ground' or 'muddy terrain' categories within the requested class. The quality is good, and ground surfaces are relevant for physics simulations.\"\n    }\n  },\n  \"300b9bae5fc04871852e26d1bd3b43c8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of a stone or concrete wall, not snow or mud.\"\n    }\n  },\n  \"309a2236c1e847e1817e58a3c8fc6a2d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image displays a texture that clearly resembles snow, potentially packed or slightly dirty snow, applied to a sphere. While the shape is abstract, the material representation is relevant to the 'snow_and_mud' class (specifically 'snow', 'packed snow', 'snowy surface') and could be useful for learning material properties for physics simulation.\"\n    }\n  },\n  \"32156410551241f8bb5c57cccc8cd6ef\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized ice crystal or shard, not typical snow or mud formations like ground cover, patches, puddles, or drifts, which are the focus of the 'snow_and_mud' class for physics simulation.\"\n    }\n  },\n  \"32a468b3946044f48f5746c5ccf9ad91\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and possibly muddy ground, fitting the 'snow_and_mud' class (specifically terms like 'dirty snow', 'snowy terrain', 'snow patch'). The quality is good, and this type of terrain patch is relevant for physics simulations in game development (e.g., character interaction with the ground).\"\n    }\n  },\n  \"32bf7c8cf6554535901260e1fcad33d5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not snow or mud. While the texture might appear slightly muddy, the primary object is incorrect for the requested class.\"\n    }\n  },\n  \"3332e0baabd147378a1845233c704ba9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object or texture, let alone snow or mud.\"\n    }\n  },\n  \"33ac619f7ae547cdb61c595fc171bd8e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snowmobile, which is a vehicle used on snow, not snow or mud itself, which are the target classes.\"\n    }\n  },\n  \"34552b94eea54ad4a1acbd50a16284ba\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a boot, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"34965e49f21d4158a4bcd03fa3c4c81d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rocky terrain with some dirt and a small tree trunk, not snow or mud.\"\n    }\n  },\n  \"387f392ce11941468c27c9076e409e31\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is poor due to the lower half being extremely bright/washed out, obscuring the texture details. While the texture on the top resembles snow somewhat, the overall quality is not suitable for training.\"\n    }\n  },\n  \"38df5fccb0804294a9f5e85da791968b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple objects (structures, figures, tent) placed on a snowy surface, not just the snow itself. We need images focusing primarily on the snow or mud material/terrain for physics simulation learning.\"\n    }\n  },\n  \"3a0e4dec66154901bf905384622183dd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts rocky terrain, not snow or mud. While there might be some dirt, it doesn't clearly represent the 'snow_and_mud' class.\"\n    }\n  },\n  \"3abff9eadb5e4933be2e4c75454d8f8a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized, individual snowflakes. While technically 'snow', this representation is not suitable for learning the physics parameters of snow as a material (like snow cover, snowdrifts, or slush) typically used in physics simulations for terrain or accumulation.\"\n    }\n  },\n  \"3b001f6498674bc3bbc6bec088a8e2b9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of dirty snow or slushy ground, which falls under the 'snow_and_mud' category (specifically 'dirty snow', 'slush', 'snowy ground'). The quality is acceptable and it represents a surface type relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"3b92b90ddc124ff8b87ca80dd377e59b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a surface covered in snow ('snowy ground' or 'snow patch'), which falls under the specified class 'snow_and_mud'. The quality is acceptable, and while it shows snow on another material (ground/rock), this combination is inherent to terms like 'snowy ground' and is relevant for simulating interactions with such surfaces in a game environment.\"\n    }\n  },\n  \"3b9c6a8c345a455db08b78dd2da5fb40\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making it impossible to discern any details or identify the object. It does not clearly depict snow or mud.\"\n    }\n  },\n  \"3d1a1709e1d44ebcafbbadd93a8671a8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tire or wheel, possibly with some mud texture on it, but it does not depict snow or mud as the primary object (e.g., ground, patch, puddle). The main object is the tire, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"3d36624d4b68466fb56677d9c6c68747\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of ground that fits the 'snow_and_mud' category (possibly snowy or muddy terrain/surface). The quality is good, and it represents a type of surface relevant for physics simulations in a game environment.\"\n    }\n  },\n  \"3d8f7fe0921049a1b75d90492cce6047\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains prominent objects (a person on a bicycle, a fence) in addition to the snowy terrain. We need images focusing primarily on the snow/mud itself for physics simulation training.\"\n    }\n  },\n  \"3e842f3b368d41baac8c6523e5df78d3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock covered in snow, not just snow or mud as the main object. The physics simulation would likely be dominated by the rock's properties rather than the snow itself, making it unsuitable for learning snow/mud physics parameters.\"\n    }\n  },\n  \"3fea88ff72514ccab4c6dcd01a8ebf6b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a terrain patch, but the texture does not clearly resemble snow or mud. It looks more like rocky ground or dry earth, making it unsuitable for the 'snow_and_mud' class.\"\n    }\n  },\n  \"401e293e23844dd68cc297b6c2ac21e2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky or desert landscape with a building and trees, not snow or mud.\"\n    }\n  },\n  \"405b32a1e1674c7f937d57bfc5e9412c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very abstract, low-detail texture that does not clearly resemble snow or mud. It looks more like a generic patterned surface and lacks the visual characteristics needed to identify it as belonging to the target class, especially for physics simulation purposes.\"\n    }\n  },\n  \"410dd5b85a564f3dad645029043ee699\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and stylized. It depicts a low-polygon landscape that doesn't clearly or realistically represent snow or mud suitable for physics simulation training.\"\n    }\n  },\n  \"4190941cfaa64418866bdb2dc46e6f7e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an artificial structure, possibly made of concrete, with a snow-like texture applied. It does not depict snow or mud as a natural ground cover or formation, which is the focus of this class for physics simulation (e.g., deformation, accumulation).\"\n    }\n  },\n  \"41cc30a2cb5843b0b708bd74ffe17ed4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which falls under the 'snow_and_mud' class (specifically 'muddy ground', 'muddy terrain', 'mud patch'). The quality is acceptable, and it represents a material relevant for physics simulation.\"\n    }\n  },\n  \"42f358bbacae4684bb995bbf2f779e8d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a complex scene with multiple elements (terrain, stylized trees, a building) rather than focusing clearly on snow or mud. The terrain itself is abstract and doesn't realistically depict snow or mud suitable for learning physics parameters.\"\n    }\n  },\n  \"42fff0069a2b435ca7a6133df2694a6c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (pillars, road-like structure, green shapes) and does not clearly or primarily depict snow or mud. The potential snow/mud elements are minimal and ambiguous.\"\n    }\n  },\n  \"446add02f37741be8698d2f76ced875b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts patches of snow and small snowballs resting on a surface, which falls under the 'snow', 'snow patch', and 'snowy surface' categories. The quality is good and it represents a scenario relevant for physics simulation (snow interacting with objects/surfaces).\"\n    }\n  },\n  \"44f41039246a4df59027c38023d5a576\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict snow or mud. It shows abstract shapes (a white sphere, a brown cylinder, black specks) on a white background, which are unrelated to the requested class.\"\n    }\n  },\n  \"49f6e4837f10487fb9a2986d874f292a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a boot on a container, not any object belonging to the snow_and_mud class (like snow, mud, snowy ground, muddy ground, etc.).\"\n    }\n  },\n  \"4a6c0e6df840449a9769cb241ddfb1b2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and muddy terrain, which fits the requested class 'snow_and_mud'. The quality is acceptable, and this type of ground surface is relevant for physics simulations in game development.\"\n    }\n  },\n  \"4c9e2fb2278142f4b0ea56e1f1beb063\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a patch of material that resembles packed snow or possibly ice, fitting within the 'snow_and_mud' category. The quality is good, and it represents a distinct object suitable for a game asset.\"\n    }\n  },\n  \"4db23a37aa91426eb1ba4b18e35b20ce\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a patch of ground with what appears to be wet mud and small patches of snow, fitting the 'snow_and_mud' class description. The quality is acceptable for training data.\"\n    }\n  },\n  \"4e2528365b7b480ab867c15ebebb4b59\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent stack of logs in addition to the snow. We are looking for images that primarily depict snow or mud, not other significant objects.\"\n    }\n  },\n  \"4ed7e3e3aabf4f30aa13821225e85f3c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, almost completely white and overexposed, making it difficult to discern any details of the snow texture or terrain features. This low quality makes it unsuitable for training.\"\n    }\n  },\n  \"5030020c061c434aa711f9dc4236a07d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a green cube, which is not part of the 'snow_and_mud' class. The snow/mud patch is secondary and partially obscured by the cube, violating the requirement to depict only the target object class cleanly.\"\n    }\n  },\n  \"5113824b649d4867987ff02b956d915f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of mud, which falls under the 'snow_and_mud' class. The quality is good, and the object is isolated, making it suitable for training.\"\n    }\n  },\n  \"512f7a551b2d488696eb2516c41393b3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of what appears to be mud or muddy ground, which falls under the requested class 'snow_and_mud'. The quality is acceptable and it represents a material relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"52735ffb60a44244a3ba87bdc1a0885b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and the object is too small and indistinct to be clearly identified as snow or mud. It does not provide enough visual information for training.\"\n    }\n  },\n  \"52b2faaf84ff4300b64195757976509a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a baseball glove, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"531e9184e6e14ebb9d84c8fa65adb0d8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden mug or mallet, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"53545055434248429d2f6d170a7a02c9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plain white, geometrically shaped object. It lacks any texture or form that would clearly identify it as snow or mud. It looks more like a piece of manufactured material or a placeholder asset rather than a natural ground surface.\"\n    }\n  },\n  \"5437dd4787b14759a438bd5455b5510e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern any details or recognize it as snow or mud. It does not clearly depict the object class and is of very low quality.\"\n    }\n  },\n  \"5584c588b0f9490998f6deadf6d3091b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too stylized and lacks texture. It does not clearly depict snow or mud, making it unsuitable for learning realistic physical properties for the 'snow_and_mud' class.\"\n    }\n  },\n  \"560cd42324a5420bac9a6eb2b537524e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid block of dried mud with a paper label artifact on top. While technically mud, it doesn't represent the typical use cases for 'snow_and_mud' (like terrain, puddles, deformable surfaces) in game development and physics simulation. The label is also an unwanted extraneous object.\"\n    }\n  },\n  \"5655d79a7a334953a04584e411ec4b6d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, highly pixelated, and noisy texture that does not resemble snow, mud, or any related terrain type. The quality is poor in terms of realism and it does not clearly depict the object class.\"\n    }\n  },\n  \"56950782989b4f648ee8834ea91dfeec\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground with puddles, which fits the 'muddy ground', 'wet mud', 'mud puddle', and 'muddy surface' descriptions within the snow_and_mud class. The quality is good and it represents a relevant surface type for physics simulation in game development.\"\n    }\n  },\n  \"5775930339854f44911240abe24e1810\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image texture depicts gravel or small rocks, not snow or mud as required by the class description.\"\n    }\n  },\n  \"577f5dbb376f4f35a0649e61ede115da\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of dry, possibly rocky ground or dirt, not clearly identifiable as snow or mud (especially not wet mud or snow).\"\n    }\n  },\n  \"57871ecaa6b9453f9916f057d71020b0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a formation that resembles mud or very dirty snow, fitting the 'snow_and_mud' class. The quality is good, and it represents a material relevant for physics simulation.\"\n    }\n  },\n  \"578f991e44e646bdb3ab4e7995204978\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a lantern-like object, not snow or mud or any related terrain/surface.\"\n    }\n  },\n  \"57d50e8c71844f1e986c1a6a52ed5ed6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and muddy ground, which fits the 'snow_and_mud' class. The quality is acceptable and it represents a terrain surface suitable for physics simulation (e.g., character interaction, vehicle tracks).\"\n    }\n  },\n  \"588dbe24daa14549b6b66b2c2c88c4fb\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone snow or mud.\"\n    }\n  },\n  \"5919bdb25f794362a76dc963be283592\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a broken wooden fence or barrier with some dirt/mud texture on it, but the primary object is the wooden structure, not snow or mud itself. It does not fit the definition of the 'snow_and_mud' class which focuses on ground cover, patches, puddles, etc.\"\n    }\n  },\n  \"59b30b40650a4ce19208bccb7a1fe935\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract white structure that does not resemble snow, mud, or any related terrain features listed in the class description. It appears to be an unrelated 3D model.\"\n    }\n  },\n  \"59ba68b286fb4f75b7dd8421294df55d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low. It is too bright, washed out, and lacks detail, making it unsuitable for high-quality training data. It looks more like a sketch than a realistic render.\"\n    }\n  },\n  \"5ad3a2784f10401fb34592a7f9d70578\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a snowy ground/surface, which falls under the requested class 'snow_and_mud'. Although it includes a road and trees, the snow covering the ground is the prominent feature and relevant for understanding the material properties in a physics simulation.\"\n    }\n  },\n  \"5c2eca11cddf4a33b76094968ad617db\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very small, isolated, and abstract shape. While the texture might vaguely resemble snow or slush, it doesn't clearly depict any recognizable form of snow or mud (like a patch, drift, puddle, or ground cover) that would typically be relevant for physics simulation in a game environment. It's too ambiguous and not representative of the class.\"\n    }\n  },\n  \"5ded2cc06f744e5cb18fb92cffc1e0bf\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a surface that resembles muddy tracks through snow or light mud, fitting the 'snow_and_mud' class (specifically terms like 'muddy path', 'snowy ground', 'muddy ground', 'dirty snow'). The quality is good, and it represents a ground surface relevant for physics simulations.\"\n    }\n  },\n  \"5fa69ebe12654c64b04575778cd347a1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an untextured 3D mesh of a terrain segment. It does not visually represent snow or mud, lacking the necessary color and texture information to belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"61757ef42f3741d2a617d3cd0d13fc99\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a creature, which is not part of the 'snow_and_mud' class. We need images focused solely on snow or mud textures/terrains.\"\n    }\n  },\n  \"61836296296347c4adf2b8358f8a840b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to show a mound of sand or dry earth, not snow or mud. It does not fit the requested class.\"\n    }\n  },\n  \"6201fac9181240dfb046763602637d2d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (trees, rocks, campfire symbol) on a snowy ground, rather than focusing solely on the snow or mud itself as the primary object.\"\n    }\n  },\n  \"6207382f60ae4f17a49d5ba0c5e4d05a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic, untextured 3D terrain model. It lacks any visual characteristics (color, texture) to identify it as snow or mud. It appears to be a base mesh or heightmap rather than a representation of a specific surface material like snow or mud.\"\n    }\n  },\n  \"621f3e9bca7a42f4bd289c7c438c974c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of rock or stone, not snow or mud or any related concept from the provided list.\"\n    }\n  },\n  \"62dc7db392f34dacb4c07bfcb4faf14e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, side-view slice of what might be muddy terrain, but the perspective and fragmentation make it difficult to clearly identify as such. It doesn't represent a typical view or usable asset for the 'snow_and_mud' class in a game environment or for physics simulation.\"\n    }\n  },\n  \"65447750e2a94304bd6a58a47465ccd2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy terrain, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and it represents a single object type relevant for game development and physics simulation (ground interaction).\"\n    }\n  },\n  \"661e3cc4b4324d63a3af4e146d220d2e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (snowy ground and trees), not just a single object representing snow or mud. We need images focused solely on the snow/mud material itself for physics simulation training.\"\n    }\n  },\n  \"6689809ba4744f16bd70b30819237c05\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts patches of snow or a snowy surface, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and it represents a type of terrain relevant for physics simulation.\"\n    }\n  },\n  \"68478cc107e7468cae53c985d81367c7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, which does not belong to the snow_and_mud class.\"\n    }\n  },\n  \"68a23d0248b04efa84fae1c2827e09e7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a car covered in snow, not the snow or mud itself as the main subject. We need images focusing on the snow/mud terrain, patch, or puddle, not other objects covered by it.\"\n    }\n  },\n  \"6a92c9c3db254defa8bc31d240ebe1f2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground with a puddle, which falls under the 'mud', 'muddy ground', 'mud puddle', and 'muddy water' categories within the snow_and_mud class. The quality is good, and it represents a terrain feature relevant for physics simulation (e.g., character movement, object interaction).\"\n    }\n  },\n  \"6ab7c0070cae418480d2832e4f0372f3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, patterned surface that does not realistically represent snow or mud. It looks more like a decorative tile or a game board than natural terrain.\"\n    }\n  },\n  \"6b0573c76fcc40a0a7efee12c751eb5f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy terrain or landscape, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and it represents a surface type relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"6b932284e57a4e198286d1628b447bcc\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and lacks any discernible features or textures. It does not clearly depict snow, mud, or any related terrain. The quality is too low due to extreme brightness/overexposure.\"\n    }\n  },\n  \"6d5d67db73bc40999e16b14b3aae93dc\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a snowy village/landscape) with many different objects (trees, buildings, etc.), not just snow or mud. We need images focused primarily on the snow/mud material itself for physics simulation training, not entire game levels.\"\n    }\n  },\n  \"6dbbee10d5f84a9c942da483e5d0b6b1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pixelated block that resembles dirt or wood, not snow or mud. The texture and form do not align with the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"6dccb5e143f640e49d3cd32d3331e1f7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an axe, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"6e3314061c504d619d804450b61b21a8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone path or ground cover, not snow or mud. It does not fit the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"6f5eb3257f124213b4601ec2dcce557d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a lump that can be interpreted as a snowdrift or a patch of packed/wet snow. While the texture is somewhat stylized and shiny, it falls within the broad category of 'snow_and_mud' (specifically snow). The image quality is good, and it shows a single object suitable for physics simulation (e.g., deformation, interaction).\"\n    }\n  },\n  \"7039d3a2698e483083bff4a42c67e791\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground with some rocks, which fits the 'snow_and_mud' class (specifically 'snowy ground', 'snow patch'). The quality is good, and it represents a terrain element suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"706a0368fff549d28ea2f86ff9460331\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (cabin, trees, rocks) in addition to the snow. While snow is present, it is part of a larger scene and not the primary focus, violating the 'cleanly ONE SINGLE OBJECT' guideline, even considering the context of landscapes.\"\n    }\n  },\n  \"715f6b08d53c43e9a03eb6d9bb729b25\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a terrain patch with features resembling both muddy ground and snowdrifts/snowy peaks, which fits within the 'snow_and_mud' class definition (e.g., 'snowy terrain', 'muddy terrain', 'snowdrift'). The quality is good, and this type of terrain is relevant for physics simulations in games.\"\n    }\n  },\n  \"7217487913e74513b06b4fa221233b79\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, flat, artificial-looking slab. It does not clearly depict any recognizable form of snow or mud (like a patch, drift, puddle, or terrain) as defined in the class description. It is too abstract and doesn't represent a natural occurrence suitable for physics simulation of snow or mud.\"\n    }\n  },\n  \"725803e919df44d7a945a7de03a3e226\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a highly stylized, grayscale representation of terrain, possibly a heightmap visualization. It lacks realistic textures and colors, making it impossible to clearly identify as snow or mud. It does not provide useful visual information about the material properties needed for physics simulation.\"\n    }\n  },\n  \"727efaaeae7947d18f42f8470788db03\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict snow or mud. It is too bright and lacks sufficient detail to be useful for training.\"\n    }\n  },\n  \"72e3acdc5f1147eab161b837af57f427\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict snow, mud, or any discernible object. It lacks any content or texture.\"\n    }\n  },\n  \"73a0a779dc4b43929bbd3d3d4f323ae8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized texture applied to a cube, representing snow or ice patches. While related to the class, it's presented as a texture block rather than a natural formation of snow or mud suitable for learning physics simulation parameters like deformation or interaction. It's more of a material swatch than an object/terrain element.\"\n    }\n  },\n  \"742ad64dfa7e45909d2e67b1ad35cd74\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very small, indistinct object that is difficult to identify clearly as snow or mud. It lacks context and doesn't represent a typical form of snow or mud (like ground cover, terrain, patch, puddle) suitable for physics simulation training.\"\n    }\n  },\n  \"75dcd17bdf4c49bbac606c27bf2186fe\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (ground, bridge, and a white substance that might be snow). It does not cleanly depict only snow or mud. The potential snow element is not the primary focus and lacks detail.\"\n    }\n  },\n  \"763ca6587c4846d2a3b4b2cc5c0ec209\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a texture of gravel or small rocks, not snow or mud as required by the class description.\"\n    }\n  },\n  \"76619a9fb77d465b863b1e69ce03f947\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to clearly identify the material. It looks more like a rocky outcrop than clearly defined snow or mud terrain.\"\n    }\n  },\n  \"76dd7b03864a4812a005b7fadd09a9ee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snow or snowy ground, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and it represents a material relevant for physics simulation in games.\"\n    }\n  },\n  \"776b40408fd74424831b10ce7e1db70a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character model, not snow or mud as an environmental element or terrain feature. It is not suitable for representing the 'snow_and_mud' class for physics simulation purposes.\"\n    }\n  },\n  \"792416146dfc43a28d7dbeca66dd117d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone snow or mud. It lacks any detail or texture.\"\n    }\n  },\n  \"7bd96987e8f34e79bef996df293b1a78\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized landscape diorama with trees and water, not a clear depiction of snow or mud. The ground texture is uniform and dark, and the white particles are too abstract to represent snow effectively for physics simulation purposes. The image also contains multiple objects besides potential snow/mud.\"\n    }\n  },\n  \"7be1b98ec4e94722b3b6046ac08adc1b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an extraneous object (a small pillar) attached to the muddy surface, violating the requirement for depicting only the target object class. Additionally, the isolated patch format is not ideal for representing terrain like mud or snow for physics simulation.\"\n    }\n  },\n  \"7c7028be31b34679ba8ae953eb6beafd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of wet mud or possibly slush, which falls under the 'snow_and_mud' category. The quality is acceptable, and it represents a surface material relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"7cb5a50d9bdb46119813ea7e09384035\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snowman, which is a specific object made of snow, not the general material or terrain feature 'snow' or 'snowy ground' as intended by the class 'snow_and_mud'. We are looking for images of snow/mud as a material or ground cover, not anthropomorphic figures.\"\n    }\n  },\n  \"7d2623d4a2384be5a663dc499ac69bcb\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple objects (statues, structures, debris) rather than focusing clearly on snow or mud as a primary object or terrain. Additionally, the image quality is low, appearing blurry and overly bright, making it difficult to discern details relevant for physics simulation.\"\n    }\n  },\n  \"7d92104cf66946e692a7da923da668a3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, abstract vertical shape that does not clearly resemble snow, mud, or any related terrain features. It's difficult to identify the object, and it doesn't represent a useful instance for physics simulation within the 'snow_and_mud' class.\"\n    }\n  },\n  \"7e5a3aefba274aa1977d06a7aa710c76\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy ground surface, which fits within the 'snow_and_mud' class, specifically terms like 'muddy ground' or 'wet mud'. The quality is good and it represents a surface type relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"7e8250c7ef174c708355e930f46a93f6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a circular object, possibly cardboard or a coaster, with writing and a barcode. It does not depict snow or mud or any related terrain/surface.\"\n    }\n  },\n  \"7ec6d956393f44ddbb69a42196659732\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dry terrain model, possibly sand or rock, not snow or mud as required by the class.\"\n    }\n  },\n  \"7f40b2e189234d8cb9ccaadf8e92b844\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a section of terrain that clearly includes areas identifiable as muddy ground or muddy terrain, which falls within the specified class. The quality is adequate, and terrain pieces like this are commonly used in physics simulations for environment interaction.\"\n    }\n  },\n  \"7f4cd032cb0940329844438ff0dd4d95\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a single, stylized snowflake, not a representation of snow as a material or ground cover (like snowy ground, snow patch, snowdrift) which is the focus of the 'snow_and_mud' class for physics simulation.\"\n    }\n  },\n  \"826c41844d4243599649c07caac5112f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with a river, grass, and potentially rocks, but it does not clearly show any snow or mud, which are the defining characteristics of the target class.\"\n    }\n  },\n  \"82fa6b235d53487c952d3da1120ddf10\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts cracked dry earth or dried mud, which doesn't fit the typical characteristics of 'snow' or 'wet/muddy' ground intended for the class. The physics properties would be significantly different from snow or wet mud.\"\n    }\n  },\n  \"832871e06b52450da85616c31176401c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a segment of snowy terrain or landscape, which falls under the requested class 'snow_and_mud'. The quality is good, and terrain surfaces like this are relevant for physics simulations (e.g., friction, deformation).\"\n    }\n  },\n  \"8360dc6dfc0949eea7973472634add4c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a concrete surface with a fire hydrant and some wet patches, not snow or mud.\"\n    }\n  },\n  \"846d7fdd1fa7416cafe01d5e85fd9c92\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a texture that looks more like soil or dirt with leaves/debris, not clearly identifiable as sand or sandy terrain.\"\n    }\n  },\n  \"8473ab8b9e524f7281378e35ef233076\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts robotic or mechanical structures, not snow or mud or any related terrain/surface.\"\n    }\n  },\n  \"849774c99ccd43e09088aa9b571525e1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a low-poly 3D model that vaguely resembles a rock formation partially covered. However, it lacks textures and realistic details to clearly identify it as snow or mud. The quality is too low and abstract for the intended purpose.\"\n    }\n  },\n  \"84a1c4e564d349648be05653d60c7fa0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dry, rocky, or desert-like landscape, not snow or mud. It also contains other objects like a building and trees.\"\n    }\n  },\n  \"84d28c4420e24fd7917b6f29a15062f9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of a paved road, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"873c9a3f7426462595fee1f809ca90c7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and the object in the center is barely visible and does not clearly depict snow or mud or any related concept. The quality is too low, and the object is unrecognizable.\"\n    }\n  },\n  \"895167f1d1714744838906ee1b2fcdc4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized block of grass on top of dirt/soil, not snow or mud as required by the class definition.\"\n    }\n  },\n  \"89d201870c954d16ba8f6e7d1745852c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely small and low resolution, making it impossible to clearly identify the object. Additionally, the object depicted does not appear to belong to the 'snow_and_mud' class; it looks more like a miniature building or scene.\"\n    }\n  },\n  \"8a2296b30b7b4be9b2dfa30a9f387820\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an icicle, which is ice, not snow or mud. While related, it doesn't fit the specified class terms like snowy ground, muddy terrain, snow patch, mud puddle, etc., and has different physical properties relevant to simulation.\"\n    }\n  },\n  \"8bd4bd5dc01340b5ada09cc5dc8c1103\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (trees, a blue structure) in addition to the snowy ground. It depicts a scene rather than focusing solely on the snow/mud material or terrain itself, which is required for isolating its physical properties.\"\n    }\n  },\n  \"8c52c224335d4b598a60b42598c84d21\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy terrain/landscape, which falls under the specified class. The quality is good, and it represents a single object type suitable for physics simulation (e.g., ground collision, character interaction).\"\n    }\n  },\n  \"8d16b9d28b1841ada0c3c3595feccf52\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky cliff face with some vegetation, not snow or mud as required by the class description.\"\n    }\n  },\n  \"8da1e16793cb4f99830388e7decd0613\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-polygon, untextured model. It lacks the necessary detail and texture to clearly represent either snow or mud. It is too abstract and low quality for the purpose of learning physics parameters.\"\n    }\n  },\n  \"8f6c45d163b24b02a845dd47561a6efe\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which falls under the 'snow_and_mud' class. The quality is good, and it represents a surface type relevant for physics simulations in a game.\"\n    }\n  },\n  \"925fa0a3410c49c89d07d7b7425de51f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of textured material that resembles packed or dirty snow, fitting the 'snow_and_mud' class (specifically 'snow patch' or 'snowy surface'). The quality is good, and it represents a single object suitable for physics simulation as ground cover.\"\n    }\n  },\n  \"937141c4a58e44f980b9d175ca0afcfe\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a diorama) with multiple objects like trees, rocks, and a snowman, not just snow or mud as a primary focus. We need images focusing solely on the snow/mud material or terrain itself for physics simulation learning.\"\n    }\n  },\n  \"937322a709c04195bda8ece3258cf213\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized creature or robot, not snow or mud or any related terrain/surface.\"\n    }\n  },\n  \"939d059c7a43424f93c3e8e44e1d5489\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a few very small, indistinct snowflake-like shapes on a completely white background. It does not clearly depict any of the listed concepts like snowy ground, mud, snowdrifts, etc., in a way that would be useful for learning physics parameters. The image quality is poor due to excessive brightness and lack of detail, and it doesn't represent a substantial object or surface suitable for physics simulation.\"\n    }\n  },\n  \"93d88993a102495392b0022d0bebfd87\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sculpted figure or creature, not snow or mud or any related terrain/surface as specified in the class list.\"\n    }\n  },\n  \"9432d6397ea64c328f2cdf1109e30ad2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and muddy terrain, which fits the 'snow_and_mud' class description. The quality is acceptable and it represents a surface relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"94421df4506e4737b6bc2ea9ea369dff\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a snowman, which is a specific object construct made of snow, and includes accessories (hat, pipe) not belonging to the 'snow_and_mud' class. We are looking for images representing the material properties of snow or mud itself (e.g., patches, ground cover, puddles), not composite objects like snowmen.\"\n    }\n  },\n  \"94ba55c6ecbb431f8b47484cf55940b0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"94e5677333674fea9bb68f23dbdd73ce\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, geometric snowflake object, not natural snow or mud formations like snowy ground, mud puddles, or snowdrifts, which are the intended subjects for the 'snow_and_mud' class for physics simulation.\"\n    }\n  },\n  \"9541aaf266a14389ae41f7c123cad403\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a vehicle (snowplow/tractor), not the snow or mud itself. The amount of snow/mud present is minimal and not the focus of the image.\"\n    }\n  },\n  \"96415b43d3ef4e5a82e714b8d4a155a5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of what appears to be packed or dirty snow, fitting the 'snow_and_mud' class (specifically terms like 'packed snow', 'snowy surface', 'snow patch', 'dirty snow'). The quality is good and it represents a material relevant for physics simulation.\"\n    }\n  },\n  \"96745d38c42c4ec8a7bca594dfe6aad3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like a rock or a clod of earth rather than sand. It does not show the characteristic granular texture or form (like a pile, dune, or surface) associated with sand.\"\n    }\n  },\n  \"969ca256e8694c9e8affe6f220c56de8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of ground that resembles dirty snow, slush, or muddy ground, which fits within the 'snow_and_mud' class. The quality is acceptable for training.\"\n    }\n  },\n  \"97323eb95fe343d897cf396e50c500b1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a snow globe or a similar decorative object, not snow or mud as a natural ground cover or terrain feature. It does not fit the class description.\"\n    }\n  },\n  \"975cf3eab73a41898c5e0b9787868d68\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pair of boots and a connected device, not snow or mud or any related terrain/substance.\"\n    }\n  },\n  \"9a013332f9394bffbe3e3c33f0c2dfee\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict snow or mud. It shows a blue textured surface, possibly representing water or ice, with several unrelated objects placed on it.\"\n    }\n  },\n  \"9a74f4f1313449b78f68f7231c1c1a31\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy terrain, which falls under the requested class 'snow_and_mud'. The quality is adequate for training purposes and represents a surface relevant for physics simulations.\"\n    }\n  },\n  \"9a951e48bc11409da031371a5adbfb3c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock formation. While there are some white patches that could potentially be interpreted as snow, they are not the main focus and are not clearly defined as snow. The dominant object is rock, not snow or mud.\"\n    }\n  },\n  \"9b99a8d5ef584ddc88cd7b648abcbe6e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snowman, which is a constructed object made of snow, rather than representing snow or snowy terrain in a more natural state as listed in the class description (e.g., snow patch, snowdrift, snowy ground). While made of snow, it includes other elements (hat, scarf, sticks) and its specific form is less suitable for learning the general physical properties of snow material for simulation compared to images of natural snow formations or ground cover.\"\n    }\n  },\n  \"9c45d1ad17ab4a1d90d49cac232811af\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized landscape diorama containing multiple elements (mountains, trees, river, earth cross-section) rather than focusing specifically on snow or mud. The snow representation is very minimal and abstract (white caps on low-poly mountains) and doesn't clearly show any specific type of snow or mud from the list provided.\"\n    }\n  },\n  \"9c4a1e459e7a44f5b00a0feb1719db52\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized green patch of ground, possibly representing grass or a game board element, not snow or mud. The colors and textures do not match the target class.\"\n    }\n  },\n  \"9d00e0a63ba54cbb931825c420f49dd7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (deer, structure, trees) rather than focusing clearly on snow or mud as the primary subject. The representation of the ground is very minimalistic and lacks the detail needed for physics simulation training.\"\n    }\n  },\n  \"9d1f2152db4543998db917c9cae6ceb1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a paved surface, possibly cobblestone or tiles, with some graffiti. It does not depict snow or mud.\"\n    }\n  },\n  \"9dfb684196cc420ba9987e5395fb5ddd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized weapon or tool, not snow, mud, or any related terrain feature.\"\n    }\n  },\n  \"9e50dbca87944b00931e9d249e11e47b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a color checker card, which is an extraneous object not part of the 'snow_and_mud' class itself. We need images depicting only the intended object class.\"\n    }\n  },\n  \"9f6e71156ea8409b8337312a879bafe4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which fits within the 'snow_and_mud' class (specifically 'mud', 'muddy ground', 'muddy terrain', 'muddy surface'). The quality is acceptable for training purposes, and ground surfaces are relevant for physics simulations.\"\n    }\n  },\n  \"9fa3c56fd32746bcb0e06cd2c4229ca0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a grayscale terrain model, possibly representing mountains. While it could conceptually be covered in snow, it lacks the specific texture and visual detail to clearly depict 'snow' or 'mud' as materials. It looks more like a heightmap or untextured terrain mesh rather than a representation of snow or mud surfaces suitable for learning physical properties.\"\n    }\n  },\n  \"a0367cab2ee54e288f2c2e5065da90d4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a surface that reasonably represents muddy ground or a muddy surface, which falls under the 'snow_and_mud' category. The quality is adequate and it represents a single object type relevant for physics simulation (ground material).\"\n    }\n  },\n  \"a103182d35e7425c9e96e9ccb3dd650d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snow or snowy ground, which falls under the requested class. The quality is good, and it represents a single object type relevant for physics simulation (e.g., terrain interaction).\"\n    }\n  },\n  \"a1809e675ef14ea5a3fce59e640fd5be\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, snowman, ice patch) in addition to the snow, and the focus is on the entire scene rather than just the snow material itself. We need images focusing primarily on the snow/mud surface/terrain for physics learning.\"\n    }\n  },\n  \"a324e2627f3e46a086906ecaff906c1e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized low-poly landscape with multiple elements (trees, river, ground). While there are white patches that might represent snow, they are highly abstract and part of a larger scene, not a clear depiction of snow or mud suitable for learning physics parameters. The image does not focus on the target class.\"\n    }\n  },\n  \"a4a62326c72b4953b393ae1edb505d43\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is extremely faint and low contrast, making it very difficult to discern the object. It does not clearly depict snow or mud and lacks the visual information needed for quality training data, especially for physics simulation purposes.\"\n    }\n  },\n  \"a5287a933a7548adbbf18f431556b0b4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a green, rocky island terrain, not snow or mud.\"\n    }\n  },\n  \"a5ed41b6b74f4077b8a1415f5dfd6c36\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a terrain patch, but the texture does not clearly represent snow or mud. It looks more like grassy or rocky terrain.\"\n    }\n  },\n  \"a63110eb31f84cbdb74d0aede7c160b8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground with a footprint, which falls under the 'mud', 'muddy ground', or 'muddy terrain' categories within the requested class. The quality is acceptable and it represents a surface relevant for physics simulation (e.g., deformation, friction).\"\n    }\n  },\n  \"a67cf5076494490aa12b23a131d71626\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized creature (resembling a pig covered in frosting and possibly mud/chocolate) from a block-based game like Minecraft. It does not clearly represent any of the items in the 'snow_and_mud' class list like snow patches, mud puddles, or snowy/muddy terrain.\"\n    }\n  },\n  \"a6d8831589f14c378184f2a79c49ad37\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy ground surface, which falls under the 'snow_and_mud' category (specifically 'muddy ground', 'muddy terrain', 'muddy surface'). The quality is good and it represents a type of terrain relevant for physics simulation.\"\n    }\n  },\n  \"a87ceed6770944cbbd182156a53f514b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a lump that could reasonably be interpreted as wet snow, slush, or a snow patch, which falls under the requested class. The quality is acceptable and it represents a single object relevant for physics simulation (e.g., interaction).\"\n    }\n  },\n  \"a92a08461d244873a88a0b77d1c47d7c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of terrain, but it does not clearly depict snow or mud. The texture appears to be mostly green vegetation and brown/grey earth or rock, not fitting the 'snow_and_mud' class.\"\n    }\n  },\n  \"a953218836004ffdb4004bfb65d33c98\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cobblestone path with grass, not snow or mud.\"\n    }\n  },\n  \"aa57bdd463f145e3a585a4c8604a44ae\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy terrain, which falls under the requested class 'snow_and_mud'. The quality is good, and it represents a single type of object relevant for game development and potentially physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"aacac87a28b34d20be44e5ee75b3decd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of terrain with areas resembling snow and mud, fitting the 'snowy terrain' and 'muddy terrain' descriptions within the class. Although it includes green areas and has a low-polygon style, it's recognizable and represents a type of object relevant for physics simulation (ground surface).\"\n    }\n  },\n  \"ac0587b7cbb64274be31dd3219e3c06f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a snowy landscape/terrain, which falls under the requested class 'snow_and_mud'. While other objects like trees and figures are present, the primary element is the snowy ground, and this representation is suitable for understanding the properties of a snowy surface in a game environment.\"\n    }\n  },\n  \"ac58f4b45338463f95f7f80b70ded5ce\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a topographical map or a digital elevation model, not actual snow or mud textures or surfaces. It represents terrain elevation with color gradients, which is not suitable for learning the physical properties of snow or mud.\"\n    }\n  },\n  \"ad2b9fd45215429aaf0488834b0c0ca9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman character, which is an object made *from* snow, but it does not represent snow as a material or terrain feature (like snowy ground, snowdrift, snow patch) as intended for learning physics parameters for the 'snow_and_mud' class. It also includes non-snow elements like a hat and stick arms.\"\n    }\n  },\n  \"aeee0519987b4688b3f4c7a390edf32c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its texture. It does not clearly depict snow or mud due to the poor image quality.\"\n    }\n  },\n  \"b0eefd5a60c14097a8db2fa0283b883b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains many other objects (blocks, tracks, sword, rug) besides the small patch of snow. It does not cleanly depict snow or mud as the primary subject.\"\n    }\n  },\n  \"b1377c297cb84a48ad6d3f2f91d1d3bf\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized landscape model with mountains, ground, and small patches of snow. It does not clearly focus on snow or mud as a primary material suitable for physics simulation, and it contains multiple elements (rocky mountains, green ground) besides the snow.\"\n    }\n  },\n  \"b246ac9a53224b3b97ae68f6320ac3bd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized creature or object, not snow or mud or any related terrain/formation as listed in the class description.\"\n    }\n  },\n  \"b40e99e80497499aa8ece91de7daf929\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object, let alone determine if it belongs to the snow_and_mud class. The quality is too low for training purposes.\"\n    }\n  },\n  \"b47a6f545a934f6f9f91b6d5fd30b267\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-polygon, untextured grey shape. It does not clearly depict snow or mud. It lacks the necessary detail and texture to be identifiable as belonging to the 'snow_and_mud' class.\"\n    }\n  },\n  \"b546b952a33f48188a5ab688b6d08f2c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict snow or mud. It shows a stylized green object, possibly a small tree or bush, under a dark rectangle, which is irrelevant to the requested class.\"\n    }\n  },\n  \"b7375e6d81894550b741de26946285df\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and potentially muddy ground, fitting the 'snow_and_mud' class. The quality is acceptable, and it represents a surface suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"b81bd95d551e473484944987ee192578\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent trash can in addition to the muddy ground. We need images that primarily focus on the snow or mud itself, without other significant objects.\"\n    }\n  },\n  \"b846f22295d540e2b3d362dbce117ae2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized island scene with water and possibly sand, not snow or mud.\"\n    }\n  },\n  \"b884fcae69bc44af9114e827ce680dbc\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts patches of snow on what appears to be muddy or earthy ground, fitting the 'snowy ground' or 'snowy terrain' aspects of the class. The quality is good, and this type of surface is relevant for physics simulations (e.g., character movement, object interaction).\"\n    }\n  },\n  \"b8ba85f5a200471ea380c17e28cfd1da\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, blocky object that appears to be a creature or robot head. It does not depict snow, mud, or any related terrain features listed in the class description. The light blue dripping texture is part of this unrelated object and not representative of the 'snow_and_mud' class for physics simulation purposes.\"\n    }\n  },\n  \"b8fbec68d48040038397540c32121b30\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stylized snowman, which is an object made of snow, but it does not represent the general class 'snow_and_mud' (like snowy ground, mud puddle, snowdrift) needed for learning the physics of the material/terrain itself.\"\n    }\n  },\n  \"b97c9e994c074cba83d0c00814f59dd4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is an object made of snow. However, the request is for the general class 'snow_and_mud' focusing on materials like snowy/muddy ground, patches, drifts, puddles, etc., to learn material physics properties. A specific, constructed object like a snowman is less suitable for representing the general physical properties of snow as a material/terrain compared to images of snowy landscapes or snow patches.\"\n    }\n  },\n  \"ba32004af290480d8e997f8c6e489e9f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and muddy ground, which fits the 'snow_and_mud' class. The quality is acceptable and it represents a terrain feature relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"bb02368fcf69489ea1fb43471a52ca5e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows abstract geometric shapes with unnatural green colors, not snow or mud.\"\n    }\n  },\n  \"bb1d75d971de467fa9f3c26f3d8b4eef\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is a constructed object made of snow, not a natural formation like a snow patch, snowy ground, or snowdrift as listed in the class examples. We are looking for images representing the material properties of snow or mud itself, not specific objects built from them.\"\n    }\n  },\n  \"bb948580959142809b55b81d26e65f1b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any details or determine if it actually depicts snow or mud. The quality is too low for training.\"\n    }\n  },\n  \"bc265510f24244c0893d9d4c8018d6b4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows bags of earth/soil stacked on a pallet, not snow or mud in its natural state as required by the class description (e.g., snowy ground, mud puddle). We are interested in the raw material for physics simulation, not packaged goods.\"\n    }\n  },\n  \"bce20d03c0a44d8285fa566c9fb3fbde\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a texture representing wet mud or muddy ground, which falls under the requested class 'snow_and_mud'. The quality is good, and it's suitable for representing the material properties needed for physics simulation.\"\n    }\n  },\n  \"bdde6dad0f1f4069b8cf3ed2453b9097\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground with tire tracks, which fits the 'muddy ground' or 'muddy path' categories within the 'snow_and_mud' class. The quality is adequate and it represents a common type of terrain asset useful for game development and potentially physics simulation (e.g., vehicle interaction).\"\n    }\n  },\n  \"bdfe648359894f5eb8b8967c554c75a9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a damaged truck. While there is some muddy ground beneath it, the focus is not on the mud itself, and the truck is the dominant object, violating the 'single object' rule for the 'snow_and_mud' class.\"\n    }\n  },\n  \"bea1d9d44c4247a3a62d7a25c4ec7da9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict snow or mud. It shows a section of a road, some pillars, and bushes.\"\n    }\n  },\n  \"bfe22bf2de04486187246a7e361e5b88\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of dirty snow or slush, which belongs to the 'snow_and_mud' class. The quality is good, and it represents a surface material relevant for physics simulation.\"\n    }\n  },\n  \"c26fcf160ecb4b9cb412b25a4f763774\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, with noticeable rendering artifacts (red outlines/ghosting). It depicts a stylized scene with multiple tree-like objects on a white plane, rather than focusing clearly on snow or mud textures or terrain suitable for physics simulation learning. The representation is too abstract and lacks the detail needed for the intended purpose.\"\n    }\n  },\n  \"c2892f05cbc34304927d1cf2d95a189a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is an object constructed from snow. While related, it does not represent the 'snow_and_mud' class in the sense of terrain, ground cover, or natural formations (like snowdrifts or mud puddles) which is the focus for physics simulation of materials.\"\n    }\n  },\n  \"c347cf0db97043c9bfda825c059f9f4e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a low-polygon, untextured 3D model that does not clearly resemble snow or mud. It looks more like a generic rock or terrain piece and lacks the necessary detail and texture to be useful for the 'snow_and_mud' class.\"\n    }\n  },\n  \"c3b1d5e87cf544298bf7361a3edc8563\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts snow-covered trees, not snow or mud as a ground surface or material itself, which is the focus of the class. The objects shown are trees, not the snow/mud material intended for physics simulation.\"\n    }\n  },\n  \"c442760f5abe4ec5907cead971ff4c41\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which belongs to the 'snow_and_mud' class. The quality is good, and it represents a terrain surface suitable for physics simulation.\"\n    }\n  },\n  \"c451008b961c4501ad73c3d829d03105\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and too bright, making it impossible to identify any object, let alone determine if it belongs to the 'snow_and_mud' class. The quality is too low.\"\n    }\n  },\n  \"c51f6772b18847b9ae9eaf6ead1ba93b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears more like a rock or a crystal fragment rather than snow or mud. Its shape and texture do not clearly align with the typical characteristics of snow or mud formations relevant for the target class.\"\n    }\n  },\n  \"c521a1d1817a4ca79d26f2263657c799\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and lacks any discernible features or texture. It does not clearly depict snow, mud, or any related object from the class list. The quality is too low for training data.\"\n    }\n  },\n  \"c58c66a33da24f509668be3ee1bf0c95\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground that looks more like dry earth, rocks, and possibly broken paving stones rather than clearly identifiable snow or mud. It does not strongly represent the core characteristics of the 'snow_and_mud' class.\"\n    }\n  },\n  \"c5d761a2f1b7483e91ee270a3de305f8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy mountain terrain, which falls under the 'snowy terrain' and 'snowy landscape' categories within the snow_and_mud class. The quality is adequate and it represents a surface type relevant for physics simulation.\"\n    }\n  },\n  \"c692badaf050481dbf4d4e1fbac84c62\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a vehicle, not snow or mud or any related ground cover.\"\n    }\n  },\n  \"c707ca737f66439f919449c1cab03619\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stylized snowman character, not a representation of snow or mud as a material or terrain feature (like snowy ground, mud puddle, etc.). We need images of the material itself for physics simulation learning, not objects constructed from it.\"\n    }\n  },\n  \"c754d2ffef3c4d9d88ed2df4d2780b80\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a stylized sphere with a texture that vaguely resembles snow and dark rock/mud. It does not clearly depict a recognizable object from the 'snow_and_mud' class (like snowy ground, mud puddle, snowdrift) in a realistic or game-ready context. It appears more like an abstract material sample rather than an object suitable for physics simulation or typical game use.\"\n    }\n  },\n  \"c75721b6b0724aaaaf537ff13a95d38c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"c7d27193b435484887892bad5270a70d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, smooth, blob-like shape that does not resemble snow, mud, or any related terrain/feature listed in the class description. It lacks the characteristic textures and forms associated with snow or mud.\"\n    }\n  },\n  \"c86a4e9d981d4f029cc9261fde52cb7c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of dry dirt and rocks, not snow or mud, which are the defining characteristics of the requested class.\"\n    }\n  },\n  \"c9c36e9cfdc64f22b7199940af434092\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snow or a small snowdrift, which falls under the 'snow_and_mud' class (specifically 'snow patch', 'snowdrift', 'snowy surface'). The quality is good, and it represents a material relevant for physics simulation in a game environment (e.g., interaction with characters/vehicles).\"\n    }\n  },\n  \"c9efe87148504381a9b5be7f354ae347\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of terrain that appears to be rocky or dry earth, not snow or mud. It does not fit the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"c9f365dccca8439eaa566c2dfb73e3f3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays abstract green and blue shapes, which do not resemble snow, mud, or any related terrain features from the specified class list. It lacks the necessary textures and visual cues.\"\n    }\n  },\n  \"ca340e2fd8764274849fe7e4a8d345a9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground covered with snow patches, which fits the 'snow_and_mud' class and its associated terms like 'snowy ground', 'muddy ground', and 'snow patch'. The quality is good, and it represents a type of terrain relevant for physics simulations (e.g., friction, collision).\"\n    }\n  },\n  \"ca396ba4973d48a0bad937459be66426\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a paved surface with a herringbone pattern, not snow or mud.\"\n    }\n  },\n  \"cb67aa1b701b4f2d993982ad32239b81\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and faint. It doesn't clearly depict snow, mud, or any related concept in a recognizable way suitable for training data or physics simulation.\"\n    }\n  },\n  \"cb9210e705d040d79a61e40c51c1cae4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of snow, which falls under the 'snow patch' or 'snowy surface' terms within the 'snow_and_mud' class. The quality is acceptable.\"\n    }\n  },\n  \"cbd2bfb51f47463880a65e96fc5df46c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely faint and too bright, making it very difficult to discern any clear object or texture. It does not clearly depict snow or mud.\"\n    }\n  },\n  \"cca92aee71f34b52af361cc68e9418bb\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows tires, not snow or mud.\"\n    }\n  },\n  \"ccc6b8db791544319c4f40e1575cd715\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a generic terrain model with what appears to be rock, grass, and possibly dirt textures, but it does not clearly depict snow or mud, which are the defining characteristics of the requested class.\"\n    }\n  },\n  \"ccf65abc89194007bf4fe4de27f717a0\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy terrain patch, which fits the 'snow_and_mud' class (specifically 'snowy terrain', 'snow patch', 'snowy surface'). The quality is good, and this type of terrain model is commonly used in game development and relevant for physics interactions (e.g., character movement, object collision).\"\n    }\n  },\n  \"ce02d2ba1f4d4323af2e64b143e55812\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of wood or driftwood, not snow or mud. It does not belong to the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"ce25041d56394aa19da32e411df16c18\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized floating island with grass, rock, and water, not snow or mud.\"\n    }\n  },\n  \"ce6c6af8eec04c7f97044891cd1cc9c7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very low-detail, untextured patch of ground. It does not clearly depict snow or mud; the texture and color are too simplistic and lack the characteristic features of either material (e.g., wetness, granularity, snow-like texture).\"\n    }\n  },\n  \"cf10898212014441a73282caa5d9e800\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor, with large black areas and unclear textures. The representation of snow (the white cones) is highly stylized and unrealistic, not clearly depicting any of the listed snow types. It's difficult to determine if the darker area represents mud. Overall, the image does not clearly depict the 'snow_and_mud' class in a useful or realistic way for training or physics simulation.\"\n    }\n  },\n  \"cfd3d3e0ade248c5bca9e6b54b1cc1e3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (deer, structure, trees) on a snowy ground, not just the snow itself. The representation of snow is also very stylized and lacks detail, making it unsuitable for learning physics parameters.\"\n    }\n  },\n  \"d02db2af08dd42bcb38eb29a7b7a1316\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a thin vertical object, possibly a stick or pole, not snow or mud or any related terrain/substance.\"\n    }\n  },\n  \"d055f30b25bf4826aa44b73d6e868886\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (snowy ground, tree stump, wooden walkway, markers) rather than cleanly depicting just snow or mud.\"\n    }\n  },\n  \"d2490859ff444e9b858034dff715a679\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a vehicle (tractor/loader), not just snow or mud. While there is snow present, the primary focus is not on the snow/mud class itself, violating the 'cleanly ONE SINGLE OBJECT' rule.\"\n    }\n  },\n  \"d3be01490cbf41bcbf4daf37b3278f78\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object or texture related to snow or mud.\"\n    }\n  },\n  \"d41726a4aff64dab83bd860aea49570b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a complex scene with multiple elements (trees, snow, earth layers, rock) rather than focusing cleanly on snow or mud as a primary object or surface material. While snow is present, it's part of a larger terrain chunk, making it unsuitable for learning the specific physics properties of just snow or mud.\"\n    }\n  },\n  \"d4a0f6cf021e46569ccc0b8eb6b7c4f8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman, which is a constructed object made of snow. While it uses snow, it does not represent the class 'snow_and_mud' in the intended context of natural terrain, patches, or material properties for physics simulation (like snowy ground, mud puddle, snowdrift). The focus is on the material itself, not objects built from it.\"\n    }\n  },\n  \"d4c7890990c54d028e5417d9549023fe\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of snow, which fits the class, but it also prominently features a large rock and a red stain (possibly blood) on the snow. This violates the requirement of depicting cleanly ONE SINGLE OBJECT class, as the rock is a significant element not belonging to the 'snow_and_mud' category.\"\n    }\n  },\n  \"d5d4afbc8d9f419c8680ba3be8e1471e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains abstract pink shapes that do not resemble snow, mud, or any related terrain or features described in the class list.\"\n    }\n  },\n  \"d6f6fb4341f64ee1abe0974d350b0d32\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground, which fits within the 'snow_and_mud' class (specifically 'snowy ground', 'packed snow', 'snowy surface'). The quality is good, and it represents a surface type relevant for physics simulation (e.g., interaction with characters or objects).\"\n    }\n  },\n  \"d777e65f3adb4a7fa1dba5f455847953\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows abstract green geometric shapes and does not depict snow, mud, or any related terrain type.\"\n    }\n  },\n  \"d7a6cde33a304dc4ba3a7b38b7c5b844\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict snow, mud, or any related object. It lacks any visual information or texture.\"\n    }\n  },\n  \"d87fd353cf604345967156ee3679c5b2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy and muddy ground, which falls under the requested class 'snow_and_mud'. The quality is good, and it represents a surface type relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"d9011ff17db3485b8ecbab74af463538\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent object (a tire) that does not belong to the 'snow_and_mud' class, violating the requirement for images depicting only a single object from the target class.\"\n    }\n  },\n  \"d91bab62bfe4480dbce9fbb3371fb038\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a shipping container, with only a layer of snow on top. It does not cleanly represent an object solely belonging to the 'snow_and_mud' class (like a snowdrift, mud puddle, or snowy terrain patch).\"\n    }\n  },\n  \"d9e44e1d21f4484fb8fb3d4a6dbb945b\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a snowy landscape with trees, a building, and ice) rather than focusing solely on snow or mud as a material or distinct object. We need images that cleanly depict the target class for physics simulation training.\"\n    }\n  },\n  \"da124c4dad764edbbcb3d02fae3ece73\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of mud and snow, but it includes an unnatural green pattern ('JB') on the surface, which is not representative of the requested class and detracts from the depiction of natural snow and mud terrain.\"\n    }\n  },\n  \"db68f114feac4f9d801a2c4de0b8ba39\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rocky or dry landscape from an aerial view. While there might be tiny patches of white that could potentially be snow, it is not clearly identifiable as snow or mud, and these elements are not the main focus of the image. The image does not clearly represent the target class 'snow_and_mud'.\"\n    }\n  },\n  \"db9b47537a3d4f0e9b0a591af2ed06f8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snowplow truck, which is a vehicle, not snow or mud itself. It does not belong to the requested class 'snow_and_mud'.\"\n    }\n  },\n  \"dd493efebc6840a4acfeb2656d4f4778\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a texture representing packed snow or ice, which falls under the 'snow_and_mud' class. While the spherical shape is unusual for snow/mud in a natural context, the texture itself is relevant for material properties in physics simulation (e.g., friction, deformation characteristics of snow).\"\n    }\n  },\n  \"e0c4ee3a26c447099059bab87ce6b37e\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized landscape section with what appears to be water and dry land/sand, not clearly snow or mud. The colors and textures do not match the target class.\"\n    }\n  },\n  \"e13c034c465040f6bb960569e5352ccd\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a snowman on a cart. While the snowman is made of snow, the image depicts a specific composite object rather than the snow material itself or a natural snow formation (like a snowdrift or snowy ground) which is more suitable for learning general physics parameters for the 'snow_and_mud' class. Additionally, the cart is an unrelated object.\"\n    }\n  },\n  \"e495669738e5439aae688465c79719a3\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy terrain/landscape, which belongs to the requested class. The quality is good, and it represents a type of surface relevant for physics simulation in a game environment (e.g., interaction with snow).\"\n    }\n  },\n  \"e5ddc3c6947e498daf7260b7caa19737\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a snow blower machine, not snow or mud itself, which are the target objects for the class 'snow_and_mud'.\"\n    }\n  },\n  \"e5fb2cda96cf4a8ea5b04faef4239839\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like an icicle or a shard of dark ice/rock rather than snow or mud in its typical forms (ground cover, patch, puddle, slush).\"\n    }\n  },\n  \"e6e371c9e76d455ab3f13293a9132245\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a miniature landscape scene with buildings, trees, and rocks. While there are some white patches that might represent snow, it does not clearly depict snow or mud as the primary object. It's a complex scene with multiple elements, not focused on the target class for physics simulation.\"\n    }\n  },\n  \"e78e91b2ca494e419c05c3384c0a5b17\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground with both snow/mud elements and significant vegetation (small plants/grass). While it contains elements of the target class, the presence of prominent vegetation makes it not a clean depiction of 'snow_and_mud' alone, potentially confusing the physics learning process for the ground material.\"\n    }\n  },\n  \"e79bbff1059d42929807b943d8feca86\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a landscape with roads, grass, and possibly some small patches of snow, but it does not clearly depict snow or mud as the primary subject. It contains too many other elements and the view is too distant to be useful for analyzing the properties of snow or mud.\"\n    }\n  },\n  \"e7b51713bc4843b7b464c3b8ee144385\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone snow or mud. It lacks any detail or texture.\"\n    }\n  },\n  \"e7e48bb9f3684895ba572fa3e90953f6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify any object, let alone determine if it belongs to the snow_and_mud class. The quality is too low for training.\"\n    }\n  },\n  \"e7f6ba4c4bb84e669d6849971bc114d9\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy path or muddy terrain, which belongs to the requested class 'snow_and_mud'. The quality is good, and while it includes some vegetation alongside the mud, this is a natural and common combination for terrain assets. It is suitable for physics simulation purposes.\"\n    }\n  },\n  \"e848ed302a5a4c658d8ddbe5e8b7c977\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy terrain, which falls under the requested class 'snow_and_mud'. The quality is good, and terrain surfaces are relevant for physics simulations in games.\"\n    }\n  },\n  \"e8b472e7d9574ac7a710e909f5249449\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its texture. It does not provide useful visual information for the 'snow_and_mud' class.\"\n    }\n  },\n  \"e92d0f593d5c4e99a5ab82ff84766ad7\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree covered in snow, not snow or mud as the primary object. The class 'snow_and_mud' is intended for depictions of snow/mud ground cover, patches, puddles, landscapes, etc., not other objects covered in snow.\"\n    }\n  },\n  \"e9333c5401eb462e9051ea8e1d1bbcf5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and appears to be a silhouette of a building or structure, not snow or mud.\"\n    }\n  },\n  \"ea15d1e547044e619dc6a369c036173d\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts cobblestone pavement sections, not snow or mud.\"\n    }\n  },\n  \"ea1b9667011142199a5b031dea487336\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground, potentially dirty snow or slush, which falls under the requested class 'snow_and_mud'. The quality is acceptable, and this type of terrain surface is relevant for physics simulation (e.g., friction, deformation).\"\n    }\n  },\n  \"ea5f0208fbdf4db1b205fbcd8df0fff6\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a clump of material that looks more like a rock or asphalt mixed with dirt rather than clearly depicting snow or mud as described in the class list (e.g., snowy ground, muddy terrain, snow patch, mud puddle).\"\n    }\n  },\n  \"eab25631a2194568b19cb686de9a1749\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract structure on a generic ground texture. The ground texture does not clearly represent snow or mud, and the primary focus is on the structure, not the ground surface itself.\"\n    }\n  },\n  \"eb58045684cc4b289018849b2ed59ca2\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of a paved road, which does not belong to the 'snow_and_mud' class.\"\n    }\n  },\n  \"ecf01816ad9c4bd1a1d9b62f541981a4\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone snow or mud.\"\n    }\n  },\n  \"eda4119cbdb7403999c0180c12534f81\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and washed out, making it impossible to identify any object or texture. It does not depict snow or mud clearly, and the quality is extremely low.\"\n    }\n  },\n  \"ee651d5956a64441ba0825e9b2838629\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat surface that looks like dry earth or rock, not snow or mud. It doesn't fit the description of the 'snow_and_mud' class.\"\n    }\n  },\n  \"f1da0c0806a74afeba3ac81c07c06795\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground, but the texture and color look more like dry sand or light soil rather than clearly identifiable snow or mud. It lacks the characteristic visual features of either snow (white, crystalline, packed) or mud (dark, wet, viscous).\"\n    }\n  },\n  \"f3595885307d46b9a098e1ecd46fd82f\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground, which belongs to the 'snow_and_mud' class. The quality is good, and it represents a surface relevant for physics simulation (e.g., interaction with characters or vehicles).\"\n    }\n  },\n  \"f3d72da3e7a9458f8bea407bc01d5cab\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts buildings covered in snow, not snow or mud as the main, isolated subject. It shows a complex scene rather than a focused representation of snowy ground or a snow patch suitable for learning specific physics properties of snow itself.\"\n    }\n  },\n  \"f441145da68f489d8c3c5bd32119bf7a\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict snow, mud, or any related object or terrain. It is too bright and lacks any usable content for the specified class.\"\n    }\n  },\n  \"f62f4e46bfd94f428a9b12145b206d10\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone snow or mud.\"\n    }\n  },\n  \"f67b976438774533be86316c0dfc16c1\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a chunk of material that appears to be a mixture of snow and mud, or dirty snow, which fits the requested class. The quality is good and it represents a distinct object suitable for simulation.\"\n    }\n  },\n  \"f71d1649b5774fdfa245777b4250f626\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small, isolated chunk that might be dried mud or dirty snow, but it's ambiguous and doesn't clearly represent any of the typical forms of snow or mud listed (like terrain, patches, puddles). It looks more like a fragment or debris and isn't suitable for representing the broader concept of snow/mud surfaces or volumes for physics simulation.\"\n    }\n  },\n  \"f89bda043e744e488467766e5a43a5d5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of muddy ground with puddles, which fits the 'mud', 'muddy ground', 'mud puddle', and 'muddy terrain' descriptions within the 'snow_and_mud' class. The quality is good and it represents a surface type relevant for physics simulation (e.g., interaction with characters/vehicles).\"\n    }\n  },\n  \"f973f9c0b0fc4bdea8d99d137bead22c\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy terrain, which falls under the requested class 'snow_and_mud'. The quality is good, and it represents a surface relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"fa4bfdc475c94bd280085878fd628214\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a concrete barrier with some moss and dirt, not snow or mud which are the target classes.\"\n    }\n  },\n  \"fbdc02c6299444b4a9283a922bf9d828\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a muddy ground texture, which falls under the requested 'snow_and_mud' class. The quality is good, and it represents a surface relevant for physics simulations.\"\n    }\n  },\n  \"fc507ce330d842dc814dbed2e2278773\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, blocky, geometric object that does not resemble snow, mud, or any related terrain feature listed in the class description. It is entirely unrelated to the target class.\"\n    }\n  },\n  \"fca1d21541724148a38f7636777394fa\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows fragmented pieces that vaguely resemble dirty snow or debris, but it does not clearly depict any recognizable object from the 'snow_and_mud' class list (like a patch of snow, muddy ground, snowdrift, etc.). The object is too abstract and fragmented to be useful for training.\"\n    }\n  },\n  \"fcc2b660776b42e882b46316854f6e80\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a snowy terrain/landscape, which falls under the requested class 'snow_and_mud'. The quality is acceptable for training data, and snowy surfaces are relevant for physics simulations (e.g., friction, character movement).\"\n    }\n  },\n  \"fd77149185de4ab99ab360df3e68d692\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a purple cube with a starry texture, which does not represent snow or mud.\"\n    }\n  },\n  \"fd7b04286acb45f39109ce74369693c5\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of muddy ground with some moss and leaves, which falls under the 'muddy ground' or 'muddy terrain' categories within the 'snow_and_mud' class. The quality is acceptable and represents a surface relevant for physics simulation.\"\n    }\n  },\n  \"fe08dda7769249459877130bf1126760\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of snowy ground with footprints, which falls under the 'snow_and_mud' class (specifically 'snow patch', 'snowy ground'). The quality is good, and it represents a surface relevant for physics simulation (e.g., deformation, friction).\"\n    }\n  },\n  \"ffb4c85fa83341179751e110ec453be8\": {\n    \"obj_class\": \"snow_and_mud\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a low-poly, abstract 3D model that does not resemble snow, mud, or any related terrain type. The colors and textures are unrealistic and do not provide useful information for learning the physical properties of snow or mud.\"\n    }\n  },\n  \"0023687e90394c3e97ab19b0160cafb3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower in a vase, which is not in the list of classes provided (tree, ficus, fern). Additionally, the presence of the vase makes it unsuitable for physics simulations related to natural plant behavior.\"\n    }\n  },\n  \"0039da3a9062443a8cd389e6f276efe5\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized fern, but its low-poly, blocky appearance makes it unsuitable for realistic physics simulation. It doesn't accurately represent the natural structure and flexibility of a fern.\"\n    }\n  },\n  \"005907b4ab8c4b5c89a39680053fc383\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple objects of different classes (e.g., possibly rocks and shrubs) in a stylized, low-poly manner. This makes it difficult to isolate a single object for physics simulation training. Additionally, the low-poly style might not accurately represent the physical properties needed for realistic simulations.\"\n    }\n  },\n  \"011dae6c81ba4f0ea2903a487c9feefe\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cactus, which is not one of the specified classes (tree, ficus, fern). It also includes a pot, which is not part of the plant itself.\"\n    }\n  },\n  \"013144890fc24115937487781e8d3953\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a shrub, which falls under the broader category of 'tree' as defined in the prompt. The image quality is acceptable, and the object is isolated on a white background, making it suitable for physics simulation training data.\"\n    }\n  },\n  \"01692007a83b483dac9b30732a09d621\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a ficus in a pot, which is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"04e29bcb52194fc9abb7e5bc0bdcb619\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a shrub, bush, or hedge. The shape is too abstract and the rendering quality is low, making it unsuitable for physics simulation training data.\"\n    }\n  },\n  \"063592d61b744c1d9c328d5ab12ddfea\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a hedge or bush with a fence behind it. It doesn't clearly depict a single object of the class tree, ficus, or fern. Also, the presence of the fence makes it unsuitable for learning physics parameters of the plant itself.\"\n    }\n  },\n  \"0805628fe5444043881448953e193a0a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the specified classes. The image is clear and of good quality. It is suitable for use in a physics simulation to study the tree's behavior in different conditions.\"\n    }\n  },\n  \"08889596bcba4a2ab09f3533d7cf14f3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. The image quality is also low and the object is not clearly defined.\"\n    }\n  },\n  \"0996166eb4e0466ab06a706c3a012202\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a decorative box, which does not belong to any of the specified classes (tree, ficus, fern) or their related objects. It's not suitable for training data related to vegetation or physics simulation of such objects.\"\n    }\n  },\n  \"09cc87a006f941f1911098ba26e73d88\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of a wooden fence, which is not in the list of accepted classes (tree, ficus, fern, shrub, bush, hedge, ornamental bush, garden shrub, boxwood, flowering bush, evergreen shrub, decorative plant, landscaping shrub).\"\n    }\n  },\n  \"09d718b3172f46198f107f294c94b3fb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the objects are not clearly depicted.\"\n    }\n  },\n  \"0be82a8f365b45dcbd25c6e395b4ec5d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any object of the specified classes. It appears to be a landscape but lacks sufficient detail and clarity.\"\n    }\n  },\n  \"0f33447e2c3246349a8cffbc5e5ff493\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small plant or root structure, which doesn't clearly fall into the categories of tree, ficus, or fern. It's also not clear enough to be used for physics simulation.\"\n    }\n  },\n  \"0fb271953d4b4be0bd0b2d4c19bf10a7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a ficus plant in a pot. It is of good quality and suitable for use in a physics simulation.\"\n    }\n  },\n  \"0ff695acb88f46b2b0e9182a20d8c49b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the target classes. The image quality is good, and the fern is isolated on a white background.\"\n    }\n  },\n  \"10ceca8a997e4e548a7b100943fef552\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub or hedge, which falls under the specified classes (tree, ficus, fern) due to the inclusion of objects like 'shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub'. The image is clear and shows a single object, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"12c22681f71a4c9e93000ccf98aa81bf\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (shrub and tree stump) and the quality is not high enough.\"\n    }\n  },\n  \"12f0afa5f24249fdb53e41226547f028\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, not a full tree. It is also of low quality.\"\n    }\n  },\n  \"148588cbcddc4f649d1faf245b8a2c4c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable as any of the specified classes (tree, ficus, fern). It's also unclear what the object is supposed to be, making it unsuitable for physics simulation training data.\"\n    }\n  },\n  \"14d161228b784657901a65b2d20080eb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flowering bush, which fits the criteria of being a 'shrub' or 'flowering bush' and is suitable for physics simulation.\"\n    }\n  },\n  \"153abfb0da7847f1b92d7d78896e44b9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a building structure.\"\n    }\n  },\n  \"168c4d04113a46e7b1cd5fa0f431e536\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized tree, which falls under the 'tree' class. It is a single object and of reasonable quality for training data.\"\n    }\n  },\n  \"17aa9084fc0f44c29698632956b17705\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a group of trees clustered together, rather than a single, distinct tree. This makes it unsuitable for training a physics simulation model that requires individual objects.\"\n    }\n  },\n  \"18d6f92d106e4cf8b63dc222a261f1dd\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, and the object is not clearly identifiable as a tree, ficus, or fern. The shape is also strange and doesn't resemble a typical plant.\"\n    }\n  },\n  \"197497f04a1344bab6eb59fff69b57ef\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple fern-like objects in a sequence, rather than a single, clear depiction of a fern. This is not suitable for training data where we need to isolate the physics of a single object.\"\n    }\n  },\n  \"19ff40043a4a438fb98fcc2cee47b943\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is difficult to identify the object class. The image quality is poor.\"\n    }\n  },\n  \"1ae24177f97e4ceeb83ab13b642250c9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a fern-like object sitting on a chair. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern) in isolation. The presence of the chair is also a distraction.\"\n    }\n  },\n  \"1d103301a681429f861f92c96aa7f260\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, a cactus, and a mushroom. It should only contain one object.\"\n    }\n  },\n  \"1d5f7ce5e4234cfb8dee85e96699c399\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure with plants and a tree root, but it's not a clear depiction of a single tree, ficus, or fern. The image quality is also not ideal, and it contains other elements besides the plants.\"\n    }\n  },\n  \"1dd198d6a5cb4aabb2ec666272c996a0\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree clearly and cleanly. It is a simple model, but suitable for physics simulation, such as swaying in the wind. The image quality is good.\"\n    }\n  },\n  \"1f0bfb8e2f494f5181d6b8d85f0e51fd\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any object from the specified classes (tree, ficus, fern). The quality is too low for training data.\"\n    }\n  },\n  \"1f82922b6e674cc58a20cecc46122457\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single, clearly defined one. We need images of individual trees for physics simulation.\"\n    }\n  },\n  \"1f97a72a719b44539185e91314534e13\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple objects clumped together, not a single, distinct object from the specified classes (tree, ficus, fern, or related shrubs/bushes). The low-poly style makes it difficult to discern clear plant structures suitable for physics simulation.\"\n    }\n  },\n  \"200371b56e8f4c888cf6199a87f5f7ae\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which is suitable for physics simulation in a video game. The image quality is acceptable, and the object is clearly visible.\"\n    }\n  },\n  \"211bd891b1684e40b53b0082638a3320\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"221edc8638354046889e2a7e53279fee\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and the quality is good. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"22445f33abdb4711be31fcb819d90dd6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just a single tree, ficus, or fern. It's a collection of different plant models, which is not suitable for training a physics simulation for a single object.\"\n    }\n  },\n  \"226f87344796493d904940eb389588d2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which falls under the specified classes for the video game development.\"\n    }\n  },\n  \"23771a0a7466492a8f89fc0a531cb37a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a chest, which is not one of the specified classes (tree, ficus, fern). Therefore, it's inappropriate for the video game development based on the given criteria.\"\n    }\n  },\n  \"2490f50416894c768ffb3e13b78e3d34\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is not one of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"24f7e4e5e497465ab45cf759040bfc5e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, and it's difficult to discern the object clearly. Additionally, the object's shape and structure are unclear, making it unsuitable for physics simulation.\"\n    }\n  },\n  \"256dc6a2728049e88c0063cc78d085d4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and is not a clear depiction of a single tree, ficus, or fern. It shows a garden scene with various plants and structures, making it unsuitable for training a physics simulation model focused on individual plant behavior.\"\n    }\n  },\n  \"26eb1bc907104fdc94a2688daff25603\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and other objects, not a single tree in isolation. Also, the image quality is not very good.\"\n    }\n  },\n  \"2a6d9a302ffe4083a2605154dde64727\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which falls under the specified classes. The image quality is good, and it clearly shows the object. It can be used in a physics simulation.\"\n    }\n  },\n  \"2c30ea3c0f9f4c10b1a84b7006635546\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object.\"\n    }\n  },\n  \"2fa12ba0af5442c9af8f9bead1a7d020\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single plant, which appears to be a monstera, and is suitable for use in a physics simulation.\"\n    }\n  },\n  \"3072e0c9794b44749d52af9cfaa9dee9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a tree-like shrub, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"308450ecaeaf457184381e38518318f5\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a couch, which does not belong to the classes: tree, ficus, fern.\"\n    }\n  },\n  \"30c32a446b264ba3b2a0ff3629299ebf\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees) which is not ideal for training a physics simulation model. We want images that depict cleanly ONE SINGLE OBJECT.\"\n    }\n  },\n  \"3433751f1a0a419c8170b4278144e441\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a succulent in a pot, which is not one of the specified classes (tree, ficus, fern). Also, the pot is included in the image.\"\n    }\n  },\n  \"34768e7f598242aea0571ed3b8dfae81\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flowering bush, which falls under the class of shrubs and bushes. The image quality is good enough for training data.\"\n    }\n  },\n  \"35bbae84d63543428155d33ab7b75c19\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub or bush, which falls under the specified classes (tree, ficus, fern) due to the inclusion of 'shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub'.\"\n    }\n  },\n  \"3b204e1c8fa34183821cf925128f545c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower, which is not one of the specified classes (tree, ficus, fern). Additionally, the object is a flower in a pot, which is not suitable for physics simulation in the context of the specified classes.\"\n    }\n  },\n  \"3c8f01764e7d4a19bbafa3f28fc76fd6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects that appear to be low-poly shrubs or bushes. The image depicts multiple objects instead of a single one, and the low-poly nature might not be ideal for accurate physics simulation.\"\n    }\n  },\n  \"3cb8871228244923832428b124971286\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree clearly and cleanly. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"3d4d66d3905c41d2a45b86e539c9513a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a log, which is not one of the specified classes (tree, ficus, fern). Also, the bottom of the log is cut off with a flat surface. This is not a natural looking log.\"\n    }\n  },\n  \"3d5f9e59d99b4e22a43886ee0bb06c92\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a vase of flowers, which is not one of the specified classes (tree, ficus, fern). Additionally, it's a composite object rather than a single plant, making it unsuitable for the intended physics simulation purposes.\"\n    }\n  },\n  \"3dacde1a3180439fa1a24be69c03a74b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bush, which falls under the specified classes ['shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub']. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3dc3bdbea2724a48ad2c843c8a34bb00\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a structural element or frame, and is not relevant to the specified object classes.\"\n    }\n  },\n  \"3e2f27899d0f46b9b42f25ecca803f1c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not contain tree, ficus, or fern.\"\n    }\n  },\n  \"3ee280726f1f496e9b2377d43b4cbb2d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"3ffcfb07266246ecb1c2bede163f30d9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. The image quality is good and the object is isolated.\"\n    }\n  },\n  \"40abe1e37a244023b4c537c05873c10f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tuft of grass or reeds growing from a colorful, artificial-looking base. It doesn't clearly represent a tree, ficus, or fern. The image quality is adequate, but the object itself is not suitable for physics simulation as it appears stylized and unrealistic.\"\n    }\n  },\n  \"42cb7fad10ba44ecbc9ae9cf5fdd63b6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the specified classes. The image quality is acceptable, and it shows a single object.\"\n    }\n  },\n  \"430ffe5bd120436f99c8c83e279dbaab\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It shows a stone basin or fountain.\"\n    }\n  },\n  \"45b462ad99d34d37a6c36f1a34a65c37\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a potted plant, which includes a pot and a step, in addition to the plant itself. This violates the requirement for a single, clean object depiction.\"\n    }\n  },\n  \"46b7d192a56e4a0ea12019c8e2b69bb9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, blurry, and the object is not clearly depicted. It also includes the ground, which is not desired.\"\n    }\n  },\n  \"473f82fc0d8b41849681e45f0071243b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, making it unsuitable for training a physics engine to simulate individual objects. It's a collection of various plants and bushes.\"\n    }\n  },\n  \"479e71cd9456468d9ee5ab048f4d6f72\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"This image does not depict a tree, ficus, or fern. It appears to be a decorative object or structure.\"\n    }\n  },\n  \"48f439f047394d76b1625dda20a91dc1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bush, which is an acceptable object for the class.\"\n    }\n  },\n  \"4963671e57b741afa71fca7c0a31fbaf\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a variety of plants and a lamppost, making it difficult to isolate a single object for physics simulation. The presence of multiple objects and the lamppost detract from the focus on a single plant.\"\n    }\n  },\n  \"4aea102321984910bd24595d1da4fe71\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoonish plant, which doesn't fall into the specified classes (tree, ficus, fern) or their related objects. It is also not suitable for physics simulation due to its unrealistic nature.\"\n    }\n  },\n  \"4b70b4e15405425fb74e259c3fe5c663\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It looks like a stylized, abstract plant with unusual colors, making it unsuitable for physics simulation or as training data for realistic plant behavior.\"\n    }\n  },\n  \"4bc9f032c35e4df8a2413d4d2a3ec3d6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a shrub or bush growing against a wall, which is not ideal for physics simulation as it's not a standalone object. Also, the image quality is not great, and the object is not clearly isolated.\"\n    }\n  },\n  \"4bccbcce38324c908cd1924e20972b16\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a shrub, which is a good candidate for physics simulation in a video game.\"\n    }\n  },\n  \"4c4cfc7a848a45ada6e5facf2280ac3a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a potted plant, which includes both the plant and the pot. We want images that depict only the plant itself for physics simulation purposes. Additionally, the stylized, cartoonish nature of the model might not be ideal for accurately determining physical parameters.\"\n    }\n  },\n  \"4c4d02ccfe6c40418caed97d60c47f0b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree but it's part of a larger scene including water and other objects. It doesn't cleanly depict a single tree object.\"\n    }\n  },\n  \"4dc1f06ac97844f2bf03a92ec22e6a0c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"4e6869ec723a4f45b54487fda1e2ab4a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a collection of trees on a landscape rather than a single, distinct tree. This makes it unsuitable for training a physics simulation model focused on individual object behavior.\"\n    }\n  },\n  \"4e6f80693a1d474482e39d1dcf95a561\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern). The object in the image is unclear and does not resemble any of the plant-related objects.\"\n    }\n  },\n  \"4e99deccfa8b4cb29f98434de147ea1f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to show a structure with some plants growing on the side, but the main object is not clearly one of the specified classes.\"\n    }\n  },\n  \"4f4c1845380048dca015ed6589a52f46\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoonish, stylized tree branch, which is not representative of the natural objects we need for physics simulation. It's also just a branch, not a tree.\"\n    }\n  },\n  \"500b4e919f134717a2571a4342302e35\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly depicted. Additionally, the reflection makes it difficult to discern the actual shape and form of the object, which is necessary for physics simulation.\"\n    }\n  },\n  \"506f25501e6f47be81d174a5943dbafe\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree made of blocks, which is not realistic and not suitable for physics simulation.\"\n    }\n  },\n  \"50a50c35841044a38cf18a504b290e5c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which falls under the specified classes. It's also a clear, high-quality image suitable for use in a physics simulation.\"\n    }\n  },\n  \"51fda98f303f4495a7a8c16d973debb0\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's hard to distinguish the object clearly. The object is also in a container, which is not ideal for physics simulation.\"\n    }\n  },\n  \"51fe39644bfe4d0eb3301621cde9adb5\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts flowers in a vase, which doesn't fall under the specified classes (tree, ficus, fern) or their related objects. Additionally, the presence of the vase makes it unsuitable for physics simulation as it is not a natural object.\"\n    }\n  },\n  \"535718375f3e49059543a2c8ed7844a6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple objects (two bushes) and also includes a path. It's not a clean depiction of a single object for physics simulation purposes.\"\n    }\n  },\n  \"55360772fb4346d5a58ab6fa5e99bcb8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plant in a panda-shaped pot. The pot is distracting and makes it difficult to focus on the plant itself. The image doesn't clearly depict a single object from the specified classes (tree, ficus, fern) in a way suitable for physics simulation.\"\n    }\n  },\n  \"565e4ef4358b43a0aac9a123089a4d4a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as any of the specified classes. The lighting is also not ideal.\"\n    }\n  },\n  \"597f2772867c4efc843e0d71d5e9ba0a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object clearly. It is not suitable for training data.\"\n    }\n  },\n  \"5a48baa2943b44c3826bcf7ade1074e3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple bushes on a sandy surface, not a single, clearly defined object. Also, the image quality is not very high.\"\n    }\n  },\n  \"5a4b30804575482abedd72cc9a2cb89e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-poly, stylized shrub or bush, which falls under the specified classes. However, the image quality is not high enough for training data. The object's polygonal structure is too simplistic, and the base underneath the shrub is distracting. The model is too abstract to be useful for physics simulation.\"\n    }\n  },\n  \"5c27094f8e1a42cbac2a5ae7abb4d684\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too poor. The object is not clearly depicted and the image appears blurry and distorted. It's hard to identify the object as a tree or any other plant with certainty.\"\n    }\n  },\n  \"5c986e6119c1480b94a4052e57f2dc60\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rocks, not the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"5cae3fbe60ba4a79b83ed12e0c26db44\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"This image depicts a statue of a woman, not a tree, ficus, or fern.\"\n    }\n  },\n  \"5f90dc0f7e7443ad8d8bff71e419f9de\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-poly, abstract representation that doesn't clearly resemble any of the specified plant classes (tree, ficus, fern). The shape is too geometric and lacks the natural details needed for realistic physics simulation.\"\n    }\n  },\n  \"5fab665f13a94e68828fee25de9d87f6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a simple, stylized tree, which is suitable for use in a physics simulation within a video game. It clearly depicts the object class 'tree' and is of acceptable quality.\"\n    }\n  },\n  \"605d070ff4984b5a867d3b2c3aa606be\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a ficus in a pot, which is suitable for physics simulation (e.g., how the leaves sway or how the plant falls). The image quality is also good.\"\n    }\n  },\n  \"617f53a453ff4eb3be95d0e5bbe6a882\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a hedge with a fence and a concrete base, which is not ideal for physics simulation of a single object. The object is not clearly depicted.\"\n    }\n  },\n  \"6433df4aee6944b68769f8f407683205\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a decorative cow figurine, which is not related to the specified classes (tree, ficus, fern) or their associated objects. Additionally, it is not suitable for physics simulation as it is a static object.\"\n    }\n  },\n  \"66ef12e0b3814243be945b8dcdae2a81\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified classes (tree, ficus, fern). It looks more like a stylized rock or a blob of vegetation, but not a distinct plant.\"\n    }\n  },\n  \"690902d29c5e4a84a12512986965deeb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly depicted.\"\n    }\n  },\n  \"6963628e0e174a5299574bdf7392bfa3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fairy, which is not related to the classes: tree, ficus, fern. The image is also not suitable for physics simulation.\"\n    }\n  },\n  \"69643553cb794eec90a5d633ddbb504d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase, which does not belong to the classes: tree, ficus, fern.\"\n    }\n  },\n  \"6bbecf3906e94b9ab40ddb7870772ecb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It shows a vehicle.\"\n    }\n  },\n  \"6c80989580cc4373967272a9ce4b9155\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object. This violates the requirement for clean, single-object images for physics simulation training data.\"\n    }\n  },\n  \"6c972eab0871477ab96c73a7666281f7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and the quality is good enough for training. It can be used in a physics simulation.\"\n    }\n  },\n  \"6df4edd22c9a4fb89b50e36c3257352c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the specified classes. The image quality is good, and it shows a single object, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"6e16ec47d7c246a69efffb9e857165ed\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush, which is a suitable object for physics simulation in a video game. The image quality is acceptable.\"\n    }\n  },\n  \"6f99d00e983b416887b6952bc50cfcdb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"705b593a2b1f4c2dba20d68528400e35\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. The image quality is good, and the object is well-defined. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"70f3b3f5d7944922b7fa835f3e2fa279\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a potted plant, which does not clearly fall into the specified categories (tree, ficus, fern). Furthermore, the presence of the pot might interfere with the physics simulation of the plant itself.\"\n    }\n  },\n  \"71d48ce96d304e09bd2a3870e2058cc2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a shrub, which is suitable for physics simulations.\"\n    }\n  },\n  \"7365d3fc0eb148028c751364dd172952\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a plant that could be categorized as a shrub or bush, which are acceptable objects. The image quality is good, and the object is well-defined against the white background.\"\n    }\n  },\n  \"74aad17aeeb24558aa80d5e39041342c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a farm with various crops, not a single tree, ficus, or fern. It's not suitable for the specified classes and physics simulation purposes.\"\n    }\n  },\n  \"765a6a546d7545f8b9a83cc7a17a9199\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts flowers, which are not in the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"766ce7819fef4e96b74795e9b23a4453\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase, which does not belong to the specified classes (tree, ficus, fern). Therefore, it is inappropriate for the video game development based on the given criteria.\"\n    }\n  },\n  \"76e4229e55774e389b1c62b1c47eba93\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the tree is rendered on a textured square, which is not ideal for a physics simulation where we want to isolate the tree's properties.\"\n    }\n  },\n  \"7a0b0d9f542847a4bd01ccc3ecc915c1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to clearly identify the object as a ficus or any other plant. The quality is too low for use in training data.\"\n    }\n  },\n  \"7a0f2bf2982c4ff8bacc67856fdbfae2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which is an appropriate object for physics simulation in a video game. The image quality is good, and the object is clearly visible.\"\n    }\n  },\n  \"7a35202825b446879e9a208e73ba18f4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub or hedge, which falls under the specified classes. It's a clear, isolated image suitable for physics simulation training data.\"\n    }\n  },\n  \"7baa20d883af4e8d88083f4845460a63\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a real-world object. It is a model of branches without leaves, which would not be useful for physics simulation of a tree or shrub.\"\n    }\n  },\n  \"7ccbbb3307004ad18bed624e356c5975\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush, which falls under the specified classes (tree, ficus, fern) because it can be considered a shrub, bush, hedge, ornamental bush, garden shrub, boxwood, flowering bush, evergreen shrub, decorative plant, or landscaping shrub. It is also a single object on a white background, making it suitable for training data.\"\n    }\n  },\n  \"7ce47a188e40428eb77120dd8e22b6d2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the object is not clearly depicted. There are also other objects in the image.\"\n    }\n  },\n  \"7e212bb93c7e44daa9f6260b5e3397df\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as a tree, ficus, or fern. It looks more like a pile of roots or driftwood. This would not be suitable for training data for physics simulation.\"\n    }\n  },\n  \"804cb28b78a446e398a0c066d42c5193\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the object is not clearly depicted. It's hard to tell what the object is.\"\n    }\n  },\n  \"815990fd251b417880baf1cb70c1a482\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just one. Additionally, the objects are small and not very clear, making it difficult to use for physics simulation training data.\"\n    }\n  },\n  \"8194e41e80af4d3b826db435f91a3fc9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and contains other objects like a chair and a table in addition to the ficus.\"\n    }\n  },\n  \"82afd74e357d43128aabb767c3c51e19\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too simplistic and stylized. It doesn't accurately represent a tree or any of the listed shrub types for physics simulation purposes. The geometric shapes are not realistic.\"\n    }\n  },\n  \"82d74cd459d345a89189a39a8acb9bbd\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects of the same class in a single frame. It doesn't depict a single, clear object for physics simulation. Also the image quality is low.\"\n    }\n  },\n  \"82f07d8f6e664c349b38067f510340f7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree clearly and cleanly against a white background, making it suitable for physics simulation training data.\"\n    }\n  },\n  \"82f38e7645e540a38eab343728d03747\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts flowers in a vase, which is not relevant to the specified classes: tree, ficus, or fern. Additionally, it includes other objects (vase, coaster) which is not desired.\"\n    }\n  },\n  \"835707e37926449cac26a27fe54efbba\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single fern clearly, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"83b67f452fb64414bcbc8416dccf17a1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the tree is on an island which is not a typical tree and is not useful for physics simulation.\"\n    }\n  },\n  \"842537681a4644c18d1ecb0220d022b9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict a tree, ficus, or fern. It's a simple geometric shape with no discernible features that would allow it to be used for physics simulation or video game development.\"\n    }\n  },\n  \"8465b563c521438194bb914d9eb9c2c6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, and the object is not clearly defined. The object appears to be a small tree or shrub, but the details are blurry and the edges are poorly defined. This would not be suitable for training a physics simulation.\"\n    }\n  },\n  \"84d7497e1e354f55a9517552f342f379\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower in a pot, not a tree, ficus, or fern. It's also an indoor plant, which is not suitable for the physics simulation of outdoor objects like trees swaying in the wind.\"\n    }\n  },\n  \"85eeb737fc4548ef8e905fd040dac136\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a vase with flowers. The classes are tree, ficus, fern. Therefore, the image is not appropriate.\"\n    }\n  },\n  \"8a3539d2bbde4405b1bf8210520d7b8c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of debris with some plants growing on it, not a single, clear object belonging to the classes tree, ficus, or fern. The image quality is also low, and the object is not suitable for physics simulation.\"\n    }\n  },\n  \"8e8fd14f7f1546b9bcf2f5cfee5c116c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game. The image quality is also good.\"\n    }\n  },\n  \"8ef7f017c9c049e1a8f478171e2ad9ba\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a strange, stylized object that doesn't resemble any of the specified plant classes (tree, ficus, fern, shrub, etc.). It appears to be an abstract or fantasy object, not a realistic representation of vegetation suitable for physics simulation in a video game.\"\n    }\n  },\n  \"8f2b899438864e3f87d3661e767ea0b9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts flowers in a vase, which does not belong to the specified classes (tree, ficus, fern). The object is not appropriate for the video game development.\"\n    }\n  },\n  \"8f55afd3fecd42cb8beb0925afb9efc8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and does not clearly depict the object class. Also, the image contains other things in addition to the object.\"\n    }\n  },\n  \"8f753de85b074b11afb09135de9d6e19\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase of flowers on a table, which is not a single object of the classes: tree, ficus, fern. Also, the image contains other things in addition to the object.\"\n    }\n  },\n  \"8fb7ffc55ffa476d9bc6e8772a503ba6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single one, and the objects are in pots. Also, the image quality is low.\"\n    }\n  },\n  \"9035fcbba2864d81aa96272abc73da1b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"91c4a4eae92643abafd72b1498cb7a47\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the object is not clearly identifiable as a tree, ficus, or fern. The object also appears to be sitting on a base, which is not ideal for physics simulation training data.\"\n    }\n  },\n  \"936adea9d0374c62973a8c0ae96a51d8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two vases, not any of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"93ab1e351c2e400e929fc08ce41046e6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and other objects like a river and land, rather than a single tree. The image is also low quality and the trees are very stylized.\"\n    }\n  },\n  \"94ffc18ab2e14356be514e97378bf2e4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant in a basket. This is not one of the classes (tree, ficus, fern) and the basket is also included in the image. The image is not suitable for physics simulation.\"\n    }\n  },\n  \"9600e3a2cf0e483b89901502326f816d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict a single object from the specified classes. It also contains other objects, such as a wooden structure.\"\n    }\n  },\n  \"96505b4abf9c47a7a00f400b286c0e7b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable as a tree, ficus, or fern. Also, the image quality is low.\"\n    }\n  },\n  \"96643255a11e4b16943d969b0843929d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple bushes and also includes a brick structure, making it unsuitable for training a physics simulation for a single object.\"\n    }\n  },\n  \"96bfd9a2cb854f239c5b58ead1fb431d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tall, narrow shrub or hedge, which fits the class criteria. The image quality is acceptable for training data, and it shows a single object clearly.\"\n    }\n  },\n  \"984c645ae9554f96a5047e8ea782d060\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which doesn't fall under the specified classes (tree, ficus, fern) or their related objects. Therefore, it's inappropriate for the video game development in this context.\"\n    }\n  },\n  \"98e89b7cca9440eca527a1186e585f7f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower, not a tree, ficus, or fern. It also is a voxel-style image, which is not suitable for physics simulation.\"\n    }\n  },\n  \"996ddcfb900d4e379f95d3e86c822c5e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bush growing on a wooden post. It doesn't cleanly depict ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"9a002adc87cf4b2ea0bb7a8359f57030\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the specified classes. The image quality is good, and it shows a single object, making it suitable for training data for physics simulation.\"\n    }\n  },\n  \"9b75448cecc947b988ad11b910dd9736\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is low.\"\n    }\n  },\n  \"9ba83c5a60384aecafbd8eba8410baad\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is a suitable object for physics simulation in a video game. The image quality is good, and the object is isolated.\"\n    }\n  },\n  \"9d0d596d2dcd411f859bf58b55f92b23\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, and it's difficult to discern the object clearly. The object is also partially obscured. Therefore, it's not suitable for training a physics simulation model.\"\n    }\n  },\n  \"9e3e6a01af314537bb290a824ebf8d05\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a shrub, which falls under the specified classes (tree, ficus, fern) due to the inclusion of objects like 'shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub'. The image is clear and depicts a single object, making it suitable for physics simulation learning.\"\n    }\n  },\n  \"9f4ff68c1d8646c594996b0c82c78670\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't clearly depict a tree, ficus, or fern. It looks like a simplified, abstract representation of a bush or hedge, but the quality is too low and the shape is too ambiguous to be useful for physics simulation in a video game. It's also too simple and lacks detail.\"\n    }\n  },\n  \"9fdba8f2dc394711991e8222d95f45eb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fence, not a tree, ficus, or fern.\"\n    }\n  },\n  \"a082951c398e4c158585851ecdeed7ee\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized tree, which is suitable for physics simulation in a video game environment. The object is clearly defined and isolated.\"\n    }\n  },\n  \"a1edf1cc093c4c43a6e78275377db050\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The tree is in a pot, which is not a natural setting for physics simulation. Also, the tree is dead.\"\n    }\n  },\n  \"a36f80984fc24bd8919cb10bc3cc3fa4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object. Also, the image quality is not great (blurry).\"\n    }\n  },\n  \"a37ef9334b33442b938d2672a8a4592f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus plant, which is suitable for physics simulation in a video game. The image quality is also good.\"\n    }\n  },\n  \"a432cd8831134a2c8a8f0576c964d3b6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It shows a box.\"\n    }\n  },\n  \"a523f7189d1741db86f426945d3d273c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush, which falls under the specified classes (shrub, bush, hedge, ornamental bush, garden shrub, boxwood, flowering bush, evergreen shrub, decorative plant, landscaping shrub). The image quality is acceptable for training data, and it shows a single object clearly.\"\n    }\n  },\n  \"a59e44e0fbc448efa632655418b16185\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"This image doesn't depict any of the specified classes (tree, ficus, fern) or related objects. It appears to be a striped rectangular object, which is not relevant for the video game development data collection focused on vegetation.\"\n    }\n  },\n  \"a6833aa6f18246eb9961f74806aa8341\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant clearly against a white background, making it suitable for training data. It's a single object and could be used in a physics simulation.\"\n    }\n  },\n  \"a762fe3acd3846a8a7ddb5040f6aa5b7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a potted plant with flowers, which doesn't fall under the specified classes (tree, ficus, fern) or their related objects. Additionally, the presence of the pot and the paper underneath makes it less suitable for physics simulation of a natural object.\"\n    }\n  },\n  \"a79089ec4f9b46f1ab25d04041da42e7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified plant classes (tree, ficus, fern). It's a low-poly shape with no discernible features.\"\n    }\n  },\n  \"a83fd7049a784ca6bc0095e7323451d0\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a shrub or bush, which falls under the provided class. It's a single object, and the image quality is sufficient for use in a physics simulation for game development.\"\n    }\n  },\n  \"a8535b6bfb03499388ff16e918790c34\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects in a pot, including a tree branch, succulents, and other decorative elements. It is not a single, clear depiction of a tree, ficus, or fern, which are the target classes. Additionally, the presence of the pot and multiple objects makes it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"aae3a509b9d541f890fb69b913822679\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus in a pot, which is acceptable as a single object for physics simulation. The image quality is good.\"\n    }\n  },\n  \"aaff18d0d6ef44c1bc0a58d0fb37fc09\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plant with flowers and berries, which doesn't fall under the specified classes (tree, ficus, fern). It is also not a shrub, bush, or hedge.\"\n    }\n  },\n  \"ac14cd25d84948428e1ad0d193cc86be\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a plant in a pot, which can be considered an ornamental bush or shrub. The image quality is good, and it could be used for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"acb337dd8f5e41beba654111e3f2475a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"acc6c43913864ace8d5942d65417ab35\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly depicted. The image quality is low.\"\n    }\n  },\n  \"b01e5d821a104c4aab37b9bccc5e2f8b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It's a simple model, but suitable for physics simulation as it represents a single object.\"\n    }\n  },\n  \"b1c199d5b5364e538df04256fb4adda6\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object class is not clearly depicted. It's difficult to determine if it's a tree or a shrub.\"\n    }\n  },\n  \"b321e9a248ab4e21a01a10a2bdc3debc\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush or shrub, which falls under the specified classes (tree, ficus, fern) as it's related to objects like 'shrub', 'bush', 'hedge', etc. The image quality is good, and it shows a single object clearly, making it suitable for training data.\"\n    }\n  },\n  \"b4016ed1c4da41dfa0e73aba4d7afe15\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and low quality to be used for training physics simulations. It's hard to tell what kind of plant it is, and the low-poly rendering doesn't provide enough detail for realistic physics modeling.\"\n    }\n  },\n  \"b708719dc8f6426ab14bb2228cf63e94\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus clearly and is of good quality. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"b8801945ad2940e885809cced6bd829b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. The image quality is good, and the tree is isolated against a white background.\"\n    }\n  },\n  \"b8fa56ee6c0a45c9b7f9161b65dd3432\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"bb2730b767c04826977f6ecf2f6c28f2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a grape vine, not a tree, ficus, or fern. It is also not one of the acceptable objects listed.\"\n    }\n  },\n  \"bc4ee9d4413b4cd3b5016bcfd1e9734d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object class is not clearly depicted. It is also difficult to determine if it belongs to one of the specified classes.\"\n    }\n  },\n  \"bc77ea5218e44f2dbc23b2a4aef0c898\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it's hard to see the details of the plant. It doesn't clearly depict the object class.\"\n    }\n  },\n  \"bd335c9bb20a4cdc8d41960ea3e9b106\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which falls under the specified classes (tree, ficus, fern) because it includes objects like 'shrub', 'bush', 'hedge', etc. The image is of good quality and clearly shows the object. It is also suitable for physics simulation.\"\n    }\n  },\n  \"bdd0bc49ab5748a7ae67ee3fb15eeeb4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very simple, low-poly tree. While it clearly represents a tree, the level of detail is too low for realistic physics simulation. It's too abstract to be useful for learning realistic material properties or young modulus for physics simulation.\"\n    }\n  },\n  \"bef4d49c6f24429db4441e750bcf5fed\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, ferns, lily pads) clustered together, not a single, clear object. Also, the rendering quality is not ideal for training data.\"\n    }\n  },\n  \"bf0384533def4f2fb89534b3e7406712\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant clearly and cleanly. It's suitable for physics simulation as it can be used to simulate wind effects.\"\n    }\n  },\n  \"bfd1841b23174ab09e82086bccecdd36\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the object is difficult to identify. It's unclear if it represents a tree or a shrub. Also, the image is blurry.\"\n    }\n  },\n  \"c0f09c7c12b844f6924814e9bff1dd59\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, which falls under the specified classes and is suitable for physics simulation.\"\n    }\n  },\n  \"c126dd91a91c4ec58a118e7dd8325615\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern-like plant, which is appropriate for use in a physics simulation for a video game. It is well-lit and the object is clearly visible.\"\n    }\n  },\n  \"c162474e243640e29ed30069905cf22d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a tree, which is a valid class. It is clear and well-lit, and depicts a single object.\"\n    }\n  },\n  \"c20291064ae74a63b197577bbe033f9e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is not high enough for training.\"\n    }\n  },\n  \"c23be007c1a649d9a2082f54af6dec7d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bush, which falls under the specified classes (tree, ficus, fern) as it is similar to 'shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub'. The image quality is good, and the object is isolated on a white background.\"\n    }\n  },\n  \"c257b444645542da867fce0cf221e52d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly visible.\"\n    }\n  },\n  \"c2705d640d864a1a8581f7bbbf3ea2f5\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a landscape with multiple objects, not a single tree, ficus, or fern. Therefore, it's not suitable for training data focused on individual objects for physics simulation.\"\n    }\n  },\n  \"c3931a2bb71242cd9d34fb17a81ddb4b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue, which does not belong to the classes: tree, ficus, fern or their subclasses. Therefore, it is not appropriate for the video game development.\"\n    }\n  },\n  \"c3995f712734431da4fba8f8b529f080\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's a simple geometric shape, not a realistic representation of any of the specified classes.\"\n    }\n  },\n  \"c5d97054fa8048249d1515aeaac0ccca\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a stylized representation of a table or other piece of furniture.\"\n    }\n  },\n  \"c6195b907d11468192f6fde8ec948f08\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"c644de65331546e0b5559b73852cfc5e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low to clearly identify the object. It's mostly white and lacks detail, making it unsuitable for training data.\"\n    }\n  },\n  \"c72bcbf20fb743e88767f074c1ea3107\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is not good enough for training data.\"\n    }\n  },\n  \"c88faac7729b49e688dbc4d95f182168\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts flowers, not trees, ficus, or ferns.\"\n    }\n  },\n  \"c93806576ec245cb80917c1703d86e99\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including a fence, plants in pots, and a stone path. It is not a clean depiction of a single object belonging to one of the specified classes (tree, ficus, fern). Also, it is not very clear.\"\n    }\n  },\n  \"c958daf50aca4463ac258c4aa3029aeb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush with flowers, which is a type of ornamental bush, garden shrub, or flowering bush. The image is clear and well-lit, and it depicts a single object that could be used in a physics simulation.\"\n    }\n  },\n  \"cb3446657c054fcba0bc7b05ff30b2eb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant, which could be considered a shrub or bush, and therefore falls under the specified classes. The image quality is acceptable, and it clearly shows a single object.\"\n    }\n  },\n  \"cc6a7d8819d8487382a404c7773675f3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single, clear depiction of one of the specified classes. Also the image quality is not great.\"\n    }\n  },\n  \"cd5864107fa845e38d0c0449d29b73a1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't depict any of the specified classes (tree, ficus, fern). It appears to be an abstract, geometric shape or a container, but not a plant or plant-related object. Therefore, it is not appropriate for the intended use case.\"\n    }\n  },\n  \"cd7e30a339ac4b79ab5b8e7310984c2e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a planter with some vegetation inside, but it's not clearly depicting a tree, ficus, or fern. The focus is more on the planter itself rather than the plant. Also, the vegetation is not easily identifiable as belonging to one of the specified classes.\"\n    }\n  },\n  \"cf3d0eb04a2444c09dd939fa11063cd5\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three potted plants), whereas we need images depicting a single object for physics simulation training data.\"\n    }\n  },\n  \"d07fba67607549ec85928213c3ba31c2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, and it is isolated on a white background. The quality is good enough for training data.\"\n    }\n  },\n  \"d0d5eb345ff7420bb7f5c5239fcec637\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant. It is isolated and of sufficient quality for use in a physics simulation.\"\n    }\n  },\n  \"d1376f0f58c84fc595ecd8c8241dd627\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts an ornamental bush in a pot, which falls under the specified classes (tree, ficus, fern) due to the inclusion of objects like 'shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub'. The image quality is acceptable, and it represents a single, well-defined object suitable for physics simulation.\"\n    }\n  },\n  \"d1d53a92f45240e292240e62acbe2b39\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, and it's suitable for physics simulation in a video game. The model is simple and clean.\"\n    }\n  },\n  \"d379b28766ba41e6b0e2cded53769a7f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-poly object that does not clearly resemble any of the target classes (tree, ficus, fern). It appears to be a stylized, abstract representation of a plant, and its low quality makes it unsuitable for training a physics simulation.\"\n    }\n  },\n  \"d4ec3f99c6274465ab32f87ac05458e7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single bush-like object, which falls under the acceptable classes ['shrub', 'bush', 'hedge', 'ornamental bush', 'garden shrub', 'boxwood', 'flowering bush', 'evergreen shrub', 'decorative plant', 'landscaping shrub']. It is well-lit and clearly depicts the object, making it suitable for training data for physics simulation.\"\n    }\n  },\n  \"d5a513cf861d4fd09d5528f3d582ae6f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree. The quality of the image is good. The tree is isolated from other objects. The tree is likely to be used in a physics simulation.\"\n    }\n  },\n  \"d6ba112bfece466b8eeec6de88900fd1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including trees and a fence. We need images that depict only one object class clearly.\"\n    }\n  },\n  \"d7a561c732174425baf101cdd1d19f54\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vertical garden or a plant stand, which is a complex structure with multiple plants and a frame. It doesn't represent a single, natural object like a tree, ficus, or fern suitable for physics simulation. Also, the image quality is not good.\"\n    }\n  },\n  \"d84b1d539e024a07a4dfdd1bec2b80ab\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a shelf, which does not belong to the classes: tree, ficus, fern.\"\n    }\n  },\n  \"d852147a2b3e4e10a9b7b4b0bc8e3403\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. The low-poly style makes it difficult to discern details necessary for physics simulation. Also, the color is not realistic.\"\n    }\n  },\n  \"d86a83765d424c4695f566a75bad78eb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-poly rendering of an object that could potentially be a bush or shrub. However, the low quality and lack of detail make it difficult to confidently identify it as such. Additionally, the low-poly nature might not be suitable for accurate physics simulation.\"\n    }\n  },\n  \"d87944f623404d8f9d30f3fdac7deeff\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bush or shrub without leaves, which is not ideal for physics simulation as it lacks the foliage that would significantly impact wind resistance and overall movement. It's also not a clear depiction of a tree, ficus, or fern.\"\n    }\n  },\n  \"da26989a147c4fe89fe6ffaf8d767bc2\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase of flowers, which does not fall under the specified classes (tree, ficus, fern, or related objects like shrubs or bushes). Additionally, the object is not suitable for physics simulation as it's an artistic representation rather than a realistic depiction.\"\n    }\n  },\n  \"dc321c078bfc48ba954b154ba6e2e315\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, and the object is not clearly depicted. It's difficult to determine the exact type of plant and its structure for physics simulation.\"\n    }\n  },\n  \"ddac4359daa94d6ea8e98832870b1e0e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects instead of one. Also, the black portions inside the objects are distracting.\"\n    }\n  },\n  \"ddd10582e2794d229c4beb3cbdb36a7a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a variety of objects, including plants and furniture, making it unsuitable for training data focused on individual objects like trees, ficus, or ferns. The image is also blurry and low quality.\"\n    }\n  },\n  \"de0d7475b872435886d4ec87bcb6b02c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub or bush clearly, which falls under the specified classes. It is also suitable for physics simulation.\"\n    }\n  },\n  \"de98cdfaa7b94de8847c95a27d259d93\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a stylized, abstract object with floral patterns, and it's unclear what it represents.\"\n    }\n  },\n  \"decdce0779694898b8706c7cd6602ca1\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, which is one of the specified classes. The image is clear and depicts a single object.\"\n    }\n  },\n  \"dedda104211a45f8afdb83cea6af8772\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is barely visible.\"\n    }\n  },\n  \"df2a9680dfe7431fa3a6403646737bc4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is a relevant class. The image quality is good, and the object is isolated, making it suitable for physics simulation training data.\"\n    }\n  },\n  \"df3de8504d654d60a628cc21c78015eb\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and the object is not clearly depicted. It's difficult to discern the exact shape and structure of the tree, making it unsuitable for physics simulation training.\"\n    }\n  },\n  \"dfe8ca79ac5243b2b9ceb76747035da4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is unclear.\"\n    }\n  },\n  \"e0c74fc17a3d43a888c1a8751af385bf\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very stylized and low-detail representation of a bush or shrub. It lacks the visual fidelity required for accurate physics simulation. The geometry is too simplistic and doesn't capture the complexity of real-world plants.\"\n    }\n  },\n  \"e1001602762642cca0ff1651da592cdd\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower, which is not one of the target classes (tree, ficus, fern). Additionally, the pixelated style of the image makes it unsuitable for realistic physics simulation. \"\n    }\n  },\n  \"e109272b7ea34cc0a09cbd26e6fdc6d8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bush-like plant with a simple geometric design, suitable for physics simulation in a game. The object is clearly depicted and isolated.\"\n    }\n  },\n  \"e1ca9cf863c145fcb63fb63ed7f276b9\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and it is difficult to determine what the object is. It doesn't clearly depict a tree, ficus, or fern. Also, the image is not suitable for physics simulation due to the unclear object representation.\"\n    }\n  },\n  \"e2c72eea088e49d5a5163f74f42b316d\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be an abstract object with a striped pattern.\"\n    }\n  },\n  \"e34d842415bf4889882b80ccce091e71\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush, which falls under the specified classes (tree, ficus, fern) as it includes objects like 'shrub', 'bush', 'hedge', etc. The image is of acceptable quality and clearly shows the object.\"\n    }\n  },\n  \"e444f9176e944a379d8ea5c7ca6ba050\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern clearly and it is of good quality.\"\n    }\n  },\n  \"e509215301d34356b75e66dbd0d58bf4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's difficult to clearly identify a single object. It looks like a bush or a hedge, but the quality is too low for training data.\"\n    }\n  },\n  \"e63dbdcf24f4485eb8b63880a33b4e16\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and contains multiple objects, including a pot and a stone surface, making it unsuitable for training a physics simulation model focused on a single plant object.\"\n    }\n  },\n  \"e64920197cf64779b050613c53da62c8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The image quality is good, and it is likely to be used in a physics simulation.\"\n    }\n  },\n  \"e69b8708f1b145bba43941330353d530\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a garden gnome, which does not belong to any of the specified classes (tree, ficus, fern). Therefore, it is not appropriate for the video game development training data.\"\n    }\n  },\n  \"e7f292ef14304c96a0438636f2618282\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a shrub/bush, which is an acceptable class. The image is clear and the object is well-defined.\"\n    }\n  },\n  \"e8ee6d01fcc24e3db77797a3ba8c292f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects that are difficult to identify and don't clearly belong to any of the specified classes (tree, ficus, fern, or related objects like shrub, bush, etc.). The objects appear to be abstract shapes covered in moss or vegetation, making it unsuitable for training a physics simulation model for common plant types.\"\n    }\n  },\n  \"eade7f013c1b45758e7503d2f61d9d7a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub clearly and against a white background. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"ebaf5017836a4c15b2f370463952edd4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white, and it's impossible to identify any object from the classes mentioned.\"\n    }\n  },\n  \"eca9656859ae437389b389d13306a78a\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly depicted. It is difficult to determine if the object belongs to one of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"ecc0704325b44d2ab2f914f4eea45344\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and washed out, making it difficult to discern the object clearly. It's hard to tell if it's a tree, shrub, or something else. The quality is too low for training data.\"\n    }\n  },\n  \"ece69535f7584e099488f65f2072264e\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape and does not contain any of the specified objects (tree, ficus, fern, or related shrubbery). The image is also not suitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"ee22ff84f7b6452682b2340dfef14fad\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bush with flowers, which falls under the specified classes (shrub, bush, etc.). It is a single object and the image quality is acceptable for physics simulation purposes.\"\n    }\n  },\n  \"ee851bd8ba8544dcb233b2614bc9637c\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, and it's suitable for physics simulation as it shows the basic structure of a tree that can be used for simulating wind interaction or falling objects.\"\n    }\n  },\n  \"ef2f57b8927b4eb78539a8b1090733e4\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bush with flowers and rocks, which is not a single object and contains multiple elements. It is also not a clear representation of a bush, shrub, or hedge, and includes other items like rocks and flowers.\"\n    }\n  },\n  \"f00af376b5214281b66b848fc4978d5f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and unclear, making it difficult to identify the object. It's hard to tell what it is, and it doesn't resemble a tree, ficus, or fern.\"\n    }\n  },\n  \"f06d1430c00d47a899506c9ea66a0862\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a simple cube with a green texture, and it doesn't represent any of the specified plant classes (tree, ficus, fern, shrub, bush, etc.). It's also not suitable for physics simulation as it is a very basic shape.\"\n    }\n  },\n  \"f08a392f8d2c4121948840e9459b1de3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus in a pot, which falls under the specified classes. The image quality is good, and it is suitable for use in a physics simulation.\"\n    }\n  },\n  \"f0c2a532cf2b43f6bf95acbe2e2f536b\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry, contains other objects (people), and the object is not well-defined.\"\n    }\n  },\n  \"f0d4b3b79ccb43038a0f9d4b35adb5bf\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a building and a bush. It is not a clean image of a single object.\"\n    }\n  },\n  \"f0d69842420f4805915f894dadf52f2f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains Christmas tree ornaments, which do not belong to the specified classes (tree, ficus, fern) or their related objects. Also, there are multiple objects in the image.\"\n    }\n  },\n  \"f10e77da99ce40c28ac58e49e3089e1f\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a planter, not a tree, ficus, or fern. Also, the image includes the surrounding ground, which is not ideal.\"\n    }\n  },\n  \"f2006b1a3af9442987963da054283ad7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a shrub, which falls under the specified classes (tree, ficus, fern) as it includes objects like 'shrub', 'bush', 'hedge', etc. It is also a single object on a clean background, making it suitable for physics simulation.\"\n    }\n  },\n  \"f2be738eed3b4ccc8ebbac76f19b8f58\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. The shapes are unclear and don't resemble natural plant structures.\"\n    }\n  },\n  \"f458c98bc23d421db8eb409ad6facb59\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and blurry, making it difficult to discern the object clearly. It also contains a fence, which is not part of the classes of interest.\"\n    }\n  },\n  \"f962d1c053e741d8b6ee6678548128db\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict a tree, ficus, or fern. It appears to be a collection of dead branches and leaves, making it difficult to use for physics simulation.\"\n    }\n  },\n  \"fc7e8973379c488f930433c300bbe6a3\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and doesn't clearly depict a single tree, ficus, or fern. It appears to be a landscape with multiple plants and a path, making it unsuitable for training a physics simulation focused on individual objects.\"\n    }\n  },\n  \"fd4c540972c143308c1ad79d58a105a7\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly depicted. The image quality is also low.\"\n    }\n  },\n  \"fe72a2f6867a4c4bb68d8aea4addffc8\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a shrub, bush, or hedge, which falls under the specified classes (tree, ficus, fern) for video game development. It's a single object clearly depicted and suitable for physics simulation.\"\n    }\n  },\n  \"fed41453849a47e18c2f14f3787fe744\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree but also contains other objects like shrubs and a planter. This makes it unsuitable for training data where we want a single, clearly defined object.\"\n    }\n  },\n  \"ff00360145c444ef9b63ec27644e9a58\": {\n    \"obj_class\": \"shrubs\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a potted plant, not a tree, ficus, or fern in a natural setting. The pot is also included, which is not ideal for physics simulation of the plant itself.\"\n    }\n  },\n  \"0165effe051842789aad2b32d1f5abdd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a well structure (brick and wood), not the water body itself. The requested class is 'water-like_bodies', and this image does not depict water.\"\n    }\n  },\n  \"0304f9b2687a409e8f7b301f226346ea\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape scene containing a river, but also includes significant other elements like landmasses, trees, rocks, and fences. It does not cleanly depict just the water body, violating the 'ONE SINGLE OBJECT' rule.\"\n    }\n  },\n  \"0368427134824df9afaaeba8f28a65ca\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (well, pond, stream, terrain, red objects) rather than cleanly depicting a single water body. The water bodies (pond and stream) are part of a larger scene.\"\n    }\n  },\n  \"0381bb847bf646659dd37aa8119156c6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts the stone structure of a fountain, not the water itself. While 'fountain' is listed, the focus for physics simulation is on the water body, which is barely visible or absent in this image.\"\n    }\n  },\n  \"03f22951b2b14996bd38f3794bccf350\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a full landscape scene including land, trees, a river, and a pond, rather than focusing cleanly on a single water body object. We need images primarily focused on the water body itself for physics simulation learning.\"\n    }\n  },\n  \"03f6a63d37e8435b97ef6ae3835937fe\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a body of water (lake or large pond) within a terrain context. The quality is good, and this type of asset is relevant for physics simulations involving water in game environments.\"\n    }\n  },\n  \"041eb60044144d358aa33e3c070eb7a9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a decorative object, possibly intended as a fountain or aquarium piece, but it does not actually depict any water or water body. It shows a miniature landscape made of solid materials (rocks, sand, plastic/resin). This is not suitable for learning the physics of water.\"\n    }\n  },\n  \"04b5fcbb2d644e608d7f836bdb136a85\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water bottle, not a body of water like a lake, pond, ocean, river, etc., or just liquid water itself.\"\n    }\n  },\n  \"07b16f0c118d4073a81522a526183c11\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a body of water. This falls under the 'water-like_bodies' class and is relevant for simulating water physics.\"\n    }\n  },\n  \"07df007f2b0d40fa8cdb5db00a01f19f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a container or pot, not a water-like body such as a lake, pond, ocean, pool, puddle, river, stream, waterfall, fountain, water surface, liquid water, or water body.\"\n    }\n  },\n  \"0800cadb90b04dce82bca1ed024df644\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which is listed under the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for a game environment.\"\n    }\n  },\n  \"0885d40e0b1247399ca8c477df8c8af9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pond, which belongs to the 'water-like_bodies' class. Although it includes surrounding elements like grass, rocks, and plants, the pond is the central focus and these elements provide context. The voxel art style is acceptable for diversity, and the image quality is good. Ponds are relevant for physics simulations in games.\"\n    }\n  },\n  \"08b4447ea3de4f2f99d62f46aca239fb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright. It is impossible to discern any object, let alone a water body.\"\n    }\n  },\n  \"0973a63a8639456b867f253b4a036070\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (land, house, trees) in addition to the small pond. We need images focused primarily on the water body itself.\"\n    }\n  },\n  \"097c2f404b6c45c98da55ed95cc24f72\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts stylized fountains, which fall under the 'water-like_bodies' class. The water elements are clearly visible, and the image quality is good. Fountains involve water physics, making them relevant for simulation.\"\n    }\n  },\n  \"0a065a07a6f74a7599cb4072c92930dc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, block-like object that does not clearly represent any of the specified water-like bodies (lake, pond, ocean, pool, etc.). It looks more like a block of ice or a very abstract representation, not suitable for learning liquid water physics.\"\n    }\n  },\n  \"0aa0f37bdd884e258200acc2a8c229ff\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains two distinct objects: the blue rectangle representing the water body (pool) and a white structure resembling a diving board or ladder. The requirement is to have only one single object from the target class cleanly depicted.\"\n    }\n  },\n  \"0d3786d7865a45e0a0bf4a14e4644bf2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it is empty and does not depict any water or water-like body, which is the target class.\"\n    }\n  },\n  \"0d9f7c9353fa4596984e264e0ecf2067\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure, but it does not clearly depict the water itself. The basin appears to have a texture rather than containing visible liquid water, making it unsuitable for training on the 'water-like_bodies' class, especially for physics simulation purposes where the water's behavior is key.\"\n    }\n  },\n  \"0e7c82a3e1de4cab920609a89e3db4e5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of terrain, possibly a dried riverbed or shallow depression, but it does not clearly show a body of liquid water. It looks more like textured ground than any of the specified water-like bodies.\"\n    }\n  },\n  \"0e9d3f0ce7484707bc03e3cd63687a27\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but does not depict any water, which is the focus of the 'water-like_bodies' class. We need images showing the water itself for physics simulation.\"\n    }\n  },\n  \"0eae7d168a07489988a4a2690ae34012\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fish, which is an animal that lives in water, not a body of water itself. The target class is 'water-like_bodies'.\"\n    }\n  },\n  \"0edb17a7a21944f0b4c1373392c31eae\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it difficult to clearly discern the details of the water effect. The quality is too low for training purposes.\"\n    }\n  },\n  \"0f8ea2bb69784e5a833823c369d05c84\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a water body and falls under the specified class list. The quality is good, and the object is relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"0fbf583e24594c1597baeb76e426735b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not contain any water. The class 'water-like_bodies' requires the presence of water.\"\n    }\n  },\n  \"0fcbeac12b434d4a96bf0fb12f33cbc7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin line and does not clearly depict any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"0ff412bf322b4e1db0c97a4ebae17e62\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, possibly an aquatic center or similar structure, not a body of water itself like a lake, pool, or river.\"\n    }\n  },\n  \"111f5196be644c43a88294d713e2c8ee\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts liquid water within a container, which falls under the 'water-like_bodies' class. Although stylized (blocky/pixelated), it's recognizable as water and suitable for game development, potentially representing a small pool or contained water body. The quality is adequate for this style, and simulating water physics is relevant for games.\"\n    }\n  },\n  \"11701fc8d72f4720a4cb24c102d2cc13\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an inflatable pool float, which is an object used in water, but not a body of water itself or a water surface, which are the target objects for the 'water-like_bodies' class.\"\n    }\n  },\n  \"11b6ea9cf9c44875a47a034182d5ff31\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank, which is a container for water, not a water body itself like a lake, river, or pool. The focus is on the container, not the water.\"\n    }\n  },\n  \"13a3601a2723472d92ce82f4d1702baa\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a concrete structure, not a water-like body such as a lake, river, ocean, pool, puddle, fountain, or water surface.\"\n    }\n  },\n  \"13e0e9d7dd53401fba7617d6e71e071b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it very difficult to clearly see the details of the fountain. This low quality makes it unsuitable for training data.\"\n    }\n  },\n  \"14bbf459d2444b6fa79d526c3a1c5eec\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks detail. More importantly, while it depicts a fountain structure, it does not actually show any water, which is the target object class ('water-like_bodies'). We need images of the water itself for physics simulation.\"\n    }\n  },\n  \"15150c484ab7481caba9861f1553b6e5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sculpture, not a water-like body.\"\n    }\n  },\n  \"159a6b6dc74849deb6899830fa8acd80\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank (a container), not a body of water like a lake, pond, river, or pool, which are the target objects for the 'water-like_bodies' class.\"\n    }\n  },\n  \"15a8251f401c4d6bac8b0c3ac38d5d22\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'water-like_bodies' class. It looks more like a rock formation or a pile of debris.\"\n    }\n  },\n  \"16603868614c4a2093a7643e38839037\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object. It does not appear to depict any form of water body.\"\n    }\n  },\n  \"1769fed514bd4f1cb62f6a993bbac484\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large complex building/resort with multiple small pools, not a single, clearly depicted water body. It contains many other objects like buildings, vegetation, and furniture, making it unsuitable for isolating the properties of a water body for physics simulation.\"\n    }\n  },\n  \"17e9e71c5c0f4822b34cdd4b986771d5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized fountain, which falls under the 'water-like_bodies' class. The quality is acceptable for a stylized asset, and it represents a single object suitable for physics simulation (water flow).\"\n    }\n  },\n  \"18cd9edab49c4086bf0dd710b5548c7f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized sculpture, not a body of water or anything related to the 'water-like_bodies' class.\"\n    }\n  },\n  \"1b5b5227d8714136b0b25810b7f65412\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to show a rocky structure or terrain, not a water body like a lake, river, waterfall, or pool. It doesn't fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"1b7af7231dbb44f6b8036fd572de283f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'water-like_bodies' class. The image quality is good, and the object is distinct. Pools are relevant for physics simulations in games.\"\n    }\n  },\n  \"1b7e66d68ae84a8cac68f6d987a52a18\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water well structure, not a body of water like a lake, pond, river, etc. While a well contains water, the primary object depicted is the well itself, not the water.\"\n    }\n  },\n  \"1cd3c2a963bc4839b5bbd653531fed8e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tower, which is a structure that holds water, not a water body like a lake, ocean, or river as specified in the class list.\"\n    }\n  },\n  \"1d13b9000fe040bea9d12c162aad371f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the object depicted. It does not clearly show any object from the 'water-like_bodies' class.\"\n    }\n  },\n  \"1d35c29d2f4e4268a2a9692924bb33bc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid object, possibly a bowl or container, not any form of water or water body.\"\n    }\n  },\n  \"1e15e2c328ff4de6a0595e9c2bf55977\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure, but it does not depict any water, which is the target object class for 'water-like_bodies'. We need images of the water itself for physics simulation.\"\n    }\n  },\n  \"1e2234e51a46400bbd3a71afd9c2b750\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class ('fountain', 'liquid water'). The image quality is good, and simulating water physics in a fountain is relevant for video games.\"\n    }\n  },\n  \"1e268248ec904f9dbdec2daaa0683f47\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small body of water, like a pond or puddle, which belongs to the 'water-like_bodies' class. The quality is acceptable, and the presence of rocks around it is a natural context for such a water body. It represents a type of water body suitable for game environments and physics simulations.\"\n    }\n  },\n  \"1eae791c649d4974afd09d58e42697d0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object from the 'water-like_bodies' class. It looks more like a fragment of ice or some other solid material rather than liquid water or a recognizable water body like a lake, pond, or river.\"\n    }\n  },\n  \"1f02e13c0f244a498e14fad530c452f5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid, white structure, possibly part of a fountain or pool drainage, but does not show any actual water or water body. It does not belong to the 'water-like_bodies' class. Additionally, the image is extremely bright, washing out details.\"\n    }\n  },\n  \"1f5dbf0c87b44f82bbec0b4cb976b1a4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a creature, possibly a sea creature, not a body of water or water-like body.\"\n    }\n  },\n  \"1f80bb490ff649ad9a15bd0ba60dc4b0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, which is typically made of stone or concrete, not the water itself. We need images of the water body (liquid water) to learn its physics parameters, not the container.\"\n    }\n  },\n  \"2001c00438db43478424b7a5d842e327\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a drinking fountain, but it does not depict any water. The focus is on the solid object, not a water body, making it unsuitable for the 'water-like_bodies' class, especially for physics simulation of water.\"\n    }\n  },\n  \"2145db100b3d4e7fafe737bf1f542bb3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a body of liquid water contained within a vessel. This fits the 'liquid water' and 'water surface' categories within the 'water-like_bodies' class. The quality is adequate, and simulating contained liquids is relevant for physics engines.\"\n    }\n  },\n  \"22a39f8b7141403b90578fb3e8cddecd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and does not clearly depict any object belonging to the 'water-like_bodies' class. It appears to show a section of a road or similar surface, not water.\"\n    }\n  },\n  \"23535d1097aa4dfc940d4fe735bbcb44\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small stone building or structure, not a water-like body such as a lake, pond, river, or fountain.\"\n    }\n  },\n  \"23cb462f3e9a4ac4a710696cc2149454\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, showing a simplistic, low-poly representation. It also includes a lifeguard chair, which is a separate object from the water body (represented as a simple blue block). This representation is too abstract and lacks the detail needed for realistic physics simulation training.\"\n    }\n  },\n  \"2486917c247b4c7f86b5d98bf916a53a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase or similar container, not a body of water like a lake, pond, ocean, pool, puddle, river, stream, waterfall, fountain, or water surface.\"\n    }\n  },\n  \"254f1f14e393473588aaa1a9f6d95c76\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the details of the object, which appears to be a fountain structure. It does not clearly depict water or any water body, and the quality is too low for training purposes.\"\n    }\n  },\n  \"257ed043752248d29b355d32f4e787cf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fire hydrant, which does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"2581d382499a4ece9c7aa5bf468dfa85\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a ceramic pot/vase, not a body of water or anything related to the 'water-like_bodies' class.\"\n    }\n  },\n  \"268602c8593645a2aeb5b3f723939e3b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure, not a water-like body such as a lake, pond, ocean, pool, puddle, river, stream, waterfall, or fountain.\"\n    }\n  },\n  \"270499a280574ac9a067b960717b5469\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a urinal, which is not a 'water-like body' like a lake, river, ocean, or pool. While it contains water, the primary object shown is the urinal fixture itself, not a body of water.\"\n    }\n  },\n  \"2750994f3c9046d5ae533f30395942ca\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a stone structure with a metallic object. While the base appears wet, it does not clearly show a distinct 'water-like body' like a puddle, pool, or fountain as the main subject. The focus is on the solid structure, not the water.\"\n    }\n  },\n  \"283f378fc5424b4191cb7b693ef3d901\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure, but it does not depict any water, which is the required element for the 'water-like_bodies' class. The basin appears empty.\"\n    }\n  },\n  \"288a163780bb452399140b74004ff151\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a green, textured surface, possibly moss or algae-covered ground, not a body of water or liquid water surface. It does not fit any of the descriptions within the 'water-like_bodies' class.\"\n    }\n  },\n  \"28b73cf3f5ed407ea18ca835f71a91d3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any water-like bodies. It shows a section of ground with debris, a rusty object, and what appears to be a grate.\"\n    }\n  },\n  \"28e7dee3f30a4fb9b40910e16554eac2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure, possibly a gazebo or pavilion, not a water body like a lake, pond, river, fountain, etc. While there might be a hint of water or ice at the base, it is not the main subject and is not clearly identifiable as belonging to the requested class.\"\n    }\n  },\n  \"2bcc57af643346cc8288acd353e3a84f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid, white object, possibly a lid or a shallow dish. It does not represent any form of water or water body as required by the class 'water-like_bodies'. Additionally, the image is too bright and lacks detail.\"\n    }\n  },\n  \"2c20aeb77fe2434080fe12c9a1e177a5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a well structure, but it does not depict any visible water body, which is the target class.\"\n    }\n  },\n  \"2c218454faf246eea3631e3690709981\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a table with a book and a bowl, not any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"2c3fa8718e864e29b91a801da73964b0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to clearly identify any object, let alone one belonging to the 'water-like_bodies' class. The quality is too low for training data.\"\n    }\n  },\n  \"2ccb8fe6e25e44aa9e539816bf983738\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool filled with water, which falls under the 'pool' and 'water body' categories within the 'water-like_bodies' class. The quality is good, and water physics in a pool are relevant for simulation.\"\n    }\n  },\n  \"2e9061fb2e974bf796a8c9c8ffb0cc98\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a water-like body. It is too bright and lacks any detail.\"\n    }\n  },\n  \"2f584f889a0d46d0b81d26dfab5105fd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank, which is a container for water, not a water body itself (like a lake, river, pool, etc.). The focus is on the structure of the tank, not the water.\"\n    }\n  },\n  \"2f9abd7862ab4a598643cb55d5948bbe\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The quality is acceptable, and it represents an object suitable for physics simulation (water dynamics).\"\n    }\n  },\n  \"30874d5babd94e258f8307c695ded039\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small scene with multiple objects (water body, trees, ground, structure) rather than cleanly focusing on a single water-like body. While it contains water, the presence of other distinct objects makes it unsuitable according to the requirement for single object depiction.\"\n    }\n  },\n  \"30be56779113429983ce4cd41fa97024\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or assess its quality. It does not depict any recognizable water-like body.\"\n    }\n  },\n  \"314f92420003499688d6c2070237b3b0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (rocks, building, water features) rather than focusing cleanly on a single water body. While it depicts waterfalls/streams, the overall scene is too complex and doesn't isolate the water element sufficiently for the requirement of depicting a single object.\"\n    }\n  },\n  \"31b9659f360b47dc9d55a0813439db3d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts water inside a container (bottle/thermos), not a 'water-like body' like a lake, river, or pool as the main subject. The focus is on the container holding the water, not the water body itself.\"\n    }\n  },\n  \"329d7c7ba9ed4d288954f8f7307f8be0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object belonging to the 'water-like_bodies' class. It appears to be a fragmented or corrupted render of an object, possibly a building or urban structure, viewed from an extreme angle, and is not recognizable as a water body.\"\n    }\n  },\n  \"32d0df661a044383911c09bbbd0b5e3e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a metallic, solid-looking object, possibly abstract art or debris. It does not resemble any form of water or water body listed in the class definition. Therefore, it is inappropriate for the 'water-like_bodies' class and unsuitable for learning water physics simulation parameters.\"\n    }\n  },\n  \"33560aae37ed4f10b02d5fdb9a9b4b27\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it very difficult to discern the details of the object. It appears to be a fountain structure, which fits the class, but the image quality is too low for training.\"\n    }\n  },\n  \"33858795db9b4378afec7edcb35eb383\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain structure, which is one of the specified classes ('fountain') within the 'water-like_bodies' category. The image quality is good, and fountains often involve water physics simulations in games.\"\n    }\n  },\n  \"34e27f4b89504c53928b3cec8c1868a3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays the structure of a fountain, but it does not show any water, which is the key element for the 'water-like_bodies' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"3527cd2953544f9fa390e06ceb2c6276\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a structure (like a dock or building) surrounded by fragmented patches of water and possibly ice. The water is not the main focus, and the image contains significant other objects, violating the 'single object' guideline.\"\n    }\n  },\n  \"358c50f3e494411eaa34355fcaef566a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock-like structure, not any form of water or water body as specified in the class description.\"\n    }\n  },\n  \"35e97691acae49f6b128aaa6fe334be3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern details or textures. It does not clearly depict water or a water body, only the structure of a fountain in very poor lighting conditions. The quality is too low for training.\"\n    }\n  },\n  \"360c1388d13c4dbabc31cbc2b40ce825\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plant in a dish, not a body of water or any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"3708506c361a4a5f9b056ffe3f3cea99\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains liquid water. Both 'fountain' and 'liquid water' are part of the target class list. The image quality is good, and the object is suitable for physics simulation (water dynamics).\"\n    }\n  },\n  \"37a6e7da5c0943e398eab77f133e27c0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (trees, land, water) rather than focusing cleanly on a single water body. The water is just one component of a larger diorama.\"\n    }\n  },\n  \"383b49d7f1db4f6bbf22ac97ea72cb6d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water cooler dispenser. While it contains water, the primary object is the dispenser, not a body of water like a lake, ocean, river, pool, or even a puddle or fountain in the intended sense. It does not fit the category 'water-like_bodies'.\"\n    }\n  },\n  \"385097cdcf8645c886eaa5e6662072d4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a concrete structure (possibly a drain or basin). While there might be a tiny amount of water at the bottom, it is not the main subject and does not clearly represent any of the specified water-like bodies.\"\n    }\n  },\n  \"390be33a4b004815af13799848473962\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fountain or pool feature with visible water, which falls under the 'water-like_bodies' class (specifically 'fountain' or 'pool'). The quality is acceptable and it represents an object relevant for physics simulation.\"\n    }\n  },\n  \"393fd53e84a7411e985b8b74ab5bf419\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a stone structure (a well or part of a fountain) and surrounding paving. While it contains a small amount of water, the focus is not on the water body itself, but on the larger architectural element. It does not cleanly depict an object from the 'water-like_bodies' class.\"\n    }\n  },\n  \"39551a65eb4c4e92a80d12e6a1b0428e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoon character, not a body of water or any related object like a fountain or waterfall. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"3a1b3ca3a0494404a7900537a0f12b40\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water. The goal is to collect images of water-like bodies for physics simulation, and this image lacks the essential element (water).\"\n    }\n  },\n  \"3a219c2ab2e34575a640302bc6a0f973\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and doesn't clearly depict a recognizable water body. The blue patches are fragmented and abstract, making it difficult to identify as any specific type of water body like a lake, river, or pool. It also contains a significant structure, violating the single object rule.\"\n    }\n  },\n  \"3aa088f6c8534a5aa7309d9a5f87dd70\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a structure that might be a fountain, but it does not depict any water or water body itself. The focus is on the solid structure, not the water element required for the 'water-like_bodies' class.\"\n    }\n  },\n  \"3aad6c05c643499ba232a122a3d4696b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for physics simulation (water flow).\"\n    }\n  },\n  \"3bd0916bb6c540b296fbd648e9a32a20\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The quality is acceptable for a stylized asset, and fountains often involve water physics simulations in games.\"\n    }\n  },\n  \"3be2d9af367a45e993c55311cb879145\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not contain any water. The class 'water-like_bodies' requires the presence of water (e.g., flowing water, water surface). This image only depicts the solid container.\"\n    }\n  },\n  \"3be5b9f647cb4318ba75c3557879e860\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts the structure of a fountain, but it does not show any water. The target class is 'water-like_bodies', and this image lacks the essential element (water) required for this classification and for learning water physics.\"\n    }\n  },\n  \"3c025605bbd6403d92c171a4111cf840\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with a building and rocks, not just a water body. The water elements (streams/waterfalls) are integrated into this larger structure and are not the primary focus, violating the 'single object' guideline.\"\n    }\n  },\n  \"3c5c9dd67506432692c65b0129b64815\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pond, which belongs to the 'water-like_bodies' class. The low-poly style is acceptable, and the quality is sufficient. The surrounding elements (rocks, sand, plants) provide context and are typical for a pond asset. Water bodies are relevant for physics simulations in games.\"\n    }\n  },\n  \"3cea4142fa904d78aee8b2062b0c3e3e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone trough or planter filled with dirt and plants, not a water body or a functioning fountain. It does not depict any water.\"\n    }\n  },\n  \"3d355747050a4f28ac8d75b8d041677f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to clearly see the details of the fountain and the water. This is considered low quality.\"\n    }\n  },\n  \"3d6d003046ff41ee8bd7fff642a170bf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small waterfall or stream, which falls under the 'water-like_bodies' class. The quality is acceptable, and simulating water flow like this is relevant for physics simulation in games.\"\n    }\n  },\n  \"3e23b11c9f6840f3a955b8a11717a450\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a very low-quality, fragmented render that does not clearly depict any recognizable object, let alone a water body. It's impossible to discern what is being shown.\"\n    }\n  },\n  \"3e9a86732e8b47b290f084b70101d5af\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a water-like body.\"\n    }\n  },\n  \"3eda0d3de352426da6e5eff8af09c7cf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure, but it does not contain any visible water. The class 'water-like_bodies' requires the presence of water, especially for physics simulation purposes.\"\n    }\n  },\n  \"3eff7ffcc9134c7ebc5ac115edb8c63f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pond, which falls under the 'water-like_bodies' class. The quality is good, and while it includes surrounding rocks and a lily pad, these are common elements for a pond asset and the focus remains on the water body itself. It's suitable for physics simulation involving water.\"\n    }\n  },\n  \"3f4432de9e14464ab6241b69a783b669\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small body of water (pond/pool) in a stylized, blocky format common in video games. While stylized, it is recognizable as a water body and is suitable for training, adding diversity in art style. It's relevant for physics simulation within such game environments.\"\n    }\n  },\n  \"3ffc56c160854e3f938ce90a7aec2c41\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain or a small decorative pond, which falls under the 'water-like bodies' class. The water surface and body are visible, and the quality is acceptable for training. Fountains involve water physics, making this relevant for simulation.\"\n    }\n  },\n  \"401e0fcbd96144359b93b31c32975080\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a puddle or small pond, which belongs to the 'water-like_bodies' class. The quality is good, and it's suitable for physics simulation involving water surfaces.\"\n    }\n  },\n  \"421b3e5414fb41adb33413a5ef1b5adb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a swimming pool (the container) but does not depict any water within it. The class 'water-like_bodies' requires the presence or clear representation of water, especially for physics simulation purposes related to fluids. This render lacks that essential element.\"\n    }\n  },\n  \"421e9104759747f48287eb7f9b54575d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object belonging to the 'water-like_bodies' class. The objects shown are abstract and do not resemble water, a lake, pond, river, etc.\"\n    }\n  },\n  \"4284701c9e1c46c0ba2e0dc3c71aa86a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a puddle or small pond, which belongs to the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for physics simulation (e.g., splashing).\"\n    }\n  },\n  \"436f0e4b4d3d491985510a70515b2b60\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object belonging to the 'water-like_bodies' class. It appears to be a very thin, possibly solid object viewed from the side, against a white background, making it unrecognizable as water.\"\n    }\n  },\n  \"446f36f2ccb54cf1bc090cd5bc25dce1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a waterfall, which falls under the 'water-like_bodies' class. While it includes the surrounding terrain, this context is essential for simulating the physics of a waterfall interacting with its environment. The quality is acceptable for training purposes.\"\n    }\n  },\n  \"4476bba9fc5447c6a737e0afa346392c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cross-section of a building and terrain, not any object from the 'water-like_bodies' class (like a lake, pool, river, etc.).\"\n    }\n  },\n  \"44a23abe41e24c1c82d9e257ff3b6b17\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts an industrial container (IBC tote) that happens to contain water. It does not represent a natural or typical 'water-like body' such as a lake, river, ocean, or pool. The container itself is the main object, not the water body in the sense intended by the class description.\"\n    }\n  },\n  \"44a305c880e64c1cb5151b9af05addf7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (water body, umbrella, tree) rather than cleanly depicting just the water body itself.\"\n    }\n  },\n  \"44ae0a5f1ed44074965e0fb4bb198760\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a collection of small 3D models, possibly furniture or building components, not any form of water-like body.\"\n    }\n  },\n  \"44b51abf755941c3a71c477f77d08b25\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for physics simulation in a game.\"\n    }\n  },\n  \"47bd3625e5324bb7a0d795c762598ab0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with a prominent structure, water body, and waterfall. It is not focused on a single water-like body object, making it unsuitable for isolating and learning the physical properties of just the water.\"\n    }\n  },\n  \"47dc4c04463241d2a62fd0a795f041cc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is fragmented and does not clearly depict a recognizable water body or any object from the specified classes. It appears to be a low-quality or incomplete 3D model scan.\"\n    }\n  },\n  \"48b218208042472ab1bae63ec0440b68\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely low contrast and the object is very faint and indistinct. It is impossible to clearly identify it as belonging to the 'water-like_bodies' class. The quality is too low for training.\"\n    }\n  },\n  \"49211ba2343e45e8b0c50102f5ca91ec\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but it does not depict a body of water or flowing water, which is the focus of the 'water-like_bodies' class for physics simulation.\"\n    }\n  },\n  \"499616c1d188425282144a39cfc4b6cb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool, which falls under the 'water-like_bodies' class. The quality is good, and the water surface is visible, making it suitable for physics simulation training related to liquids.\"\n    }\n  },\n  \"4a3c173129314b9c9d708ab0aaf81526\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but does not clearly depict water itself (flowing or collected). The focus is on the metal fixture, not the water body, making it unsuitable for the 'water-like_bodies' class, especially for physics simulation purposes related to water.\"\n    }\n  },\n  \"4b118aaed5c14c038588d986228b77f1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts ripples on a surface, which could be related to water, but the texture and color are highly unrealistic (bright yellow/gold) and make it look like a solid, metallic object rather than liquid water. This unrealistic material representation makes it unsuitable for learning water physics.\"\n    }\n  },\n  \"4b5d2de454a140d783d9d08bd4743855\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be an empty pool or skate park bowl. It does not contain any water or depict a 'water-like body' as required by the class definition.\"\n    }\n  },\n  \"4bffb0a7f99648f58c3a3db8ddcfd023\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing multiple objects (trees, land, character, path) in addition to the water body (pond/lake). We need images focusing primarily on the water-like body itself, not a complex diorama.\"\n    }\n  },\n  \"4cda6eb04ee74aabbad85a8c6ae43e37\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' category within the 'water-like_bodies' class. The image quality is good, and the object is relevant for physics simulation (fluid dynamics).\"\n    }\n  },\n  \"4db52ba813d545f9b313870b8469c339\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a structure that might be part of a fountain, but it does not clearly depict any water or water body. The focus is on the solid structure, not the liquid element required for the 'water-like_bodies' class.\"\n    }\n  },\n  \"4dcdb91d61f84c1a9d2b012355f867e8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which includes a water body and falls under the specified class. The quality is good, and it represents a single functional object relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"4deee6ca6ebd4f838e4c5e9a293e2720\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of machinery or equipment, not a water-like body such as a lake, river, pool, or puddle.\"\n    }\n  },\n  \"4ec2c692f1e04ff28778e00f805f3657\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water jug/cooler, which is a container for water, not a 'water-like body' such as a lake, river, ocean, or pool itself. The focus is on the container, not the water as a body.\"\n    }\n  },\n  \"4f091bcb17ce42ee9a7e678a16ddc349\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized pond or pool, which falls under the 'water-like_bodies' class. The water surface is visible and the overall quality is good. While it includes decorative elements like plants and a mushroom, they are part of the pond structure, similar to how a vase might be included with flowers. This type of asset is common in games and the water itself is suitable for physics simulation.\"\n    }\n  },\n  \"4f43985e562f43d5b2b48afc53338a27\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify any object, let alone one belonging to the 'water-like_bodies' class. The quality is too low for training.\"\n    }\n  },\n  \"5049d1fd912e464094e6abcd62a16949\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water or a water body itself. The class is 'water-like_bodies', and this image lacks the primary element (water).\"\n    }\n  },\n  \"509777280d8e4292a0fe46f19268782c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it very difficult to discern the object. It appears to be a fountain spout, but the water element is not clearly visible due to the brightness. The quality is too low for training.\"\n    }\n  },\n  \"513e91da9517403284ba5d2652950275\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water, which is the key element for the 'water-like_bodies' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"514007eed6af4992ba47cd523b4f4f6e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain (made of stone), not the water itself. The target class is 'water-like_bodies' for simulating water physics, not the container.\"\n    }\n  },\n  \"52bf2409e334480ca43bbe85bb0b39f7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a creature or monster, not a water-like body such as a lake, ocean, river, pool, etc.\"\n    }\n  },\n  \"52c818cc6bad4129941378ec2bec34a5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a water fountain, which falls under the 'fountain' category within the 'water-like_bodies' class. The image quality is good and it represents a single object suitable for physics simulation (water flow).\"\n    }\n  },\n  \"52d3e77954904505ae697e4e790a31c7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a clay pot or jug, which does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"5382147d49f24807ae5682f166153c96\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class. The quality is good, and the object is suitable for physics simulation involving water dynamics.\"\n    }\n  },\n  \"53905f5e6f81450a8643ba031f154d21\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"54015a90664d454c9fe52873ff4fdd7f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (tree, land, rocks, bushes) and not just the water body (pond). The water body is only a small part of the overall image.\"\n    }\n  },\n  \"54ce14d9df004287b6feb492d1ef5792\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains water and falls under the 'water-like_bodies' class. The quality is good, and while it includes structural elements, this is expected for a fountain. It is suitable for physics simulation (water dynamics).\"\n    }\n  },\n  \"54cee1f1e48a45678c237b3313e473c4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, metallic object, possibly a mold or part of machinery, not a body of water or liquid water.\"\n    }\n  },\n  \"54e6d60677c04741a2ad3b84b2e41b8f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very small, fragmented, and oddly shaped piece that vaguely resembles a water surface. It does not clearly depict any recognizable water body (like a lake, river, pool, etc.) and looks more like an isolated texture swatch. It's not suitable for representing the class or for physics simulation training.\"\n    }\n  },\n  \"57a4890ecadf483bb6d94b009cb4b7dd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a water surface, which belongs to the 'water-like_bodies' class. The quality is good, and it represents an isolated object suitable for physics simulation training.\"\n    }\n  },\n  \"57be766363f54139818de1dcb1f89160\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small body of water, like a puddle or a stylized pool. It fits within the 'water-like_bodies' class and is suitable for physics simulation purposes (e.g., surface interaction).\"\n    }\n  },\n  \"583a5052678842b9ab0dc6ab64ddbfb7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small piece of terrain, possibly with some moss or vegetation. It does not clearly show a recognizable water body like a lake, pond, river, or even a puddle. The representation of water, if any, is ambiguous and indistinct.\"\n    }\n  },\n  \"5854196557e04a42b17ed38b016b83da\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' and 'water body' categories. The quality is good, and while it includes surrounding elements like the deck and a pool float, the main focus is the water body itself. This is relevant for physics simulation (water dynamics, buoyancy).\"\n    }\n  },\n  \"58ee97e58e37452783076caad9184459\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (raft, duck, debris) floating on the water surface, not just the water body itself. We need images focusing primarily on the water.\"\n    }\n  },\n  \"590cf2b529e64a289d3c222bcec50120\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of terrain or landscape, not a water body like a lake, river, ocean, etc. It does not belong to the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"593135fb1d3c435bb2bc60380baf5a0e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The image quality is good, and the object is suitable for physics simulation involving water.\"\n    }\n  },\n  \"59c6b884ccf0489d84413227d7e5abcd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any water-like bodies. It shows a character standing on a solid surface, possibly ground or pavement.\"\n    }\n  },\n  \"59ecc9ff3a62404dafe635f1c8f43f04\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a water-like surface, but it is part of a larger structure (a room or container section) with other prominent objects like decking and furniture. It does not cleanly depict a single water body as the primary focus.\"\n    }\n  },\n  \"5a5a0f6f027e42fba958b347aeb380d8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small stream or river section, which falls under the 'water-like_bodies' class. The quality is acceptable, and it represents a natural water body within its environment, suitable for game development and potentially physics simulation (water flow, interaction).\"\n    }\n  },\n  \"5ab48829e967488f8ee1a3d08d35cfd5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which is one of the specified subclasses ('fountain', 'water body'). The water within the fountain basin is visible. The image quality is adequate for training purposes and relevant for physics simulation (water dynamics within the fountain).\"\n    }\n  },\n  \"5ae13d6c0d3840529af4a2f0ce659a78\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (an entire landscape with trees, land, and a structure) rather than focusing cleanly on a single water body like a lake, ocean, or waterfall. While water is present, it's integrated into a much larger environment, making it unsuitable for isolating the properties of just the water body.\"\n    }\n  },\n  \"5aed4bfb0309452e9686e0c3a82a1638\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object or scene. It is unusable.\"\n    }\n  },\n  \"5c28b314cd5a4d039d274f66dd9fbed9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts the solid structure of a fountain, not the water itself. While 'fountain' is listed, the image doesn't show flowing or contained water clearly enough to be useful for simulating water physics.\"\n    }\n  },\n  \"5d1b8f9012754e92b4bb87a2c90cb17a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a platform or base structure, possibly a fire pit base, with a very small, indistinct central area that might contain a water-like texture. It does not clearly or prominently depict a water body like a pool, lake, or river. The water element is too small and ambiguous for training purposes.\"\n    }\n  },\n  \"5e2337b4267541b3a13929e796af8d95\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a water body. Both 'fountain' and 'water body' are included in the target class list. The image quality is good, and the object is relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"5e236afbc2d04f2499b38108def849fe\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a water body and is listed in the acceptable classes. The image quality is good, and the object is relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"5e3accfa520a47988259610907d3ebda\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any visible water body or water-like surface. It shows a dry structure that might be a fountain, but without water, it doesn't fit the requested class.\"\n    }\n  },\n  \"60bc8348b5aa454f8d9bc75b978131b0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mechanical object (perhaps part of a landing gear or vehicle) on a solid orange surface, not any form of water-like body.\"\n    }\n  },\n  \"61bd41785d524152b021eda19c37e6da\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which includes a water body, fitting the requested class. The stylized blocky aesthetic is acceptable for diversity, and the object is recognizable and suitable for physics simulation (water flow).\"\n    }\n  },\n  \"62806d0bafb84e808ab341bcef528465\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class. The quality is good, and it represents an object (fountain with water) relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"628c8f40cdaf49a5838cfa24503d7890\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water bottle, which contains water, but it does not depict a 'water-like body' such as a lake, river, ocean, pool, puddle, etc., as intended by the class definition. The primary object is the bottle, not the water itself in an environmental context.\"\n    }\n  },\n  \"6332a7877bae40c6a945ec0a348ab30b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, especially the background, which washes out details. The object (fountain) is also quite small in the frame and not the main focus.\"\n    }\n  },\n  \"6358d314a8584356a90b9ebb582c095a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone structure, possibly part of a fountain or planter, but does not clearly depict any water-like body as requested by the class list. It primarily shows stone blocks.\"\n    }\n  },\n  \"640042f624b2438fb4fe6a85942aedf4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene including a waterfall, stream, water wheel, boat, and terrain, rather than cleanly isolating a single water body object. While it contains elements of the target class, the presence of multiple distinct objects violates the 'ONE SINGLE OBJECT' requirement.\"\n    }\n  },\n  \"64aaff5278aa4b409b2dff3d9c134498\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a water surface, likely representing a pond or lake, which falls under the 'water-like_bodies' class. While it includes lily pads and reeds, these are contextually appropriate elements often found on such water bodies and do not obscure the primary subject. The image quality is good, and water surfaces are relevant for physics simulations in games.\"\n    }\n  },\n  \"657b7bfba4b64e3289bd5aa5ddfa2f24\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fountain structure, but it does not contain any water. The class is 'water-like_bodies', and this image does not show any water.\"\n    }\n  },\n  \"65f8696f000248ff9d2abb05565b5a72\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized diorama or decorative object featuring a small body of water, rather than a realistic representation of a lake, pond, or other water body suitable for general physics simulation. It includes multiple distinct elements (base plate, plants, rock, water) combined into one object, and the water itself is not rendered realistically.\"\n    }\n  },\n  \"6624b028fa1e4ace900feab112532f11\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a splash of a white liquid, which looks more like milk or paint than water. While technically 'liquid water', it doesn't clearly represent the intended 'water-like bodies' such as lakes, rivers, or pools, and its transient nature makes it less suitable for learning general physics parameters of water bodies compared to more stable forms.\"\n    }\n  },\n  \"665f548eb30b4e0f9538fde406ec9357\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pot or vase, which does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"673d6abc3d8e4962a0a44c440e8e7f5a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid structure, potentially a fountain base, but does not depict any water or water body itself, which is the required class.\"\n    }\n  },\n  \"67f986f007c0483c8da77291dad6b9bf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex diorama scene with multiple elements (trees, rocks, landscape) rather than focusing primarily on the water body (waterfall and pond). The water elements are relatively small parts of the overall model, making it unsuitable for isolating the 'water-like_bodies' class for physics simulation training.\"\n    }\n  },\n  \"68734508a01a4105923b2797f90503a6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not contain any water. The target class is 'water-like_bodies', and this image does not depict water itself, which is necessary for learning water physics simulation parameters.\"\n    }\n  },\n  \"69b2cc86bb024ce8a9480d3e198b878d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone one from the 'water-like_bodies' class. It is unusable for training.\"\n    }\n  },\n  \"6a8db7d061ac4ee0a44ea7e5f7ed582e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class. The quality is good, and simulating water in a fountain is relevant for physics simulation in games.\"\n    }\n  },\n  \"6b1dd66a49e84b24a42bb9fa0c254f3f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain structure, which falls under the 'fountain' category within the 'water-like_bodies' class list. The image quality is good, and the object is isolated. While it doesn't show water, the fountain structure itself is relevant for game development and potential water physics simulation within it.\"\n    }\n  },\n  \"6bc739d99a094d44b2011b1cf4075490\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a river and a waterfall, which belong to the 'water-like_bodies' class. While it includes other elements like trees and land, these are natural context for a river/waterfall. The stylized representation is clear and suitable for physics simulation training.\"\n    }\n  },\n  \"6bf754fa129041e7bfec2845b1806a13\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a whole scene (pool, patio, chairs, background) rather than focusing cleanly on the water body (pool) itself. We need images that isolate the object class.\"\n    }\n  },\n  \"6c1b44e0848347299aa3676d1de38a2d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows liquid water inside a container (a bottle or thermos). The container is a significant, distinct object and not part of the 'water-like_bodies' class. We are looking for images primarily depicting the water body itself, like a lake, river, pool, or puddle, not water contained within another object. Additionally, the image quality is low (grayscale, lacks detail).\"\n    }\n  },\n  \"6c658096fcf5417da204211bedec201f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank, which is a container for water, not a water body itself like a lake, pond, river, or pool. The class 'water-like_bodies' refers to the water itself or the feature it forms, not the container.\"\n    }\n  },\n  \"6d1a8d3e8f544ff7b65c91eff1d21891\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (pool structure, deck, chairs, wall) in addition to the pool/water. We need images focusing primarily on the water body itself for physics simulation training.\"\n    }\n  },\n  \"6e4aa8f9abf8495ab6828b79323492c4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a monument/plaza area with statues and planters, but does not contain any visible water body like a fountain, pool, pond, or other water-like feature relevant to the requested class.\"\n    }\n  },\n  \"6ea81b68c079486b9aea3b8969345d29\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone path or surface, not any form of water-like body as specified in the class list.\"\n    }\n  },\n  \"6f0e1e72fe024cdaa2e7615fc3fc1c19\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts small pools of water within a decorative structure, which falls under the 'pool' or 'fountain' subcategories of 'water-like_bodies'. The image quality is good, and while it includes the structure, this is integral to the water feature. The water itself is relevant for physics simulation (fluid dynamics).\"\n    }\n  },\n  \"706da4fbc0fe4d40a90021739421ba01\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (lighthouse, rocks, plants, frog) in addition to the small pond. It depicts a scene rather than focusing primarily on the water body itself, violating the 'ONE SINGLE OBJECT' requirement.\"\n    }\n  },\n  \"7101eaf08447436bb5d3b26fe15ce744\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a contained body of water, resembling a small pool or fountain base, which falls under the 'water-like_bodies' class. The quality is good and it represents a single object suitable for physics simulation (e.g., water surface interaction).\"\n    }\n  },\n  \"710d07818aab4abeb77139ac1af3bfb4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a river and a waterfall, which belong to the 'water-like_bodies' class. Although part of a larger landscape (floating island), the water features are prominent and recognizable. The stylized nature is acceptable, and the quality is good. Water bodies like rivers and waterfalls are relevant for physics simulation in games.\"\n    }\n  },\n  \"710f85158ad7498fb7c8ba4c0bea268f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone structure, possibly part of a fountain, but it does not depict any water or water body itself. The target class is 'water-like_bodies'.\"\n    }\n  },\n  \"719f4a2392924c789a6eba428f61bc3e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure or ruins, not any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"71bc7aa9a0424588876b782284af5b73\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which is one of the specified classes ('fountain', 'water body', 'liquid water'). The image quality is adequate and it represents a single, distinct object suitable for the dataset.\"\n    }\n  },\n  \"71c0688c409949fea3cfd199ff7c60ed\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'water-like_bodies' class. It appears to show a small, white, possibly plastic object, like a lid or a small dish.\"\n    }\n  },\n  \"71c3fc9b1e304660822719824d13b98c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a water body and a small waterfall/fountain feature, which belong to the requested class. Although it includes a structure, this is integral to the fountain/waterfall aspect. The stylized representation is acceptable for diversity, and the quality is good. Water physics (flow, surface) are relevant for simulation.\"\n    }\n  },\n  \"7214318ca2eb4962b870c3e7cf73c8f2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cross-section of land with a structure, not a water body like a lake, pond, ocean, etc.\"\n    }\n  },\n  \"72781d82befd4a8191414986d8a6b883\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'water-like_bodies' class. It shows abstract shapes (lines and spheres).\"\n    }\n  },\n  \"73cb68d2e3ee4a75ab0b9e568b09449e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but does not clearly depict water or a water body itself, which is the focus of the 'water-like_bodies' class. We are interested in the water aspect for physics simulation, not the solid structure of the fountain.\"\n    }\n  },\n  \"752f299ad0b34275817baef05571727f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows solid blue surfaces forming a corner, potentially representing an empty pool or container. It does not clearly depict liquid water or any specific water body. The texture is completely uniform and lacks any characteristics of water (like transparency, reflections, or ripples), making it unsuitable for learning water physics.\"\n    }\n  },\n  \"75350e5371dd48a4919e5cd4f27896d4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a drinking fountain, but does not depict any actual water or water body, which is the target class.\"\n    }\n  },\n  \"75b62800b6ac4e46a6ae4fc0d3a5487c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely black and does not depict any recognizable object, let alone one from the 'water-like_bodies' class.\"\n    }\n  },\n  \"75c0247364b445acb241cae283289991\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains water bodies in its basins. Fountains are listed in the target class and simulating water physics is relevant for game development.\"\n    }\n  },\n  \"76b166b7b65d4b4aa4b348d86d5026f5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a faucet/spigot, which is related to water delivery, but it is not a body of water itself (like a lake, river, pool, etc.) as specified by the class 'water-like_bodies'.\"\n    }\n  },\n  \"770a898896e04799a97f61a4ba7b1690\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a water surface, which falls under the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for physics simulation (e.g., simulating waves or interaction with objects).\"\n    }\n  },\n  \"77847f69000a46fab15494b6ba54cae0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a human figure, not a water body or any object related to the 'water-like_bodies' class.\"\n    }\n  },\n  \"77d95c70624a4ed8b35a06ba63175427\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an orange, bag-like object, not a water-like body.\"\n    }\n  },\n  \"77dd0bfd4a2649e29bf68baf1b9968f0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a water-like body.\"\n    }\n  },\n  \"7890ec1461784e59966be26d0bd9f97b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, platform, ground, small shapes) in addition to the central water feature (fountain/pool). We need images focusing primarily on the water body itself.\"\n    }\n  },\n  \"7920a19561074be1bac30368e5476361\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank, which is a container for water, not a water body itself like a lake, river, pool, or even just liquid water/water surface as specified in the class list.\"\n    }\n  },\n  \"79471848de9942479c877bdc3902f128\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dry stone structure, possibly an old well or fountain base, but it does not depict any water or water body. It is therefore not suitable for the 'water-like_bodies' class.\"\n    }\n  },\n  \"796e0b2660a440e3a2e8a24c6ed0fe72\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a drinking fountain, not the water itself. While 'fountain' is listed as a potential object, the focus for the 'water-like_bodies' class should be on the water, not the container or structure, especially for physics simulation purposes.\"\n    }\n  },\n  \"79a5cb5e175142dfadf07fbeade7a25e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to identify the object. It does not clearly depict any water-like body.\"\n    }\n  },\n  \"7a01616426184d8bbbe1ea8b00e0c7e1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains water bodies and is listed in the target classes. The quality is good and it's suitable for physics simulation involving water.\"\n    }\n  },\n  \"7a62eb83cf934db3bc1bea9c59d2ee69\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it very difficult to discern the object. It does not clearly depict any recognizable water-like body or feature like a fountain or waterfall.\"\n    }\n  },\n  \"7bc6feec69894510a4c9040fd5fe46b3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a ceramic pitcher/jug, which is a container, not a water-like body itself (like a lake, river, puddle, etc.).\"\n    }\n  },\n  \"7c040b34c9fc4b889098204b6ad7efa0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone urn/vase on a pedestal, not a water-like body.\"\n    }\n  },\n  \"7c63c71605ee484197eeb94c350cb6ce\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water bottle, which is a container for water, not a 'water-like body' such as a lake, river, ocean, or pool.\"\n    }\n  },\n  \"7cf9722641f3485f9edae8109799128a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a body of water. Both 'fountain' and 'water body' are listed classes. The image quality is good and suitable for training. Fountains involve water physics, making this relevant for simulation.\"\n    }\n  },\n  \"7d51da5ebcfb4db0a4ba34d08762db8a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any water-like bodies. It shows a dry, sandy area with some depressions and structures.\"\n    }\n  },\n  \"7d7b7dd47aeb472297912a320efcd005\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' category within the 'water-like_bodies' class. The quality is good, and it represents a typical object that might be used in physics simulations involving water.\"\n    }\n  },\n  \"7dfa8d08d9dc4742b979fb783bf909c1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object from the 'water-like_bodies' class. The shape is ambiguous and the solid beige color is uncharacteristic of water, making it hard to recognize as such.\"\n    }\n  },\n  \"7e40f6c7213744cabd88b72c63d25feb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a dynamic water effect (splash, mist) on a small surface, representing 'liquid water' or a 'puddle'. This is relevant for physics simulation, especially for effects like impacts or small water interactions. The quality is acceptable.\"\n    }\n  },\n  \"7f5ff54443dc4348b2242c07a872adbc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which is listed in the target classes. While it doesn't show flowing water, the fountain structure itself implies the presence and containment of water, making it relevant for water physics simulation context within a game environment. The image quality is good.\"\n    }\n  },\n  \"7fbf4f010e4045d6871dc7fe922bfe51\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with a building and rocks, not just a water body. The water elements (streams/waterfalls) are integrated into the larger structure and environment, rather than being the primary focus or a single, distinct object.\"\n    }\n  },\n  \"80affb207dfa49678826fa946b733dae\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily shows a mossy log or stump, not a clear depiction of a water-like body. Any potential water (like a small puddle) is indistinct and not the main focus.\"\n    }\n  },\n  \"80fe846f10fc464f8a3972ed355798d8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty pool shell, not a body of water like a pool filled with water. The class 'water-like_bodies' refers to the water itself, not the container.\"\n    }\n  },\n  \"8220d4291d1946cf8c7c433e90a92a7a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground with grass, a post, and pavement, not any form of water-like body.\"\n    }\n  },\n  \"8418681b20c34bf49572e3724da928f7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool, which falls under the 'water-like_bodies' class. The image quality is good, and it represents a single object relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"8536327fec9a4052ad621f32b5adc391\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a section of land with rocks and a tree trunk, but does not depict any water-like bodies like a lake, pond, river, etc.\"\n    }\n  },\n  \"85565ec5894e4fcc8e0f2fe363468b94\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a stone well or basin. While it contains something that looks like water or a wet surface inside, the main object is the container, not the water itself. The water is not clearly depicted as a distinct water body like a lake, river, or pool.\"\n    }\n  },\n  \"8580500134194ba5be3f6df7593049f2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a body of water and flowing water, fitting the 'water-like_bodies' category. The quality is acceptable, and the water dynamics are relevant for physics simulation.\"\n    }\n  },\n  \"85a1338a698e45708551448176f1207b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized body of liquid water, which fits the 'water-like_bodies' class. The quality is good, and it's isolated against a clean background. Simulating water physics is relevant for game development.\"\n    }\n  },\n  \"868ea8df42be4476bbea5ba119c58717\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small body of water (like a pond or part of a lake) within a natural setting. While it includes surrounding terrain, this is typical for representing such water bodies in context, which is relevant for physics simulation (e.g., interaction with banks). The image quality is adequate.\"\n    }\n  },\n  \"86da408f5b9c4b209310856c7d5ded77\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank (white) and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"873ae1852cd642a28386afb57b3b7121\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract geometric shape, not a water-like body. It does not belong to any of the specified classes like lake, pond, ocean, etc.\"\n    }\n  },\n  \"874d5e7d9f1a47f1a5e3315ee81bcf85\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but it does not depict any actual water or a water body. The focus is on the solid object, not the liquid water which is the target class for physics simulation.\"\n    }\n  },\n  \"87605b8662e349cba2ec63f92db4b45b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a bird bath structure and a patch of grass. While it contains water, the water body itself is a very small component of the overall image and is contained within another distinct object (the bird bath). This does not meet the requirement of cleanly depicting a single object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"87e37afc6d1544b396405f0287b6f224\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern details, which affects the overall quality for training data.\"\n    }\n  },\n  \"87e703f3ce66458a9f624382edadaad1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts the stone structure of the fountain, not the water itself. While 'fountain' is listed as a related term, the focus for physics simulation of 'water-like_bodies' should be on the water, which is minimally and poorly represented here.\"\n    }\n  },\n  \"87eb05deb9a34320bf77fa6147929314\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fountain structure, but there is no visible water. The class 'water-like_bodies' requires the presence of water, even if it's part of a fountain.\"\n    }\n  },\n  \"881908c9780b4b9c8c40b6b0f6e90af5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not contain any water. The target class is 'water-like_bodies', and this image does not depict water.\"\n    }\n  },\n  \"8824345e46a54b49b2b91fc47f9b0019\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fragmented, distorted view of what appears to be a building or structure, not any form of water-like body. The quality is extremely low and the object is unrecognizable and irrelevant to the requested class.\"\n    }\n  },\n  \"8931ca6e860c4037bd1947ba5147b3c7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky landscape with stairs and vegetation, not any form of water-like body as specified in the class list.\"\n    }\n  },\n  \"8a38604b209f4c0e9ab28f7204340d39\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a water body. It shows a small section of terrain, possibly muddy or with very shallow, unclear water, alongside a large untextured block. It's not a good representation of the target class and includes other distracting elements.\"\n    }\n  },\n  \"8a3f56f26e294fba821a5c9c800ecce1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid container or vessel, not a body of water or liquid water itself. It does not fit the 'water-like_bodies' class.\"\n    }\n  },\n  \"8a672ca5ce7d4c02a64b2fa81ddb7df2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a complex scene with a house, patio, and landscaping, not just a single water-like body. While there is a structure that might be a fountain, it's not clearly depicted as containing water, and it's heavily integrated into the surrounding environment, violating the single object rule.\"\n    }\n  },\n  \"8c121413fdb642788e25ce6d4a22cd17\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a container, possibly a thermos or water bottle, not a body of water like a lake, ocean, pool, or even liquid water itself. Therefore, it does not fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"8c66093ab50d4f54be665b6f0699e2ef\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a water tank, which is a container for water, not a water body itself (like a lake, river, pool, etc.). The class is focused on the water itself, not the container.\"\n    }\n  },\n  \"8c7a4a1606704802a8bc6c5671b647db\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty pool structure, not a body of water. It does not depict any of the classes listed (lake, pond, ocean, pool *with water*, puddle, river, stream, waterfall, fountain, water surface, liquid water, water body).\"\n    }\n  },\n  \"8cf6304603574e92ba35faeb68d481b0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, land, rock formation) in addition to the water (waterfall/stream). We are looking for images that cleanly depict a single object from the target class.\"\n    }\n  },\n  \"8d39d88de9a64c73b3d96ec30b250738\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small body of water, like a stream or pond section, surrounded by rocks. This fits within the 'water-like_bodies' class. The quality is acceptable for training purposes, and simulating water physics in such an environment is relevant for video games.\"\n    }\n  },\n  \"8d3d5a147ed64148aeda1dd866a0f38b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object or determine if it belongs to the 'water-like_bodies' class. The quality is too low for training data.\"\n    }\n  },\n  \"8e75b8d408ea4c8581ef7d7f92d53c9a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' category within the 'water-like_bodies' class. The image quality is good, and the object is relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"8eb5979876de443882901ec977b3a43d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty container, possibly a fountain basin or planter, not a body of water. It does not belong to the 'water-like_bodies' class. Additionally, the image is extremely overexposed and lacks detail, making it low quality.\"\n    }\n  },\n  \"904067ee2f4b4610a6a3386216333f77\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts the structure of a fountain (basin and statue) but does not contain any water, which is the key element for the 'water-like_bodies' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"9182e2e8db744e9799d31b3206dfe47a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain (made of stone), but it does not depict any water or water body itself, which is the target class.\"\n    }\n  },\n  \"91a61c7efa114de5b3cd6e354982a71c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground with grass and debris, not any form of water-like body.\"\n    }\n  },\n  \"923897309b794266be80a788a3addd1f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable water-like body. The rendering style with blocky, multi-colored polygons makes it unsuitable for learning realistic physical properties of water.\"\n    }\n  },\n  \"929ade0c35d544169ae5a8efaec01918\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a pool or basin, but does not depict any water or liquid, which is the defining characteristic of the 'water-like_bodies' class.\"\n    }\n  },\n  \"93ce6637c1d8477396c9be8fb8d1a049\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' category. The quality is good, and it represents a single object suitable for physics simulation (water flow/pooling).\"\n    }\n  },\n  \"94cb138a42d94b21a2535a06f85619bd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a concrete structure, not a water body or water-like surface. It does not belong to the requested class.\"\n    }\n  },\n  \"952aba385fe84d5ca2a0979fb64e37e5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing a fountain and puddles, but it also includes significant portions of the surrounding plaza, benches, and partial figures. It does not cleanly depict a single object from the 'water-like_bodies' class.\"\n    }\n  },\n  \"9546a9fd893345449cb08d59057f54b2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains abstract 3D shapes and does not depict any water-like bodies such as lakes, ponds, rivers, or even a simple water surface.\"\n    }\n  },\n  \"95494f1a2912425888e2de5dacee6e08\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky structure, possibly a windmill, on a textured blocky ground. It does not show any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"960fca10152e4fb4a6420421b22aabf3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing a body of water, which falls under the specified classes ('fountain', 'water body', 'liquid water'). The image quality is good, and the water is distinct within the structure. This type of object is relevant for physics simulations in a game.\"\n    }\n  },\n  \"9812aa1535454df886fea502373edf08\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water. The class is 'water-like_bodies', and this image only shows the solid container, not the water itself, which is needed for learning water physics.\"\n    }\n  },\n  \"99ba16783fd144a49aad95917bbd5345\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure containing water, rather than a clear, isolated water body like a lake, pool, or river. The focus is more on the entire building/structure than the water itself, making it unsuitable for learning general water physics.\"\n    }\n  },\n  \"9a0a41e2b0f74230850efce53380fd08\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized icon of a water droplet, not a realistic depiction of a water body like a lake, ocean, or pool. It is not suitable for learning physics parameters for simulating larger water bodies.\"\n    }\n  },\n  \"9b277189dee24f48a102d856e83c928c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a simple blue plane, which is too abstract and lacks the visual characteristics (like ripples, transparency, reflection, depth) to clearly represent any specific water-like body (pool, lake, etc.). It doesn't provide enough detail for learning visual or physical properties of water for game development.\"\n    }\n  },\n  \"9bd3513fc79c4d059f0a6283f69389e5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized water surface, which falls under the 'water-like_bodies' class. The quality is good, and it represents a single object suitable for physics simulation in a game context.\"\n    }\n  },\n  \"9c24a5196c8c494c89faf5c5c039d6e2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone structure, possibly part of a fountain or waterfall, but it does not depict any water or water body itself, which is the target class.\"\n    }\n  },\n  \"9d4577cc56a945eeba5df2cdefef9710\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a seaplane, which is an aircraft, not a body of water like a lake, ocean, river, etc.\"\n    }\n  },\n  \"9d5136a18ede489c82755108fe4ac8e5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it impossible to clearly identify the object. It does not resemble any form of water-like body.\"\n    }\n  },\n  \"9ddd7c5da4a74371b400e81e4cfbec0c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid object, possibly a decorative bowl or part of a fountain structure, but it does not show any water or a water body itself. It is not suitable for the 'water-like_bodies' class.\"\n    }\n  },\n  \"9de47420183b4057831515b290e9c193\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water, which is the key element for the 'water-like_bodies' class. We need images of the water itself (e.g., water flowing in the fountain, water collected in the basin) for physics simulation purposes.\"\n    }\n  },\n  \"9df20fc35c5a4cac904ebe9f36ee368d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a decorative metal fish sculpture on a stone background, possibly part of a fountain, but it does not depict any water or water body itself, which is the required class.\"\n    }\n  },\n  \"9e45fffbca1948449c89753c72bb4e7a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flamingo pool float, which is an object often found in water, but it is not a water-like body itself (like a pool, lake, river, etc.).\"\n    }\n  },\n  \"9fd8821504004af186cd9b034a1743cf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue on a rock, not any form of water body like a lake, pond, fountain, etc. It does not fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"a12d35e61c8e4ab4b715bd11974b37c2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a complex architectural element, possibly containing a small fountain or pool, but the water body itself is not the primary focus and is integrated into a much larger structure. This does not represent a clean, single object from the 'water-like_bodies' class.\"\n    }\n  },\n  \"a1cb11095d664dce8e0e84419f9bfa8c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized body of water, possibly a pool or part of a fountain/canal system. While stylized, it clearly represents a water body and is suitable for physics simulation involving contained liquids. The quality is acceptable.\"\n    }\n  },\n  \"a221c6525dc24dd89cf86a2967d65148\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water container (IBC tote), not a natural or artificial body of water like a lake, river, pool, or fountain. While it contains water, the primary object depicted is the container, which does not fit the requested classes for 'water-like_bodies'.\"\n    }\n  },\n  \"a2420e0d2fa24930837781013018564b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The quality is good, and the object is relevant for physics simulation (water flow).\"\n    }\n  },\n  \"a24b2438e3674b3b8c334d136dc89126\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fragment of a stone structure, possibly a shrine or part of a building, not a water body. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"a26c0843e9f34fd5bb8ce3850bccc740\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid object, possibly a vase or container, not a body of water or any form of liquid water as required by the class 'water-like_bodies'. Additionally, the image is extremely overexposed and lacks detail.\"\n    }\n  },\n  \"a4e1102dd92d4fe2b4ad68785d62cf95\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure (stone pillar and base), but it does not depict any water, which is the target class ('water-like_bodies'). We need images of the water itself for physics simulation.\"\n    }\n  },\n  \"a51c2ca7535a4dcbb4cf708a21ad88c5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a highly stylized, rainbow-colored flow which does not realistically represent any of the classes listed under 'water-like_bodies'. While it shows a liquid-like flow, the unrealistic coloring makes it unsuitable for learning general physics parameters of water for simulation purposes.\"\n    }\n  },\n  \"a5500bc2dd1a46999f512f0314ab7722\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object. It does not depict any recognizable water-like body from the specified list.\"\n    }\n  },\n  \"a5a6c3aa412d44f6be7c9b0b39cb10cc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern any object, let alone one belonging to the 'water-like_bodies' class. The quality is too low for training.\"\n    }\n  },\n  \"a5ddb659b9974f669af0318111287841\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex landscape scene with multiple elements (land, structures, several water bodies) rather than focusing cleanly on a single water-like body. We need images focused primarily on one instance of the target class.\"\n    }\n  },\n  \"a6108c3b0dd24f9487cbcfa690b39f50\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone architectural structure, possibly part of a fountain, but does not depict any water or water body itself. It belongs to a different object class.\"\n    }\n  },\n  \"a6e6b2155e2a495896d1446bf7f047c4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a low-polygon, untextured 3D model that appears to be a rocky landscape or terrain feature, not a water body. It does not resemble any of the classes listed (lake, pond, ocean, etc.).\"\n    }\n  },\n  \"a7acecdd7d354f0c825fa0eff23f6982\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object or assess its quality. It does not clearly depict any water-like body.\"\n    }\n  },\n  \"a87f90ddf6e14bc08b23e137975bc14b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a flask containing a liquid, not a 'water-like body' like a lake, river, ocean, or pool as the main subject. The container (flask) is a significant part of the image and not part of the target class.\"\n    }\n  },\n  \"a88ee15a32834989bd2a5b8c633cd598\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a pool, which belongs to the target class, but it also includes a separate, unrelated object (an umbrella) floating above it. We need images depicting only a single object from the class.\"\n    }\n  },\n  \"aa547b4f59e5436380357ff6cb1910ed\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable water-like body. It looks more like a stylized container with some contents, not a natural or artificial body of water like a lake, pool, or river.\"\n    }\n  },\n  \"aa7111584d2842dab15999bd2653651c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain or decorative pond, which falls under the 'water-like_bodies' class. The quality is good, and it represents a single object relevant for game environments and potential water physics simulation.\"\n    }\n  },\n  \"aade585b2f5747ba95d5a0dc5d0d94a0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows pool floats (toys), not a water body like a pool, lake, or ocean itself. The target class is 'water-like_bodies'.\"\n    }\n  },\n  \"ab407400ea0944519ed0fba91bc03756\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a water-like body. It is too bright and lacks any detail.\"\n    }\n  },\n  \"ab98983b8d97409abeaff47d30750cab\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (dinosaurs, flowers, lily pads) in addition to the water body, making it unsuitable for cleanly depicting a single object from the target class.\"\n    }\n  },\n  \"ad494bbdcda040b992987472ebc49aa8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid structure, possibly part of a building or platform, and does not contain any water-like bodies as specified in the class list.\"\n    }\n  },\n  \"ad911fadc2bc487bb57b3d11894e1ca7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to clearly identify the object. It does not depict any recognizable water-like body.\"\n    }\n  },\n  \"adaec5c76d4246c3a16520b11e65ab4a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a solar fountain device (the mechanism with solar panels and nozzle) rather than focusing clearly on the water body (the fountain spray) itself. While it includes water, the main subject is the apparatus, which is not a 'water-like body' suitable for learning general water physics simulation parameters.\"\n    }\n  },\n  \"adbace57c9e045409f4243b2ca7c58f4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts some kind of plant or algae, not a water-like body such as a lake, pond, river, or pool.\"\n    }\n  },\n  \"adcb4558a4b74651a272a2587d59009e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily shows a fragment of a rock cliff. While a small waterfall is visible on the left side, it is incomplete and not the main focus of the object. The asset does not clearly depict a water body as the primary subject.\"\n    }\n  },\n  \"ae63a2b6575147c2b705f8ee96eab451\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any object, let alone determine if it belongs to the 'water-like_bodies' class. The quality is too low.\"\n    }\n  },\n  \"af1ec79c963e4b43bc9ffeaa85078e98\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (plants, rocks, flower) in addition to the stylized water patch. The water itself is represented as stacked solid-looking sheets, which is not a realistic depiction of a water body suitable for learning fluid physics parameters.\"\n    }\n  },\n  \"af6ca88ada3842a382aea10163e875a5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an inflatable flamingo pool float, not a body of water or water surface like a lake, pool, river, etc.\"\n    }\n  },\n  \"afb372eb350742d0b556b97b37eb16e7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract pink object, not any form of water-like body such as a lake, pond, river, or pool.\"\n    }\n  },\n  \"afdec279da374342a78459b59f5aad05\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a structure that might be part of a fountain, but it does not depict any water or water body itself. The class 'water-like_bodies' requires the presence or clear implication of water (e.g., a pool basin, riverbed, ocean surface).\"\n    }\n  },\n  \"aff4e9fd3f7042d5855fade7411df4df\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tower, which is a structure designed to hold water, not a body of water itself like a lake, river, or pool. It does not fit the 'water-like_bodies' class.\"\n    }\n  },\n  \"b04a3a142f7845cc8aeb2c9a07a73771\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a grey, solid-looking object that does not resemble any form of water or water body listed in the class description. It lacks the visual characteristics of liquid water (transparency, fluidity, reflection) and looks more like rock or dried mud.\"\n    }\n  },\n  \"b05739abf9fd48ac90977be328acbbf6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a building structure (an indoor pool facility), not the water body (pool) itself in a clear and isolated manner. The pool is only a small part of the image and is viewed through the building's walls and roof.\"\n    }\n  },\n  \"b123122b9e7a406f83922305accb1f84\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure, possibly a building or ship, in a pixelated style, not a water-like body such as a lake, ocean, pool, or river.\"\n    }\n  },\n  \"b1758c86b7084b298c79ab6eedcda44f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a model of the Earth, not an actual water body like an ocean, lake, or river. It's a solid object representing water, unsuitable for learning the visual or physical properties of liquid water.\"\n    }\n  },\n  \"b1b45153682a447facc70eeca84818cd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the specified class 'water-like_bodies' (specifically 'fountain' and 'water surface'). The quality is adequate, and it represents an object relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"b203c05bf0c44817ab85187237fefd53\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'water-like_bodies' class. It appears to be an abstract shape or possibly a coil/spring, not water.\"\n    }\n  },\n  \"b24cb60a48fe46be80a67ce9994d63f2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character or creature, not a water-like body such as a lake, river, ocean, pool, etc.\"\n    }\n  },\n  \"b39169eda1ae4c4fa77162ef82df1e9f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a drinking fountain, which falls under the 'fountain' category listed in the accepted classes. There are also visible puddles of water, fitting 'puddle' or 'water surface'. The image quality is good and it represents a single object relevant to the class.\"\n    }\n  },\n  \"b3e3d7ec50604e8b8024045828b22233\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows water inside a bottle. While it contains 'liquid water', it does not represent the intended 'water-like_bodies' class (like lakes, rivers, oceans, puddles). The primary object depicted is the bottle containing water, not a standalone water body. This is not suitable for learning physics parameters for the general class of water bodies.\"\n    }\n  },\n  \"b419831836814f9f908d462173470a74\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool structure, which is a type of water body listed in the class definition. Although it lacks texture and doesn't explicitly show water, the structure itself is recognizable as a pool and is relevant for defining the boundaries of the water for physics simulation.\"\n    }\n  },\n  \"b4883e7a9e1a48e9855de83052693f3b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large coral reef structure within the water body. While it contains water (ocean), the prominent reef structure violates the requirement of depicting cleanly ONE SINGLE OBJECT belonging to the target class.\"\n    }\n  },\n  \"b4f128e77c5b41e682e7d2c8f113b681\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, not the water itself. We need images depicting the water body for the class 'water-like_bodies'.\"\n    }\n  },\n  \"b529a15041fb443081625a99142e8b96\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a chunk of landscape with cliffs, trees, ground, and a waterfall) rather than focusing cleanly on the water body (waterfall). While a waterfall needs surroundings, this image contains too many other prominent elements, violating the 'ONE SINGLE OBJECT' guideline.\"\n    }\n  },\n  \"b52f6de0dca544cb8e873684c310b3e4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a pool basin, but it does not depict the water itself, which is the required element for the 'water-like_bodies' class. Additionally, the image is extremely bright and lacks detail/texture, making it low quality.\"\n    }\n  },\n  \"b536fec3648f485087c8dd280e749502\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is just a solid color and does not depict any recognizable object, let alone a water-like body. It lacks any detail or form.\"\n    }\n  },\n  \"b5ad91f939df44cd9e619324bca6fc0e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower in a vase, not any form of water-like body.\"\n    }\n  },\n  \"b62f520b5505493585097b375dfdad21\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fountain or a small waterfall feature with water flowing over rocks. This falls under the 'fountain' or 'waterfall' categories within the 'water-like_bodies' class. The water element and its interaction with the structure are relevant for physics simulation.\"\n    }\n  },\n  \"b657aba3fbde4bc6ae75272173f52f93\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized pond/fountain feature, which falls under the 'water-like_bodies' class (pond, water body, waterfall, water surface). The quality is good, and the water element is suitable for physics simulation training.\"\n    }\n  },\n  \"b718e75b6c8e40719169a2504063aa03\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"b71d533e28434a62b5c61530c3a8fb9d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower, not a water-like body.\"\n    }\n  },\n  \"b71f07b2d6eb4293b30cc4d1155bc615\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty basin or tub, not a body of water or water surface. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"b722e7acf92d4356a4a20636577016f4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts the structure of a fountain, but it does not show any water. The class 'water-like_bodies' requires the presence of water, especially for physics simulation purposes.\"\n    }\n  },\n  \"b82494f9757a4f4ebb115cb66fdd64b5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (four different pools/ponds), not a single object as required.\"\n    }\n  },\n  \"b97e06a2763f473992d608862c3547e0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small fountain or water feature containing visible water, which falls under the 'fountain' and 'water body' categories. The quality is acceptable, and it represents a contained body of water relevant for physics simulation.\"\n    }\n  },\n  \"b9ed31c1a76642d9bcd4b29d2e4d80a8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing a well with water, but also includes significant surrounding landscape (hills, path, mushrooms). It does not cleanly depict just a water body, but rather a structure containing water within a larger environment.\"\n    }\n  },\n  \"bbf00f650955477ea178c5a69273a14f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a temple or ruin structure, not a water body like a lake, river, ocean, pool, etc.\"\n    }\n  },\n  \"bbf17bb125f440d5ab2c71af13e5e6eb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a molecular structure of water (H2O molecules), not a macroscopic 'water-like body' such as a lake, pond, river, or pool. While technically water, this representation is unsuitable for the intended purpose of simulating the physics of bulk water bodies in a video game.\"\n    }\n  },\n  \"bc46e918e4ae4c01830de924e9122aea\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fragmented 3D model, primarily depicting parts of a building structure (wall, door) rather than clearly showing a water body like a fountain. The object is incomplete and distorted, making it unsuitable for training.\"\n    }\n  },\n  \"bcac1eccff7b427a88ded26dce0eb1c7\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing a bridge, land, and vegetation in addition to the water body (stream/river). We need images focusing primarily on the water-like body itself for learning its physics properties, not a composite environmental asset.\"\n    }\n  },\n  \"bcef8bb775ab464aaf91fb30467b0f9e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone basin or trough, which is a container for water, not a body of water itself like a lake, pond, or river. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"bd33d3e4b0a04088998d0dc08b6f5aec\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' category within the 'water-like_bodies' class. The quality is acceptable for training, and while it includes the surrounding pool area, the pool itself is the main subject and relevant for physics simulation (water physics).\"\n    }\n  },\n  \"bd40442ef4714c6b827b3f92667e177f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a simple geometric shape and does not depict any recognizable water-like body. It lacks the visual characteristics of water (texture, reflection, transparency, etc.).\"\n    }\n  },\n  \"bda6ffeae6284301827c15da7aba2efd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a house on land, not a water-like body.\"\n    }\n  },\n  \"bdb31b18b0264e47983339e4cdbe38ad\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or assess its quality or relevance to the 'water-like_bodies' class.\"\n    }\n  },\n  \"be2ada255b444e0c85dbb4bc9118a7b8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rock formations, not any object belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"be2b511e2f4c4eecb067e70228e34ec4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a waterfall or stream flowing over rocks, which falls under the requested 'water-like_bodies' class. The quality is good, and simulating water flow like this is relevant for physics engines.\"\n    }\n  },\n  \"c07327826fbe41a4aa9c39604a15bd7d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a water body and falls under the specified classes. The image quality is good, and simulating fountain water is relevant for physics engines.\"\n    }\n  },\n  \"c101662f336149a49cf1557c502fdb4f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a lighthouse or buoy, not a body of water like a lake, ocean, river, etc. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"c10b3cc50eac42fbbecd84d83156c7f1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern any object, let alone a water-like body. The quality is too low for training data.\"\n    }\n  },\n  \"c124ec679fff46ab9a2bac89a0b2a3f2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized pond, which falls under the 'water-like_bodies' class. The quality is good, and it represents a type of object relevant for physics simulation (e.g., ripples, buoyancy).\"\n    }\n  },\n  \"c1b1ee27e50a45f6aa2e066dd18acc5a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any recognizable object, especially not one belonging to the 'water-like_bodies' class. The quality is extremely poor for identification purposes.\"\n    }\n  },\n  \"c1e81cada55040c5a4fc747e358a7b6a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable water-like body like a lake, river, pool, or fountain. It looks more like a stylized structure or icon.\"\n    }\n  },\n  \"c32516155086408e94430c938a7844ea\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (tigers, structures, ground), not just a water body. The potential water body (the dark patch) is small, not clearly defined, and not the primary focus of the image.\"\n    }\n  },\n  \"c36a54322f1c46399c4367167cecddca\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden structure, not any form of water-like body as specified in the class list.\"\n    }\n  },\n  \"c3730363bb374f68ba87b0acd67c001a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized waterfall and stream, which belong to the 'water-like_bodies' class. The quality is good, and while it includes surrounding terrain, the focus is on the water feature, which is acceptable context. Waterfalls and streams are relevant for physics simulation in games.\"\n    }\n  },\n  \"c388345dbb874937a1265f28b1017e85\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool, which falls under the 'water-like_bodies' class. The quality is good, and it represents an object relevant for physics simulation (fluid dynamics).\"\n    }\n  },\n  \"c3e69fa40aec497981f9b9cd4fe9ebaf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a broken piece of architecture, not a water-like body.\"\n    }\n  },\n  \"c639200ca2474737995a5207ad0499a5\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a playground or playset scene and does not depict any water-like bodies such as a lake, pond, pool, river, etc.\"\n    }\n  },\n  \"c6ba2cae9f2f4c7bae8d1688f6022dad\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small scene with a tree, bridge, and path, but does not clearly show any water-like body like a stream, pond, or river. The focus is on the landscape elements, not water.\"\n    }\n  },\n  \"c7fffc733b9549a29e6f32ce24b27ef3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object belonging to the 'water-like_bodies' class. It seems to be an abstract shape or a fragment of a larger model, not recognizable as water.\"\n    }\n  },\n  \"c893aecf4e144a43ac46d0a2c317c6d1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a waterfall, which is part of the 'water-like_bodies' class. Although it includes the surrounding rock face, this is inherent to the nature of a waterfall and provides context. The water itself is visible and the image quality is acceptable for training.\"\n    }\n  },\n  \"c8fdd264d7e24f29bc329d13fe6fe92d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which is listed under the 'water-like_bodies' class. The image quality is good, and it represents a single object concept relevant for potential water physics simulation in a game environment.\"\n    }\n  },\n  \"ca4a9e92855643ae96baff9ac52154dd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water. The class 'water-like_bodies' requires the presence of water itself.\"\n    }\n  },\n  \"cafecc6ab28342cf960a3760ff0909d4\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool, which falls under the 'water-like_bodies' class. The quality is good, and the water body is suitable for physics simulation.\"\n    }\n  },\n  \"cb3322554187417b85ca93339a2543ac\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what looks like pieces of rock or mossy ground, not any form of water or water body.\"\n    }\n  },\n  \"cc935a8c426147b38491504096e3f689\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing an island with trees and structures surrounded by water, rather than focusing solely on the water body itself. We need images primarily featuring the water-like body.\"\n    }\n  },\n  \"cd0c2d13742c4b5c8cd6e401726fb8b6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which contains a water body. This falls under the specified classes ('fountain', 'water body'). The image quality is adequate, and it represents a single object relevant to the class. Simulating the water in a fountain is a valid physics application.\"\n    }\n  },\n  \"cd792b3508184f9bbfdfb8e5af9744a6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized body of water, resembling a pool or fountain, which fits within the 'water-like_bodies' class. The quality is good, and it represents a single, contained object suitable for physics simulation (e.g., water surface dynamics).\"\n    }\n  },\n  \"cd8e0bb1401441ec9c97b05bb30a4b38\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a larger scene including a well, path, and landscape. The water body (a small pond) is only a minor component and not the main focus of the image.\"\n    }\n  },\n  \"ce5655df9f43471095c90c0767a420be\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone structure that might be part of a fountain, but it does not depict any water or water body itself. The focus is on the stone material, not the water element required for the 'water-like_bodies' class.\"\n    }\n  },\n  \"ce863071389e4ea3859d33938c7b5296\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a water-like body. It is too bright and lacks any detail.\"\n    }\n  },\n  \"cf3c5386e06b4690ae72a0ff90f82214\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water tank, which is a container for water, not a water body itself. It does not fit the class 'water-like_bodies'.\"\n    }\n  },\n  \"cf59cf7f05fb422ea938674ee7289ab6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone structure that might be a fountain, but it does not depict any water or water body, which is the target class. The focus is on the structure itself, not the water.\"\n    }\n  },\n  \"cfc9ff4057b34d20b173494df2b237bb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and extremely bright, making it impossible to discern any object, let alone one belonging to the 'water-like_bodies' class. The quality is too low.\"\n    }\n  },\n  \"d01a6abb1e4648688b6869d64c4c4afd\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene containing a house and a pool, viewed from a very high angle. The pool (the water body) is very small within the frame and not the primary focus. The image contains significant other objects (house, trees, strange artifact on the left) and a large amount of empty space, violating the requirement for the image to cleanly depict a single object of the target class.\"\n    }\n  },\n  \"d053ad003a4149b89b71105f3d2ba127\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty bathtub or pool basin, not a body of water itself. It does not depict any of the target classes like lake, pond, ocean, pool (filled with water), puddle, river, etc.\"\n    }\n  },\n  \"d05c264ba9c840789d1a92f119671b77\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts liquid being poured and forming a puddle, which falls under the 'liquid water' and 'water surface' categories within the 'water-like_bodies' class. This representation is suitable for physics simulation.\"\n    }\n  },\n  \"d09f3fbc2a784d86b8d7b6105a4e234b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, flat, dark blue object, possibly a tile or slab. It does not resemble any form of liquid water or a water body like a lake, pond, ocean, pool, puddle, river, etc. Therefore, it does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"d12cc587fc7d47a6a42a0242862d576c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure, not a water-like body. It is also very bright and lacks detail.\"\n    }\n  },\n  \"d154ffcd1dab46a28f96c3d7a85d8136\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a water-like body. It appears to show a solid, textured surface (like concrete or dried mud) with a small cylindrical object on it.\"\n    }\n  },\n  \"d2116d7a319d416492717fbfe8b48beb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, rocky structure with some blue elements, but it does not clearly represent any recognizable water-like body such as a lake, river, ocean, pool, or even a stylized waterfall or fountain.\"\n    }\n  },\n  \"d22ce54fbb4f40aeafaa05c28441584b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to clearly see the water body. Additionally, it depicts a whole landscape scene rather than focusing primarily on the water body itself.\"\n    }\n  },\n  \"d249d8a4cd4b4a4b992533a960f08d68\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a stove or a water dispenser, not a water-like body.\"\n    }\n  },\n  \"d251a8cdab91443d8ac148ea309c2868\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a swimming pool, which falls under the 'pool' category within the 'water-like_bodies' class. The image quality is good, and the object is suitable for physics simulation (e.g., fluid dynamics).\"\n    }\n  },\n  \"d2584b93416a4bf6b543e520a8583d5d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank (white) and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"d2c14c138991490f994b0502dc333781\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a character and a cauldron in addition to the water, violating the requirement for depicting only a single object from the target class.\"\n    }\n  },\n  \"d3b9a5c1807947b4a7548336162a5a26\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, but it does not depict any water. The class 'water-like_bodies' requires the presence of water (liquid water, water surface, etc.). This image only shows the solid structure.\"\n    }\n  },\n  \"d40e9dd0d232486ebe14f1efb6e398ef\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of mossy rock or cliff, not a body of water or anything resembling the target class 'water-like_bodies'.\"\n    }\n  },\n  \"d5398688b3884d40950e2d21e0f2cf24\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (water, tank, creatures, rocks, sand) rather than focusing cleanly on a water body. The creatures are distracting elements.\"\n    }\n  },\n  \"d542a0ee1bd848ef86a62223c8483e5d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a drinking fountain structure, which is a type of fountain, but it does not depict the water itself. The focus is on the solid structure, not the water body, making it unsuitable for learning the physics parameters of water-like bodies.\"\n    }\n  },\n  \"d5b15b0fe353454db7c8e44260042633\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a puddle, which falls under the 'water-like_bodies' class. The quality is good, and while it includes the surrounding ground, this is necessary context for a puddle. It is suitable for physics simulation purposes.\"\n    }\n  },\n  \"d6c0f03a8287427692078398cfda4ff1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain, which falls under the 'water-like_bodies' class. The quality is acceptable, and it represents an object suitable for physics simulation (water flow).\"\n    }\n  },\n  \"d78668ddd6d945c4b8f492b2c85819b8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pool, which belongs to the 'water-like_bodies' class. While it includes surrounding elements like the deck and a chair, these are contextually relevant to a pool scene and the water body itself is the main focus. The quality is good and it's suitable for physics simulation (water dynamics).\"\n    }\n  },\n  \"d7e4fc04acf54300b58b4c0feca45fd8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, brown object, possibly a piece of wood or rock, not a water-like body.\"\n    }\n  },\n  \"d839d23a5e5b4ebfb0cbd68f755f19a2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a terracotta jug or pitcher, which is a container for liquids, not a body of water or water itself. It does not belong to the requested 'water-like_bodies' class.\"\n    }\n  },\n  \"d9166374296a47a79cb4fe14f5a0d9cb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object or its details. The object is barely visible against the white background.\"\n    }\n  },\n  \"d99444d5218144a2a023919bb9aa5275\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (island, buildings, trees, floaties) in addition to the water. The water itself is highly stylized and cartoonish, making it unsuitable for learning realistic physics parameters for simulation.\"\n    }\n  },\n  \"db09c5f5fe1f432ebfd02b45f7d1de20\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fountain, which falls under the 'water-like_bodies' class. The quality is acceptable for training, and it represents a single object relevant for physics simulation (water dynamics).\"\n    }\n  },\n  \"db2cf9d2a14448a58dfdd7fd653d8dac\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a unicorn pool float, which is an object designed to be used *on* water (specifically a pool), but it is not a water body itself. The target class is 'water-like_bodies'.\"\n    }\n  },\n  \"db39991b83f048b5a86b00b6af776007\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a wireframe structure, possibly a building frame or scaffolding, and does not depict any form of water or water body as required by the class 'water-like_bodies'.\"\n    }\n  },\n  \"db631105099e41e89ae01225e068cf48\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (tree stump, lily pads, ground) in addition to the water body. We are looking for images that primarily depict the water body itself.\"\n    }\n  },\n  \"db92652111c146a1a5f4aff04d6fb0fc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract white solid object, not a water-like body. It does not resemble any of the target classes like lake, river, ocean, puddle, etc.\"\n    }\n  },\n  \"dbc10733f0e24db89df19fcd34636e12\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows several small, solid, rounded objects, possibly cushions or hats. It does not depict any form of water or water body (like a lake, puddle, river, etc.).\"\n    }\n  },\n  \"dc95389f28d34dc3b7386ddeaab7d495\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains many other prominent objects (a building, large rock formations) in addition to the water bodies (streams/waterfalls). We need images that focus primarily on the water-like body itself.\"\n    }\n  },\n  \"deb124e4951e46599af61f327ae814d6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat grey surface with a small white object in the center. It does not clearly depict any recognizable water-like body such as a lake, pond, ocean, pool, etc.\"\n    }\n  },\n  \"ded920aa76d443f8bec921da26637ca2\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows rock formations, not any type of water-like body as specified in the class list.\"\n    }\n  },\n  \"defac3980f934e3aab2e71d6495f5e6f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern any object, let alone one belonging to the 'water-like_bodies' class. The quality is too low for training data.\"\n    }\n  },\n  \"df4de583de894d1c9877b0126ed6f936\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain or small pool, which falls under the 'water-like_bodies' class. The water body is the central element, and the quality is sufficient for training. Fountains/pools are relevant for physics simulation in games.\"\n    }\n  },\n  \"df4e58f178754b2d8a2a1a08be320eab\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely overexposed and appears almost entirely white. It is impossible to discern any object, especially not a water-like body. The quality is too low for training data.\"\n    }\n  },\n  \"df6c348334ca4e65966c2a9b19a48c21\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a liquid splash, which falls under the 'liquid water' or 'water surface' categories within 'water-like_bodies'. The quality is good, and it shows the object cleanly. While the color is opaque and not typical for water, the form represents a liquid in motion, which is relevant for physics simulation.\"\n    }\n  },\n  \"df81a51c77b14d56ba12b0595ed3cd18\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains furniture (chairs, table) and does not depict any object from the 'water-like_bodies' class.\"\n    }\n  },\n  \"dfb7154648504b51a728c206c964df1e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large complex with buildings and construction elements, not just the pool/water body. We need images focused primarily on the water body itself.\"\n    }\n  },\n  \"dfd5f9e00d6d4d82ba734b20aaa84a18\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, but it does not depict any water or water surface, which is the key characteristic of the 'water-like_bodies' class. It lacks the necessary visual information (water texture, flow) to be useful for this category, especially for physics simulation purposes.\"\n    }\n  },\n  \"e0582d1e3a504e29a36f8c6d207bafba\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a significant object (a house) in addition to the pool (water body). We are looking for images that cleanly depict a single object from the target class.\"\n    }\n  },\n  \"e16ca8ac7f7249ed8a9fe28231ccafc6\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized pond or pool, which falls under the 'water-like_bodies' class. The quality is good, and while it includes surrounding rocks and a base, these elements define the water body and are acceptable context. This type of asset is relevant for physics simulations in games (e.g., interactions with the water surface).\"\n    }\n  },\n  \"e261b140b0494d61ba764d2812fb284b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone fountain structure, but it does not show any water. The focus is on the solid structure, not the water body itself, which is required for the 'water-like_bodies' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"e29cfa4817f844e5bae8aac708067455\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a brick wall and a water pump/tap. While the ground appears wet, possibly forming a small puddle, it does not clearly show a distinct 'water-like body' as the main subject. The focus is on the structure, not the water itself.\"\n    }\n  },\n  \"e2f6caedfc1143c49b334cd64777c77f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains abstract brush strokes and does not clearly depict any recognizable object from the 'water-like_bodies' class. It is unsuitable for learning physics parameters related to water.\"\n    }\n  },\n  \"e30dbfd4088e4967bf6551dab00135fe\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a statue on a plinth. While there might be a small amount of water or dampness in the surrounding basin, it is not the main focus and does not clearly represent any of the specified water-like bodies. The dominant object is the statue, not the water.\"\n    }\n  },\n  \"e332865c1abc4c6e81fc41954fe0c18a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (house, hills, stream) rather than cleanly depicting a single water body. The stream itself is also very stylized and part of a larger landscape model, not isolated.\"\n    }\n  },\n  \"e3a8594dbd384da8baf7e5e8b7dab2d0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"e3a9b98bbd4e4cc2888becd2ddd18927\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a concrete drainage structure and surrounding terrain. While a small body of water is visible, it is not the main focus of the image and is overshadowed by the other elements. We need images where the water body itself is the clear, primary subject.\"\n    }\n  },\n  \"e4ed6333900b4fcbbc175394a2e8be0b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, which is made of stone, but it does not depict any water. The request is for 'water-like_bodies', and the absence of water makes this image inappropriate for learning water physics.\"\n    }\n  },\n  \"e54ff76bef854b128af8d20cf9c03729\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and stylized. It looks more like a faded texture or visual effect rather than a clearly defined body of water (like a puddle, pond, or lake surface). It lacks the detail and definition needed for physics simulation training.\"\n    }\n  },\n  \"e5e34bcfafc041469a2b67fccae8e0bb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a container (IBC tote), which might hold water, but it is not a water-like body itself (e.g., lake, river, ocean, pool, puddle, water surface).\"\n    }\n  },\n  \"e6370546c6204bf3bdde275113956585\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"e75f698a464b43299ed2d67df36de6dc\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a splash or stream of liquid water, which falls under the requested class 'water-like_bodies'. While the texture is somewhat metallic, the form is recognizable as liquid in motion, which is relevant for physics simulation.\"\n    }\n  },\n  \"e77804c2d9fb42e6a0e1074af1f1a779\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very fragmented and incomplete section of what might be a stream or waterfall, heavily mixed with rocks and foliage. It doesn't clearly depict a distinct water body and the presentation is too artifact-like and low-quality for training purposes.\"\n    }\n  },\n  \"e7c5302f770a453385a5311076238ff3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pond, which falls under the 'water-like_bodies' class. Although it includes surrounding elements like rocks and grass, these are contextually appropriate for a pond environment. The image quality is good, and ponds are relevant objects for physics simulation in games (e.g., fluid dynamics, buoyancy).\"\n    }\n  },\n  \"e8297fb1af024585bf1cf27eee90e3b3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain with flowing water and a water surface in a basin, which belong to the 'water-like_bodies' class. The quality is good, and simulating this type of water feature is relevant for physics in video games.\"\n    }\n  },\n  \"e846f979a9624b8a9b2457b85f26c194\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple distinct objects (one large pool/basin and two separate fountains), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"e9f30339fb764dd7b78e2149e2e6cb41\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fountain or pool containing liquid water, which falls under the 'water-like_bodies' class. The image quality is good, and while it includes the structure, the water body is the main focus and is integral to the object type (like a fountain or pool). This type of object is often used in game environments and could involve physics simulation for the water.\"\n    }\n  },\n  \"ea84756746554d2d94469c98bcc460d9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an empty stone trough or container, not a body of water or liquid water itself. It does not fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"eaf56f97d54b44e29f290bae1b7f993f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a drinking fountain, but it does not depict any water, which is the essential element for the 'water-like_bodies' class, especially concerning physics simulation of fluids.\"\n    }\n  },\n  \"eb3d9319f7734382a6186af77298a550\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, poorly rendered object that does not resemble any form of water-like body (lake, river, pool, puddle, waterfall, etc.). It's unclear what the object is supposed to be.\"\n    }\n  },\n  \"eb46006df1b44644a4e92b932fb51c97\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure (tap, pillar, base, drain) but does not depict any water, which is the key element for the 'water-like_bodies' class. We need images showing the water itself for physics simulation.\"\n    }\n  },\n  \"eb803a237b474027974d2d52cbe6c4a9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a frozen body of water (ice), not liquid water. While ice is technically water, its physical properties (solid, brittle) are vastly different from liquid water, making it unsuitable for learning the physics of fluid water bodies like lakes, rivers, or pools as intended for the simulation.\"\n    }\n  },\n  \"eb8055cdf80345aaaff95f84d02d1922\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a water body. It looks more like a dry or very shallow riverbed or channel with some structure, rather than a distinct body of water like a lake, river, or pool.\"\n    }\n  },\n  \"eb9767b70d57467aa03b022ff91c35cf\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene including mountains, a building, and vegetation, not just the water features (waterfall and pool). We need images focusing primarily on the water body itself.\"\n    }\n  },\n  \"eca0b9efb68048a8a7e7a003af854c51\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a simple blue torus shape, which is too abstract and does not clearly depict any recognizable water-like body (lake, pool, puddle, etc.). It lacks the necessary visual detail or context to be useful for training physics simulations related to water.\"\n    }\n  },\n  \"ed40a02ed7244a9fa0d3158a67d13ee9\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a frog statue, not a water-like body such as a lake, pond, ocean, pool, puddle, river, stream, waterfall, fountain, water surface, liquid water, or water body.\"\n    }\n  },\n  \"ed7f99f5e25e4c1ba8c9cd707c7dbd14\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone carving, possibly part of a fountain, but does not depict any water or a water body itself. It does not fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"ed9192ef26594baeba266e2bcbe8715f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a water-like body.\"\n    }\n  },\n  \"eeaa973c1f5c44d085fcdc194691293a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large architectural structure (ruins/arena) with some small figures. While there is a small blue area that might represent water (like a pool or fountain base), it is not the main focus of the image and is heavily obscured/integrated with the structure. We need images where the water body itself is the clear, primary subject.\"\n    }\n  },\n  \"eec5f791e1484b03becdcb0a4189e39f\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (pool, trees, structures, ground, fence) and not just a single water body. We need images focusing solely on the water-like body itself.\"\n    }\n  },\n  \"ef0dd3c3b18b4c9889cd9d9490d99c91\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain-like structure filled with water, showing ripples on the water surface. This fits within the 'water-like_bodies' class, specifically 'fountain' and 'water surface'. The quality is good and it represents a contained body of water suitable for physics simulation (e.g., ripple effects).\"\n    }\n  },\n  \"ef4d26f737fd4ce88e39387e419de1b3\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a water bottle containing water, not a 'water-like body' such as a lake, river, or ocean. The primary object is the bottle, not the water itself in the context of the requested classes.\"\n    }\n  },\n  \"efdf2f860c0e49ceab9b25ff0e06b387\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a small landscape scene containing a water body, land, and rocks, rather than focusing cleanly on the water body itself. This violates the requirement for depicting a single object class.\"\n    }\n  },\n  \"effc23e73a734fc3a896d18b520e26d0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a fountain, which appears to be made of stone and is currently dry. It does not depict water, which is the key element for the 'water-like_bodies' class and its associated physics simulation (e.g., fluid dynamics).\"\n    }\n  },\n  \"efffa393cd604090a733e96442a1c0d8\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone one belonging to the 'water-like_bodies' class.\"\n    }\n  },\n  \"f05a86824ebf4f88b5040485349cef7b\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white space and does not clearly depict any recognizable water-like body. The few small marks are indistinct and lack the necessary detail to represent the target class for training purposes.\"\n    }\n  },\n  \"f0755f2beb71463a868cc8e2cf88f712\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of wood or rock, not a water-like body.\"\n    }\n  },\n  \"f17257b7f9f84ca998e0e0381eecbbca\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bridge, not a water body like a lake, river, pool, etc.\"\n    }\n  },\n  \"f1d905ab30c149f3b5d4841b19f96b16\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract white shape, possibly a trough or channel, against a white background. It does not depict any form of water or a water body as required by the class 'water-like_bodies'. The image is also extremely bright and lacks texture or detail, making it low quality.\"\n    }\n  },\n  \"f23826507648427a8f3f9e294c5c7a0c\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model of a structure, possibly a fountain base or a pool, but it does not depict any water or water surface. It's just an empty container structure, lacking the actual element required for the 'water-like_bodies' class.\"\n    }\n  },\n  \"f3d2e8dec4eb408bba4bea2d970e213d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rocky surface, not a clear body of water. It does not fit into the 'water-like_bodies' class.\"\n    }\n  },\n  \"f40a1983ba6944acaa1053323bb20e26\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden walkway or bridge over ground, not a water body or any form of water as required by the class 'water-like_bodies'.\"\n    }\n  },\n  \"f44007d8b4a94e9d924bc5ee93480169\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a container and stand, with the water being only a part of the overall object. The focus is not solely on the water body itself, which is required for this class.\"\n    }\n  },\n  \"f45154da5a524dff9a2e94faa97a205e\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object from the 'water-like_bodies' class. It shows a planter or bench structure with plants.\"\n    }\n  },\n  \"f50b5f2d84f54f07b84225ed93f1e183\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any water-like bodies. It shows a section of a garden or yard with a wooden fence, rocks, and a tree/driftwood.\"\n    }\n  },\n  \"f69f7b35f6134688befdbbe495756f81\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a contained body of water (like a pool or fountain base), which belongs to the 'water-like_bodies' class. The image quality is good, and simulating water physics is relevant for game development.\"\n    }\n  },\n  \"f7a87acd4e6147ca96a03ab33dcaadf1\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an aerial view of a landscape, possibly a construction site or quarry next to a road, but it does not contain any visible water-like bodies such as lakes, ponds, rivers, etc.\"\n    }\n  },\n  \"f890aece3f494fbd995bf289a66f5bc0\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pet water dispenser, not a body of water itself. It does not fit into the specified classes like lake, pond, ocean, pool, puddle, river, stream, waterfall, fountain, water surface, liquid water, or water body.\"\n    }\n  },\n  \"f93e5f4848ad4086914477f7eea63579\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts large tanks or reservoirs and surrounding land, not a clearly visible body of water like a lake, pond, river, or pool. It does not fit the 'water-like_bodies' class description.\"\n    }\n  },\n  \"f9876d14bb4d4e28bd442eea88c5227d\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fountain structure, but it does not depict any water. The class is 'water-like_bodies', and the image must clearly show water or a water body. This fountain is dry and covered in moss.\"\n    }\n  },\n  \"f9f59865456c4f628e9d85b19ad0de51\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is extremely low, distorted, and fragmented. It is impossible to discern any object, let alone a water body.\"\n    }\n  },\n  \"fa9108e6569547f29e30b2d956c9b9fb\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a waterfall or stream, which falls under the 'water-like bodies' category. The quality is acceptable, and it represents a dynamic water feature suitable for physics simulation.\"\n    }\n  },\n  \"fad1bf3ddc334e9287fcffca1d8537ac\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fountain containing water, which falls under the 'water-like_bodies' class. The quality is good, and simulating water physics in a fountain is relevant for game development.\"\n    }\n  },\n  \"fb3ee8421348471195326737eeda0540\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a water dispenser, not a body of water like a lake, river, ocean, pool, etc. It doesn't fit the requested class 'water-like_bodies'.\"\n    }\n  },\n  \"fb66a847ff514c21806ac8858aecc100\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows the structure of a drinking fountain, but it does not depict any water. The class 'water-like_bodies' focuses on the water itself (e.g., water surface, liquid water, waterfall, water in a fountain), which is relevant for physics simulation. This image only shows the container/dispenser.\"\n    }\n  },\n  \"fdaba9e0d15e4c3f9be97826b87123ff\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains abstract geometric shapes and does not depict any object belonging to the 'water-like_bodies' class (e.g., lake, ocean, pool, river, water surface).\"\n    }\n  },\n  \"ff2831bb45274c8d8b44a0cd1046c94a\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a seahorse, which is an animal, not a body of water or liquid water. It does not belong to the 'water-like_bodies' class.\"\n    }\n  },\n  \"ff2af1a29a4f47eb87fb9b8e78051956\": {\n    \"obj_class\": \"water-like_bodies\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a prominent figure floating in the pool, which distracts from the water body itself. We want images focusing primarily on the water-like body.\"\n    }\n  },\n  \"0018d378a2cd4ad58fa8fcae42e8af9e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or anything related to the requested class. It shows abstract shapes.\"\n    }\n  },\n  \"004ff784dc744f029ed6a5c4c8504b74\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a sandbox which contains sand, but it also prominently features the wooden box structure and several plastic toys. This violates the requirement of depicting cleanly ONE SINGLE OBJECT, as the sand is presented alongside multiple other distinct objects/materials.\"\n    }\n  },\n  \"00c205c6e3ed4cbe943b111e2aa38fbf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized animal model, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"00c4468f1bca48509d7d2bd66b564cbc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rock formations, not sand or sandy terrain. While rocks might be found in sandy environments, the object itself is rock, which has different physical properties than sand.\"\n    }\n  },\n  \"013eac9da6114be0b32bab4008957ab7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sandy terrain base, but it also includes a large, prominent rocky mountain formation, which is a different object class. We need images focusing solely on sand or sandy features.\"\n    }\n  },\n  \"013f1b3f374348d4baff0d496f602ece\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large structure in addition to the sand. The sand is not the primary focus of the image.\"\n    }\n  },\n  \"01a98cf7f90c482498ecd717f79c673a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox containing sand, which falls under the requested classes ('sand box', 'sandpit'). The sand is the main element and is suitable for physics simulation learning. The quality is good.\"\n    }\n  },\n  \"01c77468a1d04414ae24ecd1d1559f7d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cylindrical structure made of bricks or wood, not sand or any related object like a sand dune, sand pile, or sand texture.\"\n    }\n  },\n  \"01cb0f002e4d41b793355fd504eb80af\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a large piece of driftwood or root, which is not the target object class ('sand'). While there is sand present as the base, it is not the main focus and the image does not depict cleanly ONE SINGLE OBJECT belonging to the sand class.\"\n    }\n  },\n  \"01dc8078f03b4fd992383488e6caba41\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a figurine or trophy, not sand or any related concept like sandy terrain, sand dune, or sand pile.\"\n    }\n  },\n  \"0506f03c5e354288a53bb067cef53aa8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vehicle (a stylized military truck), not sand or any form of sandy terrain, pile, dune, or texture.\"\n    }\n  },\n  \"0525652a01ef405f85dafc92fb003223\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a block of sand, albeit in a stylized, pixelated format common in video games like Minecraft. It fits the 'sand' class and is relevant for physics simulation within that specific game style (e.g., gravity affecting sand blocks). The quality is good for its intended style.\"\n    }\n  },\n  \"068f17e7bcf74d04bacf5524c4a2079d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tractor, which does not belong to the 'sand' class.\"\n    }\n  },\n  \"0699ed3d7f0546a1afb3f19fa9adbcfc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple objects (building, trees, water, boat) in addition to the sandy terrain. It does not cleanly depict only sand or sandy terrain as a single object.\"\n    }\n  },\n  \"07c4a89f45824a52b6c6055b615b11e6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pile of sandbags, not sand itself or a natural sand formation like a dune or pile. The primary object depicted is the bag, not the sand within.\"\n    }\n  },\n  \"07d7442c0df54e4b9119896592189034\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stylized, blocky structure (like from Minecraft) made of sand-colored blocks, surrounded by water and sitting on a cross-section of land. It does not depict natural sand or sand formations (dunes, beaches, piles) and includes multiple elements. Furthermore, the blocky nature is not representative of the granular physics we aim to simulate for sand.\"\n    }\n  },\n  \"080a3e333eb44e17b998d0451482276b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere with a sand-like texture applied, but it doesn't depict sand as a material or object (like a pile, dune, or terrain) in a way that is useful for learning its physical properties. The texture itself is also somewhat blurry and lacks clear granular detail.\"\n    }\n  },\n  \"0857f2ebd4fc46769a90e69225a558d4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a shoe or sandal, not sand or any related terrain/object.\"\n    }\n  },\n  \"08a4b8bbba914942a6294e98720adf1a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a significant pile of rocks in addition to the sand, violating the requirement for depicting only a single object class cleanly.\"\n    }\n  },\n  \"08d1e9bf531842508313f72369b39a78\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts sandy terrain, which falls under the requested class list. Although it includes rocks and some vegetation, sand is a prominent feature, and terrain models like this are relevant for physics simulations in games.\"\n    }\n  },\n  \"0978ea160bd44521b87399cf3478e662\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized, blocky objects that resemble rocks or sandbags rather than natural sand formations like dunes, piles, or sandy terrain. These solid objects do not represent the granular nature of sand needed for physics simulation.\"\n    }\n  },\n  \"0a227353cd804df2b5414107d9e36d18\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an hourglass, which contains sand, but the primary object is the hourglass itself, not the sand. We are looking for images focusing solely on sand (like dunes, piles, textures, terrain).\"\n    }\n  },\n  \"0abbd5ee9c404913bc815b7d59a505e3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts sandy terrain, which falls under the requested class 'sand'. The quality is acceptable and it represents a single object type relevant for physics simulation in a game environment.\"\n    }\n  },\n  \"0af5c12eeebf4183b0385a00114e3d6b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture applied to the sphere looks more like asphalt or coarse gravel rather than sand. Sand typically consists of much finer grains.\"\n    }\n  },\n  \"0b1a20c025a1492aa5744f8228a078f4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image prominently features a sculpture, which is not part of the 'sand' class. The sand is only present as a base for the main object, violating the requirement for the image to depict cleanly ONE SINGLE OBJECT belonging to the target class.\"\n    }\n  },\n  \"0b4c9a16a76144e395b4f5b545d5008a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, colorful block structure, not sand or any related concept like dunes, beaches, or sand textures.\"\n    }\n  },\n  \"0bd49bc33b4a4b5b85e3daeb864e4643\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small, abstractly shaped fragment with a sand-like texture, but it doesn't clearly depict sand, a sand dune, sandy terrain, or any recognizable form of sand relevant for physics simulation. It looks more like a decal or a broken piece rather than a volume or surface of sand.\"\n    }\n  },\n  \"0c258d4af163445bbe5dac8e25e11abb\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent metal box placed on the sand, which is not part of the 'sand' class. We need images primarily depicting sand itself.\"\n    }\n  },\n  \"0c4866db658b478089778d7f41a42583\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a maze structure, not sand or any related concept like beach sand, desert sand, sand dune, etc. It is completely unrelated to the requested class.\"\n    }\n  },\n  \"0c53c3b1bc2a4e5daef796f9f5eee57b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (palm trees, chair, rocks, water) in addition to the sand, not just sand itself. We need images focusing solely on the sand material/object.\"\n    }\n  },\n  \"0c5e662a3bb8486ab3551dbf4f8d4ee5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character figure, not sand or any related concept like a beach, desert, sand dune, or sand texture.\"\n    }\n  },\n  \"0ce30ce3b2674cbe81af9bbb495c3b7e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains prominent rocks in addition to the sand, violating the requirement for depicting only a single object class.\"\n    }\n  },\n  \"105293cb00884a079bfc4809ca32b541\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with a sand structure, water, islands, and various other objects, not just sand itself. It violates the requirement of depicting a single object cleanly.\"\n    }\n  },\n  \"1078aabd1f4d47e9bff907e69211ae97\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is grayscale and lacks the necessary texture and color detail to clearly identify it as sand or sandy terrain. It looks more like a generic topographical map or heightmap render, making it unsuitable for learning visual material properties.\"\n    }\n  },\n  \"107f6a1f6aa74449bcd32ef136311d86\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is very low, and the texture does not clearly resemble sand. It looks like a low-polygon model with a blurry texture, making it unsuitable for training.\"\n    }\n  },\n  \"11c6e48a043c4c1da05873909a75714f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate or stand, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"120c9ec7f63345c88aac2a407b563f17\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It shows some kind of display shelves or similar items.\"\n    }\n  },\n  \"123e9f7036bc4b1388eb83d0404cdf8c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a high-heeled sandal, which does not belong to the 'sand' class.\"\n    }\n  },\n  \"127b7785309c41479d94e4e9f22516f6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a terrain section that appears to be a mixture of rock/debris and possibly some lighter material underneath, but it doesn't clearly represent 'sand' or any of its specific types (like dunes, beach sand, etc.). The texture is ambiguous and looks more like rubble or rocky ground than sand.\"\n    }\n  },\n  \"128c7aff0cee477bb8c91121620d9d59\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with multiple objects (sand terrain, cacti, rocks, water) rather than focusing solely on sand. Additionally, the image is very bright/overexposed, reducing its quality.\"\n    }\n  },\n  \"143b7212ee38401694cdfae452c3529e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid rock or piece of sandstone, not sand or sandy terrain as requested by the class definition.\"\n    }\n  },\n  \"14888f5a7ec44332b7793f195dc8a6f5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blue textured rectangular object, possibly a mat or a ramp. It does not resemble sand, beach sand, desert sand, or any other item listed in the class description.\"\n    }\n  },\n  \"149e242fe8ee4c99b48ab5b290b03ce1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (the sandy base plus other elements on top) and the base itself is a very stylized, low-detail representation that doesn't clearly depict sand suitable for physics simulation training.\"\n    }\n  },\n  \"1559d693df784a32ad629976c3440ec5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract white geometric structure, not sand or anything related to the 'sand' class.\"\n    }\n  },\n  \"166bc70d06e14443ad1610c3a8c6859e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of machinery, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"168a882123cb443281fb2fd37367f6f0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low. It is extremely bright and washed out, making it difficult to discern the texture or even confirm if the material is sand. It lacks detail and clarity needed for high-quality training data.\"\n    }\n  },\n  \"169d7e568e594e0780f5742c48a9e3b0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sandbag, which is an object containing sand, not sand itself as a material, terrain feature, or pile as specified in the class list.\"\n    }\n  },\n  \"16dbce6f08404f4d8b2ceea9eeb689ce\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a shoe, not sand or any related concept like sand dunes, sandpits, or sandy terrain.\"\n    }\n  },\n  \"17f28fa711a44f5694a5bcf3a9d96899\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a segmented, vertical object that does not resemble sand, a sand pile, sand dune, sandy terrain, or any other form of sand listed in the class description. It looks more like a stylized trunk or column.\"\n    }\n  },\n  \"183675ddf05b4939a6d2ca956ad3614a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flat rock, not sand or any related concept like sand dunes, sand piles, or sandy terrain.\"\n    }\n  },\n  \"1846522792f94af0a8cb8a7a8424e9f8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related concept. It shows a yellow object with text on it, which is completely unrelated to the requested class.\"\n    }\n  },\n  \"1910f7e2b5484c38acf85d78da8ac4d9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a building, not sand as a terrain feature or material. While the roof might use sand-like textures, the object shown is a house, which includes many other elements like glass, wood, and plants. This does not fit the requirement of depicting a single object from the 'sand' class.\"\n    }\n  },\n  \"1a4e369c150549bc82ff2e19b72010a4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain with visible texture, fitting the requested class. The quality is good, and it's relevant for physics simulation (e.g., interaction with granular surfaces).\"\n    }\n  },\n  \"1ac0847acae44ffe9c3783be28e82bcf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of sand, which falls under the specified class. The quality is good, and it represents a single object relevant for physics simulation (e.g., deformation, pouring).\"\n    }\n  },\n  \"1acc9c3452bb45d89e218c533ce646b6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure (like a sandcastle or building on sandy terrain), not just sand itself in a form suitable for learning general material physics (like a pile, dune, or texture). The focus is on the structure, not the sand material.\"\n    }\n  },\n  \"1acfa91b81e54de0a2c3a3c49e53242d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation or cliff section, not sand or sandy terrain as required by the class description.\"\n    }\n  },\n  \"1b657465f4944f77938c3b5565d9728b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple different types of blocks (dirt, ore, glowing blocks, glass, sandstone?) from a voxel-based game, not a clear depiction of sand or sandy terrain suitable for learning realistic physics.\"\n    }\n  },\n  \"1be2f6d4088140629117e0a85a44511c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture applied to the sphere does not convincingly resemble sand. It lacks the characteristic granular appearance and looks more like a smooth, stylized surface, possibly stone or even something abstract. It doesn't clearly depict any form of sand (beach, desert, pile, dune, etc.).\"\n    }\n  },\n  \"1c5f772e12fc44ff995776e38e1953f2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only a small, fragmented piece of terrain with a sandy texture. It does not depict a clear, complete object like a sand dune, sand pile, or sandpit, making it unsuitable for representing the 'sand' class or for meaningful physics simulation.\"\n    }\n  },\n  \"1cef0cbf6c7b4d1f899a005440a13045\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a voxel-style building (hotel), not sand, a sand dune, beach sand, or any other object listed in the class description.\"\n    }\n  },\n  \"1cf15b0f7a2e414091c7cf0464071140\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. The objects shown are extremely small, pixelated, and unclear against a white background.\"\n    }\n  },\n  \"1d5173437987440bab6075fc223acd17\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky character or object, possibly from a game like Minecraft, which incorporates some sand-textured blocks. However, it does not represent sand, a sand pile, sand dune, or sandy terrain itself. It's a composite object and not suitable for learning the general physical properties of sand as a material.\"\n    }\n  },\n  \"1d622c5c920b4b37801a10ba04186f57\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model of a room or gallery with pictures on the walls, not sand or any related object like dunes, beaches, or sandpits.\"\n    }\n  },\n  \"1e3445ea20034c7f975cdd50f1510925\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a human character model, not sand or any related object like a sand dune, beach, or sand texture.\"\n    }\n  },\n  \"1ede67f129ad4169a1b6fd43b20c4b59\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts stylized figures around a table with a map-like surface, not sand or any related object like a sandpit or sandbox.\"\n    }\n  },\n  \"206f3c369d40455a81f80a5969cbf212\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a highly stylized, blocky representation and does not clearly depict realistic sand suitable for physics simulation. It also includes other elements like water and structures.\"\n    }\n  },\n  \"21464da596bc42c8a5077a4bc2c24096\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict sand. The texture and color resemble rock, concrete, or possibly dirty ice/snow rather than any form of sand (beach, desert, dune, etc.). It lacks the typical granular appearance.\"\n    }\n  },\n  \"21cd6b9b860d4b45940522823cea379e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid rock or piece of sandstone, not loose sand, a sand pile, sand dune, or sand texture as described in the class list. While it has a sandy color, its form factor is that of a rock, which would have very different physical properties in a simulation compared to sand.\"\n    }\n  },\n  \"232413b93cd5445e8395fb0df8cee67a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of sandy terrain, which falls under the requested classes ('sandy terrain', 'desert sand'). The quality is acceptable, and it represents a single terrain object relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"232b9407f5ad46f68764093f134591f4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts sandbags, not sand itself (like a pile, dune, or texture). While sandbags contain sand, the object shown is the bag, which has different physical properties and appearance than loose sand.\"\n    }\n  },\n  \"233c3aa86f134d23a333a2cc49acb04e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vehicle or machine, not sand or any related concept like dunes, beaches, or textures.\"\n    }\n  },\n  \"236d43744d2e42db923b0dbd7ee0e911\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandal, not sand or any related concept like a sand dune, beach, or sand texture.\"\n    }\n  },\n  \"2426f7330d3b4807bb584a3f8f593d65\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox or a container filled with sand, which falls under the specified classes ('sand box', 'sandpit', 'sand texture'). The image quality is good, and the object is relevant for physics simulation involving granular materials like sand.\"\n    }\n  },\n  \"242dcea427954d6d913ab7817077a83d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tiled floor with a marble-like texture, not sand or any sandy terrain. The material depicted is clearly not sand.\"\n    }\n  },\n  \"244547eca9654b28a3ceb35393e4faf9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dune buggy, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"24b97e1a5be04866ac9683d9cab125c5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized block of sand, recognizable within certain game aesthetics (like Minecraft). While low-resolution and pixelated, it represents the 'sand' class and is a type of object whose physics (like falling due to gravity) are often simulated in games.\"\n    }\n  },\n  \"27639d4b201f41fcabe34e6fc7dc26c9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone or concrete container, not sand or any related concept like dunes, beaches, or sandpits.\"\n    }\n  },\n  \"2953c46c6ad942b68883212ef5bb0a94\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of driftwood, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"2a54e21e33d94e7290f7e217b57250f0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (chair, tray, device) in addition to the sand. The sand is only a small part of the overall scene, and the setup is too complex, not focusing solely on the sand itself as required.\"\n    }\n  },\n  \"2a9ec2087f704befa10de56ad30bc08b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays three cylindrical objects with textures that resemble stone or ice, not sand. It does not clearly depict any form of sand (like dunes, piles, or texture) and is therefore inappropriate for the requested class.\"\n    }\n  },\n  \"2ab885d697bc4071b174648482cef4d2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only a very thin sliver of the object, making it impossible to identify as sand or any related concept. The depiction is extremely poor and not useful for training.\"\n    }\n  },\n  \"2acaa2b7dc8d4c9c9596b40cd4305861\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays abstract shapes and a box, none of which resemble sand or any related concept like sand dunes, sandpits, or sand textures.\"\n    }\n  },\n  \"2cc4614a571d4d85b695122f682b96fd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pair of slippers, which does not belong to the 'sand' class or any of its related terms.\"\n    }\n  },\n  \"2cc5636299134ccba9e9440a2fbe31f4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat brown surface with no discernible texture or features. It does not clearly depict sand or any related concepts like dunes, piles, or grainy texture.\"\n    }\n  },\n  \"2e7b600deffd427e851db2448a62b7b5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patch of sandy/gravelly ground with a prominent rock on top. This violates the requirement of depicting only a single object class, as it includes both the ground material and a separate rock object.\"\n    }\n  },\n  \"2ec05dcd936f4cdd890dc400d60ed2cc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a grey sphere. While it has some texture, it does not clearly depict 'sand' or any related concepts like dunes, piles, or sandy terrain. The shape and texture are not representative of the class.\"\n    }\n  },\n  \"2efc2a324abc4d0087f1d7c3cbba665a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandbag, which is a container for sand, not sand itself or a natural formation of sand like a dune or pile as specified in the class list. The texture represents the bag material, not sand.\"\n    }\n  },\n  \"304209b8973b4d1fabf8cab86a1c0b96\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sand, which falls under the 'sandy terrain' or 'sand texture' categories. The quality is good, and it represents a material relevant for physics simulation (e.g., deformation under pressure).\"\n    }\n  },\n  \"304d50339e914fc6b2c7518306319ad7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a futuristic vehicle, not sand or any related concept like beach, desert, dune, or sand texture.\"\n    }\n  },\n  \"30b6de46a4964e63bc95c388227233fd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts sandy terrain, which falls under the specified classes. While there is a shadow, the texture is still discernible and represents a type of sand surface relevant for physics simulation (e.g., friction, interaction).\"\n    }\n  },\n  \"315863c76bd94bbf95eb24014ba247d3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat rock or piece of slate, not sand or any form of sandy terrain/object.\"\n    }\n  },\n  \"3173cd6b91934b208b5c84e5997db6cf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It shows abstract blocky shapes, possibly part of a low-polygon character model.\"\n    }\n  },\n  \"320690cf056c4d6abc0a1e3e86171109\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized swords and a pedestal-like object, not sand or any related concept like dunes, beaches, or textures.\"\n    }\n  },\n  \"3301d56e05064e37a630b21e1a6f28b5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cobblestone or paved surface, not sand or any related sandy terrain.\"\n    }\n  },\n  \"33f5a90402b14060afcfbbc7627f9cd4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandal, not sand or any related concept like sand dunes, beach sand, etc.\"\n    }\n  },\n  \"34f344e782de4697b93578a90eec4bc9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of sand texture, which falls under the requested class 'sand'. While the geometry is simple and the rendering quality could be higher (jagged edges), the texture itself is recognizable as sand and could be useful for learning material properties relevant to physics simulation.\"\n    }\n  },\n  \"35af309306dc40a5ba506dd75fc09cc5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely blank and does not depict sand or any recognizable object. It is unsuitable due to extremely low quality and lack of content.\"\n    }\n  },\n  \"35ea998a29be448aa3072c658b0d1202\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a map or game board with a sand-like texture, but it also includes representations of water and paths. It does not depict sand as a primary object or material (like a dune, pile, or beach) suitable for physics simulation training.\"\n    }\n  },\n  \"3744ddd64a3742b78342ded9eaa81e6e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows several distinct, blocky, pillar-like objects. It does not clearly depict sand, a sand dune, a sand pile, sandy terrain, or any other form of sand listed in the class definition. These objects appear solid and structured, not like a granular material suitable for simulating sand physics.\"\n    }\n  },\n  \"38ac75a8aaad432ca817a7591734142d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of various materials (cardboard, wood, rusted metal/concrete), not sand or any related concept like beach sand, desert sand, sand dune, etc.\"\n    }\n  },\n  \"395d9702fade4142a0aea8e2f7ddc0ea\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a person's head wearing a hood, not sand or any sandy terrain/object.\"\n    }\n  },\n  \"3a6d1f480536440ea98ab6ccd5c5454b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single rock or stone, not sand or any related concept like sand dunes, sand piles, or sand texture.\"\n    }\n  },\n  \"3a755db707c040698b55f6a90ec4e11f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of sandy terrain mixed with small rocks, which falls under the requested class 'sandy terrain'. The quality is acceptable and it represents a surface relevant for physics simulation in a game environment.\"\n    }\n  },\n  \"3ace899d98b740e89bbfb50cc5c14247\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large rock formation, not just sand. While sand is present as the ground surface, the rock is the dominant feature, violating the 'single object' rule for the target class 'sand'.\"\n    }\n  },\n  \"3b253d679ba94bcfaa5e09acb33e572e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a complex building structure, not sand, sand dunes, or sandy terrain. It contains multiple objects and is not suitable for representing the class 'sand' for physics simulation.\"\n    }\n  },\n  \"3b39a55647f3477ea643544930c7078b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid block with a texture resembling granite or marble, not sand or sandy terrain. It does not fit the requested class.\"\n    }\n  },\n  \"3ba52b3c10f84476bf460ee2c6f6203c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of reddish, cracked terrain with prominent rock formations. While it could be considered 'sandy terrain', the rocks are a significant part of the image, and the texture is more like cracked earth than typical sand. It doesn't clearly represent the 'sand' class as a primary element.\"\n    }\n  },\n  \"3bd89f5b40144cc09679b5b87ec364c2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dark, muddy, or rocky texture, not clearly identifiable as sand. The color and texture do not align well with the typical appearance of sand (beach, desert, etc.).\"\n    }\n  },\n  \"3c93a4442e1e4bac9b9612d93af485a0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of crumpled foil or similar metallic material, not sand or any related sandy terrain.\"\n    }\n  },\n  \"3d45c932270e4bbfa7aa7961ef771aed\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock formation, with only small amounts of sand visible around the base. It does not clearly represent the 'sand' class as the main subject.\"\n    }\n  },\n  \"4005983741024afe9ddb845b941a39de\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a model of a village or town, not sand or any related objects like sand dunes, sandpits, or sandy terrain.\"\n    }\n  },\n  \"407fbbc463fb4f00b14d5d51782926ae\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized tree, not sand or any related concepts like sand dunes, beaches, or textures.\"\n    }\n  },\n  \"40ee186ab518490999447a48238dac0d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a floor plan or shelving layout, not sand or any related concept.\"\n    }\n  },\n  \"4183d4b0da32499a81340c1f76afefd0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a top-down view of a building layout (like a gallery or showroom), not sand or any related concept like a beach, desert, sand dune, or sand texture.\"\n    }\n  },\n  \"41a3c44441d64535b5190464f8e1c6eb\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid, rock-like formation or terrain piece, not clearly identifiable as sand, a sand dune, or a sand pile. The texture lacks the granular appearance expected for sand, making it unsuitable for learning sand physics.\"\n    }\n  },\n  \"421f0e8e53594e30a6bdaa9ed1e589cc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a texture representing sand, suitable for learning material properties for physics simulation. The quality is adequate.\"\n    }\n  },\n  \"42b3b952f8dd4e098c6cb921079f1c25\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low (blurry), and it appears to depict wet sand or mud with pebbles and debris, rather than clearly representing a distinct sand object or texture suitable for physics simulation training.\"\n    }\n  },\n  \"42f71745c0a6475fb36f72a9c304cbf7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains multiple distinct objects (sand, container, rock), not just a single object from the 'sand' class as requested.\"\n    }\n  },\n  \"437fc27dd7ff4a36ae0cf56ffbd1dc5c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent fossil or bone object embedded in the sand, violating the requirement to depict only a single object from the specified class list. The focus is not solely on the sand itself.\"\n    }\n  },\n  \"43cef40a6f9e4c1d8036d797a3fbabea\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts cobblestones or rocks, not sand or sandy terrain.\"\n    }\n  },\n  \"44261d46f16149bd81625c6c796d1219\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandal, which is footwear, not any form of sand or sandy terrain as requested by the class description.\"\n    }\n  },\n  \"4481e75fe5bc403697c08df916dab3a4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wood texture, not sand or any related object like sand dunes, sand piles, or sandy terrain.\"\n    }\n  },\n  \"44c24f09be734e0ab8c0d9fc8371b2c6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple structures made of stylized, blocky 'sand' material, rather than a clear depiction of sand itself (like a dune, pile, or texture). It contains many other elements (water, base, other blocks) and is not suitable for learning the physical properties of granular sand.\"\n    }\n  },\n  \"455ef053967f4bae82db59b229aaac9e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandbag, not sand itself or a natural sand formation like a dune, pile, or terrain. While it contains sand, the primary object is the bag, which has different physical properties than loose sand.\"\n    }\n  },\n  \"45b320d2f4fd42849bb8e55eafb07b68\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a building structure, not sand or any related object like a dune, beach, or sand texture.\"\n    }\n  },\n  \"468046f6e39148809e46daab9e3b4cba\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model of a structure, possibly scaffolding or a foundation, not sand or any related concepts like dunes, beaches, or sandpits.\"\n    }\n  },\n  \"4739b8843eb942bb918d684055b1cfba\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stylized block with a sand texture, which could represent a sand block or sandy terrain element in a game. The quality is good and it clearly depicts the intended material type, suitable for the 'sand' class.\"\n    }\n  },\n  \"488c2c201fe54b13a262792efc362354\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized rock-like objects, not sand or sandy terrain. It lacks the characteristic granular texture of sand and represents solid objects rather than a deformable surface or pile suitable for sand physics simulation.\"\n    }\n  },\n  \"494a0b336f4c4ecc915d93ee1af1c9ab\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandy surface, but it also contains several distinct, non-sand objects (orange and white figures) placed upon it. This violates the requirement to depict cleanly only the object class (sand or sand formations).\"\n    }\n  },\n  \"49940139384c4930b60dcf0db3515f64\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure (like a temple or pyramid) made of blocks, possibly intended to look like sandstone or a sandcastle. However, it does not represent sand in its natural form (loose grains, dunes, piles, texture) which is the target class. For physics simulation, we need representations of sand's granular properties, not a rigid block structure.\"\n    }\n  },\n  \"4b0efe52bdeb4259948a517d613d2e13\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized cartoon object, possibly a creature or plant, not sand or any related terrain like dunes or sandpits.\"\n    }\n  },\n  \"4b46199141d44dc2bef22c6ce8be189d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a power tool (sander), not sand or any related terrain/texture.\"\n    }\n  },\n  \"4c632be5f77c4270a1b8a2c536568229\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a piece of fabric or a sculpted object, possibly hair or clothing, not sand, sand dunes, or any related concept.\"\n    }\n  },\n  \"4e07c85f53b24dc5b29f72710e41ae24\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cabinet or locker, not sand or any related concept like a beach, desert, dune, or sandpit.\"\n    }\n  },\n  \"4e112916230e4599976277649f3b3376\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object appears to be more like a rock formation or sandstone rather than loose sand (like dunes, piles, or sandpits). Additionally, there are rendering artifacts (white patches) at the top, indicating a low-quality model or render.\"\n    }\n  },\n  \"4e29e0c897574da8ba987f65c51f5a5f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of wood or driftwood, not sand or any sandy terrain/object.\"\n    }\n  },\n  \"4e8ff71590b645eea2e79446213cb676\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a turtle, not just sand. It also contains other elements like rocks and plants, violating the requirement for a clean depiction of a single object class (sand).\"\n    }\n  },\n  \"4ea2c24aba6f42f18907da42e7d51c99\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fragmented 3D scan of an indoor scene (likely a desk or room), not sand or any related object class like beach sand, desert sand, sand dune, etc.\"\n    }\n  },\n  \"4eac77175f394476a47b599c23899e7d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a strip of sandy terrain, which falls under the requested 'sand' class. The quality is good, and it represents an object relevant for physics simulation (terrain).\"\n    }\n  },\n  \"4edf3fc602f946d3884f9daf78c47261\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a house and yard, not sand. While there might be a small patch of sand-like blocks, it's not the main subject and the image contains many other objects.\"\n    }\n  },\n  \"4eead816b4f14ef88704e89afe81c51d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to discern the object clearly. It appears to be a stylized sandcastle or structure, but the quality is too low for training data.\"\n    }\n  },\n  \"4ef04250c6b94fb4bc750a7b4e1fb08b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a can embedded in the sand, which violates the requirement to depict only the target class (sand).\"\n    }\n  },\n  \"4faae5739c38414b8d0e3bae1141e8a8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden cabinet or shelf, not sand or any related object like a sand dune, beach, or sandpit.\"\n    }\n  },\n  \"50014ed9f1494d0c9408fdd4347fa552\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock or piece of coal, not sand or any related concept like sand dunes, beaches, or sandpits.\"\n    }\n  },\n  \"500d99a25d504b3f8499df8c4d817d1e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image predominantly features large rock formations, not just sand. While there is sandy terrain present, it is not the primary focus, and the rocks constitute a significant, different object class, violating the 'single object' guideline for this class.\"\n    }\n  },\n  \"504e201e90f143feae031a98ee590efd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure and plants on a sandy-colored base, rather than focusing solely on sand or sandy terrain. It contains multiple distinct objects, not just sand.\"\n    }\n  },\n  \"50eda825135b44bab6178be1f9617e87\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts rocky terrain, not sand. While there might be some sandy elements mixed in, the dominant feature is rock, making it unsuitable for the 'sand' class.\"\n    }\n  },\n  \"51676e3e24a640018b4db150cd09cb5e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows solid rock formations, not sand. Sand is a granular material, and while these rocks might be found in a sandy environment, they do not represent the class 'sand' itself.\"\n    }\n  },\n  \"5253ce9b95f844928def583cacbb6d78\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoon character holding a yellow object, not sand or any related concept like a beach, desert, or sand dune.\"\n    }\n  },\n  \"5286f50affd247008b48ec2787a4b72b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a table or shelf, not sand or any related object like a sand dune, sandpit, or sand texture.\"\n    }\n  },\n  \"530dac44b88f44a788472488f56b7a3a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It appears to be a low-resolution image of a mechanical object or weapon.\"\n    }\n  },\n  \"53609d8f0d534d5f9711294186ae9c36\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object, let alone determine if it belongs to the 'sand' class. The quality is too low for training.\"\n    }\n  },\n  \"53920ea7df94448db2f1def954067f48\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a pile of rocks on sandy ground, not just sand or sandy terrain. The rocks are the dominant feature, and there is also some debris visible, violating the single object focus.\"\n    }\n  },\n  \"53fdc73eeca7473e83d6bb14afa9e057\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of what might be sand, but it also includes prominent green elements resembling grass or plants along the edges. This violates the requirement to depict cleanly ONE SINGLE OBJECT class, as the grass is a significant part of the image and distracts from the 'sand' element.\"\n    }\n  },\n  \"54378c50469341fb955bd4f724e10540\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not sand or any related concept like sand dunes, sandpits, or sandy terrain.\"\n    }\n  },\n  \"54f97bd362a74d3bad45b062e1d0ea09\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too small and lacks detail. It's difficult to clearly identify the object as belonging to the 'sand' class. It looks more like a fragment of a larger terrain model rather than a distinct sand object suitable for physics simulation.\"\n    }\n  },\n  \"550d5efae7fa456aa5f6319a14ea84f7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the specified class. The quality is good, and it represents a single object type relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"55574142365b49bc9ac83e22beea548f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation, not sand or any sand-related features like dunes, piles, or sandy terrain.\"\n    }\n  },\n  \"5672554cc36349d98ef5791f2270ed5f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (ruins, base) in addition to the sand. The sand itself is stylized and not the primary focus of the image, making it unsuitable for learning the physics properties of sand alone.\"\n    }\n  },\n  \"56c551e472b942de806afe90b1b9cdda\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts sandy terrain, which falls under the specified class list. The quality is sufficient for training purposes and represents an object type relevant for physics simulation (e.g., terrain interaction).\"\n    }\n  },\n  \"56d43ab11a88456aacdc83eb741e5819\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock/earth cliff or embankment structure, with only a small amount of sand visible at the base. It does not cleanly represent 'sand' as the single main object.\"\n    }\n  },\n  \"57d50b142e424cfb806aee6ef9fd9bb7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of rock and petrified wood, not sand or any related object class like sand dune, beach sand, or sand texture.\"\n    }\n  },\n  \"57f0aaba55984ef7ab108af7a1c64b44\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a vehicle, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"5829d518fce64b06929721c8290d7ceb\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains other distinct objects (white blocky items, possibly bones) on top of the sand block, violating the requirement for depicting only a single object class cleanly.\"\n    }\n  },\n  \"5927ed7b27d94ab3b100813c11a3ca85\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict sand. The texture and color (blue/purple) are highly stylized and do not resemble typical sand or sandy terrain. It looks more like a stylized ground patch with embedded rocks or possibly something else entirely.\"\n    }\n  },\n  \"5953e090309748ed973ec4b04fe6718f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's texture does not clearly resemble sand; it looks more like a solid rock or piece of clay with a veiny pattern rather than granular material. This makes it unsuitable for representing the class 'sand', especially for physics simulation purposes where granular behaviour is expected.\"\n    }\n  },\n  \"5a3b145e383949238400998bb737a3bd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mixed terrain patch with grass, rocks, and a light-colored area that might be sand, snow, or light dirt. It does not clearly and solely depict sand or sandy terrain as required.\"\n    }\n  },\n  \"5adcf9ad5d364e71b2314ebef99db00c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of terrain, but the texture is ambiguous and does not clearly look like sand. It could be interpreted as snow, salt, or light-colored rock/dirt. It lacks the characteristic appearance of sand needed for clear identification.\"\n    }\n  },\n  \"5b9532c4ff60439b80c47b82edd8da66\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It shows a close-up of an unrelated, patterned object.\"\n    }\n  },\n  \"5bd5a4e183354180b94c95a38020005d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandcastle, which is an object *made* of sand, rather than depicting sand itself (like a pile, dune, or texture). While related, it represents a specific structure and might not be ideal for learning the general physical properties of sand as a material for simulation.\"\n    }\n  },\n  \"5c08ab068a6c48ca9c07c2eb396ece2a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain or sand texture, which falls under the requested class. The quality is good, and it's relevant for physics simulation as a ground surface.\"\n    }\n  },\n  \"5d3afd91ad80482d8afa188e6c7830d9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex landscape or level structure, not clearly identifiable as just 'sand' or a specific sandy feature like a dune or pile. It contains multiple elements (rock formations, structures) and is not focused on the sand material itself.\"\n    }\n  },\n  \"5d5d0f759c594e5c944a720ea41b6aa8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict sand or any related object from the specified classes. It shows abstract scenes with furniture and blocks on textured ground planes, which are not identifiable as sand.\"\n    }\n  },\n  \"5e134636396048d69426ece450d448ea\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a texture that resembles sand (possibly wet or compacted sand) applied to a sphere. While sand isn't typically a solid sphere, this representation is standard for showcasing materials/textures, and the texture itself is relevant to the requested class 'sand' and its potential use in physics simulations (e.g., for terrain properties).\"\n    }\n  },\n  \"5ee8e1decdf141d998bcf7f9e474bff0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent secondary object (a skeleton) on top of the sand block, violating the requirement for depicting only a single object from the specified class.\"\n    }\n  },\n  \"5ef035ff4ce8492d8726a79feaecc450\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts buildings made of sand-colored blocks, not sand itself in a natural form like a dune, beach, or pile. It does not represent the granular material 'sand' suitable for physics simulation of sand.\"\n    }\n  },\n  \"5f4fbdeafcd34c3b9b0320a1daaa8e9c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure, possibly from a block-based game like Minecraft, not sand or sandy terrain.\"\n    }\n  },\n  \"600287cc8269406e93ffabfb71d26a6f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a highly stylized, patterned surface with repeating circular indentations. It does not resemble any natural form of sand (beach, desert, dune, texture) and looks more like an artificial tile or patterned ground. It's not suitable for representing the 'sand' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"60c4ae196d134caa9d5a313772251852\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized object, possibly a toy or weapon, which is completely unrelated to the requested class 'sand'.\"\n    }\n  },\n  \"60c4d916d8974aeab4623c936694fad5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox, which falls under the acceptable classes ('sandpit', 'sand box') and contains sand. The quality is good and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"60c91482097142feb94f286ff71b1fab\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a toy truck, not sand or any related object like a sand dune, sandpit, or sandy terrain.\"\n    }\n  },\n  \"60ce153c8fc346b68410f2a3cd804a3a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (terrain and a vehicle/rover), not just the sand/sandy terrain. We need images depicting only the requested object class.\"\n    }\n  },\n  \"6100e92bb97648d7918fd73da66539d5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building or stadium structure, not sand or any related object like a dune, beach, or sandpit.\"\n    }\n  },\n  \"6153ce27133144eda76397971c030b19\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure (like a temple or castle) made of sand-like blocks, not just sand itself (e.g., a dune, pile, or texture). It contains other elements like cacti and stairs, violating the 'single object' rule for this class.\"\n    }\n  },\n  \"625dafd3bc684af9accee09f8fcc534e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (structure, water, cacti, bridge) in addition to the sandy terrain. It depicts a complex scene rather than focusing solely on sand. Furthermore, the highly stylized voxel art style is likely not suitable for learning realistic physics parameters for sand.\"\n    }\n  },\n  \"62da7c177a6241eebe94c4eba6fc81b7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid object that looks more like a rock or a clump of hardened earth rather than loose sand, a sand dune, or a sand pile as described in the class list. It does not represent the typical form or physical properties of 'sand' needed for simulation.\"\n    }\n  },\n  \"63a53704cda049fab5cf5188952f4c01\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden cabinet, which does not belong to the 'sand' class or any of its related terms.\"\n    }\n  },\n  \"63d50d7eeb7b4f51acec8abef2f54402\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of sand, which falls under the requested class. The quality is acceptable, and it represents a single object relevant for physics simulation.\"\n    }\n  },\n  \"644cd300b35746df8b6245f9aca132f6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single, smooth object that looks more like a stone or shell fragment than sand. It lacks the characteristic granular texture or formation (like a pile or dune) associated with sand.\"\n    }\n  },\n  \"655411b70c724de19af9ff977e3140b6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rocks, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"65da26b626e24f3c86b66b77b08a69a2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a sand-like texture applied to a sphere. This is suitable for representing the material properties of sand for physics simulation purposes, falling under 'sand texture' or 'grainy sand'.\"\n    }\n  },\n  \"66031ab18dfa4979892455996084b280\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone pillar, not sand or any of the related terms like sand dune, sand pile, sand texture, etc.\"\n    }\n  },\n  \"66d5ffd6de4b461b865c31084eaeadb1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandcastle on a patch of sand. While a sandcastle is a structure, it is made entirely of sand and is a common representation related to the class. It fits within the broader context of sandy objects like sand piles or sandpits, and is relevant for physics simulation (e.g., stability, collapse).\"\n    }\n  },\n  \"678715aa23404a8ab170ceb05362a03b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract collection of orange polyhedral shapes, which does not resemble sand, sand dunes, beaches, or any other form of sand listed in the class description. It looks like a stylized representation rather than a realistic depiction suitable for learning sand physics.\"\n    }\n  },\n  \"6792d9aa06374525a67efea3bdf96087\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single rock-like object, not sand or any of the related terms like sand dune, sand texture, or sandy terrain.\"\n    }\n  },\n  \"67b5fcc361b44ab09ee3af984ce3a3c7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a piece of sandy terrain, which falls under the 'sand' class. The quality is good, and it represents an object relevant for physics simulation (e.g., terrain interaction).\"\n    }\n  },\n  \"69cb70e8a66c47aea7c4a9ba45537f03\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large rock or stump on top of a terrain patch. While the terrain might be sandy, the focus is not solely on the sand, and the prominent rock object does not belong to the 'sand' class.\"\n    }\n  },\n  \"6a3930b45c444eabbeb6215bafc9d676\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone sand or related concepts.\"\n    }\n  },\n  \"6a4e86bc640f4794bacb2c14f2facac9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts sandy terrain with sandcastle-like structures, which clearly falls under the 'sand' category and its associated terms (like beach sand, sandy terrain). The quality is adequate, and it represents a scenario relevant for physics simulation (deformation, interaction).\"\n    }\n  },\n  \"6a514b4c673f44c488c610a583aaa459\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden pot or jar, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"6a6caa27d3a54f218b1226ab596b24ce\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure made of various block types, not clearly identifiable as sand or any related concept like dunes or beaches. It contains many other objects and does not represent the target class.\"\n    }\n  },\n  \"6aa840b1ff02489ab43e37b0b8e69aa6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a texture sample that resembles sand, but it is presented on a flat, artificial-looking surface. It does not depict sand in a natural form (like a dune, beach, or pile) and is not suitable for representing sand as a physical object for simulation purposes.\"\n    }\n  },\n  \"6b8813a6d7ab4958946f1c3ce76b866f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a shovel in addition to the sandcastle. We need images depicting only the object class (sand).\"\n    }\n  },\n  \"6bb0ab7f78ff435e9f63084ba8180a24\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a top-down view of a building layout or floor plan, not sand or sandy terrain.\"\n    }\n  },\n  \"6bd9a0d96ef4463a8efd45af2be595ac\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the requested class 'sand'. The quality is good, and it's suitable for representing sand in a physics simulation context (e.g., terrain interaction).\"\n    }\n  },\n  \"6d2b234f509449429cd4da3bf5eb4a66\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a collection of trees on a green base. While there might be a small sandpit in the center, it is not clearly visible and is not the main focus of the image. The image does not clearly represent the 'sand' class.\"\n    }\n  },\n  \"6daf3e151cac4cbb998197d30d0e796c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a piece of driftwood or root, not primarily sand. The sand is only present as a base layer and is not the main subject of the image.\"\n    }\n  },\n  \"6e0f981a4e004f7f977f183fa762ab65\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that appears to be a matchstick or a similar thin rod, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"6e54464d405a4c1e8bdb0f81e8d74db2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a texture that represents sand, which falls under the specified class list ('sand texture'). The quality is good, and it isolates the material texture, which is useful for learning material properties for physics simulation.\"\n    }\n  },\n  \"6edc9b08a06b4feb87ce09654c460a2f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a texture applied to a sphere. While the texture might resemble some form of dry earth or possibly very coarse sand, it doesn't clearly depict sand in a way that's useful for simulating its physical properties (like flow, granularity). We need representations of sand formations (piles, dunes, terrain) rather than just a texture on an unrelated geometric shape.\"\n    }\n  },\n  \"6edee27697eb417b9de92f775bfe3916\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of wood or log, not sand or any related concept like beach sand, desert sand, sand dune, etc.\"\n    }\n  },\n  \"6f5ecd2e7b90455bba2e283f649b2255\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows several discrete, relatively large objects that resemble pebbles or large grains, not a mass or texture identifiable as sand, a sand pile, sand dune, or sandy terrain. It does not clearly depict the target class 'sand'.\"\n    }\n  },\n  \"6f8d2771f3df4f57bdf1f6a86dd9ea16\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a heavily distorted and fragmented 3D model render. It does not clearly depict sand or any related object from the class list. The quality is poor due to the distortion, making it unsuitable for training.\"\n    }\n  },\n  \"6fad3d65993f47c6be6ebe67ad7673f9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox/sandpit, which contains sand and falls under the specified classes. The quality is good and it's relevant for physics simulation.\"\n    }\n  },\n  \"70db1c37b96c4c50811b68a446c0de01\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a shoe (specifically a clog), not sand or any related object like a sand dune, sand pile, or sandy terrain.\"\n    }\n  },\n  \"712d65f2d7614920923d1fe115535c4d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a piece of sandy terrain or desert landscape, which falls under the requested class 'sand'. The quality is good and it represents a single object relevant for physics simulation (terrain interaction).\"\n    }\n  },\n  \"7297a4ee54304bd79a0c2d443b11bdf6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object. It does not depict sand or any related concept.\"\n    }\n  },\n  \"744e90b6ee744645809feae0a392a646\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandbox with toys (shovel, bucket) inside. While 'sandbox' is listed as a valid object type, this image depicts multiple distinct objects (sandbox structure, sand, shovel, bucket) rather than cleanly focusing on the sand itself or just the sandbox as a single unit. Additionally, the image is an untextured render, lacking visual detail about the sand's appearance, which might affect its usefulness for training, although the geometry is clear.\"\n    }\n  },\n  \"74e91a6df2e540f9a7ae0a1bb52aee04\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandal, not sand or any related concept like a sand dune, sand pile, or sandy terrain.\"\n    }\n  },\n  \"758d93c6a5254787a5edc80351ca6a67\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure made of multiple block types (sand, sandstone, wood, fence), not just sand. We need images focusing primarily on sand itself, like a pile, dune, or texture, to learn its specific physical properties, not how it behaves as part of a static, composite structure.\"\n    }\n  },\n  \"75b8e7c1b1d1403b9f00b8d3302c9da9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is highly stylized and does not clearly depict sand. It looks more like a cartoonish small island or mound on water, and the texture lacks the characteristic granular appearance of sand, making it unsuitable for learning realistic sand physics.\"\n    }\n  },\n  \"75e90bf532c7478395bb56dac5808d0d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a room with wooden flooring and walls, not sand or any related sandy environment.\"\n    }\n  },\n  \"7700dfff30014532912e05325572727c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a book, not sand or any related object like a sand dune, beach, or sandpit.\"\n    }\n  },\n  \"7719ed9ce15a4dcfba198440c94e4767\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock or clay formation, not sand. It lacks the characteristic granular texture and form of sand, sand piles, or sand dunes.\"\n    }\n  },\n  \"77448fb75d1e4b1bb309819346a20d77\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure, not sand or any related object like a sand dune or sandpit.\"\n    }\n  },\n  \"77ca1ab2125d4534a742042dd2366651\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object, possibly a jukebox or cabinet, not sand or any related concept like a dune, beach, or sandpit.\"\n    }\n  },\n  \"7842c150424d40c2afdd77bfa6dbf69a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a pile of sand, but it also prominently features a large rock-like object on top, which does not belong to the 'sand' class. We need images depicting only the target class object.\"\n    }\n  },\n  \"79bcd682f0bd43faab414b1f45ab3a07\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, the 3d model appears fragmented and incomplete. It also includes other elements like grass and paved ground, not just the sand pile.\"\n    }\n  },\n  \"79fa76c1136748bab276e906f82f8954\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure (a desert temple or city) made of various blocks, including sand-colored ones. It does not cleanly depict 'sand' or 'sandy terrain' as the primary object. The focus is on the entire building complex, not the sand material itself, making it unsuitable for learning sand physics.\"\n    }\n  },\n  \"7a2b94b6adb242bbb12f116d40d3bcbe\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a creature/monster, not sand. The base it stands on is indistinct and does not clearly represent any form of sand or sandy terrain.\"\n    }\n  },\n  \"7a6f3c4b74044d84be7df1cac21f98f5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a very low-quality, flat representation of sand. It lacks texture detail (like individual grains) and looks more like a solid colored plane than actual sand. This low level of detail makes it unsuitable for high-quality training data, especially for deriving physics parameters.\"\n    }\n  },\n  \"7a9fe86f063e458cb150549d9b719368\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract scene made of colored blocks (voxel art style). It does not realistically depict sand, sand dunes, sand texture, or any related concept from the requested class list. The blocky representation is unsuitable for learning the visual or physical properties of sand.\"\n    }\n  },\n  \"7abbd330d18a446dbacce139092ee84e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows three cylindrical containers with a texture applied, not sand itself or any form of sandy terrain/object like dunes or piles. It does not represent the requested class 'sand'.\"\n    }\n  },\n  \"7c8e30db327d400280641fb9bed9deb3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of machinery, possibly a container tipper or dump trailer mechanism, not sand or any related object like a dune, pile, or texture.\"\n    }\n  },\n  \"7cecf49d01394730b813a6a790bfa007\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bowl, a goblet, and an apple, none of which belong to the 'sand' class.\"\n    }\n  },\n  \"7d0cff81a36b4539b70b1fec97949a4c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a house, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"7d34b54c5567495ca59cf572045e48a2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a sand dollar in addition to the sand patch. We require images depicting only a single object from the specified class list.\"\n    }\n  },\n  \"7d3f29aa40194c3988707739622810e4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related concept. It shows a fragmented aerial view of a landscape with a house, road, and grass.\"\n    }\n  },\n  \"7e352379db064a78b813e52fb2450132\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict sand or any object.\"\n    }\n  },\n  \"7e539442ffe14ec6aaf866f20f4ff80e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture shown looks more like gravel or pebbles than sand. Additionally, the image contains a prominent, unrelated floating object (cube on a sphere) which distracts from the intended class.\"\n    }\n  },\n  \"7fe41b78a1bf4cd789c51affecdd2afe\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty container, possibly a sandbox or tray, but it does not depict sand itself. The surface inside is smooth and lacks the texture of sand.\"\n    }\n  },\n  \"8158173e15cf4f14a493cd59e72788e5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a brick or tile surface with sandals and fabric on it, not sand or any related sandy terrain.\"\n    }\n  },\n  \"8180bad2d8e04909a68252843ed1c2b6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block with a striped pattern, which does not resemble sand or any related sandy terrain/object. The texture is completely different from the grainy appearance expected for sand.\"\n    }\n  },\n  \"8195567a99e148da8bb6380d643ed173\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains prominent logs/wood pieces in addition to the sand. We need images depicting only the requested object class (sand).\"\n    }\n  },\n  \"82022d10afb5479487f77a5c3f3759fd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not sand or any related concept like a beach, desert, or dune.\"\n    }\n  },\n  \"8233164338674781bfc016173eb25cf8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat, textureless patch that does not clearly resemble sand or any of its variations (dune, pile, texture). It lacks the granular detail expected for sand and is too abstract to be useful for physics simulation training.\"\n    }\n  },\n  \"82ae217635e9462786eadf82da23aec5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vehicle chassis, not sand or any related sandy environment/texture.\"\n    }\n  },\n  \"82cb92d2de1945f28abd6ec90218e902\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related concept (like sand dunes, sandpits, etc.). It shows a patterned container or bag, which is not relevant to the requested class.\"\n    }\n  },\n  \"837f58ec476f47ba9d5b7aebd6ca635d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat, textureless patch that does not clearly depict sand or any sandy terrain. It lacks the grainy texture or form (like dunes or piles) associated with sand, making it unsuitable for training.\"\n    }\n  },\n  \"837fd37694644f4d8e7b2d3139464896\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (sand, water, cacti, rocks, grass) rather than depicting sand cleanly as a single object or material. This makes it unsuitable for learning physics parameters specifically for sand.\"\n    }\n  },\n  \"83843787cec64387bba941dabd672472\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid object (possibly a block or part of a sandcastle) with a sand texture applied. It does not depict sand in its natural, granular form (like a pile, dune, or terrain) which is necessary for learning the physics of sand.\"\n    }\n  },\n  \"8450fc9689594c98ab0e77fe24d23184\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the requested class 'sand'. The quality is acceptable and it represents a surface relevant for physics simulation in games.\"\n    }\n  },\n  \"849f4fbebe684a0d80d561e281be41b7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large, prominent rock in addition to the sand. We want images that focus primarily on the sand itself, representing one of the specified sand types (e.g., sand texture, sand pile, sandy terrain).\"\n    }\n  },\n  \"84e6548d3a9044bdb2d89b1adae12979\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky outcrop with some vegetation and a bird, not primarily sand or sandy terrain. The presence of multiple distinct elements (rock, vegetation, bird, sand/gravel) makes it unsuitable for representing the 'sand' class cleanly.\"\n    }\n  },\n  \"854d89b034674d95886448c6face6cdd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pair of shoes, not sand or any related item from the specified class list.\"\n    }\n  },\n  \"8560a93adc7d4c8781d45bac09ddf7b9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is ambiguous. While it could potentially represent a pile of sand or sandy terrain, the texture has strong linear patterns that make it look more like crumpled fabric or wood grain rather than clearly depicting sand. This lack of clarity makes it unsuitable for training.\"\n    }\n  },\n  \"85e486cbe2cd44edb699674516aaf862\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a prominent rock in addition to the sand, violating the requirement for depicting only a single object class.\"\n    }\n  },\n  \"85f79a013fc64f9aa75230e614845a33\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict sand or any recognizable object.\"\n    }\n  },\n  \"86e17533bd764d51a4046663a3c6d4c6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandy terrain with sand structures, which falls under the 'sand', 'sandy terrain', 'sand pile', or 'sandpit' categories. The quality is good, and it represents an object relevant for physics simulation (e.g., deformation, interaction).\"\n    }\n  },\n  \"87ec631e67a847d7882c8dc70b65a5e8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any object, let alone sand or sandy terrain. The quality is too low.\"\n    }\n  },\n  \"886afeeaef4d46649dc05b0941183c16\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a highly stylized, voxelated object. While it resembles a sand pile in shape and color, the blocky nature doesn't represent the granular properties of sand needed for realistic physics simulation. It looks more like a solid object made of blocks than actual sand.\"\n    }\n  },\n  \"89eab35aeebd4040ac34a35e4a4275b1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a scene with a castle (potentially made of sand), grass, rocks, and a border. It does not cleanly depict only sand or a sand-related object like a sand dune, sand pile, or sand texture. The presence of multiple distinct objects (grass, rocks, border) makes it unsuitable for the dataset focused on the 'sand' class.\"\n    }\n  },\n  \"8a5300783d794417a8a91e9424027b14\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of sandy terrain, but it also includes a prominent piece of what looks like driftwood or other debris embedded in it. This violates the requirement of depicting only a single object class (sand).\"\n    }\n  },\n  \"8a7badda136e48b99cdb232898d18b15\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat, solid-colored plane with a hole, which does not resemble sand or any related concepts like dunes, beaches, or sand textures. It lacks the granular appearance characteristic of sand.\"\n    }\n  },\n  \"8b28b04d75c04af28ae9bf8ff8648d94\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bag, not sand or any related concept like sand dunes, beach sand, etc.\"\n    }\n  },\n  \"8b56e4c9c6cd43699735e824f94a3f3f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain with ripples, which falls under the 'sand', 'sandy terrain', or 'sand texture' categories. The quality is good and it represents a surface relevant for physics simulation.\"\n    }\n  },\n  \"8c3eb6304c8b4cf3aa313956b7a618ae\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of rocky terrain, not primarily sand. While there might be some sandy texture present, the dominant features are rocks and the overall structure is not representative of sand dunes, beaches, or sand piles which are key examples of the 'sand' class.\"\n    }\n  },\n  \"8c950ceace1d4cac8923cf00bb203571\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden surface (planks), not sand or any related sandy terrain.\"\n    }\n  },\n  \"8cb269c5ce5447439e9fbe64e4119621\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple boxes, some empty, some with textures that are not clearly sand. It does not clearly depict sand, a sandpit, or a sandbox filled with sand. It violates the single object rule and the object class is not clearly represented.\"\n    }\n  },\n  \"8cda4370170746d393aa311a7c080c50\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts piles of stone-like objects or bricks, not sand or any related concept like sand dunes, sand piles, or sand textures.\"\n    }\n  },\n  \"8d351bb93c634d2c83191dd999e94fa1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts sandbags arranged in a barrier, not sand itself (like a pile, dune, or texture). While sandbags contain sand, the object shown is the bag structure, which has different physical properties and visual representation than loose sand.\"\n    }\n  },\n  \"8d48f42f6c2f4d268ca3ea5283c4ba21\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden object, possibly a pallet or crate, not sand or any related concepts like sand dunes, sandpits, or sandy terrain.\"\n    }\n  },\n  \"8d4fe90ed22f4e4293b8cdfeb4968c0f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a large creature in addition to the sand. The focus is not solely on the sand, violating the requirement to depict cleanly one single object class.\"\n    }\n  },\n  \"8d82dbfd749a42bcbbbba21292220ea6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone wall or embankment, not sand or any sandy terrain.\"\n    }\n  },\n  \"8d97036297264d7bbe6ecec2952b6c86\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a grassy area with plants, rocks, and a fence, not sand or any related sandy terrain.\"\n    }\n  },\n  \"8e6eb4d442e744b187696aa86555c3b4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely low quality, fragmented, and does not clearly depict sand or any recognizable object related to the class. It appears to be a corrupted or incomplete rendering.\"\n    }\n  },\n  \"90458a3959f34431a314aa3a3893d7ac\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent wooden stump in addition to the sand. We need images that cleanly depict only the object class (sand) or natural variations like dunes or piles.\"\n    }\n  },\n  \"90ea2a7c23d94c4abda00c08469cf8a4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low (blurry and low resolution). While the texture resembles sand, the object is depicted as a simple geometric block, which is not a typical representation of sand for physics simulation purposes (like a pile, dune, or terrain). It looks more like a low-quality texture swatch.\"\n    }\n  },\n  \"916bb72e67a44e2a801a3616d1ccf24f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It shows abstract shapes and a box.\"\n    }\n  },\n  \"91d4e86ef8e44b658c0d84fae6797877\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a structure made of sand on sandy terrain, which falls under the requested class definitions (sand, sandy terrain, sand pile). The quality is good, and simulating the behavior of sand structures is relevant for physics engines.\"\n    }\n  },\n  \"9305be30b2d842e2b8e2f754367cfc64\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sandal, not sand or any related concept like beach sand, desert sand, sand dune, etc.\"\n    }\n  },\n  \"93ec03090e5a4444b06a9ff04efd374b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (island, trees, water, sphere) rather than focusing solely on sand or a sandy terrain. The sand is only a small part of a larger composite scene.\"\n    }\n  },\n  \"93ff1aacf8d3432e902581a2388f111b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single solid object, possibly a rock or piece of dried mud/concrete, rather than sand, which is a granular material. This object does not represent the characteristics or physics of sand (e.g., piles, dunes, flow).\"\n    }\n  },\n  \"95505ba621e24eef9548067cb7d8bead\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict sand or any related object.\"\n    }\n  },\n  \"96011426ccfe40a7aeb6c06e1e7a0a86\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone-like pedestal or structure with carvings, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"9689917d29db49fca2b0953e4adfcb24\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large skull object in addition to the sand, which violates the requirement for depicting cleanly one single object class.\"\n    }\n  },\n  \"981b5b1e28a34fa0a006d5e969c965f0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pile of rocks, not sand or any related sandy terrain.\"\n    }\n  },\n  \"9831b1d119a84e0f85e1901c3449a623\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, rock-like or metallic object, not sand or anything related to the 'sand' class (e.g., sand pile, sand dune, sand texture).\"\n    }\n  },\n  \"98c0065834cb46b6a8c22021e9f38c0f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blocky, pixelated cube structure. While the color resembles sand, the form does not represent any natural formation of sand (like dunes, piles, or texture) and is unsuitable for learning the physical properties of granular sand.\"\n    }\n  },\n  \"98cc409f9c344f38a56cf72306a70d1d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a green, lumpy material that does not resemble sand or any of the related terms provided. The color and texture are incorrect for the 'sand' class.\"\n    }\n  },\n  \"99128cb5aa53478c9d34a268e85cdee6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model of a landscape fragment containing buildings, trees, and roads. It does not clearly depict sand or any of the related terms like sandy terrain, sand dune, etc. The primary focus is not on sand.\"\n    }\n  },\n  \"99808061ac9c437598136098a274754e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid cylindrical object, possibly made of stone or compacted earth blocks, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"99e947e9a01343579bb4a2bf310f4cb1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of sand, but it also contains other distinct objects (a rock-like object in the center with a red spot, and small orange debris) which violates the requirement for depicting cleanly one single object class.\"\n    }\n  },\n  \"9a78a3c2c19e47d8aee0c98211d5b6af\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an object that does not resemble sand or any related term like sand dune, sand pile, or sand texture. It appears to be some kind of fabric object or container with a logo.\"\n    }\n  },\n  \"9b9181b83fda4b04aa19048024826971\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crushed soda can with other objects, not sand or any related item from the specified class list.\"\n    }\n  },\n  \"9c81d4bb4df44769bfa4431e08f4af09\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image prominently features a house, not just sand. We need images focused solely on the requested object class (sand).\"\n    }\n  },\n  \"9dadd416a0c6439fadd30ec56dceb97f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (palm tree, chair, lifebuoy, water, shark fin) in addition to the sand island. We need images focusing primarily on the sand itself.\"\n    }\n  },\n  \"9ddd118e8caf4933942fa320523864cf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground that looks more like rocky soil, gravel, or debris rather than clearly identifiable sand. It also contains a piece of wood, violating the single object principle for this class.\"\n    }\n  },\n  \"9e5bf5a45eb84afe896ffdcd7af348ac\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pair of shoes, which does not belong to the 'sand' class.\"\n    }\n  },\n  \"9e76c37cb9fa453ebce0448a005167a3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character model (Hellboy), not sand or any related concept like sand dunes, beaches, or textures.\"\n    }\n  },\n  \"9f5f5db63cb544baab09d0b4ba8126e8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid-looking object that resembles a rock or a clump of solidified earth/mud more than it resembles loose sand, a sand pile, or a sand dune. The texture is ambiguous and doesn't clearly represent the granular nature typically associated with sand relevant for physics simulation.\"\n    }\n  },\n  \"9fa4f50b845f4ecd96c88dcca941db05\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandal, not sand or any related object like a sand dune, sand pile, or sand texture.\"\n    }\n  },\n  \"a04ecda2859a4e72893681ac5a1674f1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, almost 2D object that is unrecognizable as sand or any related concept like a dune, pile, or texture. It appears to be a rendering artifact or an extremely thin slice of an object viewed edge-on, making it unsuitable for representing sand for physics simulation.\"\n    }\n  },\n  \"a161d0a9e7a34c89891946de8c5999f0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts gravel or pebbles, not sand. The texture is too coarse and does not match the requested class.\"\n    }\n  },\n  \"a1a3d573af3749d1b9918c20fd0ad596\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what looks more like wet mud or soil rather than clearly identifiable sand. There are also white patches that could be snow or ice, further confusing the material type. It does not clearly represent any of the specified sand categories.\"\n    }\n  },\n  \"a2bb5388c255454d9eaab4365d7e3663\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a highly stylized, blocky representation of sand (like from Minecraft), not a realistic depiction suitable for learning real-world physics properties like granular flow.\"\n    }\n  },\n  \"a304f4322345411aa44d9e05265f7351\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of blocky objects, which does not resemble any form of sand (like dunes, piles, texture, or terrain). It looks more like stylized hay bales or sandbags.\"\n    }\n  },\n  \"a3488f6c95564592b3d32996434f2640\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky formation or a mound of compacted earth, not clearly identifiable as sand or sandy terrain. It lacks the characteristic grainy texture associated with sand.\"\n    }\n  },\n  \"a411e12291bc428992e736626a4be19e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not sand or any related object like a sand dune, sandpit, or sand texture.\"\n    }\n  },\n  \"a419173a9fb84bcc9d60bfffecc7b4c2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not sand or any related object from the specified class list.\"\n    }\n  },\n  \"a427139220a64fad83f4cdb729e9b02b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character model, not sand or any related object like sand dunes, sand piles, or sandy terrain.\"\n    }\n  },\n  \"a5ea125e9d534b54a3185f349da6aabd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows sandbags arranged in a wall structure, not sand in a natural form like a pile, dune, or beach. While sandbags contain sand, the object itself is distinct and would have different physical properties for simulation compared to loose sand.\"\n    }\n  },\n  \"a640202c661b489a92135506aacb3158\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex, sculpted object with multiple colors (blue, white, red) alongside a sand-like texture. It does not clearly represent 'sand' or related concepts like dunes, piles, or terrain. It looks more like a piece of art or a map fragment, not suitable for learning the physical properties of sand.\"\n    }\n  },\n  \"a6bf9153e7054acbb30dece38cc18892\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a green cylindrical object, which does not belong to the 'sand' class or any of its variations (beach sand, desert sand, sand dune, etc.).\"\n    }\n  },\n  \"a8a16abf53bc4f9fa64cc4de3bbb3955\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building and grass, not sand or any related object like a sand dune or sandpit.\"\n    }\n  },\n  \"a8d13b66b4a748e08aab5e5ab907cc06\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sand texture, which is relevant to the requested class. The quality is good, and it represents a material suitable for physics simulation (e.g., terrain interaction).\"\n    }\n  },\n  \"a92bb2112b56419f835b77fd051ddfc2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a red cartoon figure, not sand or any related object like a sand dune, sand pile, or sandy terrain.\"\n    }\n  },\n  \"a9505c7e3f5140bea164c67f2a19e81a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related concept like dunes, piles, or textures. The object shown looks more like a shard of ice or thin material, not sand.\"\n    }\n  },\n  \"ab61d52c190e4ee4808316e00ddd2c65\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making it difficult to discern any details of the sand. Additionally, it contains multiple other objects (palm tree, beach chair, beach ball) which distract from the intended subject (sand).\"\n    }\n  },\n  \"ac22504927744b5f942d437f077d4cdf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground that looks more like wet mud or compacted earth rather than clearly identifiable sand (like beach sand, desert sand, or a sand dune). It doesn't represent the typical characteristics of sand needed for physics simulation.\"\n    }\n  },\n  \"ad025b657f9a4fc7a1ab390d346d1f7d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model with a default UV checker texture, not sand or any related object.\"\n    }\n  },\n  \"ad5463064a6947d48552aefa121d000a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern any texture or detail. It does not resemble sand or any related object from the provided list.\"\n    }\n  },\n  \"ad5774492b48448f8dd47f39c6330630\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a low-resolution texture of a large desert area mapped onto a simple 3D plane. It represents sandy terrain at a very large scale and lacks the detail needed to infer the physical properties of sand itself for simulation purposes (e.g., granular behaviour, texture). It looks more like a map tile than a representation of sand as a material.\"\n    }\n  },\n  \"ae434be96e844550a75270ba6c58fa82\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a solid, flat block with a texture applied, rather than representing sand as a granular material (like a pile, dune, or even just loose sand). It looks more like cracked earth or a solid surface with a sand-like texture. Additionally, there is a small human figure present, violating the single object rule.\"\n    }\n  },\n  \"b077d7e622fa4be99420beea394e6e50\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict sand or any related object. The few visible shapes are indistinct and lack the texture or form associated with sand.\"\n    }\n  },\n  \"b0fb3f4ec6d643b9b468cc7724b17f85\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a sandcastle, which is a structure made of sand, not sand itself in a more natural or basic form like a pile, dune, or terrain. While related, it doesn't represent the fundamental material 'sand' for physics simulation purposes as well as other forms would.\"\n    }\n  },\n  \"b16c8561f3564d89a89ea11af3cfc394\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a framed scene, possibly a diorama or game board, containing sand along with other distinct objects (blue blocks, reddish patches). It does not cleanly depict *only* sand or a sandbox/sandpit as required, but rather a composite scene.\"\n    }\n  },\n  \"b1a2253e13fb459bb0652857872415d4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock formation/cliff, not sand. While there might be a small sandy patch at the bottom, it is not the main focus of the object.\"\n    }\n  },\n  \"b22df09fd40c4c17aad33f65b3e310a0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene with multiple objects (buildings, trees) on sandy terrain, not just sand or a sand feature itself. We need images focused solely on the sand material/object.\"\n    }\n  },\n  \"b26cd63a17d345e29b5c7082dfba1f06\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a 3D model of a character or figure, not sand or any related concept like a sand dune, beach, or sand texture.\"\n    }\n  },\n  \"b2782b3f9b484edcbd04e0d1baa9adc2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox, which is listed in the accepted object types ('sand box', 'sandpit'). The image quality is good. While there are small toys present, the primary object is the sandbox containing sand, and these additions are contextually relevant, similar to the flower/vase example provided in the instructions.\"\n    }\n  },\n  \"b4e8db533dcf49e9ae90b4d76aaec69b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely black and does not depict any object, let alone sand.\"\n    }\n  },\n  \"b4ea7f90b7b94c538a7ae712e6f3c1f3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any object, let alone identify it as sand or related items. The quality is far too low for training purposes.\"\n    }\n  },\n  \"b518305314704634828a0e4f81a18f69\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts fragmented rocks or stones, not sand or any sandy terrain/texture. The object shown is clearly not representative of the 'sand' class.\"\n    }\n  },\n  \"b5624062e3e14925b4e98a2c9d22a6b1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a trash bin, not sand or any related object like a sand dune, sandpit, or sand texture.\"\n    }\n  },\n  \"b6a63acf699d4917924c1c3bec5d6cbf\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a house, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"b6f6b255971d4b91bb708e406671535a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single rock or clod of earth, not sand or a sandy formation like a dune or pile. It does not fit the requested class 'sand'.\"\n    }\n  },\n  \"b83d80450c484732b15bd128c7fc7fef\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rocky, possibly snow-covered terrain section, not sand or sandy terrain.\"\n    }\n  },\n  \"b99d83f084fd48aa84c32571f4a14844\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structured object, possibly made of stone and wood/metal, not sand or any sandy terrain.\"\n    }\n  },\n  \"bacc0cab163c47969b4808272dfbc550\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, fitting the requested class. The quality is acceptable, and it represents a material relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"bbc6b900e5114844b200789ebd5bc9da\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandcastle on a patch of sand, which falls under the requested 'sand' class variations (sand, beach sand). Although there are small toys present, the primary focus is the sand structure, which is relevant for physics simulation (e.g., collapse dynamics). The image quality is adequate.\"\n    }\n  },\n  \"bbd838e65d04408e953b1a35248e7dd8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D floor plan of a building, not sand or any related object like a sand dune or sandpit.\"\n    }\n  },\n  \"bbdb42dca3ef4a859cf9bea9a1321954\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture applied to the sphere does not resemble sand. It lacks the grainy quality and characteristic appearance of sand, sand dunes, or sandy terrain. The swirling pattern and scattered colored patches are unrealistic for sand.\"\n    }\n  },\n  \"bc2fe4e9b478494d98af1b241a6ff102\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an hourglass, which contains sand, but the primary object is the hourglass itself, not sand in the forms specified (e.g., sand pile, sand dune, sandy terrain, sand texture). We need images focusing solely on the sand material/object.\"\n    }\n  },\n  \"bca5f39fc72b45cd86452fcb1069d5fc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rock formation or cliff face, not sand or sandy terrain. It does not belong to the requested class.\"\n    }\n  },\n  \"be02d8cbc5f040089cc4b07849487b62\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict sand or any recognizable object related to the class. The quality is too low.\"\n    }\n  },\n  \"bea0cb112eaa45dba2f89073cea6c6ef\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a highly stylized, blocky representation of sand (likely from Minecraft). This does not represent the typical physical properties of sand (granular, flowing) needed for realistic physics simulation learning. It represents a specific game object's behavior rather than the material itself.\"\n    }\n  },\n  \"bee50cc724a640328020bf31be85e91d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a truck, which does not belong to the 'sand' class or any of its related terms.\"\n    }\n  },\n  \"c0388bd853194a338fd3d0f402f7ec6c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandbox containing sand, which falls under the requested classes ('sandpit', 'sand box', 'sand'). The sand material is visible and the image quality is good. This is suitable for learning sand physics.\"\n    }\n  },\n  \"c08e96c7f73147c9a8ba862b9c841036\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground that is very light, almost white, with some darker, possibly vegetative elements mixed in. It does not clearly resemble sand and could be mistaken for snow or another type of ground cover. It lacks the typical granular texture and color associated with sand.\"\n    }\n  },\n  \"c168128668984091aa8b924cb07592d2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a surface with a mixture of sand and numerous pebbles/small rocks. It does not clearly represent 'sand' as the primary component, looking more like gravel or a pebbly surface rather than sandy terrain.\"\n    }\n  },\n  \"c2208f5ccc004f1681d27de67fe75799\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rock formations, not sand or sandy terrain as defined by the class list. Sand implies granular material, which these solid rock structures are not.\"\n    }\n  },\n  \"c23473740a5e4d7dbb184d9902ae799f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large building, not sand. While there might be a sandy texture at the base, it's not the focus and doesn't clearly represent any of the specified sand types.\"\n    }\n  },\n  \"c481bfe337e74a7bb553486ab4c663fc\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (rocks, a pillar) in addition to the sandy terrain. We need images focusing primarily on the sand itself.\"\n    }\n  },\n  \"c4fdf903d91d42f3b456efa4b9e07eca\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a composite scene (an island) containing sand, a rock, a palm tree, and water, not just sand itself. We need images focusing solely on the sand object/material.\"\n    }\n  },\n  \"c57b0c6c51bd4db6b908d9c7edd5d1f6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a street sign and pavement, not sand or any related sandy terrain.\"\n    }\n  },\n  \"c5977af5b0c744dab5ee46ff473892e7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a statue and its base placed on a sandy/rocky terrain. It does not depict sand as the primary object, but rather includes other distinct objects.\"\n    }\n  },\n  \"c5fcf8e9f37e4db9aa75d857f1adcf56\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain with a crater, which falls under the 'sandy terrain' or 'desert sand' categories. The quality is good, and terrain like this is often used in physics simulations (e.g., impacts, deformation).\"\n    }\n  },\n  \"c64855d8215149e0a3f7112201837f23\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional, unrelated object (a pink star) within the main structure. Also, the texture looks more like rock or clay than sand.\"\n    }\n  },\n  \"c66e74567d5342e4a25c2cc595df97f4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building structure, possibly made of sandstone or sand-colored blocks, not sand itself in a form relevant for physics simulation (like a pile, dune, or terrain patch). We need images of sand as a material, not structures built from sand-like materials.\"\n    }\n  },\n  \"c75f303503564945b5d2575775cf80be\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object. It shows an abstract, unrelated object.\"\n    }\n  },\n  \"c7b8df3fed654bd19b863b897f8e13ba\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a green textured surface that does not resemble sand in color or texture. It looks more like stylized grass or mossy terrain.\"\n    }\n  },\n  \"c7bbaf0e5c5a425fbbe0a9d76820bf09\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the specified class list. The quality is acceptable for training purposes and represents a surface relevant for physics simulation (e.g., ground interaction).\"\n    }\n  },\n  \"c80ba5e17413467c8e021ccfb830e1af\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related sandy terrain. It shows cobblestone, a tree stump, and a patch of green texture (possibly grass or moss).\"\n    }\n  },\n  \"c88ba272b72e4800b9e36e34f1ebc60e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid red block, which does not represent sand or any related concepts like sand dunes, sandpits, or sand texture. It is completely unrelated to the target class.\"\n    }\n  },\n  \"c8b35d665a0a44a5a55c005e0c4ca9f7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vehicle, not sand or any related sandy environment/object.\"\n    }\n  },\n  \"c8d4f9d79b7d4df7b16bdab03c3fc608\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a robot or mech figure, which does not belong to the 'sand' class or any of its related terms (beach sand, desert sand, sand dune, etc.).\"\n    }\n  },\n  \"c919d776c3ff46a49954928ebaedaaf1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere with a water or cloud texture, possibly a planet, not sand or any related object.\"\n    }\n  },\n  \"c9b5ef07047a4b7a90a4ffd6930ec22c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts sand, but it is heavily covered by seaweed/debris, which is not the primary object class requested. We need cleaner images focusing primarily on sand.\"\n    }\n  },\n  \"c9e6511f270140abb865f53b7f961789\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block with a grooved, striped texture that does not resemble sand, sand dunes, sandy terrain, or any related concept. It looks more like a metal grate or corrugated material.\"\n    }\n  },\n  \"ca37b2a37380441d91bbdd54be53a40e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not sand or any related object like a sand dune, beach, or sandpit.\"\n    }\n  },\n  \"ca7eb1ec527540c1a4f084e656153ba0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a patch of terrain that is not clearly identifiable as sand; it looks more like mud or dark soil mixed with debris. Additionally, it contains multiple small, distinct objects (cones, bucket, flags) that are not part of the 'sand' class, violating the single object requirement.\"\n    }\n  },\n  \"ca9a1f384f4141b68c9d7567d9cd739c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows pebbles and rocks, not sand. The texture is too coarse to be considered sand.\"\n    }\n  },\n  \"cb96e8f5a0b743578665a06619dbeabe\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sand, which belongs to the specified class. The quality is acceptable, and it represents a material suitable for physics simulation.\"\n    }\n  },\n  \"cba16fcda2614105b6dc4e08d2d4d080\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sandal, not sand or any related concept like a sand dune, beach, or sandpit.\"\n    }\n  },\n  \"cc79ff537fa442d9b6d1e9e75382290e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sandcastle, which is a structure made of sand and falls under the requested class variations like 'sand pile' or 'sandy terrain'. The image quality is good, and while it includes a small shovel and stick, the primary object is the sand structure, which is relevant for physics simulations involving granular materials.\"\n    }\n  },\n  \"cc8503130f304ffc9a14a9a4738841fd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not sand or any related object like a sand dune, beach, or sand texture.\"\n    }\n  },\n  \"cceaa2c8a2f04e91953765e47790f02a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a piece of wood or rock, not sand or a sand formation. It does not fit the requested class 'sand'.\"\n    }\n  },\n  \"cd055c67cd304c97bf56ffa47d66672d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized, blocky shapes stacked on top of each other. This does not resemble sand, sand piles, sand dunes, or any form of sandy terrain. It looks more like stacked rocks or abstract blocks and is not representative of the class 'sand' for physics simulation purposes.\"\n    }\n  },\n  \"cd3a3d18fcf040a8815adc5210163341\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts sand within a sandbox, which falls under the specified classes ('sand', 'sand box', 'sandpit'). The image quality is good, and a sandbox is a relevant object for physics simulation involving sand.\"\n    }\n  },\n  \"cd5bca365a054eb98c472d80ecd66435\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pile of sand, which belongs to the requested class. The quality is good, and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"cd6689e6b3034be897761225dd44fa59\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts multiple rock formations sitting on small patches of sand, rather than focusing solely on sand or a sand formation (like a dune, pile, or texture). It contains too many other distinct objects (rocks) that are not the target class.\"\n    }\n  },\n  \"cd6ee12514d741179619495ca21cea0d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not any form of sand or sandy terrain.\"\n    }\n  },\n  \"ce09049b2a464c5cb9877a4ee194abd8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Lego vehicle, not sand or any related terrain/texture. It belongs to a completely different object class.\"\n    }\n  },\n  \"cec32623ef924351a6d58861aa0970cb\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object class. It shows boxes, cubes, and spheres.\"\n    }\n  },\n  \"cf043f903fbb4efca2680b5c9684e39c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid piece of rock or mineral, not sand or sandy terrain. Sand is typically represented as loose granular material, a pile, or a surface texture, none of which are shown here.\"\n    }\n  },\n  \"d01b6f328c9d4b419cc090d60f540352\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like ice, a glacier fragment, or a mineral formation rather than sand. The texture and color are inconsistent with any type of sand.\"\n    }\n  },\n  \"d0e50fa7f4204533a363cd14f486adba\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an hourglass, which contains sand, but the primary object is the hourglass structure itself, not the sand material or a sand formation (like a dune, pile, or texture) as specified in the class list.\"\n    }\n  },\n  \"d104370112984bca976f85a00adc45a1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large-scale terrain model, possibly a quarry or landscape, which contains various elements like rock formations, potential vegetation, water bodies, and a structure. It does not clearly represent 'sand' as the primary or sole object. We need images focused specifically on sand (e.g., dunes, piles, textures) to learn its physical properties.\"\n    }\n  },\n  \"d1b91b0aab91486e8bc2b3a77402005f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts muddy ground with bags stacked on pallets, not a clear representation of sand or sandy terrain as required by the class definition. The ground texture is not distinctly sandy, and the presence of other objects like bags and pallets dominates the scene.\"\n    }\n  },\n  \"d1f226d915b643848a2c08b426d9f6b2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of landscape with grass, rocks, and a road, not primarily sand or sandy terrain. It does not clearly represent the target class 'sand'.\"\n    }\n  },\n  \"d200b776c544466986b4f2fdd067113e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid object that looks more like a rock or compacted earth rather than loose sand, a sand pile, or a sand dune. It does not fit the requested classes related to sand, especially considering the need for physics simulation where sand typically behaves as a granular material.\"\n    }\n  },\n  \"d23867ec43824beabf7881b0e0814273\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts sandy terrain, but it also prominently features a road or path made of a different material (asphalt/concrete). This violates the requirement of depicting cleanly ONE SINGLE OBJECT class (sand).\"\n    }\n  },\n  \"d333ebf8ead74697a1428bafdb97d26b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized rocks, not sand or sandy terrain. While these rocks might be found in a sandy environment, the object itself is rock, which has different physical properties than sand.\"\n    }\n  },\n  \"d3504289138c486f91da2d82a46749c3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (vehicle, rocks, barrels) in addition to the sandy terrain. We need images that depict primarily the sand or sandy terrain itself.\"\n    }\n  },\n  \"d362d57152f84e339fa49eb2b5f5c06c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a solid, rock-like object, possibly compacted sand or sandstone, rather than loose sand, a sand pile, or a dune. It doesn't clearly represent the 'sand' class in a way that would be typical for physics simulation of granular material.\"\n    }\n  },\n  \"d37fd30040ac4d1a88b82cf5851f72bd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dragon, which does not belong to the 'sand' class.\"\n    }\n  },\n  \"d3b4f09e1467400f8d3c4d70061ab97a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground that looks more like dirt or mud mixed with rocks, rather than clearly representing sand, beach sand, desert sand, or a sand dune/pile.\"\n    }\n  },\n  \"d491e5f026234eaea7b3a36fd48da21b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the requested class list. The quality is adequate for training purposes and it represents a single concept relevant to physics simulation (e.g., interaction with a surface).\"\n    }\n  },\n  \"d4f8deb6dea647f6898837cf6d1b4b60\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts sandy terrain, which falls under the specified class list (desert sand, sandy terrain). The quality is good, and it represents a type of environment where sand physics would be relevant in a game.\"\n    }\n  },\n  \"d6b5793fb2004019a49dc30822357952\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a textured surface that can be interpreted as stylized sandy terrain or sand dunes/ripples. While not photorealistic, it represents a type of ground surface relevant to the 'sand' class and is suitable for physics simulation purposes as a terrain type.\"\n    }\n  },\n  \"d7b86332813f4c89aec4a10f1517dcac\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a strip of sand, consistent with 'beach sand' or 'sandy terrain'. The quality is good, and it represents a material relevant for physics simulation (e.g., interaction with water, deformation).\"\n    }\n  },\n  \"d8302e5316a144a19cd4d65694e4092e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains many abstract, blocky structures that are not sand. The yellow surface could potentially represent sand, but it's very stylized, lacks texture, and the overall scene does not clearly depict any object from the 'sand' class list (like dunes, piles, beaches, etc.). The focus is not on the sand material itself.\"\n    }\n  },\n  \"d8b36dd30e854ffdb968a2151f43b54a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows several cubes with different textures (wood, black, stone/concrete-like), none of which represent sand or sandy terrain. It does not depict the requested object class.\"\n    }\n  },\n  \"d8c450e049fe40b29e9d7e2d8872d2ab\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized block of sand, but it also includes other distinct objects (pixelated bones/skeleton) on top, violating the requirement for a clean depiction of a single object class.\"\n    }\n  },\n  \"d8c7c59079c649bfb96ab31afa919378\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a piece of sandy terrain, which falls under the requested classes. The quality is good, and it represents a single object (a terrain chunk) suitable for physics simulation purposes.\"\n    }\n  },\n  \"d8e2339c9632476bbf0439a6cfedc218\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a skate ramp or structure, not sand or any related concept like dunes, beaches, or sandpits.\"\n    }\n  },\n  \"d90a04c6708747d39d719f797fc793d1\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large rock formation sitting on a sandy surface. The focus is not on the sand itself, which is the target class. We need images where sand (dune, pile, texture, terrain) is the main subject.\"\n    }\n  },\n  \"d944d9c8bd604a7690a6a6b094f64298\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very small, fragmented, and distorted piece of a 3D model. It does not clearly depict any recognizable object from the 'sand' class (like a dune, pile, or distinct terrain patch). It appears to be a low-quality artifact or broken mesh, unsuitable for training.\"\n    }\n  },\n  \"d97e762d7f5a42d7af2dcc83628fb38c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a 3D model of a rocky terrain or canyon, not primarily sand, sand dunes, or sandy terrain as required by the class definition. While it might be found in a desert environment, the dominant feature is rock/earth formations, not sand itself.\"\n    }\n  },\n  \"da0abb659bc140fa9836f90f2773383d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rocky terrain formation rather than clearly representing sand, a sand pile, or a sand dune. The texture is ambiguous and the overall shape suggests solid rock more than granular sand suitable for physics simulation.\"\n    }\n  },\n  \"da0d254ea1dd47478a3a88ff1c24c302\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts the sky, not sand or any related sandy terrain.\"\n    }\n  },\n  \"da63ec17aa0541cba3f319a2ace6acb5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock or boulder, not sand or any of the related classes like sand dune, sand pile, beach sand, etc.\"\n    }\n  },\n  \"dab36094d5aa4a6296a9044fd2770267\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a smooth, abstract blue shape that does not resemble sand, sand dunes, sand piles, or any related concept. It lacks the characteristic granular texture of sand.\"\n    }\n  },\n  \"dabe5d2b39ea45c890d37a46ab288edd\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of terrain that appears to be a mix of sand and rock, rather than clearly representing sand, a sand dune, or a sand pile. It looks like a fragment of a larger landscape model and doesn't isolate the 'sand' object well enough for training specific material properties.\"\n    }\n  },\n  \"dace3d12197f4f3ab69ac1ff07338839\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict sand or any object.\"\n    }\n  },\n  \"db4f0853c545455082255df6ad60778f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sandcastle, which is a specific structure made of sand, not just sand itself. It also includes non-sand elements (flags). This does not fit the requested classes like 'sand', 'sand pile', 'sand dune', or 'sand texture'.\"\n    }\n  },\n  \"dbb4736fff1f404398ddc6a0e03d91ae\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a building structure, possibly made of sandstone blocks, not sand itself in its granular form (like a pile, dune, beach, or texture) as requested by the class list.\"\n    }\n  },\n  \"dbecacd8b03c409d9b8d638648ef2aa6\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pile of rocks or gravel on a grassy surface, not sand or any related sandy terrain as requested by the class description.\"\n    }\n  },\n  \"dc012035359441c7b33f39f791f89d95\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a sandcastle, which is clearly made of sand and falls under the broader concept of the requested class. It's a relevant object for physics simulation (e.g., structural integrity, crumbling).\"\n    }\n  },\n  \"dc5fddf304f240438a5db2d1e224b526\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a metal crate, not sand or any related concept like beach, desert, dune, etc.\"\n    }\n  },\n  \"dc6cd441196542d1a8deff14ac05b80c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a prominent plant growing out of the sand, violating the requirement to depict only a single object class (sand).\"\n    }\n  },\n  \"dd3c5cc0df3d4f61a046296404dae386\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone sand.\"\n    }\n  },\n  \"df4c61bbdec048a79b8924f5c0983f8a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a simple, flat, beige elliptical shape. It lacks any texture or form characteristic of sand, sand dunes, sand piles, or sandy terrain. It does not resemble any object in the specified class list.\"\n    }\n  },\n  \"dfd1dccefe764bf1b448ecb8124cdf16\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts rocky ground with some vegetation, not clearly representing the 'sand' class. It looks more like gravel or dirt mixed with rocks and moss/grass.\"\n    }\n  },\n  \"e03d10a3ba66421c9c2df3ac165e73a3\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, and it's difficult to clearly identify the object as belonging to the 'sand' class. It appears as a fragmented, low-resolution strip of terrain, not a well-defined object suitable for training.\"\n    }\n  },\n  \"e09ad65c175149b986c98753677606be\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily distorted and does not clearly depict sand or any recognizable object. It appears to be a rendering artifact or a severely corrupted texture.\"\n    }\n  },\n  \"e155f482613348e78efe6cbd87f6c236\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden cabinet or shelf, not sand or any related object from the specified class list.\"\n    }\n  },\n  \"e267b67bb983452fb12cbd3d0478a8ae\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related concept. It shows some small, indistinct white objects that resemble pills or pebbles, not sand grains or a sandy surface. Additionally, the image is extremely bright and lacks detail.\"\n    }\n  },\n  \"e36863997d8c459aa4f30da9ee650a8b\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a soldier, not sand or any related object like a sand dune, sandpit, or sand texture.\"\n    }\n  },\n  \"e53238bf00ba4b40adad7356403aa255\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a rock formation on a surface. The surface texture itself does not clearly resemble sand; it has a metallic or icy appearance rather than grainy sand. Therefore, it does not clearly represent the 'sand' class.\"\n    }\n  },\n  \"e5483874a8ad422ebf26a6d03e2b9832\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (pillars, wall) placed on a sand-textured base, rather than focusing solely on the sand itself as the primary object (e.g., a dune, pile, or texture).\"\n    }\n  },\n  \"e8377f4d4bb5431bad2310d66727b179\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a pile of rocks or gravel, not sand. While there is some ground material underneath, it is not the main focus and doesn't clearly represent the 'sand' class.\"\n    }\n  },\n  \"e97baf55224f4388a067e78d556db4ef\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of terrain that is not clearly identifiable as sand. It appears to be a mix of rock, earth, or possibly dried mud, rather than predominantly sandy terrain, a sand dune, or a pile of sand.\"\n    }\n  },\n  \"eb6b24a04d4c4a8e9183cd916f73aad0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a piece of sandy terrain or a section of a sand dune, which falls under the specified classes. The quality is adequate, and it represents a form of sand relevant for physics simulation in a game environment (e.g., terrain deformation, interaction with objects).\"\n    }\n  },\n  \"ebb007faf9d748a184c93dec82917440\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object, let alone sand or related concepts. The quality is too low for training.\"\n    }\n  },\n  \"ebd539f74b80436793519c16058c5535\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a 3D model of a castle, not sand or any related object like a sand dune, sand pile, or sandbox.\"\n    }\n  },\n  \"ebdc2c48baf2430cbcf676ca7dc33a6a\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a structure made of sand on sandy terrain, which falls under the requested classes. The quality is good, and it represents an object relevant for physics simulation (e.g., deformation of sand structures).\"\n    }\n  },\n  \"ebf1976c0edc4389b87487b525f759ca\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pyramid structure, not the material 'sand' itself. While pyramids are often found in deserts, the image focuses on the building, not the sandy terrain, sand dunes, or sand texture needed for the class.\"\n    }\n  },\n  \"ec5be55ecdd14632ba8e58bcc55b1a3f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a maze, not sand or any related concept like a sand dune, sandpit, or sandy terrain.\"\n    }\n  },\n  \"ecb3b89356874d73ba449f6c0bf59cf7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, almost completely white, making the object in the center barely visible and impossible to identify clearly as sand or any related object. The quality is too low for training purposes.\"\n    }\n  },\n  \"ee170254bc7c40ee8029132138cfc511\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The texture includes significant non-sand elements (looks like petals or leaves) mixed in, and has an imprinted pattern, making it not a clean representation of sand material.\"\n    }\n  },\n  \"eee597426c034fe6a91e4f3cd74eb635\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the 'sand' class. The quality is good and it represents a single material relevant for physics simulation.\"\n    }\n  },\n  \"ef01f221f0f4427f9765449a4a993bf5\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, artificial structure, not sand in any recognizable form (like a dune, pile, beach, or texture).\"\n    }\n  },\n  \"ef377acc61ba419b968d666682241c1c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict sand or any of its variations. The texture and coloration resemble a rock, mineral, or possibly biological material more than sand.\"\n    }\n  },\n  \"ef40c64763014af88da1a17f97b40f6c\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict 'sand' or any related concepts like dunes, piles, or sandy terrain. It looks more like a cross-section of a rocky cliff or terrain, and the presentation with the attached block is unclear.\"\n    }\n  },\n  \"ef9544134c8d4be0bd9cfef86374f7c9\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a small, isolated fragment that vaguely resembles sand or sandstone, but it does not clearly depict any recognizable form of sand like a dune, pile, beach, or even a distinct texture patch. It's too abstract and small to be useful for representing the 'sand' class, especially for physics simulation purposes where sand is usually treated as terrain or granular material.\"\n    }\n  },\n  \"ef96e10f1702493f8db71b920b1b8a44\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks any discernible texture or detail, making it impossible to identify as sand or any related object. It appears as a mostly white shape on a white background.\"\n    }\n  },\n  \"efe362b096804860810e6146aa17c4de\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large-scale terrain model including mountains and other features, not just sand. While it contains sandy areas (possibly dunes), it doesn't focus solely on the sand material itself, making it less suitable for learning specific physics parameters for sand simulation. It represents a landscape rather than a distinct sand object or texture.\"\n    }\n  },\n  \"f035cae4f7a4498bb073d3ea565336a7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large piece of driftwood or a tree stump in addition to the sand, violating the requirement to depict cleanly one single object class (sand).\"\n    }\n  },\n  \"f0ac3957a41043f4a24c5f250644da28\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, rock-like object, not sand or any of its related forms (like dunes, piles, or textures). Sand is granular, and this object does not represent that characteristic, making it unsuitable for the class and for physics simulation of sand.\"\n    }\n  },\n  \"f0bb051a3d6448398c5e9eec31c1ab8e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation, not sand or any related sandy terrain/object as specified in the class list.\"\n    }\n  },\n  \"f127dfb3c74244c692b40937aaf1a7c0\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of sandy terrain, which falls under the specified class 'sand' and its variations. The quality is good, and it represents a material relevant for physics simulation (e.g., ground surface).\"\n    }\n  },\n  \"f35b8eb1e72f42699ec34069489ac654\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a complex environment or level layout with multiple elements (rocks, structures, terrain), not just sand or a specific sandy object like a dune or pile. It's not suitable for isolating the physical properties of sand.\"\n    }\n  },\n  \"f3a88e73b78c4696a9a0f8e34a428901\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a low-polygon object that resembles a hat (possibly a cowboy hat or fedora) with a band, not sand, a sand pile, sand dune, or any related concept.\"\n    }\n  },\n  \"f47e2aed38ec430dbc0c5bb156289732\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a highly stylized, blocky representation that does not clearly depict sand or its typical texture/form. It looks more like a generic voxel terrain piece colored beige, which is not suitable for learning realistic sand physics.\"\n    }\n  },\n  \"f5d237705357479b9f9f7f3f820368c7\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image primarily depicts a sculpture, although it is placed on a sandy base and might be made of a sand-like material. It does not cleanly represent 'sand' as a terrain, pile, dune, or texture, and violates the 'single object' guideline as it features both the sculpture and the sand base distinctly.\"\n    }\n  },\n  \"f6bb3efb4f274e49b821ba8edc923831\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere with a wood texture, not sand or any related concept.\"\n    }\n  },\n  \"f7a959d27d3a4bfb92d68ad13aea5eee\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a distorted, flat plane with a texture that does not resemble sand. It looks more like a fragment of a low-resolution ground texture or possibly metal foil. It does not clearly depict any object from the 'sand' class and is unsuitable for training.\"\n    }\n  },\n  \"f882c34269f54657b761e69cd18fd242\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it very difficult to discern the texture or confirm that it represents sand. It looks more like snow or ice due to the brightness and lack of typical sand coloration/texture.\"\n    }\n  },\n  \"f89adeaccd274a25ab92bfb6d5a78f4e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object or texture, therefore it does not show sand.\"\n    }\n  },\n  \"f96f9a051dd5438380ab799bba7a76e2\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a significant amount of rocks mixed with the sand, making it not a clean representation of the 'sand' class. The rocks are too prominent.\"\n    }\n  },\n  \"fb2de7083db84046b16f3a4131ed498e\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict sand or any related concept (like a dune, pile, or texture). It looks more like a thin shard or piece of torn material, not suitable for representing sand for physics simulation.\"\n    }\n  },\n  \"fb68228bdbcb4c499430a2f3ede3d722\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object like a dune, pile, or texture. It appears to be a different, solid object, possibly a stylized wall segment or piece of wood.\"\n    }\n  },\n  \"fbc6903540be4f2081258af428d10b64\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a green surface, possibly grass or turf, with a small object on it. It does not resemble sand or any related sandy terrain.\"\n    }\n  },\n  \"fc1ba456dd3a43e8a49ac428a781f0a8\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts patches of sandy terrain or sand texture, which falls under the requested class. The quality is adequate, and it represents a material relevant for physics simulation.\"\n    }\n  },\n  \"fdd6f27663c049638afbbe30f9e9c93d\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block with two different textures, neither of which clearly or convincingly represents sand or sandy terrain. It looks more like a generic material block rather than a specific sand object like a dune, pile, or texture patch suitable for physics simulation.\"\n    }\n  },\n  \"fe19aee8cbfc44d68f2af6cd39eb0b72\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict sand or any related object from the specified class list. It appears to be an untextured 3D model of a strap or belt.\"\n    }\n  },\n  \"fe53ffba425a4c93853944522351a80f\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mix of sandy terrain and what appears to be rock or a cliff face. It does not cleanly represent only sand or sandy terrain, and the quality/resolution is somewhat low.\"\n    }\n  },\n  \"ff03ddcd2bbb44b8897c86e54ef913e4\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blocky, voxel-style cube. While it might represent 'dirt' or 'earth' in a specific game style, it does not clearly depict 'sand' with its characteristic granular texture or common forms (dunes, piles, beaches). It's not representative of the general concept of sand needed for training.\"\n    }\n  },\n  \"ffa1d1b7609d4078a5efddc005ec1089\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a lamp or light box, not sand or any related sandy terrain/object.\"\n    }\n  },\n  \"ffdfe8ccf41e4ed5b6135665a7efca56\": {\n    \"obj_class\": \"sand\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a large cylindrical object which looks like rock or concrete, not sand. The ground texture is also not clearly identifiable as sand; it looks more like rough, rocky terrain or dried mud.\"\n    }\n  },\n  \"010358568d0544e295126d73c9066a7b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three stacked fruits) instead of a single object as required.\"\n    }\n  },\n  \"02063b21b136423ebd03471ed875b23d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a squeezed/used half of a citrus fruit, not a whole, fresh fruit. This state might not be ideal for learning the general physical properties (like density, elasticity) of the fruit class for physics simulation.\"\n    }\n  },\n  \"0224d9084cf94596b514a64800382454\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty basket. While 'fruit basket' is listed as a related term, this image does not contain any fruit, and therefore does not clearly depict an object from the 'fruit' class or its direct examples.\"\n    }\n  },\n  \"0238adfcca3e4727b9c36eba3a9eb7cb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and looks more like a pencil than any type of fruit, despite the yellow color potentially suggesting a banana. It does not clearly depict the object class 'fruit'.\"\n    }\n  },\n  \"02ae824805cf44bba70ff98fae77cf4d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a market stall with multiple types of produce, not a single fruit object. It violates the requirement of depicting cleanly ONE SINGLE OBJECT from the specified class list.\"\n    }\n  },\n  \"03b7e92ec16948959169b42e436ebe81\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0450b57c682d4454b3beb2f8724a73f5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single peach, which belongs to the 'fruit' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"05cda3ae3dce4f9ba100fc212a44a89e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is too small and faint to be clearly identified as belonging to the fruit class. The quality is too low for training.\"\n    }\n  },\n  \"06d4d493dc5f4c89a73db2b7c1c9e210\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a market stall or cart, which contains fruit (apples), but the main object is the stall itself, not just the fruit or a simple fruit container like a bowl or basket. We need images focusing solely on the fruit or fruit in simple containers.\"\n    }\n  },\n  \"06f914b6b3f14eed814013cdd97d7a51\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct fruit objects (strawberry, grapes, orange, apple, cherries, watermelon) rather than a single object as requested.\"\n    }\n  },\n  \"07daad87c7954896b5e51b0a39c205d9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to clearly identify the object. It does not appear to be any recognizable fruit.\"\n    }\n  },\n  \"07e7ee97643644c1be2cce6ee7c3871e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects beyond the fruit class, including a pitcher, a cloth, and a table. We need images depicting only a single object from the specified class (or a common arrangement like a fruit bowl/basket, which this also isn't strictly limited to).\"\n    }\n  },\n  \"08749fe049654b85a5ebf1079ff55a88\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"08a26ba669844f17a299a1eb368de04d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost completely washed out and unrecognizable. It does not clearly depict any fruit.\"\n    }\n  },\n  \"08d23f3cd9254e38a696060a962ebb7f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single orange, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"0972d93f991f456aa2662f2085110796\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (table, tablecloth, wine bottle) in addition to the fruit bowl, violating the requirement for depicting cleanly ONE SINGLE OBJECT or a reasonable collection like a fruit bowl/basket.\"\n    }\n  },\n  \"09a98293085e49688b2c7e7ef9c98b0b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image has significant rendering artifacts (jagged dark edges) around the object, making it appear low quality and poorly processed.\"\n    }\n  },\n  \"0a4272e070eb4626a90cab98f856ce2f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a cart or wagon, not a fruit. While there are some spherical objects inside that might be intended as fruit, they are not the main focus, lack detail, and the image contains multiple objects (cart, lantern, potential fruit) rather than a single object from the specified class list.\"\n    }\n  },\n  \"0c31e751e8a0474b9609fc0f72e3a79a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The quality is acceptable for a 3D render, and it represents a single logical unit suitable for physics simulation.\"\n    }\n  },\n  \"0c7337fc86334435bd0a90263bf73d9c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (likely an orange or grapefruit) which belongs to the specified class list. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"0cbb98225b814aadafdffba55bd6c9fd\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0d293b5a3f00434a8edb779432ac0570\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"0db42e43c0fb4fe7a917513ae23266e1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sword, which does not belong to the 'fruit' class.\"\n    }\n  },\n  \"0f2103bd899d4f97b11dfa9c852bea48\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a type of fruit or seed pod (which botanically can be considered a fruit). The quality is good, and it fits within the broad category of 'fruit', potentially 'tropical fruit'. It is suitable for physics simulation.\"\n    }\n  },\n  \"0f3a8a8d256345a2ae48a7c315233877\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree (likely a cherry blossom tree), not a fruit. While cherry trees produce fruit, the image itself does not depict the fruit class requested.\"\n    }\n  },\n  \"0f93f671ef874e378591842a84a9eaa6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit basket filled with apples, which falls under the specified 'fruit' class (specifically 'fruit basket' and 'apple'). The image quality is good and suitable for training data. It represents an object that could reasonably be used in physics simulations within a game.\"\n    }\n  },\n  \"10c0b346b17a4587bc95e38a4d9a579e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex scene (a fruit stand) with multiple types of fruits, crates, shelves, and other items, not a single fruit object or a simple fruit basket/bowl as required.\"\n    }\n  },\n  \"10e2aa83282c41f1b2be4f5d63e860da\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a juice carton, not a fruit itself. While juice is derived from fruit, the object shown is packaging and does not fit the requested 'fruit' class.\"\n    }\n  },\n  \"111a77ed1fcd4b1e922b3033c175cb41\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a grill, not fruit. The items on the skewers are abstract shapes and not clearly identifiable as any specific fruit. Additionally, it contains multiple objects (grill, skewers, abstract shapes) rather than a single fruit object.\"\n    }\n  },\n  \"1165679a690b44c4845ca4af6d0e50c6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"11be396039444798bb03151249ee430c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which falls under the specified classes ('fruit bowl', 'fruit', 'apple', 'banana'). The low-poly style is acceptable for diversity, and the image quality is good. A fruit bowl is a reasonable object for physics simulation in a game.\"\n    }\n  },\n  \"11d8e1e33f544e5d85d0c5a6b8e2f29a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (likely a type of citrus) against a clean background. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"147e2dbf27b142f6b4a85c77837ef02e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bottle of juice, not a fruit or any of the items listed in the 'fruit' class definition (like fruit bowl, fruit basket, etc.).\"\n    }\n  },\n  \"14d39bea13ae45c6ab1b429693a09eee\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple abstract shapes stacked together, which do not clearly depict any recognizable fruit. It violates the single object rule and the objects themselves are too abstract.\"\n    }\n  },\n  \"16aa280daffc4606aa332e731ec3b642\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor; it is significantly overexposed (too bright), making details hard to discern.\"\n    }\n  },\n  \"16bd3a49ab9744348af344ad93150182\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"1843dffc18474564bd2ce993c5b04f17\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a market stall or display stand, not any item belonging to the 'fruit' class.\"\n    }\n  },\n  \"184b343925de4af9bf5d9ed9fa5a7b98\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an object from an extreme side angle, making it impossible to identify. It does not clearly depict any recognizable fruit.\"\n    }\n  },\n  \"197785a17620486e9f5d8e5d07ad88f9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl with fruit, which falls under the specified classes ('fruit bowl', 'apple', 'banana', 'pear'). The quality is acceptable for a 3D render, and it represents a common object that could be used in physics simulations within a game.\"\n    }\n  },\n  \"198f2027842249ce9693ce7dab01b0ac\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a container, possibly a pill box, not a fruit or anything related to the fruit class.\"\n    }\n  },\n  \"19e6236a1f334717a06128e5c892be2f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the requested fruit class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"1aa94c9127004536a5f2b14f9743675b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pineapple, which belongs to the 'fruit' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1b43efb334f5470f8a7b4658aa51ed8b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not resemble any recognizable fruit. Its texture and color are unnatural for the 'fruit' class.\"\n    }\n  },\n  \"1bc5925b6a9c46bdb979a62c93cffbfc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit basket filled with strawberries, which falls under the specified classes ('fruit basket', 'strawberry'). The image quality is good and suitable for training. A fruit basket is a common object and relevant for physics simulation.\"\n    }\n  },\n  \"1c5abb0dd9424a829ea1e16f6a07fc7a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single mango, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"1eb5e450d152479fa4a6f16a7242ae54\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (pitcher, glass, table, tablecloth) in addition to the fruit (grapes, apple/lime). We need images depicting primarily a single object or a clear collection like a fruit bowl, not a complex still life scene.\"\n    }\n  },\n  \"1f5a007441124311a99d1f6156cb17f7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single blackberry, which belongs to the fruit class. The quality is good, and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"1fc702322dae488cb96cfe17d9e6db3d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality.\"\n    }\n  },\n  \"1fcdadf6a8bf4a008de9196896e3636d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the 'fruit' class. The image quality is good, and the object is isolated, making it suitable for training data. A dragon fruit is a plausible object for physics simulation in a game.\"\n    }\n  },\n  \"1fded760e20e465ba0e68762e9fcaa75\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a chocolate-covered banana on a stick, which is a prepared dessert rather than a plain fruit. While it contains a banana, the added elements (chocolate, sprinkles, stick) significantly alter its appearance and likely its physical properties compared to a standard fruit, making it less suitable for learning typical fruit physics.\"\n    }\n  },\n  \"20e8dfdb74c646539059771567dfd89e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts two bananas, which belong to the 'fruit' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"22ac4a0d914e49bd9f885c251d1a017f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"22dec6ba1a644228ae32b24ce2342273\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts human figures, not any type of fruit.\"\n    }\n  },\n  \"22ee727c9d8149078e7d4ad36eec7523\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"23428abd790b4df4b7506d653f563905\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single watermelon, which belongs to the fruit class. The quality is acceptable for training purposes, and a watermelon is a suitable object for physics simulation (e.g., dropping, rolling).\"\n    }\n  },\n  \"23862854452f40d3a957c20335dcdb0c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a highly distorted and fragmented view, making it impossible to clearly identify any object, let alone a specific fruit or fruit-related item. The quality is very low due to the rendering artifact/fragmentation.\"\n    }\n  },\n  \"23a95518111049cea598236aacb8611c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, appearing blurry and abstract. It also contains multiple objects/elements beyond the potential fruit (a surface and abstract shapes), making it unsuitable for training on a single object.\"\n    }\n  },\n  \"242faed7d2604c8a854055ab11872796\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a fruit bowl and a table), while the requirement is to depict only ONE SINGLE OBJECT from the specified class.\"\n    }\n  },\n  \"2464ac1432da47b29a2c60766e416f05\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple scattered objects, including what appear to be vegetables (leafy greens) mixed with fruits, and a bowl. It does not depict a single, clean fruit object or a standard fruit bowl/basket containing only fruits.\"\n    }\n  },\n  \"24fefce253dc485da154b6655bde8133\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two bananas, but the requirement is to depict only ONE SINGLE OBJECT per image.\"\n    }\n  },\n  \"272c283e7e2d48e898d2eb5a8e43815c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to identify any object, let alone a fruit.\"\n    }\n  },\n  \"273a3aa035784eacb89db08c1a0710bf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single object that resembles a fig, which is included in the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"275eb6c21a0a47b3a87829751a7e7721\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"28140fa8696743e39341bad4fd96f70b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object belonging to the 'fruit' class. The objects appear to be pieces of chocolate or wafers.\"\n    }\n  },\n  \"286b323160b3477589e93dfeca2d7145\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (an apple and cherries), whereas the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"28a73f7774f7455f9cb8c11f2beadc95\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"294157ca0d8348389862f45766765aa7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks detail, making it difficult to clearly identify the object as a specific fruit (like a banana). The quality is too low for the dataset.\"\n    }\n  },\n  \"294b5774d94141358a7b6b1708860dde\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single watermelon, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2b2d1ec0c18d455798d46cd02c8afa86\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2bb940dcf3d94d43b8c161cdd7d8ccbf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit (possibly an orange or peach) which belongs to the requested class. While low-polygon, it is recognizable and represents a single object suitable for the dataset.\"\n    }\n  },\n  \"2cbfe12a6e5e467781794f0c5479795c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, with significant rendering artifacts and poor clarity, making it difficult to clearly identify the objects. It does not meet the standard for high-quality training data.\"\n    }\n  },\n  \"2ce59930a269482b813dc013c0bd413c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (various fruits and vegetables like watermelon, tomatoes, avocado, carrot, peppers), violating the requirement for a single object per image.\"\n    }\n  },\n  \"2db704bf632746328cfe91d71e293479\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable and it's suitable for physics simulation training.\"\n    }\n  },\n  \"2eb66af869384273a5f533df64551a0b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts blueberries in a container, which falls under the 'fruit' class (specifically 'blueberry' and 'berries'). The quality is adequate, and this representation (fruit in a container) is acceptable, similar to the vase of flowers example. It is suitable for physics simulation.\"\n    }\n  },\n  \"2f976bceb8c147b48af795b55399bccb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and abstract (blocky, blue), making it difficult to recognize as a specific type of fruit from the provided list. While it has a stem and leaves, its overall appearance is too far removed from a realistic fruit for the intended purpose of learning physics parameters.\"\n    }\n  },\n  \"2fb3c8c315474a6caaccc63ec00d0536\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable for training, and a banana is a suitable object for physics simulation.\"\n    }\n  },\n  \"2fcaa1c882014dbc868519144189be89\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2ff5660c93a14b88b9aa607f63a8cf2c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of berries (likely blueberries), which belongs to the 'fruit' class. Although low-poly, the object is recognizable and the image quality is good. A cluster of berries can be considered a single object unit in this context and is suitable for physics simulation.\"\n    }\n  },\n  \"30444fb6cd624e9c8947d3c78cb8199e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of grapes, which belongs to the 'fruit' class. The quality is good, and it represents a single object suitable for physics simulation. The voxel style adds diversity.\"\n    }\n  },\n  \"3080da4917d94b4b81a914f94364d451\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a 'fruit bowl', which is listed as an acceptable object within the 'fruit' class. The image quality is good and suitable for training. While it contains multiple fruits and a bowl, it represents a single conceptual object ('fruit bowl') relevant for physics simulation (e.g., interaction, spilling).\"\n    }\n  },\n  \"30a614e79b2e4c9b8f2b50419cb47622\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts two slices of watermelon, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"30ad17d9af5b42f7ab0ebe9082b438b3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to identify the object. It does not appear to depict any fruit.\"\n    }\n  },\n  \"31a25f4eec454e04b54c7d4e6f942b96\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"31acda95fdaa4470b2621df3b9832fb7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a clear texture seam or discontinuity across the lower part of the fruit, indicating a potential issue with the 3D model's texture mapping, which makes it look unrealistic and low quality.\"\n    }\n  },\n  \"327864e696374d6cb1c55d541edd9b9d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a box containing items that are not clearly identifiable as fruit. It looks more like a box of chocolates or some other packaged food product, not suitable for the 'fruit' class.\"\n    }\n  },\n  \"330a644d41b5494cb9e1a126c49b31d5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct fruit objects (banana, pear, starfruit) rather than a single object as requested.\"\n    }\n  },\n  \"337a24c3b5df48d4a3e9f0696af91ef8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains stylized, anthropomorphic characters that vaguely resemble fruit (orange, apple, banana), not realistic depictions of fruit. It also shows multiple objects/characters, not a single clean object from the specified class. This is not suitable for learning standard physics parameters for fruit.\"\n    }\n  },\n  \"337e1cf840e94d8cbd1edf134b4cccbf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single papaya, which is a type of fruit. The image quality is good, and the object is suitable for physics simulation training.\"\n    }\n  },\n  \"36b61b53906e4274ac1826d1d6de5c5a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts small red fruits, likely berries or cherries, which belong to the requested 'fruit' class. The quality is acceptable for training data, and it represents a single object (a sprig/bunch) suitable for physics simulation.\"\n    }\n  },\n  \"36cea96efe5b4a9a9581224d6d083ef8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a box with watermelon illustrations, not an actual fruit. It is not suitable for representing the 'fruit' class, especially for physics simulation purposes.\"\n    }\n  },\n  \"373c679b7bd644aea12373945834e973\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple fruits arranged on a plate, which aligns with the 'fruit bowl' / 'fruit basket' concept within the allowed 'fruit' class. The image quality is good and suitable for game development and physics simulation.\"\n    }\n  },\n  \"3765dba00e8049799e403c2507945840\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized character, not any type of fruit.\"\n    }\n  },\n  \"3809ed97320f47f7ab721b5262a59bc7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"380ad02238434704b3724984d310ec6d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains many other objects (table and chairs) besides the fruit, which is very small in the scene. We need images that primarily depict the target object.\"\n    }\n  },\n  \"389bd1eb9d69423a88a73a61940940fa\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The 3D model quality is low. The bottom part clearly shows polygons/facets, and there appears to be a texture seam or artifact around the lower half of the apple. The stem also looks very artificial and blocky. These quality issues make it less suitable for a high-quality dataset.\"\n    }\n  },\n  \"3910e3cb04b04858a5e3df19b74c6d90\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"3a50c5a4acd243e199fc13e594455f31\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making the object almost invisible and unrecognizable. It does not clearly depict any fruit and is of very low quality.\"\n    }\n  },\n  \"3a6c2b3587034e91af8d0bcfb7046bda\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple individual bananas stacked, not a single banana or a natural bunch. We need images of single objects.\"\n    }\n  },\n  \"3add621802554a7ba93197dde5568fe7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl/basket, which is listed as an acceptable class. The image quality is good and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"3b07284ca29d4efa9ec7c4d8019b4e52\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very abstract, low-polygon object that does not clearly resemble any specific fruit. The quality and detail are too low for use in training, especially for physics simulation.\"\n    }\n  },\n  \"3b339ba70c864b95809bb4b372f72a8c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit, which belongs to the requested class. It is a single object, well-lit, and suitable for use in a video game, including physics simulations.\"\n    }\n  },\n  \"3b658ecad29f4d9a9606dbf8fea7c9bb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plant (likely a banana plant), not the fruit itself. The request is for images of fruits.\"\n    }\n  },\n  \"3bc16fa2a1df44b38c1ad8534dfa1c7f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is included in the list of acceptable objects. The quality is adequate for training purposes and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3c78c5cd87454cd59ba29ce177aa0d6b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two bananas and a board), not a single object as requested. The presence of the board and the second banana could interfere with learning the physics parameters for a single banana.\"\n    }\n  },\n  \"3d10d36fcf8d4baaa30d00be23106115\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single object that resembles a type of berry (like a raspberry or deformed strawberry), which falls under the 'fruit' class. While the texture is slightly low-resolution and there's a semi-transparent overlay, the object is still identifiable and the overall quality is acceptable for training purposes. It represents a fruit suitable for physics simulation.\"\n    }\n  },\n  \"3d5197b499ff47308fcdddba8650fffb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is part of the fruit class. The quality is acceptable and it's suitable for physics simulation.\"\n    }\n  },\n  \"3dba2b6e4098420c86be2a45c14f1ea9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, blocky shape with an unusual texture and a floating triangle. It does not clearly depict any recognizable fruit from the provided list.\"\n    }\n  },\n  \"3de0ce43a2cc464687177c10fc2e5b8b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"3e561da651a24d39b7d7e4bf55a7e48a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is poorly cropped, cutting off part of the object (bananas) and making it difficult to clearly identify or use for training.\"\n    }\n  },\n  \"3e5fe08f9ee74bf6ab5717fd0c45ba71\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is included in the list of acceptable terms for the 'fruit' class. The quality is good and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3eb5d14e1502438f803defca2a72420f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts cherries, which belong to the fruit class. Although stylized (voxelated), the object is recognizable and isolated. It is suitable for physics simulation.\"\n    }\n  },\n  \"3f818967cb6c4be4a86d7d068ef9c506\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3fdcd7a62fa64a068b8191ffc6506537\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a 'fruit bowl', which is listed as an acceptable object within the 'fruit' class category. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"402cf238039d44b79dd84d26835d678e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training purposes and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"404dc4d7d06147078b3bc00a82250e0f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and distorted, making it difficult to clearly identify the object as a specific type of fruit. The quality is too low for training data.\"\n    }\n  },\n  \"40c7776c79d04366a7f9361ef8ab9558\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, the object(s) are blurry and distorted. It's unclear what the object is supposed to represent - it looks like multiple fruits merged or arranged strangely, not a single, clearly identifiable fruit or fruit container.\"\n    }\n  },\n  \"40fc91554f22460abc593f91067c2b4c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an unrelated object (the stand-like structure at the bottom) in addition to the fruit bowl.\"\n    }\n  },\n  \"41b2b0867ea846d48146a6cb08bdbdb5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4205b436b91f44f3a7e57b830746d65c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract green structure that does not clearly resemble any recognizable fruit or related item from the provided list. It looks more like an alien plant or a stylized cactus.\"\n    }\n  },\n  \"42f05f33f0af4ab28d59593f86c0f5b9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it shows only the object of interest. A banana is suitable for physics simulation.\"\n    }\n  },\n  \"434284c958ac4afa817b79ee5f8ffd81\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"43b0a0c41f0543d09f9501ca1fb1a7b1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a banana plant/tree in a pot, not just the fruit (banana). The request is for images of the fruit itself, not the entire plant.\"\n    }\n  },\n  \"43f0261d402a40f1a9fc9f4d97824c02\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fruit bowl, which falls under the allowed classes ('fruit bowl', 'fruit basket'). While it contains multiple objects (fruits, bowl, cloth), this arrangement is common and acceptable based on the provided guidelines (similar to a vase of flowers). The image quality is acceptable, though not perfect.\"\n    }\n  },\n  \"44a7401803434ec1aed0d5407473a1e0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl containing various fruits (bananas, avocados, apple), which falls under the allowed categories ('fruit bowl', 'fruit'). The image quality is good, and a fruit bowl is a plausible object for physics simulation in a game environment.\"\n    }\n  },\n  \"45b8cef2122f42e791c1928b9b684a0b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts bananas arranged in an unnatural, weapon-like configuration with additional non-fruit elements attached. This does not represent a standard fruit object suitable for learning general physics properties of fruits, and it violates the 'single object' rule by combining fruit with other distinct parts.\"\n    }\n  },\n  \"46bd12cea5be4a6d8f0768a98882b1ce\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"46f94085a24949379bf16408946e3f70\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character holding a small object, not a fruit as the main subject. We need images focusing solely on the fruit.\"\n    }\n  },\n  \"4742dbd74d3f4ead9cbb6d08679c040c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (fruit basket, table runner, table surface) rather than cleanly depicting a single object from the fruit class.\"\n    }\n  },\n  \"4777b5f5839e47c0864dd6d8181250c1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the fruit class. The image quality is adequate, and it represents a single object entity (a bunch) suitable for physics simulation.\"\n    }\n  },\n  \"478a1bf5c9a94dae9dff338fd5dad148\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a jar and strawberries inside, plus a separate cluster of strawberries), not a single fruit object as requested. The jar itself is not part of the 'fruit' class.\"\n    }\n  },\n  \"47f73a9405c344af90b5412bad9f4f12\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. Although it has a voxelated style, it is recognizable and the quality is good. It's suitable for the dataset.\"\n    }\n  },\n  \"488a3bb858eb4929be657ed74f2d04c5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pineapple, which belongs to the fruit class. The image quality is good, and a pineapple is a suitable object for physics simulation.\"\n    }\n  },\n  \"4892000e8e1b4479bba1a4cd1f5c93ea\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit basket, which is included in the list of acceptable objects ('fruit basket'). The quality is adequate, and it represents a common object suitable for physics simulation.\"\n    }\n  },\n  \"4949c773bead49feb5a1bfb6fc893064\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is acceptable, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"49a9b8df2a364a42bbebbdec30e7fca5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (banana) belonging to the 'fruit' class. Although the color is unusual, the shape is recognizable, and the image quality is good. It is suitable for physics simulation.\"\n    }\n  },\n  \"4a3a8e6db0f4436f9b62a101a8986c56\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"4a751044caa5436e86935a8d1a456b16\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and the object is suitable for physics simulation in a game context, even with the voxel art style.\"\n    }\n  },\n  \"4b12b781d8b2455d84ed981be1e41744\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows small plants (possibly banana plants), not the fruit itself, which is the target class.\"\n    }\n  },\n  \"4c4a553f3359470db4f78fca337b52de\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (appears to be a passion fruit), which belongs to the specified class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4c6b198b154741edbf4b6d3c49864f38\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional object (the grey circular base) along with the bananas. We need images depicting only the target object cleanly.\"\n    }\n  },\n  \"4c8029de2dda40159b45949539f6e15d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple fruits (possibly plums or similar) hanging from a branch, which falls under the 'fruit' category. The quality is acceptable and it represents a common way fruits are found in nature, suitable for physics simulation.\"\n    }\n  },\n  \"4d4c8d85a09b476c8136f0c4cd24c45a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4dc90206ca244f0e9f9637494757f8d1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two fruits, a cutting board, and a wooden surface) rather than cleanly depicting a single fruit object.\"\n    }\n  },\n  \"4dd35f8f8c604aacb9500f78eef0fdfd\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (watermelon, cutting board, knife, countertop) instead of just a single fruit object.\"\n    }\n  },\n  \"4eb072b2cdbd4277b63d80b98c9261ea\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and an apple is a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"4f0b718d6fd744ffb3adaf4b378a9421\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (appears to be a pear), which belongs to the specified class list. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4f2597abb411451a90ba26963c8030e3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract structure made of spheres and rods, not any recognizable type of fruit.\"\n    }\n  },\n  \"4f30d3e65c45487abfa438c0368ce602\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a fruit (possibly a fig or a stylized pear). The quality is acceptable for a low-poly style, and it is suitable for physics simulation as a fruit object.\"\n    }\n  },\n  \"4fe9650493664a4aac49da9827be7392\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable fruit. It appears to be a stylized, blocky representation that is unsuitable for training realistic physics parameters for fruit.\"\n    }\n  },\n  \"5070d5496cf2402ca8db881ed9c2d853\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a fruit bowl, which is an acceptable class, but it also prominently features a large pedestal/stand underneath it. This violates the requirement of depicting cleanly ONE SINGLE OBJECT or a naturally grouped object like flowers in a vase. The pedestal is a distinct, separate object.\"\n    }\n  },\n  \"508d1ad49585475ab0515cd7fa7f60fe\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-poly model of a tree (possibly a palm tree), not an object from the 'fruit' class.\"\n    }\n  },\n  \"50cffdc3ee6f43bb96fd39cc7efd1658\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl with fruit, which falls under the allowed classes ('fruit', 'fruit bowl', 'apple', 'banana', 'pear'). The low-poly style is acceptable, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"50f35f0ec8be493ab9f2d478abf89e8a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is part of the 'fruit' class. The quality is acceptable for training purposes, and a banana is a plausible object for physics simulation in a game.\"\n    }\n  },\n  \"5124019656c140b7924269dba379a808\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a folding knife or razor, which does not belong to the 'fruit' class.\"\n    }\n  },\n  \"526d00c728a24311bfbec50bf54142ca\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single watermelon, which belongs to the fruit class. The quality is acceptable for training, and a watermelon is a suitable object for physics simulation.\"\n    }\n  },\n  \"52a1c24e5f7d45c4b4cd5c2d8300140c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard display stand with pictures of fruit on it, not actual fruit. We need images of the fruit objects themselves.\"\n    }\n  },\n  \"52b6d5de9f8847dba363a93761874c9e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows a portion (the top part) of a banana, not the whole fruit. It doesn't clearly depict the object.\"\n    }\n  },\n  \"52db0f93a5344674931e3e34c67a1515\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object (strawberry) is too small in the image frame, making it difficult to discern details and potentially hindering its usefulness as high-quality training data.\"\n    }\n  },\n  \"52eae9611fb44379a45c8fe8f50e7b2b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects: a bunch of bananas and a plate/board underneath. We need images depicting only a single object from the specified class.\"\n    }\n  },\n  \"5380460ee97e413a9f169d33007a3174\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The image quality is good, and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"53847ea1cd0343d3be08b1174339b009\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (prickly pear), which belongs to the specified class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"538a6379acbf493cb5b4ead395e17903\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, with potential rendering artifacts (unclear shadow, cut-out section). It does not provide a clean, high-quality representation of the object suitable for training.\"\n    }\n  },\n  \"54635b0503eb42b2acc54229b221f42b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a can or container, not a fruit.\"\n    }\n  },\n  \"548e1212a3e248dd9026ee5aef2820a3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making the object almost invisible and impossible to identify as belonging to the fruit class.\"\n    }\n  },\n  \"54c76e1842294e4093387ea9dd56e461\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a distorted, abstract shape with a warped texture that includes bananas. It does not clearly depict a recognizable fruit suitable for training or physics simulation.\"\n    }\n  },\n  \"572492669b514fd19d1e7a3d803145ad\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit basket, which is included in the list of acceptable objects ('fruit basket'). The image quality is good, and it represents a common way fruits are grouped and displayed. This object is suitable for physics simulation.\"\n    }\n  },\n  \"5763b27fd1b04726b97cbcca71ed11a8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The quality is acceptable and it represents a common form of the fruit suitable for physics simulation.\"\n    }\n  },\n  \"57673b1e1e3044fda4d562cffdc1c965\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is acceptable for training, and it's an object suitable for physics simulation.\"\n    }\n  },\n  \"58b521aa0c114a11804196c2e8988c21\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (various fruits and vegetables), not a single object as required.\"\n    }\n  },\n  \"5914ea701e4648e2bc0d5c265b7b4059\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5a0ae2276ac845c9a93b240c076aae19\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single watermelon, which belongs to the 'fruit' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5a6c3a55c0df4b08bc4e1e7e4181e468\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5adb698e7afa4054bce8faa29418bfa2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, it appears distorted, incomplete, and fragmented. It does not clearly depict the objects (melons) in a usable way for training.\"\n    }\n  },\n  \"5ae2ec5da34f47c8b2105d2ac09d5c90\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a very low-polygon, abstract shape that does not clearly represent any specific fruit or the general class 'fruit'. Its stylization makes it difficult to identify reliably.\"\n    }\n  },\n  \"5c63e2ee4cb849a29aa223a0a3725ac5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a plant leaf or feather, not a fruit. It does not belong to the requested 'fruit' class.\"\n    }\n  },\n  \"5c857ed29ecf4236843e30ea4a2cde51\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single star fruit, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"5d08c08cef904400b50e3a7d300c4af2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (oranges, lemon wedges, cylindrical objects, base) rather than depicting cleanly one single object from the fruit class.\"\n    }\n  },\n  \"5dd87a342bc64ffd96a4fd1dc48e89eb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training purposes.\"\n    }\n  },\n  \"5e68fc39623b4773a53a6d084782a6df\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects, not a single object as required.\"\n    }\n  },\n  \"5f11a4baa89342a3b91bbd0ee390ba01\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone one from the 'fruit' class.\"\n    }\n  },\n  \"60d4d9b3a554467d8d5f5504e7e3e9e1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit, likely an apple or pear, which belongs to the requested class. Although stylized and low-poly, it is recognizable, clear, and represents a single object suitable for physics simulation (e.g., dropping).\"\n    }\n  },\n  \"611e8861e2e247c0b31c5dd5fc93e24c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"613fc896899349e4911ccce2f94e63ee\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty bowl. While 'fruit bowl' is listed as a related term, this image does not contain any fruit and therefore does not clearly depict the intended class.\"\n    }\n  },\n  \"61b22e6495d64783abd8bc2265f635b1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a 'fruit bowl', which is an acceptable sub-category within the 'fruit' class. The image quality is adequate, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"6293781bab0d4b6ea6fff983309b92b6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract, stylized object composed of stacked shapes. It does not clearly depict a recognizable fruit from the provided list. The lack of color and realistic texture makes it unsuitable for training.\"\n    }\n  },\n  \"62f91fb253f7413b929a2b67cdafde54\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The image quality is good, and it represents a single object entity (the bunch) suitable for physics simulation.\"\n    }\n  },\n  \"6376baa9579e4e2b9328a41b4cc0ee3d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a 'fruit basket', which is an acceptable object within the 'fruit' class list. The quality is adequate and it represents a common object suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"63c7b826b3cd4d74a48e645e0d3e90fc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a banana tree, not the banana fruit itself. The class is 'fruit', and we need images of the fruit, not the entire plant.\"\n    }\n  },\n  \"63e760de39444aa4b36449eabce07290\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable fruit. It looks more like a scribble or a very low-detail drawing, making it unsuitable for training data.\"\n    }\n  },\n  \"64c3d61ba7b549b5b7c72b37d7532b48\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is included in the specified list of objects ('fruit bowl', 'fruit basket'). The image quality is acceptable, and a fruit bowl is a suitable object for physics simulation.\"\n    }\n  },\n  \"64eb678ed9e64709871b7386c0f872e8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the 'fruit' class. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"654373ea10f44ed0bdfce38c30ed1d35\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts stacked colored cubes, not any type of fruit.\"\n    }\n  },\n  \"65c771ba0f18489bbe1c44fd039de643\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is low, the texture appears somewhat blurry, and the lighting on the bottom is too bright, washing out details. It's also not immediately clear what specific fruit it is supposed to be, potentially resembling a pear or even a potato.\"\n    }\n  },\n  \"6725fa757760455a812f4684474c150a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not clearly depict any fruit.\"\n    }\n  },\n  \"67abe8435fe94482acfaf4b6eae3bf45\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple types of fruit arranged in an unnatural way with skewers/sticks, not representing a single, clean object or a typical fruit arrangement like a bowl or basket. This composite structure is not ideal for learning the physics of individual fruits.\"\n    }\n  },\n  \"687d9677bd4042d4b2f6b5a7d627b3e7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts bananas in a bowl, which falls under the 'fruit bowl' and 'banana' categories within the broader 'fruit' class. The image quality is acceptable for training purposes.\"\n    }\n  },\n  \"68bdaec560934db5acecd06817146a20\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including several types of fruit pieces and other non-fruit items (like chocolate and decorations), violating the requirement for a single object depiction.\"\n    }\n  },\n  \"6918cdb22a284c18a68cc1bda011b3b9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it represents diversity (a ripe/bruised banana). It is suitable for physics simulation.\"\n    }\n  },\n  \"6983319875f2476aac24de7566b138e6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too distorted and fragmented. It does not clearly depict any recognizable fruit or object from the specified class. The quality is too low for training purposes.\"\n    }\n  },\n  \"69883bd31384456891bb96ad7cee6581\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a market stall structure containing fruit, not a single fruit object or a standard container like a fruit bowl/basket as specified in the class list. It contains multiple objects and the focus is not on the fruit itself.\"\n    }\n  },\n  \"69ad2ce1101a479bbd166f5ca37f996b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a 'fruit bowl', which is an acceptable object within the 'fruit' class. The quality is adequate for training.\"\n    }\n  },\n  \"6a7373118edf484c8ce6c8104cf8da9b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"6b01d76f958b4fb38eb4674ee72e4d88\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a pumpkin. While botanically a fruit, it is not included in the provided list of fruits for this class and is often considered a vegetable in culinary contexts. It might belong to a different category (e.g., 'vegetable' or 'gourd').\"\n    }\n  },\n  \"6b85ce0741944f069cb7bd6c06177ba2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (one whole peach and several cut pieces), violating the requirement for a single object per image.\"\n    }\n  },\n  \"6cd716ecfa2941d5a8e30f3abb8cb5c9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very small, indistinct object that cannot be clearly identified as a fruit. It lacks detail and is too small to be useful.\"\n    }\n  },\n  \"6cebf458de3c49ffab3bd78dca6a4c85\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image quality is poor. The bottom half of the pear is excessively bright and lacks detail, appearing almost self-illuminated, which makes it look unrealistic and low quality.\"\n    }\n  },\n  \"6d99c6c1a8bc4b3e97cebbc49d62115d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is adequate for training, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"6d9ab27e71684e5c9d20dd0aee6c631c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a box of Pop-Tarts, which is a processed food product, not a fruit according to the provided class list.\"\n    }\n  },\n  \"6e95a8cb47114f2285be08a70e8990b6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"6efbc52181554ee6b33b6e2fee802946\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized banana, which falls under the fruit category. The quality is good and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"6f3ad7ba286e4eea82ecef273190857a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a partially peeled banana, which belongs to the 'fruit' class. The quality is acceptable for training data and it's suitable for physics simulation.\"\n    }\n  },\n  \"6fff96296d924b32b457e2598e708254\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit (likely a peach) which belongs to the requested class. It is a single object, the quality is good for a game asset, and fruits are objects commonly used in physics simulations within games.\"\n    }\n  },\n  \"705046e0bada408fb3aae9b771337504\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts highly stylized, anthropomorphic characters resembling fruit and peas in a pod. It does not represent a realistic fruit object suitable for learning general physics parameters. Additionally, it contains multiple objects/characters and is not a clean depiction of a single fruit.\"\n    }\n  },\n  \"7186ebfc24fc42c599f81713cd28d55e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a banana plant/tree, not the fruit itself. The requested class is 'fruit'.\"\n    }\n  },\n  \"71d2ea7c02e34220842511612766adc8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The quality is acceptable and it only shows the object against a clean background. Bananas are suitable objects for physics simulation in a game.\"\n    }\n  },\n  \"74400c6fc6ec4ae0b11e381de7de2c04\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is a type of fruit. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"74d0e58d73a644bfa8412ff9ec318d67\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (fruit bowl, table, tablecloth) instead of just a single object from the 'fruit' class list (like a fruit bowl).\"\n    }\n  },\n  \"756355d885594e0f87f8cc74e327579a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cart with an umbrella, not an object belonging to the 'fruit' class.\"\n    }\n  },\n  \"7579a5b6399343a88dd75e59865e3198\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training data, even though it's stylized.\"\n    }\n  },\n  \"75adb9ab48d748eeaeb3e09ca72bdd24\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including fruits (coconuts, watermelons, oranges) and non-fruit items (cans). We require images depicting only a single object from the specified class.\"\n    }\n  },\n  \"76041258057f4bd2810eeb04cdc8c49f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts bottles, not any object belonging to the 'fruit' class. Additionally, the image is too bright and lacks clear detail.\"\n    }\n  },\n  \"7765a2dcd41f439782b975eedc6bd519\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a plate of fruit, which falls under the 'fruit bowl'/'fruit' category. The quality is acceptable, and the object is relevant for physics simulation (e.g., dropping a plate of fruit).\"\n    }\n  },\n  \"7832db33cab6491eae156be33ba792f5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plant or tree, not a fruit, which is the required class.\"\n    }\n  },\n  \"7862e9827a1c46f0b63da65e092b7005\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed (too bright), making the object almost completely invisible and impossible to identify. It is of very low quality.\"\n    }\n  },\n  \"79d2efd45f6c4782a822e693e6d50585\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"7a0d2491b22141398f19c7f11a2f2edf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, the texture resolution appears poor, and the shape/appearance of the banana (especially the stem and the bottom) is somewhat distorted or unrealistic for a typical banana model. This might not be suitable for high-quality physics simulation training.\"\n    }\n  },\n  \"7b9cab5e984e496c81a78cddf5b3f8b9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a juice carton, which is packaging, not a fruit itself. It does not belong to the requested 'fruit' class.\"\n    }\n  },\n  \"7ceb56913ca04412b5b8d67623a449e7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pomegranate, which is a type of fruit listed in the allowed classes. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"7d766389b33c4a70985244c35b26fca2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"7db25a2b1d4b4f33be8a2bf2f7356181\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized Santa Claus figure made partially of strawberry elements and cream/frosting. It is not a clear representation of a single fruit object, but rather a composite decorative item.\"\n    }\n  },\n  \"7e3b35368929485d89df5fe9071afd06\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The image quality is acceptable for training purposes, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"7e826cc096ea49279ea5db3bf7c58fc6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower (blossom), not a fruit, which is the requested object class.\"\n    }\n  },\n  \"7f485fbde1b14204a7bff0b72fec2b4f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a collection of fruits (fruit bowl/platter), which falls under the specified class 'fruit' and its sub-categories. Although it contains multiple items, it represents a single conceptual object ('fruit bowl') similar to the 'vase of flowers' example, making it acceptable. The low-poly style is acceptable, and the image quality is good.\"\n    }\n  },\n  \"7f57d76eb95d456ebaf5274a8c6e7c66\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple fruits (oranges, strawberries, blueberries) in a fruit bowl, which falls under the allowed classes ('fruit', 'fruit bowl', specific fruit types). The image quality is good, and the object (fruit bowl with fruit) is suitable for physics simulation.\"\n    }\n  },\n  \"7ff74f3fc53e464c92e04c719f8bdd0e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"805f46f8914342db82d107ac19b4b653\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"81766a35ea874e12996f5976b5283ab7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, with blurry textures making it difficult to clearly identify the different types of fruit. Additionally, it depicts multiple items (a plate and various fruit pieces) rather than a single, clearly defined fruit object or a standard fruit bowl/basket, which is less ideal for learning specific physics parameters.\"\n    }\n  },\n  \"81c1fe8557f74983b723383b34b8675c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark, making it difficult to clearly see the details of the fruit bowl and the fruits within it. This low quality makes it unsuitable for training data.\"\n    }\n  },\n  \"823ca185916d48d0972f8694aceb3829\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex, abstract structure made of various colorful shapes. While some elements might vaguely resemble fruits (like a banana or orange), the overall object is not clearly identifiable as a fruit or a standard fruit arrangement (like a fruit bowl). It contains many other non-fruit elements and does not represent a single object from the specified class cleanly.\"\n    }\n  },\n  \"82978d2bf11845f49c0d4dfebd78b7b7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pineapple, which is a type of fruit. The image quality is good, and it's suitable for use in physics simulations.\"\n    }\n  },\n  \"845e106c589e4578bc51fe1c3094dfe3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the 'fruit' class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"84a0b929f88f4538bd790c5fd0b898e2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cup or container with a floral pattern, not an object belonging to the 'fruit' class.\"\n    }\n  },\n  \"850b0ae1514247aeb069eb1d63738ff0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The image quality is good, and the object is isolated against a clean background. It is suitable for physics simulation.\"\n    }\n  },\n  \"85695b82c7ba4b3497a663616cc3bf25\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plant (looks like a banana plant), not a fruit. The requested class is 'fruit'.\"\n    }\n  },\n  \"86361fa497e84f13928b7e000e032615\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is ambiguous. While it has some fruit-like elements (berry structures), its overall appearance strongly resembles a flower (like a Protea or Waratah) or an ornamental plant rather than a clearly identifiable fruit from the provided list. It is not clearly depicted as belonging to the 'fruit' class.\"\n    }\n  },\n  \"87e3b074405847ec94c1e4ad6aac4dcc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized, anthropomorphic fruit characters with limbs, not realistic depictions of fruit. It also contains two objects instead of one. This is not suitable for learning physics parameters for the general 'fruit' class.\"\n    }\n  },\n  \"885fa3a9c60e4279ba7eb0d29c64ae3d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including items that are not fruits (e.g., mushroom, eggplant, chili pepper), violating the requirement for a single object from the specified class.\"\n    }\n  },\n  \"8865c2ea3b4647f18a215d3c096f81c3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is listed as an acceptable object within the 'fruit' class. The image quality is good and suitable for training purposes. While it contains multiple objects (fruits and a bowl), this is expected for a 'fruit bowl' and fits the common sense exception for composite objects.\"\n    }\n  },\n  \"88afb31d1e5e4b31af2777e31ace429c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. While stylized and low-poly, it is recognizable and suitable for a video game asset, including potential physics simulation.\"\n    }\n  },\n  \"89ab416f35cf40da952c634ac955b300\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is acceptable for a 3D render, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"89f8295add4d459c86fb714d30341875\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple strawberries and also a plate/packaging underneath, violating the requirement for a single, clean object depiction.\"\n    }\n  },\n  \"8aca95daa6764757af71e027892caec6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, showing a distorted and fragmented 3D model. It does not clearly depict any recognizable fruit object suitable for training.\"\n    }\n  },\n  \"8acb6f9fde2e4f2fa4b87fbdf589f0d2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized watermelon, which belongs to the fruit class. The quality is acceptable for a game asset, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"8b521e0e9fc247a38b0e0cfbe142319d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl containing several fruits (pineapple, banana, melon slice), which falls under the allowed 'fruit bowl' category within the 'fruit' class. The image quality is sufficient and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"8b7831b323234d70b8a553b67de90ed2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to show a banana with a significant texture discontinuity or cut about two-thirds of the way down, making it look unnatural and potentially representing a flawed 3D model or texture.\"\n    }\n  },\n  \"8c0d285c1e6b4ba3b5ea777b563c4c80\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very low-detail, ambiguous shape that vaguely resembles a fruit like a banana or pear, but it does not clearly depict any specific fruit. The lack of detail and texture makes it unsuitable for learning realistic physics parameters.\"\n    }\n  },\n  \"8c55ed62a9194e328d86f5ffe3bc547c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the 'fruit' class. The quality is acceptable for training purposes and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"8d575568119c4d108cbc9e9560531690\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized, low-poly representation of a fruit, possibly a strawberry or a fantasy fruit. It is a single object, clearly rendered, and suitable for a video game context, including physics simulation.\"\n    }\n  },\n  \"8d6355cf00f44d7b9bdd26330f486c01\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl containing grapes, which belongs to the specified 'fruit' class list (specifically 'fruit bowl' and 'grape'). The image quality is adequate, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"8d8b8ebdb8414aa6895dbf37ddba319d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (container of strawberries, strawberry plants, ground covering) rather than cleanly depicting a single object from the fruit class. We need images focused solely on the fruit or a container of fruit without significant background elements.\"\n    }\n  },\n  \"8de5d8f3c31f45b997feea9067b69f45\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is a type of fruit. The quality is acceptable, and while the banana is overripe, it is still recognizable and adds diversity to the dataset. It is suitable for physics simulation.\"\n    }\n  },\n  \"8dece80994ab4e24bbce686cfb9100cc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, not a fruit or a collection of fruits as specified by the class list.\"\n    }\n  },\n  \"8e194394fb864e2da73913b89e240a71\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"8eb28a763eb448ba9443380c6054119b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a fruit stand, a cushion, and several individual fruits), not just one single object from the 'fruit' class or an accepted collection like a fruit bowl/basket.\"\n    }\n  },\n  \"8f591ee93e2f4690b896b14f2b2a5202\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The image quality is good, and it only shows the fruit against a clean background. A bunch of bananas is a suitable object for physics simulation.\"\n    }\n  },\n  \"8f653bc14bb14f75a20e9a12a7c0b879\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit, which falls under the requested class. It is a single object, well-lit, and clear. The low-poly style is acceptable for dataset diversity and suitable for physics simulation.\"\n    }\n  },\n  \"8ffce3a498da47c0930f41fa58371e54\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"90493b11ff7147509aa641202551186e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its details. It is not suitable for training data due to low quality.\"\n    }\n  },\n  \"90e846bc8ba84c489aabc5b5c51040a3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the 'fruit' class. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"90f793145e2d4b9293cdc26d8324fe5b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"91555e2ae7904ffbbd52a1a7dd15a40e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a 'fruit bowl', which is an acceptable class. The low-poly style is acceptable, and the image quality is good. It represents an object suitable for physics simulation.\"\n    }\n  },\n  \"917ef5baa4874f3ea0914bd7486fc2e2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows a small, cropped part of the banana (the tip), not the whole fruit, making it unsuitable for representing the object.\"\n    }\n  },\n  \"923ea2b1927d4c24ab88860ee416ce6c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any recognizable fruit. It appears to be a stylized flame or light effect, not an object belonging to the 'fruit' class.\"\n    }\n  },\n  \"9352d565df404f0cbc25a7f5e28f39aa\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The quality is adequate, and it represents a single object (a bunch) suitable for physics simulation.\"\n    }\n  },\n  \"94a7782580604ae5a81c001c12dcd769\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a compartmentalized box or tray, not any type of fruit or related object like a fruit bowl or basket.\"\n    }\n  },\n  \"94d1fe920ecd4069b5962e5ce68c5f49\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"952b5aa4fc4e4ea49602832d02004152\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single, stylized fruit (likely an apple or citrus). While low-polygon, the quality is good, and it represents a type of asset commonly used in games, suitable for physics simulation.\"\n    }\n  },\n  \"955d7663348d48ea9defca64e8626064\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it is suitable for physics simulation training.\"\n    }\n  },\n  \"95782f462b0641cbb0cc24e0a9cdcd47\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (resembling an orange or tangerine) which belongs to the specified class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"96102c9e1160466f9ceee0bb54c1fb51\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"964bc8cb4cda4c44955493ab7af25e44\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty basket. While 'fruit basket' is listed in the class description, this image lacks the fruit component, making it just a basket, not representative of the 'fruit' class.\"\n    }\n  },\n  \"96988e437fe841059ccf1ed150cca65f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract geometric shape, not any recognizable type of fruit.\"\n    }\n  },\n  \"970bb25d5b1e48e39353ee49bd16cebb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (an apple, a plum, a banana, and a plate) instead of depicting cleanly ONE SINGLE OBJECT from the fruit class.\"\n    }\n  },\n  \"9729d01c38534df6955c310376a71096\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as an apple, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"97427c7b7fae4d709b843c86d39a9546\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (an eggplant-like object, a lemon/pear-like object, and a market stall in the background), not a single fruit object as required.\"\n    }\n  },\n  \"9838d845604f4d55bfe327433009962f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any fruit. The objects appear to be chocolate pieces or bricks, which are not part of the 'fruit' class.\"\n    }\n  },\n  \"983aecd197b742b3a61e7da0565021a8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object, an orange (which belongs to the fruit class), cut in half. Although the peel color is unusual (blue), the internal structure is recognizable, and the instructions allow for unusual textures if the object is still identifiable. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"985db5dbec184aa0ade8c87717316e40\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and does not clearly represent any recognizable real-world fruit from the provided list. Its shape and color are too abstract for general 'fruit' class training.\"\n    }\n  },\n  \"9956de47e327480cb902877676cd63f7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9b1694d3bab34687b0b269fe0b776c92\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (half a fruit) belonging to the 'fruit' class. The quality is good, and it is suitable for physics simulation purposes.\"\n    }\n  },\n  \"9b42ef1096da4103a12fb80cad01ac15\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9c642d742fcc4cdfb9724cd45f94e0e3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble any type of fruit. It appears to be an abstract geometric shape or pattern.\"\n    }\n  },\n  \"9d123e87fc7c44439934a0b0165c680c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the 'fruit' class. The quality is acceptable for training, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"9d9e45a57353493385a609ea7278816a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The image quality is good, and it shows the object cleanly against a neutral background. A banana is suitable for physics simulation.\"\n    }\n  },\n  \"9f43e7805fd64ecfa25949f703406932\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a utility knife or cutter shaped like a banana, not an actual fruit. The grey tip looks like a blade.\"\n    }\n  },\n  \"a0d6db58a3364cd783ddaf27cf83a86b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the bananas, which belong to the fruit class, but it also prominently features the surface they are resting on. We need images depicting only the object itself, without additional elements like plates or surfaces.\"\n    }\n  },\n  \"a12a36bc58004b8fa10689fa3ca62594\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an apple core (partially eaten apple), not a whole fruit. While technically fruit, it's not representative of the typical object state needed for learning general physics parameters of an apple or fruit.\"\n    }\n  },\n  \"a1b7c76f69a94b6b809646208aa40d85\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (watermelon slice, plate, and another surface) instead of just a single fruit object.\"\n    }\n  },\n  \"a32a74b2b306478dbece5a79c5e5cf23\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a371c26b79d444d988dfa59df78d8017\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"a422d22e0ff64b3f87bd8c6fea8cd3fe\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single watermelon, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation (e.g., dropping, rolling).\"\n    }\n  },\n  \"a4b48c52de524a049099f8acb1487752\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily shows a purple container or tray. While it might contain fruit, the fruit itself is not clearly visible or identifiable. The object depicted is the container, not the fruit, making it inappropriate for the 'fruit' class.\"\n    }\n  },\n  \"a548ec65b43844fb90f570ba132a0391\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit basket, which is included in the allowed list of objects for the 'fruit' class. The image quality is good, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"a54a75cf96814759adee2bc998720d7d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoon character, not a fruit.\"\n    }\n  },\n  \"a565d7d298c9443398c7468800641e7a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a carton, likely containing coconut water or juice, not a fruit itself. It depicts packaging, which is not part of the specified 'fruit' class.\"\n    }\n  },\n  \"a6193c4a6e4547d19060b8e120dcc377\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is acceptable for game development and physics simulation.\"\n    }\n  },\n  \"a6bff8037fe044a5bffc20bacf3e5afb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects (an apple and a banana), while the requirement is to have only one single object per image.\"\n    }\n  },\n  \"a715630c566b40b280a7651de5321d3d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a72d8d894d314232a67504a56e3864d0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several different fruits, a cutting board, and a surface), not just a single fruit object as required.\"\n    }\n  },\n  \"a79686c60df34d46aedf315bdf586c5a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract stack of various items, including fruits and possibly non-fruit items (like mushrooms). It does not represent a single, clearly identifiable fruit object or a common arrangement like a fruit bowl/basket, making it unsuitable for training on the 'fruit' class, especially for physics simulation purposes where individual object properties are important.\"\n    }\n  },\n  \"a7a3d2a6837f465a9fcdbfeb730ec99e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a banana plant/tree, not the banana fruit itself, which is the requested class.\"\n    }\n  },\n  \"a7c4a7a70c824bad8a6790ec3e672408\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the 'fruit' class. The quality is acceptable for training purposes.\"\n    }\n  },\n  \"a8397fa398364cc884e896ae1d50b82d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the fruit object but also includes the surface/paper it is resting on, which is an additional object. We need images depicting only the fruit.\"\n    }\n  },\n  \"a8404dde81464052ab14206a172f10c7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized fruit (likely an apple), which belongs to the requested class. It is a single object, well-lit, and clear. While stylized, it's recognizable and suitable for a video game context, potentially involving physics simulation.\"\n    }\n  },\n  \"a942be6abe1f4626863d4883d07d3179\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't clearly depict the object class ('fruit'). The object is fragmented, distorted, and unrecognizable.\"\n    }\n  },\n  \"a949852edb624114b5118bcb1527790f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (pineapple, other items, plate) rather than a single, clean fruit object as requested. It also includes non-fruit items (plate).\"\n    }\n  },\n  \"aa3ff203214d40dca682e6e30fae1230\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple fruit objects scattered on a surface, along with other elements (leaves/fragments). We require images depicting only a single object from the specified class.\"\n    }\n  },\n  \"ab8ff5d8326149a8948b583e505e6eb0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. Although stylized and low-polygon, it is recognizable and the quality is sufficient for training. Bananas are suitable objects for physics simulation.\"\n    }\n  },\n  \"ac1dcbeb1d9441c9b9026fa13e6e0136\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bowl of strawberries, which falls under the 'fruit bowl' and 'strawberry' categories within the 'fruit' class. The image quality is acceptable, and a bowl of fruit is a reasonable object for physics simulation in a game environment.\"\n    }\n  },\n  \"acb5ac53c42c4039b6175e717a10a40a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"ad4eadbdef9a40ddb12cc0cd88528f2b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any recognizable object, let alone a fruit. It appears to be a distorted or corrupted 3D model render.\"\n    }\n  },\n  \"ada7c35a1a5742f1b4c528eb3daee35b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low due to rendering artifacts or transparency issues on the object, making it look unnatural.\"\n    }\n  },\n  \"ade2b59ff37c44059433414f39c94abe\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is a type of fruit. The quality is acceptable for training data, and a banana is an object that could reasonably be used in physics simulations within a game.\"\n    }\n  },\n  \"ae04942bf9264acfb40db2772602c773\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple fruits (banana, apples, oranges) on a plate, which falls under the 'fruit' class and is analogous to a 'fruit bowl', an allowed sub-class. The image quality is adequate, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"ae1b6d6e73754c0482749930d4cbc499\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. Although it is overripe, it is still recognizable and adds diversity to the dataset. The image quality is adequate for training.\"\n    }\n  },\n  \"ae274daf47e341a6bfddbb1b47e73f58\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"aeeddc5692234bb793460be149e611db\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex fruit stand with multiple crates and various types of fruit, not a single fruit object, fruit bowl, or fruit basket as required. It contains too many objects and the overall structure is not suitable for simulating as a single physical entity.\"\n    }\n  },\n  \"b04b61ce982140f3bff549b4bc6e8115\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including shapes that are not clearly identifiable as fruit (cylinders, bone shape) and a large base structure. We need images depicting cleanly ONE SINGLE OBJECT from the fruit class.\"\n    }\n  },\n  \"b0707bf71f1a4fa196384bac5086d0be\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"b14c650484f5429cae6cc7cb91075c62\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the fruit class. The quality is acceptable for training purposes.\"\n    }\n  },\n  \"b16d68d82fa7451ba92b15854f8fb555\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a shoe, which does not belong to the 'fruit' class.\"\n    }\n  },\n  \"b1a119dde1714a97892614a14e928f86\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (fruits, plate, table). While a collection of fruits might be acceptable under 'fruit bowl' or similar, the prominent table is an additional object not belonging to the 'fruit' class, violating the 'one single object' requirement.\"\n    }\n  },\n  \"b23047086bb54eb7a0b7ce5d61cadec2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (strawberry) belonging to the 'fruit' class. The quality is acceptable, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"b282c8df0b1e4b6da97880b74a093305\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an untextured grey object that does not resemble any fruit listed in the class description. It lacks the necessary visual details (color, texture, recognizable shape) to be identified as fruit.\"\n    }\n  },\n  \"b2c8b68bce9f487a8df2a015d0da87f4\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b3579e0323a14fae8161d4d754f0dfad\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a pedestal in addition to the fruit bowl. We require images depicting only the object belonging to the specified class.\"\n    }\n  },\n  \"b3cd5dcc5a8b4e0b8043776050102b93\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, blurry, and fragmented. It depicts multiple objects (keyboard, plate with food, fabric) rather than a single, clear fruit object. The potential fruit (red slices) is not clearly identifiable and is part of a larger, poorly rendered scene.\"\n    }\n  },\n  \"b3cdf54936bd481184560a00f4e47bf3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a cluster of fruit (likely berries or cherries) in a low-poly style. It belongs to the 'fruit' class, is of good quality, and represents a plausible object for physics simulation in a game.\"\n    }\n  },\n  \"b3df6e6788d840af902443eafae2e11f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"b4065dd5ce9d46be90db3e1f3e4b9cc1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b44c3736b3b345b2a31e38c46b0b3a1e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional, unidentified flat object attached to the side of the bananas, which violates the requirement of depicting only a single object from the class.\"\n    }\n  },\n  \"b46433e262994bfdb9f6515b310fe825\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b51a0d71217c400eb147d966249320ba\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a market stall which contains multiple objects (stall structure, awning, sacks, bowls) in addition to some fruit-like items. It does not show a single fruit or a fruit bowl/basket cleanly as the primary subject.\"\n    }\n  },\n  \"b62dfc66750a49a99119a0b821ab7aa0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single green apple, which belongs to the fruit class. The quality is adequate for training, and an apple is a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"b6d1b506c687424187c87ab913a210ba\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts an apple, which belongs to the fruit class. Although stylized and showing a slice, it's recognizable and the quality is acceptable for a stylized 3D asset. It represents a single object concept suitable for physics simulation.\"\n    }\n  },\n  \"b7c8bd2cf3a44192b537028a165cc3ed\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a long, green, blocky object that does not clearly resemble any fruit from the specified list. It looks more like a stem or stalk in a voxel art style.\"\n    }\n  },\n  \"b8d3745c818b4e3c96671d9418996a4a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (likely a pear or avocado) which belongs to the requested class. The quality is sufficient, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"b8de8fcb893141e09c2e0be9373ac4ac\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, stylized object that does not clearly represent any recognizable fruit or fruit-related item from the specified list.\"\n    }\n  },\n  \"b9c654a534e1436ebabb541042bf5fe8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl filled with oranges, which falls under the allowed classes ('fruit bowl', 'orange', 'fruit'). The image quality is good, and this object could plausibly be used in physics simulations.\"\n    }\n  },\n  \"b9c794147d164ac89316ce93b8abeef6\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of cake topped with fruit (likely cherries or berries). The primary object is the cake, not the fruit itself, and it contains multiple components.\"\n    }\n  },\n  \"ba4903793bb14dd292014c6735755190\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the fruit class. The quality is acceptable, and it's a suitable object for physics simulation.\"\n    }\n  },\n  \"baec4e6262c14527b387b381265e58eb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is distorted and does not clearly depict any recognizable fruit object. It appears to be a fragmented scene, possibly from a store aisle, rather than a single, clean fruit item.\"\n    }\n  },\n  \"bc31628d29f843a09c89dcaaed59136f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"bc56d1e241dc4fe68202154c0a10a211\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized, low-polygon fruit, which fits within the 'fruit' class, especially considering the need for diversity in game assets. The image quality is adequate, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"bc639c5346134cd880ddaacd3d9c7d77\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image includes a large section of the stone surface the fruit bowl is resting on, which is not part of the object itself and violates the 'cleanly ONE SINGLE OBJECT' requirement.\"\n    }\n  },\n  \"bcb912c64c7b40d284044e58f5354ca7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what appear to be chicken wings, not any type of fruit.\"\n    }\n  },\n  \"bcee47f9119f46a1a758064690f21941\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a silhouette and lacks texture, color, and detail, making it low quality and unsuitable for training data, especially for learning physical properties.\"\n    }\n  },\n  \"bd363a8274954a619811f5a0fb730272\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as an apple, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"bd5596d3b4ff49d79d284fe770cd6728\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The 3D model appears incomplete or cut off at the bottom, making it unsuitable for accurate physics simulation.\"\n    }\n  },\n  \"bea608ee370f4bbdb4df0a6c88b03c37\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a strawberry plant in a basket, which falls under the 'fruit' (strawberry) and 'fruit basket' categories. The quality is acceptable for a stylized asset and it represents an object that could be used in physics simulations (plant swaying, fruit interaction).\"\n    }\n  },\n  \"beb3bf85b53c489b990f75a28499b667\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a banana plant/tree, not the banana fruit itself. The requested class is 'fruit'.\"\n    }\n  },\n  \"bf366c0a649e4a0c8c12d697d5622748\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a container of strawberries, which falls under the 'fruit' and 'strawberry' classes. While it contains multiple strawberries and a container, this is analogous to a 'fruit basket' or 'fruit bowl' which are explicitly listed as acceptable concepts. The image quality is adequate, and the object is suitable for physics simulation (e.g., dropping the container).\"\n    }\n  },\n  \"bf76ef97ff844d5ca9c0de2e7985544e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which is a type of fruit. The low-poly style is acceptable for diversity, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"c09d0a4be605463e98ac6bcf99818fa8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, making it difficult to discern the details of the object. While it vaguely resembles a peeled banana, the quality and clarity are too low for training purposes.\"\n    }\n  },\n  \"c0a183ee0c5d4d88ae41f82c6026ba86\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is one of the specified classes. The quality is acceptable, and it's a common object that could be used in physics simulations within a game.\"\n    }\n  },\n  \"c0cb1be0dfcd430ab6b8944b51c74e48\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a plastic crate, not a fruit or a fruit container like a bowl or basket, which are the target classes.\"\n    }\n  },\n  \"c173e5e550544f83808081bb80815d0e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains significant background elements (floor, cabinets) in addition to the target object (watermelon), violating the requirement for cleanly depicting only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"c26b74fff40d45e4ae6faa37e987d7e5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any object belonging to the 'fruit' class. It looks more like a patch of dirt or debris.\"\n    }\n  },\n  \"c293dcbfff4740cebe79d939437fd04a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"c30b276e2e174109b8e159512f3bc8da\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the details of the objects. This is considered low quality.\"\n    }\n  },\n  \"c35e341535684eb9b6a7ad6ebdcda73b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts strawberry plants, not individual strawberries or a collection of fruits like a fruit bowl/basket. While it contains fruit, the primary object is the plant itself, which is not the focus of the 'fruit' class as defined (individual fruits or containers).\"\n    }\n  },\n  \"c36d736d644e4a949d1301fafdb65249\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c384f15c43ca48c29ba8de8b13229759\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two pears, violating the requirement to depict only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"c43cb4d55fde4dea9c51e79428c35c69\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to clearly identify the object or determine if it belongs to the fruit class.\"\n    }\n  },\n  \"c47478e286564aa790328e8b4baea5ce\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit.\"\n    }\n  },\n  \"c4c6d477919c4c69b00b662f62bf39e2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is included in the list of acceptable objects for the 'fruit' class. The image quality is good and it shows a single object.\"\n    }\n  },\n  \"c52d6e9d725f4791ad491cd8f6d5d739\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any recognizable fruit. The object is extremely thin and distorted, making it impossible to identify.\"\n    }\n  },\n  \"c5e3db928b984f7586d6acad70976596\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cup with a banana logo, not an actual fruit object belonging to the specified class.\"\n    }\n  },\n  \"c6f67e740d3242ef97f4e7a8d338de2c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it represents a type of object that could be used in physics simulations within a game.\"\n    }\n  },\n  \"c790d0afd4e24f08981f7e82cf871b99\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an empty wooden crate, not any object belonging to the 'fruit' class (like apple, banana, fruit bowl, fruit basket, etc.).\"\n    }\n  },\n  \"c796e2e7cc574d5f986c93dcb4f278f1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily distorted and fragmented, making it impossible to recognize as any specific fruit or object from the requested class. The quality is too low for use.\"\n    }\n  },\n  \"c7bf17a5c1f54924a02a1ef1b7bd123b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training data, and it's suitable for physics simulation.\"\n    }\n  },\n  \"c7db97126ff74a88b288329534b106cc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is highly abstract and voxelated, making it difficult to clearly identify as any specific fruit or even fruit in general. The lack of color and realistic texture makes it unsuitable for learning realistic physics parameters.\"\n    }\n  },\n  \"c7fd163741614859ba02f302ce0bce32\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a banana peel, which is directly related to the 'banana' class within the 'fruit' category. The image quality is good, and it shows a single object suitable for physics simulation (e.g., dropping, slipping).\"\n    }\n  },\n  \"c81d1ae0ca664e8ba643432e9695e232\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a market stall containing multiple types of produce (fruits and vegetables), not a single fruit object or a fruit bowl/basket as requested. The main object is the stall itself.\"\n    }\n  },\n  \"c8b47452e3bb40acaa0bfaca3c9b4083\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a fruit bowl, which is acceptable, but it also includes a large stand underneath it. We need images depicting only the object itself.\"\n    }\n  },\n  \"c8e80ca14f1c4d3eb1195de37deccb07\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object in the image is highly stylized and geometric, resembling a gem or crystal rather than any recognizable fruit from the provided list.\"\n    }\n  },\n  \"c8f59cd0563a4b15a148fb7f1eb5f291\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, blurry, and fragmented. It shows bananas but also includes parts of other objects and background elements, failing the requirement for a clean depiction of a single object or a standard grouping like a bunch.\"\n    }\n  },\n  \"ca517a7caf134c9a804469d6adee627f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not clearly depict any object from the fruit class.\"\n    }\n  },\n  \"ca9d03af291b45d0b2a77e739c713754\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single orange, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation (e.g., dropping, rolling).\"\n    }\n  },\n  \"cab161d3a7894c30a9f7c1ff137d22e2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional object (a board with colored dots) along with the banana. We require images depicting only the target object.\"\n    }\n  },\n  \"cadef64df1df497e85f401561b64975c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"cb8d98ee49274d4697406d327492b87a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The voxel style is acceptable for diversity, and the image quality is good. A bunch of bananas is a suitable object for physics simulation.\"\n    }\n  },\n  \"cbdf758f21924c168c1c3da1afed9754\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts half an orange, which belongs to the 'fruit' class. The quality is good, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"cc6e0d7591514f14b9e67dd459f31d1c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a green apple, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ccce35bd77c3495f95baed929d531343\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct types of fruit (starfruit, kiwano, dragon fruit) stacked together, violating the requirement for a single object depiction. While fruit bowls/baskets are acceptable, this is an artificial stack of individual fruits.\"\n    }\n  },\n  \"cd51597956bb4ece8bb3dd02a5abe840\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the 'fruit' class. The image quality is good, and it's suitable for use in physics simulations.\"\n    }\n  },\n  \"cda55553163c469ea47fc666ef8f6f30\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a pear, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"cda9d8983e4e44bfa9aa176a079d676d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training, and a banana is a plausible object for physics simulation in a game.\"\n    }\n  },\n  \"cea016cbfb8f490593d737ede5fec8b1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"cefa7285c9654559969cebe5db8bff6d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low, with blurry textures and jagged edges. Parts of the object appear cut off or incomplete, making it unsuitable for high-quality training data.\"\n    }\n  },\n  \"cf0fc54bc6b2404698bfb995fc887cff\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bunch of bananas, which belongs to the fruit class, but it also includes a significant portion of the surface (like a countertop) they are resting on. This violates the requirement of depicting cleanly ONE SINGLE OBJECT, as the surface is an extraneous element attached to the fruit model.\"\n    }\n  },\n  \"cfd0a5186de3408cbb6fbde0cd6144ce\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d115e527ee3a412892fd34cccd5af7f2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"d11e358b91764426b3cfb0e90f33c7da\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and appears to be made of wood or chocolate, not resembling a realistic fruit. This makes it unsuitable for learning typical fruit physics properties.\"\n    }\n  },\n  \"d241f8b58a304f788fbddec1c314bc8c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts two fruits, likely some type of berry, which belongs to the 'fruit' class. The image quality is good, and the objects are suitable for physics simulation.\"\n    }\n  },\n  \"d2a33405d2fe447fb1ebb5d82a71acb9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low, it is blurry and lacks detail, making it difficult to clearly identify as a specific fruit. It does not meet the requirement for high-quality training data.\"\n    }\n  },\n  \"d2d8e5f696bc421181a91b21c8b58a87\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, not an object belonging to the 'fruit' class.\"\n    }\n  },\n  \"d33baee44dbd4b98bcac423cabc4c31e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable, and it represents an object suitable for physics simulation in a game.\"\n    }\n  },\n  \"d35b5a6c707345c7a66c81c40087c43d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d3be8fed96eb48be88b47bbe8d2951e1\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a large collection of various fruits and possibly vegetables) arranged in a grid, not a single object as required.\"\n    }\n  },\n  \"d3e905f49e9946768cf316f8a634ce17\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional object (the surface the banana is resting on) besides the main object (banana). We need images depicting only the single object of interest.\"\n    }\n  },\n  \"d4285b671d8d4d008f71e100954dc5b8\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a fruit bowl, which is appropriate, but it also includes a pedestal, which is an additional object not belonging to the 'fruit' class. We need images depicting only the target object.\"\n    }\n  },\n  \"d431960780804c13ae6e287199524065\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including non-fruit items (what appears to be a whole chicken and garlic) alongside the fruits. We need images depicting only objects from the specified class list.\"\n    }\n  },\n  \"d48a903d948345e9904fba6e19345f85\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is low quality, blurry, and does not clearly depict any recognizable fruit. It looks more like an abstract shape or perhaps a stylized lamp.\"\n    }\n  },\n  \"d7c35c091223445b9fb38ca5aa89629c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and low-polygon to be clearly identifiable as any specific fruit or even as a generic fruit piece. It lacks sufficient detail for the intended purpose.\"\n    }\n  },\n  \"d85078aa7cc64e439e4ce6a775af7e0f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it impossible to identify the object or determine if it belongs to the 'fruit' class. The object is barely visible against the white background.\"\n    }\n  },\n  \"d91caa4e142b43b5a940abfa4d38bb14\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a large, complex structure (like a market stall or display) made of many individual fruits, vegetables, and other items, not a single fruit object or a simple fruit bowl/basket as required.\"\n    }\n  },\n  \"d953f75c23764b2b945661a1735e774b\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized character or creature, not an object belonging to the fruit class.\"\n    }\n  },\n  \"dacce3ead18d429a859c59c0d0f7a92f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"dbb37e2dee554cc3bbc8647faa7a55e2\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low; the object appears blurry and lacks sharp details, making it less suitable for high-quality training data.\"\n    }\n  },\n  \"dc6a18ebda324162a7eff88fc0cb924d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is ambiguous and does not clearly depict a recognizable fruit from the provided list. It looks somewhat like a stylized pear or banana, but also resembles a bottle or lamp, making it unsuitable for training.\"\n    }\n  },\n  \"dcb4f2a93635420084d3e351768759ab\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an additional object (the wooden board) besides the main object (dragon fruit). We need images of the fruit isolated against a neutral background.\"\n    }\n  },\n  \"dd6a424807614544835c8cc4529d6f0d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is adequate for training purposes, and it represents an object that could be used in physics simulations within a game.\"\n    }\n  },\n  \"dd84cdb121754138a863d29d4feb5248\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit object (possibly a pear or similar fruit) against a clean background. The quality is adequate, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"dda3a1f707a94c52bed79578e120937c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"df487287ffd5496b91b33f52857cbe9f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The image quality is adequate, and it shows only the object against a clean background. Bananas are suitable objects for physics simulation in a game.\"\n    }\n  },\n  \"df99c4f106bd4176ad467848994b7b8c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts pears in a fruit basket. Both 'pear' and 'fruit basket' are listed under the target class 'fruit'. The image quality is good and suitable for training.\"\n    }\n  },\n  \"dfcd54c92f6b43adb6c72fd7fb9f0c0d\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct fruit objects (apples, bananas, pears) laid out separately, not a single object as required.\"\n    }\n  },\n  \"e00fbaa4034e48859bec55fb429fa390\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it very difficult to clearly identify the fruit objects. The quality is too low for training data.\"\n    }\n  },\n  \"e0998438e00d442f833888522bf289bd\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single grapefruit, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation. The sticker is acceptable as it's common on real fruit.\"\n    }\n  },\n  \"e0c2951ac0ca47b8978b2a6eca426c3f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"e144d17029244b2a9a6abeadd25991ee\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a banana with robotic limbs attached, not a standard fruit. This composite object is not suitable for learning the typical physics parameters of a banana or fruit in general.\"\n    }\n  },\n  \"e43882cbcb684e33bd8f09293b8e00b3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a 'fruit bowl' with various fruits, which falls under the allowed classes. The image quality is good, and the objects are suitable for physics simulation.\"\n    }\n  },\n  \"e4f975e363c1491f9a4c06df15c4c39a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two stacked cups and a separate lid/label element), not a single object as requested. It depicts a packaged food item rather than a simple fruit or fruit bowl.\"\n    }\n  },\n  \"e51a79f35d1a4d4ba33aa5a81cec5935\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains the primary object (banana) but also includes a distinct surface (wooden texture) underneath it, violating the requirement for depicting only ONE SINGLE OBJECT cleanly.\"\n    }\n  },\n  \"e56ba8d694294fc4bd5a753d61b4f9aa\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single apple, which belongs to the fruit class. The quality is good, and the object is suitable for physics simulation in a game context, despite its stylized, low-poly appearance.\"\n    }\n  },\n  \"e5c50afa83604537babdec3198322fd7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"e5ca16ab58af4c41a5536e973592d61c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sweetgum ball, which is a dry seed pod. While technically a fruit botanically, it does not fit the common understanding or the examples provided for the 'fruit' class (which are mostly edible, fleshy fruits).\"\n    }\n  },\n  \"e66e65af490642d9956a83d330320c01\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single strawberry, which belongs to the fruit class. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"e69e134aac6149a3afe9068026d1bd72\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the 'fruit' class. The quality is acceptable for training, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"e7822dcde0c448289e62daeb6075d680\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fruit tart, which includes a pastry base along with the fruit. This is a composite object and not purely fruit or a collection of fruits like a fruit bowl/basket. The request is for images primarily depicting fruit objects.\"\n    }\n  },\n  \"e946cd4a578d40c9b8fa72fe93c51b60\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts two citrus fruits (likely grapefruits or pomelos) attached to a stem, which falls under the 'fruit' and 'citrus' categories. The quality is good, and while there are two fruits, they are naturally connected as a single unit, which is acceptable for this class and relevant for physics simulation (e.g., how they might hang or fall together).\"\n    }\n  },\n  \"ea5beba3e10d47f99bc81e5a0af00e16\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized banana, which is part of the 'fruit' class. The image quality is good, and it represents a single object suitable for physics simulation.\"\n    }\n  },\n  \"eadc9424f7ed46d698dba6144ee34325\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dessert in a glass with a spoon, garnished with a fruit. It does not depict a single fruit object cleanly, but rather a composite food item.\"\n    }\n  },\n  \"eaeb9e3707714c4ebd2512549d7224d5\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a highly stylized, low-polygon object with an unnatural blue color. It does not clearly resemble any recognizable fruit from the provided list, making it difficult to classify definitively as 'fruit' for the purpose of learning realistic physics parameters.\"\n    }\n  },\n  \"eb4c9396126c4686873a04e33956d55c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is acceptable for training purposes, and it represents an object suitable for physics simulation.\"\n    }\n  },\n  \"ec6d6bc9aa4b4c9dbab6641596d46556\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct objects (a large fruit, a bowl, and other fruits within the bowl) rather than focusing on a single object. Additionally, the models are very low-poly and abstract, lacking sufficient detail and realism for high-quality training data.\"\n    }\n  },\n  \"ece5889ef94f4411998063bd0aa9de34\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple distinct fruit objects (a banana and two round fruits), violating the requirement for images depicting only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"ed0537c2201d4ad7b8ddb8368d844174\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ed061d28c5e744dcaed0a38ef92fcacf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a banana peel, which is directly related to the 'banana' class. The quality is acceptable, and it's a single object suitable for physics simulation (e.g., slipping hazard in a game).\"\n    }\n  },\n  \"ed1f4008a11f42ab972b2a7138168548\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bunch of bananas, which belongs to the 'fruit' class. The image quality is good, and it represents a common configuration for bananas. It is suitable for physics simulation.\"\n    }\n  },\n  \"ed3479f72218405a9b54bbc52dc77bc9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single citrus fruit (like an orange or tangerine) against a clean background. The quality is good, and it fits within the requested 'fruit' class. It is suitable for physics simulation.\"\n    }\n  },\n  \"ed9502b8951f44369dc23c73c6894518\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (a whole watermelon and a half watermelon), violating the requirement for cleanly depicting ONE SINGLE OBJECT.\"\n    }\n  },\n  \"ef8633f392ac4aeb99998ab321dec7d3\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a whole plant (possibly a banana plant) rather than just the fruit itself. The request is for images of fruit objects, not the plants they grow on.\"\n    }\n  },\n  \"ef9c7c894f26450d9f7a33eba715c96f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"efa9dbd09d3d43a3b11818a436b42854\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains an avocado, which belongs to the fruit class, but it also includes a wooden stand/board, violating the requirement for only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"efe0becd8419449aafc7505241d0bd59\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image only shows a partial view of the banana, not the entire object, making it less useful for training.\"\n    }\n  },\n  \"effc348522c84ea883b44b4b06e6ee84\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily depicts a cake, not a fruit. Although there are strawberries (which are fruit) decorating the cake, the main object does not belong to the requested 'fruit' class, and it's not a single object representation of a fruit.\"\n    }\n  },\n  \"f00c59365ba74273a305618852da792f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single dragon fruit, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f120452f84bf4e979139b106bf9f096c\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (half a watermelon) belonging to the 'fruit' class. The quality is acceptable, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"f145e8e08ec54ba2a0a62c21e49cc70e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (bananas, paper/leaf, larger leaf/surface) rather than cleanly depicting just the fruit (bananas).\"\n    }\n  },\n  \"f164fef5e78d49bc91f5180ce68c7629\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a strawberry plant/bush with multiple strawberries, leaves, flowers, and a base of grass/earth, not a single fruit object as requested for the 'fruit' class.\"\n    }\n  },\n  \"f18ad30747b54028a71b8431e6714a4a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (likely a lemon or guava) which belongs to the specified class. The quality is acceptable for training data, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"f216bec46c3d4d54abd73455bae47ebb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a type of fruit, possibly a melon or pear, against a clean background. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f25e5865ff8746879c61c4b8158259f9\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a recognizable fruit. The shape is ambiguous and looks more like a bottle or vase than any specific fruit like a banana.\"\n    }\n  },\n  \"f2f3e5593ad247b1a203a87b2df26311\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (several fruits and a mushroom), not a single object as required. Additionally, one object is a composite of a fruit and a mushroom, which is not representative of the 'fruit' class.\"\n    }\n  },\n  \"f30bb81bc8d34db78d8da225b3cb847f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single fruit (appears to be an Asian pear) which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"f351f78796074b36a64d27552db5a462\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f378af9cc4034196aed8fc4e6a369a19\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, the object is extremely small and pixelated, making it impossible to clearly identify as belonging to the 'fruit' class. It is too ambiguous.\"\n    }\n  },\n  \"f39360ca9e264a96b45cce0a18c963d7\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the 'fruit' class. The quality is good, and it's suitable for physics simulation training.\"\n    }\n  },\n  \"f3a172605d9345b384ed9e32a469ca69\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-polygon, abstract object with unrealistic colors (yellow, green, purple) that does not clearly resemble any specific fruit or even the general concept of 'fruit'.\"\n    }\n  },\n  \"f3faf497d2594b9e8ca61b7b016428bb\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a fruit. It is unusable.\"\n    }\n  },\n  \"f4f50e818f644aa3941b8f8134b236df\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"f6dd4c962ee345c9b03f00f1c045eb1e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple juice cartons with pictures of fruit on them, not actual fruits. We need images of the fruits themselves for physics simulation.\"\n    }\n  },\n  \"f71dd6c8d9a84ff6ab723920b6acfc8e\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts only half a banana, not the whole fruit. The object appears incomplete or cut.\"\n    }\n  },\n  \"f760a03831db4a409ec0c60bad9a34aa\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a single fruit object. The banana is shown inside packaging and placed on a distorted surface, which makes it unsuitable for training. The overall image quality and composition are poor.\"\n    }\n  },\n  \"f7b7dc0b8e2c490ca83efc1a651a9334\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts an apple, which belongs to the fruit class. The quality is good, and it shows only the object (cut in half) against a clean background. This is suitable for physics simulation.\"\n    }\n  },\n  \"f7d22e5427174a9bb92d1e43e95acf0a\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"f830aa10c0274c3994f47ca0ed990681\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low. It is extremely bright, washing out almost all detail and texture, making it difficult to clearly identify as a banana and unsuitable for high-quality training data.\"\n    }\n  },\n  \"f8c4843c9a05468c97af2661921c93d0\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single mango, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f91931714ac5496ea72b3818224cdddf\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a highly stylized banana with a skeleton inside, which is not representative of a real banana and therefore unsuitable for learning realistic physical properties for simulation.\"\n    }\n  },\n  \"f9ac5185507b4d0dbc744941e9055b96\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the fruit class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f9ba91dfe1a848d5a1213f61aaddcf62\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any recognizable fruit. It appears as a stack of colored blocks.\"\n    }\n  },\n  \"fa74a39529f5462e978b4f5dbc0b8add\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The pear has an unnatural, bright yellow band around its middle section, which makes it look unrealistic and potentially unsuitable for learning standard physics parameters for a fruit.\"\n    }\n  },\n  \"fb2bb27ded7d409b9a86f7190e17da51\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fruit bowl, which is included in the specified class list. The image quality is adequate, and it shows a single object suitable for physics simulation in a game context.\"\n    }\n  },\n  \"fb3243e54dd84080bf8e84a6af26ec10\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and lacks color and texture, making it difficult to discern details. It appears more like an ambient occlusion render than a high-quality asset suitable for training.\"\n    }\n  },\n  \"fbecd3d497594041a5170e24d2d6bf40\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pear, which belongs to the 'fruit' class. The quality is acceptable for training purposes, and a pear is a suitable object for physics simulation.\"\n    }\n  },\n  \"fc2b47ccf968426f9af981a3e4581675\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pomegranate, which belongs to the 'fruit' class. The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"fca96798057a4d949abee3631cf39365\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts sliced bread or cake (possibly fruitcake), not a fruit as defined by the class list.\"\n    }\n  },\n  \"ff07d2e7345c45cb8f628c7a4d0b120f\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a donut with cereal topping, which is not a fruit.\"\n    }\n  },\n  \"ff2d841d2f15424689a851c17d452efc\": {\n    \"obj_class\": \"fruit\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single banana, which belongs to the fruit class. The quality is adequate, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"0087882cc6fc4f47b0280f0cbf876aff\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container, which fits the 'metal_crates' class description (e.g., 'metal container', 'metal storage box', 'industrial container'). The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"00a0d119fa7b45d4a22005405663e8c6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or metallic box. The quality is acceptable, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"00b78531614546cd8a9706e3891eaa38\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is a cylindrical item and does not resemble a metal crate, steel box, or any of the other descriptions provided for the 'metal_crates' class.\"\n    }\n  },\n  \"0155f1bb291245c4ba25e0db02e90238\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is shaped like a crate or storage box, but the texture is completely flat and lacks any visual cues (like shine, texture, rivets, etc.) to suggest it is made of metal. It looks more like plastic or an untextured 3D model, making it inappropriate for the 'metal_crates' class.\"\n    }\n  },\n  \"0180a9f54e3a4f66acd006f068d1cacc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a modified shipping container that looks more like a small building or shop, not a simple metal crate or storage container. It also includes a ground plane, violating the single object rule.\"\n    }\n  },\n  \"018a2be65a65434ca4406d2df0a1908c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a stylized design. The quality is good, and it's suitable for physics simulation as a rigid body.\"\n    }\n  },\n  \"025247ea296640be8b163361e7aa797e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a food storage container, possibly made of plastic or mixed materials, not a metal crate or similar industrial container.\"\n    }\n  },\n  \"037d2624e22f4fb4b7066676c6321903\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"03cbe98cebfa40c3b5819d5809156275\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"042201dac61041fabb88f483368daa3f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container/crate, which fits the requested class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"047dc1845148425cb13cec24cd2550f3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class 'metal_crates'.\"\n    }\n  },\n  \"04f2f2258ed345c0a9b788282411cfaf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"067885f0eefd460cb15521feeaf990a4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood or cardboard, not metal, based on the texture and color. It does not fit the 'metal_crates' class.\"\n    }\n  },\n  \"0679002fd7a0424485392565e6d3c5dc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"0742ed52fe3c486bbf3edb0895aef664\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"07a3eef5ff7147e69969766bcbb78da7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or industrial container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"080af208590f4b56ac88c60631571e9f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"0833c62cc79842d2a7dd1b4db0dd0064\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood or cardboard, not metal. It does not fit the 'metal_crates' class.\"\n    }\n  },\n  \"093e96d1dfd347cbbf101d06b451eed6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"09f01d62a51a4e1f8ae8c59ea0426f3a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"0af88d0aa1d24a9382e7864b6034bceb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"0ba9d0000b6d47a79b0704cc72dad7d7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a stylized metal container or crate. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"0bcaa5a224e4440f8ab0d8dcd473cad3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate covered with a cloth, not a metal crate.\"\n    }\n  },\n  \"0bd87da299374e898802546e1d0d4f87\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture and construction clearly indicate wood, which does not fit the 'metal_crates' class.\"\n    }\n  },\n  \"0be633a727c149b5b74391f7d8816825\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"0c543427225447bdb7cf2a362497f6e9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"0d354b3f9b6b43e2a1cbe047edd3a379\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a truss-like structure, not a metal crate or container. It does not fit the specified object class.\"\n    }\n  },\n  \"0d361e9909c743daa7f547bb634aa42d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden crates, not metal crates as required by the class description.\"\n    }\n  },\n  \"0d558523d4fb4fdab3e75f087f19fca8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate with metal reinforcements, not a metal crate. The primary material is wood, which does not fit the requested class 'metal_crates'.\"\n    }\n  },\n  \"0db114d7753344d6825aa4f21ec56db9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"0def9e3a41c044f6a6a17160fdad05cd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three crates) instead of a single object as required.\"\n    }\n  },\n  \"0e24de6fa4e04971aa20c22d258cde32\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily made of wood, although it has metal bands. It does not fit the definition of a 'metal crate' or related terms which imply the main construction material is metal.\"\n    }\n  },\n  \"0e4e63c63614433d84bb2534f3a19175\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily made of wood, not metal. While it has metal bands, it is a wooden crate, not a metal crate.\"\n    }\n  },\n  \"0e60a62a8f1e4048b638a32eb0661015\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for a sci-fi setting. The quality is good, and it's appropriate for physics simulation use cases.\"\n    }\n  },\n  \"114b4a09c9f24f10abd5439b0804fc70\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood material.\"\n    }\n  },\n  \"114c846790cc46fea119833b6b82f5eb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects (stacked crates), while the requirement is for images depicting only a single object. Additionally, the material appears more like plastic than metal.\"\n    }\n  },\n  \"123c7146d631425683fca388494042a0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"124c8eab5a5046699d29aa1d84c75137\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container (an ammo box), which falls under the 'metal_crates' class. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"12629e83cdb142e895c5a3829bfd49b2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The material is incorrect for the requested class.\"\n    }\n  },\n  \"12f5cec5558545ffa13081576a65d53c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/chest, which belongs to the target class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"134d0d1134b34649a2cc8b8a51d8f0bf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate with some metal fittings (handles, corner reinforcements), not a crate primarily made of metal. Therefore, it does not belong to the 'metal_crates' class.\"\n    }\n  },\n  \"134ef83544d545fc970c4295cd140c3d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal crate, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"137cbaeaf95e495db6d0c1a4d9a5760d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal crate/container, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game context.\"\n    }\n  },\n  \"13d08f5db8104f2693ee32e08dc836b3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely black and does not depict any object.\"\n    }\n  },\n  \"1447cee3d4a7489ba77b5e272996d2f4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"149556201a8a4200b216eb9eab13541c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container, which falls under the 'metal_crates' class. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"14c8445c05d54559a74148d7475706aa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the requested class. The quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"155398966f0a49a1bc3d6c3186f9e47f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a shelving unit, not a metal crate or container as described in the class list.\"\n    }\n  },\n  \"15bb6b0f2ded49da947665d94f1f002e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it very difficult to discern the details or material of the object. It lacks the quality needed for training data.\"\n    }\n  },\n  \"15d00d76890d458ea454d34ce08cbda5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The texture clearly indicates cardboard, not metal.\"\n    }\n  },\n  \"15ea2fcc2ed84e449bed0af826861b3c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"166e97868ea44c0fb37a0b45812d7ebd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"16ccda0f28d04b3d8b5b480a5f53df3c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal container/crate against a clean background. The quality is good, and it fits the requested class 'metal_crates'. It's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"1745fd7ace2846bba2b34e31a448049a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden crates, not metal crates as specified by the class name and description.\"\n    }\n  },\n  \"17f4b98f15b2454a904acdcae0778340\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal shipping container, which falls under the 'metal_crates' category (specifically 'metal container', 'shipping crate', 'industrial container'). The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"18ec2b067ad94baeb79cb5f2041e474c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a crate that is primarily made of wood, with only metal reinforcements on the corners. It does not fit the class 'metal_crates'.\"\n    }\n  },\n  \"19a32159a3d6443e95105f4f7cb51c39\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"19c459ae193744dd9aee75e038cb6cbf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate, albeit in a stylized/sci-fi design. The quality is good and it's suitable for the requested class.\"\n    }\n  },\n  \"19c943e409644a8281cc96f63e6743c6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"1a7c9da570fd44d189da0560bf3a37d1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a sci-fi aesthetic. The quality is good, and it's suitable for physics simulation as a rigid body.\"\n    }\n  },\n  \"1aea9cf34de840cc830a75e1d1ebc229\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates as requested by the class 'metal_crates'.\"\n    }\n  },\n  \"1bcef93a72c74e9683720788716ed9a6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The material is incorrect for the requested class.\"\n    }\n  },\n  \"1c5d571c069f4cb2a993556ec8ee0889\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"1cbd24c66ea2479490b1515382801885\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic, not metal. While it is a crate/container, it does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"1d8edb9fb6c74a52a3a661e2371568ae\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its details. The quality is too low for training data.\"\n    }\n  },\n  \"1dd42bdf61c74428ba730f0fcac4327e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made primarily of wood or a mix of wood and metal, not clearly a metal crate as required by the class description.\"\n    }\n  },\n  \"1dfcb9bd7b6f42339109ad65d06ef237\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture and material are clearly wood.\"\n    }\n  },\n  \"1ecd6f2521e64abdbbc40f24a3356b07\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily shows a large textured surface (floor or platform) rather than clearly depicting a single metal crate. The crate itself is very small within the frame and lacks detail, making it difficult to identify clearly. The image does not cleanly depict one single object as requested.\"\n    }\n  },\n  \"1f97e554b5c44978ae8e89b0cb3dcca8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container suitable for the class. The quality is good, and it's appropriate for video game use and physics simulation.\"\n    }\n  },\n  \"1fee34f4d452494ea867ae17dc15517f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"20771851c5754dd5a94a1e09572c426c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a metal crate.\"\n    }\n  },\n  \"209733c30f7f479ba97c01e83e78c2b1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor; the bottom part of the object is significantly overexposed and washed out, making it difficult to discern details and material properties.\"\n    }\n  },\n  \"20d8b8dc92cf4fa4b359023a3aea9b20\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or storage crate. The quality is acceptable for training data and it's suitable for physics simulation.\"\n    }\n  },\n  \"2103afffe38f4e5f878409878d8ed506\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood material.\"\n    }\n  },\n  \"2114c491f9534120b71233479c0ed72c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic or possibly wood, not metal. The texture and color do not align with the requested 'metal_crates' class.\"\n    }\n  },\n  \"213a49f471024b6f8584dc5d7edcf070\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The primary material is wood, although it has metal fasteners.\"\n    }\n  },\n  \"215ea58143db4a7e947c0dc9eea9e1a6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a type of metal crate or container, suitable for the class. The quality is good.\"\n    }\n  },\n  \"2266c4677036435f9a0ed23a89b1da8b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The texture is clearly cardboard.\"\n    }\n  },\n  \"22d789c645db4f0b908b66e31240638e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily a wooden crate with metal reinforcements, not a metal crate. The main material is wood, not metal.\"\n    }\n  },\n  \"22da4fd40bfc4e21be1092d5e5905088\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a stack of wooden crates, not metal crates. The texture and color suggest wood.\"\n    }\n  },\n  \"22f817092ff34ed8b622281b5c3e7dcf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. Additionally, the image quality is very low due to pixelation.\"\n    }\n  },\n  \"231b3275ccf540378f9cadf27e7de56d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is primarily made of wood, not metal. While it has some metal parts (reinforcements, handle), it does not fit the description of a 'metal crate' or 'metallic box'.\"\n    }\n  },\n  \"23af43363ba84509ae7ab7a1ff1580c4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and lacks detail. It's essentially a black silhouette, making it impossible to determine if it's a metal crate or any specific object.\"\n    }\n  },\n  \"241dd821296544f9a2507e53351459b0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"2506fe4fa73740d6ac6cbb1f495b4fd5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/box. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"25dbd827927a4f4a82001232876b08cf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which fits the requested class. The quality is good, and it's a suitable object for physics simulation in a game context.\"\n    }\n  },\n  \"25e04de3ba4b498b94fa7e570437bfbf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"25f6f7ce1c18404a99ff0742cf1fc7fa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The quality is good, and it's suitable for use in video game development and physics simulation.\"\n    }\n  },\n  \"26a4cd13ed0048239a0f61dd5e4562d4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"26ac670ee9a84e5397749590f2b12745\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very basic, untextured grey box. It lacks any details or textures to identify it as a metal crate or any related object. It appears to be a low-detail placeholder model, not suitable for high-quality training data.\"\n    }\n  },\n  \"272386dbe3894114ba4815bbbe579a5b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which fits the specified class. The quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"2a0c2342956648ba813e9a56533b4cc2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden crates, not metal crates as requested by the class description.\"\n    }\n  },\n  \"2a561fd3efde4de589400b159a4909fe\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The quality is good, and it's suitable for physics simulation in a video game context.\"\n    }\n  },\n  \"2b82f2d72ca54dc89726e83e5293ee2e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. It does not belong to the specified class 'metal_crates'.\"\n    }\n  },\n  \"2b8ad0ee3b474161b888aeb02254f422\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate.\"\n    }\n  },\n  \"2bedf3cab81a4e8ea6b772405ceafa00\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"2c228962c4dd4429a0ce4d6ee9a23600\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, fitting the class description. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"2cc4b6e6a6bd4e3f932fde64a21b7fda\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a metal container or storage box, fitting the requested class. Although it has a wooden panel on one side, the main structure appears metallic. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"2d48359fb3d449899f9dee69dc1fa46b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate with metal straps, not a metal crate. The primary material is wood.\"\n    }\n  },\n  \"2e372e24cd2f4b70beac8b1dbbb2634b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"2f3daeb2126146cc81dc4ca8bcf96c4e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, suitable for the class. The quality is good, and it's a relevant object for physics simulation in a game.\"\n    }\n  },\n  \"2f48782f3c924079a2554113e086b539\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building (possibly a barn or shed) on a ground plane, not a metal crate or similar object.\"\n    }\n  },\n  \"2fef678ed4924bf0a157d7fb06cc3f75\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is rendered in plain white without clear metallic textures, making it ambiguous whether it belongs to the 'metal_crates' class. The reflective elements in the lower part appear low quality or like rendering artifacts.\"\n    }\n  },\n  \"3142669aa80142eb93f316c81bd18d85\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate with metal reinforcements, not a metal crate. The primary material is wood, which does not fit the target class 'metal_crates'.\"\n    }\n  },\n  \"3154c6751cd345eea0b263a1c822ac30\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container, which fits the 'metal_crates' class. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"317cefbb22c545eebe78ef61b8a84566\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"32cf33de834343caba3a160b7d26aee9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"32f726f65d0c49fe928785cbdead8ea7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"3422a5b3a08c476495acc3ceb04bace6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood, not metal, based on the texture.\"\n    }\n  },\n  \"342efe4d70f94d37a4edd66a15c39502\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for the class 'metal_crates'. The image quality is good, and the object is isolated against a clean background. It's appropriate for video game development and physics simulation.\"\n    }\n  },\n  \"34ad0195e1314393ae3e4539f69292f0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box with a game controller inside, not a metal crate. It also contains multiple objects.\"\n    }\n  },\n  \"350c8f386351437680d0035f7da61b46\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is clearly a crate, but the texture and color make it look like wood or plastic, not metal. The requested class is specifically 'metal_crates'.\"\n    }\n  },\n  \"35f1d78d5b7d41b9b8f8e0d403b7f379\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate, suitable for the 'metal_crates' class. The quality is good, and it's appropriate for physics simulation use cases in a game.\"\n    }\n  },\n  \"36380c606bae46848237e9bbe073fa3b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container, which fits the requested class 'metal_crates'. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"3659be7564a34c3ca158a1d5586cb386\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two distinct objects (or one object and its separate lid), violating the requirement to show only ONE SINGLE OBJECT.\"\n    }\n  },\n  \"37e7f7e4b6c54bcc838fbbf660dc1f7f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"383d9b9cc552446788a6d9bc11f2c0fe\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object is a well-rendered, single metallic container with an industrial/sci-fi aesthetic. It fits within the broader definitions of 'metal container', 'industrial container', or 'metallic box'. The quality is good and it's suitable for physics simulation.\"\n    }\n  },\n  \"384a82afd57b420193a6b7d2ac48e1d8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The material appears to be wood planks with some metal reinforcements, but the primary material is wood.\"\n    }\n  },\n  \"387b46af5a35413aaa20073fb7bfc197\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is made of wood, not metal. It resembles a wooden pallet or crate, not a metal crate.\"\n    }\n  },\n  \"390e8201432a4ef3813316953cacee95\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. The material is incorrect for the requested class.\"\n    }\n  },\n  \"3a0038be8ff94941a01713507c52f089\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"3a35e0733ffd4856be74cb2929293429\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost completely white and does not clearly depict any object, let alone a metal crate. The quality is extremely low.\"\n    }\n  },\n  \"3af0c95925984efd9015899b5cbe4c7f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks texture, making it impossible to determine if the object is made of metal. The quality is too low for training.\"\n    }\n  },\n  \"3b1ca8760f5541a8b3e65d983dd9cdcd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3b342f9d809b471c99ffd046ba08b94f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture and material are clearly wood.\"\n    }\n  },\n  \"3b37b34e19334a05894cc4dff7685eaa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a very small, indistinct object that cannot be clearly identified as belonging to the 'metal_crates' class. It lacks sufficient detail and clarity for training purposes.\"\n    }\n  },\n  \"3b44675a239e4781a4b1ead8f7065aa4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal crate/box, fitting the class description. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"3cca6b5c03e94738839c815ee1433632\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"3cd5e9c8e7e4438db89169445afd7ccd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"3d86014e5f9b47bfbfd7aaa764c6cedd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate as required by the class description.\"\n    }\n  },\n  \"3daeaf6bf7a2454faaf1f97131bdb664\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"3e679f329a314583ab0cbb7caf33c163\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows cardboard boxes, not metal crates as required by the class description.\"\n    }\n  },\n  \"3e9fe238a2984bceb107bc2568db2653\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a stylized metal container or crate. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"3fddc1e9ae1e4cb0bd39cbbd2c7fcf4f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"40b8381fbd3f4177b97e72203e8f8852\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making the object almost completely invisible and impossible to identify as a metal crate or anything else. It is of very low quality.\"\n    }\n  },\n  \"41857abdae7e4d02a6c5f247355ede22\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"41e1bb4ed33443d3999369897bcb20bc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The objects in the image resemble generic boxes or crates, possibly wooden or cardboard, rather than specifically metal crates. They lack the visual characteristics typically associated with metal (texture, sheen, construction details). Additionally, the image depicts multiple objects, not a single one.\"\n    }\n  },\n  \"42987b77eae64e4c9013843eac500c32\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is an IBC tote, which consists of a plastic container within a metal cage. While it has metal components and could be considered an 'industrial container', it doesn't strongly represent the core concept of a 'metal crate' or 'steel box' due to the prominent plastic part.\"\n    }\n  },\n  \"438b59afc7b0413f90c2daf657102d89\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"43c1323074be441daa304250ed154583\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4412b693cb0443349ac556023a9c5f15\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of cardboard or wood, not metal. The texture does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"445fb0bbf14d46a8ba3e67ffcb435c14\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal box/crate, which fits the requested class. The quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"44bbcc3f08914eefa6e50691c30fbf38\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a very low-polygon, low-detail box with a plain brown texture. It lacks any characteristics that would clearly identify it as a *metal* crate (e.g., metallic sheen, rivets, specific construction details). It could be made of wood, plastic, or other materials.\"\n    }\n  },\n  \"451bb83c53e14366858fb5f2eedef9d4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is excessively bright, washing out almost all detail and texture. It's impossible to determine the material or properly assess the object's features, making it unsuitable for training.\"\n    }\n  },\n  \"45589060a79549ecb85de59d045127d9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden crates, not metal crates as requested by the class description.\"\n    }\n  },\n  \"456220674897457ca25fe03892c48c5f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"47a78ed269db4024b7d56ec95b5de8d1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be primarily made of wood with metal reinforcements, not a fully metal crate as required by the class description.\"\n    }\n  },\n  \"47f7f9679a95418b98a5a360c17cd43c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"48ef7267d1c447d886e399fe3b3dfb3f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate of good quality, suitable for the specified class and physics simulation.\"\n    }\n  },\n  \"48f7e5255e4040fe9ba28874b4787a39\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is rendered without any texture or material definition, making it impossible to determine if it represents a 'metal' crate. It looks like a generic, untextured box, which is not suitable for learning material properties for physics simulation.\"\n    }\n  },\n  \"495ac1b58684421db00091a63047ed1a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate with metal corner reinforcements, not a metal crate as required by the class description.\"\n    }\n  },\n  \"49f912d0a3aa47e1abb2bc3d5f367aa8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object lacks any texture or detail to suggest it is made of metal. It looks like a generic, untextured box rather than a metal crate.\"\n    }\n  },\n  \"4a3d8703810c4fdb9edd86750c24e535\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or industrial container, suitable for the 'metal_crates' class. The quality is good, and it's appropriate for physics simulation in a game context.\"\n    }\n  },\n  \"4ae035ea89ea40bbaa82403b9c36afab\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"4ae27fce65084ec7bbc83fd89babe82f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a type of crate or container, fitting the 'metal_crates' class description. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4b9c63c0cfd644d988c5712797cb7e2e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"4ba8fdf5fc60482ba4f73cd7a519f6e9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"4c16015731624e57b89cba406b15362b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for the class 'metal_crates'. The quality is good, and it's appropriate for physics simulation in a game environment.\"\n    }\n  },\n  \"4c1fd6d2525d4872b569fb1377cd20b5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"4c5ac05c16494435b456e7deabbc42b7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal crate or container, suitable for the 'metal_crates' class. The quality is good, and it's appropriate for physics simulation.\"\n    }\n  },\n  \"4c5d81d4b18644df9f9f2959f198f186\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"4d49691a269745cabe0e1d5c1c3bef9b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"4d96d8b2aab94df399fbd365f30acacb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is clearly made of wood, not metal. It does not belong to the 'metal_crates' class.\"\n    }\n  },\n  \"4e098cbe642a45659ce92d1f18b737cd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal shipping container, which belongs to the 'metal_crates' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4e34e0802dd04e1592082504a05c181d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's colors (purple and blue) and features (panels, vents) make it look more like an electronic device or a stylized plastic container rather than a typical metal crate. The lack of metallic texture is also problematic for this class, especially for physics simulation.\"\n    }\n  },\n  \"4e4115d08eae4e549422245059c7cff7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as requested by the class 'metal_crates'.\"\n    }\n  },\n  \"4e470e6125984d95ab88973a9385478f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a storage crate or industrial container, fitting the requested class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"4e622ef1a09c43e28a49d9fa37f9eeee\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. The material is clearly cardboard, not metal.\"\n    }\n  },\n  \"4f664b8d9beb46a89e5a7618340482aa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object (shipping container) which belongs to the 'metal_crates' class (specifically 'shipping crate', 'metal container', 'industrial container'). The image quality is adequate and it is suitable for physics simulation.\"\n    }\n  },\n  \"4f6ebf2c87d546498591a6b28f84a4ef\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, likely for cat food, not a metal crate.\"\n    }\n  },\n  \"5058de3cd6134e158b92a4737e62a9ab\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a stylized/sci-fi design. The quality is good, and it's suitable for use in a game and for physics simulation.\"\n    }\n  },\n  \"516a1ef5df1c4fb288f1566c5c5525d6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate.\"\n    }\n  },\n  \"525f8a47128d4caba44c455725694bf6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box (specifically an Amazon Prime box), not a metal crate or container as specified by the class description.\"\n    }\n  },\n  \"52999802cc9049d7a66a617cc02a5b61\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very low-detail, untextured 3D model that doesn't clearly depict a metal crate. It lacks the necessary visual features and texture to be identifiable as belonging to the target class and is too simplistic for high-quality training data, especially for physics simulation purposes.\"\n    }\n  },\n  \"542a0569139e4c1d84e6d98d8b129e9d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that can be identified as a stylized metal container or crate, fitting the requested class. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"547d328361eb4ed98a4af7333dae4ffc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crate with a metal frame, which fits within the 'metal_crates' class, including terms like 'shipping crate' or 'storage crate'. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"54a322cd61554ff18793960cdff0c00a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate (specifically a TNT crate), not a metal crate.\"\n    }\n  },\n  \"54e507afc9484daaba001f6d77635d24\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a metal crate or container. The quality is good, and it is suitable for the specified class and potential physics simulation.\"\n    }\n  },\n  \"55f4aa26a4f04a07b1f9489e88cdb3eb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The object appears to be a plastic crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5627e9c3e0b64f01ac5b96f9e66de0c0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"56298d9c30624704a6aef678e08d3010\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or industrial container. The quality is good, and it's suitable for the intended use case.\"\n    }\n  },\n  \"5827545d50c04bfc82edbb45264f0456\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily made of wood, not metal. While it has a metal frame, it doesn't fit the description of a 'metal crate'.\"\n    }\n  },\n  \"593ce32ae06d4026b8f968d6f04ce506\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"596fe5fcb4634ca7bba889748adb9bce\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate. The texture and color suggest wood rather than metal.\"\n    }\n  },\n  \"5a19896777a24097892cc7410eb3c414\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5a24ee58200349e98979c05ea5d87f0d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal container or industrial crate. The quality is good, and it's suitable for physics simulation as a solid object.\"\n    }\n  },\n  \"5b0b9491c41f4d31addf043112284394\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5b6f27adb8a541e3953a6ade24723740\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class 'metal_crates'.\"\n    }\n  },\n  \"5bdfc5dfa5ff4b499f49923e1a7c6d02\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or industrial container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5c3363d18084408c881ab725b111c8e3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is acceptable, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5c9ab8ad1f4f4dcc8b0a76cb9cebd0e2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5cb4d0165aea4fecbc84f7400e57082b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of cardboard or wood, not metal. It does not fit the 'metal_crates' class.\"\n    }\n  },\n  \"5d02dfbe63044777a6c5627e0a9e80a1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5d5e799b652f48d094d33c200da9cc68\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be primarily made of wood with some metal framing, not a fully metal crate. Additionally, the image is quite dark and has strong shadows obscuring details, reducing its quality for training.\"\n    }\n  },\n  \"5e19260f32d64c74a3e6f4a78a7381b3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5e3dc08e6f174dbaa90f03a0d2c4332c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5e6cf3d76e744600b35d5d71ea51e81a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5e7c981ad2974772bf85028039ab9d35\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. The material is clearly not metal.\"\n    }\n  },\n  \"5eb6d7d8e0ab4db9928486ffe958c297\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"5ed066e472a341b7b29b2535e3fc3feb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic, not metal. It is a storage crate, but not a metal crate as required by the class definition.\"\n    }\n  },\n  \"5f1d96c109d64df98859df24c9d9b1b6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, not a single object as required. Additionally, the objects themselves are not clearly identifiable as 'metal crates' or similar items from the class list; they look more like electronic components or small project boxes.\"\n    }\n  },\n  \"5f328b69346a42bc8fb6e4c03b17bdd5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5f50066a5a154386b201d11c9d99fefb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/box/chest. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"5f7ee0b43aaa4e36bfaa7e25f5609f96\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The material does not match the requested class 'metal_crates'.\"\n    }\n  },\n  \"5f8a853682c84669825f554429dc9fb9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or storage box, suitable for a video game context. The quality is good, and it's appropriate for physics simulation.\"\n    }\n  },\n  \"5fa3567665a4436899f7e3bad6e3db7b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'metal_crates' class (specifically, it resembles a metal storage box or chest). The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"5fdd10083f664eb7b18bf71c054bfafd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts cardboard boxes, not metal crates. The material is clearly cardboard, not metal.\"\n    }\n  },\n  \"605263600fb4447199e53a8e2fe9d975\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate. While it has some metal elements (banding), the primary material is wood, making it unsuitable for the 'metal_crates' class.\"\n    }\n  },\n  \"60d83f34fbb34d2da4300be7b86ee691\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate, suitable for the 'metal_crates' class. The quality is good, and it's appropriate for physics simulation.\"\n    }\n  },\n  \"60ff6990d7bf4e55ba8cec8c0743beab\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low (blurry, low resolution, distorted geometry). It's difficult to clearly identify the object as belonging to the 'metal_crates' class, and it does not meet the requirement for high-quality training data.\"\n    }\n  },\n  \"6134600590fb465aa81084727e8c4a81\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object lacks texture and detail, making it impossible to determine if it's made of metal. It looks like a basic, untextured 3D model rather than a realistic metal crate.\"\n    }\n  },\n  \"61f824c988674eba80b64ffdefdf793d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"62411693da734fdd97d37ceab494bfd6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"629ba19d493643ecbac87769548f6c5e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture and material are clearly wood.\"\n    }\n  },\n  \"63eff560f5fb43f097dc4e7184759f41\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"6403fc9a2a504b9fb83723029c0d0b2a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as requested by the class description.\"\n    }\n  },\n  \"643354db2cf34657a876357bce295a80\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container, albeit with a sci-fi design. The quality is good, and it's suitable for physics simulation purposes in a game context.\"\n    }\n  },\n  \"648fe0b4f71848fb87e692e1fed75fe8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a crate, but its construction (planks, framing) strongly suggests it is made of wood, not metal. It does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"64ab5a96c7eb4ac290976530c0721048\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate with metal reinforcements, not a metal crate. The primary material is wood, which does not fit the requested class 'metal_crates'.\"\n    }\n  },\n  \"6509af6a6f4d4ad5b61757c2aa3b840e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate as requested by the class.\"\n    }\n  },\n  \"65136c26f8f74ec297f6ea7bd225562e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crate object which fits the general description of 'storage crate' or 'shipping crate'. Although the texture is plain and not explicitly metallic, the shape is recognizable and the image quality is good. It is suitable for physics simulation.\"\n    }\n  },\n  \"6597d3858df94da698ece8e0038f50b7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/box, which belongs to the specified class. The quality is good, and it's suitable for use in video game development and physics simulation.\"\n    }\n  },\n  \"65be3c894ac640768ee8c6743e079c6e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily a wooden crate with metal reinforcements, not a metal crate as required by the class description.\"\n    }\n  },\n  \"66293c629658413b8b9c0b822cb5264d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, which fits the requested class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"663bd45da96b4e0b8113389cb01125ad\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"67cc0124e2404201a455dd5078c3f46c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'metal_crates' class (specifically, it looks like a metal storage box or industrial container). The quality is good, and it's suitable for physics simulation purposes in a video game.\"\n    }\n  },\n  \"67f10b946eb84e21a2d12bbf03b844ac\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"6862d3ee2d0141199173631314467143\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single one. Additionally, the objects do not clearly resemble metal crates; their appearance is more akin to wooden or plastic containers, and they are depicted in a highly stylized (voxel) manner.\"\n    }\n  },\n  \"693dc5335d70418999ebbf7a8c9efb59\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crate object against a clean background. While the texture is simple and not overtly metallic, it fits the general shape and form of a crate ('storage crate', 'shipping crate') and is suitable for use in a video game context, including physics simulations.\"\n    }\n  },\n  \"69fe3211493c4a4db26ad0c4e2e49a83\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is clearly a crate or container, but its texture and color (bright white, smooth) do not strongly suggest it is made of metal. It looks more like plastic or a futuristic composite material, which doesn't fit the 'metal_crates' class requirement.\"\n    }\n  },\n  \"6a1cfc1e05284c3d803f735c86f2e405\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"6a73900ab29d417c9145c584dcda0fba\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood, not metal. The class is 'metal_crates'.\"\n    }\n  },\n  \"6b6588fae0af4f4d94842f397df5554b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The target class is 'metal_crates'.\"\n    }\n  },\n  \"6c93ab64f1854d398def02a5cf0b440f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"6cec1cd86b50477b842494f4278c8e1e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is severely distorted, low-resolution, and does not clearly depict an object. It is impossible to determine if it belongs to the 'metal_crates' class. The quality is too low for training data.\"\n    }\n  },\n  \"6cfc60d55bd149a99a078fd49744ae93\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates as required by the class description.\"\n    }\n  },\n  \"6d198f56b295451a972e63c95921436d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a metal crate, which fits the requested class. The quality is good, and it shows a single object suitable for physics simulation in a game.\"\n    }\n  },\n  \"6d888811b3204a25817e333eb531fff5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"6e54bbfa62b24e58a767152d230b2a01\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"6eb58182e9f04ccc855b036bbea5db98\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate. The texture and overall appearance suggest wood as the primary material.\"\n    }\n  },\n  \"6ec160372ee646938961f716276d4976\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate with a weathered texture, which fits the class description. The quality is good, and it's a suitable object for physics simulation in a game environment.\"\n    }\n  },\n  \"700b0a7b336f4cb6ba5dea874bd76585\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a piece of machinery or a generator with wires and gauges, not a simple metal crate or storage box as defined by the class list.\"\n    }\n  },\n  \"70d7a6a685d04ce7ace7092b2461e1fa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"70f748401ee04dafbdb3fdb54748795f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as specified by the class.\"\n    }\n  },\n  \"713484d8f2284528bbd28ad41e197b24\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows cardboard boxes, not metal crates as requested by the class description.\"\n    }\n  },\n  \"7174c6167d854c59a98d56e8550af2e6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or chest, suitable for the class 'metal_crates'. The quality is good, and it's appropriate for physics simulation.\"\n    }\n  },\n  \"72ffa9b10cf642f0a03ddbe35d9ef784\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"73abcde06128458d8ce339636f997176\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it very difficult to discern the object's details or material. It looks more like a wireframe or schematic than a textured 3D model, and therefore does not clearly depict a metal crate.\"\n    }\n  },\n  \"73fcb1589b81413ead568e0bae450d08\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a mug or tankard, not a metal crate or any related term like steel box, metal container, etc.\"\n    }\n  },\n  \"748f17ab03b14b65a6bcda52be71b971\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a wooden crate, not a metal crate as requested by the class description.\"\n    }\n  },\n  \"74d467eb13b44d3890862046c3539992\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"74d5ce81aacd4c9c82290d3f90635513\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic, not metal, and resembles a storage tub rather than a metal crate or box.\"\n    }\n  },\n  \"74eb2faadee44757b7e6d579d78d9000\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too severely cropped and does not show enough of the object to determine if it belongs to the 'metal_crates' class. It only shows a small fragment of a surface.\"\n    }\n  },\n  \"75dd762ba2d748cd9e341551bd0631a2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture, making it impossible to identify the object as a metal crate. The quality is too low for training.\"\n    }\n  },\n  \"76563bcfa9be4a1d9977fb8057f3021d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily a wooden crate with metal corner reinforcements, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"76fa80950b1f48a8ad6a8441fe443241\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate as required by the class description.\"\n    }\n  },\n  \"779290935b8b4dedbd39c2259d44faef\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"7810db828acb44108390e2b861f55105\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"785d0ee143bb422d80742db1c1ab82a9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a metal crate.\"\n    }\n  },\n  \"78ada3be359c403a95d374e87240ec00\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern any details or even the shape of the object clearly. It does not resemble a metal crate.\"\n    }\n  },\n  \"795e775f06e24bb4a3c741d2b9560c84\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood, not metal. While it has metal fasteners, the primary material does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"7a09f75755af4975a5cb3dfa57c7f53b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container/crate suitable for the class. The quality is good, and it's the type of object that would be used in physics simulations in a video game.\"\n    }\n  },\n  \"7a6368d0e3ed4edf919cb0b7a0f8787f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class 'metal_crates'.\"\n    }\n  },\n  \"7a6a826f1d564304bd779c6607180e1f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is depicted with a bright green, non-metallic texture, making it look more like plastic than a metal crate. This does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"7a78be45d1bc4c359b0d410484efa565\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal chest/crate, which belongs to the target class. The quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"7ad5476043e041d8bf42054d6a2bcea3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"7b2aa5debc054c3a8f70c07c35352d46\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crate that appears to be primarily made of wood, not metal. While it has metal corner reinforcements, it doesn't fit the 'metal_crates' class description well.\"\n    }\n  },\n  \"7b9426222f0c4838bfbc13850095bb3f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a plastic crate, not a metal crate as specified by the class.\"\n    }\n  },\n  \"7cca6fac16954e6b9799c7f28001c05b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates as required by the class.\"\n    }\n  },\n  \"7ec06f3b181c47149d31b521b87ed799\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. It does not belong to the requested class.\"\n    }\n  },\n  \"80030a7b36d740fa97480e9a469e9ac1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate with good quality and lighting. It fits the requested class and is suitable for physics simulation.\"\n    }\n  },\n  \"80ad4238859c41c1b3e62d4c215410c1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the metal_crates class (specifically, a sci-fi style metal container/crate). The image quality is good, and the object is suitable for physics simulation in a game context.\"\n    }\n  },\n  \"8105239f45d5483096d3ffbc309e799b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal crate or container. The quality is good, and it is suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"811d56f436dd4b99a670ef2824577693\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not clearly resemble a metal crate or any of the related terms. It looks more like a stylized container, possibly made of plastic, and its specific identity is unclear from this angle and rendering style. It also contains another object inside, violating the single object requirement.\"\n    }\n  },\n  \"8136ea79bbbc433990d15313c4051528\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container, which fits the 'metal_crates' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"81b915ffcf9c4f888935d42142bed8dc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate.\"\n    }\n  },\n  \"82e0bcfe1f6b41efbe10deed14185b88\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate with metal reinforcements, not a metal crate as requested by the class description.\"\n    }\n  },\n  \"8367053dfc3e4e0896138d9a864e264d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, fitting the class description. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"84b9533174174bea8b3117ad6ff08512\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects: the metal crate and the platform it is sitting on. We need images depicting only the primary object (the metal crate).\"\n    }\n  },\n  \"84d141ab1742471c8135e4843235c354\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"857afcd1a0ab4c958f5c912474d4f430\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (four metal containers), not a single object as required.\"\n    }\n  },\n  \"872687e760cb4cf19b1aeb102b5039b0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"872d41d63510485eb30915c510ee1c33\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for use in a video game. The quality is good, and it's relevant for physics simulation.\"\n    }\n  },\n  \"87d2912496bf4d689ba3df0df137d068\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"8862181b9fb94836aa2f3f0d41bf2c4c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single shipping container, which falls under the 'metal container' or 'shipping crate' categories. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"88fe205708fd424db0cb4fa7a05347b5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"893532ea87284c749c4b12b39dcdc218\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The class required is 'metal_crates'.\"\n    }\n  },\n  \"898d2bdc7aff4543a367f65941c47426\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"8a590234c3fb479a901d172fa5e64323\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"8a97a4bfb3e440e5b0720312eaf81401\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too small and far away in the image to be clearly identified as a metal crate or any related item. It lacks sufficient detail for training purposes.\"\n    }\n  },\n  \"8b5c570dab694d8bb9191f279e8372b1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates. It also contains multiple objects (crates, shovel, and an artifact).\"\n    }\n  },\n  \"8b942eb1fdbd4204a54d0e613bfc16ec\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"8c5581a8e6b94a7f8133d9eed2d8df5c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. The material is clearly cardboard, not metal.\"\n    }\n  },\n  \"8d3cd20c25cc4557b2afb41edf2b0769\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, suitable for the class. The quality is good and it represents an object commonly used in video games and physics simulations.\"\n    }\n  },\n  \"8dce2290f0164abf8b5296c83d7e7d8a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, which fits the requested class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"8ea1c246a6714a9e9849df1f62efc5af\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a metal crate.\"\n    }\n  },\n  \"8ea36edd521b4c1fa44f0403311e467c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for use in a video game context, including physics simulations.\"\n    }\n  },\n  \"8eca936ac38e4939bb39fe046c2d8173\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate.\"\n    }\n  },\n  \"8eda583592f34498a350f6cc5a650042\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal container or industrial container, which belongs to the 'metal_crates' class. The image quality is good and the object is suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"8ef0562ae2104c04aa5b1e440c96c5be\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted looks more like a barrel or a pot, not a metal crate or any of the related terms. It does not fit the visual characteristics of the target class.\"\n    }\n  },\n  \"8ef839e8b29e4247adc65c81b88fed40\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The material is incorrect for the requested class 'metal_crates'.\"\n    }\n  },\n  \"8f10a3a580644eb5b8e8cab6ac2627a9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, which fits the requested class. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"90857110cb2b440ea9c856b36eb331a8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely black and does not depict any object. It is unusable.\"\n    }\n  },\n  \"90d05914d8684a9faf5fd40adc134374\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class 'metal_crates'.\"\n    }\n  },\n  \"9243b637052840cc8583b4b8db9c9a22\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood material.\"\n    }\n  },\n  \"9390828526ad4798ba27986f3f668402\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects, not a single object as required. Additionally, the objects themselves are not clearly identifiable as typical metal crates or containers from the provided list.\"\n    }\n  },\n  \"93d4333ad5764cf7941744b09cafff78\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9450f244bb2f4eac831d7b4bbaa25de5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is extremely low, the object is very small and pixelated, making it impossible to clearly identify it as a metal crate or related object.\"\n    }\n  },\n  \"948a3970e3654f0682cb3393f7e1a367\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"95004774386840b8825de93a659eb63e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"95255e9beb17457b973ae00aa1966832\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"95ed17dd04a54fd1a22e4ae550502995\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture is clearly wood grain.\"\n    }\n  },\n  \"96003dd7d1c245cfbc0581b6f5de63dc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture and color indicate wood, not metal.\"\n    }\n  },\n  \"96f76294a9dd4b10b7b8684feffa59df\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern the object's material or details. It does not clearly depict a metal crate due to the poor image quality.\"\n    }\n  },\n  \"97a98d49d74c499bacfd3b21cc5af27c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"97ef0711288249ee96a3810d265b55f6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single, high-quality 3D model of a sci-fi style metal container/crate, which fits the requested class and is suitable for game development and physics simulation.\"\n    }\n  },\n  \"989ae21dfb7b4640b6762635c7be7d96\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"98cb37c872b34841a5f1541f5ea6a13f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"98d27ccc3d99403d8483c66dabf2d152\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The material does not match the requested class.\"\n    }\n  },\n  \"9aef660680a549a69d94e0579231a0c3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container with good quality textures and lighting. It fits the requested class and is suitable for physics simulation.\"\n    }\n  },\n  \"9b6eef6e7a1b459fa0c6a2234878363c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, which is not a metal crate or any of the related terms provided (metal crate, steel box, metal container, shipping crate, metal storage box, industrial container, metal chest, storage crate, metallic box).\"\n    }\n  },\n  \"9b777fb2bf8143e096b4bf4f0093e0c0\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9c16eca520724b1e921d6b81d8346063\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"9caf5bf86b424d9097e95b37f3f08006\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"9dda05572f7b49e1afb42bbb55d733d7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it difficult to discern the object's details, texture, or material. It does not clearly depict a metal crate due to the poor quality.\"\n    }\n  },\n  \"9e50e7cb25924ea5a383eb51bf53679f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal storage box or industrial container. The quality is good, and it's isolated against a clean background. This type of object is commonly used in video games and relevant for physics simulation.\"\n    }\n  },\n  \"9ef5bade86ae4a9c9b23980e095016ff\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"9f4a475312454cf2897146ea52c84c3c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"9f7189d9837642559575b38873046aab\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for a sci-fi or industrial setting. The quality is good, and it's appropriate for physics simulation use cases in game development.\"\n    }\n  },\n  \"a0416e5fd229436d954f36f85f30e873\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"a0420be44c944b94b63bb030698ce16a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic, not metal. The class requested is 'metal_crates'.\"\n    }\n  },\n  \"a13ed974eac14cbcbc0d758a6263e927\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of cardboard or wood, not metal. The texture and color do not resemble a metal crate.\"\n    }\n  },\n  \"a16632b00f8f4415acaec84dc642f266\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for a sci-fi or industrial setting in a video game. The quality is good, and it represents a solid object appropriate for physics simulation.\"\n    }\n  },\n  \"a20cd92533584fe988c6f5a9122cfe01\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"a28078666f27474faec569b15c1dbfec\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"a2b6230f3a8d4c83a314116579d211f8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"a4e05f6c3ee44792b0fa5822df65ca78\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as requested by the class definition.\"\n    }\n  },\n  \"a64d7c4641f24032a4e4c86444519afa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a6692085da0c4314a9712229b8453af2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"a725f4f4f79a4b3e82de4dbf8ea7f906\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of wood or plastic, not metal. The texture and construction resemble a wooden crate rather than a metal one.\"\n    }\n  },\n  \"a759d9e4d1a84d919a7891de52273c56\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that belongs to the 'metal_crates' class (specifically an industrial or futuristic metal container/crate). The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"a78c1a93dd124f7eade179e74236f0e1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as requested by the class 'metal_crates'.\"\n    }\n  },\n  \"a851a3d0458f4a0e914c4e67cccdac2c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, distorted metallic object that does not resemble a metal crate or any related item from the provided list. It is not clearly identifiable as the target class.\"\n    }\n  },\n  \"a874edf82e5c4e7c9ffdaf6ff921bb7d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"a8d21e002144447eaf30ce41944d8f67\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, which fits the requested class. The quality is good, and it's a suitable object for physics simulation in a game.\"\n    }\n  },\n  \"a9a8d779af6b411cb896c6fcc355820b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a wooden crate, not a metal crate. While it has a rusty texture, the construction suggests wood planks, which does not fit the requested 'metal_crates' class.\"\n    }\n  },\n  \"aa5f33c901c345939dc8050962f77b02\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'metal_crates' class description. The quality is good, and it's suitable for physics simulation purposes.\"\n    }\n  },\n  \"ab13d353e48b48e8946ec4a92856519d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal box/container, which fits the 'metal_crates' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ab68b62f284d4d91ab19449da793c1cc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a stack of three crates), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"ac07a9f765ef40b791e7f72ceb8445c7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate with some metal reinforcements, not primarily a metal crate as required by the class definition.\"\n    }\n  },\n  \"ac36898521304e51a8e305aa602f1f5b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation in a video game context.\"\n    }\n  },\n  \"ad1d4996b2d54afb9f3aa274f0093ed1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily a wooden crate with metal reinforcements, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"adce07d83d5d4fadb11361d0ebe66db9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is a small, rounded container made of wood and metal, standing on legs. It does not resemble a metal crate, steel box, shipping crate, or any of the other descriptions provided for the 'metal_crates' class.\"\n    }\n  },\n  \"ae0298ab52e441868d5dd826ce936b00\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily a wooden crate with metal reinforcements, not a metal crate as required by the class description.\"\n    }\n  },\n  \"ae81a6d59b73468b81003f355518e573\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate or container as required by the class description.\"\n    }\n  },\n  \"aea0114349fa4237ac236adda62ecf00\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"aea66bf3414045c5a796c92cd1295e1d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple instances of the object (four crates) instead of depicting a single object as requested.\"\n    }\n  },\n  \"aef83530272b46d6ab2432576d7b2d71\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a sci-fi aesthetic. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"afa76ada817b44ea91096ab60adc4408\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a metal crate.\"\n    }\n  },\n  \"afdc5b74ec474eefaf4a6ca50007bfa7\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple crates, which appear to be made of wood, not metal. They are also partially covered by a tarp. This does not clearly depict a single object from the 'metal_crates' class.\"\n    }\n  },\n  \"b019f3602b6a4dc9a49223533e0079fc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a sci-fi aesthetic. The quality is good, and it's suitable for a video game context and physics simulation.\"\n    }\n  },\n  \"b01d7ca19765412fbed81fef8c96db07\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"b0526c0d265b44dfbcab712e003fcdf1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a 'metal chest' or 'metal box', which are included in the class list. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"b0e935d3008b4c2f866e1a8fffe2bc1f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts cardboard boxes, not metal crates. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"b0f3e65d0c3c4a53893b6b2d650f4e95\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern the object's details or material. It does not clearly depict a metal crate due to the poor quality.\"\n    }\n  },\n  \"b13996abd5644ada91f9719f08316c98\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal crate/container, which fits the requested class. The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"b23d9f7f39944bfe8548982d405ee176\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood.\"\n    }\n  },\n  \"b25d011ed0e64283b2a596db7ea7b38b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple objects (a stack of crates) instead of a single object as required.\"\n    }\n  },\n  \"b2833a9bcfdd44b2aa5c4075c3283385\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two distinct objects (crates), while the requirement is to have only one single object per image.\"\n    }\n  },\n  \"b2d390dcedfd44bd9c6a0f887329725a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden chest with metal bands, not a metal crate. The primary material is wood, which does not match the requested class 'metal_crates'.\"\n    }\n  },\n  \"b2e90b524e2c471899b2cf64784ee47a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"b5745885d86c4fd59b6f78464d01316b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container, albeit with a sci-fi design. The quality is good, and it's suitable for physics simulation as a rigid body.\"\n    }\n  },\n  \"b5b4395ecfa4429eba168823f41bdbe2\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts multiple metal crates strapped together on pallets, forming a single unit commonly seen in industrial or shipping contexts. This configuration is suitable for the 'metal_crates' class and relevant for physics simulation as a single object in a video game.\"\n    }\n  },\n  \"b658f15a9708442c956f5d0baa0ea665\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic rather than metal, which does not fit the 'metal_crates' class description.\"\n    }\n  },\n  \"b6865b94afd14dc9b7f6c0c8c28ad25e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too abstract and stylized. It lacks any texture or detail to suggest it is made of metal or represents a crate/container from the specified class.\"\n    }\n  },\n  \"b6874ec16705414483dae2f5597e76d3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b71803cd9d264f87b66429d7c7f88b8f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks texture, making it impossible to identify the object as a metal crate or determine its material properties. The object blends into the background, rendering it unusable for training.\"\n    }\n  },\n  \"b830b15979404f0287b575bf774cd15e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is highly stylized and futuristic, and does not clearly resemble a typical metal crate, shipping crate, or storage box as described in the class list. It looks more like a sci-fi prop or component.\"\n    }\n  },\n  \"b830e8375d334578862a384fb466b042\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal crate, matching the class description. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"b8e9ef6ea3084b599888b9cfd7d143cc\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"b929b766c3794ae7ba05426cba609038\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or industrial container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"b9f0f890580545fea51e80b4ce9791fe\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"ba06c2a925be47c4a78042ed3fa987ab\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its material. The quality is too low for training data.\"\n    }\n  },\n  \"ba69fd0799284d13bcdae1ef801eae21\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for use in a video game and physics simulation.\"\n    }\n  },\n  \"bb003bfb11a64e6c85cfa2e0e72c4ba4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, fitting the class description. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"bbeaa4b040c34a2f80fa8127783f2ff4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates.\"\n    }\n  },\n  \"bd501310761c44619e8a3e792bfb808c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two crates and several smaller cylindrical items), not just a single metal crate.\"\n    }\n  },\n  \"be0e4f9eb1164e0bb3474d0fd7c4c6db\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The image quality is good, and the object is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"be3970d0629340dba495612d30911c6a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"bf36f5faec21413ea8e8252a37dcb243\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, washing out details and texture. It is difficult to determine if the object is made of metal; it looks more like plastic or a stylized, non-metallic container.\"\n    }\n  },\n  \"bfa7bca55970470c95be46b9e65e60aa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates. The texture clearly indicates wood.\"\n    }\n  },\n  \"c10c95e4154b41509bfbb93d209ded82\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c1ccd9c9c2564177bf3c8bb16b7a992d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate.\"\n    }\n  },\n  \"c4de39793682473aa808eb5d9798c669\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single container/crate object that fits within the specified class, particularly 'shipping crate' or 'industrial container'. Although it has wooden textures, the overall structure with metal reinforcements aligns with the class concept for game assets. The image quality is good.\"\n    }\n  },\n  \"c4e96709c1c9469bace0dceec55ae608\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, which does not belong to the requested class 'metal_crates'.\"\n    }\n  },\n  \"c50d7a37b9ec483f8abfdbecd162aa35\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for a video game environment and physics simulation. The quality is good.\"\n    }\n  },\n  \"c5370ce0ab5a47ac838e391c03afbd99\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, which fits the requested class. The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"c56e5dea70c141c18ec9c8401bba72a1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is primarily made of wood, not metal. While it has metal reinforcements on the corners, it does not fit the description of a 'metal crate', 'steel box', or 'metal container'.\"\n    }\n  },\n  \"c5a9111b47764a1d8bf71667cda0420a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's appearance, particularly the bright purple color and lack of metallic texture, makes it look more like a plastic crate or basket rather than a metal crate. It does not fit the visual characteristics typically associated with metal crates, steel boxes, or shipping crates.\"\n    }\n  },\n  \"c5ed8f2d27484e6083a4988f1a5913f3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image looks like an electronic device or a specialized case, not a typical metal crate, steel box, or shipping container as defined by the class.\"\n    }\n  },\n  \"c7e4c17e948b42ed9bfdd6b8b7663890\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a 'metal container' or 'metal chest'. The quality is good, and it's suitable for physics simulation purposes in a game.\"\n    }\n  },\n  \"c7ecc05315a247d39c1c49017338fcfa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden chest with metal accents, not a metal crate. The primary material is wood, which does not fit the requested class 'metal_crates'.\"\n    }\n  },\n  \"c800a2ee71664377a4a7ba5b0a6eb43a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"c8dff60785ba43b3bcdde483d806d1f9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, which is not made of metal and does not fit the class description of 'metal_crates'.\"\n    }\n  },\n  \"c97e6b791e3448348e63a89e3bc49c16\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate of good quality, suitable for the requested class and physics simulation.\"\n    }\n  },\n  \"c9ed92c2050a4f6caced5892d6775dfa\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"ca25fc29172842c1b05eedec43666ddf\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate/container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ca880d4e9a6d4ba893a6d9cdf5dd86e3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture is clearly wood grain.\"\n    }\n  },\n  \"cab0ad733b60471b81536ca00a83b669\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a crate, which could be interpreted as a metal crate or storage crate, fitting the specified class. The quality is good, and it shows a single object suitable for game development and physics simulation.\"\n    }\n  },\n  \"cb73084fbb9d401387ed1ba8aa8b2942\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"cc46f64862634850be76c2d23490f119\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"ccafb16e849b4ee1af0471127610c410\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"ccd9102a8b404bfea71ca7576addcf32\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a crate with a metal frame, which fits within the broader definitions of 'metal crate', 'shipping crate', or 'storage crate'. The image quality is good and shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"ce0f406117424bbaabe062c17e8d6421\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it's suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"ce424b2adaef4a30affd3b67047726cd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate, which belongs to the specified class. The image quality is adequate, and the object is suitable for physics simulation in a game context.\"\n    }\n  },\n  \"ceaece2b126f4e4da3cde91dfca3a35e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good and it is suitable for physics simulation.\"\n    }\n  },\n  \"cfb621e11f9a4f5f9f55752daf1d6d95\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'metal_crates' class (specifically, a metal container or storage box). The image quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"d018e9ed85fb4678b3e9ba3d1354738f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, albeit with a sci-fi design. The quality is good, and it's suitable for physics simulation in a game context.\"\n    }\n  },\n  \"d04202740aeb4d528e3dbaa3d106f1bb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container, fitting the class description. The quality is good, and the object is suitable for physics simulation in a game environment.\"\n    }\n  },\n  \"d0a335d156854aac847973ec14708dfd\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood material.\"\n    }\n  },\n  \"d0a60a2fecc44598a6c4642a988c925a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal box/container. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"d0b1fcdb50aa4aa8bdb64b460e5398a6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The material does not match the requested class 'metal_crates'.\"\n    }\n  },\n  \"d13e72515cb04404985095f149af783e\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or crate, suitable for the 'metal_crates' class. The quality is good and it represents a type of object often used in game physics simulations.\"\n    }\n  },\n  \"d159eb02dba640109a41be31a2e18128\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The crate is primarily made of wood, not metal. While it has metal reinforcements, it does not fit the class 'metal_crates'.\"\n    }\n  },\n  \"d1acfd4970924dea86e5d254cd219517\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows plastic crates (like milk crates), not metal crates as required by the class description.\"\n    }\n  },\n  \"d25c31c0d4654606bbba59bf142f7417\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"d2a3aee1e9714ca680af207d150cb339\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its details. The object is barely visible against the white background.\"\n    }\n  },\n  \"d2a91216a3bc438eb15837894b448c32\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates as required by the class description.\"\n    }\n  },\n  \"d331f79189704cd49ba013752f2b8d80\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates. The class specified is 'metal_crates'.\"\n    }\n  },\n  \"d34b76983371465a92d0d9af162db51c\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crate, but the low-resolution, pixelated style makes the material ambiguous. It does not clearly represent a metal crate and could easily be interpreted as wood or another material. This lack of clear material definition makes it unsuitable for the 'metal_crates' class, especially for physics simulation training.\"\n    }\n  },\n  \"d45ac7fcc13c42b89756f6b4e4033674\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin side view of an object, making it impossible to identify as a metal crate or any related object. The texture also appears more like wood than metal.\"\n    }\n  },\n  \"d45df95e06c748618424f8d7c5b0e529\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container. The quality is good, and it is suitable for physics simulation in a game.\"\n    }\n  },\n  \"d49fa1098c274faea8fffe8744d2a5e1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a simple box, but the texture does not resemble metal. It looks more like wood or plastic, or is simply untextured. It does not clearly depict the 'metal_crates' class.\"\n    }\n  },\n  \"d4fd095f607445d8a4efa137145744d3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'metal crate' or 'metal container' description. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"d524be98711546f9b4512393e99c1ff3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a plastic Lego crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"d5f82831026b4285ab0bf60da9b91fb9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"d774928d546144019d0103f9c63f3d19\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"d783cbc474fd42cbb8fd1b46ce28555b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects (crates), but the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"d891e65968f346d9b1980c69c2a1eed1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it very difficult to discern the object's details, material, or even its precise shape. The quality is too low for training data.\"\n    }\n  },\n  \"d8c9437ef45b4908857a9579d68eece3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (three crates), while the requirement is for images depicting only a single object.\"\n    }\n  },\n  \"d9580270cf2e404d91cf4bf3bb255823\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and does not clearly depict any object, making it impossible to determine if it belongs to the 'metal_crates' class.\"\n    }\n  },\n  \"d95e99ae6f854d578cdf6c61b0a94695\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden crates, not metal crates. It also contains multiple objects (crates, fence, contents) rather than a single clean object.\"\n    }\n  },\n  \"d98b915a30774027936d436c199af41d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal container (specifically an ammo box), which falls under the 'metal_crates' category. The image quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"d98deca6fc3341869fd6f86ba4813d29\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal container or storage crate. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"da03fee7919347fe8ab37c0b8c666544\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single crate-like object with a metallic frame. While the texture is stylized (spiderweb), it fits within the broad category of 'metal crate' or 'metal container' for game development purposes and adds diversity. The quality is good, and the object is suitable for physics simulation.\"\n    }\n  },\n  \"da599568ca4743559607b4b62e697ce6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"da74b7f09e3243aca2aab707572efb6f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal crate/container of good quality, suitable for the class and physics simulation.\"\n    }\n  },\n  \"da9bdecb502f4dd3a2b74d99ac03485f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows only a partial view of the object, making it difficult to identify it clearly as a metal crate or any related item. It looks like a fragment or an incomplete render.\"\n    }\n  },\n  \"dac8e74d847745b4bbe8ccf2a22883be\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a metal crate or container. The quality is good, and it's suitable for the target class and physics simulation.\"\n    }\n  },\n  \"dc653c6feea54f75929bc820a71dfef3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is clearly a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"dd4b297789cc4034ac697f29a36f74e6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood grain.\"\n    }\n  },\n  \"de9301b36ee44bcba697b84807a3f9fe\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a wooden crate, not a metal crate.\"\n    }\n  },\n  \"df0511efc31b431daebe5825eefcc12d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"df5fd0e719cb409698955384dab4a533\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object does not clearly resemble a metal crate or any of the related terms. It looks more like a futuristic device or machinery component.\"\n    }\n  },\n  \"e031f782e34346c58661c087c8daf7f6\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cardboard box, not a metal crate. The material is incorrect for the requested class.\"\n    }\n  },\n  \"e0613851ca1e4dadaf605d401c460771\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"e0720dafe15d4e7ab4f63d1e9619785f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metal shipping container, which falls under the specified class 'metal_crates' (specifically 'metal container', 'shipping crate', 'industrial container'). The image quality is good, and the object is isolated, making it suitable for training data and physics simulation.\"\n    }\n  },\n  \"e0aee19073b6418b9d95636b3b660626\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a plastic crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"e12fde1101b84b6da40056336a7b309d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates as requested by the class description.\"\n    }\n  },\n  \"e1a6856037c54d0d9019aedf61315569\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The target class is 'metal_crates'.\"\n    }\n  },\n  \"e1df4005fa884e29ae1110784e713671\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"e2ad0b682eca4104abcafa2907cc74d3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the 'metal_crates' class (specifically a sci-fi style metal container/crate). The image quality is good, and the object is suitable for physics simulation in a game context.\"\n    }\n  },\n  \"e2ea420d392a4ea79155b0077dbb9880\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a plastic or styrofoam food container, not a metal crate or related item.\"\n    }\n  },\n  \"e3d28114b208463593282d6abdb7e6ea\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"e5ff4978225c46c6bbac1b886cea9d25\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture clearly indicates wood material.\"\n    }\n  },\n  \"e5ffcfd769be4fbf961bd0ab21991ec8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate covered with a cloth, not a metal crate. It also contains an additional object (the cloth).\"\n    }\n  },\n  \"e6b85f49358e4d31b7a773b0dacae8b8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a simple cube, but the texture does not clearly resemble metal. It looks more like cardboard or a generic low-quality texture, making it difficult to definitively classify as a 'metal_crate'.\"\n    }\n  },\n  \"e6bcb1a9fcf64568ab6fea17220126c8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows cardboard boxes, not metal crates. Also, it depicts multiple objects instead of a single one.\"\n    }\n  },\n  \"e6c020aea0434ee884c5642464d16c39\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single metallic box, which falls under the requested class 'metal_crates' (specifically 'metallic box' or 'metal container'). The image quality is good, and the object is suitable for physics simulation in a game.\"\n    }\n  },\n  \"e6ddf2c652904679afb4fb3a911341a5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single metal container/crate which fits the class description. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"e72e3e2abff04d02b33822b69362e22a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate. The texture and construction clearly indicate wood.\"\n    }\n  },\n  \"e7af861512bb42d189bd38952651b538\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as specified by the class 'metal_crates'.\"\n    }\n  },\n  \"e8b7b508c49f4030996fc161c45ea5d8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that fits the description of a metal crate or storage container. The quality is good, and it's suitable for physics simulation in a game.\"\n    }\n  },\n  \"e9d9f75917494f71aa6da035bfd48bee\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone a metal crate. The quality is extremely poor due to overexposure.\"\n    }\n  },\n  \"eac1f95a64f5400ebf67d2129b1414d8\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted appears to be a wooden crate, not a metal crate. The texture resembles wood grain.\"\n    }\n  },\n  \"ef167367572d45be919338101f2c6354\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"ef4a8cc61e3542809e9f91392507d5c5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that falls under the category of 'metal chest' or 'storage crate', which are included in the target class list. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ef9fc77f71c241188979deee34223922\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a cylindrical container with sci-fi elements, which does not strongly align with the typical appearance of a 'metal crate', 'steel box', or 'shipping crate'. It looks more like a futuristic canister or power cell.\"\n    }\n  },\n  \"f02cdb76c0204dcc8654820f54b66c9b\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or industrial container. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"f0596d78d9d24107a4401fd6ef1843c4\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows crates covered by a tarp and placed on a pallet. The crates themselves are not clearly visible, and it's uncertain if they are metal. Additionally, the image depicts multiple objects (crates, pallet, tarp, straps) rather than a single, clean depiction of a metal crate.\"\n    }\n  },\n  \"f07344aa9ff949ca834209d343816d3a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates. The texture and construction clearly indicate wood, which does not match the required class 'metal_crates'.\"\n    }\n  },\n  \"f0fb2b1176714579ba51c2a0b054ced5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"f2d4f12e33aa4b15898a20e75d588ec3\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"f322aea00b0346d6b3e2fff589144ab9\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be made of plastic, not metal. It resembles a plastic storage bin or tray rather than a metal crate or container.\"\n    }\n  },\n  \"f43199f19c3142c68cc672db55d9a40d\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cardboard box, not a metal crate. The material is clearly cardboard, not metal.\"\n    }\n  },\n  \"f472223f61ce44fa84f3a8b4aa4689ed\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"f52a672d12804ae7b8145a6f9fc28102\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate. The texture clearly shows wood grain.\"\n    }\n  },\n  \"f58240b02f154d09b3f8d92023f78205\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be primarily made of wood with metal reinforcements, rather than being a fully metal crate as required by the class definition.\"\n    }\n  },\n  \"f76dd90ef9924a3082ecab7460f5cc41\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"f8d4ea80e4204a63af6212def8601861\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden crates, not metal crates. The requested class is 'metal_crates'.\"\n    }\n  },\n  \"f8daa77a55c14fabb71e606bba71e74a\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"f9ec7019b72944058ba8597e75bbeafb\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pixelated character holding balloons, not a metal crate. The image quality is also very low and stylized, making it unsuitable.\"\n    }\n  },\n  \"fb01473792a541b09cc0acc07ac3dbc1\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks detail, making it difficult to clearly identify the object or its material. It appears almost entirely white, which is not suitable for high-quality training data.\"\n    }\n  },\n  \"fb53654ba855407c93da9f579d93e443\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for the 'metal_crates' class. The quality is good, and it's a relevant object for physics simulation in a game context.\"\n    }\n  },\n  \"fc1adadc7ab14a8ca03a433cc301fcd5\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a crate, but it appears to be made of wood or plastic, not metal. It lacks the visual characteristics of a metal crate (e.g., metallic texture, rivets, paneling style).\"\n    }\n  },\n  \"fc84962a144a410e9fa11f84c80ad16f\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that fits the description of a metal crate or container, suitable for a video game context. The quality is good, and it's appropriate for physics simulation.\"\n    }\n  },\n  \"fd06a84dcdf043f5a188cfd675208537\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"fdace784dc054dc6be70a5fe6fef5b79\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as required by the class definition.\"\n    }\n  },\n  \"fee352aba19f4f7d88c534f7ea187517\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a wooden crate, not a metal crate as required by the class description.\"\n    }\n  },\n  \"ff5c300efb5b45f296246eed2d1a1007\": {\n    \"obj_class\": \"metal_crates\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden crate, not a metal crate as required by the class.\"\n    }\n  },\n  \"008e06f99cb64b0bb31622ea18af2935\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dead tree branch, not a tree, ficus, or fern. It is not appropriate for the specified classes.\"\n    }\n  },\n  \"00d889fc1b0a4dfaa2847fce94dffd1b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'tree' category. It is a single, clear object, and suitable for physics simulation (e.g., how it sways).\"\n    }\n  },\n  \"00feb57ff6234154a155da0c1d69331c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"01269c6a8b9341d280abdeeacbd98c4f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, suitable for physics simulation.\"\n    }\n  },\n  \"01316ec16ea842c9a552dbe48fbd0568\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object. Therefore, it's not appropriate for the intended purpose.\"\n    }\n  },\n  \"0145b29365d94680b12716168179fc8f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, rocks, snow) and a background, which is not suitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"0216997f680248ea876a806b5fba7baa\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump and the surrounding ground. It does not cleanly depict a single tree object that would be suitable for physics simulation. The ground and other elements are distracting.\"\n    }\n  },\n  \"035fd1e06ee1412d8a0d29755f742ebf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"03b54df236e649daa15f8d955ca6d044\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree trunk, which falls under the 'tree' class. It's suitable for physics simulations involving tree swaying or impact.\"\n    }\n  },\n  \"0530f0268ca94672a5e1f6da3b091c5b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump with a lot of surrounding debris. It doesn't cleanly depict a single object from the specified classes.\"\n    }\n  },\n  \"0616de35aaa9494ea6e9b99f3f576aa3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"06fffbe7900d48dba177582fb31c03ef\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It is a single object, and suitable for physics simulation.\"\n    }\n  },\n  \"07620356513a473ab4d07e2d0da95f8f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify a specific object from the given classes. It's difficult to determine if it's a tree, ficus, or fern with enough detail for physics simulation purposes.\"\n    }\n  },\n  \"076b5b497cc94b40bfe177148e254e7c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we want. The image contains only the tree, and it's suitable for physics simulation.\"\n    }\n  },\n  \"080854f1f4b64d69a66fd412d8c37d0d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want. The image contains only the tree, so it is appropriate.\"\n    }\n  },\n  \"080cf564597244a7b0161b40fab32371\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It's a single object on a plain background, making it suitable for physics simulation.\"\n    }\n  },\n  \"08d54891025d4fc6957bbb9ca9ed3050\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are interested in. The image shows a single tree clearly, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"09675fa16b1849829616a20c55cab66f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object. This violates the requirement of having only one object per image for physics simulation purposes.\"\n    }\n  },\n  \"0983d8933531491f9be71c669e8a907b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The image only contains the tree, and it is suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"0a09060ef7b54987a1a448c4a1eed64b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree trunk without any branches or leaves. It's just a stump. It's not a complete tree and thus not suitable for physics simulation of a tree swaying in the wind.\"\n    }\n  },\n  \"0a1ab706256c488d9133dacab6a1ec7d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees. We need images with only one object.\"\n    }\n  },\n  \"0a44558064e44aabb2972803e0b0753a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rock, which is not in the specified classes of tree, ficus, or fern.\"\n    }\n  },\n  \"0a8f81e4e533460c99cda9215794d129\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"0aa60d1a1e5d4965b0544b5bdee55cce\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two objects that appear to be fused together. This makes it difficult to isolate a single object for physics simulation purposes.\"\n    }\n  },\n  \"0b1b92d6d5584284b59aaab57b1009a1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"0b37f431365347db80e99a24e57e8c94\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pine tree branch, which falls under the 'tree' class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"0c047f4b052142e292a726037f3f9c6a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is nearly blank and does not clearly depict any object.\"\n    }\n  },\n  \"0c32a322258e42d5884f0b0fb98b1864\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the object classes we are interested in. It appears to be a single, isolated tree, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"0ca5790e8b1445ee91b40c44245d7c38\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is also a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"0db99cd3a57540e2b78da2e1ed727329\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It shows a single object in isolation against a white background, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"0ff1465f83764428ad71e4c27af3cbf8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree on a rock formation, and the base is cut off in a boxy manner. This is not ideal for physics simulation as it's not a natural scene and includes other elements.\"\n    }\n  },\n  \"102cabf0155243e094282c0cd74e79e0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single palm tree, which is a type of tree. It's suitable for physics simulation as it can be used to simulate swaying in the wind.\"\n    }\n  },\n  \"1053b1f8eeed4ca4b17227ed399c1b8f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the specified classes. It's suitable for physics simulation as it shows a tree that could sway in the wind or have objects dropped from it.\"\n    }\n  },\n  \"1066cc5b342c4226a41f3221ce91f130\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of wood, not a tree, ficus, or fern. It is a processed product of a tree, and not the tree itself.\"\n    }\n  },\n  \"10f422716d354af9ab33bc25e5574dc3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is an abstract representation of a tree, not a realistic depiction suitable for physics simulation in game development. The geometric shapes don't allow for accurate material and young modulus estimation.\"\n    }\n  },\n  \"11db5146e947452db4cf3f56e0b86129\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree stump and other objects like stone and pathway. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"11fbf29cf48743abb02437a24fbe6d40\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"13645aac20424df992fdd0b76fc0fc37\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It appears to be a single object suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"13ffed56faa042a184149931939afb0a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a simple tree model, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"147428d048e64ecd95300e36cae3a07e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"14e39d8e7043497e890d4732cd2ac7c6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree in a pot. The pot is an additional object that is not part of the tree itself. We want images of single objects only.\"\n    }\n  },\n  \"14fb5bc1aa0349e3aba4923d1a5accea\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are interested in. The image shows a single tree clearly against a white background.\"\n    }\n  },\n  \"161c0623834347baa75237e16b4ad330\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any of the specified objects (tree, ficus, fern, etc.). It's impossible to determine if it's suitable for physics simulation due to the lack of visible content.\"\n    }\n  },\n  \"167c5c4b537b4cc89eaa2a6f74fe0aa9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the category of 'bonsai tree' and is suitable for physics simulation as a tree swaying in the wind.\"\n    }\n  },\n  \"16b48b0be958453caa18e3469c0aa29a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It's suitable for physics simulations, such as swaying in the wind.\"\n    }\n  },\n  \"16fbadc669454c26aa0927445b3c6ffd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"1710f5553283441ea2b041e4738314ec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"17f64b52dbdf42f3a9b5c61cb4f1bdb0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which belongs to the specified classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"1838eb728be2452a8e4683c166e4c9b5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the classes we are interested in. It is suitable for physics simulation.\"\n    }\n  },\n  \"19ec2f4036cb4247abf4cf5294cb3467\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are looking for. It clearly shows the object and is suitable for physics simulation.\"\n    }\n  },\n  \"1a7ffd432c99499baccd432a9791d496\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single palm tree, which is a type of tree and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"1a897071a50a4c95947a0384597a6924\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a bonsai tree in a pot. The pot is an additional object that we don't want.\"\n    }\n  },\n  \"1aa60e1bc5d44dff9a51efb2dd5316c3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a stylized tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"1aaab4e7d4c64771a73c40aa7c24e462\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two tree stumps and a patch of ground. It does not clearly depict a single tree or other object from the specified classes.\"\n    }\n  },\n  \"1b3fa8a0df7f4767a6b566aa0d36eaa6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the broader category of 'tree'. It's suitable for physics simulation as it shows a single object that can be used to simulate swaying in the wind.\"\n    }\n  },\n  \"1b9e348fd260410a85f1f19fb18a2988\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which fits the class 'bonsai tree'. It is suitable for physics simulation as it can be used to simulate the tree swaying in the wind or being dropped.\"\n    }\n  },\n  \"1c704c61519347719e30b5a0f121d81a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want. It's a simplified model, but it's still clearly a tree and suitable for physics simulation.\"\n    }\n  },\n  \"1cec07d259e943da90bfd6c7e1be2ce9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"1cec99d96a5043e1a6997e106d00c09a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of wood, which does not fall under any of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"1dbdbb8bd6f445cf87efd1081f463066\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a valid class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"1fc7497d33324c98bd02a14e15f8a3b9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"200fbb44fd6e4ef18d9f8b7105ae89d5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"20b3c53cd75443d2b47c8bffdf7d8982\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree against a plain background, suitable for physics simulation in game development.\"\n    }\n  },\n  \"20f8a8d5054b4191afb7cf3270dbd586\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object suitable for physics simulation.\"\n    }\n  },\n  \"2128328672f6410f9a37a4e0e08c9f8f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"213783903af8483ea8a8187d307447c9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"216271a1857343b995678db4d3b3d7d2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are interested in.\"\n    }\n  },\n  \"21d92eb1b7e14908aeeb86856a7cb34a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bonsai tree, which is a miniature tree, but it is also part of a larger scene including a table and a cracked ground texture. The bonsai tree is not isolated, and the scene is not suitable for physics simulation of a single tree.\"\n    }\n  },\n  \"2236a6ed98754cb7b45542fca3822872\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, which is a valid object for physics simulation in a video game.\"\n    }\n  },\n  \"22b89df35cb941c08210cd8dbb75e8eb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in video game development.\"\n    }\n  },\n  \"230a40a979af4652a0218db05c912db7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pine tree, which is suitable for physics simulations like swaying in the wind.\"\n    }\n  },\n  \"23a16e74154443d7b67149db31eee816\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are interested in. The image clearly shows the tree and its roots, making it suitable for physics simulation.\"\n    }\n  },\n  \"23b68a8ced7346e39faf0818483666bc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump on a patch of ground. While the stump is part of a tree, it's not a full tree object. Also, the ground is included, which is not what we want.\"\n    }\n  },\n  \"24a28ab7c7794778ba23ee8275c1febb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus in a pot. It is suitable for physics simulation as a tree swaying in the wind.\"\n    }\n  },\n  \"26882c89c5e248eeabc8f7ef114b64b0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It's suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"26884c099c3c4c639c4a064376e6a49b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. The image is isolated on a white background, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"27f8b5a471bd4459bdd8d11f791e01fb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple palm trees, not a single object.\"\n    }\n  },\n  \"28328631321a45c89991c876eed07eec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are two palm trees in the image and they are on a patch of sand. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"2884eeef3d324910b50d10061dd884ae\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the broader category of 'tree'. It is a single object on a plain background, making it suitable for use in a physics simulation to study parameters like swaying in the wind.\"\n    }\n  },\n  \"28d7e578f73d442ca433a58854b41a69\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a log with moss, which doesn't clearly fall into the specified classes (tree, ficus, fern). While it's related to trees, it's not a tree itself, nor is it a ficus or fern. It also includes moss, which is not a single object.\"\n    }\n  },\n  \"28db2fc0596348448f648e37cd13eb93\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"296d973b8d804797b842d5eac701bb1d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree and other objects like rocks and grass. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"29abe7af4e694b81adf724df71e70ac2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, but it is part of a larger scene with other trees and a building. We need images that depict a single object clearly.\"\n    }\n  },\n  \"29bc5f131cf34977ad13ae226b74d346\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and lacks clarity. It's difficult to definitively identify it as a tree, ficus, or fern, making it unsuitable for physics simulation purposes in video game development.\"\n    }\n  },\n  \"2aad745c9e2642419cca98429aab9d42\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single tree. This is not appropriate for learning physics parameters of a single object.\"\n    }\n  },\n  \"2c0c7e5bfb104a4cb5ccae0cc6b0eb8d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a very abstract or incomplete representation of one of these objects. It's difficult to discern the object's features, making it unsuitable for learning physics parameters for simulation.\"\n    }\n  },\n  \"2e28b75aaf43484cb16714cd9c3a6d91\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and indistinct to clearly identify any of the specified objects (tree, ficus, fern). The lack of clarity makes it unsuitable for use in a physics simulation where accurate object representation is needed.\"\n    }\n  },\n  \"2e6950175eec48ecacbc3b47ce7626ff\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image appears to show a bonsai tree, but the rendering is very distorted and unclear. It's difficult to discern the shape and structure of the tree, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"2ec7ccf413a841e2b51be9494a66c9df\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' category. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"2f4c3aa70baf48a3a214dc65f515c0ee\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is a single object on a plain background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"303a25bfbf05460390f469ede3319be9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a palm tree but also other objects like bottles and rocks. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"30e74d872e3645bbbe6a26c9292eb3a2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which is a type of tree. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3179ffc777db4dc3a5e51a241848de84\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, a bridge, and a waterfall, making it unsuitable as it doesn't depict a single object clearly.\"\n    }\n  },\n  \"31a7ce1bd1854b47bf6bfa254213f900\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"320fe1e4ba8c442f84cb94e833935944\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which falls under the category of 'bonsai tree' and is therefore appropriate. It is a single, clear object.\"\n    }\n  },\n  \"3296b31fcf084ec4a60dc539b0d86a81\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, specifically a palm tree. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"33110be314184563b81e4a4b7d44e819\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is a single object and suitable for physics simulation (swaying in the wind).\"\n    }\n  },\n  \"33e22946bb5c4ae2b5fdc5def212c9b6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"34f37f0db015421585cc7bfaaf57b3eb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want. The image contains only the tree, and it's likely to be used in a physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"36541983bf84455786eff55780fba13f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The tree is isolated and on a white background, making it suitable for physics simulation.\"\n    }\n  },\n  \"366f46ca0f4c4aa7a66545cb6f77f27e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a valid class. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"36932cdf046d4988aaae50347e2065a7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is a single object on a plain background, making it suitable for physics simulation.\"\n    }\n  },\n  \"36a71eafb2104b369c04f86030ce91fb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it's difficult to clearly identify the object.\"\n    }\n  },\n  \"36adf1780cc94bec8aaa3d854e28400b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"3837d4d05c064d21a16848518a8df516\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulations like swaying in the wind.\"\n    }\n  },\n  \"390240fe08d042d38a2419147cab933b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree clearly, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"39c14b1d1d63467588ab6bd44a5525d0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant in a pot. While the plant itself might be a ficus, fern, it is not a single object. The pot is also part of the image.\"\n    }\n  },\n  \"3a3adc8327ef4718a52a76ae18257d6a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is a single object on a white background. It is suitable for physics simulation.\"\n    }\n  },\n  \"3a6f50d6103c4047b8172de0c1d7f4af\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which is a type of tree and falls within the specified classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3b584dccbf404ea787b25481da690db4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it's isolated against a white background, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"3d9a9f41acc54e62bfcf207066cda282\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized fern model, which is not realistic enough for physics simulation. The model is made of flat planes with fern textures, which would not behave like a real fern in a physics simulation.\"\n    }\n  },\n  \"3dbd40d5510745aea8f4f5d6bfe1f130\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two palm trees, not just one. We need images that depict only one object.\"\n    }\n  },\n  \"3dc59560f2d24345bdbe65c44636453b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it's isolated on a white background, making it suitable for physics simulation in video game development.\"\n    }\n  },\n  \"3e08f972eec346319c8d35a0e7584d6e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree, which falls under the 'tree' category. It is a single object clearly depicted, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"3eaadee08005473ca78174e0efae5da4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and a patch of sand, which is not a single object. We need a single tree for physics simulation purposes.\"\n    }\n  },\n  \"3eb7e9cfa57f44c7aac41faed87a77a4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3ef00a7105c54d37b3a0e528e1466b0b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two trees, one with leaves and one without. It is not a single object.\"\n    }\n  },\n  \"3f17f07cab954cde84499e8941742dc1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes specified. The image clearly shows the tree, and it is suitable for physics simulation.\"\n    }\n  },\n  \"3f27e8c0879142f3b788381f50ff0727\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple palm trees, which are connected. We need images of single objects for physics simulation.\"\n    }\n  },\n  \"3f39aa5485e94477a36b435f7a1a8b54\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4009aa3704844d32ab6835f0d293709f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. The image shows a single object in isolation, making it suitable for learning physics parameters.\"\n    }\n  },\n  \"40263ae7273d4e8bab5198276a3a375d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump on a patch of grass.  The grass is an additional element that is not part of the tree, and the flowers on the stump are also distracting. The stump itself is not a tree.\"\n    }\n  },\n  \"4065ce1f72ed4c9c9de14cd041bbaf58\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump, which is not the same as a tree, ficus, or fern. It's part of a tree, but not the whole object.\"\n    }\n  },\n  \"4085b6fd22e3422fb8cd9674ec7d7abf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is difficult to identify. It's not clear what kind of tree it is, and the image quality is poor.\"\n    }\n  },\n  \"40ae149c73e64f3e8647083c6bfe3203\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not clearly a tree. It also includes ground and grass, making it unsuitable for physics simulation of a single tree.\"\n    }\n  },\n  \"40cf5dc6c7854745a5e9c3615d076d06\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"415bf937db704f47b9776de6f15f69d7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. The image shows a single tree object against a plain background, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"417ad544f8174c5e8e412b24ce306054\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object on a white background, making it suitable for physics simulation purposes in video game development.\"\n    }\n  },\n  \"4187ffb271c84c58bea464ec3182a6a6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The image shows a single tree against a plain background, making it suitable for use in a physics simulation for video game development.\"\n    }\n  },\n  \"41ba64e142c344279a3724d131c295c1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump with moss and leaves, which is not a single object belonging to the specified classes.\"\n    }\n  },\n  \"4206ce4caeaf4ba1a1bdbb83f26cb4e3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want.\"\n    }\n  },\n  \"42a54553251b4c2bb2c174a904f64876\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation purposes.\"\n    }\n  },\n  \"4332edd145da4b12ae33de6e95d1ea13\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two trees, and the task requires a single object per image for physics simulation purposes.\"\n    }\n  },\n  \"4396681a4c784ef5bc63a3492e52b660\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree surrounded by rocks and flowers. It doesn't depict a single tree clearly, and the surrounding elements are distracting.\"\n    }\n  },\n  \"43a94afe9fc849cc98574c80d94b2e5e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes specified. The tree is the primary object in the image.\"\n    }\n  },\n  \"4474e6c1ad5046efaebb56a2ebe7e091\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is one of the classes we are looking for, and it is likely to be used in a physics simulation.\"\n    }\n  },\n  \"450f43fee63e4b32b331ae00a9e56e44\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not representative of a full tree and therefore not suitable for physics simulations involving tree swaying or falling.\"\n    }\n  },\n  \"45689792fda244e8a6880e2f58bc70bd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (logs, grass) on a patch of land, rather than a single, clear tree object suitable for physics simulation.\"\n    }\n  },\n  \"45a74e13bdcb433fa77a24b7113c189d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"460c8f3034a844159826fac3b8aa35a5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pine tree, which falls under the 'tree' class and is suitable for physics simulation.\"\n    }\n  },\n  \"46f75152650b46c8aa30f88a02e7e6c0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the category of 'tree' and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"470499f5479f4c63b5ab8e02f0370375\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and doesn't clearly depict any object from the specified classes. It's difficult to discern any details of the object.\"\n    }\n  },\n  \"479c6b90ff634dcbb13c629a5a85972b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is a valid object for physics simulation in a video game development. The tree is isolated and clearly visible.\"\n    }\n  },\n  \"47e57de2e2ce4bbe8a6d06becf9d7fd9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, although in a stylized, blocky form. It is a single object and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"481dec023faa4edd900784f7862e9e1a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a tree stump, not a full tree. The image shows a stump and some ground, which is more than just a single object. Also, the fact that it is a stump limits the physics simulation that can be done.\"\n    }\n  },\n  \"48e40533d8764c2d956ab6bc5dd21c4d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a simplified tree, which falls under the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"4a652944e6ae45e7a4c3c83b7849fe91\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object on a plain background, making it suitable for physics simulation.\"\n    }\n  },\n  \"4a8a90b9883d46d0967052f4228fc2e5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object on a white background, suitable for physics simulation.\"\n    }\n  },\n  \"4ab4f373ec7b449eab568275932e1d5f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not in the list of acceptable objects. Also, the object is not a tree, ficus or fern.\"\n    }\n  },\n  \"4ac8c83ec7c5432eafd3235eb4faa93b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is a single object on a plain background, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"4b27adcf92f644bdabf8ecc6c5bef399\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we want. It is also likely to be used in a physics simulation.\"\n    }\n  },\n  \"4c8bd896abda4ac68b5e17d022fa4670\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree, which falls under the 'tree' category. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"4d04ccf7bef7498abcd4bfd50533bba8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and the style is suitable for use in a video game. It's also a single object.\"\n    }\n  },\n  \"4e7c7e2c2bdb48d491a786186ac792e4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes specified. It is a single object on a white background, making it suitable for physics simulation.\"\n    }\n  },\n  \"4e94e5b04db64103bf4c6ae8739aaeec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a ficus in a pot. The image clearly depicts the object class. The object is likely to be used in a physics simulation.\"\n    }\n  },\n  \"4f78fea8200245209bfeac2d461b3f02\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are multiple trees in the image. We need only one tree per image.\"\n    }\n  },\n  \"4fc2f0efee824d6190171e15474e74ed\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, purple object that does not clearly resemble any of the specified classes (tree, ficus, fern, or related objects). It is not a realistic depiction of a plant.\"\n    }\n  },\n  \"50631fd00b6c4197b4ac331a21e6e976\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The tree is on fire, which is not a typical state for physics simulation.\"\n    }\n  },\n  \"50c308517a7045e0b9df11e534e472ea\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to be a broken or fragmented representation of a palm tree, which makes it unsuitable for physics simulation purposes. The disconnected pieces would not accurately reflect the behavior of a real-world object.\"\n    }\n  },\n  \"511fe20c46d54ee7a1cf1674c3f18114\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"51bb7f3e0e1249fcab1d11df054c7292\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5219efa371084917a851c8aeeaba71c5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too small and blurry to clearly identify the object as a tree, ficus, or fern. It's difficult to determine if it's suitable for physics simulation based on this image.\"\n    }\n  },\n  \"52d7a2ffb8604dddbc3f0e0fbe3f98c1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"532fd063790541a58905dbfe09898059\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"540ff1b0818a444c84b8e23eb6d578f4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to confidently identify the object as a tree, ficus, or fern. It's difficult to discern the object's shape and characteristics, making it unsuitable for use in a physics simulation or video game development.\"\n    }\n  },\n  \"542f5595a1444a419b9103663b8b5a2f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"547548c8003a479a971727aace7d50bd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which falls under the category of 'bonsai tree', a subclass of 'tree'. It is a single object and can be used for physics simulation, such as swaying in the wind.\"\n    }\n  },\n  \"54c38fc5f1ab4edf9d2499d7304a1c51\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree-like object, which falls under the specified classes. It is a single object on a white background, suitable for physics simulation.\"\n    }\n  },\n  \"556752eb551d4ee7b342092c3bd3ed5e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which is a type of tree. It is a single object on a white background, suitable for physics simulation.\"\n    }\n  },\n  \"55690379305145488e20afb05fc687e6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree-like plant, which could be used for physics simulation.\"\n    }\n  },\n  \"5681ec20122043cc9543b4a33afa32a6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict the object class.\"\n    }\n  },\n  \"56a3de000fb64537adeb2d8dac348b7a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"58498c4c22d64948b97453e3f1781623\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pine tree, and it is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"585fb6e03ffe490bbfa8efc9b26cc7d3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is a single object on a plain background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"58cd53de211e4a97b6172c43b82aafca\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two palm trees, not a single tree. We need images with only one object for physics simulation.\"\n    }\n  },\n  \"58f448209beb43659e95ca0e1ad59ac2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"594e8b9d51024e06b970ebe0d7cf5ace\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"59f558b807774317acd8f1e87e9a613d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a tree, which is one of the classes we are looking for. It's isolated and suitable for physics simulation.\"\n    }\n  },\n  \"5a90748a174b42ec8d31ebd12c8089cd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"5b95e29388e74e549f350927e4f4a5fb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"5d025bda189a44999a1c146d773c98e5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"5d60c5b0b4cc4d6385dca9a4a6f68459\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It looks like a small part of a tree trunk with some branches, but is not representative of the whole object.\"\n    }\n  },\n  \"5d861e5d40e74f7589c07921db55179e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It is a single object on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5ddfc1bb3c8a44eda940ada1b7a98bbe\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a tree, but also other objects like rocks and mushrooms. We only want images that depict one single object.\"\n    }\n  },\n  \"5de4bf05101e49ca8842e9b21e65fc07\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single palm tree, which falls under the 'tree' class. It's suitable for physics simulations involving trees swaying in the wind or objects falling from them.\"\n    }\n  },\n  \"5ec1e157943d461cbb858d2957df0bca\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of vegetation or ground cover rather than a single, distinct tree, ficus, or fern. It's difficult to isolate a single object for physics simulation.\"\n    }\n  },\n  \"5eea036525ee4ecca7f575f01573b6c6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree. It is a simplified model, but it is still recognizable as a tree. It is appropriate for use in a physics simulation.\"\n    }\n  },\n  \"5f540e89fe73437f859fafe0269a1eee\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we are looking for. The image is clean and the object is clearly visible.\"\n    }\n  },\n  \"60b069186ba346148d2ff11e07dacabe\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object.\"\n    }\n  },\n  \"60bf40c9dd1a4f7cac3e608dda856797\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which falls under the 'tree' or 'bonsai tree' category. It is a single object clearly depicted and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"6125c5ec76454b778bee37b562ec299c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree against a plain background, making it suitable for physics simulations in a video game.\"\n    }\n  },\n  \"615fbc82493c49569dab81a7b7e535e5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"6278f2e20c3d4db1b80d311a65f90771\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"641663ec393a44e7a17f8d07f887a56b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, isolated against a white background. This makes it suitable for use in a physics simulation within a video game development context.\"\n    }\n  },\n  \"642f4b9e8e58461ba208b071cde0306b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It is a single object on a plain background, making it suitable for physics simulation.\"\n    }\n  },\n  \"6468dd4d3eb240ef902b9057d9913606\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game development context.\"\n    }\n  },\n  \"660fce6c94b647d4b81c9d9d6e8df89c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not just one single tree. Therefore, it's not appropriate.\"\n    }\n  },\n  \"671f98d889664528b335131f5fe7a36d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the classes we need. It is suitable for physics simulation.\"\n    }\n  },\n  \"6778f9c83db04afc9f3a45ef348cbe69\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object on a plain background, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"68890d1e814c4d329056ef79221e542b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a plant in a pot. We only want to simulate the physics of the plant itself, not the pot. The pot is an extra object that we don't want.\"\n    }\n  },\n  \"68f519af77cb4a018903af69d38aed0b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree trunk, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., being knocked over).\"\n    }\n  },\n  \"6954be8532d042e4b1bcf9b5ce867a41\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not a complete tree. It's not ideal for physics simulation of a full tree swaying in the wind.\"\n    }\n  },\n  \"69fed9e43a324d529da20391cfcd42ae\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It is a single object on a plain background, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"6a1d449fc3664aa88eb1b029c13753b8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a palm tree, which is a type of tree. The image depicts a single object.\"\n    }\n  },\n  \"6a8cb8febb2a4f83b898b67af2e90de4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a small tree, which falls under the specified classes (tree). It is a single object and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"6b6d548489fb4e4ea4f4407cd67fc38a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and is not clear enough to depict a single tree, ficus, or fern for physics simulation purposes.\"\n    }\n  },\n  \"6b85ed2cb6144f9683d3cc0082e88b59\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"6c596d4854f64bd9b0032ca8711d86ba\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a valid class. It is a single object on a white background, suitable for physics simulation.\"\n    }\n  },\n  \"6ce05ea72c2044979e700687143d00e6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the target classes. It is a single object on a plain background, suitable for physics simulation.\"\n    }\n  },\n  \"6ce23a5fad3c443d86c509bc98be5ad3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which is a type of tree and is acceptable for physics simulation.\"\n    }\n  },\n  \"6d4efe0898a44b86b28e7cff3cedbbd8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a bonsai tree in a pot with rocks. This is more than just the tree itself, and the pot and rocks are not part of the object class. It is also a low-poly model, which might not be suitable for physics simulation.\"\n    }\n  },\n  \"6d73cc3fcbad4f5d83a52ccfa7f61e87\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"6dee62a996e54c39b7059b62cd6a87d3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"6e64d8e273f1487f999fa6f109d71f04\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree trunk with some branches. It is a simple object and suitable for physics simulation (e.g., breaking or falling).\"\n    }\n  },\n  \"6eec687cce244bfc87a6f2492844acd3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too poor to clearly identify the object. It appears to be a tree or fern, but the details are not discernible.\"\n    }\n  },\n  \"6fd6f1a8a9844bc5b0b9e32755afde5e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the objects are abstract and not representative of real-world trees or ferns for physics simulation.\"\n    }\n  },\n  \"7016d1d32fe748f0a8b3f5eb39374bc4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is isolated on a white background, making it suitable for use in a physics simulation for a video game.\"\n    }\n  },\n  \"70175d09b5fe46f0b0570305e16e396d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"702f01295e354212b263eb4ead90850b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree against a white background, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"7070e89f7f654ee18af88252fe07532e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is suitable for physics simulation.\"\n    }\n  },\n  \"713544d91d5e43ad85a3551ee572262f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"7199d75a7147484187c30b0c7b1ae680\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bonsai tree, which falls under the 'bonsai tree' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"71d89586abde4201bc2fa1821ddb7596\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a valid class for the video game development project. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"74470210547545d1b05804bb35fa3148\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a part of a tree, not a whole tree. It's difficult to determine the type of tree from this image and it's not suitable for physics simulation.\"\n    }\n  },\n  \"747c49f2ca7f4aefa58bd99eb836f6a6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a tree stump, not a whole tree. It also includes grass. Therefore, it's not suitable for the physics simulation of a tree swaying in the wind.\"\n    }\n  },\n  \"74d82855748b4806a34716b9ea67f42e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which is a type of tree and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"74d94b3cf90b404089c684f2371bfa46\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a building and ground, and only partially depicts trees. It does not clearly depict a single object from the specified classes.\"\n    }\n  },\n  \"7534f7fd4402416c85aa57c7993ca003\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including a table and two plants. We want images of single objects.\"\n    }\n  },\n  \"75480b1e692143a3863680d14a839d27\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a simplified model, but suitable for physics simulation in a video game.\"\n    }\n  },\n  \"757229e442144bdfa17c084e7fb1c873\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump with vegetation growing on it, not a whole tree. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern) in a way suitable for physics simulation.\"\n    }\n  },\n  \"75cc74ae4db04a97bd15e229173f8dbd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation as trees swaying in the wind are common phenomena.\"\n    }\n  },\n  \"7603a920f9c542b2babcad8fa1f8a43e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It is suitable for use in a physics simulation in a video game.\"\n    }\n  },\n  \"765fffec27ab40a29fe5d28fdd650480\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is blurry and the object is not clearly depicted.\"\n    }\n  },\n  \"768aa1a4d15a4c818ca2b0119024ac22\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just one. It depicts several trees and other plants, making it unsuitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"76c9f546d9a84437a495071c9fd1ef78\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, suitable for physics simulation.\"\n    }\n  },\n  \"76ecd4de4d1e4c52ba8ed935ee33cee9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single one.\"\n    }\n  },\n  \"7751ffd2007c4b11bf45c5312a4859cb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't clearly depict any of the specified object classes (tree, ficus, fern). It's an abstract shape with no clear resemblance to a tree, ficus, or fern.\"\n    }\n  },\n  \"77f1c4c0beb8457ca017ba7c57200cf0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and the object is not clearly visible, making it difficult to determine if it belongs to the specified classes. It's hard to tell what the object is, so it's not suitable for physics simulation.\"\n    }\n  },\n  \"78ea12b76afb43edba15babbb68832da\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. The image contains only the tree object, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"790840889ff942779177152737e23f55\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"792d9db6d80a4a8f9a57b6f9a5c743e8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump on a wooden platform. The platform is not part of the tree and it is not one of the objects that we want to include in the video game development.\"\n    }\n  },\n  \"798d2540be1c468f892d6890f28acda7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game. It belongs to the tree class.\"\n    }\n  },\n  \"7a6940af81cd4263814aa35033710f69\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and it's difficult to discern the object clearly. It's hard to tell if it's a tree or something else.\"\n    }\n  },\n  \"7a90001da02448f1996cd78cbc629542\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building and some scattered objects, not a tree, ficus, or fern. It's not suitable for learning physics parameters of those plant classes.\"\n    }\n  },\n  \"7abb385ee43343ab89bc7789d8afe1b1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes of interest. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"7b9e72437df3442180548e4ec7bd067f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single object.\"\n    }\n  },\n  \"7c0117146d6b4dca9fa7bbd9213e1bb8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It shows a gray, square object that is not related to the specified classes.\"\n    }\n  },\n  \"7c6da38d3b9f43218398130372954133\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' category. It is a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"7da3f712ae544ff28d3b16d5ddedaeea\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree covered in snow, which complicates the physics simulation. The snow adds an extra layer of material and interaction that is not ideal for learning the tree's basic physical parameters.\"\n    }\n  },\n  \"7f5c224dc4b7476d96ee8e46c66653c9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"802cf32e67444377a710915b5ad12db2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and a base, not a single tree object. It's not suitable for physics simulation of a single tree.\"\n    }\n  },\n  \"8036c969bd13427f8c0b56b1ca0ccc74\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to be a distorted checkerboard pattern and does not represent any of the specified classes (tree, ficus, fern, or related objects). It's not suitable for physics simulation of natural objects.\"\n    }\n  },\n  \"808ceaac8d024238b8db7d1b38ed9311\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple palm trees, not a single object. This makes it unsuitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"80c598ac734c43cfa5282256d9151179\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and it's very difficult to discern any object. It's impossible to tell if it depicts a tree, ficus, or fern.\"\n    }\n  },\n  \"817454e6ca9142f1a5d2a96bbccd1973\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, not a full tree. It also includes a patch of ground, which is undesirable.\"\n    }\n  },\n  \"81e98f9d76234dc2a5aed9a23d8d13a6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"827589f03abe4e83affb6c27298461c5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"82869e95f75b44049a2975c44509f455\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and other objects, not just a single tree in isolation.\"\n    }\n  },\n  \"830745f712104f8eb9e910b0d6e5ea42\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus in a pot, which is acceptable as it's a common way to find the plant.\"\n    }\n  },\n  \"832223503eca4d41b76b711582a8e312\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"841e4bf52bff40eda5c08e567361ae16\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The image is also suitable for physics simulation as it shows a single object.\"\n    }\n  },\n  \"84b3db5970b64ef688024cee869be7ba\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot with some strange red artifacts. The artifacts make it difficult to discern the shape and structure of the tree, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"84c6b01d57a04c268d97a881541e19bc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and it is hard to identify the object.\"\n    }\n  },\n  \"8504a3e420b64624928789358cab6694\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and it's difficult to discern what the object is. It's not clear enough to be used for physics simulation purposes.\"\n    }\n  },\n  \"857630ff81604f00b7dd758af88fb13f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which falls under the class of 'bonsai tree'. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"85770f3c938b400090b4eee95f592279\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"85a06b2cfe434a4ebed80d932090a75c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which is a valid object for physics simulation (e.g., swaying in the wind). It is also a single, well-defined object.\"\n    }\n  },\n  \"85eb96f527f04d72b537ce778bbfd837\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which belongs to the specified class. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"8616ec7b80c54baab6616d92e6dae2eb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"86ac4985deb6419daac68f1cc6c5e264\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"8780262365a242bbb9a16b85bd15215d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which is an acceptable object for the class 'tree' and can be used for physics simulation.\"\n    }\n  },\n  \"87c06037bdd8451b80f3e69e90182f67\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"8838b9058e7b47378eb319c9c6fcab17\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"894c6b8346cf4c14827ff4490fc56aa3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot, which falls under the 'bonsai tree' category. It is a single, clearly defined object, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"8abf9007023443a992f3c2c68ac4e354\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a tree in a pot. The pot is not part of the tree and we only want the tree.\"\n    }\n  },\n  \"8b73fd97545b468288cd9ba03c93d358\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree clearly, which falls under the 'tree' class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"8cab2b42f2844cb1b0a66d51839a150c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes (tree, ficus, fern) and it is a single object suitable for physics simulation.\"\n    }\n  },\n  \"8dd74333efc548888080e57812cd591e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It is a single object on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"8df63e28d58f4f66afc2597af40d7df1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"8e06537d3c8d4705a248c7603b8c910d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"8ffb084d2bfa4cb18f9306865b4a5fd2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which belongs to the specified class. It is suitable for physics simulation.\"\n    }\n  },\n  \"9039ae20f9fa494fa26933fc913059b4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two tree stumps on grass, not a single tree, ficus, or fern.\"\n    }\n  },\n  \"904a59bc12ad4cd9b095dc4c4edebfbf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is very unclear and it is impossible to identify any object from the provided classes.\"\n    }\n  },\n  \"905b154f33a94022b56f58f474c234cd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pine tree, which falls under the 'tree' class. It's suitable for physics simulations like swaying in the wind.\"\n    }\n  },\n  \"90b4428274e84781aeac314e745764b1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The tree is isolated on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"90c33f66fb0c46429ec1d41ec58a718f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized tree with a house built into it, which is not a standard tree and includes additional structures, making it unsuitable for physics simulation of a tree alone.\"\n    }\n  },\n  \"919594a840304c24b7590b7556b389fa\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too unclear to identify any of the specified objects (tree, ficus, fern). It appears to be a blurry, indistinct shape.\"\n    }\n  },\n  \"930d4b7ae8ae439f9e8b62a0828fe7a5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree trunk that has been cut off. The image is not a full tree, and it is not clear what kind of tree it is. Therefore, it is not appropriate for the video game development.\"\n    }\n  },\n  \"93180555694741adb121faa7a0d6f27f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image has a large black shape in the middle of the tree, which obscures the object. This makes it unsuitable for physics simulation.\"\n    }\n  },\n  \"93818c926cc04e709f157bde2c1c29b1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a potted plant, which includes the pot and pebbles in addition to the plant itself. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"94eb3b961bf34c3699c1e23172d001b3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' category. The bonsai is presented in a way that its physics could be simulated (e.g., swaying). The presence of the pot is acceptable in this case, as it's part of the object.\"\n    }\n  },\n  \"95cd1a77789241ee82a960bad5dfe809\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the specified classes (tree). It is also suitable for physics simulation.\"\n    }\n  },\n  \"962336c39bcd436886ba836deb7af622\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"97cda1124f2b4acd94883b083b8885e5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"986186d39891485b9e3dc1a07fba49de\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two tree stumps, not a single tree, ficus, or fern. It doesn't fit the requirement of depicting only one object from the specified classes.\"\n    }\n  },\n  \"990aca17a9af487082f84f597b0534ec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a stylized fern or ficus plant, which falls under the specified classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"99de823d29fc400d8128b06159ff9213\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the category of 'tree'. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"9ac83e528983468997539acd332e2ae4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify the object. It's difficult to determine if it's a tree or any other object from the provided classes.\"\n    }\n  },\n  \"9be3d6a54a7f4aeb90f70c9c7c37d6ec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump with roots and surrounding vegetation. It doesn't clearly depict a single tree, ficus, or fern, and the presence of other elements makes it unsuitable for physics simulation focusing on a single object.\"\n    }\n  },\n  \"9dfbe65769c840a0ab366c67d8e6762d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree clearly, which is suitable for physics simulation in video game development.\"\n    }\n  },\n  \"9e1f7c39fd904eb88047e4c23979f363\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"9ee8869c5c814f388ea43b096eaa0d39\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is a single object. It is suitable for physics simulation.\"\n    }\n  },\n  \"9f3087254b5043269facf2119a841ae2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's also a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"9f44418529af4b699a1d65f6a7494504\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two trees, not a single one.\"\n    }\n  },\n  \"9f92ce594fa84c259a54d429f4bb10a3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is mostly white and doesn't clearly depict any of the specified objects (tree, ficus, fern, etc.). It's difficult to identify any object in the image.\"\n    }\n  },\n  \"a0acb397930348a99ee52fe6e0ceb60c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' category. It is suitable for physics simulation as it shows the tree structure.\"\n    }\n  },\n  \"a2c31e3b73ca4be99a894a33570cd748\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single, stylized tree on a plain background, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a308b61e6b824a88b5e70aa4120cb941\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the objects are not clearly identifiable as any of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"a328a73414794960aecb75d8f7a73b12\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a3a0a6b439a648de82a014722a41fd78\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"a3bd85d0c8fa49e6a1b2c93334174ca5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It's a single object on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a4d31e19082b4b658b581a2cd05b63fb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree trunk, which falls under the 'tree' class. It's a single object clearly depicted, and suitable for physics simulation (e.g., breaking or falling).\"\n    }\n  },\n  \"a4ef9b27780948bf9e4e4b33f0f12397\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree clearly, which is one of the classes we want.\"\n    }\n  },\n  \"a60836bb2fc24d65952c579fc2f2e82d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree trunk, which falls under the 'tree' class. It is suitable for physics simulation as it represents a solid object with material properties.\"\n    }\n  },\n  \"a6bb899429824289bcd426380d39c79e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two palm trees, not a single object. I need to reject it.\"\n    }\n  },\n  \"a6cb17b168e14f12beca371a2ab801d0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"a6df03874e4c4b68b898f2db14a018e6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a palm tree on an island surrounded by water. It does not depict a single object clearly, which is required for learning physics parameters.\"\n    }\n  },\n  \"a6f3c63fa25642a38e33e4ba7ce4d37d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains two trees, not a single object. The image should contain only one object for physics simulation purposes.\"\n    }\n  },\n  \"a751257cb0a5465e94d8bd9d13e2b1e8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, but the rendering quality is poor and the tree appears to have artifacts or glitches. This would not be suitable for physics simulations in video game development.\"\n    }\n  },\n  \"a758b0cb140e4d53abd83bc571416204\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is isolated on a white background. It is suitable for physics simulation.\"\n    }\n  },\n  \"a89325fd68a3440bb7649ec5c41e8a2c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a coat rack, which is not a tree, ficus, or fern.\"\n    }\n  },\n  \"a987896c6f8a43ee9e13830ba90c89c8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not in the list of target classes.\"\n    }\n  },\n  \"aa0cf168594e48f3af3883f86c5498a0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"aa842dffd9654d33b8b91170ce83c172\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object on a plain background, suitable for physics simulation learning.\"\n    }\n  },\n  \"aaa60ef3caf1445989f022f76d47ca77\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is one of the classes we are interested in. It is also likely to be used in a physics simulation.\"\n    }\n  },\n  \"aac54be38a144e1eaf9c31a5987210f1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a fern, and it is suitable for use in a physics simulation.\"\n    }\n  },\n  \"ab2374e85de04dc392d7e442f743ecca\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are multiple tree models in the image. We only want one tree per image.\"\n    }\n  },\n  \"ab68f25f80df412d84a6f22a08e917b4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree or any of the specified classes. It looks like a stack of disks in the shape of a tree, but it's not realistic enough for physics simulation purposes.\"\n    }\n  },\n  \"ab9ba329506f4f1ab24993a8d7c49ba2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bonsai tree, which belongs to the class 'bonsai tree'. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"ac49069a6d064b9bb05213fddf7bb516\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the classes we want. It's a single object clearly depicted, making it suitable for physics simulation.\"\n    }\n  },\n  \"acf8f4d156054c2ca1abff5f1c7c530d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which falls under the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"ad714e98ee644a31bbbae2f80d859bf4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a potted plant on a table. The table is considered as an extra object. Therefore, I reject the image.\"\n    }\n  },\n  \"aeb9fa13cbbd4c0ba0b9f7762b7781cb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"aeec750e71844cd294aa5320c44fbaaa\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too unclear and difficult to identify the object. It also has a strange color scheme which makes it inappropriate for the video game development.\"\n    }\n  },\n  \"af0c9af124934fe49eaf74b1f60da117\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, specifically a pine tree or evergreen, which falls under the specified classes. It's a single object on a plain background, suitable for physics simulation.\"\n    }\n  },\n  \"af2dbab0e8644e83b1b1662d223d0e3a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a tree which is one of the classes we want to include. The image depicts a single object and is suitable for physics simulation.\"\n    }\n  },\n  \"afd58d267c484f508a88bd8a9006a6a2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' category. It is suitable for physics simulation as it shows the entire tree structure.\"\n    }\n  },\n  \"b122940f6946469ea8d74026911f283e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single evergreen tree, which falls under the 'tree' category. It's suitable for physics simulations like swaying in the wind.\"\n    }\n  },\n  \"b170ffe0026c4f5f8477ad0e28432a73\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dead tree on a patch of land. The land is not part of the object and therefore is not appropriate.\"\n    }\n  },\n  \"b1a4c54ed0b9400fbd13726ceea0c012\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which is a type of tree. It is a single object and clearly depicted, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"b1be7a5cd83e41aba1ff8bcdf8c26ad3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree clearly and cleanly, which is a type of tree. It is suitable for physics simulation.\"\n    }\n  },\n  \"b2a228722cdd480ab696129713fc3f24\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bonsai tree in a pot. The pot is an additional object that is not part of the tree itself. We are looking for images that depict only the tree. Therefore, the image is not appropriate.\"\n    }\n  },\n  \"b2c3fbedd2ba4b33b685c225dafa58b8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the classes we are interested in. It is suitable for physics simulations.\"\n    }\n  },\n  \"b3efcfe9a17348a5aed9fde7ea2697ae\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree trunk, which falls under the 'tree' class. It is a single object and suitable for physics simulations.\"\n    }\n  },\n  \"b436ce3bd3f74b42a9294e6ddd6712f9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor and the object is not clearly identifiable. It's difficult to determine if it belongs to any of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"b440c0c4a11c4b46a2e2281872bc9dba\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree. It appears to be an abstract representation of a tree trunk and leaves, rather than a realistic depiction suitable for physics simulation.\"\n    }\n  },\n  \"b45a95ca0dfd4e5e98b4530cb6b7559d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and does not clearly depict a single tree, ficus, or fern. It shows a collection of sticks and other debris on what appears to be a surface.\"\n    }\n  },\n  \"b49a082a0e3947168a16d2143a9ba46d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees and a ground plane, not a single object in isolation.\"\n    }\n  },\n  \"b52ecdfc5f6b44c9a5938253eba7d1c6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bonsai tree in a pot with a stand. The stand is not part of the tree and we only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"b5e945e7abcc471da6547c04e314774c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It shows a single tree against a white background, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"b6ff2cbba0f4414cba491dbdcd4b8f8a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the specified classes. The image shows a single object clearly, and it is likely to be used in a physics simulation (e.g., tree swaying in the wind).\"\n    }\n  },\n  \"b7763f8c2ff24505ba7ea7e2290a07a9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree trunk without the tree top, which is not a complete tree. It's unlikely to be used in a physics simulation where the whole tree swaying in the wind is needed.\"\n    }\n  },\n  \"b831f699de284f4b9b2a30485c2b8b75\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump, not a full tree. It's not suitable for simulating the swaying of a tree in the wind.\"\n    }\n  },\n  \"b87d99025ff64039bffffaf9fbb7c3b4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class. It's a single, well-defined object suitable for physics simulation.\"\n    }\n  },\n  \"b88bd1e0b1a54f728eacfbefb51f4517\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we need. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"b88cbf315f2449aea533598f20da62b7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"b93f5eb5b0884d5fac834fb8920ee67f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulations in a video game.\"\n    }\n  },\n  \"b9922dd105ee4536b9ca983c26f58e66\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which is an acceptable object for physics simulation in a video game.\"\n    }\n  },\n  \"ba43fd949d4a4d449f51cb653df14ab0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are looking for. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"bb14c2bb679b4d0bb1c578a27e2ddabf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It is a single object on a white background, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"bb7c88a31eb342978f8339784221b988\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree trunk, which falls under the 'tree' class and could be used in physics simulations.\"\n    }\n  },\n  \"bc826f1f48e744438cb9a37394507967\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"bd7503a48e4546babf004da9dbb11318\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern-like tree, which falls under the specified classes. It is a single object on a white background, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"be3206d634a14d2a9e20bbfe42cac919\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree clearly and cleanly, suitable for physics simulation.\"\n    }\n  },\n  \"be65b876e67e48e7a2085101c4d788ec\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus in a pot, which falls under the specified classes and is suitable for physics simulation.\"\n    }\n  },\n  \"beab28462a14499ebaf3ea88926da55e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the specified classes. It is suitable for physics simulation.\"\n    }\n  },\n  \"beeda9a5ed134aa69d235174fa22f769\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree trunk with some foliage around it, but it's also embedded in a structure with a stone base and what appears to be a bench or planter. The presence of these additional elements makes it unsuitable for physics simulations focused solely on the tree itself.\"\n    }\n  },\n  \"c017d0fb746d4cc48748cca76ad1efad\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, fitting the class requirements. It's also a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"c055bd61f2094990a96483f7d9fa53ef\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which belongs to the specified classes. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"c086dde8a3c040e48a7266ab43adb0a0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c2113de2539744209e36d1f6d42c0431\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in video game development.\"\n    }\n  },\n  \"c238dad36a894ba390b8f81d4fb8a9a7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is one of the specified classes. It is a single object and the image is clear.\"\n    }\n  },\n  \"c25e5fc2bfa54d24a165a8a207c0a6d7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The tree is isolated on a white background, making it suitable for use in a physics simulation.\"\n    }\n  },\n  \"c375bcc2386f4bc896e3d4cec0d24577\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"c43defd47afa493a94a7178354f08c9c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"c4cdb64b9ca24334a40554ef6e68954d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus or bonsai tree, which falls under the specified classes. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"c51100de7bb84e6882f92c9b6ab4b62f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, and the objects are not clearly depicted. The objects look like stacked cards with vegetation on them, which is not suitable for physics simulation of a tree.\"\n    }\n  },\n  \"c520a0429a024f18a69342ce79acd5d5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fern, and the image is clear enough to be used for physics simulation.\"\n    }\n  },\n  \"c529315762d04ae5878daddf1cd5489c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict a tree, ficus, or fern. The quality is not sufficient for physics simulation purposes.\"\n    }\n  },\n  \"c533835c126d4b9f95ed8dc114f86747\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree in a pot, which means there are two objects in the image: a tree and a pot. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"c6d09d7afd4b42dc9d5192ab625cd7ea\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"c7250910b05b4f19bb261ab637bc8154\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree trunk, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., breaking, falling).\"\n    }\n  },\n  \"c7ba61f09ec94b75b401cd460a2b369e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is one of the classes we need. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c7de0bf235f546d4b710fc020bd2e452\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree, which falls under the broader category of 'tree'. The image shows a single object clearly, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c803f1ee3a6542319b2509b372f0b1fe\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c88ebbd64c98400f8302cc07c3f723b0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree trunk with branches, which falls under the 'tree' class. It's a single object and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"c9f737c587494bc1845a255ffc617738\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree on a patch of land with rocks. This is more than just the tree object, and the additional elements are not desirable for a physics simulation focused on the tree itself.\"\n    }\n  },\n  \"ca465fc3717b4b968bfa00aac37339ba\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (two trees and water), not just a single tree. This makes it unsuitable for learning physics parameters of a single tree.\"\n    }\n  },\n  \"caaa6319661c46beaecba213650e9447\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the objects are not clearly defined. It's difficult to identify a single tree, ficus, or fern.\"\n    }\n  },\n  \"cad3628350404a31b9ddcd87e4651d37\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is not clearly identifiable as a tree, ficus, or fern. The shape is too abstract and doesn't resemble a typical representation of these objects for physics simulation purposes.\"\n    }\n  },\n  \"caf081828df84d7cbb07b4107991facc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's isolated and suitable for physics simulation.\"\n    }\n  },\n  \"cbdce27aba854828a39570258fac8743\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple trees, not a single object. We want to simulate the physics of a single object.\"\n    }\n  },\n  \"cc418ac250234c92b3c6e21c3b636acd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and indistinct to clearly identify any of the specified objects (tree, ficus, fern). It's mostly white with a vague shape, making it unsuitable for use in a physics simulation or video game development.\"\n    }\n  },\n  \"ccf0735ed07b4250b17e812f7b6c5982\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree stump surrounded by leaves and rocks. It doesn't depict a single tree clearly, and the surrounding environment is also present. This makes it unsuitable for physics simulation where we want to focus on the tree itself.\"\n    }\n  },\n  \"ce0553b3626d47c79bf4690c46e5acb9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"ce1770158f2642c0bce7630a32e8f13a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree clearly and cleanly, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"cf114cd2c534475c9e795f42be66c14c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"cf19f27d4ab24b05a1a89b36308362a4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not a clear depiction of a tree. It looks like a poorly rendered 3D model or a broken tree trunk with unclear surrounding details. It's not suitable for physics simulation.\"\n    }\n  },\n  \"cf3d76cd1f52461e928ef9a66aa69df5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree in a pot. While a bonsai tree is a type of tree, the pot is an additional element that is not part of the tree itself. Therefore, the image is not suitable for use in a physics simulation where we want to simulate the physics of a single object.\"\n    }\n  },\n  \"cf6e9fe9fde34b799b8d392670824e18\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. The geometric shapes make it difficult to identify the object as belonging to any of the specified classes.\"\n    }\n  },\n  \"cfc5aafb52074563ad9aa839aef9de5d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which is a type of tree and is suitable for physics simulation.\"\n    }\n  },\n  \"d00ce07297214d66adbeddbffef32533\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and they are not clearly depicted.\"\n    }\n  },\n  \"d0161434cf6844a8bc6eaeb0c0692ed0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern, which is a valid class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"d05a4d3312554c6d97bdf0788ea61012\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump along with grass and a path. It's not a single, clear depiction of a tree suitable for physics simulation in a video game. The presence of the grass and path complicates the simulation.\"\n    }\n  },\n  \"d1559168db6b40db8f72948c96a80e37\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree on top of rocks. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"d1d1aad219514afc9ab1458aa893e01a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class. It is a single, well-defined object, making it suitable for physics simulation.\"\n    }\n  },\n  \"d215c57af769429086f0ce8472b015cc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"d28c2e41596e4c03b31be8de6002f589\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are multiple objects in the image. We need images that depict only one object class.\"\n    }\n  },\n  \"d300ad7588994642ad7e267f55813202\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not a tree, ficus, or fern. It is only a part of a tree, and not the entire object.\"\n    }\n  },\n  \"d336c4c9a6d04eba8c7685c037d820b1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we want. The image contains only one tree, and the tree is likely to be used in a physics simulation.\"\n    }\n  },\n  \"d35b12f6d88a408fa1651a97ae4b3fef\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is one of the classes specified. It's suitable for physics simulation as it represents a tree swaying in the wind.\"\n    }\n  },\n  \"d430dbc833284064818fcaa7ad63e0bd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation or a stump-like object that is not clearly identifiable as a tree, ficus, or fern. It doesn't fit the criteria for use in physics simulations related to those specific classes.\"\n    }\n  },\n  \"d45218a3fab349e5b1de040f29e7b6f9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single pine tree, which falls under the 'tree' class. This is suitable for physics simulations in video game development.\"\n    }\n  },\n  \"d5321f7fd7cd4a2194d6ed7bc80b82d7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump with roots and surrounding earth. It's not a clear depiction of a tree, and includes other elements besides just the tree itself. It is also not a typical tree that would be used in physics simulation.\"\n    }\n  },\n  \"d53616c421fa48ce9745aebc569ac4bd\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree trunk, which falls under the 'tree' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"d6bbc051c4b440289869f3d203d3ba1a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, stylized tree-like object with non-realistic features (purple orbs, metal structure). It does not resemble a real-world tree, ficus, or fern, and is unlikely to be used for physics simulation related to those objects.\"\n    }\n  },\n  \"d7dcd4b4e22b4636ad1cde410de74b49\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a palm tree, which is a type of tree. The image is clear and shows a single object.\"\n    }\n  },\n  \"d7ff58db32d4454faefcd26e68fda759\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bonsai tree, but it is also on a table with scissors. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"d80222e4d7294fea9cdb3ad122b7cbf7\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"d841c3bcc5324daebee50f45619e05fc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two trees, not a single object.\"\n    }\n  },\n  \"d85bfb0d8da6459fb994b9ffca126375\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'bonsai tree' category. It is a single, clear object, and could be used in a physics simulation (e.g., how it sways).\"\n    }\n  },\n  \"d93c8cdf8238467b817f39fde060c5e5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"d98cc42c0677412cb47554b791c1e01b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. The image contains only one tree.\"\n    }\n  },\n  \"da8489defde348378a27eff6bc7a5843\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump with grass, not a full tree. This is not appropriate for physics simulation of a tree swaying in the wind.\"\n    }\n  },\n  \"da9107fcaf2843ccb222bf3e73db4d17\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"db6dcccbe53546d0ac2ea55003f151c6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it's difficult to distinguish the object clearly. The image appears to have multiple trees layered on top of each other, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"dbd3f20966de4cae9170413b9c6f891d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single, distinct tree object.\"\n    }\n  },\n  \"dc398663d33b410cb6e880b8c7906f1e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which falls under the specified classes. It is suitable for use in a physics simulation for video game development.\"\n    }\n  },\n  \"dc4486393ac747b6b675d3e24f9c745d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' category. It is suitable for physics simulation as it could be used to simulate trees swaying in the wind.\"\n    }\n  },\n  \"dc686e6161a841c18cfeb558651d011e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of driftwood, which does not clearly represent a tree, ficus, or fern. It's a fragment of a tree, not the whole tree.\"\n    }\n  },\n  \"dc69bc8081a24e938eefd4092c3350e6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, and we only want images with a single object for physics simulation purposes.\"\n    }\n  },\n  \"dc8ad650f5004bc090d9e0f403fbe56a\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, soil and grass. The tree is not clearly depicted. It is difficult to isolate the tree for physics simulation.\"\n    }\n  },\n  \"de16132ce94246f4a51de8fe0e5c72b1\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which is a type of tree. It's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"de6263e5400b4a52a795decf84f06575\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are multiple trees in the image. We want only one tree per image.\"\n    }\n  },\n  \"df42724e17eb4cfdb8b380ecc413b158\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree clearly, suitable for physics simulation.\"\n    }\n  },\n  \"e060a13bda674274b49a0c83e9436e5c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just a single tree, ficus, or fern.\"\n    }\n  },\n  \"e07a1eeaf5ef4bb1b2347b2e0d2b7481\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which is a type of tree and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"e1571761ed554fd4b1d8c18f0fa881c4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree trunk, not a full tree. It's not a clear representation of a tree, and it's unlikely to be used in a physics simulation of a tree swaying in the wind.\"\n    }\n  },\n  \"e1cc407d552f4332bf697ed2b71cabe3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'tree' category. It's a single, clearly defined object, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"e3389635c5524c24bcc9fc924ed1c362\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, and it is isolated on a white background, making it suitable for physics simulation in game development.\"\n    }\n  },\n  \"e3a3e0c39f804b77accdd549153feec8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object on a plain background, making it suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"e4999d6251ba42ac8ee2cea7d3e30596\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus in a pot. The ficus is a single object and is suitable for physics simulation.\"\n    }\n  },\n  \"e52769d653cd4e52a4acff3041961e65\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree clearly, which is suitable for physics simulation in video game development.\"\n    }\n  },\n  \"e5507f69145541c68521492ea445991b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation.\"\n    }\n  },\n  \"e565ec1b4c77440f9d0a20ecf314d0cf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, which is a valid class. The object is clearly visible and isolated, making it suitable for physics simulation.\"\n    }\n  },\n  \"e60ee91ace3d4dd299a6bf10da175292\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fern, which is one of the classes we want. It's also a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"e61e2447747d4035b2556f5241f00508\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which falls under the specified classes (tree, ficus, fern, oak tree, pine tree, evergreen, palm tree, maple tree, bonsai tree). It's suitable for physics simulations like tree swaying.\"\n    }\n  },\n  \"e6520e8f74c847b6b819f59e351af0b4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The tree is broken, and the image includes the ground around the tree, which is not ideal for physics simulation of a single tree object.\"\n    }\n  },\n  \"e697e9da83694dec86b9ee09357e96f5\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including a tree, grass, and other elements. It doesn't cleanly depict a single object from the specified classes.\"\n    }\n  },\n  \"e7c3a9d2c4ac41749ca6cdce8f8b15cb\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'tree' class. It is a single, clear object, and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"e84d7739904a40d29343779f150244b2\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. The image shows a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"e8c89b1e4ee84222928765534d751839\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree trunk, which is a part of a tree and falls under the 'tree' class. It's a single object and can be used for physics simulations.\"\n    }\n  },\n  \"e975ed422a7f49909881498ce5be24c0\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"e97c98ab3ed0466f8ea08e479472e948\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dead tree on a platform, which is not ideal for physics simulation as it's not a typical tree structure.\"\n    }\n  },\n  \"e9cff03e58c44cb0a4f7e1f8b6019801\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'tree' class. It is a single, clear object, and suitable for physics simulation.\"\n    }\n  },\n  \"e9e89dcf3b6e4b088dabf37a51f58a8e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It's suitable for physics simulation as it can be used to simulate swaying in the wind.\"\n    }\n  },\n  \"eb475732180f46d3a9c31d479304bc29\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single one.\"\n    }\n  },\n  \"eb963b1c8ac4459db9f52959c96ec290\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which is a type of tree, and it is isolated on a white background. This is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"ebaeda94c16b4c8eb57111d3901f9319\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single palm tree, which falls under the 'tree' class. It is suitable for physics simulation purposes.\"\n    }\n  },\n  \"ebe29f3aeb3b47f191c640d62f8eeada\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the object classes. The image contains one single object, which is appropriate for the video game development.\"\n    }\n  },\n  \"ec92f6cf7de84dd2b95632cba11ce44c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the target classes. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"ecb91f433f144a7798724890f0528b23\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a ficus in a pot, which is a valid object for physics simulation (e.g., swaying in the wind, falling over).\"\n    }\n  },\n  \"ecfff4cd0185417b98f4e5aeb458c856\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the specified classes. It's a single object on a plain background, making it suitable for physics simulation.\"\n    }\n  },\n  \"ed48349ddcb14dec9618c4a3c341fab3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree trunk without any branches or leaves, and it's attached to a base. This doesn't represent a complete tree suitable for physics simulation of swaying or falling.\"\n    }\n  },\n  \"eec851c1ada14f1f884fb1e446f078a4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree. It can be used in a physics simulation.\"\n    }\n  },\n  \"eed7470843504aa592514554a6100fbc\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees, not a single tree. This makes it unsuitable for physics simulation of a single object.\"\n    }\n  },\n  \"ef06cca797074500a95860cdc641339e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we want. It's a single object on a plain background, suitable for physics simulation.\"\n    }\n  },\n  \"efe02e37a19847e8b91c33b7814214ea\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and the object is not clearly identifiable. It's difficult to determine if it's a tree, ficus, or fern, or something else entirely.\"\n    }\n  },\n  \"f0f495d58a5d4be9987c3d76e3dd052b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' class. It is a single object on a plain background, suitable for physics simulation.\"\n    }\n  },\n  \"f118e49485e445c2b3089a0461e21157\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's difficult to discern the object's shape and structure, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"f1f439b9cb8a46a697299413558bd3f3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we're interested in. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"f2add40433924a77b289bc605929c356\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is overexposed and it is difficult to identify the object. The object looks like a bonsai tree, but the image quality is too poor to be sure.\"\n    }\n  },\n  \"f2af9811d4cf4597b7c1cbe070ea67e8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree in a pot, which falls under the 'bonsai tree' category. It's a single object and suitable for physics simulation (e.g., how it might sway or fall).\"\n    }\n  },\n  \"f3707483be4e4934b43dde05727c2966\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"f3beec38258843f08da94d44f1b72d2b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f41f95e3913b44e5ae934ad765634249\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a ficus in a pot, which is acceptable for physics simulation in a video game. It clearly depicts a single object belonging to the specified class.\"\n    }\n  },\n  \"f420ea9edb914e1b9b7adebbacecc7d8\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bonsai tree, which falls under the 'tree' class. It is a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"f453848992604a4ea1dac24d8e2b79a3\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which falls under the 'tree' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"f4665a83747b428d8615e35231d260a4\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which falls under the specified classes. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f473859bb3a943818f1fc604cbc77f50\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't depict a tree, ficus, or fern. It shows a square structure with a brown surface inside.\"\n    }\n  },\n  \"f684c3e68ab54ad092abd00095b80f51\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which fits the specified class and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f75bcaa8703a4f838efa69350a3ad3fe\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f77aa0e12b064df18df2c050fe5156c6\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree, which is one of the specified classes. The image clearly shows the object, and it is suitable for use in a physics simulation.\"\n    }\n  },\n  \"f8e8aa1a7a1b434e9d3ec1e770d4511b\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees) of different types, which is not suitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"faaa22a9f0df44a9a1e948d6ace12e66\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fungus, which is not among the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"fb9ef9004f844459bd43c6ac7cb47264\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single tree, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"fd62851fe22c43388b8c19fa30d748ad\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bonsai tree, which falls under the 'tree' category. It is a single, clear object and suitable for physics simulation purposes.\"\n    }\n  },\n  \"fd75c4c925954706bd936eaff13c3a3c\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree trunk but it also contains pavement and other plants. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"fdbe49ac42d34d4c81fc21bf91f022bf\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree-like object, specifically a ficus or bonsai tree, and it is isolated on a white background.\"\n    }\n  },\n  \"fdc020c66f8d448eac03d44d203b3ff9\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree trunk, which falls under the 'tree' class. It's suitable for physics simulations as it can be used to model the behavior of a tree trunk when subjected to forces.\"\n    }\n  },\n  \"fef2cdc5f46a4118ba51eb0b77847400\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The tree is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"ff081af984bd4a87829d2b06fe3e428d\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts mushrooms, which are not in the list of accepted classes (tree, ficus, fern, oak tree, pine tree, evergreen, palm tree, maple tree, bonsai tree).\"\n    }\n  },\n  \"ff47a1501f8f4c30af3fcf0705a0c53e\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a palm tree, which belongs to the class 'tree'. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"ffff418f0dd44b45b47380f85891341f\": {\n    \"obj_class\": \"tree\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a pine tree, which is a type of tree. The image contains only the tree and a white background, making it suitable for physics simulation.\"\n    }\n  },\n  \"00d8706c2d44491db32bea85637987ad\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is an abstract shape and does not represent any of the specified classes (tree, ficus, fern, or related grass types). It's also not suitable for physics simulation as it lacks detail and realistic features.\"\n    }\n  },\n  \"011f2b266bed45c28face5dcb50776df\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as a tree, ficus, or fern. The image quality is too low for training data.\"\n    }\n  },\n  \"01aae3de8647408fb797e7f971189f7d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a simplified, cartoonish representation of a tree or plant. It lacks the detail and realism needed for accurate physics simulation in game development. The image doesn't resemble a real-world tree or fern closely enough to be useful for extracting material properties or simulating realistic behavior like swaying in the wind.\"\n    }\n  },\n  \"02225211ca30459cad8429aecc3ba710\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single grass object clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"025977f18c1e4a7d922cc815084bd6ab\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any of the specified classes (tree, ficus, fern, or grass-related objects).\"\n    }\n  },\n  \"02cee5ea8efe4cbfa4b228e84e8f5d9b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass clump, which falls under the specified classes (grass, lawn, turf, etc.). It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"02faef86ddd441179e6b9d85a546fe79\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass patch, which is a suitable object for physics simulation in a video game. The quality of the image is also good.\"\n    }\n  },\n  \"033878c2373c4188bf9e89296b819e3a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white, and it's impossible to discern any object or class from it.\"\n    }\n  },\n  \"03499e81ddab44e496284ef8807b55bd\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a landscape with grass, but it's not a clear depiction of a single object belonging to the specified classes. It's more of a terrain view.\"\n    }\n  },\n  \"041d0a7014f04140aee98d117aebe439\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the acceptable classes ('grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture'). The image quality is sufficient, and it isolates the object well. It's suitable for physics simulations, especially for interactions like wind effects or objects falling on it.\"\n    }\n  },\n  \"04eeeca688074aa19a9c94e596b04e33\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass in a pot, which is not a natural setting for grass and includes an additional object (the pot). This doesn't fit the criteria of a single, naturally occurring object for physics simulation.\"\n    }\n  },\n  \"056a697d2c7c495db13d3d915b097aba\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the classes: tree, ficus, fern. It depicts a brown landscape. Also, the image quality is not high enough.\"\n    }\n  },\n  \"0689cc8c406d42009cbf0d82f7e39b07\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single object (grass) clearly and is of sufficient quality for training data. The grass could be used in physics simulations.\"\n    }\n  },\n  \"06d32c05f32642d99253b66d060f2c4c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"07af7bc86dd04b71a2ebab4aa24d99b7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows grass in a pot, which can be considered a single object for physics simulation purposes. The image quality is acceptable.\"\n    }\n  },\n  \"08c126cdc4a54334b8d67d258bc38f53\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image quality is good.\"\n    }\n  },\n  \"094f1083cbb44435a78c7bb5b1c934e3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single blade of grass, which fits the class of objects to be selected. It is also clear and of good quality, making it suitable for training data.\"\n    }\n  },\n  \"0a0762b729364e999bd6630a6a33539c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-quality, simplified model of a leaf. It lacks detail and doesn't clearly represent a tree, ficus, or fern. It's not suitable for physics simulation due to its unrealistic appearance.\"\n    }\n  },\n  \"0a162cc9fe5d4e1e82a523368cbc5b04\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft grass block, which is not a realistic representation of grass and is therefore not suitable for training a physics simulation model. It's a blocky, stylized representation, not a natural object.\"\n    }\n  },\n  \"0ab190dfe35a4bccba4bf64df18d062b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable. It is difficult to determine what the object is, making it unsuitable for training data.\"\n    }\n  },\n  \"0ab6e03ccff14818bc5b356cfb0ae6bd\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple grass patches arranged on a platform, not a single object. This makes it unsuitable for training physics parameters for a single grass patch.\"\n    }\n  },\n  \"0b1e8ead9da444b196214ad40e4c2ae6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft block, which is an unrealistic representation of grass and soil. It's not suitable for physics simulation as it doesn't represent the real-world properties of grass or soil.\"\n    }\n  },\n  \"0b420f6ec97640c69a59c4bd3ad62c02\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single grass plant clearly, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"0d98b4f137f9493e97f46bd7990de625\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the provided list of acceptable classes (grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, pasture). The image quality is good, and it appears suitable for use in a physics simulation.\"\n    }\n  },\n  \"0e18753981784640b7725447ff0edd72\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a sphere covered in leaves, not a single object belonging to the specified classes (tree, ficus, fern) or their related objects (grass, lawn, etc.). It is not suitable for training a physics simulation model.\"\n    }\n  },\n  \"0e8da87c31b84712a309bd60111220c2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant, possibly grass, which falls under the provided categories. The image is clear and the object is well-defined, making it suitable for training data.\"\n    }\n  },\n  \"0f077be0844c4eb5ac96a90ba3f7dc4c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, pixelated representation of grass and soil, resembling a Minecraft block. This level of detail is not suitable for realistic physics simulations, as it lacks the necessary complexity for accurate material and Young's modulus calculations.\"\n    }\n  },\n  \"0faf4ddffcd14326bfb5717c24f6e2b4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is low. It's also difficult to identify the class of the objects.\"\n    }\n  },\n  \"0fb6eb27ad4f4f90b946a893b84ee35e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified classes (tree, ficus, fern) or the related objects like grass. It's difficult to determine what the object is, and therefore it's not suitable for training a physics simulation model.\"\n    }\n  },\n  \"1018101c540f4fa08854e08e5959f220\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a cat and grass. We only want one object in the image.\"\n    }\n  },\n  \"1039c6540cf64a36ab62b2b8238be9db\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and it is of good quality. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"106c2c58f6d743c7897e327a9152ea54\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is acceptable, and it clearly shows the object. It's suitable for physics simulation training data.\"\n    }\n  },\n  \"10fba21f3ee3438aa3eaa4d58d4a3426\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and it's not possible to identify the object.\"\n    }\n  },\n  \"116229e75bc54c3c8f06834751d4bde6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects, a sphere and a plane, both with the same leaf-like texture. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern) or their related ground covers. The objects appear to be texture samples rather than representations of real-world objects suitable for physics simulation.\"\n    }\n  },\n  \"11918108bcd94196a701152311bf4188\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple types of vegetation (grass and flowers) and is not clearly depicting a single object from the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"12e4cdc21ac44632b0cc23713f07c646\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is of a sphere with a grass-like texture. It doesn't clearly depict a real-world object like a patch of grass or a lawn. It's an abstract representation, making it unsuitable for physics simulation training data.\"\n    }\n  },\n  \"142b2a0b574a4ed79ed7ab2bc7034816\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is good, and the object is isolated, making it suitable for physics simulation training.\"\n    }\n  },\n  \"14412acfebb8483da14bc009ecef9179\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is not clearly identifiable as a tree, ficus, or fern. The image quality is low and the object's shape is distorted, making it unsuitable for training data. It is also difficult to determine what the object is supposed to represent, so it is not appropriate for physics simulation.\"\n    }\n  },\n  \"1547c6f4962a4a30bec898f7295ddce4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a clump of grass, which is suitable for physics simulations in a video game. The quality of the image is good.\"\n    }\n  },\n  \"16d0f827462547b6a8e89fa3770859ab\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows grass, which is a valid class for the video game development. The image quality is good and the object is clearly depicted.\"\n    }\n  },\n  \"174ace56f03a4683967616fa4914800d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly depicted.\"\n    }\n  },\n  \"17aae063476945549a64fe4d6af2631e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright, and it's difficult to discern any specific object of interest.\"\n    }\n  },\n  \"18124d917d6745948c57ea0b37a4ee0a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a block of grass, which falls under the provided class of grass/lawn/turf. It is a single object and the image quality is good. It could be used in a physics simulation.\"\n    }\n  },\n  \"183a610d3bdb4917ba7d78d615975c01\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to show a terrain or ground texture, which is not one of the specified classes.\"\n    }\n  },\n  \"191cf67fd7c94e0da0137912f60074ca\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"1a518b12425b40099580ccd7855f4930\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a chair, which is not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"1b139a45ccea477baada9a5b62cad1db\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is difficult to identify the object.\"\n    }\n  },\n  \"1b38e3e720a24fa18e78e2387a4f1532\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's also a single object suitable for physics simulation.\"\n    }\n  },\n  \"1b43d98193b746cca341bb9dbb13b45e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's hard to distinguish the objects clearly. There are also multiple objects in the image.\"\n    }\n  },\n  \"1b7fa9532a4342a1ac452589670a552b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, not a tree, ficus, or fern. It doesn't belong to any of the specified classes.\"\n    }\n  },\n  \"1b900e5cb8a84e0fa96b3a6df11c03d1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified class. It is suitable for physics simulation as it shows a single object.\"\n    }\n  },\n  \"1c21d7834dbd4458bdec918f805b9a1c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple trees, not a single tree. Also, the trees are too abstract and not realistic enough for physics simulation.\"\n    }\n  },\n  \"1c3b5c93cbfe4a9cb7d343bcc1f6fc93\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patch of grass with rocks, not a single object belonging to the specified classes (tree, ficus, fern). It's a combination of grass and rocks.\"\n    }\n  },\n  \"1c840565936a48b2b25e71e296064cf1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. The image quality is acceptable for training data.\"\n    }\n  },\n  \"1d0f9ba933e4417398372ed62972b7ee\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with mountains and a river. It does not clearly depict a single object from the classes tree, ficus, fern, or grass. It's a landscape view, not a single object.\"\n    }\n  },\n  \"1d32047a5cef4647b7b439a61a5449a4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass clearly and is of good quality, suitable for training a physics simulation model.\"\n    }\n  },\n  \"1dd88011e10b48d18b0249c3d41f62a6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere covered in grass, which is not a realistic depiction of grass in a physics simulation context. It's too abstract and doesn't represent a usable object for simulating grass behavior like swaying or being stepped on.\"\n    }\n  },\n  \"1e93d0ae28ff433e9436e45c35a85d98\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and low quality. It's hard to discern details about the grass.\"\n    }\n  },\n  \"1e9b2d8c61ad415db8cd0f231133cff5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with multiple objects, not a single object from the specified classes (tree, ficus, fern, or grass). It's also unclear and not suitable for physics simulation training.\"\n    }\n  },\n  \"1f930027aa4f46ed9402cee45aa8eba6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the provided categories and is suitable for physics simulation.\"\n    }\n  },\n  \"209b7ca9ebbd44acb2b3a74fbbc32d2b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a pixelated block of grass and dirt, resembling a Minecraft block. It doesn't represent a realistic depiction of grass, lawn, or turf suitable for physics simulation training data. The pixelated nature and blocky shape make it inappropriate for learning realistic material properties or young modulus.\"\n    }\n  },\n  \"20e377844ff94fa495e5d186927a1949\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant, which is suitable for physics simulation in a video game environment. The image quality is good, and the object is clearly visible.\"\n    }\n  },\n  \"21f23b30ae5a48e8b1d362e2c48123a2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's difficult to make out the details of the grass. The object is hard to see and the image quality is low.\"\n    }\n  },\n  \"2306a53faeba4ce7b7f1235900840032\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass clearly. The quality is good, and it can be used for physics simulation.\"\n    }\n  },\n  \"24e3c6c6892447ccb04da9fe293729c7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is one of the classes we want to include. The image quality is good, and it's a single object on a white background.\"\n    }\n  },\n  \"2523f2042a88413983d68fd1ba0adec3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly visible. It appears to be grass, but the quality is too low for use in training data for physics simulation.\"\n    }\n  },\n  \"2629e1e68add4fe6a5cab75217f859a0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a building and multiple trees arranged in a row. It doesn't depict a single tree clearly, and it includes other objects like cars and buildings. This makes it unsuitable for training a model to learn the physics of a single tree.\"\n    }\n  },\n  \"26613b81f24a43eaabead2cca2cbba6d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to clearly identify the object. The image also has a dark background which makes it hard to use for physics simulation.\"\n    }\n  },\n  \"2696dcbc6b3c40a680f13b681f7ea64c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the acceptable classes (grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, pasture). The image quality is good enough for training data.\"\n    }\n  },\n  \"26c9d0c5969347f7b850a4ecda30d8fa\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"This image depicts a fictional creature that does not belong to any of the specified classes (tree, ficus, fern, or grass). It is not suitable for training a physics simulation model for these objects.\"\n    }\n  },\n  \"26ceed762978473db83ec20576918f55\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the provided categories (grass, lawn, turf, etc.). It's a clear, isolated image suitable for training a physics simulation model.\"\n    }\n  },\n  \"26e02cb4385f487aa51bdc8967a63358\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly visible.\"\n    }\n  },\n  \"26f9cc0044d3408e862818142fbf06fd\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and it is of good quality. It would be suitable for use in training a model for physics simulation.\"\n    }\n  },\n  \"27a7f077350d4f82af523111fd564ab2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is poor; the object is not clearly visible due to the high contrast and brightness.\"\n    }\n  },\n  \"28d43251cc7143f692fc0bcbf9e43931\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and contains multiple objects and landscape elements, not a single tree, ficus, or fern. It is also too far away to be useful for physics simulation.\"\n    }\n  },\n  \"29a5af63e3c34812b2e5515d3c794c04\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus, which is a valid class. The image quality is good, and the object is isolated on a white background.\"\n    }\n  },\n  \"29d28993b92944aba575fdc01b5c91a4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly visible.\"\n    }\n  },\n  \"2a0e1033e935452cb03d17c50fb12807\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and doesn't clearly depict a single tree, ficus, or fern. It shows a landscape with fields and some trees, but it's not suitable for training a model to learn the physics of a single object.\"\n    }\n  },\n  \"2a21e0c837674d04b126f5eb5afe7da3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"2a2511deadc94ec293ce1f634a7299cd\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is low and it's hard to identify the object clearly. The rendering style is also not suitable for physics simulation purposes.\"\n    }\n  },\n  \"2a5bc8245cd048e78efec5f1838f08e3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass in a planter, which is not ideal. We want images that depict grass in a more natural setting for physics simulation purposes. Additionally, the planter itself is also visible, which is not desired.\"\n    }\n  },\n  \"2b12aaf33f1943c3bbac16e663b3947c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts dead corn stalks and debris on a patch of dirt. It doesn't fall into any of the specified categories (tree, ficus, fern, or grass variations). Additionally, the image quality is not high, and the scene is cluttered, making it unsuitable for training a physics simulation model.\"\n    }\n  },\n  \"2bddcd1d623744e4ad25357a8e6fdd53\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass plant, which falls under the specified classes (grass, lawn, turf, etc.). The image is clear and suitable for use in a physics simulation.\"\n    }\n  },\n  \"2cf39697964748d39618890717f3bf2d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the acceptable classes of ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. It's a simple, clean image suitable for training data.\"\n    }\n  },\n  \"2e0d3e77227c48718366af0c143bb0df\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blocky, Minecraft-style object that does not resemble a tree, ficus, or fern. It is also not an object that would be used in a physics simulation.\"\n    }\n  },\n  \"2e6b51c78fea4cc8947a5bf34a455509\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is one of the classes we are looking for. The image is also of high quality and suitable for training data.\"\n    }\n  },\n  \"2ebaf738303347afbe4bd0101f0be9b3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"2f4b192b19044af3bdbbd7c6c44d83e2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict the object class (fern, tree, ficus). The image quality is low, making it unsuitable for training data.\"\n    }\n  },\n  \"2fd6581ee4df470ca9bca90ffb810b04\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the required classes (tree, ficus, fern, or grass). It appears to be a sphere with a grassy texture, but it is not a realistic or useful representation of any of the target objects for physics simulation.\"\n    }\n  },\n  \"2ffb4d5302c14d038eaf6488b8c7ede2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image quality is good, and it shows the object in isolation.\"\n    }\n  },\n  \"3033f909816743b39e6df632e4ed97f2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a tree, which is one of the classes we are interested in. The image quality is good, and the object is isolated.\"\n    }\n  },\n  \"32396ab125d142fcbcaa8e2f1e3eb8b4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a single blade of grass, which falls under the specified classes (grass, lawn, etc.). It's suitable for physics simulation as it can be used to model grass swaying in the wind.\"\n    }\n  },\n  \"3336eaa6a2c34256bb32984519586042\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass growing on a wall, which is not a natural or typical scene. It doesn't represent a realistic scenario for physics simulation of grass swaying in the wind, as the wall would significantly restrict its movement. Additionally, the presence of the wall introduces another element that is not the primary focus of the simulation, making the image unsuitable for training data.\"\n    }\n  },\n  \"3352f9d646ec4f25b8aeb28e4232814a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass patches, which fall under the acceptable classes (grass, lawn, turf, etc.). The image quality is adequate, and it focuses on the object class without significant distractions.\"\n    }\n  },\n  \"3386e85fd39c48bba8d409641eea1302\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It is an abstract sculpture.\"\n    }\n  },\n  \"344af319c15d42da9e33d16bb534d95f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass/lawn, which falls under the provided list of objects for the class 'grass'.\"\n    }\n  },\n  \"3514fc9a243247b5a517e52edfd09c0e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor and the object is not clearly visible. It's difficult to determine if it's a tree, ficus, or fern.\"\n    }\n  },\n  \"36c075ff3d3d47849d5f10af860635a1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly depicted. It's difficult to identify the object as a tree, ficus, or fern.\"\n    }\n  },\n  \"3a5a5c5be677403d9f56e451cd3dd4af\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single clump of grass, which is suitable for physics simulation (e.g., swaying in the wind). The image is clear and of good quality.\"\n    }\n  },\n  \"3a67e76decc849c694c228eb590a9902\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is suitable for physics simulation in a video game. The image quality is good.\"\n    }\n  },\n  \"3a7f0a6e72ad4c2bb00b2f173b2b10e9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a rock or some other geological formation with moss or algae growing on it. It is also unclear what the object is, and it's not suitable for physics simulation.\"\n    }\n  },\n  \"3ab12df56ac04d63a096562ce3fc0763\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the class of objects suitable for physics simulation in a video game (e.g., swaying in the wind).\"\n    }\n  },\n  \"3abcaff1a11f4d03842f9c8d73bb0121\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, and it's suitable for physics simulation in a video game (e.g., grass swaying in the wind).\"\n    }\n  },\n  \"3af15d9401d04cee97f78dc3a2d02e05\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a block of grass and dirt in a pixelated style, resembling the game Minecraft. This representation is not suitable for learning realistic physics parameters for grass or soil.\"\n    }\n  },\n  \"3b5a6e25dcae4a7e96569a366daa24c5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and the shape is not clear. It is difficult to determine if it is grass.\"\n    }\n  },\n  \"3c376ff44dd04332810b452732d7da5a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and it is not clear what the object is. It looks like a patch of grass, but the quality is too low for training data.\"\n    }\n  },\n  \"3cb5a0f7125d4817897378a6018fa50e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object clearly.\"\n    }\n  },\n  \"3cc5124fda1f47c58e832ef1b4d02ea9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and a building, not just the desired classes (tree, ficus, fern, or grass). The object is not clearly depicted and the image quality is low.\"\n    }\n  },\n  \"3cdb37c9eb9848a882197377af3ad63a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects of different classes. It's not a single object in isolation.\"\n    }\n  },\n  \"3d6b86c469b34dd9a897975a39f11b7c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not contain any of the specified classes: tree, ficus, or fern. The object in the image appears to be a wall or panel with a wood-like texture. It is not suitable for the intended purpose of training physics parameters for game development.\"\n    }\n  },\n  \"3dc559bf7351402e8010b5dcefaf3c6a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image quality is good, and the object is isolated.\"\n    }\n  },\n  \"3dd7a9dee7234665826875b678fac3eb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single blade of grass, which falls under the provided list of objects for the grass class. It is a clear, isolated image suitable for training.\"\n    }\n  },\n  \"3df2930ca28642a3bf8f0a2456b98d7f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable. It's difficult to determine if it belongs to any of the specified classes.\"\n    }\n  },\n  \"3e2039221d894715a37dfbc9e97ecddd\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is a low-resolution, blocky representation of a tree, which is not suitable for physics simulation training data. The blocky nature makes it difficult to define realistic material properties and simulate natural movements.\"\n    }\n  },\n  \"3f36a9e451f84acf87f08222c8ba6265\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too pixelated and doesn't represent the grass well enough for physics simulation.\"\n    }\n  },\n  \"3f44efa7b6704bbd98ace94f1c8605fe\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a grass patch, which is acceptable for the class.\"\n    }\n  },\n  \"3f651b26523a4715ba9f44604edb7691\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grassy area, which falls under the categories 'grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture'. It is suitable for use in a physics simulation, as the properties of the grass can be simulated.\"\n    }\n  },\n  \"3fc4e31a87464c1da1a046c63d7a3774\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere covered in grass, which is not a natural object. It is not suitable for physics simulation.\"\n    }\n  },\n  \"415b18b369ea495da1e572cef1030100\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly depicted. It's hard to tell what the object is.\"\n    }\n  },\n  \"41c30c06a4ee40a6a3005b745f40db68\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass, which is a suitable object for physics simulation in a video game. The image quality is acceptable.\"\n    }\n  },\n  \"41e3852ac9924dc3a934f90b16aba717\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a lawn with multiple grass patches, but it is presented in a way that is too abstract and simple. It doesn't clearly show the details of the grass or the lawn, making it unsuitable for training a model for physics simulation. Additionally, the presence of the platform underneath the lawn is distracting.\"\n    }\n  },\n  \"427981f314f84bbead32b84fc6887767\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf etc.). It's suitable for physics simulation as it represents a deformable surface.\"\n    }\n  },\n  \"427cc7e0e6fa4b7483babfb189f858c0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single clump of grass, suitable for physics simulation.\"\n    }\n  },\n  \"4304dbed3aa04ba9b99daa2cd35088c3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is not good.\"\n    }\n  },\n  \"43627b161948443d80f1227cbeb83363\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass in a pot, which is not a natural setting. We want to simulate the physics of the object in a natural setting. The pot is also not part of the class.\"\n    }\n  },\n  \"43744e5495e345b1be0277e2ea78fb46\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of ashes and charred wood on a patch of grass, which does not belong to any of the specified classes (tree, ficus, fern, or grass). It also includes multiple objects and is not a clear representation of a single object for physics simulation purposes.\"\n    }\n  },\n  \"449aa06d99734f11a66ec7362517a1a0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is not clearly identifiable as a tree, ficus, or fern. It appears to be a stylized or abstract representation, and the image quality is not high enough for accurate physics simulation learning.\"\n    }\n  },\n  \"460d6a1b0372447899450e017704d7d1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"462b21e2396946ab803053205668e867\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is hard to tell what the object is. The object is also not clearly defined.\"\n    }\n  },\n  \"478857e9109d482b99d1357e61b5766b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly visible.\"\n    }\n  },\n  \"47edba2c4b4740b9a0532a4b198bed81\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere with a grass texture applied to it. It doesn't represent a real-world object like a patch of grass or a lawn, which would be more appropriate for physics simulation.\"\n    }\n  },\n  \"47f357729c5748b88aa3dfdbc9babd88\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a clump of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is good, and it shows a single object, making it suitable for physics simulation training data.\"\n    }\n  },\n  \"4810e810aee040918d6da9fd2c282d85\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern. It is of good quality and suitable for physics simulation.\"\n    }\n  },\n  \"4a03e27bca7b4b6490916028a9c4b200\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a terrain, not a tree, ficus, or fern. It also doesn't resemble any of the objects in the provided list (grass, lawn, etc.).\"\n    }\n  },\n  \"4a3169063e18456faad3900cbf76a34f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass patch, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4a59efcec47d432baac221c6fba2c6c3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a fence and a patch of grass/vegetation within it. It does not cleanly depict a single object from the specified classes (tree, ficus, fern, or the grass variants). The fence is a distraction and not relevant for physics simulation of the vegetation.\"\n    }\n  },\n  \"4b800e07ea3543e3870ad5e53b39d825\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. The image quality is good, and it isolates the object well.\"\n    }\n  },\n  \"4ba40fde7b9b416e93d6680111130201\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a field of plants, not a single tree, ficus, or fern. Therefore, it is not appropriate for the specified classes.\"\n    }\n  },\n  \"4bf468bb43954733ac1469c1158f84c8\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass and flowers, but we are only looking for images of trees, ficus, or fern. The image also contains multiple objects and is not focused on a single object.\"\n    }\n  },\n  \"4bf89156f3674c07ac91e3bf6304dd1c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern, and the quality is good enough for training purposes.\"\n    }\n  },\n  \"4c9282127df547fd983df4174ad3b5af\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is too abstract and lacks the detail needed for physics simulation. It's a very simplified representation of grass.\"\n    }\n  },\n  \"4ca1ab9ee08e4e0bbd02e46cc7af857c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a fern, which is one of the classes we are interested in.\"\n    }\n  },\n  \"4de4699e1a084af8b5be3a3f7cef1984\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks detail, making it difficult to clearly identify the object as grass. The quality is too low for use in physics simulations.\"\n    }\n  },\n  \"4e20300d1f534b3283a41982afa33a28\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to identify the object clearly. It doesn't provide enough detail for use in a physics simulation.\"\n    }\n  },\n  \"4e2d5715e4f74993a8b9590ddddef1b6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft block, which is not a realistic representation of grass or soil and is not suitable for physics simulation training data.\"\n    }\n  },\n  \"4e535b6097fa46218e85c3e0aab7826d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a solid black shape against a white background, making it impossible to identify any object class like tree, ficus, or fern. The lack of detail and the solid color prevent any meaningful analysis for physics simulation purposes.\"\n    }\n  },\n  \"4ee100c994e8493e8aabea254c88ff05\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor, it is difficult to identify any objects clearly.\"\n    }\n  },\n  \"4f00c77db71e482f82bf5335513031a1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"4f01396fb91b4f5c83a890381f2d4424\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass patch clearly and it's suitable for physics simulation.\"\n    }\n  },\n  \"4f8d59e086f0499796fa12f14d4df5c4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass clearly, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4f98bdcfc63e488ba4334a5a025b4377\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a block of grass and soil, not a single object like a tree, ficus, or fern. It's a composite object.\"\n    }\n  },\n  \"4fc117d6a23441bf803bef56e378f098\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, but it's rendered in a very abstract and blocky way, which doesn't resemble natural grass and would not be useful for physics simulations of grass swaying or being affected by external forces. It's too abstract.\"\n    }\n  },\n  \"5194ac6d21c242e188c2fbbe0ac122e6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple grass patches, not a single object. Also, the quality is low and it's hard to discern details.\"\n    }\n  },\n  \"51a138f505f7465284bacc6e1d0858f6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a class of object that we want to include in our dataset. The image is also of good quality and shows the object clearly.\"\n    }\n  },\n  \"51ce286377fc4909ab11ae276380dc58\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains both a tree and grass, whereas we are looking for images that depict only one object.\"\n    }\n  },\n  \"526cc28513634b7298a8a2eb73b138f5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass with a visible edge, suggesting it's a small section rather than a natural, continuous grassland. This makes it less suitable for physics simulation of a larger area.\"\n    }\n  },\n  \"52b3808c8a4f48188ff9a1217f2d84aa\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. The image quality is acceptable for training data, and it's suitable for physics simulation.\"\n    }\n  },\n  \"52b6a07e9d8741ffbaa403a78f778d96\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and the quality is sufficient for use in a physics simulation.\"\n    }\n  },\n  \"5472ca15175042ebb0a19f724c2855ac\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is good, and the object is isolated, making it suitable for training a physics simulation model.\"\n    }\n  },\n  \"5477accb9d294cd18962dd461d08b9e0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is suitable for physics simulation in a video game. It is also of good quality.\"\n    }\n  },\n  \"5479974baffe4d2b879c195745ccb11f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single object, a type of grass, clearly and cleanly. It is suitable for use in a physics simulation to learn material properties.\"\n    }\n  },\n  \"55f7ebdd858c4e23a23a8b763aae4e92\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any object.\"\n    }\n  },\n  \"55fb64e04c724361bbfb0e48c25d202b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass and soil, which does not fall into the specified classes: tree, ficus, or fern. Additionally, the simplistic, blocky style is not suitable for physics simulation, as it lacks the detail required for accurate physical behavior.\"\n    }\n  },\n  \"564ab33627974dee917d2ded0b800c5b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which fits the class criteria. It is also clear enough for physics simulation.\"\n    }\n  },\n  \"5857f3c5c97745bb99c1df22ba5b9416\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which is acceptable for the specified classes.\"\n    }\n  },\n  \"59d519ec820a42c1864fdd7342214e75\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patch of grass/lawn on a platform. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern). Also, the presence of the platform makes it less suitable for physics simulation training data.\"\n    }\n  },\n  \"5b6f80a375a84c31bd024159b54f0044\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"5b829b211c0c4243a00e64693b37248b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly depicted. The low-poly rendering style also makes it unsuitable for accurate physics simulation.\"\n    }\n  },\n  \"5c1b99e8d25b485e9925874dac8dc533\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass and a building. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"5c9ad35f898a40fe8eb55a6f0695955f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mountain, not a tree, ficus, or fern. It also includes grass, but the mountain is the main object.\"\n    }\n  },\n  \"5df15d0768854f93b6db1db333860241\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patch of grass with some strange circular depressions. It's not a clear depiction of grass, lawn, or any of the specified objects, and the depressions are distracting and unrealistic for physics simulation purposes. The lighting and color are also not ideal.\"\n    }\n  },\n  \"5e883726c95a4536828109d5b94483db\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or grass-related objects). It shows a cartoon pony.\"\n    }\n  },\n  \"5feb39ff7059437aa427572cb1db04d2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or grass). It appears to be an abstract geometric shape.\"\n    }\n  },\n  \"60a4f92d8226482ea32184f987ef0342\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified class. The image quality is good, and it appears suitable for use in a physics simulation for a video game.\"\n    }\n  },\n  \"613594a95a644c0fa700e504f66bc63b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict trees. The shapes are too geometric and lack detail for physics simulation.\"\n    }\n  },\n  \"61b48bdf1ad343f08360c8d380c3d71a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows flowers, which are not in the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"61e1d1cf76c14ba29e04e8ce3111a0d5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and blurry, making it difficult to identify the object clearly. It's hard to discern what is being depicted, so it's not suitable for training a model for physics simulation.\"\n    }\n  },\n  \"622546a633094fed94cb86d25fabe67f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sheep, which is not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"62fb11a39cf04facaaac5ecbd4a597a9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with a lake, which does not fall under the specified classes (tree, ficus, fern, or grass). Additionally, the image contains multiple objects and is not suitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"6301ed909efe42d78c478e4a16dd11d1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and contains multiple objects. The grass is not clearly depicted.\"\n    }\n  },\n  \"6367d6fa23ca4db3baffd69eecbbfda5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts tall grass, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"6469bc58ead64c5d9e672ebbc37ed955\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft-style grass block. The blocky, unrealistic representation is not suitable for training physics parameters for realistic simulations.\"\n    }\n  },\n  \"651629418db64fa8933afeaee3ebc875\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern-like plant. It's a single object and the quality is good. It could be used in a physics simulation.\"\n    }\n  },\n  \"65cf3575d0894236a437053b0b3f246b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building interior, not any of the specified plant classes (tree, ficus, fern, or grass-related objects).\"\n    }\n  },\n  \"674dc1556dac485585fb0d80c6b24727\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass patch or lawn, which falls under the specified classes (grass, lawn, turf, etc.). It's a clear, isolated image suitable for training a model for physics simulation.\"\n    }\n  },\n  \"6762d57132694011a56b502b23072940\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows grass and a black object, but the black object is not clearly identifiable as one of the specified classes (tree, ficus, fern). The presence of both grass and an unidentifiable object makes it unsuitable for training a physics simulation model focused on a single object.\"\n    }\n  },\n  \"6865b9e80afa4306ad4b58b0f46f4dde\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere covered in grass texture. It is not a natural depiction of grass, lawn, or any other object within the specified classes. It is an abstract representation which may not be suitable for training physics parameters for realistic simulation.\"\n    }\n  },\n  \"68e2b1bd08b445259a409c796ff1ceb5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is one of the classes we need. It is a clean image of grass and can be used for physics simulation.\"\n    }\n  },\n  \"6952780b80594a31aab2dedf7249a47a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is an acceptable class for the video game development.\"\n    }\n  },\n  \"6a14ed7a0dbf4d5da7720e98cc05b25e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass patch clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"6c45160f56d34147add5d2f117cad0c2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"6da590d978c742279ce4d2f248140446\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patch of grass with a strange background. It's not very clear and the quality is low. It's not suitable for physics simulation training data.\"\n    }\n  },\n  \"6e95ef8ba788454fb93a6ec29f060a95\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower, which is not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"6f0368a45e474911a38a2d6d84251009\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple patches of grass arranged in an unnatural way. It's not a clear representation of a single, natural object for physics simulation.\"\n    }\n  },\n  \"6f2454b32afd4cafa15bcbf88f953862\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a house in addition to the grass, which is not what we want.\"\n    }\n  },\n  \"6fd5c3e0bfcc417e932723c651617c0e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, pixelated representation of grass and soil, resembling a Minecraft block. This is not suitable for training physics parameters for realistic game development.\"\n    }\n  },\n  \"712568f0007440c69bed719fc1c0140b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any object of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"71d80a83b96b40728ed65072dc5446fc\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable. It's difficult to determine if it belongs to any of the specified classes (tree, ficus, fern). Also, the object is very thin, which makes it not suitable for physics simulation.\"\n    }\n  },\n  \"71ec94a5da09472a820673000b2f48ba\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is suitable for physics simulations in a video game. The quality of the image is also good.\"\n    }\n  },\n  \"73735ebf22ca48ccb9800eef74b7a382\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a clump of dirt or debris, which is not relevant to the specified classes.\"\n    }\n  },\n  \"740441de743648758248181ddc71af9b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass plant, which falls under the provided list of acceptable objects for the class. The image quality is good, and the object is isolated. This image would be suitable for physics simulation training data.\"\n    }\n  },\n  \"7416beaf51864112ae9fa9a016114fde\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is good, and it clearly shows the object. This is suitable for physics simulation.\"\n    }\n  },\n  \"74253d45fe014ec4861c9b5e1beec99c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to discern the object clearly. It's not suitable for training a model for physics simulation.\"\n    }\n  },\n  \"74995af4e30748ebb1e8c62ff5a3a6d3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's suitable for physics simulation as it shows a clear representation of the object.\"\n    }\n  },\n  \"74fc29b9c1594e00ad2b0640d4ed1305\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and it is difficult to identify the object.\"\n    }\n  },\n  \"758b5be71cd6427e9834d2968afff7c4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"7598babd6ced44019806a7879bf60656\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. Also, it is not clear what the object is.\"\n    }\n  },\n  \"75c4a39878074e20961acd27f55ec4b0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single blade of grass, which belongs to the class ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"75da0ae29102495da4f34e53f84a65f9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is one of the objects to be selected.\"\n    }\n  },\n  \"76a81bcd43744387a18a5815857a7370\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grassy area, which falls under the acceptable classes (grass, lawn, turf, etc.). It's also a clear, well-lit image suitable for training a model for physics simulation.\"\n    }\n  },\n  \"76af51f9c9d946f7920af08b16090683\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict any of the specified classes (tree, ficus, fern). It looks like a grassy patch with a pipe or small tree trunk in the middle of a concrete structure. The image quality is also low.\"\n    }\n  },\n  \"76ff2ca8965c42978ae31ce9db8ab87e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple trees on a patch of grass, which is not ideal for isolating a single tree for physics simulation. The low-poly style is also not suitable for accurate physics modeling.\"\n    }\n  },\n  \"770ba235be3a4ac1ab785d4c6bed66ec\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a piece of wood or bark, which doesn't belong to any of the specified classes (tree, ficus, fern). Also, it's not clear enough to be used for physics simulation.\"\n    }\n  },\n  \"779f6f69c94b4f15b65f28022550af58\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of dirt, which doesn't belong to any of the specified classes (tree, ficus, fern, or grass). Therefore, it's not appropriate for the video game development training data.\"\n    }\n  },\n  \"77b1b5f223f14f43ad3477f93a179c8b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-poly rendering of a plant, possibly a fern or ficus, but the quality is too low and the shape is too abstract to be useful for physics simulation. It's difficult to discern the object clearly.\"\n    }\n  },\n  \"783c748a023d44c8a4e4d5e3521b4fb4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which falls under the specified categories (grass, lawn, turf, etc.). The image quality is also good enough for training data.\"\n    }\n  },\n  \"786094e042cc41a7b9855ef784143ccf\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the acceptable classes ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. The image quality is good, and it shows a single object suitable for physics simulation.\"\n    }\n  },\n  \"78bc4573c3b449f9a889450852afd3d6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-poly depiction of grass, which doesn't accurately represent the object for physics simulation purposes. It lacks the detail and realism needed to extract meaningful material properties.\"\n    }\n  },\n  \"793e549199244a9caca5e2e830151adb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a clump of grass, which is acceptable for the specified classes and suitable for physics simulation.\"\n    }\n  },\n  \"7a97ae7018b94370ab60c0e7180696c0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a grass patch clearly, and it's suitable for physics simulation.\"\n    }\n  },\n  \"7b7ef2ff56e041d1bcc2b330ea8b1f19\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple grass patches on a square platform, not a single, clear instance of grass. It's not ideal for learning physics parameters for a single grass object.\"\n    }\n  },\n  \"7b96d6db2f2845ab84a172d8024b7b92\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a clump of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's suitable for physics simulation as it shows how a collection of grass blades might sway or react to forces.\"\n    }\n  },\n  \"7c0b7c41657f450c9de6250ad3d699f7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. The quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"7c6237253fe249af955cda4f6f966449\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"7dff32d72fb34e65a88327a328e329ce\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with grass and some brown patches, but it doesn't clearly depict a single object of the specified classes (tree, ficus, fern, or grass). It's a landscape scene, not a single object suitable for physics simulation.\"\n    }\n  },\n  \"7e2b98aab6064d63bb2fc3fda8450c27\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the objects are not clearly visible. It's hard to determine what the objects are.\"\n    }\n  },\n  \"7e5fbaece7954f3481eeb063294a793d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image quality is good, and the object is isolated on a white background.\"\n    }\n  },\n  \"7ebe6950dd4446babb31e3905b3b30d2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's hard to distinguish the object clearly. The image quality is low and not suitable for training data.\"\n    }\n  },\n  \"7fa5f13895ec4d80960e16bf96e5b9fc\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a clump of grass, which falls under the specified classes (grass, lawn, turf, etc.). It is also suitable for physics simulation as grass swaying in the wind is a common scenario.\"\n    }\n  },\n  \"802da387e10249bdb098e9dd338d0d01\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly visible. It's hard to determine what the object is. The image quality is also low.\"\n    }\n  },\n  \"8088512cc1c143cd815977d255bb9605\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image quality is good, and it's suitable for use in a physics simulation for video game development.\"\n    }\n  },\n  \"80c8e66626ce4797a794039ab77595e2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree, which is a valid class. The image quality is good and the object is isolated on a white background.\"\n    }\n  },\n  \"81058dbb7ce34a13b1aa756c60419df2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a clump of grass, and the quality is good. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"81bd4fcfff5844a4b2a1f74c926533a6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple grass patches, not a single, clearly defined object. Also, the grass looks low quality.\"\n    }\n  },\n  \"81df6ee21a0246748f9db4f26e62a5f0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a clump of grass, which falls under the specified classes ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. The image quality is good, and it clearly shows the object. It is also suitable for physics simulation.\"\n    }\n  },\n  \"827cd00022fc4be7963d2554de370d1b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grassy area, which falls under the class of 'grass' and is suitable for use in a physics simulation.\"\n    }\n  },\n  \"82c046c39a8c4adc81e793a725e218e6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too sparse and doesn't clearly depict a realistic object. The 'grass' appears as thin lines on a white background, making it unsuitable for physics simulation training.\"\n    }\n  },\n  \"8399c00672134b828ca6cf2363a95085\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to clearly identify the object as grass. The quality is not high enough for training data.\"\n    }\n  },\n  \"839e9594c9944353a6ee6fd2c1647c23\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a moss sculpture of an owl on a grassy patch. It does not depict a tree, ficus, or fern.\"\n    }\n  },\n  \"83a3db4b103f47468087d04a0fcd04bb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a clump of grass clearly, which falls under the specified classes. It is well-lit and not blurry, making it suitable for training data. The object is isolated on a white background.\"\n    }\n  },\n  \"84131519ea1d46ec9099e3b133d09663\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a block of grass and dirt in a pixelated style, resembling a Minecraft block. This is not suitable for physics simulation as it's a stylized representation and not a realistic depiction of grass or soil.\"\n    }\n  },\n  \"84194a1ccd39420390038a0db3af2a3d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which is suitable for physics simulation in a video game environment.\"\n    }\n  },\n  \"84938a8f3f8d4a0aa64aaa9c4e4d27d3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, pixelated representation of grass and soil, making it unsuitable for accurate physics simulation. The visual quality is too low for training data.\"\n    }\n  },\n  \"856baa098a5942469f1ec76203c01a1a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a non-organic object, possibly a sculpture or decoration, and is therefore not suitable for the specified classes.\"\n    }\n  },\n  \"8737d724681d48f9b56e1b1eb4c4e75d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"8752ea5fa49b48ac99778b70b1ee1434\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grassy patch, which falls under the class of grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, pasture. The image is clear and well-lit, showing the object distinctly. It is suitable for use in a physics simulation within a video game.\"\n    }\n  },\n  \"882f011886ad4725937a2533f22b5123\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly represent a tree, ficus, or fern. It's difficult to infer realistic physics properties from such a simplified shape.\"\n    }\n  },\n  \"883f0b0cba374545a11f807d1146c990\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree stump, which falls under the 'tree' class. The quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"8a0f36f239f94981bb3de0d50bd83643\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which fits the class criteria of ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. The image is clear and suitable for physics simulation.\"\n    }\n  },\n  \"8a6b8a18cbf74de8961c3a042d4edf9f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects of different classes, making it unsuitable for training a physics simulation model that requires isolated objects. Also, the image quality is not very high.\"\n    }\n  },\n  \"8a78295b56c64c16be6e2e4d7215dbfb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"8be09b9d10ad4fb8a9e2125f1b6d69a7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any of the specified object classes (tree, ficus, fern, or grass-related objects). The gray shape is not identifiable.\"\n    }\n  },\n  \"8d09b9e6fedc48879f2e04fdf46d280b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a planter box, not any of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"8ea3c9f2cefb49c5a218eef047fad424\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly depicted.\"\n    }\n  },\n  \"8f3a475a07e84964bbfa7e6bdbab9782\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"8f9a3ceee63747eea04c4b6ad2e5f5e2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a landscape, not a single object from the specified classes (tree, ficus, fern). It also includes other elements besides just grass, such as terrain features. Therefore, it's not suitable for training a model to simulate the physics of a single object.\"\n    }\n  },\n  \"8f9b5975bf234dd6ae72a4a3a42858d7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is a Minecraft block of grass and dirt. It is not a realistic depiction of grass and would not be suitable for learning realistic physics parameters.\"\n    }\n  },\n  \"92742d3837a644a9a0c89b8418894b45\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's suitable for physics simulations, especially for interactions like object collisions or wind effects on grass.\"\n    }\n  },\n  \"92ae43e13f0842b3bf0ffdb8bc9cae7d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass blade, which falls under the specified classes. It's also suitable for physics simulation.\"\n    }\n  },\n  \"92ef3a61d1244e8186b4129b56e2c83d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass patch clearly and is of good quality. It's suitable for physics simulation.\"\n    }\n  },\n  \"93bcacb8b0c04ba59602630ada7bc1e0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low and the objects are not clearly depicted. It's hard to tell what the objects are, and the image is too bright.\"\n    }\n  },\n  \"94586eaecd484583be8a88c17e8f901e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a clump of grass, which falls under the provided list of objects. It is also clear and suitable for physics simulation.\"\n    }\n  },\n  \"95023859e97f44ddb654037c1932f65c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree stump, which is a part of a tree. It is suitable for physics simulation as it has material properties and can be used in simulations involving dropping objects or environmental interactions.\"\n    }\n  },\n  \"95bf8a5ddcb741d1946c55dd2f78b5cb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable. It appears to be a combination of grass and rock, which is not suitable for training data focusing on individual objects.\"\n    }\n  },\n  \"95dc9c01a9ed45a99a3303b95c9f3f91\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a lawn or grass-like object, but it is rendered in a way that is not realistic and appears to be a grid-like structure. This makes it unsuitable for physics simulation training data as it doesn't represent the natural behavior of grass. Also, it is not very clear.\"\n    }\n  },\n  \"95ec15aef85a4090a883760f827ba4e1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a clump of grass, which is suitable for physics simulation in a video game. The quality is acceptable.\"\n    }\n  },\n  \"95f2760a6392483495832594f2245ba4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which is a valid object for physics simulation in a video game. It is also a clear image of the object. \"\n    }\n  },\n  \"9602386da6de4802919986cb6ffc12af\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a grassy area or lawn, but it is not one of the specified classes (tree, ficus, fern). Also, the image is too abstract and low quality for physics simulation.\"\n    }\n  },\n  \"960494e8e6694ae3bae0c333f0809505\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, blocky representation of grass, resembling a Minecraft-style object. It doesn't accurately depict real-world grass and would not be suitable for learning realistic physics parameters for simulation. The image is also too simplified and lacks the detail needed for physics-based simulations.\"\n    }\n  },\n  \"96776320c2754d6c8a4f8f3cd8286039\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a rock or a piece of terrain. Therefore, it's not appropriate for the specified classes.\"\n    }\n  },\n  \"9690a1d3cccc45aaae1b587d064e6408\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"9732b58b745e48d7967759ff3f5f05f4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or related grass types). It appears to be a simple geometric shape, possibly a crystal or abstract object, and is not suitable for training data related to vegetation or physics simulations of vegetation.\"\n    }\n  },\n  \"99e831fdf6d44a549650b6ef26cec9b5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass clearly and is suitable for use in a physics simulation.\"\n    }\n  },\n  \"9a065e92e96e4ca8b51e3bfe5a89ab18\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass against a white background. It is suitable for use in a physics simulation as it represents a single object.\"\n    }\n  },\n  \"9a607dce149d429080ffa0384f6ea025\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, which does not belong to the classes: tree, ficus, fern, or grass.\"\n    }\n  },\n  \"9b958d613e9a44dbba580748e7a1789c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the objects are not clearly depicted. It's difficult to distinguish individual grass patches or other objects, making it unsuitable for training a physics simulation.\"\n    }\n  },\n  \"9be3dc7105064e3a9ca1c137f5a8493f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mountain, not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"9c61c7e475f14672868516efd609e558\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the provided list of objects. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"9c7b4806743d4039b8050906089e7eae\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single blade of grass, which falls under the provided object classes. It is suitable for use in a physics simulation to learn parameters like material and young modulus.\"\n    }\n  },\n  \"9d9ff179ec40449b92aa4aa3072c6633\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the categories of 'grass', 'lawn', 'turf', etc. It's a clear depiction of the object and suitable for physics simulation in a video game.\"\n    }\n  },\n  \"9e47d3e812c041688bd5b4632669b1ac\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which falls under the specified classes. The image quality is sufficient for training purposes, and it shows a single object.\"\n    }\n  },\n  \"9e515e752b81448296bb1cde46e905d5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single blade of grass clearly. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"9ed1e321c74c4828baebf084a5d53c80\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sphere covered in grass. It's not a realistic depiction of grass and is not suitable for physics simulation.\"\n    }\n  },\n  \"a04293ae76474859a26db39ea0ae5d46\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock with vines on it, not a tree, ficus, or fern. Therefore, it's inappropriate for the specified classes.\"\n    }\n  },\n  \"a0a26d82eba448fcb880022b783d6d79\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a blade of grass, which falls under the specified classes (grass, lawn, turf, etc.). It is a single object and the image quality is acceptable for physics simulation purposes.\"\n    }\n  },\n  \"a180c9fb20374e0db8dbb9abea2e7043\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and unclear, making it difficult to identify the object. It also appears to be a patch of greenery rather than a single, distinct object like a tree, ficus, or fern.\"\n    }\n  },\n  \"a367f268579744388a26009975d22c90\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's a clear depiction of the object and suitable for use in a physics simulation, as it could represent a grassy area where objects interact.\"\n    }\n  },\n  \"a3ba1e2158b74852abbcb9a7dd19575f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (trees, grass, animals, rocks) and doesn't clearly depict a single object class. The image quality is also low, and the objects are too small for physics simulation.\"\n    }\n  },\n  \"a49a998993cb47bcb1633637a00afe51\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a realistic grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, or pasture. The texture is unrealistic and does not resemble natural grass. The image is not suitable for training a physics simulation.\"\n    }\n  },\n  \"a5b3b750808b44ce808ea1ecd0e07322\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a block of grass and soil in a Minecraft style, which is a stylized representation and not suitable for physics simulation training data. The blocky nature and unrealistic textures do not provide accurate information about the material properties of grass or soil.\"\n    }\n  },\n  \"a648d29d6d9f40d69661174711e74c6b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is a suitable object for physics simulation in a video game. The image quality is good, and the object is isolated from other objects.\"\n    }\n  },\n  \"a6da9d4c924b42df896f803c1a950eea\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the objects are not clearly depicted. It is difficult to determine what the objects are, and the image quality is too low for use in a physics simulation.\"\n    }\n  },\n  \"a7131b89f3d84124aa719b950339e732\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a crate, which does not belong to any of the specified classes (tree, ficus, fern, or grass-related classes). Therefore, it is inappropriate for the video game development training data.\"\n    }\n  },\n  \"a7be3899690b4fd2a52104484a02b9b7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and depicts a cross-section of the ground with grass and some tree trunks. It doesn't clearly depict a single object from the allowed classes (tree, ficus, fern) and is not suitable for physics simulation.\"\n    }\n  },\n  \"a85b26d5b741446eafbb7c2fab317557\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape scene with grass and other elements, but it's a complex scene rather than a single, clear object of the 'grass' class. Also, the image quality is not high enough for training data.\"\n    }\n  },\n  \"a8c006ab18be42859f3454d1d4deeec6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass clearly and is of good quality. It would be suitable for use in training a model for physics simulation.\"\n    }\n  },\n  \"a940f5a436bb4fd2a44789d6ed886f1c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is not clearly identifiable as a tree, ficus, or fern. It is also too small and blurry to be useful for physics simulation.\"\n    }\n  },\n  \"a9bb36fafc594d5b9e883f2c67ef73e5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified classes (tree, ficus, fern, or grass-related objects). It is also too blurry and low-quality for use in physics simulations.\"\n    }\n  },\n  \"ab0748c040cc41218df0fb3aecdb1a9e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly depicted.\"\n    }\n  },\n  \"ab50cc4747834050bbf4404f07874683\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a collection of objects like rocks, wood, and small sticks. It is difficult to isolate a single tree, ficus, or fern for physics simulation purposes. The image also has low quality.\"\n    }\n  },\n  \"ad4e3f6623c24b76a918aa030bb309d5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass or turf, but it is not very clear and the quality is not high enough. It is also not a very common object to simulate physics on.\"\n    }\n  },\n  \"ad523ac3f71c4423b0935a3926ffc4de\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass on what appears to be a wooden or concrete surface. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern), and the presence of the underlying surface makes it unsuitable for training a physics simulation focused on the grass itself.\"\n    }\n  },\n  \"ae01ca7e863d42c78d1fd43887f189e5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of logs, not a tree, ficus, or fern. Also, the image contains other objects like rocks and water.\"\n    }\n  },\n  \"ae483040495a4cfcb4f60529d383de0a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict grass. The quality is low.\"\n    }\n  },\n  \"aeb918813f8b4de29bd48aa3bd35d6eb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"aec867c66c344ee088977c5176e4e3f6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified class. It's suitable for physics simulation as it represents a surface with material properties.\"\n    }\n  },\n  \"aed86cb3d9b246aa946f45294010aca3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is an acceptable object for the specified classes. The image quality is good, and it isolates the object well. It's also suitable for physics simulation.\"\n    }\n  },\n  \"aee32d5985bc46e4bb6618d7d3ad1bd1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any of the specified objects (tree, ficus, fern, or grass-related objects).\"\n    }\n  },\n  \"b061ec6075264a6199805d2ee4e92284\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is acceptable for the video game development.\"\n    }\n  },\n  \"b08abd24ea864f078d806d273b7464d2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass, but it is not one of the classes specified (tree, ficus, fern).\"\n    }\n  },\n  \"b11f04f5515d4966b63d1f9bc150deff\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It is hard to distinguish the grass from the background.\"\n    }\n  },\n  \"b29b5b1aba024b62a672fce2b759f73c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, etc.). It's suitable for physics simulation as grass swaying in the wind is a common scenario.\"\n    }\n  },\n  \"b2ba61b6558e4ca1b1dba8c582b3b282\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be some kind of abstract, possibly architectural, structure. It's not suitable for learning physics parameters of natural objects.\"\n    }\n  },\n  \"b2be25ef306d4be8b613148634bb8c4e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single blade of grass, which falls under the acceptable class of objects ('grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture'). The image quality is good, and it is suitable for physics simulation.\"\n    }\n  },\n  \"b443829105964c19b65f8d4352cd682c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a sphere with grass texture. The grass texture itself is not very clear. It's also not an object that would be used in a physics simulation. Therefore, it's not appropriate.\"\n    }\n  },\n  \"b4f4cab538e94654aaa36da004375c36\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass and a stone path, not a single object from the target classes (tree, ficus, fern). It also includes multiple objects which is not desired.\"\n    }\n  },\n  \"b55c82301f5b4b2099e3fee553ba3ec2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to clearly identify the grass. The low quality makes it unsuitable for training a physics simulation model.\"\n    }\n  },\n  \"b6a3f0ed66db4c4aa7a69db9f421064a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly identifiable as a tree, ficus, or fern. The low quality and excessive brightness make it unsuitable for training data.\"\n    }\n  },\n  \"b737beb4bf184c67b89099d2e36a63e4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains both grass and rocks, and the grass is growing on the rocks. We want images that depict a single object class only. Also, the image quality is not great.\"\n    }\n  },\n  \"b7980cba836c45ed8b8d9377adebd608\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a house, which is not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"b8cc44c921c847d2815b913d8cf88765\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass, which is not one of the specified classes (tree, ficus, fern). Also, the quality of the image is not high enough for training data.\"\n    }\n  },\n  \"b94f24eee3254dbfb119baa307681c8b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). It's a single object suitable for physics simulation.\"\n    }\n  },\n  \"b98fdb5ae5d840eabaac9602a0675543\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a top-down view of a building with trees planted around it. The trees are arranged in a linear fashion and are not the primary focus of the image. The image contains buildings, cars, and other objects besides trees. Therefore, it's not suitable for training data focused on individual tree objects for physics simulation.\"\n    }\n  },\n  \"b9f2dab1dafb4072a04214d19bbfc136\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blacked out, making it impossible to identify the object or its class. Therefore, it is not suitable for training data.\"\n    }\n  },\n  \"bab164da8af04fe1be38357fbc8106d6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"babf1055fe614e65aa5e31950336e9de\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear. It's difficult to discern any specific objects or details, making it unsuitable for training a model for physics simulation.\"\n    }\n  },\n  \"bb793a0218254bbc8df4ffc65770c40a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-quality rendering of grass. The geometry is very simple and doesn't resemble real grass. The black objects obscure the grass. It is not appropriate for physics simulation.\"\n    }\n  },\n  \"bbccb58ed815443697cf744951a5e842\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes (grass, lawn, turf, etc.). The image is clear and suitable for physics simulation purposes.\"\n    }\n  },\n  \"bbfcf505d568404ea943adb49544977c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the specified classes of grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, pasture. The image is clear and suitable for training data for a physics simulation.\"\n    }\n  },\n  \"bc96c5c2e99f489cac0c18fe906d5c42\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including trees, rocks, and water, and the background is too bright and distracting. It does not clearly depict a single object for physics simulation.\"\n    }\n  },\n  \"bd86327f5e344cdeb4b3c44c95650103\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a block of grass and dirt in a Minecraft style. It's not a realistic depiction of grass or lawn and therefore not suitable for training physics parameters.\"\n    }\n  },\n  \"bdbf6c819ea042768c282b4c5823e283\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a green rock, which doesn't belong to any of the classes: tree, ficus, fern. It also doesn't belong to the grass-related classes provided.\"\n    }\n  },\n  \"bde431a187604844852b06fe0e964350\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as a tree, ficus, or fern. It's also difficult to discern its structure for physics simulation.\"\n    }\n  },\n  \"bdeff2e7db83405abbec6265787b083f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"bee378d21f2f47358d7bca514bb52deb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a mix of leaves and green plants, not a single object from the specified classes (tree, ficus, fern, or grass). The object is also too abstract and doesn't resemble a natural form of grass, tree, etc. The low quality of the image is also not helpful.\"\n    }\n  },\n  \"beeff00b4496409da82b7c1a9705039e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of clover, which falls under the category of grass/lawn/turf, and could be used in a physics simulation to model things like grass swaying or being trampled.\"\n    }\n  },\n  \"bf459c87d1ed4667a777b92079586923\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass patch, which is suitable for physics simulation in a video game. The image quality is also good.\"\n    }\n  },\n  \"bfa8576efd99412f9ad45b66bb58da0c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a stylized, blocky representation of grass and dirt, resembling a Minecraft block. This is not suitable for physics simulation as it doesn't represent real-world grass or soil accurately. It is also not a tree, ficus, or fern.\"\n    }\n  },\n  \"c04ac9d8f64c45318983b61f35a20b2b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects like buildings, cars, and trees. It does not isolate a single tree, ficus, or fern. Additionally, the image is an aerial view of a street scene, which is not suitable for learning physics parameters of individual plants.\"\n    }\n  },\n  \"c0d48c91c25e436fa239770c96a50b23\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tree stump, which falls under the 'tree' class. It is suitable for physics simulation as it shows the base and roots, which are important for understanding stability.\"\n    }\n  },\n  \"c12dc2ba12b04261a8ca771386c4de57\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized representation of grass, which is too abstract for accurate physics simulation. The geometry is too simple and doesn't capture the complexity of real grass.\"\n    }\n  },\n  \"c1b06aa33ef44db289cdbacc075d8772\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a patch of grass, which falls under the specified classes (grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, pasture). The image quality is good enough for training data, and it's likely to be used in a physics simulation (e.g., grass being affected by wind or objects falling on it).\"\n    }\n  },\n  \"c22338f5d1964b8cab92aa20704b757e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a suitable object for physics simulation in a video game.\"\n    }\n  },\n  \"c257155d87164e869e4ba0d7f316aba5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of grass and soil, not a single object of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"c2b11c05534e47eb91d5fe20b22594a7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and it's difficult to identify the object.\"\n    }\n  },\n  \"c307cc43db6e4a42822758a797f7edff\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and blurry, making it difficult to discern the details of the grass. This would not be suitable for training a physics simulation.\"\n    }\n  },\n  \"c4908fe845d34ab6b359bb6acf31ec7d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation or cliff face with some vegetation. It does not clearly depict a tree, ficus, or fern, nor does it depict an object belonging to the classes of grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, or pasture. Therefore, it is inappropriate for the specified classes.\"\n    }\n  },\n  \"c5d50935f7dd498db4b0aa3a4f499c55\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"c6f50fbabe7740c5a269304a9958d8f2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It looks like a pixelated representation, which is not suitable for physics simulation training data.\"\n    }\n  },\n  \"c7b3cadd101245d899ca49fa587b2745\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is suitable for physics simulation in a video game environment.\"\n    }\n  },\n  \"c804e70a4d594f1bb307ee646b0e3b0e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the classes we are interested in. The image quality is good and the object is isolated on a white background.\"\n    }\n  },\n  \"c84573687bf14f89938002df4ca0e696\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows multiple patches of grass, not a single, distinct object. We need images of single objects for physics simulation training.\"\n    }\n  },\n  \"c85e630fe973485c9db736d25a60ad75\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the classes we want to select. The image quality is also good.\"\n    }\n  },\n  \"c86bba3546094c81ababfdf7db95e19c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. The object is not clearly depicted.\"\n    }\n  },\n  \"c925dad64fcd4181be7050cd15af79de\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict a single object from the specified classes. It's also difficult to discern the object's features for physics simulation purposes.\"\n    }\n  },\n  \"ca35e659a4a04f25b5ce40e4482d1ebb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is a valid class for the video game development and physics simulation.\"\n    }\n  },\n  \"ca4203fc0ebf41c29fa75e10dbf92c6e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a brown plane and does not depict any of the specified classes (tree, ficus, fern, or grass). It is not suitable for training data for those objects.\"\n    }\n  },\n  \"cab46675f9ff4c56bf51d3fd09ccd82f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. The image quality is sufficient for training data.\"\n    }\n  },\n  \"cab585dfab1c4536ac64bf94e631303f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass and other objects, and the quality is not high enough for physics simulation training data.\"\n    }\n  },\n  \"cb3ef888c0014d34b1c9d7de69ac87d7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as a tree, ficus, or fern. The image quality is low and doesn't provide enough detail for physics simulation purposes. It's also not clear what the object is supposed to be.\"\n    }\n  },\n  \"cb62a8dd9b024c798a44326a3f030004\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which is a suitable object for physics simulation in a video game. It falls under the class 'grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture'.\"\n    }\n  },\n  \"cb812c650f184b37a7e8c1a7c74a5b31\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a factory, which is not one of the specified classes (tree, ficus, fern, or grass).\"\n    }\n  },\n  \"ccbac0994a6744b7b51a41e4df672be8\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple objects and the trees are on patches of grass. It's not a clean depiction of a single tree.\"\n    }\n  },\n  \"cce7a8d62e4a461ab8ae35197886e362\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grassy patch, which falls under the provided categories (grass, lawn, turf, etc.). It's a clear, isolated image suitable for physics simulation training data.\"\n    }\n  },\n  \"ce03db020c544900959e5aa9c892bd68\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or grass-related objects). It looks like a green, circular object, but it's not identifiable as any of the classes mentioned.\"\n    }\n  },\n  \"cf1f5ea6561a414a890cffbc06651501\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any of the specified objects.\"\n    }\n  },\n  \"cf7e084eec3a4382906e6fcde13e1c26\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a relevant object for physics simulation in a video game environment.\"\n    }\n  },\n  \"cfcea543717e46a29e887bbff0e26bdc\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and it's hard to distinguish any objects.\"\n    }\n  },\n  \"cfe72a7b8fe34f899c8f1f8818acc3a4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the specified classes. It's suitable for physics simulation as grass swaying in the wind is a common scenario.\"\n    }\n  },\n  \"d0389dbd06be4f8e98ededa619ebafa8\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry, making it difficult to identify the object clearly. It's hard to tell if it's grass or another plant, and the quality is too low for training data.\"\n    }\n  },\n  \"d10eb8c7196a43de8c10a425fed58867\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, including grass-like plants and what appears to be a rock formation. We need images that depict a single object clearly.\"\n    }\n  },\n  \"d1827a8ae661417cb448e4290a835920\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict any of the specified object classes. It resembles a green, textured block, but it's not recognizable as a tree, ficus, or fern. The quality is also low for training data.\"\n    }\n  },\n  \"d1d1f44576fa4850911d33e83f70256f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a patch of grass, which falls under the allowed classes. It is also clear and well-lit, making it suitable for training data. The object is isolated on a white background.\"\n    }\n  },\n  \"d25c1d2d46384e5a86b7a0ca983ea84b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a suitable object for physics simulation in a video game. The quality of the image is good enough for training.\"\n    }\n  },\n  \"d271352c5e674d35b9dcab530abdc814\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low and it's hard to identify the object clearly. It's blurry and doesn't represent any of the specified classes well enough for physics simulation purposes.\"\n    }\n  },\n  \"d445d64677e24660a6297bcb3e7b4e1f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant clearly and in isolation, suitable for physics simulation in a video game.\"\n    }\n  },\n  \"d4f9b4fbf5644e89a4d562c91ea13bd3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as belonging to any of the specified classes. It appears to be some kind of terrain with vegetation, but the quality is too low for training a physics simulation model.\"\n    }\n  },\n  \"d5176e0342044768959bcc77b5604d8a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a block of grass and dirt in a pixelated style reminiscent of Minecraft. This is not a realistic representation of grass, lawn, or turf, and it is unlikely to be used in a physics simulation for video game development. The pixelated style would not provide accurate data for material properties or young modulus.\"\n    }\n  },\n  \"d617e6bdfe46499f9fb0cf5a0dfe9865\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or grass-related objects). The objects in the image appear to be abstract, blocky shapes, and it's unclear what they are intended to represent. Therefore, it's unsuitable for training a model to recognize these classes for physics simulation.\"\n    }\n  },\n  \"d65f7ae6d1064be2b82da3fdae9eaecc\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or grass). The object in the image is not recognizable as any of these.\"\n    }\n  },\n  \"d6dd924a79ad43e3a0a2e18692451cb4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the depicted object is not clearly recognizable as belonging to any of the specified classes (tree, ficus, fern, or grass-related objects). The quality is low, and it's difficult to discern details for physics simulation purposes.\"\n    }\n  },\n  \"d71e1231f13c4d2b8391e12bfc24ba37\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is not clearly identifiable as any of the specified classes (tree, ficus, fern). The color is also not realistic for these objects. It's difficult to determine what the object is supposed to be, making it unsuitable for training a physics simulation.\"\n    }\n  },\n  \"d8ce99169adc4a2ca4ad27009973a462\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified plant classes (tree, ficus, fern). The colors are also unnatural and the shapes are not realistic, making it unsuitable for training physics simulations.\"\n    }\n  },\n  \"d91580a927854f6c8efede1df0dc3ca8\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any of the specified objects (tree, ficus, fern, or grass-related objects). It is also too bright.\"\n    }\n  },\n  \"d91ddc3d4be94b7498685291b5afef99\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the object is not clearly identifiable as any of the specified classes. It could potentially be grass, but the quality is too low for training data.\"\n    }\n  },\n  \"d936897141fb4df89f67153370ec3e32\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass but also another object. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"da1c42e11e904c1ca4666fd8777130ff\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and doesn't cleanly depict a single tree, ficus, or fern. It shows a landscape with trees, grass, and a river, which is not suitable for training a physics simulation of a single object.\"\n    }\n  },\n  \"dacaed9a48d845299f3dfa45f9dcb946\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tuft of grass, and the quality is sufficient for training a physics simulation. It's a single object and fits the criteria.\"\n    }\n  },\n  \"db3876256ec94f59b093d46d5ff6091f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is suitable for physics simulation in a video game. The image quality is also acceptable.\"\n    }\n  },\n  \"db4f61e60a294015b54953404322c596\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a clear depiction of grass, which falls under the specified classes. The image quality is good, and it is suitable for use in a physics simulation.\"\n    }\n  },\n  \"db50843121e64c5d9cecf5bed53a78e4\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with multiple objects and is not suitable for training a model to recognize a single object of a specific class like tree, ficus, or fern. Also, the image quality is not very high.\"\n    }\n  },\n  \"dbf96936e96c4d5a895dbf92040c8d70\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a block of grass and dirt in a Minecraft style. This is not a realistic depiction of grass, lawn, turf, grassland, meadow, grassy field, green grass, grass patch, tall grass, wild grass, or pasture. The image is too stylized and unrealistic for physics simulation training data.\"\n    }\n  },\n  \"dc1fd4f8db174132baa79df775f743ce\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and does not clearly depict any of the specified object classes (tree, ficus, fern, or grass-related objects). The object is also not easily identifiable.\"\n    }\n  },\n  \"dc2572f3cafb4f46a1eaf2101ac0837a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple grass patches and a larger grass area. We need images with only one clear depiction of the object.\"\n    }\n  },\n  \"dc3ef6b1ce5241c9b3a8d30300416107\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a Minecraft block of grass and dirt. It doesn't fit any of the specified classes (tree, ficus, fern) and is not suitable for physics simulation due to its blocky, unrealistic nature.\"\n    }\n  },\n  \"dc44954d946848559cee3a09dbb3d8f5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a plant that does not belong to the specified classes (tree, ficus, fern). It appears to be a type of grass or weed, but it's not clearly identifiable and doesn't fit the criteria for inclusion.\"\n    }\n  },\n  \"dc56f36e47c441a6b26221e01d1e1e98\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass-covered container, not a natural grass patch or field. It's an artificial object made to look like grass, which is not suitable for physics simulation of natural grass behavior.\"\n    }\n  },\n  \"dc879e2f461549eb8f0e3b862cc5f086\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which falls under the provided list of acceptable objects. The image quality is adequate for training purposes, and the object is clearly visible.\"\n    }\n  },\n  \"dd025ddcd02d48b5af2ea68bd757a0f5\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a patio or backyard scene with bricks, steps, and some grass. It does not clearly depict a single object from the classes: tree, ficus, or fern. The presence of multiple objects and the unclear depiction of a single object make it unsuitable for training a physics simulation model focused on individual objects.\"\n    }\n  },\n  \"dd1e9d6d62eb45fdaf6e45f2c25bf149\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two objects: a sphere and a rectangular patch. The objects are not clearly identifiable as belonging to the specified classes (tree, ficus, fern, or grass). Additionally, the presence of two separate objects in the same image makes it unsuitable for training a physics simulation model focused on individual object behavior.\"\n    }\n  },\n  \"dd5d3808157146eda97380d3e1fbfd31\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and the quality is low. The object is not clearly depicted.\"\n    }\n  },\n  \"dde6238094054c42bfd0e0d32335a36c\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is a valid class. The image quality is good, and it's suitable for physics simulation.\"\n    }\n  },\n  \"ddfae90b341842d397d0e7f2d530d9a0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone wall with some grass growing on it. This does not belong to the classes tree, ficus, or fern. Also, the image quality is not great.\"\n    }\n  },\n  \"df13dcb545c74ecf8b20bc079723a697\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts grass, which is an acceptable class. The quality is good enough for training.\"\n    }\n  },\n  \"df4eb313c61f40deb619d8fdabecc5ef\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft-style block of grass and dirt. This is not a realistic representation of grass and is not suitable for physics simulation or training data for video game development aiming for realistic physics.\"\n    }\n  },\n  \"e102eccaab14477692b5cef2bdfa6c0b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a lawn or grass patch within a defined border, which is not a single object of the specified classes (tree, ficus, fern, or grass). It's a composite scene and would not be suitable for learning individual object physics.\"\n    }\n  },\n  \"e224e9468c9045608f1ef7abe5e07745\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or grass). It appears to be an architectural plan or a layout of some sort, possibly a building or structure.\"\n    }\n  },\n  \"e3b8de62ebfa409cb320f497671686ba\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape or terrain, not one of the specified classes (tree, ficus, fern, or grass). It is also not a single object.\"\n    }\n  },\n  \"e45c56f57959459ea12769c1503a28cb\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a non-natural, abstract object that does not fall into the categories of tree, ficus, or fern. It is not suitable for training physics simulations of natural objects.\"\n    }\n  },\n  \"e493634e9a244dd6911cddfa0ee0d7c7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not contain any of the specified classes (tree, ficus, fern, or grass). It appears to be a depiction of a mountain or sand dune.\"\n    }\n  },\n  \"e4f0d417d8684f4a8e3b3aef663924c0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and blurry, making it difficult to discern the objects clearly. The objects are also not clearly depicted, and it's hard to tell if they belong to the specified classes. The image quality is too low for training data.\"\n    }\n  },\n  \"e5317637f57d48b6ba0668cc7c074498\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree stump, which is a valid object for the 'tree' class. The image quality is good, and the object is clearly depicted.\"\n    }\n  },\n  \"e58b89ba5b5047338210dbcf730f7b05\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image is blurry and does not clearly depict a single object belonging to the specified classes. It appears to be a patch of greenery, but the quality is too low for use in physics simulation training data.\"\n    }\n  },\n  \"e5f63e1258164e17899543fcc6475383\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a grass patch, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"e5f8a5e78f46481baca02811916f046f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and it's difficult to discern any objects clearly. Therefore, it's unsuitable for training data.\"\n    }\n  },\n  \"e6dead50072b4233a28e81d6838b1cff\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"e79ad65142b243f1985854b635aa577f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a fern, which is a relevant class. The image quality is good, and it depicts a single object, making it suitable for physics simulation training data.\"\n    }\n  },\n  \"e7bd3bd978ad46c8883a004be097e06b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an object that resembles a patch of grass or turf, which is included in the negative class list. Therefore, the image is inappropriate.\"\n    }\n  },\n  \"e867464f56204aa781f8423d42874782\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"e912725aedd14dfb89413516dbcfe0f0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict a tree, ficus, or fern. The quality is too low for use in a physics simulation for video game development.\"\n    }\n  },\n  \"e937a37439f347ee8ee8897a17a28746\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass, but the rendering is very stylized and unrealistic. The grass appears to be made of flat, dark planes with green lines on them. This is not suitable for learning realistic physics parameters.\"\n    }\n  },\n  \"e99bc54fb9ab4450ab6aa84b6f0e83e3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is too low and the object is not clearly visible. It is difficult to determine if it belongs to any of the specified classes.\"\n    }\n  },\n  \"ea5886e378ec45a8a1e5be2db001bdc3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass, which falls under the category of 'grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture'. It's a clear depiction of the object class and can be used for physics simulation.\"\n    }\n  },\n  \"ea72b84b697b49a5ac7d16679751dfa2\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains grass and concrete, making it unsuitable as it doesn't depict a single object clearly.\"\n    }\n  },\n  \"eb4f6dc9d4e3455ea3435385faf58b60\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains two separate objects (grass patches) instead of a single, clean representation. This makes it unsuitable for training a physics simulation model focused on individual objects.\"\n    }\n  },\n  \"eb6a5554fdd74ef5b48df93931cf5fef\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tuft of grass. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"ec6ad25ef0584c858bf6a0799003bee3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a landscape with grass on a mountain, not a single object from the specified classes (tree, ficus, fern). It doesn't fit the requirement of depicting a single, clear object for physics simulation training.\"\n    }\n  },\n  \"ec98b4af5de74da6b84c07af55a5d66b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass object clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"ecfbc550b32e4227a0905df60f4f33e9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, rocks, and other objects, which is not ideal for training a physics simulation on a single object.\"\n    }\n  },\n  \"edbda554ac4442d3bf2f6c54d205aa71\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a car on a grassy field. While it contains 'grass', it also contains another object (a car), which is not permitted in the instructions.\"\n    }\n  },\n  \"ee17fad1ae894bcc8ebdd841874d0728\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"ef0eba6fdaca4dfea43a3f9631738b5b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, blocky representation of grass and soil, resembling a Minecraft block. It's not suitable for physics simulations due to its unrealistic and simplified geometry.\"\n    }\n  },\n  \"ef69b054ca754433b7c04b64bf5bb6be\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is distorted and doesn't clearly depict any of the specified classes (tree, ficus, fern, or grass-related objects). It's unsuitable for training data.\"\n    }\n  },\n  \"f03940a1b75d44269cc6f72d86a311a9\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, and the quality is good enough for physics simulation.\"\n    }\n  },\n  \"f092bef40472427ca42e16450a41490b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a grass patch clearly and is suitable for physics simulation.\"\n    }\n  },\n  \"f0b6be6d7ec94f2ca9364e505ecc9ea6\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a tuft of grass, which is suitable for physics simulation in a video game environment. It falls under the specified classes (grass, lawn, turf, etc.).\"\n    }\n  },\n  \"f1defa8658d74dd685ac158a4c98f668\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and the grass is not clearly defined. It is also difficult to discern the individual blades of grass, making it unsuitable for physics simulation.\"\n    }\n  },\n  \"f354209291c04e2ea8a2714179bd7bae\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern, which is one of the classes we are interested in. The image quality is good, and the object is isolated on a white background.\"\n    }\n  },\n  \"f3957d4a3aad4483baef1393352cb4f1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, blocky representation of grass and soil, which is not suitable for physics simulation training data. The simplified geometry and lack of realistic detail would not provide meaningful information about material properties or behavior.\"\n    }\n  },\n  \"f3ae2521bcfb454fb856133919cf7cd1\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to be a stylized representation of grass, but the blocky, geometric design makes it unsuitable for realistic physics simulation. It doesn't resemble natural grass closely enough for accurate material property estimation.\"\n    }\n  },\n  \"f492a52b31084d66b04fe10fe34a0672\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which is suitable for physics simulation in a video game. The quality of the image is also good.\"\n    }\n  },\n  \"f4d07c628e1d43648ef978f1b0ae9fef\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple grass patches, not a single object. This is not suitable for training data where we want to focus on individual objects for physics simulation.\"\n    }\n  },\n  \"f4e21c677909486281cf157afc601f53\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which falls under the specified classes. The image quality is acceptable for training data.\"\n    }\n  },\n  \"f5035cac932a4909b61bd466a804605d\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts grass on a platform, not just grass. It's unclear if we should be modeling the grass or the platform. The grass is also a strange color, which could make it difficult to train a model.\"\n    }\n  },\n  \"f50b15df88294a4d977a66ccf953c776\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a patch of grass, which falls under the provided list of objects for the class. It's suitable for use in a physics simulation.\"\n    }\n  },\n  \"f5ae7d17dfae48a698ec0cc3809ed35b\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a clump of grass, which is a suitable object for physics simulation in a video game. The image quality is good and the object is clearly depicted.\"\n    }\n  },\n  \"f602b8aad3a749c8ae12d6a44ff062c7\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts grass, which is one of the classes we want. It's a single object and the image quality is good.\"\n    }\n  },\n  \"f61ce36038f34a0cba12b8d8b95cd605\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or grass). It appears to show a piece of wood or debris.\"\n    }\n  },\n  \"f65afd4d16184e5dbcd2f94a62dffcdc\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable. It is difficult to determine if it belongs to any of the specified classes (tree, ficus, fern) or their related objects (grass, lawn, etc.).\"\n    }\n  },\n  \"f70eb8a83e664bcf956e450bdfbee1b0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"f747d6211ff84e8d863aa2cb4542c99e\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and does not clearly depict any of the specified object classes (tree, ficus, fern, or grass-related objects). The quality is too low for training data.\"\n    }\n  },\n  \"f7e40137cd6a4d31a0eb0a9597291f78\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts grass, which is one of the specified classes. The image quality is good enough for training purposes, and it shows a single object (ball of grass). This could be used for physics simulations.\"\n    }\n  },\n  \"f7e6624ac05741a69afa94c6419c91d0\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark and blurry. It's hard to make out the details of the grass and other plants. Also, the image includes a base, which is not ideal for training data.\"\n    }\n  },\n  \"f83493268040411fa5eb44ff2cbcfa8f\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tree stump, which is not one of the specified classes (tree, ficus, fern). Additionally, it includes moss and other ground cover, making it not a clean depiction of a single object.\"\n    }\n  },\n  \"faa67990d1164cef82121c02af41caf8\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a fern, and it is isolated on a white background. The quality of the image is good enough for training purposes.\"\n    }\n  },\n  \"fac176ce48fe4af1b24012ea05369113\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, pixelated depiction of grass and soil, resembling a Minecraft block. It is not suitable for training physics parameters due to its artificial and unrealistic nature.\"\n    }\n  },\n  \"fbabe979c8ec4c7e83924dd2faba3d10\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the objects are abstract and not clearly depicting the classes of interest.\"\n    }\n  },\n  \"fbe376f3f3ff4daa847dce0a6a543313\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict the object class. It also appears to be an artistic rendering rather than a realistic depiction of a plant, which is not ideal for physics simulation training data.\"\n    }\n  },\n  \"fd83b9f2a6be457babdae57666cdec21\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of grass, which falls under the acceptable classes ['grass', 'lawn', 'turf', 'grassland', 'meadow', 'grassy field', 'green grass', 'grass patch', 'tall grass', 'wild grass', 'pasture']. It is also a single object and the image quality is good.\"\n    }\n  },\n  \"fdc9454d83cd46099d477f811e76b59a\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts the grass, and it is suitable for the physics simulation.\"\n    }\n  },\n  \"fe5abfab78f1444d9e11208b7e658527\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rock formation with some vegetation, but it doesn't clearly belong to any of the specified classes (tree, ficus, fern, or grass-related objects). The presence of the rock is the main reason for rejection.\"\n    }\n  },\n  \"fe8b577432814fc9aaa22777ba4b5768\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or grass-related objects). It appears to be a white cube on a white plane, lacking the necessary characteristics for training a physics simulation model for the given classes.\"\n    }\n  },\n  \"fe94ce681095435397d601f3654f1fa3\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and the quality is not high enough.\"\n    }\n  },\n  \"ffc31811b327451fab671cf103a50f86\": {\n    \"obj_class\": \"grass\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, blocky representation of grass and soil, resembling a Minecraft block. It's not suitable for physics simulation due to its unrealistic and simplified nature. It does not represent the properties of real grass or soil.\"\n    }\n  },\n  \"00184cc3c6674f2a8aa79e0e0d77ae31\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant in a pot, which falls under the 'flowering plant' category. It's a single, clear object suitable for physics simulation.\"\n    }\n  },\n  \"002a0a1c6d9e428f890d8410e997af6e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is a valid class for this task.\"\n    }\n  },\n  \"004034de724341ef82db684137be0d2a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoon character, not a tree, ficus, or fern. It is not relevant to the specified object classes.\"\n    }\n  },\n  \"00be4b33848b46bd9406bb34a6262f0f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower bouquet on a table with other objects. It doesn't isolate the flower bouquet as a single object for physics simulation purposes. The presence of the table and other items makes it unsuitable.\"\n    }\n  },\n  \"00c1ad9aadeb480db20bb09a88f898d6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any object.\"\n    }\n  },\n  \"015f09eab95549b2ad17955b64b7d388\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a collection of pots tied together, which doesn't fall under the specified classes (tree, ficus, fern, or flowers). It's also not a single, easily identifiable object for physics simulation.\"\n    }\n  },\n  \"01a1ed30f31b4539874af40858adc154\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image includes multiple potted plants on a shelf. It is not a single object.\"\n    }\n  },\n  \"01ac23f6a167474e83d654c0b92e51ab\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two planters, not a single tree, ficus, or fern. Therefore, it's not appropriate for the specified classes.\"\n    }\n  },\n  \"01e497e88b114221bf4a6c4c16547e66\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is abstract and does not clearly depict a real-world flower. It's not suitable for physics simulation based on real-world material properties.\"\n    }\n  },\n  \"02e777bdc5114b148963ed3def6ad471\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tulip in a pot, which falls under the 'flower' category. It is a single object, and the pot is acceptable as part of the object. It is suitable for physics simulation, e.g. dropping the pot.\"\n    }\n  },\n  \"02e8a835096d416990bf06d8a13333d7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which is not one of the specified classes (tree, ficus, fern, or flowers). Therefore, it is inappropriate.\"\n    }\n  },\n  \"03eb583ab2d841dc8f16b59974d481e7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which falls under the 'flower' class. It is suitable for physics simulation as it shows a common object found in nature.\"\n    }\n  },\n  \"03f66e91accf4361a3310765efebb837\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is a valid object for physics simulation in a video game. It belongs to the class of flowers.\"\n    }\n  },\n  \"046480b45715470b841cd49ea9a7388f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is included in the list of allowed objects.\"\n    }\n  },\n  \"052662a6e50048c786ccc83aa4db36eb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a flower arrangement on top of a box. The object is not clearly a single flower arrangement, and the presence of the box makes it unsuitable for physics simulation of a flower arrangement.\"\n    }\n  },\n  \"07ad2980185a40a99ebc2691034c1f6f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a question mark box, which does not belong to the specified classes of tree, ficus, or fern. It is not appropriate for the intended use in physics simulation.\"\n    }\n  },\n  \"07da86a8197e4c51b6ab764defb6ea0f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern-like plant clearly and solely, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"07ef4d7465c94b65b9e36ac97991e56b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a single object from the specified classes (tree, ficus, fern). The fragmented nature of the image makes it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"081a0bc8cea84009a8d5c54d766b3bc4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of roses, which is appropriate for the flowers class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"081f2783a8e44b559d37c08f7a402843\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which is a valid object for physics simulation. It clearly shows the object class and does not contain additional objects.\"\n    }\n  },\n  \"0879d1f86bad41e39ffff1784cc5d8ec\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not a real flower, but a flower pattern on a ring. It is not suitable for physics simulation.\"\n    }\n  },\n  \"08b7604e16784159abae310422197b62\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict an object that falls under the specified classes (tree, ficus, fern). It appears to be an abstract or stylized representation that is not suitable for physics simulation purposes.\"\n    }\n  },\n  \"09d5c78bf14d46be82a4c77c8a6f7c29\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flowers' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"0a0f5b4e595940649ea3cabeb7a4b1e1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a daisy, which is a type of flower. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"0a3f3d70a41e46d9b9389446ae4c0667\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-resolution, abstract representation that does not clearly depict a tree, ficus, or fern. It's difficult to discern any realistic features that could be used for physics simulation.\"\n    }\n  },\n  \"0a7f34366c1a4c0fa306100ae4c47846\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus plant in a pot, which is a clear representation of the object class. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"0c77dfdf9430465f9767a58d56e8fca1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a daisy in a pot, which falls under the category of 'flower' or 'flowering plant'. It's a single, clear object that could be used in a physics simulation (e.g., being dropped or swaying).\"\n    }\n  },\n  \"0c9c4965c02845e29a8aa3941d026267\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"0cb9f63ce0574604bb084f9d3c70cbc0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a simple geometric shape, possibly a column or pillar, and not an object related to the specified classes.\"\n    }\n  },\n  \"0d1311d361da4a5682d453fb334017e5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which falls under the specified classes (flower, bouquet, rose, tulip, daisy, lily, sunflower, orchid, flower arrangement, flowering plant, garden flowers, wildflowers, floral). The image clearly depicts the object and is suitable for physics simulation.\"\n    }\n  },\n  \"0dc5d3c603ff45719c430cdc408ba6ec\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"0ead7a2453da47c3a39b550fb283314f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a ficus in a pot, which is a single, clear object that can be used in a physics simulation, such as swaying in the wind.\"\n    }\n  },\n  \"0f58352d377840cdbeef0bd71b24aff6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is a valid object for the 'flower' class. It's suitable for physics simulation as the flowers and vase can be simulated.\"\n    }\n  },\n  \"0f761cb080aa48fd908c2d9e780dc66c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue with flowers and butterflies, not a single object from the specified classes (tree, ficus, fern, or flowers).\"\n    }\n  },\n  \"0fa50cf622f44f2ba59eff6c11cb8fbd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It's a single object, suitable for physics simulation.\"\n    }\n  },\n  \"10fdee6e988046e9bfa6344e9666cf50\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. The object in the image is not easily identifiable and does not fit into any of the specified categories.\"\n    }\n  },\n  \"112092b8d48a44ee84a1d8d5adab0de3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too unclear to identify the object.\"\n    }\n  },\n  \"1141493c75824b3899737d80fe42cb99\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is appropriate for the class of flowers. It is also suitable for physics simulation.\"\n    }\n  },\n  \"11deb0db4a7e427ebc98e37ad905795a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower arrangement in a planter, which falls under the 'flower arrangement' category. It is appropriate for physics simulation as a single object.\"\n    }\n  },\n  \"12011b23135340d98c246b5801bbf7b7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a poinsettia plant, which falls under the category of a flowering plant. It can be used for physics simulation, such as the swaying of the leaves.\"\n    }\n  },\n  \"12768caa111f446b8796e70f9cc53a23\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is acceptable for physics simulation purposes in a video game. It falls under the 'flower' class.\"\n    }\n  },\n  \"12e709bde5d14775878e4a0a63fd4b86\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is suitable for physics simulation as well.\"\n    }\n  },\n  \"14ec94367b6740479869c68d07b649d7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is not easily identifiable as a tree, ficus, or fern. It appears to be an abstract shape or a poorly rendered model. It's not suitable for physics simulation due to its unclear structure.\"\n    }\n  },\n  \"152288455d604332a44a0fd10b815495\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. The object is abstract and doesn't resemble any of the specified classes.\"\n    }\n  },\n  \"15cf1f50094e4b1ca87ff35081cd3e86\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"174da8be655e4954a8e8095dcd655c90\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image doesn't clearly depict a tree, ficus, or fern. It appears to be a simple geometric shape, and it's not clear what it represents.\"\n    }\n  },\n  \"1791606ba80b4a45ab28e0dd89336b41\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a floral arrangement, which falls under the 'flower' category. It could be used in a physics simulation for things like flower petals falling or the arrangement being knocked over.\"\n    }\n  },\n  \"185e86b0be094440b77ee95c1e697cb0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It's a single, clear object suitable for physics simulation (e.g., dropping the pot or simulating the flower swaying).\"\n    }\n  },\n  \"18608cc8bd01413e96bae159ede9b78f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus, which is a valid class. It's a single object, and suitable for physics simulation.\"\n    }\n  },\n  \"18f5fba66f944aad9ae84ea2172b9b78\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant (lavender), which falls under the 'flower' class. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"19f60721b3f2494bb86a4154df344797\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a sunflower bouquet in a vase, which falls under the 'flower arrangement' category. It's suitable for physics simulation as the flowers could sway or the vase could be dropped.\"\n    }\n  },\n  \"1a08d4f6066f46c6939540dd38592dd4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"1a49bbbe5bf644acb3d75f848ef0e5b9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It seems to show a building or architectural structure.\"\n    }\n  },\n  \"1b134c07a258417daf337b069f5e476d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern in a pot, which is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"1b4eedcd9e0f427696d3e92e24daf601\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is an acceptable object for physics simulation in a video game. The object is isolated and well-defined.\"\n    }\n  },\n  \"1bc37420962d48dc8c179eec538ca018\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple flower pots with different flowers. It doesn't depict a single, clear object for physics simulation.\"\n    }\n  },\n  \"1c04ccd9320142a7ad286f90557e6df1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which falls under the 'flower' category. It can be used in a physics simulation to learn parameters like material and young modulus.\"\n    }\n  },\n  \"1cdf9df6b941460bb70b7758c9e416ec\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is appropriate for the video game development and falls under the specified classes.\"\n    }\n  },\n  \"1d6dc3d770124dbc878c0e3217e76c44\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and doesn't depict any object.\"\n    }\n  },\n  \"1d98103d4d4c4972a960c642fb6a28e2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the allowed categories (flower arrangement). It's also a single, clear object.\"\n    }\n  },\n  \"1ddbe7a7e9604242b9bd92999b3dd912\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is a valid class. It is a single object and could be used in a physics simulation.\"\n    }\n  },\n  \"1e704ff821fb4df5acb42117855e0370\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict any of the specified classes (tree, ficus, fern). It's difficult to determine what the object is, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"1f010e8939fc4dd28dc2aaece165c736\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is an acceptable object for physics simulation.\"\n    }\n  },\n  \"1f051fc353e746869844ca45412c850b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose in a vase, which falls under the 'flower' class. It is a single object and could be used in a physics simulation.\"\n    }\n  },\n  \"1f8727ab468e46279ec82488b451abeb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern). It appears to show a geometric shape, which is not relevant for the intended purpose of physics simulation of plants.\"\n    }\n  },\n  \"1ff30c117c7046188e8c464587860acc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is all white except for a small gray shape, so it doesn't depict any of the specified object classes (tree, ficus, fern, or flowers).\"\n    }\n  },\n  \"20795a75fba54d0da418d75613d1af39\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a robot, which does not belong to the classes: tree, ficus, fern.\"\n    }\n  },\n  \"208dc8b288fb46c18305739aa248ea76\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very simplified, cartoonish flower, which is not suitable for physics simulation due to its unrealistic geometry and material properties. The image does not clearly depict the object class in a way that would be useful for determining physical parameters.\"\n    }\n  },\n  \"20b2231f4ef74f84b70aa489e64bef1c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"212a916097d14be1a7faf72ddbdd42bc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for the video game development. The object is clearly depicted and isolated, making it suitable for physics simulation.\"\n    }\n  },\n  \"231445f7a8c44711b3043763abf46ff7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple flower arrangements, not a single object. Also, the image includes the ground, which is not desirable.\"\n    }\n  },\n  \"2482756c49a74028b1d9122cb05cefe8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It's a single, clear object.\"\n    }\n  },\n  \"2581c2b856bd4a7aa74b485cbe9449e8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple potted flowers, not a single, distinct object from the allowed classes (tree, ficus, fern, or flower). It's also not a typical flower arrangement like a bouquet or vase of flowers.\"\n    }\n  },\n  \"259efc08ab284fa8bf2e19db848ea378\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a planter box, which falls under the 'flower arrangement' category. This is suitable for a physics simulation as it can be used to simulate the swaying of the flowers in the wind or the impact of the planter box being dropped.\"\n    }\n  },\n  \"25eba00d20204038ab470c903d5e4803\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is a valid object for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"261afeb179d945658cfcfefc73b28101\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower in a vase, which falls under the 'flower' class. It is suitable for physics simulation as it can be used to study the material properties and behavior of flowers.\"\n    }\n  },\n  \"261f3a8b2eae4bb0b014cf35533432cf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower' class. It's a single object and suitable for physics simulation (e.g., how it falls or breaks).\"\n    }\n  },\n  \"26995de7a8554494b6689a19bac7fcd4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a group of abstract shapes that do not clearly represent a tree, ficus, or fern. The objects are not recognizable as any specific plant from the provided list. Therefore, it is not suitable for physics simulation of a specific plant type.\"\n    }\n  },\n  \"26ba4f1a017b471381d8d02226fdd447\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or flower-related objects). It's an abstract shape and not suitable for physics simulation of the target objects.\"\n    }\n  },\n  \"26c66f331a8847188b32fbac92f3bee0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a sword, which is not one of the specified classes (tree, ficus, fern, or flower-related objects).\"\n    }\n  },\n  \"270f57c7311b46119f512545e4d04ac8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower arrangement in a vase, which falls under the 'flower arrangement' category within the broader 'flowers' class. This is acceptable as it is a common presentation of flowers.\"\n    }\n  },\n  \"274f6209ef1a4210b9b4534a0fdb4475\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a lily, which falls under the 'flower' category. It's a single object and suitable for physics simulation (e.g., flower falling).\"\n    }\n  },\n  \"283f9f113a56439087f57e95f9b7a0da\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is suitable for physics simulation.\"\n    }\n  },\n  \"2858b1015a6e4b66b716f884621c6756\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and difficult to discern the object clearly. It's hard to tell if it's a tree, ficus, or fern with enough detail for physics simulation purposes.\"\n    }\n  },\n  \"28d559520ca54e58b32f64f9bc97b1d9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is an abstract rendering and does not clearly depict a real-world object like a tree, ficus, or fern. It's not suitable for physics simulation as it lacks realistic physical properties.\"\n    }\n  },\n  \"298e1747baac4752a795c567f85c7f13\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which fits the 'flower arrangement' category. It is suitable for physics simulation as the swaying of the flowers in the wind can be simulated.\"\n    }\n  },\n  \"29fc5a749cb04735a787e518b188b393\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a ring-shaped object, which is not relevant to the specified classes.\"\n    }\n  },\n  \"2aa7264393544dc98f7b2e74857e6952\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower arrangement, which falls under the 'flower' class and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"2ac3550946324e9ab9d78b271a60bd78\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two flower arrangements on a table, which is not a single object and includes other objects besides the flowers. It's also not a great candidate for physics simulation.\"\n    }\n  },\n  \"2ae03504ab8c4a608b91f1d016e9e882\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a potted flower arrangement, which falls under the 'flower' and 'flower arrangement' classes. It's suitable for physics simulation as the flowers and pot could be simulated swaying or being dropped.\"\n    }\n  },\n  \"2b1a4b57567b40c88a50a6551ac312ef\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower' class. It's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"2bb621c42485443fa87e19badff916e4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bouquet of tulips in a vase, which falls under the 'flower' class. It is a single, well-defined object and could be used in a physics simulation.\"\n    }\n  },\n  \"2bbe59189dc044dd9843be910a9e8850\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted flower, which falls under the category of 'flowering plant' or 'flower arrangement'. Therefore, it is appropriate for the video game development.\"\n    }\n  },\n  \"2e4264a5eb9a4f25b2fb4c75d4ce753f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single daisy, which falls under the 'flower' class. It is suitable for use in a physics simulation.\"\n    }\n  },\n  \"2e5fb714db794694bd2be504eb9f2b57\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bouquet of flowers and gardening tools. Since it contains multiple objects, it is not appropriate.\"\n    }\n  },\n  \"2f8fb25245544c7d8adec79f2462a053\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is suitable for use in a physics simulation in a video game.\"\n    }\n  },\n  \"2ffde33617984042907fc5a4cc3b0f87\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. The image is an abstract shape and does not clearly represent any object class.\"\n    }\n  },\n  \"30534353745b4ae0b59734e2898084c9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which falls under the allowed classes (flower, bouquet, rose, tulip, daisy, lily, sunflower, orchid, flower arrangement, flowering plant, garden flowers, wildflowers, floral). It's suitable for physics simulation as it can be used to simulate swaying in the wind or being dropped.\"\n    }\n  },\n  \"305f2b09e0de48bb919116026aba8f44\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is of a flower pot, which is not one of the specified classes (tree, ficus, fern, flowers). It also doesn't contain any of the objects in the list provided for the 'flower' class.\"\n    }\n  },\n  \"30e0bfe5488d402184303f36347519b4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any of the specified object classes.\"\n    }\n  },\n  \"321aa580b60a474082df0260831f3c68\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and indistinct to clearly identify the object as a tree, ficus, or fern. It's not suitable for physics simulation due to the lack of detail.\"\n    }\n  },\n  \"32c270ecba1c455fab151bee643722eb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which is a type of flower. It is suitable for physics simulation.\"\n    }\n  },\n  \"333aed4b4a4f4c5e931d6b84ac475761\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which falls under the allowed classes (flower, bouquet, rose, tulip, daisy, lily, sunflower, orchid, flower arrangement, flowering plant, garden flowers, wildflowers, floral).\"\n    }\n  },\n  \"33711b2efebf4373a3eb269dccc1d56b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for simulating physics in a video game. It is also a single object and clearly depicted.\"\n    }\n  },\n  \"339bd12179614121a66fd38400a22148\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is suitable for physics simulation as it can be used to simulate the swaying of the flower in the wind or the impact of dropping it from a height.\"\n    }\n  },\n  \"34ffa6a7d5ce4f6c98e3ab2980d53040\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flowering plant' category. It is a single, clear object and could be used in a physics simulation, for example, to simulate the swaying of the flower.\"\n    }\n  },\n  \"351a73a2ef694c6f8aba7d5ccdf7f9b6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a vase, which is not in the list of classes.\"\n    }\n  },\n  \"3577f9b7764549bcb48b78fc01d979b7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too washed out and it's hard to discern what the objects are, let alone classify them into tree, ficus, or fern. It's not suitable for physics simulation purposes.\"\n    }\n  },\n  \"3581d5bd2d4f419e93fac468696a408c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is abstract and does not clearly depict a tree, ficus, or fern. It's difficult to discern the object and its properties for physics simulation.\"\n    }\n  },\n  \"358451494a53422795d1336e45ac1365\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a abstract rendering of a fern. It is not suitable for physics simulation, as it does not clearly depict the object.\"\n    }\n  },\n  \"35b2d21fc65d4ecfaba5a72257d41686\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a stylized, abstract object that doesn't resemble any of the specified classes. Therefore, it's not appropriate for the video game development use case described.\"\n    }\n  },\n  \"3632842fdf5b4500bb296c02e6272800\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bouquet of flowers, which falls under the 'flower' class. It is suitable for physics simulation as the material and young modulus can be learned to simulate the physics of the object.\"\n    }\n  },\n  \"3661b71f9494405da64f0dbdcc1a4ae9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' class. It is a single, clear object and could be used in physics simulations.\"\n    }\n  },\n  \"367d086c46a94657a506595b5cb6891c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too unclear to identify any of the specified objects (tree, ficus, fern, or flower-related objects).\"\n    }\n  },\n  \"36a6a3304744466da468f0b8cdc083c7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a sunflower, which falls under the 'flower' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"37163c583c2b47c297cac021569ccd4b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"37581dd86d514bc9bd94fd6a3f4d65be\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a stylized plant that doesn't clearly fall into any of the specified classes (tree, ficus, fern, or flower). It's a group of plants, not a single object, and its stylized nature makes it unsuitable for physics simulation based on real-world parameters.\"\n    }\n  },\n  \"38a7ac93d29b494dafce2f31ce4c2003\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's difficult to discern any specific object from the image.\"\n    }\n  },\n  \"38c361db774243ee8908eb3b1ed2ab85\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's difficult to discern the object's shape and form, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"3967969e3ca04b87809d5ffd6a3333b0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It is unclear what the object is, but it is not relevant to the specified classes.\"\n    }\n  },\n  \"39e1c76a0e604b409d523da854a0cab6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a flower in a vase. We only want to select images of tree, ficus, or fern.\"\n    }\n  },\n  \"3a057166a3e74e188bd554cb7004783a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy in a pot, which falls under the 'flower' category. It's a single, well-defined object suitable for physics simulation (e.g., how the flower and stem bend when the pot is moved).\"\n    }\n  },\n  \"3a7f950c0c9641bebb7e91f65b8a0ff9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' category. It is suitable for physics simulation as it can be used to study the swaying of the plant in the wind.\"\n    }\n  },\n  \"3ac6ae818cce468b8feb1c2d0084ec4f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a floral crown, which falls under the 'flower arrangement' category. It is a single object and can be used in physics simulation.\"\n    }\n  },\n  \"3ad9f9bcad4945b5a331d004e518b6b9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and washed out to clearly identify the object. It appears to be a flower, but the details are not distinct enough to be useful for physics simulation purposes.\"\n    }\n  },\n  \"3b95e4e506c94f59933bb2629d315804\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which falls under the 'flower' class. It is a single object and suitable for physics simulation (e.g., flower falling or swaying).\"\n    }\n  },\n  \"3b97f4ad38004f0988c1009e6c93c607\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoonish flower, which is not suitable for the purpose of learning physical parameters for physics simulation in game development. It doesn't fall under the categories of tree, ficus, or fern.\"\n    }\n  },\n  \"3cb1e468672748e0bb8642a41fbc358e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which falls under the 'flower' category. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3cd56e005889466b9bf750f0c5d223a2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant, which falls under the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"3d0badaa75e648eba02ad6254d88ebb5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pitcher, which is not in the list of the given classes.\"\n    }\n  },\n  \"3d2b2ea856ec4e45a28f97d15a9cc60a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or flower). It appears to be an abstract arrangement of small, colored shapes.\"\n    }\n  },\n  \"3dedbc35df934e5ab5c47a80082c3ddc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any of the specified objects.\"\n    }\n  },\n  \"3defcd15a9d54eb389413310deec8483\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which falls under the accepted category of \\\"flowers\\\" for physics simulation in a video game.\"\n    }\n  },\n  \"3f1159378795411dbf14b6f88ccf981d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white and does not clearly depict any object, let alone a tree, ficus, or fern.\"\n    }\n  },\n  \"40f926bc414f42948c09a6eca69fd639\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable. It doesn't seem to belong to any of the specified classes (tree, ficus, fern, flowers).\"\n    }\n  },\n  \"4153363f8cc442cc95a913df9600c110\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is very faint and it's impossible to determine the object class. It does not seem to depict any of the specified classes.\"\n    }\n  },\n  \"417cf98bd01140858b3e54fada8c4ede\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and doesn't clearly depict any of the specified classes (tree, ficus, fern). It appears to be a landscape with some greenery, but the quality is too poor for use in physics simulation.\"\n    }\n  },\n  \"419cd821cb6747509bb4a6528b21d4d0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. This is appropriate for simulating physics, such as the vase falling or the flowers swaying.\"\n    }\n  },\n  \"41acd475209f49d7aa7c01793511450b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern, which is one of the classes we are looking for. The object is clearly depicted and isolated, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"4221be66c67945ccae0812d26864065e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not a single, clear depiction of one of the specified classes (tree, ficus, fern, or flowers). It shows a collection of different items, making it unsuitable for learning physics parameters of a single object.\"\n    }\n  },\n  \"425ebe1b65e84928bb54dff750f16a20\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is suitable for physics simulations in a video game, such as simulating petals falling or swaying. It falls under the class of 'flower' and related objects.\"\n    }\n  },\n  \"42654b01ec3b43aeb2d97e4f8927b93f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pot with soil and dead leaves inside. It does not clearly depict a tree, ficus, or fern. The image is not appropriate for the specified classes.\"\n    }\n  },\n  \"438e885d387243bd92e00662f1680c45\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is suitable for physics simulation in a video game. It falls under the 'flower' class.\"\n    }\n  },\n  \"43d7b5abbb10486cb091773d5dd99067\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which falls under the 'flower' category. It's suitable for physics simulation as it can be used to simulate swaying in the wind.\"\n    }\n  },\n  \"449e4cfa9f4f4dfea6800c4e876e500f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"This is a perfume bottle, not a tree, ficus, or fern.\"\n    }\n  },\n  \"4547458cf515454abf181b4e5a49e919\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a real-world object like a tree, ficus, or fern. It looks more like a decorative pattern.\"\n    }\n  },\n  \"45742e6e3ffa449996f70bc87556db93\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single rose, which falls under the 'flower' class. It is suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"462244048a3f42ef9927bad20679fd4d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a fern-like plant, which is suitable for physics simulation in a video game. It falls under the classes of tree, ficus, or fern.\"\n    }\n  },\n  \"463beeb6bcfe41c69407ed744cd0b1f7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very poor and it is difficult to discern any objects clearly. It is not possible to identify if any of the classes (tree, ficus, fern) are present.\"\n    }\n  },\n  \"4781fe6cc6b449138dccc040f68f5523\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (flowers, grass, brick border, path) and doesn't clearly depict a single object from the specified classes (tree, ficus, fern, or flowers). It's also not suitable for physics simulation due to the complexity of the scene.\"\n    }\n  },\n  \"479116ea162647079a4c795a1e0c8d71\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant in a pot. This is acceptable as it is a common way to see flowers and is likely to be used in a physics simulation (e.g., dropping the pot).\"\n    }\n  },\n  \"495b3d157c2d4f669e1864a0aec909b9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable since the classes include flowers.\"\n    }\n  },\n  \"4986a9bad50e4c04925316ec9cf4ad12\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower arrangement' and 'floral' categories. It is suitable for simulating physics, such as the movement of the flowers when the vase is shaken.\"\n    }\n  },\n  \"4a270f2477344b55b359e2913f5530f2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower pot, which is not one of the classes: tree, ficus, fern or flower\"\n    }\n  },\n  \"4a801faae1c34e95b3fd50076267376d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and indistinct to clearly depict a tree, ficus, or fern. It's difficult to make out any details of the object, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"4aaa6a8aa2914e7183624f91d6efae43\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' or 'flowering plant' category. It's a single, clear object suitable for physics simulation (e.g., how it falls or sways).\"\n    }\n  },\n  \"4ab692d9a04e449a84c454fd03e71992\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It is a single, well-defined object, making it suitable for physics simulation.\"\n    }\n  },\n  \"4ab9c39ca9424750a56712a9f3d938ef\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower arrangement in a brick container, which is not ideal for physics simulation. We need a single object, like a single flower, for the simulation.\"\n    }\n  },\n  \"4ae706aa53c043fa8261ebf40f580303\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus. It is a single object and can be used for physics simulation.\"\n    }\n  },\n  \"4b3465bb5b4c48f5a8d8bcf07cde3af4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is in the list of acceptable objects. The image is clear and depicts a single object, which is suitable for physics simulation.\"\n    }\n  },\n  \"4c8154aa4b914a08b517c57150c14f36\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is hard to identify the object. It doesn't belong to any of the specified classes.\"\n    }\n  },\n  \"4cefe577722d4be1b1868818bde43470\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for physics simulation in a video game (e.g., flower swaying in the wind).\"\n    }\n  },\n  \"4d4ad222d445402f896ab24cf00f05e8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose bush, which falls under the 'flower' category. It's a single object and suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"4d6d827ac22245d6aa305d5f2e04c745\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a lollipop, which does not belong to the specified classes (tree, ficus, fern, or flowers). It is not relevant for physics simulation related to those classes.\"\n    }\n  },\n  \"4dcdda7aaf7e4e3a8fb19fb3fa3e5345\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"4e408eda8d07431b894b67a54112f85e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable for physics simulation.\"\n    }\n  },\n  \"51030882447e428a8efec83649ee3172\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a seedling in a pot. While the seedling could grow into a tree, it is not a tree, ficus, or fern in its current state. Additionally, it's in a pot, which is an additional object in the scene. The focus of the image is not a clear depiction of a tree, ficus, or fern.\"\n    }\n  },\n  \"5198273066cf4c6aa3ef6246c0bc2b85\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bouquet of roses in a vase, which falls under the 'flower arrangement' category. This is suitable for a physics simulation, as the swaying of the flowers or the vase falling can be simulated.\"\n    }\n  },\n  \"51b880c976b34f47a4e0e0c122b6d000\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It's a single, clear object suitable for physics simulation (e.g., simulating the flower swaying or the pot falling).\"\n    }\n  },\n  \"5231131707f040c8a055e9a875eb0874\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden box, which does not belong to any of the specified classes (tree, ficus, fern, or flowers).\"\n    }\n  },\n  \"52d052de48fa401183119ad4c3399351\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clearly identifiable. It is hard to tell if it is a flower or not.\"\n    }\n  },\n  \"538ebba83f784885a4a6bba96b03166e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower arrangement' category. This is acceptable for physics simulation as it can be used to simulate the movement and interaction of flowers in a vase.\"\n    }\n  },\n  \"540606ed90d4449ca14d713cc6386d5b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a daisy, which is a type of flower, and it is clearly visible and isolated. It is suitable for physics simulation.\"\n    }\n  },\n  \"548f2ec1f8e24244baac8bbb2f83fae8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' class. It's a single object and suitable for physics simulation (e.g., flower falling).\"\n    }\n  },\n  \"54b37aafc0cd430184b4acaded62b5f7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a container, rather than a single object. It's also not clear what kind of physics simulation could be done with this object.\"\n    }\n  },\n  \"5519e5e24a484979a1e53ed4530be6e8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is acceptable for physics simulation in a video game.\"\n    }\n  },\n  \"555c97b30e604c8bbb8d780a3736e1dd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. This is appropriate for physics simulation, as it could be used to simulate the flower swaying or the pot falling.\"\n    }\n  },\n  \"56765e04fc754d96a24b332377e64ffb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a vase, which falls under the 'flower arrangement' category. This is acceptable for the 'flowers' class.\"\n    }\n  },\n  \"5794f6d3f7374cefa471122843b6574f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. This is appropriate for the video game development as it is a common object that can be used in physics simulations.\"\n    }\n  },\n  \"57af0b8888a848ac869f1b30fc0e42dc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which is acceptable for the 'flowers' class.\"\n    }\n  },\n  \"57d9583095be4a6690392d1abfc7142b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"57d9a8eff52340c49e5b6fdefb1bf232\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is appropriate for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"58afe7a62ba84dc098f6cd35bc04fee3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for physics simulation in a video game.\"\n    }\n  },\n  \"5909788a9a6f4078b3ae0a7d4217eb1e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which falls under the 'flower' category. It's a single object, suitable for physics simulation.\"\n    }\n  },\n  \"591528ede3b54803ac78507dae3f3df1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which falls under the 'flower arrangement' category. It is a single, clearly defined object suitable for physics simulation.\"\n    }\n  },\n  \"59ffee7518884b809250bfd59ebb58ab\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower arrangement in a vase, which falls under the 'flower' class. It is suitable for physics simulation as the arrangement can be modeled to simulate swaying or movement.\"\n    }\n  },\n  \"5a3697872b284c4b9ef1aa0e6acd6ce3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a collection of flowers, which falls under the 'flower' category. This is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"5c251cdeea5445b4bcb574d4f2f51bd3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant, which could be a stylized fern or ficus. It is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"5c4b011c1ffd4649b135c2d2f753981c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is an abstract shape and does not clearly depict any of the specified classes (tree, ficus, fern, or flowers). It's difficult to determine what the object is, making it unsuitable for physics simulation or video game development based on the given criteria.\"\n    }\n  },\n  \"5d23122e7400475db9f6ae9f17a7e321\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. This is acceptable for physics simulation, such as simulating the vase falling or the flowers swaying.\"\n    }\n  },\n  \"5e30b9cae6414fba9fa6ad741de5bcf5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blurry and it's difficult to clearly identify any of the classes (tree, ficus, fern). It appears to be a distorted or low-quality render, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"5f29b67250c44c35850bb7b8bb40d1b3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus in a pot. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"5f46dbba499845979c6a95c703cb7bde\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's difficult to discern what the object is, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"62314761a4ed4e919059f87dfe33d72d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is acceptable for the video game development. The flower is isolated and suitable for physics simulation.\"\n    }\n  },\n  \"63ea85434b334913a6d0fd25ba0a222f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a table in addition to the flowers. This is not a single object.\"\n    }\n  },\n  \"6411a8085ad844c2abde73c03183da2a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is suitable for physics simulation as we can simulate the dropping of the rose.\"\n    }\n  },\n  \"64167bab103e4ffe8561b7583802b74a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted plant, which falls under the category of 'flowering plant' or 'flowering plant'. It is suitable for physics simulation as it can be used to simulate the swaying of the plant in the wind or the impact when the pot is dropped.\"\n    }\n  },\n  \"6450e616ae764758a4d1bd80eb3efa2b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category within the provided list. The image is suitable for learning physics parameters for simulation.\"\n    }\n  },\n  \"64761ed2dd0044ac8dbc6bba2d25d2b3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' class. It's a single object, and suitable for physics simulation (e.g., how it bends in the wind).\"\n    }\n  },\n  \"65d511d6d6f14dd7b2a84ce44fd67fbe\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower which is one of the classes that are accepted.\"\n    }\n  },\n  \"65df7c2d34ca47d4ae0c0e2b91850ee7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a rose, which is a type of flower and is acceptable for the class of flowers.\"\n    }\n  },\n  \"667d1f1eddc543bfac1f176f3259ae28\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any specific object from the given classes (tree, ficus, fern, or flower-related objects). It's impossible to determine if it's appropriate for physics simulation or game development purposes.\"\n    }\n  },\n  \"669a695fb7164046a6f01a687dc0f7ac\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant in a pot, which falls under the 'flower' class. It's suitable for physics simulation as it can be used to simulate the plant swaying.\"\n    }\n  },\n  \"66a30c655be34d6f910acddf67d94530\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any object, let alone one of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"66c85a8f14e347dbbda9a41d28a552cd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower. It is suitable for physics simulation.\"\n    }\n  },\n  \"67321df0e11f4b53b641c383559ca6cf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a decorative element, not a tree, ficus, or fern. It is not relevant to the specified classes for video game development.\"\n    }\n  },\n  \"6734eb1d198b4657b3ca0c3446f3ef2b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is acceptable for the 'flower' class.\"\n    }\n  },\n  \"67983c1e580641fc9cbd3f37bb5cb94a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple flowers, not a single object. It's also difficult to discern the individual flowers clearly, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"67ba95ccd3ba4458a3518ec05663dc2a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bouquet of tulips, which falls under the 'flower' class. It's suitable for physics simulation as the movement of the flowers and vase can be simulated.\"\n    }\n  },\n  \"683e2043a99d4bddb750098a934e3533\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It is suitable for physics simulation as it can be used to simulate wind effects on the plant.\"\n    }\n  },\n  \"687c18de8e3347baa1aacdcf91d1c457\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a drawing and doesn't clearly depict a single object from the specified classes (tree, ficus, fern, or flower). It contains multiple elements and lacks the clarity needed for physics simulation purposes.\"\n    }\n  },\n  \"68a80f5c13f14917bfbf735f5fd1788a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bouquet of flowers, which falls under the 'flower' category. It is a single object and is suitable for physics simulation.\"\n    }\n  },\n  \"68d4fae6c5df45c38f319ed4a3a72c5b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects and a table, not a single object. Also, the objects are orchids, not tree, ficus, or fern.\"\n    }\n  },\n  \"6953ea23b4aa4eeb9b2d2cb08af49635\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower bed with multiple flowers and a stone border. It is not a single object and contains multiple objects. Also, it is not a tree, ficus, or fern.\"\n    }\n  },\n  \"6a1c3ed6920a4c1a81d1a995f62fc11b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a floral arrangement, which is acceptable for the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"6b24d5199ce14b339bd2caa8aea1e9eb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and washed out to clearly depict any object, let alone one of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"6b3020fed29c4976bc44ed1b7cb7e960\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower' category. It is a clear depiction of the object and suitable for physics simulation.\"\n    }\n  },\n  \"6b86f233de3849668ac0a5d6b5d20b83\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted flower arrangement, which falls under the 'flower' class. It's a single object, and suitable for physics simulation (e.g., how the plant sways in the wind).\"\n    }\n  },\n  \"6b903b5376154dd086d2caa4a4263111\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (flowers in pots), not a single, distinct object from the specified classes (tree, ficus, fern, or flowers in general). Also, the image is very small and of low quality.\"\n    }\n  },\n  \"6be012c8647a4956838aa9d0e11145d8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose in a pot, which falls under the category of 'flower' or 'flowering plant'. It's suitable for physics simulation as the swaying of the flowers and the pot falling can be simulated.\"\n    }\n  },\n  \"6cf412fca90e4070bac66de2b7ceeb27\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which is a type of flower. It is clearly depicted and suitable for physics simulation.\"\n    }\n  },\n  \"6d568819c20d4d1daac79eaa7b068303\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a floral arrangement, which falls under the flower category. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"6d94485674494cbe844f26e1ec50d031\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fern, which is one of the classes we need. The image clearly depicts the object and it is suitable for physics simulation.\"\n    }\n  },\n  \"6dd385200f864958a555e2c13bfc95a1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"6df3601246c14974a1d5e01781990aaf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"70e0540c4c9844e0872b0184a3dd5fcb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a group of flowers, which falls under the 'flower' class. This is suitable for the physics simulation as the swaying of flowers in the wind is a common scenario.\"\n    }\n  },\n  \"7132b455dc5b4aa7ae063eec38092548\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, abstract object that doesn't clearly represent a tree, ficus, or fern. It's not a realistic representation of any of the specified classes.\"\n    }\n  },\n  \"71603c748cf44f99a268a4572f79401f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a skatepark ramp, which does not belong to the classes: tree, ficus, fern, or flower.\"\n    }\n  },\n  \"7212a9f7ce674406915687ca13a28f3b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (flower and petals), not a single, clear depiction of one of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"72a93f2ab4ed46cc8b29b03617270142\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which is a type of flower. It is appropriate for use in a physics simulation.\"\n    }\n  },\n  \"7321813643804669b6f8d6f9cbff9f6c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any of the specified classes (tree, ficus, fern). It contains some shapes and text, but not a clear object for physics simulation.\"\n    }\n  },\n  \"73cb4745a8194dbbb0a58a767f22ef3f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a rough sketch and doesn't clearly depict any of the specified objects (tree, ficus, fern) in a way suitable for physics simulation. The outlines and colors are not well-defined.\"\n    }\n  },\n  \"749736efba6b45f9ae807f70951ce071\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is empty except for a tiny red dot. It doesn't depict any of the specified classes (tree, ficus, fern, or flowers).\"\n    }\n  },\n  \"75b0fb61da014372861fd74a8cb73152\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted plant, which is acceptable as a single object. It could be used for physics simulation (e.g., falling over).\"\n    }\n  },\n  \"75d19624c0d04b65975e011a04ae77a0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an orchid, which falls under the 'flower' category. It is a single object clearly depicted, suitable for physics simulation.\"\n    }\n  },\n  \"760891dc2167440d83fba2316be90cf8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bouquet of flowers, which falls under the 'flower arrangement' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"7625bba65d344886bd4edafedbff0c49\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which falls under the specified classes for the video game development. It is suitable for physics simulation as well.\"\n    }\n  },\n  \"778aaf919e6045d0be761985dce6403a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"7a67825b41bc4c6aa459c91b8ed8930a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern). It appears to be an abstract representation of buildings and a green object, not suitable for physics simulation of natural elements.\"\n    }\n  },\n  \"7abbe51badc0445abe683628e3db8775\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is acceptable for the 'flower' class. It can be used in a physics simulation to study the behavior of flowers in a bouquet.\"\n    }\n  },\n  \"7ada25d98c644ae98f7504e7ad1be3c6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which is acceptable for the 'flower' class. It is also likely to be used in a physics simulation.\"\n    }\n  },\n  \"7b1c230847644d62ac473efcc3304f3b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"7ba826a951cf4060a5b8f4ee72c256ea\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is a valid class. The image contains only the flower, and it would be reasonable to use the 3d model for physics simulation.\"\n    }\n  },\n  \"7bc8864a90e54ac7b2791261047918fc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus plant in a pot. This is a single object and it belongs to the class 'ficus' which is appropriate. The plant can be used in physics simulation.\"\n    }\n  },\n  \"7bf81265f132494c909a932d41846465\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a person sitting among flowers, and it is not a clear depiction of a single flower or a vase of flowers. It is not appropriate for use in physics simulation.\"\n    }\n  },\n  \"7d8acfb0b38d4e4b9ef2c6e336473049\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"7dccda2703094aa0a9e5ecb7940db598\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower arrangement in a pot, which falls under the 'flower' class. It's suitable for simulating physics, like the pot being dropped or the flowers swaying.\"\n    }\n  },\n  \"7dd283aa9c324d3f9d4aae8774f69e8d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a flower arrangement but also contains a table and other objects. It does not cleanly depict one object class.\"\n    }\n  },\n  \"7f76ab5348284c89a0220884a48c6518\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which falls under the specified class of flowers. It is suitable for physics simulation as it can be used to simulate the flower falling or swaying.\"\n    }\n  },\n  \"7fb8ce540fb74e519dcfc64ac94ae1e0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a stylized or abstract object, not suitable for physics simulation related to the specified classes.\"\n    }\n  },\n  \"7fe339cf1ba74c06ac54d462d2efc941\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts ficus in a pot. It is suitable for physics simulation.\"\n    }\n  },\n  \"807e91b116f64d7294b180d8a6404588\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is a valid object for physics simulation in a video game (e.g., swaying in the wind).\"\n    }\n  },\n  \"81e65dfcecf746e9ba76c7fcc4997a00\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern, which is one of the classes we are interested in. The image shows a single object clearly, making it suitable for physics simulation.\"\n    }\n  },\n  \"826ec8fb717d4415a10d3af9ced10f3e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the specified class. It is suitable for physics simulation as it can be used to simulate the behavior of flowers in a vase.\"\n    }\n  },\n  \"82862423ff8e4347b03311a35fbacb41\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and doesn't clearly depict any object.\"\n    }\n  },\n  \"8357bb1ea4f84f80a304f3c6b2e2ad78\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict any of the specified plant classes (tree, ficus, fern). It looks like a distorted flower or some other object.\"\n    }\n  },\n  \"83746d84045146468d5f1d8fca8ed9cb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fern, which is one of the specified classes.\"\n    }\n  },\n  \"83cd55d8da0d4348a2262df88ba73f78\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a collection of flowers, which falls under the specified classes. While it's a group of flowers rather than a single one, it's still suitable for physics simulation as a floral arrangement.\"\n    }\n  },\n  \"83e0c3abee4448daa5177c37e5f82154\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which fits into the allowed classes (flowers).\"\n    }\n  },\n  \"8450ec1ee9d645168f3c234d749b9684\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower box with multiple flowers and climbing plants. It doesn't clearly depict a single object from the specified classes (tree, ficus, fern). Also, the presence of the wooden box makes it less suitable for simulating the physics of the plants themselves.\"\n    }\n  },\n  \"864fcc702ffb48ea99ccd121101c7399\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of flowers on a square of grass. It does not depict a single object clearly. The grass is also not desirable.\"\n    }\n  },\n  \"866e491ad8774f84b5ce6a68ab4a1ffd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is abstract and does not clearly depict a tree, ficus, or fern. It's an unidentifiable shape.\"\n    }\n  },\n  \"86a70f0b04b6482291110594b4dd1418\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant. It is suitable for physics simulation.\"\n    }\n  },\n  \"871ac4f9b62643e98e7321775cb14202\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any specific object. It's impossible to determine if it belongs to any of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"887092793d0b402e8571eda2d1a47cb4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower in a pot, which falls under the 'flower' category. It is suitable for physics simulation as it can be used to simulate the swaying of the flower or the impact of the pot being dropped.\"\n    }\n  },\n  \"88827a4a33b841458f45fba551e5d171\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two vases, not a single object. The objects are not in the accepted classes.\"\n    }\n  },\n  \"88ec44af458146a3b83b9483afe8af7a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' category. This is appropriate for simulating physics, such as the swaying of the plant in the wind.\"\n    }\n  },\n  \"899c294c0bd24d9bbd28ec84e4e32f55\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the specified classes (flowers). It's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"89d601c6b3f24d4d83967c4f1baa3b95\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is a valid object for physics simulation (e.g., swaying in the wind). It falls under the 'flower' class.\"\n    }\n  },\n  \"8a82f4d34555479d827c6d711566e46a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a group of trees, which is appropriate for the video game development context and for simulating physics parameters like swaying in the wind.\"\n    }\n  },\n  \"8b865189c6ca4013a39cb25076241494\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pile of rocks or soil, which does not belong to the specified classes (tree, ficus, fern, or flower-related objects). Therefore, it's not appropriate for the video game development based on the given criteria.\"\n    }\n  },\n  \"8b8fd739dabf43a2a03ffc2989ec7365\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a wildflower, which falls under the 'wildflowers' category. The image is clear and shows the object well.\"\n    }\n  },\n  \"8c4d78079eda4ccfbc1354cbbe115f33\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a group of trees, which is a valid object for physics simulation in a video game.\"\n    }\n  },\n  \"8d0861c3cf47400786ac852587a74994\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and does not clearly depict any of the specified object classes (tree, ficus, fern). It's also unclear what the objects in the image are.\"\n    }\n  },\n  \"8d4549c3b5004a0c9241ac44929810ac\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be an abstract object. It is not appropriate for the specified classes.\"\n    }\n  },\n  \"8d8a9be757154b29872d959b598f059c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower, which is a valid object for physics simulation in a video game.\"\n    }\n  },\n  \"8e1f8d13ecbb4ad78807f4af1a291ecf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be an abstract object or shape.\"\n    }\n  },\n  \"8e6dd7bb234348329208f68882f95125\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is hard to tell what the object is. It might be a fern, but it is not clear enough for physics simulation.\"\n    }\n  },\n  \"8f0baf4206804846b3f10b109e3cde20\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a 3D model of a ribcage or some other mechanical structure, which is not relevant to the specified classes.\"\n    }\n  },\n  \"8f0d7e45b22e47739d6cda9c320ffb29\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a perfume bottle, which does not belong to any of the specified classes (tree, ficus, fern, or flowers). Therefore, it's inappropriate for the video game development context.\"\n    }\n  },\n  \"8f2e2b5d45284f8fa0bfc25a02779318\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower arrangement in a pot, but it is part of a larger scene including stairs and other objects. It doesn't isolate the flower arrangement well enough for physics simulation purposes.\"\n    }\n  },\n  \"9039f607d87e4a968d2b21fd46e93b8f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a potted ficus, which is acceptable for physics simulation in a video game.\"\n    }\n  },\n  \"9107755357634b229844b0b14ed04257\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which falls under the flower category. The object is clearly depicted and suitable for physics simulation.\"\n    }\n  },\n  \"911690173f1c44c98eb87154ad9cf508\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable for the video game development.\"\n    }\n  },\n  \"91d655c29e0b40118eb42db7bcd607d4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is a valid object for physics simulation and belongs to the specified classes.\"\n    }\n  },\n  \"9298aaed1dfc4d80b6ab05ca7e16e78c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a ficus plant in a pot, which is suitable for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"934be69f6bf243b292d70cd429f5006d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable for the video game development, and it is clearly depicted.\"\n    }\n  },\n  \"95a67471ac8640dd9256e1784e18f229\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It is an abstract shape.\"\n    }\n  },\n  \"95b895cb3a654784bfac64bc345fc55e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just one. It's difficult to isolate a single tree, ficus, or fern for physics simulation purposes.\"\n    }\n  },\n  \"95c6e250b8c94fa4ab6ff5b2e874b29b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for physics simulation (e.g., swaying in the wind). It clearly depicts the object class.\"\n    }\n  },\n  \"96265186d2774090bf21d608134e8e8a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It is an abstract shape that does not resemble any of the specified object classes.\"\n    }\n  },\n  \"96556ef9e5e1452b80c61369ae3a7d8e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a sunflower arrangement in a pot, which falls under the 'flower arrangement' category. It's suitable for physics simulation as the swaying of the flowers or the pot falling can be simulated.\"\n    }\n  },\n  \"9704af7c275a4562bc73862a77fc7a3a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is a valid object for physics simulation in a video game.\"\n    }\n  },\n  \"975e5c0e57dd42999a348758b1295e66\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bunch of white flowers, which falls under the category of 'flowers' and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"982cbca027714ea690dfe482b5181d57\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not contain any objects from the specified classes (tree, ficus, fern, or any flowers).\"\n    }\n  },\n  \"98669a28f92141409df2fdd82e0d9b0c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable as it belongs to the specified classes.\"\n    }\n  },\n  \"99237f1d475244c9aed11c9979251ced\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of yellow daisies, which falls under the 'flower' and 'bouquet' categories. It's suitable for physics simulation as a floral object.\"\n    }\n  },\n  \"99508a5ebb704cd39a8b08c9a88ca54a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a vase, which falls under the 'flower' class. This is appropriate for physics simulation as it can be used to simulate the vase falling or the flowers swaying.\"\n    }\n  },\n  \"996ef3717d20497b9d6a6b4d9fa51325\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not contain a tree, ficus, or fern. It appears to show some kind of fruit or object inside a strange object. It is not relevant to the specified classes.\"\n    }\n  },\n  \"99e08ec1b42241c080912996eebbffe6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which falls under the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"9a5b491ed72e4b90b990698475225e3d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is suitable for physics simulation as part of a larger environment.\"\n    }\n  },\n  \"9ac8696e86154cb48a147e34ab7ed3df\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue, which does not belong to any of the specified classes (tree, ficus, fern, or flower-related objects). Therefore, it is not appropriate for the video game development context described.\"\n    }\n  },\n  \"9aedd7f4ef2a42fda87b89eafc934a95\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant in a pot, which falls under the 'flower' category. It is a single, clearly defined object suitable for physics simulation.\"\n    }\n  },\n  \"9bc9a4ea1d2f4207b2af6ee38645a298\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It looks like a simple, abstract shape.\"\n    }\n  },\n  \"9bf4ff89427d49939347818a097c842d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a geometric shape and does not resemble any of the specified plant classes.\"\n    }\n  },\n  \"9c1d5388b3e341ce99d198f5e890acdc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. It is suitable for physics simulation as a single object.\"\n    }\n  },\n  \"9cb06861e8c3400bbca958459bf9fdc2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase, which is not in the list of acceptable classes.\"\n    }\n  },\n  \"9eb76716e9c74fc9a424fa6a960b7905\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a room with a green screen and various objects, not a single object from the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"9f62a903187f4fff8d5feddf85a67586\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It's an abstract shape and doesn't belong to any of the specified classes.\"\n    }\n  },\n  \"a0d6739a36de4535af9eeb11ed7321f9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a container. This is an acceptable depiction of 'flower' for physics simulation purposes, as it represents a common way flowers are encountered.\"\n    }\n  },\n  \"a124cf40a048434aa662cd7de41baac3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts tulips, which are flowers. It could be used for physics simulation to see how the flower sways in the wind.\"\n    }\n  },\n  \"a147bd36c23c473faebbc363b2b355d9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts flowers, which are suitable for physics simulation in a video game (e.g., swaying in the wind).\"\n    }\n  },\n  \"a15c234c0eaf410ea65d22ff912a9987\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the 'flower arrangement' category. This is appropriate for the video game development as it clearly shows the object class and could be used in physics simulations.\"\n    }\n  },\n  \"a1ec7a2df65d4ff5972c30e79084ef5a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a vase, which falls under the 'flower' class. It's suitable for physics simulation as the vase and flowers can be simulated for interactions.\"\n    }\n  },\n  \"a20586da199346e9849f8cb4e89b63ce\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not clear enough to identify the object as a tree, ficus, or fern. It is just a simple vertical shape. Therefore, it is not appropriate for physics simulation.\"\n    }\n  },\n  \"a2eea4c5ba844243ad9484c5b5d2158e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"a30118c4d0b84fcc964e07a3824f7f8d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is relevant to the provided class list.\"\n    }\n  },\n  \"a41ace4013bb44648a1ad4cf2d301c30\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant in a pot, which falls under the broader category of 'flowering plant' and is acceptable. The vase is also acceptable because it is commonly seen with flowers.\"\n    }\n  },\n  \"a431f2f47231473c931b7d042a45a819\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a rock or some other geological formation.\"\n    }\n  },\n  \"a45647d22d6740f6a6544b27fd25a97f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is suitable for physics simulation in a video game. It falls under the class of 'flowers' and related objects.\"\n    }\n  },\n  \"a482cc1968124ac58a421acf35805bc6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single flower, which is acceptable for physics simulation (e.g., petals falling).\"\n    }\n  },\n  \"a4d5ec04db1440e39da83bca38d590c9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a flower in a vase and a watering can. It doesn't depict a single object of the specified classes (tree, ficus, fern).\"\n    }\n  },\n  \"a5d8b59b22e24cc58054331b0bf34e9c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a group of flowers, which is acceptable for the 'flower' class. It is likely to be used in a physics simulation, such as simulating the effect of wind on the flowers.\"\n    }\n  },\n  \"a719abe202bb4f85b3e0b1fded4a7d3a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which is a type of flower. It is suitable for physics simulation as it can be used to model the swaying of the flower in the wind.\"\n    }\n  },\n  \"a79bb30f852d4d3d98a76d99b571e4ec\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. This is appropriate for the video game development as flowers can be used in physics simulations.\"\n    }\n  },\n  \"a840e59c4e8f42c5ad7f433ca879597b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which falls under the specified class. It is also suitable for physics simulation.\"\n    }\n  },\n  \"a855f22cc9594327839759e2ea666ba8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"a86df967af6540bf8377ea368aa19be4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects including buildings and row of plants. It is not appropriate for the video game development.\"\n    }\n  },\n  \"a878936d2039462b9ac95563a3b8128f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"a90747c17fb24605bdb703bf558c9e72\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be an abstract shape or a low-resolution rendering that is difficult to identify. Therefore, it is not suitable for the intended purpose.\"\n    }\n  },\n  \"a9d02b903a494b60906d44d0c855f7a3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a valid object for the video game development. It is a single object and clearly depicted.\"\n    }\n  },\n  \"a9ee96b5f80f4d9dbb639c70a0e546a0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant with purple flowers, which falls under the 'flower' class. The image is suitable for learning physics parameters for simulation.\"\n    }\n  },\n  \"aa3e8b70df294d54b6360aadb6b32b62\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which is not in the list of allowed objects.\"\n    }\n  },\n  \"aa96923d58394be0832f67e88670f141\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is abstract and does not clearly depict a tree, ficus, or fern. It's difficult to determine what the object is, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"ab1641c1c40f4333936da838c8fd5604\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden structure that is not a tree, ficus, or fern. It doesn't belong to the class of objects we are looking for.\"\n    }\n  },\n  \"ab2157a5434b42c5822e6131d28f8bbb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which falls under the specified classes. The image is clear and shows a single object, making it suitable for physics simulation.\"\n    }\n  },\n  \"ac8720235cff4640a0dd7ca51abc8c8b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a vase, which falls under the 'flower' class. This is acceptable as it's a common way to represent flowers.\"\n    }\n  },\n  \"ac8895f507584c40b2efb8e77bda85a3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which is a type of flower. It is suitable for use in a physics simulation, as its material properties can be analyzed.\"\n    }\n  },\n  \"acfa498497894bbd9bc864255e6816cd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is a valid class. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"adc60093c9e643a4b5ab35346d7d6d15\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows flower petals, not a complete flower. This is not suitable for physics simulation as it doesn't represent a whole object.\"\n    }\n  },\n  \"af2ce601762e420a90108f17b21be29c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a daisy, which is a type of flower. It is a single object and could be used in a physics simulation.\"\n    }\n  },\n  \"af7fee15e6694dd6b4d027f4cc49bba2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"afc261b43a364dcfaeb03c9efb7a9c05\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be an abstract geometrical shape. It's not clear what the object is, so it's not suitable for physics simulation or video game development.\"\n    }\n  },\n  \"b02aad5fe74449b197f1c635d3591d27\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bush or shrub, which is a type of plant that could be used in a physics simulation to study how it sways in the wind. The image clearly depicts the object class.\"\n    }\n  },\n  \"b06f34dedd3b4167ac151fbc83d29b50\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building, which is not one of the specified classes (tree, ficus, fern, or flower-related objects).\"\n    }\n  },\n  \"b0723478aacb480dbd755dee883d32aa\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is acceptable for physics simulation purposes. It is also a common object in video games.\"\n    }\n  },\n  \"b0bb303d5b5f40878547204675172193\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the provided classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"b0bdc06364614deeb9ee6e5ba4c80f5a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or flower). It is an abstract shape and unsuitable for physics simulation related to the classes.\"\n    }\n  },\n  \"b1047276fc7f4421b5f695ad9ff59e72\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. It's a single, clear object.\"\n    }\n  },\n  \"b16076de0db44f7983d99250ac54eb2d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which is a valid object for the 'flowers' class. It is suitable for physics simulation as a single object.\"\n    }\n  },\n  \"b1fdc624c9c440b5aec9c8705b915eaa\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers, which falls under the specified classes. It is suitable for physics simulation as the material properties of flowers and their arrangement can be simulated.\"\n    }\n  },\n  \"b208de84f6d94ba0894e207122937542\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a collection of flowers, which falls under the 'flower' class. It is suitable for physics simulation, as the swaying of flowers in the wind is a common scenario.\"\n    }\n  },\n  \"b247c912214146b49644efd16f454f73\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is an acceptable object class.\"\n    }\n  },\n  \"b5033fdcf8374a44ae7f948a1ef2ddbe\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"b53e1bc2c1dc4fa3835d40682649e3bc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet, which falls under the 'flower arrangement' category. It's suitable for physics simulation as it could be used to simulate the behavior of a collection of flowers being dropped or swaying.\"\n    }\n  },\n  \"b56e199f962f49b29686c1a891fe47bd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bouquet of flowers, which falls under the acceptable class of 'flower', 'bouquet', etc.\"\n    }\n  },\n  \"b59ed57ceb2f4e9eb63d22ea8ee0e9fc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which falls under the 'flower arrangement' category. It's a single, clear object that could be used in a physics simulation (e.g., dropping the pot or simulating wind effects on the leaves).\"\n    }\n  },\n  \"b6475b686d2b4c64a501acf80a684f5d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts flowers, which are suitable for physics simulation in a video game, such as petals falling or flowers swaying in the wind.\"\n    }\n  },\n  \"b66ad96e13b04784a8ac0b927d748555\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flowering plant, which is a valid object for the video game development.\"\n    }\n  },\n  \"b6710fa38cd24e9cb84db9f6f773c6cb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any of the specified objects (tree, ficus, fern, or any type of flower).\"\n    }\n  },\n  \"b7449a6580f549518240ac512dbe6a8e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. The objects in the image are not easily identifiable and appear to be abstract shapes.\"\n    }\n  },\n  \"b7d19a0d6eb047ba8c8b58838a236ccf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of tulips in a vase, which falls under the 'flower' class. It's a common arrangement and suitable for physics simulation (e.g., vase tipping over).\"\n    }\n  },\n  \"b96b2b736b1a4397940bbaf6a39cdb1b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a low-poly abstract shape and does not clearly depict a tree, ficus, or fern. It's difficult to determine what object it represents, making it unsuitable for physics simulation purposes.\"\n    }\n  },\n  \"b99c584dd11d4691b5d13303383371e5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which is not one of the classes listed (tree, ficus, fern, or flowers). It's an object used to contain plants, but not the plants themselves.\"\n    }\n  },\n  \"b9e951cc1d4a4b2e95984f73ccbbe169\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and doesn't depict any object.\"\n    }\n  },\n  \"ba1adb18dbb344ec9d9c2a9756b84ddd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower in a pot, which falls under the 'flower' class. It's suitable for physics simulation.\"\n    }\n  },\n  \"bb070e4454c9468abe953db9ea57ff4b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which is a type of flower. It is suitable for physics simulation.\"\n    }\n  },\n  \"bb2e2624dab54b888f0972b9a0e3880a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a vase, which falls under the 'flower arrangement' category. It's a common object that could be used in a physics simulation (e.g., the vase falling over).\"\n    }\n  },\n  \"bb4e37654b054b6185fea6bd4f4fa711\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is blank and does not depict any of the specified objects.\"\n    }\n  },\n  \"bb875ee8ce2a40a2b927cb27bbd8f651\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a few flowers, which falls under the 'flower' class. It is suitable for physics simulation.\"\n    }\n  },\n  \"bbac8c124e8b4974abad98f2e45ffb2d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern) or the flower-related objects. The abstract shape makes it difficult to identify the object.\"\n    }\n  },\n  \"bd052ede8f964fb098924403b321736b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It's a single, clear object suitable for physics simulation, such as dropping or interacting with other objects in the game.\"\n    }\n  },\n  \"bd3848e4b96a4731ad34e2d43268f60a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts an orchid in a pot, which falls under the 'flower' category. It's a single, clear object suitable for physics simulation, such as observing how the flower and pot react to being dropped.\"\n    }\n  },\n  \"be5222cc76b44b839bb1a3d37e8156e1\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It's difficult to discern the object's shape or properties for physics simulation.\"\n    }\n  },\n  \"be7b1069894444b5b18700caa36376d3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which falls under the 'flower' class as it includes multiple flowers and greenery in a single object. It is appropriate for physics simulation as a single unit.\"\n    }\n  },\n  \"bee4f7b602904024826d6e49ddb95ad5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which is not a tree, ficus, or fern. Therefore, it is not appropriate for the video game development.\"\n    }\n  },\n  \"bf119b845fbf40408cefb51eb6f89e4d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted plant on a stand, which is more than just the plant itself. We need images that depict a single object for physics simulation purposes. Also, the object is not one of the classes mentioned: tree, ficus, fern.\"\n    }\n  },\n  \"bf3d404b836b455ca399fef3c962dcb7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is one of the classes we are interested in. It is a single object and could be used in a physics simulation.\"\n    }\n  },\n  \"bf990dd956184801ae4eb4bf5ce8c0ec\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a flower arrangement, which is a valid object within the specified class. It can be used for physics simulation.\"\n    }\n  },\n  \"c076c78cc47f49cfb68e24c8731d60ed\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower arrangement in a planter. It falls under the 'flower' class, and the planter itself could be considered part of the object for physics simulation purposes (e.g., dropping the whole arrangement).\"\n    }\n  },\n  \"c118985f85804a9d811bda6310d3652d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which can be considered a flowering plant or a garden flower. It fits the criteria for inclusion.\"\n    }\n  },\n  \"c1338e44401949c1be64e6668d38c100\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which falls under the 'flower' category and is suitable for simulating physics in a video game (e.g., how the flowers sway in the wind or the pot falling).\"\n    }\n  },\n  \"c138a37359b14ee08c77ac894b333c62\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy in a pot. It falls under the 'flower' category and is suitable for physics simulation.\"\n    }\n  },\n  \"c20d9a2020b5479e8a3155c413386bc4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which falls under the 'flower' class. It is likely to be used in a physics simulation.\"\n    }\n  },\n  \"c290b04d61ca4b5a8efd1618dab92e06\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict a tree, ficus, or fern. It is difficult to discern its structure for physics simulation.\"\n    }\n  },\n  \"c2f7ae600ec04f80bc01516b0798cd82\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely blank and does not depict any object.\"\n    }\n  },\n  \"c39c719c9b144fbaa97e87fcf80d9764\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not clear and contains multiple objects. It is hard to identify a single object from the class tree, ficus, or fern.\"\n    }\n  },\n  \"c40ba1aeda49410db34ec2f9ab2fd599\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant in a pot, which falls under the 'flower' category. It's suitable for physics simulation as the swaying of the plant or the pot falling can be simulated.\"\n    }\n  },\n  \"c44a218561194160befc605939b66f90\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and does not clearly depict a tree, ficus, or fern. It's difficult to discern the object's shape and characteristics for physics simulation.\"\n    }\n  },\n  \"c45914b87eee4ea9bfe4a382848c16d5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a tree, but also a lake and a character. We only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes.\"\n    }\n  },\n  \"c5aa1c3eabc14dd49ab95cd27aa2b7a3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a very abstract representation and it's hard to tell what it is. It doesn't clearly depict a tree, ficus, or fern.\"\n    }\n  },\n  \"c5e3a859f090477e9a12585bb0d33579\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, lattice-like structure that does not resemble a tree, ficus, or fern. It is not appropriate for use in a physics simulation of these objects.\"\n    }\n  },\n  \"c61ad9c66f0844ec836fc8cf33c70b3e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or flower-related objects). It appears to be a simple geometric shape, possibly a cube with a square opening, and is not relevant for the intended purpose of physics simulation of plant-related objects.\"\n    }\n  },\n  \"c6a4c968af414f06b452cfb9a089dea6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be an abstract shape.\"\n    }\n  },\n  \"c6ee804e986242a4b2cdcad5c45c7ffe\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower, which is a valid class for this task.\"\n    }\n  },\n  \"c709a1ceabf94221b4a776686f98d4d6\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it's hard to identify the object clearly. It doesn't seem to depict a tree, ficus, or fern.\"\n    }\n  },\n  \"c93f755dddf14640896612deb9c32813\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower in a pot, which falls under the 'flowering plant' category. It is suitable for physics simulation as it can be used to simulate the swaying of the flower in the wind.\"\n    }\n  },\n  \"c97ff76c09c14238abaf444570b46115\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is a suitable object for physics simulation (e.g., petals falling, flower swaying).\"\n    }\n  },\n  \"c9def2748a3643458b7115572743ad62\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which is a type of flower. It is a single object that can be used for physics simulation.\"\n    }\n  },\n  \"cacb2624187f49668773ede5611c128b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which falls under the 'flower' class. It shows a group of roses and leaves, which is acceptable. This could be used in a physics simulation.\"\n    }\n  },\n  \"cb2e58f27130433a90623f336f769ad5\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and it is difficult to identify any object.\"\n    }\n  },\n  \"cb303335a9af490fa449df0008032a78\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single flower, which is appropriate for the video game development.\"\n    }\n  },\n  \"cb62dbbec52649cc95234c5879ee1787\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a abstract shape and does not clearly depict a tree, ficus, or fern.\"\n    }\n  },\n  \"cc88b246cbbb483babf8983fbc87e07e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which does not belong to any of the specified classes (tree, ficus, fern, or flowers). Therefore, it's not appropriate for the video game development based on the given criteria.\"\n    }\n  },\n  \"cd3353c37ea2448589a8fe10875518be\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a stylized, abstract object that doesn't clearly represent any of the specified classes.\"\n    }\n  },\n  \"cdab889018174861978de56f10c0e8c7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It's suitable for physics simulation as it shows how the plant might sway or react to forces.\"\n    }\n  },\n  \"cee94c045d7549c890f88f6cc1493117\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of roses in a vase, which falls under the 'flower arrangement' category. This is acceptable for physics simulation purposes.\"\n    }\n  },\n  \"cf31779b755c41bf97d1e95567e27a2f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant, which falls under the 'flower' category. It's suitable for physics simulation, particularly for things like swaying in the wind.\"\n    }\n  },\n  \"cf3a9000becd493593d593f4c1ecfae7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It's a single object, suitable for physics simulation.\"\n    }\n  },\n  \"cf90e3e70f4341da912aa72069ef3f8b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a fern. It is a single object and is suitable for physics simulation.\"\n    }\n  },\n  \"d0685522cc274936bc09dc857a56b48e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and unclear to identify any specific object or class like tree, ficus, or fern. It's impossible to determine if it's appropriate for physics simulation based on this image.\"\n    }\n  },\n  \"d0cd1f0e6ae04a59b6996605427c34f7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a decorative object that is not a natural flower, tree, ficus, or fern. It is more like a stylized design or ornament.\"\n    }\n  },\n  \"d0dffc10a6664315a10a9910bb6cd97c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is unclear and it is difficult to determine what the object is. It may be a fern but it is not clear enough.\"\n    }\n  },\n  \"d0f38eacd0564763ae0a7faccee04d17\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a potted flower, which falls under the 'flower' category. It is a single, clearly depicted object, making it suitable for physics simulation purposes.\"\n    }\n  },\n  \"d15cc10f62cc4c018b13aea982616fcd\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a group of flowers, which falls under the provided class. It is suitable for physics simulation.\"\n    }\n  },\n  \"d18485dda440442290711b29ebbeefbf\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is acceptable for the 'flowers' class. It's a single, clear object.\"\n    }\n  },\n  \"d1a55f2c4015483fa73b8ef2fc2b6c36\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clear enough to be used for physics simulation.\"\n    }\n  },\n  \"d2efff42615040899cb6bf067c6ba0ba\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a vase, which falls under the 'flower arrangement' category. This is a suitable object for physics simulation, such as simulating the vase being knocked over or the flowers swaying.\"\n    }\n  },\n  \"d37f277f508243d296cbaf354bcc7086\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is appropriate for the video game development and falls under the specified classes.\"\n    }\n  },\n  \"d3c1266f00f1424d809726c497cbca49\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which fits the 'flower' class and is suitable for physics simulation.\"\n    }\n  },\n  \"d3ce43aef8a04d968e63224a58d37037\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a vase with flowers, a table cloth and a painting. It doesn't depict a single object. Therefore, it is inappropriate for the video game development.\"\n    }\n  },\n  \"d47c69718c1b4c9f914ee48059cec19f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which falls under the specified classes (flower, bouquet, rose, tulip, daisy, lily, sunflower, orchid, flower arrangement, flowering plant, garden flowers, wildflowers, floral). It is suitable for physics simulation as a single object.\"\n    }\n  },\n  \"d54546f22fa8487c887a8f3b9182f661\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flowering plant in a pot, which falls under the 'flowering plant' category. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"d56f6d6e4f7f4684ad7d8e445342161b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and lacks detail to clearly identify the object. It's difficult to determine if it represents a tree, ficus, or fern.\"\n    }\n  },\n  \"d6414740ba2a45b2a804514b5b25ac87\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree, which is a valid class. The object is clearly depicted and suitable for physics simulation.\"\n    }\n  },\n  \"d69bd08814de41b3aa8f1df2523353a2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single flower, which is appropriate for physics simulation in a video game.\"\n    }\n  },\n  \"d75f531255ad47a99051a4c421c8861b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tulip, which is a type of flower and the image is clear.\"\n    }\n  },\n  \"d7e7c4c547a84cd88b8cacbb96745839\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is one of the classes we are interested in. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"d81bb4f31263458e9978febb2da756c7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose in a vase, which falls under the 'flower' and 'flower arrangement' categories. It is a single, clear object, making it suitable for physics simulation.\"\n    }\n  },\n  \"d831be1106424d19b53d44f06e485c16\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single rose, which is a type of flower. It's suitable for physics simulation as the bending of the stem and petals can be simulated.\"\n    }\n  },\n  \"d93b3ee1e67e45898b8f2bb9aafdf034\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flower, which is one of the classes we're interested in.\"\n    }\n  },\n  \"db91e8b92687403a9a9ed0c46e0ddc74\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower clearly, which is a valid object for physics simulation (e.g., swaying in the wind).\"\n    }\n  },\n  \"dbf677bad7084c3e9682feaac449df53\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is very low, and it's difficult to discern the objects clearly. It appears to show multiple objects, not just a single tree, ficus, or fern, and the low resolution makes it unsuitable for physics simulation learning.\"\n    }\n  },\n  \"dce5bb1f7abf4ed3b8d5ca2610d63023\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bouquet of tulips, which falls under the 'bouquet' category. It is suitable for physics simulation as it can be used to simulate how the flowers react to external forces.\"\n    }\n  },\n  \"dd58976b7ce54b53b7ded29a6c6ef632\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a very abstract representation of something, but it's not recognizable as any of the specified classes.\"\n    }\n  },\n  \"dd988326d96b44d3978d262ef7663e96\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not appropriate for the video game development because it depicts a cup, which is not one of the classes: tree, ficus, fern, flowers.\"\n    }\n  },\n  \"dddbda5b3d794649a6b9fd500ec01563\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flowering plant, which falls under the 'flower' class. It is suitable for physics simulation.\"\n    }\n  },\n  \"ddf2459697d54117a2d0ac499f7fdb6b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"There are multiple flower arrangements in the image, and the image is not clear enough to depict a single object.\"\n    }\n  },\n  \"de65e6373fe54e999464eb807cc888fb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is a valid object for the 'flowers' class. It is also a single object.\"\n    }\n  },\n  \"df1b7a72d1c44435b592e6ee421bab9f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict any of the specified classes (tree, ficus, fern, or flower). It appears to be an abstract shape or a simplified representation of something else, but it's not recognizable as any of the target objects.\"\n    }\n  },\n  \"e0aee5bb029c46c4a7e0d8576403debb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of tulips in a pot, which falls under the 'flower' category. It's a single, well-defined object, and the physics of the flowers swaying or the pot being moved could be simulated.\"\n    }\n  },\n  \"e123052a77334e3d9286acfe97da8592\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a fern in a pot. The pot is not part of the fern and is not needed for the physics simulation. Therefore, the image is not appropriate.\"\n    }\n  },\n  \"e2983175df0a4da29650060b01196610\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"e2adf4bbb859499caf649f7d29befd03\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which is acceptable for the 'flower' class. It is also suitable for physics simulation as the swaying of the flowers and the pot falling can be simulated.\"\n    }\n  },\n  \"e2e6dc756a5947f290b377f2931b6e61\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pot, which is not one of the classes: tree, ficus, fern, flowers.\"\n    }\n  },\n  \"e315cc31665e4d42a5e78e7ca5a2d9a7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a plant in a pot, which is suitable for simulating physics. The plant is clearly visible and the pot provides a defined boundary for simulation.\"\n    }\n  },\n  \"e3b0abb378604d21a92ca391c5208dca\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement in a pot, which falls under the 'flower' class. It's a common object and could be used in a physics simulation (e.g., the pot falling or the flowers swaying).\"\n    }\n  },\n  \"e3ba3bf0fa16492b89f1439caee5083e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It is a single, clear object, making it suitable for physics simulation in a video game.\"\n    }\n  },\n  \"e41a69403707405dbb5e0b7737cae6fa\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a lily, which is a type of flower. It's suitable for physics simulation as a single object.\"\n    }\n  },\n  \"e6039f6807514e4fbf1496c63c27702f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a person holding flowers, not just the flowers themselves. This doesn't fit the requirement of having a single object from the specified classes.\"\n    }\n  },\n  \"e608cb6a282146ac94c193fe20d29f1b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cartoon chili pepper, which doesn't belong to the specified classes (tree, ficus, fern, or flowers). It's also not appropriate for physics simulation in the context of video game development.\"\n    }\n  },\n  \"e643c3e8ae2846acacf87f738bd8f897\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, not just a single tree, ficus, or fern. It also contains other plants and flowers.\"\n    }\n  },\n  \"e7d391f97e404f519fd7a871dbaad302\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' category. It is suitable for physics simulation as it could be used to simulate the behavior of flowers in a garden.\"\n    }\n  },\n  \"e8ae19b9aa0547b0a6f195e0ef5b36db\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is mostly white and doesn't clearly depict any of the specified objects (tree, ficus, fern, or flowers).\"\n    }\n  },\n  \"e95a6f1226f44ecfa761b3ffabdde9a9\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a flower pot, which is not one of the classes: tree, ficus, fern. It also doesn't include objects like ['flower', 'bouquet', 'rose', 'tulip', 'daisy', 'lily', 'sunflower', 'orchid', 'flower arrangement', 'flowering plant', 'garden flowers', 'wildflowers', 'floral'].\"\n    }\n  },\n  \"e9877078b45b4f739d6206d9a75ca72b\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower. It is a single object and clearly depicts the class.\"\n    }\n  },\n  \"e9e8b1ca9d3640f8be00b760e1fad170\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is a single object and can be used for physics simulation (e.g., wind interaction).\"\n    }\n  },\n  \"e9f2f250b6ef40c5883b2d2e680e3f8a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is not clear enough to determine what the object is. It appears to be a very thin object, making it difficult to identify as a tree, ficus, or fern. The image quality is also not ideal for physics simulation purposes.\"\n    }\n  },\n  \"ea84a82400204c66a4e13f481411643d\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a plant, potentially a ficus or fern, which falls under the specified classes. It could be used for physics simulation.\"\n    }\n  },\n  \"ea9de7c3dbc1470ab98cda7f31d87ca7\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single flower, which is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"eae93d23408244d2b828cf6e304b28f0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a flower arrangement, which is a mix of different objects. It doesn't clearly depict a single object from the allowed classes (tree, ficus, fern, or flowers). Also, it is not suitable for physics simulation due to the complexity of the arrangement.\"\n    }\n  },\n  \"eb20c2c5df4b47fb8d9410fb98f21576\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object.\"\n    }\n  },\n  \"ebb2767d905048da8159f88bf48f7d3f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a bouquet of red flowers, which falls under the 'flower' category. The image is suitable for use in a physics simulation.\"\n    }\n  },\n  \"ec347293e6e043f080c6d503ea3298ee\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a memorial and flowers, but not a single object in the classes specified. The flowers are also part of a larger scene.\"\n    }\n  },\n  \"ec988c8c208c43c3908b902111070188\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is acceptable for the 'flower' class.\"\n    }\n  },\n  \"ecfa7654f9c149039755bc15c55dac1c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract and doesn't clearly depict a tree, ficus, or fern. It would be difficult to use this for physics simulation.\"\n    }\n  },\n  \"ee5132a2394145dab567f0f62d95a7b0\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant, which falls under the provided list of acceptable classes. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"ef660f75abae45679743d27924707c08\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a daisy, which falls under the 'flower' category, and is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"ef679907fd904772b6eeec331d488f56\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts two flowers, which falls under the 'flower' category and is appropriate for simulating physics in a video game.\"\n    }\n  },\n  \"efe870a0cec74586b55d44b55c62d779\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a rose, which falls under the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"f011d24ce98a4de49dbb68a2472a8580\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a vase of flowers, which falls under the 'flower arrangement' category. It is suitable for physics simulation as it can be used to simulate the swaying of flowers in a vase.\"\n    }\n  },\n  \"f0d124f30fbf4402956a24fd76adc8ab\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of ground with flowers and plants, rather than a single, distinct object from the specified classes (tree, ficus, fern, or flowers). It also includes other materials like soil and mulch, making it unsuitable for physics simulation of a single object.\"\n    }\n  },\n  \"f1a984ec17b94cdd860b5e7c4fe40170\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of roses, which falls under the 'flower' class. The image clearly shows the object, and a bouquet is a common way to see flowers.\"\n    }\n  },\n  \"f20a60b146a246f6a1f9bb7be02a81d4\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower in a pot, which falls under the 'flower' category. It's suitable for physics simulation as it can be used to simulate the swaying of the flower or the pot falling.\"\n    }\n  },\n  \"f2ff1d3704c8454e95c6225bd64a5646\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flower pot, which is not one of the classes: tree, ficus, fern, or flower.\"\n    }\n  },\n  \"f525de6ea9de473f87c408228d36da03\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. The object is not recognizable.\"\n    }\n  },\n  \"f52d8ebfb7224e0bb3e1b572cd70910a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a bouquet of flowers in a pot, which falls under the category of 'flower arrangement' or 'flowering plant'. This is appropriate for a physics simulation, as one might want to simulate the behavior of such an object being dropped or swaying.\"\n    }\n  },\n  \"f5baa1daab844f69a4dc89afac098bb3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus in a pot, which is acceptable. The image clearly depicts the object class.\"\n    }\n  },\n  \"f658c352668f43529af6bb97973b3d5e\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a bouquet in a vase on a table. It contains other objects besides the flowers, such as the vase and the table. We want images that depict cleanly ONE SINGLE OBJECT belonging to one of the classes.\"\n    }\n  },\n  \"f6a887dcda1b41a7941d794e2ff8eb76\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tree or plant on a brick surface. It's not a clean depiction of just a tree, ficus, or fern, and includes other elements.\"\n    }\n  },\n  \"f6b4bbec4d25432db58ce7706dc81dcb\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a tree, ficus, or fern. It appears to be a stove top or a cooking surface.\"\n    }\n  },\n  \"f6dd376905694674a35758fe100b1a96\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a tree in a pot, which is suitable for physics simulation in a video game. The tree's swaying in the wind can be simulated.\"\n    }\n  },\n  \"f761746650d64be7b3263df3eaf622e2\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a ficus in a pot, which falls under the 'ficus' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"f774cad2fd2f43919a651b720d8e8ba8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a group of flowers, which is acceptable as a 'flower arrangement' or 'flowering plant'. It is suitable for physics simulation, especially for simulating wind effects or interactions with other objects.\"\n    }\n  },\n  \"f7ce9559e7df41e9a9da16dcfea80901\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a flowering plant, which falls under the 'flower' class. It's suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f802fa9c582b47f2bf1a2e123d688bf8\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a single rose, which falls under the 'flower' category. It is suitable for physics simulation in a video game.\"\n    }\n  },\n  \"f85c796cdefc4b75b9d5892055650332\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a ficus in a pot, which is acceptable for physics simulation in a video game.\"\n    }\n  },\n  \"f875f61a55ed4d1aa4cc5376edd15f07\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a tree, ficus, or fern. It appears to be a simple, abstract shape, possibly a stick or stem. It is not suitable for learning physics parameters related to the specified plant classes.\"\n    }\n  },\n  \"f9f807bf18d14eb3a5175b8caa79854f\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a rose, which falls under the 'flower' category. It's a single object and suitable for physics simulation.\"\n    }\n  },\n  \"fa32a784f6184eef872bff9dd3028206\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image contains a flower in a pot on a stool. The stool is an additional object that is not a flower. I need to reject the image because it contains other objects in addition to the flower.\"\n    }\n  },\n  \"faac771f17e74231bfb35b8b81f2eb0c\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower arrangement, which is acceptable for the 'flower' class. It is a single object and suitable for physics simulation.\"\n    }\n  },\n  \"faf4c21c3c4842798005ac57b47e63f3\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image depicts a flower, which is suitable for the video game development.\"\n    }\n  },\n  \"fcc64a26003149b99621b965d9f2ec25\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too abstract to represent a tree, ficus, or fern. It looks like a geometric shape rather than a plant.\"\n    }\n  },\n  \"fd547a1545bd4184a8bbaaff4bf8e5dc\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is difficult to identify and doesn't clearly depict a tree, ficus, or fern. It is an abstract shape.\"\n    }\n  },\n  \"fdfbd40cba564217b43fa0193d78af3a\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any of the specified classes (tree, ficus, fern, or flower). It appears to be a simple, abstract shape.\"\n    }\n  },\n  \"fe251a80bcd2478282303294f8524586\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too blurry and the object is not clear. It is also difficult to tell if it is a tree, ficus, or fern.\"\n    }\n  },\n  \"fe4b685c0c6e48db96e598c34000c895\": {\n    \"obj_class\": \"flowers\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a flower arrangement in a container. While it contains flowers, the container and the arrangement itself make it unsuitable for physics simulation of a single object.\"\n    }\n  },\n  \"0007a7c8fcb44074b20fa4e14b8730a6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden block, not a jello block. The texture and material are completely wrong for the requested class.\"\n    }\n  },\n  \"015eaf92c6e3453182a4a4c92642580b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"01cf70b90ab8487d8a822abf13454406\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of pie, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"0278450d1e324c33904e160e115f6fbd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky humanoid figure (like a Lego or Roblox character), not a jello block or any related dessert item.\"\n    }\n  },\n  \"02d72fa7e9f7472c80ec4edc0b12899d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a snail on a branch with cherries, which is not related to the class 'jello_block'.\"\n    }\n  },\n  \"041d144efd2745879981e67abb9905ba\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stacked blocks, but the texture resembles marble or stone rather than jello or gelatin. It doesn't clearly depict the 'jello_block' class.\"\n    }\n  },\n  \"04ba911e767c4bfea2269f6bbca35cdc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple donuts, not jello blocks. The object class is incorrect.\"\n    }\n  },\n  \"04c00fc6f81441f0acf9a1d092efe830\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of cake or cheesecake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"04ed26dfe7124e74937d7dd50562625b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a very abstract, elongated pink block that does not clearly resemble a jello block, jello cube, or any common form of jello dessert. It lacks the typical visual characteristics (like translucency, texture, or common shapes) associated with jello.\"\n    }\n  },\n  \"0716cddd4b14421fb4db6eaedf59375f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that resembles a jellyfish, not a jello block or any of the related search terms.\"\n    }\n  },\n  \"073626ba1f0a419d9938ff1e1b493aac\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not clearly resemble a jello block or any related dessert. The texture is unusual, with a flaky/cracked appearance on top, and the shape is amorphous, not typical of jello. This makes it unsuitable for representing the class.\"\n    }\n  },\n  \"07ca61f84ae245138b4589fc72f18909\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (four cubes), not a single object as required.\"\n    }\n  },\n  \"07ea6d4e19b642ad95f53b680d2d0f55\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish-like creature, not a jello block, cube, or dessert as described in the class list.\"\n    }\n  },\n  \"08de69eb15244cdba61861d4b7b861f7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be dried roots or fungi in a wooden tray, not jello blocks or any related gelatin dessert.\"\n    }\n  },\n  \"09e88bb39b424bee93099002f75b9e70\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts Lego toys (figures, car, baseplate, tree, flowers), not a jello block or related dessert.\"\n    }\n  },\n  \"09f1b6a591e94b58ab4222364f6b5118\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a metallic drain cover or grate, not a jello block or any related dessert item.\"\n    }\n  },\n  \"0aa96b4145c9450f8d8946a5dbcc358a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a piece of rock or stone, not a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"0af7ea294fab4abb9e961a0a9d3cc7a8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cartoon character (Strawberry Shortcake), not a jello block or any related dessert.\"\n    }\n  },\n  \"0b29c13a02334b33a3ead377c358fd3c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or any related object. It shows blue spheres on wooden structures, which is unrelated to the target class.\"\n    }\n  },\n  \"0b7b9f1bc12a4ebf818387d18f54dc63\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character, not a jello block or any related dessert.\"\n    }\n  },\n  \"0b80f4fe0de34b70b92a1c8eb3b51961\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely blank. The object is barely visible and occupies a tiny fraction of the image, making it impossible to identify as a jello block or assess its quality or suitability for physics simulation.\"\n    }\n  },\n  \"0b8fee01acbb42919d91b4fff07ec1bb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a simple block shape, but its texture and opacity do not resemble jello or gelatin. It looks more like a solid, opaque block rather than a translucent, wobbly dessert.\"\n    }\n  },\n  \"0b9867d98c154737b422fa5afacfc178\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a strawberry, not an object belonging to the 'jello_block' class (e.g., jello, gelatin block).\"\n    }\n  },\n  \"0c961bcd4cd64c568ec524b5f0030af7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake or pastry with berries, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"0cbbe2cfcac24e528bb1b34f4432d7ec\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright. The object is barely visible and cannot be identified.\"\n    }\n  },\n  \"0d2ebadf56ab4a8b885d7598c8d18ac2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not resemble a jello block.\"\n    }\n  },\n  \"0db2a6960d274a86a2071c5324d6fd96\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Lego brick, which is a hard plastic toy, not a soft, wobbly jello block or gelatin dessert.\"\n    }\n  },\n  \"0e68ae536b274041a819395d46f3ddaf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"0fbbe301e75347fdaf6fb9aaad1e3ae9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Lego construction of a character (Cookie Monster) and a lamppost, not a jello block or any related dessert item.\"\n    }\n  },\n  \"1020c5a35530475691fff281e9e81f59\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a strawberry, not a jello block or related item.\"\n    }\n  },\n  \"103e066a3c9545e4b3bfd2f176b38f52\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of mango, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"1060ada682a748bf84f2cf4342924d46\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows Lego blocks, not jello blocks. These are distinctly different objects with different physical properties.\"\n    }\n  },\n  \"10c4fbc517164a8591f8398d9e917bcf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tray or mold, possibly for laboratory use, not a jello block or gelatin dessert itself.\"\n    }\n  },\n  \"13591ac0e4ea45749c29f5471eb0ab22\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains text and a cartoon creature with a microphone, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"1384fccaf3c943a5beddafc32fca1dda\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dessert, possibly fruit-based with cream and sauce, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"13de9f761fd14380acf33d084e8b2dae\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, making it very difficult to discern the object. It appears as a faint white cube on a white background, lacking the characteristic color, translucency, or texture of a jello block.\"\n    }\n  },\n  \"140ab67746834d8d980ddb51e3f82590\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it impossible to identify the object. It does not clearly depict a jello block.\"\n    }\n  },\n  \"149ebc1ff87e45a2a092d9ba6add62dc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict any object, let alone a jello block. It appears to be just a blue gradient background.\"\n    }\n  },\n  \"1517039066b0472a9db9148073f5d751\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Rubik's cube on a block, not a jello block. It contains multiple objects and the primary object shown (Rubik's cube) does not belong to the target class.\"\n    }\n  },\n  \"1570ecb3f99e46eea13eb6d5b980ae7e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character figure, possibly made of a jelly-like substance, but it does not represent a 'jello block', 'jello cube', or any of the typical forms associated with the requested class.\"\n    }\n  },\n  \"15eae51b0fe84e95bfa74b3ee8463731\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern the object clearly. The quality is too low for training data.\"\n    }\n  },\n  \"16439282267f4f45ab1a224d7249e31d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block, jello cube, or any related item. It looks more like a rock or a piece of moldy food.\"\n    }\n  },\n  \"16c2f3b8706f4fd7b64139238f5ab1f8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dessert that looks more like pudding or mousse topped with whipped cream in a bowl, not a jello block or gelatin dessert as specified by the class terms. It lacks the characteristic appearance (translucency, block shape) of jello.\"\n    }\n  },\n  \"170683a4e5c54b0e9e202064fb53f52a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"1758ec9277334676a661f538305c5902\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects forming a complex structure, not a single jello block. The small pink cubes might resemble jello, but they are part of a larger, unrelated assembly and not the main focus.\"\n    }\n  },\n  \"1780d873776741a0876bd905e90886c6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like a cupcake, muffin, or Easter bread with icing and sprinkles, not a jello block or gelatin dessert. It lacks the characteristic translucent and wobbly appearance of jello.\"\n    }\n  },\n  \"180684eac5064315a5e5ce474fd67120\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stone structure, not a jello block or any related item.\"\n    }\n  },\n  \"185c715c27264f64b181dc47096f02e8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block made of bricks, not a jello block or anything related to the specified class.\"\n    }\n  },\n  \"186ef4b9b2834004be683c416405f983\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image clearly depicts a single object resembling a jello block molded into the shape of a Lego brick. The texture is consistent with jello/gelatin, and the quality is good. It fits the class description and is suitable for physics simulation due to the expected wobbly nature of jello.\"\n    }\n  },\n  \"190d22290a754ce6a9dd63ac2420e341\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not depict a recognizable jello block.\"\n    }\n  },\n  \"199f9be566a4481cbc07ee14ceacda77\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake with cream and strawberries, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"19f848c62bef44c0a3cbe72fbcd44ec6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a carton of orange juice, not a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"1a6d080bec614e8599c9c8cb295e4144\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a molded jello dessert, which fits the 'jello_block', 'jello mold', or 'jelly dessert' description. The quality is good, and it represents a single object suitable for physics simulation due to jello's characteristic wobble.\"\n    }\n  },\n  \"1b87a08b81d34707bbddaa256827297c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a thin, flat object viewed from the side, which does not resemble a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"1bb631ef54f04af3a022e6b79e718c0c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that resembles a jellyfish or a slime creature more than a jello block or dessert. It does not clearly represent the target class 'jello_block'.\"\n    }\n  },\n  \"1de6ddc8b07a4d8a9edae2717b55f65d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white, and the object is extremely faint and barely visible. It cannot be clearly identified as a jello block, and the quality is too low for training.\"\n    }\n  },\n  \"1f3dec541153462989ab89b26836a9ff\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Rubik's cube, not a jello block or any related dessert item. The object belongs to a completely different category and has vastly different physical properties.\"\n    }\n  },\n  \"1f6a3c6abfc046308c66f54de3f90783\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky, pixelated animal (likely a cat), not a jello block or any related item.\"\n    }\n  },\n  \"1f865a37797f46809b218c8488f1c12b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a grey, faceted, geometric object that does not resemble a jello block or any related terms. It lacks the characteristic appearance (color, transparency, texture) of jello.\"\n    }\n  },\n  \"1f9cf73507874f398a75ab9db22e4409\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block, jello cube, or any common form of jelly dessert. It looks more like a stylized cartoon object or creature component.\"\n    }\n  },\n  \"1fa75984e231488483182a29e2a3d859\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a donut, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"201c02bf80974468a1d93f534259a9b3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two empty paper cups, not a jello block or related dessert.\"\n    }\n  },\n  \"2023d6e4c53540539207a63782ad8806\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a jello block or any related dessert item as specified in the class description.\"\n    }\n  },\n  \"21a2612640cf49e1ba273218c2f94197\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple abstract, blurry shapes that do not clearly depict a jello block or any recognizable object from the specified class. The quality is poor and the content is ambiguous.\"\n    }\n  },\n  \"220abbec03e44eecbe8843d190adc0b2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in or cropped, making it impossible to identify the object as a jello block or anything related to the target class.\"\n    }\n  },\n  \"222eefd4aef6469cbb1e79b001b16e49\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex structure, possibly a game level or toy, not a jello block or any related dessert item.\"\n    }\n  },\n  \"236762a4bd684e899e573621f8023596\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify the object or assess its quality. It does not clearly depict a jello block.\"\n    }\n  },\n  \"23c13df4292949d0b5ae084b54d6c9f3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its properties. The quality is too low for training data.\"\n    }\n  },\n  \"249050941d5a417ab2e2a3442ee870d1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, grey block, likely stone or concrete, resting on a ground texture. This does not resemble a jello block, which should be translucent, often colorful, and appear soft/wobbly.\"\n    }\n  },\n  \"2781c665b69246eaa36b094169435b86\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a food cart or kiosk, not a jello block or any related dessert.\"\n    }\n  },\n  \"28e28d3a18c4429e872c0970f4f57650\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a flat, oval disc. While it has a somewhat gelatinous appearance, its shape does not resemble a 'jello block', 'jello cube', or typical 'jello mold'. It is too flat and lacks the volume expected for this class, making it less suitable for representing the typical physics of jello.\"\n    }\n  },\n  \"295254d4b5b946eea23f959772af280b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly see or identify the object. It does not resemble a jello block or any related item.\"\n    }\n  },\n  \"2a93f91b3bf9462eb4e14ee87db9b54f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a dessert stand with various pastries and sweets, none of which are jello blocks or related items. It does not depict the target class 'jello_block'.\"\n    }\n  },\n  \"2b0416504de34179ad425784a387de71\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything resembling gelatin. It looks like a thin, rigid object viewed from the side, possibly a piece of wood or metal.\"\n    }\n  },\n  \"2c54c23ed8a74d4b9022c676ce86fd91\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cheesecake or mousse cake with fruit toppings on a plate, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"2cd47f698ae140a6bd06b0ed36e645be\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a building frame structure, not a jello block or any related dessert item.\"\n    }\n  },\n  \"2d03dc126c1a4f37943845aa392f33f5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a generic grey cylinder, which does not resemble a jello block, gelatin, or any related dessert item. It lacks the characteristic color, transparency, and texture associated with the class.\"\n    }\n  },\n  \"2d0758004a83402aa8736b04ca883f1c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It appears to be made of a rigid material, possibly wood, and lacks the characteristic translucency, color, and texture of jello.\"\n    }\n  },\n  \"2d752176d37845d4ad997b909a68f3eb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cupcake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"2d785665af1d44e9a4049d5dfc5c67a7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays objects that resemble game tiles or possibly chocolates, not jello blocks or gelatin desserts.\"\n    }\n  },\n  \"2dccdd2e465842a2ad33cf9e6fb289f3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a butternut squash, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"2f68d03db2564ca9b7df301b1e4aa39c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of cake, a cup, and a spoon, not a jello block or related item.\"\n    }\n  },\n  \"302c12a91f5541359ef7a7c9f41de9bf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks detail and color. It's very difficult to identify the object as a jello block or any related item from the class description. The quality is too low for training.\"\n    }\n  },\n  \"30cd19250afe415582f4478c8db0fabb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It lacks the characteristic texture, shape, and color (even if rendered in grayscale, the texture is wrong) associated with jello. It looks more like a piece of rock or porous material.\"\n    }\n  },\n  \"31221f556e5c4a4ea801e772528e1af0\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized character or creature, not a jello block or any related dessert item.\"\n    }\n  },\n  \"3167ad900dd841ba848271cb961df0f8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stack of various fruits, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"3197bb570c194870a80f9a941677ce96\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"319ee0cc94e3486db3a14cc23d1039f7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or any related object. It shows a red box, possibly a toolbox, with some small brown blocks nearby.\"\n    }\n  },\n  \"31a6428d104d4258af2fb24e00e2cfd3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two cubes with textures resembling roof tiles, not jello or gelatin. It does not depict the target class 'jello_block'.\"\n    }\n  },\n  \"34e32f801b6642a2bc2fb9b30622590b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows donuts (specifically, sufganiyot), which are baked goods, not jello blocks or gelatin desserts.\"\n    }\n  },\n  \"3678d5fd71c2413d82b8891282945510\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pixelated stone block, not a jello block. The texture and appearance are incorrect for the requested class.\"\n    }\n  },\n  \"3720e0be0c0148d29c477ef4e7d679d8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of pie and some strawberries, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"373908b340e54a9f878a3596ee7a4bab\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It appears to be a piece of concrete or plaster.\"\n    }\n  },\n  \"3835ccde15ca4785903522d56c7a2eeb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image provided is a distorted, black and white image that appears to be a combination of animal features. It does not resemble a jello block, gelatin, or any related dessert item in shape, color, or texture. It is completely unrelated to the target class.\"\n    }\n  },\n  \"38a2c03610004351acc0cce85ba022e2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a square of chocolate, not a jello block. The texture, color, and appearance do not match the characteristics of jello or gelatin.\"\n    }\n  },\n  \"39b040b7e5c4477eabd40b7771a29def\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract, low-polygon shape that does not clearly resemble a jello block, jello cube, or any related dessert. It lacks the characteristic appearance (texture, form, translucency) of jello.\"\n    }\n  },\n  \"39f3119f673d46e897414a02874450a8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is just a black silhouette and does not clearly depict a jello block or any recognizable object. It lacks texture, color, and detail necessary for identification and training.\"\n    }\n  },\n  \"3ab7e42db84945299b7c367b0e6126ad\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to discern the shape, texture, or details of the object. It does not clearly depict a jello block or any related item.\"\n    }\n  },\n  \"3b01ee60239b4a77918bd78b65d056b1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block, jello cube, or any type of gelatin dessert. It looks more like a slice of meat or some other organic material.\"\n    }\n  },\n  \"3c718d25fe814818bd1afbc2e1a12c82\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a butternut squash, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"3ca53f59f56f4a18829b3d5ca58343a5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what looks more like a melting popsicle or ice lolly rather than a jello block. The presence of the stick and the puddle suggests melting, which deviates from the typical representation of a solid jello block or cube.\"\n    }\n  },\n  \"3d4a694ea9844120856c1cc5db17e9fb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a voxelated donut or cake, not a jello block or gelatin dessert. While jello can be molded, the texture and sprinkles are inconsistent with the target class.\"\n    }\n  },\n  \"3d911c511f2744ec9bfb99d46d2d6e14\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or anything related to the class. It appears to be an abstract, low-quality, black and white image of an unidentifiable object.\"\n    }\n  },\n  \"3f1604af105d4164a204de6347364491\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two Rubik's cubes, not a jello block or related object. It also contains multiple objects instead of a single one.\"\n    }\n  },\n  \"3f2e7c82c67248fbb6524c805d15209c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains fragmented parts of objects that are not clearly identifiable as belonging to the 'jello_block' class. The quality is poor due to the fragmentation and lack of context.\"\n    }\n  },\n  \"405bfb2f18b4462793d64161e3dada23\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mold or tray, possibly a jello mold, but not the jello block/dessert itself. We need images of the actual jello for physics simulation, not the container it might be made in.\"\n    }\n  },\n  \"40d434724f8c4a31be2a82a10a8d4729\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern the object's material or texture. It does not clearly depict a jello block or anything resembling gelatin; it looks more like white, blocky puzzle pieces or tiles.\"\n    }\n  },\n  \"41185d114887483a8d81d89d73fc7115\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's shape is too generic and amorphous. It doesn't clearly resemble a 'jello block', 'jello cube', or a typical 'jello mold'. It looks more like a flattened, abstract blob rather than a recognizable jello dessert.\"\n    }\n  },\n  \"4139cadb34e8433a881b8380fdf8ed51\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a butternut squash, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"41dac22737c24e4291dfcce5838a1b7a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"4227c0c46a1640ef9c61c455f7bc10f7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image resembles a stylized jellyfish or a lamp more than a jello block or any related dessert item. It does not fit the class description.\"\n    }\n  },\n  \"4269b905598f40a688f6ef2aaf46055d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not jello blocks or anything related to gelatin or jelly desserts.\"\n    }\n  },\n  \"42da7b26f173427f89c9ddb64be1be73\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a jello block or gelatin dessert as specified by the class.\"\n    }\n  },\n  \"4354a328411745469b5e939167ad1741\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a structure made of Lego-like blocks, which is not related to the 'jello_block' class (jello, gelatin, etc.).\"\n    }\n  },\n  \"438b8aa0bc2049f8ab41068a29084be5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a castle-like building, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"43ba9603d5834fad9ecdc1857bb5e419\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related dessert. It appears to be a solid, opaque, grey block structure, possibly made of concrete or stone, sitting on a stand. This does not fit the visual characteristics (translucency, color, texture) of the target class.\"\n    }\n  },\n  \"45419ad00a5b41819b230efc8070b922\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is just a solid blue color and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"45cf382320b74adc9fc62033a760399e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (the jello-like dessert, toppings, and the plate). We need images of a single, clean object, specifically a jello block or cube, for physics simulation training.\"\n    }\n  },\n  \"4642b38854594e20bb2b6bbd924a9287\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything resembling the target class. It appears to show some kind of tiled surface and a small, indistinct object, both rendered in white with low contrast.\"\n    }\n  },\n  \"4670c9d94f2846cf802bb95603926540\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an ice cream cone, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"473bcd8945054b628be6ef78a97162f8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object lacks the characteristic translucency and texture of jello. It appears as a solid, opaque green block, which does not accurately represent the visual or physical properties of a jello block needed for physics simulation.\"\n    }\n  },\n  \"478580460e9f4d44858032a3bb933c9c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"486238438ec64c3cb64d607a30d1a9e6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of pizza, not a jello block or related item.\"\n    }\n  },\n  \"4875e2c6e3d64ba18c866ea7c058f9ee\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright. It is impossible to identify any object, let alone a jello block.\"\n    }\n  },\n  \"49cda7abf2ac40348b8067c657b81693\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a complex architectural structure, possibly a building model, not a jello block or anything related to the specified class.\"\n    }\n  },\n  \"49e83a6970214f7e98d961bf95b866b0\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a dessert in a bowl with toppings (whipped cream and cherry). This is not a standalone 'jello_block' or 'jello cube' as requested. It includes multiple objects (bowl, dessert, topping, cherry) and the main object is not clearly identifiable as jello/gelatin, looking more like pudding.\"\n    }\n  },\n  \"49eb1d572e37402fa7156d594eb86e39\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a hard, stone-like or metal object with moss, not a soft, translucent jello block or gelatin dessert.\"\n    }\n  },\n  \"4b13b9f6a8b445c48c1e610b34978449\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cupcake or tart, not a jello block or related gelatin dessert.\"\n    }\n  },\n  \"4b783c5e19e24438a93c6266d6063ece\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden block with letters, not a jello block or any related dessert.\"\n    }\n  },\n  \"4ca5db6fbe7347a4962959c753243762\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a section of a blocky, Minecraft-style structure, possibly a wall or ruin, not a jello block or any type of gelatin dessert.\"\n    }\n  },\n  \"4d799df56c8f479dbf3c55b44eeaaa04\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is poorly framed, showing only a small portion of the object in the corner. It's impossible to clearly identify the object as a jello block or assess its quality.\"\n    }\n  },\n  \"4de2a76e1730487a8d4df844e931fd5a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a metal tin container, not a jello block, gelatin, or any similar dessert.\"\n    }\n  },\n  \"4e0e6deacc034f339eb6eee84a17d076\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized object that looks more like a potted plant or a cupcake with unusual topping rather than a jello block or jelly dessert. It does not clearly represent the target class.\"\n    }\n  },\n  \"4ebf0fb60420485ca51ea9c7ad28f577\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts stacked cubes with a grid-like texture, which does not resemble a jello block or any related terms like gelatin or jelly dessert. It looks more like toy blocks or a low-poly structure.\"\n    }\n  },\n  \"4f4900dfb3934ff2bc4d31b685eb9670\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a shoe, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"4fac7347a1324b389301b95169f20ef3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a complex dessert structure, possibly a cake or a fantasy building made of sweets, decorated with strawberry-like objects. It does not clearly show a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"4ff2bb37915d4ad6a13918568ea06a9d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, elongated object viewed from the side. It does not resemble a jello block, cube, or mold in shape, color, or texture. It is not clearly identifiable as belonging to the 'jello_block' class.\"\n    }\n  },\n  \"50e0f0f7e37b4a80a6b809a8831835c2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a rigid, shelf-like structure, possibly made of glass or plastic. It does not resemble a jello block or any related dessert item.\"\n    }\n  },\n  \"512e5c58293d4eaa83ad0ff9eb5be8e3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a zucchini, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"51304d1bd08148aca6e5a190232a459f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows fungus or mushrooms growing on wood, not a jello block or any related dessert.\"\n    }\n  },\n  \"5141ba0001424691ae66ee00bf1dfa71\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pastry (like a cinnamon roll or similar), not a jello block or gelatin dessert.\"\n    }\n  },\n  \"51b458cb0c9e46368ef2b6583a82d4e7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is a solid, grey block with holes, resembling a mechanical part or base plate, not a jello block or any type of dessert.\"\n    }\n  },\n  \"523838ecb26b404d948b393a3dcc439e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an ice cream sundae, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"52651a99bf12402c9cdfaea8cb865e6a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted does not clearly resemble a jello block or any related item like a jello mold or jelly dessert. It appears to be a stylized, abstract object that doesn't fit the class description.\"\n    }\n  },\n  \"5377667862a547a1a421a676e063cb0c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dessert that appears to be a small cake or soufflé with ice cream and nuts, not a jello block or gelatin dessert. Additionally, it contains multiple objects (dessert, ice cream, nuts, plate, sauce) rather than a single object.\"\n    }\n  },\n  \"5378b01d393d4701ba6851d97bbd532d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an industrial setup with conveyor belts and machinery, not a jello block or related dessert.\"\n    }\n  },\n  \"54395f888ff54b58856a37efe1b84ed0\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a food stall, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"546925c54f3b471d8d833bdd65110834\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which does not belong to the 'jello_block' class. The target class includes items like jello cubes, gelatin desserts, etc.\"\n    }\n  },\n  \"5470d4a8644e4223a84811a07ff2ba4d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays multiple small spheres around a central structure, which does not clearly represent a 'jello_block' or any related terms like 'jello cube' or 'jello mold'. It looks more like an abstract representation or a different kind of object entirely.\"\n    }\n  },\n  \"551b01452db94b24bc0d3593781495f8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a large white structure and two small colored cubes). The target objects (potential jello blocks) are partially obscured by the white structure and are not the main focus of the image. We need images focusing solely on the jello block itself.\"\n    }\n  },\n  \"5598cd89057940d0b9b6d9ad3311cfac\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object made of Lego-like blocks, resembling a cupcake or dessert, not a jello block. The material and expected physics (rigid blocks) are completely different from jello (soft, wobbly).\"\n    }\n  },\n  \"5719a470e4f94c619bcc4c7a2615e208\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, not a jello block or any of the related dessert items specified in the class description.\"\n    }\n  },\n  \"57864ec248b34b52b7933b07848de0ab\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a Lego-like spaceship model, not a jello block or anything related to the specified class.\"\n    }\n  },\n  \"57a82e68577b4259934aaffcbf28cb1a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a toy car made of blocks, not a jello block or anything related to the requested class.\"\n    }\n  },\n  \"58baa36e9bd0487c8177c0c39ee7a99a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any recognizable object, let alone a jello block. It appears to be either blank or extremely overexposed.\"\n    }\n  },\n  \"58c16ba8e8484ee2ab0a5a188592521c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish suspended inside a translucent block, not a standard jello block or gelatin dessert. While the block itself might resemble jello, the prominent jellyfish inside makes it not representative of the 'jello_block' class which typically refers to the edible dessert.\"\n    }\n  },\n  \"5920339c502f4bd88219d426e0fc2c02\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that resembles a Lego brick, not a jello block or any related item from the provided list. The texture and shape are inconsistent with jello.\"\n    }\n  },\n  \"5ad54ef93c8f4a2c86b84c7c03602046\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not clearly depict a jello block or any related dessert. It looks more like an abstract, low-polygon shape, possibly a stylized mushroom or structure, rather than jello.\"\n    }\n  },\n  \"5af966079ae64db9b89dd826ab6b54aa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a layered dessert, possibly pudding or mousse, in a glass cup with whipped cream and a topping. It does not clearly represent a 'jello_block' or typical gelatin dessert, which is usually more translucent and has a distinct wobbly texture.\"\n    }\n  },\n  \"5cdd7893753c463eb835351ec730f454\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a thin vertical stack of small shapes, which does not resemble a jello block or any related item. It fails to clearly depict the target object class.\"\n    }\n  },\n  \"5cffc8a4596241aa9d1e3955f06974d5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image primarily shows a container, and the object inside, which might be jello, is not clearly depicted. We need images focusing on the jello block itself, not the container or mold.\"\n    }\n  },\n  \"5f1095fe70354ded83812b0dc1fcd76e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or its details. It is too bright and lacks contrast, rendering it unsuitable for training data.\"\n    }\n  },\n  \"611edc5cff454752b4d58938ca04cb41\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a pink pony figure, not a jello block or any related dessert.\"\n    }\n  },\n  \"62e1f21249854d5294ad3d90bcec00a1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is almost entirely white, with a very small, indistinct white shape. It does not clearly depict a jello block or any recognizable object due to its extremely low visibility and lack of detail.\"\n    }\n  },\n  \"638a6756115943119ddb6b442d973a73\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (a slice of something on a plate, and a separate floating shape). Additionally, the object on the plate is ambiguous; it could be interpreted as jello, but it also resembles a slice of pie or tart, making it unclear for the target class 'jello_block'.\"\n    }\n  },\n  \"638a9233ed4e4581a9fca4d022ce1c2e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks stacked together, not a jello block or any type of gelatin dessert.\"\n    }\n  },\n  \"63c9391726d54b5e8c0e9e87d640dcd1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a jello mold, which falls under the specified class. The quality is good, and it represents a single object (the jello on a plate, which is acceptable context). Jello is a classic example of an object with interesting physics (wobbliness, deformation) making it suitable for simulation.\"\n    }\n  },\n  \"642dfa797053466187e7dbfba3830b85\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is too low-poly and lacks the characteristic texture (like translucency) or typical shape (like a cube or mold shape) of jello. It looks more like a generic pink disc and doesn't clearly depict the 'jello_block' class.\"\n    }\n  },\n  \"64be67fbb7ce427f83279699b21b8359\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a collection of small, dark blocks arranged in a wavy pattern, which does not resemble a jello block, jello cube, or any common form of gelatin dessert. It lacks the characteristic appearance (translucency, smooth texture, typical shape) of the target class.\"\n    }\n  },\n  \"64e8d14eb5af43a38b7fc3db7cf83ddf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of chocolate cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"6551259392dc4ee19c6064d9b51d936a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a tray, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"67af9bfc67424895adbfbf8ad816f120\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it very difficult to discern the object's features or even confirm it belongs to the 'jello_block' class. It lacks the typical visual characteristics of jello (like color or translucency) and is of low quality due to the poor visibility.\"\n    }\n  },\n  \"67cb54126dfb48f6a74d01095865b2eb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a layered cake (likely tiramisu), not a jello block or gelatin dessert.\"\n    }\n  },\n  \"68137801da0c40c8a9e55a4e1faec01c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stone or cobblestone block, not a jello block. The texture and appearance do not match the characteristics of jello (translucent, colorful, wobbly).\"\n    }\n  },\n  \"6830e31c6bdb4829ad39c01facdd9859\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is opaque black and looks like a solid block, not like translucent, wobbly jello or gelatin.\"\n    }\n  },\n  \"68d225a6d45f47fbb2da5c9b35d24fe2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays multiple blocky objects that resemble layered cakes or sandwiches rather than jello blocks. The texture is opaque and solid, not translucent or wobbly like jello. Additionally, there are multiple distinct objects (different colored blocks, a grey structure, flowers), violating the 'single object' guideline.\"\n    }\n  },\n  \"696ed5ffd87d4ef49e84fbf00cea15de\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"6a46f36b71a640c7969e29a289bc0269\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows juice cartons, not jello blocks or any related item from the specified class list.\"\n    }\n  },\n  \"6a97cc69162842689332597fc3372ee4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not a jello block or any type of gelatin dessert.\"\n    }\n  },\n  \"6b4c1bffd7224d378c46ade9009bd14f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object that resembles a colorful jello block or mold, consistent with the requested class. The quality is adequate for training purposes, and jello is a suitable object for physics simulation due to its characteristic wobbliness.\"\n    }\n  },\n  \"6beef96c7906473c822709397f63f81c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"6c2ca2784b3642738cdaf3f9cc80a9bd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a piece of broken debris, possibly plaster or concrete, not a jello block or anything related to gelatin desserts.\"\n    }\n  },\n  \"6d226d8165184433bff5cb4c37e27510\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a large collection of various block types (like Minecraft blocks), not a single object identifiable as a jello block.\"\n    }\n  },\n  \"6e94c80c4b6f40aa9895c31ef8efbf6a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or any related dessert item. It appears to be some sort of construction material or trim.\"\n    }\n  },\n  \"6f51bddebce84ce58d9a19c18551b02a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stack of pixelated blocks with brick-like textures, not a jello block or anything resembling gelatin.\"\n    }\n  },\n  \"6f7c42e1e5a1426b915b05213ba38940\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Lego minifigure, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"7099f4c91ee448ddbd4f3e6f7e249c87\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a cutting board, knife, apple, and banana peels, none of which belong to the 'jello_block' class.\"\n    }\n  },\n  \"713fc4046bb04352b51d45f31e950984\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cupcake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"71fdd82bef144b3cb23a0c21d1a5c25b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related dessert. It appears to be a hard, angular, abstract object, possibly a container or sculpture, lacking the typical characteristics of jello (like translucency, wobbliness, common shapes).\"\n    }\n  },\n  \"72a864afb37046e3b5f65387d36d5747\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cake, not a jello block or any related item from the specified class list. Additionally, the image is extremely overexposed and lacks detail, making it low quality.\"\n    }\n  },\n  \"72cd3ce1ead44d01b2198dd6ecd08927\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a character sitting on a block of dirt/grass, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"72e01b24145e420d91965a547310c189\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a blocky object that looks more like a Rubik's cube or some kind of electronic device, not a jello block. It does not have the appearance or expected physical properties of jello.\"\n    }\n  },\n  \"72f7e564a3e84a8aab15e2357c1d929d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, multi-tiered cake with candles, not a jello block or jelly dessert. It does not match the visual characteristics or common forms of the target class.\"\n    }\n  },\n  \"7303e59a50b24950969baf4510cc5d46\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly shows a single object that resembles a red jello cube or block against a clean background. The quality is acceptable, and it fits the requested class 'jello_block'. It is suitable for physics simulation due to the characteristic properties of jello.\"\n    }\n  },\n  \"733b0868db6c4acf9fa9c16ccfaa330b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized, cartoonish character with eyes, rather than a typical jello block or dessert. It does not clearly represent the intended object class.\"\n    }\n  },\n  \"74110fd064524845b8b005a3026f68a8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a birthday cake, not a jello block or any related item from the class list.\"\n    }\n  },\n  \"746fe961aa304503b28e788f2717e772\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a patch of sandy ground with pebbles, not a jello block or anything related to gelatin desserts.\"\n    }\n  },\n  \"747650969b3a4afebd7b522c33e8609b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The objects in the image are opaque, matte cubes stacked together. They resemble toy blocks more than jello blocks, which are typically translucent and have a distinct texture. The visual appearance does not align well with the material properties expected for jello/gelatin, making it unsuitable for learning physics parameters for that class.\"\n    }\n  },\n  \"75125589b2a548e3b051d4ef5ea4c5bb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden basket, not a jello block or any related dessert.\"\n    }\n  },\n  \"789e15b7cf234d59bc53cd81ef0f9d11\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a vegetable, likely a zucchini or cucumber, not a jello block or any related dessert.\"\n    }\n  },\n  \"7a3dc12d96f741ab84d358fd2ac3df28\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a squash, not a jello block or any related item from the specified class.\"\n    }\n  },\n  \"7b62fa23c474424f8458087f7cbfc3ec\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a gourd or pumpkin, not a jello block or anything related to gelatin desserts.\"\n    }\n  },\n  \"7b912daa25a44162945e31d45acfc502\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pineapple, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"7b9a33386eab4dd986aa0980054ead3c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake or tart with fruit, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"7be4eaa0ee4d4d75a10f0a3350a17f34\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block with a wood texture, not a jello block. The material properties are completely wrong for the target class.\"\n    }\n  },\n  \"7c363130174a4bc8b7d9d6582532fec5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden blocks, not a jello block or gelatin dessert. The texture and appearance do not match the target class.\"\n    }\n  },\n  \"7c429579928a42398b9bd7ad0497381a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it difficult to discern any details. Furthermore, the object depicted appears to be a Lego brick, not a jello block or any related item.\"\n    }\n  },\n  \"7ef29dc548aa42f89e986618b81cdb09\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an ice cream cone or a similar dessert, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"7f52bf47e9214e2d8451f0317f428b27\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere with a galaxy-like texture, which does not resemble a jello block, jello cube, or any typical form of jello dessert.\"\n    }\n  },\n  \"807729ed9cf84372955fe383693ed743\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a jellyfish, not a jello block or any of the related terms provided.\"\n    }\n  },\n  \"811fc56e93c145af926905f23cbf093c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it impossible to discern the object clearly. It lacks color, texture, and definition, rendering it unsuitable for training data.\"\n    }\n  },\n  \"815f5a0ded9a4ffeb66b1e49597e468e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple wooden blocks, not a jello block or anything related to the target class (jello, gelatin, jelly dessert).\"\n    }\n  },\n  \"818e088dc59f4a89bfea14cb46a4beca\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of watermelon, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"81c4b185fb174bdf875ed88be6db2394\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of layered cake, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"81df13dbe23c4c9fb5e10d4ab4d6ce74\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts multiple blue, translucent structures that resemble stylized buildings or towers, not jello blocks or any related dessert item.\"\n    }\n  },\n  \"82b435a4be034d369d06e7ac002a6089\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a low-polygon, abstract white shape that does not resemble a jello block or any related item from the class description. It lacks color, translucency, and the characteristic shape or texture of jello.\"\n    }\n  },\n  \"8305af9a92e44f9db0adb446d8752fb1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern any object, let alone a jello block. The quality is far too low for training.\"\n    }\n  },\n  \"83b8af3141dd49f7ba59fb19444565ae\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stack of pancakes with toppings, not a jello block or related dessert.\"\n    }\n  },\n  \"83fd3dd85e05422785a9386bfce568b9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a basket or hamper, not a jello block or any related item.\"\n    }\n  },\n  \"84675a7753a04cff935b2511ff985dcc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a very low-poly, flat-shaded representation that lacks the characteristic visual properties of jello (like translucency, texture, or a typical cube/mold shape). It looks more like a generic geometric shape or perhaps a piece of hard candy rather than a jello block.\"\n    }\n  },\n  \"84b153e8deb94f3ca54989ed7086f8a9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pie on a stand, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"84e215dd326d41c8b67fc4a6c412f44a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern the object. It appears as faint grey shapes on a white background, not clearly depicting a jello block or any recognizable object.\"\n    }\n  },\n  \"863b112d64fc4a01a9eaeccc1c0b3e6f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"8655be19ad7b46958e178b6d7283b491\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to discern the object or its properties. It does not clearly depict a jello block or any related item.\"\n    }\n  },\n  \"868e3cdb4c7540ce8b4f395514885ce0\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"86d6b638f2224395aafd617933882a77\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a fantasy mushroom or jellyfish-like object, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"87796ce80d6c420e9b22b5fface0caf3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not jello blocks or anything related to the 'jello_block' class.\"\n    }\n  },\n  \"8787dadc26454cc9b78c49fc32012dbf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"8855e73f55a14a48ad74eb0cafc4ee05\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"88c5ea2dbeff45818c42c34e44854590\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appear to be stone or concrete blocks, not jello blocks. The material and appearance do not match the target class.\"\n    }\n  },\n  \"89599995536d4f1ba1998ff26697d915\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts what appears to be a small tart or pie, not a jello block or gelatin dessert. The texture and appearance are inconsistent with the target class 'jello_block'.\"\n    }\n  },\n  \"8a2203f673cc4e02bcadc9b3bbdba5b4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image appears to be a mousse or pudding in a bowl, not a jello block or gelatin dessert. It lacks the characteristic translucent and wobbly appearance of jello.\"\n    }\n  },\n  \"8a36fcb9485d4071b43415b595bd6c9d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a butternut squash, which is a vegetable and does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"8aa00644caed4e57837b2deb98ecca0c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pizza, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"8aa47e5107bc422ba523231e569c5499\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"8ad9f94723a7448bb9a54923e1404bef\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin side view of an object that does not resemble a jello block or any related dessert. It looks more like a flat, possibly wooden or pixelated structure.\"\n    }\n  },\n  \"8b2580c6fd9a476f9786dcfeb390eeaa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple different objects (various cakes, cupcakes, cookies, etc.), not a single jello block. It does not clearly depict the target class.\"\n    }\n  },\n  \"8b90cf14a57148aead04adb5a85eb339\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an icicle, which does not belong to the 'jello_block' class. Jello is a gelatin dessert, typically soft and wobbly, while this object is hard and made of ice.\"\n    }\n  },\n  \"8b95ec59e635440e89ee8b3f0e6466e4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a donut, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"8cfe08ba56214ae0827f8b2c39482694\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image shows a single object that resembles a molded piece of pink jello or gelatin dessert. While not a perfect 'block', it fits within the broader category description (jello, gelatin dessert, jello mold result). The image quality is good, and the object is suitable for physics simulation due to the expected properties of jello.\"\n    }\n  },\n  \"8d119e4852924a3e94cfaa54528081f5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block, jello cube, or any common form of gelatin dessert. It looks more like an abstract creature or object.\"\n    }\n  },\n  \"8db91efc58a0434781d169e1bf4b3e8d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a gourd or pumpkin, not a jello block or related dessert.\"\n    }\n  },\n  \"8e4d81ae03984d59992b531836a04992\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an architectural model or floor plan, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"8f0da228a2a64f769348398cc9c58f0b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple donuts, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"8f71050370c048fe8ab9f3902d42e272\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related terms. It looks more like a type of cheese, cake, or pâté due to its opaque, textured appearance and color. It lacks the typical translucency and smooth texture associated with jello or gelatin.\"\n    }\n  },\n  \"8fea3562f05345f7ba7ba7f80dbff2f5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts hot dogs or sausages with sides, not a jello block or any related dessert.\"\n    }\n  },\n  \"90460b162be849dd81212779eb664fa2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a platter with various food items like meats, cheeses, and breadsticks, not a jello block or related dessert.\"\n    }\n  },\n  \"90b03e4e1ce24f5592bbfbb15b41c442\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake or tart topped with strawberries, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"9153ef4f257f4c5c8cc3da8f2d74cdf6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"918de2465c154e42a3556f5afa885243\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object. The quality is too low for training data.\"\n    }\n  },\n  \"92f1eb75ec31444da802703e6abc0366\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pie, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"9322a079ec6046f1a9afe35d8eaaf38e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a donut with toppings, not a jello block or any related item.\"\n    }\n  },\n  \"93379208692b4da0b0f7881d70d69dcc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden object, possibly a puzzle or sculpture, not a jello block or anything related to gelatin/jelly desserts.\"\n    }\n  },\n  \"93cd9744c06241d3a905cd85e4e06c93\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a low-polygon, abstract object that does not resemble a jello block or any related dessert. It looks more like a stylized block structure or character.\"\n    }\n  },\n  \"9541ae9320ac40cf8a525363857c70f4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block with a brick texture, not a jello block or anything related to gelatin/jelly desserts.\"\n    }\n  },\n  \"95606b159207445b86484e6f45d74e74\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky, pixelated character or figure, not a jello block or gelatin dessert. It does not resemble the target class.\"\n    }\n  },\n  \"975a07f2425243b3b719c637790efa72\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a very thin, almost 2D object viewed from the side. It does not resemble a jello block, cube, or any typical gelatin dessert, which usually has more volume and a different texture/appearance. The object looks more like a flat, possibly crystalline structure, and the viewing angle makes it difficult to identify.\"\n    }\n  },\n  \"975bf895b42a4c6ab491625019732382\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows Lego blocks, not jello blocks. The objects depicted are hard plastic toys, completely different from the requested class of soft, wobbly desserts.\"\n    }\n  },\n  \"98a4aaa5b5ef445b814eabf8ba31c06a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not jello blocks or any related gelatin dessert.\"\n    }\n  },\n  \"9963bb7eeaf346288aed83203174211d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of fruit tart or cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"998a836ab30044178bfe0907c553f096\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"99db9d19a03f42138d136efc90c8560f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cupcake, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"9a0381cbbf324118bccd55466159d279\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a simple green block, but lacks any texture, transparency, or detail to clearly identify it as a jello block. It looks like a basic geometric shape rather than a realistic representation of jello.\"\n    }\n  },\n  \"9a5c5abcdd4f487b8011e42a63b118ee\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or any related item. The object shown is abstract and poorly rendered, making it unrecognizable as the target class.\"\n    }\n  },\n  \"9b65dd11838e4f8f8f2df2405df58465\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright and washed out, making it difficult to discern details. More importantly, the object depicted appears to be a small figure on a shelf, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"9c66e47273b14057a1c6a646336cffda\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stack of wooden crates, not an object belonging to the 'jello_block' class.\"\n    }\n  },\n  \"9c72edc0766f476498b3685bf8ea6030\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"9ca6a2674b1644d5b29436aa2248d5c7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts stacked blocks that resemble a toy puzzle cube (like a Rubik's cube), not a jello block or gelatin dessert. The texture and appearance are inconsistent with the target class.\"\n    }\n  },\n  \"9cbc3a86f54a48cab1262e53d4f8d67a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an aerial view of a landscape or terrain model, not a jello block or any related dessert item.\"\n    }\n  },\n  \"9ccbdec00eb1465e980e76b2787d9af4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows opaque, solid green blocks. It lacks the characteristic translucency and texture of jello or gelatin, making it unsuitable for representing the 'jello_block' class, especially for physics simulation purposes where material properties are key.\"\n    }\n  },\n  \"9d21bf9206b5450ab157e7e3ff61cd7d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays a low-polygon object that resembles a stylized sword or perhaps a strip of bacon, not a jello block or any related item. It does not fit the visual characteristics of the target class.\"\n    }\n  },\n  \"9d2a02db0979494b89da323cf352fce1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bee and a flower, neither of which belongs to the 'jello_block' class. Additionally, it depicts multiple objects instead of a single one.\"\n    }\n  },\n  \"9eb97747c511422e95ec9fc3b8e1e499\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image appears to be made of wood blocks stacked together, not jello or gelatin. The texture and opacity are inconsistent with the 'jello_block' class.\"\n    }\n  },\n  \"9f10f662bd7743ed97cf1fe46e23dead\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a complex geometric object, possibly mechanical or abstract, made of rigid-looking materials (grey and orange). It does not resemble a jello block, gelatin, or any kind of wobbly dessert.\"\n    }\n  },\n  \"9f47a81921ef4b25af115b91c2b7d539\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image is too abstract and distorted. It does not clearly resemble a jello block, cube, or mold, making it difficult to identify as belonging to the specified class.\"\n    }\n  },\n  \"9fbff5821c64480cad13dffdbd91ebef\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stylized, opaque blocks with question marks, resembling mystery blocks from video games like Minecraft or Mario. They do not look like jello or gelatin blocks, which are typically translucent and wobbly.\"\n    }\n  },\n  \"a085b8480f1d496caf6446f084403f01\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not a jello block or gelatin dessert. The material and appearance are completely different from the target class.\"\n    }\n  },\n  \"a104c8ee588d4670ba5cd621bddb94c8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block made of bricks, not a jello block. The texture and material are completely different from jello or gelatin.\"\n    }\n  },\n  \"a1fdce3add9d4f4783b9122b9239c100\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pie on a cutting board, not a jello block or related item.\"\n    }\n  },\n  \"a202ffecd105422a9b3981f2feee073c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple distinct, opaque, solid-looking blocks. They do not resemble jello or gelatin, which typically have some translucency and a softer appearance. These look more like toy blocks and are not suitable for representing the 'jello_block' class, especially for physics simulation purposes where material properties are key.\"\n    }\n  },\n  \"a2645d543a7246b3aad9c352407f6456\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"a29ab58d85d3405a95455218eb704793\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object resembling a piece of jello or gelatin, fitting the class description. The quality is good, and the object is suitable for physics simulation due to its characteristic properties.\"\n    }\n  },\n  \"a46784ffc73b4b00a88388bf06aebbb4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized vehicle or weapon ejecting small spheres, not a jello block or any related dessert.\"\n    }\n  },\n  \"a4ad5eba1b964056a76ec191fbe328ff\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden object, not a jello block or anything related to gelatin desserts. The material and appearance are completely different from the target class.\"\n    }\n  },\n  \"a4fe5f7c57034bdebf5cf1ea543f730b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows an abstract blue outline or shape, possibly a cookie cutter, which does not resemble a jello block, gelatin, or any related dessert.\"\n    }\n  },\n  \"a5b9dc50b56b41609a04efb417b3172c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake, not a jello block or any related gelatin dessert.\"\n    }\n  },\n  \"a618fc55f88540c3ae25ccd59058cc0d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks contrast, making it difficult to discern the object. Furthermore, the object depicted does not resemble a jello block or any related item from the class description.\"\n    }\n  },\n  \"a6726b68b53940a892927a77b6a8b441\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a cupcake, soft-serve ice cream, or frozen yogurt, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"a6fc0e4387f242b5a4492e985865c4d1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Companion Cube from the game Portal, which is a rigid, metallic/plastic cube, not a jello block or any type of gelatin dessert.\"\n    }\n  },\n  \"a7f28b037e624880beaa3e5259ea31cc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cupcake, not a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"aadf967919f84a5983dc8b49efcc5b17\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains three stacked blocks, not a single object. Additionally, the texture looks more like solid plastic or wood blocks rather than a wobbly jello block, making it less suitable for learning jello physics.\"\n    }\n  },\n  \"aaeaf64dad1c4bd784fff83b1a7f9bfa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden alphabet block, not a jello block or any type of gelatin dessert.\"\n    }\n  },\n  \"ab131ce60a954af8b3518bb3ca755cc4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not jello blocks. The material and appearance are incorrect for the requested class.\"\n    }\n  },\n  \"aba72155c4c9415db35d4835abc9c09d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Minecraft scene with multiple characters and objects, none of which belong to the 'jello_block' class.\"\n    }\n  },\n  \"abfdba1229214dd784c55c2b24abe397\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted has a rough, porous, almost rock-like texture and does not resemble jello, gelatin, or any related dessert. It lacks the characteristic smooth, translucent, and wobbly appearance associated with the 'jello_block' class.\"\n    }\n  },\n  \"ac03f7ba3b06493798f0f1718d550982\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or any recognizable object. It appears to be fragmented or incomplete geometry.\"\n    }\n  },\n  \"aca75c909788497faa953aee9e79af9a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a cake or pastry with icing and sprinkles, not a jello block or gelatin dessert. It doesn't match the visual characteristics of the target class.\"\n    }\n  },\n  \"add5faa1212c4b868e51b21df0629a72\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky, stylized figure inside a box, which does not resemble a jello block or any related terms like gelatin or jelly dessert.\"\n    }\n  },\n  \"ae6cd2e6818f4559b4041a5a68b34016\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a stack of solid, opaque blocks. It does not resemble the typical appearance of jello or gelatin, which is usually translucent and wobbly. This object looks more like toy building blocks and would not be suitable for representing the physics of a jello block.\"\n    }\n  },\n  \"ae9fb0d6de684331b3ab8514a83425c6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not clearly depict a jello block or gelatin dessert. It appears more like a layered cake slice or possibly an ice cream sandwich due to its shape, opacity, and color scheme.\"\n    }\n  },\n  \"af0a1c85555d44d692156c1c4cf1b0e9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It appears to be a hard, possibly metallic or plastic object, not the soft, translucent material characteristic of jello.\"\n    }\n  },\n  \"af0f6e99bdc2406797271743dc938c7e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark, making it difficult to clearly identify the object as jello or gelatin. It also contains multiple objects (plate, fork) in addition to the main subject.\"\n    }\n  },\n  \"b07fe40e15334d65884e51c71c8099e0\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of bread with jam/jelly on a plate, not a jello block or gelatin dessert as defined by the class.\"\n    }\n  },\n  \"b0a7633456f54d8288cf690267de99e7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly discern the objects or their details. The quality is too low for training data.\"\n    }\n  },\n  \"b20d9df4bcd7442ea42d181cb35ac15f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a blocky character model (similar to Minecraft Steve), not a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"b2ea5dd6a8fb405bbf918df2b802940e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden object, not a jello block or anything related to the class 'jello_block'. The material and appearance are completely different.\"\n    }\n  },\n  \"b2f3832446d64a499ab599c65b66a465\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a baked good, likely a burnt cheesecake or tart, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"b315eccb47284871a7b38642cd0dd7ba\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and too bright, making it impossible to clearly identify the object or its features. It does not resemble a jello block.\"\n    }\n  },\n  \"b39f4d8698204fdaa04f35bea6fc6a1c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stacked wooden blocks, not jello or gelatin blocks. The texture and appearance are inconsistent with the target class 'jello_block'.\"\n    }\n  },\n  \"b4786d912ae245429bf2d1f0f40b97ac\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows multiple blue, translucent, framed cube-like objects. They do not resemble jello blocks or gelatin desserts, which are typically solid and wobbly. These objects look more like rigid containers or abstract structures, making them unsuitable for representing the 'jello_block' class, especially for physics simulation purposes where soft-body dynamics are expected for jello.\"\n    }\n  },\n  \"b4ac7bb672924afbb9a7616adda89aab\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake or pie, not a jello block or gelatin dessert. The texture and appearance are inconsistent with the target class.\"\n    }\n  },\n  \"b548794219394871953377bd57c6fb1b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality or relevance to the 'jello_block' class.\"\n    }\n  },\n  \"b573b1c4cf5d42778e701c981de426bc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"b5c1657d74434d81b1c86b442a6c7177\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image appears to depict an ice cream cone or perhaps a stylized tree, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"b6050e8eddb34f17bc1c80ff23cadb18\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to identify any object, let alone a jello block. The quality is too low for training.\"\n    }\n  },\n  \"b653efa2e3254519af4122dd2dc6e38f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object appears to be a solid cube made of different colored opaque squares, possibly wood or plastic. It does not resemble the translucent, wobbly texture typically associated with jello or gelatin blocks.\"\n    }\n  },\n  \"b6c9eef3a59a409ea789085a40dec434\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a LEGO piece, not a jello block or anything related to the requested class. Also, the image is extremely overexposed/too bright.\"\n    }\n  },\n  \"b6d23690eea8464f8a49b14dbb1e099e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rainbow-colored torus. While jello can be molded into this shape, the texture and overall appearance do not strongly resemble jello or gelatin. It looks more like a generic geometric shape with a color map applied, rather than a wobbly dessert.\"\n    }\n  },\n  \"b721ab19caab455ba33147060506214a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and lacks color and texture, making it impossible to identify the objects as jello blocks. Additionally, there are two distinct objects in the image, not one.\"\n    }\n  },\n  \"b95b52f5a73244059115dcfdd3fd3134\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object. It does not resemble a jello block or any related item.\"\n    }\n  },\n  \"b96976333b224bf58f82b4f20ed0c4f4\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a train locomotive, which is completely unrelated to the requested class 'jello_block'.\"\n    }\n  },\n  \"b9a941b9d1e94428b5e0cea89520b3db\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely washed out and too bright. The object is not visible or recognizable.\"\n    }\n  },\n  \"b9b481bd2f75450ab924bbffadb4e53c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a white block within a dark frame. This does not resemble a jello block, gelatin, or any related dessert item. It looks more like a light fixture or a block of styrofoam.\"\n    }\n  },\n  \"ba07b6e423ee48ffb652ef7019e84c8f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows concrete road barriers, not jello blocks or any related dessert items.\"\n    }\n  },\n  \"ba7cefc519e943ab8f10cad3786365ae\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a voxel landscape with trees and checkered structures, not a jello block or any related dessert item.\"\n    }\n  },\n  \"bb035ac458e8472a9bc4341819d4f441\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a pixelated block that resembles glass or ice more than a jello block. Its rigid, crystalline appearance is not characteristic of jello, making it unsuitable for learning jello-like physics.\"\n    }\n  },\n  \"bb8fe4619554437081ef74f3d931100e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, fragmented structure that does not resemble a jello block, jello cube, or any recognizable form of gelatin dessert. It is unsuitable for representing the 'jello_block' class.\"\n    }\n  },\n  \"bc8e0148487a4ccf9d8a48cc8a0b13cf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a sphere with a colorful pixelated texture, which does not resemble a jello block, jello cube, or any related gelatin dessert in shape or texture.\"\n    }\n  },\n  \"bcc59c4329ad4785bfc5b180f4ed0eb3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a flat, opaque, layered object (grey on top, white below), which does not resemble a jello block or any related dessert. Jello is typically translucent, often colorful, and has a distinct texture not present here.\"\n    }\n  },\n  \"bd4b9221074f4e45aa2ffb19a9153209\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, not a jello block or any of the related terms like gelatin dessert.\"\n    }\n  },\n  \"bd65000a73f144f68916be61551a7297\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple abstract block-like objects on a green surface, none of which resemble a jello block or gelatin dessert. The objects appear rigid and lack the characteristic translucency or texture of jello.\"\n    }\n  },\n  \"bd68fe08a4c14d3b8103b5dc8080e98b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything resembling jello. It looks like a poorly rendered fragment of rock or terrain.\"\n    }\n  },\n  \"bfa9c62efffb4d26a4144addce405f17\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of layered cake, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"bfdc0641523343dba5e793c30e02e411\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a butternut squash, which is not a jello block or any related item.\"\n    }\n  },\n  \"c079e5d9af0c41219cb6b1fe021eab5b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a sphere with a bumpy, dark, and non-translucent texture. It does not resemble a jello block, cube, or any typical gelatin dessert in shape, color, or texture.\"\n    }\n  },\n  \"c07fa13f34ff4ac8909881f95ee78491\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks color and texture, making it impossible to identify the object as belonging to the 'jello_block' class. The shape is abstract and doesn't resemble typical jello forms.\"\n    }\n  },\n  \"c08f28dcf9ff41f682342e5522f74e6b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It looks like a rigid, architectural structure, not a wobbly dessert.\"\n    }\n  },\n  \"c1531ba2b1af4300b83938b58ec68812\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows what appears to be a loaf of bread or cake, not a jello block or any related item like gelatin or jelly dessert.\"\n    }\n  },\n  \"c15e41a62b46487fa6dcc67af7f7acee\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks like a stylized watermelon cut into slices, not a jello block or gelatin dessert. The texture and appearance do not match the target class.\"\n    }\n  },\n  \"c1dbb267f8d34ca088ba2e14b4a0b28b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image appears to be a mousse, tartare, or some other type of dessert, not clearly identifiable as jello or gelatin. The texture does not match the typical smooth, often translucent appearance of jello.\"\n    }\n  },\n  \"c24138d0f2db40b79585bf44521d5445\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a very abstract geometric shape with flat, opaque colors and distinct edges/vertices. It lacks the characteristic translucency, texture, and slightly wobbly appearance expected of a jello block or gelatin dessert. It looks more like a simple, rigid 3D model than actual jello.\"\n    }\n  },\n  \"c244f7e2d44e49e096d0eec440fc90a6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of orange or citrus fruit, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"c25481b902ae47509b3b17160d1af486\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related terms. It looks more like a stylized jellyfish or a futuristic structure.\"\n    }\n  },\n  \"c2c6a2248b5241afa048a8449aaa9ba9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a strawberry, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"c3ac9517a4d54e11899fcac8c18fdd13\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts objects that look more like mushrooms or some kind of organic growth, not jello blocks or gelatin desserts. They lack the characteristic appearance (color, translucency, texture) of jello.\"\n    }\n  },\n  \"c402c1f106d54b6690a3b3b0eccce474\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks arranged in a structure, not a jello block or anything related to gelatin desserts.\"\n    }\n  },\n  \"c47bbf11407043b6938fa638a68c2851\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks color and detail, making it difficult to identify the object as a jello block. It appears as a generic white block against a white background.\"\n    }\n  },\n  \"c4859f2e5ac94fa1bcb259eb75f0962b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": true,\n      \"reason\": \"The image clearly depicts a single object recognizable as a jello mold or gelatin dessert, consistent with the 'jello_block' class. The quality is good, and the object's properties (shape, translucency suggesting wobble) make it suitable for physics simulation.\"\n    }\n  },\n  \"c4c071378ad242138b8614122c92cf17\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake (likely a bundt cake), not a jello block or gelatin dessert. The texture and appearance are inconsistent with the target class 'jello_block'.\"\n    }\n  },\n  \"c4ddda565be643bb9ea2864468f8a8eb\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cake roll, a mug, and a tray, not a jello block or related item.\"\n    }\n  },\n  \"c59744a732af4dec932a0f1448d7bb20\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake, not a jello block or any related gelatin dessert. It also contains multiple objects (cake, cup, cookies, plate).\"\n    }\n  },\n  \"c64db08f3eb047829eaea9268d9221b7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a dark, cosmic-looking sphere, which does not resemble a jello block, jello cube, or any form of gelatin dessert. The shape and texture are inconsistent with the target class.\"\n    }\n  },\n  \"c694eb3250ef49568d8e2d6c7aab0eb9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"c7eff8e045fa4014a95a24c76b3c1a7c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. The texture and appearance look more like a stone or concrete block, not a wobbly dessert.\"\n    }\n  },\n  \"c8f4687b064e4670aa15d0411e0e4caf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a skull, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"c96ec380d87b4eb6b55549cc17a0e395\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"cab649e84ff64113bbf3a3c02094b7cc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building (temple/pagoda), not a jello block or any related dessert item.\"\n    }\n  },\n  \"caf28a4c810741f6a171d8cfd655cc14\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a Lego brick, which is a hard plastic object, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"cb149914327e416f95e0f15016f028de\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block, jello cube, or any related dessert. It appears to be a sharp, elongated object, possibly a blade or shard, which is completely unrelated to the target class.\"\n    }\n  },\n  \"cb640cdc102c4a178e74b9b9ec77899a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts donuts, not jello blocks or any related items from the specified class list. Additionally, it shows multiple objects instead of a single object.\"\n    }\n  },\n  \"cbd8cf0857f2454fa221c28f2c4b50e5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cylindrical container or bottle with cartoon characters, not a jello block or any related dessert item.\"\n    }\n  },\n  \"cd227f4b788f4dbf92c9f5a08237b91d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a building or stall, not a jello block or any related dessert item.\"\n    }\n  },\n  \"cd294acd223d41589b456393a6c39bf7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything similar. It appears to be some kind of stand or abstract object, and the lighting is very poor, obscuring most details.\"\n    }\n  },\n  \"cd38ddcafe744606ae87117e7219c1bd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of cake or a similar dessert with frosting, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"cf602f9e36684456a266dfac518205f2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image quality is extremely poor. The object is almost invisible against the white background due to lack of contrast and color. It does not clearly depict a jello block.\"\n    }\n  },\n  \"cfcd4baf21944296bb93fc3c02d51dfe\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a raspberry tart, which is a pastry, not a jello block or related dessert.\"\n    }\n  },\n  \"d008478f173345abab6f5e339f907a8c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains a bowl of fruit (bananas, oranges, apples) on a tray, along with some bottles. It does not depict a jello block or any related item from the specified class.\"\n    }\n  },\n  \"d00a04598dd84db4a53afb288667cc9c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a ring-shaped object with a ribbed texture and iridescent colors, which does not resemble a jello block, jello cube, or any common form of gelatin dessert.\"\n    }\n  },\n  \"d06a5a553fe641ab92f720527b2278f3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or related object. It looks more like a stylized vortex or liquid effect, and it also contains multiple small floating objects.\"\n    }\n  },\n  \"d097b03821cc4b95a246e60c3f596228\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts wooden blocks, not jello blocks or anything related to gelatin desserts.\"\n    }\n  },\n  \"d0f6bdfb8bbe49dd8f79f6150b2d5db1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stylized object that looks more like a machine, container, or lantern, not a jello block or any related dessert item.\"\n    }\n  },\n  \"d121b1c57de7495f8c0b5affa9c80167\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or any related gelatin dessert. It looks more like a savory baked dish, possibly stuffed vegetables or pastry.\"\n    }\n  },\n  \"d170ef75c0624c20abe212ae72099dce\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a chocolate cake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"d1acf7b6339e4e22967468f37f131525\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed/too bright, making the object almost completely invisible and unrecognizable. It is of very low quality.\"\n    }\n  },\n  \"d1b442b228e6422f8877bab8f8a6bfec\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a cake (likely cheesecake or mousse) decorated with fruit on a plate, not a jello block or gelatin dessert as specified by the class.\"\n    }\n  },\n  \"d28009cc01944768912bc66b0b8c0753\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"d305e37f38b34ce7baa242f35ffe118f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts two red spheres connected by a stick, which looks more like cherries or a similar fruit, not a jello block or any related item from the class description.\"\n    }\n  },\n  \"d44e0a541f5f4ae5aa43acc35658bfcd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely bright, making the object barely visible against the white background. It lacks the typical color and translucency associated with jello, making it difficult to identify as a 'jello_block'. The quality is too low for training.\"\n    }\n  },\n  \"d486ed9d01b5487ab49ed4243e76353b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of pie or tart, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"d49676d1c37a4224a2a31842c56653ea\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything resembling the target class. It appears to be a very faint, white strip with perforations, possibly paper or tape, which is completely unrelated to jello or gelatin desserts.\"\n    }\n  },\n  \"d4f2f04eeebf48a5a05a14e91f09239f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it very difficult to discern the object's details, texture, or even its shape clearly. It does not resemble a jello block or any related term due to the poor image quality and lack of color/translucency typically associated with jello.\"\n    }\n  },\n  \"d5006697ad3c4bc1ac814110cde19af2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is heavily cropped and shown in grayscale, making it impossible to identify the object as a jello block. It lacks the characteristic color, translucency, and overall shape associated with the class.\"\n    }\n  },\n  \"d524306aec78407183b2ba47f880af13\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a rigid, opaque object with text/logo elements, not a jello block or anything resembling gelatin.\"\n    }\n  },\n  \"d5cdd32e969e42c8b9744b2d2f9e48a8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a fruit tart or pastry dessert, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"d61b6c74ee0645819fe2e9f2156a0206\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"d63f28d78a1c41449ff17169b9994465\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and washed out, making it difficult to discern the object's shape, texture, or material. It does not clearly resemble a jello block or any related dessert.\"\n    }\n  },\n  \"d64062d6b99c42dc88a2eace83854649\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a stool or small table, not a jello block or any related dessert item.\"\n    }\n  },\n  \"d679470ca45344829bd212fb56ea1f0b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object is a generic pink oval shape and does not clearly resemble a jello block or any typical form of gelatin dessert. It lacks the characteristic texture, translucency, or shape.\"\n    }\n  },\n  \"d7735a639fd441b3b3821a815796d2f7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a torus shape with a cereal texture, not a jello block or typical jelly dessert. It also contains an extraneous red line artifact.\"\n    }\n  },\n  \"d8310afcdcfb4b369f056c6ddb2b9bc7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of layered cake, not a jello block or gelatin dessert. While it might have jelly-like layers, the primary object depicted is cake.\"\n    }\n  },\n  \"d885043f755c414cb60cf87dd2cb34f2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a white cube with black markings, which does not resemble a jello block or any related item from the class list. It looks more like a calibration object or a test pattern.\"\n    }\n  },\n  \"d8e047265581465eaea940e25b0eaaa2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract, complex shape made of intersecting planes. It does not resemble a jello block, cube, mold, or any typical form of gelatin dessert.\"\n    }\n  },\n  \"d9262b63d7e042c0a455dc5d84cda1f9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"d93ac9460e8946ce9b33048e4954b0dd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, not a jello block or any related dessert item.\"\n    }\n  },\n  \"da8b5d21da9b4037982f29383d60b100\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden building blocks, not a jello block or anything related to gelatin or jelly desserts.\"\n    }\n  },\n  \"dab6b75ee9d44835b151ef0affa8e44f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a package of 'FRUTIPS', which appears to be a candy or fruit snack product, not a jello block, gelatin, or jelly dessert as required by the class description.\"\n    }\n  },\n  \"dd2e41aebba14ee3902e30ac4c99f07f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wooden stool or small table, not a jello block or any related dessert item. The texture and form are completely different from the target class.\"\n    }\n  },\n  \"dd4e986ffa0e4004942dd9b899c5ae2d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pyramid with a brick texture, not a jello block or any related dessert item.\"\n    }\n  },\n  \"de21240a43b64122bc31c21269f86eff\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and fragmented. It does not clearly depict a jello block or any recognizable object from the specified class list.\"\n    }\n  },\n  \"df757822af914eeb87d46e4d2d532549\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a cartoon character, not a jello block or any related dessert item.\"\n    }\n  },\n  \"dfe4208c83bb44eda50b4f2d73d4a36d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a block made of wood, not jello or gelatin. The texture and material are incorrect for the 'jello_block' class.\"\n    }\n  },\n  \"e047890326064bc9a259fd2263e2cd25\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pie, not a jello block or related object.\"\n    }\n  },\n  \"e05a65a4163b4f5eab6030e65d9d8de7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a character figure (possibly Pinkie Pie from My Little Pony), not a jello block or related dessert.\"\n    }\n  },\n  \"e08385238f4d4b59b012233a9fbdca21\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains many other objects besides the jello-like block (broken walls, debris). We need images depicting only the target object class cleanly.\"\n    }\n  },\n  \"e16595b007024a48a5ef9d48669cabf7\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a solid, opaque, multi-colored block. It lacks the characteristic translucency and texture associated with jello or gelatin, making it not clearly identifiable as belonging to the 'jello_block' class. It looks more like a generic geometric shape.\"\n    }\n  },\n  \"e2315d81af8f44f48b3fddb65764ba9f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple dessert items, not just a single jello block. Most items appear to be cakes or pastries, not clearly identifiable as jello or gelatin.\"\n    }\n  },\n  \"e27dafc4122a4ffc84d487532609c206\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a 3D model of a city block with buildings and trees, not a jello block or any related dessert.\"\n    }\n  },\n  \"e2f33ed05ca848aa8f09908af7f1dfd9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is a black and white line drawing of what appears to be a creature or character, not a jello block or related dessert. The style and lack of detail make it unsuitable for the target class and physics simulation training.\"\n    }\n  },\n  \"e324cfef06534c60955dc5f05bc447ce\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a wrapped chocolate egg (Cadbury Creme Egg), which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"e3455b13c1a14ca69962d5f5fa2f3efa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows wooden blocks, not jello blocks. The material and appearance are incorrect for the target class.\"\n    }\n  },\n  \"e36372ef24004266a0ecc52a3453c1d1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects (various types of blocks, rails, torches, etc.) and none of them clearly depict a jello block or anything resembling jello/gelatin.\"\n    }\n  },\n  \"e41d3d26c8e0414fbcca6efef468da5c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related terms like gelatin dessert. It appears to be a textured, possibly fabric-like object, perhaps a bag or abstract sculpture, which is not representative of the target class.\"\n    }\n  },\n  \"e468c1abff564a2981ef0974b0160f84\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an abstract humanoid figure, not a jello block or anything related to the requested class.\"\n    }\n  },\n  \"e526d118bf164b8aa8332399efa3743f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a jello block or gelatin dessert as required by the class description.\"\n    }\n  },\n  \"e67b3b6d86724d35b71b9b1c3fc5bfcf\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a jellyfish, which is an animal, not a 'jello_block' or related dessert item as specified by the class terms.\"\n    }\n  },\n  \"e6e2a5dd531e4dac8752cef4951600e1\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an amorphous blob that does not clearly resemble a jello block, cube, or typical jello mold shape. The tan section and pixelated detail further obscure the identity of the object.\"\n    }\n  },\n  \"e715ea408d664fe8b45c6ac530c89eaa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted in the image does not resemble a jello block, jello cube, gelatin dessert, or any related item. It appears to be an abstract, intertwined structure, not a food item.\"\n    }\n  },\n  \"e8e9c6dfa2c24317b72722bc510db133\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image contains multiple objects, and none of them clearly depict a 'jello_block' or 'gelatin block'. They appear to be other types of desserts or puddings, not fitting the target class description well.\"\n    }\n  },\n  \"e9a56b5d4f344d5699ddb629f4b94ef8\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object that looks more like a rock, bread, or brownie, not a jello block. Jello is typically translucent, smooth, and often colorful, none of which apply to this object.\"\n    }\n  },\n  \"e9d0b14e9348426598b62f0ee2cd1add\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a mounted deer head, not a jello block or anything related to the target class.\"\n    }\n  },\n  \"eaad34d0a1ab47b0a2a29c83d6fc22ba\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a slice of chocolate cake or cheesecake, not a jello block or gelatin dessert.\"\n    }\n  },\n  \"ec35e70e2cd2428098cf256d6c249b17\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related dessert. The texture appears rocky or scaly, which is inconsistent with the expected appearance and physical properties of jello.\"\n    }\n  },\n  \"ec42d5254b764a9d9aa079eaed2b1043\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image displays an abstract geometric shape composed of white blocks, which does not resemble a jello block, gelatin, or any related dessert item. It lacks the characteristic appearance (color, translucency, texture) of the target class.\"\n    }\n  },\n  \"ecaffb1e98664905b8617463dd4c2a1c\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item from the specified class list. It looks more like a mineral formation or a piece of rock/crystal.\"\n    }\n  },\n  \"ecdbc391a69a4ad48127a9d8d595f8fd\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a pumpkin, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"edc81ad052fc4dfe82a97dda3c977c5a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object's texture and opacity do not resemble a typical jello block. It looks more like a solid, opaque material (like clay or soap) rather than translucent, wobbly gelatin.\"\n    }\n  },\n  \"edeecbfc039248819bf67c7e55ce8bde\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an object made of solid, opaque blocks, which does not resemble the translucent and wobbly texture characteristic of jello or gelatin blocks. It looks more like toy blocks.\"\n    }\n  },\n  \"ee25671274534436826f92af7e0191ec\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or any related item. It shows multiple objects, and the central object is partially obscured and not identifiable as jello.\"\n    }\n  },\n  \"eeb9c7466ecd482da7e4d162d1e3b1b9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and lacks texture or color, making it impossible to identify as a jello block or determine its material properties. It doesn't clearly depict the object class.\"\n    }\n  },\n  \"eec268513a9940b689d2c78847b99f72\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too bright and the object is barely visible against the white background. It does not clearly depict a jello block or any related object.\"\n    }\n  },\n  \"f058995dd57c445a8e50030702a8dbc6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too dark, essentially a silhouette. It lacks any texture or detail, making it impossible to clearly identify the object as jello or assess its suitability for physics simulation.\"\n    }\n  },\n  \"f117cd1683c24be6bd1da4c16038c2c6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a statue of a lion, which is completely unrelated to the requested class 'jello_block' or its associated terms like gelatin or jelly dessert.\"\n    }\n  },\n  \"f206c24d6f364cad820c1c842e158568\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a chocolate cake, which is not a jello block or related item. It belongs to a different food category with distinct physical properties.\"\n    }\n  },\n  \"f295dd1a5b2a40bea76efbe8234eb0cc\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a beverage carton, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"f304013d13f243c89ae0ef5f0441c0c2\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image resembles an octopus or jellyfish, not a jello block or any related dessert item.\"\n    }\n  },\n  \"f3a737331ffb48788cf66dfc73b345e9\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows objects that resemble hollowed-out coconuts or wooden spheres, not jello blocks or any related gelatin dessert. The texture and form are inconsistent with the target class.\"\n    }\n  },\n  \"f40662e4f906480b9a204b6d034a8a03\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a box, likely containing a mix for chocolate sauce, not a jello block or gelatin dessert itself.\"\n    }\n  },\n  \"f49bb64049384b808416bbe48eb78f9a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a wooden chair, which does not belong to the 'jello_block' class.\"\n    }\n  },\n  \"f53db618068e466e857b27f7962fdcb3\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts objects that look like wheels or gears with bristles, not jello blocks or any related dessert items.\"\n    }\n  },\n  \"f57b2316afc84704a2b562a82c066a7f\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a block with a stone or brick texture, not a jello block. The material is completely different from jello/gelatin.\"\n    }\n  },\n  \"f5d26e0e352d4cee8c47a66c8945c02b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not clearly depict a jello block or any recognizable form of jello. It shows faint, scattered hexagonal shapes that are too abstract and indistinct to represent the target object class for physics simulation.\"\n    }\n  },\n  \"f66aba598a664f4797f3d0170ff33f81\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image does not depict a jello block or anything resembling gelatin or jelly dessert. It appears to be some kind of abstract, possibly Halloween-themed, object or creature.\"\n    }\n  },\n  \"f726fa6fe8244709a1f2f42e1463bbba\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object depicted is a cube with a grass texture, not a jello block. It does not resemble jello or gelatin.\"\n    }\n  },\n  \"f73bc6938c46400dbb2e29e55fc5010b\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making it impossible to clearly identify the object or assess its quality. It does not depict a recognizable jello block.\"\n    }\n  },\n  \"f77876d8297846eeb23c4ad82dbebb97\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is too zoomed in or abstract, making it impossible to identify the object as a jello block or any related item.\"\n    }\n  },\n  \"f78ea7447a774847bcec4dc101098906\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a bowl of strawberries, not a jello block or any related item.\"\n    }\n  },\n  \"f8008f8334074394a27b3881595f7fb5\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It appears to be an abstract, spiky white structure.\"\n    }\n  },\n  \"f973eab835954ca59fb5dab09e932a3e\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a candy apple, not a jello block or any related item from the specified class list.\"\n    }\n  },\n  \"f99f4768f5f1468abf6b32b5fa34d1da\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows two stylized, anthropomorphic radish-like figures, not a jello block or anything related to the requested class. Also, the image is too bright and lacks detail.\"\n    }\n  },\n  \"fa056cabe3444f7dbf4572237b5aaf99\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is extremely overexposed and washed out, making the object almost completely invisible and unrecognizable. The quality is too low for training.\"\n    }\n  },\n  \"fad3515143a94894b1205d77bb62c525\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows stacked blocks that appear to be made of stone or concrete, not jello or gelatin. The texture, color, and overall appearance do not match the 'jello_block' class.\"\n    }\n  },\n  \"fba68d736aad44b292fcbe430b34a806\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image shows a chocolate cake or lava cake with toppings, not a jello block or gelatin dessert. It does not belong to the requested class.\"\n    }\n  },\n  \"fbcaa2e44d784de5b8f971ee130741b6\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a tomato being sliced on a cutting board with a knife, not a jello block or any related item.\"\n    }\n  },\n  \"fe5937ad04294355a0a7adc19882c0fe\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It looks more like a stylized candy trophy or a lollipop-like structure.\"\n    }\n  },\n  \"fec646eb0ca843e6a7e9d8c301993cfa\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image is completely white and does not depict any object, let alone a jello block.\"\n    }\n  },\n  \"fec937f72d0d45fea441ca0a50532d2a\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The object in the image does not resemble a jello block or any related item. It appears to be a solid, opaque block, possibly made of stone or wood, which is inconsistent with the translucent and wobbly nature of jello.\"\n    }\n  },\n  \"ff4da10009204a63836625bbf93f8a06\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts an aerial view of a house and landscape, not a jello block or any related item.\"\n    }\n  },\n  \"ffd73e3de9754cc695dafd8a382cd01d\": {\n    \"obj_class\": \"jello_block\",\n    \"vlm_filtering\": {\n      \"is_appropriate\": false,\n      \"reason\": \"The image depicts a slice of layered dessert, which looks more like a cake or mousse slice rather than a jello block. Jello typically has a more translucent and wobbly appearance, which is not represented here.\"\n    }\n  }\n}"
  },
  {
    "path": "config/output_rendering/default.yaml",
    "content": "render:\n  - nerf\n  - gs\n  - blender_glb\n  - blender_gs\n\nnerf_render:\n  split: test\n  rendered_output_names: rgb\n\nblender_render_glb:\n  features:\n    - part_label\n    - material_id\n    - E\n    - density\n    - nu\n  cmaps:\n    - turbo\n    - turbo\n    - turbo\n    - turbo\n    - turbo\n  rotate_video: true\n  focal_length: null\n  views: 25 ## how many views to render for 360 degree rotation\n  default_fps: 30\n  camera_id: 4\n\nblender_render_gs:\n  init_xyz: [0.0, 0.0, 0.0]  # Initial XYZ translation\n  xyz_rotation: [0.0, 0.0, 0.0]  # XYZ rotation in degrees\n  place_on_ground: true  # Whether to automatically place object on ground\n  focal_length_ratio: null  # Ratio to scale focal length\n  bg_color: null  # Background color (RGB or RGBA)\n  transparent: false  # Enable transparent background\n  resolution_x: null  # Render resolution X\n  resolution_y: null  # Render resolution Y\n  cycles_samples: 16 # Number of Cycles render samples\n  num_renders: null  # Number of renders to do\n  start_frame: 0  # Start frame to render\n  is_dropping: false  # Whether to drop object on ground\n  save_blend: false  # Save blend file for each frame\n  rotate_around: 30 # Degrees of orbit per frame (if null, uses 360/total_frames)\n  camera_id: 4\n  default_fps: 30"
  },
  {
    "path": "config/paths/default.yaml",
    "content": "# Base paths\n# null -> use current directory\n# project_root: null ## for current directory like config\nbase_path: null ## for everything else. On the cluster, we store data and model on a different mnt\n\n\n# Data directories\ndata_dir: \"${paths.base_path}/data\"\n\n# Output directories\noutputs_dir: \"${paths.base_path}/models\" ## storing gs and f3rm\nrender_outputs_dir: \"${paths.base_path}/render_outputs\" ## storing voxelize grids\nphysgaussian_output_dir: \"${paths.base_path}/mpm_sim_outputs\" ## storing mp4 simulation results\nnormalization_stats_dir: \"${paths.base_path}/normalization_stats\" ## storing dataset statistics and normalization ranges\n\n# Training checkpoint directories\ndiscrete_checkpoint_dir: \"${paths.base_path}/checkpoints_discrete\" ## storing discrete segmentation model checkpoints\ncontinuous_checkpoint_dir: \"${paths.base_path}/checkpoints_continuous_mse\" ## storing continuous regression model checkpoints\n\n# Third-party directories\nthird_party_dir: \"third_party\"\nphysgaussian_dir: \"${paths.third_party_dir}/PhysGaussian\"\ngaussian_splatting_dir: \"${paths.physgaussian_dir}/gaussian-splatting\"\nwavelet_generation_dir: \"${paths.third_party_dir}/Wavelet-Generation\"\n\n# neural network inference\ninference_results_dir: null\n\n# VLM labeling directories\nvlm_base_path: \"${paths.base_path}/vlm_results\"\nvlm_seg_mat_sample_results_dir: \"${paths.vlm_base_path}/vlm_seg_mat_sample_results\"\nvlm_seg_results_dir: \"${paths.vlm_base_path}/vlm_seg_results\"\nvlm_seg_critic_results_dir: \"${paths.vlm_base_path}/vlm_seg_critic_results\"\n\n# Object metadata mapping\n# Path to a JSON file that contains object metadata including class information\n# Format: {\"obj_id\": {\"obj_class\": \"class_name\", \"vlm_filtering\": {...}}, ...}\nobj_metadata_path: \"config/obj_ids_metadata.json\"  # Default metadata file\n\n# Physics Configuration directories\nphysgaussian_config_dir: \"config\"\n\n# Data curation paths\ndata_curation_dir: \"${paths.base_path}/data_curation\"\ncategory_dict_path: \"${paths.data_curation_dir}/cat_dict.json\"  # Path to category dictionary file\nfinal_dataset_path: \"${paths.data_curation_dir}/new_final_dataset.pkl\"  # Output file for final dataset\nrender_outputs_base_dir: \"${paths.base_path}/class_render_outputs\"  # Base directory for rendered outputs\nvlm_filtering_results_dir: \"${paths.base_path}/vlm_data_filtering_results\"  # VLM filtering results\n\n# Blender paths\n# Set to null for system blender or specific path for custom installation\nblender_path: \"blender\"\n\nblender_nerf_addon_path: \"/home/vlongle/code/pixie/BlenderNeRF-main-custom.zip\"\nblender_gs_addon_path: \"/home/vlongle/code/pixie/blender-addon.zip\"\n\nblender_output_dir: \"${paths.base_path}/blender_outputs\"\n\n# Blender scene file for rendering\nblend_file_path: \"pixie/blender/empty_scene.blend\"\n\n\n"
  },
  {
    "path": "config/physics/default.yaml",
    "content": "# Physics simulation parameters\nrender_img: true\ncompile_video: true\ndebug: false\nwhite_bg: true  # Default, can be overridden based on material mode and obj_class\nsave_ply: true ## if true, create ply_files folder and save ply files for each frame\n\n# Sample selection\nsample_id: 0  # Which sample to use for physics simulation (0, 1, 2, etc.)\n\n# Object classes that don't use white background\nno_white_bg_classes: [\"snow_and_mud\"] "
  },
  {
    "path": "config/segmentation/default.yaml",
    "content": "# VLM segmentation parameters\nvlm:\n  use_spatial_smoothing: false\n  overwrite: true\n  \n  # VLM labeling configuration\n  labeling:\n    enabled: true # Enable VLM labeling pipeline\n    overwrite: false  # Overwrite existing VLM labeling results\n    \n    # VLM segmentation step\n    seg:\n      num_alternative_queries: 5  # Number of alternative queries to generate\n      input_num_views: 15  # Number of views to use for segmentation\n      \n    # VLM critic step\n    critic:\n      input_num_views: 10  # Number of views of the original object to show the critic`\n      \n    # VLM physics sampler step\n    phys_sampler:\n      num_sample_mat: 1 # Number of material samples to generate from the plausible range\n\n    # VLM API and model configuration\n    api:\n      gemini_api_key: null  # Set to API key or leave null to use .env file\n      claude_api_key: null  # Set to API key or leave null to use .env file\n      gpt_api_key: null  # Set to API key or leave null to use .env file\n    \n    # VLM model configuration\n    models:\n      data_filtering: \"gemini-2.5-pro-preview-03-25\"  # Model for data filtering\n      segmentation: \"gemini-2.0-flash\"  # Model for segmentation\n      seg_critic: \"gemini-2.5-pro-preview-03-25\"  # Model for segmentation critic\n      phys_sampler: \"gemini-1.5-flash-latest\"  # Model for physics sampler\n      phys_judge: \"gemini-2.0-flash\"  # Model for physics judging\n      parse_critic: \"gemini-2.0-flash\"  # Model for parse critic\n    \n# Neural segmentation parameters\nneural:\n  result_id: null\n  feature_type: \"clip\"\n  cache_results: false\n\n# Material dictionary\nmaterial_dict_path: null  # Optional: Path to material dictionary JSON file "
  },
  {
    "path": "config/training/default.yaml",
    "content": "\n# Shared configuration parameters (consistent across normalization, training, inference)\nenforce_mask_consistency: true\nbackground_id: 7        # Material ID for background voxels\ndefault_grid_size: 64   # Expected voxel grid size\nin_material_channels: 4    # Number of material property channels (density, E, nu, material_id)\n# Feature configuration - change this to switch between feature types\nfeature_type: \"clip\"  # Options: \"clip\", \"rgb\", \"occupancy\"\n\ntarget_obj_classes: null\nto_normalize: true\nnum_cont_channels: 3        # density, log‑E, ν\nnum_material_classes: 8     # K in one‑hot\nsample_id: 0\n# data_material_channels: 11 # e.g., 8 + 3, transformed in_material_channels\n# to data_material_channels\n\n## to be automatically set by `inspect_ranges.py`\ndensity_min: null\ndensity_max: null\nE_min: null\nE_max: null\nnu_min: null\nnu_max: null\n\n# Feature-specific configurations\nfeatures:\n  clip:\n    feature_channels: 768\n    cond_dim: 32\n  rgb:\n    feature_channels: 3\n    cond_dim: 32\n  occupancy:\n    feature_channels: 1\n    cond_dim: 32\n\n# Automatically set values based on feature_type using Hydra interpolation\nfeature_channels: ${training.features.${training.feature_type}.feature_channels}\ncond_dim: ${training.features.${training.feature_type}.cond_dim}\n\n\n\nnormalization:\n  # Configuration for range computation\n  reservoir_cap: 2000000  # Maximum samples to keep for percentile computation\n  clip_feature_channels: 768\n\n\ntraining:\n  # my_config.yaml\n  debug_base_folder: \"../debug\"\n\n\n  interval: 1\n  first_k: null\n  mix_precision: true\n\n  batch_size: 4\n  lr: 1e-4\n  lr_decay: true\n  lr_decay_feq: 500\n  lr_decay_rate: 0.998\n  data_worker: 4\n  beta1: 0.9\n  beta2: 0.999\n  optimizer_name: \"Adam\"       # store by name, we'll reconstruct later\n\n  # network\n  resolution: 256\n  padding_mode: \"zero\"\n  wavelet_type: \"bior6.8\"\n  use_dense_conv: true\n  use_gradient_clip: false\n  gradient_clip_value: 1.0\n  use_instance_norm: true\n  use_instance_affine: true\n  use_layer_norm: false\n  use_layer_affine: false\n  train_with_gt_coeff: true\n\n  # diffusion setting\n  diffusion_step: 1000\n  diffusion_model_var_type: \"FIXED_SMALL\"\n  diffusion_learn_sigma: false\n  diffusion_sampler: \"uniform\"\n  diffusion_model_mean_type: \"EPSILON\"\n  diffusion_rescale_timestep: false\n  diffusion_loss_type: \"MSE\"\n  diffusion_beta_schedule: \"linear\"\n  diffusion_scale_ratio: 1.0\n  unet_model_channels: 64\n  unet_num_res_blocks: 3\n  unet_channel_mult: [1, 1, 2, 4]\n  unet_channel_mult_low: [1, 2, 2, 2]\n  unet_activation: null\n  attention_resolutions: []\n\n  # resume\n  starting_epoch: 0\n  training_epochs: 300\n  special_symbol: \"\"\n  network_resume_path: null\n  optimizer_resume_path: null\n  discriminator_resume_path: null\n  discriminator_opt_resume_path: null\n  exp_idx: 0\n\n  seed: 69\n  train_size: 0.9\n  # other stuff\n  # 0‑6 objects, 7 = background\n\n  ## evaluation tracking \n  step_factor: 10 ## for diffusing de-sampling\n  use_ddim: true\n  evaluation_interval: 10\n  saving_intervals: 10\n\n  # loss weights\n  lambda_cont: 1.0\n  lambda_cat:  2.0            # start here; tune if needed\n\n  ## data specific stuff\n\n  # ----- scaling -------------------------------------------------\n  # IMPORTANT: Normalization ranges are dynamically loaded from saved statistics.\n  # You MUST run: python third_party/Wavelet-Generation/data_utils/inspect_ranges.py\n  # to compute actual ranges from your dataset before training.\n  # \n  # The ranges will be loaded from: {normalization_stats_dir}/normalization_ranges.yaml\n  # No hard-coded fallback values are provided to ensure data-driven normalization.\n\n  # wandb / checkpoint resume\n  resume_checkpoint: null\n  resume_dir: null\n  wandb_api_key: null  # Set your wandb API key here or use WANDB_API_KEY environment variable\n  wandb_run_id: null\n\n\n\ninference:\n  # inference parameters\n  CONT_EPOCH: -1  # -1 for latest checkpoint, or specific epoch number\n  SEG_EPOCH: -1   # -1 for latest checkpoint, or specific epoch number\n  steps_factor: 10  # Factor for faster inference\n  use_ddim: true   # Use DDIM sampler for inference\n  batch_size: 4\n  data_worker: 4\n  use_saved_test_split: false\n"
  },
  {
    "path": "config/training_3d/default.yaml",
    "content": "# NeRF training parameters\nnerf:\n  method: \"f3rm\"\n  max_iterations: 5_000\n  disable_scene_contraction: true\n  save_only_latest_checkpoint: false\n  quit_on_completion: true\n\n# Gaussian Splatting training parameters\ngaussian_splatting:\n  max_iterations: 10_000  # Direct specification of GS training iterations "
  },
  {
    "path": "config/voxelization/default.yaml",
    "content": "# Voxel grid parameters\ngrid_size: 64\nvoxel_size: null  # Auto-calculated as 1.0 / grid_size\ngray_threshold: 0.05\n\n# Scene bounds for voxelization (in world coordinates)\n# These bounds define the 3D volume where voxels will be generated\nscene_bounds:\n  x_bound: [-0.5, 0.5]  # [min_x, max_x]\n  y_bound: [-0.5, 0.5]  # [min_y, max_y]\n  z_bound: [-0.5, 0.5]  # [min_z, max_z]\n\n# Processing parameters (optional overrides)\nbatch_size: 4096  # Number of voxels to process at once\nalpha_weighted: true  # Whether to weight features by alpha (density)\nalpha_threshold_for_mask: 0.01  # Threshold for occupancy mask generation "
  },
  {
    "path": "data_curation/cat_dict.json",
    "content": "{\n    \"tree\": [\n        \"tree\",\n        \"ficus\",\n        \"fern\",\n        \"oak tree\",\n        \"pine tree\",\n        \"evergreen\",\n        \"palm tree\",\n        \"maple tree\",\n        \"bonsai tree\"\n    ],\n    \"flowers\": [\n        \"flower\",\n        \"bouquet\",\n        \"rose\",\n        \"tulip\",\n        \"daisy\",\n        \"lily\",\n        \"sunflower\",\n        \"orchid\",\n        \"flower arrangement\",\n        \"flowering plant\",\n        \"garden flowers\",\n        \"wildflowers\",\n        \"floral\"\n    ],\n    \"bread\": [\n        \"bread\",\n        \"loaf\",\n        \"baguette\",\n        \"bagel\",\n        \"croissant\",\n        \"roll\",\n        \"sourdough\",\n        \"toast\",\n        \"pastry\",\n        \"wheat bread\",\n        \"rye bread\",\n        \"french bread\",\n        \"bread slice\"\n    ],\n    \"water-like_bodies\": [\n        \"lake\",\n        \"pond\",\n        \"ocean\",\n        \"pool\",\n        \"puddle\",\n        \"river\",\n        \"stream\",\n        \"waterfall\",\n        \"fountain\",\n        \"water surface\",\n        \"liquid water\",\n        \"water body\"\n    ],\n    \"pillows\": [\n        \"pillow\",\n        \"cushion\",\n        \"throw pillow\",\n        \"sofa cushion\",\n        \"bed pillow\",\n        \"neck pillow\",\n        \"decorative pillow\",\n        \"floor cushion\",\n        \"bolster\"\n    ],\n    \"rubber_ducks_and_toys\": [\n        \"rubber duck\",\n        \"bath toy\",\n        \"rubber toy\",\n        \"toy duck\",\n        \"squeaky toy\",\n        \"floating toy\",\n        \"plastic duck\",\n        \"children's bath toy\",\n        \"yellow duck toy\",\n        \"rubber animal toy\"\n    ],\n    \"soda_cans\": [\n        \"soda can\",\n        \"aluminum can\",\n        \"beverage can\",\n        \"cola can\",\n        \"soft drink can\",\n        \"metal can\",\n        \"canned drink\",\n        \"pop can\",\n        \"fizzy drink can\"\n    ],\n    \"sport_balls\": [\n        \"basketball\",\n        \"soccer ball\",\n        \"football\",\n        \"tennis ball\",\n        \"baseball\",\n        \"volleyball\",\n        \"golf ball\",\n        \"rugby ball\",\n        \"ping pong ball\",\n        \"cricket ball\",\n        \"bowling ball\",\n        \"beach ball\",\n        \"sports ball\"\n    ],\n    \"jello_block\": [\n        \"jello\",\n        \"gelatin\",\n        \"jello cube\",\n        \"jello block\",\n        \"jelly dessert\",\n        \"gelatin block\",\n        \"wobbly dessert\",\n        \"jello mold\",\n        \"colorful jello\"\n    ],\n    \"sand\": [\n        \"sand\",\n        \"beach sand\",\n        \"desert sand\",\n        \"sandy terrain\",\n        \"sand pile\",\n        \"sand dune\",\n        \"sandpit\",\n        \"sand box\",\n        \"sand texture\",\n        \"grainy sand\"\n    ],\n    \"shrubs\": [\n        \"shrub\",\n        \"bush\",\n        \"hedge\",\n        \"ornamental bush\",\n        \"garden shrub\",\n        \"boxwood\",\n        \"flowering bush\",\n        \"evergreen shrub\",\n        \"decorative plant\",\n        \"landscaping shrub\"\n    ],\n    \"rocks\": [\n        \"rock\",\n        \"stone\",\n        \"boulder\",\n        \"pebble\",\n        \"granite\",\n        \"slate\",\n        \"fieldstone\",\n        \"natural stone\",\n        \"rock formation\",\n        \"rubble\",\n        \"geological formation\"\n    ],\n    \"metal_crates\": [\n        \"metal crate\",\n        \"steel box\",\n        \"metal container\",\n        \"shipping crate\",\n        \"metal storage box\",\n        \"industrial container\",\n        \"metal chest\",\n        \"storage crate\",\n        \"metallic box\"\n    ],\n    \"barrels\": [\n        \"barrel\",\n        \"wooden barrel\",\n        \"metal barrel\",\n        \"oil drum\",\n        \"wine barrel\",\n        \"storage barrel\",\n        \"keg\",\n        \"cask\",\n        \"cylindrical container\",\n        \"drum container\"\n    ],\n    \"plastic_bottles\": [\n        \"plastic bottle\",\n        \"water bottle\",\n        \"soda bottle\",\n        \"beverage bottle\",\n        \"empty bottle\",\n        \"plastic container\",\n        \"drink bottle\",\n        \"PET bottle\",\n        \"recyclable bottle\"\n    ],\n    \"statues\": [\n        \"statue\",\n        \"sculpture\",\n        \"monument\",\n        \"figurine\",\n        \"bust\",\n        \"stone figure\",\n        \"bronze statue\",\n        \"marble sculpture\",\n        \"decorative statue\",\n        \"human figure statue\",\n        \"animal statue\",\n        \"garden statue\"\n    ],\n    \"couches\": [\n        \"couch\",\n        \"sofa\",\n        \"loveseat\",\n        \"sectional sofa\",\n        \"chesterfield\",\n        \"settee\",\n        \"divan\",\n        \"living room couch\",\n        \"upholstered sofa\",\n        \"furniture couch\"\n    ],\n    \"chairs\": [\n        \"chair\",\n        \"armchair\",\n        \"office chair\",\n        \"dining chair\",\n        \"rocking chair\",\n        \"stool\",\n        \"folding chair\",\n        \"desk chair\",\n        \"lounge chair\",\n        \"ergonomic chair\",\n        \"accent chair\"\n    ],\n    \"grass\": [\n        \"grass\",\n        \"lawn\",\n        \"turf\",\n        \"grassland\",\n        \"meadow\",\n        \"grassy field\",\n        \"green grass\",\n        \"grass patch\",\n        \"tall grass\",\n        \"wild grass\",\n        \"pasture\"\n    ],\n    \"cars\": [\n        \"car\",\n        \"automobile\",\n        \"vehicle\",\n        \"sedan\",\n        \"hatchback\",\n        \"SUV\",\n        \"sports car\",\n        \"coupe\",\n        \"convertible\",\n        \"passenger car\",\n        \"motor vehicle\"\n    ],\n    \"lamps\": [\n        \"lamp\",\n        \"desk lamp\",\n        \"table lamp\",\n        \"floor lamp\",\n        \"reading lamp\",\n        \"bedside lamp\",\n        \"standing lamp\",\n        \"task lamp\",\n        \"decorative lamp\",\n        \"light fixture\",\n        \"lighting\"\n    ],\n    \"fruit\": [\n        \"fruit\",\n        \"apple\",\n        \"orange\",\n        \"banana\",\n        \"pear\",\n        \"grape\",\n        \"melon\",\n        \"watermelon\",\n        \"cantaloupe\",\n        \"honeydew\",\n        \"strawberry\",\n        \"blueberry\",\n        \"raspberry\",\n        \"blackberry\",\n        \"lemon\",\n        \"lime\",\n        \"kiwi\",\n        \"mango\",\n        \"pineapple\",\n        \"peach\",\n        \"plum\",\n        \"nectarine\",\n        \"apricot\",\n        \"cherry\",\n        \"grapefruit\",\n        \"tangerine\",\n        \"clementine\",\n        \"pomegranate\",\n        \"dragon fruit\",\n        \"fig\",\n        \"avocado\",\n        \"papaya\",\n        \"coconut\",\n        \"guava\",\n        \"passion fruit\",\n        \"persimmon\",\n        \"fruit bowl\",\n        \"fruit basket\",\n        \"citrus\",\n        \"berries\",\n        \"tropical fruit\",\n        \"fresh fruit\"\n    ],\n    \"snow_and_mud\": [\n        \"snow\",\n        \"mud\",\n        \"snowy ground\",\n        \"muddy ground\",\n        \"wet mud\",\n        \"fresh snow\",\n        \"packed snow\",\n        \"snowy terrain\",\n        \"muddy terrain\",\n        \"snow patch\",\n        \"mud puddle\",\n        \"snowdrift\",\n        \"muddy path\",\n        \"snowy surface\",\n        \"muddy surface\",\n        \"slush\",\n        \"wet snow\",\n        \"dirty snow\",\n        \"muddy water\",\n        \"snowy landscape\"\n    ]\n}"
  },
  {
    "path": "data_curation/download_objaverse.py",
    "content": "import multiprocessing\nimport objaverse\nimport subprocess\nimport glob\nimport pickle\nimport os\nimport hydra\nfrom omegaconf import DictConfig\nimport logging\nfrom pixie.utils import resolve_paths, load_pickle, set_logger\n\n\n@hydra.main(version_base=None, config_path=\"../config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Download Objaverse objects by category using Hydra configuration.\"\"\"\n    \n    # Set up logging\n    set_logger()\n    \n    # Resolve paths and system-specific settings\n    cfg = resolve_paths(cfg)\n    \n    # Set the number of processes for downloading\n    processes = cfg.data_curation.download.processes\n    if processes is None:\n        processes = multiprocessing.cpu_count()\n    \n    # Get download configuration\n    download_cfg = cfg.data_curation.download\n    \n    final_dataset = load_pickle(cfg.paths.final_dataset_path)\n    \n    logging.info(\"Available categories: %s\", list(final_dataset.keys()))\n    \n    # Determine which categories to download\n    categories_to_download = list(final_dataset.keys())\n    if download_cfg.obj_class:\n        assert download_cfg.obj_class in final_dataset, \\\n            f\"Category '{download_cfg.obj_class}' not found in dataset. Available categories: {list(final_dataset.keys())}\"\n        categories_to_download = [download_cfg.obj_class]\n    \n    # For each category you want to download\n    for category in categories_to_download:\n        logging.info(\"Processing category: %s\", category)\n        \n        # Get UIDs for this category\n        category_uids = final_dataset.get(category, [])\n        \n        if not category_uids:\n            logging.warning(\"No objects found for category: %s\", category)\n            continue\n        \n        # Limit the number of UIDs if needed\n        max_objs = download_cfg.max_objs_per_class\n        if max_objs is not None:\n            category_uids = category_uids[:max_objs]\n            logging.info(f\"Limiting {category} to {max_objs} objects (from {len(final_dataset[category])} total)\")\n        \n        logging.info(f\"Downloading {len(category_uids)} objects for category {category}\")\n        \n        # Download the limited set of objects\n        objects = objaverse.load_objects(\n            uids=category_uids,\n            download_processes=min(processes, len(category_uids)),\n        )\n        \n        logging.info(\"Downloaded %d objects for category %s\", len(category_uids), category)\n        \n\nif __name__ == \"__main__\":\n    main()\n\n\n\n"
  },
  {
    "path": "data_curation/manual_data_filtering_correction.py",
    "content": "import streamlit as st\nimport json\nimport os\nimport glob\nimport math\nfrom PIL import Image\nimport io\nimport hydra\nfrom omegaconf import DictConfig\nimport logging\nfrom pixie.utils import resolve_paths, load_json, save_json, set_logger\n\n# Configuration constants\nCOLUMNS_PER_ROW = 12  # Keep the original number of columns\n\n# Set page configuration for wider layout\nst.set_page_config(layout=\"wide\")\n\n# Custom CSS to make checkboxes smaller and images larger\nst.markdown(\"\"\"\n<style>\n    /* Make checkboxes more compact */\n    .stCheckbox {\n        padding: 0 !important;\n        margin: 0 !important;\n        min-height: 20px !important;\n    }\n    /* Remove extra padding around checkbox */\n    .stCheckbox > label {\n        padding: 0 !important;\n    }\n    /* Make checkbox text smaller */\n    .stCheckbox > label > p {\n        font-size: 0.7rem !important;\n    }\n    /* Add some spacing between images */\n    .image-grid {\n        margin: 2px;\n        border: 1px solid #eee;\n        padding: 2px;\n    }\n    /* Force container to expand to full width */\n    .main .block-container {\n        max-width: 100% !important;\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n    /* Ensure images expand properly */\n    .stImage > img {\n        width: 100% !important;\n        object-fit: contain !important;\n    }\n    /* Make columns have less padding */\n    .row-widget > div {\n        padding: 0 !important;\n    }\n</style>\n\"\"\", unsafe_allow_html=True)\n\n\ndef find_image_path(obj_id, render_base_dir, save_folder):\n    \"\"\"\n    Given an object ID like \"flowers/1d419eb4c9d34fc1a7f1e88d6ea8d55a/\",\n    return a .png path if found in render directory.\n    \"\"\"\n    # 1) Direct guess: \"class_render_outputs/flowers/1d419e.../000.png\"\n    expected_path = os.path.join(render_base_dir, save_folder, obj_id, \"000.png\")\n    if os.path.exists(expected_path):\n        return expected_path\n    \n    # 2) Try the first PNG in that folder\n    obj_dir = os.path.join(render_base_dir, save_folder, obj_id)\n    if os.path.exists(obj_dir):\n        png_files = glob.glob(f\"{obj_dir}/*.png\")\n        if png_files:\n            return png_files[0]\n    \n    # 3) Fallback: walk the entire directory\n    for root, dirs, files in os.walk(os.path.join(render_base_dir, save_folder)):\n        for file in files:\n            if file.endswith(\".png\") and obj_id.replace(\"/\", os.sep) in root:\n                return os.path.join(root, file)\n\n    return None\n\ndef display_image_grid(items, flip_label, flip_prefix, render_base_dir, save_folder):\n    \"\"\"\n    Display a grid of images with checkboxes in a more efficient layout\n    \"\"\"\n    # Calculate how many rows we need based on the number of items\n    n_rows = math.ceil(len(items) / COLUMNS_PER_ROW)\n    \n    for row_idx in range(n_rows):\n        # Create a row with the specified number of columns\n        cols = st.columns(COLUMNS_PER_ROW, gap=\"small\")\n        \n        # Get items for this row\n        start_idx = row_idx * COLUMNS_PER_ROW\n        end_idx = min(start_idx + COLUMNS_PER_ROW, len(items))\n        row_items = items[start_idx:end_idx]\n        \n        # Display each item in its column\n        for col_idx, (obj_id, data) in enumerate(row_items):\n            if col_idx < len(cols):  # Make sure we have a column for this item\n                with cols[col_idx]:\n                    img_path = find_image_path(obj_id, render_base_dir, save_folder)\n                    if img_path:\n                        # Get a truncated ID for display\n                        short_id = obj_id.split('/')[-2][:8] if '/' in obj_id else obj_id[:8]\n                        \n                        # Display the image and make it take up more space\n                        st.markdown(f'<div class=\"image-grid\">', unsafe_allow_html=True)\n                        \n                        # Create a unique key for this image's expander\n                        expander_key = f\"expander_{obj_id}\"\n                        \n                        # Display the image\n                        st.image(img_path, use_container_width=True)\n                        \n                        # Add an expander for details\n                        with st.expander(\"Details\", expanded=False):\n                            # Show object ID in a copyable code block\n                            st.markdown(\"**Full Object ID:**\")\n                            st.code(obj_id, language=\"text\")\n                            \n                            st.markdown(\"**Image Path:**\")\n                            st.code(img_path, language=\"text\")\n                            \n                            if \"reason\" in data:\n                                st.markdown(f\"**VLM Reason:** {data['reason']}\")\n                            if \"error\" in data:\n                                st.markdown(f\"**Error:** {data['error']}\")\n                        \n                        # Display a compact checkbox below the image\n                        flip_key = f\"{flip_prefix}_{obj_id}\"\n                        col1, col2 = st.columns([1, 5])\n                        with col1:\n                            st.checkbox(\n                                \"\",\n                                key=flip_key,\n                                value=False,\n                                label_visibility=\"collapsed\"\n                            )\n                        with col2:\n                            st.caption(short_id)  # Show truncated ID instead\n                        st.markdown('</div>', unsafe_allow_html=True)\n                    else:\n                        st.error(f\"Image not found for {obj_id}\")\n\n@hydra.main(version_base=None, config_path=\"../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    # Set up logging\n    set_logger()\n    \n    # Resolve paths\n    cfg = resolve_paths(cfg)\n    \n    # Get configuration\n    correction_cfg = cfg.data_curation.manual_correction\n    assert correction_cfg.obj_class, \"obj_class must be specified for manual correction\"\n    \n    # Set up paths\n    json_path = os.path.join(cfg.paths.vlm_filtering_results_dir, \n                            correction_cfg.obj_class, \n                            correction_cfg.input_file)\n    new_json_path = os.path.join(cfg.paths.vlm_filtering_results_dir, \n                                correction_cfg.obj_class, \n                                correction_cfg.output_file)\n    \n    st.title(\"Image Filtering\")\n\n    if not os.path.exists(json_path):\n        st.error(f\"JSON file not found at {json_path}\")\n        return\n\n    # Load the JSON:  { \"obj_id\": {\"is_appropriate\": bool, ...}, ... }\n    filtered_results = load_json(json_path)\n\n    # Separate into inappropriate vs. appropriate\n    inappropriate_items = [\n        (obj_id, data) for obj_id, data in filtered_results.items() \n        if data.get(\"is_appropriate\") == False\n    ]\n    appropriate_items = [\n        (obj_id, data) for obj_id, data in filtered_results.items() \n        if data.get(\"is_appropriate\") == True\n    ]\n\n    # Stats at the top\n    col1, col2, col3 = st.columns(3)\n    with col1:\n        st.metric(\"Total Images\", len(filtered_results))\n    with col2:\n        st.metric(\"Discarded Images\", len(inappropriate_items))\n    with col3:\n        st.metric(\"Chosen Images\", len(appropriate_items))\n\n    st.markdown(\"\"\"\n        <div style=\"background-color:#f0f2f6; padding:10px; border-radius:5px; margin-bottom:10px\">\n        <h3 style=\"margin-top:0\">Instructions</h3>\n        <ul>\n          <li><b>Click \"Details\"</b> below any image to see its full details and object ID</li>\n          <li><b>Click the code block</b> to copy the object ID</li>\n          <li><b>Check the box</b> below any image you want to flip to the other category</li>\n          <li>All changes will be applied when you click <b>\"Save Changes\"</b> at the bottom</li>\n        </ul>\n        </div>\n    \"\"\", unsafe_allow_html=True)\n\n    # We'll use a single form so there's only one \"Save Changes\" button\n    with st.form(\"flip_form\"):\n        # Images are now displayed directly in the form instead of in tabs\n        # This ensures all images are visible at once and maximizes horizontal space\n        \n        # Discarded Images Section\n        st.subheader(f\"Discarded Images ({len(inappropriate_items)})\")\n        st.markdown(\"<p style='color:gray; margin-top:-10px'>Check boxes to flip to 'Chosen'</p>\", unsafe_allow_html=True)\n        \n        display_image_grid(\n            inappropriate_items, \n            \"\", # Empty label as we're using collapsed visibility\n            \"flip_to_appropriate\",\n            cfg.paths.render_outputs_base_dir,\n            correction_cfg.obj_class,\n        )\n        \n        st.markdown(\"<hr>\", unsafe_allow_html=True)\n        \n        # Chosen Images Section\n        st.subheader(f\"Chosen Images ({len(appropriate_items)})\")\n        st.markdown(\"<p style='color:gray; margin-top:-10px'>Check boxes to flip to 'Discarded'</p>\", unsafe_allow_html=True)\n        \n        display_image_grid(\n            appropriate_items, \n            \"\", # Empty label as we're using collapsed visibility\n            \"flip_to_inappropriate\",\n            cfg.paths.render_outputs_base_dir,\n            correction_cfg.obj_class,\n        )\n\n        # ------------------\n        # Save Changes Button\n        # ------------------\n        col1, col2, col3 = st.columns([1, 2, 1])\n        with col2:\n            submitted = st.form_submit_button(\"Save Changes\", use_container_width=True)\n        \n        if submitted:\n            changes_made = 0\n            \n            # 1) For each item in the \"inappropriate\" list:\n            for obj_id, data in inappropriate_items:\n                flip_key = f\"flip_to_appropriate_{obj_id}\"\n                if st.session_state.get(flip_key, False):\n                    filtered_results[obj_id][\"is_appropriate\"] = True\n                    changes_made += 1\n\n            # 2) For each item in the \"appropriate\" list:\n            for obj_id, data in appropriate_items:\n                flip_key = f\"flip_to_inappropriate_{obj_id}\"\n                if st.session_state.get(flip_key, False):\n                    filtered_results[obj_id][\"is_appropriate\"] = False\n                    changes_made += 1\n\n            print(\"changes_made\", changes_made)\n            # Only save if changes were made\n            if changes_made > 0:\n                save_json(filtered_results, new_json_path)\n                st.success(f\"Changes saved to JSON! ({changes_made} images flipped)\")\n            else:\n                st.info(\"No changes were made.\")\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "data_curation/manual_sim_validation.py",
    "content": "import streamlit as st\nimport os\nimport math\nimport random\nimport hydra\nfrom omegaconf import DictConfig\nfrom pixie.utils import resolve_paths, load_json, save_json, set_logger\n\n# Set page configuration for wider layout\nst.set_page_config(layout=\"wide\")\n\n# Custom CSS\nst.markdown(\"\"\"\n<style>\n    .stCheckbox { padding: 0 !important; margin: 0 !important; min-height: 20px !important; }\n    .stCheckbox > label { padding: 0 !important; }\n    .stCheckbox > label > p { font-size: 0.7rem !important; }\n    .video-grid { margin: 2px; border: 1px solid #eee; padding: 2px; }\n    .main .block-container { max-width: 100% !important; padding-left: 1rem !important; padding-right: 1rem !important; }\n    .stVideo > video { width: 100% !important; }\n    .row-widget > div { padding: 0 !important; }\n</style>\n\"\"\", unsafe_allow_html=True)\n\ndef find_video_path(obj_id, save_folder, sample_id, grid_size):\n    \"\"\"\n    Find the simulation video for a given object ID.\n    Expected path: render_outputs/{obj_id}/sample_{sample_id}/gs_sim_gridsize_{grid_size}_output/output.mp4\n    \"\"\"\n    expected_path = os.path.join(\n        save_folder,\n        obj_id, \n        f\"sample_{sample_id}\",\n                f\"gs_sim_gridsize_{grid_size}_output\", \n        \"output.mp4\"\n    )\n    if os.path.exists(expected_path):\n        return expected_path\n    return None\n\ndef display_video_grid(items, flip_label, flip_prefix, columns_per_row, save_folder, sample_id, grid_size):\n    \"\"\"\n    Display a grid of videos with checkboxes\n    \"\"\"\n    n_rows = math.ceil(len(items) / columns_per_row)\n    \n    for row_idx in range(n_rows):\n        cols = st.columns(columns_per_row, gap=\"small\")\n        start_idx = row_idx * columns_per_row\n        end_idx = min(start_idx + columns_per_row, len(items))\n        row_items = items[start_idx:end_idx]\n        \n        for col_idx, (obj_id, data, _) in enumerate(row_items):\n            if col_idx < len(cols):\n                with cols[col_idx]:\n                    video_path = find_video_path(obj_id, save_folder, sample_id, grid_size)\n                    \n                    st.markdown(f'<div class=\"video-grid\">', unsafe_allow_html=True)\n                    \n                    if video_path:\n                        st.video(video_path, autoplay=True, muted=True, loop=True)\n                        st.caption(f\"ID: {obj_id[:8]}...\")\n                        \n                        # Checkbox to flip status\n                        flip_key = f\"{flip_prefix}_{obj_id}\"\n                        st.checkbox(flip_label, key=flip_key)\n                        \n                        with st.expander(\"Details\"):\n                            st.code(obj_id, language=\"text\")\n                            st.text(f\"Path: {video_path}\")\n                    else:\n                        st.warning(f\"Video not found for {obj_id[:8]}...\")\n                        st.caption(f\"ID: {obj_id}\")\n                    \n                    st.markdown('</div>', unsafe_allow_html=True)\n\n@hydra.main(version_base=None, config_path=\"../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    set_logger()\n    cfg = resolve_paths(cfg)\n\n    validation_cfg = cfg.data_curation.manual_sim_validation\n    assert validation_cfg.obj_class, \"obj_class must be specified for manual simulation validation\"\n    assert validation_cfg.num_samples >= -1, \"num_samples must be -1 or a non-negative integer\"\n\n    obj_class = validation_cfg.obj_class\n    num_samples = validation_cfg.num_samples\n    save_folder = validation_cfg.render_outputs_dir or cfg.paths.render_outputs_dir\n    sample_id = validation_cfg.sample_id\n    grid_size = validation_cfg.grid_size\n    columns_per_row = validation_cfg.columns_per_row\n    json_path = os.path.join(\n        cfg.paths.vlm_filtering_results_dir,\n        obj_class,\n        validation_cfg.input_file,\n    )\n    new_json_path = os.path.join(\n        cfg.paths.vlm_filtering_results_dir,\n        obj_class,\n        validation_cfg.output_file,\n    )\n\n    st.title(f\"Simulation Quality Validation: {obj_class}\")\n\n    if not os.path.exists(json_path):\n        st.error(f\"JSON file not found at {json_path}\")\n        return\n\n    # Load data\n    # Structure: { \"obj_id\": {\"is_appropriate\": bool, ...}, ... }\n    all_data = load_json(json_path)\n    \n    # We only care about objects that were previously marked as appropriate\n    # AND have a generated video.\n    \n    valid_items = []\n    missing_video_items = []\n    \n    for tag, data in all_data.items():\n        if not data.get(\"is_appropriate\"):\n            continue\n            \n        obj_id = tag.split(\"/\")[-1]\n        video_path = find_video_path(obj_id, save_folder, sample_id, grid_size)\n        if video_path:\n            # Check if we already have a validation status for this object\n            # If not, default to True (appropriate)\n            if \"is_simulation_valid\" not in data:\n                data[\"is_simulation_valid\"] = True\n            valid_items.append((obj_id, data, tag))\n        else:\n            missing_video_items.append(obj_id)\n\n    if num_samples != -1:\n        assert num_samples >= 0, \"--num_samples must be -1 or non-negative\"\n        if num_samples < len(valid_items):\n            valid_items = random.sample(valid_items, num_samples)\n\n    # Separate into valid vs invalid simulations based on current status\n    good_sims = [(oid, d, t) for oid, d, t in valid_items if d.get(\"is_simulation_valid\", True)]\n    bad_sims = [(oid, d, t) for oid, d, t in valid_items if not d.get(\"is_simulation_valid\", True)]\n\n    # Stats\n    col1, col2, col3, col4 = st.columns(4)\n    with col1: st.metric(\"Total Candidates\", len(valid_items))\n    with col2: st.metric(\"Good Simulations\", len(good_sims))\n    with col3: st.metric(\"Bad Simulations\", len(bad_sims))\n    with col4: st.metric(\"Missing Videos\", len(missing_video_items))\n\n    with st.form(\"validation_form\"):\n        st.subheader(f\"Valid Simulations ({len(good_sims)})\")\n        st.markdown(\"Check box to mark as **INVALID** (bad physics, artifacts, etc.)\")\n        display_video_grid(\n            good_sims,\n            \"Mark as Invalid\",\n            \"flip_to_invalid\",\n            columns_per_row,\n            save_folder,\n            sample_id,\n            grid_size,\n        )\n        \n        st.markdown(\"---\")\n        \n        st.subheader(f\"Invalid Simulations ({len(bad_sims)})\")\n        st.markdown(\"Check box to mark as **VALID** (restore to dataset)\")\n        display_video_grid(\n            bad_sims,\n            \"Mark as Valid\",\n            \"flip_to_valid\",\n            columns_per_row,\n            save_folder,\n            sample_id,\n            grid_size,\n        )\n        \n        st.markdown(\"---\")\n        submitted = st.form_submit_button(\"Save Validation Results\", use_container_width=True)\n        \n        if submitted:\n            changes = 0\n            \n            # Process flips from Good -> Bad\n            for obj_id, data, tag in good_sims:\n                key = f\"flip_to_invalid_{obj_id}\"\n                if st.session_state.get(key, False):\n                    all_data[tag][\"is_simulation_valid\"] = False\n                    changes += 1\n            \n            # Process flips from Bad -> Good\n            for obj_id, data, tag in bad_sims:\n                key = f\"flip_to_valid_{obj_id}\"\n                if st.session_state.get(key, False):\n                    all_data[tag][\"is_simulation_valid\"] = True\n                    changes += 1\n            \n            if changes > 0:\n                save_json(all_data, new_json_path)\n                st.success(f\"Saved {changes} changes to {new_json_path}\")\n                # Also update the original file to persist state? \n                # Uncomment if you want to overwrite the input file\n                # save_json(all_data, json_path)\n            else:\n                st.info(\"No changes made.\")\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_curation/objaverse_selection.py",
    "content": "import objaverse\nfrom sentence_transformers import SentenceTransformer, util\nimport torch\nimport pickle \nimport json\nimport hydra\nfrom omegaconf import DictConfig\nfrom collections import defaultdict\nimport logging\nfrom pixie.utils import save_pickle, load_json, resolve_paths\n\n\n@hydra.main(version_base=None, config_path=\"../config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Main function to run objaverse object selection and categorization.\"\"\"\n    \n    # Set up logging\n    set_logger()\n    \n    # Resolve paths and system-specific settings\n    cfg = resolve_paths(cfg)\n    \n    uid = objaverse.load_uids()\n    logging.info(\"Loading Objaverse annotations...\")\n    annotations = objaverse.load_annotations(uid)\n\n    # Load category dictionary from paths config\n    category_dict_path = cfg.paths.category_dict_path\n    category_dict = load_json(category_dict_path)\n\n    logging.info(\"Initializing sentence transformer model...\")\n    # Initialize model with config parameters (always use cuda when available)\n    model = SentenceTransformer(cfg.data_curation.objaverse_selection.model.name, device=\"cuda\")\n\n    # Get object IDs and their names\n    all_obj_ids = list(annotations.keys())\n    all_obj_names = [annotations[obj_id].get(\"name\", \"\") for obj_id in all_obj_ids]\n\n    logging.info(\"Encoding object descriptions...\")\n    # Encode all object descriptions using config batch size\n    obj_embeddings = model.encode(\n        all_obj_names,\n        batch_size=cfg.data_curation.objaverse_selection.batch_size,   \n        convert_to_tensor=True, \n        show_progress_bar=True   \n    )\n\n    # Dictionary: object_id -> (category, similarity_score)\n    assignment = {}\n\n    top_k = cfg.data_curation.objaverse_selection.top_k\n\n    for cat_key, cat_list in category_dict.items():\n        # 1. Create the query text by combining subcategories\n        cat_query = \" \".join(cat_list)\n        cat_embedding = model.encode(cat_query, convert_to_tensor=True)\n        \n        # 2. Similarities for all objects (shape: [N_objects])\n        similarities = util.cos_sim(cat_embedding, obj_embeddings)[0]\n        \n        # 3. Get the top-k indices and their similarity values\n        topk = torch.topk(similarities, k=top_k)\n        topk_indices = topk.indices\n        topk_values  = topk.values\n        \n        # 4. For each top-k object, see if it should be assigned (or reassigned)\n        for i, obj_idx in enumerate(topk_indices):\n            obj_id = all_obj_ids[obj_idx]\n            sim_score = topk_values[i].item()\n            \n            # Check if this object hasn't been assigned yet OR \n            # if this category has a higher similarity than the previous assignment\n            if (obj_id not in assignment) or (sim_score > assignment[obj_id][1]):\n                assignment[obj_id] = (cat_key, sim_score)\n\n    # Build final_dataset = { category: [object_ids...] }\n    final_dataset = defaultdict(list)\n    for obj_id, (cat_key, sim_score) in assignment.items():\n        final_dataset[cat_key].append(obj_id)\n\n    final_dataset = dict(final_dataset)\n\n    # Save final dataset using paths config output path\n    output_path = cfg.paths.final_dataset_path\n    save_pickle(final_dataset, output_path)\n    \n    logging.info(f\"Final dataset saved to: {output_path}\")\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_curation/render_blender.py",
    "content": "import argparse, sys, os, math, re\nimport bpy\nfrom mathutils import Vector, Matrix\nimport mathutils\nimport numpy as np\nimport json \nimport random \nimport glob\nimport objaverse \n\nparser = argparse.ArgumentParser(description='Renders given obj file by rotation a camera around it.')\nparser.add_argument(\n    '--views', type=int, default=24,\n    help='number of views to be rendered')\nparser.add_argument(\n    '--obj', type=str,\n    help='Path to the obj file to be rendered.')\nparser.add_argument(\n    '--obj_id', type=str,\n    help='Objaverse object ID to render (alternative to --obj)')\nparser.add_argument(\n    '--output', type=str, default=None,\n    help='The path the output will be dumped to.')\nparser.add_argument(\n    '--format', type=str, default='PNG',\n    help='Format of files generated. Either PNG or OPEN_EXR')\n\nparser.add_argument(\n    '--input_model', type=str, default='glb',\n    help='glb is the format for objaverse, but we can use [obj,ply,glb]')\nparser.add_argument(\n    '--outf_name', type=str, default=None,\n    help='folder to put things in')\n\nparser.add_argument(\n    '--depth', action=\"store_true\",\n    help='save_depth')\n\nparser.add_argument(\n    '--normal', action=\"store_true\",\n    help='save_normal')\n\n\nparser.add_argument(\n    '--use_model_identifier', action='store_true',\n    help='add the name of the folder to the end of the thing.')\n\nparser.add_argument(\n    '--add_floor', action='store_true',\n    help='add_plain_floor')\n\nparser.add_argument(\n    '--assets_hdri',\n    default = None,\n    help = \"Path to a set of hdr to select randomly for illumination.\"\n    )\n\n\nparser.add_argument(\n    '--resolution', type=int, default=256,\n    help='Resolution of the images.')\nparser.add_argument(\n    '--engine', type=str, default='CYCLES',\n    help='Blender internal engine for rendering. E.g. CYCLES, BLENDER_EEVEE, ...')\n\nargv = sys.argv[sys.argv.index(\"--\") + 1:]\nargs = parser.parse_args(argv)\n\n# Handle obj_id if provided\nif args.obj_id is not None:\n    if args.obj is not None:\n        raise ValueError(\"Cannot specify both --obj and --obj_id\")\n    print(f\"Loading object from Objaverse with ID: {args.obj_id}\")\n    objects = objaverse.load_objects(uids=[args.obj_id])\n    if not objects or args.obj_id not in objects:\n        raise ValueError(f\"Could not find object with ID: {args.obj_id}\")\n    args.obj = objects[args.obj_id]\n    print(f\"Found object path: {args.obj}\")\n\n# Set up rendering\ncontext = bpy.context\nscene = bpy.context.scene\nrender = bpy.context.scene.render\n\n# bpy.ops.object.delete()\n# bpy.ops.objects['Light'].delete()\n# bpy.data.objects['Light'].select_set(True)\n# bpy.ops.object.delete()\n\nrender.engine = args.engine\nrender.image_settings.color_mode = 'RGBA'  # ('RGB', 'RGBA', ...)\nrender.image_settings.file_format = args.format  # ('PNG', 'OPEN_EXR', 'JPEG, ...)\nrender.resolution_x = args.resolution\nrender.resolution_y = args.resolution\nrender.resolution_percentage = 100\nbpy.context.scene.cycles.filter_width = 0.01\n# bpy.context.scene.render.film_transparent = True\n\nbpy.context.scene.cycles.device = 'GPU'\nbpy.context.scene.cycles.diffuse_bounces = 1\nbpy.context.scene.cycles.glossy_bounces = 1\nbpy.context.scene.cycles.transparent_max_bounces = 3\nbpy.context.scene.cycles.transmission_bounces = 3\nbpy.context.scene.cycles.samples = 64\nbpy.context.scene.cycles.use_denoising = True\n\nscene.world.use_nodes = True\nscene.view_settings.view_transform = 'Standard'\nscene.view_settings.look = 'None'\n\n\ndef enable_cuda_devices():\n    prefs = bpy.context.preferences\n    cprefs = prefs.addons['cycles'].preferences\n    cprefs.get_devices()\n\n    # Attempt to set GPU device types if available\n    for compute_device_type in ('CUDA', 'OPENCL', 'NONE'):\n        try:\n            cprefs.compute_device_type = compute_device_type\n            print(\"Compute device selected: {0}\".format(compute_device_type))\n            break\n        except TypeError:\n            pass\n\n    # Any CUDA/OPENCL devices?\n    acceleratedTypes = ['CUDA', 'OPENCL']\n    accelerated = any(device.type in acceleratedTypes for device in cprefs.devices)\n    print('Accelerated render = {0}'.format(accelerated))\n\n    # If we have CUDA/OPENCL devices, enable only them, otherwise enable\n    # all devices (assumed to be CPU)\n    print(cprefs.devices)\n    for device in cprefs.devices:\n        device.use = not accelerated or device.type in acceleratedTypes\n        print('Device enabled ({type}) = {enabled}'.format(type=device.type, enabled=device.use))\n\n    return accelerated\n\n\nenable_cuda_devices()\ncontext.active_object.select_set(True)\nbpy.ops.object.delete()\n\nbpy.data.objects['Light'].select_set(True)\nbpy.ops.object.delete()\n\n\n# Import textured mesh\nbpy.ops.object.select_all(action='DESELECT')\n\n\ndef bounds(obj, local=False):\n    local_coords = obj.bound_box[:]\n    om = obj.matrix_world\n\n    if not local:\n        worldify = lambda p: om @ Vector(p[:])\n        coords = [worldify(p).to_tuple() for p in local_coords]\n    else:\n        coords = [p[:] for p in local_coords]\n\n    rotated = zip(*coords[::-1])\n\n    push_axis = []\n    for (axis, _list) in zip('xyz', rotated):\n        info = lambda: None\n        info.max = max(_list)\n        info.min = min(_list)\n        info.distance = info.max - info.min\n        push_axis.append(info)\n\n    import collections\n\n    originals = dict(zip(['x', 'y', 'z'], push_axis))\n\n    o_details = collections.namedtuple('object_details', 'x y z')\n    return o_details(**originals)\n\n# function from https://github.com/panmari/stanford-shapenet-renderer/blob/master/render_blender.py\ndef get_3x4_RT_matrix_from_blender(cam):\n    # bcam stands for blender camera\n    # R_bcam2cv = Matrix(\n    #     ((1, 0,  0),\n    #     (0, 1, 0),\n    #     (0, 0, 1)))\n\n    # Transpose since the rotation is object rotation, \n    # and we want coordinate rotation\n    # R_world2bcam = cam.rotation_euler.to_matrix().transposed()\n    # T_world2bcam = -1*R_world2bcam @ location\n    #\n    # Use matrix_world instead to account for all constraints\n    location, rotation = cam.matrix_world.decompose()[0:2]\n    R_world2bcam = rotation.to_matrix().transposed()\n\n    # Convert camera location to translation vector used in coordinate changes\n    # T_world2bcam = -1*R_world2bcam @ cam.location\n    # Use location from matrix_world to account for constraints:     \n    T_world2bcam = -1*R_world2bcam @ location\n\n    # # Build the coordinate transform matrix from world to computer vision camera\n    # R_world2cv = R_bcam2cv@R_world2bcam\n    # T_world2cv = R_bcam2cv@T_world2bcam\n\n    # put into 3x4 matrix\n    RT = Matrix((\n        R_world2bcam[0][:] + (T_world2bcam[0],),\n        R_world2bcam[1][:] + (T_world2bcam[1],),\n        R_world2bcam[2][:] + (T_world2bcam[2],)\n        ))\n    return RT\n\n# imported_object = bpy.ops.import_scene.obj(filepath=args.obj, use_edges=False, use_smooth_groups=False, split_mode='OFF')\nif args.input_model == \"glb\":\n    imported_object = bpy.ops.import_scene.gltf(filepath=args.obj)\nelif args.input_model == \"ply\":\n    imported_object = bpy.ops.import_mesh.ply(filepath=args.obj)\n    obj_object = bpy.context.selected_objects[0]\n    print('Imported name:', obj_object.name)\n    bpy.data.objects[obj_object.name].select_set(True)\n    bpy.ops.paint.vertex_paint_toggle()\n\n    #bpy.context.area.ui_type = 'ShaderNodeTree'\n\n    #bpy.ops.material.new()\n\n    mat = bpy.data.materials.get(\"Material\")\n\n    if len(bpy.context.active_object.data.materials) == 0:\n        bpy.context.active_object.data.materials.append(bpy.data.materials['Material'])\n    else:\n        bpy.context.active_object.data.materials[0] = bpy.data.materials['Material']\n    if mat:\n        mat.node_tree.nodes.new(\"ShaderNodeVertexColor\")\n        mat.node_tree.links.new(mat.node_tree.nodes[2].outputs['Color'], mat.node_tree.nodes[1].inputs['Base Color'])\n\n\nelse:\n    bpy.ops.import_scene.obj(filepath=args.obj, use_edges=False, use_smooth_groups=False, split_mode='OFF',axis_up='Z')\n\n# for this_obj in bpy.data.objects:\n#     if this_obj.type == \"MESH\":\n#         this_obj.select_set(True)\n#         bpy.context.view_layer.objects.active = this_obj\n#         bpy.ops.object.mode_set(mode='EDIT')\n#         bpy.ops.mesh.split_normals()\n\nbpy.ops.object.mode_set(mode='OBJECT')\nprint(len(bpy.context.selected_objects))\nobj = bpy.context.selected_objects[0]\ncontext.view_layer.objects.active = obj\n\n# taken from https://devtalk.blender.org/t/calculating-center-point-of-all-mesh-in-scene/18095\ndef calcBoundingBox(mesh_objs):\n    cornerApointsX = []\n    cornerApointsY = []\n    cornerApointsZ = []\n    cornerBpointsX = []\n    cornerBpointsY = []\n    cornerBpointsZ = []\n    \n    for ob in mesh_objs:\n        ob.select_set(True)\n        bpy.context.view_layer.objects.active = ob\n        bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)\n        bbox_corners = [ob.matrix_world @ Vector(corner)  for corner in ob.bound_box]\n        cornerApointsX.append(bbox_corners[0].x)\n        cornerApointsY.append(bbox_corners[0].y)\n        cornerApointsZ.append(bbox_corners[0].z)\n        cornerBpointsX.append(bbox_corners[6].x)\n        cornerBpointsY.append(bbox_corners[6].y)\n        cornerBpointsZ.append(bbox_corners[6].z)\n        \n    minA = Vector((min(cornerApointsX), min(cornerApointsY), min(cornerApointsZ)))\n    maxB = Vector((max(cornerBpointsX), max(cornerBpointsY), max(cornerBpointsZ)))\n\n    center_point = Vector(((minA.x + maxB.x)/2, (minA.y + maxB.y)/2, (minA.z + maxB.z)/2))\n    dimensions =  Vector((maxB.x - minA.x, maxB.y - minA.y, maxB.z - minA.z))\n    \n    return center_point, dimensions\n\nmesh_objs = [obj for obj in bpy.data.objects if obj.type == 'MESH'] \ncenter_point, dimensions = calcBoundingBox(mesh_objs)\nprint(center_point,dimensions)\n\n\nfor obj in bpy.data.objects:\n    if obj.type == 'MESH':\n        while obj.parent is not None:\n            obj = obj.parent\n            print(obj)\n        bpy.context.view_layer.objects.active = obj\n        bpy.ops.object.location_clear(clear_delta=False)\n        scale = 1/max(dimensions)*0.5\n        setattr(obj, 'scale', [scale,scale,scale])\n        setattr(obj, 'location', obj.location-(center_point*scale))\n\n        # just need to find that one parent object (coming from the mesh)\n        break\n\n# print(dimensions)\n# raise()\nif args.add_floor:\n    ob = bpy.ops.mesh.primitive_plane_add(size=2, \n        enter_editmode=False, \n        align='WORLD', \n        location=(0, 0, -scale * dimensions[2]/2 + 0.001), \n        scale=(1, 1, 1)\n    )\n    bpy.context.view_layer.update()\n# scaling_value = random.uniform(1, 3)\n# bpy.context.object.scale = (scaling_value,scaling_value,1)\n\n# HDR LIGHT\nif not args.assets_hdri is None:\n    world = bpy.data.worlds['World']\n    world.use_nodes = True\n    bg = world.node_tree.nodes['Background']\n\n    node_environment = world.node_tree.nodes.new('ShaderNodeTexEnvironment')\n    # Load and assign the image to the node property\n    skyboxes = glob.glob(f'{args.assets_hdri}/*.hdr')\n    skybox_random_selection = skyboxes[random.randint(0,len(skyboxes)-1)]\n\n    node_environment.image = bpy.data.images.load(skybox_random_selection) # Relative path\n    # node_environment.location = -300,0\n\n    world.node_tree.links.new(node_environment.outputs[\"Color\"], bg.inputs[\"Color\"])\n\nelse:\n\n# bg.inputs[0].default_value[:3] = (1, 1, 1)\n# bg.inputs[1].default_value = 1.0\n\n    # # add a light above the object \n    bpy.ops.object.light_add(type='AREA')\n    light2 = bpy.data.lights['Area']\n\n    light2.energy = 30000\n    bpy.data.objects['Area'].location[1] = -1\n    bpy.data.objects['Area'].scale[0] = 100\n    bpy.data.objects['Area'].scale[1] = 100\n    bpy.data.objects['Area'].scale[2] = 100\n\n\nworld = bpy.data.worlds['World']\nworld.use_nodes = True\nbg_node = world.node_tree.nodes['Background']\nbg_node.inputs[0].default_value = (1.0, 1.0, 1.0, 1.0)  # Pure white\nbg_node.inputs[1].default_value = 1.0  # Full strength\n\n\n# Place camera\n\ncam = scene.objects['Camera']\ncam.location = (0, 1.2, 0)  # radius equals to 1\ncam.data.lens = 35\ncam.data.sensor_width = 32\n\ncam_constraint = cam.constraints.new(type='TRACK_TO')\ncam_constraint.track_axis = 'TRACK_NEGATIVE_Z'\ncam_constraint.up_axis = 'UP_Y'\n\ncam_empty = bpy.data.objects.new(\"Empty\", None)\ncam_empty.location = (0, 0, 0)\ncam.parent = cam_empty\n\nscene.collection.objects.link(cam_empty)\ncontext.view_layer.objects.active = cam_empty\ncam_constraint.target = cam_empty\n\n\n\n# Function taken from https://github.com/zhenpeiyang/HM3D-ABO/blob/master/my_blender.py\ndef get_3x4_RT_matrix_from_blender(cam):\n    # bcam stands for blender camera\n    # R_bcam2cv = Matrix(\n    #     ((1, 0,  0),\n    #     (0, 1, 0),\n    #     (0, 0, 1)))\n\n    # Transpose since the rotation is object rotation, \n    # and we want coordinate rotation\n    # R_world2bcam = cam.rotation_euler.to_matrix().transposed()\n    # T_world2bcam = -1*R_world2bcam @ location\n    #\n    # Use matrix_world instead to account for all constraints\n    location, rotation = cam.matrix_world.decompose()[0:2]\n    R_world2bcam = rotation.to_matrix().transposed()\n\n    # Convert camera location to translation vector used in coordinate changes\n    # T_world2bcam = -1*R_world2bcam @ cam.location\n    # Use location from matrix_world to account for constraints:     \n    T_world2bcam = -1*R_world2bcam @ location\n\n    # # Build the coordinate transform matrix from world to computer vision camera\n    # R_world2cv = R_bcam2cv@R_world2bcam\n    # T_world2cv = R_bcam2cv@T_world2bcam\n\n    # put into 3x4 matrix\n    RT = mathutils.Matrix((\n        R_world2bcam[0][:] + (T_world2bcam[0],),\n        R_world2bcam[1][:] + (T_world2bcam[1],),\n        R_world2bcam[2][:] + (T_world2bcam[2],)\n        ))\n    return RT\n\n# Function taken from https://github.com/zhenpeiyang/HM3D-ABO/blob/master/my_blender.py\ndef get_calibration_matrix_K_from_blender(camd):\n    f_in_mm = camd.lens\n    scene = bpy.context.scene\n    resolution_x_in_px = scene.render.resolution_x\n    resolution_y_in_px = scene.render.resolution_y\n    scale = scene.render.resolution_percentage / 100\n    sensor_width_in_mm = camd.sensor_width\n    sensor_height_in_mm = camd.sensor_height\n    pixel_aspect_ratio = scene.render.pixel_aspect_x / scene.render.pixel_aspect_y\n    if (camd.sensor_fit == 'VERTICAL'):\n        # the sensor height is fixed (sensor fit is horizontal), \n        # the sensor width is effectively changed with the pixel aspect ratio\n        s_u = resolution_x_in_px * scale / sensor_width_in_mm / pixel_aspect_ratio \n        s_v = resolution_y_in_px * scale / sensor_height_in_mm\n    else: # 'HORIZONTAL' and 'AUTO'\n        # the sensor width is fixed (sensor fit is horizontal), \n        # the sensor height is effectively changed with the pixel aspect ratio\n        pixel_aspect_ratio = scene.render.pixel_aspect_x / scene.render.pixel_aspect_y\n        s_u = resolution_x_in_px * scale / sensor_width_in_mm\n        s_v = resolution_y_in_px * scale * pixel_aspect_ratio / sensor_height_in_mm\n\n    # Parameters of intrinsic calibration matrix K\n    alpha_u = f_in_mm * s_u\n    alpha_v = f_in_mm * s_v\n    u_0 = resolution_x_in_px * scale / 2\n    v_0 = resolution_y_in_px * scale / 2\n    skew = 0 # only use rectangular pixels\n\n    K = mathutils.Matrix(\n        ((alpha_u, skew,    u_0),\n        (    0  , alpha_v, v_0),\n        (    0  , 0,        1 )))\n    return K\n\n# function taken from https://blender.stackexchange.com/questions/5210/pointing-the-camera-in-a-particular-direction-programmatically\ndef look_at(obj, target, roll=0):\n    \"\"\"\n    Rotate obj to look at target\n\n    :arg obj: the object to be rotated. Usually the camera\n    :arg target: the location (3-tuple or Vector) to be looked at\n    :arg roll: The angle of rotation about the axis from obj to target in radians. \n\n    Based on: https://blender.stackexchange.com/a/5220/12947 (ideasman42)      \n    \"\"\"\n    if not isinstance(target, mathutils.Vector):\n        target = mathutils.Vector(target)\n    loc = obj.location\n    # direction points from the object to the target\n    direction = target - loc\n    tracker, rotator = (('-Z', 'Y'),'Z') if obj.type=='CAMERA' else (('X', 'Z'),'Y') #because new cameras points down(-Z), usually meshes point (-Y)\n    quat = direction.to_track_quat(*tracker)\n    \n    # /usr/share/blender/scripts/addons/add_advanced_objects_menu/arrange_on_curve.py\n    quat = quat.to_matrix().to_4x4()\n    rollMatrix = mathutils.Matrix.Rotation(roll, 4, rotator)\n\n    # remember the current location, since assigning to obj.matrix_world changes it\n    loc = loc.to_tuple()\n    #obj.matrix_world = quat * rollMatrix\n    # in blender 2.8 and above @ is used to multiply matrices\n    # using * still works but results in unexpected behaviour!\n    obj.matrix_world = quat @ rollMatrix\n    obj.location = loc\n\n\ndef sphere_renders(\n        nb_planes,\n        nb_circle,\n        elevation_range = [0,180],\n        tetha_range = [0,360]\n    ):\n\n    positions_to_render = []\n    for i_plane in range(nb_planes):\n        elevation = np.deg2rad(  elevation_range[0] + \\\n                                ((i_plane+1) * (elevation_range[1]-elevation_range[0])/(nb_planes+1)))\n        for i_circle in range(nb_circle):\n            azimuth = np.deg2rad(tetha_range[0]+((i_circle+1) * (tetha_range[1]-tetha_range[0])/(nb_circle+1)))\n            eye_position = [\n                np.sin(elevation)*np.cos(azimuth),\n                np.sin(elevation)*np.sin(azimuth),\n                np.cos(elevation),\n            ]\n            positions_to_render.append(eye_position)\n    return positions_to_render\n\n\ndef random_sample_sphere(\n        elevation_range = [0,180],\n        tetha_range = [0,360],\n        nb_frames = 10,\n    ):\n    to_return = []\n    outside = True\n    max_radius = 1.00001\n    min_radius = 0.99999\n    min_max_x = [0,0]\n    min_max_y = [0,0]\n    min_max_z = [0,0]\n    for i_degree in range(tetha_range[0],tetha_range[1],1):\n        v = np.cos(np.deg2rad(i_degree))\n        if v < min_max_x[0]:\n            min_max_x[0] = v\n        if v > min_max_x[1]:\n            min_max_x[1] = v\n\n    for i_degree in range(tetha_range[0],tetha_range[1],1):\n        v = np.sin(np.deg2rad(i_degree))\n        if v < min_max_y[0]:\n            min_max_y[0] = v\n        if v > min_max_y[1]:\n            min_max_y[1] = v\n\n    for i_degree in range(elevation_range[0],elevation_range[1],1):\n        v = np.cos(np.deg2rad(i_degree))\n        if v < min_max_z[0]:\n            min_max_z[0] = v\n        if v > min_max_z[1]:\n            min_max_z[1] = v\n\n    for i in range(nb_frames):\n        outside = True\n        while outside:\n\n            x = random.uniform(min_max_x[0], min_max_x[1])\n            y = random.uniform(min_max_y[0], min_max_y[1])\n            z = random.uniform(min_max_z[0], min_max_z[1])\n\n            if  (x**2 + y**2 + z**2) * max_radius < max_radius + 0.0001 \\\n            and (x**2 + y**2 + z**2) * max_radius > min_radius:\n                outside = False\n        to_return.append([x,y,z])\n    return to_return\n\npositions = sphere_renders(\n      nb_planes = 1, \n      nb_circle = args.views,\n      elevation_range = [55,65],\n      tetha_range = [0,359]\n  )\n\n# positions = random_sample_sphere(\n#         elevation_range = [2,188],\n#         tetha_range = [0,360],\n#         nb_frames = args.views,\n#     )\n\n# bpy.context.scene.render.filepath = f'{path}/{000}.png'\n\n# bpy.ops.render.render(write_still = True)\n\nobj_camera = bpy.data.objects[\"Camera\"]\n\nlook_at_pos = mathutils.Vector((0,0,0))\n# print(bpy.data.cameras[0].angle_x)\nbpy.data.cameras[0].angle_x = 0.6911112070083618\n\n\nbpy.context.scene.render.resolution_x = args.resolution\nbpy.context.scene.render.resolution_y = args.resolution\n\n\nK = get_calibration_matrix_K_from_blender(bpy.data.cameras[0])\n\nif args.use_model_identifier:\n    model_identifier = os.path.split(os.path.split(args.obj)[0])[1]\n    path = os.path.join(os.path.abspath(args.output), model_identifier)\nelse:\n    path = os.path.abspath(args.output)\n\nif not args.outf_name is None:\n    path = os.path.join(os.path.abspath(args.output), args.outf_name)\n\nto_export = {\n    # 'fx': K[0][0],\n    # 'fy': K[1][1],\n    # 'cx': K[0][-1],\n    # 'cy': K[1][-1],\n    'camera_angle_x': bpy.data.cameras[0].angle_x,\n    \"aabb\": [\n        [\n            0.5,\n            0.5,\n            0.5\n        ],\n        [\n            -0.5,\n            -0.5,\n            -0.5\n        ]\n    ],\n}\n\nframes = []\n\n\n# add the depth if needed\nif args.depth: \n    bpy.context.scene.use_nodes = True\n    tree = bpy.context.scene.node_tree\n    links = tree.links\n\n    for n in tree.nodes:\n        tree.nodes.remove(n)\n    \n    bpy.context.scene.render.image_settings.use_zbuffer=True\n    bpy.context.view_layer.use_pass_z=True\n\n    # Create input render layer node.\n    render_layers = tree.nodes.new('CompositorNodeRLayers')\n\n    depth_file_output = tree.nodes.new(type=\"CompositorNodeOutputFile\")\n    depth_file_output.label = 'Depth Output'\n    links.new(render_layers.outputs['Depth'], depth_file_output.inputs[0])\n    depth_file_output.format.file_format = \"OPEN_EXR\"\n    depth_file_output.base_path = ''\n\n    node_viewer = tree.nodes.new('CompositorNodeViewer') \n    node_viewer.use_alpha = False  \n    links.new(render_layers.outputs['Image'], node_viewer.inputs[0])    \n\nif args.normal: \n    if not args.depth: \n        bpy.context.scene.use_nodes = True\n        tree = bpy.context.scene.node_tree\n        links = tree.links\n\n        for n in tree.nodes:\n            tree.nodes.remove(n)\n        # Create input render layer node.\n        render_layers = tree.nodes.new('CompositorNodeRLayers')\n    \n    bpy.context.view_layer.use_pass_normal=True\n    bpy.context.view_layer.cycles.denoising_store_passes=True\n\n    normal_file_output = tree.nodes.new(type=\"CompositorNodeOutputFile\")\n    normal_file_output.label = 'Normal Output'\n\n\n\n    links.new(render_layers.outputs['Denoising Normal'], normal_file_output.inputs[0])\n    normal_file_output.format.file_format = \"OPEN_EXR\"\n    normal_file_output.base_path = ''\n\n# bpy.ops.wm.save_as_mainfile(filepath=f'{path}/scene.blend')\n\n# Check if PNG files already exist and skip rendering if they do\nexisting_png_files = glob.glob(f'{path}/*.png')\nif existing_png_files:\n    print(f\"PNG files already exist in {path}, skipping rendering\")\n    # Still need to create transforms.json with the expected frames\n    for i_pos in range(len(positions)):\n        to_add = {\n            \"file_path\": f'{str(i_pos).zfill(3)}.png',\n            \"transform_matrix\": [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]  # Identity matrix as placeholder\n        }\n        frames.append(to_add)\n    to_export['frames'] = frames\n    with open(f'{path}/transforms.json', 'w') as f:\n        json.dump(to_export, f, indent=4)\n    sys.exit(0)\n\nfor i_pos, pos in enumerate(positions):\n\n    obj_camera.location = (\n        (pos[0])+look_at_pos[0],\n        (pos[1])+look_at_pos[1],\n        (pos[2])+look_at_pos[2]\n        )\n    # print(obj_camera.location)\n    # look_at(obj_camera,mathutils.Vector((0,0,0)))\n    look_at(obj_camera,look_at_pos)\n\n    bpy.context.view_layer.update()\n\n    rt = get_3x4_RT_matrix_from_blender(obj_camera)\n    pos, rt, scale = obj_camera.matrix_world.decompose()\n    rt = rt.to_matrix()\n    matrix = []\n    for i in range(3):\n        a = []\n        for j in range(3):\n            a.append(rt[i][j])\n        a.append(pos[i])\n        matrix.append(a)\n    matrix.append([0,0,0,1])\n    # print(matrix)\n\n    # print(obj_camera.matrix_world.decompose())\n    # raise()\n    # matrix[0][-1]=obj_camera.location[0]\n    # matrix[1][-1]=obj_camera.location[1]\n    # matrix[2][-1]=obj_camera.location[2]\n    # print(matrix)\n\n    to_add = {\\\n        \"file_path\":f'{str(i_pos).zfill(3)}.png',\n        \"transform_matrix\":matrix\n    }\n    frames.append(to_add)\n\n    if args.depth: \n        depth_file_output.file_slots[0].path = f'{path}/{str(i_pos).zfill(3)}_depth'\n    if args.normal:\n        normal_file_output.file_slots[0].path = f'{path}/{str(i_pos).zfill(3)}_normal'\n\n    bpy.context.scene.render.filepath = f'{path}/{str(i_pos).zfill(3)}.png'\n    bpy.ops.render.render(write_still = True)\n    print(f\"Saved the image to {path}/{str(i_pos).zfill(3)}.png\")\n\n    if args.depth:\n        os.rename(f'{path}/{str(i_pos).zfill(3)}_depth{str(bpy.data.scenes[0].frame_current).zfill(4)}.exr', f'{path}/{str(i_pos).zfill(3)}_depth.exr') \n    if args.normal:\n        os.rename(f'{path}/{str(i_pos).zfill(3)}_normal{str(bpy.data.scenes[0].frame_current).zfill(4)}.exr', f'{path}/{str(i_pos).zfill(3)}_normal.exr') \n    # raise()\n    # time.sleep(10)\n    # break\n\n    to_export['frames'] = frames\n\nwith open(f'{path}/transforms.json', 'w') as f:\n    json.dump(to_export, f,indent=4)\n"
  },
  {
    "path": "data_curation/render_objaverse_classes.py",
    "content": "import os\nimport glob\nfrom concurrent.futures import ProcessPoolExecutor\nfrom tqdm import tqdm\nimport hydra\nfrom omegaconf import DictConfig\nimport logging\nimport objaverse\nfrom pixie.utils import resolve_paths, load_pickle, run_cmd, set_logger\n\n\ndef render_object(args):\n    \"\"\"Render a single object.\"\"\"\n    uid, output_dir, gpu_id, blender_cmd, resolution, views = args\n    os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id)\n    \n    # Skip if already rendered\n    if glob.glob(f\"{output_dir}/*.png\"):\n        return True\n        \n    os.makedirs(output_dir, exist_ok=True)\n    # Use --obj_id instead of --obj with path\n    cmd = f'{blender_cmd} -b -P data_curation/render_blender.py -- --obj_id {uid} --output {output_dir} --views {views} --resolution {resolution}'\n    \n    return run_cmd(cmd, step_name=f\"Render {uid}\")\n\n\n@hydra.main(version_base=None, config_path=\"../config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    set_logger()\n    cfg = resolve_paths(cfg)\n    \n    # Load config\n    render_cfg = cfg.data_curation.rendering\n    dataset = load_pickle(cfg.paths.final_dataset_path)\n    \n    # Get categories to render\n    categories = [render_cfg.obj_class] if render_cfg.obj_class else list(dataset.keys())\n    assert not render_cfg.obj_class or render_cfg.obj_class in dataset, \\\n        f\"Category {render_cfg.obj_class} not found\"\n    \n    # Prepare render jobs\n    render_jobs = []\n    for category in categories:\n        uids = dataset[category][:render_cfg.max_objs_per_class]\n        \n        for i, uid in enumerate(uids):\n            output_dir = os.path.join(cfg.paths.render_outputs_base_dir, \n                                     category,\n                                     uid).rstrip('/')\n            \n            gpu_id = i % render_cfg.num_gpus\n            render_jobs.append((uid, output_dir, gpu_id, \n                               cfg.paths.blender_path, render_cfg.resolution, \n                               render_cfg.views))\n    \n    # Render in parallel\n    logging.info(f\"Rendering {len(render_jobs)} objects\")\n    with ProcessPoolExecutor(max_workers=render_cfg.num_gpus * render_cfg.jobs_per_gpu) as executor:\n        futures = [executor.submit(render_object, job) for job in render_jobs]\n        results = []\n        for future in tqdm(futures, total=len(futures)):\n            try:\n                result = future.result(timeout=render_cfg.timeout)\n                results.append(result)\n            except TimeoutError:\n                logging.warning(f\"Render job timed out after {render_cfg.timeout} seconds\")\n                results.append(False)\n    \n    logging.info(f\"Rendered {sum(results)}/{len(render_jobs)} successfully\")\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "data_readme.md",
    "content": "# PixieVerse Data README\n\nThis file documents the dataset directory rooted at `paths.base_path` (Hydra config).\nBy default, `paths.base_path` resolves to the current working directory when unset.\n\n## Hugging Face\n\n- Dataset (PixieVerse): [https://huggingface.co/datasets/vlongle/pixieverse](https://huggingface.co/datasets/vlongle/pixieverse)\n- Models/checkpoints: [https://huggingface.co/datasets/vlongle/pixie](https://huggingface.co/datasets/vlongle/pixie)\n\nDownload PixieVerse archives:\n\n```bash\npython scripts/download_data.py \\\n  --dataset-repo vlongle/pixieverse \\\n  --dirs archives \\\n  --local-dir /path/to/pixieverse_root\n```\n\nDownload only one class archive for testing:\n\n```bash\npython scripts/download_data.py \\\n  --dataset-repo vlongle/pixieverse \\\n  --dirs archives \\\n  --obj-class tree \\\n  --local-dir /path/to/pixieverse_root\n```\n\nUnpack into the standard folder layout:\n\n```bash\nROOT=/path/to/pixieverse_root\nset -euo pipefail\n\nfor d in data outputs render_outputs vlm_seg_results vlm_seg_critic_results vlm_seg_mat_sample_results; do\n  src=\"$ROOT/archives/$d\"\n  dst=\"$ROOT/$d\"\n  mkdir -p \"$dst\"\n  [ -d \"$src\" ] || { echo \"[skip] $src not found\"; continue; }\n  echo \"[dir] $d\"\n  for a in \"$src\"/*.tar \"$src\"/*.tar.gz; do\n    [ -e \"$a\" ] || continue\n    echo \"  -> extracting $(basename \"$a\")\"\n    tar -xf \"$a\" -C \"$dst\" --checkpoint=2000 --checkpoint-action=echo=\"    ... extracted 2000 more entries\"\n    echo \"  <- done $(basename \"$a\")\"\n  done\ndone\n```\n\n## Top-level folders\n\n- `data`\n- `outputs`\n- `render_outputs`\n- `vlm_seg_results`\n- `vlm_seg_critic_results`\n- `vlm_seg_mat_sample_results`\n\n## How data is generated\n\nClass-level launcher:\n\n```bash\npython generate_slurm_vlm_job.py \\\n  --obj_ids_json vlm_data_filtering_results/<obj_class>/all_results_corrected.json \\\n  --obj_class <obj_class> \\\n  --overwrite_sim \\\n  --overwrite_vlm \\\n  --submit \\\n  --gray_threshold 0.05 \\\n  --qos ee-high \\\n  --partition eaton-compute\n```\n\nPer-object pipeline:\n\n```bash\npython run_seg.py \\\n  --obj_id <obj_id> \\\n  --obj_class <obj_class> \\\n  --num_alternative_queries 5 \\\n  --num_sample_mat 1 \\\n  --gray_threshold 0.05\n```\n\n## Folder details\n\n### `data/`\n\nPer-object image data and assets used by reconstruction/training.\n\n```text\ndata/\n  <obj_id>/\n    train/\n      0001.png\n      ...\n```\n\n### `outputs/`\n\nIntermediate reconstruction/training outputs (organized by object/method/run).\n\n```text\noutputs/\n  <obj_id>/\n    <method>/\n      <run_id_or_timestamp>/\n        ...\n```\n\n### `render_outputs/`\n\nFinal per-object simulation/render artifacts used for curation and validation.\n\nSimulation folder naming:\n\n- Current: `gs_sim_gridsize_<D>_output`\n- Old: `gs_sim_gridsize_<D>_neurips_paper_output` (migrated to new naming)\n\n```text\nrender_outputs/\n  <obj_id>/\n    sample_0/\n      gs_sim_gridsize_64_output/\n        output.mp4\n        output.gif\n        ...\n```\n\n### `vlm_seg_results/`\n\nRaw VLM segmentation stage results per object.\n\n### `vlm_seg_critic_results/`\n\nVLM critic outputs that evaluate segmentation candidates.\n\n### `vlm_seg_mat_sample_results/`\n\nMaterial/physics parameter sampling outputs (often per object and sample index).\n\n```text\nvlm_seg_mat_sample_results/\n  <obj_id>/\n    sample_0/\n      chosen_vlm_results.json\n      ...\n```\n\n## Manual validation\n\n```bash\nstreamlit run data_curation/manual_sim_validation.py data_curation.manual_sim_validation.obj_class=<obj_class>\n```\n\nThe validator uses class-level JSON under `vlm_data_filtering_results/<obj_class>/` and reads videos from:\n\n`render_outputs/<obj_id>/sample_*/gs_sim_gridsize_<D>_output/`\n\n## Hugging Face dataset card\n\nThe Hugging Face dataset README (`README.md`) should mirror this file (`data_readme.md`).\n\n## Citation\n\nIf you find this dataset useful, please consider citing:\n\n```bibtex\n@article{le2025pixie,\n  title={Pixie: Fast and Generalizable Supervised Learning of 3D Physics from Pixels},\n  author={Le, Long and Lucas, Ryan and Wang, Chen and Chen, Chuhao and Jayaraman, Dinesh and Eaton, Eric and Liu, Lingjie},\n  journal={arXiv preprint arXiv:2508.17437},\n  year={2025}\n}\n```\n"
  },
  {
    "path": "docs/Cochin_Bold/readme.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n  <head>\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n    <meta http-equiv=\"refresh\" content=\"5;url=http://fontsgeek.com/fonts/cochin-bold?ref=readme\">\n    <title>Cochin BoldFontsgeek</title>\n    <style>\n/* -------------------------------------\n   GLOBAL\n   ------------------------------------- */\n    * {\n      margin:0;\n      padding:0;\n      font-family: \"Helvetica Neue\", \"Helvetica\", Helvetica, Arial, sans-serif;\n      font-size: 100%;\n      line-height: 1.6;\n    }\n\n    img {\n      max-width: 100%;\n    }\n\n    body {\n      -webkit-font-smoothing:antialiased;\n      -webkit-text-size-adjust:none;\n      width: 100%!important;\n      height: 100%;\n      background:#DDD;\n    }\n\n\n    /* -------------------------------------\n       ELEMENTS\n       ------------------------------------- */\n    a {\n      color: #348eda;\n    }\n\n    .btn-primary, .btn-secondary {\n      text-decoration:none;\n      color: #FFF;\n      background-color: #348eda;\n      padding:10px 20px;\n      font-weight:bold;\n      margin: 20px 10px 20px 0;\n      text-align:center;\n      cursor:pointer;\n      display: inline-block;\n      border-radius: 25px;\n    }\n\n    .btn-secondary{\n      background: #aaa;\n    }\n\n    .last {\n      margin-bottom: 0;\n    }\n\n    .first{\n      margin-top: 0;\n    }\n\n\n    /* -------------------------------------\n       BODY\n       ------------------------------------- */\n    table.body-wrap {\n      width: 100%;\n      padding: 20px;\n    }\n\n    table.body-wrap .container{\n      border: 1px solid #f0f0f0;\n    }\n\n\n    /* -------------------------------------\n       FOOTER\n       ------------------------------------- */\n    table.footer-wrap {\n      width: 100%;\n      clear:both!important;\n    }\n\n    .footer-wrap .container p {\n      font-size:12px;\n      color:#666;\n\n    }\n\n    table.footer-wrap a{\n      color: #999;\n    }\n\n\n    /* -------------------------------------\n       TYPOGRAPHY\n       ------------------------------------- */\n    h1,h2,h3{\n      font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; line-height: 1.1; margin-bottom:15px; color:#000;\n      margin: 40px 0 10px;\n      line-height: 1.2;\n      font-weight:200;\n    }\n\n    h1 {\n      font-size: 36px;\n    }\n    h2 {\n      font-size: 28px;\n    }\n    h3 {\n      font-size: 22px;\n    }\n\n    p, ul {\n      margin-bottom: 10px;\n      font-weight: normal;\n      font-size:14px;\n    }\n\n    ul li {\n      margin-left:5px;\n      list-style-position: inside;\n    }\n\n    /* ---------------------------------------------------\n       RESPONSIVENESS\n       Nuke it from orbit. It's the only way to be sure.\n       ------------------------------------------------------ */\n\n    /* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */\n    .container {\n      display:block!important;\n      max-width:600px!important;\n      margin:0 auto!important; /* makes it centered */\n      clear:both!important;\n    }\n\n    /* This should also be a block element, so that it will fill 100% of the .container */\n    .content {\n      padding:20px;\n      max-width:600px;\n      margin:0 auto;\n      display:block;\n    }\n\n    /* Let's make sure tables in the content area are 100% wide */\n    .content table {\n      width: 100%;\n    }\n\n    </style>\n  </head>\n\n  <body bgcolor=\"#f6f6f6\">\n\n    <!-- body -->\n    <table class=\"body-wrap\">\n      <tr>\n        <td></td>\n        <td class=\"container\" bgcolor=\"#FFFFFF\">\n\n          <!-- content -->\n          <div class=\"content\">\n            <table>\n              <tr>\n                <td>\n                    <h1>Cochin Bold</h1>\n                  <p>This font was downloaded from <a href=\"http://fontsgeek.com?ref=readme\">fontsgeek.com</a> . You can visit <a href=\"http://fontsgeek.com?ref=readme\">fontsgeek.com</a> for thousands of free fonts.</p>\n                  <p><a href=\"http://fontsgeek.com/fonts/cochin-bold?ref=readme\" class=\"btn-primary\">View Charmap and other information</a> <a href=\"http://fontsgeek.com?ref=readme\" class=\"btn-primary\">Browse other free fonts</a></p>\n                  <p>You will be shortly redirected to fontsgeek.</p>\n                </td>\n              </tr>\n            </table>\n          </div>\n          <!-- /content -->\n\n        </td>\n        <td></td>\n      </tr>\n    </table>\n    <!-- /body -->\n\n  </body>\n</html>\n"
  },
  {
    "path": "nbs/pixie.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"8743506e\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"ac95f1bc\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"import os\\n\",\n    \"\\n\",\n    \"cwd = Path.cwd()                   \\n\",\n    \"if cwd.name == \\\"nbs\\\":              \\n\",\n    \"    ROOT = cwd.parent.resolve()    \\n\",\n    \"else:\\n\",\n    \"    ROOT = cwd                     \\n\",\n    \"os.chdir(ROOT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"6896389a\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pixie.viz_utils import *\\n\",\n    \"import trimesh\\n\",\n    \"from pixie.utils import *\\n\",\n    \"from IPython.display import Image, Video\\n\",\n    \"from ipywidgets import Output, GridspecLayout\\n\",\n    \"from IPython import display\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"291c0e0c\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"obj_id = \\\"f420ea9edb914e1b9b7adebbacecc7d8\\\"\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"d79cede2\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Training\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"f6236a5c\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mCreated directories:\\n\",\n      \"{\\n\",\n      \"  \\\"data_dir\\\": \\\"/home/vlongle/code/pixie/data/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"nerf_output\\\": \\\"/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/f3rm\\\",\\n\",\n      \"  \\\"gs_output\\\": \\\"/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs\\\",\\n\",\n      \"  \\\"render_output\\\": \\\"/home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"vlm_base_dir\\\": \\\"/home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"physgaussian_output\\\": \\\"/home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"blender_output\\\": \\\"/home/vlongle/code/pixie/blender_outputs/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"blend_file_path\\\": \\\"pixie/blender/empty_scene.blend\\\",\\n\",\n      \"  \\\"blender_gs_addon_path\\\": \\\"/home/vlongle/code/pixie/blender-addon.zip\\\"\\n\",\n      \"}\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mDownloading object with UID: f420ea9edb914e1b9b7adebbacecc7d8\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSuccessfully downloaded object: f420ea9edb914e1b9b7adebbacecc7d8\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSuccessfully prepared NeRF dataset for data directory: /home/vlongle/code/pixie/data/f420ea9edb914e1b9b7adebbacecc7d8\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mNeRF training completed. Config path: /home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/f3rm/2025-08-02_220348/config.yml. Time taken: 0.00 seconds\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mGaussian Splatting training completed. Model path: /home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSkipping voxelization because it already exists at /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning VLM segmentation...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mVLM segmentation results already exist at /home/vlongle/code/pixie/vlm_results/vlm_seg_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_results.json\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning VLM visualization of segmentation candidates...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mVLM visualization files already exist\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning VLM segmentation critic...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] VLM_SEG_CRITIC | python pixie/vlm_labeler/vlm_seg_critic.py --obj_id f420ea9edb914e1b9b7adebbacecc7d8 --data_dir /home/vlongle/code/pixie/data --vlm_seg_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_results --vlm_seg_critic_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_critic_results --input_num_views 10 --overwrite False --model_name gemini-2.5-pro-preview-03-25 --api_key AIzaSyBbF9p3WVLsh1fjEdZRLPP0vaOBHpVyaMQ\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mFound query folders: ['query_2', 'query_1', 'query_3', 'query_4', 'query_0']\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mVLM model name: gemini-2.5-pro-preview-03-25\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSetting up VLM's model gemini-2.5-pro-preview-03-25 with API key AIzaSyBbF9p3WVLsh1fjEdZRLPP0vaOBHpVyaMQ\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSegmentationCriticAgent: Prediction already exists at /home/vlongle/code/pixie/vlm_results/vlm_seg_critic_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_critic_results.json. Skipping generation.\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mBest query: query_2\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mScore: 10/10\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mFull evaluation results saved to /home/vlongle/code/pixie/vlm_results/vlm_seg_critic_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_critic_results.json\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model: genai.GenerativeModel(\\n\",\n      \"    model_name='models/gemini-2.5-pro-preview-03-25',\\n\",\n      \"    generation_config={},\\n\",\n      \"    safety_settings={},\\n\",\n      \"    tools=None,\\n\",\n      \"    system_instruction='\\\\nYou are a segmentation quality critic. Your task is to evaluate the quality of segmentation results produced by a CLIP-based segmentation model.\\\\n\\\\nYou will be shown:\\\\n1. A set of original RGB images of a 3D object from different views\\\\n2. Segmentation results for different part queries\\\\n\\\\nYour job is to:\\\\n1. Evaluate each segmentation query based on how well it separates the object into meaningful parts\\\\n2. Score each query on a scale of 1-10 (10 being perfect)\\\\n3. Provide reasoning for your scores\\\\n4. Suggest improvements to the queries if needed\\\\n\\\\nConsider the following factors in your evaluation:\\\\n- Does the segmentation properly separate the object into distinct, semantically meaningful parts?\\\\n- Are the boundaries of the segments accurate and clean?\\\\n- Is any important part of the object missed or incorrectly segmented?\\\\n- IMPORTANT: note that our imperfect CLIP segmentation model is heavily dependent on the choice of part queries. Thus,\\\\neven if a query might not be semantically correct, as long as it is useful for separating the object into distinct parts,\\\\nyou should score it high.\\\\n- Bad queries would result in bad segmentation that are noisy or different parts are not correctly and/or clearly separated.\\\\n\\\\nYour output should be a JSON in the following format:\\\\n\\\\n```json\\\\n{\\\\n  \\\"query_evaluations\\\": {\\\\n    \\\"query_0\\\": {\\\\n      \\\"score\\\": 8,\\\\n      \\\"reasoning\\\": \\\"This query effectively separates the object into functionally distinct parts. The boundaries are clean and consistent across different views.\\\"\\\\n    },\\\\n    \\\"query_1\\\": {\\\\n      \\\"score\\\": 3,\\\\n      \\\"reasoning\\\": \\\"This query fails to distinguish important parts of the object, making it unsuitable for physical property assignment.\\\"\\\\n    },\\\\n    ...\\\\n  },\\\\n  \\\"best_query\\\": \\\"query_1\\\",\\\\n  \\\"suggested_improvements\\\": \\\"Consider using more specific terms like \\\\'ceramic pot\\\\' instead of just \\\\'pot\\\\' to improve segmentation boundaries.\\\"\\\\n}\\\\n```\\\\nwhere `query_{i}` is the i-th query in the \\\"all_queries\\\" list.\\\\n\\\\nBe detailed in your reasoning and make concrete suggestions for improvements.\\\\n',\\n\",\n      \"    cached_content=None\\n\",\n      \")\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] Successfully completed step: VLM_SEG_CRITIC\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSaved vlm_seg_critic configuration: /home/vlongle/code/pixie/vlm_results/vlm_seg_critic_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_seg_critic_config.yaml\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning VLM physics sampler...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] VLM_PHYS_SAMPLER | python pixie/vlm_labeler/vlm_phys_sampler.py --obj_id f420ea9edb914e1b9b7adebbacecc7d8 --vlm_seg_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_results --vlm_seg_mat_sample_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results --overwrite False --num_sample_mat 1 --model_name gemini-1.5-flash-latest --api_key AIzaSyBbF9p3WVLsh1fjEdZRLPP0vaOBHpVyaMQ\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSetting seed 0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>> Sampling material for f420ea9edb914e1b9b7adebbacecc7d8 sample 0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mVLM model name: gemini-1.5-flash-latest\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSetting up VLM's model gemini-1.5-flash-latest with API key AIzaSyBbF9p3WVLsh1fjEdZRLPP0vaOBHpVyaMQ\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mMathSamplerAgent: Prediction already exists at /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/vlm_results.json. Skipping generation.\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mGenerated material sample 0 for f420ea9edb914e1b9b7adebbacecc7d8\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model: genai.GenerativeModel(\\n\",\n      \"    model_name='models/gemini-1.5-flash-latest',\\n\",\n      \"    generation_config={},\\n\",\n      \"    safety_settings={},\\n\",\n      \"    tools=None,\\n\",\n      \"    system_instruction='...',\\n\",\n      \"    cached_content=None\\n\",\n      \")\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] Successfully completed step: VLM_PHYS_SAMPLER\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSaved vlm_phys_sampler configuration: /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_phys_sampler_config.yaml\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning VLM parse segmentation critic...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] VLM_PARSE_SEG_CRITIC | python pixie/vlm_labeler/vlm_parse_seg_critic.py --obj_id f420ea9edb914e1b9b7adebbacecc7d8 --vlm_seg_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_results --vlm_seg_critic_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_critic_results --vlm_seg_mat_sample_results_dir /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results --model_name gemini-2.0-flash --api_key AIzaSyBbF9p3WVLsh1fjEdZRLPP0vaOBHpVyaMQ\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSetting seed 0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>> BEST_QUERY: ['brown pot', 'brown trunk', 'green leaves']\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>> NUM_SAMPLE_MAT: 1\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mUpdated material sample 0 with best query\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] Successfully completed step: VLM_PARSE_SEG_CRITIC\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSaved vlm_parse_seg_critic configuration: /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8/vlm_parse_seg_critic_config.yaml\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mUsing configured sample: /home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8/sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mProcessing material sample sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mCopied material dictionary to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/material_dict.json\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] SEGMENTATION_sample_0 | python pixie/voxel/segmentation.py --grid_feature_path /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/clip_features.npz --occupancy_path /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/clip_features_pc.ply --output_dir /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0 --material_dict_path /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/material_dict.json --use_spatial_smoothing False --overwrite True --background_id 7\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mLoaded material properties from /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/material_dict.json\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mLoading feature grid from /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/clip_features.npz...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mBounds: min=[-0.5 -0.5 -0.5], max=[0.5 0.5 0.5]\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mLoading features from /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/clip_features_features.npy...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mCreating coordinate grid from metadata and applying occupancy mask...\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSelected 19598 voxels from mask\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mfeatures_filtered: torch.Size([19598, 768])\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mPart 0 (brown pot): 10584 voxels\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mPart 1 (brown trunk): 5573 voxels\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mPart 2 (green leaves): 3441 voxels\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mPart labels saved to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/part_labels.npy\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>>> LOADING ORIGINAL RGB\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>>> CREATING SEMANTIC COLORS\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mApplied material properties for brown pot: {'density': 1774.4067519636624, 'E': 414556.8099117258, 'nu': 0.2602763376071644, 'material_id': 6}\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mApplied material properties for brown trunk: {'density': 563.4649548990691, 'E': 184730.95986778094, 'nu': 0.3645894113066656, 'material_id': 0}\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mApplied material properties for green leaves: {'density': 287.5174422525385, 'E': 46753.19002346239, 'nu': 0.39636627605010294, 'material_id': 0}\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRGB point cloud saved to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/segmented_rgb.ply\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[SEGMENTATION] Statistics:\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mmaterial_id: (array([0, 6], dtype=int32), array([ 9014, 10584]))\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mpart_labels: (array([0, 1, 2]), array([10584,  5573,  3441]))\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mdensity: 1168.989501953125\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mE: 284623.5625\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mnu: 0.31383395195007324\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSemantic point cloud saved to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/segmented_semantics.ply\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m>>> CREATING MATERIAL GRID\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mGrid shape: [64 64 64]\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mMaterial grid saved to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/material_grid.npy\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mIndividual material property grids saved to /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] Successfully completed step: SEGMENTATION_sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRunning simulation for sample sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] PHYS_SIM_sample_0 | cd third_party/PhysGaussian && xvfb-run -a python gs_simulation.py --model_path /home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs --point_cloud_path /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/segmented_semantics.ply --output_path /home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8/sample_0 --config config/pixie/custom_tree_config.json --render_img --compile_video --debug --white_bg\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[Taichi] version 1.5.0, llvm 15.0.4, commit 7b885c28, linux, python 3.10.18\\n\",\n      \"Warp 0.10.1 initialized:\\n\",\n      \"   CUDA Toolkit: 11.5, Driver: 12.5\\n\",\n      \"   Devices:\\n\",\n      \"     \\\"cpu\\\"    | x86_64\\n\",\n      \"     \\\"cuda:0\\\" | NVIDIA RTX A6000 (sm_86)\\n\",\n      \"     \\\"cuda:1\\\" | NVIDIA GeForce RTX 3080 (sm_86)\\n\",\n      \"     \\\"cuda:2\\\" | NVIDIA GeForce RTX 3080 (sm_86)\\n\",\n      \"   Kernel cache: /home/vlongle/.cache/warp/0.10.1\\n\",\n      \"[Taichi] Starting on arch=cuda\\n\",\n      \"Loading scene config...\\n\",\n      \"Loading gaussians...\\n\",\n      \"LOADING PLY FILE\\n\",\n      \"xyz.shape:  (482596, 3)\\n\",\n      \"opacities.shape:  (482596, 1)\\n\",\n      \"features_dc.shape:  (482596, 3, 1)\\n\",\n      \"features_extra.shape:  (482596, 3, 15)\\n\",\n      \"scales.shape:  (482596, 3)\\n\",\n      \"rots.shape:  (482596, 4)\\n\",\n      \"loaded from /home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs\\n\",\n      \"Initializing scene and pre-processing...\\n\",\n      \"Filtered 355536 particles based on opacity.\\n\",\n      \"Initializing MPM solver...\\n\",\n      \"Module warp_utils load on device 'cuda:0' took 2.10 ms\\n\",\n      \"Particles initialized from torch data.\\n\",\n      \"Total particles:  355536\\n\",\n      \"Setting material to  jelly\\n\",\n      \"Material ID:  0\\n\",\n      \"Module mpm_utils load on device 'cuda:0' took 145.51 ms\\n\",\n      \"conf_values (19598,)\\n\",\n      \"conf_values [1. 1. 1. ... 1. 1. 1.]\\n\",\n      \"Material field data (19598 particles) doesn't match MPM solver (355536 particles). Performing K-NN smoothing interpolation (K=10).\\n\",\n      \"\\n\",\n      \"Material Field Point Cloud Bounds:\\n\",\n      \"X: [-0.4206, 0.4365]\\n\",\n      \"Y: [-0.3571, 0.3730]\\n\",\n      \"Z: [-0.5000, 0.5000]\\n\",\n      \"\\n\",\n      \"MPM Particles Bounds:\\n\",\n      \"X: [-0.4259, 0.4260]\\n\",\n      \"Y: [-0.3784, 0.3743]\\n\",\n      \"Z: [-0.5319, 0.4992]\\n\",\n      \"\\n\",\n      \"Visualization saved to material_field_debug\\n\",\n      \"Number of particles too far from nearest neighbor:  0\\n\",\n      \"Number of assigned particles:  355536\\n\",\n      \"smoothing with k_smoothing_neighbors:  10\\n\",\n      \"K-NN smoothing interpolation complete. Average distance to *closest* material point: 0.010543\\n\",\n      \"Number of particles assigned default properties due to distance: 0\\n\",\n      \"FIX_GROUND:  True\\n\",\n      \"Adding ground boundary condition...\\n\",\n      \"Ground BC - Position ranges: X:[0.5869, 1.4131], Y:[0.6350, 1.3650], Min Z:0.5000\\n\",\n      \"Created ground boundary condition at [1.0, 1.0, 0.525] with size [0.9131218194961548, 0.8650487661361694, 0.025]\\n\",\n      \">>> stationary_mask:  [ True False False ...  True False  True] Number of stationary particles:  50790 material_ids:  (array([0, 6], dtype=int32), array([304746,  50790]))\\n\",\n      \">>> cluster_sizes:  {0: 50650}\\n\",\n      \">> MIN_XYZ:  [0.66372025 0.7490158  0.52988005] max_xyz:  [1.3379831 1.2077754 0.7513428]\\n\",\n      \">>> Created cuboid BC for cluster  0  at  [1.0008516311645508, 0.9783955812454224, 0.6406114101409912]  with size  [0.43713143467903137, 0.32937976717948914, 0.2107313573360443] this cluster has  50650  points\\n\",\n      \"Created cuboid BC for the largest stationary cluster.\\n\",\n      \"Material IDs:  (array([0, 6], dtype=int32), array([304746,  50790]))                               \\n\",\n      \"Simulating Frames:   0%|          | 0/125 [00:00<?, ?it/s][ WARN:0@62.066] global loadsave.cpp:1063 imwrite_ Unsupported depth image for selected encoder is fallbacked to CV_8U.\\n\",\n      \"Module mpm_solver_warp.mpm_solver_warp load on device 'cuda:0' took 2.15 ms\\n\",\n      \"Simulating Frames: 100%|██████████| 125/125 [01:17<00:00,  1.61it/s]\\n\",\n      \"Video successfully saved to: /home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/frames/output.mp4\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34m[RUN] Successfully completed step: PHYS_SIM_sample_0\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mSaved physics_simulation configuration: /home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8/sample_0/physics_simulation_config.yaml\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mTotal time taken: 170.53 seconds\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"os.system(f\\\"python pipeline.py obj_id={obj_id}\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"8b4827ee\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Rendering\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"3ae753bf\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mCreated directories:\\n\",\n      \"{\\n\",\n      \"  \\\"data_dir\\\": \\\"/home/vlongle/code/pixie/data/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"nerf_output\\\": \\\"/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/f3rm\\\",\\n\",\n      \"  \\\"gs_output\\\": \\\"/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs\\\",\\n\",\n      \"  \\\"render_output\\\": \\\"/home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"vlm_base_dir\\\": \\\"/home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"physgaussian_output\\\": \\\"/home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"blender_output\\\": \\\"/home/vlongle/code/pixie/blender_outputs/f420ea9edb914e1b9b7adebbacecc7d8\\\",\\n\",\n      \"  \\\"blend_file_path\\\": \\\"pixie/blender/empty_scene.blend\\\",\\n\",\n      \"  \\\"blender_gs_addon_path\\\": \\\"/home/vlongle/code/pixie/blender-addon.zip\\\"\\n\",\n      \"}\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRGB renders already exist at /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/rgb_renders. Skipping rendering.\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mGS render video already exists at /home/vlongle/code/pixie/blender_outputs/f420ea9edb914e1b9b7adebbacecc7d8/gs_renders/output.mp4. Skipping rendering.\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mRendering completed in 0.00 seconds\\u001b[0m\\n\",\n      \"\\u001b[32mINFO    \\u001b[0m \\u001b[34mOutput directory: /home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8/rgb_renders\\u001b[0m\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"os.system(f\\\"python render.py obj_id={obj_id}\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"b0db049d\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'data_dir': '/home/vlongle/code/pixie/data/f420ea9edb914e1b9b7adebbacecc7d8',\\n\",\n       \" 'nerf_output': '/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/f3rm',\\n\",\n       \" 'gs_output': '/home/vlongle/code/pixie/models/f420ea9edb914e1b9b7adebbacecc7d8/gs',\\n\",\n       \" 'render_output': '/home/vlongle/code/pixie/render_outputs/f420ea9edb914e1b9b7adebbacecc7d8',\\n\",\n       \" 'vlm_base_dir': '/home/vlongle/code/pixie/vlm_results/vlm_seg_mat_sample_results/f420ea9edb914e1b9b7adebbacecc7d8',\\n\",\n       \" 'physgaussian_output': '/home/vlongle/code/pixie/mpm_sim_outputs/vlm/f420ea9edb914e1b9b7adebbacecc7d8',\\n\",\n       \" 'blender_output': '/home/vlongle/code/pixie/blender_outputs/f420ea9edb914e1b9b7adebbacecc7d8',\\n\",\n       \" 'blend_file_path': 'pixie/blender/empty_scene.blend',\\n\",\n       \" 'blender_gs_addon_path': '/home/vlongle/code/pixie/blender-addon.zip'}\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"cfg = load_config()\\n\",\n    \"cfg.obj_id = obj_id\\n\",\n    \"# cfg.material_mode = \\\"neural\\\" #[vlm, neural]\\n\",\n    \"cfg.material_mode = \\\"vlm\\\" #[vlm, neural]\\n\",\n    \"cfg = resolve_paths(cfg)\\n\",\n    \"paths = get_output_paths(cfg, cfg.obj_id)\\n\",\n    \"paths\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"423fa014\",\n   \"metadata\": {},\n   \"source\": [\n    \"Verify that the distilled NeRF field is reasonable\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"458cac74\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/jpeg\": \"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\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Image(f\\\"{paths['render_output']}/rgb_renders/test/rgb/0001.jpg\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"979bb9d4\",\n   \"metadata\": {},\n   \"source\": [\n    \"Verify the voxel grid is correct\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"4b560919\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Axes3D: >\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAYUAAAGFCAYAAAASI+9IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8fFJREFUeJzs3XecXHW5+PHPOdP7bO99N7vpvZIAoYTQexER7BW9XtRrF7t4rejFgoAgoPReEkJIQnpPdpNs771M7zOn/P6YuF5/FxUVhOD3/Xr5kt3MzH7PmTPznG97HknXdR1BEARBAOS3ugGCIAjC24cICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUBAEQRCmiaAgCIIgTBNBQRAEQZgmgoIgCIIwTQQFQRAEYZoICoIgCMI0ERQEQRCEaSIoCIIgCNNEUPgbdF0nFAqhadpb3RRBEIQ3nQgKf0MgEMDr9TI5OYmu6291cwRBEN5UIij8DX8MBIlEglgshqqqb3GLBEEQ3jwiKLxOkiTR2dlJOBwmk8mIXoMgCO9IIii8TrquMzAwgKIoRKNRksmkCAyCILzjiKDwdzIajei6TltbG5FIRAwnCYLwjiKCwj9AkiQGBgZIJpNEo1ExnCQIwjuGCAr/BKPRiKIoHDt2jHg8LgKDIAinPBEU/gmSJCHLMgMDA8RiMbE6SRCEU54ICm8Qo9FIMpmkpaVFTEILgnDKEkHhDfLHXkN/fz+RSEQEBkEQTknGt7oB7ySSJAFMr06qr6/H6XSK4CAIbxFJkqY/l8LrI4LCm+CPq5Pq6+tRFAWfz8fRo0c5/fTT3+qmvaE6OjrQdZ3Gxsa3uilvqO3btzN37ly8Xu9b3ZQ3TDAYpKWlhTVr1rzVTXlDtbe3I0kSM2bMeM1/lyQJi8UiAsPfQQSFN5Es/2l0Ttf1d9yF+cce0DvtuDRNe0feYb5Tr8G/9F7puj79v3facb+ZRFB4k/3vC/addmFKkvSO/sC9k47rnXwN/u////+Jodu/n5hoFgRBEKaJoCD8W1KVNLr+pxoZOhoaKjrizlL49yaCgnDKGI+O8LtDv+SZlofQNA1d1/nirf/FukvP4pVtmwFo62zlI7fcyK23/ddfLIzU2dXMnj1PsmP7EyhKBh2d3rFW+sbbGJroA2AyOMGvHv8pz7z62Bs+BKHrGhHfIBHf4PRrTwTGeGrHw7QPnph+3JYjL/HAlrsIxYMAhKIhvvLLz/Gbp38x/byR0QGe2/AY/sDUG9pG4d+XCArCKWNX91amtBF6Ex10jXTgD/h59MmHaW1v5Sd3/BCA+x66k8GhfvYf2suBo7tf83XGxvoxGWRUNUkoHCAaDxMI+cik07T1HQPgRG8ze1p2sO3gZvxh3xt6HMmIj9BED6GJXlKxAADP7XmC5/c+ye9e+jUAo1PDbOt6iZ5QB4/t+D0An/vpp2gfbWXjgRfYf2IPuq5z209u5Y67fs7/3PmDN7SNwr8vERSEU0a5vQZL2o45bqfQVYTX46WmtprCknyWLVkOwMJ5i8ioGQxGA/XVM9B1nTse/gmf/+mn6B7oBMBg9nD3o0+yadcBcrz5OKwujrQ2s/foXkwGCwBFuUXU11VSXlqEx+F9Q4/DaLFjMJgwGE0YzTYAqopqcNqcVBfVAWCzONCTGlbFQI41FwA1o2K327FZrXgcOQC4HA48BW4cTtsb2kbh35dYfSScMvIMhRy7rxOPx4tpiQlFVZi9rJFYPEJRdR4AiWQa3SAjm01oOvQMdbH72A4kWeKO3/+AH3/hTu579B66BwfoGRykvesEJSXlqGQwWQz09ndTndNEc/d+rC6ZdDrC4HgvNWUNb9hxpNA5khzHKJk54+SyZZkk8yqryXXbAXBYHSwylmGVJIrt+QCcuegcpPIUkiRRXFSEJEnMOmMB3kQOBe7iN6x9wr830VMQ3hbGJ8d48eXnmZyaAEDVVF45tJGNe5+bTjLY29PNxOQYoyPD+P1+dHTSmRSqphGNhwBIJhOgg6poKJkM+Z585IyGmsxgt2S/cPPy8pH0bL4qi82CxWQhEooRDceQ9Ox9ktOQx7G9vQx1+MhxFfzDxxWLRfnyV/6LWz7zKaamJgEYDQ4zFh5nJDyCL5qdCxic6MJuthCJZ4eqxsaG0dU0EjA40APAy9tfwmgyIhtkjne2oGkabYOtZHSFidD4P9xGQfjfRFAQ3hZ+fudP+f7Pvssd9/wcgH0ndjGZGcWvTvDynhcBmIyOYyk04yy1U1ZejsVk4bSlq6iqKmX9mgsBmDNzNk01dcyZ0UheXgFul5d8SwmmhIGFDSsBaKpsINfhojQnj6K8UqwWK5a0g9Z9ncxrWAjAyPA4O146xM7Nh1Eyyj98XO3tbezYvYO9h3dz4MA+AMpzKgkNRlB8KgWuIgBK8hppHR5CNmSHhcrKKumMRjk8PkDD/FUA1ObX8+Q9z/L0b19gSdMKZFmm3jOTjF9nYeHyf7iNgvC/iaAgvC14PTlYrVZyPNkvRZvBTiwSIxqOYpKy4/wjI0OkMinC0TBTvknSmRSh+BSySScY8wOw9+BONE0lEg3R2d1KIOintbWVgf5Rtr6aXaE0OjKAQZaRgKHBPqLRKM0njjIxOc7eg9nJ6eGpATRUUkqCqeBfvgv3B31EouHpn4+0HOSTX/gYh1sOA1BX34Apx4TRbWJwahCAn/zyB9z1s7v46fd/ysEjBwB44Pn7CSSjvNqy4+TfH+Kwcpijhg6ePPRI9sUN0N7cScexTo4eP4yu68T0CAXeAsaCo2/E2yAIYk5BeHs41tnCVHiKjp5WAPI8+QxvGkZXNNZfdykA4XSMhKTgMJvJzc0jGPHTOzJKWkljNGQnWlcsWkNvfydWi52qijpsVhsel5tEKs6cxnkALF1xOpNxH1azleqaeswmM+WlFSgZhdlNc1GTOjde+W6uOOc0khmN+qpsXp1wJMSkf5KailpkWWZ4bJAN257HZDRx+XlX43K6uekTN5BIJti551UObT3OUxseI62m0dE52HKADwHNJw4DOugwFcgOl8WjCRw5dhLROABWoxXSMlaLGafRDUCOJxdJAgkJrycHXddRlAwGWSajpP9Vb5XwDieCgvC20NXXgaqpNLc1A9Db34VyssxpT18XFaVVjEwOIxtlNEnDaDDSP9pPWsmg6ToT/uyXK3ZYds5qRjvGAB2ffxIVFYfDQUFxIQD7j+1mybIFDI6P093XSWlxOR39LaiovLxjI2uXrENOK5TmFJFMKaSScbA6uOvxX5GUY6xqPIMzl59NIpkkQgCDbiCdSaPrOhaLidqZ1fjHs0tNE/EEjiI7stFAeWk5APFYjDPXLkdRNM478wIAVixYQefwCepKawHwunK4ePVleHO85MnZSeTz1p3L7vat5HpyKSstR5ZlanJmcLjjIAuXrwAgEAzwtR9/HlXX+Pqnv0NhXtG/5P0T3jlEUBDeFq675F3sPPQqqxecAcDShavYdWg7qqqwdEF2LuCyc65g+6EtzK6ZC8CCGYvYf2I28WSM1QvOzG7o8qo0FczE5XWiaRo79m2jr78fgHgiAsCSuibqK8updhVhNZsJRf3Idg1ZgoSSnbDuGRxj24ENOCwOvvgfK9F1HVuNgaK8Uvp8HcDZDEd7mbIPADAWH8LtcbP+2nOpqKkiEswOKa05/XQOyYdQdJXyymxQuOqi9RQWyqiqRjIVxmnMZXCiFx2dcX92GGh368s4XU4sFivdw20sq13Npv3PE09FSfuTDI7201gzk8PHD9M/MsAB235WLVzNC5ueZdg/hCRLPPvSk3zgXR/9F7x7wjuJCArC28Kas09n5rJGCj0lALT2HONA1140TWdP8w7OWrGOlB7i2quvoP14O5qmEYj6SGsJjDaZyfAYHqcHn2+KaDiKJEs47E5yc3IxmU3IskT3UBcA4XiMiaiP8ckJ6meuwWCSyc3LxWIy47R6AXh5/0b8CR9p/zg9Qz00VDcwNenDaDLQ1zMEZ8BLr76AucqMhMSeQzuYddF8IuEw0USUSDgbgLbv3AxpHSWSYkDqBWB83IdmNKOpOpqaTdpmMzsI+P0U5WaPvzi3jCcfeZxIIM7F515KJBqmOLcEh81OcVEJNeW1PPD4b0nGEqRCKRqrZxJNhimtLUZ6SUY2ypyx/Kx/8bsovBOIoCC8LVjNVkwGE1aTFQCXw4XNakfVVVxODwBjw+N4ctz09w6g6zp7Du7g6J4j5OR4say2klEybH9pK0bJREyPcsmSa+kd6kWVVDQk+kf6ADga7WAsHsSn+qgbH8bhdPKZGz6Ow+rg4Y3PAGBzmTj9jFXEIwk0NYNBNhIbj5OyZ4iORwGoLK6jqroCSZZxKu5sps4cjcFkB5LNgK7rjI5PMHSih0QsSeGiPBLpBJrXgt8qo+s6U5EAgWSAfdv3MD44gd3VDreAlDHTtruTYCiEV/KSYynkjjt+QX9XPwaDgeUNa/jtQ3cRmIoyNjKGfzIAeSkm0uN8/D8/ztqm9X+Wul0QXi9x1fwNTz/9NJAtUiK8edwuF64cBy6XE4CiohKuvuZarr32emY1zAYglkixZecO/KEIBoOBKd84qVSKWDRGJBSenmyVkEilE9gsNo62HUbXQdN07PbsPgV3rguD0YjDZWd20zxiCT9OmxOLyUJJYXajmMNhx2w2Y3PYAB2j0YjL48Ris2A0GwBIpKKYLRbMZjN9Y90AWN0WNEkHE2i6Rv9gTzZPk6YxGZwAdAJRP5IsIUkwOjWUXTkl6dlJ5OxL4wv4KCkqxulw4HQ5yfXmEY/FQQdN1TAbzbhzPFjMFmRJRtM1DJIRWZIxGyzTAeGPOaIE4fUSPYW/oaEhu5P1xIkTOBwOFEXBaBSn7Y0WSQdJa0kiqSDFzgri6RiSQcIgySSVBA6Lkwn/OCanmZSaIpPJ0NAwi4w7jZJSaGlvYXbDPGKZKIGInzMXnQ7oXLH+ClRHhnQyxeIZ8wEYbB3GXmhhqGeYwdn95DpK+OEfvo3JaiY2mOGCM+oZbh1hYGCIWCDK8o+dwZRvkpb9x9GOtKCEMwD0dHSxbMZsjAYjqVA262q0Jw6KiirrGGQDFfk1DI4OkIylcepeEsk4sllncmoUXZKYefocnj38GLWLayldVECpu4pjbUf59K0fw4yZfG8u82ct4d4H7yavPJ/C8kIcdgczZ83F+XIOdbO8FJeU8JXPfJXi8iK8kVwq3FVANrDc8/u7MRvNXHnhlW/VWyucYk6pnsIdd9xBdXU1VquV5cuXs2/fvtf1vIceeghJkrjsssv+7r85a9YsAObOzU5u7tu3j8HBwb/7dYS/rtRVRYmzkhJX9gut0FXM3LJFzC1bRO7JNA8zypogreOQHdk792In3hIPrkIn85oWkEwlOdHWytDwCC9vfRWQ2LBzA1WNldTOruHg0aMABBM+MlISs8NISWEZCS1O63AXLX2taJbsXfXo6BTNrx6nq6WPTEbF7faQ1JOMjI1i82aXv66ev4ravDJqcktYPX85kiSjhFLYnTZMskwimeBo60F8434S0QQn2lp4dseThKeCeIrceApdPL3lYYYC/SSJUTG/hKQ3xB13/5jSwgLGxydoaT3Bnb/7BRtf3sDUwBR2h52iomK2H9xKIpFk2ys72LNvP/f9/j5SahJJloir2WWtw6ND9A300TvQw4Rv8l/8jgqnqlMmKDz88MPccsst3HrrrRw6dIj58+dz3nnnMTEx8Vef19fXx2c/+9l/ujaty+UCYObMmUxOZj9gIyMjfzE98ztFLBNlODJAWs0OzSTScfb2bKNz/E8pnsfDQ/T521HUf3znr9PsodJTj9OcXZMvSzLVeXVU5tZMV9XKq85j7rK5VMyrYM+x7QRG/XS3dDPcPcKPf/4duno6ScdVolMxJiYnCScDOCUnk0OTjPSOMto7jqqqpAJpwlMRgiNhDEYDVqMNNaGiplQcJ/cEFBcVoqGjSzp5ufmoikKht5DCgkLMkhmAnqleBieGGZ4a4/hAG7quk44pTA5PEZyIYLVYcee6MZmNSLKEx+umNn8GekxhqG2E4dYRFjUso3NvD6G+OLGBDKH2FAtmL8HrcGSDi8XMhesuYNbCWbhKHJiMJuorZ3DW0rMpLM7BarFgMpkoKiiGhERgNIRDyh5DY30TF627iAvPvYjKssp/+L0R/r2cMuMgP/7xj/nQhz7E+973PgB+9atf8fzzz3PPPffwhS984TWfo6oq7373u/nGN77B9u3b35B5gZycHLxeL9u3b2dkZGS61/BOLEup6zonfEeIKzH8iSnmFi5if/92uqc6MSAxx7kUo8FMy1g7aSWJBFTlNr5p7ZF1mXgsRiIWJxgLsHXjFvbv241kkLDa7Rw6up+R5mEy6TR6hcxEfJzG2rl88eufyxZ3r21g1D/C2vnn8sQLj7Jg/kKSaoKCvEKqtEqmxiZZuTabUqK6soqjrUcpKiwAXSOVSWNz2lg1eyXdbdn5g6PNbWzfuQNJgls+8GW27NmEISPR2zVCXk4OmqZx3vln0jXVidFsZO78hUxNjNBxqIue8RGMRiNfetd3GWgZpLAhjxxbAXk1xaAb2brjCBiytaLrqmczlpxA600x1jlOc+ooVUU1YFQ5/bxlNBbP5j8//Dk+++1PMTA8wNmrz+Xm936a3v5eLGYLC+YuRNLfWdem8OY5JXoK6XSagwcPcs4550z/TpZlzjnnHHbvfu2c+QDf/OY3KSws5AMf+MAb2p4/fvkvXryY6upqAA4ePMjU1Duv0Imu6aRTGSSyx2w12gEdJAlZMiBjxGa0YTFasZsd0897oyY4Y/EY7Z2thCNhnJKLPa/sITTixyXbCQb9SLqELEnMrJ/JwrlLUDIZ0CHkDxH2hxmbGEGSJGRJpriygHxPAZO+CWRZIhDwIekymXSafJuF+uJyRnqzPaA9zbsIhEP0DA7SO9yNLMtU1FRgtloorshuJhsdGCboDxLwBdm7dzcaGi57dt4pk1FQlAzdXX1gAmQ42nqYSDBEXMtuuMsoCsfbjiEbZBKxJEpaIRVPU1JcgiRBJqOQURR2H9hFVWEdpCUkXSKeiJOXk4+eBovJyrozz8dgMGAymjDIMiaTmYyS4dXdr7J151baOlr/6fdB+PdxSvQUpqamUFWVoqI/351ZVFREW1vbaz5nx44d3H333Rw5cuRNa5ckSRQVFdHe3k5paSldXdl18KfqSiVFzdAx2ga6TkPpTCRd4qXnXmIqNMXcuvnMuWIhznQeLS91YpSMzLpwKSarxHDrFOP+UarWzKLACSfajvPbB+6iccZMPvCeD/1TPaj9h/ay9+Ae5s6cy8B4H4GQH6OsEQ4OsXLpKkJhP031DaSTKr7IBPWNjfT391NQlM8Df/gtn7zhFnbu3ITJZMAhGxgaHeSaS99FWotTVlaKPzBOeCKEDtlcSP091M5cid1spGlpPag6VtmIklEY6BugtLyUnvZsTyHflZfd+6BDU8Msaopq6ertZ/WKFQRCYSwWK/t3HqUgr4C8ylwWFC2jqLSGRCqF3WIl15vLmaedxXPbHkd3aRQUlTKzfA6LypdxyXmXsv/IfgoLi/jUB/+T3Ue2U1lchxrqZsnS5cyobcSherGYbNRXNSBJEgVFZYxHQsybvRiT0URFRRkxNTz9uVEUhS2vvkx5aQUN9dke3c4DO+jqa+eSdVeQ4875Zy8h4R3glAgKf69IJMJ73vMefvOb35Cfn/8v+ZulpaUUFRWxc+dOOjo6APD7/Xg8HlKpFLquk0gk/iVt+UcF4wFG/cPouo7XlodZNjMZmEDTNFo6j5JIJNi5dzuTY34k4FhrM7Ob5nHk+GFGxoepKW2grKiClhPNnGg/QTQW4/ILr5xeCvqPMBpN2Kw2TCYzqxadTjqexmxOk9Y0fKEgU/4A+w4fpqq6hoySYfX806gvrCWqRUGDoqIyyvPLGBjsZdIqYcBAKB5irH8I39QkS+atpK5yJv7QFE6rjYCqo+s6rrocigrtaJpORIlyvK0Zo0lG1dPIRplEIsFEYJLQVAyAkfERBkb7SOSmGMwfIaLGSCQSRGMhVly4FKvTSioZY+vWTZgNRjwuC7Km09nVjj80RdPMWThcDoJpPzv37SCZTLJiyRq8nhxC4TCt3a00Nx/BoMhsfOU5ZjXMYmBoALPZQm9/Dxk9w5bdW4lnUmzZ/Qpz6mfRGTiBnzFah1tYYlnJngM7OHB0Dx63l9u++RPisRhf/8mXSWYSjIwN8+kPfO4NupL+dRRFQZKk1/xsZdOOWN6CVp3aTomgkJ+fj8FgYHz8z7NVjo+PU1z8f4uLdHd309fXx8UXXzz9uz9OCBuNRtrb26mrq3vD22kwZBeZL1q0iH379nH06NHpWgAA27Zte8P/5j9DR0eVMsi6ARkDOjr+1ASZjEJ6REOWDOhxiangJLVlTdn2a6Cb0qBIOG0efFM+1KROKBBmpH+MbZltaBmorKqirKic/fv3v662JBMJnnrhUZDg0guuxma18eymJzncfIhVK1dTX9HIvn37ScQzRJIp9MwE8WgCo8mI3enAk+ugv6uHcDyChoZkljBLRp577lle3bGbQMhPfl0+Bw7sZ8+ezcR9EXRfhF0Hd9J+pBOb1Yhk1DCkU6TTaVKpFDbdhq5p7N2/h5kN84lH43hyXMSjcbZt24bZap1uf0dPJwsbF2S7G3p2r8S2bdtwW3IZ758gtyQXu5bDrIa5bNz0HBa7ldy8fNpa2yk0FdO+rw3rEhu5+UUEp0IkUglsdjeZTIZDhw6ix3VUTUPK5tEjGk7QVD8Lo8HIYP8QkUSYHLsTc9KIx+Ti1Vdfxe/zEYpG6Oruwhi2oakauq6STifZs3sP4WiITEpB0zQmx6fedtfn32NoaOg1f3/22Wf/i1ty6jslgoLZbGbx4sVs3rx5elmppmls3ryZm2+++f88vqmpiZaWlj/73Ve+8hUikQi33347FRUVb2p7/7iPYe3atVgsFnw+H4cPH2bt2rVv6t/9ew36+uke78Blc7OweimhYIjv3PYtotEIH/3Qx6mtq+WpzQ8R8UWwVptYv349//3rb2OyyygZlYyWoqi4jj1HdhGNRdm483kev/sZmrsO0504jttuZfXpp+G0u/5mW555/kmOHW0GCS6//CrWr1/PV2/7AhOjExzLaeaH3/wJ9z91L5lgirgew6CmOGPl2eh2FYNBJpYOUVySD6fN4aUtG/HmuCguy+fiiy/mnt/9glAsgGSSqJtRSygwxuTIMJIksXzRKmoK69jb/Byaw0gqksBisSBFZaxuM4lQnEvPuwqr3c73vvUN7B4HKLD+9vXc9cj/0DCjCnRYvXQVgVCQkd4xJocnMJssrP/mer5y238hjSqkYknWXXIxE4MTGAwGYskU5y5exmWXXc53f/UNNEknlVT4z599kW//7Gv0DXQyOTXGDdfexAXrL+BjX3mCkrISUCW+87nbMBrMLF+xjPLS7LU85Z+gf7Ibm8nGjdfehMvpouVXh0lOjaG6NJYvX05H33GWLZ+N2+3h7HPOxGK2s+/YTsanRrnx2veyYM6iN/uSe8O1trYiSRJNTU3/5990XRcb9/4Bp0RQALjlllu46aabWLJkCcuWLeOnP/0psVhsejXSjTfeSFlZGd/73vewWq3MmTPnz57v9XoB/s/v/93p/OmDo+s6OiqgoekadrsDj9vL6MQoDkf2i70gp4iWjqMoKQWzxYLJaMRkNCHJ2Y1mABazFYvZitlsne49/S0LFyyioqaCZCaJ1WwkHo9x9jlns+mVlyivLuVI6wFWLl3Jgd7dJJUE+e4G5s5eTNgQZtQ3SH9vhFkzF1AdCZIcH0Q3GqismYnZbGHOjLn4JqaoKKxh9oy5HN29GzmlIhsN2GQHkklGLbKB2UAqmJ3/sJRYsDjMGM0Gesa7sJkcpFMKkYEJ8oqypT/HR0axWbPDE8FQgCHfIDaXmVQoSQaJjJLGbDVgd1kxmQzEU1GCYT9mswlVU8nLL2DfsZ1Y3Rau//CVWCwmOkaPE0tFkWSZWDKCN8dLz3AnyUQCo8VEaUEJ/lCQb/zgVgyygW9//tvMbJzNhv1P0dxxCI8th8mpCVxOF4FQAEVVmQpml1B39XZQUGQmnowxOTWOLJmYmBolGgtz9MThUzIoCG+8UyYoXHvttUxOTvK1r32NsbExFixYwIYNG6Yn0QYGBkSul79TWU4FdosDh9mBLMkktCjlpxWSSeZQUFyAqqqc6DvBVGiS7qHsPMmFZ13K0eOHseXZqKuuI5FIcPVV17B172bef+VHAKgqruG80y7EYXVgMVv/WhOmOexO1qxZw9DwAN1d7dRVz8Bhs1BYkEMyGuLJjY9x42UfQPdJpBIKlStqMdpkTJpEQ1kDk90THGk9wlRfN0oqRSSQQDG345szxbYtm0kn04x09jAwMkjz4T3ZcgaKyuhYD2aTCSWaATuYlexHYqRlnLzSXEJTETzzcykoLEQ2y1glKzZn9pjC8dj0JPrZp69jX9tejvUeYdwyQmFeMaqWwegwEoqEMRlNrJp3Br2uHu6+924ATl91Ns39+/F6XZhMRgwmI9FkhGWzV/HkY09iNBioLKkBi4aqKCRiCYpmLGZ0fIh4Mo7dauPVvVuZ0dCEw2PFYbVjNpkpLMimCF8yaxnb921jycxlADTWzuNI6y5qq+qorWpE13XmzVzA6MQoq5ed8QZdVcKp7pQJCgA333zzaw4XAWzduvWvPvfee+994xt0ipNlmTznnybie0d7UOUMukmjs78Nj8tDMOxH1VU6etsB6B/pJZaMoegKu45s57EnH8ViN5Nfn0c4FeZQx34Odx2goqSCmvJ60koKq8n2N9uSSMTJZDKYTWby8wvJzyukd6CTzMmaCsV5hSQSSQaHBonH4uzYup1LVlzN2PAo3nwvwSk/Ho+X3lSKyakA48EgpkSSgoJC6hoqMBlM+BJ+8nPzKKytJB5PgkHHZHVSVlqJNKETDExROacegNr6WnLM+dhz3BSVFhHwB4kEI+iKhsGWvfmIRmNM9mYrvh1vP8Err2wmM5nG7DcTCYaxmh0EfWHkDMSUODaznQ2vvEA8GsUkG/jW977Ml770dTpavs5j9z6D3WljzWfP547Nv0BTVBQFbv3Ol/nEzZ8gHI5gNpvp6u3gxqvfR1lRMTqgqhrxRBxLysto3ySSPsXBIwdYvGApu/bsYGJ8giNHj3DWqnPRNBWr2Y0sWUln0vj8U0yFfaiSxrH2Zuqq69/gK0w4FYlba2FaZX4l/j4fSV+CBY2LcTs9XLruaryeHK664DoAVD1NfqmHkooCfH4f0UiUaDhKw4w6ivOK6R3tIRD2c/jEQQ4e3oPFaCWVSvLS9hfY+OrzJFNJAA4e3sdXvvl5nn3hKQDMZiuvvLKF3Xv2sXD+KrzeXBbPW47NYcfjcZObl09VRTU55W6K6vMIRn109LbhT0zQ0X+UjDdFf6SDuqJaDGmZHKOT9o4OBvp7mNnQyKymmRS488ik00wMTmJ3uDDIVnp7ejDIRg4eaqa9s5cDew4CEEtE0dTsHfrQ2BAupwOrxYwkSdit2SBnM1rRtOzwW3lxOS6Pk5GhYVKpFAbZQDKdIM/hJdQfJDISZv/+3Sw9bTFWkwlZg86ONroHurA6rXSe6OHovuP89Lc/YeHauVjMVnQF2tpaeXbLEyhKimQiwVUXXcsTzz5G6/E2/JN+yopKMZtNWJ0WCouLKCktpaaqlpe3bSYWiyPp2Z3NADarDbPZjNlsxmgw4rQ7cdicWC1WCvNFMR4h65TqKQhvnpHxYf7w/ANMDE1gc1sZiQ+wc/cO/GOTeC05DA70c6R3L80DB0jG4+ho1OXNoayyGMkkUVpXxPZjL9OYN489W/dQUluIzzfGotplvHpsK119HRR7SplR00RNRR2PPvUw+4/uo6u3kwvXX8LDj/2egcFsSuxbv/clfn/3ozR3n6BncJBgMsJZZ1/I3rYdmJwGTBjIpDIoioJuTeP1uoil41g0Gy1tR8hkFJKpFKUl+VgsVuKJBLIsEUvGUTSFSDSEWTaRTCUJhULE4jFSyRRaRkXRsqk6/MMhNne9QiKW5KLvXkMmo1BWX0LYF6G8LlssR0fHaJaQZAm7w4GeAgxGcgsLUMkup03EUlhcVpAkqqpqeeL5RzBbLeRW5KJlNBbMXIghZUI2GpB0WHfGOh5//mE8OW58mQD5BflUllXR3tFJXk4eZaVlaKrORVdfQE1dNU1NMzEZzaQSSc5du4Z8bwHFhcUgSfR19+Kf9NNT0w3nQkpJ0jvSTSITIxQOkpuTxxc+8VVi8QglRWVv3cUnvK2IoPBvLJ1OMz4+RlFRMbff8yOC4QBGo5XCigL2bz/Af3//NjRdY9b82RQU5+NLjNHQWM/o8DCxWIKdB7Zhd1hIpdIc2nqEuopG7rr/14QiQcbHxpi/aA4dI20c7j6IqqoUSEWUFma/fObNnk9LWzMNtTOyu9PXruPOe36JpqrMOLmSpLy0HIfLhjfXg9uTQ3VJLalECgBZM9JUO5NHXgqRSKSYGA+ysrEIxxILUiTK8MQYR8e6ycvPZ/XyRpwOB+FUAIvZRml5GUPDfaT0FJ5cN26XG6NBQsno/HFe3GyVcAQlzAYLgdg4/V395LoLKMwpIZXKrol32q14io2omobH42ZsZJiammoKi4pJJhJMjk8QjUZw5mTrQfQP9dPZ08HqC06ntqmW4FSQA0f24jRbSAaSzGxqYvHsJfzyzp9RVlVJXdMMzli+lmPHWoiEolhNDlLpFJ0DrdQ21uCw2wkmfEwFJtnw8nOsmL+QaCxIJBoioYUJRgPEEzF8gewQ15Rvglg8ij/oI6NkM726XdnjF4Q/EkHh39hvf3snBw7s54ILL0LXsnt66yua+OS7/pNnnn0Kq81CLB7HYrLiMuXg8/kxmgyMjo6xZ/N+Vp62mog/RDQSo8ZrRdcS5LhzCQT9pBNpuo/1kXNxLh67h2gswrGDzTznfYYrL7uGw20HGRjsx2CVUDWVwsICFi9dQCQapuHkHpL6iirmzKvHY3WjayojQ2Mc2d2Crmk0NNQxMTFOBp14UiWDSjyaosCZizsvH6vdwYZ9e/CND5LjcWOxmKkuKaCrv53+/h7MViNm3cTRowc5Y9m5KMkMuqYTGgsCUJJfiC+ioBsg312Id14eL218MbuYQctOLutJBbPZiKZp7N27g8ryKvYf3I3NZiMcChFPxHHaTm7ck6B/oAfZKGdTghuy+0IiiSiqQUPSNMrKy/EF/eTk54BkwOVyIxsNBEJBgkN+zFEjJTnFdPd2ofaliU3EWLBgMc6zcxgaH+EPj/ZTlF/MeWdeSzAcoKiqEKvdyiWXXApAY80sRkdHKSkuI8eT+6++3IRThJhTeIu0th/nocfuZ3g0u+kmnU7zyEMPcu/9vyJ6spZwZ3cHn/vap7nr/l/+2bLRkcns6pM/UrUMqXT0dWdszWQy3Hv/PbyydTOBgB+/z09vTx8drZ1kUhksRivuIjsf/M+buP7DV2F32hgZG+bIsWZ2HtiDbyqApmk4XW4CwwFSkRQmp0zA72dsfBI1JWO2WdEyKqGAj2vPvJh3n3MlsmKgpzebIiIUDaEqCvFkHEVViEQjRGIRMpkMLe1HADjeeZSMrqDoGSb7JxkaHURTVTRNo69nkIL8IuKJBJquk06l8eR62bZvL48+u4GnN71MIBiksLSWY+39tHb0c+BoF4vnLKWwpJJMKkk0EmXV8rWUlpZisVuxWCzYvNkiP15zIYFAhMBUlJryWgYHB4ilooQjIaKp7C7mpK4QjsYJReMsXLSMsdFhEok4vZ1dJKJxKsoriIaiJEMxEsEYl190FYmpKM17m3n5uc0Mtg1z/tqLSCaTWOx2jp04RmVJFVddcj0rlqzi8nVXct6a9axavAqrasaUkWlvbeXK866lr7mHyGSE5v2HaaiYQY45l862Hk60tHHo8AFK8ssZGxnHH/SzY++r2XMeCpMIpxgdGmNo+LU3ewmC6Cm8RX59zx20th1jYnKcT33ss+zfu4ef/eyHqJpCQg7xkes/x63f+xIHjx7A+KKEO8fFNRfdwL7ju3hm22MU55Xy8av/E1mW8Yd6UbU0NqMXj6f8b/7tluPNPPiH+0kmk1x39XWsOm0N9z11H6qqsX3vdr4ItPefwOW24/V6Mcw3s7BuAdsPbsZgM+DO8ZBTlEdBjofqmkq6OnrY+ch+1p5xFqlkHEmWkGWZqppqvO4cjEYDVizEk1Fy87P5df7jQ5/G6pRZNHcJFpOFyvJqZjXMYHJqnOXzlgOwdOZKXG0Gpnwhct25zJk/n3UXnks6mebo3qP4/T4Gjw8SioRIp5JMLfdhNdg5dOwAqXQKq9PCyFA/kmxFlczk5+VxuOUQybgfm82E2Wygd6CDSCSC1+4CXcdAdt9B24kWkqkUkiRzYP8eykuLmRqdIpPK0DhzBgB2q53RiXEsNgtlJeUU5hYwOjqG1WKhoqKKSCyKw+1mYnQCSZJ46tmnWLBsEfvuPcDw6Cguh4tUJkV1Yy3jQ5OoksYzG57mXVe+myOHD1JRWUVhYRHD4yNINgNYZZpmz+FQ6wGMFhORcIQZTY1MTk3gtDtwuRx4czzMaGhiwwMvYLQYcRmcLFmwFIDysnJOO201DruD8rK/fZ0I/55ET+EtMnPGTIqLS6mvzX7BlFdUkl+SR06BF6fHiY5OWUk5dqcVWZJIKtmx9Gg8SjwZJxqPoGoqOjrJVBxN11DU1Gv+rYNH9nPH3bcTjZ2sLVxZxeyVs2ha0MiVl19D44wmLrrkAs5adwaLF2U3MK2auwaXZiERjLFi6QoeefhB2g52YBjXmBiYYv6Cucw5vYmrPnI5M+c0IGuw9ZWtjHYNISkZ8vK8qGmVopwymls6efAPj7F3zx7+8Mj9AHR2HcNi1OjrOYE/MMXk5CipSR/WlMpYV7Y34RsfJt/hptDjoaS0nKc3PkZxRTGlVaXkOnPJzc1jcmiCsd4xSOiUl5TTcvQQ6XSaZDKFGkxhszuIxeMkkymSaoqKsko0DRRFQ1V0rEY7mYwCJ7PAyifrYVaU1yDLMgaDgVmz5mE2OZBUkDQdXc0+Nh5MoqY1UrEU/QP9lJbWEA1HSCVTmAwmcr25OO0OjGYTZouZJYuXERifyOap0CE/pwCvI5dgnw9N0TBIBubPns8jDz/At775Nb5x65dIp9MsmL0A2WggoaVoaT1KdUUtsXSanuFBuvsHKMgvpKaulqKKfHKKPYRiARbNWUx1WRWL5iyipLAEAIfDwYc/+BHeff0NmM3mN/iKFt4pRE/hLfLh99/Mu665EbcrOwlpz7Vx/scvIJlMMrthKQbJwNwzGjE3ZhjpGWP5nJUoqsL+/h1Ibo0cby5mk4UNm57ny1/7Ap48N7/4ya/Iy4WW4UNsad9AvqWQcxsv5QM330giEeehZx7gVz+5m96pLhpOryIRTTI40Y8n38NZ55+JJEls37YVgFQwyMqZC6krrGTn8eMoioKma6RjKfo7Bli0+OTOcAnsFhuWXCtKUEPXdCSgrqEeKQxFRaVcct51/OjHP8ZsNTNrZrbecmVZLc1tbnLcBbicbjRVw2qzo6oZ8k4ujzRaHUz6RgnFExQXl7Ji/hp+9YefkslkMOkmDAYDuTk56JqK0WigfeA4Z5x1Nj+7/UeomkpOaS52hwPVJJOUNBwOF0aDEa+7gKGhOEomQ35hMXl5eUwFg2iqRmFJdmNaQsmgpEGSIZFMUFhYjNVuR9V0auuyJVq9OV5i0Shms5nKikoGBnoZn5hkasrHrMY5BENBUrEopfkFOFwO5s2Zx09uH8Rhs6ApUF1ZiaYomGUj0UCY05afydzZ8zm0bx+KkiGVTqFpGnOa5lCQX0gylSCVTOFyO/HkeLLpVGQwGQ0sW7iYvQd2IUkSiqIgGyW8Hg+ZdIZk8u2diFF4exFB4S0iSdJ0QAAYD46iyRqySZ5Ovd0/0YPVYcHusbNx6/O8t7SUqcgEGHS6x7I7jDdv3UQwECKVTrFp2waaGuayt2c7kXSQWCbCyOQQqpZNypdKJdm451kqy2vQNA1VVQmFQhgkA9FYNDsU5fMBEEskiURjjExO0tXey2lnriIc8HHwQDPllaVM+QI8/rsnSSZT9Lb3M+fcmTSUNRGKhUjGU4RHYqhxBX/IT0lhKY2z5tDWeYKGpmx500XzVjGzYT4mkwWj0YgiZbDNKMU/plA2O5vW+Ywzz+f23/2Iyro6CvILKCkqYdOWJvbt383lF1yJLMuctfYi7v/9fZjddmbOnE2lt5p7f3sXmUyaqvJahof7MZnNGIxGTLIRX8DH0FB297tsMNDX101fXw9KRkHTdIL+7EqdoZ5eNFUHTaW/r49Zs+fhDwRJJpLT78+CJUsYmhqluKIcSZK48T3vY3iwDx2JT37qM9jtdlweF6FAiMqqbDBcvPA0jrYfR0YiEAqQm5eP15tHIBBkxoyZAFxz3bspKyuntr4Bq9VKQ30jX/mvrxMIBjj37PUEowEqSssJTfhprG9AkmSWzFnMJz/4Caw2N411M+kZ62bWvLnk2HJYvGgZ8dif5qAE4a8RQeFtYmb5HAbH+knEEyyfcxoAZ8++hN88cTu+oQA3f+EL2EwOmDQRjkZYNCP7JfPuD97A8kuWcvxwC+ecfj66rjPLM4MizUXXxCAzqpv4/jd/xA9+9R1yCz0saFzKkobl/Oz+HxAJhii5tgSzwcKRbc1s3Po8a5Zm0x0sX3Y2n/7SRxidHKesqgK/cRItV2HRxfPpbR5goGeAnvY+AGatbKSoNJ+EksDldaGqKnpSJ56IMzw6SGFeEf6gj2Qqxcj4yPQx22x/KsqTyqTxhX2EU1EmgtlsuEMTA8SVGL6Ij0gsjM1iJyNncBa6sebZMRgMaKqG2+0m35tPsauUkZEhbBYrMhI1FbXU1jbhGxtDNsjEYmlm1DVSlF/KQH836Uyas087h4qKKiwWE4qikJ9fAIDVZiOjTSBLMoUFRWSUVLaokCSjZLJ7GVwuDxarFckgk8lkCIQCFBQWYZBlRoYHyS8oIBIKAzr9JyfYD+3bSyqSxOQwsWLhCvx+H319vcQTMXbueJX33PgBbDY756w7/8+uj2VLV07/d647D/9otsBQe/sJdB2MZhcrFq1FkrMf6TOXnM3s2jmUFJRhMppEUBBeNxEU3iYMspHzl136Z7+LTIY58MJhMpkMf3j0AS676ApaDjYDEA+muOaiG0iao9TUVpOT7yUcCpJSYuR4nOTnzSQxFsFoNNIz2E4yEsWvKrQcbKbQXIQylcJmtHL/87/htv/4OQ8/8jBDg0NMjfr53Ce/wsatz3H40EFUVae4uJA8VwFT/nFS6TSKpLJk9lJcdhcBf4BVS9dQnFfC+OQEvtAENtXB6EAb+fn51NXOoHu4k6svvpbnNj7DGSdz7PiDPp596Qnyc/M5/6xLcdgcFFqLGfENU+LK7mWYXTePFfNWUZxfgteVgyRJNNbNJB6PU1FehaZrnHvOOnpGunA6HcTjcebOXUBJRTlTUxMUFZcwOjpAODAG6BQVViNJEpFggGRcyab5yMnD75tERsNkkND07Pp9v99HKpVGIru+v6yqEotsRpe06d2/H3n/R3G73CxasBir1UpOXg4mhxmz0UJtXQORcBiT1Uo0HKGiugaAeQuXsn//XixGEx+86WZcLhfnnXchLceOcu11N7zu6+XiCy7j+RefYfXqM/6U8+t/1TKyWWxUllT/nVehIIig8LaVyqRoGTpMQX0+w62jxJJxnF4nC5ctpON4B+lkhmQqSSqWIJGIMjU1Rb67BEk3MBEJYDOYmByfQkensLCYplmNTExNIksmyisqUWQFVc+gn/wmOeesc3h+wzMsX76M9r4WegPNnLZ+KYe3n2D1ijMYPNZNJpMhoaUo8VQwf9ZCrnnvFaRSKQ7ub8ZoNPGHe/7A2OgYJrORPEcRiXiCHz74bXRZIz6SpP14K4/8/vesP/tCdh14la17NuNyuJg3axEel5dnn3uKYCTIXff8ihWLVxGOBbFaLSTTcWKJKCajme72LvxjfkKTQQyygQVzFvLx936SdCZFQ+0MTCYT3/z69+nobmf2zLmYDDIgoes6DqcXgJxcLxMTU8iyjtvjRtUldED7X2mWZQmkk7URkskk8WiMTDqDrsPoULa3Ewj4yfXmUFpSCsDMGXN4//s/isvhpqS4FF3XyfHkEgtHMRuyE7uaqqADGUWlpfkwq047na9/83t/9/VxxeVXc8XlV/+jl5cg/EUiKLxNPb7lQfpTHdQtraZ+Xj1f+MhX2Nm1iRVrl2J32CFsxOt1M9Y2QDAUZNvze7joJ1dxbPQoGaORUDKKYnZgMppwF9u58OqLCY9Mcd0FH+Tw0QP4ApMoGYWiZHZlyg3vuo7Va+ZSkFvOZHCMdCaF2+2ivqCB+XWL6R1oB13HbrWzdv55pKVwtvaxLHG0+TAWg51YLAa6jqqo1DTUkJeXiyZpSBKY7WYKcguY2ZidU2iobiTHlUNhfiEF+UWYjWZKC8vRVI3ayloArGYrJoMJs9GCyWjCaDCS680jFotRkPunXD1zZ82b/u+O1haOHNiJ0+WhsKCQdDpFjqeQdDpJdU12U1xRSRlT40Fkg47T7QUk1CRk0jr5M7LDRwsWLWHMN04mnWbVaaeDDI4cM5qi4i3K7gB+4unH2L93DwMDfXzr67dhMVuor2iYnsMJhoPYXHaMJiNuT/Y5tTW1WK02LGYLRa9RIEoQ3moiKLxNWc12lLRKJpnB7bLjdXlIxBLIZohHEzg0D7IkEwqFyWQyBEMhJv1j2G1WQkkZHZ2J4CSvnNiAP+7DYjJjtVs4MniAjsRxnAVOQiNBTrRmC9Wn0wkUNUMqHWfujKX0THRyfO9xMskMyUSChoZZ9I13M6d6IWedfhapVJJ9B19kbHwMZAOrV53J0jmr+N4Pv0lRcTGzGmaj6zp1ZTX0jfZw2ZXXUPjBAgoKs2mdM6kMubZ8nCYvuqajaRqrlq9hcnKChSfX1aNLBIMhNLuORHYX8Ptv/CChcIjCgtdO4DbQ24WipAkGpohFI0xMDKMoGUCmu/MYAL3dHWR7D3Dk0D5MJgtKRkPTNAb7+wHo6euisKyEdCrNU08+ytwF89E1DVmWOHwwW03OajKTTiQYGx4mmUiQSqe54+c/JZlM8uGPfJyikmJyvF6GTAZc7mxQqK6uoyA/H4fDidMh0ksIbz8iKLxNXbz6SvYf20MyPcqlK64ho2TY9NzL+ANTpEIqD/zmUQ4fPsgj9zxMOpOhrmoWuaUu0qqZRHiCDc9vZOGK1XSMnEAHRgf6UXo0YjYdVVWpWl7DgW17uWr1u1E1lee2bCCajKLHm7noOjtxe4LS5eUk/BrFFeVs69yCbLTQOngcWZbpOHGQ2rwSqryF+HwRzlpxDl/62n/RWDUDVVcZD4zjtrpZteB0brj8vf/n+DKKgqqqKEoGXct+ISdP7k4OR7I7uv0hH6FwECWTIZqIkmu2YLFYKSz4yzUaKmrqOX7sKPkFRThdbuwOJ5JsIpNKMHP2YgCWrTyNlzY8h0k2snT5amRZJtfjJJXKsGxldkK3KL+Ywb5+0okk62/9IU6nE2QJXdMpLc9WOzv7rHW0HT9GaVEpRpOJyclJJibGSSUT+HxTlFdUIGmgazA5PgZAT28XyWQSTdcZHhkUvQXhbUcEhbep0alhEulsaUir2c745Bj+wBSarqFJKolEnO27XkFVFdB1evo7SCRTxJJBdC1NUYGH7o4e8mZ4s3V9jSqtI+14ur1oZg1HhZ286lyajx9m/XkXoEgZPLkeDh7fj6wYMMlmBodH2LFzN/lF9+KpcBBNRPDYs8to3TmFjA6cIK1kaGiYi8vhpqi4iLHhYTKawpWXXU1RXhHVVdWk0+n/s1lq3pwFOOwOPB4vdnt2FdLlF15Fb18Py5euAKC2op4zl5+N3eog15P3us7bM08+yqaXNuByubjw0mvxB6bwT0WQZJktmzZxwcXXsXXLRgIhH5IkcbzlCEajCYtmwGYy0rz3AOsvupq+3s6Ty3N1ujpbqW+ciUHL1l4OnVy2+/Of/QA1rdPWeoKRkSFkgwF/cAgJiT37tzJ/wUKMshWzbCcRy05gr127jv379uDxeFmwYPEbcakIwhtKBIW3qZL8UhbOWEIoFqSpeha57nwWz1xIR9cJShrrGJ0aIp6JccbZZ9NxtBVHYR6/3XQnuq6T9sfpaOlk4YqVpKUkvrEA2x/fQ4FUwHO3P46Gxqx1swkn43zi+v/C684lMTFJOJMinUozv2oJsyvm858PfYrcvFzmzZnHvDk1jI/1I5nM6LrO2NQUn7vte8hIXH3pNZy79kJcVhfBSR+qrDFvzlzyvPl857av0tffz5Ili/joB/9z+vgMBgMzGv68rm5DfQMN9Q3TP5tNZhbNWvJ3nbe8vHwsFgsOpxOzxYLb7UHTVCRdx2zJBiarxX5yPkTGYrXicrlRULPlRA3Zj0RGSU/nmwqFAoyMDmV/liQSiezyTt/UBF53Phoag4O9nGg/igTISBw+sg+A5iNHMJssdHd2AtDX10sikcRgjDE+PkbJyUlqQXi7EGku3qZMRjM3XfQhPnXt58jzFBAITOC2ypTn5xLyTXGweQ/pRIpMQuGaq67gxhvei2yUMRgNRGMJ5p+9AKwqRrMRd56LiC/BgjmL0HVQ0gpGn0wZRSxduJzOzqO4DElybRpOTUJTVFw2N2tOW8Oy5UsoKSxGUpLMr5tJjsNOKpVg284t2SI0msaru7YCsH37K8iShKxKbHj5eVRVZWBwAE3VaD7W/C85bzd98BN8/Zu38aOf/hK7w0FObj7e3Fzi8TDrzr8MgPqGufgmwwSmolRW1VJcUkZMTzKVClE/K7txbsWq1WiqgiTB2edcwKL5S8hkMiTjCRYtyAaqOfMWMj4xhM83ysqVZ3DJhVeTSUuAlaULVwFQVl6GyWwgLz+blbS4uIRYNEI0HMLj8f5Lzokg/D1EUDgFKIpCa3sbmYxEJqMSCkWpq29g+bnLKKssgiSUOMvp3tONr2uCyvJS7AYHiyqXkJ8uZPLoOKgay85cRc1ZDcy4cA7uIg8Gg4FDvfvZNLSJoN1BOq0QDsX59d3/w/lXnMnOA5vx+6cYHhkCq4u+6ART8RgWi41PfOg/cDtc2MxWLjn5ZXv9u99HOBZBNWhcdN5lGI1GVq5chdVu4fTT1vxLzpXBYGDx8tMoKMregYeCAcZHR0gmkjQfOQDAq9s2k05liMcT7Nn5Km3HW0hn0oBGy9HDAGzf+gq6rqOqCr+779ds2bYJJZVBU1V27chmHT24byeZTApVUdi1cxv333cPbkceHmce27b8MTNpAKc9u6Evk8nw8EP30XaihUMH9vLSxuf+JedEEP4eYvjoFHD06EFefnkDRqOR01Zdisedh71Cwm1woCkqv7j1N1zwrinGByeI+MLMLa5kdvVaYu4otaUNqKkM5y86g2OTrbhr3GiahjevlA9deDNPtT9EcW0hBrPECz96gvXnXcMvf/sL0skUkXiYNUvnc+5Z6wnLk+g65JgspFJJxsfH6DnRBZrOnXf9ivdc/wH27HoVLaUgW2Hnnm1cuO5SlIyM0WAjGEi+JecuNy+fs849n+6uDs674DIArr7uBm7/8ffxeL2sOeMsZIMhW6EtFmf2/PkAVNbVc/zwEWRZZt15F2N32JAN2R3NRUXZlU+yyQQZBV3XmTlrHocO7cEfmMRhd01vgktmErhdXhKxGEajkVg0iqapgEQ6k3krTokg/FWip/A37Nq1CwD/yZw4bwW3x4vJZMJms3PuOeezdu1ZZBIZ0skUk6MTjIwM0VDTiK7pVJUVkU4rjI0OERj3kYjFmBqbwGY1s2reGaQTGWKhBKuXnUlBQREOxUtwMkTbwS7ikSjJZJSauiqMZiMlVUUY0MnJyUVTsnUMlHQGJZPBYrZkd9BKTJewtDkdmCxmHF4nsWg2I6ssZR8kSX/5+N5s73nfx/j6d37CjKZsapCBgUEUFZLJDD6fj8nJSSangkSiSTpas2P/Az2DhMIJ/P4Yo6PDxGNJLGYHVquTUDg7p5CIpzEZbDjsHqLRCAsXr6S1o4WRSD+uvOyEfGFRCTWN9Sw4YzGKqjBr7nwCwTjBUJyamvo35Xh1XSedTr8pry2884mewt+QSmXTUbe1teFwOGhtbcXr9f5L29BQ38hHPvRJLBYrTqeLQGiKofZsvpztz+zils98kfseuJeO1h7GhycwnmPnuqsv4Lf3/ILHHv4uGV3D/P6buGHhOfRvH8YXmOR7LV+j8a7ZXHf6e/jIZ97NyOgwJVXlXHPtjcxcNI/bf/cdwlEf1tLZSJJEgaWMnTufIzAeoOmqJVRUVHLFlVezc/d2Pv/ZLwPwyZs/i2JXsNvtXHrRVQBcf927WbpkGXV1b84X4D+ioKAAs9mMzW7HZrdls4pKMpqkYTKZAIjF4+hkJ5qHh4YJ+P1omoosy8Tj2aAgyxK/+fXPcbtcTIYC3HPvL1hz+VpmL52LpmlMhSZRVZX6M6tIyRmeOPAAjz34CIqiATq/f/A+li5d/k8dS+dAB5397cypn0dlSRWxeIwrb7qA0YFRbnzv+/nMx77A9mOvcDS8D13SWaEsx2q08d2ffI1NW17m3LPW8aVPf/2faoPwznJK9RTuuOMOqqursVqtLF++nH379v3Fx/7mN79hzZo15OTkkJOTwznnnPNXH/+XrF27FoCVJ9ev22w2xsezCdv27dtHR0c2W+mbfWeWl1eA0+kCIBILkVGyyzy//5Pbef9HPsbw2HC2AllaIZyIYLGY2bTphWxqhozK0xufZGh4kNHRERKxFOMjEzzy3P34Az4GhgazcxWpGFazzLObHkOXNFSDysHm/ei6zp7tmzAmU7jtRp554g8ADPYNEAvG2PTSRiBbmCehJwinI4z5Rk+eLzvz5s7HYXe89oG9BW5634e4/X9+zT33/R6vN4f8/AJ+8KPbueyyy7nr3uyx/fd//5iCwnwWLlzAVVdfxwUXXko8mSAQCnD2yWR1M2c24fG4sVgtNDU28omP30JOYe50kSF/xMfoyDCqlK2Il1ASXH/9TZgtMlarkU988j//Yhtfr5aOowyND3Ki5zgAe1p2MjY4RiKaYOv2zQAc6NuF3WXD5rHSNdaKpqnsObCHaCTKqzu2/tNtEN5ZTpmg8PDDD3PLLbdw6623cujQIebPn895553HxMTEaz5+69atvOtd72LLli3s3r2biooK1q1bx/Dw8D/096WT4x/V1dUsWLAAgPr6+mxOe2DPnj0cPHgQeOOHmjRNo/3ECYYGBgAoL6mhOL+KqWCIWCp71/qT791BZXkpNXUVVJbVYDAYuflTn0M3Suh2AzNqZlBfP4PVq9dgMEoUlxeyaPYy8nLzsVutKJqCBRmPJ4+brvowSlRHDYHTnt11W1HVwPDIGMPDo9TUZ5eSLliwmLy8fE477XQAmqpnUVfRwJz6eZQWvH2XWkqSxOIlyygu/lMbL7rsSn7w019SerIiWSaVYeWSFSyYu5BIOMTmLS+RiCdIJpK88vIGAF5+eQv3/e5ennzqUQ4cPMLdd/6KTQ9toLOjnWNHm2koa2RidILtj7xKz9FeCrVSnnryMWQkZp82j/ueu4up4NTrbreu6yipOJrypxuQ4oISJibHKDqZ9mPVgjXMWNhIVVMVH7zpIwAsrlhFz/FeBtqGaSyeiywbOGPNGSxYPZfLLrt8+rU2bnuB57c+O52mI5FM8Nsnf82Gnc9OL8+NJaLZwHMy6AvvPKfM8NGPf/xjPvShD/G+970PgF/96lc8//zz3HPPPXzhC1/4P49/8MEH/+znu+66i8cff5zNmzdz4403viFtys3NJTc3l6GhIVauXEkwGKS1tZW+vj4g25MwmUxkMhnS6TT79+//h/7O8OAAx48cRpYNrDpzLRarldt++n2ikRgHWg/xqcs/D8DaJWuJx6LkW0rYv38/Hnc+l3zkao4M7UV3wsGDB+lo62VqIkQsnODh+36PfzzEwOA4mUyaQDrIqzt2oCgKY8cmUVQF76xcDhw4wN49r/LUY4+i6zqyvQSD0YrVZGXJ/GWE/eHpY1tWm037feTw0X/+BL9F0uk0yXQaq82B2WKlta2dZDyJ2WIik1YoLcue3xn11Vxw3hmYLSYOtxzHIEvYimz4kmPo6Dz81IMgQWtnL+19/Rzc2kyewYG3KIeyWZUk9SS/e/oe1sxa+7ra5bBI5LsMaJrOcEBF1XXuevyXhP0R+vp6+chVn+LQ8f30DPai6zo79u6kNLeKR57/AylXDF3TeealpynPr8AvTzBn7SyCvkn279/P/qN7yW3wYrVZuffxe5hXvYBndjxKYXU+nRNBkhvTlOVVcrB7L/0T3dgtTs5bePH0zdJbJRbL1suOnNwF/7/pus6ik5UEhdfvlAgK6XSagwcP8sUvfnH6d7Isc84557B79+7X9RrxeJxMJkNubu6b0kaTyURBQQGtra0sWrSIXbt2UVlZiSzLRKNR4vE4JSUl/9BrpxMJjEYjRqOR4uLi7Fi4w0YikcTmsFFcUoyEhNlkIinLuFyu6b/lPzyJqimEU0HyC/IwGrPlJiVZYmi4n9LSUnRNAx0UJYOqZLDZbCiqiqbphEJBSkpKmBwfhZNj7OPjw5SUXEwqmZxOVfGPHtvbUSgUYuasOSxYuBhZlpEkicLCQs5ev4pINMzVl7+PkpISTBY7w6PjFOTnkpNXwuo1Z7Pj5ztRkyqaArNnzKe4tIhwJo3T5aSgoJCFDfNo/u2daBkVo9lEbVn96z53Rj2JQY9jMEgUFeWjI6Hr2fdOB0pKSjB2mqYfbzDKlJSUYJBN6JqOrusU5udTXFSMmlay6UUUnZKSEqxtVpSMgmpWMRlNlJSUYDFb0dRsr6GosIiSwhIKAgUM+wfwuDyUlJS85UFhdDTbY/lL5/Ctbt+p6JQIClNTU6iqOr0U8I+Kiopoa2t7Xa/x+c9/ntLSUs4555w3o4mvqbi4GIvFgs/nY3h4mPLyf6xYellZGdU1NdjsdnLzsuke7v3p79l8cCNnLDqHktxSMpkMgxNTdHd38573fXT6b1192nt45JX7Wdy4nLqaeh575Ck+cfMHiUXDfP97P6GhcSY/+MZP+Z//+RFLFizj3HXnI8syq1aupLe3mw984COUl5fzoY98ih3bN6NL8JGPfZr8/HwamhoYHR3A4TBRWlqKLMvous7RQ/uwWW00zs5mL9V1nYnRYXLyC/8s3YWua0jS228Es7Ozk4KCAnJycqZ/19y8jynfCBklw/G2/Vxw4VX09Q/wpW/+GJvZwmf+68ts2vQctWXVuOP5WEwmykvLGBuboPGsJrweL6qq8uqWzWQyGfyuCcxOMyVVxa/7utB1nUwijGw0kWe2A/DhG25my+5NXHTmZZSXl/Oeq2+iufUw0ViEz3/8y+R4c5k1YzYPPHAv8XAc5/kuqqqqGOweJZj2oaUkSq4t4eILLuGGWy7H6TVz/mlXUF5eztymBXzjB1/DYrZw/W8/SEFeASF1Jr2+DmbUNVJRUUFGyfC7F+4nEPZz44U3UphT+Ka8J39JJBJBkqTXPIe6rk8Pewmv39vvE/kmuO2223jooYd48sknsVr/cjK1tytJkiirqJgOCAAFOUVcd86NlORmx8V7errZ/MpmjreeYMu2LdOPaz/ehjoOo13ZOyq328P9v3uUJ57YSENjtvzj2WvP5cnHN/Dlr34TWZYJhYIMDXSjphMc3L8TgN/c+TPGxyaYGJ/gd/fdAcCLzz/Gwf07+cMDd/PS888A8NwTD/Pj277Ff3/7a2x86iEAHr//V9z5029x+7duIej3o+s6t//iu3ztu5/hZz/7NgCJRJzf/fp27rz9+wR8r3+c/Y2SSiaZGB1BObl3IJVK8dKGx2k+mh0Wa2qaj9uegxEzK5efDcCs2TMxygYURWXnrlf57Ge/TE1tFRlFIZFOMzDUTU1NFTa7Denkstyrrr6O/JoCDLkGNJvKob59TE6O09/fg6Zpf7WNkiRhtnswngwIALFolIaqJiKx7PBJT183sUgUNa1wrK0FgFf3bmZyaIKQL8ijzz9ERskQVUNY7GZMThl/ZIoHnrwPq8OA0STzyt7snMmDT91PMp4iFAqzYevzAJzoayaYCNDcewhd1xmZGuFw+2E6Bjo52vmv2bUuvLlOiZ5Cfn4+BoNhetXPH42Pj1P8N7JM/vCHP+S2227j5ZdfZt68eX/1saeyurp6Lrn4UgaHBjlv3frp35eXVdDV20FFedXrfi2Hw0lJaRmjw0PMnr0AgOXLV/Pk4w8jSRILFy0DoKyskq72dswWC9GT+xImJkaRAE3TGerLlqAc7OtCURXSaejubGXh0hUEI36MFhPDY4NomkZ3Ryttx5tRFYWWw/s5/ZzzX6tpb5rmfbsZGx6k4WTv5uWNj7F39xYsViv/9aUfMjk+xmj/JJqm8/KLL7J69TqMmsbC+XPIz83jsquv58EH76X5YAsVs6owGSzMalpAX+8A5R7wuHPx5njZsX0roX4f8RNRDCaJvJU5vPD8E8TiMerXNKAbNFbWnInblvNX2/tHFSVVqJpKeVE2c2tleRW1dbUklDgNdTMAmN04n1g4RjKe5MPv+TgmowlTwkrLK614vDnkuwu5fP1V7G3Zxoolyyj2VANw05Xv5be2O3G6nVx87mUALJmxnFgizKzq+dmblfwyls5agj8cYOGMBW/gO/In0UyIWCZMrqUQk8GCqio8/sDdZBSNectWYzKZiKWjjEWGKHKW4bS43pR2/Ls4JYKC2Wxm8eLFbN68mcsuuwzIrsjZvHkzN99881983n//93/zne98h40bN7Jkyd+XWO1UYzQa+e63/m8Fr9NXncWi+Utx2J1/12v99r6nCAZ85J+sWzCjcSYVZWXoqkquNx+AoeEBEok4KSXBgQObuPK6d2O1pbn2uvVs2LqdyoY6dux8mYc2PoPZbKSypIRPNs1m19Ynef/lV/HqzlfZPzCGLMv09vbS0TeA0SDRMGsuAEePHODZJx/jwksvZ+Gi7Hr+/u5OUqkUM2bN+bvOTyaTxmT609BVKpkEScJisQCgS5BKpadLWprMVpBAkuTsxkGrHaTskITNZgPA6XQwu7ERSZLoOHGU4uISMnaJrsF+kOBA8z6sVgsuay6yaiI4GaY2txxXoQdJ1lAzOs/vfZJ1lRfjKTMRSGV7SCfGjrKi5szXdVyN1U00Vv8psaDRZMRd68CQ1OgPdFNcUIIS0LDrHuw2D5lktidkiVrp3N2D0WjC7/ehpVU+/NGPUl5UTigSAqBzsJXzr1+HJEkcGdnLme7zcMsa65oWY7XnTF8rN11409/1Xvw9dF1nKNKFqisoWpoyZx17X93EL3/+M3Rd54OSgSWrTufY6EECiSkmIqOsrH59E/fCaztlho9uueUWfvOb33DffffR2trKxz72MWKx2PRqpBtvvPHPJqK///3v89WvfpV77rmH6upqxsbGGBsbm76j/XchSRIup/tPdXxfJ6PROB0QANpONJNOJkmn09M5hLo729B10BWdY63H8U8Nk+dx4fW4KS8t4dFHfsOzzz9GMpkiHk8SScZ58tG78LqceL05NDXMoLOtFUVRuP++u0EykFF0fnvXTwH4n5/+gP7eHn76o++jaSqDfb1sePoJXnnxOY4e3Pu6j6Wj7RiPPnA3B/ZsB6Crs5VvfuVTfOPLn6Snqx2AjRueZfMrm9i1Izv0Jmk6sWCCeCiO0WgmNz8fWTIQTyQpLa8EwGKzMTI1Qf/EKAXFZdTWziCTVigoLaCgpICCvMJsWU5JI6/SjdVj5mOf+DSLZi8ESSIwFMFudHHpJVdz5op1SIpMLBSnPKdmuu394z0EI77pn3VdJ5lJ/MWxcl3X0TQ1m7fp5NLSSDQ8/e+JRCLbdkt2GFWWZQwGI+lUkngihqarJJPZlCTpdBpN09B1HUk/ef3o2Y13uv7Xh7r+kv+/3a9n3N9isCFJMhZDdtistLwSu92G1WqhoDg7wewwOzFIBuzmt89+mFPVKdFTALj22muZnJzka1/7GmNjYyxYsIANGzZMTz4PDAz82RffL3/5S9LpNFddddWfvc6tt97K17/+9X9l009ZmUyacChATm4B566/mJc3PsfUxCg53mz3/MKLr+bpJx5ENsrkOG04nDnsPtSM2WTicEsLs6vyuPK6D5COTZFIxxgdmiDHk8fmHc+i74jiG8ugAdHoFCtWeYinkuzaNo7H7eGppx5ENiRIZBQk3YymaWzZ/CL9w72UFJSiZJTXfRzjI8OMjgxidzhZsmIN7a3NJBPZL762E0eorW9kYmycTCZDb08nNU0L6DhxjExGRdMS9Pe0E45E6R0YIhSNcccv7uA97/0oPX2dDIfDxKMJ0hYJKahS3VjBiWOdoMNzO55kZHiY9ZecR/WCGlRFpWegg7wcL9ue3EVoMsjUiSDOz7kJRyM8+LNH0TQNezCXa6+o5OndjzKVGkbXdC5eeC1FOaXs79tF90Q7DUUzWVK98v8cq8Vk4V1nvJ+p8AQNJdkexFc+/3V+8vMfYrXYmTcnm9vpS7d+ndzCXM466zy8Xi92u40PXvpePA43jXWzWfP981g+ezU7D2zF6XYy89xs7+25V3by5MYnyfXm8ovv34nVantd70E8EWPnzsfIcTkoKJlFVeUsfLEJdrdvR5YNrJ21DpvZTt/gIQZHWqipWEx56Rx2N+/g9jtvIy8nl5tv/Bz5M0p4au/z2OuLsdhslFRUZYeTHnyIscAkN17xQXj7bpE5JZwyQQHg5ptv/ovDRVu3bv2zn/+4V0D4x+i6zqubn2ZsdIC5C1bhdOeh6yp5hUVsePYxDLLKseYDuBweQCcUi9PV1Uo0msAgZ7CYzQwO+nnu6fuwG3JwOD2MmsaxutwEYn3IBpk0cYKBEM8/+2PKPTloaAw0+CksKmPrS0/itVsxGjIMjwbp6epg/8FdKKrK+MQ4806mh7jv7jtoP3GC3PxcPvvFbxGPxfjDvT8nk8mw/uJrqa6bwejEIH1j3ThysneRc+Yt4/GHs5Pg8xZlv1i9eR5C0QBVNdm79PlLVtLcchSPx8Oc+UvRtGyacADp5M3H/EVL6N24AV3XmfRP8pWP3crPH/8RZOd3GZsa5Zxz12GyZZeJygaZwpIS5i9bxB+eeBJ0CIfCbNq8gd/+7q7piebjrc381w/24i6xU1pRDDLc8+ivGRwaZsmZi7DYTUyE//LmsQJ3IQXuQo51NLP3+C7qyuv5j4/fwsFDB3h024NklAxO1cOMOTMJxPw88Oh9xBIxhntG6Ev00X6sgx9//+c8/tzDLF61GIPRwOYdG3nXpTfx/ObnSWVSjE2O0dXXxZymua/rehoY7iXX48BsNDI+1kNV5SzGw6OkMymQJPzRKcpyKxmdaCeVijI22UF56Rye2PgwBmTCwRAvbX+RWTPmsW33ViYngkgyTEyO43Za2Xv4EMlkile2b2Tl4tWv9zIXXsMpM3wk/OvF41FSqRTJZAy3x4uuayfrFMPocD92h5PsCvls998/MUg6k0ZRMySSCYLBEA6nE1nWQVZJxFLs2vYKSlpFwkgyniYRT2J3lpBSZZKqwvhohOeffwLZZMLmtJBIpYjF4hiMMgYjGIwa0ViMF194HFVVaTtxgEwqjW9iimg0wiubniKVSuB1udm04XEAtu3YSCQR49DRfei6zu9/9xvSGY1URuXh++8GoKu7i3gixZ7d2SGmLZtfJBAKMTQ0xOGDe9i/eztulwOX10lddXbSfs/WXcxZ2Mii1fO49ZZv8vijv+f4qy2cvn4lq85Zxlc/9C2GBofp2d/PsefbOf5iO7Nq53HJhdez+rIVLDlnAeuvO5dde3bQ3dHJVe85h29886PMW9ZIIhlnYsBPIhjDlDbRcaITi83Csb3HObjlCKaY/f+8X/+/gyf24U9McaznKJqm4YtN0jPWxcBUH0arAd/kFF2dHezat5NYLIar0Ml57zqP934yOyR7xuqz6O7uYjw+TG5Fdg5h5ZJVGAwadYsqcedl56kGR3r54f98lxNt2RrYqqry6IYHuOPxHzE0OQRATVUDw5MRJgJR6uuz83seswen1Umhp4giT/b2fmQsybYtLbjt1QBcdcH1mKxm8grzueqC6wFYv/Z8HLlW5i+YS0lRKU5XLmuWL2fWvAbWnfWvXaDwTnRK9RSEfx1Jkliz9mImx4epqG7AarWzbOUqDuzZimaA0866hGDiWcbG+0il0+iKxrzFp/PYo3cjS0YSoQgLZs/GLFmwma1k1CQTw2HO/eqlHGl5AUmWSARMlJWm0GMAhRh0jcDYDj725ZtIRk7gcTk41taNzxdlbLKH4iYb6DYiYT+nn34WP7rtkxgtGkZTjGjUiMlk4pnnHiKTSeN0uLnyyvcAkOP2MjI0TnlpYXb11OJlHDiwD3RYtGQpAGajTCQSJb++GoCa2gYOHT6E2WajsroONaMge224DHaCUnboqbS8jOHBMWRZYveuncxbsIRth7dydHczSLBlz8s0Nc1k0D9CLJAdy28+fpRkOoZv0MdE9wRTfVPc9t2fMzjWywVLT0OWJAyykePtBdhtBlwYkJJxyopL2LtvP2a7hQnfOM2HWwi814/dZueCMy9BlmX6+roI+idpmjkfq81OQ0UTRzYcojivGEmS8NrzkAM9TPmmSDpTPPnYI6iqyiWXX0m+N4+lK5fy3k/diK7rhJIBXtr2Ak1rGlBtaY6FDrI6fRa7d27h9OtXk1Ocw+MHf88nzr6Fj3z6g/R3D/DQww+xbeNu7vzd7UzKU0i6zG+e/jnf+OD3OdJ1iJARTA4vubnFxDMx7r37F+zZf5DS0hJW334W+47v4bOf/jKpcJrNLx9g56v7ue/hu1i9aiVGo4GugRN43TlsfXEnhoSZ80+7GFmWGRkeoneyj/zKPHa2bmXpvFX/6o/LO4roKQh/kTcnn4am+Vit2bvSthMHsTvtWGw2Hv39fRw5shujQcZsNpHOaLzwzKNYLEZMJgM5OS62vLqLyfFRJEnGaDDj9th49skHkAwykiyRk+vmWHs3wcAk2fTaMuWl+fzhwfuwWy0YDDJutwO/38/xY/tBkkCWcLqtPP3sY8RPrs2XZAN9vX0E/JNkMmkkIBgOsvnlbKK+g3tbGB4Y50RzdonsiZZm/D4ffr+P/v4BdF2ns2eA0fFJmluyE8/HWtvxBSOMjPsIBoLE43FSiTS6DhZDdhVTQXFZdje4JFFYUITXm0Mqlp4u9VlRWsVXbv02OtlhIVmSqayoQlEUiuoLACibXcbwxBBpVWEoMomm64wFgsyeM4uq6lokScZstLBz93Z627qQkZFlGbfLw77WXWw7spm9R3YRi0UZ7GnBqEU51rwHgN6hLg7tOsSmF1+ipf0o6WSK40db6W7t59VdW5EkCaPRyGUXXIEkS4SDkWx6dEXBKBuZCkyhpTWyy64kTLIJRVEI+6NoqoaW1NBU5c8mimVJJp6MTa/i+mPO9HQmhaap2eEiQNEy2UUKgK5ln59MJbKPl/60EzmdSp+cjM7OcauKQiKZQFEUorHsopGMoqCq2Qnxf3D+W/hfRFAQXrdZc5aSTKWIReMsWb6a9edfgybJaBoo6SRz5i0jkzGSyRgYGBynrrqCJctXYzKnicQmGBryUVxchhrKQETj0L42bGYzsxeswmTSSaUjHDzSTVFxEdGYgiSZaG0dwGIxs3TRuaTGVeIjaQY6p7BaLFRUzUAnRTQSIp1RMVtsmAwyRoNG0B8lkYgzMTEOZhlPrnt6JU0o9KeEhVNT2YSKiqIC+p/qL09OgA6qpjExMcrY+AiJiSDhgQlyTdlhE9/EJBN9E0hxiXVnX8Dw0AAF7nzK8iqoLamjuqwWSZLQDRqHduyjt6cbj8vD8kWnMd4TZMYZs0A1k5uTh9vp5Qe3PcBnvnU7oVEDqqqRUlQ0sxt3XhWqrmMwGwhM+fjF9+7iQzd8BCWjoMVVnnjoD9x66+eZ9AUIRMK88MyznLtqKc279mOxmrFYLDyz8xEOp3bhLXViNBlwupxc/elruP6zN2DymLjuyhuwyUYe+sEDPPbjh5gcm+Rj132a5371Art+u4fDD7RgNlq46MKLqE0XMzNVzvqG87FaXax/11rqltVQOquYaDzCzPpFJCaipBJJLlx6KQDPPfMMGw49zdOHHmJ/xy7UhMaelkPkLvKgV+nEkzEsmo2L3nURp190Os88md1AV1xQwvGxYwxl+pnZNAePx8t7rr0Bm91CRs0mBqyuruEDl9zMwtIVfOSKT/+LPg3vXGL4SHjdwuEUbScG0DSdQDDKyEgPNQ31qIrKkf0JZEmlqqwMSZZoaohy8EgHrS278Hic2KxGXE47yXgSl92EpkosmNvEniNd9HUeJD/fRW6Og7rqUjy5edTWlGMwGFi7eikvbNrHppcexp3jQtM0amryKC6rpW/gBGazCdnrwufvZGx0ELdTQjaYSadtzF+0ip/97DaMFjNGsxlFNiFJEmeecwEvvfQiAOvOvxRJknA6Xfimpqg7mQF27Tnn09rWhtPpYNnybJK/sopKJicnuf49HwDgS1/9Jo89+nvOPmsdAFde/S5GA0NsfGEzsiRz9PhBTl95FsePHsM3GSAYCJNKJmntPIHFaSWTVFFljbPXnMuBA7sJRSLoChw8fACnxYbBI+MtyWFwcpBlS1Zy2HSIxvqZLJm/lGdeepotz25jZk09DqsTHXj+5U048pzsfuoVwsEwfp+PlEWiobYae4kdd44TSYfeI4PE0gGKjPnoGmw5soGSwlKMSGgnaz3cc/8vaGk+weTAOKMdg0iyhKqpbHnlZb72qU9jNZvpHOqivnEugxNDTIxMgq6z+8hOHt/wALLNjB6EZ15+ghlVMzk+dIjSRcXIsswTux8mP1pO2prEW1SOrusc7NzHixtfpLq6loryKpwuB1OBSbbv2cKlnzwXg8nAK80vcP0ZH2LH3ldp72zlV/f8D3f+6F4kSWLVitWAmGB+I4iegvC6BaZTguuMj49hMlmySdVOJsVzurykMxkURSUUiRKOxdB0AxlFIRqPkUpnOHTwCKCDpDMx6SOVTpNI6cTjCaLRGGMTfnZs347PFyAUCtPXP0wqnSY3p4hkLE0immRiMsCu7duQdCMSBlKJJMGT+wkUBUwGE5FwimeeeIwFC5ZgMcoY0IkEs+v177/v15SV5qHrcM9dd2RXD01Oous6zSdrNL+86UVUVSUSCfPKlo20NB9hYnKKeDzBK6+8DMCMxia+9JVvsnxV9svIYDBwxSXXUDujmlnzm1i6YAUAsxfOpaCqgMVnLMZqszFv1nyS4TgmkwGX2Yksy1xy3mVktCThRIBz155HMBBgsKOPsC+Ix+RhcGgQg8HA2NgQP/7593jplRdJJZP0DvZjkMFokIhn4jgcNgorS6htbKCkupJkJEFHWzeTHZNMDE7Rf2iAkaEhjBkLKTWBblCprWwgkg7jzc/P9qYAi81OWXk5OSX5GMxG5i5emB3+qq3klX176BsdpqCkBrPBTHFBMVUNFZTXlLNmyZk0VM5CTaUJB8KsWXImLqcLQ8xMOqRQ5C7lwsWXsXzxCoKDYQLjISITMRY1LKWypIrgVBBZkTGbLHhcHuxGN33HhvAPB1nVdBYA69auZ+HihVx12TXTw0zhcJjWthN/M1WI8LeJnoLwun3m818hkUgiG2Q+8clb6Orq4r7f/oyu1g5uvOnj5OUXkDQoIKuousrnP/sFouFJIrEMibQNg2TkQx/9DwY7dyLLMqNjAVavWoaSVvD7MyTjcdKKxrXXvYexkQEMskw4HCHXm0MmrhAbTwM68bjK5Ve+C99oG1azGTM2CvJzKCzI5/Ql8zCZjKjJNhatvpTJ4Q6ayr3oOrRkspu5Vi6tJsc9h5HxCU4/+wPZLKhFxYwMD7PyZKrl9esvpLOzHY/bw+lrzkaSJObNn8/YyAjrz7vwL56jQCKIXKaSkqLZZZa2Su760e/+7DGKqlJYVYin0E0qlh0CeXHzU4wGRwB4+IX7+dBVH+Pr3/4cLa8cQDLK3HDzR9m+azPhaIKnn3sOp8tBcVkhBXYXYyczhbrz3USTMRpmNeKxFwASGbuGLmtse2ALkXAUb56X933v/ZgCZvY8sp2cnFw4S2fX3m1seW4H8UQar9dFzaoGqnLK8Yd8zFkwj8svvIbd+3cxOhbht7/5GTk5Xm77zvcoKBrD0G9jdO8wCxYsIseTwxf+46ssOWsh6UyKB37/IOedfiFP3reB1olm0noKrzWPmpx6tjy5G4NsmM5HVldez4ZnXqSqsgpVVTGbLDz/+00kU4k/25E/FO3j+g+9Cz0DOjqaqvH+j76HweFBPvHhT3Lju9/3hlzv/65EUBBeN7PZwje/+4PpnyVJ4qb3fYqZM7OJ9VqO7UU2G0GSqKmp4MMf/w+++7VbMMhmbFYHV159Lfl5bsb6ssM4FWWF1M4+jWSwB5fbjdliIc/jZNuWlzlvTVN2N7bLzqQvwMjQAH8sCl2Q42LLK6+waE45kiRhMppQVJXennZMJiOyLJGf72bjhhcpKzQikZ28TKezq4YsZiMGScbjcrLp5RdZsHgJU/4A8VSaoeHsF2wg6MfpdGCxWpiamqSsrJx773v4b54j7Y8znTr8pY26mqqiJBXQQcucrMoWj2XnH3Qdk9HEsqWrpsuBooPVbqSspJBI98D0azi8Niy6gRTZjXwGi0zVvAq6trXjtgO6hqvYRTQWmd7drKoKuUV5tLYdJ5VK4Q/4OXRiL6qkZNN8ALFYHFwa/W29xJNx0pk0z214BrvdQVdXB5qqEgqGePyJR4iEw4yPj5NOp7LzN2R3QmeUDDo6/mC2dynLMrJBRs/8aTf0/1+Nb2Cgn0Q8zujoCKlUCqPRiMFg+D8pWhRdwWAwoKjZ41ZUBX/ARzqdZnJq8m++R8JfJ4KC8IaZ2bSYRx66G1XN0DQju9Szqq6B/p4ORsdG+NKtP6GwoIAXnvw9RoOBPQdbueS6TxAYd9PdeohQOMTwaIDVZ9ag20w43A627jmC1WLlmhs/SvfxV0kkEjzz05dZf95FOJxWcpw6nT1BzGYLs+YsY+DENhw2B/sObaNu5hIuueIS+tt2EQwGeXrjEQD6esfIz7XR0T3CvOUXoqoq689cisVkomswm1LCbJRZf+YyQtEERsPrH2WdX7+Yj1z2aaxmK+WFla/5GJvdzudu+jIvvbqBGz6ezRt0+cU3MDo+jGaU+N7nfgLAutPX87L8EvNmLaCupoFQLMD2nftRJZ1ZVU2MhYdI6TK1i+vJKAqSRWawZ5iKplqqvDV09HWSyMSwOC285wPvZ9+u3Sy9bDkD3YOUz6xizcyzKCwp4YFtdxKKBbjs+os5caCdleeswD82RnFxMWc0rcNhc3KivQ2DwcDNn/gPfvfAvcxqmIXDaqOqqoZzzz2f+QsWsmJFdu7F7XLz4fd9mC07N/OZj35u+rjrchuJpMJ4rN7XPC9XXnUNNrudGTNm4HD85XQV5yxaz/H+FhbOWEI8kMRitnD7D39By/FmLlp/yet+r4TXJoKC8IZpbz1OOiIhSWYmJ7LJ3bo6juNxOykuKuTg/j3k53gw6mZQJZrqajjttDP47288jMlkwu3xcO66s/ncF/+Lw8eeAVnijLOX8uWv/4rO5peorq5EAq6+5Fy+/O2fsfHhL2GxGrFbS8gpXkDHsd3MnbcAg8HIFRf4mHPaNbQdeoHGhhkoisKlF2bblOMyIktQXZ7HGWeczbaXnyE/J1t8afmi7FLR2ooCEu40mg5orz+lhiRJzK7929l4586bz9x586d/vvOOH9F6NFtn+YlHH+B9H/wEzz75JKFwmJQ/yelrL6C9pZdwKoZskNmxfydnnXUGuqyRtqTRzBokNV55YQsNdY18+cHvcM8Dv2Yg04rJbmbWopmsWX0OOw68wsvPbsZus/HgnY8Qj8VofbmLwJSf5R84i+8+/WN++Ivb2PvsQRwOBzff+Xm8Hi/nrl2Prmt88YefIa/Ky8yFM7nuwhumkwO+611/Xs1w16Ed+CM+nn/lWdaelk01bjZYyLMX/MVz4vV6uf76G/7muWuoaqShqhGA1kBr9nzOnsfc2e/cLMj/SmKiWXjD5OTknEzIpuM9WaDGYMyubY/F4hQWFlNaUY2qa+i6RvhkKUVZNiFJoCgKy5avxmnPIZ1IoqQzTIxOUF5RgS5bppO9SSYXsiwTDCdJpVUCwTjxeJzC0hqikTDJZILu3n5ajx9Dw0QikSAcDjE8lu0FRGNJNE0jGIxx6NB+amfMBrKrbkrLawHIKyxHUTQ0XcaTk80Kq6oqk+ODf7YuP51OkTy5jPWfccZZ52W3YcgSq8/IFoJqmNGELEs0Nc1mfGIcXZZIx1JomkZxfhGpdJp4OI7D5sRqtjHQO4SmaEz5sstse/o6kM0yslFi5OTOYn/Aj6ZppNNpEskEgZCfZCJBOpVmcjI7/DPln8zuKUiniCey75HJZMJkMlNeUonT7qSipGI6ILyW05auwePysHKx2Eh2qhE9BeENU1peycc+/TkG+vo4fW32i+30sy7jh7d9k8rKOpYuX0k0EuaVHYfIpNNcdMUVAJRU1GI2pPEHwpx3/kWoqsb+rYeRJIlQKPuFOzw+xdHmHlRFobg8e5fYNxbGFk0RCUS55oaPIUmQVhXUZBynJ4fzLriIx377AwbVCKlUinPOvQAARbESDhtQFTMXXHAJ4yP9WEwKBoNMLBokH2hrb2bKN4mqasTjMaw2O88+8lPMJhlFk7nkmv8g6J/i6Yd/ga6rrD77auob/7503v9bYHIUu8OcLaRjzH4sBwb7yKgare3H+eq3/5vy0jI2PbuBqYkp1i1bR355HpIko8s6aUOGM1dVkpeTy9rTzgXgI+/9D77+g89h8dq5/Lrr6ers5t1X38hEeJTaqjqKC0vI9eZRN68On3+K8y+7CPh/7L13nF1Xdbf/7FNvv3fu9KpR73KRbVmWu+WGMcYY0wwEh/bCS0goeV8SEsIPAglpL4SQECAGQwDTjHuV5SrJkiVZvUujqZp6ezt1//44ozEOpiW4yL6PPvejmXPPObPPufuetfdae30XLJ67gG37tjCrs5e2lufKXAoh+KN3f5xCKU9D4teXtf34+/+U695wHWWnRMUuEzGiDE8M8uOHvkdbupO3XvkuhBDsPbSLQinP6UvOIhL+zdIddV586jOFOr9XZs+Zz0WXXj6zVHD71q0MD41x7NgxarUae3fvplQqU7Nstm0NqppVyzk0VaUhGWfjU4+TzQYjVl/6hMygpvRA30F86SMUhWe3BNXgdFNFCEEoahKLJTh+ZCearqOoKh1taRKJJFYlj6IKTNMgNz4IgKKogIpphohGo+x45klUVUVRFMaGjwEwPjqIEAJVVTh8MFC409TpNN1pd9LoiSF830FKj+GBo/+j+7Zv366Ze3boYOBGmpoKZja5XI7W5lbm9c6jXKkgfckz2zZTq9lUqzUqtQqe5yJ0yaoLzsbXg4BxIZclrTYQrcaYmggCsDsObsMP2YwWhpjMjvPUlicoiRzxrhCPbLwfKSWPPP0gVb/C0RNHOD7U97x2aqpGOtn4G2sfW06Ng2N72T+ym6FMPwCPPPMAW57dxLqN9zM01k+xVGDzjg1s2bmRowOH/kf3r87vj7pRqPOicv0NN3D9m2/kw3/0UcLhMGefu5oVZ55BY0sTf/SxTwKwePl5jIxNceDIEG+4/kba2mdhOyA9geUGRXDe8KabMXUNfJ/3ffj/AuDbKq5lMzGcpbOrizNXX8PWbVvZtn0rNRm4r+YtP49SPsfoiVH+4EOfAsAI6ZghH1UPRuSvf/PNlCsW5arNeZcGGbhnrLyQVCxJRA9zzuqgaItQIqSSTYSjgTtpzvzFFEoVcvkSi5atBGB4qI9bvv557v75t2fuwc9v+x5/+qH3smt7UIdCSsmeHc+wbfOTeF6wKug97/0IkXCE9rZ2LrsiGLFfcvFlmIbBlVcGM5ze3jl8/I8/zoXnX8BnPvs5dFPDDJmsPf9KLj//KpbMXY50obMpCHB3dHaTTDfQ0NRIU3NQO3luz0I6mrpZOv800qkmViw5HeFo+Bact/IihBDM7VhAxIjQ3dpNd3v3C36urmPhTktWvBCGZtIab6Mt1kx6+n4tnr2MaDRGa3M7rY0dRCNRdMNEapLmdNC+SqXC8PBQvbbyy0jdfVTnRWVWby9/8Vd/NfO7qqp84zv/+bx91lx4OWsuvHzm9/GxEdpbmtE0lQOHg1Hmtg33snTRXDzP597b/5MzzlhJOOQQjobQiVOplHn0oZ8xPDEGCMq5PuBPOLjjYTpaY4QMg7t/+h+8/T1/TCyqYhgGmha4pu7+ybdQ9cD4bFx/B+dcdhP9h7eTaGgmlvB5Yv1dXHTZdfS0txOPJ8lkgxH87T/6Fk4tELr70fe+wkf/z99z7x23ENJUMqN9DPYfpqWth1v+5WuUCiVGh0f43l33Mzx4nHvv+AG+52GGwiw77Szuuv27uFaN7KTNwQO7WLzkdJ588gmkD0898fjMvfnknwaFpPqOH2XHrmeJmBHOXrZqZnmn53moajC72n9oD2OFMYQiOD54DInkvrt+wjmXrkbXdDzp8sTW9RRKFbSqSmOiGatWY7gwwuLFi4mG4s+rVncSx6kxfuIgSElz23wM85dXCgkh6I01Y6kGhhdUe9u4+Uksv0amMEHVqjA2OsaWvg1EUxGe2L2eGy56O//x7//G4GA/19/wFlavqWcovxzUZwp1XnFEo3Fs2wn8+dVgNKqHYniej2PbNE37uWtVG+n7lMs1dN2gZ9YCpB9U8tK0ICEKJYzneTi2S1dPULPYtoKKYlYtOHdH99yZkaluBsFTz5dI38N3Xdq7ghoLxXIJz3tOiK2tvQdP+vhSkkwFq2qMUBTf93A9j0SqCU1VicajaJpKcjr4HosnMAwTTTdIpoJtXV09KIqCbug0N09XE4sGPvZUKvVL96haq+I6No5rY9v2zPaTBgGgWCriE7SvPB0wdlxnJh8CoFAuIH0/yN6uFHA9D8/3EIqC573wqivfc4N7M/36Vfi+iy89pAz2KVVKSClxPRfXcyiVSihqkL9QrpXwPY9iqUi5XKY8vQihzktPfaZQ5xVHNBbnyuv/kHvu+DF//XdfByCWamdy8jiZbJ5VF94AQP/gFJn8FMNDRXRdJ9XYQn/fCEJRaG4OHuRlx+SxpwP5g09cGdRB2HvwGJ70UaalPFvau7GdDJqmEo4Fq48m8y5jI7uwHI+rr38/ALc//GMa25Lkxitc+Lo/IN3UiiOCB2goGiRYTY5NUa1V8Tx3OmFLJdITJjKnk1AsKLZz5Nh+dvZvR0rJ/iO76Z41l+Mjo1R8F81junaFxJaS8WyW5St/ub74wgWLuV65kUgkSsO0Ydm4YT0bN6zjrLPO5+JLX8ec2fPITkxi6gbzeubTPzBIbrLI7bf+lJVnnoN5aYje1jlYVZumVBMrl5+DqqjkxnOMnBjmtEVBdvet3/8P+rKHaEil+fDbPka+WOFL3/oajuvw6Y/+Nd3hBP/wtS+y/9geOlo7+czHvojrO9z31HrcSoXLL72BZAOsvfgKeManu6WHdKKJxtObOZG5llx1ijdd9jZ0w+A9f/h+TowMs3R5fXnpy0V9plDnFcmiRcv45Kc+R2Nj4I8+vH87oVCI5qY0990TFM9R1Bqe5xKPq7iuy7133IaPwPMlg8cDCey+o/uCGsNCcPtPvweALz18X4IIMmsfuPsHhEIqui4Y7g+CvJmxQQQSU1N46IE7AVAjknw1h5wO5D66/k4UVUVRBIcP7QQgm51CIFBVjR3bN1GtlJGKj1AEmUKQJ/HI43fiez7Slzz+1H0A7Nq1DSkkjuPQ338sKA3aP4BlOzz99MZfuj+qorJowRJ6umbNbNvw5DoGBw+zYUOgzXTfQz9ndHiQgf5jbNr8OIVCgZ3P7uDA7v3cd/fdAPzk9ts4MXyCg4cOsnvfLo4eO0z/SD+jE+M8ueUJALbt20xzbxNqQtA/epxHnnqA/Yf3c/jIYR549G48z2PLjo2EwmEyuSkGR/s5NnKYzRs28si6x9i8LShc1D95lGQ6haPYFGsFhBC8/rLreOfr/5CIOV1/ubOTlWefMyN9Ueelp24U6pwSXHLFDRw5OsDO3Yd47wf/BADDbKVQtKhZJpqm8Z4P/AmO7eA6Dhdcem1w3OXX43kelm3zwY8EgWZVM0F6CCWII/zBB/4vY+NFJjMlVq4Jjlu4/CzKlk22XOPGtwVaOqVxydRIFX+66tm7/uCPyWdy5LM5Lr70jQD0zJ5PrpShUMyy5oIriERjKI5GJePS3tgbHPeW/43neti2zU1v/d8AnHP2BfieJBSKMm/eIgzDYMniBURjYd5xU5DQVSrl+f6tX+HRdXcAgez31k1Pcs/tt5GZmuT001fR3TGb008Lsskvv/gaotEkyUSas89aQzweZ+68+SiKygUXBOJyb3jd9bSkW1nUO5+OljZm986lIdqAIhXOO2NaHbaxh779/QwfOUFXSw9nnXYuhm4Qioc454zzEIogEUlRLpUwjRBdrT34lqStu4M5C+ey8rRz8XwP1dMRHrQ3dBILxSmWi/QN9c3IVdR5ZVA3CnVOCR66734ef+JZdu08yjNPB0tS+4b7GMtXyZZzAGx++imqnkvFddm48TEAHnvsTrSwjxmB9euC0XExn8F1HQrZYOT+g+/9G33jkxweHufO2wPxumd3PYUXFqgxhUfX3wPAwOgEo+NlDvUdB+B73/k6tlXBrlX48Y9uAeCZLU9QqOTIVXJs37aRXC5LKe8gbJ2jh4Llrt/49y+RncySzxT49jf/Kbi+h+6lUnOYzGQZGRnkscceZGJqnFg8xPpHA5nv73/nnzly5ChPPrGe3bue4Z57f8y6B+/jqSc38MPvfBNN9Vm9ciXJsIGUkqmJDKW8Sy5T48iRwyiKwtlnr2He/CXMnRPEV65eew2f/cRfMqu1je//5zfYsWc7w0fGyPUVaY514Hke+/bt4ZmN23h6wxZ27HmWu+//KYR9om0hvnvPt7j/qbsZHxllz6ZdZIeyWHaNv/3qX/P4oxvo6xuhvaWbzTs28I1/+ya3fu0HHN05iEBw5yN38OP7b2Pbnq0vVrep89+gHlP4LTm5dNB1nxvV/KafXTfwK7tuUJ3qF/d5NXCyaM1LcV3RWGymmFckGgvurVBmBOhc1yUciSJlULzLNMO4rouuG3huFSkhHk/NfBZIiT/d9ngyTVADTKBp+rS7KRgvSSmJRBK4rouYrgCGDP5eLJmccU2ZRijYRzk5zpJEorHpqmIz0nbBcfHYL1xXYqaf4PkgQVE0wqEwiiLwPdANI6iGpusnC5mhqoHwoKoqgSigoYMUSB+kEvwd6cuZ/YNLDtoqpu/kyc/tZKU4RVFnrvvkXp7nPS8n4eSxcvqcAoH05HPvKsp0waLncF03+JyECM4l5MznEGSp+//tPuT7PkKIFzz+5PXW+d2oG4Xfki1bthCJRNi48Tn/7q/6ecuWLQA89thjzzvHunXrXtxGvkwMDg7+Xs8npeTgnq1kp8ZYvGIVqXQz85ecRrFUJhyJ4UmFdevW0dW6jCNHdtLVOY9169Zh2zUMVUf6LgsWrWDdunUsWHgahpikXK5RrtisW7eOYkUiRA0pTNatW4eihPEsD0UVdPQuxLZtUolW7NowVs1hKlNg3bp1mLqGMECTkenPMsRUqYymq3R3zGXdunWUKy7lTBbP9Tl8+Dj9/SeoVnNomoqqGqxbt45cDjxLR9U0PDfYFgrp5EtlNATbn32WXdvuI6KHyFUKtDe28cPvfIUDB3Zj22GEUNi2bQf7djyFooRQ1TAnxgbYvmsX3V0xxk9k+NkdP+PCy97Eta9/Ayf6D/HgXT9m1tx5zJ+/gmQyRUO6caY/+r7CitPOIx5PMTWW4Q/f8z4y2SxLFixj/fr1LFt8OoUdBRpTTUyemCI3XkbL6ShS58I1V5AfyaMLnY62Ds48bRWbNm7CzrhMnZikq2kWGzZs4NkjWyhZeRzfQriCex+4l21HNtLYlmbLgQ3kxwrkSzn2H91DIpZi8Zylv9MDfWBg4AW3z5kzh6VLl/4eeuVrh7pR+C0555xz2LNnD+edF2i5bNy48Vf+fM4557BlyxYuvvhiDMMgk8mwa9cuLrzwwpet/S8Ghw4dQkrJwoULf6/nLZeKbFx/B+VSkZAOa9cGkhmXX3758/b7j3/5B+yKZHhwgLVr1/LgA7ejKj5CVRjs38/HP/kX9O9/gLm9PTiOg6dUWLv2Dfy/v/+/CEDKCmvXruUfv/RpNEMFBH3HdrH2yjeRz/STTIXRNZVyaZTXv/4D3PqDv0YoAularF27lj/9xHsxIwYIQV/fXj7zV3/PV7785/gEI2WrluPMMy8JRvMSXLfG2rVr+dpXPodhhhAIdu7cwl/9f1/i81/4OKjgSklHZyvrHpwik83jeT4HDh5gzZm92JZAM4J4xsjQUXxPogoDTdOwLYdqNYdthalWLQRg6h5zZnVydN8eXNfnxNAAf/zxT//G+3/yfp/k0LE9hEIhNEPj7FVn8eDDd5MbzZKONHL1VVdz1z0/RzoepqoRCZucfc7Z/O3ff5ZirsDI8CCXXXYZ927/Ofl8EafmUvZLdM3uID4VQzd0XMXi0ksvYduurew++iyqAeetOe+XpLVfiIMHDyKEYMGCBb/0Xn2m8N/jlIopfO1rX6O3t5dQKMSqVatmRuS/ip/85CcsWrSIUCjE8uXLue+++/7bf/vk+m9N09CmtWl+3c8n/9d1HU3TZoqkv5pegctB+b2fN5FMsebCy5m/aBlnnXvBr9zvmutuIBaPc/lVr0fTNC697FpCoThSKtzw5j9A0zTmLVnD6PgkR/qGueSy69E0jVSyEYDGxjY0TeMP3/9xhJRoKlx9zdsCpdNl51GtWOTzNa5/03sCbX/fxLM84pFGNE3jIx/9NNWShVNzuPqqN6NpGvPnLEEIBYHCdW98O83NzbiOh+N5RKIpNE3jjDPOxHWCgvTvfOf7mRg7QSIcAk+io7Bi2RkkYhHS6RSRcJgLLryI2QvOQVFtqtU8tVqRt7/zfSA9bKdEvpghloyxeMkZgIsvBGg6F1x4BW2dvaiGD6pLU1sHmqZx370/5W+++BEeXf/z3+rzWHvp1SxbuJyL11xKU7qZa66+jt7Z81m79mp0XWftpVcyf9ESZs2dz+tedy1NjU287a3vZMVpZ3Dze96Pruu8/Zp30tHdxtz5c3jbG97OaYtOxytKJkYm6W2ci2GY9HbPxq/5GCJEPBb/vfRBRTmlHnGvCE6ZmcKPfvQjPv7xj/P1r3+dVatW8eUvf5krr7ySgwcP0tLS8kv7b9y4kbe//e38zd/8Da9//ev5wQ9+wBvf+Ea2b9/OsmX/feGyOi8+QgiuuvbNv3G/97z/Q7zn/R+a+T0cDvPt7z3w/HMpce68bzfhcISbbItINEo0ZuK6BvFEsOxxx85NtHXFUIRg/76n6Z61mE2bNpDL5BACdu58htWrL8IqlwFBthboCN15+22EFAPFFzz84L28450fYGjkGO0tDXi+z8H9OzkxdJSq5aJqKtXxCYaH+nh2x1YSySYUofDgQ/ewZeODFKs2ilDxfNi6dRPH+wfwgUg8wjNbnsa3TzA8OEmmXATgttu+ier4jJYm8CVkCxNkc1UaIiaNbYtRFI1bv/stNj31IOFwAsdRObh/PydGhtm8+R46Es0c3L6B5ctX0db+wnUfTrJk0VKWLHrOBVMqlVCExvDwMFJKkskkX/qbLz/vmA//r4/y4f/10ZnfDT/EhSvW0phuorW5HVXRGNg7zJH+wygZkxsufjvrH13HE488TiQS4bIL17JgwaLf2Afq/P45ZczoP/3TP/H+97+fm2++mSVLlvD1r3+dSCTCLbfc8oL7f+UrX+Gqq67iT//0T1m8eDGf//znOfPMM/mXf/mXl7jldV5OnOmAq+d5+F4QlPY8Fzn9P4BrW9MBUHCnJRl8Pwj6AtjWf9H4ESfP7QQ/CpAnay7Ik7sIbNsmFAqfLBiHAMKR2EyAFsBzPUzd5BeVfsyQOfP+yVPqWugXwtXTgeb/Ig8UCoWQCjwXXQahPN99YprB3zr5Uv4b7pV0Ok063UhTU/Nv7Z6JxxMk4klSyRS6pqMoCs2NLcTCMVqagkFdS2sbkViUeDxBMpn6ndtV5/fDKTFTsG2bbdu28Wd/9mcz2xRFYe3atWzatOkFj9m0aRMf//jHn7ftyiuv5I477ngxm1rnFcbaK64mlUrR1NxCY1OQCPe5L/wbDz94J6+75kYALr70Ddzyra8i8fiTj30ax4M3vPGdfPPfv4xhmpx/QVAkJpFoRVEkZigOwEUXruXu23+C70v+9M8+g+PYRMwoPa0tVGs2Z6xczVe//DkUB6Tv097ejaJoKL4kl51EUVT+z6f+inX3fZ+wolOu2aiKQkdbF+ViFadi43k+S5cuQ9MbqZSOUcgFJUWvvOJNfGnjk7hIhK4RicWZv2Axffu24bkFFM3kkksv54F7f0IkIkmmW9CmlWAfeeAZYqE40pe8431/8Tvf04svvpQlS5YG9Z1/SxbOW0hrcyuRcGTGFfvFv/wSff1HWTAvmBFcfskVzOmdSzKeoKnpVxfjqfPickrMFCYnJ/E8j9bW1udtb21tZXR09AWPGR0d/Z32r/PqRFVVVq0+n7nzngtEzuqdx/s++Ak6ugK3yZ2330al4FMtCr77nX8H4Cc//k+qlkW+UOCRRwKXVKqhkY7O2TMPtW9+/Z8oFquUSlW+8a9fYWJ8lO6OJs5asZRzz1zOY4/cy7Gjh4KRuy85MTzIoQO7sB0fPB/fcfjG1/6JE0MnsB0PJHiezwMP3oVl+5SLNcoFix3bd9B/7DDZQgnX83E9n3/4+78mEjbxhYJQNIqlEju2P40wTOKxOOGwyV133Aa+JJZME4vHUVSVrVs347lgVR1sy+XnP/3x73xPhRC0trZhGL8slvfrSCVTzzsmHA6zZNGymRgcwNzZc+sG4WXmlDAKdeq8mKy98pqgqLyUvO6a6wG4/IprEEIhHIqwZs3FAExNTmJZtRkhvWvf9FYMQ0PTVF5/3Zvp6OzhxFiGQrHMyIkJVp9/KSvOOBspfTzPp6mplTNWnkckbAb5AkLw5re8i3mLl6Cpwe+qonDjje9GQWKGdBRVMGfubJadfi7RcBhVUdBUlT/5+KfIF0r4toPrupiGyZVXX4dTrZHNZchkM1z9uusxQhEykxOUCgU8z2XN+RcTlJMQKJrK9W9+y8t01+u8Ujkl3EdNTU2oqsrY2Njzto+NjdHW1vaCx7S1tf1O+9d57dLU1MLdDz018/ujjz7KTe96Lx/56Cdntk2OjVLJVdg3uo8ly4Og68/u+gFLe3tRhKDv6CH27tnJ2HiGu9dtxvc83jg1xcYN66mVHHwfRpxhNm96FNeFrtnzEEKwffszbHvmaeyqQ0xX8SVseHI9mVyJkKkTDulkM5NsfPJRKrUajek0QggevP9OiiWXTLEwk3A3NHgrvhQ4J8YAyR13/oyJiUm6untpTKSxrBqHDhxA1TQSiRQAO3ds59K1V7yUt7vOK5xTYqZgGAYrV67kkUcemdnm+z6PPPIIq1evfsFjVq9e/bz9AR5++OFfuX+dOv+V4aF+yqVAJjuWTGGETDRNpbk1GFiYwkCZHvHXSiVa2zpQFDGTIZzNTBGPJaazicH3fHp658L0PiAoFPOYphl8EYVACGhr7wgyoaej2J7vYUbCQbx6OrBbq50MfouZwHK6sZmZELKEUqmAoqjoqo4iFFRVJZ6IzwTVEcwE3+vUOckpYRQAPv7xj/PNb36TW2+9lf379/OhD32IcrnMzTcHYmXvfve7nxeI/uM//mMeeOAB/vEf/5EDBw7w2c9+lq1bt/KRj3zk5bqEOqcQt3zjq7zj+uu58Q1XMTkxFshopAyau9LkS0GRnebmRsZLBSZKBT75F58DJEZIJzOVoVSqsPy0MwkZJkZIJxwOsXLVKhSpEAsb9B85xnB/Px/+35+ktaUBx5cYoSiKHiaVagABKiqa0Ljggktobm6mWrUo5PMU83n+4D0fIF8qUa1UKBfLNDY1s+bCSyhm81hVC9u2+fCHP4ntemzdsZ1Nz2xh9/4DtHd0UqtZ5PNZiqUCF1x8yct7o+u84jgl3EcAb33rW5mYmOAzn/kMo6OjnH766TzwwAMzweSBgYHnJaqcd955/OAHP+Av/uIv+PM//3Pmz5/PHXfcUc9RqPNbcWDfPirlMq7rcvDAPlo72tGEQEGQmRbSGxkdRouYCAWOHT9CQypFqVRjbDSLbmhUymXGx8aIRVIYhsnh/Yc4fHgfg0PjZCZKSCSf/6tPUyyM05BKEQ6HCUnJrp3bcB2fpBlDINj61CZEOKhZ7UwX1Pn6v3wZRShUazaeV+PA/gMoiqRmWYhpHaCv/NPfUq1WKJdqHMweQVUVjh8/Nq03JPF8h6c3beSiumGo8wucMjMFgI985CP09/djWRabN29m1apVM+899thjfOc733ne/jfeeCMHDx7Esiz27NnD6173upe4xXVeiZSKBdbd81O2bnxspgLZ3//tn/Gxj76Tpx5/EIALLr2E3kVzmLVgFueedyHz5i6i4nsUXIu5CxYDsObcywiHw4TDYS6++CpOO/1cEvEYZshgzuw5hCMRVpxxDtVaGc9z6ezuZs2Fl5NMxVG1IKj85re8jVXnnUulUkVKieO6XHrZ61B0gSc9JJKuWbO4+prrpqvKBa6om9//IRzHRlUVFEXQ1dXFJz75aTRNnak+9+6bP8C8uQvRNBXTNGhrb2PRoiVEIjFczw1WZp1bd6fWeT6nzEyhTp3fF88+/Th7d2zFMAxmzV2A5VgM9A+gKTo//el3ue5N72PT5idpaWvD9z0efOhuurp78H0PVRFs3fUMABs3PkZDqgHP93jg/p/TkErT3dXDnN55VGolhBA8u/1pGjpiSM/l5g++jycffQBVjWK5gS//9JXn8N3v/QulUpFqpYQENj/9BLblgFJBEQKpwc9+ehuarpGMx/B8n6NHDlO2qiQTcXRVw3Ntvv71f6ZSs3Gn4wSRaJSjRw/TmEoQC8cQQlCplCnkS+QLBUwz9LzloHXqwCk2U6hT57+D49hkp8ZnZgWtHT14vodm6MSTDTQ2tuF5LpZdo7ExWCPf2NiM57l4rsvSpcuZ1T0XX/r4viQRTwLQ3NyK53l4rsfSZaezcPFyHMfG9z1isSDBraW1A6REUQSz5yxk+YqV1CwrqAENjI+N0dLaNh0vDgSrlyw5LZDQng48FwtF2jq6UFUFVVXQNJWWlhYEoE5r//i+z6LFS2eyrRFQKZcwDRNVUWeCy5VKBU1Tg2PV+te/zi9T7xV1XtX4nssPvv1lvvcf/8TmDQ8D8MBDP2I8P8ihgd2Mj41i1WpUyhaeIxkZGAZgamyUWilPpZSjUi5jWxZNkSY60t2EArc+tapNJJIiEk1RrdawahVGxsYZHBlmKpsFoJwvozlxFCdKpVzG82ziSYPZc7tYcdoizl61CmlDNB7Dk/DWd95MrpDHMHQK5Sply+Kr/34LiqJSKJTJ5ApUag4LFi3Gsh1yxQLFSok//OCHueCCyxAiMBrJRIKzzl7F4xu30zt7DuFYlOtvfAfNzS3cee9D3PTuP+Dnd99XnynU+SXqPaLOqxrbtikWclhWjcxEkLcyNTmGogiQCkNDh2lItRIyTXTNoFQuAEHcwdANELB39w4WLVpGOBRB0wxq02Mpx3UxzAhCUdi/Zydz586d2V7MnzxPGQUDieDQgX20t7VgmCG6upMoBHIt2VyWxpZG0o1pzr/gQk6MDOFJyBUrCCE4eOAgA/0DuJ5DNm8jRIFsNoPQVXK5Mr5f4vbbf8KSRcsxdB0Ab7qITSgU4rbb7yGbzbJzZ1BHumfWLL74t3//Un4MdU4h6jOFOq8qatUyu7dtoP/ofgBC4QhVu0aukCUUDSqeLT99NYVymUqtyjmrLmXx0tMoVXJk8hP0zgmkL5avOIOJ8Qny+TzXXf92li4/g0J+klJxgrb2YMXb3N65VEsFysUc177xLSxZvhK7apEbyzFnbqDnc9rKs/B1B19zuPTyq1my4iwKuQwT46OsOO0sAM5YuZpsJku5XGblOatZde75aJqCaWp0d3exbNlyPvl/P42uGggEvb1zmDVrDgvmL8AM6Rimxnvf+0H+7NOfmRn5L1r8uxWpqVPnJPWZQp1XFX2H9/Hs5seIxpO0tHczNTVBLpNFoPH4o/dx6RXX8/jj9+A4EvBY//DtdHTNxXIsBAr7Du7mwkvfxFOPP8rEaAZVU/j+d/+NlWedh6Z5gEV/30EA9u3bgWnEQAp+8sPv0NM7m4nBSeyqzYb1jwOwZevTRGMpfN/jgfvuJBaLY9kWmq6xbt29/PHH/4z77r+LSrUCwBNPrKdSKlGpWsQSETRd0tjUxK4dO1B0lebGVm659YcA3HnnL1fy27bz0Etyn+u8eqnPFOq8qkg3taLpOtF4AtMMk063gPSR0qOltROA9vZufN/Dkx6nn7mGWb3zg4Cx59KQCpQ/m1uaUVSBoipccMFlzF+4DMd1cT2P2C8Emn3p40uP1edfymlnrEIzNDTToKklCFj3dPfgujau43DGynNYefa5eG4QnJ43L6hYt3Tp8qAWMrB8+WmsPu/CafeWZOmy5QCcfc65NDY2MWfuPJqbW6lT58WiPlOo86pi6+aHce0sI4NTlEpFPN+japdQFZWBocMADPYNUypYSN9namKCpiZBPltBAkJOF6ZXbJo6UyAlxXKBfD5HPJ6gMZ1ieCQoslMo5RBqCKTK1NQYuqHRuaCHRLyBai0ohnP06FGEL3E9l3w+R6lUZHR8EkWFhnTwcD94+Cj5YhWBoJAvoBs6lapDrValsTmQ1Ljm9ddx2dorMQyjXk2szotK3SjUeVVRLkwF5RmBYjFLuVxEVVQUIWaygUulcqAzpCgc7z9K1bKDpDAE5XI12KdcxjB1fCk5eHA/4XCSdENQHjMUMgHwfIlABRQOHdxLNJYgFktihsLUrDIAVs0iHo2gKIL+4320trUBQRJaoTAdjC4VAYEEhoeHaG1twXEdPM8jm8nMXFsoFHqJ7mKd1zJ1o1DnlOb2u7/F2OQw117+Trq65hJv7mL3lgM4+LS2daNpGuVKCR+fOXMCV8yK01eyY8cWPN/n0rWvxzRNYjEDIdSZFUQLF6xg3/49eJ7LG657O6ZpcuT4MKlUCqFHAJgzZwEH9u/H913e8MZgn2PHjhCPJ+jq6gbg9DNX8cB9d6EogrWXX42qqjQ3tzM+Psof3PxBAL7//Z/x4Q+9lxWnncEFF14MwF//9ZfYv38vH/vYn77Ed7TOa526UahzyjJ8oo/Nezdhey7rHv8Z77np//DMxvsxFQ08l81bHkVB4PouAjh06FkAdu1+BtMw8H2fn//su3R2z6IxHUdVFEZGjgOwb/8edDWCpkpu+dZXOPvcC4jEG1C0EBOT4wA8/fTjhIwwUkq+/R//zGmnn0tmaopsJsvgwAAAd9/9c+xqDSnhe9/9NqtWncuJ0RPYts3dd/2ct73tnSxctIhHHt3wvGt761vf8ZLdxzp1fpG6c7LOKUtjuo2IEUZHYXZvoEfU0t6L4zlYrs3y5WexYMFyfN/Dlz4NDUEt4FQqjZwOEF90yVUsXXomruvj+T7RaJCJ3JBqRCKRvscVV72RZUvPwHGCgja6FlQP6+7uxfVcXM9l7eVvYNW5a/B8H9/3ae/oAGD16jX40zLYV119DQsXLWHB/EUkkymuuea6l+Gu1anz66nPFOqcspQKBbyRIiEJx/bu56I11zI0dIxcPo+iwPjYKLqu43ouEkG1HPjnx0aO0z8wRTSqMzo8QEtHO6Wyi6Jo+DIPwERhAukLXM9lZGQA0zAZ6jtGLBojXwr22X/gEPFYAtdzOXrsCIlkknK1iqoqTGWCjOZ0UxMOkrBhoqoKuq5zz32PIKWs5xHUeUVSnynUOWXJTI4iZKAXlJ+Ws65WK/i+RPpQqeY5cmT3dPEageUEgeZsrkS5bFMoWIyc6Ofg/oOoqoGqaEg/+Eq4rofQQNNVjvUfpVwuEw6FUIRAV4KxlARM0yQcCrNv7y5c10FRlKDoTq0GMPO/L+XMz0DdINR5xVI3CnVOGQ4f2MEtX/sLHrr3PwGYPW8JsQREYx7zl50GwNw5S9BVUBSfhQvO4JJLriMajZBIxunomA/AyjPOoLsrRU93kosvfQMXX3Illl2m5lRobW8CYH7PXKTlgOPw5jfexMJFS8jmC1Qsm3iyAYBV555HJjfJ1NQEH/rwx+jo6CYeixGPxzj33PMAeNe7/pD29nZWrjyLnp7el/iO1anzu1N3H9U5ZXjykZ+QnxohlxnlgkuvZ/fOJ0lGBYrQOLjrEa655iaOHt6JSrC89OmND1Ou5uns6UJRFCZOBNpHmpbnmtedTrVmc89d3yWd7sITwaLQgcFBAEaGjwbnkYJvfeMfWHPhlTS3dGIaISangvOse+h+mpoCDaMvfvEvedc730sqFSMSDbNvXxDUvvfeO5mYGKdSKbN3726WLz/tZbhzder89tSNwu+Rk9LMw8OB0uZjjz2G7/tIGRQ9eeihh17O5v3eOXm9g9MP0t837vRafdMM1ue7vhnkBmgqjz/+JHatgON5KAKEnuahhx5C1UI4dlCwJl90qFRdPM8DQFEMHnroIYRi4Hk+ruthGI3kClWQEonEMA0sy8IMRbGLJUCSbpnF6OgUruug6zqKovDQQw/R2taJVcsFtZd75tF3fADLctENl2g0yUMPPURDQxONjU2k04309w9yYtowvdS82vvgwPRqr//KJZfUq8r9rtSNwv8A+Qt+4n379pHPBwHIk0lJZ555JuFwmFwux759+zj33HNftra+GBw7FpR2PLm2//dJrVbjwXvvolqtctEll9He2cWh3Q/jq0mkV+GslWcwOHSYR3bmEAroxRIfWLOG7/7HXzM6mieVMmlIRujuauP+e25FCAV8lzVr1vC9b3+O4wMenutz1rlROjq7yOcySASaFgSDs9kMkUgY27ZpTqdYsHABY6PDxKMxpvJZ1qxZwxc+X6BcLeJ7kqbGNMuWLWVqIkOpGCiurlmzhjVr1nDzze972WMI+XyeAwcOPK9a4auBo0ePIoRgzpw5v/SelLKe/f3foG4Ufkds2yY7rZW/ZcsW7Oks2Wg0SmdnJzt37mTx4sVs3LiRRCKBaZpYloWiKESj0Zez6b93dF1HSvmiXJfnOti2jevYeJ5HNBrFcVwQGkIxMQ2D4Yk+pB5kAvta0I58rkK14iCEIBIOcbzvINIXSAFCBp+T53sg/OA4t8rwyDCeHzxEVMVHUYISlydnBaNjQ8xfsIhoOIKqqoQMk2g0SrVWRVVVFEVy7NgRLr30ClQ1KIfpus4r6vO2bftV2weFEC94XSdnR3V+N+pm9DdwctTf19cHwNNPPz3jHpo/fz7nnRcEFGfNmkUymXx5GvkqJBKJ4lrjOLUxfBnMxppbWvGdHLVajkg0zmUXvBmlZKOUbDpagyDynHmzaWmJ09QUZva8JVx59Y2ohooR0klPV1Vrbe8i3RQlHNFYdd5lXHrJlegaGLpCR+e0aF5XLxOTWSanMrzphncze85C8uU85VqJVCoFwNq1V6GigA8f+vCf0JBOk0rE6WhuYOUZZwKw4cnHufLSc3njNZdSLpVe4rtYp87vTt0o/Aa++93vAlAuB1o2q1ev5swzgy98Op1GVdWXrW2vZg7s20Y+k6NWsdj+9CMAjPTvIGZWCKk1+vv3c98D38HEwxQefceCwK6m1Dj7jHnM6mnj0fX38LOffZumRBsNsRYKpcDAa2aRptY4nb1pfvLTb3P//XdiGhohQ2Vi/AQAu3btJF+oUCzZ/Nu//x3Pbt+MHtKQimQiG8QFHl//IC0NjbQ1NvH5v/o/jI+PMb+nnaXzZ1POBVnP//rVf0RVwbYq3PKtf32pb2OdOr8zdaPwG/jwhz8MwLJly4BgulrnxWdW72I0XaCoknkLgxU7qXQHjutju5KenkWccdqF+D5IHzragriGGQrj+R6e53HN69/OihVnE1RDljPZyoYeBgnSl7z5hndz3nkXBkkHQCKRAqCtrX26JZIbrv8DVpx2FnJ60UAkfFL7aB6+H9Rtvu5Nb6W1tY1KtUbNsglPF/S54OJL8bwgo/ryK695Se5dnTr/E05po5DJZLjppptIJBKkUine+973Uvo1U/RMJsMf/dEfsXDhQsLhMD09PXz0ox+dCRC/EPVA1ctDrjiO42fwRY4jfXsB6J8cY7SmUHBhauoE+dwEPb0L6eldSHYsGL2XRZmsWcGO2BzcvwPfdylWM5SrOXL5UQAGh8YYL1UYmcixbetGxsdHqdkepYpLYTpbuVYp0tLSRmO6icNHdtF37DCG7hAJezhWMOMYG+unqcUg3agxNNRHoZBnZGyc/sEh+vv7Adi27XHSjUlS6QQHDux6qW9jnTq/M6f0E++mm25i7969PPzww9xzzz088cQTfOADH/iV+4+MjDAyMsI//MM/sGfPHr7zne/wwAMP8N73vvclbHWd34ZquYgABALXCWIKni9BKKBogGDoxBHMcBgzHCaWCkbvalhBqAIlrGOYIfbu3YqiCqQq0Y1gaase1VANFTMWQkpJX99hHEcG+kduMGVQVBPTCBEKRRgZGiJk6oTDOoYhMEPB+oxIxCCZCJNKRRge7ENVNSIhE1VVUacHE5ZloWk6uqYzOND30t7EOnX+G5yyRmH//v088MADfOtb32LVqlWcf/75fPWrX+W2225jZGTkBY9ZtmwZP/vZz7j22muZO3cul156KV/4whe4++67cV33Jb6COr/Irp1Pcustn+GnP/kKvu/TM2sJqq6BBi0tgQx1R2MbEc0kpqkMDA5w8YVvITMxxdR4huamoCZyWCTR0KlmbTq7ern22j/AsWq4Vg1TDYyCKSIoFQWn6LBo8Wlcdtk1JNNh2rsbaGwKKq+l4ynK5QLlSoFrXn8jbR3d1Eo+TlUlFgkympubOsgVHTI5i7e87b2YpkHNqlKolGiYPs9FF15O3FSJmxo33PhuAP7j3/+Zd731Gu746Q9+5f2YGB/lth/ewq6d2wCoWVXufewOHnryHhzXeRE+gTp1Ak5Zo7Bp0yZSqRRnnXXWzLa1a9eiKAqbN2/+rc+Tz+dJJBIzBc/rvDwcOrAF1XMp58fI5zMcPLARPQrhmMbRI1sBqFaqSEKEQ0nGT/Tz8LofMzmZY3Iyx5FjwcNTapJENE1zSyubNz7Gz3/yLYR0wXeolYKlxBFMUmozreEO7rvnNu679yect3Y5qy5dSqolKKAzPDFMtVrCtmrc8q1/Zt++nehKFM/SqBSCQjyj46Mk0i00NLfzz1/+PCPDgwhNRQqF8emA9YbHHmDp7B6Wzu7me9/8JwB+9pP/ZHR0iP/87jd+5f340Y9uZf3jD/KdW/8Vx7HpGzrKll0beHrnUwyd6H9xPoQ6dTiFjcLo6CgtLS3P26ZpGul0mtHR0d/qHJOTk3z+85//tS6nOi8OA31HOLj7WXzfB6C7ZwH5Yh5fClKpRubNX4lrebiWS81S8H2PaCSKpoCULkuXreSslRcHGeP4NCSCspXqtFid7/tceMnVrDz7gpm/GY2nANA0AwhE8m58ywdYefZ5CCEQgDntYkpOB5wlkhve/G6WLVsJ02vedSOQzm5qbg4qtknJ69/wFjq7ZsF0UNswAuPS2TVnurazywUXXfkL55Z09cwO/oaU/PxnP+DhB++eaWtDOo2qqESjMVRVJRFJQM0hhEFbc8fv8ZOoU+f5vOKGx5/61Kf40pe+9Gv32b9////47xQKBa655hqWLFnCZz/72f/x+V5NuLYNAjQ9ePg5jkNlcoxIY8vMA3FysI9qdpJQqhGAYmaK47ufpaGrl6658/A8j9FDexGqTvv8RQghGO/vY3JkECWW4Otf+wKu4/CGq9/E2edfxsZH76BaLpCZHOXYni1YuFD1kECucIzR/n4SRom5C1KUy0V+fOvXuPyGG7GSQRJadawP17aIodDT0sbIyAibHn+IcCLK3O4uVEVl//HjAOSKGeJpcJ0K69f/jLnzT2Pk+CRGOMRIfzCgqJQKzJo1m1qtwpZnnsTzXRatWUH33Dlsf3ITAEePHKapqRnXc9m/fyfS81h5xjIam9oYnxhFSsnTz2zgiiuuRlUVnt66icZUE52dTaxefQ7FYgHHsvjcX36MxzZsxPcle/fs5A/f/V5Gjx3FrbpYZZtiPs+Pv/d1Dm/diaKoHFizm8pUHkPXOPuiS6fbW2L4yEG6FywiFAkSucqFAgiIxhNAYHxKxSKxePyl6EZ1TlFecUbhE5/4BO95z3t+7T5z5syhra2N8fHx5213XZdMJkNbW9uvPb5YLHLVVVcRj8f5+c9//ppYZup5Hvu2biGRTjNr/kIACkN9VI8fpFSpQlsvXQuX8JU//yTYFS6/8DwWXflmjEiULT//PrVSkY7ZvSy+5FoOP7uFR2//CSHTYOnFa4HF9D/9KLJa4OhgH82dXYwc2E328B6kEOiRCOnWdsb2P4tTKTFSrGDbNrZVY7jvEB0N6RkZCAG4U+PkZY1g7A4h3WR4z7MkEzFiUQMpw1RzRQaGj+ERjOb1sEZ2ZJDenm46mtsIaTp2dorR0YM0pRpQhKC1IUW1VCSaTiEjOqoRJyQV+o4fxEgkEIpCU3uQ4NbY2Eos2kAkkmR8ZAhtJcxfsZR4KsXsxUGinGmYOI4DEkqlEqaEZKqZQtEikWgkOzrCogUL0XQBePhujaPbNtLe0U1jUwvxeJItj6/n0IEDeFKCorD1mWe4eNFC+gf78YVKrlhk4/13UMuMIaeL9ezaugUxNoKqCEKmyfJz1/Doj7/LxNgJGp5p5br3f4TxkUHu++43cByHS974Vhq7ejn09GPse/RuNCPCG9/7YVrbO7jvtls5tGcXcxYt5g3vfB8QDAJGhobo6Op6TXw36jyfV5xRaG5uprm5+Tfut3r1anK5HNu2bWPlypUArF+/Ht/3f62+S6FQ4Morr8Q0Te66667XRDH0HVu38qVPfxrPqnLassW8548/jjq8f9r1IohHw9z+0x+xa/deCrkCiXQDT23ZRu+5l+FJn8xUhlq1SroQLPctZDKUyhVcz8OzbaSUGKaOY6u4OPzDFz5JfnKSFbPnsHjOQo4c2cnUpjuZP2s+nmvT1tnE8tN7wXEYz47gSVBVg3g4Tr6WZeOzW7n2LTez/uE7UBTByEiGcCrFjs2jlGpV4iEo1gzOO+sqnth0J4oqGDw+jDAMDh05hiYERwaO41slPvhHf8p3vvYJVFXh0LEhDDNEtVwhZpg41RqZSpHLzn8LDz15B5phkJkI4g7FUp54PI3jWMxbtBxPCnZs2kK6rYkjOw8AUK1ZRGIxPM/jyiuv48DunUxOjZFINJHLTRFJpDhy9Ci9c2fjeR7Llp1FefQEQ0P9NKQayeUyNDQ1U7CKREM6UsJb3n4TFcfG8ipIqRGPNdCQamBZ51yKNZvG1k4WLVzG0YlRfCkZOL6fZGsztm3h+h61WgXp+2RODFMpV3Bcj5G+ozR29eLWijQ3tWGqcODB25mcvYA9W5/BMAQnDu3jG5/5E97951/k+9++lUfvu5/Zc+bw8c/8JQ2NjS9X163zMvCKMwq/LYsXL+aqq67i/e9/P1//+tdxHIePfOQjvO1tb6NjuhTi8PAwl112Gd/97nc555xzKBQKXHHFFVQqFf7zP/+TQqEwI2PR3Nz8qsxO9jyPr37+C4wNDWO5DitXLGF815NoqkZLsgFfekxNjHPpWcs5d8lsbr3jAZqSSVYtXcrex+5nxRvewb6BAXoTYQoTJzh+6CCjuXHy7hTLes5A9T3yuRz/+sPv0xgJ0dvVTj4zijAMNu3dzbGhIRLNacaLRbLZKcolh/b2RrxoAlNViHkn+Mat3+Kc5b0UXJ+GcBPP7t6KGtKplsCTHo0NCTbt2MrgaIlstUIirKHZZW7/+b+gVAxs4dLV28Gx/uN0NTVCzaU1meL+R7bxvf/4IgeOjFN1qszpaaFSqzK7exFCCaGmfHbueAZVCZFydQxFo6gGsQDTUFBqBaTv8vhjD+A5LhOZMSyrRM2tAJBON7By6VJ0ReXW7/wrTelWkk0Rmhp0wvEkPpLW9gbuueN+kqEoI0ODSNcknjCo5qaIKZKpXAbftUlEErQkGrjrh7eihWN4ahVTE7RGUpR8wQ/Xr+ecVctoiRmMHX6WJ3bvRmLRnT2BNXmCsgNPPrORZLqFM59+lON7nsUMawjXprG5gcdv+TINhkHc1GiJhSjmphjbuYH5bQ2cyJcYGx7GdQR/87/ei9k1l1qhSP+hw+zc8gwXX33Vy9mF67zEnLJGAeD73/8+H/nIR7jssstQFIUbbriBf/7nf55533EcDh48SKUSfIm3b98+szJp3rx5zztXX18fvb29L1nbXyoURaGju5vB432gCBYsnEO5VkMRCg2xOPl8AemDK12i0RiKonDu4kVMDo/T0JTmnz79caKay5krA5dT/+N384Wv/Rvf+uxf0tXZges4fPWv/zfRGFx82ln4UtKeSvPArm2kjTAPPryV9uY05122kn37DvKW8y6lMZFiaWMnD/TvYnhokpuvvDwQnsuNs3/8MD3tXaQcyQVLT2Pr4b0MTI1x+RkxXv+WtzNaqvLV+39EoVaiQ4vSsnQFk6NTbO3fzq7NjxJyU1iWwAjr+KrNglQHa66cj+f7fP+pu8hMTXDp/GUYis54ucDA0FE6m1vpPv1chBBsFMHM8ZozVnPxypV4vs+dO/dQreX54AXX0NXQyuBUsLKoKZnkiqWnA4KqEeKeJ9Yzt7uZbqMRTMHwscOUqzZXnLGa4aEpmtwUzw7uZvGS+bzhrJVEwhF2HT2MLxSWdPbw7tddDsA//uRHlGtV3nnBFcxu66JSHMWlhletcvBohqlcke7mBjYd2M2aZcsZncgiAM8T5HKTPPnAnUxmpojH4mzYvZsmI8rBgUmklJhjE1xy5jI818HzPWKaQqlaw3YkhhYIHFKrEg2HaOvsZO6ihS9Dr63zcnLKrj6CQHvoBz/4AcVikXw+zy233EIsFpt5v7e3FyklF198MQAXX3zxjHLif329Gg0CBGUfX/fmN+E6NTy7yvonNjA4NMbo6ATrNz7Bzx++H8u2sRyH/pERbn9kPaVKBUUoCEUwOdlPNlucOV++kOftb70EhAjKXCoKpUKepKnjT9ckkBIs3WYqW8ayHUbGp8AvY3kl4pEoUkp0KRgaGkE3/Zms8XA4zIHJE3Q0NOG6LpVKBWFoIH1mNaXB92mNR0kmoqTMEA4envRJJeOU8jVmd/biej626zGWrWLVajREY0gC41h1bbp7ZqMrOhJoCIfJFkpYhTxBSEPSmgpyEOZ3B7kRqqIgXYtCpUZbohEEtKcC96YgKOYjAaeUp+I5mL6G50t8z8fwHAYGRrAtF9t2GB2doug5ZDJZwqEwiqIwt6ebYjFHZ2tTsAJKCOa0d2CVykT0MEIIQoaBqjlsf3Y/+VIF1/Op2S7p5gRl2wr6MJKmphSW8GaUQX3fZ2KywOD4ZHB9QrD36HH+8cc/plSz8Hyfg0Nj/OzOB8kVcjiOgxYymRwdJaoL0okwLe3t1HltcUrPFOr8dkSiUTRdR0qfiBlm0zO7UYRAES6xuMEDjz+B5/vUfAdFEfznQw8TUnSi8QiHhgaIxiLs6RtA1zX+4+77WLa8l69s+x6nzZ2PL1yicQ1HOuw7eohUPM6jW59lpDRJazLBmrOW0piKY3kWtqrw44cf4qIzV7Jx9y7sYo6MkmXrvn0kozG2HzlAa1sT9216jDddcDk1x2WqmkNqGrc9/iihmoKtSfRoiKHxSY4d7EdB5fjYMEoowpPbt9FiBAZmwirh2haP7NpOCgNPgVi6kcGBY+w5doT2xmYODh+nUijxzLFd9PoGuq6yfegos4BHDmzj2vD5TOay9E0OMkuLcv/+3ayYv5hdhw+w4sY/pChdtu7aBVJwLDvB5MQUe4XFys552J7LcL5Ax+xOKl6Z1vY0rnSYeGaC0xYs4OePPkZPSwtb+45jmga7R/qI7DRBwLfvuJfTFs/jxw+up7O9nUKxgOf6LJjbzvFD40ipsGHXEVrmNfHdOx5g9YoVlKpV+sdH6Ohu5WePPEUsHCZXKuILwd1PPk0hX0XXNCy3SltrA//68wcDd6kSmDbXr1B2XKxKlYuuupFnNzzJ7EWLZ1ab1XntUDcKrwG6e7o5a/E8bMuita2NvmN9SAmKLrAqFsnGOBJJreRgmBqqLyjXguplekhnVmcrTakYAjhj4XzKXpnWRAOjY1PouopteAz0DXL2/DiTmRqdTQ2M1zL0trTzujWX4Pk+j+7axMTgGL29Lew+fATperieZODgJFrqMAhBtpynLdKIbXk8vvdZpJQUikUcr8pDz2ygWqwRipksXbsEgN3bjiJ9iYgIJv0MsxN5du0dCZZhtsYo12oc2ncUAwUJuM0qTS3t7BmaZN9Ijkq5gAtURrOMuEFdDGsyCKYPDpzgW8O3BzUWkg3YOKx7fAt3PrwJw1D4v4CdK/HE4LYgNSGkUYkq9PcNc2TXUSTwlu4FZE6Mw7wuWlsbqdkWWlinVCpzLHeE/qPHKHkexVyN/HiRB/uCJL3utjYqVg2dCIPjGTzfY9eeARoiDew9HEhlKLqCNpHB9+DJrbsQAswo2JbFVLbEZKaIEIKarBE1ImRyBZAQjuhYjo0hQgjAqlm4mqRQqaGqCnOWLGL56tU88fQGjo2ewLbt18RijDrPcUq7j+r8dhx+dhumlEQ1lXQySmPMpDGmI32LsmeRL5fJFcuUa0WWLerCEg7RSIhIwgRd0n9ihIlcgWyxws5jRzlw+DiTxSxCgO06bN55iFKtguO5gGQ8m8Gxa4xMjmE7NoVyie279uH4UKqUg/Xy1Qp7jxxG6AJP+oDE8V0OHhvG9x2kDFww5WoZEVFQVAVE4A47MTyIKoLlmcFiTw+hKSSSqeltgrFSFk0NgRp0cYkkX8zg1KozCXO+dIlFwzS2dsy4XGwZSEjkykE7fV9i2Q49nd0gJEIELiMA23hOGkXqgs6WTqYKpaB4j5QsXLAEoQWJd1JKPM8jYoY5dPgwtuviS0ks2UAsblCtVU565CjXakzlijheUI7Utm1isTAHjh1HUQVCCdpZqdTQQxKhPCcJdXxwCE0D1/VwpYsUkmKtTDgSIhw1UQzB4MgUE/kSJyZzlGwXEOztn+DRbUe49Ud30N93jNHREQb6+8hmpl6aTlrnFUN9pvAqJDeVoe/QIRatWE44GmXpuWvY+/QGbKtKQ1MzlfGRoJSoUyVkClR8VAXiZoiQYTK3qwPTU1AMleHyJDoKjzy1D4DO5mb6xgfoH5xi59QA6XScgmUTDofYvPEgQgqckIPju0zlcjz59AZqjs3YZJ5UWxxD12hramAqn0HaLjYq5CqoioJl2WimAr5Ci5mkXKvRX3TQ4yorV84nnUhTruTZN9qPEdZpRkMTKn35CZyQx8GRPhQjMAC276FrEltaRA0Ty/Nxwyo1y8YvZmhubmc0M0HeqXLoyB4mj50ABDURiO/VClWUUBTbccnWxhka6KcjnWJOYzN9mUkAdFty1sqlpJMpNuzeydToCVRPcPGa1di2zbZnNiKBo8PHcTyH8cwUnm0TjoXxbZuYabD36GFs28M2bTRNQfpg1WpEoyHyuSncahnbdZGeQ0MiTUtEQVUVKrbNpFVGuoK2piS+lIzmpjB1lWKhSrUazPr0mIrtSqQAEPhusAy5UqlRq9lEnRDJpEEuV8X3JdVKlVWr11Ao5GlIN9LWXs+efq1RNwqvQr7zlX/mwK5dXHLN63jr+99HLJXiDz/7RQCmRof58cHdSN+nqbWJ3tZGdh84DoCLTzJkMP38QAoImQoJJXpS4QHpSQxFpWJ7uJ5PqVQjFNNRXRXH9kCCbqhEIiEa4wmk72MoKql4BE16LO6dTSwcYVFvL0/s2U5YGkSlgvAgpYUY9Wo0RxqIRSJEwmE0RcOtKLR2N+FLlXRDE+5QH5oUpEIGQkJPKk2+Ok46kqRmB7MAvWrhOJJk3EBTJKqqQNmhsamZOR09qIrK3PZuirkB3IqLNX2cogUzi8ZEHFNVMVQVjzBNHZ3MbW4hqhvMbQoCzaZqMLenB1VRmN/VzZBt0RyK0tbUhAQmikHWcSwUwccjGY8RtaNI26E9mUBVFNoSCfpyE/ieRDUEKARKq6aC5qsIIdA1jXgqhuU4hLRwcH2qiiIlQlURgCIEuqLheT6e5yOReJ5PRA/hWPbJchHEGnTKOYmmariOi2lqdLcmcSxJ0a+ybMUKItEo173pxhe5l9Z5pVI3Cq9CdNNA07QXDBJO9B2kraMFARQrVdBNFly4ACklwvJ5dvMeemZ1MKu5jbJnU/BqHB8ZZsmCVhQUan6Bkpsnbqp0tDaSbIgGgV5NoaUjgXQlMgrjRZfJYp4Vc+ZSrtbwPJdIOMwz+/Zy+oKFPHvgAGHNQGoqNaETMUymxgcIm2Ey5SylSpmqZVFxaqRCYcazU7SmW8jmM0SiUSYmspTDHhFVYyCbA1UgVI1SuYqQkqrugZCUpEOjMLE9H9OMcGL4OMNTo7Q3NDM4dQJVhabebqZGxkFCTQ+MQ75SJh2NYrkunqlSzWc5UczSk2pipJQDoKpJhsZGaUgkOTYxhqtoTEyNMpXPYTsO5137Zu7ddB/FaoV0qoFcKUelWCYSDXE8X6AxmSTjOyhCwTd8HIIiPhO5At2xRhRF4ksfV3ooisBzJZb00DWVTKEIioLtuliuh+/7eL6Ppgta2xuwKjZCE1i+SzhsEIvE8KWP5ZcIR8IkwmEaG6IoikKx7FK1XSqWy7M7dr50HbXOK5K6UXgV8p6PfpTh48fpXbDgl95T1OAjD2TbfIbGj9PROQ8UkHiYhsL8nll0NDZRtS2e3befjqYmujuCpYk1O8q+432cNm8ebakGXN8nWy2SL5Z5/XlnoCCYsiv8bMNGTp+3kNMXzMeXPgMT4wwUxuma10LENFg6dw67jh4iHo/T1taLQLAoaXB4aoAFHR2snt+BLyXHR4fxPI8FXV3M7+okW2pm5wPHMXWTeUuXoKkqlYEoG47uoTA+hVf0ppdxKlSjIRY0dGC4AqEpnJg4SveseTTEwlhOhZ62ZrJTo0wODjOvtwuEYHA80D5a3jufuc2zcX2PDYO7iaTTzOpqJazpzIoGQoyq43N8apTjU6MoioswTdKpOAVZQaqSTZsex7U8Zs/upaWpiVSqgaxVAt+lpasXwzAI2S6W5dLSmKIplkACnW2NeFISCZmYhoEvJRPjBRrCBqFQGBA0JBKMFQrEwlE01QjqRZgVfNenIRlDxAWu71FwClgVFdMwkFIS1wUTmTKKqiCEguc61ISLpgoURdDU9JvVBOq8uqkHml+FROMxFixfhmH+8kyhZ+npSFFBKmVOFMep1mzUgk1CGriTRdKJKMNTg5RkjbFCFiOiUbNruJ6FlB6lWonmRIqpQj6IS7gOtmMjVEHVdfCRTBWLKJpCtlRGSh/X88hVKpiRBipWDV9KKrUq0lQwQ89p6zieh6up0/kOAYquoIefW/0ifYmW1JF+kEMghMDQNDpaGkhMC71JKQMj5/nTIeHgOD8MYyeGYWarIBIx6Zk757nza8F7iqIiEKhCIdKQQPE9lGk1ppMFdKrCmznOF4KIFsaXgbkFWLhgKZblP+d6kxKrauF4/sxxhmkQiUVwXW/6KIllVXEcd/pcQdsjkRAl18L3A7WnUq2Gj8B2bKT0kb6PgsCXHlXbRiIpVasoUgVcfN9F+i6RmIKuCkKmQjKqk0yGMVSVOb1NXHL+Uub2pmaC7nVem9RnCq8xxvr3EQsHX/pULEwuV6S7ux1NU3HLFpMTY/TM6yXaGkLEG5iXn8XoyBien8fzoSUZZzhsctXqVcxtn8VUcQpHd3l0406M5jiWa7OoYyHrd+9B6Aq6YaMh6Oxs5dDoGKeftZhlCxYydGKYe7Zsoua4LFveiuO4RMYkR3edwDfD9C5ZiY+EJ5+mXKiRyWXYUygRjpq4FQ8/BPGojqmb5MomIq8Sb0myuCmBogg2DBwjO1nDTOq0NaRBSrQD/URjMeJJk+6WJrYdOkKuUCBp5Lny/PMxDIMfrrsPgKJdIdEQwvZsRvumKOSKTJWqNERjZEplAFShMH9WK5qusWP/UbLZKTQh8KsOUvoIXUNoUC5nsVIG2Xyeim3RGIpRyA8SjoQoFnKBLLgZ4prLLwIE+781DMJH03Xa2hNkcxWqmRphPYai+mg66LqG4ri0NyZobm5GSsmB4yVcGzQVhCoxDRXb94iaJtr0KqxywcIwVRKRMKqi4rguZd8jHI5gmia671OtlIlEn0sCdW2bJ3/0E6rFEhe+/a3EGlIvaZ+t89JSNwqvMTrnnc5Td30H3/eYnMyTL1WpVWuEwyFqpSouTjAaFUHwcnh0DMM8OZqXeL7HyFSR5mQaXdNpiDYEwWdDx3VtfOnjuy5mWOOcxbNRcADB4t4udgz1c/qy5YTCEXpUBV3X6eltwYhKdKmwrKGbR3bv4XUXXkxnz1wkcNGq1WzYt4WoalAqV3FcF6FCPBRlYU8XihBEwzoPH93DmW1NLGpvAgnCUOgby9LT3oLvyyBga4EQCmcsmIOmKpyzeAF7izlO65nFmUuXI4RgMhcI4l1y+hks6OrG9332TA7T3N5CNhTD9gSxcDAjaYsnmDevC6EIfM/n8GSVULlIUKtBZWrwGGpEp6UlTSik09raQGoigYlCMhlGKILmVJTDk4Ll8+cwf1ZQX+HCc07nqV07aExHME2N5qYY+rCGisQwVYSAsKmTKVcImSbKtGZXY0OSEdsOXEMIVEXB9iQa8rkvui6p5m1cz0MRCp7nUbUlExNZhKIQicQJT0tvn2RqeISDT2/BqlaZu/IMFq4650Xto3VeXupG4TXG0PEjjI4HI11F0zFUh8cf2YyuG3hOFTNssOmp7UTDEaQUlMtFKlWHfLYEAsJhj2Q0xCPbt3De4hVMlabw/SKO61OqWiSjIQ73D6PpBg8+s4ubLzsXKQTbjh3ELjps27Wb05cu5VjfcVxT5cR4FukJFFVh5/4+ZFjlwc1PMLdnNkJK7nv8CaLNEXJujZCqYJo6ImFSK1TpHz2BKuHg2AlcCccLNp3xKkIInj56GCE8xgt5muMJhJBUDcjlMkxkc7SkUwyOT1DJFxgWNsVKGVPT2XJ8H6877UKe7T9KWyqN47ocK47TOj5J0a4QMyIU7eD+DeSLTE3licUj7B4cwbNUJq0ss1QdBcmSs85H3v1DxiezqKogVyhTnirjpA1KJYtQWGeybCEFbD94iPPPPgshBJue3YMvFCZzZVzPo2a5qIogXyvTYJmoqsLIxBS+UDgxNYWq6/i+x1SpiOP5ZAtlQqZBsVxBNTVK1Sr+Sbvu2fgSjg9OYWo6Lj6KIjk2Osm+I6MYujYjY36Sxq5OllywhmqpRFddC+lVT90ovMbQdSPIkJpOpspPZ7JadhVTF5QrFmHDoFKughCoqkbI0JCuD0KQz5bwfB+/4rL+qa1oukBLaZimRk9zCE0VWFUz0PVpTvPYhh0oisKK2R0cG5ri1m/8lC+NfpOuzkaS7WHsksfgoX6QPk2xRqTt0hlNcOddt6MqCmuWLmLjSB8RdDzFoVyukUBl0tf59vfuolq1WH3OEnRFJT85wV/84F4URXD2mkUcUrJYhRJHxqbQNJUoCh2dPXx1804s2yadTKAZJqWRUf599y0IFMR0xbQTRwf5u8d2o+oKsaXtRBvTxE0NVVZJTM+cGsMhBg4eBukTlwqVVAJtosLE5CRCEezZuZlapYZMeGTGs7iejxELERYauqbju4K4YeA7ENYUfnD7HQBEQioF20O6LuMTeRRFEI5G0LDxLB8Pn7Z0irFSGSEFR/uHg+MSOp4vMcKBtlM4FKLiVNGEzsk4iudouJ6FjoYzHccIJUwUpYpA0NCQ/qU+o+k6F77tLS9216zzCqFuFF5EDh8+DECtVsNxHPbt2/cytwgqpSJbt+5HFYKqgHjCIGIY6JrCRLaKUFQiIUlnaxOVqs1UoYgL2K6HEEEuQ8VyqdkOKiqKorDz4CBmxMD1fFRFpWa71FyffKlKnEBwcDxXIhKKUh7JIH1JuWxRGndobUjCdEazbdvYVQfH9VClAN+n6jqEFAPf84PgsQiyjX1bUqkEYnBjE1mSnTEmRifwXA9PQK5YxtB1PD8Iwnoe1DyPx9Y/jO0EmcKW7aAiUM0wji8BF9cXOI5DtWIhJbiOj+N5HD/cNy19BwLJvn37sKUbtF1KVAXsYhlFTAfJfUm1VCOWjs2MvBVF4FVt/JCY2aaqCpFE6HnB50rNQdUV/JPxXgm261JzPRJG8HvNdjFDBk41yEgWgsAlpChYtoeuKVRtB0VTqNVsNFUDJFJxqVkeaC6aohJPN+JYZUxDRdUUZs3qekX009+WbDZw971Qm6WULFxYn9n8rtSNwovAsWPHgMAYxGJBjV0hxCuiXsOBHc9SmFY9FaZGIhmhXPEBH0VVUXyP7s5G5s3uZCpTIF/JYTmCkUIJKSFkCjRFMlrKkDSjuBWXhliM0WKZJ7cfQdcUQBA2DE4Uy7TMmYuiCg4NDoGULDq9i9xYkd75rWw8PEDJchnLVlEUQcUdRVUUdh07yvKOLhRF0Dc2QtFxyDbYKLYkFolgV13UkMniM+ZRLJRJd7UxXBki2j2f7mwBVVUoCgVpCsYrVRTbQzd0ovEQLW2dLJjfS6VUIdGYYPBwH2XdIxwKIZGUTRchBG5CJSliqIZCxRBosRBHp3JENI2KY6OqKjXH4cCJEgowZVfRjQilUp6edBrP82nqmo0mBJVaCSORoFKpIhUF35UcG5gkZOoUHBvpOlioTGQqwYou28E0ImRLNp7tIRSBGlWJhDVyxTKqEDgCHEXiOxJNCfqV43hIAeWKg6ZpOJ6HKQQSBWta2qNScZBSgKLiisAA9vTOJrdrD6oSiCe+Evrpb8tzxvXUafMrnbpR+D3hOA5DQ0MA2HYgrrZ8+XJM02RqaoqpqalXxKils72dR27/CZmpCXoWL6ZYdRBKLViy6fuUrBqGoaOqKuGwSaFkY/kKIS2oW+/7kK/ZNMYjuNIDBFJCvmQzoQWupaZUDNfxWNjdieOrCAktzSmyEw4tDQmSoQi60IiGdMxQiOOjWaSUNKdimFGNjliM0YkJBNARjzNRnAjkHzwPq1gkEYlSEzBrflsgi43K9kOSFA60pgDQwibjfhW36uA4LtRsfFMyq6eHx2wbQ1dxKjZSVWn0BOXpWUDSN9E0jaZ4nFhzsBR23PHo7enh2AYfy3EREhYuXIhn+RSrVQAUTaUp3Ybhe5iagdTg8P7tgKAhlULVTJK6Sazigm9RLAYvoQqUuIlbBtxgiWvEDFHFQZYktZoblBJtTGIVK+BLPCRCCYSSlF/w/8eTYapTFqjBUl1FKFiOjZTPrTwPRRSsmsSXEkUIrnzdNXz6s3/NPXfczv59e7n5/R+kqbnlRe6Fvz/279+PEOIFv1snZfHr/G7UjcL/EM8LvshbtmwhkQgKpC9atIiNGze+nM36lcQSCb79wCMAZDMZ+o4c5ntf+wJCSio1F6EZPL3zCOWKx+hkjtFMkVgygS4DaYWhE1NITeX4+BQ96QZc3+PIWB4jFCZkGoTNMKVyEU3oHB+dYElPBCEkI6OT2LbDVLlKWNHwhE/BskmHo4RUBdfz8RRJzfWYdKo0CB1FEewdHkWNh3A8FwFoqspUuQa2xPcDIbhcqYxVc9CTLTAWJJ8dz2SolKu4KR1pSxRFYdKt4LrOtKCdxJEemg5WJIovAyM0mM0AUHAtIr6J5/s4KuQzk7jSR0fBYdrVE9WgJBBS4hsKhXyGkl2jQUbxpc9lV17H+mefoFytEo8ZWHYN2wpiOILAy6+bBlVZxVMEeBKpQLVaQ0+H8Q0PxRbohoIvA2E+hSC5qGzZGIkwlWIZQzWQEio22K6kVqkQMgws10E3BNWKRSKawvV8LLeGUILVSdKXnIw1vP6Nb+L1b3zTS9cR67xiqRuF/wHDw8MMDAwAsHTpUlKpFE888cTL3KrfnoZ0mtTZ5/BDTQUkuqdTyJdpbWyhWlWJhJIY2gSFfJnuub0gwPUlw5ksMVUjkwtkpiO6imHozG6fg67pDI8NM14cJxYyOTEczJ4iqs6EUiFXsikbAqdQIR2NMJnL0eT4+L5PsSgxFYVq1aNaqSKBaNikKgTZYg1PaghZI2maWLrg0EAG34dEVENB4DolxkpBlb3WVIyc76NJQdXzcF2PlniUVEOaQwPDhAyTqlUl2txEfmCEcrYUuCLsQCW1UnQoGeC6PnrEoLNrNpWKG7SnGojmuVWHxkQThqbRn5uidWE3Y0+NMOFX8H3J9q1PE9Y0jg9mCGsVLNch3dPE5IkxHHdaabXmY2gK5UIFd1p01TQNcKFQKuN7EseCtlCanCMplYL2abpAFx6uA5VqNYgpqGHsahA8rjkOvu+j+oJkLEksGkdKiZ2zEMJFiiARr/HXZDD7fvC5aFr9MfFaop7R/DsipeTEiaAc4+joKAumpSRSqdTL2Kr/PkIIOuYsplypUSxb1FzBVC5LuVYlk89jS5dK1cL1PKSEcrUKCGz3uWxe1/cQyvRSRhHkApSqFijPdS/LcQn54WCUOr2qqZCvEDFCSD8I1vqeRzKWDJQ8pZxeISVJJxJ4Mgjz+kKlUrVQANcN3q85PliCfCbPyXziilUjaoSxbXf6OsEP6RQKWXRNn67GplLKFQmHgjKkQlFmso9DpokQInggSoXJiTFMI9hmntSUcsHUdRRFIWaEsAtVDM1AoKAoCq7lUrE8VKEhfdAVDWnZuN5zLg1V1TDN8Ez2MoDtOOiqxnOOIYEvfcxfyOz2PR+3FlRcC2YdAvBxas6MNHgq1YBrS8q1CrZtU7MspOuhqRqVqkWlZnPNdde/YL/I53J88F3v5l03vJnj0zGyOq8N6kbhd2Tr1q0MDg4CcOaZZ9LY2Pgyt+h/zpFDxxgbL1OuuGiqypnnXsjRwWHGpjJIBzzPpWCXydtVTEPBqtQCo6CoKJqO8MGTLjsO7mfH/kMMjZ/AVBWGJ6ao1KpUqlVqbhXPdamUqljlClaxgqkbKIqKVAwkGg4Kds0KJCNiEcLRCEZYxy572FYFfBuvViIe0jBVDdetIIRLNjuFoarMXroC8BB4TFWKxKIxpK7g+hIpBLpQSSbTVB2LSq2Gi093RxdaIka5UqFSqaDEggfvZD5LPp9nYmICC4/WplYKtRKVWoV8LchT8DyfkakMU4UiU8UiIdOg5tmUq2WK5RJXXHMdVrmGJ2xc6eBgoaoCMS1053s+mq7gWC6u7+L7Hr70iMZDSBkYMl1X0XUFx/KpVqso+ChMq6C6PtVqDd9zcF2batUCASHdwNR0SsUCiiqIR6KAREqfOx58FM+XWLZLzXLYvvWZF+wTA8f7OXb0KIMDAxw4hVYj1fmfUzcKv4GTgaqdOwP1yK6uLs466yyAX0ryOVW5/q03YZgG0XiUb/7gThYsWsZJ/R7b8/AkoKhIAUILRpmRkDkdeJaYhk6pUmVkPM/RoROUqi66rpMOhSkWqxSKFXQhcB0Qnk+tYuG4HrpQ0IRKpeBSKUmcsotvSUKqSiQaIhoNIR2fWCyKJiWK56ApCr4UGCGN7FSG8RMnqFWqWL7P0b3PUq5ZlGoWhgxG4ZV8lfFsibGpIl7BwrJqTOQqjOXKZPJVXFVQmphkqlhhslCmkg0e+E6lysTkGIVCFqXmEYpE8X2Psl2Z1h8C4cJkocTQZAbH9kgkUzi2R7ZUpFApc8ftPyQcD6MJBaH4qEIghY6mKkjbR7o+5UKZxsYkSAWhBrMVx5Y4NQfdNNBDOpqugRdkTZ+MKaiKEijbTvdBgUAoAuEH9aiFEEQiETRNxfM9fOkjFEF7ezs/u/s+Zs3q4fwLL+Cyy694wT6xZPkybv7AB3jnzTdzwXSN8zqvDepG4Tfw9a9/HQiKygO0t7fPFJp/tbD2ddfyw/se4Ts/u49ksoHLXncdpWqVQqUyrc/vYVVcyvkSY6NZQrpKrlSmWrMpVWqUqkHCm2EqGLqKpkmyuTI1qaLpCoahksnVaGiMY097SQSQbkoikEE1MQEoklA4hDttbHzp4xqCas3CE2LaCLmUqh7Sfe7hhyKImCF65i2ZcblUXYmhKAhdQxEC09CYnI6BaNM1EzRdoZrP0zVvASftuwgF/nPF0INqab4k1phkfHQCCaiKysngbKojMXMPY+kY2anRmXoMAG+8/u0Ix58R95OAXSmRSgXlTwGamluwajUUJXChSekTNRR818exHHzPR3o+qlAQisD1PDzfJxEz0dQgie5kvDgUMhGKCGZmtRqf+dwXUYVGOBRCVXR8P1i6uXjxEp7YtJnv3/ZjYrHnNI5+EVVVeecf3sz/+ugfEf0V+9R5dfLqerq9CLzjHe8AmIkdvBbwPA9fKvh+8MDpaOpkYjzD2IkMjusjBdi25ODhYQ4fHQFP4nsS17bBd8kXqoRMFUVAqeJTKAdKoVKCoeskmpqJphoo5IoIqSBDCiKq4uDjOi4126ZveIJjwxPkJopgqtiuh4vAQcUQknAyjqKZGJEonq8Q0lUsx6VsQcUCKVWkZhKKhEgmokSjEZpTcUwzRMLUaE5ECCuCltYuxoYHaG9vo729jbAWZDSrwkTVU+hmCmH7dHf3sGD2Qs5feT7zZ80HQFZ8WlobaWlrRPMELW29qBoYoWCEv3f/TsKaSs0Gy1Oo2hCLJ8lnSnhesHoqM5XD0HSk5yNdF1wPRTMwDB27amOXbCrFGiAoFWqB4fB9yhUbQ1XxJUgUPF8wu7sLOR1/cHyXQj7PN2/9AZqqo2kaIdN8GXtVnVOFulH4DSSTyZe7CS85kUiUz/39V5g7bwFhI044EuHMs86lMdWAoiiEzSi6aaCoAk1T0QwjeKBx0pUBobBJ2AzPjIglYNU8xLQkNULgOJJK0UKIkxm+gqZkIqiNLCVSBqJ8nu2gKkECoKIE5Sidqo2iqghFRVUUapaDNZ0zAOB7klIuDxIUoYAEzTCxrRqaqqKpQTA4m8vQ1taOEMHvqjadBDXdJiEUVEOnUJigMdGApqqkkykAqlUHRVVQFRVN1ynl8jOBdEUohENhGppbZq5NUQSFfA5VUYM2TVdV0/VQsLZ2mkK5QnNbU/D3CWYnqqrS1JqcmXXoqkLEDKNPrwyKRsIUS2UaGxsx9BCGFuKGG9/GWWet4nN/+3d0zurhure89cXqMnVeRZzSRiGTyXDTTTeRSCRIpVK8973vpVQq/VbHSim5+uqrEUJwxx13vLgNPQU5/cxz+Ot//Bof+eSn+Isv/h2d0SRXnn8lV66+CEUo9La3sOasxZx31iKk9NAMgwU9bbzpsrNZ0N1GoVjBsiwq2RKVbAHpOni+T6FUYCqTYXx8HMexSKTjqCpBAFYVOJ5DNJbEqlpYVQvb9VB9BUUX5PMFsrkckZCOoYLruMHL89FQOffCi4lEDUJhDT1sULOreKoKmkDqAtf2McwQrpQ4roOvCFKJBlKJJFIIpJCkmwKXULZQnHbXuJRKFRxbMjg+yERugqHxQGsoFDGxKkE7FV0lnkrQkEyADOIHq85ZM73aRyB9D11VaGhMY+g6uhG4ddKNDdQsC8fyKZUsiqUaHR0dFLNFfNdF9Tx83yOExKratKZitKcTxMIRXM9DKAqu74IiSEUbkJ5PqWxRKNX4/Gf/CoALL7mUv/vKV1m8bPnL1p/qnDqc0kbhpptuYu/evTz88MPcc889PPHEE3zgAx/4rY798pe//KoJFL9YxBNJLr78SmbNmYdphBEIdM3k8iuuIGxqmKaOoWtETINoPMbi2Z2kElHmz2onGotRKVSolmpUyhZ21cXUVJACy/GQQkNISUNDnHjcpKEhTNhUsVxBuVjEsR0c28GuWvhSI58tkclkKeaLCBRcx0c1wuhmFFULkepo4OC+3USTJvGGMOGwTjySwHUsLM/GciwUIXFdJ3B1uR74gRRJrlBEaipS0ylXgiWs8UgMMxQmGoujCpWWtk6k4jBZGkOqQa5ASNVxLQenZuNbHvPmz8cq2yieQDo+z2zZhGGaKELFNExAoOsG1YrF3O4eZnd3YZWrCBkkmFmWh235TIxOIIRGWFXRkJhSUqxaKB6EDA1DU3Bsh5CpTc8mBG2tbUxNThGNBP5/IQSNjU0vV9epcwpzyhqF/fv388ADD/Ctb32LVatWcf755/PVr36V2267jZGRkV977I4dO/jHf/xHbrnllpeotac+qY5misUJtHiIdDKOYRgkNZO4ZuD5AoHk+Mg44xM5BkbG6WxtQouEicWjJBJR4skIiWQK13MwVAV8ByMap1KsYllBcpnl+OAJtLCJpqkoQtDZ2YJQoKW1HVVTMUMmjlBxag7Sd/E8F4mHdFwWL1mJkMFD0rJdiuUCoUgscAGpGuWahRBBJTehKBiRCDWrRqKxOdDvkEFFM4BYYwTXdbGsGg1tKYrZ8ZnsddcJ/jcME6EEbqD2zi76jhwiloyjqAp6SOfc8y9COpJwSEeIIBFPOh6NjUksx8b3PWb19iCkRzIVRVUFuq7Q0pjGMMI4ELixDJOpbB5QqNoetutTqtYIhUJEQwZzO9qQdpVypYKuCs48bTGL5/dy5VUvvLKoTp1fxymbqrhp0yZSqdTM8lCAtWvXoigKmzdv5vrrXzgpp1Kp8I53vIOvfe1rtLW1vVTNPaUZPHaYvVufAtfGnhziqnd9gMPPbKaWqaKqCvM6WpiqVYnpYcqFMslIhEKhTFdrAy3ze0EIpk4MYAmVtlSCjsZGbMdhd98gUlHJF0vIYjBCEXoNz3MRAhRNoVIqEWvowNAsFi+dg+9Lao6LosQYG+yjXCyRaEiSz4RBWpQzZXxfkm5MoMQasMpFOts7kdJnaHQcVVXp6Z4XSEfj0rt8OQNHj3Jo9wGk79PUHoyuC9kix44OoWkqZ553Dm3dc9AVDV1VZ4ZSvm/jag5IyOTGOG3lObT3jjDvzAX4nk+1WqZWrdHS0IQiVCQe6aYWqsU8dmUcr6ZSc4r4ZoRY2GD2slnBEt+QwdREntm9vYR1k6ptMZKdwHc8ktHGwMBgcOLEJM2JBA3xBJ7nEYunSDc2MXZikKip8sDdd7BsxekvV7epc4pyys4URkdHaWl5vnCXpmmk02lGR0d/5XEf+9jHOO+887juuute7Ca+KnBsm/07t6FFIqAqzFq8gqNHDpEvB0FdKSUNrZ2UK0V86U9v8znvoouIRCJBBhYCRTfQ1BARM4RQggCroRvoxvPVLdMNaZpiqZkyykJRcV2XZHI6SVCAZoZwfXcmh8T3fBKJGFIEQWdFCGzPx7Us4qmg5rDvSyKJGJ7nUXMtHNfGci1MVaGto2smo3k6GRhFCWTBNU0lFU9TmK7I9osYuhHkBwhoSDchfCgWyvieh121aWxspmY7zy13FYKQYeB43rSQnU84HEH6PrquIgjktV3PIx7V0aaD1pqmkW5ME2tIPFdzWoLt+ngy+Ax8ggGPbdskkilMw+Cq17/x99EF6rzGeMUZhU996lMzq1F+1evAgQP/rXPfddddrF+/ni9/+cu/30a/itENg85Zc8FzEIbBxNAxFi8/k0hzI7PndzBvSQ8T4yeIx5NUHR8jkqTmeDy7bQdHDvUTUSQxVVJ2Xdxanorr4doOpVIRRTeway6eK6iWbWo1DyOi0trRQTwZJxaPomgKjlfFFYLJbInJbBHNCCEkKEqEYsnD9wxwPVrbuhgv58jZJcZzBXypUsyXsGo2ds3GcySqqjI81MeRgUMMDvWRzeXIZrPMWbyQOYsWkmoOtICkI7BqNrWyTSGfZ1ZPL/F4gramZsKRCAA+ku72ZnraW7GsGq4nOdE/zsDeIfr3DeJ5PvF4hPHJMaZy40zmJmnv6EbXNQo1h5Ll0TlrDrVaFce2g8S7apWe2fNxXZ98MUO5mqdUzuFbNqV8nlRCpbHBIJmMEw6HcdwanmdhORV6emfTO2cOlYlxBo4N8t1/++rL2XXqnKK84ozCJz7xCfbv3/9rX3PmzKGtrY3x8fHnHeu6LplM5le6hdavX8/Ro0dJpVJomjYj9HXDDTdwcT1r81ey9MyzQQTaQ1JKhA+d6QYamhqIxWO0pBK4tk5LYyshM0JjqplKqURvS4pZDSm6U0nmNjdTrpRJhwwaElHamhrRkLi2T7lUwbZcHNvFqrksOONMFKGiqkHFsMmJDFalRqVqY1kelWKJZCrJ2FiGYrHG2NgUjmdRq1XxfYntBLOI1WsuIB6LBTWbp//BdE0fJPjQ3txFb+9sdMPEDIdPJnJTLBYDfSHXJR5LEo3HmT+rkwWzu5nd1Q6AokLYNAmHTEzToKmpEV1T8T0/cH8pCp7j40sXX9o4jsXrb3wHlUoVVQRJcMcOH6S9oxPTNFAFaIrCUF8fmpCEDB2BxFAVdFMjFQsTj0aIhkyiIYWezg5iYROBJKSptLS0Yuo6R/pHGZvIsXnTlpeht9Q51XnFxRSam5tpbv7Vyo0nWb16Nblcjm3btrFy5UogeOj7vs+qVate8JhPfepTvO9973vetuXLl/P//t//49prr/2fN/5VzIIVKzm8ayuLzzqfSCyKF0lTqgzjex6LzruC/rvuYiqfp6VBIVPK0d7dy9DRQ9huEB8oOB5CqFRcH9txsSybZEsHulRwrBqTE5NEoiFSyRRvvP4d3P2T74Pv4wmFZEOU+fMWMzjQF7iGqj6ywWPxmYs4sucIPfO7UdWgxKV0dWy7RktrCxWnRjiZoFwuIBQVZfqJb0ZC2JZFKBzCciw0M4TtlFEVDduzAJg1pxNFUUkkYyA89u3exZGBETpbGukfnQBA10wmM3mEhM7Z88lkJxgYGKFcrqAoCrquEzZNFF3H81yisQTd3b3o4Sg1y0JIwXkXrSUcSZA5MYxdKSGEwpKlKzh6ZA9DhSKqohKOx9AiEbx4iqpVQVNVGhrbcVwfJ9FAITNJsiFNKp1mVu8cZvV2c+zYADe++10AHNy/l3/++78hEkvUBz91fiOvuJnCb8vixYu56qqreP/738+WLVvYsGEDH/nIR3jb295GR0cHEEhbL1q0iC1bghFTW1sby5Yte94LoKenh9mzZ79s13IqMLhnK2HpcmDbU8yZv5CO5jim4hDSfLY/+SCf/Ksv0JzUSIYdUhGFpStO561/8D6KjkXRsfHl/9/enUdXVd1/H3/fITcTmeeBEBkFicRfJGEGkaeAE7agiAhoqfAUqVVof/I8dVUfWxdYqWIR25+ilVoQp9Iftoq2gj+UqTKH0YYGCCSBEMgAScgd9vPHNacECBAkA+HzWou1yMm5N9+de28+5+yzz96n+T9PP0dkfAJ5hYfIP1rMwAGD+L/PPk+gC+JiwwgJCuC0103xkcNkZnYmu08P0tMTiYmLoqbqFEF2cNkMgYEOElJT6NDtOm6+JYvE9ESMy0lUdCw1lVV4a3wcKyrG4/bSqWNngiPaERwWQvA3ayvb7A6crkB82EhL60hSQiIOfNiMm+BvZkCNiopiyJB+9OrVk8ioGGITknC4Aimv9d+AB1BVXsGuzfvYsSmP0iNH6NNvMNVVNf4zntO1nK6pIbV9OhgbXmO3blDzeX2ERyQREZXMts2bueeBSVSdruafBcfZd7iUO+8dx533TKRdmAuH0+DzVjPvt4uw+wyVJ8s5UXGC4OBAfjzrZxQfPkRVbS2FxUXcP+n7dO7ajYqTFcTEhbM/fx8Af/nzB3zxyf/wyQcfsuqTT5v/zSNXlas2FAAWL17M9ddfz6233sptt93GgAEDePXVV63vu91u9u7dS1VVVQtW2Ta0i47DB8SndACg8/U9re9l/EcOKWlphIYE++cZcjoZOuJu4mNiCHA4cdodhAaH0Klrd2w2/MtLOuwkt08jPimJqOhYaz6p6mo37VPT8ZoAat1eyiuqiUtO5q7R4/1H+w4nhUVHmPTAj/x3AjvseHw+4hITiYmNIzIulnbhYQS3C+HeeyZQ6/ZQbTtNta0W+zdvd4fdHw5OWwDRMXH4fOB0hmBMACFBoQBERMbiDHASER5Gu3aRxMXFcvq0B3et21rJLL1jhn/orMPOkFvvokvXG0hKivEfyUeEERQcTE6ffjidTuw2O+07pAMw4rZROBxO7HYHMbHxBAeHUFXlpua0h6pqN7nbt3HriDsxPuOfGwobMbHx3NS7N3VXrdPS07khoxdRsf7RUk5nALFxcXTs0oXg0FDsDgc9e2UCcGOvLBwOBw67k1OXeHOnXLtaXfdRY0RHR7NkyZIGv5+enn7R5fi0XN+lGffjpyg/XkJUnP96jSsygdzCCnxeHyP6tQeg2hXOocP5VLsNQYFBdL2pH39bthSvu5aswf7RXvf/4DHmP/cz4hPbM/DWkQC8+F9vs/z9JVRWVdF3wBACXYF4AtpRVnWKgNBwHrhvChvXryEwwn+3cUJgCMnJqZwsq8R70mBs0CMjA4/HQ2ZWln8GVqeNhIQEjpYd4aQ5BdhIivZfC/B5qvG5q6n11pKcmso/8/ay/9BhvF4vna7rBMCNPXuSFBvO6dpaMvsMISoqhuJDxzh1stJamGbM2PsoKynA7nDSt/8AAgMDceIgOjTUmkAxp/8t5O3ZRq3bzeRpTwAw4QfT+OfuPZw6WckPH/9PAEZ/7x4WvvEGwYFB3HH3GJwOB3ZbANWeKtLbd/TXdFM2n33y3zhsdrIHDAUgJj6F2upTBIeE4XQGEBYWwAcrVnKitJSU9mkA/K/bbmf2yz62b93GiFF3NdE7RNqKqzoUpPk4nE6i45Osrzeu+ZyK0/7xmzu3/oMBQ0dw5FD+N0e2Xioryjmc/zVerwF7AFs3rObWu0azedNX5BccpfjYSYqLCklKTiE4OISxE+pf64mJi6e2uJAumd3oeF0XSo8W+4+SDWTd3BeAQQNvZcVHywlwuRh37ySrH9/r9ZGQ5O9CHP3d8fzqd/7pHiZP/jEA3XvcRO72DcTGJREYGEivzJuw2WwYY8ju0x+AYSO/S9HBfxIRFUtCov+5AgIC8PkMsfEJAGRk9mbsxCk4nU7SO/onyXtkxn+y+I2F3P7d0QBEREbzwxn/D/j3VOuHDx0kNDKUoLAgiosOkZzantwtX5H2zXxHhYcOkBCXQFFJKV6vj/LcXAA+/ei/CXDYwQYfvP0mfQYM5ljRQcLaBeP1uampriIoOISQkFBCQkLr/T5zBg4gKDxMq6jJRekdIpdl2B1j2LblK4zPx+gHpgJwXbee7N+bS0RMInEJiRiv55vVzAxZ/YcAcENGJpFR0SSntCf6AgsUTbx/CocOH6DTdf7ZaXvnDMThdFJTXU3f/rcAMHLkKG4Z8h3/VBLfdD/9ZNbTHDt6hJT2/m6u7l0z+K85b4PNhivAf73gkRk/p+rUSYK/+cOZkJDEggVvUFpaQu/efVm9ejVOp4sbswbUq+nFV39P7tbNZPfzB4fTGcCgoSPr7TNqzH2MGnNfvW1nT6eSmtqBLt16UFNTTeeu3QG4ZfgdvPPWG0RERtK+Q0dcLhdhYeGUlZWRmJQCwA8fe4KZ/3scGMN9E/0hOnbCD/jw/bfo1rMnQcEhDb9gIpfIZtR/ckGlpaXExsaSn5/Ptm3bGDRoEACrV69u8P/9+vVj7dq1DBs2jMDAQEpLS9myZQu33HJLi7WjKezZswdjDN27d7e2edy1OL/54wtQWX4Cj9tD1BlrAbvdbhwOR6tdl2LVqlVkZmYSFRXVrD/XXVuLw+m0fi8ej4d9X++hU5duOAP810G8Xi/G+HA6Axr13CdOnGDbtm1tbvTR7t27sdlsXH/99ed8zxiDMYbAMw4a5OJ0ptCEfD6f9caEtnf94nztcjgD6n3dLjzynH3qujBa+++jueur+8Nf93MdDgddu99Qb5v/j5u90bW15fdgXdff2YqLi7Hb7aSmprZAZVcvhUITqFs4vaqqCrfbTV5eHgEBAVSfMd//1c4YQ1lZGZGRkW2qXeBv2+nTp9tUu7xeL7W1tZSVlRHYhhbbcTgcFBUVERMTQ2jov6+jGGOYP38+S5Ys4dVXX2XQoEH1uvHCwsI0S3IDFApNwOfzYbfbWb9+fb3tq1evbqGKmk55eTkHDhxo6TKuuK1bt7Z0CU1iw4YNLV1Ck9i0aVO9r6uqqnjhhRcAuOuuc0dclZeXEx4efs52UShcMT6fzzpDsNlsdOrUiX379pGamkpaWlqbOiqpqalh8+bNdO/evdn73ZvD2rVr6dWrV70jz7agtraWjRs3tsnX7dixY3z99dckJyfToYN/kEF+fj7gD/hHHnmEzp078+KLLxIfH48xhoqKCkBnDWdTKFwhHo/HWkj+zKOxgwcPcvDgwRasrOns2LGjpUtoMps3b27pEppMW37dCgoKKCgoqLeturqawsJCCgsLrSlxzqSzhvoUCt9S3cIrPp8Pr9dLaGioNRoiKCiohau78oqLizlw4ABZWVltcsy7MYYvv/yS3r17t8nXzxjD1q1biY6Oto6o2xKPx2PNYtCjRw9CQ0MxxpCfn48xht///vc8//zzTJ8+nWnTphEQEGCdNeiMwU9DUi/iQkNS+/XrB8D69eutriMRab3qFtk6H50x+LW9Q71mUBcAPp8Pl8tFamoqhw8fplu3biQkJLRwdU3DGMP27dtxuVz17ktoazweD1988QUDBgwgIKBx9wJcTfbu3Ut1dTW9evVqs0fHJSUl7N69m9TUVK677jpr6GpBQQFlZWX85Cc/Yfv27SxcuJD+/fsTFhbW0iW3Crqjo5G8Xi8ej39xd7fbzfbt2zl27BhZWVltNhDA32108uRJOnfu3NKlNKn69wO0XR07duTkyZOUlJS0dClNJi4ujqysLI4ePcr27dtxu93YbDbCw8NJS0vj7bffZsqUKYwZM4a5c+dSVlZGRUUFFRUVbe5+jsZQ99FFnN191KdPH5xOJ2vWrLmm3zgiVzt1JZ2fuo8uUd3ZgTGGwsJCbDYbHTt2JCkpqc2efoO/vbt27cLpdNKtW7eWLqfJ1dTU8NVXXzFw4MCWLqXJGWPIzc0lNDSUTp06tXQ5TcoYw4EDBygsLKRr167ExsZaF6ABKioqePzxx9m5cye/+c1v8Pl81pBVuLaGrepM4SJKSkqIj49n27ZtbNq0icWLF3PPPfdcM0cRa9euxRhD//79W7qUZnHixAn+9Kc/MXny5JYupdm899579O7dm/T09JYupVns27ePzZs3M3r0aKubsKqq6pxVGc90LZ05KBQuoqCggLS0tJYuQ0SaWUFBgRUEOlMQi8/no7Cw0HpT1E3AJSJXr0v5HF9LQXAmhYKIiFja9rg7ERFpFIWCiIhYFAoiImJRKIiINOD48eOMHz+e8PBwIiMjmTx5MidPnrykxxpjGDlyJDabjT//+c9NW+gVpFAQEWnA+PHj2blzJ3/729/4y1/+wurVq5kyZcolPXbevHlX5eglhYKIyHns3r2bFStWsHDhQnJycujRowepqam8/fbbREREXPCsYevWrTz//PMkJSUBMHbsWNLS0nj00UcpLy9vzmY0mkJBROQ81q1bR2RkJDfffDPgP2s4fvw4drudJ554osGzhro5lWbNmkVZWRngP2t48803WbFiRau/W16hICJyHsXFxcTHxwP/Pmt4/fXXiYmJISoqivnz57N06VIKCwvrPe7xxx+nX79+PProo3zwwQcAJCUlMXToUJ599lk+/PBDay611kihICLXlFmzZmGz2S74b8+ePfUe8+yzz2Kz2RgwYAAnTpxg//79DBs2DLvdXm/53eXLl7Ny5UoGDx5cb/XFTZs2Af+eQ6k1r1rYeisTEWkCM2fO5MEHH7zgPh07diQxMZGjR4/yzjvvsHTpUuLj4/n000/JzMxkwYIFzJw5k+joaIqLi63HrVy5kry8PCZOnGgFDMAvf/lLPvzwQ06cOHHJF6pbiqa5EJFr1qxZs3juuecuuE/nzp2JiYnhxIkTzJ8/n+HDhxMWFobD4aCsrIz09HTeeecdsrOzKS4u5sEHH6S6upoFCxYAkJGRgcvlwu1243A4GDRoELNnzyY7O7s5mthoCgURuWaVlJRQWlra4PcnT57M2rVrGTNmDCtWrCApKYm4uDjWr19PRkYGubm5BAUF4XA4yMvLIz4+nrS0NGbMmMFjjz0GgM1mIzQ0FJ/Px7p165g3bx7Lli1j586dpKSkNFNLL51CQUSkATt37qRnz54EBgZy+vRp7rzzToqKivB6vVRVVfH1119jjCE2NpaZM2cya9YsXC4XixYtYty4cVRUVBAREUFSUhIej4ejR4/i9XqJiori5ZdfZuLEiS3dxHPoQrOISAOioqIAWLVqFSNGjODgwYNs2bKFdu3asX//fu677z5efvllqqur+dnPfkZwcDA+nw/wr+b2ne98h4yMDKZOnYoxhuLiYvLz83G73ezYsQObzcbdd9/dgi08ly40i4g0IDY2FofDwZEjR1i8eDHf//732bZtG2vXriU5OZnhw4czZcoUhg4dSn5+Pnv37sVms5GXl8fmzZutkUm5ubkA1s1sycnJLF68uFUu+6ozBRGRBrhcLrKysvjss8+Ijo7mlVdeAfxnENOmTeOVV17h4YcfJiMjg4iICLxeL0FBQSxZsoQhQ4ZgjMEYQ9++fZk6dSqzZ88mMjKS+Ph4nnnmGTp27NjCLTyXQuECrsXJsBrb5uPHj/OjH/2Ibt26ERwcfFXcyr9gwQLS09MJCgoiJyeHf/zjHxfc/7333rPGnGdkZPDRRx81U6VXTmPa/NprrzFw4ECioqKIiopi2LBhF/0dtUaNfZ3rLF26tF63zowZM3jttddYtGgRJSUl2Gw2qqqqGD9+PJs2bWLHjh18/PHHJCYmYrfbGTx4MHv37uXXv/41e/bs4emnn2bjxo20a9eOOXPmMGbMGNLT01vvnc1GGjRixAjTq1cvs379evPFF1+Yzp07m3Hjxl3SY1944QUzcuRIA5hly5Y1baFXUGPbnJuba773ve+Z5cuXm7y8PPPZZ5+ZLl26mNGjRzdj1Zdu6dKlxuVymTfeeMPs3LnTPPzwwyYyMtIcOXLkvPuvWbPGOBwO86tf/crs2rXLPPnkkyYgIMDk5uY2c+WXr7Ftvv/++82CBQvMli1bzO7du82DDz5oIiIizKFDh5q58svX2DbXyc/PNykpKWbgwIFm1KhR1vb58+ebtLQ043K5TGhoqBkzZow5fPiwAUxmZqYJCQkxs2fPNsYY89Of/tR07tzZdO3a1bhcLnPDDTeYhx56yISHh5vf/e53JiUlxZSUlBhjjJk0aVK9n9MaKBQasGvXLgOYr776ytr28ccfG5vNZg4fPnzBx27ZssWkpKSYoqKiqyoUvk2bz/Tuu+8al8tl3G53U5T5rWRnZ5tHHnnE+trr9Zrk5GTrA322e++919x+++31tuXk5JipU6c2aZ1XUmPbfDaPx2PCwsLMokWLmqrEK+5y2uzxeEy/fv3MwoULL/jHeunSpSYwMNC8+OKLBjCjRo0ykZGRpri42BhjTI8ePUxSUpK1/5w5c4zL5TJvvfWWad++vfnjH/9oioqKTGVlZasMBXUfNeDsybCA897Wfra6ybAWLFhAYmJic5R6xVxum8/WWm/lr62tZdOmTQwbNszaZrfbGTZsGOvWrTvvY9atW1dvf4Dhw4c3uH9rczltPltVVRVut5vo6OimKvOKutw2P/PMM8THx1+0W2fs2LHMnTuXF154AYBdu3axYsUKEhISACgtLa333v/tb39LbW0tEyZMoKCggAceeICkpCTCw8P5wx/+wPLly3E6nezbt+/bNPuKaV2f2lbkzMmw6jidznNuaz9b3WRYo0aNauoSr7jLbfOZjh07xi9+8YtWeSv/sWPH8Hq91oe3TkJCwjlz3dQpLi4+7/6X+vtoaZfT5rM98cQTJCcnnxOOrdXltPnLL7/k9ddfZ+vWrZf0M6ZPn8706dPJyckhOzubnJwcAHw+H06nk2nTpln77t+/H4Camhry8vLqPc+TTz5JZWUlL730Eu3bt7/EFjatay4ULuW29t27d1/Wc9dNhrVly5bLenxTaco2n6miooLbb7+dHj168PTTT3/r55OWN2fOHJYuXcrnn39uTe7W1lRWVjJhwgRee+01YmNjG/XYGTNmMGnSJG6++Ways7OZN28ep06d4qGHHgJg4sSJpKSkMHv2bIKCgujZs2e9x0dGRgKcs70lXXOh0NjJsM7k8Xg4fvx4g91CK1euZN++fdYLXWf06NEMHDiQzz///FtUfvmass11KisrGTFiBGFhYSxbtoyAgIBvW/YVd+aY8zMdOXKkwfYlJiY2av/W5nLaXGfu3LnMmTOHv//979x4441NWeYV1dg279u3j/3793PnnXda2+puQHM6nezdu5dOnTqd92eNHTuWkpISfv7zn1NcXExmZma9rqSDBw9it19lvfQtfVGjtaq76Lpx40Zr2yeffHLBi65FRUUmNze33j/AvPTSS+Zf//pXc5V+2S6nzcYYU15ebvr06WMGDx5sTp061RylXrbs7Gwzffp062uv12tSUlIueKH5jjvuqLetb9++V92F5sa02RhjnnvuORMeHm7WrVvXHCVecY1pc3V19Tmf21GjRpmhQ4ea3Nxcc/r06eYsvcUpFC5gxIgR5qabbjIbNmwwX375penSpUu94ZmHDh0y3bp1Mxs2bGjwObiKRh8Z0/g2l5eXm5ycHJORkWHy8vJMUVGR9c/j8bRUMxpUN3LkzTffNLt27TJTpkypN3JkwoQJZtasWdb+a9asMU6n08ydO9fs3r3bPPXUU1flkNTGtLlutMz7779f7/WsrKxsqSY0WmPbfLbWOCqouSgULqC0tNSMGzfOtGvXzoSHh5uHHnqo3gcjPz/fAGbVqlUNPsfVFgqNbfOqVasMcN5/+fn5LdOIizhzzHl2drZZv3699b3BgwebSZMm1dv/3XffrTfm/K9//WszV/ztNabNHTp0OO/r+dRTTzV/4d9CY1/nM13LoaBZUkVExHKVXQEREZGmpFAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCwKBRERsSgURETEolAQERGLQkFERCz/H0II0w8BAE6uAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"voxel_path = f\\\"{paths['render_output']}/clip_features_pc.ply\\\"\\n\",\n    \"pc = trimesh.load(voxel_path)\\n\",\n    \"viz(pc.vertices, pc.colors)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"aa66708e\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'segmentation': {'material_dict': {'pot': {'density': [1500, 2000],\\n\",\n       \"    'E': [200000.0, 500000.0],\\n\",\n       \"    'nu': [0.2, 0.3],\\n\",\n       \"    'material_id': 6},\\n\",\n       \"   'trunk': {'density': [400, 700],\\n\",\n       \"    'E': [100000.0, 300000.0],\\n\",\n       \"    'nu': [0.3, 0.4],\\n\",\n       \"    'material_id': 0},\\n\",\n       \"   'leaves': {'density': [200, 400],\\n\",\n       \"    'E': [20000.0, 50000.0],\\n\",\n       \"    'nu': [0.3, 0.4],\\n\",\n       \"    'material_id': 0}},\\n\",\n       \"  'reasoning': 'The pot is made of a dense, stiff material and is stationary. The trunk and leaves are made of a less dense, more flexible material, allowing them to sway. The leaves are less dense and flexible than the trunk.',\\n\",\n       \"  'constraints': 'assert material_dict[\\\"leaves\\\"][\\\"density\\\"] < material_dict[\\\"trunk\\\"][\\\"density\\\"] < material_dict[\\\"pot\\\"][\\\"density\\\"], \\\"The density of the leaves should be less than the trunk and the pot\\\"\\\\nassert material_dict[\\\"leaves\\\"][\\\"E\\\"] < material_dict[\\\"trunk\\\"][\\\"E\\\"] < material_dict[\\\"pot\\\"][\\\"E\\\"], \\\"The stiffness of the leaves should be less than the trunk and the pot\\\"',\\n\",\n       \"  'all_queries': [['pot', 'trunk', 'leaves'],\\n\",\n       \"   ['bonsai pot', 'bonsai trunk', 'bonsai leaves'],\\n\",\n       \"   ['brown pot', 'brown trunk', 'green leaves'],\\n\",\n       \"   ['ceramic pot', 'tree trunk', 'foliage'],\\n\",\n       \"   ['base', 'branch', 'leaf']]},\\n\",\n       \" 'seg_critic': None,\\n\",\n       \" 'phys_sampler': None,\\n\",\n       \" 'parse_seg_critic': None,\\n\",\n       \" 'chosen_results': {'material_dict': {'brown pot': {'density': 1774.4067519636624,\\n\",\n       \"    'E': 414556.8099117258,\\n\",\n       \"    'nu': 0.2602763376071644,\\n\",\n       \"    'material_id': 6},\\n\",\n       \"   'brown trunk': {'density': 563.4649548990691,\\n\",\n       \"    'E': 184730.95986778094,\\n\",\n       \"    'nu': 0.3645894113066656,\\n\",\n       \"    'material_id': 0},\\n\",\n       \"   'green leaves': {'density': 287.5174422525385,\\n\",\n       \"    'E': 46753.19002346239,\\n\",\n       \"    'nu': 0.39636627605010294,\\n\",\n       \"    'material_id': 0}},\\n\",\n       \"  'sampling_attempts': 1,\\n\",\n       \"  'all_queries': [['brown pot', 'brown trunk', 'green leaves']]}}\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"get_vlm_results(cfg)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"4948e513\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<video controls  >\\n\",\n       \" <source src=\\\"data:video/mp4;base64,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AgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAIAAAAAAIAAAIAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAB9AAAAAQAAAghzdHN6AAAAAAAAAAAAAAB9AABDqgAAEZcAABJVAAAQqAAAENMAABF7AAARrAAAEY8AABC9AAARowAAEVwAABEwAAAWUgAAA4gAABCjAAAbfQAABXAAAAN9AAAdzAAABqMAAAMAAAACtgAAGQAAAASQAAACTgAAAfYAABOlAAADeAAAAc4AAAHiAAAY6gAABEAAAAHrAAACXwAAGMAAAAR8AAAB7gAAAcsAABWnAAADVwAAAaQAAAG/AAAS7AAAAucAAAGhAAABhQAAEp0AAAKhAAABggAAAYYAABLuAAACswAAAU4AAAFmAAATSAAAAqMAAAFOAAABcQAAFDMAAAKgAAABiwAAAXMAABQnAAACiAAAAYUAAAFhAAATfwAAAqAAAAFhAAABYgAAEyUAAALXAAABcgAAAX8AABOeAAAC4AAAAYcAAAGQAAATUgAAAmsAAAFbAAABegAAE3EAAAISAAABWQAAAVQAABPgAAAB7gAAAUMAAAEoAAAS9gAAAisAAAEgAAABRQAAEk0AAAIoAAABHwAAAOAAABEIAAACGAAAAPIAAADpAAAPfQAAAdgAAAD4AAAAvgAADfMAAAHCAAAA1wAAALcAAAxEAAABmQAAALcAAACyAAAI7wAAAaoAAACGAAAAkgAABaEAAAGIAAAAZgAAAHcAAAGMAAAAygAAAHMAAAAUc3RjbwAAAAAAAAABAAAAMAAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNjEuMS4xMDA=\\\" type=\\\"video/mp4\\\">\\n\",\n       \" Your browser does not support the video tag.\\n\",\n       \" </video>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Video object>\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Video(f\\\"{paths['physgaussian_output']}/sample_{cfg.physics.sample_id}/frames/output.mp4\\\",\\n\",\n    \"embed=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"e30734f6\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'part_label': memmap([2, 2, 2, ..., 2, 2, 2], dtype=int32),\\n\",\n       \" 'E': array([10.752638, 10.752638, 10.752638, ..., 10.752638, 10.752638,\\n\",\n       \"        10.752638], dtype=float32),\\n\",\n       \" 'density': array([5.6612835, 5.6612835, 5.6612835, ..., 5.6612835, 5.6612835,\\n\",\n       \"        5.6612835], dtype=float32),\\n\",\n       \" 'nu': memmap([0.39636627, 0.39636627, 0.39636627, ..., 0.39636627, 0.39636627,\\n\",\n       \"         0.39636627], dtype=float32),\\n\",\n       \" 'material_id': memmap([0, 0, 0, ..., 0, 0, 0], dtype=int32)}\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"pred_path = get_material_segmentation_path(cfg, paths['render_output'], paths)\\n\",\n    \"pred_pc, pred_feats = load_semantic_ply(pred_path)\\n\",\n    \"pred_feats\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"e7a51082\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Axes3D: >\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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59Xu27ePffv2+a39unDy5EkOHDjQ2N2owC+//OLX9keMGMGCBQuYMmWKJwzYHW7Zmm+W60pjabi8g0dRFL/Pz28quYDKc/b0mabArl272LVrl9/aLy0t5ejRoxw9etRzIXr06FHCwsKkfquhR48ejBs3jsmTJ7NgwQLsdjvTpk3jhhtu8FR1ysjIYNSoUXzwwQcMHDiQAwcOsGjRIi699FLatGnDtm3b+Nvf/saIESP8kutDIgFA+HCB7UP1tpaE1K+k2eCLft12teDTTz9l+vTpLFiwgLS0NObPn8/YsWPZu3dvpQ/WIiMj+fvf/0737t0xGo3897//ZdKkScTExDB27FgAnnvuOV5++WXef/99kpKSmDFjBmPHjmXXrl31Xj1XaljSbPDDGPy3v/2NIUOG8Mwzz3Ddddexfv16rwI3AI8++igZGRl88MEHgGuK4sSJE3nppZdIS0vz5K4LCAjwJOJ/4IEHuPzyy0lMTOT48ePMnDkTnU7HjTfe6HPf/BZTevPNN7Nz506WLVvGf//7X3755Rev+cdVMXnyZDIzMz3Lc8895/Mx3VFMOp0OVVVZv369rPjXiggICOCtt97yWte+fXvCwsIoKiqqYi9JVTS0hsvnflJVlY0bN0r9tiICAgJYtGgRb775pmddhw4dpH594OOPP6Z79+6MGjWKSy+9lGHDhnldYNjtdvbu3esp0mI0Gvnpp58YM2YM3bt35/777+fqq6/mm2++aayPIGkNaApoag1L63NmS/1KmgU+6bf2Gn7xxReZPHkykyZNomfPnixYsIDAwEDeeeedSu1HjhzJVVddRY8ePejcuTP33nsvffv29SROF0Iwf/58Hn/8ca688kr69u3LBx98wPHjx/nqq6/O9VuoFKlhSbPAD2Pw+eefz5dffsknn3xC7969mT17NvPnz+fmm2/22GRmZnL06FHP+4ULF+JwOLj77rtp27atZ7n33ns9Nunp6dx4440kJydz3XXX0aZNG3777TefoivdKMIPd5G7d++mZ8+ebNiwwVNSdenSpVx66aWkp6d7PNtnM3LkSFJTU5k/f77Px3I6nRw7doykpCT++OMPdu7cydChQ9HpdH65QT58+DAnT54kNTUVg6Hq6oONxbZt24iNjSU2Nraxu1KB3Nxc9uzZQ0pKit9KtAshKCoqwm63M3v2bE9Y86233oqq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\",\n      \"text/plain\": [\n       \"<Figure size 1500x400 with 8 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 5,\\n\",\n    \"    subplot_kw={'projection': '3d'},\\n\",\n    \"     figsize=(15, 4)\\n\",\n    \")\\n\",\n    \"viz(pred_pc, pred_feats['part_label'], discrete=True, ax=ax[0])\\n\",\n    \"viz(pred_pc, pred_feats['material_id'], discrete=True, ax=ax[1])\\n\",\n    \"viz(pred_pc, pred_feats['E'], ax=ax[2])\\n\",\n    \"viz(pred_pc, pred_feats['nu'], ax=ax[3])\\n\",\n    \"viz(pred_pc, pred_feats['density'], ax=ax[4])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"4b8b54c7\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.jupyter.widget-view+json\": {\n       \"model_id\": \"b4ac4020f672497ea88d58ca825b261b\",\n       \"version_major\": 2,\n       \"version_minor\": 0\n      },\n      \"text/plain\": [\n       \"GridspecLayout(children=(Output(layout=Layout(grid_area='widget001')), Output(layout=Layout(grid_area='widget0…\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"blender_output_dir = paths['blender_output']\\n\",\n    \"filepaths = [\\n\",\n    \"os.path.join(blender_output_dir, feature, f\\\"{feature}.mp4\\\")\\n\",\n    \"for feature in ['part_label', 'material_id', 'E', 'density', 'nu']\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"grid = GridspecLayout(1, len(filepaths))\\n\",\n    \"\\n\",\n    \"for i, filepath in enumerate(filepaths):\\n\",\n    \"    out = Output()\\n\",\n    \"    with out:\\n\",\n    \"        display.display(display.Video(filepath, embed=True,))\\n\",\n    \"    grid[0, i] = out\\n\",\n    \"grid\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"b55cc138\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<video controls  >\\n\",\n       \" <source src=\\\"data:video/mp4;base64,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\\\" type=\\\"video/mp4\\\">\\n\",\n       \" Your browser does not support the video tag.\\n\",\n       \" </video>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Video object>\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"Video(f\\\"{blender_output_dir}/gs_renders/output.mp4\\\", embed=True)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"pixie_release\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.18\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "nbs/real_scene.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"e8182c7d\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"3a406cbd\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pathlib import Path\\n\",\n    \"import os\\n\",\n    \"\\n\",\n    \"cwd = Path.cwd()                   \\n\",\n    \"if cwd.name == \\\"nbs\\\":              \\n\",\n    \"    ROOT = cwd.parent.resolve()    \\n\",\n    \"else:\\n\",\n    \"    ROOT = cwd                     \\n\",\n    \"os.chdir(ROOT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"d37ca9ff\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pixie.viz_utils import *\\n\",\n    \"import trimesh\\n\",\n    \"from pixie.utils import *\\n\",\n    \"from IPython.display import Image, Video\\n\",\n    \"from ipywidgets import Output, GridspecLayout\\n\",\n    \"from IPython import display\\n\",\n    \"from pixie.utils import _find_latest_inference_dir\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"8249824d\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"WARNING:root:Real data must use `disable_scene_contraction=True` and `USE_COLMAP_DATAPARSER`. Setting this automatically.\\n\",\n      \"WARNING:root:Real data must use `disable_scene_contraction=True` and `USE_COLMAP_DATAPARSER`. Setting this automatically.\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'data_dir': 'real_scene_data/bonsai',\\n\",\n       \" 'nerf_output': '/home/vlongle/code/pixie-dev/models/bonsai/f3rm',\\n\",\n       \" 'gs_output': '/home/vlongle/code/pixie-dev/models/bonsai/gs',\\n\",\n       \" 'render_output': 'real_scene_render_outputs/bonsai',\\n\",\n       \" 'neural_base_dir': '/home/vlongle/code/pixie-dev/inference_combined_mse_clip_results/20250826_121144/bonsai',\\n\",\n       \" 'physgaussian_output': '/home/vlongle/code/pixie-dev/mpm_sim_outputs/neural/bonsai',\\n\",\n       \" 'blender_output': '/home/vlongle/code/pixie-dev/blender_outputs/bonsai',\\n\",\n       \" 'blend_file_path': 'pixie/blender/empty_scene.blend',\\n\",\n       \" 'blender_gs_addon_path': '/home/vlongle/code/pixie/blender-addon.zip'}\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"\\n\",\n    \"\\n\",\n    \"cfg = load_config()\\n\",\n    \"\\n\",\n    \"obj_id = \\\"bonsai\\\" ## [bonsai, bouquet, vasedeck]\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"cfg.obj_id = obj_id\\n\",\n    \"cfg.material_mode = \\\"neural\\\" #[vlm, neural]\\n\",\n    \"cfg.paths.data_dir = \\\"real_scene_data\\\"\\n\",\n    \"cfg.paths.render_outputs_dir = \\\"real_scene_render_outputs\\\"\\n\",\n    \"cfg.is_objaverse_object = False\\n\",\n    \"cfg = resolve_paths(cfg)\\n\",\n    \"paths = get_output_paths(cfg, cfg.obj_id)\\n\",\n    \"cfg.segmentation.neural.result_id = _find_latest_inference_dir(cfg)\\n\",\n    \"\\n\",\n    \"## resolve paths again\\n\",\n    \"cfg = resolve_paths(cfg)\\n\",\n    \"paths = get_output_paths(cfg, cfg.obj_id)\\n\",\n    \"paths\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"ace82902\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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ceNGTj31VJ544ontVrmuWrWKPn368PLLLzNu3Ljdvkb7lNQ1a9aQmZnJ+++/L1NNhfh/ZHdTV7+KXUkdM/3vpenTp3PllVdy6qmnBovX7rvvvuB+27ZZuXIl8fj2OzRNmzaNsrIyxo4du8fXaE8Azc3N6LrOoEGD9mmLv6amJm688UbGjx/P8OHDd7unbEeglGLChAmce+65wXqMju7mm2/mtNNOY/To0Yc7lL1y2223ccIJJ3Daaacd7lD2KJlMcs8993DMMcdw9tkHphzJwbRp0yamT59OdnY23//+9/fqMUopFi9eDPjnlKlTp3L11Vdz4403fiW7kr7ULYVDYf369XTr1u1whyGEOMS+iq0EkKSwR57nUVlZ+YX6FpVSX6p+yS9bvOLg+7J9Jg5EvF/F8QSQpCCEEGIbHXNlihBCiMNCkoIQQoiAJAUhhBABSQpCCCECkhSEEGI36uvrueiii8jOziY3N5crrriClpaW3T7m4Ycf5uSTTyY7OxtN02hoaDg0wR4AkhSEEGI3LrroIpYuXcobb7zBiy++yOzZs/nRj36028fE43HGjRvHL3/5y0MU5YEjSUEIIXbhV7/6Fa+++irLly/n6quvxrIs7r//fmbMmEFlZeUOx//jH/+gb9++TJw4kenTpx+GiL84SQpCCLETf//737nrrruIRqNUVFQwaNAgTj/9dAYOHBhs5rWtuXPnMn78eK644goqKio455xz9qs0/+Emi9eEEGInRowYgaZpbNmyhZUrV+J5Hl27duWqq67id7/7Hbfffjs/+clPguMvvPBCWltbefHFF4Pb+vXrx/Lly9myZQu5ubmH4V3sO2kpCCG+ciZOnIimabv9KS8v324nP13XKSsr44477mDTpk3cfffdfPDBB8H98+bNY8yYMcG/ly5dSmtrKwB5eXlMnTr1kL2/L+JLXSVVCCH2x54286qtrWX06NF069aNl156CfC7k8rLy+natSvr1q2jd+/enH766axcuZLi4mKqq6spKSkJniMej1NYWMi6deu2u72jk6QghPjK2dNmXu3VUQcMGBBs5vW73/2OgQMHEo/HUUoxbdo0RowYwbRp05g4ceIOzzFs2DBOOukkFi5c2OFL5m9Luo+EEOJzCgsLMQyDaDTKuHHjuOKKKygvLwdgw4YNfOc736GsrIyysjJuv/12dF1HKRV0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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"pc = trimesh.load(f\\\"{paths['render_output']}/clip_features_pc.ply\\\")\\n\",\n    \"viz(pc.vertices, pc.colors);\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"0c5cdeef\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'part_label': memmap([6, 6, 6, ..., 6, 6, 6], dtype=int32),\\n\",\n       \" 'E': array([15.351016 , 15.304461 , 14.87731  , ..., 15.8357725, 15.787883 ,\\n\",\n       \"        14.490429 ], dtype=float32),\\n\",\n       \" 'density': array([6.4753   , 6.3867593, 6.258811 , ..., 6.5176353, 6.552531 ,\\n\",\n       \"        6.4386277], dtype=float32),\\n\",\n       \" 'nu': memmap([0.32326677, 0.3304015 , 0.33524716, ..., 0.31787965, 0.31019688,\\n\",\n       \"         0.32906172], dtype=float32),\\n\",\n       \" 'material_id': memmap([6, 6, 6, ..., 6, 6, 6], dtype=int32)}\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"pred_path = get_material_segmentation_path(cfg, paths['render_output'], paths)\\n\",\n    \"pred_pc, pred_feats = load_semantic_ply(pred_path)\\n\",\n    \"pred_feats\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"6ba1434a\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"config = load_json(join_path(\\n\",\n    \"    \\\"third_party/PhysGaussian\\\",\\n\",\n    \"    get_physics_config_path(cfg, cfg.obj_id, cfg.material_mode, cfg.obj_class)))\\n\",\n    \"rotation_axis = config.get(\\\"rotation_axis\\\", [0])\\n\",\n    \"rotation_degree = config.get(\\\"rotation_degree\\\", [0])\\n\",\n    \"\\n\",\n    \"rotations = [0, 0, 0]\\n\",\n    \"for deg, axis in zip(rotation_degree, rotation_axis):\\n\",\n    \"    rotations[axis] = deg\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"9d2e2d7f\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Axes3D: >\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAABKMAAAEQCAYAAABsnLdtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYXVW5+PHv2u3U6TWTXiCFEpDQUYpoQFFRf1guKogXy5WLgFcU9AKigqgg4lUiigG9ei0XQQSFi2DQ0AkESEgvTDJJprdTd1u/P85kIIbAmSRTzuT9PM9+ktlnl3X2zLyzz7vftZbSWmuEEEIIIYQQQgghhBgBxmg3QAghhBBCCCGEEEIcOCQZJYQQQgghhBBCCCFGjCSjhBBCCCGEEEIIIcSIkWSUEEIIIYQQQgghhBgxkowSQgghhBBCCCGEECNGklFCCCGEEEIIIYQQYsRIMkoIIYQQQgghhBBCjBhJRgkhhBBCCCGEEEKIESPJKCGEEEIIIYQQQggxYiQZJYQQQgghhBBCCCFGjCSjhBBCCCGEEEIIIcSIkWSUEEIIIYQQQgghhBgxkowSQgghhBBCCCGEECNGklFCCCGEEEIIIYQQYsRIMkoIIYQQQgghhBBCjBhJRgkhhBBCCCGEEEKIESPJKCGEEEIIIYQQQggxYiQZJd7QKaecwiWXXFL09kuWLEEpRU9Pzz6dd9q0adx88837dAwhhBBCCCGEEEKMPdZoN0C8sfPPP58777wTANu2mTJlCp/4xCe48sorsay9//adf/759PT0cM899+ynlgohhDiQ5HI5XNctenvHcYhGo8PYIiGEeHMSu4QQpWoo8asUYpcko0rAGWecweLFi8nn8/z5z3/m85//PLZtc8UVVwz5WEEQoJQahlYKIYQ4UORyOWpjMdJD2KexsZFNmzaN+RsjIcT4JbFLCFGqhhq/SiF2STKqBEQiERobGwH43Oc+x9133829997LFVdcwU033cTixYvZuHEj1dXVvOc97+E73/kOyWQSgDvuuINLLrmEX/ziF3zlK19h7dq1fOxjHxusttqZmPrb3/7GKaec8qZt+eUvf8kPfvAD1qxZQyKR4LTTTuPmm2+mvr5+l+0ee+wxrrjiCtauXcsRRxzBz372Mw499NDB15cuXcoVV1zBs88+S21tLe9///u5/vrrSSQS++OSCSGEGEau65IGLrEUkSK2zwM379iB67pj+qZICDG+SewSQpSqocSvUoldMmZUCYrFYoPleYZhcMstt7By5UruvPNOHnnkES6//PJdts9kMtxwww387Gc/Y+XKldxyyy186EMf4owzzmD79u1s376dE044oahze57HN77xDV544QXuueceNm/ezPnnn7/bdl/60pe48cYbeeaZZ6irq+M973kPnucBsGHDBs444ww++MEP8uKLL/Lb3/6WpUuXctFFF+3bhRFCCDGiYgrihnrTJSYFuUKIMURilxCiVBUTv0oldkllVAnRWvPwww/z4IMP8u///u8AuwwuPm3aNL75zW/y2c9+lh//+MeD6z3P48c//jHz588fXBeLxcjn84MVV8W64IILBv8/Y8YMbrnlFo4++mhSqdRgNRbA1VdfzTve8Q4A7rzzTiZNmsTdd9/Nhz70Ia6//nrOPffcwbYfdNBB3HLLLZx88snceuutYzp7K4QQ4lWWKixvut3wN0UIIYomsUsIUaqKiV+lErtKpZ0HtPvuu49kMonneYRhyL/8y79wzTXXAPDXv/6V66+/ntWrV9PX14fv++RyOTKZDPF4HCgMXnb44Yfvl7YsW7aMa665hhdeeIHu7m7CMASgubmZefPmDW53/PHHD/6/urqa2bNns2rVKgBeeOEFXnzxRX71q18NbqO1JgxDNm3axNy5c/dLW4UQQgwvUxWWN91u+JsihBBFk9glhChVxcSvUoldkowqAaeeeiq33norjuPQ1NQ0OIve5s2bOeuss/jc5z7Ht771Laqrq1m6dCmf+tSncF13MBkVi8X2y6Dl6XSahQsXsnDhQn71q19RV1dHc3MzCxcuHNKsJKlUis985jNcfPHFu702ZcqUfW6nEEKIkSEf6IQQpUhilxCiVEkySoyoRCLBrFmzdlu/bNkywjDkxhtvxDAKw3/97ne/K+qYjuMQBMGQ2rF69Wo6Ozv59re/zeTJkwF49tlnX3fbJ598cjCx1N3dzdq1awcrnt7ylrfw8ssvv+57EkIIUTocQxMp4gNdqPXwN0YIIYoksUsIUaqKiV+lErtkAPMSNmvWLDzP44c//CEbN27kl7/8JYsWLSpq32nTpvHiiy+yZs0aOjo6BgcXfyNTpkzBcZzB891777184xvfeN1tr732Wh5++GFWrFjB+eefT21tLWeffTYAX/7yl3n88ce56KKLWL58OevWreOPf/yjDGAuhBAlxjSKX4QQYqyQ2CWEKFXDEbumTZuGUmq35fOf//we9/n973/PnDlziEajHHbYYfz5z38e8nuREFvC5s+fz0033cQNN9zAoYceyq9+9Suuv/76ova98MILmT17NgsWLKCuro7HHnvsTfepq6vjjjvu4Pe//z3z5s3j29/+Nt/73vded9tvf/vbfOELX+Coo45ix44d/OlPf8JxHAAOP/xwHn30UdauXctb3/pWjjzySK666iqampqKf/NCCCFG3c5S8WIWIYQYKyR2CSFK1XDErmeeeYbt27cPLg899BAA55xzzutu//jjj/PRj36UT33qUzz//POcffbZnH322axYsWJI51Val0gNlxBCCCHGhL6+PioqKrilHGJFjEmY1ZqL+6C3t5fy8vIRaKEQQuxOYpcQolQNJX7ta+y65JJLuO+++1i3bt3rjj394Q9/mHQ6zX333Te47rjjjuOII44ouqcWSGWUEEIIIfaSVBcIIUqRxC4hRKkaSuzq6+vbZcnn8296fNd1+e///m8uuOCCPU6C9sQTT3D66afvsm7hwoU88cQTQ3ovkowSQgghxF6RcVeEEKVIYpcQolQNJXZNnjyZioqKwaWYIX3uueceenp6OP/88/e4zY4dO2hoaNhlXUNDAzt27BjSe5HZ9IQQQgixVwyKqxwwZEAAIcQYIrFLCFGqiolfO2PXli1bdummF4lE3vT4t99+O2eeeeaIjOcsySghhBBC7JViu7FIVxchxFgisUsIUaqKiV87Xy8vLx/SmFGvvPIKf/3rX/nDH/7whts1NjbS2tq6y7rW1lYaGxuLPhdINz0hhBBC7CXDKH4RQoixQmKXEKJUDWfsWrx4MfX19bz73e9+w+2OP/54Hn744V3WPfTQQxx//PFDOp9URgkhhBBirzhGYXkz/vA3RQghiiaxSwhRqoqJX3sTu8IwZPHixZx33nlY1q5pok984hNMnDhxcMypL3zhC5x88snceOONvPvd7+Y3v/kNzz77LLfddtuQzinJKCGEEELslWIH+DWHvylCCFE0iV1CiFJVTPzam9j117/+lebmZi644ILdXmtubsZ4TbnVCSecwK9//Wu+9rWvceWVV3LQQQdxzz33cOihhw7pnJKMEkIIIcReMVRhKWY7IYQYKyR2CSFKVTHxa29i1zvf+U60fv1ZG5YsWbLbunPOOYdzzjln6Cd6DUlGCSGEEGKvGIbCLOKOp/AsTaalEkKMDRK7hBClqpj4VSqxa0wmo5qbm+no6Bix89XW1jJlypQRO9/+JNdqaOR6CSHE/iPVBUKIUiSxSwhRqoarMmo0jLlkVHNzM7PnzCWXzYzYOaOxOGtWrxpy0uBHP/oR3/3ud9mxYwfz58/nhz/8Icccc8wwtXJ3zc3NzJ09m0wuN2LnjEejrFqzpuhrdf311/OHP/yB1atXE4vFOOGEE7jhhhuYPXv2MLd0d83NzcyZPZdsbuR+tmLROKvXDO1nq6WlhS9/+cv85S9/IZPJMGvWLBYvXsyCBQuGsaVCCDF0Mu6KEKIUSewSQpSq4RozajSMuWRUR0dHIRH12S/DxBGoKGlpJrfoBjo6OoaUMPjtb3/LZZddxqJFizj22GO5+eabWbhwIWvWrKG+vn4YG/yqjo4OMrkc35g7l+nx+LCfb1Mmw3+uWjWka/Xoo4/y+c9/nqOPPhrf97nyyit55zvfycsvv0wikRjmFu+qo6ODbC7DSRO/S0Vk5rCfrze/gaUtXxrS9eru7ubEE0/k1FNP5S9/+Qt1dXWsW7eOqqqqYW6tEEIMnVQXCCFKkcQuIUSpksqokTBxCkw7aLRbsUc33XQTF154IZ/85CcBWLRoEffffz8///nP+cpXvjKibZkejzOnrGxEz1msBx54YJev77jjDurr61m2bBlve9vbRqVNFZGZ1MQOGZVzv5kbbriByZMns3jx4sF106dPH8UWCSHEnkl1gRCiFEnsEkKUqvFUGVVEGBb/zHVdli1bxumnnz64zjAMTj/9dJ544olRbNnY19vbC0B1dfUot2Rsuvfee1mwYAHnnHMO9fX1HHnkkfz0pz8d7WYJIcTrMpTCMIpYVIk8ohNCHBAkdgkhSlVR8atEYpcko/ZCR0cHQRDQ0NCwy/qGhgZ27NgxSq0a+8Iw5JJLLuHEE0/k0EMPHe3mjEkbN27k1ltv5aCDDuLBBx/kc5/7HBdffDF33nnnaDdNCCF2s7NUvJhFCCHGColdQohSNZ5i19jtpifGnc9//vOsWLGCpUuXjnZTxqwwDFmwYAHXXXcdAEceeSQrVqxg0aJFnHfeeaPcOiGE2JVlKWzzze94rBK5KRJCHBgkdgkhSlUx8atUYpdURu2F2tpaTNOktbV1l/Wtra00NjaOUqvGtosuuoj77ruPv/3tb0yaNGm0mzNmTZgwgXnz5u2ybu7cuTQ3N49Si4QQYs+Gq7rg73//O+95z3toampCKcU999yzy+upVIqLLrqISZMmEYvFmDdvHosWLdp/b0wIMa5JZZQQolSNp9glyai94DgORx11FA8//PDgujAMefjhhzn++ONHsWVjj9aaiy66iLvvvptHHnlEBuN+EyeeeCJr1qzZZd3atWuZOnXqKLVICCH2zDCKX4YinU4zf/58fvSjH73u65dddhkPPPAA//3f/82qVau45JJLuOiii7j33nv3w7sSQox3wxW7hBBiuI2n2CXd9PbSZZddxnnnnceCBQs45phjuPnmm0mn04Oz64mCz3/+8/z617/mj3/8I2VlZYNjalVUVBCLxUa5dWPPpZdeygknnMB1113Hhz70IZ5++mluu+02brvtttFumhBC7GbnQJlvup0e2nHPPPNMzjzzzD2+/vjjj3PeeedxyimnAPDpT3+an/zkJzz99NO8973vHdrJhBAHnOGKXUIIMdyKiV+lErvGbjKqZYS6Je3leT784Q/T3t7OVVddxY4dOzjiiCN44IEHdhvUfCRsymTG7HluvfVWgMEPDDstXryY888/fz+0auh68xvG7HmOPvpo7r77bq644gquvfZapk+fzs0338y55547DC0UQoh9U+zTt503RX19fbusj0QiRCKRIZ/3hBNO4N577+WCCy6gqamJJUuWsHbtWr7//e8P+VhCiAPPUGOXEEKMFcXEr1KJXWMuGVVbW0s0Fie36IYRO2c0Fqe2tnbI+1100UVcdNFFw9Ci4tTW1hKPRvnPVatG7JzxaHRI10rrsfObUFtbSywaZ2nLl0bsnLHo0H+2zjrrLM4666xhapEQQuw/Q/1AN3ny5F3WX3311VxzzTVDPu8Pf/hDPv3pTzNp0iQsy8IwDH7605/ytre9bcjHEkIceCQZJYQoVZKMGkZTpkxhzepVdHR0jNg5a2trmTJlyoidb3+ZMmUKq9askWtVpClTprB6jfxsCSHE/jLUri5btmyhvLx8cP3eVEVBIRn15JNPcu+99zJ16lT+/ve/8/nPf56mpiZOP/30vTqmEOLAId30hBClSrrpDbMpU6bIB/giybUaGrleQgix/xiqyOqCsPBveXn5LsmovZHNZrnyyiu5++67efe73w3A4YcfzvLly/ne974nySghxJsaauwSQoixopj4VSqxa0wmo4QQQggx9hVdXbAfZ3XxPA/P8zD+6aCmaRKGJXL3JYQYVaMRu4QQYn8oqjKqRGKXJKOEEEIIsVcMS2FaRXygG+JxU6kU69evH/x606ZNLF++nOrqaqZMmcLJJ5/Ml770JWKxGFOnTuXRRx/lF7/4BTfddNMQzySEOBANV+wSQojhVkz8KpXYJckoIYQQQuyVogcBHuJd0bPPPsupp546+PVll10GwHnnnccdd9zBb37zG6644grOPfdcurq6mDp1Kt/61rf47Gc/O7QTCSEOSMMVu4QQYrgVNYB5icQuSUYJIYQQYq8MV1eXU0455Q1nY21sbGTx4sVDO6gQQgyQbnpCiFIl3fSEEEIIccBThkIV8YFOlchNkRDiwCCxSwhRqoqJX6USuyQZJYQQQoi9Il1dhBClSGKXEKJUSTc9IYQQQhzwpLpACFGKJHYJIUqVVEYJIYQQ4oBnqCLHXXnzTYQQYsRI7BJClKpi4lepxC5JRgkhhBBiryijuKdvpfKETghxYJDYJYQoVcXEr1KJXZKMEkIIIcReMUyFYRZRXRCOQGOEEKJIEruEEKWqmPhVKrFLklFCCCGE2CuGbWDYRXygQ49Aa4QQojgSu4QQpaqY+FUqsatECriEEEIIMeYMDKL5ZkvJDF4ghDgwDGPs+tGPfsS0adOIRqMce+yxPP3000Xt95vf/AalFGefffYu67XWXHXVVUyYMIFYLMbpp5/OunXrhtwuIcQ4MY7uuyQZJYQQQoi9srNUvJhFCCHGiuGKXb/97W+57LLLuPrqq3nuueeYP38+CxcupK2t7Q3327x5M//xH//BW9/61t1e+853vsMtt9zCokWLeOqpp0gkEixcuJBcLjektgkhxofxdN817pJRWmt6e3vRujRK04QQQohSpUxV9CKEEGPFcMWum266iQsvvJBPfvKTzJs3j0WLFhGPx/n5z3++x32CIODcc8/l61//OjNmzNjlNa01N998M1/72td43/vex+GHH84vfvELtm3bxj333LM3b10IUeKG676rpaWFj33sY9TU1BCLxTjssMN49tln97j9kiVLUErttuzYsaPoc467ZFR3dzeVlZW0tbVJQkoIIYQYRkpRVFcXJbkoIcQYMtTY1dfXt8uSz+d3O6bruixbtozTTz99cJ1hGJx++uk88cQTe2zLtddeS319PZ/61Kd2e23Tpk3s2LFjl2NWVFRw7LHHvuExhRDjV1Hxa4j3Xd3d3Zx44onYts1f/vIXXn75ZW688UaqqqredN81a9awffv2waW+vr7o8467Acx3JqDWrl1LLBYjmUxiGOMu5yaEEEKMumKfvklllBBiLBlq7Jo8efIu66+++mquueaaXdZ1dHQQBAENDQ27rG9oaGD16tWve/ylS5dy++23s3z58td9fWeFwesdcyjVB0KI8aOY+DXU+64bbriByZMns3jx4sF106dPL2rf+vp6Kisrh3S+ncZtlmbr1q3kcjn6+/vxPG+0myOEEEKMO9JNTwhRioYau7Zs2UJvb+/gcsUVV+xzG/r7+/n4xz/OT3/6U2pra/f5eEKIA8NQYlcxVZ0A9957LwsWLOCcc86hvr6eI488kp/+9KdFteeII45gwoQJvOMd7+Cxxx4b0nsZt8koAMuy8H2fFStWkE6npdueEEIIsR8p0yh6EUKIsWKosau8vHyXJRKJ7HbM2tpaTNOktbV1l/Wtra00Njbutv2GDRvYvHkz73nPe7AsC8uy+MUvfsG9996LZVls2LBhcL9ijymEGP+GErsmT55MRUXF4HL99de/7jE3btzIrbfeykEHHcSDDz7I5z73OS6++GLuvPPOPbZjwoQJLFq0iLvuuou77rqLyZMnc8opp/Dcc88V/V7GXTe911IDnSWbm5uZOHEiWmvi8bh02xNCCCH2A+mmJ4QoRcMRuxzH4aijjuLhhx/m7LPPBiAMQx5++GEuuuii3bafM2cOL7300i7rvva1r9Hf388PfvADJk+ejG3bNDY28vDDD3PEEUcAhUqHp556is997nNFt00IMX4MpZveli1bKC8vH1z/eol0KMSqBQsWcN111wFw5JFHsmLFChYtWsR55533uvvMnj2b2bNnD359wgknsGHDBr7//e/zy1/+sqj3Mq6TUfBqQkopxbp165g2bRrJZBLbtke5ZUIIIURpM2wDw3nzBzyGFCYLIcaQ4Ypdl112Geeddx4LFizgmGOO4eabbyadTvPJT34SgE984hNMnDiR66+/nmg0yqGHHrrL/jvHXXnt+ksuuYRvfvObHHTQQUyfPp3//M//pKmpaTDhJYQ4sBQTv3bGrp3V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\",\n      \"text/plain\": [\n       \"<Figure size 1500x400 with 7 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"fig, ax = plt.subplots(1, 4,\\n\",\n    \"    subplot_kw={'projection': '3d'},\\n\",\n    \"     figsize=(15, 4))\\n\",\n    \"viz(pred_pc, pred_feats['part_label'], discrete=True, rotation=rotations,\\n\",\n    \"ax=ax[0])\\n\",\n    \"viz(pred_pc, pred_feats['E'], rotation=rotations,\\n\",\n    \"ax=ax[1])\\n\",\n    \"viz(pred_pc, pred_feats['nu'], rotation=rotations,\\n\",\n    \"ax=ax[2])\\n\",\n    \"viz(pred_pc, pred_feats['density'], rotation=rotations,\\n\",\n    \"ax=ax[3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"bb142364\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<video controls  >\\n\",\n       \" <source src=\\\"data:video/mp4;base64,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\\\" type=\\\"video/mp4\\\">\\n\",\n       \" Your browser does not support the video tag.\\n\",\n       \" </video>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Video object>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gs_sim_out_path = f\\\"{paths['physgaussian_output']}/sample_{cfg.physics.sample_id}\\\"\\n\",\n    \"sim_out = Path(gs_sim_out_path) / \\\"frames\\\" / \\\"output.mp4\\\"\\n\",\n    \"Video(sim_out, embed=True)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"pixie_release\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.18\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "normalization_stats/material_statistics.json",
    "content": "{\"dataset_info\": {\"total_objects\": 1577, \"failed_objects\": 0, \"total_voxels\": 413401088}, \"material_distribution\": {\"-1\": {\"count\": 246700, \"percentage\": 0.05967570167594721}, \"0\": {\"count\": 23403291, \"percentage\": 5.661158540540658}, \"1\": {\"count\": 18155441, \"percentage\": 4.39172550024832}, \"2\": {\"count\": 4251952, \"percentage\": 1.0285294653119055}, \"3\": {\"count\": 494, \"percentage\": 0.00011949654085090362}, \"4\": {\"count\": 62776, \"percentage\": 0.015185252729668674}, \"5\": {\"count\": 4049178, \"percentage\": 0.9794792799384215}, \"6\": {\"count\": 2882975, \"percentage\": 0.6973796353433883}, \"7\": {\"count\": 360348281, \"percentage\": 87.16674712767085}}, \"raw_ranges\": {\"density\": {\"min\": 0.0, \"max\": 7919.525390625}, \"youngs_modulus\": {\"min\": 0.0, \"max\": 207151890432.0}, \"poisson_ratio\": {\"min\": 0.0, \"max\": 0.546366274356842}}, \"log_ranges\": {\"density\": {\"min\": -6.000000476837158, \"max\": 3.8986992835998535, \"p1\": 1.7031893730163574, \"p99\": 3.871432304382324}, \"youngs_modulus\": {\"min\": -6.000000476837158, \"max\": 11.316288948059082, \"p1\": 3.0183002948760986, \"p99\": 10.881680488586426}}, \"poisson_percentiles\": {\"p01\": 0.21027633547782898, \"p05\": 0.21027633547782898, \"p10\": 0.26458939909935, \"p25\": 0.3041105270385742, \"p50\": 0.3102763295173645, \"p75\": 0.39688411355018616, \"p90\": 0.43013817071914673, \"p95\": 0.4418972432613373, \"p99\": 0.4492689371109009}, \"normalization_ranges\": {\"density_p1\": 1.7031893730163574, \"density_p99\": 3.871432304382324, \"E_p1\": 3.0183002948760986, \"E_p99\": 10.881680488586426, \"nu_p1\": 0.21027633547782898, \"nu_p99\": 0.4492689371109009}}"
  },
  {
    "path": "normalization_stats/normalization_ranges.yaml",
    "content": "{\"density_min\": 1.7031893730163574, \"density_max\": 3.871432304382324, \"E_min\": 3.0183002948760986, \"E_max\": 10.881680488586426, \"nu_min\": 0.21027633547782898, \"nu_max\": 0.4492689371109009, \"density_p1\": 1.7031893730163574, \"density_p99\": 3.871432304382324, \"E_p1\": 3.0183002948760986, \"E_p99\": 10.881680488586426, \"nu_p1\": 0.21027633547782898, \"nu_p99\": 0.4492689371109009}"
  },
  {
    "path": "pipeline.py",
    "content": "import time\nimport os\nimport shutil\nimport logging\nfrom pathlib import Path\nfrom typing import Optional, Tuple\n\n\nimport hydra\nfrom omegaconf import DictConfig\n\nfrom pixie.utils import (run_cmd, get_obj_class_for_id, download_object,\n                         prepare_nerf_dataset_from_blender_output,\n                         resolve_paths, get_output_paths,\n                         get_physics_config_path, should_use_white_bg,\n                         create_directories, validate_config,\n                         get_latest_nerf_run, \n                         save_contextual_config,\n                         get_vlm_api_key, get_vlm_results,\n                         generate_material_segmentation,\n                         generate_neural_segmentation,\n                         set_logger,\n                         configure_real_scene_voxelization,\n                         format_real_scene_sample,\n                         get_material_segmentation_path,\n                         should_use_colmap)\n\n\ndef download_assets(cfg: DictConfig) -> None:\n    \"\"\"Download the specified 3D object from Objaverse if a local path isn't provided.\"\"\"\n    if cfg.obj_path is None:\n        download_object(cfg.obj_id)\n\n\ndef render_blender_images(cfg: DictConfig, paths: dict) -> str:\n    \"\"\"Render images using Blender.\"\"\"\n    if cfg.obj_path is not None:\n        obj_params = [\"--obj_path\", cfg.obj_path]\n    else:\n        obj_params = [\"--obj_id\", cfg.obj_id]\n\n    blender_render_cmd_list = [\n        \"blender\",\n        \"--background\",\n        \"--python\",\n        \"pixie/blender/generate_blendernerf_data.py\",\n        \"--\",\n        *obj_params,\n        \"--num_images\",\n        cfg.data_rendering.num_images,\n        \"--format\",\n        cfg.data_rendering.format,\n        \"--camera_dist_min\",\n        cfg.data_rendering.camera_dist_min,\n        \"--camera_dist_max\",\n        cfg.data_rendering.camera_dist_max,\n        \"--output_dir\",\n        paths['data_dir'],\n        \"--scene_scale\",\n        cfg.data_rendering.scene_scale,\n        \"--blender_nerf_addon_path\",\n        cfg.paths.blender_nerf_addon_path,\n    ]\n\n    if cfg.data_rendering.transparent_bg:\n        blender_render_cmd_list.append(\"--transparent_bg\")\n\n    blender_render_cmd = \" \".join(map(str, blender_render_cmd_list))\n\n    # Add Blender path if specified\n    if cfg.paths.blender_path:\n        blender_path = f'export PATH=\"{cfg.paths.blender_path}:$PATH\";'\n        blender_render_cmd = f\"{blender_path} {blender_render_cmd}\"\n\n    # Check if we need to run Blender\n    transforms_path = f\"{paths['data_dir']}/transforms_train.json\"\n    if cfg.overwrite or not os.path.exists(transforms_path):\n        run_cmd(blender_render_cmd, step_name=\"BLENDER_RENDER\")\n        save_contextual_config(cfg, paths['data_dir'], \"blender\")\n\n    return paths['data_dir']\n\n\ndef train_distilled_clip_nerf(cfg: DictConfig, blender_output_dir: str,\n                              paths: dict) -> Optional[str]:\n    \"\"\"Train the CLIP-distilled NeRF model (F3RM).\"\"\"\n    prepare_nerf_dataset_from_blender_output(blender_output_dir)\n\n    start = time.time()\n    train_cmd = [\n        \"ns-train\",\n        cfg.training_3d.nerf.method,\n        \"--data\",\n        blender_output_dir,  # blender_output_dir already contains the obj_id\n        \"--max-num-iterations\",\n        cfg.training_3d.nerf.max_iterations,\n        \"--viewer.quit-on-train-completion\",\n        str(cfg.training_3d.nerf.quit_on_completion),\n        \"--pipeline.model.disable-scene-contraction\",\n        str(cfg.training_3d.nerf.disable_scene_contraction),\n        \"--save_only_latest_checkpoint\",\n        str(cfg.training_3d.nerf.save_only_latest_checkpoint),\n        \"--output_dir\",\n        cfg.paths.outputs_dir,\n    ]\n\n    # Check if we need to train\n    output_dir = paths['nerf_output']\n    latest_run = get_latest_nerf_run(output_dir)\n\n    # Check if checkpoint exists\n    checkpoint_exists = False\n    if latest_run:\n        config_path = os.path.join(latest_run, \"config.yml\")\n        checkpoint_dir = os.path.join(latest_run, \"nerfstudio_models\")\n        checkpoint_exists = (os.path.exists(config_path)\n                             and os.path.exists(checkpoint_dir)\n                             and len(os.listdir(checkpoint_dir)) > 0)\n\n    # Train if needed\n    if not latest_run or not checkpoint_exists:\n        run_cmd(train_cmd, step_name=\"TRAIN_F3RM_RERUN\")\n        # Get the updated latest run after training\n        latest_run = get_latest_nerf_run(output_dir)\n\n    if not latest_run:\n        raise RuntimeError(f\"Failed to find NeRF training run in {output_dir}\")\n\n    config_path = os.path.join(latest_run, \"config.yml\")\n    end = time.time()\n    logging.info(f\"NeRF training completed. Config path: {config_path}. Time taken: {end - start:.2f} seconds\")\n    return config_path\n\n\ndef train_gaussian_splatting(cfg: DictConfig, blender_output_dir: str,\n                             paths: dict) -> None:\n    \"\"\"Train the Gaussian Splatting model.\"\"\"\n    gs_train_cmd_str = (\n        f\"cd {cfg.paths.gaussian_splatting_dir} && python train.py \"\n        f\"-s {blender_output_dir} \"  # blender_output_dir already contains the obj_id\n        f\"--iterations {cfg.training_3d.gaussian_splatting.max_iterations} \"\n        f\"--model_path {paths['gs_output']}\")\n\n    if cfg.overwrite or not os.path.exists(\n            f\"{paths['gs_output']}/point_cloud\"):\n        run_cmd(gs_train_cmd_str, step_name=\"TRAIN_GS\")\n        save_contextual_config(cfg, paths['gs_output'], \"gaussian_splatting\")\n\n    logging.info(\n        f\"Gaussian Splatting training completed. Model path: {paths['gs_output']}\"\n    )\n\n\ndef generate_voxels(cfg: DictConfig, config_path: str, paths: dict) -> str:\n    \"\"\"Generate voxel grid and CLIP features from the trained NeRF.\"\"\"\n    if not cfg.is_objaverse_object:\n        # Auto-configure voxelization for real scene data\n        configure_real_scene_voxelization(cfg)\n        format_real_scene_sample(cfg, paths)\n\n    bounds = cfg.voxelization.scene_bounds\n    voxel_cmd = [\n        \"python\", \"pixie/voxel/voxelize.py\",\n        \"--scene\", config_path,\n        \"--output\", f\"{paths['render_output']}/clip_features.npz\",\n        \"--voxel_size\", str(cfg.voxelization.voxel_size),\n        \"--gray_threshold\", str(cfg.voxelization.gray_threshold),\n        \"--min_x\", str(bounds.x_bound[0]), \"--max_x\", str(bounds.x_bound[1]),\n        \"--min_y\", str(bounds.y_bound[0]), \"--max_y\", str(bounds.y_bound[1]),\n        \"--min_z\", str(bounds.z_bound[0]), \"--max_z\", str(bounds.z_bound[1])\n    ]\n    \n\n    should_run_voxel = (\n        cfg.overwrite_voxel or\n        not (os.path.exists(f\"{paths['render_output']}/clip_features.npz\") and\n             os.path.exists(f\"{paths['render_output']}/clip_features_pc.ply\")))\n\n    if should_run_voxel:\n        run_cmd(voxel_cmd, step_name=\"VOXELIZE\")\n        save_contextual_config(cfg, paths['render_output'], \"voxelization\")\n    else:\n        logging.info(f\"Skipping voxelization because it already exists at {paths['render_output']}\")\n\n    return paths['render_output']\n\n\ndef run_physics_simulation(cfg: DictConfig, sample_output_dir: str,\n                           point_cloud_path: str, paths: dict) -> None:\n    \"\"\"Runs physics simulation on a single segmented material point cloud.\"\"\"\n    if not sample_output_dir or not point_cloud_path:\n        logging.info(\"No segmented sample provided to run simulation. Skipping.\")\n        return\n\n    if not Path(point_cloud_path).exists():\n        logging.error(f\"Point cloud not found at {point_cloud_path}. Skipping simulation.\")\n        return\n\n    sample_id = Path(sample_output_dir).name\n    logging.info(f\"Running simulation for sample {sample_id}\")\n\n    phys_config = get_physics_config_path(cfg, cfg.obj_id, cfg.material_mode,\n                                          cfg.obj_class)\n    \n    # Use configured physgaussian output path: physgaussian_output/{obj_id}/{sample_id}\n    gs_sim_out_path = f\"{paths['physgaussian_output']}/{sample_id}\"\n    os.makedirs(gs_sim_out_path, exist_ok=True)\n\n    phys_sim_list = [\n        \"xvfb-run\",\n        \"-a\",\n        \"python\",\n        \"gs_simulation.py\",\n        \"--model_path\",\n        paths['gs_output'],\n        \"--point_cloud_path\",\n        point_cloud_path,\n        \"--output_path\",\n        gs_sim_out_path,\n        \"--config\",\n        f\"{phys_config}\",  # Adjusted for cd into PhysGaussian\n        \"--render_img\",\n        \"--compile_video\",\n    ]\n    if cfg.physics.debug:\n        phys_sim_list.append(\"--debug\")\n\n    # Add white background flag if needed\n    if should_use_white_bg(cfg, cfg.material_mode, cfg.obj_class):\n        phys_sim_list.append(\"--white_bg\")\n    if cfg.physics.save_ply:\n        phys_sim_list.append(\"--save_ply\")\n\n    phys_sim_cmd = f\"cd {cfg.paths.physgaussian_dir} && {' '.join(phys_sim_list)}\"\n    \n\n    sim_output_exists = (Path(gs_sim_out_path) / \"frames\" / \"output.gif\").exists() or \\\n                        (Path(gs_sim_out_path) / \"frames\" / \"output.mp4\").exists()\n\n    if cfg.overwrite or not sim_output_exists:\n        run_cmd(phys_sim_cmd, step_name=f\"PHYS_SIM_{sample_id}\")\n        save_contextual_config(cfg, gs_sim_out_path, \"physics_simulation\")\n    else:\n        logging.info(f\"Physics simulation results already exist at {gs_sim_out_path}. Skipping.\")\n\n\ndef run_vlm_segmentation(cfg: DictConfig, paths: dict) -> None:\n    \"\"\"Run VLM segmentation to generate part queries.\"\"\"\n    if not cfg.segmentation.vlm.labeling.enabled or cfg.material_mode != 'vlm':\n        return\n\n    logging.info(\"Running VLM segmentation...\")\n    \n    model_name = cfg.segmentation.vlm.labeling.models.segmentation\n    api_key = get_vlm_api_key(cfg, model_name)\n    vlm_seg_output_dir = f\"{cfg.paths.vlm_seg_results_dir}/{cfg.obj_id}\"\n    \n    vlm_seg_cmd = [\n        \"python\",\n        \"pixie/vlm_labeler/vlm_seg.py\",\n        \"--obj_id\",\n        cfg.obj_id,\n        \"--obj_class\",\n        cfg.obj_class,\n        \"--output_dir\",\n        vlm_seg_output_dir,\n        \"--data_dir\",\n        cfg.paths.data_dir,\n        \"--overwrite\",\n        str(cfg.segmentation.vlm.labeling.overwrite),\n        \"--num_alternative_queries\",\n        str(cfg.segmentation.vlm.labeling.seg.num_alternative_queries),\n        \"--input_num_views\",\n        str(cfg.segmentation.vlm.labeling.seg.input_num_views),\n        \"--model_name\",\n        model_name,\n        \"--api_key\",\n        api_key,\n    ]\n    \n    vlm_results_path = f\"{vlm_seg_output_dir}/vlm_results.json\"\n\n    if cfg.overwrite or not os.path.exists(vlm_results_path):\n        run_cmd(vlm_seg_cmd, step_name=\"VLM_SEG\")\n        save_contextual_config(cfg, vlm_seg_output_dir, \"vlm_seg\")\n    else:\n        logging.info(f\"VLM segmentation results already exist at {vlm_results_path}\")\n\n\ndef run_vlm_viz_seg_candidates(cfg: DictConfig, paths: dict) -> None:\n    \"\"\"Run VLM visualization of segmentation candidates.\"\"\"\n    if not cfg.segmentation.vlm.labeling.enabled or cfg.material_mode != 'vlm':\n        return\n\n    logging.info(\"Running VLM visualization of segmentation candidates...\")\n    \n    model_name = cfg.segmentation.vlm.labeling.models.segmentation\n    api_key = get_vlm_api_key(cfg, model_name)\n    vlm_viz_cmd = [\n        \"python\",\n        \"pixie/vlm_labeler/vlm_viz_seg_candidates.py\",\n        \"--obj_id\",\n        cfg.obj_id,\n        \"--vlm_seg_results_dir\",\n        cfg.paths.vlm_seg_results_dir,\n        \"--render_outputs_dir\",\n        cfg.paths.render_outputs_dir,\n        \"--outputs_dir\",\n        cfg.paths.outputs_dir,\n        \"--grid_size\",\n        str(cfg.voxelization.grid_size),\n        \"--gray_threshold\",\n        str(cfg.voxelization.gray_threshold),\n        \"--overwrite\",\n        str(cfg.overwrite),\n        \"--model_name\",\n        model_name,\n        \"--api_key\",\n        api_key,\n    ]\n\n    vlm_seg_output_dir = f\"{cfg.paths.vlm_seg_results_dir}/{cfg.obj_id}\"\n    \n    # Check if visualization files exist\n    viz_files_exist = False\n    if os.path.exists(vlm_seg_output_dir):\n        query_dirs = [d for d in os.listdir(vlm_seg_output_dir) if d.startswith(\"query_\")]\n        if query_dirs:\n            first_query_dir = os.path.join(vlm_seg_output_dir, query_dirs[0])\n            viz_files_exist = os.path.exists(os.path.join(first_query_dir, \"clip.png\"))\n\n    if cfg.overwrite or not viz_files_exist:\n        run_cmd(vlm_viz_cmd, step_name=\"VLM_VIZ_SEG_CANDIDATES\")\n        save_contextual_config(cfg, vlm_seg_output_dir, \"vlm_viz_seg_candidates\")\n    else:\n        logging.info(\"VLM visualization files already exist\")\n\n\ndef run_vlm_seg_critic(cfg: DictConfig, paths: dict) -> None:\n    \"\"\"Run VLM segmentation critic to evaluate segmentation quality.\"\"\"\n    if not cfg.segmentation.vlm.labeling.enabled or cfg.material_mode != 'vlm':\n        return\n\n    logging.info(\"Running VLM segmentation critic...\")\n    \n    model_name = cfg.segmentation.vlm.labeling.models.seg_critic\n    api_key = get_vlm_api_key(cfg, model_name)\n    vlm_critic_cmd = [\n        \"python\",\n        \"pixie/vlm_labeler/vlm_seg_critic.py\",\n        \"--obj_id\",\n        cfg.obj_id,\n        \"--data_dir\",\n        cfg.paths.data_dir,\n        \"--vlm_seg_results_dir\",\n        cfg.paths.vlm_seg_results_dir,\n        \"--vlm_seg_critic_results_dir\",\n        cfg.paths.vlm_seg_critic_results_dir,\n        \"--input_num_views\",\n        str(cfg.segmentation.vlm.labeling.critic.input_num_views),\n        \"--overwrite\",\n        str(cfg.overwrite),\n        \"--model_name\",\n        model_name,\n        \"--api_key\",\n        api_key,\n    ]\n\n    vlm_critic_output_dir = f\"{cfg.paths.vlm_seg_critic_results_dir}/{cfg.obj_id}\"\n    run_cmd(vlm_critic_cmd, step_name=\"VLM_SEG_CRITIC\")\n    save_contextual_config(cfg, vlm_critic_output_dir, \"vlm_seg_critic\")\n\n\ndef run_vlm_phys_sampler(cfg: DictConfig, paths: dict) -> None:\n    \"\"\"Run VLM physics sampler to generate material samples.\"\"\"\n    if not cfg.segmentation.vlm.labeling.enabled or cfg.material_mode != 'vlm':\n        return\n\n    logging.info(\"Running VLM physics sampler...\")\n    \n    model_name = cfg.segmentation.vlm.labeling.models.phys_sampler\n    api_key = get_vlm_api_key(cfg, model_name)\n    vlm_sampler_cmd = [\n        \"python\",\n        \"pixie/vlm_labeler/vlm_phys_sampler.py\",\n        \"--obj_id\",\n        cfg.obj_id,\n        \"--vlm_seg_results_dir\",\n        cfg.paths.vlm_seg_results_dir,\n        \"--vlm_seg_mat_sample_results_dir\",\n        cfg.paths.vlm_seg_mat_sample_results_dir,\n        \"--overwrite\",\n        str(cfg.segmentation.vlm.labeling.overwrite),\n        \"--num_sample_mat\",\n        str(cfg.segmentation.vlm.labeling.phys_sampler.num_sample_mat),\n        \"--model_name\",\n        model_name,\n        \"--api_key\",\n        api_key,\n    ]\n\n    vlm_sampler_output_dir = f\"{cfg.paths.vlm_seg_mat_sample_results_dir}/{cfg.obj_id}\"\n    run_cmd(vlm_sampler_cmd, step_name=\"VLM_PHYS_SAMPLER\")\n    save_contextual_config(cfg, vlm_sampler_output_dir, \"vlm_phys_sampler\")\n\n\ndef run_vlm_parse_seg_critic(cfg: DictConfig, paths: dict) -> None:\n    \"\"\"Run VLM parse segmentation critic to finalize results.\"\"\"\n    if not cfg.segmentation.vlm.labeling.enabled or cfg.material_mode != 'vlm':\n        return\n\n    logging.info(\"Running VLM parse segmentation critic...\")\n    \n    model_name = cfg.segmentation.vlm.labeling.models.parse_critic\n    api_key = get_vlm_api_key(cfg, model_name)\n    vlm_parse_cmd = [\n        \"python\",\n        \"pixie/vlm_labeler/vlm_parse_seg_critic.py\",\n        \"--obj_id\",\n        cfg.obj_id,\n        \"--vlm_seg_results_dir\",\n        cfg.paths.vlm_seg_results_dir,\n        \"--vlm_seg_critic_results_dir\",\n        cfg.paths.vlm_seg_critic_results_dir,\n        \"--vlm_seg_mat_sample_results_dir\",\n        cfg.paths.vlm_seg_mat_sample_results_dir,\n        \"--model_name\",\n        model_name,\n        \"--api_key\",\n        api_key,\n    ]\n\n    vlm_parse_output_dir = f\"{cfg.paths.vlm_seg_mat_sample_results_dir}/{cfg.obj_id}\"\n    run_cmd(vlm_parse_cmd, step_name=\"VLM_PARSE_SEG_CRITIC\")\n    save_contextual_config(cfg, vlm_parse_output_dir, \"vlm_parse_seg_critic\")\n\n\n@hydra.main(version_base=None, config_path=\"config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Main function to run the entire pipeline.\"\"\"\n    # Set up logging first\n    set_logger()\n\n    # Validate configuration\n    validate_config(cfg)\n\n    # Resolve paths and system-specific settings\n    cfg = resolve_paths(cfg)\n\n    # Auto-detect object class if not provided\n    if cfg.obj_class is None and cfg.obj_id is not None:\n        cfg.obj_class = get_obj_class_for_id(cfg.obj_id, cfg)\n\n    # Get all output paths\n    paths = get_output_paths(cfg, cfg.obj_id)\n\n    # Create necessary directories\n    create_directories(paths)\n\n\n    start_time = time.time()\n\n    # Download assets if needed\n    if cfg.is_objaverse_object:\n        download_assets(cfg)\n        # Render Blender images\n        render_blender_images(cfg, paths)\n\n    data_dir = paths['data_dir']\n    # Train NeRF model\n    config_path = train_distilled_clip_nerf(cfg, data_dir, paths)\n\n    if not cfg.is_objaverse_object and should_use_colmap(cfg, paths):\n        data_dir = f\"{data_dir}/colmap\"\n    # Train Gaussian Splatting model\n    train_gaussian_splatting(cfg, data_dir, paths)\n\n    # Generate voxels\n    render_output_dir = generate_voxels(cfg, config_path, paths)\n\n    # Run VLM labeling pipeline if enabled\n    if cfg.material_mode == 'vlm' and cfg.segmentation.vlm.labeling.enabled:\n        # Run VLM segmentation to generate part queries\n        run_vlm_segmentation(cfg, paths)\n        \n        # Run VLM visualization of segmentation candidates\n        run_vlm_viz_seg_candidates(cfg, paths)\n        \n        # Run VLM segmentation critic\n        run_vlm_seg_critic(cfg, paths)\n        \n        # Run VLM physics sampler\n        run_vlm_phys_sampler(cfg, paths)\n        \n        # Run VLM parse segmentation critic\n        run_vlm_parse_seg_critic(cfg, paths)\n\n    # Generate material segmentation\n    if cfg.material_mode == 'vlm':\n        sample_output_dir = generate_material_segmentation(\n            cfg, render_output_dir, paths)\n    elif cfg.material_mode == 'neural':\n        sample_output_dir = generate_neural_segmentation(\n            cfg, render_output_dir, paths)\n    else:\n        raise ValueError(f\"Invalid material mode: {cfg.material_mode}\")\n\n    point_cloud_path = get_material_segmentation_path(cfg, render_output_dir, paths)\n    # Run physics simulation\n    run_physics_simulation(cfg, sample_output_dir, str(point_cloud_path), paths)\n\n    end_time = time.time()\n    logging.info(f\"Total time taken: {end_time - start_time:.2f} seconds\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "pixie/__init__.py",
    "content": " "
  },
  {
    "path": "pixie/blender/__init__.py",
    "content": ""
  },
  {
    "path": "pixie/blender/apply_feature_colors.py",
    "content": "#!/usr/bin/env python\n\nfrom __future__ import annotations\n\nimport argparse, os, sys\nfrom pathlib import Path\nfrom typing import List, Tuple\n\nimport numpy as np\nfrom plyfile import PlyData\n\nimport bpy\nfrom mathutils import Vector, kdtree\nimport objaverse\nimport random\n\n# Try importing matplotlib - if not available, use fallback colormaps\nimport matplotlib.pyplot as plt\nimport matplotlib.cm as cm\nfrom mathutils import Matrix\nimport json\nimport socket\nimport subprocess\n\nHAS_MATPLOTLIB = True\n\n\n\n\n\n\n# -----------------------------------------------------------------------------\n#  PART-LABEL PALETTES\n# -----------------------------------------------------------------------------\n\n# New palettes with more distinct shades within each family.\nPALETTE_ELASTICITY_NEW = [\n    (0.85, 0.22, 0.22),  # Brick Red\n    (1.00, 0.50, 0.20),  # Orange\n    (0.98, 0.75, 0.30),  # Golden Yellow\n    (0.70, 0.35, 0.10),  # Brownish-Orange\n    (1.00, 0.60, 0.60),  # Light Salmon Pink\n]\n\nPALETTE_PLASTICITY_NEW = [\n    (0.10, 0.40, 0.75),  # Steel Blue\n    (0.20, 0.70, 0.65),  # Teal / Aquamarine\n    (0.45, 0.35, 0.70),  # Indigo / Dark Lavender\n    (0.05, 0.20, 0.45),  # Dark Navy\n    (0.60, 0.80, 0.95),  # Sky Blue\n]\n\n# Old palettes kept for reference or if user prefers them via a future flag\n_PALETTE_ELASTICITY_ORIGINAL = [\n    (0.98, 0.40, 0.40),  # light red\n    (0.90, 0.20, 0.20),  # red\n    (0.70, 0.10, 0.10),  # dark red\n    (0.50, 0.00, 0.00),  # very dark red / maroon\n    (1.00, 0.60, 0.60),  # pale red\n    (0.85, 0.30, 0.30),\n    (0.75, 0.15, 0.15),\n    (0.60, 0.05, 0.05),\n]\n\n_PALETTE_PLASTICITY_ORIGINAL = [\n    (0.20, 0.60, 0.95),  # light blue\n    (0.10, 0.40, 0.85),  # blue\n    (0.05, 0.25, 0.65),  # dark blue\n    (0.02, 0.15, 0.45),  # very dark blue\n    (0.40, 0.70, 1.00),\n    (0.15, 0.50, 0.90),\n    (0.08, 0.30, 0.70),\n    (0.04, 0.20, 0.50),\n]\n\n# Map palette-type string → colour list\nPALETTE_MAP = {\n    'elasticity': PALETTE_ELASTICITY_NEW,  # Using the new ones by default\n    'plasticity': PALETTE_PLASTICITY_NEW,  # Using the new ones by default\n    'elasticity_original':\n    _PALETTE_ELASTICITY_ORIGINAL,  # For potential future choice\n    'plasticity_original':\n    _PALETTE_PLASTICITY_ORIGINAL,  # For potential future choice\n}\n\n# -----------------------------------------------------------------------------\n#  CLI & ENV HELPERS\n# -----------------------------------------------------------------------------\n\n\ndef str2bool(v: str | bool) -> bool:\n    if isinstance(v, bool): return v\n    if v.lower() in {\"yes\", \"true\", \"t\", \"1\", \"y\"}: return True\n    if v.lower() in {\"no\", \"false\", \"f\", \"0\", \"n\"}: return False\n    raise argparse.ArgumentTypeError(\"Boolean value expected.\")\n\n\ndef parse_argv() -> argparse.Namespace:\n    if \"--\" in sys.argv:\n        argv = sys.argv[sys.argv.index(\"--\") + 1:]\n    else:\n        argv = sys.argv[1:]\n\n    ap = argparse.ArgumentParser(\n        description=\"Transfer CLIP-PCA colours onto mesh\")\n    ap.add_argument(\"--obj_ids\",\n                    nargs=\"+\",\n                    default=[],\n                    type=str,\n                    help=\"List of Objaverse UIDs of the assets\")\n    ap.add_argument(\n        \"--pred_ply\",\n        nargs=\"+\",\n        type=str,\n        help=\"List of PLY paths for CLIP PCA colours\",\n        default=[\n        ])\n    ap.add_argument(\n        \"--clip_pred_ply\",\n        nargs=\"+\",\n        type=str,\n        help=\"List of PLY paths for CLIP PCA colours\",\n        default=[\n        ])\n    ap.add_argument(\n        \"--glb_paths\",\n        nargs=\"+\",\n        type=str,\n        default=None,\n        help=\"List of local GLB paths\",\n    )\n    ap.add_argument(\"--output_dir\",\n                    type=str,\n                    default=\"test_qualitative_debug_viz\",\n                    help=\"Directory for coloured GLB\")\n    ap.add_argument(\"--normalize\",\n                    type=str2bool,\n                    default=True,\n                    help=\"Normalize mesh to unit cube\")\n    ap.add_argument(\"--scene_scale\",\n                    type=float,\n                    default=1.0,\n                    help=\"Scale factor after normalisation\")\n    ap.add_argument(\"--radius\",\n                    type=float,\n                    default=None,\n                    help=\"Manual KD radius\")\n    ap.add_argument(\"--kd_max\",\n                    type=int,\n                    default=5,\n                    help=\"# nearest samples for average\")\n    # ** Stylisation flags **\n    ap.add_argument(\"--stylise\",\n                    choices=[\"none\", \"voxels\"],\n                    default=\"none\",\n                    help=\"Voxel stylisation\")\n    ap.add_argument(\"--voxel_size\",\n                    type=float,\n                    default=0.05,\n                    help=\"Voxel remesh size\")\n    ap.add_argument(\"--voxel_adaptivity\",\n                    type=float,\n                    default=0.0,\n                    help=\"Voxel remesh adaptivity\")\n    ap.add_argument(\"--keep_separate\",\n                    action=\"store_true\",\n                    help=\"Don't join meshes before remesh\")\n    # ** Colormap options **\n    ap.add_argument(\n        \"--colormap\",\n        type=str,\n        default=\"turbo\",\n        help=\n        \"Colormap to use: blue, viridis, plasma, inferno, magma, turbo, coolwarm, seismic, rainbow, jet, etc.\"\n    )\n    ap.add_argument(\"--vmin\",\n                    type=float,\n                    default=None,\n                    help=\"Min value for colormap normalization\")\n    ap.add_argument(\"--vmax\",\n                    type=float,\n                    default=None,\n                    help=\"Max value for colormap normalization\")\n    ap.add_argument(\"--gamma\",\n                    type=float,\n                    default=8.0,\n                    help=\"Gamma/sharpness for sigmoid mapping (0 = linear)\")\n    ap.add_argument(\n        \"--feature\",\n        type=str,\n        default=\"E\",\n        help=\"Feature to use for colormap\",\n        choices=[\"E\", \"density\", \"nu\", \"part_label\", \"material_id\", \"rgb\", \"clip_pca\"])\n    ap.add_argument(\n        \"--label_palette\",\n        type=str,\n        default=\"default\",\n        choices=[\"default\", \"elasticity\", \"plasticity\"],\n        help=\n        \"Palette to use for part_label colouring (only applies when --feature part_label).\"\n    )\n    ap.add_argument(\"--render_scene_scale\",\n                    nargs=\"+\",\n                    type=float,\n                    default=[1.0])\n    ap.add_argument(\"--transparent\", action=\"store_true\", default=False)\n    ap.add_argument(\n        \"--is_dreamphysics\",\n        nargs=\"+\",\n        type=str2bool,\n        default=[False],\n        help=\"List of booleans, one per --obj_id, marking DreamPhysics assets\",\n    )\n    ap.add_argument(\"--overwrite\", action=\"store_true\", default=False)\n    ap.add_argument(\"--camera_id\",\n                    type=int,\n                    default=None,\n                    help=\"Camera index in transforms.json (0-based, optional)\")\n    ap.add_argument(\n        \"--blend\",\n        type=str2bool,\n        default=False,\n        help=\n        \"If true, blend original RGB shader with feature‐colour shader using an Empty-controlled gradient.\"\n    )\n    ap.add_argument(\n        \"--blend_feature\",\n        type=str,\n        default=\"rgb\",\n        help=\"Secondary feature to blend with when --blend true.\\n\"\n        \"Use 'rgb' to blend with the original material (default).\\n\"\n        \"Otherwise choose another feature (E, density, nu, \\n\"\n        \"part_label, material_id, clip_pca) to blend two painted features.\")\n    ap.add_argument(\n        \"--save_blend\",\n        type=str2bool,\n        default=False,\n        help=\n        \"If true, also save the current Blender scene (.blend) for inspection.\"\n    )\n    ap.add_argument(\"--log_normalize_feature\",\n                    type=str2bool,\n                    default=True,\n                    help=\"If true, log-normalize the feature values.\")\n    ap.add_argument(\n        \"--material_types\",\n        type=str,\n        default=\"plain,glossy\",\n        help=\"Comma-separated material styles for branch1 and branch2.\\n\"\n        \"Options per branch: plain | glossy | original.\\n\"\n        \"'plain' and 'glossy' create new Principled BSDFs with \\n\"\n        \"appropriate parameters; 'original' reuses the object's \\n\"\n        \"existing shader graph (only valid for branch2).\")\n    ap.add_argument(\n        \"--noise_edge\",\n        type=str2bool,\n        default=False,\n        help=\n        \"If true, add a Noise Texture modulation to the blend mask for a more organic edge.\"\n    )\n    ap.add_argument(\n        \"--noise_scale\",\n        type=float,\n        default=50.0,\n        help=\n        \"Noise texture scale when --noise_edge is true (higher = finer noise).\"\n    )\n    ap.add_argument(\n        \"--noise_strength\",\n        type=float,\n        default=0.3,\n        help=\n        \"How strongly noise perturbs the edge (0-1). 0.3 gives subtle jitter; 1.0 full displacement.\"\n    )\n    ap.add_argument(\n        \"--focal_length\",\n        type=float,\n        default=None,\n        help=\"Camera focal length in mm. Overrides any camera intrinsics.\")\n    ap.add_argument(\n        \"--rotate_video\",\n        action=\"store_true\",\n        default=False,\n        help=\n        \"If set, generate multiple frames for a 360° rotating video instead of a single still.\"\n    )\n    ap.add_argument(\"--views\",\n                    type=int,\n                    default=120,\n                    help=\"Number of views for 360° rotation (default: 120)\")\n    ap.add_argument(\"--data_dir\",\n                    type=str,\n                    default=None,\n                    help=\"Data directory containing the transforms.json file\")\n    ap.add_argument(\"--blend_file_path\",\n                    type=str,\n                    default=None,\n                    help=\"Path to the Blender scene file (.blend) to use for rendering\")\n\n    args = ap.parse_args(argv)\n\n    # Pre-parse material_types into list so we don't repeat later\n    mt = [s.strip().lower() for s in args.material_types.split(\",\")]\n    # Ensure we have two values\n    if len(mt) == 1:\n        mt = mt * 2\n    elif len(mt) > 2:\n        mt = mt[:2]\n    args.material_types = mt  # overwrite with list for convenience\n\n    return args\n\n\ndef ensure_dir(p: str | Path) -> Path:\n    p = Path(p)\n    p.mkdir(parents=True, exist_ok=True)\n    return p\n\n\n# -----------------------------------------------------------------------------\n#  SCENE UTILITIES\n# -----------------------------------------------------------------------------\n\n\ndef clear_scene():\n    bpy.ops.object.select_all(action=\"SELECT\")\n    bpy.ops.object.delete()\n    for coll in list(bpy.data.collections):\n        if coll.users == 0 and coll.name != \"Collection\":\n            bpy.data.collections.remove(coll)\n    for db in (bpy.data.meshes, bpy.data.materials, bpy.data.images,\n               bpy.data.textures):\n        for block in list(db):\n            if block.users == 0:\n                db.remove(block)\n\n\ndef scene_bbox(objs: List[bpy.types.Object]) -> Tuple[Vector, Vector]:\n    depsgraph = bpy.context.evaluated_depsgraph_get()\n    bb_min = Vector((1e9, 1e9, 1e9))\n    bb_max = Vector((-1e9, -1e9, -1e9))\n    for ob in objs:\n        ob_eval = ob.evaluated_get(depsgraph)\n        for corner in ob_eval.bound_box:\n            wco = ob_eval.matrix_world @ Vector(corner)\n            bb_min = Vector(map(min, bb_min, wco))\n            bb_max = Vector(map(max, bb_max, wco))\n    return bb_min, bb_max\n\n\ndef make_blended_material(mesh_objs,\n                          layer_main: str = \"CLIP_PCA\",\n                          layer_blend: str | None = None,\n                          style_main: str = \"plain\",\n                          style_blend: str = \"plain\",\n                          *,\n                          noise_edge: bool = False,\n                          noise_scale: float = 50.0,\n                          noise_strength: float = 0.3):\n    \"\"\"Create a material that blends between two vertex-colour layers along the Z-axis.\n\n    Parameters\n    ----------\n    layer_main : str\n        Name of the *first* vertex-colour layer.  This is the layer that will\n        be visible where the gradient factor is 0 (i.e. towards the EMPTY).\n    layer_blend : str | None\n        Name of the *second* vertex-colour layer to blend to.  If *None* the\n        original material of the object is used instead – this matches the\n        previous behaviour of the function.  If provided, the original\n        material is ignored and we blend *layer_main* → *layer_blend*.\n    \"\"\"\n\n    # Re-use (or create) the empty that drives the gradient.\n    if \"BlendController\" in bpy.data.objects:\n        empty = bpy.data.objects[\"BlendController\"]\n    else:\n        empty = bpy.data.objects.new(\"BlendController\", None)\n        bpy.context.collection.objects.link(empty)\n        empty.location = (0, 0, 0.2\n                          )  # Slightly above centre so original shows first\n\n    for ob in mesh_objs:\n        for slot in ob.material_slots:\n            mat = slot.material\n            if mat is None or not mat.use_nodes:\n                continue\n            nt = mat.node_tree\n\n            # Locate the output node\n            out = next(n for n in nt.nodes if n.type == \"OUTPUT_MATERIAL\")\n\n            # ---- remove current surface link & remember old shader --------\n            try:\n                old_link = next(\n                    l for l in nt.links\n                    if l.to_node == out and l.to_socket.name == \"Surface\")\n                old_shader = old_link.from_node\n                nt.links.remove(old_link)\n            except StopIteration:\n                old_shader = None\n\n            # Helper to create BSDF with style ---------------------------------\n            def _create_bsdf(style: str, x: int, y: int):\n                bsdf = nt.nodes.new(\"ShaderNodeBsdfPrincipled\")\n                bsdf.location = (x, y)\n                if style == \"glossy\":\n                    bsdf.inputs[\"Roughness\"].default_value = 0.0\n                    bsdf.inputs[\"Specular IOR Level\"].default_value = 1.0\n                    bsdf.inputs[\"Metallic\"].default_value = 0.1\n                # \"plain\" keeps default values\n                return bsdf\n\n            # ---- FIRST feature branch (layer_main) -----------------------\n            vc1 = nt.nodes.new(\"ShaderNodeVertexColor\")\n            vc1.layer_name = layer_main\n            vc1.location = (-750, 250)\n            bsdf1 = _create_bsdf(style_main, -500, 250)\n            nt.links.new(vc1.outputs[\"Color\"], bsdf1.inputs[\"Base Color\"])\n\n            # ---- Determine SECOND branch: either another layer or original shader\n            if layer_blend is None:\n                # Use original shader OR create new according to style_blend\n                if style_blend == \"original\" and old_shader is not None:\n                    branch2_shader = old_shader\n                else:\n                    branch2_shader = _create_bsdf(style_blend, -500, 0)\n                    if old_shader is not None and style_blend == \"plain\":\n                        # For plain we could adopt old base colour/texture by linking\n                        # old_shader's BaseColor into new bsdf if it has one. Keep simple.\n                        pass\n            else:\n                vc2 = nt.nodes.new(\"ShaderNodeVertexColor\")\n                vc2.layer_name = layer_blend\n                vc2.location = (-750, 0)\n                bsdf2 = _create_bsdf(style_blend, -500, 0)\n                nt.links.new(vc2.outputs[\"Color\"], bsdf2.inputs[\"Base Color\"])\n                branch2_shader = bsdf2\n\n            # ---- gradient-mask branch ------------------------------------\n            tc = nt.nodes.new(\"ShaderNodeTexCoord\")\n            tc.location = (-1000, -200)\n            sep = nt.nodes.new(\"ShaderNodeSeparateXYZ\")\n            sep.location = (-800, -200)\n            ramp = nt.nodes.new(\"ShaderNodeMapRange\")\n            ramp.location = (-600, -200)\n            # ramp.inputs[\"From Min\"].default_value = -0.5\n            # ramp.inputs[\"From Max\"].default_value = 0.5\n            ramp.inputs[\"From Min\"].default_value = 0.5\n            ramp.inputs[\"From Max\"].default_value = -0.5\n            # ramp.inputs[\"From Min\"].default_value = -0.1 ## sharper transition!\n            # ramp.inputs[\"From Max\"].default_value = 0.1\n            tc.object = empty\n            nt.links.new(tc.outputs[\"Object\"], sep.inputs[\"Vector\"])\n            nt.links.new(sep.outputs[\"Z\"], ramp.inputs[\"Value\"])\n\n            # ---- optional noise modulation ------------------------------\n            fac_output = ramp.outputs[\"Result\"]  # default\n            if noise_edge:\n                noise = nt.nodes.new(\"ShaderNodeTexNoise\")\n                noise.location = (-900, -450)\n                noise.inputs[\"Scale\"].default_value = noise_scale\n                noise.inputs[\"Roughness\"].default_value = 0.0\n                nt.links.new(tc.outputs[\"Object\"], noise.inputs[\"Vector\"])\n\n                sub = nt.nodes.new(\"ShaderNodeMath\")\n                sub.operation = 'SUBTRACT'\n                sub.location = (-700, -350)\n                nt.links.new(noise.outputs[\"Fac\"], sub.inputs[0])\n                sub.inputs[1].default_value = 0.5  # center noise around 0\n\n                mul = nt.nodes.new(\"ShaderNodeMath\")\n                mul.operation = 'MULTIPLY'\n                mul.location = (-550, -350)\n                nt.links.new(sub.outputs[0], mul.inputs[0])\n                mul.inputs[1].default_value = noise_strength\n\n                add = nt.nodes.new(\"ShaderNodeMath\")\n                add.operation = 'ADD'\n                add.location = (-400, -350)\n                nt.links.new(ramp.outputs[\"Result\"], add.inputs[0])\n                nt.links.new(mul.outputs[0], add.inputs[1])\n\n                clamp = nt.nodes.new(\"ShaderNodeClamp\")\n                clamp.location = (-250, -350)\n                nt.links.new(add.outputs[0], clamp.inputs[0])\n\n                fac_output = clamp.outputs[0]\n\n            # ---- final mix ------------------------------------------------\n            mix = nt.nodes.new(\"ShaderNodeMixShader\")\n            mix.location = (-300, 50)\n            # Socket order: shader1 (Fac=0) , shader2 (Fac=1)\n            nt.links.new(bsdf1.outputs[0], mix.inputs[1])\n            nt.links.new(branch2_shader.outputs[0], mix.inputs[2])\n            nt.links.new(fac_output, mix.inputs[\"Fac\"])\n            nt.links.new(mix.outputs[0], out.inputs[\"Surface\"])\n\n\n# ── in normalise_objects() ──────────────────────────────────────────────\ndef normalize_objects(objs: list[bpy.types.Object], scene_scale: float = 1.0):\n    \"\"\"\n    Translate the WHOLE hierarchy so its bbox centre is at the origin,\n    then scale it so the largest side is 1 m (× scene_scale).\n    Returns (scale, centre) so the same transform can be applied to the PLY.\n    \"\"\"\n    bb_min, bb_max = scene_bbox(objs)\n    centre = (bb_min + bb_max) / 2\n    size_vec = bb_max - bb_min\n    \n    if max(size_vec) > 0:\n        scale = scene_scale / max(size_vec)\n    else:\n        scale = scene_scale\n\n    # Create the transformation matrices\n    T = Matrix.Translation(-centre)\n    S = Matrix.Scale(scale, 4)\n    transform_matrix = S @ T\n    \n    # Apply the transformation to every object (not just root objects)\n    for ob in objs:\n        ob.matrix_world = transform_matrix @ ob.matrix_world\n        \n    # Force update\n    bpy.context.view_layer.update()\n    \n    return float(scale), np.array(centre)\n\n\n# -----------------------------------------------------------------------------\n#  VOXEL STYLISATION\n# -----------------------------------------------------------------------------\n\n# def join_meshes(objs: List[bpy.types.Object]) -> bpy.types.Object:\n#     if len(objs)==1:\n#         ob = objs[0]\n#     else:\n#         bpy.ops.object.select_all(action=\"DESELECT\")\n#         for o in objs: o.select_set(True)\n#         bpy.context.view_layer.objects.active = objs[0]\n#         bpy.ops.object.join()\n#         ob = bpy.context.view_layer.objects.active\n#     bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)\n#     return ob\n\n\n# Modify the join_meshes function to split leaves:\ndef join_meshes(objs: List[bpy.types.Object]):\n    leaf_objs = [ob for ob in objs if \"leafset\" in ob.name.lower()]\n    other_objs = [ob for ob in objs if ob not in leaf_objs]\n\n    merged = []\n    if other_objs:\n        bpy.ops.object.select_all(action=\"DESELECT\")\n        for ob in other_objs:\n            ob.select_set(True)\n        bpy.context.view_layer.objects.active = other_objs[0]\n        bpy.ops.object.join()\n        tgt = bpy.context.view_layer.objects.active\n        bpy.ops.object.transform_apply(location=False,\n                                       rotation=False,\n                                       scale=True)\n        merged.append(tgt)\n\n    # apply scale to leaves separately\n    for ob in leaf_objs:\n        bpy.context.view_layer.objects.active = ob\n        bpy.ops.object.transform_apply(location=False,\n                                       rotation=False,\n                                       scale=True)\n        merged.append(ob)\n\n    return merged\n\n\n\n\ndef voxel_remesh(ob: bpy.types.Object, size=0.02, adaptivity=0.0):\n    print(\"Remeshing\", ob.name)\n    bpy.context.view_layer.objects.active = ob\n    # mod = ob.modifiers.new(\"VoxelRemesh\", type=\"REMESH\")\n    # mod.mode = \"VOXEL\"\n    # mod.voxel_size = size\n    # mod.adaptivity = adaptivity\n\n    mod = ob.modifiers.new(\"BlocksRemesh\", type=\"REMESH\")\n    if \"leafset\" in ob.name.lower():\n        # mod.mode = \"BLOCKS\"\n        # mod.octree_depth = 15\n        mod.mode = \"VOXEL\"\n        mod.voxel_size = 0.008\n        mod.adaptivity = 0.0\n\n    else:\n        mod.mode = \"BLOCKS\"\n        mod.octree_depth = 7\n    # mod.scale = 0.9\n    # mod.scale = 0.99\n    # if \"leafset\" in ob.name.lower():\n    #     return\n    bpy.ops.object.modifier_apply(modifier=mod.name)\n\n\n# -----------------------------------------------------------------------------\n#  PLY & KD-TREE\n# -----------------------------------------------------------------------------\n\n\ndef load_semantic_ply(ply_path, normalize=True, is_dreamphysics=False):\n    \"\"\"Load semantic colors and positions from the PLY file.\"\"\"\n    ply_data = PlyData.read(ply_path)\n    vertex_elem = ply_data['vertex']  # PlyElement\n    vertex_data = vertex_elem.data  # <-- structured NumPy array\n\n    # positions\n    positions = np.column_stack(\n        (vertex_data['x'], vertex_data['y'], vertex_data['z']))\n\n    features = {}\n    # Discrete features (labels)\n    if 'part_label' in vertex_data.dtype.names:\n        features['part_label'] = vertex_data['part_label']\n    if 'material_id' in vertex_data.dtype.names:\n        features['material_id'] = vertex_data['material_id']\n    # Continuous features\n    if 'E' in vertex_data.dtype.names:\n        features['E'] = vertex_data['E']\n    if 'density' in vertex_data.dtype.names:\n        features['density'] = vertex_data['density']\n    if 'nu' in vertex_data.dtype.names:\n        features['nu'] = vertex_data['nu']\n    if is_dreamphysics:\n        features['E'] *= 1e7\n    if normalize:\n        if 'E' in features:\n            features['E'] = np.log(features['E'])\n        if 'density' in features:\n            features['density'] = np.log(features['density'])\n\n    return positions, features\n\n\n# -----------------------------------------------------------------------------\n#  COLORMAP SYSTEM\n# -----------------------------------------------------------------------------\n\n# Built-in colormaps for when matplotlib is not available\nBUILTIN_COLORMAPS = {\n    'blue': [\n        (0.02, 0.12, 0.24),  # Dark blue\n        (0.00, 0.41, 0.71),  # Medium blue\n        (0.00, 0.78, 1.00),  # Light cyan\n    ],\n    'viridis': [\n        (0.267, 0.005, 0.329),  # Dark purple\n        (0.128, 0.565, 0.551),  # Teal\n        (0.993, 0.906, 0.144),  # Yellow\n    ],\n    'plasma': [\n        (0.050, 0.030, 0.528),  # Dark blue\n        (0.796, 0.280, 0.469),  # Pink\n        (0.940, 0.975, 0.131),  # Yellow\n    ],\n    'inferno': [\n        (0.001, 0.000, 0.014),  # Black\n        (0.735, 0.215, 0.330),  # Red\n        (0.988, 1.000, 0.645),  # Yellow-white\n    ],\n    'coolwarm': [\n        (0.230, 0.299, 0.754),  # Blue\n        (0.865, 0.865, 0.865),  # Gray\n        (0.706, 0.016, 0.150),  # Red\n    ],\n    'turbo': [\n        (0.190, 0.072, 0.583),  # Purple\n        (0.100, 0.800, 0.300),  # Green\n        (0.730, 0.150, 0.095),  # Red\n    ],\n}\n\n\ndef _lerp(a, b, t):\n    \"\"\"Linear interpolation between two colors.\"\"\"\n    return tuple(x + (y - x) * t for x, y in zip(a, b))\n\n\ndef _sigmoid(x, k=8.0):\n    \"\"\"Sigmoid function for non-linear mapping.\"\"\"\n    if k == 0:\n        return x  # Linear mapping\n    return 1 / (1 + np.exp(-k * (x - 0.5)))\n\n\ndef builtin_colormap(t_norm: float,\n                     colormap_name: str,\n                     gamma: float = 8.0) -> tuple[float, float, float]:\n    \"\"\"Apply a built-in colormap to a normalized value.\"\"\"\n    if colormap_name not in BUILTIN_COLORMAPS:\n        print(f\"Warning: Unknown colormap '{colormap_name}', using 'blue'\")\n        colormap_name = 'blue'\n\n    colors = BUILTIN_COLORMAPS[colormap_name]\n    t = _sigmoid(max(0, min(1, t_norm)), gamma)\n\n    # Interpolate between colors\n    n_colors = len(colors)\n    if n_colors == 2:\n        return _lerp(colors[0], colors[1], t)\n    elif n_colors == 3:\n        if t < 0.5:\n            return _lerp(colors[0], colors[1], t / 0.5)\n        else:\n            return _lerp(colors[1], colors[2], (t - 0.5) / 0.5)\n    else:\n        # General case for more colors\n        segment_size = 1.0 / (n_colors - 1)\n        idx = int(t / segment_size)\n        if idx >= n_colors - 1:\n            return colors[-1]\n        local_t = (t - idx * segment_size) / segment_size\n        return _lerp(colors[idx], colors[idx + 1], local_t)\n\n\ndef load_clip_ply(ply_path: str | Path) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"Return Nx3 positions and Nx3 RGB float colours (0‑1).\"\"\"\n    ply = PlyData.read(ply_path)\n    v = ply[\"vertex\"].data\n    xyz = np.column_stack((v[\"x\"], v[\"y\"], v[\"z\"]))\n    if {\"red\", \"green\", \"blue\"}.issubset(v.dtype.names):\n        rgb = np.column_stack((v[\"red\"], v[\"green\"], v[\"blue\"])) / 255.0\n    else:\n        raise ValueError(\"PLY is missing colour fields (red/green/blue)\")\n    return xyz.astype(np.float32), rgb.astype(np.float32)\n\n\ndef build_kdtree(pts: np.ndarray) -> kdtree.KDTree:\n    kd = kdtree.KDTree(len(pts))\n    for i, p in enumerate(pts):\n        kd.insert(p, i)\n    kd.balance()\n    return kd\n\n\ndef paint_mesh_with_clip(\n    mesh_objs: List[bpy.types.Object],\n    clip_pos: np.ndarray,\n    clip_rgb: np.ndarray,\n    radius: float | None = None,\n    kd_max: int = 5,\n    *,\n    layer_name: str = \"CLIP_PCA\",\n) -> None:\n    \"\"\"Fill *layer_name* vertex-colour layer with colours from CLIP PCA point-cloud.\"\"\"\n\n    # Build KD-tree once\n    kd = build_kdtree(clip_pos)\n\n    # Stats\n    total_verts = 0\n    mapped_verts = 0\n\n    for ob in mesh_objs:\n        me = ob.data\n        if layer_name not in me.vertex_colors:\n            me.vertex_colors.new(name=layer_name)\n        vcol = me.vertex_colors[layer_name]\n\n        # Ensure layer length matches loops\n        if len(vcol.data) != len(me.loops):\n            vcol.data.foreach_set(\"color\",\n                                  [0.0] * len(me.loops) * 4)  # RGBA zeros\n\n        for poly in me.polygons:\n            for li in poly.loop_indices:\n                total_verts += 1\n                vi = me.loops[li].vertex_index\n                wco = ob.matrix_world @ me.vertices[vi].co\n\n                nearest = kd.find((wco.x, wco.y, wco.z))  # (co, idx, dist)\n                assert nearest is not None, \"No nearest point found\"\n                if nearest is not None:\n                    col = clip_rgb[nearest[1]]\n                    vcol.data[li].color = (*col.tolist(), 1.0)\n                    mapped_verts += 1\n\n    # Print diagnostics\n    print(\"\\n[CLIP-PCA Colour Transfer]\")\n    print(f\"  Point-cloud points : {len(clip_pos):6d}\")\n    print(f\"  Number of vertices : {total_verts}\")\n    print(f\"  Mesh loops         : {total_verts:6d}\")\n    print(\n        f\"  Loops coloured     : {mapped_verts:6d} ({mapped_verts/total_verts*100:5.1f} %)\\n\"\n    )\n\n\ndef paint_mesh_with_feature(mesh_objs,\n                            clip_pos,\n                            E_vals,\n                            kd_max=5,\n                            radius=None,\n                            vmin=None,\n                            vmax=None,\n                            colormap=\"plasma\",\n                            palette=None,\n                            *,\n                            layer_name: str = \"CLIP_PCA\"):\n    # Print scene bounds for debugging\n    print(\"\\n[DEBUG] Scene bounds:\")\n    bb_min_mesh, bb_max_mesh = scene_bbox(mesh_objs)\n    print(f\"Mesh bounds: min={bb_min_mesh}, max={bb_max_mesh}\")\n    print(\n        f\"PLY bounds: min={clip_pos.min(axis=0)}, max={clip_pos.max(axis=0)}\")\n\n    # Build KD tree ----------------------------------------------------------\n    kd = kdtree.KDTree(len(clip_pos))\n    for i, p in enumerate(clip_pos):\n        kd.insert(p, i)\n    kd.balance()\n    if radius is None:\n        bb = clip_pos.ptp(0)  # diag of point cloud\n        radius = 0.03 * np.linalg.norm(bb)\n    print(f\"[DEBUG] Using KD radius: {radius:.6f}\")\n\n    # Precompute colormap LUT if continuous\n    lut = None\n    if palette is None:\n        cmap = cm.get_cmap(colormap)\n        lut = (cmap(np.linspace(0, 1, 256))[:, :3]).astype(np.float32)\n        # Ensure vmin and vmax are calculated based on the full E_vals if not provided\n        # This was the original behavior and is generally correct for consistent coloring.\n        current_vmin = np.min(E_vals) if vmin is None else vmin\n        current_vmax = np.max(E_vals) if vmax is None else vmax\n        scale = 255.0 / (current_vmax - current_vmin + 1e-12)\n\n    # Track distance stats\n    max_dist_overall = 0.0\n    total_dist_overall = 0.0\n    count_overall = 0\n    skipped_overall = 0\n\n    for ob in mesh_objs:\n        me = ob.data\n        if layer_name not in me.vertex_colors:\n            me.vertex_colors.new(name=layer_name)\n        vcol = me.vertex_colors[layer_name]\n\n        num_verts = len(me.vertices)\n        # Array to store the calculated feature value for each vertex of the current object\n        vertex_feature_values = np.zeros(num_verts, dtype=np.float32)\n\n        # --- Step 1: Calculate average feature value for each vertex ---\n        for vert_idx, vert in enumerate(me.vertices):\n            wco = ob.matrix_world @ vert.co\n            hits = kd.find_n(\n                wco, kd_max)  # kd.find_range(wco, radius) # Alternative\n\n            if hits:\n                dist = hits[0][2]  # Distance to nearest point\n                max_dist_overall = max(max_dist_overall, dist)\n                total_dist_overall += dist\n                count_overall += 1\n\n                # Optional: Skip if distance is too large, though this might leave uncolored vertices\n                # if dist > radius * 2: # Example threshold\n                #     skipped_overall += 1\n                #     vertex_feature_values[vert_idx] = np.nan # Or some default value\n                #     continue\n\n                # Take feature values from E_vals based on indices from KD-tree hits\n                feature_samples = [\n                    E_vals[h[1]] for h in hits if h[1] < len(E_vals)\n                ]\n                if feature_samples:\n                    vertex_feature_values[vert_idx] = np.mean(feature_samples)\n                else:\n                    # No valid hits (e.g. all hit indices out of bounds for E_vals)\n                    # or no hits at all if find_range was used and found none.\n                    vertex_feature_values[\n                        vert_idx] = current_vmin if palette is None else 0  # Default to min or first label\n            else:\n                # No points found by KDTree (e.g. if find_range used and found none)\n                skipped_overall += 1\n                vertex_feature_values[\n                    vert_idx] = current_vmin if palette is None else 0  # Default value\n\n        # --- Step 2: Vectorized color calculation ---\n        v_colors_rgb = np.zeros((num_verts, 3), dtype=np.float32)\n        if palette is None:  # Continuous colormap\n            if lut is not None:  # Should always be true if palette is None\n                # Vectorized scaling and LUT lookup\n                indices = np.clip(\n                    ((vertex_feature_values - current_vmin) * scale), 0,\n                    255).astype(np.int32)\n                v_colors_rgb = lut[indices]\n        else:  # Discrete palette (for part_label)\n            # Ensure labels are integers for palette lookup\n            int_labels = vertex_feature_values.astype(np.int32)\n\n            # Handle potential out-of-bounds labels if palette is a list/array\n            if isinstance(palette, dict):\n                v_colors_rgb = np.array([\n                    palette.get(lbl, (0, 0, 0)) for lbl in int_labels\n                ])  # Default to black if label not in dict\n            elif isinstance(palette, list):\n                default_color_arr = np.array([0.0, 0.0,\n                                              0.0])  # Default color (black)\n                # Efficiently create colors array\n                safe_labels = np.clip(int_labels, 0, len(palette) - 1)\n                v_colors_rgb = np.array(palette)[safe_labels]\n                # Identify out-of-bound original labels and set them to default (not strictly necessary with np.clip if that behavior is fine)\n                # out_of_bounds_mask = (int_labels < 0) | (int_labels >= len(palette))\n                # v_colors_rgb[out_of_bounds_mask] = default_color_arr\n            else:  # Fallback for unexpected palette type\n                v_colors_rgb = np.array(\n                    [distinct_hsv_palette(10)[0]] *\n                    num_verts)  # Default to first color of HSV palette\n\n        # Combine with alpha channel\n        v_colors_final = np.ones((num_verts, 4), dtype=np.float32)\n        v_colors_final[:, :3] = v_colors_rgb\n\n        # --- Step 3: Broadcast vertex → loops in one go ---\n        flat_colors = np.empty(len(me.loops) * 4, dtype=np.float32)\n        loop_vertex_indices = np.array(\n            [loop.vertex_index for loop in me.loops])\n        flat_colors = v_colors_final[loop_vertex_indices].ravel()\n        vcol.data.foreach_set(\"color\", flat_colors)\n\n    # Print distance statistics (overall for all mesh objects processed)\n    if count_overall > 0:\n        avg_dist_overall = total_dist_overall / count_overall\n        print(f\"\\n[DEBUG] Overall Distance statistics:\")\n        print(f\"Max distance to nearest point: {max_dist_overall:.6f}\")\n        print(f\"Average distance to nearest point: {avg_dist_overall:.6f}\")\n        print(f\"Vertices skipped (no KD hits or too far): {skipped_overall}\")\n        print(f\"Total vertices processed for KD search: {count_overall}\")\n\n\ndef distinct_hsv_palette(n, seed=42):\n    \"\"\"Generate n visually-distinct colors that are vibrant but not oversaturated.\n    The colors are similar to those in the reference image, but slightly darker\n    for better contrast against a pure white background.\"\"\"\n    random.seed(seed)\n\n    # Define a custom color palette inspired by the reference image\n    # These colors work well under white lighting and white backgrounds\n    # Each color is now slightly darker for better contrast\n    base_colors = [\n        (0.0, 0.64, 0.73),  # Darker Cyan\n        (0.686, 0.765, 0.149),  # Specific Yellowish-Green (#afc326) from user\n        (0.8, 0.25, 0.25),  # Darker Red\n        (0.85, 0.4, 0.85),  # Darker Pink\n        (0.212, 0.400, 0.221\n         ),  # Specific Green from reference image (monster head) - Even Darker\n        (0.15, 0.3, 0.85),  # Darker Blue\n        (0.37, 0.17, 0.85),  # Darker Purple\n        (0.8, 0.5, 0.0),  # Darker Orange\n        (0.85, 0.68, 0.0),  # Darker Yellow\n        (0.4, 0.75, 0.75),  # Darker Teal\n        (0.68, 0.5, 0.86),  # Darker Lavender\n        (0.78, 0.5, 0.3),  # Darker Coral\n    ]\n    return base_colors[:n]\n\n\ndef get_color_for_part_label(part_label: int,\n                             num_part_label: int = 8,\n                             *,\n                             palette_type: str = 'default'):\n    \"\"\"Return an RGB colour (0-1) for the given *part_label*.\n\n    If *palette_type* is 'default' the legacy *distinct_hsv_palette* is used.\n    If 'elasticity' or 'plasticity', pre-defined warm/cool palettes are used\n    so that the two groups cannot clash even if label IDs overlap.\n    \"\"\"\n    if palette_type != 'default' and palette_type in PALETTE_MAP:\n        palette = PALETTE_MAP[palette_type]\n        if part_label >= len(palette):\n            # Fallback to HSV palette if we run out of predefined colours\n            palette = distinct_hsv_palette(num_part_label)\n    else:\n        palette = distinct_hsv_palette(num_part_label)\n\n    assert part_label < len(\n        palette\n    ), f\"Part label {part_label} is out of range for palette {palette_type} (len={len(palette)})\"\n    return palette[part_label]\n\n\ndef centre_and_scale(scene, mesh_objs, scene_scale=1.0):\n    bb_min, bb_max = scene_bbox(mesh_objs)\n    centre = (bb_min + bb_max) / 2\n    size_vec = bb_max - bb_min\n    scale = scene_scale / max(size_vec)  # longest edge → 1\n\n    S = Matrix.Scale(scale, 4)  # uniform scale matrix\n\n    for ob in scene.objects:\n        if ob.parent is None:  # root nodes only\n            mw = ob.matrix_world\n            mw.translation = (mw.translation - centre) * scale\n            ob.matrix_world = S @ mw  # scale rotations too\n\n    bpy.context.view_layer.update()\n    return float(scale), np.array(centre)\n\n\n# -----------------------------------------------------------------------------\n#  SHINY VERTEX-COLOUR MATERIAL\n# -----------------------------------------------------------------------------\n\n\ndef make_glossy_vcol(name=\"ClipPCA_Glossy\"):\n    m = bpy.data.materials.new(name)\n    m.use_nodes = True\n    nt = m.node_tree\n    nt.nodes.clear()\n    vc = nt.nodes.new('ShaderNodeVertexColor')\n    vc.layer_name = 'CLIP_PCA'\n    vc.location = (-300, 0)\n    bsdf = nt.nodes.new('ShaderNodeBsdfPrincipled')\n    bsdf.location = (0, 0)\n    out = nt.nodes.new('ShaderNodeOutputMaterial')\n    out.location = (250, 0)\n    nt.links.new(vc.outputs['Color'], bsdf.inputs['Base Color'])\n    nt.links.new(bsdf.outputs['BSDF'], out.inputs['Surface'])\n    bsdf.inputs[\"Roughness\"].default_value = 0.0\n    bsdf.inputs[\"Specular IOR Level\"].default_value = 1.0\n    ## make more metalic\n    bsdf.inputs[\"Metallic\"].default_value = 0.1\n    return m\n\n\ndef render_semantic_glb(semantic_glb_path,\n                        output_dir,\n                        render_scene_scale=1.0,\n                        resolution=512,\n                        transparent=False,\n                        obj_id=None,\n                        camera_id=None,\n                        rotate_video=False,\n                        focal_length=None,\n                        views=120,\n                        data_dir=None,\n                        blend_file_path=None):\n    \"\"\"Generate a single image render of the semantic GLB using render_blender.py.\"\"\"\n\n\n    print(f\"Rendering semantic GLB: {semantic_glb_path}\")\n    os.makedirs(f\"{output_dir}/{semantic_glb_path.stem}\", exist_ok=True)\n    # Run render_blender.py with appropriate arguments\n    render_cmd = f'blender -b -P pixie/blender/render_glb.py -- '\n    render_cmd += f'--blend_file_path \"{blend_file_path}\" '\n    render_cmd += f'--obj \"{semantic_glb_path}\" '\n    render_cmd += f'--output_folder \"{output_dir}/{semantic_glb_path.stem}\" '\n    num_views = views if rotate_video else 1\n    render_cmd += f'--views {num_views} '\n    render_cmd += f'--resolution {resolution} '\n    render_cmd += f'--input_model glb '\n    render_cmd += f'--scene_scale {render_scene_scale} '\n    if transparent:\n        render_cmd += f'--transparent '\n    if rotate_video:\n        render_cmd += '--rotate_video '\n    if obj_id is not None:\n        render_cmd += f'--obj_id {obj_id} '\n\n    if camera_id is not None:\n        render_cmd += f'--camera_id {camera_id} '\n\n    if focal_length is not None:\n        render_cmd += f'--focal_length {focal_length} '\n\n    if data_dir is not None:\n        render_cmd += f'--data_dir \"{data_dir}\" '\n\n    print(f\"Running render command: {render_cmd}\")\n    subprocess.run(render_cmd, shell=True, check=True)\n\n\n# -----------------------------------------------------------------------------\n#  MAIN\n# -----------------------------------------------------------------------------\n\n\ndef process_single_object(glb_path: Path,\n                          pred_ply: Path,\n                          clip_pred_ply: Path,\n                          out_dir: Path,\n                          args,\n                          global_vmin: float = None,\n                          global_vmax: float = None,\n                          colormap_name: str = 'blue',\n                          is_dreamphysics: bool = False,\n                          render_scene_scale: float = 1.0,\n                          obj_id: str = None) -> tuple[float, float]:\n    \"\"\"Process a single object and return its min/max E values.\"\"\"\n    print(f\"\\n[PROCESSING] Object: {glb_path}\")\n\n    # Check if output already exists\n    colormap_suffix = f\"_{args.colormap}\" if args.colormap != \"blue\" else \"\"\n    # out_glb = f\"{glb_path.stem}_mat_{args.feature}_pred_voxelized{colormap_suffix}.glb\"\n    out_glb = f\"{args.feature}.glb\"\n    if is_dreamphysics:\n        out_glb = out_glb.replace(\".glb\", \"_dreamphysics.glb\")\n    out_glb = out_dir / out_glb\n\n    if out_glb.exists() and not args.overwrite:\n        print(f\"[SKIP] Output GLB already exists: {out_glb}\")\n        # Still do rendering\n        render_semantic_glb(out_glb,\n                            out_dir,\n                            render_scene_scale=render_scene_scale,\n                            transparent=args.transparent,\n                            obj_id=obj_id,\n                            camera_id=args.camera_id,\n                            rotate_video=args.rotate_video,\n                            focal_length=args.focal_length,\n                            views=args.views,\n                            data_dir=args.data_dir,\n                            blend_file_path=args.blend_file_path)\n        # Return dummy values since we didn't process the feature\n        return 0.0, 1.0\n\n    # Clear scene for this object\n    clear_scene()\n\n    # Import\n    print(f\"[IMPORT] {glb_path}\")\n    ext = glb_path.suffix.lower()\n    if ext == \".glb\":\n        bpy.ops.import_scene.gltf(filepath=str(glb_path), merge_vertices=True)\n    elif ext == \".fbx\":\n        bpy.ops.import_scene.fbx(filepath=str(glb_path))\n    elif ext == \".obj\":\n        bpy.ops.import_scene.obj(filepath=str(glb_path))\n    else:\n        raise ValueError(\"Unsupported format\")\n\n    mesh_objs = [o for o in bpy.context.scene.objects if o.type == \"MESH\"]\n    if not mesh_objs:\n        raise RuntimeError(\"No mesh!\")\n\n    # Stylise voxels\n    if args.stylise == \"voxels\":\n        if not args.keep_separate:\n            mesh_objs = join_meshes(mesh_objs)\n        else:\n            for m in mesh_objs:\n                bpy.ops.object.transform_apply(location=False,\n                                               rotation=False,\n                                               scale=True)\n        for m in mesh_objs:\n            voxel_remesh(m, args.voxel_size, args.voxel_adaptivity)\n\n    # Normalize mesh to unit cube if requested\n    if args.normalize:\n        bb_min_before, bb_max_before = scene_bbox(mesh_objs)\n        print(f\"\\n[DEBUG] Mesh bounds BEFORE normalization: min={bb_min_before}, max={bb_max_before}, size={bb_max_before-bb_min_before}\")\n        print(\"[NORMALIZE] Normalizing mesh to unit cube...\")\n        scale_factor, centre = normalize_objects(mesh_objs, scene_scale=args.scene_scale)\n        print(f\"Normalized with scale_factor: {scale_factor}, centre: {centre}\")\n        # Update scene after normalization\n        bpy.context.view_layer.update()\n        bb_min_after, bb_max_after = scene_bbox(mesh_objs)\n        print(f\"[DEBUG] Mesh bounds AFTER normalization: min={bb_min_after}, max={bb_max_after}, size={bb_max_after-bb_min_after}\\n\")\n\n    if args.feature != \"rgb\":\n        # Load PLY + paint\n        print(f\"[PLY] {pred_ply}\")\n        if args.feature != \"clip_pca\":\n            clip_pos, all_features = load_semantic_ply(\n                pred_ply,\n                normalize=args.log_normalize_feature,\n                is_dreamphysics=is_dreamphysics)\n            feature = all_features[args.feature]\n\n        # If global min/max not provided, return local ones for global computation\n        if global_vmin is None or global_vmax is None:\n            print(f\"Returning local min/max: {feature.min()}, {feature.max()}\")\n            return feature.min(), feature.max()\n\n        palette = None\n        if args.feature == \"part_label\":\n            ## get all possible labels (not only the ones in the data)\n            palette = {\n                lbl:\n                get_color_for_part_label(int(lbl),\n                                         palette_type=args.label_palette)\n                for lbl in range(8)\n            }\n        elif args.feature == \"material_id\":\n            ## get all possible material IDs (not only the ones in the data)\n            palette = {\n                lbl:\n                get_color_for_part_label(int(lbl),\n                                         palette_type=args.label_palette)\n                for lbl in range(8)\n            }\n\n        print(f\"Palette: {palette}\")\n        # Paint with global values\n        if args.feature == \"clip_pca\":\n            clip_pos, clip_rgb = load_clip_ply(clip_pred_ply)\n            kd = build_kdtree(clip_pos)\n            paint_mesh_with_clip(mesh_objs,\n                                 clip_pos,\n                                 clip_rgb,\n                                 radius=args.radius,\n                                 kd_max=args.kd_max)\n        else:\n            paint_mesh_with_feature(\n                mesh_objs,\n                clip_pos,\n                feature,\n                radius=args.radius,\n                kd_max=args.kd_max if args.feature not in [\"part_label\", \"material_id\"] else 1,\n                colormap=colormap_name,\n                vmin=global_vmin,\n                vmax=global_vmax,\n                palette=palette,\n                layer_name=\"CLIP_PCA\")\n\n        # Handle blending --------------------------------------------------\n        if args.blend:\n            if args.blend_feature.lower() == \"rgb\":\n                # Legacy behaviour – blend with original material\n                make_blended_material(mesh_objs,\n                                      layer_main=\"CLIP_PCA\",\n                                      layer_blend=None,\n                                      style_main=args.material_types[0],\n                                      style_blend=args.material_types[1],\n                                      noise_edge=args.noise_edge,\n                                      noise_scale=args.noise_scale,\n                                      noise_strength=args.noise_strength)\n            else:\n                # -------------------------------------------------------\n                # 1) Paint the SECOND feature onto a new vertex-colour layer\n                # -------------------------------------------------------\n                blend_layer_name = f\"BLEND_{args.blend_feature.upper()}\"\n\n                if args.blend_feature == \"clip_pca\":\n                    clip_pos2, clip_rgb2 = load_clip_ply(clip_pred_ply)\n                    paint_mesh_with_clip(\n                        mesh_objs,\n                        clip_pos2,\n                        clip_rgb2,\n                        radius=args.radius,\n                        kd_max=args.kd_max,\n                        layer_name=blend_layer_name,\n                    )\n                else:\n                    # Load semantic PLY if not already\n                    # Re-use previously loaded clip_pos if available.\n                    if args.feature != \"clip_pca\" and 'clip_pos' in locals():\n                        clip_pos2 = clip_pos\n                        all_features2 = all_features  # already loaded\n                    else:\n                        clip_pos2, all_features2 = load_semantic_ply(\n                            pred_ply,\n                            normalize=args.log_normalize_feature,\n                            is_dreamphysics=is_dreamphysics,\n                        )\n                    if args.blend_feature not in all_features2:\n                        raise ValueError(\n                            f\"blend_feature '{args.blend_feature}' not found in PLY {pred_ply}\"\n                        )\n                    feature2 = all_features2[args.blend_feature]\n\n                    palette2 = None\n                    if args.blend_feature == \"part_label\":\n                        palette2 = {\n                            lbl:\n                            get_color_for_part_label(\n                                int(lbl), palette_type=args.label_palette)\n                            for lbl in range(8)\n                        }\n                    elif args.blend_feature == \"material_id\":\n                        palette2 = {\n                            lbl:\n                            get_color_for_part_label(\n                                int(lbl), palette_type=args.label_palette)\n                            for lbl in range(8)\n                        }\n\n                    paint_mesh_with_feature(\n                        mesh_objs,\n                        clip_pos2,\n                        feature2,\n                        radius=args.radius,\n                        kd_max=args.kd_max\n                        if args.blend_feature not in [\"part_label\", \"material_id\"] else 1,\n                        colormap=colormap_name,\n                        vmin=feature2.min(),\n                        vmax=feature2.max(),\n                        palette=palette2,\n                        layer_name=blend_layer_name,\n                    )\n\n                # -------------------------------------------------------\n                # 2) Create blended material between the TWO feature layers\n                # -------------------------------------------------------\n                make_blended_material(mesh_objs,\n                                      layer_main=\"CLIP_PCA\",\n                                      layer_blend=blend_layer_name,\n                                      style_main=args.material_types[0],\n                                      style_blend=args.material_types[1],\n                                      noise_edge=args.noise_edge,\n                                      noise_scale=args.noise_scale,\n                                      noise_strength=args.noise_strength)\n        else:\n            print(\"[MATERIAL] assigning glossy VCol…\")\n            # If no blending, we still respect material_types[0]\n            if args.material_types[0] == \"glossy\":\n                mat = make_glossy_vcol()\n            else:\n                mat = bpy.data.materials.new(\"PlainVCol\")\n                mat.use_nodes = True\n                nt = mat.node_tree\n                nt.nodes.clear()\n                vc = nt.nodes.new('ShaderNodeVertexColor')\n                vc.layer_name = 'CLIP_PCA'\n                vc.location = (-200, 0)\n                bsdf = nt.nodes.new('ShaderNodeBsdfPrincipled')\n                bsdf.location = (50, 0)\n                nt.links.new(vc.outputs['Color'], bsdf.inputs['Base Color'])\n                out = nt.nodes.new('ShaderNodeOutputMaterial')\n                out.location = (250, 0)\n                nt.links.new(bsdf.outputs['BSDF'], out.inputs['Surface'])\n            for ob in mesh_objs:\n                ob.data.materials.clear()\n                ob.data.materials.append(mat)\n\n    if args.feature == \"rgb\" or args.feature == \"clip_pca\":\n        feature = np.array([0.0])  ## dummy\n    # Export colored\n\n    print(f\"[EXPORT] {out_glb}\")\n    # When exporting the plain RGB asset we *must not* request the exporter to write\n    # vertex-colour data – the original GLB already contains its own materials\n    # (textures, vertex colours, etc.).  Forcing `export_vertex_color='MATERIAL'`\n    # would make the exporter generate a new vertex-colour layer filled with the\n    # default white colour, effectively wiping the original appearance.  We only\n    # need this flag when we have explicitly painted a new colour layer (i.e.\n    # for non-RGB features).\n\n    export_vcol_flag = \"MATERIAL\" if args.feature != \"rgb\" else \"NONE\"\n\n    bpy.ops.export_scene.gltf(\n        filepath=str(out_glb),\n        export_format=\"GLB\",\n        export_materials=\"EXPORT\",\n        export_vertex_color=export_vcol_flag,\n        export_normals=True,\n        export_animations=False,\n    )\n\n    if args.save_blend:\n        blend_path = out_dir / f\"{glb_path.stem}_mat_{args.feature}{'_vox' if args.stylise=='voxels' else ''}.blend\"\n        print(f\"[BLEND] saving scene → {blend_path}\")\n        bpy.ops.wm.save_as_mainfile(\n            filepath=str(blend_path),\n            check_existing=False,  # overwrite silently if --overwrite\n            compress=False)  # set True if you prefer smaller files\n\n    # Render if needed\n    render_semantic_glb(out_glb,\n                        out_dir,\n                        render_scene_scale=render_scene_scale,\n                        transparent=args.transparent,\n                        obj_id=obj_id,\n                        camera_id=args.camera_id,\n                        rotate_video=args.rotate_video,\n                        focal_length=args.focal_length,\n                        views=args.views,\n                        data_dir=args.data_dir,\n                        blend_file_path=args.blend_file_path)\n\n    return feature.min(), feature.max()\n\n\ndef main():\n    args = parse_argv()\n    out_dir = ensure_dir(args.output_dir)\n\n    # Handle multiple objects\n    if args.glb_paths:\n        glb_paths = [Path(p) for p in args.glb_paths]\n        if len(glb_paths) != len(args.obj_ids):\n            raise ValueError(\n                \"Number of GLB paths must match number of object IDs\")\n    else:\n        print(f\"Fetching {len(args.obj_ids)} Objaverse assets...\")\n        mapping = objaverse.load_objects(uids=args.obj_ids)\n        glb_paths = [Path(mapping[obj_id]) for obj_id in args.obj_ids]\n\n    # Handle missing clip_pred_ply - if not provided, use None for each object\n    if not args.clip_pred_ply:\n        args.clip_pred_ply = [None] * len(args.obj_ids)\n\n    # First pass: compute global min/max E values\n    print(\"\\n[PASS 1] Computing global E value range...\")\n    global_vmin = args.vmin\n    global_vmax = args.vmax\n    if args.vmin is None and args.vmax is None:\n        global_vmin, global_vmax = float('inf'), float('-inf')\n        print(f\"args.obj_ids: {args.obj_ids}\")\n        print(f\"glb_paths: {glb_paths}\")\n        print(f\"args.pred_ply: {args.pred_ply}\")\n        print(f\"args.clip_pred_ply: {args.clip_pred_ply}\")\n        print(f\"args.is_dreamphysics: {args.is_dreamphysics}\")\n        print(f\"args.render_scene_scale: {args.render_scene_scale}\")\n        assert len(args.obj_ids) == len(glb_paths) == len(args.pred_ply) == len(args.clip_pred_ply) == len(args.is_dreamphysics) == len(args.render_scene_scale), f\"Number of objects, GLB paths, pred PLYs, clip pred PLYs, is dreamphysics, and render scene scales must match\"\n        for obj_id, glb_path, pred_ply_path, clip_pred_ply_path, is_dp, r_scale in zip(\n                args.obj_ids, glb_paths, args.pred_ply, args.clip_pred_ply,\n                args.is_dreamphysics, args.render_scene_scale):\n            pred_ply = Path(pred_ply_path)\n            print(f\">>>>> Processing object: {obj_id}\")\n            local_min, local_max = process_single_object(\n                glb_path,\n                pred_ply,\n                clip_pred_ply_path,\n                out_dir,\n                args,\n                is_dreamphysics=is_dp,\n                render_scene_scale=r_scale,\n                obj_id=obj_id)\n            global_vmin = min(global_vmin, local_min)\n            global_vmax = max(global_vmax, local_max)\n\n    print(\n        f\"\\n[INFO] Global E value range: {global_vmin:.3f} to {global_vmax:.3f}\"\n    )\n\n    # Second pass: apply consistent coloring\n    print(\"\\n[PASS 2] Applying consistent coloring across all objects...\")\n    assert len(args.obj_ids) == len(glb_paths) == len(args.pred_ply) == len(args.clip_pred_ply) == len(args.is_dreamphysics) == len(args.render_scene_scale), f\"Number of objects, GLB paths, pred PLYs, clip pred PLYs, is dreamphysics, and render scene scales must match\"\n    for obj_id, glb_path, pred_ply_path, clip_pred_ply_path, is_dp, r_scale in zip(\n            args.obj_ids, glb_paths, args.pred_ply, args.clip_pred_ply,\n            args.is_dreamphysics, args.render_scene_scale):\n        pred_ply = Path(pred_ply_path)\n        print(f\"Processing object: {obj_id}\")\n        process_single_object(glb_path,\n                              pred_ply,\n                              clip_pred_ply_path,\n                              out_dir,\n                              args,\n                              global_vmin=global_vmin,\n                              global_vmax=global_vmax,\n                              colormap_name=args.colormap,\n                              is_dreamphysics=is_dp,\n                              render_scene_scale=r_scale,\n                              obj_id=obj_id)\n\n    print(\"\\n[DONE] All objects processed successfully!\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "pixie/blender/generate_blendernerf_data.py",
    "content": "import argparse\nimport math\nimport os\nimport random\nimport sys\nimport time\nimport urllib.request\nfrom typing import Tuple\nimport bpy\nfrom mathutils import Vector\nimport shutil\nimport json\nimport objaverse\nimport socket\n\n\n\ndef enable_cuda_devices():\n    prefs = bpy.context.preferences\n    cprefs = prefs.addons['cycles'].preferences\n    cprefs.get_devices()\n\n    # Attempt to set GPU device types if available\n    for compute_device_type in ('CUDA', 'OPENCL', 'NONE'):\n        try:\n            cprefs.compute_device_type = compute_device_type\n            print(\"Compute device selected: {0}\".format(compute_device_type))\n            break\n        except TypeError:\n            pass\n\n    # Any CUDA/OPENCL devices?\n    acceleratedTypes = ['CUDA', 'OPENCL']\n    accelerated = any(device.type in acceleratedTypes for device in cprefs.devices)\n    print('Accelerated render = {0}'.format(accelerated))\n\n    # If we have CUDA/OPENCL devices, enable only them, otherwise enable\n    # all devices (assumed to be CPU)\n    print(cprefs.devices)\n    for device in cprefs.devices:\n        device.use = not accelerated or device.type in acceleratedTypes\n        print('Device enabled ({type}) = {enabled}'.format(type=device.type, enabled=device.use))\n\n    return accelerated\n\nenable_cuda_devices()\n\n\n\n\n\ndef get_default_output_dir(format_type):\n    \"\"\"Determine the default output directory based on the format.\"\"\"\n    home_dir = os.path.expanduser(\"~\")\n    if format_type == \"NGP\":\n        return os.path.join(home_dir, \"code\", \"instant-ngp\", \"data\")\n    else:  # NERF format for gaussian splatting\n        return os.path.join(home_dir, \"code\", \"gaussian-splatting\", \"data\")\n\nparser = argparse.ArgumentParser()\nparser.add_argument(\n    \"--obj_id\",\n    type=str,\n    help=\"Objaverse object ID to process\",\n)\nparser.add_argument(\n    \"--obj_path\",\n    type=str,\n    help=\"Path to the object file (alternative to obj_id)\",\n)\nparser.add_argument(\"--output_dir\", type=str, default=None, \n                   help=\"Path to output directory. If not provided, will use format-specific default location.\")\nparser.add_argument(\n    \"--engine\", type=str, default=\"CYCLES\", choices=[\"CYCLES\", \"BLENDER_EEVEE_NEXT\", \"BLENDER_WORKBENCH\"]\n)\nparser.add_argument(\"--num_images\", type=int, default=12)\nparser.add_argument(\"--camera_dist_min\", type=float, default=1.0, help=\"Minimum camera distance\")\nparser.add_argument(\"--camera_dist_max\", type=float, default=1.4, help=\"Maximum camera distance\")\n# Keep camera_dist for backward compatibility\nparser.add_argument(\"--camera_dist\", type=float, default=1.2, help=\"Camera distance (deprecated, use min/max instead)\")\nparser.add_argument(\"--format\", type=str, default=\"NERF\", choices=[\"NERF\", \"NGP\"])\nparser.add_argument(\"--transparent_bg\", action='store_true', help=\"Render with transparent background\")\nparser.add_argument(\"--scene_scale\", type=float, default=1.0, help=\"Scale factor to apply after normalization\")\nparser.add_argument(\"--blender_nerf_addon_path\", type=str, required=True, help=\"Path to the BlenderNeRF addon zip file\")\nargv = sys.argv[sys.argv.index(\"--\") + 1 :]\nargs = parser.parse_args(argv)\n\nif args.obj_id is None and args.obj_path is None:\n    raise ValueError(\"Either --obj_id or --obj_path must be provided\")\n\n# If obj_id is provided, get the object path from Objaverse\nif args.obj_id is not None:\n    print(f\"Looking up object path for ID: {args.obj_id}\")\n    objects = objaverse.load_objects(uids=[args.obj_id])\n    if not objects or args.obj_id not in objects:\n        raise ValueError(f\"Could not find object with ID: {args.obj_id}\")\n    args.obj_path = objects[args.obj_id]\n    print(f\"Found object path: {args.obj_path}\")\n\n\n\n# Set the output directory if not provided\nif args.output_dir is None:\n    args.output_dir = get_default_output_dir(args.format)\n    print(f\"Using default output directory: {args.output_dir}\")\n\n# Install the BlenderNeRF addon\nprint(f\"Installing BlenderNeRF addon from: {args.blender_nerf_addon_path}\")\nbpy.ops.preferences.addon_install(filepath=args.blender_nerf_addon_path, overwrite=True)\nbpy.ops.preferences.addon_enable(module='BlenderNeRF-main-custom')\n\ncontext = bpy.context\nscene = context.scene\nrender = scene.render\n\n\n## configure rendering settings\nrender.engine = args.engine\nrender.image_settings.file_format = \"PNG\"\nrender.image_settings.color_mode = \"RGBA\"\n# render.resolution_x = 800\n# render.resolution_y = 800\nrender.resolution_x = 512\nrender.resolution_y = 512\nrender.resolution_percentage = 100\n\nscene.cycles.device = \"GPU\"\nscene.cycles.samples = 32\nscene.cycles.diffuse_bounces = 1\nscene.cycles.glossy_bounces = 1\nscene.cycles.transparent_max_bounces = 3\nscene.cycles.transmission_bounces = 3\nscene.cycles.filter_width = 0.01\nscene.cycles.use_denoising = True\n\n\n### extra settings to ensure pure white background for gaussian splatting...\n# scene.world.light_settings.use_ambient_occlusion = False\nscene.world.use_nodes = True\nscene.view_settings.view_transform = 'Standard'\nscene.view_settings.look = 'None'\n\nscene.render.film_transparent = args.transparent_bg\n\ndef sample_point_on_sphere(radius: float) -> Tuple[float, float, float]:\n    theta = random.random() * 2 * math.pi\n    phi = math.acos(2 * random.random() - 1)\n    return (\n        radius * math.sin(phi) * math.cos(theta),\n        radius * math.sin(phi) * math.sin(theta),\n        radius * math.cos(phi),\n    )\n\n\n\ndef add_lighting() -> None:\n    \"\"\"Add a professional studio-like lighting setup with multiple area lights.\"\"\"\n    # Delete the default light\n    if \"Light\" in bpy.data.objects:\n        bpy.data.objects[\"Light\"].select_set(True)\n        bpy.ops.object.delete()\n    \n    # Clear any existing lights\n    for obj in bpy.data.objects:\n        if obj.type == 'LIGHT':\n            bpy.data.objects.remove(obj, do_unlink=True)\n    \n    # Create a three-point lighting setup\n    \n    # 1. Key light (main light) - brightest, from front-right\n    bpy.ops.object.light_add(type=\"AREA\", location=(2, -2, 2))\n    key_light = bpy.context.object\n    key_light.name = \"Key_Light\"\n    key_light.data.energy = 500\n    key_light.data.size = 5\n    key_light.rotation_euler = (0.6, 0.2, 0.8)  # Angle toward the subject\n    \n    # 2. Fill light - softer light from opposite side to fill shadows\n    bpy.ops.object.light_add(type=\"AREA\", location=(-2, -1, 1))\n    fill_light = bpy.context.object\n    fill_light.name = \"Fill_Light\"\n    fill_light.data.energy = 200  # Less intense than key light\n    fill_light.data.size = 7  # Larger for softer light\n    fill_light.rotation_euler = (0.5, -0.2, -0.8)\n    \n    # 3. Rim/Back light - creates separation from background\n    bpy.ops.object.light_add(type=\"AREA\", location=(0, 3, 2))\n    rim_light = bpy.context.object\n    rim_light.name = \"Rim_Light\"\n    rim_light.data.energy = 300\n    rim_light.data.size = 4\n    rim_light.rotation_euler = (0.8, 0, 0)  # Point down at the back of subject\n    \n    # 4. Top light for general fill\n    bpy.ops.object.light_add(type=\"AREA\", location=(0, 0, 4))\n    top_light = bpy.context.object\n    top_light.name = \"Top_Light\"\n    top_light.data.energy = 150\n    top_light.data.size = 10\n    top_light.rotation_euler = (0, 0, 0)  # Point straight down\n    \n    if not args.transparent_bg:\n        world = bpy.data.worlds['World']\n        world.use_nodes = True\n        bg_node = world.node_tree.nodes['Background']\n        bg_node.inputs[0].default_value = (0.8, 0.8, 0.8, 1.0) ## gray\n        bg_node.inputs[1].default_value = 1.0  # Full strength\n\n\n\ndef reset_scene() -> None:\n    \"\"\"Resets the scene to a clean state.\"\"\"\n    # delete everything that isn't part of a camera or a light\n    for obj in bpy.data.objects:\n        if obj.type not in {\"CAMERA\", \"LIGHT\"}:\n            bpy.data.objects.remove(obj, do_unlink=True)\n    # delete all the materials\n    for material in bpy.data.materials:\n        bpy.data.materials.remove(material, do_unlink=True)\n    # delete all the textures\n    for texture in bpy.data.textures:\n        bpy.data.textures.remove(texture, do_unlink=True)\n    # delete all the images\n    for image in bpy.data.images:\n        bpy.data.images.remove(image, do_unlink=True)\n\n\n\n\n\n# load the model\ndef load_object(obj_path: str) -> None:\n    \"\"\"Loads a 3D model into the scene.\"\"\"\n    if obj_path.endswith(\".glb\"):\n        bpy.ops.import_scene.gltf(filepath=obj_path, merge_vertices=True)\n    elif obj_path.endswith(\".fbx\"):\n        bpy.ops.import_scene.fbx(filepath=obj_path)\n    elif obj_path.endswith(\".obj\"):\n        bpy.ops.import_scene.obj(filepath=obj_path)\n    else:\n        raise ValueError(f\"Unsupported file type: {obj_path}\")\n\ndef scene_bbox(single_obj=None, ignore_matrix=False):\n    bbox_min = (math.inf,) * 3\n    bbox_max = (-math.inf,) * 3\n    found = False\n    for obj in scene_meshes() if single_obj is None else [single_obj]:\n        found = True\n        for coord in obj.bound_box:\n            coord = Vector(coord)\n            if not ignore_matrix:\n                coord = obj.matrix_world @ coord\n            bbox_min = tuple(min(x, y) for x, y in zip(bbox_min, coord))\n            bbox_max = tuple(max(x, y) for x, y in zip(bbox_max, coord))\n    if not found:\n        raise RuntimeError(\"no objects in scene to compute bounding box for\")\n    return Vector(bbox_min), Vector(bbox_max)\n\ndef scene_root_objects():\n    for obj in bpy.context.scene.objects.values():\n        if not obj.parent:\n            yield obj\n\ndef scene_meshes():\n    for obj in bpy.context.scene.objects.values():\n        if isinstance(obj.data, (bpy.types.Mesh)):\n            yield obj\n\ndef normalize_scene():\n    bbox_min, bbox_max = scene_bbox()\n    scale = 1 / max(bbox_max - bbox_min)\n    for obj in scene_root_objects():\n        obj.scale = obj.scale * scale * args.scene_scale\n    \n    # Apply scale to matrix_world.\n    bpy.context.view_layer.update()\n    \n    bbox_min, bbox_max = scene_bbox()\n    offset = -(bbox_min + bbox_max) / 2\n    for obj in scene_root_objects():\n        obj.matrix_world.translation += offset\n    \n    bpy.ops.object.select_all(action=\"DESELECT\")\n\ndef setup_manual_camera():\n    cam = scene.objects[\"Camera\"]\n    cam.location = (0, 1.2, 0)\n    cam.data.lens = 35\n    cam.data.sensor_width = 32\n    \n    cam_constraint = cam.constraints.new(type=\"TRACK_TO\")\n    cam_constraint.track_axis = \"TRACK_NEGATIVE_Z\"\n    cam_constraint.up_axis = \"UP_Y\"\n    \n    return cam, cam_constraint\n\ndef render_with_blendernerf(object_uid: str) -> None:\n    \"\"\"Use BlenderNerf add-on to render the normalized scene.\"\"\"\n    # args.output_dir already contains the object_uid from the pipeline\n    output_dir = args.output_dir\n    \n    # Clear the output directory if it exists to remove stale data\n    if os.path.exists(output_dir):\n        shutil.rmtree(output_dir)\n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Set up parameters for the BlenderNeRF add-on\n    scene = bpy.context.scene\n    \n    # Global parameters\n    scene.train_data = True\n    scene.test_data = False\n    # scene.aabb = 4  # Smaller bounding box to focus on the object\n    # scene.aabb = 2 # Smaller bounding box to focus on the object\n    scene.aabb = 32\n    scene.render_frames = True\n    scene.nerf = args.format == \"NERF\"  # True for NeRF format, False for NGP format\n    scene.save_path = output_dir\n    \n    # COS specific parameters\n    scene.cos_dataset_name = object_uid  # Use object_uid as dataset name to avoid nested directories\n    scene.sphere_location = (0.0, 0.0, 0.0)  # Centered at origin after normalization\n    scene.sphere_rotation = (0.0, 0.0, 0.0)\n    scene.sphere_scale = (1.0, 1.0, 1.0)\n    \n    # Use the new radius min/max properties if available in the add-on\n    # Otherwise fall back to the original sphere_radius property\n    if hasattr(scene, 'sphere_radius_min') and hasattr(scene, 'sphere_radius_max'):\n        scene.sphere_radius_min = args.camera_dist_min / 2\n        scene.sphere_radius_max = args.camera_dist_max / 2\n        # Set sphere_radius to the average for visualization\n        scene.sphere_radius = (args.camera_dist_min + args.camera_dist_max) / 4\n    else:\n        # Fallback to original behavior\n        scene.sphere_radius = args.camera_dist / 2\n        \n    scene.focal = 20.0  # lens focal length in mm\n    scene.cos_nb_frames = args.num_images\n    scene.seed = 0\n    scene.upper_views = True\n    scene.outwards = False\n    \n    try:\n        # Run the Camera on Sphere operator from BlenderNerf\n        bpy.ops.object.camera_on_sphere()\n        print(f\"Successfully rendered {args.num_images} images using BlenderNerf add-on\")\n    except Exception as e:\n        # Check if this is the harmless \"BlenderNeRF Camera\" not found error\n        if \"BlenderNeRF Camera\" in str(e) and \"not found\" in str(e):\n            print(f\"Warning: Harmless BlenderNeRF camera error (continuing): {e}\")\n            # The rendering actually completed successfully despite this error\n        else:\n            print(f\"Error during BlenderNerf rendering: {e}\")\n            raise\n\n\n    # Unpack the archive - BlenderNeRF creates a zip with the dataset name\n    zip_path = os.path.join(output_dir, f\"{object_uid}.zip\")\n    if os.path.exists(zip_path):\n        shutil.unpack_archive(zip_path, output_dir)\n        os.remove(zip_path)\n\n    if args.format == \"NERF\":\n        # create a dummy transforms_test.json\n        with open(os.path.join(output_dir, \"transforms_test.json\"), \"w\") as f:\n            json.dump({\"camera_angle_x\": 0.0, \"frames\": []}, f)\n\ndef download_object(object_url: str) -> str:\n    \"\"\"Download the object and return the path.\"\"\"\n    uid = object_url.split(\"/\")[-1].split(\".\")[0]\n    tmp_local_path = os.path.join(\"tmp-objects\", f\"{uid}.glb\" + \".tmp\")\n    local_path = os.path.join(\"tmp-objects\", f\"{uid}.glb\")\n    \n    # wget the file and put it in local_path\n    os.makedirs(os.path.dirname(tmp_local_path), exist_ok=True)\n    urllib.request.urlretrieve(object_url, tmp_local_path)\n    os.rename(tmp_local_path, local_path)\n    \n    # get the absolute path\n    local_path = os.path.abspath(local_path)\n    return local_path\n\ndef process_object(obj_path: str) -> None:\n    \"\"\"Process a single object: load, normalize, and render.\"\"\"\n    reset_scene()\n    \n    # Load the object\n    load_object(obj_path)\n    object_uid = os.path.basename(obj_path).split(\".\")[0]\n    \n    # Normalize the scene\n    normalize_scene()\n    print(f\"Scene normalized for {object_uid}\")\n\n    # Add lighting\n    add_lighting()\n    \n    # Render with BlenderNerf add-on (this will create the directory structure)\n    render_with_blendernerf(object_uid)\n    \n    # Save the normalized scene as GLB in the output directory\n    # args.output_dir already contains the object_uid from the pipeline\n    glb_path = os.path.join(args.output_dir, f\"{object_uid}_normalized_scene.glb\")\n    bpy.ops.export_scene.gltf(\n        filepath=glb_path,\n        export_format=\"GLB\",          # binary container\n        export_apply=False,           # keep object transforms\n        export_texcoords=True,\n        export_normals=True,\n        export_attributes=True,       # ← replaces export_colors\n        export_materials='EXPORT',    # keep Principled BSDF\n        export_animations=False,\n        check_existing=False,\n    )\n    print(f\"Normalized scene exported to {glb_path}\")\n\nif __name__ == \"__main__\":\n    try:\n        start_i = time.time()\n        \n        if args.obj_path.startswith(\"http\"):\n            local_path = download_object(args.obj_path)\n        else:\n            local_path = args.obj_path\n        \n        process_object(local_path)\n        \n        end_i = time.time()\n        print(\"Finished\", local_path, \"in\", end_i - start_i, \"seconds\")\n        \n        # Delete the object if it was downloaded\n        if args.obj_path.startswith(\"http\"):\n            os.remove(local_path)\n            \n    except Exception as e:\n        print(\"Failed to process\", args.obj_path)\n        print(e)\n\n"
  },
  {
    "path": "pixie/blender/render_glb.py",
    "content": "import bpy\nimport os\nimport sys\nimport argparse\nfrom mathutils import Vector, Matrix\nfrom pathlib import Path\nimport json\nimport socket\nimport contextlib  # needed by the helper below\nimport math\nimport shutil\n\n\n\n\ndef enable_cuda_devices():\n    prefs = bpy.context.preferences\n    cprefs = prefs.addons['cycles'].preferences\n    cprefs.get_devices()\n\n    # Attempt to set GPU device types if available\n    for compute_device_type in ('CUDA', 'OPENCL', 'NONE'):\n        try:\n            cprefs.compute_device_type = compute_device_type\n            print(\"Compute device selected: {0}\".format(compute_device_type))\n            break\n        except TypeError:\n            pass\n\n    # Any CUDA/OPENCL devices?\n    acceleratedTypes = ['CUDA', 'OPENCL']\n    accelerated = any(device.type in acceleratedTypes for device in cprefs.devices)\n    print('Accelerated render = {0}'.format(accelerated))\n\n    # If we have CUDA/OPENCL devices, enable only them, otherwise enable\n    # all devices (assumed to be CPU)\n    print(cprefs.devices)\n    for device in cprefs.devices:\n        device.use = not accelerated or device.type in acceleratedTypes\n        print('Device enabled ({type}) = {enabled}'.format(type=device.type, enabled=device.use))\n\n    return accelerated\n\ndef _srgb_to_linear(c: float) -> float:\n    \"\"\"Convert a single channel from sRGB (display) to linear space (Blender).\"\"\"\n    if c <= 0.04045:\n        return c / 12.92\n    return ((c + 0.055) / 1.055) ** 2.4\n\n\ndef parse_color(s: str | tuple):\n    \"\"\"Return an (R,G,B,A) tuple in *linear* space ready for Blender.\n\n    Accepts either an existing 4-tuple (assumed already linear) or a hex string\n    like \"#f5f5f5\" or \"#fff\" (sRGB).  Hex input is converted to linear using\n    the standard sRGB→linear transform so that the *saved PNG* matches the\n    intended display colour exactly.\n    \"\"\"\n    if isinstance(s, tuple):\n        # Already linear RGBA\n        return s if len(s) == 4 else (*s, 1.0)\n\n    s = s.lstrip('#')\n    if len(s) == 3:                         # short form e.g. fff\n        s = ''.join(c * 2 for c in s)\n    if len(s) != 6:\n        raise ValueError(\"Colour must be #rgb or #rrggbb\")\n\n    # Convert 0–255 integers → 0–1 floats (sRGB)\n    sr, sg, sb = (int(s[i:i + 2], 16) / 255.0 for i in (0, 2, 4))\n\n    # sRGB → linear so Blender writes the same sRGB after colour-management\n    lr, lg, lb = map(_srgb_to_linear, (sr, sg, sb))\n    return (lr, lg, lb, 1.0)\n\n\nenable_cuda_devices()\n\nparser = argparse.ArgumentParser()\n# parser.add_argument(\"--frame_blend_path\", type=str)\nparser.add_argument(\"--frame\", type=int)\nparser.add_argument(\"--blend_file_path\", type=str, \n                    required=True,)\nparser.add_argument('--obj', required=True, type=str)\nparser.add_argument('--obj_id', required=True, type=str)\nparser.add_argument('--output_folder', required=True, type=str)\nparser.add_argument('--views', type=int)\nparser.add_argument('--resolution', type=int)\nparser.add_argument('--input_model', type=str)\nparser.add_argument('--scene_scale', type=float, default=1.0)\nparser.add_argument('--transparent', action='store_true')\nparser.add_argument('--rotate_video', action='store_true',\n                    help='If set, instead of a single still, render a full 360° rotation around the object.')\nparser.add_argument('--camera_id', type=int, default=None, help='Camera index in transforms.json (0-based, optional)')\nparser.add_argument('--focal_length', type=float, default=None,\n                    help='Set camera focal length in mm. Overrides intrinsics from transforms.json if provided.')\nparser.add_argument('--data_dir', type=str, default=None,\n                    help='Data directory containing the transforms.json file')\n\nargv = sys.argv[sys.argv.index(\"--\") + 1 :]\nargs = parser.parse_args(argv)\n\ndef transforms_json(obj_id: str, data_dir: str = None) -> Path:\n    return Path(data_dir) / \"transforms.json\"\n\n\n# ------------------------------------------------------------------\n# Patch translucent materials so they *do* cast shadows in Cycles\n# ------------------------------------------------------------------\n\ndef _ensure_shadow_cast(mat: bpy.types.Material):\n    \"\"\"If the material uses alpha-blend/hashed, add a Light-Path mix\n    that forces the surface to be opaque for shadow rays while leaving\n    its usual appearance for camera rays.\"\"\"\n\n    if not mat.use_nodes:\n        return\n\n    if mat.blend_method not in {'BLEND', 'HASHED', 'CLIP'}:\n        return  # already opaque → casts shadows\n\n    nt = mat.node_tree\n    out = next((n for n in nt.nodes if n.type == 'OUTPUT_MATERIAL'), None)\n    if not out or not out.inputs['Surface'].is_linked:\n        return\n\n    # Avoid patching twice\n    if nt.nodes.get('_AutoLP') and any(n.type == 'MIX_SHADER' and n.label == '_ShadowFix' for n in nt.nodes):\n        return\n\n    # Create Light Path node (or reuse if extant)\n    lp = nt.nodes.get('_AutoLP') or nt.nodes.new('ShaderNodeLightPath')\n    lp.name = '_AutoLP'\n    lp.location = (-300, -300)\n\n    # Original surface shader\n    orig_link = out.inputs['Surface'].links[0]\n    orig_socket = orig_link.from_socket\n\n    # Build or retrieve an opaque BSDF.\n    # Prefer an existing Principled node from the tree (most GLBs have one).\n    opaque_shader = next((n for n in nt.nodes if n.type == 'BSDF_PRINCIPLED'), None)\n\n    if opaque_shader is None:\n        opaque_shader = nt.nodes.new('ShaderNodeBsdfPrincipled')\n        opaque_shader.location = lp.location.x + 100, lp.location.y - 200\n\n    # Force full opacity\n    if hasattr(opaque_shader.inputs, 'Alpha'):\n        opaque_shader.inputs['Alpha'].default_value = 1.0\n\n    # Mix Shader that swaps based on shadow ray\n    mix = nt.nodes.new('ShaderNodeMixShader')\n    mix.label = '_ShadowFix'\n    mix.location = (orig_link.from_node.location.x + 200, orig_link.from_node.location.y)\n\n    nt.links.new(orig_socket, mix.inputs[1])   # regular shading\n    nt.links.new(opaque_shader.outputs[0], mix.inputs[2])  # opaque branch\n    nt.links.new(lp.outputs['Is Shadow Ray'], mix.inputs['Fac'])\n\n    # Re-wire to material output\n    nt.links.new(mix.outputs[0], out.inputs['Surface'])\n\n\n\n\n# ─────────────────── Camera configuration ─────────────────────\ndef set_intrinsics(cam: bpy.types.Object, intr: dict):\n    camd = cam.data\n    camd.lens_unit = 'FOV'\n    camd.angle_x   = intr[\"camera_angle_x\"]\n    camd.angle_y   = intr[\"camera_angle_y\"]\n\n    # cx,cy shift → Blender shift_x/y  (±0.5 == half the image width/height)\n    w, h = intr[\"w\"], intr[\"h\"]\n    camd.shift_x =  (intr[\"cx\"] - 0.5 * w) / w\n    camd.shift_y = -(intr[\"cy\"] - 0.5 * h) / h  # y-axis is flipped\n\ndef set_extrinsics(cam: bpy.types.Object, mat4: list[list[float]]):\n    cam.matrix_world = Matrix(mat4)\n\ndef apply_camera(cam: bpy.types.Object, tf_path: Path, cam_id: int):\n    data = json.loads(tf_path.read_text())\n    frames = data[\"frames\"]\n    if not (0 <= cam_id < len(frames)):\n        raise IndexError(f\"camera_id {cam_id} out of range 0..{len(frames)-1}\")\n    set_extrinsics(cam, frames[cam_id][\"transform_matrix\"])\n    set_intrinsics(cam, data)\n\n\n\ndef scene_bbox(mesh_objects):\n    \"\"\"Calculate bounding box for all mesh objects.\"\"\"\n    bbox_min = Vector((float('inf'), float('inf'), float('inf')))\n    bbox_max = Vector((float('-inf'), float('-inf'), float('-inf')))\n    \n    for obj in mesh_objects:\n        for corner in obj.bound_box:\n            corner_world = obj.matrix_world @ Vector(corner)\n            bbox_min.x = min(bbox_min.x, corner_world.x)\n            bbox_min.y = min(bbox_min.y, corner_world.y)\n            bbox_min.z = min(bbox_min.z, corner_world.z)\n            bbox_max.x = max(bbox_max.x, corner_world.x)\n            bbox_max.y = max(bbox_max.y, corner_world.y)\n            bbox_max.z = max(bbox_max.z, corner_world.z)\n    \n    return bbox_min, bbox_max\n\n\ndef normalize_scene(mesh_objs, scene_scale=1.0, raise_to_ground=True,\nzoffset=0.05):\n    bbox_min, bbox_max = scene_bbox(mesh_objs)\n    scale = 1 / max(bbox_max - bbox_min)\n    for obj in mesh_objs:\n        obj.scale = obj.scale * scale * scene_scale\n    \n    # Apply scale to matrix_world.\n    bpy.context.view_layer.update()\n    \n    # Get updated bounding box after scaling\n    bbox_min, bbox_max = scene_bbox(mesh_objs)\n    \n    if raise_to_ground:\n        # Move object so its bottom is at z=0\n        offset = Vector((0, 0, -bbox_min.z+zoffset))\n    else:\n        # Center the scene at the origin\n        offset = -(bbox_min + bbox_max) / 2\n\n    print(\"Raise to ground?\", raise_to_ground, \"offset\", offset)\n    for obj in mesh_objs:\n        obj.matrix_world.translation += offset\n    bpy.ops.object.select_all(action=\"DESELECT\")\n\n    \n    # Verify final bounding box\n    final_min, final_max = scene_bbox(mesh_objs)\n    final_size = final_max - final_min\n    print(f\"  Final bounding box min: {final_min}\")\n    print(f\"  Final bounding box max: {final_max}\")\n    print(f\"  Final bounding box size: {final_size}\")\n    return mesh_objs\n\n\n\n\nbpy.ops.wm.open_mainfile(filepath=args.blend_file_path)\nscene = bpy.context.scene\npre_import_meshes = {obj for obj in scene.objects if obj.type == 'MESH'}\nbpy.ops.import_scene.gltf(filepath=args.obj)\n\nimported_meshes = [\n    obj for obj in scene.objects\n    if obj.type == 'MESH' and obj not in pre_import_meshes\n]\n\n\n\n# ---------------------------- DEBUG LOGGING -----------------------------\nnormalize_scene(imported_meshes, scene_scale=args.scene_scale, raise_to_ground=True)\n\n\n# Apply the fix to imported materials --------------------------------\nfor obj in imported_meshes:\n    for mat in obj.data.materials:\n        if mat:\n            _ensure_shadow_cast(mat)\n\n# ------------------------------------------------------------------\n# 3 – floor: ultra-glossy plane\n# ------------------------------------------------------------------\nplane = bpy.data.objects.get(\"Plane\")\nif plane is None:\n    raise RuntimeError(\"No object named 'Plane' found!\")\n\nplane.cycles.is_shadow_catcher = True          # Cycles only\n# plane.cycles.is_shadow_catcher = False\n## delete the plane\nif args.transparent:\n    bpy.data.objects.remove(plane, do_unlink=True)\n\n\n\n\n# BG_COLOR = (0.878, 0.498, 0.867, 1.0)\n# BG_COLOR = (1.0, 1.0, 1.0, 1.0) ## color that the camera actually seees\n# rgba(245,245,245,255)\n# BG_COLOR = parse_color(\"#f5f5f5\")\n# # BG_COLOR = parse_color(\"#154c79\")\n\n\n\n# ## color for environment lighting\n# # LIGHT_BG_COLOR = (1.0, 1.0, 1.0, 1.0)                # GI colour (keep white)\n# LIGHT_BG_COLOR = parse_color(\"#f5f5f5\")\n# LIGHT_BG_STR   = 1.0                                 # world-light strength\n\n# world           = bpy.context.scene.world\n# world.use_nodes = True\n# ntree           = world.node_tree\n# ntree.nodes.clear()\n\n# # nodes\n# bg_visible = ntree.nodes.new(\"ShaderNodeBackground\")\n# bg_visible.location = (-200,  50)\n# bg_visible.inputs[\"Color\"].default_value    = BG_COLOR\n# bg_visible.inputs[\"Strength\"].default_value = 1.0\n\n# bg_light = ntree.nodes.new(\"ShaderNodeBackground\")\n# bg_light.location = (-200, -150)\n# bg_light.inputs[\"Color\"].default_value    = LIGHT_BG_COLOR\n# bg_light.inputs[\"Strength\"].default_value = LIGHT_BG_STR\n\n# path = ntree.nodes.new(\"ShaderNodeLightPath\")\n# path.location = (-400, -50)\n\n# mix = ntree.nodes.new(\"ShaderNodeMixShader\")\n# mix.location = (50, -50)\n\n# out = ntree.nodes.new(\"ShaderNodeOutputWorld\")\n# out.location = (250, -50)\n\n# # links\n# ntree.links.new(path.outputs[\"Is Camera Ray\"], mix.inputs[\"Fac\"])\n# ntree.links.new(bg_visible.outputs[\"Background\"], mix.inputs[2])\n# ntree.links.new(bg_light.outputs[\"Background\"],  mix.inputs[1])\n# ntree.links.new(mix.outputs[\"Shader\"],           out.inputs[\"Surface\"])\n\n\n\n\n## NOTE: new for render_gs\ntf_json  = transforms_json(args.obj_id, args.data_dir)\nzraise = 0.5\n# Camera\ncam = bpy.context.scene.camera\nprint(\"Active camera\", cam)\nif args.camera_id is not None:\n    apply_camera(cam, tf_json, args.camera_id)\n    cam.matrix_world.translation.z += zraise\n\nif args.focal_length is not None:\n    cam.data.lens_unit = 'MILLIMETERS'\n    cam.data.lens = args.focal_length\n    print(f\"Set camera focal length to {args.focal_length}mm\")\n\n\n\n\npath = os.path.abspath(args.output_folder)\ni_pos = 0\n\n# Output settings\nscene = bpy.context.scene\nrender = bpy.context.scene.render\nscene.render.image_settings.file_format = 'PNG'\n# scene.render.filepath = \"//test_render_output\"\nbpy.context.scene.render.filepath = f'{path}/{str(i_pos).zfill(3)}.png'\nscene.render.engine = 'CYCLES'\nscene.cycles.device = \"GPU\"\n# scene.cycles.samples = 16\nscene.cycles.samples = 32\n# render.resolution_x = args.resolution\n# render.resolution_y = args.resolution\n\n## 16:9 aspect ratio for ours image\n# render.resolution_y = 512\n# render.resolution_x = int(render.resolution_y * (16 / 9))\n\n# scene.render.resolution_percentage = 100\n\n## NOTE: new for render_gs for rendering the baseline\nscene.render.resolution_x = scene.render.resolution_y = 512\n\n\n## COLOR MANAGEMENT\nscene.world.use_nodes = True\n# scene.view_settings.view_transform = 'Standard'\n# scene.view_settings.look = 'None'\n## NOTE: new for render_gs\nscene.view_settings.view_transform = 'Filmic'\nscene.view_settings.look = 'Very High Contrast'\nscene.render.film_transparent = args.transparent\n# world.node_tree.nodes[\"Background\"].inputs[\"Color\"].default_value = (1,1,1,1)\n\ndef deg_to_rad(deg):\n    return deg * math.pi / 180\n\n# shutil.rmtree(path, ignore_errors=True)   # recursively delete\nif args.rotate_video:\n    num_frames = args.views if args.views is not None else 120\n\n    # Create an empty at the origin to act as rotation pivot\n    bpy.ops.object.empty_add(type='PLAIN_AXES', location=(0.0, 0.0, 0.0))\n    pivot = bpy.context.active_object\n\n    # Parent the camera to this pivot so rotating the pivot rotates the camera\n    cam.parent = pivot\n\n\n    ## mirror the logic in `get_synthetic_viz_paper_rotate.py`\n    rotate_around = 60 \n    rotate_around = rotate_around / num_frames\n\n    for i in range(num_frames):\n        scene.render.filepath = f'{path}/{i:03d}.png'\n        # if os.path.exists(scene.render.filepath):\n        #     print(f\"File {scene.render.filepath} already exists, skipping\")\n        #     continue\n\n        angle_deg = rotate_around * i\n        print(\"angle_deg\", angle_deg)\n        angle_rad = deg_to_rad(angle_deg)\n        # angle_rad = (i / num_frames) * 2 * math.pi  # full 360°\n        pivot.rotation_euler[2] = angle_rad         # rotate around Z-axis\n        bpy.context.view_layer.update()\n\n        bpy.ops.render.render(write_still=True)\nelse:\n    bpy.ops.render.render(write_still=True)\n\n\n"
  },
  {
    "path": "pixie/blender/render_gs.py",
    "content": "from __future__ import annotations\nimport argparse, json, os, sys, math\nfrom pathlib import Path\nimport bpy\nfrom mathutils import Matrix, Vector\nimport subprocess\nimport socket\nfrom statistics import mean\n\n\n\ndef enable_cuda_devices():\n    prefs = bpy.context.preferences\n    cprefs = prefs.addons['cycles'].preferences\n    cprefs.get_devices()\n\n    # Attempt to set GPU device types if available\n    for compute_device_type in ('CUDA', 'OPENCL', 'NONE'):\n        try:\n            cprefs.compute_device_type = compute_device_type\n            print(\"Compute device selected: {0}\".format(compute_device_type))\n            break\n        except TypeError:\n            pass\n\n    # Any CUDA/OPENCL devices?\n    acceleratedTypes = ['CUDA', 'OPENCL']\n    accelerated = any(device.type in acceleratedTypes for device in cprefs.devices)\n    print('Accelerated render = {0}'.format(accelerated))\n\n    # If we have CUDA/OPENCL devices, enable only them, otherwise enable\n    # all devices (assumed to be CPU)\n    print(cprefs.devices)\n    for device in cprefs.devices:\n        device.use = not accelerated or device.type in acceleratedTypes\n        print('Device enabled ({type}) = {enabled}'.format(type=device.type, enabled=device.use))\n\n    return accelerated\n\nenable_cuda_devices()\n\n\n\n\n\ndef load_json(path: Path):\n    with open(path, \"r\") as f:\n        return json.load(f)\n\n\n\n\n# ───────────────────────────── CLI ──────────────────────────────\ndef parse_args() -> argparse.Namespace:\n    p = argparse.ArgumentParser()\n    p.add_argument(\"--obj_id\",   type=str, required=True)\n    p.add_argument(\"--frame_id\", type=int, required=False, default=None,\n                   help=\"If omitted, all frames in the ply_files folder will be rendered and combined into a video.\")\n    p.add_argument(\"--ply_dir\", type=str, required=True,\n                   help=\"Directory containing the ply files\")\n\n    # Original flag (name & default kept intact)\n    p.add_argument(\"--blend_file_path\", \"--blend\", dest=\"blend\",\n                   required=True,\n                   help=\"Path to the base .blend scene\")\n\n    p.add_argument(\"--transparent\", action=\"store_true\")\n    p.add_argument(\"--camera_id\", type=int, default=None,\n                   help=\"Index in transforms.json (0-based)\")\n    # ───────────── Object positioning & orientation ──────────────\n    # Initial translation (XYZ). After import, the object is first rotated, then\n    # shifted in the X and Y directions to this target location, and finally\n    # dropped so that its lowest point sits exactly at the requested Z value.\n    p.add_argument(\"--init_xyz\", nargs=3, type=float, default=(0.0, 0.0, 0.0),\n                   metavar=(\"X\", \"Y\", \"Z\"),\n                   help=\"Initial [x y z] translation of the object before grounding (default: 0 0 0)\")\n\n    # User-specified Euler rotation (XYZ, in DEGREES) applied to the object\n    # right after import.  Internally converted to radians.\n    p.add_argument(\"--xyz_rotation\", nargs=3, type=float, default=(0.0, 0.0, 0.0),\n                   metavar=(\"RX\", \"RY\", \"RZ\"),\n                   help=\"Euler XYZ rotation IN DEGREES to apply to the object (default: 0 0 0)\")\n    p.add_argument(\"--output_dir\", type=str, required=True,\n                   help=\"Output directory for rendered images\")\n    p.add_argument(\"--data_dir\", type=str, required=True,\n                   help=\"Data directory containing transforms.json\")\n    p.add_argument(\"--place_on_ground\", action=\"store_true\",\n                   help=\"Whether to automatically place object on ground\")\n    p.add_argument(\"--blender_gs_addon_path\", type=str, required=True,\n                   help=\"Path to the Gaussian Splatting Blender addon zip file\")\n    p.add_argument(\"--overwrite\", action=\"store_true\",\n                   help=\"Overwrite existing frames\")\n\n    # Optional solid background colour (0-1 floats).  Provide 3 numbers (RGB) or\n    # 4 numbers (RGBA).  If omitted, the background from the .blend file is\n    # left untouched.\n    p.add_argument(\"--bg_color\", nargs=\"*\", type=float, default=None,\n                   help=\"Optional RGB(A) background colour (0-1 floats). \"\n                        \"Give 3 or 4 values; omit flag to keep the scene default.\")\n\n    # Camera orbit: degrees of rotation (around world Z) applied *per frame* \n    # relative to the camera orientation defined by transforms.json (or the\n    # default scene camera).  The camera orbits around an empty named\n    # \"dolly_focus\" that must exist in the .blend file.\n    p.add_argument(\"--rotate_around\", type=float, default=None,\n                   help=\"Degrees of orbit around 'dolly_focus' per frame. \"\n                        \"E.g. 10 rotates the camera 10 degrees each frame, for a 36-frame full 360°.\")\n    p.add_argument(\"--frame_offset\", type=int, default=0,\n                   help=\"Offset the frame index by this amount. \"\n                        \"E.g. 1 shifts the frame index by 1, so the render will use frame 1 instead of 0.\")\n    \n    # ───────────── Render quality settings ─────────────\n    p.add_argument(\"--resolution_x\", type=int, default=None,\n                   help=\"Render resolution X (width). If omitted, uses scene default.\")\n    p.add_argument(\"--resolution_y\", type=int, default=None,\n                   help=\"Render resolution Y (height). If omitted, uses scene default.\")\n    p.add_argument(\"--cycles_samples\", type=int, default=None,\n                   help=\"Number of Cycles render samples. If omitted, uses scene default.\")\n\n    p.add_argument(\"--num_renders\", type=int, default=None,\n                   help=\"Number of renders to do. If omitted, uses scene default.\")\n    p.add_argument(\"--start_frame\", type=int, default=0,\n                   help=\"Start frame to render. If omitted, uses scene default.\")\n    p.add_argument(\"--is_dropping\", action=\"store_true\",\n                   help=\"Whether to drop the object on the ground. If omitted, uses scene default.\")\n    # Debugging: optionally save a .blend snapshot per frame\n    p.add_argument(\"--save_blend\", action=\"store_true\",\n                   help=\"Save a .blend file (same name as output PNG) for each rendered frame.\")\n    p.add_argument(\"--focal_length_ratio\", type=float, default=None,\n                   help=\"Ratio of camera focal length to original focal length. \"\n                        \"E.g. 1.2 scales the focal length by 1.2x.\")\n    return p.parse_args(sys.argv[sys.argv.index(\"--\") + 1:])\n\n# ──────────────────────── Path helpers ─────────────────────────\ndef transforms_json(obj_id: str, data_dir: str) -> Path:\n    return Path(data_dir) / \"transforms.json\"\n\ndef output_png(obj_id: str, frame_id: int, output_folder: str) -> Path:\n    return Path(output_folder) / f\"frame_{frame_id:05d}.png\"\n\n# ─────────────────── Camera configuration ─────────────────────\ndef set_intrinsics(cam: bpy.types.Object, intr: dict):\n    camd = cam.data\n    camd.lens_unit = 'FOV'\n    camd.angle_x   = intr[\"camera_angle_x\"]\n    camd.angle_y   = intr[\"camera_angle_y\"]\n\n    # cx,cy shift → Blender shift_x/y  (±0.5 == half the image width/height)\n    w, h = intr[\"w\"], intr[\"h\"]\n    camd.shift_x =  (intr[\"cx\"] - 0.5 * w) / w\n    camd.shift_y = -(intr[\"cy\"] - 0.5 * h) / h  # y-axis is flipped\n\ndef set_extrinsics(cam: bpy.types.Object, mat4: list[list[float]]):\n    cam.matrix_world = Matrix(mat4)\n\ndef apply_camera(cam: bpy.types.Object, tf_path: Path, cam_id: int):\n    data = json.loads(tf_path.read_text())\n    frames = data[\"frames\"]\n    if not (0 <= cam_id < len(frames)):\n        raise IndexError(f\"camera_id {cam_id} out of range 0..{len(frames)-1}\")\n    set_extrinsics(cam, frames[cam_id][\"transform_matrix\"])\n    set_intrinsics(cam, data)\n\n# ───────────────────── Misc. small utilities ───────────────────\ndef shift_xyz(obj, xyz_target=(0.0, 0.0, 0.0)):\n    obj.location = Vector((xyz_target[0], xyz_target[1], xyz_target[2]))\n    return obj\n\ndef place_on_ground(obj, xy_target=(0.0, 0.0), ground_z=0.0, clearance=0.0):\n    \"\"\"Drop object so its lowest point is at ground_z (plus clearance).\"\"\"\n    bpy.context.view_layer.update()\n    zmin = min((obj.matrix_world @ Vector(c)).z for c in obj.bound_box)\n    # obj.location = Vector((xy_target[0], xy_target[1],\n    #                        obj.location.z + (ground_z + clearance - zmin)))\n    zraise = ground_z + clearance - zmin\n    xyz = (xy_target[0], xy_target[1], zraise)\n    obj = shift_xyz(obj, xyz)\n    return zraise \n\n# ─────────────────── Batch & video utilities ──────────────────\ndef compile_video(img_dir: Path, fps: int = 10, out_name: str = \"render.mp4\"):\n    \"\"\"Stitch PNG frames in `img_dir` into an MP4 using ffmpeg.\"\"\"\n    video_path = img_dir / out_name\n    pattern    = img_dir / \"frame_%05d.png\"\n    cmd = [\n        \"ffmpeg\", \"-y\",               # overwrite without prompt\n        # \"/bin/ffmpeg\", \"-y\",               # overwrite without prompt\n        \"-framerate\", str(fps),       # input FPS\n        \"-i\", str(pattern),           # input pattern\n        \"-c:v\", \"libx264\",           # video codec\n        \"-pix_fmt\", \"yuv420p\",       # widely-compatible pixel format\n        str(video_path)\n    ]\n    print(\"🎞️  Creating video:\", \" \".join(cmd))\n    try:\n        subprocess.run(cmd, check=True)\n        print(f\"✅ Video saved to {video_path}\")\n    except FileNotFoundError:\n        print(\"⚠️  ffmpeg not found; skipping video compilation.\")\n\n\ndef _ensure_gaussian_splat_addon(zip_path: str):\n    \"\"\"Ensure the Gaussian-Splatting Blender add-on is enabled.\n\n    Tries to enable an already installed add-on first to avoid race conditions\n    when many batch jobs start concurrently.  If enabling fails, attempts to\n    (re)install from *zip_path* and enable again.  Should be safe to call\n    repeatedly.\n    \"\"\"\n    import addon_utils\n\n    try:\n        # Try to enable if installed but not enabled\n        bpy.ops.preferences.addon_enable(module=\"blender-addon\")\n        return                                    # success\n    except Exception as enable_exc:\n        print(f\"⚠️  Could not enable existing 'blender-addon': {enable_exc}\\n→ Attempting reinstall…\")\n\n    # Remove any broken install to start clean\n    try:\n        bpy.ops.preferences.addon_remove(module=\"blender-addon\")\n    except Exception:\n        pass  # OK if it wasn't there\n\n    # (Re)install from ZIP and enable\n    try:\n        bpy.ops.preferences.addon_install(filepath=zip_path, overwrite=True)\n        bpy.ops.preferences.addon_enable(module=\"blender-addon\")\n        print(\"✅ 'blender-addon' installed & enabled successfully.\")\n    except Exception as install_exc:\n        print(f\"❌ Failed to install/enable 'blender-addon': {install_exc}\")\n        raise\n\ndef _orbit_camera(cam: bpy.types.Object, angle_deg_per_frame: float, frame_id: int):\n    \"\"\"Orbit *cam* around Z-axis by *angle_deg_per_frame* × *frame_id*.\n\n    If an object named 'dolly_focus' exists, orbit around its location using\n    explicit vector math (keeps camera looking at the focus).  Otherwise, fall\n    back to the pivot-parent method: create/reuse an empty named\n    '_orbit_pivot' at the world origin, parent the camera to it (keeping\n    transforms), and rotate the pivot.\n    \"\"\"\n    angle_rad = math.radians(angle_deg_per_frame * frame_id)\n\n    focus = bpy.data.objects.get(\"dolly_focus\")\n    if focus is not None:\n        # ---------------- Focus-based orbit (existing behaviour) -------------\n        cam_vec = cam.matrix_world.translation - focus.location\n        new_vec = Matrix.Rotation(angle_rad, 4, 'Z') @ cam_vec\n        cam.matrix_world.translation = focus.location + new_vec\n\n        # Make camera look at the focus point\n        dir_vec = (focus.location - cam.matrix_world.translation).normalized()\n        cam.rotation_mode = 'XYZ'\n        cam.rotation_euler = dir_vec.to_track_quat('-Z', 'Y').to_euler()\n        print(f\"⭐ Orbit via 'dolly_focus'   angle={angle_deg_per_frame*frame_id:.2f}°  cam={cam.location}\")\n    else:\n        # ---------------- Pivot-parent orbit (render_blender_qual_paper style)\n        print(\"⭐ Initial camera location\", cam.location)\n        pivot = bpy.data.objects.get(\"_orbit_pivot\")\n        if pivot is None:\n            # cam_height = cam.location.z\n            # bpy.ops.object.empty_add(type='PLAIN_AXES', location=(0.0, 0.0, cam_height))\n            bpy.ops.object.empty_add(type='PLAIN_AXES', location=(0.0, 0.0, 0.0))\n            pivot = bpy.context.active_object\n            pivot.name = \"_orbit_pivot\"\n            print(\"⭐ Created _orbit_pivot empty at origin for camera orbit\")\n\n        # Parent camera once (keeping its current world transform)\n        # world_mtx = cam.matrix_world.copy()\n        # cam.parent = pivot\n        # cam.matrix_parent_inverse = pivot.matrix_world.inverted()\n        # cam.matrix_world = world_mtx\n\n        print(\"created pivot at location\", pivot.location)\n        cam.parent = pivot\n\n        pivot.rotation_mode = 'XYZ'\n        pivot.rotation_euler[2] = angle_rad  # rotate around Z-axis\n        print(f\"⭐ Orbit via pivot         angle={angle_deg_per_frame*frame_id:.2f}°  cam={cam.location}\")\n\n\ndef _srgb_to_linear(c: float) -> float:\n    \"\"\"Convert a single channel from sRGB (display) to linear space (Blender).\"\"\"\n    if c <= 0.04045:\n        return c / 12.92\n    return ((c + 0.055) / 1.055) ** 2.4\n\n\ndef parse_color(s: str | tuple):\n    \"\"\"Return an (R,G,B,A) tuple in *linear* space ready for Blender.\n\n    Accepts either an existing 4-tuple (assumed already linear) or a hex string\n    like \"#f5f5f5\" or \"#fff\" (sRGB).  Hex input is converted to linear using\n    the standard sRGB→linear transform so that the *saved PNG* matches the\n    intended display colour exactly.\n    \"\"\"\n    if isinstance(s, tuple):\n        # Already linear RGBA\n        return s if len(s) == 4 else (*s, 1.0)\n\n    s = s.lstrip('#')\n    if len(s) == 3:                         # short form e.g. fff\n        s = ''.join(c * 2 for c in s)\n    if len(s) != 6:\n        raise ValueError(\"Colour must be #rgb or #rrggbb\")\n\n    # Convert 0–255 integers → 0–1 floats (sRGB)\n    sr, sg, sb = (int(s[i:i + 2], 16) / 255.0 for i in (0, 2, 4))\n\n    # sRGB → linear so Blender writes the same sRGB after colour-management\n    lr, lg, lb = map(_srgb_to_linear, (sr, sg, sb))\n    return (lr, lg, lb, 1.0)\n\n\ndef _debug_print_obj_bounds(obj):\n    \"\"\"Print world-space bounding box and centre of *obj* for debugging.\"\"\"\n    import mathutils\n    world_corners = [obj.matrix_world @ mathutils.Vector(c) for c in obj.bound_box]\n    xs, ys, zs = zip(*[(v.x, v.y, v.z) for v in world_corners])\n    centre = mathutils.Vector((mean(xs), mean(ys), mean(zs)))\n    mins   = (min(xs), min(ys), min(zs))\n    maxs   = (max(xs), max(ys), max(zs))\n    print(f\"🔍 OBJ BBOX   min={mins}  max={maxs}\")\n    print(f\"🔍 OBJ CENTRE {centre}\")\n\ndef render_single_frame(args: argparse.Namespace, *, load_blend: bool = True):\n    \"\"\"Render a single frame based on the already-parsed `args`.\n\n    Parameters\n    ----------\n    load_blend : bool, optional\n        If True, reload the base .blend file before rendering.  For batch\n        rendering of many frames this can be set to False after the first\n        frame to avoid the expensive scene reload, drastically speeding up\n        subsequent renders.\n    \"\"\"\n\n\n    # BG_COLOR = parse_color(\"#f5f5f5\")\n    # LIGHT_BG_COLOR = parse_color(\"#f5f5f5\")\n    # LIGHT_BG_STR   = 1.0                                 # world-light strength\n    # world           = bpy.context.scene.world\n    # world.use_nodes = True\n    # ntree           = world.node_tree\n    # ntree.nodes.clear()\n\n    # # nodes\n    # bg_visible = ntree.nodes.new(\"ShaderNodeBackground\")\n    # bg_visible.location = (-200,  50)\n    # bg_visible.inputs[\"Color\"].default_value    = BG_COLOR\n    # bg_visible.inputs[\"Strength\"].default_value = 1.0\n\n    # bg_light = ntree.nodes.new(\"ShaderNodeBackground\")\n    # bg_light.location = (-200, -150)\n    # bg_light.inputs[\"Color\"].default_value    = LIGHT_BG_COLOR\n    # bg_light.inputs[\"Strength\"].default_value = LIGHT_BG_STR\n\n    # path = ntree.nodes.new(\"ShaderNodeLightPath\")\n    # path.location = (-400, -50)\n\n    # mix = ntree.nodes.new(\"ShaderNodeMixShader\")\n    # mix.location = (50, -50)\n\n    # out = ntree.nodes.new(\"ShaderNodeOutputWorld\")\n    # out.location = (250, -50)\n\n    # # links\n    # ntree.links.new(path.outputs[\"Is Camera Ray\"], mix.inputs[\"Fac\"])\n    # ntree.links.new(bg_visible.outputs[\"Background\"], mix.inputs[2])\n    # ntree.links.new(bg_light.outputs[\"Background\"],  mix.inputs[1])\n    # ntree.links.new(mix.outputs[\"Shader\"],           out.inputs[\"Surface\"])\n\n\n\n    # Resolve all paths\n    ply_dir = Path(args.ply_dir)\n    assert ply_dir.exists(), f\"PLY directory does not exist: {ply_dir}\"\n    ply = ply_dir / f\"frame_{args.frame_id:05d}.ply\"\n    assert ply.exists(), f\"PLY file does not exist: {ply}\"\n    tf_json  = transforms_json(args.obj_id, args.data_dir)\n    out_png  = output_png(args.obj_id, args.frame_id, args.output_dir)\n    out_png.parent.mkdir(parents=True, exist_ok=True)\n\n    # Skip if frame already rendered\n    if out_png.exists() and not args.overwrite:\n        print(f\"⏭️  Skipping frame {args.frame_id}: {out_png.name} already exists.\")\n        return\n\n    # Load clean .blend (only if requested) -----------------------------------\n    if load_blend:\n        bpy.ops.wm.open_mainfile(filepath=args.blend)\n        # Ensure any key-framed motion is evaluated for this frame.\n        bpy.context.scene.frame_set(args.frame_id + args.frame_offset)\n\n        # Ensure the add-on providing the import operator is active\n        _ensure_gaussian_splat_addon(args.blender_gs_addon_path)\n    else:\n        # Scene was opened previously; just jump to the correct frame.\n        bpy.context.scene.frame_set(args.frame_id + args.frame_offset)\n\n    # ------------------------------------------------------------------------\n    # Import Gaussian-Splat for this frame\n    bpy.ops.object.import_gaussian_splatting(filepath=str(ply.resolve()))\n    gs_obj = bpy.context.selected_objects[-1]\n\n    gs_obj.rotation_mode  = 'XYZ'              # make sure we're in XYZ Euler\n    gs_obj.rotation_euler = tuple(math.radians(a) for a in args.xyz_rotation)\n\n    print(\"args.init_xyz\", args.init_xyz)\n    print(\"args.xyz_rotation\", args.xyz_rotation)\n    print(\"args.place_on_ground\", args.place_on_ground)\n    \n    if args.place_on_ground:\n        # Drop the object so its lowest point is exactly at init_xyz[2]\n        zraise = place_on_ground(\n            gs_obj,\n            xy_target=(args.init_xyz[0], args.init_xyz[1]),\n            ground_z=args.init_xyz[2],\n            clearance=0.0,\n        )\n        print(f\"frame {args.frame_id} zraise: {zraise}\")\n    else:\n        # Manual positioning - use init_xyz directly\n        zraise = args.init_xyz[2] if any(args.init_xyz) else 1.5\n        shift_xyz(gs_obj, (args.init_xyz[0], args.init_xyz[1], zraise))\n\n    print(f\"frame {args.frame_id} zraise: {zraise}\")\n\n    # Full-splats rendering (disable point-cloud preview)\n    gn_nodes  = gs_obj.modifiers[\"Geometry Nodes\"].node_group.nodes\n    bool_node = gn_nodes.get(\"Boolean\")\n    if bool_node:\n        bool_node.boolean = False  # full-splat mode\n\n    # Ensure 100 % of the splats are displayed (quality over speed)\n    rv_node = gn_nodes.get(\"Random Value\")\n    def_val = rv_node.inputs[\"Probability\"].default_value\n    if rv_node and rv_node.inputs.get(\"Probability\") is not None:\n        rv_node.inputs[\"Probability\"].default_value = 1.0\n\n\n    _debug_print_obj_bounds(gs_obj)\n    # Camera\n    cam = bpy.context.scene.camera\n    if args.camera_id is not None:\n        apply_camera(cam, tf_json, args.camera_id)\n        cam.matrix_world.translation.z += zraise\n\n    \n    if args.focal_length_ratio is not None:\n        cam.data.lens_unit = 'MILLIMETERS'\n        print(f\"current focal length: {cam.data.lens}mm. Setting by ratio {args.focal_length_ratio}\")\n        cam.data.lens = args.focal_length_ratio * cam.data.lens\n        print(f\"Set camera focal length to {args.focal_length_ratio * cam.data.lens}mm\")\n\n\n    # ───────────── Optional camera orbit around \"dolly_focus\" ─────────────\n    if args.rotate_around is not None:\n        _orbit_camera(cam, args.rotate_around, args.frame_id)\n\n    # Render settings\n    scn = bpy.context.scene\n    ## use GPU for rendering\n    bpy.context.scene.render.engine = 'CYCLES'\n    bpy.context.scene.cycles.device = 'GPU'\n    # bpy.context.scene.cycles.device = 'CPU'\n    \n    # Apply custom render settings if provided\n    if args.cycles_samples is not None:\n        scn.cycles.samples = args.cycles_samples\n    else:\n        scn.cycles.samples = 16\n    # scn.cycles.samples = 160\n    # scn.cycles.samples = 4096\n    \n    if args.resolution_x is not None:\n        scn.render.resolution_x = args.resolution_x\n    else:\n        scn.render.resolution_x = 1280\n    if args.resolution_y is not None:\n        scn.render.resolution_y = args.resolution_y\n    else:\n        scn.render.resolution_y = 720\n\n    scn.render.film_transparent = args.transparent\n    scn.render.resolution_x = scn.render.resolution_y = 512\n    scn.view_settings.view_transform = 'Filmic'\n    scn.view_settings.look = 'Very High Contrast'\n    # scn.view_settings.view_transform = 'Standard'\n    # scn.view_settings.look = 'None'\n    scn.render.filepath = str(out_png)\n\n    # ───────────── Optional background colour via Spot light ─────────────\n    if args.bg_color:\n        bg_col = tuple(args.bg_color)\n        if len(bg_col) == 4:\n            rgb = bg_col[:3]\n        elif len(bg_col) == 3:\n            rgb = bg_col\n        else:\n            raise ValueError(\"--bg_color expects 3 or 4 floats (RGB[A]).\")\n\n        # world           = bpy.context.scene.world\n        # world.use_nodes = True\n        # ntree           = world.node_tree\n        # ntree.nodes.clear()\n\n        # # Camera-visible background\n        # bg_visible = ntree.nodes.new(\"ShaderNodeBackground\")\n        # bg_visible.location = (-200,  50)\n        # bg_visible.inputs[\"Color\"].default_value    = bg_col\n        # bg_visible.inputs[\"Strength\"].default_value = 1.0\n\n        # # Lighting-only background (white)\n        # bg_light = ntree.nodes.new(\"ShaderNodeBackground\")\n        # bg_light.location = (-200, -150)\n        # bg_light.inputs[\"Color\"].default_value    = (1.0, 1.0, 1.0, 1.0)\n        # bg_light.inputs[\"Strength\"].default_value = 1.0\n\n        # path = ntree.nodes.new(\"ShaderNodeLightPath\")\n        # path.location = (-400, -50)\n\n        # mix  = ntree.nodes.new(\"ShaderNodeMixShader\")\n        # mix.location = (50, -50)\n\n        # out = ntree.nodes.new(\"ShaderNodeOutputWorld\")\n        # out.location = (250, -50)\n\n        # # Link nodes to replicate animate_tree.py set-up\n        # ntree.links.new(path.outputs[\"Is Camera Ray\"], mix.inputs[\"Fac\"])\n        # ntree.links.new(bg_visible.outputs[\"Background\"], mix.inputs[2])\n        # ntree.links.new(bg_light.outputs[\"Background\"],  mix.inputs[1])\n        # ntree.links.new(mix.outputs[\"Shader\"],           out.inputs[\"Surface\"])\n\n\n        spot = bpy.data.objects.get(\"Spot\")\n        if spot and hasattr(spot.data, \"color\"):\n            spot.data.color = rgb\n        else:\n            print(\"⚠️  --bg_color given but no light named 'Spot' found with color attribute; skipping.\")\n\n        ## crank the power up by 10x\n        spot.data.energy = 2500\n\n    # Go!\n    bpy.ops.render.render(write_still=True)\n    print(f\"✅ Saved PNG to {scn.render.filepath}\")\n\n    # Optionally write a .blend snapshot for debugging before cleaning up.\n    if args.save_blend:\n        blend_path = out_png.with_suffix(\".blend\")\n        bpy.ops.wm.save_as_mainfile(filepath=str(blend_path))\n        print(f\"💾 Saved .blend snapshot to {blend_path}\")\n\n    # Clean up the imported GS object to free memory before next frame.\n    bpy.data.objects.remove(gs_obj, do_unlink=True)\n\n# ───────────────────────── Main routine ───────────────────────\ndef main():\n    args = parse_args()\n\n    # If a specific frame is requested, render just that one.\n    if args.frame_id is not None:\n        render_single_frame(args)\n        return\n\n    # ───── Batch mode: find all frame_*.ply files and render them ─────\n    ply_dir = Path(args.ply_dir)\n    assert ply_dir.exists(), f\"Could not locate ply_files directory at {ply_dir}\"\n\n    frame_ids = sorted(int(p.stem.split(\"_\")[1]) for p in ply_dir.glob(\"frame_*.ply\"))\n    if not frame_ids:\n        print(f\"Error: No frame_*.ply files found in {ply_dir}. Aborting. Did you run `pipeline.py` \n        with `physics.save_ply=true`? \n        Alternatively, comment out `blender_gs` in `output_rendering/default.yaml`\")\n        sys.exit(1)\n    ## HACK: to ensure rotation is consistent over different videos of different frames\n    ## assume that args.rotate_around is the TOTAL over all frames\n    if args.rotate_around is not None:\n        args.rotate_around = args.rotate_around / len(frame_ids)\n        print(f\"args.rotate_around: {args.rotate_around}\")\n    if args.num_renders is not None:\n        frame_ids = frame_ids[args.start_frame:args.start_frame+args.num_renders]\n\n    print(f\"📄 Found {len(frame_ids)} frames to render: {frame_ids[0]} … {frame_ids[-1]}\")\n\n    for idx, fid in enumerate(frame_ids):\n        args.frame_id = fid\n        print(f\"[...] Rendering frame {fid} / {frame_ids[-1]}\")\n        render_single_frame(args, load_blend=True)\n\n# -------------------------------------------------------------------------\n# __main__ guard\n# -------------------------------------------------------------------------\n\nif __name__ == \"__main__\":\n    main()\n\n\n"
  },
  {
    "path": "pixie/metrics.py",
    "content": "import os\nimport numpy as np\nfrom typing import List, Optional\nfrom omegaconf import DictConfig\nfrom .utils import load_json\nfrom typing import Dict\nfrom collections import defaultdict\nimport math\nfrom .utils import save_json, get_obj_class_for_id\nimport pandas as pd\n\n\n\ndef get_obj_ids_for_class(obj_class: str, cfg: DictConfig, only_valid: bool = True) -> List[str]:\n    \"\"\"Get all object IDs for a given object class.\n    \n    Args:\n        obj_class: The object class to search for\n        cfg: Configuration containing metadata path\n        only_valid: If True, only return objects where vlm_filtering.is_appropriate is True\n    \"\"\"\n    if cfg and cfg.paths.obj_metadata_path:\n        # Handle relative paths by making them absolute relative to the project root\n        metadata_path = cfg.paths.obj_metadata_path\n        obj_metadata = load_json(metadata_path)\n        obj_ids = []\n        \n        # Iterate through all objects and find those matching the class\n        for obj_id, metadata in obj_metadata.items():\n            if metadata.get(\"obj_class\", \"UNKNOWN\") == obj_class:\n                # If only_valid is True, check vlm_filtering.is_appropriate\n                if only_valid:\n                    vlm_filtering = metadata.get(\"vlm_filtering\", {})\n                    if vlm_filtering.get(\"is_appropriate\", False):\n                        obj_ids.append(obj_id)\n                else:\n                    obj_ids.append(obj_id)\n        \n        return obj_ids\n    \n    return []\n\n\ndef aggregate_material_statistics(cfg: DictConfig, obj_ids: List[str]) -> dict:\n    \"\"\"Aggregate material statistics from VLM results across objects.\"\"\"\n    stats = {'E': [], 'density': [], 'nu': [], 'parts': [], 'material_ids': [], 'obj_ids': []}\n    \n    for obj_id in obj_ids:\n        base_dir = os.path.join(cfg.paths.vlm_seg_mat_sample_results_dir, obj_id)\n        sample_id = f\"sample_{cfg.physics.sample_id}\"\n        chosen_path = os.path.join(base_dir, sample_id, \"chosen_vlm_results.json\")\n        \n        if os.path.exists(chosen_path):\n            \n            vlm_results = load_json(chosen_path)\n            material_dict = vlm_results['material_dict']\n            \n            for part_name, props in material_dict.items():\n                for key in ['E', 'density', 'nu']:\n                    if key in props:\n                        stats[key].append(props[key])\n                \n                if 'material_id' in props:\n                    stats['material_ids'].append(props['material_id'])\n                \n                stats['parts'].append(part_name)\n                stats['obj_ids'].append(obj_id)\n    \n    return stats\n\n\ndef remove_outliers_percentile(data: np.ndarray, lower: float = 5, upper: float = 95) -> np.ndarray:\n    \"\"\"Remove outliers using percentile bounds.\"\"\"\n    p_low, p_high = np.percentile(data, [lower, upper])\n    return data[(data >= p_low) & (data <= p_high)]\n\ndef clean_categorical(data: np.ndarray, min_freq: float = 0.1) -> np.ndarray:\n    \"\"\"Remove rare categorical values below min_freq percentage of total data.\n    default is 1%\"\"\"\n    unique, counts = np.unique(data, return_counts=True)\n    min_count = int(len(data) * min_freq)\n    valid_categories = unique[counts >= min_count]\n    return data[np.isin(data, valid_categories)]\n\n\ndef clean_continuous(data: np.ndarray, prop_type: str = 'E') -> np.ndarray:\n    \"\"\"Clean material property data with physical constraints + percentile filtering.\"\"\"\n    # Apply physical constraints first\n    if prop_type == 'E':  # Young's modulus\n        data = data[data > 0]  # Must be positive\n    elif prop_type == 'density':\n        data = data[data > 0]  # Must be positive  \n    elif prop_type == 'nu':  # Poisson's ratio\n        data = data[(data >= -1) & (data <= 0.5)]  # Physical bounds\n    \n    # Then apply percentile filtering to remove extreme outliers\n    return remove_outliers_percentile(data, lower=2.5, upper=97.5)\n\n\n# ============================================================================\n# Inference Metrics Functions\n# ============================================================================\n\n\nclass InferenceMetrics:\n    \"\"\"Container for tracking inference metrics.\"\"\"\n    def __init__(self):\n        self.seg_accuracies = []\n        self.cont_mse_values = []\n        self.density_mse_values = []\n        self.youngs_mse_values = []\n        self.poisson_mse_values = []\n        self.obj_metrics = {}\n        self.local_obj_ids = []\n    \n    def add_batch_metrics(self, seg_acc, cont_mse, density_mse, youngs_mse, poisson_mse):\n        \"\"\"Add batch-level metrics.\"\"\"\n        self.seg_accuracies.append(seg_acc)\n        self.cont_mse_values.append(cont_mse)\n        self.density_mse_values.append(density_mse)\n        self.youngs_mse_values.append(youngs_mse)\n        self.poisson_mse_values.append(poisson_mse)\n    \n    def add_sample_metrics(self, obj_id, metrics_dict):\n        \"\"\"Add sample-level metrics for an object.\"\"\"\n        if obj_id not in self.obj_metrics:\n            self.obj_metrics[obj_id] = defaultdict(list)\n        \n        for key, value in metrics_dict.items():\n            self.obj_metrics[obj_id][key].append(value)\n    \n    def gather_all_metrics(self, rank, world_size):\n        \"\"\"Gather metrics from all processes.\"\"\"\n        if world_size == 1:\n            return [self.seg_accuracies], [self.cont_mse_values], [self.density_mse_values], \\\n                   [self.youngs_mse_values], [self.poisson_mse_values], [self.local_obj_ids], \\\n                   [self.obj_metrics]\n        \n        import torch.distributed as dist\n        all_metrics = [None for _ in range(world_size)]\n        metrics_to_gather = [\n            self.seg_accuracies, self.cont_mse_values, self.density_mse_values,\n            self.youngs_mse_values, self.poisson_mse_values, self.local_obj_ids,\n            self.obj_metrics\n        ]\n        \n        gathered = []\n        for metric in metrics_to_gather:\n            all_values = [None for _ in range(world_size)]\n            dist.gather_object(metric, all_values if rank == 0 else None, dst=0)\n            gathered.append(all_values)\n        \n        return gathered\n\n\ndef save_metrics_file(output_dir, seg_ckpt, cont_ckpt, global_avgs, obj_avgs, \n                     merged_metrics, ci_low, ci_high, se, z, disp_label):\n    \"\"\"Save detailed metrics to JSON file.\"\"\"\n    # Calculate dispersions for all metrics\n    dispersions = {}\n    for metric in [\"cont_mse\", \"density_mse\", \"youngs_mse\", \"poisson_mse\"]:\n        values = [avg[metric] for avg in obj_avgs.values()]\n        if len(values) > 1:\n            if disp_label == \"SE\":\n                dispersions[metric] = float(np.std(values, ddof=1) / math.sqrt(len(values)))\n            else:\n                dispersions[metric] = float(np.std(values, ddof=0))\n        else:\n            dispersions[metric] = 0.0\n    \n    # Structure all metrics data\n    metrics_data = {\n        \"checkpoints\": {\n            \"segmentation\": seg_ckpt,\n            \"continuous\": cont_ckpt\n        },\n        \"summary\": {\n            \"total_objects\": len(obj_avgs),\n            \"dispersion_type\": disp_label,\n            \"segmentation_accuracy\": {\n                \"mean\": float(global_avgs['seg_acc']),\n                \"confidence_interval_90\": {\n                    \"low\": float(ci_low),\n                    \"high\": float(ci_high),\n                    \"margin\": float(z * se)\n                }\n            },\n            \"continuous_metrics\": {\n                \"overall\": {\n                    \"mean\": float(global_avgs['cont_mse']),\n                    \"dispersion\": dispersions['cont_mse']\n                },\n                \"density\": {\n                    \"mean\": float(global_avgs['density_mse']),\n                    \"dispersion\": dispersions['density_mse']\n                },\n                \"youngs_modulus\": {\n                    \"mean\": float(global_avgs['youngs_mse']),\n                    \"dispersion\": dispersions['youngs_mse']\n                },\n                \"poisson_ratio\": {\n                    \"mean\": float(global_avgs['poisson_mse']),\n                    \"dispersion\": dispersions['poisson_mse']\n                }\n            }\n        },\n        \"per_object_metrics\": obj_avgs,\n        \"per_object_raw_data\": {\n            oid: {\n                \"segmentation_accuracy\": {\n                    \"values\": metrics[\"seg_acc\"],\n                    \"mean\": sum(metrics[\"seg_acc\"]) / len(metrics[\"seg_acc\"]) if metrics[\"seg_acc\"] else 0.0\n                },\n                \"continuous_mse\": {\n                    \"values\": metrics[\"cont_mse\"],\n                    \"mean\": sum(metrics[\"cont_mse\"]) / len(metrics[\"cont_mse\"]) if metrics[\"cont_mse\"] else 0.0\n                }\n            }\n            for oid, metrics in merged_metrics.items()\n        }\n    }\n    \n    save_json(metrics_data, os.path.join(output_dir, \"metrics.json\"))\n\n\ndef generate_class_table(cfg, obj_averages, use_sem, disp_label, output_dir):\n    \"\"\"Generate per-class metrics table and save as JSON.\"\"\"\n    class_buckets = defaultdict(list)\n    for oid, metrics in obj_averages.items():\n        cls_name = get_obj_class_for_id(oid, cfg)\n        class_buckets[cls_name].append(metrics)\n    \n    # Structure the per-class data\n    class_metrics = {}\n    metric_keys = [\"seg_acc\", \"cont_mse\", \"density_mse\", \"youngs_mse\", \"poisson_mse\"]\n    \n    for cls, obj_list in class_buckets.items():\n        class_data = {\n            \"n_objects\": len(obj_list),\n            \"metrics\": {}\n        }\n        \n        for key in metric_keys:\n            values = [obj[key] for obj in obj_list if key in obj]\n            if not values:\n                class_data[\"metrics\"][key] = {\n                    \"mean\": 0.0,\n                    \"dispersion\": 0.0,\n                    \"dispersion_type\": \"CI_90\" if key == \"seg_acc\" else disp_label\n                }\n                continue\n                \n            mean = float(np.mean(values))\n            \n            if key == \"seg_acc\":\n                # 90% CI for proportion\n                n = len(values)\n                ci = float(1.645 * np.sqrt(mean * (1 - mean) / n)) if n > 0 else 0.0\n                class_data[\"metrics\"][key] = {\n                    \"mean\": mean,\n                    \"dispersion\": ci,\n                    \"dispersion_type\": \"CI_90\"\n                }\n            else:\n                # Standard error or std\n                if use_sem:\n                    disp = float(np.std(values, ddof=1) / np.sqrt(len(values))) if len(values) > 1 else 0.0\n                else:\n                    disp = float(np.std(values, ddof=0))\n                class_data[\"metrics\"][key] = {\n                    \"mean\": mean,\n                    \"dispersion\": disp,\n                    \"dispersion_type\": disp_label\n                }\n        \n        class_metrics[cls] = class_data\n    \n    # Add overall statistics\n    overall_data = {\n        \"n_objects\": len(obj_averages),\n        \"metrics\": {}\n    }\n    \n    for key in metric_keys:\n        values = [obj[key] for obj in obj_averages.values() if key in obj]\n        if values:\n            mean = float(np.mean(values))\n            if key == \"seg_acc\":\n                n = len(values)\n                ci = float(1.645 * np.sqrt(mean * (1 - mean) / n)) if n > 0 else 0.0\n                overall_data[\"metrics\"][key] = {\n                    \"mean\": mean,\n                    \"dispersion\": ci,\n                    \"dispersion_type\": \"CI_90\"\n                }\n            else:\n                if use_sem:\n                    disp = float(np.std(values, ddof=1) / np.sqrt(len(values))) if len(values) > 1 else 0.0\n                else:\n                    disp = float(np.std(values, ddof=0))\n                overall_data[\"metrics\"][key] = {\n                    \"mean\": mean,\n                    \"dispersion\": disp,\n                    \"dispersion_type\": disp_label\n                }\n        else:\n            overall_data[\"metrics\"][key] = {\n                \"mean\": 0.0,\n                \"dispersion\": 0.0,\n                \"dispersion_type\": \"CI_90\" if key == \"seg_acc\" else disp_label\n            }\n    \n    class_metrics[\"ALL\"] = overall_data\n    \n    # Save as JSON\n    save_json(class_metrics, os.path.join(output_dir, \"per_class_metrics.json\"))\n    \n    # Still print table for console output\n    rows = []\n    for cls, data in class_metrics.items():\n        row = {\"obj_class\": cls, \"n_objects\": data[\"n_objects\"]}\n        for key in metric_keys:\n            m = data[\"metrics\"][key]\n            row[key] = f\"{m['mean']:.4f} ± {m['dispersion']:.4f}\"\n        rows.append(row)\n    \n    df = pd.DataFrame(rows).sort_values(\"obj_class\")\n    print(f\"\\nPer-class metric breakdown [Dispersion: {disp_label}]\\n\")\n    with pd.option_context('display.max_rows', None, 'display.max_columns', None):\n        print(df.to_string(index=False))\n\n\ndef generate_metrics_report(cfg, all_metrics, output_dir, seg_checkpoint_path, cont_checkpoint_path,\n                          dispersion=\"sem\", print_table=True):\n    \"\"\"Generate and save comprehensive metrics report.\"\"\"\n    # Unpack metrics\n    (all_seg_acc, all_cont_mse, all_density_mse, all_youngs_mse, \n     all_poisson_mse, all_obj_ids, all_obj_metrics) = all_metrics\n    \n    # Flatten metrics\n    flat_metrics = {}\n    for name, metric_list in [\n        (\"seg_acc\", all_seg_acc),\n        (\"cont_mse\", all_cont_mse),\n        (\"density_mse\", all_density_mse),\n        (\"youngs_mse\", all_youngs_mse),\n        (\"poisson_mse\", all_poisson_mse)\n    ]:\n        flat_metrics[name] = [item for sublist in metric_list if sublist for item in sublist]\n    \n    # Merge per-object metrics\n    merged_obj_metrics = {}\n    for obj_dict in all_obj_metrics:\n        if obj_dict is None:\n            continue\n        for oid, metrics in obj_dict.items():\n            if oid not in merged_obj_metrics:\n                merged_obj_metrics[oid] = defaultdict(list)\n            for key, values in metrics.items():\n                merged_obj_metrics[oid][key].extend(values)\n    \n    # Calculate object-level averages\n    obj_averages = {}\n    for oid, metrics in merged_obj_metrics.items():\n        obj_averages[oid] = {k: sum(v)/len(v) if v else 0.0 for k, v in metrics.items()}\n    \n    # Global averages\n    global_avgs = {}\n    for metric_name in [\"seg_acc\", \"cont_mse\", \"density_mse\", \"youngs_mse\", \"poisson_mse\"]:\n        values = [obj_avg[metric_name] for obj_avg in obj_averages.values() \n                  if metric_name in obj_avg]\n        global_avgs[metric_name] = np.mean(values) if values else 0.0\n    \n    # Calculate dispersions\n    use_sem = dispersion.lower() in {\"sem\", \"stderr\"}\n    \n    def calc_dispersion(values):\n        if not values or len(values) <= 1:\n            return 0.0\n        if use_sem:\n            return np.std(values, ddof=1) / math.sqrt(len(values))\n        return np.std(values, ddof=0)\n    \n    # Print results\n    seg_se = calc_dispersion([avg[\"seg_acc\"] for avg in obj_averages.values()])\n    z_90 = 1.645\n    seg_ci_low = global_avgs[\"seg_acc\"] - z_90 * seg_se\n    seg_ci_high = global_avgs[\"seg_acc\"] + z_90 * seg_se\n    \n    disp_label = \"SE\" if use_sem else \"STD\"\n    \n    print(f\"\\nInference complete!\")\n    print(f\"  Average Segmentation Accuracy: {global_avgs['seg_acc']:.4f}\")\n    print(f\"    90% CI: [{seg_ci_low:.4f}, {seg_ci_high:.4f}] (± {z_90*seg_se:.4f})\")\n    print(f\"  Average Continuous MSE: {global_avgs['cont_mse']:.6f} \"\n          f\"({disp_label} {calc_dispersion([avg['cont_mse'] for avg in obj_averages.values()]):.6f})\")\n    \n    for metric, label in [(\"density_mse\", \"Density\"), (\"youngs_mse\", \"Young's\"), \n                         (\"poisson_mse\", \"Poisson\")]:\n        disp = calc_dispersion([avg[metric] for avg in obj_averages.values()])\n        print(f\"    • {label} MSE: {global_avgs[metric]:.6f} ({disp_label} {disp:.6f})\")\n    \n    # Save metrics file\n    save_metrics_file(output_dir, seg_checkpoint_path, cont_checkpoint_path,\n                     global_avgs, obj_averages, merged_obj_metrics, seg_ci_low, \n                     seg_ci_high, seg_se, z_90, disp_label)\n    \n    # Save object IDs\n    flat_obj_ids = [item for sublist in all_obj_ids if sublist for item in sublist]\n    unique_obj_ids = sorted(set(flat_obj_ids))\n    save_json(unique_obj_ids, os.path.join(output_dir, \"evaluated_obj_ids.json\"))\n    \n    # Generate per-class table if requested\n    if print_table:\n        generate_class_table(cfg, obj_averages, use_sem, disp_label, output_dir)\n"
  },
  {
    "path": "pixie/training_utils.py",
    "content": "\"\"\"\nShared training utilities for Wavelet-Generation training scripts.\nThis module contains common functions used across training_discrete.py, \ntraining_continuous_mse.py, and inference_combined.py to avoid code duplication.\n\"\"\"\n\nimport os\nimport torch\nimport torch.distributed as dist\nimport torch.multiprocessing as mp\nimport numpy as np\nimport random\nimport yaml\nfrom pathlib import Path\nfrom omegaconf import DictConfig\nfrom dotenv import load_dotenv\nimport wandb\nfrom pixie.utils import save_json, set_logger\nimport logging\n\ndef load_normalization_ranges(cfg: DictConfig) -> DictConfig:\n    \"\"\"Load normalization ranges from saved statistics and update config.\"\"\"\n    normalization_ranges_file = Path(cfg.paths.normalization_stats_dir) / \"normalization_ranges.yaml\"\n    \n    assert normalization_ranges_file.exists(), (\n        f\"Normalization ranges file not found at {normalization_ranges_file}. \"\n        f\"You must run 'python third_party/Wavelet-Generation/data_utils/inspect_ranges.py' \"\n        f\"first to compute the actual ranges from your dataset.\"\n    )\n    \n    with open(normalization_ranges_file, 'r') as f:\n        ranges = yaml.safe_load(f)\n    \n    # Update the training config with loaded ranges\n    cfg.training.density_min = ranges['density_p1']\n    cfg.training.density_max = ranges['density_p99']\n    cfg.training.E_min = ranges['E_p1']\n    cfg.training.E_max = ranges['E_p99']\n    cfg.training.nu_min = ranges['nu_p1']\n    cfg.training.nu_max = ranges['nu_p99']\n    \n    logging.info(f\"Loaded normalization ranges from {normalization_ranges_file}\")\n    logging.info(f\"  Density: {ranges['density_p1']:.3f} - {ranges['density_p99']:.3f}\")\n    logging.info(f\"  Young's E: {ranges['E_p1']:.3f} - {ranges['E_p99']:.3f}\")\n    logging.info(f\"  Poisson ν: {ranges['nu_p1']:.4f} - {ranges['nu_p99']:.4f}\")\n    \n    return cfg\n\n\ndef ddp_setup(rank: int, world_size: int):\n    \"\"\"Initialize process group for DDP.\"\"\"\n    os.environ[\"MASTER_ADDR\"] = \"localhost\"\n    os.environ[\"MASTER_PORT\"] = \"12355\"\n    dist.init_process_group(\"nccl\", rank=rank, world_size=world_size)\n    torch.cuda.set_device(rank)\n\n\ndef seed_everything(seed: int):\n    \"\"\"Set random seeds for reproducibility.\"\"\"\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n    np.random.seed(seed)\n    random.seed(seed)\n\n\ndef masked_mean(x, mask, dims, eps=1e-8):\n    \"\"\"Mean over the entries where mask==1, keeping the batch (and channel) dims.\"\"\"\n    num = (x * mask).sum(dims)  # total error over fg voxels\n    den = mask.sum(dims).clamp(min=1)  # #foreground voxels\n    return num / (den + eps)  # eps avoids NaN when den==0\n\n\ndef compute_accuracy(pred_logits, target, mask=None, ignore_index: int = None):\n    \"\"\"Voxel‑wise accuracy excluding *ignore_index* class.\"\"\"\n    with torch.no_grad():\n        pred = pred_logits.argmax(1)  # (N,D,H,W)\n        if mask is None:\n            mask = target != ignore_index\n        else:\n            mask = mask.bool()  # Convert float mask to boolean\n        correct = (pred == target) & mask\n        total = mask.sum()\n        if total == 0:\n            return torch.tensor(0.0, device=pred.device)\n        return correct.sum().float() / total.float()\n\n\ndef setup_wandb(rank: int, cfg: DictConfig, project_suffix: str = \"\"):\n    \"\"\"Setup wandb logging (only on rank 0).\"\"\"\n    if rank != 0:\n        return None\n    \n    \n    # Load environment variables from .env file\n    load_dotenv()\n    \n    # Get API key from config or environment variable\n    API_KEY = cfg.training.training.wandb_api_key or os.environ.get(\"WANDB_API_KEY\")\n    try:\n        wandb.login(key=API_KEY)\n    except wandb.Error:\n        print(\"wandb login failed. Skipping wandb setup.\")\n        return None\n\n    # Build wandb init kwargs with optional resume capability\n    wandb_kwargs = dict(\n        project=f\"pixie-3d{project_suffix}_{cfg.training.feature_type}\",\n        config={\n            \"learning_rate\": cfg.training.training.lr,\n            \"batch_size\": cfg.training.training.batch_size,\n            \"model_channels\": cfg.training.training.unet_model_channels,\n            \"num_res_blocks\": cfg.training.training.unet_num_res_blocks,\n            \"mix_precision\": getattr(cfg.training.training, \"mix_precision\", False),\n            \"train_size_split\": cfg.training.training.train_size,\n        },\n    )\n\n    run_id = getattr(cfg.training.training, \"wandb_run_id\", None)\n    if run_id:\n        # Continue logging to the same dashboard\n        wandb_kwargs.update({\"id\": run_id, \"resume\": \"must\"})\n\n    return wandb.init(**wandb_kwargs)\n\n\ndef get_checkpoint_paths(cfg: DictConfig):\n    \"\"\"Get checkpoint paths based on feature type using config paths.\"\"\"\n    # Use config paths for base directories\n    seg_base_dir = cfg.paths.discrete_checkpoint_dir\n    cont_base_dir = cfg.paths.continuous_checkpoint_dir\n    \n    return seg_base_dir, cont_base_dir\n\n\ndef get_latest_checkpoint_dirs(seg_base_dir: str, cont_base_dir: str):\n    \"\"\"Get the latest timestamp directories for checkpoints.\"\"\"\n    import glob\n    \n    # Find all timestamp directories\n    seg_timestamps = [d for d in os.listdir(seg_base_dir) if os.path.isdir(os.path.join(seg_base_dir, d))]\n    cont_timestamps = [d for d in os.listdir(cont_base_dir) if os.path.isdir(os.path.join(cont_base_dir, d))]\n    \n    if not seg_timestamps or not cont_timestamps:\n        raise ValueError(f\"No timestamp directories found in checkpoint folders {seg_base_dir} or/and {cont_base_dir}\")\n    \n    # Get latest timestamp directories\n    latest_seg_ts = sorted(seg_timestamps)[-1]  # Most recent timestamp\n    latest_cont_ts = sorted(cont_timestamps)[-1]\n    \n    # Get latest checkpoints within those timestamp directories\n    seg_checkpoint_dir = os.path.join(seg_base_dir, latest_seg_ts)\n    cont_checkpoint_dir = os.path.join(cont_base_dir, latest_cont_ts)\n    \n    return seg_checkpoint_dir, cont_checkpoint_dir, latest_seg_ts, latest_cont_ts\n\n\ndef get_checkpoint(checkpoint_dir: str, epoch: int = -1):\n    \"\"\"Get a checkpoint from a directory based on epoch number.\n    \n    Args:\n        checkpoint_dir: Directory containing checkpoints\n        epoch: Specific epoch to get checkpoint for. If -1, returns latest checkpoint.\n    \n    Returns:\n        Path to the requested checkpoint, or None if not found.\n    \"\"\"\n    import glob\n    \n    checkpoints = glob.glob(os.path.join(checkpoint_dir, \"epoch_*.pth\"))\n    if not checkpoints:\n        return None\n    \n    # Extract epoch numbers\n    epochs = [int(ckpt.split(\"epoch_\")[-1].split(\".\")[0]) for ckpt in checkpoints]\n    \n    if epoch == -1:\n        # Get latest checkpoint\n        max_epoch_idx = np.argmax(epochs)\n        return checkpoints[max_epoch_idx]\n    else:\n        # Get specific epoch checkpoint\n        try:\n            epoch_idx = epochs.index(epoch)\n            return checkpoints[epoch_idx]\n        except ValueError:\n            return None\n\n\ndef load_checkpoint(checkpoint_path: str, model, optimizer=None, scheduler=None, rank: int = 0):\n    \"\"\"Load checkpoint with proper error handling.\"\"\"\n    if not checkpoint_path or not os.path.isfile(checkpoint_path):\n        return 0  # Return starting epoch\n    \n    map_location = {'cuda:0': f'cuda:{rank}'}\n    checkpoint = torch.load(checkpoint_path, map_location=map_location,\n                            weights_only=True)\n    \n    def _extract_state_dict(ckpt):\n        \"\"\"Return bare state_dict regardless of checkpoint wrapping.\"\"\"\n        if isinstance(ckpt, dict):\n            for key in (\"model_state_dict\", \"state_dict\"):\n                if key in ckpt:\n                    return ckpt[key]\n        return ckpt  # assume it's already a state-dict\n\n    try:\n        model.load_state_dict(_extract_state_dict(checkpoint), strict=False)\n    except RuntimeError as e:\n        print(f\"[Warning] Strict load failed for checkpoint – {e}. Trying non-strict.\")\n        model.load_state_dict(_extract_state_dict(checkpoint), strict=False)\n    \n    start_epoch = 0\n    if isinstance(checkpoint, dict):\n        if \"optimizer_state_dict\" in checkpoint and optimizer is not None:\n            optimizer.load_state_dict(checkpoint[\"optimizer_state_dict\"])\n        if scheduler is not None and checkpoint.get(\"scheduler_state_dict\") is not None:\n            scheduler.load_state_dict(checkpoint[\"scheduler_state_dict\"])\n        start_epoch = checkpoint.get(\"epoch\", 0) + 1\n    \n    if rank == 0:\n        print(f\"[Rank 0] Loaded checkpoint from {checkpoint_path} (starting at epoch {start_epoch})\")\n    \n    return start_epoch\n\n\ndef save_train_test_splits(train_dataset, test_dataset, full_dataset, ckpt_dir: str, rank: int = 0):\n    \"\"\"Save train/test split object IDs for reproducibility.\"\"\"\n    if rank != 0:\n        return\n    \n    train_ids = [full_dataset.obj_ids[i] for i in train_dataset.indices]\n    test_ids = [full_dataset.obj_ids[i] for i in test_dataset.indices]\n\n    print(f\"Sample training object IDs: {train_ids[:5]}{'...' if len(train_ids) > 5 else ''}\")\n    print(f\"Sample test object IDs: {test_ids[:3]}{'...' if len(test_ids) > 3 else ''}\")\n\n    save_json(train_ids, os.path.join(ckpt_dir, \"train_set.json\"))\n    save_json(test_ids, os.path.join(ckpt_dir, \"test_set.json\"))\n    print(f\"Saved train/test split object IDs to: {ckpt_dir}\")\n\n\ndef print_dataset_info(full_dataset, train_size: int, test_size: int, rank: int = 0):\n    \"\"\"Print dataset information.\"\"\"\n    if rank != 0:\n        return\n    \n    print(f\"\\n=== Dataset Information ===\")\n    print(f\"Total objects in dataset: {len(full_dataset)}\")\n    print(f\"Training objects: {train_size}\")\n    print(f\"Test objects: {test_size}\")\n    print(f\"Train/test split ratio: {train_size/len(full_dataset):.1%}\")\n\n\ndef extract_state_dict(checkpoint):\n    \"\"\"Extract state dict from various checkpoint formats.\"\"\"\n    if isinstance(checkpoint, dict):\n        for key in (\"model_state_dict\", \"state_dict\"):\n            if key in checkpoint:\n                return checkpoint[key]\n    return checkpoint  # assume it's already a state-dict\n"
  },
  {
    "path": "pixie/utils.py",
    "content": "import os\nimport sys\nimport argparse\nimport logging\nimport json\nimport shutil\nimport objaverse\nfrom PIL import Image\nfrom pathlib import Path\nfrom typing import Dict, Any, Optional\nfrom omegaconf import DictConfig, OmegaConf\nimport subprocess\nfrom dotenv import load_dotenv\nfrom hydra import initialize, compose\nfrom hydra.core.global_hydra import GlobalHydra\nimport pickle\nfrom typing import Tuple, Optional\nimport colorlog\nimport numpy as np\n\ndef set_logger(name: str = None, level: int = logging.INFO) -> logging.Logger:\n    \"\"\"Set up a colored logger using colorlog.\n    \n    Args:\n        name: Logger name (defaults to root logger if None)\n        level: Logging level\n        \n    Returns:\n        Configured logger instance\n    \"\"\"\n        \n    # Create logger\n    logger = logging.getLogger(name)\n    logger.setLevel(level)\n    \n    # Clear existing handlers to avoid duplicates\n    if logger.handlers:\n        logger.handlers.clear()\n    \n    # Create colored handler\n    handler = colorlog.StreamHandler()\n\n    formatter = colorlog.ColoredFormatter(\n        \"%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s\",\n        datefmt=None,\n        reset=True,\n        log_colors={\n            'DEBUG':    'cyan',\n            'INFO':     'green',\n            'WARNING':  'yellow',\n            'ERROR':    'red',\n            'CRITICAL': 'red,bg_white',\n        },\n        secondary_log_colors={},\n        style='%'\n    )\n\n    handler.setFormatter(formatter)\n    \n    logger.addHandler(handler)\n    \n    # If this is the root logger, also configure basicConfig\n    if name is None:\n        logging.basicConfig(level=level, handlers=[handler])\n        \n    return logger\n\n\ndef str2bool(v):\n    if isinstance(v, bool):\n        return v\n    if v.lower() in ('yes', 'true', 'True','t', 'y', '1'):\n        return True\n    elif v.lower() in ('no', 'false', 'False','f', 'n', '0'):\n        return False\n    else:\n        raise argparse.ArgumentTypeError('Boolean value expected.')\n    \n\n\n\n\n\n\ndef get_conda_env(env_name):\n    conda_init = \"source $(conda info --base)/etc/profile.d/conda.sh\"\n    acv = f\"bash -c '{conda_init} && conda activate {env_name} &&\"\n    return acv\n\n\ndef _capture_command_output(cmd):\n    \"\"\"Run a command and capture its output.\"\"\"\n    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, \n                              universal_newlines=True, bufsize=1)\n    \n    output_lines = []\n    while True:\n        output = process.stdout.readline()\n        if output == '' and process.poll() is not None:\n            break\n        if output:\n            print(output.rstrip())\n            output_lines.append(output)\n    \n    return process.poll(), ''.join(output_lines)\n\n\ndef _is_blender_nerf_error_only(output_text):\n    \"\"\"Check if the output contains only the harmless BlenderNeRF camera error.\"\"\"\n    if \"BlenderNeRF Camera\" not in output_text or \"not found\" not in output_text:\n        return False\n    \n    # Check for successful completion indicators\n    success_indicators = [\"Blender quit\", \"Finished\", \"Normalized scene exported\"]\n    return any(indicator in output_text for indicator in success_indicators)\n\n\ndef _is_gaussian_splatting_addon_error_only(output_text):\n    \"\"\"Check if the output contains only harmless Gaussian Splatting addon errors.\"\"\"\n    # Look for the specific addon unregister error\n    gs_error_patterns = [\n        \"RuntimeError: unregister_class(...):, missing bl_rna attribute from '_RNAMeta' instance\",\n        \"Exception in module unregister():\",\n        \"gaussian_splatting_io\"\n    ]\n    \n    # Check if this is a GS addon error\n    if not any(pattern in output_text for pattern in gs_error_patterns):\n        return False\n    \n    # Check for successful completion indicators\n    success_indicators = [\"Blender quit\", \"Finished\", \"Video saved to\", \"✅\"]\n    return any(indicator in output_text for indicator in success_indicators)\n\n\ndef _check_for_errors(output_text):\n    \"\"\"Check output text for error patterns.\"\"\"\n    error_patterns = [\n        \"could not be opened: No such file or directory\",\n        \"Error:\",\n        \"ERROR:\",\n        \"Failed to\",\n        \"Traceback (most recent call last):\",\n    ]\n    \n    # Special handling for BlenderNeRF errors\n    if _is_blender_nerf_error_only(output_text):\n        logging.info(\"[RUN] Ignoring harmless BlenderNeRF camera error - command completed successfully\")\n        return False\n    \n    # Special handling for Gaussian Splatting addon errors\n    if _is_gaussian_splatting_addon_error_only(output_text):\n        logging.info(\"[RUN] Ignoring harmless Gaussian Splatting addon unregister error - command completed successfully\")\n        return False\n    \n    # Check for any error patterns\n    for pattern in error_patterns:\n        if pattern in output_text:\n            return True\n    \n    return False\n\ndef run_cmd(cmd, step_name=\"\", *, conda_env=None, allow_error=False, dry_run=False, check_output=False):\n    \"\"\"Execute a shell command with optional conda-environment wrapping.\n\n    Parameters\n    ----------\n    cmd : str | list\n        The command to run. Lists are automatically joined by spaces for\n        convenience, so you can write ``[\"python\", \"script.py\", \"--arg\", \"val\"]``\n        instead of hand-crafting long f-strings.\n    step_name : str, optional\n        Human-readable label used in logs.\n    conda_env : str, optional\n        If given, the command is executed inside that conda environment using\n        the same *conda activate* wrapper used elsewhere in the codebase.\n    allow_error : bool, default False\n        When *False*, a non-zero exit status will terminate the program.\n    dry_run : bool, default False\n        Log the command but do not execute it. Useful for debugging.\n    check_output : bool, default False\n        If True, captures output to check for errors (needed for Blender).\n        This may break progress bars but is necessary for some commands.\n    \"\"\"\n\n    # Convert list-based commands to a single string.\n    if isinstance(cmd, list):\n        cmd = \" \".join(map(str, cmd))\n\n    if conda_env:\n        conda_cmd = get_conda_env(conda_env)\n        cmd = f\"{conda_cmd} {cmd}'\"  # close the single quote opened in get_conda_env\n\n    logging.info(f\"[RUN] {step_name} | {cmd}\")\n\n    if dry_run:\n        logging.info(\"[RUN] Dry-run enabled; command not executed.\")\n        return True\n\n    # Auto-detect if this is a Blender command\n    if 'blender' in cmd.lower() and not check_output:\n        check_output = True\n        logging.info(f\"[RUN] Detected Blender command, enabling output checking for command: {cmd}\")\n\n    has_error=False\n    # Execute command\n    if check_output:\n        return_code, output_text = _capture_command_output(cmd)\n        has_error = _check_for_errors(output_text)\n    else:\n        # Use os.system for better compatibility with progress bars\n        status = os.system(cmd)\n        # os.system() returns a 16-bit wait status. The actual exit code is in the high bits.\n        return_code = status >> 8\n\n    if (return_code != 0 or has_error) and not allow_error:\n        logging.error(f\"[RUN] Stopping pipeline at step: {step_name}\")\n        if has_error:\n            logging.error(f\"[RUN] Error detected in output\")\n        sys.exit(return_code or 1)\n    \n    logging.info(f\"[RUN] Successfully completed step: {step_name}\")\n    return return_code == 0 and not has_error\n\n\ndef load_json(path):\n    with open(path, \"r\") as f:\n        return json.load(f)\n\ndef save_json(data, path):\n    with open(path, \"w\") as f:\n        json.dump(data, f, indent=2)\n\ndef get_obj_class_for_id(obj_id: str, cfg: DictConfig) -> str:\n    \"\"\"Get object class for a given object ID.\"\"\"\n    assert os.path.exists(cfg.paths.obj_metadata_path), f\"obj_metadata_path: {cfg.paths.obj_metadata_path} does not exist\"\n    # Handle relative paths by making them absolute relative to the project root\n    metadata_path = cfg.paths.obj_metadata_path\n    obj_metadata = load_json(metadata_path)\n    return obj_metadata.get(obj_id, {}).get(\"obj_class\", \"UNKNOWN\")\n\ndef download_object(obj_id: str):\n    \"\"\"Download a single object from Objaverse to the current directory.\"\"\"\n    logging.info(f\"Downloading object with UID: {obj_id}\")\n    try:\n        objects = objaverse.load_objects(uids=[obj_id])\n        logging.info(f\"Successfully downloaded object: {obj_id}\")\n        return objects.get(obj_id)\n    except Exception as e:\n        print(f\"Failed to download object {obj_id}: {e}\")  # Fallback print\n        logging.error(f\"Failed to download object {obj_id}: {e}\")\n        return None\n\ndef prepare_nerf_dataset_from_blender_output(data_dir):\n    \"\"\"\n    Converts raw Blender output into a dataset format compatible with NeRF training.\n    - Removes alpha channels from PNG images.\n    - Creates `transforms.json` and empty `transforms_test.json`.\n    \"\"\"\n    # data_dir already contains the obj_id from the pipeline\n    source_path = data_dir\n    train_dir = os.path.join(source_path, \"train\")\n\n    train_transforms = os.path.join(source_path, \"transforms_train.json\")\n    base_transforms = os.path.join(source_path, \"transforms.json\")\n    \n    if os.path.exists(train_transforms):\n        shutil.copy(train_transforms, base_transforms)\n    elif os.path.exists(base_transforms):\n        shutil.copy(base_transforms, train_transforms)\n\n    empty_test_transforms = {\n        \"frames\": [],\n        \"camera_angle_x\": 0.0, \"camera_angle_y\": 0.0\n    }\n    save_json(empty_test_transforms, os.path.join(source_path, \"transforms_test.json\"))\n    if not os.path.isdir(train_dir):\n        logging.warning(f\"Training directory not found, skipping conversion: {train_dir}\")\n        return\n\n    for filename in os.listdir(train_dir):\n        if not filename.lower().endswith(\".png\"):\n            continue\n        \n        img_path = os.path.join(train_dir, filename)\n        try:\n            with Image.open(img_path) as img:\n                if img.mode == 'RGBA':\n                    img.convert('RGB').save(img_path)\n        except Exception as e:\n            logging.warning(f\"Could not process image {img_path}: {e}\")\n\n    logging.info(f\"Successfully prepared NeRF dataset for data directory: {data_dir}\")\n\n\ndef resolve_paths(cfg: DictConfig) -> DictConfig:\n    \"\"\"Resolve all path configurations.\"\"\"\n    # Handle empty/null base_path to use current directory\n    if not cfg.paths.base_path:\n        cfg.paths.base_path = os.getcwd()\n    if not cfg.paths.inference_results_dir:\n        cfg.paths.inference_results_dir = f\"inference_combined_mse_{cfg.training.feature_type}_results\"\n    \n    # Resolve all path variables\n    cfg = OmegaConf.create(OmegaConf.to_container(cfg, resolve=True))\n    \n    return cfg\n\n\ndef join_path(*components):\n    \"\"\"Safely join path components, returning None if any component is invalid.\"\"\"\n    try:\n        # If any component is None, return None\n        if any(c is None for c in components):\n            return None\n        \n        valid_components = [str(c) for c in components if c and str(c).strip()]\n        return os.path.join(*valid_components) if valid_components else None\n    except:\n        return None\n\n\ndef get_output_paths(cfg: DictConfig, obj_id: str) -> Dict[str, str]:\n    \"\"\"Get all output paths for a specific object.\"\"\"\n    paths = {}\n    \n    # Blender output\n    paths['data_dir'] = join_path(cfg.paths.data_dir, obj_id)\n    \n    # NeRF output\n    paths['nerf_output'] = join_path(cfg.paths.outputs_dir, obj_id, cfg.training_3d.nerf.method)\n    \n    # Gaussian Splatting output\n    paths['gs_output'] = join_path(cfg.paths.outputs_dir, obj_id, \"gs\")\n    \n    # Render output\n    paths['render_output'] = join_path(cfg.paths.render_outputs_dir, obj_id)\n    \n    # Material segmentation outputs\n    if cfg.material_mode == 'vlm':\n        paths['vlm_base_dir'] = join_path(cfg.paths.vlm_seg_mat_sample_results_dir, obj_id)\n    elif cfg.material_mode == 'neural':\n        paths['neural_base_dir'] = join_path(cfg.paths.base_path, cfg.paths.inference_results_dir, cfg.segmentation.neural.result_id, obj_id)\n    \n    # PhysGaussian output\n    paths['physgaussian_output'] = join_path(cfg.paths.physgaussian_output_dir, cfg.material_mode, obj_id)\n\n    # Blender output\n    paths['blender_output'] = join_path(cfg.paths.blender_output_dir, obj_id)\n    \n    # Blender scene file\n    paths['blend_file_path'] = cfg.paths.blend_file_path\n    \n    # Blender addon paths\n    paths['blender_gs_addon_path'] = cfg.paths.blender_gs_addon_path\n\n    if not cfg.is_objaverse_object:\n        logging.warning(\"Real data must use `disable_scene_contraction=True` and `USE_COLMAP_DATAPARSER`. Setting this automatically.\")\n        cfg.training_3d.nerf.disable_scene_contraction = True\n        if should_use_colmap(cfg, paths):\n            os.environ[\"USE_COLMAP_DATAPARSER\"] = \"1\"\n        assert cfg.material_mode == \"neural\", f\"Real data must use neural material mode. You have: `{cfg.material_mode}` mode\"\n    return paths\n\ndef should_use_colmap(cfg: DictConfig, paths: dict) -> bool:\n    \"\"\"Determine if Colmap should be used for data parsing.\"\"\"\n    return \"colmap\" in os.listdir(paths['data_dir'])\n\n\ndef get_physics_config_path(cfg: DictConfig, obj_id: str, material_mode: str, obj_class: str) -> str:\n    \"\"\"Get the appropriate physics configuration path.\"\"\"\n    if cfg.is_objaverse_object:\n        return f\"{cfg.paths.physgaussian_config_dir}/objaverse/custom_{obj_class}_config.json\"\n    else:\n        return f\"{cfg.paths.physgaussian_config_dir}/real_scene/custom_{obj_id}_config.json\" \n\n\ndef should_use_white_bg(cfg: DictConfig, material_mode: str, obj_class: str) -> bool:\n    \"\"\"Determine if white background should be used for physics simulation.\"\"\"\n    if material_mode != 'neural' or obj_class not in cfg.physics.no_white_bg_classes:\n        return cfg.physics.white_bg\n    return False\n\n\ndef create_directories(paths: Dict[str, str]) -> None:\n    \"\"\"Create all necessary directories.\"\"\"\n    for path in paths.values():\n        if path and not path.startswith('${'):\n            path_obj = Path(path)\n            # If it's a file path (has extension), create the parent directory\n            if path_obj.suffix:\n                path_obj.parent.mkdir(parents=True, exist_ok=True)\n            else:\n                # It's a directory path, create it directly\n                path_obj.mkdir(parents=True, exist_ok=True)\n    \n    import json\n    logging.info(f\"Created directories:\\n{json.dumps(paths, indent=2)}\")\n\n\ndef get_latest_nerf_run(output_dir: str) -> Optional[str]:\n    \"\"\"Get the path to the latest NeRF training run directory.\n    \n    Returns:\n        Path to the latest run directory if found, None otherwise\n    \"\"\"\n    if not os.path.exists(output_dir):\n        return None\n    \n    dirs = [os.path.join(output_dir, d) for d in os.listdir(output_dir) \n            if os.path.isdir(os.path.join(output_dir, d))]\n    \n    return max(dirs, key=os.path.getmtime) if dirs else None\n\n\n\n\n\ndef configure_real_scene_voxelization(cfg: DictConfig) -> None:\n    \"\"\"Auto-configure voxelization for real scene data.\"\"\"\n    scene_config = load_json(os.path.join(cfg.paths.data_dir, \"scene_bounds.json\"))[cfg.obj_id]\n    cfg.voxelization.scene_bounds = scene_config[\"scene_bounds\"]\n    cfg.voxelization.voxel_size = scene_config[\"voxel_size\"]\n    logging.info(f\"Auto-configured voxelization for {cfg.obj_id}. Set scene bounds to {cfg.voxelization.scene_bounds} and voxel size to {cfg.voxelization.voxel_size}\")\n\n\n\n\n\ndef validate_config(cfg: DictConfig, single_obj: bool = True) -> None:\n    \"\"\"Validate the configuration.\"\"\"\n    if cfg.obj_id is None and cfg.obj_path is None and single_obj:\n        raise ValueError(\"Either obj_id or obj_path must be provided\")\n    \n    if cfg.material_mode not in ['vlm', 'neural']:\n        raise ValueError(f\"Invalid material_mode: {cfg.material_mode}. Available modes are: vlm, neural\")\n    \n    if cfg.material_mode == 'neural':\n        # if not cfg.segmentation.neural.result_id:\n        #     raise ValueError(\"result_id is required for neural segmentation mode\")\n        if not cfg.segmentation.neural.feature_type:\n            raise ValueError(\"feature_type is required for neural segmentation mode\")\n    \n    # Validate and resolve voxelization settings\n    if cfg.voxelization.voxel_size is None and cfg.voxelization.grid_size is None:\n        raise ValueError(\"Either voxel_size or grid_size must be provided in voxelization config\")\n    \n    if cfg.voxelization.voxel_size is None:\n        cfg.voxelization.voxel_size = 1.0 / cfg.voxelization.grid_size\n    \n\n    \n\n\n\n\ndef save_contextual_config(cfg: DictConfig, output_dir: str, context: str = \"pipeline\") -> None:\n    \"\"\"Save context-specific configuration for reproducibility.\n    \n    This function automatically determines which config sections are relevant based on the context\n    and saves only those parts, making it maintainable and automatically adapting to config changes.\n    \n    Args:\n        cfg: The full configuration\n        output_dir: Directory where to save the config\n        context: Context type ('blender', 'gaussian_splatting', 'voxelization', \n                any 'vlm_*' context, 'pipeline')\n    \"\"\"\n    # Define which config sections are relevant for each context\n    context_configs = {\n        \"blender\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"rendering\": OmegaConf.to_container(cfg.data_rendering, resolve=True),\n            \"paths\": {\"blender_path\": str(cfg.paths.blender_path)},\n        },\n        \"gaussian_splatting\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"training\": {\"gaussian_splatting\": OmegaConf.to_container(cfg.training_3d.gaussian_splatting, resolve=True)},\n            \"paths\": {\"gaussian_splatting_dir\": str(cfg.paths.gaussian_splatting_dir)},\n        },\n        \"voxelization\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"voxelization\": OmegaConf.to_container(cfg.voxelization, resolve=True),\n        },\n        \"physics_simulation\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"physics\": OmegaConf.to_container(cfg.physics, resolve=True),\n            \"paths\": {\"physgaussian_dir\": str(cfg.paths.physgaussian_dir)},\n        },\n        \"blender_output_render\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"rendering\": OmegaConf.to_container(cfg.output_rendering, resolve=True),\n            \"paths\": {\"blender_output_dir\": str(cfg.paths.blender_output_dir)},\n        },\n        \"blender_gs_render\": {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"rendering\": OmegaConf.to_container(cfg.output_rendering, resolve=True),\n            \"paths\": {\"blender_output_dir\": str(cfg.paths.blender_output_dir)},\n        },\n    }\n    \n    # Handle VLM contexts with a simple base config\n    if context.startswith(\"vlm_\"):\n        context_configs[context] = {\n            \"obj_id\": cfg.obj_id,\n            \"obj_path\": cfg.obj_path,\n            \"segmentation\": {\"vlm\": {\"labeling\": OmegaConf.to_container(cfg.segmentation.vlm.labeling, resolve=True)}},\n        }\n    \n    if context not in context_configs:\n        raise ValueError(f\"Unknown context: {context}. Available contexts: {list(context_configs.keys())}\")\n    \n    # Get the relevant config for this context\n    relevant_config = context_configs[context]\n    \n    # Convert to dict and save\n    # If relevant_config is already a dict, use it directly; otherwise convert from OmegaConf\n    if isinstance(relevant_config, dict):\n        config_dict = relevant_config\n    else:\n        config_dict = OmegaConf.to_container(relevant_config, resolve=True)\n    \n    # Save as YAML\n    config_name = f\"{context}_config.yaml\"\n    config_path = Path(output_dir) / config_name\n    config_path.parent.mkdir(parents=True, exist_ok=True)\n    \n    OmegaConf.save(config_dict, config_path)\n    logging.info(f\"Saved {context} configuration: {config_path}\") \n\n\ndef get_vlm_api_key(cfg: DictConfig, model_name: str) -> str:\n    \"\"\"Get API key from config or environment.\"\"\"\n    load_dotenv()\n    cfg_api = cfg.segmentation.vlm.labeling.api\n    if \"gemini\" in model_name: return os.environ.get('GEM_API_KEY') or cfg_api.gemini_api_key or \"\"\n    elif \"claude\" in model_name: return os.environ.get('CLAUDE_API_KEY') or cfg_api.claude_api_key or \"\"\n    elif \"gpt\" in model_name: return os.environ.get('GPT_API_KEY') or cfg_api.gpt_api_key or \"\"\n    return \"\"\n\n\ndef get_vlm_results(cfg: DictConfig) -> Dict[str, Any]:\n    \"\"\"Get VLM task results as a dictionary keyed by task name.\"\"\"\n    results = {}\n    obj_id = cfg.obj_id\n    \n    # VLM segmentation results\n    vlm_seg_path = f\"{cfg.paths.vlm_seg_results_dir}/{obj_id}/vlm_results.json\"\n    results['segmentation'] = load_json(vlm_seg_path) if os.path.exists(vlm_seg_path) else None\n    \n    # VLM segmentation critic results\n    critic_path = f\"{cfg.paths.vlm_seg_critic_results_dir}/{obj_id}/critic_results.json\"\n    results['seg_critic'] = load_json(critic_path) if os.path.exists(critic_path) else None\n    \n    # VLM physics sampler results  \n    sampler_path = f\"{cfg.paths.vlm_seg_mat_sample_results_dir}/{obj_id}/sampler_results.json\"\n    results['phys_sampler'] = load_json(sampler_path) if os.path.exists(sampler_path) else None\n    \n    # VLM parse segmentation critic results\n    parse_path = f\"{cfg.paths.vlm_seg_mat_sample_results_dir}/{obj_id}/parse_results.json\"\n    results['parse_seg_critic'] = load_json(parse_path) if os.path.exists(parse_path) else None\n    \n    # Final chosen VLM results (from material segmentation)\n    base_dir = f\"{cfg.paths.vlm_seg_mat_sample_results_dir}/{obj_id}\"\n    if os.path.exists(base_dir):\n        sample_dirs = [d for d in os.listdir(base_dir) if d.startswith(\"sample_\")]\n        if sample_dirs:\n            chosen_path = f\"{base_dir}/{sample_dirs[0]}/chosen_vlm_results.json\"\n            results['chosen_results'] = load_json(chosen_path) if os.path.exists(chosen_path) else None\n    \n    return results\n\n\n\ndef load_config(config_path=\"../config\", config_name=\"config\"):\n    \"\"\"\n    Load and merge Hydra configuration.\n\n    :param config_path: Path to the config directory\n    :param config_name: Name of the main config file (without .yaml extension)\n    :return: Merged configuration object\n    \"\"\"\n    # Initialize Hydra\n    GlobalHydra.instance().clear()\n    initialize(version_base=None, config_path=config_path)\n\n    # Compose the configuration\n    cfg = compose(config_name=config_name)\n\n    return cfg\n\n\n\ndef save_pickle(data, path):\n    with open(path, \"wb\") as f:\n        pickle.dump(data, f)\n\ndef load_pickle(path):\n    with open(path, \"rb\") as f:\n        return pickle.load(f)\n\n\n\ndef get_material_vlm_segmentation_path(cfg: DictConfig, render_output_dir: str,\n                                   paths: dict) -> Tuple[str, str]:\n    \"\"\"Get the path to the material segmentation.\"\"\"\n    sample_id = f\"sample_{cfg.physics.sample_id}\"\n    sample_render_output_dir = os.path.join(render_output_dir, sample_id)\n    point_cloud_path = os.path.join(sample_render_output_dir,\n                                    \"segmented_semantics.ply\")\n    return point_cloud_path\n\ndef get_material_neural_segmentation_path(cfg: DictConfig, render_output_dir: str,\n                                   paths: dict) -> Tuple[str, str]:\n\n    sample_output_dir = Path(paths['neural_base_dir'])\n    if not cfg.is_objaverse_object:\n        point_cloud_path = sample_output_dir / \"world_mapped_preds.ply\"\n    else:\n        point_cloud_path = sample_output_dir / \"mapped_preds.ply\"\n    return point_cloud_path\n\ndef generate_material_segmentation(\n        cfg: DictConfig, render_output_dir: str,\n        paths: dict) -> Tuple[Optional[str], Optional[str]]:\n    \"\"\"Generates material segmentation for a single material sample.\"\"\"\n    base_sample_dir = Path(paths['vlm_base_dir'])\n\n    material_dict_path = None\n    if cfg.segmentation.material_dict_path:\n        material_dict_path = Path(cfg.segmentation.material_dict_path)\n    else:\n        # Use configured sample_id instead of auto-detection\n        sample_id = f\"sample_{cfg.physics.sample_id}\"\n        sample_dir = base_sample_dir / sample_id\n        \n        if not os.path.exists(sample_dir):\n            logging.error(f\"Configured sample directory not found: {sample_dir}\")\n            return None, None\n            \n        material_dict_path = sample_dir / \"chosen_vlm_results.json\"\n        logging.info(f\"Using configured sample: {sample_dir}\")\n\n    if not os.path.exists(material_dict_path):\n        logging.warning(f\"Material dict not found, skipping: {material_dict_path}\")\n        return None, None\n\n    sample_id = material_dict_path.parent.name\n    logging.info(f\"Processing material sample {sample_id}\")\n\n    sample_render_output_dir = os.path.join(render_output_dir, sample_id)\n    os.makedirs(sample_render_output_dir, exist_ok=True)\n\n    material_dict_copy_path = os.path.join(sample_render_output_dir,\n                                           \"material_dict.json\")\n    shutil.copy2(material_dict_path, material_dict_copy_path)\n    logging.info(f\"Copied material dictionary to {material_dict_copy_path}\")\n\n    segmentation_cmd = [\n        \"python\",\n        \"pixie/voxel/segmentation.py\",\n        \"--grid_feature_path\",\n        f\"{render_output_dir}/clip_features.npz\",\n        \"--occupancy_path\",\n        f\"{render_output_dir}/clip_features_pc.ply\",\n        \"--output_dir\",\n        sample_render_output_dir,\n        \"--material_dict_path\",\n        material_dict_copy_path,\n        \"--use_spatial_smoothing\",\n        str(cfg.segmentation.vlm.use_spatial_smoothing),\n        \"--overwrite\",\n        str(cfg.segmentation.vlm.overwrite),\n        \"--background_id\",\n        str(cfg.training.background_id),\n    ]\n    run_cmd(segmentation_cmd, step_name=f\"SEGMENTATION_{sample_id}\")\n\n    return sample_render_output_dir\n\ndef _find_latest_inference_dir(cfg: DictConfig) -> Optional[Path]:\n    \"\"\"Find the latest inference results directory.\"\"\"\n    base_dir = Path(cfg.paths.base_path) / cfg.paths.inference_results_dir\n    if not os.path.exists(base_dir):\n        return None\n    \n    timestamp_dirs = [d for d in base_dir.iterdir() \n                     if d.is_dir() and d.name.replace('_', '').replace('-', '').isdigit()]\n    return max(timestamp_dirs, key=lambda x: x.stat().st_mtime) if timestamp_dirs else None\n\n\ndef _get_pred_path(sample_output_dir: Path, sample_name: str) -> Path:\n    \"\"\"Get prediction file path.\"\"\"\n    if not sample_output_dir:\n        return None\n    return os.path.join(sample_output_dir, f\"{sample_name}_pred.npy\")\n\n\ndef _build_config_overrides(cfg: DictConfig) -> str:\n    \"\"\"Build config override arguments for inference script.\"\"\"\n    overrides = []\n    \n    # Essential configs that inference script needs\n    if cfg.paths.base_path:\n        overrides.append(f\"paths.base_path={cfg.paths.base_path}\")\n    if cfg.training.feature_type:\n        overrides.append(f\"training.feature_type={cfg.training.feature_type}\")\n    if cfg.paths.render_outputs_dir:\n        overrides.append(f\"paths.render_outputs_dir={cfg.paths.render_outputs_dir}\")\n    overrides.append(f\"training.enforce_mask_consistency={cfg.training.enforce_mask_consistency} \")\n    overrides.append(f\"training.inference.CONT_EPOCH={cfg.training.inference.CONT_EPOCH} \")\n    overrides.append(f\"training.inference.SEG_EPOCH={cfg.training.inference.SEG_EPOCH} \")\n\n    \n    return \" \".join(overrides)\n\n\ndef generate_neural_segmentation(cfg: DictConfig, render_output_dir: str,\n                                 paths: dict) -> Tuple[str, str]:\n    \"\"\"Generates material segmentation using a pre-trained neural network.\"\"\"\n    sample_name = f\"sample_{cfg.physics.sample_id}\"\n    \n    # Initialize paths\n    sample_output_dir = paths['neural_base_dir']\n    pred_path = _get_pred_path(sample_output_dir, sample_name)\n    # Run inference if needed\n    if not pred_path or not os.path.exists(pred_path):\n        # Pass config overrides to inference script\n        override_args = _build_config_overrides(cfg)\n        inference_cmd = f\"python third_party/Wavelet-Generation/trainer/inference_combined.py obj_id={cfg.obj_id} {override_args}\"\n        if not cfg.segmentation.neural.cache_results:\n            logging.info(f\"[NEURAL] Prediction path does not exist: {pred_path}. Running inference...\")\n            run_cmd(inference_cmd, step_name=\"NEURAL_INFERENCE\")\n        \n        # Update paths to latest inference results\n        latest_dir = _find_latest_inference_dir(cfg)\n        if latest_dir:\n            sample_output_dir = join_path(latest_dir, cfg.obj_id)\n            pred_path = _get_pred_path(sample_output_dir, sample_name)\n            \n            # Update result_id to match the actual inference results\n            cfg.segmentation.neural.result_id = latest_dir.name\n            logging.info(f\"[NEURAL] Updated result_id to: {cfg.segmentation.neural.result_id}\")\n            logging.info(f\"[NEURAL] Updated prediction path to: {pred_path}\")\n            paths[\"neural_base_dir\"] = sample_output_dir\n        else:\n            logging.error(\"[NEURAL] No inference results found after running inference\")\n\n\n    # Generate point cloud mapping\n    mask_path = join_path(sample_output_dir, f\"{sample_name}_mask.npy\")\n    point_cloud_path = join_path(sample_output_dir, \"mapped_preds.ply\")\n    world_point_cloud_path = join_path(sample_output_dir, \"world_mapped_preds.ply\")\n    latest_run = get_latest_nerf_run(paths['nerf_output'])\n    dataparser_path = os.path.join(latest_run, \"dataparser_transforms.json\")\n\n    map_cmd = (\n            \"python pixie/voxel/map_pred_to_coords.py \"\n            f\"mapping.pred_path={str(pred_path)} \"\n            f\"mapping.mask_path={str(mask_path)} \"\n            f\"mapping.grid_feature_path={render_output_dir}/clip_features.npz \"\n            f\"mapping.output_path={str(point_cloud_path)} \"\n            f\"mapping.obj_id={cfg.obj_id} \"\n        )\n    override_args = _build_config_overrides(cfg)\n    map_cmd += override_args\n\n    if not os.path.exists(point_cloud_path): \n        run_cmd(map_cmd, \"MAP_PRED_TO_COORDS\")\n    if not cfg.is_objaverse_object and not os.path.exists(world_point_cloud_path):\n        map_cmd += f\" mapping.world_output_path={str(world_point_cloud_path)} \"\n        map_cmd += f\" mapping.dataparser_path={str(dataparser_path)} \"\n        run_cmd(map_cmd, \"MAP_PRED_TO_COORDS\")\n\n    # Create a proper sample directory path that includes the sample ID\n    sample_id = f\"sample_{cfg.physics.sample_id}\"\n    sample_render_output_dir = os.path.join(str(sample_output_dir), sample_id)\n    os.makedirs(sample_render_output_dir, exist_ok=True)\n    \n    return sample_render_output_dir\n\n\ndef format_real_scene_sample(cfg: DictConfig, paths: dict):\n    \"\"\"Format real scene sample.\"\"\"\n    mat_grid = np.zeros((64, 64, 64, 4), dtype=np.float32)\n    out_sample_dir = join_path(paths['render_output'], f\"sample_{cfg.physics.sample_id}\")\n    os.makedirs(out_sample_dir, exist_ok=True)\n\n    np.save(join_path(out_sample_dir, \"material_grid.npy\"), mat_grid)\n\ndef get_material_segmentation_path(cfg: DictConfig, render_output_dir: str,\n                                   paths: dict) -> Tuple[str, str]:\n\n    if cfg.material_mode == \"vlm\":\n        return get_material_vlm_segmentation_path(cfg, render_output_dir, paths)\n    elif cfg.material_mode == \"neural\":\n        return get_material_neural_segmentation_path(cfg, render_output_dir, paths)\n    else:\n        raise ValueError(f\"Invalid material mode: {cfg.material_mode}\")\n"
  },
  {
    "path": "pixie/viz_utils.py",
    "content": "import matplotlib.pyplot as plt\nfrom matplotlib.patches import Patch\nfrom matplotlib import cm\nfrom matplotlib import colors as mcolors\nimport numpy as np\nfrom plyfile import PlyData\nimport random\nfrom pathlib import Path\nfrom pixie.utils import run_cmd\nimport plotly.graph_objects as go\nimport numpy as np\nimport plotly.express as px\nimport json\n\n\ndef viz_cuboid(ax, center, size, color='r', linewidth=1, linestyle='-', alpha=1.0):\n    \"\"\"\n    Plots a 3D wireframe cuboid given center and size.\n\n    Parameters\n    ----------\n    ax : matplotlib Axes3D\n    center : list or array [x, y, z]\n        Center coordinates of the cuboid\n    size : list or array [dx, dy, dz]\n        Half-sizes of the cuboid in each dimension\n    color : color string or RGB tuple\n    linewidth : float\n    linestyle : string\n    alpha : float\n    \"\"\"\n    x_c, y_c, z_c = center\n    dx, dy, dz = size\n    \n    # Calculate the 8 vertices of the cuboid\n    x_min, x_max = x_c - dx, x_c + dx\n    y_min, y_max = y_c - dy, y_c + dy\n    z_min, z_max = z_c - dz, z_c + dz\n    \n    # Define the 12 edges of the cuboid\n    edges = [\n        # Bottom face\n        ([x_min, x_max], [y_min, y_min], [z_min, z_min]),\n        ([x_min, x_min], [y_min, y_max], [z_min, z_min]),\n        ([x_max, x_max], [y_min, y_max], [z_min, z_min]),\n        ([x_max, x_min], [y_max, y_max], [z_min, z_min]),\n        # Top face\n        ([x_min, x_max], [y_min, y_min], [z_max, z_max]),\n        ([x_min, x_min], [y_min, y_max], [z_max, z_max]),\n        ([x_max, x_max], [y_min, y_max], [z_max, z_max]),\n        ([x_max, x_min], [y_max, y_max], [z_max, z_max]),\n        # Vertical edges\n        ([x_min, x_min], [y_min, y_min], [z_min, z_max]),\n        ([x_max, x_max], [y_min, y_min], [z_min, z_max]),\n        ([x_max, x_max], [y_max, y_max], [z_min, z_max]),\n        ([x_min, x_min], [y_max, y_max], [z_min, z_max])\n    ]\n    \n    # Plot each edge\n    for edge in edges:\n        ax.plot(edge[0], edge[1], edge[2], color=color, linewidth=linewidth, linestyle=linestyle, alpha=alpha)\n\n\ndef viz_cuboid_plotly(fig, center, size, color='red', linewidth=2, opacity=1.0, name=None, rotation=None):\n    \"\"\"\n    Adds a 3D wireframe cuboid to a Plotly figure.\n\n    Parameters\n    ----------\n    fig : plotly.graph_objects.Figure or None\n        Existing figure to add cuboid to. If None, creates new figure.\n    center : list or array [x, y, z]\n        Center coordinates of the cuboid\n    size : list or array [dx, dy, dz]\n        Half-sizes of the cuboid in each dimension\n    color : color string or RGB tuple\n        Color of the cuboid edges\n    linewidth : float\n        Width of the cuboid edges\n    opacity : float\n        Opacity of the cuboid (0-1)\n    name : str, optional\n        Name for the cuboid (appears in legend if provided)\n    rotation : None or length-3 list/tuple of floats\n        Euler angles in degrees (rot_x, rot_y, rot_z).  If provided, the\n        cuboid is rotated by rot_x about the X-axis, then rot_y about Y, then\n        rot_z about Z (all in degrees) before plotting.\n    \n    Returns\n    -------\n    fig : plotly.graph_objects.Figure\n        The figure with the cuboid added\n    \"\"\"\n    x_c, y_c, z_c = center\n    dx, dy, dz = size\n    \n    # Calculate the 8 vertices of the cuboid\n    x_min, x_max = x_c - dx, x_c + dx\n    y_min, y_max = y_c - dy, y_c + dy\n    z_min, z_max = z_c - dz, z_c + dz\n    \n    # Define vertices\n    vertices = np.array([\n        [x_min, y_min, z_min],  # 0\n        [x_max, y_min, z_min],  # 1\n        [x_max, y_max, z_min],  # 2\n        [x_min, y_max, z_min],  # 3\n        [x_min, y_min, z_max],  # 4\n        [x_max, y_min, z_max],  # 5\n        [x_max, y_max, z_max],  # 6\n        [x_min, y_max, z_max],  # 7\n    ])\n    \n    # --- Apply rotation if requested ---------------------------------------\n    if rotation is not None:\n        # Expect rotation = [rot_x, rot_y, rot_z], in degrees\n        rot = np.asarray(rotation, dtype=float)\n        if rot.shape != (3,):\n            raise ValueError(\"`rotation` must be a length‐3 iterable: [rot_x, rot_y, rot_z] in degrees.\")\n\n        # Convert degrees → radians\n        rx, ry, rz = np.deg2rad(rot)\n\n        # Rotation matrix around X-axis\n        Rx = np.array([\n            [1,          0,           0],\n            [0, np.cos(rx), -np.sin(rx)],\n            [0, np.sin(rx),  np.cos(rx)]\n        ])\n\n        # Rotation matrix around Y-axis\n        Ry = np.array([\n            [ np.cos(ry), 0, np.sin(ry)],\n            [          0, 1,          0],\n            [-np.sin(ry), 0, np.cos(ry)]\n        ])\n\n        # Rotation matrix around Z-axis\n        Rz = np.array([\n            [np.cos(rz), -np.sin(rz), 0],\n            [np.sin(rz),  np.cos(rz), 0],\n            [         0,           0, 1]\n        ])\n\n        # Combined rotation: first X, then Y, then Z\n        R = Rz @ Ry @ Rx\n        \n        # Translate to origin, rotate, then translate back\n        center_array = np.array(center)\n        vertices = vertices - center_array  # Translate to origin\n        vertices = vertices @ R.T            # Apply rotation\n        vertices = vertices + center_array   # Translate back\n    # ------------------------------------------------------------------------\n    \n    # Define edges as pairs of vertex indices\n    edges = [\n        # Bottom face\n        [0, 1], [1, 2], [2, 3], [3, 0],\n        # Top face\n        [4, 5], [5, 6], [6, 7], [7, 4],\n        # Vertical edges\n        [0, 4], [1, 5], [2, 6], [3, 7]\n    ]\n    \n    # Create edge traces\n    edge_trace = []\n    for edge in edges:\n        x = [vertices[edge[0]][0], vertices[edge[1]][0], None]\n        y = [vertices[edge[0]][1], vertices[edge[1]][1], None]\n        z = [vertices[edge[0]][2], vertices[edge[1]][2], None]\n        edge_trace.extend([x, y, z])\n    \n    # Flatten the coordinates\n    x_edges = []\n    y_edges = []\n    z_edges = []\n    for i in range(0, len(edge_trace), 3):\n        x_edges.extend(edge_trace[i])\n        y_edges.extend(edge_trace[i+1])\n        z_edges.extend(edge_trace[i+2])\n    \n    # Create the 3D line trace for all edges\n    cuboid_trace = go.Scatter3d(\n        x=x_edges,\n        y=y_edges,\n        z=z_edges,\n        mode='lines',\n        line=dict(color=color, width=linewidth),\n        opacity=opacity,\n        name=name,\n        showlegend=bool(name)  # Only show in legend if name is provided\n    )\n    \n    # Handle figure creation or addition\n    if fig is None:\n        fig = go.Figure(data=[cuboid_trace])\n        fig.update_layout(\n            scene=dict(\n                camera=dict(eye=dict(x=1.5, y=0, z=0)),\n                aspectmode=\"data\",\n                dragmode=\"orbit\",\n            ),\n            margin=dict(l=0, r=0, b=0, t=30),\n        )\n    else:\n        fig.add_trace(cuboid_trace)\n    \n    return fig\n\n\ndef viz_plotly(\n        points,\n        colors,\n        *,\n        discrete_feature=False,\n        continuous_feature=False,\n        cmap=\"turbo\",          # Plotly's built-in name; can also be a list/tuple\n        vmin=None,\n        vmax=None,\n        marker_size=2,\n        opacity=0.8,\n        rotation=None,           # <-- New: [rot_x, rot_y, rot_z] in degrees\n        fig=None,               # <-- New: existing figure to add trace to\n        show=True,              # <-- New: whether to show the figure\n        name=None,              # <-- New: trace name for legend\n    ):\n    \"\"\"\n    3-D scatter with Plotly, with an optional rotation of the point cloud.\n\n    Parameters\n    ----------\n    points : (N,3) array-like\n    colors : array-like –  1-D values or RGB triplets\n    discrete : bool       – treat `colors` as class labels\n    continuous : bool     – treat `colors` as scalars\n    cmap : str | list     – Plotly colorscale (only used if `continuous`)\n    vmin, vmax : float    – explicit colour-range limits (continuous) or\n                            int limits (discrete).  If None they are inferred.\n    marker_size : int/float\n    opacity : float\n    rotation : None or length-3 list/tuple of floats\n        Euler angles in degrees (rot_x, rot_y, rot_z).  If provided, each\n        point is rotated by rot_x about the X-axis, then rot_y about Y, then\n        rot_z about Z (all in degrees) before plotting.\n    fig : plotly.graph_objects.Figure, optional\n        Existing figure to add trace to. If None, creates new figure.\n    show : bool\n        Whether to display the figure. Default True.\n    name : str, optional\n        Name for the trace (appears in legend if provided).\n    \"\"\"\n    points = np.asarray(points)\n    colors = np.asarray(colors)\n\n    # --- Apply rotation if requested ---------------------------------------\n    if rotation is not None:\n        # Expect rotation = [rot_x, rot_y, rot_z], in degrees\n        rot = np.asarray(rotation, dtype=float)\n        if rot.shape != (3,):\n            raise ValueError(\"`rotation` must be a length‐3 iterable: [rot_x, rot_y, rot_z] in degrees.\")\n\n        # Convert degrees → radians\n        rx, ry, rz = np.deg2rad(rot)\n\n        # Rotation matrix around X-axis\n        Rx = np.array([\n            [1,          0,           0],\n            [0, np.cos(rx), -np.sin(rx)],\n            [0, np.sin(rx),  np.cos(rx)]\n        ])\n\n        # Rotation matrix around Y-axis\n        Ry = np.array([\n            [ np.cos(ry), 0, np.sin(ry)],\n            [          0, 1,          0],\n            [-np.sin(ry), 0, np.cos(ry)]\n        ])\n\n        # Rotation matrix around Z-axis\n        Rz = np.array([\n            [np.cos(rz), -np.sin(rz), 0],\n            [np.sin(rz),  np.cos(rz), 0],\n            [         0,           0, 1]\n        ])\n\n        # Combined rotation: first X, then Y, then Z\n        R = Rz @ Ry @ Rx\n        # Apply to all points\n        points = points @ R.T\n    # ------------------------------------------------------------------------\n\n    if discrete_feature:\n        colors_int = colors.astype(int)\n        if vmin is None:\n            vmin = int(colors_int.min())\n        if vmax is None:\n            vmax = int(colors_int.max())\n\n        color_discrete_map = px.colors.qualitative.Plotly\n        # Build an evenly-spaced colourscale for integers\n        colorscale = [\n            [(i / max(1, len(color_discrete_map) - 1)), col]\n            for i, col in enumerate(color_discrete_map)\n        ]\n\n        marker_kw = dict(\n            size=marker_size,\n            color=colors_int,\n            colorscale=colorscale,\n            cmin=vmin,\n            cmax=vmax,\n            colorbar=dict(title=\"Class ID\"),\n            opacity=opacity,\n        )\n\n    elif continuous_feature:\n        if vmin is None:\n            vmin = float(colors.min())\n        if vmax is None:\n            vmax = float(colors.max())\n\n        marker_kw = dict(\n            size=marker_size,\n            color=colors,\n            colorscale=cmap,\n            cmin=vmin,\n            cmax=vmax,\n            colorbar=dict(title=\"Value\"),\n            opacity=opacity,\n        )\n\n    else:  # treat `colors` as literal RGB or named colours (no colourbar)\n        marker_kw = dict(size=marker_size, color=colors, opacity=opacity)\n\n    # Create scatter trace\n    scatter = go.Scatter3d(\n        x=points[:, 0],\n        y=points[:, 1],\n        z=points[:, 2],\n        mode=\"markers\",\n        marker=marker_kw,\n        name=name,\n    )\n\n    # Handle figure creation or addition\n    if fig is None:\n        fig = go.Figure(data=[scatter])\n        fig.update_layout(\n            scene=dict(\n                camera=dict(eye=dict(x=1.5, y=0, z=0)),\n                aspectmode=\"data\",\n                dragmode=\"orbit\",\n            ),\n            margin=dict(l=0, r=0, b=0, t=30),\n        )\n    else:\n        fig.add_trace(scatter)\n\n    if show:\n        fig.show()\n    \n    return fig\n\n\n\ndef distinct_hsv_palette(n: int, seed: int = 42):\n    \"\"\"Return *n* well-spaced RGB colours (0-1 floats).\"\"\"\n    random.seed(seed)\n    base = [\n        (0.00, 0.64, 0.73),  # cyan-ish\n        (0.686, 0.765, 0.149),  # lime\n        (0.80, 0.25, 0.25),  # red\n        (0.85, 0.40, 0.85),  # magenta\n        (0.212, 0.400, 0.221),  # dark-green\n        (0.15, 0.30, 0.85),  # blue\n        (0.37, 0.17, 0.85),  # purple\n        (0.80, 0.50, 0.00),  # orange\n        (0.85, 0.68, 0.00),  # yellow\n        (0.40, 0.75, 0.75),  # teal\n        (0.68, 0.50, 0.86),  # lavender\n        (0.78, 0.50, 0.30),  # coral\n    ]\n    # recycle if n > len(base)\n    return (base * ((n + len(base) - 1) // len(base)))[:n]\n\n\nPALETTE_MAP = {}  # hook for future warm-/cool palettes etc.\n\n\ndef get_color_for_part_label(part_label: int,\n                             num_part_label: int = 8,\n                             *,\n                             palette_type: str = 'default'):\n    \"\"\"Return an RGB colour (0-1) for *part_label* using a fixed palette.\"\"\"\n    if palette_type != 'default' and palette_type in PALETTE_MAP:\n        palette = PALETTE_MAP[palette_type]\n        if part_label >= len(palette):  # fall back if palette runs short\n            palette = distinct_hsv_palette(num_part_label)\n    else:\n        palette = distinct_hsv_palette(num_part_label)\n\n    # ------------------------------------------------------------------\n    # Handle \"invalid\" or sentinel labels (e.g. -1 from nearest-neighbour\n    # mapping when no match is found).  We show them in a neutral grey so\n    # they are still visible but clearly distinguished from valid labels.\n    # ------------------------------------------------------------------\n    if part_label < 0:\n        return (0.6, 0.6, 0.6)  # light grey (0-1 range)\n\n    if part_label >= len(palette):\n        raise ValueError(\n            f\"Part label {part_label} ≥ palette length {len(palette)}\")\n    return palette[part_label]\n\n\ndef _prep_colors(c,\n                 *,\n                 cmap='viridis',\n                 vmin=None,\n                 vmax=None,\n                 discrete=False,\n                 palette_type='default'):\n    \"\"\"\n    Accepts\n        • Nx3 RGB                     → returns unchanged RGB\n        • N scalar floats/int         → continuous colormap\n        • N integer labels (discrete) → palette colours + legend helpers\n    Returns\n        rgb (N,3), is_scalar, norm, legend_info\n        legend_info is None for continuous; otherwise (uniq_labels, colour_list)\n    \"\"\"\n    c = np.asarray(c)\n\n    # ---------- discrete labels ---------- #\n    if discrete:\n        if c.ndim != 1:\n            raise ValueError(\n                \"Discrete mode expects a 1-D array of integer labels.\")\n        labels = c.astype(int)\n        uniq = np.unique(labels)\n        # palette size = max label idx + 1  (robust if labels not 0…K−1)\n        rgb = np.array([\n            get_color_for_part_label(lbl,\n                                     num_part_label=int(labels.max()) + 1,\n                                     palette_type=palette_type)\n            for lbl in labels\n        ],\n                       dtype=float)\n        legend_info = (uniq, [\n            get_color_for_part_label(lbl,\n                                     num_part_label=int(labels.max()) + 1,\n                                     palette_type=palette_type) for lbl in uniq\n        ])\n        return rgb, False, None, legend_info\n\n    # ---------- continuous scalars ---------- #\n    if c.ndim == 1:\n        vmin = c.min() if vmin is None else vmin\n        vmax = c.max() if vmax is None else vmax\n        norm = mcolors.Normalize(vmin, vmax, clip=True)\n        rgb = cm.get_cmap(cmap)(norm(c))[:, :3]\n        return rgb, True, norm, None\n\n    # ---------- already RGB ---------- #\n    if c.max() > 1.0:  # assume 0-255 ints\n        c = c / 255.0\n    return c, False, None, None\n\n\n\n# ───────────────────────────────────────────────────────────\n#  3-D scatter with scalar colour-bar  OR  label legend\n# ───────────────────────────────────────────────────────────\ndef viz(\n    points,\n    colors=None,\n    ax=None,\n    *,\n    elev=0,\n    azim=0,\n    size=1,\n    cmap=\"turbo\",\n    title=None,\n    vmin=None,\n    vmax=None,\n    discrete=False,\n    palette_type=\"default\",\n    show_colorbar=True,\n    cbar_kwargs=None,\n    label_names=None,\n    scene_bounds=None,\n    rotation=None,\n):\n    \"\"\"\n    3-D scatter that automatically adds:\n\n      • a colour-bar (continuous scalar data), or\n      • a legend   (discrete labels).\n\n    Parameters\n    ----------\n    points : (N,3) float\n    colors : (N,3) RGB | (N,) scalars | (N,) int labels\n    discrete       : True → treat *colors* as integer part labels\n    palette_type   : choose alternative palettes (future-proof)\n    label_names    : optional list/array mapping label-id → text in legend\n    rotation : None or length-3 list/tuple of floats\n        Euler angles in degrees (rot_x, rot_y, rot_z).  If provided, each\n        point is rotated by rot_x about the X-axis, then rot_y about Y, then\n        rot_z about Z (all in degrees) before plotting.\n    \"\"\"\n\n    # --- figure / axis boilerplate -----------------------------------------\n    created_fig = False\n    if ax is None:\n        fig = plt.figure()\n        ax = fig.add_subplot(projection=\"3d\")\n        created_fig = True\n    else:\n        fig = ax.get_figure()\n\n    # ------------------------------------------------------------------\n    # Optional clipping to an axis-aligned bounding box (scene_bounds)\n    # scene_bounds should be ((xmin, ymin, zmin), (xmax, ymax, zmax)).\n    # Points outside are discarded from the plot.  Axis limits are set so\n    # the resulting view is nicely framed to that box.\n    # ------------------------------------------------------------------\n\n    pts = np.asarray(points)\n    if colors is None:\n        cols = np.full((len(points), 3), 0.5)  # Gray color for all points\n    else:\n        cols = colors\n    \n    # --- Apply rotation if requested ---------------------------------------\n    if rotation is not None:\n        # Expect rotation = [rot_x, rot_y, rot_z], in degrees\n        rot = np.asarray(rotation, dtype=float)\n        if rot.shape != (3,):\n            raise ValueError(\"`rotation` must be a length‐3 iterable: [rot_x, rot_y, rot_z] in degrees.\")\n\n        # Convert degrees → radians\n        rx, ry, rz = np.deg2rad(rot)\n\n        # Rotation matrix around X-axis\n        Rx = np.array([\n            [1,          0,           0],\n            [0, np.cos(rx), -np.sin(rx)],\n            [0, np.sin(rx),  np.cos(rx)]\n        ])\n\n        # Rotation matrix around Y-axis\n        Ry = np.array([\n            [ np.cos(ry), 0, np.sin(ry)],\n            [          0, 1,          0],\n            [-np.sin(ry), 0, np.cos(ry)]\n        ])\n\n        # Rotation matrix around Z-axis\n        Rz = np.array([\n            [np.cos(rz), -np.sin(rz), 0],\n            [np.sin(rz),  np.cos(rz), 0],\n            [         0,           0, 1]\n        ])\n\n        # Combined rotation: first X, then Y, then Z\n        R = Rz @ Ry @ Rx\n        # Apply to all points\n        pts = pts @ R.T\n    # ------------------------------------------------------------------------\n    \n    if scene_bounds is not None:\n        bmin = np.asarray(scene_bounds[0])\n        bmax = np.asarray(scene_bounds[1])\n        msk = np.all((pts >= bmin) & (pts <= bmax), axis=1)\n        if msk.any():\n            pts = pts[msk]\n            cols = cols[msk]\n\n    # --- colour handling ----------------------------------------------------\n    rgb, is_scalar, norm, legend_info = _prep_colors(\n        cols,\n        cmap=cmap,\n        vmin=vmin,\n        vmax=vmax,\n        discrete=discrete,\n        palette_type=palette_type,\n    )\n\n    sc = ax.scatter(pts[:, 0], pts[:, 1], pts[:, 2], s=size, c=rgb)\n    ax.view_init(elev=elev, azim=azim)\n    if title:\n        ax.set_title(title)\n\n    # --- continuous colour-bar ---------------------------------------------\n    if is_scalar and show_colorbar:\n        sm = cm.ScalarMappable(cmap=cmap, norm=norm)\n        sm.set_array([])\n        kw = dict(shrink=0.75, pad=0.02)\n        if cbar_kwargs:\n            kw.update(cbar_kwargs)\n        fig.colorbar(sm, ax=ax, **kw)\n\n    # --- discrete legend ----------------------------------------------------\n    if discrete and legend_info is not None:\n        uniq_labels, uniq_cols = legend_info\n        handles = [Patch(facecolor=col, edgecolor=\"k\") for col in uniq_cols]\n        if label_names is not None:\n            texts = [label_names[int(i)] for i in uniq_labels]\n        else:\n            texts = [str(int(i)) for i in uniq_labels]\n        # Keep legend tight to the plot; feel free to tweak loc/fontsize\n        ax.legend(\n            handles,\n            texts,\n            title=\"Part label\",\n            loc=\"upper center\",\n            ncols=3,\n              bbox_to_anchor=(0.5, 1.0),\n            borderaxespad=0.2,\n            frameon=False,\n        )\n\n    # Apply axis limits if scene_bounds provided\n    if scene_bounds is not None:\n        ax.set_xlim(bmin[0], bmax[0])\n        ax.set_ylim(bmin[1], bmax[1])\n        ax.set_zlim(bmin[2], bmax[2])\n\n    return ax\n\n\ndef viz_pred(pred, mask, ax=None):\n    \"\"\"\n    pred is a numpy array of shape (11, D, D, D)\n    \"\"\"\n    seg = pred[3:, :]\n    labels = seg.argmax(axis=0)    # (64, 64, 64)\n\n    # 2) Convert mask to boolean and keep only voxels the mask says are valid\n    mask_bool = mask.astype(bool)  # True = plot it, False = ignore it\n\n    # 3) Coordinates of masked voxels\n    xs, ys, zs = np.nonzero(mask_bool)        # each is 1‑D and has the same length\n    colors     = labels[mask_bool]            # colour = class‑id of each voxel\n    pos = np.stack([xs, ys, zs], axis=-1)\n\n    viz(pos, colors, ax=ax,\n    discrete=True)\n\n\ndef load_semantic_ply(ply_path, normalize=True, is_dreamphysics=False):\n    \"\"\"Load semantic colors and positions from the PLY file.\"\"\"\n    ply_data = PlyData.read(ply_path)\n    vertex_elem = ply_data[\"vertex\"]  # PlyElement\n    vertex_data = vertex_elem.data  # <-- structured NumPy array\n\n    # positions\n    positions = np.column_stack(\n        (vertex_data[\"x\"], vertex_data[\"y\"], vertex_data[\"z\"]))\n\n    features = {}\n    if \"part_label\" in vertex_data.dtype.names:\n        features[\"part_label\"] = vertex_data[\"part_label\"]\n    if \"E\" in vertex_data.dtype.names:\n        features[\"E\"] = vertex_data[\"E\"]\n    if \"density\" in vertex_data.dtype.names:\n        features[\"density\"] = vertex_data[\"density\"]\n    if \"nu\" in vertex_data.dtype.names:\n        features[\"nu\"] = vertex_data[\"nu\"]\n    if \"material_id\" in vertex_data.dtype.names:\n        features[\"material_id\"] = vertex_data[\"material_id\"]\n\n    nan_mask = np.isnan(positions).any(axis=1)\n    if np.any(nan_mask):\n        num_nan = np.sum(nan_mask)\n        total = len(positions)\n        print(\n            f\"⚠️ Warning: Found {num_nan}/{total} points with NaN coordinates in {ply_path}. Removing them.\"\n        )\n\n        positions = positions[~nan_mask]\n        for key in features:\n            features[key] = features[key][~nan_mask]\n\n    if is_dreamphysics:\n        if \"E\" in features:\n            features[\"E\"] *= 1e7\n    if normalize:\n        if \"E\" in features:\n            features[\"E\"] = np.log(features[\"E\"])\n        if \"density\" in features:\n            features[\"density\"] = np.log(features[\"density\"])\n\n    return positions, features\n\n\ndef compile_video(frames_dir: Path, out_mp4: Path, fps: float ):\n    \"\"\"Stitches PNG frames into an MP4 video using ffmpeg.\"\"\"\n    txt = frames_dir / \"inputs.txt\"\n    # Ensure frames are sorted correctly, assuming 'frame_xxxxx.png' format\n    frames = sorted(frames_dir.glob('*.png'), key=lambda p: int(p.stem.split('_')[-1]))\n    txt.write_text(\"\\n\".join([f\"file '{f.name}'\" for f in frames]))\n    ffmpeg_cmd = \"ffmpeg\" \n    cmd = (\n        f\"{ffmpeg_cmd} -y -r {fps} -f concat -safe 0 -i {txt} \"\n        f\"-c:v libx264 -pix_fmt yuv420p -preset slow -crf 18 \"\n        f\"'{out_mp4}'\"  # Use quotes for safety\n    )\n    print(f\"🎞️  Creating video: {cmd}\")\n    run_cmd(cmd, step_name=f\"compile_video {out_mp4}\")"
  },
  {
    "path": "pixie/vlm_labeler/__init__.py",
    "content": ""
  },
  {
    "path": "pixie/vlm_labeler/vlm_data_filtering.py",
    "content": "import os\nimport glob\nimport json\nfrom concurrent.futures import ProcessPoolExecutor\nfrom typing import Dict, Tuple, Optional\nimport hydra\nfrom omegaconf import DictConfig\nfrom tqdm import tqdm\nimport logging\nfrom pixie.utils import resolve_paths, load_json, save_json, get_vlm_api_key, set_logger\nfrom vlmx.agent import Agent, AgentConfig\nfrom PIL import Image\n\n\nclass DataFilteringAgent(Agent):\n    \"\"\"Agent for filtering rendered images based on appropriateness.\"\"\"\n    \n    OUT_RESULT_PATH = \"vlm_results.json\"\n    \n    def __init__(self, cfg: AgentConfig, class_name: str, search_terms: str):\n        super().__init__(cfg)\n        self.class_name = class_name\n        self.search_terms = search_terms\n    \n    def _make_system_instruction(self):\n        return f\"\"\"\n        We need to select some images of the classes: {self.class_name}. This class includes objects like {self.search_terms}. \n        We will provide you some image rendered from the 3d model. You need to either return True or False. \n        \n        Return False to reject the image as inappropriate for the video game development. Some common reasons for rejection:\n        - The image doesn't clearly depict the object class\n        - The image is too dark or too bright or too blurry or has some low other qualities. Remember, we want high-quality training data.\n        - The image contains other things in addition to the object. REMEMBER, we only want images that depict cleanly ONE SINGLE OBJECT belong to one of the classes. \n          But you also need to use your common sense and best judgement. For example, for class like \"flowers\", the object might include a vase of flowers \n          (you rarely see a single flower in the wild). So you should return True in this case.\n        - We do want diversity in our dataset collection. So even if the texture of the object is a bit un-usual, as long as you can recognize it as \n          belonging to the class / search terms, you should return True. Only remove low-quality assets.\n\n        We'll be using the 3d models to learn physic parameters like material and young modulus to simulate the physics of the object.\n        E.g., the tree swaying in the wind or thing being dropped from a height. Therefore, you need to decide if the image depicts an object \n        that is likely to be used in a physics simulation.\n\n        The return format is\n        ```json\n        {{\n        \"is_appropriate\": true (or false),\n        \"reason\": \"reason for the decision\"\n        }}\n        ```\n        \"\"\"\n\n    def _make_prompt_parts(self, image_path: str):\n        return [\"The image is :\", Image.open(image_path)]\n\n    def parse_response(self, response):\n        json_str = response.text.strip().strip(\"```json\").strip()\n        parsed_response = json.loads(json_str, strict=False)\n        save_json(parsed_response, os.path.join(self.cfg.out_dir, self.OUT_RESULT_PATH))\n        return parsed_response\n\n\ndef get_rendered_images(render_base_dir: str, obj_class: Optional[str] = None) -> Dict[str, str]:\n    \"\"\"Get dictionary mapping object IDs to their rendered image paths.\"\"\"\n    result_dict = {}\n    \n    # Get categories to process\n    if obj_class:\n        categories = [obj_class]\n        base_path = os.path.join(render_base_dir, obj_class)\n    else:\n        categories = [os.path.basename(f.rstrip('/')) for f in sorted(glob.glob(f\"{render_base_dir}/*/\"))]\n    \n    # Iterate through categories\n    for category in categories:\n        category_path = os.path.join(render_base_dir, category) if not obj_class else base_path\n        \n        # Get all object folders (UIDs)\n        for obj_folder in sorted(glob.glob(f\"{category_path}/*/\")):\n            obj_id = os.path.basename(obj_folder.rstrip('/'))\n            \n            # Find PNG files\n            png_files = sorted(glob.glob(f\"{obj_folder}/*.png\"))\n            if png_files:\n                unique_id = f\"{category}/{obj_id}\"\n                result_dict[unique_id] = png_files[0]  # Use first image\n    \n    return result_dict\n\n\ndef process_single_image(args: Tuple) -> Tuple[str, dict]:\n    \"\"\"Process a single image with VLM.\"\"\"\n    obj_id, image_path, output_dir, api_key, class_name, search_terms, overwrite, model_name = args\n    \n    try:\n        agent = DataFilteringAgent(\n            AgentConfig(\n                model_name=model_name,\n                out_dir=os.path.join(output_dir, obj_id),\n                api_key=api_key\n            ),\n            class_name=class_name,\n            search_terms=search_terms\n        )\n        \n        agent.generate_prediction(image_path, overwrite=overwrite)\n        response = agent.load_prediction()\n        return obj_id, response\n        \n    except Exception as e:\n        logging.error(f\"Error processing {obj_id}: {e}\")\n        return obj_id, {\n            \"is_appropriate\": None,\n            \"error\": str(e),\n            \"error_type\": type(e).__name__,\n            \"status\": \"error\"\n        }\n\n\ndef analyze_results(results: Dict[str, dict]) -> None:\n    \"\"\"Analyze and print VLM filtering results.\"\"\"\n    total = len(results)\n    successful = sum(1 for r in results.values() if r.get(\"is_appropriate\") is not None)\n    errors = sum(1 for r in results.values() if r.get(\"is_appropriate\") is None)\n    appropriate = sum(1 for r in results.values() if r.get(\"is_appropriate\") is True)\n    inappropriate = sum(1 for r in results.values() if r.get(\"is_appropriate\") is False)\n    \n    # Print overall statistics\n    logging.info(\"\\nProcessing Statistics:\")\n    logging.info(f\"Total images: {total}\")\n    logging.info(f\"Successfully processed: {successful} ({successful/total*100:.1f}%)\")\n    logging.info(f\"Processing errors: {errors} ({errors/total*100:.1f}%)\")\n    \n    if successful > 0:\n        logging.info(f\"Appropriate: {appropriate} ({appropriate/successful*100:.1f}% of successful)\")\n        logging.info(f\"Inappropriate: {inappropriate} ({inappropriate/successful*100:.1f}% of successful)\")\n    \n    # Analyze by category\n    stats_by_category = {}\n    for obj_id, result in results.items():\n        category = obj_id.split('/')[0]\n        if category not in stats_by_category:\n            stats_by_category[category] = {\"total\": 0, \"appropriate\": 0, \"inappropriate\": 0, \"errors\": 0}\n        \n        stats_by_category[category][\"total\"] += 1\n        if result.get(\"is_appropriate\") is True:\n            stats_by_category[category][\"appropriate\"] += 1\n        elif result.get(\"is_appropriate\") is False:\n            stats_by_category[category][\"inappropriate\"] += 1\n        else:\n            stats_by_category[category][\"errors\"] += 1\n    \n    logging.info(\"\\nResults by category:\")\n    for category, stats in stats_by_category.items():\n        logging.info(f\"  {category}:\")\n        logging.info(f\"    Total: {stats['total']}\")\n        if stats['total'] > 0:\n            logging.info(f\"    Appropriate: {stats['appropriate']} ({stats['appropriate']/stats['total']*100:.1f}%)\")\n            logging.info(f\"    Inappropriate: {stats['inappropriate']} ({stats['inappropriate']/stats['total']*100:.1f}%)\")\n            logging.info(f\"    Errors: {stats['errors']} ({stats['errors']/stats['total']*100:.1f}%)\")\n\n\ndef process_category(category: str, rendered_images: Dict[str, str], cfg: DictConfig, \n                    filter_cfg: DictConfig, category_dict: dict, api_key: str) -> None:\n    \"\"\"Process a single category of images.\"\"\"\n    # Set output directory for this category\n    output_dir = os.path.join(cfg.paths.vlm_filtering_results_dir, category)\n    \n    # Check if already processed and not overwriting\n    results_file = os.path.join(output_dir, \"all_results.json\")\n    if os.path.exists(results_file) and not filter_cfg.overwrite:\n        logging.info(f\"Category {category} already processed, skipping...\")\n        return\n    \n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Get search terms for this category\n    search_terms = \" \".join(category_dict.get(category, []))\n    \n    # Build process arguments for this category\n    process_args = [\n        (obj_id, image_path, output_dir, api_key, category,\n         search_terms, filter_cfg.overwrite, filter_cfg.model_name)\n        for obj_id, image_path in rendered_images.items()\n    ]\n    \n    logging.info(f\"Processing {len(process_args)} images for category: {category}\")\n    \n    # Process in parallel\n    num_workers = filter_cfg.num_workers or os.cpu_count()\n    results = {}\n    \n    with ProcessPoolExecutor(max_workers=num_workers) as executor:\n        for obj_id, response in tqdm(\n            executor.map(process_single_image, process_args),\n            total=len(process_args),\n            desc=f\"Processing {category}\"\n        ):\n            results[obj_id] = response\n    \n    # Save results\n    save_json(results, results_file)\n    \n    # Save error details if any\n    error_details = {\n        obj_id: result for obj_id, result in results.items() \n        if result.get(\"is_appropriate\") is None\n    }\n    if error_details:\n        save_json(error_details, os.path.join(output_dir, \"error_details.json\"))\n    \n    # Log category statistics\n    successful = sum(1 for r in results.values() if r.get(\"is_appropriate\") is not None)\n    appropriate = sum(1 for r in results.values() if r.get(\"is_appropriate\") is True)\n    logging.info(f\"Category {category}: {appropriate}/{successful} appropriate\")\n\n\n@hydra.main(version_base=None, config_path=\"../../config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Main function to filter rendered images using VLM.\"\"\"\n    set_logger()\n    cfg = resolve_paths(cfg)\n    \n    filter_cfg = cfg.data_curation.vlm_filtering\n    \n    # Load category dictionary\n    category_dict = load_json(cfg.paths.category_dict_path)\n    \n    categories_to_process = list(category_dict.keys())\n    # Determine categories to process\n    if filter_cfg.obj_class:\n        assert filter_cfg.obj_class in category_dict, \\\n            f\"Category '{filter_cfg.obj_class}' not found in category dictionary\"\n        categories_to_process = [filter_cfg.obj_class]\n    \n    # Handle analyze_only mode\n    if filter_cfg.analyze_only:\n        all_results = {}\n        for category in categories_to_process:\n            results_file = os.path.join(cfg.paths.vlm_filtering_results_dir, \n                                       category, \"all_results.json\")\n            if os.path.exists(results_file):\n                category_results = load_json(results_file)\n                all_results.update(category_results)\n            else:\n                logging.warning(f\"No results found for category: {category}\")\n        \n        analyze_results(all_results)\n        return\n    \n    # Get API key\n    api_key = get_vlm_api_key(cfg, filter_cfg.model_name)\n    assert api_key, \"No API key found for VLM\"\n    \n    # Process each category\n    for category in categories_to_process:\n        logging.info(f\"\\nProcessing category: {category}\")\n        \n        # Get rendered images for this category\n        rendered_images = get_rendered_images(\n            cfg.paths.render_outputs_base_dir,\n            category  # Process one category at a time\n        )\n        \n        if not rendered_images:\n            logging.warning(f\"No rendered images found for category: '{category}' in '{cfg.paths.render_outputs_base_dir}'\")\n            continue\n        \n        process_category(category, rendered_images, cfg, filter_cfg, \n                        category_dict, api_key)\n    \n    # After processing all categories, show combined statistics\n    logging.info(\"\\n\" + \"=\"*50)\n    logging.info(\"=\"*50)\n    \n    all_results = {}\n    for category in categories_to_process:\n        results_file = os.path.join(cfg.paths.vlm_filtering_results_dir, \n                                   category, \"all_results.json\")\n        if os.path.exists(results_file):\n            category_results = load_json(results_file)\n            all_results.update(category_results)\n    \n    analyze_results(all_results)\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "pixie/vlm_labeler/vlm_parse_seg_critic.py",
    "content": "import os\nimport argparse\nimport glob\nimport os.path as osp\nfrom vlmx.utils import save_json, load_json\nfrom vlmx.agent import Agent, AgentConfig\nfrom tqdm import tqdm\nimport json\nfrom PIL import Image\nimport logging\nfrom vlmx.utils import seed_everything\nimport shutil\nfrom pixie.utils import set_logger\nimport numpy as np\n\n\ndef run_vlm_parse_seg_critic(obj_id: str, vlm_seg_results_dir: str, \n                            vlm_seg_critic_results_dir: str, vlm_seg_mat_sample_results_dir: str,\n                         model_name: str = \"gemini-2.0-flash\",\n                            api_key: str = \"\"):\n    \"\"\"Run VLM parse segmentation critic to finalize results.\"\"\"\n    \n    seed_everything(0)\n\n\n    # Load critic results\n    critic_chosen_path = os.path.join(vlm_seg_critic_results_dir, obj_id, \"vlm_critic_results.json\")\n    if not os.path.exists(critic_chosen_path):\n        logging.error(f\"Critic results not found at {critic_chosen_path}\")\n        return\n        \n    critic_chosen_results = load_json(critic_chosen_path)\n    \n    # Determine best query\n    try:\n        best_query_id = int(critic_chosen_results[\"best_query\"].split(\"_\")[1])\n    except:\n        best_score = -1\n        best_query_id = None\n        for query_key, eval_data in critic_chosen_results[\"query_evaluations\"].items():\n            score = eval_data[\"score\"]\n            if score > best_score:\n                best_score = score\n                best_query_id = int(query_key.split(\"_\")[1])\n        if best_query_id is None:\n            best_query_id = 0\n    \n    # Load VLM results\n    json_path = os.path.join(vlm_seg_results_dir, obj_id, \"vlm_results.json\")\n    if not os.path.exists(json_path):\n        logging.error(f\"VLM results not found at {json_path}\")\n        return\n        \n    old_json = load_json(json_path)\n    best_query = old_json[\"all_queries\"][best_query_id]\n    logging.info(f\">> BEST_QUERY: {best_query}\")\n    \n    # Process material samples\n    sample_mat_dir = os.path.join(vlm_seg_mat_sample_results_dir, obj_id)\n    if not os.path.exists(sample_mat_dir):\n        logging.error(f\"Sample material directory not found: {sample_mat_dir}\")\n        return\n        \n    num_sample_mat = len([d for d in os.listdir(sample_mat_dir) if d.startswith(\"sample_\")])\n    logging.info(f\">> NUM_SAMPLE_MAT: {num_sample_mat}\")\n    \n    for i in range(num_sample_mat):\n        # Make a copy of the json file\n        new_json_path = os.path.join(sample_mat_dir, f\"sample_{i}\", \"chosen_vlm_results.json\")\n        sample_json_path = os.path.join(sample_mat_dir, f\"sample_{i}\", \"vlm_results.json\")\n        \n        if not os.path.exists(sample_json_path):\n            logging.warning(f\"Sample JSON not found: {sample_json_path}\")\n            continue\n            \n        shutil.copy(sample_json_path, new_json_path)\n        sample_json = load_json(sample_json_path)\n\n        # Replace the keys in material_dict with the best query\n        old_keys = list(sample_json[\"material_dict\"].keys())\n        new_material_dict = {}\n        for old_key, new_key in zip(old_keys, best_query):\n            new_material_dict[new_key] = sample_json[\"material_dict\"][old_key]\n        sample_json[\"material_dict\"] = new_material_dict\n        sample_json[\"all_queries\"] = [best_query]\n        save_json(sample_json, new_json_path)\n        \n        logging.info(f\"Updated material sample {i} with best query\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--obj_id\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_results_dir\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_critic_results_dir\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_mat_sample_results_dir\", type=str, required=True)\n    parser.add_argument(\"--model_name\", type=str, default=\"gemini-2.0-flash\")\n    parser.add_argument(\"--api_key\", type=str, default=\"\")\n    args = parser.parse_args()\n    \n    set_logger()\n    run_vlm_parse_seg_critic(\n        obj_id=args.obj_id,\n        vlm_seg_results_dir=args.vlm_seg_results_dir,\n        vlm_seg_critic_results_dir=args.vlm_seg_critic_results_dir,\n        vlm_seg_mat_sample_results_dir=args.vlm_seg_mat_sample_results_dir,\n        model_name=args.model_name,\n        api_key=args.api_key\n    )"
  },
  {
    "path": "pixie/vlm_labeler/vlm_phys_judge.py",
    "content": "import os\nimport argparse\nimport logging\nfrom typing import List\nfrom vlmx.agent import Agent, AgentConfig\nfrom vlmx.utils import save_json, join_path, get_frames_from_video\nfrom PIL import Image  # noqa: F401  # (import required for type checking in prompt utils)\nimport json\nfrom pixie.utils import str2bool, set_logger\n\n\nPHYSICS_JUDGE_SYSTEM_INSTRUCTION = \"\"\"\nYou are a physics-realism judge for animation videos.\n\nYou will be shown several candidate animations of the SAME 3D object responding to the SAME textual prompt that describes its intended physical motion.\n\nYour tasks:\n1. Carefully watch each candidate animation.\n2. Describe what's going on in the animation.\n3. Evaluate how physically realistic the motion looks (0-5 scale).\n4. Identify concrete pros / cons affecting the score (e.g. energy conservation errors, temporal jitter, incorrect response to gravity, static etc.).\n5. Suggest specific improvements.\n6. Pick the overall best candidate.\n\nPlease output ONLY valid JSON with the following schema:\n{\n  \"candidate_evaluations\": {\n    \"candidate_0\": {\"description\": str, \"score\": float, \"pros\": str, \"cons\": str, \"suggested_improvements\": str},\n    \"candidate_1\": { ... },\n    \"candidate_2\": { ... }\n  },\n  \"best_candidate\": \"candidate_i\",   // the key of the best candidate\n  \"general_comments\": str              // any overall remarks (optional)\n}\n\nAlso, note that the first candidate is the \"ground-truth\", the gold standard, which should always be given a score of 5.\nThe other candidates should be judged based on how close they are to the ground-truth.\n\nNOTE: ignore missing videos. Still return score for `candidate_{idx}` that are present.\n\"\"\"\n\nCOTRACKER_INSTRUCTION = \"\"\"\nNOTE: to make your job easier, we have also annotated the ground-truth video with the Co-Tracker. Cotracker is a motion tracker algorithm to highlight the moving parts in the videos. \nPay close attention to the motion traces annotated in the videos to gain information on how the object is moving.\nNote that for objects that barely move, there will still be dots in the Co-Tracker video, but the motion\n(lines) will be very short or non-existent, indicating that the points are not moving.\n\"\"\"\n\n\nclass PhysicsJudgeAgent(Agent):\n    OUT_RESULT_PATH = \"vlm_phys_judge_results.json\"\n\n    def __init__(self, cfg: AgentConfig, num_frames: int = 8,\n                 use_cotracker=False):\n        self.num_frames = num_frames\n        self.use_cotracker = use_cotracker\n        super().__init__(cfg)\n\n    # --------------------------------------------------\n    # Agent interface implementation\n    # --------------------------------------------------\n    def _make_system_instruction(self):\n        sys_instruction = PHYSICS_JUDGE_SYSTEM_INSTRUCTION\n        logging.info(\"USING COTRACKER\", self.use_cotracker)\n        if self.use_cotracker:\n            sys_instruction += COTRACKER_INSTRUCTION\n        return sys_instruction\n\n    def _make_prompt_parts(self, prompt: str, candidate_video_paths: List[str], **kwargs):\n        \"\"\"Build the multimodal prompt parts.\n\n        Args:\n            prompt (str): The textual description of the intended motion.\n            candidate_video_paths (List[str]): \n        Returns:\n            List: A list combining text strings and PIL Images as accepted by the underlying VLM.\n        \"\"\"\n        # Allow variable number of candidates (≥2). The first video must be the ground-truth.\n        if len(candidate_video_paths) < 2:\n            raise ValueError(\"At least two videos (ground-truth + one candidate) are required\")\n\n        prompt_parts: List = []\n        prompt_parts.append(\n            \"You are shown these candidate videos for the following prompt describing desired motion:\\n'{}'\\nEvaluate each candidate for physical realism.\".format(prompt)\n        )\n\n        for idx, video_path in enumerate(candidate_video_paths):\n            prompt_parts.append(f\"Candidate {idx}:\")\n            try:\n                frames = get_frames_from_video(\n                    video_path,\n                    num_frames=self.num_frames,\n                    video_encoding_strategy=\"individual\",\n                    to_crop_white=False,\n                    flip_horizontal=False,\n                    width=256,\n                    height=None,\n                )\n                logging.info(f\"Loaded {len(frames)} frames from {video_path}\")\n                prompt_parts.extend(frames)\n            except Exception as e:\n                logging.error(f\"Failed to load frames from {video_path}: {e}\")\n                prompt_parts.append(f\"(Could not load video {video_path})\")\n\n        prompt_parts.append(\n            \"Provide your JSON answer following the required schema.\"\n        )\n        return prompt_parts\n\n    def parse_response(self, response):\n        \"\"\"Parse and save the JSON returned by the model.\"\"\"\n        response_text = response.text.strip()\n        try:\n            json_start = response_text.find(\"{\")\n            json_end = response_text.rfind(\"}\") + 1\n            if json_start == -1 or json_end == 0:\n                raise ValueError(\"No JSON object detected in the response\")\n            json_str = response_text[json_start:json_end]\n            parsed = json.loads(json_str)\n        except Exception as e:\n            logging.error(f\"Error parsing response: {e}\")\n            parsed = {\"error\": str(e), \"raw_response\": response_text}\n\n        out_path = join_path(self.cfg.out_dir, self.OUT_RESULT_PATH)\n        save_json(parsed, out_path)\n        logging.info(f\"Saved results to {out_path}\")\n        return parsed\n\n\n# --------------------------------------------------\n# CLI entry-point\n# --------------------------------------------------\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Judge physical realism of 3 candidate videos\")\n    parser.add_argument(\"--prompt\", type=str, required=True, help=\"Textual prompt used to generate the motion\")\n    parser.add_argument(\n        \"--candidate_videos\",\n        type=str,\n        nargs='+',\n        required=True,\n        help=\"Paths to the candidate videos (space-separated). First video must be ground-truth.\",\n    )\n    parser.add_argument(\"--out_dir\", type=str, default=\"vlm_phys_judge_results\")\n    parser.add_argument(\"--num_frames\", type=int, default=8, help=\"Number of frames extracted from each video for the prompt\")\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False, help=\"Overwrite existing results if present\")\n    parser.add_argument(\"--model_name\", type=str, default=\"gemini-2.0-flash\", help=\"Model name\")\n    parser.add_argument(\"--api_key\", type=str, default=\"\", help=\"API key (if not provided, will use environment variable)\")\n    parser.add_argument(\"--use_cotracker\", type=str2bool, default=False, help=\"Use Co-Tracker to highlight the moving parts in the videos\")\n    # parser.add_argument(\"--model_name\", type=str, default=\"o3\", help=\"Model name\")\n    args = parser.parse_args()\n    set_logger()\n\n    agent = PhysicsJudgeAgent(\n        AgentConfig(\n            # model_name=\"gemini-2.0-flash\",  # quick & cheap\n            # model_name=\"gemini-2.5-pro-preview-03-25\",  # higher quality for judging\n            # model_name=\"o3\",  # quick & cheap\n            model_name=args.model_name,\n            out_dir=args.out_dir,\n            api_key=args.api_key,\n        ),\n        num_frames=args.num_frames,\n        use_cotracker=args.use_cotracker,\n    )\n\n    config = {\n        \"temperature\": 1.0 if args.model_name == \"o3\" else 0.5,\n    }\n    agent.generate_prediction(\n        args.prompt,\n        args.candidate_videos,\n        overwrite=args.overwrite,\n        gen_config=config,\n    ) "
  },
  {
    "path": "pixie/vlm_labeler/vlm_phys_sampler.py",
    "content": "import os\nimport argparse\nimport glob\nimport os.path as osp\nfrom vlmx.utils import save_json, load_json\nfrom vlmx.agent import Agent, AgentConfig\nfrom tqdm import tqdm\nimport json\nfrom PIL import Image\nimport logging\nfrom vlmx.utils import seed_everything\n\nfrom pixie.utils import str2bool, set_logger\nimport numpy as np\n\n\ndef sample_value(range_list):\n    \"\"\"Sample a random value from within a given range.\n    \n    Args:\n        range_list (list): List containing [min_value, max_value]\n    \n    Returns:\n        float: Randomly sampled value within the range\n    \"\"\"\n    min_val, max_val = range_list\n    return min_val + (max_val - min_val) * np.random.random()\n\n\ndef evaluate_constraint(constraint: str, material_dict: dict) -> bool:\n    \"\"\"Evaluate a single constraint using the material dictionary.\n    \n    Args:\n        constraint (str): Python code string containing the constraint\n        material_dict (dict): Dictionary containing material properties\n        \n    Returns:\n        bool: True if constraint is satisfied, False otherwise\n    \"\"\"\n    # Strip markdown code block markers\n    constraint = constraint.strip().replace('```python', '').replace('```', '').strip()\n    try:\n        exec(constraint)\n        return True\n    except AssertionError:\n        return False\n    except Exception as e:\n        logging.warning(f\"Error evaluating constraint: {e}\")\n        return False\n\n\ndef sample_material_dict(material_ranges: dict) -> dict:\n    \"\"\"Sample values for all material properties within their ranges.\n    \n    Args:\n        material_ranges (dict): Dictionary containing ranges for material properties\n        \n    Returns:\n        dict: Dictionary with sampled values\n    \"\"\"\n    sampled_dict = {}\n    for part_name, properties in material_ranges.items():\n        sampled_dict[part_name] = {\n            \"density\": sample_value(properties[\"density\"]),\n            \"E\": sample_value(properties[\"E\"]),\n            \"nu\": sample_value(properties[\"nu\"]),\n            \"material_id\": properties[\"material_id\"]  # material_id is discrete, no sampling needed\n        }\n    return sampled_dict\n\n\ndef check_all_constraints(material_dict: dict, constraints: list) -> bool:\n    \"\"\"Check if all constraints are satisfied for the given material dictionary.\n    \n    Args:\n        material_dict (dict): Dictionary containing sampled material properties\n        constraints (list): List of constraint strings\n        \n    Returns:\n        bool: True if all constraints are satisfied, False otherwise\n    \"\"\"\n    # return all(evaluate_constraint(constraint, material_dict) for constraint in constraints)\n    return evaluate_constraint(constraints, material_dict)\n\n\nclass MathSamplerAgent(Agent):\n    OUT_RESULT_PATH = \"vlm_results.json\"\n    def _make_system_instruction(self):\n        return \"...\"\n\n    def generate_prediction(self, json_path: str, overwrite: bool = False, max_attempts: int = 1000):\n        \"\"\"Generate valid material properties through rejection sampling.\n        \n        Args:\n            json_path (str): Path to JSON file containing ranges and constraints\n            overwrite (bool): Whether to overwrite existing results\n            max_attempts (int): Maximum number of sampling attempts before giving up\n            \n        Returns:\n            dict: Dictionary containing valid sampled material properties\n        \"\"\"\n        # Load input data\n        out_path = os.path.join(self.cfg.out_dir, self.OUT_RESULT_PATH)\n        if (\n            os.path.exists(out_path)\n            and not overwrite\n        ):\n            logging.info(\n                f\"{self.__class__.__name__}: Prediction already exists at {out_path}. Skipping generation.\"\n            )\n            return self.load_prediction()\n        input_data = load_json(json_path)\n        logging.info(f\">> Input data: {input_data}\")\n        material_ranges = input_data[\"material_dict\"]\n        constraints = input_data[\"constraints\"]\n        # print(\"Constraints: \", constraints)\n        \n        # Rejection sampling\n        for attempt in range(max_attempts):\n            sampled_dict = sample_material_dict(material_ranges)\n            if check_all_constraints(sampled_dict, constraints):\n                result = {\n                    \"material_dict\": sampled_dict,\n                    \"sampling_attempts\": attempt + 1\n                }\n                logging.info(f\"succeed after {attempt + 1} attempts\")\n                return self.parse_response(type('Response', (), {'text': json.dumps(result)}))\n        \n        raise RuntimeError(f\"Failed to find valid sample after {max_attempts} attempts\")\n\n    def parse_response(self, response):\n        json_str = response.text.strip().strip(\"```json\").strip()\n        parsed_response = json.loads(json_str, strict=False)\n        save_json(parsed_response, os.path.join(\n        self.cfg.out_dir, self.OUT_RESULT_PATH))\n        return parsed_response\n\n\ndef run_vlm_phys_sampler(obj_id: str, vlm_seg_results_dir: str, \n                        vlm_seg_mat_sample_results_dir: str, \n                        num_sample_mat: int = 5, model_name: str = \"gemini-1.5-flash-latest\",\n                        api_key: str = \"\", overwrite: bool = False):\n    \"\"\"Run VLM physics sampler to generate material samples.\"\"\"\n    \n    seed_everything(0)\n\n    # Get VLM results path\n    json_path = os.path.join(vlm_seg_results_dir, obj_id, \"vlm_results.json\")\n    if not os.path.exists(json_path):\n        logging.error(f\"VLM results not found at {json_path}\")\n        return\n\n    # Generate material samples\n    for i in range(num_sample_mat):\n        logging.info(f\">> Sampling material for {obj_id} sample {i}\")\n        output_dir = os.path.join(vlm_seg_mat_sample_results_dir, obj_id, f\"sample_{i}\")\n        os.makedirs(output_dir, exist_ok=True)\n        \n        agent = MathSamplerAgent(AgentConfig(\n            model_name=model_name,\n            out_dir=output_dir,\n            api_key=api_key,\n        ))\n        \n        res = agent.generate_prediction(json_path, overwrite=overwrite)\n        logging.info(f\"Generated material sample {i} for {obj_id}\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--obj_id\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_results_dir\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_mat_sample_results_dir\", type=str, required=True)\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False)\n    parser.add_argument(\"--num_sample_mat\", type=int, default=5)\n    parser.add_argument(\"--model_name\", type=str, default=\"gemini-1.5-flash-latest\")\n    parser.add_argument(\"--api_key\", type=str, default=\"\")\n    args = parser.parse_args()\n    \n    set_logger()\n    run_vlm_phys_sampler(\n        obj_id=args.obj_id,\n        vlm_seg_results_dir=args.vlm_seg_results_dir,\n        vlm_seg_mat_sample_results_dir=args.vlm_seg_mat_sample_results_dir,\n        num_sample_mat=args.num_sample_mat,\n        model_name=args.model_name,\n        api_key=args.api_key,\n        overwrite=args.overwrite\n    )\n"
  },
  {
    "path": "pixie/vlm_labeler/vlm_seg.py",
    "content": "import os\nimport argparse\nimport glob\nimport os.path as osp\nfrom vlmx.utils import save_json, load_json\nfrom vlmx.agent import Agent, AgentConfig\nfrom tqdm import tqdm\nimport json\nfrom PIL import Image\nimport logging\nfrom pixie.utils import str2bool, set_logger\nimport numpy as np\nfrom vlm_seg_class_instruction import INSTRUCTION_FUNCTIONS\n\n\ndef run_vlm_segmentation(obj_id: str, obj_class: str, output_dir: str, \n                        data_dir: str, \n                        model_name: str, api_key: str, overwrite: bool = False,\n                        num_alternative_queries: int = 2, input_num_views: int = 15):\n    \"\"\"Run VLM segmentation for a single object.\"\"\"\n    # Define the segmentation agent\n    class SegmentationAgent(Agent):\n        OUT_RESULT_PATH = \"vlm_results.json\"\n        \n        def _make_system_instruction(self):\n            return INSTRUCTION_FUNCTIONS[obj_class](num_alternative_queries)\n\n        def _make_prompt_parts(self, image_paths):\n            images = [Image.open(image_path) for image_path in image_paths]\n            question = [\"The image is :\"] + images\n            return question\n\n        def parse_response(self, response):\n            json_str = response.text.strip().strip(\"```json\").strip()\n            parsed_response = json.loads(json_str, strict=False)\n            print(parsed_response)\n            save_json(parsed_response, os.path.join(\n                self.cfg.out_dir, self.OUT_RESULT_PATH))\n            return parsed_response\n\n    # Create agent\n    agent = SegmentationAgent(AgentConfig(\n        model_name=model_name,\n        out_dir=output_dir,\n        api_key=api_key,\n    ))\n\n    # Get image paths\n    all_image_paths = glob.glob(os.path.join(data_dir, obj_id, \"train\", \"*.png\"))\n    if len(all_image_paths) < input_num_views:\n        logging.warning(f\"Not enough images found for {obj_id} (found {len(all_image_paths)}, need {input_num_views}). Skipping.\")\n        return\n\n    # Randomly sample images\n    random_image_paths = np.random.choice(all_image_paths, input_num_views, replace=False)\n    \n    # Generate prediction\n    res = agent.generate_prediction(random_image_paths, overwrite=overwrite)\n    return res\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--obj_id\", type=str, required=True)\n    parser.add_argument(\"--obj_class\", type=str, required=True)\n    parser.add_argument(\"--output_dir\", type=str, required=True)\n    parser.add_argument(\"--data_dir\", type=str, required=True)\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False)\n    parser.add_argument(\"--num_alternative_queries\", type=int, default=2)\n    parser.add_argument(\"--input_num_views\", type=int, default=15)\n    parser.add_argument(\"--model_name\", type=str, default=\"gemini-2.0-flash\")\n    parser.add_argument(\"--api_key\", type=str, default=\"\")\n    args = parser.parse_args()\n    set_logger()\n    \n    run_vlm_segmentation(\n        obj_id=args.obj_id,\n        obj_class=args.obj_class,\n        output_dir=args.output_dir,\n        data_dir=args.data_dir,\n        model_name=args.model_name,\n        api_key=args.api_key,\n        overwrite=args.overwrite,\n        num_alternative_queries=args.num_alternative_queries,\n        input_num_views=args.input_num_views\n    )"
  },
  {
    "path": "pixie/vlm_labeler/vlm_seg_class_instruction.py",
    "content": "import json\nimport textwrap\nimport os\nimport sys\nphysgaussian_path = os.path.join(os.path.dirname(__file__), \"..\", \"..\", \"third_party\", \"PhysGaussian\", \"mpm_solver_warp\")\nsys.path.append(physgaussian_path)\nfrom mpm_solver_warp import (\n    get_material_name, \n    MATERIAL_ID_TO_NAME,\n    get_material_id,\n)\n\n\n\nINSTRUCTION_CONFIGS = {\n    \"tree\": {\n        \"class_name_for_example\": \"ficus tree\",\n        \"special_notes\": \"\",\n        \"example_material_dict\": {\n            \"pot\": {\"density\": 400, \"E\": 2e8, \"nu\": 0.4, \"material_id\": get_material_id(\"stationary\")},\n            \"trunk\": {\"density\": 400, \"E\": 2e6, \"nu\": 0.4, \"material_id\": get_material_id(\"jelly\")},\n            \"leaves\": {\"density\": 200, \"E\": 2e4, \"nu\": 0.4, \"material_id\": get_material_id(\"jelly\")}\n        },\n        \"example_explanation\": textwrap.dedent(\"\"\"\n            For this, we assume that the pot is stationary, while the trunk and leaves are made of \"jelly\", which will make\n            them sway in the wind. The stiffness (Young's Modulus) of the trunk is much higher than that of the leaves.\n        \"\"\"),\n        \"example_all_queries\": [[\"leaves\", \"trunk\", \"pot\"], [\"green\", \"orange\", \"reddish-brown\"]],\n        \"tips\": [\n            \"In a scene, typically there's a stationary part that will serve to fix the object to the ground. Usually, it's the pot, or some base of the tree. You must set the material_id of the stationary part to 6. If there's no stationary part, then never mind.\",\n            \"For numerical stability, `E` should be between 1e4 and 1e6.\",\n            \"The ranges between different parts need not be disjoint and can overlap when constraints define the ordering.\",\n            \"The higher the `E` is, the stiffer the object is. E.g., so tree would sway less in the wind.\",\n        ],\n        \"example_constraints\": textwrap.dedent(\"\"\"\n            assert material_dict[\"leaves\"][\"density\"] < material_dict[\"trunk\"][\"density\"], \"The density of the leaves should be less than the trunk\"\n            assert material_dict[\"leaves\"][\"E\"] < material_dict[\"trunk\"][\"E\"], \"The stiffness of the leaves should be less than the trunk\"\n            assert material_dict[\"pot\"][\"material_id\"] == 6, \"The pot should be stationary\"\n        \"\"\"),\n    },\n    \"flowers\": {\n        \"class_name_for_example\": \"flowers in a vase\",\n        \"special_notes\": \"\",\n        \"example_material_dict\": {\n            \"vase\": {\"density\": 500, \"E\": 1e6, \"nu\": 0.3, \"material_id\": get_material_id(\"stationary\")},\n            \"flowers\": {\"density\": 100, \"E\": 1e4, \"nu\": 0.4, \"material_id\": get_material_id(\"jelly\")}\n        },\n        \"example_explanation\": textwrap.dedent(\"\"\"\n            Here, the vase is designated as stationary (material_id=6), indicating it should not move or sway.\n            The flowers are set to a more pliable or flexible material (like \"jelly\" = 0), so that they can sway\n            if there's wind or slight motion. The stiffness (Young's Modulus) of the vase is much higher than that\n            of the flowers, making the vase rigid and the flowers more flexible.\n        \"\"\"),\n        \"example_all_queries\": [[\"vase\", \"flowers\"], [\"ceramic base\", \"petals\"], [\"blue vase\", \"pink flower\"]],\n        \"example_constraints\": textwrap.dedent(\"\"\"\n            assert material_dict[\"flowers\"][\"E\"] < material_dict[\"vase\"][\"E\"], \"Flowers should have a lower stiffness than the vase\"\n            assert material_dict[\"vase\"][\"material_id\"] == 6, \"Vase must be stationary\"\n        \"\"\"),\n        \"tips\": [\n            \"In a typical flower arrangement, the vase (or base) is stationary, so give that part material_id=6 if present.\",\n            \"For numerical stability, `E` should roughly be between 1e4 and 1e6.\",\n            \"The higher the `E`, the stiffer the part. So the vase should have a higher E range than the flowers.\",\n            \"The ranges for different parts do not need to be disjoint and may overlap.\",\n        ]\n    },\n    \"shrub\": {\n        \"class_name_for_example\": \"typical three-part shrub\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            **Dataset note:** Shrubs in our dataset stand by themselves—there is **no planter or base**.\n            You should therefore return only the shrub's structural parts and none of them are stationary.\n            \n            **IMPORTANT OUTPUT FORMAT:** Return exactly one JSON object with top-level keys:\n            `material_dict`, `reasoning`, `constraints`, `all_queries`.\n            Do not return part names at top level; part names must be nested under `material_dict`.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"stems\":    { \"density\": 300, \"E\": 1e5, \"nu\": 0.35, \"material_id\": get_material_id(\"jelly\") },\n            \"twigs\":    { \"density\": 250, \"E\": 6e4, \"nu\": 0.38, \"material_id\": get_material_id(\"jelly\") },\n            \"foliage\":  { \"density\": 150, \"E\": 2e4, \"nu\": 0.40, \"material_id\": get_material_id(\"jelly\") }\n        },\n        \"example_explanation\": textwrap.dedent(\"\"\"\n            Return *ranges* instead of single values and accompany them with reasoning, Pythonic\n            constraints, and alternative query lists.\n        \"\"\"),\n        \"example_all_queries\": [\n            [\"stems\", \"twigs\", \"foliage\"],\n            [\"woody stems\", \"thin branches\", \"leaves\"],\n            [\"brown sticks\", \"small branches\", \"green leaves\"]\n        ],\n        \"tips\": [\n            \"Provide exactly the parts visible (usually stems/twigs + foliage).\",\n            \"1e4 <= E <= 1e6.\",\n            \"Stems should be stiffest > twigs > foliage.\",\n            \"No part uses material_id 6 because nothing is fixed to the ground.\",\n        ]\n    },\n    \"grass\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            **Dataset note:** Grass patches are usually isolated; occasionally a visible soil patch is\n            underneath. Include a \"soil\" part only if it is visible.\n            \n            **IMPORTANT OUTPUT FORMAT:** Return exactly one JSON object with top-level keys:\n            `material_dict`, `reasoning`, `constraints`, `all_queries`.\n            Do not return part names at top level; part names must be nested under `material_dict`.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"blades\": { \"density\": [60, 140], \"E\": [1e4, 8e4], \"nu\": [0.35, 0.48], \"material_id\": get_material_id(\"jelly\") }\n        },\n        \"example_explanation\": textwrap.dedent(\"\"\"\n            Example A (typical isolated grass—no stationary part):\n            ```json\n            {\n                \"blades\": { \"density\": 80, \"E\": 1e4, \"nu\": 0.45, \"material_id\": get_material_id(\"jelly\") }\n            }\n            ```\n\n            Example B (grass with visible soil):\n            ```json\n            {\n                \"soil\":   { \"density\": 1200, \"E\": 5e5, \"nu\": 0.30, \"material_id\": get_material_id(\"stationary\") },\n                \"blades\": { \"density\":  80,  \"E\": 1e4, \"nu\": 0.45, \"material_id\": get_material_id(\"jelly\") }\n            }\n            ```\n            Return *ranges*, reasoning, constraints, and alternative query lists.\n        \"\"\"),\n        \"example_all_queries\": [\n          [\"blades\"],\n          [\"grass\"],\n          [\"green stalks\"]\n        ],\n        \"tips\": [\n            \"Segment only the visible parts (sometimes just \\\"blades\\\").\",\n            \"If *no* soil visible:\\nall_queries: [[\\\"blades\\\"],[\\\"grass\\\"],[\\\"green stalks\\\"]]\",\n            \"If soil *is* visible:\\nall_queries: [[\\\"soil\\\", \\\"blades\\\"],[\\\"dirt\\\", \\\"grass\\\"],[\\\"brown base\\\", \\\"green grass\\\"]]\",\n            \"1e4 <= E <= 1e6.\",\n            \"If soil present -> give it material_id 6 and ensure E_soil > E_blades.\",\n            \"If soil absent -> no stationary part; material_id 6 should not appear.\",\n        ]\n    },\n    \"rubber_ducks_and_toys\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For rubber ducks and toys, we want to treat the entire object as a single part. Do not attempt to\n            segment it into multiple parts. The object should be treated as a single, bouncy rubber-like object.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"toy\": {\"density\": [100, 200], \"E\": [8e3, 8e4], \"nu\": [0.3, 0.4], \"material_id\": get_material_id(\"jelly\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"toy\"], [\"rubber toy\"], [\"yellow duck\"], [\"plastic toy\"]],\n        \"tips\": [\n            \"Always use material_id=0 (jelly) for bouncy rubber-like behavior\",\n            \"Density should be in the range of typical rubber/plastic toys\",\n            \"Poisson's ratio should be around 0.35 for rubber-like behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"sport_balls\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For sport balls, we want to treat the entire ball as a single part. Do not attempt to\n            segment it into multiple parts (like surface patterns or seams). The ball should be treated as a single,\n            bouncy object.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"ball\": {\"density\": [100, 200], \"E\": [8e3, 8e4], \"nu\": [0.3, 0.4], \"material_id\": get_material_id(\"jelly\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"ball\"], [\"sport ball\"], [\"basketball\"], [\"round ball\"]],\n        \"tips\": [\n            \"Always use material_id=0 (jelly) for bouncy behavior\",\n            \"Density should be in the range of typical sport balls\",\n            \"Poisson's ratio should be around 0.35 for rubber-like behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"soda_cans\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For soda cans, we want to treat the entire can as a single part. Do not attempt to\n            segment it into multiple parts (like the top, body, or label). The can should be treated as a single,\n            rigid metal object.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"can\": {\"density\": [2500, 2900], \"E\": [8e7, 1.2e8], \"nu\": [0.25, 0.35], \"material_id\": get_material_id(\"metal\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"can\"], [\"soda can\"], [\"aluminum can\"], [\"metal can\"]],\n        \"tips\": [\n            \"Always use material_id=1 (metal) for rigid metal behavior\",\n            \"Keep E relatively high (around 1e8) for metal stiffness\",\n            \"Density should be in the range of typical aluminum (around 2700 kg/m³)\",\n            \"Poisson's ratio should be around 0.3 for metal behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"metal_crates\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For metal crates, we want to treat the entire crate as a single part. Do not attempt to\n            segment it into multiple parts (like the sides, top, or bottom). The crate should be treated as a single,\n            rigid metal object.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"crate\": {\"density\": [2500, 2900], \"E\": [8e7, 1.2e8], \"nu\": [0.25, 0.35], \"material_id\": get_material_id(\"metal\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"crate\"], [\"metal crate\"], [\"metal box\"], [\"steel crate\"]],\n        \"tips\": [\n            \"Always use material_id=1 (metal) for rigid metal behavior\",\n            \"Keep E relatively high (around 1e8) for metal stiffness\",\n            \"Density should be in the range of typical metal (around 2700 kg/m³)\",\n            \"Poisson's ratio should be around 0.3 for metal behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"sand\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For sand objects, we want to treat the entire object as a single part. Do not attempt to\n            segment it into multiple parts. The sand should be treated as a single, granular material.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"sand\": {\"density\": [1800, 2200], \"E\": [4e7, 6e7], \"nu\": [0.25, 0.35], \"material_id\": get_material_id(\"sand\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"sand\"], [\"sand pile\"], [\"sand mound\"], [\"granular material\"]],\n        \"tips\": [\n            \"Always use material_id=2 (sand) for granular behavior\",\n            \"Keep E relatively high (around 5e7) for sand stiffness\",\n            \"Density should be in the range of typical sand (around 2000 kg/m³)\",\n            \"Poisson's ratio should be around 0.3 for sand behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"jello_block\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For jello blocks, we want to treat the entire object as a single part. Do not attempt to\n            segment it into multiple parts. The jello block should be treated as a single, soft, bouncy object.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"jello\": {\"density\": [40, 60], \"E\": [800, 1200], \"nu\": [0.25, 0.35], \"material_id\": get_material_id(\"jelly\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"jello\"], [\"jello block\"], [\"gelatin\"], [\"bouncy block\"]],\n        \"tips\": [\n            \"Always use material_id=0 (jelly) for soft, bouncy behavior\",\n            \"Keep E relatively low (around 1000) for good bounce and jiggle\",\n            \"Density should be in the range of typical jello (around 50 kg/m³)\",\n            \"Poisson's ratio should be around 0.3 for jello-like behavior\",\n            \"Make sure all queries in all_queries list are single-part queries\"\n        ]\n    },\n    \"snow_and_mud\": {\n        \"class_name_for_example\": \"\",\n        \"special_notes\": textwrap.dedent(\"\"\"\n            IMPORTANT: For combined snow & mud objects, we treat the entire mixture as a single deformable part.  Do **not**\n            attempt to split it into separate snow and mud regions—the simulation will use one MPM material.\n        \"\"\"),\n        \"example_material_dict\": {\n            \"snow_and_mud\": {\"density\": [2000, 3000], \"E\": [8e4, 1.2e5], \"nu\": [0.15, 0.25], \"material_id\": get_material_id(\"snow\")}\n        },\n        \"example_explanation\": \"\",\n        \"example_all_queries\": [[\"snow and mud\"], [\"slush\"], [\"muddy snow\"], [\"wet snow\"]],\n        \"tips\": [\n            \"Always set material_id = 5 (snow) so the simulator uses the appropriate elasto-plastic snow model.\",\n            \"Keep E around 1e5 (the config value) to match the intended softness.\",\n            \"Density is markedly higher than fluffy snow because of the mud/water content—use roughly 2–3 g/cm³ (2000–3000 kg/m³).\",\n            \"Make sure every list in `all_queries` contains **one** phrase because this is a single-part object.\"\n        ]\n    },\n}\n\n\nSYSTEM_INSTRUCTION_TEMPLATE = textwrap.dedent(\"\"\"\\\n    We are trying to label a 3D object with physical properties. The physical properties are:\n    - Density\n    - Young's Modulus\n    - Poisson's Ratio\n    - Material model\n\n    where the material model is one of the following:\n{material_list_str}\n\n    We have an automatic semantic segmentation model that can segment the object into different parts. We'll assume\n    that each part has the same material model.\n\n    Your job is to come up with the part query to pass to the semantic segmentation model, and the associated\n    material properties for each part.\n    {special_notes}\n    For example, for a {class_name_for_example}, the return is\n\n    ```json\n    {example_material_dict_str}\n    ```\n    {example_explanation}\n    Note that there are many different valid values for the material properties including E, nu, and density\n    that would influence how the object behaves. Thus, instead of actual values, you should return\n    a range of values like \"E\": [2e4, 2e6]. Also, provide reasoning and constraints on the values when appropriate.\n    The ranges for different parts need not be disjoint and may overlap.\n\n    So the output should be a json with the following format:\n\n    ```json\n    {{\n        \"material_dict\": {{ ... similar to example_dict with ranges ... }},\n        \"reasoning\": \"...\",\n        \"constraints\": \"...\",\n        \"all_queries\": \"...\"\n    }}\n    ```\n\n    Remember to write constraints in the form of python code. For example,\n    ```python\n    {example_constraints_str}\n    ```\n\n    Note that you've been asked to generate a material range so `material_dict[\"leaves\"][\"density\"]` is a range of values. But for the purpose\n    of the constraints writing, you can assume that the material_dict[\"leaves\"][\"density\"] is a single value, and generate the python code similar\n    to the example above. This is important because we will first sample a value from the range, then invoke your constraints code. So instead of writing something like\n    ```python\n    assert material_dict[\"leaves\"][\"density\"][0] ...\n    ```\n    you must write something like\n    ```python\n    assert material_dict[\"leaves\"][\"density\"] ...\n    ```\n    Note that the correct code doesn't have the bracket because `material_dict[\"leaves\"][\"density\"]` will be already reduced to a single value by our sampler.\n\"\"\")\n\nPART_QUERY_INSTRUCTION_TEMPLATE = textwrap.dedent(\"\"\"\\\n    You will be provided with images of the object from different views or a single view. Please try your best to come up with appropriate\n    part queries as well. For example, if the object doesn't have visible trunk or pot, then you should\n    NOT include them in the material_dict. Only segment parts that are visible in the image.\n\n    Also, because our CLIP segmentation model is not perfect, you should come up with alternative queries as well including the original queries in the all_queries list.\n    For example,\n    ```json\n    {example_all_queries_str}\n    ```\n    In total, you need to provide {num_alternative_queries} alternative queries. \n\n    Tips:\n{tips_str}\n    - Make sure that each element in the `all_queries` list is in the exact same order as the material_dict keys.\n\"\"\")\n\n\ndef generate_instruction(class_name: str, num_alternative_queries: int) -> str:\n    \"\"\"\n    Generates a complete instruction prompt for a given object class using a template\n    and a configuration dictionary.\n    \"\"\"\n    config = INSTRUCTION_CONFIGS[class_name]\n\n    material_list_str = \"\\n\".join([f\"        {i}: \\\"{name}\\\",\" for i, name in MATERIAL_ID_TO_NAME.items()])\n    example_material_dict_str = json.dumps(config[\"example_material_dict\"], indent=4)\n    tips_str = \"\\n\".join([f\"    - {tip}\" for tip in config[\"tips\"]])\n    example_all_queries_str = json.dumps(config[\"example_all_queries\"], indent=4)\n\n    system_instruction = SYSTEM_INSTRUCTION_TEMPLATE.format(\n        material_list_str=material_list_str,\n        special_notes=config[\"special_notes\"],\n        class_name_for_example=config[\"class_name_for_example\"] or class_name,\n        example_material_dict_str=example_material_dict_str,\n        example_explanation=config[\"example_explanation\"],\n        example_constraints_str=config.get(\"example_constraints\", \"...\"),\n    )\n\n    part_query_instruction = PART_QUERY_INSTRUCTION_TEMPLATE.format(\n        num_alternative_queries=num_alternative_queries,\n        example_all_queries_str=example_all_queries_str,\n        tips_str=tips_str\n    )\n\n    return system_instruction + part_query_instruction\n\n\nINSTRUCTION_FUNCTIONS = {\n    class_name: (lambda c: lambda n: generate_instruction(c, n))(class_name)\n    for class_name in INSTRUCTION_CONFIGS\n}"
  },
  {
    "path": "pixie/vlm_labeler/vlm_seg_critic.py",
    "content": "import os\nimport argparse\nimport glob\nimport os.path as osp\nfrom vlmx.utils import save_json, load_json\nfrom vlmx.agent import Agent, AgentConfig\nfrom tqdm import tqdm\nimport json\nfrom PIL import Image\nimport logging\nfrom pixie.utils import str2bool, set_logger\nimport numpy as np\n\nCRITIC_SYSTEM_INSTRUCTION = \"\"\"\nYou are a segmentation quality critic. Your task is to evaluate the quality of segmentation results produced by a CLIP-based segmentation model.\n\nYou will be shown:\n1. A set of original RGB images of a 3D object from different views\n2. Segmentation results for different part queries\n\nYour job is to:\n1. Evaluate each segmentation query based on how well it separates the object into meaningful parts\n2. Score each query on a scale of 1-10 (10 being perfect)\n3. Provide reasoning for your scores\n4. Suggest improvements to the queries if needed\n\nConsider the following factors in your evaluation:\n- Does the segmentation properly separate the object into distinct, semantically meaningful parts?\n- Are the boundaries of the segments accurate and clean?\n- Is any important part of the object missed or incorrectly segmented?\n- IMPORTANT: note that our imperfect CLIP segmentation model is heavily dependent on the choice of part queries. Thus,\neven if a query might not be semantically correct, as long as it is useful for separating the object into distinct parts,\nyou should score it high.\n- Bad queries would result in bad segmentation that are noisy or different parts are not correctly and/or clearly separated.\n\nYour output should be a JSON in the following format:\n\n```json\n{\n  \"query_evaluations\": {\n    \"query_0\": {\n      \"score\": 8,\n      \"reasoning\": \"This query effectively separates the object into functionally distinct parts. The boundaries are clean and consistent across different views.\"\n    },\n    \"query_1\": {\n      \"score\": 3,\n      \"reasoning\": \"This query fails to distinguish important parts of the object, making it unsuitable for physical property assignment.\"\n    },\n    ...\n  },\n  \"best_query\": \"query_1\",\n  \"suggested_improvements\": \"Consider using more specific terms like 'ceramic pot' instead of just 'pot' to improve segmentation boundaries.\"\n}\n```\nwhere `query_{i}` is the i-th query in the \"all_queries\" list.\n\nBe detailed in your reasoning and make concrete suggestions for improvements.\n\"\"\"\n\nfrom typing import List, Dict\n\nclass SegmentationCriticAgent(Agent):\n    OUT_RESULT_PATH = \"vlm_critic_results.json\"\n    \n    def _make_system_instruction(self):\n        return CRITIC_SYSTEM_INSTRUCTION \n\n    def _make_prompt_parts(self, rgb_image_paths: List[str], query_segmentation_paths: Dict[str, List[str]]):\n        prompt_parts = [\"I'll show you original RGB images of an object and then segmentation results for different queries.\"]\n        \n        # Add original RGB images\n        prompt_parts.append(\"Original RGB images of the object:\")\n        rgb_images = [Image.open(img_path) for img_path in rgb_image_paths]\n        prompt_parts.extend(rgb_images)\n        \n        # Add segmentation results for each query\n        prompt_parts.append(\"Now I'll show you segmentation results for different queries:\")\n        \n        for query, seg_paths in query_segmentation_paths.items():\n            prompt_parts.append(f\"Segmentation results for query: {query}\")\n            seg_images = [Image.open(img_path) for img_path in seg_paths]\n            prompt_parts.extend(seg_images)\n        \n        return prompt_parts\n\n    def parse_response(self, response):\n        try:\n            # Extract JSON from the response\n            response_text = response.text\n            json_start = response_text.find(\"{\")\n            json_end = response_text.rfind(\"}\") + 1\n            if json_start == -1 or json_end == 0:\n                raise ValueError(\"No JSON found in response\")\n            \n            json_str = response_text[json_start:json_end]\n            parsed_response = json.loads(json_str)\n            \n            # Save the results\n            save_json(parsed_response, os.path.join(self.cfg.out_dir, self.OUT_RESULT_PATH))\n            return parsed_response\n        except Exception as e:\n            logging.error(f\"Error parsing response: {e}\")\n            logging.error(f\"Response: {response.text}\")\n            return {\"error\": str(e), \"raw_response\": response.text}\n\n\ndef run_vlm_seg_critic(obj_id: str, data_dir: str, vlm_seg_results_dir: str, \n                      vlm_seg_critic_results_dir: str, input_num_views: int = 15,\n                      model_name: str = 'gemini-2.5-pro-preview-03-25', \n                      api_key: str = '', overwrite: bool = False):\n    \"\"\"Run VLM segmentation critic to evaluate segmentation quality.\"\"\"\n    \n    # Setup paths\n    rgb_image_path = os.path.join(data_dir, obj_id, \"train\")\n    segmentation_base_path = os.path.join(vlm_seg_results_dir, obj_id)\n    output_dir = os.path.join(vlm_seg_critic_results_dir, obj_id)\n    \n    # Ensure necessary paths exist\n    if not os.path.exists(rgb_image_path):\n        logging.error(f\"RGB image path does not exist: {rgb_image_path}\")\n        return\n    \n    if not os.path.exists(segmentation_base_path):\n        logging.error(f\"Segmentation base path does not exist: {segmentation_base_path}\")\n        return\n    \n    # Create output directory\n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Get RGB image paths\n    all_rgb_paths = glob.glob(os.path.join(rgb_image_path, \"*.png\"))\n    if len(all_rgb_paths) < input_num_views:\n        logging.warning(f\"Not enough RGB images found. Found {len(all_rgb_paths)}, needed {input_num_views}\")\n        if len(all_rgb_paths) == 0:\n            return\n        input_num_views = len(all_rgb_paths)\n    \n    selected_rgb_paths = np.random.choice(all_rgb_paths, input_num_views, replace=False)\n    \n    # Get query segmentation paths\n    query_pattern = \"query_*\"\n    query_folders = glob.glob(os.path.join(segmentation_base_path, query_pattern))\n    query_folders = [os.path.basename(folder) for folder in query_folders if os.path.isdir(folder)]\n    \n    logging.info(f\"Found query folders: {query_folders}\")\n    \n    if not query_folders:\n        logging.error(f\"No query folders found in {segmentation_base_path}\")\n        return\n    \n    # Build dictionary of query to segmentation image paths\n    query_to_segmentation_paths = {}\n    for query in query_folders:\n        seg_path = os.path.join(segmentation_base_path, query)\n        seg_images = glob.glob(os.path.join(seg_path, \"*.png\"))\n        if seg_images:\n            query_to_segmentation_paths[query] = seg_images\n    \n    if not query_to_segmentation_paths:\n        logging.error(\"No segmentation images found for any query\")\n        return\n    \n    # Initialize agent and evaluate\n    agent = SegmentationCriticAgent(AgentConfig(\n        model_name=model_name,\n        out_dir=output_dir,\n        api_key=api_key,\n    ))\n    \n    agent.generate_prediction(\n        selected_rgb_paths, \n        query_to_segmentation_paths,\n        overwrite=overwrite\n    )\n    results = agent.load_prediction()\n    \n    # Print results summary\n    if \"best_query\" in results:\n        logging.info(f\"Best query: {results['best_query']}\")\n        if results['best_query'] in results.get('query_evaluations', {}):\n            score = results['query_evaluations'][results['best_query']]['score']\n            logging.info(f\"Score: {score}/10\")\n    \n    logging.info(f\"Full evaluation results saved to {os.path.join(output_dir, agent.OUT_RESULT_PATH)}\")\n    return results\n\n\nif __name__ == \"__main__\":\n    # Get command line arguments\n    parser = argparse.ArgumentParser(description='Evaluate segmentation results')\n    parser.add_argument('--obj_id', type=str, required=True, help='Object ID to evaluate')\n    parser.add_argument('--data_dir', type=str, required=True, help='Data directory')\n    parser.add_argument('--vlm_seg_results_dir', type=str, required=True, help='VLM segmentation results directory')\n    parser.add_argument('--vlm_seg_critic_results_dir', type=str, required=True, help='VLM segmentation critic results directory')\n    parser.add_argument('--input_num_views', type=int, default=15, help='Number of RGB samples to use')\n    parser.add_argument('--overwrite', type=str2bool, default=False, help='Overwrite existing results')\n    parser.add_argument('--model_name', type=str, default='gemini-2.5-pro-preview-03-25')\n    parser.add_argument('--api_key', type=str, default='')\n    args = parser.parse_args()\n    set_logger()\n    \n    run_vlm_seg_critic(\n        obj_id=args.obj_id,\n        data_dir=args.data_dir,\n        vlm_seg_results_dir=args.vlm_seg_results_dir,\n        vlm_seg_critic_results_dir=args.vlm_seg_critic_results_dir,\n        input_num_views=args.input_num_views,\n        model_name=args.model_name,\n        api_key=args.api_key,\n        overwrite=args.overwrite\n    )"
  },
  {
    "path": "pixie/vlm_labeler/vlm_viz_seg_candidates.py",
    "content": "import argparse\nimport os\nimport glob\nimport json\nfrom pixie.utils import str2bool\nfrom vlmx.utils import load_json\nfrom pixie.utils import run_cmd\nimport logging\n\ndef run_vlm_viz_seg_candidates(obj_id: str, vlm_seg_results_dir: str, \n                              render_outputs_dir: str, outputs_dir: str,\n                              grid_size: int = 200, gray_threshold: float = 0.05,\n                              overwrite: bool = False):\n    \"\"\"Run VLM visualization of segmentation candidates.\"\"\"\n    \n    # Load VLM segmentation results\n    vlm_results_path = os.path.join(vlm_seg_results_dir, obj_id, \"vlm_results.json\")\n    if not os.path.exists(vlm_results_path):\n        logging.info(f\"VLM results not found at {vlm_results_path}\")\n        return\n    \n    result = load_json(vlm_results_path)\n\n    # Check if visualization already exists\n    output_dir = os.path.join(vlm_seg_results_dir, obj_id, \"query_0\")\n    if not overwrite and os.path.exists(os.path.join(output_dir, \"clip.png\")):\n        logging.info(f\"Skipping {obj_id} because {output_dir}/clip.png exists\")\n        return\n    \n    # Generate voxel features if needed\n    grid_size = grid_size\n    voxel_size = 1.0 / grid_size\n    method = \"f3rm\"\n    render_output_dir = os.path.join(render_outputs_dir, obj_id)\n    \n    # Find the latest config file in the output directory\n    output_dir = os.path.join(outputs_dir, obj_id, method)\n    if not os.path.exists(output_dir):\n        logging.info(f\"Output directory not found: {output_dir}\")\n        return\n        \n    latest_run = max([os.path.join(output_dir, d) for d in os.listdir(output_dir) if os.path.isdir(os.path.join(output_dir, d))], key=os.path.getmtime)\n    config_path = os.path.join(latest_run, \"config.yml\")\n\n    should_run_voxel = (\n        overwrite or\n        not (os.path.exists(f\"{render_output_dir}/clip_features.npz\") and\n             os.path.exists(f\"{render_output_dir}/clip_features_pc.ply\")))\n    \n    if should_run_voxel:\n        # Generate voxel features\n        voxel_cmd = [\n            \"python\", \"pixie/voxel/voxelize.py\",\n            \"--scene\", config_path,\n            \"--output\", f\"{render_output_dir}/clip_features.npz\",\n            \"--voxel_size\", str(voxel_size),\n            \"--gray_threshold\", str(gray_threshold)\n        ]\n        run_cmd(voxel_cmd, step_name=\"VOXEL_TO_PC\")\n\n    # Generate visualizations for each query\n    for i, query in enumerate(result[\"all_queries\"]):\n        query_str = \", \".join(query)\n        output_dir = os.path.join(vlm_seg_results_dir, obj_id, f\"query_{i}\")\n        \n        # Use string command with proper quoting\n        viz_cmd = (f'python pixie/voxel/viz_segmentation.py '\n                  f'--obj_id {obj_id} '\n                  f'--output_dir \"{output_dir}\" '\n                  f'--part_queries \"{query_str}\" '\n                  f'--render_outputs_dir \"{render_output_dir}\" '\n                  f'--overwrite {overwrite}')\n        run_cmd(viz_cmd, step_name=f\"VIZ_SEG_QUERY_{i}\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--obj_id\", type=str, required=True)\n    parser.add_argument(\"--vlm_seg_results_dir\", type=str, required=True)\n    parser.add_argument(\"--render_outputs_dir\", type=str, required=True)\n    parser.add_argument(\"--outputs_dir\", type=str, required=True)\n    parser.add_argument(\"--grid_size\", type=int, default=200)\n    parser.add_argument(\"--gray_threshold\", type=float, default=0.05)\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False)\n    parser.add_argument(\"--model_name\", type=str, default=\"gemini-2.0-flash\")\n    parser.add_argument(\"--api_key\", type=str, default=\"\")\n    args = parser.parse_args()\n\n    run_vlm_viz_seg_candidates(\n        obj_id=args.obj_id,\n        vlm_seg_results_dir=args.vlm_seg_results_dir,\n        render_outputs_dir=args.render_outputs_dir,\n        outputs_dir=args.outputs_dir,\n        grid_size=args.grid_size,\n        gray_threshold=args.gray_threshold,\n        overwrite=args.overwrite\n    )\n"
  },
  {
    "path": "pixie/voxel/__init__.py",
    "content": ""
  },
  {
    "path": "pixie/voxel/map_pred_to_coords.py",
    "content": "import numpy as np\nimport argparse\nimport os\nfrom plyfile import PlyData, PlyElement\nimport json\nfrom pathlib import Path\nimport sys\nimport logging\n\n# Add the parent directory to sys.path to import pixie utilities\nsys.path.append(str(Path(__file__).parent.parent.parent))\n\nfrom pixie.utils import resolve_paths, validate_config, load_json, set_logger\nfrom pixie.training_utils import load_normalization_ranges\nimport hydra\nfrom omegaconf import DictConfig\nfrom hydra.core.global_hydra import GlobalHydra\nfrom hydra import initialize, compose\n\n\ndef load_config(config_path=\"../../../config\", config_name=\"config\"):\n    \"\"\"\n    Load and merge Hydra configuration.\n\n    :param config_path: Path to the config directory\n    :param config_name: Name of the main config file (without .yaml extension)\n    :return: Merged configuration object\n    \"\"\"\n    # Initialize Hydra\n    GlobalHydra.instance().clear()\n    initialize(version_base=None, config_path=config_path)\n\n    # Compose the configuration\n    cfg = compose(config_name=config_name)\n    \n    # Load normalization ranges\n    cfg = load_normalization_ranges(cfg)\n    \n    return cfg\n\ndef unscale_prediction(pred_tensor: np.ndarray, cfg: DictConfig):\n    \"\"\"Convert normalized network output back to original physical ranges but\n    keep the tensor layout identical to the network output:\n    (C,D,H,W) with C = 3 continuous + 8 categorical (=11).\n\n    The first three channels are converted to real-world values, while the\n    remaining categorical channels are left untouched.\n    \"\"\"\n    # Number of continuous channels ------------------------------------------------\n    CONT_CH = 3  # density, E, nu\n\n    # Split (view only) channels ----------------------------------------------------\n    cont = pred_tensor[:CONT_CH]             # (3,D,H,W)\n    cat  = pred_tensor[CONT_CH:]             # (8,D,H,W) – untouched\n\n    # The network's output is not strictly bounded, so we clip it to the expected [-1, 1] range.\n    cont = np.clip(cont, -1.0, 1.0)\n\n    # Allocate output array with the same shape as the input ------------------------\n    out = pred_tensor.copy().astype(np.float32)  # (11,D,H,W)\n\n    # Unscale continuous channels using the loaded normalization ranges ------------\n    # Convert from [-1, 1] back to [min, max] range\n    dens_log = (cont[0] + 1.0) * (cfg.training.density_max - cfg.training.density_min) / 2.0 + cfg.training.density_min\n    out[0] = 10 ** dens_log\n    logging.info(f\"DENSITY: cont[0] {cont[0].mean()} mapped to {out[0].mean()}\")\n\n    E_log = (cont[1] + 1.0) * (cfg.training.E_max - cfg.training.E_min) / 2.0 + cfg.training.E_min\n    out[1] = 10 ** E_log\n\n    nu_scaled = cont[2]\n    out[2] = (nu_scaled + 1.0) * (cfg.training.nu_max - cfg.training.nu_min) / 2.0 + cfg.training.nu_min\n\n    # The categorical channels (indices 3:11) are already copied over via .copy()\n    return out\n\ndef transform_nerf_to_world(ply_path: str, dataparser_path: str, world_output_path: str):\n    \"\"\"\n    Transform coordinates from Nerf training space to world space using dataparser transforms.\n    \n    Args:\n        ply_path: Path to input PLY file in Nerf training space\n        dataparser_path: Path to dataparser_transforms.json file\n        world_output_path: Path to save the transformed PLY file\n    \"\"\"\n\n    ply_data = PlyData.read(ply_path)\n    vertex_data = ply_data['vertex'].data\n\n    ## dataparser contains the WORLD to NERF transform.\n    # Load dataparser transforms\n    logging.info(f\"Loading dataparser transform from {dataparser_path}…\")\n    with open(dataparser_path, 'r') as f:\n        dp_json = json.load(f)\n    scale = float(dp_json[\"scale\"])\n    transform = np.asarray(dp_json[\"transform\"], dtype=np.float32)  # shape (3,4)\n\n    # Create transformation matrix\n    T = np.eye(4, dtype=np.float32)\n    T[:3, :] = transform\n    T_inv = np.linalg.inv(T)\n\n    # Vectorised coordinate conversion\n    coords_train = np.vstack((vertex_data['x'], vertex_data['y'], vertex_data['z'])).T.astype(np.float32)\n    coords_scaled = coords_train / scale\n    coords_h = np.concatenate([coords_scaled, np.ones((coords_scaled.shape[0], 1), dtype=np.float32)], axis=1)\n    coords_world = (T_inv @ coords_h.T).T[:, :3]\n\n    # Create new vertex array for world frame\n    vertex_world = vertex_data.copy()\n    vertex_world['x'] = coords_world[:, 0]\n    vertex_world['y'] = coords_world[:, 1]\n    vertex_world['z'] = coords_world[:, 2]\n\n    # Save transformed PLY\n    vertex_world_element = PlyElement.describe(vertex_world, 'vertex')\n    PlyData([vertex_world_element], text=False).write(world_output_path)\n    logging.info(f\"Saved WORLD-frame PLY to {world_output_path}\")\n    conf = vertex_world['conf']\n    logging.info(f\"conf {conf.shape} {conf.min()} {conf.max()} {conf.mean()}\")\n\ndef get_mat_id(arr):\n    if arr.shape == (1, 64, 64, 64):\n        return arr[0]\n    else: ## one hot\n        return np.argmax(arr, axis=0)\n\ndef map_pred_to_ply(pred_path: str, mask_path: str, grid_feature_path: str, output_path: str,\n                    obj_id: str, world_output_path: str = None, dataparser_path: str = None, cfg: DictConfig = None):\n    \"\"\"\n    Map predictions from numpy arrays to a PLY file with material properties and part labels.\n    \n    Args:\n        pred_path: Path to the prediction numpy array (shape: 11, 64, 64, 64)\n        mask_path: Path to the mask numpy array (shape: 64, 64, 64)\n        grid_feature_path: Path to the original voxel grid metadata (.npz file)\n        output_path: Path to save the PLY file\n        obj_id: Object ID\n        world_output_path: Optional path to save the world frame PLY file\n        dataparser_path: Optional path to dataparser_transforms.json\n    \"\"\"\n    # Load metadata from the original grid\n    logging.info(f\"Loading metadata from {grid_feature_path}...\")\n    logging.info(f\"path exists: {os.path.exists(grid_feature_path)}\")\n\n    metadata = np.load(grid_feature_path)\n    min_bounds = metadata['min_bounds']\n    max_bounds = metadata['max_bounds']\n    grid_shape = metadata['grid_shape']\n    \n    logging.info(f\"Grid shape: {grid_shape}\")\n    logging.info(f\"Bounds: min={min_bounds}, max={max_bounds}\")\n    \n    # Load predictions and mask\n    logging.info(f\"Loading predictions from {pred_path}...\")\n    scaled_pred = np.load(pred_path)\n\n    # if scaled_pred.shape == (4, 64, 64, 64):\n    #     print(f\"Input prediction shape is {scaled_pred.shape}, converting to one-hot (11, 64, 64, 64)\")\n    #     cont_pred = scaled_pred[:3]\n    #     material_ids = scaled_pred[3].astype(int)\n    #     num_classes = 8  # From the expected shape (11 = 3 + 8)\n    #     # Create one-hot encoding\n    #     one_hot_seg = np.eye(num_classes, dtype=cont_pred.dtype)[material_ids]  # Shape (64, 64, 64, 8)\n    #     one_hot_seg = np.transpose(one_hot_seg, (3, 0, 1, 2))  # Shape (8, 64, 64, 64)\n    #     # Concatenate continuous predictions with one-hot segmentation\n    #     scaled_pred = np.concatenate([cont_pred, one_hot_seg], axis=0)\n\n    # assert scaled_pred.shape == (11, 64, 64, 64), f\"scaled_pred.shape: {scaled_pred.shape}. Expected (11, 64, 64, 64)\"\n    logging.info(f\"scaled Prediction shape: {scaled_pred.shape}\")\n    \n    # Load config if not provided\n    if cfg is None:\n        cfg = load_config()\n    \n    pred = unscale_prediction(scaled_pred, cfg)\n    logging.info(f\"Unscaled Prediction shape: {pred.shape}\")\n    \n    logging.info(f\"Loading mask from {mask_path}...\")\n    mask = np.load(mask_path)\n    logging.info(f\"Mask shape: {mask.shape}\")\n    assert mask.shape == (64, 64, 64), f\"mask.shape: {mask.shape}. Expected (64, 64, 64)\"\n    logging.info(f\"Number of non-zero elements in mask: {np.sum(mask > 0)} out of {mask.size}\")\n    \n    # Verify shapes\n    pred_spatial_shape = pred.shape[1:4]  # Get spatial dimensions (64,64,64)\n    if not np.array_equal(pred_spatial_shape, grid_shape):\n        raise ValueError(f\"Prediction spatial dimensions {pred_spatial_shape} do not match grid shape {grid_shape}\")\n    if not np.array_equal(mask.shape, grid_shape):\n        raise ValueError(f\"Mask shape {mask.shape} does not match grid shape {grid_shape}\")\n    \n    # Split predictions into continuous and discrete parts\n    cont = pred[:3, :]  # density, E, nu\n    seg = pred[3:, :]  # material type probabilities\n    \n    # Get material_id from discrete predictions using argmax\n    # material_id = np.argmax(seg, axis=0)\n    material_id = get_mat_id(seg)\n    \n    # Create coordinate grid\n    x = np.linspace(min_bounds[0], max_bounds[0], grid_shape[0])\n    y = np.linspace(min_bounds[1], max_bounds[1], grid_shape[1])\n    z = np.linspace(min_bounds[2], max_bounds[2], grid_shape[2])\n    \n    # Create meshgrid for coordinates\n    grid_x, grid_y, grid_z = np.meshgrid(x, y, z, indexing='ij')\n    \n    # Stack coordinates\n    coords = np.stack([grid_x, grid_y, grid_z], axis=-1)\n    \n    # Apply mask to get only valid points\n    valid_mask = mask > 0\n    valid_coords = coords[valid_mask]\n    valid_density = cont[0][valid_mask]\n    valid_E = cont[1][valid_mask]\n    valid_nu = cont[2][valid_mask]\n    valid_material_id = material_id[valid_mask]\n    logging.info(f\"All material_id {np.unique(material_id, return_counts=True)}\")\n    logging.info(f\">> Valid material_id {np.unique(valid_material_id, return_counts=True)}\")\n    \n    # Create structured array for PLY file\n    vertex_data = np.zeros(\n        len(valid_coords),\n        dtype=[\n            ('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1'), ('alpha', 'u1'),\n            ('part_label', 'i4'), ('density', 'f4'), ('E', 'f4'), ('nu', 'f4'),\n            ('material_id', 'i4'),\n            ('conf', 'f4')\n        ]\n    )\n    \n    # Fill in the data\n    vertex_data['x'] = valid_coords[:, 0]\n    vertex_data['y'] = valid_coords[:, 1]\n    vertex_data['z'] = valid_coords[:, 2]\n    vertex_data['red'] = 255  # Default white color\n    vertex_data['green'] = 255\n    vertex_data['blue'] = 255\n    vertex_data['alpha'] = 255\n    vertex_data['part_label'] = valid_material_id\n    vertex_data['density'] = valid_density\n    vertex_data['E'] = valid_E\n    vertex_data['nu'] = valid_nu\n    vertex_data['material_id'] = valid_material_id\n    # Confidence value: probability associated with the chosen material (max across categories)\n    if seg.shape[0] > 1:  # One-hot encoded probabilities\n        max_prob = np.max(seg, axis=0)\n        valid_conf = max_prob[valid_mask]\n    else:  # Class indices, so confidence is not available, default to 1.0\n        valid_conf = np.ones_like(valid_material_id, dtype=np.float32)\n    vertex_data['conf'] = valid_conf\n    \n    logging.info(f\"valid_conf {valid_conf.shape}\")\n    logging.info(f\"seg.shape {seg.shape}\")\n    logging.info(f\"seg {seg.min()} {seg.max()} {seg.mean()}\")\n\n    logging.info(\"STATISTICS:\")\n    logging.info(f\"Part_label {np.unique(vertex_data['part_label'], return_counts=True)}\")\n    logging.info(f\"DENSITY: {vertex_data['density'].mean()} {vertex_data['density'].min()} {vertex_data['density'].max()}\")\n    logging.info(f\"E: {vertex_data['E'].mean()} {vertex_data['E'].min()} {vertex_data['E'].max()}\")\n    logging.info(f\"NU: {vertex_data['nu'].mean()} {vertex_data['nu'].min()} {vertex_data['nu'].max()}\")\n    \n    # Create PLY element and save file\n    vertex_element = PlyElement.describe(vertex_data, 'vertex')\n    PlyData([vertex_element], text=False).write(output_path)\n    logging.info(f\"Saved PLY file to {output_path} from {pred_path}\")\n\n    # ##############################\n    # # NEW: Export to world frame #\n    # ##############################\n    logging.info(f\"world_output_path {world_output_path}\")\n    if world_output_path is not None:\n        if dataparser_path is None:\n            # Heuristic: look for dataparser_transforms.json next to grid_feature_path\n            dataparser_path = Path(grid_feature_path).parent / \"dataparser_transforms.json\"\n            if not dataparser_path.exists():\n                raise FileNotFoundError(\n                    f\"Could not find dataparser_transforms.json at {dataparser_path}. \"\n                    \"Please provide the path using --dataparser_path argument.\"\n                )\n        \n        transform_nerf_to_world(output_path, dataparser_path, world_output_path)\n\n@hydra.main(version_base=None, config_path=\"../../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    set_logger()\n    \"\"\"Main function to map predictions to PLY file.\"\"\"\n    # Validate required mapping parameters\n    if not cfg.mapping.pred_path:\n        raise ValueError(\"mapping.pred_path is required\")\n    if not cfg.mapping.mask_path:\n        raise ValueError(\"mapping.mask_path is required\")\n    if not cfg.mapping.grid_feature_path:\n        raise ValueError(\"mapping.grid_feature_path is required\")\n    if not cfg.mapping.output_path:\n        raise ValueError(\"mapping.output_path is required\")\n    if not cfg.mapping.obj_id:\n        raise ValueError(\"mapping.obj_id is required\")\n    \n    # Load normalization ranges\n    cfg = load_normalization_ranges(cfg)\n    \n    map_pred_to_ply(\n        cfg.mapping.pred_path, \n        cfg.mapping.mask_path, \n        cfg.mapping.grid_feature_path, \n        cfg.mapping.output_path, \n        cfg.mapping.obj_id, \n        world_output_path=cfg.mapping.world_output_path, \n        dataparser_path=cfg.mapping.dataparser_path, \n        cfg=cfg\n    )\n\nif __name__ == \"__main__\":\n    main() "
  },
  {
    "path": "pixie/voxel/segmentation.py",
    "content": "import sys\nimport torch\nimport numpy as np\nfrom typing import Tuple, Dict, List\nimport trimesh\nfrom f3rm.features.clip import clip\nfrom f3rm.features.clip_extract import CLIPArgs\nfrom pixie.utils import str2bool, load_json\nimport logging\nimport numpy as np\nfrom plyfile import PlyData, PlyElement\nimport matplotlib.pyplot as plt\nimport trimesh\nimport json\nimport os\nfrom pixie.utils import set_logger\n\ndef get_initial_voxel_grid_from_saved(\n    grid_feature_path: str,\n    occupancy_path: str = None,  # Deprecated: kept for RGB color mapping only\n    device: str = \"cuda\",\n) -> Tuple[torch.Tensor, torch.Tensor, Dict[str, int]]:\n    \"\"\"\n    Get the feature grid from a saved file masked by the occupancy grid provided\n    by the occupancy_path. `occupancy_path` was precomputed using alpha thresholding +\n    removing `black` background + connected component outlier removal using DBSCAN. See \n    `voxelize.py` for more details.\n    \n    Args:\n        grid_feature_path: Path to the saved feature grid metadata (.npz file)\n        query: Text query to filter voxels\n        clip_model: CLIP model for text encoding\n        device: Device to use for computation\n        alpha_threshold: Threshold for density values\n        softmax_temperature: Temperature for softmax when computing language probabilities\n        voxel_size: Size of each voxel\n        point_cloud_path: Path to pre-filtered point cloud (if None, will use default path)\n        \n    Returns:\n        Tuple containing:\n        - voxel_grid: Tensor of shape (num_voxels, 3) containing filtered voxel coordinates\n        - voxel_sims: Tensor of shape (num_voxels) containing similarities with language query\n        - metrics: Dictionary with metrics about filtering process\n    \"\"\"\n    logging.info(f\"Loading feature grid from {grid_feature_path}...\")\n    \n    # Load metadata\n    metadata = np.load(grid_feature_path)\n    min_bounds = metadata['min_bounds']\n    max_bounds = metadata['max_bounds']\n    grid_shape = metadata['grid_shape']\n    \n    logging.info(f\"Bounds: min={min_bounds}, max={max_bounds}\")\n    \n    # Load features\n    features_path = grid_feature_path.replace('.npz', '_features.npy')\n    logging.info(f\"Loading features from {features_path}...\")\n    features = np.load(features_path)\n    \n    # Track metrics\n    metrics = {\"initial\": np.prod(grid_shape)}\n    \n    # Load occupancy mask to drive voxel selection (authoritative mask)\n    mask_path = grid_feature_path.replace('.npz', '_mask.npy')\n    assert os.path.exists(mask_path), f\"Mask not found at {mask_path}. Please run voxelization first.\"\n    mask_np = np.load(mask_path).astype(bool)\n\n    # Create coordinate grid and select masked voxels (ordering matches mask flatten in C-order)\n    logging.info(\"Creating coordinate grid from metadata and applying occupancy mask...\")\n    x = torch.linspace(min_bounds[0], max_bounds[0], grid_shape[0], device=device)\n    y = torch.linspace(min_bounds[1], max_bounds[1], grid_shape[1], device=device)\n    z = torch.linspace(min_bounds[2], max_bounds[2], grid_shape[2], device=device)\n    grid_x, grid_y, grid_z = torch.meshgrid(x, y, z, indexing='ij')\n    coords = torch.stack([grid_x, grid_y, grid_z], dim=-1)  # (D,H,W,3)\n\n    # Flatten features in C-order and select exactly masked indices\n    features_tensor = torch.from_numpy(features).to(device)\n    features_flat = features_tensor.reshape(-1, features_tensor.shape[-1])\n    linear_mask = torch.from_numpy(mask_np.reshape(-1)).to(device)\n    features_filtered = features_flat[linear_mask]\n\n    # Keep coords for downstream RGB mapping and saving utilities\n    coords_filtered = coords[torch.from_numpy(mask_np)].to(device)\n\n    metrics[\"masked_voxels\"] = int(linear_mask.sum().item())\n    logging.info(f\"Selected {metrics['masked_voxels']} voxels from mask\")\n\n    return features_filtered, coords_filtered, metrics\n\n\ndef load_occupancy_grid(occupancy_path: str, device: str = \"cuda\"):\n    pc = trimesh.load(occupancy_path)\n    points = np.asarray(pc.vertices)\n    return torch.tensor(points, dtype=torch.float32, device=device)\n\n\n\ndef run_clip(queries, features_filtered, softmax_temperature, device=\"cuda\"):\n    # Load CLIP model\n    clip_model, _ = clip.load(CLIPArgs.model_name, device=device)\n    \n    # Normalize features\n    features_filtered = features_filtered.to(torch.float32)\n    features_filtered /= features_filtered.norm(dim=-1, keepdim=True)\n    \n    # Encode all part queries\n    with torch.no_grad():\n        text_inputs = clip.tokenize(queries).to(device)\n        query_embs = clip_model.encode_text(text_inputs).float()\n        query_embs /= query_embs.norm(dim=-1, keepdim=True)\n    \n    # Compute similarities between each voxel and each part query\n    # Shape: (num_voxels, num_parts)\n    similarities = features_filtered @ query_embs.T\n\n\n    scaled_similarities = similarities / softmax_temperature\n    \n    # Convert scaled similarities to probabilities via softmax.\n    probabilities = torch.nn.functional.softmax(scaled_similarities, dim=1)\n\n    return probabilities, similarities\n\n\ndef clip_part_segmentation(\n   grid_feature_path: str,\n   part_queries: List[str],\n   occupancy_path: str = None,\n   device: str = \"cuda\",\n    softmax_temperature: float = 0.1,  # Added temperature parameter for sharpening\n\n):\n    \"\"\"\n    Perform part-based segmentation of a voxel grid using CLIP.\n    \n    Assign each voxel to one of the part queries.\n    \n    Args:\n        grid_feature_path: Path to the saved feature grid metadata (.npz file)\n        part_queries: List of text queries representing different parts\n        device: Device to use for computation\n        occupancy_path: Path to pre-filtered point cloud\n        \n    Returns:\n        Tuple containing:\n        - coords_filtered: Tensor of shape (num_voxels, 3) containing voxel coordinates\n        - part_labels: Tensor of shape (num_voxels) containing part indices (0 to len(part_queries)-1)\n        - part_scores: Tensor of shape (num_voxels) containing similarity scores for the assigned parts\n        - metrics: Dictionary with metrics about the segmentation process\n    \"\"\"\n    features_filtered, coords_filtered, metrics = get_initial_voxel_grid_from_saved(\n        grid_feature_path,\n        device=device,\n        occupancy_path=occupancy_path,\n    )\n    \n\n    \n    logging.info(f\"features_filtered: {features_filtered.shape}\")\n    probabilities, _ = run_clip(part_queries, features_filtered, softmax_temperature, device=device)\n\n    # Get the index of the part with highest similarity for each voxel\n    # Shape: (num_voxels)\n    part_labels = torch.argmax(probabilities, dim=1)\n    \n    # Get the similarity score for the assigned part\n    # Shape: (num_voxels)\n    part_scores = torch.gather(probabilities, 1, part_labels.unsqueeze(1)).squeeze(1)\n    \n    \n    # Get the coordinates for each voxel (assuming they're available from the first function)\n    # This needs to be fixed as coords_filtered isn't returned by get_initial_voxel_grid_from_saved\n    # For now, we'll need to reconstruct the coordinates\n    \n    metrics[\"num_parts\"] = len(part_queries)\n    \n    # Count voxels assigned to each part\n    for i, query in enumerate(part_queries):\n        part_count = (part_labels == i).sum().item()\n        metrics[f\"part_{i}_{query}\"] = part_count\n        logging.info(f\"Part {i} ({query}): {part_count} voxels\")\n    \n    return coords_filtered, part_labels, part_scores, metrics\n\nimport numpy as np\nfrom sklearn.neighbors import KDTree\nfrom scipy.stats import mode\nfrom tqdm import tqdm\n\ndef local_post_process_segmentation(\n    coords: torch.Tensor,\n    part_labels: torch.Tensor,\n    k: int = 200,\n) -> torch.Tensor:\n    \"\"\"\n    Perform local post-processing on segmentation results using k-nearest neighbors majority voting.\n    \n    Args:\n        coords: Tensor of shape (num_points, 3) containing point coordinates.\n        part_labels: Tensor of shape (num_points) containing segmentation labels.\n        k: Number of nearest neighbors to consider for voting.\n        \n    Returns:\n        new_labels: Tensor of shape (num_points) with updated labels after local post-processing.\n    \"\"\"\n\n    # Convert tensors to NumPy arrays\n    coords_np = coords.cpu().numpy()\n    labels_np = part_labels.cpu().numpy()\n    \n    # Build a KDTree for fast neighbor search\n    tree = KDTree(coords_np)\n    new_labels_np = labels_np.copy()\n    \n    logging.info(\">>>> LOCAL POST-PROCESSING\")\n    # For each point, query the k nearest neighbors and take a majority vote.\n    for i, point in tqdm(enumerate(coords_np), total=len(coords_np), desc=\"Local Post-Processing\"):\n        # Query the k nearest neighbors (including the point itself)\n        _, indices = tree.query(point.reshape(1, -1), k=k)\n        neighbor_labels = labels_np[indices[0]]\n        # Compute the mode (most frequent label) among the neighbors\n        m = mode(neighbor_labels, keepdims=False)\n        new_labels_np[i] = m.mode\n    \n    # Return as a torch tensor on the original device\n    return torch.tensor(new_labels_np, device=part_labels.device)\n\n\n\n\ndef save_segmented_point_cloud(\n    coords: torch.Tensor,\n    part_labels: torch.Tensor,\n    output_dir: str,\n    cmap_name: str = 'tab10',\n    original_pc_path: str = None,\n    part_queries: List[str] = None,\n    material_props: Dict[str, Dict[str, float]] = None,\n    grid_feature_path: str = None,  # Added parameter for the original grid path\n    background_id: int = 7  # Added parameter for background material ID\n):\n    \"\"\"\n    Save segmented point cloud to a PLY file with colors based on part labels.\n    \n    Args:\n        coords: Tensor of shape (num_points, 3) containing point coordinates\n        part_labels: Tensor of shape (num_points) containing part indices\n        output_dir: Directory to save the output files\n        cmap_name: Name of the colormap to use for part colors\n        original_pc_path: Path to the original point cloud file (required if use_actual_rgb=True)\n        part_queries: List of part query strings corresponding to part_labels\n        material_dict_path: Path to JSON file mapping part queries to material properties\n        grid_feature_path: Path to the original feature grid metadata (.npz file)\n    \"\"\"\n\n    # Create output directory if it doesn't exist\n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Define output paths within the directory\n    rgb_output_path = os.path.join(output_dir, \"segmented_rgb.ply\")\n    semantic_output_path = os.path.join(output_dir, \"segmented_semantics.ply\")\n    material_grid_path = os.path.join(output_dir, \"material_grid.npy\")\n    \n    # Convert tensors to numpy arrays\n    coords_np = coords.cpu().numpy()\n    part_labels_np = part_labels.cpu().numpy()\n    \n    assert len(part_labels_np) == len(coords_np), f\"part_labels_np and coords_np must have the same length. len(part_labels_np): {len(part_labels_np)}, len(coords_np): {len(coords_np)}. Mismatch is likely due to new voxelization and cached part_labels_np. Try re-running with overwrite=True to recompute part_labels\"\n    \n    # Initialize colors array for RGB and semantic colors\n    rgb_colors = np.zeros((coords_np.shape[0], 4), dtype=np.float32)\n    semantic_colors = np.zeros((coords_np.shape[0], 4), dtype=np.float32)\n    \n    # Initialize material property arrays\n    density = np.zeros(coords_np.shape[0], dtype=np.float32)\n    E = np.zeros(coords_np.shape[0], dtype=np.float32)\n    nu = np.zeros(coords_np.shape[0], dtype=np.float32)\n    material_id = np.zeros(coords_np.shape[0], dtype=np.int32)\n    \n\n    \n    # Get RGB colors from original point cloud if available\n    if original_pc_path:\n        logging.info(\">>> LOADING ORIGINAL RGB\")\n        # Load original point cloud to get RGB values\n        original_pc = trimesh.load(original_pc_path)\n        original_vertices = np.asarray(original_pc.vertices)\n        original_colors = np.asarray(original_pc.colors)\n        \n        # Normalize colors if needed\n        if original_colors.max() > 1.0:\n            original_colors = original_colors / 255.0\n            \n        # We need to map the filtered coordinates back to the original point cloud\n        # This is a simple implementation that finds the nearest neighbor\n        from scipy.spatial import cKDTree\n        tree = cKDTree(original_vertices)\n        _, indices = tree.query(coords_np, k=1)\n        \n        # Get the corresponding colors\n        rgb_colors[:, :3] = original_colors[indices, :3]\n        rgb_colors[:, 3] = 1.0  # Full alpha\n    else:\n        # If no original point cloud, use white for RGB\n        rgb_colors[:, :3] = 1.0  # White\n        rgb_colors[:, 3] = 1.0  # Full alpha\n    \n    # Create semantic colors based on part labels\n    logging.info(\">>> CREATING SEMANTIC COLORS\")\n    # Create a colormap with distinct colors for each part\n    num_parts = part_labels_np.max() + 1\n    cmap = plt.colormaps[cmap_name]\n    \n    # Generate colors for each point based on its part label\n    for i in range(num_parts):\n        mask = (part_labels_np == i)\n        if not np.any(mask):\n            continue\n            \n        base_color = cmap(i % cmap.N)  # RGBA tuple\n        semantic_colors[mask] = np.array(base_color)\n    \n    # Assign material properties based on part labels\n    for i in range(part_labels_np.max() + 1):\n        mask = (part_labels_np == i)\n        if not np.any(mask):\n            continue\n        \n        # Get part query string for this label\n        part_name = part_queries[i]\n        \n        assert part_name in material_props, f\"part_name `{part_name}` not found in material_props. Material props: {material_props}\"\n        props = material_props[part_name]\n        density[mask] = props.get(\"density\", 200)\n        E[mask] = props.get(\"E\", 2e6)\n        nu[mask] = props.get(\"nu\", 0.4)\n        material_id[mask] = props.get(\"material_id\", 0)\n        logging.info(f\"Applied material properties for {part_name}: {props}\")\n    \n    # Save both RGB and semantic point clouds\n    \n    # 1. Save RGB point cloud\n    # Convert floating point colors [0,1] to uint8 [0,255]\n    rgb_colors_uint8 = (rgb_colors * 255).astype(np.uint8)\n    \n    # Create structured array for RGB PLY file\n    vertex_data_rgb = np.zeros(\n        coords_np.shape[0],\n        dtype=[\n            ('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1'), ('alpha', 'u1'),\n            ('part_label', 'i4'), ('density', 'f4'), ('E', 'f4'), ('nu', 'f4'),\n            ('material_id', 'i4')\n        ]\n    )\n    \n    # Fill in the data for RGB point cloud\n    vertex_data_rgb['x'] = coords_np[:, 0]\n    vertex_data_rgb['y'] = coords_np[:, 1]\n    vertex_data_rgb['z'] = coords_np[:, 2]\n    vertex_data_rgb['red'] = rgb_colors_uint8[:, 0]\n    vertex_data_rgb['green'] = rgb_colors_uint8[:, 1]\n    vertex_data_rgb['blue'] = rgb_colors_uint8[:, 2]\n    vertex_data_rgb['alpha'] = rgb_colors_uint8[:, 3]\n    vertex_data_rgb['part_label'] = part_labels_np\n    vertex_data_rgb['density'] = density\n    vertex_data_rgb['E'] = E\n    vertex_data_rgb['nu'] = nu\n    vertex_data_rgb['material_id'] = material_id\n    \n    # Create PLY element and save RGB file\n    vertex_element_rgb = PlyElement.describe(vertex_data_rgb, 'vertex')\n    PlyData([vertex_element_rgb], text=False).write(rgb_output_path)\n    logging.info(f\"RGB point cloud saved to {rgb_output_path}\")\n    \n    # 2. Save semantic point cloud\n    # Convert semantic colors to uint8\n    semantic_colors_uint8 = (semantic_colors * 255).astype(np.uint8)\n    \n    # Create structured array for semantic PLY file\n    vertex_data_semantic = np.zeros(\n        coords_np.shape[0],\n        dtype=[\n            ('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1'), ('alpha', 'u1'),\n            ('part_label', 'i4'), ('density', 'f4'), ('E', 'f4'), ('nu', 'f4'),\n            ('material_id', 'i4')\n        ]\n    )\n    \n    # Fill in the data for semantic point cloud\n    vertex_data_semantic['x'] = coords_np[:, 0]\n    vertex_data_semantic['y'] = coords_np[:, 1]\n    vertex_data_semantic['z'] = coords_np[:, 2]\n    vertex_data_semantic['red'] = semantic_colors_uint8[:, 0]\n    vertex_data_semantic['green'] = semantic_colors_uint8[:, 1]\n    vertex_data_semantic['blue'] = semantic_colors_uint8[:, 2]\n    vertex_data_semantic['alpha'] = semantic_colors_uint8[:, 3]\n    vertex_data_semantic['part_label'] = part_labels_np\n    vertex_data_semantic['density'] = density\n    vertex_data_semantic['E'] = E\n    vertex_data_semantic['nu'] = nu\n    vertex_data_semantic['material_id'] = material_id\n    logging.info(\"[SEGMENTATION] Statistics:\")\n    logging.info(f\"material_id: {np.unique(material_id, return_counts=True)}\")\n    logging.info(f\"part_labels: {np.unique(part_labels_np, return_counts=True)}\")\n    logging.info(f\"density: {np.mean(density)}\")\n    logging.info(f\"E: {np.mean(E)}\")\n    logging.info(f\"nu: {np.mean(nu)}\")\n    \n    # Create PLY element and save semantic file\n    vertex_element_semantic = PlyElement.describe(vertex_data_semantic, 'vertex')\n    PlyData([vertex_element_semantic], text=False).write(semantic_output_path)\n    logging.info(f\"Semantic point cloud saved to {semantic_output_path}\")\n    \n    # 3. Save material properties for the entire voxel grid\n    if grid_feature_path is not None:\n        logging.info(\">>> CREATING MATERIAL GRID\")\n        # Load metadata from the original grid\n        metadata = np.load(grid_feature_path)\n        min_bounds = metadata['min_bounds']\n        max_bounds = metadata['max_bounds']\n        grid_shape = metadata['grid_shape']\n        \n        logging.info(f\"Grid shape: {grid_shape}\")\n        \n        # Create material property grids with the same shape as the original grid\n        # Each grid will have 4 channels: density, E, nu, material_id\n        material_grid = np.zeros((*grid_shape, 4), dtype=np.float32)\n        \n        # Set default values for background (material_id=background_id)\n        material_grid[..., 0] = 0  # density = 0\n        material_grid[..., 1] = 0  # E = 0\n        material_grid[..., 2] = 0  # nu = 0\n        material_grid[..., 3] = background_id  # material_id = background_id\n        # material_grid = np.ones((*grid_shape, 4), dtype=np.float32) * -1 ## default to -1\n        \n        # Use the authoritative occupancy mask to place values exactly\n        mask_path = grid_feature_path.replace('.npz', '_mask.npy')\n        assert os.path.exists(mask_path), f\"Mask not found: {mask_path}\"\n        mask = np.load(mask_path).astype(bool)\n\n        flat_idx = np.flatnonzero(mask.ravel(order='C'))\n        assert len(flat_idx) == len(coords_np), (\n            f\"Mask/coords length mismatch: mask has {len(flat_idx)} true voxels, \"\n            f\"coords has {len(coords_np)} points. Ensure coords come from mask.\")\n\n        material_grid_flat = material_grid.reshape(-1, 4)\n        material_grid_flat[flat_idx, 0] = density\n        material_grid_flat[flat_idx, 1] = E\n        material_grid_flat[flat_idx, 2] = nu\n        material_grid_flat[flat_idx, 3] = material_id\n\n        # logging.info(f\"Number of points in point cloud: {len(coords_np)}\")\n        # logging.info(f\"Number of unique voxels assigned: {len(unique_voxels_assigned)}\")\n        # logging.info(f\"Difference (duplicate mappings): {len(coords_np) - len(unique_voxels_assigned)}\")\n\n        # material_id_count = (material_grid[:, :, :, 3] == 7).sum()\n        # logging.info(f\"AFTER ASSIGNMENT: Number of material_id == 7 in material_grid: {material_id_count}\")\n        # logging.info(f\"Number of voxels with material_id != BACKGROUND_ID: {1000000 - material_id_count}\")\n        \n        # Save the material grid\n        np.save(material_grid_path, \n                 material_grid)\n        logging.info(f\"Material grid saved to {material_grid_path}\")\n        \n        # Also save each property as a separate file for easier visualization\n        np.save(os.path.join(output_dir, \"density_grid.npy\"), material_grid[..., 0])\n        np.save(os.path.join(output_dir, \"E_grid.npy\"), material_grid[..., 1])\n        np.save(os.path.join(output_dir, \"nu_grid.npy\"), material_grid[..., 2])\n        np.save(os.path.join(output_dir, \"material_id_grid.npy\"), material_grid[..., 3])\n        logging.info(f\"Individual material property grids saved to {output_dir}\")\n\n\n\n\nimport torch\nimport numpy as np\nfrom scipy.spatial import KDTree\nfrom collections import deque\n\ndef build_adjacency(coords, radius=0.05):\n    \"\"\"\n    Build an adjacency list for each point i, containing indices of neighbors\n    within the specified 'radius'.\n    \n    Args:\n        coords (np.ndarray): Array of shape (N, 3) with point coordinates.\n        radius (float): Neighborhood radius for adjacency.\n        \n    Returns:\n        adjacency (list[list[int]]): adjacency[i] is a list of neighbor indices for point i.\n    \"\"\"\n    n_points = coords.shape[0]\n    tree = KDTree(coords)\n    adjacency = [[] for _ in range(n_points)]\n    \n    # For each point, find all neighbors within 'radius'\n    for i in tqdm(range(n_points), total=n_points):\n        neighbor_indices = tree.query_ball_point(coords[i], r=radius)\n        adjacency[i] = neighbor_indices\n    \n    return adjacency\n\ndef get_connected_components(adjacency, labels):\n    \"\"\"\n    Identify connected components for each label using BFS.\n    \n    Args:\n        adjacency (list[list[int]]): adjacency[i] is a list of neighbors for point i.\n        labels (np.ndarray): shape (N,) of integer labels.\n        \n    Returns:\n        label_to_components (dict): \n            { label_value: [ list_of_components_for_this_label, ... ], ... }\n        Each component is a list of point indices.\n    \"\"\"\n    visited = set()\n    label_to_components = {}\n    n_points = len(labels)\n    \n    for i in tqdm(range(n_points), total=n_points):\n        if i not in visited:\n            current_label = labels[i]\n            # BFS to gather connected points with the same label\n            queue = deque([i])\n            component = []\n            visited.add(i)\n            \n            while queue:\n                node = queue.popleft()\n                component.append(node)\n                for nb in adjacency[node]:\n                    if nb not in visited and labels[nb] == current_label:\n                        visited.add(nb)\n                        queue.append(nb)\n            \n            label_to_components.setdefault(current_label, []).append(component)\n    \n    return label_to_components\n\ndef reassign_small_components(adjacency, labels, label_to_components):\n    \"\"\"\n    For each label, keep only the largest connected component. All other small components\n    get relabeled to a special debug label (-1).\n\n    Args:\n        adjacency (list[list[int]]): adjacency[i] is list of neighbor indices.\n            These neighbors are points within the radius specified in build_adjacency().\n        labels (np.ndarray): current labels for each point.\n        label_to_components (dict): { label_value: [components], ... }\n    \"\"\"\n    for lbl, components in label_to_components.items():\n        logging.info(f\">>> LABEL: {lbl} NUM COMPONENTS: {len(components)}\")\n        if len(components) <= 1:\n            # There's only one component or none for this label, nothing to fix\n            continue\n        \n        # Sort components by size descending\n        components.sort(key=len, reverse=True)\n        largest_component = components[0]\n        small_components  = components[1:]\n        \n        # Keep the largest connected component with the current label\n        # For each smaller component, relabel those points to -1 (debug label)\n        for comp in small_components:\n            for idx in comp:\n                # Instead of using majority vote among neighbors, \n                # simply assign a special debug label (-1)\n                labels[idx] = -1\n\n                # The original code below used majority voting among neighbors:\n                # neighbor_labels = []\n                # for nb in adjacency[idx]:\n                #     if nb not in comp:  # only consider neighbors outside this small component\n                #         neighbor_labels.append(labels[nb])\n                # \n                # if len(neighbor_labels) == 0:\n                #     # If isolated (rare), keep the original label or do a fallback\n                #     continue\n                # \n                # # Majority vote among neighbor labels\n                # neighbor_labels = np.array(neighbor_labels)\n                # new_label = _majority_vote(neighbor_labels)\n                # labels[idx] = new_label\n\ndef _majority_vote(label_array):\n    \"\"\"Return the most frequent label in label_array.\"\"\"\n    vals, counts = np.unique(label_array, return_counts=True)\n    return vals[np.argmax(counts)]\n\ndef connected_component_cleanup(\n    coords: torch.Tensor,\n    part_labels: torch.Tensor,\n    radius: float = 0.05\n) -> torch.Tensor:\n    \"\"\"\n    High-level function that:\n    1) Builds adjacency among points (within 'radius').\n    2) Finds connected components for each label.\n    3) Keeps only the largest connected component for each label, re-labels smaller 'islands.'\n    \n    Args:\n        coords (torch.Tensor): shape (N, 3) of point coordinates.\n        part_labels (torch.Tensor): shape (N,) of integer labels.\n        radius (float): neighborhood radius for adjacency graph.\n    \n    Returns:\n        updated_labels (torch.Tensor): shape (N,) updated segmentation labels.\n    \"\"\"\n    device = part_labels.device\n    \n    # Convert to numpy\n    coords_np = coords.cpu().numpy()\n    labels_np = part_labels.cpu().numpy()\n    \n    # 1) Build adjacency graph\n    adjacency = build_adjacency(coords_np, radius=radius)\n    \n    # 2) Get connected components for each label\n    label_to_components = get_connected_components(adjacency, labels_np)\n    \n    # 3) Re-label smaller \"islands\" if a label must be unique\n    reassign_small_components(adjacency, labels_np, label_to_components)\n    \n    # Convert back to torch\n    updated_labels = torch.from_numpy(labels_np).to(device)\n    return updated_labels\n\n\n\nimport argparse\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--grid_feature_path\", type=str, required=True)\n    parser.add_argument(\"--occupancy_path\", type=str, required=True)\n    parser.add_argument(\"--output_dir\", type=str, required=True)\n    # parser.add_argument(\"--part_queries\", type=str, required=True)\n    parser.add_argument(\"--material_dict_path\", type=str, required=True,\n                        help=\"Path to JSON file mapping part queries to material properties\")\n    parser.add_argument(\"--use_spatial_smoothing\", type=str2bool, default=False)\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False)\n    parser.add_argument(\"--background_id\", type=int, default=7,\n                        help=\"Material ID for background voxels\")\n    # parser.add_argument(\"--overwrite\", type=str2bool, default=True)\n    args = parser.parse_args()\n    set_logger()\n\n    assert os.path.exists(args.material_dict_path), f\"material_dict_path {args.material_dict_path} does not exist\"\n\n    material_props = load_json(args.material_dict_path)\n    logging.info(f\"Loaded material properties from {args.material_dict_path}\")\n    if \"material_dict\" in material_props:\n        material_props = material_props[\"material_dict\"]\n    part_queries = list(material_props.keys())\n\n    labels_output_path = os.path.join(args.output_dir, \"part_labels.npy\")\n    if args.overwrite or not os.path.exists(labels_output_path):\n        coords_filtered, part_labels, part_scores, metrics = clip_part_segmentation(args.grid_feature_path, \n                                                                                    part_queries,\n                                                                                    args.occupancy_path)\n        if args.use_spatial_smoothing:\n            logging.info(\">>>> USING SPATIAL SMOOTHING\")\n            part_labels = local_post_process_segmentation(coords_filtered, part_labels)\n        # Save part labels as a numpy array\n        np.save(labels_output_path, part_labels.cpu().numpy())\n        logging.info(f\"Part labels saved to {labels_output_path}\")\n    else:\n        part_labels = torch.from_numpy(np.load(labels_output_path))\n        coords_filtered = load_occupancy_grid(args.occupancy_path)\n    \n    # Save all outputs to the specified directory\n    save_segmented_point_cloud(coords_filtered, part_labels, args.output_dir, \n                               original_pc_path=args.occupancy_path,\n                               part_queries=part_queries, \n                               material_props=material_props,\n                               grid_feature_path=args.grid_feature_path,\n                               background_id=args.background_id)  # Pass background_id from config"
  },
  {
    "path": "pixie/voxel/viz_segmentation.py",
    "content": "from pixie.voxel.segmentation import *\nfrom pixie.utils import *\nimport matplotlib.pyplot as plt\nfrom vlmx.utils import load_json\n\n\ndef visualize_part_segmentation(\n    coords: torch.Tensor,\n    part_labels: torch.Tensor,\n    part_queries: List[str],\n    part_scores: torch.Tensor = None,\n    use_scores_for_alpha: bool = False,\n    point_size: float = 5.0,\n    figsize: Tuple[int, int] = (12, 10),\n    view_angles: Tuple[float, float] = (30, 45),\n    save_path: str = None,\n):\n    \"\"\"\n    Visualize part segmentation results with different colors for each part.\n    \n    Args:\n        coords: Tensor of shape (num_points, 3) containing point coordinates\n        part_labels: Tensor of shape (num_points) containing part indices\n        part_queries: List of part names corresponding to the indices\n        part_scores: Optional tensor of shape (num_points) with similarity scores\n        use_scores_for_alpha: If True, use scores to determine point transparency\n        point_size: Size of points in the scatter plot\n        figsize: Figure size (width, height) in inches\n        view_angles: Tuple of (elevation, azimuth) for the 3D view\n        save_path: If provided, save the figure to this path\n        \n    Returns:\n        matplotlib figure object\n    \"\"\"\n    import matplotlib.pyplot as plt\n    import matplotlib.cm as cm\n    from mpl_toolkits.mplot3d import Axes3D\n    import numpy as np\n    \n    # Convert tensors to numpy arrays\n    coords_np = coords.cpu().numpy()\n    part_labels_np = part_labels.cpu().numpy()\n    \n    if use_scores_for_alpha and part_scores is not None:\n        part_scores_np = part_scores.cpu().numpy()\n    \n    # Check if there are any -1 labels present\n    has_unassigned = -1 in part_labels_np\n    \n    # Create a colormap with distinct colors for each part\n    # Only add an extra color for the unassigned label if it exists\n    num_parts = len(part_queries)\n    num_colors_needed = num_parts + (1 if has_unassigned else 0)\n    cmap = plt.colormaps['tab10']\n    \n    # Create figure and 3D axis\n    fig = plt.figure(figsize=figsize)\n    ax = fig.add_subplot(111, projection='3d')\n    \n    # First handle the unassigned (-1) labels if they exist\n    if has_unassigned:\n        mask_unassigned = (part_labels_np == -1)\n        if np.any(mask_unassigned):\n            unassigned_points = coords_np[mask_unassigned]\n            # Use the last color in the colormap for unassigned points\n            unassigned_color = cmap(num_colors_needed - 1)\n            \n            ax.scatter(\n                unassigned_points[:, 0], \n                unassigned_points[:, 1], \n                unassigned_points[:, 2],\n                color=unassigned_color,\n                s=point_size,\n                label=\"unassigned\",\n                alpha=0.5  # Lower alpha for unassigned points\n            )\n    \n    # Plot each part with a different color and variable alpha if requested\n    for i, part_name in enumerate(part_queries):\n        mask = (part_labels_np == i)\n        if not np.any(mask):\n            continue\n            \n        part_points = coords_np[mask]\n        base_color = cmap(i)  # RGBA tuple\n        \n        if use_scores_for_alpha and part_scores is not None:\n            # Use the part scores to define alpha for each point.\n            alphas = part_scores_np[mask]\n            # Ensure alphas are in the valid range [0, 1]. If not, clip them.\n            alphas = np.clip(alphas, 0, 1)\n            # Create an array of colors: replicate the base RGB for each point and set the alpha channel.\n            rgb = np.array(base_color[:3])\n            colors = np.tile(rgb, (part_points.shape[0], 1))\n            # Append the per-point alpha as the 4th channel.\n            colors = np.concatenate([colors, alphas[:, None]], axis=1)\n            ax.scatter(\n                part_points[:, 0], \n                part_points[:, 1], \n                part_points[:, 2],\n                c=colors,\n                s=point_size,\n                label=part_name,\n            )\n        else:\n            # Use a fixed alpha if not using scores\n            ax.scatter(\n                part_points[:, 0], \n                part_points[:, 1], \n                part_points[:, 2],\n                color=base_color,\n                s=point_size,\n                label=part_name,\n                alpha=0.8\n            )\n    \n    # Set labels and title\n    ax.set_xlabel('X')\n    ax.set_ylabel('Y')\n    ax.set_zlabel('Z')\n    # ax.set_title('Part Segmentation')\n    # ax.set_axis_off()\n    \n    # Set the viewing angle\n    ax.view_init(elev=view_angles[0], azim=view_angles[1])\n    \n    # Add a legend\n    lgnd = ax.legend(fontsize=20)\n    for handle in lgnd.legend_handles:\n        handle.set_sizes([80])\n\n    \n    # Make axes equal for better visualization\n    x_limits = ax.get_xlim3d()\n    y_limits = ax.get_ylim3d()\n    z_limits = ax.get_zlim3d()\n    \n    x_range = abs(x_limits[1] - x_limits[0])\n    y_range = abs(y_limits[1] - y_limits[0])\n    z_range = abs(z_limits[1] - z_limits[0])\n    max_range = max(x_range, y_range, z_range) / 2.0\n    \n    x_mid = (x_limits[1] + x_limits[0]) / 2\n    y_mid = (y_limits[1] + y_limits[0]) / 2\n    z_mid = (z_limits[1] + z_limits[0]) / 2\n    \n    ax.set_xlim3d([x_mid - max_range, x_mid + max_range])\n    ax.set_ylim3d([y_mid - max_range, y_mid + max_range])\n    ax.set_zlim3d([z_mid - max_range, z_mid + max_range])\n    \n    # Make sure all axes have equal scale\n    ax.set_box_aspect([1, 1, 1])\n    \n    plt.tight_layout()\n    \n    if save_path:\n        plt.savefig(save_path, dpi=300, bbox_inches='tight', pad_inches=0)\n    \n    return fig\n\n\nif __name__ == \"__main__\":\n    import argparse\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--obj_id\", type=str, required=True,\n                       default=\"ecb91f433f144a7798724890f0528b23\")\n    parser.add_argument(\"--output_dir\", type=str, required=True)\n    parser.add_argument(\"--part_queries\", type=str, required=True,\n                        default=\"pot, trunk, leaves\")\n    parser.add_argument(\"--render_outputs_dir\", type=str, required=True,\n                        help=\"Directory containing render outputs (clip_features.npz, clip_features_pc.ply)\")\n    parser.add_argument(\"--k\", type=int, default=200)\n    parser.add_argument(\"--material_dict_path\", type=str, default=None,\n                        help=\"Path to JSON file mapping part queries to material properties\")\n    parser.add_argument(\"--overwrite\", type=str2bool, default=False)\n                        \n    args = parser.parse_args()\n\n\n    os.makedirs(args.output_dir, exist_ok=True)\n\n\n\n    if args.material_dict_path is not None:\n        with open(args.material_dict_path, 'r') as f:\n            material_props = json.load(f)\n        if \"material_dict\" in material_props:\n            material_props = material_props[\"material_dict\"]\n\n    out_fig_path = f\"{args.output_dir}/clip.png\"\n    if not args.overwrite and os.path.exists(out_fig_path):\n        exit(0)\n\n    obj_id = args.obj_id\n    part_queries = [q.strip() for q in args.part_queries.split(\",\")]\n\n    result_dir = args.render_outputs_dir\n\n\n    grid_feature_path = f\"{result_dir}/clip_features.npz\"\n    occupancy_path = f\"{result_dir}/clip_features_pc.ply\"\n\n\n    coords_filtered, part_labels, part_scores, metrics = clip_part_segmentation(\n        grid_feature_path,\n        part_queries,\n        occupancy_path,\n    )\n\n    fig = visualize_part_segmentation(\n        coords_filtered, \n        part_labels, \n        part_queries,\n        part_scores=part_scores,\n        use_scores_for_alpha=False,\n        point_size=2.0,\n        figsize=(14, 12),\n        view_angles=(0, 0)\n    )\n\n    fig.savefig(out_fig_path,\n                bbox_inches='tight',\n                dpi=300,\n                pad_inches=0,\n    \n    )\n    logging.info(f\"SAVED image to {args.output_dir}/clip.png\")\n\n\n    if args.material_dict_path is not None:\n        save_segmented_point_cloud(coords_filtered, part_labels, args.output_dir, \n                                original_pc_path=occupancy_path,\n                                part_queries=part_queries, \n                                material_props=material_props,\n                                grid_feature_path=grid_feature_path)  # Pass grid_feature_path\n\n    "
  },
  {
    "path": "pixie/voxel/voxelize.py",
    "content": "import argparse\nimport logging\nimport os\nimport numpy as np\nimport open3d as o3d\nimport torch\nfrom pathlib import Path\nfrom typing import Tuple, Optional, Dict, Any\nfrom tqdm import tqdm\n\nfrom pixie.utils import str2bool, set_logger\nfrom f3rm_robot.load import load_nerfstudio_objaverse_outputs\nfrom f3rm_robot.initial_proposals import dense_voxel_grid\nfrom f3rm_robot.optimize import filter_gray_background, remove_floating_clusters, get_qp_feats\n\n\ndef extract_clip_voxel_grid(\n    scene_path: str,\n    output_path: str,\n    bounds: Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float]] = ((-0.5, 0.5), (-0.5, 0.5), (-0.5, 0.5)),\n    voxel_size: float = 0.01,\n    batch_size: int = 4096,\n    alpha_weighted: bool = True,\n    device: str = \"cuda\" if torch.cuda.is_available() else \"cpu\",\n    alpha_threshold_for_mask: float = 0.01,\n    gray_threshold_for_mask: float = 0.05,\n    run_outlier_filter: bool = True,\n    nb_neighbors: int = 50,\n    std_ratio: float = 4.0,\n    min_cluster_pts: int = 10,\n    eps_multiplier: float = 5.0,\n) -> str:\n    \"\"\"\n    Extract CLIP features in a voxel grid format from a trained F3RM model.\n    \n    Args:\n        scene_path: Path to the trained F3RM model\n        output_path: Path to save the extracted feature grid\n        min_bounds: Minimum bounds of the voxel grid in world coordinates\n        max_bounds: Maximum bounds of the voxel grid in world coordinates\n        voxel_size: Size of each voxel\n        batch_size: Number of voxels to process at once\n        alpha_weighted: Whether to weight features by alpha (density)\n        device: Device to use for computation\n        alpha_threshold_for_mask: Threshold for occupancy mask generation\n        gray_threshold_for_mask: Threshold for gray background filtering\n        run_outlier_filter: Whether to run outlier filtering\n        nb_neighbors: Number of neighbors for outlier removal\n        std_ratio: Standard deviation ratio for outlier removal\n        min_cluster_pts: Minimum points for cluster removal\n        eps_multiplier: Epsilon multiplier for DBSCAN clustering\n        \n    Returns:\n        Path to the saved feature grid metadata\n    \"\"\"\n    logging.info(f\"Loading feature field from {scene_path}\")\n    load_state = load_nerfstudio_objaverse_outputs(scene_path)\n    feature_field = load_state.feature_field_adapter()\n    \n    # Extract min/max bounds from the bounds tuple\n    min_bounds = (bounds[0][0], bounds[1][0], bounds[2][0])\n    max_bounds = (bounds[0][1], bounds[1][1], bounds[2][1])\n    \n    logging.info(f\"Creating voxel grid with size {voxel_size}\")\n    voxel_grid = dense_voxel_grid(\n        min_bounds=min_bounds,\n        max_bounds=max_bounds,\n        voxel_size=voxel_size\n    )\n    original_shape = voxel_grid.shape[:-1]  # Exclude the last dimension (3 for xyz)\n    logging.info(f\"Voxel grid shape: {voxel_grid.shape}\")\n    \n    # Flatten and move to device\n    voxel_grid_flat = voxel_grid.reshape(-1, 3)\n    voxel_grid_flat = torch.tensor(voxel_grid_flat, dtype=torch.float32, device=device)\n    \n    # Determine feature dimension\n    with torch.no_grad():\n        sample_output = feature_field(voxel_grid_flat[:1])\n        feature_dim = sample_output[\"feature\"].shape[-1]\n    \n    logging.info(f\"Feature dimension: {feature_dim}\")\n    \n    # Initialize arrays\n    total_voxels = voxel_grid_flat.shape[0]\n    features_cpu = np.zeros((total_voxels, feature_dim), dtype=np.float16)\n    alphas_cpu = np.zeros((total_voxels, 1), dtype=np.float16)\n    rgb_cpu = np.zeros((total_voxels, 3), dtype=np.float16)\n    \n    # Extract features in batches\n    logging.info(\"Extracting features from voxel grid\")\n    with torch.no_grad():\n        for i in tqdm(range(0, total_voxels, batch_size), desc=\"Extracting features\"):\n            end_idx = min(i + batch_size, total_voxels)\n            batch = voxel_grid_flat[i:end_idx]\n            \n            # Get outputs from feature field\n            outputs = feature_field(batch)\n            alpha = feature_field.get_alpha(batch, voxel_size)\n            \n            # Get features - either raw or alpha-weighted\n            if alpha_weighted:\n                feature = get_qp_feats(outputs)\n            else:\n                feature = outputs[\"feature\"]\n            \n            # Get RGB values\n            rgb = feature_field.get_rgb(batch)\n            \n            # Move to CPU and convert to float16\n            features_cpu[i:end_idx] = feature.cpu().to(torch.float16).numpy()\n            alphas_cpu[i:end_idx] = alpha.cpu().to(torch.float16).numpy()\n            rgb_cpu[i:end_idx] = rgb.cpu().to(torch.float16).numpy()\n            \n            # Free up GPU memory\n            del outputs, alpha, feature, rgb\n            torch.cuda.empty_cache()\n    \n    # Reshape to original grid shape\n    logging.info(\"Reshaping arrays to grid format\")\n    features_reshaped = features_cpu.reshape(*original_shape, feature_dim)\n    alphas_reshaped = alphas_cpu.reshape(*original_shape, 1)\n    rgb_reshaped = rgb_cpu.reshape(*original_shape, 3)\n    \n    # Save data\n    _save_voxel_data(\n        output_path, features_reshaped, alphas_reshaped, rgb_reshaped,\n        min_bounds, max_bounds, voxel_size, feature_dim, original_shape,\n        alpha_weighted, alpha_threshold_for_mask\n    )\n    \n    # Create occupancy mask\n    _create_occupancy_mask(\n        output_path, voxel_grid, alphas_reshaped, rgb_reshaped,\n        alpha_threshold_for_mask, gray_threshold_for_mask,\n        run_outlier_filter, nb_neighbors, std_ratio,\n        min_cluster_pts, eps_multiplier, voxel_size, device\n    )\n    \n    logging.info(\"Voxel grid extraction completed\")\n    return output_path\n\n\ndef _save_voxel_data(\n    output_path: str,\n    features: np.ndarray,\n    alphas: np.ndarray,\n    rgb: np.ndarray,\n    min_bounds: Tuple[float, float, float],\n    max_bounds: Tuple[float, float, float],\n    voxel_size: float,\n    feature_dim: int,\n    grid_shape: Tuple[int, int, int],\n    alpha_weighted: bool,\n    alpha_threshold_for_mask: float,\n) -> None:\n    \"\"\"Save voxel data to files.\"\"\"\n    # Create output directory\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n    \n    # Save metadata\n    output_data = {\n        \"min_bounds\": min_bounds,\n        \"max_bounds\": max_bounds,\n        \"voxel_size\": voxel_size,\n        \"feature_dim\": feature_dim,\n        \"grid_shape\": grid_shape,\n        \"alpha_weighted\": alpha_weighted,\n        \"alpha_threshold_for_mask\": alpha_threshold_for_mask,\n    }\n    np.savez_compressed(output_path, **output_data)\n    \n    # Save large arrays to separate files\n    features_path = output_path.replace('.npz', '_features.npy')\n    alphas_path = output_path.replace('.npz', '_alphas.npy')\n    rgb_path = output_path.replace('.npz', '_rgb.npy')\n    \n    logging.info(f\"Saving features to {features_path}\")\n    np.save(features_path, features)\n    \n    logging.info(f\"Saving alphas to {alphas_path}\")\n    np.save(alphas_path, alphas)\n    \n    logging.info(f\"Saving RGB to {rgb_path}\")\n    np.save(rgb_path, rgb)\n\n\ndef _create_occupancy_mask(\n    output_path: str,\n    voxel_grid: np.ndarray,\n    alphas_reshaped: np.ndarray,\n    rgb_reshaped: np.ndarray,\n    alpha_threshold_for_mask: float,\n    gray_threshold_for_mask: float,\n    run_outlier_filter: bool,\n    nb_neighbors: int,\n    std_ratio: float,\n    min_cluster_pts: int,\n    eps_multiplier: float,\n    voxel_size: float,\n    device: str,\n) -> None:\n    \"\"\"Create and save occupancy mask.\"\"\"\n    logging.info(\"Building occupancy mask (density + gray-BG + outlier/cluster filters)\")\n    \n    # Apply density thresholding\n    alphas_flat = torch.from_numpy(alphas_reshaped.reshape(-1)).to(device)\n    density_mask = alphas_flat > alpha_threshold_for_mask\n    idx_density = torch.where(density_mask)[0]\n    \n    coords_density = torch.tensor(\n        voxel_grid.reshape(-1, 3)[idx_density.cpu().numpy()],\n        dtype=torch.float32, device=device\n    )\n    \n    rgb_density = torch.tensor(\n        rgb_reshaped.reshape(-1, 3)[idx_density.cpu().numpy()],\n        dtype=torch.float32, device=device\n    )\n    \n    # Apply gray background filtering\n    class _MockField:\n        def get_rgb(self, _):\n            return rgb_density\n    \n    non_bg_mask = filter_gray_background(\n        coords_density, _MockField(),\n        gray_threshold_for_mask, device, return_mask=True\n    )\n    idx_after_bg = idx_density[non_bg_mask]\n    \n    # Apply outlier and cluster filtering\n    if run_outlier_filter and idx_after_bg.numel():\n        pts_np = voxel_grid.reshape(-1, 3)[idx_after_bg.cpu().numpy()]\n        pcd = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(pts_np))\n        \n        # Statistical outlier removal\n        pcd, ind_stat = pcd.remove_statistical_outlier(\n            nb_neighbors=nb_neighbors, std_ratio=std_ratio\n        )\n        idx_after_stat = idx_after_bg[ind_stat]\n        \n        # Floating cluster removal via DBSCAN\n        labels = np.array(\n            pcd.cluster_dbscan(\n                eps=voxel_size * eps_multiplier,\n                min_points=min_cluster_pts, print_progress=False\n            )\n        )\n        keep_mask = labels != -1\n        idx_final = idx_after_stat[keep_mask]\n    else:\n        idx_final = idx_after_bg\n    \n    # Create final mask\n    final_mask_flat = torch.zeros_like(alphas_flat, dtype=torch.bool)\n    final_mask_flat[idx_final] = True\n    occupancy_mask = final_mask_flat.cpu().numpy().reshape(*alphas_reshaped.shape[:-1])\n    \n    # Save mask\n    mask_path = output_path.replace('.npz', '_mask.npy')\n    np.save(mask_path, occupancy_mask)\n    logging.info(f\"Saved occupancy mask to {mask_path}\")\n\n\ndef compute_occupancy_point_cloud(\n    feature_grid_path: str,\n    alpha_threshold: float = 0.01,\n    gray_threshold: float = 0.05,\n    voxel_downsample_size: float = 0.01,\n    device: str = \"cuda\" if torch.cuda.is_available() else \"cpu\",\n) -> Tuple[o3d.geometry.PointCloud, Dict[str, Any]]:\n    \"\"\"\n    Compute an occupancy point cloud from saved voxel grid features and alphas.\n    \n    Args:\n        feature_grid_path: Path to the saved feature grid metadata (.npz file)\n        alpha_threshold: Threshold for density values to consider a voxel occupied\n        gray_threshold: Threshold for detecting gray background\n        voxel_downsample_size: Size for downsampling the resulting point cloud\n        device: Device to use for computation\n        \n    Returns:\n        Tuple of (point_cloud, metrics_dict)\n    \"\"\"\n    logging.info(f\"Loading feature grid from {feature_grid_path}\")\n    metric = {}\n    \n    # Load metadata\n    metadata = np.load(feature_grid_path)\n    min_bounds = metadata['min_bounds']\n    max_bounds = metadata['max_bounds']\n    voxel_size = float(metadata['voxel_size'])\n    grid_shape = metadata['grid_shape']\n    \n    metric['grid_shape'] = grid_shape\n    metric[\"init_num_voxels\"] = grid_shape[0] * grid_shape[1] * grid_shape[2]\n    \n    logging.info(f\"Grid shape: {grid_shape}, voxel size: {voxel_size}\")\n    logging.info(f\"Bounds: min={min_bounds}, max={max_bounds}\")\n    assert grid_shape[0] == grid_shape[1] == grid_shape[2] == 64, \"Grid must be cubic == 64 (what we trained on)\"\n    \n    # Load data\n    alphas_path = feature_grid_path.replace('.npz', '_alphas.npy')\n    rgb_path = feature_grid_path.replace('.npz', '_rgb.npy')\n    \n    logging.info(f\"Loading alphas from {alphas_path}\")\n    alphas = np.load(alphas_path)\n    \n    logging.info(f\"Loading RGB from {rgb_path}\")\n    rgb = np.load(rgb_path)\n    \n    # Convert to torch tensors\n    alphas_tensor = torch.from_numpy(alphas).to(device)\n    rgb_tensor = torch.from_numpy(rgb).to(device)\n    \n    # Create coordinate grid\n    logging.info(\"Creating coordinate grid\")\n    x = torch.linspace(min_bounds[0], max_bounds[0], grid_shape[0], device=device)\n    y = torch.linspace(min_bounds[1], max_bounds[1], grid_shape[1], device=device)\n    z = torch.linspace(min_bounds[2], max_bounds[2], grid_shape[2], device=device)\n    \n    grid_x, grid_y, grid_z = torch.meshgrid(x, y, z, indexing='ij')\n    coords = torch.stack([grid_x, grid_y, grid_z], dim=-1)\n    \n    # Flatten for processing\n    coords_flat = coords.reshape(-1, 3)\n    alphas_flat = alphas_tensor.reshape(-1, 1)\n    rgb_flat = rgb_tensor.reshape(-1, 3)\n    \n    # Apply density thresholding\n    logging.info(f\"Applying density threshold {alpha_threshold}\")\n    density_mask = alphas_flat.squeeze(-1) > alpha_threshold\n    coords_filtered = coords_flat[density_mask]\n    rgb_filtered = rgb_flat[density_mask]\n    metric[\"num_voxels_after_density_threshold\"] = coords_filtered.shape[0]\n    \n    logging.info(f\"After density filtering: {coords_filtered.shape[0]} points\")\n    \n    # Apply gray background filtering\n    class MockFeatureFieldAdapter:\n        def get_rgb(self, points):\n            return rgb_filtered\n    \n    mock_feature_field = MockFeatureFieldAdapter()\n    \n    logging.info(f\"Applying gray background filtering with threshold {gray_threshold}\")\n    non_bg_mask = filter_gray_background(\n        coords_filtered, mock_feature_field, gray_threshold, device, return_mask=True\n    )\n    \n    # Handle different return types from filter_gray_background\n    if isinstance(non_bg_mask, torch.Tensor) and non_bg_mask.shape == coords_filtered.shape:\n        coords_filtered = non_bg_mask\n        with torch.no_grad():\n            rgb_filtered = mock_feature_field.get_rgb(coords_filtered)\n    else:\n        coords_filtered = coords_filtered[non_bg_mask]\n        rgb_filtered = rgb_filtered[non_bg_mask]\n    \n    metric[\"num_voxels_after_gray_background_filtering\"] = coords_filtered.shape[0]\n    \n    # Check if we have any points left\n    if coords_filtered.shape[0] == 0:\n        logging.warning(\"All voxels were filtered out. Creating empty point cloud.\")\n        logging.warning(f\"This may indicate that your gray_threshold ({gray_threshold}) is too high.\")\n        logging.warning(\"Try lowering the gray_threshold (e.g., --gray_threshold 0.01) or adjusting alpha_threshold.\")\n        \n        pcd = o3d.geometry.PointCloud()\n        metric[\"num_voxels_after_downsampling\"] = 0\n        metric[\"num_voxels_after_outlier_removal\"] = 0\n        metric[\"num_voxels_after_floating_cluster_removal\"] = 0\n        metric[\"final_num_voxels\"] = 0\n        logging.info(f\"Metrics: {metric}\")\n        return pcd, metric\n    \n    # Create point cloud\n    logging.info(\"Creating point cloud\")\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(coords_filtered.cpu().numpy())\n    \n    # Add colors (normalize if needed)\n    if rgb_filtered.numel() > 0 and rgb_filtered.max() > 1.0:\n        rgb_filtered = rgb_filtered / 255.0\n    pcd.colors = o3d.utility.Vector3dVector(rgb_filtered.cpu().numpy())\n    \n    # Downsample point cloud\n    logging.info(f\"Downsampling with voxel size {voxel_downsample_size}\")\n    pcd = pcd.voxel_down_sample(voxel_size=voxel_downsample_size)\n    metric[\"num_voxels_after_downsampling\"] = len(pcd.points)\n    \n    # Remove statistical outliers\n    logging.info(\"Removing outliers\")\n    pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=50, std_ratio=4.0)\n    metric[\"num_voxels_after_outlier_removal\"] = len(pcd.points)\n    \n    # Remove floating clusters\n    logging.info(\"Removing floating clusters\")\n    pcd = remove_floating_clusters(pcd, min_points=10, eps=voxel_downsample_size*5)\n    metric[\"num_voxels_after_floating_cluster_removal\"] = len(pcd.points)\n    \n    logging.info(f\"Final point cloud has {len(pcd.points)} points\")\n    metric[\"final_num_voxels\"] = len(pcd.points)\n    \n    logging.info(f\"Metrics: {metric}\")\n    return pcd, metric\n\n\ndef save_point_cloud(pcd: o3d.geometry.PointCloud, output_path: str) -> None:\n    \"\"\"\n    Save a point cloud to a file.\n    \n    Args:\n        pcd: Open3D point cloud\n        output_path: Path to save the point cloud\n    \"\"\"\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n    o3d.io.write_point_cloud(output_path, pcd)\n    logging.info(f\"Saved point cloud to {output_path}\")\n\n\ndef main() -> None:\n    \"\"\"Main function to run voxel extraction and point cloud generation.\"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Extract CLIP features in voxel grid format from a trained F3RM model\"\n    )\n    \n    # Required arguments\n    parser.add_argument(\"--scene\", type=str, required=True, \n                       help=\"Path to the trained F3RM model\")\n    parser.add_argument(\"--output\", type=str, required=True, \n                       help=\"Path to save the extracted feature grid\")\n    \n    # Bounds arguments\n    parser.add_argument(\"--min_x\", type=float, default=-0.5, help=\"Minimum x bound\")\n    parser.add_argument(\"--min_y\", type=float, default=-0.5, help=\"Minimum y bound\")\n    parser.add_argument(\"--min_z\", type=float, default=-0.5, help=\"Minimum z bound\")\n    parser.add_argument(\"--max_x\", type=float, default=0.5, help=\"Maximum x bound\")\n    parser.add_argument(\"--max_y\", type=float, default=0.5, help=\"Maximum y bound\")\n    parser.add_argument(\"--max_z\", type=float, default=0.5, help=\"Maximum z bound\")\n    \n    # Processing arguments\n    parser.add_argument(\"--voxel_size\", type=float, default=0.01, \n                       help=\"Size of each voxel\")\n    parser.add_argument(\"--batch_size\", type=int, default=4096, \n                       help=\"Number of voxels to process at once\")\n    parser.add_argument(\"--device\", type=str, \n                       default=\"cuda\" if torch.cuda.is_available() else \"cpu\", \n                       help=\"Device to use\")\n    parser.add_argument(\"--alpha_weighted\", type=str2bool, default=True, \n                       help=\"Weight features by alpha (density)\")\n    \n    # Filtering arguments\n    parser.add_argument(\"--alpha_threshold\", type=float, default=0.01, \n                       help=\"Threshold for density values\")\n    parser.add_argument(\"--gray_threshold\", type=float, default=0.05, \n                       help=\"Threshold for gray background filtering. Lower if all voxels are filtered out (e.g., 0.01).\")\n    \n    # Output arguments\n    parser.add_argument(\"--pc_output\", type=str, \n                       help=\"Path to save the extracted point cloud\")\n    \n    args = parser.parse_args()\n    \n    # Set up logging\n    set_logger()\n    \n    # Prepare bounds\n    bounds = ((args.min_x, args.max_x), (args.min_y, args.max_y), (args.min_z, args.max_z))\n    \n    # Extract voxel grid\n    output_path = extract_clip_voxel_grid(\n        args.scene, args.output, bounds,\n        args.voxel_size, args.batch_size, args.alpha_weighted,\n        args.device, args.alpha_threshold\n    )\n    \n    # Generate point cloud\n    pcd, metric = compute_occupancy_point_cloud(\n        output_path, args.alpha_threshold, args.gray_threshold,\n        args.voxel_size, args.device\n    )\n    \n    # Save point cloud\n    pc_output = args.pc_output or output_path.replace('.npz', '_pc.ply')\n    save_point_cloud(pcd, pc_output)\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "render.py",
    "content": "import time\nimport os\nimport logging\nimport shutil\nimport glob\nfrom pathlib import Path\nfrom typing import Optional\n\nimport hydra\nfrom omegaconf import DictConfig\n\nfrom pixie.utils import (run_cmd, resolve_paths,\n                         get_output_paths, create_directories, validate_config,\n                         get_latest_nerf_run, save_contextual_config,\n                         generate_material_segmentation,\n                         generate_neural_segmentation,\n                         get_material_vlm_segmentation_path,\n                         get_material_neural_segmentation_path,\n                         set_logger)\nfrom pixie.viz_utils import compile_video\nimport cv2\n\ndef get_video_fps(video_path: str) -> float:\n    \"\"\"Extracts frames-per-second (FPS) from a video file.\"\"\"\n    if not os.path.exists(video_path):\n        raise FileNotFoundError(f\"Video file not found at {video_path}\")\n    video = cv2.VideoCapture(str(video_path))\n    fps = video.get(cv2.CAP_PROP_FPS)\n    video.release()\n    return fps\n\ndef move_files_to_folder(src_dir: Path, dst_dir: Path) -> None:\n    \"\"\"Move all files from src_dir to dst_dir.\"\"\"\n    dst_dir.mkdir(parents=True, exist_ok=True)\n\n    for file_path in src_dir.iterdir():\n        if file_path.is_file():\n            shutil.move(str(file_path), str(dst_dir / file_path.name))\n\n    # Remove empty source directory\n    if src_dir.exists() and not any(src_dir.iterdir()):\n        src_dir.rmdir()\n\n\ndef render_nerf_model(cfg: DictConfig, paths: dict) -> str:\n    \"\"\"Render RGB images from the trained NeRF model.\"\"\"\n    # Get the latest NeRF training run\n    nerf_output_dir = paths['nerf_output']\n    latest_run = get_latest_nerf_run(nerf_output_dir)\n\n    if not latest_run:\n        raise RuntimeError(\n            f\"No NeRF training run found in {nerf_output_dir}. Please run the pipeline first.\"\n        )\n\n    config_path = os.path.join(latest_run, \"config.yml\")\n    if not os.path.exists(config_path):\n        raise RuntimeError(f\"NeRF config file not found at {config_path}\")\n\n    # Create render output directory\n    render_output_dir = f\"{paths['render_output']}/rgb_renders\"\n    os.makedirs(render_output_dir, exist_ok=True)\n\n    # Check if we need to render (check for existing rendered images in subdirectories)\n    rendered_images_exist = any(glob.glob(f\"{render_output_dir}/*/*/*.{ext}\") \n                               for ext in ['png', 'jpg', 'jpeg'])\n\n    # Render RGB images if needed\n    if cfg.overwrite or not rendered_images_exist:\n        render_cmd = [\n            \"ns-render\",\n            \"dataset\",\n            \"--load-config\",\n            config_path,\n            \"--output-path\",\n            render_output_dir,\n            \"--rendered-output-names\",\n            cfg.output_rendering.nerf_render.rendered_output_names,\n            \"--split\",\n            cfg.output_rendering.nerf_render.split,\n        ]\n\n        run_cmd(render_cmd, step_name=\"RENDER_RGB\")\n        logging.info(\n            f\"RGB rendering completed. Output directory: {render_output_dir}\")\n    else:\n        logging.info(\n            f\"RGB renders already exist at {render_output_dir}. Skipping rendering.\"\n        )\n\n    return render_output_dir\n\ndef render_blender_gs(cfg: DictConfig, paths: dict) -> str:\n    \"\"\"Render Gaussian Splatting outputs using Blender.\"\"\"\n    blender_output_dir = paths['blender_output']\n    render_cfg = cfg.output_rendering.blender_render_gs\n    \n    # Get the ply_dir from physgaussian_output\n    ply_dir = os.path.join(paths['physgaussian_output'], f\"sample_{cfg.physics.sample_id}\", \"ply_files\")\n    assert os.path.exists(ply_dir), f\"PLY directory does not exist: {ply_dir}\"\n    \n    # Create output directory for GS renders\n    gs_output_dir = os.path.join(blender_output_dir, \"gs_renders\")\n    os.makedirs(gs_output_dir, exist_ok=True)\n    \n    # Check if video already exists\n    video_output = os.path.join(gs_output_dir, f\"output.mp4\")\n    if os.path.exists(video_output) and not cfg.overwrite:\n        logging.info(f\"GS render video already exists at {video_output}. Skipping rendering.\")\n        return gs_output_dir\n    \n    # Build command to run render_gs.py\n    cmd = [\n        \"blender\", \"-b\", \"-P\", \"pixie/blender/render_gs.py\", \"--\",\n        \"--obj_id\", cfg.obj_id,\n        \"--ply_dir\", ply_dir,\n        \"--output_dir\", gs_output_dir,\n        \"--data_dir\", paths['data_dir'],\n        \"--blend_file_path\", paths['blend_file_path'],\n        \"--blender_gs_addon_path\", paths['blender_gs_addon_path']\n    ]\n    \n    # Add place_on_ground flag if enabled\n    if render_cfg.get('place_on_ground', False):\n        cmd.append(\"--place_on_ground\")\n    \n    # Add optional arguments based on render config\n    if render_cfg.get('rotate_around') is not None:\n        cmd.extend([\"--rotate_around\", str(render_cfg.rotate_around)])\n    \n    if render_cfg.get('camera_id') is not None:\n        cmd.extend([\"--camera_id\", str(render_cfg.camera_id)])\n        \n    if render_cfg.get('focal_length_ratio') is not None:\n        cmd.extend([\"--focal_length_ratio\", str(render_cfg.focal_length_ratio)])\n        \n    if render_cfg.get('transparent', False):\n        cmd.append(\"--transparent\")\n        \n    if render_cfg.get('resolution_x') is not None:\n        cmd.extend([\"--resolution_x\", str(render_cfg.resolution_x)])\n        \n    if render_cfg.get('resolution_y') is not None:\n        cmd.extend([\"--resolution_y\", str(render_cfg.resolution_y)])\n        \n    if render_cfg.get('cycles_samples') is not None:\n        cmd.extend([\"--cycles_samples\", str(render_cfg.cycles_samples)])\n        \n    if render_cfg.get('num_renders') is not None:\n        cmd.extend([\"--num_renders\", str(render_cfg.num_renders)])\n        \n    if render_cfg.get('start_frame', 0) != 0:\n        cmd.extend([\"--start_frame\", str(render_cfg.start_frame)])\n        \n    if render_cfg.get('is_dropping', False):\n        cmd.append(\"--is_dropping\")\n        \n    if render_cfg.get('save_blend', False):\n        cmd.append(\"--save_blend\")\n        \n    if render_cfg.get('bg_color') is not None:\n        cmd.extend([\"--bg_color\"] + [str(c) for c in render_cfg.bg_color])\n        \n    # Add init_xyz and xyz_rotation\n    init_xyz = render_cfg.get('init_xyz', [0.0, 0.0, 0.0])\n    cmd.extend([\"--init_xyz\"] + [str(x) for x in init_xyz])\n    \n    xyz_rotation = render_cfg.get('xyz_rotation', [0.0, 0.0, 0.0])\n    cmd.extend([\"--xyz_rotation\"] + [str(r) for r in xyz_rotation])\n        \n    if cfg.overwrite:\n        cmd.append(\"--overwrite\")\n    \n    # Compile frames to video\n    frames_dir = Path(gs_output_dir)\n\n    # Run the rendering command\n    run_cmd(cmd, step_name=\"RENDER_BLENDER_GS\")\n    save_contextual_config(cfg, blender_output_dir, context=\"blender_gs_render\")\n    \n    assert frames_dir.exists(), f\"Frames directory {frames_dir} does not exist\"\n    assert any(frames_dir.glob('*.png')), f\"No frames found in {frames_dir}\"\n    logging.info(f\"Compiling frames to video: {video_output}\")\n\n    # Get FPS from physics video or use default\n    physics_video_path = os.path.join(paths[\"physgaussian_output\"],\n                                      f\"sample_{cfg.physics.sample_id}\",\n                                      \"frames\", \"output.mp4\")\n    fps = render_cfg.default_fps\n    if os.path.exists(physics_video_path):\n        fps = get_video_fps(physics_video_path)\n    logging.info(f\"FPS: {fps}\")\n    compile_video(frames_dir, video_output, fps)\n    \n    logging.info(f\"Gaussian Splatting rendering completed. Output directory: {gs_output_dir}\")\n    return gs_output_dir\n\n\ndef render_blender_glb(cfg: DictConfig, paths: dict) -> str:\n    blender_output_dir = paths['blender_output']\n    render_cfg = cfg.output_rendering.blender_render_glb\n\n    ## get the point_cloud_path which contains the material physics predictions\n    if cfg.material_mode == 'vlm':\n        point_cloud_path = get_material_vlm_segmentation_path(\n            cfg, paths['render_output'], paths)\n    elif cfg.material_mode == 'neural':\n        point_cloud_path = get_material_neural_segmentation_path(\n            cfg, paths['render_output'], paths)\n    else:\n        raise ValueError(f\"Invalid material mode: {cfg.material_mode}\")\n\n    for feature, cmap in zip(render_cfg.features, render_cfg.cmaps):\n        cmd = (\n                    f\"blender -b -P pixie/blender/apply_feature_colors.py -- \"\n                    f\"--obj_ids {cfg.obj_id} \"\n                    f\"--feature {feature} \"\n                    f\"--pred_ply {point_cloud_path} \"\n                    f\"--output_dir {blender_output_dir} \"\n                    f\"--colormap {cmap} \"\n                    f\"--data_dir {paths['data_dir']} \"\n                    f\"--blend_file_path {paths['blend_file_path']} \"\n                    f\"--overwrite \"\n                )\n        if render_cfg.rotate_video:\n            cmd += f\"--rotate_video \"\n            if render_cfg.views:\n                cmd += f\"--views {render_cfg.views} \"\n        if render_cfg.focal_length:\n            cmd += f\"--focal_length {render_cfg.focal_length} \"\n        if render_cfg.camera_id:\n            cmd += f\"--camera_id {render_cfg.camera_id} \"\n\n        frames_dir = Path(blender_output_dir) / feature\n        video_output = frames_dir / f\"{feature}.mp4\"\n        if os.path.exists(video_output):\n            continue\n        run_cmd(cmd, step_name=\"RENDER_BLENDER\")\n        save_contextual_config(cfg, blender_output_dir, context=\"blender_output_render\")\n        \n        # # Compile frames to video if rotate_video is enabled\n        if render_cfg.rotate_video:\n            # Frames are saved in blender_output_dir/feature subdirectories\n            assert frames_dir.exists(), f\"Frames directory {frames_dir} does not exist\"\n            assert any(frames_dir.glob('*.png')), f\"No frames found in {frames_dir}\"\n            logging.info(f\"Compiling frames to video: {video_output}\")\n\n            video_path = os.path.join(paths[\"physgaussian_output\"],\n                                      f\"sample_{cfg.physics.sample_id}\",\n                                      \"frames\", \"output.mp4\")\n            fps = cfg.output_rendering.blender_render_glb.default_fps\n            if os.path.exists(video_path):\n                fps = get_video_fps(video_path)\n            logging.info(f\"FPS: {fps}\")\n            compile_video(frames_dir, video_output, fps)\n\n    return blender_output_dir\n\n\ndef render_gs_model(cfg: DictConfig, paths: dict) -> str:\n    render_gs_cmd = [\n        \"python\", \"third_party/PhysGaussian/gaussian-splatting/render.py\",\n        \"--model_path\", paths['gs_output'],\n    ]\n    output_dir = os.path.join(paths['gs_output'], \"test\")\n    if not os.path.exists(output_dir):\n        run_cmd(render_gs_cmd, step_name=\"RENDER_GS\")\n    return output_dir\n\n@hydra.main(version_base=None, config_path=\"config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Main function to render images from the trained NeRF model.\"\"\"\n    # Set up logging first\n    set_logger()\n\n    # Validate configuration\n    validate_config(cfg)\n\n    # Resolve paths and system-specific settings\n    cfg = resolve_paths(cfg)\n\n\n\n    # Get all output paths\n    paths = get_output_paths(cfg, cfg.obj_id)\n\n    # Create necessary directories\n    create_directories(paths)\n\n    start_time = time.time()\n\n    if 'nerf' in cfg.output_rendering.render:\n        # Render RGB images from test set\n        output_dir = render_nerf_model(cfg, paths)\n        logging.info(f\"[NERF] Output directory: {output_dir}\")\n\n    if 'gs' in cfg.output_rendering.render:\n        output_dir = render_gs_model(cfg, paths)\n        logging.info(f\"[GS] Output directory: {output_dir}\")\n\n    if 'blender_glb' in cfg.output_rendering.render:\n        output_dir = render_blender_glb(cfg, paths)\n        logging.info(f\"[BLENDER_GLB] Output directory: {output_dir}\")\n\n    if 'blender_gs' in cfg.output_rendering.render:\n        output_dir = render_blender_gs(cfg, paths)\n        logging.info(f\"[BLENDER_GS] Output directory: {output_dir}\")\n    end_time = time.time()\n    logging.info(f\"Rendering completed in {end_time - start_time:.2f} seconds\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "scripts/download_data.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nDownload PixieVerse data from Hugging Face.\n\"\"\"\n\nimport argparse\nimport fnmatch\nfrom pathlib import Path\n\nfrom huggingface_hub import list_repo_files, snapshot_download\n\n\ndef download_data(\n    dataset_repo: str = \"vlongle/pixieverse\",\n    download_dirs: list[str] | None = None,\n    force_download: bool = False,\n    local_dir: str | None = None,\n    obj_class: str | None = None,\n) -> None:\n    project_root = Path(__file__).resolve().parent.parent\n    download_path = Path(local_dir) if local_dir else project_root\n    download_path.mkdir(parents=True, exist_ok=True)\n\n    repo_files = list_repo_files(repo_id=dataset_repo, repo_type=\"dataset\")\n    data_files = [f for f in repo_files if f != \"README.md\" and not f.startswith(\".\")]\n    available_dirs = sorted({f.split(\"/\")[0] for f in data_files if \"/\" in f})\n    print(f\"Available directories: {available_dirs}\")\n\n    if download_dirs:\n        dirs_to_download = [d for d in download_dirs if d in available_dirs]\n        missing = sorted(set(download_dirs) - set(dirs_to_download))\n        if missing:\n            print(f\"Requested directories not found: {missing}\")\n    else:\n        dirs_to_download = available_dirs\n\n    if obj_class and not download_dirs:\n        dirs_to_download = [d for d in [\"archives\"] if d in available_dirs]\n        print(\"Using class-filter mode: defaulting to --dirs archives\")\n\n    if not dirs_to_download:\n        print(\"No directories selected for download.\")\n        return\n\n    allow_patterns = []\n    if obj_class:\n        assert \"archives\" in dirs_to_download, (\n            \"--obj-class filtering currently supports archive layout only. \"\n            \"Please include --dirs archives (or omit --dirs).\"\n        )\n        allow_patterns.extend(\n            [\n                f\"archives/*/{obj_class}.tar\",\n                f\"archives/*/{obj_class}.tar.gz\",\n            ]\n        )\n        available_class_files = [\n            f for f in data_files if any(fnmatch.fnmatch(f, pat) for pat in allow_patterns)\n        ]\n        if not available_class_files:\n            print(f\"No archive files found for obj_class='{obj_class}'.\")\n            return\n        print(f\"Downloading class '{obj_class}' from archives only.\")\n    else:\n        for dir_name in dirs_to_download:\n            allow_patterns.extend([f\"{dir_name}/*\", f\"{dir_name}/**/*\"])\n\n    snapshot_download(\n        repo_id=dataset_repo,\n        repo_type=\"dataset\",\n        local_dir=download_path,\n        local_dir_use_symlinks=False,\n        allow_patterns=allow_patterns,\n        ignore_patterns=[\"README.md\", \".gitattributes\"],\n        force_download=force_download,\n    )\n    if obj_class:\n        print(f\"Downloaded archives for class '{obj_class}' to {download_path}\")\n    else:\n        print(f\"Downloaded {dirs_to_download} to {download_path}\")\n\n\ndef main() -> None:\n    parser = argparse.ArgumentParser(description=\"Download PixieVerse data from Hugging Face.\")\n    parser.add_argument(\"--dataset-repo\", default=\"vlongle/pixieverse\", help=\"Hugging Face dataset repo id.\")\n    parser.add_argument(\"--dirs\", nargs=\"*\", help=\"Specific directories to download (default: all).\")\n    parser.add_argument(\"--local-dir\", help=\"Local destination directory (default: project root).\")\n    parser.add_argument(\"--force\", action=\"store_true\", help=\"Force re-download even if files exist.\")\n    parser.add_argument(\n        \"--obj-class\",\n        default=None,\n        help=\"Download only one class archive (e.g., tree). Works with --dirs archives.\",\n    )\n    args = parser.parse_args()\n\n    download_data(\n        dataset_repo=args.dataset_repo,\n        download_dirs=args.dirs,\n        force_download=args.force,\n        local_dir=args.local_dir,\n        obj_class=args.obj_class,\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "scripts/download_models.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nDownload model-related directories from a Hugging Face dataset repo.\n\"\"\"\n\nimport argparse\nfrom pathlib import Path\n\nfrom huggingface_hub import list_repo_files, snapshot_download\n\n\ndef download_models(\n    dataset_repo: str = \"vlongle/pixie\",\n    download_dirs: list[str] | None = None,\n    force_download: bool = False,\n    local_dir: str | None = None,\n) -> None:\n    project_root = Path(__file__).resolve().parent.parent\n    download_path = Path(local_dir) if local_dir else project_root\n    download_path.mkdir(parents=True, exist_ok=True)\n\n    repo_files = list_repo_files(repo_id=dataset_repo, repo_type=\"dataset\")\n    data_files = [f for f in repo_files if f != \"README.md\" and not f.startswith(\".\")]\n    available_dirs = sorted({f.split(\"/\")[0] for f in data_files if \"/\" in f})\n\n    if download_dirs:\n        dirs_to_download = [d for d in download_dirs if d in available_dirs]\n        missing = sorted(set(download_dirs) - set(dirs_to_download))\n        if missing:\n            print(f\"Requested directories not found: {missing}\")\n    else:\n        dirs_to_download = available_dirs\n\n    if not dirs_to_download:\n        print(\"No directories selected for download.\")\n        return\n\n    allow_patterns = []\n    for dir_name in dirs_to_download:\n        allow_patterns.extend([f\"{dir_name}/*\", f\"{dir_name}/**/*\"])\n\n    snapshot_download(\n        repo_id=dataset_repo,\n        repo_type=\"dataset\",\n        local_dir=download_path,\n        local_dir_use_symlinks=False,\n        allow_patterns=allow_patterns,\n        ignore_patterns=[\"README.md\", \".gitattributes\"],\n        force_download=force_download,\n    )\n\n    print(f\"Download complete to: {download_path}\")\n    print(f\"Downloaded directories: {dirs_to_download}\")\n\n\ndef main() -> None:\n    parser = argparse.ArgumentParser(description=\"Download Pixie model artifacts from Hugging Face.\")\n    parser.add_argument(\"--dataset-repo\", default=\"vlongle/pixie\", help=\"Hugging Face dataset repo id.\")\n    parser.add_argument(\"--dirs\", nargs=\"*\", help=\"Specific directories to download (default: all).\")\n    parser.add_argument(\"--local-dir\", help=\"Local directory to download into (default: project root).\")\n    parser.add_argument(\"--force\", action=\"store_true\", help=\"Force re-download even if files exist.\")\n    args = parser.parse_args()\n\n    download_models(\n        dataset_repo=args.dataset_repo,\n        download_dirs=args.dirs,\n        force_download=args.force,\n        local_dir=args.local_dir,\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "scripts/upload_data.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nUpload PixieVerse data (survivor objects only) to Hugging Face datasets.\n\nSupports two modes:\n- raw: upload selected object folders directly (many API operations, slower)\n- archive: pack per-(dir,class) tar archives, then upload archives (faster, better visibility)\n\"\"\"\n\nimport argparse\nimport json\nimport errno\nimport os\nimport sys\nimport time\nimport threading\nimport tarfile\nfrom pathlib import Path\n\nfrom huggingface_hub import HfApi, login\nfrom huggingface_hub.errors import HfHubHTTPError, RepositoryNotFoundError\n\n\nDEFAULT_CLASSES = [\n    \"tree\",\n    \"flowers\",\n    \"rubber_ducks_and_toys\",\n    \"sport_balls\",\n    \"sand\",\n    \"snow_and_mud\",\n    \"grass\",\n    \"shrubs\",\n    \"metal_crates\",\n    \"soda_cans\",\n]\n\nDEFAULT_DATA_DIRS = [\n    \"vlm_seg_results\", \n    \"vlm_seg_critic_results\",\n    \"vlm_seg_mat_sample_results\",\n    \"data\",\n    \"outputs\",\n    \"render_outputs\",\n]\n\n\nARCHIVE_EXTENSIONS = {\n    \"none\": \".tar\",\n    \"gz\": \".tar.gz\",\n}\n\n\ndef has_feature_artifact(obj_dir: Path) -> bool:\n    return (\n        (obj_dir / \"clip_features_features.npy\").exists()\n        or (obj_dir / \"clip_features.npz\").exists()\n    )\n\n\nclass Spinner:\n    def __init__(self, message: str, interval_s: float = 0.2):\n        self.message = message\n        self.interval_s = interval_s\n        self._running = False\n        self._thread = None\n\n    def _spin(self) -> None:\n        frames = \"|/-\\\\\"\n        i = 0\n        while self._running:\n            sys.stdout.write(f\"\\r{self.message} {frames[i % len(frames)]}\")\n            sys.stdout.flush()\n            i += 1\n            time.sleep(self.interval_s)\n        sys.stdout.write(\"\\r\" + \" \" * (len(self.message) + 4) + \"\\r\")\n        sys.stdout.flush()\n\n    def __enter__(self):\n        self._running = True\n        self._thread = threading.Thread(target=self._spin, daemon=True)\n        self._thread.start()\n        return self\n\n    def __exit__(self, exc_type, exc, tb):\n        self._running = False\n        if self._thread is not None:\n            self._thread.join()\n\n\ndef summarize_obj_dirs(source_dir: Path, object_ids: list[str]) -> tuple[int, int, int]:\n    \"\"\"Return (object_dir_count, file_count, total_bytes) for selected object ids.\"\"\"\n    obj_count = 0\n    file_count = 0\n    total_bytes = 0\n    for obj_id in object_ids:\n        obj_dir = source_dir / obj_id\n        if not obj_dir.is_dir():\n            continue\n        obj_count += 1\n        for root, _, files in os.walk(obj_dir):\n            file_count += len(files)\n            for fname in files:\n                fp = Path(root) / fname\n                if fp.exists():\n                    total_bytes += fp.stat().st_size\n    return obj_count, file_count, total_bytes\n\n\ndef iter_obj_files(source_dir: Path, object_ids: list[str]):\n    \"\"\"Yield tuples (absolute_file_path, archive_relative_path).\"\"\"\n    for obj_id in object_ids:\n        obj_dir = source_dir / obj_id\n        if not obj_dir.is_dir():\n            continue\n        for root, _, files in os.walk(obj_dir):\n            root_path = Path(root)\n            rel_root = root_path.relative_to(obj_dir)\n            for fname in files:\n                abs_fp = root_path / fname\n                rel_fp = Path(obj_id) / rel_root / fname\n                yield abs_fp, rel_fp\n\n\ndef parse_classes(classes_arg: str | None) -> list[str]:\n    if not classes_arg:\n        return DEFAULT_CLASSES\n    classes = [c.strip() for c in classes_arg.split(\",\") if c.strip()]\n    assert classes, \"classes must not be empty\"\n    return classes\n\n\ndef collect_survivor_ids(\n    classes: list[str],\n    results_root: Path,\n    render_outputs_dir: Path,\n    sample_id: int,\n    grid_size: int,\n) -> tuple[set[str], dict[str, dict[str, int]], dict[str, set[str]]]:\n    survivor_ids: set[str] = set()\n    stats: dict[str, dict[str, int]] = {}\n    survivor_ids_by_class: dict[str, set[str]] = {obj_class: set() for obj_class in classes}\n\n    for obj_class in classes:\n        validated_path = results_root / obj_class / \"all_results_validated.json\"\n        corrected_path = results_root / obj_class / \"all_results_corrected.json\"\n        if validated_path.exists():\n            json_path = validated_path\n            assume_zero_filtered = False\n        elif corrected_path.exists():\n            json_path = corrected_path\n            assume_zero_filtered = True\n            print(\n                f\"Warning: can't find {validated_path}. \"\n                f\"Assuming 0 objects were manually filtered for class '{obj_class}'.\"\n            )\n        else:\n            print(\n                f\"Warning: can't find both validated and corrected files for class '{obj_class}'. \"\n                \"Skipping this class.\"\n            )\n            stats[obj_class] = {\n                \"appropriate\": 0,\n                \"with_sim_output\": 0,\n                \"survived\": 0,\n            }\n            continue\n\n        with open(json_path, \"r\") as f:\n            results = json.load(f)\n\n        appropriate = 0\n        with_sim_output = 0\n        survived = 0\n        for tag, meta in results.items():\n            if meta.get(\"is_appropriate\") is not True:\n                continue\n            appropriate += 1\n\n            obj_id = tag.split(\"/\")[-1]\n            obj_dir = render_outputs_dir / obj_id\n            has_feat = has_feature_artifact(obj_dir)\n            mat_fp = render_outputs_dir / obj_id / f\"sample_{sample_id}\" / \"material_grid.npy\"\n            sim_dir = render_outputs_dir / obj_id / f\"sample_{sample_id}\" / f\"gs_sim_gridsize_{grid_size}_output\"\n            mp4_fp = sim_dir / \"output.mp4\"\n\n            has_sim = has_feat and mat_fp.exists() and sim_dir.is_dir() and mp4_fp.exists()\n            if has_sim:\n                with_sim_output += 1\n\n            is_simulation_valid = meta.get(\"is_simulation_valid\", True) if assume_zero_filtered else (meta.get(\"is_simulation_valid\") is True)\n            if has_sim and is_simulation_valid:\n                survived += 1\n                survivor_ids.add(obj_id)\n                survivor_ids_by_class[obj_class].add(obj_id)\n\n        stats[obj_class] = {\n            \"appropriate\": appropriate,\n            \"with_sim_output\": with_sim_output,\n            \"survived\": survived,\n        }\n    return survivor_ids, stats, survivor_ids_by_class\n\n\ndef upload_selected_ids(\n    api: HfApi,\n    repo_id: str,\n    dataset_root: Path,\n    include_dirs: list[str],\n    object_ids: set[str],\n) -> None:\n    ignore_patterns = [\".gitattributes\", \"*.pyc\", \"__pycache__\", \".DS_Store\"]\n    sorted_ids = sorted(object_ids)\n    total_dirs = len(include_dirs)\n\n    for idx, dir_name in enumerate(include_dirs, start=1):\n        source_dir = dataset_root / dir_name\n        if not source_dir.is_dir():\n            print(f\"[{idx}/{total_dirs}] Skipping missing source directory: {source_dir}\")\n            continue\n\n        allow_patterns = [f\"{obj_id}/**\" for obj_id in sorted_ids if (source_dir / obj_id).exists()]\n        if not allow_patterns:\n            print(f\"[{idx}/{total_dirs}] Skipping {dir_name}/ (no matching object folders).\")\n            continue\n\n        object_dirs_found, total_files, total_bytes = summarize_obj_dirs(source_dir, sorted_ids)\n        size_gb = total_bytes / (1024 ** 3)\n        print(\n            f\"[{idx}/{total_dirs}] {dir_name}/ -> {object_dirs_found} object folders, \"\n            f\"{total_files} files, {size_gb:.2f} GB\"\n        )\n\n        start = time.time()\n        with Spinner(f\"[{idx}/{total_dirs}] Uploading {dir_name}/\"):\n            api.upload_folder(\n                folder_path=str(source_dir),\n                path_in_repo=dir_name,\n                repo_id=repo_id,\n                repo_type=\"dataset\",\n                allow_patterns=allow_patterns,\n                ignore_patterns=ignore_patterns,\n            )\n        elapsed = time.time() - start\n        print(f\"[{idx}/{total_dirs}] Done {dir_name}/ in {elapsed:.1f}s\")\n\n\ndef create_archive_for_class(\n    source_dir: Path,\n    object_ids: list[str],\n    archive_path: Path,\n    compression: str,\n) -> tuple[int, int]:\n    \"\"\"\n    Build an archive for selected object ids under one top-level directory.\n    Returns (files_written, bytes_written).\n    \"\"\"\n    assert compression in ARCHIVE_EXTENSIONS, f\"Unsupported compression: {compression}\"\n    mode = \"w\" if compression == \"none\" else \"w:gz\"\n\n    if archive_path.exists():\n        existing_size_gb = archive_path.stat().st_size / (1024 ** 3)\n        print(f\"      Reusing existing archive {archive_path.name} ({existing_size_gb:.2f} GB)\")\n        return 0, 0\n\n    _, total_files, total_bytes = summarize_obj_dirs(source_dir, object_ids)\n    print(\n        f\"      Packing {source_dir.name}: {len(object_ids)} obj ids, \"\n        f\"{total_files} files, {total_bytes / (1024 ** 3):.2f} GB\"\n    )\n    if total_files == 0:\n        return 0, 0\n\n    archive_path.parent.mkdir(parents=True, exist_ok=True)\n\n    files_written = 0\n    bytes_written = 0\n    start = time.time()\n    last_log = start\n\n    try:\n        with tarfile.open(archive_path, mode=mode) as tar:\n            for abs_fp, rel_fp in iter_obj_files(source_dir, object_ids):\n                if not abs_fp.exists():\n                    continue\n                tar.add(abs_fp, arcname=str(rel_fp), recursive=False)\n                files_written += 1\n                bytes_written += abs_fp.stat().st_size\n\n                now = time.time()\n                if files_written % 2000 == 0 or now - last_log > 10:\n                    pct = 100.0 * files_written / total_files\n                    print(\n                        f\"        [{source_dir.name}] packed {files_written}/{total_files} files \"\n                        f\"({pct:.1f}%), {bytes_written / (1024 ** 3):.2f} GB\"\n                    )\n                    last_log = now\n    except OSError as e:\n        if archive_path.exists():\n            archive_path.unlink()\n            print(f\"      Removed partial archive after failure: {archive_path}\")\n        if e.errno == errno.ENOSPC:\n            raise RuntimeError(\n                f\"No space left while packing {archive_path}. \"\n                \"Use a larger --archive-tmp-dir (e.g., your mounted dataset path).\"\n            ) from e\n        raise\n\n    elapsed = time.time() - start\n    archive_size_gb = archive_path.stat().st_size / (1024 ** 3)\n    print(\n        f\"      Packed archive {archive_path.name} in {elapsed:.1f}s \"\n        f\"(archive size: {archive_size_gb:.2f} GB)\"\n    )\n    return files_written, bytes_written\n\n\ndef upload_archives_by_class(\n    api: HfApi,\n    repo_id: str,\n    dataset_root: Path,\n    include_dirs: list[str],\n    classes: list[str],\n    survivor_ids_by_class: dict[str, set[str]],\n    archive_tmp_dir: Path,\n    compression: str,\n    keep_archives: bool,\n    force_repack: bool,\n) -> None:\n    ext = ARCHIVE_EXTENSIONS[compression]\n    jobs = []\n    for dir_name in include_dirs:\n        source_dir = dataset_root / dir_name\n        if not source_dir.is_dir():\n            continue\n        for obj_class in classes:\n            obj_ids = sorted(survivor_ids_by_class.get(obj_class, set()))\n            if obj_ids:\n                jobs.append((dir_name, source_dir, obj_class, obj_ids))\n\n    total_jobs = len(jobs)\n    if total_jobs == 0:\n        print(\"No archive upload jobs to run.\")\n        return\n\n    print(f\"Archive mode: {total_jobs} upload jobs\")\n    archive_relpaths: list[str] = []\n    archive_abspaths: list[Path] = []\n\n    for idx, (dir_name, source_dir, obj_class, obj_ids) in enumerate(jobs, start=1):\n        print(f\"[{idx}/{total_jobs}] {dir_name}/{obj_class}: start\")\n        archive_name = f\"{obj_class}{ext}\"\n        archive_path = archive_tmp_dir / dir_name / archive_name\n\n        if force_repack and archive_path.exists():\n            archive_path.unlink()\n            print(f\"      Removed existing archive due to --force-repack: {archive_path}\")\n\n        create_archive_for_class(\n            source_dir=source_dir,\n            object_ids=obj_ids,\n            archive_path=archive_path,\n            compression=compression,\n        )\n        if not archive_path.exists():\n            print(f\"[{idx}/{total_jobs}] {dir_name}/{obj_class}: nothing to upload\")\n            continue\n\n        rel = str(archive_path.relative_to(archive_tmp_dir))\n        archive_relpaths.append(rel)\n        archive_abspaths.append(archive_path)\n        print(f\"[{idx}/{total_jobs}] Queued for upload: archives/{rel}\")\n\n    if not archive_relpaths:\n        print(\"No archives to upload after packing/reuse.\")\n        return\n\n    print(\n        \"Packing/reuse phase done. \"\n        f\"Uploading {len(archive_relpaths)} queued archives with per-archive commits \"\n        \"(compatible with current huggingface_hub version).\"\n    )\n    total_upload = len(archive_abspaths)\n    for i, archive_path in enumerate(archive_abspaths, start=1):\n        rel = str(archive_path.relative_to(archive_tmp_dir))\n        remote_path = f\"archives/{rel}\"\n        size_gb = archive_path.stat().st_size / (1024 ** 3)\n        print(f\"[upload {i}/{total_upload}] {remote_path} ({size_gb:.2f} GB)\")\n        start = time.time()\n        with Spinner(f\"[upload {i}/{total_upload}] Uploading {remote_path}\"):\n            api.upload_file(\n                path_or_fileobj=str(archive_path),\n                path_in_repo=remote_path,\n                repo_id=repo_id,\n                repo_type=\"dataset\",\n            )\n        elapsed = time.time() - start\n        print(f\"[upload {i}/{total_upload}] Done {remote_path} in {elapsed:.1f}s\")\n    print(\"Archive upload complete.\")\n\n    if not keep_archives:\n        for archive_path in archive_abspaths:\n            if archive_path.exists():\n                archive_path.unlink()\n        print(f\"Removed {len(archive_abspaths)} local archives from {archive_tmp_dir}\")\n\n\ndef upload_data(\n    dataset_repo: str,\n    dataset_root: Path,\n    results_root: Path,\n    classes: list[str],\n    include_dirs: list[str],\n    sample_id: int,\n    grid_size: int,\n    token: str | None,\n    mode: str,\n    archive_tmp_dir: Path,\n    archive_compression: str,\n    keep_archives: bool,\n    force_repack: bool,\n    auto_create_repo: bool,\n    private_repo: bool,\n) -> None:\n    assert mode in {\"raw\", \"archive\"}, f\"Unsupported mode: {mode}\"\n    assert archive_compression in ARCHIVE_EXTENSIONS, f\"Unsupported archive compression: {archive_compression}\"\n\n    if token:\n        login(token=token, add_to_git_credential=False)\n    else:\n        login(add_to_git_credential=False)\n\n    # Faster transfer path when available.\n    os.environ.setdefault(\"HF_HUB_ENABLE_HF_TRANSFER\", \"1\")\n    print(f\"HF_HUB_ENABLE_HF_TRANSFER={os.environ.get('HF_HUB_ENABLE_HF_TRANSFER')}\")\n\n    api = HfApi(token=token)\n    try:\n        user_info = api.whoami()\n        username = user_info.get(\"name\", \"unknown\")\n        print(f\"Authenticated as: {username}\")\n    except HfHubHTTPError as e:\n        raise RuntimeError(\n            \"Failed to authenticate with Hugging Face Hub. \"\n            \"Please verify your token has write permission.\"\n        ) from e\n\n    try:\n        api.repo_info(repo_id=dataset_repo, repo_type=\"dataset\")\n        print(f\"Dataset repo found: {dataset_repo}\")\n    except RepositoryNotFoundError:\n        if not auto_create_repo:\n            raise RuntimeError(\n                f\"Dataset repo not found: {dataset_repo}. \"\n                \"Create it on Hugging Face first, or run without --no-auto-create-repo.\"\n            )\n        print(f\"Dataset repo not found. Creating: {dataset_repo}\")\n        api.create_repo(repo_id=dataset_repo, repo_type=\"dataset\", private=private_repo, exist_ok=True)\n        print(f\"Dataset repo ready: {dataset_repo}\")\n    except HfHubHTTPError as e:\n        raise RuntimeError(\n            f\"Unable to access dataset repo '{dataset_repo}'. \"\n            \"This is usually a permission/token-scope issue.\"\n        ) from e\n\n    render_outputs_dir = dataset_root / \"render_outputs\"\n    assert render_outputs_dir.is_dir(), f\"Missing render_outputs directory: {render_outputs_dir}\"\n\n    survivor_ids, stats, survivor_ids_by_class = collect_survivor_ids(\n        classes=classes,\n        results_root=results_root,\n        render_outputs_dir=render_outputs_dir,\n        sample_id=sample_id,\n        grid_size=grid_size,\n    )\n\n    total_appropriate = sum(v[\"appropriate\"] for v in stats.values())\n    total_sim = sum(v[\"with_sim_output\"] for v in stats.values())\n    total_survived = sum(v[\"survived\"] for v in stats.values())\n    print(f\"Classes: {classes}\")\n    print(f\"Appropriate: {total_appropriate}\")\n    print(f\"With sim output: {total_sim}\")\n    print(f\"Survived: {total_survived}\")\n    print(f\"Unique survivor object ids: {len(survivor_ids)}\")\n    for obj_class in classes:\n        class_stats = stats.get(obj_class, {\"appropriate\": 0, \"with_sim_output\": 0, \"survived\": 0})\n        print(\n            f\"  - {obj_class}: app={class_stats['appropriate']}, \"\n            f\"sim={class_stats['with_sim_output']}, survived={class_stats['survived']}\"\n        )\n\n    if mode == \"raw\":\n        upload_selected_ids(\n            api=api,\n            repo_id=dataset_repo,\n            dataset_root=dataset_root,\n            include_dirs=include_dirs,\n            object_ids=survivor_ids,\n        )\n    else:\n        upload_archives_by_class(\n            api=api,\n            repo_id=dataset_repo,\n            dataset_root=dataset_root,\n            include_dirs=include_dirs,\n            classes=classes,\n            survivor_ids_by_class=survivor_ids_by_class,\n            archive_tmp_dir=archive_tmp_dir,\n            compression=archive_compression,\n            keep_archives=keep_archives,\n            force_repack=force_repack,\n        )\n\n    # Make dataset card consistent with local data README.\n    project_root = Path(__file__).resolve().parent.parent\n    readme_path = project_root / \"data_readme.md\"\n    assert readme_path.exists(), f\"Missing {readme_path}\"\n    api.upload_file(\n        path_or_fileobj=str(readme_path),\n        path_in_repo=\"README.md\",\n        repo_id=dataset_repo,\n        repo_type=\"dataset\",\n    )\n    print(f\"Uploaded README.md from {readme_path}\")\n    print(f\"https://huggingface.co/datasets/{dataset_repo}\")\n\n\ndef main() -> None:\n    parser = argparse.ArgumentParser(description=\"Upload PixieVerse survivor data to Hugging Face.\")\n    parser.add_argument(\"--dataset-repo\", default=\"vlongle/pixieverse\", help=\"Hugging Face dataset repo id.\")\n    parser.add_argument(\n        \"--dataset-root\",\n        default=\"/mnt/kostas-graid/datasets/vlongle/diffphys3d\",\n        help=\"Local dataset root directory.\",\n    )\n    parser.add_argument(\n        \"--results-root\",\n        default=\"/home/vlongle/code/diffPhys3d/vlm_data_filtering_results\",\n        help=\"Root containing <class>/all_results_validated.json.\",\n    )\n    parser.add_argument(\n        \"--classes\",\n        default=None,\n        help=\"Comma-separated class list. Defaults to PixieVerse 10 classes (excluding jello_block).\",\n    )\n    parser.add_argument(\n        \"--dirs\",\n        nargs=\"*\",\n        default=DEFAULT_DATA_DIRS,\n        help=f\"Top-level dataset folders to upload (default: {DEFAULT_DATA_DIRS})\",\n    )\n    parser.add_argument(\"--sample-id\", type=int, default=0, help=\"Simulation sample id.\")\n    parser.add_argument(\"--grid-size\", type=int, default=64, help=\"Simulation grid size D.\")\n    parser.add_argument(\"--token\", default=None, help=\"Hugging Face token.\")\n    parser.add_argument(\n        \"--mode\",\n        choices=[\"raw\", \"archive\"],\n        default=\"archive\",\n        help=\"Upload mode. archive is faster and more transparent for large datasets.\",\n    )\n    parser.add_argument(\n        \"--archive-tmp-dir\",\n        default=\"/mnt/kostas-graid/datasets/vlongle/pixieverse/_archive_staging\",\n        help=\"Staging directory for archive mode (should have enough free space).\",\n    )\n    parser.add_argument(\n        \"--archive-compression\",\n        choices=[\"none\", \"gz\"],\n        default=\"none\",\n        help=\"Compression in archive mode. none is fastest CPU path.\",\n    )\n    parser.add_argument(\n        \"--keep-archives\",\n        action=\"store_true\",\n        help=\"Keep local archives after upload.\",\n    )\n    parser.add_argument(\n        \"--force-repack\",\n        action=\"store_true\",\n        help=\"Force rebuilding archives even if they already exist locally.\",\n    )\n    parser.add_argument(\n        \"--no-auto-create-repo\",\n        action=\"store_true\",\n        help=\"Disable automatic dataset repo creation when missing.\",\n    )\n    parser.add_argument(\n        \"--private-repo\",\n        action=\"store_true\",\n        help=\"Create dataset repo as private if auto-created.\",\n    )\n    args = parser.parse_args()\n\n    classes = parse_classes(args.classes)\n    upload_data(\n        dataset_repo=args.dataset_repo,\n        dataset_root=Path(args.dataset_root),\n        results_root=Path(args.results_root),\n        classes=classes,\n        include_dirs=args.dirs,\n        sample_id=args.sample_id,\n        grid_size=args.grid_size,\n        token=args.token,\n        mode=args.mode,\n        archive_tmp_dir=Path(args.archive_tmp_dir),\n        archive_compression=args.archive_compression,\n        keep_archives=args.keep_archives,\n        force_repack=args.force_repack,\n        auto_create_repo=not args.no_auto_create_repo,\n        private_repo=args.private_repo,\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "scripts/upload_models.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nUpload model-related directories to a Hugging Face dataset repo.\n\"\"\"\n\nimport argparse\nimport fnmatch\nfrom pathlib import Path\n\nfrom huggingface_hub import HfApi, login\n\n\nDEFAULT_UPLOAD_DIRS = [\n    \"checkpoints_continuous_mse\",\n    \"checkpoints_discrete\",\n    \"real_scene_data\",\n    \"real_scene_models\",\n]\n\nIGNORE_PATTERNS = [\n    \"*.pyc\",\n    \"__pycache__\",\n    \".DS_Store\",\n    \"*.tmp\",\n    \"*.log\",\n    \"wandb\",\n    \".git\",\n    \".gitignore\",\n]\n\n\ndef should_ignore_file(file_path: Path) -> bool:\n    file_name = file_path.name\n    return any(fnmatch.fnmatch(file_name, pattern) for pattern in IGNORE_PATTERNS)\n\n\ndef build_upload_ignore_patterns() -> list[str]:\n    ignore_patterns: list[str] = []\n    for pattern in IGNORE_PATTERNS:\n        if pattern == \"__pycache__\":\n            ignore_patterns.extend([\"**/__pycache__/**\", \"__pycache__\"])\n        elif pattern == \".git\":\n            ignore_patterns.extend([\"**/.git/**\", \".git\"])\n        elif pattern == \"wandb\":\n            ignore_patterns.extend([\"**/wandb/**\", \"wandb\"])\n        else:\n            ignore_patterns.append(pattern)\n    return ignore_patterns\n\n\ndef upload_directory(api: HfApi, local_dir: Path, repo_id: str, repo_dir_name: str | None = None) -> tuple[int, int]:\n    if repo_dir_name is None:\n        repo_dir_name = local_dir.name\n\n    total_files = 0\n    total_size = 0\n    for file_path in local_dir.rglob(\"*\"):\n        if file_path.is_file() and not should_ignore_file(file_path):\n            total_files += 1\n            total_size += file_path.stat().st_size\n\n    if total_files == 0:\n        print(f\"Skipping {local_dir}: no files to upload.\")\n        return 0, 0\n\n    print(f\"Uploading {local_dir} -> {repo_dir_name}/ ({total_files} files)\")\n    api.upload_folder(\n        folder_path=str(local_dir),\n        path_in_repo=repo_dir_name,\n        repo_id=repo_id,\n        repo_type=\"dataset\",\n        ignore_patterns=build_upload_ignore_patterns(),\n    )\n    return total_files, total_size\n\n\ndef upload_models(dataset_repo: str, upload_dirs: list[str], token: str | None) -> None:\n    if token:\n        login(token=token)\n    else:\n        login()\n\n    api = HfApi()\n    project_root = Path(__file__).resolve().parent.parent\n\n    total_uploaded_files = 0\n    total_uploaded_size = 0\n    for dir_name in upload_dirs:\n        local_dir = project_root / dir_name\n        if not local_dir.exists():\n            print(f\"Skipping missing directory: {local_dir}\")\n            continue\n        if not local_dir.is_dir():\n            print(f\"Skipping non-directory path: {local_dir}\")\n            continue\n        files, size = upload_directory(api, local_dir, dataset_repo)\n        total_uploaded_files += files\n        total_uploaded_size += size\n\n    print(f\"Upload complete: {total_uploaded_files} files, {total_uploaded_size / (1024 * 1024):.1f} MB\")\n    print(f\"https://huggingface.co/datasets/{dataset_repo}\")\n\n\ndef main() -> None:\n    parser = argparse.ArgumentParser(description=\"Upload Pixie model artifacts to Hugging Face.\")\n    parser.add_argument(\"--dataset-repo\", default=\"vlongle/pixie\", help=\"Hugging Face dataset repo id.\")\n    parser.add_argument(\"--dirs\", nargs=\"*\", help=f\"Directories to upload (default: {DEFAULT_UPLOAD_DIRS}).\")\n    parser.add_argument(\"--token\", help=\"Hugging Face token. If unset, interactive login is used.\")\n    args = parser.parse_args()\n\n    upload_dirs = args.dirs if args.dirs else DEFAULT_UPLOAD_DIRS\n    upload_models(dataset_repo=args.dataset_repo, upload_dirs=upload_dirs, token=args.token)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "setup.py",
    "content": "from setuptools import setup\nfrom setuptools import setup, find_packages\n\n\nINSTALL_REQUIRES = [\n    \"objaverse\",\n    \"sentence-transformers\",\n    # \"torch\",\n    # \"torchvision\",\n    \"PyMCubes==0.1.4\",\n    \"hydra-core\",\n    \"omegaconf\",\n    \"trimesh\",\n    \"plyfile\",\n    \"matplotlib\",\n    \"numpy==1.24.4\",\n    \"params-proto\",\n    \"python-slugify\",\n    \"warp_lang==0.10.1\",\n    \"taichi==1.5.0\",\n    \"dotenv\",\n    'timm==1.0.13',\n    # for qwen\n    'qwen-vl-utils[decord]',\n    'accelerate',\n    # https://github.com/QwenLM/Qwen2.5-VL/issues/723\n    'transformers @ git+https://github.com/huggingface/transformers',\n    'streamlit',\n    'huggingface_hub',\n    'colorlog',\n    'seaborn',\n    'umap-learn',\n]\n\nsetup(\n    name='pixie',\n    version='0.0.0',\n    description='pixie',\n    author='Long Le',\n    install_requires=INSTALL_REQUIRES,\n    python_requires='>=3.10',\n    packages=find_packages(\n        include=['pixie', 'pixie.*']),\n\n)"
  },
  {
    "path": "third_party/PhysGaussian/.gitignore",
    "content": "data\n.vscode\noutput\n*.ply\n*.pyc\n*.png\n*.jpg\nmodel\nlog"
  },
  {
    "path": "third_party/PhysGaussian/.gitmodules",
    "content": "[submodule \"gaussian-splatting\"]\n\tpath = gaussian-splatting\n\turl = https://github.com/graphdeco-inria/gaussian-splatting\n"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_flowers_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 75,\n    \"nu\": 0.4,\n    \"E\": 2e6,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"fix_ground\": true,\n    \"g\": [\n        0,\n        0,\n        0\n    ],\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                3.8e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0.05\n        }\n    ],\n    \"additional_material_params\": [],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 4,\n    \"show_hint\": false,\n    \"init_azimuthm\": -36.7,\n    \"init_elevation\": 8.96,\n    \"init_radius\": 0.8,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_fruit_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        45.0,\n        6.5\n    ],\n    \"rotation_axis\": [\n        1,\n        2\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 400,\n    \"E\": 1e5,\n    \"nu\": 0.2,\n    \"density\": 1000,\n    \"material\": \"snow\",\n    \"grid_v_damping_scale\": 0.999,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"yield_stress\": 1e3,\n    \"softening\": 0.5,\n    \"hardening\": 0,\n    \"plastic_viscosity\": 0.0,\n    \"particle_filling\": {\n        \"n_grid\": 50,\n        \"density_threshold\": 40.0,\n        \"search_threshold\": 0.5,\n        \"search_exclude_direction\": 0,\n        \"ray_cast_direction\": 1,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.86,\n            1.46,\n            0.7,\n            1.3,\n            0.7,\n            1.3\n        ]\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 1,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": true,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_grass_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 25,\n    \"nu\": 0.4,\n    \"E\": 2e6,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"fix_ground\": true,\n    \"g\": [\n        0,\n        0,\n        0\n    ],\n    \"grid_v_damping_scale\": 0.9999,\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                -3.8e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"additional_material_params\": [\n        {\n            \"point\": [\n                1.0,\n                1.0,\n                1.5\n            ],\n            \"size\": [\n                1.0,\n                1.0,\n                0.5\n            ],\n            \"nu\": 0.4,\n            \"E\": 2e6,\n            \"density\": 70,\n            \"material\": 0\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 1,\n    \"show_hint\": false,\n    \"init_azimuthm\": -36.7,\n    \"init_elevation\": 8.96,\n    \"init_radius\": 0.8,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_jello_block_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"fix_ground\": false,\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"nu\": 0.3,\n    \"E\": 1000,\n    \"material\": \"jelly\",\n    \"density\": 50,\n    \"g\": [\n        0,\n        0,\n        -9.8\n    ],\n    \"grid_v_damping_scale\": 0.999,\n    \"rpic_damping\": 0.05,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"surface_collider\",\n            \"point\": [\n                1,\n                1,\n                0.02\n            ],\n            \"normal\": [\n                0.0,\n                0.0,\n                1.0\n            ],\n            \"surface\": \"separate\",\n            \"friction\": 0.1,\n            \"start_time\": 0,\n            \"end_time\": 1e3\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 0,\n    \"show_hint\": false,\n    \"init_azimuthm\": -120,\n    \"init_elevation\": 0,\n    \"init_radius\": 4.11,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_jelly_block_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"fix_ground\": false,\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"nu\": 0.3,\n    \"E\": 1000,\n    \"material\": \"jelly\",\n    \"density\": 50,\n    \"g\": [\n        0,\n        0,\n        -9.8\n    ],\n    \"grid_v_damping_scale\": 0.999,\n    \"rpic_damping\": 0.05,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"surface_collider\",\n            \"point\": [\n                1,\n                1,\n                0.02\n            ],\n            \"normal\": [\n                0.0,\n                0.0,\n                1.0\n            ],\n            \"surface\": \"separate\",\n            \"friction\": 0.1,\n            \"start_time\": 0,\n            \"end_time\": 1e3\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 0,\n    \"show_hint\": false,\n    \"init_azimuthm\": -120,\n    \"init_elevation\": 0,\n    \"init_radius\": 4.11,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_metal_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e8,\n    \"yield_stress\": 1e7,\n    \"nu\": 0.3,\n    \"material\": \"metal\",\n    \"hardening\": 1,\n    \"xi\": 0.1,\n    \"grid_v_damping_scale\": 0.9999,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"particle_filling\": {\n        \"n_grid\": 50,\n        \"density_threshold\": 40.0,\n        \"search_threshold\": 0.5,\n        \"search_exclude_direction\": 0,\n        \"ray_cast_direction\": 1,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.86,\n            1.46,\n            0.7,\n            1.3,\n            0.7,\n            1.3\n        ]\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_metal_crates_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"fix_ground\": false,\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e8,\n    \"yield_stress\": 1e7,\n    \"nu\": 0.3,\n    \"material\": \"metal\",\n    \"hardening\": 1,\n    \"xi\": 0.1,\n    \"grid_v_damping_scale\": 0.9999,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"particle_filling\": {\n        \"n_grid\": 50,\n        \"density_threshold\": 40.0,\n        \"search_threshold\": 0.5,\n        \"search_exclude_direction\": 0,\n        \"ray_cast_direction\": 1,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.86,\n            1.46,\n            0.7,\n            1.3,\n            0.7,\n            1.3\n        ]\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 0,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_mud_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e5,\n    \"yield_stress\": 5e2,\n    \"nu\": 0.2,\n    \"material\": \"snow\",\n    \"softening\": 0.5,\n    \"grid_v_damping_scale\": 0.9999,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_rocks_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e9,\n    \"yield_stress\": 8e6,\n    \"nu\": 0.22,\n    \"material\": \"rock_brittle\",\n    \"softening\": 0.05,\n    \"grid_v_damping_scale\": 0.9999,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"particle_filling\": {\n        \"n_grid\": 100,\n        \"density_threshold\": 100.0,\n        \"search_threshold\": 1.0,\n        \"search_exclude_direction\": 2,\n        \"ray_cast_direction\": 4,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.4,\n            1.6,\n            0.4,\n            1.6,\n            0.4,\n            1.6\n        ],\n        \"smooth\": true,\n        \"visualize\": true\n    },\n    \"n_grid\": 120,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_rubber_ducks_and_toys_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"fix_ground\": false,\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"nu\": 0.4,\n    \"E\": 40000,\n    \"material\": \"jelly\",\n    \"density\": 100,\n    \"g\": [\n        0,\n        0,\n        -9.8\n    ],\n    \"grid_v_damping_scale\": 0.9999,\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        0.5\n    ],\n    \"default_camera_index\": 0,\n    \"show_hint\": false,\n    \"init_azimuthm\": 50,\n    \"init_elevation\": 0,\n    \"init_radius\": 2.5,\n    \"move_camera\": false,\n    \"delta_a\": 0.0,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_sand_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 2e-5,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"E\": 5e7,\n    \"nu\": 0.3,\n    \"material\": \"sand\",\n    \"density\": 2000,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"friction_angle\": 30,\n    \"n_grid\": 200,\n    \"particle_filling\": {\n        \"n_grid\": 100,\n        \"density_threshold\": 100.0,\n        \"search_threshold\": 1.0,\n        \"search_exclude_direction\": 2,\n        \"ray_cast_direction\": 4,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.4,\n            1.6,\n            0.4,\n            1.6,\n            0.4,\n            1.6\n        ],\n        \"smooth\": true,\n        \"visualize\": true\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        },\n        {\n            \"type\": \"surface_collider\",\n            \"point\": [\n                1,\n                1,\n                0.48\n            ],\n            \"normal\": [\n                0.0,\n                0.0,\n                1.0\n            ],\n            \"surface\": \"sticky\",\n            \"friction\": 0.0,\n            \"start_time\": 0,\n            \"end_time\": 1e3\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        0.8\n    ],\n    \"default_camera_index\": 1,\n    \"show_hint\": false,\n    \"init_azimuthm\": 170,\n    \"init_elevation\": 0,\n    \"init_radius\": 1.6,\n    \"move_camera\": true,\n    \"delta_a\": -2.4,\n    \"delta_e\": 0.8,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_shrubs_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"nu\": 0.4,\n    \"E\": 2e6,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"fix_ground\": true,\n    \"g\": [\n        0,\n        0,\n        0\n    ],\n    \"grid_v_damping_scale\": 0.9999,\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                -3.8e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"additional_material_params\": [\n        {\n            \"point\": [\n                1.0,\n                1.0,\n                1.5\n            ],\n            \"size\": [\n                1.0,\n                1.0,\n                0.5\n            ],\n            \"nu\": 0.4,\n            \"E\": 2e6,\n            \"density\": 70,\n            \"material\": 0\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 1,\n    \"show_hint\": false,\n    \"init_azimuthm\": -36.7,\n    \"init_elevation\": 8.96,\n    \"init_radius\": 0.8,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_snow_and_mud_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e5,\n    \"yield_stress\": 5e2,\n    \"nu\": 0.2,\n    \"material\": \"snow\",\n    \"softening\": 0.5,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_snow_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-5,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 200,\n    \"E\": 1e5,\n    \"yield_stress\": 5e2,\n    \"nu\": 0.2,\n    \"material\": \"snow\",\n    \"softening\": 0.5,\n    \"grid_v_damping_scale\": 0.9999,\n    \"density\": 2700,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 150,\n    \"init_elevation\": 10,\n    \"init_radius\": 2.7,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_soda_cans_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-6,\n    \"frame_dt\": 1e-2,\n    \"frame_num\": 100,\n    \"export_gaussians_to_ply\": true,\n    \"E\": 7e10,\n    \"yield_stress\": 6e7,\n    \"nu\": 0.3,\n    \"material\": \"metal\",\n    \"hardening\": 1,\n    \"xi\": 0.1,\n    \"density\": 2700,\n    \"fix_ground\": false,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"n_grid\": 120,\n    \"particle_filling\": {\n        \"n_grid\": 50,\n        \"density_threshold\": 40.0,\n        \"search_threshold\": 0.5,\n        \"search_exclude_direction\": 0,\n        \"ray_cast_direction\": 1,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.86,\n            1.46,\n            0.7,\n            1.3,\n            0.7,\n            1.3\n        ]\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        },\n        {\n            \"type\": \"surface_collider\",\n            \"point\": [\n                0,\n                0,\n                0\n            ],\n            \"normal\": [\n                0,\n                0,\n                1\n            ],\n            \"surface\": \"slip\",\n            \"friction\": 0.4,\n            \"start_time\": 0.0,\n            \"end_time\": 1e200\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.5,\n        0.5,\n        0.5\n    ],\n    \"default_camera_index\": 9,\n    \"show_hint\": false,\n    \"init_azimuthm\": 0,\n    \"init_elevation\": 25,\n    \"init_radius\": 2.0,\n    \"move_camera\": false,\n    \"delta_a\": 0.04,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_sport_balls_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"fix_ground\": false,\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"nu\": 0.4,\n    \"E\": 40000,\n    \"material\": \"jelly\",\n    \"density\": 100,\n    \"g\": [\n        0,\n        0,\n        -9.8\n    ],\n    \"grid_v_damping_scale\": 0.9999,\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        0.5\n    ],\n    \"default_camera_index\": 0,\n    \"show_hint\": false,\n    \"init_azimuthm\": 50,\n    \"init_elevation\": 0,\n    \"init_radius\": 2.5,\n    \"move_camera\": false,\n    \"delta_a\": 0.0,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_tree_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 125,\n    \"nu\": 0.4,\n    \"E\": 2e6,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"fix_ground\": true,\n    \"g\": [\n        0,\n        0,\n        0\n    ],\n    \"grid_v_damping_scale\": 0.9999,\n    \"rpic_damping\": 0.0,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                -4.8e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        0.95,\n        1.07,\n        1\n    ],\n    \"default_camera_index\": 4,\n    \"show_hint\": false,\n    \"init_azimuthm\": -36.7,\n    \"init_elevation\": 8.96,\n    \"init_radius\": 0.8,\n    \"move_camera\": false,\n    \"delta_a\": 0.4,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/objaverse/custom_water-like_bodies_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        0.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 2e-5,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 50,\n    \"E\": 0.0,\n    \"nu\": 0.0,\n    \"material\": \"fluid\",\n    \"density\": 2000,\n    \"g\": [\n        0.0,\n        0.0,\n        -9.8\n    ],\n    \"friction_angle\": 30,\n    \"n_grid\": 200,\n    \"particle_filling\": {\n        \"n_grid\": 100,\n        \"density_threshold\": 100.0,\n        \"search_threshold\": 1.0,\n        \"search_exclude_direction\": 2,\n        \"ray_cast_direction\": 4,\n        \"max_particles_num\": 2000000,\n        \"max_partciels_per_cell\": 1,\n        \"boundary\": [\n            0.4,\n            1.6,\n            0.4,\n            1.6,\n            0.4,\n            1.6\n        ],\n        \"smooth\": true,\n        \"visualize\": true\n    },\n    \"boundary_conditions\": [\n        {\n            \"type\": \"bounding_box\"\n        },\n        {\n            \"type\": \"surface_collider\",\n            \"point\": [\n                1,\n                1,\n                0.48\n            ],\n            \"normal\": [\n                0.0,\n                0.0,\n                1.0\n            ],\n            \"surface\": \"sticky\",\n            \"friction\": 0.0,\n            \"start_time\": 0,\n            \"end_time\": 1e3\n        }\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        0,\n        1\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        0.8\n    ],\n    \"default_camera_index\": 1,\n    \"show_hint\": false,\n    \"init_azimuthm\": 170,\n    \"init_elevation\": 0,\n    \"init_radius\": 1.6,\n    \"move_camera\": true,\n    \"delta_a\": -2.4,\n    \"delta_e\": 0.8,\n    \"delta_r\": 0.0\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/real_scene/custom_bonsai_config.json",
    "content": "{\n    \"opacity_threshold\": 0.05,\n    \"rotation_degree\": [\n        -135\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 60,\n    \"E\": 2e6,\n    \"nu\": 0.4,\n    \"material\": \"jelly\",\n    \"k_smoothing_neighbors\": 1,\n    \"density\": 200,\n    \"g\": [\n        0.0,\n        0.0,\n        0.0\n    ],\n    \"n_grid\": 120,\n    \"grid_lim\": 3.0,\n    \"grid_v_damping_scale\": 1.1,\n    \"rpic_damping\": 0.0,\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": -1,\n    \"show_hint\": false,\n    \"init_azimuthm\": 96.90092784458707,\n    \"init_elevation\": -35.66518737466003,\n    \"init_radius\": 4.096782754957448,\n    \"init_roll\": 30,\n    \"move_camera\": true,\n    \"delta_a\": 0.05,\n    \"delta_e\": 0.1,\n    \"delta_r\": 0.00,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                1.69705627,\n                -1.2,\n                1.2\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"sim_area\": [\n        -0.7524,\n        1.1903,\n        -0.7674,\n        1.8940,\n        -2.47035,\n        0.37235\n    ]\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/real_scene/custom_bouquet_config.json",
    "content": "{\n    \"opacity_threshold\": 0.05,\n    \"rotation_degree\": [\n       0 \n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 100,\n    \"E\": 2e6,\n    \"nu\": 0.4,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"g\": [\n        0.0,\n        0.0,\n        0.0\n    ],\n    \"n_grid\": 120,\n    \"grid_lim\": 2.5,\n    \"grid_v_damping_scale\": 1.1,\n    \"rpic_damping\": 0.0,\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n       -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"k_smoothing_neighbors\": 50,\n    \"nn_distance_threshold\": 0.5,\n    \"default_camera_index\": -1,\n    \"show_hint\": false,\n    \"init_azimuthm\": -118.77519966925429,\n    \"init_elevation\": 25.997773497590156,\n    \"init_radius\": 4.27758574205424,\n    \"init_roll\": -180,\n    \"move_camera\": true,\n    \"delta_a\": 1.0,\n    \"delta_e\": 0.00,\n    \"delta_r\": 0.00,\n    \"out_of_bound_check_freq\": 1,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                -1.5e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"sim_area\": [\n        -1.8,\n        1.7923,\n        0.1,\n        3.5,\n        -1.2917,\n        2.1863\n    ]\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/real_scene/custom_burger_config.json",
    "content": "{\n    \"opacity_threshold\": 0.05,\n    \"rotation_degree\": [\n       0 \n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 100,\n    \"E\": 2e6,\n    \"nu\": 0.4,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"g\": [\n        0.0,\n        0.0,\n        0.0\n    ],\n    \"n_grid\": 120,\n    \"grid_lim\": 2.5,\n    \"grid_v_damping_scale\": 1.1,\n    \"rpic_damping\": 0.0,\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n       -1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"k_smoothing_neighbors\": 50,\n    \"nn_distance_threshold\": 0.5,\n    \"default_camera_index\": -1,\n    \"show_hint\": false,\n    \"init_azimuthm\": -118.77519966925429,\n    \"init_elevation\": 25.997773497590156,\n    \"init_radius\": 4.27758574205424,\n    \"init_roll\": -180,\n    \"move_camera\": true,\n    \"delta_a\": 1.0,\n    \"delta_e\": 0.00,\n    \"delta_r\": 0.00,\n    \"out_of_bound_check_freq\": 1,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                -1.5e-1,\n                0.0,\n                0.0\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ],\n    \"sim_area\": [\n        -1.8,\n        1.7923,\n        0.1,\n        3.5,\n        -1.2917,\n        2.1863\n    ]\n}"
  },
  {
    "path": "third_party/PhysGaussian/config/real_scene/custom_vasedeck_config.json",
    "content": "{\n    \"opacity_threshold\": 0.02,\n    \"rotation_degree\": [\n        135.0\n    ],\n    \"rotation_axis\": [\n        0\n    ],\n    \"substep_dt\": 1e-4,\n    \"frame_dt\": 4e-2,\n    \"frame_num\": 60,\n    \"E\": 2e6,\n    \"nu\": 0.4,\n    \"material\": \"jelly\",\n    \"density\": 200,\n    \"k_smoothing_neighbors\": 1,\n    \"nn_distance_threshold\": 0.09,\n    \"g\": [\n        0.0,\n        0.0,\n        0.0\n    ],\n    \"n_grid\": 120,\n    \"grid_v_damping_scale\": 1.1,\n    \"rpic_damping\": 0.0,\n    \"sim_area\": [\n        -2.25,\n        2.25,\n        -5.01,\n        -0.81,\n        -1.95,\n        2.55\n    ],\n    \"mpm_space_vertical_upward_axis\": [\n        0,\n        1,\n        0\n    ],\n    \"mpm_space_viewpoint_center\": [\n        1,\n        1,\n        1\n    ],\n    \"default_camera_index\": -1,\n    \"show_hint\": false,\n    \"init_azimuthm\": -150.70204217662163,\n    \"init_elevation\": 39.991079825274255,\n    \"init_radius\": 4.520787855324917,\n    \"init_roll\": 0.0,\n    \"move_camera\": true,\n    \"delta_a\": 1.0,\n    \"delta_e\": 0.0,\n    \"delta_r\": 0.00,\n    \"boundary_conditions\": [\n        {\n            \"type\": \"particle_impulse\",\n            \"force\": [\n                0,\n                0,\n                5e-1\n            ],\n            \"num_dt\": 1,\n            \"start_time\": 0\n        }\n    ]\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/.gitignore",
    "content": "*.pyc\n.vscode\noutput\nbuild\ndiff_rasterization/diff_rast.egg-info\ndiff_rasterization/dist\ntensorboard_3d\nscreenshots"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/.gitmodules",
    "content": "[submodule \"submodules/simple-knn\"]\n\tpath = submodules/simple-knn\n\turl = https://gitlab.inria.fr/bkerbl/simple-knn.git\n[submodule \"submodules/diff-gaussian-rasterization\"]\n\tpath = submodules/diff-gaussian-rasterization\n\turl = https://github.com/graphdeco-inria/diff-gaussian-rasterization\n[submodule \"SIBR_viewers\"]\n\tpath = SIBR_viewers\n\turl = https://gitlab.inria.fr/sibr/sibr_core.git\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/LICENSE.md",
    "content": "Gaussian-Splatting License  \n===========================  \n\n**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.  \nThe *Software* is in the process of being registered with the Agence pour la Protection des  \nProgrammes (APP).  \n\nThe *Software* is still being developed by the *Licensor*.  \n\n*Licensor*'s goal is to allow the research community to use, test and evaluate  \nthe *Software*.  \n\n## 1.  Definitions  \n\n*Licensee* means any person or entity that uses the *Software* and distributes  \nits *Work*.  \n\n*Licensor* means the owners of the *Software*, i.e Inria and MPII  \n\n*Software* means the original work of authorship made available under this  \nLicense ie gaussian-splatting.  \n\n*Work* means the *Software* and any additions to or derivative works of the  \n*Software* that are made available under this License.  \n\n\n## 2.  Purpose  \nThis license is intended to define the rights granted to the *Licensee* by  \nLicensors under the *Software*.  \n\n## 3.  Rights granted  \n\nFor the above reasons Licensors have decided to distribute the *Software*.  \nLicensors grant non-exclusive rights to use the *Software* for research purposes  \nto research users (both academic and industrial), free of charge, without right  \nto sublicense.. The *Software* may be used \"non-commercially\", i.e., for research  \nand/or evaluation purposes only.  \n\nSubject to the terms and conditions of this License, you are granted a  \nnon-exclusive, royalty-free, license to reproduce, prepare derivative works of,  \npublicly display, publicly perform and distribute its *Work* and any resulting  \nderivative works in any form.  \n\n## 4.  Limitations  \n\n**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do  \nso under this License, (b) you include a complete copy of this License with  \nyour distribution, and (c) you retain without modification any copyright,  \npatent, trademark, or attribution notices that are present in the *Work*.  \n\n**4.2 Derivative Works.** You may specify that additional or different terms apply  \nto the use, reproduction, and distribution of your derivative works of the *Work*  \n(\"Your Terms\") only if (a) Your Terms provide that the use limitation in  \nSection 2 applies to your derivative works, and (b) you identify the specific  \nderivative works that are subject to Your Terms. Notwithstanding Your Terms,  \nthis License (including the redistribution requirements in Section 3.1) will  \ncontinue to apply to the *Work* itself.  \n\n**4.3** Any other use without of prior consent of Licensors is prohibited. Research  \nusers explicitly acknowledge having received from Licensors all information  \nallowing to appreciate the adequacy between of the *Software* and their needs and  \nto undertake all necessary precautions for its execution and use.  \n\n**4.4** The *Software* is provided both as a compiled library file and as source  \ncode. In case of using the *Software* for a publication or other results obtained  \nthrough the use of the *Software*, users are strongly encouraged to cite the  \ncorresponding publications as explained in the documentation of the *Software*.  \n\n## 5.  Disclaimer  \n\nTHE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES  \nWITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY  \nUNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL  \nCONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTIES  \nOF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL  \nUSE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR  \nADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE  \nAUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  \nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  \nGOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)  \nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  \nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR  \nIN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.  \n\n## 6.  Files subject to permissive licenses\nThe contents of the file ```utils/loss_utils.py``` are based on publicly available code authored by Evan Su, which falls under the permissive MIT license. \n\nTitle: pytorch-ssim\\\nProject code: https://github.com/Po-Hsun-Su/pytorch-ssim\\\nCopyright Evan Su, 2017\\\nLicense: https://github.com/Po-Hsun-Su/pytorch-ssim/blob/master/LICENSE.txt (MIT)"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/README.md",
    "content": "# 3D Gaussian Splatting for Real-Time Radiance Field Rendering\nBernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (* indicates equal contribution)<br>\n| [Webpage](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) | [Full Paper](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_high.pdf) | [Video](https://youtu.be/T_kXY43VZnk) | [Other GRAPHDECO Publications](http://www-sop.inria.fr/reves/publis/gdindex.php) | [FUNGRAPH project page](https://fungraph.inria.fr) |<br>\n| [T&T+DB COLMAP (650MB)](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip) | [Pre-trained Models (14 GB)](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/pretrained/models.zip) | [Viewers for Windows (60MB)](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip) | [Evaluation Images (7 GB)](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/evaluation/images.zip) |<br>\n![Teaser image](assets/teaser.png)\n\nThis repository contains the official authors implementation associated with the paper \"3D Gaussian Splatting for Real-Time Radiance Field Rendering\", which can be found [here](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/). We further provide the reference images used to create the error metrics reported in the paper, as well as recently created, pre-trained models. \n\n<a href=\"https://www.inria.fr/\"><img height=\"100\" src=\"assets/logo_inria.png\"> </a>\n<a href=\"https://univ-cotedazur.eu/\"><img height=\"100\" src=\"assets/logo_uca.png\"> </a>\n<a href=\"https://www.mpi-inf.mpg.de\"><img height=\"100\" src=\"assets/logo_mpi.png\"> </a> \n<a href=\"https://team.inria.fr/graphdeco/\"> <img style=\"width:100%;\" src=\"assets/logo_graphdeco.png\"></a>\n\nAbstract: *Radiance Field methods have recently revolutionized novel-view synthesis of scenes captured with multiple photos or videos. However, achieving high visual quality still requires neural networks that are costly to train and render, while recent faster methods inevitably trade off speed for quality. For unbounded and complete scenes (rather than isolated objects) and 1080p resolution rendering, no current method can achieve real-time display rates. We introduce three key elements that allow us to achieve state-of-the-art visual quality while maintaining competitive training times and importantly allow high-quality real-time (≥ 30 fps) novel-view synthesis at 1080p resolution. First, starting from sparse points produced during camera calibration, we represent the scene with 3D Gaussians that preserve desirable properties of continuous volumetric radiance fields for scene optimization while avoiding unnecessary computation in empty space; Second, we perform interleaved optimization/density control of the 3D Gaussians, notably optimizing anisotropic covariance to achieve an accurate representation of the scene; Third, we develop a fast visibility-aware rendering algorithm that supports anisotropic splatting and both accelerates training and allows realtime rendering. We demonstrate state-of-the-art visual quality and real-time rendering on several established datasets.*\n\n<section class=\"section\" id=\"BibTeX\">\n  <div class=\"container is-max-desktop content\">\n    <h2 class=\"title\">BibTeX</h2>\n    <pre><code>@Article{kerbl3Dgaussians,\n      author       = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\\\"u}hler, Thomas and Drettakis, George},\n      title        = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},\n      journal      = {ACM Transactions on Graphics},\n      number       = {4},\n      volume       = {42},\n      month        = {July},\n      year         = {2023},\n      url          = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}\n}</code></pre>\n  </div>\n</section>\n\n\n## Funding and Acknowledgments\n\nThis research was funded by the ERC Advanced grant FUNGRAPH No 788065. The authors are grateful to Adobe for generous donations, the OPAL infrastructure from Université Côte d’Azur and for the HPC resources from GENCI–IDRIS (Grant 2022-AD011013409). The authors thank the anonymous reviewers for their valuable feedback, P. Hedman and A. Tewari for proofreading earlier drafts also T. Müller, A. Yu and S. Fridovich-Keil for helping with the comparisons.\n\n## Step-by-step Tutorial\n\nJonathan Stephens made a fantastic step-by-step tutorial for setting up Gaussian Splatting on your machine, along with instructions for creating usable datasets from videos. If the instructions below are too dry for you, go ahead and check it out [here](https://www.youtube.com/watch?v=UXtuigy_wYc).\n\n## Colab\n\nUser [camenduru](https://github.com/camenduru) was kind enough to provide a Colab template that uses this repo's source (status: August 2023!) for quick and easy access to the method. Please check it out [here](https://github.com/camenduru/gaussian-splatting-colab).\n\n## Cloning the Repository\n\nThe repository contains submodules, thus please check it out with \n```shell\n# SSH\ngit clone git@github.com:graphdeco-inria/gaussian-splatting.git --recursive\n```\nor\n```shell\n# HTTPS\ngit clone https://github.com/graphdeco-inria/gaussian-splatting --recursive\n```\n\n## Overview\n\nThe codebase has 4 main components:\n- A PyTorch-based optimizer to produce a 3D Gaussian model from SfM inputs\n- A network viewer that allows to connect to and visualize the optimization process\n- An OpenGL-based real-time viewer to render trained models in real-time.\n- A script to help you turn your own images into optimization-ready SfM data sets\n\nThe components have different requirements w.r.t. both hardware and software. They have been tested on Windows 10 and Ubuntu Linux 22.04. Instructions for setting up and running each of them are found in the sections below.\n\n## Optimizer\n\nThe optimizer uses PyTorch and CUDA extensions in a Python environment to produce trained models. \n\n### Hardware Requirements\n\n- CUDA-ready GPU with Compute Capability 7.0+\n- 24 GB VRAM (to train to paper evaluation quality)\n- Please see FAQ for smaller VRAM configurations\n\n### Software Requirements\n- Conda (recommended for easy setup)\n- C++ Compiler for PyTorch extensions (we used Visual Studio 2019 for Windows)\n- CUDA SDK 11 for PyTorch extensions, install *after* Visual Studio (we used 11.8, **known issues with 11.6**)\n- C++ Compiler and CUDA SDK must be compatible\n\n### Setup\n\n#### Local Setup\n\nOur default, provided install method is based on Conda package and environment management:\n```shell\nSET DISTUTILS_USE_SDK=1 # Windows only\nconda env create --file environment.yml\nconda activate gaussian_splatting\n```\nPlease note that this process assumes that you have CUDA SDK **11** installed, not **12**. For modifications, see below.\n\nTip: Downloading packages and creating a new environment with Conda can require a significant amount of disk space. By default, Conda will use the main system hard drive. You can avoid this by specifying a different package download location and an environment on a different drive:\n\n```shell\nconda config --add pkgs_dirs <Drive>/<pkg_path>\nconda env create --file environment.yml --prefix <Drive>/<env_path>/gaussian_splatting\nconda activate <Drive>/<env_path>/gaussian_splatting\n```\n\n#### Modifications\n\nIf you can afford the disk space, we recommend using our environment files for setting up a training environment identical to ours. If you want to make modifications, please note that major version changes might affect the results of our method. However, our (limited) experiments suggest that the codebase works just fine inside a more up-to-date environment (Python 3.8, PyTorch 2.0.0, CUDA 12). Make sure to create an environment where PyTorch and its CUDA runtime version match and the installed CUDA SDK has no major version difference with PyTorch's CUDA version.\n\n#### Known Issues\n\nSome users experience problems building the submodules on Windows (```cl.exe: File not found``` or similar). Please consider the workaround for this problem from the FAQ.\n\n### Running\n\nTo run the optimizer, simply use\n\n```shell\npython train.py -s <path to COLMAP or NeRF Synthetic dataset>\n```\n\n<details>\n<summary><span style=\"font-weight: bold;\">Command Line Arguments for train.py</span></summary>\n\n  #### --source_path / -s\n  Path to the source directory containing a COLMAP or Synthetic NeRF data set.\n  #### --model_path / -m \n  Path where the trained model should be stored (```output/<random>``` by default).\n  #### --images / -i\n  Alternative subdirectory for COLMAP images (```images``` by default).\n  #### --eval\n  Add this flag to use a MipNeRF360-style training/test split for evaluation.\n  #### --resolution / -r\n  Specifies resolution of the loaded images before training. If provided ```1, 2, 4``` or ```8```, uses original, 1/2, 1/4 or 1/8 resolution, respectively. For all other values, rescales the width to the given number while maintaining image aspect. **If not set and input image width exceeds 1.6K pixels, inputs are automatically rescaled to this target.**\n  #### --data_device\n  Specifies where to put the source image data, ```cuda``` by default, recommended to use ```cpu``` if training on large/high-resolution dataset, will reduce VRAM consumption, but slightly slow down training. Thanks to [HrsPythonix](https://github.com/HrsPythonix).\n  #### --white_background / -w\n  Add this flag to use white background instead of black (default), e.g., for evaluation of NeRF Synthetic dataset.\n  #### --sh_degree\n  Order of spherical harmonics to be used (no larger than 3). ```3``` by default.\n  #### --convert_SHs_python\n  Flag to make pipeline compute forward and backward of SHs with PyTorch instead of ours.\n  #### --convert_cov3D_python\n  Flag to make pipeline compute forward and backward of the 3D covariance with PyTorch instead of ours.\n  #### --debug\n  Enables debug mode if you experience erros. If the rasterizer fails, a ```dump``` file is created that you may forward to us in an issue so we can take a look.\n  #### --debug_from\n  Debugging is **slow**. You may specify an iteration (starting from 0) after which the above debugging becomes active.\n  #### --iterations\n  Number of total iterations to train for, ```30_000``` by default.\n  #### --ip\n  IP to start GUI server on, ```127.0.0.1``` by default.\n  #### --port \n  Port to use for GUI server, ```6009``` by default.\n  #### --test_iterations\n  Space-separated iterations at which the training script computes L1 and PSNR over test set, ```7000 30000``` by default.\n  #### --save_iterations\n  Space-separated iterations at which the training script saves the Gaussian model, ```7000 30000 <iterations>``` by default.\n  #### --checkpoint_iterations\n  Space-separated iterations at which to store a checkpoint for continuing later, saved in the model directory.\n  #### --start_checkpoint\n  Path to a saved checkpoint to continue training from.\n  #### --quiet \n  Flag to omit any text written to standard out pipe. \n  #### --feature_lr\n  Spherical harmonics features learning rate, ```0.0025``` by default.\n  #### --opacity_lr\n  Opacity learning rate, ```0.05``` by default.\n  #### --scaling_lr\n  Scaling learning rate, ```0.005``` by default.\n  #### --rotation_lr\n  Rotation learning rate, ```0.001``` by default.\n  #### --position_lr_max_steps\n  Number of steps (from 0) where position learning rate goes from ```initial``` to ```final```. ```30_000``` by default.\n  #### --position_lr_init\n  Initial 3D position learning rate, ```0.00016``` by default.\n  #### --position_lr_final\n  Final 3D position learning rate, ```0.0000016``` by default.\n  #### --position_lr_delay_mult\n  Position learning rate multiplier (cf. Plenoxels), ```0.01``` by default. \n  #### --densify_from_iter\n  Iteration where densification starts, ```500``` by default. \n  #### --densify_until_iter\n  Iteration where densification stops, ```15_000``` by default.\n  #### --densify_grad_threshold\n  Limit that decides if points should be densified based on 2D position gradient, ```0.0002``` by default.\n  #### --densification_interval\n  How frequently to densify, ```100``` (every 100 iterations) by default.\n  #### --opacity_reset_interval\n  How frequently to reset opacity, ```3_000``` by default. \n  #### --lambda_dssim\n  Influence of SSIM on total loss from 0 to 1, ```0.2``` by default. \n  #### --percent_dense\n  Percentage of scene extent (0--1) a point must exceed to be forcibly densified, ```0.01``` by default.\n\n</details>\n<br>\n\nNote that similar to MipNeRF360, we target images at resolutions in the 1-1.6K pixel range. For convenience, arbitrary-size inputs can be passed and will be automatically resized if their width exceeds 1600 pixels. We recommend to keep this behavior, but you may force training to use your higher-resolution images by setting ```-r 1```.\n\nThe MipNeRF360 scenes are hosted by the paper authors [here](https://jonbarron.info/mipnerf360/). You can find our SfM data sets for Tanks&Temples and Deep Blending [here](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip). If you do not provide an output model directory (```-m```), trained models are written to folders with randomized unique names inside the ```output``` directory. At this point, the trained models may be viewed with the real-time viewer (see further below).\n\n### Evaluation\nBy default, the trained models use all available images in the dataset. To train them while withholding a test set for evaluation, use the ```--eval``` flag. This way, you can render training/test sets and produce error metrics as follows:\n```shell\npython train.py -s <path to COLMAP or NeRF Synthetic dataset> --eval # Train with train/test split\npython render.py -m <path to trained model> # Generate renderings\npython metrics.py -m <path to trained model> # Compute error metrics on renderings\n```\n\nIf you want to evaluate our [pre-trained models](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/pretrained/models.zip), you will have to download the corresponding source data sets and indicate their location to ```render.py``` with an additional ```--source_path/-s``` flag. Note: The pre-trained models were created with the release codebase. This code base has been cleaned up and includes bugfixes, hence the metrics you get from evaluating them will differ from those in the paper.\n```shell\npython render.py -m <path to pre-trained model> -s <path to COLMAP dataset>\npython metrics.py -m <path to pre-trained model>\n```\n\n<details>\n<summary><span style=\"font-weight: bold;\">Command Line Arguments for render.py</span></summary>\n\n  #### --model_path / -m \n  Path to the trained model directory you want to create renderings for.\n  #### --skip_train\n  Flag to skip rendering the training set.\n  #### --skip_test\n  Flag to skip rendering the test set.\n  #### --quiet \n  Flag to omit any text written to standard out pipe. \n\n  **The below parameters will be read automatically from the model path, based on what was used for training. However, you may override them by providing them explicitly on the command line.** \n\n  #### --source_path / -s\n  Path to the source directory containing a COLMAP or Synthetic NeRF data set.\n  #### --images / -i\n  Alternative subdirectory for COLMAP images (```images``` by default).\n  #### --eval\n  Add this flag to use a MipNeRF360-style training/test split for evaluation.\n  #### --resolution / -r\n  Changes the resolution of the loaded images before training. If provided ```1, 2, 4``` or ```8```, uses original, 1/2, 1/4 or 1/8 resolution, respectively. For all other values, rescales the width to the given number while maintaining image aspect. ```1``` by default.\n  #### --white_background / -w\n  Add this flag to use white background instead of black (default), e.g., for evaluation of NeRF Synthetic dataset.\n  #### --convert_SHs_python\n  Flag to make pipeline render with computed SHs from PyTorch instead of ours.\n  #### --convert_cov3D_python\n  Flag to make pipeline render with computed 3D covariance from PyTorch instead of ours.\n\n</details>\n\n<details>\n<summary><span style=\"font-weight: bold;\">Command Line Arguments for metrics.py</span></summary>\n\n  #### --model_paths / -m \n  Space-separated list of model paths for which metrics should be computed.\n</details>\n<br>\n\nWe further provide the ```full_eval.py``` script. This script specifies the routine used in our evaluation and demonstrates the use of some additional parameters, e.g., ```--images (-i)``` to define alternative image directories within COLMAP data sets. If you have downloaded and extracted all the training data, you can run it like this:\n```shell\npython full_eval.py -m360 <mipnerf360 folder> -tat <tanks and temples folder> -db <deep blending folder>\n```\nIn the current version, this process takes about 7h on our reference machine containing an A6000. If you want to do the full evaluation on our pre-trained models, you can specify their download location and skip training. \n```shell\npython full_eval.py -o <directory with pretrained models> --skip_training -m360 <mipnerf360 folder> -tat <tanks and temples folder> -db <deep blending folder>\n```\n\nIf you want to compute the metrics on our paper's [evaluation images](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/evaluation/images.zip), you can also skip rendering. In this case it is not necessary to provide the source datasets. You can compute metrics for multiple image sets at a time. \n```shell\npython full_eval.py -m <directory with evaluation images>/garden ... --skip_training --skip_rendering\n```\n\n<details>\n<summary><span style=\"font-weight: bold;\">Command Line Arguments for full_eval.py</span></summary>\n  \n  #### --skip_training\n  Flag to skip training stage.\n  #### --skip_rendering\n  Flag to skip rendering stage.\n  #### --skip_metrics\n  Flag to skip metrics calculation stage.\n  #### --output_path\n  Directory to put renderings and results in, ```./eval``` by default, set to pre-trained model location if evaluating them.\n  #### --mipnerf360 / -m360\n  Path to MipNeRF360 source datasets, required if training or rendering.\n  #### --tanksandtemples / -tat\n  Path to Tanks&Temples source datasets, required if training or rendering.\n  #### --deepblending / -db\n  Path to Deep Blending source datasets, required if training or rendering.\n</details>\n<br>\n\n## Interactive Viewers\nWe provide two interactive viewers for our method: remote and real-time. Our viewing solutions are based on the [SIBR](https://sibr.gitlabpages.inria.fr/) framework, developed by the GRAPHDECO group for several novel-view synthesis projects.\n\n### Hardware Requirements\n- OpenGL 4.5-ready GPU and drivers (or latest MESA software)\n- 4 GB VRAM recommended\n- CUDA-ready GPU with Compute Capability 7.0+ (only for Real-Time Viewer)\n\n### Software Requirements\n- Visual Studio or g++, **not Clang** (we used Visual Studio 2019 for Windows)\n- CUDA SDK 11, install *after* Visual Studio (we used 11.8)\n- CMake (recent version, we used 3.24)\n- 7zip (only on Windows)\n\n### Pre-built Windows Binaries\nWe provide pre-built binaries for Windows [here](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/binaries/viewers.zip). We recommend using them on Windows for an efficient setup, since the building of SIBR involves several external dependencies that must be downloaded and compiled on-the-fly.\n\n### Installation from Source\nIf you cloned with submodules (e.g., using ```--recursive```), the source code for the viewers is found in ```SIBR_viewers```. The network viewer runs within the SIBR framework for Image-based Rendering applications.\n\n#### Windows\nCMake should take care of your dependencies.\n```shell\ncd SIBR_viewers\ncmake -Bbuild .\ncmake --build build --target install --config RelWithDebInfo\n```\nYou may specify a different configuration, e.g. ```Debug``` if you need more control during development.\n\n#### Ubuntu 22.04\nYou will need to install a few dependencies before running the project setup.\n```shell\n# Dependencies\nsudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev\n# Project setup\ncd SIBR_viewers\ncmake -Bbuild . -DCMAKE_BUILD_TYPE=Release # add -G Ninja to build faster\ncmake --build build -j24 --target install\n``` \n\n#### Ubuntu 20.04\nBackwards compatibility with Focal Fossa is not fully tested, but building SIBR with CMake should still work after invoking\n```shell\ngit checkout fossa_compatibility\n```\n\n### Navigation in SIBR Viewers\nThe SIBR interface provides several methods of navigating the scene. By default, you will be started with an FPS navigator, which you can control with ```W, A, S, D, Q, E``` for camera translation and ```I, K, J, L, U, O``` for rotation. Alternatively, you may want to use a Trackball-style navigator (select from the floating menu). You can also snap to a camera from the data set with the ```Snap to``` button or find the closest camera with ```Snap to closest```. The floating menues also allow you to change the navigation speed. You can use the ```Scaling Modifier``` to control the size of the displayed Gaussians, or show the initial point cloud.\n\n### Running the Network Viewer\n\n\n\nhttps://github.com/graphdeco-inria/gaussian-splatting/assets/40643808/90a2e4d3-cf2e-4633-b35f-bfe284e28ff7\n\n\n\nAfter extracting or installing the viewers, you may run the compiled ```SIBR_remoteGaussian_app[_config]``` app in ```<SIBR install dir>/bin```, e.g.: \n```shell\n./<SIBR install dir>/bin/SIBR_remoteGaussian_app\n```\nThe network viewer allows you to connect to a running training process on the same or a different machine. If you are training on the same machine and OS, no command line parameters should be required: the optimizer communicates the location of the training data to the network viewer. By default, optimizer and network viewer will try to establish a connection on **localhost** on port **6009**. You can change this behavior by providing matching ```--ip``` and ```--port``` parameters to both the optimizer and the network viewer. If for some reason the path used by the optimizer to find the training data is not reachable by the network viewer (e.g., due to them running on different (virtual) machines), you may specify an override location to the viewer by using ```-s <source path>```. \n\n<details>\n<summary><span style=\"font-weight: bold;\">Primary Command Line Arguments for Network Viewer</span></summary>\n\n  #### --path / -s\n  Argument to override model's path to source dataset.\n  #### --ip\n  IP to use for connection to a running training script.\n  #### --port\n  Port to use for connection to a running training script. \n  #### --rendering-size \n  Takes two space separated numbers to define the resolution at which network rendering occurs, ```1200``` width by default.\n  Note that to enforce an aspect that differs from the input images, you need ```--force-aspect-ratio``` too.\n  #### --load_images\n  Flag to load source dataset images to be displayed in the top view for each camera.\n</details>\n<br>\n\n### Running the Real-Time Viewer\n\n\n\n\nhttps://github.com/graphdeco-inria/gaussian-splatting/assets/40643808/0940547f-1d82-4c2f-a616-44eabbf0f816\n\n\n\n\nAfter extracting or installing the viewers, you may run the compiled ```SIBR_gaussianViewer_app[_config]``` app in ```<SIBR install dir>/bin```, e.g.: \n```shell\n./<SIBR install dir>/bin/SIBR_gaussianViewer_app -m <path to trained model>\n```\n\nIt should suffice to provide the ```-m``` parameter pointing to a trained model directory. Alternatively, you can specify an override location for training input data using ```-s```. To use a specific resolution other than the auto-chosen one, specify ```--rendering-size <width> <height>```. Combine it with ```--force-aspect-ratio``` if you want the exact resolution and don't mind image distortion. \n\n**To unlock the full frame rate, please disable V-Sync on your machine and also in the application (Menu &rarr; Display). In a multi-GPU system (e.g., laptop) your OpenGL/Display GPU should be the same as your CUDA GPU (e.g., by setting the application's GPU preference on Windows, see below) for maximum performance.**\n\n![Teaser image](assets/select.png)\n\nIn addition to the initial point cloud and the splats, you also have the option to visualize the Gaussians by rendering them as ellipsoids from the floating menu.\nSIBR has many other functionalities, please see the [documentation](https://sibr.gitlabpages.inria.fr/) for more details on the viewer, navigation options etc. There is also a Top View (available from the menu) that shows the placement of the input cameras and the original SfM point cloud; please note that Top View slows rendering when enabled. The real-time viewer also uses slightly more aggressive, fast culling, which can be toggled in the floating menu. If you ever encounter an issue that can be solved by turning fast culling off, please let us know.\n\n<details>\n<summary><span style=\"font-weight: bold;\">Primary Command Line Arguments for Real-Time Viewer</span></summary>\n\n  #### --model-path / -m\n  Path to trained model.\n  #### --iteration\n  Specifies which of state to load if multiple are available. Defaults to latest available iteration.\n  #### --path / -s\n  Argument to override model's path to source dataset.\n  #### --rendering-size \n  Takes two space separated numbers to define the resolution at which real-time rendering occurs, ```1200``` width by default. Note that to enforce an aspect that differs from the input images, you need ```--force-aspect-ratio``` too.\n  #### --load_images\n  Flag to load source dataset images to be displayed in the top view for each camera.\n  #### --device\n  Index of CUDA device to use for rasterization if multiple are available, ```0``` by default.\n  #### --no_interop\n  Disables CUDA/GL interop forcibly. Use on systems that may not behave according to spec (e.g., WSL2 with MESA GL 4.5 software rendering).\n</details>\n<br>\n\n## Processing your own Scenes\n\nOur COLMAP loaders expect the following dataset structure in the source path location:\n\n```\n<location>\n|---images\n|   |---<image 0>\n|   |---<image 1>\n|   |---...\n|---sparse\n    |---0\n        |---cameras.bin\n        |---images.bin\n        |---points3D.bin\n```\n\nFor rasterization, the camera models must be either a SIMPLE_PINHOLE or PINHOLE camera. We provide a converter script ```convert.py```, to extract undistorted images and SfM information from input images. Optionally, you can use ImageMagick to resize the undistorted images. This rescaling is similar to MipNeRF360, i.e., it creates images with 1/2, 1/4 and 1/8 the original resolution in corresponding folders. To use them, please first install a recent version of COLMAP (ideally CUDA-powered) and ImageMagick. Put the images you want to use in a directory ```<location>/input```.\n```\n<location>\n|---input\n    |---<image 0>\n    |---<image 1>\n    |---...\n```\n If you have COLMAP and ImageMagick on your system path, you can simply run \n```shell\npython convert.py -s <location> [--resize] #If not resizing, ImageMagick is not needed\n```\nAlternatively, you can use the optional parameters ```--colmap_executable``` and ```--magick_executable``` to point to the respective paths. Please note that on Windows, the executable should point to the COLMAP ```.bat``` file that takes care of setting the execution environment. Once done, ```<location>``` will contain the expected COLMAP data set structure with undistorted, resized input images, in addition to your original images and some temporary (distorted) data in the directory ```distorted```.\n\nIf you have your own COLMAP dataset without undistortion (e.g., using ```OPENCV``` camera), you can try to just run the last part of the script: Put the images in ```input``` and the COLMAP info in a subdirectory ```distorted```:\n```\n<location>\n|---input\n|   |---<image 0>\n|   |---<image 1>\n|   |---...\n|---distorted\n    |---database.db\n    |---sparse\n        |---0\n            |---...\n```\nThen run \n```shell\npython convert.py -s <location> --skip_matching [--resize] #If not resizing, ImageMagick is not needed\n```\n\n<details>\n<summary><span style=\"font-weight: bold;\">Command Line Arguments for convert.py</span></summary>\n\n  #### --no_gpu\n  Flag to avoid using GPU in COLMAP.\n  #### --skip_matching\n  Flag to indicate that COLMAP info is available for images.\n  #### --source_path / -s\n  Location of the inputs.\n  #### --camera \n  Which camera model to use for the early matching steps, ```OPENCV``` by default.\n  #### --resize\n  Flag for creating resized versions of input images.\n  #### --colmap_executable\n  Path to the COLMAP executable (```.bat``` on Windows).\n  #### --magick_executable\n  Path to the ImageMagick executable.\n</details>\n<br>\n\n## FAQ\n- *Where do I get data sets, e.g., those referenced in ```full_eval.py```?* The MipNeRF360 data set is provided by the authors of the original paper on the project site. Note that two of the data sets cannot be openly shared and require you to consult the authors directly. For Tanks&Temples and Deep Blending, please use the download links provided at the top of the page. Alternatively, you may access the cloned data (status: August 2023!) from [HuggingFace](https://huggingface.co/camenduru/gaussian-splatting)\n\n\n- *How can I use this for a much larger dataset, like a city district?* The current method was not designed for these, but given enough memory, it should work out. However, the approach can struggle in multi-scale detail scenes (extreme close-ups, mixed with far-away shots). This is usually the case in, e.g., driving data sets (cars close up, buildings far away). For such scenes, you can lower the ```--position_lr_init```, ```--position_lr_final``` and ```--scaling_lr``` (x0.3, x0.1, ...). The more extensive the scene, the lower these values should be. Below, we use default learning rates (left) and ```--position_lr_init 0.000016 --scaling_lr 0.001\"``` (right).\n\n| ![Default learning rate result](assets/worse.png \"title-1\") <!-- --> | <!-- --> ![Reduced learning rate result](assets/better.png \"title-2\") |\n| --- | --- |\n\n- *I'm on Windows and I can't manage to build the submodules, what do I do?* Consider following the steps in the excellent video tutorial [here](https://www.youtube.com/watch?v=UXtuigy_wYc), hopefully they should help. The order in which the steps are done is important! Alternatively, consider using the linked Colab template.\n\n- *It still doesn't work. It says something about ```cl.exe```. What do I do?* User Henry Pearce found a workaround. You can you try adding the visual studio path to your environment variables (your version number might differ);\n```C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\Hostx64\\x64```\nThen make sure you start a new conda prompt and cd to your repo location and try this;\n```\nconda activate gaussian_splatting\ncd <dir_to_repo>/gaussian-splatting\npip install submodules\\diff-gaussian-rasterization\npip install submodules\\simple-knn\n```\n\n- *I'm on macOS/Puppy Linux/Greenhat and I can't manage to build, what do I do?* Sorry, we can't provide support for platforms outside of the ones we list in this README. Consider using the linked Colab template.\n\n- *I don't have 24 GB of VRAM for training, what do I do?* The VRAM consumption is determined by the number of points that are being optimized, which increases over time. If you only want to train to 7k iterations, you will need significantly less. To do the full training routine and avoid running out of memory, you can increase the ```--densify_grad_threshold```, ```--densification_interval``` or reduce the value of ```--densify_until_iter```. Note however that this will affect the quality of the result. Also try setting ```--test_iterations``` to ```-1``` to avoid memory spikes during testing. If ```--densify_grad_threshold``` is very high, no densification should occur and training should complete if the scene itself loads successfully.\n\n- *24 GB of VRAM for reference quality training is still a lot! Can't we do it with less?* Yes, most likely. By our calculations it should be possible with **way** less memory (~8GB). If we can find the time we will try to achieve this. If some PyTorch veteran out there wants to tackle this, we look forward to your pull request!\n\n\n- *How can I use the differentiable Gaussian rasterizer for my own project?* Easy, it is included in this repo as a submodule ```diff-gaussian-rasterization```. Feel free to check out and install the package. It's not really documented, but using it from the Python side is very straightforward (cf. ```gaussian_renderer/__init__.py```).\n\n- *Wait, but ```<insert feature>``` isn't optimized and could be much better?* There are several parts we didn't even have time to think about improving (yet). The performance you get with this prototype is probably a rather slow baseline for what is physically possible.\n\n- *Something is broken, how did this happen?* We tried hard to provide a solid and comprehensible basis to make use of the paper's method. We have refactored the code quite a bit, but we have limited capacity to test all possible usage scenarios. Thus, if part of the website, the code or the performance is lacking, please create an issue. If we find the time, we will do our best to address it.\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/.gitignore",
    "content": "extlibs/\r\nbuild/\r\ninstall/\r\nsrc/projects/*\r\ncmake-gui.exe.stackdump\r\n__pycache__/\r\n\r\n# emacs garbage\r\n\\#*\r\n.\\#*\r\n\r\n# vim garbage\r\n*.swp\r\n*.swo\r\n*.idea/\r\n*.log\r\n*.sh\r\n*.tmp\r\n\r\nhs_err_*\r\n\r\n# re include common public projects\r\n!src/projects/ulr/\r\n!src/projects/dataset_tools/\r\n\r\n# more vim garbage\r\n# Swap\r\n[._]*.s[a-v][a-z]\r\n!*.svg  # comment out if you don't need vector files\r\n[._]*.sw[a-p]\r\n[._]s[a-rt-v][a-z]\r\n[._]ss[a-gi-z]\r\n[._]sw[a-p]\r\n\r\n# Session\r\nSession.vim\r\nSessionx.vim\r\n\r\n# Temporary\r\n.netrwhist\r\n*~\r\n# Auto-generated tag files\r\ntags\r\n# Persistent undo\r\n[._]*.un~"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\nCMAKE_MINIMUM_REQUIRED(VERSION 3.22)\n\nset (CMAKE_SYSTEM_VERSION 10.0.15063.0 CACHE INTERNAL \"Cmake system version\" FORCE)\nPROJECT(sibr_projects)\n\nset(REQUIRED_VERSION \"3.22.0\")\nset(CHECKED_VERSION \"3.27.0\")\n\nif (CMAKE_VERSION VERSION_LESS REQUIRED_VERSION)\n    message(WARNING \"Deprecated version of cmake. Please update to at least ${REQUIRED_VERSION} (${CHECKED_VERSION} recommended).\")\nelseif (CMAKE_VERSION VERSION_GREATER CHECKED_VERSION)\n\tmessage(WARNING \"Untested version of cmake. If you checked everything is working properly, please update ${CHECKED_VERSION} in the main CmakeLists.txt with the version you tested.\")\nendif()\n\n## Include cmake stuff (functions/macros) : Modules files\nif(WIN32)\nlist(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows)\nlist(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows/Modules)\nelse()\nlist(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux)\nlist(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux/Modules)\nendif()\nset_property(GLOBAL PROPERTY USE_FOLDERS ON)\n\n## To maintain cmake versions compatibilities\ninclude(cmake_policies)\nsetPolicies()\n\ninclude(git_describe)\ngit_describe(GIT_BRANCH SIBR_CORE_BRANCH GIT_COMMIT_HASH SIBR_CORE_COMMIT_HASH GIT_TAG SIBR_CORE_TAG GIT_VERSION SIBR_CORE_VERSION)\n\nmessage(STATUS \"SIBR version :\\n BRANCH ${SIBR_CORE_BRANCH}\\n COMMIT_HASH ${SIBR_CORE_COMMIT_HASH}\\n TAG ${SIBR_CORE_TAG}\\n VERSION ${SIBR_CORE_VERSION}\")\n\nif(NOT WIN32)\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nendif()\n\n\nif (WIN32)\n\t## Allow C++11 + other flags\n\tinclude(CheckCXXCompilerFlag)\n\tget_filename_component(currentBuildTool ${CMAKE_BUILD_TOOL} NAME_WE)\t# tool that can launch the native build system. returned value may be the full path\n\tif(${currentBuildTool} MATCHES \"(msdev|devenv|nmake|MSBuild)\")\n\n\t\tadd_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/W3;/DNOMINMAX;/MP;-D_USE_MATH_DEFINES>\")\n\t    #add_definitions(/W3 /DNOMINMAX /MP -D_USE_MATH_DEFINES)# /D_ITERATOR_DEBUG_LEVEL=1 because you need all external DLl to compile with this flag too\n\t    set(CMAKE_CONFIGURATION_TYPES \"RelWithDebInfo;Release;Debug\" CACHE STRING \"\" FORCE)\n\t    set(CMAKE_CXX_STANDARD 14)\n\t\tset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\t\tset(CMAKE_CXX_EXTENSIONS OFF)\n\telseif(${currentBuildTool} MATCHES \"(make|gmake)\")\n\t    add_definitions(\"-Wall -Wno-unknown-pragmas -Wno-sign-compare -g -std=c++14 -D__forceinline=\\\"inline\\ __attribute__((always_inline))\\\"\")\n\t\t# CHECK_CXX_COMPILER_FLAG(\"-std=gnu++11\" COMPILER_SUPPORTS_CXX11)\n\t\t# CHECK_CXX_COMPILER_FLAG(\"-std=gnu++0x\" COMPILER_SUPPORTS_CXX0X)\n\t\t# if(COMPILER_SUPPORTS_CXX11)\n\t\t# \tadd_definitions(-std=gnu++11)\n\t\t# elseif(COMPILER_SUPPORTS_CXX0X)\n\t\t# \tadd_definitions(-std=gnu++0x)\n\t\t# else()\n\t\t# \tmessage(SEND_ERROR \"The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.\")\n\t\t# endif()\n\telseif(APPLE) ## \\todo TODO: do a better test and send error on unsupported c++14 compiler\n\t    add_definitions(-std=c++14 -stdlib=libc++)\n\tendif()\nelse()\n\t## Allow C++11 + other flags\n\tinclude(CheckCXXCompilerFlag)\n\tget_filename_component(currentBuildTool ${CMAKE_BUILD_TOOL} NAME_WE)\t# tool that can launch the native build system. returned value may be the full path\n\tif(${currentBuildTool} MATCHES \"(msdev|devenv|nmake|MSBuild)\")\n\n\t\tadd_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/W3;/DNOMINMAX;/MP;-D_USE_MATH_DEFINES>\")\n\t    #add_definitions(/W3 /DNOMINMAX /MP -D_USE_MATH_DEFINES)# /D_ITERATOR_DEBUG_LEVEL=1 because you need all external DLl to compile with this flag too\n\t    set(CMAKE_CONFIGURATION_TYPES \"RelWithDebInfo;Release;Debug\" CACHE STRING \"\" FORCE)\n\t    set(CMAKE_CXX_STANDARD 14)\n\t\tset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\t\tset(CMAKE_CXX_EXTENSIONS OFF)\n\telseif(${currentBuildTool} MATCHES \"(make|gmake|ninja)\")\n\t\tadd_definitions(\"-fpermissive -fPIC -Wall -Wno-unknown-pragmas -Wno-sign-compare -g -std=c++17 -D__forceinline=\\\"inline\\ __attribute__((always_inline))\\\"\")\n\telseif(APPLE) ## \\todo TODO: do a better test and send error on unsupported c++14 compiler\n\t    add_definitions(-std=c++17 -stdlib=libc++)\n\tendif()\nendif()\n\nset(INSTALL_STANDALONE ON)\n\n## Set default build output binaries (used also in sub CMakeLists.txt) :\nset(BIN_BUILT_DIR \"bin\")\nif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\tset(ARCHI_BUILT_DIR \"x64\")\n\tset(LIB_BUILT_DIR \"lib64\")\nelse()\n\tset(ARCHI_BUILT_DIR \"x86\")\n\tset(LIB_BUILT_DIR \"lib\")\nendif()\n\noption(SEPARATE_CONFIGURATIONS \"Clearer separation between configurations\" OFF)\nSET(CMAKE_INSTALL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/install)\nSET(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_ROOT})\n\nif(DEFINED CMAKE_BUILD_TYPE) ## for mono config type (make/nmake/ninja based)\n\tif(${CMAKE_BUILD_TYPE} MATCHES \"Debug\")\n\t\tset(CMAKE_DEBUG_POSTFIX \"_d\")\n\telseif(${CMAKE_BUILD_TYPE} MATCHES \"RelWithDebInfo\")\n\t\tset(CMAKE_RELWITHDEBINFO_POSTFIX \"_rwdi\")\n\telseif(${CMAKE_BUILD_TYPE} MATCHES \"MinSizeRel\")\n\t\tset(CMAKE_MINSIZEREL_POSTFIX \"_msr\")\n\telseif(${CMAKE_BUILD_TYPE} MATCHES \"Release\")\n\t\tset(CMAKE_RELEASE_POSTFIX \"\")\n\tendif()\n\n\tif(SEPARATE_CONFIGURATIONS)\n\t\tSET(CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE} \t${CMAKE_INSTALL_ROOT}/${CMAKE_BUILD_TYPE})\n\telse()\n\t\tSET(CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE} \t${CMAKE_INSTALL_ROOT})\n\tendif()\n\n\tMESSAGE(STATUS \"Install path set to ${CMAKE_INSTALL_PREFIX}.\")\n\tSET(CMAKE_OUTPUT_LIB_${CMAKE_BUILD_TYPE} \t${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/lib)\n\tSET(CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE} \t${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/bin)\n\n\tset(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} \t${CMAKE_OUTPUT_LIB_${CMAKE_BUILD_TYPE}})\n\tset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} \t${CMAKE_OUTPUT_LIB_${CMAKE_BUILD_TYPE}})\n\tset(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} \t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}})\n\tset(CMAKE_PDB_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} \t\t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}})\nendif()\nforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) ## for multi config types (MSVC based)\n\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\tif(${CONFIG_TYPES} MATCHES \"Debug\")\n\t\tset(CMAKE_DEBUG_POSTFIX \"_d\")\n\telseif(${CONFIG_TYPES} MATCHES \"RelWithDebInfo\")\n\t\tset(CMAKE_RELWITHDEBINFO_POSTFIX \"_rwdi\")\n\telseif(${CONFIG_TYPES} MATCHES \"MinSizeRel\")\n\t\tset(CMAKE_MINSIZEREL_POSTFIX \"_msr\")\n\telseif(${CMAKE_BUILD_TYPE} MATCHES \"Release\")\n\t\tset(CMAKE_RELEASE_POSTFIX \"\")\n\tendif()\n\n\tif(SEPARATE_CONFIGURATIONS)\n\t\tSET(CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC} ${CMAKE_INSTALL_ROOT}/${CONFIG_TYPES})\n\telse()\n\t\tSET(CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC} ${CMAKE_INSTALL_ROOT})\n\tendif()\n\t\n\tMESSAGE(STATUS \"Install path for ${CONFIG_TYPES} set to ${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}.\")\n\tSET(CMAKE_OUTPUT_LIB_${CONFIG_TYPES_UC} \t${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/lib)\n\tSET(CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC} \t${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/bin)\n\n\tset(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC} \t${CMAKE_OUTPUT_LIB_${CONFIG_TYPES_UC}})\n\tset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC} \t${CMAKE_OUTPUT_LIB_${CONFIG_TYPES_UC}})\n\tset(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC} \t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}})\n\tset(CMAKE_PDB_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC} \t\t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}})\nendforeach()\n\n\n# Settings for RPATH\nif (NOT WIN32)\n\t# Default config of Fedora at INRIA has no LD_LIBRARY_PATH (for security reasons I guess)\n\t# So at least I had \"./\" in RPATH and found link paths\n\t#set(CMAKE_SKIP_RPATH TRUE)\n\t#SET(CMAKE_SKIP_BUILD_RPATH  FALSE)\n\tSET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)\n\n\tSET(CMAKE_INSTALL_RPATH \"$ORIGIN\")\n\t#SET(CMAKE_INSTALL_RPATH \"./\")\n\t#SET(CMAKE_INSTALL_RPATH \"./:/usr/lib64/:/usr/lib/:/usr/local/lib64/:/usr/local/lib/\") # This one causes be a problem -> a \"default\" version of libGL (swrast) is located in /usr/lib64 and was selected instead of nvidia one (in /usr/lib64/nividia)\n\n\tSET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)\nendif()\n\n\nset(SIBR_PROGRAMARGS \"\" CACHE STRING \"Default program arguments used in Visual Studio target properties\")\nif (\"${SIBR_PROGRAMARGS}\" STREQUAL \"\")\n  if (DEFINED ENV{SIBR_PROGRAMARGS})\n    set(SIBR_PROGRAMARGS \"$ENV{SIBR_PROGRAMARGS}\" CACHE STRING \"Default program arguments used in Visual Studio target properties\" FORCE)\n    message( STATUS \"Using program options found in environment variable 'SIBR_PROGRAMARGS' => '${SIBR_PROGRAMARGS}'\")\n  else()\n    message(\n      \"Note you can provide default program options for Visual Studio target properties by either setting\"\n      \" a value for the cmake cached variable 'SIBR_PROGRAMARGS' or by setting a new environment \"\n      \"variable 'SIBR_PROGRAMARGS'\")\n  endif()\nendif()\n\nadd_custom_target(PREBUILD ALL)\n\n## Include all projects\nset(SIBR_PROJECTS_SAMPLES_SUBPAGE_REF \"\")\nset(SIBR_PROJECTS_OURS_SUBPAGE_REF \"\")\nset(SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF \"\")\nset(SIBR_PROJECTS_OTHERS_SUBPAGE_REF \"\")\nset(SIBR_PROJECTS_SAMPLES_REF_REF \"\")\nset(SIBR_PROJECTS_OURS_REF_REF \"\")\nset(SIBR_PROJECTS_TOOLBOX_REF_REF \"\")\nset(SIBR_PROJECTS_OTHERS_REF_REF \"\")\nset(DOXY_APP_SPECIFIC_IMG_PATH \"\")\nset(DOXY_DOC_EXCLUDE_PATTERNS_DIRS \"\")\nADD_SUBDIRECTORY(src)\n\n\n## handle documentation\nif (WIN32)\nADD_SUBDIRECTORY(docs)\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/LICENSE.md",
    "content": "SIBR License  \n============  \n\n**Inria** and **UCA** hold all the ownership rights on the *Software* named **sibr-core**.  \nThe *Software* has been registered with the Agence pour la Protection des  \nProgrammes (APP) under IDDN.FR.001.430020.000.S.P.2019.000.31235  \n\nThe *Software* is still being developed by the *Licensor*.  \n\n*Licensor*'s goal is to allow the research community to use, test and evaluate  \nthe *Software*.  \n\n## 1.  Definitions  \n\n*Licensee* means any person or entity that uses the *Software* and distributes  \nits *Work*.  \n\n*Licensor* means the owners of the *Software*, i.e Inria and UCA  \n\n*Software* means the original work of authorship made available under this  \nLicense ie Sibr-core.  \n\n*Work* means the *Software* and any additions to or derivative works of the  \n*Software* that are made available under this License.  \n\n\n## 2.  Purpose  \nThis license is intended to define the rights granted to the *Licensee* by  \nLicensors under the *Software*.  \n\n## 3.  Rights granted  \n\nFor the above reasons Licensors have decided to distribute the *Software*.  \nLicensors grant non-exclusive rights to use the *Software* for research purposes  \nto research users (both academic and industrial), free of charge, without right  \nto sublicense.. The *Software* may be used \"non-commercially\", i.e., for research  \nand/or evaluation purposes only.  \n\nSubject to the terms and conditions of this License, you are granted a  \nnon-exclusive, royalty-free, license to reproduce, prepare derivative works of,  \npublicly display, publicly perform and distribute its *Work* and any resulting  \nderivative works in any form.  \n\n## 4.  Limitations  \n\n**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do  \nso under this License, (b) you include a complete copy of this License with  \nyour distribution, and (c) you retain without modification any copyright,  \npatent, trademark, or attribution notices that are present in the *Work*.  \n\n**4.2 Derivative Works.** You may specify that additional or different terms apply  \nto the use, reproduction, and distribution of your derivative works of the *Work*  \n(\"Your Terms\") only if (a) Your Terms provide that the use limitation in  \nSection 2 applies to your derivative works, and (b) you identify the specific  \nderivative works that are subject to Your Terms. Notwithstanding Your Terms,  \nthis License (including the redistribution requirements in Section 3.1) will  \ncontinue to apply to the *Work* itself.  \n\n**4.3** Any other use without of prior consent of Licensors is prohibited. Research  \nusers explicitly acknowledge having received from Licensors all information  \nallowing to appreciate the adequacy between of the *Software* and their needs and  \nto undertake all necessary precautions for its execution and use.  \n\n**4.4** The *Software* is provided both as a compiled library file and as source  \ncode. In case of using the *Software* for a publication or other results obtained  \nthrough the use of the *Software*, users are strongly encouraged to cite the  \ncorresponding publications as explained in the documentation of the *Software*.  \n\n## 5.  Disclaimer  \n\nTHE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES  \nWITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY  \nUNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL  \nCONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTIES  \nOF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL  \nUSE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR  \nADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE  \nAUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  \nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  \nGOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)  \nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  \nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR  \nIN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.  \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/README.md",
    "content": "# SIBR Core\n\n**SIBR** is a System for Image-Based Rendering.  \nIt is built around the *sibr-core* in this repo and several *Projects* implementing published research papers.  \nFor more complete documentation, see here: [SIBR Documentation](https://sibr.gitlabpages.inria.fr) \n  \nThis **SIBR core** repository provides :\n- a basic Image-Based Renderer\n- a per-pixel implementation of Unstructured Lumigraph (ULR)\n- several dataset tools & pipelines do process input images\n  \nDetails on how to run in the documentation and in the section below.  \nIf you use this code in a publication, please cite the system as follows:\n\n```\n@misc{sibr2020,\n   author       = \"Bonopera, Sebastien and Esnault, Jerome and Prakash, Siddhant and Rodriguez, Simon and Thonat, Theo and Benadel, Mehdi and Chaurasia, Gaurav and Philip, Julien and Drettakis, George\",\n   title        = \"sibr: A System for Image Based Rendering\",\n   year         = \"2020\",\n   url          = \"https://gitlab.inria.fr/sibr/sibr_core\"\n}\n```\n\n## Setup\n\n**Note**: The current release is for *Windows 10* only. We are planning a Linux release soon.\n\n#### Binary distribution\n\nThe easiest way to use SIBR is to download the binary distribution. All steps described below, including all preprocessing for your datasets will work using this code.\n\nDownload the distribution from the page: https://sibr.gitlabpages.inria.fr/download.html (Core, 57Mb); unzip the file and rename the directory \"install\".\n\n#### Install requirements\n\n- [**Visual Studio 2019**](https://visualstudio.microsoft.com/fr/downloads/)\n- [**Cmake 3.16+**](https://cmake.org/download)\n- [**7zip**](https://www.7-zip.org)\n- [**Python 3.8+**](https://www.python.org/downloads/) for shaders installation scripts and dataset preprocess scripts\n- [**Doxygen 1.8.17+**](https://www.doxygen.nl/download.html#srcbin) for documentation\n- [**CUDA 10.1+**](https://developer.nvidia.com/cuda-downloads) and [**CUDnn**](https://developer.nvidia.com/cudnn) if projects requires it\n\nMake sure Python, CUDA and Doxygen are in the PATH\n\nIf you have Chocolatey, you can grab most of these with this command:\n\n```sh\nchoco install cmake 7zip python3 doxygen.install cuda\n\n## Visual Studio is available on Chocolatey,\n## though we do advise to set it from Visual Studio Installer and to choose your licensing accordingly\nchoco install visualstudio2019community\n```\n\n#### Generation of the solution\n\n- Checkout this repository's master branch:\n  \n  ```sh\n  ## through HTTPS\n  git clone https://gitlab.inria.fr/sibr/sibr_core.git -b master\n  ## through SSH\n  git clone git@gitlab.inria.fr:sibr/sibr_core.git -b master\n  ```\n- Run Cmake-gui once, select the repo root as a source directory, `build/` as the build directory. Configure, select the Visual Studio C++ Win64 compiler\n- Select the projects you want to generate among the BUILD elements in the list (you can group Cmake flags by categories to access those faster)\n- Generate\n\n#### Compilation\n\n- Open the generated Visual Studio solution (`build/sibr_projects.sln`)\n- Build the `ALL_BUILD` target, and then the `INSTALL` target\n- The compiled executables will be put in `install/bin`\n- TODO: are the DLLs properly installed?\n\n#### Compilation of the documentation\n\n- Open the generated Visual Studio solution (`build/sibr_projects.sln`)\n- Build the `DOCUMENTATION` target\n- Run `install/docs/index.html` in a browser\n\n\n## Scripts\n\nSome scripts will require you to install `PIL`, and `convert` from `ImageMagick`.\n\n```sh\n## To install pillow\npython -m pip install pillow\n\n## If you have Chocolatey, you can install imagemagick from this command\nchoco install imagemagick\n```\n\n## Troubleshooting\n\n#### Bugs and Issues\n\nWe will track bugs and issues through the Issues interface on gitlab. Inria gitlab does not allow creation of external accounts, so if you have an issue/bug please email <code>sibr@inria.fr</code> and we will either create a guest account or create the issue on our side.\n\n#### Cmake complaining about the version\n\nif you are the first to use a very recent Cmake version, you will have to update `CHECKED_VERSION` in the root `CmakeLists.txt`.\n\n#### Weird OpenCV error\n\nyou probably selected the 32-bits compiler in Cmake-gui.\n\n#### `Cmd.exe failed with error 009` or similar\n\nmake sure Python is installed and in the path. \n\n#### `BUILD_ALL` or `INSTALL` fail because of a project you don't really need\n\nbuild and install each project separately by selecting the proper targets.\n\n#### Error in CUDA headers under Visual Studio 2019\n\nmake sure CUDA >= 10.1 (first version to support VS2019) is installed.\n\n## To run an example\n\nFor more details, please see the documentation: http://sibr.gitlabpages.inria.fr\n\nDownload a dataset from: https://repo-sam.inria.fr/fungraph/sibr-datasets/\n\ne.g., the *sibr-museum-front* dataset in the *DATASETS_PATH* directory.\n\n```\nwget https://repo-sam.inria.fr/fungraph/sibr-datasets/museum_front27_ulr.zip\n```\n\nOnce you have built the system or downloaded the binaries (see above), go to *install/bin* and you can run:\n```\n\tsibr_ulrv2_app.exe --path DATASETS_PATH/sibr-museum-front\n```\n\nYou will have an interactive viewer and you can navigate freely in the captured scene. \nOur default interactive viewer has a main view running the algorithm and a top view to visualize the position of the calibrated cameras. By default you are in WASD mode, and can toggle to trackball using the \"y\" key. Please see the page [Interface](https://sibr.gitlabpages.inria.fr/docs/nightly/howto_sibr_useful_objects.html) for more details on the interface.\n\nPlease see the documentation on how to create a dataset from your own scene, and the various other IBR algorithms available.\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/MSVCsetUserCommand.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__MSVCsetUserCommand_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__MSVCsetUserCommand_cmake_INCLUDED__ ON)\nendif()\n\n## Allow to configure the Debugger settings of visual studio\n## Note: Using this command under linux doesn't affect anything\n## On run Debug Windows local : visual will try to load a specific COMMAND with ARGS in the provided WORKING_DIR\n##\n## usage:\n## MSVCsetUserCommand(\t<targetName>\n##    [COMMAND \t\t\t<myCustomAppToLaunch> | [ PATH <myCustomDirWhereIsDefaultTargetFileNameToLaunch> [FILE <myCustomExecFileToLaunch>] ] ]\n##    ARGS \t\t\t\t<associatedArguments>\n##    WORKING_DIR\t\t<whereStartTheProgram>\n## )\n##\n## Warning 1 : All arugments () must be passed under quotes\n## Warning 2 : WORKING_DIR path arg have to finish with remain slah '/'\n## Warning 3 : use COMMAND for external app OR PATH (optionaly with FILE) option(s) to set your built/installed/moved target\n##\n## Example 1:\n## include(MSVCsetUserCommand)\n## MSVCsetUserCommand(\tUnityRenderingPlugin\n## \t  COMMAND \t\t\t\"C:/Program Files (x86)/Unity/Editor/Unity.exe\"\n## \t  ARGS\t\t\t\t\"-force-opengl -projectPath \\\"${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject\\\"\"\n## \t  WORKING_DIR\t\t\"${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject\"\n## \t  VERBOSE\n## )\n##\n## Example 2:\n## include(MSVCsetUserCommand)\n## MSVCsetUserCommand(\tibrApp\n## \t  PATH \t\t\t\t\"C:/Program Files (x86)/workspace/IBR/install\"\n##\t  FILE\t\t\t\t\"ibrApp${CMAKE_EXECUTABLE_SUFFIX}\" ## this option line is optional since the target name didn't change between build and install step\n## \t  ARGS\t\t\t\t\"-path \\\"${CMAKE_HOME_DIRECTORY}/dataset\\\"\"\n## \t  WORKING_DIR\t\t\"${CMAKE_HOME_DIRECTORY}\"\n## \t  VERBOSE\n## )\n##\nfunction(MSVCsetUserCommand targetName)\n    cmake_parse_arguments(MSVCsuc \"VERBOSE\" \"PATH;FILE;COMMAND;ARGS;WORKING_DIR\" \"\" ${ARGN} )\n\n\t## If no arguments are given, do not create an unecessary .vcxproj.user file\n\tset(MSVCsuc_DEFAULT OFF)\n\n\tif(MSVCsuc_PATH AND MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(MSVCsuc_FILE AND MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(NOT MSVCsuc_COMMAND)\n\t\tif(MSVCsuc_PATH AND MSVCsuc_FILE)\n\t\t\tset(MSVCsuc_COMMAND \"${MSVCsuc_PATH}\\\\${MSVCsuc_FILE}\")\n\t\telseif(MSVCsuc_PATH)\n\t\t\tset(MSVCsuc_COMMAND \"${MSVCsuc_PATH}\\\\$(TargetFileName)\")\n\t\telse()\n\t\t\tset(MSVCsuc_COMMAND \"$(TargetPath)\") ## => $(TargetDir)\\$(TargetName)$(TargetExt)\n\t\tendif()\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n        # NOTE: there was a typo here. there is an else if written after else statement\n        # changing the order of the else if statement\n\tif(MSVCsuc_WORKING_DIR)\n\t\tfile(TO_NATIVE_PATH ${MSVCsuc_WORKING_DIR} MSVCsuc_WORKING_DIR)\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\telse()\n\t\tset(MSVCsuc_WORKING_DIR \"$(ProjectDir)\")\n\tendif()\n\n\tif(NOT MSVCsuc_ARGS)\n\t\tset(MSVCsuc_ARGS \"\")\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(MSVC10 OR (MSVC AND MSVC_VERSION GREATER 1600)) # 2010 or newer\n\n\t\tif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\t\t\tset(PLATEFORM_BITS x64)\n\t\telse()\n\t\t\tset(PLATEFORM_BITS Win32)\n\t\tendif()\n\n\t\tif(NOT MSVCsuc_DEFAULT AND PLATEFORM_BITS)\n\n\t\t\tfile(WRITE \"${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user\"\n\t\t\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\n<Project ToolsVersion=\\\"4.0\\\" xmlns=\\\"http://schemas.microsoft.com/developer/msbuild/2003\\\">\n  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Release|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n\t<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n    <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='MinSizeRel|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n    <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='RelWithDebInfo|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n</Project>\"\n\t\t\t)\n\t\t\tif(MSVCsuc_VERBOSE)\n\t\t\t\tmessage(STATUS \"[MSVCsetUserCommand] Write ${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user file\")\n\t\t\t\tmessage(STATUS \"   to execute ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS}\")\n\t\t\t\tmessage(STATUS \"   from derectory ${MSVCsuc_WORKING_DIR}\")\n\t\t\t\tmessage(STATUS \"   on visual studio run debugger button\")\n\t\t\tendif()\n\n\t\telse()\n\t\t\tmessage(WARNING \"PLATEFORM_BITS is undefined...\")\n\t\tendif()\n\n\telse()\n\t\tif(MSVCsuc_VERBOSE)\n\t\t\tmessage(WARNING \"MSVCsetUserCommand is disable because too old MSVC is used (need MSVC10 2010 or newer)\")\n\t\tendif()\n\tendif()\n\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Modules/FindASSIMP.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Try to find the ASSIMP library\n## Once done this will define\n##\n##  \tASSIMP_FOUND \t\t- system has ASSIMP\n##  \tASSIMP_INCLUDE_DIR \t- The ASSIMP include directory\n##  \tASSIMP_LIBRARIES \t- The libraries needed to use ASSIMP\n##  \tASSIMP_CMD \t\t\t- the full path of ASSIMP executable\n##\tASSIMP_DYNAMIC_LIB\t- the Assimp dynamic lib (available only on windows as .dll file for the moment)\n##\n## Edited for using a bugfixed version of Assimp\n\nif(NOT ASSIMP_DIR)\n    set(ASSIMP_DIR \"$ENV{ASSIMP_DIR}\" CACHE PATH \"ASSIMP root directory\")\n\tmessage(\"NO ASSIMP DIR \" ASSIMP_DIR )\n\tfile(TO_CMAKE_PATH \"/data/graphdeco/share/usr/local\" ASSIMP_DIR)\n        set(ASSIMP_DIR \"/data/graphdeco/share/usr/local\" )\n\tmessage(\"SETTING ASSIMP DIR \" ASSIMP_DIR )\nendif()\nif(ASSIMP_DIR)\n\tfile(TO_CMAKE_PATH ${ASSIMP_DIR} ASSIMP_DIR)\n\tfile(TO_CMAKE_PATH \"/data/graphdeco/share/usr/local\" ASSIMP_DIR)\n\tmessage(\"ASSIMP DIR \" ASSIMP_DIR )\nendif()\n\n\n## set the LIB POSTFIX to find in a right directory according to what kind of compiler we use (32/64bits)\nif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\tset(ASSIMP_SEARCH_LIB \"lib64\")\n\tset(ASSIMP_SEARCH_BIN \"bin64\")\n\tset(ASSIMP_SEARCH_LIB_PATHSUFFIXE \"x64\")\nelse()\n\tset(ASSIMP_SEARCH_LIB \"lib32\")\n\tset(ASSIMP_SEARCH_BIN \"bin32\")\n\tset(ASSIMP_SEARCH_LIB_PATHSUFFIXE \"x86\")\nendif()\n\nset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\n\nFIND_PATH(ASSIMP_INCLUDE_DIR\n\tNAMES assimp/config.h\n\tPATHS\n\t\t${ASSIMP_DIR}\n\t\t## linux\n\t\t/usr\n\t\t/usr/include\n\t\t/usr/local\n\t\t/opt/local\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/Assimp\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp\"\n\t\t\"$ENV{ProgramW6432}/Assimp\"\n\tPATH_SUFFIXES include\n)\n\n\nFIND_LIBRARY(ASSIMP_LIBRARY\n\tNAMES assimp-vc140-mt assimp\n\tPATHS\n\t\t${ASSIMP_DIR}/${ASSIMP_SEARCH_LIB}\n\t\t${ASSIMP_DIR}/lib\n\t\t${ASSIMP_DIR}/lib64\n\t\t## linux\n\t\t/usr/${ASSIMP_SEARCH_LIB}\n\t\t/usr/local/${ASSIMP_SEARCH_LIB}\n\t\t/opt/local/${ASSIMP_SEARCH_LIB}\n\t\t/usr/lib\n\t\t/usr/lib64\n\t\t/usr/local/lib\n\t\t/opt/local/lib\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{ProgramW6432}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{PROGRAMFILES}/Assimp/lib\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp/lib\"\n\t\t\"$ENV{ProgramW6432}/Assimp/lib\"\n\tPATH_SUFFIXES ${ASSIMP_SEARCH_LIB_PATHSUFFIXE}\n)\nset(ASSIMP_LIBRARIES ${ASSIMP_LIBRARY})\n\n\nif(ASSIMP_LIBRARY)\n\tget_filename_component(ASSIMP_LIBRARY_DIR ${ASSIMP_LIBRARY} PATH)\n\tif(WIN32)\n\t\tfile(GLOB ASSIMP_DYNAMIC_LIB \"${ASSIMP_LIBRARY_DIR}/assimp*.dll\")\n\t\tif(NOT ASSIMP_DYNAMIC_LIB)\n\t\t\tmessage(\"ASSIMP_DYNAMIC_LIB is missing... at ${ASSIMP_LIBRARY_DIR}\")\n\t\tendif()\n\tendif()\n\tset(ASSIMP_DYNAMIC_LIB ${ASSIMP_DYNAMIC_LIB} CACHE PATH \"Windows dll location\")\nendif()\n\nMARK_AS_ADVANCED(ASSIMP_DYNAMIC_LIB ASSIMP_INCLUDE_DIR ASSIMP_LIBRARIES)\n\nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(ASSIMP\n\tREQUIRED_VARS ASSIMP_INCLUDE_DIR ASSIMP_LIBRARIES\n\tFAIL_MESSAGE \"ASSIMP wasn't found correctly. Set ASSIMP_DIR to the root SDK installation directory.\"\n)\n\nif(NOT ASSIMP_FOUND)\n\tset(ASSIMP_DIR \"\" CACHE STRING \"Path to ASSIMP install directory\")\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Modules/FindEGL.cmake",
    "content": "#.rst:\n# FindEGL\n# -------\n#\n# Try to find EGL.\n#\n# This will define the following variables:\n#\n# ``EGL_FOUND``\n#     True if (the requested version of) EGL is available\n# ``EGL_VERSION``\n#     The version of EGL; note that this is the API version defined in the\n#     headers, rather than the version of the implementation (eg: Mesa)\n# ``EGL_LIBRARIES``\n#     This can be passed to target_link_libraries() instead of the ``EGL::EGL``\n#     target\n# ``EGL_INCLUDE_DIRS``\n#     This should be passed to target_include_directories() if the target is not\n#     used for linking\n# ``EGL_DEFINITIONS``\n#     This should be passed to target_compile_options() if the target is not\n#     used for linking\n#\n# If ``EGL_FOUND`` is TRUE, it will also define the following imported target:\n#\n# ``EGL::EGL``\n#     The EGL library\n#\n# In general we recommend using the imported target, as it is easier to use.\n# Bear in mind, however, that if the target is in the link interface of an\n# exported library, it must be made available by the package config file.\n#\n# Since pre-1.0.0.\n\n#=============================================================================\n# Copyright 2014 Alex Merry <alex.merry@kde.org>\n# Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions\n# are met:\n#\n# 1. Redistributions of source code must retain the copyright\n#    notice, this list of conditions and the following disclaimer.\n# 2. Redistributions in binary form must reproduce the copyright\n#    notice, this list of conditions and the following disclaimer in the\n#    documentation and/or other materials provided with the distribution.\n# 3. The name of the author may not be used to endorse or promote products\n#    derived from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n#=============================================================================\n\ninclude(CheckCXXSourceCompiles)\ninclude(CMakePushCheckState)\n\n# Use pkg-config to get the directories and then use these values\n# in the FIND_PATH() and FIND_LIBRARY() calls\nfind_package(PkgConfig)\npkg_check_modules(PKG_EGL QUIET egl)\n\nset(EGL_DEFINITIONS ${PKG_EGL_CFLAGS_OTHER})\n\nfind_path(EGL_INCLUDE_DIR\n    NAMES\n        EGL/egl.h\n    HINTS\n        ${PKG_EGL_INCLUDE_DIRS}\n)\nfind_library(EGL_LIBRARY\n    NAMES\n        EGL\n    HINTS\n        ${PKG_EGL_LIBRARY_DIRS}\n)\n\n# NB: We do *not* use the version information from pkg-config, as that\n#     is the implementation version (eg: the Mesa version)\nif(EGL_INCLUDE_DIR)\n    # egl.h has defines of the form EGL_VERSION_x_y for each supported\n    # version; so the header for EGL 1.1 will define EGL_VERSION_1_0 and\n    # EGL_VERSION_1_1.  Finding the highest supported version involves\n    # finding all these defines and selecting the highest numbered.\n    file(READ \"${EGL_INCLUDE_DIR}/EGL/egl.h\" _EGL_header_contents)\n    string(REGEX MATCHALL\n        \"[ \\t]EGL_VERSION_[0-9_]+\"\n        _EGL_version_lines\n        \"${_EGL_header_contents}\"\n    )\n    unset(_EGL_header_contents)\n    foreach(_EGL_version_line ${_EGL_version_lines})\n        string(REGEX REPLACE\n            \"[ \\t]EGL_VERSION_([0-9_]+)\"\n            \"\\\\1\"\n            _version_candidate\n            \"${_EGL_version_line}\"\n        )\n        string(REPLACE \"_\" \".\" _version_candidate \"${_version_candidate}\")\n        if(NOT DEFINED EGL_VERSION OR EGL_VERSION VERSION_LESS _version_candidate)\n            set(EGL_VERSION \"${_version_candidate}\")\n        endif()\n    endforeach()\n    unset(_EGL_version_lines)\nendif()\n\ncmake_push_check_state(RESET)\nlist(APPEND CMAKE_REQUIRED_LIBRARIES \"${EGL_LIBRARY}\")\nlist(APPEND CMAKE_REQUIRED_INCLUDES \"${EGL_INCLUDE_DIR}\")\n\ncheck_cxx_source_compiles(\"\n#include <EGL/egl.h>\n\nint main(int argc, char *argv[]) {\n    EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0;\n    eglDestroyContext(dpy, ctx);\n}\" HAVE_EGL)\n\ncmake_pop_check_state()\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(EGL\n    FOUND_VAR\n        EGL_FOUND\n    REQUIRED_VARS\n        EGL_LIBRARY\n        EGL_INCLUDE_DIR\n        HAVE_EGL\n    VERSION_VAR\n        EGL_VERSION\n)\n\nif(EGL_FOUND AND NOT TARGET EGL::EGL)\n    add_library(EGL::EGL UNKNOWN IMPORTED)\n    set_target_properties(EGL::EGL PROPERTIES\n        IMPORTED_LOCATION \"${EGL_LIBRARY}\"\n        INTERFACE_COMPILE_OPTIONS \"${EGL_DEFINITIONS}\"\n        INTERFACE_INCLUDE_DIRECTORIES \"${EGL_INCLUDE_DIR}\"\n    )\nendif()\n\nmark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR HAVE_EGL)\n\n# compatibility variables\nset(EGL_LIBRARIES ${EGL_LIBRARY})\nset(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR})\nset(EGL_VERSION_STRING ${EGL_VERSION})\n\ninclude(FeatureSummary)\nset_package_properties(EGL PROPERTIES\n    URL \"https://www.khronos.org/egl/\"\n    DESCRIPTION \"A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG.\"\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Modules/FindEmbree.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n## Important Note:\n## This is not an official Find*cmake. It has been written for searching through\n## a custom path (EMBREE_DIR) before checking elsewhere.\n##\n## FindEMBREE.cmake\n## Find EMBREE's includes and library\n##\n## This module defines :\n## \t[in] \tEMBREE_DIR, The base directory to search for EMBREE (as cmake var or env var)\n## \t[out] \tEMBREE_INCLUDE_DIR where to find EMBREE.h\n## \t[out] \tEMBREE_LIBRARIES, EMBREE_LIBRARY, libraries to link against to use EMBREE\n## \t[out] \tEMBREE_FOUND, If false, do not try to use EMBREE.\n##\n\n\nif(NOT EMBREE_DIR)\n    set(EMBREE_DIR \"$ENV{EMBREE_DIR}\" CACHE PATH \"EMBREE root directory\")\nendif()\nif(EMBREE_DIR)\n\tfile(TO_CMAKE_PATH ${EMBREE_DIR} EMBREE_DIR)\nendif()\n\n\n## set the LIB POSTFIX to find in a right directory according to what kind of compiler we use (32/64bits)\nif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\tset(EMBREE_SEARCH_LIB \"lib64\")\n\tset(EMBREE_SEARCH_BIN \"bin64\")\n\tset(EMBREE_SEARCH_LIB_PATHSUFFIXE \"x64\")\nelse()\n\tset(EMBREE_SEARCH_LIB \"lib32\")\n\tset(EMBREE_SEARCH_BIN \"bin32\")\n\tset(EMBREE_SEARCH_LIB_PATHSUFFIXE \"x86\")\nendif()\n\nset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\nFIND_PATH(EMBREE_INCLUDE_DIR\n\tNAMES embree3/rtcore_geometry.h\n\tPATHS\n\t\t${EMBREE_DIR}\n\t\t## linux\n\t\t/usr\n\t\t/usr/local\n\t\t/opt/local\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/EMBREE\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE\"\n\t\t\"$ENV{ProgramW6432}/EMBREE\"\n\tPATH_SUFFIXES include\n)\n\nFIND_LIBRARY(EMBREE_LIBRARY\n\tNAMES embree3\n\tPATHS\n\t\t${EMBREE_DIR}/${EMBREE_SEARCH_LIB}\n\t\t${EMBREE_DIR}/lib\n\t\t## linux\n\t\t/usr/${EMBREE_SEARCH_LIB}\n\t\t/usr/local/${EMBREE_SEARCH_LIB}\n\t\t/opt/local/${EMBREE_SEARCH_LIB}\n\t\t/usr/lib\n\t\t/usr/local/lib\n\t\t/opt/local/lib\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{ProgramW6432}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{PROGRAMFILES}/EMBREE/lib\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE/lib\"\n\t\t\"$ENV{ProgramW6432}/EMBREE/lib\"\n\tPATH_SUFFIXES ${EMBREE_SEARCH_LIB_PATHSUFFIXE}\n)\nset(EMBREE_LIBRARIES ${EMBREE_LIBRARY})\n\nMARK_AS_ADVANCED(EMBREE_INCLUDE_DIR EMBREE_LIBRARIES)\n\nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(EMBREE\n\tREQUIRED_VARS EMBREE_INCLUDE_DIR EMBREE_LIBRARIES\n\tFAIL_MESSAGE \"EMBREE wasn't found correctly. Set EMBREE_DIR to the root SDK installation directory.\"\n)\n\nif(NOT EMBREE_FOUND)\n\tset(EMBREE_DIR \"\" CACHE STRING \"Path to EMBREE install directory\")\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Modules/FindFFMPEG.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Try to find the FFMPEG library\n## Once done this will define\n##\n##  \tFFMPEG_FOUND \t\t- system has FFmpeg\n##  \tFFMPEG_INCLUDE_DIR \t- The FFmpeg include directory\n##  \tFFMPEG_LIBRARIES \t- The libraries needed to use FFmpeg\n##\t\tFFMPEG_DYNAMIC_LIBS\t- DLLs for windows\n\n\nif(NOT FFMPEG_DIR)\n    set(FFMPEG_DIR \"$ENV{FFMPEG_DIR}\" CACHE PATH \"FFMPEG_DIR root directory\")\nendif()\n\nif(FFMPEG_DIR)\n\tfile(TO_CMAKE_PATH ${FFMPEG_DIR} FFMPEG_DIR)\nendif()\n\nMACRO(FFMPEG_FIND varname shortname headername)\n\t\n\t# Path to include dirs\n\tFIND_PATH(FFMPEG_${varname}_INCLUDE_DIRS \n\t\tNAMES \"lib${shortname}/${headername}\" \n\t\tPATHS\n\t\t\t\"${FFMPEG_DIR}/include\" # modify this to adapt according to OS/compiler\t\n\t\t\t\"/usr/include\"\n\t\t\t\"/usr/include/ffmpeg\"\t\t\n\t)\n\t\t\n\t#Add libraries\n\tIF(${FFMPEG_${varname}_INCLUDE_DIRS} STREQUAL \"FFMPEG_${varname}_INCLUDE_DIR-NOTFOUND\")\n\t\tMESSAGE(STATUS \"Can't find includes for ${shortname}...\")\n\tELSE()\n\t\tFIND_LIBRARY(FFMPEG_${varname}_LIBRARIES\n\t\t\tNAMES ${shortname}\n\t\t\tPATHS\n\t\t\t\t${FFMPEG_DIR}/lib\n\t\t\t\t\"/usr/lib\"\n\t\t\t\t\"/usr/lib64\"\n\t\t\t\t\"/usr/local/lib\"\n\t\t\t\t\"/usr/local/lib64\"\n\t\t)\n\n\t\t# set libraries and other variables\n\t\tSET(FFMPEG_${varname}_FOUND 1)\n\t\tSET(FFMPEG_${varname}_INCLUDE_DIRS ${FFMPEG_${varname}_INCLUDE_DIR})\n\t\tSET(FFMPEG_${varname}_LIBS ${FFMPEG_${varname}_LIBRARIES})\n\tENDIF()\n ENDMACRO(FFMPEG_FIND)\n\n#Calls to ffmpeg_find to get  librarires ------------------------------\nFFMPEG_FIND(LIBAVFORMAT avformat avformat.h)\nFFMPEG_FIND(LIBAVDEVICE avdevice avdevice.h)\nFFMPEG_FIND(LIBAVCODEC  avcodec  avcodec.h)\nFFMPEG_FIND(LIBAVUTIL   avutil   avutil.h)\nFFMPEG_FIND(LIBSWSCALE  swscale  swscale.h)\n \n# check if libs are found and set FFMPEG related variables\n#SET(FFMPEG_FOUND \"NO\")\nIF(FFMPEG_LIBAVFORMAT_FOUND \n\tAND FFMPEG_LIBAVDEVICE_FOUND \n\tAND FFMPEG_LIBAVCODEC_FOUND \n\tAND FFMPEG_LIBAVUTIL_FOUND \n\tAND FFMPEG_LIBSWSCALE_FOUND)\n \n\t# All ffmpeg libs are here\n    SET(FFMPEG_FOUND \"YES\")\n\tSET(FFMPEG_INCLUDE_DIR ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS})\n\tSET(FFMPEG_LIBRARY_DIRS ${FFMPEG_LIBAVFORMAT_LIBRARY_DIRS})\n\tSET(FFMPEG_LIBRARIES\n        ${FFMPEG_LIBAVFORMAT_LIBS}\n        ${FFMPEG_LIBAVDEVICE_LIBS}\n        ${FFMPEG_LIBAVCODEC_LIBS}\n        ${FFMPEG_LIBAVUTIL_LIBS}\n\t\t${FFMPEG_LIBSWSCALE_LIBS}\t)\n\t\t\n\t# add dynamic libraries\n\tif(WIN32)\n\t\tfile(GLOB FFMPEG_DYNAMIC_LIBS \"${FFMPEG_DIR}/bin/*.dll\")\n\t\tif(NOT FFMPEG_DYNAMIC_LIBS)\n\t\t\tmessage(\"FFMPEG_DYNAMIC_LIBS is missing...\")\n\tendif()\n\tset(FFMPEG_DYNAMIC_LIBS ${FFMPEG_DYNAMIC_LIBS} CACHE PATH \"Windows dll location\")\nendif()\n\t\n\tmark_as_advanced(FFMPEG_INCLUDE_DIR FFMPEG_LIBRARY_DIRS FFMPEG_LIBRARIES FFMPEG_DYNAMIC_LIBS)\nELSE ()\n    MESSAGE(STATUS \"Could not find FFMPEG\")\nENDIF()\n \n \nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(FFMPEG\n\tREQUIRED_VARS FFMPEG_INCLUDE_DIR FFMPEG_LIBRARIES\n\tFAIL_MESSAGE \"FFmpeg wasn't found correctly. Set FFMPEG_DIR to the root SDK installation directory.\"\n)\n\nif(NOT FFMPEG_FOUND)\n\tset(FFMPEG_DIR \"\" CACHE STRING \"Path to FFmpeg install directory\")\nendif()\n  \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Modules/FindGLFW.cmake",
    "content": "##=============================================================================\n##\n##  Copyright (c) Kitware, Inc.\n##  All rights reserved.\n##  See LICENSE.txt for details.\n##\n##  This software is distributed WITHOUT ANY WARRANTY; without even\n##  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n##  PURPOSE.  See the above copyright notice for more information.\n##\n##  Copyright 2016 Sandia Corporation.\n##  Copyright 2016 UT-Battelle, LLC.\n##  Copyright 2016 Los Alamos National Security.\n##\n##  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,\n##  the U.S. Government retains certain rights in this software.\n##  Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National\n##  Laboratory (LANL), the U.S. Government retains certain rights in\n##  this software.\n##\n##=============================================================================\n# Try to find EGL library and include dir.\n# Once done this will define\n#\n# GLFW_FOUND\n# GLFW_INCLUDE_DIR\n# GLFW_LIBRARY\n#\n\ninclude(FindPackageHandleStandardArgs)\n\nif (WIN32)\n    find_path( GLFW_INCLUDE_DIR\n        NAMES\n            GLFW/glfw3.h\n        PATHS\n            ${PROJECT_SOURCE_DIR}/shared_external/glfw/include\n            ${PROJECT_SOURCE_DIR}/../shared_external/glfw/include\n            ${GLFW_LOCATION}/include\n            $ENV{GLFW_LOCATION}/include\n            $ENV{PROGRAMFILES}/GLFW/include\n            ${GLFW_LOCATION}\n            $ENV{GLFW_LOCATION}\n            DOC \"The directory where GLFW/glfw3.h resides\" )\n    if(ARCH STREQUAL \"x86\")\n      find_library( GLFW_LIBRARY\n          NAMES\n              glfw3\n          PATHS\n              ${GLFW_LOCATION}/lib\n              $ENV{GLFW_LOCATION}/lib\n              $ENV{PROGRAMFILES}/GLFW/lib\n              DOC \"The GLFW library\")\n    else()\n      find_library( GLFW_LIBRARY\n          NAMES\n              glfw3\n          PATHS\n              ${GLFW_LOCATION}/lib\n              $ENV{GLFW_LOCATION}/lib\n              $ENV{PROGRAMFILES}/GLFW/lib\n              DOC \"The GLFW library\")\n    endif()\nendif ()\n\nif (${CMAKE_HOST_UNIX})\n    message(\"GFLW LOCATION \" $ENV{GLFW_LOCATION} )\n    find_path( GLFW_INCLUDE_DIR\n        NAMES\n            GLFW/glfw3.h\n        PATHS\n#            ${GLFW_LOCATION}/include\n            $ENV{GLFW_LOCATION}/include\n#            /usr/include\n#            /usr/local/include\n#            /sw/include\n#            /opt/local/include\n#            NO_DEFAULT_PATH\n            DOC \"The directory where GLFW/glfw3.h resides\"\n    )\n    find_library( GLFW_LIBRARY\n        NAMES\n            glfw3 glfw\n        PATHS\n#            ${GLFW_LOCATION}/lib\n            $ENV{GLFW_LOCATION}/lib\n            $ENV{GLFW_LOCATION}/lib64\n#            /usr/lib64\n#            /usr/lib\n#            /usr/local/lib64\n#            /usr/local/lib\n#            /sw/lib\n#            /opt/local/lib\n#            /usr/lib/x86_64-linux-gnu\n#            NO_DEFAULT_PATH\n            DOC \"The GLFW library\")\n\n    set( GLFW_INCLUDE_DIR $ENV{GLFW_LOCATION}/include )\n    set( GLFW_LIBRARY $ENV{GLFW_LOCATION}/lib64/libglfw3.a )\n    message(\"*************==========> FindGLFW .cmake \" ${GLFW_INCLUDE_DIR} \" LIB \" ${GLFW_LIBRARY} )\nendif ()\n\nfind_package_handle_standard_args(GLFW DEFAULT_MSG\n    GLFW_INCLUDE_DIR\n    GLFW_LIBRARY\n)\n\nmark_as_advanced( GLFW_FOUND )\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/Win3rdParty.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## This file should be include and use only on WIN32 OS and once\n## It allow to auto check/download and use a preconfigured 3rdParty binaries for cmake usage\n## It use the downloadAndExtractZipFile cmake module to work.\n##\nif(__Win3rdParty_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__Win3rdParty_cmake_INCLUDED__ ON)\nendif()\n\n\n##\n## To be sure to reset an empty cached variable but keep any other kind of variables\n##\n## Usage:\n## check_cached_var(<var> <resetedCachedValue> <cacheType> <cacheDoc> [FORCE])\n##\n## <var> is the cached cmake variable you need to reset\n## <resetedCachedValue> is the new default value of the reseted cached cmake variable\n## <cacheType> is the kind of GUI cache input can be : FILEPATH; PATH; STRING or BOOL\n## <cacheDoc> is the associated GUI cache input documentation display in the GUI\n## FORCE option could be use to reset a cached variable even if it is not empty.\n##\nmacro(check_cached_var var resetedCachedValue cacheType cacheDoc)\n    # message(STATUS \"inside check_cached_var macro. argn=${ARGN}\")\n    cmake_parse_arguments(ccv \"FORCE\" \"\" \"\" ${ARGN})\n\n    if(ccv_FORCE)\n        set(FORCE FORCE)\n    else()\n        set(FORCE )\n    endif()\n\n    if(NOT ${var} OR ccv_FORCE)\n        unset(${var} CACHE)\n        # message(STATUS \"setting new cache value. var ${var} = ${resetedCachedValue}\")\n        set(${var}\t\"${resetedCachedValue}\" CACHE ${cacheType} \"${cacheDoc}\" ${FORCE})\n    endif()\nendmacro()\n\n\n##\n## Win3rdParty function allow to specify a directory which contain all necessary windows dependenties.\n## By uploading 3rdParty directory (which contain dependencies, *.lib, *.dll... for a specific version of compiler) onto Gforge file tab,\n## you get back an URL of download you can give to this function with a directory name. So you can provide multiple 3rdParty version of same dependencies (MSVC11, MSVC12...).\n## By providing a prefix to this function, you allow to use different kind of 3rdParty which can be handled by CMAKE OPTIONS depending on what your framework need for example.\n##\n## Usage 1:\n##    Win3rdParty(<prefix> MSVC<XX> <DirName> <URL>\n##\t\t\t\t\t[MSVC<XX> <DirName> <URL>] [...]\n##\t\t\t\t\t[VCID] [DEFAULT_USE] [VERBOSE] )\n##\n## * <prefix> allow to identify which 3rdParty you process (prefix name)\n## * MSVC<XX> flag could be MSVC11 or MSVC12 (any element of the MSVC_VERSIONS_LIST) and refer to a 3rdParty compiler with :\n##   * <DirName> which will be the local pathName of the downloaded 3rdParty : relative to CMAKE_BINARY_DIR\n##   * <URL> which is the link location of the 3rdParty zip\n## * VCID flag will make available a cache variable ${prefix}_WIN3RDPARTY_VCID\n## * DEFAULT_USE flag [ON|OFF] may be used to set default value of cmake cached variable : <prefix>_WIN3RDPARTY_USE [default to ON]\n##\n## WARNING:\n## This function define CACHE variables you can use after :\n## * ${prefix}_WIN3RDPARTY_USE : allow to check/downloaded win3rdParty dir (it will force the cached variables for this dependency folder generally <prefix>_DIR>)\n## * ${prefix}_WIN3RDPARTY_DIR : where is your local win3rdParty dir (the PATH)\n## * ${prefix}_WIN3RDPARTY_VCID : [if VCID flag is used] the MSVC id (commonly used to prefix/suffix library name, see boost or CGAL)\n##\n## If you want to add a win3rdParty version, please:\n## 1- build dependencies on your local side with the compiler you want\n## 2- build your own zip with your built dependencies\n## 3- upload it (onto the forge where the project is stored) and copy the link location in order to use it for this function\n## 4- if you just introduced a new MSVC version, add it to the MSVC_VERSIONS_LIST bellow\n##\n## In a second pass, you can also use this function to set necessary cmake cached variables in order to let cmake find packages of these 3rdParty.\n##\n## Usage 2:\n##    win3rdParty(<prefix> [VERBOSE] MULTI_SET|SET\n##          CHECK_CACHED_VAR <cmakeVar> <cmakeCacheType> [LIST] <cmakeValue> [DOC <stringToolTips>]\n##        [ CHECK_CACHED_VAR <cmakeVar> <cmakeCacheType> [LIST] <cmakeValue> [DOC <stringToolTips>] ] [...]\n##\n## * MULTI_SET or SET flags are used to tell cmake that all next arguments will use repeated flags with differents entries (SET mean we will provide only one set of arguments, without repetition)\n## * CHECK_CACHED_VAR are the repeated flag which contain differents entries\n##      * <cmakeVar> is the cmake variable you want to be cached for the project\n##      * <cmakeCacheType> is the kind of cmake variable (couble be: FILEPATH; PATH; STRING or BOOL) => see check_cached_var.\n##      * LIST optional flag could be used with CHECK_CACHED_VAR when <cmakeCacheType> = STRING. It allow to handle multiple STRINGS value list.\n##      * <cmakeValue> is the value of the variable (if FILEPATH, PATH or STRING: use quotes, if BOOL : use ON/OFF)\n##      * DOC optional flag is used to have a tooltips info about this new cmake variable entry into the GUI (use quotes).\n##\n## Full example 1 :\n##    win3rdParty(COMMON MSVC11 \"win3rdParty-MSVC11\" \"https://path.to/an.archive.7z\"\n##                SET CHECK_CACHED_VAR SuiteSparse_DIR PATH \"SuiteSparse-4.2.1\" DOC \"default empty doc\"\n##    )\n##\n## WARNING:\n## For the 2nd usage (with MULTI_SET), if you planned to set some CACHED_VAR using/composed by ${prefix}_WIN3RDPARTY_* just set in this macro (usage 1),\n## then (due to the not yet existing var) you will need to call this function 2 times :\n## One for the 1st usage (downloading of the current compiler 3rdParty).\n## One for the MLUTI_SET flag which will use existsing ${prefix}_WIN3RDPARTY_* cached var.\n##\n## Full example 2 :\n##    win3rdParty(COMMON MSVC11    \"win3rdParty-MSVC11\" \"https://path.to/an.archive.7z\")\n##    win3rdParty(COMMON MULTI_SET\n##       CHECK_CACHED_VAR CGAL_INCLUDE_DIR  PATH \"CGAL-4.3/include\" DOC \"default empty doc\"\n##       CHECK_CACHED_VAR CGAL_LIBRARIES\tSTRING LIST \"debug;CGAL-4.3/lib${LIB_POSTFIX}/CGAL-${WIN3RDPARTY_COMMON_VCID}-mt-gd-4.3.lib;optimized;CGAL-4.3/lib${LIB_POSTFIX}/CGAL-${WIN3RDPARTY_COMMON_VCID}-mt-4.3.lib\"\n##\n##\n## WARNING: This function use internaly :\n## * downloadAndExtractZipFile.cmake\n## * parse_arguments_multi.cmake\n## * check_cached_var macro\n##\nfunction(win3rdParty prefix )\n\n    # ARGV: list of all arguments given to the macro/function\n    # ARGN: list of remaining arguments\n\n    if(NOT WIN32)\n        return()\n    endif()\n\n    ## set the handled version of MSVC\n    ## if you plan to add a win3rdParty dir to download with a new MSVC version: build the win3rdParty dir and add the MSCV entry here.\n    set(MSVC_VERSIONS_LIST \"MSVC17;MSVC11;MSVC12;MSVC14\")\n\n    #include(CMakeParseArguments)   # CMakeParseArguments is obsolete since cmake 3.5\n    # cmake_parse_arguments (<prefix> <options> <one_value_keywords> <multi_value_keywords> args)\n    # <options> : options (flags) pass to the macro\n    # <one_value_keywords> : options that neeed a value\n    # <multi_value_keywords> : options that neeed more than one value\n    cmake_parse_arguments(w3p \"VCID\" \"VERBOSE;TIMEOUT;DEFAULT_USE\" \"${MSVC_VERSIONS_LIST};MULTI_SET;SET\" ${ARGN})\n\n    # message(STATUS \"value of w3p_VCID = ${w3p_VCID}\")\n    # message(STATUS \"value of w3p_VERBOSE = ${w3p_VERBOSE}\")\n    # message(STATUS \"value of w3p_TIMEOUT = ${w3p_TIMEOUT}\")\n    # message(STATUS \"value of w3p_DEFAULT_USE = ${w3p_DEFAULT_USE}\")\n\n    # foreach (loop_var ${MSVC_VERSIONS_LIST})\n            # message(STATUS \"value of w3p_${loop_var} = ${w3p_${loop_var}}\")\n    # endforeach(loop_var)\n\n    # message(STATUS \"value of w3p_MULTI_SET = ${w3p_MULTI_SET}\")\n    # message(STATUS \"value of w3p_SET = ${w3p_SET}\")\n\n    # message(\"values for MSVC = ${w3p_MSVC14}\")\n\n    if(NOT w3p_TIMEOUT)\n        set(w3p_TIMEOUT 300)\n    endif()\n\n    if(NOT DEFINED w3p_DEFAULT_USE)\n        set(w3p_DEFAULT_USE ON)\n    endif()\n\t\n\n    ## 1st use (check/update|download) :\n    set(${prefix}_WIN3RDPARTY_USE ${w3p_DEFAULT_USE} CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\")\n\n\n    ## We want to test if each version of MSVC was filled by the function (see associated parameters)\n    ## As CMake is running only for one version of MSVC, if that MSVC version was filled, we get back associated parameters,\n    ## otherwise we can't use the downloadAndExtractZipFile with win3rdParty.\n    set(enableWin3rdParty OFF)\n\t\n\tforeach(MSVC_VER ${MSVC_VERSIONS_LIST})\n\t\tif(${MSVC_VER} AND w3p_${MSVC_VER} OR ${MSVC_TOOLSET_VERSION} EQUAL 143 AND ${MSVC_VER} STREQUAL \"MSVC17\") \n\t\t\tlist(LENGTH w3p_${MSVC_VER} count)\n\t\t\tif(\"${count}\" LESS \"2\")\n\t\t\t\t#message(WARNING \"You are using ${MSVC_VER} with ${prefix}_WIN3RDPARTY_USE=${${prefix}_WIN3RDPARTY_USE}, but win3rdParty function isn't filled for ${MSVC_VER}!\")\n\t\t\telse()\n\t\t\t\tlist(GET w3p_${MSVC_VER} 0 Win3rdPartyName)\n\t\t\t\tlist(GET w3p_${MSVC_VER} 1 Win3rdPartyUrl)\n\t\t\t\tif(w3p_VCID)\n\t\t\t\t\t## try to get the VcId of MSVC. See also MSVC_VERSION cmake var in the doc.\n\t\t\t\t\tstring(REGEX REPLACE \"MS([A-Za-z_0-9-]+)\" \"\\\\1\" vcId ${MSVC_VER})\n\t\t\t\t\tstring(TOLOWER ${vcId} vcId)\n\t\t\t\t\tset(${prefix}_WIN3RDPARTY_VCID \"${vcId}0\" CACHE STRING \"the MSVC id (commonly used to prefix/suffix library name, see boost or CGAL)\")\n\t\t\t\t\tmark_as_advanced(${prefix}_WIN3RDPARTY_VCID)\n\t\t\t\tendif()\n\t\t\t\tset(enableWin3rdParty ON)\n\t\t\t\tset(suffixCompilerID ${MSVC_VER})\n\t\t\t\tbreak()\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n    ## If previous step succeed to get MSVC dirname and URL of the current MSVC version, use it to auto download/update the win3rdParty dir\n    if(enableWin3rdParty AND ${prefix}_WIN3RDPARTY_USE)\n\n        if(IS_ABSOLUTE \"${Win3rdPartyName}\")\n        else()\n            set(Win3rdPartyName \"${CMAKE_BINARY_DIR}/${Win3rdPartyName}\")\n        endif()\n\n        if(NOT EXISTS \"${Win3rdPartyName}\")\n            file(MAKE_DIRECTORY ${Win3rdPartyName})\n        endif()\n\n        include(downloadAndExtractZipFile)\n        downloadAndExtractZipFile(  \"${Win3rdPartyUrl}\"                             ## URL link location\n                                    \"Win3rdParty-${prefix}-${suffixCompilerID}.7z\"  ## where download it: relative path, so default to CMAKE_BINARY_DIR\n                                    \"${Win3rdPartyName}\"                            ## where extract it : fullPath (default relative to CMAKE_BINARY_DIR)\n            CHECK_DIRTY_URL \"${Win3rdPartyName}/Win3rdPartyUrl\"                     ## last downloaded url file : fullPath (default relative to CMAKE_BINARY_DIR)\n            TIMEOUT ${w3p_TIMEOUT}\n            VERBOSE ${w3p_VERBOSE}\n        )\n        file(GLOB checkDl \"${Win3rdPartyName}/*\")\n        list(LENGTH checkDl checkDlCount)\n        if(\"${checkDlCount}\" GREATER \"1\")\n        else()\n            message(\"The downloadAndExtractZipFile didn't work...?\")\n            set(enableWin3rdParty OFF)\n        endif()\n    endif()\n\n    ## Try to auto set ${prefix}_WIN3RDPARTY_DIR or let user set it manually\n    set(${prefix}_WIN3RDPARTY_DIR \"\" CACHE PATH \"windows ${Win3rdPartyName} dir to ${prefix} dependencies of the project\")\n\n    if(NOT ${prefix}_WIN3RDPARTY_DIR AND ${prefix}_WIN3RDPARTY_USE)\n        if(EXISTS \"${Win3rdPartyName}\")\n            unset(${prefix}_WIN3RDPARTY_DIR CACHE)\n            set(${prefix}_WIN3RDPARTY_DIR \"${Win3rdPartyName}\" CACHE PATH \"dir to ${prefix} dependencies of the project\")\n        endif()\n    endif()\n\n    if(EXISTS ${${prefix}_WIN3RDPARTY_DIR})\n        message(STATUS \"Found a 3rdParty ${prefix} dir : ${${prefix}_WIN3RDPARTY_DIR}.\")\n        set(enableWin3rdParty ON)\n    elseif(${prefix}_WIN3RDPARTY_USE)\n        message(WARNING \"${prefix}_WIN3RDPARTY_USE=${${prefix}_WIN3RDPARTY_USE} but ${prefix}_WIN3RDPARTY_DIR=${${prefix}_WIN3RDPARTY_DIR}.\")\n        set(enableWin3rdParty OFF)\n    endif()\n\n    ## Final check\n    if(NOT enableWin3rdParty)\n        message(\"Disable ${prefix}_WIN3RDPARTY_USE (cmake cached var will be not set), due to a win3rdParty problem.\")\n        message(\"You still can set ${prefix}_WIN3RDPARTY_DIR to an already downloaded Win3rdParty directory location.\")\n        set(${prefix}_WIN3RDPARTY_USE OFF CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\" FORCE)\n    endif()\n\n    ## 2nd use : handle multi values args to set cached cmake variables in order to ease the next find_package call\n    if(${prefix}_WIN3RDPARTY_USE AND ${prefix}_WIN3RDPARTY_DIR)\n        if(w3p_VERBOSE)\n            message(STATUS \"Try to set cmake cached variables for ${prefix} required libraries directly from : ${${prefix}_WIN3RDPARTY_DIR}.\")\n        endif()\n\n        include(parse_arguments_multi)\n        # message (STATUS \"before defining an override of parse_arguments_multi_function\")\n        function(parse_arguments_multi_function ) ## overloaded function to handle all CHECK_CACHED_VAR values list (see: parse_arguments_multi)\n            # message(STATUS \"inside overloaded parse_arguments_multi_function defined in Win3rdParty.cmake\")\n            # message(STATUS ${ARGN})\n            ## we know the function take 3 args : var cacheType resetedCachedValue (see check_cached_var)\n            cmake_parse_arguments(pamf \"\" \"DOC\" \"LIST\" ${ARGN})\n\n            ## var and cacheType are mandatory (with the resetedCachedValue)\n            set(var         ${ARGV0})\n            set(cacheType   ${ARGV1})\n            # message(STATUS \"var=${var} and cacheType=${cacheType} list=${pamf_LIST}\")\n            if(pamf_DOC)\n                set(cacheDoc    ${pamf_DOC})\n            else()\n                set(cacheDoc    \"\")\n            endif()\n            if(pamf_LIST)\n                set(value ${pamf_LIST})\n            else()\n                # message(\"USING ARGV2 with value ${ARGV2}\")\n                set(value ${ARGV2})\n            endif()\n            # message(\"inside override function in Win3rdparty.cmake value+ ${value}\")\n            if(\"${cacheType}\" MATCHES \"PATH\" AND EXISTS \"${${prefix}_WIN3RDPARTY_DIR}/${value}\")\n                # message(\"math with path\")\n                set(resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}/${value}\") ## path relative to ${prefix}_WIN3RDPARTY_DIR\n            elseif (\"${cacheType}\" MATCHES \"PATH\" AND EXISTS \"${${prefix}_WIN3RDPARTY_DIR}\")\n                set(resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}\") ## path relative to ${prefix}_WIN3RDPARTY_DIR\n            elseif(\"${cacheType}\" MATCHES \"STRING\")\n                foreach(var IN LISTS value)\n                    if(EXISTS \"${${prefix}_WIN3RDPARTY_DIR}/${var}\")\n                        list(APPEND resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}/${var}\") ## string item of the string list is a path => make relative to ${prefix}_WIN3RDPARTY_DIR\n                    else()\n                        list(APPEND resetedCachedValue ${var}) ## string item of the string list is not an existing path => simply use the item\n                    endif()\n                endforeach()\n            else()\n                set(resetedCachedValue \"${value}\") ## could be a BOOL or a STRING\n            endif()\n\n            ## call our macro to reset cmake cache variable if empty\n            check_cached_var(${var} \"${resetedCachedValue}\" ${cacheType} \"${cacheDoc}\" FORCE)\n\n        endfunction()\n        # message (STATUS \"after defining an override of parse_arguments_multi_function\")\n\n        if(w3p_MULTI_SET)\n            parse_arguments_multi(CHECK_CACHED_VAR w3p_MULTI_SET ${w3p_MULTI_SET}) ## internaly will call our overloaded parse_arguments_multi_function\n        elseif(w3p_SET)\n            # message(\"calling set version of parse_arguments_multi with w3p_set = ${w3p_SET}\")\n            parse_arguments_multi(CHECK_CACHED_VAR w3p_SET ${w3p_SET})\n        endif()\n\n    endif()\n\nendfunction()\n\n## cmake variables introspection to globally activate/deactivate ${prefix}_WIN3RDPARTY_USE\n## This \"one shot\" call (only one for the next cmake configure) will automatically then reset the global variable WIN3RDPARTY_USE to UserDefined (do nothing).\n## use (call it) before and after the call of all your win3rdParty functions\nfunction(Win3rdPartyGlobalCacheAction )\n\tset(WIN3RDPARTY_USE \"UserDefined\" CACHE STRING \"Choose how to handle all cmake cached *_WIN3RDPARTY_USE for the next configure.\\nCould be:\\nUserDefined [default]\\nActivateAll\\nDesactivateAll\" )\n\tset_property(CACHE WIN3RDPARTY_USE PROPERTY STRINGS \"UserDefined;ActivateAll;DesactivateAll\" )\n\tif(${WIN3RDPARTY_USE} MATCHES \"UserDefined\")\n\telse()\n\t\tif(${WIN3RDPARTY_USE} MATCHES \"ActivateAll\")\n\t\t\tset(win3rdPvalue ON)\n\t\telseif(${WIN3RDPARTY_USE} MATCHES \"DesactivateAll\")\n\t\t\tset(win3rdPvalue OFF)\n\t\tendif()\n\t\tget_cmake_property(_variableNames CACHE_VARIABLES)\n\t\tforeach (_variableName ${_variableNames})\n\t\t\tstring(REGEX MATCH \t\"[A-Za-z_0-9-]+_WIN3RDPARTY_USE\" win3rdpartyUseCacheVar ${_variableName})\n\t\t\tif(win3rdpartyUseCacheVar)\n\t\t\t\tstring(REGEX REPLACE \"([A-Za-z_0-9-]+_WIN3RDPARTY_USE)\" \"\\\\1\" win3rdpartyUseCacheVar ${_variableName})\n\t\t\t\tset(${win3rdpartyUseCacheVar} ${win3rdPvalue} CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\" FORCE)\n\t\t\t\tmessage(STATUS \"${win3rdpartyUseCacheVar} cached variable set to ${win3rdPvalue}.\")\n\t\t\tendif()\n\t\tendforeach()\n\t\tset(WIN3RDPARTY_USE \"UserDefined\" CACHE STRING \"Choose how to handle all cmake cached *_WIN3RDPARTY_USE for the next configure.\\nCould be:\\nUserDefined [default]\\nActivateAll\\nDesactivateAll\" FORCE)\n\t\tmessage(STATUS \"reset WIN3RDPARTY_USE to UserDefined.\")\n\tendif()\n\tmark_as_advanced(WIN3RDPARTY_USE)\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/cmake_policies.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__set_policies_INCLUDED__)\n\treturn()\nelse()\n\tset(__set_policies_INCLUDED__ ON)\nendif()\n\nmacro(setPolicies)\n\t# No more policies to enforce\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/dependencies.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Included once for all sub project.\n## It contain the whole cmake instructions to find necessary common dependencies.\n## 3rdParty (provided by sibr_addlibrary win3rdParty or from external packages) are then available in cmake sub projects.\n##\n## Do not include this file more than once but you can modify it to fit to your own project.\n## So please, read it carefully because you can use on of these dependencies for your project or appen new one.\n##\n## As it is included after camke options, you can use conditional if(<CMAKE_PROJ_OPT>)/endif() to encapsulate your 3rdParty.\n##\n\n## win3rdParty function allowing to auto check/download/update binaries dependencies for current windows compiler\n## Please open this file in order to get more documentation and usage examples.\ninclude(Win3rdParty)\n\ninclude(sibr_library)\n\nWin3rdPartyGlobalCacheAction()\n\nfind_package(OpenGL REQUIRED)\n\nset(OpenGL_GL_PREFERENCE \"GLVND\")\n\n############\n## Find GLEW\n############\n##for headless rendering\nfind_package(EGL QUIET)\n\nif(EGL_FOUND)\n    add_definitions(-DGLEW_EGL)\n    message(\"Activating EGL support for headless GLFW/GLEW\")\nelse()\n    message(\"EGL not found : EGL support for headless GLFW/GLEW is disabled\")\nendif()\n\nif (MSVC11 OR MSVC12)\n    set(glew_multiset_arguments \n            CHECK_CACHED_VAR GLEW_INCLUDE_DIR\t    PATH \"glew-1.10.0/include\" DOC \"default empty doc\"\n            CHECK_CACHED_VAR GLEW_LIBRARIES         STRING LIST \"debug;glew-1.10.0/${LIB_BUILT_DIR}/glew32d.lib;optimized;glew-1.10.0/${LIB_BUILT_DIR}/glew32.lib\" DOC \"default empty doc\"\n        )\nelseif (MSVC14)\n    set(glew_multiset_arguments \n            CHECK_CACHED_VAR GLEW_INCLUDE_DIR\t    PATH \"glew-2.0.0/include\" DOC \"default empty doc\"\n            CHECK_CACHED_VAR GLEW_SHARED_LIBRARY_RELEASE       PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32.lib\"\n            CHECK_CACHED_VAR GLEW_STATIC_LIBRARY_RELEASE       PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32s.lib\"\n            CHECK_CACHED_VAR GLEW_SHARED_LIBRARY_DEBUG         PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32d.lib\"\n            CHECK_CACHED_VAR GLEW_STATIC_LIBRARY_DEBUG         PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32sd.lib\"\n        )\nelse ()\n    message(\"There is no provided GLEW library for your compiler, relying on find_package to find it\")\nendif()\nsibr_addlibrary(NAME GLEW #VERBOSE ON\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/glew-1.10.0.7z\"\n    MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/glew-1.10.0.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glew-2.0.0.7z\"        # using recompiled version of glew\n    MULTI_SET ${glew_multiset_arguments}\n)\nset(GLEW_VERBOSE ON)\nFIND_PACKAGE(GLEW REQUIRED)\nIF(GLEW_FOUND)\n    INCLUDE_DIRECTORIES(${GLEW_INCLUDE_DIR})\nELSE(GLEW_FOUND)\n    MESSAGE(\"GLEW not found. Set GLEW_DIR to base directory of GLEW.\")\nENDIF(GLEW_FOUND)\n\n\n##############\n## Find ASSIMP\n##############\nif (MSVC11 OR MSVC12)\n    set(assimp_set_arguments \n        CHECK_CACHED_VAR ASSIMP_DIR PATH \"Assimp_3.1_fix\"\n    )\nelseif (MSVC14)\n    set(assimp_set_arguments \n        CHECK_CACHED_VAR ASSIMP_DIR PATH \"Assimp-4.1.0\"\n    )\nelse ()\n    message(\"There is no provided ASSIMP library for your compiler, relying on find_package to find it\")\nendif()\n\nsibr_addlibrary(NAME ASSIMP #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/Assimp_3.1_fix.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/Assimp_3.1_fix.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/Assimp-4.1.0.7z\"\n        MULTI_SET\n            ${assimp_set_arguments}\n)\n\nfind_package(ASSIMP REQUIRED)\ninclude_directories(${ASSIMP_INCLUDE_DIR})\n\n################\n## Find FFMPEG\n################\nsibr_addlibrary(NAME FFMPEG\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/ffmpeg.zip\"\n    MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/ffmpeg.zip\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/ffmpeg-4.0.2-win64-win3rdParty.7z\"\n    SET CHECK_CACHED_VAR FFMPEG_DIR PATH ${FFMPEG_WIN3RDPARTY_DIR}\n)\nfind_package(FFMPEG)\ninclude_directories(${FFMPEG_INCLUDE_DIR})\n## COMMENT OUT ALL FFMPEG FOR CLUSTER\n\n###################\n## Find embree3\n###################\nsibr_addlibrary(\n    NAME embree3\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/embree2.7.0.x64.windows.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/embree-3.6.1.x64.vc14.windows.7z\"     # TODO SV: provide a valid version if required\n)\n\n# CLUSTER\n#find_package(embree 3.0 REQUIRED PATHS \"/data/graphdeco/share/embree/usr/local/lib64/cmake/\" )\nfind_package(embree 3.0 )\n\n###################\n## Find eigen3\n###################\nsibr_addlibrary(\n\tNAME eigen3\n\t#MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/eigen-eigen-dc6cfdf9bcec.7z\"\n\t#MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/eigen-eigen-dc6cfdf9bcec.7z\"    # TODO SV: provide a valid version if required\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/eigen3.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/eigen3.7z\"\n    SET CHECK_CACHED_VAR eigen3_DIR PATH \"eigen/share/eigen3/cmake\"\n)\ninclude_directories(/usr/include/eigen3)\nadd_definitions(-DEIGEN_INITIALIZE_MATRICES_BY_ZERO)\n\n#############\n## Find Boost\n#############\nset(Boost_REQUIRED_COMPONENTS \"system;chrono;filesystem;date_time\" CACHE INTERNAL \"Boost Required Components\")\n\nif (WIN32)\n    # boost multiset arguments\n    if (MSVC11 OR MSVC12)\n        set(boost_multiset_arguments \n                CHECK_CACHED_VAR BOOST_ROOT                 PATH \"boost_1_55_0\"\n                CHECK_CACHED_VAR BOOST_INCLUDEDIR \t\t    PATH \"boost_1_55_0\"\n                CHECK_CACHED_VAR BOOST_LIBRARYDIR \t\t    PATH \"boost_1_55_0/${LIB_BUILT_DIR}\"\n                #CHECK_CACHED_VAR Boost_COMPILER             STRING \"-${Boost_WIN3RDPARTY_VCID}\" DOC \"vcid (eg: -vc110 for MSVC11)\"\n                CHECK_CACHED_VAR Boost_COMPILER             STRING \"-vc110\" DOC \"vcid (eg: -vc110 for MSVC11)\" # NOTE: if it doesnt work, uncomment this option and set the right value for VisualC id\n            )\n    elseif (MSVC14)\n        set(boost_multiset_arguments \n                CHECK_CACHED_VAR BOOST_ROOT                 PATH \"boost-1.71\"\n                CHECK_CACHED_VAR BOOST_INCLUDEDIR \t\t    PATH \"boost-1.71\"\n                CHECK_CACHED_VAR BOOST_LIBRARYDIR \t\t    PATH \"boost-1.71/${LIB_BUILT_DIR}\"\n                CHECK_CACHED_VAR Boost_COMPILER             STRING \"-vc141\" DOC \"vcid (eg: -vc110 for MSVC11)\" # NOTE: if it doesnt work, uncomment this option and set the right value for VisualC id\n            )\n        \n        option(BOOST_MINIMAL_VERSION \"Only get minimal Boost dependencies\" ON)\n\n        if(${BOOST_MINIMAL_VERSION})\n            set(BOOST_MSVC14_ZIP \"boost-1.71-ibr-minimal.7z\")\n        else()\n            set(BOOST_MSVC14_ZIP \"boost-1.71.7z\")\n        endif()\n    else ()\n        message(\"There is no provided Boost library for your compiler, relying on find_package to find it\")\n    endif()\n\n    sibr_addlibrary(NAME Boost VCID TIMEOUT 600 #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/boost_1_55_0.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/boost_1_55_0.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/${BOOST_MSVC14_ZIP}\"    # boost compatible with msvc14\n        MULTI_SET ${boost_multiset_arguments}\n            CHECK_CACHED_VAR Boost_NO_SYSTEM_PATHS      BOOL ON DOC \"Set to ON to disable searching in locations not specified by these boost cached hint variables\"\n            CHECK_CACHED_VAR Boost_NO_BOOST_CMAKE       BOOL ON DOC \"Set to ON to disable the search for boost-cmake (package cmake config file if boost was built with cmake)\"\n    )\n    if(NOT Boost_COMPILER AND Boost_WIN3RDPARTY_USE)\n        message(WARNING \"Boost_COMPILER is not set and it's needed.\")\n    endif()\nendif()\n\nfind_package(Boost 1.65.0 REQUIRED COMPONENTS ${Boost_REQUIRED_COMPONENTS})\n# for CLUSTER\n##find_package(Boost 1.58.0 REQUIRED COMPONENTS ${Boost_REQUIRED_COMPONENTS})\n\n\nif(WIN32)\n\tadd_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/EHsc>\")\n    #add_definitions(/EHsc)\nendif()\n\nif(Boost_LIB_DIAGNOSTIC_DEFINITIONS)\n    add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})\nendif()\n\n#if(WIN32)\n    add_definitions(-DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB)\n#endif()\n\ninclude_directories(${BOOST_INCLUDEDIR} ${Boost_INCLUDE_DIRS})\nlink_directories(${BOOST_LIBRARYDIR} ${Boost_LIBRARY_DIRS})\n\n\n##############\n## Find OpenMP\n##############\nfind_package(OpenMP)\n\n##############\n## Find OpenCV\n##############\nif (WIN32)\n\tif (${MSVC_TOOLSET_VERSION} EQUAL 143)\n\t\tMESSAGE(\"SPECIAL OPENCV HANDLING\")\n\t\tset(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"install\" ## see OpenCVConfig.cmake\n\t    )\n\telseif (MSVC11 OR MSVC12)\n\t    set(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"opencv/build\" ## see OpenCVConfig.cmake\n\t    )\n\telseif (MSVC14)\n\t    set(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"opencv-4.5.0/build\" ## see OpenCVConfig.cmake\n\t    )\n\telse ()\n\t    message(\"There is no provided OpenCV library for your compiler, relying on find_package to find it\")\n\tendif()\nelse()\n\t    message(\"There is no provided OpenCV library for your compiler, relying on find_package to find it\")\nendif()\n\nsibr_addlibrary(NAME OpenCV #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv-4.5.0.7z\"    # opencv compatible with msvc14 and with contribs\n        MSVC17 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv4-8.7z\" \n\t\tSET ${opencv_set_arguments}\n    )\nfind_package(OpenCV 4.5 REQUIRED) ## Use directly the OpenCVConfig.cmake provided\n## FOR CLUSTER\n###find_package(OpenCV 4.5 REQUIRED PATHS \"/data/graphdeco/share/opencv/usr/local/lib64/cmake/opencv4/\" ) ## Use directly the OpenCVConfig.cmake provided\n\n    ##https://stackoverflow.com/questions/24262081/cmake-relwithdebinfo-links-to-debug-libs\nset_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE)\n\nadd_definitions(-DOPENCV_TRAITS_ENABLE_DEPRECATED) \n\nif(OpenCV_INCLUDE_DIRS)\n    foreach(inc ${OpenCV_INCLUDE_DIRS})\n        if(NOT EXISTS ${inc})\n            set(OpenCV_INCLUDE_DIR \"\" CACHE PATH \"additional custom include DIR (in case of trouble to find it (fedora 17 opencv package))\")\n        endif()\n    endforeach()\n    if(OpenCV_INCLUDE_DIR)\n        list(APPEND OpenCV_INCLUDE_DIRS ${OpenCV_INCLUDE_DIR})\n        include_directories(${OpenCV_INCLUDE_DIRS})\n    endif()\nendif()\n\n###################\n## Find GLFW\n###################\nsibr_addlibrary(\n    NAME glfw3\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glfw-3.2.1.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glfw-3.2.1.7z\"     # TODO SV: provide a valid version if required\n    SET CHECK_CACHED_VAR glfw3_DIR PATH \"glfw-3.2.1\"\n)\n\n### FOR CLUSTER COMMENT OUT lines above, uncomment lines below\n##find_package(GLFW REQUIRED 3.3 )\n##message(\"***********=============> GLFW IS \" ${GLFW_LIBRARY})\n##message(\"***********=============> GLFW IS \" ${GLFW_LIBRARIES})\n\nfind_package(glfw3 REQUIRED)\n\nsibr_gitlibrary(TARGET imgui\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/imgui.git\"\n    GIT_TAG\t\t\t\"741fb3ab6c7e1f7cef23ad0501a06b7c2b354944\"\n)\n\n## FOR CLUSTER COMMENT OUT nativefiledialog\nsibr_gitlibrary(TARGET nativefiledialog\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/nativefiledialog.git\"\n    GIT_TAG\t\t\t\"ae2fab73cf44bebdc08d997e307c8df30bb9acec\"\n)\n\n\nsibr_gitlibrary(TARGET mrf\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/mrf.git\"\n    GIT_TAG\t\t\t\"30c3c9494a00b6346d72a9e37761824c6f2b7207\"\n)\n\nsibr_gitlibrary(TARGET nanoflann\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/nanoflann.git\"\n    GIT_TAG\t\t\t\"7a20a9ac0a1d34850fc3a9e398fc4a7618e8a69a\"\n)\n\nsibr_gitlibrary(TARGET picojson\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/picojson.git\"\n    GIT_TAG\t\t\t\"7cf8feee93c8383dddbcb6b64cf40b04e007c49f\"\n)\n\nsibr_gitlibrary(TARGET rapidxml\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/rapidxml.git\"\n    GIT_TAG\t\t\t\"069e87f5ec5ce1745253bd64d89644d6b894e516\"\n)\n\nsibr_gitlibrary(TARGET xatlas\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/xatlas.git\"\n    GIT_TAG\t\t\t\"0fbe06a5368da13fcdc3ee48d4bdb2919ed2a249\"\n    INCLUDE_DIRS \t\"source/xatlas\"\n)\n\nWin3rdPartyGlobalCacheAction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/downloadAndExtractZipFile.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## downloadAndExtractZipFile cmake function\n## Provide a way to download zip file from public internet ZIP_URL host\n## and to extract it in a specific EXCTRATED_ZIP_PATH destination.\n## This function use 7-Zip external tool to maximize the compatibles formats.\n## This will be not download again if the EXCTRATED_ZIP_PATH already exist and DL_FORCE is set to OFF.\n## This will try to unzip file if already exist in the ZIP_DL_PATH.\n##\n## If EXCTRATED_ZIP_PATH and/or ZIP_DL_PATH are not full path,\n## it will be interpreted relative to CMAKE_BINARY_DIR\n##\n## Usage example :\n## include(downloadAndExtractZipFile)\n## downloadAndExtractZipFile(\n## \thttp://www.cs.cornell.edu/~snavely/bundler/distr/bundler-v0.4-source.zip\n## \t${CMAKE_BINARY_DIR}/Bundler/bundler-v0.4-source.zip\n## \t${CMAKE_BINARY_DIR}/Bundler\n##  [DL_FORCE ON|OFF]\n##  [TIMEOUT]\n##  [CHECK_DIRTY_URL]\n## )\n##\n## option DL_FORCE will redownload the zip file [deafult to OFF]\n## option TIMEOUT will end the unzip process after this period of time [default to 600s]\n## option CHECK_DIRTY_URL will write into the given file the downloaded URL and then,\n## next time, if the URL was updated, it detect it with this file\n## and will download the last version. This prevent to alway set manually DL_FORCE to ON...\n##\nif(__downloadAndExtractZipFile_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__downloadAndExtractZipFile_cmake_INCLUDED__ ON)\nendif()\n\nfunction(downloadAndExtractZipFile ZIP_URL ZIP_DL_PATH EXCTRATED_ZIP_PATH)\n\n    # message(STATUS \"zipUrl=${ZIP_URL} zipDlPath=${ZIP_DL_PATH} extractedZipPath=${EXCTRATED_ZIP_PATH}\")\n    cmake_parse_arguments(dwnlezf \"\" \"VERBOSE;DL_FORCE;TIMEOUT;CHECK_DIRTY_URL\" \"\" ${ARGN})\n\n\tset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\n    ## Check entries mandatory args\n    if(IS_ABSOLUTE \"${ZIP_DL_PATH}\")\n    else()\n        set(ZIP_DL_PATH \"${CMAKE_BINARY_DIR}/${ZIP_DL_PATH}\")\n    endif()\n    if(IS_ABSOLUTE \"${EXCTRATED_ZIP_PATH}\")\n    else()\n        set(EXCTRATED_ZIP_PATH \"${CMAKE_BINARY_DIR}/${EXCTRATED_ZIP_PATH}\")\n    endif()\n    if(NOT EXISTS \"${EXCTRATED_ZIP_PATH}\")\n        file(MAKE_DIRECTORY ${EXCTRATED_ZIP_PATH})\n    endif()\n\n\t# SB: Once, one of downloaded zip was corrupted by an error message coming from the server.\n\tif(EXISTS \"${ZIP_DL_PATH}\")\n\t\t# So I check for removing such corrupted files\n\t\tmessage(\"Removing previous ${ZIP_DL_PATH} (might be corrupted)\")\n\t\tfile(REMOVE \"${ZIP_DL_PATH}\")\n\t\tif(EXISTS \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\t# and remove the previous (corrupted) made 'Win3rdPartyUrl' file\n\t\t\tfile(REMOVE \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\tendif()\n\tendif()\n\n    ## Check entries optional args\n\tmacro(readDirtyUrl )\n\t\tif(dwnlezf_CHECK_DIRTY_URL)\n\t\t\tif(IS_ABSOLUTE \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\telse()\n\t\t\t\tset(dwnlezf_CHECK_DIRTY_URL \"${CMAKE_BINARY_DIR}/${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\tendif()\n\t\t\tget_filename_component(unzipDir \t${EXCTRATED_ZIP_PATH} NAME)\n\t\t\tget_filename_component(unzipPath \t${EXCTRATED_ZIP_PATH} PATH)\n\t\t\tmessage(STATUS \"Checking ${unzipDir} [from ${unzipPath}]...\")\n\t\t\tif(EXISTS \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\t\tget_filename_component(CHECK_DIRTY_URL_FILENAME ${dwnlezf_CHECK_DIRTY_URL} NAME)\n\t\t\t\tfile(STRINGS \"${dwnlezf_CHECK_DIRTY_URL}\" contents)\n\t\t\t\tlist(GET contents 0 downloadURL)\n\t\t\t\tlist(REMOVE_AT contents 0)\n\t\t\t\tif(\"${downloadURL}\" MATCHES \"${ZIP_URL}\")\n\t\t\t\t\tif(dwnlezf_VERBOSE)\n\t\t\t\t\t\tmessage(STATUS \"Your downloaded version (URL) seems to be up to date. Let me check if nothing is missing... (see ${dwnlezf_CHECK_DIRTY_URL}).\")\n\t\t\t\t\tendif()\n\t\t\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\t\t\tunset(NAME_PATTERN_LIST)\n\t\t\t\t\tforeach(realPathPattern ${PATHNAME_PATTERN_LIST})\n\t\t\t\t\t\tget_filename_component(itemName ${realPathPattern} NAME)\n\t\t\t\t\t\tlist(APPEND NAME_PATTERN_LIST ${itemName})\n\t\t\t\t\tendforeach()\n\t\t\t\t\tif(NAME_PATTERN_LIST)\n\t\t\t\t\t\tforeach(item ${contents})\n\t\t\t\t\t\t\tlist(FIND NAME_PATTERN_LIST ${item} id)\n\t\t\t\t\t\t\tif(${id} MATCHES \"-1\")\n\t\t\t\t\t\t\t\tmessage(STATUS \"${item} is missing, your downloaded version content changed, need to redownload it.\")\n\t\t\t\t\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\t\t\t\t\t\tbreak()\n\t\t\t\t\t\t\telse()\n\t\t\t\t\t\t\t\tlist(REMOVE_AT NAME_PATTERN_LIST ${id})\n\t\t\t\t\t\t\t\tset(ZIP_DL_FORCE OFF)\n\t\t\t\t\t\t\tendif()\n\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tif(NOT ZIP_DL_FORCE AND NAME_PATTERN_LIST)\n\t\t\t\t\t\t\tmessage(\"Yours seems to be up to date (regarding to ${CHECK_DIRTY_URL_FILENAME})!\\nBut there are additional files/folders into your downloaded destination (feel free to clean it if you want).\")\n\t\t\t\t\t\t\tforeach(item ${NAME_PATTERN_LIST})\n\t\t\t\t\t\t\t\tif(item)\n\t\t\t\t\t\t\t\t\tmessage(\"${item}\")\n\t\t\t\t\t\t\t\tendif()\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tendif()\n\t\t\t\t\tendif()\n\t\t\t\telse()\n\t\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\t\t\tmessage(STATUS \"Your downloaded version is dirty (too old).\")\n\t\t\t\tendif()\n\t\t\telse()\n\t\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\t\tif(NOT PATHNAME_PATTERN_LIST)\n\t\t\t\t\tmessage(\"We found nothing into ${EXCTRATED_ZIP_PATH}, we will try to download it for you now.\")\n\t\t\t\tendif()\n\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\tendif()\n\t\tendif()\n\tendmacro()\n\treadDirtyUrl()\n\tif(NOT ZIP_DL_FORCE)\n\t\treturn() ## do not need to further (as we are up to date, just exit the function\n\tendif()\n\n\tmacro(writeDirtyUrl )\n\t\tif(dwnlezf_CHECK_DIRTY_URL)\n\t\t\tfile(WRITE \"${dwnlezf_CHECK_DIRTY_URL}\" \"${ZIP_URL}\\n\")\n\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\tunset(NAME_PATTERN_LIST)\n\t\t\tforeach(realPathPattern ${PATHNAME_PATTERN_LIST})\n\t\t\t\tget_filename_component(itemName ${realPathPattern} NAME)\n\t\t\t\tlist(APPEND NAME_PATTERN_LIST ${itemName})\n\t\t\tendforeach()\n\t\t\tif(NAME_PATTERN_LIST)\n\t\t\t\tforeach(item ${NAME_PATTERN_LIST})\n\t\t\t\t\tfile(APPEND \"${dwnlezf_CHECK_DIRTY_URL}\" \"${item}\\n\")\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\tendif()\n\tendmacro()\n\n\tif(dwnlezf_DL_FORCE)\n        set(ZIP_DL_FORCE ON)\n    endif()\n\n\tif(NOT dwnlezf_TIMEOUT)\n\t\tset(dwnlezf_TIMEOUT 600)\n\tendif()\n\tmath(EXPR dwnlezf_TIMEOUT_MIN \"${dwnlezf_TIMEOUT}/60\")\n\n\tmacro(unzip whichZipFile)\n\t\tif(NOT SEVEN_ZIP_CMD)\n\t\t\tfind_program(SEVEN_ZIP_CMD NAMES 7z 7za p7zip DOC \"7-zip executable\" PATHS \"$ENV{PROGRAMFILES}/7-Zip\" \"$ENV{${PROGRAMFILESx86}}/7-Zip\" \"$ENV{ProgramW6432}/7-Zip\")\n\t\tendif()\n\t\tif(SEVEN_ZIP_CMD)\n            if(dwnlezf_VERBOSE)\n                message(STATUS \"UNZIP: please, WAIT UNTIL ${SEVEN_ZIP_CMD} finished...\\n(no more than ${dwnlezf_TIMEOUT_MIN} min)\")\n            else()\n                message(STATUS \"UNZIP...wait...\")\n            endif()\n\t\t\texecute_process( \tCOMMAND ${SEVEN_ZIP_CMD} x ${whichZipFile} -y\n\t\t\t\t\t\t\t\tWORKING_DIRECTORY ${EXCTRATED_ZIP_PATH}\tTIMEOUT ${dwnlezf_TIMEOUT}\n\t\t\t\t\t\t\t\tRESULT_VARIABLE resVar OUTPUT_VARIABLE outVar ERROR_VARIABLE errVar\n\t\t\t\t\t\t\t)\n\t\t\tif(${resVar} MATCHES \"0\")\n                if(dwnlezf_VERBOSE)\n                    message(STATUS \"SUCESS to unzip in ${EXCTRATED_ZIP_PATH}. Now we can remove the downloaded zip file.\")\n                endif()\n\t\t\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E remove ${whichZipFile})\n\t\t\t\tmark_as_advanced(SEVEN_ZIP_CMD)\n\t\t\telse()\n\t\t\t\tmessage(WARNING \"something wrong in ${EXCTRATED_ZIP_PATH}\\n with \\\"${SEVEN_ZIP_CMD} x ${whichZipFile} -y\\\", redo or try to unzip by yourself...\")\n\t\t\t\tmessage(\"unzip: resVar=${resVar}\")\n\t\t\t\tmessage(\"unzip: outVar=${outVar}\")\n\t\t\t\tmessage(\"unzip: errVar=${errVar}\")\n\t\t\t\tmessage(\"unzip: failed or canceled or timeout\")\n\t\t\tendif()\n\t\telse()\n\t\t\tmessage(WARNING \"You need 7zip (http://www.7-zip.org/download.html) to unzip the downloaded dir.\")\n\t\t\tset(SEVEN_ZIP_CMD \"\" CACHE FILEPATH \"7-zip executable\")\n\t\t\tmark_as_advanced(CLEAR SEVEN_ZIP_CMD)\n\t\tendif()\n\tendmacro()\n\n    if(dwnlezf_VERBOSE)\n        message(STATUS \"Trying to look ${ZIP_DL_PATH} if a zip file exist...\")\n    endif()\n\tif(EXISTS \"${ZIP_DL_PATH}\")\n\n\t\t## already downloaded, so just unzip it\n\t\tunzip(${ZIP_DL_PATH})\n\t\twriteDirtyUrl()\n\n\telseif(ZIP_DL_FORCE)\n\n\t\t## the download part (+ unzip)\n\t\tmessage(STATUS \"Let me try to download package for you : ${ZIP_URL}\")\n        if(dwnlezf_VERBOSE)\n            message(STATUS \"Downloading...\\n   SRC=${ZIP_URL}\\n   DEST=${ZIP_DL_PATH}.tmp\\n   INACTIVITY_TIMEOUT=180s\")\n        endif()\n\t\tfile(DOWNLOAD ${ZIP_URL} ${ZIP_DL_PATH}.tmp INACTIVITY_TIMEOUT 360 STATUS status SHOW_PROGRESS)\n\n\t\tlist(GET status 0 numResult)\n\t\tif(${numResult} MATCHES \"0\")\n\n            if(dwnlezf_VERBOSE)\n                message(STATUS \"Download succeed, so let me rename the tmp file to unzip it\")\n            endif()\n\t\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E rename ${ZIP_DL_PATH}.tmp ${ZIP_DL_PATH})\n\t\t\tunzip(${ZIP_DL_PATH})\n\t\t\twriteDirtyUrl()\n\n\t\telse()\n\n\t\t\tlist(GET status 1 errMsg)\n\t\t\tmessage(WARNING \"DOWNLOAD ${ZIP_URL} to ${ZIP_DL_PATH} failed\\n:${errMsg}\")\n\t\t\tmessage(WARNING \"OK, you need to download the ${ZIP_URL} manually and put it into ${ZIP_DL_PATH}\")\n\t\t\tmessage(\"Take a look at the project website page to check available URL.\")\n\n\t\tendif()\n\n\tendif()\n\n\t## clean up the tmp downloaded file\n\tif(EXISTS \"${ZIP_DL_PATH}.tmp\")\n\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E remove ${ZIP_DL_PATH}.tmp)\n\tendif()\n\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/git_describe.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__git_describe_INCLUDED__)\n\treturn()\nelse()\n\tset(__git_describe_INCLUDED__ ON)\nendif()\n\nfind_package(Git)\nif(Git_FOUND)\n  message(STATUS \"Git found: ${GIT_EXECUTABLE}\")\nelse()\n  message(FATAL_ERROR \"Git not found. Aborting\")\nendif()\n\nmacro(git_describe)\n    cmake_parse_arguments(GIT_DESCRIBE \"\" \"GIT_URL;GIT_BRANCH;GIT_COMMIT_HASH;GIT_TAG;GIT_VERSION;PATH\" \"\" ${ARGN})\n\n    if(NOT GIT_DESCRIBE_PATH)\n        set(GIT_DESCRIBE_PATH ${CMAKE_SOURCE_DIR})\n    endif()\n\n    if(GIT_DESCRIBE_GIT_URL)\n        # Get the current remote\n        execute_process(\n            COMMAND git remote\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_REMOTE\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n\n        # Get the current remote\n        execute_process(\n            COMMAND git remote get-url ${GIT_DESCRIBE_GIT_REMOTE}\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_URL}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_BRANCH)\n        # Get the current working branch\n        execute_process(\n            COMMAND git rev-parse --abbrev-ref HEAD\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_BRANCH}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_COMMIT_HASH)\n        # Get the latest abbreviated commit hash of the working branch\n        execute_process(\n            COMMAND git rev-parse HEAD\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_COMMIT_HASH}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_TAG)\n        # Get the tag\n        execute_process(\n            COMMAND git describe --tags --exact-match\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_TAG}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_VERSION)\n        # Get the version from git describe\n        execute_process(\n            COMMAND git describe\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_VERSION}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n\n        if(${GIT_DESCRIBE_GIT_VERSION} STREQUAL \"\")\n            execute_process(\n                COMMAND git rev-parse --abbrev-ref HEAD\n                WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n                OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_VERSION_BRANCH\n                OUTPUT_STRIP_TRAILING_WHITESPACE\n                ERROR_QUIET\n            )\n            execute_process(\n                COMMAND git log -1 --format=%h\n                WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n                OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_VERSION_COMMIT\n                OUTPUT_STRIP_TRAILING_WHITESPACE\n                ERROR_QUIET\n            )\n\n            set(${GIT_DESCRIBE_GIT_VERSION} \"${GIT_DESCRIBE_GIT_VERSION_BRANCH}-${GIT_DESCRIBE_GIT_VERSION_COMMIT}\")\n        endif()\n    endif()\n\nendmacro()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/include_once.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nmacro(include_once file)\n    get_filename_component(INCLUDE_ONCE_FILEPATH ${file} REALPATH)\n    string(REGEX REPLACE \"(\\\\.|\\\\/+|\\\\:|\\\\\\\\+)\" \"_\" INCLUDE_ONCE_FILEPATH ${INCLUDE_ONCE_FILEPATH})\n    get_property(INCLUDED_${INCLUDE_ONCE_FILEPATH}_LOCAL GLOBAL PROPERTY INCLUDED_${INCLUDE_ONCE_FILEPATH})\n    if (INCLUDED_${INCLUDE_ONCE_FILEPATH}_LOCAL)\n        return()\n    else()\n        set_property(GLOBAL PROPERTY INCLUDED_${INCLUDE_ONCE_FILEPATH} true)\n\n        include(${file})\n    endif()\nendmacro()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/install_runtime.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## This file is mainly used to allow runtime installation\n## There are some utilities cmake functions to ease the generic deployement (abstract common usage of cmake)...\n##\n## You cannot run your programm automaticaly from your CNAKE_BINARY_DIR when you build\n## as it will miss all dependencies and ressources files...\n## You have to run install target in order to test your programm.\n##\n## The only one function/macros you may use inside your sub-CMakeLists.txt (sub-project) is :\n## ******************\n## ibr_install_target macro => see documentation at the end of this file\n## ******************\n## It use these utilities cmake functions to abstract the installation in an uniform way for all sub-projects.\n##\nif(__install_runtime_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__install_runtime_cmake_INCLUDED__ ON)\nendif()\n\n\n##\n## Allow to write a resource config file which contain additional ressource paths\n## (used by IBR_Common Resource system to load shaders and potentialy images, plugins and so on)\n##\n## ADD option list all the paths to add in the file (relative paths are interpreted relative to working dir of the executable)\n## INSTALL option to specify where we want to install this file\n##\n## Example usage:\n## resourceFile(ADD \"shaders\" \"${PROJECT_NAME}_rsc\" INSTALL bin)\n##\nmacro(resourceFile)\n\tcmake_parse_arguments(rsc \"\" \"INSTALL;FILE_PATH;CONFIG_TYPE\" \"ADD\" ${ARGN}) ## both args are directory path\n\n\tif(rsc_ADD)\n\t\tunset(IBR_RSC_FILE_CONTENT_LIST)\n\t\tif(EXISTS \"${rsc_FILE_PATH}\")\n\t\t\tfile(READ \"${rsc_FILE_PATH}\" IBR_RSC_FILE_CONTENT)\n\t\t\tstring(REGEX REPLACE \"\\n\" \";\" IBR_RSC_FILE_CONTENT_LIST \"${IBR_RSC_FILE_CONTENT}\")\n\t\tendif()\n\t\tlist(APPEND IBR_RSC_FILE_CONTENT_LIST \"${rsc_ADD}\")\n\t\tlist(REMOVE_DUPLICATES IBR_RSC_FILE_CONTENT_LIST)\n\t\tfile(WRITE \"${rsc_FILE_PATH}\" \"\")\n\t\tforeach(rscDir ${IBR_RSC_FILE_CONTENT_LIST})\n\t\t\tfile(APPEND \"${rsc_FILE_PATH}\" \"${rscDir}\\n\")\n\t\tendforeach()\n\t\tunset(rsc_ADD)\n\tendif()\n\n\tif(rsc_INSTALL)\n\t\tinstall(FILES ${rsc_FILE_PATH} CONFIGURATIONS ${rsc_CONFIG_TYPE} DESTINATION ${rsc_INSTALL})\n\t\tunset(rsc_INSTALL)\n\tendif()\nendmacro()\n\n\n##\n## Install *.pdb generated file for the current cmake project\n## assuming the output target name is the cmake project name.\n## This macro is useful for crossplateform multi config mode.\n##\n## Usage Example:\n##\n## \tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n##\t\tinstallPDB(${PROJECT_NAME} ${CMAKE_BUILD_TYPE} RUNTIME_DEST bin ARCHIVE_DEST lib LIBRARY_DEST lib)\n## \tendif()\n##\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n##\t\tinstallPDB(${PROJECT_NAME} ${CONFIG_TYPES} RUNTIME_DEST bin ARCHIVE_DEST lib LIBRARY_DEST lib)\n##\tendforeach()\n##\nmacro(installPDB targetName configType)\n\tcmake_parse_arguments(instpdb \"\" \"COMPONENT\" \"ARCHIVE_DEST;LIBRARY_DEST;RUNTIME_DEST\" ${ARGN}) ## both args are directory path\n\n\tif(NOT MSVC)\n\t\treturn()\n\tendif()\n\n    ## Check if DESTINATION are provided according to the TYPE of the given target (see install command doc to see correspodances)\n    get_target_property(type ${targetName} TYPE)\n    if(${type} MATCHES \"EXECUTABLE\" AND instpdb_RUNTIME_DEST)\n        set(pdb_DESTINATION ${instpdb_RUNTIME_DEST})\n    elseif(${type} MATCHES \"STATIC_LIBRARY\" AND instpdb_ARCHIVE_DEST)\n        set(pdb_DESTINATION ${instpdb_ARCHIVE_DEST})\n    elseif(${type} MATCHES \"MODULE_LIBRARY\" AND instpdb_LIBRARY_DEST)\n        set(pdb_DESTINATION ${instpdb_LIBRARY_DEST})\n    elseif(${type} MATCHES \"SHARED_LIBRARY\")\n        if(WIN32 AND instpdb_RUNTIME_DEST)\n            set(pdb_DESTINATION ${instpdb_RUNTIME_DEST})\n        else()\n            set(pdb_DESTINATION ${instpdb_LIBRARY_DEST})\n        endif()\n    endif()\n\n    if(NOT pdb_DESTINATION)\n\t\tset(pdb_DESTINATION bin) ## default destination of the pdb file\n\tendif()\n\n\tif(NOT instpdb_COMPONENT)\n\t\tset(instpdb_COMPONENT )\n\telse()\n\t\tset(instpdb_COMPONENT COMPONENT ${instpdb_COMPONENT})\n\tendif()\n\n\tstring(TOUPPER ${configType} CONFIG_TYPES_UC)\n\tget_target_property(PDB_PATH ${targetName} PDB_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC})\n\n\tget_target_property(confModePostfix ${targetName} ${CONFIG_TYPES_UC}_POSTFIX)\n\tif(NOT confModePostfix)\n\t\tset(confModePostfix \"\")\n\tendif()\n\tset_target_properties(${targetName} PROPERTIES  PDB_NAME_${CONFIG_TYPES_UC} ${targetName}${confModePostfix})\n\tget_target_property(PDB_NAME ${targetName} PDB_NAME_${CONFIG_TYPES_UC})# if not set, this is empty\n\n\tif(EXISTS \"${PDB_PATH}/${PDB_NAME}.pdb\")\n\t\tinstall(FILES \"${PDB_PATH}/${PDB_NAME}.pdb\" CONFIGURATIONS ${configType} DESTINATION ${pdb_DESTINATION} ${instpdb_COMPONENT} OPTIONAL)\n\tendif()\nendmacro()\n\n\n##\n## Add additional target to install a project independently and based on its component\n## configMode is used to prevent default Release installation (we want also to install in other build/config type)\n##\nmacro(installTargetProject targetOfProject targetOfInstallProject)\n \tif(DEFINED CMAKE_BUILD_TYPE) ## for make/nmake based\n\t\tset(configMode ${CMAKE_BUILD_TYPE})\n\telseif(MSVC)\n\t\t## $(Configuration) will be one of the following : Debug, Release, MinSizeRel, RelWithDebInfo\n\t\tset(configMode $(Configuration))\n \tendif()\n\tif(configMode)\n        get_target_property(srcFiles ${targetOfProject} SOURCES)\n\t\tadd_custom_target(\t${targetOfInstallProject} #ALL\n\t\t\t\t\t\t\t${CMAKE_COMMAND} -DBUILD_TYPE=${configMode} -DCOMPONENT=${targetOfInstallProject} -P ${CMAKE_BINARY_DIR}/cmake_install.cmake\n\t\t\t\t\t\t\tDEPENDS ${srcFiles}\n\t\t\t\t\t\t\tCOMMENT \"run the installation only for ${targetOfProject}\" VERBATIM\n\t\t\t\t\t\t\t)\n\t\tadd_dependencies(${targetOfInstallProject} ${targetOfProject})\n\n\t\tget_target_property(INSTALL_BUILD_FOLDER ${targetOfProject} FOLDER)\n\t\tset_target_properties(${targetOfInstallProject} PROPERTIES FOLDER ${INSTALL_BUILD_FOLDER})\n\tendif()\nendmacro()\n\n# Collect all currently added targets in all subdirectories\n#\n# Parameters:\n# - _result the list containing all found targets\n# - _dir root directory to start looking from\nfunction(get_all_targets _result _dir)\n    get_property(_subdirs DIRECTORY \"${_dir}\" PROPERTY SUBDIRECTORIES)\n    foreach(_subdir IN LISTS _subdirs)\n        get_all_targets(${_result} \"${_subdir}\")\n    endforeach()\n\n    get_directory_property(_sub_targets DIRECTORY \"${_dir}\" BUILDSYSTEM_TARGETS)\n    set(${_result} ${${_result}} ${_sub_targets} PARENT_SCOPE)\nendfunction()\n\n##\n## Add targets for building and installing subdirectories\nmacro(subdirectory_target target directory build_folder)\n\tadd_custom_target(${target}\n\t\tCOMMENT \"run build for all projects in this directory\" VERBATIM\n\t)\n\tget_all_targets(ALL_TARGETS ${directory})\n\tadd_dependencies(${target} ${ALL_TARGETS})\n\tadd_custom_target(${target}_install\n\t\t${CMAKE_COMMAND} -DBUILD_TYPE=$<CONFIG> -DCOMPONENT=${target}_install -P ${CMAKE_BINARY_DIR}/cmake_install.cmake\n\t\tCOMMENT \"run install for all projects in this directory\" VERBATIM\n\t)\n\tadd_dependencies(${target}_install ${target})\n\n\tset_target_properties(${target}\t\t\tPROPERTIES FOLDER ${build_folder})\n\tset_target_properties(${target}_install PROPERTIES FOLDER ${build_folder})\nendmacro()\n\n\n##  CMAKE install all required dependencies for an application (included system OS files like msvc*.dll for example)\n##\n## install_runtime(<installedFilePathTargetAppToResolve>\n##      [TARGET                 name]\n##      [PLUGINS \t\t\t\tname \t\t[nameN ...] [PLUGIN_PATH_NAME currentPathName [FROM_REL_PATH matchDirFromCurrentPathName] [PLUGIN_PATH_DEST installDir] ]\n##      [PLUGINS \t\t\t\t...]\n##      [DIRS \t\t\t\t\tpath \t\t[pathN ...] ]\n##\t\t[TARGET_LIBRARIES  \t\tfilePath\t[filePathN ...] ]\n##\t\t[TARGET_PACKAGES   \t\tpackageName [packageNameN ...] ]\n##\t\t[COMPONENT\t\t\t\tinstallComponentName]\n##\t\t[PLAUSIBLES_POSTFIX\t\tDebug_postfix [MinSizeRel_postfix relWithDebInfo_postfix ...] ]\n##      [VERBOSE]\n## )\n##\n## installedFilePathTargetAppToResolve : the final installed targetApp absolute full file path name you want to resolve\n##\n## TARGET           :   The target app we want to install. If given, it's used to look for link libraries paths (best choice to use, strongly advised to use it)\n##\n## PLUGINS \t\t\t: \tSome application built use/load some plugins which can't be detect inside its binary,\n##\t\t\t\t\t\tso, here you can specify which plugins the application use/load in order to install them\n##\t\t\t\t\t\tand resolve also there dependencies.\n## \t\tWith PLUGINS multi FLAGS \t:\n## \t \t\tPLUGIN_PATH_NAME \t: The current plugin full file path we want to install\n##\t\t\tFROM_REL_PATH\t\t: [optional: default only the file is kept] From which matching dir of the plugin path we want to install (keep the directories structure)\n##\t\t\tPLUGIN_PATH_DEST\t: [optional: default relative to executable directory] Where (full path to the install directory) we will install the plugin file (or file path)\n##\n## DIRS \t\t\t:\tA list of directories to looking for dependencies\n## TARGET_LIBRARIES :\tDEPRECATED (use TARGET flag instead) : The cmake content variables used for the target_link_libraries(<targetApp> ...)\n## TARGET_PACKAGES \t: \tDEPRECATED (use TARGET flag instead) : The cmake package names used for the findPackage(...) for your targetApp\n##\t\t\t\t\t\tADVICE: This flag add entries in cache (like: <packageName>_DIR), it could be useful to fill these variable!\n## COMPONENT\t\t:\t(default to runtime) Is the component name associated to the installation\n##\t\t\t\t\t\tIt is used when you want to install separatly some part of your projets (see install cmake doc)\n## VERBOSE\t\t\t: \tFor debug or to get more informations in the output console\n##\n## Usage:\n##\t install_runtime(${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}${CMAKE_EXECUTABLE_SUFFIX}\n##\t\tVERBOSE\n##      TARGET  ${PROJECT_NAME}\n##      PLAUSIBLES_POSTFIX  _d\n##      PLUGINS\n##\t\t    PLUGIN_PATH_NAME    ${PLUGIN_PATH_NAME}${CMAKE_SHARED_MODULE_SUFFIX} ## will be installed (default exec path if no PLUGINS_DEST) and then will be resolved\n##\t\t\tFROM_REL_PATH\t\tplugins ## optional, used especially for keeping qt plugins tree structure\n##          PLUGIN_PATH_DEST    ${CMAKE_INSTALL_PREFIX}/plugins ## (or relative path 'plugins' will be interpreted relative to installed executable)\n##\t\tDIRS\t\t\t\t${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}\n##\t\tTARGET_LIBRARIES\t${OPENGL_LIBRARIES}         ## DEPRECATED (use TARGET flag instead)\n##\t\t\t\t\t\t\t${GLEW_LIBRARIES}\n##\t\t\t\t\t\t\t${GLUT_LIBRARIES}\n##\t\t\t\t\t\t\t${Boost_LIBRARIES}\n##\t\t\t\t\t\t\t${SuiteSparse_LIBRARIES}\n##\t\t\t\t\t\t\t${CGAL_LIBRARIES}\n##\t\tTARGET_PACKAGES\t\tOPENGL                      ## DEPRECATED (use TARGET flag instead)\n##\t\t\t\t\t\t\tGLEW\n##\t\t\t\t\t\t\tGLUT\n##\t\t\t\t\t\t\tCGAL\n##\t\t\t\t\t\t\tBoost\n##\t\t\t\t\t\t\tSuiteSparse\n##\t)\n##\n## For plugins part, it use our internal parse_arguments_multi.cmake\n##\nfunction(install_runtime installedFilePathTargetAppToResolve)\n    set(optionsArgs \"VERBOSE\")\n    set(oneValueArgs \"COMPONENT;INSTALL_FOLDER;CONFIG_TYPE\")\n    set(multiValueArgs \"DIRS;PLUGINS;TARGET_LIBRARIES;TARGET_PACKAGES;TARGET;PLAUSIBLES_POSTFIX\")\n    cmake_parse_arguments(inst_run \"${optionsArgs}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN} )\n\n    if(IS_ABSOLUTE ${installedFilePathTargetAppToResolve})\n    else()\n        set(installedFilePathTargetAppToResolve ${inst_run_INSTALL_FOLDER}/${installedFilePathTargetAppToResolve})\n    endif()\n\n\tget_filename_component(EXEC_NAME ${installedFilePathTargetAppToResolve} NAME_WE)\n\tget_filename_component(EXEC_PATH ${installedFilePathTargetAppToResolve} PATH)\n\n\tif(NOT inst_run_COMPONENT)\n\t\tset(inst_run_COMPONENT runtime)\n\tendif()\n\n\n    ## Try to append as more possible as possible paths to find dependencies (deprecated since we can use target_properties to get back paths)\n    set(libPaths )\n\tforeach(libraryFileName ${inst_run_TARGET_LIBRARIES})\n\t\tif(IS_DIRECTORY \"${libraryFileName}\")\n\t\t\tlist(APPEND libPaths \"${libraryFileName}\")\n\t\telse()\n\t\t\tget_filename_component(libpath \"${libraryFileName}\" PATH)\n\t\t\tif(EXISTS \"${libpath}\")\n\t\t\t\tlist(APPEND libPaths \"${libpath}\")\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n\n    ## This macro is used internaly here to recursilvely get path of LINK_LIBRARIES of each non imported target\n    ## Typically if you have 2 internal dependencies between cmake targets, we want cmake to be able to get back path where are these dependencies\n    macro(recurseDepList target)\n        get_target_property(linkLibs ${target} LINK_LIBRARIES)\n        foreach(lib ${linkLibs})\n            string(FIND ${lib} \">\" strId) ## cmake is using generator-expression?\n\t\t\tif(TARGET ${lib})\n\t\t\t\t## Skipping interface libraries as they're system ones\n                get_target_property(type ${lib} TYPE)\n\t\t\t\tget_target_property(imported ${lib} IMPORTED)\n\t\t\t\tif(type STREQUAL \"INTERFACE_LIBRARY\")\n\t\t\t\t\tget_target_property(imp_loc ${lib} INTERFACE_IMPORTED_LOCATION)\n\t\t\t\t\tif(imp_loc)\n\t\t\t\t\t\tget_filename_component(imp_loc ${imp_loc} PATH)\n\t\t\t\t\t\tlist(APPEND targetLibPath ${imp_loc})\n\t\t\t\t\tendif()\n\t\t\t\t\tget_target_property(loc ${lib} INTERFACE_LOCATION)\n\t\t\t\t\tif(loc)\n\t\t\t\t\t\tget_filename_component(loc ${loc} PATH)\n\t\t\t\t\t\tlist(APPEND targetLibPath ${loc})\n\t\t\t\t\tendif()\n                ## it's not a path but a single target name\n                ## for build-target which are part of the current cmake configuration : nothing to do as cmake already know the output path\n                ## for imported target, we need to look for theire imported location\n                elseif(imported)\n                    get_target_property(imp_loc ${lib} IMPORTED_LOCATION)\n                    if(imp_loc)\n                        get_filename_component(imp_loc ${imp_loc} PATH)\n                        list(APPEND targetLibPath ${imp_loc})\n                    endif()\n                    get_target_property(loc ${lib} LOCATION)\n                    if(loc)\n                        get_filename_component(loc ${loc} PATH)\n                        list(APPEND targetLibPath ${loc})\n                    endif()\n                else()\n                    recurseDepList(${lib})\n                endif()\n            elseif(NOT ${strId} MATCHES -1) ## mean cmake use generator-expression (CMAKE VERSION > 3.0)\n                string(REGEX MATCH      \">:[@A-Za-z_:/.0-9-]+\"           targetLibPath ${lib})\n                string(REGEX REPLACE    \">:([@A-Za-z_:/.0-9-]+)\" \"\\\\1\"   targetLibPath ${targetLibPath})\n                get_filename_component(targetLibPath ${targetLibPath} PATH)\n            elseif(EXISTS ${lib})\n                set(targetLibPath ${lib})\n                get_filename_component(targetLibPath ${targetLibPath} PATH)\n            else()\n                #message(STATUS \"[install_runtime] skip link library : ${lib} , of target ${target}\")\n            endif()\n            if(targetLibPath)\n                list(APPEND targetLinkLibsPathList ${targetLibPath})\n            endif()\n        endforeach()\n        if(targetLinkLibsPathList)\n            list(REMOVE_DUPLICATES targetLinkLibsPathList)\n        endif()\n    endmacro()\n    if(inst_run_TARGET)\n        recurseDepList(${inst_run_TARGET})\n        if(targetLinkLibsPathList)\n            list(APPEND libPaths ${targetLinkLibsPathList})\n        endif()\n    endif()\n\n\tif(libPaths)\n\t\tlist(REMOVE_DUPLICATES libPaths)\n        foreach(libPath ${libPaths})\n            get_filename_component(path ${libPath} PATH)\n            list(APPEND libPaths ${path})\n        endforeach()\n\tendif()\n\n\n\t## possible speciale dir(s) according to the build system and OS\n\tif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\t\tset(BUILD_TYPES_FOR_DLL \"x64\")\n\t\tif(WIN32)\n\t\t\tlist(APPEND BUILD_TYPES_FOR_DLL \"Win64\")\n\t\tendif()\n\telse()\n\t\tset(BUILD_TYPES_FOR_DLL \"x86\")\n\t\tif(WIN32)\n\t\t\tlist(APPEND BUILD_TYPES_FOR_DLL \"Win32\")\n\t\tendif()\n\tendif()\n\n\n\t## Try to append as more as possible paths to find dependencies (here, mainly for *.dll)\n\tforeach(dir ${inst_run_DIRS} ${libPaths})\n\t\tif(EXISTS \"${dir}/bin\")\n\t\t\tlist(APPEND inst_run_DIRS \"${dir}/bin\")\n        elseif(EXISTS \"${dir}\")\n            list(APPEND inst_run_DIRS \"${dir}\")\n\t\tendif()\n\tendforeach()\n    list(REMOVE_DUPLICATES inst_run_DIRS)\n\tforeach(dir ${inst_run_DIRS})\n\t\tif(EXISTS \"${dir}\")\n\t\t\tlist(APPEND argDirs ${dir})\n\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tendif()\n\t\t\t\tendif()\n\t\t\tendforeach()\n\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\tif(EXISTS \"${dir}/${OUTPUTCONFIG}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${OUTPUTCONFIG}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendforeach()\n\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\tif(EXISTS \"${dir}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n\tif(argDirs)\n\t\tlist(REMOVE_DUPLICATES argDirs)\n\tendif()\n\n\n\t## Try to append as more possible paths to find dependencies (here, mainly for *.dll)\n\tforeach(packageName ${inst_run_TARGET_PACKAGES})\n\t\tif(EXISTS \"${${packageName}_DIR}\")\n\t\t\tlist(APPEND packageDirs ${${packageName}_DIR})\n\t\t\tlist(APPEND packageDirs ${${packageName}_DIR}/bin)\n\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tendif()\n\t\t\t\tendif()\n\t\t\tendforeach()\n\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendforeach()\n\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\telse()\n\t\t\tset(${packageName}_DIR \"$ENV{${packageName}_DIR}\" CACHE PATH \"${packageName}_DIR root directory for looking for dirs containning *.dll\")\n\t\tendif()\n\tendforeach()\n\tif(packageDirs)\n\t\tlist(REMOVE_DUPLICATES packageDirs)\n\tendif()\n\n\n\tset(dirsToLookFor \"${EXEC_PATH}\")\n\tif(packageDirs)\n\t\tlist(APPEND dirsToLookFor ${packageDirs})\n\tendif()\n\tif(argDirs)\n\t\tlist(APPEND dirsToLookFor ${argDirs})\n\tendif()\n\tget_property(used_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)\n\tif (used_LINK_DIRECTORIES)\n\t\tlist(APPEND dirsToLookFor ${used_LINK_DIRECTORIES})\n\t\tlist(REMOVE_DUPLICATES dirsToLookFor)\n\tendif()\n\n\n    ## handle plugins\n\tset(pluginsList \"\")\n    include(parse_arguments_multi) ## this function will process recursively items of the sub-list [default print messages]\n    function(parse_arguments_multi_function results)\n        cmake_parse_arguments(pamf \"VERBOSE\" \"PLUGIN_PATH_DEST;FROM_REL_PATH;EXEC_PATH;COMPONENT\" \"\" ${ARGN}) ## EXEC_PATH and COMPONENT are for exclusive internal use\n\t\tlist(REMOVE_DUPLICATES pamf_UNPARSED_ARGUMENTS)\n        foreach(PLUGIN_PATH_NAME ${pamf_UNPARSED_ARGUMENTS})\n            if(EXISTS ${PLUGIN_PATH_NAME})\n                if(IS_DIRECTORY ${PLUGIN_PATH_NAME})\n                    if(pamf_VERBOSE)\n                        message(WARNING \"${PLUGIN_PATH_NAME} IS_DIRECTORY, cannot installed a directory, please give a path filename\")\n                    endif()\n                else()\n                    if(NOT pamf_PLUGIN_PATH_DEST)\n                        set(PLUGIN_PATH_DEST ${pamf_EXEC_PATH}) ## the default dest value\n\t\t\t\t\telse()\n\t\t\t\t\t\tset(PLUGIN_PATH_DEST ${pamf_PLUGIN_PATH_DEST})\n                    endif()\n\n\t\t\t\t\tif(pamf_FROM_REL_PATH)\n\t\t\t\t\t\tfile(TO_CMAKE_PATH ${PLUGIN_PATH_NAME} PLUGIN_PATH_NAME)\n\t\t\t\t\t\tget_filename_component(PLUGIN_PATH ${PLUGIN_PATH_NAME} PATH)\n\t\t\t\t\t\tunset(PLUGIN_PATH_LIST)\n\t\t\t\t\t\tunset(PLUGIN_PATH_LIST_COUNT)\n\t\t\t\t\t\tunset(PLUGIN_REL_PATH_LIST)\n\t\t\t\t\t\tunset(PLUGIN_REL_PATH)\n\t\t\t\t\t\tstring(REPLACE \"/\" \";\" PLUGIN_PATH_LIST ${PLUGIN_PATH}) ## create a list of dir\n\t\t\t\t\t\tlist(FIND \tPLUGIN_PATH_LIST ${pamf_FROM_REL_PATH} id)\n\t\t\t\t\t\tlist(LENGTH PLUGIN_PATH_LIST PLUGIN_PATH_LIST_COUNT)\n\t\t\t\t\t\tif(${id} GREATER 0)\n\t\t\t\t\t\t\tmath(EXPR id \"${id}+1\") ## matches relative path not include\n\t\t\t\t\t\t\tmath(EXPR PLUGIN_PATH_LIST_COUNT \"${PLUGIN_PATH_LIST_COUNT}-1\") ## the end of the list\n\t\t\t\t\t\t\tforeach(i RANGE ${id} ${PLUGIN_PATH_LIST_COUNT})\n\t\t\t\t\t\t\t\tlist(GET \tPLUGIN_PATH_LIST \t${i} out)\n\t\t\t\t\t\t\t\tlist(APPEND PLUGIN_REL_PATH_LIST \t${out})\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\t\tforeach(dir ${PLUGIN_REL_PATH_LIST})\n\t\t\t\t\t\t\t\tset(PLUGIN_REL_PATH \"${PLUGIN_REL_PATH}/${dir}\")\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tendif()\n\t\t\t\t\t\tset(PLUGIN_PATH_DEST ${PLUGIN_PATH_DEST}${PLUGIN_REL_PATH})\n\t\t\t\t\tendif()\n\n                    install(FILES ${PLUGIN_PATH_NAME} CONFIGURATIONS ${inst_run_CONFIG_TYPE} DESTINATION ${PLUGIN_PATH_DEST} COMPONENT ${pamf_COMPONENT})\n                    get_filename_component(pluginName ${PLUGIN_PATH_NAME} NAME)\n                    if(IS_ABSOLUTE ${PLUGIN_PATH_DEST})\n                    else()\n                        set(PLUGIN_PATH_DEST ${inst_run_INSTALL_FOLDER}/${PLUGIN_PATH_DEST})\n                    endif()\n                    list(APPEND pluginsList ${PLUGIN_PATH_DEST}/${pluginName})\n                endif()\n            else()\n                message(WARNING \"You need to provide a valid PLUGIN_PATH_NAME\")\n                set(pluginsList )\n            endif()\n        endforeach()\n        set(${results} ${pluginsList} PARENT_SCOPE)\n    endfunction()\n\n    if(inst_run_VERBOSE)\n        list(APPEND extra_flags_to_add VERBOSE)\n    endif()\n    list(APPEND extra_flags_to_add EXEC_PATH ${EXEC_PATH} COMPONENT ${inst_run_COMPONENT}) ## for internal use inside overloaded function\n    list(LENGTH inst_run_PLUGINS inst_run_PLUGINS_count)\n    if(${inst_run_PLUGINS_count} GREATER 0)\n        parse_arguments_multi(PLUGIN_PATH_NAME inst_run_PLUGINS ${inst_run_PLUGINS} ## see internal overload parse_arguments_multi_function for processing each sub-list\n                                NEED_RESULTS ${inst_run_PLUGINS_count}  ## this is used to check when we are in the first loop (in order to reset parse_arguments_multi_results)\n                                EXTRAS_FLAGS ${extra_flags_to_add}      ## this is used to allow catching additional internal flags of our overloaded function\n        )\n    endif()\n\n    #message(parse_arguments_multi_results = ${parse_arguments_multi_results})\n    list(APPEND pluginsList ${parse_arguments_multi_results})\n\n\n\n\t## Install rules for required system runtimes such as MSVCRxx.dll\n\tset(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP ON)\n\tinclude(InstallRequiredSystemLibraries)\n\tif(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)\n\t\tinstall(FILES \t\t\t${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}\n\t\t\t\tCONFIGURATIONS \t${inst_run_CONFIG_TYPE}\n\t\t\t\tDESTINATION \t${EXEC_PATH}\n\t\t\t\tCOMPONENT   \t${inst_run_COMPONENT}\n\t\t)\n\tendif()\n\n\t## print what we are doing to do\n\tif(inst_run_VERBOSE)\n\t\tmessage(STATUS \"[install_runtime] On install target call, cmake will try to resolve dependencies for given app:\\n ${installedFilePathTargetAppToResolve} (with plausible postfix: ${inst_run_PLAUSIBLES_POSTFIX})\")\n\t\tif(pluginsList)\n\t\t\tmessage(STATUS \"   and also for plugins :\")\n\t\t\tforeach(plugin ${pluginsList})\n\t\t\t\tmessage(STATUS \"      ${plugin}\")\n\t\t\tendforeach()\n\t\tendif()\n\t\tmessage(STATUS \"   Looking for dependencies into:\")\n\t\tforeach(dir ${dirsToLookFor})\n\t\t\tmessage(STATUS \"      ${dir}\")\n\t\tendforeach()\n\tendif()\n\n\t## Install rules for required dependencies libs/plugins for the target app\n\t## will resolve all installed target files with config modes postfixes\n\tstring(TOUPPER ${inst_run_CONFIG_TYPE} inst_run_CONFIG_TYPE_UC)\n\tget_target_property(postfix ${inst_run_TARGET} \"${inst_run_CONFIG_TYPE_UC}_POSTFIX\")\n\tinstall(CODE \"set(target \t\t\t\t\t\t\\\"${inst_run_TARGET}\\\")\" \t\t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(inst_run_CONFIG_TYPE \t\t\t\\\"${inst_run_CONFIG_TYPE}\\\")\" \t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(inst_run_INSTALL_FOLDER \t\t\\\"${inst_run_INSTALL_FOLDER}\\\")\" \t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(app\t \t\t\t\t\t\t\\\"${EXEC_PATH}/${EXEC_NAME}${postfix}${CMAKE_EXECUTABLE_SUFFIX}\\\")\" \tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(dirsToLookFor \t\t\t\t\\\"${dirsToLookFor}\\\")\" \t\t\t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE\n\t\t[[\n\t\t\tif(\"${CMAKE_INSTALL_CONFIG_NAME}\" STREQUAL \"${inst_run_CONFIG_TYPE}\")\n\t\t\t\tmessage(STATUS \"Installing ${target} dependencies...\")\n\n\t\t\t\tfile(GET_RUNTIME_DEPENDENCIES\n\t\t\t\t\tEXECUTABLES ${app}\n\t\t\t\t\tRESOLVED_DEPENDENCIES_VAR _r_deps\n\t\t\t\t\tUNRESOLVED_DEPENDENCIES_VAR _u_deps\n\t\t\t\t\tCONFLICTING_DEPENDENCIES_PREFIX _c_deps\n\t\t\t\t\tDIRECTORIES ${dirsToLookFor}\n\t\t\t\t\tPRE_EXCLUDE_REGEXES \"api-ms-*\"\n\t\t\t\t\tPOST_EXCLUDE_REGEXES \".*system32/.*\\\\.dll\" \".*SysWOW64/.*\\\\.dll\"\n\t\t\t\t)\n\t\t\t\n\t\t\t\tif(_u_deps)\n\t\t\t\t\tmessage(WARNING \"There were unresolved dependencies for executable ${EXEC_FILE}: \\\"${_u_deps}\\\"!\")\n\t\t\t\tendif()\n\t\t\t\tif(_c_deps_FILENAMES)\n\t\t\t\t\tmessage(WARNING \"There were conflicting dependencies for executable ${EXEC_FILE}: \\\"${_c_deps_FILENAMES}\\\"!\")\n\t\t\t\tendif()\n\t\t\t\n\t\t\t\tforeach(_file ${_r_deps})\n\t\t\t\t\tfile(INSTALL\n\t\t\t\t\tDESTINATION \"${inst_run_INSTALL_FOLDER}/bin\"\n\t\t\t\t\tTYPE SHARED_LIBRARY\n\t\t\t\t\tFOLLOW_SYMLINK_CHAIN\n\t\t\t\t\tFILES \"${_file}\"\n\t\t\t\t)\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\t]]\n\t   COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}\n\t)\n\nendfunction()\n\n## High level macro to install resources in the correct folder\n##\n## EXECUTABLE: [opt] option to copy files as programs\n## RELATIVE  : [opt] copy files relatively to current folder\n## TYPE      : [opt] type and folder where to store the files\n## FOLDER    : [opt] subfolder to use\n## FILES     : [opt] contains a list of resources files to copy to install folder\nmacro(ibr_install_rsc target)\n\tcmake_parse_arguments(install_rsc_${target} \"EXECUTABLE;RELATIVE\" \"TYPE;FOLDER\" \"FILES\" ${ARGN})\n\tset(rsc_target \"${target}_${install_rsc_${target}_TYPE}\")\n\n\tif(install_rsc_${target}_FOLDER)\n\t\tset(rsc_folder \"${install_rsc_${target}_TYPE}/${install_rsc_${target}_FOLDER}\")\n\telse()\n\t\tset(rsc_folder \"${install_rsc_${target}_TYPE}\")\n\tendif()\n\n\tadd_custom_target(${rsc_target}\n\t\t\t\t\tCOMMENT \"run the ${install_rsc_${target}_TYPE} installation only for ${target} (component ${rsc_target})\"\n\t\t\t\t\tVERBATIM)\n\tforeach(scriptFile ${install_rsc_${target}_FILES})\n\t\tif(install_rsc_${target}_RELATIVE)\n\t\t\tfile(RELATIVE_PATH relativeFilename ${CMAKE_CURRENT_SOURCE_DIR} ${scriptFile})\n\t\telse()\n\t\t\tget_filename_component(relativeFilename ${scriptFile} NAME)\n\t\tendif()\n\n\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\tadd_custom_command(TARGET ${rsc_target} POST_BUILD\n\t\t\t\t\t\t\tCOMMAND ${CMAKE_COMMAND} -E\n\t\t\t\t\t\t\tcopy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}/${relativeFilename})\n\t\tendif()\n\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\tadd_custom_command(TARGET ${rsc_target} POST_BUILD\n\t\t\t\t\t\t\tCOMMAND ${CMAKE_COMMAND} -E\n\t\t\t\t\t\t\tcopy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}/${relativeFilename})\n\t\tendforeach()\n\tendforeach()\n\n\tget_target_property(INSTALL_RSC_BUILD_FOLDER ${target} FOLDER)\n\tset_target_properties(${rsc_target} PROPERTIES FOLDER ${INSTALL_RSC_BUILD_FOLDER})\n\n\tadd_dependencies(${target} ${rsc_target})\n\tadd_dependencies(PREBUILD ${rsc_target})\n\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tresourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CMAKE_BUILD_TYPE} FILE_PATH \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/ibr_resources.ini\")\n\t\t\n\t\tif(install_rsc_${target}_EXECUTABLE)\n\t\t\tinstall(\n\t\t\t\tPROGRAMS ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}\"\n\t\t\t)\n\t\telse()\n\t\t\tinstall(\n\t\t\t\tFILES ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}\"\n\t\t\t)\n\t\tendif()\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tresourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CONFIG_TYPES} FILE_PATH \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/ibr_resources.ini\")\n\t\t\n\t\tif(install_rsc_${target}_EXECUTABLE)\n\t\t\tinstall(\n\t\t\t\tPROGRAMS ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}\"\n\t\t\t)\n\t\telse()\n\t\t\tinstall(\n\t\t\t\tFILES ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}\"\n\t\t\t)\n\t\tendif()\n\tendforeach()\nendmacro()\n\n\n## High level macro to install in an homogen way all our ibr targets (it use some functions inside this file)\n##\n## RSC_FILE_ADD : [opt] is used to auto write/append relative paths of target resources into a common file\n## INSTALL_PDB  : [opt] is used to auto install PDB file (when using MSVC according to the target type)\n## STANDALONE   : [opt] bool ON/OFF var to call install_runtime or not (for bundle resolution)\n##       DIRS   : [opt] used if STANDALONE set to ON, see install_runtime doc\n##       PLUGINS: [opt] used if STANDALONE set to ON, see install_runtime doc\n## MSVC_CMD     : [opt] used to specify an absolute filePathName application to launch with the MSVC IDE Debugger associated to this target (project file)\n## MSVC_ARGS    : [opt] load the MSVC debugger with correct settings (app path, args, working dir)\n##\nmacro(ibr_install_target target)\n\tcmake_parse_arguments(ibrInst${target} \"VERBOSE;INSTALL_PDB\" \"COMPONENT;MSVC_ARGS;STANDALONE;RSC_FOLDER\" \"SHADERS;RESOURCES;SCRIPTS;DIRS;PLUGINS\" ${ARGN})\n\t\n\tif(ibrInst${target}_RSC_FOLDER)\n\t\tset(rsc_folder \"${ibrInst${target}_RSC_FOLDER}\")\n\telse()\n\t\tset(rsc_folder \"${target}\")\n\tendif()\n\n\tif(ibrInst${target}_SHADERS)\n\t\tibr_install_rsc(${target} EXECUTABLE TYPE \"shaders\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_SHADERS}\")\n    endif()\n\t\n\tif(ibrInst${target}_RESOURCES)\n\t\tibr_install_rsc(${target} TYPE \"resources\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_RESOURCES}\")\n    endif()\n\t\n\tif(ibrInst${target}_SCRIPTS)\n\t\tibr_install_rsc(${target} EXECUTABLE TYPE \"scripts\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_SCRIPTS}\")\n    endif()\n\n    if(ibrInst${target}_COMPONENT)\n        set(installCompArg COMPONENT ${ibrInst${target}_COMPONENT})\n        ## Create a custom install target based on COMPONENT\n        installTargetProject(${target} ${ibrInst${target}_COMPONENT})\n\tendif()\n\t\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tset_target_properties(${target} PROPERTIES ${CMAKE_BUILD_TYPE}_POSTFIX \t\"${CMAKE_${CMAKE_BUILD_TYPE}_POSTFIX}\")\n\t\tget_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CMAKE_BUILD_TYPE}_POSTFIX)\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tset_target_properties(${target} PROPERTIES ${CONFIG_TYPES_UC}_POSTFIX \t\"${CMAKE_${CONFIG_TYPES_UC}_POSTFIX}\")\n\t\tget_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CONFIG_TYPES_UC}_POSTFIX)\n\tendforeach()\n\n\t## Specify default installation rules\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t\tRUNTIME \tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t)\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t)\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t\tRUNTIME \tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t)\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t)\n\tendforeach()\n\n    if(ibrInst${target}_INSTALL_PDB)\n        if(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\tinstallPDB(${target} ${CMAKE_BUILD_TYPE}\n\t\t\t\tLIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t\tARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t\tRUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t)\n        endif()\n        foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\tinstallPDB(${target} ${CONFIG_TYPES}\n\t\t\t\tLIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\tARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\tRUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t)\n        endforeach()\n    endif()\n\n    ## install dynamic necessary dependencies\n    if(ibrInst${target}_STANDALONE)\n        get_target_property(type ${target} TYPE)\n        if(${type} MATCHES \"EXECUTABLE\")\n\n            if(ibrInst${target}_VERBOSE)\n                set(VERBOSE VERBOSE)\n            else()\n                set(VERBOSE )\n\t\t\tendif()\n\t\t\t\n\t\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\t\tinstall_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} ## default relative to CMAKE_INSTALL_PREFIX\n\t\t\t\t\tINSTALL_FOLDER\t\t\"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}\"\n\t\t\t\t\tCONFIG_TYPE\t\t\t${CMAKE_BUILD_TYPE}\n\t\t\t\t\t${VERBOSE}\n\t\t\t\t\tTARGET              ${target}\n\t\t\t\t\t${installCompArg}\n\t\t\t\t\tPLUGINS\t## will be installed\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_PLUGINS}\n\t\t\t\t\tDIRS\t\t\t\t${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_DIRS}\n\t\t\t\t)\n\t\t\tendif()\n\t\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\t\tinstall_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} ## default relative to CMAKE_INSTALL_PREFIX\n\t\t\t\t\tINSTALL_FOLDER\t\t\"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}\"\n\t\t\t\t\tCONFIG_TYPE\t\t\t${CONFIG_TYPES}\n\t\t\t\t\t${VERBOSE}\n\t\t\t\t\tTARGET              ${target}\n\t\t\t\t\t${installCompArg}\n\t\t\t\t\tPLUGINS\t## will be installed\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_PLUGINS}\n\t\t\t\t\tDIRS\t\t\t\t${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_DIRS}\n\t\t\t\t)\n\t\t\tendforeach()\n        else()\n            message(WARNING \"STANDALONE option is only compatible with EXECUTABLES target type. Skip the STANDALONE installation process.\")\n        endif()\n    endif()\n\n    ## Provide a way to directly load the MSVC debugger with correct settings\n    if(MSVC)\n        if(ibrInst${target}_MSVC_CMD)  ## command absolute filePathName is optional as the default is to use the installed target file application\n            set(msvcCmdArg  COMMAND ${ibrInst${target}_MSVC_CMD}) ## flag following by the value (both to pass to the MSVCsetUserCommand function)\n        endif()\n        if(ibrInst${target}_MSVC_ARGS) ## args (between quotes) are optional\n            set(msvcArgsArg ARGS ${ibrInst${target}_MSVC_ARGS})   ## flag following by the value (both to pass to the MSVCsetUserCommand function)\n        endif()\n        get_target_property(type ${target} TYPE)\n        if( (ibrInst${target}_MSVC_CMD OR ibrInst${target}_MSVC_ARGS) OR (${type} MATCHES \"EXECUTABLE\") )\n\t\t\tinclude(MSVCsetUserCommand)\n\t\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\t\tMSVCsetUserCommand(\t${target}\n\t\t\t\t\tPATH \t\t\t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}} ##FILE option not necessary since it deduced from targetName\n\t\t\t\t\t\t\t\t\tARGS\t\t\t\t\"${SIBR_PROGRAMARGS}\"\n\t\t\t\t\t${msvcCmdArg}\n\t\t\t\t\t#${msvcArgsArg}\n\t\t\t\t\tWORKING_DIR\t\t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}}\n\t\t\t\t)\n\t\t\tendif()\n\t\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\t\tMSVCsetUserCommand(\t${target}\n\t\t\t\t\tPATH \t\t\t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}} ##FILE option not necessary since it deduced from targetName\n\t\t\t\t\t\t\t\t\tARGS\t\t\t\t\"${SIBR_PROGRAMARGS}\"\n\t\t\t\t\t${msvcCmdArg}\n\t\t\t\t\t#${msvcArgsArg}\n\t\t\t\t\tWORKING_DIR\t\t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}}\n\t\t\t\t)\n\t\t\tendforeach()\n        elseif(NOT ${type} MATCHES \"EXECUTABLE\")\n            #message(\"Cannot set MSVCsetUserCommand with target ${target} without COMMAND parameter as it is not an executable (skip it)\")\n        endif()\n    endif()\n\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/parse_arguments_multi.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(NOT WIN32 OR __parse_arguments_multi_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__parse_arguments_multi_cmake_INCLUDED__ ON)\nendif()\n\n## This macro allow to process repeating multi value args from a given function which use cmake_parse_arguments module.\n##\n## cmake_parse_arguments multi args standard behavior:\n##    function(foo)\n##        cmake_parse_arguments(arg \"\" \"\" \"MULTI\" ${ARGN})\n##        foreach(item IN LISTS arg_MULTI)\n##            message(STATUS \"${item}\")\n##        endforeach()\n##    endfunction()\n##    foo(MULTI x y MULTI z w)\n##  The above code outputs 'z' and 'w'. It originally expected it to output all of 'x' 'y' 'z' 'w'.\n##\n## Using this macro inside a function which want to handle repeating multi args values\n## will recursively iterate onto the multi tags list to process each sub list.\n## It take as 1st argument the subTag flag to separate sub list from the main multi list.\n## It take as 2nd argument the nameList of the main multi list (the multiValuesArgs from cmake_parse_arguments: here it is MULTI in the example)\n## and that's why it is important that it should be a macro and not a function (to get access to external variable).\n## Then you give the content of this list allowing to be processed by the macro.\n##\n## parse_arguments_multi macro call a parse_arguments_multi_function which do actually the process from the given sub-list.\n## By default this function only print infos about what variables you are trying to pass/process (only verbose messages),\n## but, by overloading this cmake function, you will be able to externalize the process of your multi argument list.\n##\n## Usage (into a function) : \n## parse_arguments_multi(<multiArgsSubTag> <multiArgsList> <multiArgsListContent> \n##      [NEED_RESULTS <multiArgsListSize>] [EXTRAS_FLAGS <...> <...> ...]\n## )\n##\n## Simple usage example [user point of view]:\n## foo(MULTI\n##    SUB_MULTI x y\n##    SUB_MULTI z w\n## )\n##\n## Simple usage example [inside a function]:\n##    function(foo)\n##        cmake_parse_arguments(arg \"\" \"\" \"MULTI\" ${ARGN})\n##        include(parse_arguments_multi)\n##        function(parse_arguments_multi_function )\n##          #message(\"I'm an overloaded cmake function used by parse_arguments_multi\")\n##          #message(\"I'm processing first part of my sub list: ${ARGN}\")\n##          message(\"ARGV0=${ARGV0}\")\n##          message(\"ARGV1=${ARGV1}\")\n##        endfunction()\n##        parse_arguments_multi(SUB_MULTI arg_MULTI ${arg_MULTI}) ## this function will process recusively items of the sub-list [default print messages]\n##    endfunction()\n##\n##  Will print:\n##      ARGV0=z\n##      ARGV1=w\n##      ARGV0=x\n##      ARGV1=y\n##\n## WARNING : DO NEVER ADD EXTRA THINGS TO parse_arguments_multi MACRO :\n##          parse_arguments_multi(SUB_MULTI arg_MULTI ${arg_MULTI} EXTRAS foo bar SOMTHING) => will failed !!\n## use EXTRAS_FLAGS instead !!\n##\n## Advanced usage example [user point of view]:\n## bar(C:/prout/test.exe VERBOSE \n##      PLUGINS\n##          PLUGIN_PATH_NAME x      PLUGIN_PATH_DEST w\n##          PLUGIN_PATH_NAME a b    PLUGIN_PATH_DEST y\n##          PLUGIN_PATH_NAME c\n## )\n##\n## Advanced usage example [inside a function]:\n##    function(bar execFilePathName)\n##        cmake_parse_arguments(arg \"VERBOSE\" \"\" \"PLUGINS\" ${ARGN})\n##\n##        include(parse_arguments_multi)\n##        function(parse_arguments_multi_function results)\n##            cmake_parse_arguments(pamf \"VERBOSE\" \"PLUGIN_PATH_DEST;EXEC_PATH\" \"\" ${ARGN}) ## EXEC_PATH is for internal use\n##            message(\"\")\n##            message(\"I'm an overloaded cmake function used by parse_arguments_multi from install_runtime function\")\n##            message(\"I'm processing first part of my sub list: ${ARGN}\")\n##            message(\"PLUGIN_PATH_NAME = ${pamf_UNPARSED_ARGUMENTS}\")\n##            message(pamf_VERBOSE = ${pamf_VERBOSE})\n##            message(\"pamf_PLUGIN_PATH_DEST = ${pamf_PLUGIN_PATH_DEST}\")\n##            message(pamf_EXEC_PATH = ${pamf_EXEC_PATH})\n##            if(NOT ${pamf_PLUGIN_PATH_DEST})\n##              set(pamf_PLUGIN_PATH_DEST ${pamf_EXEC_PATH})\n##            endif()\n##            foreach(plugin ${pamf_UNPARSED_ARGUMENTS})\n##              get_filename_component(pluginName ${plugin} NAME)\n##              list(APPEND pluginsList ${pamf_PLUGIN_PATH_DEST}/${pluginName})\n##            endforeach()\n##            set(${results} ${pluginsList} PARENT_SCOPE)\n##        endfunction()\n##\n##        if(arg_VERBOSE)\n##            list(APPEND extra_flags_to_add VERBOSE) ## here we transmit the VERNOSE flag\n##        endif()\n##        get_filename_component(EXEC_PATH ${execFilePathName} PATH) ## will be the default value if PLUGIN_PATH_DEST option is not provided\n##        list(APPEND extra_flags_to_add EXEC_PATH ${EXEC_PATH})  \n##        list(LENGTH arg_PLUGINS arg_PLUGINS_count)\n##        parse_arguments_multi(PLUGIN_PATH_NAME arg_PLUGINS ${arg_PLUGINS}\n##                            NEED_RESULTS ${arg_PLUGINS_count}  ## this is used to check when we are in the first loop (in order to reset parse_arguments_multi_results)\n##                            EXTRAS_FLAGS ${extra_flags_to_add} ## this is used to allow catching VERBOSE and PLUGIN_PATH_DEST flags of our overloaded function\n##        )\n##    endfunction()\n##    message(parse_arguments_multi_results = ${parse_arguments_multi_results}) ## list of the whole pluginsList\n##    #Will print w/x;a/y;b/y;C:/prout/c\n##\n##  NOTE that here, since our overloaded function need to provide a result list, we use the other parse_arguments_multi_function signature (the which one with a results arg)\n##\n\nfunction(parse_arguments_multi_function_default) ## used in case of you want to reset the default behavior of this function process\n    message(\"[default function] parse_arguments_multi_function(ARGC=${ARGC} ARGV=${ARGV} ARGN=${ARGN})\")\n    message(\"This function is used by parse_arguments_multi and have to be overloaded to process sub list of multi values args\")\nendfunction()\n\nfunction(parse_arguments_multi_function )   ## => the function to overload\n    parse_arguments_multi_function_default(${ARGN})\nendfunction()\n\n## first default signature above\n##------------------------------\n## second results signature behind\n\nfunction(parse_arguments_multi_function_default result) ## used in case of you want to reset the default behavior of this function process\n    message(\"[default function] parse_arguments_multi_function(ARGC=${ARGC} ARGV=${ARGV} ARGN=${ARGN})\")\n    message(\"This function is used by parse_arguments_multi and have to be overloaded to process sub list of muluti values args\")\nendfunction()\n\nfunction(parse_arguments_multi_function result)   ## => the function to overload\n    parse_arguments_multi_function_default(result ${ARGN})\nendfunction()\n\n## => the macro to use inside your function which use cmake_parse_arguments\n# NOTE: entry point of parse_arguments_multi, which is called from win3rdPart)\nmacro(parse_arguments_multi multiArgsSubTag multiArgsList #<${multiArgsList}> the content of the list\n)\n    # message (STATUS \"\")\n    # message(STATUS \"calling parse_arguemnts_multi defined in parse_arguments_multi.cmake:141\")\n    # message(STATUS \"multiArgsSubTag = ${multiArgsSubTag}\")\t# CHECK_CACHED_VAR\n    # message(STATUS \"multiArgsList = ${multiArgsList}\")\t# it contains the name of the variable which is holding the list i.e w3p_MULTI_SET\n    # message(STATUS \"value of ${multiArgsList} = ${${multiArgsList}}\") # a semicolon separated list of values passed to SET or MULTISET keyword in win3rdParty\n    # message(STATUS \"actual values ARGN = ${ARGN}\")  # the same as ${${multiArgsList}}\n\n    ## INFO\n    ## starting from CMake 3.5 cmake_parse_arguments is not a module anymore and now is a native CMake command.\n    ## the behaviour is different though\n    ## In CMake 3.4, if you pass multiple times a multi_value_keyword, CMake returns the values of the LAST match\n    ## In CMake 3.5 and above, CMake returns the whole list of values that were following that multi_value_keyword\n    ## example:\n    ## cmake_parse_arguments(\n    ##\t\t\t<prefix>\n    ##\t\t\t\"\"\t\t# options\n    ##\t\t\t\"\"\t\t# one value keywords\n    ##\t\t\t\"MY_MULTI_VALUE_TAG\"\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value1 value2\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value3 value4\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value5 value6\n    ##\t\t\t)\n    ## result in CMake 3.4\n    ## <prefix>_MY_MULTI_VALUE_TAG = \"value5;value6\"\n    ##\n    ## result in CMake 3.8\n    ## <prefix>_MY_MULTI_VALUE_TAG = \"value5;value6\"\n\n    #include(CMakeParseArguments) #module CMakeParseArguments is obsolete since cmake 3.5\n    # cmake_parse_arguments (<prefix> <options> <one_value_keywords> <multi_value_keywords> args)\n    # <options> : options (flags) pass to the macro\n    # <one_value_keywords> : options that neeed a value\n    # <multi_value_keywords> : options that neeed more than one value\n    cmake_parse_arguments(_pam \"\" \"NEED_RESULTS\" \"${multiArgsSubTag};EXTRAS_FLAGS\" ${ARGN})\n    \n    ## multiArgsList is the name of the list used by the multiValuesOption flag from the cmake_parse_arguments of the user function\n    ## that's why we absolutly need to use MACRO here (and also for passing parse_arguments_multi_results when NEED_RESULTS flag is set)\n    \n    ## for debugging\n    #message(\"\")\n    #message(\"[parse_arguments_multi] => ARGN = ${ARGN}\")\n    #message(\"_pam_NEED_RESULTS=${_pam_NEED_RESULTS}\")\n    #message(\"_pam_EXTRAS_FLAGS=${_pam_EXTRAS_FLAGS}\")\n    # foreach(var ${_pam_${multiArgsSubTag}})\n    #     message(\"arg=${var}\")\n    # endforeach()\n\n    if (${CMAKE_VERSION} VERSION_GREATER \"3.5\")\n        # lets make ${_pam_${multiArgsSubTag}} behave as it is in version 3.4\n        # that means, cmake_parse_arguments should have only the last values of a multi set for a given keyword\n\n        # message(\"\")\n        # message(\"values in multiArgsList\")\n        # foreach(val ${${multiArgsList}})\n        #     message(STATUS ${val})\n        # endforeach()\n        # message(\"end values in multiArgsList\")\n\n\n        set(lastIndexFound OFF)\n        list(LENGTH ${multiArgsList} argnLength)\n        # message(${argnLength})\n        math(EXPR argnLength \"${argnLength}-1\")             # make last index a valid one\n        set(recordIndex 0)\n        set(records \"\")                                     # clear records list\n        set(record0 \"\")                                    # clear first record list\n        foreach(iter RANGE ${argnLength})\n            list(GET ${multiArgsList} ${iter} value)\n            # message(STATUS \"index=${iter} value=${value}\")\n            if (${value} STREQUAL ${multiArgsSubTag})\n                if (lastIndexFound)\n                    list(APPEND records ${recordIndex})    # records store the list NAMES\n                    math(EXPR recordIndex \"${recordIndex}+1\")\n                    set(record${recordIndex} \"\")            # clear record list\n                else ()\n                    set(lastIndexFound ON)\n                endif()\n\n                set(lastIndex ${iter})\n            else ()\n                if (lastIndexFound)\n                    # message(${value})\n                    list(APPEND record${recordIndex} ${value})\n                endif()\n            endif()\n        endforeach()\n\n        # save the last list of values\n        if (lastIndexFound)\n            list(APPEND records ${recordIndex})    # records store the list NAMES\n        endif()\n\n        # set multiArgsList to make it behave like CMake 3.4\n        # message(\"\")\n        # message(\"using my records\")\n        foreach(recordName ${records})\n            # message(${recordName})\n            # foreach(value ${record${recordName}})\n            #     message(${value})\n            # endforeach()\n            # message(\"\")\n            set(_pam_${multiArgsSubTag} ${record${recordName}})\n        endforeach()\n        # message(${_pam_${multiArgsSubTag}})\n\n        # message(\"\")\n        # message(\"using argn\")\n        # foreach(value ${ARGN})\n        #     message(${value})\n        # endforeach()\n    endif() # end if cmake > 3.5\n\n    # message(\"values with pam ${_pam_${multiArgsSubTag}}\")\n\n    ## check and init\n    list(LENGTH ${multiArgsList} globalListCount)\t# GLUT_TRACE: globalListCound=16 in CMake3.4 and CMake3.8\n    # message(STATUS \"nr items in multiArgsList: ${globalListCount}\")\n    math(EXPR globalListCount \"${globalListCount}-1\") ## because it will contain [multiArgsSubTag + ${multiArgsList}]\n    if(_pam_NEED_RESULTS)\n        if(${globalListCount} EQUAL ${_pam_NEED_RESULTS})\n            ## first time we enter into this macro (because we call it recursively)\n            unset(parse_arguments_multi_results)\n        endif()\n    endif()\n    \n    ## process the part of the multi agrs list\n    ## ${ARGN} shouldn't be passed to the function in order to avoid missmatch size list ${multiArgsList} and _pam_${multiArgsSubTag}\n    ## if you want to pass extra internal flags from your function to this callback, use EXTRAS_FLAGS\n    if(_pam_NEED_RESULTS)\n        parse_arguments_multi_function(parse_arguments_multi_function_result ${_pam_${multiArgsSubTag}} ${_pam_EXTRAS_FLAGS})\n        list(APPEND parse_arguments_multi_results ${parse_arguments_multi_function_result})\n    else()\n        # message(STATUS \"about to call parse_arguments_multi_function in parse_arguments_multi.cmake:177 ${_pam_${multiArgsSubTag}} and extra flags ${_pam_EXTRAS_FLAGS}\")\n        parse_arguments_multi_function(${_pam_${multiArgsSubTag}} ${_pam_EXTRAS_FLAGS})\n    endif()\n\n    ## remove just processed items from the main list to process (multiArgsList)\n    list(REVERSE ${multiArgsList})\n    list(LENGTH _pam_${multiArgsSubTag} subTagListCount)\n    unset(ids)\n    foreach(id  RANGE ${subTagListCount})\n         list(APPEND ids ${id})\n    endforeach()\n    list(REMOVE_AT  ${multiArgsList} ${ids})\n    list(REVERSE    ${multiArgsList})\n    \n    ## test if remain sub multi list to process (recursive call) or finish the process\n    list(LENGTH ${multiArgsList} mainTagListCount)\n    if(${mainTagListCount} GREATER 1)\n        ## do not pass ${ARGN} just because it will re pass the initial 2 inputs args and we wont as they was consumed (in order to avoir conflicts)\n        # message(STATUS \"about to call a parse_arguments_multi but without knowing where the definition is going to be taken from\")\n        parse_arguments_multi(${multiArgsSubTag} ${multiArgsList} ${${multiArgsList}} \n                                NEED_RESULTS ${_pam_NEED_RESULTS} EXTRAS_FLAGS ${_pam_EXTRAS_FLAGS}\n            )\n    endif()\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/linux/sibr_library.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n# NOTE\n# This feature is used to easily download, store and link external dependencies. This\n# requires to prepare pre-compiled libraries (to download). For now, packages have\n# only be prepare for Windows 64-bit with Visual Studio 2012. (You should re-build\n# everything if you want to use another version of Visual Studio/ another compiler).\n\n# NOTE ABOUT UNIX SYSTEMS\n# There is no need for \"searching mechanism\". This function is discard and your\n# libraries should be installed is the standard folders that are:\n#\n# /usr/include/\n# /usr/lib/\n# /usr/lib64/\n# for packages downloaded using apt-get/yum\n# \n# /usr/local/include/\n# /usr/local/lib/\n# /usr/local/lib64/\n# for packages manually installed (\"make install\")\n#\n# if you encounter problems when linking (e.g. lib not found even if it is installed),\n# please check these folders are in your search PATH environment variables.\n\nset(EXTLIBS_PACKAGE_FOLDER \"${CMAKE_SOURCE_DIR}/extlibs\")\n\nfunction(sibr_addlibrary)\n    if(NOT WIN32)\n        return()\n    endif()\n\n    file(MAKE_DIRECTORY ${EXTLIBS_PACKAGE_FOLDER})\n    cmake_parse_arguments(args \"VCID\" \"VERBOSE;TIMEOUT;DEFAULT_USE;NAME;VERSION;MSVC11;MSVC12;MSVC14;MSVC17\" \"MULTI_SET;SET\" ${ARGN})\n\n\n    if (NOT \"${args_VERSION}\" MATCHES \"\")\n        message(WARNING \"VERSION is not implemented yet\")\n    endif()\n\n    set(lcname \"\")\n    set(ucname \"\")\n    string(TOLOWER \"${args_NAME}\" lcname)\n    string(TOUPPER \"${args_NAME}\" ucname)\n\n    set(LIB_PACKAGE_FOLDER \"${EXTLIBS_PACKAGE_FOLDER}/${lcname}\")\n    win3rdParty(${ucname}\n                    $<args_VCID:VCID>\n                    VERBOSE     ${args_VERBOSE}\n                    TIMEOUT     ${args_TIMEOUT}\n                    DEFAULT_USE ${args_DEFAULT_USE}\n                    MSVC11 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC11}\"\n                    MSVC12 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC12}\"\n                    MSVC14 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC14}\" # TODO SV: make sure to build this library if required\n\t\t\t\t\tMSVC17 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC17}\"\n                    SET         ${args_SET}\n                    MULTI_SET   ${args_MULTI_SET}\n                )\n\t\t\t\n    # Add include/ directory\n    # and lib/ directories\n\n    # TODO SV: paths not matching with current hierarchy. example: libraw/libraw-0.17.1/include\n    # SR:\tThe link directories will also be used to lookup for dependency DLLs to copy in the install directory.\n    #\t\tSome libraries put the DLLs in the bin/ directory, so we include those.\n    file(GLOB subdirs RELATIVE ${LIB_PACKAGE_FOLDER} ${LIB_PACKAGE_FOLDER}/*)\n    set(dirlist \"\")\n    foreach(dir ${subdirs})\n        if(IS_DIRECTORY ${LIB_PACKAGE_FOLDER}/${dir})\n            # message(\"adding ${LIB_PACKAGE_FOLDER}/${dir}/include/ to the include directories\")\n            include_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/include/\")\n            # message(\"adding ${LIB_PACKAGE_FOLDER}/${dir}/lib[64] to the link directories\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/lib/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/lib64/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/bin/\")\n        endif()\n    endforeach()\n\nendfunction()\n\ninclude(FetchContent)\ninclude(git_describe)\ninclude(install_runtime)\n\nfunction(sibr_gitlibrary)\n    cmake_parse_arguments(args \"\" \"TARGET;GIT_REPOSITORY;GIT_TAG;ROOT_DIR;SOURCE_DIR\" \"INCLUDE_DIRS\" ${ARGN})\n    if(NOT args_TARGET)\n        message(FATAL \"Error on sibr_gitlibrary : please define your target name.\")\n        return()\n    endif()\n\n    if(NOT args_ROOT_DIR)\n        set(args_ROOT_DIR ${args_TARGET})\n    endif()\n\n    if(NOT args_SOURCE_DIR)\n        set(args_SOURCE_DIR ${args_TARGET})\n    endif()\n\n    if(args_GIT_REPOSITORY AND args_GIT_TAG)\n        if(EXISTS ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}/.git)\n            git_describe(\n                PATH ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n                GIT_URL SIBR_GITLIBRARY_URL\n                GIT_BRANCH SIBR_GITLIBRARY_BRANCH\n                GIT_COMMIT_HASH SIBR_GITLIBRARY_COMMIT_HASH\n                GIT_TAG SIBR_GITLIBRARY_TAG\n            )\n\n            if((SIBR_GITLIBRARY_URL STREQUAL args_GIT_REPOSITORY) AND\n                ((SIBR_GITLIBRARY_BRANCH STREQUAL args_GIT_TAG) OR\n                 (SIBR_GITLIBRARY_TAG STREQUAL args_GIT_TAG) OR\n                 (SIBR_GITLIBRARY_COMMIT_HASH STREQUAL args_GIT_TAG)))\n                message(STATUS \"Library ${args_TARGET} already available, skipping.\")\n                set(SIBR_GITLIBRARY_DECLARED ON)\n            else()\n                message(STATUS \"Adding library ${args_TARGET} from git...\")\n            endif()\n        endif()\n\n        FetchContent_Declare(${args_TARGET}\n            GIT_REPOSITORY \t${args_GIT_REPOSITORY}\n            GIT_TAG\t\t\t${args_GIT_TAG}\n            GIT_SHALLOW\t\tON\n            SOURCE_DIR \t\t${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n            SUBBUILD_DIR    ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild\n            BINARY_DIR      ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build\n        )\n        FetchContent_GetProperties(${args_TARGET})\n        string(TOLOWER \"<name>\" lcTargetName)\n\n        if((NOT SIBR_GITLIBRARY_DECLARED) AND (NOT ${lcTargetName}_POPULATED))\n            message(STATUS \"Populating library ${args_TARGET}...\")\n            FetchContent_Populate(${args_TARGET} QUIET\n                GIT_REPOSITORY \t${args_GIT_REPOSITORY}\n                GIT_TAG\t\t\t${args_GIT_TAG}\n                SOURCE_DIR \t\t${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n                SUBBUILD_DIR    ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild\n                BINARY_DIR      ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build\n            )\n        endif()\n\n        add_subdirectory(${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build)\n\n        get_target_property(type ${args_TARGET} TYPE)\n        if(NOT (type STREQUAL \"INTERFACE_LIBRARY\"))\n            set_target_properties(${args_TARGET} PROPERTIES FOLDER \"extlibs\")\n\n            ibr_install_target(${args_TARGET}\n                COMPONENT   ${args_TARGET}_install  ## will create custom target to install only this project\n            )\n        endif()\n\n        list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR})\n        list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR})\n\n        foreach(args_INCLUDE_DIR ${args_INCLUDE_DIRS})\n            list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR}/${args_INCLUDE_DIR})\n        endforeach()\n\n        include_directories(${${args_TARGET}_INCLUDE_DIRS})\n    else()\n        message(FATAL \"Error on sibr_gitlibrary for target ${args_TARGET}: missing git tag or git url.\")\n    endif()\nendfunction()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/MSVCsetUserCommand.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__MSVCsetUserCommand_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__MSVCsetUserCommand_cmake_INCLUDED__ ON)\nendif()\n\n## Allow to configure the Debugger settings of visual studio\n## Note: Using this command under linux doesn't affect anything\n## On run Debug Windows local : visual will try to load a specific COMMAND with ARGS in the provided WORKING_DIR\n##\n## usage:\n## MSVCsetUserCommand(\t<targetName>\n##    [COMMAND \t\t\t<myCustomAppToLaunch> | [ PATH <myCustomDirWhereIsDefaultTargetFileNameToLaunch> [FILE <myCustomExecFileToLaunch>] ] ]\n##    ARGS \t\t\t\t<associatedArguments>\n##    WORKING_DIR\t\t<whereStartTheProgram>\n## )\n##\n## Warning 1 : All arugments () must be passed under quotes\n## Warning 2 : WORKING_DIR path arg have to finish with remain slah '/'\n## Warning 3 : use COMMAND for external app OR PATH (optionaly with FILE) option(s) to set your built/installed/moved target\n##\n## Example 1:\n## include(MSVCsetUserCommand)\n## MSVCsetUserCommand(\tUnityRenderingPlugin\n## \t  COMMAND \t\t\t\"C:/Program Files (x86)/Unity/Editor/Unity.exe\"\n## \t  ARGS\t\t\t\t\"-force-opengl -projectPath \\\"${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject\\\"\"\n## \t  WORKING_DIR\t\t\"${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject\"\n## \t  VERBOSE\n## )\n##\n## Example 2:\n## include(MSVCsetUserCommand)\n## MSVCsetUserCommand(\tibrApp\n## \t  PATH \t\t\t\t\"C:/Program Files (x86)/workspace/IBR/install\"\n##\t  FILE\t\t\t\t\"ibrApp${CMAKE_EXECUTABLE_SUFFIX}\" ## this option line is optional since the target name didn't change between build and install step\n## \t  ARGS\t\t\t\t\"-path \\\"${CMAKE_HOME_DIRECTORY}/dataset\\\"\"\n## \t  WORKING_DIR\t\t\"${CMAKE_HOME_DIRECTORY}\"\n## \t  VERBOSE\n## )\n##\nfunction(MSVCsetUserCommand targetName)\n    cmake_parse_arguments(MSVCsuc \"VERBOSE\" \"PATH;FILE;COMMAND;ARGS;WORKING_DIR\" \"\" ${ARGN} )\n\n\t## If no arguments are given, do not create an unecessary .vcxproj.user file\n\tset(MSVCsuc_DEFAULT OFF)\n\n\tif(MSVCsuc_PATH AND MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(MSVCsuc_FILE AND MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(NOT MSVCsuc_COMMAND)\n\t\tif(MSVCsuc_PATH AND MSVCsuc_FILE)\n\t\t\tset(MSVCsuc_COMMAND \"${MSVCsuc_PATH}\\\\${MSVCsuc_FILE}\")\n\t\telseif(MSVCsuc_PATH)\n\t\t\tset(MSVCsuc_COMMAND \"${MSVCsuc_PATH}\\\\$(TargetFileName)\")\n\t\telse()\n\t\t\tset(MSVCsuc_COMMAND \"$(TargetPath)\") ## => $(TargetDir)\\$(TargetName)$(TargetExt)\n\t\tendif()\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n        # NOTE: there was a typo here. there is an else if written after else statement\n        # changing the order of the else if statement\n\tif(MSVCsuc_WORKING_DIR)\n\t\tfile(TO_NATIVE_PATH ${MSVCsuc_WORKING_DIR} MSVCsuc_WORKING_DIR)\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\telse()\n\t\tset(MSVCsuc_WORKING_DIR \"$(ProjectDir)\")\n\tendif()\n\n\tif(NOT MSVCsuc_ARGS)\n\t\tset(MSVCsuc_ARGS \"\")\n\telseif(MSVCsuc_DEFAULT)\n\t\tset(MSVCsuc_DEFAULT OFF)\n\tendif()\n\n\tif(MSVC10 OR (MSVC AND MSVC_VERSION GREATER 1600)) # 2010 or newer\n\n\t\tif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\t\t\tset(PLATEFORM_BITS x64)\n\t\telse()\n\t\t\tset(PLATEFORM_BITS Win32)\n\t\tendif()\n\n\t\tif(NOT MSVCsuc_DEFAULT AND PLATEFORM_BITS)\n\n\t\t\tfile(WRITE \"${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user\"\n\t\t\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\n<Project ToolsVersion=\\\"4.0\\\" xmlns=\\\"http://schemas.microsoft.com/developer/msbuild/2003\\\">\n  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Release|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n\t<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n    <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='MinSizeRel|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n    <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='RelWithDebInfo|${PLATEFORM_BITS}'\\\">\n    <LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>\n    <LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n    <LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>\n  </PropertyGroup>\n</Project>\"\n\t\t\t)\n\t\t\tif(MSVCsuc_VERBOSE)\n\t\t\t\tmessage(STATUS \"[MSVCsetUserCommand] Write ${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user file\")\n\t\t\t\tmessage(STATUS \"   to execute ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS}\")\n\t\t\t\tmessage(STATUS \"   from derectory ${MSVCsuc_WORKING_DIR}\")\n\t\t\t\tmessage(STATUS \"   on visual studio run debugger button\")\n\t\t\tendif()\n\n\t\telse()\n\t\t\tmessage(WARNING \"PLATEFORM_BITS is undefined...\")\n\t\tendif()\n\n\telse()\n\t\tif(MSVCsuc_VERBOSE)\n\t\t\tmessage(WARNING \"MSVCsetUserCommand is disable because too old MSVC is used (need MSVC10 2010 or newer)\")\n\t\tendif()\n\tendif()\n\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/Modules/FindASSIMP.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Try to find the ASSIMP library\n## Once done this will define\n##\n##  \tASSIMP_FOUND \t\t- system has ASSIMP\n##  \tASSIMP_INCLUDE_DIR \t- The ASSIMP include directory\n##  \tASSIMP_LIBRARIES \t- The libraries needed to use ASSIMP\n##  \tASSIMP_CMD \t\t\t- the full path of ASSIMP executable\n##\tASSIMP_DYNAMIC_LIB\t- the Assimp dynamic lib (available only on windows as .dll file for the moment)\n##\n## Edited for using a bugfixed version of Assimp\n\nif(NOT ASSIMP_DIR)\n    set(ASSIMP_DIR \"$ENV{ASSIMP_DIR}\" CACHE PATH \"ASSIMP root directory\")\nendif()\nif(ASSIMP_DIR)\n\tfile(TO_CMAKE_PATH ${ASSIMP_DIR} ASSIMP_DIR)\nendif()\n\n\n## set the LIB POSTFIX to find in a right directory according to what kind of compiler we use (32/64bits)\nif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\tset(ASSIMP_SEARCH_LIB \"lib64\")\n\tset(ASSIMP_SEARCH_BIN \"bin64\")\n\tset(ASSIMP_SEARCH_LIB_PATHSUFFIXE \"x64\")\nelse()\n\tset(ASSIMP_SEARCH_LIB \"lib32\")\n\tset(ASSIMP_SEARCH_BIN \"bin32\")\n\tset(ASSIMP_SEARCH_LIB_PATHSUFFIXE \"x86\")\nendif()\n\nset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\n\nFIND_PATH(ASSIMP_INCLUDE_DIR\n\tNAMES assimp/config.h\n\tPATHS\n\t\t${ASSIMP_DIR}\n\t\t## linux\n\t\t/usr\n\t\t/usr/local\n\t\t/opt/local\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/Assimp\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp\"\n\t\t\"$ENV{ProgramW6432}/Assimp\"\n\tPATH_SUFFIXES include\n)\n\n\nFIND_LIBRARY(ASSIMP_LIBRARY\n\tNAMES assimp-vc140-mt\n\tPATHS\n\t\t${ASSIMP_DIR}/${ASSIMP_SEARCH_LIB}\n\t\t${ASSIMP_DIR}/lib\n\t\t${ASSIMP_DIR}/lib64\n\t\t## linux\n\t\t/usr/${ASSIMP_SEARCH_LIB}\n\t\t/usr/local/${ASSIMP_SEARCH_LIB}\n\t\t/opt/local/${ASSIMP_SEARCH_LIB}\n\t\t/usr/lib\n\t\t/usr/local/lib\n\t\t/opt/local/lib\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{ProgramW6432}/Assimp/${ASSIMP_SEARCH_LIB}\"\n\t\t\"$ENV{PROGRAMFILES}/Assimp/lib\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/Assimp/lib\"\n\t\t\"$ENV{ProgramW6432}/Assimp/lib\"\n\tPATH_SUFFIXES ${ASSIMP_SEARCH_LIB_PATHSUFFIXE}\n)\nset(ASSIMP_LIBRARIES ${ASSIMP_LIBRARY})\n\n\nif(ASSIMP_LIBRARY)\n\tget_filename_component(ASSIMP_LIBRARY_DIR ${ASSIMP_LIBRARY} PATH)\n\tfile(GLOB ASSIMP_DYNAMIC_LIB \"${ASSIMP_LIBRARY_DIR}/assimp*.dll\")\n\tif(NOT ASSIMP_DYNAMIC_LIB)\n\t\tmessage(\"ASSIMP_DYNAMIC_LIB is missing... at ${ASSIMP_LIBRARY_DIR}\")\n\tendif()\n\tset(ASSIMP_DYNAMIC_LIB ${ASSIMP_DYNAMIC_LIB} CACHE PATH \"Windows dll location\")\nendif()\n\nMARK_AS_ADVANCED(ASSIMP_DYNAMIC_LIB ASSIMP_INCLUDE_DIR ASSIMP_LIBRARIES)\n\nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(ASSIMP\n\tREQUIRED_VARS ASSIMP_INCLUDE_DIR ASSIMP_LIBRARIES\n\tFAIL_MESSAGE \"ASSIMP wasn't found correctly. Set ASSIMP_DIR to the root SDK installation directory.\"\n)\n\nif(NOT ASSIMP_FOUND)\n\tset(ASSIMP_DIR \"\" CACHE STRING \"Path to ASSIMP install directory\")\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/Modules/FindEmbree.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Important Note:\n## This is not an official Find*cmake. It has been written for searching through\n## a custom path (EMBREE_DIR) before checking elsewhere.\n##\n## FindEMBREE.cmake\n## Find EMBREE's includes and library\n##\n## This module defines :\n## \t[in] \tEMBREE_DIR, The base directory to search for EMBREE (as cmake var or env var)\n## \t[out] \tEMBREE_INCLUDE_DIR where to find EMBREE.h\n## \t[out] \tEMBREE_LIBRARIES, EMBREE_LIBRARY, libraries to link against to use EMBREE\n## \t[out] \tEMBREE_FOUND, If false, do not try to use EMBREE.\n##\n\n\nif(NOT EMBREE_DIR)\n    set(EMBREE_DIR \"$ENV{EMBREE_DIR}\" CACHE PATH \"EMBREE root directory\")\nendif()\nif(EMBREE_DIR)\n\tfile(TO_CMAKE_PATH ${EMBREE_DIR} EMBREE_DIR)\nendif()\n\n\n## set the LIB POSTFIX to find in a right directory according to what kind of compiler we use (32/64bits)\nif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\tset(EMBREE_SEARCH_LIB \"lib64\")\n\tset(EMBREE_SEARCH_BIN \"bin64\")\n\tset(EMBREE_SEARCH_LIB_PATHSUFFIXE \"x64\")\nelse()\n\tset(EMBREE_SEARCH_LIB \"lib32\")\n\tset(EMBREE_SEARCH_BIN \"bin32\")\n\tset(EMBREE_SEARCH_LIB_PATHSUFFIXE \"x86\")\nendif()\n\nset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\nFIND_PATH(EMBREE_INCLUDE_DIR\n\tNAMES embree3/rtcore_geometry.h\n\tPATHS\n\t\t${EMBREE_DIR}\n\t\t## linux\n\t\t/usr\n\t\t/usr/local\n\t\t/opt/local\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/EMBREE\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE\"\n\t\t\"$ENV{ProgramW6432}/EMBREE\"\n\tPATH_SUFFIXES include\n)\n\nFIND_LIBRARY(EMBREE_LIBRARY\n\tNAMES embree3\n\tPATHS\n\t\t${EMBREE_DIR}/${EMBREE_SEARCH_LIB}\n\t\t${EMBREE_DIR}/lib\n\t\t## linux\n\t\t/usr/${EMBREE_SEARCH_LIB}\n\t\t/usr/local/${EMBREE_SEARCH_LIB}\n\t\t/opt/local/${EMBREE_SEARCH_LIB}\n\t\t/usr/lib\n\t\t/usr/local/lib\n\t\t/opt/local/lib\n\t\t## windows\n\t\t\"$ENV{PROGRAMFILES}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{ProgramW6432}/EMBREE/${EMBREE_SEARCH_LIB}\"\n\t\t\"$ENV{PROGRAMFILES}/EMBREE/lib\"\n\t\t\"$ENV{${PROGRAMFILESx86}}/EMBREE/lib\"\n\t\t\"$ENV{ProgramW6432}/EMBREE/lib\"\n\tPATH_SUFFIXES ${EMBREE_SEARCH_LIB_PATHSUFFIXE}\n)\nset(EMBREE_LIBRARIES ${EMBREE_LIBRARY})\n\nMARK_AS_ADVANCED(EMBREE_INCLUDE_DIR EMBREE_LIBRARIES)\n\nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(EMBREE\n\tREQUIRED_VARS EMBREE_INCLUDE_DIR EMBREE_LIBRARIES\n\tFAIL_MESSAGE \"EMBREE wasn't found correctly. Set EMBREE_DIR to the root SDK installation directory.\"\n)\n\nif(NOT EMBREE_FOUND)\n\tset(EMBREE_DIR \"\" CACHE STRING \"Path to EMBREE install directory\")\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/Modules/FindFFmpeg.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Try to find the FFMPEG library\n## Once done this will define\n##\n##  \tFFMPEG_FOUND \t\t- system has FFmpeg\n##  \tFFMPEG_INCLUDE_DIR \t- The FFmpeg include directory\n##  \tFFMPEG_LIBRARIES \t- The libraries needed to use FFmpeg\n##\t\tFFMPEG_DYNAMIC_LIBS\t- DLLs for windows\n\n\nif(NOT FFMPEG_DIR)\n    set(FFMPEG_DIR \"$ENV{FFMPEG_DIR}\" CACHE PATH \"FFMPEG_DIR root directory\")\nendif()\n\nif(FFMPEG_DIR)\n\tfile(TO_CMAKE_PATH ${FFMPEG_DIR} FFMPEG_DIR)\nendif()\n\nMACRO(FFMPEG_FIND varname shortname headername)\n\t\n\t# Path to include dirs\n\tFIND_PATH(FFMPEG_${varname}_INCLUDE_DIRS \n\t\tNAMES \"lib${shortname}/${headername}\" \n\t\tPATHS\n\t\t\t\"${FFMPEG_DIR}/include\" # modify this to adapt according to OS/compiler\t\t\t\n\t)\n\t\t\n\t#Add libraries\n\tIF(${FFMPEG_${varname}_INCLUDE_DIRS} STREQUAL \"FFMPEG_${varname}_INCLUDE_DIR-NOTFOUND\")\n\t\tMESSAGE(STATUS \"Can't find includes for ${shortname}...\")\n\tELSE()\n\t\tFIND_LIBRARY(FFMPEG_${varname}_LIBRARIES\n\t\t\tNAMES ${shortname}\n\t\t\tPATHS\n\t\t\t\t${FFMPEG_DIR}/lib\n\t\t)\n\n\t\t# set libraries and other variables\n\t\tSET(FFMPEG_${varname}_FOUND 1)\n\t\tSET(FFMPEG_${varname}_INCLUDE_DIRS ${FFMPEG_${varname}_INCLUDE_DIR})\n\t\tSET(FFMPEG_${varname}_LIBS ${FFMPEG_${varname}_LIBRARIES}) \n\tENDIF()\n ENDMACRO(FFMPEG_FIND)\n\n#Calls to ffmpeg_find to get  librarires ------------------------------\nFFMPEG_FIND(LIBAVFORMAT avformat avformat.h)\nFFMPEG_FIND(LIBAVDEVICE avdevice avdevice.h)\nFFMPEG_FIND(LIBAVCODEC  avcodec  avcodec.h)\nFFMPEG_FIND(LIBAVUTIL   avutil   avutil.h)\nFFMPEG_FIND(LIBSWSCALE  swscale  swscale.h)\n \n# check if libs are found and set FFMPEG related variables\n#SET(FFMPEG_FOUND \"NO\")\nIF(FFMPEG_LIBAVFORMAT_FOUND \n\tAND FFMPEG_LIBAVDEVICE_FOUND \n\tAND FFMPEG_LIBAVCODEC_FOUND \n\tAND FFMPEG_LIBAVUTIL_FOUND \n\tAND FFMPEG_LIBSWSCALE_FOUND)\n \n\t# All ffmpeg libs are here\n    SET(FFMPEG_FOUND \"YES\")\n\tSET(FFMPEG_INCLUDE_DIR ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS})\n\tSET(FFMPEG_LIBRARY_DIRS ${FFMPEG_LIBAVFORMAT_LIBRARY_DIRS})\n\tSET(FFMPEG_LIBRARIES\n        ${FFMPEG_LIBAVFORMAT_LIBS}\n        ${FFMPEG_LIBAVDEVICE_LIBS}\n        ${FFMPEG_LIBAVCODEC_LIBS}\n        ${FFMPEG_LIBAVUTIL_LIBS}\n\t\t${FFMPEG_LIBSWSCALE_LIBS}\t)\n\t\t\n\t# add dynamic libraries\n\tif(WIN32)\n\t\tfile(GLOB FFMPEG_DYNAMIC_LIBS \"${FFMPEG_DIR}/bin/*.dll\")\n\t\tif(NOT FFMPEG_DYNAMIC_LIBS)\n\t\t\tmessage(\"FFMPEG_DYNAMIC_LIBS is missing...\")\n\tendif()\n\tset(FFMPEG_DYNAMIC_LIBS ${FFMPEG_DYNAMIC_LIBS} CACHE PATH \"Windows dll location\")\nendif()\n\t\n\tmark_as_advanced(FFMPEG_INCLUDE_DIR FFMPEG_LIBRARY_DIRS FFMPEG_LIBRARIES FFMPEG_DYNAMIC_LIBS)\nELSE ()\n    MESSAGE(STATUS \"Could not find FFMPEG\")\nENDIF()\n \n \nINCLUDE(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(FFMPEG\n\tREQUIRED_VARS FFMPEG_INCLUDE_DIR FFMPEG_LIBRARIES\n\tFAIL_MESSAGE \"FFmpeg wasn't found correctly. Set FFMPEG_DIR to the root SDK installation directory.\"\n)\n\nif(NOT FFMPEG_FOUND)\n\tset(FFMPEG_DIR \"\" CACHE STRING \"Path to FFmpeg install directory\")\nendif()\n  \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/Win3rdParty.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## This file should be include and use only on WIN32 OS and once\n## It allow to auto check/download and use a preconfigured 3rdParty binaries for cmake usage\n## It use the downloadAndExtractZipFile cmake module to work.\n##\nif(__Win3rdParty_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__Win3rdParty_cmake_INCLUDED__ ON)\nendif()\n\n\n##\n## To be sure to reset an empty cached variable but keep any other kind of variables\n##\n## Usage:\n## check_cached_var(<var> <resetedCachedValue> <cacheType> <cacheDoc> [FORCE])\n##\n## <var> is the cached cmake variable you need to reset\n## <resetedCachedValue> is the new default value of the reseted cached cmake variable\n## <cacheType> is the kind of GUI cache input can be : FILEPATH; PATH; STRING or BOOL\n## <cacheDoc> is the associated GUI cache input documentation display in the GUI\n## FORCE option could be use to reset a cached variable even if it is not empty.\n##\nmacro(check_cached_var var resetedCachedValue cacheType cacheDoc)\n    # message(STATUS \"inside check_cached_var macro. argn=${ARGN}\")\n    cmake_parse_arguments(ccv \"FORCE\" \"\" \"\" ${ARGN})\n\n    if(ccv_FORCE)\n        set(FORCE FORCE)\n    else()\n        set(FORCE )\n    endif()\n\n    if(NOT ${var} OR ccv_FORCE)\n        unset(${var} CACHE)\n        # message(STATUS \"setting new cache value. var ${var} = ${resetedCachedValue}\")\n        set(${var}\t\"${resetedCachedValue}\" CACHE ${cacheType} \"${cacheDoc}\" ${FORCE})\n    endif()\nendmacro()\n\n\n##\n## Win3rdParty function allow to specify a directory which contain all necessary windows dependenties.\n## By uploading 3rdParty directory (which contain dependencies, *.lib, *.dll... for a specific version of compiler) onto Gforge file tab,\n## you get back an URL of download you can give to this function with a directory name. So you can provide multiple 3rdParty version of same dependencies (MSVC11, MSVC12...).\n## By providing a prefix to this function, you allow to use different kind of 3rdParty which can be handled by CMAKE OPTIONS depending on what your framework need for example.\n##\n## Usage 1:\n##    Win3rdParty(<prefix> MSVC<XX> <DirName> <URL>\n##\t\t\t\t\t[MSVC<XX> <DirName> <URL>] [...]\n##\t\t\t\t\t[VCID] [DEFAULT_USE] [VERBOSE] )\n##\n## * <prefix> allow to identify which 3rdParty you process (prefix name)\n## * MSVC<XX> flag could be MSVC11 or MSVC12 (any element of the MSVC_VERSIONS_LIST) and refer to a 3rdParty compiler with :\n##   * <DirName> which will be the local pathName of the downloaded 3rdParty : relative to CMAKE_BINARY_DIR\n##   * <URL> which is the link location of the 3rdParty zip\n## * VCID flag will make available a cache variable ${prefix}_WIN3RDPARTY_VCID\n## * DEFAULT_USE flag [ON|OFF] may be used to set default value of cmake cached variable : <prefix>_WIN3RDPARTY_USE [default to ON]\n##\n## WARNING:\n## This function define CACHE variables you can use after :\n## * ${prefix}_WIN3RDPARTY_USE : allow to check/downloaded win3rdParty dir (it will force the cached variables for this dependency folder generally <prefix>_DIR>)\n## * ${prefix}_WIN3RDPARTY_DIR : where is your local win3rdParty dir (the PATH)\n## * ${prefix}_WIN3RDPARTY_VCID : [if VCID flag is used] the MSVC id (commonly used to prefix/suffix library name, see boost or CGAL)\n##\n## If you want to add a win3rdParty version, please:\n## 1- build dependencies on your local side with the compiler you want\n## 2- build your own zip with your built dependencies\n## 3- upload it (onto the forge where the project is stored) and copy the link location in order to use it for this function\n## 4- if you just introduced a new MSVC version, add it to the MSVC_VERSIONS_LIST bellow\n##\n## In a second pass, you can also use this function to set necessary cmake cached variables in order to let cmake find packages of these 3rdParty.\n##\n## Usage 2:\n##    win3rdParty(<prefix> [VERBOSE] MULTI_SET|SET\n##          CHECK_CACHED_VAR <cmakeVar> <cmakeCacheType> [LIST] <cmakeValue> [DOC <stringToolTips>]\n##        [ CHECK_CACHED_VAR <cmakeVar> <cmakeCacheType> [LIST] <cmakeValue> [DOC <stringToolTips>] ] [...]\n##\n## * MULTI_SET or SET flags are used to tell cmake that all next arguments will use repeated flags with differents entries (SET mean we will provide only one set of arguments, without repetition)\n## * CHECK_CACHED_VAR are the repeated flag which contain differents entries\n##      * <cmakeVar> is the cmake variable you want to be cached for the project\n##      * <cmakeCacheType> is the kind of cmake variable (couble be: FILEPATH; PATH; STRING or BOOL) => see check_cached_var.\n##      * LIST optional flag could be used with CHECK_CACHED_VAR when <cmakeCacheType> = STRING. It allow to handle multiple STRINGS value list.\n##      * <cmakeValue> is the value of the variable (if FILEPATH, PATH or STRING: use quotes, if BOOL : use ON/OFF)\n##      * DOC optional flag is used to have a tooltips info about this new cmake variable entry into the GUI (use quotes).\n##\n## Full example 1 :\n##    win3rdParty(COMMON MSVC11 \"win3rdParty-MSVC11\" \"https://path.to/an.archive.7z\"\n##                SET CHECK_CACHED_VAR SuiteSparse_DIR PATH \"SuiteSparse-4.2.1\" DOC \"default empty doc\"\n##    )\n##\n## WARNING:\n## For the 2nd usage (with MULTI_SET), if you planned to set some CACHED_VAR using/composed by ${prefix}_WIN3RDPARTY_* just set in this macro (usage 1),\n## then (due to the not yet existing var) you will need to call this function 2 times :\n## One for the 1st usage (downloading of the current compiler 3rdParty).\n## One for the MLUTI_SET flag which will use existsing ${prefix}_WIN3RDPARTY_* cached var.\n##\n## Full example 2 :\n##    win3rdParty(COMMON MSVC11    \"win3rdParty-MSVC11\" \"https://path.to/an.archive.7z\")\n##    win3rdParty(COMMON MULTI_SET\n##       CHECK_CACHED_VAR CGAL_INCLUDE_DIR  PATH \"CGAL-4.3/include\" DOC \"default empty doc\"\n##       CHECK_CACHED_VAR CGAL_LIBRARIES\tSTRING LIST \"debug;CGAL-4.3/lib${LIB_POSTFIX}/CGAL-${WIN3RDPARTY_COMMON_VCID}-mt-gd-4.3.lib;optimized;CGAL-4.3/lib${LIB_POSTFIX}/CGAL-${WIN3RDPARTY_COMMON_VCID}-mt-4.3.lib\"\n##\n##\n## WARNING: This function use internaly :\n## * downloadAndExtractZipFile.cmake\n## * parse_arguments_multi.cmake\n## * check_cached_var macro\n##\nfunction(win3rdParty prefix )\n\n    # ARGV: list of all arguments given to the macro/function\n    # ARGN: list of remaining arguments\n\n    if(NOT WIN32)\n        return()\n    endif()\n\n    ## set the handled version of MSVC\n    ## if you plan to add a win3rdParty dir to download with a new MSVC version: build the win3rdParty dir and add the MSCV entry here.\n    set(MSVC_VERSIONS_LIST \"MSVC17;MSVC11;MSVC12;MSVC14\")\n\n    #include(CMakeParseArguments)   # CMakeParseArguments is obsolete since cmake 3.5\n    # cmake_parse_arguments (<prefix> <options> <one_value_keywords> <multi_value_keywords> args)\n    # <options> : options (flags) pass to the macro\n    # <one_value_keywords> : options that neeed a value\n    # <multi_value_keywords> : options that neeed more than one value\n    cmake_parse_arguments(w3p \"VCID\" \"VERBOSE;TIMEOUT;DEFAULT_USE\" \"${MSVC_VERSIONS_LIST};MULTI_SET;SET\" ${ARGN})\n\n    # message(STATUS \"value of w3p_VCID = ${w3p_VCID}\")\n    # message(STATUS \"value of w3p_VERBOSE = ${w3p_VERBOSE}\")\n    # message(STATUS \"value of w3p_TIMEOUT = ${w3p_TIMEOUT}\")\n    # message(STATUS \"value of w3p_DEFAULT_USE = ${w3p_DEFAULT_USE}\")\n\n    # foreach (loop_var ${MSVC_VERSIONS_LIST})\n            # message(STATUS \"value of w3p_${loop_var} = ${w3p_${loop_var}}\")\n    # endforeach(loop_var)\n\n    # message(STATUS \"value of w3p_MULTI_SET = ${w3p_MULTI_SET}\")\n    # message(STATUS \"value of w3p_SET = ${w3p_SET}\")\n\n    # message(\"values for MSVC = ${w3p_MSVC14}\")\n\n    if(NOT w3p_TIMEOUT)\n        set(w3p_TIMEOUT 300)\n    endif()\n\n    if(NOT DEFINED w3p_DEFAULT_USE)\n        set(w3p_DEFAULT_USE ON)\n    endif()\n\t\n\n    ## 1st use (check/update|download) :\n    set(${prefix}_WIN3RDPARTY_USE ${w3p_DEFAULT_USE} CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\")\n\n\n    ## We want to test if each version of MSVC was filled by the function (see associated parameters)\n    ## As CMake is running only for one version of MSVC, if that MSVC version was filled, we get back associated parameters,\n    ## otherwise we can't use the downloadAndExtractZipFile with win3rdParty.\n    set(enableWin3rdParty OFF)\n\t\n\tforeach(MSVC_VER ${MSVC_VERSIONS_LIST})\n\t\tif(${MSVC_VER} AND w3p_${MSVC_VER} OR ${MSVC_TOOLSET_VERSION} EQUAL 143 AND ${MSVC_VER} STREQUAL \"MSVC17\") \n\t\t\tlist(LENGTH w3p_${MSVC_VER} count)\n\t\t\tif(\"${count}\" LESS \"2\")\n\t\t\t\t#message(WARNING \"You are using ${MSVC_VER} with ${prefix}_WIN3RDPARTY_USE=${${prefix}_WIN3RDPARTY_USE}, but win3rdParty function isn't filled for ${MSVC_VER}!\")\n\t\t\telse()\n\t\t\t\tlist(GET w3p_${MSVC_VER} 0 Win3rdPartyName)\n\t\t\t\tlist(GET w3p_${MSVC_VER} 1 Win3rdPartyUrl)\n\t\t\t\tif(w3p_VCID)\n\t\t\t\t\t## try to get the VcId of MSVC. See also MSVC_VERSION cmake var in the doc.\n\t\t\t\t\tstring(REGEX REPLACE \"MS([A-Za-z_0-9-]+)\" \"\\\\1\" vcId ${MSVC_VER})\n\t\t\t\t\tstring(TOLOWER ${vcId} vcId)\n\t\t\t\t\tset(${prefix}_WIN3RDPARTY_VCID \"${vcId}0\" CACHE STRING \"the MSVC id (commonly used to prefix/suffix library name, see boost or CGAL)\")\n\t\t\t\t\tmark_as_advanced(${prefix}_WIN3RDPARTY_VCID)\n\t\t\t\tendif()\n\t\t\t\tset(enableWin3rdParty ON)\n\t\t\t\tset(suffixCompilerID ${MSVC_VER})\n\t\t\t\tbreak()\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n    ## If previous step succeed to get MSVC dirname and URL of the current MSVC version, use it to auto download/update the win3rdParty dir\n    if(enableWin3rdParty AND ${prefix}_WIN3RDPARTY_USE)\n\n        if(IS_ABSOLUTE \"${Win3rdPartyName}\")\n        else()\n            set(Win3rdPartyName \"${CMAKE_BINARY_DIR}/${Win3rdPartyName}\")\n        endif()\n\n        if(NOT EXISTS \"${Win3rdPartyName}\")\n            file(MAKE_DIRECTORY ${Win3rdPartyName})\n        endif()\n\n        include(downloadAndExtractZipFile)\n        downloadAndExtractZipFile(  \"${Win3rdPartyUrl}\"                             ## URL link location\n                                    \"Win3rdParty-${prefix}-${suffixCompilerID}.7z\"  ## where download it: relative path, so default to CMAKE_BINARY_DIR\n                                    \"${Win3rdPartyName}\"                            ## where extract it : fullPath (default relative to CMAKE_BINARY_DIR)\n            CHECK_DIRTY_URL \"${Win3rdPartyName}/Win3rdPartyUrl\"                     ## last downloaded url file : fullPath (default relative to CMAKE_BINARY_DIR)\n            TIMEOUT ${w3p_TIMEOUT}\n            VERBOSE ${w3p_VERBOSE}\n        )\n        file(GLOB checkDl \"${Win3rdPartyName}/*\")\n        list(LENGTH checkDl checkDlCount)\n        if(\"${checkDlCount}\" GREATER \"1\")\n        else()\n            message(\"The downloadAndExtractZipFile didn't work...?\")\n            set(enableWin3rdParty OFF)\n        endif()\n    endif()\n\n    ## Try to auto set ${prefix}_WIN3RDPARTY_DIR or let user set it manually\n    set(${prefix}_WIN3RDPARTY_DIR \"\" CACHE PATH \"windows ${Win3rdPartyName} dir to ${prefix} dependencies of the project\")\n\n    if(NOT ${prefix}_WIN3RDPARTY_DIR AND ${prefix}_WIN3RDPARTY_USE)\n        if(EXISTS \"${Win3rdPartyName}\")\n            unset(${prefix}_WIN3RDPARTY_DIR CACHE)\n            set(${prefix}_WIN3RDPARTY_DIR \"${Win3rdPartyName}\" CACHE PATH \"dir to ${prefix} dependencies of the project\")\n        endif()\n    endif()\n\n    if(EXISTS ${${prefix}_WIN3RDPARTY_DIR})\n        message(STATUS \"Found a 3rdParty ${prefix} dir : ${${prefix}_WIN3RDPARTY_DIR}.\")\n        set(enableWin3rdParty ON)\n    elseif(${prefix}_WIN3RDPARTY_USE)\n        message(WARNING \"${prefix}_WIN3RDPARTY_USE=${${prefix}_WIN3RDPARTY_USE} but ${prefix}_WIN3RDPARTY_DIR=${${prefix}_WIN3RDPARTY_DIR}.\")\n        set(enableWin3rdParty OFF)\n    endif()\n\n    ## Final check\n    if(NOT enableWin3rdParty)\n        message(\"Disable ${prefix}_WIN3RDPARTY_USE (cmake cached var will be not set), due to a win3rdParty problem.\")\n        message(\"You still can set ${prefix}_WIN3RDPARTY_DIR to an already downloaded Win3rdParty directory location.\")\n        set(${prefix}_WIN3RDPARTY_USE OFF CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\" FORCE)\n    endif()\n\n    ## 2nd use : handle multi values args to set cached cmake variables in order to ease the next find_package call\n    if(${prefix}_WIN3RDPARTY_USE AND ${prefix}_WIN3RDPARTY_DIR)\n        if(w3p_VERBOSE)\n            message(STATUS \"Try to set cmake cached variables for ${prefix} required libraries directly from : ${${prefix}_WIN3RDPARTY_DIR}.\")\n        endif()\n\n        include(parse_arguments_multi)\n        # message (STATUS \"before defining an override of parse_arguments_multi_function\")\n        function(parse_arguments_multi_function ) ## overloaded function to handle all CHECK_CACHED_VAR values list (see: parse_arguments_multi)\n            # message(STATUS \"inside overloaded parse_arguments_multi_function defined in Win3rdParty.cmake\")\n            # message(STATUS ${ARGN})\n            ## we know the function take 3 args : var cacheType resetedCachedValue (see check_cached_var)\n            cmake_parse_arguments(pamf \"\" \"DOC\" \"LIST\" ${ARGN})\n\n            ## var and cacheType are mandatory (with the resetedCachedValue)\n            set(var         ${ARGV0})\n            set(cacheType   ${ARGV1})\n            # message(STATUS \"var=${var} and cacheType=${cacheType} list=${pamf_LIST}\")\n            if(pamf_DOC)\n                set(cacheDoc    ${pamf_DOC})\n            else()\n                set(cacheDoc    \"\")\n            endif()\n            if(pamf_LIST)\n                set(value ${pamf_LIST})\n            else()\n                # message(\"USING ARGV2 with value ${ARGV2}\")\n                set(value ${ARGV2})\n            endif()\n            # message(\"inside override function in Win3rdparty.cmake value+ ${value}\")\n            if(\"${cacheType}\" MATCHES \"PATH\" AND EXISTS \"${${prefix}_WIN3RDPARTY_DIR}/${value}\")\n                # message(\"math with path\")\n                set(resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}/${value}\") ## path relative to ${prefix}_WIN3RDPARTY_DIR\n            elseif (\"${cacheType}\" MATCHES \"PATH\" AND EXISTS \"${${prefix}_WIN3RDPARTY_DIR}\")\n                set(resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}\") ## path relative to ${prefix}_WIN3RDPARTY_DIR\n            elseif(\"${cacheType}\" MATCHES \"STRING\")\n                foreach(var IN LISTS value)\n                    if(EXISTS \"${${prefix}_WIN3RDPARTY_DIR}/${var}\")\n                        list(APPEND resetedCachedValue \"${${prefix}_WIN3RDPARTY_DIR}/${var}\") ## string item of the string list is a path => make relative to ${prefix}_WIN3RDPARTY_DIR\n                    else()\n                        list(APPEND resetedCachedValue ${var}) ## string item of the string list is not an existing path => simply use the item\n                    endif()\n                endforeach()\n            else()\n                set(resetedCachedValue \"${value}\") ## could be a BOOL or a STRING\n            endif()\n\n            ## call our macro to reset cmake cache variable if empty\n            check_cached_var(${var} \"${resetedCachedValue}\" ${cacheType} \"${cacheDoc}\" FORCE)\n\n        endfunction()\n        # message (STATUS \"after defining an override of parse_arguments_multi_function\")\n\n        if(w3p_MULTI_SET)\n            parse_arguments_multi(CHECK_CACHED_VAR w3p_MULTI_SET ${w3p_MULTI_SET}) ## internaly will call our overloaded parse_arguments_multi_function\n        elseif(w3p_SET)\n            # message(\"calling set version of parse_arguments_multi with w3p_set = ${w3p_SET}\")\n            parse_arguments_multi(CHECK_CACHED_VAR w3p_SET ${w3p_SET})\n        endif()\n\n    endif()\n\nendfunction()\n\n## cmake variables introspection to globally activate/deactivate ${prefix}_WIN3RDPARTY_USE\n## This \"one shot\" call (only one for the next cmake configure) will automatically then reset the global variable WIN3RDPARTY_USE to UserDefined (do nothing).\n## use (call it) before and after the call of all your win3rdParty functions\nfunction(Win3rdPartyGlobalCacheAction )\n\tset(WIN3RDPARTY_USE \"UserDefined\" CACHE STRING \"Choose how to handle all cmake cached *_WIN3RDPARTY_USE for the next configure.\\nCould be:\\nUserDefined [default]\\nActivateAll\\nDesactivateAll\" )\n\tset_property(CACHE WIN3RDPARTY_USE PROPERTY STRINGS \"UserDefined;ActivateAll;DesactivateAll\" )\n\tif(${WIN3RDPARTY_USE} MATCHES \"UserDefined\")\n\telse()\n\t\tif(${WIN3RDPARTY_USE} MATCHES \"ActivateAll\")\n\t\t\tset(win3rdPvalue ON)\n\t\telseif(${WIN3RDPARTY_USE} MATCHES \"DesactivateAll\")\n\t\t\tset(win3rdPvalue OFF)\n\t\tendif()\n\t\tget_cmake_property(_variableNames CACHE_VARIABLES)\n\t\tforeach (_variableName ${_variableNames})\n\t\t\tstring(REGEX MATCH \t\"[A-Za-z_0-9-]+_WIN3RDPARTY_USE\" win3rdpartyUseCacheVar ${_variableName})\n\t\t\tif(win3rdpartyUseCacheVar)\n\t\t\t\tstring(REGEX REPLACE \"([A-Za-z_0-9-]+_WIN3RDPARTY_USE)\" \"\\\\1\" win3rdpartyUseCacheVar ${_variableName})\n\t\t\t\tset(${win3rdpartyUseCacheVar} ${win3rdPvalue} CACHE BOOL \"Use required 3rdParty binaries from ${prefix}_WIN3RDPARTY_DIR or download it if not exist\" FORCE)\n\t\t\t\tmessage(STATUS \"${win3rdpartyUseCacheVar} cached variable set to ${win3rdPvalue}.\")\n\t\t\tendif()\n\t\tendforeach()\n\t\tset(WIN3RDPARTY_USE \"UserDefined\" CACHE STRING \"Choose how to handle all cmake cached *_WIN3RDPARTY_USE for the next configure.\\nCould be:\\nUserDefined [default]\\nActivateAll\\nDesactivateAll\" FORCE)\n\t\tmessage(STATUS \"reset WIN3RDPARTY_USE to UserDefined.\")\n\tendif()\n\tmark_as_advanced(WIN3RDPARTY_USE)\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/cmake_policies.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__set_policies_INCLUDED__)\n\treturn()\nelse()\n\tset(__set_policies_INCLUDED__ ON)\nendif()\n\nmacro(setPolicies)\n\t# No more policies to enforce\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/dependencies.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## Included once for all sub project.\n## It contain the whole cmake instructions to find necessary common dependencies.\n## 3rdParty (provided by sibr_addlibrary win3rdParty or from external packages) are then available in cmake sub projects.\n##\n## Do not include this file more than once but you can modify it to fit to your own project.\n## So please, read it carefully because you can use on of these dependencies for your project or appen new one.\n##\n## As it is included after camke options, you can use conditional if(<CMAKE_PROJ_OPT>)/endif() to encapsulate your 3rdParty.\n##\n\n## win3rdParty function allowing to auto check/download/update binaries dependencies for current windows compiler\n## Please open this file in order to get more documentation and usage examples.\ninclude(Win3rdParty)\n\ninclude(sibr_library)\n\nWin3rdPartyGlobalCacheAction()\n\nfind_package(OpenGL REQUIRED)\n\n############\n## Find GLEW\n############\nif (MSVC11 OR MSVC12)\n    set(glew_multiset_arguments \n            CHECK_CACHED_VAR GLEW_INCLUDE_DIR\t    PATH \"glew-1.10.0/include\" DOC \"default empty doc\"\n            CHECK_CACHED_VAR GLEW_LIBRARIES         STRING LIST \"debug;glew-1.10.0/${LIB_BUILT_DIR}/glew32d.lib;optimized;glew-1.10.0/${LIB_BUILT_DIR}/glew32.lib\" DOC \"default empty doc\"\n        )\nelseif (MSVC14)\n    set(glew_multiset_arguments \n            CHECK_CACHED_VAR GLEW_INCLUDE_DIR\t    PATH \"glew-2.0.0/include\" DOC \"default empty doc\"\n            CHECK_CACHED_VAR GLEW_SHARED_LIBRARY_RELEASE       PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32.lib\"\n            CHECK_CACHED_VAR GLEW_STATIC_LIBRARY_RELEASE       PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32s.lib\"\n            CHECK_CACHED_VAR GLEW_SHARED_LIBRARY_DEBUG         PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32d.lib\"\n            CHECK_CACHED_VAR GLEW_STATIC_LIBRARY_DEBUG         PATH \"glew-2.0.0/${LIB_BUILT_DIR}/glew32sd.lib\"\n        )\nelse ()\n    message(\"There is no provided GLEW library for your version of MSVC\")\nendif()\nsibr_addlibrary(NAME GLEW #VERBOSE ON\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/glew-1.10.0.7z\"\n    MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/glew-1.10.0.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glew-2.0.0.7z\"        # using recompiled version of glew\n    MULTI_SET ${glew_multiset_arguments}\n)\nset(GLEW_VERBOSE ON)\nFIND_PACKAGE(GLEW REQUIRED)\nIF(GLEW_FOUND)\n    INCLUDE_DIRECTORIES(${GLEW_INCLUDE_DIR})\nELSE(GLEW_FOUND)\n    MESSAGE(\"GLEW not found. Set GLEW_DIR to base directory of GLEW.\")\nENDIF(GLEW_FOUND)\n\n\n##############\n## Find ASSIMP\n##############\nif (MSVC11 OR MSVC12)\n    set(assimp_set_arguments \n        CHECK_CACHED_VAR ASSIMP_DIR PATH \"Assimp_3.1_fix\"\n    )\nelseif (MSVC14)\n    set(assimp_set_arguments \n        CHECK_CACHED_VAR ASSIMP_DIR PATH \"Assimp-4.1.0\"\n    )\nelse ()\n    message(\"There is no provided ASSIMP library for your version of MSVC\")\nendif()\n\nsibr_addlibrary(NAME ASSIMP #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/Assimp_3.1_fix.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/Assimp_3.1_fix.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/Assimp-4.1.0.7z\"\n        MULTI_SET\n            ${assimp_set_arguments}\n)\n\nfind_package(ASSIMP REQUIRED)\ninclude_directories(${ASSIMP_INCLUDE_DIR})\n\n################\n## Find FFMPEG\n################\nsibr_addlibrary(NAME FFMPEG\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/ffmpeg.zip\"\n    MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/ffmpeg.zip\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/ffmpeg-4.0.2-win64-win3rdParty.7z\"\n    SET CHECK_CACHED_VAR FFMPEG_DIR PATH ${FFMPEG_WIN3RDPARTY_DIR}\n)\nfind_package(FFMPEG QUIET)\ninclude_directories(${FFMPEG_INCLUDE_DIR})\n\n###################\n## Find embree3\n###################\nsibr_addlibrary(\n    NAME embree3\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/embree2.7.0.x64.windows.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/embree-3.6.1.x64.vc14.windows.7z\"     # TODO SV: provide a valid version if required\n)\n\n###################\n## Find eigen3\n###################\nsibr_addlibrary(\n\tNAME eigen3\n\t#MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/eigen-eigen-dc6cfdf9bcec.7z\"\n\t#MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/eigen-eigen-dc6cfdf9bcec.7z\"    # TODO SV: provide a valid version if required\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/eigen3.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/eigen3.7z\"\n    SET CHECK_CACHED_VAR eigen3_DIR PATH \"eigen/share/eigen3/cmake\"\n)\ninclude_directories(/usr/include/eigen3)\nadd_definitions(-DEIGEN_INITIALIZE_MATRICES_BY_ZERO)\n\n#############\n## Find Boost\n#############\nset(Boost_REQUIRED_COMPONENTS \"system;chrono;filesystem;date_time\" CACHE INTERNAL \"Boost Required Components\")\n\nif (WIN32)\n    # boost multiset arguments\n    if (MSVC11 OR MSVC12)\n        set(boost_multiset_arguments \n                CHECK_CACHED_VAR BOOST_ROOT                 PATH \"boost_1_55_0\"\n                CHECK_CACHED_VAR BOOST_INCLUDEDIR \t\t    PATH \"boost_1_55_0\"\n                CHECK_CACHED_VAR BOOST_LIBRARYDIR \t\t    PATH \"boost_1_55_0/${LIB_BUILT_DIR}\"\n                #CHECK_CACHED_VAR Boost_COMPILER             STRING \"-${Boost_WIN3RDPARTY_VCID}\" DOC \"vcid (eg: -vc110 for MSVC11)\"\n                CHECK_CACHED_VAR Boost_COMPILER             STRING \"-vc110\" DOC \"vcid (eg: -vc110 for MSVC11)\" # NOTE: if it doesnt work, uncomment this option and set the right value for VisualC id\n            )\n    elseif (MSVC14)\n        set(boost_multiset_arguments \n                CHECK_CACHED_VAR BOOST_ROOT                 PATH \"boost-1.71\"\n                CHECK_CACHED_VAR BOOST_INCLUDEDIR \t\t    PATH \"boost-1.71\"\n                CHECK_CACHED_VAR BOOST_LIBRARYDIR \t\t    PATH \"boost-1.71/${LIB_BUILT_DIR}\"\n                CHECK_CACHED_VAR Boost_COMPILER             STRING \"-vc141\" DOC \"vcid (eg: -vc110 for MSVC11)\" # NOTE: if it doesnt work, uncomment this option and set the right value for VisualC id\n            )\n        \n        option(BOOST_MINIMAL_VERSION \"Only get minimal Boost dependencies\" ON)\n\n        if(${BOOST_MINIMAL_VERSION})\n            set(BOOST_MSVC14_ZIP \"boost-1.71-ibr-minimal.7z\")\n        else()\n            set(BOOST_MSVC14_ZIP \"boost-1.71.7z\")\n        endif()\n    else ()\n        message(\"There is no provided Boost library for your version of MSVC\")\n    endif()\n\n    sibr_addlibrary(NAME Boost VCID TIMEOUT 600 #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/boost_1_55_0.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC11-splitted%20version/boost_1_55_0.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/${BOOST_MSVC14_ZIP}\"    # boost compatible with msvc14\n        MULTI_SET ${boost_multiset_arguments}\n            CHECK_CACHED_VAR Boost_NO_SYSTEM_PATHS      BOOL ON DOC \"Set to ON to disable searching in locations not specified by these boost cached hint variables\"\n            CHECK_CACHED_VAR Boost_NO_BOOST_CMAKE       BOOL ON DOC \"Set to ON to disable the search for boost-cmake (package cmake config file if boost was built with cmake)\"\n    )\n    if(NOT Boost_COMPILER AND Boost_WIN3RDPARTY_USE)\n        message(WARNING \"Boost_COMPILER is not set and it's needed.\")\n    endif()\nendif()\n\nfind_package(Boost 1.71.0 REQUIRED COMPONENTS ${Boost_REQUIRED_COMPONENTS})\n\nif(WIN32)\n\tadd_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/EHsc>\")\n    #add_definitions(/EHsc)\nendif()\n\nif(Boost_LIB_DIAGNOSTIC_DEFINITIONS)\n    add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})\nendif()\n\n#if(WIN32)\n    add_definitions(-DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB)\n#endif()\n\ninclude_directories(${BOOST_INCLUDEDIR} ${Boost_INCLUDE_DIRS})\nlink_directories(${BOOST_LIBRARYDIR} ${Boost_LIBRARY_DIRS})\n\n\n##############\n## Find OpenMP\n##############\nfind_package(OpenMP)\n\nsibr_addlibrary(\n    NAME NativeFileDialog\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/nfd.7z\"  \n)\n\n##############\n## Find OpenCV\n##############\nif (WIN32)\n\tif (${MSVC_TOOLSET_VERSION} EQUAL 143)\n\t\tMESSAGE(\"SPECIAL OPENCV HANDLING\")\n\t\tset(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"install\" ## see OpenCVConfig.cmake\n\t    )\n\telseif (MSVC11 OR MSVC12)\n\t    set(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"opencv/build\" ## see OpenCVConfig.cmake\n\t    )\n\telseif (MSVC14)\n\t    set(opencv_set_arguments \n\t\tCHECK_CACHED_VAR OpenCV_DIR PATH \"opencv-4.5.0/build\" ## see OpenCVConfig.cmake\n\t    )\n\telse ()\n\t    message(\"There is no provided OpenCV library for your compiler, relying on find_package to find it\")\n\tendif()\nelse()\n\t    message(\"There is no provided OpenCV library for your compiler, relying on find_package to find it\")\nendif()\n\nsibr_addlibrary(NAME OpenCV #VERBOSE ON\n        MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv.7z\"\n        MSVC12 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv.7z\"\n        MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv-4.5.0.7z\"    # opencv compatible with msvc14 and with contribs\n        MSVC17 \"https://repo-sam.inria.fr/fungraph/dependencies/sibr/~0.9/opencv4-8.7z\" \n\t\tSET ${opencv_set_arguments}\n    )\nfind_package(OpenCV REQUIRED) ## Use directly the OpenCVConfig.cmake provided\n\n    ##https://stackoverflow.com/questions/24262081/cmake-relwithdebinfo-links-to-debug-libs\nset_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE)\n\nadd_definitions(-DOPENCV_TRAITS_ENABLE_DEPRECATED) \n\nif(OpenCV_INCLUDE_DIRS)\n    foreach(inc ${OpenCV_INCLUDE_DIRS})\n        if(NOT EXISTS ${inc})\n            set(OpenCV_INCLUDE_DIR \"\" CACHE PATH \"additional custom include DIR (in case of trouble to find it (fedora 17 opencv package))\")\n        endif()\n    endforeach()\n    if(OpenCV_INCLUDE_DIR)\n        list(APPEND OpenCV_INCLUDE_DIRS ${OpenCV_INCLUDE_DIR})\n        include_directories(${OpenCV_INCLUDE_DIRS})\n    endif()\nendif()\n\n###################\n## Find GLFW\n###################\nsibr_addlibrary(\n    NAME GLFW\n    MSVC11 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glfw-3.2.1.7z\"\n    MSVC14 \"https://repo-sam.inria.fr/fungraph/dependencies/ibr-common/win3rdParty-MSVC15-splitted%20version/glfw-3.2.1.7z\"     # TODO SV: provide a valid version if required\n)\n\nsibr_gitlibrary(TARGET imgui\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/imgui.git\"\n    GIT_TAG\t\t\t\"e7f0fa31b9fa3ee4ecd2620b9951f131b4e377c6\"\n)\n\nsibr_gitlibrary(TARGET mrf\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/mrf.git\"\n    GIT_TAG\t\t\t\"564e5e0b395c788d2f8b2cf4f879fed2493faea7\"\n)\n\nsibr_gitlibrary(TARGET nanoflann\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/nanoflann.git\"\n    GIT_TAG\t\t\t\"7a20a9ac0a1d34850fc3a9e398fc4a7618e8a69a\"\n)\n\nsibr_gitlibrary(TARGET picojson\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/picojson.git\"\n    GIT_TAG\t\t\t\"7cf8feee93c8383dddbcb6b64cf40b04e007c49f\"\n)\n\nsibr_gitlibrary(TARGET rapidxml\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/rapidxml.git\"\n    GIT_TAG\t\t\t\"069e87f5ec5ce1745253bd64d89644d6b894e516\"\n)\n\nsibr_gitlibrary(TARGET xatlas\n    GIT_REPOSITORY \t\"https://gitlab.inria.fr/sibr/libs/xatlas.git\"\n    GIT_TAG\t\t\t\"0fbe06a5368da13fcdc3ee48d4bdb2919ed2a249\"\n    INCLUDE_DIRS \t\"source/xatlas\"\n)\n\nWin3rdPartyGlobalCacheAction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/downloadAndExtractZipFile.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## downloadAndExtractZipFile cmake function\n## Provide a way to download zip file from public internet ZIP_URL host\n## and to extract it in a specific EXCTRATED_ZIP_PATH destination.\n## This function use 7-Zip external tool to maximize the compatibles formats.\n## This will be not download again if the EXCTRATED_ZIP_PATH already exist and DL_FORCE is set to OFF.\n## This will try to unzip file if already exist in the ZIP_DL_PATH.\n##\n## If EXCTRATED_ZIP_PATH and/or ZIP_DL_PATH are not full path,\n## it will be interpreted relative to CMAKE_BINARY_DIR\n##\n## Usage example :\n## include(downloadAndExtractZipFile)\n## downloadAndExtractZipFile(\n## \thttp://www.cs.cornell.edu/~snavely/bundler/distr/bundler-v0.4-source.zip\n## \t${CMAKE_BINARY_DIR}/Bundler/bundler-v0.4-source.zip\n## \t${CMAKE_BINARY_DIR}/Bundler\n##  [DL_FORCE ON|OFF]\n##  [TIMEOUT]\n##  [CHECK_DIRTY_URL]\n## )\n##\n## option DL_FORCE will redownload the zip file [deafult to OFF]\n## option TIMEOUT will end the unzip process after this period of time [default to 600s]\n## option CHECK_DIRTY_URL will write into the given file the downloaded URL and then,\n## next time, if the URL was updated, it detect it with this file\n## and will download the last version. This prevent to alway set manually DL_FORCE to ON...\n##\nif(__downloadAndExtractZipFile_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__downloadAndExtractZipFile_cmake_INCLUDED__ ON)\nendif()\n\nfunction(downloadAndExtractZipFile ZIP_URL ZIP_DL_PATH EXCTRATED_ZIP_PATH)\n\n    # message(STATUS \"zipUrl=${ZIP_URL} zipDlPath=${ZIP_DL_PATH} extractedZipPath=${EXCTRATED_ZIP_PATH}\")\n    cmake_parse_arguments(dwnlezf \"\" \"VERBOSE;DL_FORCE;TIMEOUT;CHECK_DIRTY_URL\" \"\" ${ARGN})\n\n\tset(PROGRAMFILESx86 \"PROGRAMFILES(x86)\")\n\n    ## Check entries mandatory args\n    if(IS_ABSOLUTE \"${ZIP_DL_PATH}\")\n    else()\n        set(ZIP_DL_PATH \"${CMAKE_BINARY_DIR}/${ZIP_DL_PATH}\")\n    endif()\n    if(IS_ABSOLUTE \"${EXCTRATED_ZIP_PATH}\")\n    else()\n        set(EXCTRATED_ZIP_PATH \"${CMAKE_BINARY_DIR}/${EXCTRATED_ZIP_PATH}\")\n    endif()\n    if(NOT EXISTS \"${EXCTRATED_ZIP_PATH}\")\n        file(MAKE_DIRECTORY ${EXCTRATED_ZIP_PATH})\n    endif()\n\n\t# SB: Once, one of downloaded zip was corrupted by an error message coming from the server.\n\tif(EXISTS \"${ZIP_DL_PATH}\")\n\t\t# So I check for removing such corrupted files\n\t\tmessage(\"Removing previous ${ZIP_DL_PATH} (might be corrupted)\")\n\t\tfile(REMOVE \"${ZIP_DL_PATH}\")\n\t\tif(EXISTS \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\t# and remove the previous (corrupted) made 'Win3rdPartyUrl' file\n\t\t\tfile(REMOVE \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\tendif()\n\tendif()\n\n    ## Check entries optional args\n\tmacro(readDirtyUrl )\n\t\tif(dwnlezf_CHECK_DIRTY_URL)\n\t\t\tif(IS_ABSOLUTE \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\telse()\n\t\t\t\tset(dwnlezf_CHECK_DIRTY_URL \"${CMAKE_BINARY_DIR}/${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\tendif()\n\t\t\tget_filename_component(unzipDir \t${EXCTRATED_ZIP_PATH} NAME)\n\t\t\tget_filename_component(unzipPath \t${EXCTRATED_ZIP_PATH} PATH)\n\t\t\tmessage(STATUS \"Checking ${unzipDir} [from ${unzipPath}]...\")\n\t\t\tif(EXISTS \"${dwnlezf_CHECK_DIRTY_URL}\")\n\t\t\t\tget_filename_component(CHECK_DIRTY_URL_FILENAME ${dwnlezf_CHECK_DIRTY_URL} NAME)\n\t\t\t\tfile(STRINGS \"${dwnlezf_CHECK_DIRTY_URL}\" contents)\n\t\t\t\tlist(GET contents 0 downloadURL)\n\t\t\t\tlist(REMOVE_AT contents 0)\n\t\t\t\tif(\"${downloadURL}\" MATCHES \"${ZIP_URL}\")\n\t\t\t\t\tif(dwnlezf_VERBOSE)\n\t\t\t\t\t\tmessage(STATUS \"Your downloaded version (URL) seems to be up to date. Let me check if nothing is missing... (see ${dwnlezf_CHECK_DIRTY_URL}).\")\n\t\t\t\t\tendif()\n\t\t\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\t\t\tunset(NAME_PATTERN_LIST)\n\t\t\t\t\tforeach(realPathPattern ${PATHNAME_PATTERN_LIST})\n\t\t\t\t\t\tget_filename_component(itemName ${realPathPattern} NAME)\n\t\t\t\t\t\tlist(APPEND NAME_PATTERN_LIST ${itemName})\n\t\t\t\t\tendforeach()\n\t\t\t\t\tif(NAME_PATTERN_LIST)\n\t\t\t\t\t\tforeach(item ${contents})\n\t\t\t\t\t\t\tlist(FIND NAME_PATTERN_LIST ${item} id)\n\t\t\t\t\t\t\tif(${id} MATCHES \"-1\")\n\t\t\t\t\t\t\t\tmessage(STATUS \"${item} is missing, your downloaded version content changed, need to redownload it.\")\n\t\t\t\t\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\t\t\t\t\t\tbreak()\n\t\t\t\t\t\t\telse()\n\t\t\t\t\t\t\t\tlist(REMOVE_AT NAME_PATTERN_LIST ${id})\n\t\t\t\t\t\t\t\tset(ZIP_DL_FORCE OFF)\n\t\t\t\t\t\t\tendif()\n\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tif(NOT ZIP_DL_FORCE AND NAME_PATTERN_LIST)\n\t\t\t\t\t\t\tmessage(\"Yours seems to be up to date (regarding to ${CHECK_DIRTY_URL_FILENAME})!\\nBut there are additional files/folders into your downloaded destination (feel free to clean it if you want).\")\n\t\t\t\t\t\t\tforeach(item ${NAME_PATTERN_LIST})\n\t\t\t\t\t\t\t\tif(item)\n\t\t\t\t\t\t\t\t\tmessage(\"${item}\")\n\t\t\t\t\t\t\t\tendif()\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tendif()\n\t\t\t\t\tendif()\n\t\t\t\telse()\n\t\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\t\t\tmessage(STATUS \"Your downloaded version is dirty (too old).\")\n\t\t\t\tendif()\n\t\t\telse()\n\t\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\t\tif(NOT PATHNAME_PATTERN_LIST)\n\t\t\t\t\tmessage(\"We found nothing into ${EXCTRATED_ZIP_PATH}, we will try to download it for you now.\")\n\t\t\t\tendif()\n\t\t\t\tset(ZIP_DL_FORCE ON)\n\t\t\tendif()\n\t\tendif()\n\tendmacro()\n\treadDirtyUrl()\n\tif(NOT ZIP_DL_FORCE)\n\t\treturn() ## do not need to further (as we are up to date, just exit the function\n\tendif()\n\n\tmacro(writeDirtyUrl )\n\t\tif(dwnlezf_CHECK_DIRTY_URL)\n\t\t\tfile(WRITE \"${dwnlezf_CHECK_DIRTY_URL}\" \"${ZIP_URL}\\n\")\n\t\t\tfile(GLOB PATHNAME_PATTERN_LIST \"${EXCTRATED_ZIP_PATH}/*\") ## is there something inside the downloaded destination ?\n\t\t\tunset(NAME_PATTERN_LIST)\n\t\t\tforeach(realPathPattern ${PATHNAME_PATTERN_LIST})\n\t\t\t\tget_filename_component(itemName ${realPathPattern} NAME)\n\t\t\t\tlist(APPEND NAME_PATTERN_LIST ${itemName})\n\t\t\tendforeach()\n\t\t\tif(NAME_PATTERN_LIST)\n\t\t\t\tforeach(item ${NAME_PATTERN_LIST})\n\t\t\t\t\tfile(APPEND \"${dwnlezf_CHECK_DIRTY_URL}\" \"${item}\\n\")\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\tendif()\n\tendmacro()\n\n\tif(dwnlezf_DL_FORCE)\n        set(ZIP_DL_FORCE ON)\n    endif()\n\n\tif(NOT dwnlezf_TIMEOUT)\n\t\tset(dwnlezf_TIMEOUT 600)\n\tendif()\n\tmath(EXPR dwnlezf_TIMEOUT_MIN \"${dwnlezf_TIMEOUT}/60\")\n\n\tmacro(unzip whichZipFile)\n\t\tif(NOT SEVEN_ZIP_CMD)\n\t\t\tfind_program(SEVEN_ZIP_CMD NAMES 7z 7za p7zip DOC \"7-zip executable\" PATHS \"$ENV{PROGRAMFILES}/7-Zip\" \"$ENV{${PROGRAMFILESx86}}/7-Zip\" \"$ENV{ProgramW6432}/7-Zip\")\n\t\tendif()\n\t\tif(SEVEN_ZIP_CMD)\n            if(dwnlezf_VERBOSE)\n                message(STATUS \"UNZIP: please, WAIT UNTIL ${SEVEN_ZIP_CMD} finished...\\n(no more than ${dwnlezf_TIMEOUT_MIN} min)\")\n            else()\n                message(STATUS \"UNZIP...wait...\")\n            endif()\n\t\t\texecute_process( \tCOMMAND ${SEVEN_ZIP_CMD} x ${whichZipFile} -y\n\t\t\t\t\t\t\t\tWORKING_DIRECTORY ${EXCTRATED_ZIP_PATH}\tTIMEOUT ${dwnlezf_TIMEOUT}\n\t\t\t\t\t\t\t\tRESULT_VARIABLE resVar OUTPUT_VARIABLE outVar ERROR_VARIABLE errVar\n\t\t\t\t\t\t\t)\n\t\t\tif(${resVar} MATCHES \"0\")\n                if(dwnlezf_VERBOSE)\n                    message(STATUS \"SUCESS to unzip in ${EXCTRATED_ZIP_PATH}. Now we can remove the downloaded zip file.\")\n                endif()\n\t\t\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E remove ${whichZipFile})\n\t\t\t\tmark_as_advanced(SEVEN_ZIP_CMD)\n\t\t\telse()\n\t\t\t\tmessage(WARNING \"something wrong in ${EXCTRATED_ZIP_PATH}\\n with \\\"${SEVEN_ZIP_CMD} x ${whichZipFile} -y\\\", redo or try to unzip by yourself...\")\n\t\t\t\tmessage(\"unzip: resVar=${resVar}\")\n\t\t\t\tmessage(\"unzip: outVar=${outVar}\")\n\t\t\t\tmessage(\"unzip: errVar=${errVar}\")\n\t\t\t\tmessage(\"unzip: failed or canceled or timeout\")\n\t\t\tendif()\n\t\telse()\n\t\t\tmessage(WARNING \"You need 7zip (http://www.7-zip.org/download.html) to unzip the downloaded dir.\")\n\t\t\tset(SEVEN_ZIP_CMD \"\" CACHE FILEPATH \"7-zip executable\")\n\t\t\tmark_as_advanced(CLEAR SEVEN_ZIP_CMD)\n\t\tendif()\n\tendmacro()\n\n    if(dwnlezf_VERBOSE)\n        message(STATUS \"Trying to look ${ZIP_DL_PATH} if a zip file exist...\")\n    endif()\n\tif(EXISTS \"${ZIP_DL_PATH}\")\n\n\t\t## already downloaded, so just unzip it\n\t\tunzip(${ZIP_DL_PATH})\n\t\twriteDirtyUrl()\n\n\telseif(ZIP_DL_FORCE)\n\n\t\t## the download part (+ unzip)\n\t\tmessage(STATUS \"Let me try to download package for you : ${ZIP_URL}\")\n        if(dwnlezf_VERBOSE)\n            message(STATUS \"Downloading...\\n   SRC=${ZIP_URL}\\n   DEST=${ZIP_DL_PATH}.tmp\\n   INACTIVITY_TIMEOUT=180s\")\n        endif()\n\t\tfile(DOWNLOAD ${ZIP_URL} ${ZIP_DL_PATH}.tmp INACTIVITY_TIMEOUT 360 STATUS status SHOW_PROGRESS)\n\n\t\tlist(GET status 0 numResult)\n\t\tif(${numResult} MATCHES \"0\")\n\n            if(dwnlezf_VERBOSE)\n                message(STATUS \"Download succeed, so let me rename the tmp file to unzip it\")\n            endif()\n\t\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E rename ${ZIP_DL_PATH}.tmp ${ZIP_DL_PATH})\n\t\t\tunzip(${ZIP_DL_PATH})\n\t\t\twriteDirtyUrl()\n\n\t\telse()\n\n\t\t\tlist(GET status 1 errMsg)\n\t\t\tmessage(WARNING \"DOWNLOAD ${ZIP_URL} to ${ZIP_DL_PATH} failed\\n:${errMsg}\")\n\t\t\tmessage(WARNING \"OK, you need to download the ${ZIP_URL} manually and put it into ${ZIP_DL_PATH}\")\n\t\t\tmessage(\"Take a look at the project website page to check available URL.\")\n\n\t\tendif()\n\n\tendif()\n\n\t## clean up the tmp downloaded file\n\tif(EXISTS \"${ZIP_DL_PATH}.tmp\")\n\t\texecute_process(COMMAND ${CMAKE_COMMAND} -E remove ${ZIP_DL_PATH}.tmp)\n\tendif()\n\nendfunction()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/git_describe.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(__git_describe_INCLUDED__)\n\treturn()\nelse()\n\tset(__git_describe_INCLUDED__ ON)\nendif()\n\nfind_package(Git)\nif(Git_FOUND)\n  message(STATUS \"Git found: ${GIT_EXECUTABLE}\")\nelse()\n  message(FATAL_ERROR \"Git not found. Aborting\")\nendif()\n\nmacro(git_describe)\n    cmake_parse_arguments(GIT_DESCRIBE \"\" \"GIT_URL;GIT_BRANCH;GIT_COMMIT_HASH;GIT_TAG;GIT_VERSION;PATH\" \"\" ${ARGN})\n\n    if(NOT GIT_DESCRIBE_PATH)\n        set(GIT_DESCRIBE_PATH ${CMAKE_SOURCE_DIR})\n    endif()\n\n    if(GIT_DESCRIBE_GIT_URL)\n        # Get the current remote\n        execute_process(\n            COMMAND git remote\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_REMOTE\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n\n        # Get the current remote\n        execute_process(\n            COMMAND git remote get-url ${GIT_DESCRIBE_GIT_REMOTE}\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_URL}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_BRANCH)\n        # Get the current working branch\n        execute_process(\n            COMMAND git rev-parse --abbrev-ref HEAD\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_BRANCH}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_COMMIT_HASH)\n        # Get the latest abbreviated commit hash of the working branch\n        execute_process(\n            COMMAND git rev-parse HEAD\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_COMMIT_HASH}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_TAG)\n        # Get the tag\n        execute_process(\n            COMMAND git describe --tags --exact-match\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_TAG}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n    endif()\n\n    if(GIT_DESCRIBE_GIT_VERSION)\n        # Get the version from git describe\n        execute_process(\n            COMMAND git describe\n            WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n            OUTPUT_VARIABLE     ${GIT_DESCRIBE_GIT_VERSION}\n            OUTPUT_STRIP_TRAILING_WHITESPACE\n            ERROR_QUIET\n        )\n\n        if(${GIT_DESCRIBE_GIT_VERSION} STREQUAL \"\")\n            execute_process(\n                COMMAND git rev-parse --abbrev-ref HEAD\n                WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n                OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_VERSION_BRANCH\n                OUTPUT_STRIP_TRAILING_WHITESPACE\n                ERROR_QUIET\n            )\n            execute_process(\n                COMMAND git log -1 --format=%h\n                WORKING_DIRECTORY   ${GIT_DESCRIBE_PATH}\n                OUTPUT_VARIABLE     GIT_DESCRIBE_GIT_VERSION_COMMIT\n                OUTPUT_STRIP_TRAILING_WHITESPACE\n                ERROR_QUIET\n            )\n\n            set(${GIT_DESCRIBE_GIT_VERSION} \"${GIT_DESCRIBE_GIT_VERSION_BRANCH}-${GIT_DESCRIBE_GIT_VERSION_COMMIT}\")\n        endif()\n    endif()\n\nendmacro()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/include_once.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nmacro(include_once file)\n    get_filename_component(INCLUDE_ONCE_FILEPATH ${file} REALPATH)\n    string(REGEX REPLACE \"(\\\\.|\\\\/+|\\\\:|\\\\\\\\+)\" \"_\" INCLUDE_ONCE_FILEPATH ${INCLUDE_ONCE_FILEPATH})\n    get_property(INCLUDED_${INCLUDE_ONCE_FILEPATH}_LOCAL GLOBAL PROPERTY INCLUDED_${INCLUDE_ONCE_FILEPATH})\n    if (INCLUDED_${INCLUDE_ONCE_FILEPATH}_LOCAL)\n        return()\n    else()\n        set_property(GLOBAL PROPERTY INCLUDED_${INCLUDE_ONCE_FILEPATH} true)\n\n        include(${file})\n    endif()\nendmacro()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/install_runtime.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n## This file is mainly used to allow runtime installation\n## There are some utilities cmake functions to ease the generic deployement (abstract common usage of cmake)...\n##\n## You cannot run your programm automaticaly from your CNAKE_BINARY_DIR when you build\n## as it will miss all dependencies and ressources files...\n## You have to run install target in order to test your programm.\n##\n## The only one function/macros you may use inside your sub-CMakeLists.txt (sub-project) is :\n## ******************\n## ibr_install_target macro => see documentation at the end of this file\n## ******************\n## It use these utilities cmake functions to abstract the installation in an uniform way for all sub-projects.\n##\nif(__install_runtime_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__install_runtime_cmake_INCLUDED__ ON)\nendif()\n\n\n##\n## Allow to write a resource config file which contain additional ressource paths\n## (used by IBR_Common Resource system to load shaders and potentialy images, plugins and so on)\n##\n## ADD option list all the paths to add in the file (relative paths are interpreted relative to working dir of the executable)\n## INSTALL option to specify where we want to install this file\n##\n## Example usage:\n## resourceFile(ADD \"shaders\" \"${PROJECT_NAME}_rsc\" INSTALL bin)\n##\nmacro(resourceFile)\n\tcmake_parse_arguments(rsc \"\" \"INSTALL;FILE_PATH;CONFIG_TYPE\" \"ADD\" ${ARGN}) ## both args are directory path\n\n\tif(rsc_ADD)\n\t\tunset(IBR_RSC_FILE_CONTENT_LIST)\n\t\tif(EXISTS \"${rsc_FILE_PATH}\")\n\t\t\tfile(READ \"${rsc_FILE_PATH}\" IBR_RSC_FILE_CONTENT)\n\t\t\tstring(REGEX REPLACE \"\\n\" \";\" IBR_RSC_FILE_CONTENT_LIST \"${IBR_RSC_FILE_CONTENT}\")\n\t\tendif()\n\t\tlist(APPEND IBR_RSC_FILE_CONTENT_LIST \"${rsc_ADD}\")\n\t\tlist(REMOVE_DUPLICATES IBR_RSC_FILE_CONTENT_LIST)\n\t\tfile(WRITE \"${rsc_FILE_PATH}\" \"\")\n\t\tforeach(rscDir ${IBR_RSC_FILE_CONTENT_LIST})\n\t\t\tfile(APPEND \"${rsc_FILE_PATH}\" \"${rscDir}\\n\")\n\t\tendforeach()\n\t\tunset(rsc_ADD)\n\tendif()\n\n\tif(rsc_INSTALL)\n\t\tinstall(FILES ${rsc_FILE_PATH} CONFIGURATIONS ${rsc_CONFIG_TYPE} DESTINATION ${rsc_INSTALL})\n\t\tunset(rsc_INSTALL)\n\tendif()\nendmacro()\n\n\n##\n## Install *.pdb generated file for the current cmake project\n## assuming the output target name is the cmake project name.\n## This macro is useful for crossplateform multi config mode.\n##\n## Usage Example:\n##\n## \tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n##\t\tinstallPDB(${PROJECT_NAME} ${CMAKE_BUILD_TYPE} RUNTIME_DEST bin ARCHIVE_DEST lib LIBRARY_DEST lib)\n## \tendif()\n##\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n##\t\tinstallPDB(${PROJECT_NAME} ${CONFIG_TYPES} RUNTIME_DEST bin ARCHIVE_DEST lib LIBRARY_DEST lib)\n##\tendforeach()\n##\nmacro(installPDB targetName configType)\n\tcmake_parse_arguments(instpdb \"\" \"COMPONENT\" \"ARCHIVE_DEST;LIBRARY_DEST;RUNTIME_DEST\" ${ARGN}) ## both args are directory path\n\n\tif(NOT MSVC)\n\t\treturn()\n\tendif()\n\n    ## Check if DESTINATION are provided according to the TYPE of the given target (see install command doc to see correspodances)\n    get_target_property(type ${targetName} TYPE)\n    if(${type} MATCHES \"EXECUTABLE\" AND instpdb_RUNTIME_DEST)\n        set(pdb_DESTINATION ${instpdb_RUNTIME_DEST})\n    elseif(${type} MATCHES \"STATIC_LIBRARY\" AND instpdb_ARCHIVE_DEST)\n        set(pdb_DESTINATION ${instpdb_ARCHIVE_DEST})\n    elseif(${type} MATCHES \"MODULE_LIBRARY\" AND instpdb_LIBRARY_DEST)\n        set(pdb_DESTINATION ${instpdb_LIBRARY_DEST})\n    elseif(${type} MATCHES \"SHARED_LIBRARY\")\n        if(WIN32 AND instpdb_RUNTIME_DEST)\n            set(pdb_DESTINATION ${instpdb_RUNTIME_DEST})\n        else()\n            set(pdb_DESTINATION ${instpdb_LIBRARY_DEST})\n        endif()\n    endif()\n\n    if(NOT pdb_DESTINATION)\n\t\tset(pdb_DESTINATION bin) ## default destination of the pdb file\n\tendif()\n\n\tif(NOT instpdb_COMPONENT)\n\t\tset(instpdb_COMPONENT )\n\telse()\n\t\tset(instpdb_COMPONENT COMPONENT ${instpdb_COMPONENT})\n\tendif()\n\n\tstring(TOUPPER ${configType} CONFIG_TYPES_UC)\n\tget_target_property(PDB_PATH ${targetName} PDB_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC})\n\n\tget_target_property(confModePostfix ${targetName} ${CONFIG_TYPES_UC}_POSTFIX)\n\tif(NOT confModePostfix)\n\t\tset(confModePostfix \"\")\n\tendif()\n\tset_target_properties(${targetName} PROPERTIES  PDB_NAME_${CONFIG_TYPES_UC} ${targetName}${confModePostfix})\n\tget_target_property(PDB_NAME ${targetName} PDB_NAME_${CONFIG_TYPES_UC})# if not set, this is empty\n\n\tif(EXISTS \"${PDB_PATH}/${PDB_NAME}.pdb\")\n\t\tinstall(FILES \"${PDB_PATH}/${PDB_NAME}.pdb\" CONFIGURATIONS ${configType} DESTINATION ${pdb_DESTINATION} ${instpdb_COMPONENT} OPTIONAL)\n\tendif()\nendmacro()\n\n\n##\n## Add additional target to install a project independently and based on its component\n## configMode is used to prevent default Release installation (we want also to install in other build/config type)\n##\nmacro(installTargetProject targetOfProject targetOfInstallProject)\n \tif(DEFINED CMAKE_BUILD_TYPE) ## for make/nmake based\n\t\tset(configMode ${CMAKE_BUILD_TYPE})\n\telseif(MSVC)\n\t\t## $(Configuration) will be one of the following : Debug, Release, MinSizeRel, RelWithDebInfo\n\t\tset(configMode $(Configuration))\n \tendif()\n\tif(configMode)\n        get_target_property(srcFiles ${targetOfProject} SOURCES)\n\t\tadd_custom_target(\t${targetOfInstallProject} #ALL\n\t\t\t\t\t\t\t${CMAKE_COMMAND} -DBUILD_TYPE=${configMode} -DCOMPONENT=${targetOfInstallProject} -P ${CMAKE_BINARY_DIR}/cmake_install.cmake\n\t\t\t\t\t\t\tDEPENDS ${srcFiles}\n\t\t\t\t\t\t\tCOMMENT \"run the installation only for ${targetOfProject}\" VERBATIM\n\t\t\t\t\t\t\t)\n\t\tadd_dependencies(${targetOfInstallProject} ${targetOfProject})\n\n\t\tget_target_property(INSTALL_BUILD_FOLDER ${targetOfProject} FOLDER)\n\t\tset_target_properties(${targetOfInstallProject} PROPERTIES FOLDER ${INSTALL_BUILD_FOLDER})\n\tendif()\nendmacro()\n\n# Collect all currently added targets in all subdirectories\n#\n# Parameters:\n# - _result the list containing all found targets\n# - _dir root directory to start looking from\nfunction(get_all_targets _result _dir)\n    get_property(_subdirs DIRECTORY \"${_dir}\" PROPERTY SUBDIRECTORIES)\n    foreach(_subdir IN LISTS _subdirs)\n        get_all_targets(${_result} \"${_subdir}\")\n    endforeach()\n\n    get_directory_property(_sub_targets DIRECTORY \"${_dir}\" BUILDSYSTEM_TARGETS)\n    set(${_result} ${${_result}} ${_sub_targets} PARENT_SCOPE)\nendfunction()\n\n##\n## Add targets for building and installing subdirectories\nmacro(subdirectory_target target directory build_folder)\n\tadd_custom_target(${target}\n\t\tCOMMENT \"run build for all projects in this directory\" VERBATIM\n\t)\n\tget_all_targets(ALL_TARGETS ${directory})\n\tadd_dependencies(${target} ${ALL_TARGETS})\n\tadd_custom_target(${target}_install\n\t\t${CMAKE_COMMAND} -DBUILD_TYPE=$<CONFIG> -DCOMPONENT=${target}_install -P ${CMAKE_BINARY_DIR}/cmake_install.cmake\n\t\tCOMMENT \"run install for all projects in this directory\" VERBATIM\n\t)\n\tadd_dependencies(${target}_install ${target})\n\n\tset_target_properties(${target}\t\t\tPROPERTIES FOLDER ${build_folder})\n\tset_target_properties(${target}_install PROPERTIES FOLDER ${build_folder})\nendmacro()\n\n\n##  CMAKE install all required dependencies for an application (included system OS files like msvc*.dll for example)\n##\n## install_runtime(<installedFilePathTargetAppToResolve>\n##      [TARGET                 name]\n##      [PLUGINS \t\t\t\tname \t\t[nameN ...] [PLUGIN_PATH_NAME currentPathName [FROM_REL_PATH matchDirFromCurrentPathName] [PLUGIN_PATH_DEST installDir] ]\n##      [PLUGINS \t\t\t\t...]\n##      [DIRS \t\t\t\t\tpath \t\t[pathN ...] ]\n##\t\t[TARGET_LIBRARIES  \t\tfilePath\t[filePathN ...] ]\n##\t\t[TARGET_PACKAGES   \t\tpackageName [packageNameN ...] ]\n##\t\t[COMPONENT\t\t\t\tinstallComponentName]\n##\t\t[PLAUSIBLES_POSTFIX\t\tDebug_postfix [MinSizeRel_postfix relWithDebInfo_postfix ...] ]\n##      [VERBOSE]\n## )\n##\n## installedFilePathTargetAppToResolve : the final installed targetApp absolute full file path name you want to resolve\n##\n## TARGET           :   The target app we want to install. If given, it's used to look for link libraries paths (best choice to use, strongly advised to use it)\n##\n## PLUGINS \t\t\t: \tSome application built use/load some plugins which can't be detect inside its binary,\n##\t\t\t\t\t\tso, here you can specify which plugins the application use/load in order to install them\n##\t\t\t\t\t\tand resolve also there dependencies.\n## \t\tWith PLUGINS multi FLAGS \t:\n## \t \t\tPLUGIN_PATH_NAME \t: The current plugin full file path we want to install\n##\t\t\tFROM_REL_PATH\t\t: [optional: default only the file is kept] From which matching dir of the plugin path we want to install (keep the directories structure)\n##\t\t\tPLUGIN_PATH_DEST\t: [optional: default relative to executable directory] Where (full path to the install directory) we will install the plugin file (or file path)\n##\n## DIRS \t\t\t:\tA list of directories to looking for dependencies\n## TARGET_LIBRARIES :\tDEPRECATED (use TARGET flag instead) : The cmake content variables used for the target_link_libraries(<targetApp> ...)\n## TARGET_PACKAGES \t: \tDEPRECATED (use TARGET flag instead) : The cmake package names used for the findPackage(...) for your targetApp\n##\t\t\t\t\t\tADVICE: This flag add entries in cache (like: <packageName>_DIR), it could be useful to fill these variable!\n## COMPONENT\t\t:\t(default to runtime) Is the component name associated to the installation\n##\t\t\t\t\t\tIt is used when you want to install separatly some part of your projets (see install cmake doc)\n## VERBOSE\t\t\t: \tFor debug or to get more informations in the output console\n##\n## Usage:\n##\t install_runtime(${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}${CMAKE_EXECUTABLE_SUFFIX}\n##\t\tVERBOSE\n##      TARGET  ${PROJECT_NAME}\n##      PLAUSIBLES_POSTFIX  _d\n##      PLUGINS\n##\t\t    PLUGIN_PATH_NAME    ${PLUGIN_PATH_NAME}${CMAKE_SHARED_MODULE_SUFFIX} ## will be installed (default exec path if no PLUGINS_DEST) and then will be resolved\n##\t\t\tFROM_REL_PATH\t\tplugins ## optional, used especially for keeping qt plugins tree structure\n##          PLUGIN_PATH_DEST    ${CMAKE_INSTALL_PREFIX}/plugins ## (or relative path 'plugins' will be interpreted relative to installed executable)\n##\t\tDIRS\t\t\t\t${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}\n##\t\tTARGET_LIBRARIES\t${OPENGL_LIBRARIES}         ## DEPRECATED (use TARGET flag instead)\n##\t\t\t\t\t\t\t${GLEW_LIBRARIES}\n##\t\t\t\t\t\t\t${GLUT_LIBRARIES}\n##\t\t\t\t\t\t\t${Boost_LIBRARIES}\n##\t\t\t\t\t\t\t${SuiteSparse_LIBRARIES}\n##\t\t\t\t\t\t\t${CGAL_LIBRARIES}\n##\t\tTARGET_PACKAGES\t\tOPENGL                      ## DEPRECATED (use TARGET flag instead)\n##\t\t\t\t\t\t\tGLEW\n##\t\t\t\t\t\t\tGLUT\n##\t\t\t\t\t\t\tCGAL\n##\t\t\t\t\t\t\tBoost\n##\t\t\t\t\t\t\tSuiteSparse\n##\t)\n##\n## For plugins part, it use our internal parse_arguments_multi.cmake\n##\nfunction(install_runtime installedFilePathTargetAppToResolve)\n    set(optionsArgs \"VERBOSE\")\n    set(oneValueArgs \"COMPONENT;INSTALL_FOLDER;CONFIG_TYPE\")\n    set(multiValueArgs \"DIRS;PLUGINS;TARGET_LIBRARIES;TARGET_PACKAGES;TARGET;PLAUSIBLES_POSTFIX\")\n    cmake_parse_arguments(inst_run \"${optionsArgs}\" \"${oneValueArgs}\" \"${multiValueArgs}\" ${ARGN} )\n\n    if(IS_ABSOLUTE ${installedFilePathTargetAppToResolve})\n    else()\n        set(installedFilePathTargetAppToResolve ${inst_run_INSTALL_FOLDER}/${installedFilePathTargetAppToResolve})\n    endif()\n\n\tget_filename_component(EXEC_NAME ${installedFilePathTargetAppToResolve} NAME_WE)\n\tget_filename_component(EXEC_PATH ${installedFilePathTargetAppToResolve} PATH)\n\n\tif(NOT inst_run_COMPONENT)\n\t\tset(inst_run_COMPONENT runtime)\n\tendif()\n\n\n    ## Try to append as more possible as possible paths to find dependencies (deprecated since we can use target_properties to get back paths)\n    set(libPaths )\n\tforeach(libraryFileName ${inst_run_TARGET_LIBRARIES})\n\t\tif(IS_DIRECTORY \"${libraryFileName}\")\n\t\t\tlist(APPEND libPaths \"${libraryFileName}\")\n\t\telse()\n\t\t\tget_filename_component(libpath \"${libraryFileName}\" PATH)\n\t\t\tif(EXISTS \"${libpath}\")\n\t\t\t\tlist(APPEND libPaths \"${libpath}\")\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n\n    ## This macro is used internaly here to recursilvely get path of LINK_LIBRARIES of each non imported target\n    ## Typically if you have 2 internal dependencies between cmake targets, we want cmake to be able to get back path where are these dependencies\n    macro(recurseDepList target)\n        get_target_property(linkLibs ${target} LINK_LIBRARIES)\n        foreach(lib ${linkLibs})\n            string(FIND ${lib} \">\" strId) ## cmake is using generator-expression?\n\t\t\tif(TARGET ${lib})\n\t\t\t\t## Skipping interface libraries as they're system ones\n                get_target_property(type ${lib} TYPE)\n\t\t\t\tget_target_property(imported ${lib} IMPORTED)\n\t\t\t\tif(type STREQUAL \"INTERFACE_LIBRARY\")\n\t\t\t\t\tget_target_property(imp_loc ${lib} INTERFACE_IMPORTED_LOCATION)\n\t\t\t\t\tif(imp_loc)\n\t\t\t\t\t\tget_filename_component(imp_loc ${imp_loc} PATH)\n\t\t\t\t\t\tlist(APPEND targetLibPath ${imp_loc})\n\t\t\t\t\tendif()\n\t\t\t\t\tget_target_property(loc ${lib} INTERFACE_LOCATION)\n\t\t\t\t\tif(loc)\n\t\t\t\t\t\tget_filename_component(loc ${loc} PATH)\n\t\t\t\t\t\tlist(APPEND targetLibPath ${loc})\n\t\t\t\t\tendif()\n                ## it's not a path but a single target name\n                ## for build-target which are part of the current cmake configuration : nothing to do as cmake already know the output path\n                ## for imported target, we need to look for theire imported location\n                elseif(imported)\n                    get_target_property(imp_loc ${lib} IMPORTED_LOCATION)\n                    if(imp_loc)\n                        get_filename_component(imp_loc ${imp_loc} PATH)\n                        list(APPEND targetLibPath ${imp_loc})\n                    endif()\n                    get_target_property(loc ${lib} LOCATION)\n                    if(loc)\n                        get_filename_component(loc ${loc} PATH)\n                        list(APPEND targetLibPath ${loc})\n                    endif()\n                else()\n                    recurseDepList(${lib})\n                endif()\n            elseif(NOT ${strId} MATCHES -1) ## mean cmake use generator-expression (CMAKE VERSION > 3.0)\n                string(REGEX MATCH      \">:[@A-Za-z_:/.0-9-]+\"           targetLibPath ${lib})\n                string(REGEX REPLACE    \">:([@A-Za-z_:/.0-9-]+)\" \"\\\\1\"   targetLibPath ${targetLibPath})\n                get_filename_component(targetLibPath ${targetLibPath} PATH)\n            elseif(EXISTS ${lib})\n                set(targetLibPath ${lib})\n                get_filename_component(targetLibPath ${targetLibPath} PATH)\n            else()\n                #message(STATUS \"[install_runtime] skip link library : ${lib} , of target ${target}\")\n            endif()\n            if(targetLibPath)\n                list(APPEND targetLinkLibsPathList ${targetLibPath})\n            endif()\n        endforeach()\n        if(targetLinkLibsPathList)\n            list(REMOVE_DUPLICATES targetLinkLibsPathList)\n        endif()\n    endmacro()\n    if(inst_run_TARGET)\n        recurseDepList(${inst_run_TARGET})\n        if(targetLinkLibsPathList)\n            list(APPEND libPaths ${targetLinkLibsPathList})\n        endif()\n    endif()\n\n\tif(libPaths)\n\t\tlist(REMOVE_DUPLICATES libPaths)\n        foreach(libPath ${libPaths})\n            get_filename_component(path ${libPath} PATH)\n            list(APPEND libPaths ${path})\n        endforeach()\n\tendif()\n\n\n\t## possible speciale dir(s) according to the build system and OS\n\tif(CMAKE_SIZEOF_VOID_P EQUAL 8)\n\t\tset(BUILD_TYPES_FOR_DLL \"x64\")\n\t\tif(WIN32)\n\t\t\tlist(APPEND BUILD_TYPES_FOR_DLL \"Win64\")\n\t\tendif()\n\telse()\n\t\tset(BUILD_TYPES_FOR_DLL \"x86\")\n\t\tif(WIN32)\n\t\t\tlist(APPEND BUILD_TYPES_FOR_DLL \"Win32\")\n\t\tendif()\n\tendif()\n\n\n\t## Try to append as more as possible paths to find dependencies (here, mainly for *.dll)\n\tforeach(dir ${inst_run_DIRS} ${libPaths})\n\t\tif(EXISTS \"${dir}/bin\")\n\t\t\tlist(APPEND inst_run_DIRS \"${dir}/bin\")\n        elseif(EXISTS \"${dir}\")\n            list(APPEND inst_run_DIRS \"${dir}\")\n\t\tendif()\n\tendforeach()\n    list(REMOVE_DUPLICATES inst_run_DIRS)\n\tforeach(dir ${inst_run_DIRS})\n\t\tif(EXISTS \"${dir}\")\n\t\t\tlist(APPEND argDirs ${dir})\n\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\t\tif(EXISTS \"${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tendif()\n\t\t\t\tendif()\n\t\t\tendforeach()\n\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\tif(EXISTS \"${dir}/${OUTPUTCONFIG}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${OUTPUTCONFIG}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendforeach()\n\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\tif(EXISTS \"${dir}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tlist(APPEND argDirs \"${dir}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND argDirs \"${dir}/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\tendif()\n\tendforeach()\n\tif(argDirs)\n\t\tlist(REMOVE_DUPLICATES argDirs)\n\tendif()\n\n\n\t## Try to append as more possible paths to find dependencies (here, mainly for *.dll)\n\tforeach(packageName ${inst_run_TARGET_PACKAGES})\n\t\tif(EXISTS \"${${packageName}_DIR}\")\n\t\t\tlist(APPEND packageDirs ${${packageName}_DIR})\n\t\t\tlist(APPEND packageDirs ${${packageName}_DIR}/bin)\n\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${OUTPUTCONFIG}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${BUILD_TYPE_FOR_DLL}/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tendif()\n\t\t\t\tendif()\n\t\t\tendforeach()\n\t\t\tforeach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) ## for windows multi-generator (MSVC)\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${OUTPUTCONFIG}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendforeach()\n\t\t\tif(CMAKE_BUILD_TYPE) ## for single generator (makefiles)\n\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}\")\n\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}\")\n\t\t\t\tendif()\n\t\t\t\tforeach(BUILD_TYPE_FOR_DLL ${BUILD_TYPES_FOR_DLL})\n\t\t\t\t\tif(EXISTS \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\t\tlist(APPEND packageDirs \"${${packageName}_DIR}/bin/${CMAKE_BUILD_TYPE}/${BUILD_TYPE_FOR_DLL}\")\n\t\t\t\t\tendif()\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\telse()\n\t\t\tset(${packageName}_DIR \"$ENV{${packageName}_DIR}\" CACHE PATH \"${packageName}_DIR root directory for looking for dirs containning *.dll\")\n\t\tendif()\n\tendforeach()\n\tif(packageDirs)\n\t\tlist(REMOVE_DUPLICATES packageDirs)\n\tendif()\n\n\n\tset(dirsToLookFor \"${EXEC_PATH}\")\n\tif(packageDirs)\n\t\tlist(APPEND dirsToLookFor ${packageDirs})\n\tendif()\n\tif(argDirs)\n\t\tlist(APPEND dirsToLookFor ${argDirs})\n\tendif()\n\tget_property(used_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)\n\tif (used_LINK_DIRECTORIES)\n\t\tlist(APPEND dirsToLookFor ${used_LINK_DIRECTORIES})\n\t\tlist(REMOVE_DUPLICATES dirsToLookFor)\n\tendif()\n\n\n    ## handle plugins\n\tset(pluginsList \"\")\n    include(parse_arguments_multi) ## this function will process recursively items of the sub-list [default print messages]\n    function(parse_arguments_multi_function results)\n        cmake_parse_arguments(pamf \"VERBOSE\" \"PLUGIN_PATH_DEST;FROM_REL_PATH;EXEC_PATH;COMPONENT\" \"\" ${ARGN}) ## EXEC_PATH and COMPONENT are for exclusive internal use\n\t\tlist(REMOVE_DUPLICATES pamf_UNPARSED_ARGUMENTS)\n        foreach(PLUGIN_PATH_NAME ${pamf_UNPARSED_ARGUMENTS})\n            if(EXISTS ${PLUGIN_PATH_NAME})\n                if(IS_DIRECTORY ${PLUGIN_PATH_NAME})\n                    if(pamf_VERBOSE)\n                        message(WARNING \"${PLUGIN_PATH_NAME} IS_DIRECTORY, cannot installed a directory, please give a path filename\")\n                    endif()\n                else()\n                    if(NOT pamf_PLUGIN_PATH_DEST)\n                        set(PLUGIN_PATH_DEST ${pamf_EXEC_PATH}) ## the default dest value\n\t\t\t\t\telse()\n\t\t\t\t\t\tset(PLUGIN_PATH_DEST ${pamf_PLUGIN_PATH_DEST})\n                    endif()\n\n\t\t\t\t\tif(pamf_FROM_REL_PATH)\n\t\t\t\t\t\tfile(TO_CMAKE_PATH ${PLUGIN_PATH_NAME} PLUGIN_PATH_NAME)\n\t\t\t\t\t\tget_filename_component(PLUGIN_PATH ${PLUGIN_PATH_NAME} PATH)\n\t\t\t\t\t\tunset(PLUGIN_PATH_LIST)\n\t\t\t\t\t\tunset(PLUGIN_PATH_LIST_COUNT)\n\t\t\t\t\t\tunset(PLUGIN_REL_PATH_LIST)\n\t\t\t\t\t\tunset(PLUGIN_REL_PATH)\n\t\t\t\t\t\tstring(REPLACE \"/\" \";\" PLUGIN_PATH_LIST ${PLUGIN_PATH}) ## create a list of dir\n\t\t\t\t\t\tlist(FIND \tPLUGIN_PATH_LIST ${pamf_FROM_REL_PATH} id)\n\t\t\t\t\t\tlist(LENGTH PLUGIN_PATH_LIST PLUGIN_PATH_LIST_COUNT)\n\t\t\t\t\t\tif(${id} GREATER 0)\n\t\t\t\t\t\t\tmath(EXPR id \"${id}+1\") ## matches relative path not include\n\t\t\t\t\t\t\tmath(EXPR PLUGIN_PATH_LIST_COUNT \"${PLUGIN_PATH_LIST_COUNT}-1\") ## the end of the list\n\t\t\t\t\t\t\tforeach(i RANGE ${id} ${PLUGIN_PATH_LIST_COUNT})\n\t\t\t\t\t\t\t\tlist(GET \tPLUGIN_PATH_LIST \t${i} out)\n\t\t\t\t\t\t\t\tlist(APPEND PLUGIN_REL_PATH_LIST \t${out})\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\t\tforeach(dir ${PLUGIN_REL_PATH_LIST})\n\t\t\t\t\t\t\t\tset(PLUGIN_REL_PATH \"${PLUGIN_REL_PATH}/${dir}\")\n\t\t\t\t\t\t\tendforeach()\n\t\t\t\t\t\tendif()\n\t\t\t\t\t\tset(PLUGIN_PATH_DEST ${PLUGIN_PATH_DEST}${PLUGIN_REL_PATH})\n\t\t\t\t\tendif()\n\n                    install(FILES ${PLUGIN_PATH_NAME} CONFIGURATIONS ${inst_run_CONFIG_TYPE} DESTINATION ${PLUGIN_PATH_DEST} COMPONENT ${pamf_COMPONENT})\n                    get_filename_component(pluginName ${PLUGIN_PATH_NAME} NAME)\n                    if(IS_ABSOLUTE ${PLUGIN_PATH_DEST})\n                    else()\n                        set(PLUGIN_PATH_DEST ${inst_run_INSTALL_FOLDER}/${PLUGIN_PATH_DEST})\n                    endif()\n                    list(APPEND pluginsList ${PLUGIN_PATH_DEST}/${pluginName})\n                endif()\n            else()\n                message(WARNING \"You need to provide a valid PLUGIN_PATH_NAME\")\n                set(pluginsList )\n            endif()\n        endforeach()\n        set(${results} ${pluginsList} PARENT_SCOPE)\n    endfunction()\n\n    if(inst_run_VERBOSE)\n        list(APPEND extra_flags_to_add VERBOSE)\n    endif()\n    list(APPEND extra_flags_to_add EXEC_PATH ${EXEC_PATH} COMPONENT ${inst_run_COMPONENT}) ## for internal use inside overloaded function\n    list(LENGTH inst_run_PLUGINS inst_run_PLUGINS_count)\n    if(${inst_run_PLUGINS_count} GREATER 0)\n        parse_arguments_multi(PLUGIN_PATH_NAME inst_run_PLUGINS ${inst_run_PLUGINS} ## see internal overload parse_arguments_multi_function for processing each sub-list\n                                NEED_RESULTS ${inst_run_PLUGINS_count}  ## this is used to check when we are in the first loop (in order to reset parse_arguments_multi_results)\n                                EXTRAS_FLAGS ${extra_flags_to_add}      ## this is used to allow catching additional internal flags of our overloaded function\n        )\n    endif()\n\n    #message(parse_arguments_multi_results = ${parse_arguments_multi_results})\n    list(APPEND pluginsList ${parse_arguments_multi_results})\n\n\n\n\t## Install rules for required system runtimes such as MSVCRxx.dll\n\tset(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP ON)\n\tinclude(InstallRequiredSystemLibraries)\n\tif(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)\n\t\tinstall(FILES \t\t\t${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}\n\t\t\t\tCONFIGURATIONS \t${inst_run_CONFIG_TYPE}\n\t\t\t\tDESTINATION \t${EXEC_PATH}\n\t\t\t\tCOMPONENT   \t${inst_run_COMPONENT}\n\t\t)\n\tendif()\n\n\t## print what we are doing to do\n\tif(inst_run_VERBOSE)\n\t\tmessage(STATUS \"[install_runtime] On install target call, cmake will try to resolve dependencies for given app:\\n ${installedFilePathTargetAppToResolve} (with plausible postfix: ${inst_run_PLAUSIBLES_POSTFIX})\")\n\t\tif(pluginsList)\n\t\t\tmessage(STATUS \"   and also for plugins :\")\n\t\t\tforeach(plugin ${pluginsList})\n\t\t\t\tmessage(STATUS \"      ${plugin}\")\n\t\t\tendforeach()\n\t\tendif()\n\t\tmessage(STATUS \"   Looking for dependencies into:\")\n\t\tforeach(dir ${dirsToLookFor})\n\t\t\tmessage(STATUS \"      ${dir}\")\n\t\tendforeach()\n\tendif()\n\n\t## Install rules for required dependencies libs/plugins for the target app\n\t## will resolve all installed target files with config modes postfixes\n\tstring(TOUPPER ${inst_run_CONFIG_TYPE} inst_run_CONFIG_TYPE_UC)\n\tget_target_property(postfix ${inst_run_TARGET} \"${inst_run_CONFIG_TYPE_UC}_POSTFIX\")\n\tinstall(CODE \"set(target \t\t\t\t\t\t\\\"${inst_run_TARGET}\\\")\" \t\t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(inst_run_CONFIG_TYPE \t\t\t\\\"${inst_run_CONFIG_TYPE}\\\")\" \t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(inst_run_INSTALL_FOLDER \t\t\\\"${inst_run_INSTALL_FOLDER}\\\")\" \t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(app\t \t\t\t\t\t\t\\\"${EXEC_PATH}/${EXEC_NAME}${postfix}${CMAKE_EXECUTABLE_SUFFIX}\\\")\" \tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE \"set(dirsToLookFor \t\t\t\t\\\"${dirsToLookFor}\\\")\" \t\t\t\t\t\t\t\t\t\t\t\t\tCOMPONENT ${inst_run_COMPONENT}  CONFIGURATIONS ${CONFIG_TYPE})\n\tinstall(CODE\n\t\t[[\n\t\t\tif(\"${CMAKE_INSTALL_CONFIG_NAME}\" STREQUAL \"${inst_run_CONFIG_TYPE}\")\n\t\t\t\tmessage(STATUS \"Installing ${target} dependencies...\")\n\n\t\t\t\tfile(GET_RUNTIME_DEPENDENCIES\n\t\t\t\t\tEXECUTABLES ${app}\n\t\t\t\t\tRESOLVED_DEPENDENCIES_VAR _r_deps\n\t\t\t\t\tUNRESOLVED_DEPENDENCIES_VAR _u_deps\n\t\t\t\t\tCONFLICTING_DEPENDENCIES_PREFIX _c_deps\n\t\t\t\t\tDIRECTORIES ${dirsToLookFor}\n\t\t\t\t\tPRE_EXCLUDE_REGEXES \"api-ms-*\"\n\t\t\t\t\tPOST_EXCLUDE_REGEXES \".*system32/.*\\\\.dll\" \".*SysWOW64/.*\\\\.dll\"\n\t\t\t\t)\n\t\t\t\n\t\t\t\tif(_u_deps)\n\t\t\t\t\tmessage(WARNING \"There were unresolved dependencies for executable ${EXEC_FILE}: \\\"${_u_deps}\\\"!\")\n\t\t\t\tendif()\n\t\t\t\tif(_c_deps_FILENAMES)\n\t\t\t\t\tmessage(WARNING \"There were conflicting dependencies for executable ${EXEC_FILE}: \\\"${_c_deps_FILENAMES}\\\"!\")\n\t\t\t\tendif()\n\t\t\t\n\t\t\t\tforeach(_file ${_r_deps})\n\t\t\t\t\tfile(INSTALL\n\t\t\t\t\tDESTINATION \"${inst_run_INSTALL_FOLDER}/bin\"\n\t\t\t\t\tTYPE SHARED_LIBRARY\n\t\t\t\t\tFOLLOW_SYMLINK_CHAIN\n\t\t\t\t\tFILES \"${_file}\"\n\t\t\t\t)\n\t\t\t\tendforeach()\n\t\t\tendif()\n\t\t]]\n\t   COMPONENT ${inst_run_COMPONENT} CONFIGURATIONS ${CONFIG_TYPE}\n\t)\n\t\n\nendfunction()\n\n## High level macro to install resources in the correct folder\n##\n## EXECUTABLE: [opt] option to copy files as programs\n## RELATIVE  : [opt] copy files relatively to current folder\n## TYPE      : [opt] type and folder where to store the files\n## FOLDER    : [opt] subfolder to use\n## FILES     : [opt] contains a list of resources files to copy to install folder\nmacro(ibr_install_rsc target)\n\tcmake_parse_arguments(install_rsc_${target} \"EXECUTABLE;RELATIVE\" \"TYPE;FOLDER\" \"FILES\" ${ARGN})\n\tset(rsc_target \"${target}_${install_rsc_${target}_TYPE}\")\n\n\tif(install_rsc_${target}_FOLDER)\n\t\tset(rsc_folder \"${install_rsc_${target}_TYPE}/${install_rsc_${target}_FOLDER}\")\n\telse()\n\t\tset(rsc_folder \"${install_rsc_${target}_TYPE}\")\n\tendif()\n\n\tadd_custom_target(${rsc_target}\n\t\t\t\t\tCOMMENT \"run the ${install_rsc_${target}_TYPE} installation only for ${target} (component ${rsc_target})\"\n\t\t\t\t\tVERBATIM)\n\tforeach(scriptFile ${install_rsc_${target}_FILES})\n\t\tif(install_rsc_${target}_RELATIVE)\n\t\t\tfile(RELATIVE_PATH relativeFilename ${CMAKE_CURRENT_SOURCE_DIR} ${scriptFile})\n\t\telse()\n\t\t\tget_filename_component(relativeFilename ${scriptFile} NAME)\n\t\tendif()\n\n\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\tadd_custom_command(TARGET ${rsc_target} POST_BUILD\n\t\t\t\t\t\t\tCOMMAND ${CMAKE_COMMAND} -E\n\t\t\t\t\t\t\tcopy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}/${relativeFilename})\n\t\tendif()\n\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\tadd_custom_command(TARGET ${rsc_target} POST_BUILD\n\t\t\t\t\t\t\tCOMMAND ${CMAKE_COMMAND} -E\n\t\t\t\t\t\t\tcopy_if_different ${scriptFile} ${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}/${relativeFilename})\n\t\tendforeach()\n\tendforeach()\n\n\tget_target_property(INSTALL_RSC_BUILD_FOLDER ${target} FOLDER)\n\tset_target_properties(${rsc_target} PROPERTIES FOLDER ${INSTALL_RSC_BUILD_FOLDER})\n\n\tadd_dependencies(${target} ${rsc_target})\n\tadd_dependencies(PREBUILD ${rsc_target})\n\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tresourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CMAKE_BUILD_TYPE} FILE_PATH \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/ibr_resources.ini\")\n\t\t\n\t\tif(install_rsc_${target}_EXECUTABLE)\n\t\t\tinstall(\n\t\t\t\tPROGRAMS ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}\"\n\t\t\t)\n\t\telse()\n\t\t\tinstall(\n\t\t\t\tFILES ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}/${rsc_folder}\"\n\t\t\t)\n\t\tendif()\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tresourceFile(ADD ${rsc_folder} CONFIG_TYPE ${CONFIG_TYPES} FILE_PATH \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/ibr_resources.ini\")\n\t\t\n\t\tif(install_rsc_${target}_EXECUTABLE)\n\t\t\tinstall(\n\t\t\t\tPROGRAMS ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}\"\n\t\t\t)\n\t\telse()\n\t\t\tinstall(\n\t\t\t\tFILES ${install_rsc_${target}_FILES}\n\t\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\t\tDESTINATION \"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}/${rsc_folder}\"\n\t\t\t)\n\t\tendif()\n\tendforeach()\nendmacro()\n\n\n## High level macro to install in an homogen way all our ibr targets (it use some functions inside this file)\n##\n## RSC_FILE_ADD : [opt] is used to auto write/append relative paths of target resources into a common file\n## INSTALL_PDB  : [opt] is used to auto install PDB file (when using MSVC according to the target type)\n## STANDALONE   : [opt] bool ON/OFF var to call install_runtime or not (for bundle resolution)\n##       DIRS   : [opt] used if STANDALONE set to ON, see install_runtime doc\n##       PLUGINS: [opt] used if STANDALONE set to ON, see install_runtime doc\n## MSVC_CMD     : [opt] used to specify an absolute filePathName application to launch with the MSVC IDE Debugger associated to this target (project file)\n## MSVC_ARGS    : [opt] load the MSVC debugger with correct settings (app path, args, working dir)\n##\nmacro(ibr_install_target target)\n\tcmake_parse_arguments(ibrInst${target} \"VERBOSE;INSTALL_PDB\" \"COMPONENT;MSVC_ARGS;STANDALONE;RSC_FOLDER\" \"SHADERS;RESOURCES;SCRIPTS;DIRS;PLUGINS\" ${ARGN})\n\t\n\tif(ibrInst${target}_RSC_FOLDER)\n\t\tset(rsc_folder \"${ibrInst${target}_RSC_FOLDER}\")\n\telse()\n\t\tset(rsc_folder \"${target}\")\n\tendif()\n\n\tif(ibrInst${target}_SHADERS)\n\t\tibr_install_rsc(${target} EXECUTABLE TYPE \"shaders\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_SHADERS}\")\n    endif()\n\t\n\tif(ibrInst${target}_RESOURCES)\n\t\tibr_install_rsc(${target} TYPE \"resources\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_RESOURCES}\")\n    endif()\n\t\n\tif(ibrInst${target}_SCRIPTS)\n\t\tibr_install_rsc(${target} EXECUTABLE TYPE \"scripts\" FOLDER ${rsc_folder} FILES \"${ibrInst${target}_SCRIPTS}\")\n    endif()\n\n    if(ibrInst${target}_COMPONENT)\n        set(installCompArg COMPONENT ${ibrInst${target}_COMPONENT})\n        ## Create a custom install target based on COMPONENT\n        installTargetProject(${target} ${ibrInst${target}_COMPONENT})\n\tendif()\n\t\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tstring(TOUPPER ${CMAKE_BUILD_TYPE} CONFIG_TYPES_UC)\n\t\tset_target_properties(${target} PROPERTIES ${CONFIG_TYPES_UC}_POSTFIX \t\"${CMAKE_${CONFIG_TYPES_UC}_POSTFIX}\")\n\t\tget_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CONFIG_TYPES_UC}_POSTFIX)\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tset_target_properties(${target} PROPERTIES ${CONFIG_TYPES_UC}_POSTFIX \t\"${CMAKE_${CONFIG_TYPES_UC}_POSTFIX}\")\n\t\tget_target_property(CURRENT_TARGET_BUILD_TYPE_POSTFIX ${target} ${CONFIG_TYPES_UC}_POSTFIX)\n\tendforeach()\n\n\t## Specify default installation rules\n\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\tstring(TOUPPER ${CMAKE_BUILD_TYPE} CONFIG_TYPES_UC)\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CMAKE_BUILD_TYPE}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t\tRUNTIME \tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}} ${installCompArg}\n\t\t)\n\tendif()\n\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\tinstall(TARGETS\t${target}\n\t\t\tCONFIGURATIONS ${CONFIG_TYPES}\n\t\t\tLIBRARY\t\tDESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t\tARCHIVE\t\tDESTINATION ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t\tRUNTIME \tDESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}} ${installCompArg}\n\t\t)\n\tendforeach()\n\n    if(ibrInst${target}_INSTALL_PDB)\n        if(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\tinstallPDB(${target} ${CMAKE_BUILD_TYPE}\n\t\t\t\tLIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t\tARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t\tRUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}\n\t\t\t)\n        endif()\n        foreach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\tinstallPDB(${target} ${CONFIG_TYPES}\n\t\t\t\tLIBRARY_DEST ${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\tARCHIVE_DEST ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\tRUNTIME_DEST ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t)\n        endforeach()\n    endif()\n\n    ## install dynamic necessary dependencies\n    if(ibrInst${target}_STANDALONE)\n        get_target_property(type ${target} TYPE)\n        if(${type} MATCHES \"EXECUTABLE\")\n\n            if(ibrInst${target}_VERBOSE)\n                set(VERBOSE VERBOSE)\n            else()\n                set(VERBOSE )\n\t\t\tendif()\n\t\t\t\n\t\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\t\tinstall_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} ## default relative to CMAKE_INSTALL_PREFIX\n\t\t\t\t\tINSTALL_FOLDER\t\t\"${CMAKE_INSTALL_PREFIX_${CMAKE_BUILD_TYPE}}\"\n\t\t\t\t\tCONFIG_TYPE\t\t\t${CMAKE_BUILD_TYPE}\n\t\t\t\t\t${VERBOSE}\n\t\t\t\t\tTARGET              ${target}\n\t\t\t\t\t${installCompArg}\n\t\t\t\t\tPLUGINS\t## will be installed\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_PLUGINS}\n\t\t\t\t\tDIRS\t\t\t\t${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_DIRS}\n\t\t\t\t)\n\t\t\tendif()\n\t\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\t\tinstall_runtime(bin/${target}${CMAKE_EXECUTABLE_SUFFIX} ## default relative to CMAKE_INSTALL_PREFIX\n\t\t\t\t\tINSTALL_FOLDER\t\t\"${CMAKE_INSTALL_PREFIX_${CONFIG_TYPES_UC}}\"\n\t\t\t\t\tCONFIG_TYPE\t\t\t${CONFIG_TYPES}\n\t\t\t\t\t${VERBOSE}\n\t\t\t\t\tTARGET              ${target}\n\t\t\t\t\t${installCompArg}\n\t\t\t\t\tPLUGINS\t## will be installed\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_PLUGINS}\n\t\t\t\t\tDIRS\t\t\t\t${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPES_UC}}\n\t\t\t\t\t\t\t\t\t\t${ibrInst${target}_DIRS}\n\t\t\t\t)\n\t\t\tendforeach()\n        else()\n            message(WARNING \"STANDALONE option is only compatible with EXECUTABLES target type. Skip the STANDALONE installation process.\")\n        endif()\n    endif()\n\n    ## Provide a way to directly load the MSVC debugger with correct settings\n    if(MSVC)\n        if(ibrInst${target}_MSVC_CMD)  ## command absolute filePathName is optional as the default is to use the installed target file application\n            set(msvcCmdArg  COMMAND ${ibrInst${target}_MSVC_CMD}) ## flag following by the value (both to pass to the MSVCsetUserCommand function)\n        endif()\n        if(ibrInst${target}_MSVC_ARGS) ## args (between quotes) are optional\n            set(msvcArgsArg ARGS ${ibrInst${target}_MSVC_ARGS})   ## flag following by the value (both to pass to the MSVCsetUserCommand function)\n        endif()\n        get_target_property(type ${target} TYPE)\n        if( (ibrInst${target}_MSVC_CMD OR ibrInst${target}_MSVC_ARGS) OR (${type} MATCHES \"EXECUTABLE\") )\n\t\t\tinclude(MSVCsetUserCommand)\n\t\t\tif(DEFINED CMAKE_BUILD_TYPE)\t\t\t\t\t\t## for make/nmake based\n\t\t\t\tMSVCsetUserCommand(\t${target}\n\t\t\t\t\tPATH \t\t\t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}} ##FILE option not necessary since it deduced from targetName\n\t\t\t\t\t\t\t\t\tARGS\t\t\t\t\"${SIBR_PROGRAMARGS}\"\n\t\t\t\t\t${msvcCmdArg}\n\t\t\t\t\t#${msvcArgsArg}\n\t\t\t\t\tWORKING_DIR\t\t${CMAKE_OUTPUT_BIN_${CMAKE_BUILD_TYPE}}\n\t\t\t\t)\n\t\t\tendif()\n\t\t\tforeach(CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES}) \t## for multi config types (MSVC based)\n\t\t\t\tstring(TOUPPER ${CONFIG_TYPES} CONFIG_TYPES_UC)\n\t\t\t\tMSVCsetUserCommand(\t${target}\n\t\t\t\t\tPATH \t\t\t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}} ##FILE option not necessary since it deduced from targetName\n\t\t\t\t\t\t\t\t\tARGS\t\t\t\t\"${SIBR_PROGRAMARGS}\"\n\t\t\t\t\t${msvcCmdArg}\n\t\t\t\t\t#${msvcArgsArg}\n\t\t\t\t\tWORKING_DIR\t\t${CMAKE_OUTPUT_BIN_${CONFIG_TYPES_UC}}\n\t\t\t\t)\n\t\t\tendforeach()\n        elseif(NOT ${type} MATCHES \"EXECUTABLE\")\n            #message(\"Cannot set MSVCsetUserCommand with target ${target} without COMMAND parameter as it is not an executable (skip it)\")\n        endif()\n    endif()\n\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/parse_arguments_multi.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nif(NOT WIN32 OR __parse_arguments_multi_cmake_INCLUDED__)\n\treturn()\nelse()\n\tset(__parse_arguments_multi_cmake_INCLUDED__ ON)\nendif()\n\n## This macro allow to process repeating multi value args from a given function which use cmake_parse_arguments module.\n##\n## cmake_parse_arguments multi args standard behavior:\n##    function(foo)\n##        cmake_parse_arguments(arg \"\" \"\" \"MULTI\" ${ARGN})\n##        foreach(item IN LISTS arg_MULTI)\n##            message(STATUS \"${item}\")\n##        endforeach()\n##    endfunction()\n##    foo(MULTI x y MULTI z w)\n##  The above code outputs 'z' and 'w'. It originally expected it to output all of 'x' 'y' 'z' 'w'.\n##\n## Using this macro inside a function which want to handle repeating multi args values\n## will recursively iterate onto the multi tags list to process each sub list.\n## It take as 1st argument the subTag flag to separate sub list from the main multi list.\n## It take as 2nd argument the nameList of the main multi list (the multiValuesArgs from cmake_parse_arguments: here it is MULTI in the example)\n## and that's why it is important that it should be a macro and not a function (to get access to external variable).\n## Then you give the content of this list allowing to be processed by the macro.\n##\n## parse_arguments_multi macro call a parse_arguments_multi_function which do actually the process from the given sub-list.\n## By default this function only print infos about what variables you are trying to pass/process (only verbose messages),\n## but, by overloading this cmake function, you will be able to externalize the process of your multi argument list.\n##\n## Usage (into a function) : \n## parse_arguments_multi(<multiArgsSubTag> <multiArgsList> <multiArgsListContent> \n##      [NEED_RESULTS <multiArgsListSize>] [EXTRAS_FLAGS <...> <...> ...]\n## )\n##\n## Simple usage example [user point of view]:\n## foo(MULTI\n##    SUB_MULTI x y\n##    SUB_MULTI z w\n## )\n##\n## Simple usage example [inside a function]:\n##    function(foo)\n##        cmake_parse_arguments(arg \"\" \"\" \"MULTI\" ${ARGN})\n##        include(parse_arguments_multi)\n##        function(parse_arguments_multi_function )\n##          #message(\"I'm an overloaded cmake function used by parse_arguments_multi\")\n##          #message(\"I'm processing first part of my sub list: ${ARGN}\")\n##          message(\"ARGV0=${ARGV0}\")\n##          message(\"ARGV1=${ARGV1}\")\n##        endfunction()\n##        parse_arguments_multi(SUB_MULTI arg_MULTI ${arg_MULTI}) ## this function will process recusively items of the sub-list [default print messages]\n##    endfunction()\n##\n##  Will print:\n##      ARGV0=z\n##      ARGV1=w\n##      ARGV0=x\n##      ARGV1=y\n##\n## WARNING : DO NEVER ADD EXTRA THINGS TO parse_arguments_multi MACRO :\n##          parse_arguments_multi(SUB_MULTI arg_MULTI ${arg_MULTI} EXTRAS foo bar SOMTHING) => will failed !!\n## use EXTRAS_FLAGS instead !!\n##\n## Advanced usage example [user point of view]:\n## bar(C:/prout/test.exe VERBOSE \n##      PLUGINS\n##          PLUGIN_PATH_NAME x      PLUGIN_PATH_DEST w\n##          PLUGIN_PATH_NAME a b    PLUGIN_PATH_DEST y\n##          PLUGIN_PATH_NAME c\n## )\n##\n## Advanced usage example [inside a function]:\n##    function(bar execFilePathName)\n##        cmake_parse_arguments(arg \"VERBOSE\" \"\" \"PLUGINS\" ${ARGN})\n##\n##        include(parse_arguments_multi)\n##        function(parse_arguments_multi_function results)\n##            cmake_parse_arguments(pamf \"VERBOSE\" \"PLUGIN_PATH_DEST;EXEC_PATH\" \"\" ${ARGN}) ## EXEC_PATH is for internal use\n##            message(\"\")\n##            message(\"I'm an overloaded cmake function used by parse_arguments_multi from install_runtime function\")\n##            message(\"I'm processing first part of my sub list: ${ARGN}\")\n##            message(\"PLUGIN_PATH_NAME = ${pamf_UNPARSED_ARGUMENTS}\")\n##            message(pamf_VERBOSE = ${pamf_VERBOSE})\n##            message(\"pamf_PLUGIN_PATH_DEST = ${pamf_PLUGIN_PATH_DEST}\")\n##            message(pamf_EXEC_PATH = ${pamf_EXEC_PATH})\n##            if(NOT ${pamf_PLUGIN_PATH_DEST})\n##              set(pamf_PLUGIN_PATH_DEST ${pamf_EXEC_PATH})\n##            endif()\n##            foreach(plugin ${pamf_UNPARSED_ARGUMENTS})\n##              get_filename_component(pluginName ${plugin} NAME)\n##              list(APPEND pluginsList ${pamf_PLUGIN_PATH_DEST}/${pluginName})\n##            endforeach()\n##            set(${results} ${pluginsList} PARENT_SCOPE)\n##        endfunction()\n##\n##        if(arg_VERBOSE)\n##            list(APPEND extra_flags_to_add VERBOSE) ## here we transmit the VERNOSE flag\n##        endif()\n##        get_filename_component(EXEC_PATH ${execFilePathName} PATH) ## will be the default value if PLUGIN_PATH_DEST option is not provided\n##        list(APPEND extra_flags_to_add EXEC_PATH ${EXEC_PATH})  \n##        list(LENGTH arg_PLUGINS arg_PLUGINS_count)\n##        parse_arguments_multi(PLUGIN_PATH_NAME arg_PLUGINS ${arg_PLUGINS}\n##                            NEED_RESULTS ${arg_PLUGINS_count}  ## this is used to check when we are in the first loop (in order to reset parse_arguments_multi_results)\n##                            EXTRAS_FLAGS ${extra_flags_to_add} ## this is used to allow catching VERBOSE and PLUGIN_PATH_DEST flags of our overloaded function\n##        )\n##    endfunction()\n##    message(parse_arguments_multi_results = ${parse_arguments_multi_results}) ## list of the whole pluginsList\n##    #Will print w/x;a/y;b/y;C:/prout/c\n##\n##  NOTE that here, since our overloaded function need to provide a result list, we use the other parse_arguments_multi_function signature (the which one with a results arg)\n##\n\nfunction(parse_arguments_multi_function_default) ## used in case of you want to reset the default behavior of this function process\n    message(\"[default function] parse_arguments_multi_function(ARGC=${ARGC} ARGV=${ARGV} ARGN=${ARGN})\")\n    message(\"This function is used by parse_arguments_multi and have to be overloaded to process sub list of multi values args\")\nendfunction()\n\nfunction(parse_arguments_multi_function )   ## => the function to overload\n    parse_arguments_multi_function_default(${ARGN})\nendfunction()\n\n## first default signature above\n##------------------------------\n## second results signature behind\n\nfunction(parse_arguments_multi_function_default result) ## used in case of you want to reset the default behavior of this function process\n    message(\"[default function] parse_arguments_multi_function(ARGC=${ARGC} ARGV=${ARGV} ARGN=${ARGN})\")\n    message(\"This function is used by parse_arguments_multi and have to be overloaded to process sub list of muluti values args\")\nendfunction()\n\nfunction(parse_arguments_multi_function result)   ## => the function to overload\n    parse_arguments_multi_function_default(result ${ARGN})\nendfunction()\n\n## => the macro to use inside your function which use cmake_parse_arguments\n# NOTE: entry point of parse_arguments_multi, which is called from win3rdPart)\nmacro(parse_arguments_multi multiArgsSubTag multiArgsList #<${multiArgsList}> the content of the list\n)\n    # message (STATUS \"\")\n    # message(STATUS \"calling parse_arguemnts_multi defined in parse_arguments_multi.cmake:141\")\n    # message(STATUS \"multiArgsSubTag = ${multiArgsSubTag}\")\t# CHECK_CACHED_VAR\n    # message(STATUS \"multiArgsList = ${multiArgsList}\")\t# it contains the name of the variable which is holding the list i.e w3p_MULTI_SET\n    # message(STATUS \"value of ${multiArgsList} = ${${multiArgsList}}\") # a semicolon separated list of values passed to SET or MULTISET keyword in win3rdParty\n    # message(STATUS \"actual values ARGN = ${ARGN}\")  # the same as ${${multiArgsList}}\n\n    ## INFO\n    ## starting from CMake 3.5 cmake_parse_arguments is not a module anymore and now is a native CMake command.\n    ## the behaviour is different though\n    ## In CMake 3.4, if you pass multiple times a multi_value_keyword, CMake returns the values of the LAST match\n    ## In CMake 3.5 and above, CMake returns the whole list of values that were following that multi_value_keyword\n    ## example:\n    ## cmake_parse_arguments(\n    ##\t\t\t<prefix>\n    ##\t\t\t\"\"\t\t# options\n    ##\t\t\t\"\"\t\t# one value keywords\n    ##\t\t\t\"MY_MULTI_VALUE_TAG\"\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value1 value2\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value3 value4\n    ##\t\t\t\tMY_MULTI_VALUE_TAG value5 value6\n    ##\t\t\t)\n    ## result in CMake 3.4\n    ## <prefix>_MY_MULTI_VALUE_TAG = \"value5;value6\"\n    ##\n    ## result in CMake 3.8\n    ## <prefix>_MY_MULTI_VALUE_TAG = \"value5;value6\"\n\n    #include(CMakeParseArguments) #module CMakeParseArguments is obsolete since cmake 3.5\n    # cmake_parse_arguments (<prefix> <options> <one_value_keywords> <multi_value_keywords> args)\n    # <options> : options (flags) pass to the macro\n    # <one_value_keywords> : options that neeed a value\n    # <multi_value_keywords> : options that neeed more than one value\n    cmake_parse_arguments(_pam \"\" \"NEED_RESULTS\" \"${multiArgsSubTag};EXTRAS_FLAGS\" ${ARGN})\n    \n    ## multiArgsList is the name of the list used by the multiValuesOption flag from the cmake_parse_arguments of the user function\n    ## that's why we absolutly need to use MACRO here (and also for passing parse_arguments_multi_results when NEED_RESULTS flag is set)\n    \n    ## for debugging\n    #message(\"\")\n    #message(\"[parse_arguments_multi] => ARGN = ${ARGN}\")\n    #message(\"_pam_NEED_RESULTS=${_pam_NEED_RESULTS}\")\n    #message(\"_pam_EXTRAS_FLAGS=${_pam_EXTRAS_FLAGS}\")\n    # foreach(var ${_pam_${multiArgsSubTag}})\n    #     message(\"arg=${var}\")\n    # endforeach()\n\n    if (${CMAKE_VERSION} VERSION_GREATER \"3.5\")\n        # lets make ${_pam_${multiArgsSubTag}} behave as it is in version 3.4\n        # that means, cmake_parse_arguments should have only the last values of a multi set for a given keyword\n\n        # message(\"\")\n        # message(\"values in multiArgsList\")\n        # foreach(val ${${multiArgsList}})\n        #     message(STATUS ${val})\n        # endforeach()\n        # message(\"end values in multiArgsList\")\n\n\n        set(lastIndexFound OFF)\n        list(LENGTH ${multiArgsList} argnLength)\n        # message(${argnLength})\n        math(EXPR argnLength \"${argnLength}-1\")             # make last index a valid one\n        set(recordIndex 0)\n        set(records \"\")                                     # clear records list\n        set(record0 \"\")                                    # clear first record list\n        foreach(iter RANGE ${argnLength})\n            list(GET ${multiArgsList} ${iter} value)\n            # message(STATUS \"index=${iter} value=${value}\")\n            if (${value} STREQUAL ${multiArgsSubTag})\n                if (lastIndexFound)\n                    list(APPEND records ${recordIndex})    # records store the list NAMES\n                    math(EXPR recordIndex \"${recordIndex}+1\")\n                    set(record${recordIndex} \"\")            # clear record list\n                else ()\n                    set(lastIndexFound ON)\n                endif()\n\n                set(lastIndex ${iter})\n            else ()\n                if (lastIndexFound)\n                    # message(${value})\n                    list(APPEND record${recordIndex} ${value})\n                endif()\n            endif()\n        endforeach()\n\n        # save the last list of values\n        if (lastIndexFound)\n            list(APPEND records ${recordIndex})    # records store the list NAMES\n        endif()\n\n        # set multiArgsList to make it behave like CMake 3.4\n        # message(\"\")\n        # message(\"using my records\")\n        foreach(recordName ${records})\n            # message(${recordName})\n            # foreach(value ${record${recordName}})\n            #     message(${value})\n            # endforeach()\n            # message(\"\")\n            set(_pam_${multiArgsSubTag} ${record${recordName}})\n        endforeach()\n        # message(${_pam_${multiArgsSubTag}})\n\n        # message(\"\")\n        # message(\"using argn\")\n        # foreach(value ${ARGN})\n        #     message(${value})\n        # endforeach()\n    endif() # end if cmake > 3.5\n\n    # message(\"values with pam ${_pam_${multiArgsSubTag}}\")\n\n    ## check and init\n    list(LENGTH ${multiArgsList} globalListCount)\t# GLUT_TRACE: globalListCound=16 in CMake3.4 and CMake3.8\n    # message(STATUS \"nr items in multiArgsList: ${globalListCount}\")\n    math(EXPR globalListCount \"${globalListCount}-1\") ## because it will contain [multiArgsSubTag + ${multiArgsList}]\n    if(_pam_NEED_RESULTS)\n        if(${globalListCount} EQUAL ${_pam_NEED_RESULTS})\n            ## first time we enter into this macro (because we call it recursively)\n            unset(parse_arguments_multi_results)\n        endif()\n    endif()\n    \n    ## process the part of the multi agrs list\n    ## ${ARGN} shouldn't be passed to the function in order to avoid missmatch size list ${multiArgsList} and _pam_${multiArgsSubTag}\n    ## if you want to pass extra internal flags from your function to this callback, use EXTRAS_FLAGS\n    if(_pam_NEED_RESULTS)\n        parse_arguments_multi_function(parse_arguments_multi_function_result ${_pam_${multiArgsSubTag}} ${_pam_EXTRAS_FLAGS})\n        list(APPEND parse_arguments_multi_results ${parse_arguments_multi_function_result})\n    else()\n        # message(STATUS \"about to call parse_arguments_multi_function in parse_arguments_multi.cmake:177 ${_pam_${multiArgsSubTag}} and extra flags ${_pam_EXTRAS_FLAGS}\")\n        parse_arguments_multi_function(${_pam_${multiArgsSubTag}} ${_pam_EXTRAS_FLAGS})\n    endif()\n\n    ## remove just processed items from the main list to process (multiArgsList)\n    list(REVERSE ${multiArgsList})\n    list(LENGTH _pam_${multiArgsSubTag} subTagListCount)\n    unset(ids)\n    foreach(id  RANGE ${subTagListCount})\n         list(APPEND ids ${id})\n    endforeach()\n    list(REMOVE_AT  ${multiArgsList} ${ids})\n    list(REVERSE    ${multiArgsList})\n    \n    ## test if remain sub multi list to process (recursive call) or finish the process\n    list(LENGTH ${multiArgsList} mainTagListCount)\n    if(${mainTagListCount} GREATER 1)\n        ## do not pass ${ARGN} just because it will re pass the initial 2 inputs args and we wont as they was consumed (in order to avoir conflicts)\n        # message(STATUS \"about to call a parse_arguments_multi but without knowing where the definition is going to be taken from\")\n        parse_arguments_multi(${multiArgsSubTag} ${multiArgsList} ${${multiArgsList}} \n                                NEED_RESULTS ${_pam_NEED_RESULTS} EXTRAS_FLAGS ${_pam_EXTRAS_FLAGS}\n            )\n    endif()\nendmacro()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/cmake/windows/sibr_library.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n# NOTE\n# This feature is used to easily download, store and link external dependencies. This\n# requires to prepare pre-compiled libraries (to download). For now, packages have\n# only be prepare for Windows 64-bit with Visual Studio 2012. (You should re-build\n# everything if you want to use another version of Visual Studio/ another compiler).\n\n# NOTE ABOUT UNIX SYSTEMS\n# There is no need for \"searching mechanism\". This function is discard and your\n# libraries should be installed is the standard folders that are:\n#\n# /usr/include/\n# /usr/lib/\n# /usr/lib64/\n# for packages downloaded using apt-get/yum\n# \n# /usr/local/include/\n# /usr/local/lib/\n# /usr/local/lib64/\n# for packages manually installed (\"make install\")\n#\n# if you encounter problems when linking (e.g. lib not found even if it is installed),\n# please check these folders are in your search PATH environment variables.\n\nset(EXTLIBS_PACKAGE_FOLDER \"${CMAKE_SOURCE_DIR}/extlibs\")\n\nfunction(sibr_addlibrary)\n    if(NOT WIN32)\n        return()\n    endif()\n\n    file(MAKE_DIRECTORY ${EXTLIBS_PACKAGE_FOLDER})\n    cmake_parse_arguments(args \"VCID\" \"VERBOSE;TIMEOUT;DEFAULT_USE;NAME;VERSION;MSVC11;MSVC12;MSVC14;MSVC17\" \"MULTI_SET;SET\" ${ARGN})\n\n\n    if (NOT \"${args_VERSION}\" MATCHES \"\")\n        message(WARNING \"VERSION is not implemented yet\")\n    endif()\n\n    set(lcname \"\")\n    set(ucname \"\")\n    string(TOLOWER \"${args_NAME}\" lcname)\n    string(TOUPPER \"${args_NAME}\" ucname)\n\n    set(LIB_PACKAGE_FOLDER \"${EXTLIBS_PACKAGE_FOLDER}/${lcname}\")\n    win3rdParty(${ucname}\n                    $<args_VCID:VCID>\n                    VERBOSE     ${args_VERBOSE}\n                    TIMEOUT     ${args_TIMEOUT}\n                    DEFAULT_USE ${args_DEFAULT_USE}\n                    MSVC11 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC11}\"\n                    MSVC12 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC12}\"\n                    MSVC14 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC14}\" # TODO SV: make sure to build this library if required\n\t\t\t\t\tMSVC17 \"${LIB_PACKAGE_FOLDER}\" \"${args_MSVC17}\"\n                    SET         ${args_SET}\n                    MULTI_SET   ${args_MULTI_SET}\n                )\n\t\t\t\n    # Add include/ directory\n    # and lib/ directories\n\n    # TODO SV: paths not matching with current hierarchy. example: libraw/libraw-0.17.1/include\n    # SR:\tThe link directories will also be used to lookup for dependency DLLs to copy in the install directory.\n    #\t\tSome libraries put the DLLs in the bin/ directory, so we include those.\n    file(GLOB subdirs RELATIVE ${LIB_PACKAGE_FOLDER} ${LIB_PACKAGE_FOLDER}/*)\n    set(dirlist \"\")\n    foreach(dir ${subdirs})\n        if(IS_DIRECTORY ${LIB_PACKAGE_FOLDER}/${dir})\n            # message(\"adding ${LIB_PACKAGE_FOLDER}/${dir}/include/ to the include directories\")\n            include_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/include/\")\n            # message(\"adding ${LIB_PACKAGE_FOLDER}/${dir}/lib[64] to the link directories\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/lib/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/lib64/\")\n            link_directories(\"${LIB_PACKAGE_FOLDER}/${dir}/bin/\")\n        endif()\n    endforeach()\n\nendfunction()\n\ninclude(FetchContent)\ninclude(git_describe)\n\nfunction(sibr_gitlibrary)\n    cmake_parse_arguments(args \"\" \"TARGET;GIT_REPOSITORY;GIT_TAG;ROOT_DIR;SOURCE_DIR\" \"INCLUDE_DIRS\" ${ARGN})\n    if(NOT args_TARGET)\n        message(FATAL \"Error on sibr_gitlibrary : please define your target name.\")\n        return()\n    endif()\n\n    if(NOT args_ROOT_DIR)\n        set(args_ROOT_DIR ${args_TARGET})\n    endif()\n\n    if(NOT args_SOURCE_DIR)\n        set(args_SOURCE_DIR ${args_TARGET})\n    endif()\n\n    if(args_GIT_REPOSITORY AND args_GIT_TAG)\n        if(EXISTS ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}/.git)\n            git_describe(\n                PATH ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n                GIT_URL SIBR_GITLIBRARY_URL\n                GIT_BRANCH SIBR_GITLIBRARY_BRANCH\n                GIT_COMMIT_HASH SIBR_GITLIBRARY_COMMIT_HASH\n                GIT_TAG SIBR_GITLIBRARY_TAG\n            )\n\n            if((SIBR_GITLIBRARY_URL STREQUAL args_GIT_REPOSITORY) AND\n                ((SIBR_GITLIBRARY_BRANCH STREQUAL args_GIT_TAG) OR\n                 (SIBR_GITLIBRARY_TAG STREQUAL args_GIT_TAG) OR\n                 (SIBR_GITLIBRARY_COMMIT_HASH STREQUAL args_GIT_TAG)))\n                message(STATUS \"Library ${args_TARGET} already available, skipping.\")\n                set(SIBR_GITLIBRARY_DECLARED ON)\n            else()\n                message(STATUS \"Adding library ${args_TARGET} from git...\")\n            endif()\n        endif()\n\n        FetchContent_Declare(${args_TARGET}\n            GIT_REPOSITORY \t${args_GIT_REPOSITORY}\n            GIT_TAG\t\t\t${args_GIT_TAG}\n            GIT_SHALLOW\t\tON\n            SOURCE_DIR \t\t${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n            SUBBUILD_DIR    ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild\n            BINARY_DIR      ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build\n        )\n        FetchContent_GetProperties(${args_TARGET})\n        string(TOLOWER \"<name>\" lcTargetName)\n\n        if((NOT SIBR_GITLIBRARY_DECLARED) AND (NOT ${lcTargetName}_POPULATED))\n            message(STATUS \"Populating library ${args_TARGET}...\")\n            FetchContent_Populate(${args_TARGET} QUIET\n                GIT_REPOSITORY \t${args_GIT_REPOSITORY}\n                GIT_TAG\t\t\t${args_GIT_TAG}\n                SOURCE_DIR \t\t${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}\n                SUBBUILD_DIR    ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild\n                BINARY_DIR      ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build\n            )\n        endif()\n\n        add_subdirectory(${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build)\n\n        get_target_property(type ${args_TARGET} TYPE)\n        if(NOT (type STREQUAL \"INTERFACE_LIBRARY\"))\n            set_target_properties(${args_TARGET} PROPERTIES FOLDER \"extlibs\")\n        endif()\n\n        list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR})\n        list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR})\n\n        foreach(args_INCLUDE_DIR ${args_INCLUDE_DIRS})\n            list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR}/${args_INCLUDE_DIR})\n        endforeach()\n\n        include_directories(${${args_TARGET}_INCLUDE_DIRS})\n    else()\n        message(FATAL \"Error on sibr_gitlibrary for target ${args_TARGET}: missing git tag or git url.\")\n    endif()\nendfunction()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#########################################################\n# Include doxygen documentation target\n#########################################################\noption(BUILD_DOCUMENTATION \"build doxygen documentation ('Build' DOCUMENTATION target, and find the compiled docs in install/docs/index.html)\" OFF)\nif(BUILD_DOCUMENTATION)\n\tset(DOXYGEN_REQUIRED_VERSION \"1.8.17\")\n\tfind_package(Doxygen)\n\tif(NOT DOXYGEN_FOUND)\n\t\tmessage(FATAL_ERROR \"Doxygen not found, unable to generate documentation.\")\n\telseif(DOXYGEN_VERSION VERSION_LESS DOXYGEN_REQUIRED_VERSION)\n\t\tmessage(FATAL_ERROR \"Doxygen version is less than ${DOXYGEN_REQUIRED_VERSION} (Current version is ${DOXYGEN_VERSION}).\")\n\telse()\n\t\tset(DOXY_DOC_DEST_DIR\t${CMAKE_INSTALL_ROOT}/docs)\t\t\t\t\t\t## used in the doxyfile.in\n\t\t\n\t\tset(DOXY_DOC_INPUT_ROOT_DIRS        \"${CMAKE_HOME_DIRECTORY}/src ${CMAKE_HOME_DIRECTORY}/docs ${CMAKE_CURRENT_BINARY_DIR}/generated\")    \t\t\t\t## used in the doxyfile.in\n\t\tset(DOXY_DOC_EXCLUDE_PATTERNS_DIRS  \"${DOXY_DOC_EXCLUDE_PATTERNS_DIRS}\") ## used in the doxyfile.in\n\t\tset(DOXY_DOC_COMMON_IMG_PATH        \"${CMAKE_CURRENT_SOURCE_DIR}/img ${CMAKE_HOME_DIRECTORY}/src/projects\")\n\t\tset(DOXY_DOC_PAGES_DIR\t\t\t\t\"${CMAKE_CURRENT_SOURCE_DIR}/pages\")\n\t\tset(DOXY_DOC_GENERATED_DOC_DIR\t\t\"${CMAKE_CURRENT_BINARY_DIR}/generated\")\n\t\t\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_SAMPLES_SUBPAGE_REF\t\"${SIBR_PROJECTS_SAMPLES_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_OURS_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_OURS_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF\t\"${SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_OTHERS_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_OTHERS_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_SAMPLES_REF_REF\t\t\"${SIBR_PROJECTS_SAMPLES_REF_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_OURS_REF_REF\t\t\t\"${SIBR_PROJECTS_OURS_REF_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_TOOLBOX_REF_REF\t\t\"${SIBR_PROJECTS_TOOLBOX_REF_REF}\")\n\t\tstring(REPLACE \"\\\\\" \"\\\\\\\\\" SIBR_PROJECTS_OTHERS_REF_REF\t\t\t\"${SIBR_PROJECTS_OTHERS_REF_REF}\")\n\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_SAMPLES_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_SAMPLES_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_OURS_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_OURS_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_OTHERS_SUBPAGE_REF\t\t\"${SIBR_PROJECTS_OTHERS_SUBPAGE_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_SAMPLES_REF_REF\t\t\t\"${SIBR_PROJECTS_SAMPLES_REF_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_OURS_REF_REF\t\t\t\"${SIBR_PROJECTS_OURS_REF_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_TOOLBOX_REF_REF\t\t\t\"${SIBR_PROJECTS_TOOLBOX_REF_REF}\")\n\t\tstring(REPLACE \"\\n\" \"\\\\n\" SIBR_PROJECTS_OTHERS_REF_REF\t\t\t\"${SIBR_PROJECTS_OTHERS_REF_REF}\")\n\n\t\tfile(GLOB doxygen_config_files \"*.in\")\n\t\tforeach(filename ${doxygen_config_files})\n\t\t\tmessage(STATUS \"Generating ${filename}...\")\n\t\t\tget_filename_component(output_filename ${filename} NAME_WLE)\n\t\t\tmessage(STATUS \"Output in ${CMAKE_CURRENT_BINARY_DIR}/${output_filename}...\")\n\t\t\tconfigure_file(${filename} ${CMAKE_CURRENT_BINARY_DIR}/${output_filename} @ONLY)\n\t\tendforeach()\n\n\t\tadd_custom_target(DOCUMENTATION ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/doxygen_prebuild.cmake\n\t\t\tCOMMAND ${DOXYGEN_EXECUTABLE} \"${CMAKE_CURRENT_BINARY_DIR}/doxyfile\"\n\t\t\tWORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}\n\t\t\tCOMMENT \"Building user's documentation into ${DOXY_DOC_DEST_DIR} dir...\"\n\t\t)\n\tendif()\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/doxyfile.in",
    "content": "# Doxyfile 1.8.20\r\n\r\n# This file describes the settings to be used by the documentation system\r\n# doxygen (www.doxygen.org) for a project.\r\n#\r\n# All text after a double hash (##) is considered a comment and is placed in\r\n# front of the TAG it is preceding.\r\n#\r\n# All text after a single hash (#) is considered a comment and will be ignored.\r\n# The format is:\r\n# TAG = value [value, ...]\r\n# For lists, items can also be appended using:\r\n# TAG += value [value, ...]\r\n# Values that contain spaces should be placed between quotes (\\\" \\\").\r\n\r\n#---------------------------------------------------------------------------\r\n# Project related configuration options\r\n#---------------------------------------------------------------------------\r\n\r\n# This tag specifies the encoding used for all characters in the configuration\r\n# file that follow. The default is UTF-8 which is also the encoding used for all\r\n# text before the first occurrence of this tag. Doxygen uses libiconv (or the\r\n# iconv built into libc) for the transcoding. See\r\n# https://www.gnu.org/software/libiconv/ for the list of possible encodings.\r\n# The default value is: UTF-8.\r\n\r\nDOXYFILE_ENCODING      = UTF-8\r\n\r\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\r\n# double-quotes, unless you are using Doxywizard) that should identify the\r\n# project for which the documentation is generated. This name is used in the\r\n# title of most generated pages and in a few other places.\r\n# The default value is: My Project.\r\n\r\nPROJECT_NAME           = SIBR\r\n\r\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\r\n# could be handy for archiving the generated documentation or if some version\r\n# control system is used.\r\n\r\nPROJECT_NUMBER         = @SIBR_CORE_VERSION@\r\n\r\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\r\n# for a project that appears at the top of each page and should give viewer a\r\n# quick idea about the purpose of the project. Keep the description short.\r\n\r\nPROJECT_BRIEF          =\r\n\r\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\r\n# in the documentation. The maximum height of the logo should not exceed 55\r\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\r\n# the logo to the output directory.\r\n\r\nPROJECT_LOGO           =\r\n\r\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\r\n# into which the generated documentation will be written. If a relative path is\r\n# entered, it will be relative to the location where doxygen was started. If\r\n# left blank the current directory will be used.\r\n\r\nOUTPUT_DIRECTORY       = @DOXY_DOC_DEST_DIR@\r\n\r\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-\r\n# directories (in 2 levels) under the output directory of each output format and\r\n# will distribute the generated files over these directories. Enabling this\r\n# option can be useful when feeding doxygen a huge amount of source files, where\r\n# putting all generated files in the same directory would otherwise causes\r\n# performance problems for the file system.\r\n# The default value is: NO.\r\n\r\nCREATE_SUBDIRS         = NO\r\n\r\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\r\n# characters to appear in the names of generated files. If set to NO, non-ASCII\r\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\r\n# U+3044.\r\n# The default value is: NO.\r\n\r\nALLOW_UNICODE_NAMES    = NO\r\n\r\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\r\n# documentation generated by doxygen is written. Doxygen will use this\r\n# information to generate all constant output in the proper language.\r\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\r\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\r\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\r\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\r\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\r\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\r\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\r\n# Ukrainian and Vietnamese.\r\n# The default value is: English.\r\n\r\nOUTPUT_LANGUAGE        = English\r\n\r\n# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all\r\n# documentation generated by doxygen is written. Doxygen will use this\r\n# information to generate all generated output in the proper direction.\r\n# Possible values are: None, LTR, RTL and Context.\r\n# The default value is: None.\r\n\r\nOUTPUT_TEXT_DIRECTION  = None\r\n\r\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\r\n# descriptions after the members that are listed in the file and class\r\n# documentation (similar to Javadoc). Set to NO to disable this.\r\n# The default value is: YES.\r\n\r\nBRIEF_MEMBER_DESC      = YES\r\n\r\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\r\n# description of a member or function before the detailed description\r\n#\r\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\r\n# brief descriptions will be completely suppressed.\r\n# The default value is: YES.\r\n\r\nREPEAT_BRIEF           = YES\r\n\r\n# This tag implements a quasi-intelligent brief description abbreviator that is\r\n# used to form the text in various listings. Each string in this list, if found\r\n# as the leading text of the brief description, will be stripped from the text\r\n# and the result, after processing the whole list, is used as the annotated\r\n# text. Otherwise, the brief description is used as-is. If left blank, the\r\n# following values are used ($name is automatically replaced with the name of\r\n# the entity):The $name class, The $name widget, The $name file, is, provides,\r\n# specifies, contains, represents, a, an and the.\r\n\r\nABBREVIATE_BRIEF       =\r\n\r\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\r\n# doxygen will generate a detailed section even if there is only a brief\r\n# description.\r\n# The default value is: NO.\r\n\r\nALWAYS_DETAILED_SEC    = NO\r\n\r\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\r\n# inherited members of a class in the documentation of that class as if those\r\n# members were ordinary class members. Constructors, destructors and assignment\r\n# operators of the base classes will not be shown.\r\n# The default value is: NO.\r\n\r\nINLINE_INHERITED_MEMB  = NO\r\n\r\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\r\n# before files name in the file list and in the header files. If set to NO the\r\n# shortest path that makes the file name unique will be used\r\n# The default value is: YES.\r\n\r\nFULL_PATH_NAMES        = YES\r\n\r\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\r\n# Stripping is only done if one of the specified strings matches the left-hand\r\n# part of the path. The tag can be used to show relative paths in the file list.\r\n# If left blank the directory from which doxygen is run is used as the path to\r\n# strip.\r\n#\r\n# Note that you can specify absolute paths here, but also relative paths, which\r\n# will be relative from the directory where doxygen is started.\r\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\r\n\r\nSTRIP_FROM_PATH        =\r\n\r\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\r\n# path mentioned in the documentation of a class, which tells the reader which\r\n# header file to include in order to use a class. If left blank only the name of\r\n# the header file containing the class definition is used. Otherwise one should\r\n# specify the list of include paths that are normally passed to the compiler\r\n# using the -I flag.\r\n\r\nSTRIP_FROM_INC_PATH    =\r\n\r\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\r\n# less readable) file names. This can be useful is your file systems doesn't\r\n# support long names like on DOS, Mac, or CD-ROM.\r\n# The default value is: NO.\r\n\r\nSHORT_NAMES            = NO\r\n\r\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\r\n# first line (until the first dot) of a Javadoc-style comment as the brief\r\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\r\n# style comments (thus requiring an explicit @brief command for a brief\r\n# description.)\r\n# The default value is: NO.\r\n\r\nJAVADOC_AUTOBRIEF      = YES\r\n\r\n# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line\r\n# such as\r\n# /***************\r\n# as being the beginning of a Javadoc-style comment \"banner\". If set to NO, the\r\n# Javadoc-style will behave just like regular comments and it will not be\r\n# interpreted by doxygen.\r\n# The default value is: NO.\r\n\r\nJAVADOC_BANNER         = NO\r\n\r\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\r\n# line (until the first dot) of a Qt-style comment as the brief description. If\r\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\r\n# requiring an explicit \\brief command for a brief description.)\r\n# The default value is: NO.\r\n\r\nQT_AUTOBRIEF           = YES\r\n\r\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\r\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\r\n# a brief description. This used to be the default behavior. The new default is\r\n# to treat a multi-line C++ comment block as a detailed description. Set this\r\n# tag to YES if you prefer the old behavior instead.\r\n#\r\n# Note that setting this tag to YES also means that rational rose comments are\r\n# not recognized any more.\r\n# The default value is: NO.\r\n\r\nMULTILINE_CPP_IS_BRIEF = NO\r\n\r\n# By default Python docstrings are displayed as preformatted text and doxygen's\r\n# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the\r\n# doxygen's special commands can be used and the contents of the docstring\r\n# documentation blocks is shown as doxygen documentation.\r\n# The default value is: YES.\r\n\r\nPYTHON_DOCSTRING       = YES\r\n\r\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\r\n# documentation from any documented member that it re-implements.\r\n# The default value is: YES.\r\n\r\nINHERIT_DOCS           = YES\r\n\r\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\r\n# page for each member. If set to NO, the documentation of a member will be part\r\n# of the file/class/namespace that contains it.\r\n# The default value is: NO.\r\n\r\nSEPARATE_MEMBER_PAGES  = NO\r\n\r\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\r\n# uses this value to replace tabs by spaces in code fragments.\r\n# Minimum value: 1, maximum value: 16, default value: 4.\r\n\r\nTAB_SIZE               = 4\r\n\r\n# This tag can be used to specify a number of aliases that act as commands in\r\n# the documentation. An alias has the form:\r\n# name=value\r\n# For example adding\r\n# \"sideeffect=@par Side Effects:\\n\"\r\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\r\n# documentation, which will result in a user-defined paragraph with heading\r\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\r\n# newlines (in the resulting output). You can put ^^ in the value part of an\r\n# alias to insert a newline as if a physical newline was in the original file.\r\n# When you need a literal { or } or , in the value part of an alias you have to\r\n# escape them by means of a backslash (\\), this can lead to conflicts with the\r\n# commands \\{ and \\} for these it is advised to use the version @{ and @} or use\r\n# a double escape (\\\\{ and \\\\})\r\n\r\nALIASES                =\r\n\r\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\r\n# only. Doxygen will then generate output that is more tailored for C. For\r\n# instance, some of the names that are used will be different. The list of all\r\n# members will be omitted, etc.\r\n# The default value is: NO.\r\n\r\nOPTIMIZE_OUTPUT_FOR_C  = NO\r\n\r\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\r\n# Python sources only. Doxygen will then generate output that is more tailored\r\n# for that language. For instance, namespaces will be presented as packages,\r\n# qualified scopes will look different, etc.\r\n# The default value is: NO.\r\n\r\nOPTIMIZE_OUTPUT_JAVA   = NO\r\n\r\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\r\n# sources. Doxygen will then generate output that is tailored for Fortran.\r\n# The default value is: NO.\r\n\r\nOPTIMIZE_FOR_FORTRAN   = NO\r\n\r\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\r\n# sources. Doxygen will then generate output that is tailored for VHDL.\r\n# The default value is: NO.\r\n\r\nOPTIMIZE_OUTPUT_VHDL   = NO\r\n\r\n# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice\r\n# sources only. Doxygen will then generate output that is more tailored for that\r\n# language. For instance, namespaces will be presented as modules, types will be\r\n# separated into more groups, etc.\r\n# The default value is: NO.\r\n\r\nOPTIMIZE_OUTPUT_SLICE  = NO\r\n\r\n# Doxygen selects the parser to use depending on the extension of the files it\r\n# parses. With this tag you can assign which parser to use for a given\r\n# extension. Doxygen has a built-in mapping, but you can override or extend it\r\n# using this tag. The format is ext=language, where ext is a file extension, and\r\n# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,\r\n# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,\r\n# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:\r\n# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser\r\n# tries to guess whether the code is fixed or free formatted code, this is the\r\n# default for Fortran type files). For instance to make doxygen treat .inc files\r\n# as Fortran files (default is PHP), and .f files as C (default is Fortran),\r\n# use: inc=Fortran f=C.\r\n#\r\n# Note: For files without extension you can use no_extension as a placeholder.\r\n#\r\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\r\n# the files are not read by doxygen.\r\n\r\nEXTENSION_MAPPING      =\r\n\r\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\r\n# according to the Markdown format, which allows for more readable\r\n# documentation. See https://daringfireball.net/projects/markdown/ for details.\r\n# The output of markdown processing is further processed by doxygen, so you can\r\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\r\n# case of backward compatibilities issues.\r\n# The default value is: YES.\r\n\r\nMARKDOWN_SUPPORT       = YES\r\n\r\n# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up\r\n# to that level are automatically included in the table of contents, even if\r\n# they do not have an id attribute.\r\n# Note: This feature currently applies only to Markdown headings.\r\n# Minimum value: 0, maximum value: 99, default value: 5.\r\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\r\n\r\nTOC_INCLUDE_HEADINGS   = 0\r\n\r\n# When enabled doxygen tries to link words that correspond to documented\r\n# classes, or namespaces to their corresponding documentation. Such a link can\r\n# be prevented in individual cases by putting a % sign in front of the word or\r\n# globally by setting AUTOLINK_SUPPORT to NO.\r\n# The default value is: YES.\r\n\r\nAUTOLINK_SUPPORT       = YES\r\n\r\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\r\n# to include (a tag file for) the STL sources as input, then you should set this\r\n# tag to YES in order to let doxygen match functions declarations and\r\n# definitions whose arguments contain STL classes (e.g. func(std::string);\r\n# versus func(std::string) {}). This also make the inheritance and collaboration\r\n# diagrams that involve STL classes more complete and accurate.\r\n# The default value is: NO.\r\n\r\nBUILTIN_STL_SUPPORT    = YES\r\n\r\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\r\n# enable parsing support.\r\n# The default value is: NO.\r\n\r\nCPP_CLI_SUPPORT        = NO\r\n\r\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\r\n# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen\r\n# will parse them like normal C++ but will assume all classes use public instead\r\n# of private inheritance when no explicit protection keyword is present.\r\n# The default value is: NO.\r\n\r\nSIP_SUPPORT            = NO\r\n\r\n# For Microsoft's IDL there are propget and propput attributes to indicate\r\n# getter and setter methods for a property. Setting this option to YES will make\r\n# doxygen to replace the get and set methods by a property in the documentation.\r\n# This will only work if the methods are indeed getting or setting a simple\r\n# type. If this is not the case, or you want to show the methods anyway, you\r\n# should set this option to NO.\r\n# The default value is: YES.\r\n\r\nIDL_PROPERTY_SUPPORT   = YES\r\n\r\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\r\n# tag is set to YES then doxygen will reuse the documentation of the first\r\n# member in the group (if any) for the other members of the group. By default\r\n# all members of a group must be documented explicitly.\r\n# The default value is: NO.\r\n\r\nDISTRIBUTE_GROUP_DOC   = YES\r\n\r\n# If one adds a struct or class to a group and this option is enabled, then also\r\n# any nested class or struct is added to the same group. By default this option\r\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\r\n# The default value is: NO.\r\n\r\nGROUP_NESTED_COMPOUNDS = NO\r\n\r\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\r\n# (for instance a group of public functions) to be put as a subgroup of that\r\n# type (e.g. under the Public Functions section). Set it to NO to prevent\r\n# subgrouping. Alternatively, this can be done per class using the\r\n# \\nosubgrouping command.\r\n# The default value is: YES.\r\n\r\nSUBGROUPING            = YES\r\n\r\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\r\n# are shown inside the group in which they are included (e.g. using \\ingroup)\r\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\r\n# and RTF).\r\n#\r\n# Note that this feature does not work in combination with\r\n# SEPARATE_MEMBER_PAGES.\r\n# The default value is: NO.\r\n\r\nINLINE_GROUPED_CLASSES = NO\r\n\r\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\r\n# with only public data fields or simple typedef fields will be shown inline in\r\n# the documentation of the scope in which they are defined (i.e. file,\r\n# namespace, or group documentation), provided this scope is documented. If set\r\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\r\n# Man pages) or section (for LaTeX and RTF).\r\n# The default value is: NO.\r\n\r\nINLINE_SIMPLE_STRUCTS  = NO\r\n\r\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\r\n# enum is documented as struct, union, or enum with the name of the typedef. So\r\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\r\n# with name TypeT. When disabled the typedef will appear as a member of a file,\r\n# namespace, or class. And the struct will be named TypeS. This can typically be\r\n# useful for C code in case the coding convention dictates that all compound\r\n# types are typedef'ed and only the typedef is referenced, never the tag name.\r\n# The default value is: NO.\r\n\r\nTYPEDEF_HIDES_STRUCT   = NO\r\n\r\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\r\n# cache is used to resolve symbols given their name and scope. Since this can be\r\n# an expensive process and often the same symbol appears multiple times in the\r\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\r\n# doxygen will become slower. If the cache is too large, memory is wasted. The\r\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\r\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\r\n# symbols. At the end of a run doxygen will report the cache usage and suggest\r\n# the optimal cache size from a speed point of view.\r\n# Minimum value: 0, maximum value: 9, default value: 0.\r\n\r\nLOOKUP_CACHE_SIZE      = 0\r\n\r\n# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use\r\n# during processing. When set to 0 doxygen will based this on the number of\r\n# cores available in the system. You can set it explicitly to a value larger\r\n# than 0 to get more control over the balance between CPU load and processing\r\n# speed. At this moment only the input processing can be done using multiple\r\n# threads. Since this is still an experimental feature the default is set to 1,\r\n# which efficively disables parallel processing. Please report any issues you\r\n# encounter. Generating dot graphs in parallel is controlled by the\r\n# DOT_NUM_THREADS setting.\r\n# Minimum value: 0, maximum value: 32, default value: 1.\r\n\r\nNUM_PROC_THREADS       = 1\r\n\r\n#---------------------------------------------------------------------------\r\n# Build related configuration options\r\n#---------------------------------------------------------------------------\r\n\r\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\r\n# documentation are documented, even if no documentation was available. Private\r\n# class members and static file members will be hidden unless the\r\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\r\n# Note: This will also disable the warnings about undocumented members that are\r\n# normally produced when WARNINGS is set to YES.\r\n# The default value is: NO.\r\n\r\nEXTRACT_ALL            = YES\r\n\r\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\r\n# be included in the documentation.\r\n# The default value is: NO.\r\n\r\nEXTRACT_PRIVATE        = YES\r\n\r\n# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual\r\n# methods of a class will be included in the documentation.\r\n# The default value is: NO.\r\n\r\nEXTRACT_PRIV_VIRTUAL   = NO\r\n\r\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\r\n# scope will be included in the documentation.\r\n# The default value is: NO.\r\n\r\nEXTRACT_PACKAGE        = YES\r\n\r\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\r\n# included in the documentation.\r\n# The default value is: NO.\r\n\r\nEXTRACT_STATIC         = YES\r\n\r\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\r\n# locally in source files will be included in the documentation. If set to NO,\r\n# only classes defined in header files are included. Does not have any effect\r\n# for Java sources.\r\n# The default value is: YES.\r\n\r\nEXTRACT_LOCAL_CLASSES  = YES\r\n\r\n# This flag is only useful for Objective-C code. If set to YES, local methods,\r\n# which are defined in the implementation section but not in the interface are\r\n# included in the documentation. If set to NO, only methods in the interface are\r\n# included.\r\n# The default value is: NO.\r\n\r\nEXTRACT_LOCAL_METHODS  = NO\r\n\r\n# If this flag is set to YES, the members of anonymous namespaces will be\r\n# extracted and appear in the documentation as a namespace called\r\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\r\n# the file that contains the anonymous namespace. By default anonymous namespace\r\n# are hidden.\r\n# The default value is: NO.\r\n\r\nEXTRACT_ANON_NSPACES   = NO\r\n\r\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\r\n# undocumented members inside documented classes or files. If set to NO these\r\n# members will be included in the various overviews, but no documentation\r\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\r\n# The default value is: NO.\r\n\r\nHIDE_UNDOC_MEMBERS     = NO\r\n\r\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\r\n# undocumented classes that are normally visible in the class hierarchy. If set\r\n# to NO, these classes will be included in the various overviews. This option\r\n# has no effect if EXTRACT_ALL is enabled.\r\n# The default value is: NO.\r\n\r\nHIDE_UNDOC_CLASSES     = NO\r\n\r\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\r\n# declarations. If set to NO, these declarations will be included in the\r\n# documentation.\r\n# The default value is: NO.\r\n\r\nHIDE_FRIEND_COMPOUNDS  = NO\r\n\r\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\r\n# documentation blocks found inside the body of a function. If set to NO, these\r\n# blocks will be appended to the function's detailed documentation block.\r\n# The default value is: NO.\r\n\r\nHIDE_IN_BODY_DOCS      = YES\r\n\r\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\r\n# \\internal command is included. If the tag is set to NO then the documentation\r\n# will be excluded. Set it to YES to include the internal documentation.\r\n# The default value is: NO.\r\n\r\nINTERNAL_DOCS          = NO\r\n\r\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\r\n# names in lower-case letters. If set to YES, upper-case letters are also\r\n# allowed. This is useful if you have classes or files whose names only differ\r\n# in case and if your file system supports case sensitive file names. Windows\r\n# (including Cygwin) and Mac users are advised to set this option to NO.\r\n# The default value is: system dependent.\r\n\r\nCASE_SENSE_NAMES       = YES\r\n\r\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\r\n# their full class and namespace scopes in the documentation. If set to YES, the\r\n# scope will be hidden.\r\n# The default value is: NO.\r\n\r\nHIDE_SCOPE_NAMES       = NO\r\n\r\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\r\n# append additional text to a page's title, such as Class Reference. If set to\r\n# YES the compound reference will be hidden.\r\n# The default value is: NO.\r\n\r\nHIDE_COMPOUND_REFERENCE= NO\r\n\r\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\r\n# the files that are included by a file in the documentation of that file.\r\n# The default value is: YES.\r\n\r\nSHOW_INCLUDE_FILES     = YES\r\n\r\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\r\n# grouped member an include statement to the documentation, telling the reader\r\n# which file to include in order to use the member.\r\n# The default value is: NO.\r\n\r\nSHOW_GROUPED_MEMB_INC  = NO\r\n\r\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\r\n# files with double quotes in the documentation rather than with sharp brackets.\r\n# The default value is: NO.\r\n\r\nFORCE_LOCAL_INCLUDES   = NO\r\n\r\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\r\n# documentation for inline members.\r\n# The default value is: YES.\r\n\r\nINLINE_INFO            = YES\r\n\r\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\r\n# (detailed) documentation of file and class members alphabetically by member\r\n# name. If set to NO, the members will appear in declaration order.\r\n# The default value is: YES.\r\n\r\nSORT_MEMBER_DOCS       = YES\r\n\r\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\r\n# descriptions of file, namespace and class members alphabetically by member\r\n# name. If set to NO, the members will appear in declaration order. Note that\r\n# this will also influence the order of the classes in the class list.\r\n# The default value is: NO.\r\n\r\nSORT_BRIEF_DOCS        = NO\r\n\r\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\r\n# (brief and detailed) documentation of class members so that constructors and\r\n# destructors are listed first. If set to NO the constructors will appear in the\r\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\r\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\r\n# member documentation.\r\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\r\n# detailed member documentation.\r\n# The default value is: NO.\r\n\r\nSORT_MEMBERS_CTORS_1ST = NO\r\n\r\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\r\n# of group names into alphabetical order. If set to NO the group names will\r\n# appear in their defined order.\r\n# The default value is: NO.\r\n\r\nSORT_GROUP_NAMES       = NO\r\n\r\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\r\n# fully-qualified names, including namespaces. If set to NO, the class list will\r\n# be sorted only by class name, not including the namespace part.\r\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r\n# Note: This option applies only to the class list, not to the alphabetical\r\n# list.\r\n# The default value is: NO.\r\n\r\nSORT_BY_SCOPE_NAME     = YES\r\n\r\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\r\n# type resolution of all parameters of a function it will reject a match between\r\n# the prototype and the implementation of a member function even if there is\r\n# only one candidate or it is obvious which candidate to choose by doing a\r\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\r\n# accept a match between prototype and implementation in such cases.\r\n# The default value is: NO.\r\n\r\nSTRICT_PROTO_MATCHING  = NO\r\n\r\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\r\n# list. This list is created by putting \\todo commands in the documentation.\r\n# The default value is: YES.\r\n\r\nGENERATE_TODOLIST      = YES\r\n\r\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\r\n# list. This list is created by putting \\test commands in the documentation.\r\n# The default value is: YES.\r\n\r\nGENERATE_TESTLIST      = YES\r\n\r\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\r\n# list. This list is created by putting \\bug commands in the documentation.\r\n# The default value is: YES.\r\n\r\nGENERATE_BUGLIST       = YES\r\n\r\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\r\n# the deprecated list. This list is created by putting \\deprecated commands in\r\n# the documentation.\r\n# The default value is: YES.\r\n\r\nGENERATE_DEPRECATEDLIST= YES\r\n\r\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\r\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\r\n# ... \\endcond blocks.\r\n\r\nENABLED_SECTIONS       =\r\n\r\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\r\n# initial value of a variable or macro / define can have for it to appear in the\r\n# documentation. If the initializer consists of more lines than specified here\r\n# it will be hidden. Use a value of 0 to hide initializers completely. The\r\n# appearance of the value of individual variables and macros / defines can be\r\n# controlled using \\showinitializer or \\hideinitializer command in the\r\n# documentation regardless of this setting.\r\n# Minimum value: 0, maximum value: 10000, default value: 30.\r\n\r\nMAX_INITIALIZER_LINES  = 30\r\n\r\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\r\n# the bottom of the documentation of classes and structs. If set to YES, the\r\n# list will mention the files that were used to generate the documentation.\r\n# The default value is: YES.\r\n\r\nSHOW_USED_FILES        = YES\r\n\r\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\r\n# will remove the Files entry from the Quick Index and from the Folder Tree View\r\n# (if specified).\r\n# The default value is: YES.\r\n\r\nSHOW_FILES             = YES\r\n\r\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\r\n# page. This will remove the Namespaces entry from the Quick Index and from the\r\n# Folder Tree View (if specified).\r\n# The default value is: YES.\r\n\r\nSHOW_NAMESPACES        = YES\r\n\r\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\r\n# doxygen should invoke to get the current version for each file (typically from\r\n# the version control system). Doxygen will invoke the program by executing (via\r\n# popen()) the command command input-file, where command is the value of the\r\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\r\n# by doxygen. Whatever the program writes to standard output is used as the file\r\n# version. For an example see the documentation.\r\n\r\nFILE_VERSION_FILTER    =\r\n\r\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\r\n# by doxygen. The layout file controls the global structure of the generated\r\n# output files in an output format independent way. To create the layout file\r\n# that represents doxygen's defaults, run doxygen with the -l option. You can\r\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\r\n# will be used as the name of the layout file.\r\n#\r\n# Note that if you run doxygen from a directory containing a file called\r\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\r\n# tag is left empty.\r\n\r\nLAYOUT_FILE            = @CMAKE_CURRENT_BINARY_DIR@/layout.xml\r\n\r\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\r\n# the reference definitions. This must be a list of .bib files. The .bib\r\n# extension is automatically appended if omitted. This requires the bibtex tool\r\n# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.\r\n# For LaTeX the style of the bibliography can be controlled using\r\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\r\n# search path. See also \\cite for info how to create references.\r\n\r\nCITE_BIB_FILES         =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to warning and progress messages\r\n#---------------------------------------------------------------------------\r\n\r\n# The QUIET tag can be used to turn on/off the messages that are generated to\r\n# standard output by doxygen. If QUIET is set to YES this implies that the\r\n# messages are off.\r\n# The default value is: NO.\r\n\r\nQUIET                  = NO\r\n\r\n# The WARNINGS tag can be used to turn on/off the warning messages that are\r\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\r\n# this implies that the warnings are on.\r\n#\r\n# Tip: Turn warnings on while writing the documentation.\r\n# The default value is: YES.\r\n\r\nWARNINGS               = YES\r\n\r\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\r\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\r\n# will automatically be disabled.\r\n# The default value is: YES.\r\n\r\nWARN_IF_UNDOCUMENTED   = NO\r\n\r\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\r\n# potential errors in the documentation, such as not documenting some parameters\r\n# in a documented function, or documenting parameters that don't exist or using\r\n# markup commands wrongly.\r\n# The default value is: YES.\r\n\r\nWARN_IF_DOC_ERROR      = YES\r\n\r\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\r\n# are documented, but have no documentation for their parameters or return\r\n# value. If set to NO, doxygen will only warn about wrong or incomplete\r\n# parameter documentation, but not about the absence of documentation. If\r\n# EXTRACT_ALL is set to YES then this flag will automatically be disabled.\r\n# The default value is: NO.\r\n\r\nWARN_NO_PARAMDOC       = NO\r\n\r\n# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when\r\n# a warning is encountered.\r\n# The default value is: NO.\r\n\r\nWARN_AS_ERROR          = NO\r\n\r\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\r\n# can produce. The string should contain the $file, $line, and $text tags, which\r\n# will be replaced by the file and line number from which the warning originated\r\n# and the warning text. Optionally the format may contain $version, which will\r\n# be replaced by the version of the file (if it could be obtained via\r\n# FILE_VERSION_FILTER)\r\n# The default value is: $file:$line: $text.\r\n\r\nWARN_FORMAT            = \"$file:$line: $text\"\r\n\r\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\r\n# messages should be written. If left blank the output is written to standard\r\n# error (stderr).\r\n\r\nWARN_LOGFILE           =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the input files\r\n#---------------------------------------------------------------------------\r\n\r\n# The INPUT tag is used to specify the files and/or directories that contain\r\n# documented source files. You may enter file names like myfile.cpp or\r\n# directories like /usr/src/myproject. Separate the files or directories with\r\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\r\n# Note: If this tag is empty the current directory is searched.\r\n\r\nINPUT                  = @DOXY_DOC_INPUT_ROOT_DIRS@\r\n\r\n# This tag can be used to specify the character encoding of the source files\r\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\r\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\r\n# documentation (see: https://www.gnu.org/software/libiconv/) for the list of\r\n# possible encodings.\r\n# The default value is: UTF-8.\r\n\r\nINPUT_ENCODING         = UTF-8\r\n\r\n# If the value of the INPUT tag contains directories, you can use the\r\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\r\n# *.h) to filter out the source-files in the directories.\r\n#\r\n# Note that for custom extensions or not directly supported extensions you also\r\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\r\n# read by doxygen.\r\n#\r\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,\r\n# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,\r\n# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,\r\n# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),\r\n# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen\r\n# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,\r\n# *.vhdl, *.ucf, *.qsf and *.ice.\r\n\r\nFILE_PATTERNS          = *.h \\\r\n                         *.hh \\\r\n                         *.hpp \\\r\n                         *.hxx \\\r\n                         *.cpp \\\r\n                         *.cxx \\\r\n                         *.cc \\\r\n                         *.fp \\\r\n                         *.vp \\\r\n                         *.gp \\\r\n                         *.vs \\\r\n                         *.fs \\\r\n                         *.gs \\\r\n                         *.vert \\\r\n                         *.frag \\\r\n                         *.geom \\\r\n                         *.md \\\r\n                         *.dox \\\r\n                         *.py\r\n\r\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\r\n# be searched for input files as well.\r\n# The default value is: NO.\r\n\r\nRECURSIVE              = YES\r\n\r\n# The EXCLUDE tag can be used to specify files and/or directories that should be\r\n# excluded from the INPUT source files. This way you can easily exclude a\r\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\r\n#\r\n# Note that relative paths are relative to the directory from which doxygen is\r\n# run.\r\n\r\nEXCLUDE                = @DOXY_DOC_EXCLUDE_PATTERNS_DIRS@\r\n\r\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\r\n# directories that are symbolic links (a Unix file system feature) are excluded\r\n# from the input.\r\n# The default value is: NO.\r\n\r\nEXCLUDE_SYMLINKS       = NO\r\n\r\n# If the value of the INPUT tag contains directories, you can use the\r\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\r\n# certain files from those directories.\r\n#\r\n# Note that the wildcards are matched against the file with absolute path, so to\r\n# exclude all test directories for example use the pattern */test/*\r\n\r\nEXCLUDE_PATTERNS       =\r\n\r\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\r\n# (namespaces, classes, functions, etc.) that should be excluded from the\r\n# output. The symbol name can be a fully qualified name, a word, or if the\r\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\r\n# AClass::ANamespace, ANamespace::*Test\r\n#\r\n# Note that the wildcards are matched against the file with absolute path, so to\r\n# exclude all test directories use the pattern */test/*\r\n\r\nEXCLUDE_SYMBOLS        =\r\n\r\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\r\n# that contain example code fragments that are included (see the \\include\r\n# command).\r\n\r\nEXAMPLE_PATH           =\r\n\r\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\r\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\r\n# *.h) to filter out the source-files in the directories. If left blank all\r\n# files are included.\r\n\r\nEXAMPLE_PATTERNS       =\r\n\r\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\r\n# searched for input files to be used with the \\include or \\dontinclude commands\r\n# irrespective of the value of the RECURSIVE tag.\r\n# The default value is: NO.\r\n\r\nEXAMPLE_RECURSIVE      = NO\r\n\r\n# The IMAGE_PATH tag can be used to specify one or more files or directories\r\n# that contain images that are to be included in the documentation (see the\r\n# \\image command).\r\n\r\nIMAGE_PATH             = @DOXY_DOC_COMMON_IMG_PATH@ \\\r\n                         @DOXY_APP_SPECIFIC_IMG_PATH@\r\n\r\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\r\n# invoke to filter for each input file. Doxygen will invoke the filter program\r\n# by executing (via popen()) the command:\r\n#\r\n# <filter> <input-file>\r\n#\r\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\r\n# name of an input file. Doxygen will then use the output that the filter\r\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\r\n# will be ignored.\r\n#\r\n# Note that the filter must not add or remove lines; it is applied before the\r\n# code is scanned, but not when the output code is generated. If lines are added\r\n# or removed, the anchors will not be placed correctly.\r\n#\r\n# Note that for custom extensions or not directly supported extensions you also\r\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\r\n# properly processed by doxygen.\r\n\r\nINPUT_FILTER           =\r\n\r\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\r\n# basis. Doxygen will compare the file name with each pattern and apply the\r\n# filter if there is a match. The filters are a list of the form: pattern=filter\r\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\r\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\r\n# patterns match the file name, INPUT_FILTER is applied.\r\n#\r\n# Note that for custom extensions or not directly supported extensions you also\r\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\r\n# properly processed by doxygen.\r\n\r\nFILTER_PATTERNS        =\r\n\r\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\r\n# INPUT_FILTER) will also be used to filter the input files that are used for\r\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\r\n# The default value is: NO.\r\n\r\nFILTER_SOURCE_FILES    = NO\r\n\r\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\r\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\r\n# it is also possible to disable source filtering for a specific pattern using\r\n# *.ext= (so without naming a filter).\r\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\r\n\r\nFILTER_SOURCE_PATTERNS =\r\n\r\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\r\n# is part of the input, its contents will be placed on the main page\r\n# (index.html). This can be useful if you have a project on for instance GitHub\r\n# and want to reuse the introduction page also for the doxygen output.\r\n\r\nUSE_MDFILE_AS_MAINPAGE =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to source browsing\r\n#---------------------------------------------------------------------------\r\n\r\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\r\n# generated. Documented entities will be cross-referenced with these sources.\r\n#\r\n# Note: To get rid of all source code in the generated output, make sure that\r\n# also VERBATIM_HEADERS is set to NO.\r\n# The default value is: NO.\r\n\r\nSOURCE_BROWSER         = YES\r\n\r\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\r\n# classes and enums directly into the documentation.\r\n# The default value is: NO.\r\n\r\nINLINE_SOURCES         = NO\r\n\r\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\r\n# special comment blocks from generated source code fragments. Normal C, C++ and\r\n# Fortran comments will always remain visible.\r\n# The default value is: YES.\r\n\r\nSTRIP_CODE_COMMENTS    = YES\r\n\r\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\r\n# entity all documented functions referencing it will be listed.\r\n# The default value is: NO.\r\n\r\nREFERENCED_BY_RELATION = YES\r\n\r\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\r\n# all documented entities called/used by that function will be listed.\r\n# The default value is: NO.\r\n\r\nREFERENCES_RELATION    = YES\r\n\r\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\r\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\r\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\r\n# link to the documentation.\r\n# The default value is: YES.\r\n\r\nREFERENCES_LINK_SOURCE = YES\r\n\r\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\r\n# source code will show a tooltip with additional information such as prototype,\r\n# brief description and links to the definition and documentation. Since this\r\n# will make the HTML file larger and loading of large files a bit slower, you\r\n# can opt to disable this feature.\r\n# The default value is: YES.\r\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\r\n\r\nSOURCE_TOOLTIPS        = YES\r\n\r\n# If the USE_HTAGS tag is set to YES then the references to source code will\r\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\r\n# source browser. The htags tool is part of GNU's global source tagging system\r\n# (see https://www.gnu.org/software/global/global.html). You will need version\r\n# 4.8.6 or higher.\r\n#\r\n# To use it do the following:\r\n# - Install the latest version of global\r\n# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file\r\n# - Make sure the INPUT points to the root of the source tree\r\n# - Run doxygen as normal\r\n#\r\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\r\n# tools must be available from the command line (i.e. in the search path).\r\n#\r\n# The result: instead of the source browser generated by doxygen, the links to\r\n# source code will now point to the output of htags.\r\n# The default value is: NO.\r\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\r\n\r\nUSE_HTAGS              = NO\r\n\r\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\r\n# verbatim copy of the header file for each class for which an include is\r\n# specified. Set to NO to disable this.\r\n# See also: Section \\class.\r\n# The default value is: YES.\r\n\r\nVERBATIM_HEADERS       = YES\r\n\r\n# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the\r\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\r\n# cost of reduced performance. This can be particularly helpful with template\r\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\r\n# information.\r\n# Note: The availability of this option depends on whether or not doxygen was\r\n# generated with the -Duse_libclang=ON option for CMake.\r\n# The default value is: NO.\r\n\r\nCLANG_ASSISTED_PARSING = NO\r\n\r\n# If clang assisted parsing is enabled you can provide the compiler with command\r\n# line options that you would normally use when invoking the compiler. Note that\r\n# the include paths will already be set by doxygen for the files and directories\r\n# specified with INPUT and INCLUDE_PATH.\r\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\r\n\r\nCLANG_OPTIONS          =\r\n\r\n# If clang assisted parsing is enabled you can provide the clang parser with the\r\n# path to the directory containing a file called compile_commands.json. This\r\n# file is the compilation database (see:\r\n# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the\r\n# options used when the source files were built. This is equivalent to\r\n# specifying the \"-p\" option to a clang tool, such as clang-check. These options\r\n# will then be passed to the parser. Any options specified with CLANG_OPTIONS\r\n# will be added as well.\r\n# Note: The availability of this option depends on whether or not doxygen was\r\n# generated with the -Duse_libclang=ON option for CMake.\r\n\r\nCLANG_DATABASE_PATH    =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the alphabetical class index\r\n#---------------------------------------------------------------------------\r\n\r\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\r\n# compounds will be generated. Enable this if the project contains a lot of\r\n# classes, structs, unions or interfaces.\r\n# The default value is: YES.\r\n\r\nALPHABETICAL_INDEX     = NO\r\n\r\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\r\n# which the alphabetical index list will be split.\r\n# Minimum value: 1, maximum value: 20, default value: 5.\r\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\r\n\r\nCOLS_IN_ALPHA_INDEX    = 5\r\n\r\n# In case all classes in a project start with a common prefix, all classes will\r\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\r\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\r\n# while generating the index headers.\r\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\r\n\r\nIGNORE_PREFIX          =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the HTML output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\r\n# The default value is: YES.\r\n\r\nGENERATE_HTML          = YES\r\n\r\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\r\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\r\n# it.\r\n# The default directory is: html.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_OUTPUT            = .\r\n\r\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\r\n# generated HTML page (for example: .htm, .php, .asp).\r\n# The default value is: .html.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_FILE_EXTENSION    = .html\r\n\r\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\r\n# each generated HTML page. If the tag is left blank doxygen will generate a\r\n# standard header.\r\n#\r\n# To get valid HTML the header file that includes any scripts and style sheets\r\n# that doxygen needs, which is dependent on the configuration options used (e.g.\r\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\r\n# default header using\r\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\r\n# YourConfigFile\r\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\r\n# for information on how to generate the default header that doxygen normally\r\n# uses.\r\n# Note: The header is subject to change so you typically have to regenerate the\r\n# default header when upgrading to a newer version of doxygen. For a description\r\n# of the possible markers and block names see the documentation.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_HEADER            =\r\n\r\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\r\n# generated HTML page. If the tag is left blank doxygen will generate a standard\r\n# footer. See HTML_HEADER for more information on how to generate a default\r\n# footer and what special commands can be used inside the footer. See also\r\n# section \"Doxygen usage\" for information on how to generate the default footer\r\n# that doxygen normally uses.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_FOOTER            =\r\n\r\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\r\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\r\n# the HTML output. If left blank doxygen will generate a default style sheet.\r\n# See also section \"Doxygen usage\" for information on how to generate the style\r\n# sheet that doxygen normally uses.\r\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\r\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\r\n# obsolete.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_STYLESHEET        =\r\n\r\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\r\n# cascading style sheets that are included after the standard style sheets\r\n# created by doxygen. Using this option one can overrule certain style aspects.\r\n# This is preferred over using HTML_STYLESHEET since it does not replace the\r\n# standard style sheet and is therefore more robust against future updates.\r\n# Doxygen will copy the style sheet files to the output directory.\r\n# Note: The order of the extra style sheet files is of importance (e.g. the last\r\n# style sheet in the list overrules the setting of the previous ones in the\r\n# list). For an example see the documentation.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_EXTRA_STYLESHEET  =\r\n\r\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\r\n# other source files which should be copied to the HTML output directory. Note\r\n# that these files will be copied to the base HTML output directory. Use the\r\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\r\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\r\n# files will be copied as-is; there are no commands or markers available.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_EXTRA_FILES       =\r\n\r\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\r\n# will adjust the colors in the style sheet and background images according to\r\n# this color. Hue is specified as an angle on a colorwheel, see\r\n# https://en.wikipedia.org/wiki/Hue for more information. For instance the value\r\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\r\n# purple, and 360 is red again.\r\n# Minimum value: 0, maximum value: 359, default value: 220.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_COLORSTYLE_HUE    = 220\r\n\r\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\r\n# in the HTML output. For a value of 0 the output will use grayscales only. A\r\n# value of 255 will produce the most vivid colors.\r\n# Minimum value: 0, maximum value: 255, default value: 100.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_COLORSTYLE_SAT    = 100\r\n\r\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\r\n# luminance component of the colors in the HTML output. Values below 100\r\n# gradually make the output lighter, whereas values above 100 make the output\r\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\r\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\r\n# change the gamma.\r\n# Minimum value: 40, maximum value: 240, default value: 80.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_COLORSTYLE_GAMMA  = 80\r\n\r\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\r\n# page will contain the date and time when the page was generated. Setting this\r\n# to YES can help to show when doxygen was last run and thus if the\r\n# documentation is up to date.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_TIMESTAMP         = NO\r\n\r\n# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML\r\n# documentation will contain a main index with vertical navigation menus that\r\n# are dynamically created via JavaScript. If disabled, the navigation index will\r\n# consists of multiple levels of tabs that are statically embedded in every HTML\r\n# page. Disable this option to support browsers that do not have JavaScript,\r\n# like the Qt help browser.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_DYNAMIC_MENUS     = YES\r\n\r\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\r\n# documentation will contain sections that can be hidden and shown after the\r\n# page has loaded.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_DYNAMIC_SECTIONS  = NO\r\n\r\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\r\n# shown in the various tree structured indices initially; the user can expand\r\n# and collapse entries dynamically later on. Doxygen will expand the tree to\r\n# such a level that at most the specified number of entries are visible (unless\r\n# a fully collapsed tree already exceeds this amount). So setting the number of\r\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\r\n# representing an infinite number of entries and will result in a full expanded\r\n# tree by default.\r\n# Minimum value: 0, maximum value: 9999, default value: 100.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_INDEX_NUM_ENTRIES = 100\r\n\r\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\r\n# generated that can be used as input for Apple's Xcode 3 integrated development\r\n# environment (see: https://developer.apple.com/xcode/), introduced with OSX\r\n# 10.5 (Leopard). To create a documentation set, doxygen will generate a\r\n# Makefile in the HTML output directory. Running make will produce the docset in\r\n# that directory and running make install will install the docset in\r\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\r\n# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy\r\n# genXcode/_index.html for more information.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nGENERATE_DOCSET        = NO\r\n\r\n# This tag determines the name of the docset feed. A documentation feed provides\r\n# an umbrella under which multiple documentation sets from a single provider\r\n# (such as a company or product suite) can be grouped.\r\n# The default value is: Doxygen generated docs.\r\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\r\n\r\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\r\n\r\n# This tag specifies a string that should uniquely identify the documentation\r\n# set bundle. This should be a reverse domain-name style string, e.g.\r\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\r\n# The default value is: org.doxygen.Project.\r\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\r\n\r\nDOCSET_BUNDLE_ID       = org.doxygen.Project\r\n\r\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\r\n# the documentation publisher. This should be a reverse domain-name style\r\n# string, e.g. com.mycompany.MyDocSet.documentation.\r\n# The default value is: org.doxygen.Publisher.\r\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\r\n\r\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\r\n\r\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\r\n# The default value is: Publisher.\r\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\r\n\r\nDOCSET_PUBLISHER_NAME  = Publisher\r\n\r\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\r\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\r\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\r\n# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on\r\n# Windows.\r\n#\r\n# The HTML Help Workshop contains a compiler that can convert all HTML output\r\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\r\n# files are now used as the Windows 98 help format, and will replace the old\r\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\r\n# HTML files also contain an index, a table of contents, and you can search for\r\n# words in the documentation. The HTML workshop also contains a viewer for\r\n# compressed HTML files.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nGENERATE_HTMLHELP      = NO\r\n\r\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\r\n# file. You can add a path in front of the file if the result should not be\r\n# written to the html output directory.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nCHM_FILE               =\r\n\r\n# The HHC_LOCATION tag can be used to specify the location (absolute path\r\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\r\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\r\n# The file has to be specified with full path.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nHHC_LOCATION           =\r\n\r\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\r\n# (YES) or that it should be included in the main .chm file (NO).\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nGENERATE_CHI           = NO\r\n\r\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\r\n# and project file content.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nCHM_INDEX_ENCODING     =\r\n\r\n# The BINARY_TOC flag controls whether a binary table of contents is generated\r\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\r\n# enables the Previous and Next buttons.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nBINARY_TOC             = NO\r\n\r\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\r\n# the table of contents of the HTML help documentation and to the tree view.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\r\n\r\nTOC_EXPAND             = NO\r\n\r\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\r\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\r\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\r\n# (.qch) of the generated HTML documentation.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nGENERATE_QHP           = NO\r\n\r\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\r\n# the file name of the resulting .qch file. The path specified is relative to\r\n# the HTML output folder.\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQCH_FILE               =\r\n\r\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\r\n# Project output. For more information please see Qt Help Project / Namespace\r\n# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).\r\n# The default value is: org.doxygen.Project.\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHP_NAMESPACE          = org.doxygen.Project\r\n\r\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\r\n# Help Project output. For more information please see Qt Help Project / Virtual\r\n# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-\r\n# folders).\r\n# The default value is: doc.\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHP_VIRTUAL_FOLDER     = doc\r\n\r\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\r\n# filter to add. For more information please see Qt Help Project / Custom\r\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\r\n# filters).\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHP_CUST_FILTER_NAME   =\r\n\r\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\r\n# custom filter to add. For more information please see Qt Help Project / Custom\r\n# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-\r\n# filters).\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHP_CUST_FILTER_ATTRS  =\r\n\r\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\r\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\r\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHP_SECT_FILTER_ATTRS  =\r\n\r\n# The QHG_LOCATION tag can be used to specify the location of Qt's\r\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\r\n# generated .qhp file.\r\n# This tag requires that the tag GENERATE_QHP is set to YES.\r\n\r\nQHG_LOCATION           =\r\n\r\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\r\n# generated, together with the HTML files, they form an Eclipse help plugin. To\r\n# install this plugin and make it available under the help contents menu in\r\n# Eclipse, the contents of the directory containing the HTML and XML files needs\r\n# to be copied into the plugins directory of eclipse. The name of the directory\r\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\r\n# After copying Eclipse needs to be restarted before the help appears.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nGENERATE_ECLIPSEHELP   = NO\r\n\r\n# A unique identifier for the Eclipse help plugin. When installing the plugin\r\n# the directory name containing the HTML and XML files should also have this\r\n# name. Each documentation set should have its own identifier.\r\n# The default value is: org.doxygen.Project.\r\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\r\n\r\nECLIPSE_DOC_ID         = org.doxygen.Project\r\n\r\n# If you want full control over the layout of the generated HTML pages it might\r\n# be necessary to disable the index and replace it with your own. The\r\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\r\n# of each HTML page. A value of NO enables the index and the value YES disables\r\n# it. Since the tabs in the index contain the same information as the navigation\r\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nDISABLE_INDEX          = YES\r\n\r\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r\n# structure should be generated to display hierarchical information. If the tag\r\n# value is set to YES, a side panel will be generated containing a tree-like\r\n# index structure (just like the one that is generated for HTML Help). For this\r\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\r\n# (i.e. any modern browser). Windows users are probably better off using the\r\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\r\n# further fine-tune the look of the index. As an example, the default style\r\n# sheet generated by doxygen has an example that shows how to put an image at\r\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\r\n# the same information as the tab index, you could consider setting\r\n# DISABLE_INDEX to YES when enabling this option.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nGENERATE_TREEVIEW      = YES\r\n\r\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\r\n# doxygen will group on one line in the generated HTML documentation.\r\n#\r\n# Note that a value of 0 will completely suppress the enum values from appearing\r\n# in the overview section.\r\n# Minimum value: 0, maximum value: 20, default value: 4.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nENUM_VALUES_PER_LINE   = 4\r\n\r\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\r\n# to set the initial width (in pixels) of the frame in which the tree is shown.\r\n# Minimum value: 0, maximum value: 1500, default value: 250.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nTREEVIEW_WIDTH         = 250\r\n\r\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\r\n# external symbols imported via tag files in a separate window.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nEXT_LINKS_IN_WINDOW    = NO\r\n\r\n# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg\r\n# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see\r\n# https://inkscape.org) to generate formulas as SVG images instead of PNGs for\r\n# the HTML output. These images will generally look nicer at scaled resolutions.\r\n# Possible values are: png (the default) and svg (looks nicer but requires the\r\n# pdf2svg or inkscape tool).\r\n# The default value is: png.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nHTML_FORMULA_FORMAT    = png\r\n\r\n# Use this tag to change the font size of LaTeX formulas included as images in\r\n# the HTML documentation. When you change the font size after a successful\r\n# doxygen run you need to manually remove any form_*.png images from the HTML\r\n# output directory to force them to be regenerated.\r\n# Minimum value: 8, maximum value: 50, default value: 10.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nFORMULA_FONTSIZE       = 10\r\n\r\n# Use the FORMULA_TRANSPARENT tag to determine whether or not the images\r\n# generated for formulas are transparent PNGs. Transparent PNGs are not\r\n# supported properly for IE 6.0, but are supported on all modern browsers.\r\n#\r\n# Note that when changing this option you need to delete any form_*.png files in\r\n# the HTML output directory before the changes have effect.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nFORMULA_TRANSPARENT    = YES\r\n\r\n# The FORMULA_MACROFILE can contain LaTeX \\newcommand and \\renewcommand commands\r\n# to create new LaTeX commands to be used in formulas as building blocks. See\r\n# the section \"Including formulas\" for details.\r\n\r\nFORMULA_MACROFILE      =\r\n\r\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\r\n# https://www.mathjax.org) which uses client side JavaScript for the rendering\r\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\r\n# installed or if you want to formulas look prettier in the HTML output. When\r\n# enabled you may also need to install MathJax separately and configure the path\r\n# to it using the MATHJAX_RELPATH option.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nUSE_MATHJAX            = NO\r\n\r\n# When MathJax is enabled you can set the default output format to be used for\r\n# the MathJax output. See the MathJax site (see:\r\n# http://docs.mathjax.org/en/latest/output.html) for more details.\r\n# Possible values are: HTML-CSS (which is slower, but has the best\r\n# compatibility), NativeMML (i.e. MathML) and SVG.\r\n# The default value is: HTML-CSS.\r\n# This tag requires that the tag USE_MATHJAX is set to YES.\r\n\r\nMATHJAX_FORMAT         = HTML-CSS\r\n\r\n# When MathJax is enabled you need to specify the location relative to the HTML\r\n# output directory using the MATHJAX_RELPATH option. The destination directory\r\n# should contain the MathJax.js script. For instance, if the mathjax directory\r\n# is located at the same level as the HTML output directory, then\r\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\r\n# Content Delivery Network so you can quickly see the result without installing\r\n# MathJax. However, it is strongly recommended to install a local copy of\r\n# MathJax from https://www.mathjax.org before deployment.\r\n# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.\r\n# This tag requires that the tag USE_MATHJAX is set to YES.\r\n\r\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\r\n\r\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\r\n# extension names that should be enabled during MathJax rendering. For example\r\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\r\n# This tag requires that the tag USE_MATHJAX is set to YES.\r\n\r\nMATHJAX_EXTENSIONS     =\r\n\r\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\r\n# of code that will be used on startup of the MathJax code. See the MathJax site\r\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\r\n# example see the documentation.\r\n# This tag requires that the tag USE_MATHJAX is set to YES.\r\n\r\nMATHJAX_CODEFILE       =\r\n\r\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\r\n# the HTML output. The underlying search engine uses javascript and DHTML and\r\n# should work on any modern browser. Note that when using HTML help\r\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\r\n# there is already a search function so this one should typically be disabled.\r\n# For large projects the javascript based search engine can be slow, then\r\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\r\n# search using the keyboard; to jump to the search box use <access key> + S\r\n# (what the <access key> is depends on the OS and browser, but it is typically\r\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\r\n# key> to jump into the search results window, the results can be navigated\r\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\r\n# the search. The filter options can be selected when the cursor is inside the\r\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\r\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\r\n# option.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_HTML is set to YES.\r\n\r\nSEARCHENGINE           = YES\r\n\r\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\r\n# implemented using a web server instead of a web client using JavaScript. There\r\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\r\n# setting. When disabled, doxygen will generate a PHP script for searching and\r\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\r\n# and searching needs to be provided by external tools. See the section\r\n# \"External Indexing and Searching\" for details.\r\n# The default value is: NO.\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nSERVER_BASED_SEARCH    = NO\r\n\r\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\r\n# script for searching. Instead the search results are written to an XML file\r\n# which needs to be processed by an external indexer. Doxygen will invoke an\r\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\r\n# search results.\r\n#\r\n# Doxygen ships with an example indexer (doxyindexer) and search engine\r\n# (doxysearch.cgi) which are based on the open source search engine library\r\n# Xapian (see: https://xapian.org/).\r\n#\r\n# See the section \"External Indexing and Searching\" for details.\r\n# The default value is: NO.\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nEXTERNAL_SEARCH        = NO\r\n\r\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\r\n# which will return the search results when EXTERNAL_SEARCH is enabled.\r\n#\r\n# Doxygen ships with an example indexer (doxyindexer) and search engine\r\n# (doxysearch.cgi) which are based on the open source search engine library\r\n# Xapian (see: https://xapian.org/). See the section \"External Indexing and\r\n# Searching\" for details.\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nSEARCHENGINE_URL       =\r\n\r\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\r\n# search data is written to a file for indexing by an external tool. With the\r\n# SEARCHDATA_FILE tag the name of this file can be specified.\r\n# The default file is: searchdata.xml.\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nSEARCHDATA_FILE        = searchdata.xml\r\n\r\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\r\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\r\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\r\n# projects and redirect the results back to the right project.\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nEXTERNAL_SEARCH_ID     =\r\n\r\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\r\n# projects other than the one defined by this configuration file, but that are\r\n# all added to the same external search index. Each project needs to have a\r\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\r\n# to a relative location where the documentation can be found. The format is:\r\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\r\n# This tag requires that the tag SEARCHENGINE is set to YES.\r\n\r\nEXTRA_SEARCH_MAPPINGS  =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the LaTeX output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\r\n# The default value is: YES.\r\n\r\nGENERATE_LATEX         = NO\r\n\r\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\r\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\r\n# it.\r\n# The default directory is: latex.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_OUTPUT           = latex\r\n\r\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\r\n# invoked.\r\n#\r\n# Note that when not enabling USE_PDFLATEX the default is latex when enabling\r\n# USE_PDFLATEX the default is pdflatex and when in the later case latex is\r\n# chosen this is overwritten by pdflatex. For specific output languages the\r\n# default can have been set differently, this depends on the implementation of\r\n# the output language.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_CMD_NAME         = latex\r\n\r\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\r\n# index for LaTeX.\r\n# Note: This tag is used in the Makefile / make.bat.\r\n# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file\r\n# (.tex).\r\n# The default file is: makeindex.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nMAKEINDEX_CMD_NAME     = makeindex\r\n\r\n# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to\r\n# generate index for LaTeX. In case there is no backslash (\\) as first character\r\n# it will be automatically added in the LaTeX code.\r\n# Note: This tag is used in the generated output file (.tex).\r\n# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.\r\n# The default value is: makeindex.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_MAKEINDEX_CMD    = makeindex\r\n\r\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\r\n# documents. This may be useful for small projects and may help to save some\r\n# trees in general.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nCOMPACT_LATEX          = NO\r\n\r\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\r\n# printer.\r\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\r\n# 14 inches) and executive (7.25 x 10.5 inches).\r\n# The default value is: a4.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nPAPER_TYPE             = a4\r\n\r\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\r\n# that should be included in the LaTeX output. The package can be specified just\r\n# by its name or with the correct syntax as to be used with the LaTeX\r\n# \\usepackage command. To get the times font for instance you can specify :\r\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\r\n# To use the option intlimits with the amsmath package you can specify:\r\n# EXTRA_PACKAGES=[intlimits]{amsmath}\r\n# If left blank no extra packages will be included.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nEXTRA_PACKAGES         =\r\n\r\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\r\n# generated LaTeX document. The header should contain everything until the first\r\n# chapter. If it is left blank doxygen will generate a standard header. See\r\n# section \"Doxygen usage\" for information on how to let doxygen write the\r\n# default header to a separate file.\r\n#\r\n# Note: Only use a user-defined header if you know what you are doing! The\r\n# following commands have a special meaning inside the header: $title,\r\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber,\r\n# $projectbrief, $projectlogo. Doxygen will replace $title with the empty\r\n# string, for the replacement values of the other commands the user is referred\r\n# to HTML_HEADER.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_HEADER           =\r\n\r\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\r\n# generated LaTeX document. The footer should contain everything after the last\r\n# chapter. If it is left blank doxygen will generate a standard footer. See\r\n# LATEX_HEADER for more information on how to generate a default footer and what\r\n# special commands can be used inside the footer.\r\n#\r\n# Note: Only use a user-defined footer if you know what you are doing!\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_FOOTER           =\r\n\r\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\r\n# LaTeX style sheets that are included after the standard style sheets created\r\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\r\n# will copy the style sheet files to the output directory.\r\n# Note: The order of the extra style sheet files is of importance (e.g. the last\r\n# style sheet in the list overrules the setting of the previous ones in the\r\n# list).\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_EXTRA_STYLESHEET =\r\n\r\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\r\n# other source files which should be copied to the LATEX_OUTPUT output\r\n# directory. Note that the files will be copied as-is; there are no commands or\r\n# markers available.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_EXTRA_FILES      =\r\n\r\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\r\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\r\n# contain links (just like the HTML output) instead of page references. This\r\n# makes the output suitable for online browsing using a PDF viewer.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nPDF_HYPERLINKS         = YES\r\n\r\n# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as\r\n# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX\r\n# files. Set this option to YES, to get a higher quality PDF documentation.\r\n#\r\n# See also section LATEX_CMD_NAME for selecting the engine.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nUSE_PDFLATEX           = YES\r\n\r\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\r\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\r\n# if errors occur, instead of asking the user for help. This option is also used\r\n# when generating formulas in HTML.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_BATCHMODE        = NO\r\n\r\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\r\n# index chapters (such as File Index, Compound Index, etc.) in the output.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_HIDE_INDICES     = NO\r\n\r\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\r\n# code with syntax highlighting in the LaTeX output.\r\n#\r\n# Note that which sources are shown also depends on other settings such as\r\n# SOURCE_BROWSER.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_SOURCE_CODE      = NO\r\n\r\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\r\n# bibliography, e.g. plainnat, or ieeetr. See\r\n# https://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\r\n# The default value is: plain.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_BIB_STYLE        = plain\r\n\r\n# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated\r\n# page will contain the date and time when the page was generated. Setting this\r\n# to NO can help when comparing the output of multiple runs.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_TIMESTAMP        = NO\r\n\r\n# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)\r\n# path from which the emoji images will be read. If a relative path is entered,\r\n# it will be relative to the LATEX_OUTPUT directory. If left blank the\r\n# LATEX_OUTPUT directory will be used.\r\n# This tag requires that the tag GENERATE_LATEX is set to YES.\r\n\r\nLATEX_EMOJI_DIRECTORY  =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the RTF output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\r\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\r\n# readers/editors.\r\n# The default value is: NO.\r\n\r\nGENERATE_RTF           = NO\r\n\r\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\r\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\r\n# it.\r\n# The default directory is: rtf.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nRTF_OUTPUT             = rtf\r\n\r\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\r\n# documents. This may be useful for small projects and may help to save some\r\n# trees in general.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nCOMPACT_RTF            = NO\r\n\r\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\r\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\r\n# output) instead of page references. This makes the output suitable for online\r\n# browsing using Word or some other Word compatible readers that support those\r\n# fields.\r\n#\r\n# Note: WordPad (write) and others do not support links.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nRTF_HYPERLINKS         = NO\r\n\r\n# Load stylesheet definitions from file. Syntax is similar to doxygen's\r\n# configuration file, i.e. a series of assignments. You only have to provide\r\n# replacements, missing definitions are set to their default value.\r\n#\r\n# See also section \"Doxygen usage\" for information on how to generate the\r\n# default style sheet that doxygen normally uses.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nRTF_STYLESHEET_FILE    =\r\n\r\n# Set optional variables used in the generation of an RTF document. Syntax is\r\n# similar to doxygen's configuration file. A template extensions file can be\r\n# generated using doxygen -e rtf extensionFile.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nRTF_EXTENSIONS_FILE    =\r\n\r\n# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code\r\n# with syntax highlighting in the RTF output.\r\n#\r\n# Note that which sources are shown also depends on other settings such as\r\n# SOURCE_BROWSER.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_RTF is set to YES.\r\n\r\nRTF_SOURCE_CODE        = NO\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the man page output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\r\n# classes and files.\r\n# The default value is: NO.\r\n\r\nGENERATE_MAN           = NO\r\n\r\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\r\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\r\n# it. A directory man3 will be created inside the directory specified by\r\n# MAN_OUTPUT.\r\n# The default directory is: man.\r\n# This tag requires that the tag GENERATE_MAN is set to YES.\r\n\r\nMAN_OUTPUT             = man\r\n\r\n# The MAN_EXTENSION tag determines the extension that is added to the generated\r\n# man pages. In case the manual section does not start with a number, the number\r\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\r\n# optional.\r\n# The default value is: .3.\r\n# This tag requires that the tag GENERATE_MAN is set to YES.\r\n\r\nMAN_EXTENSION          = .3\r\n\r\n# The MAN_SUBDIR tag determines the name of the directory created within\r\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\r\n# MAN_EXTENSION with the initial . removed.\r\n# This tag requires that the tag GENERATE_MAN is set to YES.\r\n\r\nMAN_SUBDIR             =\r\n\r\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\r\n# will generate one additional man file for each entity documented in the real\r\n# man page(s). These additional files only source the real man page, but without\r\n# them the man command would be unable to find the correct page.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_MAN is set to YES.\r\n\r\nMAN_LINKS              = NO\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the XML output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\r\n# captures the structure of the code including all documentation.\r\n# The default value is: NO.\r\n\r\nGENERATE_XML           = NO\r\n\r\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\r\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\r\n# it.\r\n# The default directory is: xml.\r\n# This tag requires that the tag GENERATE_XML is set to YES.\r\n\r\nXML_OUTPUT             = xml\r\n\r\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\r\n# listings (including syntax highlighting and cross-referencing information) to\r\n# the XML output. Note that enabling this will significantly increase the size\r\n# of the XML output.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_XML is set to YES.\r\n\r\nXML_PROGRAMLISTING     = YES\r\n\r\n# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include\r\n# namespace members in file scope as well, matching the HTML output.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_XML is set to YES.\r\n\r\nXML_NS_MEMB_FILE_SCOPE = NO\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the DOCBOOK output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\r\n# that can be used to generate PDF.\r\n# The default value is: NO.\r\n\r\nGENERATE_DOCBOOK       = NO\r\n\r\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\r\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\r\n# front of it.\r\n# The default directory is: docbook.\r\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\r\n\r\nDOCBOOK_OUTPUT         = docbook\r\n\r\n# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the\r\n# program listings (including syntax highlighting and cross-referencing\r\n# information) to the DOCBOOK output. Note that enabling this will significantly\r\n# increase the size of the DOCBOOK output.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\r\n\r\nDOCBOOK_PROGRAMLISTING = NO\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options for the AutoGen Definitions output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\r\n# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures\r\n# the structure of the code including all documentation. Note that this feature\r\n# is still experimental and incomplete at the moment.\r\n# The default value is: NO.\r\n\r\nGENERATE_AUTOGEN_DEF   = NO\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the Perl module output\r\n#---------------------------------------------------------------------------\r\n\r\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\r\n# file that captures the structure of the code including all documentation.\r\n#\r\n# Note that this feature is still experimental and incomplete at the moment.\r\n# The default value is: NO.\r\n\r\nGENERATE_PERLMOD       = NO\r\n\r\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\r\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\r\n# output from the Perl module output.\r\n# The default value is: NO.\r\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\r\n\r\nPERLMOD_LATEX          = NO\r\n\r\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\r\n# formatted so it can be parsed by a human reader. This is useful if you want to\r\n# understand what is going on. On the other hand, if this tag is set to NO, the\r\n# size of the Perl module output will be much smaller and Perl will parse it\r\n# just the same.\r\n# The default value is: YES.\r\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\r\n\r\nPERLMOD_PRETTY         = YES\r\n\r\n# The names of the make variables in the generated doxyrules.make file are\r\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\r\n# so different doxyrules.make files included by the same Makefile don't\r\n# overwrite each other's variables.\r\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\r\n\r\nPERLMOD_MAKEVAR_PREFIX =\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the preprocessor\r\n#---------------------------------------------------------------------------\r\n\r\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\r\n# C-preprocessor directives found in the sources and include files.\r\n# The default value is: YES.\r\n\r\nENABLE_PREPROCESSING   = YES\r\n\r\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\r\n# in the source code. If set to NO, only conditional compilation will be\r\n# performed. Macro expansion can be done in a controlled way by setting\r\n# EXPAND_ONLY_PREDEF to YES.\r\n# The default value is: NO.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nMACRO_EXPANSION        = NO\r\n\r\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\r\n# the macro expansion is limited to the macros specified with the PREDEFINED and\r\n# EXPAND_AS_DEFINED tags.\r\n# The default value is: NO.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nEXPAND_ONLY_PREDEF     = NO\r\n\r\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\r\n# INCLUDE_PATH will be searched if a #include is found.\r\n# The default value is: YES.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nSEARCH_INCLUDES        = YES\r\n\r\n# The INCLUDE_PATH tag can be used to specify one or more directories that\r\n# contain include files that are not input files but should be processed by the\r\n# preprocessor.\r\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\r\n\r\nINCLUDE_PATH           =\r\n\r\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\r\n# patterns (like *.h and *.hpp) to filter out the header-files in the\r\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\r\n# used.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nINCLUDE_FILE_PATTERNS  =\r\n\r\n# The PREDEFINED tag can be used to specify one or more macro names that are\r\n# defined before the preprocessor is started (similar to the -D option of e.g.\r\n# gcc). The argument of the tag is a list of macros of the form: name or\r\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\r\n# is assumed. To prevent a macro definition from being undefined via #undef or\r\n# recursively expanded use the := operator instead of the = operator.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nPREDEFINED             =\r\n\r\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\r\n# tag can be used to specify a list of macro names that should be expanded. The\r\n# macro definition that is found in the sources will be used. Use the PREDEFINED\r\n# tag if you want to use a different macro definition that overrules the\r\n# definition found in the source code.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nEXPAND_AS_DEFINED      =\r\n\r\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\r\n# remove all references to function-like macros that are alone on a line, have\r\n# an all uppercase name, and do not end with a semicolon. Such function macros\r\n# are typically used for boiler-plate code, and will confuse the parser if not\r\n# removed.\r\n# The default value is: YES.\r\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\r\n\r\nSKIP_FUNCTION_MACROS   = YES\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to external references\r\n#---------------------------------------------------------------------------\r\n\r\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\r\n# file the location of the external documentation should be added. The format of\r\n# a tag file without this location is as follows:\r\n# TAGFILES = file1 file2 ...\r\n# Adding location for the tag files is done as follows:\r\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\r\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\r\n# section \"Linking to external documentation\" for more information about the use\r\n# of tag files.\r\n# Note: Each tag file must have a unique name (where the name does NOT include\r\n# the path). If a tag file is not located in the directory in which doxygen is\r\n# run, you must also specify the path to the tagfile here.\r\n\r\nTAGFILES               =\r\n\r\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\r\n# tag file that is based on the input files it reads. See section \"Linking to\r\n# external documentation\" for more information about the usage of tag files.\r\n\r\nGENERATE_TAGFILE       =\r\n\r\n# If the ALLEXTERNALS tag is set to YES, all external class will be listed in\r\n# the class index. If set to NO, only the inherited external classes will be\r\n# listed.\r\n# The default value is: NO.\r\n\r\nALLEXTERNALS           = NO\r\n\r\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\r\n# in the modules index. If set to NO, only the current project's groups will be\r\n# listed.\r\n# The default value is: YES.\r\n\r\nEXTERNAL_GROUPS        = YES\r\n\r\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\r\n# the related pages index. If set to NO, only the current project's pages will\r\n# be listed.\r\n# The default value is: YES.\r\n\r\nEXTERNAL_PAGES         = YES\r\n\r\n#---------------------------------------------------------------------------\r\n# Configuration options related to the dot tool\r\n#---------------------------------------------------------------------------\r\n\r\n# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram\r\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\r\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\r\n# disabled, but it is recommended to install and use dot, since it yields more\r\n# powerful graphs.\r\n# The default value is: YES.\r\n\r\nCLASS_DIAGRAMS         = YES\r\n\r\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\r\n# then run dia to produce the diagram and insert it in the documentation. The\r\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\r\n# If left empty dia is assumed to be found in the default search path.\r\n\r\nDIA_PATH               =\r\n\r\n# If set to YES the inheritance and collaboration graphs will hide inheritance\r\n# and usage relations if the target is undocumented or is not a class.\r\n# The default value is: YES.\r\n\r\nHIDE_UNDOC_RELATIONS   = YES\r\n\r\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\r\n# available from the path. This tool is part of Graphviz (see:\r\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\r\n# Bell Labs. The other options in this section have no effect if this option is\r\n# set to NO\r\n# The default value is: NO.\r\n\r\nHAVE_DOT               = NO\r\n\r\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\r\n# to run in parallel. When set to 0 doxygen will base this on the number of\r\n# processors available in the system. You can set it explicitly to a value\r\n# larger than 0 to get control over the balance between CPU load and processing\r\n# speed.\r\n# Minimum value: 0, maximum value: 32, default value: 0.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_NUM_THREADS        = 0\r\n\r\n# When you want a differently looking font in the dot files that doxygen\r\n# generates you can specify the font name using DOT_FONTNAME. You need to make\r\n# sure dot is able to find the font, which can be done by putting it in a\r\n# standard location or by setting the DOTFONTPATH environment variable or by\r\n# setting DOT_FONTPATH to the directory containing the font.\r\n# The default value is: Helvetica.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_FONTNAME           =\r\n\r\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\r\n# dot graphs.\r\n# Minimum value: 4, maximum value: 24, default value: 10.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_FONTSIZE           = 10\r\n\r\n# By default doxygen will tell dot to use the default font as specified with\r\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\r\n# the path where dot can find it using this tag.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_FONTPATH           =\r\n\r\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\r\n# each documented class showing the direct and indirect inheritance relations.\r\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nCLASS_GRAPH            = YES\r\n\r\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\r\n# graph for each documented class showing the direct and indirect implementation\r\n# dependencies (inheritance, containment, and class references variables) of the\r\n# class with other documented classes.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nCOLLABORATION_GRAPH    = YES\r\n\r\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\r\n# groups, showing the direct groups dependencies.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nGROUP_GRAPHS           = YES\r\n\r\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\r\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\r\n# Language.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nUML_LOOK               = NO\r\n\r\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\r\n# class node. If there are many fields or methods and many nodes the graph may\r\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\r\n# number of items for each type to make the size more manageable. Set this to 0\r\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\r\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\r\n# but if the number exceeds 15, the total amount of fields shown is limited to\r\n# 10.\r\n# Minimum value: 0, maximum value: 100, default value: 10.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nUML_LIMIT_NUM_FIELDS   = 10\r\n\r\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\r\n# collaboration graphs will show the relations between templates and their\r\n# instances.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nTEMPLATE_RELATIONS     = NO\r\n\r\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\r\n# YES then doxygen will generate a graph for each documented file showing the\r\n# direct and indirect include dependencies of the file with other documented\r\n# files.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nINCLUDE_GRAPH          = YES\r\n\r\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\r\n# set to YES then doxygen will generate a graph for each documented file showing\r\n# the direct and indirect include dependencies of the file with other documented\r\n# files.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nINCLUDED_BY_GRAPH      = NO\r\n\r\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\r\n# dependency graph for every global function or class method.\r\n#\r\n# Note that enabling this option will significantly increase the time of a run.\r\n# So in most cases it will be better to enable call graphs for selected\r\n# functions only using the \\callgraph command. Disabling a call graph can be\r\n# accomplished by means of the command \\hidecallgraph.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nCALL_GRAPH             = NO\r\n\r\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\r\n# dependency graph for every global function or class method.\r\n#\r\n# Note that enabling this option will significantly increase the time of a run.\r\n# So in most cases it will be better to enable caller graphs for selected\r\n# functions only using the \\callergraph command. Disabling a caller graph can be\r\n# accomplished by means of the command \\hidecallergraph.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nCALLER_GRAPH           = NO\r\n\r\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\r\n# hierarchy of all classes instead of a textual one.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nGRAPHICAL_HIERARCHY    = YES\r\n\r\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\r\n# dependencies a directory has on other directories in a graphical way. The\r\n# dependency relations are determined by the #include relations between the\r\n# files in the directories.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDIRECTORY_GRAPH        = YES\r\n\r\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\r\n# generated by dot. For an explanation of the image formats see the section\r\n# output formats in the documentation of the dot tool (Graphviz (see:\r\n# http://www.graphviz.org/)).\r\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\r\n# to make the SVG files visible in IE 9+ (other browsers do not have this\r\n# requirement).\r\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\r\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\r\n# png:gdiplus:gdiplus.\r\n# The default value is: png.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_IMAGE_FORMAT       = png\r\n\r\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\r\n# enable generation of interactive SVG images that allow zooming and panning.\r\n#\r\n# Note that this requires a modern browser other than Internet Explorer. Tested\r\n# and working are Firefox, Chrome, Safari, and Opera.\r\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\r\n# the SVG files visible. Older versions of IE do not have SVG support.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nINTERACTIVE_SVG        = NO\r\n\r\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\r\n# found. If left blank, it is assumed the dot tool can be found in the path.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_PATH               =\r\n\r\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\r\n# contain dot files that are included in the documentation (see the \\dotfile\r\n# command).\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOTFILE_DIRS           =\r\n\r\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\r\n# contain msc files that are included in the documentation (see the \\mscfile\r\n# command).\r\n\r\nMSCFILE_DIRS           =\r\n\r\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\r\n# contain dia files that are included in the documentation (see the \\diafile\r\n# command).\r\n\r\nDIAFILE_DIRS           =\r\n\r\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\r\n# path where java can find the plantuml.jar file. If left blank, it is assumed\r\n# PlantUML is not used or called during a preprocessing step. Doxygen will\r\n# generate a warning when it encounters a \\startuml command in this case and\r\n# will not generate output for the diagram.\r\n\r\nPLANTUML_JAR_PATH      =\r\n\r\n# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a\r\n# configuration file for plantuml.\r\n\r\nPLANTUML_CFG_FILE      =\r\n\r\n# When using plantuml, the specified paths are searched for files specified by\r\n# the !include statement in a plantuml block.\r\n\r\nPLANTUML_INCLUDE_PATH  =\r\n\r\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\r\n# that will be shown in the graph. If the number of nodes in a graph becomes\r\n# larger than this value, doxygen will truncate the graph, which is visualized\r\n# by representing a node as a red box. Note that doxygen if the number of direct\r\n# children of the root node in a graph is already larger than\r\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\r\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r\n# Minimum value: 0, maximum value: 10000, default value: 50.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_GRAPH_MAX_NODES    = 50\r\n\r\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\r\n# generated by dot. A depth value of 3 means that only nodes reachable from the\r\n# root by following a path via at most 3 edges will be shown. Nodes that lay\r\n# further from the root node will be omitted. Note that setting this option to 1\r\n# or 2 may greatly reduce the computation time needed for large code bases. Also\r\n# note that the size of a graph can be further restricted by\r\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r\n# Minimum value: 0, maximum value: 1000, default value: 0.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nMAX_DOT_GRAPH_DEPTH    = 0\r\n\r\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\r\n# background. This is disabled by default, because dot on Windows does not seem\r\n# to support this out of the box.\r\n#\r\n# Warning: Depending on the platform used, enabling this option may lead to\r\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\r\n# read).\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_TRANSPARENT        = NO\r\n\r\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\r\n# files in one run (i.e. multiple -o and -T options on the command line). This\r\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\r\n# this, this feature is disabled by default.\r\n# The default value is: NO.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_MULTI_TARGETS      = NO\r\n\r\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\r\n# explaining the meaning of the various boxes and arrows in the dot generated\r\n# graphs.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nGENERATE_LEGEND        = YES\r\n\r\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot\r\n# files that are used to generate the various graphs.\r\n# The default value is: YES.\r\n# This tag requires that the tag HAVE_DOT is set to YES.\r\n\r\nDOT_CLEANUP            = YES\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/doxygen_prebuild.cmake.in",
    "content": "set(SIBR_PROJECTS_SAMPLES_SUBPAGE_REF   \"@SIBR_PROJECTS_SAMPLES_SUBPAGE_REF@\")\nset(SIBR_PROJECTS_OURS_SUBPAGE_REF      \"@SIBR_PROJECTS_OURS_SUBPAGE_REF@\")\nset(SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF   \"@SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF@\")\nset(SIBR_PROJECTS_OTHERS_SUBPAGE_REF    \"@SIBR_PROJECTS_OTHERS_SUBPAGE_REF@\")\nset(SIBR_PROJECTS_SAMPLES_REF_REF       \"@SIBR_PROJECTS_SAMPLES_REF_REF@\")\nset(SIBR_PROJECTS_OURS_REF_REF          \"@SIBR_PROJECTS_OURS_REF_REF@\")\nset(SIBR_PROJECTS_TOOLBOX_REF_REF       \"@SIBR_PROJECTS_TOOLBOX_REF_REF@\")\nset(SIBR_PROJECTS_OTHERS_REF_REF        \"@SIBR_PROJECTS_OTHERS_REF_REF@\")\nset(DOXY_DOC_DEST_DIR\t\t\t\t    \"@DOXY_DOC_DEST_DIR@\")\nset(DOXY_DOC_GENERATED_DOC_DIR\t\t    \"@DOXY_DOC_GENERATED_DOC_DIR@\")\nset(DOXY_DOC_PAGES_DIR\t\t\t\t    \"@DOXY_DOC_PAGES_DIR@\")\n\n## Cleaning documentation folders\nfile(REMOVE_RECURSE \"${DOXY_DOC_GENERATED_DOC_DIR}\")\nfile(REMOVE_RECURSE \"${DOXY_DOC_DEST_DIR}\")\n\n## Generating documentation pages with variables\nfile(GLOB_RECURSE doc_files \"${DOXY_DOC_PAGES_DIR}/*.in\")\nforeach(filename ${doc_files})\n    message(STATUS \"Generating ${filename}...\")\n    get_filename_component(output_filename ${filename} NAME_WLE)\n    message(STATUS \"Output in ${DOXY_DOC_GENERATED_DOC_DIR}/${output_filename}...\")\n    configure_file(${filename} ${DOXY_DOC_GENERATED_DOC_DIR}/${output_filename} @ONLY)\nendforeach()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/layout.xml.in",
    "content": "<doxygenlayout version=\"1.0\">\n  <!-- Layout definition for the navigation index -->\n  <navindex>\n    <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n    <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n    <tab type=\"usergroup\" title=\"Code Reference\" url=\"[none]\">\n      <tab type=\"modules\" visible=\"yes\" title=\"Modules\" intro=\"\"/>\n      <tab type=\"namespaces\" visible=\"yes\" title=\"Namespaces\">\n        <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n      </tab>\n      <tab type=\"interfaces\" visible=\"yes\" title=\"Interfaces\">\n        <tab type=\"interfacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"interfaceindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n        <tab type=\"interfacehierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n      </tab>\n      <tab type=\"classes\" visible=\"yes\" title=\"Classes\">\n        <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n        <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n      </tab>\n      <tab type=\"structs\" visible=\"yes\" title=\"Structs\">\n        <tab type=\"structlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"structindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n      </tab>\n      <tab type=\"exceptions\" visible=\"yes\" title=\"Exceptions\">\n        <tab type=\"exceptionlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"exceptionindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n        <tab type=\"exceptionhierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n      </tab>\n      <tab type=\"files\" visible=\"yes\" title=\"Files\">\n        <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n        <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n      </tab>\n      <tab type=\"examples\" visible=\"yes\" title=\"Examples\" intro=\"\"/>\n    </tab>\n    <tab type=\"usergroup\" title=\"Changelog\" url=\"[none]\">\n      <tab type=\"user\" visible=\"yes\" url=\"@ref deprecated\" title=\"Deprecated features\" intro=\"\"/>\n      <tab type=\"user\" visible=\"yes\" url=\"@ref bug\" title=\"Known bugs\" intro=\"\"/>\n      <tab type=\"user\" visible=\"yes\" url=\"@ref todo\" title=\"Future changes\" intro=\"\"/>\n    </tab>\n  </navindex>\n\n  <!-- Layout definition for a class page -->\n  <class>\n    <briefdescription visible=\"yes\"/>\n    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n    <inheritancegraph visible=\"$CLASS_GRAPH\"/>\n    <collaborationgraph visible=\"$COLLABORATION_GRAPH\"/>\n    <memberdecl>\n      <nestedclasses visible=\"yes\" title=\"\"/>\n      <publictypes title=\"\"/>\n      <services title=\"\"/>\n      <interfaces title=\"\"/>\n      <publicslots title=\"\"/>\n      <signals title=\"\"/>\n      <publicmethods title=\"\"/>\n      <publicstaticmethods title=\"\"/>\n      <publicattributes title=\"\"/>\n      <publicstaticattributes title=\"\"/>\n      <protectedtypes title=\"\"/>\n      <protectedslots title=\"\"/>\n      <protectedmethods title=\"\"/>\n      <protectedstaticmethods title=\"\"/>\n      <protectedattributes title=\"\"/>\n      <protectedstaticattributes title=\"\"/>\n      <packagetypes title=\"\"/>\n      <packagemethods title=\"\"/>\n      <packagestaticmethods title=\"\"/>\n      <packageattributes title=\"\"/>\n      <packagestaticattributes title=\"\"/>\n      <properties title=\"\"/>\n      <events title=\"\"/>\n      <privatetypes title=\"\"/>\n      <privateslots title=\"\"/>\n      <privatemethods title=\"\"/>\n      <privatestaticmethods title=\"\"/>\n      <privateattributes title=\"\"/>\n      <privatestaticattributes title=\"\"/>\n      <friends title=\"\"/>\n      <related title=\"\" subtitle=\"\"/>\n      <membergroups visible=\"yes\"/>\n    </memberdecl>\n    <detaileddescription title=\"\"/>\n    <memberdef>\n      <inlineclasses title=\"\"/>\n      <typedefs title=\"\"/>\n      <enums title=\"\"/>\n      <services title=\"\"/>\n      <interfaces title=\"\"/>\n      <constructors title=\"\"/>\n      <functions title=\"\"/>\n      <related title=\"\"/>\n      <variables title=\"\"/>\n      <properties title=\"\"/>\n      <events title=\"\"/>\n    </memberdef>\n    <allmemberslink visible=\"yes\"/>\n    <usedfiles visible=\"$SHOW_USED_FILES\"/>\n    <authorsection visible=\"yes\"/>\n  </class>\n\n  <!-- Layout definition for a namespace page -->\n  <namespace>\n    <briefdescription visible=\"yes\"/>\n    <memberdecl>\n      <nestednamespaces visible=\"yes\" title=\"\"/>\n      <constantgroups visible=\"yes\" title=\"\"/>\n      <interfaces visible=\"yes\" title=\"\"/>\n      <classes visible=\"yes\" title=\"\"/>\n      <structs visible=\"yes\" title=\"\"/>\n      <exceptions visible=\"yes\" title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n      <membergroups visible=\"yes\"/>\n    </memberdecl>\n    <detaileddescription title=\"\"/>\n    <memberdef>\n      <inlineclasses title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n    </memberdef>\n    <authorsection visible=\"yes\"/>\n  </namespace>\n\n  <!-- Layout definition for a file page -->\n  <file>\n    <briefdescription visible=\"yes\"/>\n    <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n    <includegraph visible=\"$INCLUDE_GRAPH\"/>\n    <includedbygraph visible=\"$INCLUDED_BY_GRAPH\"/>\n    <sourcelink visible=\"yes\"/>\n    <memberdecl>\n      <interfaces visible=\"yes\" title=\"\"/>\n      <classes visible=\"yes\" title=\"\"/>\n      <structs visible=\"yes\" title=\"\"/>\n      <exceptions visible=\"yes\" title=\"\"/>\n      <namespaces visible=\"yes\" title=\"\"/>\n      <constantgroups visible=\"yes\" title=\"\"/>\n      <defines title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n      <membergroups visible=\"yes\"/>\n    </memberdecl>\n    <detaileddescription title=\"\"/>\n    <memberdef>\n      <inlineclasses title=\"\"/>\n      <defines title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n    </memberdef>\n    <authorsection/>\n  </file>\n\n  <!-- Layout definition for a group page -->\n  <group>\n    <briefdescription visible=\"yes\"/>\n    <groupgraph visible=\"$GROUP_GRAPHS\"/>\n    <memberdecl>\n      <nestedgroups visible=\"yes\" title=\"\"/>\n      <dirs visible=\"yes\" title=\"\"/>\n      <files visible=\"yes\" title=\"\"/>\n      <namespaces visible=\"yes\" title=\"\"/>\n      <classes visible=\"yes\" title=\"\"/>\n      <defines title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <enumvalues title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n      <signals title=\"\"/>\n      <publicslots title=\"\"/>\n      <protectedslots title=\"\"/>\n      <privateslots title=\"\"/>\n      <events title=\"\"/>\n      <properties title=\"\"/>\n      <friends title=\"\"/>\n      <membergroups visible=\"yes\"/>\n    </memberdecl>\n    <detaileddescription title=\"\"/>\n    <memberdef>\n      <pagedocs/>\n      <inlineclasses title=\"\"/>\n      <defines title=\"\"/>\n      <typedefs title=\"\"/>\n      <sequences title=\"\"/>\n      <dictionaries title=\"\"/>\n      <enums title=\"\"/>\n      <enumvalues title=\"\"/>\n      <functions title=\"\"/>\n      <variables title=\"\"/>\n      <signals title=\"\"/>\n      <publicslots title=\"\"/>\n      <protectedslots title=\"\"/>\n      <privateslots title=\"\"/>\n      <events title=\"\"/>\n      <properties title=\"\"/>\n      <friends title=\"\"/>\n    </memberdef>\n    <authorsection visible=\"yes\"/>\n  </group>\n\n  <!-- Layout definition for a directory page -->\n  <directory>\n    <briefdescription visible=\"yes\"/>\n    <directorygraph visible=\"yes\"/>\n    <memberdecl>\n      <dirs visible=\"yes\"/>\n      <files visible=\"yes\"/>\n    </memberdecl>\n    <detaileddescription title=\"\"/>\n  </directory>\n</doxygenlayout>"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/1_Getting_Started.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@mainpage Getting Started\n\n@section intro_sec Introduction\nThe System for Image-Based Rendering or **SIBR**, is a specialized collection of libraries and toolkits for quickly implementing Image-Based Rendering (IBR) algorithms, and includes implementations of several published IBR papers, mainly from Inria and UCL, but also (re-implementations) of projects from other research groups. Most of **SIBR** was developed over the years (since 2011) at Inria Sophia-Antipolis for the various IBR research projects in the group, but the codebase includes a significant part of code from the *fribr* codebase of P. Hedman from UCL. The codebase has a long history; see @ref sibr_history section.\n\nIn this first release, we are providing reference source code implementations and datasets for the following \\ref sibr_projects_available.\n\nWe will be progressively releasing more implementations of past and future projects (please see the @ref sibr_roadmap). For the first few releases, the main intended usage of the codebase is comparisons with previous algorithms. In the medium-term future, we hope that the codebase will be useful to others for the development of their own IBR algorithms.\n\nThe codebase contains three main components: the main *core* library, various utility/helper libraries and what we call *Projects* (see @ref sibr_projects_about), that are the implementations of Inria, UCL (and other) research projects.\nThe core library has support for multi-view (MV) datasets, processed with Structure-from-Motion (SfM) and Multi-view Stereo (MVS) software. We support data from various SfM/MVS sources, such as *colmap* and the (commercial) *RealityCapture* package (see @ref howto_generate_dataset), and a some interactive viewing utilities for developing and debugging IBR algorithms (e.g., ``top view'' shown below). \n\n@image HTML ulr_screenshot.png An example view of SIBR width=700px\n\nThe utilities include various MV dataset (pre-)processing utilities that are used by various *Projects* and can be of general use, and various utilities for different API interfaces (e.g., tensorflow and pytorch, OptiX) and the core *fribr* framework from UCL that is used in some *Projects*.\n\nEach *Project* provided in **SIBR** has (more or less) similar documentation and code structure: a binary release for easy use, how to checkout the code, configure, build and install the solution, and run the basic renderer; a set if fully-processed datasets are provided for each project. The *Project* has *apps*, typically including a *rendering app* that is usually enough to run the method to compare with a new algorithm on one of our datasets.\nMost projects also have a *preprocessing* step. The code for preprocessing allows processing of your own data with the corresponding algorithm; the datasets provided have been processed with these tools. \nPlease see the section on comparisons (@ref comparisons_sec) below.\n\nThe first *Project* is bundled in the *core* library, and has implementations of per-pixel variants of the Unstructured Lumigraph \\[Buehler 2001\\] (see the @ref ulrPage page). This implementation has been used as a baseline comparison in many of our projects, and is always a useful baseline for any new IBR algorithm.\n\nThe licensing of the *core* is free for non-commercial, research and evaluation purposes, by academic or industrial labs, as defined in the LICENSE.md file. For commercial usage in a for-profit product, a paid license is required; please contact George.Drettakis@inria.fr if you are interested.\n\nThe rest of this page explains how to download binaries, compile, configure and install the basic system and its documentation.\n\nIf you use this code in a publication, please cite the system as follows in your publications:\n\n```\n@misc{sibr2020,\n   author       = \"Bonopera, Sebastien and Hedman, Peter and Esnault, Jerome and Prakash, Siddhant and Rodriguez, Simon and Thonat, Theo and Benadel, Mehdi and Chaurasia, Gaurav and Philip, Julien and Drettakis, George\",\n   title        = \"sibr: A System for Image Based Rendering\",\n   year         = \"2020\",\n   url          = \"https://sibr.gitlabpages.inria.fr/\"\n}\n```\n\n@section comparison_sec Comparisons\n\nA major goal of this code release is to allow comparisons. Most renderers in the *Projects* are interactive, allowing free-viewpoint navigation in the corresponding scenes. For comparisons, most renderers take a <code>--pathFile</code> argument that is a path of cameras in the scene. These are written to the directory requested, or by default in the <code>pathOutput</code> directory at the root of the dataset. For more details on cameras and paths, see the tutorial page @ref howto_cameras_paths .\n\n@section install_sec Installation\n\n**Note**: The current release is for *Windows 10* only. We are planning a Linux release soon.\n\n@subsection sibr_binaries Binary distribution\n\nThe easiest way to use *SIBR* is to download the binary distribution. All steps described below, including all preprocessing for your datasets will work using this code.\nA binary distribution (200Mb) of the core is available here:\n\n```\nwget https://repo-sam.inria.fr/fungraph/sibr-release/sibr-core/install.zip\n```\n\nunzip to create the ``install'' directory. All instructions below on running the code can be performed using this binary distribution.\n\n@subsection sibr_example To run an example\n\nDownload a dataset from: https://repo-sam.inria.fr/fungraph/sibr-datasets/\n\ne.g., the *sibr-museum-front* dataset in the *DATASETS_PATH* directory.\n\n```\nwget https://repo-sam.inria.fr/fungraph/sibr-datasets/museum_front27_ulr.zip\n```\n\nOnce you have built the system or downloaded the binaries (see above), go to *install/bin* and you can run:\n```\n\tsibr_ulrv2_app.exe --path DATASETS_PATH/sibr-museum-front\n```\n\nYou will have an interactive viewer and you can navigate freely in the captured scene. \nOur default interactive viewer has a main view running the algorithm and a top view to visualize the position of the calibrated cameras. By default you are in WASD mode, and can toggle to trackball using the \"y\" key. Please see the page [Interface](https://sibr.gitlabpages.inria.fr/docs/nightly/howto_sibr_useful_objects.html) for more details on the interface.\n\n\n@subsection sibr_prerequisite Prerequisites\n\n- git\n- Visual Studio 2019 (https://visualstudio.microsoft.com/).\n- Cmake 3.16+,(https://cmake.org/).\n- 7zip should be installed (https://www.7-zip.org/download.html).\n- Python 3.8+ should be installed and configured in the PATH (https://www.python.org/downloads/).\n- PIL (pip install pillow, in an admin command if needed: https://pypi.org/project/Pillow/) might be needed for some preprocess scripts.\n- ImageMagick (https://imagemagick.org/script/download.php).\n- Doxygen 1.8.17+ should be installed and configured in the PATH for generating the documentation (http://www.doxygen.nl/download.html).\n- If needed (Optix, Tensorflow, Pytorch,... integration), CUDA 10.1+ (https://developer.nvidia.com/cuda-downloads) and cuDNN.\n- An internet connection, as external dependencies will be downloaded from our servers during the CMake configuration.\n\n@subsection sibr_checkout Checkout the code\n\n- Clone sibr_core repository (https://gitlab.inria.fr/sibr/sibr_core). We recommend that you checkout master branch, but you can also work with the develop branch (unstable).\n@code\n## through HTTPS\ngit clone https://gitlab.inria.fr/sibr/sibr_core.git -b master\n## through SSH\ngit clone git@gitlab.inria.fr:sibr/sibr_core.git -b master\n@endcode\n- You can add the projects' source code you would like to compile with SIBR, for this see @ref sibr_projects_add)\n@subsection sibr_configure_cmake Configuring the solution\n\n- Run Cmake, select SIBR root folder as a source directory and \\<sibr_root_folder\\>/build/ as the build directory.\n- Configure, select the Visual Studio C++ Win64 compiler.\n- Select the projects you want to generate among the BUILD_* variables in the list.\n- Generate.\n\n@subsection sibr_compile Compiling\n\n- Configure the solution & Generate like we did in @ref sibr_configure_cmake.\n- Open the generated Visual Studio solution (sibr_root/build/sibr_projects.sln).\n- Build the BUILD_ALL target, and then the INSTALL target.\n- The compiled executables will be put in install/bin.\n@note If install fails, you will have to copy the required .dll files which are not copied automatically in the install/bin directory.\n      In general make sure these .dll files are in the bin directory : boost_system-vc141-mt-1_64.dll, boost_filesystem-vc141-mt-1_64.dll, glew32.dll, assimp-vc140-mt.dll, embree.dll.\n      Alternatively, you can selectively execute some of the install targets for specific projects.\n\n@subsection sibr_generate_documentation Generating the documentation\n\n- Configure the solution like we did in @ref sibr_configure_cmake and choose BUILD_DOCUMENTATION along with the projects you want in the documentation. Then generate the solution.\n- Open the generated Visual Studio solution (sibr_root/build/sibr_projects.sln).\n- Build the DOCUMENTATION target.\n- The generated documentation will be put in docs and can be accessed through install/docs/index.html.\n\n@subsection sibr_troubleshooting Troubleshoot\n\n- Cmake can't find GLU, GLEW or another library: use an up-to-date CMake, check that you are connected to the Internet.\n- Weird OpenCV error: you probably selected the 32-bits compiler in cmake-gui.\n- 'Cmd.exe failed wither error 009' or similar: make sure Python is installed and in the PATH.\n- BUILD_ALL or INSTALL fail because of a project you don't really need: build and install each project separately by selecting the proper targets.\n- Some projects may depend on other projects. Make sure you have checked all the required projects before generating the solution.\n- Error in CUDA headers under Visual Studio 2019: make sure CUDA >= 10.1 is installed.\n\n@subsection sibr_bugs Bugs and Issues\n\nWe will track bugs and issues through the Issues interface on gitlab. Inria gitlab does not allow creation of external accounts, so if you have an issue/bug please email <code>sibr@inria.fr</code> and we will either create a guest account or create the issue on our side.\n\n@subsection sibr_main_authors Authors\n\nThe authors of **SIBR** *core* are Gaurav Chaurasia (Ph.D. Inria, 2011-2013), Rodrigo Ortiz-Cayon (Ph.D. Inria 2013-2016), Jerome Esnault (Software Engineer, Inria, DATES), Sebastien Bonopera (Software Engineer, Inria, DATES), Theo Thonat (Ph.D. Inria 2015-2019), Simon Rodriguez (Ph.D. Inria, 2017-2020), Julien Philip (Ph.D. Inria, 2017-2020), Siddhant Prakash (Soft. Engineer & currently Ph.D. Inria). Mehdi Benadel (Soft. Engineer, Inria) is currently in charge of **SIBR**. George Drettakis had the overall supervision of the project throughout. See also @ref sibr_history.\n\n\nEach *Project* has different authors, who are listed in the corresponding project pages. A special mention is due to Peter Hedman (at UCL) who wrote the *fribr* framework used in several projects.\n\n@subsection sibr_funding Funding\n\nThe various projects in **SIBR** were funded by Inria, French national and European research funds. These include French Ministry of Education and University of Nice Sophia-Antipolis (now Universite Cote d'Azur) funds (G. Chaurasia, S. Rodriguez), the ANR SEMAPOLIS project (https://project.inria.fr/semapolis/) and the Region Provence Alpes Cote d'Azur (T. Thonat), the EU projects VERVE (https://gv2.scss.tcd.ie/VERVE/) G. Chaurasia; CR-PLAY (http://www.cr-play.eu/) R. Ortiz-Cayon, J. Esnault, S. Bonopera; EMOTIVE (https://emotiveproject.eu/) S. Duchene, J. Philip and the ERC FUNGRAPH project (http://fungraph.inria.fr), J. Philip, S. Rodriguez, S. Prakash, S. Morgenthaler, M. Benadel. The FRIBR code was funded by the Rabin Ezra scholarship fund for P. Hedman at UCL.\n\n@section sibr_history History of SIBR\n\nThe oldest code in SIBR was written by G. Chaurasia for his Ph.D. in 2011-2013 at what was then the REVES (LINK) research group at Inria Sophia-Antipolis. The initial ULR implementation, and parts of the code in the Superpixel Warp project [Chaurasia 2013] are from this work. Gaurav re-factored the code to allow it work first with Qt and then with OpenSceneGraph, in a code base called *ibr_collection*, used for the EU project VERVE (https://gv2.scss.tcd.ie/VERVE/). In the followup CR-PLAY (http://www.cr-play.eu/) project, the code was refactored by S. Bonopera, and as part of the ERC FUNGRAPH S. Prakash was in charge of designing the current core/projects structure. M. Benadel has been in charge of cleanup for the release. The overall development of the entire project was managed by G. Drettakis.\n\n@section sibr_roadmap SIBR Release Roadmap\n\nAfter the first release (see \\ref sibr_projects_available ), we plan to release code for the deep learning solution for outdoor relighting [Philip 19] (Jan 21), and potentially for other recent IBR projects from the GRAPHDECO group. \nWe will be releasing a Linux version of the core, and for some of the *Projects* soon. Stay tuned.\n\n@subsection sibr_main_authors Authors\n\nThe authors of **SIBR** *core* are Gaurav Chaurasia (Ph.D. Inria, 2011-2013), Rodrigo Ortiz-Cayon (Ph.D. Inria 2013-2016), Jerome Esnault (Software Engineer, Inria, DATES), Sebastien Bonopera (Software Engineer, Inria, DATES), Theo Thonat (Ph.D. Inria 2015-2019), Simon Rodriguez (Ph.D. Inria, 2017-2020), Julien Philip (Ph.D. Inria, 2017-2020), Siddhant Prakash (Soft. Engineer & currently Ph.D. Inria). Mehdi Benadel (Soft. Engineer, Inria) is currently in charge of **SIBR**. George Drettakis had the overall supervision of the project throughout. See also @ref sibr_history.\n\n\nEach *Project* has different authors, who are listed in the corresponding project pages. A special mention is due to Peter Hedman (at UCL) who wrote the *fribr* framework used in several projects.\n\n@subsection sibr_funding Funding\n\nThe various projects in **SIBR** were funded by Inria, French national and European research funds. These include French Ministry of Education and University of Nice Sophia-Antipolis (now Universite Cote d'Azur) funds (G. Chaurasia, S. Rodriguez), the ANR SEMAPOLIS project (https://project.inria.fr/semapolis/) and the Region Provence Alpes Cote d'Azur (T. Thonat), the EU projects VERVE (https://gv2.scss.tcd.ie/VERVE/) G. Chaurasia; CR-PLAY (http://www.cr-play.eu/) R. Ortiz-Cayon, J. Esnault, S. Bonopera; EMOTIVE (https://emotiveproject.eu/) S. Duchene, J. Philip and the ERC FUNGRAPH project (http://fungraph.inria.fr), J. Philip, S. Rodriguez, S. Prakash, S. Morgenthaler, M. Benadel. The FRIBR code was funded by the Rabin Ezra scholarship fund for P. Hedman at UCL.\n\n@section sibr_references References\n[Chaurasia 13] G. Chaurasia, S. Duchene, O. Sorkine-Hornung, & G. Drettakis. (2013). Depth synthesis and local warps for plausible image-based navigation. ACM Transactions on Graphics (TOG), 32(3), 30. http://www-sop.inria.fr/reves/Basilic/2013/CDSD13/\n\n[Philip 19] J. Philip, M. Gharbi, T. Zhou, A. Efros, G. Drettakis (2019), Multi-view Relighting Using a Geometry-Aware Network   Multi-view-Relighting.pdf ACM Transactions on Graphics (SIGGRAPH Conference Proceedings), Volume 38, Number 4 - July 2019 http://www-sop.inria.fr/reves/Basilic/2019/PGZED19/\n\n\n */\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/2_Projects.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page projects Projects\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/2_Projects.dox.in",
    "content": "/*!\n@page projects Projects\n\n@section sibr_projects_about What are projects ?\n\nResearch algorithms and toolboxes have been implemented for SIBR as plugins named \"Projects\".\\n\nUnstructured Lumigraph Rendering (ULR) application is provided by default with SIBR to help users get started.\\n\nSome projects called toolboxes might also be used by other projects to bring additional functionalities (for instance the SIBR/Optix integration).\\n\n\n@subsection sibr_projects_available Available Projects \n\nThe list of projects that have been added to this generated version of SIBR's documentation is given below.\\n\nFor projects corresponding to publications, the link to the paper is provided.\\n\nMost of other projects are helper libraries that can be used to augment SIBR with new functionalities.\n\n- @subpage sibr_projects_samples\n@SIBR_PROJECTS_SAMPLES_REF_REF@\n- @subpage sibr_projects_ours\n@SIBR_PROJECTS_OURS_REF_REF@\n- @subpage sibr_projects_others\n@SIBR_PROJECTS_OTHERS_REF_REF@\n- @subpage sibr_projects_toolbox\n@SIBR_PROJECTS_TOOLBOX_REF_REF@\n\n@subsection sibr_projects_documentation Access projects documentation\n\nEach project documentation is compilable through SIBR.\\n\nTo access the projects documentation, first :\\n\n- Add the project to SIBR like explained in @ref sibr_projects_add\n- Compile the documentation \n\n@subsection sibr_projects_add Adding projects to SIBR\n\nExisting projects can be added as subdirectories in the src/projects directory.\\n\nFor this, you need to access to the project's source code (most of them are in https://gitlab.inria.fr/sibr/projects) to clone it, build it with SIBR and use it.\\n\nIf you want to create your own project, see @ref howto_setup_project .\\n\nYou can follow the given steps to add a project once access is given.\\n\n- You will need to checkout SIBR Core source code (see @ref sibr_checkout).\n- Go to src/projects\n- Clone/Copy the project source code in the correct project folder (it should be the same as the project repository, or check the README for more information).\n- You can then resume with @ref sibr_generate_documentation or @ref sibr_compile\n\n@subsection sibr_project_structure Project structure\n\nSee @ref project_structure\n\n@subsection sibr_your_project Creating your own project\n\nSee @ref howto_setup_project\n\n*/\n\n/*!\n@page sibr_projects_samples Sample algorithms & toolboxes\n\n@SIBR_PROJECTS_SAMPLES_SUBPAGE_REF@\n*/\n\n/*!\n@page sibr_projects_ours Our algorithms\n\n@SIBR_PROJECTS_OURS_SUBPAGE_REF@\n*/\n\n/*!\n@page sibr_projects_others Other algorithms\n\n@SIBR_PROJECTS_OTHERS_SUBPAGE_REF@\n*/\n\n/*!\n@page sibr_projects_toolbox Integrated toolboxes\n\n@SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF@\n*/\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/3_Tutorials.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page tutorials Dataset Documentation & Tutorials\n\n- @subpage howto_generate_dataset\n- @subpage howto_sibr_useful_objects\n- @subpage howto_setup_project\n- @subpage howto_cameras_paths\n\n */\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/4_Architecture.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page architecture Architecture\n\nThis is a diagram describing the overall SIBR architecture:\n@image html sibr_new_architecture.png \"Architecture Diagram\" width=700px\n\nSIBR is built using layers.\n\n@section Core\n\nSIBR core module exposes internal libraries (system, graphics, assets, scene, raycaster, imgproc, view, renderer, video) which can be used to implement multiple IBR algorithms.\n\n@subsection system\nAt the very low level, we have **core/system** that contains OS tools (e.g. filesystems), mathematical tools (e.g. vector operations), and standard tools (e.g. string operations). It also contains a configuration file (Config.hpp) that defines many useful macros/const.\n\nIn short:\n- we use STL and C++11 (std::shared_ptr are heavily used)\n- we use Boost Libraries to manage filesystems.\n- we use Eigen for math tools. (Dev tips: Please use sibr::Vector<NumComp, Type> (e.g. sibr::Vector3f), because they define important flags.)\n\n@subsection graphics\nNext we expose **core/graphics** which contains graphics tools, such as images, meshes, textures, rendertargets, shaders,... We use OpenCV for managing images and image operations. Note that we wrapped OpenCV's cv::Mat in sibr::Image to control/check types statically. See sibr::Image class for details.\n\n@subsection assets\nThe classes contained in **core/assets** represent basic resource files present in IBR datasets. These classes are useful for loading and reading different types of files found in a typical dataset.\n\n@subsection scene\n**core/scene** contains a full IBR dataset representation and storage, based on multiple components that form a \"scene\". A good example is sibr::BasicIBRScene, containing a default set of assets (cameras, images, proxies etc.) which can be initialized by means of a scene metadata file.\n\n@subsection raycaster\nThe **core/raycaster** library provides raycasting and intersection test utilities, wrapping Intel Embree for fast ray/triangle tests.\n\n@subsection imgproc\nBasic image processing utilities cam be found in **core/imgproc**. For more complex tasks, you can use OpenCV algorithms as our Images are backed by OpenCV matrices.\n\n@subsection video\nYou can load and save videos using the **core/video** module. It internally relies on ffmpeg.\n\n@subsection view\nThe **core/view** library exposes tools for making viewer apps for live rendering and debugging of the algorithms. It define a basic view interface along with interactive camera modes, a multi-window management system,...\n\n@subsection renderer\nThe classes in **core/renderer** library implements general rendering passes and functionalities required for many IBR applications. usually, when designing a View for a custom rendering algorithm, you will use multiple renderers, some customs and some out-of-the-box.\n\n */\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to generate your dataset/How_to_create_dataset_from_colmap.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page HowToColmap How to create a dataset from Colmap\n\nWe provide a python script that runs the entire Colmap pipeline, see here: @ref sibr_projects_dataset_tools_preprocess_tools_fullColmapProcess\n\n@note The previous link might not be available if you did not build the doc with `BUILD_IBR_DATASET_TOOLS` on\n\nHowever, you can also run your own Colmap reconstruction by yourself, and use `ColmapToSIBR` to create an SIBR project (i.e., images without borders, of the same size) from colmap data. In the install\\scripts directory run:\n\n@code\npython colmap2sibr PATH_TO_DATASET\n@endcode\n\nThis will create a *sibr_cm* subdirectory containing the modified scene.\n\n\\section HowToColmap_example_datasets Example Datasets\n\nExample datasets processed with *fullColmapProcess* and *colmap2Sibr* are here:\n\\n\n\thttps://repo-sam.inria.fr/fungraph/sibr-datasets/\n\\n\n\n\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to generate your dataset/How_to_create_dataset_from_realitycapture.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page HowToCapreal How to create a dataset from Reality Capture\n\n\\tableofcontents\n\n@section capreal_usage How to use\n\nWe use Reality Capture to generate a reconstruction of a mesh from several images gererated with multiple point of view. The program can open a group of images and determinate the position of the initial cameras.\nPlease be aware that RealityCapture does not let you export the results without a license (which you might need to pay for).\nHere is a detailed explanation of all the steps:\n\n@subsection capreal_usage_layout Choose your layout\n\nBefore anything, you'll have to choose your layout.\nYou can modify them with the icons on the top of the screen.\nThe interface can be a bit wonky, especially the 3D view. If you want to avoid possible display issues, you can choose `1 + 1 + 1 Layout`.\n\n@image html caprealnew.png Layout\n\n@subsection capreal_usage_input_images Select input images\n\nFor reconstruction, you will need to provide a set of images of your scene. You can do so by clicking on `Inputs` or `Folder` buttons in the `Workflow` tab.\n\n@image html caprealaddinputs.png Add input images \n\n@image html caprealinputsonly.png Now the input images are set \n\n@subsection capreal_usage_align_images Align images\n\nWhen the image set is properly provided, you can align them with the `Align Images` option, in the `Alignment` tab.\n\n@image html caprealalignimages.png Align images option\n\nNow, you can see a point cloud in the 3D view.\n\n@image html caprealpointcloud.png The point cloud you get when you align images\n\n@subsection capreal_usage_mesh_reconstruction Mesh reconstruction\n\nNow you'd want to have a mesh from the images. For this, you need to select one of the `Calculate Model` options in the `Reconstruction` tab. We'll go for the `Normal Detail` option.\n\n@image html caprealmeshreconstruction.png The mesh reconstruction options\n\nNow you should be able to see the reconstruction.\n\nYou can click on `Colorize` to colorize the mesh (or `Texture` if you want to texturize it : colorization only apprixomate vertices color, while texturing gives you an approximated texture).\n\nThe generated mesh is likely to be pretty complex in terms of triangle count.\nYou can decreased the number of triangles by doing : `Tools > Simplify Tools`\nYou can take 1 or 2  For teh render optionmillion of triangle for the simplification\n\nYou now have calibrated cameras and a reconstructed 3D mesh that are ready for use by **SIBR**. The next two sections explain whow to create a set of directories that will be useful for dataset managements, then save the data required from RealityCapture.\n\n@image html caprealcolorizesimplify.png Colorize and Simplify Tools options \n\n@section capreal_DirStruc Suggested directory structure\n(Note: This directory structure is only suggested for user accessibility. You can store/create the dataset in separate directories as you like, as long as you provide correct input to the scripts to generate SIBR datasets.)\n\n@li dataset\\\\raw\n\\n Contains the original images from the cameras.\n\\n\n@li dataset\\\\rcprojs\n\\n Contains the .rcproj files and the data directories (these are big after reconstruction, since they contain the mesh and texture).\n\\n\n@li dataset\\\\sfm_mvs_rc\n\\n Contains the exported undistorted images with black borders, the file  bundle.out, pmvs_recon.ply and optionally textured.obj, textured.mtl and textured_u1_v1.png (see what to save below)\n\\n\n@li dataset\\\\sibr_rc\n\\n Contains the extracted data to create scene(s) using SIBR, containing bundle file, reconstructed mesh, list of images, scene metadata etc. in proper directory structure.\n\\n\n\n@section capreal_WhatToSave What to save from RealityCapture\n\nIn the selected directory (*sfm_mvs_rc*) save the following:\n\n@li After alignment and reconstruction, save Registration (choose optionsbundler v0.3 Negative-Z format, jpg image type,  fit=Inner_region), and save to file *bundle.out*\n@li After reconstruction -> Mesh -> save to the file *recon.ply*\n@li After texturing -> Mesh -> save textured.obj (which will save textured.mtl and textured_u1_v1.png containing the texture); \n@todo Textures verify\n\n@subsection Restore\n\n@todo Does this exist ?\n@li If something goes wrong, use python restore_dataset.py to restore all original files (bundle, ply, obj) as exported from RealityCapture\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to setup your own project/Configuring_your_project.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page configure_project Configuring your project\n\n@ingroup setup_project\n\n@section gen_setup_config General setup\n\n- Create a repository in `src/projects/my_project` (name your project at your convenience)\n- Setup your project structure as stated in @ref project_structure\n- Use the following sample files (form the following sections) for your `CMakeLists.txt` files and `Config.hpp` structure\n- Re-run configure for the main SIBR `CMakeLists.txt`.\n- The project should be automatically detected; If so, check `BUILD_IBR_MY_PROJECT` (`MY_PROJECT` being your project name folder) in CMake and re-generate.\n\n@section all_sec Main project configuration\n\nThis `CMakeLists.txt` is the one in the root of your project. It is registering the subdirectories of your project against the main CMake.\\n\nIt will also provide you with an additional project wide install target.\\n\n\n@code\nset(SIBR_PROJECT \"my_project\") # Please replace my_project with your project folder name\nproject(sibr_${SIBR_PROJECT}_all)\n\n# Update this with the folders included in your project\nadd_subdirectory(apps)\nadd_subdirectory(preprocess)\nadd_subdirectory(renderer)\n\ninclude(install_runtime)\nsubdirectory_target(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR} \"projects/${SIBR_PROJECT}\")\n@endcode\n\n@section listing_sec Listing app & preprocesses projects\n\nThis `CMakeLists.txt` is registering the CMake projects in subdirectories against the main CMake of your SIBR project, putting them together in a custom named group.\\n\nThey will appear as multiple solutions in a subdirectory in Visual Studio for instance.\\n\nUseful to group the `apps/` or `preprocess/` executables of a project.\\n\n\\n\nYou can use it as sample structure for `apps/CMakeLists.txt` and `preprocess/CMakeLists.txt`.\n\n@code\nproject(sibr_my_apps_group)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# Please rename this project at your convenience\nadd_subdirectory(my_app_1/)\nadd_subdirectory(my_app_2/)\n#...\n@endcode\n\n\n@section exe_sec App and preprocess projects\n\nThis example can be used for application and preprocess executables.\\n\nThe parts to modify are the project name, the linked libraries and the folder property.\\n\nPut the `CMakeLists.txt` in your application project directory.\n\n@code\nset(SIBR_PROJECT \"my_project\") # Please replace my_project with your project folder name\nproject(sibr_${SIBR_PROJECT}_app)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# Please rename this project at your convenience\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} ${SOURCES})\n\n# Define dependencies\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n  \t${OpenCV_LIBRARIES}\n\tsibr_system\n\n\t# you can add your internal or external dependencies here (sibr_renderer, sibr_view, sibr_graphics, sibr_assets,...)\n)\n\n# Define location in solution.\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/${SIBR_PROJECT}/apps\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n@endcode\n\n@section scripts_sec Scripts projects\n\nYou can also add scripts projects. Scripts are bundled in the install/scripts folder, which ensures you have access to utility functions and SIBR binaries.\\n\n\n@code\nset(SIBR_PROJECT \"my_project\") # Please replace my_project with your project folder name\nproject(sibr_${SIBR_PROJECT}_scripts)\t\n\nfile(GLOB_RECURSE SCRIPTS \"*.py\") #add any scripts files / wildcards here\n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/${SIBR_PROJECT}/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FILES ${SCRIPTS} RELATIVE) # you can use FOLDER option if you want the scripts to be stored in a specific folder\n@endcode\n\n@section lib_sec Library project\n\nThis example can be used for libraries, in `renderer\\CMakeLists.txt`.\\n\nThe parts to modify are the project name, the linked libraries, the export/import flag for Windows libraries, and the folder property. \\n\nPut the `CMakeLists.txt` in your library project directory.\\n\nThis example also supports displaying shaders and copying them to the bin/resources common directory.\n\n@code\nset(SIBR_PROJECT \"my_project\")\nproject(sibr_${SIBR_PROJECT})\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# Please rename this project at your convenience\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB SHADERS \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\" \"shaders/*.fp\" \"shaders/*.vp\" \"shaders/*.gp\")\nsource_group(\"Source Files\\\\shaders\" FILES ${SHADERS})\n\n# Redefine sources and all the files to display in the IDE.\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\" \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\"  \"shaders/*.fp\" \"shaders/*.vp\" \"shaders/*.gp\")\n\n# Declare library.\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\n\n# Define dependencies.\ninclude_directories(${Boost_INCLUDE_DIRS} .)\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tglfw3\n\tsibr_system\n\n\t# you can add your internal or external dependencies here (sibr_renderer, sibr_view, sibr_graphics, sibr_assets,...)\n)\n\n# Define export/import flag.\nadd_definitions( -DSIBR_MY_LIBRARY_EXPORTS -DBOOST_ALL_DYN_LINK  )\t\t\t\t\t\t\t\t\t\t\t# Please refactor it with your library export/import flag from Config.hpp\n\n# Define location in solution.\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/${SIBR_PROJECT}/renderer\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tSHADERS \"${SHADERS}\"\t\t\t\t## You can also add scripts and resources with the corresponding keyword (SCRIPTS, RESOURCES)\n\tRSC_FOLDER \"${SIBR_PROJECT}\"\t\t## Resources will be stored in this subfolder in their respective resource folder (scripts, shaders, resources)\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n@endcode\n\nTo handle export/import of library methods properly on Windows, you also need a `Config.hpp` file in your library directory.\n\n@code\n#ifndef __SIBR_MY_LIBRARY_CONFIG_HPP__\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n# define __SIBR_MY_LIBRARY_CONFIG_HPP__\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n\n# include <core/system/Config.hpp>\n\n# ifdef SIBR_OS_WINDOWS\n#  ifdef SIBR_STATIC_DEFINE\n#    define SIBR_EXPORT\n#    define SIBR_NO_EXPORT\n#  else\n#    ifndef SIBR_MY_LIBRARY_EXPORT\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n#      ifdef SIBR_MY_LIBRARY_EXPORTS\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n/* We are building this library */\n#        define SIBR_MY_LIBRARY_EXPORT __declspec(dllexport)\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n#      else\n/* We are using this library */\n#        define SIBR_MY_LIBRARY_EXPORT __declspec(dllimport)\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT\n#    endif\n#  endif\n# else\n#  define SIBR_MY_LIBRARY_EXPORT\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n# endif\n\n#endif  //__SIBR_MY_LIBRARY_CONFIG_HPP__\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Please refactor it with your library name\n\n@endcode\n */\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to setup your own project/Creating_your_library.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page create_library Creating your library\n\n@ingroup setup_project\n\n@section ge_setup_library General setup\n\nThe content of your library would basically be up to what you will need in this specific project.\\n\nHowever, we do implement core patterns that could be useful to create your view and handle the rendering of your scene.\n\n@section library_views Views\n\nbasic example of a View:\n\nsee:\n- https://gitlab.inria.fr/mbenadel/sibr_simple/-/blob/master/renderer/SimpleView.hpp\n- https://gitlab.inria.fr/mbenadel/sibr_simple/-/blob/master/renderer/SimpleView.cpp\n\n@section library_renderers Renderers\n\nbasic example of a Renderer:\n\nsee:\n- https://gitlab.inria.fr/mbenadel/sibr_simple/-/blob/master/renderer/SimpleRenderer.hpp\n- https://gitlab.inria.fr/mbenadel/sibr_simple/-/blob/master/renderer/SimpleRenderer.cpp\n\n@section library_shaders Shaders\n\nShaders copy to binary folder is handled by the library CMake.\\n\nYou can put your shaders files in `renderer/shaders` with the following extensions:\n\n- `.vert`\n- `.frag`\n- `.geom`\n- `.vp`\n- `.fp`\n- `.gp`\n\nIf unchanged, those shaders should be copied to `install/bin/shaders_rsc`.\\n\nTo extend this behavior, please update `renderer/CMakeLists.txt`.\n\n */\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to setup your own project/Documenting_a_project.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n /*!\n@page document_project Documenting projects\n\n@ingroup setup_project\n\n@section gendoc Writing\nEach class created in one of the core SIBR modules (system, assets,...) should be properly documented.\nPlease try to document as many methods as possible (especially public ones). Don't forget to <b>add each class to its module</b>.\nYou will find below an example of a commented class.\n\n@verbatim\n /* Represents a general view.\n    @ingroup sibr_view\n */\n class SIBR_MY_LIBRARY_EXPORT MyView {\n \tpublic:\n\n \t\t/* Loads everything.\n \t\t\t@param flags the options to use.\n \t\t\t@return a boolean denoting the success of the operation.\n \t\t*/\n \t\tbool load(const int flags);\n\n \t\tMyView();\n \t\t~MyView();\n\n \tprivate:\n\n \t\t/* Performs complex operations.\n \t\t\t@param val the value to use.\n \t\t*/\n \t\tvoid performComplexOps(const float val);\n\n \t\tint _flags;\t///< configuration flags\n \t\tsibr::Vector2i _size; ///< The size of the view.\n }\n@endverbatim\n\n\nIf you need to create a new module and want it to appear in the Modules doxygen listing, you will need to create a `sibr_mymodule.dox` file in your module directory, with the following content:\n\n@verbatim\n/*!\n\t@defgroup sibr_mymodule\n\n\t@brief This is my module.\n\n\tThis is a longer description of my module. It's mine.\n*/\n@endverbatim\n\nYou can also write general .dox pages to give more details on a process or a project.\\n\nPlease add them to your project `documentation/` folder.\\n\nHere is an example of a dox file content:\\n\n\n@verbatim\n/*!\n@page yourPageReference Your Page Name\n\nThis is a Page.\\n\n\nYou can add ref to pages like this : @ref anotherPage\\n\nOr add a link to a subpage like this : @subpage yetAnotherPage\\n\n*/\n@endverbatim\n\nYou can automatically link them as subpages in <a href=\"projects.html\">docs/pages/Projects.dox</a> by providing a `<my_project>_doc.cmake` file in your project `documentation/` folder.\\n\nHere you can see an example:\\n\n\n@verbatim\n/*!\nset(PROJECT_PAGE \"yourPageReference\")\nset(PROJECT_LINK \"https://the.link.to.your.source.code.for.instance\")\nset(PROJECT_DESCRIPTION \"A short description\")\nset(PROJECT_TYPE \"OTHER\") # this could be either SAMPLES, TOOLBOX, OURS or OTHERS. If not affiliated to SIBR, you might want to use OTHERS or TOOLBOX\n*/\n@endverbatim\n\n@section compileDoc Generating\n\nTo generate the documentation, enable the BUILD_DOCUMENTATION flag in cmake and build the DOCUMENTATION target in Visual Studio. The generated output html pages will be accessible from <a href=\"../index.html\">intall/docs/index.html</a>.\n\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How to setup your own project/Project_structure.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page project_structure Project Structure\n\n@ingroup setup_project\n\n@section gen_struct General structure\n\n- Projects should follow the following hierarchy:\n\n@verbatim\t\n\tapps/\n\t\tCMakeLists.txt\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# for listing apps to compile\n\t\tmy_app_1/\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# one of your apps, named at your convenience\n\t\t\tCMakeLists.txt\n\t\t\tmain.cpp\n\t\tmy_app_2/\n\t\t\tCMakeLists.txt\n\t\t\tmain.cpp\n\tpreprocess/\n\t\tCMakeLists.txt\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# for listing preprocesses to compile\n\t\tmy_preprocess_1/\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# one of your preprocesses, named at your convenience\n\t\t\tCMakeLists.txt\n\t\t\tmain.cpp\n\t\tmy_preprocess_2/\n\t\t\tCMakeLists.txt\n\t\t\tmain.cpp\n\trenderer/\n\t\tCMakeLists.txt\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# for compiling your library\n\t\tmy_library_code.cpp\n\tdocumentation/\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# you can add optional documentation pages in this folder\n\t\tmy_doc.dox\n\tCMakeLists.txt\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t# project-wide configuration\n@endverbatim\n\n- `renderer/`: contains your library code and configuration\n- `preprocess/`: contains your preprocesses listed by directory, and the configuration CMake file to list them\n- `apps/`: contains your apps listed by directory, and the configuration CMake file to list them\n- `documentation/`: contains additional doxygen documentation\n\n*/\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How_to_generate_your_dataset.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page howto_generate_dataset Dataset Structure and Generation\n\nMost *Projects* take as input a *multi-view dataset*, i.e., a set of images taken using a camera (phone, DSLR, videocamera such as GoPro etc). In almost all cases we assume that a Structure-from-Motion (SfM) algorithm has been run on the input images to generate *calibrated cameras*, and most often a second Multi-View Stereo (MVS) step has been run, to generate a reconstructed 3D mesh. Optionally, we may also use dense depth maps that come from MVS.\n\nIn **SIBR** we have a ``native'' dataset format, described below, which was used traditionally for some of the original *Projects*. For most recent projects we have used the commercial tool RealityCapture for SfM/MVS, since it tends to produce the best overall reconstruction quality. In some recent projects (e.g., DeepBlending, or SemanticCars, see @ref projects), we have used *Colmap*, since the dense per-view depth maps are very useful.\n\nAs a result, **SIBR** supports two types of dataset natively:\n\n @li Native **SIBR** datasets, created using the tools described below, from RealityCapture or Colmap.\nWe provide pre-processing documentation following which you can create SIBR compatible datasets from output of these two SfM/MVS systems:\n  - @subpage HowToCapreal\n  - @subpage HowToColmap\n\n @li Native Colmap datasets: we simply create a metadata file the first time the dataset is read.\n\nDifferent *Projects* often add additional information to their datasets, typically via multiple pre-processing utilities, some general, some specific to the *Project*.\nPython scripts designed to process and prepare datasets are provided with each project along with instructions on how to use them in the corresponding documentation.\n\n@section howto_generate_dataset_sibr_format Basic SIBR Dataset Structure and Generation\n\nThere are two main ways to generate a dataset for **SIBR**. The first is to use *colmap* (see @ref HowToColmap) to to SfM/MVS, and the second is using the commercial RealityCapture package (see @ref HowToCapreal).\n\nAfter running <code>colmap</code> **SIBR** can read the dataset natively. In this case the dataset will just contain the <code>colmap</code> directory:\n```\n\\dataset\\\n\\dataset\\colmap\\\n\\dataset\\colmap\\sparse\n\\dataset\\colmap\\dataset.db\n\\dataset\\colmap\\stereo\n\\dataset\\colmap\\stereo\\images\n\\dataset\\colmap\\stereo\\sparse\n\n```\nSIBR expects camera calibration to be in <code>colmap\\stereo\\sparse</code>, and the MVS mesh in <code>colmap\\stereo\\meshed-delaunay.ply</code>.\nNote that in this case, the images *do not have the same size*. Some IBR algorithms (e.g., ULR) can handle this, but others require that the input images all have the same size; this was historically the case for [Chaurasia 13], and **SIBR** handles this natively.\n\nSpecifically, we run the <code>colmap2sibr</code> script to generate an **SIBR** dataset.\nThe basic structure of this **SIBR** dataset is shown below, generated from colmap with texture:\n\\n\n\n```\n\\dataset\\\n\\dataset\\colmap\\\n\\dataset\\sibr_cm\\scene_metadata.txt\n\\dataset\\sibr_cm\\cameras\n\\dataset\\sibr_cm\\meshes\n\\dataset\\sibr_cm\\images\n\\dataset\\sibr_cm\\cameras\\bundle.out\n\\dataset\\sibr_cm\\cameras\\list_images.txt\n\\dataset\\sibr_cm\\images\\{img00000000.jpg,...,img000000NN.jpg}\n\\dataset\\sibr_cm\\meshes\\recon.{ply,obj}\n\\dataset\\capreal\\\n\\dataset\\capreal\\mesh.ply\n\\dataset\\capreal\\texture.png\n```\n\n\\n\n\nThe native **SIBR** directory structure in <code>sibr_cm</code> is as follows. \nThe <code>colmap</code> directory contains the colmap reconstruction, with the calibration, depthmap and mesh data.\n\nThe <code>capreal</code> directory contains the textured mesh generated by the conversion pipeline.\n\nIn the <code>sibr_cm</code> subdirectory:\n\n@li The *cameras* directory contains the calibrated cameras, using the *Bundler* format by default (\\ref subsecDataSetFormatsBundle).\n\n@li The *images* directory that contains the undistorted images from the reconstruction and the list images file (\\ref subsecDataSetFormatsListImg)\n\n@li The *meshes* directory that contains a *recon.ply* file that is the 3D reconstruction of the scene \n\\n\n\n\nTo generate a dataset after following the procedure for RealityCapture (@ref HowToCapreal), you need to perform the following steps:\n\n@li Generate and build the solution to generate executables for preprocessing applications (unless you already have the binary distribution).\n@li Go to `install\\scripts`\n@li Run the python script using \n```\npython ibr_preprocess_rc_to_sibr.py -i original_dataset_path -o original_dataset_path\\sibr_rc --bin path_to_sibr_bin \n```\n@li Specifying the binaries directory is optional. While compiling cmake automatically generates settings file which is parsed by the script to set bin directory.\n@li The script calls the distordCrop, cropFromCenter, and clipping_planes app executables; make sure they are up to date.\n    - They crop the images to remove the black borders; the --ratio parameter to distordCrop (currently 0.2 (/.5)) sets the percentage of border which can be removed. Images that have larger black borders are removed from the dataset.\n    - They also copy the meshes (ply and obj if available) and modifies the bundle.out and list_images.txt to the new values of resolution, and removes the images excluded (the numbers can be found in Dataset\\\\SibrData\\\\raw\\\\excluded_images.txt)\n    - Next they compute the clipping planes for each camera corresponding to input images and stores them in a clipping_planes.txt file.\n    - Finally, they parse all data to create a scene_metadata.txt file which holds information of the images, clipping planes etc. and is used to create the scene. This file can be manually extended.\n@li *[Recommended]* If you do not want to create a copy of the dataset, you can only specify the input directory with -i option. The dataset will be generated within the input directory itself.\n\\n\n\nThe **SIBR** dataset will have the following structure, similar to the case above, but with <code>sibr_rc</code> instead of <code>sibr_cm</code>.\n\n```\n\\dataset\\\n\\dataset\\sibr_rc\\scene_metadata.txt\n\\dataset\\sibr_rc\\cameras\n\\dataset\\sibr_rc\\meshes\n\\dataset\\sibr_rc\\images\n\\dataset\\sibr_rc\\cameras\\bundle.out\n\\dataset\\sibr_rc\\cameras\\list_images.txt\n\\dataset\\sibr_rc\\images\\{img000.jpg,...,img0NN.jpg}\n\\dataset\\sibr_rc\\meshes\\recon.ply\n\\dataset\\sibr_rc\\meshes\\recon.ply\n\\dataset\\capreal\\\n\\dataset\\capreal\\textured.obj\n\\dataset\\capreal\\textured.mtl\n\\dataset\\capreal\\textured_u1_v1.png\n```\n\\n\n \\subsection subsecInputDatasetFilesFormats Dataset Files and Formats\n\\n\n The following sections contain documentation of the various files used in the dataset. Some are inherited from other SfM/MVS solutions.\n\\subsection subsecMetadataFile The scene_metadata.txt file\n\nContains the list of images and their resolution as well as the near and far planes for each images.\n\\n\n \\subsection subsecDataSetFormatsBundle The bundle.out file\n\\n\n  Content: [the bundler documentation](http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.4-manual.html) explain all what it contain \\n\n\t Description: [the output of the bundler](http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.4-manual.html#S6) \\n\n Bundle file format is in plain text :\\n\n ~~~~~~~~~~~~~{.txt}\n # Bundle file v0.3\n <num_cameras> <num_points>   [two integers]\n <camera1>\n <camera2>\n   ...\n <cameraN>\n <point1>\n <point2>\n    ...\n <pointM>\n ~~~~~~~~~~~~~\n Where \\<camera\\> contain :\n ~~~~~~~~~~~~~{.txt}\n <f> <k1> <k2>   [the focal length, followed by two radial distortion coeffs]\n <R>             [a 3x3 matrix representing the camera rotation]\n <t>             [a 3-vector describing the camera translation]\n ~~~~~~~~~~~~~\n And where \\<point\\> contain :\n ~~~~~~~~~~~~~{.txt}\n <position>      [a 3-vector describing the 3D position of the point]\n <color>         [a 3-vector describing the RGB color of the point]\n <view list>     [a list of views the point is visible in]\n ~~~~~~~~~~~~~\n\n\n \\subsection subsecDataSetFormatsListImg The list_images.txt file\n  Content: It a list of all input images sorted by order it was taken (renamed) with their resolution \\n\n  Description: If you have [ImageMagick](http://www.imagemagick.org/script/command-line-options.php#format_identify_) you can do : `identify -format \"%f %w %h\\n\" *.jpg` \\n\n ~~~~~~~~~~~~~{.txt}\n <%8d.jpg> <width> <height>\n ~~~~~~~~~~~~~\n Example:\n ~~~~~~~~~~~~~{.txt}\n 00000000.jpg 2256 1504\n 00000001.jpg 2256 1504\n 00000002.jpg 2256 1504\n ...\n 00000026.jpg 2256 1504\n 00000027.jpg 2256 1504\n ~~~~~~~~~~~~~\n */\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/How_to_setup_your_own_project.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page howto_setup_project How to setup your own project\n\n- @subpage project_structure\n- @subpage configure_project\n- @subpage create_library\n- @subpage document_project\n\n */"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/Paths_and_cameras.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n/*!\n@page howto_cameras_paths  Cameras, Paths and Dataset Alignment\n\n@section cameras_section Cameras\n\nCalibrated cameras come from the SfM method used. We support bundler <code>.out</code> (http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.4-manual.html), Blender <code>.lookat</code>, Colmap <code>cameras.txt/images.txt</code> and to a certain extent VisualSFM <code>.nvm</code> files.\nEach format has different constraints, and they are not always compatible. Internally, we convert to an <code>sibr::InputCamera</code> data structure.\n\n\n@section paths_section Paths\n\nWe can read paths, i.e., a sequence of cameras, in any of the above formats in the interactive viewers for most renderers, typically in the main \"View\" panel, and the \"Load path\" button. The path can be played either by interpolated between the views (\"Play\" button), or just playing the exact cameras (\"Play (No Interp)\"). We also have an internal <code>.path</code> binary path format.\nYou can define key cameras in the same menu using the \"Add key\" button.\n\nPaths can be played by most renderers by running the renderer in offscreen mode:\n```\nSIBR_renderer_app.exe --offscreen --pathFile path.(out|lookat|tst|path) [--outPath optionalOutputPath --noExit]\n```\n\nBy default, the application exits when this operation is performed. Rendering the same path is the easiest way to compare different algorithms, and works for most of the *Projects* provided.\n\n\n@section align_section Aligning datasets and transforming paths\n\nWe provide the <code>alignMeshes</code> tools to align two different reconstructions of the same multi-view dataset, see also the dataset tools page (@ref sibr_projects_dataset_tools).\nIf you need to align your dataset <code>dataset2Align</code> (e.g., a colmap reconstruction) to a reference dataset <code>refDataset</code> (e.g., a RealityCapture reconstruction) you can use the alignMeshes command (in <code>install\\bin</code>).\n*Important note: both datasets must have the same (or a subset of the same) images, calibrated cameras and a fully reconstructed mesh*\n```\nalignMeshes_rwdi.exe --path2Align dataset2Align --pathRef refDataset --out outputPath\nalignMeshes.exe --path2Align dataset2Align --pathRef refDataset --out outputPath\n```\nThis will align the two datasets, and write the aligned mesh in <code>outputPath</code> as well as the file <code>transform.txt</code> that contains the transformation matrix of the <code>dataset2Align</code> to <code>refDataset</code>.\n\nPlease note that alignMeshes may not manage to completely align meshes: please lalways compare the aligned mesh with the target (e.g., using meshlab). If alignmeshes fails, an alternative is to use a manual tool such as CloudCompare or meshlab.\n\nYou can then transform a camera path defined in the first dataset to the a path in the reference dataset:\n\n```\ncameraConverter_rwdi.exe --input inputPath.(out|lookat|path|tst) --output outputPath.(out|lookat|path|tst)\ncameraConverter.exe --input inputPath.(out|lookat|path|tst) --output outputPath.(out|lookat|path|tst)\n```\n\n */\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/docs/pages/Tutorials/Useful_sibr_elements.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page howto_sibr_useful_objects Useful systems in SIBR\n\n@section multiviewmanager Using the windowing system\n\nSIBR provides tools to display multiple rendering algorithms in different subviews that can be resized and hidden on screen. This is handled by the `MultiViewManager`. once instantiated and tied to a system window, the multi view manager can keep track of multiple views, ensuring that their content is updated and that they receive the correct user inputs. Views can be hidden, resized, their content captured as a screenshot.\n\nTwo modes can be used, mainly for legacy reasons:\n\n- IBR subviews, that have to implement onRenderIBR() (which was used to support anaglyph rendering previously)\n- basic subviews, that have to implement onRender()\n\nIt is possible to associate an interactive user camera to a view, so that the user can move around in the displayed content. Two views can use the same handler, for synchronized motion.\n\nBasic example:\n\n@code\nWindow window(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs);\nMultiViewManager manager(window, false);\n\n// Register a first view, with an interactive user camera\nMyView::Ptr\tmyView(new MyView());\nInteractiveCameraHandler::Ptr userCam(new InteractiveCameraHandler());\nmanager.addIBRSubView(\"My view\", myView);\nmanager.addCameraForView(\"My view\", userCam);\n\n// Register another view, which already handles the user motions by itself\nDebugView::Ptr dbgView(new DebugView());\nmanager.addSubView(\"Debug view\", dbgView, usedResolution);\n\nwhile (window.isOpened()) {\n\n\tInput::poll();\n\twindow.makeContextCurrent();\n\tif (Input::global().key().isPressed(Key::Escape)) {\n\t\twindow.close();\n\t}\n\n\tmanager.onUpdate(Input::global());\n\tmanager.onRender(window);\n\n\twindow.swapBuffer();\n}\n@endcode\n\n@image html multiviewmanager.png\n\n@section interactiveHandler Interactive user camera\n\nUser interaction in a view are handled by an `InteractiveCameraHandler`, that supports many interaction modes such as a FPS camera or a trackball. \nIt can also snaps to predefined viewpoints or interpolate between them. You can adjust the field of view and frustum planes.    \nYou can toggle between modes in the GUI or by pressing Y.\n\n- FPS : move around with WASD, down/up with Q/E, rotate with IJKL and roll with U/O.\n- Trackball : rotate around a central point with the left click in the center of the view, roll with left click towards the view edges. Pan with righ click in the center region, move forward/backward with right click towards the view edges, or by scrolling. Ctrl+left click redefines the center of the trackball, this is very useful to focus on a specific region of the scene and zoom in. \n- Orbit: rotate around using the numeric keypad.\n\n@subsection recordPaths Recording and replaying camera paths\n\nThe handler can also records and playback paths. Once the `Record` button is pressed, all user camera motions are recorded. When pressing `Save path`, they will be saved to a file on disk. Types such as `.lookat`, `.path` and `.bundle` are supported, which is useful for comparison with other frameworks. A `.path` can be reloaded using the `Load path` button, and will start playing automatically.\n\n@subsection recordVideos Generating videos\n\nIt is possible to record videos and dump images following a path in a view. In the camera handler GUI, you can check if you want to record videos or frames. If checked, the next start a path starts playing, each frame will be recorded and saved on disk.\n\n- for video recording, check the corresponding box, start playing the path. At the end, in the view manager, select \"Capture > Export video\" and select the output destination (supported export format: h264 with `.mp4` extension).\n- for frames recording, hen checking the box you will have to select an output directory. once the path starts to play, frames are going to be saved in the directory.\n\n@section debugview Visualizing debug geometry\n\nIt can be useful to visualize information such as the scene geometry, location of the cameras, rays, voxel-like structures in a view with an interactive camera. SIBR provides the `MultiMeshManager` for this prupose. It can be used to display multiple meshes, vertices, lines,... At runtime, a list of all elements is displayed and many attributes can be toggled. The same attributes can be edited from the code using chaining. Everything can be updated on the fly based on the objects names. \nFor instance:\n\n@code\ndebugView.addMeshAsLines(\"BBox\", bbox).setColor({1.0f, 0.0f, 1.0f}).setDepthTest(false).setColormode(USER_DEFINED);\n// Later in the code\ndebugView.addMeshAsLines(\"BBox\", anotherBbox); // will replace the previous mesh\n// Later again\ndebugView.getMeshData(\"BBox\").setAlpha(0.5f); // dim the box\n@endcode\n\nBecause the MultiMeshManager conforms to the ViewBase interface, it can be added to the view manager as any other view. It comes with its own interactive camera.\n\n@note The `SceneDebugView` that can be used to visualize an IBR dataset including the geometry, cameras and images, is built on top of `MultiMeshManager`, with extra code generating geometry for the frusta and the image quads.\n\n@image html multimeshmanager.png\n\n@section commandlineargs Command line arguments\n\nTo simplify the definition and parsing of arguments, SIBR provide tools to easily define and populate arguments. The system is based on `Arg<T>` and `RequiredArg<T>`, that can be used to define arguments anywhere. It is recommended to group them in a structure, especially as some existing structures can be reused to define command arguments (windowing options, dataset path, etc., see for instance `WindowAppArgs` or `BasicDatasetArgs`). \n\nBefore anything, you have to make sure the raw input arguments have been parsed by calling `CommandLineArgs::parseMainArgs(argc, argv);` in your main. Any argument instantiated afterwards will then be able to fetch its user-provided value (if it exists). Default values and help messages can be provided when declaring arguments. Required arguments will raise an error when used if the user did not provide a value.\n\nArguments will convert to their contained type when using them, it is also possible to access their value using `get()`. Arguments values can also be set directly in the code.\n\n@code\nstruct MyArgs : virtual WindowAppArgs, BasicDatasetArgs {\n\tRequiredArg<int> iterations = {\"itcount\", 5, \"Number of smoothing iterations\"};\n\tArg<std::string> logPath = {\"log\", \"\", \"Path to log file\"};\n\tArg<bool> showResult = {\"show\", \"Display results in a popup window\"};\n}\n\nint main(int argc, char** argv){\n\tCommandLineArgs::parseMainArgs(argc, argv);\n\tMyArgs args;\n\tconst std::string logFile = args.logPath.get() + \"_test.log\";\n\tThing(args.iterations, logFile);\n\tif(args.showResult){\n\t\t//...\n\t}\n}\n@endcode\n\n\n@section uniformsystem The uniform system\n\nWhen using OpenGL shaders, values are often passed from the CPU using uniforms. In the past, SIBR required the developer to maintain both a GLParameter object and the corresponding variable on the CPU to store the value and expose it. It is now recommended to use GLUniform<T>, that wraps a CPU value while allowing you to update the GPU uniform easily. The GLUniform will automatically converts to its contained type in most cases ; if a reference to the CPU value is needed, you can use get().\n\n@code\n// In the header, as members of a renderer for instance\nGLShader _shader;\nGLuniform<float> _val = 0.5;\n\n// At construction\n_shader.init(\"My Shader\", \"vertex shader content\", \"fragment shader content\");\n_val.init(_shader, \"alpha\"); // link the uniform to the shader, specify the name in the shader code\n\n// At some point in the code\n_val += 0.3f; // Mofidy the CPU value\n\n// In the render loop\n_shader.begin();\n_val.send(); // Send to the GPU\n...\n@endcode\n\n\n */"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n################################################################################\n# This CMakeLists.txt manages which projects should be built and add their     #\n# dependencies.                                                                #\n################################################################################\nset(SIBR_FOLDER \"core\")\nset_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER \"\")\n\noption(BUILD_SIBR \"Build core libs of SIBR (sibr_system, sibr_graphics, sibr_view, sibr_assets, ...)\" ON)\n\n#https://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all-subdirectories-of-a-directory\nMACRO(SUBDIRLIST result curdir)\n  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)\n  SET(dirlist \"\")\n  foreach(child ${children})\n    IF(IS_DIRECTORY ${curdir}/${child})\n      LIST(APPEND dirlist ${child})\n    ENDIF()\n  endforeach()\n  SET(${result} ${dirlist})\nENDMACRO()\n\nset(SIBR_PROJECTS_FOLDER           \"${CMAKE_CURRENT_SOURCE_DIR}/projects\")\nSUBDIRLIST(SUBDIRS ${SIBR_PROJECTS_FOLDER})\n\nlist(APPEND PROJECT_SUBFOLDERS \"apps\" \"preprocess\" \"renderer\" \"scripts\" \"library\")\n\n# Moving ulr to the top of the list\nlist(PREPEND SUBDIRS \"dataset_tools\" \"ulr\" \"basic\")\nlist(REMOVE_DUPLICATES SUBDIRS)\n\n## DEPS ##\ninclude(include_once)\n\nmessage(STATUS \"\\n\\n****************** Handling core dependencies ******************\")\n\ninclude_once(dependencies)\t\t## Map/bind 3rdParty/external dependencies packages to cmake\n\nmessage(STATUS \"****************************************************************\\n\\n\")\n\nforeach(subdir ${SUBDIRS})\n  set(${subdir}_ROOT_DIR \"${SIBR_PROJECTS_FOLDER}/${subdir}\")\n  set(PROJECT_NAME \"BUILD_IBR_${subdir}\")\n  string(TOUPPER ${PROJECT_NAME} PROJECT_NAME)\n  if(${${PROJECT_NAME}})\n    foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS})\n      if(EXISTS \"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/Modules\")\n        list(APPEND CMAKE_MODULE_PATH ${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/Modules)\n      endif()\n\n      if(EXISTS \"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/dependencies.cmake\")\n        message(STATUS \"********* Handling ${subdir} ${PROJECT_SUBFOLDER} dependencies *********\")\n        include_once(\"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/dependencies.cmake\")\n\n        message(STATUS \"****************************************************************\\n\\n\")\n      endif()\n    endforeach()\n  endif()\nendforeach()\n\nWin3rdPartyGlobalCacheAction()\n\ninclude_directories(.)\n\nif (BUILD_SIBR)\n  add_subdirectory(core/system)\n  add_subdirectory(core/graphics)\n  add_subdirectory(core/renderer)\n  add_subdirectory(core/raycaster)\n  add_subdirectory(core/view)\n  add_subdirectory(core/scene)\n  add_subdirectory(core/assets)\n  add_subdirectory(core/imgproc)\n  add_subdirectory(core/video)\nendif()\n\nset(PROJECTS_ON_AT_FIRST_BUILD \"basic\" \"gaussianviewer\" \"remote\")\n\nforeach(subdir ${SUBDIRS})\n  message(STATUS \"Adding ${subdir} project\")\n  set(PROJECT_NAME \"BUILD_IBR_${subdir}\")\n  string(TOUPPER ${PROJECT_NAME} PROJECT_NAME)\n\n  if(NOT (DEFINED ${PROJECT_NAME}))\n    foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS})\n      if(EXISTS \"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/CMakeLists.txt\")\n        if(subdir IN_LIST PROJECTS_ON_AT_FIRST_BUILD)\n          option(${PROJECT_NAME} \"Build project \\\"${subdir}\\\"\" ON)\n        else()\n          option(${PROJECT_NAME} \"Build project \\\"${subdir}\\\"\" OFF)\n        endif()\n        break()\n      endif()\n    endforeach()\n  endif()\n\n  message(STATUS \"${PROJECT_NAME} is ${${PROJECT_NAME}}\")\n\n  if(${${PROJECT_NAME}})\n    if(EXISTS \"${${subdir}_ROOT_DIR}/CMakeLists.txt\")\n      add_subdirectory(\"${${subdir}_ROOT_DIR}\")\n    else()\n      foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS})\n        if(EXISTS \"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/CMakeLists.txt\")\n          add_subdirectory(\"${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}\")\n        endif()\n      endforeach()\n    endif()\n\n    if(EXISTS \"${${subdir}_ROOT_DIR}/documentation/\" AND BUILD_DOCUMENTATION)\n      unset(PROJECT_PAGE)\n      unset(PROJECT_LINK)\n      unset(PROJECT_DESCRIPTION)\n      unset(PROJECT_TYPE)\n      include(\"${${subdir}_ROOT_DIR}/documentation/${subdir}_doc.cmake\" OPTIONAL)\n\n      if(NOT DEFINED PROJECT_PAGE)\n        set(PROJECT_PAGE \"${subdir}Page\")\n      endif()\n\n      if(NOT DEFINED PROJECT_TYPE)\n        set(PROJECT_TYPE \"OTHERS\")\n      endif()\n\n      set(PROJECT_SUBPAGE_REF \"  - @subpage ${PROJECT_PAGE}\")\n      set(PROJECT_REF_REF \"  - @ref ${PROJECT_PAGE}\")\n\n      if(DEFINED PROJECT_LINK)\n        string(APPEND PROJECT_SUBPAGE_REF \" (${PROJECT_LINK})\")\n        string(APPEND PROJECT_REF_REF \" (${PROJECT_LINK})\")\n      endif()\n\n      if(DEFINED PROJECT_DESCRIPTION)\n        string(APPEND PROJECT_SUBPAGE_REF \": ${PROJECT_DESCRIPTION}\")\n        string(APPEND PROJECT_REF_REF \" (${PROJECT_DESCRIPTION})\")\n      endif()\n\n      string(APPEND SIBR_PROJECTS_${PROJECT_TYPE}_SUBPAGE_REF_LOCAL \"${PROJECT_SUBPAGE_REF}\\n\")\n      string(APPEND SIBR_PROJECTS_${PROJECT_TYPE}_REF_REF_LOCAL \"${PROJECT_REF_REF}\\n\")\n\n      if(EXISTS \"${${subdir}_ROOT_DIR}/documentation/img\")\n        set(DOXY_APP_SPECIFIC_IMG_PATH_LOCAL \"${DOXY_APP_SPECIFIC_IMG_PATH_LOCAL} ${${subdir}_ROOT_DIR}/documentation/img\")\n      endif()\n\n      if(EXISTS \"${${subdir}_ROOT_DIR}/LICENSE.md\")\n        set(DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL \"${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL} ${${subdir}_ROOT_DIR}/LICENSE.md\")\n      endif()\n    endif()\n  else()\n    set(DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL \"${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL} ${${subdir}_ROOT_DIR}\")\n  endif()\nendforeach()\n  \nset(SIBR_PROJECTS_SAMPLES_SUBPAGE_REF \"${SIBR_PROJECTS_SAMPLES_SUBPAGE_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_OURS_SUBPAGE_REF \"${SIBR_PROJECTS_OURS_SUBPAGE_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF \"${SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_OTHERS_SUBPAGE_REF \"${SIBR_PROJECTS_OTHERS_SUBPAGE_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_SAMPLES_REF_REF \"${SIBR_PROJECTS_SAMPLES_REF_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_OURS_REF_REF \"${SIBR_PROJECTS_OURS_REF_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_TOOLBOX_REF_REF \"${SIBR_PROJECTS_TOOLBOX_REF_REF_LOCAL}\" PARENT_SCOPE)\nset(SIBR_PROJECTS_OTHERS_REF_REF \"${SIBR_PROJECTS_OTHERS_REF_REF_LOCAL}\" PARENT_SCOPE)\nset(DOXY_APP_SPECIFIC_IMG_PATH \"${DOXY_APP_SPECIFIC_IMG_PATH_LOCAL}\" PARENT_SCOPE)\nset(DOXY_DOC_EXCLUDE_PATTERNS_DIRS \"${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL}\" PARENT_SCOPE)\n\nif (BUILD_IBR_TFGL_INTEROP)\n  add_subdirectory(projects/tfgl_interop/renderer/custom_ops)\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nproject(sibr_graphics)\r\n\r\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\r\nsource_group(\"Source Files\" FILES ${SOURCES})\r\n\r\nfile(GLOB RESOURCES \"resources/*.ini\")\r\nsource_group(\"Resources Files\" FILES ${RESOURCES})\r\n\r\n## Specify target rules\r\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\r\n\r\ninclude_directories(\r\n\t${Boost_INCLUDE_DIRS}\r\n\t${imgui_INCLUDE_DIRS}\r\n)\r\nif(WIN32)\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\t${ASSIMP_LIBRARIES}\r\n\t${GLEW_LIBRARIES}\r\n\t${OPENGL_LIBRARIES}\r\n\t${OpenCV_LIBRARIES}\r\n\tOpenMP::OpenMP_CXX\r\n\timgui\r\n\tglfw3\r\n\tsibr_system\r\n)\r\nelse()\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\t${ASSIMP_LIBRARIES}\r\n\t${GLEW_LIBRARIES}\r\n\t${OPENGL_LIBRARIES}\r\n\t${OpenCV_LIBRARIES}\r\n\tOpenMP::OpenMP_CXX\r\n\timgui\r\n\t${GLFW_LIBRARY}\r\n\tsibr_system\r\n)\r\nendif()\r\n\r\nif (NOT WIN32)\r\n\ttarget_link_libraries(${PROJECT_NAME}\r\n \t\t#GLEW\r\n \t\trt m dl X11 pthread Xrandr Xinerama Xxf86vm Xcursor\r\n\t\t# X11 Xi Xrandr Xxf86vm Xinerama Xcursor dl rt m pthread\r\n\t)\r\nendif()\r\n\r\nadd_definitions(-DSIBR_GRAPHICS_EXPORTS -DIMGUI_EXPORTS -DBOOST_ALL_DYN_LINK)\r\n\r\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\r\n\r\n\r\n## High level macro to install in an homogen way all our ibr targets\r\ninclude(install_runtime)\r\nibr_install_target(${PROJECT_NAME}\r\n\tINSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\r\n\tRESOURCES  ${RESOURCES}\r\n\tRSC_FOLDER \"core\"\r\n)\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Camera.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"core/graphics/Camera.hpp\"\n\nnamespace sibr\n{\n\t\n\tByteStream&\t\toperator << (ByteStream& stream, const Camera& c )\n\t{\n\t\tCamera::Transform3f t = c.transform();\n\t\tfloat fovy = c.fovy();\n\t\tfloat aspect = c.aspect();\n\t\tfloat znear = c.znear();\n\t\tfloat zfar = c.zfar();\n\t\treturn stream\n\t\t\t<< t << fovy << aspect << znear << zfar;\n\t}\n\n\tByteStream&\t\toperator >> (ByteStream& stream, Camera& c )\n\t{\n\t\tCamera::Transform3f t;\n\t\tfloat fovy = 0.f;\n\t\tfloat aspect = 0.f;\n\t\tfloat znear = 0.f;\n\t\tfloat zfar = 0.f;\n\t\tstream\n\t\t\t>> t >> fovy >> aspect >> znear >> zfar;\n\t\tc.transform(t);\n\t\tc.fovy(fovy);\n\t\tc.aspect(aspect);\n\t\tc.znear(znear);\n\t\tc.zfar(zfar);\n\t\treturn stream;\n\t}\n\n\tvoid\tCamera::perspective( float fovRad, float ratio, float znear, float zfar )\n\t{\n\t\t_fov = fovRad;\n\t\t_aspect = ratio;\n\t\t_znear = znear;\n\t\t_zfar = zfar;\n\t\t_dirtyViewProj = true;\n\t}\n\t\n\tVector3f\t\t\tCamera::project( const Vector3f& p3d ) const\n\t{\n\t\tVector4f p4d;\n\t\tp4d[0] = p3d[0]; p4d[1] = p3d[1]; p4d[2] = p3d[2]; p4d[3] = 1.0;\n\t\tVector4f p3d_t = viewproj() * p4d;\n\t\tp3d_t = p3d_t / p3d_t[3];\n\t\t//p3d_t[2] = p3d_t[2]*0.5f + 0.5f; // [-1;1] to [0;1] // not used\n\t\treturn Vector3f(p3d_t[0], p3d_t[1], p3d_t[2]); // so return [-1;1]\n\t\t\n\t\t//p3d_t[2] = p3d_t[2]*0.5f + 0.5f; // [-1;1] to [0;1] // not used\n\t\t//return Vector3f(p3d_t[0], p3d_t[1], p3d_t[2]); // so return [-1;1]\n\t}\n\n\tVector3f\t\t\tCamera::unproject( const Vector3f& p3d ) const\n\t{\n\t\tVector4f p4d;\n\t\tp4d[0] = p3d[0]; p4d[1] = p3d[1]; p4d[2] = p3d[2]; p4d[3] = 1.0;\n\t\t//p4d[2] = p4d[2]*2.f - 1.f; // [0;1] to [-1;1]  // not used\n\t\tVector4f p3d_t = invViewproj() * p4d;//;viewproj().inverse() * p4d;\n\t\treturn Vector3f(p3d_t[0],p3d_t[1],p3d_t[2])/p3d_t[3];\n\t}\n\n\tbool\t\tCamera::frustumTest(const Vector3f& position3d, const Vector2f& pixel2d) const\n\t{\n\t\treturn (pixel2d.cwiseAbs().array() < (1.0f-1e-5f) ).all() && (dir().dot(position3d - position()) > 0);\n\t}\n\n\tbool\t\tCamera::frustumTest(const Vector3f& position3d) const\n\t{\n\t\treturn frustumTest(position3d, project(position3d).xy());\n\t}\n\n\tvoid\t\tCamera::forceUpdateViewProj( void ) const\n\t{\n\t\t_matViewProj = sibr::Matrix4f(proj()*view());\n\t\t//_matViewProj = proj()*view();\n\t\t_invMatViewProj = _matViewProj.inverse();\n\t\t_dirtyViewProj = false;\n\t}\n\n\tVector3f\t\t\tCamera::dir( void ) const\n\t{ \n\t\treturn quatRotateVec(rotation(), Vector3f( 0.f, 0.f,-1.f));\n\t}\n\n\tVector3f\t\t\tCamera::up( void ) const\t\n\t{ \n\t\treturn quatRotateVec(rotation(), Vector3f( 0.f, 1.f, 0.f));\n\t}\n\n\tVector3f\t\t\tCamera::right( void ) const\t\n\t{ \n\t\treturn quatRotateVec(rotation(), Vector3f( 1.f, 0.f, 0.f));\n\t}\n\n\tMatrix4f\tCamera::proj( void ) const\n\t{\n\t\t//std::cout << \"FOV: \" << _fov << \"Aspect\" << _aspect << \"ZNEAR\" << _znear << \"ZFAR\" << _zfar << std::endl << std::flush;\n\t\tif (ortho())\n\t\t\treturn sibr::orthographic(_right, _top, _znear, _zfar);\n\t\telse\n\t\t\treturn sibr::perspective(_fov, _aspect, _znear, _zfar, _p);\n\t}\n\n\t/*static*/ Camera\tCamera::interpolate( const Camera& from, const Camera& to, float dist01 )\n\t{\n\t\tdist01 = std::max(0.f, std::min(1.f, dist01));\n\t\tTransform3f t = Transform3f::interpolate(from._transform, to._transform, dist01);\n\t\tCamera out = from;\n\t\tout._transform = t;\n\t\tout.fovy(dist01*from.fovy() + (1.0f-dist01)*to.fovy());\n\t\tout.aspect(dist01*from.aspect() + (1.0f-dist01)*to.aspect());\n\t\tout.zfar(dist01*from.zfar() + (1.0f-dist01)*to.zfar());\n\t\tout.znear(dist01*from.znear() + (1.0f-dist01)*to.znear());\n\t\tif (from.ortho()) {\n\t\t\tout.orthoRight(dist01*from.orthoRight() + (1.0f-dist01)*to.orthoRight());\n\t\t\tout.orthoTop(dist01*from.orthoTop() + (1.0f-dist01)*to.orthoTop());\n\t\t}\n\t\treturn out;\n\t}\n\n\tvoid Camera::setStereoCam(bool isLeft, float focal, float iod) \n\t{\n\t\t_matViewProj = sibr::perspectiveStereo(_fov, _aspect, _znear, _zfar, focal, iod, isLeft)*view();\n\t\t_invMatViewProj = _matViewProj.inverse();\n\t}\n\n\tvoid Camera::setOrthoCam(float right, float top)\n\t{\n\t\t_matViewProj = sibr::orthographic(right,top,_znear,_zfar)*view();\n\t\t_invMatViewProj = _matViewProj.inverse();\n\t\t_dirtyViewProj = false;\n\t\t_isOrtho = true;\n\t\t_right = right;\n\t\t_top = top;\n\t}\n\t\n\tvoid \t\t\t\t\tCamera::transform( const Transform3f& t )\n\t{\n\t\t_transform = t;\n\t\t_dirtyViewProj = true;\n\t}\n\n} // namespace sibr"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Camera.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Transform3.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\t/** Represent a basic camera.\r\n\t\\note In practice, InputCamera is used most of the time\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tclass SIBR_GRAPHICS_EXPORT Camera\r\n\t{\r\n\tpublic:\r\n\t\tSIBR_CLASS_PTR(Camera);\r\n\t\ttypedef Transform3<float>\t\tTransform3f;\r\n\r\n\tpublic:\r\n\r\n\t\t/// Default constructor.\r\n\t\tCamera( void ):\r\n\t\t\t_matViewProj(Matrix4f::Identity()), _invMatViewProj(Matrix4f::Identity()),\r\n\t\t\t_dirtyViewProj(true), _savePath(\"\"), _debugVideoFrames(false),\r\n\t\t\t_fov(70.f/180.0f*float(M_PI)), _aspect(1.f), _znear(0.01f), _zfar(1000.f), _right(1.0f), _top(1.0f), _isOrtho(false), _p(0.5f, 0.5f) { }\r\n\r\n\t\t/** Set the camera pose.\r\n\t\t\\param translation the camera translation\r\n\t\t\\param rotation the camera rotation\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\tset( const Vector3f& translation, const Quaternionf& rotation );\r\n\r\n\t\t/** Set the camera pose based on two points and a up vector.\r\n\t\t\\param eye the camera position\r\n\t\t\\param center the camera target point\r\n\t\t\\param up the camera up vector\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\tsetLookAt( const Vector3f& eye, const Vector3f& center, const Vector3f& up );\r\n\r\n\t\t/** Translate the camera.\r\n\t\t\\param v the translation\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\ttranslate( const Vector3f& v );\r\n\r\n\t\t/** Translate the camera with respect to a reference frame.\r\n\t\t\\param v the translation\r\n\t\t\\param ref the reference frame\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\ttranslate( const Vector3f& v, const Transform3f& ref );\r\n\r\n\t\t/** Set the camera position.\r\n\t\t\\param v the new position\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\tposition( const Vector3f& v );\r\n\r\n\t\t/** \\return the camer position. */\r\n\t\tconst Vector3f&\t\t\tposition( void ) const;\r\n\r\n\t\t/** Rotate the camera.\r\n\t\t\\param rotation the quaternion rotation to apply\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\trotate( const Quaternionf& rotation );\r\n\r\n\t\t/** Rotate the camera.\r\n\t\t\\param v the euler angles to apply\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\trotate( const Vector3f& v );\r\n\t\t\r\n\t\t/** Rotate the camera with respect to a reference frame.\r\n\t\t\\param v the rotation euler angles\r\n\t\t\\param ref the reference frame\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\trotate( const Vector3f& v, const Transform3f& ref );\r\n\r\n\t\t/** Set the camera rotation.\r\n\t\t\\param v the new rotation euler angles\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\trotation( const Vector3f& v );\r\n\r\n\t\t/** Set the camera rotation.\r\n\t\t\\param q the new rotation\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\trotation( const Quaternionf& q );\r\n\t\t\r\n\t\t/** \\return the camera rotation. */\r\n\t\tconst Quaternionf&\t\trotation( void ) const;\r\n\r\n\t\t/** Set the camera transform.\r\n\t\t\\param t the new transform\r\n\t\t*/\r\n\t\tvoid \t\t\t\t\ttransform( const Transform3f& t );\r\n\t\t\r\n\t\t/** \\return the camera transform. */\r\n\t\tconst Transform3f&\t\ttransform( void ) const;\r\n\r\n\t\t/////////////////////////////////////////////////////////////////\r\n\t\t///// ==================== Projection  ==================== /////\r\n\t\t/////////////////////////////////////////////////////////////////\r\n\r\n\t\t/** Set the vertical field of view (in radians).\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\tfovy( float value );\r\n\r\n\t\t/** \\return the vertical field of view (in radians). */\r\n\t\tfloat\t\t\t\tfovy( void ) const;\r\n\r\n\t\t/** Set the aspect ratio.\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\taspect( float value );\r\n\r\n\t\t/** \\return the aspect ratio. */\r\n\t\tfloat\t\t\t\taspect( void ) const;\r\n\r\n\t\t/** Set the near plane.\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\tznear( float value );\r\n\r\n\t\t/** \\return the near plane distance */\r\n\t\tfloat\t\t\t\tznear( void ) const;\r\n\r\n\t\t/** Set the far plane.\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\tzfar( float value );\r\n\r\n\t\t/** \\return the far plane distance */\r\n\t\tfloat\t\t\t\tzfar( void ) const;\r\n\r\n\t\t/** Set the right frustum extent.\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\torthoRight( float value );\r\n\r\n\t\t/** \\return the right frustum distance */\r\n\t\tfloat\t\t\t\torthoRight( void ) const;\r\n\r\n\t\t/** Set the top frustum extent.\r\n\t\t\\param value the new value\r\n\t\t*/\r\n\t\tvoid\t\t\t\torthoTop( float value );\r\n\r\n\t\t/** \\return the top frustum distance */\r\n\t\tfloat\t\t\t\torthoTop( void ) const;\r\n\r\n\t\t/** \\return true if the camera is orthographic. */\r\n\t\tbool\t\t\t\tortho(void) const;\r\n\r\n\t\t/** \\return the camera direction vector. */\r\n\t\tVector3f\t\t\tdir( void ) const;\r\n\r\n\t\t/** \\return the camera up vector. */\r\n\t\tVector3f\t\t\tup( void ) const;\r\n\r\n\t\t/** \\return the camera right vector. */\r\n\t\tVector3f\t\t\tright( void ) const;\r\n\r\n\t\t/** Project 3D point using perspective projection.\r\n\t\t* \\param point3d 3D point\r\n\t\t* \\return pixel coordinates in [-1,1] and depth in [-1,1]\r\n\t\t*/\r\n\t\tVector3f\t\t\tproject( const Vector3f& point3d ) const;\r\n\r\n\t\t/** Back-project pixel coordinates and depth.\r\n\t\t* \\param pixel2d pixel coordinates p[0],p[1] in [-1,1] and depth p[2] in [-1,1]\r\n\t\t* \\return 3D point\r\n\t\t*/\r\n\t\tVector3f\t\t\tunproject( const Vector3f& pixel2d ) const;\r\n\r\n\t\t/** Update the projection parameters of the camera.\r\n\t\t\\param fovRad the vertical field ov view in radians\r\n\t\t\\param ratio the aspect ratio\r\n\t\t\\param znear the near plane distance\r\n\t\t\\param zfar the far plane distance\r\n\t\t*/\r\n\t\tvoid\t\t\t\tperspective( float fovRad, float ratio, float znear, float zfar );\r\n\r\n\t\t/** Check if a point falls inside the camera frustum.\r\n\t\t\\param position3d the point location in 3D\r\n\t\t\\return true if the point falls inside\r\n\t\t*/\r\n\t\tbool\t\t\t\tfrustumTest(const Vector3f& position3d) const;\r\n\t\t\r\n\t\t/** Check if a point falls inside the camera frustum. Use this version if you already have the projected point.\r\n\t\t\\param position3d the point location in 3D\r\n\t\t\\param pixel2d the projection location of the point in image space ([-1,1])\r\n\t\t\\return true if the point falls inside\r\n\t\t*/\r\n\t\tbool\t\t\t\tfrustumTest(const Vector3f& position3d, const Vector2f& pixel2d) const;\r\n\r\n\t\t/** \\return the camera model matrix (for camera stub rendering for instance). */\r\n\t\tMatrix4f\t\t\tmodel( void ) const { return _transform.matrix(); }\r\n\r\n\t\t/** \\return the camera view matrix. */\r\n\t\tMatrix4f\t\t\tview( void ) const { return _transform.invMatrix(); }\r\n\r\n\t\t/** \\return the camera projection matrix. */\r\n\t\tvirtual Matrix4f\tproj( void ) const;\r\n\r\n\t\t/** \\return the camera view-proj matrix (cached). */\r\n\t\tconst Matrix4f&\t\tviewproj( void ) const;\r\n\r\n\t\t/** \\return the camera inverse view-proj matrix (cached). */\r\n\t\tconst Matrix4f&\t\tinvViewproj( void ) const;\r\n\r\n\t\t/** Set the camera principal point. \r\n\t\t\\param p the principal point, expressed in [0,1] \r\n\t\t*/\r\n\t\tvoid principalPoint(const sibr::Vector2f & p);\r\n\r\n\t\t/** Interpolate between two cameras.\r\n\t\t\\param from start camera\r\n\t\t\\param to end camera\r\n\t\t\\param dist01 the interpolation factor\r\n\t\t\\return a camera with interpolated parameters\r\n\t\t*/\r\n\t\tstatic Camera\t\tinterpolate( const Camera& from, const Camera& to, float dist01 );\r\n\r\n\t\t/** Set stereo camera projection parameters.\r\n\t\t\\param isLeft is the camera for the left eye (else right)\r\n\t\t\\param focal the focal distance\r\n\t\t\\param iod the inter ocular distance\r\n\t\t*/\r\n\t\tvoid \t\t\t\tsetStereoCam(bool isLeft, float focal, float iod);\r\n\r\n\t\t/** Set orthographic camera projection parameters.\r\n\t\t\\param right the right frustum extent\r\n\t\t\\param top the top frustum extent\r\n\t\t*/\r\n\t\tvoid\t\t\t\tsetOrthoCam(float right, float top);\r\n\r\n\t\t/** \\return true if the rendering generated with the camera be saved. */\r\n\t\tbool\t\t\t\tneedSave() const { return _savePath!=\"\"; }\r\n\r\n\t\t/**\\return true if the rendering generated with the camera be saved as a frame. */\r\n\t\tbool\t\t\t\tneedVideoSave() const { return _debugVideoFrames; }\r\n\r\n\t\t/** \\return the save destination path for renderings */\r\n\t\tstd::string\t\t\tsavePath() const { return _savePath; }\r\n\r\n\t\t/** Set the save destination path for renderings.\r\n\t\t\\param savePath the new path\r\n\t\t*/\r\n\t\tvoid\t\t\t\tsetSavePath(std::string savePath) { _savePath = savePath; }\r\n\r\n\t\t/** Toggle video saving.\r\n\t\t\\todo Cleanup naming.\r\n\t\t\\param debug if true, saving frames\r\n\t\t*/\r\n\t\tvoid\t\t\t\tsetDebugVideo(const bool debug) { _debugVideoFrames = debug; }\r\n\t\t\r\n\tprotected:\r\n\r\n\t\t/** Trigger a viewproj matrix udpate. */\r\n\t\tvoid\t\t\t\tforceUpdateViewProj( void ) const;\r\n\r\n\t\tstd::string\t\t\t\t_savePath; ///< Save destination path when reocrding images.\r\n\t\tbool\t\t\t\t\t_debugVideoFrames; ///< Is video saving enabled or not. \\todo Cleanup.\r\n\t\tmutable Matrix4f\t\t_matViewProj; ///< View projection matrix.\r\n\t\tmutable Matrix4f\t\t_invMatViewProj; ///< Inverse projection matrix.\r\n\t\tmutable bool\t\t\t_dirtyViewProj; ///< Does the camera matrix need an update.\r\n\r\n\t\tTransform3f\t\t_transform; ///< The camera pose.\r\n\t\tfloat\t\t\t_fov; ///< The vertical field of view (radians)\r\n\t\tfloat\t\t\t_aspect; ///< Aspect ratio.\r\n\t\tfloat\t\t\t_znear; ///< Near plane.\r\n\t\tfloat\t\t\t_zfar; ///< Far plane.\r\n\t\tfloat\t\t\t_right; ///< Frustum half width.\r\n\t\tfloat\t\t\t_top; ///< Frustum half height.\r\n\t\tsibr::Vector2f   _p = {0.5f, 0.5}; ///< Principal point.\r\n\t\tbool\t\t\t_isOrtho; ///< Is the camera orthographic.\r\n\t};\r\n\r\n\t/** Write a camera to a byte stream.\r\n\t\\param stream the stream to write to\r\n\t\\param c the camera\r\n\t\\return the stream (for chaining).\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT ByteStream&\t\toperator << (ByteStream& stream, const Camera& c );\r\n\r\n\t/** Read a camera from a byte stream.\r\n\t\\param stream the stream to read from\r\n\t\\param c the camera\r\n\t\\return the stream (for chaining).\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT ByteStream&\t\toperator >> (ByteStream& stream, Camera& c );\r\n\r\n\t///// DEFINITIONS /////\r\n\r\n\t/////////////////////////////////////////////////////////////////\r\n\tinline const Transform3f&\t\tCamera::transform( void ) const {\r\n\t\treturn _transform;\r\n\t}\r\n\r\n\tinline void\t\t\t\tCamera::set( const Vector3f& translation, const Quaternionf& rotation ) {\r\n\t\t_dirtyViewProj = true; _transform.set(translation, rotation);\r\n\t}\r\n\r\n\tinline void\t\t\t\tCamera::setLookAt( const Vector3f& eye, const Vector3f& at, const Vector3f& up ) {\r\n\t\tconst Vector3f zAxis( (eye - at).normalized() );\r\n\t\tconst Vector3f xAxis( (up.normalized().cross(zAxis)).normalized() );\r\n\t\tconst Vector3f yAxis( zAxis.cross(xAxis).normalized() );\r\n\r\n\t\tEigen::Matrix3f rotation;\r\n\t\trotation << xAxis, yAxis, zAxis;\r\n\t\tQuaternionf q(rotation);\r\n\r\n\t\t_transform.set(eye,q);\r\n\t\tforceUpdateViewProj();\r\n\t}\r\n\r\n\tinline void\t\t\t\tCamera::translate( const Vector3f& v ) {\r\n\t\t_dirtyViewProj = true; _transform.translate(v);\r\n\t}\r\n\tinline void\t\t\t\tCamera::translate( const Vector3f& v, const Transform3f& ref ) {\r\n\t\t_dirtyViewProj = true; _transform.translate(v, ref);\r\n\t}\r\n\tinline void\t\t\t\tCamera::position( const Vector3f& v ) {\r\n\t\t_dirtyViewProj = true; _transform.position(v);\r\n\t}\r\n\tinline const Vector3f&\t\tCamera::position( void ) const {\r\n\t\treturn _transform.position();\r\n\t}\r\n\r\n\tinline void\t\t\t\t\tCamera::rotate( const Quaternionf& rotation ) {\r\n\t\t_dirtyViewProj = true; _transform.rotate(rotation);\r\n\t}\r\n\tinline void\t\t\t\t\tCamera::rotate( const Vector3f& v ) {\r\n\t\t_dirtyViewProj = true; _transform.rotate(v);\r\n\t}\r\n\tinline void\t\t\t\t\tCamera::rotate( const Vector3f& v, const Transform3f& ref ) {\r\n\t\t_dirtyViewProj = true; _transform.rotate(v, ref);\r\n\t}\r\n\r\n\tinline void\t\t\t\t\tCamera::rotation( const Vector3f& v ) {\r\n\t\t_dirtyViewProj = true; _transform.rotation(v);\r\n\t}\r\n\tinline void\t\t\t\t\tCamera::rotation( const Quaternionf& q ) {\r\n\t\t_dirtyViewProj = true; _transform.rotation(q);\r\n\t}\r\n\r\n\tinline const Quaternionf&\t\tCamera::rotation( void ) const {\r\n\t\treturn _transform.rotation();\r\n\t}\r\n\r\n\t/////////////////////////////////////////////////////////////////\r\n\r\n\tinline void\tCamera::fovy( float value ) {\r\n\t\t_fov = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::fovy( void ) const {\r\n\t\treturn _fov;\r\n\t}\r\n\r\n\tinline void\tCamera::aspect( float value ) {\r\n\t\t_aspect = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::aspect( void ) const {\r\n\t\treturn _aspect;\r\n\t}\r\n\r\n\tinline void\tCamera::znear( float value ) {\r\n\t\t_znear = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::znear( void ) const {\r\n\t\treturn _znear;\r\n\t}\r\n\r\n\tinline void\tCamera::zfar( float value ) {\r\n\t\t_zfar = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::zfar( void ) const {\r\n\t\treturn _zfar;\r\n\t}\r\n\r\n\tinline void Camera::principalPoint(const sibr::Vector2f & p) {\r\n\t\t_p = p; _dirtyViewProj = true;\r\n\t}\r\n\r\n\tinline void\tCamera::orthoRight( float value ) {\r\n\t\t_right = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::orthoRight( void ) const {\r\n\t\treturn _right;\r\n\t}\r\n\r\n\tinline void\tCamera::orthoTop( float value ) {\r\n\t\t_top = value; _dirtyViewProj = true;\r\n\t}\r\n\tinline float\tCamera::orthoTop( void ) const {\r\n\t\treturn _top;\r\n\t}\r\n\tinline bool\tCamera::ortho(void) const {\r\n\t\treturn _isOrtho;\r\n\t}\r\n\r\n\r\n\tinline const Matrix4f&\t\t\tCamera::viewproj( void ) const {\r\n\t\tif (_dirtyViewProj)\r\n\t\t\tforceUpdateViewProj();\r\n\r\n\t\treturn _matViewProj;\r\n\t}\r\n\r\n\tinline const Matrix4f&\t\t\tCamera::invViewproj( void ) const {\r\n\t\tif (_dirtyViewProj)\r\n\t\t\tforceUpdateViewProj();\r\n\r\n\t\treturn _invMatViewProj;\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/system/Config.hpp\"\n# include \"core/system/Utils.hpp\"\n\n//#define GLEW_STATIC\n#include <GL/glew.h>\n\n# include <functional>\n\n# define GLFW_INCLUDE_GLU\n# include <GLFW/glfw3.h>\n\n\n// (used by Image)\n# pragma warning(push, 0)\n#  include <opencv2/opencv.hpp>\n#  include <opencv2/core.hpp>\n#  include <opencv2/highgui.hpp>\n# pragma warning(pop)\n\n\n\n# ifdef SIBR_OS_WINDOWS\n//// Export Macro (used for creating DLLs) ////\n#  ifdef SIBR_STATIC_DEFINE\n#    define SIBR_EXPORT\n#    define SIBR_NO_EXPORT\n#  else\n#    ifndef SIBR_GRAPHICS_EXPORT\n#      ifdef SIBR_GRAPHICS_EXPORTS\n          /* We are building this library */\n#        define SIBR_GRAPHICS_EXPORT __declspec(dllexport)\n#      else\n          /* We are using this library */\n#        define SIBR_GRAPHICS_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT \n#    endif\n#  endif\n# else\n# define SIBR_GRAPHICS_EXPORT\n# endif\n\n\n/** Macro to check OpenGL error and throw \\p std::runtime_error if found */\n# undef CHECK_GL_ERROR\n# define CHECK_GL_ERROR  {\t\t\t\t\t\t\t\t\\\n  GLenum err = glGetError();\t\t\t\t\t\t\t\\\n  if (err) {\t\t\t\t\t\t\t\t\t\t\t\\\n\tstd::string errorStr = \"Unknown\";\t\t\t\t\t\\\n\tswitch (err) {\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_INVALID_ENUM:\t\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_INVALID_ENUM\";\t\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_INVALID_VALUE:\t\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_INVALID_VALUE\";\t\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_INVALID_OPERATION:\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_INVALID_OPERATION\";\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_STACK_OVERFLOW:\t\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_STACK_OVERFLOW\";\t\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_STACK_UNDERFLOW:\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_STACK_UNDERFLOW\";\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_OUT_OF_MEMORY:\t\t\t\t\t\t\t\t\\\n\t\terrorStr = \"GL_OUT_OF_MEMORY\";\t\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tcase GL_INVALID_FRAMEBUFFER_OPERATION:\t\t\t\t\\\n\t\terrorStr = \"GL_INVALID_FRAMEBUFFER_OPERATION\";\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\tdefault:\t\t\t\t\t\t\t\t\t\t\t\\\n\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n  SIBR_ERR << \"OpenGL error 0x0\" << std::hex << err  << std::dec  << \" (\" << int(err) << \") \" << errorStr << \" at \" << __FILE__ << \":\" << __LINE__ << std::endl; \\\n  }\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n}\n\n#define SIBR_GLSL(version, shader)  \"#version \" #version \"\\n\" #shader\n\n\nnamespace sibr\n{\n\t/** Clamp a value.\n\t\\param value value to clamp\n\t\\param min min value\n\t\\param max max value\n\t\\return min(max(value, min), max)\n\t\\ingroup sibr_graphics\n\t*/\n\ttemplate <typename T>\n\tinline T\tclamp( T value, T min, T max ) {\n\t\treturn std::max(min, std::min(max, value));\n\t}\n\n} // namespace sibr\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Frustum.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n// Partially based on:\n// http://www.lighthouse3d.com/tutorials/view-frustum-culling\n\n#include \"core/graphics/Camera.hpp\"\n#include \"core/graphics/Frustum.hpp\"\n\nnamespace sibr\n{\n\tFrustum::Frustum(const Camera& cam)\n\t{\n\t\tfloat ratio = cam.aspect();\n\t\tfloat angle = cam.fovy();\n\t\tfloat nearD = cam.znear();\n\t\tfloat farD = cam.zfar();\n\n\t\t// compute width and height of the near and far plane sections\n\t\tfloat tang = (float)tan(SIBR_DEGTORAD(angle) * 0.5);\n\t\tfloat nh = nearD * tang;\n\t\tfloat nw = nh * ratio;\n\t\tfloat fh = farD  * tang;\n\t\tfloat fw = fh * ratio;\n\n\t\tVector3f nc, fc, X, Y, Z;\n\t\tconst Vector3f& p = cam.position();\n\n\t\t// compute the Z axis of camera\n\t\t// this axis points in the opposite direction from\n\t\t// the looking direction\n\t\tZ = -cam.dir();\n\n\t\t// X axis of camera with given \"up\" vector and Z axis\n\t\tX = cam.up().cross(Z);\n\t\tX.normalize();\n\n\t\t// the real \"up\" vector is the cross product of Z and X\n\t\tY = cam.up();\n\n\t\t// compute the centers of the near and far planes\n\t\tnc = p - Z * nearD;\n\t\tfc = p - Z * farD;\n\n\t\t_planes[NEARP].buildFrom( -Z, nc );\n\t\t_planes[FARP].buildFrom( Z, fc );\n\n\t\tVector3f aux, normal;\n\n\t\taux = (nc + Y*nh) - p;\n\t\taux.normalize();\n\t\tnormal = aux.cross(X);\n\t\t_planes[TOP].buildFrom( normal, nc + Y*nh );\n\n\t\taux = (nc - Y*nh) - p;\n\t\taux.normalize();\n\t\tnormal = X.cross(aux);\n\t\t_planes[BOTTOM].buildFrom( normal, nc - Y*nh );\n\n\t\taux = (nc - X*nw) - p;\n\t\taux.normalize();\n\t\tnormal = aux.cross(Y);\n\t\t_planes[LEFT].buildFrom( normal, nc - X*nw );\n\n\t\taux = (nc + X*nw) - p;\n\t\taux.normalize();\n\t\tnormal = Y.cross(aux);\n\t\t_planes[RIGHT].buildFrom( normal, nc + X*nw );\n\t}\n\n\tFrustum::TestResult\tFrustum::testSphere(const Vector3f& p, float radius)\n\t{\n\t\tfloat distance;\n\t\tTestResult result = INSIDE;\n\n\t\tfor (int i = 0; i < 6; i++) {\n\t\t\tdistance = _planes[i].distanceWithPoint(p);\n\t\t\tif (distance < -radius)\n\t\t\t\treturn OUTSIDE;\n\t\t\telse if (distance < radius)\n\t\t\t\tresult = INTERSECT;\n\t\t}\n\t\treturn result;\n\t}\n\n\tfloat\tFrustum::Plane::distanceWithPoint(const Vector3f& p)\n\t{\n\t\t// dist = A*rx + B*ry + C*rz + D = n . r  + D\n\t\treturn A*p.x() + B*p.y() + C*p.z() + D;\n\t}\n\tvoid\tFrustum::Plane::buildFrom(const Vector3f& normal, const Vector3f& point)\n\t{\n\t\tVector3f n = normal;\n\t\tn.normalize();\n\t\tA = n.x();\n\t\tB = n.y();\n\t\tC = n.z();\n\t\tD = -n.dot(point);\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Frustum.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <array>\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n\nnamespace sibr\n{\n\tclass Camera;\n\n\t/** Represent a 3D frustum defined by 6 planes.\n\t* \\warning This class has not been strongly tested!\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT Frustum\n\t{\n\tpublic:\n\n\t\t/// Result of intersection test.\n\t\tenum TestResult\n\t\t{\n\t\t\tOUTSIDE = 0,\n\t\t\tINTERSECT,\n\t\t\tINSIDE\n\t\t};\n\n\t\t/// Frustum plane representation.\n\t\tstruct Plane\n\t\t{\n\t\t\tfloat A;\n\t\t\tfloat B;\n\t\t\tfloat C;\n\t\t\tfloat D;\n\n\t\t\t/** Get the distance from a point to the plane.\n\t\t\t\\param p 3D point\n\t\t\t\\return distance\n\t\t\t*/\n\t\t\tfloat\tdistanceWithPoint(const Vector3f& p);\n\n\t\t\t/** Build a plane from a normal and a point.\n\t\t\t\\param normal the normal\n\t\t\t\\param point a point belonging to the plane\n\t\t\t*/\n\t\t\tvoid\tbuildFrom(const Vector3f& normal, const Vector3f& point);\n\t\t};\n\n\tpublic:\n\n\t\t/** Construct the furstum associated to a camera.\n\t\t\\param cam the camera\n\t\t*/\n\t\tFrustum(const Camera& cam);\n\n\t\t/** Test if a sphere intersects the frustum or is contained in it.\n\t\t\\param sphere sphere center\n\t\t\\param radius sphere radis\n\t\t\\return if the sphere is inside, intersecting or outside the frustum\n\t\t*/\n\t\tTestResult\ttestSphere(const Vector3f& sphere, float radius);\n\n\tprivate:\n\n\t\t/// Location of each plane.\n\t\tenum \n\t\t{\n\t\t\tTOP = 0, \n\t\t\tBOTTOM, \n\t\t\tLEFT,\n\t\t\tRIGHT, \n\t\t\tNEARP, \n\t\t\tFARP,\n\n\t\t\tCOUNT\n\t\t};\n\n\n\t\tstd::array<Plane, COUNT> _planes; ///< Frustum planes.\n\n\t};\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/GPUQuery.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"GPUQuery.hpp\"\n\nusing namespace sibr;\n\nGPUQuery::GPUQuery(GLenum type, size_t count) : _count(count), _type(type){\n\tif(count < 2) {\n\t\tSIBR_WRG << \"Using a buffer of size >= 2 is recommended to avoid synchronization problems.\" << std::endl;\n\t}\n\t_ids.resize(count);\n\tglGenQueries(GLsizei(_ids.size()), &_ids[0]);\n\t_current = _count - 1;\n\t// Dummy initial query.\n\tfor (int i = 0; i < _count; ++i)\n\t{\n\t\tbegin();\n\t\tend();\n\t}\n}\n\nvoid GPUQuery::begin() {\n\tif(_observing) {\n\t\tSIBR_WRG << \"Query already started...\" << std::endl;\n\t\treturn;\n\t}\n\t_current = (_current + 1) % _count;\n\tglBeginQuery(_type, _ids[_current]);\n\t_observing = true;\n}\n\nvoid GPUQuery::end() {\n\tif (!_observing) {\n\t\tSIBR_WRG << \"Query not running...\" << std::endl;\n\t\treturn;\n\t}\n\tglEndQuery(_type);\n\t_observing = false;\n}\n\nuint64 GPUQuery::value() {\n\tif (_observing) {\n\t\tSIBR_WRG << \"Query still running, ending it first...\" << std::endl;\n\t\tend();\n\t}\n\t// We want the ID of the previous frame, taking into account that we have incremented the counter once more when ending it. So minus 1.\n\t// Except if you have only one query, in which case we query this one, but it will stall the GPU.\n\tconst size_t previous = (_current - 1) % _count;\n\tGLuint64 data = 0;\n\tglGetQueryObjectui64v(_ids[previous], GL_QUERY_RESULT, &data);\n\t//CHECK_GL_ERROR;\n\treturn data;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/GPUQuery.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n#include <core/system/Config.hpp>\n#include <core/graphics/Config.hpp>\n\nnamespace sibr { \n\n\t/**\n\t * Provide a buffered wrapper around an OpenGL query object, avoiding manual synchronization.\n\t * See section 4.2 of the OpenGL 4.6 specification for more details on the types of queries available\n\t * (time elapsed, number of primitives, number of fragment writes...).\n\t * \n\t * For example, to get the processing time of a mesh draw call, you can use the following.\n\t * In renderer initialisation:\n\t *\t\tGPUQuery query(GL_TIME_ELAPSED);\n\t * In the rendering loop:\n\t *\t\tquery.begin();\n\t *\t\tmesh.draw();\n\t *\t\tquery.end();\n\t * In your GUI loop:\n\t *\t\tconst uint64 time = query.value();\n\t *\t\t//... display it.\n\t *\t\n\t * \\warning Because the query is using buffering to avoid stalling when querying the value, \n\t * you SHOULD NOT use the same query object for multiple timings in the same frame. \n\t * It should also be use for multiple consecutive frames ; because of buffering again, \n\t * the first time value() is queried, it might be erroneous.\n\t *\n\t * \\note If you want to create a query inline (for a one shot measurement), set the buffer \n\t * count to 1, and know that it will introduce a stall when querying the value.\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT GPUQuery\n\t{\n\t\tSIBR_CLASS_PTR(GPUQuery);\n\n\tpublic:\n\n\t\t/** Create a query of a given type.\n\t\t\\param type the OpenGL enum type\n\t\t\\param count number of buffered internal queries (ideally >= 2).\n\t\t*/\n\t\tGPUQuery(GLenum type, size_t count = 2);\n\n\t\t/** Start measuring. */\n\t\tvoid begin();\n\n\t\t/** Stop measuring. */\n\t\tvoid end();\n\n\t\t/** Obtain the raw value (time in nanoseconds, number of primitives,...) for the query before last.\n\t\tThis allows for buffering from one frame to the next and avoid stalls (except if count is set to 1).\n\t\t\\return the query value.\n\t\t*/\n\t\tuint64 value();\n\n\tprivate:\n\t\t\n\t\tstd::vector<GLuint> _ids; ///< Internal queries IDs.\n\t\tconst size_t _count; ///< Number of queries.\n\t\tGLenum _type; ///< Type of query.\n\t\tsize_t _current = 0; ///< Current internla query used.\n\t\tbool _observing = false; ///< Are we currently measuring.\n\t};\n\n} \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/GUI.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/graphics/Window.hpp\"\r\n#include \"core/graphics/GUI.hpp\"\r\n#include \"core/graphics/Mesh.hpp\"\r\n\r\n// We extend ImGui functionality so we need the internal definitions.\r\n#define IMGUI_DEFINE_MATH_OPERATORS\r\n#include <imgui/imgui_internal.h>\r\n\r\nnamespace sibr\r\n{\r\n\t\r\n\tbool\t\tshowImGuiWindow(const std::string& windowTitle, const IRenderTarget& rt, ImGuiWindowFlags flags, Viewport & viewport,  bool invalidTexture,  bool updateLayout, int handle )\r\n\t{\r\n\t\tbool isWindowFocused = false;\r\n\t\t// If we are asked to, we need to update the viewport at launch.\r\n\t\tif (updateLayout) {\r\n\t\t\tImGui::SetNextWindowPos(ImVec2(viewport.finalLeft(), viewport.finalTop()));\r\n\t\t\tImGui::SetNextWindowSize(ImVec2(0, 0));\r\n\t\t\tImGui::SetNextWindowContentSize(ImVec2(viewport.finalWidth(), viewport.finalHeight()));\r\n\t\t}\r\n\r\n\t\tif (::ImGui::Begin(windowTitle.c_str(), NULL, flags))\r\n\t\t{\r\n\t\t\t// Get the current cursor position (where your window is)\r\n\t\t\tImVec2 pos = /*ImGui::GetItemRectMin() + */::ImGui::GetCursorScreenPos();\r\n\t\t\tVector2f offset, size;\r\n\t\t\tVector2i availRegionSize(::ImGui::GetContentRegionAvail().x, ::ImGui::GetContentRegionAvail().y);\r\n\t\t\t\r\n\t\t\tfitImageToDisplayRegion(viewport.finalSize(), availRegionSize, offset, size);\r\n\t\t\t\r\n\t\t\tsize = size.cwiseMax( sibr::Vector2f( 1.0f,1.0f) );\r\n\r\n\t\t\t\t\r\n\t\t\tpos.x += offset.x();\r\n\t\t\tpos.y += offset.y();\r\n\r\n\t\t\t\r\n\t\t\tImGui::SetCursorPos(ImVec2(offset.x(), ImGui::GetTitleBarHeight()+offset.y()));\r\n\t\t\tImGui::InvisibleButton((windowTitle + \"--TEXTURE-INVISIBLE_BUTTON\").c_str(), ImVec2(size.x(), size.y()));\r\n\t\t\tif (!invalidTexture) {\r\n\t\t\t\t::ImGui::GetWindowDrawList()->AddImage((void*)(intptr_t)(rt.handle(handle)),\r\n\t\t\t\t\tpos, ImVec2(pos.x + size.x(), pos.y + size.y()),\r\n\t\t\t\t\tImVec2(0, 1), ImVec2(1, 0));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tisWindowFocused = ImGui::IsWindowFocused();\r\n\r\n\t\t\tviewport = Viewport(pos.x, pos.y, pos.x+size.x(), pos.y+size.y());\r\n\r\n\t\t\t// Hand back the inputs to sibr.\r\n\t\t\tif (ImGui::IsItemHovered()) {\r\n\t\t\t\tImGui::CaptureKeyboardFromApp(false);\r\n\t\t\t\tImGui::CaptureMouseFromApp(false);\r\n\t\t\t}\r\n\t\t}\r\n\t\t::ImGui::End();\r\n\r\n\t\treturn isWindowFocused;\r\n\t}\r\n\r\n\tMesh::Ptr generateMeshForText(const std::string & text, unsigned int & separationIndex){\r\n\t\t// Technically we don't care if we already are in the middle of a ImGui frame.\r\n\t\t// as long as we clear the draw list. ImGui will detect the empty draw lists and cull them.\r\n\t\tImGui::PushID(1234567809);\r\n\t\tImGui::SetNextWindowPos(ImVec2(0,0));\r\n\t\tImGui::Begin(text.c_str(), nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoInputs);\r\n\t\tImGui::SetWindowFontScale(ImGui::GetIO().FontGlobalScale);\r\n\r\n\t\tImGui::Text(text.c_str());\r\n\t\t// Get back the draw list.\r\n\t\tImDrawList * drawlist = ImGui::GetWindowDrawList();\r\n\t\tconst int vertCount = drawlist->VtxBuffer.Size;\r\n\t\tconst int indexCount = drawlist->IdxBuffer.Size;\r\n\t\t// We generate one mesh from the draw list.\r\n\t\tstd::vector<sibr::Vector3f> vertices(vertCount);\r\n\t\tstd::vector<sibr::Vector2f> uvs(vertCount);\r\n\t\tstd::vector<sibr::Vector3f> colors(vertCount);\r\n\t\tstd::vector<sibr::Vector3u> faces(indexCount / 3);\r\n\r\n\t\tsibr::Vector3f centroid(0.0f, 0.0f, 0.0f);\r\n\t\tfor (int k = 0; k < vertCount; ++k) {\r\n\t\t\tconst auto & vtx = drawlist->VtxBuffer[k];\r\n\t\t\tvertices[k][0] = (vtx.pos.x)*2.0f;\r\n\t\t\tvertices[k][1] = -vtx.pos.y*2.0f;\r\n\t\t\tuvs[k][0] = vtx.uv.x; uvs[k][1] = vtx.uv.y;\r\n\t\t\tImVec4 col = ImGui::ColorConvertU32ToFloat4(vtx.col);\r\n\t\t\tcolors[k][0] = col.x; colors[k][1] = col.y;\r\n\t\t\tcolors[k][2] = col.z; vertices[k][2] = col.w;\r\n\t\t\tcentroid += vertices[k];\r\n\t\t}\r\n\t\tfor (int k = 0; k < indexCount; k += 3) {\r\n\t\t\tfaces[k / 3][0] = (unsigned int)drawlist->IdxBuffer[k];\r\n\t\t\tfaces[k / 3][1] = (unsigned int)drawlist->IdxBuffer[k + 1];\r\n\t\t\tfaces[k / 3][2] = (unsigned int)drawlist->IdxBuffer[k + 2];\r\n\t\t}\r\n\t\t// Center the mesh?\r\n\t\tcentroid /= float(vertices.size());\r\n\t\tfor (int k = 0; k < vertices.size(); ++k) {\r\n\t\t\tvertices[k] -= centroid;\r\n\t\t}\r\n\t\tMesh::Ptr mesh = std::make_shared<Mesh>();\r\n\t\tmesh->vertices(vertices);\r\n\t\tmesh->colors(colors);\r\n\t\tmesh->texCoords(uvs);\r\n\t\tmesh->triangles(faces);\r\n\t\t// Store the separation idnex between the background and the text foreground.\r\n\t\tseparationIndex = drawlist->CmdBuffer[0].ElemCount;\r\n\t\t\r\n\t\t// Finish the window, then clear the draw list.\r\n\t\tImGui::End();\r\n\t\tImGui::PopID();\r\n\t\tdrawlist->Clear();\r\n\t\treturn mesh;\r\n\t}\r\n\r\n\r\n\tvoid \t\t\tfitImageToDisplayRegion(const Vector2f & imgSize, const Vector2i & regionSize, Vector2f& offset, Vector2f& size)\r\n\t{\r\n\t\t\r\n\t\tVector2f ratios = imgSize.cwiseQuotient(regionSize.cast<float>());\r\n\t\tif (ratios.x() < ratios.y())\r\n\t\t{\r\n\t\t\tfloat aspect = imgSize.x() / imgSize.y();\r\n\t\t\tsize.y() = float(regionSize.y());\r\n\t\t\tsize.x() = size.y() * aspect;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tfloat aspect = imgSize.y() / imgSize.x();\r\n\t\t\tsize.x() = float(regionSize.x());\r\n\t\t\tsize.y() = size.x() * aspect;\r\n\t\t}\r\n\t\toffset = regionSize.cast<float>() / 2 - size / 2;\r\n\t}\r\n\t\r\n\r\n\r\n\tsibr::Vector2f ZoomData::topLeft()\t\tconst { return center - diagonal; }\r\n\tsibr::Vector2f ZoomData::bottomRight()\tconst { return center + diagonal; }\r\n\r\n\tsibr::Vector2f ZoomData::uvFromBoxPos(const sibr::Vector2f& pos) const\r\n\t{\r\n\t\treturn topLeft() + 2.0f*diagonal.cwiseProduct(pos);\r\n\t}\r\n\r\n\tZoomData ZoomData::scaled(const sibr::Vector2f& size) const \r\n\t{\r\n\t\tZoomData out;\r\n\t\tout.center = center.cwiseProduct(size);\r\n\t\tout.diagonal = diagonal.cwiseProduct(size);\r\n\t\treturn out;\r\n\t}\r\n\r\n\tvoid ZoomInterraction::updateZoom(const sibr::Vector2f& canvasSize)\r\n\t{\r\n\t\tconst auto & d = callBackData;\r\n\t\tif (d.ctrlPressed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsibr::Vector2f posF = zoomData.uvFromBoxPos(d.positionRatio);\r\n\r\n\t\tif (d.isHoovered && d.isClickedRight && !zoomData.underMofidication) {\r\n\t\t\tzoomData.underMofidication = true;\r\n\t\t\tzoomData.tmpTopLeft = posF;\r\n\t\t\tzoomData.firstClickPixel = d.mousePos;\r\n\t\t}\r\n\t\tif (d.isHoovered && zoomData.underMofidication) {\r\n\t\t\tzoomData.tmpBottonRight = posF;\r\n\t\t\tzoomData.secondClickPixel = d.mousePos;\r\n\t\t}\r\n\r\n\t\tif (zoomData.underMofidication) {\r\n\t\t\tImGui::GetWindowDrawList()->AddRect(\r\n\t\t\t\tImVec2(zoomData.firstClickPixel[0], zoomData.firstClickPixel[1]),\r\n\t\t\t\tImVec2(zoomData.secondClickPixel[0], zoomData.secondClickPixel[1]),\r\n\t\t\t\tIM_COL32(255, 0, 0, 255), 0, 0, 2\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (d.isReleasedRight && zoomData.underMofidication) {\r\n\t\t\tzoomData.underMofidication = false;\r\n\t\t\tif ((zoomData.tmpBottonRight - zoomData.tmpTopLeft).cwiseProduct(canvasSize).cwiseAbs().minCoeff() > 10) {\r\n\t\t\t\tzoomData.center = 0.5f*(zoomData.tmpBottonRight + zoomData.tmpTopLeft);\r\n\t\t\t\tzoomData.diagonal = 0.5f*(zoomData.tmpBottonRight - zoomData.tmpTopLeft).cwiseAbs();\r\n\t\t\t\tauto scaledBox = zoomData.scaled(canvasSize);\r\n\t\t\t\tfloat target_ratio = canvasSize[0] / canvasSize[1];\r\n\t\t\t\tfloat current_ratio = scaledBox.diagonal[0] / scaledBox.diagonal[1];\r\n\t\t\t\tif (current_ratio > target_ratio) {\r\n\t\t\t\t\tscaledBox.diagonal.y() = scaledBox.diagonal.x() / target_ratio;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscaledBox.diagonal.x() = scaledBox.diagonal.y() * target_ratio;\r\n\t\t\t\t}\r\n\t\t\t\tzoomData.diagonal = scaledBox.diagonal.cwiseQuotient(canvasSize);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (d.isHoovered && d.scroll != 0) {\r\n\t\t\tzoomData.diagonal = zoomData.diagonal.cwiseProduct(pow(1.15f, -d.scroll)*sibr::Vector2f(1, 1));\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\tzoomData.diagonal = zoomData.diagonal.cwiseMin(sibr::Vector2f(0.5, 0.5));\r\n\t\tusing Box = Eigen::AlignedBox2f;\r\n\t\tusing Corner = Box::CornerType;\r\n\r\n\t\tBox target(sibr::Vector2f(0, 0), sibr::Vector2f(1, 1));\r\n\t\tBox current(zoomData.topLeft(), zoomData.bottomRight());\r\n\t\t\r\n\t\tif (!target.contains(current)) {\r\n\t\t\tBox inside = current;\r\n\t\t\tinside.clamp(target);\r\n\t\t\tfor (int c = 0; c < 4; ++c) {\r\n\t\t\t\tCorner cType = (Corner)c;\r\n\t\t\t\tif ( (current.corner(cType)-inside.corner(cType)).isZero() ) {\t\t\t\r\n\t\t\t\t\tCorner opposite = (Corner)(3 - c);\r\n\t\t\t\t\tzoomData.center += (inside.corner(opposite) - current.corner(opposite));\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\tvoid SegmentSelection::update(const CallBackData & callback, const sibr::Vector2i & size, const ZoomData & zoom)\r\n\t{\r\n\t\tsibr::Vector2i pos = zoom.scaled(size.cast<float>()).uvFromBoxPos(callback.positionRatio).cast<int>();\r\n\r\n\t\tif (callback.isHoovered && callback.isClickedRight && callback.ctrlPressed && (!first || valid)) {\r\n\t\t\tfirstPosScreen = callback.mousePos.cast<int>();\r\n\t\t\tfirstPosIm = pos.cast<int>();\r\n\t\t\tsecondPosScreen = firstPosScreen;\r\n\t\t\tfirst = true;\r\n\t\t} else if (callback.isHoovered && first) {\r\n\t\t\tsecondPosScreen = callback.mousePos.cast<int>();\r\n\t\t\tsecondPosIm = pos.cast<int>();\r\n\r\n\t\t\tif (callback.isClickedRight) {\r\n\t\t\t\tfirst = false;\r\n\t\t\t\tvalid = true;\r\n\t\t\t\tcomputeRasterizedLine();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid SegmentSelection::computeRasterizedLine()\r\n\t{\r\n\t\tif (!valid) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsibr::Vector2i diff = secondPosIm - firstPosIm;\r\n\t\tint l = diff.cwiseAbs().maxCoeff();\r\n\t\trasterizedLine.resize(l + 1);\r\n\t\tfor (int i = 0; i <= l; ++i) {\r\n\t\t\trasterizedLine[i] = (firstPosIm.cast<float>() + (i / (float)l)*diff.cast<float>()).cast<int>();\r\n\t\t}\r\n\t}\r\n\r\n\tvoid DisplayImageGui(\r\n\t\tGLuint texture,\r\n\t\tconst sibr::Vector2i & displaySize,\r\n\t\tconst sibr::Vector2f& uv0,\r\n\t\tconst sibr::Vector2f& uv1 \r\n\t) {\r\n\t\tImGui::Image((void*)(intptr_t)(texture), ImVec2(float(displaySize[0]), float(displaySize[1])), ImVec2(uv0[0], uv0[1]), ImVec2(uv1[0], uv1[1]));\r\n\t}\r\n\r\n\tvoid ImageWithCallback(\r\n\t\tGLuint texture,\r\n\t\tconst sibr::Vector2i & displaySize,\r\n\t\tCallBackData & callbackDataOut,\r\n\t\tconst sibr::Vector2f & uv0,\r\n\t\tconst sibr::Vector2f & uv1\r\n\t) {\r\n\t\tCallBackData & data = callbackDataOut;\r\n\r\n\t\tdata.itemPos = toSIBR<float>(ImGui::GetCursorScreenPos());\r\n\t\tDisplayImageGui(texture, displaySize, uv0, uv1);\r\n\r\n\t\tdata.itemSize = toSIBR<float>(ImGui::GetItemRectSize());\r\n\t\tdata.isHoovered = ImGui::IsItemHovered();\r\n\t\tdata.isClickedLeft = ImGui::IsMouseClicked(0);\r\n\t\tdata.isReleasedLeft = ImGui::IsMouseReleased(0);\r\n\t\tdata.isClickedRight = ImGui::IsItemClicked(1);\r\n\t\tdata.isReleasedRight = ImGui::IsMouseReleased(1);\r\n\t\tdata.ctrlPressed = ImGui::GetIO().KeyCtrl;\r\n\t\tdata.scroll = ImGui::GetIO().MouseWheel;\r\n\r\n\t\tif (data.isHoovered) {\r\n\t\t\tdata.mousePos = toSIBR<float>(ImGui::GetIO().MousePos);\r\n\t\t\tdata.positionRatio = (data.mousePos - data.itemPos).cwiseQuotient(data.itemSize);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid ImageWithZoom(GLuint texture, const sibr::Vector2i & displaySize, ZoomInterraction & zoom)\r\n\t{\r\n\t\tImageWithCallback(texture, displaySize, zoom.callBackData, zoom.zoomData.topLeft(), zoom.zoomData.bottomRight());\r\n\t\tzoom.updateZoom(displaySize.template cast<float>());\r\n\t}\r\n\r\n} // namespace sibr\r\n\r\n\r\nnamespace ImGui {\r\n\r\n\tconst float GetTitleBarHeight() { return GetTextLineHeight() + GetStyle().FramePadding.y * 2.0f; }\r\n\r\n\tvoid PushScaledItemWidth(float item_width)\r\n\t{\r\n\t\tImGui::PushItemWidth(ImGui::GetIO().FontGlobalScale * item_width);\r\n\t}\r\n\r\n\tbool TabButton(const char * label, bool highlight, const ImVec2 & size)\r\n\t{\r\n\t\tif (highlight) {\r\n\t\t\tImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(0, 0.8f, 0.8f));\r\n\t\t\tImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(0, 0.6f, 0.6f));\r\n\t\t}\r\n\t\tbool b = ImGui::Button(label, size);\r\n\t\tif (highlight) {\r\n\t\t\tImGui::PopStyleColor(2);\r\n\t\t}\r\n\t\treturn b;\r\n\t}\r\n\r\n\tvoid PlotMultiLines(const char* label, std::vector<float*> values, int values_count, const std::vector<ImVec4>& colors, float scale_min, float scale_max, ImVec2 graph_size) {\r\n\t\t// Note: code extracted from ImGui and udpated to display multiple lines on the same graph.\r\n\t\tImGuiWindow* window = GetCurrentWindow();\r\n\t\tif (window->SkipItems)\r\n\t\t\treturn;\r\n\r\n\t\tImGuiContext& g = *GImGui;\r\n\t\tconst ImGuiStyle& style = g.Style;\r\n\t\t// Force the plot type.\r\n\t\tImGuiPlotType plot_type = ImGuiPlotType_Lines;\r\n\t\tconst ImVec2 label_size = CalcTextSize(label, NULL, true);\r\n\t\tif (graph_size.x == 0.0f)\r\n\t\t\tgraph_size.x = CalcItemWidth();\r\n\t\tif (graph_size.y == 0.0f)\r\n\t\t\tgraph_size.y = label_size.y + (style.FramePadding.y * 2);\r\n\r\n\t\tconst ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(graph_size.x, graph_size.y));\r\n\t\tconst ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);\r\n\t\tconst ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));\r\n\t\tItemSize(total_bb, style.FramePadding.y);\r\n\t\tif (!ItemAdd(total_bb, 0, &frame_bb))\r\n\t\t\treturn;\r\n\t\tconst bool hovered = ItemHoverable(inner_bb, 0);\r\n\r\n\t\t// Determine scale from values if not specified\r\n\t\tif (scale_min == FLT_MAX || scale_max == FLT_MAX)\r\n\t\t{\r\n\t\t\tfloat v_min = FLT_MAX;\r\n\t\t\tfloat v_max = -FLT_MAX;\r\n\t\t\tfor (int j = 0; j < values.size(); ++j) {\r\n\t\t\t\tfor (int i = 0; i < values_count; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst float v = values[j][i];\r\n\t\t\t\t\tv_min = ImMin(v_min, v);\r\n\t\t\t\t\tv_max = ImMax(v_max, v);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (scale_min == FLT_MAX)\r\n\t\t\t\tscale_min = v_min;\r\n\t\t\tif (scale_max == FLT_MAX)\r\n\t\t\t\tscale_max = v_max;\r\n\t\t}\r\n\r\n\t\tRenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);\r\n\t\tint values_offset = 0;\r\n\r\n\t\tif (values_count > 0)\r\n\t\t{\r\n\t\t\tint res_w = ImMin((int)graph_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);\r\n\t\t\tint item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);\r\n\r\n\t\t\t// No tooltip for now.\r\n\r\n\t\t\tconst float t_step = 1.0f / (float)res_w;\r\n\t\t\tconst float inv_scale = (scale_min == scale_max) ? 0.0f : (1.0f / (scale_max - scale_min));\r\n\r\n\t\t\tfor (int vid = 0; vid < values.size(); ++vid) {\r\n\t\t\t\tfloat v0 = values[vid][(0 + values_offset) % values_count];\r\n\t\t\t\tfloat t0 = 0.0f;\r\n\t\t\t\tImVec2 tp0 = ImVec2(t0, 1.0f - ImSaturate((v0 - scale_min) * inv_scale));                       // Point in the normalized space of our target rectangle\r\n\t\t\t\tfloat histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (-scale_min * inv_scale) : (scale_min < 0.0f ? 0.0f : 1.0f);   // Where does the zero line stands\r\n\r\n\t\t\t\tconst ImU32 col_base = GetColorU32(colors[vid >= colors.size() ? 0 : vid]);\r\n\t\t\t\tconst ImU32 col_hovered = col_base;\r\n\r\n\t\t\t\tfor (int n = 0; n < res_w; n++)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst float t1 = t0 + t_step;\r\n\t\t\t\t\tconst int v1_idx = (int)(t0 * item_count + 0.5f);\r\n\t\t\t\t\tIM_ASSERT(v1_idx >= 0 && v1_idx < values_count);\r\n\t\t\t\t\tconst float v1 = values[vid][(v1_idx + values_offset + 1) % values_count];\r\n\t\t\t\t\tconst ImVec2 tp1 = ImVec2(t1, 1.0f - ImSaturate((v1 - scale_min) * inv_scale));\r\n\r\n\t\t\t\t\t// NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.\r\n\t\t\t\t\tImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);\r\n\t\t\t\t\tImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t));\r\n\t\t\t\t\tif (plot_type == ImGuiPlotType_Lines)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twindow->DrawList->AddLine(pos0, pos1, col_base);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (plot_type == ImGuiPlotType_Histogram)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (pos1.x >= pos0.x + 2.0f)\r\n\t\t\t\t\t\t\tpos1.x -= 1.0f;\r\n\t\t\t\t\t\twindow->DrawList->AddRectFilled(pos0, pos1, col_base);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tt0 = t1;\r\n\t\t\t\t\ttp0 = tp1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/GUI.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n# include \"core/graphics/Image.hpp\"\r\n# include \"core/graphics/RenderTarget.hpp\"\r\n# include \"core/graphics/Window.hpp\"\r\n\r\n#include <imgui/imgui.h>\r\n\r\nnamespace sibr\r\n{\r\n\t\r\n\t/**\tShow the content of a rendertarget in an ImGui window.\r\n\t\\param windowTitle the window name (unique)\r\n\t\\param rt the rendrtarget to display\r\n\t\\param flags ImGui flags\r\n\t\\param viewport will contain the window extent on screen\r\n\t\\param invalidTexture ignore the RT\r\n\t\\param updateLayout force update the camera location on screen\r\n\t\\param handle the texture index to display from the input RT\r\n\t\\return true if window is focused (useful for managing interactions).\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT bool\t\tshowImGuiWindow(const std::string& windowTitle, const IRenderTarget& rt, ImGuiWindowFlags flags, Viewport & viewport,  bool invalidTexture,  bool updateLayout, int handle = 0);\r\n\r\n\t/**\r\n\tHelper that compute the location and extent to display an image in a given region without cropping or distorting it\r\n\t\\param imgSize the image size\r\n\t\\param regionSize the region size\r\n\t\\param offset will containg the top-left corner location\r\n\t\\param size will contain the size to use\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void \t\tfitImageToDisplayRegion(const Vector2f & imgSize, const Vector2i & regionSize, Vector2f& offset, Vector2f& size);\r\n\t\r\n\t/** Generate a mesh for a given label, using ImGui internally. This will generate a mesh that contain both the background and foreground geometry packed together sequentially.\r\n\t\\param text the text to generate the label of\r\n\t\\param separationIndex will contain the location of the first triangle of the foreground mesh\r\n\t\\return the mesh containing first the background triangles then the foreground triangles\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT Mesh::Ptr generateMeshForText(const std::string & text, unsigned int & separationIndex);\r\n\r\n} // namespace sibr\r\n\r\nnamespace ImGui {\r\n\r\n\t/** \\return the height of the title bar (for layout)\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT const float GetTitleBarHeight();\r\n\t\r\n\t/**\r\n\t* Push a width for item which is HiDPI aware.\r\n\t* \\param item_width The with to push, in regular pixels.\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void PushScaledItemWidth(float item_width);\r\n\r\n\t/** Helper to create a tab button item.\r\n\t\\param label the button text\r\n\t\\param highlight should the button be highlit\r\n\t\\param size the size of the button (0,0 will autosize).\r\n\t\\return true if the tab is active\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT bool TabButton(const char* label, bool highlight, const ImVec2& size = ImVec2(0, 0));\r\n\r\n\t/** Plot multiple curves on a graph. All curves should have the same number of samples.\r\n\t\tOnly lines are supported, code is based on internal ImGui implementation for one curve.\r\n\t\t\\param label the graph ImGui label\r\n\t\t\\param values a list of pointers to list of values\r\n\t\t\\param values_count number of samples in each list\r\n\t\t\\param colors one or mulitple colors to use for each curve\r\n\t\t\\param scale_min the value corresponding to the bottom of the graph\r\n\t\t\\param scale_max the value corresponding to the top of the graph\r\n\t\t\\param graph_size size of the graph widget\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void PlotMultiLines(const char* label, std::vector<float*> values, int values_count, const std::vector<ImVec4>& colors, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0.0f, 0.0f));\r\n}\r\n\r\nnamespace sibr {\r\n\r\n\t/** Display an image using ImGui::image, with additional options.\r\n\t\\param texture the ID of the texture to display\r\n\t\\param displaySize the target size\r\n\t\\param uv0 bottom-left corner of the image to display\r\n\t\\param uv1 top-right corner of the image to display\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void DisplayImageGui(\r\n\t\tGLuint texture,\r\n\t\tconst sibr::Vector2i & displaySize,\r\n\t\tconst sibr::Vector2f& uv0 = { 0, 0 },\r\n\t\tconst sibr::Vector2f& uv1 = { 1, 1 }\r\n\t);\r\n\r\n\t/** Store user interaction information to be returned when displaying an image. */\r\n\tstruct SIBR_GRAPHICS_EXPORT CallBackData {\r\n\t\tsibr::Vector2f positionRatio; ///< Position ratio.\r\n\t\tsibr::Vector2f itemPos, itemSize, mousePos; ///< Mouse information.\r\n\t\tfloat scroll = 0.0f; ///< Scroll amount.\r\n\t\tbool isHoovered = false, isClickedRight = false, isClickedLeft = false,\r\n\t\t\tisReleasedRight = false, isReleasedLeft = false, ctrlPressed = false; ///< Is the image currently: hovered, right-clicked pressed, left-click pressed , right-click released, left-click released, is the ctrl key pressed.\r\n\t};\r\n\r\n\t/** Display an image using ImGui::image with support for returning interaction information (did the user click the image, etc.).\r\n\t\\param texture the ID of the texture to display\r\n\t\\param displaySize the target size\r\n\t\\param callbackDataOut will contain interaction information for the current frame \r\n\t\\param uv0 bottom-left corner of the image to display\r\n\t\\param uv1 top-right corner of the image to display\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void ImageWithCallback(\r\n\t\tGLuint texture,\r\n\t\tconst sibr::Vector2i & displaySize,\r\n\t\tCallBackData & callbackDataOut,\r\n\t\tconst sibr::Vector2f& uv0 = { 0, 0 },\r\n\t\tconst sibr::Vector2f& uv1 = { 1, 1 }\r\n\t);\r\n\r\n\t/** Store additional user zoom information to be returned when displaying an image. */\r\n\tstruct SIBR_GRAPHICS_EXPORT ZoomData {\r\n\r\n\t\t/** \\return the zoomed region top left corner in image space. */\r\n\t\tsibr::Vector2f topLeft()\t\tconst;\r\n\r\n\t\t/** \\return the zoomed region bottom right corner in image space. */\r\n\t\tsibr::Vector2f bottomRight()\tconst;\r\n\r\n\t\t/** Convert pixel coordinates in UV, taking the zoom into account.\r\n\t\t\\param pos the pixel position\r\n\t\t\\return the corresponding UVs\r\n\t\t*/\r\n\t\tsibr::Vector2f uvFromBoxPos(const sibr::Vector2f& pos)\tconst;\r\n\r\n\t\t/** Rescale zoom data using a reference region size.\r\n\t\t\\param size the region size\r\n\t\t\\return the resized data\r\n\t\t*/\r\n\t\tZoomData scaled(const sibr::Vector2f& size) const; \r\n\r\n\t\tsibr::Vector2f center = sibr::Vector2f(0.5f, 0.5f), diagonal = sibr::Vector2f(0.5f, 0.5f),\r\n\t\t\ttmpTopLeft, tmpBottonRight, firstClickPixel, secondClickPixel; ///< Zoomed region corners and location.\r\n\t\tbool underMofidication = false; ///< Is the user currently zooming. \r\n\t};\r\n\r\n\t/** Store user interaction and zooming information to be returned when displaying an image. */\r\n\tstruct SIBR_GRAPHICS_EXPORT ZoomInterraction {\r\n\t\t/** Update zoom information.\r\n\t\t\\param canvasSize size ot the displayed region of the image\r\n\t\t*/\r\n\t\tvoid updateZoom(const sibr::Vector2f& canvasSize);\r\n\r\n\t\tCallBackData callBackData; ///< Interaction data.\r\n\t\tZoomData zoomData; ///< Zoom data.\r\n\t};\r\n\r\n\t/** Display an image using ImGui::image with support for returning user zoom information.\r\n\t\\param texture the ID of the texture to display\r\n\t\\param displaySize the target size\r\n\t\\param zoom will contain zoom information for the current frame\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void ImageWithZoom(\r\n\t\tGLuint texture,\r\n\t\tconst sibr::Vector2i & displaySize,\r\n\t\tZoomInterraction & zoom\r\n\t);\r\n\r\n\t/** Represent a segment defined by the user by clicking on screen.  */\r\n\tstruct SIBR_GRAPHICS_EXPORT SegmentSelection {\r\n\r\n\t\t/** Update based on user interaction data.\r\n\t\t\\param callback user interaction data\r\n\t\t\\param size the region size\r\n\t\t\\param zoom optional zoom interaction data\r\n\t\t*/\r\n\t\tvoid update(const CallBackData& callback, const sibr::Vector2i& size, const ZoomData& zoom = {});\r\n\r\n\t\t/** Generate a rasterized line as a list of pixels.*/\r\n\t\tvoid computeRasterizedLine();\r\n\r\n\t\tsibr::Vector2i firstPosScreen, secondPosScreen, firstPosIm, secondPosIm; ///< Segment endpoints in image and screen space.\r\n\t\tstd::vector<sibr::Vector2i> rasterizedLine; ///< List of pixel covered by the rasterized line.\r\n\t\tbool first = false, valid = false; ///< Current interactions state.\r\n\t};\r\n}\r\n\r\n/** Convert an ImGui vector to a sibr vector.\r\n\\param v the vector to convert\r\n\\return the corresponding sibr vector.\r\n*/\r\ntemplate<typename T> sibr::Vector<T, 2> toSIBR(const ImVec2 & v) {\r\n\treturn sibr::Vector<T, 2>(v.x, v.y);\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Image.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/graphics/Image.hpp\"\r\n#include <fstream>\r\n\r\nnamespace sibr\r\n{\r\n\tnamespace opencv\r\n\t{\r\n\r\n\r\n\t\tfloat\t\t\timageTypeCVRange(int cvDepth)\r\n\t\t{\r\n\t\t\t// keep in mind\r\n\t\t\t//enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };\r\n\t\t\tstatic float ranges[] = {\r\n\t\t\t\timageTypeRange<uint8>(),\r\n\t\t\t\timageTypeRange<int8>(),\r\n\t\t\t\timageTypeRange<uint16>(),\r\n\t\t\t\timageTypeRange<int16>(),\r\n\t\t\t\timageTypeRange<int32>(),\r\n\t\t\t\timageTypeRange<float>(),\r\n\t\t\t\timageTypeRange<double>()\r\n\t\t\t};\r\n\t\t\treturn ranges[cvDepth];\r\n\t\t}\r\n\r\n\t\tvoid\t\t\tconvertBGR2RGB(cv::Mat& img)\r\n\t\t{\r\n\t\t\tswitch (img.channels())\r\n\t\t\t{\r\n\t\t\tcase 3:\r\n\t\t\t\tcv::cvtColor(img, img, cv::COLOR_BGR2RGB);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 4:\r\n\t\t\t\tcv::cvtColor(img, img,  cv::COLOR_BGRA2RGBA);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvoid\t\t\tconvertRGB2BGR(cv::Mat& img)\r\n\t\t{\r\n\t\t\tswitch (img.channels())\r\n\t\t\t{\r\n\t\t\tcase 3:\r\n\t\t\t\tcv::cvtColor(img, img, cv::COLOR_RGB2BGR);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 4:\r\n\t\t\t\tcv::cvtColor(img, img, cv::COLOR_RGBA2BGRA);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t} // namespace opencv\r\n\r\n\tsibr::ImageRGBA convertL32FtoRGBA(const sibr::ImageL32F & imgF)\r\n\t{\r\n\t\tsibr::ImageRGBA out(imgF.w(), imgF.h());\r\n\t\tfor (uint y = 0; y < out.h(); ++y) {\r\n\t\t\tfor (uint x = 0; x < out.w(); ++x) {\r\n\t\t\t\tunsigned char const * p = reinterpret_cast<unsigned char const *>(&imgF(x, y).x());\r\n\t\t\t\tfor (std::size_t i = 0; i != sizeof(float); ++i) {\r\n\t\t\t\t\tout(x, y)[i] = p[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\tsibr::ImageL32F convertRGBAtoL32F(const sibr::ImageRGBA & imgRGBA)\r\n\t{\r\n\t\tsibr::ImageL32F out(imgRGBA.w(), imgRGBA.h());\r\n#pragma omp parallel for\r\n\t\tfor (int y = 0; y < int(out.h()); ++y) {\r\n\t\t\tfor (uint x = 0; x < out.w(); ++x) {\r\n\t\t\t\tunsigned char * p = reinterpret_cast<unsigned char *>(&out(x, y).x());\r\n\t\t\t\tfor (std::size_t i = 0; i != sizeof(float); ++i) {\r\n\t\t\t\t\tp[i] = imgRGBA(x, y)[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\tsibr::ImageRGBA convertRGB32FtoRGBA(const sibr::ImageRGB32F & imgF)\r\n\t{\r\n\t\tsibr::ImageRGBA out(3*imgF.w(), imgF.h());\r\n#pragma omp parallel for\r\n\t\tfor (int y = 0; y < int(imgF.h()); ++y) {\r\n\t\t\tfor (uint x = 0; x < imgF.w(); ++x) {\r\n\t\t\t\tfor (int k = 0; k < 3; k++) {\r\n\t\t\t\t\tunsigned char const * p = reinterpret_cast<unsigned char const *>(&imgF(x, y)[k]);\r\n\t\t\t\t\tfor (std::size_t i = 0; i != sizeof(float); ++i) {\r\n\t\t\t\t\t\tout(k*imgF.w() + x, y)[i] = p[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\t sibr::ImageRGB32F convertRGBAtoRGB32F(const sibr::ImageRGBA& imgRGBA)\r\n\t{\r\n\t\tsibr::ImageRGB32F out(imgRGBA.w() / 3, imgRGBA.h());\r\n#pragma omp parallel for\r\n\t\tfor (int y = 0; y < int(out.h()); ++y) {\r\n\t\t\tfor (uint x = 0; x < out.w(); ++x) {\r\n\t\t\t\tfor (int k = 0; k < 3; k++) {\r\n\t\t\t\t\tunsigned char* p = reinterpret_cast<unsigned char*>(&out(x, y)[k]);\r\n\t\t\t\t\tfor (std::size_t i = 0; i != sizeof(float); ++i) {\r\n\t\t\t\t\t\tp[i] = imgRGBA(k * out.w() + x, y)[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\t sibr::ImageRGBA convertNormalMapToSphericalHalf(const sibr::ImageRGB32F & imgF)\r\n\t{\r\n\t\tuint phi_uint; \r\n\t\tuint theta_uint;\r\n\t\tunsigned char * phi_ptr = reinterpret_cast<unsigned char *>(&phi_uint);\r\n\t\tunsigned char * theta_ptr = reinterpret_cast<unsigned char *>(&theta_uint);\r\n\r\n\t\tImageRGBA out(imgF.w(),imgF.h());\r\n\r\n\t\tfor (uint i = 0; i < out.h(); ++i) {\r\n\t\t\tfor (uint j = 0; j < out.w(); ++j) {\t\t\r\n\t\t\t\tconst double phi = std::acos((double)imgF(j, i)[2]);\r\n\t\t\t\tconst double theta = std::atan2((double)imgF(j, i)[1], (double)imgF(j, i)[0]);\r\n\t\t\t\tphi_uint = (uint)((phi / M_PI) * (1 << 16));\r\n\t\t\t\ttheta_uint = (uint)((0.5*(theta / M_PI + 1.0)) * (1 << 16));\r\n\r\n\t\t\t\tunsigned char * out_ptr = reinterpret_cast<unsigned char *>(&out(j, i)[0]);\r\n\t\t\t\tout_ptr[0] = phi_ptr[0];\r\n\t\t\t\tout_ptr[1] = phi_ptr[1];\r\n\t\t\t\tout_ptr[2] = theta_ptr[0];\r\n\t\t\t\tout_ptr[3] = theta_ptr[1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\t sibr::ImageRGB32F convertSphericalHalfToNormalMap(const sibr::ImageRGBA & imgRGBA)\r\n\t{\t\r\n\t\tuint phi_uint;\r\n\t\tuint theta_uint; \r\n\t\tunsigned char * phi_ptr = reinterpret_cast<unsigned char *>(&phi_uint);\r\n\t\tunsigned char * theta_ptr = reinterpret_cast<unsigned char *>(&theta_uint);\r\n\r\n\t\tImageRGB32F out(imgRGBA.w(), imgRGBA.h());\r\n\r\n\t\tfor (uint i = 0; i < out.h(); ++i) {\r\n\t\t\tfor (uint j = 0; j < out.w(); ++j) {\t\r\n\t\t\t\tunsigned char const * out_ptr = reinterpret_cast<unsigned char const *>(&imgRGBA(j, i)[0]);\r\n\t\t\t\tphi_ptr[0] = out_ptr[0];\r\n\t\t\t\tphi_ptr[1] = out_ptr[1];\r\n\t\t\t\ttheta_ptr[2] = out_ptr[0];\r\n\t\t\t\ttheta_ptr[3] = out_ptr[1];\r\n\r\n\t\t\t\tfloat theta = ((float)phi_uint*2.0f / (1 << 16) - 1.0f)*float(M_PI);\r\n\t\t\t\tfloat phi = ((float)theta_uint /(1 << 16))*float(M_PI);\r\n\t\t\t\tfloat sin_t = std::sin(theta);\r\n\t\t\t\tfloat cos_t = std::cos(theta);\r\n\t\t\t\tfloat sin_p = std::sin(phi);\r\n\t\t\t\tfloat cos_p = std::cos(phi);\r\n\t\t\t\tout(j, i) = sibr::Vector3f(sin_t*cos_p, sin_t*sin_p, cos_t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tImage<unsigned char, 3> coloredClass(const Image<unsigned char, 1>::Ptr imClass) { \r\n\t\t\r\n\t\tconst int color_list[25][3] = {\r\n\t\t\t{255, 179, 0},{128, 62, 117},{166, 189, 215} ,{193, 0, 32},{0,128,255},{0, 125, 52},\r\n\t\t\t{246, 118, 142},{0, 83, 138},{255, 122, 92} ,{0, 255, 0},{255, 142, 0},{179, 40, 81},\r\n\t\t\t{244, 200, 0},{127, 24, 13},{147, 170, 0} ,{89, 51, 21},{241, 58, 19},{35, 44, 22},\r\n\t\t\t{83, 55, 122},{255,0,128},{128,255,0} ,{128,0,255},{206, 162, 98},{128,128,128},{255,255,255}\r\n\t\t};\r\n\r\n\t\tstd::vector<Vector3ub> colors(256);\r\n\t\tfor (int i = 0; i < 255; i++) {\r\n\t\t\tcolors[i] = Vector3ub(color_list[i % 25][0], color_list[i % 25][1], color_list[i % 25][2]);\r\n\t\t}\r\n\t\tcolors[255] = Vector3ub(0, 0, 0);\r\n\t\tImage<unsigned char, 3> imClassColor(imClass->w(), imClass->h());\r\n\r\n\t\tfor (unsigned int i = 0; i < imClass->w(); i++) {\r\n\t\t\tfor (unsigned int j = 0; j < imClass->h(); j++) {\r\n\t\t\t\timClassColor(i, j) = colors[imClass(i, j).x() % 256];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn imClassColor;\r\n\t}\r\n\r\n\tImage<unsigned char, 3> coloredClass(const Image<int, 1>::Ptr imClass) { \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \r\n\t\tconst int color_list[25][3] = {\r\n\t\t\t{ 255, 179, 0 },{ 128, 62, 117 },{ 166, 189, 215 } ,{ 193, 0, 32 },{ 0,128,255 },{ 0, 125, 52 },\r\n\t\t\t{ 246, 118, 142 },{ 0, 83, 138 },{ 255, 122, 92 } ,{ 0, 255, 0 },{ 255, 142, 0 },{ 179, 40, 81 },\r\n\t\t\t{ 244, 200, 0 },{ 127, 24, 13 },{ 147, 170, 0 } ,{ 89, 51, 21 },{ 241, 58, 19 },{ 35, 44, 22 },\r\n\t\t\t{ 83, 55, 122 },{ 255,0,128 },{ 128,255,0 } ,{ 128,0,255 },{ 206, 162, 98 },{ 128,128,128 },{ 255,255,255 }\r\n\t\t};\r\n\r\n\t\tstd::vector<Vector3ub> colors(256);\r\n\t\tfor (int i = 0; i < 255; i++) {\r\n\t\t\tcolors[i] = Vector3ub(color_list[i % 25][0], color_list[i % 25][1], color_list[i % 25][2]);\r\n\t\t}\r\n\t\tcolors[255] = Vector3ub(0, 0, 0);\r\n\t\tImage<unsigned char, 3> imClassColor(imClass->w(), imClass->h());\r\n\r\n\t\tfor (unsigned int j = 0; j < imClass->h(); j++) {\r\n\t\t\tfor (unsigned int i = 0; i < imClass->w(); i++) {\r\n\r\n\t\t\t\tVector3ub color;\r\n\t\t\t\tif (imClass(i, j).x() < 0)\r\n\t\t\t\t\tcolor = colors[255];\r\n\t\t\t\telse\r\n\t\t\t\t\tcolor = colors[imClass(i, j).x() % 256];\r\n\r\n\t\t\t\timClassColor(i, j) = color;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn imClassColor;\r\n\t}\r\n\r\n\tvoid showFloat(const Image<float, 1> & im, bool logScale, double min, double max) {\r\n\t\tImage<unsigned char, 1> imIntensity(im.w(), im.h());\r\n\t\tImage<unsigned char, 3> imColor(im.w(), im.h());\r\n\r\n\t\tif (min == -DBL_MAX && max == DBL_MAX) {\r\n\t\t\tcv::minMaxLoc(im.toOpenCV(), &min, &max);\r\n\t\t}\r\n\t\telse if (min == -DBL_MAX) {\r\n\t\t\tdouble drop;\r\n\t\t\tcv::minMaxLoc(im.toOpenCV(), &min, &drop);\r\n\t\t}\r\n\t\telse if (max == DBL_MAX) {\r\n\t\t\tdouble drop;\r\n\t\t\tcv::minMaxLoc(im.toOpenCV(), &drop, &max);\r\n\t\t}\r\n\r\n\t\tif (logScale) {\r\n\t\t\tmin = log(min);\r\n\t\t\tmax = log(max);\r\n\t\t}\r\n\r\n\t\tfor (unsigned int j = 0; j < im.h(); j++) {\r\n\t\t\tfor (unsigned int i = 0; i < im.w(); i++) {\r\n\t\t\t\tif (logScale)\r\n\t\t\t\t\timIntensity(i, j).x() = static_cast<unsigned char>(std::max(0.0, std::min((log(im(i, j).x()) - min) * 255 / (max - min), 255.0)));\r\n\t\t\t\telse\r\n\t\t\t\t\timIntensity(i, j).x() = static_cast<unsigned char>(std::max(0.0, std::min((im(i, j).x() - min) * 255 / (max - min), 255.0)));\r\n\t\t\t}\r\n\t\t}\r\n\t\tcv::Mat colorMat;\r\n\t\tcv::applyColorMap(imIntensity.toOpenCV(), colorMat, cv::COLORMAP_PARULA);\r\n\t\timColor.fromOpenCVBGR(colorMat);\r\n\t\tshow(imColor);\r\n\t}\r\n\r\n\tcv::Mat duplicate3(cv::Mat c) {\r\n\t\tcv::Mat out;\r\n\t\tcv::Mat in[] = { c, c, c };\r\n\t\tcv::merge(in, 3, out);\r\n\t\treturn out;\r\n\t}\r\n\r\n\t// Adopted from http://www.64lines.com/jpeg-width-height. Gets the JPEG size from the file stream passed\r\n\t// to the function, file reference: http://www.obrador.com/essentialjpeg/headerinfo.htm\r\n\tsibr::Vector2i IImage::get_jpeg_size(std::ifstream& file)\r\n\t{\r\n\t\t// Check for valid JPG\r\n\t\tif (file.get() != 0xFF || file.get() != 0xD8)\r\n\t\t\treturn Eigen::Vector2i(-1, -1);\r\n\t\tfile.get(); file.get(); // Skip the rest of JPG identifier.\r\n\r\n\t\tstd::streampos block_length = static_cast<std::streampos>(file.get() * 256 + file.get() - 2);\r\n\t\tfor (;;)\r\n\t\t{\r\n\t\t\t// Skip the first block since it doesn't contain the resolution\r\n\t\t\tfile.seekg(file.tellg() + block_length);\r\n\r\n\t\t\t// Check if we are at the start of another block\r\n\t\t\tif (!file.good() || file.get() != 0xFF)\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// If the block is not the \"Start of frame\", skip to the next block\r\n\t\t\tif (file.get() != 0xC0)\r\n\t\t\t{\r\n\t\t\t\tblock_length = static_cast<std::streampos>(file.get() * 256 + file.get() - 2);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// Found the appropriate block. Extract the dimensions.\r\n\t\t\tfor (int i = 0; i < 3; ++i) file.get();\r\n\r\n\t\t\tint height = file.get() * 256 + file.get();\r\n\t\t\tint width = file.get() * 256 + file.get();\r\n\t\t\treturn sibr::Vector2i(width, height);\r\n\t\t}\r\n\t\treturn sibr::Vector2i(-1, -1);\r\n\t}\r\n\r\n\t// Adopted from http://stackoverflow.com/questions/22638755/image-dimensions-without-loading\r\n\t// kudos to Lukas (http://stackoverflow.com/users/643315/lukas).\r\n\tsibr::Vector2i IImage::imageResolution(const std::string& file_path)\r\n\t{\r\n\t\tenum ValidFormats {\r\n\t\t\tPNG = 0,\r\n\t\t\tBMP,\r\n\t\t\tTGA,\r\n\t\t\tJPG,\r\n\t\t\tJPEG,\r\n\t\t\tVALID_COUNT\r\n\t\t};\r\n\r\n\t\tstd::string valid_extensions[] = {\r\n\t\t\t\"png\",\r\n\t\t\t\"bmp\",\r\n\t\t\t\"tga\",\r\n\t\t\t\"jpg\",\r\n\t\t\t\"jpeg\"\r\n\t\t};\r\n\r\n\t\tstd::string extension = sibr::to_lower(sibr::getExtension(file_path));\r\n\t\t\r\n\t\tint extension_id = 0;\r\n\t\twhile (extension_id < VALID_COUNT &&\r\n\t\t\textension != valid_extensions[extension_id])\r\n\t\t\textension_id++;\r\n\r\n\t\tif (extension_id == VALID_COUNT)\r\n\t\t\treturn Eigen::Vector2i(-1, -1);\r\n\r\n\t\tstd::ifstream file(file_path, std::ios::binary);\r\n\t\tif (!file.good())\r\n\t\t\treturn Eigen::Vector2i(-1, -1);\r\n\r\n\t\tuint32_t temp = 0;\r\n\t\tint32_t  width = -1;\r\n\t\tint32_t  height = -1;\r\n\t\tswitch (extension_id)\r\n\t\t{\r\n\t\tcase PNG:\r\n\t\t\tfile.seekg(16);\r\n\t\t\tfile.read(reinterpret_cast<char*>(&width), 4);\r\n\t\t\tfile.read(reinterpret_cast<char*>(&height), 4);\r\n\t\t\twidth = sibr::ByteStream::ntohl(width);\r\n\t\t\theight = sibr::ByteStream::ntohl(height);\r\n\t\t\tbreak;\r\n\t\tcase BMP:\r\n\t\t\tfile.seekg(14);\r\n\t\t\tfile.read(reinterpret_cast<char*>(&temp), 4);\r\n\t\t\tif (temp == 40) // Windows Format\r\n\t\t\t{\r\n\t\t\t\tfile.read(reinterpret_cast<char*>(&width), 4);\r\n\t\t\t\tfile.read(reinterpret_cast<char*>(&height), 4);\r\n\t\t\t}\r\n\t\t\telse if (temp == 20) // MAC Format\r\n\t\t\t{\r\n\t\t\t\tfile.read(reinterpret_cast<char*>(&width), 2);\r\n\t\t\t\tfile.read(reinterpret_cast<char*>(&height), 2);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase TGA:\r\n\t\t\tfile.seekg(12);\r\n\t\t\tfile.read(reinterpret_cast<char*>(&width), 2);\r\n\t\t\tfile.read(reinterpret_cast<char*>(&height), 2);\r\n\t\t\tbreak;\r\n\t\tcase JPG:\r\n\t\tcase JPEG:\r\n\t\t\treturn get_jpeg_size(file);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\treturn sibr::Vector2i(width, height);\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Image.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/system/ByteStream.hpp\"\n\n# pragma warning(push, 0)\n#  include <opencv2/core/core.hpp>\n#  include <opencv2/imgproc/imgproc.hpp>\n#  include <opencv2/highgui/highgui.hpp>\n#  include <boost/filesystem.hpp>\n# pragma warning(pop)\n\n#include <utility>\n#include <vector>\n\nnamespace cv\n{\n\t/** Extend OpenCV support for Eigen types. \n\t\\ingroup sibr_graphics\n\t*/\n\t/*template <typename T_Type, int cn>\n\tclass DataType<Eigen::Matrix<T_Type, cn, 1, Eigen::DontAlign> >\n\t{\n\tpublic:\n\t\ttypedef Eigen::Matrix<T_Type, cn, 1, Eigen::DontAlign> value_type; ///< Vector type.\n\t\ttypedef Eigen::Matrix<typename DataType<T_Type>::work_type, cn, 1, Eigen::DontAlign> work_type; ///< Wrapper type.\n\t\ttypedef T_Type channel_type; ///< Component type.\n\t\ttypedef value_type vec_type; ///< Vector type.\n\t\tenum { generic_type = 0, depth = DataDepth<channel_type>::value, channels = cn, fmt = ((channels - 1) << 8) + DataDepth<channel_type>::fmt, type = CV_MAKETYPE(depth, channels) };\n\t};*/\n}\n\nnamespace sibr\n{\n\n\t/**\n\t* \\addtogroup sibr_graphics\n\t* @{\n\t*/\n\n\tnamespace opencv\n\t{\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <typename T_Type>\n\t\tSIBR_GRAPHICS_EXPORT int\t\timageType(void);// { return -1; } // default, unknown\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< uint8 >(void) { return CV_8U; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< int8  >(void) { return CV_8S; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< uint16>(void) { return CV_16U; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< int16 >(void) { return CV_16S; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< int32 >(void) { return CV_32S; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< float >(void) { return CV_32F; }\n\t\t/** \\return the OpenCV type corresponding to a C type. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline int\t\timageType< double>(void) { return CV_64F; }\n\n\t\t/** \\return the size of the range of values a type can take when used in OpenCV. */\n\t\ttemplate <typename T_Type>\n\t\tinline float\t\t\timageTypeRange(void) {\n\t\t\treturn (float)std::numeric_limits<T_Type>::max();//-std::numeric_limits<T_Type>::min();\n\t\t}\n\t\t/** \\return the size of the range of values a type can take when used in OpenCV. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline float\t\t\timageTypeRange< float >(void) { return 1.f; }\n\t\t/** \\return the size of the range of values a type can take when used in OpenCV. */\n\t\ttemplate <> SIBR_GRAPHICS_EXPORT inline float\t\t\timageTypeRange< double>(void) { return 1.f; }\n\n\t\t/** Get the size of the range of values an OpenCV type can take.\n\t\t\\param cvDepth the OpenCV type depth\n\t\t\\return the size of the range\n\t\t*/\n\t\tSIBR_GRAPHICS_EXPORT float\t\t\timageTypeCVRange(int cvDepth);\n\n\t\t/** Convert a BGR cv::Mat into a RGB cv::Mat, in-place.\n\t\t\\param dst the matrix to convert\n\t\t*/\n\t\tSIBR_GRAPHICS_EXPORT void\t\t\tconvertBGR2RGB(cv::Mat& dst);\n\n\t\t/** Convert a BGR cv::Mat into a RGB cv::Mat, in-place.\n\t\t\\param dst the matrix to convert\n\t\t*/\n\t\tSIBR_GRAPHICS_EXPORT void\t\t\tconvertRGB2BGR(cv::Mat& dst);\n\t}\n\n\ttypedef\tVector4f ColorRGBA;\n\n\t/** @} */\n\n\t/**\n\t* Interface virtual class for all the templated image classes.\n\t* Contains all functions not making reference to the internal type or numComp in their signature/return type\n\t* \\sa Image\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT IImage {\n\tpublic:\n\t\tSIBR_CLASS_PTR(IImage);\n\n\t\t/** Load an image from the disk (png, jpeg, exr, etc., see OpenCV cv::imread documentation for more details).\n\t\t\\param filename the path to the file\n\t\t\\param verbose display additional informations\n\t\t\\param warning_if_not_found log if the file doesn't exist, even if verbose is set to false\n\t\t\\return a success flag\n\t\t*/\n\t\tvirtual bool\t\t\tload(const std::string& filename, bool verbose = true, bool warning_if_not_found = true) = 0;\n\t\t\n\t\t/** Load an image from the disk (stored as a raw binary blob).\n\t\t\\param filename the path to the file\n\t\t\\param verbose display additional informations\n\t\t\\return a success flag\n\t\t*/\n\t\tvirtual bool\t\t\tloadByteStream(const std::string& filename, bool verbose = true) = 0;\n\n\t\t/** Save an image to the disk (png, jpeg, see OpenCV cv::imwrite documentation for more details).\n\t\t\\param filename the path to the file\n\t\t\\param verbose display additional informations\n\t\t\\warning HDR images will be converted to LDR, \\sa saveHDR .\n\t\t\\warning Some image formats can't be stored in some file formats.\n\t\t*/\n\t\tvirtual void\t\t\tsave(const std::string& filename, bool verbose = true) const = 0;\n\n\t\t/** Save an image to the disk (as a raw binary blob).\n\t\t\\param filename the path to the file\n\t\t\\param verbose display additional informations\n\t\t*/\n\t\tvirtual void\t\t\tsaveByteStream(const std::string& filename, bool verbose = true) const = 0;\n\n\t\t/** Save an HDR image to the disk (exr, hdr, see OpenCV cv::imwrite documentation for more details).\n\t\t\\param filename the path to the file\n\t\t\\param verbose display additional informations\n\t\t*/\n\t\tvirtual void\t\t\tsaveHDR(const std::string& filename, bool verbose = true) const = 0;\n\n\t\t/** \\return the image width. */\n\t\tvirtual uint\t\t\tw(void) const = 0;\n\n\t\t/** \\return the image height. */\n\t\tvirtual uint\t\t\th(void) const = 0;\n\n\t\t/** \\return the image size. */\n\t\tvirtual sibr::Vector2u\tsize(void) const = 0;\n\n\t\t/** Check if a pixel (x,y) is inside the image boundaries.\n\t\t\\param xy the pixel coordinates\n\t\t\\return true if 0<=x<w and 0<=y=<h */\n\t\tvirtual bool\t\t\tisInRange(const ::sibr::Vector2i & xy)  const = 0;\n\n\t\t/** Get the value stored at a pixel and convert it to a string representation.\n\t\t\\param xy the pixel coordinates\n\t\t\\return a string representation of the pixel value.\n\t\t*/\n\t\tvirtual std::string\t\tpixelStr(const ::sibr::Vector2i & xy)  const = 0;\n\n\t\t/** \\return the number of components of the image. */\n\t\tvirtual uint\t\t\tnumComp(void) const = 0;\n\n\t\t/** \\return the size of a pixel value in bytes. */\n\t\tvirtual uint\t\t\tsizeOfComp(void) const = 0;\n\n\t\t/** Flip the image along the horizontal axis. */\n\t\tvirtual void\t\t\tflipH(void) = 0;\n\n\t\t/** Flip the image along the vertical axis. */\n\t\tvirtual void\t\t\tflipV(void) = 0;\n\n\t\t/** \\return the image OpenCV type. */\n\t\tvirtual int\t\t\t\topencvType(void) const = 0;\n\n\t\t/** \\return a reference to the underlying OpenCV matrix. */\n\t\tvirtual const cv::Mat&\ttoOpenCV(void) const = 0;\n\n\t\t/** \\return a reference to the underlying OpenCV matrix. */\n\t\tvirtual cv::Mat&\t\ttoOpenCVnonConst(void) = 0;\n\n\t\t/** \\return a copy of the matrix with channels flipped.\n\t\t\\note Only applies to 3 and 4 channel images.\n\t\t*/\n\t\tvirtual cv::Mat\t\t\ttoOpenCVBGR(void) const = 0;\n\n\t\t/** Replace the content of the image with the content of another matrix.\n\t\t\\param img the new matrix\n\t\t*/\n\t\tvirtual void\t\t\tfromOpenCV(const cv::Mat& img) = 0;\n\n\t\t/** Replace the content of the image with the content of another matrix, flipping channels.\n\t\t\\param img the new matrix\n\t\t\\note Only applies to 3 and 4 channel images.\n\t\t*/\n\t\tvirtual void\t\t\tfromOpenCVBGR(const cv::Mat& img) = 0;\n\n\t\t/** Get the size of jpeg image file by reading its header.\n\t\t\\param file the input filestream, already opened.\n\t\t\\return The size (width,heighgt) else (-1, -1) if the header cannot be read .\n\t\t*/\n\t\tstatic sibr::Vector2i\t\t\tget_jpeg_size(std::ifstream& file);\n\n\t\t/** Get the size of an image file from its header. Supported file type: {png, jpg, jpeg, bmp, tga}.\n\t\t\\param file_path the input file path\n\t\t\\return The size (width,heighgt) else (-1, -1) if the header cannot be read .\n\t\t*/\n\t\tstatic sibr::Vector2i\t\t\timageResolution(const std::string& file_path);\n\n\t};\n\n\n\t/** Wrapper around an image pointer.\n\t* \\ingroup sibr_graphics */\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tclass ImagePtr;\n\n\t/**\n\t* This class is used to store images. Internally, a cv::Mat\n\t* is used. The template parameter define a fixed size/format that\n\t* will be used to convert automatically the image format when\n\t* you load or copy from another image.\n\t* \\warning We disallow copy as we would have to do a costly in-depth copy of the underlying cv::Mat.\n\t* If you store images in a vector attribute of a class, you might have to SIBR_DISALLOW_COPY of your class.\n\t* \\note OpenCV uses generally BGR channels (e.g. after loading an image file). \n\t* However the internal cv::Mat of this class stores\n\t* RGB channels. You can get RGB cv::Mat with toOpenCV() or use\n\t* toOpenCVBGR(). (Most of OpenCV's features works with RGB too but\n\t* not imshow, imwrite, imread.)\n\t* \\ingroup sibr_graphics\n\t*/\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tclass Image : public IImage {\n\tpublic:\n\t\ttypedef T_Type\t\t\t\t\t\tType;\n\t\ttypedef ImagePtr<T_Type, T_NumComp> Ptr;\n\n\t\ttypedef Eigen::Matrix<T_Type, T_NumComp, 1, Eigen::DontAlign> Pixel;\n\t\tenum { e_NumComp = T_NumComp };\n\n\tpublic:\n\n\t\t/// Default constructor.\n\t\tImage(void);\n\n\t\t/** Constructor.\n\t\t\\param width image width\n\t\t\\param height image height\n\t\t\\warning The image content will be undefined.\n\t\t*/\n\t\tImage(uint width, uint height);\n\n\t\t/** Constructor.\n\t\t\\param width image width\n\t\t\\param height image height\n\t\t\\param init default value to use for all components of all pixels\n\t\t*/\n\t\tImage(uint width, uint height, const T_Type& init);\n\n\t\t/** Constructor.\n\t\t\\param width image width\n\t\t\\param height image height\n\t\t\\param init default value to use for all pixels\n\t\t*/\n\t\tImage(uint width, uint height, const Pixel& init);\n\n\t\t/** Move constructor.\n\t\t\\param other image to move, don't use after move\n\t\t*/\n\t\tImage(Image&& other);\n\n\t\t/** Move operator.\n\t\t\\param other image to move, don't use after move\n\t\t*/\n\t\tImage& operator=(Image&& other) noexcept;\n\n\t\tImage& fill(Pixel const& value);\n\n\t\t/**\n\t\t\\copydoc IImage::load\n\t\t*/\n\t\tbool\t\tload(const std::string& filename, bool verbose = true, bool warning_if_not_found = true);\n\n\t\t/**\n\t\t\\copydoc IImage::loadByteStream\n\t\t*/\n\t\tbool\t\tloadByteStream(const std::string& filename, bool verbose = true);\n\t\t\n\t\t/**\n\t\t\\copydoc IImage::save\n\t\t*/\n\t\tvoid\t\tsave(const std::string& filename, bool verbose = true) const;\n\n\t\t/**\n\t\t\\copydoc IImage::saveByteStream\n\t\t*/\n\t\tvoid\t\tsaveByteStream(const std::string& filename, bool verbose = true) const;\n\n\t\t/**\n\t\t\\copydoc IImage::saveHDR\n\t\t*/\n\t\tvoid\t\tsaveHDR(const std::string& filename, bool verbose = true) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tconst Pixel&\toperator()(uint x, uint y) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tPixel&\t\t\toperator()(uint x, uint y);\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tconst Pixel&\toperator()(const sibr::Vector2i & xy) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tPixel&\t\t\toperator()(const sibr::Vector2i & xy);\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tconst Pixel&\toperator()(const ::sibr::Vector2f & xy) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tPixel&\t\t\toperator()(const ::sibr::Vector2f & xy);\n\n\t\t/** \\copydoc IImage::pixelStr */\n\t\tvirtual std::string\t\tpixelStr(const ::sibr::Vector2i & xy)  const;\n\n\t\t/** \\return a pointer to the raw image data. */\n\t\tconst void*\t\tdata(void) const;\n\n\t\t/** \\return a pointer to the raw image data. */\n\t\tvoid*\t\t\tdata(void);\n\n\n\t\t/** Convert a pixel value to a 4 components float vector (in 0,1).\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return the normalized expanded value\n\t\t*/\n\t\tColorRGBA\t color(uint x, uint y) const;\n\n\t\t/** Set a pixel value from 4 components float vector (in 0,1).\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\param c the new value\n\t\t*/\n\t\tvoid\t\t color(uint x, uint y, const ColorRGBA& c);\n\n\t\t/** Helper to convert a 4 components float vector (in 0,1) to the proper pixel format.\n\t\t\\param rgba the value to convert\n\t\t\\return the converted value\n\t\t*/\n\t\tstatic Pixel color(const ColorRGBA& rgba);\n\n\t\t/** Generate a resized version of the current image.\n\t\t\\param width the target width\n\t\t\\param height the target height\n\t\t\\param cv_interpolation_method the up/down scaling method\n\t\t\\return the resized image\n\t\t*/ \n\t\tImage\t\tresized(int width, int height, int cv_interpolation_method = cv::INTER_LINEAR) const;\n\t\t\n\t\t/** Generate a resized version of the current image so that the maximum \n\t\tdimension (either width or height) is now equal to maxlen. Preserve the original ratio.\n\t\tExample: src is 2048x1024, resizedMax(1024) -> dst is 1024x512\n\t\t\\param maxlen the target maximum dimension value\n\t\t\\return the resized image\n\t\t*/ \n\t\tImage\t\tresizedMax(int maxlen) const;\n\n\t\t/** \\return a deep copy of the image. */\n\t\tImage\t\tclone(void) const;\n\n\t\t/** \\return a pointer to a deep copy of the image. */\n\t\tImagePtr<T_Type, T_NumComp>\t  clonePtr(void) const;\n\n\t\t/** \\return the image width. */\n\t\tuint\t\t\tw(void) const;\n\n\t\t/** \\return the image height. */\n\t\tuint\t\t\th(void) const;\n\n\t\t/** \\return the image size. */\n\t\tsibr::Vector2u size(void) const;\n\n\t\t/** Check if a pixel (x,y) is inside the image boundaries.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return true if 0<=x<w and 0<=y=<h */\n\t\ttemplate <typename T>\n\t\tbool\t\t\tisInRange(T x, T y) const { return (x >= 0 && y >= 0 && x < (T)w() && y < (T)h()); }\n\n\t\t/** Check if a pixel (x,y) is inside the image boundaries.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return true if 0<=x<w and 0<=y=<h \n\t\t\\todo Duplicate call used in inpainting, remove.\n\t\t*/\n\t\ttemplate <typename T>\n\t\tbool\t\t\tinRange(T x, T y) const { return isInRange(x, y); }\n\n\t\t/** Check if a pixel (x,y) is inside the image boundaries.\n\t\t\\param xy the pixel coordinates\n\t\t\\return true if 0<=x<w and 0<=y=<h */\n\t\tbool\t\t\tisInRange(const sibr::Vector2i & xy)  const { return (xy.x() >= 0 && xy.y() >= 0 && xy.x() < (int)w() && xy.y() < (int)h()); }\n\t\t\n\t\t/** Check if a pixel (x,y) is inside the image boundaries.\n\t\t\\param xy the pixel coordinates\n\t\t\\return true if 0<=x<w and 0<=y=<h */\n\t\tbool\t\t\tisInRange(const sibr::Vector2f & xy)  const { return (xy.x() >= 0 && xy.y() >= 0 && xy.x() < (float)w() && xy.y() < (float)h()); }\n\n\t\t/** \\copydoc IImage::numComp */\n\t\tuint\t\tnumComp(void) const;\n\n\t\t/** \\copydoc IImage::sizeOfComp */\n\t\tuint\t\tsizeOfComp(void) const;\n\n\t\t/** \\copydoc IImage::flipH */\n\t\tvoid\t\tflipH(void);\n\n\t\t/** \\copydoc IImage::flipV */\n\t\tvoid\t\tflipV(void);\n\n\t\t/** \\copydoc IImage::opencvType */\n\t\tint\t\t\t\topencvType(void) const { return CV_MAKETYPE(opencv::imageType<T_Type>(), T_NumComp); }\n\n\t\t/** \\copydoc IImage::toOpenCV */\n\t\tconst cv::Mat&\ttoOpenCV(void) const { return _pixels; }\n\n\t\t/** \\copydoc IImage::toOpenCVnonConst */\n\t\tcv::Mat&\t\ttoOpenCVnonConst(void) { return _pixels; }\n\t\t\n\t\t/** \\copydoc IImage::toOpenCVBGR */\n\t\tcv::Mat\t\t\ttoOpenCVBGR(void) const;\n\t\t\n\t\t/** \\copydoc IImage::fromOpenCV */\n\t\tvoid\t\t\tfromOpenCV(const cv::Mat& img);\n\t\t\n\t\t/** \\copydoc IImage::fromOpenCVBGR */\n\t\tvoid\t\t\tfromOpenCVBGR(const cv::Mat& img);\n\n\t\t/** Find the component-wise minimum and maximum values contained in the image.\n\t\t\\param minImage will contain the minimum value\n\t\t\\param maxImage will contain the maximum value\n\t\t*/\n\t\tvoid findMinMax(Pixel& minImage, Pixel& maxImage);\n\n\t\t/** Rescale an image content in a defined range.\n\t\t\\param minValue the lower value of the range\n\t\t\\param maxValue the upper value of the range\n\t\t*/\n\t\tvoid remap(const Pixel& minValue, const Pixel& maxValue);\n\n\t\t/** Cast into another image type.\n\t\t\\return the converted image\n\t\t*/\n\t\ttemplate<class T_Image> T_Image cast() const {\n\t\t\tT_Image b;\n\t\t\tb.fromOpenCV(toOpenCV());\n\t\t\treturn b;\n\t\t}\n\n\t\t/** Fetch bilinear interpolated value from floating point pixel coordinates.\n\t\t\t\\param pixel query position in [0,w[x[0,h[\n\t\t\t\\return the interpolated value\n\t\t*/\n\t\tPixel bilinear(const sibr::Vector2f & pixel) const;\n\n\t\t/** Fetch bicubic interpolated value from floating point pixel coordinates.\n\t\t\t\\param pixelPosition query position in [0,w[x[0,h[\n\t\t\t\\return the interpolated value\n\t\t*/\n\t\tPixel bicubic(const sibr::Vector2f & pixelPosition) const;\n\n\t\t/** Disallow copy constructor.\n\t\t\\param other image to copy\n\t\t*/\n\t\tImage( const Image& other) = delete;\n\n\t\t/** Disallow copy operator.\n\t\t\\param other image to copy\n\t\t*/\n\t\tImage& \t\toperator =(const Image& other) = delete;\n\n\tprotected:\n\n\t\t/** Helper for bicubic interpolation.\n\t\t\\param t blend factor\n\t\t\\param colors colors at the four corners\n\t\t\\return interpolated value\n\t\t*/\n\t\tstatic Eigen::Matrix<float, T_NumComp, 1, Eigen::DontAlign> monoCubic(float t, const Eigen::Matrix<float, T_NumComp, 4, Eigen::DontAlign>& colors);\n\n\t\tcv::Mat\t\t\t_pixels; ///< Pixels stored in RGB format\n\t};\n\n\t/** Provides a wrapper around a pointer to an image. \n\t\\ingroup sibr_graphics\n\t*/\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tclass ImagePtr {\n\tpublic:\n\t\t\n\t\tusing ImageType = Image<T_Type, T_NumComp>; ///< Underlying image type.\n\n\t\tstd::shared_ptr<Image<T_Type, T_NumComp>> imPtr; ///< Pointer type.\n\t\t\n\t\t/// Default constructor.\n\t\tImagePtr() { imPtr = std::shared_ptr<Image<T_Type, T_NumComp>>(); };\n\n\t\t/** Constructor from a raw pointer.\n\t\t\\param imgPtr the raw pointer to wrap\n\t\t*/\n\t\tImagePtr(Image<T_Type, T_NumComp>* imgPtr) { imPtr = std::shared_ptr<Image<T_Type, T_NumComp>>(imgPtr); };\n\t\t\n\t\t/** Constructor from a shared pointer.\n\t\t\\param imgPtr the shared pointer to wrap\n\t\t*/\n\t\tImagePtr(const std::shared_ptr<Image<T_Type, T_NumComp>>& imgPtr)  {imPtr = std::shared_ptr<Image<T_Type, T_NumComp>>(imgPtr); };\n\n\t\t/** Generate a pointer by cloning an image.\n\t\t\\param img the image to clone\n\t\t\\return the pointer\n\t\t*/\n\t\tstatic ImagePtr fromImg(const ImageType & img) { return ImagePtr(std::make_shared<Image<T_Type, T_NumComp>>(img.clone())); };\n\n\t\t/** Set a new pointee.\n\t\t\\param ptr the new image pointer\n\t\t*/\n\t\tvoid reset(ImageType * ptr) { imPtr.reset(ptr); };\n\n\t\t/** \\return the image */\n\t\tImage<T_Type, T_NumComp>*\tget() { return imPtr.get(); };\n\n\t\t/** Pixel accessor.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tconst typename Image<T_Type, T_NumComp>::Pixel&\t\t\toperator()(uint x, uint y) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param x x coordinate\n\t\t\\param y y coordinate\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\ttypename Image<T_Type, T_NumComp>::Pixel&\t\t\t\toperator()(uint x, uint y);\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\tconst typename Image<T_Type, T_NumComp>::Pixel&\t\t\toperator()(const sibr::Vector2i & xy) const;\n\n\t\t/** Pixel accessor.\n\t\t\\param xy pixel coordinates\n\t\t\\return a reference to the pixel value.\n\t\t*/\n\t\ttypename Image<T_Type, T_NumComp>::Pixel&\t\t\t\toperator()(const sibr::Vector2i & xy);\n\n\t\t/** \\return the dereferenced image */\n\t\tImage<T_Type, T_NumComp>&\t\t\t\t\t\t\t\toperator * () { return imPtr.operator*(); };\n\n\t\t/** \\return the dereferenced image */\n\t\tconst Image<T_Type, T_NumComp>&\t\t\t\t\t\t\toperator * () const { return imPtr.operator*(); };\n\n\t\t/** \\return raw pointer to the image */\n\t\tImage<T_Type, T_NumComp>*\t\t\t\t\t\t\t\toperator -> () { return imPtr.operator->(); };\n\n\t\t/** \\return raw pointer to the image */\n\t\tconst Image<T_Type, T_NumComp>*\t\t\t\t\t\t\toperator -> () const { return imPtr.operator->(); };\n\t\t\n\t\t/** Assign a shared ptr.\n\t\t\\param imgShPtr the shared pointer\n\t\t\\return a reference to the updated pointer\n\t\t*/ \n\t\tstd::shared_ptr<Image<T_Type, T_NumComp>> & \t\t\toperator = (std::shared_ptr<Image<T_Type, T_NumComp>> & imgShPtr) { imPtr = imgShPtr; return &imPtr; };\n\t\t\n\t\t/** \\return true if the image pointer is initialized. */\n\t\toperator bool() { return imPtr.get() != nullptr; };\n\n\t\t/** \\return true if the image pointer is initialized. */\n\t\toperator bool() const { return imPtr.get() != nullptr; };\n\n\t};\n\n\t/**\n\t* \\addtogroup sibr_graphics\n\t* @{\n\t*/\n\n\t/// Standard image types\n\ttypedef Image<unsigned char, 3> ImageRGB;\n\ttypedef Image<unsigned char, 4> ImageRGBA;\n\ttypedef Image<unsigned char, 1> ImageL8;\n\ttypedef Image<unsigned char, 2> ImageUV8;\n\ttypedef Image<unsigned short int, 3> ImageRGB16;\n\ttypedef Image<unsigned short int, 1> ImageL16;\n\ttypedef Image<float, 3>         ImageRGB32F;\n\ttypedef Image<float, 3>         ImageFloat3;\n\ttypedef Image<float, 4>         ImageRGBA32F;\n\ttypedef Image<float, 4>         ImageFloat4;\n\ttypedef Image<float, 1>         ImageL32F;\n\ttypedef Image<float, 1>         ImageFloat1;\n\ttypedef Image<float, 2>         ImageFloat2;\n\ttypedef Image<float, 2>         ImageUV32F;\n\ttypedef Image<bool, 1>          ImageBool1;\n\ttypedef Image<double, 1>        ImageDouble1;\n\ttypedef Image<double, 2>        ImageDouble2;\n\ttypedef Image<double, 3>        ImageDouble3;\n\ttypedef Image<double, 4>        ImageDouble4;\n\ttypedef Image<int, 1>        ImageInt1;\n\ttypedef Image<int, 2>        ImageInt2;\n\ttypedef Image<int, 3>        ImageInt3;\n\ttypedef Image<int, 4>        ImageInt4;\n\n\n\t/** Convert an integer ID map to a colored image using a different random color for each ID. Note that 255 is black.\n\t\\param imClass the ID map\n\t\\return a color coded map\n\t*/\n\tSIBR_GRAPHICS_EXPORT Image<unsigned char, 3> coloredClass(const Image<unsigned char, 1>::Ptr imClass);\n\n\t/** Convert an integer ID map to a colored image using a different random color for each ID. Note that 255 is black.\n\t\\param imClass the ID map\n\t\\return a color coded map\n\t*/\n\tSIBR_GRAPHICS_EXPORT Image<unsigned char, 3> coloredClass(const Image<int, 1>::Ptr imClass);\n\n\t/** Display a 32F image in a debug window, using the Parula colormap after normalizing the values.\n\t\\param im the float image to display\n\t\\param logScale display log(img)\n\t\\param min optional lower bound for the normalization\n\t\\param max optional upper bound for the normalization\n\t*/\n\tSIBR_GRAPHICS_EXPORT void showFloat(const Image<float, 1> & im, bool logScale = false, double min = -DBL_MAX, double max = DBL_MAX);\n\n\t/** Convert a L32F into a RGBA image while preserving bit-level representation.\n\tUseful to save float maps as PNG, and benefit from PNG compression on disk.\n\t\\param imgF the image to convert\n\t\\return the packed RGBA image \n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageRGBA convertL32FtoRGBA(const sibr::ImageL32F & imgF);\n\n\t/** Convert a RGBA into a L32F image while preserving bit-level representation.\n\tUseful to decode float maps stored as as PNG.\n\t\\param imgRGBA the image to convert\n\t\\return the unpacked float image \n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageL32F convertRGBAtoL32F(const sibr::ImageRGBA  & imgRGBA);\n\n\t/** Convert a RGB32F into a RGBA image (3 times wider) while preserving bit-level representation.\n\tUseful to save float maps as PNG, and benefit from PNG compression on disk.\n\t\\param imgF the image to convert\n\t\\return the packed RGBA image \n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageRGBA convertRGB32FtoRGBA(const sibr::ImageRGB32F & imgF);\n\n\t/** Convert a RGBA into a RGB32F image while preserving bit-level representation.\n\tUseful to decode float maps stored as as PNG.\n\t\\param imgRGBA the image to convert\n\t\\return the unpacked float image \n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageRGB32F convertRGBAtoRGB32F(const sibr::ImageRGBA & imgRGBA);\n\n\t/** Convert a RGB32 normal map into a UV16 map storing theta and phi as half floats, packed into a RGBA8.\n\t\\param imgF the XYZ normal map\n\t\\return the packed theta,phi normal map\n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageRGBA convertNormalMapToSphericalHalf(const sibr::ImageRGB32F & imgF);\n\n\t/** Convert a RGBA map, packing theta and phi as half floats, into a RGB32 normal map.\n\t\\param imgF packed theta,phi normal map\n\t\\return the XYZ normal map\n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::ImageRGB32F convertSphericalHalfToNormalMap(const sibr::ImageRGBA & imgF);\n\n\t/** Create a three channels cv::Mat by repeating a single channel cv::Mat.\n\t\\param c the input cv::Mat\n\t\\return a three channels cv::Mat\n\t*/\n\tSIBR_GRAPHICS_EXPORT cv::Mat duplicate3(cv::Mat c);\n\n\t/** Display an image into a popup OpenCV window.\n\t\\param img the image to display\n\t\\param windowTitle the window title\n\t\\param closeWindow close the window after key presses\n\t*/\n\ttemplate <typename T_Type, unsigned T_NumComp>\n\tstatic void\t\tshow(const Image<T_Type, T_NumComp> & img, const std::string& windowTitle = \"sibr::show()\", bool closeWindow = true) {\n\t\tcv::namedWindow(windowTitle, cv::WINDOW_AUTOSIZE | cv::WINDOW_KEEPRATIO | cv::WINDOW_GUI_EXPANDED);\n\t\t// Note: CV_GUI_EXPANDED does only work with Qt\n\t\t\n\t\tcv::imshow(windowTitle, img.toOpenCVBGR());\n\t\tcv::waitKey(0);\n\t\tif (closeWindow) {\n\t\t\tcv::destroyWindow(windowTitle);\n\t\t}\n\t}\n\n\t/*** @} */\n\n\t// ----- DEFINITIONS -------------\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>::Image(void) :\n\t\t_pixels(0, 0, opencvType()) { }\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>::Image(uint width, uint height) :\n\t\t_pixels(height, width, opencvType()) { }\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>::Image(uint width, uint height, const T_Type& init) :\n\t\t_pixels(height, width, opencvType(), init) { }\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>::Image(uint width, uint height, const Pixel& init)\n\t{\n\t\tcv::Scalar scal(0);\n\t\tfor (int i = 0; i < T_NumComp; i++)\n\t\t\tscal(i) = init(i);\n\n\t\t_pixels = cv::Mat(height, width, opencvType(), scal);\n\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>::Image(Image<T_Type, T_NumComp>&& other) {\n\t\toperator =(std::move(other));\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>& Image<T_Type, T_NumComp>::operator=(Image<T_Type, T_NumComp>&& other) noexcept {\n\t\t_pixels = std::move(other._pixels);\n\t\treturn *this;\n\t}\n\n\ttemplate <typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>& Image<T_Type, T_NumComp>::fill(Pixel const& value) {\n\t\tstd::fill(_pixels.begin<Pixel>(), _pixels.end<Pixel>(), value);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tconst void*\t\t\tImage<T_Type, T_NumComp>::data(void) const {\n\t\tSIBR_ASSERT(_pixels.isContinuous() == true); // if not true, you don't want to use this function\n\t\treturn _pixels.ptr();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid*\t\t\tImage<T_Type, T_NumComp>::data(void) {\n\t\tSIBR_ASSERT(_pixels.isContinuous() == true); // if not true, you don't want to use this function\n\t\treturn _pixels.ptr();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tcv::Mat\t\t\tImage<T_Type, T_NumComp>::toOpenCVBGR(void) const {\n\t\tcv::Mat out = toOpenCV().clone();\n\t\topencv::convertRGB2BGR(out);\n\t\treturn out;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\t\tImage<T_Type, T_NumComp>::fromOpenCVBGR(const cv::Mat& imgSrc) {\n\t\tcv::Mat img = imgSrc.clone();\n\t\topencv::convertBGR2RGB(img);\n\t\tfromOpenCV(img);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\t\tImage<T_Type, T_NumComp>::fromOpenCV(const cv::Mat& imgSrc) {\n\t\tcv::Mat img = imgSrc.clone();\n\n\t\tif (img.depth() != opencv::imageType<T_Type>())\n\t\t{\n\t\t\timg.convertTo(img, opencv::imageType<T_Type>(),\n\t\t\t\topencv::imageTypeRange<T_Type>() / opencv::imageTypeCVRange(img.depth()));\n\t\t}\n\n\t\tcv::Vec<T_Type, T_NumComp> p;\n\t\tif (img.channels() != T_NumComp)\n\t\t{\n\t\t\t_pixels = cv::Mat(img.rows, img.cols, opencvType());\n\t\t\tfor (int y = 0; y < img.rows; ++y)\n\t\t\t{\n\t\t\t\tfor (int x = 0; x < img.cols; ++x)\n\t\t\t\t{\n\t\t\t\t\tconst T_Type* ptr = img.ptr<T_Type>(y, x);\n\t\t\t\t\tassert(ptr != nullptr);\n\t\t\t\t\tuint i;\n\t\t\t\t\tfor (i = 0; i < (uint)img.channels() && i < T_NumComp; ++i)\n\t\t\t\t\t\tp[i] = ptr[i];\n\t\t\t\t\tfor (; i < T_NumComp && i < 3; ++i)\n\t\t\t\t\t\tp[i] = p[0];\n\t\t\t\t\tfor (; i < T_NumComp && i < 4; ++i)\n\t\t\t\t\t\tp[i] = static_cast<T_Type>(opencv::imageTypeRange<T_Type>());\n\n\t\t\t\t\t_pixels.at<cv::Vec<T_Type, T_NumComp>>(y, x) = p;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\t_pixels = img;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>\t\tImage<T_Type, T_NumComp>::clone(void) const {\n\t\tImage<T_Type, T_NumComp> img;\n\t\timg._pixels = _pixels.clone();\n\t\treturn img;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImagePtr<T_Type, T_NumComp>\t\tImage<T_Type, T_NumComp>::clonePtr(void) const {\n\t\tImagePtr<T_Type, T_NumComp> img(new Image<T_Type, T_NumComp>());\n\t\timg->_pixels = _pixels.clone();\n\t\treturn img;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tbool\t\tImage<T_Type, T_NumComp>::load(const std::string& filename, bool verbose, bool warning_if_not_found) {\n\t\tif (verbose)\n\t\t\tSIBR_LOG << \"Loading image file '\" << filename << \"'.\" << std::endl;\n\t\telse\n\t\t\tstd::cerr << \".\";\n\t\tcv::Mat img = cv::imread(filename, cv::IMREAD_UNCHANGED | cv::IMREAD_ANYDEPTH | cv::IMREAD_ANYCOLOR);\n\t\tif (img.data == nullptr)\n\t\t{\n\t\t\toperator =(Image<T_Type, T_NumComp>()); // reset mat\n\n\t\t\tif (warning_if_not_found) {\n\t\t\t\tSIBR_WRG << \"Image file not found '\" << filename << \"'.\" << std::endl;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t\topencv::convertBGR2RGB(img);\n\t\tfromOpenCV(img);\n\t\treturn true;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tbool\t\tImage<T_Type, T_NumComp>::loadByteStream(const std::string& filename, bool verbose) {\n\t\tif (verbose)\n\t\t\tSIBR_LOG << \"Loading image file '\" << filename << \"'.\" << std::endl;\n\t\telse\n\t\t\tstd::cerr << \".\";\n\n\n\t\tcv::Vec<T_Type, T_NumComp> p;\n\n\t\tsibr::ByteStream bs;\n\t\tif (!bs.load(filename))\n\t\t\tSIBR_WRG << \"Image file not found '\" << filename << \"'.\" << std::endl;\n\n\t\tint wIm;\n\t\tint hIm;\n\t\tbs >> wIm >> hIm;\n\n\t\t_pixels = cv::Mat(hIm, wIm, opencvType());\n\t\tfor (int y = 0; y < hIm; ++y)\n\t\t{\n\t\t\tfor (int x = 0; x < wIm; ++x)\n\t\t\t{\n\t\t\t\tuint i;\n\t\t\t\tfor (i = 0; i < T_NumComp; ++i)\n\t\t\t\t\tbs >> p[i];\n\n\t\t\t\t_pixels.at<cv::Vec<T_Type, T_NumComp>>(y, x) = p;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::save(const std::string& filename, bool verbose) const {\n\t\t{ // Create the output dir if doesn't exists\n\t\t\tboost::filesystem::path outdir = boost::filesystem::path(filename).parent_path();\n\t\t\tif (outdir.empty() == false)\n\t\t\t\tboost::filesystem::create_directories(outdir);\n\t\t}\n\n\t\t// Important Note:\n\t\t// If you have a problem when saving an image (e.g. black image) then\n\t\t// check the targeted image file format manages correctly the T_Type and\n\t\t// T_NumpComp you provide.\n\t\t// OpenCV doesn't seem to check always for such incompatibility (and just\n\t\t// save empty pixels)\n\n\t\tif (verbose)\n\t\t\tSIBR_LOG << \"Saving image file '\" << filename << \"'.\" << std::endl;\n\n\t\tcv::Mat img;\n\t\tif (T_NumComp == 1) {\n\t\t\tcv::cvtColor(toOpenCVBGR(), img, cv::COLOR_GRAY2BGR);\n\t\t} /// \\todo TODO: support for 2 channels images.\n\t\telse {\n\t\t\t// For 3 and 4 channels, leave the image untouched.\n\t\t\timg = toOpenCVBGR();\n\t\t}\n\n\t\tcv::Mat finalImage;\n\t\tif (T_NumComp == 4) {\n\t\t\tcv::Mat4b imageF_8UC4;\n\t\t\tdouble scale = 255.0 / (double)opencv::imageTypeRange<T_Type>();\n\t\t\timg.convertTo(imageF_8UC4, CV_8UC4, scale);\n\t\t\tfinalImage = imageF_8UC4;\n\t\t}\n\t\telse {\n\t\t\tcv::Mat3b imageF_8UC3;\n\t\t\tdouble scale = 255.0 / (double)opencv::imageTypeRange<T_Type>();\n\t\t\timg.convertTo(imageF_8UC3, CV_8UC3, scale);\n\t\t\tfinalImage = imageF_8UC3;\n\t\t}\n\n\t\tif (img.cols > 0 && img.rows > 0)\n\t\t{\n\t\t\tif (cv::imwrite(filename, finalImage) == false)\n\t\t\t\tSIBR_ERR << \"unknown error while saving image '\" << filename << \"'\"\n\t\t\t\t<< \" (do the targeted file format manages correctly the bpc ?)\" << std::endl;\n\t\t}\n\t\telse\n\t\t\tSIBR_WRG << \"failed to save (image is empty)\" << std::endl;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::saveHDR(const std::string& filename, bool verbose) const {\n\t\t{ // Create the output dir if doesn't exists\n\t\t\tboost::filesystem::path outdir = boost::filesystem::path(filename).parent_path();\n\t\t\tif (outdir.empty() == false)\n\t\t\t\tboost::filesystem::create_directories(outdir);\n\t\t}\n\n\t\tif (verbose)\n\t\t\tSIBR_LOG << \"Saving image file '\" << filename << \"'.\" << std::endl;\n\n\t\tcv::Mat img;\n\t\tif (T_NumComp == 1) {\n\t\t\tcv::cvtColor(toOpenCVBGR(), img, cv::COLOR_GRAY2BGR);\n\t\t} /// \\todo TODO: support for 2 channels images.\n\t\telse {\n\t\t\t// For 3 and 4 channels, leave the image untouched.\n\t\t\timg = toOpenCVBGR();\n\t\t}\n\n\t\tcv::Mat finalImage;\n\t\tif (T_NumComp == 4) {\n\t\t\tcv::Mat4f imageF_32FC4;\n\t\t\tdouble scale = 1.0 / (double)opencv::imageTypeRange<T_Type>();\n\t\t\timg.convertTo(imageF_32FC4, CV_32FC4, scale);\n\t\t\tfinalImage = imageF_32FC4;\n\t\t}\n\t\telse {\n\t\t\tcv::Mat3f imageF_32FC3;\n\t\t\tdouble scale = 1.0 / (double)opencv::imageTypeRange<T_Type>();\n\t\t\timg.convertTo(imageF_32FC3, CV_32FC3, scale);\n\t\t\tfinalImage = imageF_32FC3;\n\t\t}\n\n\t\tif (img.cols > 0 && img.rows > 0)\n\t\t{\n\t\t\tif (cv::imwrite(filename, finalImage) == false)\n\t\t\t\tSIBR_ERR << \"unknown error while saving image '\" << filename << \"'\"\n\t\t\t\t<< \" (do the targeted file format manages correctly the bpc ?)\" << std::endl;\n\t\t}\n\t\telse\n\t\t\tSIBR_WRG << \"failed to save (image is empty)\" << std::endl;\n\t}\n\n\ttemplate <typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::saveByteStream(const std::string& filename, bool verbose) const {\n\t\t{ // Create the output dir if doesn't exists\n\t\t\tboost::filesystem::path outdir = boost::filesystem::path(filename).parent_path();\n\t\t\tif (outdir.empty() == false)\n\t\t\t\tboost::filesystem::create_directories(outdir);\n\t\t}\n\t\tif (verbose)\n\t\t\tSIBR_LOG << \"Saving image file '\" << filename << \"'.\" << std::endl;\n\n\t\tsibr::ByteStream bs;\n\n\t\tint wIm = w();\n\t\tint hIm = h();\n\n\t\tif (wIm > 0 && hIm > 0) {\n\t\t\tbs << wIm << hIm;\n\t\t\tfor (int j = 0; j < hIm; j++) {\n\t\t\t\tfor (int i = 0; i < wIm; i++) {\n\t\t\t\t\tfor (int k = 0; k < T_NumComp; k++) {\n\t\t\t\t\t\tbs << _pixels.at<cv::Vec<T_Type, T_NumComp>>(j, i)[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbs.saveToFile(filename);\n\t\t}\n\t\telse\n\t\t\tSIBR_WRG << \"failed to save (image is empty)\" << std::endl;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline const typename Image<T_Type, T_NumComp>::Pixel&\t\tImage<T_Type, T_NumComp>::operator()(uint x, uint y) const {\n#ifndef NDEBUG\n\t\tif (!(x < w() && y < h())) {\n\t\t\tstd::cout << \" access (\" << x << \" , \" << y << \") while size is \" << w() << \" x \" << h() << std::endl;\n}\n#endif\n\t\tSIBR_ASSERT(x < w() && y < h());\n\t\treturn _pixels.at<typename Image<T_Type, T_NumComp>::Pixel>(y, x);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline const typename Image<T_Type, T_NumComp>::Pixel & ImagePtr<T_Type, T_NumComp>::operator()(uint x, uint y) const\n\t{\n\t\treturn (*imPtr)(x, y);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline typename Image<T_Type, T_NumComp>::Pixel&\t\tImage<T_Type, T_NumComp>::operator()(uint x, uint y) {\n#ifndef NDEBUG\n\t\tif (!(x < w() && y < h())) {\n\t\t\tstd::cout << \" access (\" << x << \" , \" << y << \") while size is \" << w() << \" x \" << h() << std::endl;\n\t\t}\n#endif\n\t\tSIBR_ASSERT(x < w() && y < h());\n\t\treturn _pixels.at<typename Image<T_Type, T_NumComp>::Pixel>(y, x);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline typename Image<T_Type, T_NumComp>::Pixel & ImagePtr<T_Type, T_NumComp>::operator()(uint x, uint y)\n\t{\n\t\treturn (*imPtr)(x, y);\n\t}\n\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline const typename Image<T_Type, T_NumComp>::Pixel& Image<T_Type, T_NumComp>::operator()(const sibr::Vector2i & xy) const {\n\t\treturn operator()(xy[0], xy[1]);\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline const typename Image<T_Type, T_NumComp>::Pixel & ImagePtr<T_Type, T_NumComp>::operator()(const sibr::Vector2i & xy) const\n\t{\n\t\treturn (*imPtr)(xy[0], xy[1]);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline typename Image<T_Type, T_NumComp>::Pixel& Image<T_Type, T_NumComp>::operator()(const sibr::Vector2i & xy) {\n\t\treturn operator()(xy[0], xy[1]);\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline typename Image<T_Type, T_NumComp>::Pixel & ImagePtr<T_Type, T_NumComp>::operator()(const sibr::Vector2i & xy)\n\t{\n\t\treturn (*imPtr)(xy[0], xy[1]);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline typename Image<T_Type, T_NumComp>::Pixel& Image<T_Type, T_NumComp>::operator()(const sibr::Vector2f & xy) {\n\t\treturn operator()((int)xy[0], (int)xy[1]);\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tinline const typename Image<T_Type, T_NumComp>::Pixel& Image<T_Type, T_NumComp>::operator() (const sibr::Vector2f & xy) const {\n\t\treturn operator()((int)xy[0], (int)xy[1]);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tColorRGBA\tImage<T_Type, T_NumComp>::color(uint x, uint y) const {\n\t\tSIBR_ASSERT(x < w() && y < h());\n\t\tfloat scale = 1.f / opencv::imageTypeRange<T_Type>();\n\t\tcv::Vec<T_Type, T_NumComp> v = _pixels.at<cv::Vec<T_Type, T_NumComp>>(y, x);\n\n\t\treturn ColorRGBA(v.val[0] * scale, v.val[1] * scale, v.val[2] * scale,\n\t\t\t(T_NumComp > 3) ? v.val[3] * scale : 1.f);\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::color(uint x, uint y, const ColorRGBA& rgba) {\n\t\tSIBR_ASSERT(x < w() && y < h());\n\t\tfloat scale = opencv::imageTypeRange<T_Type>();\n\t\tcv::Vec<T_Type, T_NumComp> v;//(p.data(), T_NumComp);\n\t\tfor (uint i = 0; i < T_NumComp; ++i) v[i] = T_Type(rgba[i] * scale);\n\t\t_pixels.at<cv::Vec<T_Type, T_NumComp>>(y, x) = v;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>\tImage<T_Type, T_NumComp>::resized(int width, int height, int cv_interpolation_method) const\n\t{\n\t\tif (width == w() && height == h())\n\t\t\treturn clone();\n\t\tImage dst;\n\t\tcv::resize(toOpenCV(), dst._pixels, cv::Size(width, height), 0, 0, cv_interpolation_method);\n\t\treturn dst;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tImage<T_Type, T_NumComp>\t\tImage<T_Type, T_NumComp>::resizedMax(int maxlen) const\n\t{\n\t\tfloat newWidth = (w() >= h()) ? maxlen : maxlen * ((float)w() / (float)h());\n\t\tfloat newHeight = (h() >= w()) ? maxlen : maxlen * ((float)h() / (float)w());\n\n\t\treturn resized((int)newWidth, (int)newHeight);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\ttypename Image<T_Type, T_NumComp>::Pixel Image<T_Type, T_NumComp>::color(const ColorRGBA& rgba) {\n\t\tfloat scale = opencv::imageTypeRange<T_Type>();\n\t\tPixel v;//(p.data(), T_NumComp);\n\t\tfor (uint i = 0; i < T_NumComp; ++i) v[i] = T_Type(rgba[i] * scale);\n\t\treturn v;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tstd::string Image<T_Type, T_NumComp>::pixelStr(const ::sibr::Vector2i & xy)  const {\n\t\tif (isInRange(xy)) {\n\t\t\tstd::stringstream ss;\n//\t\t\tss << \"( \" << operator()(xy).cast<std::conditional<std::is_same_v<T_Type, uchar>, int, T_Type>::type>().transpose() << \" )\";\nstd::cerr << \"PIXEL STR PB\" << std::endl;\nexit(1);\n\t\t\treturn  ss.str();\n\t\t}\n\t\treturn \"\";\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint\t\tImage<T_Type, T_NumComp>::w(void) const {\n\t\treturn _pixels.cols;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint\t\tImage<T_Type, T_NumComp>::h(void) const {\n\t\treturn _pixels.rows;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tsibr::Vector2u\tImage<T_Type, T_NumComp>::size(void) const {\n\t\treturn sibr::Vector2u(w(), h());\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint\t\tImage<T_Type, T_NumComp>::numComp(void) const {\n\t\treturn T_NumComp;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint\t\tImage<T_Type, T_NumComp>::sizeOfComp(void) const {\n\t\treturn sizeof(T_Type)*T_NumComp;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::flipH(void) {\n\t\tcv::flip(_pixels, _pixels, 0 /*!=0 means horizontal*/);\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::flipV(void) {\n\t\tcv::flip(_pixels, _pixels, 1 /*!=1 means vertical*/);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid Image<T_Type, T_NumComp>::findMinMax(Pixel& minImage, Pixel& maxImage) {\n\t\tfor (uint c = 0; c < T_NumComp; ++c) {\n\t\t\tminImage[c] = T_Type(opencv::imageTypeRange<Type>());\n\t\t\tmaxImage[c] = T_Type(-opencv::imageTypeRange<Type>());\n\t\t}\n\n\t\tPixel p;\n\t\tfor (uint y = 0; y < h(); ++y) {\n\t\t\tfor (uint x = 0; x < w(); ++x) {\n\t\t\t\tPixel v = operator()(x, y);\n\t\t\t\tfor (uint c = 0; c < T_NumComp; ++c) {\n\t\t\t\t\tminImage[c] = std::min(v[c], minImage[c]);\n\t\t\t\t\tmaxImage[c] = std::max(v[c], maxImage[c]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid\t\tImage<T_Type, T_NumComp>::remap(const Pixel& minVal, const Pixel& maxVal) {\n\t\tPixel minImage;\n\t\tPixel maxImage;\n\t\tfindMinMax(minImage, maxImage);\n\n\t\tPixel p;\n\t\tfor (uint y = 0; y < h(); ++y) {\n\t\t\tfor (uint x = 0; x < w(); ++x) {\n\t\t\t\tPixel v = operator()(x, y);\n\t\t\t\tfor (uint i = 0; i < T_NumComp; ++i)\n\t\t\t\t\tp[i] = minVal[i] + ((maxVal[i] - minVal[i])*(v[i] - minImage[i])) / (maxImage[i] - minImage[i]);\n\t\t\t\toperator()(x, y) = p;\n\t\t\t}\n\t\t}\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tEigen::Matrix<T_Type, T_NumComp, 1, Eigen::DontAlign> Image<T_Type, T_NumComp>::bilinear(const sibr::Vector2f & queryPosition) const\n\t{\n\t\tif (w() < 2 || h() < 2) {\n\t\t\treturn Eigen::Matrix<T_Type, T_NumComp, 1, Eigen::DontAlign>();\n\t\t}\n\n\t\tconst sibr::Vector2i cornerPixel = sibr::Vector2f((queryPosition - 0.5f*sibr::Vector2f(1, 1)).unaryExpr([](float f) { return std::floor(f); })).template cast<int>();\n\n\t\tconst sibr::Vector2f ts = queryPosition - (cornerPixel.cast<float>() + 0.5f*sibr::Vector2f(1, 1));\n\n\t\tconst sibr::Vector2i topLeft(0, 0), bottomRight(w() - 1, h() - 1);\n\n\t\tconst sibr::Vector2i mm = sibr::clamp<int, 2>(cornerPixel + sibr::Vector2i(0, 0), topLeft, bottomRight);\n\t\tconst sibr::Vector2i pm = sibr::clamp<int, 2>(cornerPixel + sibr::Vector2i(1, 0), topLeft, bottomRight);\n\t\tconst sibr::Vector2i mp = sibr::clamp<int, 2>(cornerPixel + sibr::Vector2i(0, 1), topLeft, bottomRight);\n\t\tconst sibr::Vector2i pp = sibr::clamp<int, 2>(cornerPixel + sibr::Vector2i(1, 1), topLeft, bottomRight);\n\t\treturn (\n\t\t\toperator()(mm).template cast<float>() * (1.0f - ts[0]) * (1.0f - ts[1]) +\n\t\t\toperator()(pm).template cast<float>() * ts[0] * (1.0f - ts[1]) +\n\t\t\toperator()(mp).template cast<float>() * (1.0f - ts[0]) * ts[1] +\n\t\t\toperator()(pp).template cast<float>() * ts[0] * ts[1]\n\t\t\t).template cast<T_Type>();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tEigen::Matrix<float, T_NumComp, 1, Eigen::DontAlign> Image<T_Type, T_NumComp>::monoCubic(float t, const Eigen::Matrix<float, T_NumComp, 4, Eigen::DontAlign> & colors)\n\t{\n\t\tstatic const Eigen::Matrix<float, 4, 4> M = 0.5f* (Eigen::Matrix<float, 4, 4>() <<\n\t\t\t0, 2, 0, 0,\n\t\t\t-1, 0, 1, 0,\n\t\t\t2, -5, 4, -1,\n\t\t\t-1, 3, -3, 1\n\t\t\t).finished().transpose();\n\n\t\treturn colors * (M*Eigen::Matrix<float, 4, 1>(1, t, t*t, t*t*t));\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tEigen::Matrix<T_Type, T_NumComp, 1, Eigen::DontAlign> Image<T_Type, T_NumComp>::bicubic(const sibr::Vector2f & queryPosition) const\n\t{\n\t\tstatic const std::vector<std::vector<sibr::Vector2i> > offsets = {\n\t\t\t{ { -1,-1 },{ 0,-1 } ,{ 1,-1 },{ 2,-1 } },\n\t\t\t{ { -1,0 },{ 0,0 } ,{ 1,0 },{ 2,0 } },\n\t\t\t{ { -1,1 },{ 0,1 } ,{ 1,1 },{ 2,1 } },\n\t\t\t{ { -1,2 },{ 0,2 } ,{ 1,2 },{ 2,2 } }\n\t\t};\n\n\t\ttypedef Eigen::Matrix<float, T_NumComp, 4, Eigen::DontAlign> ColorStack;\n\n\t\tif (w() < 4 || h() < 4) {\n\t\t\treturn Vector<T_Type, T_NumComp>();\n\t\t}\n\n\t\tconst sibr::Vector2i cornerPixel = (queryPosition - 0.5f*sibr::Vector2f(1, 1)).unaryExpr([](float f) { return std::floor(f); }).template cast<int>();\n\t\tconst sibr::Vector2f ts = queryPosition - (cornerPixel.cast<float>() + 0.5f*sibr::Vector2f(1, 1));\n\n\t\tColorStack colorsGrid[4];\n\t\tconst sibr::Vector2i topLeft(0, 0), bottomRight(w() - 1, h() - 1);\n\t\tfor (int i = 0; i < 4; ++i) {\n\t\t\tfor (int j = 0; j < 4; ++j) {\n\t\t\t\tconst sibr::Vector2i pixelPosition = cornerPixel + offsets[i][j];\n\t\t\t\tcolorsGrid[i].col(j) = operator()(sibr::clamp(pixelPosition, topLeft, bottomRight)).template cast<float>();\n\t\t\t}\n\t\t}\n\n\t\tColorStack bs;\n\t\tfor (int i = 0; i < 4; ++i) {\n\t\t\tbs.col(i) = monoCubic(ts[0], colorsGrid[i]);\n\t\t}\n\n\t\tVector<float, T_NumComp> resultFloat = monoCubic(ts[1], bs);\n\t\treturn (resultFloat.unaryExpr([](float f) { return sibr::clamp(f, 0.0f, sibr::opencv::imageTypeRange<T_Type>()); })).template cast<T_Type>();\n\t}\n\n\ttemplate <typename sibr_T, typename openCV_T, int N>\n\tinline Vector<sibr_T, N> fromOpenCV(const cv::Vec<openCV_T, N> & vec) {\n\t\tVector<sibr_T, N> out;\n\t\tfor (int i = 0; i < N; ++i) {\n\t\t\tout[i] = static_cast<sibr_T>(vec[i]);\n\t\t}\n\t\treturn out;\n\t}\n\n\ttemplate <typename openCV_T, typename sibr_T, int N>\n\tinline cv::Vec<openCV_T, N> toOpenCV(const Vector<sibr_T, N> & vec) {\n\t\tcv::Vec<openCV_T, N> out;\n\t\tfor (int i = 0; i < N; ++i) {\n\t\t\tout[i] = static_cast<openCV_T>(vec[i]);\n\t\t}\n\t\treturn out;\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Input.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/Input.hpp\"\n\nnamespace sibr\n{\n\n\t/*static*/ Input&\tInput::global( void )\n\t{\n\t\t/// \\todo TODO: add warning if no windows have been created\n\t\tstatic Input\tinstance;\n\t\tinstance._empty = false;\n\t\treturn instance;\n\t}\n\n\t/*static*/ void\t\tInput::poll( void )\n\t{\n\t\tsibr::Input::global().swapStates();\n\t\tglfwPollEvents();\n\t}\n\n\tInput Input::subInput(const sibr::Input & global, const sibr::Viewport & viewport, const bool mouseOutsideDisablesKeyboard)\n\t{\n\t\tInput sub = global;\n\t\tsub._mousePrevPos -= sibr::Vector2i(viewport.finalLeft(), viewport.finalTop());\n\t\tsub._mousePos -= sibr::Vector2i(viewport.finalLeft(), viewport.finalTop());\n\n\t\tif (!global.isInsideViewport(viewport)) {\n\t\t\tsub._mouseButton = MouseButton();\n\t\t\tsub._mouseScroll = 0;\n\n\t\t\tif (mouseOutsideDisablesKeyboard) {\n\t\t\t\tsub._keyboard = Keyboard();\t\t\t\t\n\t\t\t} \n\t\t\treturn sub;\t\t\n\t\t} \n\t\t\n\t\treturn sub;\t\n\t}\n\n\tbool Input::isInsideViewport(const sibr::Viewport & viewport) const\n\t{\n\t\tEigen::AlignedBox2i subBox;\n\t\tsubBox.extend(Vector2i(viewport.finalLeft(), viewport.finalTop()));\n\t\tsubBox.extend(Vector2i(viewport.finalRight(), viewport.finalBottom()));\n\n\t\treturn subBox.contains(mousePosition());\n\t}\n\n\tKeyCombination::KeyCombination() : numKeys(0), isTrue(true) { }\n\tKeyCombination::KeyCombination(int n, bool b) : numKeys(n), isTrue(b) { }\n\n\tKeyCombination::operator bool() const\n\t{\n\t\treturn isTrue && ( numKeys == sibr::Input::global().key().getNumActivated() );\n\t}\t\n\n\tKeyCombination operator&& ( const KeyCombination & combA, const KeyCombination & combB)\n\t{\n\t\treturn KeyCombination(combA.numKeys + combB.numKeys, combA.isTrue && combB.isTrue); \n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Input.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <array>\r\n\r\n//#define GLEW_STATIC\r\n#include <GL/glew.h>\r\n# define GLFW_INCLUDE_GLU\r\n# include <GLFW/glfw3.h>\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n# include \"core/graphics/Viewport.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\tnamespace Key\r\n\t{\r\n\t\t/** Key codes (based on GLFW codes). */\r\n\t\tenum Code\r\n\t\t{\r\n\t\t\tUnknown = 0 /*GLFW_KEY_UNKNOWN*/,   \r\n\t\t\tSpace = GLFW_KEY_SPACE,   \r\n\t\t\tApostrophe = GLFW_KEY_APOSTROPHE,   \r\n\t\t\tComma = GLFW_KEY_COMMA,   \r\n\t\t\tMinus = GLFW_KEY_MINUS,   \r\n\t\t\tPeriod = GLFW_KEY_PERIOD,   \r\n\t\t\tSlash = GLFW_KEY_SLASH,   \r\n\t\t\tNum0 = GLFW_KEY_0,   \r\n\t\t\tNum1 = GLFW_KEY_1,   \r\n\t\t\tNum2 = GLFW_KEY_2,   \r\n\t\t\tNum3 = GLFW_KEY_3,   \r\n\t\t\tNum4 = GLFW_KEY_4,   \r\n\t\t\tNum5 = GLFW_KEY_5,   \r\n\t\t\tNum6 = GLFW_KEY_6,   \r\n\t\t\tNum7 = GLFW_KEY_7,   \r\n\t\t\tNum8 = GLFW_KEY_8,   \r\n\t\t\tNum9 = GLFW_KEY_9,   \r\n\t\t\tSemicolon = GLFW_KEY_SEMICOLON,   \r\n\t\t\tEqual = GLFW_KEY_EQUAL,   \r\n\t\t\tA = GLFW_KEY_A,   \r\n\t\t\tB = GLFW_KEY_B,   \r\n\t\t\tC = GLFW_KEY_C,   \r\n\t\t\tD = GLFW_KEY_D,   \r\n\t\t\tE = GLFW_KEY_E,   \r\n\t\t\tF = GLFW_KEY_F,   \r\n\t\t\tG = GLFW_KEY_G,   \r\n\t\t\tH = GLFW_KEY_H,   \r\n\t\t\tI = GLFW_KEY_I,   \r\n\t\t\tJ = GLFW_KEY_J,   \r\n\t\t\tK = GLFW_KEY_K,   \r\n\t\t\tL = GLFW_KEY_L,   \r\n\t\t\tM = GLFW_KEY_M,   \r\n\t\t\tN = GLFW_KEY_N,   \r\n\t\t\tO = GLFW_KEY_O,   \r\n\t\t\tP = GLFW_KEY_P,   \r\n\t\t\tQ = GLFW_KEY_Q,   \r\n\t\t\tR = GLFW_KEY_R,   \r\n\t\t\tS = GLFW_KEY_S,   \r\n\t\t\tT = GLFW_KEY_T,   \r\n\t\t\tU = GLFW_KEY_U,   \r\n\t\t\tV = GLFW_KEY_V,   \r\n\t\t\tW = GLFW_KEY_W,   \r\n\t\t\tX = GLFW_KEY_X,   \r\n\t\t\tY = GLFW_KEY_Y,   \r\n\t\t\tZ = GLFW_KEY_Z,   \r\n\t\t\tLeftBracket = GLFW_KEY_LEFT_BRACKET,   \r\n\t\t\tBackslash = GLFW_KEY_BACKSLASH,   \r\n\t\t\tRightBracket = GLFW_KEY_RIGHT_BRACKET,   \r\n\t\t\tGraveAccent = GLFW_KEY_GRAVE_ACCENT,   \r\n\t\t\tWorld1 = GLFW_KEY_WORLD_1,   \r\n\t\t\tWorld2 = GLFW_KEY_WORLD_2,   \r\n\t\t\tEscape = GLFW_KEY_ESCAPE,   \r\n\t\t\tEnter = GLFW_KEY_ENTER,   \r\n\t\t\tTab = GLFW_KEY_TAB,   \r\n\t\t\tBackspace = GLFW_KEY_BACKSPACE,   \r\n\t\t\tInsert = GLFW_KEY_INSERT,   \r\n\t\t\tDelete = GLFW_KEY_DELETE,   \r\n\t\t\tRight = GLFW_KEY_RIGHT,   \r\n\t\t\tLeft = GLFW_KEY_LEFT,   \r\n\t\t\tDown = GLFW_KEY_DOWN,   \r\n\t\t\tUp = GLFW_KEY_UP,   \r\n\t\t\tPage_up = GLFW_KEY_PAGE_UP,   \r\n\t\t\tPage_down = GLFW_KEY_PAGE_DOWN,   \r\n\t\t\tHome = GLFW_KEY_HOME,   \r\n\t\t\tEnd = GLFW_KEY_END,   \r\n\t\t\tCapsLock = GLFW_KEY_CAPS_LOCK,   \r\n\t\t\tScrollLock = GLFW_KEY_SCROLL_LOCK,   \r\n\t\t\tNumLock = GLFW_KEY_NUM_LOCK,   \r\n\t\t\tPrintScreen = GLFW_KEY_PRINT_SCREEN,   \r\n\t\t\tPause = GLFW_KEY_PAUSE,   \r\n\t\t\tF1 = GLFW_KEY_F1,   \r\n\t\t\tF2 = GLFW_KEY_F2,   \r\n\t\t\tF3 = GLFW_KEY_F3,   \r\n\t\t\tF4 = GLFW_KEY_F4,   \r\n\t\t\tF5 = GLFW_KEY_F5,   \r\n\t\t\tF6 = GLFW_KEY_F6,   \r\n\t\t\tF7 = GLFW_KEY_F7,   \r\n\t\t\tF8 = GLFW_KEY_F8,   \r\n\t\t\tF9 = GLFW_KEY_F9,   \r\n\t\t\tF10 = GLFW_KEY_F10,   \r\n\t\t\tF11 = GLFW_KEY_F11,   \r\n\t\t\tF12 = GLFW_KEY_F12,   \r\n\t\t\tF13 = GLFW_KEY_F13,   \r\n\t\t\tF14 = GLFW_KEY_F14,   \r\n\t\t\tF15 = GLFW_KEY_F15,   \r\n\t\t\tF16 = GLFW_KEY_F16,   \r\n\t\t\tF17 = GLFW_KEY_F17,   \r\n\t\t\tF18 = GLFW_KEY_F18,   \r\n\t\t\tF19 = GLFW_KEY_F19,   \r\n\t\t\tF20 = GLFW_KEY_F20,   \r\n\t\t\tF21 = GLFW_KEY_F21,   \r\n\t\t\tF22 = GLFW_KEY_F22,   \r\n\t\t\tF23 = GLFW_KEY_F23,   \r\n\t\t\tF24 = GLFW_KEY_F24,   \r\n\t\t\tF25 = GLFW_KEY_F25,   \r\n\t\t\tKPNum0 = GLFW_KEY_KP_0,   \r\n\t\t\tKPNum1 = GLFW_KEY_KP_1,   \r\n\t\t\tKPNum2 = GLFW_KEY_KP_2,   \r\n\t\t\tKPNum3 = GLFW_KEY_KP_3,   \r\n\t\t\tKPNum4 = GLFW_KEY_KP_4,   \r\n\t\t\tKPNum5 = GLFW_KEY_KP_5,   \r\n\t\t\tKPNum6 = GLFW_KEY_KP_6,   \r\n\t\t\tKPNum7 = GLFW_KEY_KP_7,   \r\n\t\t\tKPNum8 = GLFW_KEY_KP_8,   \r\n\t\t\tKPNum9 = GLFW_KEY_KP_9,   \r\n\t\t\tKPDecimal = GLFW_KEY_KP_DECIMAL,   \r\n\t\t\tKPDivide = GLFW_KEY_KP_DIVIDE,   \r\n\t\t\tKPMultiply = GLFW_KEY_KP_MULTIPLY,   \r\n\t\t\tKPSubtract = GLFW_KEY_KP_SUBTRACT,   \r\n\t\t\tKPAdd = GLFW_KEY_KP_ADD,   \r\n\t\t\tKPEnter = GLFW_KEY_KP_ENTER,   \r\n\t\t\tKPEqual = GLFW_KEY_KP_EQUAL,   \r\n\t\t\tLeftShift = GLFW_KEY_LEFT_SHIFT,   \r\n\t\t\tLeftControl = GLFW_KEY_LEFT_CONTROL,   \r\n\t\t\tLeftAlt = GLFW_KEY_LEFT_ALT,   \r\n\t\t\tLeftSuper = GLFW_KEY_LEFT_SUPER,   \r\n\t\t\tRightShift = GLFW_KEY_RIGHT_SHIFT,   \r\n\t\t\tRightControl = GLFW_KEY_RIGHT_CONTROL,   \r\n\t\t\tRightAlt = GLFW_KEY_RIGHT_ALT,   \r\n\t\t\tRightSuper = GLFW_KEY_RIGHT_SUPER,   \r\n\t\t\tMenu = GLFW_KEY_MENU,  \r\n\r\n\t\t\tcount // this one is a 'tricks' to automatically get the number\r\n\t\t\t// of elements in this enum (just type sibr::Key::count).\r\n\t\t};\r\n\t} // namespace Key\r\n\r\n\tnamespace Mouse\r\n\t{\r\n\t\t/** Mouse button codes (based on GLFW codes). */\r\n\t\tenum Code\r\n\t\t{\r\n\t\t\tButton1 = GLFW_MOUSE_BUTTON_1, \r\n\t\t\tButton2 = GLFW_MOUSE_BUTTON_2,\r\n\t\t\tButton3 = GLFW_MOUSE_BUTTON_3,\r\n\t\t\tButton4 = GLFW_MOUSE_BUTTON_4,\r\n\t\t\tButton5 = GLFW_MOUSE_BUTTON_5,\r\n\t\t\tButton6 = GLFW_MOUSE_BUTTON_6,\r\n\t\t\tButton7 = GLFW_MOUSE_BUTTON_7,\r\n\t\t\tButton8 = GLFW_MOUSE_BUTTON_8,\r\n\t\t\tLast = GLFW_MOUSE_BUTTON_LAST,\r\n\r\n\t\t\tLeft = GLFW_MOUSE_BUTTON_LEFT,\r\n\t\t\tMiddle = GLFW_MOUSE_BUTTON_MIDDLE,\r\n\t\t\tRight = GLFW_MOUSE_BUTTON_RIGHT,\r\n\r\n\t\t\tUnknown,\r\n\t\t\tcount\r\n\t\t};\r\n\t} // namespace Mouse\r\n\r\n\t/** Helper keeping track of the number of keys currently pressed. */\r\n\tstruct SIBR_GRAPHICS_EXPORT KeyCombination \r\n\t{\r\n\t\t/// Default constructor.\r\n\t\tKeyCombination();\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param n number of keys pressed\r\n\t\t\\param b are they active or not\r\n\t\t*/\r\n\t\tKeyCombination(int n, bool b); \r\n\t\t\r\n\t\t/** \\return true if they are numKeys pressed keys and their combination is active. */\r\n\t\toperator bool() const; \r\n\r\n\t\tint numKeys; ///< Number of pressed keys.\r\n\t\tbool isTrue; ///< Activations status.\r\n\t};\r\n\t\r\n\t/** Merge two set of pressed keys.\r\n\t\\param combA  first set\r\n\t\\param combB second set\r\n\t\\return the union set\r\n\t*/\r\n\tKeyCombination SIBR_GRAPHICS_EXPORT operator&&( const KeyCombination & combA, const KeyCombination & combB);\r\n\r\n\t/** Keep track of the pressed/active/released state of a set of keys/buttons.\r\n\t\\sa Key::Code, Mouse::Code\r\n\t*/\r\n\ttemplate <int TNbState, typename TEnum>\r\n\tclass InputState\r\n\t{\r\n\tpublic:\r\n\r\n\t\t/** Is an item currently active.\r\n\t\t\\param code the item code (key or mouse)\r\n\t\t\\return true if the item is active at this frame\r\n\t\t*/\r\n\t\tbool\tisActivated( TEnum code ) const {\r\n\t\t\treturn _currentStates[(size_t)code];\r\n\t\t}\r\n\r\n\t\t/** Is an item released (lasts one frame).\r\n\t\t\\param code the item code (key or mouse)\r\n\t\t\\return true if the item is released at this frame\r\n\t\t*/\r\n\t\tbool\tisReleased( TEnum code ) const {\r\n\t\t\treturn _lastStates[(size_t)code] \\\r\n\t\t\t\t&& !_currentStates[(size_t)code];\r\n\t\t}\r\n\r\n\t\t/** Is an item pressed at this frame (lasts one frame).\r\n\t\t\\sa isActivated\r\n\t\t\\param code the item code (key or mouse)\r\n\t\t\\return true if the item is pressed at this frame\r\n\t\t*/\r\n\t\tbool\tisPressed( TEnum code ) const {\r\n\t\t\treturn !_lastStates[(size_t)code] \\\r\n\t\t\t\t&& _currentStates[(size_t)code];\r\n\t\t}\r\n\t\t\r\n\t\t/** Is an item currently pressed and only this one (lasts one frame).\r\n\t\t\\sa isActivated\r\n\t\t\\param code the item code (key or mouse)\r\n\t\t\\return true if the item is the only one pressed\r\n\t\t*/\r\n\t\tKeyCombination isPressedOnly( TEnum code ) const {\r\n\t\t\treturn KeyCombination(1,isPressed(code));\r\n\t\t}\r\n\r\n\t\t/** Is an item currently active and only this one.\r\n\t\t\\param code the item code (key or mouse)\r\n\t\t\\return true if the item is the only one active\r\n\t\t*/\r\n\t\tKeyCombination isActivatedOnly( TEnum code ) const {\r\n\t\t\treturn KeyCombination(1,isActivated(code));\r\n\t\t}\r\n\r\n\t\t/** Declare an item as pressed at this frame.\r\n\t\t\\param code the item code (Key or Mouse).\r\n\t\t*/\r\n\t\tvoid\tpress( TEnum code ) {\r\n\t\t\t_currentStates[(size_t)code] = true;\r\n\t\t}\r\n\r\n\t\t/** Declare an item as released at this frame.\r\n\t\t\\param code the item code (Key or Mouse).\r\n\t\t*/\r\n\t\tvoid\trelease( TEnum code ) {\r\n\t\t\t_currentStates[(size_t)code] = false;\r\n\t\t\t_lastStates[(size_t)code] = true;\r\n\t\t}\r\n\r\n\t\t/** Mute an item.\r\n\t\t\\param code the item code (Key or Mouse).\r\n\t\t*/\r\n\t\tvoid\tsilent( TEnum code ) {\r\n\t\t\t_currentStates[(size_t)code] = \\\r\n\t\t\t\t_lastStates[(size_t)code] = false;\r\n\t\t}\r\n\r\n\t\t/** Reset all items state.\r\n\t\t*/\r\n\t\tvoid\tclearStates( void ) {\r\n\t\t\tstd::fill(_currentStates.begin(), _currentStates.end(), false);\r\n\t\t\tstd::fill(_lastStates.begin(), _lastStates.end(), false);\r\n\t\t}\r\n\r\n\t\t/** Update previous frame states with the current frame ones. */\r\n\t\tvoid\tswapStates( void ) {\r\n\t\t\t_lastStates = _currentStates;\r\n\t\t}\r\n\r\n\t\t/** \\return the number of keys currently activated. */\r\n\t\tint getNumActivated( void ) const {\r\n\t\t\tint n=0;\r\n\t\t\tfor(int i=0; i<TNbState; ++i){\r\n\t\t\t\tn += (int)_currentStates[i];\r\n\t\t\t}\r\n\t\t\treturn n;\r\n\t\t}\r\n\r\n\tprivate:\r\n\t\tstd::array<bool, TNbState>\t\t\t_currentStates; ///< Current frame state.\r\n\t\tstd::array<bool, TNbState>\t\t\t_lastStates; ///< Last frame state.\r\n\t};\r\n\r\n\t/** Maintain the complete state of user interactions (mouse, keyboard) for a given view or window.\r\n\tAll coordinates are recaled with respect to the associated view.\r\n\tTo check if the B key is currently held:\r\n\t\tinput.key().isActivated(Key::B);\r\n\tTo check if the right mouse was just released:\r\n\t\tinput.mouseButton().isReleased(Mouse::Right);\r\n\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tclass SIBR_GRAPHICS_EXPORT Input\r\n\t{\r\n\tpublic:\r\n\t\ttypedef InputState<Key::count, Key::Code>\t\tKeyboard;\r\n\t\ttypedef InputState<Mouse::count, Mouse::Code>\tMouseButton;\r\n\r\n\tpublic:\r\n\r\n\t\t/** \\return the global system input (all others are derived from this one) */\r\n\t\tstatic Input&\tglobal( void );\r\n\r\n\t\t/** Generate a new Input object based on a parent one and a viewport. Events (clicks) happening outside \r\n\t\t\tthe viewport will be ignored, mouse coordinates will be recentered with respect to the viewport.\r\n\t\t\t\\param global the parent input\r\n\t\t\t\\param viewport the viewport to retrict the input to\r\n\t\t\t\\param mouseOutsideDisablesKeyboard if set to true, keyboard inputs are ignored when the mouse is outside the viewport\r\n\t\t\t\\return the new restricted input\r\n\t\t*/\r\n\t\tstatic Input subInput(const sibr::Input & global, const sibr::Viewport & viewport, const bool mouseOutsideDisablesKeyboard = true);\r\n\r\n\t\t/** Is the mouse inside a given viewport.\r\n\t\t\\param viewport the viewport to test against\r\n\t\t\\return true if the mouse is inside.\r\n\t\t*/\r\n\t\tbool isInsideViewport(const sibr::Viewport & viewport) const;\r\n\r\n\t\t/** Update internal state based on GLFW, call once per frame. */\r\n\t\tstatic void\t\tpoll( void );\r\n\r\n\t\t/** \\return the keyboard state. */\r\n\t\tconst Keyboard&\tkey( void ) const {\r\n\t\t\treturn _keyboard;\r\n\t\t}\r\n\r\n\t\t/** \\return the keyboard state. */\r\n\t\tKeyboard&\tkey( void ) {\r\n\t\t\treturn _keyboard;\r\n\t\t}\r\n\r\n\t\t/** \\return the mouse buttons state. */\r\n\t\tconst MouseButton&\tmouseButton( void ) const {\r\n\t\t\treturn _mouseButton;\r\n\t\t}\r\n\r\n\t\t/** \\return the mouse buttons state. */\r\n\t\tMouseButton&\tmouseButton( void ) {\r\n\t\t\treturn _mouseButton;\r\n\t\t}\r\n\r\n\t\t/** \\return the current mouse position */\r\n\t\tconst Vector2i&\tmousePosition( void ) const {\r\n\t\t\treturn _mousePos;\r\n\t\t}\r\n\r\n\t\t/** Set the current mouse position.\r\n\t\t\\param mousePos the new position\r\n\t\t*/\r\n\t\tvoid mousePosition( Vector2i mousePos ) {\r\n\t\t\t_mousePos = mousePos;\r\n\t\t}\r\n\r\n\t\t/** \\return the change in mouse position since last frame. */\r\n\t\tVector2i mouseDeltaPosition( void ) const {\r\n\t\t\treturn _mousePrevPos-_mousePos;\r\n\t\t}\r\n\t\t\r\n\t\t/** If any number key is pressed, return the lowest one.\r\n\t\t\\return the smallest pressed number, or -1 if none is pressed.\r\n\t\t*/\r\n\t\tint pressedNumber() const {\r\n\t\t\tstatic const std::vector<sibr::Key::Code> keys = {\r\n\t\t\t\tKey::Num0, Key::Num1, Key::Num2, Key::Num3, Key::Num4,\r\n\t\t\t\tKey::Num5, Key::Num6, Key::Num7, Key::Num8, Key::Num9\r\n\t\t\t};\r\n\t\t\r\n\t\t\tfor (int i = 0; i < 10; ++i){\r\n\t\t\t\tif (_keyboard.isPressed(keys[i]) ){\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\t/** Update last frame state with the current one. Call at the end of each frame. */\r\n\t\tvoid swapStates( void ) {\r\n\t\t\tkey().swapStates();\r\n\t\t\tmouseButton().swapStates();\r\n\t\t\t_mousePrevPos = _mousePos;\r\n\t\t\t_mouseScroll = 0.0;\r\n\t\t}\r\n\r\n\t\t/** \\return the scroll amount along the vertical axis. */\r\n\t\tdouble\t\t\tmouseScroll( void ) const {\r\n\t\t\treturn _mouseScroll;\r\n\t\t}\r\n\r\n\t\t/** Set the scroll amount.\r\n\t\t\\param  v the scroll amount.\r\n\t\t*/\r\n\t\tvoid\t\t\tmouseScroll(double v) {\r\n\t\t\t_mouseScroll = v;\r\n\t\t}\r\n\r\n\t\t/** \\return true if the input is associated to an empty view/window. */\r\n\t\tbool empty() const {\r\n\t\t\treturn _empty;\r\n\t\t}\r\n\r\n\tprivate:\r\n\r\n\t\tKeyboard\t\t\t_keyboard; ///< Keyboard state.\r\n\t\tMouseButton\t\t\t_mouseButton; ///< Mouse state.\r\n\r\n\t\tVector2i\t\t\t_mousePos = {0, 0}; ///< Current mouse  position.\r\n\t\tVector2i\t\t\t_mousePrevPos = { 0, 0 }; ///< Previous mouse position.\r\n\t\tdouble\t\t\t\t_mouseScroll = 0.0; ///< Current scroll amount.\r\n\t\tbool\t\t\t\t_empty = true; ///< Is the input associated to an empty view/window.\r\n\r\n\t};\r\n\r\n\t///// DEFINITIONS /////\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/MaterialMesh.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include <fstream>\r\n#include <memory>\r\n#include <map>\r\n#include <queue>\r\n\r\n#include <assimp/Importer.hpp> // C++ importer interface\r\n#include <assimp/scene.h> // Output data structure\r\n#include <assimp/postprocess.h> // Post processing flags\r\n#include <assimp/cexport.h>\r\n#include <assimp/Exporter.hpp>\r\n\r\n#include \"core/system/ByteStream.hpp\"\r\n#include \"core/graphics/MaterialMesh.hpp\"\r\n#include \"core/system/Transform3.hpp\"\r\n#include \"boost/filesystem.hpp\"\r\n#include \"core/system/XMLTree.h\"\r\n#include \"core/system/Matrix.hpp\"\r\n#include <set>\r\n#include <boost/variant/detail/substitute.hpp>\r\n\r\nnamespace sibr\r\n{\r\n\tbool\tMaterialMesh::load(const std::string& filename)\r\n\t{\r\n\r\n\t\tsrand(static_cast <unsigned> (time(0)));\r\n\t\tAssimp::Importer\timporter;\r\n\t\timporter.SetPropertyBool(AI_CONFIG_PP_FD_REMOVE, true);\r\n\t\t// cause Assimp to remove all degenerated faces as soon as they are detected\r\n\t\tconst aiScene* scene = importer.ReadFile(filename,\r\n\t\t\taiProcess_Triangulate | aiProcess_JoinIdenticalVertices |\r\n\t\t\taiProcess_FindDegenerates);\r\n\r\n\t\tif (!scene)\r\n\t\t{\r\n\t\t\tSIBR_WRG << \"error: can't load mesh '\" << filename\r\n\t\t\t\t<< \"' (\" << importer.GetErrorString() << \").\" << std::endl;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (scene->mNumMeshes == 0)\r\n\t\t{\r\n\t\t\tSIBR_WRG << \"error: the loaded model file ('\" << filename\r\n\t\t\t\t<< \"') contains zero or more than one mesh. Number of meshes : \" <<\r\n\t\t\t\tscene->mNumMeshes << std::endl;\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tauto convertVec = [](const aiVector3D& v) {\r\n\t\t\treturn Vector3f(v.x, v.y, v.z); };\r\n\t\t_triangles.clear();\r\n\r\n\t\tuint offsetVertices = 0;\r\n\t\tuint offsetFaces = 0;\r\n\t\tuint matId = 0; // Material\r\n\t\tstd::map<std::string, int> matName2Id; // Material\r\n\r\n\t\t_maxMeshId = size_t(int(scene->mNumMeshes) - 1);\r\n\r\n\t\tSIBR_LOG << \"Mesh with \" << scene->mNumMeshes << \" elements.\" << std::endl;\r\n\t\tfor (uint meshId = 0; meshId < scene->mNumMeshes; ++meshId) {\r\n\t\t\tconst aiMesh* mesh = scene->mMeshes[meshId];\r\n\r\n\t\t\t_vertices.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t_meshIds.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i) {\r\n\t\t\t\t_vertices[offsetVertices + i] = convertVec(mesh->mVertices[i]);\r\n\t\t\t\t_meshIds[offsetVertices + i] = meshId;\r\n\t\t\t}\r\n\r\n\t\t\tif (mesh->HasVertexColors(0) && mesh->mColors[0])\r\n\t\t\t{\r\n\t\t\t\t_colors.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i)\r\n\t\t\t\t{\r\n\t\t\t\t\t_colors[offsetVertices + i] = Vector3f(\r\n\t\t\t\t\t\tmesh->mColors[0][i].r,\r\n\t\t\t\t\t\tmesh->mColors[0][i].g,\r\n\t\t\t\t\t\tmesh->mColors[0][i].b);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (mesh->HasVertexColors(0) && mesh->mColors[0])\r\n\t\t\t{\r\n\t\t\t\t_colors.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i)\r\n\t\t\t\t{\r\n\t\t\t\t\t_colors[offsetVertices + i] = Vector3f(\r\n\t\t\t\t\t\tmesh->mColors[0][i].r,\r\n\t\t\t\t\t\tmesh->mColors[0][i].g,\r\n\t\t\t\t\t\tmesh->mColors[0][i].b);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (mesh->HasNormals())\r\n\t\t\t{\r\n\t\t\t\t_normals.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i) {\r\n\t\t\t\t\t_normals[offsetVertices + i] = convertVec(mesh->mNormals[i]);\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbool randomUV = true;\r\n\r\n\t\t\tif (mesh->HasTextureCoords(0))\r\n\t\t\t{\r\n\t\t\t\t_texcoords.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i) {\r\n\t\t\t\t\t_texcoords[offsetVertices + i] =\r\n\t\t\t\t\t\tconvertVec(mesh->mTextureCoords[0][i]).xy();\r\n\t\t\t\t\tif (convertVec(mesh->mTextureCoords[0][i]).xy().x() != 0.f ||\r\n\t\t\t\t\t\tconvertVec(mesh->mTextureCoords[0][i]).xy().y() != 0.f)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trandomUV = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (randomUV) {\r\n\t\t\t\tSIBR_LOG << \"using random UVs.\" << std::endl;\r\n\t\t\t\t_texcoords.resize(offsetVertices + mesh->mNumVertices);\r\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i) {\r\n\t\t\t\t\tfloat u = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\t\t\tfloat v = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\t\t\t_texcoords[offsetVertices + i] =\r\n\t\t\t\t\t\tVector2f(u * 5.f, v * 5.f);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif (meshId == 0) {\r\n\t\t\t\tSIBR_LOG << \"Mesh contains: colors: \" << mesh->HasVertexColors(0)\r\n\t\t\t\t\t<< \", normals: \" << mesh->HasNormals()\r\n\t\t\t\t\t<< \", texcoords: \" << mesh->HasTextureCoords(0) << std::endl;\r\n\t\t\t}\r\n\r\n\t\t\t//----------------------------- FULL MATERIAL ------------------------\r\n\t\t\tuint currentMatId = matId;\r\n\t\t\taiString aiMatName;\r\n\r\n\t\t\tif (AI_SUCCESS != scene->mMaterials[mesh->mMaterialIndex]->\r\n\t\t\t\tGet(AI_MATKEY_NAME, aiMatName)) {\r\n\t\t\t\tSIBR_LOG << \"material not found \" << mesh->mMaterialIndex\r\n\t\t\t\t\t<< std::endl;\r\n\t\t\t}\r\n\r\n\t\t\tstd::string matName = aiMatName.C_Str();\r\n\r\n\t\t\tif (matName2Id.find(matName) == matName2Id.end()) {\r\n\r\n\t\t\t\tmatName2Id[matName] = matId;\r\n\t\t\t\t_matId2Name.push_back(matName);\r\n\r\n\t\t\t\tmatId++;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcurrentMatId = matName2Id[matName];\r\n\t\t\t}\r\n\r\n\t\t\t//-------------------------- END FULL MATERIAL ---------------------\r\n\r\n\t\t\t_triangles.reserve(offsetFaces + mesh->mNumFaces);\r\n\t\t\t_matIds.reserve(offsetFaces + mesh->mNumFaces); //material\r\n\t\t\t_matIdsVertices.resize(_vertices.size());\r\n\t\t\tfor (uint i = 0; i < mesh->mNumFaces; ++i)\r\n\t\t\t{\r\n\t\t\t\tconst aiFace* f = &mesh->mFaces[i];\r\n\t\t\t\tif (f->mNumIndices != 3)\r\n\t\t\t\t\tSIBR_WRG << \"Discarding a face (not a triangle, num indices: \"\r\n\t\t\t\t\t<< f->mNumIndices << \")\" << std::endl;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tVector3u tri = Vector3u(offsetVertices + f->mIndices[0], offsetVertices + f->mIndices[1], offsetVertices + f->mIndices[2]);\r\n\t\t\t\t\tif (tri[0] < 0 || tri[0] >= _vertices.size()\r\n\t\t\t\t\t\t|| tri[1] < 0 || tri[1] >= _vertices.size()\r\n\t\t\t\t\t\t|| tri[2] < 0 || tri[2] >= _vertices.size())\r\n\t\t\t\t\t\tSIBR_WRG << \"Face num [\" << i << \"] contains invalid vertex id(s)\" << std::endl;\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t_triangles.push_back(tri);\r\n\t\t\t\t\t\t_matIds.push_back(currentMatId);  //material\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toffsetFaces = (uint)_triangles.size();\r\n\t\t\toffsetVertices = (uint)_vertices.size();\r\n\r\n\t\t}\r\n\r\n\t\tSIBR_LOG << \"Mesh '\" << filename << \" successfully loaded. \" << scene->mNumMeshes << \" meshes were loaded with a total of \"\r\n\t\t\t<< \" (\" << _triangles.size() << \") faces and \"\r\n\t\t\t<< \" (\" << _vertices.size() << \") vertices detected.\" << std::endl;\r\n\t\tSIBR_LOG << \"Init material part complete.\" << std::endl;\r\n\r\n\t\t_gl.dirtyBufferGL = true;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tsibr::Matrix4f parseTransform(const rapidxml::xml_node<>* nodeTrans)\r\n\t{\r\n\t\tsibr::Matrix4f objectToWorld = sibr::Matrix4f::Identity();\r\n\t\tif (nodeTrans)\r\n\t\t{\r\n\t\t\t// Helper functions\r\n\t\t\tconst auto getfValue = [&](rapidxml::xml_node<>* n, std::string const& name, float& value) {\r\n\t\t\t\tif (n && n->first_attribute(name.c_str())) {\r\n\t\t\t\t\tvalue = std::stof(n->first_attribute(name.c_str())->value());\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tconst auto getVector = [&](rapidxml::xml_node<>* n, std::string const& name, sibr::Vector3f& vec) {\r\n\t\t\t\tconst auto isNonFloat = [](const char c) {\r\n\t\t\t\t\treturn c == ',' || c == ' ' || c == '\\t' || c == '\\r' || c == '\\n' || c == '\"' || c == 0;\r\n\t\t\t\t};\r\n\t\t\t\tconst auto eatNonFloat = [&](const char* str, int& i) {\r\n\t\t\t\t\twhile (isNonFloat(str[i])) ++i;\r\n\t\t\t\t};\r\n\t\t\t\tconst auto eatFloat = [&](const char* str, int& i) {\r\n\t\t\t\t\twhile (!isNonFloat(str[i])) ++i;\r\n\t\t\t\t};\r\n\t\t\t\tif (n && n->first_attribute(name.c_str())) {\r\n\t\t\t\t\tint index = 0;\r\n\t\t\t\t\tconst char* value = n->first_attribute(name.c_str())->value();\r\n\t\t\t\t\tfor (int i = 0; i < vec.size(); ++i) {\r\n\t\t\t\t\t\teatNonFloat(value, index);\r\n\t\t\t\t\t\tvec[i] = std::atof(value + index);\r\n\t\t\t\t\t\teatFloat(value, index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tconst auto getAxesValues = [&](rapidxml::xml_node<>* n, float& x, float& y, float& z) {\r\n\t\t\t\tgetfValue(n, \"x\", x);\r\n\t\t\t\tgetfValue(n, \"y\", y);\r\n\t\t\t\tgetfValue(n, \"z\", z);\r\n\t\t\t};\r\n\r\n\t\t\t// Loop through all the transform commands,\r\n\t\t\t\t\t\t\t// and \"accumulate\" the transform matrices into \"objectToWorld\"\r\n\t\t\tfor (rapidxml::xml_node<>* node = nodeTrans->first_node(); node; node = node->next_sibling()) {\r\n\t\t\t\tsibr::Matrix4f nodeMatrix = sibr::Matrix4f::Identity();\r\n\t\t\t\tconst char* transformType = node->name();\r\n\t\t\t\tif (strcmp(transformType, \"matrix\") == 0) {\r\n\t\t\t\t\tstd::string matrixValue = node->first_attribute(\"value\")->value();\r\n\t\t\t\t\tstd::istringstream issMatrix(matrixValue);\r\n\t\t\t\t\tstd::vector<std::string> split(\r\n\t\t\t\t\t\tstd::istream_iterator<std::string>{issMatrix},\r\n\t\t\t\t\t\tstd::istream_iterator<std::string>());\r\n\t\t\t\t\tnodeMatrix <<\r\n\t\t\t\t\t\tstd::stof(split[0]), std::stof(split[1]), std::stof(split[2]), std::stof(split[3]),\r\n\t\t\t\t\t\tstd::stof(split[4]), std::stof(split[5]), std::stof(split[6]), std::stof(split[7]),\r\n\t\t\t\t\t\tstd::stof(split[8]), std::stof(split[9]), std::stof(split[10]), std::stof(split[11]),\r\n\t\t\t\t\t\tstd::stof(split[12]), std::stof(split[13]), std::stof(split[14]), std::stof(split[15]);\r\n\t\t\t\t}\r\n\t\t\t\telse if (strcmp(transformType, \"translate\") == 0) {\r\n\t\t\t\t\tgetAxesValues(node, nodeMatrix(0, 3), nodeMatrix(1, 3), nodeMatrix(2, 3));\r\n\t\t\t\t}\r\n\t\t\t\telse if (strcmp(transformType, \"scale\") == 0) {\r\n\t\t\t\t\tfloat scale = 1.f;\r\n\t\t\t\t\tgetfValue(node, \"value\", scale);\r\n\t\t\t\t\tgetAxesValues(node, nodeMatrix(0, 0), nodeMatrix(1, 1), nodeMatrix(2, 2));\r\n\t\t\t\t\tnodeMatrix(0, 0) *= scale;\r\n\t\t\t\t\tnodeMatrix(1, 1) *= scale;\r\n\t\t\t\t\tnodeMatrix(2, 2) *= scale;\r\n\t\t\t\t}\r\n\t\t\t\telse if (strcmp(transformType, \"rotate\") == 0) {\r\n\t\t\t\t\tfloat rotateX = 0.f, rotateY = 0.f, rotateZ = 0.f;\r\n\t\t\t\t\tfloat angleDegrees = 0.f;\r\n\t\t\t\t\tgetAxesValues(node, rotateX, rotateY, rotateZ);\r\n\t\t\t\t\tgetfValue(node, \"angle\", angleDegrees);\r\n\t\t\t\t\tfloat angleRadians = angleDegrees * (float)M_PI / 180.f;\r\n\t\t\t\t\tsibr::Transform3<float> transform;\r\n\t\t\t\t\ttransform.rotate(Eigen::Quaternionf(\r\n\t\t\t\t\t\tEigen::AngleAxisf(angleRadians,\r\n\t\t\t\t\t\t\tEigen::Vector3f(rotateX, rotateY, rotateZ))));\r\n\t\t\t\t\tnodeMatrix = transform.matrix();\r\n\t\t\t\t}\r\n\t\t\t\telse if (strcmp(transformType, \"lookat\") == 0) {\r\n\t\t\t\t\tsibr::Vector3f eye{ 0, 0, 0 }, target{ 0, 0, 1 }, up{ 0, 1, 0 };\r\n\t\t\t\t\tgetVector(node, \"origin\", eye);\r\n\t\t\t\t\tgetVector(node, \"target\", target);\r\n\t\t\t\t\tgetVector(node, \"up\", up);\r\n\t\t\t\t\t// WTF why inverse the lookat???\r\n\t\t\t\t\tnodeMatrix = sibr::lookAt(eye, target, up).inverse();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthrow std::runtime_error(std::string(\"Mitsuba xml parser: Unknown tranform type: \") + transformType);\r\n\t\t\t\t}\r\n\t\t\t\tobjectToWorld = nodeMatrix * objectToWorld;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn objectToWorld;\r\n\t}\r\n\r\n\t// Extracts Name from (can accept node == nullptr)\r\n\t// <ref id=\"Name\"/>\r\n\tstd::string parseMatID(const rapidxml::xml_node<>* node)\r\n\t{\r\n\t\tstd::string res;\r\n\t\tif (node)\r\n\t\t{\r\n\t\t\tconst rapidxml::xml_attribute<>* id = node->first_attribute(\"id\");\r\n\t\t\tres = id->value();\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n\r\n\tbool shouldFlipNormals(const rapidxml::xml_node<>* shape)\r\n\t{\r\n\t\tassert(shape != nullptr);\r\n\t\tfor (const rapidxml::xml_node<>* node = shape->first_node(\"boolean\"); node; node = node->next_sibling(\"boolean\"))\r\n\t\t{\r\n\t\t\tif (node->first_attribute(\"name\")->value() == std::string(\"flipNormals\"))\r\n\t\t\t{\r\n\t\t\t\treturn node->first_attribute(\"value\")->value() == std::string(\"true\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tstd::string parseFilename(const rapidxml::xml_node<>* shape)\r\n\t{\r\n\t\tassert(shape);\r\n\t\tfor (const rapidxml::xml_node<>* node = shape->first_node(\"string\"); node; node = node->next_sibling(\"string\"))\r\n\t\t{\r\n\t\t\tif (node->first_attribute(\"name\")->value() == std::string(\"filename\"))\r\n\t\t\t{\r\n\t\t\t\treturn node->first_attribute(\"value\")->value();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\tbool\tMaterialMesh::loadMtsXML(const std::string& xmlFile, bool loadTextures)\r\n\t{\r\n\t\tsrand(static_cast <unsigned> (time(0)));\r\n\t\tbool allLoaded = true;\r\n\t\tstd::string pathFolder = boost::filesystem::path(xmlFile).parent_path()\r\n\t\t\t.string();\r\n\t\tsibr::XMLTree doc(xmlFile);\r\n\t\tstd::map<std::string, sibr::MaterialMesh> meshes;\r\n\r\n\t\tstruct ShapeGroup {\r\n\t\t\tstruct Shape\r\n\t\t\t{\r\n\t\t\t\tstd::string filename;\r\n\t\t\t\tstd::string matname;\r\n\t\t\t\tsibr::Matrix4f toWorld = sibr::Matrix4f::Identity();\r\n\t\t\t\tShape& operator=(Shape const&) = default;\r\n\t\t\t\tbool flipNormals = false;\r\n\t\t\t};\r\n\t\t\tstd::vector<Shape> shapes;\r\n\t\t\tsibr::Matrix4f objectToWorld = sibr::Matrix4f::Identity();\r\n\t\t};\r\n\r\n\t\tstd::map<std::string, ShapeGroup> idToShapegroups;\r\n\r\n\t\trapidxml::xml_node<> *nodeScene = doc.first_node(\"scene\");\r\n\r\n\t\t// First parse all the shapegroups\r\n\t\tfor (rapidxml::xml_node<> *node = nodeScene->first_node(\"shape\");\r\n\t\t\tnode; node = node->next_sibling(\"shape\"))\r\n\t\t{\r\n\t\t\tif (strcmp(node->first_attribute()->name(), \"type\") == 0 &&\r\n\t\t\t\tstrcmp(node->first_attribute()->value(), \"shapegroup\") == 0) {\r\n\r\n\t\t\t\t//std::cout << \"Found : \" << node->first_attribute(\"id\")->value() << std::endl;\r\n\r\n\t\t\t\tstd::string id = node->first_attribute(\"id\")->value();\r\n\t\t\t\tShapeGroup shapeGroup;\r\n\t\t\t\tfor (rapidxml::xml_node<>* shapeNode = node->first_node(\"shape\");shapeNode;shapeNode=shapeNode->next_sibling())\r\n\t\t\t\t{\r\n\t\t\t\t\tShapeGroup::Shape shape;\r\n\t\t\t\t\tshape.filename = parseFilename(shapeNode);\r\n\t\t\t\t\tshape.toWorld = parseTransform(shapeNode->first_node(\"transform\"));\r\n\t\t\t\t\tshape.matname = parseMatID(shapeNode->first_node(\"ref\"));\r\n\t\t\t\t\tshape.flipNormals = shouldFlipNormals(shapeNode);\r\n\t\t\t\t\tshapeGroup.shapes.push_back(shape);\r\n\t\t\t\t}\r\n\t\t\t\trapidxml::xml_node<>* tNode = node->first_node(\"transform\");\r\n\t\t\t\tshapeGroup.objectToWorld = parseTransform(tNode);\r\n\t\t\t\tidToShapegroups[id] = shapeGroup;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Second: Create all the actual shapes\r\n\t\tfor (rapidxml::xml_node<> *node = nodeScene->first_node(\"shape\");\r\n\t\t\tnode; node = node->next_sibling(\"shape\"))\r\n\t\t{\r\n\t\t\tfor (rapidxml::xml_attribute<> *browserAttributes = node->\r\n\t\t\t\tfirst_attribute();\r\n\t\t\t\tbrowserAttributes;\r\n\t\t\t\tbrowserAttributes = browserAttributes->next_attribute()) {\r\n\t\t\t\t// Create the instances of the shapegroups\r\n\t\t\t\tif (strcmp(browserAttributes->name(), \"type\") == 0 &&\r\n\t\t\t\t\tstrcmp(browserAttributes->value(), \"instance\") == 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\trapidxml::xml_node<>* nodeRef = node->first_node(\"ref\");\r\n\t\t\t\t\tconst std::string _id = nodeRef->first_attribute(\"id\")->value();\r\n\t\t\t\t\tSIBR_LOG << \"Instancing \" << _id << std::endl;\r\n\t\t\t\t\tif (idToShapegroups.find(_id) == idToShapegroups.end())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSIBR_WRG << \"Could not find shapegroup \" << _id << \"!!!\" << std::endl;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst ShapeGroup& shapeGroup = idToShapegroups[_id];\r\n\t\t\t\t\trapidxml::xml_node<>* nodeTrans = node->first_node(\"transform\");\r\n\t\t\t\t\t// I am not 100% sure of the order of the matrices\r\n\t\t\t\t\tsibr::Matrix4f objectToWorld = shapeGroup.objectToWorld * parseTransform(nodeTrans);\r\n\t\t\t\t\tsibr::MaterialMesh instance;\r\n\t\t\t\t\tfor (const auto& shape : shapeGroup.shapes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstd::cout << shape.filename;\r\n\t\t\t\t\t\tconst std::string meshPath = pathFolder + \"/\" + shape.filename;\r\n\r\n\t\t\t\t\t\tif (meshes.find(meshPath) == meshes.end())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmeshes[meshPath] = MaterialMesh();\r\n\t\t\t\t\t\t\tmeshes[meshPath].load(meshPath);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsibr::MaterialMesh toWorldMesh = meshes[meshPath];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (shape.flipNormals && toWorldMesh.hasNormals())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tconst auto& refNormals = toWorldMesh.normals();\r\n\t\t\t\t\t\t\tsibr::Mesh::Normals normals(refNormals.size());\r\n\t\t\t\t\t\t\tfor (int nid = 0; nid < refNormals.size(); ++nid)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tnormals[nid] = -refNormals[nid];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttoWorldMesh.normals(normals);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Convert to world coordinates\r\n\t\t\t\t\t\tsibr::Matrix4f matrix = shape.toWorld * objectToWorld;\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsibr::MaterialMesh::Vertices vertices(toWorldMesh.vertices().size());\r\n\t\t\t\t\t\t\tfor (int v = 0; v < toWorldMesh.vertices().size(); v++) {\r\n\t\t\t\t\t\t\t\tsibr::Vector4f v4(toWorldMesh.vertices()[v].x(),\r\n\t\t\t\t\t\t\t\t\ttoWorldMesh.vertices()[v].y(),\r\n\t\t\t\t\t\t\t\t\ttoWorldMesh.vertices()[v].z(), 1.0);\r\n\t\t\t\t\t\t\t\tvertices[v] = (matrix* v4).xyz();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttoWorldMesh.vertices(vertices);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// If the mesh has normals, we should transform them also.\r\n\t\t\t\t\t\tif (toWorldMesh.hasNormals()) {\r\n\t\t\t\t\t\t\tsibr::Mesh::Normals normals(toWorldMesh.normals().size());\r\n\t\t\t\t\t\t\tconst sibr::Matrix3f normalTMatrix = matrix.block(0, 0, 3, 3).inverse().transpose();\r\n\t\t\t\t\t\t\tfor (int v = 0; v < toWorldMesh.normals().size(); v++) {\r\n\t\t\t\t\t\t\t\tconst sibr::Vector3f& ln = toWorldMesh.normals()[v];\r\n\t\t\t\t\t\t\t\tnormals[v] = (normalTMatrix * ln).xyz();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttoWorldMesh.normals(normals);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (!shape.matname.empty())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttoWorldMesh.matId2Name({ shape.matname });\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tinstance.merge(toWorldMesh);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmerge(instance);\r\n\t\t\t\t}\r\n\t\t\t\t// Create the \"unique\" shapes\r\n\t\t\t\telse if (strcmp(browserAttributes->name(), \"type\") == 0 &&\r\n\t\t\t\t\t(strcmp(browserAttributes->value(), \"obj\") == 0 ||\r\n\t\t\t\t\t\tstrcmp(browserAttributes->value(), \"ply\") == 0)) {\r\n\r\n\t\t\t\t\trapidxml::xml_node<> *nodeRef = node->first_node(\"string\");\r\n\t\t\t\t\tconst std::string filename = nodeRef->first_attribute(\"value\")\r\n\t\t\t\t\t\t->value();\r\n\t\t\t\t\tconst std::string meshPath = pathFolder + \"/\" + filename;\r\n\t\t\t\t\t// Search for any normal options:\r\n\t\t\t\t\trapidxml::xml_node<> *nodeOpt = node->first_node(\"boolean\");\r\n\t\t\t\t\tbool flipNormals = false;\r\n\t\t\t\t\twhile (nodeOpt) {\r\n\t\t\t\t\t\tconst std::string name = nodeOpt->first_attribute(\"name\")->value();\r\n\t\t\t\t\t\tconst std::string value = nodeOpt->first_attribute(\"value\")->value();\r\n\t\t\t\t\t\tif (name == \"flipNormals\" && value == \"true\") {\r\n\t\t\t\t\t\t\tflipNormals = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tnodeOpt = nodeOpt->next_sibling(\"boolean\");\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (meshes.find(filename) == meshes.end()) {\r\n\t\t\t\t\t\tmeshes[filename] = sibr::MaterialMesh();\r\n\t\t\t\t\t\tif (!meshes[filename].load(meshPath)) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (meshes[filename].matIds().empty())\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tSIBR_WRG << \"Material (\" << filename << \") not present ...\" << std::endl;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tSIBR_LOG << \"Adding one instance of: \" << filename\r\n\t\t\t\t\t\t<< std::endl;\r\n\r\n\t\t\t\t\trapidxml::xml_node<> *nodeRefMat = node->first_node(\"ref\");\r\n\t\t\t\t\tif (nodeRefMat) {\r\n\t\t\t\t\t\tconst std::string matName = nodeRefMat\r\n\t\t\t\t\t\t\t->first_attribute(\"id\")->value();\r\n\r\n\t\t\t\t\t\tMatId2Name newmatIdtoName;\r\n\t\t\t\t\t\tnewmatIdtoName.push_back(matName);\r\n\t\t\t\t\t\tmeshes[filename].matId2Name(newmatIdtoName);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trapidxml::xml_node<> *nodeTrans = node\r\n\t\t\t\t\t\t->first_node(\"transform\");\r\n\r\n\t\t\t\t\tsibr::Matrix4f objectToWorld = parseTransform(nodeTrans);\r\n\r\n\t\t\t\t\tsibr::MaterialMesh toWorldMesh = meshes[filename];\r\n\r\n\t\t\t\t\t// Apply normals transformation if needed.\r\n\t\t\t\t\tif (flipNormals && toWorldMesh.hasNormals()) {\r\n\t\t\t\t\t\tconst auto & refNormals = toWorldMesh.normals();\r\n\t\t\t\t\t\tsibr::Mesh::Normals normals(refNormals.size());\r\n\t\t\t\t\t\tfor (int nid = 0; nid < refNormals.size(); nid++) {\r\n\t\t\t\t\t\t\tnormals[nid] = -refNormals[nid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttoWorldMesh.normals(normals);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (nodeTrans) {\r\n\t\t\t\t\t\t// Transform the vertices position\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsibr::Mesh::Vertices vertices(toWorldMesh.vertices().size());\r\n\t\t\t\t\t\t\tfor (int v = 0; v < toWorldMesh.vertices().size(); v++) {\r\n\t\t\t\t\t\t\t\tsibr::Vector4f v4(toWorldMesh.vertices()[v].x(),\r\n\t\t\t\t\t\t\t\t\ttoWorldMesh.vertices()[v].y(),\r\n\t\t\t\t\t\t\t\t\ttoWorldMesh.vertices()[v].z(), 1.0);\r\n\t\t\t\t\t\t\t\tvertices[v] = (objectToWorld*v4).xyz();\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttoWorldMesh.vertices(vertices);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// Transform the normals too\r\n\t\t\t\t\t\tif (toWorldMesh.hasNormals()) {\r\n\t\t\t\t\t\t\tsibr::Mesh::Normals normals(toWorldMesh.normals().size());\r\n\t\t\t\t\t\t\tconst sibr::Matrix3f normalTMatrix = objectToWorld.block(0, 0, 3, 3).inverse().transpose();\r\n\t\t\t\t\t\t\tfor (int v = 0; v < toWorldMesh.normals().size(); v++) {\r\n\t\t\t\t\t\t\t\tconst sibr::Vector3f& ln = toWorldMesh.normals()[v];\r\n\t\t\t\t\t\t\t\tnormals[v] = (normalTMatrix * ln);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttoWorldMesh.normals(normals);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmerge(toWorldMesh);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tSIBR_LOG << \"Loaded mesh: \" << vertices().size() << \" verts, \" << meshIds().size() << \" ids.\" << std::endl;\r\n\t\t// Load all the materials\r\n\t\tfor (rapidxml::xml_node<> *node = nodeScene->first_node(\"bsdf\");\r\n\t\t\tnode; node = node->next_sibling(\"bsdf\"))\r\n\t\t{\r\n\t\t\t//getting id \r\n\t\t\trapidxml::xml_attribute<> *attribute = node->first_attribute(\"id\");\r\n\t\t\tif (attribute != nullptr) {\r\n\r\n\t\t\t\tstd::string nameMat = attribute->value();\r\n\r\n\r\n\t\t\t\t// Check if a texture exists in our node with diffuse reflectance\r\n\t\t\t\t// If none is found, explore each BRDF until found.\r\n\t\t\t\tstd::vector <rapidxml::xml_node<>*> queue;\r\n\t\t\t\tqueue.push_back(node);\r\n\r\n\t\t\t\tbool breakBool = false;\r\n\r\n\t\t\t\twhile (!queue.empty()) {\r\n\r\n\r\n\t\t\t\t\t//Texture Case\r\n\t\t\t\t\tfor (rapidxml::xml_node<> *nodeTexture =\r\n\t\t\t\t\t\tqueue.front()->first_node(\"texture\");\r\n\t\t\t\t\t\tnodeTexture;\r\n\t\t\t\t\t\tnodeTexture = nodeTexture->next_sibling(\"texture\")) {\r\n\r\n\t\t\t\t\t\tif (strcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\"diffuseReflectance\") == 0 ||\r\n\t\t\t\t\t\t\tstrcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\t\"reflectance\") == 0 ||\r\n\t\t\t\t\t\t\tstrcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\t\"specularReflectance\") == 0\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//std::cout << \"DiffuseReflectance Texture found\" << std::endl;\r\n\t\t\t\t\t\t\trapidxml::xml_node<> *firstTexture = nodeTexture->\r\n\t\t\t\t\t\t\t\tfirst_node(\"texture\");\r\n\t\t\t\t\t\t\tif (firstTexture == nullptr) {\r\n\t\t\t\t\t\t\t\tfirstTexture = nodeTexture;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfor (rapidxml::xml_node<> *nodeString = firstTexture->\r\n\t\t\t\t\t\t\t\tfirst_node(\"string\");\r\n\t\t\t\t\t\t\t\tnodeString;\r\n\t\t\t\t\t\t\t\tnodeString = nodeString->next_sibling(\"string\"))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tstd::string textureName =\r\n\t\t\t\t\t\t\t\t\tnodeString->first_attribute(\"value\")->value();\r\n\t\t\t\t\t\t\t\tsibr::ImageRGBA::Ptr texture(new sibr::ImageRGBA());\r\n\t\t\t\t\t\t\t\t// If we skip loading the textures, still set them as empty images.\r\n\t\t\t\t\t\t\t\tif (!loadTextures || texture->load(pathFolder + \"/\" + textureName)) {\r\n\t\t\t\t\t\t\t\t\t/*std::cout << \"Diffuse \" << pathFolder + \"/\"\r\n\t\t\t\t\t\t\t\t\t\t+ textureName << std::endl;*/\r\n\t\t\t\t\t\t\t\t\t_diffuseMaps[nameMat] = texture;\r\n\t\t\t\t\t\t\t\t\tbreakBool = true;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tSIBR_ERR << \"Diffuse layer for: \" <<\r\n\t\t\t\t\t\t\t\t\t\tnameMat << \" not found\" << std::endl;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (breakBool)\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t//Color case\r\n\r\n\t\t\t\t\tif (!breakBool) {\r\n\t\t\t\t\t\tstd::list<std::string> colorsFormatList;\r\n\t\t\t\t\t\tcolorsFormatList.push_back(\"rgb\");\r\n\t\t\t\t\t\tcolorsFormatList.push_back(\"srgb\");\r\n\t\t\t\t\t\tfor (std::string colorsFormat : colorsFormatList)\r\n\t\t\t\t\t\t\tfor (rapidxml::xml_node<> *nodeTexture =\r\n\t\t\t\t\t\t\t\tqueue.front()->first_node(colorsFormat.c_str());\r\n\t\t\t\t\t\t\t\tnodeTexture;\r\n\t\t\t\t\t\t\t\tnodeTexture = nodeTexture->next_sibling(\r\n\t\t\t\t\t\t\t\t\tcolorsFormat.c_str())) {\r\n\r\n\t\t\t\t\t\t\t\tif (strcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\t\t\"diffuseReflectance\") == 0 ||\r\n\t\t\t\t\t\t\t\t\tstrcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\t\t\t\"reflectance\") == 0 ||\r\n\t\t\t\t\t\t\t\t\tstrcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\t\t\t\t\"specularReflectance\") == 0\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t/*std::cout << \"DiffuseReflectance Color found\"\r\n\t\t\t\t\t\t\t\t\t\t<< std::endl;*/\r\n\t\t\t\t\t\t\t\t\trapidxml::xml_node<> *firstTexture = nodeTexture->\r\n\t\t\t\t\t\t\t\t\t\tfirst_node(colorsFormat.c_str());\r\n\t\t\t\t\t\t\t\t\tif (firstTexture == nullptr) {\r\n\t\t\t\t\t\t\t\t\t\tfirstTexture = nodeTexture;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tstd::string colorString =\r\n\t\t\t\t\t\t\t\t\t\tnodeTexture->first_attribute(\"value\")->value();\r\n\t\t\t\t\t\t\t\t\tsibr::Vector3f colorMaterial;\r\n\t\t\t\t\t\t\t\t\tfloat redComponent, greenComponent, blueComponent;\r\n#ifdef SIBR_OS_WINDOWS\r\n\t\t\t\t\t\t\t\t\tsscanf_s(colorString.c_str(), \"%f, %f, %f\",\r\n\t\t\t\t\t\t\t\t\t\t&redComponent, &greenComponent, &blueComponent);\r\n#else\r\n\t\t\t\t\t\t\t\t\tsscanf(colorString.c_str(), \"%f, %f, %f\",\r\n\t\t\t\t\t\t\t\t\t\t&redComponent, &greenComponent, &blueComponent);\r\n#endif\r\n\t\t\t\t\t\t\t\t\tconst sibr::ImageRGBA::Pixel color(\r\n\t\t\t\t\t\t\t\t\t\tstatic_cast<const unsigned char>(redComponent * 255),\r\n\t\t\t\t\t\t\t\t\t\tstatic_cast<const unsigned char>(greenComponent * 255),\r\n\t\t\t\t\t\t\t\t\t\tstatic_cast<const unsigned char>(blueComponent * 255),\r\n\t\t\t\t\t\t\t\t\t\t255);\r\n\t\t\t\t\t\t\t\t\tsibr::ImageRGBA::Ptr texture(new sibr::ImageRGBA(\r\n\t\t\t\t\t\t\t\t\t\t1, 1, color));\r\n\t\t\t\t\t\t\t\t\tif (texture) {\r\n\t\t\t\t\t\t\t\t\t\t/*std::cout << \"Diffuse color : \" <<\r\n\t\t\t\t\t\t\t\t\t\t\tredComponent << \", \" << blueComponent <<\r\n\t\t\t\t\t\t\t\t\t\t\t\", \" << greenComponent << \", \" << std::endl;*/\r\n\t\t\t\t\t\t\t\t\t\t_diffuseMaps[nameMat] = texture;\r\n\t\t\t\t\t\t\t\t\t\t_tagsCoveringMaps[nameMat] = nullptr;\r\n\r\n\t\t\t\t\t\t\t\t\t\tbreakBool = true;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\tSIBR_ERR << \"Diffuse layer for: \" << nameMat\r\n\t\t\t\t\t\t\t\t\t\t\t<< \" not found\" << std::endl;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (breakBool)\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tqueue.erase(queue.begin());\r\n\r\n\t\t\t\t\tfor (rapidxml::xml_node<> *node = queue.front()->\r\n\t\t\t\t\t\tfirst_node(\"bsdf\");\r\n\t\t\t\t\t\tnode; node = node->next_sibling(\"bsdf\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tqueue.push_back(node);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tif (_diffuseMaps[nameMat].get() == nullptr) {\r\n\r\n\t\t\t\t\tfloat r = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\t\t\tfloat g = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\t\t\tfloat b = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\r\n\t\t\t\t\tconst sibr::ImageRGBA::Pixel color(\r\n\t\t\t\t\t\tstatic_cast<const unsigned char>(r * 255),\r\n\t\t\t\t\t\tstatic_cast<const unsigned char>(g * 255),\r\n\t\t\t\t\t\tstatic_cast<const unsigned char>(b * 255),\r\n\t\t\t\t\t\tstatic_cast<const unsigned char> (255)\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsibr::ImageRGBA::Ptr texture(new sibr::ImageRGBA(\r\n\t\t\t\t\t\t1, 1, color));\r\n\t\t\t\t\tSIBR_WRG << \"Warning: No color and no texture found for \" << nameMat << \", \" <<\r\n\t\t\t\t\t\t\"material will be chosen randomly.\" << std::endl;\r\n\t\t\t\t\t_diffuseMaps[nameMat] = texture;\r\n\r\n\t\t\t\t\t_tagsCoveringMaps[nameMat] = nullptr;\r\n\t\t\t\t\t/*if (_hasTagsCoveringFile) {\r\n\t\t\t\t\t\t_tagsCoveringMaps[nameMat] = _listCoveringImagesTags.at(\r\n\t\t\t\t\t\t\t_tagsCoveringMaps.size() % _listCoveringImagesTags.size());\r\n\t\t\t\t\t}*/\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbool breakBool = false;\r\n\t\tfor (rapidxml::xml_node<> *node = nodeScene->first_node(\"bsdf\");\r\n\t\t\tnode; node = node->next_sibling(\"bsdf\"))\r\n\t\t{\r\n\t\t\tif (node != nullptr && node->first_attribute(\"id\") != nullptr)\r\n\t\t\t{\r\n\t\t\t\tstd::string nameMat = node->first_attribute(\"id\")->value();\r\n\r\n\t\t\t\tbool breakBool = false;\r\n\t\t\t\tfor (rapidxml::xml_node<> *nodeTexture = node->\r\n\t\t\t\t\tfirst_node(\"texture\");\r\n\t\t\t\t\tnodeTexture; nodeTexture = nodeTexture->\r\n\t\t\t\t\tnext_sibling(\"texture\")) {\r\n\r\n\t\t\t\t\tif (strcmp(nodeTexture->first_attribute(\"name\")->value(),\r\n\t\t\t\t\t\t\"opacity\") == 0 &&\r\n\t\t\t\t\t\tnodeTexture->first_attribute(\"type\") &&\r\n\t\t\t\t\t\tstrcmp(nodeTexture->first_attribute(\"type\")->value(),\r\n\t\t\t\t\t\t\t\"scale\") == 0) {\r\n\t\t\t\t\t\t//std::cout << \"Found opacity mask:\" << nameMat << std::endl;\r\n\r\n\t\t\t\t\t\tfor (rapidxml::xml_node<> *nodeString = nodeTexture->\r\n\t\t\t\t\t\t\tfirst_node(\"texture\")->first_node(\"string\");\r\n\t\t\t\t\t\t\tnodeString; nodeString = nodeString->\r\n\t\t\t\t\t\t\tnext_sibling(\"string\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstd::string textureName = nodeString->\r\n\t\t\t\t\t\t\t\tfirst_attribute(\"value\")->value();\r\n\t\t\t\t\t\t\tsibr::ImageRGB::Ptr texture(new sibr::ImageRGB());\r\n\t\t\t\t\t\t\tif (!loadTextures || texture->load(pathFolder + \"/\" + textureName)) {\r\n\t\t\t\t\t\t\t\t_opacityMaps[nameMat] = texture;\r\n\t\t\t\t\t\t\t\tbreakBool = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tSIBR_ERR << \"Opacity layer for: \" <<\r\n\t\t\t\t\t\t\t\t\tnameMat << \" not found\" << std::endl;\r\n\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (breakBool)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tif (!breakBool) {\r\n\t\t\t\t\tconst sibr::ImageRGB::Pixel color(255, 255, 255);\r\n\t\t\t\t\tsibr::ImageRGB::Ptr texture(new sibr::ImageRGB(1, 1, color));\r\n\t\t\t\t\t_opacityMaps[nameMat] = texture;\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcreateSubMeshes();\r\n\t\treturn true;\r\n\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::loadCoveringTagsTexture(\r\n\t\tconst std::vector<std::string>& listFilesTags) {\r\n\r\n\t\tfor (const std::string filename : listFilesTags) {\r\n\r\n\t\t\tsibr::ImageRGB::Ptr textureTag(new sibr::ImageRGB());\r\n\t\t\tif (textureTag->load(filename)) {\r\n\t\t\t\t_listCoveringImagesTags.push_back(textureTag);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tSIBR_ERR << \"Diffuse layer for: \" <<\r\n\t\t\t\t\tfilename << \" not found\" << std::endl;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (_listCoveringImagesTags.size() > 0)\r\n\t\t\t_hasTagsCoveringFile = true;\r\n\r\n\t\tif (_hasTagsCoveringFile) {\r\n\t\t\tunsigned int counter = 0;\r\n\t\t\tfor (auto it = matId2Name().begin(); it != matId2Name().end(); ++it) {\r\n\t\t\t\tif (_tagsCoveringMaps.find(*it) != _tagsCoveringMaps.end()) {\r\n\t\t\t\t\t_tagsCoveringMaps[*it] = _listCoveringImagesTags.at(\r\n\t\t\t\t\t\tcounter % _listCoveringImagesTags.size());\r\n\t\t\t\t\tcounter++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid MaterialMesh::fillColorsWithIndexMaterials(void)\r\n\t{\r\n\t\tsibr::Mesh::Colors colorsIdsMaterials(vertices().size());\r\n\r\n\t\tsibr::Mesh::Colors randomsColors;\r\n\r\n\t\tsrand(static_cast <unsigned> (time(0)));\r\n\t\tfor (std::string material : _matId2Name) {\r\n\t\t\tfloat r = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\tfloat g = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\t\t\tfloat b = static_cast<float>(rand()) / static_cast<float>(RAND_MAX);\r\n\r\n\t\t\trandomsColors.push_back(sibr::Vector3f(r, g, b));\r\n\t\t}\r\n\r\n\t\tfor (unsigned int i = 0; i < _matIds.size(); i++)\r\n\t\t{\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[0]) = randomsColors.at(\r\n\t\t\t\t_matIds.at(i));\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[1]) = randomsColors.at\r\n\t\t\t(_matIds.at(i));\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[2]) = randomsColors.at\r\n\t\t\t(_matIds.at(i));\r\n\t\t}\r\n\r\n\t\tcolors(colorsIdsMaterials);\r\n\t}\r\n\r\n\r\n\tvoid MaterialMesh::fillColorsWithMatIds()\r\n\t{\r\n\t\tsibr::Mesh::Colors colorsIdsMaterials(vertices().size());\r\n\r\n\t\tfor (unsigned int i = 0; i < _matIds.size(); i++)\r\n\t\t{\r\n\t\t\tconst uint matId = uint(_matIds.at(i) + 1);\r\n\t\t\tconst sibr::Vector3u col = { uchar(matId & 0xff), uchar((matId >> 8) & 0xff) , uchar((matId >> 16) & 0xff) };\r\n\t\t\tconst sibr::Vector3f finalCol = col.cast<float>() / 255.0f;\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[0]) = finalCol;\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[1]) = finalCol;\r\n\t\t\tcolorsIdsMaterials.at(_triangles.at(i)[2]) = finalCol;\r\n\t\t}\r\n\r\n\t\tcolors(colorsIdsMaterials);\r\n\t}\r\n\r\n\tMesh MaterialMesh::generateSubMaterialMesh(int material) const\r\n\t{\r\n\r\n\t\tsibr::Mesh::Vertices newVertices;\r\n\t\tsibr::Mesh::Triangles newTriangles;\r\n\r\n\t\tsibr::Mesh::Colors newColors;\r\n\t\tsibr::Mesh::Normals newNormals;\r\n\t\tsibr::Mesh::UVs newTexCoords;\r\n\r\n\t\tstd::map<int, int> mapIdVert;\r\n\r\n\t\tint cmptValidVert = 0;\r\n\t\tint cmptVert = 0;\r\n\r\n\t\tsibr::Mesh::Colors oldColors;\r\n\t\tif (hasColors())\r\n\t\t\toldColors = colors();\r\n\r\n\t\tsibr::Mesh::Normals oldNormals;\r\n\t\tif (hasNormals())\r\n\t\t\toldNormals = normals();\r\n\r\n\t\tsibr::Mesh::UVs oldTexCoords;\r\n\t\tif (hasTexCoords())\r\n\t\t\toldTexCoords = texCoords();\r\n\r\n\t\tfor (int i = 0; i < matIds().size(); i++)\r\n\t\t{\r\n\t\t\tif (matIds().at(i) == material) {\r\n\r\n\t\t\t\tuint v1, v2, v3;\r\n\t\t\t\tv1 = triangles().at(i)[0];\r\n\t\t\t\tv2 = triangles().at(i)[1];\r\n\t\t\t\tv3 = triangles().at(i)[2];\r\n\r\n\t\t\t\tauto search = mapIdVert.find(v1);\r\n\t\t\t\tif (search == mapIdVert.end()) {\r\n\t\t\t\t\tnewVertices.push_back(vertices()[v1]);\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColors.push_back(oldColors[v1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormals.push_back(oldNormals[v1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoords.push_back(oldTexCoords[v1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmapIdVert[v1] = cmptValidVert;\r\n\t\t\t\t\tcmptValidVert++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsearch = mapIdVert.find(v2);\r\n\t\t\t\tif (search == mapIdVert.end()) {\r\n\t\t\t\t\tnewVertices.push_back(vertices()[v2]);\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColors.push_back(oldColors[v2]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormals.push_back(oldNormals[v2]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoords.push_back(oldTexCoords[v2]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmapIdVert[v2] = cmptValidVert;\r\n\t\t\t\t\tcmptValidVert++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsearch = mapIdVert.find(v3);\r\n\t\t\t\tif (search == mapIdVert.end()) {\r\n\t\t\t\t\tnewVertices.push_back(vertices()[v3]);\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColors.push_back(oldColors[v3]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormals.push_back(oldNormals[v3]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoords.push_back(oldTexCoords[v3]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmapIdVert[v3] = cmptValidVert;\r\n\t\t\t\t\tcmptValidVert++;\r\n\t\t\t\t}\r\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(mapIdVert[v1], mapIdVert[v2]\r\n\t\t\t\t\t, mapIdVert[v3]));\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tMesh newMesh;\r\n\t\tnewMesh.vertices(newVertices);\r\n\t\tnewMesh.triangles(newTriangles);\r\n\t\tif (hasColors())\r\n\t\t\tnewMesh.colors(newColors);\r\n\t\tif (hasNormals())\r\n\t\t\tnewMesh.normals(newNormals);\r\n\t\tif (hasTexCoords())\r\n\t\t\tnewMesh.texCoords(newTexCoords);\r\n\r\n\t\treturn newMesh;\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::forceBufferGLUpdate(void) const\r\n\t{\r\n\t\tif (!_gl.bufferGL) { SIBR_ERR << \"Tried to forceBufferGL on a non OpenGL Mesh\" << std::endl; return; }\r\n\t\t_gl.dirtyBufferGL = false;\r\n\t\t_gl.bufferGL->build(*this);\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::freeBufferGLUpdate(void) const\r\n\t{\r\n\t\t_gl.dirtyBufferGL = false;\r\n\t\t_gl.bufferGL->free();\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::subdivideMesh2(float threshold) {\r\n\r\n\t\tauto areaHeronsFormula = [](sibr::Vector3f A, sibr::Vector3f B,\r\n\t\t\tsibr::Vector3f C) -> float {\r\n\t\t\tfloat a = distance(A, B);\r\n\t\t\tfloat b = distance(B, C);\r\n\t\t\tfloat c = distance(C, A);\r\n\t\t\treturn sqrtf((a + (b + c))*(c - (a - b))*(c + (a - b))*\r\n\t\t\t\t(a + (b - c))) / 4.f;\r\n\t\t};\r\n\r\n\t\tbool mustChange = true;\r\n\t\twhile (mustChange) {\r\n\t\t\tmustChange = false;\r\n\t\t\tsibr::Mesh::Colors newColors(colors());\r\n\t\t\tsibr::Mesh::Normals newNormals(normals());\r\n\t\t\tsibr::Mesh::UVs newTexCoords(texCoords());\r\n\t\t\tsibr::Mesh::Vertices newVertices(vertices());\r\n\t\t\tsibr::MaterialMesh::MeshIds newMeshIds(meshIds());\r\n\r\n\t\t\tsibr::Mesh::Triangles newTriangles;\r\n\t\t\tsibr::MaterialMesh::MatIds newMatIds;\r\n\t\t\tstd::cout << triangles().size() << \" triangles\" << std::endl;\r\n\t\t\tfor (unsigned int i = 0; i < triangles().size(); i++) {\r\n\t\t\t\tsibr::Vector3u t = triangles().at(i);\r\n\r\n\t\t\t\tint tMatId;\r\n\t\t\t\tif (i < matIds().size())\r\n\t\t\t\t\ttMatId = matIds().at(i);\r\n\r\n\t\t\t\tsibr::Vector3f a = vertices().at(t.x());\r\n\t\t\t\tsibr::Vector3f b = vertices().at(t.y());\r\n\t\t\t\tsibr::Vector3f c = vertices().at(t.z());\r\n\r\n\t\t\t\tif (areaHeronsFormula(a, b, c) >= (_averageArea*threshold)) {\r\n\t\t\t\t\tmustChange = true;\r\n\r\n\t\t\t\t\tsibr::Vector3f aColor, bColor, cColor, aNormal, bNormal, cNormal;\r\n\t\t\t\t\tsibr::Vector2f aTexCoords, bTexCoords, cTexCoords;\r\n\r\n\t\t\t\t\tsibr::Vector3f newColor, newNormal;\r\n\t\t\t\t\tsibr::Vector2f newTexCoord;\r\n\t\t\t\t\tsibr::Vector3f newVertex;\r\n\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColor = (colors().at(t.x()) + colors().at(t.y())\r\n\t\t\t\t\t\t\t+ colors().at(t.z())) / 3.f;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormal = (normals().at(t.x()) + normals().at(t.y())\r\n\t\t\t\t\t\t\t+ normals().at(t.z())) / 3.f;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoord = (texCoords().at(t.x()) + texCoords().at(t.y())\r\n\t\t\t\t\t\t\t+ texCoords().at(t.z())) / 3.f;\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tnewVertex = (vertices().at(t.x()) + vertices().at(t.y())\r\n\t\t\t\t\t\t+ vertices().at(t.z())) / 3.f;\r\n\r\n\t\t\t\t\tnewVertices.push_back(newVertex);\r\n\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColors.push_back(newColor);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormals.push_back(newNormal);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoords.push_back(newTexCoord);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasMeshIds()) {\r\n\t\t\t\t\t\t// Pick the first referenced vertex as the provoking vertex.\r\n\t\t\t\t\t\tnewMeshIds.push_back(meshIds().at(t.x()));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tint newIndexVertex = static_cast<int> (newVertices.size()) - 1;\r\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.x(),\r\n\t\t\t\t\t\tt.y(),\r\n\t\t\t\t\t\tnewIndexVertex));\r\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.y(),\r\n\t\t\t\t\t\tt.z(),\r\n\t\t\t\t\t\tnewIndexVertex));\r\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.z(),\r\n\t\t\t\t\t\tt.x(),\r\n\t\t\t\t\t\tnewIndexVertex));\r\n\t\t\t\t\tif (i < matIds().size()) {\r\n\t\t\t\t\t\tfor (unsigned int n = 0; n < 3; ++n)\r\n\t\t\t\t\t\t\tnewMatIds.push_back(tMatId);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnewTriangles.push_back(t);\r\n\t\t\t\t\tif (i < matIds().size())\r\n\t\t\t\t\t\tnewMatIds.push_back(tMatId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvertices(newVertices);\r\n\t\t\tcolors(newColors);\r\n\t\t\tnormals(newNormals);\r\n\t\t\ttexCoords(newTexCoords);\r\n\t\t\ttriangles(newTriangles);\r\n\t\t\tmatIds(newMatIds);\r\n\t\t\tmeshIds(newMeshIds);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::subdivideMesh(float threshold) {\r\n\r\n\t\tbool mustChange = true;\r\n\t\twhile (mustChange) {\r\n\t\t\tmustChange = false;\r\n\t\t\tsibr::Mesh::Colors newColors(colors());\r\n\t\t\tsibr::Mesh::Normals newNormals(normals());\r\n\t\t\tsibr::Mesh::UVs newTexCoords(texCoords());\r\n\t\t\tsibr::Mesh::Vertices newVertices(vertices());\r\n\t\t\tsibr::MaterialMesh::MeshIds newMeshIds(meshIds());\r\n\r\n\t\t\tsibr::Mesh::Triangles newTriangles;\r\n\t\t\tsibr::MaterialMesh::MatIds newMatIds;\r\n\r\n\r\n\t\t\tstd::cout << triangles().size() << \" triangles\" << std::endl;\r\n\r\n\t\t\tfor (unsigned int i = 0; i < triangles().size(); i++) {\r\n\t\t\t\tsibr::Vector3u t = triangles().at(i);\r\n\r\n\t\t\t\tint tMatId;\r\n\t\t\t\tif (i < matIds().size())\r\n\t\t\t\t\ttMatId = matIds().at(i);\r\n\r\n\t\t\t\tsibr::Vector3f a = vertices().at(t.x());\r\n\t\t\t\tsibr::Vector3f b = vertices().at(t.y());\r\n\t\t\t\tsibr::Vector3f c = vertices().at(t.z());\r\n\r\n\t\t\t\tfloat localMaximum = 0.f;\r\n\t\t\t\tint longestSide;\r\n\r\n\t\t\t\tfloat d = distance(a, b);\r\n\t\t\t\tif (d > localMaximum) {\r\n\t\t\t\t\tlocalMaximum = d; longestSide = 0;\r\n\t\t\t\t}\r\n\t\t\t\td = distance(b, c);\r\n\t\t\t\tif (d > localMaximum) {\r\n\t\t\t\t\tlocalMaximum = d; longestSide = 1;\r\n\t\t\t\t}\r\n\t\t\t\td = distance(c, a);\r\n\t\t\t\tif (d > localMaximum) {\r\n\t\t\t\t\tlocalMaximum = d; longestSide = 2;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif (localMaximum >= (_averageSize*threshold)) {\r\n\t\t\t\t\tmustChange = true;\r\n\r\n\t\t\t\t\tsibr::Vector3f aColor, bColor, cColor, aNormal, bNormal,\r\n\t\t\t\t\t\tcNormal;\r\n\t\t\t\t\tsibr::Vector2f aTexCoords, bTexCoords, cTexCoords;\r\n\r\n\t\t\t\t\tsibr::Vector3f *v1Pos, *v2Pos, *v1Color, *v2Color,\r\n\t\t\t\t\t\t*v1Normal, *v2Normal;\r\n\t\t\t\t\tsibr::Vector2f *v1TexCoords, *v2TexCoords;\r\n\r\n\t\t\t\t\tsibr::Vector3f newColor, newNormal;\r\n\t\t\t\t\tsibr::Vector2f newTexCoord;\r\n\t\t\t\t\tsibr::Vector3f newVertex;\r\n\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\taColor = colors().at(t.x());\r\n\t\t\t\t\t\tbColor = colors().at(t.y());\r\n\t\t\t\t\t\tcColor = colors().at(t.z());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\taNormal = normals().at(t.x());\r\n\t\t\t\t\t\tbNormal = normals().at(t.y());\r\n\t\t\t\t\t\tcNormal = normals().at(t.z());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\taTexCoords = texCoords().at(t.x());\r\n\t\t\t\t\t\tbTexCoords = texCoords().at(t.y());\r\n\t\t\t\t\t\tcTexCoords = texCoords().at(t.z());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (longestSide == 0) {\r\n\t\t\t\t\t\tv1Pos = &a; v2Pos = &b;\r\n\t\t\t\t\t\tv1Color = &aColor; v2Color = &bColor;\r\n\t\t\t\t\t\tv1Normal = &aNormal; v2Normal = &bNormal;\r\n\t\t\t\t\t\tv1TexCoords = &aTexCoords; v2TexCoords = &bTexCoords;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (longestSide == 1) {\r\n\t\t\t\t\t\tv1Pos = &b; v2Pos = &c;\r\n\t\t\t\t\t\tv1Color = &bColor; v2Color = &cColor;\r\n\t\t\t\t\t\tv1Normal = &bNormal; v2Normal = &cNormal;\r\n\t\t\t\t\t\tv1TexCoords = &bTexCoords; v2TexCoords = &cTexCoords;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (longestSide == 2) {\r\n\t\t\t\t\t\tv1Pos = &c; v2Pos = &a;\r\n\t\t\t\t\t\tv1Color = &cColor; v2Color = &aColor;\r\n\t\t\t\t\t\tv1Normal = &cNormal; v2Normal = &aNormal;\r\n\t\t\t\t\t\tv1TexCoords = &cTexCoords; v2TexCoords = &aTexCoords;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewVertex = sibr::Vector3f((v1Pos->x() + v2Pos->x()) / 2.f,\r\n\t\t\t\t\t\t(v1Pos->y() + v2Pos->y()) / 2.f,\r\n\t\t\t\t\t\t(v1Pos->z() + v2Pos->z()) / 2.f);\r\n\t\t\t\t\tnewColor = sibr::Vector3f((v1Color->x() + v2Color->x()) / 2.f,\r\n\t\t\t\t\t\t(v1Color->y() + v2Color->y()) / 2.f,\r\n\t\t\t\t\t\t(v1Color->z() + v2Color->z()) / 2.f);\r\n\t\t\t\t\tnewNormal = sibr::Vector3f((v1Normal->x() + v2Normal->x()) / 2.f,\r\n\t\t\t\t\t\t(v1Normal->y() + v2Normal->y()) / 2.f,\r\n\t\t\t\t\t\t(v1Normal->z() + v2Normal->z()) / 2.f);\r\n\t\t\t\t\tnewTexCoord = sibr::Vector2f((v1TexCoords->x() +\r\n\t\t\t\t\t\tv2TexCoords->x()) / 2.f,\r\n\t\t\t\t\t\t(v1TexCoords->y() + v2TexCoords->y()) / 2.f);\r\n\r\n\t\t\t\t\tnewVertices.push_back(newVertex);\r\n\r\n\t\t\t\t\tif (hasColors()) {\r\n\t\t\t\t\t\tnewColors.push_back(newColor);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasNormals()) {\r\n\t\t\t\t\t\tnewNormals.push_back(newNormal);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasTexCoords()) {\r\n\t\t\t\t\t\tnewTexCoords.push_back(newTexCoord);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (hasMeshIds()) {\r\n\t\t\t\t\t\t// Use the first referenced vertex as the provoking vertex.\r\n\t\t\t\t\t\tnewMeshIds.push_back(meshIds().at(t.x()));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tint newIndexVertex = static_cast<int> (newVertices.size()) - 1;\r\n\t\t\t\t\tif (i < matIds().size()) {\r\n\t\t\t\t\t\tnewMatIds.push_back(tMatId);\r\n\t\t\t\t\t\tnewMatIds.push_back(tMatId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (longestSide == 0) {\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.x(),\r\n\t\t\t\t\t\t\tnewIndexVertex,\r\n\t\t\t\t\t\t\tt.z()));\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(newIndexVertex,\r\n\t\t\t\t\t\t\tt.y(),\r\n\t\t\t\t\t\t\tt.z()));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (longestSide == 1) {\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.x(),\r\n\t\t\t\t\t\t\tt.y(),\r\n\t\t\t\t\t\t\tnewIndexVertex));\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.x(),\r\n\t\t\t\t\t\t\tnewIndexVertex,\r\n\t\t\t\t\t\t\tt.z()));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (longestSide == 2) {\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(t.x(),\r\n\t\t\t\t\t\t\tt.y(),\r\n\t\t\t\t\t\t\tnewIndexVertex));\r\n\t\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(newIndexVertex,\r\n\t\t\t\t\t\t\tt.y(),\r\n\t\t\t\t\t\t\tt.z()));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnewTriangles.push_back(t);\r\n\t\t\t\t\tif (i < matIds().size())\r\n\t\t\t\t\t\tnewMatIds.push_back(tMatId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvertices(newVertices);\r\n\t\t\tcolors(newColors);\r\n\t\t\tnormals(newNormals);\r\n\t\t\ttexCoords(newTexCoords);\r\n\t\t\ttriangles(newTriangles);\r\n\t\t\tmatIds(newMatIds);\r\n\t\t\tmeshIds(newMeshIds);\r\n\t\t}\r\n\t\t// We can now subdivide the large triangles with sub-Triangles\r\n\t}\r\n\r\n\tvoid MaterialMesh::ambientOcclusion(const MaterialMesh::AmbientOcclusion & ao)\r\n\t{\r\n\t\tif (!_aoInitialized) {\r\n\r\n\t\t\t_ambientOcclusion = ao;\r\n\t\t\tcolors(_aoFunction(*this, 64));\r\n\t\t\tcreateSubMeshes();\r\n\t\t\tfloat averageDistance = 0.f;\r\n\t\t\tfor (sibr::Vector3u t : triangles()) {\r\n\r\n\t\t\t\tfloat maximumDistance = 0.f;\r\n\r\n\t\t\t\tsibr::Vector3f a = vertices().at(t.x());\r\n\t\t\t\tsibr::Vector3f b = vertices().at(t.y());\r\n\t\t\t\tsibr::Vector3f c = vertices().at(t.z());\r\n\r\n\t\t\t\tfloat d = distance(a, b);\r\n\t\t\t\tif (d > maximumDistance)  maximumDistance = d;\r\n\t\t\t\td = distance(b, c);\r\n\t\t\t\tif (d > maximumDistance)  maximumDistance = d;\r\n\t\t\t\td = distance(a, c);\r\n\t\t\t\tif (d > maximumDistance)  maximumDistance = d;\r\n\r\n\t\t\t\taverageDistance += maximumDistance;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tconst auto areaHeronsFormula = [](sibr::Vector3f A, sibr::Vector3f B,\r\n\t\t\t\tsibr::Vector3f C) -> float {\r\n\t\t\t\tfloat a = distance(A, B);\r\n\t\t\t\tfloat b = distance(B, C);\r\n\t\t\t\tfloat c = distance(C, A);\r\n\t\t\t\treturn sqrtf((a + (b + c))*(c - (a - b))*(c + (a - b))*\r\n\t\t\t\t\t(a + (b - c))) / 4.f;\r\n\t\t\t};\r\n\r\n\t\t\tfloat averageArea = 0.f;\r\n\t\t\tfor (sibr::Vector3u t : triangles()) {\r\n\r\n\t\t\t\taverageArea += areaHeronsFormula(vertices().at(t.x()),\r\n\t\t\t\t\tvertices().at(t.y()),\r\n\t\t\t\t\tvertices().at(t.z()));\r\n\t\t\t}\r\n\r\n\r\n\r\n\t\t\taverageDistance /= triangles().size();\r\n\t\t\t_averageSize = averageDistance;\r\n\t\t\taverageArea /= triangles().size();\r\n\t\t\t_averageArea = averageArea;\r\n\t\t\tstd::cout << \"Average distance SIZE = \" << _averageSize << std::endl;\r\n\t\t\tstd::cout << \"Average distance SIZE = \" << _averageArea << std::endl;\r\n\t\t\t_aoInitialized = true;\r\n\t\t}\r\n\t\tif (ao.AttenuationDistance != _ambientOcclusion.AttenuationDistance) {\r\n\t\t\t_ambientOcclusion = ao;\r\n\t\t\tcolors(_aoFunction(*this, 64));\r\n\t\t\tcreateSubMeshes();\r\n\t\t}\r\n\t\tif (ao.SubdivideThreshold < _ambientOcclusion.SubdivideThreshold) {\r\n\t\t\t_ambientOcclusion = ao;\r\n\t\t\tsubdivideMesh(_ambientOcclusion.SubdivideThreshold);\r\n\t\t\tcolors(_aoFunction(*this, 64));\r\n\t\t\tcreateSubMeshes();\r\n\t\t}\r\n\t\t_ambientOcclusion = ao;\r\n\t}\r\n\r\n\r\n\tvoid\tMaterialMesh::initAlbedoTextures(void) {\r\n\r\n\t\t//Creates textures for albedo\r\n\t\tif (_albedoTexturesInitialized) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t_albedoTextures.resize(matId2Name().size());\r\n\t\t_idTextures.resize(matId2Name().size());\r\n\t\t_opacityTextures.resize(matId2Name().size());\r\n\t\t_idTexturesOpacity.resize(matId2Name().size());\r\n\t\tunsigned int i = 0;\r\n\t\tfor (auto it = matId2Name().begin();\r\n\t\t\tit != matId2Name().end();\r\n\t\t\t++it)\r\n\t\t{\r\n\t\t\tsibr::ImageRGBA::Ptr texturePtr = diffuseMap(*it);\r\n\t\t\tif (texturePtr) {\r\n\t\t\t\t_albedoTextures[i] = std::shared_ptr<sibr::Texture2DRGBA>(\r\n\t\t\t\t\tnew sibr::Texture2DRGBA(*texturePtr,SIBR_GPU_LINEAR_SAMPLING));\r\n\t\t\t\t_idTextures[i] = _albedoTextures[i]->handle();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_albedoTextures[i] = std::shared_ptr<sibr::Texture2DRGBA>(\r\n\t\t\t\t\tnew sibr::Texture2DRGBA());\r\n\t\t\t\t_idTextures[i] = _albedoTextures[i]->handle();\r\n\t\t\t}\r\n\r\n\t\t\tsibr::ImageRGB::Ptr texturePtrOpacity = opacityMap(*it);\r\n\t\t\tif (texturePtrOpacity && texturePtr) {\r\n\t\t\t\t_opacityTextures[i] = std::shared_ptr<sibr::Texture2DRGB>(\r\n\t\t\t\t\tnew sibr::Texture2DRGB(*texturePtrOpacity,SIBR_GPU_LINEAR_SAMPLING));\r\n\t\t\t\t_idTexturesOpacity[i] = _opacityTextures[i]->handle();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t_opacityTextures[i] = std::shared_ptr<sibr::Texture2DRGB>(\r\n\t\t\t\t\tnew sibr::Texture2DRGB());\r\n\t\t\t\t_idTexturesOpacity[i] = _opacityTextures[i]->handle();\r\n\t\t\t}\r\n\r\n\t\t\tif (_hasTagsCoveringFile && _tagsCoveringMaps[*it]) {\r\n\t\t\t\tsibr::ImageRGB::Ptr texturePtrTag = tagsCoveringMap(*it);\r\n\t\t\t\t_tagsCoveringTexture[*it] = std::shared_ptr<sibr::Texture2DRGB>(\r\n\t\t\t\t\tnew sibr::Texture2DRGB(*texturePtrTag,SIBR_GPU_LINEAR_SAMPLING));\r\n\t\t\t\t_idTagsCoveringTexture[*it] = _tagsCoveringTexture[*it]->handle();\r\n\t\t\t}\r\n\r\n\t\t\t_switchTags[*it] = false;\r\n\r\n\t\t\ti++;\r\n\t\t}\r\n\t\tif (_hasTagsFile) {\r\n\t\t\tsibr::ImageRGB::Ptr texturePtr = _tagsMap;\r\n\t\t\t_tagTexture = std::shared_ptr<sibr::Texture2DRGB>(\r\n\t\t\t\tnew sibr::Texture2DRGB(*texturePtr,SIBR_GPU_LINEAR_SAMPLING));\r\n\t\t\t_idTagTexture = _tagTexture->handle();\r\n\t\t}\r\n\r\n\r\n\t\t_albedoTexturesInitialized = true;\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::renderAlbedo(bool depthTest, bool backFaceCulling,\r\n\t\tRenderMode mode, bool frontFaceCulling, bool invertDepthTest,\r\n\t\tbool specificMaterial, std::string nameOfSpecificMaterial\r\n\t\t) const\r\n\t{\r\n\t\tif (_subMeshes.empty()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tunsigned int i = 0;\r\n\t\tbool textureFound = false;\r\n\t\tstd::string  texName;\r\n\t\tfor (auto it = matId2Name().begin(); it != matId2Name().end() && !textureFound; ++it) {\r\n\r\n\t\t\tif (_albedoTextures[i] != nullptr) {\r\n\r\n\t\t\t\tsibr::ImageRGB::Ptr coveringTagImage = tagsCoveringMap(*it);\r\n\t\t\t\tif (_hasTagsCoveringFile && coveringTagImage\r\n\t\t\t\t\t&& tagsCoveringMaps().find(*it) != tagsCoveringMaps().end()) {\r\n\t\t\t\t\ttexName = *it;\r\n\t\t\t\t\ttextureFound = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\ti = 0;\r\n\t\tfor (auto it = matId2Name().begin(); it != matId2Name().end(); ++it)\r\n\t\t{\r\n\t\t\tif (!specificMaterial || *it == nameOfSpecificMaterial)\r\n\t\t\t\tif (_albedoTextures[i] != nullptr) {\r\n\t\t\t\t\tglActiveTexture(GL_TEXTURE0);\r\n\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTextures[i]);\r\n\r\n\t\t\t\t\tsibr::ImageRGB::Ptr coveringTagImage = tagsCoveringMap(*it);\r\n\t\t\t\t\tif (_hasTagsCoveringFile && coveringTagImage\r\n\t\t\t\t\t\t&& tagsCoveringMaps().find(*it) != tagsCoveringMaps().end()) {\r\n\t\t\t\t\t\tglActiveTexture(GL_TEXTURE1);\r\n\t\t\t\t\t\tif (_switchTags.find(*it) != _switchTags.end() && _switchTags.at(*it)\r\n\t\t\t\t\t\t\t&& _hasTagsFile && _tagTexture)\r\n\t\t\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTagTexture);\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTagsCoveringTexture.at(*it));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (_hasTagsFile && _tagTexture != nullptr) {\r\n\r\n\t\t\t\t\t\tglActiveTexture(GL_TEXTURE1);\r\n\t\t\t\t\t\tif (_switchTags.find(*it) != _switchTags.end() && _switchTags.at(*it)\r\n\t\t\t\t\t\t\t&& _idTagsCoveringTexture.size() > 0)\r\n\t\t\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTagsCoveringTexture.at(texName));\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTagTexture);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tglActiveTexture(GL_TEXTURE2);\r\n\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, _idTexturesOpacity[i]);\r\n\t\t\t\t\t_subMeshes[i].render(depthTest, backFaceCulling, mode,\r\n\t\t\t\t\t\tfrontFaceCulling, invertDepthTest);\r\n\t\t\t\t}\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\t\r\n\t}\r\n\r\n\r\n\tvoid\tMaterialMesh::renderThreeSixty(bool depthTest, bool backFaceCulling,\r\n\t\tRenderMode mode, bool frontFaceCulling, bool invertDepthTest) const\r\n\t{\r\n\r\n\t\tMesh::render(depthTest, backFaceCulling, mode, frontFaceCulling,\r\n\t\t\tinvertDepthTest, true);\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::render(bool depthTest, bool backFaceCulling,\r\n\t\tRenderMode mode, bool frontFaceCulling, bool invertDepthTest,\r\n\t\tbool tessellation, bool adjacency) const\r\n\t{\r\n\t\tif (_typeOfRender == RenderCategory::classic)\r\n\t\t{\r\n\t\t\tMesh::render(depthTest, backFaceCulling, mode, frontFaceCulling,\r\n\t\t\t\tinvertDepthTest, adjacency);\r\n\t\t}\r\n\t\telse if (_typeOfRender == RenderCategory::diffuseMaterials)\r\n\t\t{\r\n\t\t\trenderAlbedo(depthTest, backFaceCulling, mode, frontFaceCulling,\r\n\t\t\t\tinvertDepthTest);\r\n\t\t}\r\n\t\telse if (_typeOfRender == RenderCategory::threesixtyMaterials ||\r\n\t\t\t_typeOfRender == RenderCategory::threesixtyDepth)\r\n\t\t{\r\n\t\t\trenderThreeSixty(depthTest, backFaceCulling, mode, frontFaceCulling,\r\n\t\t\t\tinvertDepthTest);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::merge(const MaterialMesh& other)\r\n\t{\r\n\r\n\t\tif (_vertices.empty())\r\n\t\t{\r\n\t\t\tthis->operator = (other);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst size_t oldVerticesCount = vertices().size();\r\n\t\tconst bool thisHasIds = hasMeshIds();\r\n\r\n\t\tsibr::Mesh::merge(other);\r\n\r\n\t\tuint\t\tmatIdsOffset = static_cast<unsigned int> (_matId2Name.size());\r\n\t\tMatIds\t\tmatIds = other.matIds();\r\n\t\tMatId2Name\tmatId2Name;\r\n\r\n\t\tunsigned int nbOfSimilarity = 0;\r\n\t\tfor (unsigned int i = 0; i < other.matId2Name().size(); ++i) {\r\n\t\t\tbool foundSimilarity = false;\r\n\t\t\tunsigned int indexSimilarMaterial = 0;\r\n\t\t\tfor (unsigned int j = 0; j < _matId2Name.size()\r\n\t\t\t\t&& !foundSimilarity; ++j) {\r\n\r\n\t\t\t\tif (other.matId2Name().at(i).compare(_matId2Name.at(j)) == 0) {\r\n\t\t\t\t\t//We find a similar material present on the two meshes\r\n\t\t\t\t\t//Now we modify all triangles ids corresponding to this \r\n\t\t\t\t\t// material\t\r\n\t\t\t\t\tfoundSimilarity = true;\r\n\t\t\t\t\tnbOfSimilarity++;\r\n\t\t\t\t\tindexSimilarMaterial = j;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!foundSimilarity) {\r\n\t\t\t\t//It's a new material.\r\n\t\t\t\t//We have found a new material, We will merge it in our list\r\n\t\t\t\t//of materials later\r\n\t\t\t\tmatId2Name.push_back(other.matId2Name().at(i));\r\n\t\t\t\t//We substract the number of similarity to avoid\r\n\t\t\t\t//the \"gap\" about the materials index\r\n\t\t\t\tfor (unsigned int j = 0; j < other.matIds().size(); ++j) {\r\n\t\t\t\t\tunsigned int id = other.matIds().at(j);\r\n\t\t\t\t\tif (id == i) {\r\n\t\t\t\t\t\tmatIds[j] = id + matIdsOffset - nbOfSimilarity;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tfor (unsigned int j = 0; j < other.matIds().size(); ++j) {\r\n\t\t\t\t\tunsigned int id = other.matIds().at(j);\r\n\t\t\t\t\tif (id == i) {\r\n\t\t\t\t\t\tmatIds[j] = indexSimilarMaterial;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t_matIds.insert(_matIds.end(), matIds.begin(), matIds.end());\r\n\t\t_matId2Name.insert(_matId2Name.end(), matId2Name.begin(),\r\n\t\t\tmatId2Name.end());\r\n\t\t_opacityMaps.insert(other.opacityMaps().begin(),\r\n\t\t\tother.opacityMaps().end());\r\n\t\t_diffuseMaps.insert(other.diffuseMaps().begin(),\r\n\t\t\tother.diffuseMaps().end());\r\n\r\n\t\t// We have to shift all meshes ids.\r\n\t\tconst bool otherHasIds = other.hasMeshIds();\r\n\t\tif (thisHasIds && otherHasIds) {\r\n\t\t\t// Shift all other IDs by _maxMeshId+1.\r\n\t\t\t_maxMeshId += 1;\r\n\t\t\tMaterialMesh::MeshIds oIds(other.meshIds());\r\n\t\t\tconst int shift = int(_maxMeshId);\r\n\t\t\tfor (size_t vid = 0; vid < oIds.size(); ++vid) {\r\n\t\t\t\toIds[vid] = shift + oIds[vid];\r\n\t\t\t}\r\n\t\t\t_meshIds.insert(_meshIds.end(), oIds.begin(), oIds.end());\r\n\t\t\t_maxMeshId += other._maxMeshId;\r\n\r\n\r\n\t\t}\r\n\t\telse if (thisHasIds) {\r\n\t\t\t// In that case other has no IDs.\r\n\t\t\t_maxMeshId += 1;\r\n\t\t\tMaterialMesh::MeshIds newMeshIds(other.vertices().size(), int(_maxMeshId));\r\n\t\t\t_meshIds.insert(_meshIds.end(), newMeshIds.begin(), newMeshIds.end());\r\n\r\n\t\t}\r\n\t\telse if (otherHasIds) {\r\n\t\t\t// in that case give a new ID to the current mesh and insert the other IDs.\r\n\t\t\t_maxMeshId = other._maxMeshId + 1;\r\n\t\t\t_meshIds = MaterialMesh::MeshIds(oldVerticesCount, int(_maxMeshId));\r\n\t\t\t_meshIds.insert(_meshIds.end(), other.meshIds().begin(), other.meshIds().end());\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::makeWhole(void)\r\n\t{\r\n\t\tsibr::Mesh::makeWhole();\r\n\t\tif (!hasMatIds()) {\r\n\t\t\t_matIds = MatIds(triangles().size(), 0);\r\n\t\t\t_matIdsVertices = MatIds(vertices().size(), 0);\r\n\t\t\t_matId2Name.push_back(\"emptyMat\");\r\n\t\t}\r\n\t\tif (!hasMeshIds()) {\r\n\t\t\t_meshIds = MatIds(vertices().size(), 0);\r\n\t\t\t_maxMeshId = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::createSubMeshes(void) {\r\n\r\n\t\t_subMeshes.clear();\r\n\r\n\t\tfor (unsigned int i = 0; i < _matId2Name.size(); i++)\r\n\t\t{\r\n\t\t\t_subMeshes.push_back(generateSubMaterialMesh(i));\r\n\t\t}\r\n\t}\r\n\r\n\tsibr::MaterialMesh::Ptr MaterialMesh::invertedFacesMesh2() const\r\n\t{\r\n\t\tconst auto invertedFacesMesh = sibr::Mesh::invertedFacesMesh2();\r\n\t\tauto invertedFacesMaterialMesh = std::make_shared<MaterialMesh>\r\n\t\t\t(*invertedFacesMesh);\r\n\t\t// If we have some mesh IDs, just clone them as-is, no need for doubling.\r\n\t\tif (hasMeshIds()) {\r\n\t\t\tinvertedFacesMaterialMesh->meshIds(meshIds());\r\n\t\t}\r\n\r\n\t\tconst int nVertices = (int)vertices().size();\r\n\t\tconst int nTriangles = (int)triangles().size();\r\n\r\n\t\tMesh::Triangles Ntriangles(2 * nTriangles);\r\n\t\tMaterialMesh::MatIds NmatIds(hasMatIds() ? (2 * nTriangles) : 0);\r\n\r\n\t\tint v_id = 0;\r\n\t\tsibr::Vector3u shift(nVertices, nVertices, nVertices);\r\n\t\tint t_id = 0;\r\n\t\tfor (const auto & t : triangles()) {\r\n\t\t\tNtriangles[t_id] = t;\r\n\t\t\tNtriangles[t_id + nTriangles] = t.yxz() + shift;\r\n\t\t\t++t_id;\r\n\t\t}\r\n\t\tinvertedFacesMaterialMesh->triangles(Ntriangles);\r\n\r\n\t\tif (hasMatIds()) {\r\n\t\t\tint m_id = 0;\r\n\t\t\tfor (const auto & m : matIds()) {\r\n\t\t\t\tNmatIds[m_id] = m;\r\n\t\t\t\tNmatIds[m_id + nTriangles] = m;\r\n\t\t\t\t++m_id;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinvertedFacesMaterialMesh->matIds(NmatIds);\r\n\t\tinvertedFacesMaterialMesh->matId2Name(_matId2Name);\r\n\t\tinvertedFacesMaterialMesh->opacityMaps(_opacityMaps);\r\n\t\tinvertedFacesMaterialMesh->diffuseMaps(_diffuseMaps);\r\n\r\n\t\treturn invertedFacesMaterialMesh;\r\n\t}\r\n\r\n\tvoid MaterialMesh::addEnvironmentMap(float* forcedCenterX,\r\n\t\tfloat* forcedCenterY,\r\n\t\tfloat* forcedCenterZ,\r\n\t\tfloat* forcedRadius)\r\n\t{\r\n\t\tsibr::Vector3f center;\r\n\t\tfloat radius;\r\n\t\tgetBoundingSphere(center, radius);\r\n\r\n\t\tif (forcedCenterX) center.x() = *forcedCenterX;\r\n\t\tif (forcedCenterY) center.y() = *forcedCenterY;\r\n\t\tif (forcedCenterZ) center.z() = *forcedCenterZ;\r\n\t\tif (forcedRadius) radius = *forcedRadius;\r\n\r\n\t\t//std::vector<std::string> partsOfSphere;\r\n\t\tstd::vector<PartOfSphere> partsOfSphere = { PartOfSphere::BOTTOM, PartOfSphere::UP };\r\n\t\t//partsOfSphere.push_back(\"bottom\");\r\n\t\t//partsOfSphere.push_back(\"up\");\r\n\r\n\t\tfor (PartOfSphere part : partsOfSphere) {\r\n\t\t\tstd::shared_ptr<Mesh> pSphere = getEnvSphere(center, radius,\r\n\t\t\t\tVector3f(0.f, 1.f, 0.f),\r\n\t\t\t\tVector3f(1.f, 0.f, 0.f),\r\n\t\t\t\tpart\r\n\t\t\t);\r\n\r\n\t\t\tsibr::MaterialMesh sphere(*pSphere);\r\n\r\n\t\t\tMatId2Name materialNames;\r\n\t\t\tMatIds materialIds;\r\n\r\n\t\t\tstd::string matName;\r\n\t\t\tif (part == PartOfSphere::BOTTOM)\r\n\t\t\t\tmatName = std::string(\"SibrSkyEmissivebottom\");\r\n\t\t\telse\r\n\t\t\t\tmatName = std::string(\"SibrSkyEmissiveup\");\r\n\t\t\tmaterialNames.push_back(matName);\r\n\r\n\t\t\tstd::vector<int> matIdsSphere;\r\n\t\t\tfor (unsigned int i = 0; i < sphere.triangles().size(); ++i) {\r\n\t\t\t\tmatIdsSphere.push_back(0);\r\n\t\t\t}\r\n\t\t\tsphere.matId2Name(materialNames);\r\n\t\t\tsphere.matIds(matIdsSphere);\r\n\r\n\t\t\tconst sibr::ImageRGBA::Pixel color(0,\r\n\t\t\t\t255,\r\n\t\t\t\t255,\r\n\t\t\t\t255);\r\n\t\t\tsibr::ImageRGBA::Ptr textureDiffuse(new sibr::ImageRGBA(1, 1, color));\r\n\t\t\t_diffuseMaps[matName] = textureDiffuse;\r\n\r\n\t\t\tconst sibr::ImageRGB::Pixel opacityAlpha(255, 255, 255);\r\n\t\t\tsibr::ImageRGB::Ptr textureOpacity(new sibr::ImageRGB(\r\n\t\t\t\t1, 1, opacityAlpha));\r\n\t\t\t_opacityMaps[matName] = textureOpacity;\r\n\t\t\tsphere.generateNormals();\r\n\t\t\tmerge(sphere);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/MaterialMesh.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <vector>\r\n# include <map>\r\n# include <sstream>\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n# include \"core/graphics/Image.hpp\"\r\n# include \"core/graphics/Mesh.hpp\"\r\n# include \"core/graphics/MeshBufferGL.hpp\"\r\n# include \"core/graphics/Texture.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t\r\n\t/** Store both CPU and GPU data for a geometric mesh.\r\n\t\tSpecifically designed for synthetic scenes with material information.\r\n\t\tProvide many processing and display methods.\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tclass SIBR_GRAPHICS_EXPORT MaterialMesh : public sibr::Mesh\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::vector<int>\t\t\t\t\t\t\t\tMatIds;\r\n\t\ttypedef std::vector<int>\t\t\t\t\t\t\t\tMeshIds;\r\n\t\ttypedef std::vector<std::string>\t\t\t\t\t\tMatId2Name;\r\n\r\n\t\ttypedef std::map<std::string, sibr::ImageRGB::Ptr>\t\tOpacityMaps;\r\n\t\ttypedef std::map<std::string, sibr::ImageRGBA::Ptr>\t\tDiffuseMaps;\r\n\r\n\t\ttypedef sibr::ImageRGB::Ptr\t\t\t\t\t\t\t\tTagsMap;\r\n\t\ttypedef std::map<std::string, sibr::ImageRGB::Ptr>\t\tTagsCoveringMaps;\r\n\r\n\t\ttypedef std::vector<Mesh>\t\t\t\t\t\t\t\tSubMeshes;\r\n\t\ttypedef std::vector<sibr::ImageRGBA>\t\t\t\t\tAlbedoTextures;\r\n\r\n\t\ttypedef std::map<std::string, bool>\t\t\t\t\t\tSwitchTagsProperty;\r\n\r\n\t\tSIBR_CLASS_PTR(MaterialMesh);\r\n\r\n\t\t/** Synthetic data rendering options. */\r\n\t\tenum class RenderCategory\r\n\t\t{\r\n\t\t\tclassic,\r\n\t\t\tdiffuseMaterials,\r\n\t\t\tthreesixtyMaterials,\r\n\t\t\tthreesixtyDepth\r\n\t\t};\r\n\r\n\t\t/** Ambient occlusion options. */\r\n\t\tstruct AmbientOcclusion {\r\n\t\t\tbool AoIsActive = false;\r\n\t\t\tfloat AttenuationDistance = 1.f;\r\n\t\t\tfloat IlluminanceCoefficient = 1.f;\r\n\t\t\tfloat SubdivideThreshold = 10.f;\r\n\t\t};\r\n\t\ttypedef struct AmbientOcclusion AmbientOcclusion;\r\n\r\n\t\tstd::string vertexShaderAlbedo =\r\n\t\t\t\"#version 450\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\r\n\t\t\t\"layout(location = 1) in vec3 in_colors;\t\t\t\\n\"\r\n\t\t\t\"layout(location = 2) in vec2 in_uvCoords;\t\t\t\\n\"\r\n\t\t\t\"layout(location = 3) in vec3 in_normal;\t\t\t\\n\"\r\n\t\t\t\"layout(location = 4) in float in_ao;\t\t\t\\n\"\r\n\t\t\t\"//layout(location = 4) in float in_material;\t\t\t\\n\"\r\n\t\t\t\"layout (location = 2) out vec2 uvCoords;\t\t\t\\n\"\r\n\t\t\t\"//out float material;\t\t\t\\n\"\r\n\t\t\t\"layout (location = 3) out vec3 normal;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"out float ao ;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"out vec3 pos_vertex;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 1) out vec3 colors;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform mat4 MVP;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform bool lightIsPresent;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform vec3 lightPos;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tnormal = in_normal;\t\t\\n\"\r\n\t\t\t\"\tao = in_ao;\t\t\\n\"\r\n\t\t\t\"\tuvCoords = in_uvCoords;\t\t\\n\"\r\n\t\t\t\"\tcolors= in_colors;\t\t\\n\"\r\n\t\t\t\"\tpos_vertex= in_vertex;\t\t\\n\"\r\n\t\t\t\"\t//material= float(in_material);\t\t\\n\"\r\n\t\t\t\"\tgl_Position = MVP*vec4(in_vertex,1) ;\t\t\\n\"\r\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\t\tstd::string fragmentShaderAlbedo =\r\n\t\t\t\"#version 450\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout(binding = 0) uniform sampler2D tex;\t\t\t\t\\n\"\r\n\t\t\t\"layout(binding = 2) uniform sampler2D opacity;\t\t\t\t\\n\"\r\n\t\t\t\"uniform int layer;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform bool AoIsActive;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform vec2 grid;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float IlluminanceCoefficient;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform bool lightIsPresent;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float scaleTags;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float intensityLight;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform vec3 lightPos;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 2) in vec2 uvCoords;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 3) in vec3 normal ;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 1) in vec3 colors;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tvec4 opacityColor;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tvec3 colorsModified = colors;\\n\"\r\n\t\t\t\"\tfloat lighter_ao = colors.x * IlluminanceCoefficient; \\n\"\r\n\t\t\t\"\tif (lighter_ao > 1.f ) lighter_ao = 1.f;\\n\"\r\n\t\t\t\"\tcolorsModified.x = lighter_ao;\\n\"\r\n\t\t\t\"\tcolorsModified.y = lighter_ao;\\n\"\r\n\t\t\t\"\tcolorsModified.z = lighter_ao;\\n\"\r\n\t\t\t\"\topacityColor = texture(opacity,vec2(uvCoords.x,1.0-uvCoords.y));\\n\"\r\n\t\t\t\"\tif (opacityColor.x < 0.1f && opacityColor.y < 0.1f && opacityColor.z < 0.1f ) discard;\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tout_color = texture(tex,vec2(uvCoords.x,1.0-uvCoords.y));\\n\"\r\n\t\t\t//\"\tif (out_color.a != 0.f ) discard; \\n\"\r\n\t\t\t//\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tif (AoIsActive ) {\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tout_color = out_color * vec4(colorsModified,1);\\n}\"\r\n\t\t\t\"\tout_color = vec4(out_color.x,out_color.y,out_color.z,out_color.a);\\n\"\r\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\r\n\t\tstd::string fragmentShaderAlbedoTag =\r\n\t\t\t\"#version 450\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout(binding = 0) uniform sampler2D tex;\t\t\t\t\\n\"\r\n\t\t\t\"layout(binding = 1) uniform sampler2D tags;\t\t\t\t\\n\"\r\n\t\t\t\"layout(binding = 2) uniform sampler2D opacity;\t\t\t\t\\n\"\r\n\t\t\t\"uniform int layer;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float scaleTags;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform bool AoIsActive;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform vec2 grid;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float IlluminanceCoefficient;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform bool lightIsPresent;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float intensityLight;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform vec3 lightPos;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 2) in vec2 uvCoords;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 3) in vec3 normal ;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout (location = 1) in vec3 colors;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"in vec3 pos_vertex;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tvec4 opacityColor;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tvec3 colorsModified = colors;\\n\"\r\n\t\t\t\"\tfloat lighter_ao = colors.x * IlluminanceCoefficient; \\n\"\r\n\t\t\t\"\tif (lighter_ao >= 1.f ) lighter_ao = 1.f;\\n\"\r\n\t\t\t\"\tcolorsModified.x = lighter_ao;\\n\"\r\n\t\t\t\"\tcolorsModified.y = lighter_ao;\\n\"\r\n\t\t\t\"\tcolorsModified.z = lighter_ao;\\n\"\r\n\t\t\t\"\topacityColor = texture(opacity,vec2(uvCoords.x,1.0-uvCoords.y));\\n\"\r\n\t\t\t\"\tif (opacityColor.x < 0.1f || opacityColor.y < 0.1f || opacityColor.z < 0.1f ) discard;\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tout_color = texture(tex,vec2(uvCoords.x,1.0-uvCoords.y));\\n\"\r\n\t\t\t\"\tif (out_color.a < 0.1f ) discard; \\n\"\r\n\t\t\t//\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tout_color = texture(tags,vec2((uvCoords.x)*scaleTags,(1.0-(uvCoords.y))*scaleTags));\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tif (out_color.x == 1.f && out_color.y == 1.f && out_color.z == 1.f)\t\t\\n\"\r\n\t\t\t\"\tout_color = texture(tex,vec2(uvCoords.x,1.0-uvCoords.y));\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tfloat coeffLight = 1.f;\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tif( lightIsPresent) {\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\tvec3 vertexToLight = normalize( lightPos - pos_vertex );\\n\"\r\n\t\t\t\"\t\t\t\tcoeffLight = abs(intensityLight*dot( vertexToLight, normal )) ; \\n\"\r\n\t\t\t//\"\t\t\t\tcoeffLight = max(0.0,powerLight* dot( vertexToLight, normal )) ; \\n\"\r\n\t\t\t\"\t\t\t\tcoeffLight = 0.50+coeffLight/2.0 ; \\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t}\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tif (AoIsActive ) {\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tout_color = out_color * vec4(colorsModified,1);\\n}\"\r\n\t\t\t\"\tout_color = out_color * vec4(coeffLight,coeffLight,coeffLight,1);\\n\"\r\n\t\t\t\"\tout_color = vec4(out_color.x,out_color.y,out_color.z,out_color.a);\\n\"\r\n\t\t\t//\"\tif (out_color.x < 0.01f && out_color.y < 0.01f && out_color.z < 0.01f) discard;\t\t\\n\"\r\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\tpublic:\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param withGraphics init associated OpenGL buffers object (requires an openGL context)\r\n\t\t*/\r\n\t\tMaterialMesh(bool withGraphics = true) : Mesh(withGraphics) {\r\n\t\t}\r\n\r\n\t\t/** Constructor from a basic mesh.\r\n\t\t\\param mesh the mesh to copy\r\n\t\t*/\r\n\t\tMaterialMesh(sibr::Mesh& mesh) : Mesh(mesh) {}\r\n\r\n\t\t/** Set material IDs (per triangle)\r\n\t\t\\param matIds the new ids\r\n\t\t*/\r\n\t\tinline void\tmatIds(const MatIds& matIds);\r\n\t\t\r\n\t\t/** \\return a reference to the per-triangle material IDs. */\r\n\t\tinline const MatIds& matIds(void) const;\r\n\t\t\r\n\t\t/** \\return a reference to the per-vertex material IDs. */\r\n\t\tinline const MatIds& matIdsVertices(void) const;\r\n\r\n\t\t/** \\return true if each triangle has a material ID assigned. */\r\n\t\tinline bool\thasMatIds(void) const;\r\n\r\n\t\t/** \\return the mapping between IDs and material names. */\r\n\t\tinline const MatId2Name& matId2Name(void) const;\r\n\t\t\r\n\t\t/** Set the mapping between IDs and material names.\r\n\t\t\\param matId2Name the new mapping\r\n\t\t*/\r\n\t\tinline void matId2Name(const MatId2Name& matId2Name);\r\n\r\n\t\t/** Set the mesh ID of each vertex.\r\n\t\t\\param meshIds the new ids\r\n\t\t*/\r\n\t\tinline void meshIds(const MeshIds& meshIds);\r\n\t\t\r\n\t\t/** \\return a reference to the per-vertex mesh IDs. */\r\n\t\tinline const MeshIds& meshIds(void) const;\r\n\t\t\r\n\t\t/** \\return true if source mesh information is available for each vertex. */\r\n\t\tinline bool hasMeshIds(void) const;\r\n\r\n\t\t/** Query a material opacity map.\r\n\t\t\\param matName the material name\r\n\t\t\\return the opacity texture if it exist\r\n\t\t*/\r\n\t\tinline sibr::ImageRGB::Ptr opacityMap(const std::string& matName) const;\r\n\t\t\r\n\t\t/** Set all material opacity maps.\r\n\t\t\\param maps the new maps\r\n\t\t*/\r\n\t\tinline void opacityMaps(const OpacityMaps & maps);\r\n\t\t\r\n\t\t/** \\return all opacity maps. */\r\n\t\tinline const OpacityMaps& opacityMaps(void) const;\r\n\r\n\t\t/// Set the switchTag \r\n\t\tinline void switchTag(const SwitchTagsProperty& switchTag);\r\n\t\t/// get the switchTag \r\n\t\tinline const SwitchTagsProperty& switchTag(void) const;\r\n\r\n\t\t/// Return the pointer to oppacity texture if it exist\r\n\t\t/** Query a material diffuse map.\r\n\t\t\\param matName the material name\r\n\t\t\\return the diffuse texture if it exist\r\n\t\t*/\r\n\t\tinline sibr::ImageRGBA::Ptr diffuseMap(const std::string& matName) const;\r\n\t\t\r\n\t\t/** Set all material diffuse maps.\r\n\t\t\\param maps the new maps\r\n\t\t*/\r\n\t\tinline void diffuseMaps(const DiffuseMaps & maps);\r\n\t\t\r\n\t\t/** \\return all diffuse maps. */\r\n\t\tinline const DiffuseMaps& diffuseMaps(void) const;\r\n\t\t\r\n\t\t/** Indicate if the mesh has an associated tag file (for calibration).\r\n\t\t\\param hasOrNot the flag\r\n\t\t*/\r\n\t\tinline void hasTagsFile(bool hasOrNot);\r\n\t\t\r\n\t\t/** \\return true if the mesh has an associated tag file. */\r\n\t\tinline const bool hasTagsFile(void) const;\r\n\t\t\r\n\t\t/** Set the tag map.\r\n\t\t\\param map the new map\r\n\t\t*/\r\n\t\tinline void tagsMap(const TagsMap & map);\r\n\t\t\r\n\t\t/** \\return the current tag map. */\r\n\t\tinline const TagsMap& tagsMap(void) const;\r\n\t\t\r\n\t\t/** Indicate if the mesh has an associated covering tag file (for calibration).\r\n\t\t\\param hasOrNot the flag\r\n\t\t*/\r\n\t\tinline void hasTagsCoveringFile(bool hasOrNot);\r\n\t\t\r\n\t\t/** \\return true if the mesh has an associated covering tag file. */\r\n\t\tinline const bool hasTagsCoveringFile(void) const;\r\n\t\t\r\n\t\t/** Set the covering tag map.\r\n\t\t\\param map the new map\r\n\t\t*/\r\n\t\tinline void tagsCoveringMaps(const TagsCoveringMaps & map);\r\n\t\t\r\n\t\t/** \\return the current covering tag map. */\r\n\t\tinline const TagsCoveringMaps& tagsCoveringMaps(void) const;\r\n\t\t/// Return the pointer to oppacity texture if it exist\r\n\t\tinline sibr::ImageRGB::Ptr tagsCoveringMap(const std::string& matName) const;\r\n\t\t\r\n\t\t/** Set the sub meshes.\r\n\t\t\\param subMeshes a list of submeshes\r\n\t\t*/\r\n\t\tinline void subMeshes(const SubMeshes& subMeshes);\r\n\t\t\r\n\t\t/** \\return the list of submeshes. */\r\n\t\tinline const SubMeshes& subMeshes(void) const;\r\n\r\n\t\t/** Set the synthetic rendering mode.\r\n\t\t\\param type the new mode\r\n\t\t*/\r\n\t\tinline void typeOfRender(const RenderCategory& type);\r\n\t\t\r\n\t\t/** \\return the current synthetic rendering mode. */ \r\n\t\tinline const RenderCategory& typeOfRender(void) const;\r\n\r\n\t\t/** Set the ambient occlusion options and compute AO values, storing them in the vertex colors.\r\n\t\t\\param ao the new options\r\n\t\t*/\r\n\t\tvoid ambientOcclusion(const AmbientOcclusion& ao);\r\n\r\n\t\t/** \\return the current ambient occlusion options. */\r\n\t\tinline const AmbientOcclusion& ambientOcclusion(void);\r\n\r\n\t\t/** Set the function used to compute ambient occlusion at each vertex. \r\n\t\t\\param aoFunction the new function to use \r\n\t\t*/\r\n\t\tinline void aoFunction(std::function<sibr::Mesh::Colors(\r\n\t\t\tsibr::MaterialMesh&,\r\n\t\t\tconst int)>& aoFunction);\r\n\r\n\t\t/** Load a mesh from the disk.\r\n\t\t\\param filename the file path\r\n\t\t\\return a success flag\r\n\t\t\\note Supports OBJ and PLY for now.\r\n\t\t*/\r\n\t\tbool\tload(const std::string& filename);\r\n\r\n\t\t/** Load a scene from a set of mitsuba XML scene files (referencing multiple OBJs/PLYs). \r\n\t\tIt handles instances (duplicating the geometry and applying the per-instance transformation).\r\n\t\t\\param xmlFile the file path\r\n\t\t\\param loadTextures should the material textures be loaded\r\n\t\t\\return a success flag\r\n\t\t*/\r\n\t\tbool\tloadMtsXML(const std::string& xmlFile, bool loadTextures = true);\r\n\r\n\t\t/*\r\n\t\tLoad tags image files from a list of file paths.\r\n\t\t\\param listFilesTags a list of image paths\r\n\t\t*/\r\n\t\tvoid\tloadCoveringTagsTexture(const std::vector<std::string>& listFilesTags);\r\n\r\n\t\t/** Attribute a random color at each vertex based on the material IDs of the faces it belongs to. */\r\n\t\tvoid\tfillColorsWithIndexMaterials();\r\n\r\n\t\t/** Store the material ID of each vertex in its color attribute (R: bits 0-7, G: 8-15, B: 16-23). */\r\n\t\tvoid\tfillColorsWithMatIds();\r\n\r\n\t\t/** Merge another mesh into this one.\r\n\t\t\\param other the mesh to merge\r\n\t\t\\sa makeWhole\r\n\t\t*/\r\n\t\tvoid\tmerge(const MaterialMesh& other);\r\n\r\n\t\t/** Make the mesh whole, ie it will have default values for all components (texture, materials, colors, etc)\r\n\t\t  It is useful when merging two meshes. If the second one is missing some attributes, the merging will break the mesh state if it isn't made whole.\r\n\t\t*/\r\n\t\tvoid\tmakeWhole(void);\r\n\r\n\t\t/** Split the mesh geometry in multiple submeshes based on each vertex material ID. */\r\n\t\tvoid\tcreateSubMeshes(void);\r\n\r\n\t\t/** \\return a copy of the mesh with \"doubled\" faces (obtained by merging the current mesh with a copy with inverted faces. */\r\n\t\tsibr::MaterialMesh::Ptr invertedFacesMesh2() const;\r\n\r\n\t\t/** Force upload of data to the GPU. */\r\n\t\tvoid\tforceBufferGLUpdate(void) const;\r\n\t\t\r\n\t\t/** Delete GPU mesh data. */\r\n\t\tvoid\tfreeBufferGLUpdate(void) const;\r\n\r\n\t\t/** Subdivide a mesh triangles until a triangle area threshold is reached.\r\n\t\t\\param threshold the maximum deviation from the average triangle area allowed\r\n\t\t*/\r\n\t\tvoid subdivideMesh2(float threshold);\r\n\r\n\t\t/** Subdivide a mesh triangles until an edge length threshold is reached.\r\n\t\t\\param threshold the maximum deviation from the average edge length allowed\r\n\t\t*/\r\n\t\tvoid\tsubdivideMesh(float threshold);\r\n\r\n\t\t/** Add an environment sphere to the mesh, surrounding the existing geometry.\r\n\t\t\\param forcedCenterX optional sphere center x coordinate\r\n\t\t\\param forcedCenterY optional sphere center y coordinate\r\n\t\t\\param forcedCenterZ optional sphere center z coordinate\r\n\t\t\\param forcedRadius optional sphere radius\r\n\t\t*/\r\n\t\tvoid addEnvironmentMap(float* forcedCenterX = nullptr,\r\n\t\t\tfloat* forcedCenterY = nullptr,\r\n\t\t\tfloat* forcedCenterZ = nullptr,\r\n\t\t\tfloat* forcedRadius = nullptr);\r\n\r\n\t\t/** Render the geometry using OpenGL.\r\n\t\t\\param depthTest should depth testing be performed\r\n\t\t\\param backFaceCulling should culling be performed\r\n\t\t\\param mode the primitives rendering mode\r\n\t\t\\param frontFaceCulling should the culling test be flipped\r\n\t\t\\param invertDepthTest should the depth test be flipped (GL_GREATER_THAN)\r\n\t\t\\param tessellation should the rendering call tesselation shaders\r\n\t\t\\param adjacency should we get adjacent triangles info in geometry shader\r\n\t\t*/\r\n\t\tvoid\trender(\r\n\t\t\tbool depthTest = true,\r\n\t\t\tbool backFaceCulling = true,\r\n\t\t\tRenderMode mode = FillRenderMode,\r\n\t\t\tbool frontFaceCulling = false,\r\n\t\t\tbool invertDepthTest = false,\r\n\t\t\tbool tessellation = false,\r\n\t\t\tbool adjacency = false\r\n\t\t) const;\r\n\r\n\t\t/** Render the geometry with albedo and tag textures.\r\n\t\t\\param depthTest should depth testing be performed\r\n\t\t\\param backFaceCulling should culling be performed\r\n\t\t\\param mode the primitives rendering mode\r\n\t\t\\param frontFaceCulling should the culling test be flipped\r\n\t\t\\param invertDepthTest should the depth test be flipped (GL_GREATER_THAN)\r\n\t\t\\param specificMaterial should we use a specific material\r\n\t\t\\param nameOfSpecificMaterial name of the specific material\r\n\t\t*/\r\n\t\tvoid\trenderAlbedo(\r\n\t\t\tbool depthTest = true,\r\n\t\t\tbool backFaceCulling = true,\r\n\t\t\tRenderMode mode = FillRenderMode,\r\n\t\t\tbool frontFaceCulling = false,\r\n\t\t\tbool invertDepthTest = false,\r\n\t\t\tbool specificMaterial = false,\r\n\t\t\tstd::string nameOfSpecificMaterial = \"\"\r\n\t\t) const;\r\n\r\n\t\t/** Render the geometry for 360 environment maps.\r\n\t\t\\param depthTest should depth testing be performed\r\n\t\t\\param backFaceCulling should culling be performed\r\n\t\t\\param mode the primitives rendering mode\r\n\t\t\\param frontFaceCulling should the culling test be flipped\r\n\t\t\\param invertDepthTest should the depth test be flipped (GL_GREATER_THAN)\r\n\t\t*/\r\n\t\tvoid\trenderThreeSixty(\r\n\t\t\tbool depthTest,\r\n\t\t\tbool backFaceCulling,\r\n\t\t\tRenderMode mode,\r\n\t\t\tbool frontFaceCulling,\r\n\t\t\tbool invertDepthTest\r\n\t\t) const;\r\n\r\n\t\t/** Upload the material textures to the GPU. */\r\n\t\tvoid\tinitAlbedoTextures(void);\r\n\r\n\t\t/** Generate a mesh containing all triangles with a given material.\r\n\t\t\\param material the material ID\r\n\t\t\\return the submesh\r\n\t\t*/\r\n\t\tMesh generateSubMaterialMesh(int material) const;\r\n\r\n\tprivate:\r\n\r\n\r\n\t\tMatIds\t\t_matIds; ///< Per triangle material ID.\r\n\t\tMatIds\t\t_matIdsVertices; ///< Per vertex material ID.\r\n\t\tMatId2Name\t_matId2Name; ///< ID to name material mapping.\r\n\r\n\t\tMeshIds\t\t_meshIds; ///< Per-vertex submesh ID.\r\n\t\tsize_t\t\t_maxMeshId = 0; ///< Maximum submesh ID encounter.\r\n\r\n\t\tOpacityMaps _opacityMaps; ///< Material opacity images.\r\n\t\tDiffuseMaps _diffuseMaps; ///< Material diffuse images.\r\n\r\n\t\t//std::vector<std::string>\t_uniformColorMtlList;\r\n\t\tTagsMap\t\t_tagsMap;  ///< Material tag images.\r\n\t\tTagsCoveringMaps _tagsCoveringMaps;  ///< Material covering tag images.\r\n\t\tstd::vector<std::string> uniformColorMtlList; ///< List of materials with a diffuse map.\r\n\r\n\t\tSubMeshes\t_subMeshes; ///< Submeshes, one per material, for rendering them separately.\r\n\t\tRenderCategory _typeOfRender = RenderCategory::diffuseMaterials; ///< Synthetic rendering mode.\r\n\r\n\t\tbool _albedoTexturesInitialized = false; ///< Are the texture initialized.\r\n\t\tstd::vector<sibr::Texture2DRGBA::Ptr> _albedoTextures; ///< Albedo textures.\r\n\t\tstd::vector<GLuint> _idTextures; ///< Texture handles.\r\n\t\tstd::vector<sibr::Texture2DRGB::Ptr> _opacityTextures;///< Opacity textures.\r\n\t\tstd::vector<GLuint> _idTexturesOpacity;///< Opacity texture handles.\r\n\r\n\t\tbool _hasTagsFile = false; ///< Is a tag file associated to the mesh.\r\n\t\tsibr::Texture2DRGB::Ptr _tagTexture; ///< Tag texture.\r\n\t\tGLuint _idTagTexture = 0; ///< Tag texture handle.\r\n\r\n\t\tbool _hasTagsCoveringFile = false; ///< Is a covering tag file associated to the mesh.\r\n\t\tsibr::Texture2DRGB::Ptr _tagCoveringTexture;///< Convering tag texture.\r\n\t\tGLuint _idTagCoveringTexture = 0; ///< Covering tag texture handle.\r\n\r\n\t\tstd::vector<sibr::ImageRGB::Ptr> _listCoveringImagesTags;\r\n\t\tstd::map<std::string,sibr::Texture2DRGB::Ptr> _tagsCoveringTexture;\r\n\t\tstd::map<std::string,GLuint> _idTagsCoveringTexture;\r\n\r\n\t\tSwitchTagsProperty _switchTags;\r\n\r\n\t\t//AO attributes\r\n\t\tfloat _currentThreshold;\r\n\t\tAmbientOcclusion _ambientOcclusion; ///< AO options.\r\n\t\tstd::function<sibr::Mesh::Colors(sibr::MaterialMesh&, const int)> _aoFunction; ///< AO generation function.\r\n\t\tbool _aoInitialized = false; ///< Is AO data initialized.\r\n\t\tfloat _averageSize = 0.0f; ///< Average maximum edge length.\r\n\t\tfloat _averageArea = 0.0f; ///< Average triangle area.\r\n\r\n\t};\r\n\r\n\t///// DEFINITION /////\r\n\r\n\r\n\r\n\tvoid\tMaterialMesh::matIds(const MatIds& matIds) {\r\n\t\t_matIds = matIds;\r\n\t}\r\n\tconst MaterialMesh::MatIds& MaterialMesh::matIds(void) const {\r\n\t\treturn _matIds;\r\n\t}\r\n\tbool\tMaterialMesh::hasMatIds(void) const {\r\n\t\treturn (_triangles.size() > 0 && _triangles.size() == _matIds.size());\r\n\t}\r\n\tconst MaterialMesh::MatIds& MaterialMesh::matIdsVertices(void) const {\r\n\t\treturn _matIdsVertices;\r\n\t}\r\n\tconst MaterialMesh::MatId2Name& MaterialMesh::matId2Name(void) const {\r\n\t\treturn _matId2Name;\r\n\t}\r\n\tvoid MaterialMesh::matId2Name(const MatId2Name & matId2Name)\r\n\t{\r\n\t\t_matId2Name = matId2Name;\r\n\t}\r\n\r\n\tvoid\tMaterialMesh::meshIds(const MeshIds& meshIds) {\r\n\t\t_meshIds = meshIds;\r\n\t}\r\n\tconst MaterialMesh::MeshIds& MaterialMesh::meshIds(void) const {\r\n\t\treturn _meshIds;\r\n\t}\r\n\tbool\tMaterialMesh::hasMeshIds(void) const {\r\n\t\treturn (!_meshIds.empty() && _meshIds.size() == _vertices.size());\r\n\t}\r\n\r\n\t// Opacity map function\r\n\tImageRGB::Ptr MaterialMesh::opacityMap(const std::string& matName) const\r\n\t{\r\n\t\tstd::map<std::basic_string<char>, sibr::ImagePtr<unsigned char, 3> >::const_iterator el = _opacityMaps.find(matName);\r\n\t\tif (el != _opacityMaps.end()) {\r\n\t\t\treturn el->second;\r\n\t\t}\r\n\t\treturn nullptr;\r\n\t}\r\n\tconst MaterialMesh::OpacityMaps& MaterialMesh::opacityMaps(void) const\r\n\t{\r\n\t\treturn _opacityMaps;\r\n\t}\r\n\r\n\tvoid MaterialMesh::hasTagsFile(bool hasOrNot) \r\n\t{\r\n\t\t_hasTagsFile = hasOrNot;\r\n\t}\r\n\r\n\tconst bool MaterialMesh::hasTagsFile(void) const \r\n\t{\r\n\t\treturn _hasTagsFile;\r\n\t}\r\n\r\n\tvoid MaterialMesh::hasTagsCoveringFile(bool hasOrNot) \r\n\t{\r\n\t\t_hasTagsCoveringFile = hasOrNot;\r\n\t}\r\n\r\n\tconst bool MaterialMesh::hasTagsCoveringFile(void) const \r\n\t{\r\n\t\treturn _hasTagsCoveringFile;\r\n\t}\r\n\r\n\tvoid MaterialMesh::opacityMaps(const OpacityMaps& maps)\r\n\t{\r\n\t\t_opacityMaps = maps;\r\n\t}\r\n\r\n\tvoid MaterialMesh::tagsMap(const TagsMap & map) {\r\n\t\t_tagsMap = map;\r\n\t}\r\n\r\n\tconst MaterialMesh::TagsMap& MaterialMesh::tagsMap(void) const {\r\n\t\treturn _tagsMap;\r\n\t}\r\n\r\n\tvoid MaterialMesh::tagsCoveringMaps(const TagsCoveringMaps & map) {\r\n\t\t_tagsCoveringMaps = map;\r\n\t}\r\n\r\n\tconst MaterialMesh::TagsCoveringMaps& MaterialMesh::tagsCoveringMaps(void) const {\r\n\t\treturn _tagsCoveringMaps;\r\n\t}\r\n\r\n\tsibr::ImageRGB::Ptr MaterialMesh::tagsCoveringMap(const std::string& matName) const {\r\n\t\tstd::map<std::basic_string<char>, sibr::ImagePtr<unsigned char, 3> >::const_iterator el = _tagsCoveringMaps.find(matName);\r\n\r\n\t\tif (el != _tagsCoveringMaps.end()) {\r\n\t\t\treturn el->second;\r\n\t\t}\r\n\t\telse return nullptr;\r\n\t}\r\n\r\n\t/// Set the switchTag \r\n\tvoid MaterialMesh::switchTag(const SwitchTagsProperty& switchTag) {\r\n\t\t_switchTags = switchTag;\r\n\t}\r\n\t/// get the switchTag \r\n\tconst MaterialMesh::SwitchTagsProperty& MaterialMesh::switchTag(void) const {\r\n\t\treturn _switchTags;\r\n\t}\r\n\r\n\tImageRGBA::Ptr MaterialMesh::diffuseMap(const std::string& matName) const\r\n\t{\r\n\t\tstd::map<std::basic_string<char>, sibr::ImagePtr<unsigned char, 4> >::const_iterator el = _diffuseMaps.find(matName);\r\n\r\n\t\tif (el != _diffuseMaps.end()) {\r\n\t\t\treturn el->second;\r\n\t\t}\r\n\t\telse return nullptr;\r\n\t}\r\n\r\n\t/*ImageRGB MaterialMesh::diffuseMap(const std::string& matName)\r\n\t{\r\n\t\tauto & el =_diffuseMaps.find(matName);\r\n\t\tif (el != _diffuseMaps.end()) {\r\n\t\t\treturn el->second;\r\n\t\t}\r\n\t}*/\r\n\r\n\tconst MaterialMesh::DiffuseMaps& MaterialMesh::diffuseMaps(void) const\r\n\t{\r\n\t\treturn _diffuseMaps;\r\n\t}\r\n\r\n\tvoid MaterialMesh::diffuseMaps(const DiffuseMaps& maps)\r\n\t{\r\n\t\t_diffuseMaps = maps;\r\n\t}\r\n\r\n\tconst MaterialMesh::SubMeshes& MaterialMesh::subMeshes(void) const\r\n\t{\r\n\t\treturn _subMeshes;\r\n\t}\r\n\r\n\r\n\tvoid MaterialMesh::subMeshes(const SubMeshes& subMeshes)\r\n\t{\r\n\t\t_subMeshes = subMeshes;\r\n\t}\r\n\r\n\tconst MaterialMesh::RenderCategory& MaterialMesh::typeOfRender(void) const {\r\n\t\treturn _typeOfRender;\r\n\t}\r\n\r\n\r\n\tinline const MaterialMesh::AmbientOcclusion & MaterialMesh::ambientOcclusion(void)\r\n\t{\r\n\t\treturn _ambientOcclusion;\r\n\t}\r\n\r\n\tinline void MaterialMesh::aoFunction(std::function<sibr::Mesh::Colors\r\n\t(sibr::MaterialMesh&, const int)>&\r\n\t\taoFunction)\r\n\t{\r\n\t\t_aoFunction = aoFunction;\r\n\t}\r\n\r\n\tvoid MaterialMesh::typeOfRender(const RenderCategory& type) {\r\n\t\t_typeOfRender = type;\r\n\t}\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Mesh.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n#include <memory>\n#include <map>\n#include <queue>\n\n#include <assimp/Importer.hpp> // C++ importer interface\n#include <assimp/scene.h> // Output data structure\n#include <assimp/postprocess.h> // Post processing flags\n#include <assimp/cexport.h>\n#include <assimp/Exporter.hpp>\n\n#include \"core/system/ByteStream.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n\n#include \"boost/filesystem.hpp\"\n#include \"core/system/XMLTree.h\"\n#include \"core/system/Matrix.hpp\"\n#include <set>\n#include <boost/variant/detail/substitute.hpp>\n#include \"core/assets/colmapheader.h\"\n\nnamespace sibr\n{\n\ttypedef uint32_t image_t;\n\ttypedef uint32_t camera_t;\n\ttypedef uint64_t point3D_t;\n\ttypedef uint32_t point2D_t;\n\n\tvoid ReadPoints3DBinary(const std::string& path, Mesh::Vertices& verts, Mesh::Colors& cols, int& numverts) {\n\t  std::ifstream file(path, std::ios::binary);\n\t//  CHECK(file.is_open()) << path;\n\n\t  const size_t num_points3D = ReadBinaryLittleEndian<uint64_t>(&file);\n\t  numverts = num_points3D;\n\t  std::cerr << \"Num 3D pts \" << num_points3D << std::endl;\n\t  for (size_t i = 0; i < num_points3D; ++i) {\n\t    //class Point3D point3D;\n\n\t    const uint64_t point3D_id = ReadBinaryLittleEndian<uint64_t>(&file);\n\t  //  num_added_points3D_ = std::max(num_added_points3D_, point3D_id);\n\n\t//    point3D.XYZ()(0) = ReadBinaryLittleEndian<double>(&file);\n\t//    point3D.XYZ()(1) = ReadBinaryLittleEndian<double>(&file);\n\t//    point3D.XYZ()(2) = ReadBinaryLittleEndian<double>(&file);\n\t//    point3D.Color(0) = ReadBinaryLittleEndian<uint8_t>(&file);\n\t//    point3D.Color(1) = ReadBinaryLittleEndian<uint8_t>(&file);\n\t//    point3D.Color(2) = ReadBinaryLittleEndian<uint8_t>(&file);\n\t//    point3D.SetError(ReadBinaryLittleEndian<double>(&file));\n\n\t\tdouble x = ReadBinaryLittleEndian<double>(&file);\n\t\tdouble y = ReadBinaryLittleEndian<double>(&file);\n\t\tdouble z = ReadBinaryLittleEndian<double>(&file);\n\t\tVector3f vert(x,y,z);\n\n\t\tverts.push_back(vert);\n\n\t\tfloat r = float(ReadBinaryLittleEndian<uint8_t>(&file))/255.f;\n\t\tfloat g = float(ReadBinaryLittleEndian<uint8_t>(&file))/255.f;\n\t\tfloat b = float(ReadBinaryLittleEndian<uint8_t>(&file))/255.f;\n\n\t\tVector3f c(r, g, b);\n\n\t\tcols.push_back(c);\n\t\tdouble err =  ReadBinaryLittleEndian<double>(&file);\n\n\t    const size_t track_length = ReadBinaryLittleEndian<uint64_t>(&file);\n\t    //std::cerr << \"Track length \" << track_length << std::endl;\n\t\t// read and include\n\t    for (size_t j = 0; j < track_length; ++j) {\n\t      const image_t image_id = ReadBinaryLittleEndian<image_t>(&file);\n\t      const point2D_t point2D_idx = ReadBinaryLittleEndian<point2D_t>(&file);\n\t      //point3D.Track().AddElement(image_id, point2D_idx);\n\t    }\n\t    //point3D.Track().Compress();\n\n\t    //points3D_.emplace(point3D_id, point3D);\n\t  }\n\t}\n\n\tvoid ReadPoints3DText(const std::string& path, Mesh::Vertices& verts, Mesh::Vertices& cols) {\n\t//  points3D_.clear();\n\t  std::ifstream file(path);\n\t//  CHECK(file.is_open()) << path;\n\t  std::string line;\n\t  std::string item;\n\t  while (std::getline(file, line)) {\n\t    StringTrim(&line);\n\t    if (line.empty() || line[0] == '#') {\n\t      continue;\n\t    }\n\t    std::stringstream line_stream(line);\n\t    // ID\n\t    std::getline(line_stream, item, ' ');\n\t    const point3D_t point3D_id = std::stoll(item);\n\n\t    // Make sure, that we can add new 3D points after reading 3D points\n\t    // without overwriting existing 3D points.\n\t    // num_added_points3D_ = std::max(num_added_points3D_, point3D_id);\n\n\t    // XYZ\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.XYZ(0) = \" << std::stold(item) << std::endl;\n\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.XYZ(1) = \" << std::stold(item) << std::endl;\n\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.XYZ(2) = \" << std::stold(item) << std::endl;\n\n\t    // Color\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.Color(0) = \" << static_cast<uint8_t>(std::stoi(item)) << std::endl;\n\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.Color(1) = \" << static_cast<uint8_t>(std::stoi(item)) << std::endl;\n\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.Color(2) = \" << static_cast<uint8_t>(std::stoi(item)) << std::endl;\n\n\t    // ERROR\n\t    std::getline(line_stream, item, ' ');\n\t    std::cerr << \"point3D.SetError(\" << std::stold(item) << std::endl;\n\n\t    // TRACK\n\t    while (!line_stream.eof()) {\n\t    //  TrackElement track_el;\n\n\t      std::getline(line_stream, item, ' ');\n\t      StringTrim(&item);\n\t      if (item.empty()) {\n\t\tbreak;\n\t      }\n\t      std::cerr << \"track_el.image_id = \" << std::stoul(item) << std::endl;\n\n\t      std::getline(line_stream, item, ' ');\n\t      std::cerr << \"track_el.point2D_idx = \" << std::stoul(item) << std::endl;\n\t//      point3D.Track().AddElement(track_el);\n\t    }\n\t //   point3D.Track().Compress();\n\t  //  points3D_.emplace(point3D_id, point3D);\n\t  }\n\t}\n\n\tMesh::Mesh(bool withGraphics) : _meshPath(\"\") {\n\t\tif (withGraphics) {\n\t\t\t_gl.bufferGL.reset(new MeshBufferGL);\n\t\t}\n\t\telse {\n\t\t\t_gl.bufferGL = nullptr;\n\t\t}\n\t}\n\n\tbool\t\tMesh::saveToObj(const std::string& filename)  const\n\t{\n\t\taiScene scene;\n\t\tscene.mRootNode = new aiNode();\n\n\t\tscene.mMaterials = new aiMaterial * [1];\n\t\tscene.mMaterials[0] = nullptr;\n\t\tscene.mNumMaterials = 1;\n\n\t\tscene.mMaterials[0] = new aiMaterial();\n\n\t\tscene.mMeshes = new aiMesh * [1];\n\t\tscene.mNumMeshes = 1;\n\n\t\tscene.mMeshes[0] = new aiMesh();\n\t\tscene.mMeshes[0]->mMaterialIndex = 0;\n\n\t\tscene.mRootNode->mMeshes = new unsigned int[1];\n\t\tscene.mRootNode->mMeshes[0] = 0;\n\t\tscene.mRootNode->mNumMeshes = 1;\n\n\t\tauto pMesh = scene.mMeshes[0];\n\n\t\tconst auto& vVertices = _vertices;\n\n\t\tpMesh->mVertices = new aiVector3D[vVertices.size()];\n\t\tpMesh->mNumVertices = static_cast<unsigned int>(vVertices.size());\n\n\t\tif (hasNormals()) {\n\t\t\tpMesh->mNormals = new aiVector3D[vVertices.size()];\n\t\t}\n\t\telse {\n\t\t\tpMesh->mNormals = nullptr;\n\t\t}\n\n\t\tif (hasTexCoords()) {\n\t\t\tpMesh->mTextureCoords[0] = new aiVector3D[vVertices.size()];\n\t\t\tpMesh->mNumUVComponents[0] = 2;\n\t\t}\n\t\telse {\n\t\t\tpMesh->mTextureCoords[0] = nullptr;\n\t\t\tpMesh->mNumUVComponents[0] = 0;\n\t\t}\n\n\t\tint j = 0;\n\t\tfor (auto itr = vVertices.begin(); itr != vVertices.end(); ++itr)\n\t\t{\n\t\t\tpMesh->mVertices[itr - vVertices.begin()] = aiVector3D(vVertices[j].x(), vVertices[j].y(), vVertices[j].z());\n\t\t\tif (hasNormals())\n\t\t\t\tpMesh->mNormals[itr - vVertices.begin()] = aiVector3D(_normals[j].x(), _normals[j].y(), _normals[j].z());\n\t\t\tif (hasTexCoords())\n\t\t\t\tpMesh->mTextureCoords[0][itr - vVertices.begin()] = aiVector3D(_texcoords[j][0], _texcoords[j][1], 0);\n\t\t\tj++;\n\t\t}\n\n\t\tpMesh->mFaces = new aiFace[_triangles.size()];\n\t\tpMesh->mNumFaces = (unsigned int)(_triangles.size());\n\n\t\tfor (uint i = 0; i < _triangles.size(); ++i)\n\t\t{\n\t\t\tconst Vector3u& tri = _triangles[i];\n\t\t\taiFace& face = pMesh->mFaces[i];\n\t\t\tface.mIndices = new unsigned int[3];\n\t\t\tface.mNumIndices = 3;\n\n\t\t\tface.mIndices[0] = tri[0];\n\t\t\tface.mIndices[1] = tri[1];\n\t\t\tface.mIndices[2] = tri[2];\n\t\t}\n\t\tAssimp::Exporter mAiExporter;\n\t\tconst aiScene* s = (const aiScene*)&(scene);\n\n\t\tSIBR_LOG << \"Saving (via ASSIMP) \" << filename << \"'...\" << std::endl;\n\t\tmAiExporter.Export(s, \"obj\", filename);\n\n\t\t// mesh and scene destructors free memory\n\n\n\t\treturn true;\n\t}\n\n\n\tbool\t\tMesh::saveToBinaryPLY(const std::string& filename, bool universal, const std::string& textureName)  const\n\t{\n\t\tassert(_vertices.size());\n\n\t\tSIBR_LOG << \"Saving '\" << filename << \"'...\" << std::endl;\n\n\t\t// Note that Assimp supports also export for some formats. However,\n\t\t// when I tried with the current Assimp version (3.0) it failed to\n\t\t// do a good export for .ply (using binary version).\n\t\t// In addition, at this time there is no control/ExportProperties.\n\t\t// Thus I just do it myself.\n\n\t\tstd::ofstream\tfile(filename.c_str(), std::ios::out | std::ios::trunc | std::ios::binary);\n\n\t\tif (file)\n\t\t{\n\t\t\tfile << \"ply\" << std::endl;\n\t\t\tfile << \"format binary_big_endian 1.0\" << std::endl;\n\t\t\tfile << \"comment Created by SIBR project\" << std::endl;\n\t\t\tif (hasTexCoords())\n\t\t\t{\n\t\t\t\tfile << \"comment TextureFile \" << textureName << std::endl;\n\t\t\t}\n\t\t\tfile << \"element vertex \" << _vertices.size() << std::endl;\n\t\t\tfile << \"property float x\" << std::endl;\n\t\t\tfile << \"property float y\" << std::endl;\n\t\t\tfile << \"property float z\" << std::endl;\n\t\t\tif (hasColors())\n\t\t\t{\n\t\t\t\tif (universal)\n\t\t\t\t{\n\t\t\t\t\tfile << \"property uchar red\" << std::endl;\n\t\t\t\t\tfile << \"property uchar green\" << std::endl;\n\t\t\t\t\tfile << \"property uchar blue\" << std::endl;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfile << \"property ushort red\" << std::endl;\n\t\t\t\t\tfile << \"property ushort green\" << std::endl;\n\t\t\t\t\tfile << \"property ushort blue\" << std::endl;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tif (hasNormals())\n\t\t\t{\n\t\t\t\tfile << \"property float nx\" << std::endl;\n\t\t\t\tfile << \"property float ny\" << std::endl;\n\t\t\t\tfile << \"property float nz\" << std::endl;\n\t\t\t}\n\t\t\tif (hasTexCoords())\n\t\t\t{\n\t\t\t\tfile << \"property float texture_u\" << std::endl;\n\t\t\t\tfile << \"property float texture_v\" << std::endl;\n\t\t\t}\n\n\t\t\tfile << \"element face \" << _triangles.size() << std::endl;\n\t\t\tfile << \"property list uchar uint vertex_indices\" << std::endl;\n\t\t\tfile << \"end_header\" << std::endl;\n\n\t\t\t/// BINARY version /////\n\t\t\tByteStream\tbytes;\n\n\t\t\tfor (uint i = 0; i < _vertices.size(); ++i)\n\t\t\t{\n\t\t\t\tconst Vector3f& v = _vertices[i];\n\n\t\t\t\tbytes << float(v[0]) << float(v[1]) << float(v[2]);\n\n\t\t\t\tif (hasColors())\n\t\t\t\t{\n\t\t\t\t\tconst Vector3f& c = _colors[i];\n\t\t\t\t\tif (universal)\n\t\t\t\t\t\tbytes\n\t\t\t\t\t\t<< uint8(c[0] * (UINT8_MAX - 1))\n\t\t\t\t\t\t<< uint8(c[1] * (UINT8_MAX - 1))\n\t\t\t\t\t\t<< uint8(c[2] * (UINT8_MAX - 1)); // ! converting colors explicitly\n\t\t\t\t\telse\n\t\t\t\t\t\tbytes\n\t\t\t\t\t\t<< uint16(c[0] * (UINT16_MAX - 1))\n\t\t\t\t\t\t<< uint16(c[1] * (UINT16_MAX - 1))\n\t\t\t\t\t\t<< uint16(c[2] * (UINT16_MAX - 1)); // ! converting colors explicitly\n\t\t\t\t}\n\n\t\t\t\tif (hasNormals())\n\t\t\t\t{\n\t\t\t\t\tconst Vector3f& n = _normals[i];\n\n\t\t\t\t\tbytes << float(n[0]) << float(n[1]) << float(n[2]);\n\t\t\t\t}\n\n\t\t\t\tif (hasTexCoords())\n\t\t\t\t{\n\t\t\t\t\tconst Vector2f& uv = _texcoords[i];\n\n\t\t\t\t\tbytes << float(uv[0]) << float(uv[1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (uint i = 0; i < _triangles.size(); ++i)\n\t\t\t{\n\t\t\t\tconst Vector3u& tri = _triangles[i];\n\n\t\t\t\tbytes << uint8(3);\n\t\t\t\tfor (uint j = 0; j < 3; ++j)\n\t\t\t\t\tbytes << uint32(tri[j]);\n\t\t\t}\n\n\t\t\tfile.write(reinterpret_cast<const char*>(bytes.buffer()), bytes.bufferSize());\n\t\t\tfile.close();\n\t\t\tSIBR_LOG << \"Saving '\" << filename << \"'... done\" << std::endl;\n\t\t\treturn true;\n\t\t}\n\t\tSIBR_LOG << \"error: cannot write to file '\" << filename << \"'.\" << std::endl;\n\t\treturn false;\n\n\t}\n\n\tbool\t\tMesh::saveToASCIIPLY(const std::string& filename, bool universal, const std::string& textureName) const\n\t{\n\t\tassert(_vertices.size());\n\n\t\t// Note that Assimp supports also export for some formats. However,\n\t\t// when I tried with the current Assimp version (3.0) it failed to\n\t\t// do a good export for .ply (using binary version).\n\t\t// In addition, at this time there is no control/ExportProperties.\n\t\t// Thus I just do it myself.\n\n\t\tstd::ofstream\tfile(filename.c_str(), std::ios::out | std::ios::trunc | std::ios::binary);\n\n\t\tif (file)\n\t\t{\n\t\t\tfile << \"ply\" << std::endl;\n\t\t\tfile << \"format ascii 1.0\" << std::endl;\n\t\t\tfile << \"comment Created by SIBR project\" << std::endl;\n\t\t\tif (hasTexCoords())\n\t\t\t{\n\t\t\t\tfile << \"comment TextureFile \" << textureName << std::endl;\n\t\t\t}\n\t\t\tfile << \"element vertex \" << _vertices.size() << std::endl;\n\t\t\tfile << \"property float x\" << std::endl;\n\t\t\tfile << \"property float y\" << std::endl;\n\t\t\tfile << \"property float z\" << std::endl;\n\n\t\t\tif (hasColors())\n\t\t\t{\n\t\t\t\tif (universal)\n\t\t\t\t{\n\t\t\t\t\tfile << \"property uchar red\" << std::endl;\n\t\t\t\t\tfile << \"property uchar green\" << std::endl;\n\t\t\t\t\tfile << \"property uchar blue\" << std::endl;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfile << \"property ushort red\" << std::endl;\n\t\t\t\t\tfile << \"property ushort green\" << std::endl;\n\t\t\t\t\tfile << \"property ushort blue\" << std::endl;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasNormals())\n\t\t\t{\n\t\t\t\tfile << \"property float nx\" << std::endl;\n\t\t\t\tfile << \"property float ny\" << std::endl;\n\t\t\t\tfile << \"property float nz\" << std::endl;\n\t\t\t}\n\n\t\t\tif (hasTexCoords())\n\t\t\t{\n\t\t\t\tfile << \"property float texture_u\" << std::endl;\n\t\t\t\tfile << \"property float texture_v\" << std::endl;\n\t\t\t}\n\n\t\t\tfile << \"element face \" << _triangles.size() << std::endl;\n\t\t\tfile << \"property list uchar uint vertex_indices\" << std::endl;\n\t\t\tfile << \"end_header\" << std::endl;\n\n\t\t\t/////// ASCII version /////\n\n\t\t\tfor (uint i = 0; i < _vertices.size(); ++i)\n\t\t\t{\n\t\t\t\tconst Vector3f& v = _vertices[i];\n\n\t\t\t\tfile << v[0] << \" \" << v[1] << \" \" << v[2] << \" \";\n\n\t\t\t\tif (hasColors())\n\t\t\t\t{\n\t\t\t\t\tconst Vector3f& c = _colors[i];\n\n\t\t\t\t\tif (universal)\n\t\t\t\t\t{\n\t\t\t\t\t\tfile << int(c[0] * (UINT8_MAX - 1)) << \" \"\n\t\t\t\t\t\t\t<< int(c[1] * (UINT8_MAX - 1)) << \" \"\n\t\t\t\t\t\t\t<< int(c[2] * (UINT8_MAX - 1)) << \" \";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tfile << int(c[0] * (UINT16_MAX - 1)) << \" \"\n\t\t\t\t\t\t\t<< int(c[1] * (UINT16_MAX - 1)) << \" \"\n\t\t\t\t\t\t\t<< int(c[2] * (UINT16_MAX - 1)) << \" \";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasNormals())\n\t\t\t\t{\n\t\t\t\t\tconst Vector3f& n = _normals[i];\n\n\t\t\t\t\tfile << n[0] << \" \" << n[1] << \" \" << n[2] << \" \";\n\t\t\t\t}\n\n\t\t\t\tif (hasTexCoords())\n\t\t\t\t{\n\t\t\t\t\tconst Vector2f& uv = _texcoords[i];\n\n\t\t\t\t\tfile << uv[0] << \" \" << uv[1] << \" \";\n\t\t\t\t}\n\n\t\t\t\tfile << std::endl;\n\t\t\t}\n\n\t\t\tfor (uint i = 0; i < _triangles.size(); ++i)\n\t\t\t{\n\t\t\t\tconst Vector3u& tri = _triangles[i];\n\n\t\t\t\tfile << 3;\n\t\t\t\tfor (uint j = 0; j < 3; ++j)\n\t\t\t\t\tfile << \" \" << tri[j];\n\t\t\t\tfile << std::endl;\n\t\t\t}\n\n\t\t\tfile.close();\n\t\t\tSIBR_LOG << \"'\" << filename << \"' saved.\" << std::endl;\n\t\t\treturn true;\n\t\t}\n\t\tSIBR_LOG << \"error: cannot write to file '\" << filename << \"'.\" << std::endl;\n\t\treturn false;\n\n\t}\n\tbool\tMesh::load(const std::string& filename, const std::string& dataset_path )\n\t{\n\t\t// Does the file exists?\n\t\tif (!sibr::fileExists(filename)) {\n\t\t\tSIBR_LOG << \"Error: can't load mesh '\" << filename << \".\" << std::endl;\n\t\t\treturn false;\n\t\t}\n\t\tAssimp::Importer\timporter;\n\t\t//importer.SetPropertyBool(AI_CONFIG_PP_FD_REMOVE, true); // cause Assimp to remove all degenerated faces as soon as they are detected\n\t\tconst aiScene* scene = importer.ReadFile(filename, aiProcess_Triangulate | aiProcess_JoinIdenticalVertices | aiProcess_FindDegenerates);\n\n\t\tif (!scene)\n\t\t{\n\t\t\tSIBR_LOG << \"error: can't load mesh '\" << filename\n\t\t\t\t<< \"' (\" << importer.GetErrorString() << \").\" << std::endl;\n\t\t\treturn false;\n\t\t}\n\n\t\t// check for texture\n\t\taiMaterial *material;\n\t\tif( scene->mNumMaterials > 0 ) {\n\t\t\tmaterial = scene->mMaterials[0];\n\t\t\taiString Path;\n\t\t\tif(material->GetTexture(aiTextureType_DIFFUSE, 0, &Path, NULL, NULL, NULL, NULL, NULL) == AI_SUCCESS ) {\n\t\t\t\t_textureImageFileName = Path.data;\n\t\t\t\tstd::cerr << \"Texture name \" << _textureImageFileName << std::endl;\n\t\t\t}\n\n\t\t}\n\n\t\tif (scene->mNumMeshes == 0)\n\t\t{\n\t\t\tSIBR_LOG << \"error: the loaded model file ('\" << filename\n\t\t\t\t<< \"') contains zero or more than one mesh. Number of meshes : \" << scene->mNumMeshes << std::endl;\n\t\t\treturn false;\n\t\t}\n\n\t\tauto convertVec = [](const aiVector3D& v) { return Vector3f(v.x, v.y, v.z); };\n\t\t_triangles.clear();\n\n\t\tuint offsetVertices = 0;\n\t\tuint offsetFaces = 0;\n\t\tuint matId = 0;\n\t\tstd::map<std::string, int> matName2Id;\n\t\tMatrix3f converter;\n\t\tconverter <<\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1;\n\n\t\tfor (uint meshId = 0; meshId < scene->mNumMeshes; ++meshId) {\n\t\t\tconst aiMesh* mesh = scene->mMeshes[meshId];\n\n\t\t\t_vertices.resize(offsetVertices + mesh->mNumVertices);\n\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i)\n\t\t\t\t_vertices[offsetVertices + i] = converter * convertVec(mesh->mVertices[i]);\n\n\n\t\t\tif (mesh->HasVertexColors(0) && mesh->mColors[0])\n\t\t\t{\n\t\t\t\t_colors.resize(offsetVertices + mesh->mNumVertices);\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i)\n\t\t\t\t{\n\t\t\t\t\t_colors[offsetVertices + i] = Vector3f(\n\t\t\t\t\t\tmesh->mColors[0][i].r,\n\t\t\t\t\t\tmesh->mColors[0][i].g,\n\t\t\t\t\t\tmesh->mColors[0][i].b);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mesh->HasNormals())\n\t\t\t{\n\t\t\t\t_normals.resize(offsetVertices + mesh->mNumVertices);\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i) {\n\t\t\t\t\t_normals[offsetVertices + i] = converter * convertVec(mesh->mNormals[i]);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (mesh->HasTextureCoords(0))\n\t\t\t{\n\t\t\t\t_texcoords.resize(offsetVertices + mesh->mNumVertices);\n\t\t\t\tfor (uint i = 0; i < mesh->mNumVertices; ++i)\n\t\t\t\t\t_texcoords[offsetVertices + i] = convertVec(mesh->mTextureCoords[0][i]).xy();\n\t\t\t\t// TODO: make a clean function\n\t\t\t\tstd::string texFileName = dataset_path + \"/capreal/\" + _textureImageFileName;\n\t\t\t\tif( !fileExists(texFileName))\n\t\t\t\t\ttexFileName = parentDirectory(parentDirectory(dataset_path)) + \"/capreal/\" + _textureImageFileName;\n\t\t\t\tif( !fileExists(texFileName))\n\t\t\t\t\ttexFileName = parentDirectory(dataset_path) + \"/capreal/\" + _textureImageFileName;\n\n\t\t\t\tif (!mesh->HasVertexColors(0) && fileExists(texFileName)) {\n\t\t\t\t\t// Sample the texture\n\t\t\t\t\tsibr::ImageRGB texImg;\n\t\t\t\t\ttexImg.load(texFileName);\n\t\t\t\t\tstd::cout << \"Computing vertex colors ..\";\n\t\t\t\t\t_colors.resize(offsetVertices + mesh->mNumVertices);\n\t\t\t\t\tfor (uint ci = 0; ci < mesh->mNumVertices; ++ci)\n\t\t\t\t\t{\n\t\t\t\t\t\tVector2f uv = _texcoords[offsetVertices + ci];\n\t\t\t\t\t\tVector3ub col = texImg((uv[0]*texImg.w()), uint((1-uv[1])*texImg.h()));\n\t\t\t\t\t\t_colors[offsetVertices + ci] = Vector3f(float(col[0]) / 255.0, float(col[1]) / 255.0, float(col[2]) / 255.0);\n\t\t\t\t\t}\n\t\t\t\t\tSIBR_WRG << \"Done.\" << std::endl;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (meshId == 0) {\n\t\t\t\tSIBR_LOG << \"Mesh contains: colors: \" << mesh->HasVertexColors(0)\n\t\t\t\t\t<< \", normals: \" << mesh->HasNormals()\n\t\t\t\t\t<< \", texcoords: \" << mesh->HasTextureCoords(0) << std::endl;\n\t\t\t}\n\n\t\t\t_triangles.reserve(offsetFaces + mesh->mNumFaces);\n\t\t\tfor (uint i = 0; i < mesh->mNumFaces; ++i)\n\t\t\t{\n\t\t\t\tconst aiFace* f = &mesh->mFaces[i];\n\t\t\t\tif (f->mNumIndices != 3)\n\t\t\t\t\tSIBR_LOG << \"warning: discarding a face (not a triangle, num indices: \"\n\t\t\t\t\t<< f->mNumIndices << \")\" << std::endl;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tVector3u tri = Vector3u(offsetVertices + f->mIndices[0], offsetVertices + f->mIndices[1], offsetVertices + f->mIndices[2]);\n\t\t\t\t\tif (tri[0] < 0 || tri[0] >= _vertices.size()\n\t\t\t\t\t\t|| tri[1] < 0 || tri[1] >= _vertices.size()\n\t\t\t\t\t\t|| tri[2] < 0 || tri[2] >= _vertices.size())\n\t\t\t\t\t\tSIBR_WRG << \"face num [\" << i << \"] contains invalid vertex id(s)\" << std::endl;\n\t\t\t\t\telse {\n\t\t\t\t\t\t_triangles.push_back(tri);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toffsetFaces = (uint)_triangles.size();\n\t\t\toffsetVertices = (uint)_vertices.size();\n\n\t\t}\n\n\t\t_meshPath = filename;\n\n\t\tSIBR_LOG << \"Mesh '\" << filename << \" successfully loaded. \" << scene->mNumMeshes << \" meshes were loaded with a total of \"\n\t\t\t<< \" (\" << _triangles.size() << \") faces and \"\n\t\t\t<< \" (\" << _vertices.size() << \") vertices detected. Init GL ...\" << std::endl;\n\t\tSIBR_LOG << \"Init GL mesh complete \" << std::endl;\n\n\t\t_gl.dirtyBufferGL = true;\n\t\treturn true;\n\t}\n\t\n\tbool\tMesh::loadSfM(const std::string& filename, const std::string& dataset_path )\n\t{\n\t\t// Does the file exist?\n\t\n\t\tstd::string fname = dataset_path + \"points3D.bin\";\n\n\t\tstd::cerr << \"LOADSFM: Try to open \" << fname << std::endl;\n\n\t\tif (!sibr::fileExists(fname)) {\n\t\t\tSIBR_LOG << \"Error: can't load mesh '\" << fname << \".\" << std::endl;\n\t\t\treturn false;\n\t\t}\n\t\tVertices verts;\n\t\tColors cols;\n\t\tint numverts;\n\n\t\tReadPoints3DBinary(fname, verts, cols, numverts);\n\t\t_triangles.clear();\n\n\t\tuint matId = 0;\n\n\t\t_vertices.resize(numverts);\n\n\t\tfor (uint i = 0; i < numverts;  ++i)\n\t\t\t\t_vertices[i] = verts[i];\n\n\t\t_colors.resize(numverts);\n\n\t\tfor (uint i = 0; i < numverts; ++i)\n\t\t\t_colors[i] = Vector3f(\n\t\t\t\tcols[i].x(), cols[i].y(), cols[i].z());\n\n\t\t_meshPath = dataset_path + \"/points3D.bin\";\n\t\t_renderingOptions.mode = PointRenderMode;\n\n\t\tSIBR_LOG << \"SfM Mesh '\" << filename << \" successfully loaded. \" << \" (\" << _vertices.size() << \") vertices detected. Init GL ...\" << std::endl;\n\t\tSIBR_LOG << \"Init GL mesh complete \" << std::endl;\n\n\t\t_gl.dirtyBufferGL = true;\n\t\treturn true;\n\t}\n\n\n\tbool sibr::Mesh::loadMtsXML(const std::string& xmlFile)\n\t{\n\t\tbool allLoaded = true;\n\t\tstd::string pathFolder = boost::filesystem::path(xmlFile).parent_path().string();\n\t\tsibr::XMLTree doc(xmlFile);\n\n\t\tstd::map<std::string, sibr::Mesh> meshes;\n\t\tstd::map<std::string, std::string> idToFilename;\n\n\t\trapidxml::xml_node<>* nodeScene = doc.first_node(\"scene\");\n\n\t\tfor (rapidxml::xml_node<>* node = nodeScene->first_node(\"shape\");\n\t\t\tnode; node = node->next_sibling(\"shape\"))\n\t\t{\n\t\t\tif (strcmp(node->first_attribute()->name(), \"type\") == 0 &&\n\t\t\t\tstrcmp(node->first_attribute()->value(), \"shapegroup\") == 0) {\n\n\t\t\t\tstd::cout << \"Found : \" << node->first_attribute(\"id\")->value() << std::endl;\n\n\t\t\t\tstd::string id = node->first_attribute(\"id\")->value();\n\t\t\t\tstd::string filename = node->first_node(\"shape\")->first_node(\"string\")->first_attribute(\"value\")->value();\n\t\t\t\tidToFilename[id] = filename;\n\t\t\t}\n\t\t}\n\n\t\tfor (rapidxml::xml_node<>* node = nodeScene->first_node(\"shape\");\n\t\t\tnode; node = node->next_sibling(\"shape\"))\n\t\t{\n\n\t\t\tif (strcmp(node->first_attribute()->name(), \"type\") == 0 &&\n\t\t\t\tstrcmp(node->first_attribute()->value(), \"instance\") == 0\n\t\t\t\t) {\n\t\t\t\trapidxml::xml_node<>* nodeRef = node->first_node(\"ref\");\n\t\t\t\tconst std::string id = nodeRef->first_attribute(\"id\")->value();\n\t\t\t\tconst std::string filename = idToFilename[id];\n\t\t\t\tconst std::string meshPath = pathFolder + \"/\" + filename;\n\n\t\t\t\tif (meshes.find(filename) == meshes.end()) {\n\t\t\t\t\tmeshes[filename] = sibr::Mesh();\n\t\t\t\t\tif (!meshes[filename].load(meshPath)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstd::cout << \"Adding one instance of : \" << filename << std::endl;\n\n\t\t\t\trapidxml::xml_node<>* nodeTrans = node->first_node(\"transform\");\n\t\t\t\tif (nodeTrans) {\n\t\t\t\t\tsibr::Mesh toWorldMesh = meshes[filename];\n\t\t\t\t\trapidxml::xml_node<>* nodeM1 = nodeTrans->first_node(\"matrix\");\n\t\t\t\t\tstd::string matrix1 = nodeM1->first_attribute(\"value\")->value();\n\t\t\t\t\trapidxml::xml_node<>* nodeM2 = nodeM1->next_sibling(\"matrix\");\n\t\t\t\t\tstd::string matrix2 = nodeM2->first_attribute(\"value\")->value();\n\n\n\t\t\t\t\tstd::istringstream issM1(matrix1);\n\t\t\t\t\tstd::vector<std::string> splitM1(std::istream_iterator<std::string>{issM1},\n\t\t\t\t\t\tstd::istream_iterator<std::string>());\n\t\t\t\t\tsibr::Matrix4f m1;\n\t\t\t\t\tm1 <<\n\t\t\t\t\t\tstd::stof(splitM1[0]), std::stof(splitM1[1]), std::stof(splitM1[2]), std::stof(splitM1[3]),\n\t\t\t\t\t\tstd::stof(splitM1[4]), std::stof(splitM1[5]), std::stof(splitM1[6]), std::stof(splitM1[7]),\n\t\t\t\t\t\tstd::stof(splitM1[8]), std::stof(splitM1[9]), std::stof(splitM1[10]), std::stof(splitM1[11]),\n\t\t\t\t\t\tstd::stof(splitM1[12]), std::stof(splitM1[13]), std::stof(splitM1[14]), std::stof(splitM1[15]);\n\n\t\t\t\t\tstd::istringstream issM2(matrix2);\n\t\t\t\t\tstd::vector<std::string> splitM2(std::istream_iterator<std::string>{issM2},\n\t\t\t\t\t\tstd::istream_iterator<std::string>());\n\t\t\t\t\tsibr::Matrix4f m2;\n\t\t\t\t\tm2 <<\n\t\t\t\t\t\tstd::stof(splitM2[0]), std::stof(splitM2[1]), std::stof(splitM2[2]), std::stof(splitM2[3]),\n\t\t\t\t\t\tstd::stof(splitM2[4]), std::stof(splitM2[5]), std::stof(splitM2[6]), std::stof(splitM2[7]),\n\t\t\t\t\t\tstd::stof(splitM2[8]), std::stof(splitM2[9]), std::stof(splitM2[10]), std::stof(splitM2[11]),\n\t\t\t\t\t\tstd::stof(splitM2[12]), std::stof(splitM2[13]), std::stof(splitM2[14]), std::stof(splitM2[15]);\n\n\t\t\t\t\tsibr::Mesh::Vertices vertices;\n\t\t\t\t\tfor (int v = 0; v < toWorldMesh.vertices().size(); v++) {\n\t\t\t\t\t\tsibr::Vector4f v4(toWorldMesh.vertices()[v].x(), toWorldMesh.vertices()[v].y(), toWorldMesh.vertices()[v].z(), 1.0);\n\t\t\t\t\t\tvertices.push_back((m2 * (m1 * v4)).xyz());\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttoWorldMesh.vertices(vertices);\n\t\t\t\t\tmerge(toWorldMesh);\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmerge(meshes[filename]);\n\t\t\t\t}\n\n\n\t\t\t}\n\t\t\telse if (strcmp(node->first_attribute()->name(), \"type\") == 0 &&\n\t\t\t\tstrcmp(node->first_attribute()->value(), \"obj\") == 0\n\t\t\t\t) {\n\t\t\t\trapidxml::xml_node<>* nodeRef = node->first_node(\"string\");\n\t\t\t\tconst std::string filename = nodeRef->first_attribute(\"value\")->value();\n\t\t\t\tconst std::string meshPath = pathFolder + \"/\" + filename;\n\n\t\t\t\tif (meshes.find(filename) == meshes.end()) {\n\t\t\t\t\tmeshes[filename] = sibr::Mesh();\n\t\t\t\t\tif (!meshes[filename].load(meshPath)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstd::cout << \"Adding one instance of : \" << filename << std::endl;\n\n\t\t\t\trapidxml::xml_node<>* nodeTrans = node->first_node(\"transform\");\n\t\t\t\tif (nodeTrans) {\n\t\t\t\t\tsibr::Mesh toWorldMesh = meshes[filename];\n\t\t\t\t\trapidxml::xml_node<>* nodeM1 = nodeTrans->first_node(\"matrix\");\n\t\t\t\t\tstd::string matrix1 = nodeM1->first_attribute(\"value\")->value();\n\n\n\t\t\t\t\tstd::istringstream issM1(matrix1);\n\t\t\t\t\tstd::vector<std::string> splitM1(std::istream_iterator<std::string>{issM1},\n\t\t\t\t\t\tstd::istream_iterator<std::string>());\n\t\t\t\t\tsibr::Matrix4f m1;\n\t\t\t\t\tm1 <<\n\t\t\t\t\t\tstd::stof(splitM1[0]), std::stof(splitM1[1]), std::stof(splitM1[2]), std::stof(splitM1[3]),\n\t\t\t\t\t\tstd::stof(splitM1[4]), std::stof(splitM1[5]), std::stof(splitM1[6]), std::stof(splitM1[7]),\n\t\t\t\t\t\tstd::stof(splitM1[8]), std::stof(splitM1[9]), std::stof(splitM1[10]), std::stof(splitM1[11]),\n\t\t\t\t\t\tstd::stof(splitM1[12]), std::stof(splitM1[13]), std::stof(splitM1[14]), std::stof(splitM1[15]);\n\n\n\t\t\t\t\tsibr::Mesh::Vertices vertices;\n\t\t\t\t\tfor (int v = 0; v < toWorldMesh.vertices().size(); v++) {\n\t\t\t\t\t\tsibr::Vector4f v4(toWorldMesh.vertices()[v].x(), toWorldMesh.vertices()[v].y(), toWorldMesh.vertices()[v].z(), 1.0);\n\t\t\t\t\t\tvertices.push_back((m1 * v4).xyz());\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttoWorldMesh.vertices(vertices);\n\t\t\t\t\tmerge(toWorldMesh);\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmerge(meshes[filename]);\n\t\t\t\t}\n\n\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tvoid\tMesh::save(const std::string& filename, bool universal, const std::string &textureName) const\n\t{\n\t\tif (vertices().empty())\n\t\t\tSIBR_ERR << \"cannot save this mesh (no vertices found)\" << std::endl;\n\t\t// This function is a just a switch (so we can change format details\n\t\t// internally).\n\n\t\tconst std::string ext = sibr::getExtension(filename);\n\t\tif (ext == \"obj\") {\n\t\t\tsaveToObj(filename);\n\t\t}\n\t\telse {\n\t\t\t// If you encounter problem with the resulting mesh, you can switch\n\t\t\t// to the ASCII version for easy reading\n\t\t\t// Meshlab does not support uint16 colors, if you want to use the mesh in such\n\t\t\t// program, set 'universal' = true\n\t\t\tif (universal) {\n\t\t\t\tsaveToASCIIPLY(filename, true, textureName);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsaveToBinaryPLY(filename, false);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tvoid\tMesh::vertices(const std::vector<float>& vertices)\n\t{\n\t\t_gl.dirtyBufferGL = true;\n\t\t_vertices.clear();\n\n\t\t// iterator for values\n\t\tstd::vector<float>::const_iterator it = vertices.begin();\n\n\t\t//\n\t\twhile (it != vertices.end())\n\t\t{\n\t\t\tVector3f vertex;\n\n\t\t\tfor (int i = 0; i < 3; ++i, ++it)\n\t\t\t\tvertex[i] = (*it);\n\n\t\t\t_vertices.push_back(vertex);\n\t\t}\n\t}\n\n\tvoid\tMesh::triangles(const std::vector<uint>& triangles)\n\t{\n\t\t_gl.dirtyBufferGL = true;\n\t\t_triangles.clear();\n\n\t\t// iterator for values\n\t\tstd::vector<uint>::const_iterator it = triangles.begin();\n\n\t\t//\n\t\twhile (it != triangles.end())\n\t\t{\n\t\t\tVector3u triangle;\n\n\t\t\tfor (int i = 0; i < 3; ++i, ++it)\n\t\t\t\ttriangle[i] = (*it);\n\n\t\t\t_triangles.push_back(triangle);\n\t\t}\n\t}\n\n\tvoid\t\tMesh::texCoords(const std::vector<float>& texcoords)\n\t{\n\t\t_gl.dirtyBufferGL = true;\n\t\t_texcoords.clear();\n\n\t\t// iterator for values\n\t\tstd::vector<float>::const_iterator it = texcoords.begin();\n\n\t\t//\n\t\twhile (it != texcoords.end())\n\t\t{\n\t\t\tVector2f texcoord;\n\n\t\t\tfor (int i = 0; i < 2; ++i, ++it)\n\t\t\t\ttexcoord[i] = (*it);\n\n\t\t\t_texcoords.push_back(texcoord);\n\t\t}\n\t}\n\n\tvoid\tMesh::normals(const std::vector<float>& normals)\n\t{\n\t\t_gl.dirtyBufferGL = true;\n\t\t_normals.clear();\n\n\t\t// iterator for values\n\t\tstd::vector<float>::const_iterator it = normals.begin();\n\n\t\t//\n\t\twhile (it != normals.end())\n\t\t{\n\t\t\tVector3f normal;\n\n\t\t\tfor (int i = 0; i < 3; ++i, ++it)\n\t\t\t\tnormal[i] = (*it);\n\n\t\t\t_normals.push_back(normal);\n\t\t}\n\t}\n\n\tvoid\tMesh::generateNormals(void)\n\t{\n\n\t\t// will store a list of normals (of all triangles around each vertex)\n\t\tstd::vector<std::vector<Vector3f>>\tvertexNormals(_vertices.size());\n\n\t\tauto normalizeNormal = [](const Vector3f& normal) -> Vector3f {\n\t\t\tfloat len = normal.norm();\n\t\t\tif (len > std::numeric_limits<float>::epsilon())\n\t\t\t\treturn normal / len;\n\t\t\t//else // may happen on tiny sharp edge, in this case points up\n\t\t\treturn Vector3f(0.f, 1.f, 0.f);\n\t\t};\n\n\t\tint i = 0;\n\t\tfor (const Vector3u& tri : _triangles)\n\t\t{\n\t\t\ti++;\n\t\t\tif (tri[0] > _vertices.size() || tri[1] > _vertices.size() ||\n\t\t\t\ttri[2] > _vertices.size()) {\n\t\t\t\tSIBR_ERR << \"Incorrect indices (\" << i << \") \" << tri[0] << \":\" << tri[1] << \":\" << tri[2] << std::endl;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVector3f u = _vertices[tri[0]] - _vertices[tri[2]];\n\t\t\t\tVector3f v = _vertices[tri[0]] - _vertices[tri[1]];\n\t\t\t\tVector3f normal = normalizeNormal(u.cross(v));\n\n\t\t\t\tvertexNormals[tri[0]].push_back(normal);\n\t\t\t\tvertexNormals[tri[1]].push_back(normal);\n\t\t\t\tvertexNormals[tri[2]].push_back(normal);\n\t\t\t}\n\t\t}\n\n\t\t_normals.resize(vertexNormals.size());\n\t\tfor (uint i = 0; i < _normals.size(); ++i)\n\t\t{\n\t\t\tVector3f n = std::accumulate(vertexNormals[i].begin(), vertexNormals[i].end(), Vector3f(0.f, 0.f, 0.f));\n\t\t\tn = (n / (float)vertexNormals.size());\n\t\t\tn = normalizeNormal(n);\n\t\t\t_normals[i] = -n;\n\t\t}\n\n\t\t_gl.dirtyBufferGL = true;\n\t}\n\n\tvoid\tMesh::generateSmoothNormals(int numIter)\n\t{\n\t\tSIBR_LOG << \"Generate vertex normals...\" << std::endl;\n\t\t// will store a list of normals (of all triangles around each vertex)\n\t\tstd::vector<std::vector<Vector3f>>\tvertexNormals(_vertices.size());\n\n\t\tauto normalizeNormal = [](const Vector3f& normal) -> Vector3f {\n\t\t\tfloat len = normal.norm();\n\t\t\tif (len > std::numeric_limits<float>::epsilon())\n\t\t\t\treturn normal / len;\n\t\t\t//else // may happen on tiny sharp edge, in this case points up\n\t\t\treturn Vector3f(0.f, 1.f, 0.f);\n\t\t};\n\n\n\t\tfor (int i = 0; i < _triangles.size(); i++)\n\t\t{\n\t\t\tconst Vector3u& tri = _triangles[i];\n\t\t\tif (tri[0] > _vertices.size() || tri[1] > _vertices.size() ||\n\t\t\t\ttri[2] > _vertices.size()) {\n\t\t\t\tSIBR_ERR << \"Incorrect indices (\" << i << \") \" << tri[0] << \":\" << tri[1] << \":\" << tri[2] << std::endl;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVector3f u = _vertices[tri[1]] - _vertices[tri[0]];\n\t\t\t\tVector3f v = _vertices[tri[2]] - _vertices[tri[0]];\n\t\t\t\tVector3f normal = u.cross(v);\n\n\t\t\t\tvertexNormals[tri[0]].push_back(normal);\n\t\t\t\tvertexNormals[tri[1]].push_back(normal);\n\t\t\t\tvertexNormals[tri[2]].push_back(normal);\n\t\t\t}\n\t\t}\n\n\t\t_normals.resize(vertexNormals.size());\n\t\t//#pragma omp parallel for\n\t\tfor (int i = 0; i < _normals.size(); ++i)\n\t\t{\n\t\t\tVector3f n = std::accumulate(vertexNormals[i].begin(), vertexNormals[i].end(), Vector3f(0.f, 0.f, 0.f));\n\t\t\tif (numIter == 0)//no iteration\n\t\t\t\tn = normalizeNormal(n);\n\t\t\t_normals[i] = n;\n\t\t}\n\n\t\t//Here we computed normals based on surrounding triangles\n\n\t\tfor (int it = 0; it < numIter; it++) {\n\n\t\t\tstd::vector<std::vector<Vector3f>>\tvertexNormalsIter(_vertices.size());\n\n\t\t\tfor (int i = 0; i < _triangles.size(); i++)\n\t\t\t{\n\t\t\t\tconst Vector3u& tri = _triangles[i];\n\t\t\t\tif (tri[0] > _vertices.size() || tri[1] > _vertices.size() ||\n\t\t\t\t\ttri[2] > _vertices.size()) {\n\t\t\t\t\tSIBR_ERR << \"Incorrect indices (\" << i << \") \" << tri[0] << \":\" << tri[1] << \":\" << tri[2] << std::endl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (int tId = 0; tId < 3; tId++) {\n\t\t\t\t\t\tVector3f normal = _normals[tri[tId]];\n\t\t\t\t\t\tvertexNormalsIter[tri[(tId + 1) % 3]].push_back(normal);\n\t\t\t\t\t\tvertexNormalsIter[tri[(tId + 2) % 3]].push_back(normal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfloat maxLength = 0.0f;\n\t\t\tfor (int i = 0; i < _normals.size(); ++i)\n\t\t\t{\n\t\t\t\tVector3f n = std::accumulate(vertexNormalsIter[i].begin(), vertexNormalsIter[i].end(), Vector3f(0.f, 0.f, 0.f));\n\t\t\t\tif (it + 1 == numIter)//last iteration\n\t\t\t\t\tn = normalizeNormal(n);\n\t\t\t\t_normals[i] = n;\n\t\t\t\tmaxLength = std::max(maxLength, _normals[i].norm());\n\t\t\t}\n\n\t\t\t// To avoid float overflow after multiple iterations, we need to normalize.\n\t\t\t// But we can't just normalize each normal separately because we want to\n\t\t\t// preserve the relative triangle area weighting.\n\t\t\t// So instead we just send everything in [0,1] each time apart from the last iteration.\n\t\t\tif (maxLength > 0.0f && (it + 1 < numIter)) {\n\t\t\t\tfor (int i = 0; i < _normals.size(); ++i)\n\t\t\t\t{\n\t\t\t\t\t_normals[i] /= maxLength;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.dirtyBufferGL = true;\n\t}\n\n\tvoid\tMesh::generateSmoothNormalsDisconnected(int numIter)\n\t{\n\t\tSIBR_LOG << \"Generate vertex normals...\" << std::endl;\n\t\t// will store a list of normals (of all triangles around each vertex)\n\t\tstd::vector<std::vector<Vector3f>>\tvertexNormals(_vertices.size());\n\n\t\tauto normalizeNormal = [](const Vector3f& normal) -> Vector3f {\n\t\t\tfloat len = normal.norm();\n\t\t\tif (len > std::numeric_limits<float>::epsilon())\n\t\t\t\treturn normal / len;\n\t\t\t//else // may happen on tiny sharp edge, in this case points up\n\t\t\treturn Vector3f(0.f, 1.f, 0.f);\n\t\t};\n\n\t\tstd::vector<std::pair<sibr::Vector3f, int>> vertCopy;\n\t\tfor (int i = 0; i < _vertices.size(); ++i)\n\t\t{\n\t\t\tvertCopy.push_back(std::make_pair(_vertices[i], i));\n\t\t}\n\n\t\tstd::sort(vertCopy.begin(), vertCopy.end());\n\n\t\tfor (int i = 0; i < 100; ++i)\n\t\t{\n\t\t\tstd::cout << \"\\t \" << vertCopy[i].first << std::endl;\n\t\t}\n\n\t\tstd::vector<int> v2firstCopy(_vertices.size(), -1);\n\t\tint dupCount = 0;\n\t\tfor (int i = 0; i < _vertices.size(); ++i)\n\t\t{\n\t\t\tif (i % 1000 == 0)\n\t\t\t\tstd::cout << \"\\t \" << i << \" of \" << _vertices.size() << std::endl;\n\n\t\t\tint ii = i - 1;\n\t\t\tif ((vertCopy[ii].first - vertCopy[i].first).norm() > 0.000001f) {\n\n\t\t\t\tv2firstCopy[vertCopy[i].second] = vertCopy[i].second;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdupCount++;\n\t\t\t\tv2firstCopy[vertCopy[i].second] = v2firstCopy[vertCopy[ii].second];\n\t\t\t}\n\n\t\t}\n\n\t\tstd::cout << \"Duplicates found :\" << dupCount << std::endl;\n\n\t\tfor (int i = 0; i < _triangles.size(); i++)\n\t\t{\n\t\t\tconst Vector3u& tri = _triangles[i];\n\t\t\tif (tri[0] > _vertices.size() || tri[1] > _vertices.size() ||\n\t\t\t\ttri[2] > _vertices.size()) {\n\t\t\t\tSIBR_ERR << \"Incorrect indices (\" << i << \") \" << tri[0] << \":\" << tri[1] << \":\" << tri[2] << std::endl;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tVector3f u = _vertices[tri[1]] - _vertices[tri[0]];\n\t\t\t\tVector3f v = _vertices[tri[2]] - _vertices[tri[0]];\n\t\t\t\tVector3f normal = u.cross(v);\n\n\t\t\t\tvertexNormals[tri[0]].push_back(normal);\n\t\t\t\tvertexNormals[tri[1]].push_back(normal);\n\t\t\t\tvertexNormals[tri[2]].push_back(normal);\n\t\t\t}\n\t\t}\n\n\t\tsibr::Mesh::Normals normalsCopy;\n\t\tnormalsCopy.resize(vertexNormals.size());\n\t\t//#pragma omp parallel for\n\t\tfor (int i = 0; i < normalsCopy.size(); ++i)\n\t\t{\n\t\t\tnormalsCopy[i] = sibr::Vector3f(0, 0, 0);\n\t\t}\n\t\tfor (int i = 0; i < normalsCopy.size(); ++i)\n\t\t{\n\t\t\tVector3f n = std::accumulate(vertexNormals[i].begin(), vertexNormals[i].end(), Vector3f(0.f, 0.f, 0.f));\n\t\t\tnormalsCopy[v2firstCopy[i]] += n;\n\t\t}\n\n\t\t//Here we computed normals based on surrounding triangles\n\n\t\tfor (int it = 0; it < numIter; it++) {\n\n\t\t\tstd::vector<std::vector<Vector3f>>\tvertexNormalsIter(_vertices.size());\n\n\t\t\tfor (int i = 0; i < _triangles.size(); i++)\n\t\t\t{\n\t\t\t\tconst Vector3u& tri = _triangles[i];\n\t\t\t\tif (tri[0] > _vertices.size() || tri[1] > _vertices.size() ||\n\t\t\t\t\ttri[2] > _vertices.size()) {\n\t\t\t\t\tSIBR_ERR << \"Incorrect indices (\" << i << \") \" << tri[0] << \":\" << tri[1] << \":\" << tri[2] << std::endl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (int tId = 0; tId < 3; tId++) {\n\t\t\t\t\t\tVector3f normal = normalsCopy[v2firstCopy[tri[tId]]];\n\t\t\t\t\t\tvertexNormalsIter[tri[(tId + 1) % 3]].push_back(normal);\n\t\t\t\t\t\tvertexNormalsIter[tri[(tId + 2) % 3]].push_back(normal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//#pragma omp parallel for\n\t\t\tfor (int i = 0; i < normalsCopy.size(); ++i)\n\t\t\t{\n\t\t\t\tnormalsCopy[i] = sibr::Vector3f(0, 0, 0);\n\t\t\t}\n\t\t\tfor (int i = 0; i < normalsCopy.size(); ++i)\n\t\t\t{\n\t\t\t\tVector3f n = std::accumulate(vertexNormalsIter[i].begin(), vertexNormalsIter[i].end(), Vector3f(0.f, 0.f, 0.f));\n\t\t\t\tnormalsCopy[v2firstCopy[i]] += n;\n\t\t\t}\n\n\t\t}\n\n\t\t_normals.resize(normalsCopy.size());\n\t\tfor (int i = 0; i < _normals.size(); ++i)\n\t\t{\n\t\t\t_normals[i] += normalizeNormal(normalsCopy[v2firstCopy[i]]);\n\t\t}\n\n\t\t_gl.dirtyBufferGL = true;\n\t}\n\n\tvoid Mesh::laplacianSmoothing(int numIter, bool updateNormals) {\n\n\t\tif (numIter < 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t/// Build neighbors information.\n\t\t/// \\todo TODO: we could also detect vertices on the edges of the mesh to preserve their positions.\n\t\tstd::vector<std::set<unsigned>> neighbors(_vertices.size());\n\t\tfor (const sibr::Vector3u& tri : _triangles) {\n\t\t\tneighbors[tri[0]].emplace(tri[1]);\n\t\t\tneighbors[tri[0]].emplace(tri[2]);\n\t\t\tneighbors[tri[1]].emplace(tri[0]);\n\t\t\tneighbors[tri[1]].emplace(tri[2]);\n\t\t\tneighbors[tri[2]].emplace(tri[1]);\n\t\t\tneighbors[tri[2]].emplace(tri[0]);\n\t\t}\n\n\t\t/// Smooth by averaging.\n\t\tconst size_t verticesSize = _vertices.size();\n\n\t\tfor (int it = 0; it < numIter; ++it) {\n\t\t\tstd::vector<sibr::Vector3f> newVertices(verticesSize);\n\n\t\t\tfor (size_t vid = 0; vid < verticesSize; ++vid) {\n\t\t\t\tnewVertices[vid] = sibr::Vector3f(0.0f, 0.0f, 0.f);\n\t\t\t\tfor (const auto& ovid : neighbors[vid]) {\n\t\t\t\t\tnewVertices[vid] += _vertices[ovid];\n\t\t\t\t}\n\t\t\t\tnewVertices[vid] /= float(neighbors[vid].size());\n\t\t\t}\n\n\t\t\tvertices(newVertices);\n\t\t}\n\n\t\tif (updateNormals) {\n\t\t\tgenerateNormals();\n\t\t}\n\t}\n\n\tvoid Mesh::adaptativeTaubinSmoothing(int numIter, bool updateNormals) {\n\n\t\tif (numIter < 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t/// Build neighbors information.\n\t\t/// \\todo TODO: we could also detect vertices on the edges of the mesh to preserve their positions.\n\t\tstd::vector<std::set<unsigned>> neighbors(_vertices.size());\n\t\tstd::map<int, std::map<int, std::set<float>>> cotanW;\n\t\tfor (const sibr::Vector3u& tri : _triangles) {\n\t\t\tneighbors[tri[0]].emplace(tri[1]);\n\t\t\tneighbors[tri[0]].emplace(tri[2]);\n\t\t\tneighbors[tri[1]].emplace(tri[0]);\n\t\t\tneighbors[tri[1]].emplace(tri[2]);\n\t\t\tneighbors[tri[2]].emplace(tri[1]);\n\t\t\tneighbors[tri[2]].emplace(tri[0]);\n\n\t\t\tstd::vector<sibr::Vector3f> vs;\n\t\t\tfor (int i = 0; i < 3; i++)\n\t\t\t\tvs.push_back(_vertices[tri[i]]);\n\n\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\tfloat angle = acos((vs[i] - vs[(i + 2) % 3]).normalized().dot((vs[(i + 1) % 3] - vs[(i + 2) % 3]).normalized()));\n\t\t\t\tcotanW[tri[i]][tri[(i + 1) % 3]].emplace(1.0f / (tan(angle) + 0.00001f));\n\t\t\t\tcotanW[tri[(i + 1) % 3]][tri[i]].emplace(1.0f / (tan(angle) + 0.00001f));\n\t\t\t}\n\n\t\t}\n\n\t\t/// Smooth by averaging.\n\t\tconst size_t verticesSize = _vertices.size();\n\n\t\tstd::vector<sibr::Vector3f> newColors(verticesSize);\n\t\tfor (int it = 0; it < numIter; ++it) {\n\t\t\tstd::vector<sibr::Vector3f> newVertices(verticesSize);\n#pragma omp parallel for\n\t\t\tfor (int vid = 0; vid < verticesSize; ++vid) {\n\t\t\t\tsibr::Vector3f v = _vertices[vid];\n\t\t\t\tsibr::Vector3f dtV = sibr::Vector3f(0.0f, 0.0f, 0.f);\n\t\t\t\tfloat totalW = 0;\n\n\t\t\t\tstd::vector<sibr::Vector3f> colorsLocal;\n\t\t\t\tcolorsLocal.push_back(_colors[vid]);\n\t\t\t\tfor (const auto& ovid : neighbors[vid]) {\n\t\t\t\t\tfloat w = 0;\n\t\t\t\t\tfor (const auto& cot : cotanW[vid][ovid]) {\n\t\t\t\t\t\tw += 0.5 * cot;\n\t\t\t\t\t}\n\t\t\t\t\ttotalW += w;\n\t\t\t\t\tdtV += w * _vertices[ovid];\n\t\t\t\t\tcolorsLocal.push_back(_colors[ovid]);\n\t\t\t\t}\n\n\t\t\t\tsibr::Vector3f meanColor;\n\t\t\t\tfor (const auto& c : colorsLocal) {\n\t\t\t\t\tmeanColor += c;\n\t\t\t\t}\n\t\t\t\tmeanColor /= colorsLocal.size();\n\t\t\t\tsibr::Vector3f varColor;\n\t\t\t\tfor (const auto& c : colorsLocal) {\n\t\t\t\t\tpow(c.x() - meanColor.x(), 2);\n\t\t\t\t\tvarColor += sibr::Vector3f(pow(c.x() - meanColor.x(), 2), pow(c.y() - meanColor.y(), 2), pow(c.z() - meanColor.z(), 2));\n\t\t\t\t}\n\t\t\t\tvarColor /= colorsLocal.size();\n\n\t\t\t\tnewColors[vid] = varColor;\n\n\t\t\t\tif (totalW > 0) {\n\t\t\t\t\tdtV /= totalW;\n\t\t\t\t\tdtV = dtV - v;\n\t\t\t\t\tif (it % 2 == 0) {\n\t\t\t\t\t\tnewVertices[vid] = v + 0.25 * dtV;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewVertices[vid] = v + 0.25 * dtV;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvertices(newVertices);\n\t\t}\n\n\t\tcolors(newColors);\n\t\tif (updateNormals) {\n\t\t\tgenerateNormals();\n\t\t}\n\t}\n\n\n\n\tMesh Mesh::generateSubMesh(std::function<bool(int)> func) const\n\t{\n\n\t\tsibr::Mesh::Vertices newVertices;\n\t\tsibr::Mesh::Triangles newTriangles;\n\n\t\tsibr::Mesh::Colors newColors;\n\t\tsibr::Mesh::Normals newNormals;\n\t\tsibr::Mesh::UVs newUVs;\n\n\t\tstd::map<int, int> mapIdVert;\n\n\t\tint cmptValidVert = 0;\n\t\tint cmptVert = 0;\n\n\t\tsibr::Mesh::Colors oldColors;\n\t\tif (hasColors())\n\t\t\toldColors = colors();\n\n\t\tsibr::Mesh::Normals oldNormals;\n\t\tif (hasNormals())\n\t\t\toldNormals = normals();\n\n\t\tsibr::Mesh::UVs oldUVs;\n\t\tif (hasTexCoords())\n\t\t\toldUVs = texCoords();\n\n\t\tfor (int v = 0; v < vertices().size(); v++) {\n\n\t\t\tif (func(v)) {\n\n\t\t\t\tnewVertices.push_back(vertices()[v]);\n\n\t\t\t\tif (hasColors())\n\t\t\t\t\tnewColors.push_back(oldColors[cmptVert]);\n\t\t\t\tif (hasNormals())\n\t\t\t\t\tnewNormals.push_back(oldNormals[cmptVert]);\n\t\t\t\tif (hasTexCoords())\n\t\t\t\t\tnewUVs.push_back(oldUVs[cmptVert]);\n\n\t\t\t\tmapIdVert[cmptVert] = cmptValidVert;\n\t\t\t\tcmptValidVert++;\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmapIdVert[cmptVert] = -1;\n\t\t\t}\n\n\t\t\tcmptVert++;\n\n\t\t}\n\n\t\tfor (sibr::Vector3u t : triangles()) {\n\n\t\t\tif (mapIdVert[t.x()] != -1 &&\n\t\t\t\tmapIdVert[t.y()] != -1 &&\n\t\t\t\tmapIdVert[t.z()] != -1) {\n\t\t\t\tsibr::Vector3u newt(mapIdVert[t.x()], mapIdVert[t.y()], mapIdVert[t.z()]);\n\t\t\t\tnewTriangles.push_back(newt);\n\t\t\t}\n\t\t}\n\n\t\tMesh newMesh;\n\t\tnewMesh.vertices(newVertices);\n\t\tnewMesh.triangles(newTriangles);\n\t\tif (hasColors())\n\t\t\tnewMesh.colors(newColors);\n\t\tif (hasNormals())\n\t\t\tnewMesh.normals(newNormals);\n\t\tif (hasTexCoords())\n\t\t\tnewMesh.texCoords(newUVs);\n\n\t\treturn newMesh;\n\t}\n\n\tvoid\tMesh::forceBufferGLUpdate(bool adjacency) const\n\t{\n\t\tif (!_gl.bufferGL) { SIBR_ERR << \"Tried to forceBufferGL on a non OpenGL Mesh\" << std::endl; return; }\n\t\t_gl.dirtyBufferGL = false;\n\t\t_gl.bufferGL->build(*this, adjacency);\n\t}\n\n\tvoid\tMesh::freeBufferGLUpdate(void) const\n\t{\n\t\t_gl.dirtyBufferGL = false;\n\t\t_gl.bufferGL->free();\n\t}\n\n\tvoid\tMesh::render(bool depthTest, bool backFaceCulling, RenderMode mode, bool frontFaceCulling, bool invertDepthTest, bool tessellation, bool adjacency) const\n\t{\n\t\tif (!_gl.bufferGL) { SIBR_ERR << \"Tried to render a non OpenGL Mesh\" << std::endl; return; }\n\n\t\tif(adjacency && _renderingOptions.adjacency != adjacency)\n\t\t{\n\t\t\t_renderingOptions.adjacency = adjacency;\n\t\t\t_gl.dirtyBufferGL = true;\n\t\t}\n\t\t\n\t\t_renderingOptions.depthTest = depthTest;\n\t\t_renderingOptions.backFaceCulling = backFaceCulling;\n\t\t_renderingOptions.mode = mode;\n\t\t_renderingOptions.frontFaceCulling = frontFaceCulling;\n\t\t_renderingOptions.invertDepthTest = invertDepthTest;\n\t\t_renderingOptions.tessellation = tessellation;\n\n\t\tif (_gl.dirtyBufferGL)\n\t\t\tforceBufferGLUpdate(adjacency);\n\n\t\tif (depthTest)\n\t\t\tglEnable(GL_DEPTH_TEST);\n\t\telse\n\t\t\tglDisable(GL_DEPTH_TEST);\n\n\t\tif (backFaceCulling)\n\t\t{\n\t\t\tglEnable(GL_CULL_FACE);\n\t\t\tif (!frontFaceCulling)\n\t\t\t\tglCullFace(GL_BACK);\n\t\t\telse\n\t\t\t\tglCullFace(GL_FRONT);\n\t\t}\n\t\telse\n\t\t\tglDisable(GL_CULL_FACE);\n\n\t\tif (invertDepthTest) {\n\t\t\tglDepthFunc(GL_GEQUAL);\n\t\t}\n\n\t\tswitch (mode)\n\t\t{\n\t\tcase sibr::Mesh::FillRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\n\t\t\tbreak;\n\t\tcase sibr::Mesh::PointRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_POINT);\n\t\t\tbreak;\n\t\tcase sibr::Mesh::LineRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_LINE);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\tif (_triangles.size() != 0) {\n\t\t\tif (tessellation) {\n\t\t\t\t_gl.bufferGL->drawTessellated();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_gl.bufferGL->draw(adjacency);\n\t\t\t}\n\t\t}\n\t\telse if (_vertices.size() != 0) {\n\t\t\t_gl.bufferGL->draw_points();\n\t\t}\n\n\t\t// Reset default state (Policy is 'restore default values')\n\t\tglDisable(GL_CULL_FACE);\n\t\tglDisable(GL_DEPTH_TEST);\n\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\n\t\tglDepthFunc(GL_LESS);\n\t}\n\n\tvoid\tMesh::renderSubMesh(unsigned int begin, unsigned int end,\n\t\tbool depthTest,\n\t\tbool backFaceCulling,\n\t\tRenderMode mode,\n\t\tbool frontFaceCulling,\n\t\tbool invertDepthTest\n\t) const {\n\t\tif (!_gl.bufferGL) { SIBR_ERR << \"Tried to render a non OpenGL Mesh\" << std::endl; return; }\n\t\tif (_gl.dirtyBufferGL)\n\t\t\tforceBufferGLUpdate();\n\n\t\tif (depthTest)\n\t\t\tglEnable(GL_DEPTH_TEST);\n\t\telse\n\t\t\tglDisable(GL_DEPTH_TEST);\n\n\t\tif (backFaceCulling)\n\t\t{\n\t\t\tglEnable(GL_CULL_FACE);\n\t\t\tif (!frontFaceCulling)\n\t\t\t\tglCullFace(GL_BACK);\n\t\t\telse\n\t\t\t\tglCullFace(GL_FRONT);\n\t\t}\n\t\telse\n\t\t\tglDisable(GL_CULL_FACE);\n\n\t\tif (invertDepthTest) {\n\t\t\tglDepthFunc(GL_GEQUAL);\n\t\t}\n\n\t\tswitch (mode)\n\t\t{\n\t\tcase sibr::Mesh::FillRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\n\t\t\tbreak;\n\t\tcase sibr::Mesh::PointRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_POINT);\n\t\t\tbreak;\n\t\tcase sibr::Mesh::LineRenderMode:\n\t\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_LINE);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\tif (_triangles.size() != 0) {\n\t\t\t_gl.bufferGL->draw(begin, end);\n\t\t}\n\t\telse if (_vertices.size() != 0) {\n\t\t\t_gl.bufferGL->draw_points(begin, end);\n\t\t}\n\n\t\t// Reset default state (Policy is 'restore default values')\n\t\tglDisable(GL_CULL_FACE);\n\t\tglDisable(GL_DEPTH_TEST);\n\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\n\t\tglDepthFunc(GL_LESS);\n\t}\n\n\n\tvoid\tMesh::render_points(void) const\n\t{\n\t\tforceBufferGLUpdate();\n\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_POINT);\n\t\t_gl.bufferGL->draw_points();\n\t\tglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\n\t}\n\n\tvoid\tMesh::render_points(bool depthTest) const\n\t{\n\t\tif (depthTest) {\n\t\t\tglEnable(GL_DEPTH_TEST);\n\t\t}\n\t\telse {\n\t\t\tglDisable(GL_DEPTH_TEST);\n\t\t}\n\n\t\trender_points();\n\n\t\tglDisable(GL_DEPTH_TEST);\n\t}\n\n\tvoid\tMesh::render_lines(void) const\n\t{\n\t\tif (!_gl.bufferGL) { SIBR_ERR << \"Tried to render a non OpenGL Mesh\" << std::endl; return; }\n\t\tif (_gl.dirtyBufferGL)\n\t\t\tforceBufferGLUpdate();\n\t\t_gl.bufferGL->draw_lines();\n\t}\n\n\tMesh::SubMesh Mesh::extractSubMesh(const std::vector<int>& newVerticesIds, VERTEX_LIST_CHOICE v_choice) const\n\t{\n\n\t\tint numOldVertices = (int)vertices().size();\n\t\tbool keep_from_list = (v_choice == VERTEX_LIST_CHOICE::KEEP);\n\t\tstd::vector<bool> willBeKept(numOldVertices, !keep_from_list);\n\t\tfor (int id : newVerticesIds) {\n\t\t\tif (id >= 0 && id < numOldVertices) {\n\t\t\t\twillBeKept[id] = keep_from_list;\n\t\t\t}\n\t\t}\n\n\t\tint numValidNewVertices = 0;\n\t\tfor (bool b : willBeKept) {\n\t\t\tif (b) {\n\t\t\t\t++numValidNewVertices;\n\t\t\t}\n\t\t}\n\n\t\tstd::vector<int> oldToNewVertexId(numOldVertices, -1);\n\n\t\tsibr::Mesh::Vertices newVertices(numValidNewVertices);\n\t\tsibr::Mesh::Triangles newTriangles;\n\n\t\tsibr::Mesh::Colors newColors;\n\t\tsibr::Mesh::Normals newNormals;\n\t\tsibr::Mesh::UVs newUVs;\n\n\t\tif (hasColors()) {\n\t\t\tnewColors.resize(numValidNewVertices);\n\t\t}\n\t\tif (hasNormals()) {\n\t\t\tnewNormals.resize(numValidNewVertices);\n\t\t}\n\t\tif (hasTexCoords()) {\n\t\t\tnewUVs.resize(numValidNewVertices);\n\t\t}\n\n\t\tint new_vertex_id = 0;\n\t\tfor (int id = 0; id < numOldVertices; ++id) {\n\t\t\tif (willBeKept[id]) {\n\t\t\t\tnewVertices[new_vertex_id] = vertices()[id];\n\t\t\t\toldToNewVertexId[id] = new_vertex_id;\n\n\t\t\t\tif (hasColors()) {\n\t\t\t\t\tnewColors[new_vertex_id] = colors()[id];\n\t\t\t\t}\n\t\t\t\tif (hasNormals()) {\n\t\t\t\t\tnewNormals[new_vertex_id] = normals()[id];\n\t\t\t\t}\n\t\t\t\tif (hasTexCoords()) {\n\t\t\t\t\tnewUVs[new_vertex_id] = texCoords()[id];\n\t\t\t\t}\n\t\t\t\t++new_vertex_id;\n\t\t\t}\n\t\t}\n\n\t\tstd::vector<bool> isInRemovedTriangle(numOldVertices, false);\n\t\tfor (const auto& t : triangles()) {\n\t\t\tsibr::Vector3i newVerticesId = t.cast<int>().unaryExpr([&oldToNewVertexId](int v_id) { return oldToNewVertexId[v_id];  });\n\t\t\tif (newVerticesId.unaryViewExpr([](int v_id) { return v_id >= 0 ? 1 : 0; }).all()) {\n\t\t\t\tnewTriangles.push_back(newVerticesId.cast<unsigned>());\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (int c = 0; c < 3; c++) {\n\t\t\t\t\tisInRemovedTriangle[t[c]] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbool oldMeshHasGraphics = (_gl.bufferGL.get() != nullptr);\n\n\t\tMesh::SubMesh subMesh;\n\t\tsubMesh.meshPtr = std::make_shared<sibr::Mesh>(oldMeshHasGraphics);\n\t\tsibr::Mesh& mesh = *subMesh.meshPtr;\n\t\tmesh.vertices(newVertices);\n\t\tmesh.triangles(newTriangles);\n\t\tif (hasColors()) {\n\t\t\tmesh.colors(newColors);\n\t\t}\n\t\tif (hasNormals()) {\n\t\t\tmesh.normals(newNormals);\n\t\t}\n\t\tif (hasTexCoords()) {\n\t\t\tmesh.texCoords(newUVs);\n\t\t}\n\n\t\tfor (int id = 0; id < numOldVertices; ++id) {\n\t\t\tif (isInRemovedTriangle[id]) {\n\t\t\t\tsubMesh.complementaryVertices.push_back(id);\n\t\t\t}\n\t\t}\n\n\t\treturn subMesh;\n\t}\n\n\tsibr::Mesh Mesh::invertedFacesMesh() const\n\t{\n\t\tsibr::Mesh invertedFacesMesh(_gl.bufferGL != nullptr);\n\t\tinvertedFacesMesh.vertices(vertices());\n\t\tif (hasColors()) {\n\t\t\tinvertedFacesMesh.colors(colors());\n\t\t}\n\t\tif (hasNormals()) {\n\t\t\tinvertedFacesMesh.normals(normals());\n\t\t}\n\t\tif (hasTexCoords()) {\n\t\t\tinvertedFacesMesh.texCoords(texCoords());\n\t\t}\n\n\t\tsibr::Mesh::Triangles invertedTriangles(triangles().size());\n\t\tfor (int t_id = 0; t_id < (int)triangles().size(); ++t_id) {\n\t\t\tinvertedTriangles[t_id] = triangles()[t_id].yxz();\n\t\t}\n\t\tinvertedFacesMesh.triangles(invertedTriangles);\n\n\t\treturn invertedFacesMesh;\n\t}\n\n\tsibr::Mesh::Ptr Mesh::invertedFacesMesh2() const\n\t{\n\t\tauto invertedFacesMesh = std::make_shared<Mesh>(_gl.bufferGL != nullptr);\n\n\t\tint nVertices = (int)vertices().size();\n\t\tint nTriangles = (int)triangles().size();\n\n\t\tMesh::Vertices Nvertices(2 * nVertices);\n\t\tMesh::Triangles Ntriangles(2 * nTriangles);\n\t\tMesh::Colors Ncolors(hasColors() ? 2 * nVertices : 0);\n\t\tMesh::Normals Nnormals(hasNormals() ? 2 * nVertices : 0);\n\t\tMesh::UVs Nuvs(hasTexCoords() ? 2 * nVertices : 0);\n\n\t\tint v_id = 0;\n\t\tfor (const auto& v : vertices()) {\n\t\t\tNvertices[v_id] = v;\n\t\t\tNvertices[v_id + nVertices] = v;\n\n\t\t\tif (hasNormals()) {\n\t\t\t\tNnormals[v_id] = normals()[v_id];\n\t\t\t\tNnormals[v_id + nVertices] = -normals()[v_id];\n\t\t\t}\n\n\t\t\tif (hasColors()) {\n\t\t\t\tNcolors[v_id] = colors()[v_id];\n\t\t\t\tNcolors[v_id + nVertices] = colors()[v_id];\n\t\t\t}\n\n\t\t\tif (hasTexCoords()) {\n\t\t\t\tNuvs[v_id] = texCoords()[v_id];\n\t\t\t\tNuvs[v_id + nVertices] = texCoords()[v_id];\n\t\t\t}\n\n\t\t\t++v_id;\n\t\t}\n\t\tinvertedFacesMesh->vertices(Nvertices);\n\n\t\tif (hasNormals()) {\n\t\t\tinvertedFacesMesh->normals(Nnormals);\n\t\t}\n\t\tif (hasColors()) {\n\t\t\tinvertedFacesMesh->colors(Ncolors);\n\t\t}\n\t\tif (hasTexCoords()) {\n\t\t\tinvertedFacesMesh->texCoords(Nuvs);\n\t\t}\n\n\t\tsibr::Vector3u shift(nVertices, nVertices, nVertices);\n\t\tint t_id = 0;\n\t\tfor (const auto& t : triangles()) {\n\t\t\tNtriangles[t_id] = t;\n\t\t\tNtriangles[t_id + nTriangles] = t.yxz() + shift;\n\t\t\t++t_id;\n\t\t}\n\t\tinvertedFacesMesh->triangles(Ntriangles);\n\n\t\treturn invertedFacesMesh;\n\t}\n\n\tconst std::string Mesh::getMeshFilePath(void) const\n\t{\n\t\treturn _meshPath;\n\t}\n\n\tvoid\t\t\t\t\tMesh::getBoundingSphere(Vector3f& outCenter, float& outRadius, bool referencedOnly, bool usePCcenter) const\n\t{\n\t\t// Get the center of mass\n\n\t\tdouble totalArea = 0, currentArea;\n\t\tdouble xCenter = 0, yCenter = 0, zCenter = 0;\n\n\t\tconst Triangles& tri = _triangles;\n\t\tconst Vertices& vert = _vertices;\n\t\tif (usePCcenter) {\n\t\t\tsibr::Vector3d outCenterDbl;\n\t\t\tfor (const Vector3f& v : vert)\n\t\t\t{\n\t\t\t\toutCenterDbl += v.cast<double>();\n\t\t\t}\n\n\t\t\toutCenter = (outCenterDbl / vert.size()).cast<float>();\n\t\t}\n\t\telse {\n\t\t\tif (tri.size() == 0) {\n\t\t\t\tSIBR_WRG << \"No triangles found for evaluation of sphere center, result will be NaN\";\n\t\t\t}\n\t\t\tfor (const Vector3u& t : tri)\n\t\t\t{\n\t\t\t\tfloat trix1 = vert[t[0]].x();\n\t\t\t\tfloat triy1 = vert[t[0]].y();\n\t\t\t\tfloat triz1 = vert[t[0]].z();\n\n\t\t\t\tfloat trix2 = vert[t[1]].x();\n\t\t\t\tfloat triy2 = vert[t[1]].y();\n\t\t\t\tfloat triz2 = vert[t[1]].z();\n\n\t\t\t\tfloat trix3 = vert[t[2]].x();\n\t\t\t\tfloat triy3 = vert[t[2]].y();\n\t\t\t\tfloat triz3 = vert[t[2]].z();\n\n\t\t\t\tcurrentArea = ((vert[t[1]] - vert[t[0]]).cross(vert[t[2]] - vert[t[0]])).norm() / 2.0;\n\t\t\t\ttotalArea += currentArea;\n\n\t\t\t\txCenter += ((trix1 + trix2 + trix3) / 3) * currentArea;\n\t\t\t\tyCenter += ((triy1 + triy2 + triy3) / 3) * currentArea;\n\t\t\t\tzCenter += ((triz1 + triz2 + triz3) / 3) * currentArea;\n\t\t\t}\n\n\t\t\toutCenter = Vector3f(float(xCenter / totalArea), float(yCenter / totalArea), float(zCenter / totalArea));\n\t\t}\n\n\n\t\toutRadius = 0.f;\n\t\tif (referencedOnly) {\n\t\t\tfor (const Vector3u& t : tri)\n\t\t\t{\n\t\t\t\toutRadius = std::max(outRadius, distance(vert[t[0]], outCenter));\n\t\t\t\toutRadius = std::max(outRadius, distance(vert[t[1]], outCenter));\n\t\t\t\toutRadius = std::max(outRadius, distance(vert[t[2]], outCenter));\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (const Vector3f& v : vert)\n\t\t\t\toutRadius = std::max(outRadius, distance(v, outCenter));\n\t\t}\n\t}\n\n\n\tEigen::AlignedBox<float, 3> Mesh::getBoundingBox(void) const\n\t{\n\t\tEigen::AlignedBox<float, 3> box;\n\t\tfor (const auto& vertex : _vertices) {\n\t\t\tbox.extend(vertex);\n\t\t}\n\t\treturn box;\n\t}\n\n\tsibr::Mesh::Ptr sibr::Mesh::getEnvSphere(sibr::Vector3f center, float radius, sibr::Vector3f zenith, sibr::Vector3f north,\n\t\tPartOfSphere part) {\n\n\t\tsibr::Vector3f east = north.cross(zenith);\n\t\tsibr::Mesh::Ptr envMesh(new sibr::Mesh());\n\t\tsibr::Mesh::Vertices vert;\n\t\tsibr::Mesh::UVs uvs;\n\t\tsibr::Mesh::Triangles tri;\n\n\t\tint highLimit = 0, lowLimit = 0;\n\t\tswitch (part)\n\t\t{\n\t\tcase PartOfSphere::WHOLE:\n\t\t\thighLimit = 90;\n\t\t\tlowLimit = -90;\n\t\t\tbreak;\n\t\tcase PartOfSphere::UP:\n\t\t\thighLimit = 90;\n\t\t\tlowLimit = 0;\n\t\t\tbreak;\n\t\tcase PartOfSphere::BOTTOM:\n\t\t\thighLimit = 0;\n\t\t\tlowLimit = -90;\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (int lat = lowLimit; lat <= highLimit; lat++) {\n\t\t\tfor (int lgt = 0; lgt <= 360; lgt++) {\n\n\t\t\t\tsibr::Vector3f point = cos(0.5 * M_PI * lat / 90.0f) * (cos(2 * M_PI * lgt / 360.0f) * north + sin(2 * M_PI * lgt / 360.0f) * east)\n\t\t\t\t\t+ sin(0.5 * M_PI * lat / 90.0f) * zenith;\n\n\t\t\t\tvert.push_back(10.f * radius * point + center);\n\n\t\t\t\tuvs.push_back(sibr::Vector2f(lgt / 360.0f, 0.5 + lat / 180.0f));\n\n\t\t\t}\n\t\t}\n\n\t\tfor (int lat = lowLimit; lat < highLimit; lat++) {\n\t\t\tfor (int lgt = 0; lgt < 360; lgt++) {\n\n\t\t\t\tint delta = 1;\n\t\t\t\tint lgtShift = lgt + 361 * (lat - lowLimit);\n\t\t\t\ttri.push_back(sibr::Vector3u(lgtShift, lgtShift + delta, lgtShift + 361 + delta));\n\t\t\t\ttri.push_back(sibr::Vector3u(lgtShift, lgtShift + 361 + delta, lgtShift + 361));\n\t\t\t}\n\t\t}\n\t\tenvMesh->vertices(vert);\n\t\tenvMesh->texCoords(uvs);\n\t\tenvMesh->triangles(tri);\n\n\t\treturn envMesh;\n\t}\n\n\tsibr::Vector3f Mesh::centroid() const\n\t{\n\t\tsibr::Vector3d centroid(0, 0, 0);\n\t\tfor (auto& vertex : _vertices) {\n\t\t\tcentroid += vertex.cast<double>();\n\t\t}\n\t\tif (_vertices.size() > 0) {\n\t\t\tcentroid /= static_cast<double>(_vertices.size());\n\t\t}\n\t\treturn centroid.cast<float>();\n\t}\n\n\tstd::stringstream Mesh::getOffStream(bool verbose) const\n\t{\n\t\tif (verbose) {\n\t\t\tstd::cout << \"[sibr::Mesh::getOffStream()] ... \" << std::flush;\n\t\t}\n\n\t\tstd::stringstream s;\n\t\ts << \"OFF \\n \\n\" << vertices().size() << \" \" << triangles().size() << \" 0 \" << std::endl;\n\n\t\tfor (const auto& v : vertices()) {\n\t\t\ts << v.x() << \" \" << v.y() << \" \" << v.z() << std::endl;\n\t\t}\n\n\t\tfor (const auto& t : triangles()) {\n\t\t\ts << \"3 \" << t.x() << \" \" << t.y() << \" \" << t.z() << std::endl;\n\t\t}\n\n\t\tif (verbose) {\n\t\t\tstd::cout << \" done \" << std::endl;\n\t\t}\n\n\t\treturn s;\n\t}\n\n\tvoid Mesh::fromOffStream(std::stringstream& stream, bool computeNormals)\n\t{\n\t\tint n_vert;\n\t\tint n_faces;\n\t\tint n_edges;\n\n\t\tstd::string line;\n\t\tsafeGetline(stream, line);\n\t\tsafeGetline(stream, line);\n\t\tstd::istringstream iss(line);\n\n\t\tiss >> n_vert >> n_faces >> n_edges;\n\n\t\t_vertices.resize(n_vert);\n\t\tfor (int v = 0; v < n_vert; ++v) {\n\t\t\tsafeGetline(stream, line);\n\t\t\tstd::istringstream lineStream(line);\n\n\t\t\tlineStream >> _vertices[v][0] >> _vertices[v][1] >> _vertices[v][2];\n\n\t\t}\n\n\t\t_triangles.resize(0);\n\t\t_triangles.reserve(3 * n_faces);\n\t\tint face_size;\n\t\tfor (int t = 0; t < n_faces; ++t) {\n\t\t\tsafeGetline(stream, line);\n\t\t\tstd::istringstream lineStream(line);\n\n\t\t\tlineStream >> face_size;\n\n\t\t\tif (face_size == 3) {\n\t\t\t\tsibr::Vector3u t;\n\t\t\t\tlineStream >> t[0] >> t[1] >> t[2];\n\t\t\t\t_triangles.push_back(t);\n\n\t\t\t}\n\t\t\telse if (face_size == 4) {\n\t\t\t\tsibr::Vector3u t1, t2;\n\t\t\t\tlineStream >> t1[0] >> t1[1] >> t1[2] >> t2[2];\n\t\t\t\tt2[0] = t1[0];\n\t\t\t\tt2[1] = t1[2];\n\t\t\t\t_triangles.push_back(t1);\n\t\t\t\t_triangles.push_back(t2);\n\t\t\t}\n\t\t}\n\n\t\tif (computeNormals) {\n\t\t\tgenerateNormals();\n\t\t}\n\n\t\tif (_gl.bufferGL.get()) {\n\t\t\t_gl.dirtyBufferGL = true;\n\t\t}\n\t}\n\n\tsibr::Mesh::Ptr Mesh::getTestCube(bool withGraphics)\n\t{\n\t\tstd::vector<sibr::Vector3f> vertices = {\n\t\t\t{ +1, +1, +1 }, { -1, +1, +1 }, { -1, -1, +1 },\n\t\t\t{ +1, -1, +1 }, { +1, +1, -1 }, { -1, +1, -1 },\n\t\t\t{ -1, -1, -1 }, { +1, -1, -1 }\n\t\t};\n\n\t\tstd::vector<sibr::Vector3u> indices = {\n\t\t\t{ 0, 1, 2 }, { 0, 2, 3 }, { 7, 4, 0 }, { 7, 0, 3 }, { 4, 5, 1 },\n\t\t\t{ 4, 1, 0 }, { 5, 6, 2 }, { 5, 2, 1 }, { 3, 2, 6 }, { 3, 6, 7 },\n\t\t\t{ 6, 5, 4 }, { 6, 4, 7 }\n\t\t};\n\n\t\tsibr::Mesh::Ptr mesh(new sibr::Mesh(withGraphics));\n\t\tmesh->vertices(vertices);\n\t\tmesh->triangles(indices);\n\t\tmesh->generateNormals();\n\n\t\treturn mesh;\n\t}\n\n\tMesh::Ptr Mesh::getSphereMesh(const Vector3f& center, float radius, bool withGraphics, int precision) {\n\t\tconst int nTheta = precision;\n\t\tconst int nPhi = precision;\n\t\tconst int nPoints = nTheta * nPhi;\n\t\tstd::vector<Vector3f> vertices(nPoints), normals(nPoints);\n\n\t\tfor (int t = 0; t < nTheta; ++t) {\n\t\t\tdouble theta = (t / (double)(nTheta - 1)) * M_PI;\n\t\t\tdouble cosT = std::cos(theta);\n\t\t\tdouble sinT = std::sin(theta);\n\t\t\tfor (int p = 0; p < nPhi; ++p) {\n\t\t\t\tdouble phi = 2.0 * (p / (double)(nPhi - 1) - 0.5) * M_PI;\n\t\t\t\tdouble cosP = std::cos(phi), sinP = std::sin(phi);\n\t\t\t\tnormals[p + nPhi * t] = Vector3d(sinT * cosP, sinT * sinP, cosT).cast<float>();\n\t\t\t\tvertices[p + nPhi * t] = center + radius * normals[p + nPhi * t];\n\t\t\t}\n\t\t}\n\n\t\tstd::vector<uint> indices(6 * (nTheta - 1) * nPhi);\n\t\tint triangle_id = 0;\n\t\tfor (int t = 0; t < nTheta - 1; ++t) {\n\t\t\tfor (int p = 0; p < nPhi; ++p) {\n\t\t\t\tint current_id = p + nPhi * t;\n\t\t\t\tint offset_row = 1 - (p == nPhi - 1 ? nPhi : 0);\n\t\t\t\tint next_in_row = current_id + offset_row;\n\t\t\t\tint next_in_col = current_id + nPhi;\n\t\t\t\tint next_next = next_in_col + offset_row;\n\t\t\t\tindices[3 * triangle_id + 0] = current_id;\n\t\t\t\tindices[3 * triangle_id + 1] = next_in_col;\n\t\t\t\tindices[3 * triangle_id + 2] = next_in_row;\n\t\t\t\tindices[3 * triangle_id + 3] = next_in_row;\n\t\t\t\tindices[3 * triangle_id + 4] = next_in_col;\n\t\t\t\tindices[3 * triangle_id + 5] = next_next;\n\t\t\t\ttriangle_id += 2;\n\t\t\t}\n\t\t}\n\n\t\tMesh::Ptr sphereMesh = Mesh::Ptr(new Mesh(withGraphics));\n\t\tsphereMesh->vertices(vertices);\n\t\tsphereMesh->normals(normals);\n\t\tsphereMesh->triangles(indices);\n\n\t\treturn sphereMesh;\n\t}\n\n\tsibr::Mesh::Ptr Mesh::subDivide(float limitSize, size_t maxRecursion) const\n\t{\n\t\tstruct Less {\n\t\t\tbool operator()(const sibr::Vector3f& a, const sibr::Vector3f& b) const {\n\t\t\t\treturn a < b;\n\t\t\t}\n\t\t};\n\n\t\tstruct Edge {\n\t\t\tsibr::Vector3f midPoint;\n\t\t\tsibr::Vector3f midNormal;\n\t\t\tstd::vector<int> triangles_ids;\n\t\t\tfloat length;\n\t\t\tint v_ids[2];\n\t\t};\n\n\t\tstruct Triangle {\n\t\t\tTriangle() : edges_ids(std::vector<int>(3, -1)), edges_flipped(std::vector<bool>(3, false)) {}\n\t\t\tstd::vector<int> edges_ids;\n\t\t\tstd::vector<bool> edges_flipped;\n\t\t};\n\n\t\tauto subMeshPtr = std::make_shared<sibr::Mesh>();\n\n\t\tstd::map<sibr::Vector3f, int, Less> mapEdges;\n\t\tstd::vector<Edge> edges;\n\t\tstd::vector<Triangle> tris(triangles().size());\n\n\t\tint t_id = 0;\n\t\tint e_id = 0;\n\t\tfor (const auto& t : triangles()) {\n\t\t\tbool degenerate = false;\n\t\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\t\tint v0 = t[k];\n\t\t\t\tint v1 = t[(k + 1) % 3];\n\t\t\t\t// Skip degenerate faces.\n\t\t\t\tif (v0 == v1) {\n\t\t\t\t\tdegenerate = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst sibr::Vector3f midPoint = 0.5f * (vertices()[v0] + vertices()[v1]);\n\t\t\t\tsibr::Vector3f midNormal(0.0f, 0.0f, 0.0f);\n\t\t\t\tif (hasNormals()) {\n\t\t\t\t\tmidNormal = (0.5f * (normals()[v0] + normals()[v1])).normalized();\n\t\t\t\t}\n\n\t\t\t\tconst float length = (vertices()[v0] - vertices()[v1]).norm();\n\t\t\t\tif (mapEdges.count(midPoint) == 0) {\n\t\t\t\t\tmapEdges[midPoint] = e_id;\n\t\t\t\t\tconst Edge edge = { midPoint, midNormal, {t_id}, length, {v0,v1} };\n\t\t\t\t\ttris[t_id].edges_ids[k] = e_id;\n\t\t\t\t\tedges.push_back(edge);\n\t\t\t\t\t++e_id;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst int edge_id = mapEdges[midPoint];\n\t\t\t\t\tedges[edge_id].triangles_ids.push_back(t_id);\n\t\t\t\t\ttris[t_id].edges_ids[k] = edge_id;\n\t\t\t\t\tif (v0 != edges[edge_id].v_ids[0]) {\n\t\t\t\t\t\ttris[t_id].edges_flipped[k] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (degenerate) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t++t_id;\n\t\t}\n\n\t\tconst int nOldVertices = (int)vertices().size();\n\t\tsibr::Mesh::Vertices newVertices = vertices();\n\t\tsibr::Mesh::Normals newNormals = normals();\n\n\t\tstd::vector<int> edge_to_divided_edges(edges.size(), -1);\n\n\t\tsibr::Mesh::Triangles newTriangles;\n\n\t\tbool dbg = false;\n\t\tint num_divided_edges = 0;\n\t\tfor (const Triangle& t : tris) {\n\t\t\t// Ignore undef triangles.\n\t\t\tif (t.edges_ids[0] == -1 && t.edges_ids[1] == -1 && t.edges_ids[2] == -1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstd::vector<int> ks(3, -1);\n\t\t\tstd::vector<int> non_ks(3, -1);\n\t\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\t\tconst int e_id = t.edges_ids[k];\n\t\t\t\tif (edges[e_id].length > limitSize) {\n\t\t\t\t\tif (ks[0] < 0) {\n\t\t\t\t\t\tks[0] = k;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ks[1] < 0) {\n\t\t\t\t\t\tks[1] = k;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tks[2] = k;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (edge_to_divided_edges[e_id] < 0) {\n\t\t\t\t\t\tedge_to_divided_edges[e_id] = num_divided_edges;\n\t\t\t\t\t\tnewVertices.push_back(edges[e_id].midPoint);\n\t\t\t\t\t\tnewNormals.push_back(edges[e_id].midNormal);\n\t\t\t\t\t\t++num_divided_edges;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (non_ks[0] < 0) {\n\t\t\t\t\t\tnon_ks[0] = k;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst sibr::Vector3i corners_ids = sibr::Vector3i(0, 1, 2).unaryViewExpr([&](int i) {\n\t\t\t\treturn edges[t.edges_ids[i]].v_ids[t.edges_flipped[i] ? 1 : 0];\n\t\t\t\t});\n\t\t\tconst sibr::Vector3i midpoints_ids = sibr::Vector3i(0, 1, 2).unaryViewExpr([&](int i) {\n\t\t\t\treturn  edge_to_divided_edges[t.edges_ids[i]] >= 0 ? nOldVertices + edge_to_divided_edges[t.edges_ids[i]] : -1;\n\t\t\t\t});\n\n\t\t\tif (ks[2] >= 0) {\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(corners_ids[0], midpoints_ids[0], midpoints_ids[2]));\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(corners_ids[1], midpoints_ids[1], midpoints_ids[0]));\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(corners_ids[2], midpoints_ids[2], midpoints_ids[1]));\n\t\t\t\tnewTriangles.push_back(midpoints_ids.cast<unsigned>());\n\t\t\t}\n\t\t\telse if (ks[1] >= 0) {\n\t\t\t\tconst int candidate_edge_1_v_id_1 = corners_ids[non_ks[0]];\n\t\t\t\tconst int candidate_edge_1_v_id_2 = midpoints_ids[(non_ks[0] + 1) % 3];\n\t\t\t\tconst int candidate_edge_2_v_id_1 = corners_ids[(non_ks[0] + 1) % 3];\n\t\t\t\tconst int candidate_edge_2_v_id_2 = midpoints_ids[(non_ks[0] + 2) % 3];\n\t\t\t\tconst float candidate_edge_1_norm = (newVertices[candidate_edge_1_v_id_1] - newVertices[candidate_edge_1_v_id_2]).norm();\n\t\t\t\tconst float candidate_edge_2_norm = (newVertices[candidate_edge_2_v_id_1] - newVertices[candidate_edge_2_v_id_2]).norm();\n\t\t\t\tif (candidate_edge_1_norm < candidate_edge_2_norm) {\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(candidate_edge_1_v_id_1, corners_ids[(non_ks[0] + 1) % 3], candidate_edge_1_v_id_2));\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(candidate_edge_1_v_id_2, midpoints_ids[(non_ks[0] + 2) % 3], candidate_edge_1_v_id_1));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(candidate_edge_2_v_id_1, candidate_edge_2_v_id_2, corners_ids[non_ks[0]]));\n\t\t\t\t\tnewTriangles.push_back(sibr::Vector3u(candidate_edge_2_v_id_1, midpoints_ids[(non_ks[0] + 1) % 3], candidate_edge_2_v_id_2));\n\t\t\t\t}\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(midpoints_ids[(non_ks[0] + 1) % 3], corners_ids[(non_ks[0] + 2) % 3], midpoints_ids[(non_ks[0] + 2) % 3]));\n\t\t\t}\n\t\t\telse if (ks[0] >= 0) {\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(midpoints_ids[ks[0]], corners_ids[(ks[0] + 1) % 3], corners_ids[(ks[0] + 2) % 3]));\n\t\t\t\tnewTriangles.push_back(sibr::Vector3u(midpoints_ids[ks[0]], corners_ids[(ks[0] + 2) % 3], corners_ids[ks[0]]));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnewTriangles.push_back(corners_ids.cast<unsigned>());\n\t\t\t}\n\t\t}\n\t\tstd::cout << \".\" << std::flush;\n\n\t\tsubMeshPtr->vertices(newVertices);\n\t\tif (hasNormals()) {\n\t\t\tsubMeshPtr->normals(newNormals);\n\t\t}\n\t\tsubMeshPtr->triangles(newTriangles);\n\t\tif (num_divided_edges > 0 && maxRecursion > 0) {\n\t\t\treturn subMeshPtr->subDivide(limitSize, maxRecursion - 1);\n\t\t}\n\n\t\treturn subMeshPtr;\n\t}\n\n\tfloat Mesh::meanEdgeSize() const\n\t{\n\t\tdouble sumSizes = 0;\n\t\tfor (const auto& t : triangles()) {\n\t\t\tconst auto& v1 = vertices()[t[0]];\n\t\t\tconst auto& v2 = vertices()[t[1]];\n\t\t\tconst auto& v3 = vertices()[t[2]];\n\t\t\tsumSizes += (double)((v1 - v2).norm() + (v2 - v3).norm() + (v3 - v1).norm());\n\t\t}\n\n\t\treturn (float)(sumSizes / (3 * triangles().size()));\n\t}\n\n\tMesh::Ptr Mesh::clone() const\n\t{\n\t\tauto outMesh = std::make_shared<sibr::Mesh>(_gl.bufferGL != nullptr);\n\t\toutMesh->vertices(vertices());\n\t\toutMesh->triangles(triangles());\n\n\t\tif (hasNormals()) {\n\t\t\toutMesh->normals(normals());\n\t\t}\n\n\t\tif (hasColors()) {\n\t\t\toutMesh->colors(colors());\n\t\t}\n\n\t\tif (hasTexCoords()) {\n\t\t\toutMesh->texCoords(texCoords());\n\t\t}\n\n\t\treturn outMesh;\n\t}\n\n\tvoid\t\tMesh::merge(const Mesh& other)\n\t{\n\t\tbool withGraphics = (_gl.bufferGL != nullptr);\n\n\t\tif (_vertices.empty())\n\t\t{\n\t\t\tthis->operator = (other);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tVertices\tvertices;\n\t\t\tNormals\t\tnormals;\n\t\t\tColors\t\tcolors;\n\t\t\tUVs\t\t\ttexcoords;\n\n\t\t\tconst uint offset = static_cast<uint>(_vertices.size());\n\t\t\tVector3u\ttriOffset(offset, offset, offset);\n\t\t\tTriangles\ttriangles = other.triangles();\n\n\t\t\tfor (Vector3u& t : triangles)\n\t\t\t\tt += triOffset;\n\n\n\t\t\tif (hasNormals())\n\t\t\t\t_normals.insert(_normals.end(), other.normals().begin(), other.normals().end());\n\n\t\t\tif (hasColors())\n\t\t\t\t_colors.insert(_colors.end(), other.colors().begin(), other.colors().end());\n\n\t\t\tif (hasTexCoords())\n\t\t\t\t_texcoords.insert(_texcoords.end(), other.texCoords().begin(), other.texCoords().end());\n\n\n\t\t\t_vertices.insert(_vertices.end(), other.vertices().begin(), other.vertices().end());\n\t\t\t_triangles.insert(_triangles.end(), triangles.begin(), triangles.end());\n\n\t\t}\n\n\t\tif (withGraphics)\n\t\t\t_gl.bufferGL.reset(new MeshBufferGL);\n\t}\n\n\tvoid sibr::Mesh::makeWhole(void)\n\t{\n\t\tif (!hasNormals())\n\t\t\t_normals = Normals(vertices().size());\n\n\t\tif (!hasColors())\n\t\t\t_colors = Colors(vertices().size());\n\n\t\tif (!hasTexCoords())\n\t\t\t_texcoords = UVs(vertices().size());\n\n\t}\n\n\tvoid\t\tMesh::eraseTriangles(const std::vector<uint>& faceIDList)\n\t{\n\t\tuint indexMax = 0;\n\t\tfor (uint i = 0; i < triangles().size(); ++i)\n\t\t\tindexMax = std::max(indexMax, triangles()[i].maxCoeff());\n\n\t\tstd::vector<bool>\tfaceToErase(triangles().size(), false);\n\t\tfor (uint faceID : faceIDList)\n\t\t\tfaceToErase[faceID] = true;\n\n\n\t\tMesh::Triangles\t\tnewTris;\n\t\tMesh::Vertices\t\tnewVerts;\n\t\tstd::vector<int>\tindexRemap(indexMax + 1, -1);\n\n\t\tnewTris.reserve(triangles().size());\n\t\tnewVerts.reserve(vertices().size());\n\n\t\tfor (uint i = 0; i < triangles().size(); ++i)\n\t\t{\n\t\t\tif (faceToErase[i])\n\t\t\t\tcontinue;\n\n\t\t\tVector3u t = triangles()[i];\n\t\t\tVector3u newT;\n\t\t\tfor (uint j = 0; j < 3; ++j)\n\t\t\t{\n\t\t\t\tif (indexRemap[t[j]] == -1)\n\t\t\t\t{\n\t\t\t\t\tindexRemap[t[j]] = (int)newVerts.size();\n\t\t\t\t\tnewVerts.push_back(vertices().at(t[j]));\n\t\t\t\t}\n\t\t\t\tnewT[j] = (uint)indexRemap[t[j]];\n\n\t\t\t}\n\n\t\t\tnewTris.push_back(newT);\n\t\t}\n\n\t\tif (hasColors())\n\t\t{\n\t\t\tMesh::Colors\tnewColors(newVerts.size());\n\t\t\tfor (uint i = 0; i < indexRemap.size(); ++i)\n\t\t\t\tif (indexRemap[i] != -1)\n\t\t\t\t\tnewColors[indexRemap[i]] = colors().at(i);\n\t\t\tcolors(newColors);\n\t\t}\n\n\t\tif (hasNormals())\n\t\t{\n\t\t\tMesh::Normals\tnewNormals(newVerts.size());\n\t\t\tfor (uint i = 0; i < indexRemap.size(); ++i)\n\t\t\t\tif (indexRemap[i] != -1)\n\t\t\t\t\tnewNormals[indexRemap[i]] = normals().at(i);\n\t\t\tnormals(newNormals);\n\t\t}\n\n\n\t\tif (hasTexCoords())\n\t\t{\n\t\t\tMesh::UVs\tnewUVs(newVerts.size());\n\t\t\tfor (uint i = 0; i < indexRemap.size(); ++i)\n\t\t\t\tif (indexRemap[i] != -1)\n\t\t\t\t\tnewUVs[indexRemap[i]] = texCoords().at(i);\n\t\t\ttexCoords(newUVs);\n\t\t}\n\n\t\ttriangles(newTris);\n\t\tvertices(newVerts);\n\t}\n\n\tstd::vector<std::vector<int> > Mesh::removeDisconnectedComponents()\n\t{\n\t\tstd::vector<std::vector<int> > allComponents;\n\n\t\tstd::vector<std::vector<int>> v_triangles(vertices().size());\n\t\tint t_id = 0;\n\t\tfor (const auto& t : triangles()) {\n\t\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\t\tv_triangles[t[k]].push_back(t_id);\n\t\t\t}\n\t\t\t++t_id;\n\t\t}\n\n\n\t\tstd::vector<bool> wasVisited(vertices().size(), false);\n\t\tint v_id = 0;\n\t\tfor (const auto& v : vertices()) {\n\n\t\t\tif (!wasVisited[v_id]) {\n\t\t\t\tstd::priority_queue<int> next_ids;\n\t\t\t\tnext_ids.push(v_id);\n\t\t\t\twasVisited[v_id] = true;\n\n\t\t\t\tstd::vector<int> component;\n\n\t\t\t\twhile (next_ids.size() > 0) {\n\t\t\t\t\tint next_id = next_ids.top();\n\t\t\t\t\tnext_ids.pop();\n\t\t\t\t\tcomponent.push_back(next_id);\n\n\t\t\t\t\tfor (int t : v_triangles[next_id]) {\n\t\t\t\t\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\t\t\t\t\tint other_v_id = triangles()[t][k];\n\t\t\t\t\t\t\tif (!wasVisited[other_v_id]) {\n\t\t\t\t\t\t\t\tnext_ids.push(other_v_id);\n\t\t\t\t\t\t\t\twasVisited[other_v_id] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tallComponents.emplace_back(component);\n\t\t\t}\n\t\t\t++v_id;\n\t\t}\n\n\t\treturn allComponents;\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Mesh.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n# include <map>\n# include <sstream>\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/graphics/MeshBufferGL.hpp\"\n# include \"core/graphics/Image.hpp\"\n\n// Be sure to use STL objects from client's dll version by exporting this declaration (see warning C4251)\n//template class SIBR_GRAPHICS_EXPORT std::vector<Vector3f>;\n//template class SIBR_GRAPHICS_EXPORT std::vector<Vector3u>;\n\nnamespace sibr\n{\n\t/** Store both CPU and GPU data for a geometric mesh.\n\t\tProvide many processing and display methods.\n\t\\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT Mesh\n\t{\n\t\tSIBR_CLASS_PTR(Mesh);\n\n\tpublic:\n\n\t\ttypedef\tstd::vector<Vector3f>\tVertices;\n\t\ttypedef\tstd::vector<Vector3f>\tNormals;\n\t\ttypedef std::vector<Vector3u>\tTriangles;\n\t\ttypedef\tstd::vector<Vector3f>\tColors;\n\t\ttypedef\tstd::vector<Vector2f>\tUVs;\n\n\t\t/** Mesh rendering mode. */\n\t\tenum RenderMode\n\t\t{\n\t\t\tPointRenderMode,\n\t\t\tLineRenderMode,\n\t\t\tFillRenderMode\n\t\t};\n\n\t\t/** Mesh rendering options. */\n\t\tstruct RenderingOptions {\n\t\t\tbool depthTest = true; ///< Should depth test be performed.\n\t\t\tbool backFaceCulling = true; ///< Should back faces be culled.\n\t\t\tRenderMode mode = FillRenderMode; ///< Rendering mode: points, lines, filled.\n\t\t\tbool frontFaceCulling = false; ///< Cull fornt faces.\n\t\t\tbool invertDepthTest = false; ///< Invert the depth test.\n\t\t\tbool tessellation = false; ///< Is there a tessellation shader\n\t\t\tbool adjacency = false;\n\t\t};\n\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t\\param withGraphics init associated OpenGL buffers object (requires an openGL context)\n\t\t*/\n\t\tMesh( bool withGraphics = true );\n\n\t\t/** Set vertices.\n\t\t\\param vertices the new vertices\n\t\t*/\n\t\tinline void\tvertices(const Vertices& vertices);\n\n\t\t/** Set vertices from a vector of floats (linear).\n\t\t\\param vertices the new vertices\n\t\t*/\n\t\tvoid vertices( const std::vector<float>& vertices );\n\t\t\n\t\t/** \\return a reference to the vertices. */\n\t\tinline const Vertices& vertices( void ) const;\n\n\t\t/** Update a specific vertex position\n\t\t\\param vertex_id the vertex location in the list\n\t\t\\param v the new value\n\t\t\\note If the mesh is used by the GPU, data will be udpated.\n\t\t*/\n\t\tinline void replaceVertice(int vertex_id, const sibr::Vector3f & v) ;\n\n\t\t/** \\return a deep copy of the mesh. */\n\t\tMesh::Ptr clone() const;\n\n\t\t/** \\return vertices in an array using the following format:\n\t\t {0x, 0y, 0z, 1x, 1y, 1z, 2x, 2y, 2z, ...}.\n\t\t Useful for rendering and converting to another mesh\n\t\t struct.\n\t\t */\n\t\tinline const float* vertexArray( void ) const;\n\n\t\t/** Set triangles. Each triangle contains 3 indices and\n\t\t each indice correspond to a vertex in the vertices list.\n\t\t \\param triangles the list of indices to use\n\t\t */\n\t\tinline void\ttriangles(const Triangles& triangles);\n\t\t\n\t\t/** Set triangles. Using a flat vector of uints.\n\t\t\\param triangles the new indices\n\t\t*/\n\t\tvoid\ttriangles(const std::vector<uint>& triangles);\n\t\t\n\t\t/** \\return a reference to the triangles list. */\n\t\tinline const Triangles& triangles( void ) const;\n\t\t\n\t\t/** \\return triangles in an array using the following format:\n\t\t {0a, 0b, 0c, 1a, 1b, 1c, 2a, 2b, 2c, ...}.\n\t\t Useful for rendering and converting to another mesh\n\t\t struct.\n\t\t */\n\t\tinline const uint* triangleArray( void ) const;\n\n\t\t/** Set vertex colors.\n\t\t\\param colors the new vertex colors\n\t\t*/\n\t\tinline void\tcolors( const Colors& colors );\n\n\t\t/** \\return a reference to the vertex color list. */\n\t\tinline const Colors& colors( void ) const;\n\n\t\t/** \\return true if each vertex has a color assigned. */\n\t\tinline bool\thasColors( void ) const;\n\n\t\t/** \\return colors in an array using the following format:\n\t\t {0r, 0g, 0b, 1r, 1g, 1b, 2r, 2g, 2b, ...}.\n\t\t Useful for rendering and converting to another mesh\n\t\t struct.*/\n\t\tinline const float* colorArray( void ) const;\n\n\t\t/** Set vertex texture coordinates.\n\t\t\\param texcoords the new vertex texture coordinates\n\t\t*/\n\t\tinline void\ttexCoords( const UVs& texcoords );\n\n\t\t/** Set texture coordinates using a flat vector of floats.\n\t\t\\param texcoords the new vertex texture coordinates\n\t\t*/\n\t\tvoid\t\ttexCoords( const std::vector<float>& texcoords );\n\n\t\t/** \\return a reference to the vertex texture coordinates list. */\n\t\tinline const UVs& texCoords( void ) const;\n\n\t\t/** \\return true if each vertex has texture coordinates assigned. */\n\t\tinline bool\thasTexCoords( void ) const;\n\n\t\t/** \\return texture coordinate in an array using the following format:\n\t\t {0u, 0v, 1u, 1v, 2u, 2v, ...}\n\t\t Useful for rendering and converting to another mesh\n\t\t struct.*/\n\t\tinline const float* texCoordArray( void ) const;\n\n\t\t/** \\return texture image file name */\n\t\tstd::string getTextureImageFileName()\tconst { return _textureImageFileName; }\n\n\t\t/** Set vertex normals.\n\t\t\\param normals the new vertex normals\n\t\t*/\n\t\tinline void\tnormals(const Normals& normals);\n\n\t\t/** Set normals using a flat vector of floats.\n\t\t\\param normals the new vertex normals\n\t\t*/\n\t\tvoid\tnormals(const std::vector<float>& normals);\n\t\t\n\t\t/** \\return a reference to the vertex normals list. */\n\t\tinline const Normals& normals( void ) const;\n\n\t\t/** \\return true if each vertex has a normal assigned. */\n\t\tinline bool\thasNormals( void ) const;\n\t\t\n\t\t/** \\return normals in an array using the following format:\n\t\t {0x, 0y, 0z, 1x, 1y, 1z, 2x, 2y, 2z, ...}.\n\t\t Useful for rendering and converting to another mesh\n\t\t struct.*/\n\t\tinline const float* normalArray( void ) const;\n\n\t\t/** Make the mesh whole, ie it will have default values for all components (texture, materials, colors, etc)\n\t\t  It is useful when merging two meshes. If the second one is missing some attributes, the merging will break the mesh state if it isn't made whole.\n\t\t  */\n\t\tvoid\tmakeWhole(void);\n\n\t\t/** Generate vertex normals by using the average of\n\t\t all triangle normals around a each vertex.\n\t\t */\n\t\tvoid\tgenerateNormals( void );\n\n\t\t/** Generate smooth vertex normals by using the average of\n\t\t all triangle normals around a each vertex and iterating this process.\n\t\t Takes also the area of triangles as a weight.\n\t\t \\param numIter iteration count\n\t\t */\n\t\tvoid\tgenerateSmoothNormals(int numIter);\n\n\t\t/** Generate smooth vertex normals by using the average of\n\t\t all triangle normals around a each vertex and iterating this process.\n\t\t Takes also the area of triangles as a weight.\n\t\t This methods also consider the fact that because of texture coordinates we may have duplicates vertices\n\t\t \\param numIter iteration count\n\t\t */\n\t\tvoid\tgenerateSmoothNormalsDisconnected(int numIter);\n\n\t\t/** Perform laplacian smoothing on the mesh vertices.\n\t\t\\param numIter smoothing iteration count\n\t\t\\param updateNormals should the normals be recomputed after smoothing\n\t\t*/\n\t\tvoid laplacianSmoothing(int numIter, bool updateNormals);\n\n\t\t/** Perform adaptive Taubin smoothing on the mesh vertices.\n\t\t\\param numIter smoothing iteration count\n\t\t\\param updateNormals should the normals be recomputed after smoothing\n\t\t*/\n\t\tvoid adaptativeTaubinSmoothing(int numIter, bool updateNormals);\n\n\t\t/** Generate a new mesh given a boolean function that\n\t\t  state if each vertex should be kept or not.\n\t\t  \\param func the function that, based on a vertex ID, tells if it should be kept or not\n\t\t  \\return the submesh\n\t\t  */\n\t\tMesh generateSubMesh(std::function<bool(int)> func) const;\n\n\t\t/** Load a mesh from the disk.\n\t\t\\param filename the file path\n\t\t\\return a success flag\n\t\t\\note Supports OBJ and PLY for now.\n\t\t*/\n\t\tbool\tload( const std::string& filename, const std::string& dataset_path = \"\" );\n\t\t/* test for SfM */\n\t\tbool\tloadSfM( const std::string& filename, const std::string& dataset_path = \"\" );\n\t\t\n\t\t/** Load a scene from a set of mitsuba XML scene files (referencing multiple OBJs/PLYs). \n\t\tIt handles instances (duplicating the geoemtry and applying the per-instance transformation).\n\t\t\\param filename the file path\n\t\t\\return a success flag\n\t\t*/\n\t\tbool\tloadMtsXML(const std::string& filename);\n\n\t\t/** Save the mesh to the disk. When saving as a PLY, use the universal flag to indicate if you want this mesh to be readable\n\t\t by most 3d applications (e.g. MeshLab). In this other case, the mesh will be saved with higher-precision custom PLY attributes.\n\t\t\\param filename the file path\n\t\t\\param universal if true, the mesh will be compatible with external 3D viewers\n\t\t\\param textureName name of a texture to reference in the file (Meshlab compatible)\n\t\t\\note Supports OBJ (ignoring the universal flag) and PLY for now.\n\t\t */\n\t\tvoid\tsave( const std::string& filename, bool universal=false, const std::string& textureName=\"TEXTURE_NAME_TO_PUT_IN_THE_FILE\" ) const;\n\n\t\t/** Save the mesh to .ply file (using the binary version).\n\t\t \\param filename the file path\n\t\t \\param universal indicates if you want this mesh to be readable by most 3d viewer application (e.g. MeshLab). In this other case, the mesh will be saved with higher-precision custom PLY attributes.\n\t\t \\param textureName name of a texture to reference in the file (Meshlab compatible) \n\t\t*/\n\t\tbool\t\tsaveToBinaryPLY( const std::string& filename, bool universal=false, const std::string& textureName = \"TEXTURE_NAME_TO_PUT_IN_THE_FILE\") const;\n\t\t\n\t\t/** Save the mesh to .ply file (using the ASCII version).\n\t\t \\param filename the file path\n\t\t \\param universal indicates if you want this mesh to be readable by most 3d viewer application (e.g. MeshLab).\n\t\t \\param textureName name of a texture to reference in the file (Meshlab compatible)\n\t\t In this other case, the mesh will be saved with higher-precision custom PLY attributes.\n\t\t*/\n\t\tbool\t\tsaveToASCIIPLY( const std::string& filename, bool universal=false, const std::string& textureName=\"TEXTURE_NAME_TO_PUT_IN_THE_FILE\" ) const;\n\n\t\t/** Save the mesh to .obj file.\n\t\t \\param filename the file path\n\t\t \\warning the vertex colros won't be saved\n\t\t*/\n\t\tbool\t\tsaveToObj( const std::string& filename) const;\n\n\t\t/* Export to OFF file format stream, can be used to convert to CGAL mesh data structures.\n\t\t\\param verbose display additional info\n\t\t\\return a stream containing the content of the mesh in the OFF format\n\t\t*/\n\t\tstd::stringstream getOffStream(bool verbose = false) const;\n\n\t\t/* Load from OFF file format stream, can be used to convert from CGAL mesh data structures.\n\t\t\\param stream a stream containing the content of the mesh in the OFF format\n\t\t\\param generateNormals should the normals be generated\n\t\t*/\n\t\tvoid fromOffStream(std::stringstream& stream, bool generateNormals = true);\n\n\t\t/** Render the geometry using OpenGL.\n\t\t\\param depthTest should depth testing be performed\n\t\t\\param backFaceCulling should culling be performed\n\t\t\\param mode the primitives rendering mode\n\t\t\\param frontFaceCulling should the culling test be flipped\n\t\t\\param invertDepthTest should the depth test be flipped (GL_GREATER_THAN)\n\t\t\\param tessellation should the rendering call tesselation shaders\n\t\t\\param adjacency should we get adjacent triangles info in geometry shader\n\t\t*/\n\t\tvoid\trender(\n\t\t\tbool depthTest = true,\n\t\t\tbool backFaceCulling = true,\n\t\t\tRenderMode mode = FillRenderMode,\n\t\t\tbool frontFaceCulling = false,\n\t\t\tbool invertDepthTest = false,\n\t\t\tbool tessellation = false,\n\t\t\tbool adjacency = false\n\t\t) const;\n\n\t\t/** Render a part of the geometry (taken either from the index buffer or directly in the vertex buffer) using OpenGL.\n\t\t\\param begin first item to render index\n\t\t\\param end last item to render index\n\t\t\\param depthTest should depth testing be performed\n\t\t\\param backFaceCulling should culling be performed\n\t\t\\param mode the primitives rendering mode\n\t\t\\param frontFaceCulling should the culling test be flipped\n\t\t\\param invertDepthTest should the depth test be flipped (GL_GREATER_THAN)\n\t\t*/\n\t\tvoid\trenderSubMesh(unsigned int begin, unsigned int end,\n\t\t\tbool depthTest = true,\n\t\t\tbool backFaceCulling = true,\n\t\t\tRenderMode mode = FillRenderMode,\n\t\t\tbool frontFaceCulling = false,\n\t\t\tbool invertDepthTest = false\n\t\t) const;\n\n\t\t/** Force upload of data to the GPU.\n\t\t\\param adjacency should we give adjacent triangles info in buffer\n\t\t*/\n\t\tvoid\tforceBufferGLUpdate( bool adjacency = false ) const;\n\n\t\t/** Delete GPU mesh data. */\n\t\tvoid\tfreeBufferGLUpdate(void) const;\n\n\t\t/** Render the mesh vertices as points.\n\t\t\\param depthTest should depth testing be performed\n\t\t*/\n\t\tvoid\trender_points(bool depthTest) const;\n\n\t\t/** Render the mesh vertices as points.\n\t\t\\note The depth test state will be whatever it is currently set to.\n\t\t*/\n\t\tvoid\trender_points(void) const;\n\n\t\t/** Render the mesh vertices as successive lines.\n\t\t\\note The depth test state will be whatever it is currently set to.\n\t\t*/\n\t\tvoid\trender_lines(void) const;\n\n\t\t/** Merge another mesh into this one.\n\t\t\\param other the mesh to merge\n\t\t\\sa makeWhole\n\t\t*/\n\t\tvoid\t\tmerge( const Mesh& other );\n\n\t\t/** Erase some of the triangles.\n\t\t\\param faceIDList a list of triangle IDs to erase\n\t\t*/\n\t\tvoid\t\teraseTriangles(const std::vector<uint>& faceIDList);\n\n\t\t/** Submesh extraction options. */\n\t\tenum class VERTEX_LIST_CHOICE { KEEP, REMOVE };\n\t\t\n\t\t/** Submesh structure. */\n\t\tstruct SubMesh {\n\t\t\tstd::shared_ptr<sibr::Mesh> meshPtr; ///< Mesh composed of the extracted vertices.\n\t\t\tstd::vector<int> complementaryVertices; /// < Vertices present in at least one removed triangle, can be used as an arg to extractSubMesh() to get the complementary mesh.\n\t\t};\n\n\t\t/** Extract a submesh based on a list of vertices to keep/remove.\n\t\t\\param vertices a list of vertex indices\n\t\t\\param v_choice should the listed vertices be removed or kept\n\t\t\\return the extracted submesh with additional information\n\t\t*/\n\t\tSubMesh extractSubMesh(const std::vector<int> & vertices, VERTEX_LIST_CHOICE v_choice) const;\n\n\t\t/** \\return a copy of the mesh with inverted faces (flipping IDs). */\n\t\tsibr::Mesh invertedFacesMesh() const;\n\n\t\t/** \\return a copy of the mesh with \"doubled\" faces (obtained by merging the current mesh with a copy with inverted faces. */\n\t\tsibr::Mesh::Ptr invertedFacesMesh2() const;\n\n\t\t/** \\return the path the mesh was loaded from. */\n\t\tinline const std::string getMeshFilePath( void ) const;\n\n\t\t/** \\return the mesh bouding box. */\n\t\tEigen::AlignedBox<float,3>\tgetBoundingBox( void ) const;\n\n\t\t/** \\return the mesh centroid. */\n\t\tsibr::Vector3f centroid() const;\n\n\t\t/** Estimated the mesh bounding sphere.\n\t\t\\param outCenter will contain the sphere center\n\t\t\\param outRadius will contain the sphere radius\n\t\t\\param referencedOnly if true, only consider vertices that are part of at least one face\n\t\t\\param usePCcenter if true, only consider vertices for center computation. Intended to be true when using the function on point clouds.\n\t\t*/\n\t\tvoid getBoundingSphere(Vector3f& outCenter, float& outRadius, bool referencedOnly=false, bool usePCcenter=false) const;\n\n\t\t/** Subdivide a mesh triangles until an edge size threshold is reached.\n\t\t\\param limitSize the maximum edge length allowed\n\t\t\\param maxRecursion maximum subdivision iteration count\n\t\t\\return the subdivided mesh\n\t\t\\bug SR: Can be stuck in a loop in some cases.\n\t\t*/\n\t\tsibr::Mesh::Ptr subDivide(float limitSize, size_t maxRecursion = std::numeric_limits<size_t>::max()) const;\n\n\t\t/** \\return the mean edge size computed over all triangles. */\n\t\tfloat meanEdgeSize() const;\n\n\t\t/** Split a mesh in its connected components. \n\t\t\\return a list of list of vertex indices, each list defining a component\n\t\t*/\n\t\tstd::vector<std::vector<int> > removeDisconnectedComponents();\n\n\t\t/** Generate a simple cube with normals.\n\t\t\\param withGraphics should the mesh be on the GPU\n\t\t\\return a cube mesh\n\t\t*/\n\t\tstatic sibr::Mesh::Ptr getTestCube(bool withGraphics = true);\n\n\t\t/** Generate a sphere mesh.\n\t\t\\param center the sphere center\n\t\t\\param radius the sphere radius\n\t\t\\param withGraphics should the mesh be on the GPU\n\t\t\\param precision number of subdivisions on each dimension\n\t\t\\return the sphere mesh\n\t\t*/\n\t\tstatic Mesh::Ptr getSphereMesh(const Vector3f& center, float radius, bool withGraphics = true, int precision = 50);\n\n\t\t/** Environment sphere generation options: top/bottom parts or both. */\n\t\tenum class PartOfSphere {WHOLE, UP, BOTTOM};\n\n\t\t/* Generate a simple environment sphere with UVs coordinates to use with lat-long environment maps.\n\t\t\\param center the sphere center\n\t\t\\param radius the sphere radius\n\t\t\\param zenith the up axis to orient the sphere around\n\t\t\\param north the horizontal north axis\n\t\t\\param part which aprt of the sphere should be generated\n\t\t\\return the sphere mesh\n\t\t*/\n\t\tstatic sibr::Mesh::Ptr getEnvSphere(sibr::Vector3f center, float radius, sibr::Vector3f zenith, sibr::Vector3f north,\n\t\t\t\t\t\t\t\t\t\t\tPartOfSphere part = PartOfSphere::WHOLE);\n\n\tprotected:\n\n\t\t/** Wrapper around a MeshBuffer, used to prevent copying OpenGL object IDs. */\n\t\tstruct BufferGL\n\t\t{\n\t\t\t/** Default constructor. */\n\t\t\tBufferGL(void) : dirtyBufferGL(true), bufferGL(nullptr) { }\n\n\t\t\t/** Copy constructor.  Copy the GPU buffers wrapper if it exists.\n\t\t\t\\param other object to copy.\n\t\t\t*/\n\t\t\tBufferGL(const BufferGL& other) { operator =(other); }\n\n\t\t\t/** Copy operator.  Copy the GPU buffers wrapper if it exists.\n\t\t\t\\param other object to copy.\n\t\t\t\\return itself\n\t\t\t*/\n\t\t\tBufferGL& operator =(const BufferGL& other) {\n\t\t\t\tbufferGL.reset(other.bufferGL? new MeshBufferGL() : nullptr);\n\t\t\t\tdirtyBufferGL = (other.bufferGL!=nullptr);\n\t\t\t\treturn *this;\n\t\t\t}\n\n\t\t\tbool\t\t\tdirtyBufferGL; ///< Should GL data be updated.\n\t\t\tstd::unique_ptr<MeshBufferGL>\tbufferGL; ///< Internal OpenGL data.\n\t\t};\n\t\tpublic: mutable BufferGL\t_gl; ///< Internal OpenGL data.\n\n\t\t// Seb: It would be better if MeshBufferGL (and GL stuffs) were outside this class.\n\t\t// It should work exactly like Image (CPU, here it's Mesh) and Texture(GPU version\n\t\t// of Image, here it's MeshBufferGL)\n\n\t\tVertices\t_vertices; ///< Vertex positions.\n\t\tTriangles\t_triangles; ///< Triangle indices.\n\t\tNormals\t\t_normals; ///< Vertex normals.\n\t\tColors\t\t_colors; ///< Vertex colors.\n\t\tUVs\t\t\t_texcoords; ///< Vertex UVs.\n\n\tprivate:\n\t\tstd::string _meshPath; ///< Source path, can be used to reload the mesh with/without graphics option in constructor\n\t\tstd::string _textureImageFileName; // filename of texture image\n\t\tmutable RenderingOptions _renderingOptions; // Keeps last rendering options\n\t};\n\n\t///// DEFINITION /////\n\n\tvoid\tMesh::vertices( const Vertices& vertices ) {\n\t\t_vertices = vertices; _gl.dirtyBufferGL = true;\n\t}\n\n\tconst Mesh::Vertices& Mesh::vertices( void ) const {\n\t\treturn _vertices;\n\t}\n\n\tinline void Mesh::replaceVertice(int vertex_id, const sibr::Vector3f & v)\n\t{\n\t\tif (vertex_id >= 0 && vertex_id < (int)(vertices().size())) {\n\t\t\t_vertices[vertex_id] = v;\n\t\t\t_gl.dirtyBufferGL = true;\n\t\t}\n\t}\n\n\tvoid\tMesh::triangles( const Triangles& triangles ) {\n\t\t_triangles = triangles; _gl.dirtyBufferGL = true;\n\t}\n\n\tconst Mesh::Triangles& Mesh::triangles( void ) const {\n\t\treturn _triangles;\n\t}\n\n\tvoid\tMesh::colors( const Colors& colors ) {\n\t\t_colors = colors; _gl.dirtyBufferGL = true;\n\t}\n\tconst Mesh::Colors& Mesh::colors( void ) const {\n\t\treturn _colors;\n\t}\n\tbool\tMesh::hasColors( void ) const {\n\t\treturn (_vertices.size() > 0 && _vertices.size() == _colors.size());\n\t}\n\n\tvoid\tMesh::normals( const Normals& normals ) {\n\t\t_normals = normals; _gl.dirtyBufferGL = true;\n\t}\n\tconst Mesh::Normals& Mesh::normals( void ) const {\n\t\treturn _normals;\n\t}\n\tbool\tMesh::hasNormals( void ) const {\n\t\treturn (_vertices.size() > 0 && _vertices.size() == _normals.size());\n\t}\n\n\tconst float* Mesh::vertexArray( void ) const {\n\t\treturn _vertices.empty()? nullptr : &(_vertices[0][0]);\n\t}\n\tconst uint* Mesh::triangleArray( void ) const {\n\t\treturn _triangles.empty() ? nullptr : &(_triangles[0][0]);\n\t}\n\tconst float* Mesh::colorArray( void ) const {\n\t\treturn _colors.empty() ? nullptr : &(_colors[0][0]);\n\t}\n\tconst float* Mesh::normalArray( void ) const {\n\t\treturn _normals.empty() ? nullptr : &(_normals[0][0]);\n\t}\n\n\tvoid\tMesh::texCoords( const UVs& texcoords ) {\n\t\t_texcoords = texcoords; _gl.dirtyBufferGL = true;\n\t}\n\n\tconst Mesh::UVs& Mesh::texCoords( void ) const {\n\t\treturn _texcoords;\n\t}\n\n\tbool\tMesh::hasTexCoords( void ) const {\n\t\treturn (_vertices.size() > 0 && _vertices.size() == _texcoords.size());\n\t\t//return !_texcoords.empty();\n\t}\n\n\tconst float* Mesh::texCoordArray( void ) const {\n\t\treturn _texcoords.empty() ? nullptr : &(_texcoords[0][0]);\n\t}\n\n\t//*/\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/MeshBufferGL.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/Mesh.hpp\"\n#include \"core/graphics/MeshBufferGL.hpp\"\n\n#include <unordered_map>\n\nnamespace sibr\n{\n\ttemplate <typename TTo, typename TFrom>\n\tstatic std::vector<TTo> \tprepareVertexData( \n\t\tconst std::vector<TFrom>& fromData, uint numVertices )\n\t{\n\t\tstatic_assert(sizeof(TFrom) >= sizeof(TTo),\n\t\t\t\"Conversion not automatically managed with these two types\");\n\t\t/*constexpr*/ const uint typeSize = sizeof(TFrom)/sizeof(TTo);\n\t\tstatic_assert((typeSize*sizeof(TTo)) == sizeof(TFrom),\n\t\t\t\"Provided types have not a correct size\");\t\n\n\t\tif (fromData.empty())\n\t\t\treturn std::vector<TTo>(); // empty\n\t\t//// If no data available, generate null ones\n\t\t//if (fromData.empty())\n\t\t//\treturn std::vector<TTo>(numIndices*typeSize, 0);\n\n\t\t// We are supposed to have ONE data element per Vertex\n\t\tSIBR_ASSERT(fromData.size() == numVertices);\n\t\t\n\t\tconst TTo*\tbeginptr = reinterpret_cast<const TTo*>(fromData.data());\n\t\tconst TTo*\tendptr = beginptr + (fromData.size()*typeSize);\n\t\treturn std::vector<TTo>(beginptr, endptr);\n\t}\n\n\ttemplate <typename TTo, typename TFrom>\n\tstatic void \tappendVertexData( \n\t\tstd::vector<TTo>& toData,\n\t\tconst std::vector<TFrom>& fromData)\n\t{\n\t\tif (fromData.empty())\n\t\t\treturn;\n\n\t\t/*constexpr*/ const uint typeSize = sizeof(TFrom)/sizeof(TTo);\n\t\tstatic_assert((typeSize*sizeof(TTo)) == sizeof(TFrom),\n\t\t\t\"Provided types have not a correct size\");\t\n\n\t\tconst TTo* beginptr = reinterpret_cast<const TTo*>(fromData.data());\n\t\tconst TTo* endptr = beginptr + (fromData.size()*typeSize);\n\t\ttoData.insert(toData.end(), beginptr, endptr);\n\t}\n\n\ttemplate <typename T>\n\tstatic inline uint \tgetVectorDataSize( const std::vector<T>& v )\n\t{\n\t\treturn (uint)(sizeof(T)*v.size());\n\t}\n\t//===========================================================================\n\n\tMeshBufferGL::MeshBufferGL( void )\n\t\t: _vaoId(0), _indexCount(0), _adjacentIndexCount(0), _vertexCount(0)\n\t{\n\t\t_bufferIds.fill(0);\n\t}\n\n\tMeshBufferGL::~MeshBufferGL( void )\n\t{\n\t\tfree();\n\t}\n\n\tMeshBufferGL::MeshBufferGL( MeshBufferGL&& other ) :\n\t\t_vaoId\t\t\t\t(std::move(other._vaoId)),\n\t\t_bufferIds\t\t\t(std::move(other._bufferIds)),\n\t\t_indexCount\t\t\t(std::move(other._indexCount)),\n\t\t_adjacentIndexCount\t(std::move(other._adjacentIndexCount)),\n\t\t_vertexCount\t\t(std::move(other._vertexCount))\n\t{\n\t}\n\n\tMeshBufferGL& MeshBufferGL::operator =( MeshBufferGL&& other )\n\t{\n\t\t_vaoId\t\t\t\t= std::move(other._vaoId);\n\t\t_bufferIds\t\t\t= std::move(other._bufferIds);\n\t\t_indexCount\t\t\t= std::move(other._indexCount);\n\t\t_adjacentIndexCount\t= std::move(other._adjacentIndexCount);\n\t\t_vertexCount\t\t= std::move(other._vertexCount);\n\n\t\treturn *this;\n\t}\n\n\tvoid MeshBufferGL::fetchIndices( const Mesh& mesh, bool adjacency )\n\t{\n\t\t// Create buffer for indices (called elements in opengl)\n\t\tstd::vector<GLuint> indices;\n\n\t\tif(adjacency) {\n\n\t\t\tstd::unordered_map<std::pair<GLuint, GLuint>, GLuint, hash_pair> trianglesByEdges(mesh.triangles().size() * 3);\n\t\t\tindices.reserve(mesh.triangles().size() * 6);\n\n\t\t\tfor(int i = 0; i < mesh.triangles().size(); i++)\n\t\t\t{\n\t\t\t\t// store triangles vertices by edges\n\n\t\t\t\ttrianglesByEdges.insert({ { mesh.triangles()[i][0], mesh.triangles()[i][1] }, mesh.triangles()[i][2] });\n\t\t\t\ttrianglesByEdges.insert({ { mesh.triangles()[i][1], mesh.triangles()[i][2] }, mesh.triangles()[i][0] });\n\t\t\t\ttrianglesByEdges.insert({ { mesh.triangles()[i][2], mesh.triangles()[i][0] }, mesh.triangles()[i][1] });\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < mesh.triangles().size(); i++)\n\t\t\t{\n\t\t\t\t// input triangle\n\t\t\t\t//   1 - 2\n\t\t\t\t//    \\ /\n\t\t\t\t//     0\n\n\t\t\t\t// adjacency list\n\t\t\t\t//     3\n\t\t\t\t//    / \\\n\t\t\t\t//   2 - 4\n\t\t\t\t//  / \\ / \\\n\t\t\t\t// 1 - 0 - 5\n\n\t\t\t\t// use reverse edges to find adjacent triangles\n\t\t\t\t\n\t\t\t\t// 0\n\t\t\t\tindices.push_back(mesh.triangles()[i][0]);\n\t\t\t\t// 1\n\t\t\t\tindices.push_back(trianglesByEdges[{ mesh.triangles()[i][1], mesh.triangles()[i][0] }]);\n\t\t\t\t// 2\n\t\t\t\tindices.push_back(mesh.triangles()[i][1]);\n\t\t\t\t// 3\n\t\t\t\tindices.push_back(trianglesByEdges[{ mesh.triangles()[i][2], mesh.triangles()[i][1] }]);\n\t\t\t\t// 4\n\t\t\t\tindices.push_back(mesh.triangles()[i][2]);\n\t\t\t\t// 5\n\t\t\t\tindices.push_back(trianglesByEdges[{ mesh.triangles()[i][0], mesh.triangles()[i][2] }]);\n\t\t\t}\n\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFADJINDEX]);\n\t\t\tglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*indices.size(), indices.data(), GL_STATIC_DRAW);\n\t\t\t_adjacentIndexCount = (uint)indices.size();\n\n\t\t\tCHECK_GL_ERROR;\n\t\t}\n\t\telse {\n\n\t\t\tindices.insert(indices.begin(), mesh.triangleArray(), mesh.triangleArray() + mesh.triangles().size()*3);\n\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFINDEX]);\n\t\t\tglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*indices.size(), indices.data(), GL_STATIC_DRAW);\n\t\t\t_indexCount = (uint)indices.size();\n\n\t\t\tCHECK_GL_ERROR;\n\t\t}\n\t}\n\n\tvoid \tMeshBufferGL::build( const Mesh& mesh, bool adjacency )\n\t{\n\t\tif (!_vaoId)\n\t\t{\n\t\t\tglGenVertexArrays(1, &_vaoId);\n\t\t\tglGenBuffers(BUFCOUNT, &_bufferIds[0]);\n\t\t}\n\n\t\tglBindVertexArray(_vaoId);\n\n\t\tCHECK_GL_ERROR;\n\n\t\tfetchIndices(mesh, false);\n\t\t\n\t\tif(adjacency)\n\t\t\tfetchIndices(mesh, true);\n\n\t\tuint numVertices = (uint)mesh.vertices().size();\n\t\t_vertexCount = numVertices;\n\t\t//SIBR_DEBUG(mesh.triangles().size());\n\t\tstd::vector<GLfloat> vertices = prepareVertexData<GLfloat>(\n\t\t\tmesh.vertices(), numVertices);\n\t\tstd::vector<GLfloat> colors = prepareVertexData<GLfloat>(\n\t\t\tmesh.colors(), numVertices);\n\t\tstd::vector<GLfloat> texcoords = prepareVertexData<GLfloat>(\n\t\t\tmesh.texCoords(), numVertices);\n\t\tstd::vector<GLfloat> normals = prepareVertexData<GLfloat>(\n\t\t\tmesh.normals(), numVertices);\n\n\t\t// Following this order:\n\t\t//VertexAttribLocation\t\t= 0,\n\t\t//ColorAttribLocation\t\t= 1,\n\t\t//TexCoordAttribLocation\t= 2,\n\t\t//NormalAttribLocation\t\t= 3,\n\n\t\t// Every data (from different types) are all put together into vertexData\n\t\tstd::vector<uint8> \tvertexData;\n\t\tvertexData.reserve(\n\t\t\tgetVectorDataSize(vertices)\t+\n\t\t\tgetVectorDataSize(colors)\t+\n\t\t\tgetVectorDataSize(texcoords)+\n\t\t\tgetVectorDataSize(normals));\n\n\t\tappendVertexData(vertexData, vertices);\n\t\tappendVertexData(vertexData, colors);\n\t\tappendVertexData(vertexData, texcoords);\n\t\tappendVertexData(vertexData, normals);\n\n\t\tglBindBuffer(GL_ARRAY_BUFFER, _bufferIds[BUFVERTEX]);\n\t\tglBufferData(GL_ARRAY_BUFFER, sizeof(uint8)*vertexData.size(), vertexData.data(), GL_STATIC_DRAW);\n\t\tCHECK_GL_ERROR;\n\n\t\tglVertexAttribPointer(VertexAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, (uint8_t*)(0));\n\t\tglEnableVertexAttribArray(VertexAttribLocation);\n\t\tglVertexAttribPointer(ColorAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, (uint8_t*)(0) + getVectorDataSize(vertices));\n\t\tglEnableVertexAttribArray(ColorAttribLocation);\n\t\tglVertexAttribPointer(TexCoordAttribLocation, 2, GL_FLOAT, GL_FALSE, 0, (uint8_t*)(0) + getVectorDataSize(vertices) + getVectorDataSize(colors));\n\t\tglEnableVertexAttribArray(TexCoordAttribLocation);\n\t\tglVertexAttribPointer(NormalAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, (uint8_t*)(0) + getVectorDataSize(vertices) + getVectorDataSize(colors) + getVectorDataSize(texcoords));\n\t\tglEnableVertexAttribArray(NormalAttribLocation);\n\n\t\t/// \\todo TODO:\n\t\t/// We could ignore attrib that are empty (where mesh.colors().empty() == true, don't do anything with this).\n\t\t/// This could improve a bit performances.\n\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid\tMeshBufferGL::free(void)\n\t{\n\t\tif (_bufferIds[0] && _bufferIds[1] && _bufferIds[2])\n\t\t{\n\t\t\tglDeleteBuffers(3, _bufferIds.data());\n\t\t\t_bufferIds.fill(0);\n\t\t}\n\n\t\tif (_vaoId)\n\t\t{\n\t\t\tglDeleteVertexArrays(1, &_vaoId);\n\t\t\t_vaoId = 0;\n\t\t}\n\t}\n\n\tvoid  MeshBufferGL::draw(bool adjacency) const\n\t{\n\t\tglBindVertexArray(_vaoId);\n\n\t\tif(adjacency)\n\t\t{\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFADJINDEX]);\n\t\t\tglDrawElements(GL_TRIANGLES_ADJACENCY, _adjacentIndexCount, GL_UNSIGNED_INT, (void*)0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFINDEX]);\n\t\t\tglDrawElements(GL_TRIANGLES, _indexCount, GL_UNSIGNED_INT, (void*)0); \n\t\t}\n\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid MeshBufferGL::draw(unsigned int begin, unsigned int end, bool adjacency) const\n\t{\n\t\tconst unsigned int count = end-begin;\n\t\tglBindVertexArray(_vaoId);\n\t\t\n\t\tif(adjacency)\n\t\t{\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFADJINDEX]);\n\t\t\tglDrawElements(GL_TRIANGLES_ADJACENCY, count, GL_UNSIGNED_INT, (void*)(sizeof(GLuint) * begin));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFINDEX]);\n\t\t\tglDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, (void*)(sizeof(GLuint) * begin)); \n\t\t}\n\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid  MeshBufferGL::drawTessellated(void) const\n\t{\n\t\tglBindVertexArray(_vaoId);\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFINDEX]);\n\t\tglDrawElements(GL_PATCHES, _indexCount, GL_UNSIGNED_INT, (void*)0);\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid  MeshBufferGL::draw_lines(void) const\n\t{\n\t\tglBindVertexArray(_vaoId);\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _bufferIds[BUFINDEX]);\n\t\tglDrawElements(GL_LINES, _indexCount, GL_UNSIGNED_INT, (void*)0);\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid  MeshBufferGL::draw_points() const\n\t{\n\t\tglBindVertexArray(_vaoId);\n\t\tglDrawArrays(GL_POINTS, 0, _vertexCount);\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid  MeshBufferGL::draw_points(unsigned int begin, unsigned int end) const\n\t{\n\t\tconst unsigned int count = end - begin + 1;\n\t\tglBindVertexArray(_vaoId);\n\t\tglDrawArrays(GL_POINTS, begin, count);\n\t\tglBindVertexArray(0);\n\t}\n\n\tvoid MeshBufferGL::bind(void) const\n\t{\n\t\tglBindVertexArray(_vaoId);\n\t}\n\n\tvoid MeshBufferGL::unbind(void) const\n\t{\n\t\tglBindVertexArray(0);\n\n\t}\n\n\t\n\n} // namespace sibr \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/MeshBufferGL.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <array>\n# include <vector>\n# include \"core/graphics/Config.hpp\"\n\n\nnamespace sibr\n{\n\ttemplate <typename TTo, typename TFrom>\n\tstatic std::vector<TTo> prepareVertexData(const std::vector<TFrom>& fromData, uint numVertices);\n\n\ttemplate <typename TTo, typename TFrom>\n\tstatic void appendVertexData(std::vector<TTo>& toData, const std::vector<TFrom>& fromData);\n\n\ttemplate <typename T>\n\tstatic uint getVectorDataSize(const std::vector<T>& v);\n\n\n\tclass Mesh;\n\n\t/**\n\t* This class is used to render mesh. It act like a vertex buffer object\n\t* (in reality there also a vertex array object and maybe other data).\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT MeshBufferGL\n\t{\n\tpublic:\n\n\t\t/** Predefined shader attribute location. */\n\t\tenum AttribLocation\n\t\t{\n\t\t\tVertexAttribLocation\t= 0,\n\t\t\tColorAttribLocation\t\t= 1,\n\t\t\tTexCoordAttribLocation\t= 2,\n\t\t\tNormalAttribLocation\t= 3,\n\n\t\t\tAttribLocationCount\n\t\t};\n\t\t\n\t\t/** Predefined buffer location. */\n\t\tenum\n\t\t{\n\t\t\tBUFINDEX\t= 0,\n\t\t\tBUFVERTEX\t= 1,\n\t\t\tBUFADJINDEX\t= 2,\n\n\t\t\tBUFCOUNT\n\t\t};\n\n\t\t// A hash function used to hash a pair of any kind \n\t\tstruct hash_pair { \n\t\t\ttemplate <class T1, class T2> \n\t\t\tsize_t operator()(const std::pair<T1, T2>& p) const\n\t\t\t{ \n\t\t\t\tauto hash1 = std::hash<T1>{}(p.first); \n\t\t\t\tauto hash2 = std::hash<T2>{}(p.second); \n\t\t\t\treturn hash1 ^ hash2; \n\t\t\t} \n\t\t}; \n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tMeshBufferGL( void );\n\n\t\t/// Destructor.\n\t\t~MeshBufferGL( void );\n\n\t\t/// Move constructor.\n\t\tMeshBufferGL( MeshBufferGL&& other );\n\n\t\t/// Move operator.\n\t\tMeshBufferGL& operator =( MeshBufferGL&& other );\n\n\t\t/** Fetch indices from a mesh to insert them in the element buffer\n\t\t* \\param mesh the mesh to upload\n\t\t* \\param adjacency tells whether the indices should contain adjacents vertices\n\t\t* \\note This function can't fail (errors stop the program with a message).\n\t\t*/\n\t\tvoid\tfetchIndices( const Mesh& mesh, bool adjacency = false );\n\t\t\n\t\t/** Build from a mesh so you can then draw() it to render it.\n\t\t* \\param mesh the mesh to upload\n\t\t* \\param adjacency tells whether the indices should contain adjacents vertices\n\t\t* \\note This function can't fail (errors stop the program with a message).\n\t\t*/\n\t\tvoid\tbuild( const Mesh& mesh, bool adjacency = false );\n\n\t\t/** Delete the GPU buffer, freeing memory. */\n\t\tvoid\tfree(void);\n\n\t\t/** This bind and draw elements stored in the buffer.\n\t\t\t\\param adjacency adds adjacent triangles info to geometry shader\n\t\t*/\n\t\tvoid\tdraw(bool adjacency = false) const;\n\n\t\t/** This bind and draw elements in [begin, end[ stored in the buffer.\n\t\t\t\\param begin ID of the first primitive to render\n\t\t\t\\param end ID after the last primitive to render\n\t\t\t\\param adjacency adds adjacent triangles info to geometry shader\n\t\t*/\n\t\tvoid\tdraw(unsigned int begin, unsigned int end, bool adjacency = false) const;\n\n\t\t/** This bind and draw elements stored in the buffer with tessellation shader enabled. */\n\t\tvoid  drawTessellated(void) const;\n\t\t\n\t\t/** This bind and draw elements stored in the buffer, using pairs of indices to draw lines. */\n\t\tvoid draw_lines(void) const;\n\n\t\t/** This bind and draw vertex points stored in the buffer. */\n\t\tvoid\tdraw_points( void ) const;\n\n\t\t/** This bind and draw vertex points in [begin, end[ stored in the buffer.\n\t\t\t\\param begin ID of the first primitive to render\n\t\t\t\\param end ID after the last primitive to render\n\t\t*/\n\t\tvoid\tdraw_points( unsigned int begin, unsigned int end ) const;\n\n\t\t/** Bind the vertex and index buffers. */\n\t\tvoid\tbind(void) const;\n\n\t\t/** Bind only indexes (useful for combining with other form of mesh. e.g. SlicedMesh) */\n\t\tvoid\tbindIndices(void) const;\n\n\t\t/** Unbind arrays and buffers. */\n\t\tvoid\tunbind(void) const;\n\n\t\t/** Copy constructor (disabled). */\n\t\tMeshBufferGL(const MeshBufferGL&) = delete;\n\n\t\t/** Copy operator (disabled). */\n\t\tMeshBufferGL& operator =(const MeshBufferGL&) = delete;\n\n\tprivate:\n\t\t\n\t\tGLuint \t\t\t\t\t\t\t_vaoId; ///< Vertex array object ID.\n\t\tstd::array<GLuint, BUFCOUNT>\t_bufferIds; ///< Buffers IDs.\n\t\tuint \t\t\t\t\t\t\t_indexCount; ///< Number of elements in the index buffer.\n\t\tuint\t\t\t\t\t\t\t_adjacentIndexCount; ///< Number of elements in the triangles_adjacency index buffer.\n\t\tuint\t\t\t\t\t\t\t_vertexCount; ///< Number of elements in the vertex buffer.\n\n\t\tbool initVertexBuffer = false,\n\t\t\t initIndexBuffer = false,\n\t\t\t initAdjacentIndexBuffer = false;\n\t};\n\n\t///// DEFINITION /////\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/RenderTarget.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/RenderTarget.hpp\"\n//#define HEADLESS\n\nnamespace sibr\n{\n\tvoid\t\t\tblit(const IRenderTarget& src, const IRenderTarget& dst, GLbitfield mask, GLenum filter)\n\t{\n#ifdef HEADLESS\n\t\tSIBR_ERR << \"No named blit frame buffer in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tsrc.fbo(), dst.fbo(),\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, 0, dst.w(), dst.h(),\n\t\t\tmask, filter);\n#endif\n\t}\n\n\tvoid\t\t\tblit_and_flip(const IRenderTarget& src, const IRenderTarget& dst, GLbitfield mask, GLenum filter)\n\t{\n#ifdef HEADLESS\n\t\tSIBR_ERR << \"No named blit frame buffer in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tsrc.fbo(), dst.fbo(),\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, dst.h(), dst.w(), 0,\n\t\t\tmask, filter);\n#endif\n\t}\n\n\t\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/RenderTarget.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/graphics/Image.hpp\"\n# include \"core/graphics/Types.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/graphics/RenderUtility.hpp\"\n\n\n# define SIBR_MAX_SHADER_ATTACHMENTS (1<<3)\n\nnamespace sibr\n{\n\n\n\n\t/** Rendertarget interface. A render target wraps an OpenGL framebuffer, \n\t* that can have one depth buffer, one stencil buffer, and one or more color attachments.\n\t* This generic interface is typeless, \\sa RenderTarget.\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT IRenderTarget\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<IRenderTarget>\tPtr;\n\t\ttypedef std::unique_ptr<IRenderTarget>\tUPtr;\n\tpublic:\n\t\t/// Destructor.\n\t\tvirtual ~IRenderTarget(void) { }\n\n\t\t/** Get the texture handle of the t-th color attachment. \n\t\t\\param t the color attachment slot\n\t\t\\return the texture handle\n\t\t\\deprecated Use handle instead.\n\t\t*/\n\t\tvirtual GLuint texture(uint t = 0) const = 0;\n\n\t\t/** Get the texture handle of the t-th color attachment.\n\t\t\\param t the color attachment slot\n\t\t\\return the texture handle\n\t\t*/\n\t\tvirtual GLuint handle(uint t = 0) const = 0;\n\n\t\t/** Bind the rendertarget for drawing. All color buffers are bound, along \n\t\t\twith the depth and optional stencil buffers.*/\n\t\tvirtual void bind(void) = 0;\n\n\t\t/** Unbind the rendertarget.\n\t\t\\note This will bind the window rendertarget. */\n\t\tvirtual void unbind(void) = 0;\n\n\t\t/** Clear the content of the rendertarget. */\n\t\tvirtual void clear(void) = 0;\n\n\t\t/** \\return the rendertarget width. */\n\t\tvirtual uint   w(void) const = 0;\n\n\t\t/** \\return the rendertarget height. */\n\t\tvirtual uint   h(void) const = 0;\n\n\t\t/** \\return the framebuffer handle. */\n\t\tvirtual GLuint fbo(void) const = 0;\n\t};\n\n\t/**\n\t* A render target wraps an OpenGL framebuffer, that can have one depth buffer, \n\t* one stencil buffer, and one or more color attachments.\n\t* \\sa IRenderTarget.\n\t* \\ingroup sibr_graphics\n\t*/\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tclass RenderTarget : public IRenderTarget {\n\t\tSIBR_DISALLOW_COPY(RenderTarget);\n\tpublic:\n\t\ttypedef\t\tImage<T_Type, T_NumComp>\t\tPixelImage;\n\t\ttypedef\t\ttypename PixelImage::Pixel\t\tPixelFormat;\n\t\ttypedef\t\tstd::shared_ptr<RenderTarget<T_Type, T_NumComp>>\tPtr;\n\t\ttypedef\t\tstd::unique_ptr<RenderTarget<T_Type, T_NumComp>>\tUPtr;\n\n\tprivate:\n\n\t\tGLuint m_fbo = 0; ///< Framebuffer handle.\n\t\tGLuint m_depth_rb = 0; ///< Depth renderbuffer handle.\n\t\tGLuint m_stencil_rb = 0; ///< Stencil renderbuffer handle.\n\t\tGLuint m_textures[SIBR_MAX_SHADER_ATTACHMENTS]; ///< Color texture handles.\n\t\tuint   m_numtargets = 0; ///< Number of active color attachments.\n\t\tbool   m_autoMIPMAP = false; ///< Generate mipmaps on the fly.\n\t\tbool   m_msaa = false; ///< Use multisampled targets.\n\t\tbool   m_stencil = false; ///< Has a stencil buffer.\n\t\tuint   m_W = 0; ///< Width.\n\t\tuint   m_H = 0; ///< Height.\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tRenderTarget(void);\n\t\t\n\t\t/** Constructor and allocation.\n\t\t\\param w the target width\n\t\t\\param h the target height\n\t\t\\param flags options\n\t\t\\param num the number of color attachments.\n\t\t*/\n\t\tRenderTarget(uint w, uint h, uint flags = 0, uint num = 1);\n\n\t\t/// Destructor.\n\t\t~RenderTarget(void);\n\n\t\t/** Get the texture handle of the t-th color attachment.\n\t\t\\param t the color attachment slot\n\t\t\\return the texture handle\n\t\t\\deprecated Use handle instead.\n\t\t*/\n\t\tGLuint texture(uint t = 0) const;\n\t\t\n\t\t/** Get the texture handle of the t-th color attachment. \n\t\t\\param t the color attachment slot\n\t\t\\return the texture handle\n\t\t*/\n\t\tGLuint handle(uint t = 0) const;\n\n\t\t/** \\return the depth buffer handle. */\n\t\tGLuint depthRB() const;\n\n\t\t/** Bind the rendertarget for drawing. All color buffers are bound, along\n\t\t\twith the depth and optional stencil buffers.*/\n\t\tvoid bind(void);\n\n\t\t/** Unbind the rendertarget.\n\t\t\\note This will bind the window rendertarget. */\n\t\tvoid unbind(void);\n\n\t\t/** Clear the rendertarget buffers with default values.\n\t\t * \\warning This function will unbind the render target after clearing.\n\t\t */\n\t\tvoid clear(void);\n\n\t\t/** Clear the rendertarget buffers, using a custom clear color.\n\t\t * \\param v the clear color\n\t\t * \\warning This function will unbind the render target after clearing.\n\t\t * \\bug This function does not rescale values for uchar (so background is either 0 or 1)\n\t\t */\n\t\tvoid clear(const typename RenderTarget<T_Type, T_NumComp>::PixelFormat& v);\n\n\t\t/** Clear the stencil buffer only. */\n\t\tvoid clearStencil(void);\n\n\t\t/** Clear the depth buffer only. */\n\t\tvoid clearDepth(void);\n\n\t\t/** Readback the content of a color attachment into an sibr::Image on the CPU.\n\t\t\\param image will contain the texture content\n\t\t\\param target the color attachment index to read\n\t\t\\warning Might cause a GPU flush/sync.\n\t\t*/\n\t\ttemplate <typename TType, uint NNumComp>\n\t\tvoid readBack(sibr::Image<TType, NNumComp>& image, uint target = 0) const;\n\n\t\t/** Readback the content of a color attachment into a cv::Mat on the CPU.\n\t\t\\param image will contain the texture content\n\t\t\\param target the color attachment index to read\n\t\t\\warning Might cause a GPU flush/sync.\n\t\t*/\n\t\ttemplate <typename TType, uint NNumComp>\n\t\tvoid readBackToCVmat(cv::Mat& image, uint target = 0) const;\n\n\t\t/** Readback the content of the depth attachment into an sibr::Image on the CPU.\n\t\t\\param image will contain the depth content\n\t\t\\warning Might cause a GPU flush/sync.\n\t\t\\warning Image orientation might be inconsistent with readBack (flip around horizontal axis).\n\t\t*/\n\t\ttemplate <typename TType, uint NNumComp>\n\t\tvoid readBackDepth(sibr::Image<TType, NNumComp>& image) const;\n\n\t\t/** \\return the number of active color targets. */\n\t\tuint   numTargets(void)  const;\n\n\t\t/** \\return the target width. */\n\t\tuint   w(void)  const;\n\n\t\t/** \\return the target height. */\n\t\tuint   h(void)  const;\n\n\t\t/** \\return the framebuffer handle. */\n\t\tGLuint fbo(void)  const;\n\t};\n\n\t/**\n\tCopy the content of a render target to another render target, resizing if needed.\n\t\\param src source rendertarget\n\t\\param dst destination rendertarget\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\n\t\\param filter filtering mode if the two rendertargets have different dimensions (linear or nearest)\n\t\\note The blit can only happen for color attachment 0 in both src and dst.\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\n\t \\ingroup sibr_graphics\n\t*/\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit(const IRenderTarget& src, const IRenderTarget& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR);\n\n\t/**\n\tCopy the content of a render target to another render target, resizing if needed and flipping the result.\n\t\\param src source rendertarget\n\t\\param dst destination rendertarget\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\n\t\\param filter filtering mode if the two rendertargets have different dimensions (linear or nearest)\n\t\\note The blit can only happen for color attachment 0 in both src and dst.\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\n\t \\ingroup sibr_graphics\n\t*/\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit_and_flip(const IRenderTarget& src, const IRenderTarget& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR);\n\n\t/** Display a rendertarget color content in a popup window (backed by OpenCV).\n\t\\param rt the rendertarget to display\n\t\\param layer the color attachment to display\n\t\\param windowTitle name of the window\n\t\\param closeWindow should the window be closed when pressing a key\n\t\\ingroup sibr_graphics\n\t*/\n\ttemplate <typename T_Type, unsigned T_NumComp>\n\tstatic void\t\tshow( const RenderTarget<T_Type, T_NumComp> & rt, uint layer=0, const std::string& windowTitle=\"sibr::show()\" , bool closeWindow = true ) {\n\t\tsibr::Image<T_Type, T_NumComp>\timg(rt.w(), rt.h());\n\t\trt.readBack(img, layer);\n\t\tshow(img, windowTitle, closeWindow);\n\t}\n\t\n\t/** Display a rendertarget depth content in a popup window (backed by OpenCV).\n\t\\param rt the rendertarget to display\n\t\\param windowTitle name of the window\n\t\\param closeWindow should the window be closed when pressing a key\n\t\\ingroup sibr_graphics\n\t*/\n\ttemplate <typename T_Type, unsigned T_NumComp>\n\tstatic void\t\tshowDepth( const RenderTarget<T_Type, T_NumComp> & rt, const std::string& windowTitle=\"sibr::show()\" , bool closeWindow = true ) {\n\t\tsibr::Image<float, 3>\timg(rt.w(), rt.h());\n\t\trt.readBackDepth(img);\n\t\tshow(img, windowTitle, closeWindow);\n\t}\n\t\n\t/** Display a rendertarget alpha content as a grey map in a popup window (backed by OpenCV).\n\t\\param rt the rendertarget to display\n\t\\param windowTitle name of the window\n\t\\param closeWindow should the window be closed when pressing a key\n\t\\ingroup sibr_graphics\n\t*/\n\ttemplate <typename T_Type, unsigned T_NumComp>\n\tstatic void\t\tshowDepthFromAlpha( const RenderTarget<T_Type, T_NumComp> & rt, const std::string& windowTitle=\"sibr::show()\" , bool closeWindow = true ) {\n\t\tsibr::Image<float, 4>\timg(rt.w(), rt.h());\n\t\trt.readBack(img);\n\n\t\tfor (uint y = 0; y < img.h(); ++y)\n\t\t{\n\t\t\tfor (uint x = 0; x < img.w(); ++x)\n\t\t\t{\n\t\t\t\tsibr::ColorRGBA c = img.color(x, y);\n\t\t\t\tc = sibr::ColorRGBA(1.f, 1.f, 1.f, 0.f) * c[3];\n\t\t\t\tc[3] = 1.f;\n\t\t\t\timg.color(x, y, c);\n\t\t\t}\n\t\t}\n\n\t\tshow(img, windowTitle, closeWindow);\n\t}\n\n\n\t// --- Typedef RenderTarget --------------------------------------------------\n\n\ttypedef RenderTarget<unsigned char, 3>  RenderTargetRGB;\n\ttypedef RenderTarget<unsigned char, 4>  RenderTargetRGBA;\n\ttypedef RenderTarget<unsigned char, 1>  RenderTargetLum;\n\n\ttypedef RenderTarget<unsigned short, 1>    RenderTargetLum16;\n\ttypedef RenderTarget<unsigned short, 2>    RenderTargetUV16;\n\ttypedef RenderTarget<unsigned short, 3>    RenderTargetRGB16;\n\ttypedef RenderTarget<unsigned short, 4>    RenderTargetRGBA16;\n\n\ttypedef RenderTarget<int, 1>\t\t\t   RenderTargetInt1;\n\n\ttypedef RenderTarget<float, 3>          RenderTargetRGB32F;\n\ttypedef RenderTarget<float, 4>          RenderTargetRGBA32F;\n\ttypedef RenderTarget<float, 1>          RenderTargetLum32F;\n\ttypedef RenderTarget<float, 2>          RenderTargetUV32F;\n\n\n\t// --- DEFINITIONS RenderTarget --------------------------------------------------\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tRenderTarget<T_Type, T_NumComp>::RenderTarget(void) {\n\t\tm_fbo = 0;\n\t\tm_depth_rb = 0;\n\t\tm_numtargets = 0;\n\t\tm_W = 0;\n\t\tm_H = 0;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tRenderTarget<T_Type, T_NumComp>::RenderTarget(uint w, uint h, uint flags, uint num) {\n\t\tRenderUtility::useDefaultVAO();\n\n\t\tm_W = w;\n\t\tm_H = h;\n\n\t\tbool is_depth = (GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::isdepth != 0);\n\n\t\tint maxRenterTargets = 0;\n\t\tglGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxRenterTargets);\n\n\t\tSIBR_ASSERT(num <= uint(maxRenterTargets) && num > 0);\n\t\tSIBR_ASSERT(!is_depth || num == 1);\n\n\t\tif (flags & SIBR_GPU_INTEGER) {\n\t\t\tif (GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_internal_format < 0) {\n\t\t\t\tthrow std::runtime_error(\"Integer render  - format does not support integer mapping\");\n\t\t\t}\n\t\t}\n\n\t\tglGenFramebuffers(1, &m_fbo);\n\n\t\tif (!is_depth) {\n\t\t\tglGenRenderbuffers(1, &m_depth_rb); // depth buffer for color rt\n\t\t\t//glGenRenderbuffers(1, &m_stencil_rb); // stencil buffer for color rt\n\t\t} else\n\t\t\tm_depth_rb = 0;\n\n\t\tm_numtargets = num;\n\t\tm_autoMIPMAP = ((flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\n\n\t\tm_msaa = ((flags & SIBR_GPU_MULSTISAMPLE) != 0);\n\t\tm_stencil = ((flags & SIBR_STENCIL_BUFFER) != 0);\n\n\t\tif (m_msaa && (m_numtargets != 1))\n\t\t\tthrow std::runtime_error(\"Only one MSAA render target can be attached.\");\n\t\tfor (uint n = 0; n < m_numtargets; n++) {\n\t\t\tif (m_msaa)\n\t\t\t\tbreak;\n\n\t\t\tglGenTextures(1, &m_textures[n]);\n\n\n\t\t\tglBindTexture(GL_TEXTURE_2D, m_textures[n]);\n\n\t\t\tif (flags & SIBR_CLAMP_UVS) {\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n\t\t\t}\n\n\t\t\t/// \\todo: following causes enum compare warning -Wenum-compare\n\t\t\tglTexImage2D(GL_TEXTURE_2D,\n\t\t\t\t0,\n\t\t\t\t(flags & SIBR_GPU_INTEGER)\n\t\t\t\t? GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_internal_format\n\t\t\t\t: GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::internal_format,\n\t\t\t\tw, h,\n\t\t\t\t0,\n\t\t\t\t(flags & SIBR_GPU_INTEGER)\n\t\t\t\t? GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_format\n\t\t\t\t: GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::format,\n\t\t\t\tGLType<typename PixelFormat::Type>::type,\n\t\t\t\tNULL);\n\n\n\t\t\tif (!m_autoMIPMAP) {\n#if SIBR_COMPILE_FORCE_SAMPLING_LINEAR\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n#else\n\t\t\t\tif (flags & SIBR_GPU_LINEAR_SAMPLING) {\n\t\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\n\t\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\t\t\t\t} else {\n\t\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\n\t\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\n\t\t\t\t}\n#endif\n\t\t\t} else { /// \\todo TODO: this crashes with 16F RT\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\t\t\t}\n\t\t}\n\n\n\t\tif (!m_msaa) {\n\t\t\tif (!is_depth) {\n\t\t\t\tglBindRenderbuffer(GL_RENDERBUFFER, m_depth_rb);\n\t\t\t\tif (!m_stencil)\n\t\t\t\t\tglRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32, w, h);\n\t\t\t\telse\n\t\t\t\t\tglRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, w, h);\n\n\t\t\t\t//CHECK_GL_ERROR;\n\t\t\t\t//glBindRenderbuffer(GL_RENDERBUFFER, m_stencil_rb);\n\t\t\t\t//glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, w, h);\n\t\t\t\tCHECK_GL_ERROR;\n\t\t\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\t\t\tfor (uint n = 0; n < m_numtargets; n++) {\n\t\t\t\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + n, GL_TEXTURE_2D, m_textures[n], 0);\n\t\t\t\t}\n\t\t\t\tCHECK_GL_ERROR;\n\t\t\t\tif (!m_stencil)\n\t\t\t\t\tglFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depth_rb);\n\t\t\t\telse\n\t\t\t\t\tglFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depth_rb);\n\t\t\t\t//CHECK_GL_ERROR;\n\t\t\t\t//glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_stencil_rb);\n\t\t\t} else {\n\t\t\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\t\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_textures[0], 0);\n\t\t\t\tglDrawBuffer(GL_NONE);\n\t\t\t\tglReadBuffer(GL_NONE);\n\t\t\t}\n\t\t}\n\n\t\tif (m_msaa) {\n\t\t\tuint msaa_samples = ((flags >> 7) & 0xF) << 2;\n\n\t\t\tif (msaa_samples == 0)\n\t\t\t\tthrow std::runtime_error(\"Number of MSAA Samples not set. Please use SIBR_MSAA4X, SIBR_MSAA8X, SIBR_MSAA16X or SIBR_MSAA32X as an additional flag.\");\n\n\t\t\tglGenTextures(1, &m_textures[0]);\n\t\t\tglBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_textures[0]);\n\t\t\tCHECK_GL_ERROR;\n\t\t\t/// TODO: following causes enum compare warning -Wenum-compare\n\t\t\tglTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE,\n\t\t\t\tmsaa_samples,\n\t\t\t\t(flags & SIBR_GPU_INTEGER)\n\t\t\t\t? GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_internal_format\n\t\t\t\t: GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::internal_format,\n\t\t\t\tw, h,\n\t\t\t\tGL_TRUE\n\t\t\t);\n\t\t\tglBindRenderbuffer(GL_RENDERBUFFER, m_depth_rb);\n\t\t\tglRenderbufferStorageMultisample(GL_RENDERBUFFER, msaa_samples, GL_DEPTH_COMPONENT32, w, h);\n\t\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\t\tglFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_textures[0], 0);\n\t\t\tglFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depth_rb);\n\t\t}\n\n\t\tGLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);\n\t\tif (status != GL_FRAMEBUFFER_COMPLETE) {\n\t\t\tswitch (status) {\n\t\t\tcase GL_FRAMEBUFFER_UNSUPPORTED:\n\t\t\t\tthrow std::runtime_error(\"Cannot create FBO - GL_FRAMEBUFFER_UNSUPPORTED error\");\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tSIBR_DEBUG(status);\n\t\t\t\tthrow std::runtime_error(\"Cannot create FBO (unknow reason)\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (m_autoMIPMAP) {\n\t\t\tfor (uint i = 0; i < m_numtargets; i++) {\n\t\t\t\tglBindTexture(GL_TEXTURE_2D, m_textures[i]);\n\t\t\t\tglGenerateMipmap(GL_TEXTURE_2D);\n\t\t\t}\n\t\t}\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t\tCHECK_GL_ERROR;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tRenderTarget<T_Type, T_NumComp>::~RenderTarget(void) {\n\t\tfor (uint i = 0; i < m_numtargets; i++)\n\t\t\tglDeleteTextures(1, &m_textures[i]);\n\t\tglDeleteFramebuffers(1, &m_fbo);\n\t\tglDeleteRenderbuffers(1, &m_depth_rb);\n\t\tCHECK_GL_ERROR;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tGLuint RenderTarget<T_Type, T_NumComp>::depthRB() const {\n\t\treturn m_depth_rb;\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tGLuint RenderTarget<T_Type, T_NumComp>::texture(uint t) const {\n\t\tSIBR_ASSERT(t < m_numtargets);\n\t\treturn m_textures[t];\n\t}\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tGLuint RenderTarget<T_Type, T_NumComp>::handle(uint t) const {\n\t\tSIBR_ASSERT(t < m_numtargets);\n\t\treturn m_textures[t];\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::bind(void) {\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\tbool is_depth = (GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::isdepth != 0);\n\t\tif (!is_depth) {\n\t\t\tif (m_numtargets > 0) {\n\t\t\t\tGLenum drawbuffers[SIBR_MAX_SHADER_ATTACHMENTS];\n\t\t\t\tfor (uint i = 0; i < SIBR_MAX_SHADER_ATTACHMENTS; i++)\n\t\t\t\t\tdrawbuffers[i] = GL_COLOR_ATTACHMENT0 + i;\n\t\t\t\tglDrawBuffers(m_numtargets, drawbuffers);\n\t\t\t}\n\t\t} else {\n\t\t\tglDrawBuffer(GL_NONE);\n\t\t\tglReadBuffer(GL_NONE);\n\t\t}\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::unbind(void) {\n\t\tif (m_autoMIPMAP) {\n\t\t\tfor (uint i = 0; i < m_numtargets; i++) {\n\t\t\t\tglBindTexture(GL_TEXTURE_2D, m_textures[i]);\n\t\t\t\tglGenerateMipmap(GL_TEXTURE_2D);\n\t\t\t}\n\t\t}\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::clear(void) {\n\t\tclear(PixelFormat());\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::clear(const typename RenderTarget<T_Type, T_NumComp>::PixelFormat& v) {\n\t\tbind();\n\t\tif (PixelFormat::NumComp == 1) {\n\t\t\tglClearColor(GLclampf(v[0]), 0, 0, 0);\n\t\t} else if (PixelFormat::NumComp == 2) {\n\t\t\tglClearColor(GLclampf(v[0]), GLclampf(v[1]), 0, 0);\n\t\t} else if (PixelFormat::NumComp == 3) {\n\t\t\tglClearColor(GLclampf(v[0]), GLclampf(v[1]), GLclampf(v[2]), 0);\n\t\t} else if (PixelFormat::NumComp == 4) {\n\t\t\tglClearColor(GLclampf(v[0]), GLclampf(v[1]), GLclampf(v[2]), GLclampf(v[3]));\n\t\t}\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\t\tunbind();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::clearStencil() {\n\t\tbind();\n\t\tglClearStencil(0);\n\t\tglClear(GL_STENCIL_BUFFER_BIT);\n\t\tunbind();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::clearDepth() {\n\t\tbind();\n\t\tglClear(GL_DEPTH_BUFFER_BIT);\n\t\tunbind();\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\ttemplate <typename T_IType, uint N_INumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::readBack(sibr::Image<T_IType, N_INumComp>& img, uint target) const {\n\t\t//void RenderTarget<T_Type, T_NumComp>::readBack(PixelImage& img, uint target) const {\n\t\tglFinish();\n\t\tif (target >= m_numtargets)\n\t\t\tSIBR_ERR << \"Reading back texture out of bounds\" << std::endl;\n\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\tbool is_depth = (GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::isdepth != 0);\n\t\tif (!is_depth) {\n\t\t\tif (m_numtargets > 0) {\n\t\t\t\tsibr::Image<T_Type, T_NumComp> buffer(m_W, m_H);\n\n\t\t\t\tGLenum drawbuffers = GL_COLOR_ATTACHMENT0 + target;\n\t\t\t\tglDrawBuffers(1, &drawbuffers);\n\t\t\t\tglReadBuffer(drawbuffers);\n\n\t\t\t\tglReadPixels(0, 0, m_W, m_H,\n\t\t\t\t\tGLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::format,\n\t\t\t\t\tGLType<typename PixelFormat::Type>::type,\n\t\t\t\t\tbuffer.data()\n\t\t\t\t);\n\n\t\t\t\tsibr::Image<T_IType, N_INumComp>\tout;\n\t\t\t\timg.fromOpenCV(buffer.toOpenCV());\n\t\t\t}\n\t\t} else\n\t\t\tSIBR_ERR << \"RenderTarget::readBack: This function should be specialized \"\n\t\t\t\"for handling depth buffer.\" << std::endl;\n\t\timg.flipH();\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\n\t}\n\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\ttemplate <typename T_IType, uint N_INumComp>\n\tvoid RenderTarget<T_Type, T_NumComp>::readBackToCVmat(cv::Mat& img, uint target) const {\n\n\t\tusing Infos = GLTexFormat<cv::Mat, T_IType, N_INumComp>;\n\n\t\tif (target >= m_numtargets)\n\t\t\tSIBR_ERR << \"Reading back texture out of bounds\" << std::endl;\n\n\t\tcv::Mat tmp(m_H, m_W, Infos::cv_type());\n\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\t\tbool is_depth = (Infos::isdepth != 0);\n\t\tif (!is_depth) {\n\t\t\tif (m_numtargets > 0) {\n\t\t\t\tGLenum drawbuffers = GL_COLOR_ATTACHMENT0 + target;\n\t\t\t\tglDrawBuffers(1, &drawbuffers);\n\t\t\t\tglReadBuffer(drawbuffers);\n\n\t\t\t\tglReadPixels(0, 0, m_W, m_H,\n\t\t\t\t\tInfos::format,\n\t\t\t\t\tInfos::type,\n\t\t\t\t\tInfos::data(tmp)\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tSIBR_ERR << \"RenderTarget::readBack: This function should be specialized \"\n\t\t\t\t\"for handling depth buffer.\" << std::endl; \\\n\t\t}\n\t\timg = Infos::flip(tmp);\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t}\n\n\ttemplate <typename TType, uint NNumComp>\n\ttemplate <typename T_IType, uint N_INumComp>\n\tvoid RenderTarget<TType, NNumComp>::readBackDepth(sibr::Image<T_IType, N_INumComp>& image) const {\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, m_fbo);\n\n\t\tglReadBuffer(GL_COLOR_ATTACHMENT0);\n\n\t\tsibr::Image<float, 1> buffer(m_W, m_H);\n\t\tglReadPixels(0, 0, m_W, m_H,\n\t\t\tGL_DEPTH_COMPONENT,\n\t\t\tGL_FLOAT,\n\t\t\tbuffer.data()\n\t\t);\n\n\t\tsibr::Image<T_IType, N_INumComp>\tout(buffer.w(), buffer.h());\n\t\tfor (uint y = 0; y < buffer.h(); ++y)\n\t\t\tfor (uint x = 0; x < buffer.w(); ++x)\n\t\t\t\tout.color(x, y, sibr::ColorRGBA(1, 1, 1, 1.f) * buffer(x, y)[0]);\n\t\timage = std::move(out);\n\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\n\t}\n\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint   RenderTarget<T_Type, T_NumComp>::numTargets(void)  const { return m_numtargets; }\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint   RenderTarget<T_Type, T_NumComp>::w(void)  const { return m_W; }\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint   RenderTarget<T_Type, T_NumComp>::h(void)  const { return m_H; }\n\ttemplate<typename T_Type, unsigned int T_NumComp>\n\tuint   RenderTarget<T_Type, T_NumComp>::fbo(void)  const { return m_fbo; }\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/RenderUtility.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/Shader.hpp\"\n#include \"core/graphics/RenderUtility.hpp\"\n#include \"core/graphics/Window.hpp\"\n\n#define SIBR_WRITESHADER(src) \"#version 420 core\\n\" #src\n\n\n//#define RenderUtility::camStubDrawSize() 0.10f\n\n\n\nnamespace sibr\n{\n\n\n\tstatic const std::vector<float>&\tgetCameraStubVertices(float camStubSize = 0.1f)\n\t{\n\t\tstd::vector<float> _vBuffer(3*5);\n\t\t_vBuffer[3*0+0]= 1*camStubSize; _vBuffer[3*0+1]= 1*camStubSize; _vBuffer[3*0+2]=-3*camStubSize;\n\t\t_vBuffer[3*1+0]=-1*camStubSize; _vBuffer[3*1+1]= 1*camStubSize; _vBuffer[3*1+2]=-3*camStubSize;\n\t\t_vBuffer[3*2+0]=-1*camStubSize; _vBuffer[3*2+1]=-1*camStubSize; _vBuffer[3*2+2]=-3*camStubSize;\n\t\t_vBuffer[3*3+0]= 1*camStubSize; _vBuffer[3*3+1]=-1*camStubSize; _vBuffer[3*3+2]=-3*camStubSize;\n\t\t_vBuffer[3*4+0]= 0*camStubSize; _vBuffer[3*4+1]= 0*camStubSize; _vBuffer[3*4+2]= 0*camStubSize;\n\t\treturn _vBuffer;\n\t}\n\n\tstatic const std::vector<uint>&\t\tgetCameraStubIndices( void )\n\t{\n\t\tstatic std::vector<uint>\t_iBuffer;\n\n\t\tif (_iBuffer.empty())\n\t\t{\n\t\t\t_iBuffer.resize(3*6);\n\n\t\t\t_iBuffer[3*0+0]=0; _iBuffer[3*0+1]=1; _iBuffer[3*0+2]=4;\n\t\t\t_iBuffer[3*1+0]=1; _iBuffer[3*1+1]=2; _iBuffer[3*1+2]=4;\n\t\t\t_iBuffer[3*2+0]=2; _iBuffer[3*2+1]=4; _iBuffer[3*2+2]=3;\n\t\t\t_iBuffer[3*3+0]=0; _iBuffer[3*3+1]=4; _iBuffer[3*3+2]=3;\n\t\t\t_iBuffer[3*4+0]=0; _iBuffer[3*4+1]=1; _iBuffer[3*4+2]=3;\n\t\t\t_iBuffer[3*5+0]=1; _iBuffer[3*5+1]=2; _iBuffer[3*5+2]=3;\n\t\t}\n\t\treturn _iBuffer;\n\t}\n\n\n\tvoid RenderUtility::sendVertsTexToGPU(GLuint vertTexVBO, GLfloat vert[], GLfloat tcoord[], int svert, int stcoord) {\n\t\tglBindBuffer(GL_ARRAY_BUFFER, vertTexVBO);\n\t\tglBufferData(GL_ARRAY_BUFFER, svert+stcoord, NULL, GL_STATIC_DRAW);\n\t\tglBufferSubData(GL_ARRAY_BUFFER, 0, svert, vert);\n\t\tglBufferSubData(GL_ARRAY_BUFFER, svert, stcoord, tcoord);\n\t}\n\n\n\t/*static*/ void\t\tRenderUtility::renderScreenQuad( bool reverse, GLfloat tex_coor[] )\n\t{\n\t\tstatic GLfloat vert[] = { -1,-1,0,  1,-1,0,  1,1,0,  -1,1,0 };\n\t\tstatic GLfloat tcoord[8];\n\t\tstatic GLuint indexVBO, VAO, vertTexVBO;\n\n\t\tstatic bool firstTime = true;\n\t\t\n\t\tif(reverse)\n\t\t{\n\t\t\tGLfloat tmp[] = { 0,1,  0,0,  1,0,  1,1 };\n\t\t\tif( tex_coor )\n\t\t\t\tstd::memcpy(tmp, tex_coor, sizeof tmp );\n\n\t\t\tstd::memcpy(tcoord, tmp, sizeof tcoord);\n\t\t\tif( !firstTime )  // re-transfer to GPUs\n\t\t\t\tsendVertsTexToGPU(vertTexVBO, vert, tcoord, sizeof(vert), sizeof(tcoord));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tGLfloat tmp[] = { 0,0,  1,0,  1,1,  0,1 };\n\t\t\tif( tex_coor )\n\t\t\t\tstd::memcpy(tmp, tex_coor, sizeof tmp );\t\n\n\t\t\tstd::memcpy(tcoord, tmp, sizeof tcoord);\n\t\t\tif( !firstTime )  // re-transfer to GPU\n\t\t\t\tsendVertsTexToGPU(vertTexVBO, vert, tcoord, sizeof(vert), sizeof(tcoord));\n\t\t}\n\n\t\tstatic GLuint  ind[] = { 0,1,2,  0,2,3 };\n\n\t\tif( firstTime ) {\n\t\t\tfirstTime = false;\n\n\t\t\tglGenVertexArrays(1, &VAO);\n\t\t\tglBindVertexArray(VAO);\n\n\t\t\tglGenBuffers(1, &indexVBO);\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO);\n\t\t\tglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ind), ind, GL_STATIC_DRAW);\n\n\t\t\tglGenBuffers(1, &vertTexVBO);\n\t\t\tsendVertsTexToGPU(vertTexVBO, vert, tcoord, sizeof(vert), sizeof(tcoord));\n\t\t}\n\n\t\tglBindVertexArray(VAO);\n\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVBO);\n\t\tglBindBuffer(GL_ARRAY_BUFFER, vertTexVBO);\n\n\t\tglEnableVertexAttribArray(0);\n\t\tglEnableVertexAttribArray(1);\n\t\tglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);\n\t\tglVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)sizeof(vert)\t);\n\n\t\tglDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, (void*)0);\n\n\t\tglDisableVertexAttribArray(1);\n\t\tglDisableVertexAttribArray(0);\n\t}\n\n\tvoid\t\tRenderUtility::renderScreenQuad()\n\t{\n\t\tstatic GLfloat Fvert[] = { -1,-1,0,  1,-1,0,  1,1,0,  -1,1,0 };\n\t\tstatic GLfloat Ftcoord[] = { 0, 0, 1, 0, 1, 1, 0, 1 };\n\t\tstatic GLuint  Find[] = { 0,1,2,  0,2,3 };\n\t\tstatic GLuint FindexVBO, FVAO, FvertTexVBO;\n\t\tstatic bool FfirstTime = true;\n\t\tstatic int lastContextId = -1;\n\n\t\t//std::cout << lastContextId << \" \" << Window::contextId << std::endl;\n\t\tif (lastContextId != Window::contextId || FfirstTime) {\n\t\t\tlastContextId = Window::contextId;\n\t\t\tFfirstTime = false;\n\n\t\t\tglGenVertexArrays(1, &FVAO);\n\t\t\tglBindVertexArray(FVAO);\n\n\t\t\tglGenBuffers(1, &FindexVBO);\n\t\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, FindexVBO);\n\t\t\tglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Find), Find, GL_STATIC_DRAW);\n\n\t\t\tglGenBuffers(1, &FvertTexVBO);\n\t\t\tsendVertsTexToGPU(FvertTexVBO, Fvert, Ftcoord, sizeof(Fvert), sizeof(Ftcoord));\n\n\t\t\tglBindBuffer(GL_ARRAY_BUFFER, FvertTexVBO);\n\t\t\tglEnableVertexAttribArray(0);\n\t\t\tglVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);\n\t\t\tglEnableVertexAttribArray(1);\n\t\t\tglVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)sizeof(Fvert));\n\n\t\t\tglBindVertexArray(0);\n\t\t}\n\n\t\t\n\t\tglBindVertexArray(FVAO);\n\t\tglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, FindexVBO);\n\t\t\n\t\tconst GLboolean cullingWasEnabled = glIsEnabled(GL_CULL_FACE);\n\t\tglEnable(GL_CULL_FACE);\n\t\tglCullFace(GL_BACK);\n\n\t\tglDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, (void*)0);\n\n\t\tif (!cullingWasEnabled) {\n\t\t\tglDisable(GL_CULL_FACE);\n\t\t}\n\n\t\tglBindVertexArray(0);\n\t}\n\n\n\t/*static*/ Mesh\t\tRenderUtility::createCameraStub(float camStubSize)\n\t{\n\t\t\n\t\tMesh m;\n\t\tm.vertices( getCameraStubVertices(camStubSize) );\n\t\tm.triangles( getCameraStubIndices() );\n\t\treturn m;\n\t}\n\n\t/*static*/ Mesh\t\tRenderUtility::createScreenQuad( void )\n\t{\n\t\tMesh::Vertices v;\n\t\tv.emplace_back(-1.0f, -1.0f, 0.0f);\n\t\tv.emplace_back( 1.0f, -1.0f, 0.0f);\n\t\tv.emplace_back( 1.0f,  1.0f, 0.0f);\n\t\tv.emplace_back(-1.0f,  1.0f, 0.0f);\n\t\tMesh::UVs tc;\n\t\ttc.emplace_back(0.0f,0.0f);\n\t\ttc.emplace_back(1.0f,0.0f);\n\t\ttc.emplace_back(1.0f,1.0f);\n\t\ttc.emplace_back(0.0f,1.0f);\n\t\tMesh::Triangles t;\n\t\tt.emplace_back(0);\n\t\tt.emplace_back(1);\n\t\tt.emplace_back(2);\n\t\tt.emplace_back(0);\n\t\tt.emplace_back(2);\n\t\tt.emplace_back(3);\n\n\n\t\tMesh m;\n\t\tm.vertices(v);\n\t\tm.texCoords(tc);\n\t\tm.triangles(t);\n\t\treturn m;\n\t}\n\n\tMesh::Ptr RenderUtility::createAxisGizmo()\n\t{\n\t\tconst float arrowShift = 0.2f;\n\t\tconst float arrowSpread = 0.1f;\n\n\t\tMesh::Vertices v = {\n\t\t\t// Axis X\n\t\t\t{-1,0,0}, {1,0,0},\n\t\t\t// Arrow X\n\t\t\t{1.0f - arrowShift, -arrowSpread, 0.0f},\n\t\t\t{1.0f - arrowShift, 0.0f, -arrowSpread},\n\t\t\t{1.0f - arrowShift, arrowSpread, 0.0f},\n\t\t\t{1.0f - arrowShift, 0.0f, arrowSpread},\n\n\t\t\t// Axis Y\n\t\t\t{0,-1,0}, {0,1,0},\n\t\t\t// Arrow Y\n\t\t\t{-arrowSpread, 1.0f - arrowShift, 0.0f},\n\t\t\t{0.0f, 1.0f - arrowShift, -arrowSpread},\n\t\t\t{arrowSpread, 1.0f - arrowShift, 0.0f},\n\t\t\t{0.0f, 1.0f - arrowShift, arrowSpread},\n\n\t\t\t// Axis Z\n\t\t\t{0, 0, -1}, {0, 0, 1},\n\t\t\t// Arrow Z\n\t\t\t{-arrowSpread, 0.0f, 1.0f - arrowShift},\n\t\t\t{0.0f, -arrowSpread, 1.0f - arrowShift},\n\t\t\t{arrowSpread, 0.0f, 1.0f - arrowShift},\n\t\t\t{0.0f, arrowSpread, 1.0f - arrowShift},\n\n\t\t\t// Letter X\n\t\t\t{1.0f + arrowShift - arrowSpread, -arrowSpread, 0.0f},\n\t\t\t{1.0f + arrowShift + arrowSpread, arrowSpread, 0.0f},\n\t\t\t{1.0f + arrowShift - arrowSpread, arrowSpread, 0.0f},\n\t\t\t{1.0f + arrowShift + arrowSpread, -arrowSpread, 0.0f},\n\t\t\t// Letter Y\n\t\t\t{0.0f, 1.0f + arrowShift - arrowSpread, 0.0f},\n\t\t\t{0.0f, 1.0f + arrowShift, 0.0f},\n\t\t\t{-arrowSpread, 1.0f + arrowShift + arrowSpread, 0.0f},\n\t\t\t{arrowSpread, 1.0f + arrowShift + arrowSpread, 0.0f},\n\t\t\t// Letter Z\n\t\t\t{0.0f, -arrowSpread, 1.0f + arrowShift - arrowSpread},\n\t\t\t{0.0f, -arrowSpread, 1.0f + arrowShift + arrowSpread},\n\t\t\t{0.0f, arrowSpread, 1.0f + arrowShift - arrowSpread},\n\t\t\t{0.0f, arrowSpread, 1.0f + arrowShift + arrowSpread}\n\t\t};\n\n\t\tMesh::Colors c = {\n\t\t\t// Colors X\n\t\t\t{1, 0, 0}, {1, 0, 0}, {1, 0, 0},\n\t\t\t{1, 0, 0}, {1, 0, 0}, {1, 0, 0},\n\t\t\t// Colors Y\n\t\t\t{0, 1, 0}, {0, 1, 0}, {0, 1, 0},\n\t\t\t{0, 1, 0}, {0, 1, 0}, {0, 1, 0},\n\t\t\t// Colors Z\n\t\t\t{0, 0, 1}, {0, 0, 1}, {0, 0, 1},\n\t\t\t{0, 0, 1}, {0, 0, 1}, {0, 0, 1},\n\t\t\t// Colors Letter X\n\t\t\t{1, 0, 0}, {1, 0, 0},\n\t\t\t{1, 0, 0}, {1, 0, 0},\n\t\t\t// Colors Letter Y\n\t\t\t{0, 1, 0}, {0, 1, 0},\n\t\t\t{0, 1, 0}, {0, 1, 0},\n\t\t\t// Colors Letter Z\n\t\t\t{0, 0, 1}, {0, 0, 1},\n\t\t\t{0, 0, 1}, {0, 0, 1}\n\t\t};\n\n\t\tMesh::Triangles t = {\n\t\t\t// Axis X\n\t\t\t{0, 1, 0},\n\t\t\t// Arrow X\n\t\t\t{1, 2, 3}, {1, 3, 4}, {1, 4, 5},\n\t\t\t{1, 5, 2}, {2, 3, 4}, {2, 3, 5},\n\t\t\t// Axis Y\n\t\t\t{6, 7, 6},\n\t\t\t// Arrow Y\n\t\t\t{7, 8, 9}, {7, 9, 10}, {7, 10, 11},\n\t\t\t{7, 11, 8}, {8, 9, 10}, {8, 9, 11},\n\t\t\t// Axis Z\n\t\t\t{12, 13, 12},\n\t\t\t// Arrow Z\n\t\t\t{13, 14, 15}, {13, 15, 16}, {13, 16, 17},\n\t\t\t{13, 17, 14}, {14, 15, 16}, {14, 15, 17},\n\n\t\t\t// Letter X\n\t\t\t{18, 19, 18}, {20, 21, 20},\n\t\t\t//Letter Y\n\t\t\t{22, 23, 22}, {24, 23, 24}, {25, 23, 25},\n\t\t\t//Letter Z\n\t\t\t{26, 28, 26}, {26, 29, 26}, {27, 29, 27}\n\t\t};\n\n\n\t\tauto out = std::make_shared<sibr::Mesh>();\n\t\tout->vertices(v);\n\t\tout->colors(c);\n\t\tout->triangles(t);\n\t\treturn out;\n\t}\n\n\n\t/*static*/ void\t\tRenderUtility::useDefaultVAO( void )\n\t{\n\t\tstatic GLuint gDefaultVAO = 0;\n\n\t\tif (!gDefaultVAO)\n\t\t\tglGenVertexArrays(1, &gDefaultVAO);\n\n\t\tglBindVertexArray(gDefaultVAO);\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/RenderUtility.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Matrix.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/graphics/Mesh.hpp\"\n\nnamespace sibr\n{\n\n\t/**\n\t\tHelpers for rendering basic debug objects (cameras, simple meshes,...)\n\t\t\\todo Clarify duplication with functionality in SceneDebugView.\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT RenderUtility\n\t{\n\tpublic:\n\n\t\t/** Create a basic cmaera stub.\n\t\t\\param camStubSize the stub scale\n\t\t\\return the mesh\n\t\t*/\n\t\tstatic Mesh\t\tcreateCameraStub( float camStubSize = 0.1f);\n\n\t\t/** Create a screenquad.\n\t\t\\return the mesh\n\t\t*/\n\t\tstatic Mesh\t\tcreateScreenQuad();\n\n\t\t/** Create a gizmo with X,Y,Z axis and labels (using R,G,B respectively).\n\t\t\\return the gizmo mesh\n\t\t*/\n\t\tstatic Mesh::Ptr createAxisGizmo();\n\n\t\t/** Bind a static VAO for which you can redefine vertices or do vertex pulling. */\n\t\tstatic void\t\tuseDefaultVAO( void );\n\n\t\t/** Draw a screenquad. */\n\t\tstatic void\t\trenderScreenQuad();\n\n\t\t/** Draw a screenquad.\n\t\t\\param reverse should the triangles be flipped\n\t\t\\param texCoor custom texture coordinates to use.\n\t\t*/\n\t\tstatic void\t\trenderScreenQuad( bool reverse, GLfloat texCoor[] = NULL );\n\n\tprivate:\n\n\t\t/** Send vertices to the GPU.\n\t\t\\param vertTexVBO the VBO id\n\t\t\\param vert the vertices data\n\t\t\\param tcoord the UV data\n\t\t\\param svert the vert size\n\t\t\\param stcoord the tcoord size\n\t\t*/\n\t\tstatic void sendVertsTexToGPU(GLuint vertTexVBO, GLfloat vert[], GLfloat tcoord[], int svert, int stcoord);\n\n\n\t};\n\n\t///// DEFINITIONS /////\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Shader.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n# include \"core/graphics/Shader.hpp\"\n# include \"core/system/Matrix.hpp\"\n#include \"core/system/String.hpp\"\n\n\n# ifndef SIBR_MAXIMIZE_INLINE\n#  include \"Shader.inl\"\n# endif\n\nnamespace sibr\n{\n\tGLuint GLShader::compileShader(const char* shader_code, GLuint type)\n\t{\n\t\tstd::string shader_type;\n\t\tswitch (type) {\n\t\tcase GL_VERTEX_SHADER:    shader_type = \"vertex\";   break;\n\t\tcase GL_FRAGMENT_SHADER:  shader_type = \"fragment\"; break;\n\t\tcase GL_GEOMETRY_SHADER:  shader_type = \"geometry\"; break;\n\t\tdefault: std::runtime_error(\"Shader types other than vertex/fragment/geometry not supported\");\n\t\t}\n\n\t\tGLuint id = glCreateShader(type);\n\t\tglShaderSource(id,1,&shader_code,NULL);\n\t\tglCompileShader(id);\n\n\t\tGLint compiled;\n\t\tglGetShaderiv(id,GL_COMPILE_STATUS, &compiled);\n\t\tif (!compiled) {\n\t\t\tGLint maxLength;\n\t\t\tglGetShaderiv(id, GL_INFO_LOG_LENGTH, &maxLength);\n\t\t\tchar* infoLog = new char[maxLength+1];\n\t\t\tGLint len = 0;\n\t\t\tglGetShaderInfoLog(id, maxLength, &len, infoLog);\n\t\t\tSIBR_WRG << \"GLSL \" << shader_type.c_str() << \" shader compilation failed for program \"\n\t\t\t\t<< m_Name.c_str() << std::endl\n\t\t\t\t<< infoLog << std::endl;\n\t\t\tdelete [] infoLog;\n\t\t\t(void)glGetError();\n\t\t\treturn 0;\n\t\t}\n\t\treturn id;\n\t}\n\n\tGLShader::GLShader(void) :\n\t\tm_Shader(0),\n\t\tm_Name(\"\"),\n\t\tm_Strict(false),\n\t\tm_Active(false)\n\t{}\n\n\tGLShader::~GLShader(void) {\n\t\tterminate();\n\t}\n\n\tvoid\t\t\tGLShader::init      ( GLuint s_handle )\n\t{\n\t\tm_Shader = s_handle;\n\t}\n\n\tvoid\t\t\tGLShader::setStrict ( bool s )\n\t{\n\t\tm_Strict = s;\n\t}\n\n\tGLuint\t\t\tGLShader::shader    ( void )  const\n\t{\n\t\treturn m_Shader;\n\t}\n\n\tstd::string\t\tGLShader::name      ( void )  const\n\t{\n\t\treturn m_Name;\n\t}\n\n\tbool\t\t\tGLShader::isReady   ( void )  const\n\t{\n\t\treturn m_Shader!=0;\n\t}\n\n\tbool\t\t\tGLShader::isActive  ( void )  const\n\t{\n\t\treturn m_Active;\n\t}\n\n\tbool\t\t\tGLShader::isStrict  ( void )  const\n\t{\n\t\treturn m_Strict;\n\t}\n\n\tbool GLShader::init(std::string name,\n\t\tstd::string vp_code,\n\t\tstd::string fp_code,\n\t\tstd::string gp_code,\n\t\tbool exitOnError,\n\t\tstd::string tcs_code,\n\t\tstd::string tes_code)\n\t{\n\t\tterminate();\n\n\t\tm_Name = name;\n\t\tm_Shader = glCreateProgram();\n\n\t\tCHECK_GL_ERROR;\n\n\t\tGLint vp = 0, fp = 0, gp = 0, tcs = 0, tes = 0;\n\n\t\tif (!vp_code.empty()) {\n\t\t\tvp = compileShader(vp_code.c_str(), GL_VERTEX_SHADER);\n\t\t\tif (!vp) return false;\n\t\t\tglAttachShader(m_Shader, vp);\n\t\t}\n\n\t\tif (!fp_code.empty()) {\n\t\t\tfp = compileShader(fp_code.c_str(), GL_FRAGMENT_SHADER);\n\t\t\tif (!fp) return false;\n\t\t\tglAttachShader(m_Shader, fp);\n\t\t}\n\n\t\tif (!gp_code.empty()) {\n\t\t\tgp = compileShader(gp_code.c_str(), GL_GEOMETRY_SHADER);\n\t\t\tif (!gp) return false;\n\t\t\tglAttachShader(m_Shader, gp);\n\t\t}\n\n\t\tif (!tcs_code.empty()) {\n\t\t\ttcs = compileShader(tcs_code.c_str(), GL_TESS_CONTROL_SHADER);\n\t\t\tif (!tcs) return false;\n\t\t\tglAttachShader(m_Shader, tcs);\n\t\t}\n\n\t\tif (!tes_code.empty()) {\n\t\t\ttes = compileShader(tes_code.c_str(), GL_TESS_EVALUATION_SHADER);\n\t\t\tif (!tes) return false;\n\t\t\tglAttachShader(m_Shader, tes);\n\t\t}\n\n\t\tCHECK_GL_ERROR;\n\n\t\tglLinkProgram(m_Shader);\n\n\t\tCHECK_GL_ERROR;\n\n\t\tGLint shader_linked;\n\n\t\tCHECK_GL_ERROR;\n\n\t\tglGetProgramiv(m_Shader, GL_LINK_STATUS, &shader_linked);\n\t\tif (!shader_linked) {\n\t\t\tGLint maxLength;\n\t\t\tglGetProgramiv(m_Shader, GL_INFO_LOG_LENGTH, &maxLength);\n\t\t\tchar* infoLog = new char[maxLength + 1];\n\t\t\tglGetProgramInfoLog(m_Shader, maxLength, NULL, infoLog);\n\t\t\tSIBR_WRG << \"GLSL program failed to link \" << m_Name.c_str() << std::endl\n\t\t\t\t<< \"Shader linking log:\" << std::endl\n\t\t\t\t<< infoLog << std::endl;\n\t\t\tdelete[] infoLog;\n\n\t\t\tif (exitOnError)\n\t\t\t\tSIBR_ERR << \"GLSL program failed to link\" << std::endl;\n\t\t}\n\n\t\tif (vp) glDeleteShader(vp);\n\t\tif (fp) glDeleteShader(fp);\n\t\tif (gp) glDeleteShader(gp);\n\t\tif (tcs) glDeleteShader(tcs);\n\t\tif (tes) glDeleteShader(tes);\n\n\t\tglUseProgram(0);\n\n\t\tCHECK_GL_ERROR;\n\t\treturn true;\n\t}\n\n\n\tbool GLShader::reload(\n\t\tstd::string vp_code,\n\t\tstd::string fp_code,\n\t\tstd::string gp_code ) {\n\t\t\t{ // Simple way to test if it compiles\n\t\t\t\tsibr::GLShader tester;\n\t\t\t\tif (tester.init(m_Name, vp_code, fp_code, gp_code) == false)\n\t\t\t\t{\n\t\t\t\t\tSIBR_WRG << \"Can't reload shader '\" << m_Name << \"' (see previous log entries)\" << std::endl;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn init(m_Name, vp_code, fp_code, gp_code);\n\t}\n\n\tvoid GLShader::getBinary(std::vector<char> & binary)\n\t{\n\t\tint count = 0;\n\t\tglGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &count);\n\t\tif (count <= 0) {\n\t\t\tSIBR_WRG << \"GL driver does not support program binary export.\" << std::endl;\n\t\t\treturn;\n\t\t}\n\t\tint length = 0;\n\t\tglGetProgramiv(m_Shader, GL_PROGRAM_BINARY_LENGTH, &length);\n\t\tif (length <= 0) {\n\t\t\tSIBR_WRG << \"No binary for program \" << m_Name << \".\" << std::endl;\n\t\t\treturn;\n\t\t}\n\t\tGLenum format;\n\t\tbinary.clear();\n\t\tbinary.resize(length);\n\t\tglGetProgramBinary(m_Shader, length, NULL, &format, &binary[0]);\n\t\n\t}\n\n\tvoid GLShader::terminate( void )\n\t{\n\t\tif (m_Shader) {\n\t\t\tglUseProgram(0);\n\t\t\tglDeleteProgram(m_Shader);\n\t\t\tm_Shader = 0;\n\t\t\tCHECK_GL_ERROR;\n\t\t}\n\t}\n\n\tGLParameter::GLParameter(void) :\n\t\tm_Shader(NULL),\n\t\tm_Handle(-1),\n\t\tm_Name(\"\"),\n\t\tm_Strict(false)\n\t{}\n\n\tbool\tGLParameter::isInitialized( void ) const\n\t{\n\t\treturn (m_Handle != -1 && m_Shader != NULL);\n\t}\n\n\tGLint\tGLParameter::handle( void ) const\n\t{\n\t\treturn m_Handle;\n\t}\n\n\tvoid\tGLParameter::init( sibr::GLShader& shader, std::string name )\n\t{\n\t\tm_Shader = &shader;\n\t\tm_Name   = name;\n\t\tm_Handle = glGetUniformLocation(m_Shader->shader(),name.c_str());\n\t\tm_Strict = m_Shader->isStrict();\n\t\tif (m_Handle == -1) {\n\t\t\tstd::string message = \"GLParameter \" + m_Name + \" does not exist in shader \" + shader.name();\n\t\t\tif (m_Strict) {\n\t\t\t\tthrow std::runtime_error(message);\n\t\t\t} else {\n\t\t\t\tstd::cerr << \"Warning: \" << message.c_str() << std::endl;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic\tstd::string\t\tstrRemoveSpaces( const std::string& str )\n\t{\n\t\tstd::string out;\n\t\tfor (char c : str)\n\t\t\tif (c != ' ' && c != '\\t')\n\t\t\t\tout.push_back(c);\n\t\treturn out;\n\t}\n\n\tstd::string\tloadFile( const std::string& filename, const GLShader::Define::List& defines )\n\t{\n\t\tstd::string file = loadFile(filename);\n\n\t\tif (file.empty())\n\t\t\treturn file;\n\n\t\tstd::vector<std::string>\tlines = sibr::split(file, '\\n');\n\t\tfor ( const GLShader::Define& define : defines )\n\t\t{\n\t\t\tstd::string tag = \"#define\"+define.nameToSearch;\n\t\t\tfor (std::string& line : lines)\n\t\t\t{\n\t\t\t\tstd::string formatted = strRemoveSpaces(line);\n\t\t\t\tif (formatted.find(tag) == 0)\n\t\t\t\t{\n\t\t\t\t\tstd::size_t pos = line.find(define.nameToSearch) + define.nameToSearch.size();\n\t\t\t\t\tline.insert(pos, std::string(\" (\") + define.valueToSet + \") //\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstd::string out;\n\t\tfor ( std::string& line : lines )\n\t\t\tout = out + line + '\\n';\n\t\treturn out;\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Shader.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n# include <string>\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Matrix.hpp\"\n\n#define SIBR_SHADER(version, shader)  std::string(\"#version \" #version \"\\n\" #shader)\n\nnamespace sibr\n{\n\t/**\n\t  OpenGL shader wrapper.\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT GLShader\n\t{\n\t\tSIBR_DISALLOW_COPY( GLShader );\n\t\tSIBR_CLASS_PTR(GLShader);\n\tpublic:\n\n\t\t/** Macro-like substitution in shaders. */\n\t\tstruct Define\n\t\t{\n\t\t\ttypedef std::vector<Define>\tList;\n\n\t\t\t/** Constructor.\n\t\t\t\\param nameToSearch_ the macro value to replace\n\t\t\t\\param valueToSet_ the replacement value (stringified)\n\t\t\t*/\n\t\t\ttemplate <typename TValue>\n\t\t\tDefine( const std::string& nameToSearch_, const TValue& valueToSet_ ) :\n\t\t\t\tnameToSearch(nameToSearch_) {\n\t\t\t\t\tstd::ostringstream oss;\n\t\t\t\t\toss << valueToSet_;\n\t\t\t\t\tvalueToSet = oss.str();\n\t\t\t}\n\n\t\t\tstd::string nameToSearch; ///< the macro value to replace\n\t\t\tstd::string valueToSet; ///< String representation of the replacement value.\n\t\t};\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tGLShader( void );\n\n\t\t/// Destructor.\n\t\t~GLShader( void );\n\n\t\t/** Create and compile a GPU program composed of a vertex/fragment shader (and optionally geometry/tesselation shaders).\n\t\t\\param name the name of the shader (for logging)\n\t\t\\param vp_code vertex shader code string\n\t\t\\param fp_code fragment shader code string\n\t\t\\param gp_code geometry shader code string\n\t\t\\param exitOnError should the application exit on a shader compilation error\n\t\t\\param tcs_code tesselation control shader code string\n\t\t\\param tes_code tesselation evaluation shader code string\n\t\t\\return a success flag\n\t\t*/\n\t\tbool init(std::string name,\n\t\t\tstd::string vp_code, std::string fp_code,\n\t\t\tstd::string gp_code = std::string(),\n\t\t\tbool exitOnError = true,\n\t\t\tstd::string tcs_code = std::string(),\n\t\t\tstd::string tes_code = std::string());\n\n\t\t/** Recompile a GPU program with updated shaders.\n\t\t\\param vp_code vertex shader code string\n\t\t\\param fp_code fragment shader code string\n\t\t\\param gp_code geometry shader code string\n\t\t\\return a success flag\n\t\t*/\n\t\tbool reload(\n\t\t\tstd::string vp_code, std::string fp_code,\n\t\t\tstd::string gp_code = std::string());\n\n\t\t/**\n\t\tQuery the dissassembly of the shader program.\n\t\t\\param binary will contain the compiled shader code\n\t\t\\note This is not supported on all GPUs.\n\t\t*/\n\t\tvoid getBinary(std::vector<char> & binary);\n\n\t\t/** Bind (activate) the sahder for rendering. */\n\t\tSIBR_OPT_INLINE\t\tvoid\tbegin( void );\n\n\t\t/** Unbind the shader. */\n\t\tSIBR_OPT_INLINE\t\tvoid\tend( void );\n\n\t\t/** Init from an existing GPU program.\n\t\t\\param s_handle the existing program handle\n\t\t*/\n\t\tvoid\t\t\tinit      ( GLuint s_handle );\n\n\t\t/** Cleanup and delete the program. */\n\t\tvoid\t\t\tterminate( void );\n\n\t\t/** If set to true, uniforms that are linked but not referenced \n\t\tby the shader will cause an error to be raised.\n\t\t\\param s the validation level\n\t\t*/\n\t\tvoid\t\t\tsetStrict ( bool s );\n\n\t\t/** \\return the program handle. */\n\t\tGLuint\t\t\tshader    ( void )  const;\n\n\t\t/** \\return the shader name. */\n\t\tstd::string\t\tname      ( void )  const;\n\n\t\t/** \\return true if the shader is properly setup. */\n\t\tbool\t\t\tisReady   ( void )  const;\n\n\t\t/** \\return true if the shader is currently bound for drawing. */\n\t\tbool\t\t\tisActive  ( void )  const;\n\n\t\t/** \\return true if the shader will validate linked uniforms. */\n\t\tbool\t\t\tisStrict  ( void )  const;\n\n\tprivate:\n\n\t\t/** Compile a shader for a given stage.\n\t\t\\param shader_code the string containing the sahder code\n\t\t\\param type the stage to compile for\n\t\t\\return the compiled shader stage handle.\n\t\t*/\n\t\tGLuint\tcompileShader( const char* shader_code, GLuint type );\n\n\t\t/** Check if the shader is properly setup, or raise an error. */\n\t\tSIBR_OPT_INLINE\t\tvoid\tauthorize( void ) const;\n\n\t\tGLuint      m_Shader; ///< Shader program handle.\n\t\tstd::string m_Name; ///< Shader name.\n\t\tbool        m_Strict; ///< Should uniforms be validated.\n\t\tbool        m_Active; ///< Is the shader currently bound.\n\t};\n\n\t// ------------------------------------------------------------------------\n\n\n\t/**\n\t  OpenGL shader uniform wrapper. Prefer using GLuniform instead.\n\t  \\sa GLuniform\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT GLParameter\n\t{\n\tpublic:\n\n\t\t/// Constructor.\n\t\tGLParameter( void );\n\n\t\t/** Link the uniform to a shader.\n\t\t\\param shader the shader to link to\n\t\t\\param name the name of the uniform in the shader\n\t\t*/\n\t\tvoid\tinit( sibr::GLShader& shader, std::string name );\n\n\t\t/** \\return true if the uniform was linked to a shader. */\n\t\tbool\tisInitialized( void ) const;\n\n\t\t/** \\return the OpenGL uniform location handle. */\n\t\tGLint\thandle( void ) const;\n\n\t\t/** Set the uniform float value.\n\t\t\\param f the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( float f );\n\n\t\t/** Set the uniform vec2 value.\n\t\t\\param a first component\n\t\t\\param b second component\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( float a, float b );\n\t\t\n\t\t/** Set the uniform vec3 value.\n\t\t\\param a first component\n\t\t\\param b second component\n\t\t\\param c third component\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( float a, float b, float c );\n\t\t\n\t\t/** Set the uniform vec4 value.\n\t\t\\param a first component\n\t\t\\param b second component\n\t\t\\param c third component\n\t\t\\param d fourth component\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( float a, float b, float c, float d );\n\t\t\n\t\t/** Set the uniform mat4 value.\n\t\t\\param matrix the 16 matrix components, in row order\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( const float *matrix );\n\n\t\t/** Set the uniform sampler value.\n\t\t\\param tex the new value (ie the binding location of the texture)\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( GLuint tex );\n\n\t\t/** Set the uniform integer value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( int v );\n\n\t\t/** Set the uniform boolean value (converted to an int).\n\t\t\\param b the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( bool b);\n\n\t\t/** Set the uniform values defined as an array of floats.\n\t\t\\param pv pointer to the float array\n\t\t\\param size number of elements\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tsetArray( const float *pv, int size );\n\n\t\t/** Set the uniform values defined as an array of integers.\n\t\t\\param pv pointer to the int array\n\t\t\\param size number of elements\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tsetArray( const std::vector<int>& pv, int size );\n\n\t\t/** Set the uniform ivec2 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset(const Vector2i& v);\n\n\t\t/** Set the uniform ivec3 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset(const Vector3i& v);\n\n\t\t/** Set the uniform ivec4 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset(const Vector4i& v);\n\t\t\n\t\t/** Set the uniform vec2 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( const Vector2f& v );\n\n\t\t/** Set the uniform vec3 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( const Vector3f& v );\n\n\t\t/** Set the uniform vec4 value.\n\t\t\\param v the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( const Vector4f& v );\n\n\t\t/** Set the uniform mat4 value.\n\t\t\\param m the new value\n\t\t*/\n\t\tSIBR_OPT_INLINE void\tset( const Matrix4f& m );\n\n\t\t/** Set the uniform values defined as an array of mat4s  (row major).\n\t\t\\param m pinter to the beginning of the matrix array\n\t\t\\param num number of matrices\n\t\t*/\n\t\tSIBR_OPT_INLINE void setMatrixArray(const float * m, int num);\n\n\tprivate:\n\n\t\tsibr::GLShader*\t\tm_Shader; ///< Linked shader.\n\t\tGLint\t\t\t\tm_Handle; ///< Uniform location.\n\t\tstd::string\t\t\tm_Name; ///< Uniform name.\n\t\tbool\t\t\t\tm_Strict; ///< Should the program raise an error if the uniform is not found in the linked shader.\n\t\t\n\t\t/** Check if the uniform/shader link is valid. */\n\t\tSIBR_OPT_INLINE void\tauthorize( void ) const;\n\t};\n\n\t/** Load a file from disk and apply macro-like substitutions.\n\t\\param filename the file path\n\t\\param defines a list of substitutions to apply\n\t\\return the loaded string\n\t\\ingroup sibr_graphics\n\t*/\n\tSIBR_GRAPHICS_EXPORT std::string\tloadFile( const std::string& filename, const GLShader::Define::List& defines );\n\n\t/**\n\t  OpenGL shader uniform wrapper with additional update/storage functions.\n\t  It will behave as an element of the type it wraps, but can also be set/sent to the GPU.\n\t  This limits duplication, as you can replace a float+GLParameter by a GLuniform<float>\n\t  When you need a reference to the value (for instance in imGui), use uniform.get().\n\t  \\sa GLParameter\n\t* \\ingroup sibr_graphics\n\t*/\n\ttemplate<typename T> class GLuniform {\n\n\tpublic:\n\t\t/** Constructor.\n\t\t\\param t initial value to use\n\t\t*/\n\t\tGLuniform(const T & t) : value(t) {}\n\n\t\t/** \\return a reference to the value. */\n\t\toperator T & () { return value; }\n\n\t\t/** \\return a reference to the value. */\n\t\tT & get() { return value; }\n\n\t\t/** Copy operator. Update the stored value.\n\t\t\\param t the new value\n\t\t\\return a reference to the value.\n\t\t*/\n\t\tT & operator=(const T & t) { value = t; return *this; }\n\t\t\n\t\t/** Copy operator. Update the stored value using the one of the other uniform.\n\t\t\\param other uniform to get the new value from\n\t\t\\return a reference to itself\n\t\t*/\n\t\tGLuniform & operator=(const GLuniform& other) { value = other.value; return *this; };\n\n\t\t/** not-equal-to operator. Compares the stored values with the argument and returns\n\t\tthe not-equal-to operator.\n\t\t\\param t value to compare to.\n\t\t\\return the boolean result of the operation.\n\t\t*/\n\t\tbool operator!=(const T& t) { return value != t; }\n\n\t\t/** Copy constructor. Update the stored value using the one of the other uniform.\n\t\t\\param other uniform to get the new value from\n\t\t*/\n\t\texplicit GLuniform(const GLuniform&other) : value(other.value) { };\n\n\t\t/// Default constructor.\n\t\tGLuniform() = default;\n\n\t\t/** Link the uniform to a shader.\n\t\t\\param shader the shader to link to\n\t\t\\param name the name of the uniform in the shader\n\t\t*/\n\t\tvoid init(sibr::GLShader& shader, std::string name) {\n\t\t\tparameter.init(shader, name);\n\t\t}\n\n\t\t/** Send the value to the shader if it was initialized.\n\t\t\\note the shader has to be active\n\t\t*/\n\t\tvoid send() {\n\t\t\tif (parameter.isInitialized()) {\n\t\t\t\tparameter.set(value);\n\t\t\t}\n\t\t}\n\n\t\t/** Set the value and send it to the shader if it was initialized.\n\t\t\\param t the new value\n\t\t\\note the shader has to be active\n\t\t*/\n\t\tvoid set(const T & t) {\n\t\t\tvalue = t;\n\t\t\tsend();\n\t\t}\n\t\t\n\t\t/** Set a list of values and send it to the shader if it was initialized.\n\t\t\\param t the new values\n\t\t\\param size the number of values\n\t\t\\note the shader has to be active\n\t\t*/\n\t\tvoid setArray(const T & t,int size) {\n\t\t\tvalue = t;\n\t\t\tif (parameter.isInitialized()) {\n\t\t\t\tparameter.setArray(value,size);\n\t\t\t}\n\t\t}\n\n\tprotected :\n\t\tT value = T(); ///< The underlying value.\n\t\tsibr::GLParameter parameter; ///< The underlying uniform.\n\t};\n\n} // namespace sibr\n\n# ifdef SIBR_MAXIMIZE_INLINE\n#  include \"Shader.inl\"\n# endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Shader.inl",
    "content": "\nnamespace sibr\n{\n\tvoid GLShader::authorize(void) const\n\t{\n\t\tif (!m_Shader) {\n\t\t\tstd::string message = \"sibr::GLShader \" + m_Name + \" used without having been initialized\";\n\t\t\tthrow std::runtime_error(message);\n\t\t}\n\t}\n\n\tvoid GLShader::begin( void )\n\t{\n\t\tCHECK_GL_ERROR;\n\t\tauthorize();\n\t\tglUseProgram(m_Shader);\n\t\tm_Active = true;\n\t\tCHECK_GL_ERROR;\n\t}\n\n\tvoid GLShader::end( void )\n\t{\n\t\tglUseProgram(0);\n\t\tm_Active = false;\n\t\tCHECK_GL_ERROR;\n\t}\n\n\tvoid GLParameter::authorize(void) const\n\t{\n\t\tif (m_Shader == NULL) {\n\t\t\tstd::string message = \"GLParameter \" + m_Name + \" does not have a valid shader program\";\n\t\t\tthrow std::runtime_error(message);\n\t\t}\n\t\tif (m_Strict && m_Handle == -1) {\n\t\t\tstd::string message = \"GLParameter \" + m_Name + \" used without having been initialized\";\n\t\t\tthrow std::runtime_error(message);\n\t\t}\n\t\tif (!m_Shader->isActive()) {\n\t\t\tstd::string message = \"GLParameter \" + m_Name + \" used with shader is not active\";\n\t\t\tthrow std::runtime_error(message);\n\t\t}\n\t}\n\n\tvoid\tGLParameter::set( float f )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform1f(m_Handle,f);\n\t}\n\n\tvoid\tGLParameter::set( float a,float b )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform2f(m_Handle,a,b);\n\t}\n\n\tvoid\tGLParameter::set( float a, float b, float c )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform3f(m_Handle,a,b,c);\n\t}\n\n\tvoid\tGLParameter::set( float a, float b, float c, float d )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform4f(m_Handle,a,b,c,d);\n\t}\n\n\tvoid\tGLParameter::set( const float *matrix )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniformMatrix4fv(m_Handle,1,GL_TRUE,matrix); // row major\n\t}\n\n\tvoid\tGLParameter::set( GLuint tex )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform1i(m_Handle,tex);\n\t}\n\n\tvoid\tGLParameter::set( int v )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform1i(m_Handle,v);\n\t}\n\n\tvoid\tGLParameter::set(bool b)\n\t{\n\t\tset((int)b);\n\t}\n\n\tvoid\tGLParameter::setArray( const float *pv, int size )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform1fv(m_Handle,size,pv);\n\t}\n\t\n\tvoid\tGLParameter::setArray( const std::vector<int>& pv, int size )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform1iv(m_Handle,size,&pv[0]);\n\t}\n\n\tvoid\tGLParameter::set(const Vector2i& v)\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform2i(m_Handle, v[0], v[1]);\n\t}\n\n\tvoid\tGLParameter::set(const Vector3i& v)\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform3i(m_Handle, v[0], v[1], v[2]);\n\t}\n\n\tvoid\tGLParameter::set(const Vector4i& v)\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform4i(m_Handle, v[0], v[1], v[2], v[3]);\n\t}\n\n\tvoid\tGLParameter::set( const Vector2f& v )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform2f(m_Handle,v[0],v[1]);\n\t}\n\n\tvoid\tGLParameter::set( const Vector3f& v )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform3f(m_Handle,v[0],v[1],v[2]);\n\t}\n\n\tvoid\tGLParameter::set( const Vector4f& v )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniform4f(m_Handle,v[0],v[1],v[2],v[3]);\n\t}\n\n\tvoid\tGLParameter::set( const Matrix4f& m )\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniformMatrix4fv(m_Handle,1,GL_FALSE,m.data()); // row major\n\t}\n\n\tvoid\tGLParameter::setMatrixArray(const float* m, int num)\n\t{\n\t\tauthorize();\n\t\tif (!m_Strict && m_Handle == -1) return;\n\t\tglUniformMatrix4fv(m_Handle, num, GL_FALSE, m); // row major\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Texture.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/Texture.hpp\"\n//#define HEADLESS\n\nnamespace sibr\n{\n\tvoid\t\t\tblit(const ITexture2D& src, const IRenderTarget& dst, GLbitfield mask, GLenum filter, bool flip)\n\t{\n\t\tGLuint sourceFrameBuffer = 0;\n\t\tglGenFramebuffers(1, &sourceFrameBuffer);\n\t\tglBindFramebuffer(GL_READ_FRAMEBUFFER, sourceFrameBuffer);\n\t\tglFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src.handle(), 0);\n\n\t\tSIBR_ASSERT(glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);\n\n#ifdef HEADLESS\n\n\t\tSIBR_ERR << \"No named frame buffers in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tsourceFrameBuffer, dst.fbo(),\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, (flip ? dst.h() : 0), dst.w(), (flip ? 0 : dst.h()),\n\t\t\tmask, filter);\n\n\t\tglDeleteFramebuffers(1, &sourceFrameBuffer);\n#endif\n\t}\n\n\tvoid\t\t\tblit_and_flip(const ITexture2D& src, const IRenderTarget& dst, GLbitfield mask, GLenum filter)\n\t{\n\t\tblit(src, dst, mask, filter, true);\n\t}\n\n\tvoid\t\t\tblitToColorAttachment(const ITexture2D& src, IRenderTarget& dst, int location, GLenum filter, bool flip)\n\t{\n\t\t// To blit only to a specific color attachment, it should be the only draw buffer registered.\n\t\t// So we override the drawbuffer from dst temporarily.\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, dst.fbo());\n\t\tglDrawBuffer(GL_COLOR_ATTACHMENT0 + location);\n\t\t\n\t\tGLuint sourceFrameBuffer = 0;\n\t\tglGenFramebuffers(1, &sourceFrameBuffer);\n\t\tglBindFramebuffer(GL_READ_FRAMEBUFFER, sourceFrameBuffer);\n\t\tglFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src.handle(), 0);\n\n\t\tSIBR_ASSERT(glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);\n\n#ifdef HEADLESS\n\t\tSIBR_ERR << \"No named frame buffers in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tsourceFrameBuffer, dst.fbo(),\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, (flip ? dst.h() : 0), dst.w(), (flip ? 0 : dst.h()),\n\t\t\tGL_COLOR_BUFFER_BIT, filter);\n\n\t\tglDeleteFramebuffers(1, &sourceFrameBuffer);\n#endif\n\n\t\t// Restore the drawbuffers.\n\t\t// We use bind() as it guarantees that all color buffers will be bound.\n\t\tdst.bind();\n\t\tdst.unbind();\n\t}\n\n\tvoid\t\t\tblit(const IRenderTarget& src, const ITexture2D& dst, GLbitfield mask, GLenum filter)\n\t{\n\t\tGLuint dstFrameBuffer = 0;\n\t\tglGenFramebuffers(1, &dstFrameBuffer);\n\t\tglBindFramebuffer(GL_DRAW_FRAMEBUFFER, dstFrameBuffer);\n\t\tglFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, dst.handle(), 0);\n\n\t\tSIBR_ASSERT(glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);\n\n#ifdef HEADLESS\n\t\tSIBR_ERR << \"No named frame buffers in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tsrc.fbo(), dstFrameBuffer,\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, 0, dst.w(), dst.h(),\n\t\t\tmask, filter);\n\t\tglDeleteFramebuffers(1, &dstFrameBuffer);\n#endif\n\t}\n\n\tvoid\t\t\tblit(const ITexture2D& src, const ITexture2D& dst, GLbitfield mask, GLenum filter)\n\t{\n\t\tGLuint fbo[2];\n\t\tglGenFramebuffers(2, fbo);\n\t\tglBindFramebuffer(GL_READ_FRAMEBUFFER, fbo[0]);\n\t\tglFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src.handle(), 0);\n\t\tglBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo[0]);\n\t\tglFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, dst.handle(), 0);\n\n\t\tSIBR_ASSERT(glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);\n\t\tSIBR_ASSERT(glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);\n\n#ifdef HEADLESS\n\t\tSIBR_ERR << \"No named frame buffers in headless \" << std::endl;\n#else\n\t\tglBlitNamedFramebuffer(\n\t\t\tfbo[0], fbo[1],\n\t\t\t0, 0, src.w(), src.h(),\n\t\t\t0, 0, dst.w(), dst.h(),\n\t\t\tmask, filter);\n\t\tglDeleteFramebuffers(2, fbo);\n#endif\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Texture.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include <type_traits>\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n# include \"core/graphics/Image.hpp\"\r\n# include \"core/graphics/Types.hpp\"\r\n# include \"core/graphics/RenderTarget.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/** Interface for a generic GPU 2D texture.\r\n\t* \\sa Texture2D\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tclass ITexture2D\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::shared_ptr<ITexture2D>\tPtr;\r\n\t\ttypedef std::unique_ptr<ITexture2D>\tUPtr;\r\n\tpublic:\r\n\r\n\t\t/// Destructor.\r\n\t\tvirtual ~ITexture2D(void) { }\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tvirtual GLuint handle(void) const = 0;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tvirtual uint   w(void) const = 0;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tvirtual uint   h(void) const = 0;\r\n\t};\r\n\r\n\t/** Represent a 2D texture on the GPU, with custom format and type.\r\n\t* \\sa ITexture2D\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tclass Texture2D : public ITexture2D {\r\n\t\tSIBR_DISALLOW_COPY(Texture2D);\r\n\tpublic:\r\n\t\ttypedef\t\tImage<T_Type, T_NumComp>\t\t\tPixelImage;\r\n\t\ttypedef\t\ttypename PixelImage::Pixel\t\t\tPixelFormat;\r\n\t\ttypedef\t\tstd::shared_ptr<Texture2D<T_Type, T_NumComp>>\tPtr;\r\n\t\ttypedef\t\tstd::unique_ptr<Texture2D<T_Type, T_NumComp>>\tUPtr;\r\n\r\n\tpublic:\r\n\r\n\t\t/// Constructor.\r\n\t\tTexture2D(void);\r\n\r\n\t\t/** Constructor from an image.\r\n\t\t\\param img the image to upload to the GPU\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType> Texture2D(const ImageType& img, uint flags = 0);\r\n\r\n\t\t/** Constructor from a list of images, one for each mip level.\r\n\t\t\\param miparray the images to upload to the GPU\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tTexture2D(const std::vector<PixelImage>& miparray, uint flags = 0);\r\n\r\n\t\t/// Destructor.\r\n\t\t~Texture2D(void);\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tGLuint handle(void) const;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tuint   w(void) const;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tuint   h(void) const;\r\n\r\n\t\t/** \\return a CPU image containing the texture content.\r\n\t\t\t\\warning Can cause a GPU flush/sync.\r\n\t\t*/\r\n\t\tsibr::Image<T_Type, T_NumComp>\t\treadBack(void) const;\r\n\r\n\t\t/** Update the content of the txeture with a new image.\r\n\t\t\\param img the new content.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType> void update(const ImageType& img);\r\n\r\n\t\t/** Trigger an update of the mipmaps for level 0 to maxLOD.\r\n\t\t\\param maxLOD the maximum level of mipmap to generate. If -1, as many as possible based on the texture size.\r\n\t\t*/\r\n\t\tvoid mipmap(int maxLOD = -1);\r\n\r\n\tprivate:\r\n\t\tGLuint  m_Handle = 0; ///< Texture handle.\r\n\t\tuint    m_W = 0; ///< Texture width.\r\n\t\tuint    m_H = 0; ///< Texture height.\r\n\t\tuint    m_Flags = 0; ///< Options.\r\n\t\tbool\tm_autoMIPMAP = false; ///< Should the mipmaps be generated automatically.\r\n\r\n\t\t/** Create 2D texture from a generic image (sibr::image or cv::Mat).\r\n\t\t\\param array the image\r\n\t\t\\param flags options\r\n\t\t\\return the handle of the texture\r\n\t\t*/\r\n\t\ttemplate<typename ImageType> static GLuint create2D(const ImageType& array, uint flags);\r\n\r\n\t\t/** Create 2D texture with custom mipmaps from a list of generic images (sibr::image or cv::Mat).\r\n\t\t\\param miparray the images\r\n\t\t\\param flags options\r\n\t\t\\return the handle of the texture\r\n\t\t*/\r\n\t\tstatic GLuint create2D(const std::vector<PixelImage>& miparray, uint flags);\r\n\r\n\t\t/** Send the CPU image data to the GPU.\r\n\t\t\\param id the created texture\r\n\t\t\\param array the image data\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType> static void send2D(GLuint id, const ImageType& array, uint flags);\r\n\r\n\t\t/** Send the CPU images data for each mipmap to the GPU.\r\n\t\t\\param id the created texture\r\n\t\t\\param miparray the image data\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tstatic void send2Dmipmap(GLuint id, const std::vector<PixelImage>& miparray, uint flags);\r\n\r\n\t};\r\n\r\n\r\n\t/** Interface for a generic GPU 2D array texture.\r\n\t* \\sa Texture2DArray\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tclass ITexture2DArray\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::shared_ptr<ITexture2DArray>\tPtr;\r\n\t\ttypedef std::unique_ptr<ITexture2DArray>\tUPtr;\r\n\tpublic:\r\n\t\t/// Destructor.\r\n\t\tvirtual ~ITexture2DArray(void) { }\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tvirtual GLuint\thandle(void) const = 0;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tvirtual uint\tw(void) const = 0;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tvirtual uint\th(void) const = 0;\r\n\r\n\t\t/** \\return the texture layer count. */\r\n\t\tvirtual uint\tdepth(void) const = 0;\r\n\r\n\t\t/** \\return the number of mipmap levels. */\r\n\t\tvirtual uint\tnumLODs(void) const = 0;\r\n\r\n\t\t/** Read back the value of a given pixel to the CPU.\r\n\t\t\\param i layer\r\n\t\t\\param x x coordinate in [0,w-1]\r\n\t\t\\param y y coordinate in [0,h-1]\r\n\t\t\\param lod the mip level\r\n\t\t\\return a converted RGBA float color\r\n\t\t\\warning Use only for debugging, can cause a GPU flush/sync.\r\n\t\t*/\r\n\t\tvirtual Vector4f\treadBackPixel(int i, int x, int y, uint lod = 0) const = 0;\r\n\t};\r\n\r\n\t/**\r\n\t* Represent an array of 2D textures on the GPU, with custom format, type and slice count.\r\n\t* \\sa ITexture2DArray\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tclass Texture2DArray : public ITexture2DArray {\r\n\t\tSIBR_DISALLOW_COPY(Texture2DArray);\r\n\tpublic:\r\n\t\ttypedef\t\tImage<T_Type, T_NumComp>\t\t\tPixelImage;\r\n\t\ttypedef\t\ttypename PixelImage::Pixel\t\t\tPixelFormat;\r\n\t\ttypedef\t\tRenderTarget<T_Type, T_NumComp>\t\t\tPixelRT;\r\n\t\ttypedef\t\tstd::shared_ptr<Texture2DArray<T_Type, T_NumComp>>\tPtr;\r\n\t\ttypedef\t\tstd::unique_ptr<Texture2DArray<T_Type, T_NumComp>>\tUPtr;\r\n\r\n\tpublic:\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param d number of layers\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tTexture2DArray(const uint d = 0, uint flags = 0);\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param w width\r\n\t\t\\param h height\r\n\t\t\\param d number of layers\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tTexture2DArray(const uint w, const uint h, const uint d, uint flags = 0);\r\n\r\n\t\t/** Constructor from a set of rendertargets.\r\n\t\t\\param images list of rendertargets, one for each layer\r\n\t\t\\param flags options\r\n\t\t\\warning RTs should be of the same size.\r\n\t\t*/\r\n\t\tTexture2DArray(const std::vector<typename PixelRT::Ptr>& images, uint flags = 0);\r\n\r\n\t\t/** Constructor from a set of CPU images.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param flags options\r\n\t\t\\note All images will be resized to the dimensions of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tTexture2DArray(const std::vector<ImageType>& images, uint flags = 0);\r\n\r\n\t\t/** Constructor from a set of CPU images that will be resized to a fix size.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tTexture2DArray(const std::vector<ImageType>& images, uint w, uint h, uint flags = 0);\r\n\r\n\t\t/** Constructor from a set of CPU images, with custom mipmaps.\r\n\t\t\\param images list of lists of images, one for each mip level, each containing an image for each layer\r\n\t\t\\param flags options\r\n\t\t\\note All images will be resized to the dimensions of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tTexture2DArray(const std::vector<std::vector<ImageType>>& images, uint flags = 0);\r\n\r\n\t\t/** Constructor from a set of CPU images, with custom mipmaps.\r\n\t\t\\param images list of lists of images, one for each mip level, each containing an image for each layer\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tTexture2DArray(const std::vector<std::vector<ImageType>>& images, uint w, uint h, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images and send it to GPU.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param flags options\r\n\t\t\\note All images will be resized to the dimensions of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createFromImages(const std::vector<ImageType>& images, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images and send it to GPU. images will be resized to the target size.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createFromImages(const std::vector<ImageType>& images, uint w, uint h, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images and send it to GPU while compressing them.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param compression the GL_COMPRESSED format. It must be choosen accordingly to the texture internal format.\r\n\t\t\\param flags options\r\n\t\t\\note All images will be resized to the dimensions of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createCompressedFromImages(const std::vector<ImageType>& images, uint compression, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images and send it to GPU while compressing them. images will be resized to the target size.\r\n\t\t\\param images list of images, one for each layer\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param compression the GL_COMPRESSED format. It must be choosen accordingly to the texture internal format.\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createCompressedFromImages(const std::vector<ImageType>& images, uint w, uint h, uint compression, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images with custom mipmaps and send it to GPU.\r\n\t\t\\param images list of lists of images, one for each mip level, each containing an image for each layer\r\n\t\t\\param flags options\r\n\t\t\\note All images will be resized to the dimensions of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createFromImages(const std::vector<std::vector<ImageType>>& images, uint flags = 0);\r\n\r\n\t\t/** Create the texture from a set of images with custom mipmaps and send it to GPU.\r\n\t\t\\param images list of lists of images, one for each mip level, each containing an image for each layer\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid createFromImages(const std::vector<std::vector<ImageType>>& images, uint w, uint h, uint flags = 0);\r\n\r\n\t\t/** Update the content of all layers of the texture.\r\n\t\t\\param images the new content to use\r\n\t\t\\note All images will be resized to the size of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid updateFromImages(const std::vector<ImageType>& images);\r\n\r\n\t\t/** Create the texture from a set of rendertargets and send it to GPU.\r\n\t\t\\param RTs list of rendertargets, one for each layer\r\n\t\t\\param flags options\r\n\t\t\\warning RTs should be of the same size.\r\n\t\t*/\r\n\t\tvoid createFromRTs(const std::vector<typename PixelRT::Ptr>& RTs, uint flags = 0);\r\n\r\n\t\t/** Update the content of specific layers of the texture.\r\n\t\t\\param images the new content to use\r\n\t\t\\param slices the indices of the slices to update\r\n\t\t\\note All images will be resized to the size of the largest one.\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid updateSlices(const std::vector<ImageType>& images, const std::vector<int>& slices);\r\n\r\n\t\t/// Destructor.\r\n\t\t~Texture2DArray(void);\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tGLuint\thandle(void) const;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tuint\tw(void) const;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tuint\th(void) const;\r\n\r\n\t\t/** \\return the texture layer count. */\r\n\t\tuint\tdepth(void) const;\r\n\r\n\t\t/** \\return the number of mipmap levels. */\r\n\t\tuint\tnumLODs(void) const;\r\n\r\n\t\t/** Read back the value of a given pixel to the CPU.\r\n\t\t\\param i layer\r\n\t\t\\param x x coordinate in [0,w-1]\r\n\t\t\\param y y coordinate in [0,h-1]\r\n\t\t\\param lod the mip level\r\n\t\t\\return a converted RGBA float color\r\n\t\t\\warning Use only for debugging, can cause a GPU flush/sync.\r\n\t\t*/\r\n\t\tVector4f\treadBackPixel(int i, int x, int y, uint lod = 0) const;\r\n\r\n\tprivate:\r\n\r\n\t\t/** Create the texture array. */\r\n\t\tvoid createArray(uint compression = 0);\r\n\r\n\t\t/** Upload the images data to the GPU.\r\n\t\t\\param images the data to upload\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid sendArray(const std::vector<ImageType>& images);\r\n\r\n\t\t/** Copy the rendertargets data to the texture.\r\n\t\t\\param RTs the rendertargets to copy\r\n\t\t*/\r\n\t\tvoid sendRTarray(const std::vector<typename PixelRT::Ptr>& RTs);\r\n\r\n\t\t/** Upload the images data to the GPU.\r\n\t\t\\param images the data to upload\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tvoid sendMipArray(const std::vector<std::vector<ImageType>>& images);\r\n\r\n\t\t/** Flip and rescale a subset of images from a list.\r\n\t\t\\param images the images to resize\r\n\t\t\\param tmp a temporary buffer\r\n\t\t\\param tw the target width\r\n\t\t\\param th the target height\r\n\t\t\\param slices the indices of the images to process in the list\r\n\t\t\\return a list of pointers to the transformed images\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tstd::vector<const ImageType*> applyFlipAndResize(\r\n\t\t\tconst std::vector<ImageType>& images,\r\n\t\t\tstd::vector<ImageType>& tmp, uint tw, uint th,\r\n\t\t\tconst std::vector<int>& slices\r\n\t\t);\r\n\r\n\t\t/** Flip and rescale a set of images.\r\n\t\t\\param images the images to resize\r\n\t\t\\param tmp a temporary buffer\r\n\t\t\\param tw the target width\r\n\t\t\\param th the target height\r\n\t\t\\return a list of pointers to the transformed images\r\n\t\t*/\r\n\t\ttemplate<typename ImageType>\r\n\t\tstd::vector<const ImageType*> applyFlipAndResize(\r\n\t\t\tconst std::vector<ImageType>& images,\r\n\t\t\tstd::vector<ImageType>& tmp, uint tw, uint th\r\n\t\t);\r\n\r\n\t\tGLuint  m_Handle = 0; ///< Texture handle.\r\n\t\tuint    m_W = 0; ///< Texture width.\r\n\t\tuint    m_H = 0; ///< Texture height.\r\n\t\tuint    m_Flags = 0; ///< Options.\r\n\t\tuint\tm_Depth = 0; ///< Layers count.\r\n\t\tuint\tm_numLODs = 1; ///< Mipmap level count.\r\n\t};\r\n\r\n\r\n\t/** Interface for a generic GPU cubemap texture.\r\n\t* \\sa TextureCubeMap\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tclass ITextureCubeMap\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::shared_ptr<ITextureCubeMap>\tPtr;\r\n\t\ttypedef std::unique_ptr<ITextureCubeMap>\tUPtr;\r\n\tpublic:\r\n\t\t/// Destructor.\r\n\t\tvirtual ~ITextureCubeMap(void) { }\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tvirtual GLuint\thandle(void) const = 0;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tvirtual uint\tw(void) const = 0;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tvirtual uint\th(void) const = 0;\r\n\t};\r\n\r\n\t/**\r\n\t* Represent a cubemap composed of 6 2D faces on the GPU, with custom format and type.\r\n\t* \\sa ITextureCubeMap\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tclass TextureCubeMap : public ITextureCubeMap {\r\n\t\tSIBR_DISALLOW_COPY(TextureCubeMap);\r\n\r\n\tpublic:\r\n\t\ttypedef\t\tImage<T_Type, T_NumComp>\t\t\tPixelImage;\r\n\t\ttypedef\t\ttypename PixelImage::Pixel\t\t\tPixelFormat;\r\n\t\ttypedef\t\tRenderTarget<T_Type, T_NumComp>\t\t\tPixelRT;\r\n\t\ttypedef\t\tstd::shared_ptr<TextureCubeMap<T_Type, T_NumComp>>\tPtr;\r\n\t\ttypedef\t\tstd::unique_ptr<TextureCubeMap<T_Type, T_NumComp>>\tUPtr;\r\n\r\n\tpublic:\r\n\r\n\t\t/// Constructor.\r\n\t\tTextureCubeMap(void);\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param w width\r\n\t\t\\param h height\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tTextureCubeMap(const uint w, const uint h, uint flags = 0);\r\n\r\n\t\t/** Create a cubemap from 6 images.\r\n\t\t\\param xpos positive X face\r\n\t\t\\param xneg negative X face\r\n\t\t\\param ypos positive Y face\r\n\t\t\\param yneg negative Y face\r\n\t\t\\param zpos positive Z face\r\n\t\t\\param zneg negative Z face\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tTextureCubeMap(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\t\tconst PixelImage& zpos, const PixelImage& zneg, uint flags = 0);\r\n\r\n\t\t/** Create the texture from 6 images.\r\n\t\t\\param xpos positive X face\r\n\t\t\\param xneg negative X face\r\n\t\t\\param ypos positive Y face\r\n\t\t\\param yneg negative Y face\r\n\t\t\\param zpos positive Z face\r\n\t\t\\param zneg negative Z face\r\n\t\t\\param flags options\r\n\t\t*/\r\n\t\tvoid createFromImages(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\t\tconst PixelImage& zpos, const PixelImage& zneg, uint flags = 0);\r\n\r\n\t\t/// Destructor.\r\n\t\t~TextureCubeMap(void);\r\n\r\n\t\t/** \\return the texture handle. */\r\n\t\tGLuint\thandle(void) const;\r\n\r\n\t\t/** \\return the texture width. */\r\n\t\tuint\tw(void) const;\r\n\r\n\t\t/** \\return the texture height. */\r\n\t\tuint\th(void) const;\r\n\r\n\tprivate:\r\n\r\n\t\t/** Create the cubemap texture object. */\r\n\t\tvoid createCubeMap();\r\n\r\n\t\t/** Upload cubemap data.\r\n\t\t\\param xpos positive X face\r\n\t\t\\param xneg negative X face\r\n\t\t\\param ypos positive Y face\r\n\t\t\\param yneg negative Y face\r\n\t\t\\param zpos positive Z face\r\n\t\t\\param zneg negative Z face\r\n\t\t*/\r\n\t\tvoid sendCubeMap(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\t\tconst PixelImage& zpos, const PixelImage& zneg);\r\n\r\n\t\tGLuint  m_Handle = 0; ///< Texture handle.\r\n\t\tuint    m_W = 0; ///< Texture width.\r\n\t\tuint    m_H = 0; ///< Texture height.\r\n\t\tuint    m_Flags = 0; ///< Options.\r\n\r\n\t};\r\n\r\n\r\n\t/**\r\n\tCopy the content of a texture to another texture, resizing if needed.\r\n\t\\param src source texture\r\n\t\\param dst destination texture\r\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\r\n\t\\param filter filtering mode if the two buffers have different dimensions (linear or nearest)\r\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit(const ITexture2D& src, const ITexture2D& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR);\r\n\r\n\r\n\t/**\r\n\tCopy the content of a texture to a render target, resizing if needed.\r\n\t\\param src source texture\r\n\t\\param dst destination rendertarget\r\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\r\n\t\\param filter filtering mode if the two buffers have different dimensions (linear or nearest)\r\n\t\\param flip flip the texture vertically when copying it\r\n\t\\note The blit can only happen for color attachment 0 in dst.\r\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\r\n\t \\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit(const ITexture2D& src, const IRenderTarget& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR, bool flip = false);\r\n\r\n\t/**\r\n\tCopy the content of a texture to a render target, resizing if needed and flipping the result.\r\n\t\\param src source texture\r\n\t\\param dst destination rendertarget\r\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\r\n\t\\param filter filtering mode if the two buffers have different dimensions (linear or nearest)\r\n\t\\note The blit can only happen for color attachment 0 in dst.\r\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\r\n\t \\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit_and_flip(const ITexture2D& src, const IRenderTarget& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR);\r\n\r\n\t/**\r\n\tCopy the content of a texture to a specific color attachment of the destination render target, resizing if needed.\r\n\t\\param src source texture\r\n\t\\param dst destination rendertarget\r\n\t\\param location the color attachment to blit to\r\n\t\\param filter filtering mode if the two buffers have different dimensions (linear or nearest)\r\n\t\\param flip flip the texture vertically when copying it\r\n\t\\note No mask to specify, as this is assumed to be COLOR.\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblitToColorAttachment(const ITexture2D& src, IRenderTarget& dst, int location, GLenum filter = GL_LINEAR, bool flip = false);\r\n\t\r\n\t/**\r\n\tCopy the content of a rendertarget first color attachment to a texture, resizing if needed.\r\n\t\\param src source rendertarget\r\n\t\\param dst destination texture\r\n\t\\param mask which part of the buffer to copy (color, depth, stencil).\r\n\t\\param filter filtering mode if the two buffers have different dimensions (linear or nearest)\r\n\t\\note The blit can only happen for color attachment 0 in dst.\r\n\t\\warning If the mask contains the depth or stencil, filter must be GL_NEAREST\r\n\t \\ingroup sibr_graphics\r\n\t*/\r\n\tSIBR_GRAPHICS_EXPORT void\t\t\tblit(const IRenderTarget& src, const ITexture2D& dst, GLbitfield mask = GL_COLOR_BUFFER_BIT, GLenum filter = GL_LINEAR);\r\n\r\n\t/** Display a RenderTarget into a popup OpenCV window.\r\n\t\\param rt the rendertarget to display\r\n\t\\param winTitle the window title\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\ttemplate <typename T_Type, unsigned T_NumComp>\r\n\tstatic void\t\tshow(const RenderTarget<T_Type, T_NumComp>& rt, const std::string& winTitle = \"sibr::show()\") {\r\n\t\tImage<T_Type, T_NumComp> img;\r\n\t\trt.readBack(img);\r\n\t\tshow(img, winTitle);\r\n\t}\r\n\r\n\t/** Display a texture into a popup OpenCV window.\r\n\t\\param texture the texture to display\r\n\t\\param winTitle the window title\r\n\t\\ingroup sibr_graphics\r\n\t*/\r\n\ttemplate <typename T_Type, unsigned T_NumComp>\r\n\tstatic void\t\tshow(const Texture2D<T_Type, T_NumComp>& texture, const std::string& winTitle = \"sibr::show()\") {\r\n\t\tImage<T_Type, T_NumComp> img(texture.w(), texture.h());\r\n\r\n\t\tglActiveTexture(GL_TEXTURE0);\r\n\t\tglBindTexture(GL_TEXTURE_2D, texture.handle());\r\n\r\n\t\tglGetTexImage(GL_TEXTURE_2D, 0, sibr::GLFormat<T_Type, T_NumComp>::format, sibr::GLType<T_Type>::type, img.data());\r\n\t\tshow(img, winTitle);\r\n\t}\r\n\r\n\t// --- TYPEDEFS --------------------------------------------------\r\n\r\n\ttypedef Texture2D<unsigned char, 3>     Texture2DRGB;\r\n\ttypedef Texture2D<unsigned char, 4>     Texture2DRGBA;\r\n\ttypedef Texture2D<unsigned char, 1>     Texture2DLum;\r\n\r\n\ttypedef Texture2D<unsigned short, 4>    Texture2DRGBA16;\r\n\ttypedef Texture2D<unsigned short, 1>    Texture2DLum16;\r\n\ttypedef Texture2D<unsigned short, 2>    Texture2DUV16;\r\n\r\n\ttypedef Texture2D<short, 2>             Texture2DUV16s;\r\n\r\n\ttypedef Texture2D<float, 3>             Texture2DRGB32F;\r\n\ttypedef Texture2D<float, 4>             Texture2DRGBA32F;\r\n\ttypedef Texture2D<float, 2>             Texture2DUV32F;\r\n\ttypedef Texture2D<float, 1>             Texture2DLum32F;\r\n\r\n\r\n\ttypedef Texture2DArray<unsigned char, 1>     Texture2DArrayLum;\r\n\ttypedef Texture2DArray<unsigned char, 2>     Texture2DArrayUV;\r\n\ttypedef Texture2DArray<unsigned char, 3>     Texture2DArrayRGB;\r\n\ttypedef Texture2DArray<unsigned char, 4>     Texture2DArrayRGBA;\r\n\r\n\ttypedef Texture2DArray<unsigned short, 1>    Texture2DArrayLum16;\r\n\ttypedef Texture2DArray<unsigned short, 2>    Texture2DArrayUV16;\r\n\ttypedef Texture2DArray<unsigned short, 3>    Texture2DArrayRGB16;\r\n\ttypedef Texture2DArray<unsigned short, 4>    Texture2DArrayRGBA16;\r\n\r\n\ttypedef Texture2DArray<short, 1>             Texture2DArrayLum16s;\r\n\ttypedef Texture2DArray<short, 2>             Texture2DArrayUV16s;\r\n\ttypedef Texture2DArray<short, 3>             Texture2DArrayRGB16s;\r\n\ttypedef Texture2DArray<short, 4>             Texture2DArrayRGBA16s;\r\n\r\n\ttypedef Texture2DArray<int, 1>\t\t\t\t Texture2DArrayInt1;\r\n\ttypedef Texture2DArray<int, 2>\t\t\t\t Texture2DArrayInt2;\r\n\ttypedef Texture2DArray<int, 3>\t\t\t\t Texture2DArrayInt3;\r\n\ttypedef Texture2DArray<int, 4>\t\t\t\t Texture2DArrayInt4;\r\n\r\n\ttypedef Texture2DArray<float, 1>             Texture2DArrayLum32F;\r\n\ttypedef Texture2DArray<float, 2>             Texture2DArrayUV32F;\r\n\ttypedef Texture2DArray<float, 3>             Texture2DArrayRGB32F;\r\n\ttypedef Texture2DArray<float, 4>             Texture2DArrayRGBA32F;\r\n\r\n\r\n\ttypedef TextureCubeMap<unsigned char, 1>    TextureCubeMapLum;\r\n\ttypedef TextureCubeMap<unsigned char, 3>    TextureCubeMapRGB;\r\n\ttypedef TextureCubeMap<unsigned char, 4>    TextureCubeMapRGBA;\r\n\r\n\ttypedef TextureCubeMap<unsigned short, 1>   TextureCubeMapLum16;\r\n\ttypedef TextureCubeMap<unsigned short, 2>   TextureCubeMapUV16;\r\n\ttypedef TextureCubeMap<unsigned short, 4>   TextureCubeMapRGBA16;\r\n\r\n\ttypedef TextureCubeMap<short, 2>            TextureCubeMapUV16s;\r\n\r\n\ttypedef TextureCubeMap<float, 1>            TextureCubeMapLum32F;\r\n\ttypedef TextureCubeMap<float, 3>            TextureCubeMapRGB32F;\r\n\ttypedef TextureCubeMap<float, 4>            TextureCubeMapRGBA32F;\r\n\r\n\t/* Note concerning depth buffers :\r\n\t* We don't support depth only rendertargets.\r\n\t* Other kinds of RenderTarget (e.g. RenderTargetRGB) creates\r\n\t* also a new depth buffer that is bound with the color buffer, so no need to explicitely create one.\r\n\t* typedef RenderTarget<depth24,1>        RenderTargetDepth24;\r\n\t*/\r\n\r\n\r\n\t// ----DEFINITIONS Texture2D --------------------------------------------------\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tGLuint Texture2D<T_Type, T_NumComp>::create2D(const ImageType& img, uint flags) {\r\n\t\tGLuint id = 0;\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglGenTextures(1, &id);\r\n\t\tglBindTexture(GL_TEXTURE_2D, id);\r\n\t\tif (flags & SIBR_CLAMP_UVS) {\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\r\n\t\t}\r\n\t\telse if (flags & SIBR_CLAMP_TO_BORDER) {\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);\r\n\t\t}\r\n\t\tif (flags & SIBR_GPU_AUTOGEN_MIPMAP) {\r\n\t\t\tif (flags & SIBR_GPU_INTEGER) {\r\n\t\t\t\tthrow std::runtime_error(\"Mipmapping on integer texture not supported, probably not even by OpenGL\");\r\n\t\t\t}\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\t}\r\n\t\telse {\r\n#if SIBR_COMPILE_FORCE_SAMPLING_LINEAR\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n#else\r\n\t\t\tif (flags & SIBR_GPU_LINEAR_SAMPLING) {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r\n\t\t\t}\r\n#endif\r\n\t\t}\r\n\t\tsend2D(id, img, flags);\r\n\t\tCHECK_GL_ERROR;\r\n\t\treturn id;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\t/*static*/ GLuint Texture2D<T_Type, T_NumComp>::create2D(const std::vector<PixelImage>& miparray, uint flags) {\r\n\t\tGLuint id = 0;\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglGenTextures(1, &id);\r\n\t\tglBindTexture(GL_TEXTURE_2D, id);\r\n\t\tif (flags & SIBR_CLAMP_UVS) {\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\r\n\t\t}\r\n\t\telse if (flags & SIBR_CLAMP_TO_BORDER) {\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);\r\n\t\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);\r\n\t\t}\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, int(miparray.size()) - 1);\r\n\t\tsend2Dmipmap(id, miparray, flags);\r\n\t\tCHECK_GL_ERROR;\r\n\t\treturn id;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2D<T_Type, T_NumComp>::send2D(GLuint id, const ImageType& img, uint flags) {\r\n\t\tusing FormatInfos = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tif (flags & SIBR_GPU_INTEGER) {\r\n\t\t\tif (FormatInfos::int_internal_format < 0) {\r\n\t\t\t\tthrow std::runtime_error(\"Texture format does not support integer mapping\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbool flip = flags & SIBR_FLIP_TEXTURE;\r\n\t\tImageType flippedImg;\r\n\t\tif (flip) {\r\n\t\t\tflippedImg = FormatInfos::flip(img);\r\n\t\t}\r\n\t\tconst ImageType& sendedImg = flip ? flippedImg : img;\r\n\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\t\tglBindTexture(GL_TEXTURE_2D, id);\r\n\t\tglTexImage2D(GL_TEXTURE_2D,\r\n\t\t\t0,\r\n\t\t\t(flags & SIBR_GPU_INTEGER) ? FormatInfos::int_internal_format : FormatInfos::internal_format,\r\n\t\t\tFormatInfos::width(sendedImg), FormatInfos::height(sendedImg),\r\n\t\t\t0,\r\n\t\t\t(flags & SIBR_GPU_INTEGER) ? FormatInfos::int_format : FormatInfos::format,\r\n\t\t\tFormatInfos::type,\r\n\t\t\tFormatInfos::data(sendedImg)\r\n\t\t);\r\n\r\n\t\tbool autoMIPMAP = ((flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\r\n\t\tif (autoMIPMAP)\r\n\t\t\tglGenerateMipmap(GL_TEXTURE_2D);\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\t// Send 2D texture to GPU memory, each mipmap is specified\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\t/*static*/ void Texture2D<T_Type, T_NumComp>::send2Dmipmap(GLuint id, const std::vector<PixelImage>& miparray, uint flags) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tif (flags & SIBR_GPU_INTEGER) {\r\n\t\t\tthrow std::runtime_error(\"Mipmapping on integer texture not supported, probably not even by OpenGL\");\r\n\t\t}\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\t\tglBindTexture(GL_TEXTURE_2D, id);\r\n\r\n\t\tstd::vector<PixelImage> flippedMipArray;\r\n\t\tbool flip = flags & SIBR_FLIP_TEXTURE;\r\n\t\tif (flip) {\r\n\t\t\tflippedMipArray.resize(miparray.size());\r\n#pragma omp parallel for\r\n\t\t\tfor (uint l = 0; l < miparray.size(); l++) {\r\n\t\t\t\tflippedMipArray[l] = miparray[l].clone();\r\n\t\t\t\tflippedMipArray[l].flipH();\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst std::vector<PixelImage>& sendedMipArray = flip ? flippedMipArray : miparray;\r\n\r\n\t\tfor (uint l = 0; l < miparray.size(); l++) {\r\n\t\t\tglTexImage2D(GL_TEXTURE_2D,\r\n\t\t\t\tl,\r\n\t\t\t\tGLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::internal_format,\r\n\t\t\t\tmiparray[l].w(), miparray[l].h(),\r\n\t\t\t\t0,\r\n\t\t\t\tGLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::format,\r\n\t\t\t\tGLType<typename PixelFormat::Type>::type,\r\n\t\t\t\tsendedMipArray[l].data()\r\n\t\t\t);\r\n\t\t}\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2D<T_Type, T_NumComp>::Texture2D(void) {\r\n\t\tm_Flags = 0;\r\n\t\tm_W = 0;\r\n\t\tm_H = 0;\r\n\t\tm_Handle = 0;\r\n\t\tm_autoMIPMAP = false;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tTexture2D<T_Type, T_NumComp>::Texture2D(const ImageType& img, uint flags) {\r\n\t\tusing TexFormat = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\t\tm_Flags = flags;\r\n\t\tm_W = TexFormat::width(img);\r\n\t\tm_H = TexFormat::height(img);\r\n\t\tm_Handle = create2D(img, m_Flags);\r\n\t\tm_autoMIPMAP = ((flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2D<T_Type, T_NumComp>::Texture2D(const std::vector<PixelImage>& miparray, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tm_W = miparray[0].w();\r\n\t\tm_H = miparray[0].h();\r\n\t\tm_Handle = create2D(miparray, m_Flags);\r\n\t\tm_autoMIPMAP = false;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2D<T_Type, T_NumComp>::~Texture2D(void) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglDeleteTextures(1, &m_Handle);\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tGLuint Texture2D<T_Type, T_NumComp>::handle(void) const { return m_Handle; }\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint   Texture2D<T_Type, T_NumComp>::w(void) const { return m_W; }\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint   Texture2D<T_Type, T_NumComp>::h(void) const { return m_H; }\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tsibr::Image<T_Type, T_NumComp>\t\tTexture2D<T_Type, T_NumComp>::readBack(void) const {\r\n\r\n\t\t// makes sure Vertex have the correct size (read back relies on pointers)\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\t\tglBindTexture(GL_TEXTURE_2D, handle());\r\n\r\n\t\tint w, h;\r\n\t\tglGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w);\r\n\t\tglGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h);\r\n\r\n\t\tsibr::Image<T_Type, T_NumComp> img(w, h);\r\n\r\n\t\tglGetTexImage(GL_TEXTURE_2D,\r\n\t\t\t0,\r\n\t\t\tGLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::format,\r\n\t\t\tGLType<typename PixelFormat::Type>::type,\r\n\t\t\timg.data()\r\n\t\t);\r\n\r\n\t\t// flip data vertically to get origin on lower left corner\r\n\t\timg.flipH();\r\n\r\n\t\tCHECK_GL_ERROR;\r\n\r\n\t\treturn img;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2D<T_Type, T_NumComp>::update(const ImageType& img) {\r\n\t\tusing FormatInfos = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\t\tif (FormatInfos::width(img) == w() && FormatInfos::height(img) == h())\r\n\t\t{\r\n\t\t\tbool flip = m_Flags & SIBR_FLIP_TEXTURE;\r\n\t\t\tImageType flippedImg;\r\n\t\t\tif (flip) {\r\n\t\t\t\tflippedImg = FormatInfos::flip(img);\r\n\t\t\t}\r\n\t\t\tconst ImageType& sendedImg = flip ? flippedImg : img;\r\n\r\n\t\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\t\t\tglBindTexture(GL_TEXTURE_2D, handle());\r\n\t\t\tglTexSubImage2D(GL_TEXTURE_2D, 0,\r\n\t\t\t\t0, 0, FormatInfos::width(sendedImg), FormatInfos::height(sendedImg),\r\n\t\t\t\tFormatInfos::format,\r\n\t\t\t\tFormatInfos::type,\r\n\t\t\t\tFormatInfos::data(sendedImg)\r\n\t\t\t);\r\n\t\t\tif (m_autoMIPMAP)\r\n\t\t\t\tglGenerateMipmap(GL_TEXTURE_2D);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tm_W = FormatInfos::width(img);\r\n\t\t\tm_H = FormatInfos::height(img);\r\n\t\t\tsend2D(m_Handle, img, m_Flags);\r\n\t\t}\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid Texture2D<T_Type, T_NumComp>::mipmap(int maxLOD) {\r\n\t\tglBindTexture(GL_TEXTURE_2D, handle());\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxLOD >= 0 ? maxLOD : 1000);\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\r\n\t\tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\tm_autoMIPMAP = true;\r\n\t\tglGenerateMipmap(GL_TEXTURE_2D);\r\n\t}\r\n\r\n\r\n\r\n\t// ----DEFINITIONS Texture2DArray --------------------------------------------------\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const uint d, uint flags) {\r\n\t\tm_Depth = d;\r\n\t\tm_Flags = flags;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const uint w, const uint h, const uint d, uint flags) {\r\n\t\tm_W = w;\r\n\t\tm_H = h;\r\n\t\tm_Depth = d;\r\n\t\tm_Flags = flags;\r\n\t\tcreateArray();\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const std::vector<ImageType>& images, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromImages(images, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const std::vector<ImageType>& images, uint w, uint h, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromImages(images, w, h, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const std::vector<std::vector<ImageType>>& images, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromImages(images, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const std::vector<std::vector<ImageType>>& images, uint w, uint h, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromImages(images, w, h, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2DArray<T_Type, T_NumComp>::Texture2DArray(const std::vector<typename PixelRT::Ptr>& RTs, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromRTs(RTs, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createArray(uint compression) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglGenTextures(1, &m_Handle);\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, m_Handle);\r\n\r\n\t\tconst bool autoMIPMAP = ((m_Flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\r\n\t\tconst int numMipMap = autoMIPMAP ? (int)std::floor(std::log2(std::max(m_W, m_H))) : m_numLODs;\r\n\r\n\t\tm_numLODs = numMipMap;\r\n\r\n\t\tif (m_numLODs == 1) {\r\n\t\t\tif (m_Flags & SIBR_GPU_LINEAR_SAMPLING) {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (m_Flags & SIBR_GPU_LINEAR_SAMPLING) {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);\r\n\t\t\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\r\n\t\tglTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\r\n\r\n\t\tuint internal_format = GLFormat<T_Type, T_NumComp>::internal_format;\r\n\t\tif (compression)\r\n\t\t\tinternal_format = compression;\r\n\r\n\t\tglTexStorage3D(GL_TEXTURE_2D_ARRAY, numMipMap,\r\n\t\t\tinternal_format,\r\n\t\t\tm_W,\r\n\t\t\tm_H,\r\n\t\t\tm_Depth\r\n\t\t);\r\n\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::sendArray(const std::vector<ImageType>& images) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, m_Handle);\r\n\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\r\n\t\t// Make sure all images have the same size.\r\n\t\tstd::vector<ImageType> tmp;\r\n\t\tstd::vector<const ImageType*> imagesPtrToSend = applyFlipAndResize(images, tmp, m_W, m_H);\r\n\r\n\t\tfor (int im = 0; im < (int)m_Depth; ++im) {\r\n\t\t\tglTexSubImage3D(GL_TEXTURE_2D_ARRAY,\r\n\t\t\t\t0,\r\n\t\t\t\t0, 0, im,\r\n\t\t\t\tm_W,\r\n\t\t\t\tm_H,\r\n\t\t\t\t1, // one slice at a time\r\n\t\t\t\tImgTypeInfo::format,\r\n\t\t\t\tImgTypeInfo::type,\r\n\t\t\t\tImgTypeInfo::data(*imagesPtrToSend[im])\r\n\t\t\t);\r\n\t\t\t//CHECK_GL_ERROR;\r\n\t\t}\r\n\t\tbool autoMIPMAP = ((m_Flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\r\n\t\tif (autoMIPMAP) {\r\n\t\t\tglGenerateMipmap(GL_TEXTURE_2D_ARRAY);\r\n\t\t}\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::sendMipArray(const std::vector<std::vector<ImageType>>& images) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, m_Handle);\r\n\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\r\n\t\tassert(m_numLODs == images.size());\r\n\t\tfor (int lid = 0; lid < int(images.size()); ++lid) {\r\n\r\n\t\t\tassert(m_Depth == images[lid].size());\r\n\r\n\t\t\t// Make sure all images have the same size.\r\n\t\t\tconst uint dW = m_W / (1 << lid);\r\n\t\t\tconst uint dH = m_H / (1 << lid);\r\n\t\t\tstd::vector<ImageType> tmp;\r\n\t\t\tstd::vector<const ImageType*> imagesPtrToSend = applyFlipAndResize(images[lid], tmp, dW, dH);\r\n\r\n\t\t\tfor (int im = 0; im < (int)m_Depth; ++im) {\r\n\t\t\t\tglTexSubImage3D(GL_TEXTURE_2D_ARRAY,\r\n\t\t\t\t\tlid,\r\n\t\t\t\t\t0, 0, im,\r\n\t\t\t\t\tdW,\r\n\t\t\t\t\tdH,\r\n\t\t\t\t\t1, // one slice at a time\r\n\t\t\t\t\tImgTypeInfo::format,\r\n\t\t\t\t\tImgTypeInfo::type,\r\n\t\t\t\t\tImgTypeInfo::data(*imagesPtrToSend[im])\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// No auto mipmap when specifying the mips.\r\n\t\tm_Flags &= ~SIBR_GPU_AUTOGEN_MIPMAP;\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tstd::vector<const ImageType*> Texture2DArray<T_Type, T_NumComp>::applyFlipAndResize(\r\n\t\tconst std::vector<ImageType>& images,\r\n\t\tstd::vector<ImageType>& tmp, uint tw, uint th,\r\n\t\tconst std::vector<int>& slices)\r\n\t{\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tstd::vector<const ImageType*> imagesPtrToSend(images.size());\r\n\t\ttmp.resize(images.size());\r\n\r\n\t\tbool flip = m_Flags & SIBR_FLIP_TEXTURE;\r\n\t\t//#pragma omp parallel for // Disabled due to performance reasons when live-updating slices.\r\n\t\tfor (int slice_id = 0; slice_id < (int)slices.size(); ++slice_id) {\r\n\t\t\tint im = slices[slice_id];\r\n\r\n\t\t\tbool resize = !(tw == ImgTypeInfo::width(images[im]) && th == ImgTypeInfo::height(images[im]));\r\n\t\t\tif (!flip && !resize) {\r\n\t\t\t\timagesPtrToSend[im] = &images[im];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (resize) {\r\n\t\t\t\t\ttmp[im] = ImgTypeInfo::resize(images[im], tw, th);\r\n\t\t\t\t}\r\n\t\t\t\tif (flip) {\r\n\t\t\t\t\ttmp[im] = ImgTypeInfo::flip(resize ? tmp[im] : images[im]);\r\n\t\t\t\t}\r\n\t\t\t\timagesPtrToSend[im] = &tmp[im];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn imagesPtrToSend;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\ttemplate<typename ImageType>\r\n\tstd::vector<const ImageType*> Texture2DArray<T_Type, T_NumComp>::applyFlipAndResize(\r\n\t\tconst std::vector<ImageType>& images,\r\n\t\tstd::vector<ImageType>& tmp, uint tw, uint th\r\n\t) {\r\n\t\tstd::vector<int> slices(m_Depth);\r\n\t\tfor (int i = 0; i < (int)m_Depth; ++i) {\r\n\t\t\tslices[i] = i;\r\n\t\t}\r\n\t\treturn applyFlipAndResize(images, tmp, tw, th, slices);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::sendRTarray(const std::vector<typename PixelRT::Ptr>& RTs) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, m_Handle);\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\t\tfor (int im = 0; im < (int)m_Depth; ++im) {\r\n\t\t\t// Set correct RT as read-framebuffer.\r\n\r\n\t\t\tRTs[im]->bind();\r\n\t\t\tglCopyTexSubImage3D(GL_TEXTURE_2D_ARRAY,\r\n\t\t\t\t0,\r\n\t\t\t\t0, 0, im,\r\n\t\t\t\t0, 0,\r\n\t\t\t\tm_W,\r\n\t\t\t\tm_H\r\n\t\t\t);\r\n\t\t\tRTs[im]->unbind();\r\n\t\t}\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createFromImages(const std::vector<ImageType>& images, uint flags) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\tfor (const auto& img : images) {\r\n\t\t\tmaxSize = maxSize.cwiseMax(sibr::Vector2u(ImgTypeInfo::width(img), ImgTypeInfo::height(img)));\r\n\t\t}\r\n\t\tcreateFromImages(images, maxSize[0], maxSize[1], flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createFromImages(const std::vector<ImageType>& images, uint w, uint h, uint flags) {\r\n\t\tm_W = w;\r\n\t\tm_H = h;\r\n\t\tm_Depth = (uint)images.size();\r\n\t\tm_Flags = flags;\r\n\t\tcreateArray();\r\n\t\tsendArray(images);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createCompressedFromImages(const std::vector<ImageType>& images, uint compression, uint flags) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\tfor (const auto& img : images) {\r\n\t\t\tmaxSize = maxSize.cwiseMax(sibr::Vector2u(ImgTypeInfo::width(img), ImgTypeInfo::height(img)));\r\n\t\t}\r\n\t\tcreateCompressedFromImages(images, maxSize[0], maxSize[1], compression, flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createCompressedFromImages(const std::vector<ImageType>& images, uint w, uint h, uint compression, uint flags) {\r\n\t\tm_W = w;\r\n\t\tm_H = h;\r\n\t\tm_Depth = (uint)images.size();\r\n\t\tm_Flags = flags;\r\n\t\tcreateArray(compression);\r\n\t\tsendArray(images);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createFromImages(const std::vector<std::vector<ImageType>>& images, uint flags) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\tfor (const auto& img : images[0]) {\r\n\t\t\tmaxSize = maxSize.cwiseMax(sibr::Vector2u(ImgTypeInfo::width(img), ImgTypeInfo::height(img)));\r\n\t\t}\r\n\t\tcreateFromImages(images, maxSize[0], maxSize[1], flags);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createFromImages(const std::vector<std::vector<ImageType>>& images, uint w, uint h, uint flags) {\r\n\t\tm_W = w;\r\n\t\tm_H = h;\r\n\t\tm_Depth = uint(images[0].size());\r\n\t\tm_Flags = flags & ~SIBR_GPU_AUTOGEN_MIPMAP;\r\n\t\tm_numLODs = uint(images.size());\r\n\t\tcreateArray();\r\n\r\n\t\tsendMipArray(images);\r\n\t}\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp> template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::updateFromImages(const std::vector<ImageType>& images) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\tfor (const auto& img : images) {\r\n\t\t\tmaxSize = maxSize.cwiseMax(sibr::Vector2u(ImgTypeInfo::width(img), ImgTypeInfo::height(img)));\r\n\t\t}\r\n\t\tif (images.size() == m_Depth && m_W == maxSize[0] && m_H == maxSize[1]) {\r\n\t\t\tsendArray(images);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcreateFromImages(images, m_Flags);\r\n\t\t}\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>  template<typename ImageType>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::updateSlices(const std::vector<ImageType>& images, const std::vector<int>& slices) {\r\n\t\tusing ImgTypeInfo = GLTexFormat<ImageType, T_Type, T_NumComp>;\r\n\r\n\t\tint numSlices = (int)slices.size();\r\n\t\tif (numSlices == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\tfor (int i = 0; i < numSlices; ++i) {\r\n\t\t\tmaxSize = maxSize.cwiseMax(sibr::Vector2u(ImgTypeInfo::width(images[slices[i]]), ImgTypeInfo::height(images[slices[i]])));\r\n\t\t}\r\n\t\tif (m_W != maxSize[0] || m_H != maxSize[1]) {\r\n\t\t\tm_W = maxSize[0];\r\n\t\t\tm_H = maxSize[1];\r\n\t\t}\r\n\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, m_Handle);\r\n\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\r\n\t\tstd::vector<ImageType> tmp;\r\n\t\tstd::vector<const ImageType*> imagesPtrToSend = applyFlipAndResize(images, tmp, m_W, m_H, slices);\r\n\r\n\t\tfor (int i = 0; i < numSlices; ++i) {\r\n\t\t\tglTexSubImage3D(GL_TEXTURE_2D_ARRAY,\r\n\t\t\t\t0,\r\n\t\t\t\t0, 0, slices[i],\r\n\t\t\t\tm_W,\r\n\t\t\t\tm_H,\r\n\t\t\t\t1, // one slice at a time\r\n\t\t\t\tImgTypeInfo::format,\r\n\t\t\t\tImgTypeInfo::type,\r\n\t\t\t\tImgTypeInfo::data(*imagesPtrToSend[slices[i]])\r\n\t\t\t);\r\n\t\t}\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid Texture2DArray<T_Type, T_NumComp>::createFromRTs(const std::vector<typename PixelRT::Ptr>& RTs, uint flags) {\r\n\t\tm_W = 0;\r\n\t\tm_H = 0;\r\n\t\tfor (const auto& RT : RTs) {\r\n\t\t\tm_W = (std::max)(m_W, RT->w());\r\n\t\t\tm_H = (std::max)(m_H, RT->h());\r\n\t\t}\r\n\t\tm_Depth = (uint)RTs.size();\r\n\t\tm_Flags = flags;\r\n\t\tcreateArray();\r\n\t\tsendRTarray(RTs);\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTexture2DArray<T_Type, T_NumComp>::~Texture2DArray(void) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglDeleteTextures(1, &m_Handle);\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tGLuint Texture2DArray<T_Type, T_NumComp>::handle(void) const { return m_Handle; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint Texture2DArray<T_Type, T_NumComp>::w(void) const { return m_W; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint Texture2DArray<T_Type, T_NumComp>::h(void) const { return m_H; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint Texture2DArray<T_Type, T_NumComp>::depth(void) const { return m_Depth; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint Texture2DArray<T_Type, T_NumComp>::numLODs(void) const { return m_numLODs; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tVector4f\tTexture2DArray<T_Type, T_NumComp>::readBackPixel(int i, int x, int y, uint lod) const {\r\n\t\tVector4f out;\r\n//#define HEADLESS\r\n#ifdef HEADLESS\r\n\t\tSIBR_ERR << \"HEADLESS -- No support for readBackPixel\" << std::endl;\r\n#else\r\n\t\tglGetTextureSubImage(handle(),\r\n\t\t\tlod, x, y, i, 1, 1, 1,\r\n\t\t\tGL_RGBA, GL_FLOAT, 4 * sizeof(float), out.data()\r\n\t\t);\r\n#endif\r\n\t\tCHECK_GL_ERROR;\r\n\t\tfor (uint c = T_NumComp; c < 4; ++c) {\r\n\t\t\tout[c] = 0;\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\r\n\t// ----DEFINITIONS TextureCubeMap --------------------------------------------------\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTextureCubeMap<T_Type, T_NumComp>::TextureCubeMap(void) {}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTextureCubeMap<T_Type, T_NumComp>::TextureCubeMap(const uint w, const uint h, uint flags) {\r\n\t\tm_W = w;\r\n\t\tm_H = h;\r\n\t\tm_Flags = flags;\r\n\t\tcreateCubeMap();\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTextureCubeMap<T_Type, T_NumComp>::TextureCubeMap(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\tconst PixelImage& zpos, const PixelImage& zneg, uint flags) {\r\n\t\tm_Flags = flags;\r\n\t\tcreateFromImages(xpos, xneg, ypos, yneg, zpos, zneg, flags);\r\n\t}\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid TextureCubeMap<T_Type, T_NumComp>::createCubeMap() {\r\n\r\n\t\t// We enable seamless junctions between cubemap faces.\r\n\t\tstatic bool enableStates = false;\r\n\t\tif (enableStates == false)\r\n\t\t{\r\n\t\t\tglEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);\r\n\t\t\tenableStates = true;\r\n\t\t}\r\n\t\tCHECK_GL_ERROR;\r\n\r\n\t\tglGenTextures(1, &m_Handle);\r\n\t\tglBindTexture(GL_TEXTURE_CUBE_MAP, m_Handle);\r\n\r\n\t\tif (m_Flags & SIBR_GPU_LINEAR_SAMPLING) {\r\n\t\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r\n\t\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r\n\t\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r\n\t\t}\r\n\r\n\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\r\n\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\r\n\t\tglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);\r\n\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid TextureCubeMap<T_Type, T_NumComp>::sendCubeMap(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\tconst PixelImage& zpos, const PixelImage& zneg) {\r\n\t\tCHECK_GL_ERROR;\r\n\r\n\t\tif (m_Flags & SIBR_GPU_INTEGER) {\r\n\t\t\tif (GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_internal_format < 0) {\r\n\t\t\t\tthrow std::runtime_error(\"Texture format does not support integer mapping\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Handle flipping.\r\n\t\tconst PixelImage* sendedXpos = &xpos;\r\n\t\tconst PixelImage* sendedYpos = &ypos;\r\n\t\tconst PixelImage* sendedZpos = &zpos;\r\n\t\tconst PixelImage* sendedXneg = &xneg;\r\n\t\tconst PixelImage* sendedYneg = &yneg;\r\n\t\tconst PixelImage* sendedZneg = &zneg;\r\n\r\n\t\tPixelImage flippedXpos, flippedYpos, flippedZpos;\r\n\t\tPixelImage flippedXneg, flippedYneg, flippedZneg;\r\n\r\n\t\t// ...\r\n\t\tif (m_Flags & SIBR_FLIP_TEXTURE) {\r\n\t\t\tflippedXpos = xpos.clone();\r\n\t\t\tflippedXpos.flipH();\r\n\t\t\tsendedXpos = &flippedXpos;\r\n\r\n\t\t\tflippedYpos = ypos.clone();\r\n\t\t\tflippedYpos.flipH();\r\n\t\t\tsendedYpos = &flippedYpos;\r\n\r\n\t\t\tflippedZpos = zpos.clone();\r\n\t\t\tflippedZpos.flipH();\r\n\t\t\tsendedZpos = &flippedZpos;\r\n\r\n\t\t\tflippedXneg = xneg.clone();\r\n\t\t\tflippedXneg.flipH();\r\n\t\t\tsendedXneg = &flippedXneg;\r\n\r\n\t\t\tflippedYneg = yneg.clone();\r\n\t\t\tflippedYneg.flipH();\r\n\t\t\tsendedYneg = &flippedYneg;\r\n\r\n\t\t\tflippedZneg = zneg.clone();\r\n\t\t\tflippedZneg.flipH();\r\n\t\t\tsendedZneg = &flippedZneg;\r\n\t\t}\r\n\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\r\n\t\tglBindTexture(GL_TEXTURE_CUBE_MAP, m_Handle);\r\n\r\n\t\tconst auto tinternal_format = (m_Flags & SIBR_GPU_INTEGER)\r\n\t\t\t? GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_internal_format\r\n\t\t\t: GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::internal_format;\r\n\t\tconst auto tformat = (m_Flags & SIBR_GPU_INTEGER)\r\n\t\t\t? GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::int_format\r\n\t\t\t: GLFormat<typename PixelFormat::Type, PixelFormat::NumComp>::format;\r\n\t\tconst auto ttype = GLType<typename PixelFormat::Type>::type;\r\n\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, tinternal_format, xpos.w(), xpos.h(), 0, tformat, ttype, xpos.data());\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, tinternal_format, xneg.w(), xneg.h(), 0, tformat, ttype, xneg.data());\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, tinternal_format, ypos.w(), ypos.h(), 0, tformat, ttype, ypos.data());\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, tinternal_format, yneg.w(), yneg.h(), 0, tformat, ttype, yneg.data());\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, tinternal_format, zpos.w(), zpos.h(), 0, tformat, ttype, zpos.data());\r\n\t\tglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, tinternal_format, zneg.w(), zneg.h(), 0, tformat, ttype, zneg.data());\r\n\r\n\r\n\t\tbool autoMIPMAP = ((m_Flags & SIBR_GPU_AUTOGEN_MIPMAP) != 0);\r\n\t\tif (autoMIPMAP) {\r\n\t\t\tglGenerateMipmap(GL_TEXTURE_CUBE_MAP);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tvoid TextureCubeMap<T_Type, T_NumComp>::createFromImages(const PixelImage& xpos, const PixelImage& xneg,\r\n\t\tconst PixelImage& ypos, const PixelImage& yneg,\r\n\t\tconst PixelImage& zpos, const PixelImage& zneg, uint flags) {\r\n\t\tconst int numMipMap = 1;\r\n\t\tsibr::Vector2u maxSize(0, 0);\r\n\t\t/// \\todo TODO: check if the six images have the same size.\r\n\t\tm_W = xpos.w();\r\n\t\tm_H = xpos.h();\r\n\t\tm_Flags = flags;\r\n\t\tcreateCubeMap();\r\n\t\tsendCubeMap(xpos, xneg, ypos, yneg, zpos, zneg);\r\n\t}\r\n\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tTextureCubeMap<T_Type, T_NumComp>::~TextureCubeMap(void) {\r\n\t\tCHECK_GL_ERROR;\r\n\t\tglDeleteTextures(1, &m_Handle);\r\n\t\tCHECK_GL_ERROR;\r\n\t}\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tGLuint TextureCubeMap<T_Type, T_NumComp>::handle(void) const { return m_Handle; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint TextureCubeMap<T_Type, T_NumComp>::w(void) const { return m_H; }\r\n\r\n\ttemplate<typename T_Type, unsigned int T_NumComp>\r\n\tuint TextureCubeMap<T_Type, T_NumComp>::h(void) const { return m_W; }\r\n\r\n} // namespace sibr\r\n\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Types.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include <type_traits>\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n# include \"core/graphics/Image.hpp\"\r\n\r\n\r\n# define SIBR_GPU_AUTOGEN_MIPMAP\t\t(1<<0)\r\n# define SIBR_GPU_MULSTISAMPLE\t\t\t(1<<1)\r\n# define SIBR_GPU_LINEAR_SAMPLING\t\t(1<<2)\r\n# define SIBR_GPU_INTEGER\t\t\t\t(1<<4)\r\n# define SIBR_MSAA4X\t\t\t\t\t(1<<5)\r\n# define SIBR_MSAA8X\t\t\t\t\t(1<<6)\r\n# define SIBR_MSAA16X\t\t\t\t\t(1<<7)\r\n# define SIBR_MSAA32X\t\t\t\t\t(1<<8)\r\n# define SIBR_STENCIL_BUFFER\t\t\t(1<<9)\r\n# define SIBR_CLAMP_UVS\t\t\t\t\t(1<<10)\r\n# define SIBR_CLAMP_TO_BORDER\t\t\t(1<<11)\r\n# define SIBR_FLIP_TEXTURE\t\t\t\t(1<<12)\r\n\r\n# define SIBR_COMPILE_FORCE_SAMPLING_LINEAR\t0\r\n\r\nnamespace sibr{\r\n\r\n\r\n\t/**\r\n\t* Contain type utilities to match C, cv and sibr types to OpenGL formats.\r\n\t* \\addtogroup sibr_graphics\r\n\t* @{\r\n\t*/\r\n\r\n\t// --- TYPE HELPERS ---------------------------------------------------\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <typename T> class GLType;\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <> class GLType<unsigned char> {\r\n\tpublic:\r\n\t\tenum { type = GL_UNSIGNED_BYTE };\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <> class GLType<unsigned short> {\r\n\tpublic:\r\n\t\tenum { type = GL_UNSIGNED_SHORT };\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <> class GLType<short> {\r\n\tpublic:\r\n\t\tenum { type = GL_SHORT };\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <> class GLType<float> {\r\n\tpublic:\r\n\t\tenum { type = GL_FLOAT };\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a C type. */\r\n\ttemplate <> class GLType<int> {\r\n\tpublic:\r\n\t\tenum { type = GL_INT };\r\n\t};\r\n\r\n\t// --- FORMAT HELPERS -------------------------------------------------------\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <typename T_Type,int T_Num> class GLFormat;\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned char,1> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_R8,\r\n\t\t\tformat = GL_RED,\r\n\t\t\tint_internal_format = GL_R8UI,\r\n\t\t\tint_format = GL_RED_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned char, 2> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RG8,\r\n\t\t\tformat = GL_RG,\r\n\t\t\tint_internal_format = GL_RG8UI,\r\n\t\t\tint_format = GL_RG_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned char,3> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGB8,\r\n\t\t\tformat = GL_RGB,\r\n\t\t\tint_internal_format = GL_RGB8UI,\r\n\t\t\tint_format = GL_RGB_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned char,4> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGBA8,\r\n\t\t\tformat = GL_RGBA,\r\n\t\t\tint_internal_format = GL_RGBA8UI,\r\n\t\t\tint_format = GL_RGBA_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned short,1> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_R16,\r\n\t\t\tformat = GL_R,\r\n\t\t\tint_internal_format = GL_R16UI,\r\n\t\t\tint_format = GL_RED_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned short, 2> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RG16,\r\n\t\t\tformat = GL_RG,\r\n\t\t\tint_internal_format = GL_RG16UI,\r\n\t\t\tint_format = GL_RG_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned short,3> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGB16,\r\n\t\t\tformat = GL_RGB,\r\n\t\t\tint_internal_format = GL_RGB16UI,\r\n\t\t\tint_format = GL_RGB_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<unsigned short,4> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGBA16,\r\n\t\t\tformat = GL_RGBA,\r\n\t\t\tint_internal_format = GL_RGBA16UI,\r\n\t\t\tint_format = GL_RGBA_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<int,1> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_R32I,\r\n\t\t\tformat = GL_RED_INTEGER,\r\n\t\t\tint_internal_format = GL_R32I,\r\n\t\t\tint_format = GL_RED_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<int, 2> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RG32I,\r\n\t\t\tformat = GL_RG_INTEGER,\r\n\t\t\tint_internal_format = GL_RG32I,\r\n\t\t\tint_format = GL_RG_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<int, 3> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGB32I,\r\n\t\t\tformat = GL_RGB_INTEGER,\r\n\t\t\tint_internal_format = GL_RGB32I,\r\n\t\t\tint_format = GL_RGB_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<int, 4> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGBA32I,\r\n\t\t\tformat = GL_RGBA_INTEGER,\r\n\t\t\tint_internal_format = GL_RGBA32I,\r\n\t\t\tint_format = GL_RGBA_INTEGER,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<float,1> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_R32F,\r\n\t\t\tformat = GL_RED,\r\n\t\t\tint_internal_format = -1,\r\n\t\t\tint_format = -1,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<float, 2> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RG32F,\r\n\t\t\tformat = GL_RG,\r\n\t\t\tint_internal_format = -1,\r\n\t\t\tint_format = -1,\r\n\t\t\tisdepth = 0\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<float,3> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGB32F,\r\n\t\t\tformat = GL_RGB,\r\n\t\t\tint_internal_format = -1,\r\n\t\t\tint_format = -1,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a C type and number of components. */\r\n\ttemplate <> class GLFormat<float,4> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GL_RGBA32F,\r\n\t\t\tformat = GL_RGBA,\r\n\t\t\tint_internal_format = -1,\r\n\t\t\tint_format = -1,\r\n\t\t\tisdepth = 0\r\n\t};\r\n\t};\r\n\r\n\t// Depth texture format (unsupported)\r\n\r\n\t//template <> class GLFormat<depth32,1> {\r\n\t//public:\r\n\t//\tenum {\r\n\t//\t\tinternal_format     = GL_DEPTH_COMPONENT32F,\r\n\t//\t\tformat              = GL_DEPTH_COMPONENT,\r\n\t//\t\tint_internal_format = -1,\r\n\t//\t\tint_format          = -1,\r\n\t//\t\tisdepth             =  1};\r\n\t//};\r\n\r\n\t// --- MAT HELPERS -----------------------\r\n\r\n\t/** Helper building the correspondence between a GL format and a cv::Mat */\r\n\ttemplate <typename T_Type, int T_Num> class GLFormatCVmat;\r\n\r\n\t/** Helper building the correspondence between a GL format and a cv::Mat */\r\n\ttemplate <> class GLFormatCVmat<unsigned char, 1> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GLFormat<uchar, 1>::internal_format,\r\n\t\t\tformat = GLFormat<uchar, 1>::format,\r\n\t\t\tint_internal_format = GLFormat<uchar, 1>::int_internal_format,\r\n\t\t\tint_format = GLFormat<uchar, 1>::int_format,\r\n\t\t\tisdepth = GLFormat<uchar, 1>::isdepth\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a cv::Mat */\r\n\ttemplate <> class GLFormatCVmat<unsigned char, 3> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GLFormat<uchar,3>::internal_format,\r\n\t\t\tformat = GL_BGR,\r\n\t\t\tint_internal_format = GLFormat<uchar, 3>::int_internal_format,\r\n\t\t\tint_format = GLFormat<uchar, 3>::int_format,\r\n\t\t\tisdepth = GLFormat<uchar, 3>::isdepth\r\n\t\t};\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL format and a cv::Mat */\r\n\ttemplate <> class GLFormatCVmat<unsigned char, 4> {\r\n\tpublic:\r\n\t\tenum {\r\n\t\t\tinternal_format = GLFormat<uchar, 4>::internal_format,\r\n\t\t\tformat = GL_BGRA,\r\n\t\t\tint_internal_format = GLFormat<uchar, 4>::int_internal_format,\r\n\t\t\tint_format = GLFormat<uchar, 4>::int_format,\r\n\t\t\tisdepth = GLFormat<uchar, 4>::isdepth\r\n\t\t};\r\n\t};\r\n\t\r\n\t/** Helper building the correspondence between a GL type and a cv::Mat depth. */\r\n\ttemplate<typename T> struct OpenCVdepth;\r\n\r\n\t/** Helper building the correspondence between a GL type and a cv::Mat depth. */\r\n\ttemplate<> struct OpenCVdepth<uchar> {\r\n\t\tstatic const uint value = CV_8U;\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a cv::Mat depth. */\r\n\ttemplate<> struct OpenCVdepth<float> {\r\n\t\tstatic const uint value = CV_32F;\r\n\t};\r\n\r\n\t/** Helper building the correspondence between a GL type and a cv::Mat depth. */\r\n\ttemplate<> struct OpenCVdepth<double> {\r\n\t\tstatic const uint value = CV_64F;\r\n\t};\r\n\r\n\t/** Helper to create a cv::Mat type from its depth and number of components. */\r\n\ttemplate<typename T, uint N> constexpr uint getOpenCVtype = CV_MAKE_TYPE(OpenCVdepth<T>::value, N);\r\n\t\r\n\t/** Helper to create a one-channel cv::Mat from its depth. */\r\n\ttemplate<typename T> constexpr uint getOpenCVtypeSingleChannel = getOpenCVtype<T, 1>;\r\n\t\r\n\t/** Helper class to specify for which image type we can find a valid texture format. */\r\n\ttemplate<typename ImageType> struct ValidGLTexFormat {\r\n\t\tstatic const bool value = false;\r\n\t};\r\n\r\n\t/** Helper class to specify for which image type we can find a valid texture format. */\r\n\ttemplate<typename ScalarType, uint N> struct ValidGLTexFormat<sibr::Image<ScalarType, N>> {\r\n\t\tstatic const bool value = true;\r\n\t};\r\n\r\n\t/** Helper class to specify for which image type we can find a valid texture format. */\r\n\ttemplate<> struct ValidGLTexFormat<cv::Mat> {\r\n\t\tstatic const bool value = true;\r\n\t};\r\n\r\n\t/** Helper class to provide, from a generic image type, all the information needed for OpenGL textures\r\n\t\tRight now it can work with all sibr::Image and with cv::Mat (3U8 only)\r\n\t\tYou can add more using explicit template instanciation to specify both\r\n\t\tValidGLTexFormat and the following GLTexFormat properties.\r\n\t\t*/\r\n\ttemplate<typename ImageType, typename ScalarType = typename ImageType::Type, uint N = ImageType::e_NumComp> struct GLTexFormat {\r\n\t\tstatic_assert(ValidGLTexFormat<ImageType>::value, \"ImageWrapper currently only specialized for sibr::Image and cv::Mat \");\r\n\r\n\t\t/** Flip an image.\r\n\t\t\\param img image to flip\r\n\t\t\\return the fliped image.\r\n\t\t*/\r\n\t\tstatic ImageType flip(const ImageType& img);\r\n\r\n\t\t/** Resize an image.\r\n\t\t\\param img image to resize\r\n\t\t\\param w new width\r\n\t\t\\param h new height\r\n\t\t\\return the resize image.\r\n\t\t*/\r\n\t\tstatic ImageType resize(const ImageType& img, uint w, uint h);\r\n\r\n\t\t/** Get an image width.\r\n\t\t\\param img the image\r\n\t\t\\return the width\r\n\t\t*/\r\n\t\tstatic uint width(const ImageType& img);\r\n\r\n\t\t/** Get an image height.\r\n\t\t\\param img the image\r\n\t\t\\return the height\r\n\t\t*/\r\n\t\tstatic uint height(const ImageType& img);\r\n\r\n\t\t/** Get an image data.\r\n\t\t\\param img the image\r\n\t\t\\return pointer to the beginning of the data.\r\n\t\t*/\r\n\t\tstatic const void* data(const ImageType& img);\r\n\r\n\t\tstatic const uint internal_format;\t\t///< Internal GL format.\r\n\t\tstatic const uint format;\t\t\t\t///< Generic GL format.\r\n\t\tstatic const uint int_internal_format;\t///< Internal GL format for integer textures.\r\n\t\tstatic const uint int_format;\t\t\t///< Generic GL format for integer textures.\r\n\t\tstatic const uint isdepth;\t\t\t\t///< Is it a depth format.\r\n\t\tstatic const uint type;\t\t\t\t\t ///< The component GL type.\r\n\t};\r\n\r\n\t/** Helper class to provide, for an sibr::Image, all the information needed for OpenGL textures. */\r\n\ttemplate<typename ScalarType, uint N > struct GLTexFormat<sibr::Image<ScalarType, N>, ScalarType, N > {\r\n\t\tusing ImageType = sibr::Image<ScalarType, N>;\r\n\r\n\t\t/** \\copydoc GLTexFormat::flip */\r\n\t\tstatic ImageType flip(const ImageType& img) {\r\n\t\t\tImageType temp = img.clone();\r\n\t\t\ttemp.flipH();\r\n\t\t\treturn temp;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::resize */\r\n\t\tstatic ImageType resize(const ImageType& img, uint w, uint h) {\r\n\t\t\treturn img.resized(w, h);\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::width */\r\n\t\tstatic uint width(const ImageType& img) {\r\n\t\t\treturn img.w();\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::height */\r\n\t\tstatic uint height(const ImageType& img) {\r\n\t\t\treturn img.h();\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::data */\r\n\t\tstatic const void* data(const ImageType& img) {\r\n\t\t\treturn img.data();\r\n\t\t}\r\n\r\n\t\tstatic const uint internal_format = GLFormat<ScalarType, N>::internal_format; ///< Internal GL format.\r\n\t\tstatic const uint format = GLFormat<ScalarType, N>::format;  ///< Generic GL format.\r\n\t\tstatic const uint int_internal_format = GLFormat<ScalarType, N>::int_internal_format; ///< Internal GL format for integer textures.\r\n\t\tstatic const uint int_format = GLFormat<ScalarType, N>::int_format;  ///< Generic GL format for integer textures.\r\n\t\tstatic const uint isdepth = GLFormat<ScalarType, N>::isdepth; ///< Is it a depth format.\r\n\t\tstatic const uint type = GLType<ScalarType>::type;  ///< The component GL type.\r\n\t};\r\n\r\n\t/** Helper class to provide, for an sibr::Image::Ptr, all the information needed for OpenGL textures. */\r\n\ttemplate<typename ScalarType, uint N > struct GLTexFormat<ImagePtr<ScalarType, N>, ScalarType, N > {\r\n\t\tusing ImageType = ImagePtr<ScalarType, N>;\r\n\r\n\t\t/** \\copydoc GLTexFormat::flip */\r\n\t\tstatic ImageType flip(const ImageType& img) {\r\n\t\t\tImageType temp = ImageType::fromImg(*img);\r\n\t\t\ttemp->flipH();\r\n\t\t\treturn temp;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::resize */\r\n\t\tstatic ImageType resize(const ImageType& img, uint w, uint h) {\r\n\t\t\treturn ImageType::fromImg(img->resized(w, h));\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::width */\r\n\t\tstatic uint width(const ImageType& img) {\r\n\t\t\treturn img->w();\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::height */\r\n\t\tstatic uint height(const ImageType& img) {\r\n\t\t\treturn img->h();\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::data */\r\n\t\tstatic const void* data(const ImageType& img) {\r\n\t\t\treturn img->data();\r\n\t\t}\r\n\r\n\t\tstatic const uint internal_format = GLFormat<ScalarType, N>::internal_format; ///< Internal GL format.\r\n\t\tstatic const uint format = GLFormat<ScalarType, N>::format;  ///< Generic GL format.\r\n\t\tstatic const uint int_internal_format = GLFormat<ScalarType, N>::int_internal_format; ///< Internal GL format for integer textures.\r\n\t\tstatic const uint int_format = GLFormat<ScalarType, N>::int_format;  ///< Generic GL format for integer textures.\r\n\t\tstatic const uint isdepth = GLFormat<ScalarType, N>::isdepth; ///< Is it a depth format.\r\n\t\tstatic const uint type = GLType<ScalarType>::type;  ///< The component GL type.\r\n\r\n\t};\r\n\r\n\t/** Helper class to provide, for a cv::Mat, all the information needed for OpenGL textures. */\r\n\ttemplate<typename ScalarType, uint N > struct GLTexFormat<cv::Mat, ScalarType, N> {\r\n\t\tstatic_assert(std::is_same_v<ScalarType, uchar> && (N == 3 || N == 4 || N == 1) , \"GLTexFormat with cv::Mat currently only defined for 3U8 or 4U8\");\r\n\r\n\t\t/** \\copydoc GLTexFormat::flip */\r\n\t\tstatic cv::Mat flip(const cv::Mat& img) {\r\n\t\t\tcv::Mat temp;\r\n\t\t\tcv::flip(img, temp, 0); //0 for flipH\r\n\t\t\treturn temp;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::resize */\r\n\t\tstatic cv::Mat resize(const cv::Mat& img, uint w, uint h) {\r\n\t\t\tcv::Mat temp;\r\n\t\t\tcv::resize(img, temp, cv::Size(w, h));\r\n\t\t\treturn temp;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::width */\r\n\t\tstatic uint width(const cv::Mat& img) {\r\n\t\t\treturn img.cols;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::height */\r\n\t\tstatic uint height(const cv::Mat& img) {\r\n\t\t\treturn img.rows;\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::data */\r\n\t\tstatic const void* data(const cv::Mat& img) {\r\n\t\t\treturn img.ptr();\r\n\t\t}\r\n\r\n\t\t/** \\copydoc GLTexFormat::data */\r\n\t\tstatic void* data(cv::Mat& img) {\r\n\t\t\treturn img.ptr();\r\n\t\t}\r\n\r\n\t\t/** \\return the matrix OpenCV type. */\r\n\t\tstatic uint cv_type() {\r\n\t\t\treturn CV_MAKE_TYPE(cv::DataDepth<ScalarType>::value, N);\r\n\t\t}\r\n\r\n\t\tstatic const uint internal_format = GLFormatCVmat<ScalarType, N>::internal_format; ///< Internal GL format.\r\n\t\tstatic const uint format = GLFormatCVmat<ScalarType, N>::format;  ///< Generic GL format.\r\n\t\tstatic const uint int_internal_format = GLFormatCVmat<ScalarType, N>::int_internal_format; ///< Internal GL format for integer textures.\r\n\t\tstatic const uint int_format = GLFormatCVmat<ScalarType, N>::int_format;  ///< Generic GL format for integer textures.\r\n\t\tstatic const uint isdepth = GLFormatCVmat<ScalarType, N>::isdepth; ///< Is it a depth format.\r\n\t\tstatic const uint type = GLType<ScalarType>::type;  ///< The component GL type.\r\n\t};\r\n\r\n\t/** Helper class to provide, for a cv::Mat, all the information needed for OpenGL textures. */\r\n\ttemplate<typename ScalarType, uint N >\r\n\tstruct GLTexFormat<cv::Mat_<cv::Vec<ScalarType, N> >, ScalarType, N>\r\n\t\t: GLTexFormat<cv::Mat, ScalarType, N>\r\n\t{\r\n\t};\r\n\r\n\t/*** @} */\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Utils.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/graphics/Utils.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\r\n\r\n\tcv::Scalar jetColor(float gray) {\r\n\t\tconst sibr::Vector3ub col = jetColor<uchar>(gray);\r\n\t\treturn toOpenCV<uchar, uchar, 3>(col);\r\n\t}\r\n\r\n\tsibr::Vector3ub getLinearColorFromProbaV(double proba) {\r\n\t\tconst double scProba = 3.0 * proba;\r\n\t\tconst unsigned char red = double(sibr::clamp(scProba, 0.0, 1.0)) * 255;\r\n\t\tconst unsigned char green = double(sibr::clamp(scProba - 1, 0.0, 1.0)) * 255;\r\n\t\tconst unsigned char blue = double(sibr::clamp(scProba - 2, 0.0, 1.0)) * 255;\r\n\r\n\t\treturn sibr::Vector3ub(red, green, blue);\r\n\t}\r\n\r\n\tdouble getProbaFromLinearColor(const sibr::Vector3ub & color) {\r\n\t\tconst double red = double(color[0]) / 255.0;\r\n\t\tconst double green = double(color[1]) / 255.0;\r\n\t\tconst double blue = double(color[2]) / 255.0;\r\n\t\treturn (red + green + blue) / 3.0;\r\n\t}\r\n\r\n\tsibr::Vector2d cartesianToSpherical(const sibr::Vector3d & dir)\r\n\t{\r\n\t\tdouble theta = std::acos(dir.z());\r\n\r\n\t\tdouble phi = 0;\r\n\t\tif (dir.x() != 0 && dir.y() != 0) {\r\n\t\t\tphi = std::atan2(dir.y(), dir.x());\r\n\t\t}\r\n\r\n\t\treturn sibr::Vector2d(phi, theta);\r\n\t}\r\n\r\n\tsibr::Vector2d cartesianToSphericalUVs(const sibr::Vector3d & dir)\r\n\t{\r\n\t\tconst sibr::Vector2d angles = cartesianToSpherical(dir);\r\n\t\tconst double & phi = angles[0];\r\n\t\tconst double & theta = angles[1];\r\n\r\n\t\treturn sibr::Vector2d(0.5*(phi / M_PI + 1.0), theta / M_PI);\r\n\t}\r\n\r\n\tfloat sRGB2LinF(float inF) {\r\n\t\tif (inF < 0.04045f) {\r\n\t\t\treturn inF / 12.92f;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn std::pow((inF + 0.055f) / (1.055f), 2.4f);\r\n\t\t}\r\n\t}\r\n\r\n\tfloat lin2sRGBF(float inF) {\r\n\r\n\t\tif (inF < 0.0031308f) {\r\n\t\t\treturn std::max(0.0f, std::min(1.0f, 12.92f*inF));\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn std::max(0.0f, std::min(1.0f, 1.055f*std::pow(inF, 1.0f / 2.4f) - 0.055f));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid sRGB2Lin(sibr::ImageRGB32F& img) {\r\n#pragma omp parallel for\r\n\t\tfor (int j = 0; j < int(img.h()); j++) {\r\n\t\t\tfor (int i = 0; i < int(img.w()); i++) {\r\n\t\t\t\tfor (int c = 0; c < 3; c++) {\r\n\t\t\t\t\timg(i, j)[c] = sRGB2LinF(img(i, j)[c]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid lin2sRGB(sibr::ImageRGB32F& img) {\r\n#pragma omp parallel for\r\n\t\tfor (int j = 0; j < int(img.h()); j++) {\r\n\t\t\tfor (int i = 0; i < int(img.w()); i++) {\r\n\t\t\t\tfor (int c = 0; c < 3; c++) {\r\n\t\t\t\t\timg(i, j)[c] = lin2sRGBF(img(i, j)[c]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Utils.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/graphics/Image.hpp\"\n\n\nnamespace sibr\n{\n\t/**\n\t* \\addtogroup sibr_graphics\n\t* @{\n\t*/\n\n\t/** Generate a random color.\n\t\\return a random RGB triplet\n\t*/\n\ttemplate<typename T_Type>\n\tstatic Eigen::Matrix<T_Type, 3, 1, Eigen::DontAlign> randomColor(){\n\t\t// We just use rand here, we don't need 'proper' PRNG.\n\t\tconst uint8_t r = uint8((std::rand() % 255 + 192) * 0.5f);\n\t\tconst uint8_t g = uint8((std::rand() % 255 + 192) * 0.5f);\n\t\tconst uint8_t b = uint8((std::rand() % 255 + 192) * 0.5f);\n\t\tconst sibr::Vector3ub output(r, g,b);\n\t\treturn output.unaryExpr([](float f) { return f * sibr::opencv::imageTypeRange<T_Type>(); }).template cast<T_Type>();\n\t}\n\n\t/** Generate a color for a given scalar score, using the jet color map.\n\t\\param gray the probability value\n\t\\return the associated jet color.\n\t*/\n\ttemplate<typename T_Type>\n\tstatic Eigen::Matrix<T_Type, 3, 1, Eigen::DontAlign> jetColor(float gray)\n\t{\n\t\tsibr::Vector3f output(1, 1, 1);\n\t\tfloat g = std::min(1.0f, std::max(0.0f, gray));\n\t\tfloat dg = 0.25f;\n\t\tfloat d = 4.0f;\n\t\tif (g < dg) {\n\t\t\toutput.x() = 0.0f; \n\t\t\toutput.y() = d*g;\n\t\t} else if (g < 2.0f*dg) {\n\t\t\toutput.x() = 0.0f; \n\t\t\toutput.z() = 1.0f + d*(dg - g);\n\t\t} else if (g < 3.0f*dg) {\n\t\t\toutput.x() = d*(g - 0.5f); \n\t\t\toutput.z() = 0.0f;\n\t\t} else {\n\t\t\toutput.y() = 1.0f + d*(0.75f - g);  \n\t\t\toutput.z() = 0.0f;\n\t\t}\n\n\t\treturn output.unaryExpr([](float f) { return f * sibr::opencv::imageTypeRange<T_Type>(); }).template cast<T_Type>();\n\t}\n\n\t/** Generate a jet color associated to the input probability, as a 3-channels cv::Scalar.\n\t\\param gray the probability value\n\t\\return the associated jet color.\n\t*/\n\tSIBR_GRAPHICS_EXPORT cv::Scalar jetColor(float gray);\n\n\t/** Generate a color for a given scalar score, using a reversible mapping.\n\t\\param proba the probability value\n\t\\return the associated color\n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::Vector3ub getLinearColorFromProbaV(double proba);\n\n\t/** Convert a color to the associated scalar score, using a reversible mapping.\n\t\\param color the color\n\t\\return the probability value\n\t*/\n\tSIBR_GRAPHICS_EXPORT double getProbaFromLinearColor(const sibr::Vector3ub & color);\n\n\t/** Convert a direction from cartesian to spherical coordinates.\n\t\\param dir a direction in cartesian 3D space\n\t\\return the spherical coordinates [phi,theta] in [-pi,pi]x[0,pi]\n\t\\warning dir is assumed to be normalized\n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::Vector2d cartesianToSpherical(const sibr::Vector3d & dir); \n\n\t/** Convert a direction from cartesian to spherical UVs.\n\t\\param dir a direction in cartesian 3D space\n\t\\return the spherical UVs [u,v] in [0,1]^2\n\t\\warning dir is assumed to be normalized\n\t*/\n\tSIBR_GRAPHICS_EXPORT sibr::Vector2d cartesianToSphericalUVs(const sibr::Vector3d & dir);\n\n\t/**Inplace conversion of float image from sRGB space to linear.\n\t\\param img the image to convert\n\t*/\n\tSIBR_GRAPHICS_EXPORT void sRGB2Lin(sibr::ImageRGB32F& img);\n\n\t/** Inplace conversion of a float image from linear space to sRGB.\n\t\\param img the image to convert\n\t*/\n\tSIBR_GRAPHICS_EXPORT void lin2sRGB(sibr::ImageRGB32F& img);\n\n\t/** Debug helper: wrap a rendering task in an openGL debug group (visible in Renderdoc).\n\t\\param s debug group name\n\t\\param f the task to wrap\n\t\\param args the task arguments\n\t*/\n\ttemplate<typename FunType, typename ...ArgsType>\n\tvoid renderTask(const std::string & s, FunType && f, ArgsType && ... args) {\n\t\tglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, s.c_str());\n\t\tf(args...);\n\t\tglPopDebugGroup();\n\t};\n\n\t/** Interpolate between two values.\n\t\\param A first value\n\t\\param B second value\n\t\\param fac interpolation factor\n\t\\return A+fac*(B-A)\n\t*/\n\tinline float lerp( float A, float B, float fac ) {\n\t\treturn A*(1.f-fac)+B*fac;\n\t}\n\n\t/** Express a value as the linear combination of two other values.\n\t\\param from first value\n\t\\param to second value\n\t\\param current value to express as a combination\n\t\\return the interpolation factor\n\t*/\n\tinline float inverseLerp( float from, float to, float current ) {\n\t\treturn (current - from)/(to - from);\n\t}\n\n\t/*** @} */\n\n} // namespace sibr\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Viewport.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/graphics/Window.hpp\"\r\n#include \"core/graphics/Viewport.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\tvoid\t\t\tViewport::bind( uint screenWidth, uint screenHeight ) const\r\n\t{\r\n\t\tglViewport(\r\n\t\t\t(GLint)(left()*screenWidth), (GLint)(top()*screenHeight),\r\n\t\t\t(GLsizei)(width()*screenWidth), (GLsizei)(height()*screenHeight));\r\n\t}\r\n\r\n\tvoid\t\t\tViewport::clear( const Vector3f& bgColor ) const\r\n\t{\r\n\t\t//if (width() < 1.f)\r\n\t\t//\treturn;\r\n\r\n\t\tGLint l = (GLint)finalLeft();\r\n\t\tGLint t = (GLint)finalTop();\r\n\t\tGLsizei w = (GLsizei)finalWidth();\r\n\t\tGLsizei h = (GLsizei)finalHeight();\r\n\r\n\t\tglViewport(l, t, w, h);\r\n\t\tglScissor(l, t, w, h);\r\n\t\tglEnable(GL_SCISSOR_TEST);\r\n\t\tglClearColor(bgColor[0], bgColor[1], bgColor[2], 0.f);\r\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r\n\t\tglDisable(GL_SCISSOR_TEST);\r\n\t\t\r\n\t\tglViewport(l, t, w, h);\r\n\t}\r\n\r\n\tvoid\t\t\tViewport::bind( void ) const\r\n\t{\r\n\t\t//assert((_parent != nullptr || width() > 1.f) \r\n\t\t//\t&& \"Too small viewport detected (Set a parent viewport from a window using Viewport::parent(...) and Window::viewport()\");\r\n\r\n\t\tglViewport(\r\n\t\t\t(GLint)(finalLeft()), (GLint)(finalTop()),\r\n\t\t\t(GLsizei)(finalWidth()), (GLsizei)(finalHeight()));\r\n\t}\r\n\t\r\n\tbool\tViewport::contains( float x, float y ) const\r\n\t{\r\n\t\treturn (x > finalLeft() && x < finalRight() && y > finalTop() && y < finalBottom());\r\n\t}\r\n\t\r\n\tbool\tViewport::contains( int x, int y ) const\r\n\t{\r\n\t\treturn (x > (int)finalLeft() && x < (int)finalRight() && y > (int)finalTop() && y < (int)finalBottom());\r\n\t}\r\n\r\n\tbool Viewport::contains(const Vector2f & xy) const\r\n\t{\r\n\t\treturn contains(xy.x(), xy.y());\r\n\t}\r\n\r\n\tbool Viewport::isEmpty() const {\r\n\t\treturn width() == 0.0 && height() == 0.0;\r\n\t}\r\n\r\n\tVector2f Viewport::pixAt(const Vector2f & uv) const {\r\n\t\treturn uv.cwiseProduct(finalSize()) + finalTopLeft();\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Viewport.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Config.hpp\"\n# include \"core/system/Vector.hpp\"\n\nnamespace sibr\n{\n\n\t/** Represent an on-screen viewport using normalized coordinates, which can be nested into another viewport.\n\t* \\ingroup sibr_graphics\n\t*/\n\tclass SIBR_GRAPHICS_EXPORT Viewport\n\t{\n\tpublic:\n\n\t\t/** Default constructor: unit viewport. */\n\t\tViewport( void ):\n\t\t\t_parent(nullptr),\n\t\t\t_left(0.f), _top(0.f), _right(1.f), _bottom(1.f) { }\n\n\t\t/** Constructor from extents.\n\t\t *\\param left left extent\n\t\t *\\param top top extent\n\t\t *\\param right right extent\n\t\t *\\param bottom bottom extent\n\t\t */\n\t\tViewport( float left, float top, float right, float bottom ) :\n\t\t\t_parent(nullptr),\n\t\t\t_left(left), _top(top), _right(right), _bottom(bottom) { }\n\n\t\t/** Constructor from a parent and relative extents.\n\t\t *\\param parent_ the parent viewport\n\t\t *\\param left left relative extent\n\t\t *\\param top top relative extent\n\t\t *\\param right right relative extent\n\t\t *\\param bottom bottom relative extent\n\t\t */\n\t\tViewport( const Viewport* parent_, float left, float top, float right, float bottom ) :\n\t\t\t_left(left), _top(top), _right(right), _bottom(bottom) { parent(parent_); }\n\n\t\t/** Constructor from a parent and relative extents.\n\t\t *\\param parent_ the parent viewport\n\t\t *\\param left left relative extent\n\t\t *\\param top top relative extent\n\t\t *\\param right right relative extent\n\t\t *\\param bottom bottom relative extent\n\t\t */\n\t\tViewport(const Viewport & parent_, float left, float top, float right, float bottom) :\n\t\t\tViewport(&parent_, left, top, right, bottom) {\n\t\t\t*this = Viewport(finalLeft(), finalTop(), finalRight(), finalBottom());\n\t\t}\n\n\t\t/** \\return the relative left extent. */\n\t\tinline float\tleft( void ) const { return _left; }\n\t\t/** \\return the relative top extent. */\n\t\tinline float\ttop( void ) const { return _top; }\n\t\t/** \\return the relative right extent. */\n\t\tinline float\tright( void ) const { return _right; }\n\t\t/** \\return the relative bottom extent. */\n\t\tinline float\tbottom( void ) const { return _bottom; }\n\n\t\t/** \\return the relative viewport width */\n\t\tinline float\twidth( void ) const { return _right-_left; }\n\t\t/** \\return the relative viewport height */\n\t\tinline float\theight( void ) const { return _bottom-_top; }\n\n\t\t/** \\return the absolute left extent. */\n\t\tfloat\tfinalLeft( void ) const;\n\t\t/** \\return the absolute top extent. */\n\t\tfloat\tfinalTop( void ) const;\n\t\t/** \\return the absolute right extent. */\n\t\tfloat\tfinalRight( void ) const;\n\t\t/** \\return the absolute bottom extent. */\n\t\tfloat\tfinalBottom( void ) const;\n\n\t\t/** \\return the absolute viewport width. */\n\t\tfloat\tfinalWidth( void ) const;\n\t\t/** \\return the absolute viewport height. */\n\t\tfloat\tfinalHeight( void ) const;\n\n\t\t/** \\return the absolute viewport size. */\n\t\tsibr::Vector2f finalSize() const;\n\t\t/** \\return the absolute cooridnates of the top left corner. */\n\t\tVector2f finalTopLeft() const;\n\n\n\t\t/** Compute the absolute pixel coordinates based on relative normalized coordinates.\n\t\t *\\param uv the normalized UVs \n\t\t *\\return the pixel coordinates \n\t\t */\n\t\tVector2f pixAt(const Vector2f & uv) const;\n\n\t\t/** Check if a point is inside the viewport.\n\t\t *\\param x horizontal coordinate\n\t\t *\\param y vertical coordinate\n\t\t *\\return true if the point is inside\n\t\t */\n\t\tbool\tcontains( float x, float y ) const;\n\n\t\t/** Check if a point is inside the viewport.\n\t\t *\\param x horizontal coordinate\n\t\t *\\param y vertical coordinate\n\t\t *\\return true if the point is inside\n\t\t */\n\t\tbool\tcontains( int x, int y ) const;\n\n\t\t/** Check if a point is inside the viewport.\n\t\t *\\param xy coordinates\n\t\t *\\return true if the point is inside\n\t\t */\n\t\tbool\tcontains(const Vector2f & xy) const;\n\n\t\t/** Bind an OpenGL viewport whose values are determined based on the viewport final dimensions and the target size.\n\t\t *\\param screenWidth the width of the rendertarget\n\t\t *\\param screenHeight the height of the rendertarget\n\t\t */\n\t\tvoid\t\t\tbind( uint screenWidth, uint screenHeight ) const;\n\n\t\t/** Bind an OpenGL viewport  whose values are determined based on the viewport final dimensions. */\n\t\tvoid\t\t\tbind( void ) const;\n\n\t\t/** Perform a full OpenGL clear of the region defined by the viewport in the currently bound target.\n\t\t *\\param bgColor clear color\n\t\t */\n\t\tvoid\t\t\tclear( const Vector3f& bgColor=Vector3f(0.f, 0.f, 0.f) ) const;\n\n\t\t/** Set the viewport parent\n\t\t *\\param view the new parent\n\t\t */\n\t\tvoid\t\t\t\tparent( const Viewport* view );\n\n\t\t/** \\return the parent viewport if it exists or nullptr. */\n\t\tconst Viewport*\t\tparent( void ) const;\n\n\t\t/** \\return true if the viewport is empty (0x0). */\n\t\tbool isEmpty() const;\n\n\tprivate:\n\t\tconst Viewport*\t_parent; ///< (optional)\n\n\t\tfloat\t_left; ///< Left extent.\n\t\tfloat\t_top; ///< Top extent.\n\t\tfloat\t_right; ///< Right extent.\n\t\tfloat\t_bottom; ///< Bottom extent.\n\n\t};\n\n\t///// DEFINITIONS /////\n\n\tinline void\t\t\t\tViewport::parent( const Viewport* view ) { \n\t\t_parent = view; \n\n\t\t//if (_parent == this) // means 'is the root'\n\t\t//\t_parent = nullptr;\n\t}\n\tinline const Viewport*\t\tViewport::parent( void ) const { \n\t\treturn _parent; \n\t}\n\n\tinline float\tViewport::finalLeft( void ) const {\n\t\treturn (_parent)? (_parent->finalLeft() + _parent->finalWidth()*left()) : left();\n\t}\n\n\tinline float\tViewport::finalTop( void ) const {\n\t\treturn (_parent)? ( _parent->finalTop() + _parent->finalHeight()*top() ) : top();\n\t}\n\n\tinline float\tViewport::finalRight( void ) const {\n\t\treturn (_parent)? (_parent->finalLeft() + _parent->finalWidth()*right()) : right();\n\t}\n\n\tinline float\tViewport::finalBottom( void ) const {\n\t\treturn (_parent)? (_parent->finalTop() + _parent->finalHeight()*bottom()) : bottom();\n\t}\n\n\tinline float\tViewport::finalWidth( void ) const {\n\t\treturn (_parent)? _parent->finalWidth()*width() : width();\n\t}\n\n\tinline float\tViewport::finalHeight( void ) const {\n\t\treturn (_parent)? _parent->finalHeight()*height() : height();\n\t}\n\n\tinline sibr::Vector2f\tViewport::finalSize(void) const {\n\t\treturn sibr::Vector2f(finalWidth(),finalHeight());\n\t}\n\n\tinline Vector2f Viewport::finalTopLeft() const {\n\t\treturn { finalLeft(), finalTop() };\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Window.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/graphics/Input.hpp\"\r\n#include \"core/graphics/Window.hpp\"\r\n#include \"core/graphics/RenderUtility.hpp\"\r\n\r\n#include \"imgui/imgui.cpp\" // needed for loading ini settings\r\n#include \"imgui/imgui.h\"\r\n#include \"imgui_impl_glfw_gl3.h\"\r\n\r\n#include <regex>\r\n\r\nnamespace sibr\r\n{\r\n\tint Window::contextId = -1;\r\n\r\n\tstatic void glfwErrorCallback(int error, const char* description)\r\n\t{\r\n\t\tSIBR_ERR << description << std::endl;\r\n\t}\r\n\r\n\tstatic void glErrorCallback(GLenum src, GLenum type, GLuint id, GLenum severity, GLsizei size, const GLchar* str, const void* user) {\r\n\t\t// For now we only log errors, and we ignore severity.\r\n\t\tif(type != GL_DEBUG_TYPE_ERROR) {\r\n\t\t\t//SIBR_LOG << \"[API]\" << \"(\" << src << \",\" << type << \",\" << id << \",\" << severity << \"): \" << std::string(str, size) << std::endl;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tstd::string errStr;\r\n\t\tswitch(src) {\r\n\t\tcase GL_DEBUG_SOURCE_API:\r\n\t\t\terrStr = \"[API] \";\r\n\t\t\tbreak;\r\n\t\tcase GL_DEBUG_SOURCE_SHADER_COMPILER:\r\n\t\t\terrStr = \"[Shader] \";\r\n\t\t\tbreak;\r\n\t\tcase GL_DEBUG_SOURCE_THIRD_PARTY:\r\n\t\t\terrStr = \"[3rd party] \";\r\n\t\t\tbreak;\r\n\t\tcase GL_DEBUG_SOURCE_APPLICATION:\r\n\t\t\terrStr = \"[Application] \";\r\n\t\t\tbreak;\r\n\t\tcase GL_DEBUG_SOURCE_OTHER:\r\n\t\t\terrStr = \"[Other] \";\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tconst std::string errStr2(str, size);\r\n\r\n\t\tSIBR_ERR << \"OpenGL: \" << errStr << errStr2 << std::endl;\r\n\t\r\n\t}\r\n\r\n\tstatic void glfwKeyboardCallback(GLFWwindow* window, int key, int scancode, int action, int mods)\r\n\t{\r\n\t\tkey = std::max(0, key);\r\n\r\n\t\t// We only pass the key input to our code if the interface isn't currently using it.\r\n\t\tif (!ImGui::GetIO().WantCaptureKeyboard) {\r\n\t\t\tif (action == GLFW_PRESS) {\r\n\t\t\t\tsibr::Input::global().key().press((sibr::Key::Code)key);\r\n\t\t\t} else if (action == GLFW_RELEASE) {\r\n\t\t\t\tsibr::Input::global().key().release((sibr::Key::Code)key);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsibr::Input::global() = sibr::Input();\r\n\t\t}\r\n\t\tImGui_ImplGlfw_KeyCallback(window, key, scancode, action, mods);\r\n\t}\r\n\r\n\tstatic void glfwResizeCallback(GLFWwindow* window, int w, int h)\r\n\t{\r\n\t\tvoid* userptr = glfwGetWindowUserPointer(window);\r\n\t\tWindow* win = reinterpret_cast<Window*>(userptr);\r\n\t\t\r\n\t\t// TT : should be the right thing to do, but might break some old stuff\r\n\t\twin->viewport(Viewport(0.f, 0.f, (float)(w), (float)(h)));\r\n\t}\r\n\r\n\tstatic void glfwCursorPosCallback(GLFWwindow* /*window*/, double x, double y)\r\n\t{\r\n\t\t// We  pass the mouse position to our code iff the interface doesn't need it.\r\n\t\tif (!ImGui::GetIO().WantCaptureMouse) {\r\n\t\t\tsibr::Input::global().mousePosition(Vector2i((int)x, (int)y));\r\n\t\t} else {\r\n\t\t\tsibr::Input::global() = sibr::Input();\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tstatic void glfwMouseButtonCallback(GLFWwindow* window, int button, int action, int mods)\r\n\t{\r\n\t\t// We only pass the mouse input to our code if the interface isn't currently using it.\r\n\t\tif (!ImGui::GetIO().WantCaptureMouse) {\r\n\t\t\tif (action == GLFW_PRESS) {\r\n\t\t\t\tsibr::Input::global().mouseButton().press((sibr::Mouse::Code)button);\r\n\t\t\t} else if (action == GLFW_RELEASE) {\r\n\t\t\t\tsibr::Input::global().mouseButton().release((sibr::Mouse::Code)button);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// We have to pass release events in the case where we pressed while inside our views, and released outside.\r\n\t\t\tif(sibr::Input::global().mouseButton().isActivated((sibr::Mouse::Code)button)) {\r\n\t\t\t\tsibr::Input::global().mouseButton().release((sibr::Mouse::Code)button);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tImGui_ImplGlfw_MouseButtonCallback(window, button, action, mods);\r\n\t}\r\n\r\n\tstatic void glfwMouseScrollCallback(GLFWwindow* window, double x, double y)\r\n\t{\r\n\t\tsibr::Input::global().mouseScroll(y);\r\n\t\tImGui_ImplGlfw_ScrollCallback(window, x, y);\r\n\t}\r\n\t///////////////////////////////////////////////////////////////////////////\r\n\r\n\tstatic int windowCounter = 0;\r\n\r\n\t/*static*/ bool\t\t\tWindow::contextIsRunning( void )\r\n\t{\r\n\t\treturn windowCounter > 0;\r\n\t}\r\n\r\n\tWindow::AutoInitializer::AutoInitializer( const WindowArgs & args ) : _useGUI(!args.no_gui && !args.offscreen)\r\n\t{\r\n\t\tif (windowCounter == 0)\r\n\t\t{\r\n\t\t\tSIBR_LOG << \"Initialization of GLFW\" << std::endl;\r\n\t\t\tglfwSetErrorCallback(glfwErrorCallback);\r\n\r\n\t\t\tif (!glfwInit())\r\n\t\t\t\tSIBR_ERR << \"cannot init glfw\" << std::endl;\r\n\t\t\tif (!args.offscreen)\r\n\t\t\t\tsibr::Input::global().key().clearStates();\r\n\r\n\t\t}\r\n\t\t++windowCounter;\r\n\t}\r\n\r\n\tWindow::AutoInitializer::~AutoInitializer( void )\r\n\t{\r\n\t\t--windowCounter;\r\n\t\tif (windowCounter == 0)\r\n\t\t{\r\n\t\t\tif(_useGUI) {\r\n\t\t\t\tImGui_ImplGlfwGL3_Shutdown();\t/// \\todo TODO: not sure if safe with multi-context\r\n\t\t\t\tImGui::DestroyContext();\r\n\t\t\t}\r\n\t\t\tglfwSetErrorCallback(nullptr);\r\n\t\t\tSIBR_LOG << \"Deinitialization of GLFW\" << std::endl;\r\n\t\t\tglfwTerminate();\r\n\t\t}\r\n\t}\r\n\r\n\tWindow::Window(uint w, uint h, const std::string& title, const WindowArgs & args, const std::string& defaultSettingsFilename) \r\n\t\t: _hiddenInit(args), _useGUI(!args.no_gui && !args.offscreen), _shouldClose(false) \r\n\t{\r\n\t\t\r\n\t\tsetup(w, h, title, args, defaultSettingsFilename);\r\n\r\n\t\tif (!(args.fullscreen)) {\r\n\t\t\tglfwSetWindowPos(_glfwWin.get(), 200, 200);\r\n\t\t}\r\n\t}\r\n\r\n\tWindow::Window(const std::string& title, const WindowArgs & args, const std::string& defaultSettingsFilename)\r\n\t\t: Window(args.win_width, args.win_height, title, args, defaultSettingsFilename)\r\n\t{\r\n\t}\r\n\r\n\tWindow::Window(const std::string& title, const sibr::Vector2i & margins, const WindowArgs & args, const std::string& defaultSettingsFilename)\r\n\t\t: _hiddenInit(args), _useGUI(!args.no_gui && !args.offscreen), _shouldClose(false)\r\n\t{\r\n\t\tsibr::Vector2i winSize;\r\n\t\tif (args.offscreen) {\r\n\t\t\twinSize = sibr::Vector2i(args.win_width, args.win_height);\r\n\t\t}\r\n\t\telse {\r\n\t\t\twinSize = desktopSize();\r\n\t\t}\r\n\t\t\r\n\t\t// Here autoInitializer is already initialized, thus glfwInit() has been called\r\n\t\tsetup(winSize.x() - 2*margins.x(), winSize.y() - 2*margins.y(), title, args, defaultSettingsFilename);\r\n\r\n\t\tif (!(args.fullscreen)) {\r\n\t\t\tglfwSetWindowPos(_glfwWin.get(), margins.x(), margins.y());\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid Window::swapBuffer(void) {\r\n\t\tif (_useGUI) {\r\n\t\t\tglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, \"ImGui interface\");\r\n\t\t\tImGui::Render();\r\n\t\t\tImGui_ImplGlfwGL3_RenderDrawData(ImGui::GetDrawData());\r\n\t\t\tglPopDebugGroup();\r\n\t\t}\r\n\t\tglfwSwapBuffers(_glfwWin.get());\r\n\t\t// Keep the call below in all cases to avoid accumulating all interfaces in one frame.\r\n\t\tif (_useGUI)\r\n\t\t\tImGui_ImplGlfwGL3_NewFrame();\r\n\t}\r\n\t\r\n\tvoid Window::resetSettingsToDefault() {\r\n\t\tstd::string iniFilename = ImGui::GetIO().IniFilename;\r\n\t\tif(iniFilename != \"\" && fileExists(iniFilename)) {\r\n\t\t\tif(remove(iniFilename.c_str()))\r\n\t\t\t\tSIBR_WRG << \"Settings file \" << iniFilename << \" was not removed due to an error.\" << std::endl;\r\n\t\t\telse\r\n\t\t\t\tSIBR_LOG << \"Settings file \" << iniFilename << \" was removed successfully.\" << std::endl;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tSIBR_WRG << \"Settings file \" << iniFilename << \" not found.\" << std::endl;\r\n\t\t}\r\n\r\n\t\tImGuiContext& g = *ImGui::GetCurrentContext();\r\n\r\n\t\tfor (int i = 0; i < g.SettingsWindows.Size; i++)\r\n\t\t\t\tIM_DELETE(g.SettingsWindows[i].Name);\r\n\r\n\t\tg.SettingsWindows.clear();\r\n\r\n\t\tloadSettings();\r\n\r\n\t\tfor (ImGuiWindow * window: g.Windows) {\r\n\t\t\tif (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID)) {\r\n\t\t\t\tSetWindowPos(window, settings->Pos, ImGuiCond_Always);\r\n\t\t\t\tSetWindowSize(window, settings->Size, ImGuiCond_Always);\r\n\t\t\t\tSetWindowCollapsed(window, settings->Collapsed, ImGuiCond_Always);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid Window::loadSettings() {\r\n\t\t// Load defaults from core\r\n\t\tLoadIniSettingsFromDisk(std::string(getResourcesDirectory() + \"/core/\" + _defaultImguiSettingsFilename).c_str());\r\n\t\t\r\n\t\t// Load defaults from Window constructor\r\n\t\tif(fileExists(_windowImguiSettingsFilename))\r\n\t\t\tLoadIniSettingsFromDisk(_windowImguiSettingsFilename.c_str());\r\n\r\n\t\t// Load user specific settings for this particular window\r\n\t\tLoadIniSettingsFromDisk(ImGui::GetIO().IniFilename);\r\n\t}\r\n\r\n\tvoid Window::setup(int width, int height, const std::string& title, const WindowArgs & args, const std::string& defaultSettingsFilename) {\r\n\t\t// IMPORTANT NOTE: if you got compatibility problem with old opengl function,\r\n\t\t// try to load compat 3.2 instead of core 4.2\r\n\r\n\t\tglfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);\r\n\t\tglfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);\r\n\t\tglfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);\r\n\r\n#ifdef GLEW_EGL\r\n\t\tglfwWindowHint(GLFW_CONTEXT_CREATION_API, (args.offscreen) ?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tGLFW_EGL_CONTEXT_API :\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tGLFW_NATIVE_CONTEXT_API);\r\n#else\r\n\t\tif(args.offscreen) SIBR_WRG << \"Offscreen enabled without EGL implementation. Using native context (Offscreen might run into issues if no real display is available).\" << std::endl;\r\n#endif\r\n\r\n\t\tglfwWindowHint(GLFW_RED_BITS, 8);\r\n\t\tglfwWindowHint(GLFW_GREEN_BITS, 8);\r\n\t\tglfwWindowHint(GLFW_BLUE_BITS, 8);\r\n\t\tglfwWindowHint(GLFW_ALPHA_BITS, 8);\r\n\t\tglfwWindowHint(GLFW_DEPTH_BITS, 24);\r\n\t\tglfwWindowHint(GLFW_STENCIL_BITS, 8);\r\n\r\n\t\tif (args.offscreen) {\r\n\t\t\tglfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);\r\n\t\t}\r\n\r\n\t\t_glfwWin = GLFWwindowptr(\r\n\t\t\tglfwCreateWindow(\r\n\t\t\t\twidth, height, title.c_str(),\r\n\t\t\t\t(args.fullscreen && !args.offscreen) ? glfwGetPrimaryMonitor() : NULL\r\n\t\t\t\t, NULL ), \r\n\t\t\tglfwDestroyWindow\r\n\t\t);\r\n\r\n\t\tif (_glfwWin == nullptr)\r\n\t\t\tSIBR_ERR << \"failed to create a glfw window (is your graphics driver updated ?)\" << std::endl;\r\n\r\n\t\tmakeContextCurrent();\r\n\r\n\t\t\r\n\r\n\t\t//SR, TT fix for image size non divisible by 4\r\n\t\tglPixelStorei(GL_UNPACK_ALIGNMENT, 1);\r\n\t\tglPixelStorei(GL_PACK_ALIGNMENT, 1);\r\n\r\n\t\t//// Print available OpenGL version\r\n\t\tGLint major, minor;\r\n\t\tglGetIntegerv(GL_MAJOR_VERSION, &major);\r\n\t\tglGetIntegerv(GL_MINOR_VERSION, &minor);\r\n\t\tSIBR_LOG << \"OpenGL Version: \" << glGetString(GL_VERSION)\r\n\t\t\t<< \"[major: \" << major << \", minor: \" << minor << \"]\" << std::endl;\r\n\r\n\t\tglewExperimental = GL_TRUE;\r\n\t\tGLenum err = glewInit();\r\n#ifdef GLEW_EGL\r\n//\t\tif (err != GLEW_OK && (!args.offscreen || err != GLEW_ERROR_NO_GLX_DISPLAY)) // Small hack for glew, this error occurs but does not concern offscreen\r\n\t\tif (err != GLEW_OK && (!args.offscreen )) // Small hack for glew, this error occurs but does not concern offscreen\r\n#else\r\n\t\tif (err != GLEW_OK)\r\n#endif\r\n\t\t\tSIBR_ERR << \"cannot initialize GLEW (used to load OpenGL function)\" << std::endl;\r\n\t\t(void)glGetError(); // I notice that glew might do wrong things during its init()\r\n\t\t\t\t\t\t\t// some drivers complain about it. So I reset OpenGL's errors to discard this.\r\n\r\n\t\tglfwSetWindowUserPointer(_glfwWin.get(), this);\r\n\t\t/// \\todo TODO: fix, width and height might be erroneous. SR\r\n\t\tviewport(Viewport(0.f, 0.f, (float)width, (float)height));\t/// \\todo TODO: bind both\r\n\r\n\t\t_useVSync = args.vsync;\r\n\t\tglfwSwapInterval(args.vsync);\r\n\t\tglfwSetKeyCallback(_glfwWin.get(), glfwKeyboardCallback);\r\n\t\tglfwSetScrollCallback(_glfwWin.get(), glfwMouseScrollCallback);\r\n\t\tglfwSetMouseButtonCallback(_glfwWin.get(), glfwMouseButtonCallback);\r\n\t\tglfwSetCursorPosCallback(_glfwWin.get(), glfwCursorPosCallback);\r\n\t\tglfwSetWindowSizeCallback(_glfwWin.get(), glfwResizeCallback);\r\n\r\n\t\t// SR: we don't use it by default because you won't get callstack/file/line info.\r\n\t\tif(args.gl_debug) {\r\n\t\t\tglEnable(GL_DEBUG_OUTPUT);\r\n\t\t\tglDebugMessageCallback(glErrorCallback, nullptr);\r\n\t\t}\r\n\r\n\t\tif(_useGUI) {\r\n\t\t\t//contextId\r\n\t\t\t++Window::contextId;\r\n\r\n\t\t\t// Setup ImGui binding\r\n\t\t\tImGui::CreateContext();\r\n\t\t\tImGui_ImplGlfwGL3_Init(_glfwWin.get(), false);\r\n\t\t\tglfwSetCharCallback(_glfwWin.get(), ImGui_ImplGlfw_CharCallback);\r\n\r\n\t\t\tImGui_ImplGlfwGL3_NewFrame();\r\n\r\n\t\t\t_windowImguiSettingsFilename = defaultSettingsFilename;\r\n\r\n\t\t\t// Set user specific file for this particular window as default ini file\r\n\t\t\tstd::string iniFilename = std::string(getAppDataDirectory() + \"/\" + std::regex_replace(title, std::regex(\"[^0-9A-Za-z\\\\-_]\"), \"_\") + \".ini\").c_str();\r\n\t\t\tchar* iniFilenameCStr = new char[iniFilename.length()+1];\r\n\t\t\tstrcpy(iniFilenameCStr, iniFilename.c_str());\r\n\t\t\tImGui::GetIO().IniFilename = iniFilenameCStr;\r\n\r\n\t\t\tloadSettings();\r\n\t\t}\r\n\r\n\t\tif(!args.offscreen) {\r\n\t\t\t_oldPosition = position();\r\n\t\t\t_oldSize = size();\r\n\r\n\t\t\t// Support for HiDPI on Windows. The default is 96.\r\n\t\t\t// Compute the pixel density at the current definition.\r\n\t\t\tint widthmm, heightmm;\r\n\t\t\tglfwGetMonitorPhysicalSize(glfwGetPrimaryMonitor(), &widthmm, &heightmm);\r\n\t\t\tconst float defaultDPI = 96.0f;\r\n\t\t\tsibr::Vector2i dsize = desktopSize();\r\n\t\t\t\r\n\t\t\t_scaling = sibr::clamp(std::round(dsize.x() / (widthmm / 25.4f) / defaultDPI), 1.0f, 2.0f);\r\n\r\n\t\t\tif (_useGUI && args.hdpi) {\r\n\t\t\t\tImGui::GetStyle().ScaleAllSizes(scaling());\r\n\t\t\t\tImGui::GetIO().FontGlobalScale = scaling();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** \\todo\r\n\t\tTODO: fix issue on some HiDPI screens + interaction with GUI labels generation.\r\n\t\t// If we have a screen in HiDPI mode, scale the interface accordingly.\r\n\t\tif (_scaling > 1.0f) {\r\n\t\t\tImGui::GetStyle().ScaleAllSizes(_scaling);\r\n\t\t\tImGui::GetIO().FontGlobalScale = _scaling;\r\n\t\t}\r\n\t\t*/\r\n\t}\r\n\r\n\tVector2i\t\tWindow::desktopSize( void )\r\n\t{\r\n\t\tconst GLFWvidmode * mode = glfwGetVideoMode(glfwGetPrimaryMonitor());\r\n\t\treturn Vector2i(mode->width, mode->height);\r\n\t}\r\n\r\n\tVector2i\t\tWindow::size( void ) const\r\n\t{\r\n\t\tVector2i s;\r\n\t\tglfwGetWindowSize(_glfwWin.get(), &s[0], &s[1]);\r\n\t\treturn s;\r\n\t}\r\n\r\n\tvoid Window::position(const unsigned int x, const unsigned int y)\r\n\t{\r\n\t\tglfwSetWindowPos(_glfwWin.get(), x, y);\r\n\t}\r\n\r\n\tVector2i Window::position() const {\r\n\t\tVector2i s;\r\n\t\tglfwGetWindowPos(_glfwWin.get(), &s[0], &s[1]);\r\n\t\treturn s;\r\n\t}\r\n\r\n\tbool\t\t\tWindow::isOpened( void ) const\r\n\t{\r\n\t\treturn (!_shouldClose && !glfwWindowShouldClose(_glfwWin.get()));\r\n\t}\r\n\r\n\tvoid\t\t\tWindow::close( void )\r\n\t{\r\n\t\t_shouldClose = true;\r\n\t\tglfwSetWindowShouldClose(_glfwWin.get(), GL_TRUE);\r\n\t}\r\n\r\n\tbool Window::isFullscreen(void) const\r\n\t{\r\n\t\treturn glfwGetWindowMonitor(_glfwWin.get()) != NULL;\r\n\t}\r\n\r\n\tvoid Window::setFullscreen(const bool fullscreen) {\r\n\t\tconst bool currentState = isFullscreen();\r\n\t\tif((fullscreen && currentState) || (!fullscreen && !currentState)) {\r\n\t\t\t// Do nothing.\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (fullscreen) {\r\n\t\t\t_oldPosition = position();\r\n\t\t\t_oldSize = size();\r\n\t\t\tGLFWmonitor* monitor = glfwGetPrimaryMonitor();\r\n\t\t\tconst GLFWvidmode* mode = glfwGetVideoMode(monitor);\r\n\t\t\tglfwSetWindowMonitor(_glfwWin.get(), monitor, 0, 0, mode->width, mode->height, mode->refreshRate);\r\n\t\t\t// There is a bug in glfw (see https://github.com/glfw/glfw/issues/1072).\r\n\t\t\t// We have to manually re-set the swap interval.\r\n\t\t\tglfwSwapInterval(_useVSync ? 1 : 0);\r\n\t\t} else {\r\n\t\t\tglfwSetWindowMonitor(_glfwWin.get(), NULL, _oldPosition[0], _oldPosition[1], _oldSize[0], _oldSize[1], 0);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid\t\t\tWindow::size( int w, int h )\r\n\t{\r\n\t\tglfwSetWindowSize(_glfwWin.get(), w, h);\r\n\t\tVector2i s = size();\r\n\r\n\t\tif (s[0] != w || s[1] != h)\r\n\t\t\tSIBR_WRG << \"Attempting to resize the window to an unsuported resolution \"\r\n\t\t\t\"(w = \" << w << \", h = \" << h << \" ), using w = \" << s[0] << \", h = \" << s[1] << \" instead.\" << std::endl;\r\n\r\n\t\t// TT : should be the right thing to do, but might brake some old stuff\r\n\t\tviewport(Viewport(0.f, 0.f, (float)(s[0]), (float)(s[1])));\r\n\r\n\t\t//viewport(Viewport(0.f, 0.f, (float)(s[0]-1), (float)(s[1]-1))); // TODO: bind both\r\n\t}\r\n\r\n\tvoid Window::setFrameRate(int fps)\r\n\t{\r\n\t\tif (fps == 60) {\r\n\t\t\tglfwSwapInterval(1);\r\n\t\t} else if (fps == 30) {\r\n\t\t\tglfwSwapInterval(2);\r\n\t\t} else if (fps == 15) {\r\n\t\t\tglfwSwapInterval(3);\r\n\t\t}\r\n\t}\r\n\r\n\tbool Window::isVsynced(void) const\r\n\t{\r\n\t\treturn _useVSync;\r\n\t}\r\n\r\n\tbool Window::isGUIEnabled(void) const\r\n\t{\r\n\t\treturn _useGUI;\r\n\t}\r\n\r\n\tvoid Window::setVsynced(const bool vsync) {\r\n\t\t_useVSync = vsync;\r\n\t\tglfwSwapInterval(_useVSync ? 1 : 0);\r\n\t}\r\n\r\n\tvoid\t\t\t\tWindow::enableCursor( bool enable )\r\n\t{\r\n\t\tglfwSetInputMode(_glfwWin.get(), GLFW_CURSOR, enable? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN);\r\n\t}\r\n\r\n\tGLFWwindow * Window::GLFW(void) {\r\n\t\treturn _glfwWin.get();\r\n\t}\r\n\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/Window.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include \"core/graphics/Config.hpp\"\r\n#include \"core/system/Vector.hpp\"\r\n#include \"core/graphics/Viewport.hpp\"\r\n#include \"core/graphics/Texture.hpp\"\r\n#include <core/system/CommandLineArgs.hpp>\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/** System window backed by an internal framebuffer.\r\n\t* \\ingroup sibr_graphics\r\n\t*/\r\n\tclass SIBR_GRAPHICS_EXPORT Window : public IRenderTarget\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::shared_ptr<Window>\t\tPtr;\r\n\r\n\tpublic:\r\n\t\t/** Constructor.\r\n\t\t *\\param title window title\r\n\t\t *\\param args window setup arguments\r\n\t\t *\\sa WindowArgs\r\n\t\t *\\param defaultSettingsFilename default settings file for this specific window\r\n\t\t **/\r\n\t\tWindow(const std::string& title, const WindowArgs & args = {}, const std::string& defaultSettingsFilename = \"\");\r\n\r\n\t\t/** Constructor, overriding the window size.\r\n\t\t *\\param w window width\r\n\t\t *\\param h window height\r\n\t\t *\\param title window title\r\n\t\t *\\param args window setup arguments\r\n\t\t *\\sa WindowArgs\r\n\t\t *\\param defaultSettingsFilename default settings file for this specific window\r\n\t\t **/\r\n\t\tWindow(uint w, uint h, const std::string& title, const WindowArgs & args = {}, const std::string& defaultSettingsFilename = \"\");\r\n\r\n\t\t/** Constructor, adjust the size to fill the screen except for the margins.\r\n\t\t *\\param title window title\r\n\t\t *\\param margins horizontal and vertical margins to preserve on each side of the window\r\n\t\t *\\param args window setup arguments\r\n\t\t *\\sa WindowArgs\r\n\t\t *\\param defaultSettingsFilename default settings file for this specific window\r\n\t\t **/\r\n\t\tWindow(const std::string & title, const sibr::Vector2i & margins, const WindowArgs & args = {}, const std::string& defaultSettingsFilename = \"\");\r\n\r\n\t\t/** \\return a pointer to the underlying GLFW window */\r\n\t\tGLFWwindow *\t\tGLFW(void);\r\n\r\n\t\t/** Activate the associated graphics context. */\r\n\t\tvoid\t\t\t\tmakeContextCurrent(void);\r\n\t\t/** \\return the context currently in use (represented by a GLFW window) */\r\n\t\tGLFWwindow *\t\tgetContextCurrent(void);\r\n\t\t/** Deactivate the associated graphics context. */\r\n\t\tvoid\t\t\t\tmakeContextNull(void);\r\n\r\n\t\t/** Flush the graphics pipeline and perform rendering, displaying the result in the abck buffer. */\r\n\t\tvoid\t\t\t\tswapBuffer(void);\r\n\r\n\t\t/** Reset window settings to default.\r\n\t\t */\r\n\t\tvoid\t\t\t\tresetSettingsToDefault();\r\n\r\n\t\t/** Load Imgui settings.\r\n\t\t */\r\n\t\tvoid\t\t\t\tloadSettings();\r\n\r\n\t\t/** Set the window size\r\n\t\t *\\param w width\r\n\t\t *\\param h height\r\n\t\t **/\r\n\t\tvoid\t\t\t\tsize(int w, int h);\r\n\t\t\r\n\t\t/** \\return the window size */\r\n\t\tVector2i\t\t\tsize(void) const;\r\n\r\n\t\t/** Set the window position\r\n\t\t *\\param x horizontal location\r\n\t\t *\\param y vertical location\r\n\t\t **/\r\n\t\tvoid\t\t\t\tposition(const unsigned int x, const unsigned int y);\r\n\r\n\t\t/** \\return the window position on screen */\r\n\t\tVector2i\t\t\tposition() const;\r\n\r\n\t\t/** \\return the screen size. */\r\n\t\tstatic Vector2i\t\tdesktopSize(void);\r\n\r\n\t\t/** \\return true if an openGL context is active. */\r\n\t\tstatic bool\t\t\tcontextIsRunning(void);\r\n\r\n\t\t/** Set the framerate.\r\n\t\t *\\param fps one of 60, 30, 15 \r\n\t\t */\r\n\t\tvoid\t\t\t\tsetFrameRate(int fps);\r\n\r\n\t\t/** Display the cursor in the window. \r\n\t\t * \\param enable boolean flag\r\n\t\t */\r\n\t\tvoid\t\t\t\tenableCursor(bool enable);\r\n\r\n\t\t/** \\return if the window is currently opened */\r\n\t\tbool\t\t\t\tisOpened(void) const;\r\n\t\t/** Mark the window as closed. */\r\n\t\tvoid\t\t\t\tclose(void);\r\n\r\n\t\t/** \\return true if the window is fullscreen. */\r\n\t\tbool\t\t\t\tisFullscreen(void) const;\r\n\t\t/** Toggle fullscreen.\r\n\t\t *\\param fullscreen if true the window will be resized to occupy the whole screen, without visible borders.\r\n\t\t */\r\n\t\tvoid\t\t\t\tsetFullscreen(const bool fullscreen);\r\n\r\n\t\t/** \\return true if the window is using V-sync. */\r\n\t\tbool\t\t\t\tisVsynced(void) const;\r\n\r\n\t\t/** \\return true if the window is enabling GUI. */\r\n\t\tbool\t\t\t\tisGUIEnabled(void) const;\r\n\t\t\r\n\t\t/** Toggle V-sync.\r\n\t\t *\\param vsync if true, framerate will be limited to 60 FPS\r\n\t\t *\\note When set to false, tearing might be visible.\r\n\t\t */\r\n\t\tvoid\t\t\t\tsetVsynced(const bool vsync);\r\n\r\n\t\t/** \\return the window viewport */\r\n\t\tconst Viewport&\t\tviewport(void) const;\r\n\r\n\t\t/** Set the window viewport.\r\n\t\t *\\param view the new viewport\r\n\t\t */\r\n\t\tvoid\t\t\t\tviewport(const Viewport& view);\r\n\r\n\t\t// From IRenderTarget\r\n\t\t/** Get the backbuffer texture ID. unsuported. */\r\n\t\tGLuint\t\t\t\ttexture(uint t = 0) const;\r\n\r\n\t\t/** Get the backbuffer texture ID. unsuported. */\r\n\t\tGLuint\t\t\t\thandle(uint t = 0) const;\r\n\r\n\t\t/** \\return the window buffer ID (0) */\r\n\t\tGLuint\t\t\t\tfbo(void) const;\r\n\r\n\t\t/** Bind the window buffer. */\r\n\t\tvoid\t\t\t\tbind(void);\r\n\r\n\t\t/** Unind the window buffer. */\r\n\t\tvoid\t\t\t\tunbind(void);\r\n\r\n\t\t/** Clear the window buffer. */\r\n\t\tvoid\t\t\t\tclear(void);\r\n\r\n\t\t/** \\return the window buffer width */\r\n\t\tuint\t\t\t\tw(void) const;\r\n\r\n\t\t/** \\return the window buffer height */\r\n\t\tuint\t\t\t\th(void) const;\r\n\r\n\t\t/** \\return the screens caling factor. */\r\n\t\tfloat\t\t\t\tscaling() const;\r\n\t\t\r\n\t\tstatic int\t\t\tcontextId; ///< Last created window context ID (-1 initially).\r\n\r\n\tprivate:\r\n\r\n\t\t/** Setup the window.\r\n\t\t *\\param width window width on screen\r\n\t\t *\\param height window height on screen\r\n\t\t *\\param title window title\r\n\t\t *\\param args window setup arguments\r\n\t\t *\\param defaultSettingsFilename default settings file for this specific window\r\n\t\t *\\sa WindowArgs\r\n\t\t */\r\n\t\tvoid setup(int width, int height, const std::string & title, const WindowArgs & args, const std::string& defaultSettingsFilename = \"\");\r\n\r\n\t\t/// Window pointer for callbacks.\r\n\t\ttypedef std::unique_ptr<GLFWwindow, std::function<void(GLFWwindow*)>> GLFWwindowptr;\r\n\r\n\t\t/// Helper to handle window creation/destruction.\r\n\t\tstruct AutoInitializer\r\n\t\t{\r\n\t\t\tAutoInitializer(const WindowArgs & args = {});\r\n\t\t\t~AutoInitializer(void);\r\n\t\t\t\r\n\t\t\tconst bool\t\t\t_useGUI; ///< Should ImGui windows be displayed.\r\n\t\t};\r\n\r\n\t\tbool\t\t\t\t_shouldClose; ///< Is the window marked as closed.\r\n\t\tGLFWwindowptr\t\t_glfwWin; ///< Undelrying GLF window.\r\n\t\tVector2i\t\t\t_size; ///< Window size.\r\n\t\tconst bool\t\t\t_useGUI; ///< Should ImGui windows be displayed.\r\n\t\tbool\t\t\t\t_useVSync; ///< is the window using vsync.\r\n\t\tVector2i\t\t\t_oldPosition; ///< Backup for handling fullscreen/windowed mode restoration.\r\n\t\tVector2i\t\t\t_oldSize; ///< Backup for handling fullscreen/windowed mode restoration.\r\n\t\tViewport\t\t\t_viewport; ///< Current viewport.\r\n\t\tfloat\t\t\t\t_scaling = 1.0f; ///< Internal scaling for HiDPI screens.\r\n\t\t// Must be placed add the end of member data .\r\n\t\tAutoInitializer\t\t_hiddenInit; ///< nifty counter used to auto-init window system\r\n\t\tstd::string\t\t\t_defaultImguiSettingsFilename = \"imgui_default.ini\"; ///< string of default Imgui settings filename\r\n\t\tstd::string\t\t\t_windowImguiSettingsFilename; ///< string of default Window specific Imgui settings filename\r\n\t};\r\n\r\n\t///// INLINES /////\r\n\tinline void\t\tWindow::makeContextCurrent(void) {\r\n\t\tglfwMakeContextCurrent(_glfwWin.get());\r\n\t}\r\n\r\n\tinline void\t\tWindow::makeContextNull(void) {\r\n\t\tglfwMakeContextCurrent(0);\r\n\t}\r\n\r\n\tinline GLFWwindow *\t\tWindow::getContextCurrent(void) {\r\n\t\treturn glfwGetCurrentContext();\r\n\t}\r\n\r\n\tinline GLuint\tWindow::texture(uint /*t*/) const {\r\n\t\tSIBR_ERR << \"You are trying to read the Window's backbuffer (use sibr::blit instead).\" << std::endl;\r\n\t\treturn 0;\r\n\t}\r\n\tinline GLuint\tWindow::handle(uint /*t*/) const {\r\n\t\tSIBR_ERR << \"You are trying to read the Window's backbuffer (use sibr::blit instead).\" << std::endl;\r\n\t\treturn 0;\r\n\t}\r\n\tinline GLuint\tWindow::fbo(void) const {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tinline void\t\tWindow::bind(void) {\r\n\t\tglBindFramebuffer(GL_FRAMEBUFFER, 0);\r\n\r\n\t\t\r\n\t}\r\n\r\n\tinline void\t\tWindow::unbind(void) {\r\n\t\t/*nothing*/\r\n\t}\r\n\r\n\tinline void\t\tWindow::clear(void) {\r\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r\n\t}\r\n\r\n\tinline uint\t\tWindow::w(void) const {\r\n\t\treturn (uint)size().x();\r\n\t}\r\n\r\n\tinline uint\t\tWindow::h(void) const {\r\n\t\treturn (uint)size().y();\r\n\t}\r\n\r\n\tinline float\tWindow::scaling() const\r\n\t{\r\n\t\treturn _scaling;\r\n\t}\r\n\r\n\tinline const Viewport&\tWindow::viewport(void) const {\r\n\t\treturn _viewport;\r\n\t}\r\n\r\n\tinline void\t\t\t\tWindow::viewport(const Viewport& view) {\r\n\t\t_viewport = view;\r\n\t}\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/resources/imgui_default.ini",
    "content": "[Window]\nPos=60,60\nSize=400,400\nCollapsed=0"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/graphics/sibr_graphics.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_graphics sibr_graphics\n\n\t\\brief OpenGL and graphics utilities.\n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nproject(sibr_imgproc)\r\n\r\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\r\nsource_group(\"Source Files\" FILES ${SOURCES})\r\n\r\n## Specify target rules\r\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\r\n\r\ninclude_directories(\r\n\t${Boost_INCLUDE_DIRS}\r\n\t${mrf_INCLUDE_DIRS}\r\n)\r\nif(WIN32)\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\t${OpenCV_LIBRARIES}\r\n\tOpenMP::OpenMP_CXX\r\n\tglfw3\r\n\tmrf\r\n\tsibr_system\r\n\tsibr_graphics\r\n\tsibr_assets\r\n\tsibr_raycaster\r\n)\r\nelse()\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\t${OpenCV_LIBRARIES}\r\n\tOpenMP::OpenMP_CXX\r\n\t${GLFW_LIBRARY}\r\n\tmrf\r\n\tsibr_system\r\n\tsibr_graphics\r\n\tsibr_assets\r\n\tsibr_raycaster\r\n)\r\nendif()\r\n\r\nif (NOT WIN32)\r\n\ttarget_link_libraries(${PROJECT_NAME}\r\n \t\t# GLEW\r\n \t\trt m dl X11 pthread Xrandr Xinerama Xxf86vm Xcursor\r\n\t\t# X11 Xi Xrandr Xxf86vm Xinerama Xcursor dl rt m pthread\r\n\t)\r\nendif()\r\n\r\nadd_definitions( -DSIBR_IMGPROC_EXPORTS -DBOOST_ALL_DYN_LINK  )\r\n\r\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\r\n\r\n\r\n## High level macro to install in an homogen way all our ibr targets\r\ninclude(install_runtime)\r\nibr_install_target(${PROJECT_NAME}\r\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\r\n)\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/system/Config.hpp\"\n# include \"core/system/Utils.hpp\"\n\n# ifdef SIBR_OS_WINDOWS\n//// Export Macro (used for creating DLLs) ////\n#  ifdef SIBR_STATIC_DEFINE\n#    define SIBR_EXPORT\n#    define SIBR_NO_EXPORT\n#  else\n#    ifndef SIBR_IMGPROC_EXPORT\n#      ifdef SIBR_IMGPROC_EXPORTS\n          /* We are building this library */\n#        define SIBR_IMGPROC_EXPORT __declspec(dllexport)\n#      else\n          /* We are using this library */\n#        define SIBR_IMGPROC_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT \n#    endif\n#  endif\n# else\n# define SIBR_IMGPROC_EXPORT\n# endif\n\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/CropScaleImageUtility.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"CropScaleImageUtility.hpp\"\n\nnamespace sibr {\n\n\tstd::vector<std::string> CropScaleImageUtility::getPathToImgs(const std::string & inputFileName)\n\t{\n\t\tstd::ifstream inputFile(inputFileName);\n\t\tstd::string line;\n\t\tstd::vector<std::string> pathToImgs;\n\t\twhile (getline(inputFile, line)) {\n\t\t\tstd::stringstream ss(line);\n\t\t\tstd::string path;\n\t\t\tunsigned width, height;\n\t\t\tss >> path >> width >> height;\n\t\t\tpathToImgs.push_back(path);\n\t\t}\n\t\tinputFile.close();\n\t\treturn pathToImgs;\n\t}\n\n\tvoid CropScaleImageUtility::logExecution(const sibr::Vector2i & originalResolution, unsigned nrImages, long long elapsedTime, bool wasTransformed, const char* log_file_name)\n\t{\n\t\t// check if file exists\n\t\tconst bool isEmptyFile = !sibr::fileExists(log_file_name);\n\t\tstd::ofstream outputFile(log_file_name, std::ios::app);\n\n\t\tif (isEmptyFile) {\n\t\t\toutputFile << \"date\\t\\t\\tresolution\\tnrImgs\\telapsedTime\\twas transformed?\\n\";\n\t\t}\n\n\t\ttime_t now = std::time(nullptr);\n\t\t\n#ifdef SIBR_OS_WINDOWS\n\t\ttm ltm = {0,0,0,0,0,0,0,0,0};\n\t\tlocaltime_s(&ltm, &now);\n#else\n\t\ttm ltm = *(std::localtime(&now));\n#endif\n\t\t\n\t\tstd::stringstream dateSS;\n\t\tdateSS << \"[\" << 1900 + ltm.tm_year << \"/\" << 1 + ltm.tm_mon << \"/\" << ltm.tm_mday << \"] \"\n\t\t\t<< ltm.tm_hour << \":\" << ltm.tm_min << \":\" << ltm.tm_sec;\n\n\t\toutputFile << dateSS.str() << \"\\t\" << originalResolution[0] << \"x\" << originalResolution[1] << \"\\t\\t\" << nrImages << \"\\t\" << elapsedTime << \"\\t\" << wasTransformed << \"\\n\";\n\n\t\toutputFile.close();\n\t}\n\n\tvoid CropScaleImageUtility::writeListImages(const std::string path_to_file, const std::vector<CropScaleImageUtility::Image> & listOfImages)\n\t{\n\t\tstd::ofstream outputFile(path_to_file);\n\n\t\tfor (unsigned i = 0; i < listOfImages.size(); i++) {\n\t\t\toutputFile << listOfImages[i].filename << \" \" << listOfImages[i].width << \" \" << listOfImages[i].height << \"\\n\";\n\t\t}\n\n\t\toutputFile.close();\n\t}\n\n\tsibr::Vector2i CropScaleImageUtility::parseResolution(const std::string & param)\n\t{\n\t\tsize_t delimiterPos = param.find('x');\n\t\tstd::string widthStr = param.substr(0, delimiterPos);\n\t\tstd::string heightStr = param.substr(delimiterPos + 1);\n\t\treturn sibr::Vector2i(std::stoi(widthStr), std::stoi(heightStr));\n\t}\n\n\tvoid CropScaleImageUtility::writeScaleFactor(const std::string path_to_file, float scaleFactor)\n\t{\n\t\tstd::ofstream outputFile(path_to_file);\n\n\t\toutputFile << scaleFactor << \"\\n\";\n\n\t\toutputFile.close();\n\t}\n\n\tvoid CropScaleImageUtility::writeTargetResolution(const std::string path_to_file, const sibr::Vector2i & targetResolution)\n\t{\n\t\tstd::ofstream outputFile(path_to_file);\n\n\t\toutputFile << targetResolution[0] << \" \" << targetResolution[1] << \"\\n\";\n\n\t\toutputFile.close();\n\t}\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/CropScaleImageUtility.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include <core/graphics/Image.hpp>\n\n#include <boost/filesystem.hpp>\n\n#include <fstream>\n#include <iostream>\n#include <iomanip>\n\n\nnamespace sibr {\n\n\t/** \\brief Utility class to crop and rescale images, especially for uniformizing IBR datasets.\n\t* \\ingroup sibr_imgproc\n\t*/\n\tclass SIBR_IMGPROC_EXPORT CropScaleImageUtility\n\t{\n\tpublic:\n\n\t\t/** Image infos. */\n\t\tstruct Image {\n\t\t\tstd::string\tfilename; ///< Image file name.\n\t\t\tunsigned\twidth; ///< Image width.\n\t\t\tunsigned\theight; ///< Image height.\n\t\t};\n\n\t\t/** Load a list_images.txt file and extract the image paths.\n\t\t * \\param inputFileName path to the listing\n\t\t * \\return a list of image paths\n\t\t */\n\t\tstd::vector<std::string> getPathToImgs(const std::string & inputFileName);\n\t\t\n\t\t/**\n\t\t * Log processing informations to a file.\n\t\t * \\param resolution the estimated resolution\n\t\t * \\param nrImages the number of images\n\t\t * \\param elapsedTime the time taken by the processing\n\t\t * \\param wasTransformed was transforamtion applied\n\t\t * \\param log_file_name the destination file path\n\t\t */\n\t\tvoid logExecution(const sibr::Vector2i & resolution, unsigned nrImages, long long elapsedTime, bool wasTransformed, const char* log_file_name);\n\t\t\n\t\t/**\n\t\t * Save a list of images to a list_images.txt file, where each image has a line \"name w h\".\n\t\t * \\param path_to_file the destination file path\n\t\t * \\param listOfImages the images to save to the list\n\t\t */\n\t\tvoid writeListImages(const std::string path_to_file, const std::vector<Image> & listOfImages);\n\n\t\t/**\n\t\t * Write a scale float factor to a text file.\n\t\t * \\param path_to_file the destination file path\n\t\t * \\param scaleFactor the value to write\n\t\t */\n\t\tvoid writeScaleFactor(const std::string path_to_file, float scaleFactor);\n\n\t\t/**\n\t\t * Write a resolution to a text file, as \"w h\".\n\t\t * \\param path_to_file the destination file path\n\t\t * \\param targetResolution the resolution to write\n\t\t */\n\t\tvoid writeTargetResolution(const std::string path_to_file, const sibr::Vector2i & targetResolution);\n\n\t\t/**\n\t\t * Extract an image resolution from a \"wxh\" string.\n\t\t * \\param param the string to parse\n\t\t * \\return the resolution\n\t\t */\n\t\tsibr::Vector2i parseResolution(const std::string & param);\n\n\t};\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/DistordCropUtility.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"DistordCropUtility.hpp\"\n\nnamespace sibr {\n\t\n\n\tbool DistordCropUtility::isBlack(const sibr::Vector3ub & pixelColor, Vector3i backgroundColor, int threshold_black_color) {\n\t\tsibr::Vector3i c = pixelColor.cast<int>() - backgroundColor;\n\t\treturn c.squaredNorm() < threshold_black_color;\n\t}\n\n\n\tbool DistordCropUtility::is_number(const std::string& s)\n\t{\n\t\treturn !s.empty() && std::find_if(s.begin(),\n\t\t\ts.end(), [](char c) { return !std::isdigit(c); }) == s.end();\n\t}\n\n\tvoid DistordCropUtility::addPixelToQueue(const sibr::Vector2i & pixel, const sibr::ImageRGB & img, std::priority_queue<sibr::Vector2i> & queue, sibr::Array2d<bool> & arrayVisited, Vector3i backgroundColor, int threshold_black_color) {\n\t\tif (!arrayVisited(pixel.x(), pixel.y()) && isBlack(img(pixel.x(), pixel.y()), backgroundColor, threshold_black_color)) {\n\t\t\tqueue.push(pixel);\n\t\t\tarrayVisited(pixel.x(), pixel.y()) = true;\n\t\t}\n\t}\n\n\tvoid DistordCropUtility::findBounds(sibr::Array2d<bool> & isBlack, DistordCropUtility::Bounds & bounds, int thinest_bounding_box_size)\n\t{\n\t\tbool wasUpdated = true;\n\n\t\twhile (wasUpdated) {\n\n\t\t\twasUpdated = false;\n\n\t\t\tfor (int x = bounds.xMin; x <= bounds.xMax; ++x) {\n\t\t\t\twasUpdated = wasUpdated || isBlack(x, bounds.yMax) || isBlack(x, bounds.yMin);\n\t\t\t}\n\t\t\tfor (int y = bounds.yMin; y <= bounds.yMax; ++y) {\n\t\t\t\twasUpdated = wasUpdated || isBlack(bounds.xMax, y) || isBlack(bounds.xMin, y);\n\t\t\t}\n\n\t\t\tif (wasUpdated) {\n\t\t\t\t--bounds.xMax;\n\t\t\t\t++bounds.xMin;\n\t\t\t\t--bounds.yMax;\n\t\t\t\t++bounds.yMin;\n\t\t\t}\n\n\t\t\tif (bounds.xMax - bounds.xMin < thinest_bounding_box_size || bounds.yMax - bounds.yMin < thinest_bounding_box_size) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tDistordCropUtility::Bounds DistordCropUtility::getBounds(const sibr::ImageRGB & img, Vector3i backgroundColor, int threshold_black_color, int thinest_bounding_box_size, float toleranceFactor) {\n\t\tint w = img.w() - 1;\n\t\tint h = img.h() - 1;\n\n\t\tsibr::Array2d<bool> wasVisited(img.w(), img.h(), false);\n\t\tsibr::Array2d<bool> isBlack(img.w(), img.h(), false);\n\t\tstd::priority_queue<sibr::Vector2i> pixelsQueue;\n\n\t\t//init with boundary pixel (set initial pixelQueue)\n\t\t// add first row and last row of pixels to the pixelsQueue (if they are black) and marked them as visited\n\t\tfor (int x = 0; x<w; ++x) {\n\t\t\taddPixelToQueue(sibr::Vector2i(x, 0), img, pixelsQueue, wasVisited, backgroundColor, threshold_black_color);\n\t\t\taddPixelToQueue(sibr::Vector2i(x, h - 1), img, pixelsQueue, wasVisited, backgroundColor, threshold_black_color);\n\t\t}\n\n\t\t// add left col and right col of pixels to the pixelsQueue (if they are black) and marked them as visited\n\t\tfor (int y = 0; y<h; ++y) {\n\t\t\taddPixelToQueue(sibr::Vector2i(0, y), img, pixelsQueue, wasVisited, backgroundColor, threshold_black_color);\n\t\t\taddPixelToQueue(sibr::Vector2i(w - 1, y), img, pixelsQueue, wasVisited, backgroundColor, threshold_black_color);\n\t\t}\n\n\t\t//neighbors shifts\n\t\tsibr::Vector2i shiftsArray[4] = { sibr::Vector2i(1,0), sibr::Vector2i(-1,0), sibr::Vector2i(0,-1), sibr::Vector2i(0,1) };\n\t\tstd::vector<sibr::Vector2i> shifts(shiftsArray, shiftsArray + sizeof(shiftsArray) / sizeof(sibr::Vector2i));\n\n\t\t//find all black pixels linked to the boundaries\n\t\twhile (pixelsQueue.size() > 0) {\n\t\t\tsibr::Vector2i currentPix = pixelsQueue.top();\n\t\t\tpixelsQueue.pop();\n\t\t\t// if it was in the queue, then it was black\n\t\t\tisBlack(currentPix.x(), currentPix.y()) = true;\n\n\t\t\tfor (auto & shift : shifts) {\n\t\t\t\tsibr::Vector2i newPos = currentPix + shift;\n\t\t\t\tif (img.isInRange(newPos.x(), newPos.y())) {\n\t\t\t\t\taddPixelToQueue(newPos, img, pixelsQueue, wasVisited, backgroundColor, threshold_black_color);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t//find maximal bounding box not containing black pixels\n\t\tDistordCropUtility::Bounds bounds(img);\n\t\tfindBounds(isBlack, bounds, thinest_bounding_box_size);\n\n\t\tbounds.xRatio = bounds.xMax / (float)img.w() - 0.5f;\n\t\tbounds.yRatio = bounds.yMax / (float)img.h() - 0.5f;\n\n\t\tint proposedWidth = bounds.xMax - bounds.xMin;\n\t\tint proposedHeight = bounds.yMax - bounds.yMin;\n\n\t\tbounds.width = int(float(int(img.w()) - proposedWidth) * toleranceFactor + float(proposedWidth));\n\t\tbounds.height = int(float(int(img.h()) - proposedHeight) * toleranceFactor + float(proposedHeight));\n\n\t\treturn bounds;\n\t}\n\n\n\tsibr::Vector2i DistordCropUtility::calculateAvgResolution(const std::vector<Path>& imagePaths, std::vector<sibr::Vector2i> & resolutions, const int batch_size)\n\t{\n\t\tconst int nrBatches = static_cast<int>(ceil((float)(imagePaths.size()) / batch_size));\n\t\tresolutions.resize(imagePaths.size());\n\t\tstd::vector<std::pair<std::pair<long, long>, unsigned>> sumAndNrItems(nrBatches);\n\n\t\tfor (int batchId = 0; batchId < nrBatches; batchId++) {\n\n\t\t\tconst int nrItems = (batchId != nrBatches - 1) ? batch_size : ((nrBatches * batch_size != int(imagePaths.size())) ? (int(imagePaths.size()) - (batch_size * batchId)) : batch_size);\n\t\t\tlong sumOfWidths = 0;\n\t\t\tlong sumOfHeights = 0;\n\n\t\t\tstd::vector<sibr::ImageRGB> chunkOfInputImages(nrItems);\n\n#pragma omp parallel for\n\t\t\tfor (int localImgIndex = 0; localImgIndex < nrItems; localImgIndex++) {\n\t\t\t\tunsigned globalImgIndex = (batchId * batch_size) + localImgIndex;\n\t\t\t\tchunkOfInputImages.at(localImgIndex).load(imagePaths.at(globalImgIndex).string(), false);\n\n#pragma omp critical\n\t\t\t\t{\n\t\t\t\t\tsumOfWidths += long(chunkOfInputImages[localImgIndex].w());\n\t\t\t\t\tsumOfHeights += long(chunkOfInputImages[localImgIndex].h());\n\t\t\t\t\tresolutions[localImgIndex].x() = chunkOfInputImages[localImgIndex].w();\n\t\t\t\t\tresolutions[localImgIndex].y() = chunkOfInputImages[localImgIndex].h();\n\t\t\t\t}\n\t\t\t}\n\t\t\tstd::pair<long, long> sums(sumOfWidths, sumOfHeights);\n\t\t\tstd::pair<std::pair<long, long>, unsigned> batch(sums, nrItems);\n\t\t\tsumAndNrItems[batchId] = batch;\n\t\t}\n\n\t\tlong sumOfWidth = 0;\n\t\tlong sumOfHeight = 0;\n\t\tfor (unsigned i = 0; i < sumAndNrItems.size(); i++) {\n\t\t\tsumOfWidth += sumAndNrItems[i].first.first;\n\t\t\tsumOfHeight += sumAndNrItems[i].first.second;\n\t\t}\n\n\t\tconst long globalAvgWidth = sumOfWidth / long(imagePaths.size());\n\t\tconst long globalAvgHeight = sumOfHeight / long(imagePaths.size());\n\n\t\treturn sibr::Vector2i(int(globalAvgWidth), int(globalAvgHeight));\n\t}\n\n\tsibr::Vector2i DistordCropUtility::findBiggestImageCenteredBox(const Path & root,\n\t\tconst std::vector<Path>& imagePaths, \n\t\tstd::vector<sibr::Vector2i>& resolutions, \n\t\tint avgWidth, int avgHeight, \n\t\tconst int batch_size, \n\t\tfloat resolutionThreshold, \n\t\tfloat threshold_ratio_bounding_box_size, \n\t\tVector3i backgroundColor, \n\t\tint threshold_black_color, \n\t\tint thinest_bounding_box_size, \n\t\tfloat toleranceFactor)\n\t{\n\t\t// check if avg resolution needs to be calculated\n\t\tif (avgWidth == 0 || avgHeight == 0) {\n\t\t\tstd::cout << \"about to calculate avg resolution. use python get_image_size script if dataset has too many images\\n\";\n\t\t\tsibr::Vector2i avgResolution = calculateAvgResolution(imagePaths, resolutions, batch_size);\n\t\t\tavgWidth = avgResolution.x();\n\t\t\tavgHeight = avgResolution.y();\n\t\t}\n\n\t\tstd::cout << \"[distordCrop] average resolution \" << avgWidth << \"x\" << avgHeight << \" and nr resolutions given: \" << resolutions.size() << \"\\n\";\n\n\t\t// discard images with different resolution\n\t\tstd::vector<uint> preExcludedCams;\n\t\tfor (unsigned i = 0; i < resolutions.size(); i++) {\n\t\t\tbool shrinkHorizontally = ((resolutions[i].x() < avgWidth) && ((avgWidth - resolutions[i].x()) > avgWidth * resolutionThreshold)) ? true : false;\n\t\t\tbool shrinkVertically = ((resolutions[i].y() < avgHeight) && ((avgHeight - resolutions[i].y()) > avgHeight * resolutionThreshold)) ? true : false;\n\t\t\tif (shrinkHorizontally || shrinkVertically) {\n\t\t\t\tpreExcludedCams.push_back(i);\n\t\t\t\tstd::cout << \"[distordCrop] excluding input image \" << i << \" resolution=\" << resolutions[i].x() << \"x\" << resolutions[i].y() << \"\\n\";\n\t\t\t}\n\t\t}\n\n\t\tstd::cout << \"[distordCrop] nr pre excluded images \" << preExcludedCams.size() << \"\\n\";\n\n\t\t// compute bounding boxes for all non-discarded images\n\t\tstd::vector<Bounds> allBounds(imagePaths.size());\n\n\t\tconst int nrBatches = static_cast<int>(ceil((float)(imagePaths.size()) / batch_size));\n\n\t\t// processs batches sequentially (we don't want to run out of memory)\n\t\tfor (int batchId = 0; batchId < nrBatches; batchId++) {\n\n\t\t\tconst int nrItems = (batchId != nrBatches - 1) ? batch_size : ((nrBatches * batch_size != int(imagePaths.size())) ? (int(imagePaths.size()) - (batch_size * batchId)) : batch_size);\n\n\t\t\tstd::vector<sibr::ImageRGB> chunkOfInputImages(nrItems);\n\n\t\t\t// load images in parallel (OpenMP 2.0 doesn't allow unsigned int as index. must be signed integral type)\n#pragma omp parallel for\n\t\t\tfor (int localImgIndex = 0; localImgIndex < nrItems; localImgIndex++) {\n\t\t\t\tconst uint globalImgIndex = uint((batchId * batch_size) + localImgIndex);\n\t\t\t\t// if cam was discarded, do nothing\n\t\t\t\tif (std::find(preExcludedCams.begin(), preExcludedCams.end(), globalImgIndex) == preExcludedCams.end()) {\n\t\t\t\t\t// only now load the img\n\t\t\t\t\tchunkOfInputImages.at(localImgIndex).load(imagePaths.at(globalImgIndex).string(), false);\n\t\t\t\t\tallBounds.at(globalImgIndex) = getBounds(chunkOfInputImages.at(localImgIndex), backgroundColor, threshold_black_color, thinest_bounding_box_size, toleranceFactor);\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tBounds finalBounds(resolutions.at(0));\n\n\t\tint im_id = 0;\n\n\t\t// generate exclude file based on x and y ratios\n\t\tstd::string excludeFilePath = root.string() + \"/exclude_images.txt\";\n\t\tstd::ofstream excludeFile(excludeFilePath, std::ios::trunc);\n\n\t\tint minWidth = -1;\n\t\tint minHeight = -1;\n\n\t\tfor (auto & bounds : allBounds) {\n\t\t\tbool wasPreExcluded = std::find(preExcludedCams.begin(), preExcludedCams.end(), im_id) != preExcludedCams.end();\n\n\t\t\tif (!wasPreExcluded && bounds.xRatio > threshold_ratio_bounding_box_size && bounds.yRatio > threshold_ratio_bounding_box_size) {\n\t\t\t\t// get global x and y ratios\n\t\t\t\tbool check = false;\n\t\t\t\tif (bounds.xRatio < finalBounds.xRatio) {\n\t\t\t\t\tfinalBounds.xRatio = bounds.xRatio;\n\t\t\t\t\tcheck = true;\n\t\t\t\t}\n\t\t\t\tif (bounds.yRatio < finalBounds.yRatio) {\n\t\t\t\t\tfinalBounds.yRatio = bounds.yRatio;\n\t\t\t\t\tcheck = true;\n\t\t\t\t}\n\n\t\t\t\tminWidth = (minWidth < 0 || bounds.width < minWidth) ? bounds.width : minWidth;\n\t\t\t\tminHeight = (minHeight < 0 || bounds.height < minHeight) ? bounds.height : minHeight;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstd::cerr << im_id << \" \";\n\t\t\t\texcludeFile << im_id << \" \";\n\n\t\t\t\tstd::cout << wasPreExcluded << \" \" << bounds.xRatio << \" \" << threshold_ratio_bounding_box_size << \" \" << bounds.yRatio << \" \" << threshold_ratio_bounding_box_size << std::endl;\n\t\t\t}\n\n\t\t\t++im_id;\n\n\t\t}\n\t\texcludeFile.close();\n\t\tstd::cout << std::endl;\n\n\t\treturn sibr::Vector2i(minWidth, minHeight);\n\n\t}\n\n\tsibr::Vector2i DistordCropUtility::findMinImageSize(const Path & root, const std::vector<Path>& imagePaths)\n\t{\n\t\tstd::vector<sibr::ImageRGB> inputImgs(imagePaths.size());\n\t\tstd::vector<sibr::Vector2i> imSizes(imagePaths.size());\n\n\t\tstd::cout << \"[distordCrop] loading input images : \" << std::flush;\n\n#pragma omp parallel for\n\t\tfor (int id = 0; id < (int)inputImgs.size(); ++id) {\n\t\t\tinputImgs.at(id).load(imagePaths.at(id).string(), false);\n\t\t\timSizes[id] = inputImgs[id].size().cast<int>();\n\t\t}\n\n\t\tsibr::Vector2i minSize = imSizes[0];\n\t\tfor (const auto & size : imSizes) {\n\t\t\tminSize = minSize.cwiseMin(size);\n\t\t}\n\n\t\t// generate exclude file based on x and y ratios\n\t\tstd::string excludeFilePath = root.string() + \"/excludeImages.txt\";\n\t\tstd::ofstream excludeFile(excludeFilePath, std::ios::trunc);\n\t\texcludeFile.close();\n\n\t\treturn minSize;\n\t}\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/DistordCropUtility.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include <core/graphics/Image.hpp>\n#include <core/system/Vector.hpp>\n#include <core/system/Array2d.hpp>\n\n#include <boost/filesystem.hpp>\n#include <boost/foreach.hpp> \n\n#include<fstream>\n#include <queue>\n\n\nnamespace sibr {\n\n\t/** \\brief Helpers for cropping undistorted dataset images so that margins are removed, while keeping the dataset consistent.\n\t* \\ingroup sibr_imgproc\n\t*/\n\tclass SIBR_IMGPROC_EXPORT DistordCropUtility\n\t{\n\tpublic:\n\n\t\t/** Image crop boundaries . */\n\t\tstruct Bounds\n\t\t{\n\t\t\t/// Default constructor.\n\t\t\tBounds() {}\n\n\t\t\t/** Initialize with an image boundaries.\n\t\t\t *\\param img the image to use\n\t\t\t **/\n\t\t\tBounds(const sibr::ImageRGB & img) {\n\t\t\t\txMax = (int)img.w() - 1;\n\t\t\t\txMin = 0;\n\t\t\t\tyMax = (int)img.h() - 1;\n\t\t\t\tyMin = 0;\n\t\t\t\txRatio = 1.0f;\n\t\t\t\tyRatio = 1.0f;\n\t\t\t}\n\n\t\t\t/** Initialize with a given resolution.\n\t\t\t *\\param res the resolution\n\t\t\t **/\n\t\t\tBounds(const sibr::Vector2i & res) {\n\t\t\t\txMax = res.x() - 1;\n\t\t\t\txMin = 0;\n\t\t\t\tyMax = res.y() - 1;\n\t\t\t\tyMin = 0;\n\t\t\t\txRatio = 1.0f;\n\t\t\t\tyRatio = 1.0f;\n\t\t\t}\n\n\t\t\t/** \\return a string representing the bounds, for logging. */\n\t\t\tstd::string display() const {\n\t\t\t\tstd::stringstream s;\n\t\t\t\ts << \"[\" << xMin << \", \" << xMax << \"]x[\" << yMin << \", \" << yMax << \"]\";\n\t\t\t\treturn s.str();\n\t\t\t}\n\n\t\t\tint xMax = 0; ///< Max x value.\n\t\t\tint xMin = 0; ///< Min x value.\n\t\t\tint yMax = 0; ///< Max y value.\n\t\t\tint yMin = 0; ///< Min y value.\n\t\t\tint width = 0; ///< Region width.\n\t\t\tint height = 0; ////< Region height.\n\n\t\t\tfloat xRatio = 1.0f; ///< Scaling ratio along X axis.\n\t\t\tfloat yRatio = 1.0f; ///< Scaling ratio along Y axis.\n\t\t};\n\n\t\t/** Check if a pixel color is close to a reference color.\n\t\t *\\param pixelColor the color to test\n\t\t *\\param backgroundColor the reference color\n\t\t *\\param threshold_black_color the tolerance threshold\n\t\t *\\return true if ||pixel - background||^2 < threshold\n\t\t */\n\t\tbool isBlack(const sibr::Vector3ub & pixelColor, Vector3i backgroundColor, int threshold_black_color);\n\n\t\t/*\n\t\t* Check if a file name is made out only of digits and not letters (like texture file names).\n\t\t* \\param s the filename to test\n\t\t* \\return true if the string only contains digits\n\t\t*/\n\t\tbool is_number(const std::string& s);\n\n\t\t/*\n\t\t* Add pixel(x,y) to the processing queue if it is close to backgroundColor.\n\t\t* Note that only the visited status of black pixels is updated (to avoid adding them multiple times) because we don't care about other pixels.\n\t\t* \\param pixel the coordinates of the pixel to test\n\t\t* \\param img the image the pixel is coming from\n\t\t* \\param queue the queue, pixel will be added to it if close to backgroundColor\n\t\t* \\param arrayVisited visited status of each pixel (to avoid adding a pixel to the queue multiple times)\n\t\t* \\param backgroundColor the reference color\n\t\t* \\param threshold_black_color the tolerance threshold\n\t\t* \\sa isBlack\n\t\t*/\n\t\tvoid addPixelToQueue(const sibr::Vector2i & pixel, const sibr::ImageRGB & img, std::priority_queue<sibr::Vector2i> & queue, sibr::Array2d<bool> & arrayVisited, Vector3i backgroundColor, int threshold_black_color);\n\n\t\t/**\n\t\t * Estimate a region that won't contain any black pixels.\n\t\t * \\param isBlack 2D array listing which pixels should be excluded\n\t\t * \\param bounds will contain the region boundaries\n\t\t * \\param thinest_bounding_box_size minimum size of the bounds along any dimension\n\t\t */\n\t\tvoid findBounds(sibr::Array2d<bool> & isBlack, Bounds & bounds, int thinest_bounding_box_size);\n\n\t\t/** Estimate a region of an image so that no pixels of a reference color are contained in it.\n\t\t *\\param img the image to crop\n\t\t *\\param backgroundColor the reference color\n\t\t *\\param threshold_black_color the color tolerance threshold\n\t\t *\\param thinest_bounding_box_size minimum size of the bounds along any dimension\n\t\t *\\param toleranceFactor Additional tolerance factor: if set to 0 the bounds will be tight, if set to 1 it will cover the full image.\n\t\t *\\return the estimated region boundaries\n\t\t */\n\t\tBounds getBounds(const sibr::ImageRGB & img, Vector3i backgroundColor, int threshold_black_color, int thinest_bounding_box_size, float toleranceFactor);\n\n\t\t/**\n\t\t * Estimate the average resolution of a set of images quickly using multithread to speed up the required loading.\n\t\t * \\param imagePaths list of paths to the images\n\t\t * \\param resolutions will contain each image resolution\n\t\t * \\param batch_size number of images loaded per thread internally\n\t\t * \\return the average resolution\n\t\t */\n\t\tsibr::Vector2i calculateAvgResolution(const std::vector< Path > & imagePaths, std::vector<sibr::Vector2i> & resolutions, const int batch_size = 150);\n\t\t\n\t\t/**\n\t\t * Find a common crop region for a set of images so that all pixels of a reference color are excluded from all images, while minimizing information loss.\n\t\t * \\param root the dataset root path (for writing list files)\n\t\t * \\param imagePaths list of image paths\n\t\t * \\param resolutions will contain the image resolutions\n\t\t * \\param avgWidth average image width, if 0 will be recomputed (slow for large datasets)\n\t\t * \\param avgHeight average image height, if 0 will be recomputed (slow for large datasets)\n\t\t * \\param batch_size batch size for multithreaded image loading\n\t\t * \\param resolutionThreshold ratio of the minimum allowed dimensions over the average image dimensions\n\t\t * \\param threshold_ratio_bounding_box_size maximum change in aspect ratio\n\t\t * \\param backgroundColor the reference background color\n\t\t * \\param threshold_black_color the color tolerance threshold\n\t\t * \\param thinest_bounding_box_size minimum size of the bounds along any dimension\n\t\t * \\param toleranceFactor Additional tolerance factor: if set to 0 the bounds will be tight, if set to 1 it will cover the full image.\n\t\t * \\return \n\t\t */\n\t\tsibr::Vector2i findBiggestImageCenteredBox(const Path & root, const std::vector< Path > & imagePaths, std::vector<sibr::Vector2i> & resolutions, int avgWidth = 0, int avgHeight = 0,\n\t\t\tconst int batch_size = 150,\n\t\t\tfloat resolutionThreshold = 0.15f,\n\t\t\tfloat threshold_ratio_bounding_box_size = 0.2f,\n\t\t\tVector3i backgroundColor = Vector3i(0, 0, 0),\n\t\t\tint threshold_black_color = 10,\n\t\t\tint thinest_bounding_box_size = 5,\n\t\t\tfloat toleranceFactor = 0.0f);\n\n\t\t/**\n\t\t * Find the resolution of the smallest image in a set.\n\t\t * \\note In the past, this function was also supposed to exclude images based on a certain criterion and write them to a file.\n\t\t * \\param root dataset root path (for writing an exclude list file, see note)\n\t\t * \\param imagePaths list of paths to the images\n\t\t * \\return the minimum resolution\n\t\t */\n\t\tsibr::Vector2i findMinImageSize(const Path & root, const std::vector< Path > & imagePaths);\n\n\n\t};\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/MRFSolver.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"MRFSolver.h\"\n\n\nnamespace sibr {\n\n\tMRFSolver::MRFSolver(void)\n\t{\n\t}\n\n\tMRFSolver::MRFSolver(std::vector<int> labels_list, std::vector<std::vector<int> >* neighborMap, int numIterations,\n\t\tUnaryLabelOnlyFuncPtr unaryLabelOnly,\n\t\tUnaryFuncPtr unaryFull,\n\t\tPairwiseLabelOnlyFuncPtr pairwiseLabelsOnly,\n\t\tPairwiseFuncPtr pairwiseFull)\n\t\t: ignoreIsolatedNode(false)\n\t{\n\t\tSIBR_LOG << \"[MRFSolver] Initialization ... \";\n\n\t\t_labList = labels_list;\n\t\t_neighborMap = neighborMap;\n\t\t_numIterations = numIterations;\n\t\t_unaryFull = unaryFull;\n\t\t_pairwiseFull = pairwiseFull;\n\n\t\tSIBR_LOG << \"[MRFSolver] Labels : \";\n\t\tfor (int l_id = 0; l_id < _labList.size(); l_id++) {\n\t\t\tstd::cout << _labList[l_id] << \",\";\n\t\t}\n\t\tstd::cout << std::endl;\n\n\t\t//storing values for the unary part only requiring label\n\t\tif (unaryLabelOnly.get()) {\n\t\t\tSIBR_LOG << \"[MRFSolver] unaryLabelOnly exists, precomputing.\" << std::endl;\n\t\t\t_UnaryLabelOnly.resize(_labList.size());\n\t\t\tfor (int l_id = 0; l_id < _labList.size(); l_id++) {\n\t\t\t\t_UnaryLabelOnly[l_id] = (*unaryLabelOnly)(_labList[l_id]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tSIBR_LOG << \"[MRFSolver] unaryLabelOnly does not exist, skipping.\" << std::endl;\n\t\t}\n\n\t\t//storing values for the pairwise part only requiring labels\n\t\tif (pairwiseLabelsOnly.get()) {\n\t\t\tSIBR_LOG << \"[MRFSolver] pairwiseLabelsOnly exists, precomputing.\" << std::endl;\n\t\t\t_PairwiseLabelsOnly.resize(_labList.size());\n\n\t\t\tfor (int l_id1 = 0; l_id1 < _labList.size(); l_id1++) {\n\t\t\t\t_PairwiseLabelsOnly[l_id1].resize(_labList.size(), -1);\n\n\t\t\t\tfor (int l_id2 = 0; l_id2 < _labList.size(); l_id2++) {\n\t\t\t\t\t_PairwiseLabelsOnly[l_id1][l_id2] = (*pairwiseLabelsOnly)(_labList[l_id1], _labList[l_id2]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tSIBR_LOG << \"[MRFSolver] pairwiseLabelsOnly does not exist, skipping.\" << std::endl;\n\t\t}\n\n\t\tSIBR_LOG << \"[MRFSolver] Setup complete.\" << std::endl;\n\t}\n\n\tvoid MRFSolver::solveLabels(void)\n\t{\n\t\tSIBR_LOG << \"[MRFSolver] Running mincut... \" << std::endl;\n\n\t\tdouble infty = (double)1e20;\n\t\tdouble min_unary, temp_unary;\n\t\tint num_nodes = (int)_neighborMap->size();\n\t\tSIBR_LOG << \"[MRFSolver] Number of nodes = \" << num_nodes;\n\t\t_labels.resize(num_nodes);\n\n\t\tint numLinks = 0;\n\t\tfor (auto & links : (*_neighborMap)) {\n\t\t\tnumLinks += (int)links.size();\n\t\t}\n\t\tSIBR_LOG << \", number of links = \" << numLinks / 2 << std::endl;\n\t\t\n\t\tSIBR_LOG << \"[MRFSolver] Initialization : minimizing unaries...\" << std::flush;\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\n\t\t\tint label_id;\n\t\t\tmin_unary = infty;\n\t\t\tint num_cand = 0;\n\t\t\tfor (int lp_id = 0; lp_id < (int)_labList.size(); lp_id++) {\n\t\t\t\ttemp_unary = unaryTotal(p, lp_id);\n\t\t\t\tif (temp_unary < (1 << 10)) { ++num_cand; }\n\t\t\t\tif (temp_unary < min_unary) {\n\t\t\t\t\tmin_unary = temp_unary;\n\t\t\t\t\tlabel_id = lp_id;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_labels[p] = label_id;\n\t\t}\n\t\tstd::cout << \" Done.\" << std::endl;\n\n\t\tSIBR_LOG << \"[MRFSolver] Energies: U: \" << computeEnergyU() << \", W: \" << computeEnergyW() << std::endl;\n\n\t\t// Alpha-expansion algorithm\n\t\tSIBR_LOG << \"[MRFSolver] Alpha-expansion [label,flow]...\" << std::endl;\n\t\tfor (int it = 0; it < _numIterations; it++) {\n\t\t\tSIBR_LOG << \"[MRFSolver] Iteration \" << (it+1)  << \"/\" << (_numIterations) << \": \" << std::endl;\n\t\t\t\n\t\t\tfor (int label_id = 0; label_id < (int)_labList.size(); label_id++) {\n\t\t\t\tint label = _labList.at(label_id);\n\t\t\t\t\n\t\t\t\tbuildGraphAlphaExp(label_id);\n\t\t\t\t// Solve mincut\n\t\t\t\t_energy = _graph->maxflow();\n\n\n\t\t\t\tint num_change = 0;\n\t\t\t\t//assign new labels\n\t\t\t\tfor (int p = 0; p < num_nodes; p++) {\n\t\t\t\t\tif (_graph->what_segment(p) == GraphType::SINK) {\n\t\t\t\t\t\tif (_labels[p] != label_id) { ++num_change; }\n\t\t\t\t\t\t_labels[p] = label_id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tSIBR_LOG << \"[MRFSolver]\\t\\tLabel \" << label << \": modifications = \" <<  num_change << \", energy = \" << _energy << \" ]\" << std::endl;\n\n\t\t\t\tdelete _graph;\n\t\t\t}\n\t\t}\n\t\tSIBR_LOG << \"[MRFSolver] Done.\" << std::endl;\n\t}\n\n\tvoid MRFSolver::buildGraphAlphaExp(int label_iteration_id)\n\t{\n\t\tdouble infty = 1 << 25;\n\t\tint num_nodes = (int)_neighborMap->size();\n\t\tint n_nodes_estimation = num_nodes;\n\t\tint n_edges_estimation = num_nodes * 4;\n\n\t\t_graph = new GraphType(n_nodes_estimation, n_edges_estimation);\n\n\t\t//add nodes associated to pixels\n\t\tint node_id = 0;\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\t\t\t_graph->add_node();\n\n\t\t\tif (_labels[p] == label_iteration_id) {\n\t\t\t\t_graph->add_tweights(node_id, unaryTotal(p, label_iteration_id), infty);\n\t\t\t} else {\n\t\t\t\t_graph->add_tweights(node_id, unaryTotal(p, label_iteration_id), unaryTotal(p, _labels[p]));\n\t\t\t}\n\t\t\t++node_id;\n\t\t}\n\t\t\n\t\t//add nodes associated to connexions between pixels\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\n\t\t\tstd::vector<int> & neighors = (*_neighborMap)[p];\n\t\t\tfor (int q_id = 0; q_id < (int)neighors.size(); q_id++) {\n\n\t\t\t\tint q = neighors[q_id];\n\n\t\t\t\tif (p == q) { std::cerr << \"!\"; }\n\t\t\t\tif (q < p) { continue; }\n\n\t\t\t\tif (_labels[p] != _labels[q]) {\n\t\t\t\t\t//extra node associated to edge {p,q}\n\t\t\t\t\t_graph->add_node();\n\n\t\t\t\t\t_graph->add_tweights(node_id, 0, pairwiseTotal(q, p, _labels[q], _labels[p]));\n\n\t\t\t\t\tdouble pairwise_q_a = pairwiseTotal(q, p, _labels[q], label_iteration_id);\n\t\t\t\t\t_graph->add_edge(q, node_id, pairwise_q_a, pairwise_q_a);\n\n\t\t\t\t\tdouble pairwise_p_a = pairwiseTotal(q, p, label_iteration_id, _labels[p]);\n\t\t\t\t\t_graph->add_edge(p, node_id, pairwise_p_a, pairwise_p_a);\n\n\t\t\t\t\t++node_id;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdouble pairwise_p_q = pairwiseTotal(q, p, _labels[q], label_iteration_id);\n\t\t\t\t\t_graph->add_edge(q, p, pairwise_p_q, pairwise_p_q);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\tvoid MRFSolver::solveBinaryLabels(void)\n\t{\n\t\tint numLabels = (int)_labList.size();\n\t\tif (numLabels < 2) {\n\t\t\tSIBR_ERR << \"[MRFSolver] solveBinaryLabels, expected 2 labels, only \" << numLabels << \" labels \" << std::endl;\n\t\t}\n\t\telse if (numLabels > 2) {\n\t\t\tSIBR_WRG << \"[MRFSolver] solveBinaryLabels, found \" << numLabels << \" labels, only the first two will be used.\" << std::endl;\n\t\t}\n\n\t\tbuildGraphBinaryLabels();\n\n\t\t_graph->maxflow();\n\n\t\tint num_nodes = (int)_neighborMap->size();\n\t\t_labels.resize(num_nodes);\n\n\t\t//assign new labels\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\n\t\t\t//TODO check this is not the opposite\n\t\t\tif (_graph->what_segment(p) == GraphType::SINK) {\n\t\t\t\t_labels[p] = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_labels[p] = 1;\n\t\t\t}\n\t\t}\n\n\t\tdelete _graph;\n\t}\n\n\tvoid MRFSolver::buildGraphBinaryLabels(void)\n\t{\n\t\tint num_nodes = (int)_neighborMap->size();\n\t\tint n_nodes_estimation = num_nodes;\n\t\tint n_edges_estimation = num_nodes * 4;\n\n\t\t_graph = new GraphType(n_nodes_estimation, n_edges_estimation);\n\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\t\t\t_graph->add_node();\n\t\t\t_graph->add_tweights(p, unaryTotal(p, 0), unaryTotal(p, 1));\n\t\t}\n\n\t\tfor (int p = 0; p < num_nodes; p++) {\n\t\t\tstd::vector<int> & neighors = (*_neighborMap)[p];\n\t\t\tfor (int q_id = 0; q_id < (int)neighors.size(); q_id++) {\n\n\t\t\t\tint q = neighors[q_id];\n\n\t\t\t\tif (q < p) { continue; }\n\n\t\t\t\tdouble weight = pairwiseTotal(q, p, 0, 1);\n\n\t\t\t\t_graph->add_edge(q, p, weight, weight);\n\t\t\t}\n\t\t}\n\t}\n\n\tdouble MRFSolver::unaryTotal(int p, int lp_id)\n\t{\n\t\tdouble u = 0;\n\t\tif (!_UnaryLabelOnly.empty()) {\n\t\t\tu += _UnaryLabelOnly[lp_id];\n\t\t}\n\t\tif (_unaryFull) {\n\t\t\tu += (*_unaryFull)(p, _labList[lp_id]);\n\t\t}\n\t\tif (u < 0) { std::cerr << \"!\"; }\n\t\treturn u;\n\t}\n\n\tdouble MRFSolver::pairwiseTotal(int p, int q, int lp_id, int lq_id)\n\t{\n\t\tdouble w = 0;\n\t\tif (!_PairwiseLabelsOnly.empty()) {\n\t\t\tw += _PairwiseLabelsOnly[lp_id][lq_id];\n\t\t}\n\n\t\tif (_pairwiseFull) {\n\t\t\tw += (*_pairwiseFull)(p, q, _labList[lp_id], _labList[lq_id]);\n\t\t}\n\t\tif (w < 0) { std::cerr << \"?\" << w << \"?\"; }\n\t\treturn w;\n\t}\n\n\tstd::vector<int> MRFSolver::getLabels(void)\n\t{\n\t\tstd::vector<int> labels(_labels.size());\n\n\t\t//switch from labels id to actual labels \n\t\tfor (int p = 0; p < (int)labels.size(); p++) {\n\t\t\tlabels[p] = _labList[_labels[p]];\n\t\t}\n\t\treturn labels;\n\t}\n\n\tstd::vector<double> MRFSolver::getUnariesEnergies(void)\n\t{\n\t\tif (_labels.size() == 0) { std::cerr << \"[MRFSolver] warning getUnariesEnergies without nodes\" << std::endl; return std::vector<double>(); }\n\n\t\tstd::vector<double> energies(_labels.size());\n\t\tfor (int p = 0; p < (int)_labels.size(); p++) {\n\t\t\tenergies[p] = unaryTotal(p, _labels[p]);\n\t\t}\n\n\t\treturn energies;\n\t}\n\n\tdouble MRFSolver::computeEnergyU(void)\n\t{\n\t\tdouble e = 0;\n\t\tfor (int p = 0; p < (int)_labels.size(); p++) {\n\t\t\te += unaryTotal(p, _labels[p]);\n\t\t}\n\t\treturn e;\n\t}\n\n\tdouble MRFSolver::computeEnergyW(void)\n\t{\n\t\tdouble e = 0;\n\t\tfor (int p = 0; p < (int)_labels.size(); p++) {\n\t\t\tfor (int q_id = 0; q_id < (int)(*_neighborMap)[p].size(); q_id++) {\n\t\t\t\tint q = (*_neighborMap)[p][q_id];\n\t\t\t\tif (q < p) { continue; }\n\t\t\t\te += pairwiseTotal(q, p, _labels[q], _labels[p]);\n\t\t\t}\n\t\t}\n\t\treturn e;\n\t}\n\n\tdouble MRFSolver::getTotalEnergy(void)\n\t{\n\t\treturn _energy;\n\t}\n\n\tMRFSolver::~MRFSolver(void)\n\t{\n\t}\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/MRFSolver.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include \"mrf/graph.h\"\n#include <vector>\n#include <iostream>\n#include <functional>\n#include <memory>\n\nnamespace sibr {\n\n\t\n\t/** Object wrapper around Kolmogorov & Boykov MRF solver.\n\t *Solve labelling problems on regular grids using alpha expension.\n\t\\ingroup sibr_imgproc\n\t*/\n\tclass SIBR_IMGPROC_EXPORT MRFSolver\n\t{\n\n\tpublic:\n\n\t\ttypedef std::shared_ptr<std::function<double(int, int)> > UnaryFuncPtr; ///< Unary cost function that depend on node attributes and its label.\n\t\ttypedef std::shared_ptr<std::function<double(int, int, int, int)> > PairwiseFuncPtr; ///< Pairwise cost function that depend on node attributes and their labels.\n\t\t\n\t\ttypedef std::shared_ptr<std::function<double(int)> > UnaryLabelOnlyFuncPtr; ///< Unary cost function that only depend on the label.\n\t\ttypedef std::shared_ptr<std::function<double(int, int)> > PairwiseLabelOnlyFuncPtr; ///< Pairwise cost function that only depend on the labels.\n\t\t\n\t\t/// Default constructor.\n\t\tMRFSolver(void);\n\n\t\t/** Initialize from a set of labels, connections and node/edge weights.\n\t\t *\\param labels list of available labels\n\t\t *\\param neighborMap connectivity map, for each node, list of neighboring nodes linear indices\n\t\t *\\param numIterations number of expansion iterations to perform\n\t\t *\\param unaryLabelOnly optional unary cost that only depends on the label: f(lab0), else provide nullptr\n\t\t *\\param unaryFull unary (per node) cost function evaluator, receiving the node linear index and label: f(ind0, lab0)\n\t\t *\\param pairwiseLabelsOnly optional pairwise cost that only depends on the labels: f(lab0, lab1), else provide nullptr\n\t\t *\\param pairwiseFull pairwise (per pair of nodes) cost function evaluator, receiving the nodes linear indices and their labels: f(ind0, ind1, lab0, lab1)\n\t\t *\\note the \"*LabelsOnly\" functions are optional and are precomputed and cached for optimized resolution.\n\t\t */\n\t\tMRFSolver(std::vector<int> labels, std::vector<std::vector<int> >* neighborMap, int numIterations,\n\t\t\tUnaryLabelOnlyFuncPtr unaryLabelOnly,\n\t\t\tUnaryFuncPtr unaryFull,\n\t\t\tPairwiseLabelOnlyFuncPtr pairwiseLabelsOnly,\n\t\t\tPairwiseFuncPtr pairwiseFull\n\t\t);\n\n\t\t/// Solve using alpha expansion. When you have only two labels, use solveBinaryLabels instead\n\t\tvoid solveLabels(void);\n\n\t\t/// Solve for binary labels: if you only more than two labels, call solveLabels instead. \n\t\tvoid solveBinaryLabels(void);\n\n\t\t/** For each pixel, get the estimated label (call either solveLabels or solveBinaryLabels before).\n\t\t \\return a list of labels, one per pixel */\n\t\tstd::vector<int> getLabels(void);\n\n\t\t/** \\return the total energy of the current labeling. */\n\t\tdouble getTotalEnergy(void);\n\n\t\t/** \\return the unary energy of the current labeling. */\n\t\tdouble computeEnergyU(void);\n\n\t\t/** \\return the pairwise energy of the current labeling. */\n\t\tdouble computeEnergyW(void);\n\n\t\t/** \\return per label unary energy. */\n\t\tstd::vector<double> getUnariesEnergies(void);\n\n\t\t/// Destructor.\n\t\t~MRFSolver(void);\n\n\tprivate:\n\n\t\t/** Build graph for the general case.\n\t\t *\\param label_iteration_id\n\t\t **/\n\t\tvoid buildGraphAlphaExp(int label_iteration_id);\n\n\t\t/** Build graph for the binary labeling case. */\n\t\tvoid buildGraphBinaryLabels(void);\n\n\t\t/** Compute the unary cost of a node.\n\t\t *\\param p the node linear index\n\t\t *\\param lp_id the node label to consider\n\t\t *\\return the total unary cost\n\t\t **/\n\t\tdouble unaryTotal(int p, int lp_id);\n\n\t\t/** Compute the pairwise cost of a pair of nodes.\n\t\t *\\param p the first node linear index\n\t\t *\\param q the second node linear index\n\t\t *\\param lp_id the first node label to consider\n\t\t *\\param lq_id the scond node label to consider\n\t\t *\\return the total pairwise cost\n\t\t **/\n\t\tdouble pairwiseTotal(int p, int q, int lp_id, int lq_id);\n\n\t\tstd::vector<int> _labList; ///< Map the label_id to the actual labels.\n\t\tstd::vector<int> _labels; ///< Assign each node its current best label_id.\n\t\tstd::vector<std::vector<int> >* _neighborMap; ///< For each variable, gives the list of its neighbor variables\n\t\tint _numIterations; ///< Number of iterations in alpha expansion.\n\t\t\n\t\tstd::vector<double> _UnaryLabelOnly; ///< Unaries only requiring label.\n\t\tstd::shared_ptr<std::function<double(int, int)> > _unaryFull; ///< Unaries requiring label and variable.\n\t\tstd::vector<std::vector< double > >  _PairwiseLabelsOnly; ///< Pairwises only requiring labels.\n\t\tstd::shared_ptr<std::function<double(int, int, int, int)> > _pairwiseFull; ///< Pairwises requiring labels and variables.\n\n\t\ttypedef Graph<double, double, double> GraphType;\n\t\tdouble _energy; ///< Total energy.\n\t\tGraphType* _graph; ///< Graph.\n\t\tbool ignoreIsolatedNode; ///< Ignore nodes with no connections.\n\t};\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/MeshTexturing.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"MeshTexturing.hpp\"\n#include \"PoissonReconstruction.hpp\"\n#include <core/system/LoadingProgress.hpp>\n\nnamespace sibr {\n\n\tMeshTexturing::MeshTexturing(unsigned int sideSize) :\n\t\t_accum(sideSize, sideSize, Vector3f(0.0f, 0.0f, 0.0f)),\n\t\t_mask(sideSize, sideSize, 0)\n\t{\n\n\t}\n\n\tvoid MeshTexturing::setMesh(const sibr::Mesh::Ptr mesh) {\n\t\t_mesh = mesh;\n\n\t\t// We need UVs else we can't do anything.\n\t\tif (!_mesh->hasTexCoords()) {\n\t\t\tSIBR_ERR << \"[Texturing] The mesh to texture needs to have UVs\" << std::endl;\n\t\t\treturn;\n\t\t}\n\t\t// We also need normals.\n\t\tif (!_mesh->hasNormals()) {\n\t\t\t_mesh->generateNormals();\n\t\t}\n\n\t\t// Create a mesh in UV space, using the UVs as 2D coordinates.\n\t\tSIBR_LOG << \"[Texturing] Generating UV mesh...\" << std::endl;\n\t\tconst int verticesCount = int(_mesh->vertices().size());\n\t\tstd::vector<sibr::Vector3f> uvVertices(verticesCount);\n\n#pragma omp parallel for\n\t\tfor (int vid = 0; vid < verticesCount; ++vid) {\n\t\t\tconst sibr::Vector2f & uvs = _mesh->texCoords()[vid];\n\t\t\tuvVertices[vid] = sibr::Vector3f(uvs[0], uvs[1], 0.0f);\n\t\t}\n\t\tMesh uvMesh(false);\n\t\tuvMesh.vertices(uvVertices);\n\t\tuvMesh.triangles(_mesh->triangles());\n\n\t\t// Init both raycasters.\n\t\t// For the world raycaster, we need to have no backface culling. \n\t\t// Our version of Embree being compiled with backface culling, we have to 'duplicate and flip' the mesh.\n\t\tMesh::Ptr doubleMesh = _mesh->clone();\n\t\tdoubleMesh->merge(_mesh->invertedFacesMesh());\n\t\t_worldRaycaster.addMesh(*doubleMesh);\n\t\t_uvsRaycaster.addMesh(uvMesh);\n\n\t}\n\n\tvoid MeshTexturing::interpolate(const sibr::RayHit & hit, sibr::Vector3f & vertex, sibr::Vector3f & normal) const {\n\t\tconst Mesh::Vertices & vertices = _mesh->vertices();\n\t\tconst Mesh::Normals & normals = _mesh->normals();\n\n\t\tconst sibr::Vector3u& tri = _mesh->triangles()[hit.primitive().triID];\n\n\t\tconst float uCoord = hit.barycentricCoord().u;\n\t\tconst float vCoord = hit.barycentricCoord().v;\n\t\tconst float wCoord = sibr::clamp(1.f - uCoord - vCoord, 0.0f, 1.0f);\n\n\t\tvertex = wCoord * vertices[tri[0]] + uCoord * vertices[tri[1]] + vCoord * vertices[tri[2]];\n\t\tnormal = (wCoord * normals[tri[0]] + uCoord * normals[tri[1]] + vCoord * normals[tri[2]]).normalized();\n\t}\n\n\tvoid MeshTexturing::reproject(const std::vector<InputCamera::Ptr> & cameras, const std::vector<sibr::ImageRGB::Ptr> & images, const float sampleRatio) {\n\t\t// We need a mesh for reprojection.\n\t\tif (!_mesh) {\n\t\t\tSIBR_WRG << \"[Texturing] No mesh available.\" << std::endl;\n\t\t\treturn;\n\t\t}\n\n\n\t\tstruct SampleInfos {\n\t\t\tsibr::Vector3f color;\n\t\t\tfloat weight;\n\t\t};\n\n\n\t\tconst int w = _accum.w();\n\t\tconst int h = _accum.h();\n\n\t\tsibr::LoadingProgress\t\t\tprogress(h, \"[Texturing] Gathering color samples from cameras\" );\n\t\tSIBR_LOG << \"[Texturing] Gathering color samples from \" << cameras.size() << \" cameras ...\" << std::endl;\n\n#pragma omp parallel for\n\t\tfor (int py = 0; py < h; ++py) {\n\t\t\tfor (int px = 0; px < w; ++px) {\n\t\t\t\t// Check if we fall inside a triangle in the UV map.\n\t\t\t\tRayHit hit;\n\t\t\t\tconst bool hasHit = sampleNeighborhood(px, py, hit);\n\n\t\t\t\t// We really have no triangle in the neighborhood to use, skip.\n\t\t\t\tif (!hasHit) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Need the smooth position and normal in the initial mesh.\n\t\t\t\tsibr::Vector3f vertex, normal;\n\t\t\t\tinterpolate(hit, vertex, normal);\n\n\t\t\t\tsibr::Vector3f avgColor(0.0f, 0.0f, 0.0f);\n\t\t\t\tfloat totalWeight = 0.0f;\n\n\t\t\t\tstd::vector<SampleInfos> samples;\n\n\t\t\t\tfor (int cid = 0; cid < cameras.size(); ++cid) {\n\t\t\t\t\tconst auto & cam = cameras[cid];\n\t\t\t\t\tif (!cam->frustumTest(vertex)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check for occlusions.\n\t\t\t\t\tsibr::Vector3f occDir = (vertex - cam->position());\n\t\t\t\t\tconst float dist = occDir.norm();\n\t\t\t\t\tif (dist > 0.0f) {\n\t\t\t\t\t\toccDir /= dist;\n\t\t\t\t\t}\n\t\t\t\t\tconst RayHit hitOcc = _worldRaycaster.intersect(Ray(cam->position(), occDir));\n\t\t\t\t\tif (hitOcc.hitSomething() && (hitOcc.dist() + 0.0001f) < dist) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reproject, read color.\n\t\t\t\t\tconst sibr::Vector2f pos = cam->projectImgSpaceInvertY(vertex).xy();\n\t\t\t\t\tconst sibr::Vector3f col = images[cid]->bilinear(pos).cast<float>().xyz();\n\t\t\t\t\t// Angle-based weight for now.\n\t\t\t\t\tconst float angleWeight = std::max(-occDir.dot(normal), 0.0f);\n\t\t\t\t\tconst float weight = angleWeight;\n\t\t\t\t\t//avgColor += weight * col;\n\t\t\t\t\t//totalWeight += weight;\n\t\t\t\t\tsamples.emplace_back();\n\t\t\t\t\tsamples.back().color = col;\n\t\t\t\t\tsamples.back().weight = weight;\n\t\t\t\t}\n\t\t\t\tif (samples.empty()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstd::sort(samples.begin(), samples.end(), [](const SampleInfos & a, const SampleInfos & b)\n\t\t\t\t{\n\t\t\t\t\treturn a.weight > b.weight;\n\t\t\t\t});\n\n\t\t\t\t// Re-weight and accumulate the samples.\n\t\t\t\t// The code is written this way to support 'best sampleRatio of all samples' approaches.\n\t\t\t\tfor(int i = 0; i < sampleRatio * samples.size(); ++i) {\n\t\t\t\t\tfloat w = samples[i].weight;\n\t\t\t\t\tw = w * w;\n\t\t\t\t\ttotalWeight += w;\n\t\t\t\t\tavgColor += w * samples[i].color;\n\t\t\t\t}\n\n\t\t\t\tif (totalWeight > 0.0f) {\n\t\t\t\t\t_accum(px, py) = avgColor / totalWeight;\n\t\t\t\t\t_mask(px, py)[0] = 255;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif( (py % 1000) == 0 )\n\t\t\t\tprogress.walk(1000);\n\t\t}\n\t}\n\n\tsibr::ImageRGB::Ptr MeshTexturing::getTexture(uint options) const {\n\n\t\tImageRGB32F output;\n\t\tif (options & Options::FLOOD_FILL) {\n\t\t\toutput = floodFill(_accum, _mask)->clone();\n\t\t}\n\t\telse if (options & Options::POISSON_FILL) {\n\t\t\toutput = poissonFill(_accum, _mask)->clone();\n\t\t}\n\t\telse {\n\t\t\toutput = _accum.clone();\n\t\t}\n\n\t\t// Convert as-is to uchar.\n\t\tImageRGB::Ptr result(new ImageRGB());\n\t\tconst cv::Mat3f outputF = output.toOpenCV();\n\t\tconst cv::Mat3b outputB = cv::Mat3b(outputF);\n\t\tresult->fromOpenCV(outputB);\n\n\t\t/// \\todo For extra large images, this might crash because of internal openCV indexing limitations.\n\t\tif (options & Options::FLIP_VERTICAL) {\n\t\t\tresult->flipH();\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tsibr::ImageRGB32F::Ptr MeshTexturing::poissonFill(const sibr::ImageRGB32F & image, const sibr::ImageL8 & mask) {\n\t\tSIBR_LOG << \"[Texturing] Poisson filling...\" << std::endl;\n\n\t\tconst cv::Mat3f guideF = cv::Mat3f(image.toOpenCV()) / 255.0f;\n\t\tcv::Mat1f maskF;\n\t\tmask.toOpenCV().convertTo(maskF, CV_32FC1, 1.0f / 255.0f);\n\n\t\tconst cv::Mat3f gradX = cv::Mat3f::zeros(guideF.rows, guideF.cols);\n\t\tconst cv::Mat3f gradY = gradX.clone();\n\n\t\tPoissonReconstruction poisson(gradX, gradY, maskF, guideF);\n\t\tpoisson.solve();\n\t\tconst cv::Mat3f resultF = 255.0f * poisson.result();\n\n\t\tImageRGB32F::Ptr filled(new ImageRGB32F());\n\t\tfilled->fromOpenCV(resultF);\n\t\treturn filled;\n\t}\n\n\n\tbool MeshTexturing::hitTest(int px, int py, RayHit & finalHit)\n\t{\n\t\t// From the UVs find the world space position.\n\t\tconst float u = (float(px) + 0.5f) / float(_accum.w());\n\t\tconst float v = (float(py) + 0.5f) / float(_accum.h());\n\t\t// Spawn a ray from (u,v,0) in the z direction.\n\t\tconst RayHit hit = _uvsRaycaster.intersect(Ray({ u, v, 1.0f }, { 0.0f,0.0f,-1.0f }));\n\t\tif (hit.hitSomething()) {\n\t\t\tfinalHit = hit;\n\t\t\treturn true;\n\t\t}\n\t\t// Just in case of backface culling, try the other side.\n\t\tconst RayHit hitBack = _uvsRaycaster.intersect(Ray({ u, v, -1.0f }, { 0.0f,0.0f,1.0f }));\n\t\tif (hitBack.hitSomething()) {\n\t\t\tfinalHit = hitBack;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tbool MeshTexturing::sampleNeighborhood(int px, int py, RayHit & hit)\n\t{\n\t\tbool hasHit = hitTest(px, py, hit);\n\t\t// Sample a 3x3 neighborhood to counter-act aliasing/interpolation later on, as long as we don't get a hit.\n\t\t// The order is important, to first fetch in line/column and then in diagonal. Sorry for the cache...\n\t\tstd::vector<int> dxs = { px, px - 1, px + 1 };\n\t\tstd::vector<int> dys = { py, py - 1, py + 1 };\n\t\tfor (const int dx : dxs) {\n\t\t\tif (hasHit) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfor (const int dy : dys) {\n\t\t\t\tif (hasHit) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Ignore center pixel, already tested.\n\t\t\t\tif (dx == px && dy == py) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thasHit = hitTest(dx, dy, hit);\n\t\t\t}\n\t\t}\n\t\treturn hasHit;\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/MeshTexturing.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include <core/graphics/Image.hpp>\n#include <core/graphics/Mesh.hpp>\n#include <core/assets/InputCamera.hpp>\n#include \"core/raycaster/Raycaster.hpp\"\n\n\nnamespace sibr {\n\n\t/** \\brief Reproject images onto a mesh using the associated camera poses, \n\t * and accumulate colors in UV-space to generate a texture map.\n\t * \\ingroup sibr_imgproc\n\t */\n\tclass SIBR_IMGPROC_EXPORT MeshTexturing\n\t{\n\tpublic:\n\n\t\t/** \\brief Export options\n\t\t */\n\t\tenum Options : uint {\n\t\t\tNONE = 0,\n\t\t\tFLIP_VERTICAL = 1, ///< Flip the final result.\n\t\t\tFLOOD_FILL = 2, ///< Perform flood filling.\n\t\t\tPOISSON_FILL = 4 ///< Perform poisson filling (slow).\n\t\t};\n\n\t\t/** Constructor.\n\t\t* \\param sideSize dimension of the texture\n\t\t*/\n\t\tMeshTexturing(unsigned int sideSize);\n\n\t\t/** Set the current mesh to texture.\n\t\t * \\param mesh the mesh to use.\n\t\t * \\warning The mesh MUST have texcoords.\n\t\t * \\note If the mesh has no normals, they will be computed.\n\t\t */\n\t\tvoid setMesh(const sibr::Mesh::Ptr mesh);\n\n\t\t/** Reproject a set of images into the texture map, using the associated cameras.\n\t\t* \\param cameras the cameras poses\n\t\t* \\param images the images to reproject\n\t\t*/\n\t\tvoid reproject(const std::vector<InputCamera::Ptr> & cameras, const std::vector<sibr::ImageRGB::Ptr> & images, const float sampleRatio = 1.0);\n\n\t\t/** Get the final result. \n\t\t* \\param options the options to apply to the generated texture map.\n\t\t*/\n\t\tsibr::ImageRGB::Ptr getTexture(uint options = NONE) const;\n\n\t\t/** Performs flood fill of an image, following a mask.\n\t\t* \\param image the image to fill\n\t\t* \\param mask mask where the zeros regions will be filled\n\t\t* \\return the filled image.\n\t\t*/\n\t\ttemplate<typename T_Type, unsigned int T_NumComp>\n\t\tstatic typename Image< T_Type, T_NumComp>::Ptr floodFill(const Image<T_Type, T_NumComp> & image, const sibr::ImageL8 & mask) {\n\n\t\t\ttypename Image< T_Type, T_NumComp>::Ptr filled(new Image< T_Type, T_NumComp>(image.w(), image.h()));\n\n\t\t\tSIBR_LOG << \"[Texturing] Flood filling...\" << std::endl;\n\t\t\t// Perform filling.\n\t\t\t// We need the empty pixels marked as non zeros, and the filled marked as zeros.\n\t\t\tcv::Mat1b flipMask = mask.toOpenCV().clone();\n\t\t\tflipMask = 255 - flipMask;\n\t\t\tcv::Mat1f dummyDist(flipMask.rows, flipMask.cols, 0.0f);\n\t\t\tcv::Mat1i labels(flipMask.rows, flipMask.cols, 0);\n\n\t\t\t// Run distance transform to obtain the IDs.\n\t\t\tcv::distanceTransform(flipMask, dummyDist, labels, cv::DIST_L2, cv::DIST_MASK_5, cv::DIST_LABEL_PIXEL);\n\n\t\t\t// Build a pixel ID to source pixel table, using the pixels in the mask.\n\t\t\tconst sibr::Vector2i basePos(-1, -1);\n\t\t\tstd::vector<sibr::Vector2i> colorTable(flipMask.rows*flipMask.cols, basePos);\n#pragma omp parallel\n\t\t\tfor (int py = 0; py < flipMask.rows; ++py) {\n\t\t\t\tfor (int px = 0; px < flipMask.cols; ++px) {\n\t\t\t\t\tif (flipMask(py, px) != 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst int label = labels(py, px);\n\t\t\t\t\tcolorTable[label] = { px,py };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now we can turn the label image into a color image again.\n#pragma omp parallel\n\t\t\tfor (int py = 0; py < flipMask.rows; ++py) {\n\t\t\t\tfor (int px = 0; px < flipMask.cols; ++px) {\n\t\t\t\t\t// Don't touch existing pixels.\n\t\t\t\t\tif (flipMask(py, px) == 0) {\n\t\t\t\t\t\tfilled(px, py) = image(px, py);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst int label = labels(py, px);\n\t\t\t\t\tfilled(px, py) = image(colorTable[label]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn filled;\n\t\t}\n\n\t\t/** Performs poisson fill of an image, following a mask.\n\t\t* \\param image the image to fill\n\t\t* \\param mask mask where the zeros regions will be filled\n\t\t* \\return the filled image.\n\t\t* \\warning This is slow for large images (>8k).\n\t\t*/\n\t\tstatic sibr::ImageRGB32F::Ptr poissonFill(const sibr::ImageRGB32F & image, const sibr::ImageL8 & mask);\n\n\tprivate:\n\n\t\t/** Test if the UV-space mesh covers a pixel of the texture map.\n\t\t* \\param px pixel x coordinate\n\t\t* \\param py pixel y coordinate\n\t\t* \\param finalHit the hit information if there is coverage\n\t\t* \\return true if there is coverage.\n\t\t*/\n\t\tbool hitTest(int px, int py, RayHit & finalHit);\n\n\t\t/** Test if the UV-space mesh approximately covers a pixel of the texture map, by sampling a neighborhood in uv-space.\n\t\t* \\param px pixel x coordinate\n\t\t* \\param py pixel y coordinate\n\t\t* \\param hit the hit information if there is coverage\n\t\t* \\return true if there is coverage.\n\t\t*/\n\t\tbool sampleNeighborhood(int px, int py, RayHit& hit);\n\n\t\t/** Compute the interpolated position and normal at the intersection point on the initial mesh.\n\t\t* \\param hit the intersection information\n\t\t* \\param vertex will contain the interpolated position\n\t\t* \\param normal will contain the interpolated normal\n\t\t*/\n\t\tvoid interpolate(const sibr::RayHit & hit, sibr::Vector3f & vertex, sibr::Vector3f & normal) const;\n\n\t\tsibr::ImageRGB32F _accum; ///< Color accumulator.\n\t\tsibr::ImageL8 _mask; ///< Mask indicating which regions of the texture map have been covered.\n\n\t\tsibr::Mesh::Ptr _mesh; ///< The original world-space mesh.\n\t\tsibr::Raycaster _worldRaycaster; ///< The world-space mesh raycaster.\n\t\tsibr::Raycaster _uvsRaycaster; ///< The uv-space mesh raycaster.\n\n\n\t};\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/PoissonReconstruction.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"PoissonReconstruction.hpp\"\n#include <queue>   \n#include <Eigen/Sparse>\n\n\nnamespace sibr {\n\n\n\nPoissonReconstruction::PoissonReconstruction(\n\tconst cv::Mat3f & gradientsX,\n\tconst cv::Mat3f & gradientsY,\n\tconst cv::Mat1f & mask,\n\tconst cv::Mat3f & img_target)\n{\n\t// Make a copy of the target as we are going to modify it.\n\t_img_target = img_target.clone();\n\t_gradientsX = gradientsX;\n\t_gradientsY = gradientsY;\n\t_mask = mask;\n\t\n}\n\nvoid PoissonReconstruction::solve(void)\n{\n\tparseMask();\n\n\t//solve Ai X=bi , Ai = A : coefs , bi : b_terms , i for each RGB\n\tstd::vector< Eigen::Triplet<double> >  coefs;\n\tstd::vector<Eigen::VectorXd> b_terms;\n\n\tfor (int k = 0; k < 3; ++k) {\n\t\tb_terms.push_back(Eigen::VectorXd::Zero(_pixels.size()));\n\t}\n\n\tfor ( int p=0; p<(int)_pixels.size(); p++ ) { \n\t\tsibr::Vector2i pos(_pixels[p]);\n\t\tstd::vector< sibr::Vector2i >  nPos ( getNeighbors(pos, _img_target.cols, _img_target.rows ));\n\t\tint num_neighbors = 0;\n\t\tcv::Vec3f new_term(0, 0, 0);\n\n\t\tfor( int n_id = 0; n_id<nPos.size(); n_id++){ \n\t\t\tsibr::Vector2i npos(nPos[n_id]);\n\n\t\t\tint nId = _pixelsId[npos.x() + _mask.cols * npos.y()];\n\t\t\tif( nId < -1 ) { continue; }\n\t\t\t++num_neighbors;\t\n\n\t\t\tif( isInMask(npos) ) { //pair inside mask\n\t\t\t\tif(nId < 0 ) { std::cerr << \"#\"; }\n\t\t\t\tcoefs.push_back(Eigen::Triplet<double>(p,nId,-1));\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t// Four possibilities:\n\t\t\t\tif(npos.x() > pos.x()){ // right pixel\n\t\t\t\t\tnew_term -= _gradientsY.at<cv::Vec3f>(pos.y(), pos.x());\n\t\t\t\t} else if (npos.x() < pos.x()){ // left pixel\n\t\t\t\t\tnew_term += _gradientsY.at<cv::Vec3f>(npos.y(), npos.x());\n\t\t\t\t} else if (npos.y() > pos.y()){ // bottom pixel\n\t\t\t\t\tnew_term -= _gradientsX.at<cv::Vec3f>(pos.y(), pos.x());\n\t\t\t\t} else if(npos.y() < pos.y()){ // top pixel\n\t\t\t\t\tnew_term += _gradientsX.at<cv::Vec3f>(npos.y(), npos.x());\n\t\t\t\t} \n\n\t\t\t} else if(!isIgnored(npos)) { //boundary\n\t\t\t\tnew_term += _img_target.at<cv::Vec3f>(npos.y(),npos.x()); // color of target\n\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tcoefs.push_back(Eigen::Triplet<double>(p,p,(double)num_neighbors)); \n\n\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\tb_terms[k](p) = new_term(k);\n\t\t}\n\t\t\t\n\t}\n\n\tEigen::SparseMatrix<double> A((int)_pixels.size(),(int)_pixels.size());\n\tA.setFromTriplets(coefs.begin(),coefs.end());\n\t\n\tstd::vector<Eigen::VectorXd> solutions;\n\tEigen::SimplicialLDLT< Eigen::SparseMatrix<double> > eigenSolver;\n\n\teigenSolver.compute(A);\n\n\tif(eigenSolver.info()!=Eigen::Success) {\n\t\tstd::cerr << \"decomp = failure\" <<std::endl;\n\t\treturn;\n\t} \n\n\tfor (int k = 0; k < 3; ++k) {\n\t\tsolutions.push_back(eigenSolver.solve(b_terms[k]));\n\t\tif (eigenSolver.info() != Eigen::Success) {\n\t\t\tstd::cerr << \"decomp = failure\" << std::endl;\n\t\t}\n\n\t\tfloat error = (float)(A*solutions[k] - b_terms[k]).squaredNorm();\n\t\tif (error > 1) {\n\t\t\tstd::cerr << \"distance to solution: \" << error << std::endl;\n\t\t}\n\t}\n\n\tfor (int p = 0; p<(int)_pixels.size(); p++) {\n\t\tsibr::Vector2i pos(_pixels[p]);\n\t\tcv::Vec3f color;\n\t\tfor (int k = 0; k < 3; ++k) {\n\t\t\tcolor(k) = std::min(1.0f, std::max((float)solutions[k][p], 0.0f));\n\t\t}\n\t\t_img_target.at<cv::Vec3f>(pos.y(), pos.x()) = color;\n\t}\n\n\tpostProcessing();\n\tpostProcessing();\n\t\n}\n\nvoid PoissonReconstruction::parseMask( void )\n{\n\t_pixels.resize(0);\n\t_boundaryPixels.resize(0);\n\t_pixelsId.resize(_mask.rows*_mask.cols,-2);\n\n\t//std::cerr << \"size : \" <<  _mask.cols << \" x \" << _mask.rows << std::endl;\n\t\n\t//first find boundaries\n\tfor( int j=0; j<(int)_mask.rows; j++ ) {\n\t\tfor( int i=0; i<(int)_mask.cols; i++) { \n\t\t\tsibr::Vector2i pos(i,j);\n\n\t\t\tif(isIgnored(pos)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif( !isInMask(pos) ) { \n\t\t\t\tstd::vector< sibr::Vector2i > neighbors = getNeighbors(pos, _img_target.cols, _img_target.rows);\n\t\t\t\tfor( int n_id = 0; n_id<neighbors.size(); n_id++){ //if at least one neighbor is in mask, considered as boundary\n\t\t\t\t\tsibr::Vector2i npos(neighbors[n_id]);\n\t\t\t\t\tif( isInMask(npos) && !isIgnored(npos)) {\n\t\t\t\t\t\t_pixelsId[i+_mask.cols*j] = -1;\n\t\t\t\t\t\t_boundaryPixels.push_back(pos);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_pixelsId[i+_mask.cols*j] = 0;\n\t\t\t}\n\n\t\t}\n\t}\n\n\tcheckConnectivity();\n\n\t//then find all valid pixels to edit\n\tfor( int i=0; i<(int)_mask.cols; i++) { \n\t\tfor( int j=0; j<(int)_mask.rows; j++ ) {\n\t\t\tsibr::Vector2i pos(i, j);\n\t\t\tif( isIgnored(pos) ||  _pixelsId[i+_mask.cols*j] < 0 ) { \n\t\t\t\tcontinue;\n\t\t\t} else {\t\n\t\t\t\t_pixelsId[i+_mask.cols*j] = (int)_pixels.size();\n\t\t\t\t_pixels.push_back(sibr::Vector2i(i,j));\t\t\t\t\n\t\t\t}\n\n\t\t}\n\t}\n\n}\n\nstd::vector< sibr::Vector2i > PoissonReconstruction::getNeighbors( sibr::Vector2i pos, int width, int height )\n{\n\tstd::vector< sibr::Vector2i > output;\n\tint offset_list_4[4][2] = {\t{0,1},{0,-1},{1,0},{-1,0} };\n\n\tfor( int i=0; i<4; i++){\n\t\tsibr::Vector2i n_pos( pos[0]+offset_list_4[i][0], pos[1]+offset_list_4[i][1]);\n\t\tint x = n_pos.x();\n\t\tint y = n_pos.y();\n\t\tif( x>=0 && x< width && y>=0 && y< height) {\n\t\t\toutput.push_back(n_pos);\n\t\t}\n\t}\n\treturn output;\n}\n\nvoid PoissonReconstruction::computeGradients(const cv::Mat3f& src, cv::Mat3f& gradX, cv::Mat3f& gradY) {\n\tgradX = cv::Mat3f(src.size());\n\tgradY = cv::Mat3f(src.size());\n\tfor (int i = 0; i < src.rows; ++i) {\n\t\tfor (int j = 0; j < src.cols; ++j) {\n\t\t\t// Compute forward differences.\n\t\t\tconst int ip = std::min(i + 1, src.rows - 1);\n\t\t\tconst int jp = std::min(j + 1, src.cols - 1);\n\t\t\t\n\t\t\tconst cv::Vec3f c = src.at<cv::Vec3f>(i, j);\n\t\t\tconst cv::Vec3f d = src.at<cv::Vec3f>(ip, j);\n\t\t\tconst cv::Vec3f r = src.at<cv::Vec3f>(i, jp);\n\t\t\tconst cv::Vec3f dX = d - c;\n\t\t\tconst cv::Vec3f dY = r - c;\n\t\t\tgradX.at<cv::Vec3f>(i, j) = dX;\n\t\t\tgradY.at<cv::Vec3f>(i, j) = dY;\n\t\t}\n\t}\n}\n\nvoid PoissonReconstruction::checkConnectivity( void )\n{\n\t// R(x) : 0 -> not connected to boundary, 1 -> connected, G(y) : 0 -> not checked, 1 -> checked\n\tsibr::ImageRGB connectivity( _mask.cols , _mask.rows);\n\t\n\tstd::queue<sibr::Vector2i> pixelsToCheck;\n\tfor(int p=0; p<(int)_boundaryPixels.size(); p++){\n\t\tsibr::Vector2i pos(_boundaryPixels[p]);\n\t\tpixelsToCheck.push(pos);\n\t\tconnectivity(pos.x(),pos.y()).x() = 1; //boundaries are connected to boundaries\n\t}\n\n\t//propagate connectivity\n\twhile(pixelsToCheck.size()>0){\n\t\tsibr::Vector2i pos(pixelsToCheck.front()); \n\t\tpixelsToCheck.pop();\n\t\tconnectivity(pos.x(),pos.y()).y() = 1;\n\n\t\tstd::vector<sibr::Vector2i> neighbors( getNeighbors(pos, _img_target.cols, _img_target.rows) );\n\t\tfor(int n_id=0; n_id<(int)neighbors.size(); n_id++){\n\t\t\tsibr::Vector2i npos(neighbors[n_id]); \n\t\t\tif( connectivity(npos.x(),npos.y()).y()==1 || isIgnored(npos)) { \n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tconnectivity(npos.x(),npos.y()).x() = 1;\n\t\t\t\tconnectivity(npos.x(),npos.y()).y() = 1;\n\t\t\t\tpixelsToCheck.push( npos );\n\t\t\t}\n\t\t}\n\t}\n\n\t//discard non connected pixel\n\tfor(int i=0; i<(int)_mask.cols; i++){\n\t\tfor(int j=0; j<(int)_mask.rows; j++){\n\t\t\tif( connectivity(i,j).x() == 0 ) {\n\t\t\t\t_pixelsId[i + _mask.cols * j] = -2;\n\t\t\t\tsibr::Vector2i coords(i,j);\n\t\t\t\tif( isInMask(coords) && !isIgnored(coords) ) {\n\t\t\t\t\t_img_target.at<cv::Vec3f>(j, i) = cv::Vec3f(0.0f,0.0f,0.0f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nvoid PoissonReconstruction::postProcessing(void)\n{\n\t//std::cerr << \"[PoissonRecons] Post Processing\" << std::endl;\n\t/*\n\t * for( int j=0; j<(int)_mask.rows; j++ ) {\n\t\tfor( int i=0; i<(int)_mask.cols; i++) { \n\t\t\tsibr::Vector2i pos(i,j);\n\t\t\tif( !isInMask(pos) ) { \n\t */\n#pragma omp parallel for\n\tfor (int j = 0; j < (int)_mask.rows; j++) {\n\t\tfor (int i = 0; i < (int)_mask.cols; i++) {\n\t\t\t// mask: 0 -> in reconstruction, 1 -> keep fixed.\n\t\t\t//return (_mask.at<float>(pos.y(), pos.x())<0.5);\n\t\t\tif (std::abs(_mask.at<float>(j,i)) < 0.5f && cv::norm(_img_target.at<cv::Vec3f>(j,i)) == 0.0f) {\n\t\t\t\tstd::vector<sibr::Vector2i> neighbors(getNeighbors(sibr::Vector2i(i, j), _mask.cols, _mask.rows));\n\t\t\t\tstd::vector<bool> neighIsBlack(neighbors.size(), false);\n\t\t\t\tint black_neighbor = false;\n\t\t\t\tfor (uint n_id = 0; n_id < neighbors.size() && !black_neighbor; n_id++) {\n\t\t\t\t\tsibr::Vector2i npos(neighbors[n_id]);\n\t\t\t\t\tif (cv::norm(_img_target.at<cv::Vec3f>(npos.y(), npos.x())) == 0.0f) {\n\t\t\t\t\t\tneighIsBlack[n_id] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!black_neighbor && neighbors.size() > 0) {\n\t\t\t\t\tcv::Vec3f new_color(0, 0, 0);\n\t\t\t\t\tint count = 0;\n\t\t\t\t\tfor (uint n_id = 0; n_id < neighbors.size(); n_id++) {\n\t\t\t\t\t\tif(neighIsBlack[n_id]) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsibr::Vector2i npos(neighbors[n_id]);\n\t\t\t\t\t\tnew_color += _img_target.at<cv::Vec3f>(npos.y(), npos.x());\n\t\t\t\t\t\t++count;\n\t\t\t\t\t}\n\t\t\t\t\t_img_target.at<cv::Vec3f>(j,i) = ((1.0f / (float)count)*new_color);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nbool PoissonReconstruction::isInMask( sibr::Vector2i & pos)\n{\n\tconst float maskVal = _mask.at<float>(pos.y(), pos.x());\n\treturn (std::abs(maskVal) < 0.5f);\n}\n\nbool PoissonReconstruction::isIgnored(sibr::Vector2i & pos)\n{\n\treturn (_mask.at<float>(pos.y(), pos.x()) <= -0.5f);\n}\n\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/PoissonReconstruction.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include <core/graphics/Image.hpp>\n\n\nnamespace sibr {\n\n\t/** \\brief Performs gradient integration for tasks such as Poisson-based inpainting, smooth filling, ...\n\t * See the constructor for additional details.\n\t * \\ingroup sibr_imgproc\n\t */\n\tclass SIBR_IMGPROC_EXPORT PoissonReconstruction\n\t{\n\tpublic:\n\n\t\t/** Initialize reconstructor for a given problem. Gradients and target are expected to be RGB32F, mask is L32F.\n\t\t  In the mask, pixels with value = 0 are to be inpainted, value > 0.5 are pixels to be used as source/constraint,  value < -0.5 are pixels to be left unchanged and unused.\n\t\t  To compute the gradients from an image, prefer using PoissonReconstruction::computeGradients (weird results have been observed when using cv::Sobel and similar).\n\t\t\\param gradientsX the RGB32F horizontal color gradients to integrate along\n\t\t\\param gradientsY the RGB32F vertical color gradients to integrate along\n\t\t\\param mask the L32F mask denoting how each pixel should be treated. \n\t\t\\param img_target the RGB32 image to use as a source constraint (will be copied internally)\n\t\t**/\n\t\tPoissonReconstruction(\n\t\t\tconst cv::Mat3f & gradientsX,\n\t\t\tconst cv::Mat3f & gradientsY,\n\t\t\tconst cv::Mat1f & mask,\n\t\t\tconst cv::Mat3f & img_target\n\t\t);\n\n\t\t/** Solve the reconstruction problem. */\n\t\tvoid solve(void);\n\n\t\t/** \\return the result of the reconstruction */\n\t\tcv::Mat result() const { return _img_target; }\n\n\t\t/** helper to get the pixel coordinates of valid pixels for agiven pixel and image size.\n\t\t *\\param pos the central pixel position\n\t\t *\\param width number of columns/width\n\t\t *\\param height number of rows/height\n\t\t *\\return a vector containing neighboring pixels coordinates.\n\t\t */\n\t\tstatic std::vector< sibr::Vector2i > getNeighbors(sibr::Vector2i pos, int width, int height);\n\n\t\t/** Compute the gradients of an RGB32F matrix using forward finite differences.\n\t\t *\\param src the matrix to compute the gradients of\n\t\t *\\param gradX will contain the horizontal gradients\n\t\t *\\param gradY will contain the vertical gradients\n\t\t */\n\t\tstatic void computeGradients(const cv::Mat3f & src, cv::Mat3f & gradX, cv::Mat3f & gradY);\n\t\t\n\tprivate:\n\t\tcv::Mat _img_target; ///< Main image.\n\t\tcv::Mat _gradientsX; ///< Gradients.\n\t\tcv::Mat _gradientsY; ///< Gradients.\n\t\tcv::Mat _mask; ///< Mask guide.\n\n\t\tstd::vector<sibr::Vector2i> _pixels; ///< list of valid pixels.\n\t\tstd::vector<sibr::Vector2i> _boundaryPixels; ///< List of boundary pixels.\n\t\tstd::vector<int > _pixelsId; ///< Pixel IDs list.\n\t\tstd::vector<std::vector<int> > _neighborMap; ///< Each pixel valid neighbors.\n\n\t\t/** Parse the mask and the additional label condition into a list of pixels to modified and boundaries conditions. */\n\t\tvoid parseMask(void);\n\n\t\t/** Make sure that every modified pixel is connected to some boundary condition, all non connected pixels are discarded. */\n\t\tvoid checkConnectivity(void);\n\n\t\t/** Heuristic to fill isolated black pixels. */\n\t\tvoid postProcessing(void);\n\n\t\t/** Are we in the mask (ie mask==0). \n\t\t\\param pos the pixel to test for\n\t\t\\return true if mask(pix) == 0\n\t\t*/\n\t\tbool isInMask(sibr::Vector2i & pos);\n\n\t\t/* Are we ignored (ie mask==-1).\n\t\t\\param pos the pixel to test for\n\t\t\\return true if mask(pix) == -1\n\t\t*/\n\t\tbool isIgnored(sibr::Vector2i & pos);\n\n\t};\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/imgproc/sibr_imgproc.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_imgproc sibr_imgproc\n\n\t\\brief Image processing utilities.\n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nproject(sibr_raycaster)\r\n\r\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\r\nsource_group(\"Source Files\" FILES ${SOURCES})\r\n\r\n## Specify target rules\r\nadd_library(${PROJECT_NAME} SHARED ${SOURCES} ${LIBS_SOURCES})\r\n\r\ninclude_directories(\r\n\t${Boost_INCLUDE_DIRS}\r\n\t${nanoflann_INCLUDE_DIRS}\r\n)\r\nif(WIN32)\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\tOpenMP::OpenMP_CXX\r\n\tembree3\r\n\tsibr_graphics\r\n\tsibr_assets\r\n\tnanoflann\r\n)\r\nelse()\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\tOpenMP::OpenMP_CXX\r\n\tembree\r\n# CLUSTER\r\n#\t/data/graphdeco/share/tbb/lib64/libtbb.so\r\n\tsibr_graphics\r\n\tsibr_assets\r\n\tnanoflann\r\n)\r\nendif()\r\n\r\nadd_definitions( -DSIBR_RAYCASTER_EXPORTS -DBOOST_ALL_DYN_LINK  )\r\n\r\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\r\n\r\n## High level macro to install in an homogen way all our ibr targets\r\ninclude(install_runtime)\r\nibr_install_target(${PROJECT_NAME}\r\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\r\n)\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/CameraRaycaster.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <boost/filesystem/path.hpp>\n#include <core/system/Vector.hpp>\n#include \"core/raycaster/CameraRaycaster.hpp\"\n\n\nnamespace sibr\n{\n\n\t/*static*/ void\tCameraRaycaster::computePixelDerivatives( const sibr::InputCamera& cam, \n\t\tsibr::Vector3f& dx, sibr::Vector3f& dy, sibr::Vector3f& upLeftOffset )\n\t{\n\t\tsibr::Vector3f dir = cam.dir();\n\t\tsibr::Vector3f up = cam.up();\n\t\tfloat aspect = cam.aspect();\n\n\t\tsibr::Vector2f screenWorldSize;\n\t\t{ \n\t\t\t// screenWorldSize.y = 2*tan(fov/2) because screenDist = 1 (indeed\n\t\t\t// we use normalized cam.dir() to build this derivative)\n\t\t\tfloat heightWorldSize = 2.f*tanf(cam.fovy()/2.f);\n\t\t\tscreenWorldSize = sibr::Vector2f( heightWorldSize*aspect, heightWorldSize ); \n\t\t}\n\n\t\tsibr::Vector3f right = cross(cam.dir(), up);\n\t\tsibr::Vector3f rowSize = right*screenWorldSize[0];\n\t\tsibr::Vector3f colSize = -up*screenWorldSize[1];\n\n\t\tdx = rowSize / (float)cam.w();\n\t\tdy = colSize / (float)cam.h();\n\n\t\tupLeftOffset = dir - rowSize/2.f - colSize/2.f;\n\t\t//upLeftOffset = upLeftOffset + dx/2.f + dy/2.f;\t// Used to start from the center of a pixel\n\t\tupLeftOffset += cam.position();\n\t}\n\n\tvoid CameraRaycaster::computeClippingPlanes(const sibr::Mesh & mesh, std::vector<InputCamera::Ptr>& cams, std::vector<sibr::Vector2f> & nearsFars)\n\t{\n\t\t\n\t\tnearsFars.clear();\n\t\tsibr::Raycaster raycaster;\n\t\traycaster.init();\n\t\tsibr::Mesh::Ptr localMesh = mesh.invertedFacesMesh2();\n\t\traycaster.addMesh(*localMesh);\n\t\tSIBR_LOG << \" [CameraRaycaster] computeAutoClippingPlanes() : \" << std::flush;\n\n\t\tint deltaPix = 15;\n\n\t\tnearsFars.resize(cams.size());\n\n\t\t#pragma omp parallel for\n\t\tfor (int cam_id = 0; cam_id < (int)cams.size(); ++cam_id) {\n\t\t\tsibr::InputCamera & cam = *cams[cam_id];\n\n\t\t\tsibr::Vector3f dx, dy, upLeftOffset;\n\t\t\tsibr::CameraRaycaster::computePixelDerivatives(cam, dx, dy, upLeftOffset);\n\t\t\tsibr::Vector3f camZaxis = cam.dir().normalized();\n\t\t\tfloat maxD = -1.0f, minD = -1.0f;\n\n\t\t\tfor (int i = 0; i < (int)cam.h(); i += deltaPix) {\n\t\t\t\tfor (int j = 0; j < (int)cam.w(); j += deltaPix) {\n\t\t\t\t\tsibr::Vector3f worldPos = ((float)j + 0.5f)*dx + ((float)i + 0.5f)*dy + upLeftOffset;\n\t\t\t\t\tsibr::Vector3f dir = (worldPos - cam.position()).normalized();\n\n\t\t\t\t\tsibr::RayHit hit = raycaster.intersect(sibr::Ray(cam.position(), dir));\n\n\t\t\t\t\tif (!hit.hitSomething()) { continue; }\n\n\t\t\t\t\tfloat dist = hit.dist();\n\n\t\t\t\t\tfloat clipDist = dist * std::abs(dir.dot(camZaxis));\n\n\t\t\t\t\tmaxD = (maxD<0 || clipDist > maxD ? clipDist : maxD);\n\t\t\t\t\tminD = (minD<0 || clipDist < minD ? clipDist : minD);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tfloat znear = 0.5f*minD;\n\t\t\tfloat zfar = 2.0f*maxD;\n\n\t\t\twhile (zfar / znear < 100.0f) {\n\t\t\t\tzfar *= 1.1f;\n\t\t\t\tznear *= 0.9f;\n\t\t\t}\n\n\t\t\tcam.znear(znear);\n\t\t\tcam.zfar(zfar);\n\n\t\t\tnearsFars[cam_id] = sibr::Vector2f(znear, zfar);\n\n\t\t\tstd::cout << cam_id << \" \" << std::flush;\n\t\t}\n\t\tstd::cout << \" done.\" << std::endl;\n\n\t\t\n\t}\n\n\n\tsibr::Vector3f CameraRaycaster::computeRayDir( const sibr::InputCamera& cam, const sibr::Vector2f & pixel )\n\t{\n\t\tsibr::Vector3f dx, dy, upLeftOffset;\n\t\tCameraRaycaster::computePixelDerivatives(cam, dx, dy, upLeftOffset);\n\n\t\tsibr::Vector3f worldPos = pixel.x()*dx + pixel.y()*dy + upLeftOffset; //at dist 1 from cam center\n\t\treturn (worldPos - cam.position()).normalized();\n\t}\n\n\tbool\tCameraRaycaster::init( void )\n\t{\n\t\treturn _raycaster.init();\n\t}\n\n\tvoid\tCameraRaycaster::addMesh( const sibr::Mesh& mesh )\n\t{\n\t\t_raycaster.addMesh(mesh);\n\t}\n\n\tvoid\tCameraRaycaster::castForEachPixel( const sibr::InputCamera& cam, ICameraRaycasterProcessor* processors[], uint nbProcessors, const std::string& optLogMsg )\n\t{\n\t\t//SIBR_PROFILESCOPE;\n\n\t\t// Check there is no NULL process\n\t\tfor (uint i = 0; i < nbProcessors; ++i)\n\t\t\tif (processors[i] == nullptr)\n\t\t\tSIBR_ERR << \"camera-raycaster process NULL detected\" << std::endl;\n\n\t\tsibr::Vector3f dx, dy, upLeftOffset;\n\t\tCameraRaycaster::computePixelDerivatives(cam, dx, dy, upLeftOffset);\n\n\t\t//sibr::LoadingProgress\tprogress(cam.w()*cam.h(), optLogMsg);\n\t\t(void)optLogMsg;\n\n\t\t// For each pixel of the camera's image\n\t\tfor (uint py = 0; py < cam.h(); ++py)\n\t\t{\n\t\t\tfor (uint px = 0; px < cam.w(); ++px)\n\t\t\t{ \n\t\t\t\t//progress.walk();\n\t\t\t\tsibr::Vector3f worldPos = (float)px*dx + (float)py*dy + upLeftOffset;\n\t\t\t\t// Cast a ray\n\t\t\t\tsibr::Vector3f dir =  worldPos - cam.position();\n\t\t\t\tRayHit hit = _raycaster.intersect(Ray( cam.position(), dir));\n\n\t\t\t\tfor (uint i = 0; i < nbProcessors; ++i)\n\t\t\t\t\tprocessors[i]->onCast(px, py, hit);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tRaycastingCamera::RaycastingCamera(const sibr::InputCamera & cam) : sibr::InputCamera(cam) {\n\t\tCameraRaycaster::computePixelDerivatives(*this, dx, dy, upLeftOffsetMinusPos);\n\t\tupLeftOffsetMinusPos -= position();\n\n\t\tstd::vector<sibr::Vector2f> corners = {\n\t\t\t{-1,-1}, {-1, 1}, {1, 1}, {1, -1}\n\t\t};\n\t\tstd::vector<sibr::Vector3f> pts_near, pts_far;\n\t\tfor (const auto & c : corners) {\n\t\t\tpts_near.push_back(unproject({ c[0], c[1], -1 }));\n\t\t\tpts_far.push_back(unproject({ c[0], c[1], +1 }));\n\t\t}\n\n\t\tfrustum_planes = {\n\t\t\t//HPlane::Through(pts_near[0], pts_near[3], pts_near[2]), // near_plane,\n\t\t\tHPlane::Through(pts_far[0], pts_far[2], pts_far[3]),\t// far_plane\n\t\t\tHPlane::Through(pts_near[2], pts_far[2], pts_far[1]),\t// top_plane, \n\t\t\tHPlane::Through(pts_near[3], pts_near[0], pts_far[3]),\t// bottom_plane, \n\t\t\tHPlane::Through(pts_far[0], pts_near[0], pts_far[1]),\t// left_plane\n\t\t\tHPlane::Through(pts_near[3], pts_far[3], pts_far[2])\t// right_plane;\n\t\t};\n\n\t\t//sibr::Vector3f pt = unproject({ 0, 0, 0 });\n\t\t//std::cout << \" debug planes : \";\n\t\t//for (uint i = 0; i < frustum_planes.size(); ++i) {\n\t\t//\tstd::cout << sibr::Vector4f(pt[0], pt[1], pt[2], 1).dot(frustum_planes[i].coeffs()) << \" \";\n\t\t//}\n\t\t//std::cout << std::endl;\n\n\t}\n\n\tsibr::Vector3f RaycastingCamera::rayDirNotNormalized(const sibr::Vector2f & pixel) const\n\t{\n\t\treturn pixel.x()*dx + pixel.y()*dy + upLeftOffsetMinusPos;\n\t}\n\n\tsibr::Vector3f RaycastingCamera::rayDir(const sibr::Vector2f & pixel) const\n\t{\n\t\treturn rayDirNotNormalized(pixel).normalized();\n\t}\n\n\tRay RaycastingCamera::getRay(const sibr::Vector2f & pixel) const\n\t{\n\t\treturn Ray(position(), rayDir(pixel));\n\t}\n\n\tsibr::Vector2f RaycastingCamera::rayProjection(const Line3 & line) const\n\t{\n\t\tsibr::Vector2f out(-1, -1);\n\t\tuint id = 0;\n\t\tif (isInsideFrustum(line.origin())) {\n\t\t\tout[id] = 0;\n\t\t\t++id;\n\t\t}\n\n\t\tstd::vector<float> intersection_params;\n\t\tintersection_params.reserve(frustum_planes.size());\n\n\t\tfor (uint i = 0; i < frustum_planes.size(); ++i) {\n\t\t\tfloat param = line.intersectionParameter(frustum_planes[i]);\n\t\t\tif (param >= 0) {\n\t\t\t\tintersection_params.push_back(param);\n\t\t\t}\n\t\t}\n\n\t\tstd::sort(intersection_params.begin(), intersection_params.end());\n\t\tfor (float t : intersection_params) {\n\t\t\tif (isInsideFrustum(line.pointAt(t))) {\n\t\t\t\tout[id] = t;\n\t\t\t\tif (id == 1) {\n\t\t\t\t\treturn out;\n\t\t\t\t}\n\t\t\t\t++id;\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tbool RaycastingCamera::isInsideFrustum(const sibr::Vector3f & pt, float eps) const\n\t{\n\t\tfor (uint i = 0; i < frustum_planes.size(); ++i) {\n\t\t\tif (sibr::Vector4f(pt[0], pt[1], pt[2], 1).dot(frustum_planes[i].coeffs()) < -eps) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tsibr::Vector2f RaycastingCamera::projectImg_outside_frustum_correction(const Vector3f & pt3d) const\n\t{\n\t\tsibr::Vector3f pos2dGL = project(pt3d);\n\n\t\tif ((pt3d - position()).dot(dir()) < 0) {\n\t\t\tpos2dGL.x() = -pos2dGL.x();\n\t\t} else {\n\t\t\tpos2dGL.y() = -pos2dGL.y();\n\t\t}\n\t\treturn 0.5f*(pos2dGL.xy() + sibr::Vector2f(1, 1)).cwiseProduct(sibr::Vector2f(w(), h()));\n\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/CameraRaycaster.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <array>\n# include <core/graphics/Image.hpp>\n# include <core/assets/InputCamera.hpp>\n# include \"core/raycaster/Config.hpp\"\n# include \"core/raycaster/Raycaster.hpp\"\n\nnamespace sibr\n{\n\n\t/** Used to process casted rays from image pixels. Implement\n\t this interface and write your custom behavior.\n\t (e.g. see CameraRaycasterProcessor.hpp for built-in processor)\n\t \\ingroup sibr_raycaster\n\t*/\n\tclass SIBR_RAYCASTER_EXPORT ICameraRaycasterProcessor\n\t{\n\tpublic:\n\n\t\t/// Destructor.\n\t\tvirtual ~ICameraRaycasterProcessor( void ) {}\n\n\t\t/** Called for each casted ray (that hit or not).\n\t\t\\param px pixel source pixel x coordinate\n\t\t\\param py pixel source pixel y coordinate\n\t\t\\param hit the (potential) hit information\n\t\t*/\n\t\tvirtual void\tonCast( uint px, uint py, const RayHit& hit ) = 0;\n\n\t};\n\n\t/**  Used for casting each pixel of an image into a raycaster scene.\n\t \\ingroup sibr_raycaster\n\t*/\n\tclass SIBR_RAYCASTER_EXPORT CameraRaycaster\n\t{\n\tpublic:\n\n\t\t/// Constructor.\n\t\tCameraRaycaster( void ) { }\n\n\t\t/// Initialize (will be done when adding a mesh).\n\t\tbool\tinit( void );\n\n\t\t/** Add a mesh to the raycaster\n\t\t \\param mesh the mesh\n\t\t */\n\t\tvoid\taddMesh( const sibr::Mesh& mesh );\n\n\t\t/** For each image pixel, send a ray and compute data using the provided processors.\n\t\t\\param cam the source camera\n\t\t\\param processors a list of processors to call for each cast ray\n\t\t\\param nbProcessors the number of processors in the list\n\t\t\\param optLogMessage log message\n\t\t*/\n\t\tvoid\tcastForEachPixel( const sibr::InputCamera& cam, ICameraRaycasterProcessor* processors[], uint nbProcessors,\n\t\t\t\t\t\t\t\t\tconst std::string& optLogMessage=\"Executing camera raycasting\");\n\n\t\t/** This function returns the step (in both x- and y-coordinates) between each pixel in the world\n\t\t space. Thus, if go through each pixel of an can image but you need their 3d world position,\n\t\t using this function you can get it using:\n\t\t\t\tpixel3d = dx*pixel2d.x + dy*pixel2d.y + upLeftOffset\n\t\t where   dx is the step between each horizontal pixel,\n\t\t         dy is the step between each vertical pixel,\n\t\t\\param cam the source camera\n\t\t\\param dx will contain the horizontal step\n\t\t\\param dy will contain the vertical step\n\t\t\\param upLeftOffset will contain the 3D coordinates of the top-left pixel\n\t\t*/\n\t\tstatic void\tcomputePixelDerivatives( const sibr::InputCamera& cam, sibr::Vector3f& dx, sibr::Vector3f& dy, sibr::Vector3f& upLeftOffset );\n\n\t\t/**\tCompute the ray direction from the camera position to a given pixel.\n\t\t\\param cam the source camera\n\t\t\\param pixel the pixel in [0,w-1]x[0,h-1]\n\t\t\\return the ray direction from the camera position to the center of the input pixel.\n\t\t*/\n\t\tstatic sibr::Vector3f computeRayDir( const sibr::InputCamera& cam, const sibr::Vector2f & pixel );\n\n\t\t/** Estimate the clipping planes for a set of cameras so that the mesh is entirely visible in each camera.\n\t\t\\param mesh the mesh to visualize\n\t\t\\param cams the list of cameras\n\t\t\\param nearsFars will contain the near and far plane of each camera\n\t\t*/\n\t\tstatic void computeClippingPlanes(const sibr::Mesh & mesh, std::vector<InputCamera::Ptr>& cams, std::vector<sibr::Vector2f> & nearsFars);\n\n\t\t/// \\return the internal raycaster\n\t\tRaycaster&\t\t\traycaster( void )\t\t\t{ return _raycaster; }\n\t\t/// \\return the internal raycaster\n\t\tconst Raycaster&\traycaster( void ) const \t{ return _raycaster; }\n\n\tprivate:\n\n\t\tRaycaster\t\t\t\t\t\t\t\t\t_raycaster; ///< Internal raycaster.\n\t};\n\n\t/** A raycasting camera is an input camera augmented with additional casting and frustum helpers.\n\t\\ingroup sibr_raycaster\n\t*/\n\tclass SIBR_RAYCASTER_EXPORT RaycastingCamera : public sibr::InputCamera {\n\t\tSIBR_CLASS_PTR(RaycastingCamera);\n\tpublic:\n\t\tusing HPlane = Eigen::Hyperplane<float, 3>;\n\t\tusing Line3 = Eigen::ParametrizedLine<float, 3>;\n\n\t\t/** Constructor from an InputCamera\n\t\t\\param cam the camera\n\t\t*/\n\t\tRaycastingCamera(const sibr::InputCamera & cam);\n\n\t\t/**\tCompute the unormalized ray direction from the camera position to a given pixel.\n\t\t\\param pixel the pixel in [0,w-1]x[0,h-1]\n\t\t\\return the ray direction from the camera position to the center of the input pixel.\n\t\t*/\n\t\tsibr::Vector3f rayDirNotNormalized(const sibr::Vector2f & pixel) const;\n\n\t\t/**\tCompute the normalized ray direction from the camera position to a given pixel.\n\t\t\\param pixel the pixel in [0,w-1]x[0,h-1]\n\t\t\\return the ray direction from the camera position to the center of the input pixel.\n\t\t*/\n\t\tsibr::Vector3f rayDir(const sibr::Vector2f & pixel) const;\n\n\t\t/**\tGenerate the ray going from the camera position to a given pixel.\n\t\t\\param pixel the pixel in [0,w-1]x[0,h-1]\n\t\t\\return the ray from the camera position to the center of the input pixel.\n\t\t*/\n\t\tRay getRay(const sibr::Vector2f & pixel) const;\n\n\t\t/** Compute the (up to) two intersections of a oriented line with the camera frustum.\n\t\t\\param line the parametrized oriented line to test\n\t\t\\return the intersection parameters of the two intersection points with the frustum.\n\t\t*/\n\t\tsibr::Vector2f rayProjection(const Line3 & line) const;\n\n\t\t/** Check if a point is in the camera frustum.\n\t\t\\param pt the 3D point to test\n\t\t\\param eps the tolerance threshold\n\t\t\\return true if the point is inside\n\t\t*/\n\t\tbool isInsideFrustum(const sibr::Vector3f & pt, float eps = 0.0001) const;\n\n\t\t/** Project a 3D point on the image plane, including points behind the camera (horizontal flip).\n\t\t\\param pt3d the 3d point\n\t\t\\return the pixel coordinates in [0,w]x(0,h]\n\t\t*/\n\t\tsibr::Vector2f projectImg_outside_frustum_correction(const Vector3f& pt3d) const;\n\n\t\tsibr::Vector3f dx, dy, upLeftOffsetMinusPos; ///< Camera raycasting parameters.\n\n\t\tstd::vector<HPlane> frustum_planes; ///< Frustum planes: near, far, top, bottom, left, right\t\n\t};\n\n\t///// DEFINITIONS /////\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Config.hpp>\n\n\n# ifdef SIBR_OS_WINDOWS\n#  ifdef SIBR_STATIC_RAYCASTER_DEFINE\n#    define SIBR_RAYCASTER_EXPORT\n#    define SIBR_NO_RAYCASTER_EXPORT\n#  else\n#    ifndef SIBR_RAYCASTER_EXPORT\n#      ifdef SIBR_RAYCASTER_EXPORTS\n          /* We are building this library */\n#        define SIBR_RAYCASTER_EXPORT __declspec(dllexport)\n#      else\n          /* We are using this library */\n#        define SIBR_RAYCASTER_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#  endif\n# else\n#  define SIBR_RAYCASTER_EXPORT\n# endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Intersector2D.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"Intersector2D.h\"\n#include <core/graphics/Shader.hpp>\n#include <core/graphics/RenderTarget.hpp>\n#include <core/graphics/Mesh.hpp>\n\nnamespace sibr {\n\n\n\tfloat Intersector2D::sign(sibr::Vector2f p1, sibr::Vector2f p2, sibr::Vector2f p3)\n\t{\n\t\treturn (p1.x() - p3.x()) * (p2.y() - p3.y()) - (p2.x() - p3.x()) * (p1.y() - p3.y());\n\t}\n\n\tbool Intersector2D::PointInTriangle(sibr::Vector2f pt, sibr::Vector2f v1, sibr::Vector2f v2, sibr::Vector2f v3)\n\t{\n\t\tbool b1, b2, b3;\n\n\t\tb1 = sign(pt, v1, v2) < 0.0f;\n\t\tb2 = sign(pt, v2, v3) < 0.0f;\n\t\tb3 = sign(pt, v3, v1) < 0.0f;\n\n\t\treturn ((b1 == b2) && (b2 == b3));\n\t}\n\n\t//Segment are a->b and c->d\n\tbool Intersector2D::LineLineIntersect(sibr::Vector2f a, sibr::Vector2f b, sibr::Vector2f c, sibr::Vector2f d)\n\t{\n\t\tfloat den = ((d.y() - c.y())*(b.x() - a.x()) - (d.x() - c.x())*(b.y() - a.y()));\n\t\tfloat num1 = ((d.x() - c.x())*(a.y() - c.y()) - (d.y() - c.y())*(a.x() - c.x()));\n\t\tfloat num2 = ((b.x() - a.x())*(a.y() - c.y()) - (b.y() - a.y())*(a.x() - c.x()));\n\t\tfloat u1 = num1 / den;\n\t\tfloat u2 = num2 / den;\n\n\t\tif (den == 0 && num1 == 0 && num2 == 0)\n\t\t\t/* The two lines are coincidents */\n\t\t\treturn false;\n\t\tif (den == 0)\n\t\t\t/* The two lines are parallel */\n\t\t\treturn false;\n\t\tif (u1 < 0 || u1 > 1 || u2 < 0 || u2 > 1)\n\t\t\t/* Lines do not collide */\n\t\t\treturn false;\n\t\t/* Lines DO collide */\n\t\treturn true;\n\t}\n\n\tbool Intersector2D::TriTriIntersect(sibr::Vector2f t0_0, sibr::Vector2f t0_1, sibr::Vector2f t0_2,\n\t\tsibr::Vector2f t1_0, sibr::Vector2f t1_1, sibr::Vector2f t1_2) {\n\n\t\t//Test if lines intersects\n\t\tif (LineLineIntersect(t0_0, t0_1, t1_0, t1_1)) { return true; };\n\t\tif (LineLineIntersect(t0_0, t0_1, t1_0, t1_2)) { return true; };\n\t\tif (LineLineIntersect(t0_0, t0_1, t1_1, t1_2)) { return true; };\n\t\tif (LineLineIntersect(t0_0, t0_2, t1_0, t1_1)) { return true; };\n\t\tif (LineLineIntersect(t0_0, t0_2, t1_0, t1_2)) { return true; };\n\t\tif (LineLineIntersect(t0_0, t0_2, t1_1, t1_2)) { return true; };\n\t\tif (LineLineIntersect(t0_1, t0_2, t1_0, t1_1)) { return true; };\n\t\tif (LineLineIntersect(t0_1, t0_2, t1_0, t1_2)) { return true; };\n\t\tif (LineLineIntersect(t0_1, t0_2, t1_1, t1_2)) { return true; };\n\n\n\t\t//Test if one point in triangle :\n\t\tif (PointInTriangle(t0_0, t1_0, t1_1, t1_2) ||\n\t\t\tPointInTriangle(t0_1, t1_0, t1_1, t1_2) ||\n\t\t\tPointInTriangle(t0_2, t1_0, t1_1, t1_2) ||\n\t\t\tPointInTriangle(t1_0, t0_0, t0_1, t0_2) ||\n\t\t\tPointInTriangle(t1_1, t0_0, t0_1, t0_2) ||\n\t\t\tPointInTriangle(t1_2, t0_0, t0_1, t0_2)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tbool Intersector2D::QuadQuadIntersect(sibr::Vector2f q0_0, sibr::Vector2f q0_1, sibr::Vector2f q0_2, sibr::Vector2f q0_3,\n\t\tsibr::Vector2f q1_0, sibr::Vector2f q1_1, sibr::Vector2f q1_2, sibr::Vector2f q1_3)\n\t{\n\t\tif (TriTriIntersect(\n\t\t\tq0_0, q0_1, q0_3,\n\t\t\tq1_0, q1_1, q1_3)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (TriTriIntersect(\n\t\t\tq0_0, q0_1, q0_3,\n\t\t\tq1_1, q1_2, q1_3)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (TriTriIntersect(\n\t\t\tq0_1, q0_2, q0_3,\n\t\t\tq1_0, q1_1, q1_3)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (TriTriIntersect(\n\t\t\tq0_1, q0_2, q0_3,\n\t\t\tq1_1, q1_2, q1_3)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tstd::vector<std::vector<bool>> Intersector2D::frustrumQuadsIntersect(std::vector<quad> & quads, const std::vector<InputCamera::Ptr> & cams)\n\t{\n\t\tstd::clock_t previous;\n\t\tdouble duration;\n\t\tprevious = std::clock();\n\n\t\tstd::vector<std::vector<bool>> result(cams.size(), std::vector<bool>(quads.size(), false));\n\n\t\tsibr::GLShader\t\t\t\tshader;\n\t\tsibr::GLParameter\t\t\tshader_proj;\n\n\n\t\tstd::string vertexShader =\n\t\t\t\"#version 420\\n\"\n\t\t\t\"uniform mat4 MVP;\\n\"\n\t\t\t\"layout(location = 0) in vec3 in_vertex;\\n\"\n\t\t\t\"void main(void) {\\n\"\n\t\t\t\"\tgl_Position = MVP * vec4(in_vertex, 1.0);\\n\"\n\t\t\t\"}\\n\";\n\n\n\t\tstd::string fragmentShader =\n\t\t\t\"#version 420\\n\"\n\t\t\t\"out float out_color;\\n\"\n\t\t\t\"void main(void) {\\n\"\n\t\t\t\"\t\tout_color = 1.0;\\n\"\n\t\t\t\"}\\n\";\n\n\t\tshader.init(\"quadShader\", vertexShader, fragmentShader);\n\t\tshader_proj.init(shader, \"MVP\");\n\n\t\tstd::shared_ptr<sibr::RenderTargetLum> rtLum;\n\n\t\tfor (int c = 0; c < cams.size(); c++) {\n\t\t\tconst sibr::InputCamera & cam = *cams[c];\n\n\t\t\tfloat ratio = (float)cam.h() / (float)cam.w();\n\t\t\tint w = std::min(400, (int)cam.w());\n\t\t\tint h = int(w*ratio);\n\n\t\t\trtLum.reset(new sibr::RenderTargetLum(w, h));\n\n\t\t\tfor (int q = 0; q < quads.size(); q++) {\n\n\t\t\t\tquad & quad = quads[q];\n\n\t\t\t\tsibr::ImageL8 imLum;\n\n\t\t\t\tstd::shared_ptr<sibr::Mesh> quadMesh = std::shared_ptr<sibr::Mesh>(new sibr::Mesh(true));\n\n\t\t\t\tstd::vector<sibr::Vector3f> vertexBuffer;\n\t\t\t\tvertexBuffer.push_back(quad.q1);\n\t\t\t\tvertexBuffer.push_back(quad.q2);\n\t\t\t\tvertexBuffer.push_back(quad.q3);\n\t\t\t\tvertexBuffer.push_back(quad.q4);\n\n\t\t\t\tint indices[12] = { 0, 1, 2, 0, 2, 3, 1, 2, 3, 0, 1, 3 }; //triangle added, can be optimized if quad ensured with good order\n\t\t\t\tstd::vector<uint> indicesBuffer(&indices[0], &indices[0] + 12);\n\n\t\t\t\tquadMesh->vertices(vertexBuffer);\n\t\t\t\tquadMesh->triangles(indicesBuffer);\n\n\t\t\t\tglViewport(0, 0, w, h);\n\t\t\t\trtLum->bind();\n\t\t\t\tglClearColor(0.0, 0.0, 0.0, 0.0);\n\t\t\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\n\t\t\t\tshader.begin();\n\t\t\t\tshader_proj.set(cam.viewproj());\n\n\t\t\t\tquadMesh->render(false, false, sibr::Mesh::RenderMode::FillRenderMode);\n\n\t\t\t\tshader.end();\n\n\t\t\t\trtLum->readBack(imLum);\n\n\t\t\t\tbool nonBlack = false;\n\t\t\t\tbool breakLoop = false;\n\t\t\t\tfor (int j = 0; j < (int)(rtLum->h()); j++) {\n\t\t\t\t\tfor (int i = 0; i < (int)(rtLum->w()); i++) {\n\t\t\t\t\t\tif (imLum(i, j).x() != 0) {\n\t\t\t\t\t\t\tnonBlack = true;\n\t\t\t\t\t\t\tbreakLoop = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (breakLoop)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//std::cout << \"result \" << q << \" : \" << nonBlack << std::endl;\n\t\t\t\tif (nonBlack)\n\t\t\t\t\tresult[c][q] = true;\n\n\t\t\t}\n\t\t}\n\n\t\tduration = (std::clock() - previous) / (double)CLOCKS_PER_SEC;\n\t\tstd::cout << \"render : \" << duration << std::endl;\n\t\tprevious = std::clock();\n\n\t\treturn result;\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Intersector2D.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/raycaster/Config.hpp\"\n#include <vector>\n#include <core/system/Vector.hpp>\n#include <core/assets/InputCamera.hpp>\n\n\n\n/** Struct representing a 3D quad, along with load/save utilities.\n\t\\todo move in proper namespace without breaking anything.\n\t\\ingroup sibr_raycaster\n*/\nstruct  quad {\n\n\tsibr::Vector3f q1;\n\tsibr::Vector3f q2;\n\tsibr::Vector3f q3;\n\tsibr::Vector3f q4;\n\n\t/** Save quad to file on disk.\n\t\\param path destination file.\n\t*/\n\tvoid save(std::string path) {\n\t\tsibr::ByteStream bs;\n\t\tbs << q1.x() << q1.y() << q1.z()\n\t\t\t<< q2.x() << q2.y() << q2.z()\n\t\t\t<< q3.x() << q3.y() << q3.z()\n\t\t\t<< q4.x() << q4.y() << q4.z();\n\t\tbs.saveToFile(path);\n\t}\n\n\t/** Load quad from file on disk.\n\t\\param path source file.\n\t*/\n\tvoid load(std::string path) {\n\t\tsibr::ByteStream bs;\n\t\tbs.load(path);\n\t\tbs >> q1.x() >> q1.y() >> q1.z()\n\t\t\t>> q2.x() >> q2.y() >> q2.z()\n\t\t\t>> q3.x() >> q3.y() >> q3.z()\n\t\t\t>> q4.x() >> q4.y() >> q4.z();\n\t}\n\n};\n\nnamespace sibr {\n\n\n\t/** This class provides utilities to compute point/line/triangle/quad intersections.\n\t\\ingroup sibr_raycaster\n\t*/\n\tclass SIBR_RAYCASTER_EXPORT Intersector2D\n\t{\n\n\tpublic:\n\t\t/// Constructor.\n\t\tIntersector2D(void) = delete;\n\n\t\t/// Destructor\n\t\t~Intersector2D(void) = delete;\n\n\t\t/**\n\t\tHaving defined a straight line in the 2D plane, this method can be used to know in which half-space (defined by the line) a point lies.\n\t\t\\param p1 the 2D point to locate wrt to the line.\n\t\t\\param p2 a 2D point on the line.\n\t\t\\param p3 another 2D point on the line.\n\t\t\\return a signed value indicating on which side of the line the point is.\n\t\t*/\n\t\tstatic float sign(sibr::Vector2f p1, sibr::Vector2f p2, sibr::Vector2f p3);\n\n\t\t/**\n\t\tTests if a point falls inside a triangle, in 2D space.\n\t\t\\param pt the point to test.\n\t\t\\param v1 first triangle vertex.\n\t\t\\param v2 second triangle vertex.\n\t\t\\param v3 third triangle vertex.\n\t\t\\return a boolean denoting if the point belong to the triangle or not.\n\t\t*/\n\t\tstatic bool PointInTriangle(sibr::Vector2f pt, sibr::Vector2f v1, sibr::Vector2f v2, sibr::Vector2f v3);\n\n\t\t/**\n\t\tTests if a line intersects another line, in 2D space.\n\t\t\\param a first point on the first line.\n\t\t\\param b second point on the first line.\n\t\t\\param c first point on the second line.\n\t\t\\param d second point on the second line.\n\t\t\\return a boolean denoting if the lines intersects.\n\t\t*/\n\t\tstatic bool LineLineIntersect(sibr::Vector2f a, sibr::Vector2f b, sibr::Vector2f c, sibr::Vector2f d);\n\n\t\t/**\n\t\tTests if two triangles overlap, in 2D space.\n\t\t\\param t0_0 first vertex of the first triangle.\n\t\t\\param t0_1 second vertex of the first triangle.\n\t\t\\param t0_2 third vertex of the first triangle.\n\t\t\\param t1_0 first vertex of the second triangle.\n\t\t\\param t1_1 second vertex of the second triangle.\n\t\t\\param t1_2 third vertex of the second triangle.\n\t\t\\return a boolean denoting if the triangles overlap.\n\t\t*/\n\t\tstatic bool TriTriIntersect(sibr::Vector2f t0_0, sibr::Vector2f t0_1, sibr::Vector2f t0_2,\n\t\t\tsibr::Vector2f t1_0, sibr::Vector2f t1_1, sibr::Vector2f t1_2);\n\n\t\t/**\n\t\tTests if two quads overlap, in 2D space.\n\t\t\\param q0_0 first vertex of the first quad.\n\t\t\\param q0_1 second vertex of the first quad.\n\t\t\\param q0_2 third vertex of the first quad.\n\t\t\\param q0_3 fourth vertex of the first quad.\n\t\t\\param q1_0 first vertex of the second quad.\n\t\t\\param q1_1 second vertex of the second quad.\n\t\t\\param q1_2 third vertex of the second quad.\n\t\t\\param q1_3 fourth vertex of the second quad.\n\t\t\\return a boolean denoting if the quads overlap.\n\t\t*/\n\t\tstatic bool QuadQuadIntersect(sibr::Vector2f q0_0, sibr::Vector2f q0_1, sibr::Vector2f q0_2, sibr::Vector2f q0_3,\n\t\t\tsibr::Vector2f q1_0, sibr::Vector2f q1_1, sibr::Vector2f q1_2, sibr::Vector2f q1_3);\n\n\t\t/**\n\t\tPerform multiple quads/camera frusta intersections at once.\n\t\t\\warning Requires an existing and current OpenGL context.\n\t\t\\param quads an array of quads to test against each camera frustum.\n\t\t\\param cams an array of cameras against which frusta the intersections tests should be performed.\n\t\t\\return a double-array of booleans denoting, for each camera, for each quad, if the quad intersects the frustum volume.\n\t\t*/\n\t\tstatic std::vector<std::vector<bool>> frustrumQuadsIntersect(std::vector<quad> & quads, const std::vector<InputCamera::Ptr> & cams);\n\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/KdTree.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include \"Config.hpp\"\r\n\r\n#include \"core/system/Vector.hpp\"\r\n#include \"nanoflann/nanoflann.hpp\"\r\n\r\nnamespace sibr { \r\n\r\n\t/**\r\n\t * \\class KdTree\r\n\t * \\brief Represent a 3D hierachical query structure baked by a nanoflann KdTree.\r\n\t * \\note With the default L2 distance, all distances and radii are expected to be \r\n\t * the squared values (this is a nanoflann constraint). For other metrics, use the distance directly.\r\n\t * \\ingroup sibr_raycaster\r\n\t */\r\n\ttemplate <typename num_t = double, class Distance = nanoflann::metric_L2>\r\n\tclass  KdTree\r\n\t{\r\n\t\tSIBR_CLASS_PTR(KdTree);\r\n\t\r\n\tpublic:\r\n\r\n\t\ttypedef\tEigen::Matrix<num_t, 3, 1, Eigen::DontAlign> Vector3X;\r\n\t\ttypedef KdTree<num_t, Distance> self_t;\r\n\t\ttypedef typename Distance::template traits<num_t, self_t>::distance_t metric_t;\r\n\t\ttypedef nanoflann::KDTreeSingleIndexAdaptor< metric_t, self_t, 3, size_t>  index_t;\r\n\t\ttypedef std::vector<std::pair<size_t, num_t>> Results;\r\n\r\n\t\t/**\r\n\t\t * Constructor.\r\n\t\t * The KdTree will do a copy of the positions vector.\r\n\t\t * \\param positions a list of 3D points\r\n\t\t * \\param leafMaxSize maximum number of points per leaf\r\n\t\t */\r\n\t\tKdTree(const std::vector<Vector3X> & positions, size_t leafMaxSize = 10);\r\n\r\n\t\t/** Destructor. */\r\n\t\t~KdTree();\r\n\r\n\t\t/** Get the closest point stored in the KdTree for the specified distance\r\n\t\t* \\param pos the reference point\r\n\t\t* \\param distanceSq will contain the squared distance from pos to the closest point in the tree.\r\n\t\t* \\return the index of the closest point in the tree.\r\n\t\t*/\r\n\t\tsize_t getClosest(const Vector3X & pos, num_t & distanceSq) const;\r\n\r\n\t\t/** Get the closest point stored in the KdTree for the specified distance\r\n\t\t* \\param pos the reference point\r\n\t\t* \\param count the number of neighbours to query\r\n\t\t* \\param idDistSqs will contain the indices of the closest points and their squared distances to the reference point\r\n\t\t*/\r\n\t\tvoid getClosest(const Vector3X & pos, size_t count, Results & idDistSqs) const;\r\n\r\n\t\t/** Get all points in a sphere of a given radius around a reference point.\r\n\t\t *\\param pos the reference point\r\n\t\t *\\param maxDistanceSq the squared sphere radius\r\n\t\t *\\param sorted should the points be sorted in ascending distance order\r\n\t\t *\\param idDistSqs will contain the indices of the points in the sphere and their squared distances to the reference point\r\n\t\t */\r\n\t\tvoid getNeighbors(const Vector3X & pos, double maxDistanceSq, bool sorted, Results & idDistSqs) const;\r\n\r\n\t\t/// Interface expected by nanoflann for an adapter.\r\n\t\tconst self_t & derived() const {\r\n\t\t\treturn *this;\r\n\t\t}\r\n\r\n\t\t/// Interface expected by nanoflann for an adapter.\r\n\t\tself_t & derived() {\r\n\t\t\treturn *this;\r\n\t\t}\r\n\r\n\t\t/// Interface: Must return the number of data points\r\n\t\tinline size_t kdtree_get_point_count() const {\r\n\t\t\treturn _points.size();\r\n\t\t}\r\n\r\n\t\t/// Interface: Returns the dim'th component of the idx'th point in the class:\r\n\t\tinline num_t kdtree_get_pt(const size_t idx, const size_t dim) const {\r\n\t\t\treturn _points[idx][dim];\r\n\t\t}\r\n\r\n\t\t/// Interface: Optional bounding-box computation: \\return false to default to a standard bbox computation loop.\r\n\t\ttemplate <class BBOX>\r\n\t\tbool kdtree_get_bbox(BBOX & /*bb*/) const {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\tprivate:\r\n\r\n\t\tconst std::vector<Vector3X> _points;\r\n\t\tindex_t * _index;\r\n\t};\r\n\r\n\ttemplate <typename num_t, class Distance>\r\n\tKdTree<num_t, Distance>::KdTree(const std::vector<Vector3X>& positions, size_t leafMaxSize) : _points(positions) {\r\n\t\tif(positions.empty()) {\r\n\t\t\tSIBR_ERR << \"[KdTree] Trying to build a Kd-Tree from an empty list of points.\" << std::endl;\r\n\t\t}\r\n\t\t_index = new index_t(3, *this, nanoflann::KDTreeSingleIndexAdaptorParams(leafMaxSize));\r\n\t\t_index->buildIndex();\r\n\t}\r\n\r\n\ttemplate<typename num_t, class Distance>\r\n\tKdTree<num_t, Distance>::~KdTree()\r\n\t{\r\n\t\tdelete _index;\r\n\t}\r\n\r\n\ttemplate <typename num_t, class Distance>\r\n\tinline size_t KdTree<num_t, Distance>::getClosest(const Vector3X& pos, num_t & distanceSq) const {\r\n\t\tsize_t index = 0;\r\n\t\t_index->knnSearch(&pos[0], 1, &index, &distanceSq);\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttemplate <typename num_t, class Distance>\r\n\tinline void KdTree<num_t, Distance>::getClosest(const Vector3X & pos, size_t count, Results & idDistSqs) const {\r\n\t\tstd::vector<size_t> outIds(count);\r\n\t\tstd::vector<num_t> outDists(count);\r\n\t\tconst size_t foundCount = _index->knnSearch(&pos[0], count, &outIds[0], &outDists[0]);\r\n\t\tidDistSqs.resize(foundCount);\r\n\t\tfor(size_t i = 0; i < foundCount; ++i) {\r\n\t\t\tidDistSqs[i] = std::make_pair(outIds[i], outDists[i]);\r\n\t\t}\r\n\t}\r\n\r\n\ttemplate <typename num_t, class Distance>\r\n\tinline void KdTree<num_t, Distance>::getNeighbors(const Vector3X & pos, double maxDistanceSq, bool sorted, Results & idDistSqs) const {\r\n\t\t_index->radiusSearch(&pos[0], float(maxDistanceSq), idDistSqs, nanoflann::SearchParams(32, 0.0f, sorted));\r\n\t}\r\n\r\n\r\n} /*namespace sibr*/ \r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/PlaneEstimator.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"PlaneEstimator.hpp\"\n#include <random>\n\ntypedef Eigen::Array<bool, Eigen::Dynamic, 1> ArrayXb;\n\nPlaneEstimator::PlaneEstimator() {}\n\nPlaneEstimator::PlaneEstimator(const std::vector<sibr::Vector3f> & vertices, bool excludeBB)\n{\n\n\tEigen::AlignedBox<float, 3> boxScaled;\n\tif (excludeBB) {\n\t\tEigen::AlignedBox<float, 3> box;\n\t\tfor (const auto & vertex : vertices) {\n\t\t\tbox.extend(vertex);\n\t\t}\n\t\tfor (const auto & vertex : vertices) {\n\t\t\tboxScaled.extend(box.center()+0.99f*(vertex- box.center()));\n\t\t}\n\n\t}\n\tint bboxReject = 0;\n\tif (vertices.size() > 200000) {\n\t\tstd::cout << \"Found more than 200000 points reducing point cloud size ...\" << std::endl;\n\n\t\tstd::random_device rd;\n\t\tstd::mt19937 mt(rd());\n\t\tstd::uniform_real_distribution<double> dist(0.0, 1.0);\n\n\t\tfor (const auto & v : vertices) {\n\t\t\tdouble random = dist(mt);\n\t\t\tif (random < 200000.0 / double(vertices.size())) {\n\t\t\t\tif (!excludeBB || (boxScaled.exteriorDistance(v)==0) )\n\t\t\t\t\t_Points.push_back(v);\n\t\t\t\telse if (excludeBB && boxScaled.exteriorDistance(v) > 0) {\n\t\t\t\t\tbboxReject++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (excludeBB)\n\t\t\tstd::cout << bboxReject << \" points where rejected becaused considered on the bounding box\" << std::endl;\n\t}\n\telse {\n\t\t_Points = vertices;\n\t}\n\tstd::cout << \"Point Cloud size: \" << _Points.size() << std::endl;\n\t_numPoints3D = (int)_Points.size();\n\t_remainPoints3D.resize(_Points.size(), 3);\n\t_remainNormals3D.resize(_Points.size(), 3);\n\n\tfor (int i = 0; i < _Points.size(); i++) {\n\t\t_remainPoints3D.row(i) = _Points[i];\n\t\t_remainNormals3D.row(i) = sibr::Vector3f(0, 0, 0);\n\n\t}\n\n\t_planeComputed = false;\n}\n\nvoid PlaneEstimator::computePlanes(const int numPlane, const  float delta, const int numTry) {\n\n\n\t_planeComputed = true; // we know that the planes were computed\n\n\tstd::cout << \"Original number of points \" << _remainPoints3D.rows() << std::endl;\n\tfor (int i = 0; i < numPlane; i++) {\n\n\t\tif (_remainPoints3D.rows() < _numPoints3D * 5 / 100)\n\t\t{\n\t\t\tstd::cout << \"Not enough points remaining, stop searching. \" << i << \" planes found.\" << std::endl;\n\t\t\tbreak;\n\t\t}\n\n\n\t\tsibr::Vector3f color(((float)rand() / (RAND_MAX)), ((float)rand() / (RAND_MAX)), ((float)rand() / (RAND_MAX)));\n\n\t\tEigen::MatrixXi mask;\n\t\t//Eigen::MatrixXf maskNormals;\n\t\tstd::pair<Eigen::MatrixXf, sibr::Vector3f> covMean;\n\t\tint vote = -1;\n\t\tsibr::Vector4f plane = estimatePlane(delta, numTry, mask, vote, covMean);\n\n\t\tif (vote < _numPoints3D * 2 / 100 && i >= 12) {\n\t\t\tstd::cout << \"Not enough points in candidate plane, stop searching. \" << i << \" planes found.\" << std::endl;\n\t\t\tbreak;\n\t\t}\n\t\t//\n\n\t\tEigen::MatrixXf remainPoints3DTemp(_remainPoints3D.rows() - vote, 3);\n\t\tEigen::MatrixXf remainNormals3DTemp(_remainNormals3D.rows() - vote, 3);\n\t\t//std::vector<sibr::Vector3i> remainImPosTemp;\n\n\t\tint notSel = 0;\n\t\tstd::vector<sibr::Vector3f> pointsPlane;\n\t\tfor (int rIt = 0; rIt < _remainPoints3D.rows(); rIt++) {\n\t\t\tif (mask.row(rIt)(0) == 0) { // not selected\n\t\t\t\tremainPoints3DTemp.row(notSel) = _remainPoints3D.row(rIt);\n\t\t\t\tremainNormals3DTemp.row(notSel) = _remainNormals3D.row(rIt);\n\t\t\t\t//remainImPosTemp.push_back(_remainImPos[rIt]);\n\t\t\t\tnotSel++;\n\t\t\t}\n\n\t\t\telse { // In the plane\n\t\t\t\tpointsPlane.push_back(_remainPoints3D.row(rIt));\n\t\t\t}\n\t\t}\n\n\t\tstd::cout << \"vote :\" << vote << \" notSel \" << notSel << \" supposed total \" << _remainPoints3D.rows() << std::endl;\n\t\t_remainPoints3D = remainPoints3DTemp;\n\t\t_remainNormals3D = remainNormals3DTemp;\n\t\t//_remainImPos=remainImPosTemp;\n\t\tstd::cout << \"Remaining number of points \" << _remainPoints3D.rows() << std::endl;\n\n\t\tsibr::Vector3f center = plane.w()*plane.xyz();\n\n\t\tsibr::Vector4f finalPlane = plane;\n\n\t\t_planes.push_back(finalPlane);\n\t\t_points.push_back(pointsPlane);\n\t\t// centers and basis\n\t\t_centers.push_back(center);\n\n\t\t//plane statistical informations\n\t\t_covMeans.push_back(covMean);\n\t\t_votes.push_back(vote);\n\t}\n\n}\n\nsibr::Vector4f PlaneEstimator::estimatePlane(const float delta, const int numTry, Eigen::MatrixXi & bestMask, int & bestVote, std::pair<Eigen::MatrixXf, sibr::Vector3f> & bestCovMean) {\n\n\tsibr::Vector4f bestPlane;\n\n\tfloat bestWVote = 0;\n#pragma omp parallel for\n\tfor (int i = 0; i < numTry; i++) {\n\n\t\tEigen::MatrixXi mask;\n\t\tsibr::Vector4f plane = plane3Pts();\n\t\tif (plane.xyz().norm() > 0) {\n\t\t\tstd::pair<int, float> votePair = votePlane(plane, delta, mask);\n\n#pragma omp critical\n\t\t\t{\n\t\t\t\t//std::cout << i << \" \";\n\t\t\t\tif (votePair.second > bestWVote) {\n\t\t\t\t\tbestWVote = votePair.second;\n\t\t\t\t\tbestVote = votePair.first;\n\t\t\t\t\tbestPlane = plane;\n\t\t\t\t\tbestMask = std::move(mask); // move to avoid copy\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\tstd::cout << \"Best vote \" << bestVote << \" Best plane \" << bestPlane << std::endl;\n\t/*\n\tstd::cout << \"Plane refinement ...\" << std::endl;\n\n\t////////////////// Plane fitting\n\n\tEigen::MatrixXf data(3, bestVote);\n\tint sel = 0;\n\n\tfor (int rIt = 0; rIt < _remainPoints3D.rows(); rIt++) {\n\t\tif (bestMask.row(rIt)(0) == 1) {\n\t\t\tdata.col(sel) = _remainPoints3D.row(rIt);\n\t\t\tsel++;\n\t\t}\n\t}\n\n\n\tstd::cout << \"Sel \" << sel << std::endl;\n\n\tsibr::Vector3f center = data.rowwise().mean();\n\tEigen::MatrixXf dataCentered = data.colwise() - center;\n\n\tbestCovMean.first = (dataCentered*dataCentered.adjoint()) / float(dataCentered.cols() - 1);\n\tbestCovMean.second = center;\n\n\tstd::cout << \"Cov Matrix : \" << bestCovMean.first << \" Mean : \" << bestCovMean.second << std::endl;\n\tstd::cout << \"Cov Determinant : \" << bestCovMean.first.determinant() << std::endl;\n\n\tEigen::JacobiSVD<Eigen::MatrixXf> svd(dataCentered, Eigen::ComputeFullU | Eigen::ComputeThinV);\n\n\tstd::cout << \"old normal\" << \" \" << bestPlane.xyz();\n\t//the normal to the fitting plane is the eigenvector associated to the smallest eigenvalue (i.e. the direction in which the variance of all points is the smallest) \n\tsibr::Vector3f normal = svd.matrixU().col(2);\n\tnormal.normalize();\n\n\tfloat d = center.dot(normal);\n\n\tbestPlane = sibr::Vector4f(normal.x(), normal.y(), normal.z(), d);\n\n\tbestVote = votePlane(bestPlane, 10.0*delta, bestMask, 0.8f).first;*/\n\n\tstd::cout << \" new normal\" << \" \" << bestPlane.xyz() << std::endl;\n\t// normal coherency\n\t//Eigen::ArrayXf dotWithOriNormal=(_remainNormals3D * bestPlane.xyz()).array().cwiseAbs();\n\t//bestMaskNormals = (bestMask.array().cast<float>()*dotWithOriNormal);\n\n\tstd::cout << \"Vote refined \" << bestVote << \" Plane refined \" << bestPlane << /*\" Normals coherency \" << bestMaskNormals.sum()/bestVote  <<*/ std::endl;\n\n\treturn bestPlane;\n\n}\n\n\nsibr::Vector4f PlaneEstimator::plane3Pts() {\n\n\tstd::random_device rd;  //Will be used to obtain a seed for the random number engine\n\tstd::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()\n\tstd::uniform_int_distribution<> dis(0, int(_remainPoints3D.rows() - 1));\n\n\tsibr::Vector3f pointA = _remainPoints3D.row(dis(gen));\n\tsibr::Vector3f pointB = _remainPoints3D.row(dis(gen));\n\tsibr::Vector3f pointC = _remainPoints3D.row(dis(gen));\n\n\tsibr::Vector3f normal = (pointB - pointA).cross(pointC - pointA);\n\tnormal.normalize();\n\n\tfloat d = normal.dot(pointA);\n\n\treturn sibr::Vector4f(normal.x(), normal.y(), normal.z(), d);\n\n}\n\nstd::pair<int, float> PlaneEstimator::votePlane(const sibr::Vector4f plane, const float delta, Eigen::MatrixXi & mask, float normalDot) {\n\n\tsibr::Vector3f normal = plane.xyz();\n\tfloat d = plane.w();\n\n\t//std::cout << \"size \" << _points3D.size() << \" \" << normal.size() << \" d \" << d << std::endl;\n\n\tEigen::ArrayXf distances = (_remainPoints3D * normal).array();\n\n\tEigen::ArrayXf dotWithOriNormal = (_remainNormals3D * normal).array();\n\n\t/*for(int i=0; i< 10; i++){\n\tstd::cout << distances.row(i) << \" \";\n\t}\n\tstd::cout << std::endl;*/\n\n\tdistances = (distances - d * Eigen::ArrayXf::Ones(distances.rows())).cwiseAbs();\n\tdotWithOriNormal = dotWithOriNormal.cwiseAbs();\n\n\t/*for(int i=0; i< 10; i++){\n\tstd::cout << distances.row(i) << \" \";\n\t}\n\tstd::cout << std::endl;*/\n\tmask = (distances < delta && (dotWithOriNormal > normalDot || dotWithOriNormal == 0)).cast<int>();\n\t\n\tEigen::ArrayXf voteW = (distances+ 0.1f*delta* Eigen::ArrayXf::Ones(distances.rows()));\n\tvoteW = mask.array().cast<float>().cwiseQuotient(voteW);\n\t//std::cout << \"SUM \" << mask.sum() << std::endl;\n\n\treturn std::make_pair(mask.sum(), voteW.sum());\n\n}\n\nsibr::Vector4f PlaneEstimator::estimateGroundPlane(sibr::Vector3f roughUp)\n{\n\tif (_planeComputed) {\n\n\t\t//find the floor plane\n\t\tint bestId = -1;\n\t\tint bestVote = 0;\n\n\t\tfor (int p = 0; p < _planes.size(); p++) {\n\t\t\tif (abs(_planes[p].xyz().dot(roughUp)) > 0.87) {\n\t\t\t\tif (_votes[p] > bestVote) {\n\t\t\t\t\tbestId = p;\n\t\t\t\t\tbestVote = _votes[p];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _planes[bestId];\n\t}\n\telse {\n\t\tstd::cout << \"Error : Plane not computed, you should call computePlanes first\" << std::endl;\n\t\tSIBR_ERR;\n\t\treturn { 0.0f, 0.0f, 0.0f, 0.0f };\n\t}\n}\n\n\nsibr::Vector3f PlaneEstimator::estimateMedianVec(const std::vector<sibr::Vector3f> & ups)\n{\n\n\tstd::vector<float> medUpX;\n\tstd::vector<float> medUpY;\n\tstd::vector<float> medUpZ;\n\n\tfor (const auto & up : ups) {\n\n\t\tmedUpX.push_back(up.x());\n\t\tmedUpY.push_back(up.y());\n\t\tmedUpZ.push_back(up.z());\n\n\t}\n\tstd::sort(medUpX.begin(), medUpX.end());\n\tstd::sort(medUpY.begin(), medUpY.end());\n\tstd::sort(medUpZ.begin(), medUpZ.end());\n\n\tconst size_t medPos = medUpX.size() / 2;\n\n\tsibr::Vector3f upMed(medUpX[medPos], medUpY[medPos], medUpZ[medPos]);\n\tupMed.normalize();\n\n\treturn upMed;\n}\n\nsibr::Mesh PlaneEstimator::getMeshPlane(sibr::Vector4f plane, sibr::Vector3f center, float radius)\n{\n\tsibr::Mesh planeMesh;\n\n\tsibr::Vector3f projCenter = center - (center - plane.w()*plane.xyz()).dot(plane.xyz())*plane.xyz();\n\n\tsibr::Mesh::Vertices vert;\n\tsibr::Mesh::Triangles tri;\n\tsibr::Mesh::Normals nml;\n\tsibr::Mesh::UVs tex;\n\n\tsibr::Vector3f u = (projCenter - plane.w()*plane.xyz()).normalized();\n\tsibr::Vector3f v = plane.xyz().cross(u).normalized();\n\n\tint numP = 50;\n\tfor (int i = 0; i < numP; i++) {\n\t\tvert.push_back(projCenter + radius * cos(2 * M_PI*i / numP)*u + radius * sin(2 * M_PI*i / numP)*v);\n\t\tnml.push_back(plane.xyz().normalized());\n\t\ttri.push_back(sibr::Vector3u(numP, i, (i + 1) % numP));\n\t}\n\n\tvert.push_back(projCenter);\n\n\tplaneMesh.vertices(vert);\n\tplaneMesh.normals(nml);\n\tplaneMesh.triangles(tri);\n\treturn planeMesh;\n}\n\nvoid PlaneEstimator::displayPCAndPlane(sibr::Window::Ptr window)\n{\n}\n\nPlaneEstimator::~PlaneEstimator(void)\n{\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/PlaneEstimator.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <core/raycaster/Config.hpp>\n\n#include <core/system/Utils.hpp>\n#include <core/system/Vector.hpp>\n#include <core/graphics/Image.hpp>\n#include <core/system/Array2d.hpp>\n#include <core/graphics/Mesh.hpp>\n#include <core/graphics/Window.hpp>\n\n\n/**\n\tFit a plane to a point cloud using an improved RANSAC approach.\n\t\\ingroup sibr_raycaster\n*/\nclass SIBR_RAYCASTER_EXPORT PlaneEstimator {\n\npublic:\n\n\t/// Default constructor.\n\tPlaneEstimator();\n\n\t/** Constructor.\n\t\\param vertices the point cloud\n\t\\param excludeBB if true, reject points that are close to the vertices bounding box\n\t*/\n\tPlaneEstimator(const std::vector<sibr::Vector3f> & vertices, bool excludeBB=false);\n\n\t/** Compute one or more planes fitting the data using RANSAC. Points that are well fitted by a plan will bre moved from the set.\n\t\\param numPlane number of planes to fit\n\t\\param delta fit validity threshold\n\t\\param numTry number of attempts to perform for each plane\n\t*/\n\tvoid computePlanes(const int numPlane,const float delta,const int numTry);\n\t\n\t/** Estimate the best plane in the remaining points set using RANSAC.\n\t\\param delta fit validity threshold\n\t\\param numTry number of attempts to perform for each plane\n\t\\param bestMask for each point, will be set to 1 if the plane explains the point well\n\t\\param vote will contain the number of points that fit\n\t\\param bestCovMean unused\n\t\\return the plane parameters\n\t*/\n\tsibr::Vector4f estimatePlane(const float delta,const int numTry, Eigen::MatrixXi & bestMask, int & vote, std::pair<Eigen::MatrixXf,sibr::Vector3f> & bestCovMean);\n\t\n\t/** Choose randomly 3 points among the vertices and compute the corresponding plane.\n\t\\return the plane parameters\n\t*/\n\tsibr::Vector4f plane3Pts(); \n\n\t/** Given a plane and a threshold, this function return the num of point that fit the plane in the remaining points and also the associated mask.\n\t\\param plane the plane parameters\n\t\\param delta validity threshold\n\t\\param mask for each point, will be set to 1 if the plane explains the point well\n\t\\param normalDot normal validity threshold\n\t\\return number of points that fit and overall weighted score (based on normal similarity)\n\t*/\n\tstd::pair<int, float> votePlane(const sibr::Vector4f plane, const float delta, Eigen::MatrixXi & mask, float normalDot=0.98);\n\t\n\t/** For visualization, display the point cloud and fitted plane in a window.\n\t\\param window the windo to use for display\n\t\\deprecated Empty, won't do anything.\n\t*/\n\tvoid displayPCAndPlane(sibr::Window::Ptr window);\n\n\t/** Estimate a fitting plane that is as orthogonal to the given up vector as possible.\n\t\\param roughUp an estimation of the scene up vector\n\t\\return the plane parameters.\n\t*/\n\tsibr::Vector4f estimateGroundPlane(sibr::Vector3f roughUp);\n\t\n\t/** Estimate the scene zenith from a set of camera up vectors (assuming photogrametric capture).\n\t\\param ups a set of up vector\n\t\\return the estimated median zenith vector\n\t*/\n\tstatic sibr::Vector3f estimateMedianVec(const std::vector<sibr::Vector3f> & ups);\n\n\t/** Generate a mesh representing a plane.\n\t\\param plane the parameters of the plane to represent\n\t\\param center center of the plane mesh\n\t\\param radius extent of the plane mesh\n\t\\return the generated plane mesh\n\t*/\n\tstatic sibr::Mesh getMeshPlane(sibr::Vector4f plane , sibr::Vector3f center, float radius);\n\n\tstd::vector<sibr::Vector3f> _Points; ///< All initial points.\n\tint _numPoints3D; ///< Number of initial points.\n\n\tstd::vector<sibr::Vector4f> _planes; ///< Planes are represented as Vector4f(n.x,n.y,n.z,d)\n\tstd::vector<std::vector<sibr::Vector3f>> _points; ///< For each plane, list of fitting points.\n\tstd::vector<sibr::Vector3f> _centers; ///< Plane centers.\n\tstd::vector<int> _votes; ///< Number of votes per plane.\n\tstd::vector<std::pair<Eigen::MatrixXf,sibr::Vector3f>> _covMeans; ///< Unused.\n\t\n\t/// Destructor.\n\t~PlaneEstimator(void);\n\nprotected:\n\n\tEigen::MatrixXf _remainPoints3D; ///< Points to consider.\n\tEigen::MatrixXf _remainNormals3D; ///< Associated normals to consider.\n\tstd::vector<sibr::Vector3u> _Triangles; ///< Triangle list.\n\tbool _planeComputed; ///< Has the plane been computed.\n};\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Ray.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"Ray.hpp\"\n\nnamespace sibr\n{\n\t/*static*/ SIBR_RAYCASTER_EXPORT const float\tRayHit::InfinityDist = std::numeric_limits<float>::infinity();\n\n\tRay::Ray( const sibr::Vector3f& orig, const sibr::Vector3f& dir )\n\t\t: _orig(orig), _dir(dir)\n\t{\n\t\tif (_dir[0] != 0.f || _dir[1] != 0.f || _dir[2] != 0.f)\n\t\t\t_dir.normalize();\n\t}\n\n\tRayHit::RayHit( const Ray& r, float dist, const BCCoord& coord,\n\t\t\t\t\tconst sibr::Vector3f& normal, const Primitive& prim )\n\t\t\t\t\t: _ray(r), _dist(dist), _coord(coord), _normal(normal), _prim(prim)\n\t{\n\t\t_dist = std::max(dist, 0.f);\n\n\t\t// normalize '_normal'\n\t\tfloat len = length(_normal);\n\t\tif (len > 1e-10)\n\t\t\t_normal = _normal / len;\n\n\t}\n\n\tsibr::Vector3f\t\t\tRayHit::interpolateUV( void ) const\n\t{\n\t\tfloat ucoord = barycentricCoord().u;\n\t\tfloat vcoord = barycentricCoord().v;\n\t\treturn sibr::Vector3f(std::max((1.f-ucoord-vcoord), 0.f), ucoord, vcoord);\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Ray.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <string>\n# include <vector>\n# include <core/system/Vector.hpp>\n# include \"core/raycaster/Config.hpp\"\n\nnamespace sibr\n{\n\n\t///\n\t/// Represents a simple ray\n\t/// \\ingroup sibr_raycaster\n\t///\n\tclass SIBR_RAYCASTER_EXPORT Ray\n\t{\n\tpublic:\n\t\t/** Construct a ray from parameters.\n\t\t\\param orig ray origin\n\t\t\\param dir ray direction\n\t\t\\note The direction will be normalized.\n\t\t*/\n\t\tRay( const sibr::Vector3f& orig = sibr::Vector3f(0.f, 0.f, 0.f),\n\t\t\tconst sibr::Vector3f& dir = sibr::Vector3f(0.f, 0.f, -1.f) );\n\n\t\t/** Set the position from where the ray starts.\n\t\t\\param o the new origin\n\t\t*/\n\t\tinline void\t\torig( const sibr::Vector3f& o );\n\t\t\n\t\t/// \\return the ray origin\n\t\tinline const sibr::Vector3f&\torig( void ) const;\n\n\t\t/** Set the direction of the ray. Additionally,\n\t\t you can precise if you want this direction to be automatically\n\t\t normalized or not.\n\t\t \\param d the new direction\n\t\t \\param normalizeIt should normalization be applied\n\t\t */\n\t\tinline void\t\tdir( const sibr::Vector3f& d, bool normalizeIt=true );\n\n\t\t/// \\return the direction of the ray.\n\t\tinline const sibr::Vector3f&\tdir( void ) const;\n\n\t\t/** Return the 3D point such that p = orig + t * dir;\n\t\t\\param t the distance along the ray\n\t\t\\return the 3D point\n\t\t*/\n\t\tVector3f at(float t) const;\n\n\tprivate:\n\t\tsibr::Vector3f\t\t_orig;\t///< Position from where the ray starts\n\t\tsibr::Vector3f\t\t_dir;\t///< Direction where the ray goes\n\t};\n\n\t///\n\t/// Contains information about a ray hit\n\t/// \\ingroup sibr_raycaster\n\t///\n\tclass SIBR_RAYCASTER_EXPORT RayHit\n\t{\n\tpublic:\n\t\tstatic const float\tInfinityDist;\n\n\t\t/// Infos about the object that was hit\n\t\tstruct Primitive\n\t\t{\n\t\t\tuint triID;\t\t///< triangle id of the mesh that was hit\n\t\t\tuint geomID;\t///< mesh id loaded in the raycaster\n\t\t\tuint instID;\t///< id of the instance loaded in the raycaster\n\t\t};\n\n\t\t/// Barycentric coordinates\n\t\tstruct BCCoord\n\t\t{\n\t\t\tfloat u;\t///< u-coordinates (ranging from 0.0 to 1.0)\n\t\t\tfloat v;\t///< v-coordinates (ranging from 0.0 to 1.0)\n\t\t};\n\t\t\n\t\t/** Construct a hit record.\n\t\t\\param r the ray\n\t\t\\param dist intersection distance\n\t\t\\param coord barycentric coordinates\n\t\t\\param normal surface normal\n\t\t\\param prim intersected primitive\n\t\t*/\n\t\tRayHit( const Ray& r, float dist, const BCCoord& coord,\n\t\t\tconst sibr::Vector3f& normal, const Primitive& prim );\n\n\t\t/// Non-hit constructor.\n\t\tRayHit() {};\n\n\t\t/// \\return the ray that was casted\n\t\tinline const Ray&\t\t\tray( void ) const;\n\n\t\t/// \\return the distance from the ray origin to the hit\n\t\tinline float\t\t\t\tdist( void ) const;\n\n\t\t/// \\return the barycentric coordinates of the hit point on the triangle that was hit\n\t\tinline const BCCoord&\t\tbarycentricCoord( void ) const;\n\t\t\n\t\t/** Return the proper barycentric factors for interpolating information stored\n\t\t at each vertex of a triangle.\n\t\t e.g: get fragment color using\n\t\t   color = factor[0]*colorVert0 + factor[1]*colorVert1 + factor[2]*colorVert2\n\t\t It consider the following triangle: https://embree.github.io/images/triangle_uv.png\n\t\t\\return the barycentric coordinates\n\t\t*/\n\t\tsibr::Vector3f\t\t\tinterpolateUV( void ) const;\n\n\t\t/// \\return the normal of the triangle that was hit.\n\t\tinline const sibr::Vector3f&\t\t\tnormal( void ) const;\n\n\t\t/// \\return information about the primitive that was hit.\n\t\tinline const Primitive&\t\tprimitive( void ) const;\n\n\t\t/// \\return true if an object was hit.\n\t\tinline bool\thitSomething( void ) const;\n\n\tprivate:\n\t\tRay\t\t\t_ray;\t\t///< casted ray\n\t\tfloat\t\t_dist;\t\t///< distance from the ray's origin to the hit\n\t\tBCCoord\t\t_coord;\t\t///< barycentric coordinate on the triangle that was hit\n\t\tsibr::Vector3f\t_normal;///< normal of the triangle that was hit\n\t\tPrimitive\t_prim;\t\t///< infos about the primitive that was hit\n\t};\n\n\t///// DEFINITION /////\n\t\n\tvoid\t\tRay::orig( const sibr::Vector3f& o ) {\n\t\t_orig = o;\n\t}\n\tconst sibr::Vector3f&\tRay::orig( void ) const {\n\t\treturn _orig;\n\t}\n\n\tvoid\t\tRay::dir( const sibr::Vector3f& d, bool normalizeIt) {\n\t\t_dir = (normalizeIt)? sibr::Vector3f(d.normalized()) : d;\n\t}\n\tconst sibr::Vector3f&\tRay::dir( void ) const {\n\t\treturn _dir;\n\t}\n\n\tinline Vector3f Ray::at(float t) const\n\t{\n\t\treturn orig() + t * dir();\n\t}\n\n\n\n\tconst Ray&\t\t\tRayHit::ray( void ) const {\n\t\treturn _ray;\n\t}\n\tfloat\t\t\t\tRayHit::dist( void ) const {\n\t\treturn _dist;\n\t}\n\tconst RayHit::BCCoord&\t\tRayHit::barycentricCoord( void ) const {\n\t\treturn _coord;\n\t}\n\tconst sibr::Vector3f&\t\t\tRayHit::normal( void ) const {\n\t\treturn _normal;\n\t}\n\tconst RayHit::Primitive&\t\tRayHit::primitive( void ) const {\n\t\treturn _prim;\n\t}\n\n\tbool\tRayHit::hitSomething( void ) const {\n\t\treturn (_dist != RayHit::InfinityDist);\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Raycaster.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"Raycaster.hpp\"\n\nnamespace sibr\n{\n\t/*static*/ SIBR_RAYCASTER_EXPORT const Raycaster::geomId\t\tRaycaster::InvalidGeomId = RTC_INVALID_GEOMETRY_ID;\n\t/*static*/ bool\t\t\t\t\t\t\t\t\t\t\t\t\tRaycaster::g_initRegisterFlag = false;\n\t/*static*/ Raycaster::RTCDevicePtr\t\t\t\t\t\t\t\tRaycaster::g_device = nullptr;\n\n\t/*static*/ void Raycaster::rtcErrorCallback(void* userPtr, RTCError code, const char* msg)\n\t{\n\t\tstd::string err;\n\n\t\tswitch (code)\n\t\t{\n\t\tcase RTC_ERROR_UNKNOWN: err = std::string(\"RTC_ERROR_UNKNOWN\"); break;\n\t\tcase RTC_ERROR_INVALID_ARGUMENT: err = std::string(\"RTC_ERROR_INVALID_ARGUMENT\"); break;\n\t\tcase RTC_ERROR_INVALID_OPERATION: err = std::string(\"RTC_ERROR_INVALID_OPERATION\"); break;\n\t\tcase RTC_ERROR_OUT_OF_MEMORY: err = std::string(\"RTC_ERROR_OUT_OF_MEMORY\"); break;\n\t\tcase RTC_ERROR_UNSUPPORTED_CPU: err = std::string(\"RTC_ERROR_UNSUPPORTED_CPU\"); break;\n\t\tcase RTC_ERROR_CANCELLED: err = std::string(\"RTC_ERROR_CANCELLED\"); break;\n\t\tdefault: err = std::string(\"invalid error code\"); break;\n\t\t}\n\n\t\tSIBR_ERR << \"Embree reported the following issue - \"\n\t\t\t<< \"[\" << err << \"]'\" << msg << \"'\" << std::endl;\n\t}\n\n\tRaycaster::~Raycaster(void)\n\t{\n\t\t_scene = nullptr;\n\t\t_devicePtr = nullptr;\n\t\tif (g_device && g_device.use_count() == 1)\n\t\t\tg_device = nullptr; // if nobody use it, free it\n\t}\n\n\tbool\tRaycaster::init(RTCSceneFlags sceneType)\n\t{\n\t\tif (!g_device)\n\t\t{\n\t\t\t// The two following macros set flagbits on the control register\n\t\t\t// used by SSE (see http://softpixel.com/~cwright/programming/simd/sse.php)\n\t\t\t_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);\t\t\t// Enable 'Flush Zero' bit\n\t\t\t_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);\t// Enable 'Denormals Zero'bit\n\n\t\t\tSIBR_LOG << \"Initializing Raycaster\" << std::endl;\n\n\t\t\tg_device = std::make_shared<RTCDevice>(rtcNewDevice(NULL));\n\n\t\t\tif (g_device == nullptr) {\n\t\t\t\tSIBR_LOG << \"Cannot create an embree device : \" << rtcGetDeviceError(*g_device.get()) << std::endl;\n\t\t\t}\n\n\t\t\trtcSetDeviceErrorFunction(*g_device.get(), &Raycaster::rtcErrorCallback, nullptr); // Set callback error function\n\t\t\t_devicePtr = g_device; //Moved in the init\n\t\t}\n\n\t\tif (_scene)\n\t\t\treturn true;\n\n\n\n\t\t_scene = std::make_shared<RTCScene>( // define a new scene\n\t\t\t/// \\todo create a new static scene optimized for primary rays (TODO: test perf with RTC_SCENE_ROBUST)\n\t\t\trtcNewScene(*g_device.get())\n\t\t\t); // set a custom deleter\n\n\t\tif (_scene == nullptr)\n\t\t\tSIBR_LOG << \"Cannot create an embree scene\" << std::endl;\n\t\telse {\n\t\t\t//SIBR_LOG << \"Embree device and scene created\" << std::endl;\n\t\t\t//SIBR_LOG << \"Warning Backface culling state : \"<< rtcGetDeviceProperty(*g_device, RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED) << std::endl;\n\t\t\treturn true; // Success\n\t\t}\n\t\treturn false; // Fail\n\t}\n\n\tRaycaster::geomId\tRaycaster::addMesh(const sibr::Mesh& mesh)\n\t{\n\t\treturn addGenericMesh(mesh, RTC_BUILD_QUALITY_HIGH);\n\t}\n\n\tRaycaster::geomId\tRaycaster::addDynamicMesh(const sibr::Mesh& mesh)\n\t{\n\t\treturn addGenericMesh(mesh, RTC_BUILD_QUALITY_LOW);\n\t}\n\n\tRaycaster::geomId\tRaycaster::addGenericMesh(const sibr::Mesh& mesh, RTCBuildQuality type)\n\t{\n\t\tif (init() == false)\n\t\t\treturn Raycaster::InvalidGeomId;\n\n\t\tconst sibr::Mesh::Vertices& vertices = mesh.vertices();\n\t\tconst sibr::Mesh::Triangles& triangles = mesh.triangles();\n\n\t\tRTCGeometry geom_0 = rtcNewGeometry(*g_device.get(), RTC_GEOMETRY_TYPE_TRIANGLE); // EMBREE_FIXME: check if geometry gets properly committed\n\t\trtcSetGeometryBuildQuality(geom_0, type);\n\t\trtcSetGeometryTimeStepCount(geom_0, 1);\n\t\tgeomId id = rtcAttachGeometry(*_scene.get(), geom_0);\n\t\t//rtcReleaseGeometry(geom_0);\n\n\t\tif (id == Raycaster::InvalidGeomId) {\n\t\t\trtcCommitGeometry(geom_0);\n\t\t\treturn Raycaster::InvalidGeomId;\n\t\t}\n\n\t\tstruct Vertex { float x, y, z, a; };\n\t\tstruct Triangle { int v0, v1, v2; };\n\n\t\t{ // Fill vertices of the geometry\n\t\t\tVertex* vert = (Vertex*)rtcSetNewGeometryBuffer(geom_0, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, 4 * sizeof(float), vertices.size());\n\t\t\tfor (uint i = 0; i < mesh.vertices().size(); ++i)\n\t\t\t{\n\t\t\t\tvert[i].x = vertices[i][0];\n\t\t\t\tvert[i].y = vertices[i][1];\n\t\t\t\tvert[i].z = vertices[i][2];\n\t\t\t\tvert[i].a = 1.f;\n\t\t\t}\n\n\t\t}\n\n\t\t{ // Fill triangle indices of the geometry\n\t\t\tTriangle* tri = (Triangle*)rtcSetNewGeometryBuffer(geom_0, RTC_BUFFER_TYPE_INDEX, 0, RTC_FORMAT_UINT3, 3 * sizeof(int), triangles.size());\n\t\t\tfor (uint i = 0; i < triangles.size(); ++i)\n\t\t\t{\n\t\t\t\ttri[i].v0 = triangles[i][0];\n\t\t\t\ttri[i].v1 = triangles[i][1];\n\t\t\t\ttri[i].v2 = triangles[i][2];\n\t\t\t}\n\n\t\t}\n\n\t\trtcCommitGeometry(geom_0);\n\n\t\t// Commit all changes on the scene\n\t\trtcCommitScene(*_scene.get());\n\n\t\treturn id;\n\t}\n\n\t// xform a mesh by transformation matrix \"mat\". Note that the original positions\n\t// are always stored in mesh.vertices -- we only xform the vertices in the embree buffer\n\tvoid\tRaycaster::xformRtcMeshOnly(sibr::Mesh& mesh, geomId mesh_id, sibr::Matrix4f& mat, sibr::Vector3f& centerPt, float& maxlen)\n\t{\n\t\tstruct Vertex { float x, y, z, a; };\n\t\tVertex* vert = (Vertex*)rtcGetGeometryBufferData(rtcGetGeometry(*_scene.get(), mesh_id), RTC_BUFFER_TYPE_VERTEX, 0) /* EMBREE_FIXME: check if this should be rtcSetNewGeometryBuffer */;\n\t\tsibr::Vector4f averagePt = sibr::Vector4f(0, 0, 0, 1);\n\t\tmaxlen = 0;\n\n\t\tconst sibr::Mesh::Vertices& vertices = mesh.vertices();\n\t\t//const sibr::Mesh::Normals& normals = mesh.normals();\n\t\tfor (uint i = 0; i < mesh.vertices().size(); ++i)\n\t\t{\n\t\t\tsibr::Vector4f v;\n\n\t\t\t// reset to original position\n\t\t\tv[0] = vert[i].x = vertices[i][0];\n\t\t\tv[1] = vert[i].y = vertices[i][1];\n\t\t\tv[2] = vert[i].z = vertices[i][2];\n\t\t\tv[3] = vert[i].a = 1.f;\n\n\t\t\tv = mat * v;\n\t\t\tvert[i].x = v[0], vert[i].y = v[1], vert[i].z = v[2];\n\t\t\taveragePt += v;\n\t\t\tfloat d = sibr::Vector3f(sibr::Vector4f(averagePt / (float)((i == 0) ? 1 : i)).xyz() - v.xyz()).norm();\n\t\t\tif (d > maxlen)\n\t\t\t\tmaxlen = d;\n\t\t}\n\n\t\tsibr::Vector4f cp = averagePt / (float)mesh.vertices().size();\n\t\tcenterPt = sibr::Vector3f(cp[0], cp[1], cp[2]);\n\n\t\t// Update mesh\n\t\trtcCommitGeometry(rtcGetGeometry(*_scene.get(), mesh_id));\n\t\t// Commit changes to scene\n\t\trtcCommitScene(*_scene.get());\n\t}\n\n\tbool\tRaycaster::hitSomething(const Ray& inray, float minDist)\n\t{\n\t\tassert(minDist >= 0.f);\n\n\t\tRTCRay ray;\n\t\tray.flags = 0;\n\t\tray.org_x = inray.orig()[0];\n\t\tray.org_y = inray.orig()[1];\n\t\tray.org_z = inray.orig()[2];\n\t\tray.dir_x = inray.dir()[0];\n\t\tray.dir_y = inray.dir()[1];\n\t\tray.dir_z = inray.dir()[2];\n\n\t\tray.tnear = minDist;\n\t\tray.tfar = RayHit::InfinityDist;\n\n\t\tif (init() == false)\n\t\t\tSIBR_ERR << \"cannot initialize embree, failed cast rays.\" << std::endl;\n\t\telse\n\t\t{\n\t\t\tRTCIntersectContext context;\n\t\t\trtcInitIntersectContext(&context);\n\t\t\trtcOccluded1(*_scene.get(), &context, &ray);\n\t\t}\n\t\treturn ray.tfar < 0.0f;\n\t}\n\n\tstd::array<bool, 8>\tRaycaster::hitSomething8(const std::array<Ray, 8> & inray, float minDist)\n\t{\n\t\tassert(minDist >= 0.f);\n\n\t\tRTCRay8 ray;\n\t\tfor (int r = 0; r < 8; r++) {\n\t\t\tray.org_x[r] = inray[r].orig()[0];\n\t\t\tray.org_y[r] = inray[r].orig()[1];\n\t\t\tray.org_z[r] = inray[r].orig()[2];\n\t\t\tray.dir_x[r] = inray[r].dir()[0];\n\t\t\tray.dir_y[r] = inray[r].dir()[1];\n\t\t\tray.dir_z[r] = inray[r].dir()[2];\n\n\t\t\tray.tnear[r] = minDist;\n\t\t\tray.tfar[r] = RayHit::InfinityDist;\n\t\t}\n\n\t\tint valid8[8] = { -1,-1,-1,-1, -1, -1, -1, -1 };\n\t\tif (init() == false)\n\t\t\tSIBR_ERR << \"cannot initialize embree, failed cast rays.\" << std::endl;\n\t\telse\n\t\t{\n\t\t\tRTCIntersectContext context;\n\t\t\trtcInitIntersectContext(&context);\n\t\t\trtcOccluded8(valid8, *_scene.get(), &context, &ray);\n\t\t}\n\n\t\tstd::array<bool, 8> res;\n\t\tfor (int r = 0; r < 8; r++) {\n\t\t\tbool hit = (ray.tfar[r] < 0.0f );\n\t\t\tres[r] = hit;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tRayHit\tRaycaster::intersect(const Ray& inray, float minDist)\n\t{\n\t\tassert(minDist >= 0.f);\n\n\t\tRTCRayHit rh;\n\t\trh.ray.flags = 0;\n\t\trh.ray.org_x = inray.orig()[0];\n\t\trh.ray.org_y = inray.orig()[1];\n\t\trh.ray.org_z = inray.orig()[2];\n\t\trh.ray.dir_x = inray.dir()[0];\n\t\trh.ray.dir_y = inray.dir()[1];\n\t\trh.ray.dir_z = inray.dir()[2];\n\n\t\trh.ray.tnear = minDist;\n\t\trh.ray.tfar = RayHit::InfinityDist;\n\t\trh.hit.geomID = RTC_INVALID_GEOMETRY_ID;\n\n\t\tif (init() == false)\n\t\t\tSIBR_ERR << \"cannot initialize embree, failed cast rays.\" << std::endl;\n\t\telse\n\t\t{\n\t\t\tRTCIntersectContext context;\n\t\t\trtcInitIntersectContext(&context);\n\t\t\trtcIntersect1(*_scene.get(), &context, &rh);\n\t\t\trh.hit.Ng_x = -rh.hit.Ng_x; // EMBREE_FIXME: only correct for triangles,quads, and subdivision surfaces\n\t\t\trh.hit.Ng_y = -rh.hit.Ng_y;\n\t\t\trh.hit.Ng_z = -rh.hit.Ng_z;\n\t\t}\n\n\t\t// Convert to the RayHit struct (used for abstract embree)\n\n\t\tRayHit::Primitive prim;\n\t\tprim.geomID = rh.hit.geomID;\n\t\tprim.instID = rh.hit.instID[0];\n\t\tprim.triID = rh.hit.primID;\n\n\t\tRayHit::BCCoord coord;\n\t\tcoord.u = rh.hit.u;\n\t\tcoord.v = rh.hit.v;\n\n\t\tsibr::Vector3f normal = sibr::Vector3f(rh.hit.Ng_x, rh.hit.Ng_y, rh.hit.Ng_z);\n\n\t\t// Return the result.\n\t\treturn RayHit(inray, rh.ray.tfar, coord, normal, prim);\n\t}\n\n\tstd::array<RayHit, 8>\tRaycaster::intersect8(const std::array<Ray, 8> & inray, const std::vector<int> & valid8, float minDist)\n\t{\n\t\tassert(minDist >= 0.f);\n\n\t\tRTCRayHit8 rh;\n\t\tfor (int r = 0; r < 8; r++) {\n\t\t\trh.ray.org_x[r] = inray[r].orig()[0];\n\t\t\trh.ray.org_y[r] = inray[r].orig()[1];\n\t\t\trh.ray.org_z[r] = inray[r].orig()[2];\n\t\t\trh.ray.dir_x[r] = inray[r].dir()[0];\n\t\t\trh.ray.dir_y[r] = inray[r].dir()[1];\n\t\t\trh.ray.dir_z[r] = inray[r].dir()[2];\n\n\t\t\trh.ray.tnear[r] = minDist;\n\t\t\trh.ray.tfar[r] = RayHit::InfinityDist;\n\t\t\trh.hit.geomID[r] = RTC_INVALID_GEOMETRY_ID;\n\t\t}\n\n\t\tif (init() == false)\n\t\t\tSIBR_ERR << \"cannot initialize embree, failed cast rays.\" << std::endl;\n\t\telse\n\t\t{\n\t\t\tRTCIntersectContext context;\n\t\t\trtcInitIntersectContext(&context);\n\t\t\trtcIntersect8(valid8.data(), *_scene.get(), &context, &rh);\n\t\t}\n\n\t\tstd::array<RayHit, 8> res;\n\t\tfor (int r = 0; r < 8; r++) {\n\t\t\tif (valid8[r])\n\t\t\t\tres[r] = {\n\t\t\t\t\tinray[r],\n\t\t\t\t\trh.ray.tfar[r],\n\t\t\t\t\tRayHit::BCCoord{\n\t\t\t\t\t\trh.hit.u[r],rh.hit.v[r]\n\t\t\t\t\t},\n\t\t\t\t\tsibr::Vector3f(rh.hit.Ng_x[r], rh.hit.Ng_y[r], rh.hit.Ng_z[r]),\n\t\t\t\t\tRayHit::Primitive{\n#ifdef SIBR_OS_WINDOWS\n\t\t\t\t\t\t(uint)rh.hit.primID[r] ,(uint)rh.hit.geomID[r],(uint)rh.hit.instID[r]\n#else\n\t\t\t\t\t\t// Considering RTC_MAX_INSTANCE_LEVEL_COUNT to be 1 (Single-level instancing); see https://www.embree.org/api.html#rtchit\n\t\t\t\t\t\t(uint)rh.hit.primID[r] ,(uint)rh.hit.geomID[r],(uint)rh.hit.instID[0][r]\n#endif\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t}\n\t\treturn res;\n\t}\n\n\tvoid Raycaster::clearGeometry()\n\t{\n\t\t_scene.reset();\n\t}\n\n\tsibr::Vector3f Raycaster::smoothNormal(const sibr::Mesh& mesh, const RayHit& hit)\n\t{\n\t\tif (!mesh.hasNormals()) {\n\t\t\tSIBR_ERR << \" cannot compute smoothed normals if the mesh does not have normals \" << std::endl;\n\t\t}\n\t\tconst sibr::Mesh::Normals& normals = mesh.normals();\n\t\tconst sibr::Vector3u& tri = mesh.triangles()[hit.primitive().triID];\n\n\t\tconst float ucoord = hit.barycentricCoord().u;\n\t\tconst float vcoord = hit.barycentricCoord().v;\n\t\tfloat wcoord = 1.f - ucoord - vcoord;\n\t\twcoord = (wcoord >= 0.0f ? (wcoord <= 1.0f ? wcoord : 1.0f) : 0.0f);\n\n\t\treturn (wcoord * normals[tri[0]] + ucoord * normals[tri[1]] + vcoord * normals[tri[2]]).normalized();\n\t}\n\n\tsibr::Vector3f Raycaster::smoothColor(const sibr::Mesh& mesh, const RayHit& hit)\n\t{\n\t\tif (!mesh.hasColors()) {\n\t\t\tSIBR_ERR << \" cannot compute smoothed color if the mesh does not have colors \" << std::endl;\n\t\t}\n\t\tconst sibr::Mesh::Colors& colors = mesh.colors();\n\t\tconst sibr::Vector3u& tri = mesh.triangles()[hit.primitive().triID];\n\n\t\tconst float ucoord = hit.barycentricCoord().u;\n\t\tconst float vcoord = hit.barycentricCoord().v;\n\t\tfloat wcoord = 1.f - ucoord - vcoord;\n\t\twcoord = (wcoord >= 0.0f ? (wcoord <= 1.0f ? wcoord : 1.0f) : 0.0f);\n\n\t\treturn wcoord * colors[tri[0]] + ucoord * colors[tri[1]] + vcoord * colors[tri[2]];\n\t}\n\n\tsibr::Vector2f Raycaster::smoothUV(const sibr::Mesh& mesh, const RayHit& hit)\n\t{\n\t\tif (!mesh.hasTexCoords()) {\n\t\t\tSIBR_ERR << \" cannot compute UV if the mesh does not have texcoords \" << std::endl;\n\t\t}\n\t\tconst sibr::Mesh::UVs& uvs = mesh.texCoords();\n\t\tconst sibr::Vector3u& tri = mesh.triangles()[hit.primitive().triID];\n\n\t\tconst float ucoord = hit.barycentricCoord().u;\n\t\tconst float vcoord = hit.barycentricCoord().v;\n\t\tfloat wcoord = 1.f - ucoord - vcoord;\n\t\twcoord = (wcoord >= 0.0f ? (wcoord <= 1.0f ? wcoord : 1.0f) : 0.0f);\n\n\t\treturn wcoord * uvs[tri[0]] + ucoord * uvs[tri[1]] + vcoord * uvs[tri[2]];\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/Raycaster.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# pragma warning(push, 0)\r\n#  include <embree3/rtcore.h>\r\n#  include <embree3/rtcore_ray.h>\r\n#  include <xmmintrin.h>\t// functions for setting the control register\r\n#  include <pmmintrin.h>\t// functions for setting the control register\r\n# pragma warning(pop)\r\n\r\n# include <core/graphics/Mesh.hpp>\r\n# include <core/system/Matrix.hpp>\r\n# include \"core/raycaster/Config.hpp\"\r\n# include \"core/raycaster/Ray.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\t///\r\n\t/// This class can be used to cast rays against a scene containing triangular\r\n\t/// meshes. You can check for intersections with the geometry and get\r\n\t/// information about the hit (such as coordinates, distance, triangle id).\r\n\t///\r\n\t/// You should have one or few instance of this class (for performance\r\n\t/// purposes). Each instance can run in parallel.\r\n\t///\r\n\t/// \\note This abstraction is built on top of Embree.\r\n\t/// \\warning There is no backface culling applied.\r\n\t/// \\ingroup sibr_raycaster\r\n\t///\r\n\tclass SIBR_RAYCASTER_EXPORT Raycaster\r\n\t{\r\n\tpublic:\r\n\t\ttypedef std::shared_ptr<RTCDevice>\tRTCDevicePtr;\r\n\t\ttypedef std::shared_ptr<RTCScene>\t\tRTCScenePtr;\r\n\t\ttypedef std::shared_ptr<Raycaster>\t\tPtr;\r\n\r\n\t\ttypedef\tuint\tgeomId;\r\n\t\t/// Stores a number representing an invalid geom id.\r\n\t\tstatic const geomId InvalidGeomId; \r\n\r\n\t\t/// Destructor.\r\n\t\t~Raycaster( void );\r\n\r\n\r\n\t\t/// Init the raycaster.\r\n\t\t/// Called automatically whenever you call a member that need this\r\n\t\t/// instance to be init. However, you can call it manually to check\r\n\t\t/// error on init.\r\n\t\t/// \\param sceneType the type of scene, see Embree doc.\r\n\t\t/// \\return a success flag\r\n\t\tbool\tinit(RTCSceneFlags sceneType = RTC_SCENE_FLAG_NONE );\r\n\r\n\t\t/// Add a triangle mesh to the raycast scene, taht you won't modify frequently\r\n\t\t/// Return the id  of the geometry added so you can track your mesh (and compare\r\n\t\t/// its id to the one stored in RayHits).\r\n\t\t/// \\param mesh the mesh to add\r\n\t\t/// \\return the mesh ID or Raycaster::InvalidGeomId if it fails.\r\n\t\tgeomId\taddMesh( const sibr::Mesh& mesh );\r\n\r\n\t\t/// Add a triangle mesh to the raycast scene, that you will frequently update.\r\n\t\t/// \\param mesh the mesh to add\r\n\t\t/// \\return the mesh ID or Raycaster::InvalidGeomId if it fails.\r\n\t\tgeomId\taddDynamicMesh( const sibr::Mesh& mesh );\r\n\r\n\t\t/// Add a triangle mesh to the raycast scene.\r\n\t\t/// \\param mesh the mesh to add\r\n\t\t/// \\param type the type of mesh\r\n\t\t/// \\return the mesh ID or Raycaster::InvalidGeomId if it fails.\r\n\t\tgeomId\taddGenericMesh( const sibr::Mesh& mesh, RTCBuildQuality type );\r\n\r\n\t\t/// Transform the vertices of a mesh by applying a sibr::Matrix4f mat.\r\n\t\t/// \\note The original positions are always stored *unchanged* in mesh.vertices -- we only xform the vertices in the embree buffer\r\n\t\t/// \\param mesh the mesh to transform\r\n\t\t/// \\param mesh_id the corresponding raycaster mesh id\r\n\t\t/// \\param mat the transformation to apply\r\n\t\t/// \\param centerPt will contain the new centroid\r\n\t\t/// \\param maxlen will contain the maximum distance from a vertex to the centroid\r\n\t\t/// \\bug maxlen is computed incrementally and may be incorrect\r\n\t\tvoid xformRtcMeshOnly(sibr::Mesh& mesh, geomId mesh_id, sibr::Matrix4f& mat, sibr::Vector3f& centerPt, float& maxlen);\r\n\r\n\t\t/// Launch a ray into the raycaster scene. Return information about\r\n\t\t/// this cast in RayHit. To simply know if something has been hit, use RayHit::hitSomething().\r\n\t\t/// \\sa hitSomething\r\n\t\t/// \\param ray the ray to cast\r\n\t\t/// \\param minDist Any intersection closer than minDist from the ray origin will be ignored. Useful to avoid self intersections. \r\n\t\t/// \\return the (potential) intersection information\r\n\t\tRayHit\tintersect( const Ray& ray, float minDist=0.f  );\r\n\r\n\t\t/// Launch 8 rays into the raycaster scene in an optimized fashion, reporting intersections infos.\r\n\t\t/// \\param inray the rays to cast\r\n\t\t/// \\param valid8 an indication of which of the rays should be cast\r\n\t\t/// \\param minDist Any intersection closer than minDist from the ray origin will be ignored. Useful to avoid self intersections. \r\n\t\t/// \\return the list of (potential) intersection informations\r\n\t\tstd::array<RayHit, 8>\tintersect8(const std::array<Ray, 8>& inray,const std::vector<int> & valid8=std::vector<int>(8,-1), float minDist = 0.f );\r\n\r\n\t\t/// Optimized ray-cast that only tells you if an intersection occured.\r\n\t\t/// \\sa intersect\r\n\t\t/// \\param ray the ray to cast\r\n\t\t/// \\param minDist Any intersection closer than minDist from the ray origin will be ignored. Useful to avoid self intersections. \r\n\t\t/// \\return true if an intersection took place\r\n\t\tbool\thitSomething( const Ray& ray, float minDist=0.f );\r\n\r\n\t\t/// Launch 8 rays into the raycaster scene in an optimized fashion, reporting if intersections occured.\r\n\t\t/// \\param inray the rays to cast\r\n\t\t/// \\param minDist Any intersection closer than minDist from the ray origin will be ignored. Useful to avoid self intersections. \r\n\t\t/// \\return a list of boolean denoting if intersections happened\r\n\t\tstd::array<bool, 8>\thitSomething8(const std::array<Ray, 8>& inray, float minDist = 0.f);\r\n\r\n\t\t/// Disable geometry to avoid raycasting against it (eg background when only intersecting a foreground object).\r\n\t\t/// \\param id the mesh to disable\r\n\t\t/// \\todo Untested.\r\n\t\tvoid\tdisableGeom(geomId id) { rtcDisableGeometry(rtcGetGeometry((*_scene.get()),id)); rtcCommitGeometry(rtcGetGeometry(*_scene.get(),id)); rtcCommitScene(*_scene.get()); }\r\n\r\n\t\t/// Enable geometry to start raycasting it again.\r\n\t\t/// \\param id the geometry to enable \r\n\t\t/// \\todo Untested.\r\n\t\tvoid\tenableGeom(geomId id) { rtcEnableGeometry(rtcGetGeometry((*_scene.get()),id)); rtcCommitGeometry(rtcGetGeometry(*_scene.get(),id)); rtcCommitScene(*_scene.get());}\r\n\r\n\t\t/// Delete geometry\r\n\t\t/// \\param id the geometry to delete\r\n\t\tvoid\tdeleteGeom(geomId id) { rtcReleaseGeometry(rtcGetGeometry((*_scene.get()),id)); rtcCommitGeometry(rtcGetGeometry(*_scene.get(),id)); rtcCommitScene(*_scene.get());} \r\n\r\n\t\t/// Clears internal scene..\r\n\t\tvoid clearGeometry();\r\n\r\n\t\t/// Returns the normalized smooth normal (shading normal) from a hit, assuming the mesh has normals\r\n\t\t/// \\param mesh sibr::Mesh used by raycaster\r\n\t\t/// \\param hit intersection basic information\r\n\t\t/// \\return the interpolated normalized normal\r\n\t\tstatic sibr::Vector3f smoothNormal(const sibr::Mesh & mesh, const RayHit & hit);\r\n\r\n\t\t/// Interpolate color at a hit (barycentric interpolation), assuming the mesh has colors.\r\n\t\t/// \\param mesh sibr::Mesh used by raycaster\r\n\t\t/// \\param hit intersection basic information\r\n\t\t/// \\return the interpolated color\r\n\t\tstatic sibr::Vector3f smoothColor(const sibr::Mesh & mesh, const RayHit & hit);\r\n\r\n\t\t/// Interpolate texcoords from a hit (barycentric interpolation), assuming the mesh has UVs.\r\n\t\t/// \\param mesh sibr::Mesh used by raycaster\r\n\t\t/// \\param hit intersection basic information\r\n\t\t/// \\‚eturn the interpolated texture coordinates\r\n\t\tstatic sibr::Vector2f smoothUV(const sibr::Mesh & mesh, const RayHit & hit);\r\n\r\n\t\t/// \\return true if the raycaster is initialized. \r\n\t\tbool isInit() { return g_device && _scene; }\r\n\r\n\tprivate: \r\n\r\n\t\t/// Will be called by embree whenever an error occurs\r\n\t\t/// \\param userPtr the user data pointer\r\n\t\t/// \\param code the error code\r\n\t\t/// \\param msg additional info message.\r\n\t\tstatic void rtcErrorCallback(void* userPtr, RTCError code, const char* msg);\r\n\r\n\t\t\r\n\t\tstatic bool g_initRegisterFlag; ///< Used to initialize flag of registers used by SSE\r\n\t\tstatic RTCDevicePtr\tg_device;\t///< embree device (context for a raycaster)\r\n\r\n\t\t/// \\return the internal scene pointer\r\n\t\tRTCScenePtr\tscene() \t{ return _scene; }\r\n\r\n\t\tRTCScenePtr\t\t_scene;\t\t///< scene storing raycastable meshes\r\n\t\tRTCDevicePtr\t_devicePtr;\t///< embree device (context for a raycaster)\r\n\t};\r\n\r\n\t///// DEFINITION /////\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/VoxelGrid.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"VoxelGrid.hpp\"\n\nnamespace sibr {\n\n\tVoxelGridBase::VoxelGridBase(const Box & boundingBox, int n, bool forceCube)\n\t\t: VoxelGridBase(boundingBox, sibr::Vector3i(n, n, n), forceCube)\n\t{\n\t}\n\n\tVoxelGridBase::VoxelGridBase(const Box & boundingBox, const sibr::Vector3i & numsPerDim, bool forceCube)\n\t\t: box(boundingBox), dims(numsPerDim), _generator(0), _distribution(-1.0, 1.0)\n\t{\n\t\tif (forceCube) {\n\t\t\tfloat maxDimSize = box.sizes().cwiseQuotient(dims.cast<float>()).maxCoeff();\n\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\tdims[c] = (int)std::round(box.sizes()[c] / maxDimSize);\n\t\t\t}\n\t\t}\n\t\tcellSize = box.sizes().cwiseQuotient(dims.cast<float>());\n\t\tcellSizeNorm = cellSize.norm();\n\n\t\t//std::cout << dims << std::endl;\n\t\t//std::cout << getCellSize() << std::endl;\n\n\t\tstatic const sibr::Mesh::Triangles trianglesBorders =\n\t\t{\n\t\t\t{ 0,4, 4 },\n\t\t{ 5,1, 1 },\n\t\t{ 4,5, 5 },\n\t\t{ 0,1, 1 },\n\t\t{ 2,6, 6 },\n\t\t{ 7,3, 3 },\n\t\t{ 6,7, 7 },\n\t\t{ 2,3, 3 },\n\t\t{ 0,2, 2 },\n\t\t{ 1,3, 3 },\n\t\t{ 4,6, 6 },\n\t\t{ 5,7, 7 }\n\t\t};\n\n\n\t\tBox baseCell;\n\t\tbaseCell.extend(box.min());\n\t\tbaseCell.extend(box.min() + getCellSize());\n\n\n\t\tsibr::Mesh::Vertices vs(8);\n\t\tfor (int i = 0; i < 8; ++i) {\n\t\t\tvs[i] = baseCell.corner((Box::CornerType)i);\n\t\t}\n\n\t\tbaseCellMesh.reset(new sibr::Mesh(false));\n\t\tbaseCellMesh->vertices(vs);\n\t\tbaseCellMesh->triangles(trianglesBorders);\n\n\t\tstatic const sibr::Mesh::Triangles trianglesFilled =\n\t\t{\n\t\t\t{ 0,1,5 },\n\t\t{ 0,5,4 },\n\t\t{ 1,3,7 },\n\t\t{ 1,7,5 },\n\t\t{ 3,2,6 },\n\t\t{ 3,6,7 },\n\t\t{ 2,0,4 },\n\t\t{ 2,4,6 },\n\t\t{ 0,2,3 },\n\t\t{ 0,3,1 },\n\t\t{ 4,5,7 },\n\t\t{ 4,7,6 }\n\t\t};\n\n\n\t\tbaseCellMeshFilled.reset(new sibr::Mesh(false));\n\t\tbaseCellMeshFilled->vertices(vs);\n\t\tbaseCellMeshFilled->triangles(trianglesFilled);\n\t}\n\n\tbool VoxelGridBase::isInside(const sibr::Vector3f & worldPos) const\n\t{\n\t\treturn box.contains(worldPos);\n\t}\n\n\tbool VoxelGridBase::outOfBounds(const sibr::Vector3i & v) const\n\t{\n\t\treturn (v.array() < 0).any() || (v.array() >= dims.array()).any();\n\t\t//return v[0] < 0 || v[0] >= dims[0] || v[1] < 0 || v[1] >= dims[1] || v[2] < 0 || v[2] >= dims[2];\n\t}\n\n\tsize_t VoxelGridBase::getNumCells() const\n\t{\n\t\treturn (size_t)dims.prod();\n\t}\n\n\tconst sibr::Vector3i & VoxelGridBase::getDims() const\n\t{\n\t\treturn dims;\n\t}\n\n\tsibr::Vector3i VoxelGridBase::getCell(size_t cellId) const\n\t{\n\t\tif (cellId >= getNumCells()) {\n\t\t\tSIBR_ERR;\n\t\t}\n\n\t\tsibr::Vector3i cell;\n\t\n\t\tstd::div_t div;\n\t\tfor (int i = 0; i < 2; ++i) {\n\t\t\tdiv = std::div((int)cellId, dims[i]);\n\t\t\tcell[i] = div.rem;\n\t\t\tcellId = div.quot;\n\t\t}\n\t\tcell[2] = (int)cellId;\n\n\t\tif (outOfBounds(cell)) {\n\t\t\tSIBR_ERR << cell << \" \" << dims;\n\t\t}\n\n\t\t//if ((cell.array() < 0).any() || (cell.array() >= dims.array()).any()) {\n\t\t//\tSIBR_ERR;\n\t\t//}\n\n\t\treturn cell;\n\t}\n\n\tsibr::Vector3i VoxelGridBase::getCell(const sibr::Vector3f & worldPos) const\n\t{\n\t\tsibr::Vector3f posUV = (worldPos - box.min()).cwiseQuotient(box.sizes());\n\t\tsibr::Vector3i cellCoord = (dims.cast<float>().cwiseProduct(posUV)).unaryExpr([](float f) { return std::floor(f); }).cast<int>();\n\n\t\tif ((cellCoord.array() < 0).any() || (cellCoord.array() >= dims.array()).any()) {\n\t\t\tSIBR_ERR;\n\t\t}\n\n\t\treturn cellCoord;\n\t}\n\n\tsibr::Vector3i VoxelGridBase::getCellInclusive(const sibr::Vector3f & worldPos) const\n\t{\n\t\tsibr::Vector3f posUV = (worldPos - box.min()).cwiseQuotient(box.sizes());\n\t\tsibr::Vector3i cellCoord = (dims.cast<float>().cwiseProduct(posUV).unaryExpr([](float f) { return std::floor(f); })).cast<int>();\n\n\t\t//because of the floor function, a pixel exactly at the boundary would be outside\n\t\tfor (int c = 0; c < 3; c++) {\n\t\t\tif (cellCoord[c] == -1){\n\t\t\t\t++cellCoord[c];\n\t\t\t}\n\t\t\tif (cellCoord[c] == dims[c]) {\n\t\t\t\t--cellCoord[c];\n\t\t\t}\n\t\t}\n\n\t\tif ((cellCoord.array() < 0).any() || (cellCoord.array() >= dims.array()).any()) {\n\t\t\tSIBR_ERR << worldPos << \" \" << box.min() << \" \" << box.max() << \" \" << cellCoord;\n\t\t}\n\n\t\treturn cellCoord;\n\t}\n\n\tstd::vector<size_t> VoxelGridBase::rayMarch(const Ray & ray) const\n\t{\n\t\tsibr::Vector3f start = ray.orig();\n\n\t\tif (!isInside(start)) {\n\t\t\tsibr::Vector3f intersection;\n\t\t\tif (intersectionWithBox(ray, intersection)) {\n\t\t\t\tstart = intersection;\n\t\t\t} else {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\t\t\n\t\tstart = start.cwiseMax(box.min()).cwiseMin(box.max() - 0.01f*getCellSize());\n\n\t\tsibr::Vector3i currentVoxel = getCell(start);\n\t\n\t\tsibr::Vector3i steps = ray.dir().unaryExpr([](float f) { return f >= 0 ? 1 : -1; }).cast<int>();\n\n\t\tconst sibr::Vector3f deltas = getCellSize().cwiseQuotient(ray.dir().cwiseAbs());\n\t\tconst sibr::Vector3f frac = (start - box.min()).cwiseQuotient(getCellSize()).unaryExpr([](float f) { return f - std::floor(f); });\n\t\tsibr::Vector3i finalVoxels; \n\t\tsibr::Vector3f ts;\n\t\tfor (int c = 0; c < 3; c++) {\n\t\t\tts[c] = deltas[c] * (ray.dir()[c] >= 0 ? 1.0f - frac[c] : frac[c]);\n\t\t\tfinalVoxels[c] = (ray.dir()[c] >= 0 ? dims[c] : -1);\n\t\t}\n\n\t\tstd::vector<size_t> visitedCellsIds;\n\t\twhile (true) {\n\t\t\tvisitedCellsIds.push_back(getCellId(currentVoxel));\n\t\t\n\t\t\tint c = getMinIndex(ts);\n\t\t\tcurrentVoxel[c] += steps[c];\n\t\t\tif (currentVoxel[c] == finalVoxels[c]) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tts[c] += deltas[c];\n\t\t}\n\n\t\treturn visitedCellsIds;\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getCellMesh(const sibr::Vector3i & cell) const\n\t{\n\t\treturn getCellMeshInternal(cell, false);\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getAllCellMesh() const\n\t{\n\t\treturn getAllCellMeshInternal(false);\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getCellMeshFilled(const sibr::Vector3i & cell) const\n\t{\n\t\treturn getCellMeshInternal(cell, true);\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getAllCellMeshFilled() const\n\t{\n\t\treturn getAllCellMeshInternal(true);\n\t}\n\n\tEigen::AlignedBox3f VoxelGridBase::getCellBox(size_t cellId) const\n\t{\n\t\tsibr::Vector3i cell = getCell(cellId);\n\t\tsibr::Vector3f center = getCellCenter(cell);\n\t\tsibr::Vector3f half_diagonal = 0.5f*getCellSize();\n\n\t\tEigen::AlignedBox3f out;\n\t\tout.extend(center - half_diagonal);\n\t\tout.extend(center + half_diagonal);\n\t\treturn out;\n\t}\n\n\tstd::vector<size_t> VoxelGridBase::getNeighbors(size_t cellId) const\n\t{\n\t\tstatic const sibr::Vector3f shifts[6] = {\n\t\t\t{-1, 0, 0}, { +1 ,0, 0 },\n\t\t\t{0, -1, 0},{0, +1, 0},\n\t\t\t{0, 0, -1},{0, 0, +1}\n\t\t};\n\n\t\tsibr::Vector3f pos = getCellCenter(cellId);\n\n\t\tstd::vector<size_t> n_ids;\n\t\tfor (int i = 0; i < 6; ++i) {\n\t\t\tsibr::Vector3f n_pos = pos + shifts[i].cwiseProduct(getCellSize());\n\t\t\tif (getBBox().contains(n_pos)) {\n\t\t\t\tn_ids.push_back(getCellId(n_pos));\n\t\t\t}\n\t\t}\n\t\treturn n_ids;\n\t}\n\n\tVoxelGridBase VoxelGridBase::extend(int numCells) const\n\t{\n\t\tsibr::Vector3f additionalSize = ((float)numCells)*getCellSize();\n\t\t//sibr::Vector3f half_diagonal = 0.5*box.diagonal() + additionalSize;\n\n\t\tBox extendedBox;\n\t\textendedBox.extend(box.max() + additionalSize);\n\t\textendedBox.extend(box.min() - additionalSize);\n\n\t\t//extendedBox.extend(box.center() + (additionalSize.norm() + 0.5f*box.diagonal().norm()) *box.diagonal().normalized());\n\t\t//extendedBox.extend(box.center() - (additionalSize.norm() + 0.5f*box.diagonal().norm()) *box.diagonal().normalized());\n\t\t\n\t\tVoxelGridBase extendedGrid = VoxelGridBase(extendedBox, dims.array() + 2*numCells);\n\t\treturn extendedGrid;\n\t}\n\n\tbool VoxelGridBase::intersectionWithBox(const Ray & ray, sibr::Vector3f & intersection) const\n\t{\n\t\t//adpated from https://github.com/papaboo/smalldacrt/\n\n\t\tsibr::Vector3f minTs = (box.min() - ray.orig()).cwiseQuotient(ray.dir());\n\t\tsibr::Vector3f maxTs = (box.max() - ray.orig()).cwiseQuotient(ray.dir());\n\n\t\tfloat nearT = (minTs.cwiseMin(maxTs)).maxCoeff();\n\t\tfloat farT = (minTs.cwiseMax(maxTs)).minCoeff();\n\n\t\tif (nearT <= farT && 0 <= nearT) {\n\t\t\tintersection = ray.orig() + nearT*ray.dir();\n\t\t\treturn true;\n\t\t} \n\t\treturn false;\t\n\t}\n\n\tconst sibr::Vector3f & VoxelGridBase::getCellSize() const\n\t{\n\t\treturn cellSize;\n\t}\n\n\tfloat VoxelGridBase::getCellSizeNorm() const\n\t{\n\t\treturn cellSizeNorm;\n\t}\n\n\tsibr::Vector3f VoxelGridBase::sampleCell(size_t cellId)\n\t{\n\t\tsibr::Vector3f out;\n\t\tout[0] = float(_distribution(_generator));\n\t\tout[1] = float(_distribution(_generator));\n\t\tout[2] = float(_distribution(_generator));\n\t\treturn getCellCenter(getCell(cellId)) + out.cwiseProduct(getCellSize());\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getCellMeshInternal(const sibr::Vector3i & cell, bool filled) const\n\t{\n\t\tsibr::Mesh::Ptr baseMesh = filled ? baseCellMeshFilled : baseCellMesh;\n\n\t\tconst sibr::Vector3f offset = cell.cast<float>().array()*getCellSize().array();\n\n\t\tauto out = std::make_shared<sibr::Mesh>(true);\n\t\tout->triangles(baseMesh->triangles());\n\t\tsibr::Mesh::Vertices vs(8);\n\t\tfor (int i = 0; i < 8; ++i) {\n\t\t\tvs[i] = baseMesh->vertices()[i] + offset;\n\t\t}\n\t\tout->vertices(vs);\n\t\treturn out;\n\t}\n\n\tsibr::Mesh::Ptr VoxelGridBase::getAllCellMeshInternal(bool filled) const\n\t{\n\t\tauto out = std::make_shared<sibr::Mesh>();\n\n\t\tsibr::Mesh::Ptr baseMesh = filled ? baseCellMeshFilled : baseCellMesh;\n\n\t\tconst int numT = int(baseMesh->triangles().size());\n\t\tconst int numTtotal = int(getNumCells())*numT;\n\t\tconst int numV = int(baseMesh->vertices().size());\n\t\tconst int numVtotal = int(getNumCells())*numV;\n\t\tconst sibr::Vector3u offsetT = sibr::Vector3u(numV, numV, numV);\n\n\t\tsibr::Mesh::Vertices vs(numVtotal);\n\t\tsibr::Mesh::Triangles ts(numTtotal);\n\t\tfor (int i = 0; i < getNumCells(); ++i) {\n\t\t\tconst auto cell = getCell(i);\n\t\t\tconst sibr::Vector3f offsetV = cell.cast<float>().array()*getCellSize().array();\n\n\t\t\tfor (int v = 0; v < numV; ++v) {\n\t\t\t\tvs[i*numV + v] = baseMesh->vertices()[v] + offsetV;\n\t\t\t}\n\t\t\tfor (int t = 0; t < numT; ++t) {\n\t\t\t\tts[i*numT + t] = baseMesh->triangles()[t] + i * offsetT;\n\t\t\t}\n\t\t}\n\n\t\tout->vertices(vs);\n\t\tout->triangles(ts);\n\t\treturn out;\n\t}\n\n\tsize_t VoxelGridBase::getCellId(const sibr::Vector3i & v) const\n\t{\n\t\tif (outOfBounds(v)) {\n\t\t\tSIBR_ERR << v << \" \" << dims;\n\t\t}\n\t\treturn v[0] + dims[0] * (v[1] + dims[1] * v[2]); //v[2] + dims[2] * (v[1] + dims[1] * v[0]);\n\t}\n\n\tsize_t VoxelGridBase::getCellId(const sibr::Vector3f & world_pos) const\n\t{\n\t\treturn getCellId(getCell(world_pos));\n\t}\n\n\tsibr::Vector3f VoxelGridBase::getCellCenter(const sibr::Vector3i & cell) const\n\t{\n\t\treturn box.min() + (0.5f*sibr::Vector3f(1, 1, 1) + cell.cast<float>()).cwiseProduct(getCellSize());\n\t}\n\n\tsibr::Vector3f VoxelGridBase::getCellCenter(size_t cellId) const\n\t{\n\t\treturn getCellCenter(getCell(cellId));\n\t}\n\n\tint VoxelGridBase::getMinIndex(const sibr::Vector3f & v)\n\t{\n\t\tif (v.x() < v.y()) {\n\t\t\treturn v.x() < v.z() ? 0 : 2;\n\t\t} else {\n\t\t\treturn v.y() < v.z() ? 1 : 2;\n\t\t}\n\t}\n\n\tsibr::Vector3f orthoVector(const sibr::Vector3f & v)\n\t{\n\t\treturn std::abs(v[2]) < std::abs(v[0]) ? sibr::Vector3f(v[1], -v[0], 0) : sibr::Vector3f(0, -v[2], v[1]);\n\t}\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/VoxelGrid.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n\n# include <vector>\n#include <random>\n\n# include <core/raycaster/Config.hpp>\n\n#include <core/raycaster/Ray.hpp>\n#include <core/graphics/Mesh.hpp>\n\nnamespace sibr\n{\n\t/**\n\t\\addtogroup sibr_raycaster\n\t@{\n\t*/\n\n\t/** Generate a vector orthogonal to the input one.\n\t\\param v the input vector\n\t\\return the ortogonal vector\n\t\\warning The output vector is not necessarily of unit length.\n\t*/\n\tsibr::Vector3f orthoVector(const sibr::Vector3f & v);\n\n\t/** Default voxel type, storing binary occupancy. */\n\tstruct BasicVoxelType {\n\n\t\t/** \\return true if filled. */\n\t\toperator bool() const { return used; }\n\t\t\n\t\tbool used = true; ///< The voxel status.\n\t};\n\n\t/** Basic voxel grid interface provinding cell manipulation and query helpers. \n\tIt doesn't store any voxel data. */\n\tclass SIBR_RAYCASTER_EXPORT VoxelGridBase {\n\t\tSIBR_CLASS_PTR(VoxelGridBase);\n\n\tpublic:\n\n\t\ttypedef Eigen::AlignedBox<float, 3> Box;\n\n\t\t/** Constructor.\n\t\t\\param boundingBox bounding box delimiting the voxellized region\n\t\t\\param numPerDim number of voxels along each dimension\n\t\t\\param forceCube if true, the largest dimension will be split in numPerDim voxels and the other such that the voxels are cubes in world space\n\t\t*/\n\t\tVoxelGridBase(const Box & boundingBox, int numPerDim, bool forceCube = true);\n\n\n\t\t/** Constructor.\n\t\t\\param boundingBox bounding box delimiting the voxellized region\n\t\t\\param numsPerDim number of voxels along each dimension\n\t\t\\param forceCube if true, the largest dimension will be split in numPerDims voxels and the other such that the voxels are cubes in world space\n\t\t*/\n\t\tVoxelGridBase(const Box & boundingBox, const sibr::Vector3i & numsPerDim, bool forceCube = true);\n\n\t\t/** Check if a position is in the voxel grid.\n\t\t\\param worldPos the world 3D position\n\t\t\\return true if the position is in the grid bounding box\n\t\t*/\n\t\tbool isInside(const sibr::Vector3f & worldPos) const;\n\n\t\t/** Check if a set of indices correspond to a reachable voxel.\n\t\t\\param cell the voxel integer coordinates\n\t\t\\return true if the voxel exists in the grid\n\t\t*/\n\t\tbool outOfBounds(const sibr::Vector3i & cell) const;\n\n\t\t/** \\return the number of voxels. */\n\t\tsize_t getNumCells() const;\n\n\t\t/** \\return the number of voxels along each axis. */\n\t\tconst sibr::Vector3i & getDims() const;\n\n\t\t/** Convert a linear cell ID to a set of 3D indices.\n\t\t\\param cellId linear ID\n\t\t\\return the indices of the voxel along each axis\n\t\t*/\n\t\tsibr::Vector3i getCell(size_t cellId) const;\n\n\t\t/** Convert a voxel 3D indices to a linear ID.\n\t\t\\param cell the voxel integer coordinates\n\t\t\\return the linear ID\n\t\t*/\n\t\tsize_t getCellId(const sibr::Vector3i & cell) const;\n\n\t\t/** Convert a 3D position to the linear ID of the voxel containing it.\n\t\t\\param world_pos the position\n\t\t\\return the linear ID of the voxel\n\t\t*/\n\t\tsize_t getCellId(const sibr::Vector3f & world_pos) const;\n\n\t\t/** Get the position of a voxel center in world space.\n\t\t\\param cell the voxel integer coordinates\n\t\t\\return the center 3D position\n\t\t*/\n\t\tsibr::Vector3f getCellCenter(const sibr::Vector3i & cell) const;\n\n\t\t/** Get the position of a voxel center in world space.\n\t\t\\param cellId linear voxel ID\n\t\t\\return the center 3D position\n\t\t*/\n\t\tsibr::Vector3f getCellCenter(size_t cellId) const;\n\n\t\t/** Intersect a ray with the voxel grid, listing all intersected voxels.\n\t\t\\param ray the ray to cast\n\t\t\\return linear IDs of the intersected voxels\n\t\t*/\n\t\tstd::vector<size_t> rayMarch(const Ray & ray) const;\n\n\t\t/** Generate a wireframe mesh representing a voxel.\n\t\t\\param cell the voxel integer coordinates\n\t\t\\return the generated wireframe cube mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getCellMesh(const sibr::Vector3i & cell) const;\n\n\t\t/** Generate a wireframe mesh representing all voxels.\n\t\t\\return the generated wireframe cube mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getAllCellMesh() const;\n\n\t\t/** Generate a triangle mesh representing a voxel.\n\t\t\\param cell the voxel integer coordinates\n\t\t\\return the generated filled cube mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getCellMeshFilled(const sibr::Vector3i & cell) const;\n\n\t\t/** Generate a triangle mesh representing all voxels.\n\t\t\\return the generated filled cube mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getAllCellMeshFilled() const;\n\n\t\t/** Get a voxel bounding box.\n\t\t\\param cellId the voxel linear index\n\t\t\\return the bounding box.\n\t\t*/\n\t\tEigen::AlignedBox3f getCellBox(size_t cellId) const;\n\n\t\t/** Get a voxel neighbors linear IDs.\n\t\t\\param cellId linear voxel ID\n\t\t\\return the linear IDs of the neigbors.\n\t\t*/\n\t\tstd::vector<size_t> getNeighbors(size_t cellId) const;\n\n\t\t/** Extend the voxel grid along all dimensions. \n\t\tThis means that if the initial count along a given axis was N, the new is N+2*numCells.\n\t\t\\param numCells the number of cells to add\n\t\t\\return the extended voxel grid\n\t\t*/\n\t\tVoxelGridBase extend(int numCells) const;\n\n\t\t/** \\return the voxel grid bounding box. */\n\t\tconst Box & getBBox() const { return box; }\n\n\t\t/** Return the index of the smallest coefficient of the input vector.\n\t\t\\param v the vector\n\t\t\\return the location of the minimum\n\t\t*/\n\t\tstatic int getMinIndex(const sibr::Vector3f & v);\n\t\t\n\t\t/** Get the integer coordinates of the cell containing a position.\n\t\t\\param worldPos the position\n\t\t\\return the cell integer coordinates\n\t\t*/\n\t\tsibr::Vector3i getCell(const sibr::Vector3f & worldPos) const;\n\n\t\t/** Get the integer coordinates of the cell containing a position.\n\t\tPositions along the boundaries of the voxel grid are considered as belonging to the closest cell.\n\t\t\\param worldPos the position\n\t\t\\return the cell integer coordinates\n\t\t*/\n\t\tsibr::Vector3i getCellInclusive(const sibr::Vector3f & worldPos) const;\n\n\t\t/** Check if a ray intersect the voxel grid.\n\t\t\\param ray the ray to cast\n\t\t\\param intersection will contain the intersection position if it exists\n\t\t\\return true if there is an intersection\n\t\t*/\n\t\tbool intersectionWithBox(const Ray & ray, sibr::Vector3f & intersection) const;\n\n\t\t/** \\return the size of a voxel. */\n\t\tconst sibr::Vector3f & getCellSize() const;\n\n\t\t/** \\return the length of a voxel diagonal. */\n\t\tfloat getCellSizeNorm() const;\n\n\t\t/** Sample a random position in a given voxel.\n\t\t\\param cellId the voxel to sample from\n\t\t\\return the sampled position\n\t\t\\note The random generator is seeded at 0 when creating the grid.\n\t\t\\warning The current implementation is sampling in center+(random(-1,1)^3)*cellSize.\n\t\t*/\n\t\tsibr::Vector3f sampleCell(size_t cellId);\n\n\tprotected:\n\n\t\t/** Helper to generate a voxel mesh.\n\t\t\\param cell the coordinates of the voxel to generate\n\t\t\\param filled should the mesh be wireframe (false) or faceted (true)\n\t\t\\return the generated mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getCellMeshInternal(const sibr::Vector3i & cell, bool filled) const;\n\n\t\t/** Helper to generate the voxel grid mesh.\n\t\t\\param filled should the mesh be wireframe (false) or faceted (true)\n\t\t\\return the generated mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getAllCellMeshInternal(bool filled) const;\n\n\t\tsibr::Vector3i dims; ///< Integer grid dimensions.\n\t\tsibr::Vector3f cellSize; ///< World space voxel size.\n\t\tfloat cellSizeNorm; ///< World space voxel diagonal length.\n\t\tBox box; ///< Grid bounding box.\n\t\tsibr::Mesh::Ptr baseCellMesh, baseCellMeshFilled; ///< Base meshes for visualisation.\n\n\t\tstd::mt19937 _generator; ///< Generator for sampling, seeded at 0.\n\t\tstd::uniform_real_distribution<double> _distribution; ///< (-1,1) distribution.\n\n\t};\n\n\n\t/** Voxel grid with custom data storage. */\n\ttemplate<typename CellType = BasicVoxelType> class VoxelGrid : public VoxelGridBase {\n\n\t\tSIBR_CLASS_PTR(VoxelGrid);\n\tpublic:\n\t\tusing VoxelType = CellType;\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t\\param boundingBox bounding box delimiting the voxellized region\n\t\t\\param numPerDim number of voxels along each dimension\n\t\t\\param forceCube if true, the largest dimension will be split in numPerDim voxels and the other such that the voxels are cubes in world space\n\t\t*/\n\t\tVoxelGrid(const Box & boundingBox, int numPerDim, bool forceCube = true)\n\t\t\t: VoxelGrid(boundingBox, sibr::Vector3i(numPerDim, numPerDim, numPerDim) , forceCube)\n\t\t{\n\t\t}\n\n\t\t/** Constructor.\n\t\t\\param boundingBox bounding box delimiting the voxellized region\n\t\t\\param numsPerDim number of voxels along each dimension\n\t\t\\param forceCube if true, the largest dimension will be split in numPerDim voxels and the other such that the voxels are cubes in world space\n\t\t*/\n\t\tVoxelGrid(const Box & boundingBox, const sibr::Vector3i & numsPerDim, bool forceCube = true)\n\t\t: VoxelGridBase(boundingBox, numsPerDim, forceCube) {\n\t\t\tdata.resize(getNumCells());\n\t\t}\n\n\t\t/** Get voxel at a given linear index.\n\t\t\\param cell_id the linear index\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tCellType & operator[](size_t cell_id) {\n\t\t\treturn data[cell_id];\n\t\t}\n\n\t\t/** Get voxel at a given linear index.\n\t\t\\param cell_id the linear index\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tconst CellType & operator[](size_t cell_id) const {\n\t\t\treturn data[cell_id];\n\t\t}\n\n\t\t/** Get voxel at given integer 3D coordinates.\n\t\t\\param x x integer coordinate\n\t\t\\param y y integer coordinate\n\t\t\\param z z integer coordinate\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tCellType & operator()(int x, int y, int z) {\n\t\t\tsibr::Vector3i v(x,y,z);\n\t\t\treturn data[getCellId(v)];\n\t\t}\n\n\t\t/** Get voxel at given integer 3D coordinates.\n\t\t\\param x x integer coordinate\n\t\t\\param y y integer coordinate\n\t\t\\param z z integer coordinate\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tconst CellType & operator()(int x, int y, int z) const {\n\t\t\tsibr::Vector3i v(x,y,z);\n\t\t\treturn data[getCellId(v)];\n\t\t}\n\n\t\t/** Get voxel at given integer 3D coordinates.\n\t\t\\param v integer coordinates\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tCellType & operator[](const sibr::Vector3i & v) {\n\t\t\treturn data[getCellId(v)];\n\t\t}\n\n\t\t/** Get voxel at given integer 3D coordinates.\n\t\t\\param v integer coordinates\n\t\t\\return a reference to the voxel\n\t\t*/\n\t\tconst CellType & operator[](const sibr::Vector3i & v) const {\n\t\t\treturn data[getCellId(v)];\n\t\t}\n\n\t\t/** Generate a mesh from all voxels satisfying a condition.\n\t\t\\param filled should the mesh be wireframe (false) or faceted (true)\n\t\t\\param func the predicate to evaluate, will receive as unique argument a voxel (CellType).\n\t\t\\return the generated mesh\n\t\t*/\n\t\ttemplate<typename FuncType>\n\t\tsibr::Mesh::Ptr getAllCellMeshWithCond(bool filled, const FuncType & func) const;\n\n\t\t/** Get cell meshes from their ids.\n\t\t\\param filled should the mesh be wireframe (false) or faceted (true)\n\t\t\\param cell_ids ids of cell meshes.\n\t\t\\return the generated mesh\n\t\t*/\n\t\tsibr::Mesh::Ptr getAllCellMeshWithIds(bool filled, std::vector<std::size_t> cell_ids) const;\n\n\t\t/** List the voxels that statisfy a condition (for instance fullness)\n\t\t\\param func the predicate to evaluate, will receive as unique argument a voxel (CellType).\n\t\t\\return a list of linear indices of all voxels such that func(voxel) is true.\n\t\t*/\n\t\ttemplate<typename FuncType>\n\t\tstd::vector<std::size_t> detect_non_empty_cells(const FuncType & func) const;\n\n\t\t/** \\return the voxel grid data. */\n\t\tconst std::vector<CellType> & getData() const {\n\t\t\treturn data;\n\t\t}\n\n\tprotected:\n\n\t\tstd::vector<CellType> data; ///< Voxels storage.\n\t};\n\n\n\n\ttemplate<typename CellType> template<typename FuncType>\n\tinline std::vector<std::size_t> VoxelGrid<CellType>::detect_non_empty_cells(const FuncType & func) const {\n\t\tstd::vector<std::size_t> out_ids;\n\t\tfor (size_t i = 0; i < data.size(); ++i) {\n\t\t\tif (func(data[i])) {\n\t\t\t\tout_ids.push_back(i);\n\t\t\t}\n\t\t}\n\t\treturn out_ids;\n\t}\n\n\ttemplate<typename CellType> template<typename FuncType>\n\tinline sibr::Mesh::Ptr VoxelGrid<CellType>::getAllCellMeshWithCond(bool filled, const FuncType & f) const\n\t{\n\t\tstd::vector<std::size_t> cell_ids = detect_non_empty_cells(f);\n\t\treturn getAllCellMeshWithIds(filled, cell_ids);\n\t}\n\n\t/** }@ */\n\n\ttemplate<typename CellType>\n\tinline sibr::Mesh::Ptr VoxelGrid<CellType>::getAllCellMeshWithIds(bool filled, std::vector<std::size_t> cell_ids) const\n\t{\n\t\tint numNonZero = (int)cell_ids.size();\n\n\t\tauto out = std::make_shared<sibr::Mesh>();\n\n\t\tsibr::Mesh::Ptr baseMesh = filled ? baseCellMeshFilled : baseCellMesh;\n\n\t\tconst int numT = (int)baseMesh->triangles().size();\n\t\tconst int numTtotal = numNonZero * numT;\n\t\tconst int numV = (int)baseMesh->vertices().size();\n\t\tconst int numVtotal = numNonZero * numV;\n\t\tconst sibr::Vector3u offsetT = sibr::Vector3u(numV, numV, numV);\n\n\t\tsibr::Mesh::Vertices vs(numVtotal);\n\t\tsibr::Mesh::Triangles ts(numTtotal);\n\t\tfor (int i = 0; i < numNonZero; ++i) {\n\t\t\tconst auto cell = getCell(cell_ids[i]);\n\t\t\tconst sibr::Vector3f offsetV = cell.cast<float>().array() * getCellSize().array();\n\n\t\t\tfor (int v = 0; v < numV; ++v) {\n\t\t\t\tvs[i * numV + v] = baseMesh->vertices()[v] + offsetV;\n\t\t\t}\n\t\t\tfor (int t = 0; t < numT; ++t) {\n\t\t\t\tts[i * numT + t] = baseMesh->triangles()[t] + i * offsetT;\n\t\t\t}\n\t\t}\n\n\t\tout->vertices(vs);\n\t\tout->triangles(ts);\n\t\treturn out;\n\t}\n\n} // namespace sibr\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/raycaster/sibr_raycaster.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_raycaster sibr_raycaster\n\n\t\\brief Raycasting utilities.\n\n\tThis module provides functionalities related to raycasting on 2D and 3D geometry. \n\tIt contains basic 2D intersection tests, a wrapper around the embree raycasting library (http://embree.github.io/), \n\tand helpers to perform raycasting over all pixels of an image.\n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/AddShadowRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <core/renderer/AddShadowRenderer.hpp>\n\nnamespace sibr { \n\tAddShadowRenderer::AddShadowRenderer( void )\n\t{\n\t\t_shader.init(\"AddShadowShader\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/texture.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/addshadow.frag\"));\n\t\t_paramInvProj.init(_shader, \"in_inv_proj\");\n\t\t_paramImgSize.init(_shader, \"in_image_size\");\n\t}\n\n\tvoid\tAddShadowRenderer::process(\n\t\tuint backgroundTextureID,\n\t\tuint foregroundTextureID,\n\t\tconst Vector2f& textureSize,\n\t\tconst Camera& camera,\n\n\t\tIRenderTarget& dst )\n\t{\n\t\tdst.bind();\n\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, foregroundTextureID );\n\t\tglActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, backgroundTextureID );\n\t\tglDisable(GL_DEPTH_TEST);\n\t\tglDisable(GL_BLEND);\n\t\tglDepthMask(GL_TRUE);\t\t// but write the current values\n\t\t_shader.begin();\n\t\t_paramInvProj.set(camera.invViewproj());\n\t\t_paramImgSize.set(textureSize);\n\t\tRenderUtility::renderScreenQuad();\n\t\t_shader.end();\n\n\t\tdst.unbind();\n\t}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/AddShadowRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Composite two rendered scenes while generating local cast shadows from the top one to the bottom one.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT AddShadowRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<AddShadowRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tAddShadowRenderer( void );\n\n\t\t/** Composite the two textures, they sjould contain color+depth information in the alpha channel.\n\t\t\\param backgroundTextureID handle of the background image\n\t\t\\param foregroundTextureID handle of the foreground image\n\t\t\\param textureSize the texture size (should be the same)\n\t\t\\param camera the viewpoint used\n\t\t\\param dst the destination rendertarget\n\t\t*/\n\t\tvoid\tprocess(\n\t\t\t/*input*/\tuint backgroundTextureID,\n\t\t\t\t\t\tuint foregroundTextureID,\n\t\t\t\t\t\tconst Vector2f& textureSize,\n\t\t\t\t\t\tconst Camera& camera,\n\t\t\t/*output*/\tIRenderTarget& dst );\n\n\tprivate:\n\n\t\tGLShader\t\t\t_shader; ///< Composite shader.\n\t\tGLParameter\t\t\t_paramInvProj; ///< Inverse proj matrix uniform.\n\t\tGLParameter\t\t\t_paramImgSize; ///< Image size uniform.\n\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/BinaryMeshRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"BinaryMeshRenderer.hpp\"\n\nnamespace sibr {\n\n\tBinaryMeshRenderer::BinaryMeshRenderer()\n\t{\n\t\tstd::string vertex_shader =\n\t\t\tSIBR_SHADER(420,\n\t\t\t\tuniform mat4 MVP;\n\t\tlayout(location = 0) in vec3 in_vertex;\n\t\tvoid main(void) {\n\t\t\tgl_Position = MVP * vec4(in_vertex, 1.0);\n\t\t}\n\t\t);\n\n\t\tstd::string fragment_shader = SIBR_SHADER(420,\n\t\t\tout vec4 out_color;\n\t\t\tuniform float epsilon;\n\t\tvoid main(void) {\n\t\t\tout_color = vec4(1, 1, 1, 1);\n\t\t\tgl_FragDepth = gl_FragCoord.z * (1.0 - epsilon);\n\t\t}\n\t\t);\n\n\t\t_shader.init(\"binaryMeshShader\", vertex_shader, fragment_shader);\n\t\t_paramMVP.init(_shader, \"MVP\");\n\t\tepsilon.init(_shader, \"epsilon\");\n\t}\n\n\tvoid BinaryMeshRenderer::process(const Mesh & mesh, const Camera & eye, IRenderTarget & dst)\n\t{\n\t\tdst.bind();\n\t\t_shader.begin();\n\t\t_paramMVP.set(eye.viewproj());\n\t\tepsilon.send();\n\n\t\tmesh.render(true, false);\n\t\t\n\t\t_shader.end();\n\t\tdst.unbind();\n\t}\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/BinaryMeshRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Render a binary mask of a mesh, with options to limit Z-fighting.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT BinaryMeshRenderer\n\t{\n\t\tSIBR_CLASS_PTR(BinaryMeshRenderer);\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tBinaryMeshRenderer();\n\n\t\t/** Render the mesh mask. \n\t\tRegions covered by the mesh will be filled with (1,1,1,1).\n\t\t\\param mesh the mesh to render\n\t\t\\param eye the viewpoint to use\n\t\t\\param dst the destination rendertarget\n\t\t*/\n\t\tvoid\tprocess( const Mesh& mesh, const Camera& eye, IRenderTarget& dst );\n\n\t\t/** Shift that can be used to modify the depth written, \n\t\tto avoid Z-fighting when rendering multiple masks of \n\t\tthe same mesh or combining masks.\n\t\tIf set to 0.0: no shift, if set to 1.0: all vertices sent to depth 0.0.\n\t\t\\return a reference to the shift\n\t\t*/\n\t\tfloat & getEpsilon() {\n\t\t\treturn epsilon.get();\n\t\t}\n\n\tprivate:\n\n\t\tGLShader\t\t\t\t\t_shader; ///< Mask shader.\n\t\tGLuniform<sibr::Matrix4f>\t_paramMVP; ///< MVP uniform.\n\t\tGLuniform<float>\t\t\tepsilon = 0; ///< Epsilon uniform.\n\t\t\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/BlurRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <core/renderer/BlurRenderer.hpp>\n\nnamespace sibr { \n\tBlurRenderer::BlurRenderer( void )\n\t{\n\t\t_shader.init(\"BlurShader\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/texture.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/blur.frag\"));\n\t\t_paramImgSize.init(_shader, \"in_image_size\");\n\t}\n\n\tvoid\tBlurRenderer::process( uint textureID, const Vector2f& textureSize, IRenderTarget& dst )\n\t{\n\t\tdst.bind();\n\n\t\tglDisable(GL_DEPTH_TEST);\n\t\tglDisable(GL_BLEND);\n\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID );\n\t\tglDisable(GL_DEPTH_TEST);\n\t\t_shader.begin();\n\t\t_paramImgSize.set(textureSize);\n\t\tRenderUtility::renderScreenQuad();\n\t\t_shader.end();\n\n\t\tdst.unbind();\n\t}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/BlurRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Texture.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Blur on color edges present in a texture.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT BlurRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<BlurRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tBlurRenderer( void );\n\n\t\t/** Process the texture.\n\t\t\\param textureID the texture to blur\n\t\t\\param textureSize the texture dimensions\n\t\t\\param dst the destination rendertarget\n\t\t*/\n\t\tvoid\tprocess(\n\t\t\t/*input*/\tuint textureID,\n\t\t\t/*input*/\tconst Vector2f& textureSize,\n\t\t\t/*output*/\tIRenderTarget& dst );\n\n\tprivate:\n\n\t\tGLShader\t\t\t_shader; ///< Blur shader.\n\t\tGLParameter\t\t\t_paramImgSize; ///< Texture size uniform.\n\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(sibr_renderer)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB SHADERS \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\" \"shaders/*.fp\" \"shaders/*.gp\" \"shaders/*.vp\")\nsource_group(\"Source Files\\\\shaders\" FILES ${SHADERS})\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\" \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\" \"shaders/*.fp\" \"shaders/*.gp\" \"shaders/*.vp\")\n\n## Specify target rules\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\n\ninclude_directories(${Boost_INCLUDE_DIRS} .)\nif(WIN32)\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tglfw3\n\tsibr_system\n\tsibr_view\n\tsibr_assets\n\tsibr_scene\n)\nelse()\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\t${GLFW_LIBRARY}\n\tsibr_system\n\tsibr_view\n\tsibr_assets\n\tsibr_scene\n)\nendif()\n\nadd_definitions( -DSIBR_EXP_RENDERER_EXPORTS -DBOOST_ALL_DYN_LINK  )\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n\tINSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tSHADERS \"${SHADERS}\"\n\tRSC_FOLDER \"core\"\n\tCOMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/ColoredMeshRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/Texture.hpp\"\n#include <core/renderer/ColoredMeshRenderer.hpp>\n\nnamespace sibr { \n\tColoredMeshRenderer::ColoredMeshRenderer( void )\n\t{\n\t\t_shader.init(\"ColoredMesh\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/colored_mesh.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/colored_mesh.frag\"));\n\t\t_paramMVP.init(_shader,\"MVP\");\n\t}\n\n\tvoid\tColoredMeshRenderer::process( const Mesh& mesh, const Camera& eye, IRenderTarget& target, sibr::Mesh::RenderMode mode, bool backFaceCulling )\n\t{\n\t\t//glViewport(0.f, 0.f, target.w(), target.h());\n\t\ttarget.bind();\n\t\tglClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);\n\t\t_shader.begin();\n\t\t_paramMVP.set(eye.viewproj());\n\t\tmesh.render(true, backFaceCulling);\n\t\t_shader.end();\n\t\ttarget.unbind();\n\t}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/ColoredMeshRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Render a mesh colored using the per-vertex color attribute.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT ColoredMeshRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<ColoredMeshRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tColoredMeshRenderer( void );\n\n\t\t/** Render the mesh using its vertices colors, interpolated over triangles.\n\t\t\\param mesh the mesh to render\n\t\t\\param eye the viewpoint to use\n\t\t\\param dst the destination rendertarget\n\t\t\\param mode the rendering mode of the mesh\n\t\t\\param backFaceCulling should backface culling be performed\n\t\t*/\n\t\tvoid\tprocess(\n\t\t\t/*input*/\tconst Mesh& mesh,\n\t\t\t/*input*/\tconst Camera& eye,\n\t\t\t/*output*/\tIRenderTarget& dst,\n\t\t\t/*mode*/    sibr::Mesh::RenderMode mode = sibr::Mesh::FillRenderMode,\n\t\t\t/*BFC*/     bool backFaceCulling = true);\n\n\tprivate:\n\n\t\tGLShader\t\t\t_shader; ///< Color shader.\n\t\tGLParameter\t\t\t_paramMVP; ///< MVP uniform.\n\t\t\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/system/Config.hpp>\n\n# ifdef SIBR_OS_WINDOWS\n#  ifdef SIBR_STATIC_DEFINE\n#    define SIBR_EXPORT\n#    define SIBR_NO_EXPORT\n#  else\n#    ifndef SIBR_EXP_RENDERER_EXPORT\n#      ifdef SIBR_EXP_RENDERER_EXPORTS\n/* We are building this library */\n#        define SIBR_EXP_RENDERER_EXPORT __declspec(dllexport)\n#      else\n/* We are using this library */\n#        define SIBR_EXP_RENDERER_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT\n#    endif\n#  endif\n# else\n#  define SIBR_EXP_RENDERER_EXPORT\n# endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/CopyRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <core/renderer/CopyRenderer.hpp>\n\nnamespace sibr { \n\tCopyRenderer::CopyRenderer(const std::string& vertFile, const std::string& fragFile)\n\t{\n\t\t_shader.init(\"CopyShader\",\n\t\t\tsibr::loadFile(vertFile),\n\t\t\tsibr::loadFile(fragFile));\n\n\t\t_flip.init(_shader, \"flip\");\n\t}\n\n\tvoid\tCopyRenderer::process( uint textureID, IRenderTarget& dst, bool disableTest )\n\t{\n\t\tif (disableTest)\n\t\t\tglDisable(GL_DEPTH_TEST);\n\t\telse\n\t\t\tglEnable(GL_DEPTH_TEST);\n\n\t\t_shader.begin();\n\t\t_flip.send();\n\n\t\tdst.clear();\n\t\tdst.bind();\n\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID );\n\t\tsibr::RenderUtility::renderScreenQuad();\n\n\t\tdst.unbind();\n\t\t_shader.end();\n\t}\n\n\tvoid\tCopyRenderer::copyToWindow(uint textureID, Window& dst)\n\t{\n\t\tglDisable(GL_DEPTH_TEST);\n\n\t\t_shader.begin();\n\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID);\n\t\tsibr::RenderUtility::renderScreenQuad();\n\n\t\t_shader.end();\n\t}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/CopyRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Window.hpp>\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Texture.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Copy the content of an input texture to another rendertarget or to the window.\n\tIf you need a basic copy, prefer using blit.\n\t\\sa sibr::blit\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT CopyRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<CopyRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/** Constructor. You can specify custom shaders, refer to noproj.vert and copy.frag for examples.\n\t\t\\param vertFile pah to the vertex shader file\n\t\t\\param fragFile pah to the fragment shader file\n\t\t*/\n\t\tCopyRenderer(\n\t\t\tconst std::string& vertFile = sibr::getShadersDirectory(\"core\") + \"/noproj.vert\",\n\t\t\tconst std::string& fragFile = sibr::getShadersDirectory(\"core\") + \"/copy.frag\"\n\t\t);\n\n\t\t/** Copy input texture to the output texture, copy also the input alpha into depth.\n\t\t\\param textureID the texture to copy\n\t\t\\param dst the destination\n\t\t\\param disableTest disable depth testing (depth won't be written)\n\t\t*/\n\t\tvoid\tprocess( uint textureID, IRenderTarget& dst,\n\t\t\tbool disableTest=true);\n\n\t\t/** Copy input texture to a window.\n\t\t\\param textureID the texture to copy\n\t\t\\param dst the destination window\n\t\t*/\n\t\tvoid\tcopyToWindow( uint textureID, Window& dst);\n\n\t\t/** \\return option to flip the texture when copying. */\n\t\tbool & flip() { return _flip.get(); }\n\n\tprivate:\n\t\t\n\t\tGLShader\t\t\t_shader; ///< Copy shader.\n\t\tGLuniform<bool>\t\t_flip = false; ///< Flip the texture when copying.\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/DepthRenderer.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n# include <core/renderer/DepthRenderer.hpp>\r\n# include \"core/graphics/RenderUtility.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\r\n\tDepthRenderer::~DepthRenderer() {};\r\n\r\n\tDepthRenderer::DepthRenderer(int w,int h) \r\n\t{\r\n\t\t_depthShader.init(\"DepthShader\", \r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"depthRenderer.vp\")), \r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"depthRenderer.fp\")));\r\n\r\n\t\t_depthShader_MVP.init(_depthShader,\"MVP\");\r\n\t\t_depth_RT.reset(new sibr::RenderTargetLum32F(w,h));\r\n\r\n\t}\r\n\r\n\tvoid DepthRenderer::render( const sibr::InputCamera& cam, const Mesh& mesh, bool backFaceCulling, bool frontFaceCulling)\r\n\t{\r\n\r\n\t\t//sibr::Vector1f cc(1.0);\r\n\t\t//_depth_RT->clear(cc);\r\n\t\t\r\n\t\tglViewport(0, 0, _depth_RT->w(), _depth_RT->h());\r\n\t\t_depth_RT->bind();\r\n\t\tglClearColor(1.0, 1.0, 1.0, 1.0);\r\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r\n\r\n\t\t_depthShader.begin();\r\n\t\t_depthShader_MVP.set(cam.viewproj());\r\n\r\n\t\tmesh.render(true, backFaceCulling, sibr::Mesh::FillRenderMode, frontFaceCulling);\r\n\r\n\t\t_depthShader.end();\r\n\r\n\t}\r\n\r\n} // namespace"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/DepthRenderer.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <core/renderer/Config.hpp>\r\n# include \"core/assets/InputCamera.hpp\"\r\n# include \"core/graphics/Texture.hpp\"\r\n# include \"core/graphics/Camera.hpp\"\r\n# include \"core/graphics/RenderUtility.hpp\"\r\n# include \"core/assets/Resources.hpp\"\r\n# include \"core/graphics/Shader.hpp\"\r\n# include \"core/graphics/Mesh.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/** Render a mesh to a depth rendertarget.\r\n\t\\ingroup sibr_renderer\r\n\t*/\r\n\tclass SIBR_EXP_RENDERER_EXPORT DepthRenderer\r\n\t{\r\n\t\r\n\tpublic:\r\n\t\t\r\n\t\tusing Ptr = std::shared_ptr<DepthRenderer>;\r\n\r\n\t\t/** Constructor with a target size.\r\n\t\t\\param w target width\r\n\t\t\\param h target height\r\n\t\t*/\r\n\t\tDepthRenderer(int w,int h)  ;\r\n\t\t\r\n\t\t/// Destructor.\r\n\t\t~DepthRenderer();\r\n\r\n\t\t/** Render a mesh depth in the result rendertarget.\r\n\t\t\\param cam the viewpoint to use\r\n\t\t\\param mesh the mesh to render\r\n\t\t\\param backFaceCulling should perform backface culling\r\n\t\t\\param frontFaceCulling flip culling test orientation\r\n\t\t*/\r\n\t\tvoid render( const sibr::InputCamera &cam, const Mesh& mesh, bool backFaceCulling=false, bool frontFaceCulling=false);\r\n\r\n\t\tstd::shared_ptr<sibr::RenderTargetLum32F> _depth_RT; ///< The result depth rendertarget.\r\n\r\n\tprivate:\r\n\r\n\t\tsibr::GLShader\t\t\t\t_depthShader; ///< Depth shader.\r\n\t\tsibr::GLParameter\t\t\t_depthShader_MVP; ///< Shader MVP.\r\n\r\n\t};\r\n\r\n} // namespace\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/NormalRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n# include <core/renderer/NormalRenderer.hpp>\n# include \"core/graphics/RenderUtility.hpp\"\n\n# define USE_PIXELART_MODEN 0 // just for fun (and e-art!)\n\nnamespace sibr\n{\n\n\tNormalRenderer::~NormalRenderer() {};\n\n\tNormalRenderer::NormalRenderer(int w, int h, bool generate, bool useFloats, bool imSpace)\n\t{\n\t\t_generate = generate;\n\t\t_useFloats = useFloats;\n\n\t\tif (_generate) {\n\n\t\t\t_normalShader.init(\"NormalShader\",\n\t\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"normalRendererGen.vp\")),\n\t\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"normalRenderer.fp\")),\n\t\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"normalRendererGen.gp\")));\n\n\t\t\t_normalShader_projInv.init(_normalShader, \"MVPinv\");\n\t\t}\n\t\telse {\n\n\t\t\t_normalShader.init(\"NormalShader\",\n\t\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"normalRenderer.vp\")),\n\t\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"normalRenderer.fp\")));\n\t\t}\n\n\t\t_normalShader_proj.init(_normalShader, \"MVP\");\n\t\t_normalShader_view.init(_normalShader, \"V\");\n\t\t_normalShader_model.init(_normalShader, \"M\");\n\t\t_normalShader_imSpace.init(_normalShader, \"imSpaceNormals\");\n\t\t_normalShader.begin();\n\t\t_normalShader_imSpace.set(imSpace);\n\t\t_normalShader.end();\n\n\t\tif (_useFloats) {\n\t\t\t_normal_RT_32F.reset(new sibr::RenderTargetRGBA32F(w, h));\n\t\t} else {\n\t\t\t_normal_RT.reset(new sibr::RenderTargetRGB(w, h));\n\t\t}\n\t\t\n\n\t}\n\n\tvoid NormalRenderer::setWH(int w, int h) {\n\t\tif (_useFloats) {\n\t\t\t_normal_RT_32F.reset(new sibr::RenderTargetRGBA32F(w, h));\n\t\t}\n\t\telse {\n\t\t\t_normal_RT.reset(new sibr::RenderTargetRGB(w, h));\n\t\t}\n\t}\n\n\tvoid NormalRenderer::render(const sibr::InputCamera& cam, const Mesh& mesh, const Matrix4f &modelMat, bool clear)\n\t{\n#if USE_PIXELART_MODEN\n\t\tglPointSize(10.f);\n#else\n\t\tglPointSize(2.f);\n#endif\n\n\t\tif (_useFloats) {\n\t\t\tif(clear)\n\t\t\t\t_normal_RT_32F->clear(sibr::Vector4f(0.5f,0.5f,0.5f,1.0f));\n\t\t\tglViewport(0, 0, _normal_RT_32F->w(), _normal_RT_32F->h());\n\t\t\t_normal_RT_32F->bind();\n\t\t} else {\n\t\t\t_normal_RT->bind();\n\t\t\tif (clear) {\n\t\t\t\tglClearColor(0.5f, 0.5f, 0.5f, 1.0f);\n\t\t\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\t\t\t}\n\t\t\tglViewport(0, 0, _normal_RT->w(), _normal_RT->h());\n\t\t\tglScissor(0, 0, _normal_RT->w(), _normal_RT->h());\n\t\t}\n\n\t\t_normalShader.begin();\n\t\tconst Matrix4f MVP = cam.viewproj() * modelMat;\n\t\t_normalShader_proj.set(MVP);\n\t\t_normalShader_view.set(cam.view());\n\t\t_normalShader_model.set(modelMat);\n\n\t\tif (_generate) {\n\t\t\tconst Matrix4f MVPinv = (cam.viewproj()*modelMat).inverse();\n\t\t\t_normalShader_projInv.set(MVPinv);\n\t\t}\n\n\t//\tstd::cout << cam.znear() << \" \" << cam.zfar() << \" \" << cam.viewproj() << std::endl;\n\t\tmesh.render(true, true, sibr::Mesh::FillRenderMode);\n\n\t\t_normalShader.end();\n\n\t}\n\n} // namespace"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/NormalRenderer.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <core/renderer/Config.hpp>\r\n\r\n# include \"core/assets/InputCamera.hpp\"\r\n# include \"core/graphics/Texture.hpp\"\r\n# include \"core/graphics/Camera.hpp\"\r\n# include \"core/graphics/RenderUtility.hpp\"\r\n# include \"core/assets/Resources.hpp\"\r\n# include \"core/graphics/Shader.hpp\"\r\n# include \"core/graphics/Mesh.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/** Render the world or view space normals of a mesh.\r\n\t\\ingroup sibr_renderer\r\n\t*/\r\n\tclass SIBR_EXP_RENDERER_EXPORT NormalRenderer\r\n\t{\r\n\r\n\tpublic:\r\n\t\t\r\n\t\t/** Constructor.\r\n\t\t\\param w target width\r\n\t\t\\param h target height\r\n\t\t\\param generate if true, use a geoemtry shader to compute normals on the fly, else use vertex normals\r\n\t\t\\param useFloats if true, render in a 32F rendertarget, else use 8U\r\n\t\t\\param imSpace if true, render view space normals, else render world space normals\r\n\t\t*/\r\n\t\tNormalRenderer(int w,int h, bool generate = true, bool useFloats = false, bool imSpace = false) ;\r\n\t\t\r\n\t\t/// Destructor.\r\n\t\t~NormalRenderer();\r\n\r\n\t\t/** Render the mesh normals in the internal render target.\r\n\t\t\\param cam the viewpoint to use\r\n\t\t\\param mesh the mesh to render\r\n\t\t\\param modelMat additional model matrix\r\n\t\t\\param clear clear the rendertarget before rendering\r\n\t\t*/\r\n\t\tvoid render( const sibr::InputCamera &cam, const Mesh& mesh, const Matrix4f &modelMat = Matrix4f::Identity(), bool clear=true);\r\n\t\t\r\n\t\t/** Resize the internal rendertarget.\r\n\t\t\\param w the new width\r\n\t\t\\param h the new height\r\n\t\t*/\r\n\t\tvoid setWH(int w, int h);\r\n\t\t\r\n\t\tstd::shared_ptr<sibr::RenderTargetRGB> _normal_RT; ///< The low-precision normal result rendertarget (used if useFloats is false).\r\n\t\tstd::shared_ptr<sibr::RenderTargetRGBA32F> _normal_RT_32F; ///< The high-precision normal result rendertarget (used if useFloats is true).\r\n\r\n\tprivate:\r\n\r\n\t\tsibr::GLShader\t\t\t\t_normalShader; ///< Normal shader.\r\n\t\tsibr::GLParameter\t\t\t_normalShader_proj; ///< Projection matrix uniform.\r\n\t\tsibr::GLParameter\t\t\t_normalShader_view; ///< View matrix uniform.\r\n\t\tsibr::GLParameter\t\t\t_normalShader_model; ///< Model matrix uniform.\r\n\t\tsibr::GLParameter\t\t\t_normalShader_projInv; ///< Inverse projection matrix uniform.\r\n\t\tsibr::GLParameter\t\t\t_normalShader_imSpace; ///< View space toggle uniform.\r\n\t\tbool _generate; ///< Should normals be generated on the fly.\r\n\t\tbool _useFloats; ///< Should the normals be rendered to a 32F precision target.\r\n\t\t\r\n\t};\r\n\r\n\r\n} // namespace\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PointBasedRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <core/renderer/PointBasedRenderer.hpp>\n\nnamespace sibr { \n\tPointBasedRenderer::PointBasedRenderer()\n\t{\t\n\t\t_shader.init(\"PointBased\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/alpha_points.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/alpha_points.frag\"));\n\t\t_paramMVP.init(_shader,\"mvp\");\n\t\t_paramAlpha.init(_shader,\"alpha\");\n\t\t_paramRadius.init(_shader,\"radius\");\n\t}\n\n\tvoid\tPointBasedRenderer::process(const Mesh& mesh, const Camera& eye, IRenderTarget& dst, bool backfaceCull)\n\t{\n\t\tglEnable(GL_DEPTH_TEST);\n\t\tglEnable(GL_PROGRAM_POINT_SIZE);\n\t\tdst.bind();\n\t\t_shader.begin();\n\t\t_paramMVP.set(eye.viewproj());\n\t\t_paramAlpha.set(float(1.0));\n\t\t_paramRadius.set(3);\n\t\t_paramUserColor.set(Vector3f(.1, .1, 1.0));\n\n\t\tmesh.render_points();\n\t\t_shader.end();\n\t\tdst.unbind();\n\t\tglDisable(GL_PROGRAM_POINT_SIZE);\n\t\tglDisable(GL_DEPTH_TEST);\n\t}\n\n\tvoid\tPointBasedRenderer::process(const Mesh& mesh, const Camera& eye, const sibr::Matrix4f& model, IRenderTarget& dst, bool backfaceCull)\n\t{\n\t\tglEnable(GL_DEPTH_TEST);\n\t\tglEnable(GL_PROGRAM_POINT_SIZE);\n\t\tdst.bind();\n\t\t_shader.begin();\n\t\t_paramMVP.set(sibr::Matrix4f(eye.viewproj() * model));\n\t\t_paramAlpha.set(float(1.0));\n\t\t_paramRadius.set(2);\n\t\t_paramUserColor.set(Vector3f(.1, .1, 1.0));\n\t\tmesh.render_points();\n\t\t_shader.end();\n\t\tdst.unbind();\n\t\tglDisable(GL_PROGRAM_POINT_SIZE);\n\t\tglDisable(GL_DEPTH_TEST);\n\t}\n\n} /*namespace sibr*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PointBasedRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Render a Point Cloud with colors\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT PointBasedRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<PointBasedRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t*/\n\t\tPointBasedRenderer();\n\n\t\t/** Render the textured mesh.\n\t\t\\param mesh the mesh to render (should have UV attribute)\n\t\t\\param eye the viewpoint to use\n\t\t\\param dst destination rendertarget\n\t\t\\param backfaceCull should backface culling be performed\n\t\t*/\n\t\tvoid\tprocess(const Mesh& mesh, const Camera& eye, IRenderTarget& dst, bool backfaceCull = true);\n\n\t\t/** Render the textured mesh.\n\t\t\\param mesh the mesh to render (should have UV attribute)\n\t\t\\param eye the viewpoint to use\n\t\t\\param model additional transformation matrix\n\t\t\\param dst destination rendertarget\n\t\t\\param backfaceCull should backface culling be performed\n\t\t*/\n\t\tvoid process(const Mesh & mesh, const Camera & eye, const sibr::Matrix4f & model, IRenderTarget & dst, bool backfaceCull = true);\n\n\tprotected:\n\n\t\tGLShader\t\t\t_shader; ///< The point based shader.\n\t\tGLuniform<Matrix4f> \t_paramMVP; ///< MVP uniform.\n\t\tGLuniform<float> \t_paramAlpha; ///< Alpha uniform.\n\t\tGLuniform<int>\t\t_paramRadius; ///< Radius uniform.\n\t\tGLuniform<Vector3f>\t_paramUserColor;\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PoissonRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/**\n*\n* Poisson synthesis.\n*/\n\n#include <utility>\n#include <algorithm>\n\n#include <core/assets/Resources.hpp>\n#include <core/graphics/RenderUtility.hpp>\n\n#include <core/renderer/PoissonRenderer.hpp>\n\nusing namespace sibr;\n\n/** Number of levels poisson multi-grid */\n#define POISSON_LEVELS 5\n\n/** Number of relaxation/jacobi iterations at each level */\n#define POISSON_ITERATIONS  2\n\n/** Ratio of successive levels of poisson multi-grid */\n#define MULTIGRID_SCALE 2\n\nnamespace sibr { \n\t// -----------------------------------------------------------------------\n\n\tPoissonRenderer ::PoissonRenderer ( uint w, uint h ) :\n\t\t_size(w, h)\n\t{\n\t\tstd::string vp = sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/texture.vert\");\n\t\t_jacobiShader  .init(\"Jacobi\",  vp, sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/poisson_jacobi.frag\"));\n\t\t_restrictShader.init(\"Restrict\",vp, sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/poisson_restrict.frag\"));\n\t\t_interpShader  .init(\"Interp\",  vp, sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/poisson_interp.frag\"));\n\t\t_divergShader  .init(\"Diverg\",  vp, sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/poisson_diverg.frag\"));\n\n\t\t// GLParameters\n\t\t_jacobi_weights.init(_jacobiShader,   \"weights\");\n\t\t_jacobi_scale.init(_jacobiShader, \"scale\");\n\t\t_restrict_scale.init(_restrictShader, \"scale\");\n\t\t_interp_scale  .init(_interpShader,   \"scale\");\n\n\t\t_poisson_div_RT.resize(POISSON_LEVELS);\n\t\tfor (uint i=0; i<_poisson_div_RT.size(); i++) {\n\t\t\tuint ww = std::max(1u, uint(w/pow( (float)MULTIGRID_SCALE, (int)i)));\n\t\t\tuint hh = std::max(1u, uint(h/pow( (float)MULTIGRID_SCALE, (int)i)));\n\t\t\t_poisson_div_RT[i].reset(new sibr::RenderTargetRGBA(ww,hh, SIBR_CLAMP_UVS));\n\t\t}\n\t\t_poisson_RT.reset(new sibr::RenderTargetRGBA(w,h, SIBR_CLAMP_UVS | SIBR_GPU_LINEAR_SAMPLING));\n\t\t_poisson_tmp_RT.reset(new sibr::RenderTargetRGBA(w,h, SIBR_CLAMP_UVS | SIBR_GPU_LINEAR_SAMPLING));\n\t\t_enableFix = true;\n\n\t}\n\n\t// -----------------------------------------------------------------------\n\n\tuint PoissonRenderer::render( uint texture )\n\t{\n\t\tglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, \"Poisson filling\");\n\t\t// divergence of gradient map and dirichlet constraints\n\t\t_divergShader.begin();\n\t\t_poisson_div_RT[0]->clear();\n\t\t_poisson_div_RT[0]->bind();\n\t\tglViewport(0, 0, _poisson_div_RT[0]->w(), _poisson_div_RT[0]->h());\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture);\n\t\tRenderUtility::renderScreenQuad();\n\t\t_poisson_div_RT[0]->unbind();\n\t\t_divergShader.end();\n\n\t\t//  restrict the divergence\n\t\tfor (int k=0; k<int(_poisson_div_RT.size())-1; k++) {\n\t\t\t_restrictShader.begin();\n\t\t\t_poisson_div_RT[k+1]->clear();\n\t\t\t_poisson_div_RT[k+1]->bind();\n\t\t\tglViewport(0,0, _poisson_div_RT[k+1]->w(), _poisson_div_RT[k+1]->h());\n\t\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _poisson_div_RT[k]->texture());\n\t\t\t_restrict_scale.set(float(_poisson_div_RT[k]->w())/_poisson_div_RT[k+1]->w());\n\t\t\tRenderUtility::renderScreenQuad();\n\t\t\t_poisson_div_RT[k+1]->unbind();\n\t\t\t_restrictShader.end();\n\t\t}\n\n\t\t// perform jacobi iterations and upsample the result to higher level\n\t\tbool isFirst = _enableFix;\n\t\tfor (int k=(int)_poisson_div_RT.size()-1; k>=0; k--) {\n\t\t\tfor (uint i=0; i<POISSON_ITERATIONS; i++) {\n\t\t\t\tdouble h   =  pow( (float)MULTIGRID_SCALE, (int)k);            // Jacobi relaxation filter kernel taken from\n\t\t\t\tdouble hsq =  h*h;                               // Real-Time Gradient-Domain Painting, SIGGRAPH '08\n\t\t\t\tdouble xh0 = -2.1532 + 1.5070/h + 0.5882/hsq;    // http://graphics.cs.cmu.edu/projects/gradient-paint/\n\t\t\t\tdouble xh1 =  0.1138 + 0.9529/h + 1.5065/hsq;\n\t\t\t\tdouble xh  =  ((i%2 == 0) ? xh0 : xh1);\n\t\t\t\tdouble m   =  (-8*hsq - 4)/(3.0*hsq);\n\t\t\t\tdouble e   =  (hsq + 2)/(3.0*hsq);\n\t\t\t\tdouble c   =  (hsq - 1)/(3.0*hsq);\n\n\t\t\t\tstd::swap(_poisson_tmp_RT, _poisson_RT);\n\n\t\t\t\t_jacobiShader.begin();\n\t\t\t\t_poisson_RT->clear();\n\t\t\t\t_poisson_RT->bind();\n\t\t\t\tglViewport(0,0, _poisson_div_RT[k]->w(), _poisson_div_RT[k]->h());\n\t\t\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _poisson_tmp_RT->texture());\n\t\t\t\t_jacobi_weights.set((float)xh, (float)e, (float)c, (float)(1.0/(m-xh)));\n\t\t\t\t_jacobi_scale.set( isFirst ? (float(_poisson_tmp_RT->w()) / _poisson_div_RT[k]->w()) : 1.0f);\n\t\t\t\tRenderUtility::renderScreenQuad();\n\t\t\t\t_poisson_RT->unbind();\n\t\t\t\t_jacobiShader.end();\n\n\t\t\t\tisFirst = false;\n\t\t\t}\n\n\t\t\tif (k > 0) {\n\t\t\t\tstd::swap(_poisson_tmp_RT, _poisson_RT);\n\t\t\t\t_interpShader.begin();\n\t\t\t\t_poisson_RT->clear();\n\t\t\t\t_poisson_RT->bind();\n\t\t\t\tglViewport(0,0, _poisson_div_RT[k-1]->w(), _poisson_div_RT[k-1]->h());\n\t\t\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _poisson_tmp_RT->texture());\n\t\t\t\tglActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, _poisson_div_RT[k-1]->texture());\n\t\t\t\t_interp_scale.set(float(_poisson_div_RT[k-1]->w()) / _poisson_div_RT[k]->w());\n\t\t\t\tRenderUtility::renderScreenQuad();\n\t\t\t\t_poisson_RT->unbind();\n\t\t\t\t_interpShader.end();\n\t\t\t} else {\n\t\t\t\tstd::swap(_poisson_tmp_RT, _poisson_RT);\n\t\t\t\t_interpShader.begin();\n\t\t\t\t_poisson_RT->clear();\n\t\t\t\t_poisson_RT->bind();\n\t\t\t\tglViewport(0,0, _poisson_RT->w(), _poisson_RT->h());\n\t\t\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _poisson_tmp_RT->texture());\n\t\t\t\tglActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture);\n\t\t\t\t_interp_scale.set(1.0f);\n\t\t\t\tRenderUtility::renderScreenQuad();\n\t\t\t\t_poisson_RT->unbind();\n\t\t\t\t_interpShader.end();\n\t\t\t}\n\t\t}\n\t\tglPopDebugGroup();\n\t\treturn _poisson_RT->texture();\n\t}\n\n\tvoid\tPoissonRenderer::process( const RenderTargetRGBA::Ptr& src, RenderTargetRGBA::Ptr& dst )\n\t{\n\t\tSIBR_ASSERT(src != nullptr);\n\t\t/// \\todo TODO SR: support IRenderTarget instead of just RGBA\n\t\trender(src->texture());\n\t\tstd::swap(dst, _poisson_RT);\n\t}\n\n\tvoid\tPoissonRenderer::process( uint texID, RenderTargetRGBA::Ptr& dst )\n\t{\n\t\trender(texID);\n\t\tstd::swap(dst, _poisson_RT);\n\t}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PoissonRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"Config.hpp\"\n\n# include <iostream>\n# include <vector>\n# include <memory>\n\n# include <core/graphics/Config.hpp>\n# include <core/graphics/Texture.hpp>\n# include \"core/graphics/Shader.hpp\"\n\nnamespace sibr { \n\n\t/**\n\t* Hole filling by poisson synthesis on an input texture;\n\t* contains all shaders, render targets and render passes.\n\t* All black pixels on the input texture are considered holes\n\t* and Poisson synthesis affects these pixels only, all\n\t* other pixels are treated at Dirichlet boundary conditions.\n\t* \\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT PoissonRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<PoissonRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/**\n\t\t* Initialize Poisson solvers render targets and shaders.\n\t\t* \\param w width of highest resolution multigrid level\n\t\t* \\param h height of highest resolution multigrid level\n\t\t*/\n\t\tPoissonRenderer ( uint w, uint h );\n\n\t\t/** Perform poisson filling.\n\t\t\\param src source rendertarget, black pixels will be filled\n\t\t\\param dst destination rendertarget\n\t\t*/\n\t\tvoid\tprocess(\n\t\t\t/*input*/\tconst RenderTargetRGBA::Ptr& src,\n\t\t\t/*ouput*/\tRenderTargetRGBA::Ptr& dst );\n\n\t\t/** Perform poisson filling.\n\t\t\\param texID source texture handle, black pixels will be filled\n\t\t\\param dst destination rendertarget\n\t\t*/\n\t\tvoid\tprocess(\n\t\t\t/*input*/\tuint texID,\n\t\t\t/*ouput*/\tRenderTargetRGBA::Ptr& dst );\n\n\t\t/**\n\t\t* \\return the size used for in/out textures (defined in ctor)\n\t\t*/\n\t\tconst Vector2i&\t\tgetSize( void ) const;\n\n\t\t/** If true, fix a bug caused by erroneous viewport when initializing the internal pyramid.\n\t\t\tLeft exposed for retrocompatibility reasons.\n\t\t\\return a reference to the bugfix toggle. */\n\t\tbool & enableFix() { return _enableFix; }\n\n\tprivate:\n\t\t/**\n\t\t* Render the full Poisson synthesis on the holes in texture 'tex'.\n\t\t* \\param tex OpenGL texture handle of input texture\n\t\t* \\returns OpenGL texture handle of texture containing Poisson synthesis solution\n\t\t*/\n\t\tuint render( uint tex );\n\n\t\t/** Size defined in the ctor */\n\t\tVector2i\t\t_size;\n\n\t\t/** Shader to perform Jacobi relaxations */\n\t\tsibr::GLShader\t_jacobiShader;\n\n\t\t/** Shader to downsample input texture and boundary conditions from\n\t\t* higher multigrid level to next lower level */\n\t\tsibr::GLShader\t_restrictShader;\n\n\t\t/** Shader to interpolate Poisson synthesis solution from\n\t\t* lower multigrid level to next higher level */\n\t\tsibr::GLShader\t_interpShader;\n\n\t\t/** Shader to compute divergence (second derivative) field of input texture */\n\t\tsibr::GLShader\t_divergShader;\n\n\t\t/** Render target to store Poisson synthesis result */\n\t\tRenderTargetRGBA::Ptr  _poisson_RT;\n\n\t\t/** Helper render target for \\p _poisson_RT to\n\t\t* perform ping-pong render passes during Jacobi relaxations */\n\t\tRenderTargetRGBA::Ptr  _poisson_tmp_RT;\n\n\t\t/** Dirichlet constraints for each multigrid level */\n\t\tstd::vector<RenderTargetRGBA::Ptr> _poisson_div_RT;\n\n\t\t/** Jacobi step parameters. */\n\t\tsibr::GLParameter _jacobi_weights, _jacobi_scale, _restrict_scale;\n\t\t/** Interpolation scale. */\n\t\tsibr::GLParameter _interp_scale;\n\n\t\t/** Enable the \"weird large regions of color\" bugfix. */\n\t\tbool _enableFix = true;\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PositionRender.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n# include \"PositionRender.hpp\"\n\n#include <core/assets/Resources.hpp>\n\nnamespace sibr\n{\n\tPositionRenderer::PositionRenderer(int w,int h)\n\t{\n\t\t_shader.init(\"positionRendere\", \n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"positionRenderer.vert\")), \n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"positionRenderer.frag\")));\n\n\t\t_MVP.init(_shader,\"MVP\");\n\t\t_RT.reset(new sibr::RenderTargetRGB32F(w,h));\n\t}\n\n\tvoid PositionRenderer::render( const sibr::Camera& cam, const Mesh& mesh, bool backFaceCulling, bool frontFaceCulling)\n\t{\n\t\tglViewport(0, 0, _RT->w(), _RT->h());\n\t\t_RT->bind();\n\t\tglClearColor(0.0, 0.0, 0.0, 1.0);\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\n\t\t_shader.begin();\n\t\t_MVP.set(cam.viewproj());\n\n\t\tmesh.render(true, backFaceCulling, sibr::Mesh::FillRenderMode, frontFaceCulling);\n\n\t\t_shader.end();\n\t\t_RT->unbind();\n\t}\n\n} // namespace"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/PositionRender.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\n\nnamespace sibr\n{\n\t/** Render the world space positions of a mesh surface.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT PositionRenderer\n\t{\n\t\tSIBR_CLASS_PTR(PositionRenderer);\n\n\tpublic:\n\n\t\t/** Constructor with a target size.\n\t\t\\param w the target width\n\t\t\\param h the target height\n\t\t*/\n\t\tPositionRenderer(int w,int h);\n\n\t\t/** Render the mesh world positions.\n\t\t\\param cam the viewpoint to use\n\t\t\\param mesh the mesh to render\n\t\t\\param backFaceCulling should backface culling be performed\n\t\t\\param frontFaceCulling flip the culling test orientation\n\t\t*/\n\t\tvoid render( const sibr::Camera &cam, const Mesh& mesh, bool backFaceCulling=false, bool frontFaceCulling=false);\n\n\t\t/** \\return the result rendertarget containing world space positions. */\n\t\tconst sibr::RenderTargetRGB32F::Ptr & getPositionsRT() { return _RT; }\n\n\tprivate:\n\n\t\tsibr::GLShader\t\t\t\t\t\t\t_shader; ///< The positions shader.\n\t\tsibr::GLuniform<sibr::Matrix4f>\t\t\t_MVP; ///< MVP uniform.\n\t\tsibr::RenderTargetRGB32F::Ptr\t\t\t_RT; ///< Destination render target.\n\t\t\n\t};\n\n} // namespace\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/RenderMaskHolder.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <core/renderer/RenderMaskHolder.hpp>\n#include <core/assets/Resources.hpp>\n\nnamespace sibr { \n\tvoid\tRenderMaskHolder::setMasks( const std::vector<MaskPtr>& masks )\n\t{\n\t\t_masks = masks;\n\t}\n\n\tconst std::vector<RenderMaskHolder::MaskPtr>&\tRenderMaskHolder::getMasks( void ) const\n\t{\n\t\treturn _masks;\n\t}\n\n\tbool\tRenderMaskHolder::useMasks( void ) const\n\t{\n\t\treturn _masks.empty() == false;\n\t}\n\n\tvoid \tRenderMaskHolder::uploadMaskGPU(sibr::ImageL8& img, int i, std::vector<RenderTargetLum::Ptr> & masks, bool invert) \n\t{\n\t\tsibr::GLShader textureShader;\n\t\ttextureShader.init(\"Texture\",\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"texture.vp\")), \n\t\t\tinvert ? sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/texture-invert.frag\") : sibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/texture.frag\"));\n\n\t\tstd::shared_ptr<sibr::RenderTargetLum> maskRTPtr;\n\t\tmaskRTPtr.reset(new sibr::RenderTargetLum(img.w(), img.h()));\n\n\t\timg.flipH();\n\t\tstd::shared_ptr<sibr::Texture2DLum> rawInputImage(new sibr::Texture2DLum(img));\n\t\timg.flipH();\n\n\t\tglViewport(0,0, img.w(), img.h());\n\t\tmaskRTPtr->clear();\n\t\tmaskRTPtr->bind();\n\n\t\tglActiveTexture(GL_TEXTURE0);\n\t\tglBindTexture(GL_TEXTURE_2D, rawInputImage->handle());\n\n\t\tglDisable(GL_DEPTH_TEST);            \n\t\ttextureShader.begin();\n\t\tsibr::RenderUtility::renderScreenQuad();\n\t\ttextureShader.end();\n\n\t\tmaskRTPtr->unbind();\n/*\n\tmaskRTPtr->readBack(img);\n\tsibr::show(img);\n*/\n\t\tmasks.push_back(maskRTPtr);\n\t}\n\n\n\tvoid \tRenderMaskHolder::loadMasks(const sibr::BasicIBRScene::Ptr& ibrScene,  const std::string& maskDir,  \n\t\t\t\tconst std::string& preFileName, const std::string& postFileName, int w, int h)\n\t{\n\t\tif( boost::filesystem::exists(maskDir) ) {\n\n\t\tfor(int i=0; i<(int)ibrScene->cameras()->inputCameras().size(); i++ ) {\n\t\t\t\tsibr::ImageRGB mask;\n\t\t\t\tstd::string filename = maskDir + \"/\" + preFileName + sibr::imageIdToString(i) + postFileName;\n\t\t\t\n\t\t\t\tif( boost::filesystem::exists(filename))  {\n\t\t\t\t\tmask.load(filename,false);\n\t\t\t\t\t// Split the image in its channels and keep only the first.\n\t\t\t\t\tcv::Mat channels[3];\n\t\t\t\t\tcv::split(mask.toOpenCV(), channels);\n\t\t\t\t\tsibr::ImageL8 maskOneChan;\t\t\t\t\t\n\t\t\t\t\tmaskOneChan.fromOpenCV(channels[0]);\n\t\t\t\t\tuploadMaskGPU(maskOneChan, i, _masks, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif( ibrScene->cameras()->inputCameras()[i]->isActive() ) \n\t\t\t\t\t\tSIBR_ERR << \"[RenderMaskHolder] couldnt find \" << filename << std::endl;\n\t\t\t\t\telse { /// push back empty mask so array is consistent\n\t\t\t\t\t\t/// \\todo TODO GD -- this is wasteful, should fine better way\n\t\t\t\t\t\tstd::shared_ptr<sibr::RenderTargetLum> maskRTPtr;\n\t\t\t\t\t\tmaskRTPtr.reset(new sibr::RenderTargetLum(w, h));\n\t\t\t\t\t\t_masks.push_back(maskRTPtr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\n\t}\n\telse\n\t\tSIBR_ERR << \"[RenderMaskHolder] Cant find directory \" << maskDir << std::endl;\n\t}\n\n\tvoid\tRenderMaskHolderArray::setMasks(const MaskArrayPtr& masks)\n\t{\n\t\t_masks = masks;\n\t}\n\n\tconst RenderMaskHolderArray::MaskArrayPtr & RenderMaskHolderArray::getMasks(void) const {\n\t\treturn _masks;\n\t}\n\n\tvoid RenderMaskHolderArray::loadMasks(\n\t\tconst sibr::BasicIBRScene::Ptr& ibrScene,\n\t\tconst std::string& maskDir, const std::string& preFileName,\n\t\tconst std::string& postFileName, int w, int h\n\t) {\n\t\tstd::string maskdir = (maskDir == \"\" ? ibrScene->data()->basePathName() + \"/images/\" : maskDir);\n\n\t\tif (!boost::filesystem::exists(maskdir)) {\n\t\t\tSIBR_ERR << \"[RenderMaskHolder] Cant find directory \" << maskDir << std::endl;\n\t\t} else {\n\t\t\tint numInputImgs = (int)ibrScene->cameras()->inputCameras().size();\n\t\t\tstd::vector<cv::Mat> masks(numInputImgs);\n\t\t\tfor (int i = 0; i < numInputImgs; i++) {\n\t\t\t\tstd::string filename = maskDir + \"/\" + preFileName + sibr::imageIdToString(i) + postFileName;\n\n\t\t\t\tcv::Mat mask = cv::imread(filename);\n\n\t\t\t\tif (mask.empty()) {\n\t\t\t\t\tSIBR_ERR << \"[RenderMaskHolderArray] couldnt find or read \" << filename << std::endl;\n\t\t\t\t}\n\n\t\t\t\tcv::Mat channels[3];\n\t\t\t\tcv::split(mask, channels);\n\t\t\t\tif (w > 0 && h > 0) {\n\t\t\t\t\tcv::resize(channels[0], channels[0], cv::Size(w, h));\n\t\t\t\t}\n\t\t\t\tmasks[i] = channels[0];\n\t\t\t}\n\n\t\t\t_masks = MaskArrayPtr(new MaskArray(masks, SIBR_FLIP_TEXTURE));\n\t\t}\n\t}\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/RenderMaskHolder.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"Config.hpp\"\r\n# include <core/graphics/RenderTarget.hpp>\r\n# include <core/graphics/Shader.hpp>\r\n# include <core/graphics/Texture.hpp>\r\n# include <core/graphics/Image.hpp>\r\n# include <core/scene/BasicIBRScene.hpp>\r\n\r\nnamespace sibr { \r\n\r\n\t/** Store a set of masks associated to a set of images (dataset input images for instance), on the GPU.\r\n\tThis version uses a list of R8 rendertargets.\r\n\t\\note Might want to use textures instead of RTs here.\r\n\t\\ingroup sibr_renderer\r\n\t*/\r\n\tclass SIBR_EXP_RENDERER_EXPORT RenderMaskHolder\r\n\t{\r\n\t\ttypedef\tRenderTargetLum::Ptr\tMaskPtr;\r\n\tpublic:\r\n\r\n\t\t/** Update the masks\r\n\t\t\\param masks the new masks to use\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\t\t\tsetMasks( const std::vector<MaskPtr>& masks );\r\n\r\n\t\t/** \\return the masks rendertargets. */\r\n\t\tconst std::vector<MaskPtr>&\t\tgetMasks( void ) const;\r\n\r\n\t\t/** \\return true if masks are available (non empty list). */\r\n\t\tbool\t\t\t\t\t\t\tuseMasks( void ) const;\r\n\r\n\t\t/** Load masks from black and white images on disk.\r\n\t\t\\param ibrScene the dataset scene associated to the masks\r\n\t\t\\param maskDir the masks directory\r\n\t\t\\param preFileName mask filename prefix\r\n\t\t\\param postFileName mask filename suffix and extension\r\n\t\t\\param w target width\r\n\t\t\\param h target height\r\n\t\t*/\r\n\t\tvoid \t\t\t\t\t\t\tloadMasks(\r\n\t\t\t\t\t\t\t\t\t\t\tconst sibr::BasicIBRScene::Ptr& ibrScene, \r\n\t\t\t\t\t\t\t\t\t\t\tconst std::string& maskDir, const std::string& preFileName, \r\n\t\t\t\t\t\t\t\t\t\t\tconst std::string& postFileName, int w, int h);\r\n\r\n\t\t/** Upload a mask image to the GPU.\r\n\t\t\\param img the mask image to upload\r\n\t\t\\param i the mask index in the list\r\n\t\t\\param masks the uploaded masks list (will be updated)\r\n\t\t\\param invert should the mask be inverted\r\n\t\t**/\r\n\t    void \t\t\t\t\t\t\tuploadMaskGPU(sibr::ImageL8& img, int i, std::vector<RenderTargetLum::Ptr> & masks, bool invert) ;\r\n\r\n\tprivate:\r\n\r\n\t\tstd::vector<MaskPtr>\t_masks; ///< List of masks on the GPU.\r\n\r\n\t};\r\n\r\n\t/** Store a set of masks associated to a set of images (dataset input images for instance), on the GPU.\r\n\tThis version uses a R8 texture array.\r\n\t\\ingroup sibr_renderer\r\n\t*/\r\n\tclass SIBR_EXP_RENDERER_EXPORT RenderMaskHolderArray\r\n\t{\r\n\t\tusing MaskArray = sibr::Texture2DArrayLum;\r\n\t\tusing MaskArrayPtr = MaskArray::Ptr;\r\n\r\n\tpublic:\r\n\r\n\t\t/** Update the masks\r\n\t\t\\param masks the new masks to use\r\n\t\t*/\r\n\t\tvoid\t\t\t\t\t\t\tsetMasks(const MaskArrayPtr& masks);\r\n\r\n\t\t/** \\return the masks texture array. */\r\n\t\tconst MaskArrayPtr &\t\t\t\tgetMasks(void) const;\r\n\r\n\t\t/** Load masks from black and white images on disk.\r\n\t\t\\param ibrScene the dataset scene associated to the masks\r\n\t\t\\param maskDir the masks directory\r\n\t\t\\param preFileName mask filename prefix\r\n\t\t\\param postFileName mask filename suffix and extension\r\n\t\t\\param w target width\r\n\t\t\\param h target height\r\n\t\t*/\r\n\t\tvoid \t\t\t\t\t\t\tloadMasks(\r\n\t\t\tconst sibr::BasicIBRScene::Ptr& ibrScene,\r\n\t\t\tconst std::string& maskDir = \"\", const std::string& preFileName = \"masks\" ,\r\n\t\t\tconst std::string& postFileName = \"\", int w = -1, int h = -1\r\n\t\t);\r\n\r\n\tprotected:\r\n\r\n\t\tMaskArrayPtr _masks; ///< The masks texture array.\r\n\r\n\t};\r\n\r\n} /*namespace sibr*/ \r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/ShadowMapRenderer.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n# include \"ShadowMapRenderer.hpp\"\r\n# include \"core/graphics/RenderUtility.hpp\"\r\n\r\nfloat SUN_APP_DIAM = 0.5358f;\r\n\r\nnamespace sibr\r\n{\r\n\r\n\tShadowMapRenderer::~ShadowMapRenderer() {};\r\n\r\n\tShadowMapRenderer::ShadowMapRenderer(const sibr::InputCamera& depthMapCam, std::shared_ptr<sibr::RenderTargetLum32F> depthMap_RT):_depthMap_RT(depthMap_RT)\r\n\t{\r\n\t\t_shadowMapShader.init(\"ShadowMapShader\",\r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"shadowMapRenderer.vp\")), \r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"shadowMapRenderer.fp\")));\r\n\r\n\t\t_shadowMapShader_MVP.init(_shadowMapShader,\"MVP\");\r\n\t\t_depthMap_MVP.init(_shadowMapShader, \"depthMapMVP\");\r\n\t\t_depthMap_MVPinv.init(_shadowMapShader, \"depthMapMVPinv\");\r\n\t\t_depthMap_radius.init(_shadowMapShader, \"depthMapRadius\");\r\n\t\t_lightDir.init(_shadowMapShader, \"lightDir\");\r\n\t\t_bias_control.init(_shadowMapShader, \"biasControl\");\r\n\t\t_sun_app_radius.init(_shadowMapShader, \"sun_app_radius\");\r\n\r\n\t\tsibr::Vector3f toLight = -depthMapCam.dir();\r\n\t\t_shadowMapShader.begin();\r\n\t\t_depthMap_MVP.set(depthMapCam.viewproj());\r\n\t\t_depthMap_MVPinv.set(depthMapCam.invViewproj());\r\n\t\t_depthMap_radius.set(depthMapCam.orthoRight());\r\n\t\t_lightDir.set(toLight);\r\n\t\t_sun_app_radius.set(SUN_APP_DIAM/2.0f);\r\n\t\t_shadowMapShader.end();\r\n\t}\r\n\r\n\tvoid ShadowMapRenderer::render(int w, int h, const sibr::InputCamera& cam, const Mesh& mesh, float bias ) \r\n\t{\r\n\r\n\t\t//sibr::Vector1f cc(1.0);\r\n\t\t//_depth_RT->clear(cc);\r\n\r\n\t\t_shadowMap_RT.reset(new sibr::RenderTargetLum(w, h));\r\n\t\t\r\n\t\tglViewport(0, 0, _shadowMap_RT->w(), _shadowMap_RT->h());\r\n\t\t_shadowMap_RT->bind();\r\n\t\tglClearColor(1.0, 1.0, 1.0, 1.0);\r\n\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\r\n\r\n\t\t_shadowMapShader.begin();\r\n\t\t_shadowMapShader_MVP.set(cam.viewproj());\r\n\t\t_bias_control.set(bias);\r\n\r\n\t\tglActiveTexture(GL_TEXTURE0);\r\n\t\tglBindTexture(GL_TEXTURE_2D, _depthMap_RT->texture());\r\n\r\n\t\tmesh.render(true, false, sibr::Mesh::FillRenderMode);\r\n\r\n\t\t_shadowMapShader.end();\r\n\r\n\t}\r\n\r\n} // namespace"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/ShadowMapRenderer.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <core/renderer/Config.hpp>\r\n\r\n# include \"core/assets/InputCamera.hpp\"\r\n# include \"core/graphics/Texture.hpp\"\r\n# include \"core/graphics/Camera.hpp\"\r\n# include \"core/graphics/RenderUtility.hpp\"\r\n# include \"core/assets/Resources.hpp\"\r\n# include \"core/graphics/Shader.hpp\"\r\n# include \"core/graphics/Mesh.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/** Render high quality soft shadows, designed to mimick the sun shadowing.\r\n\t\\note Soft shadowing require a lot of texture fetches that can impact performances.\r\n\t\\ingroup sibr_renderer\r\n\t*/\r\n\tclass SIBR_EXP_RENDERER_EXPORT ShadowMapRenderer\r\n\t{\r\n\r\n\tpublic:\r\n\r\n\t\t/** Constructor.\r\n\t\t\\param depthMapCam the light viewpoint\r\n\t\t\\param depthMap_RT depth map rendered from the light viewpoint\r\n\t\t*/\r\n\t\tShadowMapRenderer(const sibr::InputCamera& depthMapCam, std::shared_ptr<sibr::RenderTargetLum32F> depthMap_RT)  ;\r\n\t\t\r\n\t\t/// Destructor.\r\n\t\t~ShadowMapRenderer();\r\n\r\n\t\t/**\r\n\t\tRender soft sun shadows on the mesh, using the precomputed depth map.\r\n\t\t\\param w the target width\r\n\t\t\\param h the target height\r\n\t\t\\param cam the viewpoint to use\r\n\t\t\\param mesh the mesh to render\r\n\t\t\\param bias shadow acne bias\r\n\t\t*/\r\n\t\tvoid render(int w, int h,const sibr::InputCamera &cam, const Mesh& mesh, float bias= 0.0005f);\r\n\r\n\t\tstd::shared_ptr<sibr::RenderTargetLum> _shadowMap_RT; ///< Result containing the soft shadows.\r\n\r\n\t\tstd::shared_ptr<sibr::RenderTargetLum32F> _depthMap_RT; ///< Depth map rendered from the light viewpoint.\r\n\r\n\t\t\r\n\tprivate:\r\n\r\n\t\tsibr::GLShader\t\t\t\t_shadowMapShader; ///< Shadow rendering.\r\n\t\tsibr::GLParameter\t\t\t_shadowMapShader_MVP; ///< Final MVP uniform.\r\n\t\tsibr::GLParameter\t\t\t_depthMap_MVP; ///< Light MVP uniform.\r\n\t\tsibr::GLParameter\t\t\t_depthMap_MVPinv; ///< Light inverse MVP uniform.\r\n\t\tsibr::GLParameter\t\t\t_depthMap_radius; ///< Depth map radius.\r\n\t\tsibr::GLParameter\t\t\t_lightDir; ///< Light direction uniform.\r\n\t\tsibr::GLParameter\t\t\t_bias_control; ///< Bias uniform.\r\n\t\tsibr::GLParameter\t\t\t_sun_app_radius; ///< Sun radius (for soft shadows).\r\n\t\tstd::shared_ptr<sibr::Texture2DLum32F> _textureDepthMap; ///< Shadow map target (unused).\r\n\r\n\t};\r\n\r\n} // namespace\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/TexturedMeshRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <core/renderer/TexturedMeshRenderer.hpp>\n\nnamespace sibr { \n\tTexturedMeshRenderer::TexturedMeshRenderer( bool flipY )\n\t{\t\n\t\tif(flipY)\n\t\t_shader.init(\"TexturedMesh\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/textured_mesh_flipY.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/textured_mesh.frag\"));\n\t\telse\n\t\t_shader.init(\"TexturedMesh\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/textured_mesh.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/textured_mesh.frag\"));\n\t\t_paramMVP.init(_shader,\"MVP\");\n\t}\n\n\tvoid\tTexturedMeshRenderer::process(const Mesh& mesh, const Camera& eye, uint textureID, IRenderTarget& dst, bool backfaceCull)\n\t{\n\t\tdst.bind();\n\t\t_shader.begin();\n\t\t_paramMVP.set(eye.viewproj());\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID);\n\t\tmesh.render(true, backfaceCull);\n\t\t_shader.end();\n\t\tdst.unbind();\n\n\t}\n\n\tvoid\tTexturedMeshRenderer::process(const Mesh& mesh, const Camera& eye, const sibr::Matrix4f& model, uint textureID, IRenderTarget& dst, bool backfaceCull)\n\t{\n\t\tdst.bind();\n\t\t_shader.begin();\n\t\t_paramMVP.set(sibr::Matrix4f(eye.viewproj() * model));\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID);\n\t\tmesh.render(true, backfaceCull);\n\t\t_shader.end();\n\t\tdst.unbind();\n\n\t}\n\n} /*namespace sibr*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/TexturedMeshRenderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Camera.hpp>\n\n# include <core/renderer/Config.hpp>\n\nnamespace sibr { \n\n\t/** Render a textured mesh, using per-vertex texture coordinates.\n\t\\ingroup sibr_renderer\n\t*/\n\tclass SIBR_EXP_RENDERER_EXPORT TexturedMeshRenderer\n\t{\n\tpublic:\n\t\ttypedef std::shared_ptr<TexturedMeshRenderer>\tPtr;\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t\\param flipY if set to true, UV coordinates will be flipped vertically.\n\t\t*/\n\t\tTexturedMeshRenderer(bool flipY = false );\n\n\t\t/** Render the textured mesh.\n\t\t\\param mesh the mesh to render (should have UV attribute)\n\t\t\\param eye the viewpoint to use\n\t\t\\param textureID handle of the texture to use\n\t\t\\param dst destination rendertarget\n\t\t\\param backfaceCull should backface culling be performed\n\t\t*/\n\t\tvoid\tprocess(const Mesh& mesh, const Camera& eye, uint textureID, IRenderTarget& dst, bool backfaceCull = true);\n\n\t\t/** Render the textured mesh.\n\t\t\\param mesh the mesh to render (should have UV attribute)\n\t\t\\param eye the viewpoint to use\n\t\t\\param model additional transformation matrix\n\t\t\\param textureID handle of the texture to use\n\t\t\\param dst destination rendertarget\n\t\t\\param backfaceCull should backface culling be performed\n\t\t*/\n\t\tvoid process(const Mesh & mesh, const Camera & eye, const sibr::Matrix4f & model, uint textureID, IRenderTarget & dst, bool backfaceCull = true);\n\n\tprotected:\n\n\t\tGLShader\t\t\t_shader; ///< The texture mesh shader.\n\t\tGLParameter\t\t\t_paramMVP; ///< MVP uniform.\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/addshadow.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n#define SHADOWPOWER_METHOD_ESTIM \t\t\t1\n#define SHADOWPOWER_METHOD_3D \t\t\t\t2\n#define SHADOWPOWER_METHOD_ESTIM_NONLINEAR \t3\n\n#define SHADOWPOWER_METHOD SHADOWPOWER_METHOD_ESTIM\n\nlayout(binding = 0) uniform sampler2D tex;\nlayout(binding = 1) uniform sampler2D firstPassRT; /// \\todo TODO: use ping pong buffering to update it with the last add\n\nuniform mat4 \tin_inv_proj;\nuniform vec2  \tin_image_size;\n\nlayout(location= 0) out vec4 out_color;\n\nin vec2 tex_coord;\n\n\n\n//const float blurSize = 1.0 / 1000.0;\n\nconst float constFgAdditionalOffset = -0.02; // note it should not be linear because of near/far+proj\nconst float constSmoothShadowDistAtten = 8.0;\n\nvec3 unproject(vec3 xyd, mat4 inv_proj) {\n    vec4 pxl = vec4(xyd,1.0)*vec4(2.0)-vec4(1.0); // [0,1] -> [-1,1]\n    vec4 obj = inv_proj * pxl;                    // unproject\n    return (obj.xyz/obj.w);\n}\n\nfloat \tsmoothShadowDist( float dist01 )\n{\n\tfloat v = 1.0 - max(0.0, min(1.0, dist01) );\n\treturn exp(log(v)*constSmoothShadowDistAtten);\n}\n\nvoid main(void) {\n\n//===========================================================================//\t\n//                                                                           //\n//\t\t\t\t\t\t\t   Adding Shadow                                 //\n//                                                                           //\n//===========================================================================//\t\n{\t\n\tconst float scanSizeX = (1.0 / in_image_size.x)*4.0; /// \\todo TODO: should be split into H and W and use image size\n\tconst float scanSizeY = (1.0 / in_image_size.y)*4.0; /// \\todo TODO: should be split into H and W and use image size\n\t\n\tvec4 bg = texture(firstPassRT,tex_coord); \t// background color\n\tvec4 fg = texture(tex,tex_coord);\t\t\t// foreground color (object to add)\n\tfloat bgDepth = bg.a;\n\tfloat outDepth = bgDepth;\n\tfloat fgDepth = fg.a+constFgAdditionalOffset;\n\n\t// By default set output values using bg\n    out_color = vec4(bg.rgb, 1.0);\n\t//out_color = vec4(bg.a, 0.0, 0.0, 1.0);\n\t//gl_FragDepth = bgDepth;\n    \n\tbool fgIsEmpty = (fg.r == 0 && fg.g == 0 && fg.b == 0);\n\t/// gl_FragDepth = 0;\n\t\n    if (fgIsEmpty == false)\n\t{\n\t\tout_color = vec4(fg.rgb, (bgDepth <= fgDepth)? 0.0 : 1.0);\n\t\t//fgDepth = bgDepth;\n\t\toutDepth = (bgDepth <= fgDepth)? bgDepth : fgDepth;\n\t\t//gl_FragDepth = fgDepth;\n\t\t/// out_color = vec4(fg.a, 0.0, 0.0, 1.0);\n\t}\n\telse\n\t{\t\t\n\t\t// Scan for non-empty pixels for determining the power\n\t\t// of the shadow.\n\t\t// 'non-empty' pixels are FULL black pixels\n\t\t\n\t\tconst int \tscanItCount = 8;\n\t\tconst int \tmaxScanablePixels = (scanItCount*2 + 1)*(scanItCount*2 + 1);\n\t\tconst float maxAxisX = (scanItCount*2 + 1)*scanSizeX;\n\t\tconst float maxAxisY = (scanItCount*2 + 1)*scanSizeY;\n\t\tconst float maxScanDist = maxAxisX*maxAxisX + maxAxisY*maxAxisY; \n\t\t\n\t\tfloat nearestDist = maxScanDist*2.0;//maxScanDist + 1.0;\n\t\tfloat nearestXs = 1.0;\n\t\tfloat nearestYs = 1.0;\n\t\tfloat nearestDepth = 0.0;\n\t\tfloat averageBgDepth = 0.0;\n\t\tfloat nonEmptyPixelFound = 0;\n\t\tfor (int x = -scanItCount; x <= scanItCount; x++)\n\t\t{\n\t\t\tfor (int y = -scanItCount; y <= scanItCount; y++)\n\t\t\t{\n\t\t\t\tfloat xs = x*scanSizeX;\n\t\t\t\tfloat ys = y*scanSizeY;\n\t\t\t\tfloat dist = (xs*xs + ys*ys);\n\t\t\t\tvec4 color = texture(tex, vec2(tex_coord.x+xs, tex_coord.y+ys));\n\t\t\t\tfloat sampleDepth =  color.a+constFgAdditionalOffset;\n\t\t\t\t\n\t\t\t\taverageBgDepth += sampleDepth;\n\t\t\t\t\n\t\t\t\tif ( (color.r == 0 && color.g == 0 && color.b == 0) == false\n//// [A] this one will cause you trouble with object in front of your shadow caster\n//\t\t\t\t)\n//// [B] this one will prevent you from casting shadow in front of your object\n////     but visually, you can make it fly a bit and it look like the under is in front\n\t\t\t&& sampleDepth <= bgDepth )\n//// [C] this one is the best in fidelity but requires a call to texture(...)\n//\t\t\t\t&& sampleDepth <= texture(firstPassRT, vec2(tex_coord.x+xs, tex_coord.y+ys)).a)\n\t\t\t\t{\n\t\t\t\t\tif (dist < nearestDist)\n\t\t\t\t\t{\n\t\t\t\t\t\tnearestXs = xs;\n\t\t\t\t\t\tnearestYs = ys;\n\t\t\t\t\t\t// nearestDist = dist;\n\t\t\t\t\t\t// nearestDepth = sampleDepth;\n\t\t\t\t\t}\n\n\t\t\t\t\t\n\t\t\t\t\t//nearestXs = min(xs, nearestXs);\n\t\t\t\t\t//nearestYs = min(ys, nearestYs); // note that stored nearestXs/Ys might stores an unexisting coordinate pair\n\t\t\t\t\tnearestDist = min(nearestDist, dist);\n\t\t\t\t\tnearestDepth += sampleDepth;//max(nearestDepth, sampleDepth);\n\t\t\t\t\t++nonEmptyPixelFound;\n\t\t\t\t\t\n\t\t\t\t\taverageBgDepth -= sampleDepth; // cancel this in this case\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnearestDepth = nearestDepth/float(nonEmptyPixelFound);\n\t\taverageBgDepth = averageBgDepth/float(maxScanablePixels-nonEmptyPixelFound);\n\t\t\n\t\t//if (nearestDist > 0)\n\t\t{\n\t\t\t\n\t\t\t// Compute the shadow power\n\t\t\tfloat shadowPower = 1.0;\n\t\t\t\n\t\t\tfloat ratioNonEmptyPixelFound = float(nonEmptyPixelFound) / float(maxScanablePixels);\n\t\t\t// influence of the caster size\n\t\t\tshadowPower *= smoothstep(0.0, 0.5, ratioNonEmptyPixelFound);\n\t\t\t\n\t\t\t//if (nonEmptyPixelFound < 100)\n\t\t\t//\tshadowPower = 0.0;\n\t\t\t\n\t\t\t//shadowPower *= max(0.0, min(1.0, nonEmptyPixelFound/minPixelCaster ));\n\t\t\t\n\t\t\t// Dev Note for improving things\n\t\t\t// There are two way to implement the influence of the shadow caster/receiver distance.\n\t\t\t// [3d solution]\n\t\t\t// - one is to unproject both points and measure their distance in 3d world unit\n\t\t\t// [estim solution]\n\t\t\t// - another one is roughly estimate the effect\n\n#if SHADOWPOWER_METHOD == SHADOWPOWER_METHOD_ESTIM_NONLINEAR\t\t\t\n\t\t\t// [estim solution]\n\t\t\t// influence of the distance to the object that cast this shadow (slightly improve but not enough)\n\t\t\t//shadowPower *= smoothShadowDist(nearestDist/maxScanDist);\n\t\t\t// influence of the depth distance\n\t\t\tconst float maxDiffDepth = 0.04;//0.15; // because it's nonlinear, it will react differently depending on Z (and your dataset clipping planes's near/far)\n\t\t\tfloat diffDepth =  bgDepth-nearestDepth;\n\t\t\tdiffDepth = diffDepth / maxDiffDepth;\n\t\t\tfloat depthFactor = clamp(diffDepth, 0.0, 1.0);\n\t\t\tshadowPower *= (1.0 - depthFactor);\n#endif\t\t\t\n\t\t\t\n#if SHADOWPOWER_METHOD == SHADOWPOWER_METHOD_ESTIM\t\t\t\n\t\t\t// [estim solution]\n\t\t\t// influence of the distance to the object that cast this shadow (slightly improve but not enough)\n\t\t\t//shadowPower *= smoothShadowDist(nearestDist/maxScanDist);\n\t\t\t// influence of the depth distance\n\t\t\tconst float maxDist = 0.4; // in world unit\n\t\t\tvec3 bg2dPos = vec3(tex_coord.xy, bgDepth);\n\t\t\tvec3 bg3dPos = unproject(bg2dPos, in_inv_proj);\n\t\t\tvec3 caster2dPos = vec3(vec2(tex_coord.x+nearestXs, tex_coord.y+nearestYs), nearestDepth);\n\t\t\tvec3 caster3dPos = unproject(caster2dPos, in_inv_proj);\n\t\t\tfloat line = abs(caster3dPos.z-bg3dPos.z);\n\t\t\tfloat factorDist = 1.0 - max(0.0, min(1.0, line/maxDist) );\n\t\t\tshadowPower *= factorDist;\n#endif\t\t\t\n\t\t\t\n#if SHADOWPOWER_METHOD == SHADOWPOWER_METHOD_3D\n\t\t\t// [3d solution]\t\t\t\n\t\t\t// influence of the shadow receiver distance\n\t\t\tconst float maxDist = 0.25; // in world unit\n\t\t\tconst float maxDistSqr = maxDist*maxDist;\n\t\t\tvec3 bg2dPos = vec3(tex_coord.xy, bgDepth);\n\t\t\tvec3 bg3dPos = unproject(bg2dPos, in_inv_proj);\n\t\t\tvec3 caster2dPos = vec3(vec2(tex_coord.x+nearestXs, tex_coord.y+nearestYs), nearestDepth);\n\t\t\tvec3 caster3dPos = unproject(caster2dPos, in_inv_proj);\n\t\t\tvec3 line = caster3dPos-bg3dPos;\n\t\t\tfloat distSqr = line.x*line.x + line.y*line.y + line.z*line.z;\n\t\t\tfloat factorDist = 1.0 - max(0.0, min(1.0, distSqr/maxDistSqr) );\n\t\t\tshadowPower *= factorDist;\n#endif\t\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\tout_color = vec4(0, 0, 0, shadowPower / 1.5);\n\t\t\t\n\t\t\t// //out_color = vec4(fgZ/10.0, 0, 0, 1.0);\n\t\t\t// float nearPlane = 3.23569;\n\t\t\t// float farPlane = 17.1543;\n\t\t\t// //bgZ = (bg2dPos.z * bg2dPos.w - nearPlane) / (farPlane - nearPlane);\n\t\t\t// out_color = vec4(bg2dPos.z/farPlane, 0, 0, 1.0);\n\t\t\t//out_color = vec4(bgDepth, 0, 0, 1.0);\n\t\t\t//gl_FragDepth = nearestDepth;\n\t\t\t\n\t\t\t\n\t\t\t//gl_FragDepth = bgDepth + constFgAdditionalOffset - 1;\n\t\t\tfloat newDepth = bgDepth;// + constFgAdditionalOffset;\n\t\t\toutDepth = (newDepth <= bgDepth)? newDepth : bgDepth;\n\t\t}\n\t\t\n\t\t// if (nearestDist < 1.0)\n\t\t// {\n\t\t\t// out_color = vec4(nearestDepth, 0.0, 0.0, 1.0);\n\t\t\t// gl_FragDepth = 0;\n\t\t// }\t\t\n\t}\n\t\n\t// Simulate BLEND function (GL_ONE_MINUS_SRC_ALPHA)\n\t//out_color = vec4(bg.xyz + out_color.xyz/out_color.a, gl_FragDepth);\n\tout_color = vec4(bg.xyz*(1.0 - out_color.a) + out_color.xyz*out_color.a,  outDepth);\n\t//gl_FragDepth = outDepth;\n\t//out_color = bg;\n}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/blur.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nuniform sampler2D \timage;\nuniform vec2  \t\tin_image_size;\n\n\nin vec2 tex_coord;\n\n\nvoid main(void) {\n\n\tvec4 color = texture(image, tex_coord);\t\n\t\n\tconst float blurPixelStep = 1.25;\n\tconst float blurSizeX = (1.0 / in_image_size.x)*blurPixelStep;\n\tconst float blurSizeY = (1.0 / in_image_size.y)*blurPixelStep;\n\t\n\tconst int nbVisit = 4;\n\tivec2 visit[nbVisit] = ivec2 [](\n\t// cross\n\t// ivec2( 0, -1),\n\t// ivec2( 0,  1),\n\t// ivec2( 1,  0),\n\t// ivec2(-1,  0)\n\t\n\t// corner (better, detect more edge)\n\tivec2(-1, -1),\n\tivec2(-1,  1),\n\tivec2( 1, -1),\n\tivec2( 1,  1)\n\t);\n\t\n\tvec4 avcolor;\n\tvec4 bgColor = vec4(color.xyz, 0.0);\n\tfor (int i = 0; i < nbVisit; ++i)\n\t{\n\t\tvec4 col = texture( image, \n\t\tvec2(tex_coord.x + visit[i].x* blurSizeX, tex_coord.y + visit[i].y * blurSizeY) );\n\t\t\n\t\tbgColor = (col.a > bgColor.a)? col : bgColor;\n\t\tavcolor += col;\n\t}\n\t\n\tavcolor /= float(nbVisit);\n\t\n\tfloat dColor = abs(avcolor.a - color.a);//length(avcolor - color);\n\tconst float maxDColor = 0.015f;\n\tfloat mixFactor = 1.0 - min(1.0, dColor/maxDColor);\n\tvec4 correction = bgColor;//mix(bgColor, avcolor, mixFactor);\n\n\t// [USEFUL FOR DEBUGGING]: show detected edge\n\t//out_color = (dColor > maxDColor)? vec4(1.0, 0.0, 1.0, 1.0) : color;\n\n\tout_color = (dColor > maxDColor)? mix(correction, color, 0.5) : color;\n\n\t// [USEFUL FOR DEBUGGING]: change nothing\n\t//out_color = color;\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/colored_mesh.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nout vec4 out_color;\n\nin vec3 vertColor;\n\nvoid main(void) {\n\tout_color = vec4(vertColor, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/colored_mesh.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_color;\n\nout vec3 vertColor;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t\n\tvertColor = in_color;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/copy.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nuniform sampler2D image;\nuniform bool flip = false;\n\nin vec4 texcoord;\n\nvoid main(void)\n{\n    vec4 color   = texture(image, flip ? vec2(texcoord.x, 1.0 - texcoord.y) : texcoord.xy);\n    out_color    = color;//vec4(color.rgb, 1.0);\n    gl_FragDepth = color.w;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/copy_depth.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nlayout(binding = 0) uniform sampler2D image;\n\nin vec4 texcoord;\n\nvoid main(void)\n{\n    vec4 color   = texture(image, texcoord.xy);\n\tout_color = vec4(vec3(color.r), 1.0);\n    gl_FragDepth = color.r;\n    //gl_FragDepth = color.r == 0? 1.0 : color.r;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/depthRenderer.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nout float out_depth;\n\nvoid main(void) {\n\t\n    out_depth = 2.0*gl_FragCoord.z-1.0;\n    //out_color = fragTexCoord.x*vec4(1.0,0.0,0.0,1.0);\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/depthRenderer.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\n\n\nvoid main(void) {\n\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t//fragTexCoord = vec2(0.2,0.8);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/emotive_relight.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec3 lightDir;\nuniform vec3 cameraEye;\n\nlayout(binding=0) uniform sampler2D tex;\nlayout(binding=1) uniform sampler2D smTex;\n\n\nout vec4 out_color;\n\nin vec2 vertUV;\nin float vertAO;\nin vec3 VtoF_normal;\nin vec3 vertPos;\n\nfloat sRGB2LinF(float inF){\n\tif(inF<0.04045){\n\t\treturn inF/12.92;\n\t}\n\telse{\n\t\treturn pow((inF+0.055)/(1.055),2.4);\n\t}\n}\n\nfloat lin2sRGBF(float inF){\n\t\n\tif(inF<0.0031308){\n\t\treturn 12.92*inF;\n\t}\n\telse{\n\t\treturn 1.055*pow(inF,1.0/2.4)-0.055;\n\t}\n\t\n}\n\nvec4 sRGB2Lin(vec4 inVec){\n\treturn vec4(sRGB2LinF(inVec.x),sRGB2LinF(inVec.y),sRGB2LinF(inVec.z),inVec.w);\n}\n\nvec4 lin2sRGB(vec4 inVec){\n\treturn vec4(lin2sRGBF(inVec.x),lin2sRGBF(inVec.y),lin2sRGBF(inVec.z),inVec.w);\n}\n\nfloat getFogFactor(float d)\n{\n    const float FogMax = 70.0;\n    const float FogMin = 10.0;\n\n    if (d>=FogMax) return 1;\n    if (d<=FogMin) return 0;\n\n    return 1 - (FogMax - d) / (FogMax - FogMin);\n}\n\n\nvoid main(void) {\n\tvec2 uv = vertUV;\n\tuv.y = 1.0 - uv.y; /// \\todo TODO: Why Texture are flipped in y ?\n\n\tvec4 sky_color_lin = vec4(0.7,1.0,1.2,1.0)*sRGB2Lin(texture(tex, uv));\n\n\tfloat shadowVal=texture(smTex,gl_FragCoord.xy/textureSize(smTex,0).xy).x;\n\n\tvec4 sun_color_lin = max(0.0,dot(VtoF_normal,lightDir))*shadowVal*sRGB2Lin(texture(tex, uv))/(vertAO+0.0001);\n\n\tfloat d = distance(cameraEye, vertPos);\n    float alpha = getFogFactor(d);\n\n    vec4 composed_color = lin2sRGB(sun_color_lin+0.1*sky_color_lin);\n\n    out_color = mix(composed_color, vec4(0.5,0.5,0.5,1.0), alpha);\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/emotive_relight.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_ao;\nlayout(location = 2) in vec2 in_uv;\nlayout(location = 3) in vec3 in_normal;\n\nout vec2 vertUV;\nout float vertAO;\nout vec3 VtoF_normal;\nout vec3 vertPos;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t\n\tvertUV = in_uv;\n\tvertAO = in_ao.x;\n\tVtoF_normal = in_normal;\n\tvertPos = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/hdrEnvMap.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform sampler2D tex;\n\nout vec4 out_color;\n\nin vec2 vertUV;\n\nfloat lin2sRGBF(float inF){\n\t\n\tif(inF<0.0031308){\n\t\treturn 12.92*inF;\n\t}\n\telse{\n\t\treturn 1.055*pow(inF,1.0/2.4)-0.055;\n\t}\n\t\n}\n\nvec4 lin2sRGB(vec4 inVec){\n\treturn vec4(lin2sRGBF(inVec.x),lin2sRGBF(inVec.y),lin2sRGBF(inVec.z),inVec.w);\n}\n\nvoid main(void) {\n\tvec2 uv = vertUV;\n\tuv.y = 1.0 - uv.y; /// \\todo TODO: Why Texture are flipped in y ?\n\tout_color = lin2sRGB(texture(tex, uv));\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/hdrEnvMap.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 2) in vec2 in_uv;\n\nout vec2 vertUV;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t\n\tvertUV = in_uv;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlat.gp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 450\r\n\r\nlayout(triangles) in;\r\nlayout(triangle_strip, max_vertices=6) out;\r\n\r\nlayout(location = 1) in vec3 colors_tes[];\r\nlayout(location = 2) in vec2 coordsTex_tes[];\r\nlayout(location = 3) in vec3 normals_tes[];\r\n\r\nuniform vec3 pos;                           \r\n\r\nconst float PI = 3.1415926535897932384626433832795;   \r\n\r\nlayout(location = 0) out vec4 position;\r\nlayout(location = 1) out vec3 colors_gs;\r\nlayout(location = 2) out vec2 coordsTex_gs;\r\nlayout(location = 3) out vec3 normals_gs;\r\n\r\nvoid main()\r\n{\t\r\nint i,j;\r\nvec3 toPoint[3];\r\nvec3 d[3];\r\nfloat lat[3];\r\nfloat longt[3];\r\n\r\n\r\nfor(i=0; i<3; i++)\r\n{\r\n  toPoint[i] = gl_in[i].gl_Position.xyz-pos;\r\n  d[i] = normalize(toPoint[i]);                                  \r\n  lat[i] = d[i].z;\r\n  longt[i] = atan(d[i].y,d[i].x);\r\n  if(longt[i]<0)\r\n    longt[i] += 2.0f*PI;\r\n}\r\n\r\n\r\nif((abs(longt[1]-longt[2])<PI && abs(longt[0]-longt[2])<PI && abs(longt[1]-longt[0])<PI)){\r\n\r\n\r\n  float fact=100.0f;\r\n\r\n  for(i=0; i<3; i++)\r\n  {\r\n  gl_Position = vec4(longt[i]/PI-1.0,-lat[i],length(toPoint[i])/fact,1.0f);\r\n  position=gl_Position;\r\n  colors_gs = colors_tes[i];\r\n  coordsTex_gs = coordsTex_tes[i];\r\n  normals_gs = normals_tes[i];\r\n  EmitVertex();\r\n  }\r\n  EndPrimitive();\r\n\r\n}\r\nelse{\r\nfor(i=0; i<3; i++){\r\n  if(abs(longt[i]-longt[(i+1)%3])>PI && abs(longt[i]-longt[(i+2)%3])>PI){\r\n\r\n    float longt_0[3]=longt;\r\n    float longt_1[3]=longt;\r\n\r\n    if(longt[i]>PI){\r\n      longt_0[i]=longt[i]-2.0f*PI;\r\n      longt_1[(i+1)%3]=longt[(i+1)%3]+2.0f*PI;\r\n      longt_1[(i+2)%3]=longt[(i+2)%3]+2.0f*PI;\r\n    }\r\n    else{\r\n      longt_0[i]=longt[i]+2.0f*PI;\r\n      longt_1[(i+1)%3]=longt[(i+1)%3]-2.0f*PI;\r\n      longt_1[(i+2)%3]=longt[(i+2)%3]-2.0f*PI;\r\n    }\r\n\r\n    for(j=0; j<3; j++)\r\n    {\r\n      gl_Position = vec4(longt_0[j]/PI-1.0,-lat[j],length(toPoint[j])/100.0f,1.0f);\r\n      position=gl_Position;\r\n      colors_gs = colors_tes[i];\r\n      coordsTex_gs = coordsTex_tes[i];\r\n      normals_gs = normals_tes[i];\r\n      EmitVertex();\r\n    }\r\n    EndPrimitive();\r\n\r\n    for(j=0; j<3; j++)\r\n    {\r\n      gl_Position = vec4(longt_1[j]/PI-1.0,-lat[j],length(toPoint[j])/100.0f,1.0f);\r\n      position=gl_Position;\r\n      colors_gs = colors_tes[i];\r\n      coordsTex_gs = coordsTex_tes[i];\r\n      normals_gs = normals_tes[i];\r\n      EmitVertex();\r\n    }\r\n    EndPrimitive();\r\n    break;\r\n  }\r\n}\r\n\r\n  \r\n}\r\n\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlat.tcs",
    "content": "#version 450 core\r\n\r\nuniform vec3 pos;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\nconst float PI = 3.1415926535897932384626433832795;\t\t\r\n\r\nlayout(vertices = 3) out; \r\n\r\nlayout(location = 1) in vec3 vs_colors[];\r\nlayout(location = 2) in vec2 vs_coordsTex[];\r\nlayout(location = 3) in vec3 vs_normals[];\r\n\r\nout vec3 colors_tcs [];\r\nout vec2 coordsTex_tcs [];\r\nout vec3 normals_tcs [];\r\n\r\nvoid main(void) {\r\n\r\ncolors_tcs[gl_InvocationID] = vs_colors[gl_InvocationID];\r\ncoordsTex_tcs[gl_InvocationID] = vs_coordsTex[gl_InvocationID];\r\nnormals_tcs[gl_InvocationID] = vs_normals[gl_InvocationID];\r\n\r\nif (gl_InvocationID == 0) {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n    int i;\r\n\tvec3 toPoint[3];\r\n\tvec3 d[3];\r\n\tfloat lat[3];\r\n\tfloat longt[3];\r\n\r\n\tfor(i=0; i<3; i++)\r\n\t{\r\n\t  toPoint[i] = gl_in[i].gl_Position.xyz-pos;\r\n\t  d[i] = normalize(toPoint[i]);                                  \r\n      lat[i] = d[i].z;\r\n      longt[i] = atan(d[i].y,d[i].x);\r\n      if(longt[i]<0)\r\n    \tlongt[i] += 2.0f*PI;\r\n\t}\r\n\r\n\tfloat inner=0;\r\n\tfor(i=0; i<3; i++)\r\n\t{\r\n\t\tfloat level= 512*sqrt(\r\n\t\tpow((longt[(i+1)%3]-longt[(i+2)%3])/PI,2)+\r\n\t\tpow((lat[(i+1)%3]-lat[(i+2)%3]),2)\r\n\t\t);\r\n\t\tgl_TessLevelOuter[i] = level;\r\n\t\tif(level>inner)\r\n\t\t\tinner=level;\r\n\t}\r\n\r\n\tgl_TessLevelInner[0] = inner/2; \r\n\r\n}\r\n\r\ngl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; \r\n\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlat.tes",
    "content": "#version 450 core \t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(triangles, equal_spacing, cw) in; \t\r\n\r\nlayout(location = 1) in vec3 colors_tcs[];\r\nlayout(location = 2) in vec2 coordsTex_tcs[];\r\nlayout(location = 3) in vec3 normals_tcs[];\r\n\r\nlayout(location = 1) out vec3 colors_tes;\r\nlayout(location = 2) out vec2 coordsTex_tes;\r\nlayout(location = 3) out vec3 normals_tes;\r\n\r\nvoid main(void) {\r\n   colors_tes = colors_tcs[0];\r\n   coordsTex_tes = coordsTex_tcs[0];\r\n   normals_tes = normals_tcs[0];\r\nvec4 inPos = (gl_TessCoord.x*gl_in[0].gl_Position + gl_TessCoord.y*gl_in[1].gl_Position + gl_TessCoord.z*gl_in[2].gl_Position); \r\n\t\t\t\t\t\t\t\t\t\t\r\n   gl_Position = inPos;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlat.vp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 450\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 0) in vec3 inPos;\r\nlayout(location = 1) in vec3 inColors;\r\nlayout(location = 2) in vec2 inCoordsTex;\r\nlayout(location = 3) in vec3 inNormals; \r\n\r\nlayout(location = 1) out vec3 vs_colors;\r\nlayout(location = 2) out vec2 vs_coordsTex;\r\nlayout(location = 3) out vec3 vs_normals;\r\n\r\nvoid main()\r\n{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\tvs_colors= inColors;\r\n\tvs_coordsTex = inCoordsTex;\r\n\tvs_normals = inNormals;\r\n\tgl_Position = vec4(inPos,1.0f);\r\n}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlatColor.fp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 450\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 0) out vec4 outColor;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 0) in vec4 position;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 1) in vec3 colors_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 2) in vec2 texCoords_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 3) in vec3 normals_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\nvoid main()\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n{\t\t\t\r\n\r\n\tif(100.f*position.z<0.001)\r\n\t\tdiscard;\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t//outColor = vec4(1.f-10.f*position.z, 1.f-10.f*position.z, 1.f-10.f*position.z , 1.0f);\t\r\n\toutColor = vec4(colors_gs.x, colors_gs.y, colors_gs.z , 1.0f);\t\r\n}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/longlatDepth.fp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 450\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 0) out vec4 outColor;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 0) in vec4 position;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 1) in vec3 colors_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 2) in vec2 texCoords_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nlayout(location = 3) in vec3 normals_gs;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\nvoid main()\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n{\t\t\t\r\n\r\n\tif(100.f*position.z<0.001)\r\n\t\tdiscard;\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\toutColor = vec4(1.f-10.f*position.z, 1.f-10.f*position.z, 1.f-10.f*position.z , 1.0f);\t\r\n\t//outColor = vec4(colors_gs.x, colors_gs.y, colors_gs.z , 1.0f);\t\r\n}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/noproj.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/** \\file ibr.vp\n *\n * Vertex shader WITHOUT projection and modelview transformations.\n */\n\n#version 420\n\nlayout(location = 0) in vec4 in_vertex;   /**< Input vertex coordinates */\nlayout(location = 1) in vec4 in_texcoord; /**< Input texture coordinates */\nlayout(location = 2) in vec4 in_color;    /**< Input colour value */\n\nout vec4 texcoord;                        /**< Output texture coordinates */\nout vec4 color;                           /**< Output color value */\n\nvoid main(void) {\n  gl_Position = in_vertex;\n  texcoord    = in_texcoord;\n  color       = in_color;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/normalRenderer.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nin vec3 GtoF_normal;\nlayout(location = 0) out vec4 out_color;\n\nvoid main(void) {\n\t\n\tvec3 colorN=(GtoF_normal+1.0)/2.0;\n    out_color = vec4(colorN,1.0);\n    //out_color = fragTexCoord.x*vec4(1.0,0.0,0.0,1.0);\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/normalRenderer.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\nuniform mat4 M;\nuniform mat4 V;\nuniform bool imSpaceNormals;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 3) in vec3 in_normal;\n\nout vec3 GtoF_normal;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\n\tif(imSpaceNormals)\n\t\tGtoF_normal = normalize((inverse(transpose(V*M)) * vec4(in_normal,0.0)).xyz);\n\telse\n\t\tGtoF_normal = normalize((inverse(transpose(M)) * vec4(in_normal,0.0)).xyz);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/normalRendererGen.gp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\nuniform mat4 MVPinv;\r\n\r\nlayout(triangles) in;\r\nlayout (triangle_strip) out;\r\nlayout (max_vertices = 3) out;\r\n\r\nout vec3 GtoF_normal;\r\n\r\nvoid main(void) {\r\n  \r\n  vec3 P0 = (MVPinv *gl_in[0].gl_Position).xyz;\r\n  vec3 P1 = (MVPinv *gl_in[1].gl_Position).xyz;\r\n  vec3 P2 = (MVPinv *gl_in[2].gl_Position).xyz;\r\n  \r\n  vec3 V0 = P0 - P1;\r\n  vec3 V1 = P2 - P1;\r\n  \r\n  vec3 N = normalize( cross(V1, V0) );\r\n\r\n  int i;\r\n\r\n    for (i = 0; i < gl_in.length(); i++)\r\n    {\r\n\t\tGtoF_normal = N; // Specs say we need to set again output values after calling EmitVertex\r\n        gl_Position = gl_in[i].gl_Position;\r\n        EmitVertex();\r\n    }\r\n    EndPrimitive();\r\n\r\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/normalRendererGen.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t//fragTexCoord = vec2(0.2,0.8);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/poisson_diverg.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D synth;\nlayout(location= 0) out vec4 out_constraint;\n\nvoid main(void) {\n    vec4 I = texelFetch(synth, ivec2(gl_FragCoord.xy), 0);\n\n    // hole - perform Poisson synthesis here\n    if (all(lessThan(I.xyz,vec3(0.01))))\n        out_constraint = vec4(0);\n    else\n        out_constraint = I;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/poisson_interp.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform float scale;\n\nlayout(binding = 0) uniform sampler2D coarse;\nlayout(binding = 1) uniform sampler2D constraint;\nlayout(location= 0) out vec4 out_color;\n\nin vec4 texcoord;\n\n\nvoid main(void) {\n    //  sample color from lower multigrid level by scaling texture coordinates\n    vec4 color = texture(coarse,vec2(gl_FragCoord.xy/scale)/textureSize(coarse,0).xy,0);\n\n    //  sample Dirichlet constraint without texture filtering because pixel without\n    //  Dirichlet constraint are black and texture filtering may break this check\n    vec4 cons  = texelFetch(constraint,ivec2(gl_FragCoord),0);\n\n    //  write color of lower level to output except holes pixels in the constraint\n    if (any(greaterThan(cons.rgb,vec3(0.01))))\n        out_color = cons;\n    else\n        out_color = color;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/poisson_jacobi.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec4 weights;\nuniform float scale;\n\nlayout(binding = 0) uniform sampler2D curr_tex;\nlayout(location= 0) out vec4 out_color;\n\nvoid main(void) {\n    ivec2 coord = ivec2(gl_FragCoord.xy*scale);\n\n    float w_center = weights.x;\n    float w_edge   = weights.y;\n    float w_corner = weights.z;\n    float w_c_x_inv= weights.w;\n\n    // Solve the Laplace equation, same as Poisson equation with\n    // divergence equal to 0\n    out_color =\n        -w_c_x_inv * (\n                (texelFetch(curr_tex, coord, 0) * w_center +\n                 (texelFetch(curr_tex, coord+ivec2( 0, 1), 0) +\n                  texelFetch(curr_tex, coord+ivec2( 0,-1), 0) +\n                  texelFetch(curr_tex, coord+ivec2( 1, 0), 0) +\n                  texelFetch(curr_tex, coord+ivec2(-1, 0), 0)) * w_edge +\n                 (texelFetch(curr_tex, coord+ivec2(-1,-1), 0) +\n                  texelFetch(curr_tex, coord+ivec2(-1, 1), 0) +\n                  texelFetch(curr_tex, coord+ivec2( 1,-1), 0) +\n                  texelFetch(curr_tex, coord+ivec2( 1, 1), 0)) * w_corner\n                )\n            );\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/poisson_restrict.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform float scale;\n\nlayout(binding = 0) uniform sampler2D cons;\nlayout(location= 0) out vec4 out_constraint;\n\nvoid main(void) {\n    mat3 f = mat3(\n            0.25, 0.50, 0.25,\n            0.50, 1.00, 0.50,\n            0.25, 0.50, 0.25);\n\n    vec4 constr = vec4(0);\n\n    float sum = 0;\n\n    ivec2 coord = ivec2(gl_FragCoord.xy*scale);\n    for (int i=0; i<3; i++) {\n        for (int j=0; j<3; j++) {\n            vec4 c  = texelFetch(cons,coord+ivec2(i-1,j-1),0);\n            float a = float(any(greaterThan(c.rgb, vec3(0.01))));\n            constr += f[i][j] * a * c;\n            sum    += f[i][j] * a;\n        }\n    }\n    out_constraint = constr / sum;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/positionReflectedDirRenderer.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nin vec3 position;\nin vec3 normal;\n\nuniform vec3 cameraPos;\n\nlayout(location = 0) out vec3 outPosition;\nlayout(location = 1) out vec3 outDirection;\n\nvoid main(void) {\n\toutPosition = position;\n\toutDirection = reflect(normalize(position - cameraPos), normal);\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/positionReflectedDirRenderer.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 3) in vec3 in_normal;\n\nout vec3 position;\nout vec3 normal;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n    position = in_vertex;\n    normal = in_normal;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/positionRenderer.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nout vec3 out_position;\n\nin vec3 position;\n\nvoid main(void) {\n\tout_position = position;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/positionRenderer.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\n\nout vec3 position;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n    position = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/shadowMapRenderer.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\nconst float PI = 3.1415926535897932384626433832795;\n\nvec2 poissonDisk[64] = vec2[](\nvec2(-0.613392, 0.617481),\nvec2(0.170019, -0.040254),\nvec2(-0.299417, 0.791925),\nvec2(0.645680, 0.493210),\nvec2(-0.651784, 0.717887),\nvec2(0.421003, 0.027070),\nvec2(-0.817194, -0.271096),\nvec2(-0.705374, -0.668203),\nvec2(0.977050, -0.108615),\nvec2(0.063326, 0.142369),\nvec2(0.203528, 0.214331),\nvec2(-0.667531, 0.326090),\nvec2(-0.098422, -0.295755),\nvec2(-0.885922, 0.215369),\nvec2(0.566637, 0.605213),\nvec2(0.039766, -0.396100),\nvec2(0.751946, 0.453352),\nvec2(0.078707, -0.715323),\nvec2(-0.075838, -0.529344),\nvec2(0.724479, -0.580798),\nvec2(0.222999, -0.215125),\nvec2(-0.467574, -0.405438),\nvec2(-0.248268, -0.814753),\nvec2(0.354411, -0.887570),\nvec2(0.175817, 0.382366),\nvec2(0.487472, -0.063082),\nvec2(-0.084078, 0.898312),\nvec2(0.488876, -0.783441),\nvec2(0.470016, 0.217933),\nvec2(-0.696890, -0.549791),\nvec2(-0.149693, 0.605762),\nvec2(0.034211, 0.979980),\nvec2(0.503098, -0.308878),\nvec2(-0.016205, -0.872921),\nvec2(0.385784, -0.393902),\nvec2(-0.146886, -0.859249),\nvec2(0.643361, 0.164098),\nvec2(0.634388, -0.049471),\nvec2(-0.688894, 0.007843),\nvec2(0.464034, -0.188818),\nvec2(-0.440840, 0.137486),\nvec2(0.364483, 0.511704),\nvec2(0.034028, 0.325968),\nvec2(0.099094, -0.308023),\nvec2(0.693960, -0.366253),\nvec2(0.678884, -0.204688),\nvec2(0.001801, 0.780328),\nvec2(0.145177, -0.898984),\nvec2(0.062655, -0.611866),\nvec2(0.315226, -0.604297),\nvec2(-0.780145, 0.486251),\nvec2(-0.371868, 0.882138),\nvec2(0.200476, 0.494430),\nvec2(-0.494552, -0.711051),\nvec2(0.612476, 0.705252),\nvec2(-0.578845, -0.768792),\nvec2(-0.772454, -0.090976),\nvec2(0.504440, 0.372295),\nvec2(0.155736, 0.065157),\nvec2(0.391522, 0.849605),\nvec2(-0.620106, -0.328104),\nvec2(0.789239, -0.419965),\nvec2(-0.545396, 0.538133),\nvec2(-0.178564, -0.596057)\n);\n\nuniform vec3 lightDir;\nuniform float sun_app_radius;\nuniform mat4 depthMapMVPinv;\nuniform float depthMapRadius;\nuniform float biasControl;\n\nlayout(binding=0) uniform sampler2D depthMap;\n\nin vec4 depthMapProj;\nin vec3 VtoF_normal;\nin vec3 VtoF_pos;\n\nout float out_val;\n\nvoid main(void) {\n\t\n\tvec2 texc = (depthMapProj.xy + 1.0) / 2.0;\n\n\tfloat depthImSpace = depthMapProj.z;\n\n\tfloat cosTheta = clamp(dot(VtoF_normal,lightDir),0.0,1.0);\n\tfloat bias = biasControl*tan(acos(cosTheta));\n\tbias = clamp(bias, 0.0, 5*biasControl);\n\n\tint textureWidth = textureSize(depthMap,0).x;\n\n\t// Compute the size of the shadow transition\n\n\t// The 2 account for the fact that we are treating the radius.\n\n\tint r_blocker = int(ceil(0.5*tan(sun_app_radius*PI/180.0)*textureWidth));\n\tfloat mean_blocker_val = 0.0;\n\tfloat blocker_num_val = 0.0;\n\tfloat sum_weight = 0.0;\n\n\tfor(int i = 0; i<7 ; i++){\n\n\t\tfloat theta_rot=i;\n\t\tmat2 rotation_poisson =mat2(cos(theta_rot), sin(theta_rot), -sin(theta_rot), cos(theta_rot));\n\n\t\tfor(int k = 0; k <64 ; k++){\n\n\t\t\tfloat pixDist = length(r_blocker*poissonDisk[k]/textureWidth);\n\t\t\tif(pixDist<=r_blocker){\n\t\t\t\tfloat depthMapVal = texture(depthMap, texc + r_blocker*rotation_poisson*poissonDisk[k]/textureWidth).x;\n\n\t\t\t\tfloat bias_with_dist = bias*(pixDist+1.0);\n\n\t\t\t\tif( depthImSpace-bias_with_dist > depthMapVal ){\n\n\t\t\t\t\tvec3 blocker_pos=(depthMapMVPinv*vec4(depthMapProj.x,depthMapProj.y,depthMapVal,1.0)).xyz;\n\n\t\t\t\t\tfloat weight = 0.01+exp(-pow(pixDist/(0.02*r_blocker),2.0));\n\t\t\t\t\tmean_blocker_val += weight*length(VtoF_pos-blocker_pos);\n\t\t\t\t\tsum_weight += weight;\n\t\t\t\t\tblocker_num_val += 1.0;\n\t\t\t    }\n\t\t\t}\t\t\n\t\t}\n\t}\n\n\tif( dot(VtoF_normal,lightDir) <= -0.017 ){\n\t\tout_val = 0.0;\n\t}\n\telse if(blocker_num_val < 1.0){\n\t\tout_val = 1.0;\n\t}\n\telse{\n\n\t\tfloat d_blocker_receiver = mean_blocker_val/sum_weight;\n\n\t\tfloat wShadow=2*d_blocker_receiver*tan(sun_app_radius*PI/180.0);\n\t\t//float angleCompensation= dot(normalize(VtoF_normal),normalize(lightDir));\n\t\t//float wShadowAngle = wShadow/angleCompensation;\n\t\tfloat ratioShadowTexture = wShadow/(2.0*depthMapRadius);\n\t\tfloat pixelShadowTexture = ratioShadowTexture*textureWidth;\n\n\t\tconst int r = int(ceil(pixelShadowTexture));\n\n\t\tfloat num_val = 0.0;\n\t\tfloat sum_val = 0.0;\n\n\t\tfor(int i = 0; i<14 ; i++){\n\n\t\t\tfloat theta_rot=float(i);\n\t\t\tmat2 rotation_poisson =mat2(cos(theta_rot), sin(theta_rot), -sin(theta_rot), cos(theta_rot));\n\n\t\t\tfor(int k = 0; k <64 ; k++){\n\n\t\t\t\tfloat depthMapVal = texture(depthMap, texc + r*rotation_poisson*poissonDisk[k]/textureWidth).x;\n\t\t\t\tfloat pixDist = length(r*poissonDisk[k]/textureWidth);\n\t\t\t\tfloat bias_with_dist = bias*(pixDist+1.0);\n\n\t\t\t\tif( depthImSpace-bias_with_dist > depthMapVal ){\n\t\t\t    \tsum_val += 0.0;\n\t\t\t    }\n\t\t\t    else{\n\t\t\t    \tsum_val += 1.0;\n\t\t\t    }\n\t\t\t    num_val +=1.0;\n\t\t\t}\n\t\t}\n\n\t\tout_val = sum_val/num_val;\n\t}\n\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/shadowMapRenderer.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\nuniform mat4 depthMapMVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 3) in vec3 in_normal;\n\nout vec4 depthMapProj;\nout vec3 VtoF_normal;\nout vec3 VtoF_pos;\n\nvoid main(void) {\n\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\n\tdepthMapProj = depthMapMVP * vec4(in_vertex,1.0);\n\n\tVtoF_normal = in_normal;\n\tVtoF_pos = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/texture-invert.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D tex;\nlayout(location= 0) out vec4 out_color;\n\nin vec2 tex_coord;\n\nvoid main(void) {\n    vec2 texcoord = tex_coord ;\n    out_color = vec4(1, 1, 1, 1) - texture(tex,texcoord);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/texture.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D tex;\nlayout(location= 0) out vec4 out_color;\n\nin vec2 tex_coord;\n\nvoid main(void) {\n    vec2 texcoord = tex_coord ;\n    out_color = texture(tex,texcoord);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/texture.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n#define VERTICAL_FLIP (0)\n\nlayout(location = 0) in vec2 in_vertex;\nlayout(location = 1) in vec2 in_texcoord;\n\n\nout vec2 tex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex, 0.0, 1.0);\n\ttex_coord.x = in_texcoord.x;\n\tif (VERTICAL_FLIP==1) {\n\t\ttex_coord.y = 1.0 - in_texcoord.y;\n\t}\n\telse {\n\t\ttex_coord.y = in_texcoord.y;\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/textured_mesh.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform sampler2D tex;\n\nout vec4 out_color;\n\nin vec2 vertUV;\n\nvoid main(void) {\n\tvec2 uv = vertUV;\n\tif(uv.x==0.0 && uv.y==0.0){\n\tout_color = vec4(1.0,1.0,1.0,1.0);\n\t}\n\telse{\n\tuv.y = 1.0 - uv.y; /// \\todo TODO: Why Texture are flipped in y ?\n\tout_color = texture(tex, uv);\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/textured_mesh.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 2) in vec2 in_uv;\n\nout vec2 vertUV;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\t\n\tvertUV = in_uv;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/shaders/textured_mesh_flipY.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 2) in vec2 in_uv;\n\nout vec2 vertUV;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\tvec2 uv = in_uv;\n\tuv.y = 1.0 - uv.y ;\n\tvertUV = uv;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/renderer/sibr_renderer.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n\t\\defgroup sibr_renderer sibr_renderer\n\n\t\\brief Renderer utilities.\n\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/BasicIBRScene.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"BasicIBRScene.hpp\"\n#include <iostream>\n#include <string>\n\n#include \"core/scene/CalibratedCameras.hpp\"\n#include \"core/scene/ParseData.hpp\"\n#include \"core/scene/ProxyMesh.hpp\"\n#include \"core/scene/InputImages.hpp\"\n\nnamespace sibr\n{\n\t\n\tBasicIBRScene::BasicIBRScene() {\n\t\t_data.reset(new ParseData());\n\t\t_cams.reset(new CalibratedCameras());\n\t\t_imgs.reset(new InputImages());\n\t\t_proxies.reset(new ProxyMesh());\n\t\t_renderTargets.reset(new RenderTargetTextures());\n\t}\n\n\tBasicIBRScene::BasicIBRScene(const BasicIBRAppArgs & myArgs, bool noRTs, bool noMesh)\n\t{\n\n\t\tBasicIBRScene();\n\t\t// parse metadata file\n\t\t_data.reset(new ParseData());\n\t\t_currentOpts.renderTargets = !noRTs;\n\t\t_currentOpts.mesh = !noMesh;\n\n\t\t_data->getParsedData(myArgs);\n\t\tstd::cout << \"Number of input Images to read: \" << _data->imgInfos().size() << std::endl;\n\n\t\tif (_data->imgInfos().size() != _data->numCameras())\n\t\t\tSIBR_ERR << \"List Image file size do not match number of input cameras in Bundle file!\" << std::endl;\n\n\t\tif (_data->datasetType() != IParseData::Type::EMPTY) {\n\t\t\tcreateFromData(myArgs.texture_width);\n\t\t}\n\t}\n\n\tBasicIBRScene::BasicIBRScene(const BasicIBRAppArgs& myArgs, SceneOptions myOpts)\n\t{\n\t\tBasicIBRScene();\n\t\t_currentOpts = myOpts;\n\n\t\t// parse metadata file\n\t\t_data.reset(new ParseData());\n\n\n\t\t_data->getParsedData(myArgs);\n\t\tstd::cout << \"Number of input Images to read: \" << _data->imgInfos().size() << std::endl;\n\n\t\tif (_data->imgInfos().size() != _data->numCameras())\n\t\t\tSIBR_ERR << \"List Image file size do not match number of input cameras in Bundle file!\" << std::endl;\n\n\t\tif (_data->datasetType() != IParseData::Type::EMPTY) {\n\t\t\tcreateFromData(myArgs.texture_width);\n\t\t}\n\t}\n\n\tvoid BasicIBRScene::createFromCustomData(const IParseData::Ptr & data, const uint width, BasicIBRScene::SceneOptions myOpts)\n\t{\n\t\t_data = data;\n\t\t_currentOpts = myOpts;\n\t\tcreateFromData(width);\n\t}\n\n\n\tvoid BasicIBRScene::createRenderTargets()\n\t{\n\t\t_renderTargets->initializeDefaultRenderTargets(_cams, _imgs, _proxies);\n\t}\n\n\tBasicIBRScene::BasicIBRScene(BasicIBRScene & scene)\n\t{\n\t\t_data = scene.data();\n\t\t_cams = scene.cameras();\n\t\t_imgs = scene.images();\n\t\t_proxies = scene.proxies();\n\t\t_renderTargets = scene.renderTargets();\n\t}\n\n\tvoid BasicIBRScene::createFromData(const uint width)\n\t{\n\t\t_cams.reset(new CalibratedCameras());\n\t\t_imgs.reset(new InputImages());\n\t\t_proxies.reset(new ProxyMesh());\n\n\t\t// setup calibrated cameras\n\t\tif (_currentOpts.cameras) {\n\t\t\t\n\t\t\t_cams->setupFromData(_data);\n\n\t\t\tstd::cout << \"Number of Cameras set up: \" << _cams->inputCameras().size() << std::endl;\n\t\t}\n\n\t\t// load input images\n\n\t\tuint mwidth = width;\n\t\tif (_currentOpts.images) {\n\t\t\t_imgs->loadFromData(_data);\n\t\t\tstd::cout << \"Number of Images loaded: \" << _imgs->inputImages().size() << std::endl;\n\n\t\t\tif (width == 0) {// default\n\t\t\t\tif (_imgs->inputImages()[0]->w() > 1920) {\n\t\t\t\t\tSIBR_LOG << \"Limiting width to 1920 for performance; use --texture-width to override\" << std::endl;\n\t\t\t\t\tmwidth = 1920;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_renderTargets.reset(new RenderTargetTextures(mwidth));\n\n\t\tif (_currentOpts.mesh) {\n\t\t\t// load proxy\n\t\t\t_proxies->loadFromData(_data);\n\n\n\t\t\tstd::vector<InputCamera::Ptr> inCams = _cams->inputCameras();\n\t\t\tfloat eps = 0.1f;\n\t\t\tif (inCams.size() > 0 && (abs(inCams[0]->znear() - 0.1) < eps || abs(inCams[0]->zfar() - 1000.0) < eps || abs(inCams[0]->zfar() - 100.0) < eps) && _proxies->proxy().triangles().size() > 0) {\n\t\t\t\tstd::vector<sibr::Vector2f>    nearsFars;\n\t\t\t\tCameraRaycaster::computeClippingPlanes(_proxies->proxy(), inCams, nearsFars);\n\t\t\t\t_cams->updateNearsFars(nearsFars);\n\t\t\t}\n\n\t\t\t//// Load the texture.\n\t\t\tsibr::ImageRGB inputTextureImg;\n\n\t\t\tstd::string texturePath, textureImageFileName;\n\n\t\t\t// Assumes that the texture is stored next to the mesh in the same directory\n\t\t\t// This information comes from Assimp and the mtl file if available\n\t\t\tif ((textureImageFileName = _proxies->proxy().getTextureImageFileName()) != \"\") {\n\t\t\t\ttexturePath = sibr::parentDirectory(_data->meshPath()) + \"/\" + textureImageFileName;\n\t\t\t\t// check if full path given \n\t\t\t\tif (!sibr::fileExists(texturePath) && sibr::fileExists(textureImageFileName)) \n\t\t\t\t\ttexturePath = textureImageFileName;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttexturePath = sibr::parentDirectory(_data->meshPath()) + \"/mesh_u1_v1.png\";\n\t\t\t\tif (sibr::fileExists(texturePath)) {\n\t\t\t\t\ttexturePath = sibr::parentDirectory(_data->meshPath()) + \"/textured_u1_v1.png\";\n\t\t\t\t\tif (!sibr::fileExists(texturePath)) \n\t\t\t\t\t\ttexturePath = sibr::parentDirectory(_data->meshPath()) + \"/texture.png\";\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (_currentOpts.texture && sibr::fileExists(texturePath)) {\n\t\t\t\tinputTextureImg.load(texturePath);\n\t\t\t\t_inputMeshTexture.reset(new sibr::Texture2DRGB(inputTextureImg, SIBR_GPU_LINEAR_SAMPLING));\n\t\t\t}\n\n\t\t}\n\n\t\tif (_currentOpts.renderTargets) {\n\t\t\tcreateRenderTargets();\n\t\t}\n\t}\n\t\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/BasicIBRScene.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <core/scene/IIBRScene.hpp>\n\nnamespace sibr {\n\n\t/**\n\t* Class used to define a basic IBR Scene \n\t* containing multiple components required to define a scene.\n\t* \n\t* \\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT BasicIBRScene: public IIBRScene\n\t{\n\t\t\n\tpublic:\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::BasicIBRScene.\n\t\t*/\n\t\tSIBR_CLASS_PTR(BasicIBRScene);\n\n\t\t/**\n\t\t * \\brief Default constructor to create a BasicIBRScene.\n\t\t */\n\t\tBasicIBRScene();\n\n\t\t/**\n\t\t * \\brief Constructor to create a BasicIBRScene given command line arguments.\n\t\t * The scene may be created using either dataset path, or explicitly specifying individual componenets.\n\t\t * \\param myArgs to provide all command line arguments containing path to specific components.\n\t\t * \\param noRTs to specify whether to initialize render target textures or not.\n\t\t * \\param noMesh skip loading the mesh\n\t\t */\n\t\tBasicIBRScene(const BasicIBRAppArgs & myArgs, bool noRTs, bool noMesh = false);\n\n\t\t/**\n\t\t * \\brief Constructor to create a BasicIBRScene given command line arguments.\n\t\t * The scene may be created using either dataset path, or explicitly specifying individual componenets.\n\t\t * \\param myArgs to provide all command line arguments containing path to specific components.\n\t\t * \\param myOpts to specify initialization paramters for the scene.\n\t\t */\n\t\tBasicIBRScene(const BasicIBRAppArgs& myArgs, SceneOptions myOpts = SceneOptions());\n\n\n\t\t/** Destructor. */\n\t\t~BasicIBRScene() {};\n\n\t\t/**\n\t\t* \\brief Creates a BasicIBRScene given custom data argument.\n\t\t* The scene will be created using the custom data (cameras/images/proxies/textures etc.) provided.\n\t\t* \\param data to provide data instance holding customized components.\n\t\t* \\param width the constrained width for GPU texture data.\n\t\t* \\param myOpts to specify whether to initialize specific parts of the scene (RTs, geometry,...)\n\t\t*/\n\t\tvoid createFromCustomData(const IParseData::Ptr & data, const uint width = 0, SceneOptions myOpts = SceneOptions()) override;\n\t\t\n\t\t/**\n\t\t * \\brief Function to create a scene directly using the dataset path specified in command-line.\n\t\t */\n\t\tvoid createFromDatasetPath() {};\n\n\t\t/**\n\t\t* \\brief Function to generate render targets using the _data (regarding cameras, images, proxies ) parsed from metadata file.\n\t\t*/\n\t\tvoid createRenderTargets() override;\n\t\t\n\t\t\t\t/**\n\t\t * \\brief Getter for the pointer holding the data related to the scene.\n\t\t * \n\t\t */\n\t\tconst IParseData::Ptr\t\t\t\t\t\tdata(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the pointer holding the data related to the scene for scene creation.\n\t\t* \\param data the setup data\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\tdata(const sibr::IParseData::Ptr & data) override;\n\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding cameras related to each input iamge of the scene.\n\t\t *\n\t\t */\n\t\tconst ICalibratedCameras::Ptr\t\t\t\tcameras(void) const override;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the input images to the scene.\n\t\t *\n\t\t */\n\t\tconst IInputImages::Ptr\t\t\t\t\t\timages(void) const override;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the proxies required by the scene.\n\t\t *\n\t\t */\n\t\tconst IProxyMesh::Ptr\t\t\t\t\t\tproxies(void) const override;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the render targets textures related to the scene.\n\t\t *\n\t\t */\n\t\tconst RenderTargetTextures::Ptr\t&\t\trenderTargets(void) const override;\n\t\t\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the render targets textures related to the scene.\n\t\t *\n\t\t */\n\t\tRenderTargetTextures::Ptr &\t\t\t\trenderTargets(void) override;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the mesh textures related to the mesh loaded for the scene.\n\t\t *\n\t\t */\n\t\tTexture2DRGB::Ptr &\t\t\t\t\t\tinputMeshTextures(void) override;\n\n\tprotected:\n\t\tBasicIBRScene(BasicIBRScene & scene);\n\t\tBasicIBRScene& operator =(const BasicIBRScene&) = delete;\n\n\t\tIParseData::Ptr\t\t\t\t_data;\n\t\tICalibratedCameras::Ptr\t\t_cams;\n\t\tIInputImages::Ptr\t\t\t_imgs;\n\t\tIProxyMesh::Ptr\t\t\t\t_proxies;\n\t\tTexture2DRGB::Ptr\t\t\t_inputMeshTexture;\n\t\tRenderTargetTextures::Ptr\t_renderTargets;\n\t\tSceneOptions\t\t\t\t_currentOpts;\n\n\t\t/**\n\t\t* \\brief Creates a BasicIBRScene from the internal stored data component in the scene.\n\t\t* The data could be populated either from dataset path or customized by the user externally.\n\t\t* \\param width the constrained width for GPU texture data.\n\t\t*/\n\t\tvoid createFromData(const uint width = 0);\n\n\t\t\n\t};\n\n\t///// INLINE DEFINITIONS /////\n\n\tinline const IParseData::Ptr\t\t\tBasicIBRScene::data(void) const\n\t{\n\t\treturn _data;\n\t}\n\n\tinline void BasicIBRScene::data(const IParseData::Ptr & data) \n\t{\n\t\t_data = data;\n\t}\n\n\tinline const ICalibratedCameras::Ptr BasicIBRScene::cameras(void) const\n\t{\n\t\treturn _cams;\n\t}\n\n\tinline const IInputImages::Ptr BasicIBRScene::images(void) const\n\t{\n\t\treturn _imgs;\n\t}\n\n\tinline const IProxyMesh::Ptr BasicIBRScene::proxies(void) const\n\t{\n\t\treturn _proxies;\n\t}\n\n\tinline const RenderTargetTextures::Ptr & BasicIBRScene::renderTargets(void) const\n\t{\n\t\treturn _renderTargets;\n\t}\n\n\tinline RenderTargetTextures::Ptr & BasicIBRScene::renderTargets(void)\n\t{\n\t\treturn _renderTargets;\n\t}\n\n\tinline Texture2DRGB::Ptr & BasicIBRScene::inputMeshTextures(void)\n\t{\n\t\treturn _inputMeshTexture;\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nproject(sibr_scene)\r\n\r\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\r\nsource_group(\"Source Files\" FILES ${SOURCES})\r\n\r\n\r\n## Specify target rules\r\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\r\n\r\ninclude_directories(${Boost_INCLUDE_DIRS})\r\ntarget_link_libraries(${PROJECT_NAME}\r\n    ${Boost_LIBRARIES}\r\n    ${ASSIMP_LIBRARIES}\r\n    ${GLEW_LIBRARIES}\r\n    ${OPENGL_LIBRARIES}\r\n    ${OpenCV_LIBRARIES}\r\n\tOpenMP::OpenMP_CXX\r\n    sibr_assets\r\n    sibr_graphics\r\n    sibr_raycaster\r\n)\r\n\r\nadd_definitions( -DSIBR_SCENE_EXPORTS -DBOOST_ALL_DYN_LINK  )\r\n\r\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\r\n\r\n## High level macro to install in an homogen way all our ibr targets\r\ninclude(install_runtime)\r\nibr_install_target(${PROJECT_NAME}\r\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\r\n)\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/CalibratedCameras.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"CalibratedCameras.hpp\"\n\nnamespace sibr {\n\tvoid CalibratedCameras::setupFromData(const sibr::IParseData::Ptr& data)\n\t{\n\n\n\t\t_inputCameras.resize(data->numCameras());\n\t\t_inputCameras = data->cameras();\n\t\treturn;\n\t}\n\n\tvoid CalibratedCameras::debugFlagCameraAsUsed(const std::vector<uint>& selectedCameras)\n\t{\n\t\t// Used for Debugging -- Display colored cameras in TopView\n\t\tstd::vector<bool> cameraUsed(inputCameras().size(), false);\n\t\tfor (uint usedID : selectedCameras)\n\t\t\tcameraUsed[usedID] = true;\n\t\tusedCameraForRendering(cameraUsed);\n\n\t}\n\n\tconst void CalibratedCameras::updateNearsFars(std::vector<Vector2f> & nearsFars) \n\t{\n\t\tif (_inputCameras.size() != nearsFars.size())\n\t\t\tSIBR_ERR << \"InputCamera size does not match Clipping Planes size!\" << std::endl;\n\n\t\tfor (int c = 0; c < _inputCameras.size(); c++){\n\t\t\t_inputCameras[c]->znear(nearsFars[c].x());\n\t\t\t_inputCameras[c]->zfar(nearsFars[c].y());\n\t\t}\n\t}\n\n\t\n\n\t\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/CalibratedCameras.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n# include \"core/scene/ICalibratedCameras.hpp\"\n#include \"core/scene/Config.hpp\"\n\nnamespace sibr\n{\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT CalibratedCameras : public ICalibratedCameras {\n\tpublic:\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::CalibratedCameras.\n\t\t*/\n\t\ttypedef std::shared_ptr<CalibratedCameras>\tPtr;\n\n\t\t// load from a path on disk in a predefined format (or could detect from file extension)\n\n\t\t/**\n\t\t* \\brief Creates the calibrated cameras for a scene given data parsed from dataset path.\n\t\t* \n\t\t* \\param data Holds all information required to created a set of calibrated cameras\n\t\t*/\n\t\tvoid\tsetupFromData(const IParseData::Ptr & data) override;\n\n\t\t/**\n\t\t* \\brief Assigns the calibrated cameras for a scene to a list of cameras passed as parameter.\n\t\t*\n\t\t* \\param cams Vector of type sibr::InputCamera to which the scene inputCameras will be set\n\t\t*/\n\t\tvoid\tsetupCamerasFromExisting(const std::vector<InputCamera::Ptr> & cams) override;\n\t\t\n\t\t/**\n\t\t* \\brief Function to set a camera as active.\n\t\t* \n\t\t* \\param camId Integer ID of the camera to be set active\n\t\t*/\n\t\tvoid\tactivateCamera(uint camId) override;\n\n\t\t/**\n\t\t* \\brief Function to set a camera as inactive.\n\t\t*\n\t\t* \\param camId Integer ID of the camera to be set inactive\n\t\t*/\n\t\tvoid\tdeactivateCamera(uint camId) override;\n\n\t\t/**\n\t\t* \\brief Function to mark the cameras used for rendering.\n\t\t* Generally used for debugging purposes\n\t\t* \\param selectedCameras list of camera IDs that are used for rendering\n\t\t*/\n\t\tvoid\tdebugFlagCameraAsUsed(const std::vector<uint>& selectedCameras) override;\n\n\t\t/**\n\t\t* \\brief Function to check if the camera is used for rendering.\n\t\t*\n\t\t* \\param camId Integer ID of the cameras to be checked if it is being used for rendering\n\t\t* \\return true if used for rendering\n\t\t*/\n\t\tbool\tisCameraUsedForRendering(size_t camId) const override;\n\t\t\n\t\t/**\n\t\t* \\brief Function to set the cameras used for rendering.\n\t\t*\n\t\t* \\param usedCamera Vector to specify which cameras are used for rendering \n\t\t*/\n\t\tvoid\tusedCameraForRendering(const std::vector<bool> usedCamera) override;\n\n\t\t/**\n\t\t* \\brief Getter to the vector of input cameras used to create the scene\n\t\t*\n\t\t*/\n\t\tconst std::vector<InputCamera::Ptr>& inputCameras(void) const override;\n\n\t\tconst void updateNearsFars(std::vector<sibr::Vector2f> & nearsFars) override;\n\n\tprotected:\n\t\tstd::vector<InputCamera::Ptr>\t\t\t\t_inputCameras; \n\t\tstd::vector<bool>\t\t\t\t\t\t\t_usedCameraFlag;\n\n\t};\n\t\n\t///// INLINE DEFINITIONS /////\n\n\tinline void CalibratedCameras::setupCamerasFromExisting(const std::vector<InputCamera::Ptr>& cams)\n\t{\n\t\t_inputCameras = cams;\n\t}\n\n\tinline const std::vector<InputCamera::Ptr>& CalibratedCameras::inputCameras( void ) const {\n\t\treturn _inputCameras;\n\t}\n\n\tinline void CalibratedCameras::activateCamera(uint camId)\n\t{\n\t\t_inputCameras[camId]->setActive(true);\n\t}\n\n\tinline void CalibratedCameras::deactivateCamera(uint camId)\n\t{\n\t\t_inputCameras[camId]->setActive(false);\n\t}\n\n\tinline bool CalibratedCameras::isCameraUsedForRendering(size_t camId) const\n\t{\n\t\treturn (_usedCameraFlag.empty()) ? false : _usedCameraFlag[camId];\n\t}\n\n\tinline void CalibratedCameras::usedCameraForRendering(const std::vector<bool> usedCamera)\n\t{\n\t\t_usedCameraFlag = usedCamera;\n\t}\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/Config.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n# include <iomanip>\r\n\r\n\r\n#ifdef SIBR_OS_WINDOWS\r\n//// Export Macro (used for creating DLLs) ////\r\n# ifdef SIBR_STATIC_DEFINE\r\n#   define SIBR_EXPORT\r\n#   define SIBR_NO_EXPORT\r\n# else\r\n#   ifndef SIBR_SCENE_EXPORT\r\n#     ifdef SIBR_SCENE_EXPORTS\r\n         /* We are building this library */\r\n#       define SIBR_SCENE_EXPORT __declspec(dllexport)\r\n#     else\r\n         /* We are using this library */\r\n#       define SIBR_SCENE_EXPORT __declspec(dllimport)\r\n#     endif\r\n#   endif\r\n#   ifndef SIBR_NO_EXPORT\r\n#     define SIBR_NO_EXPORT\r\n#   endif\r\n# endif\r\n# else\r\n#  define SIBR_SCENE_EXPORT\r\n# endif\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/ICalibratedCameras.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n# include \"core/scene/IParseData.hpp\"\n#include \"core/scene/Config.hpp\"\n\nnamespace sibr\n{\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT ICalibratedCameras {\n\tpublic:\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::CalibratedCameras.\n\t\t*/\n\t\ttypedef std::shared_ptr<ICalibratedCameras>\tPtr;\n\n\t\t// load from a path on disk in a predefined format (or could detect from file extension)\n\n\t\t/**\n\t\t* \\brief Creates the calibrated cameras for a scene given data parsed from dataset path.\n\t\t* \n\t\t* \\param data Holds all information required to created a set of calibrated cameras\n\t\t*/\n\t\tvirtual void\tsetupFromData(const IParseData::Ptr & data) = 0;\n\n\t\t/**\n\t\t* \\brief Assigns the calibrated cameras for a scene to a list of cameras passed as parameter.\n\t\t*\n\t\t* \\param cams Vector of type sibr::InputCamera to which the scene inputCameras will be set\n\t\t*/\n\t\tvirtual void\tsetupCamerasFromExisting(const std::vector<InputCamera::Ptr> & cams) = 0;\n\t\t\n\t\t/**\n\t\t* \\brief Function to set a camera as active.\n\t\t* \n\t\t* \\param camId Integer ID of the camera to be set active\n\t\t*/\n\t\tvirtual void\tactivateCamera(uint camId) = 0;\n\n\t\t/**\n\t\t* \\brief Function to set a camera as inactive.\n\t\t*\n\t\t* \\param camId Integer ID of the camera to be set inactive\n\t\t*/\n\t\tvirtual void\tdeactivateCamera(uint camId) = 0;\n\n\t\t/**\n\t\t* \\brief Function to mark the cameras used for rendering.\n\t\t* Generally used for debugging purposes\n\t\t* \\param selectedCameras list of camera IDs that are used for rendering\n\t\t*/\n\t\tvirtual void\tdebugFlagCameraAsUsed(const std::vector<uint>& selectedCameras) = 0;\n\n\t\t/**\n\t\t* \\brief Function to check if the camera is used for rendering.\n\t\t*\n\t\t* \\param camId Integer ID of the cameras to be checked if it is being used for rendering\n\t\t* \\return true if used for rendering\n\t\t*/\n\t\tvirtual bool\tisCameraUsedForRendering(size_t camId) const = 0;\n\t\t\n\t\t/**\n\t\t* \\brief Function to set the cameras used for rendering.\n\t\t*\n\t\t* \\param usedCamera Vector to specify which cameras are used for rendering \n\t\t*/\n\t\tvirtual void\tusedCameraForRendering(const std::vector<bool> usedCamera) = 0;\n\n\t\t/**\n\t\t* \\brief Getter to the vector of input cameras used to create the scene\n\t\t*\n\t\t*/\n\t\tvirtual const std::vector<InputCamera::Ptr>&\t\t\t\tinputCameras(void) const = 0;\n\n\n\t\tvirtual const void\t\t\t\t\t\t\tupdateNearsFars(std::vector<sibr::Vector2f> & nearsFars) = 0;\n\n\t};\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/IIBRScene.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <core/system/CommandLineArgs.hpp>\n#include \"core/raycaster/CameraRaycaster.hpp\"\n#include \"core/scene/ICalibratedCameras.hpp\"\n#include \"core/scene/IParseData.hpp\"\n#include \"core/scene/IProxyMesh.hpp\"\n#include \"core/scene/IInputImages.hpp\"\n#include \"core/scene/RenderTargetTextures.hpp\"\n#include \"core/scene/Config.hpp\"\n#include \"core/system/String.hpp\"\n\nnamespace sibr {\n\n\t/**\n\t* Interface used to define how an IBR Scene is shaped\n\t* containing multiple components required to define a scene.\n\t*\n\t* Members:\n\t* - ICalibratedCameras\n\t* - IInputImages\n\t* - IProxyMesh\n\t* - RenderTargetTextures\n\t* \n\t* \\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT IIBRScene\n\t{\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::IIBRScene.\n\t\t*/\n\t\tSIBR_CLASS_PTR(IIBRScene);\n\t\t\n\tpublic:\n\t\t/** Scene initialization infos. */\n\t\tstruct SceneOptions\n\t\t{\n\t\t\tbool\t\trenderTargets = true; ///< Load rendertargets?\n\t\t\tbool\t\tmesh = true; ///< Load mesh?\n\t\t\tbool\t\timages = true; ///< Load images?\n\t\t\tbool\t\tcameras = true; ///< Load cameras?\n\t\t\tbool        texture = true; ///< Load texture ?\n\n\t\t\tSceneOptions() {}\n\t\t};\n\n\t\t/**\n\t\t* \\brief Creates a BasicIBRScene given custom data argument.\n\t\t* The scene will be created using the custom data (cameras/images/proxies/textures etc.) provided.\n\t\t* \\param data to provide data instance holding customized components.\n\t\t* \\param width the constrained width for GPU texture data.\n\t\t* \\param myOpts to specify whether to initialize specific parts of the scene (RTs, geometry,...)\n\t\t*/\n\t\tvirtual void createFromCustomData(const IParseData::Ptr & data, const uint width = 0, SceneOptions myOpts = SceneOptions()) = 0;\n\t\t\n\t\t/**\n\t\t * \\brief Function to create a scene directly using the dataset path specified in command-line.\n\t\t */\n\t\tvirtual void\tcreateFromDatasetPath() = 0;\n\n\t\t/**\n\t\t* \\brief Function to generate render targets using the _data (regarding cameras, images, proxies ) parsed from metadata file.\n\t\t*/\n\t\tvirtual void\tcreateRenderTargets() = 0;\n\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the data related to the scene.\n\t\t * \n\t\t */\n\t\tvirtual const IParseData::Ptr\t\t\t\t\t\tdata(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the pointer holding the data related to the scene for scene creation.\n\t\t* \\param data the setup data\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tdata(const sibr::IParseData::Ptr & data) = 0;\n\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding cameras related to each input iamge of the scene.\n\t\t *\n\t\t */\n\t\tvirtual const ICalibratedCameras::Ptr\t\t\t\tcameras(void) const = 0;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the input images to the scene.\n\t\t *\n\t\t */\n\t\tvirtual const IInputImages::Ptr\t\t\t\t\t\timages(void) const = 0;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the proxies required by the scene.\n\t\t *\n\t\t */\n\t\tvirtual const IProxyMesh::Ptr\t\t\t\t\t\tproxies(void) const = 0;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the render targets textures related to the scene.\n\t\t *\n\t\t */\n\t\tvirtual const RenderTargetTextures::Ptr\t&\t\t\trenderTargets(void) const = 0;\n\t\t\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the render targets textures related to the scene.\n\t\t *\n\t\t */\n\t\tvirtual RenderTargetTextures::Ptr &\t\t\t\t\trenderTargets(void) = 0;\n\n\t\t/**\n\t\t * \\brief Getter for the pointer holding the mesh textures related to the mesh loaded for the scene.\n\t\t *\n\t\t */\n\t\tvirtual Texture2DRGB::Ptr &\t\t\t\t\t\t\tinputMeshTextures(void) = 0;\n\t\t\n\t};\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/IInputImages.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/scene/Config.hpp\"\n#include \"core/scene/IParseData.hpp\"\n\nnamespace sibr\n{\n\t/** \n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT IInputImages {\n\t\tSIBR_DISALLOW_COPY(IInputImages);\n\tpublic:\n\n\n\t\ttypedef std::shared_ptr<IInputImages>\t\t\t\tPtr;\n\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tloadFromData(const IParseData::Ptr & data) = 0;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tloadFromExisting(const std::vector<sibr::ImageRGB::Ptr> & imgs) = 0;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tloadFromExisting(const std::vector<sibr::ImageRGB> & imgs) = 0;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tloadFromPath(const IParseData::Ptr & data, const std::string & prefix, const std::string & postfix) = 0;\n\n\t\t// Alpha blend and modify input images -- for fences\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\talphaBlendInputImages(const std::vector<sibr::ImageRGB>& back, std::vector<sibr::ImageRGB>& alphas) = 0;\n\n\t\tvirtual const std::vector<sibr::ImageRGB::Ptr>&\t\tinputImages(void) const = 0;\n\t\tvirtual const\tsibr::ImageRGB& \t\t\t\t\t\timage(uint i) = 0;\n\n\tprotected:\n\t\tIInputImages() {};\n\n\t};\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/IParseData.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n#include \"picojson/picojson.hpp\"\n#include \"core/scene/Config.hpp\"\n#include \"core/system/CommandLineArgs.hpp\"\n#\n#include \"core/system/Matrix.hpp\"\n#include \"core/assets/ImageListFile.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n\n\n#include <iostream>\n#include <vector>\n#include <string>\n\n\nnamespace sibr{\n\n\t/**\n\t* Interface used to store the data required for defining an IBR Scene\n\t* \n\t*\n\t* Members:\n\t* - _basePathName: Base dataset directory path.\n\t* - _camInfos: Vector of sibr::InputCamera holding all data attached with the scene cameras.\n\t* - _meshPath: Filepath of the mesh associated to the scene.\n\t* - _imgInfos: Vector of sibr::ImageListFile::Infos holding filename, width, height, and id of the input images.\n\t* - _imgPath: Path to the calibrated images directory.\n\t* - _activeImages: Vector of bools storing active state of the camera.\n\t* - _numCameras: Number of cameras associated with the dataset\n\t* - _datasetType: Type if dataset being used. Currently supported: COLMAP, SIBR_BUNDLER, NVM, MESHROOM\n\t*\n\t* \\ingroup sibr_scene\n\t*/\n\n\tclass SIBR_SCENE_EXPORT IParseData {\n\t\t\n\tpublic:\n\n\t\t/**\n\t\t * \\brief Denotes the type of dataset represented by a IParseData object.\n\t\t* \\ingroup sibr_scene\n\t\t*/\n\t\tenum class Type {\n\t\t\tEMPTY, GAUSSIAN, BLENDER, SIBR, COLMAP_CAPREAL, COLMAP, COLMAP2, NVM, MESHROOM, CHUNKED, EXTERNAL\n\t\t};\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::IParseData.\n\t\t*/\n\t\ttypedef std::shared_ptr<IParseData>\t\t\t\tPtr;\n\n\t\t/**\n\t\t* \\brief Function to parse data from a dataset path. Will automatically determine the type of dataset based on the files present.\n\t\t* \\param myArgs Arguments containing the dataset path and other infos\n\t\t* \\param customPath additional data path\n\t\t*/\n\t\tvirtual void  getParsedData(const BasicIBRAppArgs & myArgs, const std::string & customPath = \"\") = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the information regarding the input images.\n\t\t*\n\t\t*/\n\t\tvirtual const std::vector<sibr::ImageListFile::Infos>&\timgInfos(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the information regarding the input images.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\timgInfos(std::vector<sibr::ImageListFile::Infos>& infos) = 0;\n\n\t\t/**\n\t\t* \\brief Getter to the number of cameras defined in the bundle file.\n\t\t*\n\t\t*/\n\t\tvirtual const int\t\t\t\t\t\t\t\t\t\tnumCameras(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter to the number of cameras defined in the bundle file.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tnumCameras(int numCams) = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the list of active cameras/images.\n\t\t*\n\t\t*/\n\t\tvirtual const std::vector<bool>&\t\t\t\t\t\tactiveImages(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the list of active cameras/images.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tactiveImages(std::vector<bool>& activeCams) = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the base path name where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvirtual const std::string&\t\t\t\t\t\t\t\tbasePathName(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the base path name where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tbasePathName(std::string & path)  = 0;\n\t\t\n\t\t/**\n\t\t* \\brief Getter for the mesh path where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvirtual const std::string&\t\t\t\t\t\t\t\tmeshPath(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the mesh path where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tmeshPath(std::string & path)  = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the dataset type.\n\t\t*\n\t\t*/\n\t\tvirtual const IParseData::Type&\t\t\t\t\t\t\tdatasetType(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the dataset type.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tdatasetType(IParseData::Type dataType) = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the camera infos.\n\t\t*\n\t\t*/\n\t\tvirtual const std::vector<InputCamera::Ptr>\tcameras(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the camera infos.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\tcameras(std::vector<InputCamera::Ptr>& cams) = 0;\n\n\t\t/**\n\t\t* \\brief Getter for the image path.\n\t\t*\n\t\t*/\n\t\tvirtual const std::string\t\t\t\t\t\t\t\timgPath(void) const = 0;\n\n\t\t/**\n\t\t* \\brief Setter for the image path.\n\t\t*\n\t\t*/\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\timgPath(std::string& imPath) = 0;\n\t\t\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/IProxyMesh.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/scene/Config.hpp\"\n#include \"core/scene/IParseData.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n\nnamespace sibr {\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT IProxyMesh {\n\t\tSIBR_DISALLOW_COPY(IProxyMesh);\n\tpublic:\n\t\ttypedef std::shared_ptr<IProxyMesh>\t\t\t\t\tPtr;\n\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\t\tloadFromData(const IParseData::Ptr & data) = 0;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\t\treplaceProxy(Mesh::Ptr newProxy) = 0;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\t\t\treplaceProxyPtr(Mesh::Ptr newProxy) = 0;\n\t\tvirtual bool\t\t\t\t\t\t\t\t\t\t\t\thasProxy(void) const = 0;\n\t\tvirtual const Mesh&\t\t\t\t\t\t\t\t\t\t\tproxy(void) const = 0;\n\t\tvirtual const Mesh::Ptr\t\t\t\t\t\t\t\t\t\tproxyPtr(void) const = 0;\n\n\tprotected:\n\t\tIProxyMesh() {};\n\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/InputImages.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"InputImages.hpp\"\n\n\nnamespace sibr\n{\n\tvoid InputImages::loadFromData(const IParseData::Ptr & data)\n\t{\n\t\t//InputImages out;\n\t\t_inputImages.resize(data->imgInfos().size());\n\n\t\tif (data->imgInfos().empty() == false)\n\t\t{\n//\t\t\t#pragma omp parallel for\n\t\t\tfor (int i = 0; i < data->imgInfos().size(); ++i) {\n\t\t\t\tif (data->activeImages()[i]) {\n\t\t\t\t\t_inputImages[i] = std::make_shared<ImageRGB>();\n\t\t\t\t\t_inputImages[i]->load(data->imgPath() + \"/\" + data->imgInfos().at(i).filename, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_inputImages[i] = std::make_shared<ImageRGB>(16,16, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t}\n\t\telse\n\t\t\tSIBR_WRG << \"cannot load images (ImageListFile is empty. Did you use ImageListFile::load(...) before ?\";\n\n\t\tstd::cout << std::endl;\n\t\t\n\t\treturn;\n\t}\n\n\tvoid InputImages::loadFromExisting(const std::vector<sibr::ImageRGB> & imgs)\n\t{\n\t\t_inputImages.resize(imgs.size());\n\t\tfor (size_t i = 0; i < imgs.size(); ++i) {\n\t\t\t_inputImages[i].reset(new ImageRGB(imgs[i].clone()));\n\t\t}\n\t}\n\n\t/// \\todo UN-TESTED code!!!!\n\tvoid InputImages::loadFromPath(const IParseData::Ptr & data, const std::string & prefix, const std::string & postfix)\n\t{\n\t\t_inputImages.resize(data->imgInfos().size());\n\n\t\t#pragma omp parallel for\n\t\tfor (int i = 0; i < data->imgInfos().size(); ++i) {\n\t\t\tif (data->activeImages()[i]) {\n\t\t\t\tstd::string imgPath = data->basePathName()+ \"/images/\" + prefix + sibr::imageIdToString(i) + postfix;\n\t\t\t\tif (!_inputImages[i]->load(imgPath, false)) {\n\t\t\t\t\tSIBR_WRG << \"could not load input image : \" << imgPath << std::endl;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\tvoid InputImages::alphaBlendInputImages(const std::vector<sibr::ImageRGB>& back, std::vector<sibr::ImageRGB>& alphas)\n\t{\n\t\tfor (uint i = 0; i< _inputImages.size(); i++) {\n\t\t\t// check size\n\t\t\tif (_inputImages[i]->w() != alphas[i].w() ||\n\t\t\t\t_inputImages[i]->h() != alphas[i].h())\n\t\t\t\talphas[i] = alphas[i].resized(_inputImages[i]->w(), _inputImages[i]->h());\n\t\t\tfor (uint x = 0; x<_inputImages[i]->w(); x++)\n\t\t\t\tfor (uint y = 0; y<_inputImages[i]->h(); y++) {\n\t\t\t\t\tImageRGB::Pixel p = _inputImages[i](x, y);\n\t\t\t\t\tImageRGB::Pixel bp = back[i](x, y);\n\t\t\t\t\tImageRGB::Pixel a = alphas[i](x, y);\n\t\t\t\t\tVector3f alpha(float(a[0] / 255.), float(a[1] / 255.), float(a[2] / 255.));\n\t\t\t\t\tfloat al = alpha[0]; // assume grey for now\n\t\t\t\t\tVector3f val = Vector3f(float(p[0]), float(p[1]), float(p[2]));\n\t\t\t\t\tVector3f bval = Vector3f(float(bp[0]), float(bp[1]), float(bp[2]));\n\t\t\t\t\tVector3f out;\n\t\t\t\t\tif (alpha[0] > 0.4) {\n\t\t\t\t\t\tout = (val - bval + al*bval) / al; // foreground solving for a\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t   // clamp\n#define NZ(x)\t\t((x)<0.f?0.f:x)\n#define UP(x)\t\t((x)>255.f?255.f:x)\n\t\t\t\t\t\tout[0] = UP(NZ(out[0]));\n\t\t\t\t\t\tout[1] = UP(NZ(out[1]));\n\t\t\t\t\t\tout[2] = UP(NZ(out[2]));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tout = Vector3f(0, 0, 0);\n\n\t\t\t\t\t_inputImages[i](x, y) = ImageRGB::Pixel((uint)out[0], (uint)out[1], (uint)out[2]);\n\t\t\t\t}\n\t\t}\n\t}\n}\n\t\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/InputImages.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/scene/IInputImages.hpp\"\n#include \"core/scene/Config.hpp\"\n\nnamespace sibr\n{\n\t/** \n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT InputImages : public IInputImages {\n\t\tSIBR_DISALLOW_COPY(InputImages);\n\tpublic:\n\n\n\t\ttypedef std::shared_ptr<InputImages>\t\t\t\tPtr;\n\n\t\tInputImages(){};\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\tloadFromData(const IParseData::Ptr & data) override;\n\t\tvirtual void\t\t\t\t\t\t\t\t\t\tloadFromExisting(const std::vector<sibr::ImageRGB::Ptr> & imgs) override;\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\tloadFromExisting(const std::vector<sibr::ImageRGB> & imgs) override;\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\tloadFromPath(const IParseData::Ptr & data, const std::string & prefix, const std::string & postfix) override;\n\n\t\t// Alpha blend and modify input images -- for fences\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\talphaBlendInputImages(const std::vector<sibr::ImageRGB>& back, std::vector<sibr::ImageRGB>& alphas) override;\n\n\t\tconst std::vector<sibr::ImageRGB::Ptr>&\t\t\t\tinputImages(void) const override;\n\t\tconst sibr::ImageRGB& \t\t\t\t\t\t\t\timage(uint i) override\t{\treturn *_inputImages[i]; }\n\n\t\t~InputImages(){};\n\n\tprotected:\n\n\t\tstd::vector<sibr::ImageRGB::Ptr>\t\t\t\t\t\t\t_inputImages;\n\n\t};\n\n\tinline void InputImages::loadFromExisting(const std::vector<sibr::ImageRGB::Ptr>& imgs)\n\t{\n\t\t_inputImages = imgs;\n\t}\n\n\tinline const std::vector<sibr::ImageRGB::Ptr>& InputImages::inputImages(void) const {\n\t\treturn _inputImages;\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/ParseData.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"ParseData.hpp\"\n\n#include <fstream>\n#include <sstream>\n#include <algorithm>\n\n#include <boost/algorithm/string/split.hpp>\n#include <boost/algorithm/string/classification.hpp>\n#include <boost/algorithm/string/case_conv.hpp>\n#include <map>\n#include \"core/system/String.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n#include \"core/system/Utils.hpp\"\n#include <algorithm>\n\nusing namespace boost::algorithm;\nnamespace sibr {\n\n\n\tbool ParseData::parseBundlerFile(const std::string & bundler_file_path)\n\t{\n\t\t// check bundler file\n\t\tstd::ifstream bundle_file(bundler_file_path);\n\t\tif (!bundle_file.is_open()) {\n\t\t\tSIBR_ERR << \"Bundler file does not exist at \" + bundler_file_path << std::endl;\n\t\t}\n\n\t\t// read number of images\n\t\tstd::string line;\n\t\tsafeGetline(bundle_file, line);\t// ignore first line - contains version\n\n\t\tbundle_file >> _numCameras;\t// read first value (number of images)\n\t\tsafeGetline(bundle_file, line);\t// ignore the rest of the line\n\n\t\t//_outputCamsMatrix.resize(_numCameras);\n\t\t_camInfos.resize(_numCameras);\n\t\tfor (int i = 0; i < _numCameras; i++) {\n\t\t\tconst sibr::ImageListFile::Infos& infos = _imgInfos[i];\n\n\t\t\t//Matrix4f &m = _outputCamsMatrix[i];\n\t\t\tMatrix4f m;\n\t\t\tbundle_file >> m(0) >> m(1) >> m(2) >> m(3) >> m(4);\n\t\t\tbundle_file >> m(5) >> m(6) >> m(7) >> m(8) >> m(9);\n\t\t\tbundle_file >> m(10) >> m(11) >> m(12) >> m(13) >> m(14);\n\n\t\t\t_camInfos[i] = InputCamera::Ptr(new InputCamera(infos.camId, infos.width, infos.height, m, _activeImages[i]));\n\t\t\t_camInfos[i]->name(infos.filename);\n\t\t\t_camInfos[i]->znear(0.001f);\n\t\t\t_camInfos[i]->zfar(1000.0f);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tvoid ParseData::populateFromCamInfos()\n\t{\n\t\t_numCameras = _camInfos.size();\n\t\t_imgInfos.resize(_numCameras);\n\t\t_activeImages.resize(_numCameras);\n\t\tfor (uint id = 0; id < _numCameras; id++) {\n\t\t\t_imgInfos[id].camId = _camInfos[id]->id();\n\t\t\t_imgInfos[id].filename = _camInfos[id]->name();\n\t\t\t_imgInfos[id].height = _camInfos[id]->h();\n\t\t\t_imgInfos[id].width = _camInfos[id]->w();\n\n\t\t\t_activeImages[id] = _camInfos[id]->isActive();\n\t\t}\n\t}\n\n\tbool ParseData::parseSceneMetadata(const std::string& scene_metadata_path)\n\t{\n\n\t\tstd::string line;\n\t\tstd::vector<std::string> splitS;\n\t\tstd::ifstream scene_metadata(scene_metadata_path);\n\t\tif (!scene_metadata.is_open()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tuint camId = 0;\n\n\t\twhile (safeGetline(scene_metadata, line))\n\n\t\t{\n\t\t\tif (line.compare(\"[list_images]\") == 0 )\n\t\t\t{\n\t\t\t\tsafeGetline(scene_metadata, line);\t// ignore template specification line\n\t\t\t\tImageListFile::Infos infos;\n\t\t\t\tint id;\n\t\t\t\twhile (safeGetline(scene_metadata, line))\n\t\t\t\t{\n//\t\t\t\t\tstd::cerr << line << std::endl;\n\t\t\t\t\tsplit(splitS, line, is_any_of(\" \"));\n//\t\t\t\t\tstd::cerr << splitS.size() << std::endl;\n\t\t\t\t\tif (splitS.size() > 1) {\n\t\t\t\t\t\tinfos.filename = splitS[0];\n\t\t\t\t\t\tinfos.width = stoi(splitS[1]);\n\t\t\t\t\t\tinfos.height = stoi(splitS[2]);\n\t\t\t\t\t\tinfos.camId = camId;\n\n\t\t\t\t\t\t//infos.filename.erase(infos.filename.find_last_of(\".\"), std::string::npos);\n\t\t\t\t\t\tid = atoi(infos.filename.c_str());\n\n\t\t\t\t\t\tInputCamera::Z nearFar(100.0f, 0.1f);\n\n\t\t\t\t\t\tif (splitS.size() > 3) {\n\t\t\t\t\t\t\tnearFar.near = stof(splitS[3]);\n\t\t\t\t\t\t\tnearFar.far = stof(splitS[4]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_imgInfos.push_back(infos);\n\n\t\t\t\t\t\t++camId;\n\t\t\t\t\t\tinfos.filename.clear();\n\t\t\t\t\t\tsplitS.clear();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (line.compare(\"[active_images]\") == 0) {\n\n\t\t\t\tsafeGetline(scene_metadata, line);\t// ignore template specification line\n\n\t\t\t\t_activeImages.resize(_imgInfos.size());\n\n\t\t\t\tfor (int i = 0; i < _imgInfos.size(); i++)\n\t\t\t\t\t_activeImages[i] = false;\n\n\t\t\t\twhile (safeGetline(scene_metadata, line))\n\t\t\t\t{\n\t\t\t\t\tsplit(splitS, line, is_any_of(\" \"));\n\t\t\t\t\t//std::cout << splitS.size() << std::endl;\n\t\t\t\t\tif (splitS.size() >= 1) {\n\t\t\t\t\t\tfor (auto& s : splitS)\n\t\t\t\t\t\t\tif (!s.empty())\n\t\t\t\t\t\t\t\t_activeImages[stoi(s)] = true;\n\t\t\t\t\t\tsplitS.clear();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (line.compare(\"[exclude_images]\") == 0) {\n\n\t\t\t\tsafeGetline(scene_metadata, line);\t// ignore template specification line\n\n\t\t\t\t_activeImages.resize(_imgInfos.size());\n\n\t\t\t\tfor (int i = 0; i < _imgInfos.size(); i++)\n\t\t\t\t\t_activeImages[i] = true;\n\n\t\t\t\twhile (safeGetline(scene_metadata, line))\n\t\t\t\t{\n\t\t\t\t\tsplit(splitS, line, is_any_of(\" \"));\n\t\t\t\t\tif (splitS.size() >= 1) {\n\t\t\t\t\t\tfor (auto& s : splitS)\n\t\t\t\t\t\t\tif (!s.empty())\n\t\t\t\t\t\t\t\t_activeImages[stoi(s)] = false;\n\t\t\t\t\t\tsplitS.clear();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (line == \"[proxy]\") {\n\t\t\t\t// Read the relative path of the mesh to load.\n\t\t\t\tsafeGetline(scene_metadata, line);\n\n\t\t\t\t_meshPath = _basePathName + \"/\" + line;\n\t\t\t}\n\t\t}\n\n\t\tif (_activeImages.empty()) {\n\t\t\t_activeImages.resize(_imgInfos.size());\n\t\t\tfor (int i = 0; i < _imgInfos.size(); i++) {\n\t\t\t\t_activeImages[i] = true;\n\t\t\t}\n\t\t}\n\n\n\n\t\tscene_metadata.close();\n\n\t\treturn true;\n\t}\n\n\tvoid ParseData::getParsedBundlerData(const std::string & dataset_path, const std::string & customPath, const std::string & scene_metadata_filename)\n\t{\n\t\t_basePathName = dataset_path + customPath;\n\t\t/*std::cout << scene_metadata_filename << std::endl;*/\n\t\tif (!parseSceneMetadata(_basePathName + \"/\" + scene_metadata_filename)) {\n\t\t\tSIBR_ERR << \"Scene Metadata file does not exist at /\" + _basePathName + \"/.\" << std::endl;\n\t\t}\n\n\t\tif (!parseBundlerFile(_basePathName + \"/cameras/bundle.out\")) {\n\t\t\tSIBR_ERR << \"Bundle file does not exist at /\" + _basePathName + \"/cameras/.\" << std::endl;\n\t\t}\n\n\t\t_imgPath = _basePathName + \"/images/\";\n\n\t\t// Default mesh path if none found in the metadata file.\n\t\tif (_meshPath.empty()) {\n\t\t\t_meshPath = _basePathName + \"/meshes/recon.obj\";\n\t\t\t_meshPath = (sibr::fileExists(_meshPath)) ? _meshPath : _basePathName + \"/meshes/recon.ply\";\n\t\t}\n\n\t}\n\n\tvoid ParseData::getParsedMeshroomData(const std::string & dataset_path, const std::string & customPath)\n\t{\t\t\n\t\t_basePathName = dataset_path;\n\n\t\tstd::string meshRoomCachePath = sibr::listSubdirectories(_basePathName + \"/StructureFromMotion/\")[0];\n\n\t\t_camInfos = sibr::InputCamera::loadMeshroom(_basePathName + \"/StructureFromMotion/\" + meshRoomCachePath);\n\n\t\tif (_camInfos.empty()) {\n\t\t\tSIBR_ERR << \"Could not load Meshroom sfm file at /\" + _basePathName + \"/StructureFromMotion/\"<< meshRoomCachePath << std::endl;\n\t\t}\n\n\t\t_imgPath = _basePathName + \"/PrepareDenseScene/\" + sibr::listSubdirectories(_basePathName + \"/PrepareDenseScene/\")[0];\n\n\t\tpopulateFromCamInfos();\n\n\t\t_meshPath = _basePathName + \"/Texturing/\" + sibr::listSubdirectories(_basePathName + \"/Texturing/\")[0] + \"/texturedMesh.obj\";\n\t}\n\n\tvoid ParseData::getParsedBlenderData(const std::string& dataset_path)\n\t{\n\t\t_camInfos = InputCamera::loadTransform(dataset_path + \"/transforms_test.json\", 800, 800, \"png\", 0.01f, 1000.0f);\n\t\tauto testInfos = InputCamera::loadTransform(dataset_path + \"/transforms_train.json\", 800, 800, \"png\", 0.01f, 1000.0f, _camInfos.size());\n\t\t_camInfos.insert(_camInfos.end(), testInfos.begin(), testInfos.end());\n\n\t\t_basePathName = dataset_path;\n\n\t\tif (_camInfos.empty()) {\n\t\t\tSIBR_ERR << \"Colmap camera calibration file does not exist at /\" + _basePathName + \"/sparse/.\" << std::endl;\n\t\t}\n\n\t\t_imgPath = dataset_path;\n\n\t\tpopulateFromCamInfos();\n\n\t\t_meshPath = dataset_path;\n\t}\n\n\tvoid ParseData::getParsedGaussianData(const std::string& dataset_path)\n\t{\n\t\t_camInfos = InputCamera::loadJSON(dataset_path + \"/cameras.json\");\n\t\t_meshPath = dataset_path + \"/input.ply\";\n\n\t\t_basePathName = dataset_path;\n\n\t\t_imgPath = \".\";\n\n\t\tpopulateFromCamInfos();\n\n\t\t_meshPath = dataset_path + \"/input.ply\";\n\t}\n\n\tvoid ParseData::getParsedColmap2Data(const std::string& dataset_path, const int fovXfovY_flag, const bool capreal_flag)\n\t{\n\t\t_basePathName = dataset_path + \"/sparse/0/\";\n\n\t\t_camInfos = sibr::InputCamera::loadColmapBin(_basePathName, 0.01f, 1000.0f, fovXfovY_flag);\n\n\t\tif (_camInfos.empty()) {\n\t\t\t_camInfos = sibr::InputCamera::loadColmap(_basePathName, 0.01f, 1000.0f, fovXfovY_flag);\n\t\t}\n\n\t\tif (_camInfos.empty()) {\n\t\t\tSIBR_ERR << \"Colmap camera calibration file does not exist at /\" + _basePathName + \"/sparse/.\" << std::endl;\n\t\t}\n\n\t\t_imgPath = dataset_path + \"/images/\";\n\n\t\tpopulateFromCamInfos();\n\n\t\t_meshPath = dataset_path + \"/sparse/0/points3d.bin\";\n\n\t\tif (!std::ifstream(_meshPath).good())\n\t\t\t_meshPath = dataset_path + \"/sparse/0/points3d.txt\";\n\t}\n\n\tvoid colmapSave(const std::string& filename, const std::vector<InputCamera::Ptr>& xformPath, float scale) {\n\t\t// save as colmap images.txt file\n\t\tsibr::Matrix3f converter;\n\t\tconverter << 1, 0, 0,\n\t\t\t0, -1, 0,\n\t\t\t0, 0, -1;\n\n\t\tstd::ofstream outputColmapPath, outputColmapPathCams;\n\t\tstd::string colmapPathCams = parentDirectory(filename) + std::string(\"/cameras.txt\");\n\n\t\tstd::cerr << std::endl;\n\t\tstd::cerr << std::endl;\n\t\tstd::cerr << \"Writing colmap path to \" << parentDirectory(filename) << std::endl;\n\n\t\toutputColmapPath.open(filename);\n\t\tif (!outputColmapPath.good())\n\t\t\tSIBR_ERR << \"Cant open output file \" << filename << std::endl;\n\t\toutputColmapPathCams.open(colmapPathCams);\n\n\t\toutputColmapPathCams << \"# Camera list with one line of data per camera:\" << std::endl;\n\t\toutputColmapPathCams << \"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\" << std::endl;\n\t\toutputColmapPathCams << \"# Number of cameras: \" << xformPath.size() << std::endl;\n\n\t\tSIBR_WRG << \"No focal x given making it equal to focaly * aspect ratio; use result at own risk. Should have a colmap dataset as input\" << std::endl;\n\n\t\tfor (int i = 0; i < xformPath.size(); i++) {\n\t\t\tfloat focalx = xformPath[i]->focal() * xformPath[i]->aspect(); // use aspect ratio\n\t\t\toutputColmapPathCams << i + 1 << \" PINHOLE \" << xformPath[i]->w() * scale << \" \" << xformPath[i]->h() * scale\n\t\t\t\t<< \" \" << xformPath[i]->focal() * scale << \" \" << focalx * scale\n\t\t\t\t<< \" \" << xformPath[i]->w() * scale * 0.5 << \" \" << xformPath[i]->h() * scale * 0.5 << std::endl;\n\t\t}\n\n\n\t\toutputColmapPath << \"# Image list with two lines of data per image:\" << std::endl;\n\t\toutputColmapPath << \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\" << std::endl;\n\t\toutputColmapPath << \"#   POINTS2D[] as (X, Y, POINT3D_ID)\" << std::endl;\n\t\tfor (int i = 0; i < xformPath.size(); i++) {\n\t\t\tsibr::Matrix3f tmp = xformPath[i]->rotation().toRotationMatrix() * converter;\n\t\t\tsibr::Matrix3f Qinv = tmp.transpose();\n\t\t\tsibr::Quaternionf q = quatFromMatrix(Qinv);\n\t\t\tsibr::Vector3f t = -Qinv * xformPath[i]->position();\n\n\t\t\toutputColmapPath << (i+1) << \" \" << q.w() << \" \" << -q.x() << \" \" << -q.y() << \" \" << -q.z() << \" \" <<\n\t\t\t\tt.x() << \" \" << t.y() << \" \" << t.z() << \" \" << (i+1) << \" \" << xformPath[i]->name() << std::endl;\n\t\t\toutputColmapPath << std::endl; // empty line, no points\n\t\t}\n\t\toutputColmapPath.close();\n\t\toutputColmapPathCams.close();\n\t}\n\n\tvoid ParseData::getParsedChunkedData(const std::string& dataset_path)\n\t{\n\t\t_basePathName = sibr::parentDirectory(sibr::parentDirectory(dataset_path));;\n\n\t\tauto test = sibr::getFileName(dataset_path);\n\t\tstd::replace(test.begin(), test.end(), '_', ' ');\n\t\tstd::stringstream ss(test);\n\t\tint x, y;\n\t\tss >> x >> y;\n\t\tx = 0;\n\t\ty = 0;\n\n\t\t_imgPath = _basePathName + \"/cameras/\";\n\n\t\tauto camdirs = sibr::listSubdirectories(_imgPath);\n\n\t\tfor (int i = 0; i < camdirs.size(); i++)\n\t\t{\n\t\t\tauto cam = std::make_shared<InputCamera>(0, 0, 0, 0, 0, 0, _camInfos.size());\n\t\t\tcam->loadFromBinary(_imgPath + camdirs[i] + \"/incam.bin\");\n\n\t\t\tauto quat = cam->transform().rotation();\n\t\t\tauto mat = sibr::matFromQuat(quat);\n\n\t\t\tif (mat(2, 2) > 0.9 || cam->position().x() < (x) * 100.9 || cam->position().x() > (x+1) * 100.9 || cam->position().y() < y * 100.9 || cam->position().y() > (y + 1) * 100.9)\n\t\t\t\tcontinue;\n\n\t\t\tcam->name(camdirs[i] + \".png\");\n\t\t\t_camInfos.push_back(cam);\n\t\t}\n\n\t\tpopulateFromCamInfos();\n\n\t\tcolmapSave(_basePathName + \"/sparse/images.txt\", _camInfos, 1.0f);\n\n\t\t_meshPath = dataset_path + \"/mesh.ply\";\n\t}\n\n\n\tvoid ParseData::getParsedColmapData(const std::string & dataset_path, const int fovXfovY_flag, const bool capreal_flag)\n\t{\n\t\t_basePathName = dataset_path + \"/colmap/stereo\";\n\n\t\t_camInfos = sibr::InputCamera::loadColmap(_basePathName + \"/sparse\", 0.01f, 1000.0f, fovXfovY_flag);\n\n\t\tif (_camInfos.empty()) {\n\t\t\tSIBR_ERR << \"Colmap camera calibration file does not exist at /\" + _basePathName + \"/sparse/.\" << std::endl;\n\t\t}\n\n\t\t_imgPath = _basePathName + \"/images/\";\n\n\t\tstd::string blackListFile = dataset_path + \"/colmap/database.blacklist\";\n\n\t\tif (sibr::fileExists(blackListFile)) {\n\t\t\tstd::string line;\n\t\t\tstd::vector<std::string> splitS;\n\t\t\tstd::ifstream blackListFileF(blackListFile);\n\t\t\tif (blackListFileF.is_open()) {\n\t\t\t\twhile (safeGetline(blackListFileF, line)) {\n\n\t\t\t\t\tsplit(splitS, line, is_any_of(\" \"));\n\t\t\t\t\t//std::cout << splitS.size() << std::endl;\n\t\t\t\t\tif (splitS.size() > 0) {\n\t\t\t\t\t\tfor (uint cam_id = 0; cam_id < _camInfos.size(); cam_id++) {\n\t\t\t\t\t\t\tif (find_any(splitS, _camInfos[cam_id]->name())) {\n\t\t\t\t\t\t\t\t_camInfos[cam_id]->setActive(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsplitS.clear();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpopulateFromCamInfos();\n\n\t\tif(capreal_flag) {\n\t\t\t_meshPath = dataset_path + \"/capreal/mesh.obj\";\n\t\t\t_meshPath = (sibr::fileExists(_meshPath)) ? _meshPath : dataset_path + \"/capreal/mesh.ply\";\n\t\t}\n\t\telse {\n\t\t\t_meshPath = dataset_path + \"/colmap/stereo/meshed-delaunay.ply\";\n\t\t}\n\n\t}\n\n\tvoid ParseData::getParsedNVMData(const std::string & dataset_path, const std::string & customPath, const std::string & nvm_path)\n\t{\n\t\t_basePathName = dataset_path + customPath + nvm_path;\n\n\t\t_camInfos = sibr::InputCamera::loadNVM(_basePathName + \"/scene.nvm\", 0.001f, 1000.0f);\n\t\tif (_camInfos.empty()) {\n\t\t\tSIBR_ERR << \"Error reading NVM dataset at /\" + _basePathName << std::endl;\n\t\t}\n\n\t\t_imgPath = _basePathName;\n\n\t\tpopulateFromCamInfos();\n\n\t\t_meshPath = dataset_path + \"/capreal/mesh.obj\";\n\t\t_meshPath = (sibr::fileExists(_meshPath)) ? _meshPath : dataset_path + \"/capreal/mesh.ply\";\n\t}\n\n\tvoid ParseData::getParsedData(const BasicIBRAppArgs & myArgs, const std::string & customPath)\n\t{\n\t\tstd::string datasetTypeStr = myArgs.dataset_type.get();\n\t\t\n\t\tboost::algorithm::to_lower(datasetTypeStr);\n\n\t\tstd::string bundler = myArgs.dataset_path.get() + customPath + \"/cameras/bundle.out\";\n\t\tstd::string colmap = myArgs.dataset_path.get() + \"/colmap/stereo/sparse/images.txt\";\n\t\tstd::string colmap_2 = myArgs.dataset_path.get() + \"/sparse/0/images.bin\";\n\t\tstd::string caprealobj = myArgs.dataset_path.get() + \"/capreal/mesh.obj\";\n\t\tstd::string caprealply = myArgs.dataset_path.get() + \"/capreal/mesh.ply\";\n\t\tstd::string nvmscene = myArgs.dataset_path.get() + customPath + \"/nvm/scene.nvm\";\n\t\tstd::string meshroom = myArgs.dataset_path.get() + \"/../../StructureFromMotion/\";\n\t\tstd::string meshroom_sibr = myArgs.dataset_path.get() + \"/StructureFromMotion/\";\n\t\tstd::string chunked = myArgs.dataset_path.get() + \"/chunk.dat\";\n\t\tstd::string blender = myArgs.dataset_path.get() + \"/transforms_train.json\";\n\t\tstd::string gaussian = myArgs.dataset_path.get() + \"/cameras.json\";\n\n\t\tif(datasetTypeStr == \"sibr\") {\n\t\t\tif (!sibr::fileExists(bundler))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : bundler folder (\" << bundler << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::SIBR;\n\t\t}\n\t\telse if (datasetTypeStr == \"colmap_capreal\") {\n\t\t\tif (!sibr::fileExists(colmap))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : colmap folder (\" << colmap << \") does not exist\" << std::endl;\n\t\t\t\n\t\t\tif (!(sibr::fileExists(caprealobj) || sibr::fileExists(caprealply)))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : capreal mesh (\" << caprealobj << \", \" << caprealply << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::COLMAP_CAPREAL;\n\t\t}\n\t\telse if (datasetTypeStr == \"colmap\") {\n\t\t\tif (!sibr::fileExists(colmap))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : colmap folder (\" << colmap << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::COLMAP;\n\t\t}\n\t\telse if (datasetTypeStr == \"nvm\") {\n\t\t\tif (!sibr::fileExists(nvmscene))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : nvmscene folder (\" << nvmscene << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::NVM;\n\t\t}\n\t\telse if (datasetTypeStr == \"meshroom\") {\n\t\t\tif (!(sibr::directoryExists(meshroom) || sibr::directoryExists(meshroom_sibr)))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t\t\t << \"Reason : meshroom folder (\" << meshroom << \", \" << meshroom_sibr << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::MESHROOM;\n\t\t}\n\t\telse if (datasetTypeStr == \"blender\")\n\t\t{\n\t\t\tif (!sibr::fileExists(blender))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t<< \"Reason : blender transform (\" << blender << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::BLENDER;\n\t\t}\n\t\telse if (datasetTypeStr == \"gaussian\")\n\t\t{\n\t\t\tif (!sibr::fileExists(gaussian))\n\t\t\t\tSIBR_ERR << \"Cannot use dataset_type \" + myArgs.dataset_type.get() + \" at /\" + myArgs.dataset_path.get() + \".\" << std::endl\n\t\t\t\t<< \"Reason : Gaussian transform (\" << blender << \") does not exist\" << std::endl;\n\n\t\t\t_datasetType = Type::BLENDER;\n\t\t}\n\t\telse {\n\t\t\tif (sibr::fileExists(bundler)) {\n\t\t\t\t_datasetType = Type::SIBR;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(gaussian))\n\t\t\t{\n\t\t\t\t_datasetType = Type::GAUSSIAN;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(colmap) && (sibr::fileExists(caprealobj) || sibr::fileExists(caprealply))) {\n\t\t\t\t_datasetType = Type::COLMAP_CAPREAL;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(colmap)) {\n\t\t\t\t_datasetType = Type::COLMAP;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(nvmscene)) {\n\t\t\t\t_datasetType = Type::NVM;\n\t\t\t}\n\t\t\telse if (sibr::directoryExists(meshroom) || sibr::directoryExists(meshroom_sibr)) {\n\t\t\t\t_datasetType = Type::MESHROOM;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(colmap_2))\n\t\t\t\t_datasetType = Type::COLMAP2;\n\n\t\t\telse if (sibr::fileExists(chunked))\n\t\t\t{\n\t\t\t\t_datasetType = Type::CHUNKED;\n\t\t\t}\n\t\t\telse if (sibr::fileExists(blender))\n\t\t\t{\n\t\t\t\t_datasetType = Type::BLENDER;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tSIBR_ERR << \"Cannot determine type of dataset at /\" + myArgs.dataset_path.get() + customPath << std::endl;\n\t\t\t}\n\t\t}\n\n\t\tswitch(_datasetType) {\n\t\t\tcase Type::GAUSSIAN:\t\t\tgetParsedGaussianData(myArgs.dataset_path); break;\n\t\t\tcase Type::BLENDER:\t\t\tgetParsedBlenderData(myArgs.dataset_path); break;\n\t\t\tcase Type::SIBR : \t\t\tgetParsedBundlerData(myArgs.dataset_path, customPath, myArgs.scene_metadata_filename); break;\n\t\t\tcase Type::COLMAP_CAPREAL : getParsedColmapData(myArgs.dataset_path, myArgs.colmap_fovXfovY_flag, true); break;\n\t\t\tcase Type::COLMAP : \t\tgetParsedColmapData(myArgs.dataset_path, myArgs.colmap_fovXfovY_flag, false); break;\n\t\t\tcase Type::COLMAP2 : \t\tgetParsedColmap2Data(myArgs.dataset_path, myArgs.colmap_fovXfovY_flag, false); break;\n\t\t\tcase Type::CHUNKED:\t\t\tgetParsedChunkedData(myArgs.dataset_path); break;\n\t\t\tcase Type::NVM : \t\t\tgetParsedNVMData(myArgs.dataset_path, customPath, \"/nvm/\"); break;\n\t\t\tcase Type::MESHROOM : \t\tif (sibr::directoryExists(meshroom)) getParsedMeshroomData(myArgs.dataset_path.get() + \"/../../\");\n\t\t\t\t\t\t\t\t\t\telse if (sibr::directoryExists(meshroom_sibr)) getParsedMeshroomData(myArgs.dataset_path); break;\n\t\t}\n\t\t\n\t\t// What happens if multiple are present?\n\t\t// Ans: Priority --> SIBR > COLMAP > NVM\n\n\t\t// Subtract minCAMID from all\n\t\tuint minCamID = UINT_MAX;\n\t\tfor (const auto& cam : _camInfos)\n\t\t\tminCamID = std::min(minCamID, cam->id());\n\t\tfor (auto& cam : _camInfos)\n\t\t\tcam->_id -= minCamID;\n\t\tfor (auto& img : _imgInfos)\n\t\t\timg.camId -= minCamID;\n\n\t\t// Find max cam ID and check present image IDs\n\t\tint maxId = 0;\n\t\tstd::vector<bool> presentIDs;\n\t\t\n\t\tpresentIDs.resize(_numCameras);\n\n\t\tfor (int c = 0; c < _numCameras; c++) {\n\t\t\tmaxId = (maxId > int(_imgInfos[c].camId)) ? maxId : int(_imgInfos[c].camId);\n\t\t\tif (_imgInfos[c].camId >= presentIDs.size())\n\t\t\t{\n\t\t\t\t//SIBR_ERR << \"Incorrect Camera IDs \" << std::endl;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\tpresentIDs[_imgInfos[c].camId] = true;\n\t\t\t}\n\t\t\tcatch (const std::exception&)\n\t\t\t{\n\t\t\t\tSIBR_ERR << \"Incorrect Camera IDs \" << std::endl;\n\t\t\t}\n\t\t}\n\n\t\t// Check if max cam ID matches max number of cams\n\t\t// If not find the missing IDs \n\t\tstd::vector<int> missingIDs;\n\t\tint curid;\n\t\tint j, pos;\n\t\tif (maxId >= _numCameras) {\n\t\t\tfor (int i = 0; i < _numCameras; i++) {\n\t\t\t\tif (!presentIDs[i]) { missingIDs.push_back(i); }\n\t\t\t}\n\n\t\t\t// Now, shift the imgInfo IDs to adjust max Cam IDs\n\t\t\tfor (int k = 0; k < _numCameras; k++) {\n\t\t\t\tcurid = _imgInfos[k].camId;\n\t\t\t\tpos = -1;\n\t\t\t\tfor (j = 0; j < missingIDs.size(); j++) {\n\t\t\t\t\tif (curid > missingIDs[j]) { pos = j; }\n\t\t\t\t\telse { break; }\n\t\t\t\t}\n\n\t\t\t\t_imgInfos[k].camId = _imgInfos[k].camId - (pos + 1);\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/ParseData.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/scene/IParseData.hpp\"\n\n\nnamespace sibr{\n\n\t/**\n\t* Class used to store the data required for defining an IBR Scene\n\t* \n\t*\n\t* Members:\n\t* - _basePathName: Base dataset directory path.\n\t* - _camInfos: Vector of sibr::InputCamera holding all data attached with the scene cameras.\n\t* - _meshPath: Filepath of the mesh associated to the scene.\n\t* - _imgInfos: Vector of sibr::ImageListFile::Infos holding filename, width, height, and id of the input images.\n\t* - _imgPath: Path to the calibrated images directory.\n\t* - _activeImages: Vector of bools storing active state of the camera.\n\t* - _numCameras: Number of cameras associated with the dataset\n\t* - _datasetType: Type if dataset being used. Currently supported: COLMAP, SIBR_BUNDLER, NVM, MESHROOM\n\t*\n\t* \\ingroup sibr_scene\n\t*/\n\n\tclass SIBR_SCENE_EXPORT ParseData: public IParseData {\n\t\t\n\tpublic:\n\n\t\t/**\n\t\t* \\brief Pointer to the instance of class sibr::ParseData.\n\t\t*/\n\t\ttypedef std::shared_ptr<ParseData>\t\t\t\tPtr;\n\n\t\t/**\n\t\t* \\brief Function to parse data from a template dataset path.\n\t\t* \\param dataset_path Path to the folder containing data\n\t\t* \\param customPath Path to algorithm specific data\n\t\t* \\param scene_metadata_filename Specify the filename of the Scene Metadata file to load specific scene\n\t\t*/\n\t\tvoid  getParsedBundlerData(const std::string & dataset_path, const std::string & customPath, const std::string & scene_metadata_filename);\n\n\t\t/**\n\t\t* \\brief Function to parse data from a template dataset path.\n\t\t* \\param dataset_path Path to the folder containing data\n\t\t* \\param customPath Path to algorithm specific data\n\t\t*/\n\t\tvoid  getParsedMeshroomData(const std::string & dataset_path, const std::string & customPath = \"\");\n\n\n\t\t/**\n\t\t* \\brief Function to parse data from a colmap dataset path.\n\t\t*\n\t\t* The function takes in a colmap dataset folder path and populates ParseData members with data.\n\t\t* This function can be used for direct compatibility with colmap data in SIBR.\n\t\t* The function automatically computes the intrinsic and extrinsic parameters of the camera, input images filename, widht and height etc.\n\t\t* Colmap uses LHS coordinate system while SIBR uses RHS coordinate system. The function applies appropriate transformation to handle this case.\n\t\t* \n\t\t* For further compatibility with FrIBR, which enforces a Y-up RHS coordinate system, we need to apply an extra conversion to the rotation matrix, to 'flip back' from y-down to y-up.\n\t\t* \\note Note: when applying the above mentioned conversion, the mesh needs to be converted by the same converter matrix\n\t\t* \\param dataset_path Path to the folder containing data\n\t\t* \\param fovXfovY_flag activate two dimensional fov parameters\n\t\t* \\param capreal_flag use capreal data\n\t\t*/\n\t\tvoid  getParsedColmapData(const std::string & dataset_path, const int fovXfovY_flag, const bool capreal_flag = true);\n\n\n\t\tvoid  getParsedColmap2Data(const std::string & dataset_path, const int fovXfovY_flag, const bool capreal_flag = true);\n\n\t\tvoid getParsedGaussianData(const std::string& dataset_path);\n\n\t\tvoid getParsedBlenderData(const std::string& dataset_path);\n\n\t\tvoid getParsedChunkedData(const std::string& dataset_path);\n\n\t\t/**\n\t\t* \\brief Function to parse data from a template dataset path.\n\t\t* \\param dataset_path Path to the folder containing data\n\t\t* \\param customPath Path to algorithm specific data\n\t\t* \\param nvm_path Specify the filename of the NVM path.\n\t\t*/\n\t\tvoid  getParsedNVMData(const std::string & dataset_path, const std::string & customPath, const std::string & nvm_path);\n\n\t\t/**\n\t\t* \\brief Function to parse data from a dataset path. Will automatically determine the type of dataset based on the files present.\n\t\t* \\param myArgs Arguments containing the dataset path and other infos\n\t\t* \\param customPath additional data path\n\t\t*/\n\t\tvoid  getParsedData(const BasicIBRAppArgs & myArgs, const std::string & customPath = \"\") override;\n\n\t\t/**\n\t\t* \\brief Getter for the information regarding the input images.\n\t\t*\n\t\t*/\n\t\tconst std::vector<sibr::ImageListFile::Infos>&\timgInfos(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the information regarding the input images.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\timgInfos(std::vector<sibr::ImageListFile::Infos>& infos) override;\n\n\t\t/**\n\t\t* \\brief Getter to the number of cameras defined in the bundle file.\n\t\t*\n\t\t*/\n\t\tconst int\t\t\t\t\t\t\t\t\t\tnumCameras(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter to the number of cameras defined in the bundle file.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tnumCameras(int numCams) override;\n\n\t\t/**\n\t\t* \\brief Getter for the list of active cameras/images.\n\t\t*\n\t\t*/\n\t\tconst std::vector<bool>&\t\t\t\t\t\tactiveImages(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the list of active cameras/images.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tactiveImages(std::vector<bool>& activeCams) override;\n\n\t\t/**\n\t\t* \\brief Getter for the base path name where the dataset is located.\n\t\t*\n\t\t*/\n\t\tconst std::string&\t\t\t\t\t\t\t\tbasePathName(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the base path name where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tbasePathName(std::string & path)  override;\n\t\t\n\t\t/**\n\t\t* \\brief Getter for the mesh path where the dataset is located.\n\t\t*\n\t\t*/\n\t\tconst std::string&\t\t\t\t\t\t\t\tmeshPath(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the mesh path where the dataset is located.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tmeshPath(std::string & path)  override;\n\n\t\t/**\n\t\t* \\brief Getter for the dataset type.\n\t\t*\n\t\t*/\n\t\tconst IParseData::Type&\t\t\t\t\t\t\tdatasetType(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the dataset type.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tdatasetType(IParseData::Type dataType) override;\n\n\t\t/**\n\t\t* \\brief Getter for the camera infos.\n\t\t*\n\t\t*/\n\t\tconst std::vector <InputCamera::Ptr>\t\t\tcameras(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the camera infos.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\tcameras(std::vector<InputCamera::Ptr>& cams) override;\n\n\t\t/**\n\t\t* \\brief Getter for the image path.\n\t\t*\n\t\t*/\n\t\tconst std::string\t\t\t\t\t\t\t\timgPath(void) const override;\n\n\t\t/**\n\t\t* \\brief Setter for the image path.\n\t\t*\n\t\t*/\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\timgPath(std::string& imPath) override;\n\n\t\t/**\n\t\t* \\brief Function to parse the scene metadata file to read image data.\n\t\t*\n\t\t*/\n\t\tvirtual bool\t\t\t\t\t\t\t\t\tparseSceneMetadata(const std::string & scene_metadata_path);\n\t\n\tprotected:\n\t\t\n\t\t/**\n\t\t* \\brief Function to parse the camera calibration files to read camera properties (camera matrix etc.).\n\t\t*\n\t\t*/\n\t\tbool parseBundlerFile(const std::string & bundler_file_path);\n\n\t\t\n\t\t/**\n\t\t* \\brief Function to populate scene info from camera infos to appropriate location.\n\t\t*\n\t\t*/\n\t\tvoid populateFromCamInfos();\n\n\t\tstd::vector<InputCamera::Ptr>\t\t\t\t_camInfos;\n\t\tstd::string\t\t\t\t\t\t\t\t\t_basePathName;\n\t\tstd::string\t\t\t\t\t\t\t\t\t_meshPath;\n\t\tstd::vector<sibr::ImageListFile::Infos>\t\t_imgInfos;\n\t\tstd::string\t\t\t\t\t\t\t\t\t_imgPath = \"\";\n\t\tstd::vector<bool>\t\t\t\t\t\t\t_activeImages;\n\t\tint\t\t\t\t\t\t\t\t\t\t\t_numCameras;\n\t\tType\t\t\t\t\t\t\t\t\t\t_datasetType = Type::EMPTY;\n\t\t\n\t};\n\n\n\t///// INLINE DEFINITIONS /////\n\t\n\tinline const std::vector<sibr::ImageListFile::Infos>&\tParseData::imgInfos(void) const {\n\t\treturn _imgInfos;\n\t}\n\n\tinline void ParseData::imgInfos(std::vector<sibr::ImageListFile::Infos>& infos)\n\t{\n\t\t_imgInfos = infos;\n\t}\n\n\tinline const int ParseData::numCameras( void ) const {\t\t\n\t\treturn _numCameras;\t\t\n\t}\n\n\tinline void ParseData::numCameras(int numCams)\n\t{\n\t\t_numCameras = numCams;\n\t}\n\t\n\tinline const std::vector<bool>& ParseData::activeImages(void) const {\n\t\treturn _activeImages;\n\t}\n\n\tinline void ParseData::activeImages(std::vector<bool>& activeCams)\n\t{\n\t\t_activeImages = activeCams;\n\t}\n\n\tinline const std::string & ParseData::basePathName(void) const\n\t{\n\t\treturn _basePathName;\n\t}\n\n\tinline void ParseData::basePathName(std::string& path)\n\t{\n\t\t_basePathName = path;\n\t}\n\n\tinline const std::string & ParseData::meshPath(void) const\n\t{\n\t\treturn _meshPath;\n\t}\n\n\tinline void ParseData::meshPath(std::string& path)\n\t{\n\t\t_meshPath = path;\n\t}\n\n\tinline void\t\tParseData::datasetType(IParseData::Type dataType) {\n\t\t_datasetType = dataType;\n\t}\n\n\tinline const std::vector<InputCamera::Ptr> ParseData::cameras(void) const\n\t{\n\t\treturn _camInfos;\n\t}\n\n\tinline void ParseData::cameras(std::vector<InputCamera::Ptr>& cams)\n\t{\n\t\t_camInfos = cams;\n\t}\n\n\tinline const std::string ParseData::imgPath(void) const\n\t{\n\t\treturn _imgPath;\n\t}\n\n\tinline void ParseData::imgPath(std::string& imPath)\n\t{\n\t\t_imgPath = imPath;\n\t}\n\n\tinline const ParseData::Type & ParseData::datasetType(void) const\n\t{\n\t\treturn _datasetType;\n\t}\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/ProxyMesh.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"ProxyMesh.hpp\"\n\n\nnamespace sibr {\n\n\tvoid ProxyMesh::loadFromData(const IParseData::Ptr & data)\n\t{\n\t\t_proxy.reset(new Mesh());\n\t\t// GD HACK\n\t\tif (boost::filesystem::extension(data->meshPath()) == \".bin\") {\n\t\t\tif (!_proxy->loadSfM(data->meshPath(), data->basePathName())) {\n\t\t\t\tSIBR_WRG << \"proxy model not found at \" << data->meshPath() << std::endl;\n\t\t\t}\n\t\t}\n\t\telse if (!_proxy->load(data->meshPath(), data->basePathName()) && !_proxy->load(removeExtension(data->meshPath()) + \".ply\") && !_proxy->load(removeExtension(data->meshPath()) + \".obj\")) {\n\t\t\tif (!_proxy->loadSfM(data->meshPath(), data->basePathName())) {\n\t\t\t\tSIBR_WRG << \"proxy model not found at \" << data->meshPath() << std::endl;\n\t\t\t}\n\t\t}\n\t\tif (!_proxy->hasNormals()) {\n\t\t\t_proxy->generateNormals();\n\t\t}\n\t}\n\n\tvoid ProxyMesh::replaceProxy(Mesh::Ptr newProxy)\n\t{\n\t\t_proxy.reset(new Mesh());\n\t\t_proxy->vertices(newProxy->vertices());\n\t\t_proxy->normals(newProxy->normals());\n\t\t_proxy->colors(newProxy->colors());\n\t\t_proxy->triangles(newProxy->triangles());\n\t\t_proxy->texCoords(newProxy->texCoords());\n\n\t\t// Used by inputImageRT init() and debug rendering\n\t\tif (!_proxy->hasNormals())\n\t\t{\n\t\t\t_proxy->generateNormals();\n\t\t}\n\n\t}\n\n\tvoid ProxyMesh::replaceProxyPtr(Mesh::Ptr newProxy)\n\t{\n\t\t_proxy = newProxy;\n\t}\n\n\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/ProxyMesh.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/scene/IProxyMesh.hpp\"\n\nnamespace sibr {\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT ProxyMesh : public IProxyMesh {\n\t\tSIBR_DISALLOW_COPY(ProxyMesh);\n\tpublic:\n\t\ttypedef std::shared_ptr<ProxyMesh>\t\t\t\t\tPtr;\n\n\t\tProxyMesh() {};\n\t\t~ProxyMesh() {};\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\tloadFromData(const IParseData::Ptr & data) override;\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\treplaceProxy(Mesh::Ptr newProxy) override;\n\t\tvoid\t\t\t\t\t\t\t\t\t\t\t\treplaceProxyPtr(Mesh::Ptr newProxy) override;\n\t\tbool\t\t\t\t\t\t\t\t\t\t\t\thasProxy(void) const;\n\t\tconst Mesh&\t\t\t\t\t\t\t\t\t\t\tproxy(void) const;\n\t\tconst Mesh::Ptr\t\t\t\t\t\t\t\t\t\tproxyPtr(void) const;\n\n\tprotected:\n\n\t\tMesh::Ptr\t\t\t\t\t\t\t\t\t\t\t_proxy;\n\n\t};\n\n\tinline bool\t\t\t\t\t\t\t\t\t\t\t\tsibr::ProxyMesh::hasProxy(void) const\n\t{\n\t\treturn _proxy && !_proxy->vertices().empty();\n\t}\n\n\tinline const Mesh& ProxyMesh::proxy(void) const\n\t{\n\t\treturn *_proxy;\n\t}\n\n\tinline const Mesh::Ptr\t\t\t\t\t\t\t\t\tProxyMesh::proxyPtr(void) const\n\t{\n\t\treturn _proxy;\n\t}\n\n};\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/RenderTargetTextures.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"RenderTargetTextures.hpp\"\n\nnamespace sibr {\n\n\tvoid RTTextureSize::initSize(uint w, uint h, bool force_aspect_ratio)\n\t{\n\t\t\n\t\tstd::cerr << \"RTTextureSize::initSize NEW FORCE ASPECT \" << force_aspect_ratio << \" : \" << w << \"x\" << h << \" \" << std::endl;\n\n\t\tfloat aspect;\n\t\tif (_width == 0) { // use full resolution\n\t\t\t_width = w;\n\t\t\t_height = h;\n\t\t} else if (!force_aspect_ratio) { // use constrained resolution\n\t\t\t\n\t\t\tif (w >= h) {\n\t\t\t\taspect = float(w) / float(h);\n\t\t\t\t_height = uint(floor(float(_width) / aspect));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_height = _width;\n\t\t\t\taspect = float(w) / float(h);\n\t\t\t\t_width = uint(floor(float(_height) * aspect));\n\t\t\t}\n\t\t\t\n\t\t}\n\t\telse {\n\t\t\tif (w >= h) _height = w, _width = h;\n\t\t\telse _width = w, _height = h;\n\t\t}\n\n\t\tSIBR_LOG << \"Rendering resolution: (\" << _width << \",\" << _height << \")\" << std::endl;\n\t\t_isInit = true;\n\t}\n\n\tbool RTTextureSize::isInit() const\n\t{\n\t\treturn _isInit;\n\t}\n\n\tconst std::vector<RenderTargetRGBA32F::Ptr>& RGBDInputTextures::inputImagesRT() const\n\t{\n\t\treturn _inputRGBARenderTextures;\n\t}\n\n\tvoid RGBDInputTextures::initializeImageRenderTargets(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs)\n\t{\n\t\tSIBR_LOG << \"Initializing input image RTs \" << std::endl;\n\n\t\tif (!isInit()) {\n\t\t\tinitSize(cams->inputCameras()[_initActiveCam]->w(), cams->inputCameras()[_initActiveCam]->h());\n\t\t}\n\t\t\n\t\t_inputRGBARenderTextures.resize(imgs->inputImages().size());\n\n\t\tGLShader textureShader;\n\t\ttextureShader.init(\"Texture\",\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"texture.vp\")),\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"texture.fp\")));\n\t\tuint interpFlag = (SIBR_SCENE_LINEAR_SAMPLING & SIBR_SCENE_LINEAR_SAMPLING) ? SIBR_GPU_LINEAR_SAMPLING : 0; // LINEAR_SAMPLING Set to default\n\n\t\tfor (uint i = 0; i < imgs->inputImages().size(); i++) {\n\t\t\tif (cams->inputCameras()[i]->isActive()) {\n\t\t\t\tstd::cerr << \".\" ;\n\t\t\t\tImageRGB img = std::move(imgs->inputImages()[i]->clone());\n\t\t\t\timg.flipH();\n\n\t\t\t\tstd::shared_ptr<Texture2DRGB> rawInputImage(new Texture2DRGB(img, interpFlag));\n\n\t\t\t\tglViewport(0, 0, _width, _height);\n\t\t\t\t_inputRGBARenderTextures[i].reset(new RenderTargetRGBA32F(_width, _height, interpFlag));\n\t\t\t\t_inputRGBARenderTextures[i]->clear();\n\t\t\t\t_inputRGBARenderTextures[i]->bind();\n\n\t\t\t\tglActiveTexture(GL_TEXTURE0);\n\t\t\t\tglBindTexture(GL_TEXTURE_2D, rawInputImage->handle());\n\n\t\t\t\tglDisable(GL_DEPTH_TEST);\n\t\t\t\ttextureShader.begin();\n\t\t\t\tRenderUtility::renderScreenQuad();\n\t\t\t\ttextureShader.end();\n\t\t\t\t_inputRGBARenderTextures[i]->unbind();\n\t\t\t}\n\t\t}\n\t\tstd::cerr << std::endl; \n\t}\n\n\tvoid RGBDInputTextures::initializeDepthRenderTargets(ICalibratedCameras::Ptr cams, IProxyMesh::Ptr proxies, bool facecull)\n\t{\n\t\tif (!isInit()) {\n\t\t\tinitSize(cams->inputCameras()[_initActiveCam]->w(), cams->inputCameras()[_initActiveCam]->h());\n\t\t}\n\n\t\tGLParameter size;\n\t\tGLParameter proj;\n\n\t\tGLShader depthShader;\n\t\tdepthShader.init(\"Depth\",\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"depth.vp\")),\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"depth.fp\")));\n\n\t\tproj.init(depthShader, \"proj\"); // [SP]: ??\n\t\tsize.init(depthShader, \"size\"); // [SP]: ??\n\t\tfor (uint i = 0; i < cams->inputCameras().size(); i++) {\n\t\t\tif (cams->inputCameras()[i]->isActive()) {\n\t\t\t\t_inputRGBARenderTextures[i]->bind();\n\t\t\t\tglEnable(GL_DEPTH_TEST);\n\t\t\t\tglClear(GL_DEPTH_BUFFER_BIT);\n\t\t\t\tglDepthMask(GL_TRUE);\n\t\t\t\tglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);\n\n\t\t\t\tif (!proxies->proxy().triangles().empty())\n\t\t\t\t{\n\n\t\t\t\t\tconst uint w = _inputRGBARenderTextures[i]->w();\n\t\t\t\t\tconst uint h = _inputRGBARenderTextures[i]->h();\n\n\t\t\t\t\tdepthShader.begin();\n\t\t\t\t\tsize.set((float)w, (float)h);\n\t\t\t\t\tproj.set(cams->inputCameras()[i]->viewproj());\n\t\t\t\t\tproxies->proxy().render(true, facecull);\n\n\t\t\t\t\tdepthShader.end();\n\t\t\t\t}\n\t\t\t\t_inputRGBARenderTextures[i]->unbind();\n\t\t\t}\n\t\t}\n\t\tglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\n\t}\n\n\tvoid DepthInputTextureArray::initDepthTextureArrays(ICalibratedCameras::Ptr cams, IProxyMesh::Ptr proxies, bool facecull, int flags)\n\t{\n\n\t\tif (!isInit()) {\n\t\t\tinitSize(cams->inputCameras()[_initActiveCam]->w(), cams->inputCameras()[_initActiveCam]->h());\n\t\t}\n\n\t\tif (!proxies->hasProxy()) {\n\t\t\tSIBR_WRG << \" Cannot init DepthTextureArrays without proxy.\" << std::endl;\n\t\t\treturn;\n\t\t}\n\n\t\tSIBR_LOG << \"Depth vertex shader location: \" << Resources::Instance()->getResourceFilePathName(\"depthonly.vp\") << std::endl;\n\t\tSIBR_LOG << \"Depth fragment shader location: \" << Resources::Instance()->getResourceFilePathName(\"depthonly.fp\") << std::endl;\n\n\t\tGLShader depthOnlyShader;\n\t\tdepthOnlyShader.init(\"DepthOnly\",\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"depthonly.vp\")),\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"depthonly.fp\")));\n\n\t\tconst uint interpFlag = (flags & SIBR_SCENE_LINEAR_SAMPLING) ? SIBR_GPU_LINEAR_SAMPLING : 0;\n\n\t\tRenderTargetLum32F depthRT(_width, _height, interpFlag);\n\n\t\tGLParameter proj;\n\t\tproj.init(depthOnlyShader, \"proj\");\n\n\n\t\tconst uint numCams = (uint)cams->inputCameras().size();\n\t\t_inputDepthMapArrayPtr.reset(new Texture2DArrayLum32F(_width, _height, numCams, flags));\n\n\t\tfor (uint i = 0; i < numCams; i++) {\n\t\t\tglViewport(0, 0, _width, _height);\n\n\t\t\tdepthRT.bind();\n\t\t\tglEnable(GL_DEPTH_TEST);\n\t\t\tglClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);\n\t\t\tglDepthMask(GL_TRUE);\n\n\t\t\tdepthOnlyShader.begin();\n\t\t\tproj.set(cams->inputCameras()[i]->viewproj());\n\t\t\tproxies->proxy().render(true, facecull);\n\t\t\tdepthOnlyShader.end();\n\n\t\t\tdepthRT.unbind();\n\n\t\t\tglCopyImageSubData(\n\t\t\t\tdepthRT.handle(), GL_TEXTURE_2D, 0, 0, 0, 0,\n\t\t\t\t_inputDepthMapArrayPtr->handle(), GL_TEXTURE_2D_ARRAY, 0, 0, 0, i,\n\t\t\t\t_width, _height, 1);\n\t\t\tCHECK_GL_ERROR;\n\t\t}\n\t\tCHECK_GL_ERROR;\n\t}\n\n\tconst Texture2DArrayLum32F::Ptr & DepthInputTextureArray::getInputDepthMapArrayPtr() const\n\t{\n\t\treturn _inputDepthMapArrayPtr;\n\t}\n\n\tvoid RGBInputTextureArray::initRGBTextureArrays(IInputImages::Ptr imgs, int flags, bool force_aspect_ratio)\n\t{\n\t\tif (!isInit()) {\n\t\t\tstd::cerr << \"RGBInputTextureArray::initRGBTextureArrays NEW FORCE ASPECT \" << force_aspect_ratio << std::endl;\n\t\t\tinitSize(imgs->inputImages()[_initActiveCam]->w(), imgs->inputImages()[_initActiveCam]->h(), force_aspect_ratio);\n\t\t}\n\n\t\t_inputRGBArrayPtr.reset(new Texture2DArrayRGB(imgs->inputImages(), _width, _height, flags));\n\t}\n\n\tconst Texture2DArrayRGB::Ptr & RGBInputTextureArray::getInputRGBTextureArrayPtr() const\n\t{\n\t\treturn _inputRGBArrayPtr;\n\t}\n\n\tvoid RenderTargetTextures::initializeDefaultRenderTargets(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies)\n\t{\n\t\tif (!isInit()) {\n\t\t\tinitRenderTargetRes(cams);\n\t\t\t\n\t\t}\n\t\tinitializeImageRenderTargets(cams, imgs);\n\t\tinitializeDepthRenderTargets(cams, proxies, true);\n\t}\n\n\tvoid RenderTargetTextures::initRenderTargetRes(ICalibratedCameras::Ptr cams)\n\t{\n\t\t// Find the first active camera and use it's reolution to init Rendertargets\n\t\tfor (int i = 0; i < cams->inputCameras().size(); i++) {\n\t\t\tif (cams->inputCameras()[i]->isActive()) {\n\t\t\t\t_initActiveCam = i;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tSIBR_ERR << \"No cameras active! Fail to initialize RenderTarget!!\" << std::endl;\n\t}\n\n\tvoid RenderTargetTextures::initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags, int texture_width, bool faceCull, bool force_aspect_ratio)\n\t{\n\t\t_width = texture_width;\n\t\tinitRGBandDepthTextureArrays(cams, imgs, proxies, textureFlags, faceCull, force_aspect_ratio);\n\t}\n\n\tvoid RenderTargetTextures::initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags,  unsigned int width, unsigned int height, bool faceCull)\n\t{\n\t\tinitSize(width, height, true);\n\t\tinitRGBTextureArrays(imgs, textureFlags, true);\n\t\tinitDepthTextureArrays(cams, proxies, faceCull);\n\t}\n\n\tvoid RenderTargetTextures::initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags, bool faceCull, bool force_aspect_ratio)\n\t{\n\t\tif (!isInit()) {\n\t\t\tinitRenderTargetRes(cams);\n\t\t}\n\t\tinitRGBTextureArrays(imgs, textureFlags, force_aspect_ratio);\n\t\tinitDepthTextureArrays(cams, proxies, faceCull);\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/RenderTargetTextures.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/graphics/Texture.hpp\"\n#include \"core/scene/ICalibratedCameras.hpp\"\n#include \"core/scene/IInputImages.hpp\"\n#include \"core/scene/IProxyMesh.hpp\"\n#include \"core/assets/Resources.hpp\"\n# include \"core/graphics/Shader.hpp\"\n#include \"core/graphics/Utils.hpp\"\n#include \"core/scene/Config.hpp\"\n\n\n# define SIBR_SCENE_LINEAR_SAMPLING\t\t\t4\n\n\nnamespace sibr{\n\n\t/** \n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT RTTextureSize {\n\n\tpublic:\n\t\tRTTextureSize(uint w = 0) : _width(w) {}\n\n\t\tvoid initSize(uint w, uint h, bool force_aspect_ratio = false);\n\n\t\tbool isInit() const;\n\n\tprotected:\n\t\tuint\t\t_width = 0; //constrained width provided by the command line args, defaults to 0\n\t\tuint\t\t_height = 0; //associated height, computed in initSize\n\t\tbool\t\t_isInit = false;\n\t\tint\t\t\t_initActiveCam = 0;\n\n\t};\n\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT RGBDInputTextures : public virtual RTTextureSize {\n\t\tSIBR_CLASS_PTR(RGBDInputTextures)\n\tpublic:\n\t\tconst std::vector<RenderTargetRGBA32F::Ptr> & inputImagesRT() const;\n\n\t\tvirtual void initializeImageRenderTargets(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs);\n\t\tvirtual void initializeDepthRenderTargets(ICalibratedCameras::Ptr cams, IProxyMesh::Ptr proxies, bool facecull);\n\n\tprotected:\n\t\tstd::vector<RenderTargetRGBA32F::Ptr> _inputRGBARenderTextures;\n\n\t};\n\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT DepthInputTextureArray : public virtual RTTextureSize {\n\t\tSIBR_CLASS_PTR(DepthInputTextureArray)\n\tpublic:\n\t\tvirtual void initDepthTextureArrays(ICalibratedCameras::Ptr cams, IProxyMesh::Ptr proxies, bool facecull, int flags = SIBR_GPU_LINEAR_SAMPLING);\n\t\tconst Texture2DArrayLum32F::Ptr &  getInputDepthMapArrayPtr() const;\n\n\tprotected:\n\t\tTexture2DArrayLum32F::Ptr _inputDepthMapArrayPtr;\n\n\t};\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT RGBInputTextureArray : public virtual RTTextureSize {\n\n\t\tSIBR_CLASS_PTR(RGBInputTextureArray)\n\n\tpublic:\n\t\tvirtual void initRGBTextureArrays(IInputImages::Ptr imgs, int flags = 0, bool force_aspect_ratio=false);\n\t\tconst Texture2DArrayRGB::Ptr & getInputRGBTextureArrayPtr() const;\n\n\tprotected:\n\t\tTexture2DArrayRGB::Ptr _inputRGBArrayPtr;\n\n\t};\n\n\t/**\n\t\\ingroup sibr_scene\n\t*/\n\tclass SIBR_SCENE_EXPORT RenderTargetTextures :\n\t\tpublic virtual RGBDInputTextures,\n\t\tpublic virtual DepthInputTextureArray,\n\t\tpublic virtual RGBInputTextureArray \n\t{\n\t\t\n\tpublic:\n\t\tSIBR_CLASS_PTR(RenderTargetTextures)\n\t\t\n\t\tRenderTargetTextures(uint w = 0) : RTTextureSize(w) {}\n\n\t\tvirtual void initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags, unsigned int w, unsigned int h, bool faceCull = true);\n\t\t// TODO: remove this, not needed\n\t\tvirtual void initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags, int texture_width, bool faceCull = true, bool force_aspect_ratio = false);\n\t\tvirtual void initRGBandDepthTextureArrays(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies, int textureFlags, bool faceCull = true, bool force_aspect_ratio=false);\n\t\tvirtual void initializeDefaultRenderTargets(ICalibratedCameras::Ptr cams, IInputImages::Ptr imgs, IProxyMesh::Ptr proxies);\n\n\tprotected:\n\t\tvoid initRenderTargetRes(ICalibratedCameras::Ptr cams);\n\n\t};\n\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/scene/sibr_scene.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_scene sibr_scene\n\n\t\\brief IBR Scene components.\n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Array2d.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n#include <core/system/Vector.hpp>\n\nnamespace sibr\n{\n\ttemplate <typename T> class Array2d;\n\n\n\t///\n\t/// Used to store custom data on a map using pixel position \n\t/// (2d unsigned pos).\n\t/// Internally, this simply use a one dimensional std::vector. \n\t/// This class abstract convert operation from 2d to 1d for \n\t/// making code easy to read.\n\t/// \\ingroup sibr_system\n\t///\n\ttemplate <typename T>\n\tclass Array2d\n\t{\n\tpublic:\n\t\t// We use 'reference' defined by std::vector (and STL) and they are\n\t\t// a bit special. For example, I suppose that some compiler should\n\t\t// be able to replace a heave 'const bool&' by a simple 'bool' (in\n\t\t// this case a copy is far more cheaper). And what about 'bool&' ?\n\t\ttypedef typename std::vector<T>::const_reference\tconst_reference;\n\t\ttypedef typename std::vector<T>::reference\t\t\treference;\n\n\t\t/// Build from the given size.\n\t\t/// Note you can't resize your Array2d (just create a new one \n\t\t/// if you need).\n\t\tArray2d( uint width=0, uint height=0 );\n\t\t/// Build from the given size and using the given default value.\n\t\t/// Note you can't resize your Array2d (just create a new one \n\t\t/// if you need).\n\t\tArray2d( uint width, uint height, const_reference defaultValue );\n\n\t\t/// Destructor.\n\t\t~Array2d( );\n\n\t\t/// Return the width of this Array2d\n\t\tuint\twidth( void ) const;\n\t\t/// Return the height of this Array2d\n\t\tuint\theight( void ) const;\n\t\t/// Return the width of this Array2d\n\t\tuint\tw(void) const;\n\t\t/// Return the height of this Array2d\n\t\tuint\th(void) const;\n\n\t\t/// Return TRUE if is empty\n\t\tbool\tempty( void ) const;\n\n\t\t/// Return data about a pixel at given coordinates\n\t\tconst_reference\t\toperator ()( uint x, uint y ) const;\n\t\t/// Access data about a pixel at given coordinates\n\t\treference\t\t\toperator ()( uint x, uint y );\n\n\t\t/// Return data about a pixel at given coordinates\n\t\tconst_reference\t\toperator ()(const sibr::Vector2i & coords) const;\n\t\t/// Access data about a pixel at given coordinates\n\t\treference\t\t\toperator ()(const sibr::Vector2i & coords);\n\n\t\t/// Return data about a pixel at given index\n\t\tconst_reference\t\toperator []( size_t i ) const;\n\t\t/// Access data about a pixel at given index\n\t\treference\t\t\toperator []( size_t i );\n\n\t\t/// Return the total size of the one dimensional array\n\t\tsize_t\t\t\t\tsize( void ) const;\n\n\t\t/// Return data accessible in a one array form\n\t\t/// \\deprecated Use Array2d<T>::vector( void ) instead.\n\t\tconst std::vector<T>&\toperator () ( void ) const;\n\t\tstd::vector<T>&\t\t\toperator () ( void );\n\n\t\t/// Return the internally used std::vector (so you\n\t\t/// can use STL algos).\n\t\tconst std::vector<T>&\tvector( void ) const;\n\t\tstd::vector<T>&\t\t\tvector( void );\n\n\t\t/// Return a pointer to the first byte a stored\n\t\t/// data.\n\t\tvoid*\t\t\t\t\tdata( void ) const;\n\t\tvoid*\t\t\t\t\tdata( void );\n\n\n\n\t\t/// Return the element index for the given coordinates\n\t\tinline uint\t\tindex( uint x, uint y ) const;\n\n\t\t/// Return FALSE if x,y are out of range. (DON'T print error)\n\t\tinline bool\t\tinRange( uint x, uint y ) const;\n\t\tinline bool\t\tisInRange( uint x, uint y) const;\n\n\n\tprotected:\n\t\t/// Return FALSE if x,y are out of range. (print error)\n\t\tbool\tcheckSizeFor( uint x, uint y ) const;\n\n\t\tuint\t\t\t\t_width;\t\t///< Width of the pixel map\n\t\tuint\t\t\t\t_height;\t///< Height of the pixel map\n\t\tstd::vector<T>\t\t_data;\t\t///< data of the pixel map\n\t};\n\t\n\n\t///// DEFINITION /////\n\t\n\ttemplate<typename T>\n\tArray2d<T>::Array2d( uint width, uint height )\n\t: _width(width), _height(height), _data(_width*_height) {\n\t}\n\n\ttemplate<typename T>\n\tArray2d<T>::Array2d( uint width, uint height, const_reference defaultValue )\n\t: _width(width), _height(height), _data(_width*_height, defaultValue) {\n\t}\n\n\ttemplate<typename T>\n\tArray2d<T>::~Array2d( )\n\t{\n\t\t_data.clear();\n\t}\n\n\ttemplate<typename T>\n\tuint\tArray2d<T>::width( void ) const {\n\t\treturn _width;\n\t}\n\n\ttemplate<typename T>\n\tuint\tArray2d<T>::height( void ) const {\n\t\treturn _height;\n\t}\n\n\ttemplate<typename T>\n\tuint\tArray2d<T>::w(void) const {\n\t\treturn _width;\n\t}\n\n\ttemplate<typename T>\n\tuint\tArray2d<T>::h(void) const {\n\t\treturn _height;\n\t}\n\n\n\ttemplate<typename T>\n\ttypename Array2d<T>::const_reference\t\tArray2d<T>::operator ()( uint x, uint y ) const {\n\t\tcheckSizeFor(x, y);\n\t\treturn _data.at(index(x, y));\n\t}\n\ttemplate<typename T>\n\ttypename Array2d<T>::reference\t\t\tArray2d<T>::operator ()( uint x, uint y) {\n\t\tcheckSizeFor(x, y);\n\t\treturn _data[index(x, y)];\n\t}\n\n\ttemplate<typename T>\n\ttypename Array2d<T>::const_reference\t\tArray2d<T>::operator ()(const sibr::Vector2i & coords) const {\n\t\treturn _data[index(coords[0], coords[1])];\n\t}\n\ttemplate<typename T>\n\ttypename Array2d<T>::reference\t\t\tArray2d<T>::operator ()(const sibr::Vector2i & coords) {\n\t\treturn _data[index(coords[0], coords[1])];\n\t}\n\n\ttemplate<typename T>\n\tconst std::vector<T>&\tArray2d<T>::operator () ( void ) const {\n\t\treturn _data;\n\t}\n\ttemplate<typename T>\n\tstd::vector<T>&\tArray2d<T>::operator () ( void ) {\n\t\treturn _data;\n\t}\n\n\n\ttemplate<typename T>\n\tconst std::vector<T>&\tArray2d<T>::vector( void ) const {\n\t\treturn _data;\n\t}\n\ttemplate<typename T>\n\tstd::vector<T>&\tArray2d<T>::vector( void ) {\n\t\treturn _data;\n\t}\n\t\n\ttemplate<typename T>\n\tvoid*\t\t\t\t\tArray2d<T>::data( void ) const {\n\t\treturn vector().empty()? nullptr : &vector()[0];\n\t}\n\ttemplate<typename T>\n\tvoid*\t\t\t\t\tArray2d<T>::data( void ) {\n\t\treturn vector().empty()? nullptr : &vector()[0];\n\t}\n\n\ttemplate<typename T>\n\tbool\tArray2d<T>::empty( void ) const {\n\t\treturn vector().empty();\n\t}\n\n\t\n\ttemplate<typename T>\n\ttypename Array2d<T>::const_reference\t\tArray2d<T>::operator []( size_t i ) const {\n\t\treturn _data.at(i);\n\t}\n\n\ttemplate<typename T>\n\ttypename Array2d<T>::reference\t\t\tArray2d<T>::operator []( size_t i ) {\n\t\treturn _data[i];\n\t}\n\n\ttemplate<typename T>\n\tsize_t\t\t\t\tArray2d<T>::size( void ) const {\n\t\treturn _data.size();\n\t}\n\n\n\ttemplate<typename T>\n\tuint\t\tArray2d<T>::index( uint x, uint y ) const {\n\t\treturn y*_width + x;\n\t}\n\n\ttemplate<typename T>\n\tbool\tArray2d<T>::inRange( uint x, uint y ) const {\n\t\treturn (x < _width && y < _height);\n\t}\n\n\ttemplate<typename T>\n\tbool\tArray2d<T>::isInRange(uint x, uint y) const {\n\t\treturn (x < _width && y < _height);\n\t}\n\n\ttemplate<typename T>\n\tbool\tArray2d<T>::checkSizeFor( uint x, uint y ) const {\n\t\tif (inRange(x, y))\n\t\t\treturn true;\n\t\t//else\n\t\tSIBR_ERR << \"invalid pixelmap range at \" << x << \", \" << y\n\t\t\t<< \"(current size: \" << _width << \", \" << _height << \"). \"\n\t\t\t<< std::endl;\n\n\t\tassert(false);// else it will crash because of std::vector\n\t\treturn false;\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/ByteStream.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <vector>\n#include <iomanip>\n#include <fstream>\n\n#ifndef SIBR_OS_WINDOWS\n# include <string.h>\n#endif\n\n#include \"core/system/ByteStream.hpp\"\n\n\nnamespace sibr\n{\n\tvoid\t\t\tByteStream::memoryDump( void ) const \n\t{\n\t\tconst unsigned char* data = reinterpret_cast<const unsigned char*>(&_buffer[0]);\n\t\tstd::cout << \"Readable size: \" << readableSize() << std::endl;\n\t\tstd::cout << \"Real size: \" << bufferSize() << std::endl;\n\t\tstd::cout << std::hex << std::setfill('0') << std::setw(2);\n\t\tfor (unsigned i = 0; i < _buffer.size(); ++i)\n\t\t{\n\t\t\tconst int blocksize = 2;\n\t\t\tfor (unsigned j = 0; i < _buffer.size() && j < blocksize; ++j, ++i)\n\t\t\t\tstd::cout << uint(data[i]);\n\t\t\tstd::cout << ' ';\n\t\t\tfor (unsigned j = 0; i < _buffer.size() && j < blocksize; ++j, ++i)\n\t\t\t\tstd::cout << uint(data[i]);\n\t\t\tstd::cout << ' ';\n\t\t\tfor (unsigned j = 0; i < _buffer.size() && j < blocksize; ++j, ++i)\n\t\t\t\tstd::cout << uint(data[i]);\n\t\t\tstd::cout << ' ';\n\t\t\tfor (unsigned j = 0; i < _buffer.size() && j < blocksize; ++j, ++i)\n\t\t\t\tstd::cout << uint(data[i]);\n\t\t\tstd::cout << ' ';\n\t\t\tstd::cout << std::endl;\n\t\t}\n\t\tstd::cout << std::dec << std::setw(0);\n\t}\n\n\tuint64\tByteStream::htonll(uint64 n)\n\t{\n\t\tif (ByteStream::systemIsBigEndian())\n\t\t\treturn n;\n\t\t// Else we are on a little endian system\n\t\tuint32 out = 0;\n\t\tout |= (n & 0xFF00000000000000) >> 56;\n\t\tout |= (n & 0x00FF000000000000) >> 40;\n\t\tout |= (n & 0x0000FF0000000000) >> 24;\n\t\tout |= (n & 0x000000FF00000000) >> 8;\n\t\tout |= (n & 0x00000000FF000000) << 8;\n\t\tout |= (n & 0x0000000000FF0000) << 24;\n\t\tout |= (n & 0x000000000000FF00) << 40;\n\t\tout |= (n & 0x00000000000000FF) << 56;\n\t\treturn out;\n\t}\n\n\tuint32\tByteStream::htonl( uint32 n ) \n\t{\n\t\tif (ByteStream::systemIsBigEndian())\n\t\t\treturn n;\n\t\t// Else we are on a little endian system\n\t\tuint32 out = 0;\n\n\t\tout |= (n & 0xFF000000) >> 24;\n\t\tout |= (n & 0x00FF0000) >> 8;\n\t\tout |= (n & 0x0000FF00) << 8;\n\t\tout |= (n & 0x000000FF) << 24;\n\t\treturn out;\n\t}\n\n\tuint16\tByteStream::htons( uint16 n ) \n\t{\n\t\tif (ByteStream::systemIsBigEndian())\n\t\t\treturn n;\n\t\t// Else we are on a little endian system\n\t\tuint16 out = 0;\n\n\t\tout |= (n & 0xFF00) >> 8;\n\t\tout |= (n & 0x00FF) << 8;\n\t\treturn out;\n\t}\n\n\tbool ByteStream::systemIsBigEndian( void ) \n\t{\n\t\tstatic int16 isBigEndian = -1;\n\t\tif (isBigEndian == -1)\n\t\t{\n\t\t\t/// \\todo TODO: check the compiler is not too smart and that it does not\n\t\t\t/// optimize this at compile-time with a const.\n\t\t\tint16 word = 0x0001;\n\t\t\tchar *b = (char *) &word;\n\t\t\tisBigEndian = (b[0]? 0 /*little endian*/ : 1 /*big endian*/);\n\t\t}\n\t\treturn isBigEndian != 0;\n\t}\n\n\tbool\tByteStream::load( const std::string& filename ) \n\t{\n\t\tstd::ifstream file(filename.c_str(), std::ios::in | std::ios::binary);\n\n\t\tif (file)\n\t\t{\n\t\t\tfile.seekg(0, file.end);\n\t\t\tauto len = file.tellg();\n\t\t\tfile.seekg(0, file.beg);\n\n\t\t\t_buffer.resize(len);\n\t\t\tfile.read(reinterpret_cast<char*>(&_buffer[0]), len);\n\n\t\t\tfile.close();\n\t\t\treturn true;\n\t\t}\n\t\telse\n\t\t\tSIBR_WRG << \"cannot load ByteStream from file '\" << filename << \"'.\" << std::endl;\n\t\treturn false;\n\t}\n\n\tvoid\tByteStream::saveToFile( const std::string& filename ) \n\t{\n\t\tif (bufferSize() == 0)\n\t\t\treturn;\n\n\t\tstd::ofstream\tfile(filename.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);\n\n\t\tif (file)\n\t\t{\n\t\t\tfile.write((char*)&_buffer[0], _buffer.size() * sizeof(_buffer[0]));\n\t\t\tfile.close();\n\t\t}\n\t\telse\n\t\t\tSIBR_LOG << \"ERROR: cannot write to the file '\" << filename << \"'\" << std::endl;\n\t}\n\n\tvoid ByteStream::push(const void* data, uint size) \n\t{\n\t\tassert(data != nullptr && size > 0);\n\n\t\tsize_t curpos = _buffer.size();\n\t\t_buffer.resize(curpos + size);\n\t\tmemcpy(&_buffer[curpos], data, size);\n\t}\n\n\n\tByteStream& ByteStream::operator <<( bool b ) \n\t{\n\t\treturn ByteStream::operator << (static_cast<uint8>(b));\n\t}\n\n\tByteStream& ByteStream::operator <<( int8 i ) \n\t{\n\t\tpush(&i, sizeof(i));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( int16 i ) \n\t{\n\t\tint16 netorder = htons(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( int32 i ) \n\t{\n\t\tint32 netorder = htonl(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( int64 i )\n\t{\n\t\tint64 netorder = htonll(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( uint8 i ) \n\t{\n\t\tpush(&i, sizeof(i));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( uint16 i ) \n\t{\n\t\tuint16 netorder = htons(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( uint32 i ) \n\t{\n\t\tuint32 netorder = htonl(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<(uint64 i)\n\t{\n\t\tuint64 netorder = htonll(i);\n\t\tpush(&netorder, sizeof(netorder));\n\t\treturn *this;\n\t}\n\t\n\tByteStream& ByteStream::operator <<( const std::string& str )\n\t{\n\t\tuint32 size = static_cast<uint32_t>(str.size());\n\t\toperator << (size);\n\t\tpush(str.data(), sizeof(char)*size);\n\t\treturn *this;\n\t}\n\n\tByteStream& ByteStream::operator <<( float f )\n\t{\n\t\tint32* p = (int32*)&f;\n\t\treturn ByteStream:: operator<<( *p );\n\t}\n\n\tByteStream& ByteStream::operator <<(double d)\n\t{\n\t\tint64* p = (int64*)&d;\n\t\treturn ByteStream:: operator<<(*p);\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/ByteStream.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <vector>\r\n# include <iomanip>\r\n# include \"core/system/Config.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\t/// Be sure to use STL objects from client's dll version by exporting this declaration (see warning C4251)\r\n\t//template class SIBR_EXPORT std::vector<uint8>;\r\n\r\n\t/**\r\n\t Used to manipulate stream of bytes.\r\n\t \\note This ByteStream stores integer using the network byte order (which is big endian).\r\n\t \\ingroup sibr_system\r\n\t*/\r\n\tclass SIBR_SYSTEM_EXPORT ByteStream\r\n\t{\r\n\tpublic:\r\n\r\n\t\t/** Stream endianness, always default to BigEndian. */\r\n\t\tenum Endianness\r\n\t\t{\r\n\t\t\tBigEndian = 0, // always default\r\n\t\t\tLittleEndian\r\n\t\t};\r\n\r\n\tpublic:\r\n\t\ttypedef std::vector<uint8>\tbytes;\t///< type used for storing bytes\r\n\r\n\t\t/// Constructor\r\n\t\tByteStream( void ) : _readPos(0), _valid(true) /*,_endianness(BigEndian)*/ { }\r\n\r\n\t\t/** Load all bytes from a file using the given filename\r\n\t\t* \\param filename the filename\r\n\t\t* \\return success boolean\r\n\t\t* */ \r\n\t\tbool load( const std::string& filename );\r\n\r\n\t\t/** Save all bytes to a file using the given filename\r\n\t\t *\\param filename file apth\r\n\t\t **/\r\n\t\tvoid\tsaveToFile( const std::string& filename );\r\n\r\n\t\t/** Append data to the current buffer\r\n\t\t *\\param data pointer to the data\r\n\t\t *\\param size size in bytes\r\n\t\t **/\r\n\t\tvoid push(const void* data, uint size);\r\n\r\n\t\t/** \\return true if the stream is opened and valid. */\r\n\t\toperator bool( void ) const { return _valid; }\r\n\r\n\t\t/** Write a bool to the stream.\r\n\t\t *\\param b input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( bool b );\r\n\r\n\t\t/** Write an 8bits-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( int8 i );\r\n\r\n\t\t/** Write a 16bits-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( int16 i );\r\n\r\n\t\t/** Write a 32bits-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( int32 i );\r\n\r\n\t\t/** Write a 64bits-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( int64 i );\r\n\r\n\t\t/** Write an 8bits-unsigned-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( uint8 i );\r\n\r\n\t\t/** Write a 16bits-unsigned-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( uint16 i );\r\n\r\n\t\t/** Write a 32bits-unsigned-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( uint32 i );\r\n\r\n\t\t/** Write a 64bits-unsigned-integer to the stream.\r\n\t\t *\\param i input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( uint64 i );\r\n\r\n\t\t/** Write a string to the stream.\r\n\t\t *\\param str input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<( const std::string& str );\r\n\r\n\t\t/** Write a float to the stream.\r\n\t\t *\\param f input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t *\\note Use the same endianness as for integers (not specified in IEEE 754).\r\n\t\t **/\r\n\t\tByteStream& operator <<( float f );\r\n\r\n\t\t/** Write a double to the stream.\r\n\t\t *\\param d input value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tByteStream& operator <<(double d);\r\n\r\n\t\t/** Read a bool from the stream.\r\n\t\t *\\param b output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( bool & b );\r\n\r\n\t\t/** Read an 8bits-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( int8& i );\r\n\r\n\t\t/** Read a 16bits-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( int16& i );\r\n\r\n\t\t/** Read a 32bits-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( int32& i );\r\n\r\n\t\t/** Read a 64bits-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( int64& i );\r\n\r\n\t\t/** Read an 8bits-unsigned-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( uint8& i );\r\n\r\n\t\t/** Read a 16bits-unsigned-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( uint16& i );\r\n\r\n\t\t/** Read a 32bits-unsigned-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( uint32& i );\r\n\r\n\t\t/** Read a 64bits-unsigned-integer from the stream.\r\n\t\t *\\param i output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( uint64 & i );\r\n\r\n\t\t/** Read a string from the stream.\r\n\t\t *\\param str output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( std::string& str );\r\n\r\n\t\t/** Read a float from the stream.\r\n\t\t *\\param f output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t *\\note Use the same endianness as for integers (not specified in IEEE 754).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>( float& f );\r\n\r\n\t\t/** Read a double from the stream.\r\n\t\t *\\param d output value\r\n\t\t *\\return the stream (for chaining).\r\n\t\t **/\r\n\t\tinline ByteStream& operator >>(double& d);\r\n\r\n\t\t/** \\return the number of bytes that have not been read yet.*/\r\n\t\tinline size_t\treadableSize( void ) const;\r\n\t\t/** \\return the total number of bytes in the buffer used by the stream*/\r\n\t\tinline size_t\tbufferSize( void ) const;\r\n\t\t/** \\return a pointer to the buffer */\r\n\t\tinline const uint8*\tbuffer( void ) const { return &_buffer[0]; }\r\n\r\n\t\t// We don't want to include network-related libs (and all their stuffs), so we use a custom implementation of htonl/htons, ntohl/ntohs.\r\n\r\n\t\t/** Convert an uint32 from host to network byte order (which is big endian)\r\n\t\t *\\param n host order value\r\n\t\t *\\return network order value\r\n\t\t **/\r\n\t\tstatic uint64\thtonll(uint64 n);\r\n\r\n\t\t/** Convert an uint32 from host to network byte order (which is big endian)\r\n\t\t *\\param n host order value\r\n\t\t *\\return network order value\r\n\t\t **/\r\n\t\tstatic uint32\thtonl( uint32 n );\r\n\r\n\t\t/** Convert an uint16 from host to network byte order (which is big endian)\r\n\t\t *\\param n host order value\r\n\t\t *\\return network order value\r\n\t\t **/\r\n\t\tstatic uint16\thtons( uint16 n );\r\n\r\n\t\t/** Convert an uint32 from network to host byte order\r\n\t\t *\\param n network order value\r\n\t\t *\\return host order value\r\n\t\t **/\r\n\t\tinline static uint64\tntohll(uint64 n);\r\n\r\n\t\t/** Convert an uint32 from network to host byte order\r\n\t\t *\\param n network order value\r\n\t\t *\\return host order value\r\n\t\t **/\r\n\t\tinline static uint32\tntohl( uint32 n );\r\n\r\n\t\t/** Convert an uint16 from network to host byte order\r\n\t\t *\\param n network order value\r\n\t\t *\\return host order value\r\n\t\t **/\r\n\t\tinline static uint16\tntohs( uint16 n );\r\n\r\n\t\t/** \\return true if the current system runs using Big Endian **/\r\n\t\tstatic bool systemIsBigEndian( void );\r\n\r\n\t\t// (Not used for now: future features to change how are stored float)\r\n\t\t// void\t\tsetEndianness( Endianness e );\r\n\t\t// Endianness\tgetEndianness( void );\r\n\r\n\t\t/** Dump the buffer contents to stdout. (used for debugging purposes)\r\n\t\t **/\r\n\t\tvoid\t\t\tmemoryDump( void ) const;\r\n\r\n\tprivate:\r\n\t\t/** Test if we can read n bytes in the buffer.\r\n\t\t *\\param n the number of bytes to check\r\n\t\t *\\return false if it fails (and set valid flag to false).\r\n\t\t **/\r\n\t\tinline bool\t\ttestSize( uint n );\r\n\r\n\t\tbytes\t\t_buffer;\t///< the whole stream\r\n\t\tuint32\t\t_readPos;   ///< Current position in the buffer when reading.\r\n\t\tbool\t\t_valid;\t\t///< tells if no error occured when reading\r\n\t\t// Endianness\t_endianness;\r\n\r\n\t};\r\n\r\n\t\t///// INLINE FUNCTIONS /////\r\n\t\tsize_t\tByteStream::readableSize( void ) const {\r\n\t\t\treturn bufferSize() - _readPos;\r\n\t\t}\r\n\t\tsize_t\tByteStream::bufferSize( void ) const {\r\n\t\t\treturn _buffer.size();\r\n\t\t}\r\n\r\n\t\tuint64\tByteStream::ntohll(uint64 n) {\r\n\t\t\treturn htonll(n);\r\n\t\t}\r\n\t\tuint32\tByteStream::ntohl( uint32 n ) {\r\n\t\t\treturn htonl(n);\r\n\t\t}\r\n\t\tuint16\tByteStream::ntohs( uint16 n ) {\r\n\t\t\treturn htons(n);\r\n\t\t}\r\n\t\tbool\t\tByteStream::testSize( uint n ) {\r\n\t\t\treturn (_valid = (_valid && (readableSize() >= n)));\r\n\t\t}\r\n\r\n\t\tByteStream& ByteStream::operator >>( bool& b ) {\r\n\t\t\tuint8 i;\r\n\t\t\tByteStream::operator >>(i);\r\n\t\t\tb = (i != 0);\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( int8& i ) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = *reinterpret_cast<int8*>(&_buffer[_readPos]);\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( int16& i ) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohs(*reinterpret_cast<int16*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\r\n\t\tByteStream& ByteStream::operator >>( int32& i )  {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohl(*reinterpret_cast<int32*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>(int64& i) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohll(*reinterpret_cast<int64*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\r\n\t\tByteStream& ByteStream::operator >>( uint8& i )  {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = *reinterpret_cast<uint8*>(&_buffer[_readPos]);\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( uint16& i ) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohs(*reinterpret_cast<uint16*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( uint32& i ) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohl(*reinterpret_cast<uint32*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>(uint64& i) {\r\n\t\t\tif (testSize(sizeof(i)))\r\n\t\t\t{\r\n\t\t\t\ti = ntohll(*reinterpret_cast<uint64*>(&_buffer[_readPos]));\r\n\t\t\t\t_readPos += sizeof(i);\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( std::string& str ) {\r\n\t\t\tuint32 size;\r\n\t\t\toperator >> (size);\r\n\t\t\tstr.resize(size);\r\n\r\n\t\t\tif (testSize(sizeof(char)*size))\r\n\t\t\t{\r\n\t\t\t\tstr.insert(str.begin(), \r\n\t\t\t\t\treinterpret_cast<char*>(&_buffer[_readPos]), \r\n\t\t\t\t\treinterpret_cast<char*>(&_buffer[_readPos + size]));\r\n\t\t\t\t_readPos += sizeof(char)*size;\r\n\t\t\t}\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( float& f ) {\r\n\t\t\tint32 p;\r\n\t\t\tByteStream::operator>> (p);\r\n\t\t\tchar* ptr = (char*)&p;\r\n\t\t\tfloat *fptr = (float*)ptr;\r\n\t\t\tif (_valid)\r\n\t\t\t\tf = *fptr;\r\n\t\t\treturn *this;\r\n\t\t}\r\n\t\tByteStream& ByteStream::operator >>( double& d ) {\r\n\t\t\tint64 p;\r\n\t\t\tByteStream::operator>> (p);\r\n\t\t\tchar* ptr = (char*)&p;\r\n\t\t\tdouble *fptr = (double*)ptr;\r\n\t\t\tif (_valid)\r\n\t\t\t\td = *fptr;\r\n\t\t\treturn *this;\r\n\t\t}\r\n\r\n\t\t// Function used to test this class (might be still useful to test future improvement)\r\n\t\t/*\r\n\t\tstatic void unitTestByteStream( void )\r\n\t\t{\r\n\t\t\tSIBR_LOG << \"[work in progress] - testing ByteStream\" << std::endl;\r\n\r\n\t\t\tstruct SomeData {\r\n\t\t\t\tbool b;\r\n\t\t\t\tint8 s8;\r\n\t\t\t\tuint8 u8;\r\n\t\t\t\tint16 s16;\r\n\t\t\t\tuint16 u16;\r\n\t\t\t\tint32 s32;\r\n\t\t\t\tuint32 u32;\r\n\t\t\t\tfloat f;\r\n\r\n\t\t\t\tvoid dump( void ) {\r\n\t\t\t\t\tSIBR_DEBUG(b);\r\n\t\t\t\t\tSIBR_DEBUG(s8);\r\n\t\t\t\t\tSIBR_DEBUG(u8);\r\n\t\t\t\t\tSIBR_DEBUG(s16);\r\n\t\t\t\t\tSIBR_DEBUG(u16);\r\n\t\t\t\t\tSIBR_DEBUG(s32);\r\n\t\t\t\t\tSIBR_DEBUG(u32);\r\n\t\t\t\t\tSIBR_DEBUG(f);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tSomeData di = {true, -30, 120, -12000, 23000, -1234567, 2345678, 2.8f};\r\n\t\t\tstd::cout << \"Dumping DataIN:\" << std::endl;\r\n\t\t\tdi.dump();\r\n\r\n\t\t\tsibr::ByteStream bytes;\r\n\r\n\t\t\tbytes << di.b << di.s8 << di.u8 << di.s16 << di.u16 << di.s32 << di.u32 << di.f;\r\n\t\t\tSomeData dout = {false, 0, 0, 0, 0, 0, 0, 0.f};\r\n\t\t\tstd::cout << \"Dumping DataOUT:\" << std::endl;\r\n\t\t\tdout.dump();\r\n\r\n\t\t\tbytes.memoryDump();\r\n\r\n\r\n\t\t\tbytes >> dout.b >> dout.s8 >> dout.u8 >> dout.s16 >> dout.u16 >> dout.s32 >> dout.u32 >> dout.f;\r\n\t\t\tstd::cout << \"Dumping DataOUT:\" << std::endl;\r\n\t\t\tdout.dump();\r\n\t\t}\r\n\t\t*/\r\n\r\n\t} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nproject(sibr_system)\r\n\r\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\r\nsource_group(\"Source Files\" FILES ${SOURCES})\r\n\r\n## Specify target rules\r\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\r\n\r\ninclude_directories(\r\n\t${Boost_INCLUDE_DIRS}\r\n\t${picojson_INCLUDE_DIRS}\r\n\t${rapidxml_INCLUDE_DIRS}\r\n)\r\nif (WIN32)\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\tpicojson\r\n\trapidxml\r\n\tnfd\r\n)\r\nelse()\r\ntarget_link_libraries(${PROJECT_NAME}\r\n\t${Boost_LIBRARIES}\r\n\tpicojson\r\n\trapidxml\r\n\tnativefiledialog\r\n)\r\nendif()\r\n\r\nadd_definitions( -DSIBR_SYSTEM_EXPORTS -DBOOST_ALL_DYN_LINK  )\r\n\r\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\r\n\r\n## High level macro to install in an homogen way all our ibr targets\r\ninclude(install_runtime)\r\nibr_install_target(${PROJECT_NAME}\r\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\r\n)\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/CommandLineArgs.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/system/CommandLineArgs.hpp\"\n#include \"core/system/Utils.hpp\"\n\n\nnamespace sibr\n{\n\tCommandLineArgs CommandLineArgs::global = CommandLineArgs();\n\n\tconst CommandLineArgs & getCommandLineArgs()\n\t{\n\t\treturn CommandLineArgs::getGlobal();\n\t}\n\n\tCommandLineArgs & CommandLineArgs::getGlobal()\n\t{\n\t\tstatic bool first = true;\n\t\tif (!global.init && first) {\n\t\t\tSIBR_WRG << \"CommandLineArgs::parseMainArgs(ac, av) was not called rigth after main(ac, av) \\n default value (empty command line) will be used\" << std::endl;\n\t\t\tfirst = false;\n\t\t}\n\t\treturn global;\n\t}\n\n\tvoid CommandLineArgs::parseMainArgs(const int argc, const char * const * argv)\n\t{\n\t\tstatic const std::vector<std::string> acceptable_prefixes = { \"--\", \"-\" };\n\n\t\tglobal.args.clear();\n\n\t\tglobal.args[\"app_path\"] = { std::string(argv[0])};\n\n\t\tstd::string current_arg;\n\t\tfor (int i = 1; i < argc; ++i) {\n\t\t\tstd::string arg = std::string(argv[i]);\n\t\t\tbool new_arg = false;\n\t\t\tfor (const auto & prefix : acceptable_prefixes) {\n\t\t\t\tif (arg.substr(0, prefix.size()) == prefix) {\n\t\t\t\t\tcurrent_arg = arg.substr(prefix.size());\n\t\t\t\t\tnew_arg = true;\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current_arg.empty()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (new_arg) {\n\t\t\t\tif (global.args.count(current_arg) > 0) {\n\t\t\t\t\tSIBR_WRG << \"Collision for argument : \" << arg << std::endl;\n\t\t\t\t} else {\n\t\t\t\t\tglobal.args[current_arg] = {};\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tglobal.args[current_arg].push_back(arg);\n\t\t\t}\n\t\t}\n\n\t\tglobal.init = true;\n\t}\n\n\tbool CommandLineArgs::contains(const std::string & key) const\n\t{\n\t\treturn args.count(key) > 0;\n\t}\n\n\tint CommandLineArgs::numArguments(const std::string & key) const\n\t{\n\t\tif (contains(key)) {\n\t\t\treturn (int)args.at(key).size();\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t}\n\n\n\tvoid CommandLineArgs::displayHelp() const {\n\t\t// Find the maximum length.\n\t\tsize_t maxLength = 0;\n\t\tfor (const auto & command : commands) {\n\t\t\tmaxLength = std::max(maxLength, command.first.size());\n\t\t}\n\n\t\tconst Path path = args.at(\"app_path\")[0];\n\t\tSIBR_LOG << \"Help for \" << path.filename().string() << \":\" << std::endl;\n\t\tfor(const auto & command : commands) {\n\t\t\t// Pad to align everything.\n#ifdef WIN32 // green\n\t\t\tstd::string req = \"[required]\";\n\t\t\tstd::string sec = command.second, xx;\n\t\t\tbool tgreen = false;\n\t\t\tif(sec.substr(sec.size()-req.size(), req.size()+1) == req) {\n\t\t\t\tsetupConsole();\n\t\t\t\tprintf(\"\\x1b[32m\");\n\t\t\t\ttgreen = true;\n\t\t\t}\n#endif\n\t\t\tstd::cout << \"\\t\" << \"--\" << command.first;\n\t\t\tstd::cout << std::string(int(maxLength) - command.first.size() + 1, ' ');\n\t\t\tstd::cout << command.second << std::endl;\n\n#ifdef WIN32\n\t\t\tif( tgreen )\n\t\t\t\trestoreConsole();\n#endif\n\t\t}\n\t\tstd::cout << std::endl;\n\t}\n\t\n\tvoid CommandLineArgs::registerCommand(const std::string & key, const std::string & description, const std::string & defaultValue) {\n\t\t// Register the command.\n\t\tstd::string defaultDesc = description.empty() ? \"\" : \" \";\n\t\tdefaultDesc.append(\"(default: \" + defaultValue + \")\");\n\t\tcommands[key] = description + defaultDesc;\n\t}\n\n\tvoid CommandLineArgs::registerRequiredCommand(const std::string & key, const std::string & description) {\n\t\t// Register the command.\n\t\tstd::string defaultDesc = description.empty() ? \"\" : \" \";\n\t\tdefaultDesc.append(\"[required]\");\n\t\tcommands[key] = description + defaultDesc;\n\t}\n\n\n\tAppArgs::AppArgs()\n\t{\n\t\tPath path = CommandLineArgs::getGlobal().getRequired<std::string>(\"app_path\");\n\t\tappName = path.filename().string();\n\t\tappPath = path.parent_path().string();\n\t}\n\n\tvoid AppArgs::displayHelpIfRequired() const {\n\t\tif(showHelp.get()) {\n\t\t\tgetCommandLineArgs().displayHelp();\n\t\t}\n\t}\n\n} // namespace sirb\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/CommandLineArgs.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <string>\n# include <vector>\n# include <map>\n\n# include \"Config.hpp\"\n# include <core/system/Vector.hpp>\n\nnamespace sibr\n{\n\t/**\n\t\\addtogroup sibr_system\n\t@{\n\t*/\n\n\t/// Used to wrap a toggle argument in the command line.\n\tstruct Switch {};\n\n\t/// uint contexpr helper, defining the number of command line tokens required to init T\n\ttemplate<typename T>\n\tconstexpr uint NumberOfArg = 1;\n\t/// uint contexpr helper, defining the number of command line tokens required to init T\n\ttemplate<>\n\tconstexpr uint NumberOfArg<bool> = 0;\n\t/// uint contexpr helper, defining the number of command line tokens required to init T\n\ttemplate<>\n\tconstexpr uint NumberOfArg<Switch> = 0;\n\t/// uint contexpr helper, defining the number of command line tokens required to init T\n\ttemplate<typename T, uint N>\n\tconstexpr uint NumberOfArg<sibr::Vector<T, N>> = N * NumberOfArg<T>;\n\n\t/// Helper to extract values from a vector of strings.\n\ttemplate<typename T> struct ValueGetter {\n\n\t\t/** Extract the N-th element from a vector of string representations.\n\t\t\\param values a list of strings representing elements\n\t\t\\param n the index of the element to query\n\t\t\\return the element corresponding to the N-th string.\n\t\t*/\n\t\tstatic T get(const std::vector<std::string> & values, uint n);\n\n\t\t/** Convert an element to its string representation.\n\t\t\\param value the element to convert\n\t\t\\return the string representation\n\t\t*/\n\t\tstatic std::string toString(const T & value);\n\t};\n\n\t/** Available rendering modes for IBR views. */\n\tenum RenderingModes {\n\t\tRENDERMODE_MONO,\n\t\tRENDERMODE_STEREO_ANAGLYPH,\n\t\tRENDERMODE_STEREO_QUADBUFFER\n\t};\n\n\n\n\t/** @} */\n\n\t/* Parse and store the command line arguments specified by the user.\n\t* Only a static instance exists, that must be init with parseMainArgs(argc,argv) right after main(argc,argv)\n\t* Parses -key or --key with any number of value.\n\t* \\ingroup sibr_system\n\t*/\n\tclass SIBR_SYSTEM_EXPORT CommandLineArgs {\n\n\tpublic:\n\n\t\t/** Populate arguments list, should be called once at launch.\n\t\t * \\param argc argument count\n\t\t * \\param argv argument list\n\t\t * */\n\t\tstatic void parseMainArgs(const int argc, const char* const* argv);\n\n\t\t/** Get the Nth parsed element following -key or --key as a T \n\t\t* If not available (key not found or not enough token), return default_val argument\n\t\t* \\param key the argument keyword\n\t\t* \\param default_val the default value to use if not present\n\t\t* */\n\t\ttemplate<typename T, uint N = 0>\n\t\tT get(const std::string & key, const T & default_val) const {\n\t\t\tT out;\n\t\t\tif (getInternal<T,N>(key, out)) {\n\t\t\t\treturn out;\n\t\t\t} else {\n\t\t\t\treturn default_val;\n\t\t\t}\n\t\t}\n\n\t\t/** Get the Nth parsed element following -key or --key as a T\n\t\t* If not available (key not found or not enough token), an error is raised.\n\t\t* \\param key the argument keyword\n\t\t* */\n\t\ttemplate<typename T, uint N = 0>\n\t\tT getRequired(const std::string & key) const {\n\t\t\tT out;\n\t\t\tif (!getInternal(key, out)) {\n\t\t\t\tSIBR_ERR;\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\t/** Register a command for the help message.\n\t\t * \\param key the command\n\t\t * \\param description a string describing the use of the command\n\t\t * \\param defaultValue string representation of the default value\n\t\t */\n\t\tvoid registerCommand(const std::string & key, const std::string & description, const std::string & defaultValue);\n\n\t\t/** Register a mandatory command for the help message.\n\t\t * \\param key the command\n\t\t * \\param description a string describing the use of the command\n\t\t */\n\t\tvoid registerRequiredCommand(const std::string & key, const std::string & description);\n\n\t\t/** Check if a given argument was specified by the user.\n\t\t *\\param key the argument to look for\n\t\t *\\return whether the argument was specified\n\t\t */\n\t\tbool contains(const std::string & key) const;\n\n\t\t/** Count how many parameters were specified by the suer for a given argument.\n\t\t *\\param key the argument to look for\n\t\t *\\return the number of parameters\n\t\t */\n\t\tint numArguments(const std::string & key) const;\n\n\t\t/** Global instance getter. */\n\t\tstatic CommandLineArgs & getGlobal();\n\n\t\t/** Display an help message to stdout. */\n\t\tvoid displayHelp() const;\n\n\tprotected:\n\n\t\t/// Default constructor.\n\t\tCommandLineArgs() = default;\n\n\t\t/** Get the Nth parsed element following -key or --key as a T\n\t\t* If not available (key not found or not enough token), an error is raised.\n\t\t* */\n\t\ttemplate<typename T, uint N = 0>\n\t\tbool getInternal(const std::string & key, T & val) const {\n\t\t\tif (contains(key) && (N + 1)*NumberOfArg<T> <= args.at(key).size()) {\n\t\t\t\tval = ValueGetter<T>::get(args.at(key), N);\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tstd::map<std::string, std::vector<std::string>> args; ///< List of arguments input by the user and their parameters.\n\t\tstd::map<std::string, std::string> commands; ///< List of registered commands to display the help.\n\t\tbool init = false; ///< Have the arguments been parsed.\n\n\t\tstatic CommandLineArgs global;///< Singleton (because there is only one command line).\n\t};\n\n\t/** Getter for the command line args manager singleton.\n\t* \\ingroup sibr_system\n\t */\n\tSIBR_SYSTEM_EXPORT const CommandLineArgs & getCommandLineArgs();\n\n\t/** Internal argument based interface.\n\t* \\ingroup sibr_system*/\n\ttemplate<typename T>\n\tclass ArgBase {\n\tpublic:\n\n\t\t/// \\return a reference to the argument value\n\t\toperator const T &() const { return _value; }\n\n\t\t/// \\return a reference to the argument value\n\t\tconst T & get() const { return _value; }\n\n\t\t/** Copy operator.\n\t\t\\param t the value to copy\n\t\t\\return a reference to the argument value\n\t\t*/\n\t\tT & operator=(const T & t) { _value = t; return _value; }\n\n\tprotected:\n\n\t\tT _value; ///< the argument value.\n\t};\n\n\t/** Template Arg class, will init itself in the defaut ctor using the command line args (ie. --key value)\n\t* Should be declared as some class/struct member using Arg<T> myArg = { \"key\", some_default_value };\n\t* is implicitly convertible to the template type\n\t* \\note As multiple implicit conversion is not possible in cpp, you might have to use the .get() method to access the inner T value\n\t* \\ingroup sibr_system\n\t* */\n\ttemplate<typename T>\n\tclass Arg : public ArgBase<T> {\n\tpublic:\n\t\t/** Constructor\n\t\t *\\param key the command argument\n\t\t *\\param default_value the default value\n\t\t *\\param description help message description\n\t\t */\n\t\tArg(const std::string & key, const T & default_value, const std::string & description = \"\") {\n\t\t\tthis->_value = CommandLineArgs::getGlobal().get<T>(key, default_value);\n\t\t\t// \\todo We could display default values if we had a common stringization method.\n\t\t\tCommandLineArgs::getGlobal().registerCommand(key, description, ValueGetter<T>::toString(default_value));\n\t\t}\n\t\tusing ArgBase<T>::operator=;\n\t};\n\n\t/// Specialization of Arg for Switch, default value get flipped if arg is present\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tclass Arg<Switch> : public ArgBase<bool> {\n\tpublic:\n\t\t/** Constructor\n\t\t *\\param key the command argument\n\t\t *\\param default_value the default boolean value\n\t\t *\\param description help message description\n\t\t */\n\t\tArg(const std::string & key, const bool & default_value, const std::string & description = \"\") {\n\t\t\tconst bool arg_is_present = CommandLineArgs::getGlobal().get<bool>(key, false);\n\t\t\tif (arg_is_present) {\n\t\t\t\t_value = !default_value;\n\t\t\t} else {\n\t\t\t\t_value = default_value;\n\t\t\t}\n\t\t\tconst std::string defaultDesc = (default_value ? \"enabled\" : \"disabled\");\n\t\t\tCommandLineArgs::getGlobal().registerCommand(key, description, defaultDesc);\n\t\t}\n\n\t\tusing ArgBase<bool>::operator=;\n\t};\n\tusing ArgSwitch = Arg<Switch>;\n\n\t/// Specialization of Arg for bool, value is true if key is present and false otherwise\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tclass Arg<bool> : public ArgBase<bool> {\n\tpublic:\n\t\t/** Constructor\n\t\t *\\param key the command argument\n\t\t *\\param description help message description\n\t\t *\\note Will default to false\n\t\t */\n\t\tArg(const std::string & key, const std::string & description = \"\") {\n\t\t\tconst bool arg_is_present = CommandLineArgs::getGlobal().get<bool>(key, false);\n\t\t\t_value = arg_is_present;\n\t\t\tCommandLineArgs::getGlobal().registerCommand(key, description, \"disabled\");\n\t\t}\n\n\t\tusing ArgBase<bool>::operator=;\n\t};\n\n\t/// Represent a mandatory argument\n\t/// \\ingroup sibr_system\n\ttemplate<typename T>\n\tclass RequiredArgBase {\n\tpublic:\n\t\t/** Constructor\n\t\t *\\param _key the command argument\n\t\t *\\param description help message description\n\t\t */\n\t\tRequiredArgBase(const std::string & _key, const std::string & description = \"\") : key(_key) {\n\t\t\tif (CommandLineArgs::getGlobal().contains(key)) {\n\t\t\t\t_value = CommandLineArgs::getGlobal().get<T>(key, _value);\n\t\t\t\twasInit = true;\n\t\t\t}\n\t\t\tCommandLineArgs::getGlobal().registerRequiredCommand(key, description);\n\t\t}\n\n\t\t/// \\return a reference to the argument value\n\t\toperator const T &() const { checkInit(); return _value; }\n\n\t\t/// \\return a reference to the argument value\n\t\tconst T & get() const { checkInit(); return _value; }\n\n\t\t/** Copy operator.\n\t\t\\param t the value to copy\n\t\t\\return a reference to the argument value\n\t\t*/\n\t\tT & operator=(const T & t) { _value = t; wasInit = true; return _value; }\n\n\t\t/// \\return true if the argument was given\n\t\tconst bool & isInit() const { return wasInit; }\n\n\tprotected:\n\n\t\t/** Check if the argument was init.If not, as it is a required argument we display the help message and raise an error.*/\n\t\tvoid checkInit() const {\n\t\t\tif (!wasInit) {\n\t\t\t\tCommandLineArgs::getGlobal().displayHelp();\n\t\t\t\tSIBR_ERR << \"Argument \\\"\" << key << \"\\\" is required.\" << std::endl;\n\t\t\t}\n\t\t}\n\n\t\tstd::string key; ///< Argument key.\n\t\tT _value; ///< Argument value.\n\t\tbool wasInit = false; ///< Was the argument initialized.\n\t};\n\n\t/// Similar to Arg, except this one will crash if attempt to use the value while not initialized\n\t/// initialization can be done using the command line or manually\n\t/// \\ingroup sibr_system\n\ttemplate<typename T>\n\tclass RequiredArg : public RequiredArgBase<T> {\n\t\tusing RequiredArgBase<T>::RequiredArgBase;\n\t};\n\n\t/// Specialization required for std::string as const string & key constructor and const T & constructor are ambiguous. \n\t/// TT : no const T & ctor anymore but operator const char*() const operator added\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tclass RequiredArg<std::string> : public RequiredArgBase<std::string> {\n\t\t\n\tpublic:\n\t\tusing RequiredArgBase<std::string>::RequiredArgBase;\n\t\tstd::string & operator=(const std::string & t) { _value = t; wasInit = true; return _value; }\n\n\t\toperator const char*() const { checkInit(); return _value.c_str(); }\n\t};\n\n\t/// Hierarchy of Args classes that can be seens as modules, and can be combined using virtual inheritance, with no duplication of code so derived Args has no extra work to do\n\t/// Assuming CommandLineArgs::parseMainArgs() was called once, Args arguments will be automatically initialized with the value from the command line by the constructor\n\t/// Existing Args structs should cover most of the existing IBR apps\n\t/// To add a new argument like --my-arg 5 on top of existing arguments and\n\t/// to add a new required argument like --important-param \"on\" on top of existing arguments, do the following:\n\t///\n\t/// struct SIBR_SYSTEM_EXPORT MyArgs : virtual ExistingArg1, virtual ExistingArgs2, ... {\n\t///\t\tArg<int> myParameter = { \"my-arg\", some_default_value };\n\t///\t\tRequiredArg<std::string> myRequiredParameter = { \"important-param\" };\n\t/// }\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT AppArgs {\n\t\t/// Constructor\n\t\tAppArgs();\n\n\t\tstd::string appName;\n\t\tstd::string appPath;\n\t\tArg<std::string> custom_app_path = { \"appPath\", \"./\", \"define a custom app path\" };\n\t\tArg<bool> showHelp = {\"help\", \"display this help message\"};\n\n\t\t/// Helper to print the help message if the help argument was passed.\n\t\tvoid displayHelpIfRequired() const;\n\n\t\t// offline path rendering options\n\t\tArg<bool> noExit = {\"noExit\", \"dont exit after rendering path \"};\n\t\tArg<std::string> pathFile = { \"pathFile\", \"\", \"filename of path to render offline; app renders path and exits\" }; // app needs to handle this; if it does default behavior is to render the path and exit\n\t\tArg<std::string> outPath = { \"outPath\", \"pathOutput\", \"Path of directory to store path output default relative the input path directory \" }; // app needs to handle this; if it does default behavior is to render the path and exit\n\n\t};\n\n\t/// Arguments related to a window.\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT WindowArgs {\n\t\tArg<int> win_width = { \"width\", 720, \"initial window width\" };\n\t\tArg<int> win_height = { \"height\", 480, \"initial window height\" };\n\t\tArg<int> vsync = { \"vsync\", 1, \"enable vertical sync\" };\n\t\tArg<bool> fullscreen = { \"fullscreen\", \"set the window to fullscreen\" };\n\t\tArg<bool> hdpi = { \"hd\", \"rescale UI elements for high-density screens\" };\n\t\tArg<bool> no_gui = { \"nogui\", \"do not use ImGui\" };\n\t\tArg<bool> gl_debug = { \"gldebug\", \"enable OpenGL error callback\" };\n\t\tArg<bool> offscreen = { \"offscreen\", \"do not open window\" };\n\t};\n\n\t/// Combination of window and application arguments.\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT WindowAppArgs :\n\t\tvirtual AppArgs, virtual WindowArgs {\n\t};\n\n\t/// Common rendering settings.\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT RenderingArgs {\n\t\tArg<std::string> scene_metadata_filename = { \"scene\", \"scene_metadata.txt\", \"scene metadata file\" };\n\t\tArg<Vector2i> rendering_size = { \"rendering-size\", { 0, 0 }, \"size at which rendering is performed\" };\n\t\tArg<int> texture_width = { \"texture-width\", 0 , \"size of the input data in memory\"};\n\t\tArg<float> texture_ratio = { \"texture-ratio\", 1.0f };\n\t\tArg<int> rendering_mode = { \"rendering-mode\", RENDERMODE_MONO, \"select mono (0) or stereo (1) rendering mode\" };\n\t\tArg<sibr::Vector3f> focal_pt = { \"focal-pt\", {0.0f, 0.0f, 0.0f} };\n\t\tArg<Switch> colmap_fovXfovY_flag = { \"colmap_fovXfovY_flag\", false };\n\t\tArg<Switch> force_aspect_ratio = { \"force-aspect-ratio\", false };\n\t};\n\n\t/// Dataset related arguments.\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT BasicDatasetArgs {\n\t\tRequiredArg<std::string> dataset_path = { \"path\", \"path to the dataset root\" };\n\t\tArg<std::string> dataset_type = { \"dataset_type\", \"\", \"type of dataset\" };\n\t};\n\n\t/// \"Default\" set of arguments.\n\t/// \\ingroup sibr_system\n\tstruct SIBR_SYSTEM_EXPORT BasicIBRAppArgs :\n\t\tvirtual WindowAppArgs, virtual BasicDatasetArgs, virtual RenderingArgs {\n\t};\n\n\t/// Specialization of value getter for strings.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<std::string> {\n\t\tstatic std::string get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn values[n];\n\t\t}\n\t\tstatic std::string toString(const std::string & value) {\n\t\t\treturn \"\\\"\" + value + \"\\\"\";\n\t\t}\n\t};\n\n\t/// Specialization of value getter for booleans.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<bool> {\n\t\tstatic bool get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn true;\n\t\t}\n\t\tstatic std::string toString(const bool & value) {\n\t\t\treturn value ? \"true\" : \"false\";\n\t\t}\n\t};\n\n\t/// Specialization of value getter for doubles.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<double> {\n\t\tstatic double get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn std::stod(values[n]);\n\t\t}\n\t\tstatic std::string toString(const double & value) {\n\t\t\treturn std::to_string(value);\n\t\t}\n\t};\n\n\t/// Specialization of value getter for floats.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<float> {\n\t\tstatic float get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn std::stof(values[n]);\n\t\t}\n\t\tstatic std::string toString(const float & value) {\n\t\t\treturn std::to_string(value);\n\t\t}\n\t};\n\n\t/// Specialization of value getter for integers.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<int> {\n\t\tstatic int get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn std::stoi(values[n]);\n\t\t}\n\t\tstatic std::string toString(const int & value) {\n\t\t\treturn std::to_string(value);\n\t\t}\n\t};\n\n\t/// Specialization of value getter for chars.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<char> {\n\t\tstatic char get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn static_cast<char>(std::stoi(values[n]));\n\t\t}\n\t\tstatic std::string toString(const char & value) {\n\t\t\treturn std::to_string(value);\n\t\t}\n\t};\n\n\t/// Specialization of value getter for unsigned integers.\n\t/// \\ingroup sibr_system\n\ttemplate<>\n\tstruct ValueGetter<uint> {\n\t\tstatic uint get(const std::vector<std::string> & values, uint n) {\n\t\t\treturn static_cast<uint>(std::stoi(values[n]));\n\t\t}\n\t\tstatic std::string toString(const uint & value) {\n\t\t\treturn std::to_string(value);\n\t\t}\n\t};\n\n\t/// Specialization of value getter for arrays.\n\t/// \\ingroup sibr_system\n\ttemplate<typename T, uint N>\n\tstruct ValueGetter<std::array<T, N>> {\n\t\tstatic std::array<T, N> get(const std::vector<std::string> & values, uint n) {\n\t\t\tstd::array<T, N> out;\n\t\t\tfor (uint i = 0; i < N; ++i) {\n\t\t\t\tout[i] = ValueGetter<T>::get(values, n*N*NumberOfArg<T> + i);\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tstatic std::string toString(const std::array<T, N> & value) {\n\t\t\tstd::string res = \"(\";\n\t\t\tfor (uint i = 0; i < N; ++i) {\n\t\t\t\tres.append(ValueGetter<T>::toString(value[i]));\n\t\t\t\tif (i != N - 1) {\n\t\t\t\t\tres.append(\",\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn res + \")\";\n\t\t}\n\t};\n\n\t/// Specialization of value getter for sibr::Vectors & eigen matrices.\n\t/// \\ingroup sibr_system\n\ttemplate<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>\n\tstruct ValueGetter<Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>> {\n\t\tstatic Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> get(const std::vector<std::string> & values, uint n) {\n\t\t\tEigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> out;\n\t\t\tfor (uint i = 0; i < _Rows*_Cols; ++i) {\n\t\t\t\tout[i] = ValueGetter<_Scalar>::get(values, n*_Rows*_Cols*NumberOfArg<_Scalar> + i);\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t\tstatic std::string toString(const Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> & value) {\n\t\t\tstd::string res = \"(\";\n\t\t\tfor (uint i = 0; i < _Rows*_Cols; ++i) {\n\t\t\t\tres.append(ValueGetter<_Scalar>::toString(value[i]));\n\t\t\t\tif(i != _Rows*_Cols-1) {\n\t\t\t\t\tres.append(\",\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn res + \")\";\n\t\t}\n\t};\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Config.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <mutex>\n#include \"core/system/Config.hpp\"\n\nstd::mutex\tgLogMutex;\n\nnamespace sibr\n{ \n\n\tLogExit::LogExit(void) :\n\t\tlock(gLogMutex)\n\t{ }\n\n\tvoid LogExit::operator <<=( const std::ostream& /*stream*/ )\n\t{\n\t\t// do exit, only profit a the rules of 'operator precedence'\n\t\t// to be executed after operator << when writing to the stream\n\t\t// itself.\n\t\t// So that this class is evaluated after writing the output and\n\t\t// it will exit (see dtor)\n\t\t//exit(EXIT_FAILURE);\n\t\tthrow std::runtime_error(\"See log for message errors\");\n\t}\n\n\tDebugScopeProfiler::~DebugScopeProfiler( void )\n\t{\n\t\tdouble t = double(clock() - _t0) / CLOCKS_PER_SEC;\n\t\tSIBR_LOG << \"[PROFILER] Scope '\" << _name <<\n\t\t\t\"' completed in \" << t << \"sec.\" << std::endl;\n\t}\n\n\tDebugScopeProfiler::DebugScopeProfiler( const std::string& name )\n\t\t: _name(name)\n\t{ \n\t\t_t0 = clock();\n\t}\n\n} // namespace sirb"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Config.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n//// Default includes ////\r\n# ifndef _USE_MATH_DEFINES\r\n# define _USE_MATH_DEFINES // for C++\r\n# endif\r\n# include <cmath>\r\n# include <cassert>\r\n# include <iostream>\r\n# include <string>\r\n# include <memory>\r\n# include <numeric>\r\n# include <algorithm>\r\n# include <mutex>\r\n# include <stdint.h>\r\n#include <boost/filesystem.hpp>\r\n\r\n//// Determine the operating system ////\r\n# if defined(_WIN32)\r\n#  define SIBR_OS_WINDOWS\r\n// Windows define macro for 'far' and 'near'...\r\n// http://stackoverflow.com/questions/118774/is-there-a-clean-way-to-prevent-windows-h-from-creating-a-near-far-macro\r\n// We could use other names than far and near but because we work in\r\n// computer graphics, I am sure that future guys will also try to\r\n// declare variables called far/near and loose time until finding\r\n// this is all because windows.\r\n\r\n// Edit: I wanted to do something about it (a warning message) but it\r\n// slow the compilation time (~5sec on my machine), so I let this code\r\n// but disabled by default.\r\n#  if SIBR_UNDEF_WINDOWMACROS\r\n// The strategy here is to undef macros AFTER including\r\n// headers that use them.\r\n#   pragma warning(push, 0)\r\n\r\n// Note including this file increase the compilation time\r\n// of the core libs by 5 additional seconds.\r\n#    include <windows.h>\r\n#    include <shlguid.h>\r\n#    include <commctrl.h>\r\n#    include <isguids.h>\r\n#    include <ShlObj.h>\r\n#   pragma warning(pop)\r\n#   undef far\r\n#   undef near\r\n#  endif // SIBR_UNDEF_WINDOWMACROS\r\n# elif defined(__unix__)\r\n#  define SIBR_OS_UNIX\r\n# elif defined(__APPLE__) && defined(__MACH__)\r\n#  define SIBR_OS_MAC\r\n# else\r\n#  error This operating system might be not supported.\r\n# endif\r\n\r\n//# undef NDEBUG /// \\todo By undefining NDEBUG, I enable the assert system definition. (TODO RELEASE: remove this)\r\n// (it certainly not a good pratice but it reveal previous assert already in the code)\r\n\r\n# ifdef SIBR_OS_WINDOWS\r\n\r\n#   pragma warning(disable:4503) // decorated name length exceeded, name was truncated\r\n//   The two following lines disable warning concerning 'inconsistent dll linkage'.\r\n//   MSVC doesn't like exporting STL containers because their implementation (their 'dll')\r\n//   can be different from one Windows to another. Unix garantees to provide a universal\r\n//   implementation and doesn't have this problem.\r\n//   My point of view is:\r\n//   - Make the code compliants with Windows' dlls will make us:\r\n//     1) lose lots of time (if we need to wrap STL containers each time we use them...)\r\n//     2) break the beauty of the code (we want to keep simple code).\r\n//   - Once we will release this code (for a large public), we should:\r\n//     1) Either explicitely export EVERY template/stl containers we use.\r\n//     2) Or provide msvc's dll (redistribuable) that contains the same stl implementation\r\n#   pragma warning(disable:4251)\r\n#   pragma warning(disable:4273)\r\n\r\n//// Export Macro (used for creating DLLs) ////\r\n#  ifdef SIBR_STATIC_DEFINE\r\n#    define SIBR_EXPORT\r\n#    define SIBR_NO_EXPORT\r\n#  else\r\n#    ifndef SIBR_SYSTEM_EXPORT\r\n#      ifdef SIBR_SYSTEM_EXPORTS\r\n          /* We are building this library */\r\n#        define SIBR_SYSTEM_EXPORT __declspec(dllexport)\r\n#      else\r\n          /* We are using this library */\r\n#        define SIBR_SYSTEM_EXPORT __declspec(dllimport)\r\n#      endif\r\n#    endif\r\n#    ifndef SIBR_NO_EXPORT\r\n#      define SIBR_NO_EXPORT\r\n#    endif\r\n#  endif\r\n# else\r\n#  define SIBR_SYSTEM_EXPORT\r\n# endif\r\n\r\n//// Deprecator Macro (used to flag as 'deprecated' some functionalities)  ////\r\n#ifndef SIBR_DEPRECATED\r\n#  define SIBR_DEPRECATED __declspec(deprecated)\r\n#endif\r\n\r\n//// Int To String Macro (used to convert int into string at compile-time) ////\r\n# define SIBR_MACROINTTOSTR_IMPL(x) #x\t\t// small trick to get __LINE__ into a string\r\n# define SIBR_MACROINTTOSTR(x) SIBR_MACROINTTOSTR_IMPL(x)\r\n//// Concatenate Macro (used to concatenate two things, whatever it is.    ////\r\n//// See SIBR_PROFILESCOPE for an example of use).                         ////\r\n# define SIBR_CATMACRO_IMPL(x, y) x ## y\r\n# define SIBR_CATMACRO(x, y) SIBR_CATMACRO_IMPL(x, y)\r\n\r\n//# if SIBR_OS_WINDOWS\r\n#  define __FUNCTION_STR__ __FUNCTION__\r\n//# else\r\n//#  define __FUNCTION_STR__ SIBR_MACROINTTOSTR(__FUNCTION__)\r\n//# endif\r\n\r\n// Macro used for\r\n// Use: #pragma message WARN(\"My message\")\r\n# if _MSC_VER\r\n#  define FILE_LINE_LINK __FILE__ \"(\" SIBR_MACROINTTOSTR(__LINE__) \") : \"\r\n#  define PRAGMAWARN(exp) (FILE_LINE_LINK \"WARNING: \" exp)\r\n# else//__GNUC__ - may need other defines for different compilers\r\n#  define PRAGMAWARN(exp) (\"WARNING: \" exp)\r\n# endif\r\n\r\n//// Math Macro ////\r\n# define SIBR_PI\t3.14159265358979323846\r\n# define SIBR_2PI (SIBR_PI * 2.0)\r\n\r\n# define SIBR_PI_DIV_180\t0.01745329251\r\n# define SIBR_180_DIV_PI\t57.2957795131\r\n\r\n# define SIBR_RADTODEG(x)\t((x) * (float)SIBR_180_DIV_PI) // ( (x) * (180.0f / PI) )\r\n# define SIBR_DEGTORAD(x)\t((x) * (float)SIBR_PI_DIV_180) // ( (x) * (PI / 180.0f) )\r\n\r\n//// Class Attribute Macro ////\r\n# define SIBR_DISALLOW_COPY( classname )\t\t\\\r\n\tprivate:\t\t\t\t\t\t\t\t\t\\\r\n\tclassname( const classname& );\t\t\t\t\\\r\n\tclassname& operator =( const classname& );\r\n\r\n# define SIBR_CLASS_PTR( classname )\t\t\t\\\r\n\tpublic:\t\t\t\t\t\t\t\t\t\t\\\r\n\ttypedef std::shared_ptr<classname>\tPtr;\t\\\r\n\ttypedef std::unique_ptr<classname>\tUPtr;\r\n\r\nnamespace sibr\r\n{\r\n\t/** Ensure that all logs are output before exiting when an error or exception is raised. \r\n\t\\ingroup sibr_system\r\n\t*/\r\n\tstruct SIBR_SYSTEM_EXPORT LogExit\r\n\t{\r\n\t\t/// Constructor.\r\n\t\tLogExit( void );\r\n\r\n\t\t/** Throw an exception and trigger exit.\r\n\t\t\\param stream the log stream.\r\n\t\t*/\r\n\t\tvoid operator <<=( const std::ostream& stream );\r\n\r\n\t\tstd::lock_guard<std::mutex>\t\tlock; ///< Sync lock.\r\n\t};\r\n}\r\n\r\n\r\n#ifdef NDEBUG\r\n# define SIBR_MAXIMIZE_INLINE\r\n#endif\r\n\r\n# ifdef SIBR_MAXIMIZE_INLINE\r\n#  define SIBR_OPT_INLINE\tinline\r\n# else\r\n#  define SIBR_OPT_INLINE\r\n# endif\r\n\r\n\r\n//// Log Macro ////\r\n# define SIBR_LOG\tstd::cout << \"[SIBR] --  INFOS  --:\\t\"\t\t\t// Must be replaced by a true log system\r\n# define SIBR_WRG\tstd::cout << \"[SIBR] !! WARNING !!:\\tFILE \" << __FILE__  << \"\\n\\t\\t\\tLINE \" << __LINE__ << \", FUNC \" << __FUNCTION_STR__ << \"\\n\\t\\t\\t\"\r\n# define SIBR_ERR ::sibr::LogExit() <<= \\\r\n\t\t\t\t\tstd::cerr << \"[SIBR] ##  ERROR  ##:\\tFILE \" << __FILE__  << \"\\n\\t\\t\\tLINE \" << __LINE__ << \", FUNC \" << __FUNCTION_STR__ << \"\\n\\t\\t\\t\"\t\t// Could be augmented for exiting\r\n\r\n// One drawback of using the standard assert is that you MUST catch the exception\r\n// it throws in order to display its message and know the error. Not everyone thinks\r\n// to do this (or want to add try/catch block in their code). Thus the solution here\r\n// is to, first display the message (btw we inform on the precise location where it\r\n// happens using __FILE__ and __LINE__) and then throw an exception (using the std\r\n// assert) so that we can retrieve the callstack easily for debugging).\r\n\r\n\r\n#ifdef NDEBUG\r\n# define SIBR_ASSERT(condition) ((void)0)\r\n# define SIBR_ASSERT_LOGIC(condition) (condition)\t// This assertion can contain code logic (this code will also be included at release)\r\n#else\r\n# define SIBR_ASSERT(condition)\t\t\tdo { if(!(condition)) { SIBR_WRG << \"ASSERT FAILED: \" #condition << std::endl; assert(condition); } } while(0)\r\n# define SIBR_ASSERT_LOGIC(condition)\tdo { if(!(condition)) { SIBR_WRG << \"ASSERT FAILED: \" #condition << std::endl; assert(condition); } } while(0)\r\n#endif\r\n\r\n// Small variants for adding function name\r\n# define SIBR_FLOG SIBR_LOG \"[\" << __FUNCTION_STR__ << \"]\"\r\n// Some code parts are written to manage additional or future features. They might remain untested\r\n// until they are required (avoiding losing time to test code that could be useless at the end).\r\n# define SIBR_UNTESTED\t\\\r\n\tSIBR_LOG << \"!Warning! Using an untested code flagged as potentially \"\t\t\\\r\n\t\"unstable. (if something goes wrong, check over here - \" __FILE__ \":\" << __LINE__ << \")\" << std::endl;\r\n# define SIBR_DEBUG(var) std::cout << __FILE__ \":\\n\" \"[Debug] \" #var \" = \"<< (var) << std::endl\t\t// No access to debug mode for now (so I made this tmp tool)\r\n\r\n// Note Visual studio is bugged with multiple statements macro (I avoided them):\r\n// http://stackoverflow.com/questions/22212737/strange-syntax-error-reported-in-a-range-based-for-loop\r\n\r\n//// TYPEDEF ////\r\ntypedef int8_t int8;\r\ntypedef int16_t int16;\r\ntypedef int32_t int32;\r\ntypedef int64_t int64;\r\ntypedef unsigned uint;\r\ntypedef uint8_t uint8;\r\ntypedef uint16_t uint16;\r\ntypedef uint32_t uint32;\r\ntypedef uint64_t uint64;\r\n\r\nusing Path = boost::filesystem::path;\r\n\r\n// This stuff should be in a file gathering all debug tools\r\n//# if !defined(NDEBUG)\r\n#  include <ctime>\r\nnamespace sibr\r\n{\r\n\t/// Used for quickly measuring time for completing a scope.\r\n\t/// \\ingroup sibr_system\r\n\tstruct SIBR_SYSTEM_EXPORT DebugScopeProfiler\r\n\t{\r\n\t\t/** Constructor.\r\n\t\t\\param name the display name of the profiling session\r\n\t\t*/\r\n\t\tDebugScopeProfiler( const std::string& name );\r\n\t\t\r\n\t\t/// Destructor.\r\n\t\t~DebugScopeProfiler( void );\r\n\t\r\n\tprivate:\r\n\t\tclock_t _t0; ///< Timing.\r\n\t\tstd::string _name; ///< Name.\r\n\t};\r\n\r\n# define SIBR_PROFILESCOPE_EXPAND(x, y) sibr::DebugScopeProfiler x(y);\r\n\t// its a bit weird (because of macro's tricks) but that just create an instance of DebugScopeProfiler (with a generated var name)\r\n# define SIBR_PROFILESCOPE\t\\\r\n\tSIBR_PROFILESCOPE_EXPAND(SIBR_CATMACRO(debugScopeProfiler,__COUNTER__), std::string(__FUNCTION_STR__) + std::string(\" (File: \" __FILE__ \":\" SIBR_MACROINTTOSTR(__LINE__) \")\") );\r\n# define SIBR_PROFILESCOPE_NAME(name) \\\r\n\tSIBR_PROFILESCOPE_EXPAND(SIBR_CATMACRO(debugScopeProfiler,__COUNTER__), name );\r\n} // namespace sibr\r\n//# endif\r\n\r\n//// Define the init behavior ////\r\n# define SIBR_INITZERO\r\n// Initializing with a default value (zero) can be slightly slower but\r\n// make the code safe. In the current case, we don't have performance\r\n// problems (of this level).\r\n# if defined(SIBR_INITZERO)\r\n#  ifndef EIGEN_INITIALIZE_MATRICES_BY_ZERO\r\n#   define EIGEN_INITIALIZE_MATRICES_BY_ZERO\r\n#  endif\r\n# endif\r\n\r\n// I didn't use the Plugin system for Eigen's MatrixBase\r\n// because I wanted also custom ctor\r\n// EDIT:\r\n// Now that libslmini leaved out, we don't need this ctor\r\n// anymore.\r\n# define EIGEN_MATRIXBASE_PLUGIN \"core/system/MatrixBasePlugin.hpp\"\r\n# define EIGEN_MATRIX_PLUGIN \"core/system/MatrixPlugin.hpp\"\r\n# include <Eigen/Core>\r\n# include <Eigen/Geometry>\r\n\r\n# define SIBR_USE_CHOLMOD_EIGEN\r\n\r\n\r\n\r\nnamespace sibr\r\n{\r\n\t/** Rounding operation.\r\n\t\\param x the value to round\r\n\t\\return the rounded value\r\n\t\\todo Compare behaviour with std::round\r\n\t\\ingroup sibr_system\r\n\t*/\r\n\tinline float round(float x) {\r\n\t\treturn x >= 0.0f ? floorf(x + 0.5f) : ceilf(x - 0.5f);\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/LoadingProgress.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/system/LoadingProgress.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\r\n\tLoadingProgress::LoadingProgress( size_t maxIteration,\r\n\t\tconst std::string& status, float interval )\r\n\t\t: _currentStep(0), _maxProgress(maxIteration), _status(status), _interval(interval)\r\n\t{\r\n\t\t_lastReport = clock::now();\r\n\t}\r\n\r\n\tvoid\t\t\t\tLoadingProgress::walk( size_t step )\r\n\t{\r\n\t\tstd::lock_guard<std::mutex> l(_mutex);\r\n\r\n\t\t_currentStep += step;\r\n\t\tif (std::chrono::duration<float>(clock::now()-_lastReport).count() >= _interval\r\n\t\t\t|| _currentStep >= _maxProgress)\r\n\t\t{\r\n\t\t\treport();\r\n\t\t\t_lastReport = clock::now();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfloat\t\t\t\tLoadingProgress::current( void ) const\r\n\t{\r\n\t\tif (_maxProgress <= 0)\r\n\t\t\treturn 1.f;\r\n\t\treturn (float)_currentStep/(float)_maxProgress;\r\n\t}\r\n\r\n\tvoid\t\t\t\tLoadingProgress::report( void ) const\r\n\t{\r\n\t\tif (_status.empty())\r\n\t\t\tSIBR_LOG << \"Progression [ \"<< current()*100.f <<\"% ]\" << std::endl;\r\n\t\telse\r\n\t\t\tSIBR_LOG << \"Progression [ \"<< current()*100.f <<\"% ] - \" << _status << std::endl;\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/LoadingProgress.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <functional>\n# include <chrono>\n# include <mutex>\n# include \"core/system//Config.hpp\"\n\n\nnamespace sibr\n{\n\t///\n\t/// Simple utility class for reporting on the standard output\n\t/// a loading progess. (So users know your heavy computations\n\t/// didn't crash)\n\t///\n\t/// Instructions:\n\t/// 1) Instantiate just before a loop (for or while), providing\n\t/// the max number of iterations.\n\t/// 2) Call walk() once in a the loop.\n\t/// \\ingroup sibr_system\n\t///\n\tclass SIBR_SYSTEM_EXPORT LoadingProgress\n\t{\n\tpublic:\n\t\ttypedef std::chrono::steady_clock\t\t\t\t\t\tclock;\n\t\ttypedef clock::time_point\t\t\t\t\t\t\t\ttime_point;\n\t\ttypedef std::function<void (float, const std::string&)>\tExternalCallback;\n\n\t\t/** Create a progress bar.\n\t\t\\param maxIteration total number of iterations\n\t\t\\param status a message that will be inserted in next reports\n\t\t\\param interval an interval of time between each report.\n\t\t*/\n\t\tLoadingProgress( size_t maxIteration,\n\t\t\tconst std::string& status=\"\", float interval=1.f );\n\n\t\t/// Make the loading progress by the given number of steps.\n\t\t/// \\param step number of steps\n\t\tvoid\t\t\t\twalk( size_t step = 1);\n\t\t///\t\\return the current progress in a range [0.0, 1.0]\n\t\tfloat\t\t\t\tcurrent( void ) const;\n\n\t\t/// \\return the time interval used\n\t\tinline float\t\t\t\tinterval( void ) const;\n\t\t/// Change the frequency of each report\n\t\t/// \\param interval the new step interval to use\n\t\tinline void\t\t\t\t\tinterval( float interval );\n\n\t\t/// \\return the status message used\n\t\tinline const std::string&\tstatus( void ) const;\n\t\t/// Insert a message in printed reports\n\t\t/// \\param message the message to insert\n\t\tinline void\t\t\t\t\tstatus( const std::string& message );\n\n\tprivate:\n\t\t/// Print a report\n\t\tvoid\t\t\t\treport( void ) const;\n\n\t\tsize_t\t\t_currentStep;\t///< current number of iterations\n\t\tsize_t\t\t_maxProgress;\t///< number of iterations before reaching 100%\n\t\tstd::string\t_status;\t\t///< inserted into a report (you can update it)\n\t\tfloat\t\t_interval;\t\t///< time interval before next report (sec)\n\t\ttime_point\t_lastReport;\t///< time point saved during the last report\n\t\tstd::mutex\t_mutex;\t\t\t///< used ot thread-safe this class (not heavly tested!)\n\t};\n\n\t///// DEFINITIONS /////\n\n\tfloat\t\t\t\tLoadingProgress::interval( void ) const {\n\t\treturn _interval;\n\t}\n\tvoid\t\t\t\tLoadingProgress::interval( float interval ) {\n\t\t_interval = interval;\n\t}\n\n\n\tconst std::string&\tLoadingProgress::status( void ) const {\n\t\treturn _status;\n\t}\n\tvoid\t\t\t\tLoadingProgress::status( const std::string& message ) {\n\t\t_status = message;\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/MD5.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*\n **********************************************************************\n ** md5.h -- Header file for implementation of MD5                   **\n ** RSA Data Security, Inc. MD5 Message Digest Algorithm             **\n ** Created: 2/17/90 RLR                                             **\n ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version              **\n ** Revised (for MD5): RLR 4/27/91                                   **\n **   -- G modified to have y&~z instead of y&z                      **\n **   -- FF, GG, HH modified to add in last register done            **\n **   -- Access pattern: round 2 works mod 5, round 3 works mod 3    **\n **   -- distinct additive constant for each step                    **\n **   -- round 4 added, working mod 7                                **\n **********************************************************************\n */\n\n/*\n **********************************************************************\n ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **\n **                                                                  **\n ** License to copy and use this software is granted provided that   **\n ** it is identified as the \"RSA Data Security, Inc. MD5 Message     **\n ** Digest Algorithm\" in all material mentioning or referencing this **\n ** software or this function.                                       **\n **                                                                  **\n ** License is also granted to make and use derivative works         **\n ** provided that such works are identified as \"derived from the RSA **\n ** Data Security, Inc. MD5 Message Digest Algorithm\" in all         **\n ** material mentioning or referencing the derived work.             **\n **                                                                  **\n ** RSA Data Security, Inc. makes no representations concerning      **\n ** either the merchantability of this software or the suitability   **\n ** of this software for any particular purpose.  It is provided \"as **\n ** is\" without express or implied warranty of any kind.             **\n **                                                                  **\n ** These notices must be retained in any copies of any part of this **\n ** documentation and/or software.                                   **\n **********************************************************************\n */\n\n#ifndef SIBR_SYSTEM_MD5\n#define SIBR_SYSTEM_MD5\n\n#include <stddef.h>\n\n/* typedef a 32 bit type */\ntypedef unsigned long int UINT4;\n\n/* Data structure for MD5 (Message Digest) computation */\ntypedef struct {\n  UINT4 i[2];                   /* number of _bits_ handled mod 2^64 */\n  UINT4 buf[4];                                    /* scratch buffer */\n  unsigned char in[64];                              /* input buffer */\n  unsigned char digest[16];     /* actual digest after MD5Final call */\n} MD5_CTX;\n\nvoid MD5Init (MD5_CTX *mdContext);\nvoid MD5Update (MD5_CTX *mdContext, unsigned char *inBuf, size_t inLen);\nvoid MD5Final (MD5_CTX *mdContext);\n\n\n/*\n\tCompute MD5 for a binary blob\n\tWrites 16 bytes (4 uints) to pDigest\n\t\t\t\t\t\t\t\t\t*/\nvoid MD5Buffer( void* buffer, size_t bufLen, unsigned int* pDigest )\n{\n  int i;\n  MD5_CTX mdContext;\n\n  // compute MD5\n  MD5Init(&mdContext);\n  MD5Update(&mdContext, (unsigned char*)buffer, bufLen);\n  MD5Final(&mdContext);\n\n  // copy digest over\n  for( i = 0; i < 4; ++i )\n\t  pDigest[i] = *(((unsigned int*)mdContext.digest)+i);\n}\n\n/*\n **********************************************************************\n ** md5.c                                                            **\n ** RSA Data Security, Inc. MD5 Message Digest Algorithm             **\n ** Created: 2/17/90 RLR                                             **\n ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version                  **\n **********************************************************************\n */\n\n/*\n **********************************************************************\n ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **\n **                                                                  **\n ** License to copy and use this software is granted provided that   **\n ** it is identified as the \"RSA Data Security, Inc. MD5 Message     **\n ** Digest Algorithm\" in all material mentioning or referencing this **\n ** software or this function.                                       **\n **                                                                  **\n ** License is also granted to make and use derivative works         **\n ** provided that such works are identified as \"derived from the RSA **\n ** Data Security, Inc. MD5 Message Digest Algorithm\" in all         **\n ** material mentioning or referencing the derived work.             **\n **                                                                  **\n ** RSA Data Security, Inc. makes no representations concerning      **\n ** either the merchantability of this software or the suitability   **\n ** of this software for any particular purpose.  It is provided \"as **\n ** is\" without express or implied warranty of any kind.             **\n **                                                                  **\n ** These notices must be retained in any copies of any part of this **\n ** documentation and/or software.                                   **\n **********************************************************************\n */\n\n/* forward declaration */\nstatic void Transform (UINT4 *buf, UINT4 *in);\n\nstatic unsigned char PADDING[64] = {\n  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n};\n\n/* F, G and H are basic MD5 functions: selection, majority, parity */\n#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))\n#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))\n#define H(x, y, z) ((x) ^ (y) ^ (z))\n#define I(x, y, z) ((y) ^ ((x) | (~z))) \n\n/* ROTATE_LEFT rotates x left n bits */\n#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))\n\n/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */\n/* Rotation is separate from addition to prevent recomputation */\n#define FF(a, b, c, d, x, s, ac) \\\n  {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \\\n   (a) = ROTATE_LEFT ((a), (s)); \\\n   (a) += (b); \\\n  }\n#define GG(a, b, c, d, x, s, ac) \\\n  {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \\\n   (a) = ROTATE_LEFT ((a), (s)); \\\n   (a) += (b); \\\n  }\n#define HH(a, b, c, d, x, s, ac) \\\n  {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \\\n   (a) = ROTATE_LEFT ((a), (s)); \\\n   (a) += (b); \\\n  }\n#define II(a, b, c, d, x, s, ac) \\\n  {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \\\n   (a) = ROTATE_LEFT ((a), (s)); \\\n   (a) += (b); \\\n  }\n\nvoid MD5Init (MD5_CTX *mdContext)\n{\n  mdContext->i[0] = mdContext->i[1] = (UINT4)0;\n\n  /* Load magic initialization constants.\n   */\n  mdContext->buf[0] = (UINT4)0x67452301;\n  mdContext->buf[1] = (UINT4)0xefcdab89;\n  mdContext->buf[2] = (UINT4)0x98badcfe;\n  mdContext->buf[3] = (UINT4)0x10325476;\n}\n\nvoid MD5Update (MD5_CTX *mdContext, unsigned char *inBuf, size_t inLen)\n{\n  UINT4 in[16];\n  int mdi;\n  unsigned int i, ii;\n\n  /* compute number of bytes mod 64 */\n  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);\n\n  /* update number of bits */\n  if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0])\n    mdContext->i[1]++;\n  mdContext->i[0] += ((UINT4)inLen << 3);\n  mdContext->i[1] += ((UINT4)inLen >> 29);\n\n  while (inLen--) {\n    /* add new character to buffer, increment mdi */\n    mdContext->in[mdi++] = *inBuf++;\n\n    /* transform if necessary */\n    if (mdi == 0x40) {\n      for (i = 0, ii = 0; i < 16; i++, ii += 4)\n        in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |\n                (((UINT4)mdContext->in[ii+2]) << 16) |\n                (((UINT4)mdContext->in[ii+1]) << 8) |\n                ((UINT4)mdContext->in[ii]);\n      Transform (mdContext->buf, in);\n      mdi = 0;\n    }\n  }\n}\n\nvoid MD5Final (MD5_CTX *mdContext)\n{\n  UINT4 in[16];\n  int mdi;\n  unsigned int i, ii;\n  unsigned int padLen;\n\n  /* save number of bits */\n  in[14] = mdContext->i[0];\n  in[15] = mdContext->i[1];\n\n  /* compute number of bytes mod 64 */\n  mdi = (int)((mdContext->i[0] >> 3) & 0x3F);\n\n  /* pad out to 56 mod 64 */\n  padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);\n  MD5Update (mdContext, PADDING, padLen);\n\n  /* append length in bits and transform */\n  for (i = 0, ii = 0; i < 14; i++, ii += 4)\n    in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |\n            (((UINT4)mdContext->in[ii+2]) << 16) |\n            (((UINT4)mdContext->in[ii+1]) << 8) |\n            ((UINT4)mdContext->in[ii]);\n  Transform (mdContext->buf, in);\n\n  /* store buffer in digest */\n  for (i = 0, ii = 0; i < 4; i++, ii += 4) {\n    mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);\n    mdContext->digest[ii+1] =\n      (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);\n    mdContext->digest[ii+2] =\n      (unsigned char)((mdContext->buf[i] >> 16) & 0xFF);\n    mdContext->digest[ii+3] =\n      (unsigned char)((mdContext->buf[i] >> 24) & 0xFF);\n  }\n}\n\n/* Basic MD5 step. Transform buf based on in.\n */\nstatic void Transform (UINT4 *buf, UINT4 *in)\n{\n  UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];\n\n  /* Round 1 */\n#define S11 7\n#define S12 12\n#define S13 17\n#define S14 22\n  FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */\n  FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */\n  FF ( c, d, a, b, in[ 2], S13,  606105819); /* 3 */\n  FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */\n  FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */\n  FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */\n  FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */\n  FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */\n  FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */\n  FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */\n  FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */\n  FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */\n  FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */\n  FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */\n  FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */\n  FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */\n\n  /* Round 2 */\n#define S21 5\n#define S22 9\n#define S23 14\n#define S24 20\n  GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */\n  GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */\n  GG ( c, d, a, b, in[11], S23,  643717713); /* 19 */\n  GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */\n  GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */\n  GG ( d, a, b, c, in[10], S22,   38016083); /* 22 */\n  GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */\n  GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */\n  GG ( a, b, c, d, in[ 9], S21,  568446438); /* 25 */\n  GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */\n  GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */\n  GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */\n  GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */\n  GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */\n  GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */\n  GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */\n\n  /* Round 3 */\n#define S31 4\n#define S32 11\n#define S33 16\n#define S34 23\n  HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */\n  HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */\n  HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */\n  HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */\n  HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */\n  HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */\n  HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */\n  HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */\n  HH ( a, b, c, d, in[13], S31,  681279174); /* 41 */\n  HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */\n  HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */\n  HH ( b, c, d, a, in[ 6], S34,   76029189); /* 44 */\n  HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */\n  HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */\n  HH ( c, d, a, b, in[15], S33,  530742520); /* 47 */\n  HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */\n\n  /* Round 4 */\n#define S41 6\n#define S42 10\n#define S43 15\n#define S44 21\n  II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */\n  II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */\n  II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */\n  II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */\n  II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */\n  II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */\n  II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */\n  II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */\n  II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */\n  II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */\n  II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */\n  II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */\n  II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */\n  II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */\n  II ( c, d, a, b, in[ 2], S43,  718787259); /* 63 */\n  II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */\n\n  buf[0] += a;\n  buf[1] += b;\n  buf[2] += c;\n  buf[3] += d;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Matrix.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/system/Transform3.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\tMatrix4f perspective( float fovRadian, float ratio, float zn, float zf, const sibr::Vector2f & p)\r\n\t{\r\n\t\tconst float yScale = float(1.0)/std::tan(fovRadian/2.0f);\r\n\t\tconst float xScale = yScale/ratio;\r\n\r\n\t\tMatrix4f m;\r\n\t\tconst float dx = 2.0f * p.x() - 1.0f;\r\n\t\tconst float dy = 2.0f * p.y() - 1.0f;\r\n\t\tm << \r\n\t\t\txScale,    0,          dx,             0,\r\n\t\t\t0,    yScale,          dy,             0,\r\n\t\t\t0,         0, (zn+zf)/(zn-zf), 2*zn*zf/(zn-zf),\r\n\t\t\t0,         0,         -1,             0;\r\n\r\n\t\treturn m;\r\n\t}\r\n\r\n\tMatrix4f perspectiveOffCenter(\r\n\t\t\tfloat left, float right, float bottom, float top, float mynear, float myfar )\r\n\t{      \r\n\t\tfloat x =  (2.0f * mynear) / (right - left);\r\n\t\tfloat y =  (2.0f * mynear) / (top - bottom);\r\n\t\tfloat a =  (right + left) / (right - left);\r\n\r\n\t\tfloat b =  (top + bottom) / (top - bottom);\r\n\t\tfloat c = -(myfar + mynear) / (myfar - mynear);\r\n\t\tfloat d = -(2.0f * myfar * mynear) / (myfar - mynear);\r\n\t\tfloat e = -1.0f;\r\n\r\n\t\tMatrix4f m;\r\n\r\n\t\tm << \r\n\t\t\tx, 0, 0, 0, \r\n\t\t\t0, y, 0, 0,\r\n\t\t\ta, b, c, e,\r\n\t\t\t0, 0, d, 0;\r\n\r\n\t\treturn m;\r\n\t}\r\n\r\n\tMatrix4f perspectiveStereo(\r\n\t\t\tfloat fovRadian, float aspect, float zn, float zf, float focalDistance, float eyeDistance, bool isLeftEye )\r\n\t{\r\n\r\n\t\tfloat left, right;\r\n\t\tfloat a = float(1.0f)/std::tan(fovRadian/2.0f);\r\n\t\tfloat b = zf / focalDistance;\r\n\r\n\t\tif (isLeftEye)          // left camera\r\n\t\t{\r\n\t\t\tleft  = - aspect * a + (eyeDistance) * b;\r\n\t\t\tright =   aspect * a + (eyeDistance) * b;\r\n\t\t}\r\n\t\telse                 // right camera\r\n\t\t{\r\n\t\t\tleft  = - aspect * a - (eyeDistance) * b;\r\n\t\t\tright =   aspect * a - (eyeDistance) * b;\r\n\t\t}\r\n\r\n\t\treturn perspectiveOffCenter(left, right, -a, a, zn, zf);\r\n\t}\r\n\r\n\tMatrix4f orthographic(float right, float top, float mynear, float myfar)\r\n\t{\r\n\r\n\t\tMatrix4f m;\r\n\r\n\t\tm <<\r\n\t\t\t1.0f/right, 0.0f,\t\t0.0f,\t\t\t\t\t0.0f,\r\n\t\t\t0.0f,\t\t1.0f/top,\t0.0f,\t\t\t\t\t0.0f,\r\n\t\t\t0.0f,\t\t0.0f,\t\t-2.0f/(myfar-mynear),\t-(myfar + mynear) / (myfar - mynear),\r\n\t\t\t0.0f,\t\t0.0f,\t\t0.0f,\t\t\t\t\t1.0f;\r\n\r\n\t\treturn m;\r\n\t}\r\n\r\n\tMatrix4f\tlookAt(\r\n\t\t\tconst Vector3f& eye,\r\n\t\t\tconst Vector3f& center,\r\n\t\t\tconst Vector3f& up )\r\n\t{\r\n\t\tconst sibr::Vector3f f = (center - eye).normalized();\r\n\t\tsibr::Vector3f u = up.normalized();\r\n\t\tconst sibr::Vector3f s = f.cross(u).normalized();\r\n\t\tu = s.cross(f);\r\n\r\n\t\tEigen::Matrix<float, 4, 4, 0, 4, 4> res;\r\n\t\tres <<  s.x(),s.y(),s.z(),-s.dot(eye),\r\n\t\t\tu.x(),u.y(),u.z(),-u.dot(eye),\r\n\t\t\t-f.x(),-f.y(),-f.z(),f.dot(eye),\r\n\t\t\t0,0,0,1;\r\n\r\n\t\treturn res;\r\n\t}\r\n\r\n\tvoid \toperator<< (std::ofstream& outfile, const Matrix4f& m)\r\n\t{\r\n\t\toutfile << m(0,0) << \" \" << m(0,1) << \" \" << m(0,2) << \" \" << m(0,3) \r\n\t\t\t<< \" \" << m(1,0) << \" \" << m(1,1) << \" \" << m(1,2) << \" \" << m(1,3) \r\n\t\t\t<< \" \" << m(2,0) << \" \" << m(2,1) << \" \" << m(2,2) << \" \" << m(2,3) \r\n\t\t\t<< \" \" << m(3,0) << \" \" << m(3,1) << \" \" << m(3,2) << \" \" << m(3,3)  ;\r\n\r\n\t}\r\n\r\n\tvoid \toperator>>( std::ifstream& infile, Matrix4f& out)\r\n\t{\r\n\t\tfloat m[16];\r\n\t\tinfile >> m[0] >> m[1] >> m[2] >> m[3] \r\n\t\t\t>> m[4] >> m[5] >> m[6] >> m[7] \r\n\t\t\t>> m[8] >> m[9] >> m[10] >> m[11]\r\n\t\t\t>> m[12] >> m[13] >> m[14] >> m[15];\r\n\r\n\t\t\tout << m[0] , m[1] , m[2] , m[3] \r\n\t\t\t\t, m[4] , m[5] , m[6] , m[7] \r\n\t\t\t\t, m[8] , m[9] , m[10] , m[11]\r\n\t\t\t\t, m[12] , m[13] , m[14] , m[15];\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Matrix.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n/******************************************************************************\r\n\r\n  Design Decision -- Eigen Integration:\r\n\r\n    At the very beginning, we used vector/matrices from libminisl. Then we\r\n  began to switch to Eigen's tools (because already used in lots of our code).\r\n  Thus during the migration phase, we used custom class inheriting from\r\n  Eigen::Matrix.\r\n    However I encountered issues when executing the code under linux. It\r\n  appears it was because of SSE instructions (special pipeline on CPU allowing\r\n  to perform some vector operations in parallel). This SSE instruction required\r\n  128-bit aligned memory. There are articles about this on Eigen website:\r\n\teigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html\r\n  \r\n  But to summerize: keeping the alignment is difficult because you have to\r\n  overload new operator in each class containing an Eigen::Matrix. Too unsafe,\r\n  thus I disable this (Eigen::DontAlign) but missing assignment operators did\r\n  that this consideration was ignored in some cases.\r\n  E.g.: sibr::Matrix A, B, C;\r\n  // ... // set A and B\r\n  C = A*B; // A*B return a temporary class of Eigen but C didn't have the\r\n  // assignment operator for this class [...] it wrongly considered it has an\r\n  // not-aligned matrix and data was corrupted.\r\n\r\n  Now SIBR uses a plugin system to extend Eigen classes:\r\n  \teigen.tuxfamily.org/dox/TopicCustomizingEigen.html\r\n\r\n  It's both safer and faster. (but it was not possible during the migration\r\n  phase because I needed the child type to perfom automatic convertion with\r\n  remaining libminisl tools).\r\n\r\n******************************************************************************/\r\n\r\n#pragma once\r\n\r\n# include <fstream>\r\n# include \"core/system/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n\r\n\r\nnamespace sibr\r\n{\r\n\t/**\r\n\t\\addtogroup sibr_system\r\n\t@{\r\n\t*/\r\n\ttypedef\tEigen::Matrix<unsigned, 4, 4, Eigen::DontAlign, 4, 4>\t\tMatrix4u;\r\n\ttypedef\tEigen::Matrix<int, 4, 4, Eigen::DontAlign, 4, 4>\t\tMatrix4i;\r\n\ttypedef\tEigen::Matrix<float, 4, 4, Eigen::DontAlign, 4, 4>\tMatrix4f;\r\n\ttypedef\tEigen::Matrix<double, 4, 4, Eigen::DontAlign, 4, 4>\t\tMatrix4d;\r\n\ttypedef\tEigen::Matrix<unsigned, 3, 3, Eigen::DontAlign, 3, 3>\t\tMatrix3u;\r\n\ttypedef\tEigen::Matrix<int, 3, 3, Eigen::DontAlign, 3, 3>\t\tMatrix3i;\r\n\ttypedef\tEigen::Matrix<float, 3, 3, Eigen::DontAlign, 3, 3>\tMatrix3f;\r\n\ttypedef\tEigen::Matrix<double, 3, 3, Eigen::DontAlign, 3, 3>\t\tMatrix3d;\r\n\r\n\t/** Convert a quaternion to a rotation matrix.\r\n\t * \\param q the quaternion to convert\r\n\t * \\return the corresponding matrix\r\n\t */\r\n\ttemplate <typename T>\r\n\t\tEigen::Matrix<T, 4, 4, 0, 4, 4> matFromQuat( const Eigen::Quaternion<T, 0>& q ) {\r\n\t\t\tEigen::Matrix<T, 3, 3, 0, 3, 3> s = q.toRotationMatrix();\r\n\r\n\t\t\tEigen::Matrix<T, 4, 4, 0, 4, 4> mat;\r\n\t\t\tmat <<\r\n\t\t\t\ts(0,0), s(0,1), s(0,2), 0,\r\n\t\t\t\ts(1,0), s(1,1), s(1,2), 0,\r\n\t\t\t\ts(2,0), s(2,1), s(2,2), 0,\r\n\t\t\t\t0, 0, 0, 1;\r\n\t\t\treturn mat;\r\n\t\t}\r\n\t\r\n\t/** Convert a translation to a rotation matrix.\r\n\t * \\param vec the translation to convert\r\n\t * \\return the corresponding matrix\r\n\t */\r\n\ttemplate <typename T, int Options>\r\n\t\tEigen::Matrix<T, 4, 4, 0, 4, 4> matFromTranslation( const Eigen::Matrix<T, 3, 1, Options>& vec ) {\r\n\r\n\t\t\tEigen::Matrix<T, 4, 4, 0, 4, 4> mat;\r\n\t\t\tmat.setIdentity();\r\n\r\n\t\t\tmat(0,3) = vec.x();\r\n\t\t\tmat(1,3) = vec.y();\r\n\t\t\tmat(2,3) = vec.z();\r\n\t\t\treturn mat;\r\n\t\t}\r\n\r\n\t/** Generate a perspective matrix.\r\n\t * \\param fovRadian vertical field of view in radians\r\n\t * \\param ratio aspect ratio\r\n\t * \\param zn near plane\r\n\t * \\param zf far plane\r\n\t * \\param p the principal point, expressed in [0,1]\r\n\t * \\return the projection matrix */\r\n\tMatrix4f SIBR_SYSTEM_EXPORT perspective( float fovRadian, float ratio, float zn, float zf, const ::sibr::Vector2f & p = {0.5f, 0.5f});\r\n\r\n\t/** Generate an off-center perspective matrix.\r\n\t * Defined by giving the top/left/right/bottom extent in world units.\r\n\t *\t\\param left left extent\r\n\t *\t\\param right right extent\r\n\t *\t\\param bottom bottom extent\r\n\t *\t\\param top top extent\r\n\t *\t\\param mynear near plane\r\n\t *\t\\param myfar dar plane\r\n\t *\t\\return the projection matrix */\r\n\tMatrix4f SIBR_SYSTEM_EXPORT perspectiveOffCenter(\r\n\t\t\tfloat left, float right, float bottom, float top, float mynear, float myfar );\r\n\r\n\t/** Generate a perspective matrix for stereo rendering.\r\n\t * \\param fovRadian vertical field of view in radians\r\n\t * \\param aspect aspect ratio\r\n\t * \\param zn near plane\r\n\t * \\param zf far plane\r\n\t * \\param focalDistance the focal distance\r\n\t * \\param eyeDistance the inter-eye distance\r\n\t * \\param isLeftEye if true computes the left eye matrix, else the right eye\r\n\t * \\return the projection matrix */\r\n\tMatrix4f SIBR_SYSTEM_EXPORT perspectiveStereo( float fovRadian, float aspect, float zn, float zf, float focalDistance,\r\n\t\t\tfloat eyeDistance, bool isLeftEye ); \r\n\r\n\t/** Generate an orthographic matrix.\r\n\t * Defined by giving the top/right extent in world units.\r\n\t *\t\\param right right extent\r\n\t *\t\\param top top extent\r\n\t *\t\\param mynear near plane\r\n\t *\t\\param myfar dar plane\r\n\t *\t\\return the projection matrix */\r\n\tMatrix4f SIBR_SYSTEM_EXPORT orthographic(float right, float top, float mynear, float myfar);\r\n\r\n\t/** Generate a view matrix using the look at parameters.\r\n\t *\t\\param eye camera position\r\n\t *\t\\param center point the camera is looking at\r\n\t *\t\\param up up vector\r\n\t *\t\\return the projection matrix */\r\n\tMatrix4f SIBR_SYSTEM_EXPORT lookAt( const Vector3f& eye, const Vector3f& center, const Vector3f& up );\r\n\r\n\t/** Output a Matrix4f to a file stream.\r\n\t *\\param outfile the output file\r\n\t *\\param m the matrix\r\n\t */\r\n\tvoid \tSIBR_SYSTEM_EXPORT operator<< (std::ofstream& outfile, const Matrix4f& m);\r\n\r\n\t/** Read a Matrix4f from a file stream.\r\n\t *\\param infile the input file\r\n\t *\\param out the matrix\r\n\t */\r\n\tvoid \tSIBR_SYSTEM_EXPORT operator>>( std::ifstream& infile, Matrix4f& out);\r\n\r\n\t/** }@ */\r\n} // namespace sibr\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/MatrixBasePlugin.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n// This file is used to extend Eigen's MatrixBase class using\n// the following tricks:\n// https://eigen.tuxfamily.org/dox-3.2/TopicCustomizingEigen.html\n\npublic:\n\n/** Helper to evaluate a transposed matrix without overwriting risks.\n\t\\return a copy of the matrix, transposed\n*/\ninline MatrixBase transposed( void ) { return this->transpose().eval(); }\n\n/** Get the first two components, filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 2, 1,Eigen::DontAlign>\txy( float fill=0.f ) const {\n\treturn Matrix<Scalar, 2, 1,Eigen::DontAlign>( this->operator[](0), size()<2? fill:this->operator[](1));\n}\n\n/** Get the first two components swapped, filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 2, 1, Eigen::DontAlign>\tyx(float fill = 0.f) const {\n\treturn Matrix<Scalar, 2, 1, Eigen::DontAlign>(this->operator[](1), size()<2 ? fill : this->operator[](0));\n}\n\n/** Get the last two components swapped, filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 2, 1, Eigen::DontAlign>\twz(float fill = 0.f) const {\n\treturn Matrix<Scalar, 2, 1, Eigen::DontAlign>(size()<4 ? fill : this->operator[](3), size()<3 ? fill : this->operator[](2));\n}\n\n/** Get the first three components, filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 3, 1,Eigen::DontAlign>\txyz( float fill=0.f ) const {\n\treturn Matrix<Scalar, 3, 1,Eigen::DontAlign>( this->operator[](0), size()<2? fill:this->operator[](1), size()<3? fill:this->operator[](2));\n}\n\n/** Get the first four components, filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 4, 1,Eigen::DontAlign>\txyzw( float fill=0.f ) const {\n\treturn Matrix<Scalar, 4, 1,Eigen::DontAlign>( this->operator[](0), size()<2? fill:this->operator[](1), size()<3? fill:this->operator[](2), size()<4? fill:this->operator[](3));\n}\n\n/** Get the first three components swapped (YXZ), filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 3, 1, Eigen::DontAlign>\tyxz(float fill = 0.f) const {\n\treturn Matrix<Scalar, 3, 1, Eigen::DontAlign>(size()<2 ? fill : this->operator[](1), this->operator[](0), size()<3 ? fill : this->operator[](2));\n}\n\n/** Get the first three components swapped (YZX), filling with a default value if some are missing.\n\t\\param fill the default value to use\n\t\\return the selected components.\n*/\nMatrix<Scalar, 3, 1, Eigen::DontAlign>\tyzx(float fill = 0.f) const {\n\treturn Matrix<Scalar, 3, 1, Eigen::DontAlign>(size()<2 ? fill : this->operator[](1), size()<3 ? fill : this->operator[](2), this->operator[](0));\n}\n\n/** Check if a vector is exactly zero for all components\n\\return true if all components are exactly zero.\n*/\nbool\tisNull( void ) const { \n\treturn (array() == 0).all();\n}\n\ntypedef Scalar Type;\n\n//enum { NumComp = Derived::RowsAtCompileTime };\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/MatrixPlugin.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n// This file is used to extend Eigen's MatrixBase class using\n// the following tricks:\n// https://eigen.tuxfamily.org/dox-3.2/TopicCustomizingEigen.html\n\npublic:\n\ntypedef Scalar Type;\nenum { NumComp = RowsAtCompileTime };\n\n//Matrix( const Scalar* data ) { for(int i=0; i<NumComp; i++) this->operator [] (i) = data[i]; }\n\n/**\nMatrix( float x, float y=0.f, float z=0.f, float w=0.f ) {\n\tfloat data[] = {x, y, z, w};\n\tfor(int i=0; i<NumComp; i++) this->operator [] (i) = data[i];\n}\n**/\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Quaternion.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/system/Transform3.hpp\"\n\nnamespace sibr\n{\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Quaternion.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <Eigen/Core>\n# include <Eigen/Geometry>\n# include \"core/system/Config.hpp\"\n# include \"core/system/Matrix.hpp\"\n# include \"core/system/Vector.hpp\"\n\nnamespace sibr\n{\n\t/**\n\t\\addtogroup sibr_system\n\t@{\n\t*/\n\n\t/** Build a quaternion from a rotation matrix\n\t *\\param m the rotation matrix\n\t *\\return the quaternion\n\t *\\todo Seems to be different from sibr::Quaternion(rotationmatrix)\n\t */\n\ttemplate <typename T, int Options>\n\tEigen::Quaternion<T, 0>\tquatFromMatrix(const Eigen::Matrix<T, 3, 3, Options, 3, 3>& m) {\n\t\tEigen::Quaternion<T, 0> q;\n\t\tfloat trace = m(0, 0) + m(1, 1) + m(2, 2) + 1.f;\n\t\tif (trace > 0)\n\t\t{\n\t\t\tfloat s = 0.5f / sqrtf(trace);\n\t\t\tq.x() = (m(1, 2) - m(2, 1)) * s;\n\t\t\tq.y() = (m(2, 0) - m(0, 2)) * s;\n\t\t\tq.z() = (m(0, 1) - m(1, 0)) * s;\n\t\t\tq.w() = 0.25f / s;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif ((m(0, 0) > m(1, 1)) && (m(0, 0) > m(2, 2)))\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f + m(0, 0) - m(1, 1) - m(2, 2)) * 2.f;\n\t\t\t\tq.x() = 0.5f / s;\n\t\t\t\tq.y() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t\tq.z() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t\tq.w() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t}\n\t\t\telse if (m(1, 1) > m(2, 2))\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f - m(0, 0) + m(1, 1) - m(2, 2)) * 2.f;\n\t\t\t\tq.x() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t\tq.y() = 0.5f / s;\n\t\t\t\tq.z() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t\tq.w() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f - m(0, 0) - m(1, 1) + m(2, 2)) * 2.f;\n\t\t\t\tq.x() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t\tq.y() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t\tq.z() = 0.5f / s;\n\t\t\t\tq.w() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t}\n\t\t}\n\t\treturn q;\n\t}\n\n\t/** Build a quaternion from a rotation matrix\n\t *\\param m the rotation matrix\n\t *\\return the quaternion\n\t */\n\ttemplate <typename T, int Options>\n\tEigen::Quaternion<T, 0>\tquatFromMatrix( const Eigen::Matrix<T, 4,4, Options, 4,4>& m ) {\n\t\tEigen::Quaternion<T, 0> q;\n\t\tfloat trace = m(0, 0) + m(1, 1) + m(2, 2) + 1.f;\n\t\tif (trace > 0)\n\t\t{\n\t\t\tfloat s = 0.5f / sqrtf(trace);\n\t\t\tq.x() = (m(1, 2) - m(2, 1)) * s;\n\t\t\tq.y() = (m(2, 0) - m(0, 2)) * s;\n\t\t\tq.z() = (m(0, 1) - m(1, 0)) * s;\n\t\t\tq.w() = 0.25f / s;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif ((m(0, 0) > m(1, 1)) && (m(0, 0) > m(2, 2)))\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f + m(0, 0) - m(1, 1) - m(2, 2)) * 2.f;\n\t\t\t\tq.x() = 0.5f / s;\n\t\t\t\tq.y() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t\tq.z() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t\tq.w() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t}\n\t\t\telse if (m(1, 1) > m(2, 2))\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f - m(0, 0) + m(1, 1) - m(2, 2)) * 2.f;\n\t\t\t\tq.x() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t\tq.y() = 0.5f / s;\n\t\t\t\tq.z() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t\tq.w() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfloat s = sqrtf(1.f - m(0, 0) - m(1, 1) + m(2, 2)) * 2.f;\n\t\t\t\tq.x() = (m(2, 0) + m(0, 2)) / s;\n\t\t\t\tq.y() = (m(2, 1) + m(1, 2)) / s;\n\t\t\t\tq.z() = 0.5f / s;\n\t\t\t\tq.w() = (m(1, 0) + m(0, 1)) / s;\n\t\t\t}\n\t\t}\n\t\treturn q;\n\t}\n\n\t/** Build a quaternion from rotation euler angles.\n\t *\\param deg the rotation angles\n\t *\\return the quaternion\n\t *\\todo Explicit the angles order (yaw, pitch, roll?)\n\t */\n\ttemplate <typename T, int Options>\n\tEigen::Quaternion<T, 0>\tquatFromEulerAngles( const Eigen::Matrix<T, 3, 1,Options>& deg ) {\n\t\tVector3f v(SIBR_DEGTORAD(deg.x()), SIBR_DEGTORAD(deg.y()), SIBR_DEGTORAD(deg.z()));\n\t\tVector3f halfAngles( v.x() * 0.5f, v.y() * 0.5f, v.z() * 0.5f );\n\n\t\tconst float cx = cosf (halfAngles.x());\n\t\tconst float sx = sinf (halfAngles.x());\n\t\tconst float cy = cosf (halfAngles.y());\n\t\tconst float sy = sinf (halfAngles.y());\n\t\tconst float cz = cosf (halfAngles.z());\n\t\tconst float sz = sinf (halfAngles.z());\n\n\t\tconst float cxcz = cx*cz;\n\t\tconst float cxsz = cx*sz;\n\t\tconst float sxcz = sx*cz;\n\t\tconst float sxsz = sx*sz;\n\n\t\tEigen::Quaternion<T, 0> dst;\n\t\tdst.vec().x() = (cy * sxcz) - (sy * cxsz);\n\t\tdst.vec().y() = (cy * sxsz) + (sy * cxcz);\n\t\tdst.vec().z() = (cy * cxsz) - (sy * sxcz);\n\t\tdst.w() = (cy * cxcz) + (sy * sxsz);\n\t\treturn dst;\n\t}\n\n\t/** Rotate a vector using a quaternion.\n\t *\\param rotation the quaternion\n\t *\\param vec the vector\n\t *\\return the rotated vector.\n\t */\n\ttemplate <typename T, int Options>\n\tEigen::Matrix<T, 3, 1, Options>\tquatRotateVec(\n\t\tconst Eigen::Quaternion<T, 0>& rotation, const Eigen::Matrix<T, 3, 1, Options>& vec ) {\n\t\treturn rotation._transformVector(vec);\n\t}\n\n\t/** Quaternion product.\n\t * \\param q1 first quaternion\n\t * \\param q2 second quaternion\n\t * \\return the result quaternion\n\t */\n\ttemplate <typename T>\n\tinline static Eigen::Quaternion<T> dot( const Eigen::Quaternion<T>& q1, const Eigen::Quaternion<T>& q2 ) {\n\t\treturn q1.vec().dot(q2.vec()) + q1.w()*q2.w();\n\t}\n\n\t/** Compute the delta angle between two quaternions.\n\t *\\param q1 first quaternion\n\t *\\param q2 second quaternion\n\t *\\return the angle in radians\n\t *\\note Will return the smallest angle possible\n\t */\n\ttemplate <typename T>\n\tinline static float\t\tangleRadian( const Eigen::Quaternion<T>& q1, const Eigen::Quaternion<T>& q2 ) {\n\t\tconst float mid = 3.14159f;\n\t\tconst float angle = q1.angularDistance(q2);\n\t\treturn angle > mid? mid-angle : angle; // be sure to return the shortest angle\n\t}\n\n    /** Linear quaternion interpolation\n     *\\param q1 first quaternion\n\t *\\param q2 second quaternion\n\t *\\param t interpolation factor\n\t *\\return the interpolated quaternion\n\t */\n\ttemplate <typename T>\n    inline static Eigen::Quaternion<T> lerp( const Eigen::Quaternion<T>& q1, const Eigen::Quaternion<T>& q2, float t ) {\n\t\treturn (q1*(1-t) + q2*t).normalized();\n\t}\n\n\t/** Spherical quaternion interpolation\n\t*\\param q1 first quaternion\n\t*\\param q2 second quaternion\n\t*\\param t interpolation factor\n\t*\\return the interpolated quaternion\n\t*/\n\ttemplate <typename T>\n\tstatic Eigen::Quaternion<T> slerp( const Eigen::Quaternion<T>& q1, const Eigen::Quaternion<T>& q2, float t ) {\n\t\tEigen::Quaternion<T> q3;\n\t\tfloat dot = q1.dot(q2);// Eigen::Quaternion<T>::dot(q1, q2);\n\t\t// dot = cos(theta)\n\t\t// \t if (dot < 0), q1 and q2 are more than 90 degrees apart,\n\t\t// \t so we can invert one to reduce spinning\n\t\tif (dot < 0)\n\t\t{\n\t\t\tdot = -dot;\n\t\t\tq3 = -q2;\n\t\t} else q3 = q2;\n\t\tif (dot < 0.95f)\n\t\t{\n\t\t\tfloat angle = acosf(dot);\n\t\t\treturn (q1*sinf(angle*(1-t)) + q3*sinf(angle*t))/sinf(angle);\n\t\t} else // if the angle is small, use linear interpolation\n\t\t\treturn lerp(q1,q3,t);\n\t}\n\n\ttypedef\tEigen::Quaternion<unsigned>\t\tQuaternionu;\n\ttypedef\tEigen::Quaternion<int>\t\t\tQuaternioni;\n\ttypedef\tEigen::Quaternion<float>\t\tQuaternionf;\n\ttypedef\tEigen::Quaternion<double>\t\tQuaterniond;\n\n\t/** }@ */\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Rect.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/system/Config.hpp\"\r\n# include \"core/system/Vector.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\t/** Represents a simple aligned axis rectangle\r\n\t\r\n\tI use left, top, right, bottom and not x1, x2, y1, y2\r\n\tor x, y, w, h for being free of coordinate systems.\r\n\t(so you can use this class with an origin starting in\r\n\tthe top left corner or the bottom right corner; this\r\n\tshould be the same).\r\n\t\r\n\tNote this class is currently what I call a constclass:\r\n\tonce built you cannot modify it.\r\n\t* \\ingroup sibr_system\r\n\t*/\r\n\ttemplate <typename T>\r\n\tclass Rect\r\n\t{\r\n\tpublic:\r\n\t\ttypedef\tEigen::Matrix<T, 2, 1,Eigen::DontAlign>\t\t\tVec;\r\n\r\n\tpublic:\r\n\r\n\t\t/// Default constructor (null everything)\r\n\t\tRect( void );\r\n\t\t\r\n\t\t/** Constructor\r\n\t\t \\param left x-coordinate of the left border\r\n\t\t \\param top y-coordinate of the top border\r\n\t\t \\param right x-coordinate of the right border\r\n\t\t \\param bottom y-coordinate of the bottom border\r\n\t\t*/\r\n\t\tRect( T left, T top, T right, T bottom );\r\n\r\n\t\t/// \\return the position of the left side\r\n\t\tinline T\t\tleft( void ) const;\r\n\t\t/// \\return the position of the right side\r\n\t\tinline T\t\tright( void ) const;\r\n\t\t/// \\return the position of the top side\r\n\t\tinline T\t\ttop( void ) const;\r\n\t\t/// \\return the position of the bottom side\r\n\t\tinline T\t\tbottom( void ) const;\r\n\r\n\t\t/// \\return the width\r\n\t\tinline T\t\twidth( void ) const;\r\n\t\t/// \\return the height\r\n\t\tinline T\t\theight( void ) const;\r\n\r\n\t\t/// \\return the top left rectangle corner location.\r\n\t\tinline Eigen::Matrix<T, 2, 1,Eigen::DontAlign>\tcornerLeftTop( void ) const;\r\n\t\t/// \\return the bottom left rectangle corner location.\r\n\t\tinline Eigen::Matrix<T, 2, 1,Eigen::DontAlign>\tcornerLeftBottom( void ) const;\r\n\t\t/// \\return the bottom right rectangle corner location.\r\n\t\tinline Eigen::Matrix<T, 2, 1,Eigen::DontAlign>\tcornerRightBottom( void ) const;\r\n\t\t/// \\return the top right rectangle corner location.\r\n\t\tinline Eigen::Matrix<T, 2, 1,Eigen::DontAlign>\tcornerRightTop( void ) const;\r\n\r\n\tprivate:\r\n\t\tT\t_left;\t\t///< x-coordinate of the left border\r\n\t\tT\t_top;\t\t///< y-coordinate of the top border\r\n\t\tT\t_right;\t\t///< x-coordinate of the right border\r\n\t\tT\t_bottom;\t///< y-coordinate of the bottom border\r\n\t};\r\n\r\n\t///// EXPORT DEFAULT TYPES /////\r\n\r\n\ttypedef Rect<float>\t\tRectf;\r\n\ttypedef Rect<int>\t\tRecti;\r\n\r\n\t///// DEFINITION /////\r\n\r\n\ttemplate <typename T>\r\n\tRect<T>::Rect( void )\r\n\t: _left(T(0)), _top(T(0)), _right(T(0)), _bottom(T(0)) {\r\n\t}\r\n\ttemplate <typename T>\r\n\tRect<T>::Rect( T left, T top, T right, T bottom )\r\n\t: _left(left), _top(top), _right(right), _bottom(bottom) {\r\n\t}\r\n\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::left( void ) const {\r\n\t\treturn _left;\r\n\t}\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::right( void ) const {\r\n\t\treturn _right;\r\n\t}\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::top( void ) const {\r\n\t\treturn _top;\r\n\t}\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::bottom( void ) const {\r\n\t\treturn _bottom;\r\n\t}\r\n\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::width( void ) const {\r\n\t\tT v = _right - _left;\r\n\t\treturn (v<0.f)? -v : v;\r\n\t}\r\n\ttemplate <typename T>\r\n\tT\t\tRect<T>::height( void ) const {\r\n\t\tT v = _top - _bottom;\r\n\t\treturn (v<0.f)? -v : v;\r\n\t}\r\n\r\n\ttemplate <typename T>\r\n\tEigen::Matrix<T, 2, 1,Eigen::DontAlign>\tRect<T>::cornerLeftTop( void ) const {\r\n\t\treturn Eigen::Matrix<T, 2, 1,Eigen::DontAlign>(left(),top());\r\n\t}\r\n\ttemplate <typename T>\r\n\tEigen::Matrix<T, 2, 1,Eigen::DontAlign>\tRect<T>::cornerLeftBottom( void ) const {\r\n\t\treturn Eigen::Matrix<T, 2, 1,Eigen::DontAlign>(left(),bottom());\r\n\t}\r\n\ttemplate <typename T>\r\n\tEigen::Matrix<T, 2, 1,Eigen::DontAlign>\tRect<T>::cornerRightBottom( void ) const {\r\n\t\treturn Eigen::Matrix<T, 2, 1,Eigen::DontAlign>(right(),bottom());\r\n\t}\r\n\ttemplate <typename T>\r\n\tEigen::Matrix<T, 2, 1,Eigen::DontAlign>\tRect<T>::cornerRightTop( void ) const {\r\n\t\treturn Eigen::Matrix<T, 2, 1,Eigen::DontAlign>(right(),top());\r\n\t}\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/SimpleTimer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/system/Config.hpp\"\n#include <vector>\n#include <chrono>\n\nnamespace sibr\n{\n\t/**\n\t* Timer to monitor performance of a section of code.\n\t* \\ingroup sibr_system\n\t*/\n\tclass Timer\n\t{\n\tpublic:\n\t\ttypedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point;\n\t\ttypedef std::chrono::nanoseconds nano;\n\t\ttypedef std::chrono::microseconds micro;\n\t\ttypedef std::chrono::milliseconds milli;\n\t\ttypedef std::chrono::seconds s;\n\n\t\tconst double timeResolution = (double)std::chrono::high_resolution_clock::period::num\n\t\t\t/ std::chrono::high_resolution_clock::period::den; ///< Timer resolution.\n\n\t\t/** Constructor. Create a timer.\n\t\t\\param start_now start to measure time at creation\n\t\t*/\n\t\tTimer(bool start_now = false ) : hasStarted(false)\n\t\t{\n\t\t\tif (start_now) {\n\t\t\t\ttic();\n\t\t\t}\n\t\t}\n\n\t\t/** Copy constructor\n\t\t\\param timer another timer\n\t\t*/\n\t\tTimer(const Timer & timer) {\n\t\t\thasStarted = timer.hasStarted;\n\t\t\tcurrent_tic = timer.current_tic;\n\t\t}\n\n\t\t/** Start measuring elapsed time.\n\t\t * \\warning This will clear existing recorded times.\n\t\t*/\n\t\tvoid tic()\n\t\t{\n\t\t\ttocs.resize(0);\n\t\t\thasStarted = true;\n\t\t\tcurrent_tic = std::chrono::high_resolution_clock::now();\n\t\t}\n\n\t\t/** Save currently elapsed time.\n\t\t * \\note You can call toc multiple times in a row.\n\t\t*/\n\t\tvoid toc()\n\t\t{\n\t\t\tauto toc = std::chrono::high_resolution_clock::now();\n\t\t\ttocs.push_back(toc);\n\t\t}\n\n\t\t/** Get the time elapsed since the last tic, with a precisiond etemrined by the tempalte argument.\n\t\t\t\\return the measured time (default: in ms)\n\t\t*/\n\t\ttemplate<typename T = Timer::milli>\n\t\tdouble deltaTimeFromLastTic() const\n\t\t{\n\t\t\tif (!hasStarted) { return std::numeric_limits<double>::max(); }\n\t\t\tauto toc = std::chrono::high_resolution_clock::now();\n\t\t\t\n\t\t\tdouble deltaTime = 1;\n\t\t\tif (!getDeltaTime<T>(current_tic, toc, deltaTime)) {\n\t\t\t\tstd::cout << \"[SIBR - Timer] : below time reslution \" << std::endl;\n\t\t\t}\n\n\t\t\treturn deltaTime;\n\t\t}\n\n\t\t/** Print a list of all the recorded tocs, with the precision specified as a template argument (by default in ms).\n\t\t\t\\param toc_now should a toc be generated right now.\n\t\t*/\n\t\ttemplate<typename T = Timer::milli>\n\t\tvoid display(bool toc_now = false)\n\t\t{\n\t\t\tif (toc_now) {\n\t\t\t\ttoc();\n\t\t\t}\n\t\t\tconst int n = (int)tocs.size();\n\t\t\tif (!hasStarted || n == 0) {\n\t\t\t\tstd::cout << \"[SIBR - Timer] : no tic or no toc\" << std::endl;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdouble deltaTime;\n\t\t\t\tfor (auto & toc : tocs) {\n\t\t\t\t\tif (getDeltaTime<T>(current_tic,toc,deltaTime) ) {\n\t\t\t\t\t\tstd::cout << \"[SIBR - Timer] : \" << deltaTime << std::endl;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tstd::cout << \"[SIBR - Timer] : below time reslution \" << std::endl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Get the time elapsed between two points in time, using the precision specified as a template argument (default to ms).\n\t\t\\param tic first time point\n\t\t\\param toc second time point\n\t\t\\param deltaTime will contain the computed duration\n\t\t\\return false if the elapsed time was below the timer precision.\n\t\t*/\n\t\ttemplate<typename T = Timer::milli>\n\t\tbool getDeltaTime(const time_point & tic, const time_point & toc, double & deltaTime) const {\n\t\t\tdouble timediff_nanoSeconds = (double)std::chrono::duration_cast<Timer::nano>(toc - tic).count();\n\t\t\tif (timediff_nanoSeconds < Timer::timeResolution) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdeltaTime = (double)std::chrono::duration_cast<T>(toc - tic).count();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\ttime_point current_tic; ///< Initial tic.\n\t\tstd::vector<time_point> tocs; ///< Recorded time points.\n\t\tbool hasStarted; ///< Is the timer currently running.\n\t};\n\t\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/String.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include \"core/system/String.hpp\"\r\n#include <cstdarg>\r\n#include <chrono>\r\n#include <iomanip>\r\n\r\nnamespace sibr\r\n{\r\n\tstd::string strSearchAndReplace( const std::string& src, const std::string& search, const std::string& replaceby )\r\n\t{\r\n\t\tsize_t pos = src.find(search);\r\n\t\tif (pos != std::string::npos)\r\n\t\t{\r\n\t\t\tstd::string out;\r\n\t\t\tout = src.substr(0, pos) + replaceby + src.substr(pos+search.size(), src.size()-pos+search.size());\r\n\t\t\treturn out;\r\n\t\t}\r\n\t\treturn src;\r\n\t}\r\n\r\n\tstd::string removeExtension(const std::string & str)\r\n\t{\r\n\t\treturn  str.substr(0, str.find_last_of('.'));\r\n\t}\r\n\r\n\tstd::string getExtension(const std::string & str)\r\n\t{\r\n\t\tconst std::string::size_type dotPos = str.find_last_of('.');\r\n\t\tif(dotPos == std::string::npos) {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\treturn str.substr(dotPos+1);\r\n\t}\r\n\r\n\tstd::string parentDirectory(const std::string & str)\r\n\t{\r\n\t\tconst char kPathSeparator =\r\n#ifdef _WIN32\r\n\t\t\t\t'\\\\';\r\n#else\r\n\t\t\t\t'/';\r\n#endif\r\n\t\tconst std::string::size_type pos = str.find_last_of(\"/\\\\\");\r\n\t\t// If no separator, return empty path.\r\n\t\tif(pos == std::string::npos) {\r\n\t\t\treturn str + kPathSeparator + \"..\";\r\n\t\t}\r\n\t\t// If the separator is not trailing, we are done. \r\n\t\tif(pos < str.size()-1) {\r\n\t\t\treturn str.substr(0, pos);\r\n\t\t}\r\n\t\t// Else we have to look for the previous one.\r\n\t\tconst std::string::size_type pos1 = str.find_last_of(\"/\\\\\", pos-1);\r\n\t\treturn str.substr(0, pos1);\r\n\t}\r\n\r\n\tSIBR_SYSTEM_EXPORT std::string getFileName(const std::string & str)\r\n\t{\r\n\t\tconst std::string::size_type pos = str.find_last_of(\"/\\\\\");\r\n\t\tif (pos == std::string::npos) {\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\treturn str.substr(pos+1);\r\n\t}\r\n\r\n\tbool strContainsOnlyDigits(const std::string& str)\r\n\t{\r\n\t\tfor (char c : str)\r\n\t\t\tif (c < '0' || c > '9')\r\n\t\t\t\treturn false;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tstd::vector<std::string>\tsplit(const std::string& str, char delim)\r\n\t{\r\n\t\tstd::stringstream\tss(str);\r\n\t\tstd::string\t\t\tto;\r\n\t\tstd::vector<std::string>\tout;\r\n\r\n\t\tif (str.empty())\r\n\t\t\treturn out;\r\n\r\n\t\twhile (std::getline(ss, to, delim))\r\n\t\t\tout.push_back(to);\r\n\t\treturn out;\r\n\t}\r\n\r\n\t/// Wrapper around sibr::sprintf that returns a string\r\n\tstd::string sprint(const char *msg, ...)\r\n\t{\r\n#define TEMP_STR_SIZE 4096\r\n\t\tva_list args;\r\n\t\tva_start(args, msg);\r\n\t\tchar s_StrSingle[TEMP_STR_SIZE];\r\n#ifdef WIN32\r\n\t\tvsprintf_s(s_StrSingle, TEMP_STR_SIZE, msg, args);\r\n#else\r\n\t\tvsnprintf(s_StrSingle, TEMP_STR_SIZE, msg, args);\r\n#endif\r\n\t\tva_end(args);\r\n\t\treturn std::string(s_StrSingle);\r\n#undef TEMP_STR_SIZE\r\n\t}\r\n\r\n\tint \t\tsprintf(char* buffer, size_t size, const char* format, ...)\r\n\t{\r\n\t\tva_list args;\r\n\t\tint ret = 0;\r\n\t\tva_start(args, format);\r\n#ifdef WIN32\r\n\t\tret = vsprintf_s(buffer, size, format, args);\r\n#else\r\n\t\tret = vsnprintf(buffer, size, format, args);\r\n#endif\r\n\t\tva_end(args);\r\n\t\treturn ret;\r\n\t}\r\n\r\n\tSIBR_SYSTEM_EXPORT std::string to_lower(const std::string& str)\r\n\t{\r\n\t\tstd::string out;\r\n\t\tout.reserve(str.length());\r\n\r\n\t\tfor (size_t i = 0; i < str.length(); ++i)\r\n\t\t\tout.push_back(tolower(str[i]));\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\r\n\tSIBR_SYSTEM_EXPORT bool find_any(const std::vector<std::string>& needles, const std::string& haystack)\r\n\t{\r\n\t\tfor (std::string needle : needles)\r\n\t\t{\r\n\t\t\tif (haystack.find(needle) != std::string::npos)\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tstd::string timestamp(const std::string & format) {\r\n\t\tauto now = std::time(nullptr);\r\n#ifdef SIBR_OS_WINDOWS\r\n\t\ttm ltm = { 0,0,0,0,0,0,0,0,0 };\r\n\t\tlocaltime_s(&ltm, &now);\r\n#else\r\n\t\ttm ltm = *(std::localtime(&now));\r\n#endif\r\n\t\tstd::stringstream buffer;\r\n\t\tbuffer << std::put_time(&ltm, format.c_str());\r\n\t\treturn buffer.str();\r\n\t}\r\n\r\n} // namespace sirb\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/String.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/system/Config.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/**\r\n\t* \\addtogroup sibr_system\r\n\t* @{\r\n\t*/\r\n\r\n\t/**\r\n\t* Replaces all occurences of a substring with another substring.\r\n\t* \\param src the string to perform replacements in\r\n\t* \\param search the substring to replace\r\n\t* \\param replaceby the new substring to substitute\r\n\t* \\return the string with the substitutions performed.\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT std::string strSearchAndReplace( const std::string& src, const std::string& search, const std::string& replaceby );\r\n\r\n\t/**\r\n\t* Process a string (a filename or path) to remove any extension if it exists.\r\n\t* \\param str the string to remove the extension from\r\n\t* \\return the string without extension\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT std::string removeExtension(const std::string& str);\r\n\r\n\t/**\r\n\t* Process a string (a filename or path) to extract the file extension if it exists.\r\n\t* \\param str the string to get the extension from\r\n\t* \\return the extension string (without the leading dot)\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT std::string getExtension(const std::string& str);\r\n\r\n\t/**\r\n\t* Process a string (a path) to return the parent directory.\r\n\t* \\param str the string to process\r\n\t* \\return the string with the last component removed\r\n\t* \\note Will return the empty string if no separator was found.\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT std::string parentDirectory(const std::string& str);\r\n\r\n\t/**\r\n\t* Process a string (a path) to return the file name.\r\n\t* \\param str the string to process\r\n\t* \\return the string with all but the last component removed\r\n\t* \\note Will return the full string if no separator was found.\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT std::string getFileName(const std::string& str);\r\n\r\n\t/**\r\n\t* Check if a string only contains digits.\r\n\t* \\param str the string to check\r\n\t* \\return true if it only contains digits\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT bool strContainsOnlyDigits(const std::string& str);\r\n\r\n\t/** Split string into sub-strings delimited by a given character. \r\n\t * \\param str the input string\r\n\t * \\param delim the delimiting characters\r\n\t * \\return a list of split substrings\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT std::vector<std::string>\tsplit(const std::string& str, char delim = '\\n');\r\n\r\n\t/** Wrapper around sibr::sprintf that returns a string \r\n\t * \\param msg the string with C placeholders\r\n\t * \\param ... the values for each placeholder\r\n\t * \\return the string with the formatted values inserted\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT std::string\tsprint(const char *msg, ...);\r\n\r\n\t/** Write a formatted string with inserted values to a buffer.\r\n\t * \\param buffer the destination string\r\n\t * \\param size the size of the format string\r\n\t * \\param format the string with C placeholders\r\n\t * \\param ... the values for each placeholder\r\n\t * \\return a status code similar to sprintf\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT int \t\tsprintf(char* buffer, size_t size, const char* format, ...);\r\n\r\n\t/** Convert the input string to lowert case.\r\n\t * \\param str the input string\r\n\t * \\return the input string in lower case\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT std::string\t\t\t\t\tto_lower(const std::string& str);\r\n\r\n\t/** Find if a list of substring is present in a given string.\r\n\t * \\param needles the list of substring\r\n\t * \\param haystack the search string\r\n\t * \\return true if any substring is present in the search string, else false\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT bool\t\t\t\t\tfind_any(const std::vector<std::string>& needles, const std::string& haystack);\r\n\r\n\t/** Write the current timestamp to a string.\r\n\t * \\param format the formatting to use for the timestamp (see default value for an example)\r\n\t * \\return a string containing the timestamp\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT std::string timestamp(const std::string & format = \"%Y_%m_%d_%H_%M_%S\");\r\n\r\n\r\n\t/*** @} */\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/ThreadIdWorker.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/system/ThreadIdWorker.hpp\"\n\nnamespace sibr\n{\n\t/*static*/ std::mutex\tThreadIdWorker::g_mutex;\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/ThreadIdWorker.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <atomic>\n# include <thread>\n# include <mutex>\n# include <queue>\n\n# include \"core/system/Config.hpp\"\n\nnamespace sibr\n{\n\t/** Class used to work concurrently on multiple tasks/instructions.\n\t The only shared object is a queue (TaskIds) that\n\t contains ids of remaining tasks to perform.\n\t\n\t Typically, you use this id to access a const array\n\t (input) and write results to another array using once\n\t again this id. The output array is already resized\n\t at the begin so that you can freely modify its\n\t element without hurting other threads.\n\t\n\tCode Example:\n\n\t\tstd::vector<ThreadIdWorker>\tworkers(MASKPATCH_NBTHREADS);\n\n\t\t// Launch all threads\n\t\tfor (ThreadIdWorker& t: workers)\n\t\tt = std::move(ThreadIdWorker(taskId, workFunc));\n\n\t\t// Wait for all threads\n\t\tfor (ThreadIdWorker& t: workers)\n\t\tif (t.joinable())\n\t\tt.join();\n\n\t \\ingroup sibr_system\n\t*/\n\tclass /*SIBR_SYSTEM_EXPORT*/ ThreadIdWorker : public std::thread\n\t{\n\tpublic:\n\t\ttypedef\tstd::queue<uint>\tTaskIds;\n\tpublic:\n\t\t/// Build an empty worker (placeholder)\n\t\tThreadIdWorker( void );\n\n\t\t/** Move constructor\n\t\t *\\param other worker to move\n\t\t */\n\t\tThreadIdWorker( ThreadIdWorker&& other ) noexcept;\n\n\t\t/** Constructor. Will call the passed function for each given task ID.\n\t\t \\param ids a list of task ids\n\t\t \\param func a function receiving a task ID as parameter returning either FALSE for signaling the worker to stop or TRUE for keep going.\n\t\t*/\n\t\tThreadIdWorker( TaskIds& ids, std::function<bool(uint)> func );\n\n\t\t/** Move operator.\n\t\t *\\param other worker to assign\n\t\t *\\return the current worker\n\t\t */\n\t\tThreadIdWorker& operator =( ThreadIdWorker&& other ) noexcept;\n\n\t\t/// Deleted copy operator.\n\t\tThreadIdWorker(const ThreadIdWorker&) = delete;\n\n\tprivate:\n\n\t\t/** Will pull the next task or automatically stop.\n\t\t \\param ids a list of task ids\n\t\t \\param func a function receiving a task ID as parameter\n\t\t */\n\t\tvoid\t\ttaskPuller( TaskIds& ids, std::function<bool(uint)> func );\n\n\t\tSIBR_SYSTEM_EXPORT static std::mutex\tg_mutex;\t///< used to protect the common shared TaskIds list\n\t};\n\n\t///// INLINES /////\n\tinline ThreadIdWorker::ThreadIdWorker( void ) {\n\t}\n\n\tinline ThreadIdWorker::ThreadIdWorker( ThreadIdWorker&& other ) noexcept :\n\t\tstd::thread(std::move((std::thread&)other)) {\n\t}\n\n\tinline ThreadIdWorker::ThreadIdWorker( TaskIds& ids, std::function<bool(uint)> func )\n\t\t: std::thread( [this, &ids, &func]() { taskPuller(ids, std::move(func)); } ) {\n\t}\n\n\tinline ThreadIdWorker& ThreadIdWorker::operator =( ThreadIdWorker&& other ) noexcept {\n\t\t((std::thread*)this)->operator=(std::move(other)); return *this;\n\t}\n\n\tinline void ThreadIdWorker::taskPuller( TaskIds& ids, std::function<bool(uint)> func ) {\n\t\tuint id = 0;\n\t\tbool stop = false;\n\t\twhile (!stop)\n\t\t{\n\t\t\t{ // Pop next id\n\t\t\t\tstd::lock_guard<std::mutex>\tlock(g_mutex);\n\t\t\t\tstop = ids.empty();\n\n\t\t\t\tif (!stop)\n\t\t\t\t{\n\t\t\t\t\tid = ids.front();\n\t\t\t\t\tids.pop();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!stop)\n\t\t\t\tstop = !func(id);\n\t\t}\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Transform3.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/system/ByteStream.hpp\"\n# include \"core/system/Config.hpp\"\n# include \"core/system/Matrix.hpp\"\n# include \"core/system/Vector.hpp\"\n# include \"core/system/Quaternion.hpp\"\n\n\nnamespace sibr\n{\n\t/**\n\t * Represent a 3D transformation composed of a rotation and translation.\n\t* \\ingroup sibr_system\n\t*/\n\ttemplate <typename T>\n\tclass Transform3\n\t{\n\tpublic:\n\t\ttypedef Eigen::Matrix<T,3, 1, Eigen::DontAlign>\t\tVector3;\n\t\ttypedef Eigen::Quaternion<T>\t\t\t\t\t\tQuaternion;\n\n\tpublic:\n\n\t\t/** Constructor: identity transform. */\n\t\tTransform3( void ) : _position(0, 0, 0) {\n\t\t\t_rotation.setIdentity();\n\t\t}\n\n\t\t/** Set the transformation parameters.\n\t\t *\\param translation the translation vector\n\t\t *\\param rotation the rotation quaternion\n\t\t */\n\t\tvoid\t       set( const Vector3& translation, const Quaternion& rotation ) {\n\t\t\t\t_position = translation;\n\t\t\t\t_rotation = rotation;\n\t\t}\n\n\t\t/** Apply a translation.\n\t\t *\\param x x shift\n\t\t *\\param y y shift\n\t\t *\\param z z shift\n\t\t **/\n\t\tvoid\t\t\t\ttranslate( float x, float y, float z );\n\n\t\t/** Apply a translation that is itself rotated by another transformation.\n\t\t *\\param x x shift\n\t\t *\\param y y shift\n\t\t *\\param z z shift\n\t\t *\\param ref additional rotation trnasofrmation to apply to the translation vector.\n\t\t **/\n\t\tvoid\t\t\t\ttranslate( float x, float y, float z, const Transform3& ref);\n\n\t\t/** Apply a translation.\n\t\t *\\param v translation vector\n\t\t **/\n\t\tvoid\t\t\t\ttranslate( const Vector3& v );\n\t\t\n\t\t/** Apply a translation that is itself rotated by another transformation.\n\t\t *\\param v translation vector\n\t\t *\\param ref additional rotation trnasofrmation to apply to the translation vector.\n\t\t **/\n\t\tvoid\t\t\t\ttranslate( const Vector3& v, const Transform3& ref );\n\n\t\t/** Set the position.\n\t\t *\\param x x position\n\t\t *\\param y y position\n\t\t *\\param z z position\n\t\t **/\n\t\tvoid\t\t\t\tposition( float x, float y, float z );\n\n\t\t/** Set the position.\n\t\t *\\param v position\n\t\t **/\n\t\tvoid\t\t\t\tposition( const Vector3& v );\n\n\t\t/** \\return the position */\n\t\tconst Vector3&\tposition( void ) const;\n\n\n\t\t/** Apply a rotation.\n\t\t *\\param rotation quaternion rotation\n\t\t */\n\t\tvoid\t\t\t\t\trotate( const Quaternion& rotation );\n\n\t\t/** Apply a rotation using Euler angles.\n\t\t *\\param x yaw\n\t\t *\\param y pitch\n\t\t *\\param z roll\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotate( float x, float y, float z );\n\n\t\t/** Apply a rotation using Euler angles and composite with an additional transformation.\n\t\t *\\param x yaw\n\t\t *\\param y pitch\n\t\t *\\param z roll\n\t\t *\\param ref additional rotation\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotate( float x, float y, float z,\n\t\t\t\t\t\t\t\t\t\t\tconst Transform3& ref);\n\n\t\t/** Apply a rotation using Euler angles.\n\t\t *\\param v angles\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotate( const Vector3& v );\n\n\t\t/** Apply a rotation using Euler angles and composite with an additional transformation.\n\t\t *\\param v angles\n\t\t *\\param ref additional rotation\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotate( const Vector3& v, const Transform3& ref );\n\n\t\t/** Set the rotation from Euler angles.\n\t\t *\\param x yaw\n\t\t *\\param y pitch\n\t\t *\\param z roll\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotation( float x, float y, float z );\n\n\t\t/** Set the rotation from Euler angles.\n\t\t *\\param v angles\n\t\t *\\todo Clarify the angles order.\n\t\t *\\sa quatFromEulerAngles\n\t\t */\n\t\tvoid\t\t\t\t\trotation( const Vector3& v );\n\n\t\t/** Set the rotation.\n\t\t *\\param q quaternion rotation\n\t\t */\n\t\tvoid\t\t\t\t\trotation( const Quaternion& q );\n\n\t\t/// \\return the rotation\n\t\tconst Quaternion&\trotation( void ) const;\n\n\t\t/// \\return the transformation matrix\n\t\tMatrix4f\t\tmatrix( void ) const;\n\t\t/// \\return the inverse of the transformation matrix\n\t\tMatrix4f\t\tinvMatrix( void ) const;\n\n\t\t/** Interpolate between two transformations.\n\t\t *\\param from source transformation\n\t\t *\\param to destination transformation\n\t\t *\\param dist01 interpolation factor\n\t\t *\\return the interpolated transformation\n\t\t */\n\t\tstatic Transform3<T>\tinterpolate( const Transform3<T>& from, const Transform3<T>& to, float dist01 ) {\n\t\t\tdist01 = std::max(0.f, std::min(1.f, dist01)); // clamp\n\t\t\t\n\t\t\tTransform3<T> out;\n\t\t\tout.position((1.0f-dist01)*from.position() + dist01*to.position());\n\t\t\tout.rotation(from.rotation().slerp(dist01, to.rotation()));\n\t\t\treturn out;\n\t\t}\n\n\t\t/** Linearly extrapolate based on two transformations, by reapplying the delta between the two transformations to the current one \n\t\t * and interpolating between the current and the new estimate.\n\t\t *\\param previous source transformation\n\t\t *\\param current current transformation\n\t\t *\\param dist01 extrapolation factor\n\t\t *\\return the extrapolated transformation\n\t\t *\\note dist01 should still be in 0,1\n\t\t */\n\t\tstatic Transform3<T>\textrapolate(const Transform3<T>& previous, const Transform3<T>& current, float dist01) {\n\n\t\t\tVector3f deltaPosition = current.position() - previous.position();\n\t\t\tQuaternion deltaRotation = previous.rotation().inverse() * current.rotation();\n\n\t\t\tTransform3<T> t = current;\n\t\t\tt.rotate(deltaRotation);\n\t\t\tt.translate(deltaPosition);\n\t\t\treturn interpolate(current, t, dist01);\n\t\t}\n\n\t\t/** Compute a trnasformation made by compsoiting a parent and child transformations.\n\t\t * \\param parentTr the parent\n\t\t * \\param childTr the child\n\t\t * \\return the composite transformation\n\t\t */\n\t\tstatic Transform3<T>\tcomputeFinal( const Transform3<T>& parentTr, const Transform3<T>& childTr ) {\n\t\t\tTransform3<T>\t\tfinalTr;\n\t\t\tfinalTr.position(parentTr.position() + parentTr.rotation() * childTr.position());\n\t\t\tfinalTr.rotation(parentTr.rotation() * childTr.rotation());\n\t\t\treturn finalTr;\n\t\t}\n\n\t\t/** Equality operator with a 1e-3 tolerance.\n\t\t *\\param other transformation to test equality with\n\t\t *\\return true if other is equal\n\t\t */\n\t\tbool operator==(const Transform3 & other) const {\n\t\t\tstatic const float eps = 1e-3f;\n\t\t\treturn (_position-other._position).norm()/ _position.norm() < eps && std::abs(_rotation.dot(other._rotation)) > ( 1 - eps);\n\t\t}\n\n\t\t/** Difference operator.\n\t\t *\\param other transformation to test difference with\n\t\t *\\return true if other is different\n\t\t **/\n\t\tbool operator!=(const Transform3 & other) const {\n\t\t\treturn !(*this == other);\n\t\t}\n\n\tprivate:\n\t\tVector3\t\t    _position;\n\t\tQuaternion\t\t_rotation;\n\n\t};\n\n\t/// Helper def.\n\ttypedef Transform3<float> Transform3f;\n\n\t/** Write transformation to a byte stream.\n\t *\\param stream the byte stream\n\t *\\param t the transform\n\t *\\return the stream for compositing\n\t \\ingroup sibr_system\n\t */\n\ttemplate <typename T>\n\tByteStream&\t\toperator << (ByteStream& stream, const Transform3<T>& t ) {\n\t\ttypename Transform3<T>::Vector3 v = t.position();\n\t\ttypename Transform3<T>::Quaternion q = t.rotation();\n\t\treturn stream\n\t\t\t<< v.x() << v.y() << v.z()\n\t\t\t<< q.x() << q.y() << q.z() << q.w();\n\t}\n\n\t/** Read transformation from a byte stream.\n\t *\\param stream the byte stream\n\t *\\param t the transform\n\t *\\return the stream for compositing\n\t \\ingroup sibr_system\n\t */\n\ttemplate <typename T>\n\tByteStream&\t\toperator >> (ByteStream& stream, Transform3<T>& t ) {\n\t\ttypename Transform3<T>::Vector3 v;\n\t\ttypename Transform3<T>::Quaternion q;\n\t\tstream\n\t\t\t>> v.x() >> v.y() >> v.z()\n\t\t\t>> q.x() >> q.y() >> q.z() >> q.w();\n\t\tt.position(v);\n\t\tt.rotation(q);\n\t\treturn stream;\n\t}\n\n\t//==================================================================//\n\t// Inlines\n\t//==================================================================//\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::translate( float x, float y, float z ) {\n\t\t_position.x() += x; _position.y() += y; _position.z() += z;\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::translate( float x, float y, float z,\n\t\tconst Transform3<T>& ref) {\n\t\t\ttranslate( Vector3( x, y, z ), ref );\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::translate( const Vector3& v ) {\n\t\t_position.x() += v.x(); _position.y() += v.y(); _position.z() += v.z();\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::translate( const Vector3& v, const Transform3& ref ) {\n\t\ttranslate( ref.rotation().operator*(v) );\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::position( float x, float y, float z ) {\n\t\t_position.x() = x; _position.y() = y; _position.z() = z;\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::position( const Vector3& v ) {\n\t\t_position.x() = v.x(); _position.y() = v.y(); _position.z() = v.z();\n\t}\n\n\ttemplate <typename T>\n\tconst typename Transform3<T>::Vector3&\tTransform3<T>::position( void ) const {\n\t\treturn _position;\n\t}\n\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotate( const Quaternion& rotation ) {\n\t\t_rotation = rotation * _rotation;\n\t\t_rotation.normalize();\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotate( float x, float y, float z ) {\n\t\tQuaternion q = quatFromEulerAngles(Vector3(x, y, z));\n\t\tq.normalize();\n\t\trotate(q);\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotate( const Vector3& v ) {\n\t\trotate( v.x(), v.y(), v.z() );\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotate( const Vector3& v, const Transform3& ref ) {\n\t\trotate( v.x(), v.y(), v.z(), ref );\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotation( float x, float y, float z ) {\n\t\t_rotation = quatFromEulerAngles(Vector3(x, y, z));\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotation( const Vector3& v ) {\n\t\trotation( v.x(), v.y(), v.z() );\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotation( const Quaternion& q ) {\n\t\t_rotation = q;\n\t}\n\n\ttemplate <typename T>\n\tconst typename Transform3<T>::Quaternion&\tTransform3<T>::rotation( void ) const {\n\t\treturn _rotation;\n\t}\n\n\ttemplate <typename T>\n\tMatrix4f Transform3<T>::matrix( void ) const {\n\t\tMatrix4f trans = matFromQuat(_rotation);\n\t\ttrans = matFromTranslation(_position) * trans; // Opti (direct)\n\t\treturn trans;\n\t}\n\n\ttemplate <typename T>\n\tMatrix4f Transform3<T>::invMatrix( void ) const {\n\t\t// This is wrapped so we can (in the future) add a policy class\n\t\t// to enable caching this inv matrix\n\t\treturn matrix().inverse();\n\t}\n\n\ttemplate <typename T>\n\tvoid\t\tTransform3<T>::rotate( float x, float y, float z,\n\t\tconst Transform3<T>& ref)\n\t{\n\t\tQuaternion q = quatFromEulerAngles(Vector3(x, y, z));\n\t\tq.normalize();\n\n\t\tif ( &ref == this ) // Local Rotation\n\t\t{\n\t\t\t_rotation = _rotation * q;\n\t\t\t_rotation.normalize();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tQuaternion refConj = ref.rotation();\n\t\t\trefConj.conjugate();\n\n\t\t\t// 1) Apply global rotation of ref on 'q' (ref * q)\n\t\t\t// 2) Apply local rotation of ref.conj (~inv) on 'q' (q*ref.conj)\n\t\t\t// 3) The rotation is converted and can be applied using rotate\n\t\t\trotate((ref.rotation() * q) * refConj);\n\t\t}\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Utils.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include <boost/filesystem.hpp>\n#include <fstream>\n#include <sstream>\n#include <vector>\n#include \"core/system/Utils.hpp\"\n\n#ifdef SIBR_OS_WINDOWS \n\t#include <nfd.h>\n\t#include <Windows.h>\n\t#include <shlobj.h>\n\t#include <stdio.h>\n\t// Some old MinGW/CYGWIN distributions don't define this:\n\t#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING\n\t#define ENABLE_VIRTUAL_TERMINAL_PROCESSING  0x0004\n\t#endif\n#else\n\t#include <nfd.h>\n\t#include <libgen.h>\n\t#include <linux/limits.h>\n\t#include <unistd.h>\n\t#include <sys/types.h>\n\t#include <pwd.h>\n#endif\n\nnamespace sibr\n{\n#ifdef SIBR_OS_WINDOWS\n\t\tstatic HANDLE stdoutHandle;\n\t\tstatic DWORD outModeInit;\n\n\t\tvoid setupConsole(void) {\n\t\t\tDWORD outMode = 0;\n\t\t\tstdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);\n\n\t\t\tif(stdoutHandle == INVALID_HANDLE_VALUE) {\n\t\t\t\texit(GetLastError());\n\t\t\t}\n\t\t\t\n\t\t\tif(!GetConsoleMode(stdoutHandle, &outMode)) {\n\t\t\t\texit(GetLastError());\n\t\t\t}\n\n\t\t\toutModeInit = outMode;\n\t\t\t\n\t\t\t// Enable ANSI escape codes\n\t\t\toutMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;\n\n\t\t\tif(!SetConsoleMode(stdoutHandle, outMode)) {\n\t\t\t\texit(GetLastError());\n\t\t\t}\t\n\t\t}\n\n\t\tvoid restoreConsole(void) {\n\t\t\t// Reset colors\n\t\t\tprintf(\"\\x1b[0m\");\t\n\t\t\t\n\t\t\t// Reset console mode\n\t\t\tif(!SetConsoleMode(stdoutHandle, outModeInit)) {\n\t\t\t\texit(GetLastError());\n\t\t\t}\n\t\t}\n#endif\n\n\n\tstd::string\tloadFile(const std::string& fname)\n\t{\n\t\tstd::ifstream file(fname.c_str(), std::ios::binary);\n\t\tif (!file || !file.is_open()) {\n\t\t\tSIBR_ERR << \"File not found: \" << fname << std::endl;\n\t\t\treturn \"\";\n\t\t}\n\t\tfile.seekg(0, std::ios::end);\n\n\t\tstd::streampos length = file.tellg();\n\t\tfile.seekg(0, std::ios::beg);\n\n\t\tstd::vector<char> buffer(length);\n\t\tfile.read(&buffer[0], length);\n\t\tfile.close();\n\n\t\treturn std::string(buffer.begin(), buffer.end());\n\t}\n\n\tvoid\t\t\tmakeDirectory(const std::string& path)\n\t{\n\t\tboost::filesystem::path p(path);\n\t\tif (boost::filesystem::exists(p) == false)\n\t\t\tboost::filesystem::create_directories(p);\n\t}\n\n\tstd::vector<std::string> listFiles(const std::string & path, const bool listHidden, const bool includeSubdirectories, const std::vector<std::string> & allowedExtensions)\n\t{\n\t\tif (!directoryExists(path)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tstd::vector<std::string> files;\n\t\tbool shouldCheckExtension = !allowedExtensions.empty();\n\n\t\ttry {\n\t\t\tboost::filesystem::directory_iterator end_iter;\n\t\t\tfor (boost::filesystem::directory_iterator dir_itr(path); dir_itr != end_iter; ++dir_itr) {\n\n\t\t\t\tconst std::string itemName = dir_itr->path().filename().string();\n\t\t\t\tif (includeSubdirectories && boost::filesystem::is_directory(dir_itr->status())) {\n\t\t\t\t\tif (listHidden || (itemName.size() > 0 && itemName.at(0) != '.')) {\n\t\t\t\t\t\tfiles.push_back(itemName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (boost::filesystem::is_regular_file(dir_itr->status())) {\n\t\t\t\t\tbool shouldKeep = !shouldCheckExtension;\n\t\t\t\t\tif (shouldCheckExtension) {\n\t\t\t\t\t\tfor (const auto & allowedExtension : allowedExtensions) {\n\t\t\t\t\t\t\tif (dir_itr->path().extension() == (\".\" + allowedExtension) || dir_itr->path().extension() == allowedExtension) {\n\t\t\t\t\t\t\t\tshouldKeep = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldKeep && (listHidden || (itemName.size() > 0 && itemName.at(0) != '.'))) {\n\t\t\t\t\t\tfiles.push_back(itemName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (const boost::filesystem::filesystem_error&) {\n\t\t\tstd::cout << \"Can't access or find directory.\" << std::endl;\n\t\t}\n\n\t\tstd::sort(files.begin(), files.end());\n\n\t\treturn files;\n\t}\n\n\tstd::vector<std::string> listSubdirectories(const std::string & path, const bool listHidden)\n\t{\n\t\tif (!directoryExists(path)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tstd::vector<std::string> dirs;\n\n\n\t\ttry {\n\t\t\tboost::filesystem::directory_iterator end_iter;\n\t\t\tfor (boost::filesystem::directory_iterator dir_itr(path); dir_itr != end_iter; ++dir_itr) {\n\n\t\t\t\tconst std::string itemName = dir_itr->path().filename().string();\n\t\t\t\tif (boost::filesystem::is_directory(dir_itr->status())) {\n\t\t\t\t\tif (listHidden || (itemName.size() > 0 && itemName.at(0) != '.')) {\n\t\t\t\t\t\tdirs.push_back(itemName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (const boost::filesystem::filesystem_error& ) {\n\t\t\tstd::cout << \"Can't access or find directory.\" << std::endl;\n\t\t}\n\n\t\tstd::sort(dirs.begin(), dirs.end());\n\n\t\treturn dirs;\n\t}\n\n\n\tbool copyDirectory(const std::string& src, const std::string& dst)\n\t{\n\t\tboost::filesystem::path source = src;\n\t\tboost::filesystem::path destination = dst;\n\t\tnamespace fs = boost::filesystem;\n\t\ttry\n\t\t{\n\t\t\t// Check whether the function call is valid\n\t\t\tif (!fs::exists(source) || !fs::is_directory(source))\n\t\t\t{\n\t\t\t\tstd::cerr << \"Source directory \" << source.string()\n\t\t\t\t\t<< \" does not exist or is not a directory.\" << '\\n'\n\t\t\t\t\t;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (fs::exists(destination))\n\t\t\t{\n\t\t\t\tstd::cerr << \"Destination directory \" << destination.string()\n\t\t\t\t\t<< \" already exists.\" << '\\n'\n\t\t\t\t\t;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Create the destination directory\n\t\t\tif (!fs::create_directory(destination))\n\t\t\t{\n\t\t\t\tstd::cerr << \"Unable to create destination directory\"\n\t\t\t\t\t<< destination.string() << '\\n'\n\t\t\t\t\t;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tcatch (fs::filesystem_error const & e)\n\t\t{\n\t\t\tstd::cerr << e.what() << '\\n';\n\t\t\treturn false;\n\t\t}\n\t\t// Iterate through the source directory\n\t\tfor (fs::directory_iterator file(source); file != fs::directory_iterator(); ++file)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs::path current(file->path());\n\t\t\t\tif (fs::is_directory(current))\n\t\t\t\t{\n\t\t\t\t\t// Found directory: Recursion\n\t\t\t\t\tif (!copyDirectory(current.string(), (destination / current.filename()).string()))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Found file: Copy\n\t\t\t\t\tfs::copy_file(\n\t\t\t\t\t\tcurrent,\n\t\t\t\t\t\tdestination / current.filename()\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (fs::filesystem_error const & e)\n\t\t\t{\n\t\t\t\tstd::cerr << e.what() << '\\n';\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tbool copyFile(const std::string & src, const std::string & dst, const bool overwrite)\n\t{\n\t\tboost::filesystem::path source = src;\n\t\tboost::filesystem::path destination = dst;\n\t\tnamespace fs = boost::filesystem;\n\t\ttry {\n\t\t\t// Check whether the function call is valid\n\t\t\tif (!fs::exists(source) || !fs::is_regular_file(source))\n\t\t\t{\n\t\t\t\tstd::cerr << \"Source file \" << source.string()\n\t\t\t\t\t<< \" does not exist or is not a regular file.\" << '\\n'\n\t\t\t\t\t;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If the destination is a directory, we copy the file into this directory, with the same name.\n\t\t\tif (fs::is_directory(destination)) {\n\t\t\t\tdestination = destination / source.filename();\n\t\t\t}\n\n\t\t\tif (fs::exists(destination) && !overwrite)\n\t\t\t{\n\t\t\t\tstd::cerr << \"Destination file \" << destination.string()\n\t\t\t\t\t<< \" already exists.\" << '\\n'\n\t\t\t\t\t;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(overwrite) {\n\t\t\t\tfs::copy_file(source, destination, boost::filesystem::copy_option::overwrite_if_exists);\n\t\t\t} else {\n\t\t\t\tfs::copy_file(source, destination);\n\t\t\t}\n\n\t\t}\n\t\tcatch (fs::filesystem_error const & e)\n\t\t{\n\t\t\tstd::cerr << e.what() << '\\n';\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tvoid\t\t\temptyDirectory(const std::string& path) {\n\t\tboost::filesystem::path p(path);\n\t\tfor (boost::filesystem::directory_iterator end_dir_it, it(p); it != end_dir_it; ++it) {\n\t\t\tboost::filesystem::remove_all(it->path());\n\t\t}\n\t}\n\n\tbool\t\t\tfileExists(const std::string& path)\n\t{\n\t\tboost::filesystem::path p(path);\n\t\treturn boost::filesystem::exists(p) && boost::filesystem::is_regular_file(path);\n\t}\n\n\tbool\t\t\tdirectoryExists(const std::string& path)\n\t{\n\t\tboost::filesystem::path p(path);\n\t\treturn boost::filesystem::exists(p) && boost::filesystem::is_directory(path);\n\t}\n\n\tsize_t getAvailableMem() {\n#define DIV 1024\n\n#ifdef SIBR_OS_WINDOWS \n\t\tMEMORYSTATUSEX statex;\n\t\tstatex.dwLength = sizeof(statex);\n\t\tGlobalMemoryStatusEx(&statex);\n\t\treturn static_cast<size_t>(statex.ullAvailPhys) / DIV;\n#else\n\t\tlong pages = sysconf(_SC_PHYS_PAGES);\n\t\tlong page_size = sysconf(_SC_PAGE_SIZE);\n\t\treturn static_cast<size_t>(pages * page_size) / DIV;\n#endif\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getInstallDirectory()\n\t{\n\t\tchar exePath[4095];\n\n#ifdef SIBR_OS_WINDOWS \n\t\tunsigned int len = GetModuleFileNameA(GetModuleHandleA(0x0), exePath, MAX_PATH);\n\n\t\tstd::string installDirectory = parentDirectory(parentDirectory(exePath));\n#else\n\t\tunsigned int len=0;\n\n\t\tchar result[PATH_MAX];\n\t\tssize_t c = readlink(\"/proc/self/exe\", result, PATH_MAX);\n\t\tlen = c;\n\t\tconst char* path;\n\t\tif( c != -1 )\n\t\t\tpath = dirname(result);\n\t\telse\n\t\t\tSIBR_ERR  << \"Cant find executable path  \"<< std::endl;\n\n\n\t\tstd::string installDirectory(parentDirectory(path));\n#endif\n\n\t\tif (len == 0 && \n\t\t!directoryExists(installDirectory + \"/bin\")) // memory not sufficient or general error occured\n\t\t{\n\t\t\tSIBR_ERR << \"Can't find install folder! Please specify as command-line option using --appPath option!\" << std::endl;\n\t\t}\n\t\treturn installDirectory;\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getBinDirectory()\n\t{\n\t\treturn getInstallSubDirectory(\"bin\");\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getShadersDirectory(const std::string & subfolder)\n\t{\n\t\treturn getInstallSubDirectory(\"shaders\" + ((subfolder != \"\") ? \"/\" + subfolder : \"\"));\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getScriptsDirectory()\n\t{\n\t\treturn getInstallSubDirectory(\"scripts\");\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getResourcesDirectory()\n\t{\n\t\treturn getInstallSubDirectory(\"resources\");\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getAppDataDirectory()\n\t{\n\t\tstd::string appDataDirectory = \"\";\n#ifdef SIBR_OS_WINDOWS \n\t\tPWSTR path_tmp;\n\n\t\t/* Attempt to get user's AppData folder\n\t\t*\n\t\t* Microsoft Docs:\n\t\t* https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath\n\t\t* https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid\n\t\t*/\n\t\tauto get_folder_path_ret = SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &path_tmp);\n\n\t\t/* Error check */\n\t\tif (get_folder_path_ret != S_OK) {\n\t\t\tCoTaskMemFree(path_tmp);\n\t\t\tSIBR_ERR << \"Could not access AppData folder.\";\n\t\t}\n\n\t\tstd::wstring path_wtmp(path_tmp);\n\t\tappDataDirectory += std::string( path_wtmp.begin(), path_wtmp.end() );\n\t\tappDataDirectory += \"\\\\sibr\";\n\t\tCoTaskMemFree(path_tmp);\n#else\n\t\tstruct passwd *pw = getpwuid(getuid());\n\t\tappDataDirectory += pw->pw_dir + std::string(\"/.sibr\");\n#endif\n\n\t\tmakeDirectory(appDataDirectory);\n\n\t\treturn appDataDirectory;\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::string getInstallSubDirectory(const std::string & subfolder)\n\t{\n\t\tstd::string installDirectory = getInstallDirectory();\n\t\tstd::string installSubDirectory = installDirectory + \"/\" + subfolder;\n\n\t\tif(!directoryExists(installSubDirectory))\n\t\t{\n\t\t\t// try subdirs GD LINUX issue\n\t\t\tinstallSubDirectory = installDirectory + \"/install/\" + subfolder;\n\t\t\tif(!directoryExists(installSubDirectory))\n\t\t\t\tSIBR_ERR << \"Can't find subfolder \" << subfolder << \" in \" << installDirectory << \". Please specify correct app folder as command-line option using --appPath option!\" << std::endl;\n\t\t}\n\n\t\treturn installSubDirectory;\n\t}\n\n\tbool showFilePicker(std::string & selectedElement,\n\n\t\tconst FilePickerMode mode, const std::string & directoryPath, const std::string & extensionsAllowed) {\n\n\t\tnfdchar_t *outPath = NULL;\n\t\tnfdresult_t result = NFD_CANCEL;\n\t\t\n\t\tif (mode == Directory) {\n\t\t\tresult = NFD_PickFolder(directoryPath.c_str(), &outPath);\n\t\t} else if (mode == Save) {\n\t\t\tresult = NFD_SaveDialog(extensionsAllowed.empty() ? NULL : extensionsAllowed.c_str(), directoryPath.c_str(), &outPath);\n\t\t} else {\n\t\t\tresult = NFD_OpenDialog(extensionsAllowed.empty() ? NULL : extensionsAllowed.c_str(), directoryPath.c_str(), &outPath);\n\t\t}\n\n\n\t\tif (result == NFD_OKAY) {\n\t\t\tselectedElement = std::string(outPath);\n\t\t\tfree(outPath);\n\t\t\treturn true;\n\t\t} else if (result == NFD_CANCEL) {\n\t\t\t// User canceled, do nothing.\n\t\t} else {\n\t\t\t// Programmatic error.\n\t\t\tSIBR_WRG << \"Unable to present file dialog.\" << std::endl;\n\t\t\tstd::cout << std::string(NFD_GetError()) << std::endl;\n\t\t}\n\t\tfree(outPath);\n\n\t\treturn false;\n\n\t}\n\n\tSIBR_SYSTEM_EXPORT std::istream& safeGetline(std::istream& is, std::string& t)\n\t{\n#ifdef SIBR_OS_WINDOWS\n\t\treturn std::getline(is, t);\n#else\n\t    t.clear();\n\n\t    // The characters in the stream are read one-by-one using a std::streambuf.\n\t    // That is faster than reading them one-by-one using the std::istream.\n\t    // Code that uses streambuf this way must be guarded by a sentry object.\n\t    // The sentry object performs various tasks,\n\t    // such as thread synchronization and updating the stream state.\n\n\t    std::istream::sentry se(is, true);\n\t    std::streambuf* sb = is.rdbuf();\n\n\t    for(;;) {\n\t\tint c = sb->sbumpc();\n\t\tswitch (c) {\n\t\tcase '\\n':\n\t\t    return is;\n\t\tcase '\\r':\n\t\t    if(sb->sgetc() == '\\n')\n\t\t\tsb->sbumpc();\n\t\t    return is;\n\t\tcase std::streambuf::traits_type::eof():\n\t\t    // Also handle the case when the last line has no line ending\n\t\t\tis.setstate(std::ios::eofbit);\n\t\t\t// this helps ignore the last line if it's empty (otherwise it's a different behavior from std::get_line)\n\t\t\tif (t.empty()) is.setstate(std::ios::badbit);\n\t\t    return is;\n\t\tdefault:\n\t\t    t += (char)c;\n\t\t}\n\t    }\n#endif\n\t}\n\n} // namespace sirb\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Utils.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n# include \"core/system/Config.hpp\"\n# include \"core/system/String.hpp\"\n\nnamespace sibr\n{\n\t/**\n\t* \\addtogroup sibr_system\n\t* @{\n\t*/\n\n#ifdef SIBR_OS_WINDOWS \n\t/** setup console to allow color printing in console\n\t */\n\tSIBR_SYSTEM_EXPORT void\t\t\tsetupConsole(void) ;\n\t/** restore console to no colors\n\t */\n\tSIBR_SYSTEM_EXPORT void\t\t\trestoreConsole(void) ;\n\n#endif\n\n\t/** Load the whole file into a std::string\n\t * \\param filename the file path\n\t * \\return the loaded content */\n\tSIBR_SYSTEM_EXPORT std::string\tloadFile( const std::string& filename );\n\n\t/** Create directory (if it doesn't exist already) \n\t * \\param path the directory path\n\t */\n\tSIBR_SYSTEM_EXPORT void\t\t\tmakeDirectory( const std::string& path );\n\n\t/** List content of directory, sorted alphabetically.\n\t * \\param path directory path\n\t * \\param listHidden should hidden files be listed\n\t * \\param includeSubdirectories should subdirectories be explored\n\t * \\param allowedExtensions a list of allowed extensions to filter the list with (for instance {\"png\", \"bmp\"})\n\t * \\return a list of file names/subpaths\n\t * \\note To get each element full path, use path + \"/\" + itemPath\n\t */\n\tSIBR_SYSTEM_EXPORT std::vector<std::string>\tlistFiles(const std::string & path, const bool listHidden = false, const bool includeSubdirectories = false, const std::vector<std::string> & allowedExtensions = {});\n\n\t/** List content of directory, sorted alphabetically, including subdirectories. \n\t * \\param path directory path\n\t * \\param listHidden should hidden directories be listed\n\t * \\return a list of directory names/subpaths\n\t * \\note To get each element full path, use path + \"/\" + itemPath\n\t */\n\tSIBR_SYSTEM_EXPORT std::vector<std::string>\tlistSubdirectories(const std::string& path, const bool listHidden = false);\n\n\t/** Copy directory. \n\t * \\param src source path\n\t * \\param dst destination path\n\t * \\return success boolean\n\t */\n\tSIBR_SYSTEM_EXPORT bool copyDirectory(const std::string& src, const std::string& dst);\n\n\t/** Copy file.\n\t * \\param src source path\n\t * \\param dst destination path\n\t * \\param overwrite if the file already exists, should it be overwritten\n\t * \\return success boolean\n\t */\n\tSIBR_SYSTEM_EXPORT bool copyFile(const std::string& src, const std::string& dst, const bool overwrite = false);\n\n\t/** Empty a directory (if it exist already) \n\t * \\param path the directory path\n\t */\n\tSIBR_SYSTEM_EXPORT void\t\t\temptyDirectory(const std::string& path);\n\n\t/** Test if a file exists.\n\t *\\param path the file path\n\t *\\return true if file exists\n\t */\n\tSIBR_SYSTEM_EXPORT bool\t\t\tfileExists( const std::string& path );\n\n\t/** Test if a directory exists.\n\t *\\param path the directory path\n\t *\\return true if directory exists\n\t */\n\tSIBR_SYSTEM_EXPORT bool\t\t\tdirectoryExists( const std::string& path );\n\n\t/** \\return the available memory on windows system in Ko*/\n\tSIBR_SYSTEM_EXPORT size_t\t\tgetAvailableMem();\n\n\t/** \\return the binary directory on windows system*/\n\tSIBR_SYSTEM_EXPORT std::string\tgetInstallDirectory();\n\n\t/** \\return the binary directory on windows system*/\n\tSIBR_SYSTEM_EXPORT std::string\tgetBinDirectory();\n\n\t/**\n\t * \\param subfolder optional subfolder for subproject\n\t * \\return the binary directory on windows system\n\t */\n\tSIBR_SYSTEM_EXPORT std::string\tgetShadersDirectory(const std::string & subfolder = \"\");\n\n\t/** \\return the scripts directory on windows system*/\n\tSIBR_SYSTEM_EXPORT std::string\tgetScriptsDirectory();\n\n\t/** \\return the resources directory on windows system*/\n\tSIBR_SYSTEM_EXPORT std::string\tgetResourcesDirectory();\n\n\t/** \\return the user specific application directory */\n\tSIBR_SYSTEM_EXPORT std::string\tgetAppDataDirectory();\n\n\t/** \n\t * \\param subfolder the subfolder to get\n\t * \\return the provided subfolder path on windows system\n\t */\n\tSIBR_SYSTEM_EXPORT std::string\tgetInstallSubDirectory(const std::string & subfolder);\n\n\t/** Selection mode for the file picker. */\n\tenum FilePickerMode {\n\t\tDefault, Save, Directory\n\t};\n\n\t/**\n\t * Present a native OS file picker.\n\t * \\param selectedElement will contain the path to the element selected by the user if any.\n\t * \\param mode the mode to use, pick from Save, Directory, Default.\n\t * \\param directoryPath the initial directory to present to the user.\n\t * \\param extensionsAllowed a list of file extensions to allow: \"obj,ply\" for instance.\n\t * \\return true if an element was selected, else false.\n\t * \\warning '.' relative path is unsupported for directoryPath.\n\t */\n\tSIBR_SYSTEM_EXPORT bool showFilePicker(std::string & selectedElement,\n\t\tconst FilePickerMode mode, const std::string & directoryPath = \"\", const std::string & extensionsAllowed = \"\");\n\n\t/** Measure and print the timing of a task.\n\t *\\param s description\n\t *\\param f function to run\n\t *\\param args arguments for the function\n\t */\n\ttemplate<typename FunType, typename ...ArgsType>\n\tvoid taskTiming(const std::string & s, FunType && f, ArgsType && ... args) {\n\t\tconst auto start = std::chrono::high_resolution_clock::now();\n\t\tf(args...);\n\t\tconst auto end = std::chrono::high_resolution_clock::now();\n\t\tstd::cout << s << \" : \" << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << \" ms\" << std::endl;\n\t};\n\n\tSIBR_SYSTEM_EXPORT std::istream& safeGetline(std::istream& is, std::string& t);\n\n\t/*** @} */\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Vector.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/system/Vector.hpp\"\n# include \"core/system/Quaternion.hpp\"\n\nnamespace sibr\n{\n\n\tVector3f toColorFloat(Vector3ub & colorUB ) {\n\t\treturn colorUB.cast<float>().unaryExpr( [] (unsigned char c) { return (float)c/255.0f; } );\n\t}\n\n\tVector3ub toColorUB( Vector3f & colorFloat ) {\n\t\treturn colorFloat.unaryExpr( [] (float f) { return std::floor(f*255.0f); } ).cast<unsigned char>();\n\t}\n\n\tEigen::Matrix<float, 4, 4, Eigen::DontAlign> alignRotationMatrix(const sibr::Vector3f & from, const sibr::Vector3f & to)\n\t{\n\t\tsibr::Quaternionf q = sibr::Quaternionf::FromTwoVectors(from, to);\n\t\tq.normalize();\n\t\tEigen::Matrix3f R = q.toRotationMatrix();\n\t\tsibr::Matrix4f R4;\n\t\tR4.setIdentity();\n\t\tR4.block<3, 3>(0, 0) = R;\n\t\treturn R4;\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/Vector.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/system/Config.hpp\"\r\n\r\n\r\n\r\nnamespace Eigen\r\n{\r\n\t/**\r\n\t* \\addtogroup sibr_system\r\n\t* @{\r\n\t*/\r\n\r\n\t// The following operators work with Eigen structs, so\r\n\t// they must be declared in the namespace Eigen (or\r\n\t// you would have to do sibr::operator < (left, right)\r\n\t// instead of simple left < right)\r\n\r\n\t/** Lexicographic comparison (from left to right).\r\n\t *\\param left first element\r\n\t *\\param right second element\r\n\t *\\return true if left is lexicographically smaller than right.\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tbool operator<(const Eigen::Matrix<T, N, 1, Options>& left, const Eigen::Matrix<T, N, 1, Options>& right) {\r\n\r\n\t\tfor (int c = 0; c < N; c++) {\r\n\t\t\tif (left[c] < right[c]) return true;\r\n\t\t\telse if (left[c] > right[c]) return false;\r\n\t\t}\r\n\t\treturn false; //case where they are equal\r\n\r\n\t}\r\n\r\n\t// stream\r\n\r\n\t/** Output matrix to a stream.\r\n\t *\\param s stream\r\n\t *\\param t matrix\r\n\t *\\return the stream for chaining\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tstd::ostream& operator<<( std::ostream& s, const Eigen::Matrix<T, N, 1, Options>& t ) {\r\n\t\ts << '(';\r\n\t\tfor (uint i=0; i<N; i++) { s << t[i]; if (i < N-1) s << ','; }\r\n\t\ts << ')';\r\n\t\treturn (s);\r\n\t}\r\n\r\n\t/** Read matrix from a stream.\r\n\t *\\param s stream\r\n\t *\\param t matrix\r\n\t *\\return the stream for chaining\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tstd::istream& operator>>( std::istream& s, Eigen::Matrix<T, N, 1, Options>& t ) {\r\n\t\tchar tmp = 0;\r\n\t\ts >> tmp; // (\r\n\t\tfor (int i = 0; i < N; ++i)\r\n\t\t{\r\n\t\t\ts >> t [i];\r\n\t\t\ts >> tmp; //, or )\r\n\t\t}\r\n\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/** @} */\r\n}\r\n\r\nnamespace sibr\r\n{\r\n\r\n\t/**\r\n\t* \\addtogroup sibr_system\r\n\t* @{\r\n\t*/\r\n\r\n\ttemplate <typename T, int N>\r\n\tusing Vector = Eigen::Matrix<T, N, 1, Eigen::DontAlign>;\r\n\r\n\t/** Fractional part of each component.\r\n\t *\\param A vector\r\n\t *\\return the fractional matrix\r\n\t **/\r\n\ttemplate <typename T, int N, int Options>\r\n\tEigen::Matrix<T, N, 1, Options>\t\t\tfrac( const Eigen::Matrix<T, N, 1, Options>& A ) {\r\n\t\tEigen::Matrix<T, N, 1, Options> out = A;\r\n\t\tfor (int i = 0; i < N; ++i)\r\n\t\t\tout[i] = out[i] - floor(out[i]);\r\n\t\treturn out;\r\n\t}\r\n\r\n\t/** Distance between two vectors\r\n\t *\\param A first vector\r\n\t *\\param B second vector\r\n\t *\\return norm(A-B)\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline T\t\t\tdistance( const Eigen::Matrix<T, N, 1, Options>& A, const Eigen::Matrix<T, N, 1, Options>& B ) {\r\n\t\treturn (A-B).norm();\r\n\t}\r\n\r\n\t/** Return the length of a vector.\r\n\t *\\param A vector\r\n\t *\\return norm(A)\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline T\t\t\tlength( const Eigen::Matrix<T, N, 1, Options>& A ) {\r\n\t\treturn A.norm();\r\n\t}\r\n\r\n\t/** Return the squared length of a vector.\r\n\t *\\param A vector\r\n\t *\\return norm(A)^2\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline T\t\t\tsqLength( const Eigen::Matrix<T, N, 1, Options>& A ) {\r\n\t\treturn A.squaredNorm();\r\n\t}\r\n\r\n\t/** Compute the dot product of two vectors\r\n\t *\\param A first vector\r\n\t *\\param B second vector\r\n\t *\\return A.B\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline T\t\t\tdot( const Eigen::Matrix<T, N, 1, Options>& A, const Eigen::Matrix<T, N, 1, Options>& B ) {\r\n\t\treturn A.dot(B);\r\n\t}\r\n\r\n\t/** Compute the cross product of two vectors\r\n\t *\\param A first vector\r\n\t *\\param B second vector\r\n\t *\\return AxB\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline Eigen::Matrix<T, N, 1, Options>\tcross( const Eigen::Matrix<T, N, 1, Options>& A, const Eigen::Matrix<T, N, 1, Options>& B ) {\r\n\t\treturn A.cross(B);\r\n\t}\r\n\r\n\t/** Clamp each component of a vector between two values.\r\n\t * \\param A vector\r\n\t * \\param min min values vector\r\n\t * \\param max max values vector\r\n\t * \\return min(max(A, min), max)\r\n\t */\r\n\ttemplate <typename T, int N>\r\n\tinline Vector<T,N> clamp(const Vector<T, N>& A, const Vector<T, N> & min, const Vector<T, N> & max) {\r\n\t\treturn A.cwiseMax(min).cwiseMin(max);\r\n\t}\r\n\r\n\t/** Compute the cotangent of the angle between two vectors.\r\n\t *\\param A first vector\r\n\t *\\param B second vector\r\n\t *\\return the cotangent\r\n\t */\r\n\ttemplate <typename T, int N, int Options>\r\n\tinline T cotan(const Eigen::Matrix<T, N, 1, Options>& A, const Eigen::Matrix<T, N, 1, Options>& B) {\r\n\t\treturn A.dot(B) / A.cross(B).norm();\r\n\t}\r\n\r\n\t/** Convert an unsigned char color in [0,255] to a float color in [0,1].\r\n\t *\\param colorUB the color vector\r\n\t *\\return the [0,1] float vector\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT Eigen::Matrix<float, 3,\t1, Eigen::DontAlign>  toColorFloat( Vector<unsigned char, 3> & colorUB );\r\n\r\n\t/** Convert a float color in [0,1] to an unsigned char color in [0,255].\r\n\t *\\param colorFloat the color vector\r\n\t *\\return the [0,255] float vector\r\n\t */\r\n\tSIBR_SYSTEM_EXPORT Eigen::Matrix<unsigned char, 3,1,Eigen::DontAlign> toColorUB( Vector<float,3> & colorFloat );\r\n\r\n\t// Typedefs.\r\n\r\n\ttypedef\tEigen::Matrix<float, 1,\t\t\t1,Eigen::DontAlign>\t\t\tVector1f;\r\n\ttypedef\tEigen::Matrix<int, 1,\t\t\t1,Eigen::DontAlign>\t\t\tVector1i;\r\n\r\n\ttypedef\tEigen::Matrix<unsigned, 2,\t\t1,Eigen::DontAlign>\t\t\tVector2u;\r\n\ttypedef\tEigen::Matrix<unsigned char, 2,\t1,Eigen::DontAlign>\t\t\tVector2ub;\r\n\ttypedef\tEigen::Matrix<int, 2,\t\t\t1,Eigen::DontAlign>\t\t\tVector2i;\r\n\ttypedef\tEigen::Matrix<float, 2,\t\t\t1,Eigen::DontAlign>\t\t\tVector2f;\r\n\ttypedef\tEigen::Matrix<double, 2,\t\t1,Eigen::DontAlign>\t\t\tVector2d;\r\n\r\n\ttypedef\tEigen::Matrix<unsigned, 3,\t\t1,Eigen::DontAlign>\t\t\tVector3u;\r\n\ttypedef\tEigen::Matrix<unsigned char, 3,\t1,Eigen::DontAlign>\t\t\tVector3ub;\r\n\ttypedef\tEigen::Matrix<unsigned short int, 3, 1,Eigen::DontAlign>\tVector3s;\r\n\ttypedef\tEigen::Matrix<int, 3,\t\t\t1,Eigen::DontAlign>\t\t\tVector3i;\r\n\ttypedef\tEigen::Matrix<float, 3,\t\t\t1,Eigen::DontAlign>\t\t\tVector3f;\r\n\ttypedef\tEigen::Matrix<double, 3,\t\t1,Eigen::DontAlign>\t\t\tVector3d;\r\n\r\n\ttypedef\tEigen::Matrix<unsigned, 4,\t\t1,Eigen::DontAlign>\t\t\tVector4u;\r\n\ttypedef\tEigen::Matrix<unsigned char, 4,\t1,Eigen::DontAlign>\t\t\tVector4ub;\r\n\ttypedef\tEigen::Matrix<int, 4,\t\t\t1,Eigen::DontAlign>\t\t\tVector4i;\r\n\ttypedef\tEigen::Matrix<float, 4,\t\t\t1,Eigen::DontAlign>\t\t\tVector4f;\r\n\ttypedef\tEigen::Matrix<double, 4,\t\t1,Eigen::DontAlign>\t\t\tVector4d;\r\n\r\n\t/**\r\n\t\tReturn a 4x4 3D rotation matrix that aligns the first vector onto the second one.\r\n\t\t\\param from source vector, current direction\r\n\t\t\\param to destination vector, target direction\r\n\t\t\\return the rotation matrix\r\n\t*/\r\n\tSIBR_SYSTEM_EXPORT Eigen::Matrix<float, 4, 4, Eigen::DontAlign> alignRotationMatrix(const sibr::Vector3f & from, const sibr::Vector3f & to);\r\n\r\n\t/** @} */\r\n} // namespace sibr\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/VectorUtils.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"VectorUtils.hpp\""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/VectorUtils.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n# include \"core/system/Config.hpp\"\n#include <functional>\n\nnamespace sibr\n{\n\t/**\n\t* \\addtogroup sibr_system\n\t* @{\n\t*/\n\n\t/** Sum elements from a vector.\n\t *\\param vec vector\n\t *\\param f validity function (f(i) == true if the i-th element should be taken into account.\n\t *\\return the accumulated sum\n\t **/\n\ttemplate<typename T_in, typename T_out = T_in> T_out sum(\n\t\tconst std::vector<T_in> & vec ,\n\t\tconst std::function<bool(T_in)> & f = [](T_in val) { return true; }\n\t) {\n\t\tdouble sum = 0;\n\t\tfor (T_in val : vec) {\n\t\t\tif( f(val) ){\n\t\t\t\tsum += (double)val;\n\t\t\t}\n\t\t}\n\t\treturn (T_out)sum;\n\t}\n\n\t/** Weighted sum of elements in a vector.\n\t *\\param vec vector\n\t *\\param weights per-element weight\n\t *\\param f validity function (f(i) == true if the i-th element should be taken into account.\n\t *\\return the weighted sum\n\t **/\n\ttemplate<typename T_in, typename T_out = T_in> std::vector<T_out> weighted_normalization(\n\t\tconst std::vector<T_in> & vec,\n\t\tconst std::vector<T_in> & weights,\n\t\tconst std::function<bool(T_in)> & f = [](T_in val) { return true; }\n\t) {\n\t\tdouble sum = 0;\n\t\tint size = (int)std::min(vec.size(), weights.size());\n\t\tfor (int i = 0; i < size; ++i) {\n\t\t\tT_in val = vec[i];\n\t\t\tif (f(val)) {\n\t\t\t\tsum += (double)val*(double)weights[i];\n\t\t\t}\n\t\t}\n\n\t\tstd::vector<T_out> out(size);\n\t\tfor (int i = 0; i < size; ++i) {\n\t\t\tif ((sum == 0) || !f(vec[i])) {\n\t\t\t\tout[i] = (T_out)vec[i];\n\t\t\t} else {\n\t\t\t\tout[i] = (T_out)( ( (double)vec[i] * (double)weights[i] )/sum );\n\t\t\t}\n\t\t}\n\t\t\t\n\t\treturn out;\n\t}\n\n\t/** Apply a function to each element of a vector (not in place)\n\t *\\param vec vector\n\t *\\param f function to apply\n\t *\\return vector containing the processed results\n\t */\n\ttemplate<typename T_in, typename T_out = T_in> std::vector<T_out> applyLambda(\n\t\tconst std::vector<T_in> & vec,\n\t\tconst std::function<T_out(T_in)> & f\n\t) {\n\t\tstd::vector<T_out> out(vec.size());\n\t\tfor (int i = 0; i < vec.size(); ++i) {\n\t\t\tout[i] = f(vec[i]);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**  Apply a function to each pair of elements from two vectors of same size (not in place).\n\t *\\param vec1 first vector\n\t *\\param vec2 second vector\n\t *\\param f function to apply\n\t *\\return vector containing the processed results\n\t */\n\ttemplate<typename T_in, typename T_out> std::vector<T_out> applyLambda(\n\t\tconst std::vector<T_in> & vec1,\n\t\tconst std::vector<T_in> & vec2,\n\t\tconst std::function<T_out(T_in,T_in)> & f\n\t) {\n\t\tint size = (int)std::min(vec1.size(), vec2.size());\n\t\tstd::vector<T_out> out(size);\n\t\tfor (int i = 0; i < size; ++i) {\n\t\t\tout[i] = f(vec1[i],vec2[i]);\n\t\t}\n\t\treturn out;\n\t}\n\n\t/** Compute the variance of elements in a vector.\n\t *\\param vec vector\n\t *\\param f validity function (f(i) == true if the i-th element should be taken into account.\n\t *\\return the variance\n\t **/\n\ttemplate<typename T_in, typename T_out = T_in> T_out var(\n\t\tconst std::vector<T_in> & vec,\n\t\tconst std::function<bool(T_in)> & f = [](T_in val) { return true; } \n\t) {\n\t\tdouble sum = 0;\n\t\tdouble sum2 = 0;\n\t\tint n = 0;\n\n\t\tfor (T_in val : vec) {\n\t\t\tif ( f(val) ) {\n\t\t\t\tsum += (double)val;\n\t\t\t\tsum2 += (double)val*(double)val;\n\t\t\t\t++n;\n\t\t\t}\n\t\t}\n\n\t\tif (n < 2) {\n\t\t\treturn (T_out)(-1);\n\t\t}\n\t\telse {\n\t\t\treturn (T_out)((sum2 - sum*sum / (double)n) / double(n - 1));\n\t\t}\n\t\t\n\t}\n\n\t/** Normalize all elements in a vector based on the min and max values in it (not in place).\n\t *\\param vec vector\n\t *\\param f validity function (f(i) == true if the i-th element should be taken into account.\n\t *\\return a vector containing the normalized values\n\t **/\n\ttemplate<typename T_in, typename T_out = T_in> std::vector<T_out> normalizedMinMax(\n\t\tconst std::vector<T_in> & vec,\n\t\tconst std::function<bool(T_in)> & f = [](T_in val) { return true; }\n\t) {\n\t\tT_in min = 0, max = 0;\n\t\tbool first = true;\n\t\tfor (T_in val : vec) {\n\t\t\tif (f(val)) {\n\t\t\t\tif (first || val > max) {\n\t\t\t\t\tmax = val;\n\t\t\t\t}\n\t\t\t\tif (first || val < min) {\n\t\t\t\t\tmin = val;\n\t\t\t\t}\n\t\t\t\tfirst = false;\n\t\t\t}\n\t\t}\n\t\tif (min == max) {\n\t\t\treturn std::vector<T_out>();\n\t\t}\n\t\t\n\t\tstd::vector<T_out> out(vec.size());\n\t\tconst double normFactor = 1.0 / (double)(max - min);\n\t\tfor (int i = 0; i < (int)vec.size(); ++i) {\n\t\t\tout[i] = f(vec[i]) ? (T_out)((double)(vec[i] - min)*normFactor) : (T_out)vec[i];\n\t\t}\n\t\treturn out;\n\t}\n\n\t/** Apply a power-sum normalization.\n\t *\\param vec vector\n\t *\\param f validity function (f(i) == true if the i-th element should be taken into account.\n\t *\\return a vector containing the normalized values\n\t */\n\ttemplate<typename T_in, typename T_out = T_in, unsigned int Power = 2> std::vector<T_out> normalizedZeroOne(\n\t\tconst std::vector<T_in> & vec,\n\t\tconst std::function<bool(T_in)> & f = [](T_in val) { return true; }\n\t) {\n\t\tdouble sumP = 0;\n\n\t\tfor (T_in val : vec) {\n\t\t\tif (f(val)) {\n\t\t\t\tsumP += std::pow((double)val, Power);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tif (sumP == 0) {\n\t\t\treturn std::vector<T_out>();\n\t\t}\n\t\t\n\t\tstd::vector<T_out> out(vec.size());\n\t\tfor (int i = 0; i <(int)vec.size(); ++i) {\n\t\t\tout[i] = f(vec[i]) ? (T_out)(vec[i] / sumP) : (T_out)vec[i];\n\t\t}\n\t\treturn out;\n\t\t\t\n\t}\n\n\t/*** @} */\n\n\t/**\n\t * Multi dimensional vector.\n\t* \\ingroup sibr_system\n\t*/\n\ttemplate< typename T, unsigned int N >\n\tclass MultiVector : public std::vector< MultiVector<T, N - 1> >\n\t{\n\t\tstatic_assert(N >= 1, \" MultiVector<N> : the number of dimensions N must be >= 1 \");\n\n\t\tfriend class MultiVector<T, N + 1>;\n\n\t\ttypedef MultiVector<T, N - 1> SubVector;\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tMultiVector() {}\n\n\t\t/** Constructor.\n\t\t *\\param n number of elements on each axis\n\t\t *\\param t default value\n\t\t */\n\t\tMultiVector(int n, const T & t = T() )\n\t\t\t: std::vector< SubVector >(n, SubVector(n, t)) { }\n\n\t\t/** Constructor.\n\t\t *\\param dims number of elements on each axis\n\t\t *\\param t default value\n\t\t */\n\t\tMultiVector(const std::vector<int> & dims, const T & t = T() )\n\t\t\t: std::vector< SubVector >(dims.at(dims.size()-N), SubVector(dims, t)) { }\n\n\t\t/** Getter\n\t\t *\\param  ids N-d coordinates\n\t\t *\\return a reference to the corresponding value.\n\t\t */\n\t\tT & multiAt(const std::vector<int> & ids) {\n\t\t\treturn this.at(ids.at(ids.size() - N)).multiAt(ids);\n\t\t}\n\n\t\t/** Getter\n\t\t *\\param  ids N-d coordinates\n\t\t *\\return a const reference to the corresponding value.\n\t\t */\n\t\tconst T & multiAt(const std::vector<int> & ids) const {\n\t\t\treturn this.at(ids.at(ids.size() - N)).multiAt(ids);\n\t\t}\n\n\t\t/** Get the size along each dimension.\n\t\t *\\return the N-d size\n\t\t **/\n\t\tstd::vector<int> dims() const\n\t\t{\n\t\t\tstd::vector<int> v;\n\t\t\tdimsRecur(v);\n\t\t\treturn v;\n\t\t}\n\n\t\t/**Print the size along each dimension.\n\t\t */\n\t\tvoid dimsDisplay() const {\n\t\t\tstd::vector<int> d(dims());\n\t\t\tstd::cout << \" [ \";\n\t\t\tfor (int i = 0; i < N; ++i) {\n\t\t\t\tstd::cout << d[i] << (i != N - 1 ? \" x \" : \"\");\n\t\t\t}\n\t\t\tstd::cout << \" ] \" << std::endl;\n\t\t}\n\n\tprotected:\n\n\t\t/** Helper to get the dimensions.\n\t\t *\\param v will contain the size along each axis\n\t\t */\n\t\tvoid dimsRecur(std::vector<int> & v) const\n\t\t{\n\t\t\tv.push_back((int)this.size());\n\t\t\tthis.at(0).dimsRecur(v);\n\t\t}\n\t};\n\n\t/** Base multi-dimensional vector class (a 1D vector). \n\t\\ingroup sibr_system\n\t*/\n\ttemplate<typename T>\n\tclass MultiVector<T, 1> : public std::vector<T>\n\t{\n\t\tfriend class MultiVector<T, 2>;\n\n\tpublic:\n\n\t\t/// Constructor.\n\t\tMultiVector() {}\n\n\t\t/** Constructor.\n\t\t *\\param n number of elements\n\t\t *\\param t default value\n\t\t */\n\t\tMultiVector(int n, const T & t = T() )\n\t\t\t: std::vector<T>(n, t) { }\n\n\t\t/** Constructor.\n\t\t *\\param dims number of elements on each axis (only the last one will be considered here).\n\t\t *\\param t default value\n\t\t */\n\t\tMultiVector(const std::vector<int> & dims, const T & t = T())\n\t\t\t: std::vector<T>(dims.at(dims.size()-1), t) { }\n\n\t\t/** Getter\n\t\t *\\param  ids N-d coordinates\n\t\t *\\return a reference to the corresponding value.\n\t\t */\n\t\tT & multiAt(const std::vector<int> & ids) {\n\t\t\treturn this.at(ids.at(ids.size() - 1));\n\t\t}\n\n\t\t/** Getter\n\t\t *\\param  ids N-d coordinates\n\t\t *\\return a const reference to the corresponding value.\n\t\t */\n\t\tconst T & multiAt(const std::vector<int> & ids) const {\n\t\t\treturn this.at(ids.at(ids.size() - 1));\n\t\t}\n\n\t\t/**Print the size along each dimension.\n\t\t */\n\t\tvoid dimsDisplay() const {\n\t\t\tstd::cout << \" [ \" << this.size() << \" ] \" << std::endl;\n\t\t}\n\n\tprotected:\n\n\t\t/** Helper to get the dimensions.\n\t\t *\\param v will contain the size along each axis\n\t\t */\n\t\tvoid dimsRecur(std::vector<int> & v) const\n\t\t{\n\t\t\tv.push_back((int)this.size());\n\t\t}\n\n\t};\n\n\t\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/XMLTree.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"XMLTree.h\"\n#include \"rapidxml/rapidxml_print.hpp\"\n#include <iostream>\n#include <fstream>\n#include <sstream>\n\n\nnamespace sibr {\n\tXMLTree::XMLTree(const std::string &  path)\n\t{\n\t\tstd::cout << \"Parsing xml file < \" << path << \" > : \";\n\t\tstd::ifstream file(path.c_str());\n\t\tif (file) {\n\t\t\tstd::stringstream buffer;\n\t\t\tbuffer << file.rdbuf();\n\t\t\tfile.close();\n\t\t\txmlString = std::move(std::string(buffer.str()));\n\t\t\tthis->parse<0>(&xmlString[0]);\n\t\t\tstd::cout << \"success \" << std::endl;\n\t\t}\n\t\telse {\n\t\t\tstd::cout << \"error, cant open file \" << std::endl;\n\t\t}\n\t}\n\n\n\tXMLTree::~XMLTree(void)\n\t{\n\t}\n\n\n\tbool XMLTree::save(const std::string & path) const {\n\t\tstd::ofstream file(path);\n\t\tif(!file.is_open()) {\n\t\t\tSIBR_WRG << \"Unable to save XML to path \\\"\" << path << \"\\\".\" << std::endl;\n\t\t\treturn false;\n\t\t}\n\n\t\tfile << *this;\n\t\tfile.close();\n\t\treturn true;\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/XMLTree.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <rapidxml/rapidxml.hpp>\n#include <string>\n#include \"Config.hpp\"\n\nnamespace sibr {\n\n\t/** Wrapper of rapidxml xml_document<> class so that the string associated to the xml file stays in memory.\n\tNeeded to access nodes by their names.\n\t* \\ingroup sibr_system\n\t*/\n\tclass SIBR_SYSTEM_EXPORT XMLTree : public rapidxml::xml_document<>\n\t{\n\tpublic:\n\t\t/** Construct an XML structure from the content of a file.\n\t\t\\param path the file path\n\t\t*/\n\t\tXMLTree(const std::string & path);\n\n\t\t/** Destructor. */\n\t\t~XMLTree(void);\n\n\t\t/** Save the XML structure to a file as a string representation.\n\t\t\\param path output path\n\t\t\\return a success flag\n\t\t*/\n\t\tbool save(const std::string & path) const;\n\n\tprivate:\n\t\tstd::string xmlString; //< Internal copy of the laoded string.\n\t};\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/system/sibr_system.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_system sibr_system\n\n\t\\brief System utilities.\n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(sibr_video)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\n\n## Specify target rules\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\n\ninclude_directories(${Boost_INCLUDE_DIRS})\ntarget_link_libraries(${PROJECT_NAME}\n\t${FFMPEG_LIBRARIES}\n\tOpenMP::OpenMP_CXX\n\tsibr_graphics\n)\n\n\n\nadd_definitions( -DSIBR_VIDEO_EXPORTS -DBOOST_ALL_DYN_LINK  )\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\n\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/graphics/Config.hpp\"\n\n//// Export Macro (used for creating DLLs) ////\n# ifdef SIBR_OS_WINDOWS\n#  ifdef SIBR_STATIC_VIDEO_DEFINE\n#    define SIBR_VIDEO_EXPORT\n#    define SIBR_NO_VIDEO_EXPORT\n#  else\n#    ifndef SIBR_VIDEO_EXPORT\n#      ifdef SIBR_VIDEO_EXPORTS\n          /* We are building this library */\n#        define SIBR_VIDEO_EXPORT __declspec(dllexport)\n#      else\n          /* We are using this library */\n#        define SIBR_VIDEO_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT \n#    endif\n#  endif\n# else\n#  define SIBR_VIDEO_EXPORT\n# endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/FFmpegVideoEncoder.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"FFmpegVideoEncoder.hpp\"\n\n#ifndef HEADLESS\nextern \"C\"\n{\n#include <libavcodec/avcodec.h>\n#include <libavformat/avformat.h>\n#include <libswscale/swscale.h>\n}\n#endif\n\n#define QQ(rat) (rat.num/(double)rat.den)\n\n// Disable ffmpeg deprecation warning.\n#pragma warning(disable : 4996)\n\nnamespace sibr {\n\n\tbool FFVideoEncoder::ffmpegInitDone = false;\n\n\tFFVideoEncoder::FFVideoEncoder(\n\t\tconst std::string & _filepath,\n\t\tdouble _fps,\n\t\tconst sibr::Vector2i & size,\n\t\tbool forceResize\n\t) : filepath(_filepath), fps(_fps), _forceResize(forceResize)\n\t{\n#ifndef HEADLESS\n\t\t/** Init FFMPEG, registering available codec plugins. */\n\t\tif (!ffmpegInitDone) {\n\t\t\tSIBR_LOG << \"[FFMPEG] Registering all.\" << std::endl;\n\t\t\t// Ignore next line warning.\n#pragma warning(suppress : 4996)\n\t\t\tav_register_all();\n\t\t\tffmpegInitDone = true;\n\t\t}\n\t\t\n\t\tsibr::Vector2i sizeFix = size;\n\t\tbool hadToFix = false;\n\t\tif(sizeFix[0]%2 != 0) {\n\t\t\tsizeFix[0] -= 1;\n\t\t\thadToFix = true;\n\t\t}\n\t\tif (sizeFix[1] % 2 != 0) {\n\t\t\tsizeFix[1] -= 1;\n\t\t\thadToFix = true;\n\t\t}\n\t\tif(hadToFix) {\n\t\t\tSIBR_WRG << \"Non-even video dimensions, resized to \" << sizeFix[0] << \"x\" << sizeFix[1] << \".\" << std::endl;\n\t\t\t_forceResize = true;\n\t\t}\n\t\t\n\t\tinit(sizeFix);\n#endif\n\t}\n\n\tbool FFVideoEncoder::isFine() const\n\t{\n\t\treturn initWasFine;\n\t}\n\n\tvoid FFVideoEncoder::close()\n\t{\n#ifndef HEADLESS\n\t\tif (av_write_trailer(pFormatCtx) < 0) {\n\t\t\tSIBR_WRG << \"[FFMPEG] Can not av_write_trailer \" << std::endl;\n\t\t}\n\n\t\tif (video_st) {\n\t\t\tavcodec_close(video_st->codec);\n\t\t\tav_free(frameYUV);\n\t\t}\n\t\tavio_close(pFormatCtx->pb);\n\t\tavformat_free_context(pFormatCtx);\n\n\t\tneedFree = false;\n#endif\n\t}\n\n\tFFVideoEncoder::~FFVideoEncoder()\n\t{\n\t\tif (needFree) {\n\t\t\tclose();\n\t\t}\n\n\t}\n\n\tvoid FFVideoEncoder::init(const sibr::Vector2i & size)\n\t{\n#ifndef HEADLESS\n\t\tw = size[0];\n\t\th = size[1];\n\n\t\tauto out_file = filepath.c_str();\n\n\n\t\tpFormatCtx = avformat_alloc_context();\n\n\t\tfmt = av_guess_format(NULL, out_file, NULL);\n\t\tpFormatCtx->oformat = fmt;\n\n\t\tconst bool isH264 = pFormatCtx->oformat->video_codec == AV_CODEC_ID_H264;\n\t\tif(isH264){\n\t\t\tSIBR_LOG << \"[FFMPEG] Found H264 codec.\" << std::endl;\n\t\t} else {\n\t\t\tSIBR_LOG << \"[FFMPEG] Found codec with ID \" << pFormatCtx->oformat->video_codec << \" (not H264).\" << std::endl;\n\t\t}\n\t\t\n\t\tif (avio_open(&pFormatCtx->pb, out_file, AVIO_FLAG_READ_WRITE) < 0) {\n\t\t\tSIBR_WRG << \"[FFMPEG] Could not open file \" << filepath << std::endl;\n\t\t\treturn;\n\t\t}\n\n\t\tpCodec = avcodec_find_encoder(pFormatCtx->oformat->video_codec);\n\t\tif (!pCodec) {\n\t\t\tSIBR_WRG << \"[FFMPEG] Could not find codec.\" << std::endl;\n\t\t\treturn;\n\t\t}\n\n\t\tvideo_st = avformat_new_stream(pFormatCtx, pCodec);\n\n\t\tif (video_st == NULL) {\n\t\t\tSIBR_WRG << \"[FFMPEG] Could not create stream.\" << std::endl;\n\t\t\treturn;\n\t\t}\n\n\t\tpCodecCtx = video_st->codec;\n\t\tpCodecCtx->codec_id = fmt->video_codec;\n\t\tpCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;\n\t\tpCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;\n\t\tpCodecCtx->width = w;\n\t\tpCodecCtx->height = h;\n\t\tpCodecCtx->gop_size = 10;\n\t\tpCodecCtx->time_base.num = 1;\n\t\tpCodecCtx->time_base.den = (int)std::round(fps);\n\n\t\t// Required for the header to be well-formed and compatible with Powerpoint/MediaPlayer/...\n\t\tif (pFormatCtx->oformat->flags & AVFMT_GLOBALHEADER) {\n\t\t\tpCodecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;\n\t\t}\n\n\t\t//H.264 specific options.\n\t\tAVDictionary *param = 0;\n\t\tif (pCodecCtx->codec_id == AV_CODEC_ID_H264) {\n\t\t\tav_dict_set(&param, \"preset\", \"slow\", 0);\n\t\t\tav_dict_set(&param, \"tune\", \"zerolatency\", 0);\n\t\t}\n\n\t\tav_dump_format(pFormatCtx, 0, out_file, 1);\n\n\t\tint res = avcodec_open2(pCodecCtx, pCodec, &param);\n\t\tif(res < 0){\n\t\t\tSIBR_WRG << \"[FFMPEG] Failed to open encoder, error: \" << res << std::endl;\n\t\t\treturn;\n\t\t}\n\t\t// Write the file header.\n\t\tavformat_write_header(pFormatCtx, NULL);\n\n\t\t// Prepare the scratch frame.\n\t\tframeYUV = av_frame_alloc();\n\t\tframeYUV->format = (int)pCodecCtx->pix_fmt;\n\t\tframeYUV->width = w;\n\t\tframeYUV->height = h;\n\t\tframeYUV->linesize[0] = w;\n\t\tframeYUV->linesize[1] = w / 2;\n\t\tframeYUV->linesize[2] = w / 2;\n\n\t\tyuSize[0] = frameYUV->linesize[0] * h;\n\t\tyuSize[1] = frameYUV->linesize[1] * h / 2;\n\n\t\tpkt = av_packet_alloc();\n\n\t\tinitWasFine = true;\n\t\tneedFree = true;\n#endif\n\t}\n\n\n\tbool FFVideoEncoder::operator<<(cv::Mat frame)\n\t{\n#ifndef HEADLESS\n\t\tif (!video_st) {\n\t\t\treturn false;\n\t\t}\n\t\tcv::Mat local;\n\t\tif (frame.cols != w || frame.rows != h) {\n\t\t\tif(_forceResize) {\n\t\t\t\tcv::resize(frame, local, cv::Size(w,h));\n\t\t\t} else {\n\t\t\t\tSIBR_WRG << \"[FFMPEG] Frame doesn't have the same dimensions as the video.\" << std::endl;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tlocal = frame;\n\t\t}\n\n\t\tcv::cvtColor(local, cvFrameYUV, cv::COLOR_BGR2YUV_I420);\n\t\tframeYUV->data[0] = cvFrameYUV.data;\n\t\tframeYUV->data[1] = frameYUV->data[0] + yuSize[0];\n\t\tframeYUV->data[2] = frameYUV->data[1] + yuSize[1];\n\n\t\t//frameYUV->pts = (1.0 / std::round(fps)) *frameCount * 90;\n\t\tframeYUV->pts = (int)(frameCount*(video_st->time_base.den) / ((video_st->time_base.num) * std::round(fps)));\n\t\t++frameCount;\n\n\t\treturn encode(frameYUV);\n#else\n\t\tSIBR_ERR << \"Not supported in headless\" << std::endl;\n\t\treturn false;\n#endif\n\t}\n\n\tbool FFVideoEncoder::operator<<(const sibr::ImageRGB & frame){\n\t\treturn (*this)<<(frame.toOpenCVBGR());\n\t}\n\n#ifndef HEADLESS\n\tbool FFVideoEncoder::encode(AVFrame * frame)\n\t{\n\t\tint got_picture = 0;\n\n\t\tint ret = avcodec_encode_video2(pCodecCtx, pkt, frameYUV, &got_picture);\n\t\tif (ret < 0) {\n\t\t\tSIBR_WRG << \"[FFMPEG] Failed to encode frame.\" << std::endl;\n\t\t\treturn false;\n\t\t}\n\t\tif (got_picture == 1) {\n\t\t\tpkt->stream_index = video_st->index;\n\t\t\tret = av_write_frame(pFormatCtx, pkt);\n\t\t\tav_packet_unref(pkt);\n\t\t}\n\n\t\treturn true;\n\t}\n#endif\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/FFmpegVideoEncoder.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n\n#include <string>\n#include <core/graphics/Image.hpp>\n#include \"Video.hpp\"\n#include \"Config.hpp\"\n\n// Forward libav declarations.\nstruct AVFrame;\nstruct AVFormatContext;\nstruct AVOutputFormat;\nstruct AVStream;\nstruct AVCodecContext;\nstruct AVCodec;\nstruct AVPacket;\n\nnamespace sibr {\n\n\t\n\t/** Video encoder using ffmpeg.\n\tAdapted from https://github.com/leixiaohua1020/simplest_ffmpeg_video_encoder/blob/master/simplest_ffmpeg_video_encoder/simplest_ffmpeg_video_encoder.cpp\n\t\\ingroup sibr_video\n\t*/\n\tclass SIBR_VIDEO_EXPORT FFVideoEncoder {\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t\\param _filepath destination file, the extension will be used to infer the container type.\n\t\t\\param fps target video framerate\n\t\t\\param size target video size, should be even else a resize will happen\n\t\t\\param forceResize resize frames that are not at the target dimensions instead of ignoring them\n\t\t*/\n\t\tFFVideoEncoder(\n\t\t\tconst std::string & _filepath,\n\t\t\tdouble fps,\n\t\t\tconst sibr::Vector2i & size,\n\t\t\tbool forceResize = false\n\t\t);\n\n\t\t/** \\return true if the encoder was properly setup. */\n\t\tbool isFine() const;\n\n\t\t/** Close the file. */\n\t\tvoid close();\n\n\t\t/** Encode a frame.\n\t\t\\param frame the frame to encode\n\t\t\\return a success flag \n\t\t*/\n\t\tbool operator << (cv::Mat frame);\n\n\t\t/** Encode a frame.\n\t\t\\param frame the frame to encode\n\t\t\\return a success flag \n\t\t*/\n\t\tbool operator << (const sibr::ImageRGB & frame);\n\n\t\t/// Destructor.\n\t\t~FFVideoEncoder();\n\n\tprotected:\n\n\t\t/** Setup the encoder.\n\t\t\\param size the video target size, prfer using power of two.\n\t\t*/\n\t\tvoid init(const sibr::Vector2i & size);\n\t\t\n\t\t/** Encode a frame to the file.\n\t\t\\param frame the frame to encode\n\t\t\\return a success flag.\n\t\t*/\n//#define HEADLESS\n#ifndef HEADLESS\n\t\tbool encode(AVFrame *frame);\n#endif \n\n\t\tbool initWasFine = false; ///< Was the encoder init properly.\n\t\tbool needFree = false; ///< Is the file open.\n\t\tstd::string filepath; ///< Destination path.\n\t\tint w, h; ///< Dimensions.\n\t\tint frameCount = 0; ///< Current frame.\n\t\tdouble fps; ///< Framerate.\n\t\tbool _forceResize = false; ///< Resize frames.\n\t\t\n#ifndef HEADLESS\n\t\tAVFrame * frameYUV = NULL; ///< Working frame.\n#endif\n\t\tcv::Mat cvFrameYUV; ///< Working frame data.\n\t\tsibr::Vector2i yuSize; ///< Working size.\n\n#ifndef HEADLESS\n\t\tAVFormatContext* pFormatCtx; ///< Format context.\n\t\tAVOutputFormat* fmt; ///< Output format.\n\t\tAVStream* video_st; ///< Output stream.\n\t\tAVCodecContext* pCodecCtx; ///< Codec context.\n\t\tAVCodec* pCodec; ///< Codec.\n\t\tAVPacket * pkt; ///< Encoding packet.\n\t\t\n#endif\n\t\tstatic bool ffmpegInitDone; ///< FFMPEG initialization status.\n\n\t};\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/MultipleVideoDecoder.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n\n#include <core/video/Video.hpp>\n\nnamespace sibr\n{\n\n\t/** Double-buffered texture, used to load/display video frames for instance.\n\t* \\ingroup sibr_video\n\t*/\n\ttemplate<uint N>\n\tstruct PingPongTexture {\n\t\tusing TexPtr = std::shared_ptr<sibr::Texture2D<uchar, N>>;\n\n\t\t/** \\return the current loading texture. */\n\t\tTexPtr & getLoadingTex();\n\n\t\t/** \\return the current display texture. */\n\t\tTexPtr & getDisplayTex();\n\n\t\t/** Update the content of the loading texture and swap the two textures.\n\t\t\\param frame the new data\n\t\t*/\n\t\ttemplate<typename ImgType>\n\t\tvoid update(const ImgType & frame);\n\n\t\t/** Load the frame into the loading texture.\n\t\t\\param frame the new data\n\t\t*/\n\t\ttemplate<typename ImgType>\n\t\tvoid updateGPU(const ImgType & frame);\n\t\t\n\t\tint displayTex = 1, loadingTex = 1; /// Textures indices.\n\t\tTexPtr ping, pong; ///< Textures.\n\t\tbool first = true; ///< First update.\n\t};\n\n\n\t/** Batch decoding of multiple videos at the same time, stored in a texture array.\n\t* \\ingroup sibr_video\n\t*/\n\ttemplate<typename T, uint N>\n\tstruct MultipleVideoDecoder {\n\t\tusing TexArray = sibr::Texture2DArray<T,N>;\n\t\tusing TexArrayPtr = typename TexArray::Ptr;\n\n\t\t/** Update a set of video players to the next frame.\n\t\t\\param videos the video players to udpate\n\t\t\\note Internally calls both updateCPU and updateGPU.\n\t\t*/\n\t\tvoid update(const std::vector<sibr::VideoPlayer::Ptr> & videos) {\n\t\t\tupdateCPU(videos);\n\t\t\tupdateGPU(videos);\n\n\t\t\tloadingTexArray = (loadingTexArray + 1) % 2;\n\n\t\t\tif (first) {\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tdisplayTexArray = (displayTexArray + 1) % 2;\n\t\t\t}\n\t\t}\n\n\t\t/** Load the next frame on the CPU for a set of video players.\n\t\t\\param videos the video players to udpate\n\t\t*/\n\t\tvoid updateCPU(const std::vector<sibr::VideoPlayer::Ptr> & videos) {\n\t\t\tsize_t numVids = videos.size();\n\n\t\t\tfor (size_t i = 0; i < numVids; ++i) {\n\t\t\t\tvideos[i]->updateCPU();\n\t\t\t}\n\n\t\t}\n\n\t\t/** Upload the next frame to the GPU for a set of video players.\n\t\t\\param videos the video players to udpate\n\t\t*/\n\t\tvoid updateGPU(const std::vector<sibr::VideoPlayer::Ptr> & videos) {\n\t\t\tsize_t numVids = videos.size();\n\t\t\tstd::vector<cv::Mat> frames(numVids);\n\t\t\tfor (size_t i = 0; i < numVids; ++i) {\n\t\t\t\tif (std::is_same_v<T, uchar> && N == 3) {\n\t\t\t\t\tframes[i] = videos[i]->getCurrentFrame();\n\t\t\t\t} else {\n\t\t\t\t\tstd::vector<cv::Mat> cs;\n\t\t\t\t\tcv::split(videos[i]->getCurrentFrame(), cs);\n\t\t\t\t\tframes[i] = cs[0];\n\t\t\t\t}\t\t\t\n\t\t\t}\n\n\t\t\tif (getLoadingTexArray().get()) {\n\t\t\t\tgetLoadingTexArray()->updateFromImages(frames);\n\t\t\t} else {\n\t\t\t\tgetLoadingTexArray() = TexArrayPtr(new TexArray(frames));\n\t\t\t}\n\t\t}\n\n\t\t/** \\return the current loading texture array. */\n\t\tTexArrayPtr & getLoadingTexArray() { return loadingTexArray ? ping : pong; }\n\n\t\t/** \\return the current display texture array. */\n\t\tconst TexArrayPtr & getDisplayTexArray() const { return displayTexArray ? ping : pong; }\n\n\t\tbool first = true; ///< First frame.\n\t\tint loadingTexArray = 1, displayTexArray = 1; ///< Texture indices.\n\t\tTexArrayPtr ping, pong; ///< Textures.\n\t};\n\n\n\t/** Batch decoding of multiple videos at the same time, stored in a texture array.\n\t* Support updating an arbitrary subset. \n\t* \\ingroup sibr_video\n\t*/\n\ttemplate<typename T, uint N>\n\tstruct MultipleVideoDecoderArray : public MultipleVideoDecoder<T,N> {\n\t\tusing TexArray = sibr::Texture2DArray<T, N>;\n\t\tusing TexArrayPtr = typename TexArray::Ptr;\n\n\t\t/** Update a set of video players to the next frame.\n\t\t\\param videos the video players list\n\t\t\\param slices the indices of the videos to update\n\t\t\\note Internally calls both updateCPU and updateGPU.\n\t\t*/\n\t\tvoid update(const std::vector<sibr::VideoPlayer::Ptr> & videos, const std::vector<int> & slices) {\n\t\t\tupdateCPU(videos, slices);\n\t\t\tupdateGPU(videos, slices);\n\n\t\t\tloadingTexArray = (loadingTexArray + 1) % 2;\n\n\t\t\tif (first) {\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tdisplayTexArray = (displayTexArray + 1) % 2;\n\t\t\t}\n\t\t}\n\n\t\t/** Load the next frame on the CPU for a set of video players.\n\t\t\\param videos the video players list\n\t\t\\param slices the indices of the videos to update\n\t\t*/\n\t\tvoid updateCPU(const std::vector<sibr::VideoPlayer::Ptr> & videos, const std::vector<int> & slices) {\n#pragma omp parallel for num_threads(4)\n\t\t\tfor (int i = 0; i < (int)slices.size(); ++i) {\n\t\t\t\tvideos[slices[i]]->updateCPU();\n\t\t\t}\n\t\t}\n\n\t\t/** Upload the next frame to the GPU for a set of video players.\n\t\t\\param videos the video players list\n\t\t\\param slices the indices of the videos to update\n\t\t*/\n\t\tvoid updateGPU(const std::vector<sibr::VideoPlayer::Ptr> & videos, const std::vector<int> & slices) {\n\t\t\tint numVids = (int)videos.size();\n\t\t\tint numSlices = (int)slices.size();\n\n\t\t\tstd::vector<cv::Mat> frames(numVids);\n\t\t\tfor (int s = 0; s < numSlices; ++s) {\n\t\t\t\tif (std::is_same_v<T, uchar> && N == 3) {\n\t\t\t\t\tframes[slices[s]] = videos[slices[s]]->getCurrentFrame();\n\t\t\t\t} else {\n\t\t\t\t\tstd::vector<cv::Mat> cs;\n\t\t\t\t\tcv::split(videos[slices[s]]->getCurrentFrame(), cs);\n\t\t\t\t\tframes[slices[s]] = cs[0];\n\t\t\t\t}\n\t\t\t} \n\n\t\t\tif (!getLoadingTexArray().get()) {\n\t\t\t\tgetLoadingTexArray() = TexArrayPtr(new TexArray((uint)videos.size(), SIBR_GPU_LINEAR_SAMPLING));\n\t\t\t}\n\n\t\t\tCHECK_GL_ERROR;\n\t\t\tgetLoadingTexArray()->updateSlices(frames, slices);\n\t\t}\n\n\t};\n\n\n\t// --- TYPEDEFS ----------------\n\n\tusing PingPong4u = PingPongTexture<4>;\n\tusing PingPong3u = PingPongTexture<3>;\n\tusing PingPong1u = PingPongTexture<1>;\n\tusing MultipleVideoDecoder1u = MultipleVideoDecoder<uchar, 1>;\n\tusing MultipleVideoDecoder3u = MultipleVideoDecoder<uchar, 3>;\n\tusing MultipleVideoDecoderArray1u = MultipleVideoDecoderArray<uchar, 1>;\n\tusing MultipleVideoDecoderArray3u = MultipleVideoDecoderArray<uchar, 3>;\n\n\t// --- IMPLEMENTATION ----------------\n\n\ttemplate<uint N>\n\tstd::shared_ptr<sibr::Texture2D<uchar, N>> & PingPongTexture<N>::getLoadingTex()\n\t{\n\t\treturn loadingTex ? ping : pong;\n\t}\n\n\ttemplate<uint N>\n\tstd::shared_ptr<sibr::Texture2D<uchar,N>> & PingPongTexture<N>::getDisplayTex()\n\t{\n\t\treturn displayTex ? ping : pong;\n\t}\n\n\ttemplate<uint N> template<typename ImgType>\n\tvoid PingPongTexture<N>::update(const ImgType & frame)\n\t{\n\t\tif (first) {\n\t\t\tupdateGPU(frame);\n\t\t\tloadingTex = (loadingTex + 1) % 2;\n\t\t\tfirst = false;\n\t\t\treturn;\n\t\t}\n\n\t\tupdateGPU(frame);\n\n\t\tdisplayTex = (displayTex + 1) % 2;\n\t\tloadingTex = (loadingTex + 1) % 2;\n\t}\n\n\ttemplate<uint N> template<typename ImgType>\n\tvoid PingPongTexture<N>::updateGPU(const ImgType & frame)\n\t{\n\t\tif (getLoadingTex()) {\n\t\t\tgetLoadingTex()->update(frame);\n\t\t} else {\n\t\t\tgetLoadingTex() = TexPtr(new sibr::Texture2D<uchar, N>(frame, SIBR_GPU_LINEAR_SAMPLING));\n\t\t}\n\t}\n\n } // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/Video.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"Video.hpp\"\n#include <opencv2/videoio.hpp>\n// #include \"VideoUtils.hpp\"\n\nnamespace sibr\n{\n\tbool Video::load(const std::string & path)\n\t{\n\t\tcap = cv::VideoCapture(path);\n\t\tfilepath = path;\n\t\tloaded = cap.isOpened();\n\t\tif (loaded) {\n\t\t\tnFrames = (int)cap.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_COUNT);\n\t\t\tframeRate = (double)cap.get(cv::VideoCaptureProperties::CAP_PROP_FPS);\n\t\t\tresolution[0] = (int)cap.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_WIDTH);\n\t\t\tresolution[1] = (int)cap.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_HEIGHT);\n\t\t\tcodec = (int)cap.get(cv::VideoCaptureProperties::CAP_PROP_FOURCC);\n\t\t\tSIBR_LOG << \"[Video] \" << path << \" loaded.\" << std::endl;\n\t\t}\n\t\treturn loaded;\n\t}\n\n\tconst sibr::Vector2i & Video::getResolution() { \n\t\tcheckLoad();  \n\t\treturn resolution; \n\t}\n\n\tcv::Size Video::getResolutionCV() { \n\t\tcheckLoad();   \n\t\treturn cv::Size(resolution[0], resolution[1]);\n\t}\n\n\tint Video::getCurrentFrameNumber() { \n\t\tcheckLoad();  \n\t\treturn (int)cap.get(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES); \n\t}\n\t\n\tvoid Video::setCurrentFrame(int i){ \n\t\tcheckLoad(); \n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, i); \n\t}\n\t\n\tint Video::getNumFrames()  { \n\t\tcheckLoad();  \n\t\treturn nFrames; \n\t}\n\t\n\tdouble Video::getFrameRate() { \n\t\tcheckLoad(); \n\t\treturn frameRate; \n\t}\n\t\n\tconst Path & Video::getFilepath() const { \n\t\treturn filepath; \n\t}\n\t\n\tbool Video::isLoaded() { \n\t\treturn loaded; \n\t}\n\n\tint Video::getCodec() { \n\t\tcheckLoad(); \n\t\treturn codec; \n\t}\n\n\tvoid Video::release()\n\t{\n\t\tcap = cv::VideoCapture();\n\t\tloaded = false;\n\t}\n\n\tcv::Mat Video::getVolume(float time_skiped_begin, float time_skiped_end)\n\t{\n\t\tconst int starting_frame = (int)(time_skiped_begin * getFrameRate());\n\t\tconst int finishing_frame = getNumFrames() - (int)(time_skiped_end*getFrameRate()) - 1;\n\t\treturn getVolume(starting_frame, finishing_frame);\n\t}\n\n\tcv::Mat Video::getVolume(int starting_frame, int ending_frame)\n\t{\n\t\tcheckLoad();\n\n\t\tconst int w = getResolution()[0];\n\t\tconst int h = getResolution()[1];\n\t\tconst int nc = 3;\n\n\t\tconst int npixels = w * h;\n\t\tconst int N = npixels * nc;\n\t\tconst int L = ending_frame - starting_frame + 1;\n\n\t\tcv::Mat volume(L, N, CV_8UC1);\n\t\tsetCurrentFrame(starting_frame);\n\t\tfor (int i = 0; i < L; ++i) {\n\t\t\tcv::Mat mat = volume.row(i).reshape(3, h);\n\t\t\tcap >> mat;\n\t\t}\n\t\tsetCurrentFrame(0);\n\n\t\treturn volume;\n\t}\n\n\tcv::Mat Video::next()\n\t{\n\t\tcheckLoad();\n\t\tcv::Mat frame;\n\t\tcap >> frame;\n\t\treturn frame;\n\t}\n\n\tcv::VideoCapture & Video::getCVvideo()\n\t{\n\t\tcheckLoad();\n\t\treturn cap;\n\t}\n\n\tbool Video::exists() const\n\t{\n\t\treturn sibr::fileExists(getFilepath().string());\n\t}\n\n\tvoid Video::checkLoad()\n\t{\n\t\tif (!loaded) {\n\t\t\tif (!load(filepath.string())) {\n\t\t\t\tSIBR_ERR << \"[Video] Could not open video \" << filepath << std::endl;\n\t\t\t}\t\n\t\t}\n\t}\n\n\n\t//------------------------------------------------------------\n\n\tVideoPlayer::VideoPlayer(const std::string & filepath, const std::function<cv::Mat(cv::Mat)> & f) :\n\t\tVideo(filepath), transformation(f)\n\t{\n\t}\n\n\tbool VideoPlayer::load(const std::string & path) {\n\t\tVideoPlayer other;\n\t\tif (other.Video::load(path)) {\n\t\t\t*this = other;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tconst std::shared_ptr<sibr::Texture2DRGB> & VideoPlayer::getDisplayTex() const\n\t{\n\t\treturn displayTex ? ping : pong;\n\t}\n\n\tvoid VideoPlayer::update()\n\t{\n\t\tcheckLoad();\n\n\t\tif (first) {\n\t\t\tloadNext();\n\t\t\tloadingTex = (loadingTex + 1) % 2;\n\t\t\tfirst = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (mode != PLAY) {\n\t\t\treturn;\n\t\t}\n\n\t\tloadNext();\n\n\t\tdisplayTex = (displayTex + 1) % 2;\n\t\tloadingTex = (loadingTex + 1) % 2;\n\t}\n\n\tvoid VideoPlayer::onGui(float ratio_display)\n\t{\n\t\tcheckLoad();\n\n\t\tif (mode == PAUSE){\n\t\t\tif (ImGui::Button(\"Play\")) {\n\t\t\t\tmode = PLAY;\n\t\t\t}\n\t\t} else if (mode == PLAY) {\n\t\t\tif (ImGui::Button(\"Pause\")) {\n\t\t\t\tmode = PAUSE;\n\t\t\t}\n\t\t}\n\t\tImGui::SameLine();\n\t\tImGui::Checkbox(\"Repeat when finished\", &repeat_when_end);\n\n\t\tcurrent_frame_slider = getCurrentFrameNumber();\n\t\tImGui::Separator();\n\t\tImGui::PushScaledItemWidth(500);\n\t\tif (ImGui::SliderInt(\"timeline\", &current_frame_slider, 1, getNumFrames())) {\n\t\t\tsetCurrentFrame(current_frame_slider);\n\t\t\tloadingTex = displayTex;\n\t\t\tfirst = true;\n\t\t}\n\t\tImGui::PopItemWidth();\n\n\t\tImGui::Separator();\n\n\t\tif (getDisplayTex() && getDisplayTex()->handle() ) {\n\t\t\tstd::string infos = \"size : \" + std::to_string((int)getDisplayTex()->w()) + \" \" + std::to_string((int)getDisplayTex()->h()) + \", framerate : \" + std::to_string(getFrameRate());\n\t\t\tImGui::Text(infos.c_str());\n\t\t\tsibr::Vector2f displayTexSize(getDisplayTex()->w(), getDisplayTex()->h());\n\t\t\tsibr::Vector2i viewResolution = (ratio_display*displayTexSize).cast<int>();\n\t\t\t\n\t\t\tsibr::ImageWithCallback(getDisplayTex()->handle(), viewResolution, callBackData, zoomData.topLeft(), zoomData.bottomRight());\n\n\t\t\tupdateZoom(displayTexSize);\n\t\t}\n\n\t}\n\n\tbool VideoPlayer::updateCPU()\n\t{\n\n\t\tcheckLoad();\n\n\t\tbool alreayEmpty = tmpFrame.empty();\n\t\ttmpFrame = next();\n\t\tif (!tmpFrame.empty()) {\n\t\t\ttmpFrame = transformation(tmpFrame);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tif (alreayEmpty) {\n\t\t\t\tSIBR_WRG << \"[Video] Could not load next frames.\" << std::endl;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (repeat_when_end) {\n\t\t\t\tsetCurrentFrame(0);\n\t\t\t\treturn updateCPU();\n\t\t\t} else {\n\t\t\t\tmode = PAUSE;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\t\n\t}\n\n\tvoid VideoPlayer::updateGPU()\n\t{\n\t\tif (getLoadingTex().get()) {\n\t\t\tgetLoadingTex()->update(tmpFrame);\n\t\t} else {\n\t\t\tgetLoadingTex() = std::shared_ptr<sibr::Texture2DRGB>(new sibr::Texture2DRGB(tmpFrame));\n\t\t}\n\t}\n\n\tvoid VideoPlayer::loadNext()\n\t{\n\t\tif (updateCPU()) {\n\t\t\tupdateGPU();\n\t\t}\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/Video.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n\n#include <core/graphics/Texture.hpp>\n#include <core/graphics/GUI.hpp>\n#include <opencv2/opencv.hpp>\n\n// must install ffdshow \n#define CV_WRITER_CODEC cv::VideoWriter::fourcc('F','F','D','S')\n\n\nnamespace sibr\n{\n\n\t/** Video loaded from a file using OpenCV VideoCapture and FFMPEG.\n\t* \\ingroup sibr_video\n\t*/\n\tclass SIBR_VIDEO_EXPORT Video\n\t{\n\t\tSIBR_CLASS_PTR(Video);\n\t\t\n\tpublic:\n\n\t\t/** Constructor.\n\t\t\\param path the path to the video file\n\t\t\\note No loading will be performed at construction. Call load.\n\t\t*/\n\t\tVideo(const std::string & path = \"\") : filepath(path) {}\n\n\t\t/** Load from a given file on disk.\n\t\t\\param path path to the video\n\t\t\\return a success flag\n\t\t*/\n\t\tvirtual bool load(const std::string & path);\n\t\t\n\t\t/** \\return the video resolution. */\n\t\tconst sibr::Vector2i & getResolution();\n\t\t\n\t\t/** \\return the video resolution. */\n\t\tcv::Size getResolutionCV();\n\n\t\t/** \\return the current frame ID. */\n\t\tint getCurrentFrameNumber();\n\n\t\t/** Seek a specific frame.\n\t\t\\param i the frame ID to seek\n\t\t*/\n\t\tvoid setCurrentFrame(int i);\n\n\t\t/** \\return the total number of frames. */\n\t\tint getNumFrames();\n\n\t\t/** \\return the video framerate. */\n\t\tdouble getFrameRate();\n\n\t\t/** \\return the path to the video file on disk. */\n\t\tconst Path & getFilepath() const;\n\n\t\t/** \\return true if the video has been loaded. */\n\t\tbool isLoaded();\n\n\t\t/** \\return the ID of the codec used to decode the video. */\n\t\tint getCodec();\n\n\t\t/** Stop reading from the file. */\n\t\tvirtual void release();\n\n\t\t/** Read a section of the video and store it in a cv::Mat, where\n\t\teach row contains a frame, stored as RGBRGBRGB... linearly.\n\t\t\\param time_skiped_begin time to skip at the beginning of the video, in seconds\n\t\t\\param time_skiped_end time to skip at the end of the video, in seconds\n\t\t\\return the frames data stored as described above.\n\t\t*/\n\t\tcv::Mat getVolume(float time_skiped_begin = 0, float time_skiped_end = 0);\n\n\t\t/** Read a section of the video and store  otin a cv::Mat, where\n\t\teach row contains a frame, stored as RGBRGBRGB... linearly.\n\t\t\\param starting_frame index of the first frame to extract\n\t\t\\param ending_frame index of the last frame to extract\n\t\t\\return the frames data stored as described above.\n\t\t*/\n\t\tcv::Mat getVolume(int starting_frame, int ending_frame);\n\n\t\t/** \\return the next frame. */\n\t\tcv::Mat next();\n\n\t\t/** \\return the underlying VideoCapture object. */\n\t\tcv::VideoCapture & getCVvideo();\n\n\t\t/** \\return true if the video exists on disk. */\n\t\tbool exists() const;\n\n\tprotected:\n\t\t\n\t\t/** Check if the video is loaded. */\n\t\tvirtual void checkLoad();\n\n\t\tcv::VideoCapture cap; ///< Internal capture object.\n\n\t\tPath filepath; ///< The path to the video.\n\t\tsibr::Vector2i resolution; ///< Video resolution.\n\t\tint nFrames = 0; ///< Number of frames in the video.\n\t\tdouble frameRate = 0.0; ///< Video frame rate.\n\t\tint codec = 0; ///< Codec used to read the video.\n\t\tbool loaded = false; ///< Video loading status.\n\t};\n\n\n\t/** Load and display a video in a view, with playback options.\n\t* \\ingroup sibr_video\n\t*/\n\tclass SIBR_VIDEO_EXPORT VideoPlayer : public Video, public ZoomInterraction\n\t{\n\n\t\tSIBR_CLASS_PTR(VideoPlayer);\n\n\tpublic:\n\n\t\t/** Replay mode. */\n\t\tenum Mode { PAUSE, PLAY, SHOULD_CLOSE };\n\n\t\tusing Transformation = std::function<cv::Mat(cv::Mat)>; ///< Image processing function.\n\n\t\t/** Constructor.\n\t\t\\param filepath the path to the video file\n\t\t\\param f a function to apply to each frame\n\t\t\\note No loading will be performed at construction. Call load.\n\t\t*/\n\t\tVideoPlayer(const std::string & filepath = \"\", const std::function<cv::Mat(cv::Mat)>&  f = [](cv::Mat m) { return m; });\n\t\t\n\t\t/** Load a video from disk.\n\t\t\\param path the path to the video on disk\n\t\t\\return a success flag\n\t\t*/\n\t\tbool load(const std::string & path) override;\n\n\t\t/** Set a transformation function to apply to each frame.\n\t\t\\param f the new transformation\n\t\t*/\n\t\tvoid setTransformation(const Transformation & f) { transformation = f; }\n\t\t\n\t\t/** Set the playback mode.\n\t\t\\param _mode the new mode\n\t\t*/\n\t\tvoid setMode(Mode _mode) { mode = _mode; }\n\n\t\t/** \\return the current display texture on the GPU. */\n\t\tconst std::shared_ptr<sibr::Texture2DRGB> & getDisplayTex() const;\n\n\t\t/** Load the next frame, call once per rendering frame. \n\t\t\\note Internally calls updateCPU and updateGPU.\n\t\t*/\n\t\tvoid update();\n\n\t\t/** Display playback GUI.\n\t\t\\param ratio_display a scaling factor that determine the size of the video on screen based on the video intrinsic size.\n\t\t*/\n\t\tvoid onGui(float ratio_display);\n\t\t\n\t\t/** Load the next frame to the CPU.\n\t\t\\return a success flag\n\t\t*/\n\t\tbool updateCPU();\n\n\t\t/** Load the next frame to the GPU.\n\t\t\\note You should call updateCPU first.\n\t\t*/\n\t\tvoid updateGPU();\n\n\t\t/** \\return a reference to the current frame on the CPU. */\n\t\tconst cv::Mat & getCurrentFrame() const { return tmpFrame; }\n\n\tprotected:\n\t\t\n\t\t/** \\return the current loading texture on the GPU. */\n\t\tstd::shared_ptr<sibr::Texture2DRGB> & getLoadingTex() { return loadingTex ? ping : pong; }\n\t\t\n\t\t/// Load the next frame, on the CPU then the GPU.\n\t\tvoid loadNext();\n\n\t\tMode mode = PAUSE; ///< Play mode.\n\t\tbool first = true; ///< Are we at the first frame.\n\t\tbool repeat_when_end = true; ///< Loop when reaching the end.\n\t\tint displayTex = 1; ///< Index of the display texture.\n\t\tint loadingTex = 1; ///< Index of the loading texture.\n\t\tstd::shared_ptr<sibr::Texture2DRGB> ping,pong; ///< Double buffer textures.\n\t\tcv::Mat tmpFrame; ///< Scratch frame.\n\t\tTransformation transformation; ///< Transformation to apply to each frame.\n\t\tint current_frame_slider; ///< Slider position.\n\t};\n\n\t\n } // namespace sibr\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/VideoUtils.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"VideoUtils.hpp\"\n\n#include <core/graphics/Utils.hpp>\n#include <algorithm>\n\n\n#include <opencv2/ximgproc/edge_filter.hpp>\n#include <opencv2/optflow.hpp>\nnamespace sibr {\n\n\tstd::vector<cv::Mat> cvSplitChannels(cv::Mat mat) {\n\t\tstd::vector<cv::Mat> out;\n\t\tcv::split(mat, out);\n\t\treturn out;\n\t}\n\n\tVolume3u loadVideoVolume(const std::string & filepath) {\n\t\tVideo video(filepath);\n\t\tif (video.exists()) {\n\t\t\treturn loadVideoVolume(video);\n\t\t} else {\n\t\t\tSIBR_WRG << filepath << \" does not exists\" << std::endl;\n\t\t\treturn Volume3u();\n\t\t}\n\t}\n\n\tVolume3u loadVideoVolume(sibr::Video & video)\n\t{\n\t\tint currentFrame = video.getCurrentFrameNumber();\n\t\tvideo.setCurrentFrame(0);\n\t\tVolume3u volume(video.getNumFrames(), video.getResolution()[0], video.getResolution()[1]);\n\t\tfor (int t = 0; t < video.getNumFrames(); ++t) {\n\t\t\tcv::Mat mat = volume.frame(t);\n\t\t\tvideo.getCVvideo() >> mat;\n\t\t}\n\t\tvideo.setCurrentFrame(currentFrame);\n\t\treturn volume;\n\t}\n\n\tSIBR_VIDEO_EXPORT uint optimal_num_levels(uint length)\n\t{\n\t\tuint num_levels = 1;\n\t\twhile (length != 1) {\n\t\t\tlength = (length + 1) / 2;\n\t\t\t++num_levels;\n\t\t}\n\t\treturn num_levels;\n\t}\n\n\tSIBR_VIDEO_EXPORT std::vector<sibr::Volume3u> gaussianPyramid(const sibr::Volume3u & vid, uint num_levels)\n\t{\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::Volume3u> out(1, vid);\n\t\tfor (int i = 1; i < (int)num_levels; ++i) {\n\t\t\tout.push_back(out.back().pyrDown());\n\t\t}\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT std::vector<sibr::Volume3u> gaussianPyramidTemporal(const sibr::Volume3u & vid, uint num_levels)\n\t{\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::Volume3u> out(1, vid);\n\t\tfor (int i = 1; i < (int)num_levels; ++i) {\n\t\t\tout.push_back(out.back().pyrDownTemporal());\n\t\t}\n\t\treturn out;\n\t}\n\n\tstd::vector<sibr::Volume3u> laplacianPyramid(const sibr::Volume3u & vid, uint num_levels)\n\t{\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::Volume3u> out;\n\t\t\n\t\tsibr::Volume3f current_v = vid.convertTo<float>(), down, up;\n\t\tfor (int i = 0; i < (int)num_levels - 1; ++i) {\n\t\t\tdown = current_v.pyrDown();\n\t\t\tup = down.pyrUp(current_v.l, current_v.w, current_v.h);\n\t\t\t//current_v.play(30, { 1200,800 });\n\t\t\t//up.play(30, { 1200,800 });\n\t\t\tcurrent_v.substract(up);\n\t\t\tcurrent_v.shift(128);\n\t\t\tout.push_back(current_v.convertTo<uchar>());\n\t\t\tstd::swap(current_v, down);\n\t\t}\n\t\tout.push_back(current_v.convertTo<uchar>());\n\t\treturn out;\n\t}\n\n\tstd::vector<sibr::Volume3u> laplacianPyramidTemporalDouble(const sibr::Volume3u & vid, uint num_levels)\n\t{\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = 1;\n\t\t\tint length = vid.l;\n\t\t\twhile (length != 1) {\n\t\t\t\tlength = (length + 1) / 2;\n\t\t\t\tlength = (length + 1) / 2;\n\t\t\t\t++num_levels;\n\t\t\t}\n\t\t}\n\n\t\tstd::cout << \" num lvls : \" << num_levels << std::endl;\n\n\t\tstd::vector<sibr::Volume3u> out;\n\t\tsibr::Volume3f current_v = vid.convertTo<float>(), down, up;\n\t\tfor (int i = 0; i < (int)num_levels - 1; ++i) {\n\t\t\tdown = current_v.pyrDownTemporal().pyrDownTemporal();\n\t\t\tup = down.pyrUpTemporal((current_v.l + 1) / 2).pyrUpTemporal(current_v.l);\n\t\t\tcurrent_v.substract(up);\n\t\t\tcurrent_v.shift(128);\n\t\t\tout.push_back(current_v.convertTo<uchar>());\n\t\t\tstd::cout << i << \" : \" << current_v.l << std::endl;\n\t\t\tstd::swap(current_v, down);\n\t\t}\n\t\tout.push_back(current_v.convertTo<uchar>());\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT sibr::Volume3u collapseLaplacianPyramid(const std::vector<sibr::Volume3u>& pyr, double shift)\n\t{\n\t\tsibr::Volume3f v = pyr.back().convertTo<float>();\n\t\tfor (int i = (int)pyr.size() - 2; i >= 0; --i) {\n\t\t\tv = v.pyrUp(pyr[i].l, pyr[i].w, pyr[i].h);\n\t\t\tv.add(pyr[i]);\n\t\t\tif (shift != 0) {\n\t\t\t\tv.shift(shift);\n\t\t\t}\n\t\t}\n\t\treturn v.convertTo<uchar>();\n\t}\n\n\tSIBR_VIDEO_EXPORT sibr::Volume3u laplacianBlending(const sibr::Volume3u & vA, const sibr::Volume3u & vB, std::vector<sibr::Volume1u>& pyrM)\n\t{\n\t\tauto pyrA = laplacianPyramid(vA);\n\t\tauto pyrB = laplacianPyramid(vB);\n\n\t\tfor (int i = (int)pyrA.size() - 1; i >= 0; --i) {\n\t\t\tpyrA[i] = pyrA[i].applyMask(pyrM[i]);\n\t\t\tpyrM[i].toggle();\n\t\t\tpyrB[i] = pyrB[i].applyMask(pyrM[i]);\n\t\t\tpyrA[i].add(pyrB[i]);\n\t\t}\n\n\t\treturn collapseLaplacianPyramid(pyrA, -128);\n\t}\n\n\n\tint VideoUtils::codec_ffdshow = cv::VideoWriter::fourcc('F', 'F', 'D', 'S');\n\tint VideoUtils::codec_OpenH264 = cv::VideoWriter::fourcc('H', '2', '6', '4');\n\tint VideoUtils::codec_OpenH264_fallback = 0x31637661;\n\n\t// from https://stackoverflow.com/questions/7693561/opencv-displaying-a-2-channel-image-optical-flow\n\tcv::Mat VideoUtils::getFlowViz(const cv::Mat & flow) {\n\n\t\tcv::Mat xy[2]; //X,Y\n\t\tcv::split(flow, xy);\n\n\t\t//calculate angle and magnitude\n\t\tcv::Mat magnitude, angle;\n\t\tcv::cartToPolar(xy[0], xy[1], magnitude, angle, true);\n\n\t\t//translate magnitude to range [0;1]\n\t\tdouble mag_max;\n\t\tcv::minMaxLoc(magnitude, 0, &mag_max);\n\t\tmagnitude.convertTo(magnitude, -1, 1.0 / mag_max);\n\n\t\t//build hsv image\n\t\tcv::Mat _hsv[3], hsv;\n\t\t_hsv[0] = angle;\n\t\t_hsv[1] = magnitude;\n\t\t_hsv[2] = cv::Mat::ones(angle.size(), CV_32F);\n\t\tcv::merge(_hsv, 3, hsv);\n\n\t\t//convert to BGR and show\n\t\tcv::Mat bgr;//CV_32FC3 matrix\n\t\tcv::cvtColor(hsv, bgr, cv::COLOR_HSV2BGR);\n\n\t\treturn bgr;\n\t}\n\n\tcv::Mat VideoUtils::cropFromSize(const cv::Mat & mat, const sibr::Vector2i & size)\n\t{\n\t\tsibr::Vector2i currentSize(mat.cols, mat.rows);\n\t\tsibr::Vector2i targetSize = size.cwiseMin(currentSize);\n\t\tsibr::Vector2i topLeft = ((currentSize - targetSize).cast<float>() / 2.0).cast<int>();\n\t\tsibr::Vector2i bottomRight = ((currentSize + targetSize).cast<float>() / 2.0).cast<int>();\n\t\tcv::Rect roi(cv::Point(topLeft[0], topLeft[1]), cv::Point(bottomRight[0], bottomRight[1]));\n\n\t\t//std::cout << \"--------------\" << std::endl;\n\t\t//std::cout << currentSize << std::endl;\n\t\t//std::cout << targetSize << std::endl;\n\t\t//std::cout << roi << std::endl;\n\n\t\treturn mat(roi).clone();\n\t}\n\n\tvoid VideoUtils::getMeanVariance(cv::VideoCapture & cap, cv::Mat & outMean, cv::Mat & outVariance, const sibr::Vector2i & finalSize)\n\t{\n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, 0);\n\t\tbool first = true;\n\t\tcv::Mat mean, meanSq, out;\n\t\tfloat sum = 0;\n\t\tint f_id = 0, current_seg = -1;\n\t\tbool doResize = (finalSize[0] != cap.get(cv::CAP_PROP_FRAME_WIDTH) || finalSize[1] != cap.get(cv::CAP_PROP_FRAME_HEIGHT));\n\t\twhile (true) {\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t\tcv::Mat frame, frame_float;\n\t\t\tcap >> frame;\n\t\t\t++f_id;\n\t\t\tif (frame.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (doResize) {\n\t\t\t\tcv::resize(frame, frame, cv::Size(finalSize[0], finalSize[1]));\n\t\t\t}\n\n\t\t\tframe.convertTo(frame_float, CV_32FC3);\n\t\t\tif (first) {\n\t\t\t\tmean = frame_float;\n\t\t\t\tmeanSq = frame_float.mul(frame_float);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tmean += frame_float;\n\t\t\t\tmeanSq += frame_float.mul(frame_float);\n\t\t\t}\n\t\t\tsum += 1;\n\t\t}\n\t\tif (first) {\n\t\t\treturn;\n\t\t}\n\n\t\tmean /= sum;\n\t\tcv::Mat var = cv::min(255.0f*255.0f, cv::max(0.0f, meanSq / sum - mean.mul(mean)));\n\t\tcv::sqrt(var, var);\n\t\tvar *= 5.0;\n\t\tmean.convertTo(outMean, CV_8UC3);\n\t\tvar.convertTo(outVariance, CV_8UC3);\n\n\t}\n\n\tvoid VideoUtils::getMeanVariance2(cv::VideoCapture & cap, cv::Mat & outMean, cv::Mat & outVariance, const sibr::Vector2i & finalSize, float starting_point_s)\n\t{\n\t\tint starting_frame = (int)(starting_point_s*cap.get(cv::CAP_PROP_FPS));\n\n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, starting_frame);\n\t\tbool first = true;\n\t\tcv::Mat mean, meanSq, out;\n\t\tfloat sum = 0;\n\t\tint f_id = 0, current_seg = -1;\n\t\tbool doResize = (finalSize[0] != cap.get(cv::CAP_PROP_FRAME_WIDTH) || finalSize[1] != cap.get(cv::CAP_PROP_FRAME_HEIGHT));\n\t\twhile (true) {\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t\tcv::Mat frame, frame_float;\n\t\t\tcap >> frame;\n\t\t\t++f_id;\n\t\t\tif (frame.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (doResize) {\n\t\t\t\tcv::resize(frame, frame, cv::Size(finalSize[0], finalSize[1]));\n\t\t\t}\n\n\t\t\tcv::GaussianBlur(frame, frame, cv::Size(3, 3), 0);\n\n\t\t\tframe.convertTo(frame_float, CV_32FC3);\n\t\t\tif (first) {\n\t\t\t\tmean = frame_float;\n\t\t\t\tmeanSq = frame_float.mul(frame_float);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tmean += frame_float;\n\t\t\t\tmeanSq += frame_float.mul(frame_float);\n\t\t\t}\n\t\t\tsum += 1;\n\t\t}\n\t\tif (first) {\n\t\t\treturn;\n\t\t}\n\n\t\tmean /= sum;\n\t\tcv::Mat var = cv::min(255.0f*255.0f, cv::max(0.0f, meanSq / sum - mean.mul(mean)));\n\t\tcv::sqrt(var, var);\n\t\tvar *= 5.0;\n\t\tmean.convertTo(outMean, CV_8UC3);\n\t\tvar.convertTo(outVariance, CV_8UC3);\n\t}\n\n\tcv::Mat VideoUtils::getMedian(sibr::Video & vid, float time_skiped_begin, float time_skiped_end) {\n\n\t\tcv::Mat volume = vid.getVolume(time_skiped_begin, time_skiped_end);\n\n\t\t//std::cout << \"tranpose \";\n\t\t//volume = volume.t();\n\t\t//std::cout << t.deltaTimeFromLastTic<>() << std::endl;\n\n\t\t//cv::Mat volumeSorted;\n\n\t\t//std::cout << \"sort \";\n\t\t//cv::sort(volume, volume, CV_SORT_EVERY_COLUMN);\n\t\t//std::cout << t.deltaTimeFromLastTic<>() << std::endl;\n\n\t\tcv::Mat median(vid.getResolutionCV(), CV_8UC3);\n\n\t\tconst int L = volume.rows;\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < median.rows; ++i) {\n\n\t\t\tfor (int j = 0; j < median.cols; ++j) {\n\t\t\t\tcv::Vec3b medianColor;\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tstd::vector<uchar> values(L);\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t] = volume.at<uchar>(t, 3 * (i*median.cols + j) + c);\n\t\t\t\t\t}\n\t\t\t\t\t//std::sort(values.begin(), values.end());\n\t\t\t\t\t//medianColor[c] = values[values.size() / 2];\n\t\t\t\t\tstd::nth_element(values.begin(), values.begin() + L / 2, values.end());\n\t\t\t\t\tmedianColor[c] = values[L / 2];\n\t\t\t\t}\n\t\t\t\tmedian.at<cv::Vec3b>(i, j) = medianColor;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn median;\n\t}\n\n\tcv::Mat3b VideoUtils::getMedian(const std::string & path, float time_percentage_crop)\n\t{\n\n\t\tsibr::Video vid(path);\n\t\tVolume3u vol = loadVideoVolume(vid);\n\t\tcv::Mat3b median(vid.getResolutionCV(), CV_8UC3);\n\n\t\tint crop = (int)(vol.l*std::min(time_percentage_crop, 0.4f));\n\t\tint start = crop, end = vol.l - crop;\n\n\t\n#pragma omp parallel for\n\t\tfor (int i = 0; i < median.rows; ++i) {\n\t\t\tcv::Mat line = vol.video_line(i);\n\t\t\tstd::vector<uchar> values;\n\t\t\tfor (int j = 0; j < median.cols; ++j) {\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tline.col(3 * j + c).rowRange(start, end).copyTo(values);\n\t\t\t\t\tstd::nth_element(values.begin(), values.begin() + values.size() / 2, values.end());\n\t\t\t\t\tmedian(i, j)[c] = values[values.size() / 2];\n\t\t\t\t}\t\t\n\t\t\t}\n\t\t}\n\n\t\treturn median;\n\t}\n\n\tcv::Mat VideoUtils::getBackgroundImage(sibr::Video & vid, int numBins, float time_skip_begin, float time_skip_end) {\n\t\tcv::Mat volume = vid.getVolume(time_skip_begin, time_skip_end);\n\t\tvolume = volume.t();\n\t\treturn getBackgroundImage(volume, vid.getResolution()[0], vid.getResolution()[1], numBins);\n\t}\n\n\tcv::Mat VideoUtils::getBackgroundImage(const cv::Mat volume, int w, int h, int numBins)\n\t{\n\t\tcv::Mat bg = cv::Mat(h, w, CV_8UC3);\n\t\tconst int L = volume.cols;\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < bg.rows; ++i) {\n\t\t\tfor (int j = 0; j < bg.cols; ++j) {\n\n\t\t\t\tstd::vector<sibr::Vector3ub> values(L);\n\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t][c] = volume.at<uchar>(3 * (i*bg.cols + j) + c, t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tTimeHistogram histo = TimeHistogram(0, 255, numBins);\n\t\t\t\thisto.addValues(values);\n\n\t\t\t\tauto mode = histo.getBinMiddle(histo.getHMode());\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tbg.at<cv::Vec3b>(i, j)[c] = mode[c];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn bg;\n\t}\n\n\tvoid VideoUtils::getBackGroundVideo(sibr::Video & vid, PyramidLayer & out_mask, PyramidLayer & out_video, cv::Mat & out_img,\n\t\tconst sibr::ImageRGB & meanImg, int threshold, int numBins, float time_skip_begin, float time_skip_end)\n\t{\n\t\tcv::Mat volume = vid.getVolume(time_skip_begin, time_skip_end).t();\n\n\t\tconst int w = vid.getResolution()[0], h = vid.getResolution()[1], L = volume.cols;\n\t\tout_mask.w = w;\n\t\tout_mask.l = L;\n\t\tout_mask.h = h;\n\n\t\tout_video = out_mask;\n\n\t\tout_mask.volume = cv::Mat(L, 3 * w*h, CV_8UC1);\n\t\tout_video.volume = cv::Mat(L, 3 * w*h, CV_8UC1);\n\t\tout_img = cv::Mat(h, w, CV_8UC3);\n\n\t\tconst bool useMeanImg = !(meanImg.size()[0] == 0);\n\n\t\tstd::cout << w << \" \" << h << \" \" << L << \" use mean img \" << useMeanImg << std::endl;\n#pragma omp parallel for\n\t\tfor (int i = 0; i < h; ++i) {\n\t\t\tfor (int j = 0; j < w; ++j) {\n\n\t\t\t\tstd::vector<sibr::Vector3ub> values(L);\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t][c] = volume.at<uchar>(3 * (i*w + j) + c, t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tTimeHistogram histo = TimeHistogram(0, 255, numBins);\n\t\t\t\thisto.addValues(values);\n\t\t\t\t//histo.computeSortedBins();\n\n\t\t\t\tauto mode = histo.getHMode();\n\t\t\t\tauto mode_color = histo.getBinMiddle(histo.getHMode());\n\n\t\t\t\tout_img.at<cv::Vec3b>(i, j) = sibr::toOpenCV<uchar, uchar, 3>(mode_color);\n\n\t\t\t\tsibr::Vector3ub stdDev;\n\n\t\t\t\tif (useMeanImg) {\n\t\t\t\t\tconst int radius = 4;\n\t\t\t\t\tconst int diam = 2 * radius + 1;\n\t\t\t\t\tconst int num = diam * diam;\n\t\t\t\t\tsibr::Vector3f sumColor(0, 0, 0), sumColorSq(0, 0, 0);\n\t\t\t\t\tfor (int di = -radius; di <= radius; ++di) {\n\t\t\t\t\t\tint ii = sibr::clamp(i + di, 0, h - 1);\n\t\t\t\t\t\tfor (int dj = -radius; dj <= radius; ++dj) {\n\t\t\t\t\t\t\tint jj = sibr::clamp(j + dj, 0, w - 1);\n\t\t\t\t\t\t\tsumColor += meanImg(jj, ii).cast<float>();\n\t\t\t\t\t\t\tsumColorSq += meanImg(jj, ii).cast<float>().cwiseProduct(meanImg(jj, ii).cast<float>());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsumColor /= (float)(num);\n\t\t\t\t\tsumColorSq = sumColorSq / (float)num - sumColor.cwiseProduct(sumColor);\n\t\t\t\t\tstdDev = sumColorSq.cwiseSqrt().cast<uchar>();\n\t\t\t\t\tthreshold = 15 * stdDev.norm();\n\t\t\t\t}\n\n\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\tconst auto & color = values[t];\n\t\t\t\t\tauto bin = histo.whatBin(color);\n\n\t\t\t\t\t//float cdf = histo.sorted_bins[bin];\n\t\t\t\t\t//float outlier_prop = 1.0f - cdf;\n\t\t\t\t\t//auto viz_color = sibr::jetColor<uchar>(outlier_prop);\n\n\t\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\t\t//out_mask.volume.at<uchar>(t, 3 * (i*w + j) + c) = (cdf < 0.75f ? 0 : 255);\n\t\t\t\t\t\t//out_video.volume.at<uchar>(t, 3 * (i*w + j) + c) = viz_color[c];\n\n\t\t\t\t\t\tif ((color.cast<int>() - mode_color.cast<int>()).norm() < threshold) {\n\t\t\t\t\t\t\tout_mask.volume.at<uchar>(t, 3 * (i*w + j) + c) = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tout_mask.volume.at<uchar>(t, 3 * (i*w + j) + c) = 255;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvolume = volume.t();\n\t\tout_video.volume = volume.mul((1.0 / 255)*out_mask.volume);\n\t}\n\n\tsibr::Volume1u VideoUtils::getBackgroundVolume(const sibr::Volume3u & volume, int threshold, int numBins)\n\t{\n\t\tconst int L = volume.l;\n\t\tsibr::Volume1u out_mask = sibr::Volume1u(L, volume.w, volume.h, 0);\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < volume.h; ++i) {\n\t\t\tfor (int j = 0; j < volume.w; ++j) {\n\t\t\t\tstd::vector<sibr::Vector3ub> values(L);\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t][c] = volume.valueAt(t, i, j, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tTimeHistogram histo = TimeHistogram(0, 255, numBins);\n\t\t\t\thisto.addValues(values);\n\n\t\t\t\tauto mode_color = histo.getBinMiddle(histo.getHMode());\n\n\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\tconst auto & color = values[t];\n\n\t\t\t\t\tif ((color.cast<int>() - mode_color.cast<int>()).norm() > threshold) {\n\t\t\t\t\t\tout_mask.pixelAt(t, i, j) = 255;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\treturn out_mask;\n\t}\n\n\tsibr::Volume1f VideoUtils::getBackgroundVolumeF(const sibr::Volume3u & volume, int numBins)\n\t{\n\t\tconst int L = volume.l;\n\t\tsibr::Volume1f out_mask = sibr::Volume1f(L, volume.w, volume.h);\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < volume.h; ++i) {\n\t\t\tfor (int j = 0; j < volume.w; ++j) {\n\t\t\t\tstd::vector<sibr::Vector3ub> values(L);\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t][c] = volume.valueAt(t, i, j, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tTimeHistogram histo = TimeHistogram(0, 255, numBins);\n\t\t\t\thisto.addValues(values);\n\n\t\t\t\tauto mode_color = histo.getBinMiddle(histo.getHMode());\n\n\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\tconst auto & color = values[t];\n\t\t\t\t\tout_mask.pixelAt(t, i, j) = (float)(color.cast<int>() - mode_color.cast<int>()).norm();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\treturn out_mask;\n\t}\n\n\tvoid VideoUtils::computeSaveSimpleFlow(sibr::Video & vid, bool show)\n\t{\n\t\tint layers = 5;\n\t\tint block_size = 3;\n\t\tint max_flow = 5;\n\n\t\tsibr::Volume3u vol = sibr::loadVideoVolume(vid);\n\t\tPath path = vid.getFilepath();\n\t\tstd::string folder = path.parent_path().string() + \"/flow/\";\n\t\tsibr::makeDirectory(folder);\n\n\t\tstd::string filepath = folder + \"/\" + path.stem().string() + \"_sflow_\" + std::to_string(layers) + \"_\" +\n\t\t\tstd::to_string(block_size) + + \"_\" + std::to_string(max_flow) + \".mp4\";\n\n\t\tsibr::FFVideoEncoder encoder(filepath, 30, { 2 * vol.w,2 * vol.h });\n\t\tfor (int t = 0; t < vol.l - 1; ++t) {\n\t\t\tcv::Mat flow;\n\t\t\tcv::optflow::calcOpticalFlowSF(vol.frame(t), vol.frame(t + 1), flow, layers, block_size, max_flow);\n\t\t\tcv::Mat viz = vol.frame(t).clone();\n\t\t\tint r = 10;\n\t\t\tfor (int i = 0; i < vol.h; i += r) {\n\t\t\t\tfor (int j = 0; j < vol.w; j += r) {\n\t\t\t\t\tauto f = flow.at<cv::Vec2f>(i, j);\n\t\t\t\t\tif (isfinite(f[0]) && isfinite(f[1])) {\n\t\t\t\t\t\tif (cv::norm(f) > 0.5) {\n\t\t\t\t\t\t\tcv::line(viz, cv::Point(j, i), cv::Point(int(j + f[1]), int(i + f[0])), { 255,0,255 }, 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcv::circle(viz, cv::Point(j, i), 3, { 0,0,0 }, 2);\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tcv::resize(viz, viz, cv::Size(2 * viz.cols, 2 * viz.rows), 0, 0, cv::INTER_NEAREST);\n\n\t\t\tif (show) {\n\t\t\t\tcv::imshow(\"flow\", viz);\n\t\t\t\tif (cv::waitKey() == 27) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tencoder << viz;\n\t\t\t}\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t}\n\t\tstd::cout << \"done \" << std::endl;\n\t}\n\n\tvoid VideoUtils::computeSaveVideoMaskF(Video & vid, int threshold, bool viz)\n\t{\n\t\tsibr::Volume3u volume = sibr::loadVideoVolume(vid);\n\t\tsibr::Volume1f mask = sibr::VideoUtils::getBackgroundVolumeF(volume, 150);\n\n\t\tsibr::Volume1f bilateral_mask(volume.l, volume.w, volume.h);\n\t\tsibr::Volume1f bilateral_mask_median(volume.l, volume.w, volume.h);\n\t\tsibr::Volume1u median_bilateral_mask_binary(volume.l, volume.w, volume.h);\n\n\t\tconst int radius_bila = 21;\n\t\tconst double eps = 10;\n\n#pragma omp parallel for\n\t\tfor (int t = 0; t < volume.l; ++t) {\n\t\t\tcv::ximgproc::guidedFilter(volume.frame(t), mask.frame(t), bilateral_mask.frame(t), radius_bila, eps);\n\t\t\t//cv::medianBlur(mask.frame(t), median_mask.frame(t), 7);\n\t\t\tcv::medianBlur(bilateral_mask.frame(t), bilateral_mask_median.frame(t), 5);\n\t\t\tmedian_bilateral_mask_binary.frame(t) = bilateral_mask_median.frame(t) > threshold;\n\t\t}\n\n\t\tsibr::Volume3u video_masked_bilateral_bin = volume.applyMaskBinary(median_bilateral_mask_binary);\n\n\t\tif (viz) {\n\t\t\tbilateral_mask.play();\n\t\t\tbilateral_mask_median.play();\n\t\t\tmedian_bilateral_mask_binary.play();\n\t\t\tvideo_masked_bilateral_bin.play();\n\t\t}\n\n\t\tPath filepath = vid.getFilepath();\n\t\tconst std::string folder = filepath.parent_path().string() + \"/masks/bilateral/\";\n\t\tsibr::makeDirectory(folder);\n\n\t\tconst std::string basename = folder + filepath.stem().string() + \"_bila_\" + std::to_string(radius_bila) + \"_\" + std::to_string((int)(10 * eps));\n\t\tconst std::string extension = \".mp4\";\n\n\t\tbilateral_mask.saveToVideoFile(basename + \"_raw\" + extension);\n\t\tbilateral_mask_median.saveToVideoFile(basename + \"_median\" + extension);\n\t\tmedian_bilateral_mask_binary.saveToVideoFile(basename + \"_median_binary\" + extension);\n\t\tvideo_masked_bilateral_bin.saveToVideoFile(basename + \"_video\" + extension);\n\t}\n\n\tvoid VideoUtils::computeSaveVideoMaskBlur(Video & vid, int time_window)\n\t{\n\t\tconst Path & filepath = vid.getFilepath();\n\t\tconst std::string in_filename = filepath.parent_path().string() + \"/masks/bilateral/\" + filepath.stem().string() + \"_bila_21_100_median_binary.mp4\";\n\t\tconst std::string out_folder = filepath.parent_path().string() + \"/masks/bilateral_tblur/\";\n\t\tsibr::makeDirectory(out_folder);\n\t\tconst std::string out_filename = out_folder + \"/\" + filepath.stem().string() + \"_mask_tblur.mp4\";\n\n\t\tsibr::Volume3u volume = sibr::loadVideoVolume(in_filename);\n\t\tstd::cout << \"volume.mat.isContinuous() : \" << volume.mat.isContinuous() << std::endl;\n\t\tsibr::Volume3u out = sibr::Volume3u(volume.l, volume.w, volume.h, 0);\n\n\t\tint time_win = 10;\n\n\t\t//#pragma omp parallel for\n\t\tfor (int i = 0; i < out.h; ++i) {\n\t\t\tfor (int j = 0; j < out.w; ++j) {\n\t\t\t\tfor (int t = 0; t < out.l; ++t) {\n\t\t\t\t\tfor (int u = std::max(0, t - time_win); u < std::min(out.l - 1, t + time_win); ++u) {\n\t\t\t\t\t\tif (volume.valueAt(u, i, j, 0) > 128) {\n\t\t\t\t\t\t\tout.pixelAt(t, i, j) = cv::Vec3b(255, 255, 255);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tout.saveToVideoFile(out_filename);\n\t}\n\n\tcv::Mat VideoUtils::getTemporalSpatialRatio(sibr::Video & vid, PyramidLayer & out_ratio, const sibr::ImageRGB & spatial_ratio, int numBins, float time_skip_begin, float time_skip_end)\n\t{\n\t\tcv::Mat volume = vid.getVolume(time_skip_begin, time_skip_end).t();\n\n\t\tconst int w = vid.getResolution()[0], h = vid.getResolution()[1], L = volume.cols;\n\t\tout_ratio.w = w;\n\t\tout_ratio.l = L;\n\t\tout_ratio.h = h;\n\n\t\tout_ratio.volume = cv::Mat(L, 3 * w*h, CV_8UC1);\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < h; ++i) {\n\t\t\tfor (int j = 0; j < w; ++j) {\n\n\t\t\t\tstd::vector<sibr::Vector3ub> values(L);\n\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\t\tvalues[t][c] = volume.at<uchar>(3 * (i*w + j) + c, t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tTimeHistogram histo = TimeHistogram(0, 255, numBins);\n\t\t\t\thisto.addValues(values);\n\t\t\t\t//histo.computeSortedBins();\n\n\t\t\t\tauto mode = histo.getHMode();\n\t\t\t\tauto mode_color = histo.getBinMiddle(histo.getHMode());\n\n\t\t\t\tfor (int t = 0; t < L; ++t) {\n\t\t\t\t\tconst auto & color = values[t];\n\t\t\t\t\tauto bin = histo.whatBin(color);\n\n\t\t\t\t\tsibr::Vector3f norm_temporal = (color.cast<int>() - mode_color.cast<int>()).cwiseAbs().cast<float>();\n\t\t\t\t\tsibr::Vector3f norm_spatial = spatial_ratio(j, i).cwiseAbs().cast<float>().array() + 10;\n\t\t\t\t\tsibr::Vector3f ratios = norm_temporal.cwiseQuotient(norm_spatial);\n\n\n\t\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\t\tout_ratio.volume.at<uchar>(t, 3 * (i*w + j) + c) = sibr::clamp<uchar>((uchar)(128 * ratios[c]), 0, 255);\n\t\t\t\t\t\t//if (ratios.maxCoeff() > 0.5) {\n\t\t\t\t\t\t//\tout_ratio.volume.at<uchar>(t, 3 * (i*w + j) + c) = 255;\n\t\t\t\t\t\t//} else {\n\t\t\t\t\t\t//\tout_ratio.volume.at<uchar>(t, 3 * (i*w + j) + c) = 0;\n\t\t\t\t\t\t//}\n\t\t\t\t\t\t//out_ratio.volume.at<uchar>(t, 3 * (i*w + j) + c) = sibr::clamp<uchar>((uchar)(64*ratios[c]),0,255);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\treturn volume.t();\n\t}\n\n\tcv::Mat VideoUtils::getLaplacian(cv::Mat mat, int size, bool smooth, bool absolute)\n\t{\n\t\tcv::Mat grey, laplacian, abs;\n\t\tif (smooth) {\n\t\t\tcv::GaussianBlur(mat, mat, cv::Size(size, size), 0, 0, cv::BORDER_DEFAULT);\n\t\t}\n\t\tgrey = getGrey(mat);\n\t\tcv::Laplacian(grey, laplacian, CV_16S, size);\n\t\tif (absolute) {\n\t\t\tcv::convertScaleAbs(laplacian, abs);\n\t\t\treturn abs;\n\t\t}\n\t\treturn laplacian;\n\t}\n\n\tcv::Mat VideoUtils::getCanny(cv::Mat mat)\n\t{\n\t\tcv::Mat grey, canny;\n\t\tgrey = getGrey(mat);\n\t\tcv::Canny(grey, canny, 50, 150);\n\t\treturn canny;\n\t}\n\n\tint VideoUtils::rotationAngleFromMetadata(const std::string & videoPath)\n\t{\n\t\tnamespace bfs = boost::filesystem;\n\n\t\tPath vidPath = bfs::canonical(videoPath);\n\t\tstd::string parentAbs = bfs::canonical(vidPath.parent_path()).string();\n\t\tstd::string tmpFilePath = parentAbs + \"/\" + vidPath.stem().string() + \"_tmp.txt\";\n\n\t\tstd::string cmd = \"ffprobe -i \\\"\" + vidPath.string() + \"\\\" > \\\"\" + tmpFilePath + \"\\\" 2>&1\";\n\t\t//std::cout << cmd << std::endl;\n\n\t\tint cmd_status = std::system(cmd.c_str());\n\t\tif (cmd_status != EXIT_SUCCESS) {\n\t\t\tSIBR_WRG << \"getMetaData failed to call : \" << cmd << std::endl;\n\t\t}\n\n\t\tstd::ifstream file(tmpFilePath);\n\t\tif (!file.is_open()) {\n\t\t\tSIBR_WRG << \"getMetaData failed to open \" << tmpFilePath << std::endl;\n\t\t}\n\t\tstd::string line, tmp;\n\t\tstd::stringstream linestream;\n\n\t\tint angle = 0;\n\t\twhile (safeGetline(file, line)) {\n\t\t\tif (line.find(\"rotate\") != std::string::npos) {\n\t\t\t\tlinestream << line;\n\t\t\t\tlinestream >> tmp >> tmp >> angle;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfile.close();\n\n\t\tif (!boost::filesystem::remove(tmpFilePath)) {\n\t\t\tSIBR_WRG << \"getMetaData failed to remove \" << tmpFilePath << std::endl;\n\t\t}\n\n\t\treturn angle;\n\t}\n\n\tvoid VideoUtils::ECCtransform(cv::Mat matA, cv::Mat matB, cv::Mat & correctedB, cv::Mat & diff, int cvMotion)\n\t{\n\t\tcv::Mat greyA, greyB, warpBA;\n\t\tcv::cvtColor(matA, greyA, cv::COLOR_BGR2GRAY);\n\t\tcv::cvtColor(matB, greyB, cv::COLOR_BGR2GRAY);\n\t\ttry {\n\t\t\tcv::findTransformECC(greyA, greyB, warpBA, cvMotion);\n\t\t}\n\t\tcatch (const std::exception & e) { std::cout << e.what();  return; }\n\n\t\tif (cvMotion == cv::MOTION_HOMOGRAPHY) {\n\t\t\tcv::warpPerspective(matB, correctedB, warpBA, matB.size());\n\t\t} else if (cvMotion == cv::MOTION_AFFINE) {\n\t\t\tcv::warpAffine(matB, correctedB, warpBA, matB.size());\n\t\t}\n\n\t\tcv::absdiff(matA, correctedB, diff);\n\t}\n\n\tvoid VideoUtils::smallAlignmentVideo(sibr::Video & vid, const std::string & outputVidPath, bool viz)\n\t{\n\t\tstruct Match {\n\t\t\tcv::Point2f in, out;\n\t\t\tfloat error;\n\t\t};\n\n\t\t//cv::VideoWriter out(outputVidPath, codec_OpenH264, vid.getFrameRate(), cv::Size(vid.getResolution()[0], vid.getResolution()[1]));\n\t\tsibr::FFVideoEncoder out(outputVidPath, vid.getFrameRate(), vid.getResolution());\n\n\t\tif (!out.isFine()) {\n\t\t\tSIBR_WRG << \" cant write video \" << outputVidPath << std::endl;\n\t\t}\n\t\tvid.setCurrentFrame(0);\n\t\tcv::Mat initFrame = vid.next();\n\t\tcv::Mat initGray = VideoUtils::getGrey(initFrame);\n\n\t\tstd::vector<cv::Point2f> features, nextFeatures;\n\t\tstd::vector<uchar> status;\n\t\tstd::vector<float> errors;\n\n\t\tcv::Mat totalHomography = cv::Mat::eye(3, 3, CV_32FC1);\n\n\t\tconst double magic_expon = 1.6;\n\t\tconst double ratio = 0.5;\n\t\tconst double ransac_repro_error = 3.0;\n\t\tconst double features_to_track_quality = 0.1;\n\t\tconst double features_min_dist = 0.1; //10\n\t\tint nPixels = vid.getResolution().prod();\n\n\t\tint numFeatures = (int)pow(nPixels, 1.0 / magic_expon);\n\t\tstd::cout << \" num features \" << numFeatures << std::endl;\n\n\t\tcv::goodFeaturesToTrack(initGray, features, numFeatures, features_to_track_quality, 10);\n\n\t\tcv::Mat nextFrame, gray;\n\n\t\tfor (;;) {\n\t\t\tnextFrame = vid.next();\n\t\t\tif (nextFrame.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tgray = VideoUtils::getGrey(nextFrame);\n\n\t\t\tcv::calcOpticalFlowPyrLK(initGray, gray, features, nextFeatures, status, errors, cv::Size(15, 15), 0);\n\n\t\t\tstd::vector<Match> matchs;\n\t\t\tfor (int i = 0; i < (int)status.size(); ++i) {\n\t\t\t\tif (status[i] == 1) {\n\t\t\t\t\tmatchs.push_back({ features[i] ,nextFeatures[i] ,errors[i] });\n\t\t\t\t}\n\t\t\t}\n\t\t\t//std::cout << matchs.size() / (double)status.size() << std::endl;\n\n\t\t\tstd::sort(matchs.begin(), matchs.end(), [](const Match & a, const Match & b) { return a.error < b.error; });\n\n\t\t\tint numBestMatch = (int)(ratio*matchs.size());\n\t\t\tstd::vector<cv::Point2f> inputFeatures(numBestMatch), outputFeatures(numBestMatch);\n\n\t\t\tfor (int i = 0; i < numBestMatch; ++i) {\n\t\t\t\tinputFeatures[i] = matchs[i].in;\n\t\t\t\toutputFeatures[i] = matchs[i].out;\n\t\t\t}\n\n\t\t\tif (viz) {\n\t\t\t\tcv::Mat corresp_viz = nextFrame.clone();\n\t\t\t\tfor (int i = 0; i < numBestMatch; ++i) {\n\t\t\t\t\tcv::circle(corresp_viz, matchs[i].in, 5, cv::Scalar(0, 255, 0), 2);\n\t\t\t\t\tcv::circle(corresp_viz, matchs[i].out, 5, cv::Scalar(255, 0, 0), 2);\n\t\t\t\t}\n\t\t\t\tcv::imshow(\"viz\", corresp_viz);\n\t\t\t\tif (cv::waitKey() == 27) {\n\t\t\t\t\tviz = false;\n\t\t\t\t\tcv::destroyAllWindows();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcv::Mat homography = cv::findHomography(inputFeatures, outputFeatures, cv::RANSAC, ransac_repro_error);\n\n\t\t\tcv::Mat correctedFrame;\n\t\t\tcv::warpPerspective(nextFrame, correctedFrame, homography.inv(), nextFrame.size());\n\n\t\t\tout << correctedFrame;\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t}\n\n\t\tif (viz) {\n\t\t\tcv::destroyAllWindows();\n\t\t}\n\n\t\tout.close();\n\t\tstd::cout << \" done \" << std::endl;\n\t}\n\n\tvoid VideoUtils::smallAlignmentVideo2(sibr::Video & vid, const std::string & outputVidPath, bool viz)\n\t{\n\t\tstruct Match {\n\t\t\tcv::Point2f in, out;\n\t\t\tfloat error;\n\t\t};\n\n\t\t//cv::VideoWriter out(outputVidPath, codec_OpenH264, vid.getFrameRate(), cv::Size(vid.getResolution()[0], vid.getResolution()[1]));\n\t\tsibr::FFVideoEncoder out(outputVidPath, vid.getFrameRate(), vid.getResolution());\n\n\t\tif (!out.isFine()) {\n\t\t\tSIBR_WRG << \" cant write video \" << outputVidPath << std::endl;\n\t\t}\n\t\tvid.setCurrentFrame(0);\n\t\tcv::Mat initFrame = vid.next();\n\t\tcv::Mat initGray = VideoUtils::getGrey(initFrame);\n\n\t\tstd::vector<cv::Point2f> features, nextFeatures;\n\t\tstd::vector<uchar> status;\n\t\tstd::vector<float> errors;\n\n\t\tcv::Mat completeHomography = cv::Mat::eye(3, 3, CV_64FC1);\n\n\t\tconst double magic_expon = 2.0;\n\t\tconst double ratio = 0.5;\n\t\tconst double ransac_repro_error = 0.5;\n\t\tconst double features_to_track_quality = 0.1;\n\t\tconst double features_min_dist = 10; //10\n\t\tconst double max_displacement = 2;\n\t\tint nPixels = vid.getResolution().prod();\n\n\t\tint numFeatures = (int)pow(nPixels, 1.0 / magic_expon);\n\t\tstd::cout << \" num features \" << numFeatures << std::endl;\n\n\t\tcv::Mat nextFrame, gray;\n\n\t\tfor (;;) {\n\t\t\tnextFrame = vid.next();\n\t\t\tif (nextFrame.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tgray = VideoUtils::getGrey(nextFrame);\n\n\t\t\tcv::GaussianBlur(gray, gray, cv::Size(3, 3), 0);\n\n\t\t\tcv::goodFeaturesToTrack(initGray, features, numFeatures, features_to_track_quality, features_min_dist);\n\n\t\t\tcv::calcOpticalFlowPyrLK(initGray, gray, features, nextFeatures, status, errors, cv::Size(5, 5), 0);\n\n\t\t\tstd::vector<Match> matchs;\n\t\t\tfor (int i = 0; i < (int)status.size(); ++i) {\n\t\t\t\tauto v = features[i] - nextFeatures[i];\n\n\t\t\t\tif (status[i] == 1 && cv::norm(cv::Vec2f(v.x, v.y), cv::NORM_INF) < max_displacement) {\n\t\t\t\t\tmatchs.push_back({ features[i] ,nextFeatures[i] ,errors[i] });\n\t\t\t\t}\n\t\t\t}\n\t\t\t//std::cout << matchs.size() / (double)status.size() << std::endl;\n\n\t\t\tstd::sort(matchs.begin(), matchs.end(), [](const Match & a, const Match & b) { return a.error < b.error; });\n\n\t\t\tint numBestMatch = (int)(ratio*matchs.size());\n\t\t\tstd::vector<cv::Point2f> inputFeatures(numBestMatch), outputFeatures(numBestMatch);\n\n\t\t\tfor (int i = 0; i < numBestMatch; ++i) {\n\t\t\t\tinputFeatures[i] = matchs[i].in;\n\t\t\t\toutputFeatures[i] = matchs[i].out;\n\t\t\t}\n\n\t\t\tif (viz) {\n\t\t\t\tcv::Mat corresp_viz = nextFrame.clone();\n\t\t\t\tfor (int i = 0; i < numBestMatch; ++i) {\n\t\t\t\t\tcv::circle(corresp_viz, matchs[i].in, 5, cv::Scalar(0, 255, 0), 2);\n\t\t\t\t\tcv::circle(corresp_viz, matchs[i].out, 5, cv::Scalar(255, 0, 0), 2);\n\t\t\t\t}\n\t\t\t\tcv::imshow(\"viz\", corresp_viz);\n\t\t\t\tif (cv::waitKey() == 27) {\n\t\t\t\t\tviz = false;\n\t\t\t\t\tcv::destroyAllWindows();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcv::Mat homography = cv::findHomography(inputFeatures, outputFeatures, cv::RANSAC, ransac_repro_error);\n\n\t\t\tcompleteHomography *= homography;\n\n\t\t\tcv::Mat correctedFrame;\n\t\t\tcv::warpPerspective(nextFrame, correctedFrame, completeHomography.inv(), nextFrame.size());\n\n\t\t\tinitGray = gray;\n\n\t\t\tout << correctedFrame;\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t}\n\n\t\tif (viz) {\n\t\t\tcv::destroyAllWindows();\n\t\t}\n\n\t\tout.close();\n\t\tstd::cout << \" done \" << std::endl;\n\t}\n\n\tcv::Mat VideoUtils::applyFlow(const cv::Mat & prev, const cv::Mat & flow) {\n\t\tcv::Mat out, realFlow = flow;\n\t\tfor (int i = 0; i < prev.rows; ++i) {\n\t\t\tfor (int j = 0; j < prev.cols; ++j) {\n\t\t\t\trealFlow.at<cv::Vec2f>(i, j) += cv::Vec2f(j + 0.5f, i + 0.5f);\n\t\t\t}\n\t\t}\n\t\tcv::remap(prev, out, realFlow, cv::Mat(), cv::INTER_LINEAR);\n\t\treturn out;\n\t}\n\n\tvoid VideoUtils::simpleFlow(cv::VideoCapture & cap, float ratio,\n\t\tstd::function<bool(cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id)> f,\n\t\tstd::function<void(void)> end_function\n\t) {\n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, 0);\n\t\tcv::Mat  prev, flow;\n\t\tint flow_id = 0;\n\t\twhile (true) {\n\n\t\t\tcv::Mat next;\n\t\t\tcap >> next;\n\t\t\tif (next.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcv::resize(next, next, cv::Size((int)(ratio*next.size().width), (int)(ratio*next.size().height)));\n\n\t\t\tif (!prev.empty()) {\n\t\t\t\tcv::optflow::calcOpticalFlowSF(prev, next, flow, 3, 2, 4);\n\n\t\t\t\tif (!f(prev, next, flow, flow_id)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t++flow_id;\n\t\t\t}\n\n\t\t\tprev = next;\n\t\t}\n\n\t\tend_function();\n\t}\n\n\tvoid VideoUtils::simpleFlowViz(cv::VideoCapture & cap, float ratio)\n\t{\n\t\tsimpleFlow(cap, ratio, [](cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id) {\n\t\t\tcv::Mat viz = getFlowViz(flow);\n\t\t\tcv::resize(viz, viz, cv::Size(2000, 1500));\n\t\t\tcv::Mat diff = VideoUtils::applyFlow(prev, flow);\n\n\t\t\tcv::imshow(\"simpleflow\", viz);\n\t\t\tcv::imshow(\"frame\", next);\n\t\t\tcv::imshow(\"applyFlow\", diff);\n\t\t\tint key = cv::waitKey(1);\n\t\t\tif (key == 27) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}, []() {\n\t\t\tcv::destroyAllWindows();\n\t\t}\n\t\t);\n\t}\n\n\tvoid VideoUtils::simpleFlowSave(cv::VideoCapture & cap, float ratio, std::function<std::string(int flow_id)> naming_f)\n\t{\n\t\tstd::cout << \" saving flow \" << std::flush;\n\t\tsimpleFlow(cap, ratio, [&](cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id) {\n\t\t\tstd::cout << \".\" << std::flush;\n\t\t\tcv::Mat viz = getFlowViz(flow);\n\t\t\tviz.convertTo(viz, CV_8UC3, 255.0);\n\t\t\treturn cv::imwrite(naming_f(flow_id), viz);\n\t\t});\n\t\tstd::cout << \"done\" << std::endl;\n\t}\n\n\tvoid VideoUtils::deepFlow(cv::VideoCapture & cap, float ratio,\n\t\tstd::function<bool(cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id)> f,\n\t\tstd::function<void(void)> end_function)\n\t{\n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, 0);\n\n\t\tauto deepFlow = cv::optflow::createOptFlow_DeepFlow();\n\t\tcv::Mat flow, next, nextGrey, prevGrey;\n\t\tint flow_id = 0;\n\t\twhile (true) {\n\t\t\tcap >> next;\n\t\t\tif (next.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tauto size = cv::Size((int)(ratio*next.size().width), (int)(ratio*next.size().height));\n\t\t\tcv::resize(next, next, size);\n\t\t\tnextGrey = getGrey(next);\n\n\t\t\tif (!prevGrey.empty()) {\n\t\t\t\tdeepFlow->calc(prevGrey, nextGrey, flow);\n\n\t\t\t\tif (!f(prevGrey, nextGrey, flow, flow_id)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t++flow_id;\n\t\t\t}\n\n\t\t\tprevGrey = nextGrey.clone();\n\t\t}\n\n\t\tend_function();\n\n\t}\n\n\tvoid VideoUtils::deepFlowViz(cv::VideoCapture & cap, float ratio)\n\t{\n\t\tdeepFlow(cap, ratio, [](cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id) {\n\t\t\tcv::Mat viz = getFlowViz(flow);\n\t\t\tcv::Mat diff = applyFlow(prev, flow);\n\t\t\tcv::imshow(\"simpleflow\", viz);\n\t\t\tcv::imshow(\"frame\", prev);\n\t\t\tcv::imshow(\"applyFlow\", diff);\n\t\t\tint key = cv::waitKey(1);\n\t\t\tif (key == 27) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}, []() {\n\t\t\tcv::destroyAllWindows();\n\t\t}\n\t\t);\n\t}\n\n\tcv::Mat VideoUtils::getGrey(const cv::Mat & mat)\n\t{\n\t\tcv::Mat out;\n\t\tcv::cvtColor(mat, out, cv::COLOR_BGR2GRAY);\n\t\treturn out;\n\t}\n\n\tvoid PyramidLayer::show(int s) const\n\t{\n\t\tint slice_y = 0;\n\n\t\tstruct Data {\n\t\t\tPyramidLayer A;\n\t\t};\n\t\tData data = { *this };\n\n\t\tauto cb = [](int pos, void* userdata) -> void {\n\t\t\tData & d = *(Data*)userdata;\n\t\t\tcv::Mat sliceA = sibr::slice(d.A, 0, pos);\n\t\t\tcv::resize(sliceA, sliceA, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::imshow(\"sliceA\", sliceA);\n\t\t};\n\n\n\t\tint t = 0;\n\t\twhile (true) {\n\n\t\t\tcv::Mat slice;\n\t\t\tcv::Mat shifted = (volume.row(t) + 0 * 128.0f);\n\t\t\tshifted.reshape(3, h).convertTo(slice, CV_8UC3);\n\t\t\tcv::imshow(\"shpw\", slice);\n\t\t\tcv::createTrackbar(\"sy\", \"shpw\", &slice_y, w - 1, cb, &data);\n\t\t\tif (cv::waitKey(s) == 27) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t++t;\n\t\t\tif (t == l) {\n\t\t\t\tstd::cout << \".\" << std::flush;\n\t\t\t\tt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tcv::Mat PyramidLayer::getRGB(int frame, bool centered) {\n\t\tcv::Mat out;\n\t\tif (centered) {\n\t\t\tcv::Mat shifted = (volume.row(frame) + 128.0f);\n\t\t\tshifted.reshape(3, h).convertTo(out, CV_8UC3);\n\t\t} else {\n\t\t\tvolume.row(frame).reshape(3, h).convertTo(out, CV_8UC3);\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tvoid PyramidLayer::saveToVideoFile(const std::string & filename, double framerate)\n\t{\n\t\tsibr::FFVideoEncoder output(filename, framerate, { w,h });\n\t\tfor (int f = 0; f < l; ++f) {\n\t\t\tcv::Mat frame;\n\t\t\tvolume.row(f).reshape(3, h).convertTo(frame, CV_8UC3);\n\t\t\toutput << frame;\n\t\t}\n\t\toutput.close();\n\n\t}\n\n\tvoid PyramidLayer::show(PyramidLayer A, PyramidLayer B, int s) {\n\t\tint t = 0;\n\t\twhile (true) {\n\t\t\tcv::Mat sliceA = A.getRGB(t);\n\t\t\tcv::Mat sliceB = B.getRGB(t);\n\t\t\tcv::Mat top;\n\t\t\tcv::hconcat(sliceA, sliceB, top);\n\t\t\tcv::imshow(\"show duo\", top);\n\t\t\tif (cv::waitKey(s) == 27) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t++t;\n\t\t\tif (t == A.l) {\n\t\t\t\tstd::cout << \".\" << std::flush;\n\t\t\t\tt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid PyramidLayer::show(PyramidLayer A, PyramidLayer B, PyramidLayer C, int s) {\n\t\tint slice_x = 0;\n\t\tint slice_y = 0;\n\t\tint t = 0;\n\n\t\tstruct Data {\n\t\t\tPyramidLayer A, B, C;\n\t\t};\n\t\tData data = { A,B,C };\n\n\t\tauto cb = [](int pos, void* userdata) -> void {\n\t\t\tData & d = *(Data*)userdata;\n\t\t\tcv::Mat sliceA = sibr::slice(d.A, 0, pos);\n\t\t\tcv::Mat sliceB = sibr::slice(d.B, 0, pos);\n\t\t\tcv::Mat sliceC = sibr::slice(d.C, 0, pos);\n\t\t\tcv::resize(sliceA, sliceA, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::resize(sliceB, sliceB, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::resize(sliceC, sliceC, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\n\t\t\tcv::imshow(\"sliceA\", sliceA);\n\t\t\tcv::imshow(\"sliceB\", sliceB);\n\t\t\tcv::imshow(\"sliceC\", sliceC);\n\t\t};\n\n\t\twhile (true) {\n\t\t\tcv::imshow(\"show A\", A.getRGB(t));\n\t\t\tcv::imshow(\"show B\", B.getRGB(t));\n\t\t\tcv::imshow(\"show C\", C.getRGB(t));\n\n\t\t\tcv::createTrackbar(\"sy\", \"show C\", &slice_y, A.w - 1, cb, &data);\n\n\t\t\tint k = cv::waitKey(s);\n\t\t\tif (k == 27) {\n\t\t\t\tbreak;\n\t\t\t} else if (k == 'c') {\n\t\t\t\tt = t > 0 ? t - 1 : A.l - 1;\n\t\t\t} else {\n\t\t\t\t++t;\n\t\t\t\tif (t == A.l) {\n\t\t\t\t\tstd::cout << \".\" << std::flush;\n\t\t\t\t\tt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid PyramidLayer::show(PyramidLayer A, PyramidLayer B, PyramidLayer C, PyramidLayer D, int s, bool centered) {\n\t\tint slice_y = 0;\n\t\tint t = 0;\n\t\tstruct Data {\n\t\t\tPyramidLayer A, B, C, D;\n\t\t\tbool center;\n\t\t};\n\t\tData data = { A,B,C,D, centered };\n\n\t\tauto cb = [](int pos, void* userdata) -> void {\n\t\t\tData & d = *(Data*)userdata;\n\t\t\tcv::Mat sliceA = sibr::slice(d.A, 0, pos, true, d.center);\n\t\t\tcv::Mat sliceB = sibr::slice(d.B, 0, pos, true, d.center);\n\t\t\tcv::Mat sliceC = sibr::slice(d.C, 0, pos, true, d.center);\n\t\t\tcv::Mat sliceD = sibr::slice(d.D, 0, pos, true, d.center);\n\t\t\tcv::resize(sliceA, sliceA, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::resize(sliceB, sliceB, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::resize(sliceC, sliceC, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::resize(sliceD, sliceD, cv::Size(800, 800), 0, 0, cv::INTER_NEAREST);\n\t\t\tcv::imshow(\"sliceA\", sliceA);\n\t\t\tcv::imshow(\"sliceB\", sliceB);\n\t\t\tcv::imshow(\"sliceC\", sliceC);\n\t\t\tcv::imshow(\"sliceD\", sliceD);\n\t\t};\n\n\t\twhile (true) {\n\t\t\tcv::imshow(\"show A\", A.getRGB(t, data.center));\n\t\t\tcv::imshow(\"show B\", B.getRGB(t, data.center));\n\t\t\tcv::imshow(\"show C\", C.getRGB(t, data.center));\n\t\t\tcv::imshow(\"show D\", D.getRGB(t, data.center));\n\t\t\tcv::createTrackbar(\"sy\", \"show C\", &slice_y, A.w - 1, cb, &data);\n\n\t\t\tint k = cv::waitKey(s);\n\t\t\tif (k == 27) {\n\t\t\t\tstd::cout << \"clear\" << std::endl;\n\t\t\t\tcv::destroyAllWindows();\n\t\t\t\tbreak;\n\t\t\t} else if (k == 'c') {\n\t\t\t\tt = t > 0 ? t - 1 : A.l - 1;\n\t\t\t} else if (k == 'm') {\n\t\t\t\tdata.center = !data.center;\n\t\t\t} else {\n\t\t\t\t++t;\n\t\t\t\tif (t == A.l) {\n\t\t\t\t\tstd::cout << \".\" << std::flush;\n\t\t\t\t\tt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid PyramidLayer::showDiff(PyramidLayer A, PyramidLayer B, int s)\n\t{\n\t\tint t = 0;\n\t\twhile (true) {\n\t\t\tcv::Mat sliceA = A.getRGB(t);\n\t\t\tcv::Mat sliceB = B.getRGB(t);\n\t\t\tcv::Mat diff;\n\t\t\tcv::absdiff(sliceA, sliceB, diff);\n\t\t\tcv::Mat top;\n\t\t\t//cv::hconcat(sliceB, 5 * diff, top);\n\t\t\t//cv::hconcat(sliceA, top, top);\n\t\t\tcv::imshow(\"show a\", sliceA);\n\t\t\tcv::imshow(\"show B\", sliceB);\n\n\t\t\tcv::imshow(\"show diff\", diff);\n\t\t\tint k = cv::waitKey(s);\n\t\t\tif (k == 27) {\n\t\t\t\tbreak;\n\t\t\t} else if (k == 'c') {\n\t\t\t\tt = t > 0 ? t - 1 : A.l - 1;\n\t\t\t} else {\n\t\t\t\t++t;\n\t\t\t\tif (t == A.l) {\n\t\t\t\t\tstd::cout << \".\" << std::flush;\n\t\t\t\t\tt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tPyramidLayer PyramidLayer::operator+(const PyramidLayer & other)\n\t{\n\t\t//assert(w == other.w && h == other.w && l = other.l);\n\n\t\tPyramidLayer out;\n\t\tout.w = w;\n\t\tout.h = h;\n\t\tout.l = l;\n\t\tout.volume = volume + other.volume;\n\t\treturn out;\n\t}\n\n\tPyramidLayer PyramidLayer::operator-(const PyramidLayer & other)\n\t{\n\t\t//assert(w == other.w && h == other.w && l = other.l);\n\n\t\tPyramidLayer out;\n\t\tout.w = w;\n\t\tout.h = h;\n\t\tout.l = l;\n\t\tout.volume = volume - other.volume;\n\t\treturn out;\n\t}\n\n\tPyramidLayer blur(const PyramidLayer & layer, const PyramidParameters &  params)\n\t{\n\t\tPyramidLayer out(layer.w, layer.h, layer.l);\n\n#pragma omp parallel for\n\t\tfor (int t = 0; t < layer.l; ++t) {\n\t\t\tcv::Mat sliceIn = layer.volume.row(t).reshape(3, layer.h);\n\t\t\tcv::Mat sliceOut = out.volume.row(t).reshape(3, out.h);\n\t\t\tif (params.splacialDS) {\n\t\t\t\tcv::GaussianBlur(sliceIn, sliceOut, cv::Size(2 * params.spatial_radius + 1, 2 * params.spatial_radius + 1), 0);\n\t\t\t} else {\n\t\t\t\tsliceIn.copyTo(sliceOut);\n\t\t\t}\n\t\t}\n\n\t\ttemporalBlur(out, params);\n\n\t\treturn out;\n\t}\n\n\t//\tPyramidLayer temporalBlur(const PyramidLayer & layer, const PyramidParameters &  params, float scaling)\n\t//\t{\n\t//\t\t//cv::Mat kernel = cv::Mat::ones(cv::Size(2 * params.temporal_radius + 1, 1), CV_32FC1);\n\t//\t\t//kernel = kernel / cv::norm(kernel, cv::NORM_L1);\n\t//\n\t//\t\tconst cv::Mat kernel = (scaling / 16.0f)*(cv::Mat_<float>(1, 5) << 1, 4, 6, 4, 1);\n\t//\n\t//\t\t//layer.show(0);\n\t//\n\t//\t\tcv::Mat vol = layer.volume.t();\n\t//\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 0) << std::endl;\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 1) << std::endl;\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 2) << std::endl;\n\t//\n\t//\t\tcv::filter2D(vol, vol, -1, kernel, { 2,0 }, 0, cv::BORDER_DEFAULT);\n\t//\n\t////#pragma omp parallel for\n\t////\t\tfor (int i = 0; i < layer.h; ++i) {\n\t////\t\t\tfor (int j = 0; j < layer.w; ++j) {\n\t////\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t////\t\t\t\t\tcv::Mat slice = vol.row(3 * (i*layer.w + j) + c);\n\t////\t\t\t\t\tcv::filter2D(slice, slice, -1, kernel, { 2,0 }, 0, cv::BORDER_DEFAULT); // cv::Point(-1,-1) BORDER_ISOLATED  cv::BORDER_REPLICATE\n\t////\t\t\t\t}\n\t////\t\t\t}\n\t////\t\t}\n\t//\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 0) << std::endl;\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 1) << std::endl;\n\t//\t\t//std::cout << vol.row(3 * (0 * layer.w + 0) + 2) << std::endl;\n\t//\n\t//\t\tPyramidLayer out(vol.t(), layer.w, layer.h);\n\t//\t\t//out.cout();\n\t//\t\t//out.show(0);\n\t//\n\t//\t\treturn out;\n\t//\t}\n\n\tPyramidLayer temporalBlur(const PyramidLayer & layer, const PyramidParameters &  params, float scaling)\n\t{\n\t\tconst cv::Mat kernel = (scaling / 16.0f)*(cv::Mat_<float>(5, 1) << 1, 4, 6, 4, 1);\n\t\tcv::Mat vol = layer.volume.clone();\n\t\tcv::filter2D(vol, vol, -1, kernel, { -1,-1 }, 0.0, cv::BORDER_DEFAULT);\n\t\treturn PyramidLayer(vol, layer.w, layer.h);\n\t}\n\n\tvoid temporalBlurInPlace(PyramidLayer & layer, const PyramidParameters & params, float scaling)\n\t{\n\t\tconst cv::Mat kernel = (scaling / 16.0f)*(cv::Mat_<float>(5, 1) << 1, 4, 6, 4, 1);\n\t\tcv::filter2D(layer.volume, layer.volume, -1, kernel, { -1,-1 }, 0.0, cv::BORDER_DEFAULT);\n\t}\n\n\tPyramidLayer decimate(const PyramidLayer & layer, const PyramidParameters &  params)\n\t{\n\n\t\tPyramidLayer out((layer.w + 1) / 2, (layer.h + 1) / 2, (layer.l + 1) / 2);\n\n#pragma omp parallel for\n\t\tfor (int t = 0; t < out.l; ++t) {\n\t\t\tcv::Mat sliceCurrent = layer.volume.row(2 * t).reshape(3, layer.h);\n\t\t\tcv::Mat sliceDecimated = out.volume.row(t).reshape(3, out.h);\n\n\t\t\tcv::pyrDown(sliceCurrent, sliceDecimated);\n\t\t\t//cv::resize(sliceCurrent, sliceDecimated, sliceDecimated.size(), 0, 0, CV_INTER_NN);\n\n\t\t}\n\n\t\treturn out;\n\n\t}\n\n\tPyramidLayer upscale(const PyramidLayer & layerUp, const PyramidLayer & layerDown, const PyramidParameters &  params)\n\t{\n\t\t//std::cout << layerUp.w << \" \" << layerUp.h << \" \" << layerUp.l << std::endl;\n\t\t//std::cout << layerDown.w << \" \" << layerDown.h << \" \" << layerDown.l << std::endl;\n\n\t\tPyramidLayer out(layerUp.w, layerUp.h, layerUp.l);\n\t\t//#pragma omp parallel for\n\t\tfor (int t = 0; t < layerDown.l; ++t) {\n\t\t\t//if (2 * t + 1 >= layerUp.l) {\n\t\t\t//\tcontinue;\n\t\t\t//}\n\t\t\t//cv::Mat sliceUp = out.volume.row(2 * t + 1).reshape(3, layerUp.h);\n\t\t\tcv::Mat sliceUp = out.volume.row(2 * t).reshape(3, layerUp.h);\n\t\t\tcv::Mat sliceDown = layerDown.volume.row(t).reshape(3, layerDown.h);\n\n\t\t\tif (params.splacialDS) {\n\t\t\t\tcv::pyrUp(sliceDown, sliceUp, sliceUp.size());\n\t\t\t} else {\n\t\t\t\tsliceDown.copyTo(sliceUp);\n\t\t\t}\n\n\n\t\t\t//\tif (2 * t + 1 < layerUp.l) {\n\t\t\t//\t\tsliceUp.copyTo(out.volume.row(2 * t + 1).reshape(3, layerUp.h));\n\t\t\t//\t}\n\t\t}\n\t\ttemporalBlurInPlace(out, params, 2.0f);\n\t\treturn out;\n\t}\n\n\tPyramidLayer downscale(const PyramidLayer & layer, const PyramidParameters &  params)\n\t{\n\n\t\tPyramidLayer blured = temporalBlur(layer, params);\n\t\t//std::cout << \" temporal blur \" << std::endl;\n\t\t//blured.show();\n\t\t//std::cout << \" temporal blur end\" << std::endl;\n\n\t\tPyramidLayer out;\n\n\t\tif (params.splacialDS) {\n\t\t\tout = PyramidLayer((layer.w + 1) / 2, (layer.h + 1) / 2, (layer.l + 1) / 2);\n\t\t} else {\n\t\t\tout = PyramidLayer(layer.w, layer.h, (layer.l + 1) / 2);\n\t\t}\n\n\t\t//#pragma omp parallel for\n\t\tfor (int t = 0; t < out.l; ++t) {\n\t\t\t//if (2 * t + 1 >= layer.l) {\n\t\t\t//\tcontinue;\n\t\t\t//}\n\t\t\t//cv::Mat sliceCurrent = blured.volume.row(2 * t + 1).reshape(3, layer.h);\n\t\t\tcv::Mat sliceCurrent = blured.volume.row(2 * t).reshape(3, layer.h);\n\t\t\tcv::Mat sliceDecimated = out.volume.row(t).reshape(3, out.h);\n\n\t\t\tif (params.splacialDS) {\n\t\t\t\tcv::pyrDown(sliceCurrent, sliceDecimated);\n\t\t\t} else {\n\t\t\t\tsliceCurrent.copyTo(sliceDecimated);\n\t\t\t}\n\n\t\t}\n\n\t\t//PyramidLayer blur (layer.w, layer.h, (layer.l + 1) / 2);\n\n\t\t//for (int i = 0; i < blur.volume.rows; ++i) {\n\t\t//\tcv::pyrDown(layer.volume.row(i), blur.volume.row(i), blur.volume.row(i).size());\n\t\t//}\n\n\t\t//PyramidLayer out;\n\t\t//if (params.splacialDS) {\n\t\t//\tout = PyramidLayer((layer.w + 1) / 2, (layer.h + 1) / 2, blur.l);\n\t\t//} else {\n\t\t//\tout = PyramidLayer(layer.w, layer.h, blur.l);\n\t\t//}\n\n\t\t//for (int t = 0; t < out.l; ++t) {\n\t\t//\tif (2 * t + 1 >= layer.l) {\n\t\t//\t\tcontinue;\n\t\t//\t}\n\t\t//\tcv::Mat sliceCurrent = blur.volume.row(2 * t + 1).reshape(3, layer.h);\n\t\t//\tcv::Mat sliceDecimated = out.volume.row(t).reshape(3, out.h);\n\n\t\t//\tif (params.splacialDS) {\n\t\t//\t\tcv::pyrDown(sliceCurrent, sliceDecimated);\n\t\t//\t} else {\n\t\t//\t\tsliceCurrent.copyTo(sliceDecimated);\n\t\t//\t}\n\t\t//}\n\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT cv::Mat slice(const PyramidLayer & layer, int i, int j, bool vertical, bool center)\n\t{\n\t\tcv::Mat out;\n\t\tif (vertical) {\n\t\t\tout = cv::Mat(layer.l, layer.h, CV_8UC3);\n\n\t\t\tfor (int t = 0; t < layer.l; ++t) {\n\t\t\t\tfor (int i = 0; i < layer.h; ++i) {\n\t\t\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\t\t\tout.at<cv::Vec3b>(t, i)[c] = (uchar)sibr::clamp((int)layer.volume.at<float>(t, 3 * (i*layer.w + j) + c) + (center ? 128 : 0), 0, 255);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//cv::vconcat(out, out, out);\n\t\tout = out.t();\n\t\treturn out;\n\t}\n\n\tPyramidLayer VideoLaplacianPyramid::collapse() const\n\t{\n\t\tPyramidLayer out = layers.back();\n\t\tfor (int i = (int)layers.size() - 2; i >= 0; --i) {\n\t\t\tPyramidLayer up = upscale(layers[i], out, params);\n\t\t\tout = up + layers[i];\n\t\t}\n\t\treturn out;\n\t}\n\n\tVideoGaussianPyramid buildVideoGaussianPyramid(const cv::Mat & volume, int w, int h, int nLevels, const PyramidParameters & params, bool show)\n\t{\n\t\tVideoGaussianPyramid out;\n\t\tout.params = params;\n\t\tPyramidLayer currentLayer(volume, w, h);\n\t\tout.layers.push_back(currentLayer);\n\n\t\tfor (int i = 1; i < nLevels; ++i) {\n\t\t\tPyramidLayer down = downscale(currentLayer, params);\n\t\t\tout.layers.push_back(down);\n\t\t\tcurrentLayer = down;\n\t\t\tif (show) {\n\t\t\t\tcurrentLayer.show();\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tVideoGaussianPyramid buildVideoGaussianPyramid(sibr::Video & vid, int nLevels, const PyramidParameters & params, bool show)\n\t{\n\t\treturn buildVideoGaussianPyramid(vid.getVolume(), vid.getResolution()[0], vid.getResolution()[1], nLevels, params, show);\n\t}\n\n\tSIBR_VIDEO_EXPORT VideoLaplacianPyramid buildVideoLaplacianPyramid(PyramidLayer vid, int nLevels, const PyramidParameters & params, bool show)\n\t{\n\t\tVideoLaplacianPyramid out;\n\t\tout.params = params;\n\n\t\tPyramidLayer currentLayer = vid;\n\t\tcurrentLayer.volume.convertTo(currentLayer.volume, CV_32FC1);\n\n\t\tfor (int i = 0; i < nLevels - 1; ++i) {\n\t\t\tPyramidLayer down = downscale(currentLayer, params);\n\t\t\tPyramidLayer up = upscale(currentLayer, down, params);\n\t\t\tif (show) {\n\t\t\t\tup.show();\n\t\t\t}\n\t\t\tout.layers.push_back(currentLayer - up);\n\t\t\tcurrentLayer = down;\n\t\t}\n\n\t\tout.layers.push_back(currentLayer);\n\n\t\treturn out;\n\t}\n\n\tVideoLaplacianPyramid buildVideoLaplacianPyramid(sibr::Video & vid, int nLevels, const PyramidParameters & params, bool show) {\n\t\tPyramidLayer layer(vid.getVolume(), vid.getResolution()[0], vid.getResolution()[1]);\n\t\treturn buildVideoLaplacianPyramid(layer, nLevels, params, show);\n\t}\n\n\tVideoLaplacianPyramid buildVideoLaplacianPyramidFullyReduced(PyramidLayer vid, int nLevels, const PyramidParameters & params, bool show)\n\t{\n\t\tVideoLaplacianPyramid standardPyramid = buildVideoLaplacianPyramid(vid, nLevels, params, show);\n\n\t\tVideoLaplacianPyramid out;\n\t\tout.params = params;\n\n\t\tout.layers.push_back(standardPyramid.layers[0]);\n\n\t\tfor (int i = 1; i < nLevels; ++i) {\n\n\t\t\tPyramidLayer diff = standardPyramid.layers[i].clone();\n\t\t\tfor (int k = i - 1; k >= 0; --k) {\n\t\t\t\tdiff = upscale(standardPyramid.layers[k], diff, params);\n\t\t\t}\n\t\t\tstd::cout << \" layer \" << i << \" : \";\n\t\t\tdiff.cout();\n\t\t\tout.layers.push_back(diff);\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT void convertReducedVideoPyramidTo128(VideoLaplacianPyramid & vid)\n\t{\n\t\tint nLayers = (int)vid.layers.size();\n\t\tfor (int l = 0; l < nLayers - 1; ++l) {\n\t\t\tvid.layers[l].volume += 128.0;\n\t\t}\n\t}\n\n\tPyramidLayer videoLaplacianBlending(sibr::Video & vidA, sibr::Video & vidB, PyramidLayer mask_volume)\n\t{\n\t\tint num_lvls = 6;\n\t\tauto pyrA = sibr::buildVideoLaplacianPyramid(vidA, num_lvls);\n\t\tauto pyrB = sibr::buildVideoLaplacianPyramid(vidB, num_lvls);\n\t\tauto pyrM = sibr::buildVideoGaussianPyramid(mask_volume.volume, mask_volume.w, mask_volume.h, num_lvls);\n\n\t\tVideoLaplacianPyramid out;\n\t\tfor (int l = 0; l < num_lvls; ++l) {\n\t\t\tsibr::PyramidLayer layer;\n\t\t\tlayer.w = pyrA.layers[l].w;\n\t\t\tlayer.h = pyrA.layers[l].h;\n\t\t\tlayer.l = pyrA.layers[l].l;\n\n\t\t\tcv::Mat A_lvl = pyrA.layers[l].volume;\n\t\t\tcv::Mat B_lvl = pyrB.layers[l].volume;\n\t\t\tcv::Mat M_lvl = pyrM.layers[l].volume;\n\n\t\t\tlayer.volume = A_lvl.mul(M_lvl) + B_lvl.mul(1.0f - M_lvl);\n\t\t\tout.layers.push_back(layer);\n\t\t}\n\n\t\treturn out.collapse();\n\t}\n\n\tPyramidLayer videoLaplacianBlending(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params, bool show)\n\t{\n\t\tint num_lvls = params.num_levels;\n\n\t\tauto pyrA = sibr::buildVideoLaplacianPyramid(vidA, num_lvls, params, show);\n\t\tauto pyrB = sibr::buildVideoLaplacianPyramid(vidB, num_lvls, params, show);\n\t\tauto pyrM = sibr::buildVideoGaussianPyramid(mask_volume.volume, mask_volume.w, mask_volume.h, num_lvls, params, show);\n\n\t\tVideoLaplacianPyramid out;\n\t\tout.params = params;\n\t\tfor (int l = 0; l < num_lvls; ++l) {\n\n\t\t\tstd::cout << l << std::endl;\n\n\t\t\tsibr::PyramidLayer layer;\n\t\t\tlayer.w = pyrA.layers[l].w;\n\t\t\tlayer.h = pyrA.layers[l].h;\n\t\t\tlayer.l = pyrA.layers[l].l;\n\n\t\t\tcv::Mat A_lvl = pyrA.layers[l].volume;\n\t\t\tcv::Mat B_lvl = pyrB.layers[l].volume;\n\t\t\tcv::Mat M_lvl = pyrM.layers[l].volume;\n\n\n\t\t\tcv::Mat rev_Mask = 255 - M_lvl;\n\t\t\tsibr::PyramidLayer test(rev_Mask, pyrM.layers[l].w, pyrM.layers[l].h);\n\n\t\t\t//pyrA.layers[l].show();\n\t\t\t//pyrB.layers[l].show();\n\t\t\t//pyrM.layers[l].show();\n\n\t\t\t//test.show();\n\n\t\t\tcv::Mat normalized_mask = (1 / 255.0)*M_lvl;\n\t\t\tcv::Mat normalized_mask_r = (1 / 255.0)*test.volume;\n\n\t\t\tlayer.volume = A_lvl.mul(normalized_mask) + B_lvl.mul(normalized_mask_r);\n\t\t\t//layer.show();\n\n\t\t\tout.layers.push_back(layer);\n\t\t}\n\n\t\treturn out.collapse();\n\t}\n\n\tstd::vector<FullContribData> videoLaplacianBlendingContrib(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params)\n\t{\n\t\tint num_lvls = params.num_levels;\n\n\t\tauto pyrA = sibr::buildVideoLaplacianPyramid(vidA, num_lvls, params);\n\t\tauto pyrB = sibr::buildVideoLaplacianPyramid(vidB, num_lvls, params);\n\t\tauto pyrM = sibr::buildVideoGaussianPyramid(mask_volume.volume, mask_volume.w, mask_volume.h, num_lvls, params);\n\n\t\tstd::vector<FullContribData> out(num_lvls);\n\n\t\tVideoLaplacianPyramid l_out;\n\t\tl_out.params = params;\n\t\tl_out.layers.resize(num_lvls);\n\n#pragma omp parallel for\n\t\tfor (int l = 0; l < num_lvls; ++l) {\n\n\t\t\tFullContribData data;\n\t\t\tContribData & data_s = data.scaled;\n\t\t\tContribData & data_ns = data.notScaled;\n\n\t\t\tsibr::PyramidLayer layer;\n\n\t\t\tlayer.w = pyrA.layers[l].w;\n\t\t\tlayer.h = pyrA.layers[l].h;\n\t\t\tlayer.l = pyrA.layers[l].l;\n\n\t\t\tcv::Mat A_lvl = pyrA.layers[l].volume;\n\t\t\tcv::Mat B_lvl = pyrB.layers[l].volume;\n\t\t\tcv::Mat M_lvl = pyrM.layers[l].volume;\n\n\t\t\tcv::Mat rev_Mask = 255 - M_lvl;\n\t\t\tsibr::PyramidLayer test(rev_Mask, pyrM.layers[l].w, pyrM.layers[l].h);\n\n\t\t\tcv::Mat normalized_mask = (1 / 255.0)*M_lvl;\n\t\t\tcv::Mat normalized_mask_r = (1 / 255.0)*test.volume;\n\n\t\t\tlayer.volume = A_lvl.mul(normalized_mask) + B_lvl.mul(normalized_mask_r);\n\t\t\tl_out.layers[l] = layer;\n\n\t\t\tPyramidLayer mask = pyrM.layers[l];\n\t\t\tPyramidLayer partA = pyrA.layers[l];\n\t\t\tPyramidLayer partB = pyrB.layers[l];\n\n\t\t\tdata_ns.contrib = layer;\n\t\t\tdata_ns.mask = mask;\n\t\t\tdata_ns.partA = partA;\n\t\t\tdata_ns.partB = partB;\n\n\t\t\tfor (int j = l - 1; j >= 0; --j) {\n\t\t\t\tlayer = upscale(pyrA.layers[j], layer, params);\n\t\t\t\tmask = upscale(pyrA.layers[j], mask, params);\n\t\t\t\tpartA = upscale(pyrA.layers[j], partA, params);\n\t\t\t\tpartB = upscale(pyrA.layers[j], partB, params);\n\t\t\t}\n\n\t\t\tdata_s.contrib = layer;\n\t\t\tdata_s.mask = mask;\n\t\t\tdata_s.partA = partA;\n\t\t\tdata_s.partB = partB;\n\n\t\t\tout[l] = data;\n\t\t}\n\n\t\tout[0].result = l_out.collapse();\n\n\t\treturn out;\n\t}\n\n\tvoid videoLaplacianBlendingDebug(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params)\n\t{\n\t\tint num_lvls = params.num_levels;\n\n\t\tauto pyrA = sibr::buildVideoLaplacianPyramid(vidA, num_lvls, params);\n\t\tauto pyrB = sibr::buildVideoLaplacianPyramid(vidB, num_lvls, params);\n\t\tauto pyrM = sibr::buildVideoGaussianPyramid(mask_volume.volume, mask_volume.w, mask_volume.h, num_lvls, params);\n\n\t\tVideoLaplacianPyramid out;\n\n\t\t//struct LayerData {\n\t\t//\tint i;\n\t\t//} data;\n\n\n\t\tfor (int l = 0; l < num_lvls; ++l) {\n\t\t\tsibr::PyramidLayer layer;\n\t\t\tlayer.w = pyrA.layers[l].w;\n\t\t\tlayer.h = pyrA.layers[l].h;\n\t\t\tlayer.l = pyrA.layers[l].l;\n\n\t\t\tcv::Mat A_lvl = pyrA.layers[l].volume;\n\t\t\tcv::Mat B_lvl = pyrB.layers[l].volume;\n\t\t\tcv::Mat M_lvl = pyrM.layers[l].volume;\n\n\t\t\tlayer.volume = A_lvl.mul(M_lvl) + B_lvl.mul(1.0f - M_lvl);\n\t\t\tout.layers.push_back(layer);\n\t\t}\n\n\t\tauto final_res = out.collapse();\n\n\t}\n\n\t//int TimeHistogram::getModeId() const {\n\t//\treturn  std::distance(bins.begin(), std::max_element(bins.begin(), bins.end()));\n\t//}\n\t\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/VideoUtils.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"Config.hpp\"\n#include <opencv2/opencv.hpp>\n#include <functional>\n#include \"FFmpegVideoEncoder.hpp\"\n\nnamespace sibr {\n\t\n\tSIBR_VIDEO_EXPORT std::vector<cv::Mat> cvSplitChannels(cv::Mat mat);\n\n\ttemplate<typename T, uint N>\n\tstruct CV_Assign {\n\t\tstatic void assignValue(uint c, const T & val, cv::Vec<T, N> & vec) {\n\t\t\tvec[c] = val;\n\t\t}\n\t};\n\ttemplate<typename T>\n\tstruct CV_Assign<T,1> {\n\t\tstatic void assignValue(uint c, const T & val, T & vec) {\n\t\t\tvec = val;\n\t\t}\n\t};\n\n\ttemplate<typename T, uint N>\n\tcv::Mat cvConvertMatTo(cv::Mat mat, double scale = 1.0) {\n\t\tif (mat.type() == getOpenCVtype<T, N>) {\n\t\t\treturn mat;\n\t\t}\n\n\t\tcv::Mat m, out;\n\t\tconst int nc = mat.channels();\n\t\tif (nc == N) {\n\t\t\tm = mat;\n\t\t} else  {\n\t\t\tstd::vector<cv::Mat> in_channels = cvSplitChannels(mat), out_channels(N);\n\t\t\tfor (int i = 0; i < N; ++i) {\n\t\t\t\t in_channels[i < nc ? i : (nc - 1)].copyTo(out_channels[i]);\n\t\t\t}\n\t\t\tcv::merge(out_channels, m);\n\t\t}\n\n\t\tm.convertTo(out, getOpenCVtype<T, N>, scale);\n\t\treturn out;\n\t}\n\n\ttemplate<typename T, uint N = 3>\n\tclass VideoVolume;\n\n\tusing Volume3f = VideoVolume<float, 3>;\n\tusing Volume1f = VideoVolume<float, 1>;\n\tusing Volume4u = VideoVolume<uchar, 4>;\n\tusing Volume3u = VideoVolume<uchar, 3>;\n\tusing Volume1u = VideoVolume<uchar, 1>;\n\n\t/**\n\t* \\addtogroup sibr_video\n\t* @{\n\t*/\n\ttemplate<typename T, uint N>\n\tclass VideoVolume {\n\tpublic:\n\t\tusing CVpixel = std::conditional_t<N == 1, T, cv::Vec<T, N>>;\n\t\tstatic const uint cv_type = getOpenCVtype<T, N>;\n\n\t\t// data\n\t\tint w = 0, h = 0, l = 0;\n\t\tcv::Mat_<T> mat;\n\n\t\t// medthods\n\t\tVideoVolume() {}\n\n\t\tVideoVolume(int _l, int _w, int _h) : l(_l), w(_w), h(_h) {\n\t\t\tmat = cv::Mat_<T>(l, w*h*N);\n\t\t}\n\n\t\tVideoVolume(int _l, int _w, int _h, double value) : l(_l), w(_w), h(_h) {\n\t\t\tmat = cv::Mat_<T>(l, w*h*N, static_cast<T>(value));\n\t\t}\n\n\t\tVideoVolume(cv::Mat other_volume, int _w, int _h) : w(_w), h(_h), l(other_volume.rows) {\n\t\t\tif (other_volume.channels() * other_volume.cols * other_volume.rows != l*w*h*N) {\n\t\t\t\tSIBR_ERR << l << \" \" << w << \" \" << h << \" \" << N << \" : \" << \n\t\t\t\t\tother_volume.channels()  << \" \" << other_volume.rows << \" \" << other_volume.cols << std::endl;\n\t\t\t}\n\t\t\tmat = other_volume;\n\t\t}\n\n\t\tVideoVolume(const VideoVolume & other) : l(other.l) , w(other.w), h(other.h) {\n\t\t\tmat = other.mat;\n\t\t}\n\n\t\ttemplate<typename U, uint M>\n\t\tvoid setupFrom(const VideoVolume<U, M> & other) {\n\t\t\t*this = VideoVolume(other.l, other.w, other.h);\n\t\t}\n\n\t\tVideoVolume clone() const {\n\t\t\treturn VideoVolume(mat.clone(), w, h);\n\t\t}\n\n\t\ttemplate<typename U, uint M = N>\n\t\tVideoVolume<U, M> convertTo() const {\n\t\t\tVideoVolume<U, M> out(l, w, h);\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\tcvConvertMatTo<U, M>(frame(f)).copyTo(out.frame(f));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tvoid toggle(double d = 255) {\n\t\t\tmat = d - mat;\n\t\t}\n\n\t\tvoid shift(double d) {\n\t\t\tmat += d;\n\t\t}\n\t\tvoid scale(double d) {\n\t\t\tmat *= d;\n\t\t}\n\t\ttemplate<typename U>\n\t\tvoid add(const VideoVolume<U,N> & other) {\n\t\t\tcv::add(mat, other.mat, mat, cv::noArray(), cv_type);\n\t\t}\n\n\t\ttemplate<typename U>\n\t\tvoid substract(const VideoVolume<U, N> & other) {\n\t\t\tcv::subtract(mat, other.mat, mat, cv::noArray(), cv_type);\n\t\t}\n\n\t\ttemplate<typename U, uint M>\n\t\tvoid multiply(const VideoVolume<U,M> & other) {\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tcv::multiply(cvConvertMatTo<float, N>(frame(t)), cvConvertMatTo<float, N>(other.frame(t)), frame(t));\n\t\t\t}\n\t\t}\n\n\t\tVideoVolume concat(const VideoVolume & other) const {\n\t\t\tVideoVolume out(l + other.l, w, h);\n\t\t\tmat.copyTo(out.mat.rowRange(0, l));\n\t\t\tother.mat.copyTo(out.mat.rowRange(l, l + other.l));\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume concatH(const VideoVolume & other) const {\n\t\t\tVideoVolume out(l, w + other.w, h);\n#pragma omp parallel for\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tcv::hconcat(std::vector<cv::Mat_<CVpixel>>{frame(t), other.frame(t)}, out.frame(t));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume applyMaskBinary(const Volume1u & mask) {\n\t\t\tVideoVolume out = VideoVolume(l, w, h, 0);\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tframe(t).copyTo(out.frame(t), mask.frame(t));\n\t\t\t}\n\t\t\treturn  out;\n\t\t}\t\n\n\t\tVideoVolume swapRBchannels() const {\n\t\t\tstatic_assert(N >= 3, \"need 3 channels\");\n\t\t\tVideoVolume out = VideoVolume(l, w, h, 0);\n\n#pragma omp parallel for\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tcv::cvtColor(frame(t), out.frame(t), cv::COLOR_BGR2RGB);\n\t\t\t}\n\t\t\treturn  out;\n\t\t}\n\n\t\ttemplate<uint M>\n\t\tVideoVolume applyMask(const VideoVolume<uchar,M> & mask) {\n\t\t\tVideoVolume out = VideoVolume(l, w, h);\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tcv::multiply(cvConvertMatTo<float, N>(frame(t)), cvConvertMatTo<float, N>(mask.frame(t)), out.frame(t), 1 / 255.0);\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\ttemplate<typename U, uint M>\n\t\tvoid applyMaskInPlace(const VideoVolume<U, M> & mask) {\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tcv::multiply(cvConvertMatTo<float, N>(frame(t)), cvConvertMatTo<float, N>(mask.frame(t)), frame(t), 1 / 255.0);\n\t\t\t}\n\t\t}\n\n\t\tVideoVolume cutFrames(int numBefore, int numAfter) {\n\t\t\tint diff = l - (numBefore + numAfter);\n\t\t\tassert(diff >= 0);\n\n\t\t\tVideoVolume out(diff, w, h);\n\t\t\tmat(cv::Rect(0, numBefore, w*h*N, diff)).copyTo(out.mat);\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume<uchar, 3> colorMapped(int colormap, double scaling = 1.0) {\n\t\t\t\n\t\t\tint custom_colormap_size;\n\t\t\t/* \n\t\t\t//twilight\n\t\t\tstatic const float r[] = { 0.88575015840754434f, 0.88378520195539056f, 0.88172231059285788f, 0.8795410528270573f, 0.87724880858965482f, 0.87485347508575972f, 0.87233134085124076f, 0.86970474853509816f, 0.86696015505333579f, 0.86408985081463996f, 0.86110245436899846f, 0.85798259245670372f, 0.85472593189256985f, 0.85133714570857189f, 0.84780710702577922f, 0.8441261828674842f, 0.84030420805957784f, 0.83634031809191178f, 0.83222705712934408f, 0.82796894316013536f, 0.82357429680252847f, 0.81904654677937527f, 0.81438982121143089f, 0.8095999819094809f, 0.80469164429814577f, 0.79967075421267997f, 0.79454305089231114f, 0.78931445564608915f, 0.78399101042764918f, 0.77857892008227592f, 0.77308416590170936f, 0.76751108504417864f, 0.76186907937980286f, 0.75616443584381976f, 0.75040346765406696f, 0.74459247771890169f, 0.73873771700494939f, 0.73284543645523459f, 0.72692177512829703f, 0.72097280665536778f, 0.71500403076252128f, 0.70902078134539304f, 0.7030297722540817f, 0.6970365443886174f, 0.69104641009309098f, 0.68506446154395928f, 0.67909554499882152f, 0.67314422559426212f, 0.66721479803752815f, 0.6613112930078745f, 0.65543692326454717f, 0.64959573004253479f, 0.6437910831099849f, 0.63802586828545982f, 0.6323027138710603f, 0.62662402022604591f, 0.62099193064817548f, 0.61540846411770478f, 0.60987543176093062f, 0.60439434200274855f, 0.5989665814482068f, 0.59359335696837223f, 0.58827579780555495f, 0.58301487036932409f, 0.5778116438998202f, 0.5726668948158774f, 0.56758117853861967f, 0.56255515357219343f, 0.55758940419605174f, 0.55268450589347129f, 0.54784098153018634f, 0.54305932424018233f, 0.53834015575176275f, 0.53368389147728401f, 0.529090861832473f, 0.52456151470593582f, 0.52009627392235558f, 0.5156955988596057f, 0.51135992541601927f, 0.50708969576451657f, 0.5028853540415561f, 0.49874733661356069f, 0.4946761847863938f, 0.49067224938561221f, 0.4867359599430568f, 0.4828677867260272f, 0.47906816236197386f, 0.47533752394906287f, 0.47167629518877091f, 0.46808490970531597f, 0.46456376716303932f, 0.46111326647023881f, 0.45773377230160567f, 0.45442563977552913f, 0.45118918687617743f, 0.44802470933589172f, 0.44493246854215379f, 0.44191271766696399f, 0.43896563958048396f, 0.43609138958356369f, 0.43329008867358393f, 0.43056179073057571f, 0.42790652284925834f, 0.42532423665011354f, 0.42281485675772662f, 0.42037822361396326f, 0.41801414079233629f, 0.4157223260454232f, 0.41350245743314729f, 0.41135414697304568f, 0.4092768899914751f, 0.40727018694219069f, 0.40533343789303178f, 0.40346600333905397f, 0.40166714010896104f, 0.39993606933454834f, 0.3982719152586337f, 0.39667374905665609f, 0.39514058808207631f, 0.39367135736822567f, 0.39226494876209317f, 0.39092017571994903f, 0.38963580160340855f, 0.38841053300842432f, 0.38724301459330251f, 0.38613184178892102f, 0.38507556793651387f, 0.38407269378943537f, 0.38312168084402748f, 0.38222094988570376f, 0.38136887930454161f, 0.38056380696565623f, 0.37980403744848751f, 0.37908789283110761f, 0.378413635091359f, 0.37777949753513729f, 0.37718371844251231f, 0.37662448930806297f, 0.37610001286385814f, 0.37560846919442398f, 0.37514802505380473f, 0.37471686019302231f, 0.37431313199312338f, 0.37393499330475782f, 0.3735806215098284f, 0.37324816143326384f, 0.37293578646665032f, 0.37264166757849604f, 0.37236397858465387f, 0.37210089702443822f, 0.3718506155898596f, 0.37161133234400479f, 0.37138124223736607f, 0.37115856636209105f, 0.37094151551337329f, 0.37072833279422668f, 0.37051738634484427f, 0.37030682071842685f, 0.37009487130772695f, 0.36987980329025361f, 0.36965987626565955f, 0.36943334591276228f, 0.36919847837592484f, 0.36895355306596778f, 0.36869682231895268f, 0.36842655638020444f, 0.36814101479899719f, 0.36783843696531082f, 0.36751707094367697f, 0.36717513650699446f, 0.36681085540107988f, 0.36642243251550632f, 0.36600853966739794f, 0.36556698373538982f, 0.36509579845886808f, 0.36459308890125008f, 0.36405693022088509f, 0.36348537610385145f, 0.36287643560041027f, 0.36222809558295926f, 0.36153829010998356f, 0.36080493826624654f, 0.36002681809096376f, 0.35920088560930186f, 0.35832489966617809f, 0.35739663292915563f, 0.35641381143126327f, 0.35537415306906722f, 0.35427534960663759f, 0.35311574421123737f, 0.35189248608873791f, 0.35060304441931012f, 0.34924513554955644f, 0.34781653238777782f, 0.34631507175793091f, 0.34473901574536375f, 0.34308600291572294f, 0.34135411074506483f, 0.33954168752669694f, 0.33764732090671112f, 0.33566978565015315f, 0.33360804901486002f, 0.33146154891145124f, 0.32923005203231409f, 0.3269137124539796f, 0.32451307931207785f, 0.32202882276069322f, 0.31946262395497965f, 0.31681648089023501f, 0.31409278414755532f, 0.31129434479712365f, 0.30842444457210105f, 0.30548675819945936f, 0.30248536364574252f, 0.29942483960214772f, 0.29631000388905288f, 0.29314593096985248f, 0.28993792445176608f, 0.28669151388283165f, 0.28341239797185225f, 0.28010638576975472f, 0.27677939615815589f, 0.27343739342450812f, 0.27008637749114051f, 0.26673233211995284f, 0.26338121807151404f, 0.26003895187439957f, 0.25671191651083902f, 0.25340685873736807f, 0.25012845306199383f, 0.24688226237958999f, 0.24367372557466271f, 0.24050813332295939f, 0.23739062429054825f, 0.23433055727563878f, 0.23132955273021344f, 0.2283917709422868f, 0.22552164337737857f, 0.22272706739121817f, 0.22001251100779617f, 0.21737845072382705f, 0.21482843531473683f, 0.21237411048541005f, 0.21001214221188125f, 0.2077442377448806f, 0.20558051999470117f, 0.20352007949514977f, 0.20156133764129841f, 0.19971571438603364f, 0.19794834061899208f, 0.1960826032659409f, 0.19410351363791453f, 0.19199449184606268f, 0.18975853639094634f, 0.18739228342697645f, 0.18488035509396164f, 0.18774482037046955f, 0.19049578401722037f, 0.1931548636579131f, 0.19571853588267552f, 0.19819343656336558f, 0.20058760685133747f, 0.20290365333558247f, 0.20531725273301316f, 0.20785704662965598f, 0.21052882914958676f, 0.2133313859647627f, 0.21625279838647882f, 0.21930503925136402f, 0.22247308588973624f, 0.2257539681670791f, 0.22915620278592841f, 0.23266299920501882f, 0.23627495835774248f, 0.23999586188690308f, 0.24381149720247919f, 0.24772092990501099f, 0.25172899728289466f, 0.25582135547481771f, 0.25999463887892144f, 0.26425512207060942f, 0.26859095948172862f, 0.27299701518897301f, 0.27747150809142801f, 0.28201746297366942f, 0.28662309235899847f, 0.29128515387578635f, 0.2960004726065818f, 0.30077276812918691f, 0.30559226007249934f, 0.31045520848595526f, 0.31535870009205808f, 0.32029986557994061f, 0.32527888860401261f, 0.33029174471181438f, 0.33533353224455448f, 0.34040164359597463f, 0.34549355713871799f, 0.35060678246032478f, 0.35573889947341125f, 0.36088752387578377f, 0.36605031412464006f, 0.37122508431309342f, 0.3764103053221462f, 0.38160247377467543f, 0.38679939079544168f, 0.39199887556812907f, 0.39719876876325577f, 0.40239692379737496f, 0.40759120392688708f, 0.41277985630360303f, 0.41796105205173684f, 0.42313214269556043f, 0.42829101315789753f, 0.4334355841041439f, 0.43856378187931538f, 0.44367358645071275f, 0.44876299173174822f, 0.45383005086999889f, 0.45887288947308297f, 0.46389102840284874f, 0.46888111384598413f, 0.473841437035254f, 0.47877034239726296f, 0.48366628618847957f, 0.48852847371852987f, 0.49335504375145617f, 0.49814435462074153f, 0.50289524974970612f, 0.50760681181053691f, 0.51227835105321762f, 0.51690848800544464f, 0.52149652863229956f, 0.52604189625477482f, 0.53054420489856446f, 0.5350027976174474f, 0.53941736649199057f, 0.54378771313608565f, 0.54811370033467621f, 0.55239521572711914f, 0.55663229034969341f, 0.56082499039117173f, 0.56497343529017696f, 0.56907784784011428f, 0.57313845754107873f, 0.57715550812992045f, 0.58112932761586555f, 0.58506024396466882f, 0.58894861935544707f, 0.59279480536520257f, 0.59659918109122367f, 0.60036213010411577f, 0.60408401696732739f, 0.60776523994818654f, 0.6114062072731884f, 0.61500723236391375f, 0.61856865258877192f, 0.62209079821082613f, 0.62557416500434959f, 0.62901892016985872f, 0.63242534854210275f, 0.6357937104834237f, 0.6391243387840212f, 0.642417577481186f, 0.64567349382645434f, 0.64889230169458245f, 0.65207417290277303f, 0.65521932609327127f, 0.6583280801134499f, 0.66140037532601781f, 0.66443632469878844f, 0.66743603766369131f, 0.67039959547676198f, 0.67332725564817331f, 0.67621897924409746f, 0.67907474028157344f, 0.68189457150944521f, 0.68467850942494535f, 0.68742656435169625f, 0.6901389321505248f, 0.69281544846764931f, 0.69545608346891119f, 0.6980608153581771f, 0.70062962477242097f, 0.70316249458814151f, 0.70565951122610093f, 0.70812059568420482f, 0.7105456546582587f, 0.71293466839773467f, 0.71528760614847287f, 0.71760444908133847f, 0.71988521490549851f, 0.7221299918421461f, 0.72433865647781592f, 0.72651122900227549f, 0.72864773856716547f, 0.73074820754845171f, 0.73281270506268747f, 0.73484133598564938f, 0.73683422173585866f, 0.73879140024599266f, 0.74071301619506091f, 0.7425992159973317f, 0.74445018676570673f, 0.74626615789163442f, 0.74804739275559562f, 0.74979420547170472f, 0.75150685045891663f, 0.75318566369046569f, 0.75483105066959544f, 0.75644341577140706f, 0.75802325538455839f, 0.75957111105340058f, 0.7610876378057071f, 0.76257333554052609f, 0.76402885609288662f, 0.76545492593330511f, 0.76685228950643891f, 0.76822176599735303f, 0.7695642334401418f, 0.77088091962302474f, 0.77217257229605551f, 0.77344021829889886f, 0.77468494746063199f, 0.77590790730685699f, 0.7771103295521099f, 0.77829345807633121f, 0.77945862731506643f, 0.78060774749483774f, 0.78174180478981836f, 0.78286225264440912f, 0.78397060836414478f, 0.78506845019606841f, 0.78615737132332963f, 0.78723904108188347f, 0.78831514045623963f, 0.78938737766251943f, 0.79045776847727878f, 0.79152832843475607f, 0.79260034304237448f, 0.79367559698664958f, 0.79475585972654039f, 0.79584292379583765f, 0.79693854719951607f, 0.79804447815136637f, 0.7991624518501963f, 0.80029415389753977f, 0.80144124292560048f, 0.80260531146112946f, 0.80378792531077625f, 0.80499054790810298f, 0.80621460526927058f, 0.8074614045096935f, 0.80873219170089694f, 0.81002809466520687f, 0.81135014011763329f, 0.81269922039881493f, 0.81407611046993344f, 0.81548146627279483f, 0.81691575775055891f, 0.81837931164498223f, 0.81987230650455289f, 0.8213947205565636f, 0.82294635110428427f, 0.8245268129450285f, 0.82613549710580259f, 0.8277716072353446f, 0.82943407816481474f, 0.83112163529096306f, 0.83283277185777982f, 0.8345656905566583f, 0.83631898844737929f, 0.83809123476131964f, 0.83987839884120874f, 0.84167750766845151f, 0.84348529222933699f, 0.84529810731955113f, 0.84711195507965098f, 0.84892245563117641f, 0.85072697023178789f, 0.85251907207708444f, 0.85429219611470464f, 0.85604022314725403f, 0.85775662943504905f, 0.8594346370300241f, 0.86107117027565516f, 0.86265601051127572f, 0.86418343723941027f, 0.86564934325605325f, 0.86705314907048503f, 0.86839954695818633f, 0.86969131502613806f, 0.87093846717297507f, 0.87215331978454325f, 0.87335171360916275f, 0.87453793320260187f, 0.87571458709961403f, 0.87687848451614692f, 0.87802298436649007f, 0.87913244240792765f, 0.88019293315695812f, 0.88119169871341951f, 0.88211542489401606f, 0.88295168595448525f, 0.88369127145898041f, 0.88432713054113543f, 0.88485138159908572f, 0.88525897972630474f, 0.88554714811952384f, 0.88571155122845646f };\n\t\t\tstatic const float g[] = { 0.85000924943067835f, 0.85072940540310626f, 0.85127594077653468f, 0.85165675407495722f, 0.85187028338870274f, 0.85191526123023187f, 0.85180165478080894f, 0.85152403004797894f, 0.8510896085314068f, 0.85050391167507788f, 0.84976754857001258f, 0.84888934810281835f, 0.84787488124672816f, 0.84672735796116472f, 0.8454546229209523f, 0.84406482711037389f, 0.8425605950855084f, 0.84094796518951942f, 0.83923490627754482f, 0.83742600751395202f, 0.83552487764795436f, 0.8335364929949034f, 0.83146558694197847f, 0.82931896673505456f, 0.82709838780560663f, 0.82480781812080928f, 0.82245116226304615f, 0.82003213188702007f, 0.81755426400533426f, 0.81502089378742548f, 0.81243524735466011f, 0.8098007598713145f, 0.80711949387647486f, 0.80439408733477935f, 0.80162699008965321f, 0.79882047719583249f, 0.79597665735031009f, 0.79309746468844067f, 0.7901846863592763f, 0.78723995923452639f, 0.78426487091581187f, 0.78126088716070907f, 0.77822904973358131f, 0.77517050008066057f, 0.77208629460678091f, 0.7689774029354699f, 0.76584472131395898f, 0.76268908733890484f, 0.7595112803730375f, 0.75631202708719025f, 0.75309208756768431f, 0.74985201221941766f, 0.7465923800833657f, 0.74331376714033193f, 0.74001672160131404f, 0.73670175403699445f, 0.73336934798923203f, 0.73001995232739691f, 0.72665398759758293f, 0.7232718614323369f, 0.71987394892246725f, 0.7164606049658685f, 0.71303214646458135f, 0.70958887676997473f, 0.70613106157153982f, 0.7026589535425779f, 0.69917279302646274f, 0.69567278381629649f, 0.69215911458254054f, 0.68863194515166382f, 0.68509142218509878f, 0.68153767253065878f, 0.67797081129095405f, 0.67439093705212727f, 0.67079812302806219f, 0.66719242996142225f, 0.66357391434030388f, 0.65994260812897998f, 0.65629853981831865f, 0.65264172403146448f, 0.64897216734095264f, 0.6452898684900934f, 0.64159484119504429f, 0.63788704858847078f, 0.63416646251100506f, 0.6304330455306234f, 0.62668676251860134f, 0.62292757283835809f, 0.61915543242884641f, 0.61537028695790286f, 0.61157208822864151f, 0.607760777169989f, 0.60393630046586455f, 0.60009859503858665f, 0.59624762051353541f, 0.59238331452146575f, 0.5885055998308617f, 0.58461441100175571f, 0.58070969241098491f, 0.57679137998186081f, 0.57285941625606673f, 0.56891374572457176f, 0.5649543060909209f, 0.56098104959950301f, 0.55699392126996583f, 0.55299287158108168f, 0.54897785421888889f, 0.54494882715350401f, 0.54090574771098476f, 0.53684857765005933f, 0.53277730177130322f, 0.52869188011057411f, 0.52459228174983119f, 0.52047847653840029f, 0.51635044969688759f, 0.51220818143218516f, 0.50805166539276136f, 0.50388089053847973f, 0.49969585326377758f, 0.49549655777451179f, 0.49128300332899261f, 0.48705520251223039f, 0.48281316715123496f, 0.47855691131792805f, 0.47428645933635388f, 0.4700018340988123f, 0.46570306719930193f, 0.46139018782416635f, 0.45706323581407199f, 0.45272225034283325f, 0.44836727669277859f, 0.44399837208633719f, 0.43961558821222629f, 0.43521897612544935f, 0.43080859411413064f, 0.4263845142616835f, 0.42194680223454828f, 0.41749553747893614f, 0.41303079952477062f, 0.40855267638072096f, 0.4040612609993941f, 0.3995566498711684f, 0.39503894828283309f, 0.39050827529375831f, 0.38596474386057539f, 0.38140848555753937f, 0.37683963835219841f, 0.37225835004836849f, 0.36766477862108266f, 0.36305909736982378f, 0.35844148285875221f, 0.3538121372967869f, 0.34917126878479027f, 0.34451911410230168f, 0.33985591488818123f, 0.33518193808489577f, 0.33049741244307851f, 0.32580269697872455f, 0.3210981375964933f, 0.31638410101153364f, 0.31166098762951971f, 0.30692923551862339f, 0.30218932176507068f, 0.29744175492366276f, 0.29268709856150099f, 0.28792596437778462f, 0.28315901221182987f, 0.27838697181297761f, 0.27361063317090978f, 0.26883085667326956f, 0.26404857724525643f, 0.25926481158628106f, 0.25448043878086224f, 0.24969683475296395f, 0.24491536803550484f, 0.24013747024823828f, 0.23536470386204195f, 0.23059876218396419f, 0.22584149293287031f, 0.22109488427338303f, 0.21636111429594002f, 0.21164251793458128f, 0.20694122817889948f, 0.20226037920758122f, 0.197602942459778f, 0.19297208197842461f, 0.18837119869242164f, 0.18380392577704466f, 0.17927413271618647f, 0.17478570377561287f, 0.17034320478524959f, 0.16595129984720861f, 0.16161477763045118f, 0.15733863511152979f, 0.15312802296627787f, 0.14898820589826409f, 0.14492465359918028f, 0.1409427920655632f, 0.13704801896718169f, 0.13324562282438077f, 0.12954074251271822f, 0.12593818301005921f, 0.12244245263391232f, 0.11905764321981127f, 0.1157873496841953f, 0.11263459791730848f, 0.10960114111258401f, 0.10668879882392659f, 0.10389861387653518f, 0.10123077676403242f, 0.098684771934052201f, 0.096259385340577736f, 0.093952764840823738f, 0.091761187397303601f, 0.089682253716750038f, 0.087713250960463951f, 0.085850656889620708f, 0.08409078829085731f, 0.082429873848480689f, 0.080864153365499375f, 0.079389994802261526f, 0.078003941033788216f, 0.076702800237496066f, 0.075483675584275545f, 0.074344018028546205f, 0.073281657939897077f, 0.072294781043362205f, 0.071380106242082242f, 0.070533582926851829f, 0.069758206429106989f, 0.069053639449204451f, 0.068419855150922693f, 0.067857103814855602f, 0.067365888050555517f, 0.066935599661639394f, 0.066576186939090592f, 0.06628997924139618f, 0.066078173119395595f, 0.065933790675651943f, 0.065857918918907604f, 0.065859661233562045f, 0.065940385613778491f, 0.066085024661758446f, 0.066308573918947178f, 0.06661453200418091f, 0.066990462397868739f, 0.067444179612424215f, 0.067983271026200248f, 0.068592710553704722f, 0.069314066071660657f, 0.070321227242423623f, 0.071608304856891569f, 0.073182830649273306f, 0.075019861862143766f, 0.077102096899588329f, 0.079425730279723883f, 0.077251588468039312f, 0.075311278416787641f, 0.073606819040117955f, 0.072157781039602742f, 0.070974625252738788f, 0.070064576149984209f, 0.069435248580458964f, 0.068919592266397572f, 0.068484398797025281f, 0.06812195249816172f, 0.067830148426026665f, 0.067616330270516389f, 0.067465786362940039f, 0.067388214053092838f, 0.067382132300147474f, 0.067434730871152565f, 0.067557104388479783f, 0.06774359820987802f, 0.067985029964779953f, 0.068289851529011875f, 0.068653337909486523f, 0.069064630826035506f, 0.06953231029187984f, 0.070053855603861875f, 0.070616595622995437f, 0.071226716277922458f, 0.071883555446163511f, 0.072582969899254779f, 0.073315693214040967f, 0.074088460826808866f, 0.074899049847466703f, 0.075745336000958424f, 0.076617824336164764f, 0.077521963107537312f, 0.078456871676182177f, 0.079420997315243186f, 0.080412994737554838f, 0.081428390076546092f, 0.08246763389003825f, 0.083532434119003962f, 0.084622236191702671f, 0.085736654965126335f, 0.08687555176033529f, 0.088038974350243354f, 0.089227194362745205f, 0.090440685427697898f, 0.091679997480262732f, 0.092945198093777909f, 0.094238731263712183f, 0.09556181960083443f, 0.09691583650296684f, 0.098302320968278623f, 0.099722930314950553f, 0.10117945586419633f, 0.1026734006932461f, 0.10420644885760968f, 0.10578120994917611f, 0.1073997763055258f, 0.1090642347484701f, 0.11077667828375456f, 0.11253912421257944f, 0.11435355574622549f, 0.11622183788331528f, 0.11814571137706886f, 0.12012561256850712f, 0.12216445576414045f, 0.12426354237989065f, 0.12642401401409453f, 0.12864679022013889f, 0.13093210934893723f, 0.13328091630401023f, 0.13569380302451714f, 0.13817086581280427f, 0.14071192654913128f, 0.14331656120063752f, 0.14598463068714407f, 0.14871544765633712f, 0.15150818660835483f, 0.15436183633886777f, 0.15727540775107324f, 0.16024769309971934f, 0.16327738551419116f, 0.1663630904279047f, 0.16950338809328983f, 0.17269677158182117f, 0.17594170887918095f, 0.17923664950367169f, 0.18258004462335425f, 0.18597036007065024f, 0.18940601489760422f, 0.19288548904692518f, 0.19640737049066315f, 0.19997020971775276f, 0.20357251410079796f, 0.207212956082026f, 0.21089030138947745f, 0.21460331490206347f, 0.21835070166659282f, 0.22213124697023234f, 0.22594402043981826f, 0.22978799249179921f, 0.2336621873300741f, 0.23756535071152696f, 0.24149689191922535f, 0.24545598775548677f, 0.24944185818822678f, 0.25345365461983138f, 0.257490519876798f, 0.26155203161615281f, 0.26563755336209077f, 0.26974650525236699f, 0.27387826652410152f, 0.27803210957665631f, 0.28220778870555907f, 0.28640483614256179f, 0.29062280081258873f, 0.29486126309253047f, 0.29911962764489264f, 0.30339762792450425f, 0.30769497879760166f, 0.31201133280550686f, 0.31634634821222207f, 0.32069970535138104f, 0.32507091815606004f, 0.32945984647042675f, 0.33386622163232865f, 0.33828976326048621f, 0.34273019305341756f, 0.34718723719597999f, 0.35166052978120937f, 0.35614985523380299f, 0.36065500290840113f, 0.36517570519856757f, 0.36971170225223449f, 0.37426272710686193f, 0.37882848839337313f, 0.38340864508963057f, 0.38800301593162145f, 0.3926113126792577f, 0.39723324476747235f, 0.401868526884681f, 0.4065168468778026f, 0.41117787004519513f, 0.41585125850290111f, 0.42053672992315327f, 0.4252339389526239f, 0.42994254036133867f, 0.43466217184617112f, 0.43939245044973502f, 0.44413297780351974f, 0.44888333481548809f, 0.45364314496866825f, 0.45841199172949604f, 0.46318942799460555f, 0.46797501437948458f, 0.4727682731566229f, 0.47756871222057079f, 0.48237579130289127f, 0.48718906673415824f, 0.49200802533379656f, 0.49683212909727231f, 0.5016608471009063f, 0.50649362371287909f, 0.5113298901696085f, 0.51616892643469103f, 0.5210102658711383f, 0.52585332093451564f, 0.53069749384776732f, 0.53554217882461186f, 0.54038674910561235f, 0.54523059488426595f, 0.55007308413977274f, 0.55491335744890613f, 0.55975098052594863f, 0.56458533111166875f, 0.56941578326710418f, 0.5742417003617839f, 0.5790624629815756f, 0.58387743744557208f, 0.58868600173562435f, 0.5934875421745599f, 0.59828134277062461f, 0.60306670593147205f, 0.60784322087037024f, 0.61261029334072192f, 0.61736734400220705f, 0.62211378808451145f, 0.62684905679296699f, 0.63157258225089552f, 0.63628379372029187f, 0.64098213306749863f, 0.64566703459218766f, 0.65033793748103852f, 0.65499426549472628f, 0.65963545027564163f, 0.66426089585282289f, 0.6688700095398864f, 0.67346216702194517f, 0.67803672673971815f, 0.68259301546243389f, 0.68713033714618876f, 0.69164794791482131f, 0.69614505508308089f, 0.70062083014783982f, 0.70507438189635097f, 0.70950474978787481f, 0.7139109141951604f, 0.71829177331290062f, 0.72264614312088882f, 0.72697275518238258f, 0.73127023324078089f, 0.7355371221572935f, 0.73977184647638616f, 0.74397271817459876f, 0.7481379479992134f, 0.75226548952875261f, 0.75635314860808633f, 0.76039907199779677f, 0.76440101200982946f, 0.76835660399870176f, 0.77226338601044719f, 0.77611880236047159f, 0.77992021407650147f, 0.78366457342383888f, 0.78734936133548439f, 0.79097196777091994f, 0.79452963601550608f, 0.79801963142713928f, 0.8014392309950078f, 0.80478517909812231f, 0.80805523804261525f, 0.81124644224653542f, 0.81435544067514909f, 0.81737804041911244f, 0.82030875512181523f, 0.82314158859569164f, 0.82586857889438514f, 0.82848052823709672f, 0.83096715251272624f, 0.83331972948645461f, 0.8355302318472394f, 0.83759238071186537f, 0.83950165618540074f, 0.84125554884475906f, 0.84285224824778615f, 0.84429066717717349f, 0.84557007254559347f, 0.84668970275699273f, 0.84764891761519268f, 0.84844741572055415f, 0.84908426422893801f, 0.84955892810989209f, 0.84987174283631584f, 0.85002186115856315f };\n\t\t\tstatic const float b[] = { 0.8879736506427196f, 0.88723222096949894f, 0.88638056925514819f, 0.8854143767924102f, 0.88434120381311432f, 0.88316926967613829f, 0.88189704355001619f, 0.88053883390003362f, 0.87909766977173343f, 0.87757925784892632f, 0.87599242923439569f, 0.87434038553446281f, 0.8726282980930582f, 0.87086081657350445f, 0.86904036783694438f, 0.86716973322690072f, 0.865250882410458f, 0.86328528001070159f, 0.86127563500427884f, 0.85922399451306786f, 0.85713191328514948f, 0.85500206287010105f, 0.85283759062147024f, 0.85064441601050367f, 0.84842449296974021f, 0.84618210029578533f, 0.84392184786827984f, 0.8416486380471222f, 0.83936747464036732f, 0.8370834463093898f, 0.83480172950579679f, 0.83252816638059668f, 0.830266486168872f, 0.82802138994719998f, 0.82579737851082424f, 0.82359867586156521f, 0.82142922780433014f, 0.81929263384230377f, 0.81719217466726379f, 0.81513073920879264f, 0.81311116559949914f, 0.81113591855117928f, 0.80920618848056969f, 0.80732335380063447f, 0.80548841690679074f, 0.80370206267176914f, 0.8019646617300199f, 0.80027628545809526f, 0.79863674654537764f, 0.7970456043491897f, 0.79550271129031047f, 0.79400674021499107f, 0.79255653201306053f, 0.79115100459573173f, 0.78978892762640429f, 0.78846901316334561f, 0.78718994624696581f, 0.78595022706750484f, 0.78474835732694714f, 0.78358295593535587f, 0.78245259899346642f, 0.78135588237640097f, 0.78029141405636515f, 0.77925781820476592f, 0.77825345121025524f, 0.77727702680911992f, 0.77632748534275298f, 0.77540359142309845f, 0.7745041337932782f, 0.7736279426902245f, 0.77277386473440868f, 0.77194079697835083f, 0.77112734439057717f, 0.7703325054879735f, 0.76955552292313134f, 0.76879541714230948f, 0.76805119403344102f, 0.76732191489596169f, 0.76660663780645333f, 0.76590445660835849f, 0.76521446718174913f, 0.76453578734180083f, 0.76386719002130909f, 0.76320812763163837f, 0.76255780085924041f, 0.76191537149895305f, 0.76128000375662419f, 0.76065085571817748f, 0.76002709227883047f, 0.75940789891092741f, 0.75879242623025811f, 0.75817986436807139f, 0.75756936901859162f, 0.75696013660606487f, 0.75635120643246645f, 0.75574176474107924f, 0.7551311041857901f, 0.75451838884410671f, 0.75390276208285945f, 0.7532834105961016f, 0.75265946532566674f, 0.75203008099312696f, 0.75139443521914839f, 0.75075164989005116f, 0.75010086988227642f, 0.7494412559451894f, 0.74877193167001121f, 0.74809204459000522f, 0.74740073297543086f, 0.74669712855065784f, 0.74598030635707824f, 0.74524942637581271f, 0.74450365836708132f, 0.74374215223567086f, 0.7429640345324835f, 0.74216844571317986f, 0.74135450918099721f, 0.74052138580516735f, 0.73966820211715711f, 0.738794102296364f, 0.73789824784475078f, 0.73697977133881254f, 0.73603782546932739f, 0.73507157641157261f, 0.73408016787854391f, 0.7330627749243106f, 0.73201854033690505f, 0.73094665432902683f, 0.72984626791353258f, 0.72871656144003782f, 0.72755671317141346f, 0.72636587045135315f, 0.72514323778761092f, 0.72388798691323131f, 0.72259931993061044f, 0.72127639993530235f, 0.71991841524475775f, 0.71852454736176108f, 0.71709396919920232f, 0.71562585091587549f, 0.7141193695725726f, 0.71257368516500463f, 0.71098796522377461f, 0.70936134293478448f, 0.70769297607310577f, 0.70598200974806036f, 0.70422755780589941f, 0.7024287314570723f, 0.70058463496520773f, 0.69869434615073722f, 0.69675695810256544f, 0.69477149919380887f, 0.69273703471928827f, 0.69065253586464992f, 0.68851703379505125f, 0.68632948169606767f, 0.68408888788857214f, 0.68179411684486679f, 0.67944405399056851f, 0.67703755438090574f, 0.67457344743419545f, 0.67205052849120617f, 0.66946754331614522f, 0.66682322089824264f, 0.66411625298236909f, 0.66134526910944602f, 0.65850888806972308f, 0.65560566838453704f, 0.65263411711618635f, 0.64959272297892245f, 0.64647991652908243f, 0.64329409140765537f, 0.64003361803368586f, 0.63669675187488584f, 0.63328173520055586f, 0.62978680155026101f, 0.62621013451953023f, 0.62254988622392882f, 0.61880417410823019f, 0.61497112346096128f, 0.61104880679640927f, 0.60703532172064711f, 0.60292845431916875f, 0.5987265295935138f, 0.59442768517501066f, 0.59003011251063131f, 0.5855320765920552f, 0.58093191431832802f, 0.57622809660668717f, 0.57141871523555288f, 0.56650284911216653f, 0.56147964703993225f, 0.55634837474163779f, 0.55110853452703257f, 0.5457599924248665f, 0.54030245920406539f, 0.53473704282067103f, 0.52906500940336754f, 0.52328797535085236f, 0.51740807573979475f, 0.51142807215168951f, 0.50535164796654897f, 0.49918274588431072f, 0.49292595612342666f, 0.48658646495697461f, 0.48017007211645196f, 0.47368494725726878f, 0.46713728801395243f, 0.46053414662739794f, 0.45388335612058467f, 0.44719313715161618f, 0.44047194882050544f, 0.43372849999361113f, 0.42697404043749887f, 0.42021619665853854f, 0.41346259134143476f, 0.40672178082365834f, 0.40000214725256295f, 0.39331182532243375f, 0.38665868550105914f, 0.38005028528138707f, 0.37349382846504675f, 0.36699616136347685f, 0.36056376228111864f, 0.35420276066240958f, 0.34791888996380105f, 0.3417175669546984f, 0.33560648984600089f, 0.3295945757321303f, 0.32368100685760637f, 0.31786993834254956f, 0.31216524050888372f, 0.30657054493678321f, 0.30108922184065873f, 0.29574009929867601f, 0.29051361067988485f, 0.28541074411068496f, 0.28043398847505197f, 0.27559714652053702f, 0.27090279994325861f, 0.26634209349669508f, 0.26191675992376573f, 0.25765165093569542f, 0.2535289048041211f, 0.24954644291943817f, 0.24572497420147632f, 0.24205576625191821f, 0.23852974228695395f, 0.23517094067076993f, 0.23194647381302336f, 0.22874673279569585f, 0.22558727307410353f, 0.22243385243433622f, 0.2193005075652994f, 0.21618875376309582f, 0.21307651648984993f, 0.21387448578597812f, 0.2146562337112265f, 0.21542362939081539f, 0.21617499187076789f, 0.21690975060032436f, 0.21762721310371608f, 0.21833167885096033f, 0.21911516689288835f, 0.22000133917653536f, 0.22098759107715404f, 0.22207043213024291f, 0.22324568672294431f, 0.22451023616807558f, 0.22585960379408354f, 0.22728984778098055f, 0.22879681433956656f, 0.23037617493752832f, 0.23202360805926608f, 0.23373434258507808f, 0.23550427698321885f, 0.2373288009471749f, 0.23920260612763083f, 0.24112190491594204f, 0.24308218808684579f, 0.24507758869355967f, 0.24710443563450618f, 0.24915847093232929f, 0.25123493995942769f, 0.25332800295084507f, 0.25543478673717029f, 0.25755101595750435f, 0.25967245030364566f, 0.26179294097819672f, 0.26391006692119662f, 0.2660200572779356f, 0.26811904076941961f, 0.27020322893039511f, 0.27226772884656186f, 0.27430929404579435f, 0.27632534356790039f, 0.27831254595259397f, 0.28026769921081435f, 0.28218770540182386f, 0.2840695897279818f, 0.28591050458531014f, 0.2877077458811747f, 0.28945865397633169f, 0.29116024157313919f, 0.29281107506269488f, 0.29440901248173756f, 0.29595212005509081f, 0.29743856476285779f, 0.29886674369733968f, 0.30023519507728602f, 0.30154226437468967f, 0.30278652039631843f, 0.3039675809469457f, 0.30508479060294547f, 0.30613767928289148f, 0.30712600062348083f, 0.30804973095465449f, 0.30890905921943196f, 0.30970441249844921f, 0.31043636979038808f, 0.31110343446582983f, 0.31170911458932665f, 0.31225470169927194f, 0.31274172735821959f, 0.31317188565991266f, 0.31354553695453014f, 0.31386561956734976f, 0.314135190862664f, 0.31435662153833671f, 0.31453200120082569f, 0.3146630922831542f, 0.31475407592280041f, 0.31480767954534428f, 0.31482653406646727f, 0.31481299789187128f, 0.31477085207396532f, 0.31470295028655965f, 0.31461204226295625f, 0.31450102990914708f, 0.31437291554615371f, 0.31423043195101424f, 0.31407639883970623f, 0.3139136046337036f, 0.31374440956796529f, 0.31357126868520002f, 0.31339704333572083f, 0.31322399394183942f, 0.31305401163732732f, 0.31288922211590126f, 0.31273234839304942f, 0.31258523031121233f, 0.31244934410414688f, 0.31232652641170694f, 0.31221903291870201f, 0.31212881396435238f, 0.31205680685765741f, 0.31200463838728931f, 0.31197383273627388f, 0.31196698314912269f, 0.31198447195645718f, 0.31202765974624452f, 0.31209793953300591f, 0.31219689612063978f, 0.31232631707560987f, 0.31248673753935263f, 0.31267941819570189f, 0.31290560605819168f, 0.3131666792687211f, 0.3134643447952643f, 0.31379912926498488f, 0.31417223403606975f, 0.31458483752056837f, 0.31503813956872212f, 0.31553372323982209f, 0.3160724937230589f, 0.31665545668946665f, 0.31728380489244951f, 0.31795870784057567f, 0.31868137622277692f, 0.31945332332898302f, 0.3202754315314667f, 0.32114884306985791f, 0.32207478855218091f, 0.32305449047765694f, 0.32408913679491225f, 0.32518014084085567f, 0.32632861885644465f, 0.32753574162788762f, 0.3288027427038317f, 0.3301308728723546f, 0.33152138620958932f, 0.33297555200245399f, 0.33449469983585844f, 0.33607995965691828f, 0.3377325942005665f, 0.33945384341064017f, 0.3412449533046818f, 0.34310715173410822f, 0.34504169470809071f, 0.34704978520758401f, 0.34913260148542435f, 0.35129130890802607f, 0.35352709245374592f, 0.35584108091122535f, 0.35823439142300639f, 0.36070813602540136f, 0.36326337558360278f, 0.36590112443835765f, 0.36862236642234769f, 0.3714280448394211f, 0.37431909037543515f, 0.37729635531096678f, 0.380360657784311f, 0.38351275723852291f, 0.38675335037837993f, 0.39008308392311997f, 0.39350254000115381f, 0.39701221751773474f, 0.40061257089416885f, 0.40430398069682483f, 0.40808667584648967f, 0.41196089987122869f, 0.41592679539764366f, 0.41998440356963762f, 0.42413367909988375f, 0.42837450371258479f, 0.432706647838971f, 0.43712979856444761f, 0.44164332426364639f, 0.44624687186865436f, 0.45093985823706345f, 0.45572154742892063f, 0.46059116206904965f, 0.46554778281918402f, 0.47059039582133383f, 0.47571791879076081f, 0.48092913815357724f, 0.48622257801969754f, 0.49159667021646397f, 0.49705020621532009f, 0.50258161291269432f, 0.50818921213102985f, 0.51387124091909786f, 0.5196258425240281f, 0.52545108144834785f, 0.53134495942561433f, 0.53730535185141037f, 0.5433300863249918f, 0.54941691584603647f, 0.55556350867083815f, 0.56176745110546977f, 0.56802629178649788f, 0.57433746373459582f, 0.58069834805576737f, 0.58710626908082753f, 0.59355848909050757f, 0.60005214820435104f, 0.6065843782630862f, 0.61315221209322646f, 0.61975260637257923f, 0.62638245478933297f, 0.63303857040067113f, 0.63971766697672761f, 0.6464164243818421f, 0.65313137915422603f, 0.65985900156216504f, 0.66659570204682972f, 0.67333772009301907f, 0.68008125203631464f, 0.68682235874648545f, 0.69355697649863846f, 0.70027999028864962f, 0.70698561390212977f, 0.71367147811129228f, 0.72033299387284622f, 0.72696536998972039f, 0.73356368240541492f, 0.74012275762807056f, 0.74663719293664366f, 0.7530974636118285f, 0.7594994148789691f, 0.76583801477914104f, 0.77210610037674143f, 0.77829571667247499f, 0.78439788751383921f, 0.79039529663736285f, 0.796282666437655f, 0.80204612696863953f, 0.80766972324164554f, 0.81313419626911398f, 0.81841638963128993f, 0.82350476683173168f, 0.82838497261149613f, 0.8330486712880828f, 0.83748851001197089f, 0.84171925358069011f, 0.84575537519027078f, 0.84961373549150254f, 0.85330645352458923f, 0.85685572291039636f, 0.86027399927156634f, 0.86356595168669881f, 0.86673765046233331f, 0.86979617048190971f, 0.87274147101441557f, 0.87556785228242973f, 0.87828235285372469f, 0.88088414794024839f, 0.88336206121170946f, 0.88572538990087124f };\n\t\t\t custom_colormap_size = 510;\n\t\t\t*/\n\n\t\t\t//inferno\n\t\t\tstatic const float r[] = { 0.001462f, 0.002267f, 0.003299f, 0.004547f, 0.006006f, 0.007676f, 0.009561f, 0.011663f, 0.013995f, 0.016561f, 0.019373f, 0.022447f, 0.025793f, 0.029432f, 0.033385f, 0.037668f, 0.042253f, 0.046915f, 0.051644f, 0.056449f, 0.061340f, 0.066331f, 0.071429f, 0.076637f, 0.081962f, 0.087411f, 0.092990f, 0.098702f, 0.104551f, 0.110536f, 0.116656f, 0.122908f, 0.129285f, 0.135778f, 0.142378f, 0.149073f, 0.155850f, 0.162689f, 0.169575f, 0.176493f, 0.183429f, 0.190367f, 0.197297f, 0.204209f, 0.211095f, 0.217949f, 0.224763f, 0.231538f, 0.238273f, 0.244967f, 0.251620f, 0.258234f, 0.264810f, 0.271347f, 0.277850f, 0.284321f, 0.290763f, 0.297178f, 0.303568f, 0.309935f, 0.316282f, 0.322610f, 0.328921f, 0.335217f, 0.341500f, 0.347771f, 0.354032f, 0.360284f, 0.366529f, 0.372768f, 0.379001f, 0.385228f, 0.391453f, 0.397674f, 0.403894f, 0.410113f, 0.416331f, 0.422549f, 0.428768f, 0.434987f, 0.441207f, 0.447428f, 0.453651f, 0.459875f, 0.466100f, 0.472328f, 0.478558f, 0.484789f, 0.491022f, 0.497257f, 0.503493f, 0.509730f, 0.515967f, 0.522206f, 0.528444f, 0.534683f, 0.540920f, 0.547157f, 0.553392f, 0.559624f, 0.565854f, 0.572081f, 0.578304f, 0.584521f, 0.590734f, 0.596940f, 0.603139f, 0.609330f, 0.615513f, 0.621685f, 0.627847f, 0.633998f, 0.640135f, 0.646260f, 0.652369f, 0.658463f, 0.664540f, 0.670599f, 0.676638f, 0.682656f, 0.688653f, 0.694627f, 0.700576f, 0.706500f, 0.712396f, 0.718264f, 0.724103f, 0.729909f, 0.735683f, 0.741423f, 0.747127f, 0.752794f, 0.758422f, 0.764010f, 0.769556f, 0.775059f, 0.780517f, 0.785929f, 0.791293f, 0.796607f, 0.801871f, 0.807082f, 0.812239f, 0.817341f, 0.822386f, 0.827372f, 0.832299f, 0.837165f, 0.841969f, 0.846709f, 0.851384f, 0.855992f, 0.860533f, 0.865006f, 0.869409f, 0.873741f, 0.878001f, 0.882188f, 0.886302f, 0.890341f, 0.894305f, 0.898192f, 0.902003f, 0.905735f, 0.909390f, 0.912966f, 0.916462f, 0.919879f, 0.923215f, 0.926470f, 0.929644f, 0.932737f, 0.935747f, 0.938675f, 0.941521f, 0.944285f, 0.946965f, 0.949562f, 0.952075f, 0.954506f, 0.956852f, 0.959114f, 0.961293f, 0.963387f, 0.965397f, 0.967322f, 0.969163f, 0.970919f, 0.972590f, 0.974176f, 0.975677f, 0.977092f, 0.978422f, 0.979666f, 0.980824f, 0.981895f, 0.982881f, 0.983779f, 0.984591f, 0.985315f, 0.985952f, 0.986502f, 0.986964f, 0.987337f, 0.987622f, 0.987819f, 0.987926f, 0.987945f, 0.987874f, 0.987714f, 0.987464f, 0.987124f, 0.986694f, 0.986175f, 0.985566f, 0.984865f, 0.984075f, 0.983196f, 0.982228f, 0.981173f, 0.980032f, 0.978806f, 0.977497f, 0.976108f, 0.974638f, 0.973088f, 0.971468f, 0.969783f, 0.968041f, 0.966243f, 0.964394f, 0.962517f, 0.960626f, 0.958720f, 0.956834f, 0.954997f, 0.953215f, 0.951546f, 0.950018f, 0.948683f, 0.947594f, 0.946809f, 0.946392f, 0.946403f, 0.946903f, 0.947937f, 0.949545f, 0.951740f, 0.954529f, 0.957896f, 0.961812f, 0.966249f, 0.971162f, 0.976511f, 0.982257f, 0.988362f };\n\t\t\tstatic const float g[] = { 0.000466f, 0.001270f, 0.002249f, 0.003392f, 0.004692f, 0.006136f, 0.007713f, 0.009417f, 0.011225f, 0.013136f, 0.015133f, 0.017199f, 0.019331f, 0.021503f, 0.023702f, 0.025921f, 0.028139f, 0.030324f, 0.032474f, 0.034569f, 0.036590f, 0.038504f, 0.040294f, 0.041905f, 0.043328f, 0.044556f, 0.045583f, 0.046402f, 0.047008f, 0.047399f, 0.047574f, 0.047536f, 0.047293f, 0.046856f, 0.046242f, 0.045468f, 0.044559f, 0.043554f, 0.042489f, 0.041402f, 0.040329f, 0.039309f, 0.038400f, 0.037632f, 0.037030f, 0.036615f, 0.036405f, 0.036405f, 0.036621f, 0.037055f, 0.037705f, 0.038571f, 0.039647f, 0.040922f, 0.042353f, 0.043933f, 0.045644f, 0.047470f, 0.049396f, 0.051407f, 0.053490f, 0.055634f, 0.057827f, 0.060060f, 0.062325f, 0.064616f, 0.066925f, 0.069247f, 0.071579f, 0.073915f, 0.076253f, 0.078591f, 0.080927f, 0.083257f, 0.085580f, 0.087896f, 0.090203f, 0.092501f, 0.094790f, 0.097069f, 0.099338f, 0.101597f, 0.103848f, 0.106089f, 0.108322f, 0.110547f, 0.112764f, 0.114974f, 0.117179f, 0.119379f, 0.121575f, 0.123769f, 0.125960f, 0.128150f, 0.130341f, 0.132534f, 0.134729f, 0.136929f, 0.139134f, 0.141346f, 0.143567f, 0.145797f, 0.148039f, 0.150294f, 0.152563f, 0.154848f, 0.157151f, 0.159474f, 0.161817f, 0.164184f, 0.166575f, 0.168992f, 0.171438f, 0.173914f, 0.176421f, 0.178962f, 0.181539f, 0.184153f, 0.186807f, 0.189501f, 0.192239f, 0.195021f, 0.197851f, 0.200728f, 0.203656f, 0.206636f, 0.209670f, 0.212759f, 0.215906f, 0.219112f, 0.222378f, 0.225706f, 0.229097f, 0.232554f, 0.236077f, 0.239667f, 0.243327f, 0.247056f, 0.250856f, 0.254728f, 0.258674f, 0.262692f, 0.266786f, 0.270954f, 0.275197f, 0.279517f, 0.283913f, 0.288385f, 0.292933f, 0.297559f, 0.302260f, 0.307038f, 0.311892f, 0.316822f, 0.321827f, 0.326906f, 0.332060f, 0.337287f, 0.342586f, 0.347957f, 0.353399f, 0.358911f, 0.364492f, 0.370140f, 0.375856f, 0.381636f, 0.387481f, 0.393389f, 0.399359f, 0.405389f, 0.411479f, 0.417627f, 0.423831f, 0.430091f, 0.436405f, 0.442772f, 0.449191f, 0.455660f, 0.462178f, 0.468744f, 0.475356f, 0.482014f, 0.488716f, 0.495462f, 0.502249f, 0.509078f, 0.515946f, 0.522853f, 0.529798f, 0.536780f, 0.543798f, 0.550850f, 0.557937f, 0.565057f, 0.572209f, 0.579392f, 0.586606f, 0.593849f, 0.601122f, 0.608422f, 0.615750f, 0.623105f, 0.630485f, 0.637890f, 0.645320f, 0.652773f, 0.660250f, 0.667748f, 0.675267f, 0.682807f, 0.690366f, 0.697944f, 0.705540f, 0.713153f, 0.720782f, 0.728427f, 0.736087f, 0.743758f, 0.751442f, 0.759135f, 0.766837f, 0.774545f, 0.782258f, 0.789974f, 0.797692f, 0.805409f, 0.813122f, 0.820825f, 0.828515f, 0.836191f, 0.843848f, 0.851476f, 0.859069f, 0.866624f, 0.874129f, 0.881569f, 0.888942f, 0.896226f, 0.903409f, 0.910473f, 0.917399f, 0.924168f, 0.930761f, 0.937159f, 0.943348f, 0.949318f, 0.955063f, 0.960587f, 0.965896f, 0.971003f, 0.975924f, 0.980678f, 0.985282f, 0.989753f, 0.994109f, 0.998364f };\n\t\t\tstatic const float b[] = { 0.013866f, 0.018570f, 0.024239f, 0.030909f, 0.038558f, 0.046836f, 0.055143f, 0.063460f, 0.071862f, 0.080282f, 0.088767f, 0.097327f, 0.105930f, 0.114621f, 0.123397f, 0.132232f, 0.141141f, 0.150164f, 0.159254f, 0.168414f, 0.177642f, 0.186962f, 0.196354f, 0.205799f, 0.215289f, 0.224813f, 0.234358f, 0.243904f, 0.253430f, 0.262912f, 0.272321f, 0.281624f, 0.290788f, 0.299776f, 0.308553f, 0.317085f, 0.325338f, 0.333277f, 0.340874f, 0.348111f, 0.354971f, 0.361447f, 0.367535f, 0.373238f, 0.378563f, 0.383522f, 0.388129f, 0.392400f, 0.396353f, 0.400007f, 0.403378f, 0.406485f, 0.409345f, 0.411976f, 0.414392f, 0.416608f, 0.418637f, 0.420491f, 0.422182f, 0.423721f, 0.425116f, 0.426377f, 0.427511f, 0.428524f, 0.429425f, 0.430217f, 0.430906f, 0.431497f, 0.431994f, 0.432400f, 0.432719f, 0.432955f, 0.433109f, 0.433183f, 0.433179f, 0.433098f, 0.432943f, 0.432714f, 0.432412f, 0.432039f, 0.431594f, 0.431080f, 0.430498f, 0.429846f, 0.429125f, 0.428334f, 0.427475f, 0.426548f, 0.425552f, 0.424488f, 0.423356f, 0.422156f, 0.420887f, 0.419549f, 0.418142f, 0.416667f, 0.415123f, 0.413511f, 0.411829f, 0.410078f, 0.408258f, 0.406369f, 0.404411f, 0.402385f, 0.400290f, 0.398125f, 0.395891f, 0.393589f, 0.391219f, 0.388781f, 0.386276f, 0.383704f, 0.381065f, 0.378359f, 0.375586f, 0.372748f, 0.369846f, 0.366879f, 0.363849f, 0.360757f, 0.357603f, 0.354388f, 0.351113f, 0.347777f, 0.344383f, 0.340931f, 0.337424f, 0.333861f, 0.330245f, 0.326576f, 0.322856f, 0.319085f, 0.315266f, 0.311399f, 0.307485f, 0.303526f, 0.299523f, 0.295477f, 0.291390f, 0.287264f, 0.283099f, 0.278898f, 0.274661f, 0.270390f, 0.266085f, 0.261750f, 0.257383f, 0.252988f, 0.248564f, 0.244113f, 0.239636f, 0.235133f, 0.230606f, 0.226055f, 0.221482f, 0.216886f, 0.212268f, 0.207628f, 0.202968f, 0.198286f, 0.193584f, 0.188860f, 0.184116f, 0.179350f, 0.174563f, 0.169755f, 0.164924f, 0.160070f, 0.155193f, 0.150292f, 0.145367f, 0.140417f, 0.135440f, 0.130438f, 0.125409f, 0.120354f, 0.115272f, 0.110164f, 0.105031f, 0.099874f, 0.094695f, 0.089499f, 0.084289f, 0.079073f, 0.073859f, 0.068659f, 0.063488f, 0.058367f, 0.053324f, 0.048392f, 0.043618f, 0.039050f, 0.034931f, 0.031409f, 0.028508f, 0.026250f, 0.024661f, 0.023770f, 0.023606f, 0.024202f, 0.025592f, 0.027814f, 0.030908f, 0.034916f, 0.039886f, 0.045581f, 0.051750f, 0.058329f, 0.065257f, 0.072489f, 0.079990f, 0.087731f, 0.095694f, 0.103863f, 0.112229f, 0.120785f, 0.129527f, 0.138453f, 0.147565f, 0.156863f, 0.166353f, 0.176037f, 0.185923f, 0.196018f, 0.206332f, 0.216877f, 0.227658f, 0.238686f, 0.249972f, 0.261534f, 0.273391f, 0.285546f, 0.298010f, 0.310820f, 0.323974f, 0.337475f, 0.351369f, 0.365627f, 0.380271f, 0.395289f, 0.410665f, 0.426373f, 0.442367f, 0.458592f, 0.474970f, 0.491426f, 0.507860f, 0.524203f, 0.540361f, 0.556275f, 0.571925f, 0.587206f, 0.602154f, 0.616760f, 0.631017f, 0.644924f };\n\t\t\tcustom_colormap_size = 256;\n\n\t\t\tstatic cv::Mat custom_colormap;\n\t\t\tstatic bool first = true;\n\n\t\t\tif (first) {\n\t\t\t\tcv::Mat red(custom_colormap_size, 1, CV_32FC1, (void*)r),\n\t\t\t\t\tgreen(custom_colormap_size, 1, CV_32FC1, (void*)g),\n\t\t\t\t\tblue(custom_colormap_size, 1, CV_32FC1, (void*)b);\n\n\t\t\t\tcv::merge(std::vector<cv::Mat>{red, green, blue}, custom_colormap);\n\t\t\t\tcv::resize(custom_colormap, custom_colormap, cv::Size(1, 256));\n\t\t\t\tcustom_colormap.convertTo(custom_colormap, CV_8UC3, 255.0);\n\n\t\t\t\tfirst = false;\n\t\t\t}\t\n\n\t\t\tVideoVolume<uchar, 3> out(l, w, h);\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\tcv::Mat ff = 4.0*(frame(f) - 128) + 128;\n\t\t\t\t//cv::applyColorMap(cvConvertMatTo<uchar, N>(ff, scaling), out.frame(f), custom_colormap);\n\t\t\t\tcvConvertMatTo<uchar, N>(ff, scaling).copyTo(out.frame(f));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tvoid temporalBlur(float scaling = 1.0f) {\n\t\t\tconst cv::Mat1f kernel = (scaling / 16.0f)*(cv::Mat1f(5, 1) << 1, 4, 6, 4, 1);\n\t\t\tcv::filter2D(mat, mat, -1, kernel, cv::Point(-1, -1), 0.0, cv::BORDER_DEFAULT);\n\t\t}\n\n\t\tvoid temporalBlurBoundaryConditions(float scaling, double left, double right) {\n\t\t\tconst cv::Mat1f kernel = (scaling / 16.0f)*(cv::Mat1f(5, 1) << 1, 4, 6, 4, 1);\n\n\t\t\tVideoVolume tmp(l, w, h);\n\t\t\tfor (int i = 0; i < h; ++i) {\n\t\t\t\tfor (int j = 0; j < w; ++j) {\n\t\t\t\t\tfor (int c = 0; c < N; ++c) {\t\t\t\t\t\n\t\t\t\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\t\t\t\tdouble res = 0;\n\t\t\t\t\t\t\tfor (int dt = -2; dt <= 2; ++dt) {\n\t\t\t\t\t\t\t\tint u = t + dt;\n\t\t\t\t\t\t\t\tdouble w = kernel(2 + dt), val;\n\t\t\t\t\t\t\t\tif (u < 0) {\n\t\t\t\t\t\t\t\t\tval = left;\n\t\t\t\t\t\t\t\t} else if (u >= l) {\n\t\t\t\t\t\t\t\t\tval = right;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tval = valueAt(u, i, j, c);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tres += w * val;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttmp.valueAt(t, i, j, c) = cv::saturate_cast<T>(res) ;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\tstd::swap(mat, tmp.mat);\n\t\t}\n\n\t\tvoid extendedTemporalBlur() {\n\t\t\t//const cv::Mat kernel = (1 / 5.0f)*(cv::Mat_<float>(5, 1) << 1, 1, 1, 1, 1);\n\t\t\t//cv::filter2D(mat, mat, -1, kernel, cv::Point(-1, -1), cv::BORDER_REPLICATE);\n\t\t\tcv::boxFilter(mat, mat, -1, cv::Size(1, 25), cv::Point(-1, -1), true, cv::BORDER_REPLICATE);\n\t\t}\n\n\t\tVideoVolume pyrDownSpacial() const {\n\t\t\tVideoVolume out(l, (w + 1) / 2, (h + 1) / 2);\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\tcv::pyrDown(frame(f), out.frame(f));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrDownTemporalModif() {\n\t\t\ttemporalBlur();\n\t\t\tVideoVolume out((l + 1) / 2, w, h);\n\t\t\tfor (int f = 0; f < out.l; ++f) {\n\t\t\t\tframe(2 * f).copyTo(out.frame(f));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrDownTemporal() const {\n\t\t\tVideoVolume tmp(mat.clone(), w, h);\n\t\t\treturn tmp.pyrDownTemporalModif();\n\t\t}\n\n\t\tVideoVolume pyrDownTemporalBox() const {\n\t\t\tVideoVolume tmp(l, w, h);\n\t\t\tconst cv::Mat kernel = (1.0 / 16.0f)*(cv::Mat_<float>(5, 1) << 1, 4, 6, 4, 1);\n\t\t\tcv::filter2D(mat, tmp.mat, -1, kernel, cv::Point(-1, -1), 0.0, cv::BORDER_REPLICATE);\n\t\t\t//cv::boxFilter(mat, tmp.mat, -1, cv::Size(1, 5), { -1,-1 }, true, cv::BORDER_REPLICATE);\n\t\t\tVideoVolume out((l + 1) / 2, w, h);\n\t\t\tcv::resize(tmp.mat, out.mat, out.mat.size(), 0, 0, cv::INTER_LINEAR);\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume extendedDownScaleTemporal() const {\n\t\t\tVideoVolume tmp(mat.clone(), w, h);\n\t\t\ttmp.extendedTemporalBlur();\n\t\t\tVideoVolume out((l + 1) / 2, w, h);\n\t\t\tfor (int f = 0; f < out.l; ++f) {\n\t\t\t\ttmp.frame(2 * f).copyTo(out.frame(f));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrDown() const {\n\t\t\treturn pyrDownSpacial().pyrDownTemporalModif();\n\t\t}\n\n\t\tVideoVolume pyrUpSpacial(int _w, int _h) const {\n\t\t\tVideoVolume out(l, _w, _h);\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\tcv::pyrUp(frame(f), out.frame(f), cv::Size(_w, _h));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrUpTemporal(int _l) const {\n\t\t\tVideoVolume out(_l, w, h, 0);\n\t\t\t//for (int f = 0; f < l; ++f) {\n\t\t\t//\tframe(f).copyTo(out.frame(2 * f));\n\t\t\t//}\n\t\t\t//out.temporalBlur(2.0f);\n\t\t\tcv::resize(mat, out.mat, out.mat.size(), 0, 0, cv::INTER_LINEAR);\n\t\t\tout.temporalBlur(1.0f);\n\n\t\t\treturn out;\n\t\t}\n\t\tVideoVolume pyrUpTemporalBoundaryConditions(int _l, double left, double right) const {\n\t\t\tVideoVolume out(_l, w, h, 0);\n\t\t\tcv::resize(mat, out.mat, out.mat.size(), 0, 0, cv::INTER_LINEAR);\n\t\t\tout.temporalBlurBoundaryConditions(1.0f, left, right);\n\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrDownBoundaryConditions(double left, double right) const {\n\t\t\tVideoVolume tmp = clone();\n\t\t\ttmp.temporalBlurBoundaryConditions(1.0f, left, right);\n\t\t\tVideoVolume out((l + 1) / 2, w, h);\n\t\t\tcv::resize(tmp.mat, out.mat, out.mat.size(), 0, 0, cv::INTER_LINEAR);\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume pyrUp(int _l, int _w, int _h) const {\n\t\t\treturn pyrUpTemporal(_l).pyrUpSpacial(_w, _h);\n\t\t}\n\n\t\tvoid play(int delay = 30, const sibr::Vector2i & res = { -1,-1 }, double scale = 1.0) const {\n\t\t\tbool playing = true;\n\t\t\tint t = 0;\n\n\t\t\tconst std::string win_name = \"playing\";\n\t\t\tauto disp_frame = [&] {\n\t\t\t\tif ((res.array() >= 0).all()) {\n\t\t\t\t\tcv::Mat m;\n\t\t\t\t\tcv::resize(cvConvertMatTo<uchar, 3>(frame(t), scale), m, cv::Size(res[0],res[1]), 0,0, cv::INTER_NEAREST);\n\t\t\t\t\tcv::imshow(win_name, m);\n\t\t\t\t} else {\n\t\t\t\t\tcv::imshow(win_name, cvConvertMatTo<uchar, 3>(frame(t), scale));\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tauto true_cb = [&](int new_t) {\n\t\t\t\tt = new_t;\n\t\t\t\tdisp_frame();\n\t\t\t};\n\t\t\tauto cb_wrapper = [](int new_t, void * arg) { (*static_cast<decltype(true_cb)*>(arg))(new_t); };\n\n\t\t\twhile (playing) {\t\t\t\t\t\n\t\t\t\tdisp_frame(); \n\t\t\t\tcv::createTrackbar(\"timestamp\", win_name, &t, l - 1, cb_wrapper, &true_cb);\t\n\t\t\t\tplaying = (cv::waitKey(delay) != 27);\n\t\t\t\tt = (t + 1) % l;\n\t\t\t}\n\n\t\t\tcv::destroyWindow(win_name);\n\t\t}\n\n\t\tvoid playStd(double scale = 1.0) const {\n\t\t\tplay(30, { 800,600 }, scale);\n\t\t}\n\n\t\tvoid saveToVideoFile(const std::string & filepath, double framerate = 30.0) const {\n\t\t\tPath file = filepath;\n\t\t\tmakeDirectory(file.parent_path().string());\n\n\t\t\tsibr::FFVideoEncoder output(filepath, framerate, { w,h });\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\toutput << sibr::cvConvertMatTo<uchar,3>(frame(f));\n\t\t\t}\n\t\t\toutput.close();\n\t\t}\n\n\t\tcv::Mat_<CVpixel> frame(int t) {\n\t\t\treturn mat.row(t).reshape(N, h);\n\t\t}\n\t\tconst cv::Mat_<CVpixel> frame(int t) const {\n\t\t\treturn mat.row(t).reshape(N, h);\n\t\t}\n\n\t\tcv::Mat_<T> time_sequence(int i, int j, int c = 0) const {\n\t\t\treturn mat.col(N*(w*i + j) + c);\n\t\t}\n\t\tcv::Mat_<CVpixel> time_sequence_pixels(int i, int j) const {\n\t\t\treturn mat.colRange(N*(w*i + j), N*(w*i + j + 1)).reshape(N, 0);\n\t\t}\n\n\t\tVideoVolume time_sequence_volume(int i, int j) const {\n\t\t\treturn VideoVolume(time_sequence_pixels(i,j).clone(), 1, 1);\n\t\t}\n\n\t\tcv::Mat video_line(int i) const {\n\t\t\treturn mat.colRange(N*w*i, N*w*(i + 1));\n\t\t}\n\n\t\tVideoVolume subVolumeRef(int t_start, int t_end) {\n\t\t\treturn VideoVolume(mat.rowRange(t_start, t_end), w, h);\n\t\t}\n\n\t\tVideoVolume subVolume(int t_start, int t_end) const {\n\t\t\treturn VideoVolume(mat.rowRange(t_start, t_end).clone(), w, h);\n\t\t}\n\n\t\tVideoVolume subVolumeSpatial(int x, int y, int w, int h) const {\n\t\t\tVideoVolume out(l, w, h);\n\t\t\tcv::Rect rec(x, y, w, h);\n#pragma omp parallel for\n\t\t\tfor (int t = 0; t < l; ++t) {\n\t\t\t\tframe(t)(rec).copyTo(out.frame(t));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tVideoVolume subVolume_i(int i_start, int i_end) const {\n\t\t\treturn VideoVolume(mat.colRange(N*w*i_start, N*w*i_end), w, i_end - i_start);\n\t\t}\n\n\t\tVideoVolume subVolume_i_copy(int i_start, int i_end) const {\n\t\t\treturn VideoVolume(mat.colRange(N*w*i_start, N*w*i_end).clone(), w, i_end - i_start);\n\t\t}\n\n\t\tVideoVolume duplicateTime(int num) const {\n\t\t\tVideoVolume out(l*num, w, h);\n\t\t\tfor (int i = 0; i < num; ++i) {\n\t\t\t\tmat.copyTo(out.mat.rowRange(l*i, l*(i + 1)));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tcv::Mat_<CVpixel> spatialSlice(int i_start, int j_start, int i_end, int j_end) {\n\t\t\tVector2i start = { i_start, j_start }, end = { i_end, j_end };\n\t\t\tVector2i diff = end - start;\n\t\t\tint num = diff.cwiseAbs().maxCoeff();\n\t\t\t\n\t\t\tcv::Mat_<CVpixel> out(l, num + 1);\n\t\t\tfor (int s = 0; s <= num; ++s) {\n\t\t\t\tVector2i p = (start.cast<float>() + (s / (float)num)*diff.cast<float>()).cast<int>();\n\n\t\t\t\ttime_sequence_pixels(p[0], p[1]).copyTo(out.col(s));\n\t\t\t\t//for (int c = 0; c < N; ++c) {\n\t\t\t\t//\tout.col(c + i * N) = time_sequence(p[0], p[1], c);\n\t\t\t\t//}\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tcv::Mat_<CVpixel> median_frame() const {\n\t\t\tcv::Mat_<CVpixel> out_median(h, w);\n\n#pragma omp parallel for\n\t\t\tfor (int i = 0; i < h; ++i) {\n\t\t\t\tfor (int j = 0; j < w; ++j) {\t\t\t\t\n\t\t\t\t\tfor (int c = 0; c < N; ++c) {\n\t\t\t\t\t\tstd::vector<T> vals_vec;\n\t\t\t\t\t\ttime_sequence(i, j, c).copyTo(vals_vec);\n\t\t\t\t\t\tstd::nth_element(vals_vec.begin(), vals_vec.begin() + vals_vec.size() / 2, vals_vec.end());\n\t\t\t\t\t\tCV_Assign<T, N>::assignValue(c, vals_vec[vals_vec.size() / 2], out_median(i, j));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out_median;\n\t\t}\n\n\t\tT & valueAt(int t, int i, int j, int c = 0) {\n\t\t\treturn mat(t, N*(w*i + j) + c);\n\t\t}\n\t\tconst T & valueAt(int t, int i, int j, int c = 0) const {\n\t\t\treturn mat(t, N*(w*i + j) + c);\n\t\t}\n\n\t\tCVpixel & pixelAt(int t, int i, int j) {\n\t\t\treturn frame(t)(i, j);\n\t\t}\n\t\tconst CVpixel & pixelAt(int t, int i, int j) const {\n\t\t\treturn frame(t)(i, j);\n\t\t}\n\n\t\tbool isValid() const {\n\t\t\treturn !mat.empty();\n\t\t}\n\n\t\tvoid cout() const {\n\t\t\tstd::cout << l << \" x \" << w <<  \" x \" << h << std::endl;\n\t\t}\n\n\t\tVideoVolume spatialRescale(float f) const {\n\t\t\tVector2i size = (f * Vector2f(w, h) + Vector2f(0.5f, 0.5f)).cast<int>();\n\n\t\t\tVideoVolume out(l, size[0], size[1]);\n\t\t\tfor (int f = 0; f < l; ++f) {\n\t\t\t\tcv::resize(frame(f), out.frame(f), cv::Size(size[0], size[1]), 0, 0, cv::INTER_LINEAR);\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\n\t};\n\n\tSIBR_VIDEO_EXPORT Volume3u loadVideoVolume(const std::string & filepath);\n\tSIBR_VIDEO_EXPORT Volume3u loadVideoVolume(sibr::Video & vid);\n\t\n\ttemplate<typename T, uint N, uint M> \n\tVideoVolume<T, N + M>  concatVolumesChannels(const sibr::VideoVolume<T, N> & A, const sibr::VideoVolume<T, M> & B) {\n\t\tVideoVolume<T, N + M> out(A.l, A.w, A.h);\n\n#pragma omp parallel for\n\t\tfor (int t = 0; t < A.l; ++t) {\n\t\t\tstd::vector<cv::Mat> A_cs, B_cs;\n\t\t\tcv::split(A.frame(t), A_cs);\n\t\t\tcv::split(B.frame(t), B_cs);\n\t\t\tA_cs.insert(A_cs.end(), B_cs.begin(), B_cs.end());\n\t\t\tcv::merge(A_cs, out.frame(t));\n\t\t}\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT uint optimal_num_levels(uint length);\n\n\ttemplate<uint M>\n\tstd::vector<sibr::VideoVolume<uchar, M>> extendedBlurPyramid(const sibr::VideoVolume<uchar, M> & vid, uint num_levels = 0) {\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::VideoVolume<uchar, M>> out(1, vid);\n\t\tfor (uint i = 1; i < num_levels; ++i) {\n\t\t\tout.push_back(out.back().extendedDownScaleTemporal());\n\t\t}\n\t\treturn out;\n\t}\n\n\ttemplate<uint M>\n\tstd::vector<sibr::VideoVolume<uchar, M>> gaussianPyramid(const sibr::VideoVolume<uchar, M> & vid, uint num_levels = 0) {\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::VideoVolume<uchar, M>> out(1, vid);\n\t\tfor (uint i = 1; i < num_levels; ++i) {\n\t\t\tout.push_back(out.back().pyrDown());\n\t\t}\n\t\treturn out;\n\t}\n\n\ttemplate<typename T, uint M>\n\tstd::vector<sibr::VideoVolume<T, M>> gaussianPyramidTemporal (const sibr::VideoVolume<T, M> & vid, uint num_levels = 0) {\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::VideoVolume<T, M>> out(1, vid);\n\t\tfor (uint i = 1; i < num_levels; ++i) {\n\t\t\tout.push_back(out.back().pyrDownTemporal());\n\t\t}\n\t\treturn out;\n\t}\n\n\ttemplate<typename T, uint M>\n\tstd::vector<sibr::VideoVolume<T, M>> gaussianPyramidTemporalBox(const sibr::VideoVolume<T, M> & vid, uint num_levels = 0) {\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<sibr::VideoVolume<T, M>> out(1, vid);\n\t\tfor (uint i = 1; i < num_levels; ++i) {\n\t\t\tout.push_back(out.back().pyrDownTemporalBox());\n\t\t}\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT std::vector<sibr::Volume3u> laplacianPyramid(const sibr::Volume3u & vid, uint num_levels = 0);\n\t//SIBR_VIDEO_EXPORT std::vector<sibr::Volume3u> laplacianPyramidTemporal(const sibr::Volume3u & vid, uint num_levels = 0);\n\tSIBR_VIDEO_EXPORT std::vector<sibr::Volume3u> laplacianPyramidTemporalDouble(const sibr::Volume3u & vid, uint num_levels = 0);\n\n\n\ttemplate< typename U, typename T = U>\n\tstd::vector<VideoVolume<T,3>> laplacianPyramidTemporal(const VideoVolume<U, 3>& vid, uint num_levels = 0)\n\t{\n\t\tif (num_levels == 0) {\n\t\t\tnum_levels = optimal_num_levels(vid.l);\n\t\t}\n\n\t\tstd::vector<VideoVolume<T, 3>> out;\n\n\t\tsibr::Volume3f current_v = vid.template convertTo<float>(), down, up;\n\t\tfor (int i = 0; i < (int)num_levels - 1; ++i) {\n\t\t\t//std::cout << i << \" \" << current_v.l << std::endl;\n\t\t\tdown = current_v.pyrDownTemporal();\n\t\t\tup = down.pyrUpTemporal(current_v.l);\n\t\t\t//current_v.play(30, { 1200,800 });\n\t\t\t//up.play(30, { 1200,800 });\n\t\t\tcurrent_v.substract(up);\n\t\t\tcurrent_v.shift(128);\n\t\t\tout.push_back(current_v.convertTo<T>());\n\t\t\tstd::swap(current_v, down);\n\t\t}\n\t\tout.push_back(current_v.convertTo<T>());\n\t\treturn out;\n\t}\n\n\tSIBR_VIDEO_EXPORT sibr::Volume3u collapseLaplacianPyramid(const std::vector<sibr::Volume3u> & pyr, double shift = 0);\n\n\ttemplate<typename T>\n\tsibr::VideoVolume<T,3> collapseLaplacianPyramidTemporal(const std::vector<sibr::VideoVolume<T, 3>>& pyr, double shift,\n\t\tbool debug = false)\n\t{\n\t\tsibr::Volume3f v = (VideoVolume<T, 3>) pyr.back().convertTo();\n\t\tfor (int i = (int)pyr.size() - 2; i >= 0; --i) {\n\t\t\tif (debug) {\n\t\t\t\tv.play();\n\t\t\t}\n\t\t\tv = v.pyrUpTemporal(pyr[i].l);\n\t\t\tif (debug) {\n\t\t\t\tv.play();\n\t\t\t}\n\t\t\tv.add(pyr[i]);\n\t\t\tif (shift != 0) {\n\t\t\t\tv.shift(shift);\n\t\t\t\tif (debug) {\n\t\t\t\t\tv.play();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn v.convertTo<T>();\n\t}\n\n\t//SIBR_VIDEO_EXPORT sibr::Volume3u collapseLaplacianPyramidTemporal(const std::vector<sibr::Volume3u> & pyr, double shift = 0);\n\n\t//SIBR_VIDEO_EXPORT sibr::Volume3u laplacianBlendingTemporal(const sibr::Volume3u & vA, const sibr::Volume3u & vB, std::vector<sibr::Volume1u> & pyrM);\n\tSIBR_VIDEO_EXPORT sibr::Volume3u laplacianBlending(const sibr::Volume3u & vA, const sibr::Volume3u & vB, std::vector<sibr::Volume1u> & pyrM);\n\n\ttemplate<typename T_V, typename T_M>\n\tsibr::VideoVolume<T_V, 3> laplacianBlendingTemporal(\n\t\tconst sibr::VideoVolume<T_V,3> & vA,\n\t\tconst sibr::VideoVolume<T_V, 3> & vB,\n\t\tstd::vector<sibr::VideoVolume<T_M, 1>> & pyrM)\n\t{\n\t\tuint num_levels = (uint)pyrM.size();\n\n\t\tauto pyrA = laplacianPyramidTemporal(vA, num_levels);\n\n\t\tfor (const auto & l : pyrA) {\n\t\t\t//l.play();\n\t\t}\n\n\t\tauto pyrB = laplacianPyramidTemporal(vB, num_levels);\n\n\t\t//auto pyrM = gaussianPyramidTemporal(vM);\n\n\t\tfor (int i = (int)pyrA.size() - 1; i >= 0; --i) {\n\t\t\t//pyrA[i].playStd();\n\t\t\t//pyrM[i].playStd();\n\t\t\tpyrA[i].applyMaskInPlace(pyrM[i]);\n\t\t\t//pyrA[i].playStd();\n\t\t\tpyrM[i].toggle();\n\t\t\t//pyrM[i].playStd();\n\t\t\t//pyrB[i].playStd();\n\t\t\tpyrB[i].applyMaskInPlace(pyrM[i]);\n\t\t\t//pyrB[i].playStd();\n\t\t\tpyrA[i].add(pyrB[i]);\n\t\t\t//pyrA[i].playStd();\n\t\t}\n\n\t\treturn collapseLaplacianPyramidTemporal(pyrA, -128);\n\t}\n\n\ttemplate<typename T, uint N, typename Pix = typename VideoVolume<float, N>::CVpixel>\n\tcv::Mat_<Pix> totalVariation(const VideoVolume<T, N> & v) {\n\t\tcv::Mat_<Pix> total_vars(v.h, v.w);\n\n#pragma omp parallel for\n\t\tfor (int i = 0; i < v.h; ++i) {\n\t\t\tfor (int j = 0; j < v.w; ++j) {\n\t\t\t\tfor (int c = 0; c < N; ++c) {\n\t\t\t\t\tdouble total_var = 0;\n\t\t\t\t\tauto seq = v.time_sequence(i, j, c).clone();\n\t\t\t\t\tfor (int t = 0; t < v.l - 1; ++t) {\n\t\t\t\t\t\ttotal_var += std::abs((double)seq(t) - (double)seq(t + 1));\n\t\t\t\t\t}\n\t\t\t\t\tCV_Assign<float, N>::assignValue(c, (float)total_var, total_vars(i, j));\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\treturn total_vars;\n\t}\n\n\tstruct SIBR_VIDEO_EXPORT PyramidLayer {\n\t\tPyramidLayer() {}\n\t\tPyramidLayer(int _w, int _h, int _l, int cv_type = CV_32FC1) : l(_l), w(_w), h(_h) {\n\t\t\tvolume = cv::Mat(l, 3 * w*h, cv_type);\n\t\t}\n\t\tPyramidLayer(const cv::Mat & _volume, int _w, int _h) : w(_w), h(_h), l(_volume.rows) {\n\t\t\t_volume.convertTo(volume, CV_32FC1);\n\t\t}\n\n\t\tPyramidLayer operator+(const PyramidLayer & other);\n\t\tPyramidLayer operator-(const PyramidLayer & other);\n\n\t\tPyramidLayer clone() const {\n\t\t\tPyramidLayer out = *this;\n\t\t\tvolume.copyTo(out.volume);\n\t\t\treturn out;\n\t\t}\n\n\t\tcv::Mat getRGB(int frame, bool centered = false);\n\n\t\tvoid saveToVideoFile(const std::string & filename, double framerate);\n\n\t\tvoid copySizeFrom(const PyramidLayer & other) {\n\t\t\th = other.h;\n\t\t\tw = other.w;\n\t\t\tl = other.l;\n\t\t}\n\n\t\tvoid cout() const {\n\t\t\tstd::cout << l << \" \" << w << \" \" << h << std::endl;\n\t\t}\n\n\t\tvoid show(int s = 50) const;\n\t\tstatic void show(PyramidLayer A, PyramidLayer B, int s = 50);\n\t\tstatic void show(PyramidLayer A, PyramidLayer B, PyramidLayer C, int s = 50);\n\t\tstatic void show(PyramidLayer A, PyramidLayer B, PyramidLayer C, PyramidLayer D, int s = 50, bool centered = false);\n\t\tstatic void showDiff(PyramidLayer A, PyramidLayer B, int s = 50);\n\n\t\tcv::Mat volume;\n\t\tint w, h, l;\n\t};\n\n\n\tstruct SIBR_VIDEO_EXPORT PyramidParameters {\n\t\tPyramidParameters(int nlevels = 5, int temporal = 3, int spatial = 2, bool spatial_ds = true) :\n\t\t\tnum_levels(nlevels), temporal_radius(temporal), spatial_radius(spatial), splacialDS(spatial_ds) {}\n\t\tint num_levels; \n\t\tint temporal_radius;\n\t\tint spatial_radius;\n\t\tbool splacialDS = true;\n\t};\n\n\tSIBR_VIDEO_EXPORT PyramidLayer blur(const PyramidLayer & layer, const PyramidParameters &  params );\n\tSIBR_VIDEO_EXPORT PyramidLayer temporalBlur(const PyramidLayer & volume, const PyramidParameters & params, float scaling = 1);\n\tSIBR_VIDEO_EXPORT void temporalBlurInPlace(PyramidLayer & volume, const PyramidParameters & params, float scaling = 1);\n\n\tSIBR_VIDEO_EXPORT PyramidLayer decimate(const PyramidLayer & layer, const PyramidParameters &  params);\n\tSIBR_VIDEO_EXPORT PyramidLayer upscale(const PyramidLayer & layerUp, const PyramidLayer & layerDown, const PyramidParameters &  params);\n\tSIBR_VIDEO_EXPORT PyramidLayer downscale(const PyramidLayer & layer, const PyramidParameters &  params);\n\n\tSIBR_VIDEO_EXPORT cv::Mat slice(const PyramidLayer & layer, int i, int j, bool vertical = true, bool center = false);\n\n\t\n\tclass SIBR_VIDEO_EXPORT VideoGaussianPyramid {\n\tpublic:\n\t\tPyramidParameters params;\n\t\tstd::vector<PyramidLayer> layers;\n\n\t};\n\n\tclass SIBR_VIDEO_EXPORT VideoLaplacianPyramid {\n\tpublic:\n\n\tpublic:\n\t\tVideoLaplacianPyramid() {}\n\n\tpublic:\n\n\t\tPyramidParameters params;\n\n\t\tPyramidLayer collapse() const;\n\n\t\tstd::vector<PyramidLayer> layers;\n\t\t\n\t};\n\n\t\n\tSIBR_VIDEO_EXPORT VideoGaussianPyramid buildVideoGaussianPyramid(sibr::Video & vid, int nLevels, const PyramidParameters & params = {}, bool show = false);\n\tSIBR_VIDEO_EXPORT VideoGaussianPyramid buildVideoGaussianPyramid(const cv::Mat & volume, int w, int h, int nLevels, const PyramidParameters & params = {}, bool show = false);\n\n\tSIBR_VIDEO_EXPORT VideoLaplacianPyramid buildVideoLaplacianPyramid(PyramidLayer vid, int nLevels, const PyramidParameters & params = {}, bool show = false);\n\tSIBR_VIDEO_EXPORT VideoLaplacianPyramid buildVideoLaplacianPyramid(sibr::Video & vid, int nLevels, const PyramidParameters & params = {}, bool show = false);\n\n\tSIBR_VIDEO_EXPORT VideoLaplacianPyramid buildVideoLaplacianPyramidFullyReduced(PyramidLayer vid, int nLevels, const PyramidParameters & params = {}, bool show = false);\n\tSIBR_VIDEO_EXPORT void convertReducedVideoPyramidTo128(VideoLaplacianPyramid & vid);\n\n\tSIBR_VIDEO_EXPORT PyramidLayer videoLaplacianBlending(sibr::Video & vidA, sibr::Video & vidB, PyramidLayer mask_volume );\n\tSIBR_VIDEO_EXPORT PyramidLayer videoLaplacianBlending(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params = {}, bool show = false);\n\n\tstruct SIBR_VIDEO_EXPORT ContribData {\n\t\tPyramidLayer contrib, mask, partA, partB;\n\t};\n\n\tstruct SIBR_VIDEO_EXPORT FullContribData {\n\t\tContribData scaled;\n\t\tContribData notScaled;\n\t\tPyramidLayer result, inputA, inputB;\n\t};\n\n\tSIBR_VIDEO_EXPORT std::vector<FullContribData> videoLaplacianBlendingContrib(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params = {});\n\n\tSIBR_VIDEO_EXPORT void videoLaplacianBlendingDebug(PyramidLayer vidA, PyramidLayer vidB, PyramidLayer mask_volume, PyramidParameters params = {});\n\n\ttemplate<typename T, uint N> \n\tclass Histogram {\n\t\tusing Value = Vector<T, N>;\n\t\tusing Indice = Vector<uint, N>;\n\t\tusing Range = Vector<double, N>;\n\n\tpublic:\n\t\tHistogram(const Value & _min, const Value & _max, uint _numBins = 100)\n\t\t\t: min(_min.template cast<double>()), max(_max.template cast<double>()), numBins(_numBins) {\n\t\t\tRange diff = max - min;\n\t\t\tscaling = numBins * diff.cwiseInverse();\n\t\t\tbin_range = diff / numBins;\n\t\t}\n\n\t\tIndice whatBin(const Value & value) {\n\t\t\tIndice bin;\n\t\t\tfor (int c = 0; c < N; ++c) {\n\t\t\t\tbin[c] = sibr::clamp((int)(scaling[c]*(value[c] - min[c])), 0, (int)numBins - 1);\n\t\t\t}\n\t\t\treturn bin;\n\t\t}\n\n\t\tvoid addValue(const Value & value) {\n\t\t\t++bins[whatBin(value)];\n\t\t}\n\t\tvoid addValues(const std::vector<Value> & values) {\n\t\t\tfor (const Value & v : values) {\n\t\t\t\taddValue(v);\n\t\t\t}\n\t\t}\n\n\t\tIndice getModeIndice() const {\n\t\t\tIndice mode;\n\t\t\tuint mode_size = 0;\n\t\t\tfor (const auto & key_val : bins) {\n\t\t\t\tif (key_val.second > mode_size) {\n\t\t\t\t\tmode_size = key_val.second;\n\t\t\t\t\tmode = key_val.first;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mode;\n\t\t}\n\n\t\tValue getBinMiddle(const Indice & bin) const {\n\t\t\tValue out;\n\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\tout[c] = static_cast<T>(min[c] + bin_range[c] * (bin[c] + 0.5));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\tprotected:\n\t\tstd::map<Indice, uint> bins;\n\t\tRange max, min, scaling, bin_range;\n\t\tuint numBins = 50;\n\t};\n\n\ttemplate<typename T> \n\tclass Histogram<T, 1> {\n\t\tSIBR_CLASS_PTR(Histogram);\n\n\tpublic:\n\t\tHistogram(double _min, double _max, int _numBins = 100) : min(_min), max(_max), numBins(_numBins), bins(_numBins, 0) {\n\t\t\tscaling = numBins / (max - min);\n\t\t\tbin_range = (max - min) / numBins;\n\t\t}\n\n\t\tbool whatBin(T value, uint & bin) {\n\t\t\tint t = (int)(scaling * (value - min));\n\t\t\tif (t >= 0 && t <= ((int)numBins - 1)) {\n\t\t\t\tbin = t;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tvoid addValue(T value) {\n\t\t\tuint bin;\n\t\t\tif (whatBin(value, bin)) {\n\t\t\t\t++bins[bin];\n\t\t\t}\n\t\t}\n\n\t\tvoid addValues(const std::vector<T> & values) {\n\t\t\tfor (const T & v : values) {\n\t\t\t\taddValue(v);\n\t\t\t}\n\t\t}\n\n\t\tuint getModeIndice() const {\n\t\t\tuint mode, mode_size = 0;\n\t\t\tfor (const auto & [key, val] : bins) {\n\t\t\t\tif (val > mode_size) {\n\t\t\t\t\tmode_size = val;\n\t\t\t\t\tmode = key;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mode;\n\t\t}\n\n\t\tT getBinMiddle(uint bin) const {\n\t\t\treturn static_cast<T>(min + bin_range * (bin + 0.5));\n\t\t}\n\n\t\tstd::vector<float> normalized_values() const {\n\t\t\tfloat sum = 0;\n\t\t\tfor (uint b = 0; b < numBins; ++b) {\n\t\t\t\tsum += bins[b];\n\t\t\t}\n\t\t\tstd::vector<float> out(numBins);\n\t\t\tfor (uint b = 0; b < numBins; ++b) {\n\t\t\t\tout[b] = bins[b]/sum;\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\tprotected:\n\t\tstd::vector<uint> bins;\n\t\tdouble max, min, scaling, bin_range;\n\t\tuint numBins = 50;\n\t};\n\n\tusing Histo1f = Histogram<float, 1>;\n\tusing ColorHistogram = Histogram<uchar, 3>;\n\n\tstruct TimeHistogram {\n\n\t\tTimeHistogram(double _min, double _max, int _numBins) : numBins(_numBins), max(_max), min(_min) {\n\t\t\tassert(numBins > 0 && max > min);\n\t\t\tscaling = numBins / (max - min);\n\t\t\tbin_range = (max - min) / numBins;\n\t\t}\n\n\t\tvoid addValues(const std::vector<sibr::Vector3ub> & values) {\n\t\t\tfor (const sibr::Vector3ub & value : values) {\n\t\t\t\taddValue(value);\n\t\t\t}\n\t\t}\n\n\t\tsibr::Vector3ub getBinMiddle(const sibr::Vector3ub & bin) const {\n\t\t\tsibr::Vector3ub out;\n\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\tout[c] = sibr::clamp((int)(min + bin_range * (bin[c] + 0.5)), 0, 255);\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\tsibr::Vector3ub getHMode() const {\n\t\t\tsibr::Vector3ub mode;\n\t\t\tint mode_size = 0;\n\t\t\tfor (const auto & key_val : bins) {\n\t\t\t\tif (key_val.second > mode_size) {\n\t\t\t\t\tmode_size = key_val.second;\n\t\t\t\t\tmode = key_val.first;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mode;\n\t\t}\n\n\t\tvoid addValue(const sibr::Vector3ub & value) {\n\t\t\t++bins[whatBin(value)];\n\t\t}\n\n\t\tsibr::Vector3ub whatBin(const sibr::Vector3ub & value) {\n\t\t\tsibr::Vector3ub bin;\n\t\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\t\tbin[c] = sibr::clamp((int)(scaling*(value[c] - min)), 0, numBins - 1);\n\t\t\t}\n\t\t\treturn bin;\n\t\t}\n\n\t\tvoid computeSortedBins() {\n\t\t\tstd::vector<std::pair<int, sibr::Vector3ub>> all_bins;\n\t\t\tint num_elts = 0;\n\t\t\tfor (const auto & bin : bins) {\n\t\t\t\tnum_elts += bin.second;\n\t\t\t\tall_bins.push_back({ bin.second,bin.first });\n\t\t\t}\n\t\t\tstd::sort(all_bins.begin(), all_bins.end());\n\t\t\tfloat cdf = 0; \n\t\t\tfor (int i = (int)all_bins.size() - 1; i >= 0; --i) {\n\t\t\t\tfloat f = all_bins[i].first /(float)num_elts;\n\t\t\t\t//std::cout << \"(\" << all_bins[i].first << \", \" << (int)all_bins[i].second[0] << \"),\";\n\t\t\t\t\n\t\t\t\tsorted_bins[all_bins[i].second] = cdf;\n\t\t\t\tcdf = std::min(cdf + f, 1.0f);\n\t\t\t}\n\t\t\t//std::cout << std::endl;\n\t\t}\n\t\tstd::map<sibr::Vector3ub, int> bins;\n\t\tstd::map<sibr::Vector3ub, float> sorted_bins;\n\t\tdouble max, min, scaling, bin_range;\n\t\tint numBins = 50;\n\t};\n\n\tclass SIBR_VIDEO_EXPORT VideoUtils {\n\n\tpublic:\n\t\tstatic void simpleFlowViz(cv::VideoCapture & cap, float ratio);\n\t\tstatic void simpleFlowSave(cv::VideoCapture & cap, float ratio, std::function<std::string(int flow_id)> naming_f);\n\n\t\ttemplate<typename FunType, typename... OtherArgsTypes>\n\t\tstatic void loopAndDisplay(cv::VideoCapture & cap, float ratio, FunType f, const OtherArgsTypes &... args);\n\n\t\tstatic void deepFlowViz(cv::VideoCapture & cap, float ratio);\n\n\t\tstatic cv::Mat getGrey(const cv::Mat & mat);\n\n\t\tstatic cv::Mat getFlowViz(const cv::Mat & flow);\n\n\t\tstatic cv::Mat cropFromSize(const cv::Mat & mat, const sibr::Vector2i & size);\n\n\t\tstatic void getMeanVariance(cv::VideoCapture & cap, cv::Mat & outMean, cv::Mat & outVariance, const sibr::Vector2i & finalSize);\n\t\tstatic void getMeanVariance2(cv::VideoCapture & cap, cv::Mat & outMean, cv::Mat & outVariance, const sibr::Vector2i & finalSize, float starting_point_s = 0);\n\n\t\tstatic cv::Mat getMedian(sibr::Video & vid, float time_skiped_begin = 0, float time_skiped_end = 0);\n\t\tstatic cv::Mat3b getMedian(const std::string & path, float time_percentage_crop  = 0);\n\n\t\tstatic cv::Mat getBackgroundImage(sibr::Video & vid, int numBins = 50, float time_skip_begin = 0, float time_skip_end = 0);\n\t\tstatic cv::Mat getBackgroundImage(const cv::Mat volume, int w, int h, int numBins = 50);\n\t\tstatic void getBackGroundVideo(sibr::Video & vid, PyramidLayer & out_mask, PyramidLayer & out_video, cv::Mat & mask,\n\t\t\tconst sibr::ImageRGB & mean = {}, int threshold = 75, int numBins = 50, float time_skip_begin = 0, float time_skip_end = 0);\n\n\t\tstatic sibr::Volume1u getBackgroundVolume(const sibr::Volume3u & volume, int threshold = 75, int numBins = 150);\n\t\tstatic sibr::Volume1f getBackgroundVolumeF(const sibr::Volume3u & volume, int numBins = 150);\n\n\t\tstatic void computeSaveSimpleFlow(sibr::Video & vid, bool viz = false);\n\n\t\tstatic cv::Mat getTemporalSpatialRatio(sibr::Video & vid, PyramidLayer & out_ratio, const sibr::ImageRGB & spatial_ratio,\n\t\t\tint numBins = 50, float time_skip_begin = 0, float time_skip_end = 0);\n\n\t\tstatic cv::Mat getLaplacian(cv::Mat mat, int size = 3, bool smooth = false, bool absolute = false);\n\n\t\tstatic cv::Mat getCanny(cv::Mat mat);\n\n\n\t\tstatic void computeSaveVideoMaskF(Video & vid, int threshold, bool viz = false);\n\t\tstatic void computeSaveVideoMaskBlur(Video & vid, int time_window);\n\n\t\tstatic int rotationAngleFromMetadata(const std::string & videoPath);\n\n\t\tstatic void ECCtransform(cv::Mat matA, cv::Mat matB, cv::Mat & correctedB, cv::Mat & diff, int cvMotion);\n\n\t\tstatic void smallAlignmentVideo(sibr::Video & vid, const std::string & outputVidPath, bool viz = false);\n\t\tstatic void smallAlignmentVideo2(sibr::Video & vid, const std::string & outputVidPath, bool viz = false);\n\n\t\tstatic int codec_ffdshow;\n\t\tstatic int codec_OpenH264;\n\t\tstatic int codec_OpenH264_fallback;\n\n\tprotected:\n\t\tstatic cv::Mat applyFlow(const cv::Mat & prev, const cv::Mat & flow);\n\n\t\tstatic void simpleFlow(cv::VideoCapture & cap, float ratio,\n\t\t\tstd::function<bool(cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id)> f,\n\t\t\tstd::function<void(void)> end_function = []() {}\n\t\t);\n\n\t\tstatic void deepFlow(cv::VideoCapture & cap, float ratio,\n\t\t\tstd::function<bool(cv::Mat prev, cv::Mat next, cv::Mat flow, int flow_id)> f,\n\t\t\tstd::function<void(void)> end_function = []() {}\n\t\t);\n\t};\n\n\ttemplate<typename FunType, typename... OtherArgsTypes>\n\tvoid VideoUtils::loopAndDisplay(cv::VideoCapture & cap, float ratio, FunType f, const OtherArgsTypes &... args)\n\t{\n\t\tcv::Mat next;\n\t\tstatic_assert(std::is_same_v<decltype(f(next, args...)), cv::Mat>, \"FunType must return cv::Mat\");\n\n\t\tcap.set(cv::VideoCaptureProperties::CAP_PROP_POS_FRAMES, 0);\n\n\t\twhile (true) {\n\t\t\tcap >> next;\n\t\t\tif (next.empty()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tauto size = cv::Size((int)(ratio*next.size().width), (int)(ratio*next.size().height));\n\t\t\tcv::resize(next, next, size);\n\t\t\tcv::imshow(\"imshow\", f(next, args...));\n\t\t\tif (cv::waitKey(10) == 27) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tcv::destroyAllWindows();\n\t}\n\n\t/** }@ */\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/video/sibr_video.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_video sibr_video\n\n\t\\brief Video loading, processing and display. \n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(sibr_view)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB SHADERS \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\" \"shaders/*.fp\" \"shaders/*.vp\" \"shaders/*.gp\")\nsource_group(\"Source Files\\\\shaders\" FILES ${SHADERS})\n\nfile(GLOB INTERFACE_SOURCES \"interface/*.cpp\" \"interface/*.h\" )\nsource_group(\"Source Files\\\\interface\" FILES ${INTERFACE_SOURCES})\n\nfile(GLOB SOURCES\n\t\"*.cpp\" \"*.h\" \"*.hpp\"\n\t\"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\"  \"shaders/*.fp\" \"shaders/*.vp\" \"shaders/*.gp\"\n\t\"interface/*.cpp\" \"interface/*.h\"\n\t)\n\n## Specify target rules\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\n\ninclude_directories(\n\t${Boost_INCLUDE_DIRS}\n\t${imgui_INCLUDE_DIRS}\n)\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tOpenMP::OpenMP_CXX\n\timgui\n\tsibr_graphics\n\tsibr_assets\n\tsibr_raycaster\n\tsibr_scene\n\tsibr_video\n)\n\nadd_definitions( -DSIBR_VIEW_EXPORTS -DBOOST_ALL_DYN_LINK  )\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${SIBR_FOLDER})\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tSHADERS \"${SHADERS}\"\n\tRSC_FOLDER \"core\"\n    #COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/Config.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"core/graphics/Config.hpp\"\r\n\r\n\r\n//// Export Macro (used for creating DLLs) ////\r\n# ifdef SIBR_OS_WINDOWS\r\n#  ifdef SIBR_STATIC_VIEW_DEFINE\r\n#    define SIBR_VIEW_EXPORT\r\n#    define SIBR_NO_VIEW_EXPORT\r\n#  else\r\n#    ifndef SIBR_VIEW_EXPORT\r\n#      ifdef SIBR_VIEW_EXPORTS\r\n          /* We are building this library */\r\n#        define SIBR_VIEW_EXPORT __declspec(dllexport)\r\n#      else\r\n          /* We are using this library */\r\n#        define SIBR_VIEW_EXPORT __declspec(dllimport)\r\n#      endif\r\n#    endif\r\n#    ifndef SIBR_NO_EXPORT\r\n#      define SIBR_NO_EXPORT \r\n#    endif\r\n#  endif\r\n# else\r\n#  define SIBR_VIEW_EXPORT\r\n# endif\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/DatasetView.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"DatasetView.hpp\"\n\nnamespace sibr {\n\t\n\tDatasetView::DatasetView(const BasicIBRScene & scene, const Vector2u & defaultRenderingRes, const Vector2i & defaultViewRes)\n\t\t: MultiViewBase(defaultViewRes)\n\t{\n\t\tconst auto & input_cams = scene.cameras()->inputCameras();\n\t\tconst auto & input_images = scene.images()->inputImages();\n\n\t\tif (input_images.size() != input_cams.size()) {\n\t\t\tSIBR_ERR << \"cams not matching input images\";\n\n\t\t}\n\t\tconst std::string mmm_str = \"mesh\";\n\t\tMultiMeshManager::Ptr mmm(new MultiMeshManager(mmm_str));\n\t\tmmm->addMesh(\"proxy\", scene.proxies()->proxyPtr());\t\t\n\t\tmmm->getCameraHandler().fromCamera(*input_cams[0]);\n\t\tfor (int i = 0; i < (int)input_cams.size(); ++i) {\n\t\t\tcams.push_back(*input_cams[i]);\n\t\t}\n\n\t\tconst std::string grid_str = \"grid\";\n\t\tImagesGrid::Ptr grid(new ImagesGrid());\n\t\tgrid->addImageLayer(\"input images\", input_images);\n\n\t\taddSubView(meshSubViewStr, mmm, defaultRenderingRes);\n\t\taddSubView(gridSubViewStr, grid, defaultRenderingRes);\n\t}\n\n\tvoid DatasetView::onGui(Window & win)\n\t{\n\t}\n\n\tvoid DatasetView::onUpdate(Input & input)\n\t{\n\t\tMultiViewBase::onUpdate(input);\n\n\n\t\tInput meshInput = Input::subInput(input, getMeshView().viewport);\n\t\tif (meshInput.key().isActivated(Key::LeftControl) && meshInput.mouseButton().isActivated(Mouse::Right)) {\n\t\t\tRaycastingCamera cam = RaycastingCamera(getMMM()->getCameraHandler().getCamera());\n\t\t\tRay ray = cam.getRay(meshInput.mousePosition().cast<float>());\n\t\t\tauto hit = proxyData().raycaster->intersect(ray);\n\n\t\t\tif (hit.hitSomething()) {\n\t\t\t\tcurrentRepro.point3D = ray.at(hit.dist());\n\t\t\t\tcurrentRepro.active = true;\n\t\t\t\tcurrentRepro.repros.clear();\n\t\t\t\trepro(currentRepro);\n\t\t\t\tgetGrid()->addPixelsToHighlight(\"zinputRepro\", { }, { 1,0,0 }, 0.25f);\n\t\t\t}\n\t\t}\n\n\t\tInput gridInput = Input::subInput(input, getGridView().viewport);\n\t\tif (gridInput.key().isActivated(Key::LeftControl) && gridInput.mouseButton().isActivated(Mouse::Right)) {\n\t\t\tconst auto & pix = getGrid()->getCurrentPixel();\n\t\t\tif (pix) {\n\t\t\t\tRay ray = cams[pix.im].getRay(pix.pos.cast<float>());\n\t\t\t\tauto hit = proxyData().raycaster->intersect(ray);\n\t\t\t\tif (hit.hitSomething()) {\n\t\t\t\t\tcurrentRepro.point3D = ray.at(hit.dist());\n\t\t\t\t\tcurrentRepro.active = true;\n\t\t\t\t\tcurrentRepro.repros.clear();\n\t\t\t\t\trepro(currentRepro);\n\t\t\t\t\tgetGrid()->addPixelsToHighlight(\"zinputRepro\", { pix }, { 1,0,0 }, 0.25f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t}\n\n\tvoid DatasetView::onRender(Window & win)\n\t{\n\t\tif (currentRepro) {\n\t\t\tdisplayRepro(currentRepro);\n\t\t}\n\n\t\tMultiViewBase::onRender(win);\n\t}\n\n\tvoid DatasetView::repro(ReprojectionData & data)\n\t{\n\t\tconst Vector3f & pt = data.point3D;\n\t\tfor (int im = 0; im<(int)cams.size(); ++im) {\n\t\t\tconst auto & cam = cams[im];\n\t\t\tif (!cam.frustumTest(pt)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tVector3f pt2d = cam.projectImgSpaceInvertY(pt);\n\n\t\t\tif (data.occlusionTest) {\n\t\t\t\tfloat dist = (cam.position() - pt).norm();\n\t\t\t\tRay ray = Ray(pt, (cam.position() - pt).normalized());\n\t\t\t\tauto hit = proxyData().raycaster->intersect(ray, 0.01f);\n\t\t\t\tif (hit.hitSomething() && std::abs(hit.dist() - dist) / dist > 0.01f) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdata.repros.push_back(MVpixel(im, pt2d.xy().cast<int>()));\n\t\t}\n\t}\n\n\tvoid DatasetView::displayRepro(const ReprojectionData & data)\n\t{\n\t\tgetMMM()->addPoints(\"repro 3D point\", { data.point3D });\n\n\t\tMesh::Ptr reproLines(new Mesh());\n\t\tstd::vector<MVpixel> pixs;\n\t\tstd::vector<int> repro_imgs;\n\t\tfor (const auto & rep : data.repros) {\n\t\t\tconst auto & cam = cams[rep.im];\n\t\t\tMesh reproLine;\n\t\t\treproLine.vertices({ cam.position(), data.point3D });\n\t\t\treproLine.triangles({ 0,0,1 });\n\t\t\treproLines->merge(reproLine);\n\t\t\trepro_imgs.push_back(rep.im);\n\t\t}\n\n\t\tgetMMM()->addMeshAsLines(\"repro ines\", reproLines).setColor({ 1,0,1 });\n\t\tgetGrid()->addPixelsToHighlight(\"repros\", data.repros, { 0,0,1 }, 0.25f);\n\t\t//getGrid()->addImagesToHighlight(\"reproImgs\", repro_imgs, { 0,1,0 }, 0.1f);\n\t}\n\n\tMultiViewBase::BasicSubView & DatasetView::getMeshView()\n\t{\n\t\treturn _subViews[meshSubViewStr];\n\t}\n\n\tMultiViewBase::BasicSubView & DatasetView::getGridView()\n\t{\n\t\treturn _subViews[gridSubViewStr];\n\t}\n\n\tMultiMeshManager::Ptr DatasetView::getMMM()\n\t{\n\t\treturn std::static_pointer_cast<MultiMeshManager>(getMeshView().view);\n\t}\n\n\tImagesGrid::Ptr sibr::DatasetView::getGrid()\n\t{\n\t\treturn std::static_pointer_cast<ImagesGrid>(getGridView().view);\n\t}\n\n\tMeshData & DatasetView::proxyData()\n\t{\n\t\treturn getMMM()->getMeshData(\"proxy\");\n\t}\n\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/DatasetView.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"MultiViewManager.hpp\"\n#include \"SceneDebugView.hpp\"\n#include \"ImagesGrid.hpp\"\n#include \"core/scene/BasicIBRScene.hpp\"\n\nnamespace sibr {\n\n\t/** Visualize and explore a MVS dataset. \n\tAllow reprojections between one of the input images, scene geometry and other images.\n\t \\ingroup sibr_view\n\t */\n\tclass SIBR_VIEW_EXPORT DatasetView \n\t\t: public MultiViewBase\n\t{\n\t\tSIBR_CLASS_PTR(DatasetView);\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t * \\param scene the IBR scene\n\t\t * \\param defaultRenderingRes the mesh view rendering resolution\n\t\t * \\param defaultViewRes the window/view resolution\n\t\t */\n\t\tDatasetView(const BasicIBRScene & scene, const Vector2u & defaultRenderingRes = { 0,0 }, const Vector2i & defaultViewRes = { 800, 600 });\n\n\t\t/** Reprojection mode. */\n\t\tenum ReprojectionMode { NONE, IMAGE_TO_IMAGE, MESH_TO_IMAGE };\n\n\t\t/** Update the GUI. */\n\t\tvirtual void\tonGui(Window& win) override;\n\n\t\t/** Update state based on user input.\n\t\t *\\param input the view input\n\t\t */\n\t\tvirtual void\tonUpdate(Input& input) override;\n\n\t\t/** Perform rendering.\n\t\t *\\param win the destination window\n\t\t **/\n\t\tvirtual void\tonRender(Window& win) override;\n\n\tprotected:\n\n\t\t/** Contain data related to the reprojection of a point in input images. */\n\t\tstruct ReprojectionData {\n\n\t\t\t/** \\return true if point is active */\n\t\t\toperator bool() const { return active; }\n\n\t\t\tstd::vector<MVpixel> repros; ///< Store reprojected pixel positions.\n\t\t\tMVpixel image_input; ///< Initial selected position.\n\n\t\t\tVector3f point3D; ///< World space point.\n\t\t\tbool occlusionTest = true; ///< Should occlusion test be applied.\n\t\t\tbool active = false; ///< Is the point active.\n\t\t};\n\n\t\t/** populate reprojection information.\n\t\t\\param data the info to populate\n\t\t*/\n\t\tvoid repro(ReprojectionData & data);\n\t\t\n\t\t/** Visualize the reprojection information.\n\t\t\\param data the reprojection to display\n\t\t*/\n\t\tvoid displayRepro(const ReprojectionData & data);\n\n\t\t/** \\return the mesh subview. */\n\t\tBasicSubView & getMeshView();\n\n\t\t/** \\return the images subview. */\n\t\tBasicSubView & getGridView();\n\n\t\t/** \\return the mesh display manager. */\n\t\tMultiMeshManager::Ptr getMMM();\n\n\t\t/** \\return the image grid manager. */\n\t\tImagesGrid::Ptr getGrid();\n\n\t\t/** \\return the mesh display data. */\n\t\tMeshData & proxyData();\n\n\t\tstd::vector<RaycastingCamera> cams; ///< Input cameras.\n\t\tReprojectionData currentRepro; ///< Current selected reprojection.\n\t\tReprojectionMode reproMode = MESH_TO_IMAGE; ///< Current reprojection mode.\n\n\t\tconst std::string meshSubViewStr = \"dataset view - mesh\";\n\t\tconst std::string gridSubViewStr = \"grid\";\n\n\t\t\n\t};\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/FPSCamera.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include \"FPSCamera.hpp\"\r\n#include <boost/filesystem.hpp>\r\n#include \"core/graphics/Input.hpp\"\r\n#include \"core/graphics/Viewport.hpp\"\r\n#include \"core/graphics/Window.hpp\"\r\n#include \"core/view/UIShortcuts.hpp\"\r\n#include \"core/graphics/GUI.hpp\"\r\n\r\n\r\n# define IBRVIEW_CAMSPEED 1.f\r\n\r\nnamespace sibr {\r\n\r\n\tFPSCamera::FPSCamera(void) : _hasBeenInitialized(false) \r\n\t{ \r\n\t\tUIShortcuts::global().add(\"[FPS camera] j\", \"rotate camera -Y (look left)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] l\", \"rotate camera +Y (look right)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] i\", \"rotate camera +X (look up)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] k\", \"rotate camera -X (look down)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] u\", \"rotate camera +Z \");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] o\", \"rotate camera -Z \");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] w\", \"move camera -Z (move forward)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] s\", \"move camera +Z (move backward)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] a\", \"move camera -X (strafe left)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] d\", \"move camera +X (strafe right)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] q\", \"move camera -Y (move down)\");\r\n\t\tUIShortcuts::global().add(\"[FPS camera] e\", \"move camera +Y (move up)\");\r\n\t/*\r\n\t\t_speedFpsCam = 1.0f;\r\n\t\t_speedRotFpsCam = 1.0f;\r\n\t\t_useAcceleration = true; */\r\n\t\t_speedFpsCam = 0.3f;\r\n\t\t_speedRotFpsCam = 1.0f;\r\n\t\t_useAcceleration = false; \r\n\t}\r\n\r\n\tvoid FPSCamera::fromCamera( const sibr::InputCamera & cam)\r\n\t{\r\n\t\t_currentCamera = cam;\r\n\t\t_hasBeenInitialized = true;\r\n\t}\r\n\r\n\tvoid FPSCamera::update(const sibr::Input & input, float deltaTime) {\r\n\t\r\n\t\tif (!_hasBeenInitialized) { return; }\r\n\t\t// Read input and update camera.\r\n\t\tmoveUsingWASD(input, deltaTime);\r\n\t\tmoveUsingMousePan(input, deltaTime);\r\n\t}\r\n\r\n\tvoid FPSCamera::snap(const std::vector<InputCamera::Ptr> & cams){\r\n\t\tsibr::Vector3f sumDir(0.f, 0.f, 0.f);\r\n\t\tsibr::Vector3f sumUp(0.f, 0.f, 0.f);\r\n\t\tfor (const auto& cam: cams)\r\n\t\t{\r\n\t\t\tfloat dist = 1.0f/std::max(1e-6f,distance(_currentCamera.position(), cam->position()));\r\n\t\t\tsumDir += dist * cam->dir();\r\n\t\t\tsumUp  += dist * cam->up();\r\n\t\t}\r\n\t\tMatrix4f m = lookAt(Vector3f(0, 0, 0), sumDir, sumUp);\r\n\t\t_currentCamera.rotation(quatFromMatrix(m));\r\n\t}\r\n\r\n\tvoid FPSCamera::update(const sibr::Input & input, const float deltaTime, const Viewport & viewport)\r\n\t{\r\n\t\tupdate(input, deltaTime);\r\n\t}\r\n\r\n\tconst sibr::InputCamera & FPSCamera::getCamera( void ) const\r\n\t{\r\n\t\tif( !_hasBeenInitialized ){\r\n\t\t\tSIBR_ERR << \" FPS Camera : camera not initialized before use\" << std::endl\r\n\t\t\t\t<< \"\\t you should use either fromMesh(), fromCamera() or load() \" << std::endl;\r\n\t\t}\r\n\t\treturn _currentCamera;\r\n\t}\r\n\r\n\tvoid FPSCamera::setSpeed(const float speed, const float angular) {\r\n\t\t_speedFpsCam = speed;\r\n\t\tif(angular != 0.0f) {\r\n\t\t\t_speedRotFpsCam = angular;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid FPSCamera::onGUI(const std::string& suffix) {\r\n\t\tif(ImGui::Begin(suffix.c_str())) {\r\n\t\t\tImGui::PushScaledItemWidth(130);\r\n\t\t\tImGui::Checkbox(\"Acceleration\", &_useAcceleration);\r\n\t\t\tImGui::SameLine();\r\n\t\t\tif(!_useAcceleration) {\r\n\t\t\t\tImGui::InputFloat(\"Speed\", &_speedFpsCam, 0.1f, 0.5f);\r\n\t\t\t\tImGui::SameLine();\r\n\t\t\t}\r\n\t\t\tImGui::InputFloat(\"Rot. speed\", &_speedRotFpsCam, 0.1f, 0.5f);\r\n\t\t\tImGui::PopItemWidth();\r\n\t\t}\r\n\t\tImGui::End();\r\n\t}\r\n\r\n\r\n\tvoid FPSCamera::moveUsingWASD(const sibr::Input& input, float deltaTime)\r\n\t{\r\n\r\n\r\n\t\tif (input.key().isActivated(sibr::Key::LeftControl)) { return; }\r\n\r\n\t\tfloat camSpeed = 2.f * deltaTime\t\t* IBRVIEW_CAMSPEED;\r\n\t\tif (_currentCamera.ortho()) {\r\n\t\t\tcamSpeed *= 5.0f;\r\n\t\t}\r\n\t\tfloat camRotSpeed = 30.f * deltaTime\t* IBRVIEW_CAMSPEED;\r\n\t\t//float camSpeed = 0.1f;\r\n\t\t//float camRotSpeed = 1.f;\r\n\r\n\t\tsibr::Vector3f move(0, 0, 0);\r\n\r\n\t\tmove.x() -= input.key().isActivated(sibr::Key::A) ? camSpeed : 0.f;\r\n\t\tmove.x() += input.key().isActivated(sibr::Key::D) ? camSpeed : 0.f;\r\n\t\tmove.z() -= input.key().isActivated(sibr::Key::W) ? camSpeed : 0.f;\r\n\t\tmove.z() += input.key().isActivated(sibr::Key::S) ? camSpeed : 0.f;\r\n\t\tmove.y() -= input.key().isActivated(sibr::Key::Q) ? camSpeed : 0.f;\r\n\t\tmove.y() += input.key().isActivated(sibr::Key::E) ? camSpeed : 0.f;\r\n\r\n\t\t// If the acceleration effect is enabled, we alter the speed along a move.\r\n\t\tif(_useAcceleration) {\r\n\t\t\tif (move.isNull() == true) {\r\n\t\t\t\t_speedFpsCam = 1.f;\r\n\t\t\t} else {\r\n\t\t\t\t_speedFpsCam *= 1.02f;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tsibr::Vector3f pivot(0, 0, 0);\r\n\r\n\t\tcamRotSpeed *= _speedRotFpsCam;\r\n\t\tpivot[1] += input.key().isActivated(sibr::Key::J) ? camRotSpeed : 0.f;\r\n\t\tpivot[1] -= input.key().isActivated(sibr::Key::L) ? camRotSpeed : 0.f;\r\n\t\tpivot[0] -= input.key().isActivated(sibr::Key::K) ? camRotSpeed : 0.f;\r\n\t\tpivot[0] += input.key().isActivated(sibr::Key::I) ? camRotSpeed : 0.f;\r\n\t\tpivot[2] -= input.key().isActivated(sibr::Key::O) ? camRotSpeed : 0.f;\r\n\t\tpivot[2] += input.key().isActivated(sibr::Key::U) ? camRotSpeed : 0.f;\r\n\r\n\t\tif (_currentCamera.ortho()) {\r\n\t\t\tif (input.key().isActivated(sibr::Key::Z)) {\r\n\t\t\t\t_currentCamera.orthoRight(_currentCamera.orthoRight()/1.1f);\r\n\t\t\t\t_currentCamera.orthoTop(_currentCamera.orthoTop()/1.1f);\r\n\t\t\t\t_speedRotFpsCam /= 1.1f;\r\n\t\t\t}\r\n\t\t\telse if (input.key().isActivated(sibr::Key::X)) {\r\n\t\t\t\t_currentCamera.orthoRight(_currentCamera.orthoRight()*1.1f);\r\n\t\t\t\t_currentCamera.orthoTop(_currentCamera.orthoTop()*1.1f);\r\n\t\t\t\t_speedRotFpsCam *= 1.1f;\r\n\t\t\t}\r\n\t\t}\r\n\t\t_currentCamera.translate(move*_speedFpsCam, _currentCamera.transform());\r\n\t\t_currentCamera.rotate(pivot, _currentCamera.transform());\r\n\t}\r\n\r\n\tvoid FPSCamera::moveUsingMousePan( const sibr::Input& input, float deltaTime )\r\n\t{\r\n\t\t\r\n\t\tfloat speed = 0.05f*deltaTime;\r\n\t\tsibr::Vector3f move(\r\n\t\t\tinput.mouseButton().isActivated(sibr::Mouse::Left)? input.mouseDeltaPosition().x()*speed : 0.f,\r\n\t\t\tinput.mouseButton().isActivated(sibr::Mouse::Right)? input.mouseDeltaPosition().y()*speed : 0.f,\r\n\t\t\tinput.mouseButton().isActivated(sibr::Mouse::Middle)? input.mouseDeltaPosition().y()*speed : 0.f\r\n\t\t\t);\r\n\t\t_currentCamera.translate(move, _currentCamera.transform());\r\n\r\n\t}\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/FPSCamera.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <memory>\n#include <fstream>\n\n#include \"Config.hpp\"\n#include \"core/graphics/Shader.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n#include \"ICameraHandler.hpp\"\n\n\nnamespace sibr {\n\n\tclass Viewport;\n\tclass Mesh;\n\tclass Input;\n\n\t/** Interactive camera that can be moved using WASD keys.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT FPSCamera : public ICameraHandler\n\t{\n\t\n\tpublic:\n\n\t\t/**\n\t\t Default constructor.\n\t\t*/\n\t\tFPSCamera( void );\n\n\t\t/**\n\t\t\tSetup the FPS camera so that it has the same pose as the argument camera. \n\t\t\\param cam the reference camera\n\t\t*/\n\t\tvoid fromCamera(const sibr::InputCamera & cam);\n\n\t\t/**\n\t\t\tUpdate the FPS camera based on the user input (keyboard). \n\t\t\\param input the user input\n\t\t\\param deltaTime time elapsed since last update\n\t\t*/\n\t\tvoid update( const sibr::Input & input, float deltaTime);\n\n\t\t/** Move to a camera position/orientation that is a distance-wieghted combination of the given cameras.\n\t\t\\param cams the cameras list.\n\t\t*/\n\t\tvoid snap(const std::vector<InputCamera::Ptr> & cams);\n\n\t\t// ICameraHandler interface\n\n\t\t/** Update the FPS camera based on the user input.\n\t\t\\param input the user input\n\t\t\\param deltaTime time elapsed since last update\n\t\t\\param viewport the view viewport\n\t\t*/\n\t\tvirtual void update(const sibr::Input & input, const float deltaTime, const Viewport & viewport) override;\n\n\t\t/** \\return the current camera */\n\t\tvirtual const sibr::InputCamera & getCamera( void ) const override;\n\n\t\t/** Set the camera speed.\n\t\t\\param speed translation speed\n\t\t\\param angular rotation speed\n\t\t*/\n\t\tvoid setSpeed(const float speed, const float angular = 0.0);\n\n\t\t/** Dispaly GUI.\n\t\t\\param suffix Panel title suffix\n\t\t*/\n\t\tvirtual void onGUI(const std::string& suffix) override;\n\n\tprivate:\n\n\t\tfloat _speedFpsCam, _speedRotFpsCam; ///< Camera speeds.\n\t\tbool _hasBeenInitialized; ///< Has the camera been initialized.\n\t\tsibr::InputCamera _currentCamera; ///< Current camera.\n\t\tbool _useAcceleration; ///< Should the camera accelerate the longer keys are pressed.\n\n\t\t/** Update camera pose based on keys. \n\t\t\\param input user input\n\t\t\\param deltaTime elapsed time\n\t\t*/\n\t\tvoid moveUsingWASD( const sibr::Input& input, float deltaTime);\n\n\t\t/** Update camera pose based on mouse.\n\t\t\\param input user input\n\t\t\\param deltaTime elapsed time\n\t\t*/\n\t\tvoid moveUsingMousePan( const sibr::Input& input, float deltaTime);\n\t\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/FPSCounter.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include <fstream>\r\n#include <memory>\r\n\r\n#include \"core/view/FPSCounter.hpp\"\r\n#include \"core/assets/Resources.hpp\"\r\n\r\n#include <imgui/imgui.h>\r\n#include \"core/graphics/GUI.hpp\"\r\n#include \"imgui/imgui_internal.h\"\r\n\r\n#define SIBR_FPS_SMOOTHING 60\r\n\r\n\r\nnamespace sibr\r\n{\r\n\r\n\tint FPSCounter::_count = 0;\r\n\r\n\tFPSCounter::FPSCounter(const bool overlayed){\r\n\t\t_frameTimes = std::vector<float>(SIBR_FPS_SMOOTHING, 0.0f);\r\n\t\t_frameIndex = 0;\r\n\t\t_frameTimeSum = 0.0f;\r\n\t\t_lastFrameTime = std::chrono::high_resolution_clock::now();\r\n\t\t_position = sibr::Vector2f(-1, -1);\r\n\t\tif (overlayed) {\r\n\t\t\t_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings;\r\n\t\t} else {\r\n\t\t\t_flags = 0;\r\n\t\t}\r\n\t\t_hidden = false;\r\n\t\t_name = \"Metrics##\" + std::to_string(_count);\r\n\t\t++_count;\r\n\t}\r\n\r\n\tvoid FPSCounter::init(const sibr::Vector2f & position){\r\n\t\t_position = position;\r\n\t}\r\n\t\r\n\tvoid FPSCounter::render(){\r\n\r\n\t\tif (_hidden) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (_position.x() != -1) {\r\n\t\t\tImGui::SetNextWindowPos(ImVec2(_position.x(), _position.y()));\r\n\t\t\tImGui::SetNextWindowSize(ImVec2(0, ImGui::GetTitleBarHeight()), ImGuiCond_FirstUseEver);\r\n\t\t}\r\n\t\t\r\n\t\tImGui::SetNextWindowBgAlpha(0.5f);\r\n\t\tif (ImGui::Begin(_name.c_str(), nullptr, _flags))\r\n\t\t{\r\n\t\t\tImGui::SetWindowFontScale(1.8);\r\n\t\t\tconst float frameTime = _frameTimeSum / float(SIBR_FPS_SMOOTHING);\r\n\t\t\tImGui::Text(\"%.2f (%.2f ms)\", 1.0f/ frameTime, frameTime*1000.0f);\r\n\t\t\tImGui::SetWindowFontScale(1);\r\n\t\t}\r\n\r\n\t\tImGui::End();\r\n\t}\r\n\t\r\n\tvoid FPSCounter::update(float deltaTime){\r\n\t\t_frameTimeSum -= _frameTimes[_frameIndex];\r\n\t\t_frameTimeSum += deltaTime;\r\n\t\t_frameTimes[_frameIndex] = deltaTime;\r\n\t\t_frameIndex = (_frameIndex + 1) % SIBR_FPS_SMOOTHING;\r\n\t}\r\n\t\r\n\tvoid FPSCounter::update(bool doRender) {\r\n\t\tauto now = std::chrono::high_resolution_clock::now();\r\n\t\tfloat deltaTime = std::chrono::duration<float>(now - _lastFrameTime).count();\r\n\t\tupdate(deltaTime);\r\n\t\tif (doRender) {\r\n\t\t\trender();\r\n\t\t}\r\n\t\t_lastFrameTime = now;\r\n\t\t\r\n\t}\r\n\r\n} // namespace sibr \r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/FPSCounter.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <vector>\n# include \"core/view/Config.hpp\"\n# include <core/system/Vector.hpp>\n\n# include <chrono>\n\nnamespace sibr\n{\n\n\t/** Provde a small GUI panel to display the current framerate, smoothed over multiple frames.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT FPSCounter\n\t{\n\tpublic:\n\t\ttypedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point; ///< Time type.\n\n\t\t/** Constructor.\n\t\t\\param overlayed if true, the GUI panel is always displayed on top of all others. \n\t\t*/\n\t\tFPSCounter(const bool overlayed = true);\n\n\t\t/** Setup at a given screen location.\n\t\t\\param position the position on screen (in pixels).\n\t\t*/\n\t\tvoid init(const sibr::Vector2f & position);\n\n\t\t/** generate the ImGui panel. */\n\t\tvoid render();\n\n\t\t/** Update state using external timing.\n\t\t\\param deltaTime time elapsed since last udpate. \n\t\t*/\n\t\tvoid update(float deltaTime);\n\n\t\t/** Update state using internal timer.\n\t\t\\param doRender should the ImGui panel be genrated immediatly\n\t\t*/\n\t\tvoid update(bool doRender = true);\n\n\t\t/** Toggle the panel visibility. */\n\t\tvoid toggleVisibility() {\n\t\t\t_hidden = !_hidden;\n\t\t}\n\n\t\t/** \\return true if the panel visible. */\n\t\tbool active() const {\n\t\t\treturn !_hidden;\n\t\t}\n\n\tprivate:\n\t\ttime_point\t\t\t\t\t\t\t_lastFrameTime; ///< Last frame duration.\n\t\tsibr::Vector2f\t\t\t\t\t\t_position; ///< on screen position.\n\t\tstd::vector<float>\t\t\t\t\t_frameTimes; ///< Last N frame times.\n\t\tsize_t\t\t\t\t\t\t\t\t_frameIndex; ///< Current position in the time list.\n\t\tfloat\t\t\t\t\t\t\t\t_frameTimeSum; ///< Current running sum.\n\t\tint\t\t\t\t\t\t\t\t\t_flags; ///< Imgui display flags.\n\t\tbool\t\t\t\t\t\t\t\t_hidden; ///< Visibility status.\n\t\tstd::string\t\t\t\t\t\t\t_name; ///< Panel name.\n\t\tstatic int\t\t\t\t\t\t\t_count; ///< Internal counter to avoid collision when multiple framerate panels are displayed.\n\t};\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/IBRBasicUtils.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"IBRBasicUtils.hpp\"\n\nnamespace sibr {\n\tstd::vector<uint> IBRBasicUtils::selectCameras(const std::vector<InputCamera::Ptr>& cams, const Camera & eye, uint count)\n\t{\n\t\t// Select one method\n\t\treturn selectCamerasAngleWeight(cams, eye, count);\n\t\t//return selectCamerasSimpleDist(cams, eye, count);\n\t}\n\n\tstd::vector<uint> IBRBasicUtils::selectCamerasSimpleDist(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera & eye, uint count)\n\t{\n\t\tstd::vector<uint> warped_img_id;\n\t\tstd::multimap<float, uint> dist;                 // distance wise closest input cameras\n\n\t\tfor (uint i = 0; i < cams.size(); ++i)\n\t\t{\n\t\t\tif (cams.at(i)->isActive())\n\t\t\t{\n\t\t\t\tfloat d = sibr::distance(cams[i]->position(), eye.position());\n\t\t\t\tfloat a = sibr::dot(cams[i]->dir(), eye.dir());\n\t\t\t\tif (a > 0.707)\t\t\t\t\t\t\t// cameras with 45 degrees\n\t\t\t\t\tdist.insert(std::make_pair(d, i));\t// sort distances in increasing order\n\t\t\t}\n\t\t}\n\n\t\tstd::multimap<float, uint>::const_iterator\td_it(dist.begin());\n\t\tfor (uint i = 0; d_it != dist.end() && i < count; ++d_it, ++i)\n\t\t\twarped_img_id.push_back(d_it->second);\n\n\t\tSIBR_ASSERT(warped_img_id.size() <= count);\n\n\t\treturn warped_img_id;\n\t}\n\n\tstd::vector<uint> IBRBasicUtils::selectCamerasAngleWeight(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera & eye, uint count)\n\t{\n\t\tconst Vector3f& position = eye.position();\n\t\tconst Quaternionf& rotation = eye.rotation();\n\t\tfloat angleWeight = 0.3f;\n\n\t\tfloat maxdist = 0.f;\n\t\tstd::vector<float>\tsqrDists(cams.size(), 0.f);\n\n\t\tfor (uint i = 0; i < cams.size(); ++i)\n\t\t{\n\t\t\tif (cams.at(i)->isActive())\n\t\t\t{\n\t\t\t\tfloat sqrDist = (cams[i]->position() - position).squaredNorm();\n\t\t\t\tsqrDists[i] = sqrDist;\n\t\t\t\tmaxdist = std::max(sqrDist, maxdist);\n\t\t\t}\n\t\t}\n\n\t\tstd::multimap<float, uint>\tfactors;\n\t\tfor (uint i = 0; i < cams.size(); ++i)\n\t\t{\n\t\t\tif (cams.at(i)->isActive())\n\t\t\t{\n\t\t\t\tfloat a = sibr::dot(cams[i]->dir(), eye.dir());\n\t\t\t\tif (a > 0.707)\t\t\t\t\t\t\t// cameras with 45 degrees\n\t\t\t\t{\n\t\t\t\t\tconst float midAngle = 4.71239f; // = 270 degree\n\t\t\t\t\tfloat sqrDist = sqrDists[i];\n\t\t\t\t\tfloat currNormalDist = inverseLerp(0.f, maxdist, sqrDist);\n\t\t\t\t\tfloat currNormalAngle = inverseLerp(0.f, midAngle, angleRadian(rotation, cams[i]->rotation()));\n\t\t\t\t\tfloat factor = currNormalDist*(1.f - angleWeight) + currNormalAngle*angleWeight;\n\n\t\t\t\t\tfactors.insert(std::make_pair(factor, i));\t// sort distances in increasing order\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstd::vector<uint> warped_img_id;\n\t\tstd::multimap<float, uint>::const_iterator\td_it(factors.begin());\n\t\tfor (uint i = 0; d_it != factors.end() && i < count; ++d_it, ++i)\n\t\t\twarped_img_id.push_back(d_it->second);\n\n\t\tSIBR_ASSERT(warped_img_id.size() <= count);\n\n\t\treturn warped_img_id;\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/IBRBasicUtils.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"core/view/Config.hpp\"\n#include \"core/graphics/Utils.hpp\"\n#include \"core/graphics/Camera.hpp\"\n#include \"core/graphics/Image.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n#include <map>\n\nnamespace sibr{\n\n\t/** Provide basic IBR utilities. \n\t \\ingroup sibr_view\n\t */\n\tclass SIBR_VIEW_EXPORT IBRBasicUtils\n\t{\n\n\tpublic:\n\n\t\t/** Select cameras for a given viewpoint.\n\t\t\\param cams cameras to select from\n\t\t\\param eye novel viewpoint\n\t\t\\param count number of cameras to select\n\t\t\\return a list of selected camera indices.\n\t\t\\warning The number of cameras selected might be lower than count\n\t\t\\sa selectCamerasAngleWeight\n\t\t*/\n\t\tstatic std::vector<uint> selectCameras(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera& eye, uint count);\n\n\t\t/** Select cameras based on distance to a given viewpoint. Cameras with an orientation that is more than 45� off compared to the reference are ignored.\n\t\t\\param cams cameras to select from\n\t\t\\param eye novel viewpoint\n\t\t\\param count number of cameras to select\n\t\t\\return a list of selected camera indices.\n\t\t\\warning The number of cameras selected might be lower than count\n\t\t*/\n\t\tstatic std::vector<uint> selectCamerasSimpleDist(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera& eye, uint count);\n\n\t\n\t\t/** Select cameras based on distance and orientation to a given viewpoint. Cameras with an orientation that is more than 45� off compared to the reference are ignored.\n\t\t\\param cams cameras to select from\n\t\t\\param eye novel viewpoint\n\t\t\\param count number of cameras to select\n\t\t\\return a list of selected camera indices.\n\t\t\\warning The number of cameras selected might be lower than count\n\t\t*/\n\t\tstatic std::vector<uint> selectCamerasAngleWeight(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera& eye, uint count);\n\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ICameraHandler.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"ICameraHandler.hpp\""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ICameraHandler.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <memory>\n#include <fstream>\n\n#include \"Config.hpp\"\n\n#include \"core/assets/InputCamera.hpp\"\n#include \"core/graphics/Viewport.hpp\"\n\nnamespace sibr {\n\tclass Input;\n\n\t/**\n\t * Represent an interaction mode (FPS, trackball,...) for a camera controlled by the user, or a combination of multiple modes.\n\t  \\ingroup sibr_view\n\t */\n\tclass SIBR_VIEW_EXPORT ICameraHandler\n\t{\n\tpublic:\n\t\tSIBR_CLASS_PTR(ICameraHandler)\n\n\tpublic:\n\n\t\t/** Update the camera handler state.\n\t\t\\param input user input\n\t\t\\param deltaTime time elapsed since last udpate\n\t\t\\param viewport view viewport\n\t\t*/\n\t\tvirtual void update(const sibr::Input & input, const float deltaTime, const Viewport & viewport) = 0;\n\n\t\t/** \\return the current camera. */\n\t\tvirtual const InputCamera & getCamera(void) const = 0;\n\n\t\t// We allow for default empty implementations of render and onGUI.\n\n\t\t/** Render on top of the associated view(s). \n\t\t\\param viewport the rendering region\n\t\t*/\n\t\tvirtual void onRender(const sibr::Viewport & viewport){};\n\t\t\n\t\t/** Display GUI options and infos\n\t\t\\param windowName extra name to avoid collsiion between the windows of different handlers. \n\t\t*/\n\t\tvirtual void onGUI(const std::string & windowName) {};\n\n\t};\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ImageView.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"ImageView.hpp\"\n\n#include <imgui/imgui.h>\n\nnamespace sibr {\n\n\tImageView::ImageView(bool interactiveMode)\n\t{\n\t\t_display.init(\"Display\", sibr::loadFile(\n\t\t\tsibr::getShadersDirectory(\"core\") + \"/image_viewer.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"core\") + \"/image_viewer.frag\"));\n\t\t\n\t\t_minVal.init(_display, \"minVal\");\n\t\t_maxVal.init(_display, \"maxVal\");\n\t\t_channels.init(_display, \"channels\");\n\t\t_size.init(_display, \"size\");\n\t\t_pos.init(_display, \"pos\");\n\t\t_scale.init(_display, \"scale\");\n\t\t_correctRatio.init(_display, \"correctRatio\");\n\t\t\n\t\t_minVal = { 0.0f, 0.0f, 0.0f, 0.0f };\n\t\t_maxVal = {1.0f, 1.0f, 1.0f, 1.0f};\n\t\t_showChannels[0] = _showChannels[1] = _showChannels[2] = _showChannels[3] = true;\n\t\t_bgColor = {0.25f, 0.25f, 0.25f};\n\t\t_pos = {0.0f, 0.0f};\n\t\t_scale = 1.0f;\n\t\t// When in \"fixed\" mode, don't respect the aspect ratio, to make sure that the full image is visible to the viewer.\n\t\t_correctRatio = interactiveMode;\n\t\t_showGUI = interactiveMode;\n\t\t_allowInteraction = interactiveMode;\n\t}\n\n\tvoid ImageView::onUpdate(Input& input, const Viewport & vp) {\n\t\tif(!_allowInteraction) {\n\t\t\treturn;\n\t\t}\n\t\t_scale = std::max(_scale - float(input.mouseScroll()) * 0.05f, 0.001f);\n\t\tif(input.mouseButton().isActivated(Mouse::Left)) {\n\t\t\tsibr::Vector2f delta = input.mouseDeltaPosition().cast<float>().cwiseQuotient(vp.finalSize());\n\t\t\tdelta[1] *= -1.0f;\n\t\t\t_pos = _pos.get() + delta;\n\t\t}\n\t}\n\n\tvoid ImageView::onGUI() {\n\n\t\tif(!_showGUI) {\n\t\t\treturn;\n\t\t}\n\t\tconst std::string guiName = name() + \" options\";\n\t\tif(ImGui::Begin(guiName.c_str())) {\n\n\t\t\tImGui::Text(\"Size: %dx%d. Scale: %.2f%%\", int(_size.get()[0]), int(_size.get()[1]), 100.0f * _scale);\n\t\t\t\n\t\t\tif (ImGui::Button(\"Reset view\")) {\n\t\t\t\t_pos = sibr::Vector2f(0.0f, 0.0f);\n\t\t\t\t_scale = 1.0f;\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tImGui::Checkbox(\"Correct aspect ratio\", &_correctRatio.get());\n\t\t\t\n\t\t\tImGui::Separator();\n\n\t\t\tImGui::Text(\"Channels\"); ImGui::SameLine();\n\t\t\tImGui::Checkbox(\"R\", &_showChannels[0]); ImGui::SameLine();\n\t\t\tImGui::Checkbox(\"G\", &_showChannels[1]); ImGui::SameLine();\n\t\t\tImGui::Checkbox(\"B\", &_showChannels[2]); ImGui::SameLine();\n\t\t\tImGui::Checkbox(\"A\", &_showChannels[3]);\n\n\t\t\tImGui::ColorEdit3(\"Background\", &_bgColor[0]);\n\t\t\t\n\t\t\tImGui::Separator();\n\t\t\t\n\t\t\tconst float dragSpeed = 0.05f;\n\t\t\tbool editBounds = false;\n\t\t\t\n\t\t\tif(_lockChannels) {\n\t\t\t\t// Only display one value and ensure synchronisation between the RGB components.\n\t\t\t\teditBounds = ImGui::DragFloat(\"Min.\", &_minVal.get()[0], dragSpeed) || editBounds;\n\t\t\t\teditBounds = ImGui::DragFloat(\"Max.\", &_maxVal.get()[0], dragSpeed) || editBounds;\n\t\t\t} else {\n\t\t\t\teditBounds = ImGui::DragFloat4(\"Min.\", &_minVal.get()[0], dragSpeed) || editBounds;\n\t\t\t\teditBounds = ImGui::DragFloat4(\"Max.\", &_maxVal.get()[0], dragSpeed) || editBounds;\n\t\t\t}\n\t\t\t// Ensure internal state consistency.\n\t\t\tif(editBounds && _lockChannels) {\n\t\t\t\t_minVal.get()[3] = _minVal.get()[2] = _minVal.get()[1] = _minVal.get()[0];\n\t\t\t\t_maxVal.get()[3] = _maxVal.get()[2] = _maxVal.get()[1] = _maxVal.get()[0];\n\t\t\t}\n\t\t\t// Ensure ordering.\n\t\t\tif(editBounds) {\n\t\t\t\tconst sibr::Vector4f temp = _minVal;\n\t\t\t\t_minVal = temp.cwiseMin(_maxVal.get());\n\t\t\t\t_maxVal = temp.cwiseMax(_maxVal.get());\n\t\t\t}\n\t\t\t\n\t\t\tImGui::Checkbox(\"Lock values\", &_lockChannels);\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::Button(\"Reset values\")) {\n\t\t\t\t_minVal = sibr::Vector4f(0.0f, 0.0f, 0.0f, 0.0f);\n\t\t\t\t_maxVal = sibr::Vector4f(1.0f, 1.0f, 1.0f, 1.0f);\n\t\t\t}\n\t\t}\n\t\tImGui::End();\n\t}\n\n\tvoid ImageView::setRenderTarget(const IRenderTarget& rt, uint handle) {\n\t\t_tex = nullptr;\n\t\t_texHandle = rt.handle(handle);\n\t\t_size.get()[0] = float(rt.w()); _size.get()[1] = float(rt.h());\n\t}\n\n\tvoid ImageView::setTexture(const ITexture2D& tex)\n\t{\n\t\t_tex = nullptr;\n\t\t_texHandle = tex.handle();\n\t\t_size.get()[0] = float(tex.w()); _size.get()[1] = float(tex.h());\n\t}\n\n\t\n\tvoid ImageView::onRender(const Viewport & vpRender){\n\n\t\tvpRender.bind();\n\t\tvpRender.clear(_bgColor);\n\t\tif (_texHandle == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update channels flags.\n\t\t_channels.get()[0] = float(_showChannels[0]);\n\t\t_channels.get()[1] = float(_showChannels[1]);\n\t\t_channels.get()[2] = float(_showChannels[2]);\n\t\t_channels.get()[3] = float(_showChannels[3]);\n\n\t\t_display.begin();\n\n\t\tif(_showChannels[3]) {\n\t\t\tglEnable(GL_BLEND);\n\t\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t\tglBlendEquation(GL_FUNC_ADD);\n\t\t}\n\t\t\n\t\t_maxVal.send();\n\t\t_minVal.send();\n\t\t_channels.send();\n\t\t_scale.send();\n\t\t_pos.send();\n\t\t_size.send();\n\t\t_correctRatio.send();\n\t\t\n\t\tglActiveTexture(GL_TEXTURE0);\n\t\tglBindTexture(GL_TEXTURE_2D, _texHandle);\n\t\tRenderUtility::renderScreenQuad();\n\n\t\tglDisable(GL_BLEND);\n\t\t_display.end();\n\n\t\tCHECK_GL_ERROR;\n\t}\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ImageView.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/system/Config.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Image.hpp>\n# include <core/graphics/Shader.hpp>\n# include <core/view/ViewBase.hpp>\n\nnamespace sibr {\n\n\t/** Basic view to display an image and inspect it.\n\t *Two modes are supported:\n\t * * interactive, where the user can pan/zoom, rescale the values, display some channels, via the mouse and GUI.\n\t * * fixed, where the image is displayed as is, without any modification possible.\n\t */\n\tclass SIBR_VIEW_EXPORT ImageView : public sibr::ViewBase\n\t{\n\t\tSIBR_CLASS_PTR(ImageView);\n\tpublic:\n\n\t\t/** Constructor.\n\t\t * \\param interactiveMode should the GUI panel be displayed and the user be able to pan/zoom into the image\n\t\t */\n\t\tImageView(bool interactiveMode = true);\n\n\t\t/** Render the image in the currently bound rendertarget.\n\t\t *\\param vpRender the region to render into\n\t\t */\n\t\tvoid onRender(const Viewport & vpRender) override;\n\n\t\t/** Update user interactions.\n\t\t *\\param input the user input for the view\n\t\t *\\param vp the view viewport\n\t\t */\n\t\tvoid onUpdate(Input& input, const Viewport & vp) override;\n\n\t\t/*** Render GUI panels. */\n\t\tvoid onGUI() override;\n\n\t\t/** Set an attachment of a rendertarget as the texture to display.\n\t\t *\\param rt the rendertarget to display\n\t\t *\\param handle the index of the attachment to display\n\t\t *\\warning Will only be valid until the RT is deleted.\n\t\t */\n\t\tvoid setRenderTarget(const IRenderTarget & rt, uint handle = 0);\n\t\t\n\t\t/** Set the texture to display.\n\t\t *\\param tex the texture to display\n\t\t *\\warning Will only be valid until the texture is deleted.\n\t\t */\n\t\tvoid setTexture(const ITexture2D& tex);\n\n\t\t/** Set an image as the texture to display. An internal copy of the image will be sent to the GPU.\n\t\t *\\param img the image\n\t\t */\n\t\ttemplate<typename T_Type, unsigned T_NumComp>\n\t\tvoid setImage(const Image<T_Type, T_NumComp> & img) {\n\t\t\t// Create texture on the fly.\n\t\t\tstd::shared_ptr<Texture2D<T_Type, T_NumComp>> tex(new Texture2D<T_Type, T_NumComp>(img));\n\t\t\t_tex = tex;\n\t\t\t_texHandle = _tex->handle();\n\t\t\t_size.get()[0] = float(_tex->w());\n\t\t\t_size.get()[1] = float(_tex->h());\n\t\t}\n\n\t\t/** Set if the GUI panel should be displayed or not.\n\t\t *\\param opt display option\n\t\t **/\n\t\tvoid showGUI(bool opt) {\n\t\t\t_showGUI = opt;\n\t\t}\n\n\t\t/** Set if the user should be able to pan/zoom the image\n\t\t *\\param opt interaction option\n\t\t **/\n\t\tvoid allowInteraction(bool opt) {\n\t\t\t_allowInteraction = opt;\n\t\t}\n\t\t\n\tprotected:\n\n\t\tITexture2D::Ptr _tex; ///< Internal texture for the image input case.\n\t\tGLuint _texHandle = 0; ///< Texture to display.\n\t\t\n\t\tGLShader _display; ///< Shader.\n\t\t\n\t\tGLuniform<sibr::Vector4f> _minVal; ///< Normalization minimum.\n\t\tGLuniform<sibr::Vector4f> _maxVal; ///< Normalization maximum.\n\t\tbool _lockChannels = true; ///< Use the same normalization values for all channels.\n\t\t\n\t\tstd::array<bool, 4> _showChannels; ///< Display which channels.\n\t\tGLuniform<sibr::Vector4f> _channels; ///< Display which channels (shader).\n\n\t\tGLuniform<sibr::Vector2f> _pos; ///< Center position.\n\t\tGLuniform<sibr::Vector2f> _size; ///< Image size.\n\t\tGLuniform<float> _scale; ///< Image scale.\n\t\tGLuniform<bool> _correctRatio; ///< Use proper aspect ratio to display.\n\t\t\n\t\tsibr::Vector3f _bgColor; ///< Background color.\n\t\tbool _showGUI = true; ///< Show the GUI be displayed or not.\n\t\tbool _allowInteraction = true; ///< Should the user be able to pan/zoom into the image.\n\t};\n\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ImagesGrid.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"ImagesGrid.hpp\"\n\n#include <imgui/imgui.h>\n\n#define GUI_TEXT(txt) { std::stringstream sss; sss << txt << std::endl;  ImGui::Text(sss.str().c_str()); }\n\nnamespace sibr\n{\n\tvoid ImagesGrid::onUpdate(Input & input, const Viewport & vp)\n\t{\n\t\tconst Vector2f size = vp.finalSize();\n\n\t\tif (current_level_tex) {\n\t\t\timSizePixels = { current_level_tex->w(), current_level_tex->h() };\n\t\t\timSizePixels = imSizePixels.cwiseQuotient(pow(2.0, current_lod)*Vector2f(1, 1)).unaryExpr([](float f) { return std::floor(f); });\n\n\t\t\tnum_imgs = (int)current_layer->imgs_texture_array->depth();\n\t\t}\n\n\t\tcurrentActivePix = pixFromScreenPos(input.mousePosition(), size);\n\t\t_vp = vp;\n\n\t\tsetupGrid(vp);\n\n\t\tupdateZoomBox(input, vp);\n\t\tupdateZoomScroll(input);\n\t\tupdateDrag(input, size);\n\n\t\tif (currentActivePix && input.key().isActivated(Key::LeftControl) && input.mouseButton().isReleased(Mouse::Code::Left) ) {\n\t\t\tif (selectionMode == IMAGE_SELECTION) {\n\t\t\t\tcurrent_layer->image_selection.switchSelection(currentActivePix.im);\n\t\t\t}\n\t\t\tif (selectionMode == PIXEL_SELECTION && !current_layer->flip_texture) {\n\t\t\t\tcurrent_layer->pixel_selection.switchSelection(currentActivePix);\n\t\t\t}\n\t\t}\n\t\n\t\tstd::vector<int> all_ims;\n\t\tstd::iota(all_ims.begin(), all_ims.end(), 0);\n\t\taddImagesToHighlight(\"imBorders\", all_ims, { 0,0,0 });\n\n\t\tif (currentActivePix) {\n\t\t\taddPixelsToHighlight(\"activePix\", { currentActivePix }, { 0, 1, 0 }, 0.25f);\n\t\t}\n\t\t\n\t\tconst auto & imgs_list = current_layer->image_selection.get();\n\t\tif (!imgs_list.empty()) {\n\t\t\tstd::vector<int> selected_ims(std::begin(imgs_list), std::end(imgs_list));\n\t\t\taddImagesToHighlight(\"imSelection\", selected_ims, { 0,1,0 }, 0.1f);\n\t\t}\n\t\t\n\n\t}\n\n\tvoid ImagesGrid::onRender(const Viewport & viewport)\n\t{\n\t\tviewport.bind();\n\n\t\tviewport.clear(Vector3f(0.7f, 0.7f, 0.7f));\n\n\t\tif (!current_level_tex) {\n\t\t\treturn;\n\t\t}\n\n\t\tdraw_utils.image_grid(num_imgs, current_level_tex->handle(), grid_adjusted, viewRectangle.tl(), viewRectangle.br(), current_lod, current_layer->flip_texture);\n\n\t\tfor (const auto & ims_highlight : images_to_highlight) {\n\t\t\tconst auto & imgs = ims_highlight.second;\n\t\t\tfor (int im : imgs.data) {\n\t\t\t\thighlightImage(im, viewport, imgs.color, imgs.alpha);\n\t\t\t}\t\t\n\t\t}\n\n\t\tfor (const auto & pixels_highlight : pixels_to_highlight) {\n\t\t\tconst auto & pix_data = pixels_highlight.second;\n\t\t\tfor (const auto  pix : pix_data.data) {\n\t\t\t\thighlightPixel(pix, viewport, pix_data.color);\n\t\t\t}\n\t\t}\n\n\t\tdisplayZoom(viewport, draw_utils);\n\t}\n\n\tvoid ImagesGrid::onRender(IRenderTarget & dst)\n\t{\n\t\tdst.bind();\n\n\t\tViewport vp(0.0f, 0.0f, (float)dst.w(), (float)dst.h());\n\t\tonRender(vp);\n\n\t\tdst.unbind();\n\t}\n\n\tvoid ImagesGrid::onGUI()\n\t{\n\t\tif (ImGui::Begin(\"grid_gui\")) {\n\n\t\t\t\n\t\t\toptionsGUI();\n\n\t\t\tlistImagesLayerGUI();\n\n\t\t\tif (currentActivePix) {\n\t\t\t\tGUI_TEXT(\"current pix : \" << currentActivePix.im << \", \" << currentActivePix.pos.transpose());\n\n\t\t\t\tVector4f value = current_layer->imgs_texture_array->readBackPixel(currentActivePix.im, currentActivePix.pos[0], currentActivePix.pos[1], current_lod);\n\t\t\t\tif (integer_pixel_values) {\n\t\t\t\t\tVector4i value_i = (255 * value).cast<int>();\n\t\t\t\t\tGUI_TEXT(\" \\t value : \" << value_i.transpose());\n\t\t\t\t} else {\n\t\t\t\t\tGUI_TEXT(\" \\t value : \" << value.transpose());\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tstd::stringstream s;\n\t\t\ts << \"active images : \";\n\t\t\tfor (int im : current_layer->image_selection.get()) {\n\t\t\t\ts << im << \", \";\n\t\t\t}\n\t\t\tImGui::Text(s.str().c_str());\n\n\t\t}\n\t\tImGui::End();\n\t}\n\n\tvoid ImagesGrid::addImagesToHighlight(const std::string & name, const std::vector<int>& imgs, const Vector3f & col, float alpha_fill)\n\t{\n\t\timages_to_highlight[name] = { imgs, col, alpha_fill };\n\t}\n\n\tvoid ImagesGrid::addPixelsToHighlight(const std::string & name, const std::vector<MVpixel>& pixs, const Vector3f & col, float alpha_fill)\n\t{\n\t\tpixels_to_highlight[name] = { pixs, col, alpha_fill };\n\t}\n\n\tconst MVpixel & ImagesGrid::getCurrentPixel()\n\t{\n\t\treturn currentActivePix;\n\t}\n\n\tvoid ImagesGrid::listImagesLayerGUI()\n\t{\n\t\t\n\t\tif (ImGui::CollapsingHeader(\"images_layers\")) {\n\t\t\t\n\t\t\t// 0 name | 1 infos | 2 options\n\t\t\tImGui::Columns(3, \"images_layers_list\");\n\n\t\t\tImGui::Separator();\n\n\t\t\tImGui::Text(\"layer\");\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Text(\"num x w x h\");\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Text(\"options\");\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Separator();\n\n\t\t\tfor (auto imgs_it = images_layers.begin(); imgs_it != images_layers.end(); ++imgs_it) {\n\t\t\t\tif (ImGui::Selectable(imgs_it->name.c_str(), current_layer == imgs_it)) {\n\t\t\t\t\tcurrent_layer = imgs_it;\n\t\t\t\t\tcurrent_level_tex = current_layer->imgs_texture_array;\n\t\t\t\t}\n\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tauto & tex_arr = imgs_it->imgs_texture_array;\n\t\t\t\tGUI_TEXT(tex_arr->depth() << \" x \" << tex_arr->w() << \" x \" << tex_arr->h());\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tImGui::Checkbox((\"flip##\" + imgs_it->name).c_str(), &imgs_it->flip_texture);\n\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tImGui::Separator();\n\t\t\t}\n\n\t\t\tImGui::Columns(1);\n\t\t\t\n\t\t}\n\t}\n\n\tvoid ImagesGrid::optionsGUI()\n\t{\n\t\tif (ImGui::CollapsingHeader(\"grid_options\")) {\n\n\n\t\t\tif (ImGui::SliderInt(\"num per row\", &num_per_row, 1, num_imgs)) {\n\t\t\t\tviewRectangle.center = { 0.5f, 0.5f };\n\t\t\t\tviewRectangle.diagonal = { 0.5f, 0.5f };\n\t\t\t}\n\t\t\tif (ImGui::SliderInt(\"pyramid level\", &current_lod, 0, 10)) {\n\t\t\t\tcurrentActivePix.isDefined = false;\n\t\t\t}\n\n\t\t\tstatic const std::vector<const char*> selection_mode_str = { \"no selection\", \"image\" ,\"pixel\" };\n\t\t\tfor (int i = 0; i < (int)selection_mode_str.size(); ++i) {\n\t\t\t\tif (i != 0) {\n\t\t\t\t\tImGui::SameLine();\n\t\t\t\t}\n\t\t\t\tif (ImGui::RadioButton(selection_mode_str[i], selectionMode == (SelectionMode)i)) {\n\t\t\t\t\tselectionMode = (SelectionMode)i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tImGui::Checkbox(\"integer pixel values\", &integer_pixel_values);\n\t\t}\n\t}\n\n\tbool ImagesGrid::name_collision(const std::string & name) const\n\t{\n\t\tfor (const auto & layer : images_layers) {\n\t\t\tif (layer.name == name) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tvoid ImagesGrid::setupFirstLayer()\n\t{\n\t\tif (images_layers.size() == 1) {\n\t\t\tcurrent_layer = images_layers.begin();\n\t\t\tcurrent_level_tex = current_layer->imgs_texture_array;\n\t\t}\n\t}\n\n\tDrawUtilities::DrawUtilities()\n\t{\n\t\tinitBaseShader();\n\t\tinitGridShader();\n\t}\n\n\tvoid DrawUtilities::baseRendering(const Mesh & mesh, Mesh::RenderMode mode, const Vector3f & color, \n\t\tconst Vector2f & translation, const Vector2f & scaling, float alpha, const Viewport & vp)\n\t{\n\t\tglEnable(GL_BLEND);\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\tglBlendEquation(GL_FUNC_ADD);\n\n\t\tvp.bind();\n\t\tbaseShader.begin();\n\n\t\tscalingGL.set(scaling);\n\t\ttranslationGL.set(translation);\n\t\tcolorGL.set(color);\n\t\talphaGL.set(alpha);\n\n\t\tmesh.render(false, false, mode);\n\n\t\tbaseShader.end();\n\n\t\tglDisable(GL_BLEND);\n\t}\n\n\tvoid DrawUtilities::rectangle(const Vector3f & color, const Vector2f & tl, const Vector2f & br, bool fill, float alpha, const Viewport & vp)\n\t{\n\t\tauto rectangleMesh = std::make_shared<Mesh>();\n\n\t\trectangleMesh->vertices({\n\t\t\t{ tl.x(), tl.y() , 0 },\n\t\t\t{ tl.x(), br.y() , 0 },\n\t\t\t{ br.x(), br.y() , 0 },\n\t\t\t{ br.x(), tl.y() , 0 }\n\t\t\t});\n\n\t\tif (fill) {\n\t\t\trectangleMesh->triangles({\n\t\t\t\t{ 0,1,2 },\n\t\t\t\t{ 0,2,3 }\n\t\t\t\t});\n\n\t\t\tbaseRendering(*rectangleMesh, Mesh::FillRenderMode, color, { 0,0 }, { 1,1 }, alpha, vp);\n\t\t}\n\n\t\trectangleMesh->triangles({\n\t\t\t{ 0,0,1 },{ 1,1,2 },{ 2,2,3 },{ 3,3,0 }\n\t\t\t});\n\n\t\tbaseRendering(*rectangleMesh, Mesh::LineRenderMode, color, { 0,0 }, { 1,1 }, 1.0f, vp);\n\t}\n\n\tvoid DrawUtilities::rectanglePixels(const Vector3f & color, const Vector2f & center, const Vector2f & diagonalPixs, bool fill, float alpha, const Viewport & vp)\n\t{\n\t\tVector2f diagUV = diagonalPixs.cwiseQuotient(vp.finalSize());\n\t\tVector2f tl = center - diagUV;\n\t\tVector2f br = center + diagUV;\n\t\trectangle(color, tl, br, fill, alpha, vp);\n\t}\n\n\tvoid DrawUtilities::circle(const Vector3f & color, const Vector2f & center, float radius, bool fill, float alpha, const Vector2f & scaling, int precision)\n\t{\n\t\t\n\t\tstatic Mesh::Vertices vertices;\n\t\tstatic Mesh::Triangles circleTriangles, circleFillTriangles;\n\n\t\tint n = precision;\n\t\tif (circleFillTriangles.size() != n) {\n\t\t\tn = precision;\n\t\t\tcircleTriangles.resize(n);\n\t\t\tcircleFillTriangles.resize(n);\n\t\t\tfor (int i = 0; i < n; ++i) {\n\t\t\t\tint next = (i + 1) % n;\n\t\t\t\tcircleTriangles[i] = Vector3u(i, i, next);\n\t\t\t\tcircleFillTriangles[i] = Vector3u(i, next, n);\n\t\t\t}\n\n\t\t\tvertices.resize(n + 1);\n\t\t}\n\n\t\tdouble base_angle = 2.0*M_PI / (double)n;\n\t\tfloat rho = 0.5f*radius*(float)(1.0 + cos(0.5*base_angle));\n\n\t\tfor (int i = 0; i < n; ++i) {\n\t\t\tdouble angle = i * base_angle;\n\t\t\tvertices[i] = Vector3f((float)cos(angle), (float)sin(angle), (float)0.0);\n\t\t}\n\t\tvertices[n] = Vector3f(0, 0, 0);\n\n\t\tauto circleMesh = std::make_shared<Mesh>();\n\t\tauto circleFilledMesh = std::make_shared<Mesh>();\n\t\tcircleMesh->vertices(vertices);\n\t\tcircleFilledMesh->vertices(vertices);\n\t\tcircleMesh->triangles(circleTriangles);\n\t\tcircleFilledMesh->triangles(circleFillTriangles);\n\n\t\tif (fill) {\n\t\t\tbaseRendering(*circleFilledMesh, Mesh::FillRenderMode, color, { 0,0 }, { radius, radius }, alpha, {});\n\t\t}\n\t\tbaseRendering(*circleMesh, Mesh::LineRenderMode, color, { 0,0 }, { radius, radius }, 1.0f, {});\n\t}\n\n\tvoid DrawUtilities::circlePixels(const Vector3f & color, const Vector2f & center, float radius, bool fill, float alpha, const Vector2f & winSize, int precision)\n\t{\n\t\tVector2f centerUV = center.cwiseQuotient(winSize);\n\t\tVector2f scaling = radius * Vector2f(1, 1).cwiseQuotient(winSize);\n\n\t\tcircle(color, centerUV, 1.0f, fill, alpha, scaling, precision);\n\t}\n\n\tvoid DrawUtilities::linePixels(const Vector3f & color, const Vector2f & ptA, const Vector2f & ptB, const Vector2f & winSize)\n\t{\n\t\tVector2f uvA = ptA.cwiseQuotient(winSize);\n\t\tVector2f uvB = ptB.cwiseQuotient(winSize);\n\n\t\tMesh line;\n\t\tline.vertices({\n\t\t\t{ uvA.x(), uvA.y(), 0.0f },\n\t\t\t{ uvB.x(), uvB.y(), 0.0f }\n\t\t\t});\n\t\tline.triangles({\n\t\t\tVector3u(0,0,1)\n\t\t\t});\n\n\t\tbaseRendering(line, Mesh::LineRenderMode, color, { 0,0 }, { 1.0, 1.0 }, 1.0f, {});\n\n\t}\n\n\tvoid DrawUtilities::image_grid(int num_imgs, uint texture, const Vector2f & grid, const Vector2f & tl, const Vector2f & br, int lod, bool flip_texture)\n\t{\n\t\tgridShader.begin();\n\n\t\tnumImgsGL.set(num_imgs);\n\t\tgridGL.set(grid);\n\t\tlodGL.set((float)lod);\n\n\t\tgridTopLeftGL.set(tl);\n\t\tgridBottomRightGL.set(br);\n\n\t\tflip_textureGL.set(flip_texture);\n\n\t\tglActiveTexture(GL_TEXTURE0);\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, texture);\n\t\tRenderUtility::renderScreenQuad();\n\n\t\tgridShader.end();\n\t}\n\n\tvoid DrawUtilities::initBaseShader()\n\t{\n\t\tconst std::string translationScalingVertexShader =\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec2 translation;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec2 scaling;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"\tgl_Position = vec4(scaling*in_vertex.xy+translation,0.0, 1.0);\t\t\\n\"\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\t\tconst std::string colorAlphaFragmentShader =\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec3 color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform float alpha;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"\t\tout_color = vec4(color,alpha);\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\t\tbaseShader.init(\"InterfaceUtilitiesBaseShader\", translationScalingVertexShader, colorAlphaFragmentShader);\n\t\tcolorGL.init(baseShader, \"color\");\n\t\talphaGL.init(baseShader, \"alpha\");\n\t\tscalingGL.init(baseShader, \"scaling\");\n\t\ttranslationGL.init(baseShader, \"translation\");\n\t}\n\n\tvoid DrawUtilities::initGridShader()\n\t{\n\t\tconst std::string gridVertexShader =\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\n\t\t\t\"out vec2 uv_coord;\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec2 zoomTL;\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec2 zoomBR;\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"\tuv_coord = 0.5*in_vertex.xy + vec2(0.5);\t\t\\n\"\n\t\t\t\"\tuv_coord.y = 1.0 - uv_coord.y;\t\t\t\t\t\\n\"\n\t\t\t\"\tuv_coord = zoomTL + (zoomBR-zoomTL)*uv_coord;\t\\n\"\t\n\t\t\t\"\tgl_Position = vec4(in_vertex.xy,0.0, 1.0);\t\t\\n\"\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\n\t\t\n\n\t\tconst std::string gridFragmentShader =\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"layout(binding = 0) uniform sampler2DArray texArray;\t\t\t\t\\n\"\n\t\t\t\"uniform int numImgs;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform vec2 grid;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform float lod;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"uniform bool flip_texture;\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"in vec2 uv_coord;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"\tvec2 uvs = uv_coord;\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"\tuvs =  grid*uvs;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"  if( uvs.x < 0 || uvs.y < 0 ) { discard; } \t\t\t\t\t\t\\n\"\n\t\t\t\"   vec2 fracs = fract(uvs); \t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"   vec2 mods = uvs - fracs; \t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\t\"   int n = int(mods.x + grid.x*mods.y); \t\t\t\t\t\t\t\\n\"\n\t\t\t\" if ( n< 0 || n > numImgs || mods.x >= grid.x || mods.y >= (float(numImgs)/grid.x) ) { discard; } else { \\n\"\n\t\t\t\"\tout_color = textureLod(texArray,vec3(fracs.x, flip_texture ? 1.0 -fracs.y : fracs.y,n), lod);\t}\t\t\\n\"\n\t\t\t\"\t//out_color = vec4(n/64.0,0.0,0.0,1.0); }\t\t\t\t\t\t\\n\"\n\t\t\t\"\t//out_color = vec4(uv_coord.x,uv_coord.y,0.0,1.0);\t}\t\t\t\\n\"\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\n\t\tgridShader.init(\"InterfaceUtilitiesMultiViewShader\", gridVertexShader, gridFragmentShader);\n\t\tgridTopLeftGL.init(gridShader, \"zoomTL\");\n\t\tgridBottomRightGL.init(gridShader, \"zoomBR\");\n\t\tnumImgsGL.init(gridShader, \"numImgs\");\n\t\tgridGL.init(gridShader, \"grid\");\n\t\tlodGL.init(gridShader, \"lod\");\n\t\tflip_textureGL.init(gridShader, \"flip_texture\");\n\t}\n\n\tMVpixel GridMapping::pixFromScreenPos(const Vector2i & pos, const Vector2f & size)\n\t{\n\t\tVector2f uvScreen = (pos.cast<float>() + 0.5*Vector2f(1, 1)).cwiseQuotient(size);\n\n\t\tVector2f posF = viewRectangle.tl() + 2.0*viewRectangle.diagonal.cwiseProduct(uvScreen);\n\t\tposF = posF.cwiseProduct(grid_adjusted);\n\n\t\t//std::cout << posF.transpose() << \" \" << numImgs << std::endl;\n\n\t\tif (posF.x() < 0 || posF.y() < 0 || posF.x() >= grid_adjusted.x() /* || posF.y() >= grid.y()  */) {\n\t\t\treturn MVpixel();\n\t\t}\n\n\t\tint x = (int)std::floor(posF.x());\n\t\tint y = (int)std::floor(posF.y());\n\n\t\tint n = x + num_per_row * y;\n\t\tif (n >= num_imgs) {\n\t\t\treturn MVpixel();\n\t\t}\n\n\t\tVector2f frac = posF - Vector2f(x, y);\n\t\tint j = (int)std::floor(frac.x()*imSizePixels.x());\n\t\tint i = (int)std::floor(frac.y()*imSizePixels.y());\n\t\treturn MVpixel(n, Vector2i(j, i));\n\t}\n\n\tVector2f GridMapping::uvFromMVpixel(const MVpixel & pix, bool use_center)\n\t{\n\t\tVector2f pos = ((pix.pos.cast<float>() + (use_center ? 0.5 : 0)*Vector2f(1, 1)).cwiseQuotient(imSizePixels) +\n\t\t\tVector2f(pix.im % num_per_row, pix.im / num_per_row)).cwiseQuotient(grid_adjusted);\n\t\tpos = (pos - viewRectangle.tl()).cwiseQuotient(viewRectangle.diagonal) - Vector2f(1, 1);\n\t\tpos.y() = -pos.y();\n\t\treturn pos;\n\t}\n\n\tvoid GridMapping::updateZoomBox(const Input & input, const sibr::Viewport & vp)\n\t{\n\t\tVector2f size = vp.finalSize();\n\n\t\tif (input.key().isPressed(Key::Q)) {\n\t\t\tviewRectangle.center = Vector2f(0.5, 0.5);\n\t\t\tviewRectangle.diagonal = Vector2f(0.5, 0.5);\n\t\t}\n\n\t\tif (input.mouseButton().isPressed(Mouse::Code::Right) && !input.key().isActivated(Key::LeftControl) && !zoomSelection) {\n\t\t\tzoomSelection.isActive = true;\n\t\t\tzoomSelection.first = input.mousePosition();\n\t\t}\n\n\t\tif (zoomSelection) {\n\t\t\tzoomSelection.second = input.mousePosition();\n\n\t\t\tViewport aligned_vp = Viewport(0, 0, vp.finalWidth(), vp.finalHeight());\n\t\t\t\n\t\t\tVector2f currentTL = (zoomSelection.first.cwiseMin(zoomSelection.second)).cast<float>();\n\t\t\tVector2f currentBR = (zoomSelection.first.cwiseMax(zoomSelection.second)).cast<float>();\n\t\t\t\n\t\t\tconst auto clamp = [](Vector2f & v, float w, float h) { v = v.cwiseMax(Vector2f(1, 1)).cwiseMin(Vector2f(w - 2, h - 2)); };\n\t\t\tclamp(currentTL, vp.finalRight(), vp.finalBottom());\n\t\t\tclamp(currentBR, vp.finalRight(), vp.finalBottom());\n\n\t\t\tif (input.mouseButton().isReleased(Mouse::Code::Right)) {\n\t\t\t\tzoomSelection.isActive = false;\n\t\t\t\tif (((currentBR - currentTL).array() > Vector2f(5, 5).array()).all()) {\n\t\t\t\t\tVector2f tlPix = viewRectangle.tl().cwiseProduct(size) + (viewRectangle.br() - viewRectangle.tl()).cwiseProduct(currentTL);\n\t\t\t\t\tVector2f brPix = viewRectangle.tl().cwiseProduct(size) + (viewRectangle.br() - viewRectangle.tl()).cwiseProduct(currentBR);\n\n\t\t\t\t\tVector2f center = 0.5f*(brPix + tlPix);\n\t\t\t\t\tVector2f diag = 0.5f*(brPix - tlPix);\n\n\t\t\t\t\tfloat new_ratio = diag.x() / diag.y();\n\t\t\t\t\tfloat target_ratio = size.x() / size.y();\n\t\t\t\t\tif (new_ratio > target_ratio) {\n\t\t\t\t\t\tdiag.y() = diag.x() / target_ratio;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiag.x() = diag.y() * target_ratio;\n\t\t\t\t\t}\n\n\t\t\t\t\tviewRectangle.center = center.cwiseQuotient(size);\n\t\t\t\t\tviewRectangle.diagonal = diag.cwiseQuotient(size);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if (!input.mouseButton().isActivated(Mouse::Code::Right) && input.isInsideViewport(aligned_vp)) {\n\t\t\t\tzoomSelection.isActive = false;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tvoid GridMapping::updateZoomScroll(const Input & input)\n\t{\n\t\tdouble scroll = input.mouseScroll();\n\t\tif (scroll) {\n\t\t\tfloat ratio = (scroll > 0 ? 0.75f : 1.33f);\n\t\t\tif (input.key().isActivated(Key::LeftControl)) {\n\t\t\t\tratio *= ratio;\n\t\t\t}\n\t\t\tviewRectangle.diagonal *= ratio;\n\t\t}\n\t}\n\n\tvoid GridMapping::updateCenter(const Input & input, const Vector2f & size)\n\t{\n\t}\n\n\tvoid GridMapping::updateDrag(const Input & input, const Vector2f & size)\n\t{\n\t\tif (input.mouseButton().isPressed(Mouse::Left)) {\n\t\t\tdrag.isActive = true;\n\t\t\tdrag.position = input.mousePosition();\n\t\t\tdrag.center = viewRectangle.center.cast<float>();\n\t\t} else if (drag.isActive && input.mouseButton().isReleased(Mouse::Left)) {\n\t\t\tdrag.isActive = false;\n\t\t}\n\t\tif (drag.isActive && input.mouseButton().isActivated(Mouse::Left)) {\n\t\t\tVector2f translation = 2.0*(input.mousePosition() - drag.position).cast<float>().cwiseQuotient(size).cwiseProduct(viewRectangle.diagonal);\n\t\t\tviewRectangle.center = drag.center - translation;\n\t\t}\n\t}\n\n\tvoid GridMapping::displayZoom(const Viewport & viewport, DrawUtilities & utils)\n\t{\n\t\tif (zoomSelection) {\n\t\t\tVector2f tl = 2.0*zoomSelection.first.cast<float>().cwiseQuotient(_vp.finalSize()) - Vector2f(1, 1);\n\t\t\tVector2f br = 2.0*zoomSelection.second.cast<float>().cwiseQuotient(_vp.finalSize()) - Vector2f(1, 1);\n\t\t\ttl.y() = -tl.y();\n\t\t\tbr.y() = -br.y();\n\t\t\tutils.rectangle(Vector3f(1, 0, 0), tl, br, false, 0.15f, viewport);\n\t\t}\n\t}\n\n\tvoid GridMapping::highlightPixel(const MVpixel & pix, const Viewport & viewport, const Vector3f & color, const Vector2f & pixScreenSize)\n\t{\n\t\tVector2f pixTl = uvFromMVpixel(pix);\n\t\tVector2f pixBR = uvFromMVpixel(MVpixel(pix.im, pix.pos + Vector2i(1, 1)));\n\n\t\tviewport.bind();\n\n\t\tif ((pixBR - pixTl).cwiseProduct(viewport.finalSize()).norm() < pixScreenSize.diagonal().norm()) {\n\t\t\t//if pixel size in screen space is too tiny\n\t\t\tdraw_utils.rectanglePixels(color, 0.5*(pixTl + pixBR), pixScreenSize, true, 0.15f, viewport);\n\t\t} else {\n\t\t\t//otherwise highlight pixel intirely\n\t\t\tdraw_utils.rectangle(color, pixTl, pixBR, true, 0.15f, viewport);\n\t\t}\n\t}\n\n\tvoid GridMapping::highlightImage(int im, const sibr::Viewport & viewport, const sibr::Vector3f & color, float alpha)\n\t{\n\t\tVector2f imTl = uvFromMVpixel(MVpixel(im, { 0, 0 }));\n\t\tVector2f imBR = uvFromMVpixel(MVpixel(im, imSizePixels.cast<int>()));\n\n\t\tdraw_utils.rectangle(color, imTl, imBR, alpha != 0 , alpha, viewport);\n\t}\n\n\tvoid GridMapping::setupGrid(const Viewport & vp)\n\t{\n\t\tfloat ratio_img = imSizePixels.x() / imSizePixels.y();\n\t\tfloat ratio_vp = vp.finalWidth() / vp.finalHeight();\n\t\tgrid_adjusted = num_per_row * Vector2f(1, ratio_img / ratio_vp);\n\t}\n\n}\n\t\n#undef GUI_TEXT"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ImagesGrid.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n# include \"Config.hpp\"\n#include <core/graphics/Shader.hpp>\n# include <core/graphics/Texture.hpp>\n#include <core/view/ViewBase.hpp>\n#include <list>\n#include <map>\n\nnamespace sibr\n{\n\n\tclass SIBR_VIEW_EXPORT DrawUtilities\n\t{\n\tpublic:\n\n\t\tDrawUtilities();\n\n\t\tGLShader baseShader;\n\n\t\tGLuniform<Vector3f> colorGL;\n\t\tGLuniform <float> alphaGL;\n\t\tGLuniform <Vector2f> scalingGL;\n\t\tGLuniform <Vector2f> translationGL;\n\n\t\tGLShader gridShader;\n\n\t\t\n\t\tGLuniform <Vector2f> gridGL;\n\t\tGLuniform <Vector2f> gridTopLeftGL;\n\t\tGLuniform <Vector2f> gridBottomRightGL;\n\t\tGLuniform <float> lodGL;\n\t\tGLuniform <int> numImgsGL; \n\t\tGLuniform<bool> flip_textureGL;\n\n\t\tvoid baseRendering(const Mesh & mesh, Mesh::RenderMode mode, const Vector3f & color, const Vector2f & translation, const Vector2f & scaling, float alpha, const Viewport & vp);\n\n\t\tvoid rectangle(const Vector3f & color, const Vector2f & tl, const Vector2f & br, bool fill, float alpha, const Viewport & vp );\n\t\tvoid rectanglePixels(const Vector3f & color, const Vector2f & center, const Vector2f & diagonalPixs, bool fill, float alpha, const Viewport & vp);\n\t\tvoid circle(const Vector3f & color, const Vector2f & center, float radius, bool fill, float alpha, const Vector2f & scaling = Vector3f(1, 1), int precision = 50);\n\t\tvoid circlePixels(const Vector3f & color, const Vector2f & center, float radius, bool fill, float alpha, const Vector2f & winSize, int precision = 50);\n\t\tvoid linePixels(const Vector3f & color, const Vector2f & ptA, const Vector2f & ptB, const Vector2f & winSize);\n\t\t\n\t\tvoid image_grid(int num_imgs, uint texture, const Vector2f & grid, const Vector2f & tl, const Vector2f & br, int lod, bool flip_texture);\n\n\tprivate:\n\n\t\tvoid initBaseShader();\n\t\tvoid initGridShader();\n\n\t};\n\n\tstruct QuadData\n\t{\n\t\tVector2f center = { 0.5, 0.5 };\n\t\tVector2f diagonal = { 0.5, 0.5 };\n\n\t\tVector2f br() const { return center + diagonal; }\n\t\tVector2f tl() const { return center - diagonal; }\n\t};\n\n\tstruct QuadSelectionData\n\t{\n\t\toperator bool() const { return isActive; }\n\t\tVector2i first;\n\t\tVector2i second;\n\t\tbool isActive = false;\n\t};\n\n\tstruct DragClickData\n\t{\n\t\tVector2f center;\n\t\tVector2i position;\n\t\tbool isActive = false;\n\t};\n\n\tstruct MVpixel {\n\t\tMVpixel() : isDefined(false) {}\n\t\tMVpixel(int i, const Vector2i & px) : im(i), pos(px), isDefined(true) {}\n\t\t\n\t\toperator bool() const { return isDefined; }\n\t\tbool operator ==(const MVpixel & other) const { return im == other.im && pos == other.pos; }\n\n\t\tVector2i pos;\n\t\tint im;\n\t\tbool isDefined = false;\n\t};\n\n\n\tclass SIBR_VIEW_EXPORT GridMapping {\n\n\tprotected:\n\t\tMVpixel pixFromScreenPos(const Vector2i & pos, const Vector2f & size);\n\n\t\t//uvs in opengl [1,-1]\n\t\tVector2f uvFromMVpixel(const MVpixel & pix, bool use_center = false);\n\n\t\tvoid updateZoomBox(const Input & input, const sibr::Viewport & vp);\n\t\tvoid updateZoomScroll(const Input & input);\n\t\tvoid updateCenter(const Input & input, const Vector2f & size);\n\t\tvoid updateDrag(const Input & input, const Vector2f & size);\n\n\t\tvoid displayZoom(const sibr::Viewport & viewport, DrawUtilities & utils);\n\n\t\tvoid highlightPixel(const MVpixel & pix, const sibr::Viewport & viewport, const sibr::Vector3f & color = { 0, 1, 0 }, const sibr::Vector2f & minPixSize = { 10.0f, 10.0f });\n\t\tvoid highlightImage(int im, const sibr::Viewport & viewport, const sibr::Vector3f & color = { 0, 1, 0 }, float alpha = 0);\n\t\tvoid setupGrid(const Viewport & vp);\n\n\t\tDrawUtilities draw_utils;\n\t\tViewport _vp;\n\t\tQuadData viewRectangle;\n\t\tQuadSelectionData zoomSelection;\n\t\tDragClickData drag;\n\n\t\tint num_per_row = 4;\n\t\tVector2f grid_adjusted;\n\n\t\tVector2f imSizePixels;\n\t\tint num_imgs;\n\t};\n\n\n\n\ttemplate<typename T>\n\tclass ObjectSelection {\n\tpublic:\n\t\tvoid switchSelection(const T & t) {\n\t\t\tfor (auto it = _selected.begin(); it != _selected.end(); ++it) {\n\t\t\t\tif (*it == t) {\n\t\t\t\t\t_selected.erase(it);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_selected.push_back(t);\n\t\t}\n\n\t\tconst std::list<T> get() const {\n\t\t\treturn _selected;\n\t\t}\n\n\tprotected:\n\t\tstd::list<T> _selected;\n\t};\n\n\tstruct ImageGridLayer {\t\n\t\tITexture2DArray::Ptr imgs_texture_array;\n\n\t\tObjectSelection<MVpixel> pixel_selection;\n\t\tObjectSelection<int> image_selection;\n\n\t\tstd::string name;\n\t\tbool flip_texture = false;\n\t};\n\n\ttemplate<typename T> \n\tstruct HighlightData {\n\t\tstd::vector<T> data;\n\t\tVector3f color;\n\t\tfloat alpha = 0;\n\t};\n\t\n\n\tclass SIBR_VIEW_EXPORT ImagesGrid : public ViewBase, GridMapping \n\t{\n\t\tSIBR_CLASS_PTR(ImagesGrid);\n\n\tpublic:\n\n\t\tenum SelectionMode { NO_SELECTION, IMAGE_SELECTION, PIXEL_SELECTION };\n\n\t\t//ViewBase interface\n\t\tvirtual void\tonUpdate(Input& input, const Viewport & vp) override;\n\t\tvirtual void\tonRender(const Viewport & viewport) override;\n\t\tvirtual void\tonRender(IRenderTarget & dst);\n\t\tvirtual void\tonGUI() override;\n\n\t\tvoid addImagesToHighlight(const std::string & name, const std::vector<int> & imgs, const Vector3f & col, float alpha_fill = 0);\n\t\tvoid addPixelsToHighlight(const std::string & name, const std::vector<MVpixel> & pixs, const Vector3f & col, float alpha_fill = 0);\n\n\n\t\tconst MVpixel & getCurrentPixel();\n\n\tprotected:\n\n\t\tvoid listImagesLayerGUI();\n\t\tvoid optionsGUI();\n\n\t\tbool name_collision(const std::string & name) const;\n\t\tvoid setupFirstLayer();\n\n\t\tstd::list<ImageGridLayer> images_layers;\n\t\tstd::list<ImageGridLayer>::iterator current_layer;\n\t\tITexture2DArray::Ptr current_level_tex;\n\t\tint current_lod = 0;\n\t\tbool integer_pixel_values = true;\n\n\t\tstd::map< std::string, HighlightData<MVpixel> > pixels_to_highlight;\n\t\tstd::map<std::string, HighlightData<int> > images_to_highlight;\n\n\t\tMVpixel currentActivePix;\n\t\tSelectionMode selectionMode = IMAGE_SELECTION;\n\n\tpublic:\n\t\ttemplate<typename T, uint N>\n\t\tvoid addImageLayer(\n\t\t\tconst std::string & layer_name,\n\t\t\tconst std::vector<Image<T, N> > & images,\n\t\t\tuint flags = 0\n\t\t) {\n\t\t\tstd::vector<cv::Mat> images_cv(images.size());\n\t\t\tfor (size_t im = 0; im < images.size(); ++im) {\n\t\t\t\timages_cv[im] = images[im].toOpenCVBGR();\n\t\t\t}\n\t\t\taddImageLayer<T, N>(layer_name, images_cv, flags);\n\t\t}\n\n\t\ttemplate<typename T, uint N>\n\t\tvoid addImageLayer(\n\t\t\tconst std::string & layer_name,\n\t\t\tconst std::vector<ImagePtr<T,N>> & images,\n\t\t\tuint flags = 0\n\t\t) {\n\t\t\tstd::vector<cv::Mat> images_cv(images.size());\n\t\t\tfor (size_t im = 0; im < images.size(); ++im) {\n\t\t\t\timages_cv[im] = images[im]->toOpenCVBGR();\n\t\t\t}\n\t\t\taddImageLayer<T, N>(layer_name, images_cv, flags);\n\t\t}\n\n\t\ttemplate<typename T, uint N>\n\t\tvoid addImageLayer(\n\t\t\tconst std::string & layer_name,\n\t\t\tconst std::shared_ptr<Texture2DArray<T,N>> & images\n\t\t) {\n\t\t\tif (name_collision(layer_name)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tImageGridLayer layer;\n\t\t\tlayer.name = layer_name;\n\t\t\tlayer.imgs_texture_array = { std::static_pointer_cast<ITexture2DArray>(images) };\n\n\t\t\timages_layers.push_back(layer);\n\n\t\t\tsetupFirstLayer();\n\t\t}\n\n\t\ttemplate<typename T, uint N>\n\t\tvoid addImageLayer(\n\t\t\tconst std::string & layer_name,\n\t\t\tconst std::vector<cv::Mat> & images,\n\t\t\tuint flags = 0\n\t\t) {\n\n\t\t\tif (!images.size()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (name_collision(layer_name)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tImageGridLayer layer;\n\t\t\tlayer.name = layer_name;\n\t\t\tlayer.imgs_texture_array = std::make_shared<Texture2DArray<T, N>>(images, flags | SIBR_GPU_AUTOGEN_MIPMAP);\n\t\t\timages_layers.push_back(layer);\n\n\t\t\tsetupFirstLayer();\n\t\t}\n\t};\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/InteractiveCameraHandler.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"InteractiveCameraHandler.hpp\"\n#include \"core/graphics/Input.hpp\"\n#include \"core/graphics/Viewport.hpp\"\n#include \"core/graphics/Window.hpp\"\n#include \"core/raycaster/Raycaster.hpp\"\n#include \"core/view/UIShortcuts.hpp\"\n#include \"core/graphics/GUI.hpp\"\n\n# define IBRVIEW_SMOOTHCAM_POWER\t0.1f\n# define IBRVIEW_USESMOOTHCAM\t\ttrue\n# define SIBR_INTERPOLATE_FRAMES    30\n\n\nnamespace sibr {\n\n\tInteractiveCameraHandler::InteractiveCameraHandler(const bool supportRecording) : _trackball(true) {\n\t\t_currentMode = FPS;\n\t\t_shouldSmooth = IBRVIEW_USESMOOTHCAM;\n\t\t_startCam = 0;\n\t\t_interpFactor = 0;\n\t\t_shouldSnap = false;\n\t\t_supportRecording = supportRecording;\n\t\t_radius = 100.0f;\n\t\t_currentCamId = 0;\n\t\t_saveFrame = false;\n\t\t_saveFrameVideo = false;\n\t\t_viewport = Viewport(0, 0, 0, 0);\n\t\t_triggerCameraUpdate = false;\n\t\t_isSetup = false;\n\n\t\tsibr::UIShortcuts::global().add(\"[Camera] b\", \"orbit mode\");\n\t\tsibr::UIShortcuts::global().add(\"[Camera] y\", \"trackball mode\");\n\t\tsibr::UIShortcuts::global().add(\"[Camera] v\", \"interpolation mode\");\n\t\tsibr::UIShortcuts::global().add(\"[Camera] maj+y\", \"show/hide trackball\");\n\t\tif (_supportRecording) {\n\t\t\tsibr::UIShortcuts::global().add(\"c\", \"playback camera path\");\n\t\t\tsibr::UIShortcuts::global().add(\"ctrl+c\", \"save camera path (enter filename in the prompt)\");\n\t\t\tsibr::UIShortcuts::global().add(\"shift+c\", \"load camera path (enter filename in the prompt)\");\n\t\t\tsibr::UIShortcuts::global().add(\"alt+c\", \"start recording camera path\");\n\t\t}\n\n\n\t}\n\n\t// save default camera for a scene\n\tvoid InteractiveCameraHandler::saveDefaultCamera(const std::string& datasetPath)\n\t{\n\t\tstd::string selectedFile = datasetPath;\n\n\t\tselectedFile.append(\"/default_camera.bin\");\n\t\t_currentCamera.saveToBinary(selectedFile);\n\t\tSIBR_LOG << \"Saved camera (\" << selectedFile << \").\" << std::endl;\n\t}\n\n\tvoid InteractiveCameraHandler::loadDefaultCamera(const sibr::InputCamera& cam, const std::string& datasetPath)\n\t{\n\t\tsibr::InputCamera savedCam;\n\t\tstd::ifstream camFile(datasetPath + \"/default_camera.bin\");\n\t\tfromCamera(cam, false);\n\t\tif (camFile.good()) {\n\t\t\tsavedCam.loadFromBinary(datasetPath + \"/default_camera.bin\");\n\t\t\tSIBR_LOG << \"Loaded  \" << datasetPath << \"/default_camera.bin\" << std::endl;\n\t\t\tfromCamera(savedCam, false);\n\t\t}\n\t}\n\n\tvoid InteractiveCameraHandler::setup(const std::vector<InputCamera::Ptr>& cams, const sibr::Vector2u & resolution, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster)\n\t{\n\t\tsetup(cams, viewport, raycaster);\n\n\t}\n\n\tvoid InteractiveCameraHandler::setup(const sibr::InputCamera & cam, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster) {\n\t\t_raycaster = raycaster;\n\t\t_viewport = viewport;\n\t\tfromCamera(cam, false);\n\t}\n\n\tvoid InteractiveCameraHandler::setup(const Eigen::AlignedBox<float, 3> & areaOfInterest, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster)\n\t{\n\t\t_raycaster = raycaster;\n\t\t_viewport = viewport;\n\t\t_radius = areaOfInterest.diagonal().norm();\n\t\t// Use the trackball to compute an initial camera.\n\t\t_trackball.fromBoundingBox(areaOfInterest, viewport);\n\t\tfromCamera(_trackball.getCamera(), false);\n\t}\n\n\tvoid InteractiveCameraHandler::setup(const std::vector<InputCamera::Ptr>& cams, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster, const sibr::Vector2f & clippingPlanes) {\n\n\t\t// setup interpolation path if not set\n\t\tif (_interpPath.empty()) {\n\t\t\tsetupInterpolationPath(cams);\n\t\t}\n\t\t// Update the near and far planes.\n\n\t\tsibr::Vector3f center(0, 0, 0);\n\t\tfor (const auto& cam : cams) {\n\t\t\tcenter += cam->transform().position();\n\t\t}\n\t\tcenter /= cams.size();\n\n\t\tfloat avgDist = 0;\n\t\tfor (const auto& cam : cams) {\n\t\t\tavgDist += (cam->transform().position() - center).norm();\n\t\t}\n\t\tavgDist /= cams.size();\n\t\t_radius = avgDist;\n\n\t\tsibr::InputCamera idealCam = *cams[0];\n\t\tif(clippingPlanes[0] < 0.0f || clippingPlanes[1] < 0.0f) {\n\t\t\tfloat zFar = -1.0f, zNear = -1.0f;\n\t\t\tfor (const auto & cam : cams) {\n\t\t\t\tzFar = (zFar<0 || cam->zfar() > zFar ? cam->zfar() : zFar);\n\t\t\t\tzNear = (zNear < 0 || cam->znear() < zNear ? cam->znear() : zNear);\n\t\t\t}\n\t\t\tidealCam.zfar(zFar*1.1f);\n\t\t\tidealCam.znear(zNear*0.9f);\n\t\t} else {\n\t\t\tidealCam.znear(clippingPlanes[0]);\n\t\t\tidealCam.zfar(clippingPlanes[1]);\n\t\t}\n\t\t\n\t\tSIBR_LOG << \"Interactive camera using (\" << idealCam.znear() << \",\" << idealCam.zfar() << \") near/far planes.\" << std::endl;\n\n\t\tsetup(idealCam, viewport, raycaster);\n\t}\n\n\tvoid InteractiveCameraHandler::setup(const std::shared_ptr<sibr::Mesh> mesh, const sibr::Viewport & viewport) {\n\t\t_raycaster = std::make_shared<sibr::Raycaster>();\n\t\t_raycaster->addMesh(*mesh);\n\t\t_viewport = viewport;\n\t\t_trackball.fromBoundingBox(mesh->getBoundingBox(), viewport);\n\t\t_radius = mesh->getBoundingBox().diagonal().norm();\n\t\tfromCamera(_trackball.getCamera(), false);\n\t}\n\n\tvoid InteractiveCameraHandler::fromCamera(const sibr::InputCamera & cam, bool interpolate, bool updateResolution) {\n\t\t_isSetup = true;\n\n\t\tsibr::InputCamera idealCam(cam);\n\t\tif (updateResolution) {\n\t\t\t// Viewport might have not been set, in this case defer the full camera update \n\t\t\t// until after the viewport has been updated, ie in onUpdate().\n\t\t\tif (_viewport.isEmpty()) {\n\t\t\t\t_triggerCameraUpdate = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst float w = _viewport.finalWidth();\n\t\t\t\tconst float h = _viewport.finalHeight();\n\t\t\t\tidealCam.size(uint(w), uint(h));\n\t\t\t\tidealCam.aspect(w / h);\n\t\t\t}\n\t\t}\n\n\t\t_orbit.fromCamera(idealCam, _raycaster);\n\t\t_fpsCamera.fromCamera(idealCam);\n\n\n\t\tif (_raycaster != nullptr) {\n\t\t\tsibr::RayHit hit = _raycaster->intersect(sibr::Ray(idealCam.position(), idealCam.dir()));\n\t\t\t// If hit at the proxy surface, save the distance between the camera and the mesh, to use as a trackball radius.\n\t\t\tif (hit.hitSomething()) {\n\t\t\t\t_radius = hit.dist();\n\t\t\t}\n\t\t}\n\t\t_trackball.fromCamera(idealCam, _viewport, _radius);\n\n\t\t_currentCamera = idealCam;\n\t\t_cameraFovDeg = _currentCamera.fovy() * 180.0f / float(M_PI);\n\n\t\tif (!interpolate) {\n\t\t\t_previousCamera = _currentCamera;\n\t\t}\n\n\t\t_clippingPlanes[0] = _currentCamera.znear();\n\t\t_clippingPlanes[1] = _currentCamera.zfar();\n\t}\n\n\tvoid InteractiveCameraHandler::fromTransform(const Transform3f & transform, bool interpolate, bool updateResolution)\n\t{\n\t\tInputCamera camCopy = getCamera();\n\t\tcamCopy.transform(transform);\n\t\tfromCamera(camCopy, interpolate, updateResolution);\n\t}\n\n\tvoid InteractiveCameraHandler::setClippingPlanes(float znear, float zfar) {\n\t\tif (znear > 0.0f) {\n\t\t\t_clippingPlanes[0] = znear;\n\t\t}\n\t\tif (zfar > 0.0f) {\n\t\t\t_clippingPlanes[1] = zfar;\n\t\t}\n\t\t_currentCamera.znear(_clippingPlanes[0]);\n\t\t_currentCamera.zfar(_clippingPlanes[1]);\n\t\tfromCamera(_currentCamera);\n\t}\n\n\tvoid InteractiveCameraHandler::switchMode(const InteractionMode mode) {\n\t\tif (_currentMode == mode) {\n\t\t\treturn;\n\t\t}\n\t\t_currentMode = mode;\n\n\t\t// Synchronize internal cameras.\n\t\tfromCamera(_currentCamera, _shouldSmooth);\n\n\t\t_interpFactor = 0;\n\n\t\tstd::cout << \"Switched to \";\n\t\tswitch (_currentMode) {\n\t\tcase ORBIT:\n\t\t\tstd::cout << \"orbit\";\n\t\t\tbreak;\n\t\tcase INTERPOLATION:\n\t\t\tstd::cout << \"interpolation\";\n\t\t\tbreak;\n\t\tcase TRACKBALL:\n\t\t\tstd::cout << \"trackball\";\n\t\t\tbreak;\n\t\tcase NONE:\n\t\t\tstd::cout << \"none\";\n\t\t\tbreak;\n\t\tcase FPS:\n\t\tdefault:\n\t\t\tstd::cout << \"fps&pan\";\n\t\t\tbreak;\n\t\t}\n\t\tstd::cout << \" mode.\" << std::endl;\n\n\t}\n\n\tint\tInteractiveCameraHandler::findNearestCamera(const std::vector<InputCamera::Ptr>& inputCameras) const\n\t{\n\t\tif (inputCameras.size() == 0)\n\t\t\treturn -1;\n\n\t\tint selectedCam = 0;\n\t\tint numCams = inputCameras.size();\n\n\t\tstd::vector<uint> sortByDistance = sibr::IBRBasicUtils::selectCamerasSimpleDist(inputCameras, _currentCamera, numCams);\n\t\tstd::vector<uint> sortByAngle = sibr::IBRBasicUtils::selectCamerasAngleWeight(inputCameras, _currentCamera, numCams);\n\n\t\tstd::map<uint, int> weights;\n\t\tfor (uint cam_id = 0; cam_id < sortByDistance.size(); cam_id++) {\n\t\t\tweights[sortByDistance[cam_id]] = cam_id;\n\t\t}\n\n\t\tfor (uint cam_id = 0; cam_id < sortByAngle.size(); cam_id++) {\n\t\t\tweights[sortByAngle[cam_id]] += cam_id;\n\t\t}\n\n\t\tstd::multimap<int, uint> combinedWeight;\n\n\t\tfor (auto const& weight : weights) {\n\t\t\tcombinedWeight.insert(std::make_pair(weight.second, weight.first));\n\t\t}\n\n\t\tselectedCam = combinedWeight.begin()->second;\n\t\t\n\t\treturn selectedCam;\n\t}\n\n\tvoid InteractiveCameraHandler::setupInterpolationPath(const std::vector<InputCamera::Ptr> & cameras) {\n\t\t_interpPath.resize(cameras.size());\n\n\t\tbool defaultPath = false;\n\t\tfor (int i = 0; i < cameras.size(); i++) {\n\t\t\tif (cameras[i]->isActive()) {\n\t\t\t\tif (cameras[i]->id() < cameras.size()) {\n\t\t\t\t\t_interpPath[cameras[i]->id()] = cameras[i];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstd::cout << \"Cameras ID inconsistent. Setting default interpolation path.\" << std::endl;\n\t\t\t\t\tdefaultPath = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (defaultPath) {\n\t\t\t_interpPath.clear();\n\t\t\tfor (int i = 0; i < cameras.size(); i++) {\n\t\t\t\tif (cameras[i]->isActive()) {\n\t\t\t\t\t_interpPath.push_back(cameras[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstd::sort(_interpPath.begin(), _interpPath.end(), [](const InputCamera::Ptr & a, const InputCamera::Ptr & b) {\n\t\t\t\treturn a->id() < b->id();\n\t\t\t});\n\t\t}\n\t}\n\n\tvoid InteractiveCameraHandler::interpolate() {\n\t\tif (_interpPath.empty()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If we reach the last frame of the interpolation b/w two cameras, skip to next camera.\n\t\tif (_interpFactor == SIBR_INTERPOLATE_FRAMES - 1)\n\t\t{\n\t\t\t_interpFactor = 0;\n\t\t\t_startCam++;\n\t\t}\n\n\t\t// If we reach the last camera, restart the interpolation.\n\t\tif (_startCam >= _interpPath.size() - 1) {\n\t\t\t_interpFactor = 0;\n\t\t\t_startCam = 0;\n\t\t}\n\n\t\tfloat k = std::min(std::max(((_interpFactor) / (float)SIBR_INTERPOLATE_FRAMES), 1e-6f), 1.0f - 1e-6f);\n\n\t\tsibr::InputCamera & camStart = *_interpPath[_startCam];\n\t\tsibr::InputCamera & camNext = *_interpPath[_startCam + 1];\n\t\tconst sibr::Camera cam = sibr::Camera::interpolate(camStart, camNext, k);\n\t\t_currentCamera = sibr::InputCamera(cam, camStart.w(), camStart.h());\n\t\t_currentCamera.aspect(_viewport.finalWidth() / _viewport.finalHeight());\n\n\n\t\t_interpFactor = _interpFactor + 1;\n\t}\n\n\tvoid InteractiveCameraHandler::snapToCamera(const int i) {\n\t\tif (!_interpPath.empty()) {\n\t\t\tunsigned int nearestCam = (i == -1 ? findNearestCamera(_interpPath) : i);\n\t\t\tnearestCam = sibr::clamp(nearestCam, (unsigned int)(0), (unsigned int)(_interpPath.size() - 1));\n\t\t\tfromCamera(*_interpPath[nearestCam], true, false);\n\t\t}\n\t}\n\n\tvoid InteractiveCameraHandler::setFPSCameraSpeed(const float speed) {\n\t\t_fpsCamera.setSpeed(speed);\n\t}\n\n\tvoid InteractiveCameraHandler::update(const sibr::Input & input, float deltaTime, const sibr::Viewport & viewport) {\n\t\tif (!viewport.isEmpty()) {\n\t\t\t_viewport = viewport;\n\t\t}\n\t\tif (_triggerCameraUpdate && !_viewport.isEmpty()) {\n\t\t\tfromCamera(_currentCamera, false, true);\n\t\t\t_triggerCameraUpdate = false;\n\t\t}\n\t\tif (input.key().isReleased(Key::N)) {\n\t\t\t_keyCameras.emplace_back(new InputCamera(getCamera()));\n\t\t}\n\n\t\tif (input.key().isReleased(sibr::Key::B)) {\n\t\t\tswitchMode(_currentMode == ORBIT ? FPS : ORBIT);\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::V)) {\n\t\t\tswitchMode(_currentMode == INTERPOLATION ? FPS : INTERPOLATION);\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::LeftShift) && input.key().isReleased(sibr::Key::Y)) {\n\t\t\tif (_currentMode == TRACKBALL) {\n\t\t\t\t_trackball.drawThis = !_trackball.drawThis;\n\t\t\t\tSIBR_LOG << \"[Trackball] Display visual guides: \" << (_trackball.drawThis ? \"on\" : \"off\") << \".\" << std::endl;\n\t\t\t}\n\t\t}\n\t\t// only free key\n\t\telse if (input.key().isReleased(sibr::Key::M)) {\n\t\t\t_cameraRecorder.saveImage(\"\", _currentCamera, _currentCamera.w(), _currentCamera.h());\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::Y)) {\n\t\t\tswitchMode(_currentMode == TRACKBALL ? FPS : TRACKBALL);\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::Space)) {\n\t\t\tswitchSnapping();\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::P)) {\n\t\t\tsnapToCamera(-1);\n\n\t\t}\n\t\telse if (_supportRecording) {\n\t\t\tif (input.key().isActivated(Key::LeftShift) && (input.key().isActivated(Key::LeftAlt) || input.key().isActivated(Key::LeftControl)) && input.key().isReleased(Key::C))\n\t\t\t{\n\n\t\t\t\t_saveFrame = !_saveFrame;\n\t\t\t\tif (_saveFrame) {\n\t\t\t\t\tstd::string pathOutView;\n\t\t\t\t\tfor (uint i = 0; i < 10; ++i) std::cout << std::endl;\n\t\t\t\t\tstd::cout << \"Enter path to output the frames:\" << std::endl;\n\t\t\t\t\tsafeGetline(std::cin, pathOutView);\n\n\t\t\t\t\tif (!pathOutView.empty()) {\n\t\t\t\t\t\t_cameraRecorder.saving(pathOutView + \"/\");\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t_cameraRecorder.stopSaving();\n\t\t\t\t\t\t_saveFrame = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_cameraRecorder.stopSaving();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (input.key().isActivated(Key::LeftShift) && input.key().isReleased(Key::C))\n\t\t\t{\n\t\t\t\tstd::string filename;\n\n\t\t\t\tint w, h;\n\t\t\t\tfor (uint i = 0; i < 10; ++i) std::cout << std::endl;\n\t\t\t\tstd::cout << \"Enter a filename for loading a camera path:\" << std::endl;\n\t\t\t\tsafeGetline(std::cin, filename);\n\t\t\t\tstd::cout << \"Enter width for camera\" << std::endl;\n\t\t\t\tstd::cin >> w;\n\t\t\t\tstd::cout << \"Enter height for camera\" << std::endl;\n\t\t\t\tstd::cin >> h;\n\t\t\t\tstd::cin.get();\n\n\t\t\t\t_cameraRecorder.reset();\n\t\t\t\tif (boost::filesystem::extension(filename) == \".out\")\n\t\t\t\t\t_cameraRecorder.loadBundle(filename, w, h);\n\t\t\t\telse\n\t\t\t\t\t_cameraRecorder.load(filename);\n\t\t\t\t_cameraRecorder.playback();\n\t\t\t}\n\t\t\telse if (input.key().isActivated(Key::LeftControl) && input.key().isReleased(Key::C))\n\t\t\t{\n\t\t\t\tstd::string filename;\n\t\t\t\tfor (uint i = 0; i < 10; ++i) std::cout << std::endl;\n\t\t\t\tstd::cout << \"Enter a filename for saving a camera path:\" << std::endl;\n\t\t\t\tsafeGetline(std::cin, filename);\n\t\t\t\t_cameraRecorder.save(filename);\n\t\t\t\t_cameraRecorder.saveAsBundle(filename + \".out\", _currentCamera.h());\n\t\t\t\t_cameraRecorder.saveAsLookAt(filename + \".lookat\");\n\t\t\t\tif (_fribrExport) {\n\t\t\t\t\tconst int height = int(std::floor(1920.0f / _currentCamera.aspect()));\n\t\t\t\t\t_cameraRecorder.saveAsFRIBRBundle(filename + \"_fribr/\", 1920, height);\n\t\t\t\t}\n\t\t\t\t_cameraRecorder.stop();\n\t\t\t}\n\t\t\telse if (input.key().isActivated(Key::LeftAlt) && input.key().isReleased(Key::C))\n\t\t\t{\n\t\t\t\t_cameraRecorder.reset();\n\t\t\t\t_cameraRecorder.record();\n\t\t\t}\n\t\t\telse if (input.key().isActivated(Key::RightAlt) && input.key().isReleased(Key::C)) {\n\t\t\t\tstd::string filename;\n\t\t\t\tfor (uint i = 0; i < 10; ++i) std::cout << std::endl;\n\t\t\t\tstd::cout << \"Enter a filename for saving a camera path:\" << std::endl;\n\t\t\t\tsafeGetline(std::cin, filename);\n\t\t\t\t_cameraRecorder.playback();\n\t\t\t\t_cameraRecorder.saveAsBundle(filename + \".out\", _currentCamera.h());\n\t\t\t\t_cameraRecorder.saveAsLookAt(filename + \".lookat\");\n\t\t\t\tif (_fribrExport) {\n\t\t\t\t\tconst int height = int(std::floor(1920.0f / _currentCamera.aspect()));\n\t\t\t\t\t_cameraRecorder.saveAsFRIBRBundle(filename + \"_fribr/\", 1920, height);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (input.key().isReleased(Key::C)) {\n\t\t\t\t_cameraRecorder.playback();\n\t\t\t}\n\t\t}\n\n\t\t// If the camera recorder is currently playing, don't update the various camera modes.\n\t\tif (!_cameraRecorder.isPlaying()) {\n\n\t\t\tswitch (_currentMode) {\n\t\t\tcase ORBIT:\n\t\t\t\t_orbit.update(input, _raycaster);\n\t\t\t\t_currentCamera = _orbit.getCamera();\n\t\t\t\tbreak;\n\t\t\tcase INTERPOLATION:\n\t\t\t\tinterpolate();\n\t\t\t\tbreak;\n\t\t\tcase TRACKBALL:\n\t\t\t\t_trackball.update(input, _viewport, _raycaster);\n\t\t\t\t_currentCamera = _trackball.getCamera();\n\t\t\t\tbreak;\n\t\t\tcase NONE:\n\t\t\t\t//do nothing\n\t\t\t\tbreak;\n\t\t\tcase FPS:\n\t\t\tdefault:\n\t\t\t\t_fpsCamera.update(input, deltaTime);\n\t\t\t\tif (_shouldSnap) {\n\t\t\t\t\t_fpsCamera.snap(_interpPath);\n\t\t\t\t}\n\t\t\t\t_currentCamera = _fpsCamera.getCamera();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (_shouldSmooth && _currentMode != INTERPOLATION) {\n\t\t\t\tconst sibr::Camera newcam = sibr::Camera::interpolate(_previousCamera, _currentCamera, IBRVIEW_SMOOTHCAM_POWER);\n\t\t\t\t_currentCamera = sibr::InputCamera(newcam, _currentCamera.w(), _currentCamera.h());\n\t\t\t}\n\n\t\t}\n\n\t\t// Note this call has three modes: record (only read the arg camera) | playback (overwrite the arg camera) | do nothing (do nothing)\n\t\t_cameraRecorder.use(_currentCamera);\n\n\t\t_previousCamera = _currentCamera;\n\t\t_clippingPlanes[0] = _currentCamera.znear();\n\t\t_clippingPlanes[1] = _currentCamera.zfar();\n\t}\n\n\tconst sibr::InputCamera& InteractiveCameraHandler::getCamera(void) const {\n\t\treturn _currentCamera;\n\t}\n\n\tvoid InteractiveCameraHandler::onRender(const sibr::Viewport& viewport) {\n\t\tif (_currentMode == TRACKBALL) {\n\t\t\t_trackball.onRender(viewport);\n\t\t}\n\t}\n\n\tvoid InteractiveCameraHandler::onGUI(const std::string& suffix) {\n\n\t\tconst std::string fullName = (suffix);\n\n\n\t\t// Saving camera.\n\t\tif (ImGui::Begin(fullName.c_str())) {\n\n\t\t\tImGui::PushScaledItemWidth(130);\n\t\t\tImGui::Combo(\"Mode\", (int*)&_currentMode, \"FPS\\0Orbit\\0Interp.\\0Trackball\\0None\\0\\0\");\n\t\t\tswitchMode(_currentMode);\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::Button(\"Load camera\")) {\n\t\t\t\tstd::string selectedFile;\n\t\t\t\tif (sibr::showFilePicker(selectedFile, Default)) {\n\t\t\t\t\tif (!selectedFile.empty()) {\n\t\t\t\t\t\tsibr::InputCamera savedCam;\n\t\t\t\t\t\tsavedCam.loadFromBinary(selectedFile);\n\t\t\t\t\t\tSIBR_LOG << \"Loaded saved camera (\" << selectedFile << \").\" << std::endl;\n\t\t\t\t\t\tfromCamera(savedCam, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::Button(\"Save camera (bin)\")) {\n\t\t\t\tstd::string selectedFile;\n\t\t\t\tif (sibr::showFilePicker(selectedFile, Save)) {\n\t\t\t\t\tif (!selectedFile.empty()) {\n\t\t\t\t\t\tif (selectedFile[selectedFile.size() - 1] == '/' || selectedFile[selectedFile.size() - 1] == '\\\\') {\n\t\t\t\t\t\t\tselectedFile.append(\"default_camera.bin\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_currentCamera.saveToBinary(selectedFile);\n\t\t\t\t\t\tSIBR_LOG << \"Saved camera (\" << selectedFile << \").\" << std::endl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tImGui::Separator();\n\t\t\tif (ImGui::Button(\"Snap to closest\")) {\n\t\t\t\t_currentCamId = findNearestCamera(_interpPath);\n\t\t\t\tsnapToCamera(_currentCamId);\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::InputInt(\"Snap to\", &_currentCamId, 1, 10)) {\n\t\t\t\t_currentCamId = sibr::clamp(_currentCamId, 0, int(_interpPath.size()) - 1);\n\t\t\t\tsnapToCamera(_currentCamId);\n\t\t\t}\n\n\t\t\tif (_currentMode == TRACKBALL) {\n\t\t\t\tImGui::SameLine();\n\t\t\t\tImGui::Checkbox(\"Show trackball\", &_trackball.drawThis);\n\t\t\t}\n\n\t\t\tif (ImGui::InputFloat(\"Fov Y\", &_cameraFovDeg, 1.0f, 5.0f)) {\n\t\t\t\t_cameraFovDeg = sibr::clamp(_cameraFovDeg, 1.0f, 180.0f);\n\t\t\t\t_currentCamera.fovy(_cameraFovDeg * float(M_PI) / 180.0f);\n\t\t\t\t// Synchronize internal cameras.\n\t\t\t\tfromCamera(_currentCamera, _shouldSmooth);\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::InputFloat(\"Near\", &_clippingPlanes[0], 1.0f, 10.0f)) {\n\t\t\t\t_currentCamera.znear(_clippingPlanes[0]);\n\t\t\t\tfromCamera(_currentCamera);\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::InputFloat(\"Far\", &_clippingPlanes[1], 1.0f, 10.0f)) {\n\t\t\t\t_currentCamera.zfar(_clippingPlanes[1]);\n\t\t\t\tfromCamera(_currentCamera);\n\t\t\t}\n\n\t\t\tImGui::Separator();\n\t\t\tImGui::PopItemWidth();\n\n\t\t\t// Record camera keypoints.\n\t\t\tImGui::Text(\"Key cameras: %d\", _keyCameras.size());\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::Button(\"Add key\")) {\n\t\t\t\t_keyCameras.emplace_back(new InputCamera(getCamera()));\n\t\t\t}\n\t\t\tImGui::SameLine();\n\n\t\t\tif (!_keyCameras.empty()) {\n\t\t\t\tif (ImGui::Button(\"Remove key\")) {\n\t\t\t\t\t_keyCameras.pop_back();\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t}\n\n\t\t\tif (ImGui::Button(\"Save key cameras...\")) {\n\t\t\t\tstd::string outpath;\n\t\t\t\tif (sibr::showFilePicker(outpath, Save, \"\", \"lookat\") && !outpath.empty()) {\n\t\t\t\t\tInputCamera::saveAsLookat(_keyCameras, outpath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tImGui::Separator();\n\t\t}\n\t\tImGui::End();\n\n\t\t// Recording handling.\n\t\tif (_supportRecording) {\n\t\t\tstd::string selectedFile;\n\n\t\t\tif (ImGui::Begin(fullName.c_str())) {\n\t\t\t\tImGui::PushScaledItemWidth(130);\n\n\t\t\t\tif (ImGui::Button(\"Play\")) {\n\t\t\t\t\t_cameraRecorder.playback();\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button(\"Play (No Interp)\")) {\n\t\t\t\t\t_cameraRecorder.playback();\n\t\t\t\t\t_cameraRecorder.playNoInterpolation(true);\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button(\"Record\")) {\n\t\t\t\t\t_cameraRecorder.reset();\n\t\t\t\t\t_cameraRecorder.record();\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button(\"Stop\")) {\n\t\t\t\t\t_cameraRecorder.stop();\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif(ImGui::InputFloat(\"Speed##CamRecorder\", &_cameraRecorder.speed(), 0.1f)) {\n\t\t\t\t\t_cameraRecorder.speed() = sibr::clamp(_cameraRecorder.speed(), 0.0f, 1.0f);\n\t\t\t\t}\n\n\t\t\t\tif (ImGui::Button(\"Load path\")) {\n\t\t\t\t\tif (sibr::showFilePicker(selectedFile, Default)) {\n\t\t\t\t\t\tif (!selectedFile.empty()) {\n\t\t\t\t\t\t\tSIBR_LOG << \"Loading\" << std::endl;\n\t\t\t\t\t\t\t_cameraRecorder.reset();\n\t\t\t\t\t\t\tif (boost::filesystem::extension(selectedFile) == \".out\")\n\t\t\t\t\t\t\t\t_cameraRecorder.loadBundle(selectedFile, _currentCamera.w(), _currentCamera.h());\n\t\t\t\t\t\t\telse if (boost::filesystem::extension(selectedFile) == \".lookat\")\n\t\t\t\t\t\t\t\t_cameraRecorder.loadLookat(selectedFile, _currentCamera.w(), _currentCamera.h());\n\t\t\t\t\t\t\telse if (boost::filesystem::extension(selectedFile) == \".txt\")\n\t\t\t\t\t\t\t\t_cameraRecorder.loadColmap(selectedFile, _currentCamera.w(), _currentCamera.h());\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t_cameraRecorder.load(selectedFile);\n// dont play back until explicitly requested \n//\t\t\t\t\t\t\t_cameraRecorder.playback();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button(\"Save path\")) {\n\t\t\t\t\t_cameraRecorder.stop();\n\t\t\t\t\tif (sibr::showFilePicker(selectedFile, Save)) {\n\t\t\t\t\t\tif (!selectedFile.empty()) {\n\t\t\t\t\t\t\tSIBR_LOG << \"Saving\" << std::endl;\n\t\t\t\t\t\t\t_cameraRecorder.save(selectedFile + \".path\");\n\t\t\t\t\t\t\t_cameraRecorder.saveAsBundle(selectedFile + \".out\", _currentCamera.h());\n\t\t\t\t\t\t\t_cameraRecorder.saveAsColmap(selectedFile, _currentCamera.h(), _currentCamera.w());\n\t\t\t\t\t\t\t_cameraRecorder.saveAsLookAt(selectedFile + \".lookat\");\n\t\t\t\t\t\t\tif (_fribrExport) {\n\t\t\t\t\t\t\t\tconst int height = int(std::floor(1920.0f / _currentCamera.aspect()));\n\t\t\t\t\t\t\t\t_cameraRecorder.saveAsFRIBRBundle(selectedFile + \"_fribr/\", 1920, height);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//ImGui::SameLine();\n\t\t\t\tImGui::Checkbox(\"Save video (from playing)\", (&_saveFrame));\n\t\t\t\tif (_saveFrame) {\n\t\t\t\t\t_cameraRecorder.savingVideo(_saveFrame);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tImGui::SameLine();\n\t\t\t\tconst bool saveFrameOld = _saveFrameVideo;\n\t\t\t\tImGui::Checkbox(\"Save frames (from playing)\", (&_saveFrameVideo));\n\t\t\t\tif (_saveFrameVideo && !saveFrameOld) {\n\t\t\t\t\tif (sibr::showFilePicker(selectedFile, Directory)) {\n\t\t\t\t\t\tif (!selectedFile.empty()) {\n\t\t\t\t\t\t\t_cameraRecorder.saving(selectedFile + \"/\");\n\t\t\t\t\t\t\t_cameraRecorder.savingVideo(_saveFrameVideo);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t_cameraRecorder.stopSaving();\n\t\t\t\t\t\t\t_saveFrameVideo = false;\n\t\t\t\t\t\t\t_cameraRecorder.savingVideo(_saveFrameVideo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!_saveFrameVideo && saveFrameOld) {\n\t\t\t\t\t_cameraRecorder.stopSaving();\n\t\t\t\t\t_cameraRecorder.savingVideo(_saveFrameVideo);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ImGui::SameLine();\n\t\t\t\t//ImGui::Checkbox(\"Fribr export\", &_fribrExport);\n\t\t\t\tImGui::Separator();\n\t\t\t\tImGui::PopItemWidth();\n\t\t\t}\n\t\t\tImGui::End();\n\t\t}\n\t\t// add the FPS camera controls in the same ImGui window.\n\t\t_fpsCamera.onGUI(suffix);\n\t\t\n\n\t}\n\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/InteractiveCameraHandler.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include <memory>\r\n#include <fstream>\r\n\r\n#include \"Config.hpp\"\r\n#include \"core/graphics/Shader.hpp\"\r\n#include \"core/assets/InputCamera.hpp\"\r\n\r\n#include \"core/view/IBRBasicUtils.hpp\"\r\n#include \"core/view/FPSCamera.hpp\"\r\n#include \"core/view/Orbit.hpp\"\r\n#include \"core/view/TrackBall.h\"\r\n#include \"core/assets/CameraRecorder.hpp\"\r\n#include \"core/graphics/Viewport.hpp\"\r\n#include \"core/graphics/Mesh.hpp\"\r\n#include \"ICameraHandler.hpp\"\r\n\r\nnamespace sibr {\r\n\tclass Mesh;\r\n\tclass Input;\r\n\tclass Raycaster;\r\n\r\n\t/**\r\n\t\tThe InteractiveCameraHandler gathers various types of camera interactions and\r\n\t\tallows the user to switch between them, keeping them in sync.\r\n\t\tIt can also perform camera interpolation along a path.\r\n\t\t\\ingroup sibr_view\r\n\t*/\r\n\tclass SIBR_VIEW_EXPORT InteractiveCameraHandler : public ICameraHandler\r\n\t{\r\n\r\n\tpublic:\r\n\r\n\t\tSIBR_CLASS_PTR(InteractiveCameraHandler);\r\n\r\n\t\t/** Current handler interaction mode. */\r\n\t\tenum InteractionMode {\r\n\t\t\tFPS = 0, ORBIT = 1, INTERPOLATION = 2, TRACKBALL = 3, NONE=4\r\n\t\t};\r\n\r\n\t\t/** Constructor.\r\n\t\t *\\param supportRecording can this handler record camera paths.\r\n\t\t *\\todo Do we really need this option?\r\n\t\t */\r\n\t\tInteractiveCameraHandler(const bool supportRecording = true);\r\n\r\n\t\t/** \\deprecated Resolution is deprecated and will be removed in the near future.\r\n\t\t *\tSee setup(const std::vector<InputCamera::Ptr>&, const sibr::Viewport&, std::shared_ptr<sibr::Raycaster>,...) instead. */\r\n\t\tvoid setup(const std::vector<InputCamera::Ptr> & cams, const sibr::Vector2u & resolution, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster);\r\n\r\n\t\t/** Setup an interactive camera handler from an existing camera.\r\n\t\tThe interactive camera will be initialized at the position of the argument camera.\r\n\t\t\\param cam initialization camera\r\n\t\t\\param viewport the window viewport\r\n\t\t\\param raycaster raycaster containing the mesh displayed (used for the trackball centering), can be nullptr\r\n\t\t*/\r\n\t\tvoid setup(const sibr::InputCamera & cam, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster);\r\n\r\n\t\t/** Setup an interactive camera handler from an area of interest.\r\n\t\tThe interactive camera will be initialized so that the area is completely visible.\r\n\t\t\\param areaOfInterest the region of space to show\r\n\t\t\\param viewport the window viewport\r\n\t\t\\param raycaster raycaster containing the mesh displayed (used for the trackball centering), can be nullptr\r\n\t\t*/\r\n\t\tvoid setup(const Eigen::AlignedBox<float, 3>& areaOfInterest, const sibr::Viewport & viewport, const std::shared_ptr<sibr::Raycaster> raycaster);\r\n\r\n\t\t/** Setup an interactive camera handler from a series of existing cameras and mesh. \r\n\t\tThe interactive camera will be initialized at the position of the first camera from the list.\r\n\t\t\\param cams a list of cameras (used for interpolation path)\r\n\t\t\\param viewport the window viewport\r\n\t\t\\param raycaster raycaster containing the mesh displayed (used for the trackball centering), can be nullptr\r\n\t\t\\param clippingPlanes optional clipping planes to enforce\r\n\t\t*/\r\n\t\tvoid setup(const std::vector<InputCamera::Ptr>& cams, const sibr::Viewport& viewport, std::shared_ptr<sibr::Raycaster> raycaster, const sibr::Vector2f & clippingPlanes = {-1.0f,-1.0f});\r\n\r\n\t\t/** Setup an interactive camera handler from a mesh.\r\n\t\tThe interactive camera will be initialized so that the mesh is completely visible.\r\n\t\t\\param mesh the mesh to display\r\n\t\t\\param viewport the window viewport\r\n\t\t\\note a raycaster will be set up internally\r\n\t\t*/\r\n\t\tvoid setup(std::shared_ptr<sibr::Mesh> mesh, const sibr::Viewport& viewport);\r\n\r\n\t\t/** Setup a camera path for the interpolation mode. \r\n\t\t * \\param cameras to interpolate along\r\n\t\t */\r\n\t\tvoid setupInterpolationPath(const std::vector<InputCamera::Ptr> & cameras);\r\n\r\n\t\t/** Move the interactive camera to a new position and change its internal parameters.\r\n\t\t\\param cam the cameras the parameters and pose should be copied from\r\n\t\t\\param interpolate smooth interpolation between the current pose and the new one\r\n\t\t\\param updateResolution should the resolution of the camera be updated or not. Can be disabled if the new cam has a size incompatible with the current viewport.\r\n\t\t*/\r\n\t\tvoid fromCamera(const sibr::InputCamera & cam, bool interpolate = true, bool updateResolution = true);\r\n\t\t\r\n\t\t/** Move the interactive camera to a new position.\r\n\t\t\\param transform the transform the orientation and pose should be copied from\r\n\t\t\\param interpolate smooth interpolation between the current pose and the new one\r\n\t\t\\param updateResolution should the resolution of the camera be updated or not. Can be disabled if the new cam has a size incompatible with the current viewport.\r\n\t\t*/\r\n\t\tvoid fromTransform(const Transform3f & transform, bool interpolate = true, bool updateResolution = true);\r\n\r\n\t\t/** Set the clipping planes.\r\n\t\t *\\param znear near plane\r\n\t\t *\\param zfar far plane\r\n\t\t */\r\n\t\tvoid setClippingPlanes(float znear, float zfar);\r\n\r\n\t\t/** Find the camera in a list closest to the current interactive camera position\r\n\t\t\\param inputCameras the list to search in\r\n\t\t\\return the index of the closest camera in the list, or -1\r\n\t\t\\note This function ignores cameras that are not 'active' in the list.\r\n\t\t*/\r\n\t\tint\tfindNearestCamera(const std::vector<InputCamera::Ptr>& inputCameras) const;\r\n\r\n\t\t/** Toggle camera motion smoothing. */\r\n\t\tvoid switchSmoothing() { _shouldSmooth = !_shouldSmooth; SIBR_LOG << \"Smoothing \" << (_shouldSmooth ? \"enabled\" : \"disabled\") << std::endl; }\r\n\r\n\t\t/** Toggle automatic snapping when getting close to a camera from the interpolation path. */\r\n\t\tvoid switchSnapping() { _shouldSnap = !_shouldSnap; SIBR_LOG << \"Snapping \" << (_shouldSnap ? \"enabled\" : \"disabled\") << std::endl; }\r\n\r\n\t\t/** Switch the interaction mode (trackball, fps,...). \r\n\t\t\t\\param mode the new mode\r\n\t\t*/\r\n\t\tvoid switchMode(const InteractionMode mode);\r\n\r\n\t\t/** Save the current camera as a binary file to a standard location.\r\n\t\t * \\param datasetPath destination directory\r\n\t\t * \\note \"default_camera.bin\" will be appended to the path.\r\n\t\t */\r\n\t\tvoid saveDefaultCamera(const std::string& datasetPath);\r\n\r\n\t\t/** Load a camera parameters from a binary file at a standard location.\r\n\t\t *\\param cam the camera to use if loading fails\r\n\t\t * \\param datasetPath source directory\r\n\t\t * \\note \"default_camera.bin\" will be appended to the path.\r\n\t\t */\r\n\t\tvoid loadDefaultCamera(const sibr::InputCamera& cam, const std::string& datasetPath);\r\n\r\n\t\t/** \\return the current interaction mode. */\r\n\t\tInteractionMode getMode() const { return _currentMode; }\r\n\r\n\t\t/** Set the speed of the FPS camera.\r\n\t\t\\param speed the new speed\r\n\t\t*/\r\n\t\tvoid setFPSCameraSpeed(const float speed);\r\n\r\n\t\t/// ICameraHandler interface.\r\n\t\t/** Update function, call at every tick.\r\n\t\t\\param input the input object for the current view.\r\n\t\t\\param deltaTime time elapsed since last frame\r\n\t\t\\param viewport optional window viewport (can be used by the trackball for instance)\r\n\t\t*/\r\n\t\tvirtual void update(const sibr::Input & input, float deltaTime, const sibr::Viewport & viewport = Viewport(0.0f, 0.0f, 0.0f, 0.0f)) override;\r\n\r\n\t\t/** \\return the current camera. */\r\n\t\tvirtual const sibr::InputCamera & getCamera(void) const override;\r\n\r\n\t\t/** Render additional information on screen (trackball gizmo).\r\n\t\t\\param viewport the window viewport\r\n\t\t*/\r\n\t\tvirtual void onRender(const sibr::Viewport & viewport) override;\r\n\r\n\t\t/** Show the GUI. \r\n\t\t\\param suffix additional GUI name suffix to avoid collisions when having multiple handlers. \r\n\t\t*/\r\n\t\tvirtual void onGUI(const std::string & suffix) override;\r\n\r\n\t\t/** \\return the camera recorder */\r\n\t\tsibr::CameraRecorder & getCameraRecorder() { return _cameraRecorder; };\r\n\t\t\r\n\t\t/** \\return the camera trackball */\r\n\t\tsibr::TrackBall & getTrackball() { return _trackball; }\r\n\r\n\t\t/** Snap the interactive camera to one of the interpolation path cameras.\r\n\t\t\\param id the index of the camera to snap to. if -1, the closest camera. \r\n\t\t*/\r\n\t\tvoid snapToCamera(int id = -1);\r\n\r\n\t\t/** \\return the handler raycaster.\r\n\t\t\t\\warning Can be nullptr \r\n\t\t*/\r\n\t\tstd::shared_ptr<Raycaster> & getRaycaster() { return _raycaster; }\r\n\r\n\t\t/** \\return true if the handler has been entirely setup */\r\n\t\tbool isSetup() const { return _isSetup; }\r\n\r\n\t\t/** \\return the handler viewport */\r\n\t\tconst sibr::Viewport & getViewport() const { return _viewport; }\r\n\r\n\t\t/** \\return radius used for trackball*/\r\n\t\tfloat & getRadius() { return _radius; }\r\n\r\n\tprivate:\r\n\r\n\t\tint _currentCamId; ///< Current snapped camera ID.\r\n\r\n\t\tbool _shouldSmooth; ///< Motion smoothing.\r\n\t\tbool _shouldSnap; ///< Currently snapping.\r\n\r\n\t\tsibr::FPSCamera _fpsCamera; ///< FPS handler.\r\n\t\tsibr::Orbit _orbit; ///< Orbit handler.\r\n\t\tsibr::TrackBall _trackball; ///< Trackball handler.\r\n\r\n\t\tInteractionMode _currentMode; ///< Current handler mode.\r\n\r\n\t\tfloat _radius; ///< Trackball radius property (for GUI).\r\n\r\n\t\tstd::shared_ptr<sibr::Raycaster> _raycaster; ///< Raycaster (for trackball).\r\n\t\tsibr::Viewport _viewport;  ///< Current viewport.\r\n\r\n\t\tsibr::InputCamera _previousCamera; ///< Previous camera (for interpolation).\r\n\t\tsibr::InputCamera _currentCamera; ///< Current camera.\r\n\r\n\t\t/// Parameters for path interpolation.\r\n\t\tuint _startCam; ///< Start camera index in the list.\r\n\t\tuint _interpFactor; ///< Current interpolation factor between cam _startCam and _startCam+1.\r\n\t\tstd::vector<InputCamera::Ptr> _interpPath; ///< Cameras along the path.\r\n\r\n\t\tsibr::CameraRecorder _cameraRecorder; ///< Camera recorder.\r\n\t\tbool _supportRecording; ///< Does the camera support recording (uneeded).\r\n\t\tstd::vector<InputCamera::Ptr> _keyCameras; ///< Key cameras saved punctually. \\note This could be merged with the camera recorder.\r\n\r\n\t\tsibr::Vector2f _clippingPlanes; ///< Clipping planes parameter (for GUI).\r\n\t\tbool _saveFrame; ///< Should the frame be saved as an image.\r\n\t\tbool _saveFrameVideo; ///< Should the frame be saved as part of a video.\r\n\t\tbool _triggerCameraUpdate; ///< Should the camera be updated (delayed if info is missing).\r\n\t\tbool _isSetup; ///< Is the handler setup.\r\n\t\tfloat _cameraFovDeg = 0.0f; ///< Camera field of view in degrees (for GUI).\r\n\t\tbool _fribrExport = false; ///< Switch to FRIBR compatible export mode for paths.\r\n\r\n\t\t/** Interpolate along the path. */\r\n\t\tvoid interpolate();\r\n\r\n\t};\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/MultiMeshManager.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"MultiMeshManager.hpp\"\n\n#include <imgui/imgui.h>\n\nnamespace sibr {\n\n\tMeshData MeshData::dummy = MeshData(\"dummy\", Mesh::Ptr(), DUMMY, Mesh::FillRenderMode);\n\n\tMeshData::MeshData(const std::string & _name, Mesh::Ptr mesh_ptr, MeshType mType, Mesh::RenderMode render_mode) :\n\t\tmeshPtr(mesh_ptr), renderMode(render_mode), name(_name), meshType(mType)\n\t{\n\t\tif (mType == POINTS) {\n\t\t\trenderMode = Mesh::PointRenderMode;\n\t\t}\n\t\tif (mType == LINES && renderMode == Mesh::FillRenderMode) {\n\t\t\trenderMode = Mesh::LineRenderMode;\n\t\t}\n\t\tif (renderMode != Mesh::FillRenderMode) {\n\t\t\tbackFaceCulling = false;\n\t\t}\n\t}\n\n\tMeshData MeshData::getNormalsMeshData() const\n\t{\n\t\tMeshData data(name + \"_normals\", meshPtr, normalMode == PER_TRIANGLE ? TRIANGLES : POINTS);\n\t\tdata.setColor(normalsColor).setDepthTest(depthTest);\n\t\tdata.normalsLength = (normalsInverted ? -normalsLength : normalsLength);\n\t\treturn data;\n\t}\n\n\tMeshData::operator bool() const\n\t{\n\t\treturn meshType != DUMMY;\n\t}\n\n\tvoid MeshData::renderGeometry() const\n\t{\n\t\tCHECK_GL_ERROR;\n\t\tif (!meshPtr) {\n\t\t\treturn;\n\t\t}\n\t\tif (renderMode == Mesh::PointRenderMode) {\n\t\t\tmeshPtr->render_points(depthTest);\n\t\t} else {\n\t\t\tmeshPtr->render(depthTest, backFaceCulling, renderMode, frontFaceCulling, invertDepthTest);\n\t\t}\n\t\tCHECK_GL_ERROR;\n\t}\n\n\tvoid MeshData::onGUI(const std::string & name)\n\t{\n\t\t// rendering mode\n\t\tstatic const std::string renderModeStrs[3] = { \"Points\",  \"Lines\",  \"Fill\" };\n\n\t\tif (ImGui::BeginCombo((\"##render_mode_\" + name).c_str(), renderModeStrs[(int)renderMode].data())) {\n\t\t\tfor (int t = (int)meshType; t >= 0; --t) {\n\t\t\t\tif (ImGui::Selectable(renderModeStrs[t].data(), t == (int)renderMode)) {\n\t\t\t\t\trenderMode = (Mesh::RenderMode)t;\n\t\t\t\t}\t\t\t\n\t\t\t}\t\n\t\t\tImGui::EndCombo();\n\t\t}\n\t\tImGui::NextColumn();\n\n\t\t//alpha\n\t\tImGui::SliderFloat((\"##alpha_\" + name).c_str(), &alpha, 0, 1);\n\t\tImGui::NextColumn();\n\n\t\t//user color\n\t\tstatic const std::string colorModeStrs[2] = { \"User-defined\",  \"Vertex\" };\n\t\tif (ImGui::BeginCombo((\"##color_mode_\" + name).c_str(), colorModeStrs[(int)colorMode].data())) {\t\n\t\t\tif (meshPtr && meshPtr->hasColors()) {\n\t\t\t\tif (ImGui::Selectable(colorModeStrs[VERTEX].data(), colorMode == VERTEX)) {\n\t\t\t\t\tcolorMode = VERTEX;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ImGui::Selectable(colorModeStrs[USER_DEFINED].data(), colorMode == USER_DEFINED)) {\n\t\t\t\tcolorMode = USER_DEFINED;\n\t\t\t}\n\t\t\tImGui::EndCombo();\n\t\t}\n\t\tif (colorMode == USER_DEFINED) {\n\t\t\tImGui::SameLine();\n\t\t\tImGui::ColorEdit3((\"##color_picker_\" + name).c_str(), &userColor[0], ImGuiColorEditFlags_NoInputs);\n\t\t} \n\t\tImGui::NextColumn();\n\n\t\t//rendering options\n\t\tif (ImGui::ArrowButton((\"##OptionsArrow\" + name).c_str(), ImGuiDir_Down)) {\n\t\t\tImGui::OpenPopup((\"##Options_popup_\" + name).c_str());\n\t\t}\t\n\t\tif (ImGui::BeginPopup((\"##Options_popup_\" + name).c_str())) {\n\t\t\tImGui::Checkbox((\"Depth Test##\" + name).c_str(), &depthTest);\n\t\t\tif (meshType == TRIANGLES) {\n\t\t\t\tImGui::Checkbox((\"Cull faces##\" + name).c_str(), &backFaceCulling);\n\t\t\t\tImGui::Checkbox((\"Swap back/front##\" + name).c_str(), &frontFaceCulling);\n\t\t\t}\n\t\t\tif (renderMode == Mesh::PointRenderMode) {\n\t\t\t\tImGui::PushItemWidth(75);\n\t\t\t\tImGui::SliderInt((\"PointSize##\" + name).c_str(), &radius, 1, 50);\n\t\t\t\tImGui::PopItemWidth();\n\t\t\t}\n\t\t\tif (meshType == TRIANGLES) {\n\t\t\t\tImGui::Separator();\n\t\t\t\tImGui::Checkbox((\"ShowNormals##\" + name).c_str(), &showNormals);\n\t\t\t\tif (showNormals) {\t\t\n\t\t\t\t\tstatic const std::string normalModeStrs[2] = { \"Per-triangle\", \"Per-vertex\"};\n\t\t\t\t\tif (ImGui::BeginCombo((\"##normal_mode_\" + name).c_str(), normalModeStrs[(int)normalMode].data())) {\n\t\t\t\t\t\tif (ImGui::Selectable(normalModeStrs[PER_TRIANGLE].data(), normalMode == PER_TRIANGLE)) {\n\t\t\t\t\t\t\tnormalMode = PER_TRIANGLE;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (meshPtr && meshPtr->hasNormals()) {\n\t\t\t\t\t\t\tif (ImGui::Selectable(normalModeStrs[PER_VERTEX].data(), normalMode == PER_VERTEX)) {\n\t\t\t\t\t\t\t\tnormalMode = PER_VERTEX;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tImGui::EndCombo();\n\t\t\t\t\t}\n\t\t\t\t\tImGui::Checkbox((\"NormalInverted##\" + name).c_str(), &normalsInverted);\n\t\t\t\t\tImGui::PushItemWidth(90);\n\t\t\t\t\tImGui::SliderFloat((\"NormalSize##\" + name).c_str(), &normalsLength, 0.001f, 10.0f, \"%.3f\", 3.0f);\n\t\t\t\t\tImGui::PopItemWidth();\n\t\t\t\t\tImGui::ColorEdit3((\"NormalsColor##color_picker_\" + name).c_str(), &normalsColor[0], ImGuiColorEditFlags_NoInputs);\n\t\t\t\t}\n\t\t\t\tif (!meshPtr->hasNormals()) {\n\t\t\t\t\tif (ImGui::Button((\"Compute Normals##\" + name).c_str()) ){\n\t\t\t\t\t\tmeshPtr->generateNormals();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tImGui::Checkbox((\"Phong shading##\" + name).c_str(), &phongShading);\n\t\t\t\t}\n\t\t\t\tImGui::Separator();\n\t\t\t}\n\t\t\tImGui::EndPopup();\n\t\t}\n\t\tImGui::NextColumn();\n\t}\n\n\tstd::string MeshData::getInfos() const\n\t{\n\t\tif (!meshPtr) {\n\t\t\treturn \"no mesh\";\n\t\t}\n\n\t\tstd::stringstream s;\n\t\ts << meshPtr->vertices().size() << \" vertices \\n\" <<\n\t\t\tmeshPtr->triangles().size() << \" triangles \\n\" <<\n\t\t\t\"hasNormals() : \" << meshPtr->hasNormals() << \"\\n\" <<\n\t\t\t\"hasColors() : \" << meshPtr->hasColors() << \"\\n\" <<\n\t\t\t\"hasTexCoords() : \" << meshPtr->hasTexCoords() << \"\\n\"\n\t\t\t;\n\n\t\treturn s.str();\n\t}\n\n\tMeshData & MeshData::setColor(const Vector3f & col)\n\t{\n\t\tuserColor = col;\n\t\treturn *this;\n\t}\n\n\tMeshData & MeshData::setBackFace(bool backface)\n\t{\n\t\tbackFaceCulling = backface;\n\t\treturn *this;\n\t}\n\n\tMeshData & MeshData::setDepthTest(bool depth_test)\n\t{\n\t\tdepthTest = depth_test;\n\t\treturn *this;\n\t}\n\n\tMeshData & MeshData::setColorRandom()\n\t{\n\t\tstatic const auto baseHash = [](uint p) {\n\t\t\tp = 1103515245U * ((p >> 1U) ^ (p));\n\t\t\tuint h32 = 1103515245U * ((p) ^ (p >> 3U));\n\t\t\treturn h32 ^ (h32 >> 16);\n\t\t};\n\n\t\tstatic const uint mask = 0x7fffffffU;\n\n\t\tstatic int seed_x = 0;\n\t\t\n\t\t++seed_x;\n\t\t\n\t\tuint n = baseHash(uint(seed_x));\n\t\tVector3u tmp = Vector3u(n, n * 16807U, n * 48271U);\n\t\tfor (int c = 0; c < 3; ++c) {\n\t\t\tuserColor[c] = (tmp[c] & mask) / float(0x7fffffff);\n \t\t}\n\t\t \n\t\t return *this;\n\t}\n\n\tMeshData & MeshData::setRadiusPoint(int rad)\n\t{\n\t\tradius = rad;\n\t\treturn *this;\n\t}\n\n\tMeshData & MeshData::setAlpha(float _alpha) {\n\t\talpha = _alpha;\n\t\treturn *this;\n\t}\n\n\tMeshData & MeshData::setColorMode(ColorMode mode)\n\t{\n\t\tcolorMode = mode;\n\t\treturn *this;\n\t}\n\n\tvoid ShaderAlphaMVP::initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom)\n\t{\n\t\tshader.init(name, vert, frag, geom);\n\t\tmvp.init(shader, \"mvp\");\t\n\t\talpha.init(shader, \"alpha\");\n\t}\n\n\tvoid ShaderAlphaMVP::setUniforms(const Camera & eye, const MeshData & data)\n\t{\n\t\tmvp.set(eye.viewproj()*data.transformation);\n\t\talpha.set(data.alpha);\n\t}\n\n\tvoid ShaderAlphaMVP::render(const Camera & eye, const MeshData & data)\n\t{\n\t\tshader.begin();\n\n\t\tsetUniforms(eye, data);\n\n\t\tdata.renderGeometry();\n\n\t\tshader.end();\n\t}\n\n\tvoid ColorMeshShader::initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom)\n\t{\n\t\tShaderAlphaMVP::initShader(name, vert, frag, geom);\n\t\t//user_color.init(shader, \"user_color\");\n\t}\n\n\tvoid ColorMeshShader::setUniforms(const Camera & eye, const MeshData & data)\n\t{\n\t\tShaderAlphaMVP::setUniforms(eye, data);\n\t\tuser_color.set(data.userColor);\n\t}\n\n\tvoid PointShader::initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom)\n\t{\n\t\tColorMeshShader::initShader(name, vert, frag, geom);\n\t\tradius.init(shader, \"radius\");\n\t}\n\n\tvoid PointShader::setUniforms(const Camera & eye, const MeshData & data)\n\t{\n\t\tColorMeshShader::setUniforms(eye, data);\n\t\tradius.set(data.radius);\n\t}\n\n\tvoid PointShader::render(const Camera & eye, const MeshData & data)\n\t{\n\t\tglEnable(GL_PROGRAM_POINT_SIZE);\n\t\tColorMeshShader::render(eye, data);\n\t\tglDisable(GL_PROGRAM_POINT_SIZE);\n\t}\n\n\tvoid NormalRenderingShader::initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom)\n\t{\n\t\tColorMeshShader::initShader(name, vert, frag, geom);\n\t\tnormals_size.init(shader, \"normals_size\");\n\t}\n\n\tvoid NormalRenderingShader::setUniforms(const Camera & eye, const MeshData & data)\n\t{\n\t\tColorMeshShader::setUniforms(eye, data);\n\t\tnormals_size.set(data.normalsLength);\n\t}\n\n\tvoid MeshShadingShader::initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom)\n\t{\n\t\tColorMeshShader::initShader(name, vert, frag, geom);\n\t\tlight_position.init(shader, \"light_position\");\n\t\tphong_shading.init(shader, \"phong_shading\");\n\t\tuse_mesh_color.init(shader, \"use_mesh_color\");\n\t}\n\n\tvoid MeshShadingShader::setUniforms(const Camera & eye, const MeshData & data)\n\t{\n\t\tColorMeshShader::setUniforms(eye, data);\n\t\tlight_position.set(eye.position());\n\t\tphong_shading.set(data.phongShading);\n\t\tuse_mesh_color.set(data.colorMode == MeshData::ColorMode::VERTEX);\n\t}\n\n\tMultiMeshManager::MultiMeshManager(const std::string & _name) : name(_name)\n\t{\n\t\tinitShaders();\n\n\t\tauto cube = Mesh::getTestCube();\n\t\tTrackBall tb;\n\t\ttb.fromMesh(*cube, Viewport(0,0,1600,1200));\n\t\tcamera_handler.fromCamera(tb.getCamera());\n\n\t\tcamera_handler.switchMode(InteractiveCameraHandler::InteractionMode::TRACKBALL);\n\t}\n\n\tvoid MultiMeshManager::onUpdate(Input & input, const Viewport & vp)\n\t{\n\t\tif (!camera_handler.isSetup() && list_meshes.size() > 0) {\n\t\t\tfor (const auto & mesh_data : list_meshes) {\n\t\t\t\tif (mesh_data.raycaster && mesh_data.meshPtr) {\n\t\t\t\t\tauto bbox = mesh_data.meshPtr->getBoundingBox();\n\t\t\t\t\tif (bbox.volume() > 0) {\n\t\t\t\t\t\tcamera_handler.getRaycaster() = mesh_data.raycaster;\n\t\t\t\t\t\tTrackBall tb;\n\t\t\t\t\t\ttb.fromBoundingBox(bbox, vp);\n\t\t\t\t\t\tcamera_handler.fromCamera(tb.getCamera());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (camera_handler.isSetup() && !camera_handler.getRaycaster()) {\n\t\t\tfor (const auto & mesh : list_meshes) {\n\t\t\t\tif (mesh.raycaster) {\n\t\t\t\t\tcamera_handler.getRaycaster() = mesh.raycaster;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (selected_mesh_it_is_valid) {\n\t\t\tconst auto & mesh = *selected_mesh_it;\t\t\n\t\t\tif( mesh.raycaster) {\n\t\t\t\tcamera_handler.getRaycaster() = mesh.raycaster;\n\t\t\t}\n\t\t}\n\n\t\tcamera_handler.update(input, 1 / 60.0f, vp);\n\t}\n\n\tvoid MultiMeshManager::onRender(const Viewport & viewport)\n\t{\n\t\tglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, \"Multimesh manager\");\n\n\t\tviewport.clear(backgroundColor);\n\t\tviewport.bind();\n\t\trenderMeshes();\n\t\tcamera_handler.onRender(viewport);\n\n\t\tglPopDebugGroup();\n\t}\n\n\tvoid MultiMeshManager::onRender(IRenderTarget & dst)\n\t{\n\t\tdst.bind();\n\n\t\tconst Viewport vp(0.0f, 0.0f, (float)dst.w(), (float)dst.h());\n\t\tonRender(vp);\n\n\t\tdst.unbind();\n\t}\n\n\tvoid MultiMeshManager::onGUI()\n\t{\n\t\tif (ImGui::Begin(name.c_str())) {\n\t\t\tImGui::Separator();\n\n\t\t\tlist_mesh_onGUI();\n\t\n\t\t}\n\t\tImGui::End();\n\t}\n\n\tvoid MultiMeshManager::removeMesh(const std::string & name)\n\t{\n\t\tfor (auto it = list_meshes.begin(); it != list_meshes.end(); ++it) {\n\t\t\tif (it->name == name) {\n\t\t\t\tlist_meshes.erase(it);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid MultiMeshManager::setIntialView(const std::string& dataset_path)\n\t{\n\t\tconst std::string topViewPath = dataset_path + \"/cameras/topview.txt\";\n\t\tstd::ifstream topViewFile(topViewPath);\n\t\tif (topViewFile.good())\n\t\t{\n\t\t\tSIBR_LOG << \"Loaded saved topview (\" << topViewPath << \").\" << std::endl;\n\t\t\t// Intialize a temp camera (used to load the saved top view pose) with\n\t\t\t// the current top view camera to get the resolution/fov right.\n\t\t\tInputCamera cam(camera_handler.getCamera());\n\t\t\tcam.readFromFile(topViewFile);\n\t\t\t// Apply it to the top view FPS camera.\n\t\t\t//camera_handler.fromCamera(cam, false);\n\t\t\tcamera_handler.fromTransform(cam.transform(), false, true);\n\t\t}\n\t}\n\n\tvoid MultiMeshManager::initShaders()\n\t{\n\t\tconst std::string folder = sibr::getShadersDirectory(\"core\") + \"/\";\n\n\t\tcolored_mesh_shader.initShader(\"colored_mesh_shader\",\n\t\t\tloadFile(folder + \"alpha_colored_mesh.vert\"), \n\t\t\tloadFile(folder + \"alpha_colored_mesh.frag\")\n\t\t);\n\t\tpoints_shader.initShader(\"points_shader\",\n\t\t\tloadFile(folder + \"alpha_points.vert\"),\n\t\t\tloadFile(folder + \"alpha_points.frag\")\n\t\t);\n\t\tper_vertex_normals_shader.initShader(\"per_vertex_normal_shader\",\n\t\t\tloadFile(folder + \"alpha_colored_per_vertex_normals.vert\"),\n\t\t\tloadFile(folder + \"alpha_colored_mesh.frag\"),\n\t\t\tloadFile(folder + \"alpha_colored_per_vertex_normals.geom\")\n\t\t);\n\t\tper_triangle_normals_shader.initShader(\"per_triangle_normal_shader\",\n\t\t\tloadFile(folder + \"alpha_colored_per_triangle_normals.vert\"),\n\t\t\tloadFile(folder + \"alpha_colored_mesh.frag\"),\n\t\t\tloadFile(folder + \"alpha_colored_per_triangle_normals.geom\")\n\t\t);\n\t}\n\n\tvoid MultiMeshManager::renderMeshes()\n\t{\n\t\tglEnable(GL_BLEND);\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\tglBlendEquation(GL_FUNC_ADD);\n\n\t\tfor (const auto & mesh_data : list_meshes) {\n\t\t\tif (!mesh_data.active) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (mesh_data.renderMode == Mesh::PointRenderMode) {\n\t\t\t\tpoints_shader.render(camera_handler.getCamera(), mesh_data);\n\t\t\t} else {\n\t\t\t\tcolored_mesh_shader.render(camera_handler.getCamera(), mesh_data);\n\t\t\t}\n\n\t\t\tif (mesh_data.showNormals) {\n\t\t\t\tif (mesh_data.normalMode == MeshData::PER_VERTEX ) {\n\t\t\t\t\tper_vertex_normals_shader.render(camera_handler.getCamera(), mesh_data.getNormalsMeshData());\n\t\t\t\t} else {\n\t\t\t\t\tper_triangle_normals_shader.render(camera_handler.getCamera(), mesh_data.getNormalsMeshData());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tglDisable(GL_BLEND);\n\t}\n\n\tvoid MultiMeshManager::list_mesh_onGUI()\n\t{\n\t\tIterator swap_it_src, swap_it_dst;\n\t\tbool do_swap = false;\n\t\tstatic int num_swap = 1;\n\t\t\n\t\tif (ImGui::CollapsingHeader((\"Meshes list##\" + name).c_str(), ImGuiTreeNodeFlags_DefaultOpen)) {\n\n\t\t\tstatic char loaded_mesh_str[128] = \"\";\n\t\t\tstatic std::string loaded_mesh_path;\n\t\t\tstatic int loaded_mesh_counter = 0;\n\n\t\t\tif(ImGui::Button(\"load Mesh##MeshesList\") && showFilePicker(loaded_mesh_path, FilePickerMode::Default, \"\", \"obj,ply\")) {\n\t\t\t\tMesh::Ptr mesh = std::make_shared<Mesh>();\t\t\t\n\n\t\t\t\tif (mesh->load(loaded_mesh_path)) {\t\t\t\n\t\t\t\t\tPath mesh_path = loaded_mesh_path;\t\t\t\n\t\t\t\t\tstd::string mesh_name = loaded_mesh_str;\n\t\t\t\t\tmesh_name = (mesh_name == \"\") ? mesh_path.stem().string() : loaded_mesh_str;\n\n\t\t\t\t\tfor (const auto & mesh_it : list_meshes) {\n\t\t\t\t\t\tif (mesh_name == mesh_it.name) {\n\t\t\t\t\t\t\tmesh_name += std::to_string(loaded_mesh_counter);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\taddMesh(mesh_name, mesh);\n\t\t\t\t\t++loaded_mesh_counter;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tImGui::SameLine();\n\t\t\tImGui::InputText(\"mesh name##MeshesList\", loaded_mesh_str, IM_ARRAYSIZE(loaded_mesh_str));\n\n\t\t\t// 0 name | 1 snapto delete | 2 active | 3 rendering mode | 4 alpha | 5 color | 6 Options\n\t\t\tImGui::Columns(7, \"mesh options\");\n\n\t\t\t//ImGui::SetColumnWidth(4, 50);\n\n\t\t\tImGui::Separator();\n\t\t\tif (ImGui::Button(\"Mesh##MeshesList\")) {\n\t\t\t\tlist_meshes.reverse();\n\t\t\t}\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::NextColumn();\n\n\t\t\tif (ImGui::Button(\"Active##MeshesList\")) {\n\t\t\t\tfor (auto & mesh : list_meshes) {\n\t\t\t\t\tmesh.active = !mesh.active;\n\t\t\t\t}\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tif (ImGui::Button(\"All##MeshesList\")) {\n\t\t\t\tfor (auto & mesh : list_meshes) {\n\t\t\t\t\tmesh.active = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Text(\"Mode\");\n\t\t\tImGui::NextColumn();\n\n\t\t\tstatic bool full_alpha = false;\n\t\t\tif (ImGui::Button(\"Alpha##MeshesList\")) {\n\t\t\t\tfor (auto & mesh : list_meshes) {\n\t\t\t\t\tif (mesh.active) {\n\t\t\t\t\t\tmesh.alpha = full_alpha ? 1.0f : 0.0f;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfull_alpha = !full_alpha;\n\t\t\t}\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Text(\"Color\"); \n\t\t\tImGui::SameLine();\n\t\t\tImGui::ColorEdit3((\"Background##\" + name).c_str(), &backgroundColor[0], ImGuiColorEditFlags_NoInputs);\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Text(\"Options\");\n\t\t\tImGui::NextColumn();\n\n\t\t\tImGui::Separator();\n\n\t\t\tselected_mesh_it_is_valid = false;\n\t\t\tfor (auto mesh_it = list_meshes.begin(); mesh_it != list_meshes.end(); ++mesh_it) {\n\t\t\t\tauto & mesh = *mesh_it;\n\t\t\t\tif (ImGui::Selectable(mesh.name.c_str(), (selected_mesh_it_is_valid && mesh_it == selected_mesh_it))) {\n\t\t\t\t\tselected_mesh_it = mesh_it;\n\t\t\t\t\tselected_mesh_it_is_valid = true;\n\t\t\t\t}\n\t\t\t\tif (ImGui::IsItemActive()) {\n\t\t\t\t\tfloat threshold = ImGui::GetItemRectSize().y + 5.0f;\n\t\t\t\t\tImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);\n\n\t\t\t\t\tif (value_raw.y > threshold * num_swap) {\n\t\t\t\t\t\tswap_it_dst = swap_it_src = mesh_it;\n\t\t\t\t\t\t++swap_it_dst;\n\t\t\t\t\t\tif (swap_it_dst != list_meshes.end()) {\n\t\t\t\t\t\t\tdo_swap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value_raw.y < -threshold * num_swap) {\n\t\t\t\t\t\tswap_it_dst = swap_it_src = mesh_it;\n\t\t\t\t\t\t--swap_it_dst;\n\t\t\t\t\t\tif (swap_it_src != list_meshes.begin()) {\n\t\t\t\t\t\t\tdo_swap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (ImGui::IsItemHovered()) {\n\t\t\t\t\tImGui::BeginTooltip();\n\t\t\t\t\tImGui::Text(mesh.getInfos().c_str());\n\t\t\t\t\tImGui::EndTooltip();\n\t\t\t\t}\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tif (ImGui::Button((\"SnapTo##\" + mesh_it->name).c_str()) && mesh_it->meshPtr) {\n\t\t\t\t\tauto box = mesh_it->meshPtr->getBoundingBox();\n\t\t\t\t\tif ((box.diagonal().array() > 1e-6f ).all()) {\n\t\t\t\t\t\tInputCamera cam = camera_handler.getCamera();\n\t\t\t\t\t\tcam.setLookAt(box.center() + 2.0f*box.diagonal(), box.center(), { 0,1,0 });\n\t\t\t\t\t\tcamera_handler.fromCamera(cam);\n\t\t\t\t\t}\t\t\t\n\t\t\t\t}\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button((\"X##\" + mesh_it->name).c_str())) {\n\t\t\t\t\tremoveMesh(mesh_it->name);\n\t\t\t\t}\n\t\t\t\tImGui::NextColumn();\n\t\t\t\t\n\t\t\t\tImGui::Checkbox((\"##active_\" + mesh.name).c_str(), &mesh.active);\n\t\t\t\tImGui::SameLine();\n\t\t\t\tif (ImGui::Button((\"OnlyMe##\" + mesh.name).c_str())) {\n\t\t\t\t\tfor (auto other_it = list_meshes.begin(); other_it != list_meshes.end(); ++other_it) {\n\t\t\t\t\t\tother_it->active = (other_it == mesh_it);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tmesh.onGUI(mesh.name);\n\t\t\t\tImGui::Separator();\n\t\t\t}\n\n\t\t\tImGui::Columns(1);\n\t\t}\n\t\tif (do_swap) {\n\t\t\tstd::swap(*swap_it_src, *swap_it_dst);\n\t\t\t++num_swap;\n\t\t}\n\t\tif (ImGui::IsMouseReleased(0)) {\n\t\t\tnum_swap = 1;\n\t\t}\n\t}\n\n\tMeshData & MultiMeshManager::addMesh(const std::string & name, Mesh::Ptr mesh, bool use_raycaster)\n\t{\n\t\tif (!mesh) {\n\t\t\tSIBR_WRG << \"no mesh ptr in \" << name;\n\t\t\treturn MeshData::dummy;\n\t\t}\n\n\t\treturn addMesh(name, mesh, 0, use_raycaster);\n\t}\n\n\tMeshData & MultiMeshManager::addMesh(const std::string & name, Mesh::Ptr mesh, Raycaster::Ptr raycaster, bool create_raycaster)\n\t{\n\t\tif (!mesh) {\n\t\t\tSIBR_WRG << \"no mesh ptr in \" << name;\n\t\t\treturn MeshData::dummy;\n\t\t}\n\n\t\tMeshData data(name, mesh, MeshData::TRIANGLES, Mesh::FillRenderMode);\n\t\tdata.colorMode = mesh->hasColors() ? MeshData::ColorMode::VERTEX : MeshData::ColorMode::USER_DEFINED;\n\t\tdata.normalMode = (mesh->hasNormals() ? MeshData::PER_VERTEX : MeshData::PER_TRIANGLE);\n\t\tdata.phongShading = mesh->hasNormals();\n\t\tdata.raycaster = raycaster;\n\n\t\treturn addMeshData(data, create_raycaster).setColorRandom();\n\t}\n\n\tMeshData & MultiMeshManager::addMeshAsLines(const std::string & name, Mesh::Ptr mesh)\n\t{\n\t\tif (!mesh) {\n\t\t\tSIBR_WRG << \"no mesh ptr in \" << name;\n\t\t\treturn MeshData::dummy;\n\t\t}\n\n\t\tMeshData data(name, mesh, MeshData::LINES, Mesh::LineRenderMode);\n\t\treturn addMeshData(data).setColorRandom().setDepthTest(false);\n\t}\n\n\tMeshData & MultiMeshManager::addLines(const std::string & name, const std::vector<Vector3f>& endPoints, const Vector3f & color)\n\t{\n\t\tMesh::Triangles tris(endPoints.size() / 2);\n\t\tfor (uint t = 0; t < tris.size(); ++t) {\n\t\t\ttris[t] = Vector3u(2 * t, 2 * t, 2 * t + 1);\n\t\t}\n\n\t\tMesh::Ptr mesh = std::make_shared<Mesh>();\n\t\tmesh->vertices(endPoints);\n\t\tmesh->triangles(tris);\n\n\t\tMeshData data(name, mesh, MeshData::LINES, Mesh::LineRenderMode);\n\t\tdata.userColor = color;\n\t\tdata.depthTest = false;\n\n\t\treturn addMeshData(data).setColorMode(MeshData::USER_DEFINED);\n\t}\n\n\tMeshData & MultiMeshManager::addPoints(const std::string & name, const std::vector<Vector3f>& points, const Vector3f & color)\n\t{\n\t\tMesh::Vertices vertices(points);\n\n\t\tMesh::Ptr mesh = std::make_shared<Mesh>();\n\t\tmesh->vertices(vertices);\n\n\t\tMeshData data(name, mesh, MeshData::POINTS, Mesh::PointRenderMode);\n\t\tdata.userColor = color;\n\t\tdata.depthTest = false;\n\n\t\treturn addMeshData(data).setColorMode(MeshData::USER_DEFINED);\n\t}\n\n\tMeshData & MultiMeshManager::getMeshData(const std::string & name)\n\t{\n\t\tfor (auto & m : list_meshes) {\n\t\t\tif (m.name == name ) {\n\t\t\t\treturn m;\n\t\t\t}\n\t\t}\n\t\treturn MeshData::dummy;\n\t}\n\n\tMeshData & MultiMeshManager::addMeshData(MeshData & data, bool create_raycaster)\n\t{\n\t\tbool collision = false;\n\t\tIterator collision_it;\n\t\tfor (collision_it = list_meshes.begin(); collision_it != list_meshes.end(); ++collision_it) {\n\t\t\tif (collision_it->name == data.name) {\n\t\t\t\tcollision = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (collision) {\n\t\t\tcollision_it->meshPtr = data.meshPtr;\n\t\t\treturn MeshData::dummy;\n\t\t} else {\n\t\t\tRaycaster::Ptr raycaster;\n\t\t\tif (create_raycaster) {\n\t\t\t\traycaster = std::make_shared<Raycaster>();\n\t\t\t\traycaster->init();\n\t\t\t\traycaster->addMesh(*data.meshPtr);\n\t\t\t}\n\t\t\tdata.raycaster = raycaster;\n\n\t\t\tlist_meshes.push_back(data);\n\n\n\t\t\tauto box = data.meshPtr->getBoundingBox();\n\t\t\tif (!box.isEmpty()) {\n\t\t\t\tInputCamera cam = camera_handler.getCamera();\n\t\t\t\tcam.zfar(std::max(cam.zfar(), 5.0f*box.diagonal().norm()));\n\t\t\t\tcamera_handler.fromCamera(cam);\n\t\t\t}\n\n\t\t\treturn list_meshes.back();\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/MultiMeshManager.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include <core/graphics/Mesh.hpp>\r\n#include <core/graphics/Shader.hpp>\r\n#include <core/view/ViewBase.hpp>\r\n#include <core/view/InteractiveCameraHandler.hpp>\r\n#include <core/raycaster/CameraRaycaster.hpp>\r\n\r\n#include <list>\r\n\r\nnamespace sibr {\r\n\r\n\tclass MultiMeshManager;\r\n\tclass MeshData;\r\n\r\n\t// Hierarchy of shader wrappers, so there is no duplication for uniforms, init(), set() and render().\r\n\r\n\t/** Shader wrapper for sending mesh display options to the GPU (while avoiding duplicated uniforms) . \r\n\t * Contains an MVP matrix and an opacity value.\r\n\t  \\ingroup sibr_view\r\n\t */\r\n\tclass SIBR_VIEW_EXPORT ShaderAlphaMVP {\r\n\t\tSIBR_CLASS_PTR(ShaderAlphaMVP);\r\n\tpublic:\r\n\t\t/** Initialize the shader. \r\n\t\t *\\param name the shader name\r\n\t\t *\\param vert the vertex shader content\r\n\t\t *\\param frag the fragment shader ocntent\r\n\t\t *\\param geom the geometry shader content\r\n\t\t */\r\n\t\tvirtual void initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom = \"\");\r\n\r\n\t\t/* Set uniforms based on the camera position and mesh options.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void setUniforms(const Camera & eye, const MeshData & data);\r\n\r\n\t\t/** Render using the passed information.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void render(const Camera & eye, const MeshData & data);\r\n\r\n\tprotected:\r\n\t\tGLShader\t\t\t\tshader; ///< Base shader object.\r\n\t\tGLuniform<Matrix4f>\t\tmvp; ///< MVP matrix.\r\n\t\tGLuniform<float>\t\talpha = 1.0; ///< Opacity.\r\n\t};\r\n\r\n\t/** Shader wrapper for sending mesh display options to the GPU (while avoiding duplicated uniforms) .\r\n\t * Adds a user-defined color. \\sa ShaderAlphaMVP\r\n\t  \\ingroup sibr_view\r\n\t */\r\n\tclass SIBR_VIEW_EXPORT ColorMeshShader : public ShaderAlphaMVP {\r\n\tpublic:\r\n\t\t/** Initialize the shader.\r\n\t\t *\\param name the shader name\r\n\t\t *\\param vert the vertex shader content\r\n\t\t *\\param frag the fragment shader ocntent\r\n\t\t *\\param geom the geometry shader content\r\n\t\t */\r\n\t\tvirtual void initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom = \"\");\r\n\r\n\t\t/* Set uniforms based on the camera position and mesh options.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void setUniforms(const Camera & eye, const MeshData & data);\r\n\r\n\tprotected:\r\n\t\tGLuniform<Vector3f>\tuser_color; ///< user-defined constant color.\r\n\t};\r\n\r\n\t/** Shader wrapper for sending mesh display options to the GPU (while avoiding duplicated uniforms) .\r\n\t * Adds a point size. \\sa ShaderAlphaMVP\r\n\t  \\ingroup sibr_view\r\n\t */\r\n\tclass SIBR_VIEW_EXPORT PointShader : public ColorMeshShader {\r\n\tpublic:\r\n\t\t/** Initialize the shader.\r\n\t\t *\\param name the shader name\r\n\t\t *\\param vert the vertex shader content\r\n\t\t *\\param frag the fragment shader ocntent\r\n\t\t *\\param geom the geometry shader content\r\n\t\t */\r\n\t\tvoid initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom = \"\") override;\r\n\r\n\t\t/* Set uniforms based on the camera position and mesh options.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void setUniforms(const Camera & eye, const MeshData & data) override;\r\n\r\n\t\t/** Render using the passed information.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void render(const Camera & eye, const MeshData & data) override;\r\n\r\n\tprotected:\r\n\t\tGLuniform<int> radius; ///< Point screenspace radius.\r\n\t};\r\n\r\n\t/** Shader wrapper for sending mesh display options to the GPU (while avoiding duplicated uniforms) .\r\n\t * Adds shading parameters. \\sa ShaderAlphaMVP\r\n\t  \\ingroup sibr_view\r\n\t */\r\n\tclass SIBR_VIEW_EXPORT MeshShadingShader : public ColorMeshShader {\r\n\tpublic:\r\n\t\t/** Initialize the shader.\r\n\t\t *\\param name the shader name\r\n\t\t *\\param vert the vertex shader content\r\n\t\t *\\param frag the fragment shader ocntent\r\n\t\t *\\param geom the geometry shader content\r\n\t\t */\r\n\t\tvoid initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom = \"\") override;\r\n\r\n\t\t/* Set uniforms based on the camera position and mesh options.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void setUniforms(const Camera & eye, const MeshData & data) override;\r\n\r\n\tprotected:\r\n\t\tGLuniform<Vector3f>\t\tlight_position; ///< Light position for shading.\r\n\t\tGLuniform<bool>\t\t\tphong_shading, use_mesh_color; ///< Should the mesh be shaded, which color should be used.\r\n\t};\r\n\r\n\t/** Shader wrapper for sending mesh display options to the GPU (while avoiding duplicated uniforms) .\r\n\t * Adds line length option. \\sa ShaderAlphaMVP\r\n\t  \\ingroup sibr_view\r\n\t */\r\n\tclass SIBR_VIEW_EXPORT NormalRenderingShader : public ColorMeshShader {\r\n\tpublic:\r\n\t\t/** Initialize the shader.\r\n\t\t *\\param name the shader name\r\n\t\t *\\param vert the vertex shader content\r\n\t\t *\\param frag the fragment shader ocntent\r\n\t\t *\\param geom the geometry shader content\r\n\t\t */\r\n\t\tvoid initShader(const std::string & name, const std::string & vert, const std::string & frag, const std::string & geom = \"\") override;\r\n\r\n\t\t/* Set uniforms based on the camera position and mesh options.\r\n\t\t * \\param eye the current viewpoint\r\n\t\t * \\param data the mesh display options\r\n\t\t */\r\n\t\tvirtual void setUniforms(const Camera & eye, const MeshData & data) override;\r\n\r\n\tprotected:\r\n\t\tGLuniform<float> normals_size; ///< Normal line length.\r\n\t};\r\n\r\n\r\n\t/** Helper class containing all information relative to how to render a mesh for debugging purpose in a MultiMeshManager.\r\n\t * You can chain setters to modify multiple properties sequentially (chaining).\r\n\t\\sa MultiMeshManager\r\n\t \\ingroup sibr_view\r\n\t*/\r\n\tclass SIBR_VIEW_EXPORT MeshData {\r\n\t\tSIBR_CLASS_PTR(MeshData);\r\n\r\n\tpublic:\r\n\t\tfriend class MultiMeshManager;\r\n\r\n\t\t/** Color mode: constant defined by the user, or per-vertex attribute. */\r\n\t\tenum ColorMode : int { USER_DEFINED, VERTEX };\r\n\t\t/** Type of mesh: points, lines or faces. Dummy is for unitialized objects. */\r\n\t\tenum MeshType : int { POINTS = 0, LINES = 1, TRIANGLES = 2, DUMMY };\r\n\t\t/** When displaying normals, use the per-face or per-vertices normals */\r\n\t\tenum NormalMode { PER_TRIANGLE, PER_VERTEX };\r\n\r\n\t\t/** COnstructor.\r\n\t\t *\\param _name the object name\r\n\t\t *\\param mesh_ptr the geoemtry to display\r\n\t\t *\\param mesh_type the type of mesh\r\n\t\t *\\param render_mode for triangle meshes, should they be displayed filled, as wireframes, or point clouds (\\sa Mesh).\r\n\t\t */\r\n\t\tMeshData(const std::string & _name = \"\", Mesh::Ptr mesh_ptr = {}, MeshType mesh_type = TRIANGLES, Mesh::RenderMode render_mode = Mesh::FillRenderMode);\r\n\r\n\t\t/** Render the geometry. */\r\n\t\tvoid\trenderGeometry() const;\r\n\r\n\t\t/** Display the GUI list item associated to this object.\r\n\t\t *\\param name additional display name\r\n\t\t */\r\n\t\tvoid\tonGUI(const std::string & name);\r\n\r\n\t\t/** \\return if the object is valid. */\r\n\t\toperator bool() const;\r\n\r\n\t\t/** \\return a string describing the geometry. */\r\n\t\tstd::string getInfos() const;\r\n\r\n\t\t/** Set the color.\r\n\t\t *\\param col the color to use\r\n\t\t *\\return the options object, for chaining.\r\n\t\t *\\note To see the color, you might also have to specify the color mode if your mesh has vertex colors.\r\n\t\t */\r\n\t\tMeshData & setColor(const Vector3f & col);\r\n\r\n\t\t/** Set the backface culling.\r\n\t\t *\\param bf should culling be performed\r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setBackFace(bool bf);\r\n\r\n\t\t/** Set the depth test.\r\n\t\t *\\param dt should depth testing be enabled\r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setDepthTest(bool dt);\r\n\r\n\t\t/** Set a random constant color.\r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setColorRandom();\r\n\r\n\t\t/** Set the size of points for point-based display.\r\n\t\t *\\param rad the point radius in screenspace\r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setRadiusPoint(int rad);\r\n\r\n\t\t/** Set the opacity.\r\n\t\t *\\param alpha the opacity value for the whole object\r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setAlpha(float alpha);\r\n\r\n\t\t/** Set the color mode (either user-defined constant or vertex color).\r\n\t\t *\\param mode the color mode \r\n\t\t *\\return the options object, for chaining.\r\n\t\t */\r\n\t\tMeshData & setColorMode(ColorMode mode);\r\n\r\n\t\t/** Get the display options of the additional normals geometry.\r\n\t\t *\\return the normals options.\r\n\t\t */\r\n\t\tMeshData getNormalsMeshData() const;\r\n\r\n\t\tstd::string\t\t\tname; ///< Mesh name.\r\n\r\n\t\tMesh::Ptr\t\t\tmeshPtr; ///< Geometry.\r\n\t\tMeshType\t\t\tmeshType; ///< Type of mesh.\r\n\t\tMesh::RenderMode\trenderMode; ///< Render mode for triangle meshes.\r\n\r\n\t\tMatrix4f\t\t\ttransformation = Matrix4f::Identity(); ///< Additional model transformation.\r\n\r\n\t\tRaycaster::Ptr\t\traycaster; ///< Associated raycaster (optional)\r\n\r\n\t\tbool\t\t\t\tdepthTest = true; ///< Perform depth test.\r\n\t\tbool\t\t\t\tbackFaceCulling = true; ///< Perform culling.\r\n\t\tbool\t\t\t\tfrontFaceCulling = false; ///< Swap front and back faces for culling.\r\n\t\tbool\t\t\t\tinvertDepthTest = false; ///< Switch the depth test to \"greater than\".\r\n\t\tbool\t\t\t\tactive = true; ///< Should the object be displayed.\r\n\t\tbool\t\t\t\tphongShading = false; ///< Apply Phong shading to the object.\r\n\r\n\t\t// Points\r\n\t\tint\t\t\t\t\tradius = 5; ///< Point screenspace radius.\r\n\r\n\t\t// Colors\r\n\t\tColorMode\t\t\tcolorMode = USER_DEFINED; ///< Color mode.\r\n\t\tVector3f\t\t\tuserColor = { 0.5,0.5,0.5 }; ///< Constant user-defined  color.\r\n\t\tfloat\t\t\t\talpha = 1.0f; ///< Opacity.\r\n\r\n\t\t// Normals\r\n\t\tVector3f normalsColor = { 1,0,1 }; ///< Normal lines color.\r\n\t\tfloat normalsLength = 1.0f; ///< Normal lines length.\r\n\t\tNormalMode normalMode = PER_TRIANGLE; ///< Which normals should be displayed.\r\n\t\tbool normalsInverted = false; ///< Flip the normal lines orientation.\r\n\t\tbool showNormals = false; ///< Should the normals be displayed.\r\n\r\n\tprotected:\r\n\t\t\r\n\t\tstatic MeshData dummy; ///< OPtions object used for non-existing objects.\r\n\t};\r\n\r\n\r\n\t/** Provide a view to render and interact with several meshes, \r\n\t * useful for debugging purposes for instance.\r\n\t * The API supports chaining when setting mesh display options. You can for instance do:\r\n\t * manager.addMesh(\"my mesh\", mesh).setDepthtest(true).setAlpha(0.5f); \r\n\t  \\ingroup sibr_view\r\n\t*/\r\n\tclass SIBR_VIEW_EXPORT MultiMeshManager : public ViewBase {\r\n\t\tSIBR_CLASS_PTR(MultiMeshManager);\r\n\r\n\tpublic:\r\n\r\n\t\t/** Constructor\r\n\t\t\\param _name Name used for GUI panels as a prefix to avoid collision.\r\n\t\t\\note Requires an OpenGL context setup\r\n\t\t*/\r\n\t\tMultiMeshManager(const std::string & _name = \"MultiMeshManager\");\r\n\t\r\n\t\t/** Add a mesh to the visualization.\r\n\t\t\\param name name used for the object, if it already exist it will update the geometry and preserve display options\r\n\t\t\\param mesh the mesh\r\n\t\t\\param use_raycaster should a raycaster be setup, for trackball centering for instance\r\n\t\t\\return a reference to the object display options (for chained modifications).\r\n\t\t*/\r\n\t\tMeshData & addMesh(const std::string & name, Mesh::Ptr mesh, bool use_raycaster = true);\r\n\r\n\t\t/** Add a mesh to the visualization.\r\n\t\t\\param name name used for the object, if it already exist it will update the geometry and preserve display options\r\n\t\t\\param mesh the mesh\r\n\t\t\\param raycaster existing raycaster, for trackball centering for instance\r\n\t\t\\param create_raycaster should a raycaster be setup if the passed raycaster is null\r\n\t\t\\return a reference to the object display options (for chained modifications).\r\n\t\t*/\r\n\t\tMeshData & addMesh(const std::string & name, Mesh::Ptr mesh, Raycaster::Ptr raycaster, bool create_raycaster = false);\r\n\r\n\t\t/** Add lines to the visualization, using the mesh vertices as line endpoints.\r\n\t\t\\param name name used for the object, if it already exist it will update the geometry and preserve display options\r\n\t\t\\param mesh the mesh\r\n\t\t\\return a reference to the object display options (for chained modifications).\r\n\t\t*/\r\n\t\tMeshData & addMeshAsLines(const std::string & name, Mesh::Ptr mesh);\r\n\r\n\t\t/** Add lines to the visualization, defined by their endpoints.\r\n\t\t\\param name name used for the object, if it already exist it will update the geometry and preserve display options\r\n\t\t\\param endPoints the line endpoints\r\n\t\t\\param color the display color to use\r\n\t\t\\return a reference to the object display options (for chained modifications).\r\n\t\t*/\r\n\t\tMeshData & addLines(const std::string & name, const std::vector<Vector3f> & endPoints, const Vector3f & color = { 0,1,0 });\r\n\r\n\t\t/** Add points to the visualization.\r\n\t\t\\param name name used for the mesh, if it already exist it will update the geometry and preserve display options\r\n\t\t\\param points the points\r\n\t\t\\param color the display color to use\r\n\t\t\\return a reference to the display options (for chained modifications).\r\n\t\t*/\r\n\t\tMeshData & addPoints(const std::string & name, const std::vector<Vector3f> & points, const Vector3f & color = { 1,0,0 });\r\n\r\n\t\t/** Accessor to the options of a visualized object.\r\n\t\t\t\\param name the object name to look for\r\n\t\t\t\\return a reference to the object options if it exists, or to MeshData::dummy if no match was found.\r\n\t\t*/\r\n\t\tMeshData & getMeshData(const std::string & name);\r\n\r\n\t\t/** Remove a object from the viewer.\r\n\t\t\\param name the name of the object to remove\r\n\t\t*/\r\n\t\tvoid\t\tremoveMesh(const std::string & name);\r\n\r\n\t\tvoid\t\tsetIntialView(const std::string& dataset_path);\r\n\r\n\t\t// ViewBase interface\r\n\r\n\t\t/** Update state based on user input.\r\n\t\t * \\param input user input\r\n\t\t * \\param vp input viewport\r\n\t\t * \\note Used when the view is in a multi-view system.\r\n\t\t */\r\n\t\tvirtual void\tonUpdate(Input& input, const Viewport & vp) override;\r\n\r\n\t\t/** Render content in the currently bound RT, using a specific viewport.\r\n\t\t * \\param viewport destination viewport\r\n\t\t * \\note Used when the view is in a multi-view system.\r\n\t\t */\r\n\t\tvirtual void\tonRender(const Viewport & viewport) override;\r\n\r\n\t\t/** Render content in a RT, using the RT viewport.\r\n\t\t * \\param dst destination RT\r\n\t\t */\r\n\t\tvirtual void\tonRender(IRenderTarget & dst) ;\r\n\r\n\t\t/** Display GUI. */\r\n\t\tvirtual void\tonGUI() override;\r\n\r\n\t\t/** \\return the view camera handler */\r\n\t\tInteractiveCameraHandler & getCameraHandler() { return camera_handler; }\r\n\r\n\t\t/** \\return the colored mesh shader */\r\n\t\tMeshShadingShader & getMeshShadingShader() { return colored_mesh_shader; }\r\n\r\n\tprotected:\r\n\r\n\t\t/** Helper to add some geometry to the view. \r\n\t\t\\param data the object to add\r\n\t\t\\param update_raycaster should the associated raycaster be updated with the new geometry\r\n\t\t\\return the update object options\r\n\t\t*/\r\n\t\tMeshData & addMeshData(MeshData & data, bool update_raycaster = false);\r\n\r\n\t\t/** Create the shaders */\r\n\t\tvoid initShaders();\r\n\r\n\t\t/** Render all the registered meshes. */\r\n\t\tvoid renderMeshes();\r\n\r\n\t\t/** Generate the list of objects in the GUI panel of the view. */\r\n\t\tvoid list_mesh_onGUI();\r\n\r\n\t\tusing ListMesh = std::list<MeshData>;\r\n\t\tusing Iterator = ListMesh::iterator;\r\n\t\r\n\t\tstd::string\t\t\t\t\t\t\tname; ///< View name.\r\n\t\tListMesh\t\t\t\t\t\t\tlist_meshes; ///< Meshes to display.\r\n\t\tIterator \t\t\t\t\t\t\tselected_mesh_it; ///< Currently selected mesh.\r\n\t\tbool\t\t\t\t\t\t\t\tselected_mesh_it_is_valid = false; ///< Is there a valid currently selected mesh.\r\n\t\t\r\n\t\tInteractiveCameraHandler\t\t\tcamera_handler; ///< View camera handler.\r\n\r\n\t\tPointShader\t\t\t\t\t\t\tpoints_shader; ///< Shader for points.\r\n\t\tMeshShadingShader\t\t\t\t\tcolored_mesh_shader; ///< Shader for meshes.\r\n\t\tNormalRenderingShader\t\t\t\tper_vertex_normals_shader, per_triangle_normals_shader; ///< Shaders for visualizing an object normals.\r\n\r\n\t\tVector3f\t\t\t\t\t\t\tbackgroundColor = { 0.7f, 0.7f, 0.7f }; ///< Background clear color.\r\n\t};\r\n\r\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/MultiViewManager.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n# include \"core/graphics/GUI.hpp\"\n# include \"core/view/MultiViewManager.hpp\"\n\nnamespace sibr\n{\n\tMultiViewBase::MultiViewBase(const Vector2i & defaultViewRes)\n\t{\n\t\t/// \\todo TODO: support launch arg for stereo mode.\n\t\trenderingMode(IRenderingMode::Ptr(new MonoRdrMode()));\n\n\t\t//Default view resolution.\n\t\tsetDefaultViewResolution(defaultViewRes);\n\n\t\t_timeLastFrame = std::chrono::steady_clock::now();\n\t\t_deltaTime = 0.0;\n\t\t_exportPath = \"./screenshots\";\n\t}\n\n\tvoid MultiViewBase::onUpdate(Input& input)\n\t{\n\t\tif (input.key().isActivated(Key::LeftControl) && input.key().isPressed(Key::LeftAlt) && input.key().isPressed(Key::P)) {\n\t\t\t_onPause = !_onPause;\n\t\t}\n\t\tif (_onPause) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Elapsed time since last rendering.\n\t\tconst auto timeNow = std::chrono::steady_clock::now();\n\t\t_deltaTime = (float)(std::chrono::duration_cast<std::chrono::microseconds>(timeNow - _timeLastFrame).count())/1000000.0f;\n\t\t_timeLastFrame = timeNow;\n\n\t\tfor (auto & subview : _subViews) {\n\t\t\tif (subview.second.view->active()) {\n\t\t\t\tauto subInput = !subview.second.view->isFocused() ? Input() : Input::subInput(input, subview.second.viewport, false);\n\n\t\t\t\tif (subview.second.handler) {\n\t\t\t\t\tsubview.second.handler->update(subInput, _deltaTime, subview.second.viewport);\n\t\t\t\t}\n\n\t\t\t\tsubview.second.updateFunc(subview.second.view, subInput, subview.second.viewport, _deltaTime);\n\n\t\t\t}\n\t\t}\n\n\t\tfor (auto & subview : _ibrSubViews) {\n\t\t\tMultiViewBase::IBRSubView & fView = subview.second;\n\n\t\t\tif (fView.view->active()) {\n\t\t\t\tauto subInput = !fView.view->isFocused() ? Input() : Input::subInput(input, fView.viewport, false);\n\n\t\t\t\tif (fView.handler) {\n\t\t\t\t\tfView.handler->update(subInput, _deltaTime, fView.viewport);\n\t\t\t\t}\n\n\t\t\t\tfView.cam = fView.updateFunc(fView.view, subInput, fView.viewport, _deltaTime);\n\n\t\t\t\t/// If we use the default update func and the integrated handler, \n\t\t\t\t/// we have to use the handler's camera.\n\t\t\t\tif (fView.defaultUpdateFunc && fView.handler) {\n\t\t\t\t\tfView.cam = fView.handler->getCamera();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tfor (auto & subMultiView : _subMultiViews) {\n\t\t\tsubMultiView.second->onUpdate(input);\n\t\t}\n\t}\n\n\tvoid MultiViewBase::onRender(Window& win)\n\t{\n\t\t// Render all views.\n\t\tfor (auto & subview : _ibrSubViews) {\n\t\t\tif (subview.second.view->active()) {\n\n\t\t\t\trenderSubView(subview.second);\n\n\t\t\t\tif (_enableGUI && _showSubViewsGui) {\n\t\t\t\t\tsubview.second.view->onGUI();\n\t\t\t\t\tif (subview.second.handler) {\n\t\t\t\t\t\tsubview.second.handler->onGUI(\"Camera \" + subview.first);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (auto & subview : _subViews) {\n\t\t\tif (subview.second.view->active()) {\n\n\t\t\t\trenderSubView(subview.second);\n\t\t\t\t\n\t\t\t\tif (_enableGUI && _showSubViewsGui) {\n\t\t\t\t\tsubview.second.view->onGUI();\n\t\t\t\t\tif (subview.second.handler) {\n\t\t\t\t\t\tsubview.second.handler->onGUI(\"Camera \" + subview.first);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (auto & subMultiView : _subMultiViews) {\n\t\t\tsubMultiView.second->onRender(win);\n\t\t}\n\n\n\t}\n\n\tvoid MultiViewBase::onGui(Window & win)\n\t{\n\t}\n\n\tvoid MultiViewBase::addSubView(const std::string & title, ViewBase::Ptr view, const Vector2u & res, const ImGuiWindowFlags flags)\n\t{\n\t\tconst ViewUpdateFunc updateFunc =\n\t\t\t[](ViewBase::Ptr& vi, Input& in, const Viewport& vp, const float dt) {\n\t\t\tvi->onUpdate(in, vp);\n\t\t};\n\t\taddSubView(title, view, updateFunc, res, flags);\n\t}\n\n\tvoid MultiViewBase::addSubView(const std::string & title, ViewBase::Ptr view, const ViewUpdateFunc updateFunc, const Vector2u & res, const ImGuiWindowFlags flags)\n\t{\n\t\tfloat titleBarHeight = 0.0f;\n\t\tif(_enableGUI) titleBarHeight = ImGui::GetTitleBarHeight();\n\t\t// We have to shift vertically to avoid an overlap with the menu bar.\n\t\tconst Viewport viewport(0.0f, titleBarHeight,\n\t\t\tres.x() > 0 ? res.x() : (float)_defaultViewResolution.x(),\n\t\t\t(res.y() > 0 ? res.y() : (float)_defaultViewResolution.y()) + titleBarHeight);\n\t\tRenderTargetRGB::Ptr rtPtr(new RenderTargetRGB((uint)viewport.finalWidth(), (uint)viewport.finalHeight(), SIBR_CLAMP_UVS));\n\t\t_subViews[title] = {view, rtPtr, viewport, title, flags, updateFunc };\n\n\t}\n\n\tvoid MultiViewBase::addIBRSubView(const std::string & title, ViewBase::Ptr view, const IBRViewUpdateFunc updateFunc, const Vector2u & res, const ImGuiWindowFlags flags, const bool defaultFuncUsed)\n\t{\n\t\tfloat titleBarHeight = 0.0f;\n\t\tif(_enableGUI) titleBarHeight = ImGui::GetTitleBarHeight();\n\t\t// We have to shift vertically to avoid an overlap with the menu bar.\n\t\tconst Viewport viewport(0.0f, titleBarHeight,\n\t\t\tres.x() > 0 ? res.x() : (float)_defaultViewResolution.x(),\n\t\t\t(res.y() > 0 ? res.y() : (float)_defaultViewResolution.y()) + titleBarHeight);\n\t\tRenderTargetRGB::Ptr rtPtr(new RenderTargetRGB((uint)viewport.finalWidth(), (uint)viewport.finalHeight(), SIBR_CLAMP_UVS));\n\t\tif (_ibrSubViews.count(title) > 0){\n\t\t\tconst auto handler = _ibrSubViews[title].handler;\n\t\t\t_ibrSubViews[title] = { view, rtPtr, viewport, title, flags, updateFunc, defaultFuncUsed };\n\t\t\t_ibrSubViews[title].handler = handler;\n\t\t}\n\t\telse {\n\t\t\t_ibrSubViews[title] = { view, rtPtr, viewport, title, flags, updateFunc, defaultFuncUsed };\n\t\t}\n\t\t_ibrSubViews[title].shouldUpdateLayout = true;\n\t}\n\n\tvoid MultiViewBase::addIBRSubView(const std::string & title, ViewBase::Ptr view, const Vector2u & res, const ImGuiWindowFlags flags)\n\t{\n\t\tconst auto updateFunc = [](ViewBase::Ptr& vi, Input& in, const Viewport& vp, const float dt) {\n\t\t\tvi->onUpdate(in, vp);\n\t\t\treturn InputCamera();\n\t\t};\n\t\taddIBRSubView(title, view, updateFunc, res, flags, true);\n\t}\n\n\tvoid MultiViewBase::addIBRSubView(const std::string & title, ViewBase::Ptr view, const IBRViewUpdateFunc updateFunc, const Vector2u & res, const ImGuiWindowFlags flags)\n\t{\n\t\taddIBRSubView(title, view, updateFunc, res, flags, false);\n\t}\n\n\tvoid MultiViewBase::addSubMultiView(const std::string & title, MultiViewBase::Ptr multiview)\n\t{\n\t\t_subMultiViews[title] = multiview;\n\t}\n\n\tViewBase::Ptr & MultiViewBase::getIBRSubView(const std::string & title)\n\t{\n\t\tif (_subViews.count(title) > 0) {\n\t\t\treturn _subViews.at(title).view;\n\t\t}\n\t\tif (_ibrSubViews.count(title) > 0) {\n\t\t\treturn _ibrSubViews.at(title).view;\n\t\t}\n\n\t\tSIBR_ERR << \" No subview with name <\" << title << \"> found.\" << std::endl;\n\n\t\treturn _subViews.begin()->second.view;\n\t}\n\n\tViewport & MultiViewBase::getIBRSubViewport(const std::string & title)\n\t{\n\t\tif (_subViews.count(title) > 0) {\n\t\t\treturn _subViews.at(title).viewport;\n\t\t}\n\t\telse if (_ibrSubViews.count(title) > 0) {\n\t\t\treturn _ibrSubViews.at(title).viewport;\n\t\t}\n\n\t\tSIBR_ERR << \" No subviewport with name <\" << title << \"> found.\" << std::endl;\n\n\t\treturn _subViews.begin()->second.viewport;\n\t}\n\n\tvoid MultiViewBase::renderSubView(SubView & subview) \n\t{\n\t\t\n\t\tif (!_onPause) {\n\n\t\t\tconst Viewport renderViewport(0.0, 0.0, (float)subview.rt->w(), (float)subview.rt->h());\n\t\t\tsubview.render(_renderingMode, renderViewport);\n\n\t\t\t// Offline video dumping, continued. We ignore additional rendering as those often are GUI overlays.\n\t\t\tif (subview.handler != NULL && (subview.handler->getCamera().needVideoSave() || subview.handler->getCamera().needSave())) {\n\t\t\t\t\n\t\t\t\tImageRGB frame;\n\n\t\t\t\tsubview.rt->readBack(frame);\n\t\t\t\t\n\t\t\t\tif (subview.handler->getCamera().needSave()) {\n\t\t\t\t\tframe.save(subview.handler->getCamera().savePath());\n\t\t\t\t}\n\t\t\t\t_videoFrames.push_back(frame.toOpenCVBGR());\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// Additional rendering.\n\t\t\tsubview.renderFunc(subview.view, renderViewport, std::static_pointer_cast<IRenderTarget>(subview.rt));\n\n\t\t\t// Render handler if needed.\n\t\t\tif (subview.handler) {\n\t\t\t\tsubview.rt->bind();\n\t\t\t\trenderViewport.bind();\n\t\t\t\tsubview.handler->onRender(renderViewport);\n\t\t\t\tsubview.rt->unbind();\n\t\t\t}\n\t\t}\n\n\t\tif(_enableGUI)\n\t\t{\n\t\t\tImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));\n\t\t\tsubview.view->setFocus(showImGuiWindow(subview.view->name(), *subview.rt, subview.flags, subview.viewport, false, subview.shouldUpdateLayout));\n\t\t\tImGui::PopStyleVar();\n\t\t}\n\t\t// If we have updated the layout, don't do it next frame.\n\t\tsubview.shouldUpdateLayout = false;\n\t}\n\n\tViewBase::Ptr MultiViewBase::removeSubView(const std::string & title)\n\t{\n\t\tViewBase::Ptr viewPtr = nullptr;\n\t\tif (_subViews.count(title) > 0) {\n\t\t\tviewPtr = _subViews.at(title).view;\n\t\t\t_subViews.erase(title);\n\t\t}\n\t\telse if (_ibrSubViews.count(title) > 0) {\n\t\t\tviewPtr = _ibrSubViews.at(title).view;\n\t\t\t_ibrSubViews.erase(title);\n\t\t}\n\t\telse {\n\t\t\tSIBR_WRG << \"No view named <\" << title << \"> found.\" << std::endl;\n\t\t}\n\t\treturn viewPtr;\n\t}\n\n\tvoid MultiViewBase::renderingMode(const IRenderingMode::Ptr& mode)\n\t{\n\t\t_renderingMode = std::move(mode);\n\t}\n\n\tconst Viewport MultiViewBase::getViewport(void) const\n\t{\n\t\treturn Viewport(0.0f, 0.0f, (float)_defaultViewResolution.x(), (float)_defaultViewResolution.y());\n\t}\n\n\tvoid MultiViewBase::addCameraForView(const std::string & name, ICameraHandler::Ptr cameraHandler)\n\t{\n\t\tif (_subViews.count(name) > 0) {\n\t\t\t_subViews.at(name).handler = cameraHandler;\n\t\t}\n\t\telse if (_ibrSubViews.count(name) > 0) {\n\t\t\t_ibrSubViews.at(name).handler = cameraHandler;\n\n\t\t\tSubView & subview = _ibrSubViews.at(name);\n\t\t}\n\t\telse {\n\t\t\tSIBR_WRG << \"No view named <\" << name << \"> found.\" << std::endl;\n\t\t}\n\n\t}\n\n\tvoid MultiViewBase::addAdditionalRenderingForView(const std::string & name, const AdditionalRenderFunc renderFunc)\n\t{\n\t\tif (_subViews.count(name) > 0) {\n\t\t\t_subViews.at(name).renderFunc = renderFunc;\n\t\t}\n\t\telse if (_ibrSubViews.count(name) > 0) {\n\t\t\t_ibrSubViews.at(name).renderFunc = renderFunc;\n\t\t}\n\t\telse {\n\t\t\tSIBR_WRG << \"No view named <\" << name << \"> found.\" << std::endl;\n\t\t}\n\t}\n\n\tint MultiViewBase::numSubViews() const\n\t{\n\t\treturn static_cast<int>(_subViews.size() + _ibrSubViews.size() + _subMultiViews.size());\n\t}\n\n\tvoid MultiViewBase::captureView(const std::string & subviewName, const std::string & path, const std::string & filename)\n\t{\n\t\tif (_subViews.count(subviewName)) {\n\t\t\tcaptureView(_subViews[subviewName], path, filename);\n\t\t}\n\t\telse if (_ibrSubViews.count(subviewName)) {\n\t\t\tcaptureView(_ibrSubViews[subviewName], path, filename);\n\t\t}\n\t\telse {\n\t\t\tSIBR_WRG << \"No View in the MultiViewManager with \" << subviewName << \" as a name!\" << std::endl;\n\t\t}\n\t}\n\n\tvoid MultiViewBase::captureView(const SubView & view, const std::string& path, const std::string & filename) {\n\n\t\tconst uint w = view.rt->w();\n\t\tconst uint h = view.rt->h();\n\n\t\tImageRGB renderingImg(w, h);\n\n\t\tview.rt->readBack(renderingImg);\n\n\t\tstd::string finalPath = path + (!path.empty() ? \"/\" : \"\");\n\t\tif (!filename.empty()) {\n\t\t\tfinalPath.append(filename);\n\t\t}\n\t\telse {\n\t\t\tconst std::string autoName = view.view->name() + \"_\" + sibr::timestamp();\n\t\t\tfinalPath.append(autoName + \".png\");\n\t\t}\n\n\t\tmakeDirectory(path);\n\t\trenderingImg.save(finalPath, true);\n\t}\n\n\tvoid MultiViewBase::mosaicLayout(const Viewport & vp)\n\t{\n\t\tconst int viewsCount = numSubViews();\n\t\t\n\t\t// Do square decomposition for now.\n\t\t// Find the next square.\n\t\tconst int sideCount = int(std::ceil(std::sqrt(viewsCount)));\n\t\tint verticalShift = 0;\n\t\tif(_enableGUI) verticalShift = ImGui::GetTitleBarHeight();\n\n\t\tViewport usedVP = Viewport(vp.finalLeft(), vp.finalTop() + verticalShift, vp.finalRight(), vp.finalBottom());\n\t\tVector2f itemRatio = Vector2f(1, 1) / sideCount;\n\n\t\tint vid = 0;\n\t\tfor (auto & view : _ibrSubViews) {\n\t\t\t// Compute position on grid.\n\t\t\tconst int col = vid % sideCount;\n\t\t\tconst int row = vid / sideCount;\n\t\t\tview.second.viewport = Viewport(usedVP, col*itemRatio[0], row * itemRatio[1], (col + 1)*itemRatio[0], (row + 1)*itemRatio[1]);\n\t\t\tview.second.shouldUpdateLayout = true;\n\t\t\t++vid;\n\t\t}\n\t\tfor (auto & view : _subViews) {\n\t\t\t// Compute position on grid.\n\t\t\tconst int col = vid % sideCount;\n\t\t\tconst int row = vid / sideCount;\n\t\t\tview.second.viewport = Viewport(usedVP, col*itemRatio[0], row * itemRatio[1], (col + 1)*itemRatio[0], (row + 1)*itemRatio[1]);\n\t\t\tview.second.shouldUpdateLayout = true;\n\t\t\t++vid;\n\t\t}\n\t\tfor (auto & view : _subMultiViews) {\n\t\t\t// Compute position on grid.\n\t\t\tconst int col = vid % sideCount;\n\t\t\tconst int row = vid / sideCount;\n\t\t\tview.second->mosaicLayout(Viewport(usedVP, col*itemRatio[0], row * itemRatio[1], (col + 1)*itemRatio[0], (row + 1)*itemRatio[1]));\n\t\t\t++vid;\n\t\t}\n\n\t}\n\t\n\tvoid MultiViewBase::toggleSubViewsGUI()\n\t{\n\t\t_showSubViewsGui = !_showSubViewsGui;\n\n\t\tfor (auto & view : _subMultiViews) {\n\t\t\tview.second->toggleSubViewsGUI();\n\t\t}\n\t}\n\n\tvoid MultiViewBase::setExportPath(const std::string & path) {\n\t\t_exportPath = path;\n\t\tsibr::makeDirectory(path);\n\t}\n\n\tMultiViewBase::SubView::SubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, const std::string& name_, const ImGuiWindowFlags flags_) :\n\t\tview(view_), rt(rt_), handler(), viewport(viewport_), flags(flags_), shouldUpdateLayout(false) {\n\t\trenderFunc = [](ViewBase::Ptr&, const Viewport&, const IRenderTarget::Ptr&) {};\n\t\tview->setName(name_);\n\t}\n\n\tMultiViewBase::BasicSubView::BasicSubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, const std::string& name_, const ImGuiWindowFlags flags_, ViewUpdateFunc f_) :\n\t\tSubView(view_, rt_, viewport_, name_, flags_), updateFunc(f_) {\n\t}\n\n\tvoid MultiViewBase::BasicSubView::render(const IRenderingMode::Ptr& rm, const Viewport& renderViewport) const  {\n\t\trt->bind();\n\t\trenderViewport.bind();\n\t\trenderViewport.clear();\n\t\tview->onRender(renderViewport);\n\t\trt->unbind();\n\t}\n\n\tMultiViewBase::IBRSubView::IBRSubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, const std::string& name_, const ImGuiWindowFlags flags_, IBRViewUpdateFunc f_, const bool defaultUpdateFunc_) :\n\t\tSubView(view_, rt_, viewport_, name_, flags_), updateFunc(f_), defaultUpdateFunc(defaultUpdateFunc_) {\n\t\tcam = sibr::InputCamera();\n\t}\n\n\tvoid MultiViewBase::IBRSubView::render(const IRenderingMode::Ptr& rm, const Viewport& renderViewport) const  {\n\t\tif (rm) {\n\t\t\trm->render(*view, cam, renderViewport, rt.get());\n\t\t}\n\t}\n\n\tMultiViewManager::MultiViewManager(Window& window, bool resize)\n\t\t: _window(window), _fpsCounter(false)\n\t{\n\t\t_enableGUI = window.isGUIEnabled();\n\t\t\n\t\tif (resize) {\n\t\t\twindow.size(\n\t\t\t\tWindow::desktopSize().x() - 200,\n\t\t\t\tWindow::desktopSize().y() - 200);\n\t\t\twindow.position(100, 100);\n\t\t}\n\n\t\t/// \\todo TODO: support launch arg for stereo mode.\n\t\trenderingMode(IRenderingMode::Ptr(new MonoRdrMode()));\n\n\t\t//Default view resolution.\n\t\tint w = int(window.size().x() * 0.5f);\n\t\tint h = int(window.size().y() * 0.5f);\n\t\tsetDefaultViewResolution(Vector2i(w, h));\n\n\t\tif(_enableGUI) ImGui::GetStyle().WindowBorderSize = 0.0;\n\t}\n\n\tvoid MultiViewManager::onUpdate(Input & input)\n\t{\n\t\tMultiViewBase::onUpdate(input);\n\n\t\tif (input.key().isActivated(Key::LeftControl) && input.key().isActivated(Key::LeftAlt) && input.key().isReleased(Key::G)) {\n\t\t\ttoggleGUI();\n\t\t}\n\t}\n\n\tvoid MultiViewManager::onRender(Window & win)\n\t{\n\t\twin.viewport().bind();\n\t\tglClearColor(37.f / 255.f, 37.f / 255.f, 38.f / 255.f, 1.f);\n\t\tglClear(GL_COLOR_BUFFER_BIT);\n\t\tglClearColor(1.f, 1.f, 1.f, 1.f);\n\n\t\tonGui(win);\n\n\t\tMultiViewBase::onRender(win);\n\n\t\t_fpsCounter.update(_enableGUI && _showGUI);\n\t}\n\n\tvoid MultiViewManager::onGui(Window & win)\n\t{\n\t\tMultiViewBase::onGui(win);\n\n\t\t// Menu\n\t\tif (_showGUI && ImGui::BeginMainMenuBar())\n\t\t{\n\t\t\tif (ImGui::BeginMenu(\"Menu\"))\n\t\t\t{\n\t\t\t\tImGui::MenuItem(\"Pause\", \"\", &_onPause);\n\t\t\t\tif (ImGui::BeginMenu(\"Display\")) {\n\t\t\t\t\tconst bool currentScreenState = win.isFullscreen();\n\t\t\t\t\tif (ImGui::MenuItem(\"Fullscreen\", \"\", currentScreenState)) {\n\t\t\t\t\t\twin.setFullscreen(!currentScreenState);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bool currentSyncState = win.isVsynced();\n\t\t\t\t\tif (ImGui::MenuItem(\"V-sync\", \"\", currentSyncState)) {\n\t\t\t\t\t\twin.setVsynced(!currentSyncState);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bool isHiDPI = ImGui::GetIO().FontGlobalScale > 1.0f;\n\t\t\t\t\tif (ImGui::MenuItem(\"HiDPI\", \"\", isHiDPI)) {\n\t\t\t\t\t\tif (isHiDPI) {\n\t\t\t\t\t\t\tImGui::GetStyle().ScaleAllSizes(1.0f / win.scaling());\n\t\t\t\t\t\t\tImGui::GetIO().FontGlobalScale = 1.0f;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tImGui::GetStyle().ScaleAllSizes(win.scaling());\n\t\t\t\t\t\t\tImGui::GetIO().FontGlobalScale = win.scaling();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ImGui::MenuItem(\"Hide GUI (!)\", \"Ctrl+Alt+G\")) {\n\t\t\t\t\t\ttoggleGUI();\n\t\t\t\t\t}\n\t\t\t\t\tImGui::EndMenu();\n\t\t\t\t}\n\n\n\t\t\t\tif (ImGui::MenuItem(\"Mosaic layout\")) {\n\t\t\t\t\tmosaicLayout(win.viewport());\n\t\t\t\t}\n\n\t\t\t\tif (ImGui::MenuItem(\"Row layout\")) {\n\t\t\t\t\tVector2f itemSize = win.size().cast<float>();\n\t\t\t\t\titemSize[0] = std::round(float(itemSize[0]) / float(_subViews.size() + _ibrSubViews.size()));\n\t\t\t\t\tconst float verticalShift = ImGui::GetTitleBarHeight();\n\t\t\t\t\tfloat vid = 0.0f;\n\t\t\t\t\tfor (auto & view : _ibrSubViews) {\n\t\t\t\t\t\t// Compute position on grid.\n\t\t\t\t\t\tview.second.viewport = Viewport(vid*itemSize[0], verticalShift, (vid + 1.0f)*itemSize[0] - 1.0f, verticalShift + itemSize[1] - 1.0f);\n\t\t\t\t\t\tview.second.shouldUpdateLayout = true;\n\t\t\t\t\t\t++vid;\n\t\t\t\t\t}\n\t\t\t\t\tfor (auto & view : _subViews) {\n\t\t\t\t\t\t// Compute position on grid.\n\t\t\t\t\t\tview.second.viewport = Viewport(vid*itemSize[0], verticalShift, (vid + 1.0f)*itemSize[0] - 1.0f, verticalShift + itemSize[1] - 1.0f);\n\t\t\t\t\t\tview.second.shouldUpdateLayout = true;\n\t\t\t\t\t\t++vid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tif (ImGui::MenuItem(\"Quit\", \"Escape\")) { win.close(); }\n\t\t\t\tImGui::EndMenu();\n\t\t\t}\n\n\t\t\tif (ImGui::BeginMenu(\"Views\"))\n\t\t\t{\n\t\t\t\tfor (auto & subview : _subViews) {\n\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str(), \"\", subview.second.view->active())) {\n\t\t\t\t\t\tsubview.second.view->active(!subview.second.view->active());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (auto & subview : _ibrSubViews) {\n\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str(), \"\", subview.second.view->active())) {\n\t\t\t\t\t\tsubview.second.view->active(!subview.second.view->active());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (ImGui::MenuItem(\"Metrics\", \"\", _fpsCounter.active())) {\n\t\t\t\t\t_fpsCounter.toggleVisibility();\n\t\t\t\t}\n\t\t\t\tif (ImGui::BeginMenu(\"Front when focus\"))\n\t\t\t\t{\n\t\t\t\t\tfor (auto & subview : _subViews) {\n\t\t\t\t\t\tconst bool isLockedInBackground = subview.second.flags & ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str(), \"\", !isLockedInBackground)) {\n\t\t\t\t\t\t\tif(isLockedInBackground) {\n\t\t\t\t\t\t\t\tsubview.second.flags &= ~ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsubview.second.flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (auto & subview : _ibrSubViews) {\n\t\t\t\t\t\tconst bool isLockedInBackground = subview.second.flags & ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str(), \"\", !isLockedInBackground)) {\n\t\t\t\t\t\t\tif (isLockedInBackground) {\n\t\t\t\t\t\t\t\tsubview.second.flags &= ~ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsubview.second.flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tImGui::EndMenu();\n\t\t\t\t}\n\t\t\t\tif (ImGui::MenuItem(\"Reset Settings to Default\", \"\")) {\n\t\t\t\t\t_window.resetSettingsToDefault();\n\t\t\t\t}\n\t\t\t\tImGui::EndMenu();\n\t\t\t}\n\n\t\t\tif (ImGui::BeginMenu(\"Capture\"))\n\t\t\t{\n\n\t\t\t\tif (ImGui::MenuItem(\"Set export directory...\")) {\n\t\t\t\t\tstd::string selectedDirectory;\n\t\t\t\t\tif (showFilePicker(selectedDirectory, FilePickerMode::Directory)) {\n\t\t\t\t\t\tif (!selectedDirectory.empty()) {\n\t\t\t\t\t\t\t_exportPath = selectedDirectory;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (auto & subview : _subViews) {\n\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str())) {\n\t\t\t\t\t\tcaptureView(subview.second, _exportPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (auto & subview : _ibrSubViews) {\n\t\t\t\t\tif (ImGui::MenuItem(subview.first.c_str())) {\n\t\t\t\t\t\tcaptureView(subview.second, _exportPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (ImGui::MenuItem(\"Export Video\")) {\n\t\t\t\t\tstd::string saveFile;\n\t\t\t\t\tif (showFilePicker(saveFile, FilePickerMode::Save)) {\n\t\t\t\t\t\tconst std::string outputVideo = saveFile + \".mp4\";\n\t\t\t\t\t\tif(!_videoFrames.empty()) {\n\t\t\t\t\t\t\tSIBR_LOG << \"Exporting video to : \" << outputVideo << \" ...\" << std::flush;\n\t\t\t\t\t\t\tFFVideoEncoder vdoEncoder(outputVideo, 30, Vector2i(_videoFrames[0].cols, _videoFrames[0].rows));\n\t\t\t\t\t\t\tfor (int i = 0; i < _videoFrames.size(); i++) {\n\t\t\t\t\t\t\t\tvdoEncoder << _videoFrames[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_videoFrames.clear();\n\t\t\t\t\t\t\tstd::cout << \" Done.\" << std::endl;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tSIBR_WRG << \"No frames to export!! Check save frames in camera options for the view you want to render and play the path and re-export!\" << std::endl;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tImGui::EndMenu();\n\t\t\t}\n\n\t\t\tImGui::EndMainMenuBar();\n\t\t}\n\t}\n\n\tvoid MultiViewManager::toggleGUI()\n\t{\n\t\t_showGUI = !_showGUI;\n\t\tif (!_showGUI) {\n\t\t\tSIBR_LOG << \"[MultiViewManager] GUI is now hidden, use Ctrl+Alt+G to toggle it back on.\" << std::endl;\n\t\t}\n\t\ttoggleSubViewsGUI();\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/MultiViewManager.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <type_traits>\n# include <chrono>\n\n# include \"core/view/Config.hpp\"\n# include \"core/graphics/Window.hpp\"\n# include \"core/graphics/Texture.hpp\"\n# include \"core/view/RenderingMode.hpp\"\n# include \"core/view/FPSCamera.hpp\"\n\n# include \"core/assets/InputCamera.hpp\"\n# include \"core/graphics/Input.hpp\"\n# include \"core/graphics/Image.hpp\"\n# include \"core/graphics/RenderUtility.hpp\"\n# include \"core/assets/CameraRecorder.hpp\"\n# include \"core/view/ViewBase.hpp\"\n# include \"core/graphics/Shader.hpp\"\n# include \"core/view/FPSCounter.hpp\"\n#include \"core/video/FFmpegVideoEncoder.hpp\"\n#include \"InteractiveCameraHandler.hpp\"\n#include <random>\n#include <map>\n\n\nnamespace sibr\n{\n\n\t/**\n\t * MultiViewBase is designed to provide\n\t * more flexibility and with a multi-windows system in mind.\n\t * Once a MultiViewBase is created, you can register standard and\n\t * IBR subviews, providing additional functions for update and\n\t * rendering if needed, along with support for ImGui interfaces.\n\t * MultiViewBase will wrap those views and manage them on screen.\n\t * To support legacy rendering modes and views, we introduce a\n\t * distinction between standard subviews, that will be rendered through\n\t * a call to onRender(Viewport&), and IBR subviews rendered through\n\t * a onRenderIBR(rt, eye) call. This also means that after updating\n\t * (via onUpdate) an IBR subview, you have to return the camera\n\t * that will be used for the onRenderIBR call.\n\t * Note: new IBR views don't have to implement this distinction.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MultiViewBase\n\t{\n\t\tSIBR_CLASS_PTR(MultiViewBase);\n\n\tpublic:\n\n\t\t/// Update callback for a standard view. Passes the view pointer, the correct input state, and the correct viewport.\n\t\ttypedef  std::function<void(sibr::ViewBase::Ptr &, sibr::Input&, const sibr::Viewport&, const float)> ViewUpdateFunc;\n\t\t/// Update callback for an IBR view, see main description for the return value.\n\t\ttypedef  std::function<sibr::InputCamera(sibr::ViewBase::Ptr &, sibr::Input&, const sibr::Viewport&, const float)> IBRViewUpdateFunc;\n\t\t/// Additional render callback for a subview.\n\t\ttypedef  std::function<void(sibr::ViewBase::Ptr &, const sibr::Viewport&, const IRenderTarget::Ptr& )> AdditionalRenderFunc;\n\n\t\t/*\n\t\t * \\brief Creates a MultiViewBase in a given OS window.\n\t\t * \\param defaultViewRes the default resolution for each subview\n\t\t */\n\t\tMultiViewBase(const Vector2i & defaultViewRes = { 800, 600 });\n\n\t\t/**\n\t\t * \\brief Update subviews and the MultiViewBase.\n\t\t * \\param input The input state to use.\n\t\t */\n\t\tvirtual void\tonUpdate(Input & input);\n\n\t\t/**\n\t\t * \\brief Render the content of the MultiViewBase\n\t\t * \\param win The OS window into which the rendering should be performed.\n\t\t */\n\t\tvirtual void\tonRender(Window& win);\n\n\t\t/**\n\t\t * \\brief Render additional gui\n\t\t * \\param win The OS window into which the rendering should be performed.\n\t\t */\n\t\tvirtual void\tonGui(Window& win);\n\n\t\t/**\n\t\t * \\brief Register a standard subview (for instance a SceneDebugView). It will be rendered via a call to onRender(Viewport) in an implicit rendertarget managed by the MultiViewBase.\n\t\t * \\param title the title of the view.\n\t\t * \\param view a pointer to the view.\t\t\n\t\t * \\param res a custom resolution used for the internal rendering and display. If null, the default value is used.\n\t\t * \\param flags ImGui_WindowFlags to pass to the internal window manager.\n\t\t */\n\t\tvoid\taddSubView(const std::string& title, ViewBase::Ptr view,\n\t\t\t\t\t\tconst Vector2u & res = Vector2u(0,0),\n\t\t\t\t\t\tconst ImGuiWindowFlags flags = 0);\n\n\t\t/**\n\t\t* \\brief Register a standard subview (for instance a SceneDebugView). It will be rendered via a call to onRender(Viewport) in an implicit rendertarget managed by the MultiViewBase.\n\t\t* \\param title the title of the view.\n\t\t* \\param view a pointer to the view.\n\t\t* \\param updateFunc the function that will be called to update your view.\n\t\t*\t\t\t\t\tIt will pass you the view, the correct Input (mouse position\n\t\t*\t\t\t\t\tfrom 0,0 in the top left corner, key presses and mouse clicks\n\t\t*\t\t\t\t\tonly if the cursor is over the view), and the Viewport in the\n\t\t*\t\t\t\t\tOS window.\n\t\t* \\param res a custom resolution used for the internal rendering and display. If null, the default value is used.\n\t\t* \\param flags ImGui_WindowFlags to pass to the internal window manager.\n\t\t*/\n\t\tvoid\taddSubView(const std::string& title, ViewBase::Ptr view,\n\t\t\tconst ViewUpdateFunc updateFunc,\n\t\t\tconst Vector2u & res = Vector2u(0, 0),\n\t\t\tconst ImGuiWindowFlags flags = 0);\n\n\t\t/**\n\t\t* \\brief Register an IBR subview (for instance an ULRView). It will be rendered via a call to onRenderIBR(rt,cam,dst).\n\t\t* \\param title the title of the view.\n\t\t* \\param view a pointer to the view.\n\t\t* \\param res a custom resolution used for the internal rendering. If null, the default value is used.\n\t\t* \\param flags ImGui_WindowFlags to pass to the internal window manager.\n\t\t*/\n\t\tvoid\taddIBRSubView(const std::string& title, ViewBase::Ptr view, \n\t\t\t\t\t\tconst Vector2u & res = Vector2u(0, 0),\n\t\t\t\t\t\tconst ImGuiWindowFlags flags = 0);\n\n\t\t/**\n\t\t* \\brief Register an IBR subview (for instance an ULRView). It will be rendered via a call to onRenderIBR(rt,cam,dst).\n\t\t* \\param title the title of the view.\n\t\t* \\param view a pointer to the view.\n\t\t* \\param updateFunc the function that will be called to update your view.\n\t\t*\t\t\t\t\tIt will pass you the view, the correct Input (mouse position\n\t\t*\t\t\t\t\tfrom 0,0 in the top left corner, key presses and mouse clicks\n\t\t*\t\t\t\t\tonly if the cursor is over the view), and the Viewport in the\n\t\t*\t\t\t\t\tOS window. You should return the camera to use during rendering.\n\t\t* \\param res a custom resolution used for the internal rendering. If null, the default value is used.\n\t\t* \\param flags ImGui_WindowFlags to pass to the internal window manager.\n\t\t*/\n\t\tvoid\taddIBRSubView(const std::string& title, ViewBase::Ptr view,\n\t\t\tconst IBRViewUpdateFunc updateFunc,\n\t\t\tconst Vector2u & res = Vector2u(0, 0),\n\t\t\tconst ImGuiWindowFlags flags = 0);\n\n\t\t/** Add another multi-view system as a subsystem of this one.\n\t\t * \\param title a name for the multiview\n\t\t * \\param multiview the multiview system to add as a subview\n\t\t */\n\t\tvoid\taddSubMultiView(const std::string & title, MultiViewBase::Ptr multiview);\n\n\t\t/**\n\t\t* \\param title\n\t\t* \\return Return viewbase associated with title, will EXIT_ERROR if no view found\n\t\t* \\note This covers both basic and IBR subviews.\n\t\t* \\todo Rename without the IBR prefix\n\t\t*/\n\t\tViewBase::Ptr &\tgetIBRSubView(const std::string& title);\n\n\t\t/**\n\t\t* \\param title\n\t\t* \\return the Viewport associated with title, will EXIT_ERROR if no viewport found\n\t\t* \\note This covers both basic and IBR subviews.\n\t\t* \\todo Rename without the IBR prefix\n\t\t*/\n\t\tViewport & getIBRSubViewport(const std::string &title);\n\n\t\t/**\n\t\t* \\brief Unregister a subview.\n\t\t* \\param title the title of the view to remove.\n\t\t* \\return the view removed from the MultiViewManager.\n\t\t*/\n\t\tViewBase::Ptr removeSubView(const std::string& title);\n\t\n\t\t/**\n\t\t * \\brief Change the rendering mode.\n\t\t * \\param mode The rendering mode to use.\n\t\t */\n\t\tvoid renderingMode(const IRenderingMode::Ptr& mode);\n\n\n\t\t/**\n\t\t * \\brief Define the default rendering and display size for new subviews.\n\t\t * \\param size the default size to use.\n\t\t */\n\t\tvoid setDefaultViewResolution(const Vector2i& size);\n\n\t\t/**\n\t\t * \\brief Returns the default viewport used for subviews rendering.\n\t\t * \\return the current default subview viewport\n\t\t */\n\t\tconst Viewport getViewport(void) const;\n\n\t\t/**\n\t\t * \\brief Returns the last frame time.\n\t\t * \\return the last frame time.\n\t\t */\n\t\tconst float & deltaTime() const { return _deltaTime; }\n\n\t\t/**\n\t\t * \\brief Add a camera handler that will automatically be updated and used by the MultiViewManager for the given subview.\n\t\t * \\param name the name of the subview to which the camera should be associated.\n\t\t * \\param cameraHandler a pointer to the camera handler to register.\n\t\t */\n\t\tvoid addCameraForView(const std::string & name, ICameraHandler::Ptr cameraHandler);\n\n\t\t/**\n\t\t* \\brief Register a function performing additional rendering for a given subview, \n\t\t* called by the MultiViewManager after calling onRender() on the subview.\n\t\t* \\param name the name of the subview to which the function should be associated.\n\t\t* \\param renderFunc the function performing additional rendering..\n\t\t*/\n\t\tvoid addAdditionalRenderingForView(const std::string & name, const AdditionalRenderFunc renderFunc);\n\n\t\t/**\n\t\t* \\brief Count NOT recursively the number of subviews.\n\t\t*/\n\t\tint numSubViews() const;\n\n\t\t/** Place all subviews on a regular grid in the given viewport.\n\t\t * \\param vp the region in which the views should be layed out.\n\t\t */\n\t\tvoid mosaicLayout(const Viewport & vp);\n\n\t\t/** Toggle the display of sub-managers GUIs. */\n\t\tvoid toggleSubViewsGUI();\n\n\t\t/**\n\t\t* \\brief Set the export path.\n\t\t* \\param path path to the directory to use.\n\t\t*/\n\t\tvoid setExportPath(const std::string & path);\n\t\t/**\n\t\t* \\brief captures a View content into an image file.\n\t\t* \\param subviewName a string with the name of the subview.\n\t\t* \\param path the path to save the output.\n\t\t* \\param filename the name of the output file, needs to have an OpenCV compatible file type.\n\t\t*/\n\t\tvoid captureView(const std::string& subviewName, const std::string& path = \"./screenshots\", const std::string& filename = \"\");\n\tprotected:\n\n\t\t/** Internal representation of a subview.\n\t\t * Note: this representation should remain *internal* to the multi view system, avoid any abstraction leak.\n\t\t */\n\t\tstruct SubView {\n\t\t\tViewBase::Ptr view; ///< Pointer to the view.\n\t\t\tRenderTargetRGB::Ptr rt; ///< Destination RT.\n\t\t\tICameraHandler::Ptr handler; ///< Potential camera handler.\n\t\t\tAdditionalRenderFunc renderFunc; ///< Optional additonal rendering function.\n\t\t\tsibr::Viewport viewport; ///< Viewport in the global window.\n\t\t\tImGuiWindowFlags flags = 0; ///< ImGui flags.\n\t\t\tbool shouldUpdateLayout = false; ///< Should the layout be updated at the next frame.\n\n\t\t\t/// Default constructor.\n\t\t\tSubView() = default;\n\n\t\t\t/// Destructor.\n\t\t\tvirtual ~SubView() = default;\n\t\t\t\n\t\t\t/** Constructor.\n\t\t\t *\\param view_ the view\n\t\t\t *\\param rt_ the destination RT\n\t\t\t *\\param viewport_ the viewport\n\t\t\t *\\param name_ the view name\n\t\t\t *\\param flags_ the ImGui flags\n\t\t\t */\n\t\t\tSubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, \n\t\t\t\tconst std::string & name_, const ImGuiWindowFlags flags_);\n\n\t\t\t/** Render the subview.\n\t\t\t *\\param rm the rendering mode to use\n\t\t\t *\\param renderViewport the viewport to use in the destination RT\n\t\t\t */\n\t\t\tvirtual void render(const IRenderingMode::Ptr & rm, const Viewport & renderViewport) const = 0;\n\t\t};\n\n\t\t/** Specialization of Subview for basic views. */\n\t\tstruct BasicSubView final : SubView {\n\t\t\tViewUpdateFunc updateFunc; ///< The update function.\n\n\t\t\t/// Default constructor.\n\t\t\tBasicSubView() : SubView() {};\n\n\t\t\t/// Destructor.\n\t\t\tvirtual ~BasicSubView() = default;\n\t\t\t\n\t\t\t/** Constructor.\n\t\t\t *\\param view_ the view\n\t\t\t *\\param rt_ the destination RT\n\t\t\t *\\param viewport_ the viewport\n\t\t\t *\\param name_ the view name\n\t\t\t *\\param flags_ the ImGui flags\n\t\t\t *\\param f_ the update function\n\t\t\t */\n\t\t\tBasicSubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, \n\t\t\t\tconst std::string & name_, const ImGuiWindowFlags flags_, ViewUpdateFunc f_);\n\n\t\t\t/** Render the subview.\n\t\t\t *\\param rm the rendering mode to use (unused)\n\t\t\t *\\param renderViewport the viewport to use in the destination RT\n\t\t\t */\n\t\t\tvoid render(const IRenderingMode::Ptr & rm, const Viewport & renderViewport) const override;\n\t\t};\n\n\t\t/** Specialization of Subview for views using a render mode (IBR views mainly). */\n\t\tstruct IBRSubView final : SubView {\n\t\t\tIBRViewUpdateFunc updateFunc; ///< The update function.\n\t\t\tsibr::InputCamera cam; ///< The current camera.\n\t\t\tbool defaultUpdateFunc = true; ///< Was the default update function used.\n\n\t\t\t/// Default constructor.\n\t\t\tIBRSubView() : SubView() {};\n\n\t\t\t/// Destructor.\n\t\t\tvirtual ~IBRSubView() = default;\n\t\t\t\n\t\t\t/** Constructor.\n\t\t\t *\\param view_ the view\n\t\t\t *\\param rt_ the destination RT\n\t\t\t *\\param viewport_ the viewport\n\t\t\t *\\param name_ the view name\n\t\t\t *\\param flags_ the ImGui flags\n\t\t\t *\\param f_ the update function\n\t\t\t *\\param defaultUpdateFunc_ was the default update function use (to avoid some collisions)\n\t\t\t */\n\t\t\tIBRSubView(ViewBase::Ptr view_, RenderTargetRGB::Ptr rt_, const sibr::Viewport viewport_, \n\t\t\t\tconst std::string & name_, const ImGuiWindowFlags flags_, IBRViewUpdateFunc f_, const bool defaultUpdateFunc_);\n\n\t\t\t/** Render the subview.\n\t\t\t *\\param rm the rendering mode to use\n\t\t\t *\\param renderViewport the viewport to use in the destination RT\n\t\t\t */\n\t\t\t void render(const IRenderingMode::Ptr & rm, const Viewport & renderViewport) const override;\n\t\t};\n\n\tprotected:\n\n\t\t/** Helper to add an IBR subview.\n\t\t* \\param title the title of the view.\n\t\t* \\param view a pointer to the view.\n\t\t* \\param updateFunc the function that will be called to update your view.\n\t\t*\t\t\t\t\tIt will pass you the view, the correct Input (mouse position\n\t\t*\t\t\t\t\tfrom 0,0 in the top left corner, key presses and mouse clicks\n\t\t*\t\t\t\t\tonly if the cursor is over the view), and the Viewport in the\n\t\t*\t\t\t\t\tOS window. You should return the camera to use during rendering.\n\t\t* \\param res a custom resolution used for the internal rendering. If null, the default value is used.\n\t\t* \\param flags ImGui_WindowFlags to pass to the internal window manager.\n\t\t* \\param defaultFuncUsed a flag denoting if the default function had to be used\n\t\t* */\n\t\tvoid addIBRSubView(const std::string & title, ViewBase::Ptr view, \n\t\t\t\t\t\t\t\t\t\t\tconst IBRViewUpdateFunc updateFunc, const Vector2u & res, \n\t\t\t\t\t\t\t\t\t\t\tconst ImGuiWindowFlags flags, const bool defaultFuncUsed);\n\n\t\t/** Perform rendering for a given subview.\n\t\t *\\param subview the subview to render\n\t\t **/\n\t\tvoid renderSubView(SubView & subview);\n\n\t\t/** Capture a view as an image on disk.\n\t\t *\\param view the view to capture\n\t\t *\\param path the destination direcotry path\n\t\t *\\param filename an optional filename, a timestamp will be appended\n\t\t *\\note if the filename is empty, the name of the view is used, with a timestamp appended.\n\t\t **/\n\t\tstatic void captureView(const SubView & view, const std::string & path = \"./screenshots/\", const std::string & filename = \"\");\n\t\t\n\t\tIRenderingMode::Ptr _renderingMode = nullptr; ///< Rendering mode.\n\t\tstd::map<std::string, BasicSubView> _subViews; ///< Regular subviews.\n\t\tstd::map<std::string, IBRSubView> _ibrSubViews; ///< IBR subviews.\n\t\tstd::map<std::string, std::shared_ptr<MultiViewBase> > _subMultiViews; ///< Nested multi-views.\n\n\t\tVector2i _defaultViewResolution; ///< Default view resolution.\n\n\t\tstd::string _exportPath; ///< Capture output path.\n\t\tstd::vector<cv::Mat> _videoFrames; ///< Video frames.\n\n\t\tstd::chrono::time_point<std::chrono::steady_clock> _timeLastFrame; ///< Last frame time point.\n\t\tfloat _deltaTime; ///< Elapsed time.\n\t\tbool _showSubViewsGui = true; ///< Show the GUI of the subviews.\n\t\tbool _onPause = false; ///< Paused interaction and update.\n\t\tbool _enableGUI = true; ///< Should the GUI be enabled.\n\t};\n\n\t/** A multiview manager is a multi-view system that displays its subviews in an OS window.\n\tuse it as a based for applications with multiple subviews.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MultiViewManager : public MultiViewBase\n\t{\n\tpublic:\n\t\t/*\n\t\t * \\brief Creates a MultiViewManager in a given OS window.\n\t\t * \\param window The OS window to use.\n\t\t * \\param resize Should the window be resized by the manager to maximize usable space.\n\t\t */\n\t\tMultiViewManager(Window& window, bool resize = true);\n\n\t\t/**\n\t\t * \\brief Update subviews and the MultiViewManager.\n\t\t * \\param input The Input state to use.\n\t\t */\n\t\tvoid\tonUpdate(Input & input) override;\n\n\t\t/**\n\t\t * \\brief Render the content of the MultiViewManager and its interface\n\t\t * \\param win The OS window into which the rendering should be performed.\n\t\t */\n\t\tvoid\tonRender(Window& win) override;\n\n\t\t/**\n\t\t * \\brief Render menus and additional gui\n\t\t * \\param win The OS window into which the rendering should be performed.\n\t\t */\n\t\tvoid\tonGui(Window& win) override;\n\n\tprivate:\n\n\t\t/** Show/hide the GUI. */\n\t\tvoid toggleGUI();\n\n\t\tWindow& _window; ///< The OS window.\n\t\tFPSCounter _fpsCounter; ///< A FPS counter.\n\t\tbool _showGUI = true; ///< Should the GUI be displayed.\n\n\t};\n\n\t///// INLINE /////\n\n\tinline void MultiViewBase::setDefaultViewResolution(const Vector2i& size) {\n\t\t_defaultViewResolution = size;\n\t}\n\n\t\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/Orbit.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"Orbit.hpp\"\n#include <boost/filesystem.hpp>\n#include \"core/graphics/Input.hpp\"\n#include \"core/graphics/Viewport.hpp\"\n#include \"core/raycaster/CameraRaycaster.hpp\" \n#include \"core/graphics/Window.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n#include \"core/view/UIShortcuts.hpp\"\n\n# define SIBR_ORBIT_INTERPOLATE_FRAMES 900\n\nnamespace sibr {\n\n\tOrbit::Orbit(void) : _hasBeenInitialized(false), _orbitPointClicked(false) {\n\t\tUIShortcuts::global().add(\"[Orbit cam] alt+click\", \"Select new orbit center.\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 4\", \"move left\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 6\", \"move right\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 8\", \"move down\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 2\", \"move up\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 7\", \"rotate left \");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 9\", \"rotate right \");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 1\", \"get closer\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 3\", \"get further\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 5\", \"flip up vector (look upside down)\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] alt+1-9\", \"automatic move\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] 0\", \"stop automatic move, restore previous cam\");\n\t\tUIShortcuts::global().add(\"[Orbit cam] .\", \"stop automatic move, keep current cam\");\n\t}\n\n\tvoid Orbit::update(const sibr::Input & input, const std::shared_ptr<sibr::Raycaster> raycaster) {\n\t\n\t\tif (!_hasBeenInitialized) { return; }\n\n\t\tif (raycaster != nullptr && input.mouseButton().isReleased(sibr::Mouse::Left)\n\t\t\t&& input.key().isActivated(sibr::Key::LeftAlt)) {\n\t\t\tupdateOrbitParameters(input, raycaster);\n\t\t}\n\n\t\tconst float sensibility = 64.0f;\n\n\t\tif (input.key().isActivated(sibr::Key::LeftAlt)) {\n\t\t\t//orbit.factor = 0;\n\t\t\tif (input.key().isReleased(sibr::Key::KPNum4) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num4) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::F)  // for laptops\n\t\t\t\t) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_X;\n\t\t\t\t_orbit.direction = OrbitParameters::ACW;\n\t\t\t}\n\t\t\telse if (input.key().isReleased(sibr::Key::KPNum6) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num6)) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_X;\n\t\t\t\t_orbit.direction = OrbitParameters::CW;\n\t\t\t}\n\t\t\telse if (input.key().isReleased(sibr::Key::KPNum2) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num2)) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_Y;\n\t\t\t\t_orbit.direction = OrbitParameters::ACW;\n\t\t\t}\n\t\t\telse if (input.key().isReleased(sibr::Key::KPNum8) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num8)) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_Y;\n\t\t\t\t_orbit.direction = OrbitParameters::CW;\n\t\t\t}\n\t\t\telse if (input.key().isReleased(sibr::Key::KPNum7) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num7)) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_Z;\n\t\t\t\t_orbit.direction = OrbitParameters::ACW;\n\t\t\t}\n\t\t\telse if (input.key().isReleased(sibr::Key::KPNum9) ||\n\t\t\t\tinput.key().isReleased(sibr::Key::Num9)) {\n\t\t\t\t_orbit.status = OrbitParameters::FORWARD_Z;\n\t\t\t\t_orbit.direction = OrbitParameters::CW;\n\t\t\t}\n\t\t}\n\t\telse if ((input.key().isReleased(sibr::Key::KPNum0) || input.key().isReleased(sibr::Key::Num0))\n\t\t\t&& _orbit.status != OrbitParameters::STATIC) {\n\t\t\t_orbit.status = OrbitParameters::STATIC;\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::KPDecimal)\n\t\t\t&& _orbit.status != OrbitParameters::STATIC) {\n\t\t\t_orbit.keepCamera = true;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum4) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num4)) {\n\t\t\t_orbit.theta = -(float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum6) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num6)) {\n\t\t\t_orbit.theta = (float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum2) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num2)) {\n\t\t\t_orbit.phi = -(float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum8) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num8)) {\n\t\t\t_orbit.phi = (float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum7) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num7)) {\n\t\t\t_orbit.roll = -(float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum9) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num9)) {\n\t\t\t_orbit.roll = (float)M_2_PI / sensibility;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum1) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num1)) {\n\t\t\t_orbit.radius *= 0.98f;\n\t\t}\n\t\telse if (input.key().isActivated(sibr::Key::KPNum3) ||\n\t\t\tinput.key().isActivated(sibr::Key::Num3)) {\n\t\t\t_orbit.radius *= 1.02f;\n\t\t}\n\t\telse if (input.key().isReleased(sibr::Key::KPNum5) ||\n\t\t\tinput.key().isReleased(sibr::Key::Num5)) {\n\t\t\tif (_orbit.status == OrbitParameters::STATIC) {\n\t\t\t\t_orbit.flip();\n\t\t\t\tstd::cout << \"\\t orbit flip ! \" << std::endl;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (_orbit.direction == OrbitParameters::CW) {\n\t\t\t\t\t_orbit.direction = OrbitParameters::ACW;\n\t\t\t\t\tstd::cout << \"\\t orbit anti clockwise  \" << std::endl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_orbit.direction = OrbitParameters::CW;\n\t\t\t\t\tstd::cout << \"\\t orbit clockwise  \" << std::endl;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinterpolateOrbit();\n\t}\n\n\tvoid Orbit::interpolateOrbit() {\n\t\tusing namespace Eigen;\n\n\t\tfloat k = (_orbit.factor) / (float)(SIBR_ORBIT_INTERPOLATE_FRAMES);\n\t\tbool keepCam = _orbit.keepCamera;\n\n\t\tfloat theta = (_orbit.status == OrbitParameters::FORWARD_X ? (float)(SIBR_2PI  * k) : _orbit.theta);\n\t\tfloat phi = (_orbit.status == OrbitParameters::FORWARD_Y ? (float)(SIBR_2PI  * k) : _orbit.phi);\n\t\tfloat roll = (_orbit.status == OrbitParameters::FORWARD_Z ? (float)(SIBR_2PI  * k) : _orbit.roll);\n\n\t\tsibr::Vector3f dir = -(_orbit.zAxis);\n\t\tsibr::Quaternionf qRoll(AngleAxisf(roll, _orbit.zAxis));\n\t\tsibr::Quaternionf qTheta(AngleAxisf(theta, _orbit.yAxis));\n\t\tsibr::Quaternionf qPhi(AngleAxisf(phi, _orbit.xAxis));\n\n\t\tsibr::Vector3f center = _orbit.center;\n\t\tsibr::Vector3f Eye = center + _orbit.radius*((qTheta*qPhi)*(dir));\n\t\tsibr::Vector3f up(qRoll*_orbit.yAxis);\n\n\t\tsibr::Camera n(_orbit.initialCamera);\n\t\tn.setLookAt(Eye, center, up);\n\t\tn.aspect(_orbit.initialCamera.aspect());\n\t\n\n\t\tif (_orbit.status == OrbitParameters::STATIC || keepCam) {\n\t\t\tsibr::Quaternionf qTot = qTheta*qPhi*qRoll;\n\t\t\t_orbit.xAxis = qTot*_orbit.xAxis;\n\t\t\t_orbit.yAxis = qTot*_orbit.yAxis;\n\t\t\t_orbit.zAxis = qTot*_orbit.zAxis;\n\n\t\t\t_orbit.theta = 0;\n\t\t\t_orbit.phi = 0;\n\t\t\t_orbit.roll = 0;\n\t\t}\n\t\telse {\n\t\t\t_orbit.factor += _orbit.direction;\n\t\t}\n\n\t\tif (keepCam) {\n\t\t\t_orbit.status = OrbitParameters::STATIC;\n\t\t\t_orbit.keepCamera = false;\n\t\t}\n\n\t\t_currentCamera = sibr::InputCamera(n, _currentCamera.w(), _currentCamera.h());\n\t}\n\n\tvoid Orbit::updateOrbitParameters(const sibr::Input& input, std::shared_ptr<sibr::Raycaster> raycaster)\n\t{\n\t\n\t\t// Clicked pixel (might need to check against viewport ?)\n\t\tconst float px = (float)input.mousePosition().x();\n\t\tconst float py = (float)input.mousePosition().y();\n\n\t\tsibr::Vector3f dx;\n\t\tsibr::Vector3f dy;\n\t\tsibr::Vector3f upLeftOffset;\n\n\t\tsibr::CameraRaycaster::computePixelDerivatives(_currentCamera, dx, dy, upLeftOffset);\n\t\tconst sibr::Vector3f worldPos = px*dx + py*dy + upLeftOffset;\n\t\t\n\t\t// Cast a ray.\n\t\tif (raycaster != nullptr) {\n\t\t\tsibr::Vector3f dir =  worldPos - _currentCamera.position();\n\t\t\t//sibr::Vector3f dir = sibr::CameraRaycaster::computeRayDir(_currentCamera, input.mousePosition().cast<float>()).normalized();\n\t\t\tsibr::RayHit hit = raycaster->intersect(sibr::Ray(_currentCamera.position(), dir));\n\t\n\t\t\t// If hit at the proxy surface, compute the corresponding worls position, save it.\n\t\t\tif (hit.hitSomething()) {\n\t\t\t\t_orbit.center = _currentCamera.position() + hit.dist()*dir.normalized();\n\n\t\t\t\t// \\todo TODO: SR reimplement the fitting of planes by either passing cameras all the way down, or something else.\n\t\t\t\t//_orbit.planePointCams = computeFittingPlaneCameras(_orbit.center);\n\t\t\t\t_orbit.yAxis = _currentCamera.up(); // _orbit.planePointCams.xyz();\n\n\t\t\t\t//cheap trick to solve the ambiguity of the up direction\n\t\t\t\tif (_orbit.yAxis.dot(_currentCamera.up()) < 0) {\n\t\t\t\t\t_orbit.yAxis = -_orbit.yAxis;\n\t\t\t\t}\n\n\t\t\t\t_orbit.zAxis = dir.normalized();\n\t\t\t\t_orbit.xAxis = _orbit.yAxis.cross(_orbit.zAxis);\n\t\t\t\t_orbit.radius = (_orbit.initialCamera.position() - _orbit.center).norm();\n\t\t\t\t_orbit.initialCamera = _currentCamera;\n\n\t\t\t\t_orbitPointClicked = true;\n\t\t\t}\n\n\t\t}\n\t\t\n\t}\n\n\tvoid Orbit::update(const sibr::Input & input, const float deltaTime, const Viewport & viewport)\n\t{\n\t\tupdate(input);\n\t}\n\n\tconst sibr::InputCamera & Orbit::getCamera( void ) const\n\t{\n\t\tif( !_hasBeenInitialized ){\n\t\t\tSIBR_ERR << \" Orbit : camera not initialized before use\" << std::endl\n\t\t\t\t<< \"\\t you should use either fromMesh(), fromCamera() or load() \" << std::endl;\n\t\t}\n\t\treturn _currentCamera;\n\n\t}\n\n\tvoid Orbit::fromCamera( const sibr::InputCamera & cam,  const std::shared_ptr<sibr::Raycaster> raycaster )\n\t{\n\t\t_orbit.initialCamera = cam;\n\t\t_currentCamera = cam;\n\t\t_hasBeenInitialized = true;\n\n\t\t// If no point has already been selected by the user, we simply pick it automatically by intersecting cam dir and the mesh.\n\t\tif (!_orbitPointClicked) {\n\t\t\t// We need to transfer the camera parameters to the orbit.\n\t\t\tupdateOrbitParametersCentered(raycaster);\n\t\t}\n\t}\n\n\tvoid\tOrbit::updateOrbitParametersCentered(const std::shared_ptr<sibr::Raycaster> raycaster)\n\t{\n\t\tif (raycaster != nullptr) {\n\t\t\tsibr::RayHit hit = raycaster->intersect(sibr::Ray(_currentCamera.position(), _currentCamera.dir()));\n\t\t\t// If hit at the proxy surface, compute the corresponding world position, save it.\n\t\t\tif (hit.hitSomething()) {\n\t\t\t\tsibr::Vector3f intersection(_currentCamera.position() + hit.dist()* _currentCamera.dir().normalized());\n\t\t\t\t_orbit.center = intersection;\n\t\t\t\t_orbit.yAxis = _currentCamera.up();\n\t\t\t\t_orbit.zAxis = _currentCamera.dir();\n\t\t\t\t_orbit.xAxis = _currentCamera.right();\n\t\t\t\t_orbit.radius = (_currentCamera.position() - _orbit.center).norm();\n\t\t\t\t_orbit.initialCamera = _currentCamera;\n\t\t\t\t//orbitPointClicked -->; don't set it, the center is picked automatically.\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\tsibr::Vector4f Orbit::computeFittingPlaneCameras(sibr::Vector3f & clickedPoint, const std::vector<InputCamera::Ptr> & cams)\n\t{\n\t\tusing namespace Eigen;\n\n\t\tstd::vector<sibr::Vector3f> positions(cams.size());\n\n\t\tfor (int i = 0; i<(int)cams.size(); ++i) {\n\t\t\tpositions.at(i) = cams.at(i)->position();\n\t\t}\n\t\tpositions.push_back(clickedPoint);\n\n\t\tstd::vector<sibr::Vector3f> colors(positions.size(), sibr::Vector3f(1, 0, 0));\n\n\t\tMatrixXf data(3, positions.size());\n\t\tint posId = 0;\n\t\tfor (auto & pos : positions) {\n\t\t\tdata(0, posId) = pos.x();\n\t\t\tdata(1, posId) = pos.y();\n\t\t\tdata(2, posId) = pos.z();\n\t\t\t++posId;\n\t\t}\n\n\t\tsibr::Vector3f center = data.rowwise().mean();\n\t\tEigen::MatrixXf dataCentered = data.colwise() - center;\n\n\t\tJacobiSVD<MatrixXf> svd(dataCentered, ComputeFullU | ComputeThinV);\n\n\t\t//the normal to the fitting plane is the eigenvector associated to the smallest eigenvalue (i.e. the direction in which the variance of all points is the smallest)\n\t\tsibr::Vector3f  normal = svd.matrixU().col(2);\n\t\tnormal.normalize();\n\t\tsibr::Vector3f n(normal);\n\n\t\t//the fitting plane contains the mean point\n\t\tfloat d = -center.dot(normal);\n\n\t\t\n\t\tstd::cout << \" \\t  plane ( clicked point + input cams ) : \" << n.x() << \"*x + \" << n.y() << \"*y + \" << n.z() << \"*z + \" << d << std::endl;\n\n\t\treturn sibr::Vector4f(n.x(), n.y(), n.z(), d);\n\t}\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/Orbit.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include <memory>\n#include <fstream>\n\n#include \"Config.hpp\"\n#include \"core/graphics/Shader.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n#include \"ICameraHandler.hpp\"\n\n\nnamespace sibr {\n\n\tclass Viewport;\n\tclass Mesh;\n\tclass Input;\n\tclass Raycaster;\n\n\t/**\n\t * Interactive camera that allow the user to roate around an object using the keypad.\n\t * Commands:\n\n\t\tto enable/disable the orbit (note that using at least once ( atl + click ) to retrieve a 3D point on the proxy is mandatory before enabling the orbit) :\n\t\tb\n\t\tin static mode (default mode) :\n\t\t5 to flip the orbit (might be the first thing to do if all commands seem broken/reversed, it is needed because there is an ambiguity when using the normal of the plan containing the input cameras and the clicked point)\n\t\t4 or 6 to rotate towards current camera x-axis\n\t\t2 or 8 to rotate towards current camera y-axis\n\t\t7 or 9 to rotate towards current camera z-axis\n\t\t1 or 3 to zoom in or out\n\t\tin dynamic mode ( rotates without interruption around an axis )  :\n\t\talt + ( 4 or 6 ) to rotate towards current camera x-axis\n\t\talt + ( 2 or 8 ) to rotate towards current camera y-axis\n\t\talt + ( 7 or 9 ) to rotate towards current camera z-axis\n\t\t5 to inverse the direction (same axis)\n\t\t0 to switch back to static mode with initial camera\n\t\t. to switch back to static mode with current camera\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT Orbit : public ICameraHandler\n\t{\n\t\n\tpublic:\n\n\t\t/**\n\t\t Create an orbit centered at (0,0,0) with basic initial parameters.\n\t\t It is recommended to call fromCamera after that to setup the orbit with a valid set of parameters.\n\t\t*/\n\t\tOrbit( void );\n\n\t\t/**\n\t\t Setup the orbit so that its camera has the same pose as the argument camera. A raycaster is required to find the center of the orbit.\n\t\t\\param cam the reference camera\n\t\t\\param raycaster raycaster to use for centering intersection tests.\n\t\t*/\n\t\tvoid fromCamera(const sibr::InputCamera & cam, const std::shared_ptr<sibr::Raycaster> raycaster);\n\n\t\t/**\n\t\t\tUpdate the orbit camera based on the user input (keyboard). Can require a raycaster if the user is alt-clicking to select a new orbit center.\n\t\t\\param input user input\n\t\t\\param raycaster optional raycaster\n\t\t*/\n\t\tvoid update( const sibr::Input & input, const std::shared_ptr<sibr::Raycaster> raycaster = std::shared_ptr<sibr::Raycaster>());\n\n\t\t/** Update the camera handler state.\n\t\t\\param input user input\n\t\t\\param deltaTime time elapsed since last udpate\n\t\t\\param viewport view viewport\n\t\t*/\n\t\tvirtual void update(const sibr::Input & input, const float deltaTime, const Viewport & viewport) override;\n\t\t\n\t\t/** \\return the current camera. */\n\t\tvirtual const sibr::InputCamera & getCamera( void ) const override;\n\n\tprivate:\n\n\t\t/** Internal orbit parameters. */\n\t\tstruct OrbitParameters\n\t\t{\n\t\t\t/** Motion direction: Clockwise, AntiClockWis e*/\n\t\t\tenum OrbitDirection { CW = 1, ACW = -1 };\n\t\t\t/** Orbit current motion status. */\n\t\t\tenum OrbitStatus { STATIC, FORWARD_X, FORWARD_Y, FORWARD_Z };\n\n\t\t\t/** Default constructor. */\n\t\t\tOrbitParameters(void) : factor(0), status(STATIC),\n\t\t\t\tcenter(sibr::Vector3f(0.0f, 0.0f, 0.0f)), radius(1.0f), theta(0), phi(0), roll(0), direction(CW), keepCamera(false)\n\t\t\t{}\n\n\t\t\t/** Flip motion. */\n\t\t\tvoid flip(void) {\n\t\t\t\tyAxis = -yAxis;\n\t\t\t\txAxis = yAxis.cross(zAxis);\n\t\t\t}\n\n\t\t\tbool\t\t\t\t\t\t\t\tkeepCamera; ///< ?\n\t\t\tint\t\t\t\t\t\t\t\t\tfactor; ///< Interpolation ID.\n\n\t\t\tOrbitStatus\t\t\t\t\t\t\tstatus; ///< Current status.\n\t\t\tOrbitDirection\t\t\t\t\t\tdirection; ///< Current motion direction.\n\n\t\t\tsibr::Vector3f\t\t\t\t\t\tcenter; ///< Orbit center.\n\t\t\tsibr::Vector3f\t\t\t\t\t\txAxis; ///< Orbit X axis.\n\t\t\tsibr::Vector3f\t\t\t\t\t\tyAxis; ///< Orbit Y axis.\n\t\t\tsibr::Vector3f\t\t\t\t\t\tzAxis; ///< Orbit Z axis.\n\n\t\t\tfloat\t\t\t\t\t\t\t\tradius; ///< Orbit radius.\n\t\t\tfloat\t\t\t\t\t\t\t\ttheta, phi, roll; ///< Orbit angles.\n\n\t\t\tsibr::Camera\t\t\t\t\t\tinitialCamera; ///< Starting camera.\n\t\t\tsibr::Vector4f\t\t\t\t\t\tplanePointCams; ///< Fitted plane points.\n\n\t\t};\n\n\t\t/**\n\t\t*\tCompute new camera pose from current orbit parameters.\n\t\t*/\n\t\tvoid interpolateOrbit();\n\n\t\t/**\n\t\t*\tUpdates the orbit's center and camera pose, by casting a ray from the clicked point (in Input) to the mesh.\n\t\t*\t\\param input user input\n\t\t*\t\\param raycaster scene raycaster\n\t\t*/\n\t\tvoid updateOrbitParameters(const sibr::Input& input, const std::shared_ptr<sibr::Raycaster> raycaster);\n\n\t\t/**\n\t\t*\tUpdates the orbit's center and camera pose, by casting a ray from the center of the screen to the mesh.\n\t\t*\t\\param raycaster scene raycaster\n\t\t*/\n\t\tvoid updateOrbitParametersCentered(const std::shared_ptr<sibr::Raycaster> raycaster);\n\n\t\t/** \n\t\t*\tCompute the best fitting plane of the clicked points plus the input cams positions.\n\t\t*\t\\param clickedPoint point clicked by the user\n\t\t*\t\\param cams reference cameras\n\t\t*/\n\t\tstatic sibr::Vector4f computeFittingPlaneCameras(sibr::Vector3f& clickedPoint, const std::vector<InputCamera::Ptr>& cams);\n\n\t\tbool _hasBeenInitialized; ///< Has the orbit been initialized.\n\t\tbool _orbitPointClicked; ///< Has the user clicked on a point in the scene.\n\t\tsibr::InputCamera _currentCamera; ///< Current camera.\n\t\tOrbitParameters _orbit; ///< Parameters.\n\t\n\t};\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/RenderingMode.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#include \"core/graphics/RenderUtility.hpp\"\n#include \"core/view/RenderingMode.hpp\"\n#include \"core/assets/Resources.hpp\"\n#include \"core/graphics/Image.hpp\"\n\nnamespace sibr\n{\n\tMonoRdrMode::MonoRdrMode( void )\n\t{\n\t\t_clear = true;\n\t\t_quadShader.init(\"Texture\",\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"texture.vp\")),\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"texture.fp\")));\n\t}\n\n\tvoid\tMonoRdrMode::render( ViewBase& view, const sibr::Camera& eye, const sibr::Viewport& viewport, IRenderTarget* optDest )\n\t{\n\t\t/// TODO: clean everything. Resolution handling.\n\n\t\t//int w = (int)viewport.finalWidth();\n\t\t//int h = (int)viewport.finalHeight();\n\n\t\t//if (!_destRT || _destRT->w() != w || _destRT->h() != h)\n\t\t//\t_destRT.reset( new RenderTarget(w, h) );\n\t\t//\n\t\t//view.onRenderIBR(*_destRT, eye);\n\t\t//_destRT->unbind();\n\n\t\t//_quadShader.begin();\n\t\t////if(_ibr->isPortraitAcquisition() && !_ibr->args().fullscreen)\n\t\t////\tglViewport(0,0, _h, _w);\n\t\t////else\n\t\t////\tglViewport(0,0, _w * _ibr->args().rt_factor, (_ibr->args().fullscreen ? screenHeight : _h) * _ibr->args().rt_factor);\n\t\t//viewport.use();\n\t\t////glViewport(0,0, size().x(), size().y());\n\n\t\t//glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _destRT->texture());\n\t\t//RenderUtility::renderScreenQuad(false /*_ibr->isPortraitAcquisition()*/);\n\t\t//_quadShader.end();\n\n\t\tint w = (int)viewport.finalWidth();\n\t\tint h = (int)viewport.finalHeight();\n\n\t\tif (!_destRT)// || _destRT->w() != w || _destRT->h() != h)\n\t\t\t_destRT.reset( new RenderTarget(w, h, SIBR_GPU_LINEAR_SAMPLING) );\n\t\tglViewport(0, 0, w, h);\n\t\t_destRT->bind();\n\n\t\tif( _clear ) {\n\t\t\tviewport.clear();\n\t\t\t// blend with previous\n\t\t\tview.preRender(*_destRT);\n\t\t}\n\t\telse {\n\t\t\t// can come from somewhere else\n\t\t\tview.preRender(*_prevR);\n\t\t}\n\n\t\tview.onRenderIBR(*_destRT, eye);\n\t\t_destRT->unbind();\n\n\t\t//show(*_destRT, \"before\");\n\n\t\t//glEnable (GL_BLEND);\n\t\t//glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\n\t\tglDisable (GL_BLEND);\n\t\tglDisable(GL_DEPTH_TEST);\n\t\t//glDepthMask(GL_FALSE);\n\n\t\t//glEnable (GL_BLEND);\n\t\t//glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t_quadShader.begin();\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _destRT->texture());\n\n\t\tif (optDest) // Optionally you can render to another RenderTarget\n\t\t{\n\t\t\tglViewport(0, 0, optDest->w(), optDest->h());\n\t\t\toptDest->bind();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tviewport.bind();\n\t\t}\n\n\t\tRenderUtility::renderScreenQuad(/*_ibr->isPortraitAcquisition()*/);\n\n\t\tif (optDest) // Optionally you can render to another RenderTarget\n\t\t\toptDest->unbind();\n\n\t\t_quadShader.end();\n\n#if 0\nstd::cerr <<\"End of render pass 1\" << std::endl;\n\t\tshow(*(_destRT));\n#endif\n\n\t}\n\n\tStereoAnaglyphRdrMode::StereoAnaglyphRdrMode( void )\n\t{\n\t\t_clear = true;\n\t\t_stereoShader.init(\"StereoAnaglyph\",\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"anaglyph.vp\")),\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"anaglyph.fp\")));\n\t\t_leftRT.reset(), _rightRT.reset();\n/* default values good for Street-10 scene */\n\n\t\t_focalDist = 100;\n\t\t_eyeDist = (float)0.065; /* meters */\n\t}\n\n\tvoid\tStereoAnaglyphRdrMode::render( ViewBase& view, const sibr::Camera& eye, const sibr::Viewport& viewport, IRenderTarget* optDest)\n\t{\n\t\tint w = (int)viewport.finalWidth();\n\t\tint h = (int)viewport.finalHeight();\n\n\t\tif (!_leftRT || _leftRT->w() != w || _leftRT->h() != h)\n\t\t\t_leftRT.reset( new RenderTarget(w, h) );\n\t\tif (!_rightRT || _rightRT->w() != w || _rightRT->h() != h)\n\t\t\t_rightRT.reset( new RenderTarget(w, h) );\n\n\t\tInputCamera leye(eye, w, h);\n\t\tInputCamera reye(eye, w, h);\n\t\tleye.size(w, h); reye.size(w, h);\n\t\tleye.position(eye.position()-_eyeDist*eye.right());\n\n\t\t// setup left eye\n\t\tleye.setStereoCam(true, _focalDist, _eyeDist);\n\t\t_leftRT->bind();\n\t\tif( _clear )  {\n\t\t\tviewport.clear();\n\t\t\tview.preRender(*_leftRT);\n\t\t}\n\t\telse {\n\t\t\t// can come from somewhere else\n\t\t\tview.preRender(*_prevL);\n\t\t}\n\n\t\tview.onRenderIBR(*_leftRT, leye);\n\t\t_leftRT->unbind();\n\n\t\t// setup right eye\n\t\treye.position(eye.position()+_eyeDist*eye.right());\n\t\treye.setStereoCam(false, _focalDist, _eyeDist);\n\n\t\t// render right eye\n\t\t_rightRT->bind();\n\t\tif( _clear ) {\n\t\t\tviewport.clear();\n\t\t\tview.preRender(*_rightRT);\n\t\t}\n\t\telse {\n\t\t\t// can come from somewhere else\n\t\t\tview.preRender(*_prevR);\n\t\t}\n\t\tview.onRenderIBR(*_rightRT, reye);\n\t\t_rightRT->unbind();\n\n\t\tglDisable (GL_BLEND);\n\t\tglDisable(GL_DEPTH_TEST);\n\n\t\t_stereoShader.begin();\n\t\tglActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _leftRT->texture());\n\t\tglActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, _rightRT->texture());\n\n\t\tif (optDest) // Optionally you can render to another RenderTarget\n\t\t{\n\t\t\tglViewport(0, 0, optDest->w(), optDest->h());\n\t\t\toptDest->bind();\n\t\t}\n\n\t\tRenderUtility::renderScreenQuad();\n\n\t\tif (optDest) // Optionally you can render to another RenderTarget\n\t\t\toptDest->unbind();\n\n\t\t_stereoShader.end();\n\n\t}\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/RenderingMode.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/graphics/Camera.hpp\"\n# include \"core/graphics/Viewport.hpp\"\n# include \"core/graphics/Texture.hpp\"\n# include \"core/view/Config.hpp\"\n# include \"core/view/ViewBase.hpp\"\n# include \"core/graphics/Image.hpp\"\n# include \"core/graphics/Shader.hpp\"\n# include \"core/assets/InputCamera.hpp\"\n\nnamespace sibr\n{\n\t/**\n\t*\tRendering mode manages the rendertarget and camera fed to an IBR view. Can be used to render a view using a stereoscopic mode (anaglyph or VR).\n\t*   \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT IRenderingMode\n\t{\n\t\tSIBR_CLASS_PTR(IRenderingMode);\n\n\tpublic:\n\t\ttypedef RenderTargetRGB RenderTarget;\n\tpublic:\n\t\t/// Destructor.\n\t\tvirtual ~IRenderingMode( void ) { }\n\n\t\t/** Perform rendering of a view.\n\t\t *\\param view the view to render\n\t\t *\\param eye the current camera\n\t\t *\\param viewport the current viewport\n\t\t *\\param optDest an optional destination RT \n\t\t */\n\t\tvirtual void\trender( \n\t\t\tViewBase& view, const sibr::Camera& eye, const sibr::Viewport& viewport, \n\t\t\tIRenderTarget* optDest = nullptr) = 0;\n\n\t\t/** Get the current rendered image as a CPU image\n\t\t *\\param current_img will contain the content of the RT */\n\t\tvirtual void destRT2img( sibr::ImageRGB& current_img ) = 0;\n\n\tprotected:\n\t\tstd::unique_ptr<RenderTargetRGB>\t_prevL, _prevR; ///< prev RT to link renderers across different views in multipass\n\n\tpublic:\n\t\tbool _clear; ///< Should the dst RT be cleared before rendering.\n\n\t\t/** Set common previous step RT.\n\t\t *\\param p the RT\n\t\t */\n\t\tvoid\tsetPrev(const std::unique_ptr<RenderTargetRGB>& p) { std::cerr<<\"ERROR \" << std::endl; }\n\t\t/** Set left and right previous step RTs.\n\t\t *\\param pl the left eye RT\n\t\t *\\param pr the right eye RT\n\t\t */\n\t\tvoid\tsetPrevLR(const std::unique_ptr<RenderTargetRGB>& pl, const std::unique_ptr<RenderTargetRGB>& pr) { std::cerr<<\"ERROR \" << std::endl;}\n\n\t\t/** \\return the left eye (or common) RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\tlRT() = 0;\n\t\t/** \\return the right eye (or common) RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\trRT() = 0;\n\n\t};\n\n\t/** Default rendering mode: monoview, passthrough.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MonoRdrMode : public IRenderingMode\n\t{\n\tpublic:\n\n\t\t/// Constructor.\n\t\tMonoRdrMode( void );\n\n\t\t/** Perform rendering of a view.\n\t\t *\\param view the view to render\n\t\t *\\param eye the current camera\n\t\t *\\param viewport the current viewport\n\t\t *\\param optDest an optional destination RT\n\t\t */\n\t\tvoid\trender( ViewBase& view, const sibr::Camera& eye, const sibr::Viewport& viewport, IRenderTarget* optDest = nullptr);\n\n\t\t/** Get the current rendered image as a CPU image\n\t\t *\\param current_img will contain the content of the RT */\n\t\tvoid destRT2img( sibr::ImageRGB& current_img )\n\t\t{\n\t\t\t_destRT->readBack(current_img);\n\t\t\treturn;\n\t\t}\n\n\t\t/** \\return the common RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\tlRT() { return _destRT; }\n\t\t/** \\return the common RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\trRT() { return _destRT; }\n\n\tprivate:\n\t\tsibr::GLShader\t\t\t\t\t\t\t_quadShader; ///< Passthrough shader.\n\t\tstd::unique_ptr<RenderTarget>\t\t_destRT; ///< Common destination RT.\n\t};\n\n\t/**\n\t *Stereo rendering mode: two slightly shifted views are rendered and composited as anaglyphs.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT StereoAnaglyphRdrMode : public IRenderingMode\n\t{\n\tpublic:\n\n\t\t/// Constructor.\n\t\tStereoAnaglyphRdrMode( void );\n\n\t\t/** Perform rendering of a view.\n\t\t *\\param view the view to render\n\t\t *\\param eye the current camera\n\t\t *\\param viewport the current viewport\n\t\t *\\param optDest an optional destination RT\n\t\t */\n\t\tvoid\trender( ViewBase& view, const sibr::Camera& eye, const sibr::Viewport& viewport, IRenderTarget* optDest = nullptr);\n\n\t\t/** Set the focal distance.\n\t\t\\param focal focal distance\n\t\t*/\n\t\tvoid\tsetFocalDist(float focal) { _focalDist = focal; }\n\n\t\t/** Set the distance between the two eyes.\n\t\t\\param iod intra-ocular distance\n\t\t*/\n\t\tvoid\tsetEyeDist(float iod) { _eyeDist = iod; }\n\n\t\t/** \\return the focal distance */\n\t\tfloat\tfocalDist()\t{ return _focalDist; }\n\t\t/** \\return the intra-ocular distance */\n\t\tfloat\teyeDist()\t{ return _eyeDist; }\n\n\t\t/** Get the current rendered image as a CPU image (empty).\n\t\t *\\param current_img will contain the content of the RT */\n\t\tvoid destRT2img( sibr::ImageRGB& current_img ){};\n\n\t\t/** \\return the left eye RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\tlRT() { return _leftRT; }\n\t\t/** \\return the right eye RT. */\n\t\tvirtual const std::unique_ptr<RenderTargetRGB>&\trRT() { return _rightRT; }\n\n\tprivate:\n\t\tsibr::GLShader\t\t_stereoShader; ///< Anaglyph shader.\n\t\tRenderTarget::UPtr\t_leftRT, _rightRT; ///< Each eye RT.\n\t\tfloat\t\t\t\t_focalDist, _eyeDist; ///< Focal and inter-eyes distances.\n\t};\n\n\t///// DEFINITIONS /////\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/SceneDebugView.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n# include \"core/view/SceneDebugView.hpp\"\n# include \"core/graphics/RenderUtility.hpp\"\n# include \"core/graphics/Input.hpp\"\n# include \"core/graphics/GUI.hpp\"\n#include <core/raycaster/CameraRaycaster.hpp>\n\n#include <sstream>\n\nnamespace sibr\n{\n\n\tMesh::Ptr generateCamFrustum(const InputCamera & cam, float near, float far)\n\t{\n\t\tstatic const Mesh::Triangles tris = {\n\t\t\t{0,0,1},{1,1,2},{2,2,3},{3,3,0},\n\t\t\t{4,4,5},{5,5,6},{6,6,7},{7,7,4},\n\t\t\t{0,0,4},{1,1,5},{2,2,6},{3,3,7},\n\t\t};\n\n\t\tstd::vector<Vector3f> dirs;\n\t\tfor (const auto & c : cam.getImageCorners()) {\n\t\t\tdirs.push_back(CameraRaycaster::computeRayDir(cam, c.cast<float>() + 0.5f*Vector2f(1, 1)));\n\t\t}\n\t\tfloat znear = (near >= 0 ? near : cam.znear());\n\t\tfloat zfar = (far >= 0 ? far : cam.zfar());\n\t\tMesh::Vertices vertices;\n\t\tfor (int k = 0; k < 2; k++) {\n\t\t\tfloat dist = (k == 0 ? znear : zfar);\n\t\t\tfor (const auto & d : dirs) {\n\t\t\t\tvertices.push_back(cam.position() + dist * d);\n\t\t\t}\n\t\t}\n\n\t\tauto out = std::make_shared<Mesh>();\n\t\tout->vertices(vertices);\n\t\tout->triangles(tris);\n\t\treturn out;\n\t}\n\n\tMesh::Ptr generateCamFrustumColored(const InputCamera & cam, const Vector3f & col, float znear, float zfar)\n\t{\n\t\tauto out = generateCamFrustum(cam, znear, zfar);\n\t\tMesh::Colors cols(out->vertices().size(), col);\n\t\tout->colors(cols);\n\t\treturn out;\n\t}\n\n\tMesh::Ptr generateCamQuadWithUvs(const InputCamera & cam, float dist)\n\t{\n\t\tstatic const Mesh::Triangles quadTriangles = {\n\t\t\t{ 0,1,2 },{ 0,2,3 }\n\t\t};\n\t\tstatic const Mesh::UVs quadUVs = {\n\t\t\t{ 0,1 } ,{ 1,1 } ,{ 1,0 } ,{ 0,0 }\n\t\t};\n\n\t\tstd::vector<Vector3f> dirs;\n\t\tfor (const auto & c : cam.getImageCorners()) {\n\t\t\tdirs.push_back(CameraRaycaster::computeRayDir(cam, c.cast<float>() + 0.5f*Vector2f(1, 1)));\n\t\t}\n\t\tstd::vector<Vector3f> vertices;\n\t\tfor (const auto & d : dirs) {\n\t\t\tvertices.push_back(cam.position() + dist * d);\n\t\t}\n\n\t\tauto out = std::make_shared<Mesh>();\n\t\tout->vertices(vertices);\n\t\tout->triangles(quadTriangles);\n\t\tout->texCoords(quadUVs);\n\t\treturn out;\n\t}\n\n\n\tLabelsManager::CameraInfos::CameraInfos(const InputCamera& cam, uint id, bool highlight)\n\t\t: cam(cam), id(id), highlight(highlight) {\n\t}\n\n\tvoid LabelsManager::setupLabelsManagerShader()\n\t{\n\t\t_labelShader.init(\"text-imgui\",\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"text-imgui.vp\")),\n\t\t\tloadFile(Resources::Instance()->getResourceFilePathName(\"text-imgui.fp\")));\n\t\t_labelShaderPosition.init(_labelShader, \"position\");\n\t\t_labelShaderScale.init(_labelShader, \"scale\");\n\t\t_labelShaderViewport.init(_labelShader, \"viewport\");\n\t}\n\n\tvoid LabelsManager::setupLabelsManagerMeshes(const std::vector<InputCamera::Ptr> & cams)\n\t{\n\t\t_labelMeshes.clear();\n\t\tfor (const auto & cam : cams) {\n\t\t\tunsigned int sepIndex = 0;\n\t\t\t_labelMeshes[cam->id()] = {};\n\t\t\t_labelMeshes[cam->id()].mesh = generateMeshForText(std::to_string(cam->id()), sepIndex);\n\t\t\t_labelMeshes[cam->id()].splitIndex = sepIndex;\n\t\t}\n\t}\n\n\tvoid LabelsManager::renderLabels(const Camera & eye, const Viewport & vp, const std::vector<CameraInfos>& cams_info)\n\t{\n\t\tglEnable(GL_BLEND);\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t_labelShader.begin();\n\t\t// Bind the ImGui font texture.\n\t\tglActiveTexture(GL_TEXTURE0);\n\t\tglBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)(ImGui::GetFont()->ContainerAtlas->TexID));\n\t\t_labelShaderViewport.set(Vector2f(vp.finalWidth(), vp.finalHeight()));\n\n\t\tfor (const auto & camInfos : cams_info) {\n\t\t\tconst auto & inputCam = camInfos.cam;\n\t\t\tif (!inputCam.isActive()) { continue; }\n\t\t\tconst uint uid = camInfos.id;\n\t\t\tif (_labelMeshes.count(uid) == 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Draw the label.\n\t\t\t// TODO: we could try to use depth testing to have the labels overlap properly.\n\t\t\t// As the label is put at the position of the camera, the label will intersect with the frustum mesh, causing artifacts.\n\t\t\t// One way of solving this would be to just shift the label away a bit and enable depth testing (+ GL_LEQUAl for the text).\n\t\t\tconst Vector3f camProjPos = eye.project(inputCam.position());\n\t\t\tif (!eye.frustumTest(inputCam.position(), camProjPos.xy())) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t_labelShaderPosition.set(camProjPos);\n\t\t\tconst auto & label = _labelMeshes[uid];\n\t\t\t// Render the background label.\n\t\t\t_labelShaderScale.set(0.8f*_labelScale);\n\t\t\tlabel.mesh->renderSubMesh(0, label.splitIndex, false, false);\n\t\t\t// Render the text label.\n\t\t\t_labelShaderScale.set(1.0f*_labelScale);\n\t\t\tlabel.mesh->renderSubMesh(label.splitIndex, int(label.mesh->triangles().size()) * 3, false, false);\n\n\t\t}\n\t\t_labelShader.end();\n\t\tglDisable(GL_BLEND);\n\t}\n\n\tvoid ImageCamViewer::initImageCamShaders()\n\t{\n\t\tconst std::string vertex_str = loadFile(Resources::Instance()->getResourceFilePathName(\"uv_mesh.vert\"));\n\n\t\t_shader2D.init(\"cameraImageShader\", vertex_str, loadFile(Resources::Instance()->getResourceFilePathName(\"alpha_uv_tex.frag\")));\n\t\t_mvp2D.init(_shader2D, \"mvp\");\n\t\t_alpha2D.init(_shader2D, \"alpha\");\n\n\t\t_shaderArray.init(\"cameraImageShaderArray\", vertex_str, loadFile(Resources::Instance()->getResourceFilePathName(\"alpha_uv_tex_array.frag\")));\n\t\t_mvpArray.init(_shaderArray, \"mvp\");\n\t\t_alphaArray.init(_shaderArray, \"alpha\");\n\t\t_sliceArray.init(_shaderArray, \"slice\");\n\t}\n\n\tvoid ImageCamViewer::renderImage(const Camera & eye, const InputCamera & cam,\n\t\tconst std::vector<RenderTargetRGBA32F::Ptr> & rts, int cam_id)\n\t{\n\t\tconst auto quad = generateCamQuadWithUvs(cam, _cameraScaling);\n\t\tif (cam_id < rts.size() && rts[cam_id]) {\n\t\t\t_shader2D.begin();\n\t\t\t_mvp2D.set(eye.viewproj());\n\t\t\t_alpha2D.set(_alphaImage);\n\t\t\tglActiveTexture(GL_TEXTURE0);\n\t\t\tglBindTexture(GL_TEXTURE_2D, rts[cam_id]->handle());\n\t\t\tquad->render(true, false, Mesh::FillRenderMode, false, false);\n\t\t\t_shader2D.end();\n\t\t}\n\t}\n\n\tvoid ImageCamViewer::renderImage(const Camera & eye, const InputCamera & cam, uint tex2Darray_handle, int cam_id)\n\t{\n\t\tconst auto quad = generateCamQuadWithUvs(cam, _cameraScaling);\n\t\t_shaderArray.begin();\n\t\t_mvpArray.set(eye.viewproj());\n\t\t_alphaArray.set(_alphaImage);\n\t\t_sliceArray.set(cam_id);\n\t\tglActiveTexture(GL_TEXTURE0);\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, tex2Darray_handle);\n\t\tquad->render(true, false, Mesh::FillRenderMode, false, false);\n\t\t_shaderArray.end();\n\t}\n\n\tSceneDebugView::SceneDebugView(const IIBRScene::Ptr & scene, \n\t\tconst InteractiveCameraHandler::Ptr & camHandler, const BasicDatasetArgs & myArgs)\n\t{\n\n\t\tinitImageCamShaders();\n\t\tsetupLabelsManagerShader();\n\n\t\t_scene = scene;\n\t\t_userCurrentCam = camHandler;\n\n\t\tif (!_scene->cameras()->inputCameras().empty()) {\n\t\t\tcamera_handler.fromTransform(_scene->cameras()->inputCameras()[0]->transform(), true, false);\n\t\t\tcamera_handler.setupInterpolationPath(_scene->cameras()->inputCameras());\n\t\t}\n\n\t\t_showImages = true;\n\n\t\tconst std::string camerasDir = myArgs.dataset_path.get() + \"/cameras\";\n\t\tif (directoryExists(camerasDir)) {\n\t\t\t_topViewPath = camerasDir + \"/topview.txt\";\n\t\t\t\tif (!directoryExists(camerasDir)) {\n\t\t\t\t\tmakeDirectory(camerasDir);\n\t\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t_topViewPath = parentDirectory(myArgs.dataset_path) + \"/topview.txt\";\n\t\t}\n\n\t\tsetup();\n\t}\n\n\tSceneDebugView::SceneDebugView(const IIBRScene::Ptr & scene, const Viewport & viewport,\n\t\tconst InteractiveCameraHandler::Ptr & camHandler, const BasicDatasetArgs & myArgs) : SceneDebugView(scene, camHandler, myArgs) {\n\t\tSIBR_WRG << \"Deprecated SceneDebugView constructor, use the version without viewport passed as argument.\" << std::endl;\n\t}\n\n\tvoid SceneDebugView::onUpdate(Input & input, const float deltaTime, const Viewport & viewport)\n\t{\n\t\tMultiMeshManager::onUpdate(input, viewport);\n\n\t\t//Camera stub size\n\t\tif (input.key().isActivated(Key::LeftControl) && input.mouseScroll() != 0.0) {\n\t\t\t_cameraScaling = std::max(0.001f, _cameraScaling + (float)input.mouseScroll()*0.1f);\n\t\t}\n\t\tif (input.key().isActivated(Key::LeftControl) && input.key().isReleased(Key::P)) {\n\t\t\tMeshData & guizmo = getMeshData(\"guizmo\");\n\t\t\tguizmo.active = !guizmo.active;\n\t\t}\n\n\t\tMeshData & proxy = getMeshData(\"proxy\");\n\t\tif( proxy.meshPtr->triangles().size() == 0 )\n\t\t\t// SfM Points only\n\t\t\tproxy.renderMode = Mesh::RenderMode::PointRenderMode;\n\n\t\tif (input.key().isActivated(Key::LeftControl) && input.key().isReleased(Key::Z)) {\n\t\t\t//MeshData & proxy = getMeshData(\"proxy\");\n\t\t\tif (proxy.renderMode == Mesh::RenderMode::FillRenderMode) {\n\t\t\t\tproxy.renderMode = Mesh::RenderMode::LineRenderMode;\n\t\t\t} else {\n\t\t\t\tproxy.renderMode = Mesh::RenderMode::FillRenderMode;\n\t\t\t}\n\t\t}\n\n\t\tif (input.key().isReleased(Key::T)) {\n\t\t\tsave();\n\t\t}\n\t}\n\n\tvoid SceneDebugView::onUpdate(Input & input, const Viewport & viewport)\n\t{\n\t\tonUpdate(input, 1.0f / 60.0f, viewport);\n\t}\n\n\tvoid SceneDebugView::onUpdate(Input & input)\n\t{\n\t\t// Update camera with a fixed timestep.\n\t\tonUpdate(input, 1.0f / 60.0f);\n\t}\n\n\tvoid SceneDebugView::onRender(Window & win)\n\t{\n\t\t// We need no information about the window, we render wherever we are.\n\t\tonRender(win.viewport());\n\t}\n\n\tvoid SceneDebugView::onRender(const Viewport & viewport)\n\t{\n\t\tglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, \"Scene debug view\");\n\n\t\tviewport.clear(backgroundColor);\n\t\tviewport.bind();\n\n\t\taddMeshAsLines(\"scene cam\", generateCamFrustum(_userCurrentCam->getCamera(), 0.0f, _cameraScaling)).setColor({ 1,0,0 });\n\n\t\tif (_scene) {\n\t\t\tfor (int i = 0; i < (int)_scene->cameras()->inputCameras().size(); ++i) {\n\t\t\t\t_cameras[i].highlight =  _scene->cameras()->isCameraUsedForRendering(_scene->cameras()->inputCameras()[i]->id());\n\t\t\t}\n\t\t}\t\n\n\t\tauto used_cams = std::make_shared<Mesh>(), non_used_cams = std::make_shared<Mesh>();\n\t\tfor (const auto & camInfos : _cameras) {\n\t\t\tif (!camInfos.cam.isActive()) { continue; }\n\t\t\t(camInfos.highlight ? used_cams : non_used_cams)->merge(*generateCamFrustum(camInfos.cam, 0.0f, _cameraScaling));\n\t\t}\n\n\t\taddMeshAsLines(\"used cams\", used_cams).setColor({ 0,1,0 });\n\t\taddMeshAsLines(\"non used cams\", non_used_cams).setColor({ 0,0,1 });\n\n\t\trenderMeshes();\n\n\t\tif (_scene && _showImages) {\n\t\t\tglEnable(GL_BLEND);\n\t\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t\tint cam_id = 0;\n\t\t\tfor (const auto & camInfos : _cameras) {\n\t\t\t\tif (camInfos.cam.isActive()) {\n\t\t\t\t\tconst auto & scene_rts = _scene->renderTargets();\n\t\t\t\t\tif (scene_rts->getInputRGBTextureArrayPtr()) {\n\t\t\t\t\t\trenderImage(camera_handler.getCamera(), camInfos.cam, scene_rts->getInputRGBTextureArrayPtr()->handle(), cam_id);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trenderImage(camera_handler.getCamera(), camInfos.cam, scene_rts->inputImagesRT(), cam_id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t++cam_id;\n\t\t\t}\n\t\t\tglDisable(GL_BLEND);\n\t\t}\n\n\t\tif (_showLabels) {\n\t\t\trenderLabels(camera_handler.getCamera(), viewport, _cameras);\n\t\t}\n\n\t\tcamera_handler.onRender(viewport);\n\t\tglPopDebugGroup();\n\t}\n\n\tvoid SceneDebugView::onGUI()\n\t{\n\t\tif (ImGui::Begin(\"Top view settings\")) {\n\t\t\tgui_options();\n\t\t\tlist_mesh_onGUI();\n\t\t\tgui_cameras();\n\t\t}\n\t\tImGui::End();\n\t\t\n\t}\n\n\tvoid SceneDebugView::save()\n\t{\n\t\t\n\t\tstd::ofstream outfile(_topViewPath, std::ios::out | std::ios::trunc);\n\t\tstd::cerr << \"Saving topview camera to \" << _topViewPath << std::endl;\n\t\t// save camera view proj matrix\n\t\tcamera_handler.getCamera().writeToFile(outfile);\n\t}\n\n\tvoid SceneDebugView::setScene(const IIBRScene::Ptr & scene, bool preserveCamera)\n\t{\n\t\t_scene = scene;\n\t\tconst InputCamera cameraBack = camera_handler.getCamera();\n\t\tsetup();\n\t\tcamera_handler.setup(_scene->cameras()->inputCameras(), camera_handler.getViewport(), camera_handler.getRaycaster());\n\t\tcamera_handler.setupInterpolationPath(_scene->cameras()->inputCameras());\n\t\t// Optionally restore the camera pose.\n\t\tif (preserveCamera) {\n\t\t\tcamera_handler.fromCamera(cameraBack, false);\n\t\t}\n\t}\n\n\tvoid SceneDebugView::updateActiveCams(const std::vector<uint>& cams_id)\n\t{\n\t\tfor (auto & cam : _cameras) {\n\t\t\tcam.highlight = false;\n\t\t}\n\t\tfor (const uint id : cams_id) {\n\t\t\tif (id < _cameras.size()) {\n\t\t\t\t_cameras[id].highlight = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid SceneDebugView::gui_options()\n\t{\n\n\t\tif (ImGui::CollapsingHeader(\"OptionsSceneDebugView##\")) {\n\t\t\tif (ImGui::Button(\"Save topview\")) {\n\t\t\t\tsave();\n\t\t\t}\n\n\t\t\tImGui::PushScaledItemWidth(120);\n\t\t\tImGui::InputFloat(\"Camera scale\", &_cameraScaling, 0.1f, 10.0f);\n\t\t\t_cameraScaling = std::max(0.001f, _cameraScaling);\n\n\t\t\tImGui::Checkbox(\"Draw labels \", &_showLabels);\n\t\t\tif (_showLabels) {\n\t\t\t\tImGui::SameLine();\n\t\t\t\tImGui::InputFloat(\"Label scale\", &_labelScale, 0.2f, 10.0f);\n\t\t\t}\n\n\t\t\tImGui::Separator();\n\t\t\tImGui::Checkbox(\"Draw Input Images \", &_showImages);\n\t\t\tif (_showImages) {\n\t\t\t\tImGui::SameLine();\n\t\t\t\tImGui::SliderFloat(\"Alpha\", &_alphaImage, 0, 1.0);\n\t\t\t}\n\t\t\t\n\t\t\tcamera_handler.onGUI(\"Top view settings\");\n\t\t\tImGui::PopItemWidth();\n\t\t\tImGui::Separator();\n\t\t}\n\t}\n\n\tvoid SceneDebugView::gui_cameras()\n\t{\n\t\tif (ImGui::CollapsingHeader(\"Cameras##SceneDebugView\")) {\n\t\t\t\n\t\t\tImGui::SliderInt(\"Camera ID info\", &_cameraIdInfoGUI, 0, static_cast<int>(_cameras.size()) - 1);\n\n\n\t\t\tImGui::Columns(4); // 0 name | snapto | active| size \n\n\t\t\tImGui::Separator();\n\t\t\tImGui::Text(\"Camera\"); ImGui::NextColumn();\n\t\t\tImGui::Text(\"SnapTo\"); ImGui::NextColumn();\n\t\t\tImGui::Text(\"Active\"); ImGui::NextColumn();\n\n\t\t\tstatic std::vector<std::string> cam_info_option_str = { \"size\", \"focal\", \"fov_y\",\"aspect\" };\n\t\t\tif (ImGui::BeginCombo(\"Info\", cam_info_option_str[_camInfoOption].c_str())) {\n\t\t\t\tfor (int i = 0; i < (int)cam_info_option_str.size(); ++i) {\n\t\t\t\t\tif (ImGui::Selectable(cam_info_option_str[i].c_str(), _camInfoOption == i)) {\n\t\t\t\t\t\t_camInfoOption = (CameraInfoDisplay)i;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tImGui::EndCombo();\n\t\t\t}\n\t\t\tImGui::NextColumn();\n\t\t\tImGui::Separator();\n\t\n\t\t\t//for (uint i = 0; i < _cameras.size(); ++i) \n\t\t\t{\n\t\t\t\tstd::string name = \"cam_\" + intToString<4>(_cameraIdInfoGUI);\n\t\t\t\tImGui::Text(name.c_str());\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tif (ImGui::Button((\"SnapTo##\" + name).c_str())) {\n\t\t\t\t\tconst auto & input_cam = _scene->cameras()->inputCameras()[0];\n\n\t\t\t\t\tauto size = camera_handler.getViewport().finalSize();\n\t\t\t\t\tfloat ratio_dst = size[0] / size[1];\n\t\t\t\t\tfloat ratio_src = input_cam->w() / (float)input_cam->h();\n\t\t\t\t\tInputCamera cam = InputCamera(_cameras[_cameraIdInfoGUI].cam, (int)size[0], (int)size[1]);\n\n\t\t\t\t\tif (ratio_src < ratio_dst) {\n\t\t\t\t\t\tfloat fov_h = 2 * atan(tan(input_cam->fovy() / 2) * ratio_src / ratio_dst);\n\t\t\t\t\t\tcam.fovy(fov_h);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcam.fovy(input_cam->fovy());\n\t\t\t\t\t}\n\n\t\t\t\t\tcam.znear(0.0001f);\n\t\t\t\t\tcamera_handler.fromCamera(cam, true, false);\n\t\t\t\t}\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tImGui::Checkbox((\"##is_valid\" + name).c_str(), &_cameras[_cameraIdInfoGUI].highlight);\n\t\t\t\tImGui::NextColumn();\n\n\t\t\t\tconst auto & cam = _cameras[_cameraIdInfoGUI].cam;\n\t\t\t\tstd::stringstream tmp;\n\t\t\t\tswitch (_camInfoOption)\n\t\t\t\t{\n\t\t\t\t\tcase SIZE: tmp << cam.w() << \" x \" << cam.h(); break;\n\t\t\t\t\tcase FOCAL: tmp << cam.focal(); break;\n\t\t\t\t\tcase FOV_Y: tmp << cam.fovy(); break;\n\t\t\t\t\tcase ASPECT: tmp << cam.aspect(); break;\n\t\t\t\t\tdefault: break;\n\t\t\t\t}\n\t\t\t\tImGui::Text(tmp.str().c_str());\n\n\t\t\t\tImGui::Columns(1);\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n\tvoid SceneDebugView::setup()\n\t{\n\t\tif (_scene) {\n\t\t\tsetupLabelsManagerMeshes(_scene->cameras()->inputCameras());\n\t\t\tsetupMeshes();\n\n\t\t\t_cameras.clear();\n\t\t\tfor (const auto & inputCam : _scene->cameras()->inputCameras()) {\n\t\t\t\t_cameras.push_back(CameraInfos(*inputCam, inputCam->id(), _scene->cameras()->isCameraUsedForRendering(inputCam->id())));\n\t\t\t}\n\t\t}\n\n\t\t_snapToImage = 0;\n\t\t_showLabels = false;\n\n\t\t// check if topview.txt exists\n\t\tstd::ifstream topViewFile(_topViewPath);\n\t\tif (topViewFile.good())\n\t\t{\n\t\t\tSIBR_LOG << \"Loaded saved topview (\" << _topViewPath << \").\" << std::endl;\n\t\t\t// Intialize a temp camera (used to load the saved top view pose) with\n\t\t\t// the current top view camera to get the resolution/fov right.\n\t\t\tInputCamera cam(camera_handler.getCamera());\n\t\t\tcam.readFromFile(topViewFile);\n\t\t\t// Apply it to the top view FPS camera.\n\t\t\t//camera_handler.fromCamera(cam, false);\n\t\t\tcamera_handler.fromTransform(cam.transform(), false, true);\n\t\t}\n\n\t}\n\n\tvoid SceneDebugView::setupMeshes()\n\t{\n\t\t// no colors and no texture ? try to find capreal\n\t\tbool success = false;\n\t\tMesh sdv_mesh;\n\t\tMesh::Ptr mp;\n\t\tif (!_scene->proxies()->proxyPtr()->hasColors() && !_scene->proxies()->proxyPtr()->hasTexCoords()) {\n\t\t\tstd::string fn;\n\t\t\tif (fileExists(fn = _scene->data()->basePathName() + \"/capreal/mesh.ply\")) {\n\t\t\t\tif (sdv_mesh.load(fn, _scene->data()->basePathName()))\n\t\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t\t// in sibr subdir\n\t\t\telse if (fileExists(fn = _scene->data()->basePathName() + \"/../capreal/mesh.ply\")) {\n\t\t\t\tif (sdv_mesh.load(fn, _scene->data()->basePathName()))\n\t\t\t\t\tsuccess = true;\n\t\t\t}\n\t\t\tif (success) {\n\t\t\t\tMesh::Ptr mp;\n\t\t\t\tmp.reset(new Mesh);\n\t\t\t\tmp->merge(sdv_mesh);\n\t\t\t\taddMesh(\"proxy\", mp);\n\t\t\t}\n\t\t\telse\n\t\t\t\taddMesh(\"proxy\", _scene->proxies()->proxyPtr());\n\t\t}\n\t\telse\n\t\t\taddMesh(\"proxy\", _scene->proxies()->proxyPtr());\n\n\t\t// Add a gizmo.\n\t\taddMeshAsLines(\"guizmo\", RenderUtility::createAxisGizmo())\n\t\t\t.setDepthTest(false).setColorMode(MeshData::ColorMode::VERTEX);\n\t}\n\n} // namespace\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/SceneDebugView.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#pragma once\n\n# include \"core/assets/InputCamera.hpp\"\n# include \"core/assets/CameraRecorder.hpp\"\n# include \"core/graphics/Texture.hpp\"\n# include \"core/graphics/Camera.hpp\"\n# include \"core/graphics/Window.hpp\"\n# include \"core/graphics/Shader.hpp\"\n# include \"core/graphics/Mesh.hpp\"\n# include \"core/view/InteractiveCameraHandler.hpp\"\n# include \"core/view/ViewBase.hpp\"\n# include \"core/scene/BasicIBRScene.hpp\"\n# include \"core/system/CommandLineArgs.hpp\"\n\n#include <core/view/MultiMeshManager.hpp>\n\nnamespace sibr\n{\n\n\t/** Generate an accurate camera frustum\n\t\t\\param cam camera to visualize as a stub\n\t\t\\param znear near value to use for the frustum (if < 0, cam.near() will be used)\n\t\t\\param zfar far value to use for the frustum (if < 0, cam.far() will be used)\n\t\t \\ingroup sibr_view\n\t\t*/\n\tMesh::Ptr SIBR_VIEW_EXPORT generateCamFrustum(const InputCamera & cam, float znear = -1, float zfar = -1);\n\n\t/** Generate an accurate camera frustum with a custom color.\n\t\t\\param cam camera to visualize as a stub\n\t\t\\param col the mesh line color\n\t\t\\param znear near value to use for the frustum (if < 0, cam.near() will be used)\n\t\t\\param zfar far value to use for the frustum (if < 0, cam.far() will be used)\n\t\t \\ingroup sibr_view\n\t\t*/\n\tMesh::Ptr SIBR_VIEW_EXPORT generateCamFrustumColored(const InputCamera & cam, const Vector3f & col, float znear = -1, float zfar = -1);\n\n\t/** Generate a quad representing a camera image plane.\n\t *\\param cam the camera\n\t *\\param dist the distance in world space from the camera position to the image plane\n\t  \\ingroup sibr_view\n\t **/\n\tMesh::Ptr SIBR_VIEW_EXPORT generateCamQuadWithUvs(const InputCamera & cam, float dist);\n\n\t/** Helper used to display camera labels on screen.\n\t * Internally use ImGui to generate labels data.\n\t  \\ingroup sibr_view\n\t * */\n\tstruct SIBR_VIEW_EXPORT LabelsManager {\n\n\tprotected:\n\n\t\t/** Displayed cameras info. */\n\t\tstruct CameraInfos {\n\t\t\t/** Constructor.\n\t\t\t *\\param cam the camera\n\t\t\t *\\param id the corresponding vector ID\n\t\t\t *\\param highlight should the camera be highlighted. \n\t\t\t */\n\t\t\tCameraInfos(const InputCamera& cam, uint id, bool highlight);\n\n\t\t\tconst InputCamera & cam; ///< Camera.\n\t\t\tuint id = 0; ///< Array ID.\n\t\t\tbool highlight = false; ///< Highlight status.\n\t\t};\n\n\t\t/** Initialize the shaders. */\n\t\tvoid setupLabelsManagerShader();\n\n\t\t/** Generate labels data based on input camera informations.\n\t\t *\\param cams the cameras \n\t\t */\n\t\tvoid setupLabelsManagerMeshes(const std::vector<InputCamera::Ptr> & cams);\n\n\t\t/** Render the camera labels.\n\t\t *\\param eye the current viewpoint\n\t\t *\\param vp the view viewport\n\t\t *\\param cams_info the current state of the cameras. \n\t\t * \\todo Get rid of the viewport if possible.\n\t\t **/\n\t\tvoid renderLabels(const Camera & eye, const Viewport & vp, const std::vector<CameraInfos> & cams_info);\n\t\n\n\t\t/** Label geometry info. The mesh is split in two parts, \n\t\t * one containing the background label shape, \n\t\t * and one containing the quads that support the text. */\n\t\tstruct LabelMesh {\n\t\t\tMesh::Ptr mesh; ///< The generated mesh.\n\t\t\tunsigned int splitIndex = 0; ///< The boundary between foreground and background mesh.\n\t\t};\n\n\t\tstd::map<unsigned int, LabelMesh> \t_labelMeshes; ///< Generated geometry for each label.\n\t\tGLShader\t\t\t\t\t\t\t_labelShader; ///< Shader.\n\t\tGLuniform<Vector3f>\t\t\t\t\t_labelShaderPosition; ///< Uniform for the label position.\n\t\tGLuniform<float>\t\t\t\t\t_labelShaderScale = 1.0f; ///< Uniform for the label scale (used twice per label, with different values derived from _labelScale).\n\t\tGLuniform<Vector2f>\t\t\t\t\t_labelShaderViewport; ///< The viewport of the view, for ratio adjustment.\n\t\tfloat\t\t\t\t\t\t\t\t_labelScale = 1.0f; ///< The label scale ons creen.\n\n\t};\n\n\t/** Helper used to render image planes in front of the camera, \n\t * for both scenes storing 2D separate images or a texture array.\n\t  \\ingroup sibr_view\n\t */\n\tstruct SIBR_VIEW_EXPORT ImageCamViewer {\n\n\tprotected:\n\n\t\t/** Initialize the shaders. */\n\t\tvoid initImageCamShaders();\n\n\t\t/** Render one specific input image on a camera image plane.\n\t\t *\\param eye the current viewpoint\n\t\t *\\param cam the camera to show the image plane of\n\t\t *\\param rts input 2D textures list\n\t\t *\\param cam_id the list index associated to the camera\n\t\t */\n\t\tvoid renderImage(const Camera & eye, const InputCamera & cam, const std::vector<RenderTargetRGBA32F::Ptr> & rts, int cam_id);\n\n\t\t/** Render one specific input image on a camera image plane.\n\t\t *\\param eye the current viewpoint\n\t\t *\\param cam the camera to show the image plane of\n\t\t *\\param tex2Darray_handle input images texture array\n\t\t *\\param cam_id the array slice associated to the camera\n\t\t */\n\t\tvoid renderImage(const Camera & eye, const InputCamera & cam, uint tex2Darray_handle, int cam_id);\n\n\t\tGLShader _shader2D;\t\t///< Shader for the 2D separate case.\n\t\tGLShader _shaderArray;  ///< Shader for the texture array case.\n\t\tGLuniform<sibr::Matrix4f>\t_mvp2D, _mvpArray; ///< MVP matrix.\n\t\tGLuniform<float>\t\t\t_alpha2D = 1.0f; ///< Opacity.\n\t\tGLuniform<float>\t\t\t_alphaArray = 1.0f; ///< Opacity.\n\t\tGLuniform<int>\t\t\t\t_sliceArray = 1; ///< Slice location (for the texture array case).\n\t\tfloat\t\t\t\t\t\t_alphaImage = 0.5f; ///< Opacity shared value.\n\t\tfloat\t\t\t\t\t\t_cameraScaling = 0.8f; ///< Camera scaling.\n\t};\n\n\t/** Scene viewer for IBR scenes with a proxy, cameras and input images. \n\t * It adds camera visualization options (labels, frusta, image planes) on top of the MeshManager.\n\t  \\ingroup sibr_view\n\t */\n\tclass SIBR_VIEW_EXPORT SceneDebugView : public MultiMeshManager, public ImageCamViewer, public LabelsManager\n\t{\n\t\tSIBR_CLASS_PTR(SceneDebugView);\n\n\tpublic:\n\n\t\t/** Which camera info should be displayed in the GUI. */\n\t\tenum CameraInfoDisplay { SIZE, FOCAL, FOV_Y, ASPECT };\n\n\t\t/** Constructor.\n\t\t * \\param scene the scene to display\n\t\t * \\param camHandler a camera handler to display as a \"user camera\"\n\t\t * \\param myArgs dataset arguments (needed to load/save the camera location)\n\t\t */\n\t\tSceneDebugView(const IIBRScene::Ptr& scene, const InteractiveCameraHandler::Ptr & camHandler, const BasicDatasetArgs& myArgs);\n\n\t\t/** Constructor.\n\t\t * \\param scene the scene to display\n\t\t * \\param viewport the view viewport\n\t\t * \\param camHandler a camera handler to display as a \"user camera\"\n\t\t * \\param myArgs dataset arguments (needed to load/save the camera location)\n\t\t * \\warning Deprecated, use the version without the viewport.\n\t\t */\n\t\tSceneDebugView(const IIBRScene::Ptr& scene, const Viewport& viewport, const InteractiveCameraHandler::Ptr& camHandler, const BasicDatasetArgs& myArgs);\n\n\t\t/** Update state based on user input.\n\t\t * \\param input user input\n\t\t * \\param deltaTime the time elapsed since last update\n\t\t * \\param viewport input viewport\n\t\t * \\note Used when the view is in a multi-view system.\n\t\t */\n\t\tvirtual void onUpdate(Input & input, const float deltaTime, const Viewport & viewport = Viewport(0.0f, 0.0f, 0.0f, 0.0f));\n\n\t\t/** Update state based on user input.\n\t\t * \\param input user input\n\t\t * \\param viewport input viewport\n\t\t * \\note Used when the view is in a multi-view system.\n\t\t */\n\t\tvirtual void onUpdate(Input & input, const Viewport & viewport) override;\n\n\t\t/* Update state based on user input.\n\t\t * \\param input user input\n\t\t */\n\t\tvirtual void onUpdate(Input& input) override;\n\t\t\n\t\t/** Render content in a window.\n\t\t *\\param win destination window\n\t\t */\n\t\tvirtual void onRender(Window& win) override;\n\n\t\t/** Render content in the currently bound RT, using a specific viewport.\n\t\t * \\param viewport destination viewport\n\t\t * \\note Used when the view is in a multi-view system.\n\t\t */\n\t\tvirtual void onRender(const Viewport & viewport) override;\n\n\t\tusing MultiMeshManager::onRender;\n\n\t\t/** Update and display GUI panels. */\n\t\tvirtual void onGUI() override;\n\n\t\t/** Save the top view camera to scene/cameras/topview.txt. */\n\t\tvoid save();\n\n\t\t/** \\return the camera handler for the view. */\n\t\tconst InteractiveCameraHandler & getCamera() const { return camera_handler; }\n\n\t\t/** \\return the camera handler for the view. */\n\t\tInteractiveCameraHandler & getCamera() { return camera_handler; }\n\n\t\t/** Replace the scene.\n\t\t *\\param scene the new scene\n\t\t *\\param preserveCamera should the current camera position be preserved\n\t\t **/\n\t\tvoid setScene(const IIBRScene::Ptr & scene, bool preserveCamera = false);\n\n\t\t/** Update the active status of all cameras\n\t\t *\\param cams_id the active camera IDs. \n\t\t */\n\t\tvoid updateActiveCams(const std::vector<uint> & cams_id);\n\n\tprotected:\n\n\t\t/** Generate the GUI for the display options. */\n\t\tvoid gui_options();\n\n\t\t/** generate the GUI with the camera infos. */\n\t\tvoid gui_cameras();\n\n\t\t/** Setup the view. */\n\t\tvoid setup();\n\n\t\t/** Setup the geometry. */\n\t\tvoid setupMeshes();\n\n\t\tInteractiveCameraHandler::Ptr\t_userCurrentCam; ///< The \"main view\" camera handler (will be displayed as an extra camera).\n\t\tIIBRScene::Ptr\t\t\t\t\t_scene; ///< Current displayed scene.\n\t\tstd::vector<CameraInfos>\t\t_cameras; ///< Additional scene cameras info.\n\t\tCameraInfoDisplay\t\t\t\t_camInfoOption = SIZE; ///< Camera info to display in the GUI.\n\t\tstd::string\t\t\t\t\t\t_topViewPath; ///< Path to the topview saved file.\n\t\tint\t\t\t\t\t\t\t\t_snapToImage = 0; ///< ID of the camera to snap to.\n\t\tint\t\t\t\t\t\t\t\t_cameraIdInfoGUI = 0; ///< ID of the camera to display info about.\n\t\tbool\t\t\t\t\t\t\t_showImages = true; ///< Show the image planes.\n\t\tbool\t\t\t\t\t\t\t_showLabels = false; ///< Show camera labels.\n\n\t};\n\n} // namespace\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/Skybox.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n# include \"core/assets/Resources.hpp\"\r\n# include \"core/view/Skybox.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\tbool\tSkybox::load(const std::string& skyFolder)\r\n\t{\r\n\t\tif (!sibr::directoryExists(skyFolder))\r\n\t\t\treturn false;\r\n\r\n\t\t_shader.init(\"Skybox\",\r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"skybox.vp\")),\r\n\t\t\tsibr::loadFile(sibr::Resources::Instance()->getResourceFilePathName(\"skybox.fp\")));\r\n\t\t_paramView.init(_shader, \"in_View\");\r\n\t\t_paramAspect.init(_shader, \"in_Aspect\");\r\n\r\n\t\tstd::array<const char*, 6> filenames = {\r\n\t\t\t\"right.jpg\"\t\t,\r\n\t\t\t\"left.jpg\"\t\t,\r\n\t\t\t\"top.jpg\"\t\t,\r\n\t\t\t\"bottom.jpg\"\t,\r\n\t\t\t\"forward.jpg\"\t,\r\n\t\t\t\"back.jpg\"\t\t\r\n\t\t};\r\n\r\n\t\tstd::array<ImageRGB, filenames.size()>\timages;\r\n\r\n\t\tfor (uint i = 0; i < filenames.size(); ++i)\r\n\t\t{\r\n\t\t\tstd::string file = (skyFolder + \"/\") + filenames[i];\r\n\t\t\tif (images[i].load(file) == false)\r\n\t\t\t{\r\n\t\t\t\tSIBR_ERR << \"cannot open \" << file << \" (loading the skybox)\" << std::endl;\r\n\t\t\t}\r\n\t\t}\r\n\t\t_cubemap.reset(new TextureCubeMapRGB(images[0], images[1], images[2], images[3], images[4], images[5]));\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\tvoid\tSkybox::render(const Camera& eye, const sibr::Vector2u& imgSize)\r\n\t{\r\n\t\tif (_cubemap == nullptr)\r\n\t\t\treturn;\r\n\r\n\r\n\t\tglDisable(GL_DEPTH_TEST);\r\n\r\n\t\tCHECK_GL_ERROR;\r\n\t\t_shader.begin();\r\n\t\tCHECK_GL_ERROR;\r\n\t\t_paramAspect.set(Vector2f(float(imgSize.x())/float(imgSize.y()), float(imgSize.y())/float(imgSize.x())));\r\n\t\tCHECK_GL_ERROR;\r\n\t\t_paramView.set(Matrix4f(eye.view().inverse()));\r\n\t\tCHECK_GL_ERROR;\r\n\t\t// cube map texture should already be bound\r\n\t\tglActiveTexture(GL_TEXTURE0);\r\n\t\tglBindTexture(GL_TEXTURE_CUBE_MAP, _cubemap->handle());\r\n\t\tCHECK_GL_ERROR;\r\n\r\n\t\tRenderUtility::useDefaultVAO();\r\n\t\tconst unsigned char indices[] = { 0, 1, 2, 3 };\r\n\t\tglDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices);\r\n\t\tCHECK_GL_ERROR;\r\n\r\n\t\t_shader.end();\r\n\t}\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/Skybox.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"core/view/Config.hpp\"\n# include \"core/graphics/Shader.hpp\"\n# include \"core/graphics/Texture.hpp\"\n# include \"core/graphics/Camera.hpp\"\n\nnamespace sibr\n{\n\t/** A skybox object for rendering a cubemap texture.\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT Skybox\n\t{\n\t\tSIBR_CLASS_PTR(Skybox);\n\n\tpublic:\n\n\t\t/** Load skybox faces from a directory. The files should be named: {right, left, top, bottom, forward, back}.jpg\n\t\t\\param skyFolder directory path\n\t\t\\return a success boolean \n\t\t*/\n\t\tbool\tload(const std::string& skyFolder);\n\n\t\t/** Render in the current RT.\n\t\t\\param eye current viewpoint\n\t\t\\param imgSize the destination RT size\n\t\t*/\n\t\tvoid\trender(const Camera& eye, const sibr::Vector2u& imgSize);\n\n\tprivate:\n\n\t\tGLShader\t\t_shader; ///< Skybox shader.\n\t\tGLParameter\t\t_paramView; ///< VP parameter.\n\t\tGLParameter\t\t_paramAspect; ///< Aspect ratio parameter.\n\n\t\tTextureCubeMapRGB::Ptr\t_cubemap = nullptr; ///< Cubemap texture.\n\n\t};\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/TrackBall.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include \"TrackBall.h\"\r\n#include <boost/filesystem.hpp>\r\n#include \"core/graphics/Input.hpp\"\r\n#include \"core/graphics/Viewport.hpp\"\r\n#include \"core/raycaster/CameraRaycaster.hpp\" \r\n#include \"core/graphics/Window.hpp\"\r\n#include \"core/graphics/Mesh.hpp\"\r\n\r\nnamespace sibr {\r\n\r\n\tfloat TrackBall::ratioTrackBall2D = 0.75f;\r\n\r\n\tTrackBall::TrackBall(bool _verbose) : hasBeenInitialized(false), shadersCompiled(false), state(TrackBallState::IDLE), verbose(_verbose),\r\n\t\tfixedCamera(InputCamera()), tempCamera(InputCamera())\r\n\t{\r\n\t\tdrawThis = true;\r\n\t}\r\n\r\n\tvoid TrackBall::update(const sibr::Input& input, const float deltaTime, const Viewport& viewport) {\r\n\t\tupdate(input, viewport, std::shared_ptr<Raycaster>());\r\n\t}\r\n\r\n\tconst InputCamera & TrackBall::getCamera(void) const\r\n\t{\r\n\t\tif (!hasBeenInitialized) {\r\n\t\t\tSIBR_ERR << \" TrackBall : camera not initialized before use\" << std::endl\r\n\t\t\t\t<< \"\\t you should use either fromMesh(), fromCamera() or load() \" << std::endl;\r\n\t\t}\r\n\t\tif (state == TrackBallState::IDLE) {\r\n\t\t\treturn fixedCamera;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn tempCamera;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::onRender(const sibr::Viewport& viewport) {\r\n\t\tif (!drawThis) { return; }\r\n\r\n\t\tif (!shadersCompiled) {\r\n\t\t\tinitTrackBallShader();\r\n\t\t}\r\n\r\n\t\tif (state == TrackBallState::IDLE) { return; }\r\n\r\n\t\t// Save current blending state and function.\r\n\t\tGLboolean blendState;\r\n\t\tglGetBooleanv(GL_BLEND, &blendState);\r\n\t\tGLint blendSrc, blendDst;\r\n\t\tglGetIntegerv(GL_BLEND_SRC_ALPHA, &blendSrc);\r\n\t\tglGetIntegerv(GL_BLEND_DST_ALPHA, &blendDst);\r\n\r\n\t\t// Enable basic blending.\r\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r\n\t\tglEnable(GL_BLEND);\r\n\r\n\t\t// Render.\r\n\t\tviewport.bind();\r\n\t\ttrackBallShader.begin();\r\n\t\tratioTrackBall2Dgpu.set(ratioTrackBall2D);\r\n\t\ttrackBallStateGPU.set((int)state);\r\n\t\tquadMesh->render(false, false, Mesh::RenderMode::FillRenderMode);\r\n\t\ttrackBallShader.end();\r\n\r\n\t\t// Restore blend state.\r\n\t\tif (!blendState) {\r\n\t\t\tglDisable(GL_BLEND);\r\n\t\t}\r\n\t\tglBlendFunc(blendSrc, blendDst);\r\n\t}\r\n\r\n\tvoid TrackBall::saveVectorInFile(std::ofstream & s, const Vector3f & v) const {\r\n\t\ts << v.x() << \" \" << v.y() << \" \" << v.z() << std::endl;\r\n\t}\r\n\r\n\tvoid TrackBall::setCameraAttributes(const Viewport & viewport)\r\n\t{\r\n\t\tfixedCamera.size((int)viewport.finalWidth(), (int)viewport.finalHeight());\r\n\t\tfixedCamera.aspect(viewport.finalWidth() / viewport.finalHeight());\r\n\t}\r\n\r\n\tvoid TrackBall::updateTrackBallCameraSize(const Viewport & viewport)\r\n\t{\r\n\t\tsibr::Vector2i viewPortSize = viewport.finalSize().cast<int>();\r\n\t\tfixedCamera.size(viewPortSize[0], viewPortSize[1]);\r\n\t}\r\n\r\n\tbool TrackBall::load(std::string & filePath, const Viewport & viewport)\r\n\t{\r\n\t\tstd::ifstream file(filePath.c_str());\r\n\t\tif (file.is_open()) {\r\n\t\t\tfloat a, b, c, fov, zNear, zFar;\r\n\t\t\tfile >> a >> b >> c;\r\n\t\t\tVector3f tbCenter(a, b, c);\r\n\t\t\tfile >> a >> b >> c;\r\n\t\t\tVector3f eye(a, b, c);\r\n\t\t\tfile >> a >> b >> c;\r\n\t\t\tVector3f up(a, b, c);\r\n\t\t\tfile >> fov >> zNear >> zFar;\r\n\r\n\t\t\ttempCenter = fixedCenter = tbCenter;\r\n\r\n\t\t\tfixedCamera.setLookAt(eye, fixedCenter, up);\r\n\t\t\tfixedCamera.fovy(fov);\r\n\t\t\tfixedCamera.znear(zNear);\r\n\t\t\tfixedCamera.zfar(zFar);\r\n\t\t\tsetCameraAttributes(viewport);\r\n\t\t\ttempCamera = fixedCamera;\r\n\r\n\t\t\thasBeenInitialized = true;\r\n\t\t\tprintMessage(\" n trackBall loaded \" + filePath);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tprintMessage(\" could not open trackBall\" + filePath);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::save(std::string & filePath) const\r\n\t{\r\n\t\tif (boost::filesystem::exists(filePath)) {\r\n\t\t\tchar c;\r\n\t\t\tSIBR_LOG << \" a track ball already exists, override ? y/n ... \" << std::flush;\r\n\t\t\tstd::cin >> c;\r\n\t\t\tif (c != 'y') {\r\n\t\t\t\tstd::cout << \" not saved ! \" << std::endl;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tstd::ofstream file(filePath.c_str());\r\n\t\tif (file.is_open()) {\r\n\t\t\tsaveVectorInFile(file, fixedCenter);\r\n\t\t\tsaveVectorInFile(file, fixedCamera.position());\r\n\t\t\tsaveVectorInFile(file, fixedCamera.up());\r\n\t\t\tfile << fixedCamera.fovy() << \" \" << fixedCamera.znear() << \" \" << fixedCamera.zfar() << std::endl;\r\n\t\t\tSIBR_LOG << \" TrackBall saved at \" << filePath << std::endl;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tSIBR_LOG << \" Could not save trackBall\" << std::endl;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::fromCamera(const InputCamera & cam, const Viewport & viewport, const float & radius)\r\n\t{\r\n\t\tfixedCamera = cam;\r\n\r\n\t\tif (fixedCamera.zfar() == 0 || fixedCamera.znear() == 0) {\r\n\t\t\tInputCamera defaultCam = InputCamera();\r\n\t\t\tfixedCamera.znear(defaultCam.znear());\r\n\t\t\tfixedCamera.zfar(defaultCam.zfar());\r\n\t\t}\r\n\r\n\t\tsetCameraAttributes(viewport);\r\n\t\ttempCamera = fixedCamera;\r\n\t\ttempCenter = fixedCenter = cam.position() + cam.dir().normalized() * radius;\r\n\r\n\t\thasBeenInitialized = true;\r\n\t}\r\n\r\n\tbool TrackBall::fromMesh(const Mesh & mesh, const Viewport & viewport)\r\n\t{\r\n\t\treturn fromBoundingBox(mesh.getBoundingBox(), viewport);\r\n\t}\r\n\r\n\tbool TrackBall::fromBoundingBox(const Eigen::AlignedBox<float, 3> & box, const Viewport & viewport)\r\n\t{\r\n\r\n\t\tif (box.isEmpty() || (box.diagonal().array() == 0.0f).any()) {\r\n\t\t\tSIBR_LOG << \" [WARNING] TrackBall::fromMesh : cannot create camera from flat mesh \" << std::endl;\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttempCenter = fixedCenter = box.center();\r\n\t\t\tVector3f eye = fixedCenter + box.diagonal();\r\n\t\t\tVector3f up(0, 1, 0);\r\n\r\n\t\t\tfixedCamera.setLookAt(eye, fixedCenter, up);\r\n\r\n\t\t\tfixedCamera.zfar(2.0f*box.diagonal().norm());\r\n\t\t\tsetCameraAttributes(viewport);\r\n\t\t\ttempCamera = fixedCamera;\r\n\t\t\thasBeenInitialized = true;\r\n\t\t\tprintMessage(\" TrackBall::fromMesh : camera created \");\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::update(const Input & input, const Viewport & viewport, std::shared_ptr<Raycaster> raycaster)\r\n\t{\r\n\t\tif( !hasBeenInitialized || input.empty()) { return; }\r\n\r\n\t\tupdateTrackBallCameraSize(viewport);\r\n\r\n\t\tupdateTrackBallStatus(input, viewport);\r\n\r\n\t\tupdateTrackBallCamera(input, viewport, raycaster);\r\n\r\n\t\tupdateFromKeyboard(input);\r\n\t}\r\n\r\n\tvoid TrackBall::updateAspectWithViewport(const Viewport & viewport)\r\n\t{\r\n\t\tfixedCamera.size(static_cast<uint>(viewport.finalWidth()), static_cast<uint>(viewport.finalHeight()));\r\n\t\tfixedCamera.aspect(viewport.finalHeight() / viewport.finalWidth());\r\n\t}\r\n\r\n\tvoid TrackBall::updateTrackBallStatus(const Input & input, const Viewport & viewport)\r\n\t{\r\n\t\tcurrentPoint2D = input.mousePosition();\r\n\r\n\t\tif (input.key().isActivatedOnly(Key::T) && input.key().isActivatedOnly(Key::V)) {\r\n\t\t\tverbose = !verbose;\r\n\t\t\tif (verbose) {\r\n\t\t\t\tprintMessage(\"trackBall is now verbose \");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tSIBR_LOG << \" TrackBall not verbose anymore \" << std::endl;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (input.key().isActivated(Key::LeftControl)) {\r\n\t\t\tstate = TrackBallState::IDLE;\r\n\t\t}\r\n\t\telse if (input.mouseButton().isPressed(Mouse::Right)) {\r\n\t\t\tlastPoint2D = currentPoint2D;\r\n\t\t\ttempCamera = fixedCamera;\r\n\t\t\ttempCenter = fixedCenter;\r\n\t\t\tif (isInTrackBall2dRegion(lastPoint2D, viewport)) {\r\n\t\t\t\tstate = TrackBallState::TRANSLATION_PLANE;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tstate = TrackBallState::TRANSLATION_Z;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (input.mouseButton().isPressed(Mouse::Left)) {\r\n\t\t\tlastPoint2D = currentPoint2D;\r\n\t\t\ttempCamera = fixedCamera;\r\n\t\t\tif (isInTrackBall2dRegion(lastPoint2D, viewport)) {\r\n\t\t\t\tstate = TrackBallState::ROTATION_SPHERE;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tstate = TrackBallState::ROTATION_ROLL;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (input.mouseButton().isReleased(Mouse::Right) || input.mouseButton().isReleased(Mouse::Left)) {\r\n\t\t\tif (state != TrackBallState::IDLE) {\r\n\t\t\t\tstate = TrackBallState::IDLE;\r\n\t\t\t\tfixedCamera = tempCamera;\r\n\t\t\t\tfixedCenter = tempCenter;\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::updateTrackBallCamera(const Input & input, const Viewport & viewport, std::shared_ptr<Raycaster> raycaster)\r\n\t{\r\n\t\tif (state == TrackBallState::ROTATION_SPHERE) {\r\n\t\t\tupdateRotationSphere(input, viewport);\r\n\t\t}\r\n\t\telse if (state == TrackBallState::ROTATION_ROLL) {\r\n\t\t\tupdateRotationRoll(input, viewport);\r\n\t\t}\r\n\t\telse if (state == TrackBallState::TRANSLATION_PLANE) {\r\n\t\t\tupdateTranslationPlane(input, viewport, raycaster);\r\n\t\t}\r\n\t\telse if (state == TrackBallState::TRANSLATION_Z) {\r\n\t\t\tupdateTranslationZ(input, viewport);\r\n\t\t}\r\n\t\telse if (state == TrackBallState::IDLE) {\r\n\t\t\tif (input.key().isActivated(Key::LeftControl)) {\r\n\t\t\t\tupdateBallCenter(input, raycaster);\r\n\t\t\t}\r\n\t\t\telse if (input.mouseScroll() != 0) {\r\n\t\t\t\tupdateZnearZFar(input);\r\n\t\t\t\tupdateRadius(input);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::updateBallCenter(const Input & input, std::shared_ptr<Raycaster> raycaster)\r\n\t{\r\n\r\n\t\tif (raycaster.get() == nullptr || !input.mouseButton().isPressed(Mouse::Left)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsibr::Vector3f worldPos, dir;\r\n\t\tif(fixedCamera.ortho())\r\n\t\t{\r\n\t\t\tsibr::Vector2i clickPos = input.mousePosition();\r\n\t\t\tworldPos = fixedCamera.position() +\r\n\t\t\t\t\t\t\t\t\t(2.0f*clickPos.x() / (float)fixedCamera.w() - 1.0f)*fixedCamera.orthoRight()*fixedCamera.right()\r\n\t\t\t\t\t\t\t\t\t+ (2.0f*((float)fixedCamera.h() - 1 - clickPos.y()) / (float)fixedCamera.h() - 1.0f)*fixedCamera.orthoTop()*fixedCamera.up();\r\n\t\t\tdir = fixedCamera.dir();\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdir = CameraRaycaster::computeRayDir(fixedCamera, input.mousePosition().cast<float>()).normalized();\r\n\t\t\tworldPos = fixedCamera.position();\r\n\t\t}\r\n\t\tRayHit hit = raycaster->intersect(Ray(worldPos, dir));\r\n\r\n\t\tif (hit.hitSomething()) {\r\n\t\t\tprintMessage(\" TrackBall::updateBallCenter : updating center from mesh \");\r\n\t\t\tVector3f intersection(worldPos + hit.dist()*dir.normalized());\r\n\t\t\tfixedCenter = tempCenter = intersection;\r\n\t\t\tfixedCamera.setLookAt(worldPos, fixedCenter, fixedCamera.up());\r\n\t\t}\r\n\t\telse {\r\n\t\t\tprintMessage(\" TrackBall::updateBallCenter : could not intersect mesh \");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid TrackBall::updateRotationSphere(const Input & input, const Viewport & viewport)\r\n\t{\r\n\t\tif (!isInTrackBall2dRegion(input.mousePosition(), viewport) || input.mousePosition() == lastPoint2D) { return; }\r\n\t\tVector3f lastPointSphere(mapToSphere(lastPoint2D, viewport));\r\n\t\tVector3f newPointSphere(mapToSphere(input.mousePosition(), viewport));\r\n\t\tVector3f rotationAxisScreenSpace((lastPointSphere.cross(newPointSphere)).normalized());\r\n\t\tVector4f axis;\r\n\t\taxis << rotationAxisScreenSpace, 0.0f;\r\n\t\tVector3f rotationAxisWorldSpace((fixedCamera.view().inverse()* axis).xyz());\r\n\r\n\t\tfloat angleCos = newPointSphere.dot(lastPointSphere);\r\n\t\tif (std::abs(angleCos) < 1.0f) {\r\n\t\t\tfloat rotationAngle = -2.0f * acos(angleCos);\r\n\t\t\tEigen::Quaternionf rot(Eigen::AngleAxisf(rotationAngle, rotationAxisWorldSpace));\r\n\r\n\t\t\tfloat radius = (fixedCamera.position() - fixedCenter).norm();\r\n\t\t\tVector3f oldEye = -fixedCamera.dir().normalized();\r\n\t\t\tVector3f newEye = fixedCenter + radius * (rot*oldEye);\r\n\t\t\ttempCamera.setLookAt(newEye, fixedCenter, fixedCamera.up());\r\n\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::updateRotationRoll(const Input & input, const Viewport & viewport)\r\n\t{\r\n\t\tif (isInTrackBall2dRegion(input.mousePosition(), viewport)) { return; }\r\n\r\n\t\tVector2f viewportCenter(0.5f*(viewport.finalLeft() + viewport.finalRight()), 0.5f*(viewport.finalTop() + viewport.finalBottom()));\r\n\t\tfloat clockwise = (areClockWise(viewportCenter, lastPoint2D.cast<float>(), input.mousePosition().cast<float>()) ? -1.0f : 1.0f);\r\n\t\tfloat diagonal = std::sqrt((float)(viewport.finalWidth()*viewport.finalWidth() + viewport.finalHeight()*viewport.finalHeight()));\r\n\t\tfloat rollAngle = clockwise * (float)M_PI * (float)(lastPoint2D - input.mousePosition()).norm() / diagonal;\r\n\r\n\t\tEigen::Quaternionf rot(Eigen::AngleAxisf(rollAngle, -fixedCamera.dir().normalized()));\r\n\t\tVector3f newUp = rot * fixedCamera.up().normalized();\r\n\r\n\t\ttempCamera.setLookAt(fixedCamera.position(), fixedCenter, newUp);\r\n\t}\r\n\r\n\tvoid TrackBall::updateTranslationPlane(const Input & input, const Viewport & viewport, std::shared_ptr<Raycaster> raycaster)\r\n\t{\r\n\t\tif (!isInTrackBall2dRegion(input.mousePosition(), viewport)) { return; }\r\n\r\n\t\tif (input.mouseButton().isPressed(Mouse::Right)) {\r\n\r\n\t\t\tsibr::Vector3f worldPos, dir;\r\n\t\t\tif(fixedCamera.ortho())\r\n\t\t\t{\r\n\t\t\t\tsibr::Vector2i clickPos = input.mousePosition();\r\n\t\t\t\tworldPos = fixedCamera.position() +\r\n\t\t\t\t\t\t\t\t\t\t(2.0f*clickPos.x() / (float)fixedCamera.w() - 1.0f)*fixedCamera.orthoRight()*fixedCamera.right()\r\n\t\t\t\t\t\t\t\t\t\t+ (2.0f*((float)fixedCamera.h() - 1 - clickPos.y()) / (float)fixedCamera.h() - 1.0f)*fixedCamera.orthoTop()*fixedCamera.up();\r\n\t\t\t\tdir = fixedCamera.dir();\r\n\t\t\t\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdir = CameraRaycaster::computeRayDir(fixedCamera, input.mousePosition().cast<float>()).normalized();\r\n\t\t\t\tworldPos = fixedCamera.position();\r\n\t\t\t}\r\n\r\n\t\t\tVector3f pointOnPlane = fixedCenter;\r\n\t\t\tif (raycaster.get() != nullptr) {\r\n\t\t\t\tRayHit hit = raycaster->intersect(Ray(worldPos, dir));\r\n\t\t\t\tif (hit.hitSomething()) {\r\n\t\t\t\t\tpointOnPlane = worldPos + hit.dist()*dir;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttrackballPlane = Eigen::Hyperplane<float, 3>(fixedCamera.dir().normalized(), pointOnPlane);\r\n\t\t}\r\n\r\n\t\tVector3f clicked3DPosition(mapTo3Dplane(lastPoint2D));\r\n\t\tVector3f current3DPosition(mapTo3Dplane(input.mousePosition()));\r\n\t\tVector3f shift3D = clicked3DPosition - current3DPosition;\r\n\r\n\t\ttempCenter = fixedCenter + shift3D / zoom;\r\n\t\ttempCamera.setLookAt(fixedCamera.position() + shift3D, tempCenter, fixedCamera.up());\r\n\t}\r\n\r\n\tvoid TrackBall::updateTranslationZ(const Input & input, const Viewport & viewport)\r\n\t{\r\n\t\tif (isInTrackBall2dRegion(input.mousePosition(), viewport)) { return; }\r\n\t\tVector3f zAxis = -fixedCamera.dir().normalized();\r\n\r\n\t\tVector2i shift2D(input.mousePosition() - lastPoint2D);\r\n\t\tVector2f shift2Df(shift2D.cast<float>().array() / Vector2f(viewport.finalWidth(), viewport.finalHeight()).array());\r\n\r\n\t\tint whichDir = (std::abs(shift2D.x()) > std::abs(shift2D.y()) ? 0 : 1);\r\n\r\n\t\tfloat shift = 4.0f*(fixedCenter - fixedCamera.position()).norm()*(whichDir == 0 ? -1.0f : 1.0f)*shift2Df[whichDir];\r\n\t\tVector3f shift3D = shift * zAxis;\r\n\t\ttempCenter = fixedCenter + shift3D / zoom;\r\n\t\ttempCamera.setLookAt(fixedCamera.position() + shift3D, tempCenter, fixedCamera.up());\r\n\t}\r\n\r\n\tvoid TrackBall::updateFromKeyboard(const Input & input)\r\n\t{\r\n\t\tfloat angle = 0.005f;\r\n\t\tfloat angleChange = 0.0f;\r\n\t\tenum Change { NONE, X, Y, Z };\r\n\t\tChange change = NONE;\r\n\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum6)) {\r\n\t\t\tangleChange = +angle;\r\n\t\t\tchange = Y;\r\n\t\t}\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum4)) {\r\n\t\t\tangleChange = -angle;\r\n\t\t\tchange = Y;\r\n\t\t}\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum8)) {\r\n\t\t\tangleChange = -angle;\r\n\t\t\tchange = X;\r\n\t\t}\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum2)) {\r\n\t\t\tangleChange = +angle;\r\n\t\t\tchange = X;\r\n\t\t}\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum7)) {\r\n\t\t\tangleChange = -angle;\r\n\t\t\tchange = Z;\r\n\t\t}\r\n\t\tif (input.key().isActivated(sibr::Key::KPNum9)) {\r\n\t\t\tangleChange = +angle;\r\n\t\t\tchange = Z;\r\n\t\t}\r\n\t\tif (change != NONE) {\r\n\t\t\tVector3f zAxis = -fixedCamera.dir().normalized();\r\n\t\t\tVector3f yAxis = fixedCamera.up().normalized();\r\n\t\t\tVector3f xAxis = fixedCamera.right().normalized();\r\n\r\n\t\t\tVector3f rotAxis = (change == Z ? zAxis : change == Y ? yAxis : xAxis);\r\n\r\n\t\t\tEigen::Quaternionf rot(Eigen::AngleAxisf(angleChange, rotAxis));\r\n\t\t\tsibr::Vector3f newEye = fixedCamera.position();\r\n\t\t\tsibr::Vector3f newUp = yAxis;\r\n\t\t\tif (change == Z) {\r\n\t\t\t\tnewUp = rot * newUp;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tnewEye = rot * (newEye - fixedCenter) + fixedCenter;\r\n\t\t\t}\r\n\r\n\t\t\tfixedCamera.setLookAt(newEye, fixedCenter, newUp);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid TrackBall::updateRadius(const Input & input)\r\n\t{\r\n\t\tif(input.key().getNumActivated() != 0){ return; }\r\n\t\tif (!fixedCamera.ortho()) {\r\n\t\t\tfloat zoomIn = (input.mouseScroll() > 0 ? -1.0f : 1.0f);\r\n\t\t\tfloat radius = (fixedCamera.position() - fixedCenter).norm();\r\n\t\t\tVector3f oldEye = -fixedCamera.dir().normalized();\r\n\t\t\tradius = radius * pow(1.25f, zoomIn);\r\n\t\t\tVector3f newEye = fixedCenter + radius * oldEye;\r\n\t\t\tfixedCamera.setLookAt(newEye, fixedCenter, fixedCamera.up());\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tfloat zoomIn = (input.mouseScroll() > 0.0f ? -1.0f : 1.0f);\r\n\t\t\tfixedCamera.orthoRight(fixedCamera.orthoRight() * pow(1.25f, zoomIn));\r\n\t\t\tfixedCamera.orthoTop(fixedCamera.orthoTop() * pow(1.25f, zoomIn));\r\n\t\t\tzoom /= pow(1.25f, zoomIn);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid TrackBall::updateZnearZFar(const Input & input)\r\n\t{\r\n\t\tfloat direction = (input.mouseScroll() > 0 ? 1.0f : -1.0f);\r\n\r\n\t\tif (input.key().isActivatedOnly(Key::Z)) {\r\n\t\t\tfixedCamera.zfar(fixedCamera.zfar()* pow(1.25f, direction));\r\n\t\t\tprintMessage(\" zFar : \" + std::to_string(fixedCamera.zfar()));\r\n\t\t}\r\n\t\telse if (input.key().isActivatedOnly(sibr::Key::Z) && input.key().isActivatedOnly(Key::LeftShift)) {\r\n\t\t\tfixedCamera.znear(fixedCamera.znear()* pow(1.25f, direction));\r\n\t\t\tprintMessage(\" zNear : \" + std::to_string(fixedCamera.znear()));\r\n\t\t}\r\n\t\ttempCamera = fixedCamera;\r\n\t}\r\n\r\n\tbool TrackBall::isInTrackBall2dRegion(const Vector2i & pos2D, const Viewport & viewport) const\r\n\t{\r\n\t\tfloat pos_x = (lastPoint2D.x()) / viewport.finalWidth();\r\n\t\tfloat pos_y = (lastPoint2D.y()) / viewport.finalHeight();\r\n\t\tfloat min_ratio = 0.5f * (1.0f - TrackBall::ratioTrackBall2D);\r\n\t\tfloat max_ratio = 0.5f * (1.0f + TrackBall::ratioTrackBall2D);\r\n\t\treturn pos_x >= min_ratio && pos_x <= max_ratio && pos_y >= min_ratio && pos_y <= max_ratio;\r\n\t}\r\n\r\n\tVector3f TrackBall::mapToSphere(const Vector2i & pos2D, const Viewport & viewport) const\r\n\t{\r\n\t\t\r\n\t\tint xMin = (int)0;\r\n\t\tint xMax = (int)(viewport.finalRight() - viewport.finalLeft());\r\n\t\tint yMin = (int)0;\r\n\t\tint yMax = (int)(viewport.finalBottom() - viewport.finalTop());\r\n\r\n\t\tVector2i clampPos = pos2D.cwiseMin(Vector2i(xMax, yMax)).cwiseMax(Vector2i(xMin, yMin));\r\n\r\n\t\tdouble x = clampPos.x() / (double)viewport.finalWidth() - 0.5;\r\n\t\tdouble y = 0.5 - clampPos.y() / (double)viewport.finalHeight();\r\n\r\n\t\tdouble sinx = sin(M_PI * x * 0.5);\r\n\t\tdouble siny = sin(M_PI * y * 0.5);\r\n\t\tdouble sinx2siny2 = sinx * sinx + siny * siny;\r\n\r\n\t\treturn Vector3d(sinx, siny, sinx2siny2 < 1.0 ? sqrt(1.0 - sinx2siny2) : 0.0).cast<float>();\r\n\t}\r\n\r\n\tVector3f TrackBall::mapTo3Dplane(const Vector2i & pos2D) const\r\n\t{\r\n\t\tsibr::Vector3f worldPos, dir;\r\n\t\tif(fixedCamera.ortho())\r\n\t\t{\r\n\t\t\tworldPos = fixedCamera.position() +\r\n\t\t\t\t\t\t\t\t\t(2.0f*pos2D.x() / (float)fixedCamera.w() - 1.0f)*fixedCamera.orthoRight()*fixedCamera.right()\r\n\t\t\t\t\t\t\t\t\t+ (2.0f*((float)fixedCamera.h() - 1 - pos2D.y()) / (float)fixedCamera.h() - 1.0f)*fixedCamera.orthoTop()*fixedCamera.up();\r\n\t\t\tdir = fixedCamera.dir();\r\n\t\t\t\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdir = CameraRaycaster::computeRayDir(fixedCamera, pos2D.cast<float>()).normalized();\r\n\t\t\tworldPos = fixedCamera.position();\r\n\t\t}\r\n\r\n\t\tEigen::ParametrizedLine<float, 3> line(worldPos, dir);\r\n\t\treturn line.intersectionPoint(trackballPlane);\r\n\t}\r\n\r\n\tbool TrackBall::areClockWise(const Vector2f & a, const Vector2f & b, const Vector2f & c) const\r\n\t{\r\n\t\tVector2f u((b - a).normalized());\r\n\t\tVector2f v((c - b).normalized());\r\n\t\tVector2f uOrtho(u.y(), -u.x());\r\n\t\treturn v.dot(uOrtho) >= 0;\r\n\t}\r\n\r\n\r\n\tvoid TrackBall::initTrackBallShader(void)\r\n\t{\r\n\t\tquadMesh = std::shared_ptr<Mesh>(new Mesh(true));\r\n\r\n\t\tint corners[4][2] = { {-1,-1}, {-1,1}, {1,-1}, {1,1} };\r\n\r\n\t\tstd::vector<float> vertexBuffer;\r\n\t\tfor (int i = 0; i < 4; i++) {\r\n\t\t\tVector3f corner((float)corners[i][0], (float)corners[i][1], 0.0f);\r\n\t\t\tfor (int c = 0; c < 3; c++) {\r\n\t\t\t\tvertexBuffer.push_back(corner[c]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tint indices[6] = { 0, 1, 3, 0, 2, 3 };\r\n\t\tstd::vector<uint> indicesBuffer(&indices[0], &indices[0] + 6);\r\n\r\n\t\tquadMesh->vertices(vertexBuffer);\r\n\t\tquadMesh->triangles(indicesBuffer);\r\n\r\n\t\tstd::string trackBallVertexShader =\r\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\r\n\t\t\t\"out vec2 uv_coord;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tuv_coord = in_vertex.xy;\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tgl_Position = vec4(in_vertex.xy,0.0, 1.0);\t\t\\n\"\r\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\t\tstd::string trackBallFragmentShader =\r\n\t\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform float ratio;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"uniform int mState;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"in vec2 uv_coord;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tfloat minB = -ratio;\t \t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tfloat maxB = +ratio;\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tfloat x = uv_coord.x;\t\t \t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tfloat y = uv_coord.y;\t\t \t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\tbool fragOutside = ( x<minB || x>maxB || y<minB || y>maxB );\t\\n\"\r\n\t\t\t\"\tif( mState == 1 ){\t\t\t\t\t\t\t\t\t\t\t\t\\n\" //plane transl\t\r\n\t\t\t\"\t\tvec2 d = abs(uv_coord ) - vec2(ratio,ratio);\t\t\t\t\\n\"\r\n\t\t\t\"\t\tfloat v = min(max(d.x,d.y),0.0) + length(max(d,0.0));\t\t\\n\"\r\n\t\t\t\"\t\tfloat a =  0.2 * exp( - 5000.0 *v*v );\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\tout_color = vec4(1.0,0.0,0.0,a);\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t} else if (  mState == 2 && fragOutside  ){\t\t\t\t\t\t\\n\" //zoom transl\r\n\t\t\t\"\t\tout_color = vec4(0.0,1.0,0.0,0.1);\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t} else if (  mState == 3 ){\t\t\t\t\t\t\t\t\t\t\\n\" //sphere rot\t\r\n\t\t\t\"\t\tfloat d =  x*x + y*y - ratio*ratio;\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\tfloat a =  0.2 * exp( - 5000.0 *d*d );\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\tout_color = vec4(1.0,0.0,0.0,a);\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t} else if (  mState == 4  ){\t\t\t\t\t\t\t\t\t\\n\" //roll rot\t\r\n\t\t\t\"\t\tfloat d =  x*x + y*y - 0.5*(ratio+1.0)*ratio*ratio;\t\t\t\\n\"\r\n\t\t\t\"\t\tfloat a =  0.2 * exp( - 5000.0 *d*d );\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\tout_color = vec4(0.0,1.0,0.0,a);\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t} else {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t\tout_color = vec4(0.0,0.0,0.0,0.0);\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"\t}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\t\ttrackBallShader.init(\"trackBallShader\", trackBallVertexShader, trackBallFragmentShader);\r\n\r\n\t\tratioTrackBall2Dgpu.init(trackBallShader, \"ratio\");\r\n\t\ttrackBallStateGPU.init(trackBallShader, \"mState\");\r\n\r\n\t\tshadersCompiled = true;\r\n\t}\r\n\r\n\tvoid TrackBall::printMessage(const std::string & msg) const\r\n\t{\r\n\t\tif (verbose) {\r\n\t\t\tstd::cout << msg << std::endl;\r\n\t\t}\r\n\t}\r\n\r\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/TrackBall.h",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n#include <memory>\r\n#include <fstream>\r\n\r\n#include \"Config.hpp\"\r\n#include \"core/graphics/Shader.hpp\"\r\n#include \"core/assets/InputCamera.hpp\"\r\n#include \"ICameraHandler.hpp\"\r\n\r\nnamespace sibr {\r\n\r\n\tclass Viewport;\r\n\tclass Mesh;\r\n\tclass Input;\r\n\tclass Raycaster;\r\n\r\n\t\r\n\t/** Provide a handler to interact using a trackball (based on mouse motions).\r\n\t* \\ingroup sibr_view\r\n\t*/\r\n\tclass SIBR_VIEW_EXPORT TrackBall : public ICameraHandler\r\n\t{\r\n\tpublic:\r\n\t\t/** Constructor\r\n\t\t\\param verbose log updates and infos. \r\n\t\t*/\r\n\t\tTrackBall( bool verbose = false );\r\n\r\n\t\t/** Load a trackball settings from a file on disk.\r\n\t\t\\param filePath path to the file\r\n\t\t\\param viewport current viewport\r\n\t\t\\return a success boolean\r\n\t\t\\note The viewport is needed to fill-in missing info.\r\n\t\t*/\r\n\t\tbool load( std::string & filePath ,  const Viewport & viewport);\r\n\r\n\t\t/** Save trackball settings to a file on disk.\r\n\t\t\\param filePath file path\r\n\t\t*/\r\n\t\tvoid save( std::string & filePath ) const ;\r\n\r\n\t\t/** Update the trackball pose from a reference camera.\r\n\t\t \\param cam the reference camera\r\n\t\t \\param viewport the viewport to use\r\n\t\t \\param radius the default trackball radius to use\r\n\t\t**/\r\n\t\tvoid fromCamera( const InputCamera & cam , const Viewport & viewport , const float & radius = 100.0f );\r\n\r\n\t\t/** Setup the trackball so that a mesh if visible and centered.\r\n\t\t\\param mesh the mesh to show\r\n\t\t\\param viewport the view viewport\r\n\t\t*/\r\n\t\tbool fromMesh( const Mesh & mesh, const Viewport & viewport );\r\n\r\n\t\t/** Setup the trackball so that a region of space if visible and centered.\r\n\t\t\\param box the region of space to cover\r\n\t\t\\param viewport the view viewport\r\n\t\t*/\r\n\t\tbool fromBoundingBox(const Eigen::AlignedBox<float, 3>& box, const Viewport & viewport);\r\n\r\n\t\t/** Update the trackball handler state. the raycaster is used when the user is clicking to center the trackball or panning.\r\n\t\t\t\\param input user input\r\n\t\t\t\\param viewport view viewport\r\n\t\t\t\\param raycaster an optional raycaster\r\n\t\t*/\r\n\t\tvoid update( const Input & input , const Viewport & viewport, std::shared_ptr<Raycaster> raycaster = std::shared_ptr<Raycaster>());\r\n\r\n\t\t/** update the internal aspect ratio.\r\n\t\t\\param viewport the new viewport\r\n\t\t*/\r\n\t\tvoid updateAspectWithViewport(const Viewport & viewport);\r\n\r\n\t\tbool drawThis; ///< Should the trackball overlay be displayed.\r\n\r\n\t\t/** \\return true if the trackball has been initialized */\r\n\t\tbool initialized() const { return hasBeenInitialized; }\r\n\r\n\t\t/// ICameraHandler interface\r\n\t\t/** Update the camera handler state.\r\n\t\t\\param input user input\r\n\t\t\\param deltaTime time elapsed since last udpate\r\n\t\t\\param viewport view viewport\r\n\t\t*/\r\n\t\tvirtual void update(const sibr::Input & input, const float deltaTime, const Viewport & viewport) override;\r\n\r\n\t\t/** \\return the current camera. */\r\n\t\tvirtual const InputCamera & getCamera(void) const override;\r\n\r\n\t\t/** Render on top of the associated view(s).\r\n\t\t\\param viewport the rendering region\r\n\t\t*/\r\n\t\tvirtual void onRender(const sibr::Viewport & viewport) override;\r\n\r\n\tprivate:\r\n\r\n\t\t/** Trackball interaction status. */\r\n\t\tenum class TrackBallState { IDLE, TRANSLATION_PLANE, TRANSLATION_Z, ROTATION_SPHERE, ROTATION_ROLL };\r\n\r\n\t\t/** Map a pixel to a point on the sphere.\r\n\t\t\\param pos2D pixel position\r\n\t\t\\param viewport view viewport\r\n\t\t\\return a 3D point on the sphere\r\n\t\t*/\r\n\t\tVector3f mapToSphere( const Vector2i & pos2D, const Viewport & viewport ) const;\r\n\r\n\r\n\t\t/** Map a pixel to a point on the plane.\r\n\t\t\\param pos2D pixel position\r\n\t\t\\return a 3D point on the plane\r\n\t\t*/\r\n\t\tVector3f mapTo3Dplane( const Vector2i & pos2D ) const;\r\n\r\n\t\t/** update near and far planes.\r\n\t\t\\param input user input\r\n\t\t*/\r\n\t\tvoid updateZnearZFar( const Input & input );\r\n\r\n\t\t/** update the trackball pivot center.\r\n\t\t\\param input user input\r\n\t\t\\param raycaster the scene raycaster\r\n\t\t*/\r\n\t\tvoid updateBallCenter( const Input & input,  std::shared_ptr<Raycaster> raycaster );\r\n\r\n\t\t/** Update the trackball radius.\r\n\t\t\\param input user input\r\n\t\t*/\r\n\t\tvoid updateRadius( const Input & input );\r\n\r\n\t\t/** Update the rotation parameters.\r\n\t\t\\param input user input\r\n\t\t\\param viewport view viewport\r\n\t\t*/\r\n\t\tvoid updateRotationSphere( const Input & input , const Viewport & viewport );\r\n\r\n\t\t/** Update the rotation parameters.\r\n\t\t\\param input user input\r\n\t\t\\param viewport view viewport\r\n\t\t*/\r\n\t\tvoid updateRotationRoll( const Input & input , const Viewport & viewport );\r\n\r\n\t\t/** Update the translation parameters.\r\n\t\t\\param input user input\r\n\t\t\\param viewport view viewport\r\n\t\t\\param raycaster optional scene raycaster\r\n\t\t*/\r\n\t\tvoid updateTranslationPlane( const Input & input , const Viewport & viewport, std::shared_ptr<Raycaster> raycaster = std::shared_ptr<Raycaster>() );\r\n\r\n\t\t/** Update the translation parameters.\r\n\t\t\\param input user input\r\n\t\t\\param viewport view viewport\r\n\t\t*/\r\n\t\tvoid updateTranslationZ( const Input & input , const Viewport & viewport );\r\n\r\n\t\t/** Update based on keys input\r\n\t\t\\param input user input\r\n\t\t*/\r\n\t\tvoid updateFromKeyboard(const Input & input);\r\n\r\n\t\t/** Check if a point is in the central trackball region.\r\n\t\t\\param pos2D position in the view\r\n\t\t\\param viewport view viewport\r\n\t\t\\return true if it falls inside\r\n\t\t*/\r\n\t\tbool isInTrackBall2dRegion( const Vector2i & pos2D, const Viewport & viewport ) const;\r\n\r\n\t\t/**\r\n\t\t * Check if three points are in clockwise order.\r\n\t\t * \\param a first point\r\n\t\t * \\param b second point\r\n\t\t * \\param c third point\r\n\t\t * \\return true if their order is clockwise.\r\n\t\t */\r\n\t\tbool areClockWise( const Vector2f & a, const Vector2f & b, const Vector2f & c ) const;\r\n\r\n\t\t/** Log a message.\r\n\t\t\\param msg essage string\r\n\t\t*/\r\n\t\tvoid printMessage( const std::string & msg ) const;\r\n\r\n\t\t/** Save vector to output stream.\r\n\t\t\\param s stream\r\n\t\t\\param v vector\r\n\t\t*/\r\n\t\tvoid saveVectorInFile( std::ofstream & s , const Vector3f & v ) const ;\r\n\r\n\t\t/** Setup trackball shader. */\r\n\t\tvoid initTrackBallShader( void );\r\n\r\n\t\t/** Set camera attributes\r\n\t\t\\param viewport the viewport to use\r\n\t\t*/\r\n\t\tvoid setCameraAttributes( const Viewport & viewport );\r\n\r\n\t\t/** Update camera size.\r\n\t\t\\param viewport the viewport to use\r\n\t\t*/\r\n\t\tvoid updateTrackBallCameraSize(const Viewport & viewport);\r\n\r\n\t\t/** Update trackball interaction status.\r\n\t\t  \\param input user input\r\n\t\t  \\param viewport the viewport to use\r\n\t\t*/\r\n\t\tvoid updateTrackBallStatus( const Input & input, const Viewport & viewport );\r\n\r\n\t\t/** Main update function.\r\n\t\t  \\param input user input\r\n\t\t  \\param viewport the viewport to use\r\n\t\t  \\param raycaster optional scene raycaster\r\n\t\t*/\r\n\t\tvoid updateTrackBallCamera( const Input & input, const Viewport & viewport ,  std::shared_ptr<Raycaster> raycaster = std::shared_ptr<Raycaster>() );\r\n\r\n\r\n\t\tInputCamera\t\t\t\t\tfixedCamera;\t///< Reference camera.\r\n\t\tInputCamera\t\t\t\t\ttempCamera;\t///< Temp camera.\r\n\r\n\t\tVector3f\t\t\t\t\tfixedCenter; ///< Current center.\r\n\t\tVector3f\t\t\t\t\ttempCenter; ///< Temp center.\r\n\r\n\t\tVector2i\t\t\t\t\tlastPoint2D; ///< Last clicked 2D point.\r\n\t\tVector2i\t\t\t\t\tcurrentPoint2D; ///< Current clicked point.\r\n\r\n\t\tEigen::Hyperplane<float,3>\ttrackballPlane; ///< Trackball translation plane.\r\n\r\n\t\tTrackBallState\t\t\t\tstate; ///< Current status.\r\n\r\n\t\tbool\t\t\t\t\t\thasBeenInitialized; ///< Initialized or not.\r\n\t\tbool\t\t\t\t\t\tverbose; ///< verbose or not.\r\n\r\n\t\tfloat\t\t\t\t\t\tzoom=1.0f;//zoom factor used for ortho cams\r\n\t\t//members used for interaction drawing\r\n\t\tstd::shared_ptr<Mesh>\t\tquadMesh; ///< Supporting mesh for the overlay.\r\n\t\tGLShader\t\t\t\t\ttrackBallShader; ///< Overlay shader.\r\n\t\tGLParameter\t\t\t\t\tratioTrackBall2Dgpu; ///< Aspect ratio.\r\n\t\tGLParameter\t\t\t\t\ttrackBallStateGPU; ///< Trackball state uniform.\r\n\t\tbool\t\t\t\t\t\tshadersCompiled; ///< Are the sahders ready.\r\n\t\tstatic float\t\t\t\tratioTrackBall2D; ///< 2D ratio parameter.\r\n\r\n\t};\r\n\r\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/UIShortcuts.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include <algorithm>\r\n#include <string> \r\n#include <sstream> \r\n#include <iomanip>\r\n#include \"core/view/UIShortcuts.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\t/*static*/ UIShortcuts& UIShortcuts::global( void )\r\n\t{\r\n\t\tstatic UIShortcuts instance;\r\n\t\treturn instance;\r\n\t}\r\n\r\n\tvoid\tUIShortcuts::list( void )\r\n\t{\r\n\t\t// Sort elements in alphabetical order.\r\n\t\tstd::vector<std::pair<std::string, const char *>> elems(_shortcuts.begin(), _shortcuts.end());\r\n\t\tstd::sort(elems.begin(), elems.end(), [](std::pair<std::string, const char *> a, std::pair<std::string, const char *> b) { return b.first < a.first; });\r\n\t\t\r\n\t\tstd::ostringstream oss;\r\n\t\tfor (auto& pair: elems)\r\n\t\t\toss << \"  \" << std::setw(24)<< std::left << pair.first << \" : \" << pair.second << std::endl;\r\n\t\tSIBR_LOG << \"List of Shortcuts:\\n\" << oss.str() << std::endl;\r\n\t}\r\n\r\n\tvoid\tUIShortcuts::add( const std::string& shortcut, const char* desc )\r\n\t{\r\n\t\tstd::string lshortcut = shortcut;\r\n\t\tstd::transform(lshortcut.begin(), lshortcut.end(), lshortcut.begin(), ::tolower);\r\n\r\n\t\tif (_shortcuts.find(lshortcut) == _shortcuts.end())\r\n\t\t\t_shortcuts[lshortcut] = desc;\r\n\t\telse\r\n\t\t{\r\n\t\t\tconst char* current = _shortcuts[lshortcut];\r\n\t\t\tif (current != desc)\r\n\t\t\t{\r\n\t\t\t\tSIBR_ERR << \"conflict with shortcuts.\\n\"\r\n\t\t\t\t\t\"Trying to register:\\n\"\r\n\t\t\t\t\t\"[\" << shortcut << \"] : \" << desc\r\n\t\t\t\t\t<< \"\\nBut already exists as:\\n\"\r\n\t\t\t\t\t\"[\" << shortcut << \"] : \" << current\r\n\t\t\t\t\t<< std::endl;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/UIShortcuts.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include <unordered_map>\r\n# include \"core/view/Config.hpp\"\r\n\r\nnamespace sibr\r\n{\r\n\t/** Register and display keyboard shortcuts.\r\n\t* \\todo The system should be more robust for collision detection.\r\n\t* \\ingroup sibr_view\r\n\t*/\r\n\tclass SIBR_VIEW_EXPORT UIShortcuts\r\n\t{\r\n\tpublic:\r\n\r\n\t\t/** Singleton. */\r\n\t\tstatic UIShortcuts& global( void );\r\n\r\n\t\t/** Print all registered shortcuts. */\r\n\t\tvoid\tlist( void );\r\n\r\n\t\t/** Register a shortcut.\r\n\t\t *\\param shortcut the shortcut keys\r\n\t\t *\\param desc the description\r\n\t\t */\r\n\t\tvoid\tadd( const std::string& shortcut, const char* desc );\r\n\r\n\r\n\tprivate:\r\n\t\tstd::unordered_map<std::string, const char*>\t_shortcuts; ///< List of shortcuts.\r\n\r\n\t};\r\n\r\n\r\n} // namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ViewBase.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n# include \"core/view/ViewBase.hpp\"\n\nnamespace sibr\n{\n\tViewBase::ViewBase(const unsigned int w, const unsigned int h)\n\t{\n\t\t_resolution = Vector2i(w, h);\n\t\t_whichRT = 6; // poisson filling\n\t}\n\n\tvoid \tViewBase::onUpdate(Input& input, const Viewport & vp) {\n\t\tonUpdate(input);\n\t}\n\n\tvoid\t\t\t\tViewBase::setResolution(const Vector2i& size)\n\t{\n\t\t_resolution = size;\n\t}\n\n\tconst Vector2i&\t\t\tViewBase::getResolution( void ) const\n\t{\n\t\treturn _resolution;\n\t}\n\n\tvoid\t\t\t\tViewBase::setFocus(bool focus)\n\t{\n\t\t_focus = focus;\n\t}\n\n\tbool\t\t\t\tViewBase::isFocused(void) const\n\t{\n\t\treturn _focus;\n\t}\n\n\tvoid ViewBase::setName(const std::string& name) {\n\t\t_name = name;\n\t}\n\n\tconst std::string & ViewBase::name() const {\n\t\treturn _name;\n\t}\n\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/ViewBase.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <type_traits>\n\n# include \"core/graphics/Texture.hpp\"\n# include \"core/graphics/Camera.hpp\"\n# include \"core/view/Config.hpp\"\n//# include \"core/view/IBRScene.hpp\"\n#include \"core/graphics/Input.hpp\"\n#include \"core/graphics/Window.hpp\"\n\nnamespace sibr\n{\n\n\t/** Basic view representation. All views should inherit from it. \n\t* Can be added as a subview in a multi-window system.\n\t* \\sa MultiViewBase\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT ViewBase\n\t{\n\tpublic:\n\n\t\ttypedef std::shared_ptr<ViewBase> Ptr;\n\n\t\t/** Constructor.\n\t\t *\\param w view width\n\t\t *\\param h view height\n\t\t */\n\t\tViewBase( const unsigned int w=720, const unsigned int h=480);\n\n\t\t/** Destructor. */\n\t\tvirtual ~ViewBase() = default;\n\n\t\t/* Update state based on user input.\n\t\t * \\param input user input\n\t\t */\n\t\tvirtual void\tonUpdate(Input& input) { }\n\n\t\t/** Render content in a window.\n\t\t *\\param win destination window\n\t\t */\n\t\tvirtual void\tonRender( Window& win)\t\t{ }\n\n\t\t/** Render content in a given rendertarget.\n\t\t *\\param dst destination RT\n\t\t *\\param eye current viewpoint\n\t\t *\\sa IRenderingMode\n\t\t */\n\t\tvirtual void\tonRenderIBR(IRenderTarget& dst, const Camera& eye) {};\n\n\t\t/** Display GUI. */\n\t\tvirtual void\tonGUI() { }\n\n\t\t/** Render content in the currently bound RT, using a specific viewport.\n\t\t * \\param vpRender destination viewport\n\t\t * \\note Used when the view is in a multi-view system.\n\t\t */\n\t\tvirtual void\tonRender(const Viewport & vpRender) {  }\n\n\t\t/** Update state based on user input.\n\t\t * \\param input user input\n\t\t * \\param vp input viewport\n\t\t * \\note Used when the view is in a multi-view system.\n\t\t */\n\t\tvirtual void\tonUpdate(Input& input, const Viewport & vp);\n\n\t\t/** Legacy: Used to mix with previous pass.\n\t\t * \\param prev the previous step RT\n\t\t */\n\t\tvirtual void\tpreRender(RenderTargetRGB& prev) {} ;\n\n\t\t/** Legacy: Set the internal RT to use.\n\t\t *\\param i RT index */\n\t\tvirtual void\t\twhichRT(uint i)\t\t\t{ _whichRT=i; }\n\t\t/** Legacy: \\return the current selected RT ID. */\n\t\tvirtual uint\t\twhichRT(void)\t\t\t{ return _whichRT; }\n\n\t\t/** Set the view resolution.\n\t\t\\param size the new resolution, in pixels.\n\t\t*/\n\t\tvoid\t\t\t\tsetResolution(const Vector2i& size);\n\t\t/**\\return the current resolution. */\n\t\tconst Vector2i&\t\tgetResolution( void ) const;\n\n\t\t/** Toggle view status.\n\t\t\\param act if true, the view is active.\n\t\t*/\n\t\tvoid\t\t\t\tactive(bool act) { _active = act; }\n\t\t/** \\return true if the view is currently active. */\n\t\tbool\t\t\t\tactive() { return _active; }\n\n\t\t/** Toggle view focus (ie the user is interacting with it).\n\t\t\\param focus if true, the view is currently focused \n\t\t*/\n\t\tvoid\t\t\t\tsetFocus(bool focus);\n\t\t/** \\return true if the view is currently focused (ie the user is interacting with it). */\n\t\tbool\t\t\t\tisFocused(void) const;\n\n\t\t\n\t\t/** Define the name of the view (used for disambiguation of GUI, etc.).\n\t\t * \\param name the new name\n\t\t */\n\t\tvoid\t\t\t\tsetName(const std::string & name);\n\n\t\t/** \\return the name of the view. */\n\t\tconst std::string & name() const;\n\t\t\n\tprotected:\n\t\tuint\t\t\t_whichRT; ///< Selected RT id.\n\t\tstd::vector<RenderTargetLum::Ptr>\t_masks; ///< Rendering masks that can beused by some views/renderers.\n\n\t\tbool\t\t\t_active = true; ///< Is the view active.\n\t\tVector2i\t\t_resolution; ///< View resolution.\n\t\tbool\t\t\t_focus = false; ///< Is the view focused.\n\t\tstd::string\t\t_name = \"\"; ///< View name.\n\n\t};\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/Interface.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include \"Interface.h\"\r\n\r\n#include \"MeshViewer.h\"\r\n#include <core/view/InteractiveCameraHandler.hpp>\r\n\r\n#include <imgui/imgui.h>\r\n\r\nnamespace sibr {\r\n\r\n\tMultiViewInterface::MultiViewInterface()\r\n\t{\r\n\t\tnumImgs = 0;\r\n\t\tcurrentLayer = 0;\r\n\t\tcurrentScale = 0;\r\n\t\tgrid = sibr::Vector2i(4, 4);\r\n\t\thightligthChanged = false;\r\n\t\treproMeshMode = sibr::Mesh::FillRenderMode;\r\n\t\treproMeshBackFace = true;\r\n\r\n\t\timagesViewBase = std::make_shared<MultiViewInterfaceView>(this, MultiViewInterfaceView::ViewType::IMAGES);\r\n\t\tmeshViewBase = std::make_shared<MultiViewInterfaceView>(this, MultiViewInterfaceView::ViewType::MESH);\r\n\t}\r\n\r\n\tvoid MultiViewInterface::displayLoop(sibr::Window & window, std::function<void(MultiViewInterface*)> f)\r\n\t{\r\n\t\t\r\n\t\tif (layersData.size() == 0) {\r\n\t\t\tSIBR_ERR << \" cant display interface without image layer added\" << std::endl;\r\n\t\t}\r\n\r\n\t\tutils.initAllShaders();\r\n\r\n\t\tglClearColor(0.8f, 0.8f, 0.8f, 1.0f);\r\n\r\n\t\twindow.size(window.size().x(), (int)std::ceil(window.size().x() / scalesData[0].imRatio));\r\n\r\n\t\tstd::cout << \" window size : \" << window.size().transpose() << std::endl;\r\n\r\n\t\timagesView.viewport = sibr::Viewport(&window.viewport(),0,0,1,1);\r\n\t\timagesView.isActive = true;\r\n\r\n\t\tif (cpuMesh.get()) {\r\n\t\t\tmeshViewer.setMainMesh(*cpuMesh, sibr::Mesh::FillRenderMode, false, true);\r\n\t\t} else {\r\n\t\t\tstd::cout << \" no mesh \" << std::endl;\r\n\t\t}\r\n\t\t\r\n\t\twinSize = window.size().cast<float>();\r\n\r\n\t\twhile (window.isOpened()) {\r\n\r\n\t\t\t//std::cout << \".\" << std::flush;\r\n\r\n\t\t\twindow.makeContextCurrent();\r\n\t\t\tsibr::Input::poll();\r\n\r\n\t\t\twinSize = window.size().cast<float>();\r\n\t\t\timagesInput = sibr::Input::subInput(sibr::Input::global(), imagesView.viewport);\r\n\t\t\tmeshInput = sibr::Input::subInput(sibr::Input::global(), meshView.viewport);\r\n\r\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape)) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tupdate(window, sibr::Input::global());\r\n\r\n\t\t\tonGui();\r\n\r\n\t\t\trender();\r\n\r\n\t\t\tf(this);\r\n\r\n\t\t\twindow.swapBuffer();\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::addCameras(const std::vector<InputCamera::Ptr>& input_cams)\r\n\t{\r\n\t\tcams = input_cams;\r\n\t}\r\n\r\n\tvoid MultiViewInterface::addMesh(const sibr::Mesh::Ptr &mesh)\r\n\t{\r\n\t\tcpuMesh = mesh;\r\n\t\tcpuMesh->generateNormals();\r\n\t}\r\n\r\n\tvoid MultiViewInterface::addMesh(const sibr::Mesh & mesh)\r\n\t{\r\n\t\tcpuMesh = std::make_shared<sibr::Mesh>();\r\n\t\tcpuMesh->vertices(mesh.vertices());\r\n\t\tcpuMesh->triangles(mesh.triangles());\r\n\t\tcpuMesh->generateNormals();\r\n\t}\r\n\r\n\tvoid MultiViewInterface::update(sibr::Window & window, const sibr::Input & input)\r\n\t{\r\n\t\tupdateImageView(imagesView.viewport, imagesInput);\r\n\t\tupdateMeshView(meshInput, window);\t\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateImageView(const sibr::Viewport & viewport, const sibr::Input & input)\r\n\t{\r\n\t\tsibr::Vector2f winSize = viewport.finalSize();\r\n\t\tcurrentActivePos = pixFromScreenPos(input.mousePosition(), winSize);\r\n\t\timagesViewBase->currentActivePos = currentActivePos;\r\n\r\n\t\timgPixelScreenSize = screenPosPixelsFloat({ 0,{ 1,1 } }, winSize) - screenPosPixelsFloat({ 0,{ 0,0 } }, winSize);\r\n\r\n\t\tupdateCurrentLayer(input);\r\n\r\n\t\tif (input.key().isActivated(sibr::Key::LeftShift)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tupdateZoomBox(input, winSize);\r\n\t\t//updateCenter(imagesInput, imagesViewSize);\r\n\t\tupdateZoomScroll(input);\r\n\t\tupdateDrag(input, winSize);\r\n\t}\r\n\r\n\tvoid MultiViewInterface::render()\r\n\t{\r\n\t\trenderImageView(imagesView.viewport);\r\n\r\n\r\n\t\t////if (hightligthChanged) {\r\n\t\t//renderHighlightPixels();\r\n\t\t////}\r\n\t\t//displayHighlightedPixels(sibr::Vector3f(0, 1, 0), 0.15);\r\n\r\n\t\tdisplayMesh(meshView.viewport);\r\n\r\n\t\t//if (sibr::Input::global().key().isActivated(sibr::Key::C)) {\r\n\t\t//\tint r = 50;\r\n\t\t//\tutils.rectanglePixels(sibr::Vector3f(1, 0, 1), sibr::Input::global().mousePosition().cast<float>(), sibr::Vector2f(r, r), true, 0.15f, imagesViewSize);\r\n\t\t//\tutils.circlePixels(sibr::Vector3f(0, 1, 1), sibr::Input::global().mousePosition().cast<float>(), r, true, 0.15f, imagesViewSize);\r\n\t\t//\t\r\n\t\t//}\r\n\r\n\t}\r\n\r\n\tvoid MultiViewInterface::renderImageView(const sibr::Viewport & viewport)\r\n\t{\r\n\t\tsibr::Vector2f imagesViewSize = viewport.finalSize();\r\n\t\tdisplayImages(viewport);\r\n\r\n\t\tdisplayZoom(viewport);\r\n\r\n\t\tif (currentActivePos.isDefined) {\r\n\t\t\thighlightPixel(currentActivePos, viewport);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tsibr::ViewBase::Ptr MultiViewInterface::getViewBase(MultiViewInterfaceView::ViewType type)\r\n\t{\r\n\t\tif (type == MultiViewInterfaceView::ViewType::IMAGES) {\r\n\t\t\treturn sibr::ViewBase::Ptr(imagesViewBase.get());\r\n\t\t} else {\r\n\t\t\treturn sibr::ViewBase::Ptr(meshViewBase.get());\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\tvoid MultiViewInterface::onGui()\r\n\t{\r\n\t\tImGui::Separator();\r\n\t\tif (imagesLayers.size() != 1) {\r\n\t\t\tImGui::SliderInt(\"Laplacian scale\", &currentScale, 0, (int)imagesLayers.size() - 1);\r\n\t\t\tImGui::Separator();\r\n\t\t}\r\n\t\tconst size_t nLayers = layersData.size();\r\n\t\tif (nLayers > 1) {\r\n\t\t\tImGui::Text(\"Image Layers : \");\r\n\t\t\tImGui::Separator();\r\n\r\n\t\t\tfor (size_t n = 0; n < nLayers; ++n) {\r\n\t\t\t\tif (ImGui::Selectable(layersData[n].name.c_str(), currentLayer == n)) {\r\n\t\t\t\t\tcurrentLayer = (int)n;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tImGui::Separator();\r\n\t\t}\r\n\t\tif (currentScale == 0 && currentActivePos.isDefined) {\r\n\t\t\tstd::stringstream ss;\r\n\t\t\tss << \"Image : \" << currentActivePos.im << \", pixel : \" << currentActivePos.pos << std::endl;\r\n\t\t\tImGui::Text(ss.str().c_str());\r\n\t\t\tif (currentActivePos.isDefined) {\r\n\t\t\t\t//std::cout << imagesPtr[currentLayer][currentActivePos.im] << std::endl;\r\n\t\t\t\t//std::cout << imagesPtr[currentLayer][currentActivePos.im]->size() << std::endl;\r\n/*\t\t\t\tif (imagesPtr[currentLayer][currentActivePos.im]) {\r\n\t\t\t\t\tImGui::Text(imagesPtr[currentLayer][currentActivePos.im]->pixelStr(currentActivePos.pos).c_str());\r\n\t\t\t\t}\t*/\t\t\r\n\t\t\t}\r\n\t\t\tImGui::Separator();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//MultiViewInterface::~MultiViewInterface()\r\n\t//{\r\n\t//\tCHECK_GL_ERROR;\r\n\r\n\t//\tCHECK_GL_ERROR;\r\n\t//}\r\n\r\n\tPixPos MultiViewInterface::pixFromScreenPos(const sibr::Vector2i & posScreen, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\tUV01 uvScreen = UV10::from((posScreen.cast<float>()+0.5f*sibr::Vector2f(1,1)).cwiseQuotient(winSize));\r\n\t\t\r\n\t\t//std::cout << uvScreen.transpose() << std::endl;\r\n\r\n\t\tsibr::Vector2f posF = viewRectangle.tl() + (viewRectangle.br() - viewRectangle.tl()).cwiseProduct(uvScreen);\r\n\t\tposF.y() = 1.0f - posF.y();\r\n\t\t\r\n\t\tposF = posF.cwiseProduct(grid.cast<float>());\r\n\r\n\t\t//std::cout << posF.transpose() << \" \" << numImgs << std::endl;\r\n\r\n\t\tif (posF.x() < 0 || posF.y() < 0 || posF.x() >= grid.x() /* || posF.y() >= grid.y()  */ ) {\r\n\t\t\treturn PixPos();\r\n\t\t}\r\n\r\n\t\tint x = (int)std::floor(posF.x());\r\n\t\tint y = (int)std::floor(posF.y());\r\n\t\tsibr::Vector2f frac = posF - sibr::Vector2f(x, y);\r\n\r\n\t\tint n = x + grid.x() * y;\r\n\t\tint j = (int)std::floor(frac.x()*scalesData[currentScale].imSize.x());\r\n\t\tint i = (int)std::floor(frac.y()*scalesData[currentScale].imSize.y());\r\n\r\n\t\tif (n >= numImgs) {\r\n\t\t\treturn PixPos();\r\n\t\t}\r\n\r\n\t\treturn PixPos(n, sibr::Vector2i(j, i));\r\n\t}\r\n\r\n\tUV01 MultiViewInterface::screenPos(const PixPos & pix)\r\n\t{\r\n\t\tsibr::Vector2f pos = (pix.pos.cast<float>().cwiseQuotient(scalesData[currentScale].imSize) +\r\n\t\t\tsibr::Vector2f(pix.im % grid.x(), pix.im / grid.x())).cwiseQuotient(grid.cast<float>());\r\n\t\tpos.y() = 1.0f - pos.y();\r\n\t\treturn UV01::from((pos - viewRectangle.tl()).cwiseQuotient(viewRectangle.br() - viewRectangle.tl()));\r\n\t}\r\n\r\n\tUV01 MultiViewInterface::screenPosPixelCenter(const PixPos & pix)\r\n\t{\r\n\t\tsibr::Vector2f pos = ((pix.pos.cast<float>()+sibr::Vector2f(0.5,0.5)).cwiseQuotient(scalesData[currentScale].imSize) +\r\n\t\t\tsibr::Vector2f(pix.im % grid.x(), pix.im / grid.x())).cwiseQuotient(grid.cast<float>());\r\n\t\tpos.y() = 1.0f - pos.y();\r\n\t\treturn UV01::from((pos - viewRectangle.tl()).cwiseQuotient(viewRectangle.br() - viewRectangle.tl()));\r\n\t}\r\n\r\n\tsibr::Vector2i MultiViewInterface::screenPosPixels(const PixPos & pix, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\treturn (screenPos(pix).cwiseProduct(winSize)).cast<int>();\r\n\t}\r\n\r\n\tsibr::Vector2f MultiViewInterface::screenPosPixelsFloat(const PixPos & pix, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\treturn screenPosPixelCenter(pix).cwiseProduct(winSize);\r\n\t}\r\n\r\n\t//void MultiViewInterface::setupFromImSizeAndNumIm(LayerData & layerData, const sibr::Vector2i & imSize)\r\n\t//{\r\n\t//\timRatio = imSize[0] / (float)imSize[1];\r\n\t//\timSizeF = imSize.cast<float>();\r\n\t//\tnumImgs = numIms;\r\n\t//}\r\n\r\n\tvoid MultiViewInterface::addHighlightPixel(const PixPos & pix, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\thighlightedPixels.push_back(pix);\r\n\t\t//hightligthChanged = true;\r\n\t}\r\n\r\n\tvoid MultiViewInterface::renderHighlightPixels()\r\n\t{\r\n\t\tint pixsSize = (int)highlightedPixels.size();\r\n\r\n\t\tif (pixsSize == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!highlightedPixelsMesh.get()) {\r\n\t\t\thighlightedPixelsMesh = std::make_shared<sibr::Mesh>();\r\n\t\t}\r\n\r\n\t\tsibr::Mesh::Vertices vs(4 * pixsSize);\r\n\t\tsibr::Mesh::Triangles ts(2 * pixsSize);\r\n\r\n\t\tunsigned pixId = 0;\r\n\t\tfor (const auto & pix : highlightedPixels) {\r\n\t\t\tUV11 tl = screenPos(pix);\r\n\t\t\tPixPos otherCorner(pix.im, pix.pos + sibr::Vector2i(1, 1));\r\n\t\t\tUV11 br = screenPos(otherCorner);\r\n\r\n\t\t\tvs[4 * pixId + 0] = { tl.x(), tl.y() , 0 };\r\n\t\t\tvs[4 * pixId + 1] = { tl.x(), br.y() , 0 };\r\n\t\t\tvs[4 * pixId + 2] = { br.x(), br.y() , 0 };\r\n\t\t\tvs[4 * pixId + 3] = { br.x(), tl.y() , 0 };\r\n\r\n\t\t\tts[2 * pixId + 0] = { 4 * pixId + 0,4 * pixId + 1,4 * pixId + 2 };\r\n\t\t\tts[2 * pixId + 1] = { 4 * pixId + 0,4 * pixId + 2,4 * pixId + 3 };\r\n\r\n\t\t\t++pixId;\r\n\t\t}\r\n\r\n\r\n\r\n\t\thighlightedPixelsMesh->vertices(vs);\r\n\t\thighlightedPixelsMesh->triangles(ts);\r\n\r\n\t\t//hightligthChanged = false;\r\n\t}\r\n\r\n\tvoid MultiViewInterface::highlightPixel(const PixPos & pix, const sibr::Viewport & viewport, const sibr::Vector3f & color, const sibr::Vector2f & pixScreenSize)\r\n\t{\r\n\t\tUV01 pixTl = screenPos(pix);\r\n\t\tPixPos otherCorner(pix.im, pix.pos + sibr::Vector2i(1, 1));\r\n\t\tUV01 pixBR = screenPos(otherCorner);\r\n\r\n\t\tviewport.bind();\r\n\t\t\t\t\r\n\t\tif ((pixBR-pixTl).cwiseProduct(viewport.finalSize()).cwiseAbs().minCoeff() < 2.0f) {\r\n\t\t\t//if pixel size in screen space is tinier than 2 screen pix\r\n\t\t\tutils.rectanglePixels(color, 0.5f*(pixTl+pixBR).cwiseProduct(viewport.finalSize()), pixScreenSize, true, 0.15f, viewport.finalSize());\r\n\t\t} else {\t\r\n\t\t\t//otherwise hightligh pixel intirely\r\n\t\t\tutils.rectangle(color, pixTl, pixBR, true, 0.15f);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tvoid MultiViewInterface::displayImages(const sibr::Viewport & viewport)\r\n\t{\r\n\t\t\r\n\t\t\t//const sibr::Vector2f & winSize;\r\n\t\t//std::cout << imagesView.viewport.left() << \" \" << imagesView.viewport.right() << \" \" << imagesView.viewport.top() << \" \" << imagesView.viewport.bottom() << std::endl;\r\n\t\tviewport.bind();\r\n\r\n\t\tviewport.clear(sibr::Vector3f(0.7f, 0.7f, 0.7f));\r\n\t\t//glClear(GL_COLOR_BUFFER_BIT);\r\n\r\n\t\tutils.multiViewShader.begin();\r\n\r\n\t\tutils.numImgsGL.set((int)imagesLayers[currentScale][currentLayer]->depth() - 1);\r\n\t\tsibr::Vector2f gridF = grid.cast<float>();\r\n\t\tutils.gridGL.set(gridF);\r\n\r\n\t\tutils.multiViewTopLeftGL.set(viewRectangle.tl());\r\n\t\tutils.multiViewBottomRightGL.set(viewRectangle.br());\r\n\r\n\t\tglActiveTexture(GL_TEXTURE0);\r\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, imagesLayers[currentScale][currentLayer]->handle());\r\n\t\tsibr::RenderUtility::renderScreenQuad();\r\n\r\n\t\tutils.multiViewShader.end();\r\n\r\n\t\tfor (int i = 0; i <(int)imagesLayers[currentScale][currentLayer]->depth(); ++i) {\r\n\t\t\tUV01 imTl = screenPos(PixPos(i, sibr::Vector2i(0, 0)));\r\n\t\t\tUV01 imBR = screenPos(PixPos(i, scalesData[currentScale].imSize.cast<int>()));\r\n\t\t\tutils.rectangle(sibr::Vector3f(0, 0, 0), imTl, imBR, false, 1.0);\r\n\t\t}\r\n\r\n\t\t//utils.rectangle(sibr::Vector3f(0, 1, 0), UV01(0.25,0.25), UV01(0.75, 0.75), true, 0.15);\r\n\t\t//utils.circle(sibr::Vector3f(0, 0, 1), UV01(0.33, 0.33), 0.1, true, 0.25);\r\n\r\n\t\tif (reproMesh.get()) {\r\n\t\t\tutils.meshViewShader.begin();\r\n\t\t\tutils.alphaMeshGL.set(0.25f);\r\n\t\t\tutils.colorMeshGL.set(sibr::Vector3f(1, 0, 1));\r\n\r\n\t\t\tsibr::Vector2i viewPortSize(imagesView.viewport.finalWidth(), imagesView.viewport.finalHeight());\r\n\r\n\t\t\tEigen::AlignedBox2d winBox;\r\n\t\t\twinBox.extend(sibr::Vector2d(0, 0));\r\n\r\n\t\t\twinBox.extend(viewPortSize.cast<double>());\r\n\t\t\t//std::cout << std::endl;\r\n\r\n\t\t\t//std::cout << \" winbox \" << (winBox.center()-0.5*winBox.diagonal()).transpose() << \" \" << (winBox.center() + 0.5*winBox.diagonal()).transpose() << std::endl;\r\n\t\t\tfor (int i = 0; i <(int)cams.size(); ++i) {\r\n\t\t\t\tutils.mvp.set(cams[i]->viewproj());\r\n\r\n\t\t\t\t//std::cout << i << std::endl;\r\n\t\t\t\tglClearDepth(1.0);\r\n\t\t\t\tglClear(GL_DEPTH_BUFFER_BIT);\r\n\r\n\t\t\t\tsibr::Vector2i tlImgPix = screenPosPixels(PixPos(i, sibr::Vector2i(0, cams[i]->h() - 1)), viewPortSize.cast<float>());\r\n\t\t\t\tsibr::Vector2i brImgPix = screenPosPixels(PixPos(i, sibr::Vector2i(cams[i]->w() - 1, 0)), viewPortSize.cast<float>());\r\n\r\n\t\t\t\tEigen::AlignedBox2d box;\r\n\t\t\t\tbox.extend(tlImgPix.cast<double>());\r\n\t\t\t\tbox.extend(brImgPix.cast<double>());\r\n\t\t\t\t//std::cout << \"\\t box \" << (box.center() - 0.5*box.diagonal()).transpose() << \" \" << (box.center() + 0.5*box.diagonal()).transpose() << std::endl;\r\n\r\n\t\t\t\tEigen::AlignedBox2d renderBox = winBox.intersection(box);\r\n\r\n\t\t\t\tif (renderBox.isEmpty()) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//tlImgPix = renderBox.corner(Eigen::AlignedBox2d::CornerType::BottomLeft).cast<int>();\r\n\t\t\t\t//\tbrImgPix = renderBox.corner(Eigen::AlignedBox2d::CornerType::TopRight).cast<int>();\r\n\t\t\t\t//std::cout << \"\\t renderBox \" << (renderBox.center() - 0.5*renderBox.diagonal()).transpose() << \" \" << (renderBox.center() + 0.5*renderBox.diagonal()).transpose() << std::endl;\r\n\r\n\t\t\t\t//std::cout << tlImgPix.x() << \" \" << tlImgPix.y() << \" \" << (brImgPix - tlImgPix).x() << \" \" << (brImgPix - tlImgPix).y() << std::endl;\r\n\t\t\t\tglViewport(tlImgPix.x(), tlImgPix.y(), std::abs((brImgPix - tlImgPix).x()), std::abs((brImgPix - tlImgPix).y()));\r\n\r\n\t\t\t\treproMesh->render(true, reproMeshBackFace, reproMeshMode);\r\n\t\t\t}\r\n\r\n\t\t\tutils.meshViewShader.end();\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::displayMesh(const sibr::Viewport & viewport)\r\n\t{\r\n\t\tif (meshView.isActive) {\t\t\r\n\t\t\tmeshViewer.render(viewport);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::displayZoom(const sibr::Viewport & viewport)\r\n\t{\r\n\t\tif (zoomSelection.isActive) {\r\n\t\t\tviewport.bind();\r\n\t\t\tUV01 tl = UV01::from(zoomSelection.first.cast<float>().cwiseQuotient(viewport.finalSize()));\r\n\t\t\tUV01 br = UV01::from(zoomSelection.second.cast<float>().cwiseQuotient(viewport.finalSize()));\r\n\t\t\tutils.rectangle(sibr::Vector3f(1, 0, 0), tl, br, true, 0.15f);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::displayHighlightedPixels(const sibr::Vector3f & color, float alpha)\r\n\t{\r\n\t\tif (!highlightedPixelsMesh.get()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tutils.baseShader.begin();\r\n\r\n\t\tutils.scalingGL.set(1.0f);\r\n\t\tutils.translationGL.set(sibr::Vector2f(0, 0));\r\n\t\tutils.colorGL.set(color);\r\n\t\tutils.alphaGL.set(alpha);\r\n\t\tglEnable(GL_BLEND);\r\n\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r\n\t\tglBlendEquation(GL_FUNC_ADD);\r\n\r\n\t\thighlightedPixelsMesh->render(false, false);\r\n\r\n\t\tutils.alphaGL.set(1.0f);\r\n\t\thighlightedPixelsMesh->render(false, false, sibr::Mesh::LineRenderMode);\r\n\r\n\t\tutils.baseShader.end();\r\n\r\n\t\thighlightedPixelsMesh.reset();\r\n\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateMeshView(const sibr::Input & input, sibr::Window & window)\r\n\t{\r\n\r\n\t\tif (meshView.isActive) {\r\n\r\n\t\t\t//meshViewer.trackBall->updateAspectWithViewport(meshView.viewport);\r\n\t\t\tmeshViewer.interactCam->update(input, 1 / 60.f, meshView.viewport);\r\n\r\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Left)) {\r\n\t\t\t\tsibr::Vector2i oldWinSize = window.size();\r\n\t\t\t\twindow.size(oldWinSize.x() /2, oldWinSize.y());\r\n\t\t\t\timagesView.viewport = sibr::Viewport(&window.viewport(), 0, 0, 1, 1);\r\n\t\t\t\t\r\n\t\t\t\tmeshView.isActive = false;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Right)) {\r\n\t\t\t\tsibr::Vector2i oldWinSize = window.size();\r\n\t\t\t\twindow.size(oldWinSize.x() * 2, oldWinSize.y());\r\n\t\t\t\tmeshView.viewport = sibr::Viewport(&window.viewport(), 0.5, 0, 1, 1);\r\n\t\t\t\timagesView.viewport = sibr::Viewport(&window.viewport(), 0, 0, 0.5, 1);\r\n\t\t\t\tmeshViewer.interactCam->setup(cpuMesh, meshView.viewport);\r\n\t\t\t\tmeshView.isActive = true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateMeshView(const sibr::Input & input, const sibr::Viewport & viewport)\r\n\t{\r\n\t\tif (!meshView.isActive && cpuMesh.get() ) {\r\n\t\t\tmeshViewer.setMainMesh(*cpuMesh, sibr::Mesh::FillRenderMode, false, true);\r\n\t\t\tmeshViewer.interactCam->setup(cpuMesh, viewport);\r\n\t\t\tmeshView.isActive = true;\r\n\t\t}\r\n\t\tif (meshView.isActive) {\r\n\t\t\tmeshViewer.interactCam->update(input,1/60.0f, viewport);\r\n\t\t}\t\t\t\t\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateZoomBox(const sibr::Input & input, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\tif (input.key().isPressed(sibr::Key::Q)) {\r\n\t\t\tviewRectangle.center = sibr::Vector2f(0.5, 0.5);\r\n\t\t\tviewRectangle.diagonal = sibr::Vector2f(0.5, 0.5);\r\n\t\t}\r\n\r\n\t\tif (input.mouseButton().isPressed(sibr::Mouse::Code::Right) && !zoomSelection.isActive) {\r\n\t\t\tzoomSelection.isActive = true;\r\n\t\t\tzoomSelection.first = input.mousePosition();\r\n\t\t\tzoomSelection.first.y() = (int)winSize.y() - zoomSelection.first.y() - 1;\r\n\t\t}\r\n\t\tif (input.mouseButton().isActivated(sibr::Mouse::Code::Right) && zoomSelection.isActive) {\r\n\t\t\tzoomSelection.second = input.mousePosition();\r\n\t\t\tzoomSelection.second.y() = (int)winSize.y() - zoomSelection.second.y() - 1;\r\n\t\t}\r\n\t\tif (input.mouseButton().isReleased(sibr::Mouse::Code::Right) && zoomSelection.isActive) {\t\r\n\t\t\tsibr::Vector2f currentTL = (zoomSelection.first.cwiseMin(zoomSelection.second)).cast<float>();\r\n\t\t\tsibr::Vector2f currentBR = (zoomSelection.first.cwiseMax(zoomSelection.second)).cast<float>();\r\n\r\n\t\t\tif (((currentBR - currentTL).array() > sibr::Vector2f(10, 10).array()).all()) {\r\n\t\t\t\t\r\n\r\n\t\t\t\tsibr::Vector2f tlPix = viewRectangle.tl().cwiseProduct(winSize) + (viewRectangle.br() - viewRectangle.tl()).cwiseProduct(currentTL);\r\n\t\t\t\tsibr::Vector2f brPix = viewRectangle.tl().cwiseProduct(winSize) + (viewRectangle.br() - viewRectangle.tl()).cwiseProduct(currentBR);\r\n\r\n\t\t\t\tsibr::Vector2f center = 0.5f*(brPix + tlPix);\r\n\t\t\t\tsibr::Vector2f diag = 0.5f*(brPix - tlPix);\r\n\r\n\t\t\t\tfloat new_ratio = diag.x() / diag.y();\r\n\t\t\t\tfloat target_ratio = scalesData[currentScale].imRatio;\r\n\t\t\t\tif (new_ratio > target_ratio) {\r\n\t\t\t\t\tdiag.y() = diag.x() / target_ratio;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdiag.x() = diag.y() * target_ratio;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tviewRectangle.center = center.cwiseQuotient(winSize);\r\n\t\t\t\tviewRectangle.diagonal = diag.cwiseQuotient(winSize);\r\n\r\n\t\t\t\tzoomSelection.isActive = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateCurrentLayer(const sibr::Input & input)\r\n\t{\r\n\t\tint i = -1;\r\n\r\n\t\tstd::vector<sibr::Key::Code> keys = {\r\n\t\t\tsibr::Key::Num1, sibr::Key::Num2, sibr::Key::Num3, sibr::Key::Num4, sibr::Key::Num5,\r\n\t\t\tsibr::Key::Num6, sibr::Key::Num7, sibr::Key::Num8, sibr::Key::Num9\r\n\t\t};\r\n\r\n\t\tfor (int k = 0; k < (int)keys.size(); ++k) {\r\n\t\t\tif (input.key().isPressed(keys[k])) {\r\n\t\t\t\ti = k;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (i >= 0 && i < (int)imagesLayers.size()) {\r\n\t\t\tcurrentLayer = i;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateZoomScroll(const sibr::Input & input)\r\n\t{\r\n\t\tdouble scroll = input.mouseScroll();\r\n\r\n\t\tif (scroll  != 0) {\t\r\n\t\t\tfloat ratio = (scroll > 0 ? 0.75f : 1.33f);\r\n\t\t\tif (input.key().isActivated(sibr::Key::LeftControl)) {\r\n\t\t\t\tratio *= ratio;\r\n\t\t\t}\r\n\t\t\tviewRectangle.diagonal *= ratio;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateCenter(const sibr::Input & input, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\tif (dclick.detected(input)) {\r\n\t\t\t//std::cout << \"dclick : \" << std::endl;\r\n\t\t\tsibr::Vector2f translation = (dclick.firstPosition.cast<float>().cwiseQuotient(winSize)-sibr::Vector2f(0.5,0.5)).cwiseProduct(viewRectangle.br() - viewRectangle.tl());\r\n\t\t\ttranslation.y() = -translation.y();\r\n\t\t\tviewRectangle.center += translation;\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterface::updateDrag(const sibr::Input & input, const sibr::Vector2f & winSize)\r\n\t{\r\n\t\tif (input.mouseButton().isPressed(sibr::Mouse::Left)) {\r\n\t\t\tdrag.isActive = true;\r\n\t\t\tdrag.position = input.mousePosition();\r\n\t\t\tdrag.center = viewRectangle.center;\r\n\t\t} else if (drag.isActive && input.mouseButton().isReleased(sibr::Mouse::Left)) {\r\n\t\t\tdrag.isActive = false;\r\n\t\t}\r\n\t\tif (drag.isActive && input.mouseButton().isActivated(sibr::Mouse::Left)) {\r\n\t\t\tsibr::Vector2f translation = (input.mousePosition() - drag.position).cast<float>().cwiseQuotient(winSize).cwiseProduct(viewRectangle.br() - viewRectangle.tl());\r\n\t\t\ttranslation.y() = -translation.y();\r\n\t\t\tviewRectangle.center = drag.center - translation;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\tvoid MultiViewInterfaceView::onUpdate(Input & input, const sibr::Viewport & viewport)\r\n\t{\r\n\t\tif (viewType == ViewType::IMAGES) {\r\n\t\t\t//i.imagesInput = input;\r\n\t\t\t//i.imagesView.viewport = viewport;\r\n\t\t\tinterfacePtr->updateImageView(viewport, input);\r\n\t\t} else if (viewType == ViewType::MESH) {\r\n\t\t\tinterfacePtr->updateMeshView(input, viewport);\r\n\t\t}\r\n\t}\r\n\r\n\tvoid MultiViewInterfaceView::onRender(const sibr::Viewport & viewport)\r\n\t{\r\n\t\tif (viewType == ViewType::IMAGES) {\r\n\t\t\tinterfacePtr->renderImageView(viewport);\r\n\t\t\tinterfacePtr->onGui();\r\n\t\t} else if (viewType == ViewType::MESH) {\r\n\t\t\tinterfacePtr->displayMesh(viewport);\r\n\t\t}\r\n\t}\r\n\r\n} //namespace sibr\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/Interface.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"../Config.hpp\"\n#include <core/graphics/Texture.hpp>\n#include <core/graphics/Input.hpp>\n#include <core/graphics/Window.hpp>\n#include <core/assets/InputCamera.hpp>\n#include <map>\n#include \"InterfaceUtils.h\"\n#include \"MeshViewer.h\"\n#include <core/view/ViewBase.hpp>\n\n#include <imgui/imgui.h>\n\n//typedef void (*CallBackFunction)(int event, int x, int y, int flags, void* userdata);\n\nnamespace sibr {\n\tstruct PixPos {\n\t\tPixPos() : im(-1), isDefined(false) {}\n\t\tPixPos(int i, const sibr::Vector2i & px) : im(i), pos(px), isDefined(true) {}\n\t\tvoid cout() const { std::cout << im << \" : \" << pos.transpose() << std::endl; }\n\t\tsibr::Vector2i pos;\n\t\tint im;\n\t\tbool isDefined;\n\t};\n\n\tstruct SubView {\n\t\tSubView() : isActive(false) {}\n\n\t\tsibr::Viewport viewport;\n\t\tbool isActive;\n\t\tsibr::Vector2i getViewportPosition(const sibr::Vector2i & winPos) {\n\t\t\treturn winPos - sibr::Vector2f(viewport.finalLeft(), viewport.finalTop()).cast<int>();\n\t\t}\n\t};\n\n\tstruct ScalingOptions {\n\t\tScalingOptions() : numScale(1), interpolation_method_cv(cv::INTER_CUBIC) {};\n\t\tint numScale;\n\t\tint interpolation_method_cv;\n\t};\n\n\tstruct LayerData {\n\t\tLayerData(const std::string & name) : name(name) { }\n\t\tstd::string name;\n\t};\n\n\tstruct ScaleData {\n\t\tScaleData(const sibr::Vector2i & imSizeI) {\n\t\t\timSize = imSizeI.cast<float>();\n\t\t\timRatio = imSize[0] / (float)imSize[1];\n\t\t}\n\t\tsibr::Vector2f imSize;\n\t\tfloat imRatio;\n\t};\n\n\tclass MultiViewInterface;\n\n\tclass SIBR_VIEW_EXPORT MultiViewInterfaceView : public sibr::ViewBase {\n\t\n\tpublic:\n\t\tenum class ViewType { IMAGES, MESH };\n\n\t\tSIBR_CLASS_PTR(MultiViewInterfaceView);\n\n\t\tMultiViewInterfaceView() {}\n\t\tMultiViewInterfaceView(MultiViewInterface * interfacePtr, ViewType type) : interfacePtr(interfacePtr), viewType(type) {}\n\n\t\tvirtual void\tonRenderIBR(IRenderTarget& /*dst*/, const sibr::Camera& /*eye*/) {}\n\t\t\n\t\tvirtual void\tonUpdate(Input& /*input*/, const sibr::Viewport & viewport);\n\t\tvirtual void\tonRender(const sibr::Viewport & viewport);\n\t\t\n\t\tPixPos currentActivePos;\n\n\tprotected:\n\t\tMultiViewInterface * interfacePtr;\n\t\tViewType viewType;\n\t};\n\n\t/**\n\t\tThis class provides basic rendering utilities for a list of images + a mesh.\n\t\t\\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MultiViewInterface {\n\n\t\tSIBR_CLASS_PTR(MultiViewInterface);\n\n\tpublic:\n\n\t\tMultiViewInterface();\n\n\t\t/**\n\t\t Execute the main display loop, with an optional callback.\n\t\t \\param window the sibr::Window displayed into\n\t\t \\param f an optional callback called at the end of each frame.\n\t\t*/\n\t\tvoid displayLoop(sibr::Window & window, std::function<void(MultiViewInterface*)> = [](MultiViewInterface*){});\n\t\tvoid addCameras(const std::vector<InputCamera::Ptr> & input_cams);\n\t\tvoid addMesh(const sibr::Mesh::Ptr & mesh);\n\t\tvoid addMesh(const sibr::Mesh & mesh);\n\n\t\tvirtual void update(sibr::Window & window, const sibr::Input & input);\n\n\t\tvirtual void updateImageView(const sibr::Viewport & viewport, const sibr::Input & input);\n\n\t\tvirtual void render();\n\n\t\tvoid renderImageView(const sibr::Viewport & viewport);\n\n\t\tsibr::ViewBase::Ptr getViewBase(MultiViewInterfaceView::ViewType type = MultiViewInterfaceView::ViewType::IMAGES);\n\t\tvoid onGui();\n\n\t\t//~MultiViewInterface();\n\n\t\t//virtual void loop();\n\n\t\tsibr::Mesh::Ptr cpuMesh;\n\t\tsibr::Mesh::Ptr reproMesh;\n\t\tsibr::Mesh::RenderMode reproMeshMode;\n\t\tbool reproMeshBackFace;\n\n\t\tsibr::Mesh::Ptr highlightedPixelsMesh;\n\t\tstd::vector<sibr::PixPos> highlightedPixels;\n\t\tbool hightligthChanged;\n\n\t\tsibr::Vector2f imgPixelScreenSize;\n\n\t\tSubView imagesView;\n\t\tSubView meshView;\n\t\t\n\t\tsibr::Input imagesInput;\n\t\tsibr::Input meshInput;\n\n\n\tpublic:\n\t\t//std::unique_ptr<Window> window;\n\n\t\tMultiViewInterfaceView::Ptr imagesViewBase;\n\t\tMultiViewInterfaceView::Ptr meshViewBase;\n\n\t\tInterfaceUtilities utils;\n\n\t\tScalingOptions scalingOptions;\n\t\tstd::map<std::string, int> name_to_layer_map;\n\n\t\tRectangleData viewRectangle;\n\t\tDragData drag;\n\t\tDoubleClick<sibr::Mouse::Left> dclick;\n\t\tSelectionData zoomSelection;\n\t\tsibr::MeshViewer meshViewer;\n\n\t\tstd::vector<InputCamera::Ptr> cams;\n\n\t\tsibr::PixPos currentActivePos;\n\n\t\tsibr::Vector2i grid;\n\t\tsibr::Vector2f imSizeF;\n\t\tsibr::Vector2f winSize;\n\t\tfloat imRatio;\n\n\t\tint currentScale;\n\t\tint currentLayer;\n\t\tint numImgs;\n\t\tstd::vector<std::vector<sibr::ITexture2DArray::Ptr>> imagesLayers; //for each scale, each image layer\n\t\tstd::vector<std::vector<const sibr::IImage*>> imagesPtr;\n\t\tstd::vector<std::vector<sibr::IImage::Ptr> > imagesFromLambdasPtr;\n\t\tstd::vector<LayerData> layersData;\n\t\tstd::vector<ScaleData> scalesData;\n\n\t\tPixPos pixFromScreenPos(const sibr::Vector2i & pos, const sibr::Vector2f & winSize);\n\n\t\tUV01 screenPos(const PixPos & pix);\n\t\tUV01 screenPosPixelCenter(const PixPos & pix);\n\n\t\tsibr::Vector2i screenPosPixels(const PixPos & pix, const sibr::Vector2f & winSize);\n\t\tsibr::Vector2f screenPosPixelsFloat(const PixPos & pix, const sibr::Vector2f & winSize);\n\n\t\tvoid addHighlightPixel(const PixPos & pix, const sibr::Vector2f & winSize);\n\t\tvoid renderHighlightPixels();\n\n\t\tvoid highlightPixel(const PixPos & pix, const sibr::Viewport & viewport, const sibr::Vector3f & color = { 0, 1, 0 }, const sibr::Vector2f & pixScreenSize = { 5.0f,5.0f } );\n\n\t\tvirtual void displayImages(const sibr::Viewport & viewport);\n\t\tvirtual void displayMesh(const sibr::Viewport & viewport);\n\n\t\tvoid displayZoom(const sibr::Viewport & viewport);\n\t\tvoid displayHighlightedPixels(const sibr::Vector3f & color, float alpha);\n\n\t\tvirtual void updateMeshView(const sibr::Input & input, sibr::Window & window);\n\t\tvirtual void updateMeshView(const sibr::Input & input, const sibr::Viewport & viewport);\n\t\tvoid updateZoomBox(const sibr::Input & input, const sibr::Vector2f & winSize);\n\t\tvoid updateCurrentLayer(const sibr::Input & input);\n\t\tvoid updateZoomScroll(const sibr::Input & input);\n\t\tvoid updateCenter(const sibr::Input & input, const sibr::Vector2f & winSize);\n\t\tvoid updateDrag(const sibr::Input & input, const sibr::Vector2f & winSize);\n\n\t\ttemplate<typename T_Type, unsigned int T_NumComp>\n\t\tbool checkNewLayer(const std::vector<sibr::Image<T_Type, T_NumComp> > & images) \n\t\t{\n\t\t\tif (imagesLayers.size() == 0) {\n\t\t\t\timagesLayers.resize(scalingOptions.numScale);\n\t\t\t\tfor (int scale = 0; scale < scalingOptions.numScale; ++scale) {\n\t\t\t\t\tint w_s = static_cast<int>(std::ceil(images[0].w()*pow(2.0f, -scale)));\n\t\t\t\t\tint h_s = static_cast<int>(std::ceil(images[0].h()*pow(2.0f, -scale)));\n\t\t\t\t\tscalesData.push_back(ScaleData(sibr::Vector2i(w_s, h_s)));\n\t\t\t\t}\n\t\t\t\tnumImgs = (int)images.size();\n\t\t\t}\n\n\t\t\tconst auto & baseScaleImageLayer = imagesLayers[0];\n\t\t\tif (baseScaleImageLayer.size() > 0) {\n\t\t\t\tif ((uint)images.size() != baseScaleImageLayer[0]->depth()) {\n\t\t\t\t\tSIBR_ERR << \"not enough images\" << std::endl;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (images.size() == 0) {\n\t\t\t\tSIBR_ERR << \"empty image vector\" << std::endl;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\tpublic:\n\n\t\ttemplate <typename T_Type, unsigned int T_NumComp>\n\t\tvoid addImageLayer(const std::vector<sibr::ImagePtr<T_Type, T_NumComp> > & images, const std::string & name = \"\") {\n\t\t\tstd::vector<sibr::Image<T_Type, T_NumComp> > imgs(images.size());\n\t\t\tfor (int i = 0; i < (int)images.size(); ++i) {\n\t\t\t\timgs[i] = images[i]->clone();\n \t\t\t}\n\t\t\taddImageLayer(imgs, name);\n\t\t}\n\n\t\ttemplate <typename T_Type, unsigned int T_NumComp>\n\t\tvoid addImageLayer(const std::vector<sibr::Image<T_Type, T_NumComp> > & images, const std::string & name = \"\")\n\t\t{\n\t\t\t\n\t\t\tcheckNewLayer(images);\n\n\t\t\tfor (int scale = 0; scale < scalingOptions.numScale; ++scale) {\n\t\t\t\tstd::vector<sibr::Image<T_Type, T_NumComp> > resized_imgs(images.size());\n\t\t\t\tif (scale != 0) {\n#pragma omp parallel for\n\t\t\t\t\tfor (int im = 0; im < (int)images.size(); ++im) {\n\t\t\t\t\t\tconst sibr::Vector2i scaleSize = scalesData[scale].imSize.cast<int>();\n\t\t\t\t\t\tresized_imgs[im] = images[im].resized(scaleSize[0], scaleSize[1], scalingOptions.interpolation_method_cv);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstd::vector<const sibr::IImage*> layerPtrs(images.size()); \n\t\t\t\t\tfor (int im = 0; im < (int)images.size(); ++im) {\n\t\t\t\t\t\tlayerPtrs[im] = &images[im];\n\t\t\t\t\t}\n\t\t\t\t\timagesPtr.push_back(layerPtrs);\n\t\t\t\t}\n\t\t\t\tconst std::vector<sibr::Image<T_Type, T_NumComp> > & imgs = (scale == 0 ?  images : resized_imgs);\n\t\t\t\tauto layer = std::make_shared<sibr::Texture2DArray<T_Type, T_NumComp>>();\n\n\t\t\t\tlayer->createFromImages(imgs);\n\n\t\t\t\tsibr::ITexture2DArray::Ptr layerBase(layer);\n\t\t\t\timagesLayers[scale].push_back(layerBase);\n\t\t\t}\n\n\t\t\tstd::string layerName = (name == \"\" ? \"Layer\" + std::to_string(layersData.size()) : name);\n\t\t\tname_to_layer_map[layerName] = (int)layersData.size();\n\t\t\tlayersData.push_back(LayerData(layerName));\n\t\t\t\n\t\t}\n\n\t\ttemplate <typename T_Type, unsigned int T_NumComp, typename LambdaType>\n\t\tvoid addImageLayerWithLambda(const std::vector<sibr::Image<T_Type, T_NumComp> > & images, LambdaType lambda, const std::string & name = \"\") {\n\t\t\t\n\t\t\tcheckNewLayer(images);\n\n\t\t\tusing Lambda_Out_Image_Type = decltype(lambda(images[0]));\n\t\t\tusing Lambda_Out_Type = typename Lambda_Out_Image_Type::Type;\n\t\t\tconst int Lambda_Out_N = Lambda_Out_Image_Type::e_NumComp;\n\n\t\t\tfor (int scale = 0; scale < scalingOptions.numScale; ++scale) {\n\t\t\t\tstd::vector<sibr::Image<T_Type, T_NumComp> > resized_imgs(images.size());\n\t\t\t\tif (scale != 0) {\n#pragma omp parallel for\n\t\t\t\t\tfor (int im = 0; im < (int)images.size(); ++im) {\n\t\t\t\t\t\tconst sibr::Vector2i scaleSize = scalesData[scale].imSize.cast<int>();\n\t\t\t\t\t\tresized_imgs[im] = images[im].resized(scaleSize[0], scaleSize[1], scalingOptions.interpolation_method_cv);\n\t\t\t\t\t}\n\t\t\t\t} \n\t\t\t\tconst std::vector<sibr::Image<T_Type, T_NumComp> > & imgs = (scale == 0 ? images : resized_imgs);\n\n\t\t\t\tstd::vector<Lambda_Out_Image_Type> lambdaImgs(images.size());\n#pragma omp parallel for\n\t\t\t\tfor (int im = 0; im < (int)images.size(); ++im) {\n\t\t\t\t\tlambdaImgs[im] = lambda(imgs[im]);\n\t\t\t\t\t//sibr::show(lambdaImgs[im], \"test\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (scale == 0) {\n\t\t\t\t\tstd::vector<sibr::IImage::Ptr> firstLayerPtrs(images.size());\n\t\t\t\t\tstd::vector<const sibr::IImage*> layerPtrs(images.size());\n\t\t\t\t\tfor (int im = 0; im < (int)images.size(); ++im) {\n\t\t\t\t\t\tauto lambdaImgPtr = std::make_shared<Lambda_Out_Image_Type>(lambdaImgs[im].clone());\n\n\t\t\t\t\t\tfirstLayerPtrs[im] = std::static_pointer_cast<IImage>(lambdaImgPtr);\n\t\t\t\t\t\tlayerPtrs[im] = firstLayerPtrs[im].get();\n\t\t\t\t\t}\n\t\t\t\t\timagesFromLambdasPtr.push_back(firstLayerPtrs);\n\t\t\t\t\timagesPtr.push_back(layerPtrs);\n\t\t\t\t}\n\n\t\t\t\ttypename sibr::Texture2DArray<Lambda_Out_Type, Lambda_Out_N>::Ptr layer = std::make_shared<sibr::Texture2DArray<Lambda_Out_Type, Lambda_Out_N> >();\n\t\t\t\tlayer->createFromImages(lambdaImgs);\n\t\t\t\tsibr::ITexture2DArray::Ptr layerBase(layer);\n\t\t\t\timagesLayers[scale].push_back(layerBase);\n\t\t\t}\n\n\t\t\tstd::string layerName = (name == \"\" ? \"Layer\" + std::to_string(layersData.size()) : name);\n\t\t\tname_to_layer_map[layerName] = (int)layersData.size();\n\t\t\tlayersData.push_back(LayerData(layerName));\n\t\t}\n\t};\n\n\n} //namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/InterfaceUtils.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"InterfaceUtils.h\"\n\n#include <core/graphics/Mesh.hpp>\n#include <core/graphics/Window.hpp>\n\nnamespace sibr {\n\n\tconst std::string InterfaceUtilities::translationScalingVertexShader =\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec2 translation;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec2 scaling;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\tgl_Position = vec4(scaling*in_vertex.xy+translation,0.0, 1.0);\t\t\\n\"\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\tconst std::string InterfaceUtilities::colorAlphaFragmentShader =\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec3 color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform float alpha;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\t\tout_color = vec4(color,alpha);\t\t\t\t\t\t\t\t\\n\"\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\tconst std::string InterfaceUtilities::meshVertexShader =\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform mat4 mvp;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\tgl_Position = mvp*vec4(in_vertex, 1.0);\t\t\t\t\t\t\\n\"\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\tconst std::string InterfaceUtilities::multiViewVertexShader =\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\n\t\t\"out vec2 uv_coord;\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec2 zoomTL;\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec2 zoomBR;\t\t\t\t\t\t\t\t\\n\"\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\tuv_coord = 0.5*in_vertex.xy + vec2(0.5);\t\t\\n\"\n\t\t\"\tuv_coord = zoomTL + (zoomBR-zoomTL)*uv_coord;\t\\n\"\n\t\t\"\tuv_coord.y = 1.0 - uv_coord.y;\t\t\t\t\t\\n\"\n\t\t\"\tgl_Position = vec4(in_vertex.xy,0.0, 1.0);\t\t\\n\"\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\n\tconst std::string InterfaceUtilities::multiViewFragmentShader =\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"layout(binding = 0) uniform sampler2DArray texArray;\t\t\t\t\\n\"\n\t\t\"uniform int numImgs;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"uniform vec2 grid;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"in vec2 uv_coord;\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\tvec2 uvs = uv_coord;\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"\tuvs =  grid*uvs;\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"  if( uvs.x < 0 || uvs.y < 0 ) { discard; } \t\t\t\t\t\t\\n\"\n\t\t\"   vec2 fracs = fract(uvs); \t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"   vec2 mods = uvs - fracs; \t\t\t\t\t\t\t\t\t\t\\n\"\n\t\t\"   int n = int(mods.x + grid.x*mods.y); \t\t\t\t\t\t\t\\n\"\n\t\t\" if ( n< 0 || n > numImgs || mods.x >= grid.x || mods.y >= (float(numImgs)/grid.x) + 1) { discard; } else { \\n\"\n\t\t\"\tout_color = texture(texArray,vec3(fracs.x,fracs.y,n));\t}\t\t\\n\"\n\t\t\"\t//out_color = vec4(n/64.0,0.0,0.0,1.0); }\t\t\t\t\t\t\\n\"\n\t\t\"\t//out_color = vec4(uv_coord.x,uv_coord.y,0.0,1.0);\t}\t\t\t\\n\"\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\n\n\t//sibr::GLShader InterfaceUtilities::baseShader;\n\n\t//sibr::GLParameter InterfaceUtilities::colorGL;\n\t//sibr::GLParameter InterfaceUtilities::alphaGL;\n\t//sibr::GLParameter InterfaceUtilities::scalingGL;\n\t//sibr::GLParameter InterfaceUtilities::translationGL;\n\n\t//sibr::GLShader InterfaceUtilities::multiViewShader;\n\n\t//sibr::GLParameter InterfaceUtilities::numImgsGL;\n\t//sibr::GLParameter InterfaceUtilities::gridGL;\n\t//sibr::GLParameter InterfaceUtilities::multiViewTopLeftGL;\n\t//sibr::GLParameter InterfaceUtilities::multiViewBottomRightGL;\n\n\t//const InterfaceUtilities::GLinitializer InterfaceUtilities::init;\n\n\tInterfaceUtilities::InterfaceUtilities()\n\t{\n\t\t\n\t}\n\n\tvoid InterfaceUtilities::initAllShaders()\n\t{\n\t\tinitBaseShader();\n\t\tinitMultiViewShader();\n\t\tinitMeshViewShader();\n\t\tCHECK_GL_ERROR;\n\n\t\tstd::cout << \" all shaders compiled\" << std::endl;\n\t}\n\n\tvoid InterfaceUtilities::freeAllShaders()\n\t{\n\t\tCHECK_GL_ERROR;\n\t\tbaseShader.terminate();\n\t\tCHECK_GL_ERROR;\n\t\tmultiViewShader.terminate();\n\t\tCHECK_GL_ERROR;\n\t}\n\n\tvoid InterfaceUtilities::initBaseShader()\n\t{\n\t\tbaseShader.init(\"InterfaceUtilitiesBaseShader\", translationScalingVertexShader, colorAlphaFragmentShader);\n\t\tcolorGL.init(baseShader, \"color\");\n\t\talphaGL.init(baseShader, \"alpha\");\n\t\tscalingGL.init(baseShader, \"scaling\");\n\t\ttranslationGL.init(baseShader, \"translation\");\n\t}\n\n\tvoid InterfaceUtilities::initMultiViewShader()\n\t{\n\t\tmultiViewShader.init(\"InterfaceUtilitiesMultiViewShader\", multiViewVertexShader, multiViewFragmentShader);\n\t\tmultiViewTopLeftGL.init(multiViewShader, \"zoomTL\"); \n\t\tmultiViewBottomRightGL.init(multiViewShader, \"zoomBR\");\n\t\tnumImgsGL.init(multiViewShader, \"numImgs\");\n\t\tgridGL.init(multiViewShader, \"grid\");\n\t}\n\n\tvoid InterfaceUtilities::initMeshViewShader()\n\t{\n\t\tmeshViewShader.init(\"InterfaceUtilitiesMeshViewShader\", meshVertexShader, colorAlphaFragmentShader);\n\t\tmvp.init(meshViewShader,\"mvp\");\n\t\tcolorMeshGL.init(meshViewShader,\"color\");\n\t\talphaMeshGL.init(meshViewShader,\"alpha\");\n\t}\n\n\tvoid InterfaceUtilities::rectangle(const sibr::Vector3f & color, const UV11 & tl, const UV11 & br, bool fill, float alpha)\n\t{\n\n\t\tstatic sibr::Mesh::Ptr rectangleMesh;\n\t\tstatic int lastContextId = -1;\n\n\t\tif (lastContextId != sibr::Window::contextId) {\n\t\t\trectangleMesh = std::make_shared<sibr::Mesh>(true);\n\t\t};\n\t\t\n\t\n\t\tbaseShader.begin();\n\n\t\tscalingGL.set(sibr::Vector2f(1.0f,1.0f));\n\t\ttranslationGL.set(sibr::Vector2f(0, 0));\n\t\tcolorGL.set(color);\n\n\t\trectangleMesh->vertices({\n\t\t\t{ tl.x(), tl.y() , 0 },\n\t\t\t{ tl.x(), br.y() , 0 },\n\t\t\t{ br.x(), br.y() , 0 },\n\t\t\t{ br.x(), tl.y() , 0 }\n\t\t});\n\n\t\tif (fill) {\n\t\t\trectangleMesh->triangles({\n\t\t\t\t{ 0,1,2 },\n\t\t\t\t{ 0,2,3 }\n\t\t\t});\n\n\t\t\talphaGL.set(alpha);\n\t\t\tglEnable(GL_BLEND);\n\t\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t\tglBlendEquation(GL_FUNC_ADD);\n\t\t\trectangleMesh->render(false, false);\n\t\t}\n\t\t\n\t\trectangleMesh->triangles({\n\t\t\t{ 0,0,1 },{ 1,1,2 },{ 2,2,3 },{ 3,3,0 }\n\t\t});\n\n\t\talphaGL.set(1.0f);\n\t\trectangleMesh->render(false, false, sibr::Mesh::LineRenderMode);\n\t\t\n\t\tbaseShader.end();\n\t}\n\n\tvoid InterfaceUtilities::rectanglePixels(const sibr::Vector3f & color, const sibr::Vector2f & center, const sibr::Vector2f & diagonal, bool fill, float alpha, const sibr::Vector2f & winSize)\n\t{\n\t\tUV01 centerUV = UV01::from(center.cwiseQuotient(winSize));\n\t\tUV01 tl = UV01::from(centerUV - 0.5f*diagonal.cwiseQuotient(winSize));\n\t\tUV01 br = UV01::from(centerUV + 0.5f*diagonal.cwiseQuotient(winSize));\n\t\trectangle(color, tl, br, fill, alpha);\n\t}\n\n\tvoid InterfaceUtilities::circle(const sibr::Vector3f & color, const UV11 & center, float radius, bool fill, float alpha, const sibr::Vector2f & scaling, int precision)\n\t{\n\n\t\tstatic int n;\n\t\tstatic sibr::Mesh::Ptr circleMesh;\n\t\tstatic sibr::Mesh::Ptr circleFilledMesh;\n\t\tstatic sibr::Mesh::Triangles circleTriangles;\n\t\tstatic sibr::Mesh::Triangles circleFillTriangles;\n\t\tstatic int lastContextId = -1;\n\n\t\tbool updateMeshes = (lastContextId != sibr::Window::contextId) || (n != precision);\n\t\tif (updateMeshes) {\n\t\t\tlastContextId = sibr::Window::contextId;\n\t\t\tn = precision;\n\t\t\tcircleTriangles.resize(n);\n\t\t\tcircleFillTriangles.resize(n);\n\t\t\tfor (int i = 0; i < n; ++i) {\n\t\t\t\tint next = (i + 1) % n;\n\t\t\t\tcircleTriangles[i] = sibr::Vector3u(i, i, next);\n\t\t\t\tcircleFillTriangles[i] = sibr::Vector3u(i, next, n);\n\t\t\t}\n\n\t\t\tsibr::Mesh::Vertices vertices(n + 1);\n\t\t\tdouble base_angle = 2.0*M_PI / (double)n;\n\t\t\tfloat rho = 0.5f*radius*(float)(1.0 + cos(0.5*base_angle));\n\n\t\t\tfor (int i = 0; i < n; ++i) {\n\t\t\t\tdouble angle = i*base_angle;\n\t\t\t\tvertices[i] = sibr::Vector3f((float)cos(angle), (float)sin(angle), (float)0.0);\n\t\t\t}\n\t\t\tvertices[n] = sibr::Vector3f(0, 0, 0);\n\n\t\t\tcircleMesh = std::make_shared<sibr::Mesh>(true);\n\t\t\tcircleFilledMesh = std::make_shared<sibr::Mesh>(true);\n\t\t\tcircleMesh->vertices(vertices);\n\t\t\tcircleFilledMesh->vertices(vertices);\n\t\t\tcircleMesh->triangles(circleTriangles);\n\t\t\tcircleFilledMesh->triangles(circleFillTriangles);\n\t\t}\n\n\t\tbaseShader.begin();\n\n\t\ttranslationGL.set(sibr::Vector2f(0, 0));\n\n\t\tcolorGL.set(color);\n\t\tscalingGL.set(scaling);\n\t\ttranslationGL.set(center);\n\n\t\tif (fill) {\n\t\t\talphaGL.set(alpha);\n\t\t\tglEnable(GL_BLEND);\n\t\t\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n\t\t\tglBlendEquation(GL_FUNC_ADD);\n\t\t\tcircleFilledMesh->render(false, false);\n\t\t}\n\n\t\talphaGL.set(1.0f);\n\t\tcircleMesh->render(false, false, sibr::Mesh::LineRenderMode);\n\n\t\tbaseShader.end();\n\t}\n\n\tvoid InterfaceUtilities::circlePixels(const sibr::Vector3f & color, const sibr::Vector2f & center, float radius, bool fill, float alpha, const sibr::Vector2f & winSize, int precision)\n\t{\n\t\tUV10 centerUV = UV10::from(center.cwiseQuotient(winSize));\n\t\tsibr::Vector2f scaling = radius*sibr::Vector2f(1, 1).cwiseQuotient(winSize);\n\n\t\tcircle(color, centerUV, 1.0f, fill, alpha, scaling, precision);\n\t}\n\n\tvoid InterfaceUtilities::linePixels(const sibr::Vector3f & color, const sibr::Vector2f & ptA, const sibr::Vector2f & ptB, const sibr::Vector2f & winSize)\n\t{\n\t\tUV11 uvA = UV01::from(ptA.cwiseQuotient(winSize));\n\t\tUV11 uvB = UV01::from(ptB.cwiseQuotient(winSize));\n\t\t\t\n\t\tsibr::Mesh line(true);\n\t\tline.vertices({\n\t\t\t{ uvA.x(), uvA.y(), 0.0f },\n\t\t\t{ uvB.x(), uvB.y(), 0.0f }\n\t\t});\n\t\tline.triangles({\n\t\t\tsibr::Vector3u(0,0,1)\n\t\t});\n\n\t\tbaseShader.begin();\n\n\t\tscalingGL.set(sibr::Vector2f(1.0f, 1.0f));\n\t\ttranslationGL.set(sibr::Vector2f(0, 0));\n\t\tcolorGL.set(color);\n\t\talphaGL.set(1.0f);\n\n\t\tline.render(false, false, sibr::Mesh::LineRenderMode);\n\n\t\tbaseShader.end();\n\t}\n\n\n\n\n} //namespace sibr"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/InterfaceUtils.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n#include \"../Config.hpp\"\n#include <core/graphics/Shader.hpp>\n#include <core/system/SimpleTimer.hpp>\n#include <core/graphics/Input.hpp>\n#include <core/graphics/Window.hpp>\n\n#include <string>\n\n#include <imgui/imgui.h>\n\nnamespace sibr {\n\n\t/**\n\t* \\ingroup sibr_view\n\t*/\n\tenum UVspace { ZERO_ONE, MINUS_ONE_ONE, ONE_ZERO };\n\n\t/**\n\t* \\ingroup sibr_view\n\t*/\n\ttemplate<UVspace space> struct UV : public sibr::Vector2f {\n\n\t\tstatic UV from(const sibr::Vector2f & v) { return UV(v.x(), v.y()); }\n\n\t\tUV(float u, float v) : Vector2f(u, v) {}\n\n\t\t//explicit UV(const sibr::Vector2f & v) : sibr::Vector2f(v) {}\n\n\t\ttemplate<UVspace otherSpace> operator UV<otherSpace>() const;\n\t};\n\n\ttypedef UV<sibr::MINUS_ONE_ONE> UV11;\n\ttypedef UV<sibr::ZERO_ONE> UV01;\n\ttypedef UV<sibr::ONE_ZERO> UV10;\n\n\ttemplate<> template<> inline\n\tUV11::operator UV01() const {\n\t\treturn UV01(0.5f*x() + 1, 0.5f*y() + 1);\n\t}\n\n\ttemplate<> template<> inline\n\tUV01::operator UV11() const {\n\t\treturn UV11(2.0f*x() - 1, 2.0f*y() - 1);\n\t}\n\n\ttemplate<> template<> inline\n\tUV01::operator UV10() const {\n\t\treturn UV10(x(), 1.0f - y());\n\t}\n\n\ttemplate<> template<> inline\n\tUV10::operator UV01() const {\n\t\treturn UV01(x(), 1.0f - y());\n\t}\n\n\ttemplate<> template<> inline\n\tUV10::operator UV11() const {\n\t\treturn UV11(UV01(*this));\n\t}\n\n\ttemplate<> template<> inline\n\tUV11::operator UV10() const {\n\t\treturn UV10(UV01(*this));\n\t}\n\n\t/**\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT InterfaceUtilities\n\t{\n\tpublic:\n\t\tInterfaceUtilities();\n\n\t\tstatic const std::string translationScalingVertexShader;\n\t\tstatic const std::string colorAlphaFragmentShader;\n\n\t\tsibr::GLShader baseShader;\n\n\t\tsibr::GLParameter colorGL;\n\t\tsibr::GLParameter alphaGL;\n\t\tsibr::GLParameter scalingGL;\n\t\tsibr::GLParameter translationGL;\n\n\t\tstatic const std::string multiViewVertexShader;\n\t\tstatic const std::string multiViewFragmentShader;\n\n\t\tstatic const std::string meshVertexShader;\n\t\tstatic const std::string meshAlphaViewFragmentShader;\n\t\tsibr::GLShader meshViewShader;\n\t\tsibr::GLParameter mvp;\n\t\tsibr::GLParameter colorMeshGL;\n\t\tsibr::GLParameter alphaMeshGL;\n\n\t\tsibr::GLShader multiViewShader;\n\n\t\tsibr::GLParameter numImgsGL;\n\t\tsibr::GLParameter gridGL;\n\t\tsibr::GLParameter multiViewTopLeftGL;\n\t\tsibr::GLParameter multiViewBottomRightGL;\n\n\t\tvoid rectangle(const sibr::Vector3f & color, const UV11 & tl, const UV11 & br, bool fill, float alpha); \n\t\tvoid rectanglePixels(const sibr::Vector3f & color, const sibr::Vector2f & center, const sibr::Vector2f & diagonal, bool fill, float alpha, const sibr::Vector2f & winSize);\n\t\tvoid circle(const sibr::Vector3f & color, const UV11 & center, float radius, bool fill, float alpha, const sibr::Vector2f & scaling = sibr::Vector3f(1,1), int precision = 50);\n\t\tvoid circlePixels(const sibr::Vector3f & color, const sibr::Vector2f & center, float radius, bool fill, float alpha, const sibr::Vector2f & winSize, int precision = 50);\n\t\tvoid linePixels(const sibr::Vector3f & color, const sibr::Vector2f & ptA, const sibr::Vector2f & ptB, const sibr::Vector2f & winSize);\n\n\t\tvoid initAllShaders();\n\t\tvoid freeAllShaders();\n\n\tprivate:\n\t\tstruct GLinitializer {\n\t\t\tGLinitializer() {\n\t\t\t\t//InterfaceUtilities::initBaseShader();\n\t\t\t}\n\t\t};\n\n\t\tvoid initBaseShader();\n\t\tvoid initMultiViewShader();\n\t\tvoid initMeshViewShader();\n\n\t\t//const static GLinitializer init;\n\t};\n\n\tstruct RectangleData\n\t{\n\t\tRectangleData() : center({ 0.5, 0.5 }), diagonal({ 0.5, 0.5 }) {}\n\t\tsibr::Vector2f center;\n\t\tsibr::Vector2f diagonal;\n\t\tsibr::Vector2f br() const { return center + diagonal; }\n\t\tsibr::Vector2f tl() const { return center - diagonal; }\n\t};\n\n\tstruct DragData\n\t{\n\t\tDragData() : isActive(false) {}\n\t\tsibr::Vector2f center;\n\t\tsibr::Vector2i position;\n\t\tbool isActive;\n\t};\n\n\tstruct SelectionData\n\t{\n\t\tSelectionData() : isActive(false) {}\n\t\tsibr::Vector2i first;\n\t\tsibr::Vector2i second;\n\t\tbool isActive;\n\n\t};\n\n\ttemplate<sibr::Mouse::Code mKey> struct DoubleClick\n\t{\n\t\tDoubleClick() : detection_timing_in_ms(500) {}\n\n\t\tbool detected(const sibr::Input & input, bool should_be_close = true) {\n\t\t\tif (input.mouseButton().isPressed(mKey)) {\n\t\t\t\t//std::cout << \"timer.deltaTimeFromLastTic<sibr::Timer::s>() : \" << timer.deltaTimeFromLastTic<>() << std::endl;\t\t\t\n\t\t\t\tif (timer.deltaTimeFromLastTic<>() < detection_timing_in_ms && (!should_be_close || (firstPosition - input.mousePosition()).cwiseAbs().maxCoeff() < 10 ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tfirstPosition = input.mousePosition();\n\t\t\t\ttimer.tic();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tdouble detection_timing_in_ms;\n\n\t\tsibr::Timer timer;\n\t\tsibr::Vector2i firstPosition;\n\t};\n\n\ttemplate <typename T_Type, unsigned int T_NumComp>\n\tstatic void show(\n\t\tconst sibr::Texture2DArray<T_Type, T_NumComp> & texArray,\n\t\tsibr::Window * inputWin = nullptr,\n\t\tint w = -1,\n\t\tint h = -1\n\t) {\n\t\tenum Mode { SLICE, GRID };\n\n\t\tsibr::Window * win = inputWin;\n\t\tconst bool inChargeOfWindow = (win == nullptr);\n\t\tconst bool useCustomSize = (w > 0 && h > 0);\n\t\tsibr::Vector2i previousSize;\n\n\t\tif (inChargeOfWindow) {\n\t\t\tsibr::Vector2i winSize = (useCustomSize ? sibr::Vector2i(w, h) : sibr::Vector2i (1600, 1200));\n\t\t\twin = new sibr::Window(winSize[0], winSize[1], \"showTexArray\");\n\t\t} else if (useCustomSize) {\n\t\t\tpreviousSize = win->size();\n\t\t\twin->size(w, h);\n\t\t}\n\t\tMode mode = GRID;\n\n\t\twin->makeContextCurrent();\n\n\t\tsibr::InterfaceUtilities utils;\n\t\tutils.initAllShaders();\n\n\t\tsibr::Vector2i grid(3, 3), previousGrid;\n\t\tsibr::Vector2f TL(0, 0), BR(1, 1);\n\t\tint slice = 1;\n\n\t\tbool renderLoop = true;\n\t\twhile (renderLoop) {\n\t\t\tsibr::Input::poll();\n\t\t\tsibr::Input & input = sibr::Input::global();\n\t\t\tif (input.key().isPressed(sibr::Key::Escape)) {\n\t\t\t\trenderLoop = false;\n\t\t\t\tif (inChargeOfWindow) {\n\t\t\t\t\twin->close();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tImGui::Begin(\"Show setting\");\n\t\t\tif (ImGui::RadioButton(\"Grid\", (int*)&mode, 1)) {\n\t\t\t\tgrid = previousGrid;\n\t\t\t}\n\t\t\tImGui::SameLine();\n\t\t\tImGui::RadioButton(\"Slice\", (int*)&mode, 0);\n\n\t\t\tif (mode == GRID) {\n\t\t\t\tImGui::SliderInt(\"GridX\", &grid[0], 1, texArray.depth());\n\t\t\t\tImGui::SliderInt(\"GridY\", &grid[1], 1, texArray.depth());\n\t\t\t\tpreviousGrid = grid;\n\t\t\t\tTL = { 0, 0 }, BR = { 1,1 };\n\t\t\t} else if (mode == SLICE) {\n\t\t\t\tgrid = sibr::Vector2i(1, 1); \n\t\t\t\tImGui::SliderInt(\"Slice\", &slice, 1, texArray.depth());\n\t\t\t\tTL[1] = -slice + 2;\n\t\t\t\tBR[1] = -slice + 1;\n\t\t\t\t//ImGui::SliderFloat(\"L\", &TL[0], -3, 3);\n\t\t\t\t//ImGui::SliderFloat(\"T\", &TL[1], -3, 3);\n\t\t\t\t//ImGui::SliderFloat(\"R\", &BR[0], -3, 3);\n\t\t\t\t//ImGui::SliderFloat(\"B\", &BR[1], -3, 3);\t\t\n\t\t\t}\n\n\t\t\tImGui::End();\n\n\t\t\tconst auto & viewport = win->viewport();\n\t\t\tviewport.bind();\n\t\t\tviewport.clear(sibr::Vector3f(0.7, 0.7, 0.7));\n\n\t\t\tutils.multiViewShader.begin();\n\n\t\t\tutils.numImgsGL.set((int)texArray.depth() - 1);\n\t\t\tsibr::Vector2f gridF = grid.cast<float>();\n\t\t\tutils.gridGL.set(gridF);\n\n\t\t\tutils.multiViewTopLeftGL.set(TL);\n\t\t\tutils.multiViewBottomRightGL.set(BR);\t\t\n\n\t\t\tglActiveTexture(GL_TEXTURE0);\n\t\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, texArray.handle());\n\t\t\tsibr::RenderUtility::renderScreenQuad();\n\n\t\t\tutils.multiViewShader.end();\n\n\t\t\twin->swapBuffer();\n\t\t}\n\n\t\tif (inChargeOfWindow) {\n\t\t\tdelete win;\n\t\t} else if(useCustomSize) {\n\t\t\twin->size(previousSize[0], previousSize[1]);\n\t\t}\n\t}\n\n\t//class SIBR_VIEW_EXPORT Draw {\n\t//public:\n\t//\tstatic void rectangle(const sibr::Vector3f & color, const UV11 & tl, const UV11 & br, bool fill, float alpha);\n\t//\tstatic void circle(const sibr::Vector3f & color, const UV11 & center, float radius, bool fill, float alpha, int precision = 50);\n\t//};\n\n} // namespace sibr\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/MeshViewer.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#include \"MeshViewer.h\"\r\n\r\n#include <core/graphics/Window.hpp>\r\n#include <core/assets/InputCamera.hpp>\r\n#include <core/graphics/Mesh.hpp>\r\n#include <core/raycaster/Raycaster.hpp>\r\n#include <core/view/InteractiveCameraHandler.hpp>\r\n\r\nconst std::string sibr::MeshRenderer::meshVertexShader =\r\n\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\"uniform mat4 MVP;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\r\n\"layout(location = 1) in vec3 in_color;\t\t\t\t\\n\"\r\n\"layout(location = 3) in vec3 in_normal;\t\t\t\\n\"\r\n\"out vec3 color;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"out vec3 normal;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"out vec3 vertex;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\"\tcolor = in_color;\t\t\t\t\t\t\t\t\\n\"\r\n\"\tnormal = in_normal;\t\t\t\t\t\t\t\t\\n\"\r\n\"\tvertex = in_vertex;\t\t\t\t\t\t\t\t\\n\"\r\n\"\tgl_Position = MVP * vec4(in_vertex,1.0);\t\t\\n\"\r\n\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\nconst std::string sibr::MeshRenderer::meshFragmentShader =\r\n\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\"uniform vec3 light_pos;\t\t\t\t\t\t\t\\n\"\r\n\"uniform vec3 forcedColor = vec3(0.7f,0.7f,0.7f);\t\\n\"\r\n\"in vec3 color;\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\"in vec3 normal;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"in vec3 vertex;\t\t\t\t\t\t\t\t\t\\n\"\r\n\"out vec4 out_color;\t\t\t\t\t\t\t\t\\n\"\r\n\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\"\tfloat kd = 0.3;\t\t\t\t\t\t\t \t\t\\n\"\r\n\"\tfloat ks = 0.2;\t\t\t\t\t\t\t \t\t\\n\"\r\n\"\tvec3 L = normalize(light_pos - vertex);\t\t\t\t\t\t\t \t\t\\n\"\r\n\"\tvec3 N = normalize(normal);\t\t\t\t\t\t\t \t\t\t\\n\"\r\n\"\tvec3 R = 2.0*dot(L,N)*N - N;\t\t\t\t\t\t\t \t\t\\n\"\r\n\"\tvec3 V = L;\t\t//light pos = eye\t\t\t\t\t \t\t\t\\n\"\r\n\"\tvec3 diffuse = max(0.0, dot(L,N))*vec3(1, 1, 1);\t\t\t\t\\n\"\r\n\"\tvec3 specular = max(0.0, dot(R,V))*vec3(1, 1, 1);\t\t\t\t\\n\"\r\n\"\tout_color = vec4((1.0 - kd -ks)*forcedColor + kd*diffuse + ks*specular , 1.0);\t \t\\n\"\r\n\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\nsibr::MeshRenderer::MeshRenderer()\r\n{\r\n\tinitShaders();\r\n\r\n\tresetLinesAndPoints();\r\n\t\r\n}\r\n\r\nvoid sibr::MeshRenderer::render(const sibr::Camera & eye)\r\n{\r\n\tglLineWidth(1.0f);\r\n\tglEnable(GL_BLEND);\r\n\tglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r\n\r\n\tfor (auto & meshParam : listMeshes) {\r\n\t\tif (meshParam.mode == sibr::Mesh::LineRenderMode) {\r\n\t\t\tshaderLines.begin();\r\n\t\t\tmvpLines.set(eye.viewproj());\r\n\t\t\tlineColor.set(meshParam.color);\r\n\t\t\tmeshParam.mesh->render(meshParam.depthTest, false, sibr::Mesh::LineRenderMode);\r\n\t\t\tshaderLines.end();\r\n\t\t} else {\r\n\t\t\tshaderMesh.begin();\r\n\t\t\tconst sibr::Vector3f lightPos = eye.position();\r\n\t\t\tlight_pos.set(lightPos);\r\n\t\t\tmvpMesh.set(eye.viewproj());\r\n\t\t\tforcedColor.set(meshParam.color);\r\n\t\t\tmeshParam.mesh->render(meshParam.depthTest, meshParam.backFaceCulling, meshParam.mode);\r\n\t\t\tshaderMesh.end();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tif (lines.dirty) {\r\n\t\tupdateMeshLines();\r\n\t}\r\n\tshaderLines.begin();\r\n\tmvpLines.set(eye.viewproj());\r\n\tlines.mesh->render(lines.depthTest, false, sibr::Mesh::LineRenderMode);\r\n\tshaderLines.end();\r\n\r\n\tfloat radiusW = 10.0f;\r\n\tglEnable(GL_VERTEX_PROGRAM_POINT_SIZE);\r\n\tglPointSize(radiusW);\r\n\r\n\tif (points.dirty) {\r\n\t\tupdateMeshPoints();\r\n\t}\r\n\tshaderPoints.begin();\r\n\tmvpPoints.set(eye.viewproj());\r\n\tradiusScreen.set(radiusW);\r\n\tpoints.mesh->render(points.depthTest, false, sibr::Mesh::PointRenderMode);\r\n\r\n\tif (specialPoints.get() != nullptr) {\r\n\t\tspecialPoints->render(false, false, sibr::Mesh::PointRenderMode);\r\n\t}\r\n\r\n\tshaderPoints.end();\r\n\r\n\r\n}\r\n\r\nvoid sibr::MeshRenderer::addMesh(std::shared_ptr<sibr::Mesh> meshPtr, sibr::Mesh::RenderMode mode)\r\n{\r\n\tMeshParams mesh;\r\n\tmesh.mesh = meshPtr;\r\n\tmesh.mode = mode;\r\n\tlistMeshes.push_back(mesh);\r\n}\r\n\r\nvoid sibr::MeshRenderer::addLines(const std::vector<sibr::Vector3f>& listPoints, const sibr::Vector3f & color)\r\n{\r\n\tint nLines = (int)listPoints.size() / 2;\r\n\tfor (int l = 0; l < nLines; ++l) {\r\n\t\tlines.points.push_back(listPoints[2 * l]);\r\n\t\tlines.points.push_back(listPoints[2 * l + 1]);\r\n\t\tlines.colors.push_back(color);\r\n\t}\r\n\r\n\tlines.dirty = true;\r\n}\r\n\r\nvoid sibr::MeshRenderer::addPoint(const sibr::Vector3f & point, const sibr::Vector3f & color)\r\n{\r\n\tpoints.points.push_back(point);\r\n\tpoints.colors.push_back(color);\r\n\tpoints.dirty = true;\r\n}\r\n\r\nvoid sibr::MeshRenderer::addPoints(const std::vector<sibr::Vector3f>& list_points, const sibr::Vector3f & color)\r\n{\r\n\tstd::vector<sibr::Vector3f> colors(list_points.size(), color);\r\n\t\r\n\tpoints.points.reserve(points.points.size() + list_points.size());\r\n\tpoints.points.insert(points.points.end(), list_points.begin(), list_points.end());\r\n\r\n\tpoints.colors.reserve(points.colors.size() + colors.size());\r\n\tpoints.colors.insert(points.colors.end(), colors.begin(), colors.end());\r\n\tpoints.dirty = true;\r\n}\r\n\r\nvoid sibr::MeshRenderer::cleanPoints()\r\n{\r\n\tpoints.points.resize(0);\r\n\tpoints.colors.resize(0);\r\n\tpoints.dirty = true;\r\n}\r\n\r\nvoid sibr::MeshRenderer::cleanLines()\r\n{\r\n\tlines.points.resize(0);\r\n\tlines.colors.resize(0);\r\n\tlines.dirty = true;\r\n}\r\n\r\nvoid sibr::MeshRenderer::resetLinesAndPoints()\r\n{\r\n\tlines.mesh = std::shared_ptr<sibr::Mesh>(new sibr::Mesh());\r\n\tpoints.mesh = std::shared_ptr<sibr::Mesh>(new sibr::Mesh());\r\n\tcleanLines();\r\n\tcleanPoints();\r\n}\r\n\r\nvoid sibr::MeshRenderer::resetMeshes()\r\n{\r\n\tlistMeshes.resize(0);\r\n}\r\n\r\nvoid sibr::MeshRenderer::initShaders()\r\n{\r\n\r\n\tshaderMesh.init(\"meshShader\", meshVertexShader, meshFragmentShader);\r\n\tmvpMesh.init(shaderMesh, \"MVP\");\r\n\tlight_pos.init(shaderMesh, \"light_pos\");\r\n\tforcedColor.init(shaderMesh, \"forcedColor\");\r\n\r\n\tstd::string lineVertexShader =\r\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"uniform mat4 MVP;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\r\n\t\t\"layout(location = 1) in vec3 in_color;\t\t\t\\n\"\r\n\t\t\"out vec3 color_vert;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"\tgl_Position = MVP * vec4(in_vertex,1.0);\t\t\\n\"\r\n\t\t\"\tcolor_vert = in_color;\t\t\t\t\t\t\t\\n\"\r\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\tstd::string lineFragmentShader =\r\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"in vec3 color_vert;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"uniform vec3 color;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"\tout_color = vec4( color_vert, 1.0 );\t \t\t\t\t\\n\"\r\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\tshaderLines.init(\"LineShader\", lineVertexShader, lineFragmentShader);\r\n\tmvpLines.init(shaderLines, \"MVP\");\r\n\tlineColor.init(shaderLines, \"color\");\r\n\r\n\tstd::string pointVertexShader =\r\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"uniform mat4 MVP;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"uniform float radiusScreen;\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"layout(location = 0) in vec3 in_vertex;\t\t\t\\n\"\r\n\t\t\"layout(location = 1) in vec3 in_color;\t\t\t\t\\n\"\r\n\t\t\"out vec3 color_vert;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"\tgl_Position = MVP * vec4(in_vertex,1.0);\t\t\\n\"\r\n\t\t\"\tgl_PointSize = radiusScreen;\t\t\t\t\t\t\t\\n\"\r\n\t\t\"\tcolor_vert = in_color;\t\t\t\t\t\t\t\\n\"\r\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\tstd::string pointFragmentShader =\r\n\t\t\"#version 420\t\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"in vec3 color_vert;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"out vec4 out_color;\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"void main(void) {\t\t\t\t\t\t\t\t\t\\n\"\r\n\t\t\"\tout_color = vec4( color_vert, 1.0 );\t \t\t\\n\"\r\n\t\t\"}\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\";\r\n\r\n\tshaderPoints.init(\"PointShader\", pointVertexShader, pointFragmentShader);\r\n\tmvpPoints.init(shaderPoints, \"MVP\");\r\n\tradiusScreen.init(shaderPoints, \"radiusScreen\");\r\n}\r\n\r\nvoid sibr::MeshRenderer::updateMeshPoints(void)\r\n{\r\n\tstd::vector<float> vertexBuffer;\r\n\tfor (int vertex_id = 0; vertex_id<(int)points.points.size(); vertex_id++) {\r\n\t\tfor (int c = 0; c<3; ++c) {\r\n\t\t\tvertexBuffer.push_back(points.points.at(vertex_id)[c]);\r\n\t\t}\r\n\t}\r\n\r\n\tpoints.mesh->vertices(vertexBuffer);\r\n\tpoints.mesh->colors(points.colors);\r\n\r\n\tpoints.dirty = false;\r\n}\r\n\r\nvoid sibr::MeshRenderer::updateMeshLines(void)\r\n{\r\n\tstd::vector<float> vertexBuffer;\r\n\tstd::vector<uint> indicesBuffer(3 * (lines.points.size() / 2));\r\n\tstd::vector<sibr::Vector3f> colors(lines.points.size());\r\n\tfor (int vertex_id = 0; vertex_id<(int)lines.points.size(); vertex_id += 2) {\r\n\t\tfor (int c = 0; c<3; ++c) {\r\n\t\t\tvertexBuffer.push_back(lines.points.at(vertex_id)[c]);\r\n\t\t}\r\n\t\tfor (int c = 0; c<3; ++c) {\r\n\t\t\tvertexBuffer.push_back(lines.points.at(vertex_id + 1)[c]);\r\n\t\t}\r\n\r\n\t\tindicesBuffer.at(3 * (vertex_id / 2)) = vertex_id;\r\n\t\tindicesBuffer.at(3 * (vertex_id / 2) + 1) = vertex_id;\r\n\t\tindicesBuffer.at(3 * (vertex_id / 2) + 2) = vertex_id + 1;\r\n\r\n\t\tcolors.at(vertex_id) = lines.colors.at(vertex_id / 2);\r\n\t\tcolors.at(vertex_id + 1) = lines.colors.at(vertex_id / 2);\r\n\t}\r\n\r\n\tlines.mesh->vertices(vertexBuffer);\r\n\tlines.mesh->colors(colors);\r\n\tlines.mesh->triangles(indicesBuffer);\r\n\r\n\tlines.dirty = false;\r\n}\r\n\r\nsibr::MeshViewer::MeshViewer()\r\n{\r\n\trenderer = std::make_shared<MeshRenderer>();\r\n\tinteractCam = std::make_shared<sibr::InteractiveCameraHandler>(true);\r\n\tinteractCam->setFPSCameraSpeed(1);\r\n\tinteractCam->switchMode(sibr::InteractiveCameraHandler::InteractionMode::TRACKBALL);\r\n\tinChargeOfWindow = false;\r\n\tfpsCounter.init(sibr::Vector2f(10, 10));\r\n}\r\n\r\nsibr::MeshViewer::MeshViewer(const sibr::Vector2i & screenRes, const sibr::Mesh & mesh, bool launchRenderingLoop)\r\n{\r\n\twindow.reset(new Window(screenRes[0], screenRes[1], \"MeshViewer\" ));\r\n\trenderer = std::make_shared<MeshRenderer>();\r\n\tinteractCam = std::make_shared<sibr::InteractiveCameraHandler>(new sibr::InteractiveCameraHandler());\r\n\tinteractCam->setFPSCameraSpeed(1);\r\n\tinteractCam->switchMode(sibr::InteractiveCameraHandler::InteractionMode::TRACKBALL);\r\n\tinChargeOfWindow = true;\r\n\r\n\tsetMainMesh(mesh);\r\n\r\n\tif (launchRenderingLoop) {\r\n\t\trenderLoop();\r\n\t}\r\n}\r\n\r\nvoid sibr::MeshViewer::setMainMesh(const sibr::Mesh & mesh, sibr::Mesh::RenderMode mode, bool updateCam, bool setupRaycaster)\r\n{\r\n\tsetMainMesh(*window, mesh, mode, updateCam, setupRaycaster);\r\n}\r\n\r\nvoid sibr::MeshViewer::setMainMesh(sibr::Window & win, const sibr::Mesh & mesh, sibr::Mesh::RenderMode mode, bool updateCam, bool setupRaycaster)\r\n{\r\n\tsibr::Mesh::Ptr meshGL = std::make_shared<sibr::Mesh>(true);\r\n\tmeshGL->vertices(mesh.vertices());\r\n\tmeshGL->triangles(mesh.triangles());\r\n\tif (mesh.hasNormals()) {\r\n\t\tmeshGL->normals(mesh.normals());\r\n\t}\r\n\r\n\trenderer->resetMeshes();\r\n\trenderer->addMesh(meshGL, mode);\r\n\r\n\tif (updateCam) {\r\n\t\tinteractCam->setup(meshGL, win.viewport());\r\n\t\tinteractCam->getTrackball().fromMesh(*meshGL, win.viewport());\r\n\t}\r\n\r\n\tif (setupRaycaster) {\r\n\t\traycaster = std::make_shared<sibr::Raycaster>();\r\n\t\traycaster->init();\r\n\t\traycaster->addMesh(*meshGL);\r\n\t}\r\n\r\n\tfloat radius;\r\n\tsibr::Vector3f pos;\r\n\tmeshGL->getBoundingSphere(pos, radius);\r\n\tinteractCam->setFPSCameraSpeed(radius/10.0f);\r\n\r\n}\r\n\r\nvoid sibr::MeshViewer::render()\r\n{\r\n\tif (window.get()) {\r\n\t\trender(window->viewport(), interactCam->getCamera());\r\n\t\twindow->swapBuffer();\r\n\t}\r\n}\r\n\r\nvoid sibr::MeshViewer::renderLoop(sibr::Window & window)\r\n{\r\n\tbool doLoop = true;\r\n\r\n\twhile (doLoop && window.isOpened() ) {\r\n\t\tsibr::Input::poll();\r\n\r\n\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape)) {\r\n\t\t\tdoLoop = false;\r\n\t\t}\r\n\r\n\t\tinteractCam->update(sibr::Input::global(), 1 / 60.0f, window.viewport());\r\n\t\t\r\n\t\twindow.viewport().bind();\r\n\t\twindow.viewport().clear(sibr::Vector3f(0.9f, 0.9f, 0.9f));\r\n\t\trenderer->render(interactCam->getCamera());\r\n\t\tinteractCam->onRender(window.viewport());\r\n\r\n\t\twindow.swapBuffer();\r\n\t}\r\n\r\n\t\r\n}\r\n\r\nvoid sibr::MeshViewer::render(const sibr::Viewport & viewport, const sibr::Camera & eye )\r\n{\r\n\tviewport.bind();\r\n\tviewport.clear(sibr::Vector3f(0.9f, 0.9f, 0.9f));\r\n\trenderer->render(eye);\r\n\tinteractCam->onRender(viewport);\r\n\tfpsCounter.update(true);\r\n}\r\n\r\nvoid sibr::MeshViewer::render(const sibr::Viewport & viewport)\r\n{\r\n\trender(viewport, interactCam->getCamera());\r\n}\r\n\r\nvoid sibr::MeshViewer::render(const sibr::Camera & eye)\r\n{\r\n\tif (window.get()) {\r\n\t\trender(window->viewport(), eye);\r\n\t\twindow->swapBuffer();\r\n\t}\r\n}\r\n\r\nvoid sibr::MeshViewer::renderLoop(std::shared_ptr<sibr::Window> otherWindow)\r\n{\r\n\r\n\tif (!otherWindow.get() && !window->isOpened()) {\r\n\t\treturn;\r\n\t}\r\n\tif (otherWindow.get() && !window.get() ) {\r\n\t\twindow = otherWindow;\r\n\t}\r\n\r\n\twhile (window->isOpened()) {\r\n\t\tsibr::Input::poll();\r\n\r\n\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape)) {\r\n\t\t\twindow->close();\r\n\t\t}\r\n\r\n\t\tinteractCam->update(sibr::Input::global(), 1 / 60.0f, window->viewport());\r\n\t\trender();\r\n\t}\r\n\r\n\treset();\r\n}\r\n\r\nvoid sibr::MeshViewer::renderLoop(const std::function<void(MeshViewer*)> & f, bool customRendering, bool doReset)\r\n{\r\n\tbool doRender = true;\r\n\twhile (doRender && window->isOpened()) {\r\n\t\tsibr::Input::poll();\r\n\t\tinput = sibr::Input::global();\r\n\t\tif (input.key().isPressed(sibr::Key::Escape)) {\r\n\t\t\tdoRender = false; \r\n\t\t\tif (inChargeOfWindow) {\r\n\t\t\t\twindow->close();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinteractCam->update(input,1/60.0f, window->viewport());\r\n\r\n\t\tf(this);\r\n\r\n\t\tif (!customRendering) {\r\n\t\t\trender();\r\n\t\t}\r\n\t}\r\n\tif(doReset) {\r\n\t\treset();\r\n\t}\r\n}\r\n\r\nvoid sibr::MeshViewer::reset()\r\n{\r\n\tif (inChargeOfWindow) {\r\n\t\tinteractCam.reset();\r\n\t\trenderer.reset();\r\n\t\traycaster.reset();\r\n\t\twindow.reset();\r\n\t}\r\n\t\r\n}\r\n\r\nvoid sibr::MeshViewer::demo()\r\n{\r\n\tsibr::Mesh::Ptr meshPtr = sibr::Mesh::getTestCube();\r\n\r\n\tsibr::MeshViewer meshViewer(sibr::Vector2i(1600, 1200), *meshPtr);\r\n\r\n\tmeshViewer.renderer->addPoints(meshPtr->vertices(), sibr::Vector3f(0, 1, 0));\r\n\t\r\n\tfor (const auto & tri : meshPtr->triangles()) {\r\n\t\tfor (int k = 0; k < 3; ++k) {\r\n\t\t\tmeshViewer.renderer->addLines( \r\n\t\t\t\t{ meshPtr->vertices()[tri[k]], meshPtr->vertices()[tri[(k + 1) % 3]] },\r\n\t\t\t\tsibr::Vector3f(1, 0, 0));\r\n\t\t}\r\n\t}\r\n\r\n\tmeshViewer.renderLoop();\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/interface/MeshViewer.h",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n#ifndef _DISABLE_EXTENDED_ALIGNED_STORAGE\n# define _DISABLE_EXTENDED_ALIGNED_STORAGE\n#endif\n#include \"../Config.hpp\"\n#include <core/system/Vector.hpp>\n#include <core/graphics/Shader.hpp>\n#include <core/graphics/Mesh.hpp>\n#include <core/graphics/Window.hpp>\n#include <functional>\n#include <core/graphics/Input.hpp>\n#include <core/view/FPSCounter.hpp>\n\nnamespace sibr {\n\n\tclass InteractiveCameraHandler;\n\tclass Raycaster;\n\tclass Camera;\n\n\t/**\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MeshRenderer {\n\n\t\tSIBR_CLASS_PTR(MeshRenderer);\n\n\t\tstruct MeshData {\n\t\t\tMeshData() : dirty(false), depthTest(true) {}\n\n\t\t\tstd::shared_ptr<sibr::Mesh> mesh;\n\t\t\tstd::vector<sibr::Vector3f> points;\n\t\t\tstd::vector<sibr::Vector3f> colors;\n\t\t\tbool dirty;\n\t\t\tbool depthTest;\n\t\t};\n\n\t\tstruct MeshParams {\n\t\t\tMeshParams() : depthTest(true), backFaceCulling(true), color(sibr::Vector3f(0.7f,0.7f,0.7f)) {}\n\t\t\tstd::shared_ptr<sibr::Mesh> mesh;\n\t\t\tsibr::Mesh::RenderMode mode;\n\t\t\tsibr::Vector3f color;\n\t\t\tbool depthTest;\n\t\t\tbool backFaceCulling;\n\t\t};\n\n\tpublic:\n\t\tMeshRenderer();\n\t\tvoid render(const sibr::Camera& viewproj);\n\n\t\tvoid addMesh(std::shared_ptr<sibr::Mesh> meshPtr, sibr::Mesh::RenderMode mode = sibr::Mesh::FillRenderMode );\n\n\t\tvoid addLines(const std::vector<sibr::Vector3f> & listPoints, const sibr::Vector3f & color);\n\n\t\tvoid addPoint(const sibr::Vector3f & point, const sibr::Vector3f & color);\n\t\tvoid addPoints(const std::vector<sibr::Vector3f> & listPoints, const sibr::Vector3f & color);\n\t\tvoid cleanPoints();\n\t\tvoid cleanLines();\n\n\t\tvoid resetLinesAndPoints();\n\t\tvoid resetMeshes();\n\n\t\tstd::vector<MeshParams> & getMeshesParams() { return listMeshes; }\n\n\tpublic:\n\t\tstd::vector<MeshParams> listMeshes;\n\n\t\tMeshData lines;\n\t\tMeshData points;\n\t\tsibr::Mesh::Ptr specialPoints;\n\n\t\tstatic const std::string meshVertexShader;\n\t\tstatic const std::string meshFragmentShader;\n\n\t\tsibr::GLShader\t\t\t\tshaderLines;\n\n\tprivate:\n\n\t\tsibr::GLShader\t\t\t\tshaderMesh;\n\t\tsibr::GLShader\t\t\t\tshaderPoints;\n\n\t\tsibr::GLParameter\t\t\tmvpLines;\n\t\tsibr::GLuniform<sibr::Vector3f>\tlineColor = sibr::Vector3f(1,0,0);\n\t\tsibr::GLParameter\t\t\tmvpPoints;\n\t\tsibr::GLParameter\t\t\tmvpMesh;\n\t\tsibr::GLParameter\t\t\tforcedColor;\n\n\t\tsibr::GLParameter\t\t\tlight_pos;\n\t\tsibr::GLParameter\t\t\tradiusScreen;\n\n\t\n\n\t\tvoid initShaders();\n\t\tvoid updateMeshPoints(void);\n\t\tvoid updateMeshLines(void);\n\n\t};\n\n\t/**\n\t* \\ingroup sibr_view\n\t*/\n\tclass SIBR_VIEW_EXPORT MeshViewer {\n\t\t\n\t\tSIBR_CLASS_PTR(MeshViewer);\n\n\tpublic:\n\t\tMeshViewer();\n\n\t\tMeshViewer(\n\t\t\tconst sibr::Vector2i & screenRes,\n\t\t\tconst sibr::Mesh & mesh = sibr::Mesh(),\n\t\t\tbool launchRenderingLoop = false);\n\n    virtual void setMainMesh(\n      const sibr::Mesh & mesh,\n      sibr::Mesh::RenderMode mode = sibr::Mesh::FillRenderMode,\n      bool updateCam = true,\n      bool setupRaycaster = true\n    );\n\n    virtual void setMainMesh(\n      sibr::Window & win,\n      const sibr::Mesh & mesh,\n      sibr::Mesh::RenderMode mode = sibr::Mesh::FillRenderMode,\n      bool updateCam = true,\n      bool setupRaycaster = true\n    );\n\n    virtual void render(const sibr::Viewport & viewport, const sibr::Camera & eye);\n    virtual void render(const sibr::Viewport & viewport);\n    virtual void render(const sibr::Camera & eye);\n    virtual void render();\n\n    virtual void renderLoop(sibr::Window & window);\n\n\t\tvoid renderLoop(std::shared_ptr<sibr::Window> window);\n\t\tvoid renderLoop(const std::function<void(MeshViewer*)> & f = [](MeshViewer* m){} , bool customRendering = false, bool doReset = true);\n\n    virtual void reset();\n\n    static void demo();\n\n\n\n  public:\n    sibr::Input input;\n    sibr::FPSCounter fpsCounter;\n    std::shared_ptr<sibr::Window>\t\t\twindow;\n    std::shared_ptr<MeshRenderer>\t\t\trenderer;\n    std::shared_ptr<sibr::InteractiveCameraHandler>\t\tinteractCam;\n    std::shared_ptr<sibr::Raycaster>\t\traycaster;\n\n    bool inChargeOfWindow;\n  };\n\n} //namespace sibr\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_mesh.frag",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\nlayout(location = 0) out vec4 out_color;\r\n  \r\nuniform vec3    light_position;\r\nuniform vec3    user_color;                    \r\nuniform float   alpha;\r\nuniform bool    phong_shading;\r\nuniform bool    use_mesh_color;\r\n\r\nin vec3 color;\r\nin vec3 normal;\r\nin vec3 position;            \r\n\r\nvoid main(void) {\r\n\r\n    vec3 col;\r\n    if(use_mesh_color){\r\n        col = color;\r\n    } else {\r\n        col = user_color;\r\n    }\r\n    \r\n    out_color = vec4(col, alpha);\r\n    \r\n    if(phong_shading){\r\n        float kd = 0.2;\r\n        float ks = 0.1;\r\n        vec3 L = normalize(light_position - position);\t\r\n        vec3 N = normalize(normal);\r\n        vec3 R = - reflect(L,N);\r\n        vec3 V = L;\t\t//light pos = eye\r\n        float diffuse = max(0.0, dot(L,N));\r\n        float specular = max(0.0, dot(R,V));\r\n        out_color.xyz = (1.0 - kd - ks)*col + (kd*diffuse + ks*specular)* vec3(1, 1, 1);\r\n    }  \r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_mesh.vert",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\nlayout(location = 0) in vec3 in_vertex;   \r\nlayout(location = 1) in vec3 in_color; \r\nlayout(location = 3) in vec3 in_normal;  \r\n  \r\nuniform mat4 mvp;    \r\n          \r\nout vec3 color;\r\nout vec3 normal;\r\nout vec3 position;                      \r\n\r\nvoid main(void) {\r\n    gl_Position = mvp * vec4(in_vertex, 1.0);\r\n    color = in_color;\r\n    normal = in_normal;\r\n    position = in_vertex;\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_per_triangle_normals.geom",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#version 420\r\n\r\nlayout(triangles) in;\r\nlayout(line_strip, max_vertices = 2) out;\r\n\r\nuniform mat4 mvp;\r\nuniform float normals_size;\r\n\r\nout vec3 color;\r\nout vec3 normal;\r\nout vec3 position;\r\n\r\nvoid main(void) {\r\n\tvec3 a = gl_in[0].gl_Position.xyz;\r\n\tvec3 b = gl_in[1].gl_Position.xyz;\r\n\tvec3 c = gl_in[2].gl_Position.xyz;\r\n\r\n\tvec3 tri_normal = normalize(cross(b-a,c-b));\r\n\tvec3 tri_center = (a+b+c)/3.0;\r\n\tgl_Position = mvp*vec4(tri_center,1.0);\r\n\tcolor = vec3(0.0);\r\n\tnormal = vec3(0.0);\r\n\tposition = vec3(0.0);\r\n\tEmitVertex();\r\n\tgl_Position = mvp*vec4(tri_center + normals_size*tri_normal, 1.0);\r\n\tcolor = vec3(0.0);\r\n\tnormal = vec3(0.0);\r\n\tposition = vec3(0.0);\r\n\tEmitVertex();\r\n\tEndPrimitive();\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_per_triangle_normals.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;   \n\nvoid main(void) {\n    gl_Position = vec4(in_vertex, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_per_vertex_normals.geom",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\nlayout(points) in;\r\nlayout(line_strip, max_vertices = 2) out;\r\n\r\nuniform mat4 mvp;\r\nuniform float normals_size;\r\n\r\nin vec3 normals[];\r\n\r\nout vec3 color;\r\nout vec3 normal;\r\nout vec3 position;\r\n\r\n\r\nvoid main(void) {\r\n\tgl_Position = mvp*(gl_in[0].gl_Position);\r\n\tcolor = vec3(0.0);\r\n\tnormal = vec3(0.0);\r\n\tposition = vec3(0.0);\r\n\tEmitVertex();\r\n\tgl_Position = mvp* vec4(gl_in[0].gl_Position.xyz + normals_size*normals[0],1.0);\r\n\tcolor = vec3(0.0);\r\n\tnormal = vec3(0.0);\r\n\tposition = vec3(0.0);\r\n\tEmitVertex();\r\n\tEndPrimitive();\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_colored_per_vertex_normals.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;   \nlayout(location = 3) in vec3 in_normal;  \n\nout vec3 normals;\n\nvoid main(void) {\n    gl_Position = vec4(in_vertex, 1.0);\n\tnormals = in_normal;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_points.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nuniform vec3 user_color;                    \nuniform float alpha;\nin vec3 color;\n\nvoid main(void) {\n//    out_color = vec4(user_color, alpha);\n    out_color = vec4(color, alpha);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_points.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;   \nlayout(location = 1) in vec3 in_color; \n\nuniform mat4 mvp;    \nuniform int radius;\nout vec3 color;\n\nvoid main(void) {\n    gl_Position = mvp * vec4(in_vertex, 1.0);\n    gl_PointSize = radius;\n    color = in_color;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_uv_tex.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\nlayout(binding = 0) uniform sampler2D input_rgb;\n\nin vec2 out_uv;\n\nuniform float alpha;\n\nvoid main() {\n    out_color = vec4(texture(input_rgb, out_uv).xyz, alpha);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alpha_uv_tex_array.frag",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\nlayout(location = 0) out vec4 out_color;\r\nlayout(binding = 0) uniform sampler2DArray input_rgbs;\r\n\r\nin vec2 out_uv;\r\n\r\nuniform float alpha;\r\nuniform int slice;\r\n\r\nvoid main() {\r\n    vec3 uv_cam = vec3(out_uv, slice);\r\n    out_color = vec4(texture(input_rgbs, uv_cam).xyz, alpha);\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alphaimgview.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D \ttex;\nlayout(location= 0) out vec4 out_color;\n\nin vec2 tex_coord;\nuniform float \t\talpha;\n\nvoid main(void) {\n    vec2 texcoord = tex_coord ;\n    out_color = vec4(texture(tex,texcoord).rgb, alpha);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/alphaimgview.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec2 in_vertex;\nlayout(location = 1) in vec2 in_texcoord;\n\nout vec2 tex_coord;\n\nuniform vec4 imagefit;\n\nvec2\t\tfitTexcoord( vec2 tc ) {\n\ttc.x = tc.x*imagefit[0] + imagefit[2+0];\n\ttc.y = tc.y*imagefit[1] + imagefit[2+1];\n\treturn tc;\n}\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex, 0.0, 1.0);\n\ttex_coord = fitTexcoord(in_texcoord);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/anaglyph.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D left;\nlayout(binding = 1) uniform sampler2D right;\nlayout(location= 0) out vec4 out_color;\n\nin vec2 vertex_coord;\n\nvoid main(void) {\n    vec2 texcoord = (vertex_coord + vec2(1.0)) / 2.0;\n    vec4 cl = texture(left, texcoord);\n    vec4 cr = texture(right, texcoord);\n    out_color = vec4(cl.r, cr.g, cr.b, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/anaglyph.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec2 in_vertex;\n\nout vec2 vertex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex, 0.0, 1.0);\n\tvertex_coord = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/axisgizmo.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nin vec3 axis_color;\nout vec4 out_color;\n\nvoid main(void) {\n    out_color = vec4(axis_color, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/axisgizmo.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_color;\n\nout vec3 axis_color;\n\nvoid main(void) {\n\taxis_color = in_color;\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/camstub.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec3 color;\n\nout vec4 out_color;\n\nvoid main(void) {\n    out_color = vec4(color, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/camstub.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\n\nlayout(location = 0) in vec3 in_vertex;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/depth.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\nlayout(binding  = 0) uniform sampler2D image; /// \\todo TODO: remove\n\n//in vec3 vertex_coord;\n//uniform vec3 iCamPos;\n\nuniform vec2 size;\n\nvoid main(void) {\n  vec2 tC       = gl_FragCoord.xy / size;\n  out_color.xyz = vec3(0.0);//texture(image, tC.xy).xyz;\n  out_color.w   = gl_FragCoord.z;\n  //out_color.w   = distance(vertex_coord, iCamPos);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/depth.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 proj;\n\nlayout(location = 0) in vec3 in_vertex;\n\n//out vec2 texture_coord;\n//out vec3 normal_coord;\n\nvoid main(void) {\n\tgl_Position = proj * vec4(in_vertex,1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/depthonly.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out float out_color;\n\nvoid main(void) {\n  out_color   = gl_FragCoord.z;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/depthonly.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 proj;\n\nlayout(location = 0) in vec3 in_vertex;\n\nvoid main(void) {\n\tgl_Position = proj * vec4(in_vertex,1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/image_viewer.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nin vec2 texcoord;\n\nlayout(binding = 0) uniform sampler2D in_texture;\n\nuniform vec4 minVal = vec4(0.0);\nuniform vec4 maxVal = vec4(1.0);\nuniform vec4 channels = vec4(1.0);\n\nlayout(location = 0) out vec4 out_color;\n\nvoid main(void)\n{\n\tif(any(greaterThan(texcoord, vec2(1.0))) || any(lessThan(texcoord, vec2(0.0)))){\n\t\tdiscard;\n\t}\n\t\n\tvec4 col = texture(in_texture, texcoord);\n\t// Rescale.\n\tout_color = channels*(col - minVal)/(maxVal - minVal);\n\n\t// If only one channel is enabled, no alpha and B&W image.\n\tif(dot(channels, vec4(1.0)) == 1.0){\n\t\tfloat val = dot(out_color, channels);\n\t\tout_color.rgb = vec3(val);\n\t\tout_color.a = 1.0;\n\t}\n\n\t// Ensure visibility when alpha is disabled.\n\tif(channels[3] == 0.0f){\n\t\tout_color.a;\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/image_viewer.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;\n\nuniform float scale;\nuniform vec2 pos;\nuniform vec2 size;\nuniform bool correctRatio;\n\nout vec2 texcoord;\n\nvoid main(void) {\n\tvec2 position = scale * vec2(1.0, correctRatio ? (size.y/size.x) : 1.0) * in_vertex.xy + pos; \n\tgl_Position = vec4(in_vertex.xy, 0.0, 1.0);\n\ttexcoord = position * 0.5 + 0.5;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_color.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec3 lightDir;\n\nout vec4 out_color;\n\nin vec3 color_vert;\nin vec3 vertexPos; \nin vec3 normalPos;\n\nvoid main(void) {\n\tfloat kd = 0.2;\n\tvec3 normal = normalize(normalPos);\n\tvec3 shading = max(0.0,dot(lightDir,normal))*color_vert;\n\t\n\tout_color = vec4( (1.0-kd)*color_vert + kd*shading, 1.0);\n\t//out_color = vec4( normal , 1.0 );\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_color.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\nuniform mat4 invMV;\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_color;\nlayout(location = 3) in vec3 in_normal;\n\nout vec3 color_vert;\nout vec3 vertexPos; \nout vec3 normalPos;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\tvertexPos = vec3(MVP * vec4(in_vertex,1.0));\n\tnormalPos = vec3(invMV*vec4(in_normal,1.0));\n\t\n\tcolor_vert = in_color;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_debugview.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec3 lightDir;\n\nuniform bool hasNormal = true;\nout vec4 out_color;\n\nin vec3 color_vert;\nin vec3 vertexPos; \nin vec3 normalPos;\n\nvoid main(void) {\n\tfloat kd = 0.8;\n\tfloat ks = 0.15;\n\tfloat diffuse = 1.0;\t\n\tfloat specular = 0.0;\n\n\tif(hasNormal){\n\t\tvec3 L = normalize(lightDir);\t\t\t\t\n\t\tvec3 N = normalize(normalPos);\t\t\t\t\t\t\t\n\t\tvec3 R = reflect(L,N);//2.0*dot(L,N)*N - N;\t\t\t\t\t\t\n\t\tvec3 V = L;\t\t\t\t\n\t\tdiffuse = max(0.0, dot(L,N));\t\n\t\tspecular = max(0.0, dot(R,V));\n\t}\n\tout_color.rgb = (1.0-kd-ks)*color_vert + kd*diffuse*color_vert + ks*specular;\n\tout_color.a = 1.0;\n\t\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_debugview.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 MVP;\nuniform mat4 invMV;\nuniform bool hasColor = true;\nuniform vec3 defaultColor = vec3(0.9,0.9,0.9);\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_color;\nlayout(location = 3) in vec3 in_normal;\n\nout vec3 color_vert;\nout vec3 vertexPos; \nout vec3 normalPos;\n\nvoid main(void) {\n\tgl_Position = MVP * vec4(in_vertex,1.0);\n\tvertexPos = vec3(MVP * vec4(in_vertex,1.0));\n\tnormalPos = vec3(vec4(in_normal,1.0));\n\t\n\tcolor_vert = hasColor ? in_color : defaultColor;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_normal.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nin vec3 normal_coord;\n\nvoid main(void) {\n    vec3 color = vec3(normalize(normal_coord));\n\t   color = color * 0.5 + 0.5;\n    out_color = vec4(color, 1.0);\n    //out_color = vec4(dot(normal_coord, vec3(0.58,-0.58,0.08)));\n    if (length(normal_coord) == 0.0) { // no normal present\n        out_color = vec4(0.8);\n    }\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/mesh_normal.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 proj;\n\nlayout(location = 0) in vec3 in_vertex;\n//layout(location = 1) in vec2 in_texcoord;\nlayout(location = 1) in vec3 in_normal;\n\n//out vec2 texture_coord;\nout vec3 normal_coord;\n\nvoid main(void) {\n\tgl_Position = proj * vec4(in_vertex,1.0);\n\t//texture_coord = in_texcoord;\n  normal_coord  = in_normal;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/number.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nin vec2 uv_coord;\n\nuniform float value;\nuniform int count;\n\nout vec4 out_color;\n\nconst float digits[10] = float[](0x69996,0x26222,0x6924F,0x69396,0x99F11,0xF861E,0x68E96,0xF1248,0x69696,0x69716);\n\nfloat printDigit(int digit, vec2 position){\n\t// Margin scaling/shift\n\tposition *= 1.4;\n\tposition -= 0.2;\n\t// Early discard.\n\tif(position.x < 0.0 || position.x > 1.0 || position.y < 0.0 || position.y > 1.0){\n\t\treturn 0.0;\n\t}\n\t// [0,1] -> discrete[0,4]x[0,5]\n\tvec2 newPos = floor(vec2(4.0-4.0*position.x,5.0*position.y));\n\t// -> corresponding bit\n\tfloat index = 4*newPos.y + newPos.x;\n\t// -> get the index-th bit\n\tfloat isIn = mod(floor(digits[digit]/pow(2.0,index)),2.0);\n\treturn isIn;\n}\n\nfloat printPoint(vec2 position){\n\tposition *= 1.4;\n\tposition -= 0.02;\n\tif(position.x < 0.0 || position.x > 1.0 || position.y < 0.0 || position.y > 1.0){\n\t\treturn 0.0;\n\t}\n\treturn length(position - vec2(0.2, 0.4)) < 0.182 ? 1.0 : 0.0;\n\t\n}\n\nvoid main(void) {\n\tfloat deca = printDigit(int(mod(value/10,10)), uv_coord);\n\tfloat unit = printDigit(int(mod(value,10)), uv_coord-vec2(1.0,0.0));\n\tfloat deci = printDigit(int(mod(value*10,10)), uv_coord-vec2(2.5,0.0));\n\tfloat centi = printDigit(int(mod(value*100,10)), uv_coord-vec2(3.5,0.0));\n\tfloat point = printPoint(uv_coord-vec2(2.0,0.0));\n\tfloat color = clamp(deca+unit+deci+centi+point,0.0,1.0);\n  \tout_color = vec4(color,color, color, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/number.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform vec2 position;\nuniform vec2 scale;\nuniform int count;\n\nlayout(location = 0) in vec3 in_vertex;\nout vec2 uv_coord;\n\nvoid main(void) {\n\tuv_coord = vec2(count+0.5, 1.0) * (in_vertex.xy * 0.5 + 0.5);\n\tgl_Position = vec4(scale * vec2(count, 1.0) * (in_vertex.xy - position) + position,0.0, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/skybox.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#version 420\n\nlayout(binding = 0) uniform samplerCube in_CubeMap;\nlayout(location= 0) out vec4 out_Color;\n\nin VSOUT\n{\n  vec3 tc;\n} in_Frag;\n\nvoid main(void)\n{\n  out_Color = texture(in_CubeMap, in_Frag.tc);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/skybox.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n#version 420\n\nout VSOUT\n{\n  vec3 tc;\n} out_Vert;\n\nuniform mat4 in_View;\nuniform vec2 in_Aspect;\n\n\nconst float fov = 70.0;\nconst float vecZ = in_Aspect.y / tan(radians(fov / 2.0));\n//const float vecZ = 0.8033332538;\n\nmat3 rotationMatrix(vec3 axis, float angle)\n{\n  axis = normalize(axis);\n  float s = sin(angle);\n  float c = cos(angle);\n  float oc = 1.0 - c;\n  return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,\n\t      oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,\n\t      oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c);\n}\n\nvoid main(void)\n{\n\n  vec2[4] vertices = vec2[4](vec2(-1.0, -1.0),\n  \t\t\t     vec2( 1.0, -1.0),\n  \t\t\t     vec2(-1.0,  1.0),\n  \t\t\t     vec2( 1.0,  1.0));\n\n\n  vec3 vertex = vec3(vertices[gl_VertexID], -1.0);\n\n  // out gl_Position\n  gl_Position = vec4(vertex, 1.0);\n\n  vertex.y = vertex.y * in_Aspect.y;\n  vertex.z = -vecZ;\n\n  out_Vert.tc = mat3(in_View) * vertex;\n  //out_Vert.tc = rotationMatrix(vec3(1,0,0), -1.14) * out_Vert.tc;\n  out_Vert.tc.z = -out_Vert.tc.z;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/text-imgui.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout (location = 0) out vec4 fragColor;\n\nin INTERFACE {\n\tvec4 col;\n\tvec2 uv;\n} In ;\n\nuniform sampler2D tex;\n\nvoid main(){\n\tfragColor = In.col * texture(tex, In.uv);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/text-imgui.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n// Attributes\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 1) in vec3 in_color;\nlayout(location = 2) in vec2 in_uv;\n//layout(location = 3) in vec3 in_normal;\n\n// Uniforms\nuniform vec3 position = vec3(0.0,0.0,0.0); // Position in NDC space\nuniform float scale = 1.0;\nuniform vec2 viewport = vec2(1.0);\nuniform bool forceOpacity = true;\n\nout INTERFACE {\n\tvec4 col;\n\tvec2 uv;\n} Out ;\n\nvoid main(){\n\t// Should be in -1,1\n\t// Multiply by the w component to stay at a constant screen size.\n\tgl_Position = vec4(position.xy+scale*in_vertex.xy/viewport, 0.0, 1.0);\n\tOut.uv = in_uv;\n\tOut.col = vec4(in_color, forceOpacity ? 1.0 : in_vertex.z);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/texture.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D tex;\nlayout(location= 0) out vec4 out_color;\n\nin vec2 tex_coord;\n\nvoid main(void) {\n    vec2 texcoord = tex_coord ;\n    out_color = texture(tex,texcoord);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/texture.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec2 in_vertex;\nlayout(location = 1) in vec2 in_texcoord;\n\nout vec2 tex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex, 0.0, 1.0);\n\ttex_coord = in_texcoord;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/topview.fp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/**\n * \\file topview.fp\n *\n * Basic shader to render textured/colored geometry\n */\n\n#version 420\n\nlayout(binding = 0) uniform sampler2D tex;/**< Input texture */\nlayout(location= 0) out vec4 out_color;   /**< Output texture map */\n\nuniform vec4 in_color;                    /**< Uniform color */\nin vec4 texcoord;                         /**< Texture coords at current pixel */\n\nvoid main(void) {\n  vec4 c1 = texture(tex,texcoord.xy);\n  vec4 c2 = in_color;\n  out_color = c2.a*in_color + clamp(1.0-c2.a,0.0,1.0)*c1;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/topview.vp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/** \\file topview.vp\n *\n * Vertex shader with projection and modelview transformations\n * for rendering top view\n */\n\n#version 420\n\nlayout(location = 0) in vec4 in_vertex;   /**< Input vertex coordinates */\nlayout(location = 1) in vec4 in_texcoord; /**< Input texture coordinates */\n\nuniform mat4 proj;                        /**< Projection matrix */\nout vec4 texcoord;                        /**< Output texture coordinates */\n\nvoid main(void) {\n  gl_Position = proj * in_vertex;\n  texcoord    = in_texcoord;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/shaders/uv_mesh.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 2) in vec2 in_uv;\n\nout vec2 out_uv;\n\nuniform mat4 mvp;\n\nvoid main() {\n    out_uv = in_uv;\n    gl_Position = mvp * vec4(in_vertex, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/core/view/sibr_view.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*! \n\t\\defgroup sibr_view sibr_view\n\n\t\\brief View, camera, high-level rendering utilities. \n\t\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(sibr_dataset_tools_all)\n\nadd_subdirectory(preprocess)\n\ninclude(install_runtime)\nsubdirectory_target(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR} \"projects/dataset_tools\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/documentation/dataset_tools.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page sibr_projects_dataset_tools Dataset Preprocessing Tools\n\nThis page contains the documentation for various tools developed for treating multi-view datasets used for image-based rendering. These deal with calibrated cameras (typically with Structure-from-Motion / SfM), 3D meshes reconstructed with SfM and Multi-View Stereo (MVS) and various other utilities.\n\nFor information on datasets, see the @ref howto_generate_dataset.\n\nWe next present a set preprocessing tools used in the various toolchains to prepare data for IBR *Projects*.\n\n\\subsection sibr_projects_dataset_tools_preprocess_tools Preprocessing tools\n\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_cameraConverter cameraConverter\n\nUtility to convert between camera path formats (blender: .lookAt, bundler: .out, colmap: .txt, internal binary format: .bin,...). This is useful for comparisons (see the \\ref comparisonsPage)\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_clippingPlanes clippingPlanes\n\nCalculates near and far planes for each image and writes to file clipping_planes.txt. This is used while creating the dataset. In some cases (e.g., [Chaurasia 13] and [Ortiz-Cayon 15] we need to have the same clipping planes for all images).\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_converters converters\n\nConverters include python scripts to generate various files. In *install/scripts*, run\n```\npython generate_list_images.py --imagesPath IMAGESPATH\n\n[--outputPath OUTPUTPATH ]\n[--filename FILENAME ]\n```\nThat generates \"list_images.txt\" file in a directory IMAGESPATH containing images, optional arguments are the outputpath and filename.\n\n```\nibr_preprocess_rc_to_sibr.py\n```\nSee \\ref howto_generate_dataset \n\n```\nsimplify_mesh.py\n```\nUsed in *fullcolmapProcess* (see below), and uses *meshlabServer* to simplify a mesh.\n\n```\nwedge_to_vertices_uvs.py\n```\nconverts a mesh from wedge uvs to vertex uvs, again using *meshlabServer*.\n\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_cropFromCenter cropFromCenter\n\nUtility to crop images so they are centered and have the same size. Used for preprocessing in [Chaurasia 13] and [Ortiz-Cayon 15].\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_distordCrop distordCrop\n\nUndistort images and then send to *cropFromCenter* above.\n\n\\subpage sibr_projects_dataset_tools_preprocess_tools_fullColmapProcess fullColmapProcess: from images to a colmap dataset\n\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_nvmToSIBR nvmToSIBR\n\nConvert from VisualSFM .nvm format for calibrated cameras to SIBR format\n\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_unwrapMesh unwrapMesh\n\n```\nunwrapMesh_rwdi.exe or\nunwrapMesh.exe\n        --appPath      define a custom app path (default: \"./\")\n        --help         display this help message (default: disabled)\n        --output       path to the output mesh (default: \"\")\n        --path         path to the mesh [required]\n        --size         target UV map width (approx.) (default: 4096)\n        --texture-name name of the texture to reference in the output mesh (Meshlab compatible) (default: \"TEXTURE_NAME_TO_PUT_IN_THE_FILE\")\n        --visu         save visualisation (default: disabled)\n```\n\nCalls xatlas to compute UV coordinates of a mesh (not adapted to complex meshes, works but really long); typical use involves calling simplify mesh first.\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_textureMesh textureMesh\n\n```\ntextureMesh_rwdi.exe or\ntextureMesh.exe\n\t\t--path PATH_TO_DATASET [required]\n\t\t--output PATH_TO_OUTPUT_FILE.png [required]\n\t    --size [default=8192]\n\t\t--flood \n\t\t--poisson\n```\n\nGiven a mesh with UV coordinates (typically using unwrapMesh) and calibrated cameras, produces a texture atlas, with optional arguments for texture resolution, flood or poisson filling.\n\n\\subsection Deprecated\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_tonemapper tonemapper\n\n\\subsubsection sibr_projects_dataset_tools_preprocess_tools_meshroomPythonScripts meshroomPythonScripts\nUtilities for Meshroom use (untested)\n\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/documentation/dataset_tools_doc.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nset(PROJECT_PAGE \"sibr_projects_dataset_tools\")\nset(PROJECT_LINK \"https://gitlab.inria.fr/sibr/sibr_core\")\nset(PROJECT_TYPE \"SAMPLES\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/documentation/fullColmapProcess.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page sibr_projects_dataset_tools_preprocess_tools_fullColmapProcess fullColmapProcess : running the full Colmap pipeline for SIBR\n\n\\section ColmapInstallRequirements Install requirements\n\n- Colmap 3.6: https://demuc.de/colmap/\n\nYou can choose the Pre-Release of Release Version for Windows. The .bat file corresponds\nto the application. Download and install it in any folder.\n\n- Dataset tools projects (available in sibr core)\n\nInstall the SIBR Core on your computer : https://gitlab.inria.fr/sibr/sibr_core\n\nThe page contains all the steps to install it.\n\nChoose the BUILD_IBR_DATASET_TOOLS option in CMAKE, BUILD and INSTALL the dataset_tools project (Apps and Preprocess).\n\n\n\\subsection ColmapHToPrepareDataset How to prepare the dataset\n- Create the directory which will contain the future dataset\n- In the dataset directory, create a new directory with the name images\n- In the images directory, place your images that you want to use to create \nthe SIBR dataset\n\nYour dataset architecture should correspond to this:\n\n\\verbatim\n dataset/                              # your dataset directory\n         images/                       # your images directory\n                 im001.jpeg\n                 im002.jpeg\n                 im003.jpeg\n                 im004.jpeg\n                 ...\n\\endverbatim\n\n\n\\subsection ColmapHToRunPipeline How to run the pipeline \n\nThis section shows the different steps that you need to run to create the dataset.\nThe SIBR ULR project contains some applications which allows to run Colmap, generate UVs\nand create a textured mesh. All the steps can be directly done through the \nfullColmapProcess python script.\n\nYou can run the script as an executable in bash-like command, or call it through python on cmd :\n\n\\code\n# from cmd\nλ python .\\install\\scripts\\fullColmapProcess.py --help\n# from git bash / cygwin / msys2\n❯ ./install/scripts/fullColmapProcess.py --help\n\nusage: fullColmapProcess.py [-h] --path PATH --colmapPath COLMAPPATH [--sibrBinariesPath SIBRBINARIESPATH] [--quality {default,low,medium,average,high,extreme}] [--with_texture] [--numGPUs NUMGPUS]\n                            [--SiftExtraction.max_image_size SIFTEXTRACTION_IMAGESIZE] [--SiftExtraction.estimate_affine_shape SIFTEXTRACTION_ESTIMATEAFFINESHAPE] [--SiftExtraction.domain_size_pooling SIFTEXTRACTION_DOMAINSIZEPOOLING]\n                            [--SiftExtraction.max_num_features SIFTEXTRACTION_MAXNUMFEATURES] [--ImageReader.single_camera IMAGEREADER_SINGLECAMERA] [--ExhaustiveMatching.block_size EXHAUSTIVEMATCHER_EXHAUSTIVEMATCHINGBLOCKSIZE]\n                            [--Mapper.ba_local_max_num_iterations MAPPER_MAPPERDOTBALOCALMAXNUMITERATIONS] [--Mapper.ba_global_max_num_iterations MAPPER_MAPPERDOTBAGLOBALMAXNUMITERATIONS]\n                            [--Mapper.ba_global_images_ratio MAPPER_MAPPERDOTBAGLOBALIMAGESRATIO] [--Mapper.ba_global_points_ratio MAPPER_MAPPERDOTBAGLOBALPOINTSRATIO]\n                            [--Mapper.ba_global_max_refinements MAPPER_MAPPERDOTBAGLOBALMAXREFINEMENTS] [--Mapper.ba_local_max_refinements MAPPER_MAPPERDOTBALOCALMAXREFINEMENTS]\n                            [--PatchMatchStereo.max_image_size PATCHMATCHSTEREO_PATCHMATCHSTEREODOTMAXIMAGESIZE] [--PatchMatchStereo.window_radius PATCHMATCHSTEREO_PATCHMATCHSTEREODOTWINDOWRADIUS]\n                            [--PatchMatchStereo.window_step PATCHMATCHSTEREO_PATCHMATCHSTEREODOTWINDOWSTEP] [--PatchMatchStereo.num_samples PATCHMATCHSTEREO_PATCHMATCHSTEREODOTNUMSAMPLES]\n                            [--PatchMatchStereo.num_iterations PATCHMATCHSTEREO_PATCHMATCHSTEREODOTNUMITERATIONS] [--PatchMatchStereo.geom_consistency PATCHMATCHSTEREO_PATCHMATCHSTEREODOTGEOMCONSISTENCY]\n                            [--StereoFusion.check_num_images STEREOFUSION_CHECKNUMIMAGES] [--StereoFusion.max_image_size STEREOFUSION_MAXIMAGESIZE]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --path PATH           path to your dataset folder\n  --colmapPath COLMAPPATH\n                        colmap path directory which contains colmap.bat / colmap.bin\n  --sibrBinariesPath SIBRBINARIESPATH\n                        binaries directory of SIBR\n  --quality {default,low,medium,average,high,extreme}\n                        quality of the reconstruction\n  --with_texture        Add texture steps\n  --numGPUs NUMGPUS     number of GPUs allocated to Colmap\n  --SiftExtraction.max_image_size SIFTEXTRACTION_IMAGESIZE\n  --SiftExtraction.estimate_affine_shape SIFTEXTRACTION_ESTIMATEAFFINESHAPE\n  --SiftExtraction.domain_size_pooling SIFTEXTRACTION_DOMAINSIZEPOOLING\n  --SiftExtraction.max_num_features SIFTEXTRACTION_MAXNUMFEATURES\n  --ImageReader.single_camera IMAGEREADER_SINGLECAMERA\n  --ExhaustiveMatching.block_size EXHAUSTIVEMATCHER_EXHAUSTIVEMATCHINGBLOCKSIZE\n  --Mapper.ba_local_max_num_iterations MAPPER_MAPPERDOTBALOCALMAXNUMITERATIONS\n  --Mapper.ba_global_max_num_iterations MAPPER_MAPPERDOTBAGLOBALMAXNUMITERATIONS\n  --Mapper.ba_global_images_ratio MAPPER_MAPPERDOTBAGLOBALIMAGESRATIO\n  --Mapper.ba_global_points_ratio MAPPER_MAPPERDOTBAGLOBALPOINTSRATIO\n  --Mapper.ba_global_max_refinements MAPPER_MAPPERDOTBAGLOBALMAXREFINEMENTS\n  --Mapper.ba_local_max_refinements MAPPER_MAPPERDOTBALOCALMAXREFINEMENTS\n  --PatchMatchStereo.max_image_size PATCHMATCHSTEREO_PATCHMATCHSTEREODOTMAXIMAGESIZE\n  --PatchMatchStereo.window_radius PATCHMATCHSTEREO_PATCHMATCHSTEREODOTWINDOWRADIUS\n  --PatchMatchStereo.window_step PATCHMATCHSTEREO_PATCHMATCHSTEREODOTWINDOWSTEP\n  --PatchMatchStereo.num_samples PATCHMATCHSTEREO_PATCHMATCHSTEREODOTNUMSAMPLES\n  --PatchMatchStereo.num_iterations PATCHMATCHSTEREO_PATCHMATCHSTEREODOTNUMITERATIONS\n  --PatchMatchStereo.geom_consistency PATCHMATCHSTEREO_PATCHMATCHSTEREODOTGEOMCONSISTENCY\n  --StereoFusion.check_num_images STEREOFUSION_CHECKNUMIMAGES\n  --StereoFusion.max_image_size STEREOFUSION_MAXIMAGESIZE\n\\endcode\n\n\\image HTML colmapfullpipeline.png\n\n- Colmap creates a reconstruction from your images\n- UnwrapMesh program gens UV coordinates on the mesh\n- colmapToSibr creates the architecture and files required by a SIBR scene\n- TextureMesh create a texture and bind it to the reconstruction.\n\n\\subsubsection ColmapInputArgs Input arguments\n\nRequired arguments:\n\n\\code\n--path YOUR_DATA_PATH\n\\endcode\n\nThe path to your dataset folder. It must contain an images folder with images of your captured scene\n\nOptional arguments:\n\n\\code\n--colmapPath COLMAP_DIR\n\\endcode\n\nThe directory containing the colmap.bat executable (if not provided, it will look for a `COLMAP_PATH` environment variable, or use `C:\\Program Files\\Colmap`)\n\n\\code\n--meshlabPath MESHLAB_DIR\n\\endcode\n\nThe directory containing the meshlabserver executable (if not provided, it will look for a `MESHLAB_PATH` environment variable, or use `C:\\Program Files\\VCG\\Meshlab`)\n\n\\code\n--sibrBinariesPath YOUR_SIBR_DIR\\install\\bin\n\\endcode\n\nThat is the directory which contains the binaries of SIBR\n\nThose optional arguments are about the Colmap parametrization. You have several ways to\nset the colmap parameters\n\n- Use a pre-defined configuration. You have 4 configurations : low, medium, high, extreme.\nIf you don't use a pre-defined configuration, all the parameters are set to the default\nvalue ( usually it is a mix between high and extreme ). To apply it, use the \n\\code\n--quality\n\\endcode option\n\n- Specify the parameters separately. You can set each parameters by yourself. Here is \na tab contains the default values and the values for each pre-defined configuration:\n\n | parameters                                           | default       | low   | medium        | average       | high          | extreme       |\n | ---------------------------------------------------- | ------------- | ----- | ------------- | ------------- | ------------- | ------------- |\n | **colmap feature_extractor**                         |||||||\n | siftExtraction_ImageSize                             | 3200          | 1000  | 1600          | 3200          | 2400          | 3200          |\n | siftExtraction_EstimateAffineShape                   | false         | false | false         | false         | true          | true          |\n | siftExtraction_DomainSizePooling                     | false         | false | false         | false         | false         | true          |\n | siftExtraction_MaxNumFeatures                        | 16000         | 8192  | 8192          | 8192          | 8192          | 8192          |\n | imageReader_SingleCamera                             | false         | true  | true          | true          | true          | true          |\n | **colmap exhaustive_matcher**                        |||||||\n | exhaustiveMatcher_ExhaustiveMatchingBlockSize        | 50            | 50    | 50            | 50            | 50            | 50            |\n | **colmap mapper**                                    |||||||\n | mapper_MapperDotbaLocalMaxNumIterations              | 25            | 12    | 16            | 25            | 30            | 40            |\n | mapper_MapperDotbaGlobalMaxNumIterations             | 50            | 25    | 33            | 50            | 75            | 100           |\n | mapper_MapperDotbaGlobalImagesRatio                  | 1.100001      | 1.32  | 1.21          | 1.100001      | 1.100001      | 1.100001      |\n | mapper_MapperDotbaGlobalPointsRatio                  | 1.100001      | 1.32  | 1.21          | 1.100001      | 1.100001      | 1.100001      |\n | mapper_MapperDotbaGlobalMaxRefinements               | 5             | 2     | 2             | 5             | 5             | 5             |\n | mapper_MapperDotbaLocalMaxRefinements                | 2             | 2     | 2             | 2             | 3             | 3             |\n | **colmap patch_match_stereo**                        |||||||\n | patchMatchStereo_PatchMatchStereoDotMaxImageSize     | -1            | 1000  | 1600          | -1            | 2400          | -1            |\n | patchMatchStereo_PatchMatchStereoDotWindowRadius     | 5             | 4     | 4             | 5             | 5             | 5             |\n | patchMatchStereo_PatchMatchStereoDotWindowStep       | 1             | 2     | 2             | 1             | 1             | 1             |\n | patchMatchStereo_PatchMatchStereoDotNumSamples       | 15            | 7     | 10            | 15            | 15            | 15            |\n | patchMatchStereo_PatchMatchStereoDotNumIterations    | 5             | 3     | 5             | 5             | 5             | 5             |\n | patchMatchStereo_PatchMatchStereoDotGeomConsistency  | 1             | 0     | 0             | 1             | 1             | 1             |\n | **colmap stereo_fusion**                             |||||||\n | stereoFusion_CheckNumImages                          | 50            | 25    | 33            | 50            | 50            | 50            |\n | stereoFusion_MaxImageSize                            | -1            | 1000  | 1600          | -1            | 2400          | -1            |\n\n- Mix a pre-defined configuration and your own parameters. First, the parameters\nof the pre-defined configuration are applied. Then, your parameters are applied over them.\n\n\n\n\\subsubsection ColmapInputArgsExamples Input arguments examples\n\nThe most basic version looks like that\n\n\n\\code\n--path E:\\USERNAME\\dataset --sibrBinariesPath E:\\USERNAME\\dev\\sibr_basic2\\install\\bin --colmapPath D:\\colmap\n\\endcode\n\n\\note Do not forget that your dataset path has to contain an image directory with the images inside it.\n\nNow an example using the pre-defined configuration\n\n\\code\n--path E:\\USERNAME\\dataset --sibrBinariesPath E:\\YOU\\dev\\sibr_basic2\\install\\bin --colmapPath D:\\colmap --quality low\n\\endcode\n\nFinally, an example with the mix of the two ways\n\n\\code\n--path E:\\USERNAME\\dataset --sibrBinariesPath E:\\YOU\\dev\\sibr_basic2\\install\\bin --colmapPath D:\\colmap --quality medium --SiftExtraction.max_num_features 4096\n\\endcode\n\nAll the parameters will be set to the medium configuration except the max_num_features that\nwill be setted to 4096.\n\n*/"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(SIBR_dataset_tools_preprocess)\n\nadd_subdirectory(alignMeshes)\nadd_subdirectory(cameraConverter)\nadd_subdirectory(clippingPlanes)\nadd_subdirectory(converters)\nadd_subdirectory(cropFromCenter)\nadd_subdirectory(distordCrop)\nadd_subdirectory(fullColmapProcess)\nadd_subdirectory(meshroomPythonScripts)\nadd_subdirectory(nvmToSIBR)\nadd_subdirectory(textureMesh)\nadd_subdirectory(tonemapper)\nadd_subdirectory(unwrapMesh)\nadd_subdirectory(utils)\nadd_subdirectory(prepareColmap4Sibr)\nadd_subdirectory(realityCaptureTools)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/alignMeshes/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n# project name\nproject(alignMeshes)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n    OpenMP::OpenMP_CXX\n    sibr_assets\n    sibr_system\n    sibr_graphics\n    sibr_renderer\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/alignMeshes/main.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n\r\n#include <fstream>\r\n#include <boost/filesystem.hpp>\r\n#include <core/system/Utils.hpp>\r\n#include <opencv2/features2d/features2d.hpp>\r\n#include <opencv2/flann/flann.hpp>\r\n#include <core/renderer/DepthRenderer.hpp>\r\n#include <core/graphics/Window.hpp>\r\n#include <core/scene/BasicIBRScene.hpp>\r\n#include <core/scene/ParseData.hpp>\r\n\r\n#define PROGRAM_NAME \"sibr_chunk2sibr\"\r\nusing namespace sibr;\r\n\r\nconst char* usage = \"\"\r\n\"Usage: \" PROGRAM_NAME \" -path <reference scene path> -path2 <scene to align path> -outPath <mesh output path>\" \"\\n\"\r\n;\r\n\r\ndouble distPatch(sibr::ImageRGB& im1, sibr::Vector2i& tpos, sibr::ImageRGB& im2, sibr::Vector2i& spos, int size) {\r\n\t//only need to check boundaries for target\r\n\r\n\r\n\tdouble dist = 0;\r\n\tfor (int i = -size; i <= size; i++) {\r\n\t\tfor (int j = -size; j <= size; j++) {\r\n\t\t\tsibr::Vector2i debug(spos.x() + i, spos.y() + j);\r\n\t\t\tif (!im2.isInRange(debug.x(), debug.y()))\r\n\t\t\t\tstd::cout << \"Pos patch is : \" << sibr::Vector2i(spos.x() + i, spos.y() + j) << std::endl;\r\n\t\t\tdist += (im1(tpos.x() + i, tpos.y() + j).cast<double>() - im2(spos.x() + i, spos.y() + j).cast<double>()).squaredNorm();\r\n\t\t}\r\n\t}\r\n\treturn dist;\r\n}\r\n\r\n\r\n// Convienience function to find the Median Absolute Deviation from a vector of deviations.\r\n// Note that it isn't a strict median( just a quick approximation. )\r\nfloat findMAD(const Eigen::VectorXf& vec) {\r\n\tEigen::VectorXf vec_ = vec;\r\n\t// Sort the data in increasing order.\r\n\tstd::sort(vec_.data(), vec_.data() + vec_.size());\r\n\t// Return the 'middle' element.\r\n\treturn vec_[((vec_.size() + 1) / 2)];\r\n}\r\n\r\n// Weight function.( Takes a list of standardized adjusted residuals and returns the square-root-weights for each one )\r\n// Currently, the Bisquares estimator is used.\r\n// Note that this function should return the square root of the actual weight value since both X and Y are multiplied by this vector.\r\nEigen::VectorXf weight(Eigen::VectorXf v) {\r\n\tEigen::VectorXf vout = v;\r\n\r\n\tfor (int i = 0; i < v.size(); i++) {\r\n\t\tfloat r = v[i];\r\n\t\tvout[i] = ((abs(r) < 1) ? (1 - (r * r)) : 0);\r\n\t}\r\n\r\n\treturn vout;\r\n}\r\n\r\n#define MAX_ITERS 100\r\n// Procedure for IRLS( Iterative Reweighted Least Squares ).\r\nvoid irls(Eigen::MatrixX4f mX, Eigen::VectorXf vY, Eigen::Vector4f& mCoeffs, float tune) {\r\n\r\n\tEigen::MatrixXf mX_ = mX;\r\n\tEigen::VectorXf vY_ = vY;\r\n\t// Find the least squares coefficients.\r\n\tEigen::Vector4f vC = mX_.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(vY);\r\n\t//Log(EInfo, \"Finished solving for LS solution.\");\r\n\r\n\t// Form the leverage value matrix as H = X . ( X_T . X ) . X_T\r\n\t// Form the leverage factor matrix as 1/sqrt(1 - diag(H))\r\n\tEigen::VectorXf mH = (mX_ * (((mX_.transpose() * mX_).inverse()) * mX_.transpose())).diagonal();\r\n\tEigen::MatrixXf mH_ = (Eigen::VectorXf::Constant(mH.rows(), 1, 1) - mH).cwiseSqrt().cwiseInverse().asDiagonal();\r\n\r\n\tstd::cout << vC << std::endl;\r\n\tfor (int i = 0; ; i++) {\r\n\t\tstd::cout << \"IRLS: Iteration \" << i << \":\";\r\n\r\n\t\t// Find residuals:\r\n\t\tEigen::VectorXf resid = vY - mX * vC;\r\n\r\n\t\tfloat mad = findMAD(resid.cwiseAbs());\r\n\r\n\t\t// Calcualte Standardized Adjusted Residuals.\r\n\t\tEigen::VectorXf r = (mH_ * resid * 0.6745) / (mad * tune);\r\n\r\n\t\t// Find the root weight of residuals.\r\n\t\tEigen::VectorXf wt = weight(r);\r\n\r\n\t\t// Multiply X and Y with the root of the weights.\r\n\t\tmX_ = wt.asDiagonal() * mX;\r\n\t\tvY_ = wt.asDiagonal() * vY;\r\n\r\n\t\tstd::cout << \"MAD= \" << mad << \", \";\r\n\r\n\t\t// Regress the weighted X and Y to find weighted least squares optimisation.\r\n\t\tEigen::Vector4f vC_ = mX_.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(vY_);\r\n\r\n\t\t// Find mean deviation in coefficients.\r\n\t\tfloat meanDiff = (vC - vC_).cwiseAbs().mean();\r\n\t\tstd::cout << \"MD=\" << meanDiff << \",\";\r\n\t\t// Terminate if the deviation is too small or number of iterations has been exceeded.\r\n\t\tif (meanDiff < 0.01f || i > MAX_ITERS) {\r\n\t\t\tmCoeffs = vC_;\r\n\t\t\tstd::cout << \"\\n\";\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tvC = vC_;\r\n\t\tstd::cout << \"\\n\";\r\n\t}\r\n\tstd::cout << vC << std::endl;\r\n}\r\n\r\nstatic bool isRawRC(std::string pathRC)\r\n{\r\n\t// do we have bundle, mesh and list images ?\r\n\tsibr::Mesh mesh2Align;\r\n\tif (!mesh2Align.load(pathRC + \"/recon.ply\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathRC + \"/recon.ply ; make sure your mesh has the correct name !!\";\r\n\t\treturn false;\r\n\t}\r\n\tif (!fileExists(pathRC + \"/bundle.out\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathRC + \"/bundle.out ; make sure your bundle file has the correct name !!\";\r\n\t\treturn false;\r\n\t}\r\n\tif (!fileExists(pathRC + \"/list_images.txt\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathRC + \"/list_images.txt ; make sure you generate the list_images.txt file \";\r\n\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nstatic void loadRawRC(std::string pathRC, std::vector<sibr::InputCamera::Ptr>& cams2Align,\r\n\tstd::vector<sibr::ImageRGB::Ptr>& imgs2Align, sibr::Mesh& mesh2Align)\r\n{\r\n\tcams2Align = sibr::InputCamera::loadBundle(pathRC + \"/bundle.out\", 0.01f, 1000.0f, pathRC + \"/list_images.txt\");\r\n\tmesh2Align.load(pathRC + \"/recon.ply\");\r\n\timgs2Align.resize(cams2Align.size());\r\n\tfor (int c = 0; c < cams2Align.size(); c++) {\r\n\t\tsibr::ImageRGB::Ptr imgPtr;\r\n\t\tsibr::ImageRGB img;\r\n\t\tif (!img.load(pathRC + \"/\" + cams2Align[c]->name()))\r\n\t\t\tif (!img.load(pathRC + \"/\" + cams2Align[c]->name() + \".png\"))\r\n\t\t\t\tif (!img.load(pathRC + \"/\" + cams2Align[c]->name() + \".jpg\")) {\r\n\t\t\t\t\tSIBR_ERR << \"Error loading dataset to align from \" << pathRC;\r\n\t\t\t\t\tSIBR_ERR << \"Problem loading images from raw RC, exiting \";\r\n\t\t\t\t}\r\n\r\n\t\timgs2Align[c] = img.clonePtr();\r\n\t}\r\n}\r\n\r\nstatic bool isRawSynthetic(std::string pathSynthetic)\r\n{\r\n\t// do we have bundle, mesh and list images ?\r\n\tsibr::Mesh mesh2Align;\r\n\tif (!fileExists(pathSynthetic + \"/scene.obj\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathSynthetic + \"/scene.obj ; make sure your mesh has the correct name !!\";\r\n\t\treturn false;\r\n\t}\r\n\tif (!fileExists(pathSynthetic + \"/cameras.lookat\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathSynthetic + \"/cameras.lookat ; make sure your bundle file has the correct name !!\";\r\n\t\treturn false;\r\n\t}\r\n\tif (!directoryExists(pathSynthetic + \"/images\")) {\r\n\t\tSIBR_WRG << \"***** No file \" << pathSynthetic + \"/images ; make sure you have images folder inside the scene \";\r\n\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nstatic void loadRawSynthetic(std::string pathSynthetic, std::vector<sibr::InputCamera::Ptr>& cams2Align,\r\n\tstd::vector<sibr::ImageRGB::Ptr>& imgs2Align, sibr::Mesh& mesh2Align)\r\n{\r\n\tcams2Align = sibr::InputCamera::loadLookat(pathSynthetic + \"/cameras.lookat\", std::vector<sibr::Vector2u>{sibr::Vector2u(1920, 1080)}, 0.01f, 1000.0f);\r\n\tSIBR_WRG << \"We assume a size of the synthetic images of 1920*1080. If it is not your case, this loading will not work properly\";\r\n\tmesh2Align.load(pathSynthetic + \"/scene.obj\");\r\n\timgs2Align.resize(cams2Align.size());\r\n\tfor (int c = 0; c < cams2Align.size(); c++) {\r\n\t\tsibr::ImageRGB::Ptr imgPtr;\r\n\t\tsibr::ImageRGB img;\r\n\t\tif (!img.load(pathSynthetic + \"/images/\" + cams2Align[c]->name()))\r\n\t\t\tif (!img.load(pathSynthetic + \"/images/\" + cams2Align[c]->name() + \".png\"))\r\n\t\t\t\tif (!img.load(pathSynthetic + \"/images/\" + cams2Align[c]->name() + \".jpg\")) {\r\n\t\t\t\t\tSIBR_ERR << \"Error loading dataset to align from \" << pathSynthetic;\r\n\t\t\t\t\tSIBR_ERR << \"Problem loading images from raw RC, exiting \";\r\n\t\t\t\t}\r\n\r\n\t\timgs2Align[c] = img.clonePtr();\r\n\t}\r\n}\r\n\r\n\r\nint assignImages(\r\n\tstd::vector<sibr::ImageRGB::Ptr>& imgs2Align, std::vector<sibr::ImageRGB>& imgs2AlignSmall,\r\n\tstd::vector<sibr::ImageRGB::Ptr>& imgsRef, std::vector<sibr::ImageRGB>& imgsRefSmall,\r\n\tstd::map<int, int>& alignCamToRef, std::vector<sibr::InputCamera::Ptr>& camsRef, std::vector<sibr::InputCamera::Ptr> cams2Align,\r\n\tint resizeW, std::set<int>& assignedCam, float threshold)\r\n{\r\n\tint assignCnt = 0;\r\n\tstd::cout << \"Assigning \" << imgs2Align.size() << \" cameras from the set to align to the fixed one: \";\r\n\t//We then look for closest match and assign it only if the distance between the images is half the median distance\r\n\t//This prevent issues in the case were a camera is missing from one set\r\n\tfor (int i = 0; i < imgs2Align.size(); i++) {\r\n\r\n\t\tstd::cout << \"Assigning camera \" << i << \", \";\r\n\r\n\t\tsibr::ImageRGB& im2Align = imgs2AlignSmall[i];\r\n\t\tsibr::Vector2i pos2Align(resizeW / 2, im2Align.h() / 2);\r\n\r\n\t\tdouble minImDist = DBL_MAX;\r\n\t\tint bestIm = -1;\r\n\r\n\t\tstd::vector<double> dists;\r\n\t\tstd::cerr << \"2 ALIGN TESTING \" << std::endl;\r\n\r\n\t\tcv::Rect centerROI(im2Align.w() / 8, im2Align.h() / 8, 6 * im2Align.w() / 8, 6 * im2Align.h() / 8);\r\n\r\n\t\tfor (int j = 0; j < imgsRef.size(); j++) {\r\n\t\t\tif (assignedCam.find(j) != assignedCam.end())\r\n\t\t\t\tcontinue;\r\n\r\n\t\t\tsibr::ImageRGB& imRef = imgsRefSmall[j];\r\n\t\t\tdouble minDist = DBL_MAX;\r\n\t\t\tint wIm = imRef.w();\r\n\t\t\tint hIm = imRef.h();\r\n\r\n\t\t\tfor (int dx = -wIm / 8; dx <= wIm / 8; dx += 4) {\r\n\t\t\t\tfor (int dy = -hIm / 8; dy <= hIm / 8; dy += 4) {\r\n\t\t\t\t\tcv::Rect shiftROI(dx + wIm / 8, dy + hIm / 8, 6 * wIm / 8, 6 * hIm / 8);\r\n\t\t\t\t\tdouble d = cv::norm(imRef.toOpenCV()(shiftROI), im2Align.toOpenCV()(centerROI));\r\n\t\t\t\t\tif (d < minDist)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tminDist = d;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdists.push_back(minDist);\r\n\r\n\t\t\tif (minDist < minImDist) {\r\n\t\t\t\tminImDist = minDist;\r\n\t\t\t\tbestIm = j;\r\n\r\n\t\t\t\t//show(imRef);\r\n\t\t\t\t//show(im2Align);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstd::sort(dists.begin(), dists.end());\r\n\t\tstd::cerr << \" SIZe \" << dists.size() << \" min \" << minImDist << \" half \" << threshold * dists[dists.size() / 2] << std::endl;\r\n\t\tif (dists.size() > 5 && minImDist < threshold * dists[dists.size() / 2]) {\r\n\t\t\talignCamToRef[i] = bestIm;\r\n\t\t\tassignedCam.emplace(bestIm);\r\n\t\t\tstd::wcout << i << \" -> \" << bestIm << \" -- \" << cams2Align[i]->name().c_str() << \" -> \" << camsRef[bestIm]->name().c_str() << std::endl;\r\n\t\t\tassignCnt++;\r\n\t\t}\r\n\t\telse {\r\n\t\t\talignCamToRef[i] = -1;\r\n\t\t\tstd::wcout << i << \" -> \" << \"Not assigned \" << std::endl;\r\n\t\t\tstd::wcout << i << \" BEST MATCH -> \" << bestIm << \" -- \" << cams2Align[i]->name().c_str() << \" -> \" << camsRef[bestIm]->name().c_str() << std::endl;\r\n\t\t}\r\n\r\n\t\t//show(imgs2Align[i]);\r\n\t\t//show(imgsRef[bestIm]);\r\n\r\n\t}\r\n\treturn assignCnt;\r\n}\r\n\r\nInputCamera rot90CC(InputCamera::Ptr& in)\r\n{\r\n\tInputCamera rotCam = *in;\r\n\trotCam.size(rotCam.h(), rotCam.w());\r\n\trotCam.aspect(1.0f / rotCam.aspect());\r\n\trotCam.fovy(2.0 * atan(0.5 * rotCam.h() / rotCam.focal()));\r\n\trotCam.setLookAt(rotCam.position(), rotCam.position() + rotCam.dir(), rotCam.right());\r\n\treturn rotCam;\r\n}\r\n\r\n\r\nstruct AlignMeshesArgs :\r\n\tvirtual BasicIBRAppArgs {\r\n\tRequiredArg<std::string> pathRef = { \"pathRef\", \"Path to the fixed scene\" };\r\n\tRequiredArg<std::string> pathToAlign = { \"path2Align\", \"Path to the scene to align\" };\r\n\tRequiredArg<std::string> outPath = { \"out\", \"Path to the folder where to write the transformed mesh and the matrix\" };\r\n\tArg<bool> forceLandscape = { \"forceLandscape\", \"Option to force all images to be in landscape orientation before image assignation and correspondances computation\" };\r\n\tArg<bool> saveScene = { \"saveScene\", \"If true saves entire scene, else only save the transformed mesh and transform.txt file in out dir\"\r\n\t};\r\n};\r\n\r\nint main(int ac, char** av)\r\n{\r\n\t// Parse Commad-line Args\r\n\tCommandLineArgs::parseMainArgs(ac, av);\r\n\tAlignMeshesArgs myArgs;\r\n\r\n\t//sibr::Window window(100, 100, \"Window\");\r\n\tsibr::Window\t\twindow(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs);\r\n\tint wRender, hRender;\r\n\r\n\tstd::cout << \"This method relies on images, cameras and meshes of both scenes.\" << std::endl;\r\n\r\n\t//\tHere is the data strctures that we will use for this program to make it as generic as possible\r\n\tstd::vector<sibr::ImageRGB::Ptr> imgsRef;\r\n\tstd::vector<sibr::ImageRGB::Ptr> imgs2AlignOriginal;\r\n\tstd::vector<sibr::ImageRGB::Ptr> imgs2Align;\r\n\r\n\tstd::vector<sibr::ImageRGB> imgsRefSmall;\r\n\tstd::vector<sibr::ImageRGB> imgs2AlignSmall;\r\n\r\n\tstd::vector<sibr::InputCamera::Ptr> camsRef;\r\n\tstd::vector<sibr::InputCamera::Ptr> cams2Align;\r\n\r\n\tsibr::Mesh meshRef;\r\n\tsibr::Mesh mesh2Align;\r\n\t//Create the two scenes\r\n\r\n\t//Load the reference data\r\n\tIParseData::Type refSceneType;\r\n\tif (myArgs.pathRef.get() == \"\")\r\n\t\tSIBR_ERR << \"Reference path empty\";\r\n\tBasicIBRAppArgs argsRefScene;\r\n\targsRefScene.dataset_path = myArgs.pathRef.get();\r\n\r\n\ttry {\r\n\t\tBasicIBRScene::Ptr\t\tsceneRef(new BasicIBRScene(argsRefScene, true));\r\n\r\n\t\tif ((refSceneType = sceneRef->data()->datasetType()) != IParseData::Type::EMPTY) {\r\n\t\t\tmeshRef = sceneRef->proxies()->proxy();\r\n\t\t\timgsRef = sceneRef->images()->inputImages();\r\n\t\t\tcamsRef = sceneRef->cameras()->inputCameras();\r\n\t\t}\r\n\t\telse \r\n\t\t\tSIBR_ERR << \"Error loading reference dataset from \" << myArgs.pathRef.get();\r\n\t}\r\n\r\n   \tcatch(...) {\r\n\t\tstd::cout << \"Trying to load Raw RealityCapture or Synthetic data\" << std::endl;\r\n\t\tif (isRawRC(argsRefScene.dataset_path)) {  // try \"raw RC\" option\r\n\t\t\tloadRawRC(argsRefScene.dataset_path, camsRef, imgsRef, meshRef);\r\n\t\t}\r\n\t\telse if (isRawSynthetic(argsRefScene.dataset_path)) {\r\n\t\t\tloadRawSynthetic(argsRefScene.dataset_path, camsRef, imgsRef, meshRef);\r\n\t\t}\r\n\t\telse \r\n\t\t\tSIBR_ERR << \"Error loading reference dataset from \" << myArgs.pathRef.get();\r\n   \t}\r\n\r\n\r\n\t//Load the data for the scene to align\t\r\n\tif (myArgs.pathToAlign.get() == \"\")\r\n\t\tSIBR_ERR << \"Path to mesh to align empty\";\r\n\tBasicIBRAppArgs argsAlignScene;\r\n\targsAlignScene.dataset_path = myArgs.pathToAlign.get();\r\n\t// \r\n\ttry {\r\n\t\tBasicIBRScene::Ptr\t\tsceneAlign(new BasicIBRScene(argsAlignScene, true));\r\n\r\n\t\tif (sceneAlign->data()->datasetType() != IParseData::Type::EMPTY) {\r\n\t\t\tmesh2Align = sceneAlign->proxies()->proxy();\r\n\t\t\timgs2AlignOriginal = sceneAlign->images()->inputImages();\r\n\t\t\tcams2Align = sceneAlign->cameras()->inputCameras();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tSIBR_ERR << \"Error loading dataset to align from \" << myArgs.pathToAlign.get();\r\n\t\t}\r\n\t}\r\n\r\n\r\n   \tcatch(...) {\r\n\t\tstd::cout << \"Trying to load Raw RealityCapture or Synthetic data\" << std::endl;\r\n\t\tif (isRawRC(argsAlignScene.dataset_path)){ // try \"raw RC\" option\r\n\t\t\tloadRawRC(argsAlignScene.dataset_path, cams2Align, imgs2AlignOriginal, mesh2Align);\r\n\t\t}\r\n\t\telse if (isRawSynthetic(argsAlignScene.dataset_path)) {\r\n\t\t\tloadRawSynthetic(argsAlignScene.dataset_path, cams2Align, imgs2AlignOriginal, mesh2Align);\r\n\t\t}\r\n\t\telse\r\n\t\t\tSIBR_ERR << \"Error loading dataset to align from \" << myArgs.pathToAlign.get();\r\n   \t}\r\n\t\r\n\tif (myArgs.forceLandscape) {\r\n\t\tfor (int c = 0; c < camsRef.size(); c++) {\r\n\t\t\tif (imgsRef[c]->h() > imgsRef[c]->w()) {\r\n\t\t\t\t//rotate the image\r\n\t\t\t\tcv::rotate(imgsRef[c]->toOpenCV(), imgsRef[c]->toOpenCVnonConst(), cv::ROTATE_90_COUNTERCLOCKWISE);\r\n\t\t\t\t//rotate the camera\r\n\t\t\t\t*camsRef[c] = rot90CC(camsRef[c]);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\tfor (int c = 0; c < cams2Align.size(); c++) {\r\n\t\t\tif (imgs2AlignOriginal[c]->h() > imgs2AlignOriginal[c]->w()) {\r\n\t\t\t\tcv::rotate(imgs2AlignOriginal[c]->toOpenCV(), imgs2AlignOriginal[c]->toOpenCVnonConst(), cv::ROTATE_90_COUNTERCLOCKWISE);\r\n\t\t\t\t//rotate the camera\r\n\t\t\t\t*cams2Align[c] = rot90CC(cams2Align[c]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t//We resize the input images to the same width to account for possible rescale between the two scenes\r\n#pragma omp parallel for\r\n\tfor (int c = 0; c < camsRef.size(); c++) {\r\n\t\t*imgsRef[c] = imgsRef[c]->resized(1024, 1024.0f * imgsRef[c]->h() / imgsRef[c]->w(), cv::INTER_LINEAR);\r\n\t}\r\n\r\n\tfor (int c = 0; c < cams2Align.size(); c++) {\r\n\t\timgs2Align.push_back(sibr::ImageRGB::Ptr(new sibr::ImageRGB()));\r\n\t}\r\n#pragma omp parallel for\r\n\tfor (int c = 0; c < cams2Align.size(); c++) {\r\n\t\t*imgs2Align[c] = imgs2AlignOriginal[c]->resized(1024, 1024.0f * imgs2AlignOriginal[c]->h() / imgs2AlignOriginal[c]->w(), cv::INTER_LINEAR);\r\n\t}\r\n\r\n\t//Create output dir\r\n\tstd::string outPath;\r\n\toutPath = myArgs.outPath.get();\r\n\t//First create all the needed directories\r\n\tsibr::makeDirectory(outPath);\r\n\r\n\t//We now match images between the two scenes as we cannot rely on correspondance between cameras\r\n\t//First we make all image 512*512\r\n\tint resizeW = 512;\r\n\tcv::Rect centerROI(resizeW / 4, resizeW / 4, resizeW / 2, resizeW / 2);\r\n\tstd::map<int, int> alignCamToRef;\r\n\tstd::set<int> assignedCam;\r\n\r\n\tstd::cout << \"Resizing images\" << std::endl;\r\n\r\n\timgs2AlignSmall.resize(imgs2Align.size());\r\n#pragma omp parallel for\r\n\tfor (int i = 0; i < imgs2Align.size(); i++) {\r\n\t\timgs2AlignSmall[i] = imgs2Align[i]->resized(resizeW, resizeW, cv::INTER_AREA);\r\n\t\timgs2AlignSmall[i].fromOpenCV(imgs2AlignSmall[i].toOpenCV()(centerROI));\r\n\t}\r\n\timgsRefSmall.resize(imgsRef.size());\r\n#pragma omp parallel for\r\n\tfor (int i = 0; i < imgsRef.size(); i++) {\r\n\t\timgsRefSmall[i] = imgsRef[i]->resized(resizeW, resizeW, cv::INTER_AREA);\r\n\t\timgsRefSmall[i].fromOpenCV(imgsRefSmall[i].toOpenCV()(centerROI));\r\n\t}\r\n\r\n\tint cnt = assignImages(imgs2Align, imgs2AlignSmall, imgsRef, imgsRefSmall, alignCamToRef, camsRef, cams2Align, resizeW, assignedCam, 0.7);\r\n\tstd::cout << \"Assigned \" << cnt << std::endl;\r\n\r\n\t/////////////////\r\n\t/////////////////\r\n\t// Now we will compute closely matched feature between pair of images\r\n\t/////////////////\r\n\t/////////////////\r\n\r\n\tstd::vector<sibr::Vector3f> listFeatPRef;\r\n\tstd::vector<sibr::Vector3f> listFeatP2Align;\r\n\r\n\tstd::vector<float> dist2CamRef;\r\n\tstd::vector<float> dist2Cam2Align;\r\n\r\n\t//Maximum shift for patch alignement\r\n\tint shiftMax = 16;\r\n\tconst int patchRadius = 8;\r\n\r\n\tfor (int im = 0; im < imgs2Align.size(); im++) {\r\n\r\n\t\tif (alignCamToRef[im] < 0)\r\n\t\t\tcontinue;\r\n\r\n\t\tstd::cout << \"IM \" << im << std::endl;\r\n\r\n\t\tsibr::ImageRGB& imRef = *imgsRef[alignCamToRef[im]];\r\n\t\tsibr::ImageRGB& im2Align = *imgs2Align[im];\r\n\r\n\t\t// To see feature match in images\r\n\t\tsibr::ImageRGB imRefCopy = imRef.clone();\r\n\t\tsibr::ImageRGB im2AlignCopy = im2Align.clone();\r\n\r\n\t\t//Compute im center to transpose position from imref to im2Align. The center should stay aligned with the crop.\r\n\t\t//Small errors are absorbed by the shift estimation.\r\n\t\tsibr::Vector2i imRefCenter(imRef.w() / 2, imRef.h() / 2);\r\n\t\tsibr::Vector2i im2AlignCenter(im2Align.w() / 2, im2Align.h() / 2);\r\n\r\n\t\t//Get the two cameras\r\n\t\tsibr::InputCamera::Ptr camRef = camsRef[alignCamToRef[im]];\r\n\t\tsibr::InputCamera::Ptr cam2Align = cams2Align[im];\r\n\r\n\t\t//Depth map for 3D position estimation\r\n\t\tsibr::ImageL32F depthMapRef, depthMap2Align;\r\n\r\n\t\t//We render the two depth map of the two meshes to be able to recover 3D position from pixel position\r\n\t\tint wCamRef, hCamRef, wCam2Align, hCam2Align;\r\n\t\twCamRef = camRef->w();\r\n\t\thCamRef = camRef->h();\r\n\t\twCam2Align = cam2Align->w();\r\n\t\thCam2Align = cam2Align->h();\r\n\r\n\t\tstd::cout << \"Rendering reference DepthMap ...\" << std::endl;\r\n\t\tsibr::DepthRenderer rendererDepthRef(wCamRef, hCamRef);\r\n\t\tglViewport(0, 0, wCamRef, hCamRef);\r\n\t\trendererDepthRef.render(*camRef, meshRef);\r\n\t\trendererDepthRef._depth_RT->readBack(depthMapRef);\r\n\r\n\t\t//showFloat(depthMapRef.resized(1024, 1024 * hCamRef / wCamRef));\r\n\t\tstd::cout << \"Rendering recon DepthMap ...\" << std::endl;\r\n\r\n\t\tsibr::DepthRenderer rendererDepth2Align(wCam2Align, hCam2Align);\r\n\t\tglViewport(0, 0, wCam2Align, hCam2Align);\r\n\t\trendererDepth2Align.render(*cam2Align, mesh2Align);\r\n\t\trendererDepth2Align._depth_RT->readBack(depthMap2Align);\r\n\r\n\t\t//showFloat(depthMap2Align.resized(1024, 1024 * hCam2Align / wCam2Align));\r\n\t\tconst int stride = std::max(16.0, sqrt(imRef.w() * imRef.h() * imgs2Align.size() / 50000.0));\r\n\t\tstd::wcout << \"   Stride:\" << stride << std::endl;\r\n\r\n\t\tfloat ratioRefW = (float)depthMapRef.w() / imRefCopy.w();\r\n\t\tfloat ratioRefH = (float)depthMapRef.h() / imRefCopy.h();\r\n\t\tfloat ratio2AlignW = (float)depthMap2Align.w() / im2AlignCopy.w();\r\n\t\tfloat ratio2AlignH = (float)depthMap2Align.h() / im2AlignCopy.h();\r\n\r\n#pragma omp parallel for\r\n\t\tfor (int i = patchRadius; i < imRef.w(); i += stride) {\r\n\t\t\tfor (int j = patchRadius; j < imRef.h(); j += stride) {\r\n\r\n\t\t\t\tsibr::Vector2i posRef(i, j);\r\n\t\t\t\t//Corresponding position is estimated from the center because the two center of the images should be aligned\r\n\t\t\t\tsibr::Vector2i pos2Align = im2AlignCenter + posRef - imRefCenter;\r\n\r\n\r\n\t\t\t\tif (imRef.isInRange(i, j)\r\n\t\t\t\t\t&& imRef(i, j) != Vector3ub(0, 0, 0)\r\n\t\t\t\t\t&& im2Align.isInRange(pos2Align.x(), pos2Align.y())\r\n\t\t\t\t\t&& im2Align.isInRange(pos2Align.x() - (shiftMax + patchRadius), pos2Align.y() - (shiftMax + patchRadius))\r\n\t\t\t\t\t&& im2Align.isInRange(pos2Align.x() + shiftMax + patchRadius + 1, pos2Align.y() + shiftMax + patchRadius + 1)) {\r\n\r\n\t\t\t\t\t// To visualize feature match in images\r\n\t\t\t\t\timRefCopy(i, j) = sibr::Vector3ub(255, 0, 0);\r\n\t\t\t\t\tim2AlignCopy(pos2Align.x(), pos2Align.y()) = sibr::Vector3ub(255, 0, 0);\r\n\r\n\t\t\t\t\tdouble minDist = DBL_MAX;\r\n\t\t\t\t\tsibr::Vector2i bestShift(0, 0);\r\n\r\n\t\t\t\t\t//We find the best shift to refine our point matching\r\n\t\t\t\t\tfor (int k = -shiftMax; k <= shiftMax; k++) {\r\n\t\t\t\t\t\tfor (int l = -shiftMax; l <= shiftMax; l++) {\r\n\r\n\t\t\t\t\t\t\tsibr::Vector2i shift(k, l);\r\n\t\t\t\t\t\t\tsibr::Vector2i pos2AlignShifted = pos2Align + shift;\r\n\r\n\t\t\t\t\t\t\tdouble dist = distPatch(imRef, posRef, im2Align, pos2AlignShifted, patchRadius);\r\n\r\n\t\t\t\t\t\t\tif (dist < minDist || (dist == minDist && shift.norm() < bestShift.norm())) {\r\n\t\t\t\t\t\t\t\tbestShift = shift;\r\n\t\t\t\t\t\t\t\tminDist = dist;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsibr::Vector2i pos2AlignShifted = pos2Align + bestShift;\r\n\t\t\t\t\tsibr::Vector2i posImFullRef(posRef.x() * ratioRefW, posRef.y() * ratioRefH);\r\n\t\t\t\t\tsibr::Vector2i posImFull2Align(pos2AlignShifted.x() * ratio2AlignW, pos2AlignShifted.y() * ratio2AlignH);\r\n\r\n\t\t\t\t\tif (depthMapRef(posImFullRef.x(), posImFullRef.y()).x() != 1 &&\r\n\t\t\t\t\t\tdepthMap2Align(posImFull2Align.x(), posImFull2Align.y()).x() != 1) {\r\n\t\t\t\t\t\t// To see feature match in images\r\n\t\t\t\t\t\tim2AlignCopy(pos2Align.x() + bestShift.x(), pos2Align.y() + bestShift.y()) = sibr::Vector3ub(0, 255, 0);\r\n\r\n\t\t\t\t\t\tfloat dRef = depthMapRef(posImFullRef.x(), posImFullRef.y()).x();\r\n\t\t\t\t\t\tsibr::Vector3f pos3DRef = camRef->unprojectImgSpaceInvertY(\r\n\t\t\t\t\t\t\tposImFullRef, dRef);\r\n\r\n\t\t\t\t\t\tfloat d2Align = depthMap2Align(posImFull2Align.x(), posImFull2Align.y()).x();\r\n\t\t\t\t\t\tsibr::Vector3f pos3D2Align = cam2Align->unprojectImgSpaceInvertY(\r\n\t\t\t\t\t\t\tposImFull2Align, d2Align);\r\n\r\n\t\t\t\t\t\t//Add those feature to the list\r\n#pragma omp critical\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (pos3DRef == pos3DRef && pos3D2Align == pos3D2Align) {\r\n\t\t\t\t\t\t\t\tlistFeatPRef.push_back(pos3DRef);\r\n\t\t\t\t\t\t\t\tlistFeatP2Align.push_back(pos3D2Align);\r\n\r\n\t\t\t\t\t\t\t\tdist2CamRef.push_back((pos3DRef - camRef->position()).norm());\r\n\t\t\t\t\t\t\t\tdist2Cam2Align.push_back((pos3D2Align - cam2Align->position()).norm());\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tstd::cout << \"Skipping bad point\" << std::endl;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// To see feature match in images\r\n\t\t//show(imRefCopy);\r\n\t\t//show(im2AlignCopy);\r\n\r\n\t}\r\n\r\n\t//Now we will remove outliers that appears for several reason, one of them is obviously the part of the images where the content changed.\r\n\t//We compute the median scale factor using the distances to cameras, and we only keep matches that respect this median\r\n\tstd::vector<float> scalesfromCam;\r\n\tfor (int i = 0; i < dist2CamRef.size(); i++) {\r\n\t\tscalesfromCam.push_back(dist2CamRef[i] / dist2Cam2Align[i]);\r\n\t}\r\n\tstd::sort(scalesfromCam.begin(), scalesfromCam.end());\r\n\tfloat medianScale = scalesfromCam[scalesfromCam.size() / 2];\r\n\tstd::cout << std::endl << \"Median is \" << medianScale << std::endl;\r\n\r\n\tstd::vector<sibr::Vector3f> listStrongFeatPRef;\r\n\tstd::vector<sibr::Vector3f> listStrongFeatP2Align;\r\n\r\n\t//5% above and under the median\r\n\tfor (int i = 0; i < dist2CamRef.size(); i++) {\r\n\t\tif (dist2CamRef[i] / dist2Cam2Align[i] > 0.95 * medianScale &&\r\n\t\t\tdist2CamRef[i] / dist2Cam2Align[i] < 1.05 * medianScale) {\r\n\t\t\tlistStrongFeatPRef.push_back(listFeatPRef[i]);\r\n\t\t\tlistStrongFeatP2Align.push_back(listFeatP2Align[i]);\r\n\t\t}\r\n\t}\r\n\r\n\tstd::cout << \"Cleaned matches: \" << listFeatPRef.size() << \" to \" << listStrongFeatPRef.size() << std::endl;\r\n\r\n\t/////////\r\n\t/////////\r\n\t//Now we will estimate the transformation using irls.\r\n\t/////////\r\n\t/////////\r\n\r\n\t//Format the data\r\n\tstd::vector<float> XData;\r\n\tstd::vector<float> YData0;\r\n\tstd::vector<float> YData1;\r\n\tstd::vector<float> YData2;\r\n\r\n\tfor (int i = 0; i < listStrongFeatPRef.size(); i++) {\r\n\t\tXData.push_back(listStrongFeatP2Align[i].x());\r\n\t\tXData.push_back(listStrongFeatP2Align[i].y());\r\n\t\tXData.push_back(listStrongFeatP2Align[i].z());\r\n\r\n\t\tYData0.push_back(listStrongFeatPRef[i].x());\r\n\t\tYData1.push_back(listStrongFeatPRef[i].y());\r\n\t\tYData2.push_back(listStrongFeatPRef[i].z());\r\n\t}\r\n\r\n\t///////////////\r\n\t//SOLVING WITH IRLS\r\n\tint numX = listStrongFeatP2Align.size();\r\n\t// Convert std::vector to Eigen::VectorXf\r\n\tEigen::Map<Eigen::VectorXf> evY0(YData0.data(), numX);\r\n\tEigen::Map<Eigen::VectorXf> evY1(YData1.data(), numX);\r\n\tEigen::Map<Eigen::VectorXf> evY2(YData2.data(), numX);\r\n\r\n\tEigen::Map<Eigen::Matrix<float, -1, 3, Eigen::RowMajor> > mX3(XData.data(), numX, 3);\r\n\r\n\t// Convert 3-column matrix into a 4-column one using all 1s for the last column.\r\n\tEigen::MatrixX4f mX4(mX3.rows(), 4);\r\n\tmX4 << mX3, Eigen::ArrayXXf::Ones(mX3.rows(), 1);\r\n\r\n#define TUNING_CONSTANT 4.685\r\n\tEigen::Vector4f vCoeffs0;\r\n\tEigen::Vector4f vCoeffs1;\r\n\tEigen::Vector4f vCoeffs2;\r\n\r\n\t// Run IRLS considering each of the Y-matrix's calumns as the target Y-vector individually.\r\n\t// We get one row of the solution matrix at each step which is then put together to form the \r\n\t// complete solution.\r\n\t//Log(EInfo, \"Running IRLS on row 0\");\r\n\tirls(mX4, evY0, vCoeffs0, TUNING_CONSTANT);\r\n\t//Log(EInfo, \"Running IRLS on row 1\");\r\n\tirls(mX4, evY1, vCoeffs1, TUNING_CONSTANT);\r\n\t//Log(EInfo, \"Running IRLS on row 2\");\r\n\tirls(mX4, evY2, vCoeffs2, TUNING_CONSTANT);\r\n\t//Log(EInfo, \"Finished running IRLS\");\r\n\r\n\t// Put all the rows together.\r\n\tEigen::Matrix4f mFinal;\r\n\tmFinal << vCoeffs0.x(), vCoeffs0.y(), vCoeffs0.z(), vCoeffs0.w(),\r\n\t\tvCoeffs1.x(), vCoeffs1.y(), vCoeffs1.z(), vCoeffs1.w(),\r\n\t\tvCoeffs2.x(), vCoeffs2.y(), vCoeffs2.z(), vCoeffs2.w(),\r\n\t\t0, 0, 0, 1;\r\n\r\n\tstd::cout << \"Matrix is:\" << std::endl;\r\n\tstd::cout << vCoeffs0.x() << \" \" << vCoeffs0.y() << \" \" << vCoeffs0.z() << \" \" << vCoeffs0.w() << std::endl;\r\n\tstd::cout << vCoeffs1.x() << \" \" << vCoeffs1.y() << \" \" << vCoeffs1.z() << \" \" << vCoeffs1.w() << std::endl;\r\n\tstd::cout << vCoeffs2.x() << \" \" << vCoeffs2.y() << \" \" << vCoeffs2.z() << \" \" << vCoeffs2.w() << std::endl;\r\n\tstd::cout << 0 << \" \" << 0 << \" \" << 0 << \" \" << 1 << std::endl;\r\n\tstd::cout << medianScale << std::endl; // for xFormScene scale factor of 1\r\n\r\n\tstd::ofstream myfile;\r\n\tmyfile.open(outPath + \"/transform.txt\");\r\n\tmyfile << vCoeffs0.x() << \" \" << vCoeffs0.y() << \" \" << vCoeffs0.z() << \" \" << vCoeffs0.w() << std::endl;\r\n\tmyfile << vCoeffs1.x() << \" \" << vCoeffs1.y() << \" \" << vCoeffs1.z() << \" \" << vCoeffs1.w() << std::endl;\r\n\tmyfile << vCoeffs2.x() << \" \" << vCoeffs2.y() << \" \" << vCoeffs2.z() << \" \" << vCoeffs2.w() << std::endl;\r\n\tmyfile << 0 << \" \" << 0 << \" \" << 0 << \" \" << 1 << std::endl;\r\n\tmyfile << 1 << std::endl; // for xFormScene scale factor of 1\r\n\tmyfile.close();\r\n\r\n\t//create new mesh :\r\n\tMesh alignedMesh = mesh2Align;\r\n\tstd::cout << \"Input vertices num : \" << mesh2Align.vertices().size();\r\n\tMesh::Vertices newVertices;\r\n\tfor (sibr::Vector3f v : alignedMesh.vertices()) {\r\n\t\tsibr::Vector4f v4(v.x(), v.y(), v.z(), 1.0);\r\n\t\tnewVertices.push_back((mFinal * v4).xyz());\r\n\t}\r\n\talignedMesh.vertices(newVertices);\r\n\tstd::cout << \" Output vertices num : \" << alignedMesh.vertices().size() << std::endl;\r\n\r\n\tif (myArgs.saveScene) {\r\n\t\tsibr::makeDirectory(outPath + \"/meshes\");\r\n\t\tsibr::makeDirectory(outPath + \"/cameras\");\r\n\t\tsibr::makeDirectory(outPath + \"/images\");\r\n\r\n\t\t//Save the meshes\r\n\t\talignedMesh.save(outPath + \"/meshes/recon.ply\", true);\r\n\t\talignedMesh.save(outPath + \"/meshes/recon.obj\", true);\r\n\t\r\n\t\t//Save the cameras\r\n\t\t//transform first\r\n\t\tfor (auto& cam : cams2Align) {\r\n\t\t\tsibr::Vector3f pos = cam->position();\r\n\t\t\tsibr::Vector3f center = cam->position() + cam->dir();\r\n\t\t\tsibr::Vector3f up = cam->position() + cam->up();\r\n\t\t\tpos = (mFinal * pos.homogeneous()).xyz();\r\n\t\t\tcenter = (mFinal * center.homogeneous()).xyz();\r\n\t\t\tup = (mFinal * up.homogeneous()).xyz();\r\n\t\t\tcam->setLookAt(pos, center, (up - pos).normalized());\r\n\t\t}\r\n\t\tstd::vector<InputCamera::Ptr> outCams;\r\n\t\tfor (const auto& cam : cams2Align) {\r\n\t\t\toutCams.push_back(std::make_shared<InputCamera>(*cam));\r\n\t\t}\r\n\r\n\t\tsibr::InputCamera::saveAsBundle(outCams, outPath + \"/cameras/bundle.out\");\r\n\r\n\t\t//Save the images and metadata\r\n\t\tstd::ofstream outputSceneMetadata;\r\n\t\toutputSceneMetadata.open(outPath + \"/scene_metadata.txt\");\r\n\t\toutputSceneMetadata << \"Scene Metadata File\\n\" << std::endl;\r\n\t\toutputSceneMetadata << \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\" << std::endl;\r\n\r\n\t\tint im = 0;\r\n\t\tfor (const auto& camIm : cams2Align) {\r\n\r\n\t\t\t//std::string extensionFile = boost::filesystem::extension(camIm->name());\r\n\t\t\tstd::ostringstream ssZeroPad;\r\n\t\t\tssZeroPad << std::setw(8) << std::setfill('0') << camIm->id();\r\n\t\t\tstd::string newFileName = ssZeroPad.str() + \".jpg\";\r\n\t\t\timgs2AlignOriginal[im]->save(outPath + \"/images/\" + newFileName);\r\n\t\t\toutputSceneMetadata << newFileName << \" \" << camIm->w() << \" \" << camIm->h() << \" \" << camIm->znear() << \" \" << camIm->zfar() << std::endl;\r\n\t\t\tim++;\r\n\t\t}\r\n\t\toutputSceneMetadata << \"\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\" << std::endl;\r\n\t\toutputSceneMetadata << \"\\n\\n\\n[other parameters]\" << std::endl;\r\n\t\toutputSceneMetadata.close();\r\n\t}\r\n\telse { // just save meshes (transform.txt saved above)\r\n\t\tstd::string textureFileName;\r\n\t\t// could preserve texture name, but is probably cleaner to have standard name\r\n\t\ttextureFileName = \"textured_u1_v1.png\";\r\n\r\n\t\talignedMesh.save(outPath + \"/mesh.ply\", true, textureFileName);\r\n\t\talignedMesh.save(outPath + \"/mesh.obj\", true);\r\n\t\t// save the mtl file\r\n\t\tstd::string mtlFileName = outPath + \"/mesh.mtl\";\r\n\t\tstd::ofstream mtlFile;\r\n\t\tmtlFile.open(mtlFileName);\r\n\t\tmtlFile << \"# File produced by SIBR\\n\\nnewmtl $Material_0\\nKa 1 1 1\\nKd 1 1 1\\nd 1\\nNs 0\\nillum 1\\nmap_Kd \" << textureFileName;\r\n\t\tmtlFile.close();\r\n\t}\r\n\r\n\treturn EXIT_SUCCESS;\r\n}\r\n\r\n\r\n\r\ntemplate <typename T> std::vector<size_t> sort_indexes(const std::vector<T>& v) {\r\n\r\n\t// initialize original index locations\r\n\tstd::vector<size_t> idx(v.size());\r\n\tiota(idx.begin(), idx.end(), 0);\r\n\r\n\t// sort indexes based on comparing values in v\r\n\tsort(idx.begin(), idx.end(),\r\n\t\t[&v](size_t i1, size_t i2) {return v[i1] < v[i2]; });\r\n\r\n\treturn idx;\r\n}\r\n\r\n\r\n\r\nvoid computeRT(std::vector<sibr::Vector3f> A, std::vector<sibr::Vector3f>B, Matrix3f S, Matrix3f& R, sibr::Vector3f& T) {\r\n\r\n\t//finding R,T such that B = RA + T;\r\n\tconst int numPoint = B.size();\r\n\t//Scaling the points to align\r\n\tstd::vector<sibr::Vector3f> AScaled;\r\n\tfor (int i = 0; i < numPoint; i++) {\r\n\t\tAScaled.push_back(S * A[i]);\r\n\t}\r\n\r\n\t//Computing the centroids\r\n\tsibr::Vector3f centroidB(0, 0, 0);\r\n\tsibr::Vector3f centroidA(0, 0, 0);\r\n\tfor (int i = 0; i < numPoint; i++) {\r\n\t\tcentroidB += B[i];\r\n\t\tcentroidA += AScaled[i];\r\n\t}\r\n\tcentroidB /= numPoint;\r\n\tcentroidA /= numPoint;\r\n\r\n\r\n\t//Now we estimate the rotation :\r\n\tMatrix3f H;\r\n\tH << 0, 0, 0,\r\n\t\t0, 0, 0,\r\n\t\t0, 0, 0;\r\n\r\n\tfor (int i = 0; i < numPoint; i++) {\r\n\t\tH += (AScaled[i] - centroidA) * (B[i] - centroidB).transpose();\r\n\t}\r\n\r\n\tEigen::JacobiSVD<Eigen::MatrixXf> svd(H, Eigen::ComputeThinU | Eigen::ComputeThinV);\r\n\r\n\tR = svd.matrixV() * svd.matrixU().transpose();\r\n\tif (R.determinant() < 0) {\r\n\t\t//R.col(2) *= -1;\r\n\t\t//std::cout << \"Warning : determinant of rotation matrix is negative, multiplying last column by -1\" << std::endl;\r\n\t}\r\n\r\n\t//Translation estimation :\r\n\tT = -R * centroidA + centroidB;\r\n\r\n}\r\n\r\nfloat computeS(std::vector<sibr::Vector3f> A, std::vector<sibr::Vector3f>B, float& minScale, float& maxScale) {\r\n\t//findin S such that A*S has the same scale as B\r\n\tsibr::Vector3f meanPosA(0, 0, 0);\r\n\tsibr::Vector3f meanPosB(0, 0, 0);\r\n\r\n\tfor (int i = 0; i < A.size(); i++) {\r\n\t\tmeanPosA += A[i];\r\n\t\tmeanPosB += B[i];\r\n\t}\r\n\r\n\tmeanPosA /= A.size();\r\n\tmeanPosB /= A.size();\r\n\r\n\tfloat scale = 0;\r\n\tfor (int i = 0; i < A.size(); i++) {\r\n\r\n\t\tfloat scale_i = (B[i] - meanPosB).norm() / (A[i] - meanPosA).norm();\r\n\t\tscale += scale_i;\r\n\r\n\t\tif (scale_i > maxScale)\r\n\t\t\tmaxScale = scale_i;\r\n\t\tif (scale_i < minScale)\r\n\t\t\tminScale = scale_i;\r\n\t}\r\n\r\n\tscale /= A.size();\r\n\r\n\treturn scale;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/cameraConverter/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(cameraConverter)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n\tsibr_system\n\tsibr_assets\n    sibr_graphics\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/cameraConverter/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"core/system/CommandLineArgs.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n\nusing namespace sibr;\n\n/* Camera converter args. */\nstruct CameraConverterArgs : virtual AppArgs {\n\tRequiredArg<std::string> input = { \"input\",  \"input camera file\" };\n\tRequiredArg<std::string> output = { \"output\",   \"output camera file\" };\n\tRequiredArg<std::string> colmapPath = { \"colmapPath\",   \"path to colmap recon for camera file\" };\n\tArg<std::string> transfo = { \"transfo\",  \"\", \"matrix file\" };\n\tArg<sibr::Vector2u> inputRes = {\"ires\", {1920, 1080}, \"input camera resolution (not required for all formats)\"};\n\tArg<sibr::Vector2u> outputRes = { \"ores\", {1920, 1080}, \"output camera resolution (not required for all formats)\" };\n\tArg<bool> inverse = {\"inverse\",  \"reverse the transformation\"};\n\tArg<bool> bundleImageList = { \"images_list\", \"for a bundle output, output list_images.txt\" };\n\tArg<bool> bundleImageFiles = { \"images_files\",  \"for a bundle output, output empty images in a 'visualize' subdirectory\" };\n\tArg<std::string> inImageFilePath = { \"in_images_files\", \"\", \"for a bundle input images file directory (for list_images etc)\" };\n\tArg<float> scale = { \"scale\", 1.0, \"scale images for cameras.txt file\" };\n};\n\n/* SIBR binary path loader helper.\n * \\param filename the .path binary file\n * \\param cams will be populated with the loaded cameras\n * \\param res the image resolution (for aspect ratio)\n * \\return the loading status\n */\nbool load(const std::string& filename, std::vector<InputCamera::Ptr> & cams, const sibr::Vector2u & res){\n\tsibr::ByteStream stream;\n\tif(!stream.load(filename)) {\n\t\treturn false;\n\t}\n\tint32 num = 0;\n\tstream >> num;\n\twhile (num > 0) {\n\t\tCamera cam;\n\t\tstream >> cam;\n\t\tcams.push_back(std::make_shared<InputCamera>(cam, res[0], res[1]));\n\t\t--num;\n\t}\n\treturn stream;\n}\n\n/** SIBR binary path saver helper.\n * \\param filename the .path output file\n * \\param cams the cameras to save\n */\nvoid save(const std::string& filename, const std::vector<InputCamera::Ptr> & cams){\n\tsibr::ByteStream stream;\n\tconst int32 num = int32(cams.size());\n\tstream << num;\n\tfor (const InputCamera::Ptr& cam : cams) {\n\t\tCamera subcam(*cam);\n\t\tstream << subcam;\n\t}\n\tstream.saveToFile(filename);\n}\n\n\t\n\nvoid colmapSave(const std::string& filename, const std::vector<InputCamera::Ptr> & xformPath, float scale, float focaly, float focalx) {\n\t// save as colmap images.txt file\n\tsibr::Matrix3f converter;\n\tconverter << 1, 0, 0,\n\t\t     0, -1, 0,\n\t\t     0, 0, -1;\n\t\n\tstd::ofstream outputColmapPath, outputColmapPathCams;\n\tstd::string colmapPathCams = parentDirectory(filename) + std::string(\"/cameras.txt\");\n\n\tstd::cerr << std::endl;\n\tstd::cerr << std::endl;\n\tstd::cerr << \"Writing colmap path to \" << parentDirectory(filename) << std::endl;\n\t\n\toutputColmapPath.open(filename);\n\tif(!outputColmapPath.good())\n\t\tSIBR_ERR << \"Cant open output file \" <<  filename << std::endl;\n\toutputColmapPathCams.open(colmapPathCams);\n\n\toutputColmapPathCams << \"# Camera list with one line of data per camera:\" << std::endl;\n\toutputColmapPathCams << \"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\" << std::endl;\n\toutputColmapPathCams << \"# Number of cameras: 1\" << std::endl;\n\tif (focalx == -1) {\n\t\tfocalx = xformPath[0]->focal() * xformPath[0]->aspect(); // use aspect ratio\n\t\tSIBR_WRG << \"No focal x given making it equal to focaly * aspect ratio; use result at own risk. Should have a colmap dataset as input\" << std::endl;\n\t}\n\telse\n\t{\n\t\tstd::cerr << \"FX \" << focalx << std::endl;\n\t\tfocalx = xformPath[0]->focal() * (focalx / focaly);\n\t\tSIBR_WRG << \"Focal x set to f / (fx/fy); f of first image :\" << focalx<<std::endl;\n\t}\n\tfor(int i=0; i<xformPath.size(); i++)  {\n\t\toutputColmapPathCams << i+1 << \" PINHOLE \" << xformPath[0]->w()*scale << \" \" << xformPath[0]->h()*scale\n\t\t\t<< \" \" << xformPath[0]->focal()*scale << \" \" << focalx*scale \n\t\t\t<< \" \" << xformPath[0]->w()*scale * 0.5 << \" \" << xformPath[0]->h()*scale * 0.5 << std::endl;\n\t}\n\n\n\toutputColmapPath<< \"# Image list with two lines of data per image:\" << std::endl;\n\toutputColmapPath<< \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\" << std::endl;\n\toutputColmapPath<< \"#   POINTS2D[] as (X, Y, POINT3D_ID)\" << std::endl;\n\tfor(int i=0; i<xformPath.size(); i++)  {\n\t\tsibr::Matrix3f tmp = xformPath[i]->rotation().toRotationMatrix() * converter;\n\t\tsibr::Matrix3f Qinv = tmp.transpose();\n\t\tsibr::Quaternionf q = quatFromMatrix(Qinv);\n\t\tsibr::Vector3f t = -Qinv*xformPath[i]->position();\n\n\t\toutputColmapPath << i << \" \" <<  q.w() << \" \" <<  -q.x() << \" \" <<  -q.y() << \" \" <<  -q.z() << \" \" <<  \n\t\t\tt.x() << \" \" << t.y() << \" \" << t.z() << \" \" << 1 << \" \" << \"pathImage\"<<i << std::endl;\n\t\toutputColmapPath << std::endl; // empty line, no points\n\t}\n\toutputColmapPath.close();\n\toutputColmapPathCams.close();\n}\n\n\n/** The camera converter is a utility to convert a camera path from a file format to another, with additional options.\n * You can specify a 4x4 transformation matrix to apply, stored in a txt file (values separated by spaces/newlines, f.i. the output of CloudCompare alignment).\n * If you want to apply the inverse transformation, use the --inverse flag.\n * Supported inputs: path (*), lookat (*), bundle, nvm (*), colmap\n * Supported outputs: path, bundle(*), lookat, colmap (images.txt)\n * (*): requires an input/output resolution (often only for the aspect ratio).\n * */\nint main(int ac, char** av) {\n\n\t// Parse Command-line Args\n\tsibr::CommandLineArgs::parseMainArgs(ac, av);\n\tconst CameraConverterArgs args;\n\n\t// Load cameras.\n\tstd::vector<InputCamera::Ptr> cams;\n\tconst std::string ext = sibr::getExtension(args.input);\n\tif(ext == \"path\") {\n\t\tload(args.input, cams, args.inputRes);\n\t} else if(ext == \"lookat\") {\n\t\tcams = InputCamera::loadLookat(args.input, { args.inputRes });\n\t} else if (ext == \"out\") {\n\t\tif (std::string(args.inImageFilePath) == \"\")\n\t\t\tSIBR_ERR << \"Please provide image file directory for bundler input (use option -in_images_files DIRECTORY_CONTAINING_LIST_IMAGES.txt )\\nIf necessary use the generate_list_images.py script to generate list_images.txt \" << std::endl;\n\t\tcams = InputCamera::loadBundle(args.input, 0.01, 1000, args.inImageFilePath, true);\n\t} else if (ext == \"nvm\") {\n\t\tcams = InputCamera::loadNVM(args.input, 0.01f, 1000.0f, {args.inputRes});\n\t} else if (sibr::directoryExists(args.input)) {\n\t\t// If we got a directory, assume colmap sparse.\n\t\tcams = InputCamera::loadColmap(args.input, 0.01, 1000, 1);\n\t} else {\n\t\tSIBR_ERR << \"Unsupported path file extension: \" << ext << \".\" << std::endl;\n\t\treturn EXIT_FAILURE;\n\t}\n\tSIBR_LOG << \"Loaded \" << cams.size() << \" cameras.\" << std::endl;\n\n\tfloat focaly = cams[0]->focal(); // y by default\n\tfloat focalx = cams[0]->focalx();\n\n\t// if a path is given try and get focalx\n\tstd::vector<InputCamera::Ptr> camsFx;\n\tif (args.colmapPath != \"\") {\n\t\tstd::cerr << \"COLMAP \" << args.colmapPath << std::endl;\n\t\tstd::string cm_sparse_path = args.colmapPath.get() + \"/stereo/sparse\";\n\t\tif (directoryExists(cm_sparse_path)) {\n\t\t\tcamsFx = InputCamera::loadColmap(cm_sparse_path, 0.01, 1000, 1);\n\t\t\tstd::cerr << \"Found \" << camsFx.size() << \" cameras fovx \" << camsFx[0]->focalx() << std::endl;\n\t\t\tfocalx = camsFx[0]->focalx();\n\t\t}\n\t\telse\n\t\t\tstd::cerr << \"Cant find \" << cm_sparse_path << std::endl;\n\t}\n\n\t// Load the transformation.\n\tstd::ifstream transFile(args.transfo.get());\n\tsibr::Matrix4f transf = sibr::Matrix4f::Identity();\n\tif (transFile.is_open()) {\n\t\tfor (int i = 0; i < 16; ++i) {\n\t\t\tfloat f;\n\t\t\ttransFile >> f;\n\t\t\ttransf(i) = f;\n\t\t}\n\t\ttransFile.close();\n\t}\n\ttransf.transposeInPlace();\n\tif (args.inverse) {\n\t\ttransf = transf.inverse().eval();\n\t}\n\n\t// Apply transformation to each camera keypoints, if it's not identity.\n\tif(!transf.isIdentity()) {\n\t\tSIBR_LOG << \"Applying transformation: \" << std::endl << transf << std::endl;\n\t\tfor (auto & cam : cams) {\n\t\t\tsibr::Vector3f pos = cam->position();\n\t\t\tsibr::Vector3f center = cam->position() + cam->dir();\n\t\t\tsibr::Vector3f up = cam->position() + cam->up();\n\t\t\tpos = (transf * pos.homogeneous()).xyz();\n\t\t\tcenter = (transf * center.homogeneous()).xyz();\n\t\t\tup = (transf * up.homogeneous()).xyz();\n\t\t\tcam->setLookAt(pos, center, (up - pos).normalized());\n\n\t\t}\n\t}\n\n\t// Save cameras.\n\tconst std::string outExt = sibr::getExtension(args.output);\n\tif (outExt == \"path\") {\n\t\tsave(args.output, cams);\n\t} else if (outExt == \"out\") { // bundler\n\t\tstd::vector<InputCamera::Ptr> outCams;\n\t\tfor(const auto & cam : cams) {\n\t\t\tconst int outH = int(args.outputRes.get()[1]);\n\t\t\tconst int outW = int(std::round(cam->aspect() * float(outH)));\n\t\t\tInputCamera::Ptr oc;\n\t\t\toutCams.push_back(oc=std::make_shared<InputCamera>(*cam, outW, outH));\n\t\t\t// reset focal\n\t\t\toc->setFocal(cam->focal());\n\t\t}\n\t\tsibr::InputCamera::saveAsBundle(outCams, args.output, args.bundleImageList, args.bundleImageFiles, false);\n\t} else if (outExt == \"lookat\") {\n\t\tstd::vector<InputCamera::Ptr> outCams;\n\t\tfor (const auto& cam : cams) {\n\t\t\tconst int outH = int(args.outputRes.get()[1]);\n\t\t\tconst int outW = int(std::round(cam->aspect() * float(outH)));\n\t\t\toutCams.push_back(std::make_shared<InputCamera>(*cam, outW, outH));\n\t\t}\n\t\tsibr::InputCamera::saveAsLookat(outCams, args.output);\n\t}\n\telse if (getFileName(args.output) == \"images.txt\" ) { // colmap\n\t\tcolmapSave(args.output, cams, args.scale, focaly, focalx);\n\t} else {\n\t\tSIBR_ERR << \"Unsupported output file extension: \" << outExt << \".\" << std::endl;\n\t\treturn EXIT_FAILURE;\n\t}\n\tSIBR_LOG << \"Saved transformed cameras to \\\"\" << args.output.get() << \"\\\".\" << std::endl;\n\t\t\n\treturn EXIT_SUCCESS;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/clippingPlanes/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(clippingPlanes)\n\n# libraries used:\n# * sibr graphics (vector2i class)\n# * sibr system (programArg class)\n# * boost filesystem (path class)\n# * openmp\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n    sibr_graphics\n    sibr_assets\n    sibr_raycaster\n    sibr_system\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/clippingPlanes/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n#include <iostream>\n#include <core/system/CommandLineArgs.hpp>\n#include <core/raycaster/CameraRaycaster.hpp>\n#include <core/assets/ImageListFile.hpp>\n#include <core/system/Utils.hpp>\n\n/*\ngenerate clipping_planes.txt file\n*/\nconst char* USAGE\t\t\t\t\t\t= \"Usage: clippingPlanes <dataset-path> \\n\";\nconst char* TAG\t\t\t\t\t\t\t= \"[clippingPlanes]\";\n\nusing namespace sibr;\n\n\nint main(const int argc, const char** argv)\n{\n\n\tif (argc < 1 + 1)\n\t{\n\t\tstd::cout << USAGE << std::endl;\n\t\treturn 1;\n\t}\n\n\tstd::string\t\tdatasetPath = argv[1];\n\n\tif (directoryExists(datasetPath) == false) {\n\t\tSIBR_ERR << \"Wrong program options, check the usage.\";\n\t\treturn 1;\n\t}\n\n\t// load rest of the things\n\tstd::vector<InputCamera::Ptr>\tinCams = InputCamera::load(datasetPath);\n\tImageListFile\t\t\t\timageListFile;\n\tMesh\t\t\t\t\t\tproxy(false);\n\n\t// check needed things are there\n\tif (imageListFile.load(datasetPath + \"/images/list_images.txt\") == false && imageListFile.load(datasetPath + \"/list_images.txt\") == false)\n\t\treturn 1;\n\n\tif ((proxy.load(datasetPath + \"/meshes/pmvs_recon.ply\") == false) && (proxy.load(datasetPath + \"/meshes/mesh.ply\") == false) && (proxy.load(datasetPath + \"/pmvs_recon.ply\") == false) && (proxy.load(datasetPath + \"/recon.ply\") == false) && (proxy.load(datasetPath + \"/meshes/recon.ply\") == false))\n\t\treturn 1;\n\n\tconst std::string clipping_planes_file_path = datasetPath + \"/clipping_planes.txt\";\n\tif (!sibr::fileExists(clipping_planes_file_path)) {\n\n\t\tstd::vector<sibr::Vector2f> nearsFars;\n\t\tCameraRaycaster::computeClippingPlanes(proxy, inCams, nearsFars);\n\n\t\tstd::ofstream file(clipping_planes_file_path, std::ios::trunc | std::ios::out);\n\t\tif (file) {\n\t\t\tfor (const auto & nearFar : nearsFars) {\n\t\t\t\tif (nearFar[0] > 0 && nearFar[1] > 0) {\n\t\t\t\t\tfile << nearFar[0] << ' ' << nearFar[1] << std::endl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t/** \\todo [SP]Temporary fix. Ideally we should exclude these images. */\n\t\t\t\t\tfile << \"0.1 100.0\" << std::endl;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfile.close();\n\t\t}\n\t\telse {\n\t\t\tSIBR_WRG << \" Could not save file '\" << clipping_planes_file_path << \"'.\" << std::endl;\n\t\t}\n\t}\n\n\tstd::cout << TAG << \" done!\\n\";\n\treturn 0;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(dataset_tools_converters)\n\nfile(GLOB_RECURSE SCRIPTS \"*.py\" \"*.sh\" \"*.mlx\")\n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FILES ${SCRIPTS} RELATIVE)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/bundle.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# in python, elements declared outside __init__ are static (belong to the class)\n# while ones declared inside __init__ belong to the object\n\nimport os\nimport get_image_size   # way faster than loading images in opencv and lightweighted (not as the case with python's pillow)\nfrom enum import IntEnum\n\nclass InputImage:\n\n    def __init__(self, cam_id, path_to_image):\n        self.id         = cam_id\n        self.path       = path_to_image         # absolute path\n        self.filename   = os.path.basename(path_to_image)\n        width, height   = get_image_size.get_image_size(path_to_image)\n        self.resolution = [width, height]\n\n    def __str__(self):\n        return \"{0}\\t{1}\\t{2}\".format(self.path, self.resolution[0], self.resolution[1])\n        # return str(self.filename) + delimiter + str(self.resolution[0]) + delimiter + str(self.resolution[1])\n        #return \"{0}\\t{1}\\t{2}\".format(self.filename, self.resolution[0], self.resolution[1])\n\n\nclass BundleFeaturePointLine (IntEnum):\n    POSITION    = 0\n    COLOR       = 1\n    VIEW_LIST   = 2\n\n\nclass BundleCamera:\n\n    def __init__(self, cam_id, focal_length, radial_dist, rotation, translation):\n        self.id                     = cam_id\n        self.focal_length           = focal_length\n        self.radial_dist            = radial_dist\n        self.rotation               = rotation\n        self.translation            = translation\n\n        # inverse index of feature points\n        self.list_of_feature_points  = []\n\n    def add_feature_point (feature_point):\n        pass\n\n    def set_feature_points (list_of_feature_points):\n        pass\n\n    def scale_focal_length (self, factor):\n        self.focal_length = self.focal_length * factor\n\n    def __str__(self):\n        first_line      = \"{0:g} {1:g} {2:g}\\n\".format(self.focal_length, self.radial_dist[0], self.radial_dist[1])\n        second_line     = \"{0:g} {1:g} {2:g}\\n\".format(self.rotation[0][0], self.rotation[0][1], self.rotation[0][2])\n        third_line      = \"{0:g} {1:g} {2:g}\\n\".format(self.rotation[1][0], self.rotation[1][1], self.rotation[1][2])\n        fourth_line     = \"{0:g} {1:g} {2:g}\\n\".format(self.rotation[2][0], self.rotation[2][1], self.rotation[2][2])\n        fifth_line      = \"{0:g} {1:g} {2:g}\".format(self.translation[0], self.translation[1], self.translation[2])\n        return first_line + second_line + third_line + fourth_line + fifth_line\n\n\nclass BundleFeaturePoint:\n\n    def __init__(self, feature_point_id, position, color, view_list):\n        self.id         = feature_point_id\n        self.position   = position\n        self.color      = color # each channel between [0, 255]\n\n        # list of cameras\n        # each camera has the following info:\n        # (<camId> <sift keypoint> <x> <y>) # (x,y) floating point value with (0,0) center of the img\n        self.view_list  = view_list\n        # for colmap conversion\n        self.point2d_index = {}\n\n    def remove_cam(self, cam_id):\n        for index in range (len(self.view_list)):\n            if (self.view_list[index][0] == cam_id):\n                del self.view_list[index]\n                break\n        # fix all subsequent indices\n\n        newlist = []\n        nr1 = len(self.view_list)\n        change = False\n        for vl_item in self.view_list:\n            newitem = list(vl_item)\n            if (vl_item[0] > cam_id):\n#                change = True\n                newitem[0] = newitem[0]-1\n                newlist.append(tuple(newitem))\n            else:\n                newlist.append(vl_item)\n\n        if change:\n            print(\"NEW : {}\\n\".format( newlist ))\n            print(\"OLD : {}\\n\".format( self.view_list ))\n\n        self.view_list = newlist\n\n    def __str__(self):\n        first_line      = \"{0:g} {1:g} {2:g}\\n\".format(self.position[0], self.position[1], self.position[2])\n        second_line     = \"{0} {1} {2}\\n\".format(self.color[0], self.color[1], self.color[2])\n        third_line      = str(len(self.view_list)) + \" \"\n        cam_index = 0\n        for view_info in self.view_list:\n            third_line = third_line + \"{0:g} {1:g} {2:g} {3:g}\".format(view_info[0], view_info[1], view_info[2], view_info[3])\n            if (cam_index != len(self.view_list) - 1):\n                third_line = third_line + \" \"\n            cam_index = cam_index + 1\n        return first_line + second_line + third_line\n\nclass Bundle:\n\n    MAX_NR_FEATURE_POINTS = 8000000   # if bundle file has more than this limit, features will not be processed at all\n\n    def __init__(self, path_to_bundle):\n        # read bundle file\n        input_file = open(path_to_bundle, \"r\")\n\n        # first line is the header containing bundle version\n        self.header             = input_file.readline().strip()\n        self.nr_cameras, self.nr_feature_points = map(int, input_file.readline().strip().split(\" \"))\n\n        self.using_feature_points = (self.nr_feature_points < Bundle.MAX_NR_FEATURE_POINTS)\n        if (not self.using_feature_points):\n            self.nr_feature_points = 0\n            print (\"[bundle.py] Warning: Too many feature points. They are going to be discarded\")\n\n        self.list_of_cameras = []\n        self.list_of_feature_points = []\n\n        for i in range(self.nr_cameras):\n            # read each camera\n            focal_length, radial_dist_x, radial_dist_y = map(float, input_file.readline().strip().split(\" \"))\n            r11, r12, r13 = map(float, input_file.readline().strip().split(\" \"))\n            r21, r22, r23 = map(float, input_file.readline().strip().split(\" \"))\n            r31, r32, r33 = map(float, input_file.readline().strip().split(\" \"))\n            tx, ty, tz = map(float, input_file.readline().strip().split(\" \"))\n\n            camera = BundleCamera(i, focal_length, (radial_dist_x, radial_dist_y), [ [r11, r12, r13], [r21, r22, r23], [r31, r32, r33] ], [tx, ty, tz])\n\n            self.list_of_cameras.append(camera)\n\n        if (self.using_feature_points):\n            # keep reading input file\n            # read feature points (sometimes there aren't as many as reported in the header)\n            # display a warning when this happens\n            type_of_line_to_read = BundleFeaturePointLine.POSITION\n\n            feature_point_position  = None\n            feature_point_color     = None\n            feature_point_view_list = None\n            feature_point_id        = 0\n\n            for line in input_file:\n                if (type_of_line_to_read == BundleFeaturePointLine.POSITION):\n                    x, y, z = map(float, line.strip().split(\" \"))\n                    feature_point_position = [x, y, z]\n                elif (type_of_line_to_read == BundleFeaturePointLine.COLOR):\n                    r, g, b = map(int, line.strip().split(\" \"))\n                    feature_point_color = [r, g, b]\n                elif (type_of_line_to_read == BundleFeaturePointLine.VIEW_LIST):\n                    tokens = line.split()\n                    nr_cams_that_see_point = int(tokens[0])\n                    list_of_view_info = []\n                    for i in range(nr_cams_that_see_point):\n                        cam_id  = int   (tokens[1 + i*4+0])\n                        sift    = int   (tokens[1 + i*4+1])\n                        x_pos   = float (tokens[1 + i*4+2])\n                        y_pos   = float (tokens[1 + i*4+3])\n                        list_of_view_info.append( (cam_id, sift, x_pos, y_pos) )\n\n                    # add feature point to the list of feature points contained in the bundle\n                    feature_point = BundleFeaturePoint(feature_point_id, feature_point_position, feature_point_color, list_of_view_info)\n                    \n                    # for colmap conversion\n                    for v in list_of_view_info:\n                        if v[0] >= len(self.list_of_cameras):\n                            print(\"ERROR \", v[0], \"  \", len(self.list_of_cameras))\n                        else:\n                            self.list_of_cameras[v[0]].list_of_feature_points.append(feature_point)\n\n                    feature_point_id = feature_point_id + 1\n\n                    self.list_of_feature_points.append(feature_point)\n\n                type_of_line_to_read = (type_of_line_to_read + 1) % len (BundleFeaturePointLine)\n\n        # done processing input file\n        input_file.close()\n\n        # paths\n        self.path_to_bundle_file = path_to_bundle\n        self.root_directory = os.path.dirname(path_to_bundle)\n\n        # get absolute path to input images\n        image_id = 0\n        self.list_of_input_images = []\n        for file_in_dir in os.listdir( self.root_directory ):\n            # input imgs have a [jpg|jpeg|png] extension\n            if (file_in_dir.lower().endswith(\".jpg\" ) or file_in_dir.lower().endswith(\".png\" ) or file_in_dir.lower().endswith(\".jpeg\")):\n                # input images must also have a numerical filename (avoid reading things as texture images that are stored in the same folder)\n                if (os.path.splitext(file_in_dir)[0].isdigit()):\n                    absolute_path = os.path.join(self.root_directory, file_in_dir)\n                    image = InputImage(image_id, absolute_path)\n                    self.list_of_input_images.append(image)\n                    image_id = image_id + 1\n\n        # additional data\n        self.list_of_excluded_cams = []\n        self.has_right_nr_feature_pts = False\n        self.has_right_nr_images = (len(self.list_of_cameras) == len(self.list_of_input_images))\n\n        if (not self.has_right_nr_images):\n            print (\"[bundle.py] Warning: nr cameras in bundle file (\" + str(len(self.list_of_cameras)) + \") is not the same as nr of images in \" + self.root_directory + \" (\" + str(len(self.list_of_input_images)) + \")\")\n\n        print (\"[bundle.py] Message: Done reading bundle file\", path_to_bundle)\n        print (\"[bundle.py] Message: Nr cams in bundle file\", len(self.list_of_cameras))\n        print (\"[bundle.py] Message: Nr images in root folder\", len(self.list_of_input_images))\n        print (\"[bundle.py] Message: Nr feature points\", len(self.list_of_feature_points))\n\n    def get_avg_resolution (self):\n        result = [0, 0]\n        for image in self.list_of_input_images:\n            result[0] = result[0] + image.resolution[0]\n            result[1] = result[1] + image.resolution[1]\n        if (len(self.list_of_input_images) != 0):\n            result[0] = (int)(result[0] / len(self.list_of_input_images))\n            result[1] = (int)(result[1] / len(self.list_of_input_images))\n        return result\n\n    def generate_list_of_images_file (self, path_to_output):\n        output_file = open (path_to_output, \"w\")\n        for image in self.list_of_input_images:\n            output_file.write(str(image) + '\\n')\n        output_file.close()\n\n\n    def scale (self, factor):\n        for cam in self.list_of_cameras:\n            cam.scale_focal_length(factor)\n\n    def exclude_cams (self, cam_list, verbose = True):\n        if (verbose):\n            print (\"[bundle.py] Message: excluding images\", cam_list)\n        # calling this method twice doesn't make sense because\n        # we need to make sure the index passed refer to the right cameras to remove\n\n        # sort list of cams to exclude by decreasing order\n        cam_list.sort(reverse=True)\n        for index in cam_list:\n            # don't forget to go through feature points and remove ref to cam\n            for feature_point in self.list_of_feature_points:\n                feature_point.remove_cam(index)\n\n            # log the cam id that was removed by adding it to the internal list of excluded cams\n            self.list_of_excluded_cams.append(index)\n\n            del self.list_of_cameras[index]\n            del self.list_of_input_images[index]\n\n        # update nr_cameras attribute\n        self.nr_cameras = len (self.list_of_cameras)\n\n    def save (self, path_to_output_file, new_res=[]):\n        output_file = open(path_to_output_file, \"w\")\n\n        output_file.write(self.header + '\\n')\n        output_file.write(str(self.nr_cameras) + \" \" + str(self.nr_feature_points) + '\\n')\n\n        if new_res == []:\n            for cam in self.list_of_cameras:\n                output_file.write(str(cam) + '\\n')\n        else:\n            # not needed TODO: verify\n            #indx = 0\n            for cam in self.list_of_cameras:\n                #im = self.list_of_input_images[indx]\n                #old_w = im.resolution[0]\n                #old_h = im.resolution[1]\n                #new_focal = cam.focal_length*(min(old_h/new_res[1], old_w/new_res[0]))\n                #print(\"Old : \", cam.focal_length, \" New : \" , new_focal)\n                #cam.focal_length = new_focal\n                output_file.write(str(cam) + '\\n')\n                #indx = indx + 1\n            \n        for feature_point in self.list_of_feature_points:\n#            print(\"Writing \", len(feature_point.view_list) , \" FEATURE POINTS \" )\n            if len(feature_point.view_list)> 0:\n                output_file.write(str(feature_point) + '\\n')\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/colmap2sibr.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script calls meshlab to simplify a mesh\n\nParameters: --h help,\n            --path <path to dataset>\n\nUsage: python colmap2sibr.py --path <path to dataset> [required]\n\n\"\"\"\n\nimport os, sys\nimport argparse\nimport os, sys, getopt\nimport re\nfrom utils.commands import getProcess\nfrom utils.paths import getBinariesPath\nfrom utils.commands import runCommand\nimport subprocess\nfrom pathlib import Path\n\n\ndef checkColmapConsistent(pathdir):\n    colmapDir = Path(pathdir+\"/colmap\")\n\n    if not os.path.isdir(colmapDir):\n        return False\n\n    # check for mesh\n    colmapmesh = Path(pathdir+\"/colmap/stereo/meshed-delaunay.ply\")\n    if not os.path.isfile(colmapmesh):\n        print(\"SIBR_ERROR: colmap directory exists but there is no mesh \", colmapmesh)\n        print(\"No file\", colmapmesh)\n        return False\n\n    return True\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--path\", type=str, required=True, help=\"path to dataset folder\")\n\n    args = vars(parser.parse_args())\n\n    if not checkColmapConsistent(args['path']):\n        print(\"SIBR_ERROR Colmap hasnt been run properly; run it first (ie dont use --noColmap)\")\n        sys.exit(1)\n\n\t# prepareColmap4Sibr: convert cameras and create bundle file put everything in sfm_mvs_cm, then run the normal preprocessing\n    # \n    prepareColmap_app = getProcess(\"prepareColmap4Sibr\")\n    \n    prepareColmap_args = [prepareColmap_app,\n        \"--path\", args['path'],\n        ]\n\n    print(\"Running prepareColmap4Sibr \", prepareColmap_args)\n    p_exit = subprocess.call(prepareColmap_args)\n    if p_exit != 0:\n        print(\"SIBR ERROR: prepareColmap4Sibr failed, exiting\")\n        sys.exit(1)\n\n\t# run rc_to_sibr process to make all images have the same size and be compatible with spixelwarp pipeline\n    p_exit = subprocess.call([\"python\", \"ibr_preprocess_rc_to_sibr.py\",  \"-i\", args['path']+\"/sfm_mvs_cm\",  \"-o\", args['path']+\"/sibr_cm\"])\n    if p_exit != 0:\n        print(\"SIBR_ERROR preprocess to sibr_cm failed\");\n        sys.exit(1)\n\n    prepareColmap_app = getProcess(\"prepareColmap4Sibr\")\n    \n    prepareColmap_args = [prepareColmap_app,\n\t\t\"--fix_metadata\", \n        \"--path\", args['path'],\n        ]\n\n    print(\"Running prepareColmap4Sibr to fix scene_dataset.txt \", prepareColmap_args)\n    p_exit = subprocess.call(prepareColmap_args)\n    if p_exit != 0:\n        print(\"SIBR ERROR: prepareColmap4Sibr failed, exiting\")\n        sys.exit(1)\n\n\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/generate_list_images.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\nimport argparse, sys, os\nfrom PIL import Image, UnidentifiedImageError\n\ndef generateListImages(imagesPath, outputPath = None, filename = \"list_images.txt\"):\n    if not os.path.exists(imagesPath):\n        print(\"Path '%s' does not exists. Aborting.\" % imagesPath)\n        sys.exit(1)\n\n    if not outputPath:\n        outputPath = imagesPath\n    elif not os.path.exists(outputPath):\n        print(\"Path '%s' does not exists. Aborting.\" % outputPath)\n        sys.exit(1)\n\n    files = os.listdir(imagesPath)\n\n    if not files:\n        print(\"No files found in directory '%s'. Aborting.\" % imagesPath)\n        sys.exit(1)\n\n    with open(os.path.join(outputPath, filename), \"w\") as list_images:\n        for file in files:\n            try:\n                if os.path.isdir(os.path.join(imagesPath, file)):\n                    raise UnidentifiedImageError()\n                with Image.open(os.path.join(imagesPath, file)) as image:\n                    list_images.write(\"%s %s %s\\n\" % (file, image.width, image.height))\n            except UnidentifiedImageError:\n                print(\"File '%s' is not a recognizable image. Skipping.\" % file)\n\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--imagesPath\", type=str, required=True, help=\"path to your images folder\")\n    parser.add_argument(\"--outputPath\", type=str, default=None, help=\"output path where to place the list_images.txt\")\n    parser.add_argument(\"--filename\", type=str, default=None, help=\"filename for the image list\")\n\n    args = vars(parser.parse_args())\n\n    if not args[\"outputPath\"]:\n        args[\"outputPath\"] = args[\"imagesPath\"]\n    elif not os.path.isdir(args[\"outputPath\"]) and os.path.basename(args[\"outputPath\"]) and not args[\"filename\"]:\n        args[\"outputPath\"], args[\"filename\"] = os.path.split(args[\"outputPath\"])\n    \n    if not args[\"filename\"]:\n        args[\"filename\"] = \"list_images.txt\"\n\n    print(\"Generating '%s' file from images in '%s' and saving to '%s'.\" % (args[\"filename\"], args[\"imagesPath\"], args[\"outputPath\"]))\n\n    generateListImages(os.path.abspath(args[\"imagesPath\"]), os.path.abspath(args[\"outputPath\"]), args[\"filename\"])\n\n    print(\"'%s' generated successfully.\" % args[\"filename\"])\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/get_image_size.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\"\"\"\n\nget_image_size.py\n====================\n\n    :Name:        get_image_size\n    :Purpose:     extract image dimensions given a file path\n\n    :Author:      Paulo Scardine (based on code from Emmanuel VAÏSSE)\n\n    :Created:     26/09/2013\n    :Copyright:   (c) Paulo Scardine 2013\n    :Licence:     MIT\n\n\"\"\"\nimport collections\nimport json\nimport os\nimport struct\n\nFILE_UNKNOWN = \"Sorry, don't know how to get size for this file.\"\n\n\nclass UnknownImageFormat(Exception):\n    pass\n\n\ntypes = collections.OrderedDict()\nBMP = types['BMP'] = 'BMP'\nGIF = types['GIF'] = 'GIF'\nICO = types['ICO'] = 'ICO'\nJPEG = types['JPEG'] = 'JPEG'\nPNG = types['PNG'] = 'PNG'\nTIFF = types['TIFF'] = 'TIFF'\n\nimage_fields = ['path', 'type', 'file_size', 'width', 'height']\n\n\nclass Image(collections.namedtuple('Image', image_fields)):\n\n    def to_str_row(self):\n        return (\"%d\\t%d\\t%d\\t%s\\t%s\" % (\n            self.width,\n            self.height,\n            self.file_size,\n            self.type,\n            self.path.replace('\\t', '\\\\t'),\n        ))\n\n    def to_str_row_verbose(self):\n        return (\"%d\\t%d\\t%d\\t%s\\t%s\\t##%s\" % (\n            self.width,\n            self.height,\n            self.file_size,\n            self.type,\n            self.path.replace('\\t', '\\\\t'),\n            self))\n\n    def to_str_json(self, indent=None):\n        return json.dumps(self._asdict(), indent=indent)\n\n\ndef get_image_size(file_path):\n    \"\"\"\n    Return (width, height) for a given img file content - no external\n    dependencies except the os and struct builtin modules\n    \"\"\"\n    img = get_image_metadata(file_path)\n    return (img.width, img.height)\n\n\ndef get_image_metadata(file_path):\n    \"\"\"\n    Return an `Image` object for a given img file content - no external\n    dependencies except the os and struct builtin modules\n\n    Args:\n        file_path (str): path to an image file\n\n    Returns:\n        Image: (path, type, file_size, width, height)\n    \"\"\"\n    size = os.path.getsize(file_path)\n\n    # be explicit with open arguments - we need binary mode\n    with open(file_path, \"rb\") as input:\n        height = -1\n        width = -1\n        data = input.read(26)\n        msg = \" raised while trying to decode as JPEG.\"\n\n        if (size >= 10) and data[:6] in (b'GIF87a', b'GIF89a'):\n            # GIFs\n            imgtype = GIF\n            w, h = struct.unpack(\"<HH\", data[6:10])\n            width = int(w)\n            height = int(h)\n        elif ((size >= 24) and data.startswith(b'\\211PNG\\r\\n\\032\\n')\n              and (data[12:16] == b'IHDR')):\n            # PNGs\n            imgtype = PNG\n            w, h = struct.unpack(\">LL\", data[16:24])\n            width = int(w)\n            height = int(h)\n        elif (size >= 16) and data.startswith(b'\\211PNG\\r\\n\\032\\n'):\n            # older PNGs\n            imgtype = PNG\n            w, h = struct.unpack(\">LL\", data[8:16])\n            width = int(w)\n            height = int(h)\n        elif (size >= 2) and data.startswith(b'\\377\\330'):\n            # JPEG\n            imgtype = JPEG\n            input.seek(0)\n            input.read(2)\n            b = input.read(1)\n            try:\n                while (b and ord(b) != 0xDA):\n                    while (ord(b) != 0xFF):\n                        b = input.read(1)\n                    while (ord(b) == 0xFF):\n                        b = input.read(1)\n                    if (ord(b) >= 0xC0 and ord(b) <= 0xC3):\n                        input.read(3)\n                        h, w = struct.unpack(\">HH\", input.read(4))\n                        break\n                    else:\n                        input.read(\n                            int(struct.unpack(\">H\", input.read(2))[0]) - 2)\n                    b = input.read(1)\n                width = int(w)\n                height = int(h)\n            except struct.error:\n                raise UnknownImageFormat(\"StructError\" + msg)\n            except ValueError:\n                raise UnknownImageFormat(\"ValueError\" + msg)\n            except Exception as e:\n                raise UnknownImageFormat(e.__class__.__name__ + msg)\n        elif (size >= 26) and data.startswith(b'BM'):\n            # BMP\n            imgtype = 'BMP'\n            headersize = struct.unpack(\"<I\", data[14:18])[0]\n            if headersize == 12:\n                w, h = struct.unpack(\"<HH\", data[18:22])\n                width = int(w)\n                height = int(h)\n            elif headersize >= 40:\n                w, h = struct.unpack(\"<ii\", data[18:26])\n                width = int(w)\n                # as h is negative when stored upside down\n                height = abs(int(h))\n            else:\n                raise UnknownImageFormat(\n                    \"Unkown DIB header size:\" +\n                    str(headersize))\n        elif (size >= 8) and data[:4] in (b\"II\\052\\000\", b\"MM\\000\\052\"):\n            # Standard TIFF, big- or little-endian\n            # BigTIFF and other different but TIFF-like formats are not\n            # supported currently\n            imgtype = TIFF\n            byteOrder = data[:2]\n            boChar = \">\" if byteOrder == \"MM\" else \"<\"\n            # maps TIFF type id to size (in bytes)\n            # and python format char for struct\n            tiffTypes = {\n                1: (1, boChar + \"B\"),  # BYTE\n                2: (1, boChar + \"c\"),  # ASCII\n                3: (2, boChar + \"H\"),  # SHORT\n                4: (4, boChar + \"L\"),  # LONG\n                5: (8, boChar + \"LL\"),  # RATIONAL\n                6: (1, boChar + \"b\"),  # SBYTE\n                7: (1, boChar + \"c\"),  # UNDEFINED\n                8: (2, boChar + \"h\"),  # SSHORT\n                9: (4, boChar + \"l\"),  # SLONG\n                10: (8, boChar + \"ll\"),  # SRATIONAL\n                11: (4, boChar + \"f\"),  # FLOAT\n                12: (8, boChar + \"d\")   # DOUBLE\n            }\n            ifdOffset = struct.unpack(boChar + \"L\", data[4:8])[0]\n            try:\n                countSize = 2\n                input.seek(ifdOffset)\n                ec = input.read(countSize)\n                ifdEntryCount = struct.unpack(boChar + \"H\", ec)[0]\n                # 2 bytes: TagId + 2 bytes: type + 4 bytes: count of values + 4\n                # bytes: value offset\n                ifdEntrySize = 12\n                for i in range(ifdEntryCount):\n                    entryOffset = ifdOffset + countSize + i * ifdEntrySize\n                    input.seek(entryOffset)\n                    tag = input.read(2)\n                    tag = struct.unpack(boChar + \"H\", tag)[0]\n                    if(tag == 256 or tag == 257):\n                        # if type indicates that value fits into 4 bytes, value\n                        # offset is not an offset but value itself\n                        type = input.read(2)\n                        type = struct.unpack(boChar + \"H\", type)[0]\n                        if type not in tiffTypes:\n                            raise UnknownImageFormat(\n                                \"Unkown TIFF field type:\" +\n                                str(type))\n                        typeSize = tiffTypes[type][0]\n                        typeChar = tiffTypes[type][1]\n                        input.seek(entryOffset + 8)\n                        value = input.read(typeSize)\n                        value = int(struct.unpack(typeChar, value)[0])\n                        if tag == 256:\n                            width = value\n                        else:\n                            height = value\n                    if width > -1 and height > -1:\n                        break\n            except Exception as e:\n                raise UnknownImageFormat(str(e))\n        elif size >= 2:\n                # see http://en.wikipedia.org/wiki/ICO_(file_format)\n            imgtype = 'ICO'\n            input.seek(0)\n            reserved = input.read(2)\n            if 0 != struct.unpack(\"<H\", reserved)[0]:\n                raise UnknownImageFormat(FILE_UNKNOWN)\n            format = input.read(2)\n            assert 1 == struct.unpack(\"<H\", format)[0]\n            num = input.read(2)\n            num = struct.unpack(\"<H\", num)[0]\n            if num > 1:\n                import warnings\n                warnings.warn(\"ICO File contains more than one image\")\n            # http://msdn.microsoft.com/en-us/library/ms997538.aspx\n            w = input.read(1)\n            h = input.read(1)\n            width = ord(w)\n            height = ord(h)\n        else:\n            raise UnknownImageFormat(FILE_UNKNOWN)\n\n    return Image(path=file_path,\n                 type=imgtype,\n                 file_size=size,\n                 width=width,\n                 height=height)\n\n\nimport unittest\n\n\nclass Test_get_image_size(unittest.TestCase):\n    data = [{\n        'path': 'lookmanodeps.png',\n        'width': 251,\n        'height': 208,\n        'file_size': 22228,\n        'type': 'PNG'}]\n\n    def setUp(self):\n        pass\n\n    def test_get_image_metadata(self):\n        img = self.data[0]\n        output = get_image_metadata(img['path'])\n        self.assertTrue(output)\n        self.assertEqual(output.path, img['path'])\n        self.assertEqual(output.width, img['width'])\n        self.assertEqual(output.height, img['height'])\n        self.assertEqual(output.type, img['type'])\n        self.assertEqual(output.file_size, img['file_size'])\n        for field in image_fields:\n            self.assertEqual(getattr(output, field), img[field])\n\n    def test_get_image_metadata__ENOENT_OSError(self):\n        with self.assertRaises(OSError):\n            get_image_metadata('THIS_DOES_NOT_EXIST')\n\n    def test_get_image_metadata__not_an_image_UnknownImageFormat(self):\n        with self.assertRaises(UnknownImageFormat):\n            get_image_metadata('README.rst')\n\n    def test_get_image_size(self):\n        img = self.data[0]\n        output = get_image_size(img['path'])\n        self.assertTrue(output)\n        self.assertEqual(output,\n                         (img['width'],\n                          img['height']))\n\n    def tearDown(self):\n        pass\n\n\ndef main(argv=None):\n    \"\"\"\n    Print image metadata fields for the given file path.\n\n    Keyword Arguments:\n        argv (list): commandline arguments (e.g. sys.argv[1:])\n    Returns:\n        int: zero for OK\n    \"\"\"\n    import logging\n    import optparse\n    import sys\n\n    prs = optparse.OptionParser(\n        usage=\"%prog [-v|--verbose] [--json|--json-indent] <path0> [<pathN>]\",\n        description=\"Print metadata for the given image paths \"\n                    \"(without image library bindings).\")\n\n    prs.add_option('--json',\n                   dest='json',\n                   action='store_true')\n    prs.add_option('--json-indent',\n                   dest='json_indent',\n                   action='store_true')\n\n    prs.add_option('-v', '--verbose',\n                   dest='verbose',\n                   action='store_true',)\n    prs.add_option('-q', '--quiet',\n                   dest='quiet',\n                   action='store_true',)\n    prs.add_option('-t', '--test',\n                   dest='run_tests',\n                   action='store_true',)\n\n    argv = list(argv) if argv is not None else sys.argv[1:]\n    (opts, args) = prs.parse_args(args=argv)\n    loglevel = logging.INFO\n    if opts.verbose:\n        loglevel = logging.DEBUG\n    elif opts.quiet:\n        loglevel = logging.ERROR\n    logging.basicConfig(level=loglevel)\n    log = logging.getLogger()\n    log.debug('argv: %r', argv)\n    log.debug('opts: %r', opts)\n    log.debug('args: %r', args)\n\n    if opts.run_tests:\n        import sys\n        sys.argv = [sys.argv[0]] + args\n        import unittest\n        return unittest.main()\n\n    output_func = Image.to_str_row\n    if opts.json_indent:\n        import functools\n        output_func = functools.partial(Image.to_str_json, indent=2)\n    elif opts.json:\n        output_func = Image.to_str_json\n    elif opts.verbose:\n        output_func = Image.to_str_row_verbose\n\n    EX_OK = 0\n    EX_NOT_OK = 2\n\n    if len(args) < 1:\n        prs.print_help()\n        print('')\n        prs.error(\"You must specify one or more paths to image files\")\n\n    errors = []\n    for path_arg in args:\n        try:\n            img = get_image_metadata(path_arg)\n            print(output_func(img))\n        except KeyboardInterrupt:\n            raise\n        except OSError as e:\n            log.error((path_arg, e))\n            errors.append((path_arg, e))\n        except Exception as e:\n            log.exception(e)\n            errors.append((path_arg, e))\n            pass\n    if len(errors):\n        import pprint\n        print(\"ERRORS\", file=sys.stderr)\n        print(\"======\", file=sys.stderr)\n        print(pprint.pformat(errors, indent=2), file=sys.stderr)\n        return EX_NOT_OK\n    return EX_OK\n\n\nif __name__ == \"__main__\":\n    import sys\n    sys.exit(main(argv=sys.argv[1:]))\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/ibr_convert_old_to_new.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# --------------------------------------------\n\"\"\" @package dataset_tools_preprocess\nThis script creates a SIBR template dataset from the old SIBR dataset which can be fed to a SIBR application\n\nParameters: -h help,\n            -i <path to input directory which is the output from RC> <default: ${CMAKE_INSTALL_DIR}/bin/datasets/rc_out/>,\n            -o <path to output directory which can be fed into SIBR apps> <default: input directory> [optional],\n            -r use release w/ debug symbols executables\n\nUsage: python ibr_preprocess_rc_to_sibr.py -i <path_to_sibr>\\sibr\\install\\bin\\datasets\\museum_sibr_old_preproc\n                                           -d <path_to_sibr>\\sibr\\install\\bin\\datasets\\museum_sibr_new_preproc2\n\n\"\"\"\n\nimport subprocess\nimport shutil\nimport os, sys, getopt\nimport re\nfrom utils.commands import getProcess\nfrom utils.paths import getBinariesPath\n\nfrom os import walk\n\n#--------------------------------------------\n\n#===============================================================================\n\nimport struct\nimport imghdr\n\ndef get_image_size(fname):\n    '''Determine the image type of fhandle and return its size.\n    from draco'''\n    with open(fname, 'rb') as fhandle:\n        head = fhandle.read(24)\n        if len(head) != 24:\n            return\n        if imghdr.what(fname) == 'png':\n            check = struct.unpack('>i', head[4:8])[0]\n            if check != 0x0d0a1a0a:\n                return\n            width, height = struct.unpack('>ii', head[16:24])\n        elif imghdr.what(fname) == 'gif':\n            width, height = struct.unpack('<HH', head[6:10])\n        elif imghdr.what(fname) == 'jpeg':\n            try:\n                fhandle.seek(0) # Read 0xff next\n                size = 2\n                ftype = 0\n                while not 0xc0 <= ftype <= 0xcf:\n                    fhandle.seek(size, 1)\n                    byte = fhandle.read(1)\n                    while ord(byte) == 0xff:\n                        byte = fhandle.read(1)\n                    ftype = ord(byte)\n                    size = struct.unpack('>H', fhandle.read(2))[0] - 2\n                # We are at a SOFn block\n                fhandle.seek(1, 1)  # Skip `precision' byte.\n                height, width = struct.unpack('>HH', fhandle.read(4))\n            except Exception: #IGNORE:W0703\n                return\n        else:\n            return\n        return width, height\n    \ndef checkOutput( output, force_continue ):\n    if( output != 0):\n        if( not force_continue ):\n            sys.exit()\n        else:\n            return False\n    else:\n        return True\n    \n\n#===============================================================================\n\n#--------------------------------------------\n# 0. Paths, commands and options\n\ndef main(argv, path_dest):\n    opts, args = getopt.getopt(argv, \"hi:ro:\", [\"idir=\", \"bin=\"])\n    executables_suffix = \"\"\n    executables_folder = getBinariesPath()\n    path_data = \"\"\n    for opt, arg in opts:\n        if opt == '-h':\n            print(\"-i path_to_old_dataset -d path_to_new_dataset [-r (use release w/ debug symbols executables)]\")\n            sys.exit()\n        elif opt == '-i':\n            path_data = arg\n            print(['Setting path_data to ', path_data])\n        elif opt == '-r':\n            executables_suffix = \"_rwdi\"\n            print(\"Using rwdi executables.\")\n        elif opt == '-o':\n            path_dest = arg\n            print(['Setting path_dest to ', path_dest])\n\n    return (path_data, path_dest, executables_suffix, executables_folder)\n\npath_dest = \"\"\npath_data, path_dest, executables_suffix, executables_folder = main(sys.argv[1:], path_dest)\n\nif(path_data == \"\"):\n    path_data = os.path.abspath(os.path.join(os.path.dirname(__file__), \"../datasets\"))\n\nif(path_dest == \"\"):\n    path_dest = path_data\n\npath_data = os.path.abspath(path_data + \"/\") + \"/\"\npath_dest = os.path.abspath(path_dest + \"/\") + \"/\"\n\npath_in_imgs = path_data\n\n\nprint(['Raw_data folder: ', path_data])\nprint(['Path_dest: ', path_dest])\n\n#path_dest_pmvs    = path_dest + \"pmvs/models/\";\nfile_nameList   = path_data + \"images/list_images.txt\";\n# path_scene_metadata = path_data + \"scene_metadata.txt\"\n\n\n#--------------------------------------------\n# Create scene metadata file from list image file\nscene_metadata = \"Scene Metadata File\\n\\n\"\n\n# read list image file\npath_list_images = os.path.join(path_in_imgs, \"list_images.txt\")\nlist_images = []\n\nprint(path_list_images)\nif os.path.exists(path_list_images):\n    list_image_file = open(path_list_images, \"r\")\n\n    for line in list_image_file:\n        list_images.append(line)\n\n    list_image_file.close()\n\n# read clipping planes file\npath_clipping_planes = os.path.join(path_data, \"clipping_planes.txt\")\nclipping_planes = []\n\nif os.path.exists(path_clipping_planes):\n    clipping_planes_file = open(path_clipping_planes, \"r\")\n\n    for line in clipping_planes_file:\n        line = line.strip('\\n')\n        clipping_planes.append(line)\n\n    clipping_planes_file.close()\n\n\nif not os.path.exists(path_dest):\n    os.mkdir(path_dest)\n\nfolder_to_create = [\"images\",\"cameras\",\"meshes\",\"textures\"]\nfor f in folder_to_create:\n    if not os.path.exists(os.path.join(path_dest,f)):\n        os.mkdir(os.path.join(path_dest,f))\n\nscene_metadata = scene_metadata + \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\\n\"\n\nfor im in list_images:\n    print(\"copying: \"+im.split(' ', 1)[0])\n    shutil.copy(\n        os.path.join(path_data,im.split(' ', 1)[0]),\n        os.path.join(path_dest,\"images\",im.split(' ', 1)[0])\n        )\n\n    if len(clipping_planes) is not 0:\n        scene_metadata = scene_metadata + im[:-1] + \" \" + clipping_planes[0] + \"\\n\"\n    else:\n        scene_metadata = scene_metadata + im[:-1] + \" 0.01 100\\n\"\n\nshutil.copy(\n        os.path.join(path_data,\"list_images.txt\"),\n        os.path.join(path_dest,\"images\",\"list_images.txt\")\n        )\n\nshutil.copy(\n        os.path.join(path_data,\"bundle.out\"),\n        os.path.join(path_dest,\"cameras\",\"bundle.out\")\n        )\n\nshutil.copy(\n        os.path.join(path_data,\"pmvs/models/pmvs_recon.ply\"),\n        os.path.join(path_dest,\"meshes/recon.ply\")\n        )\n\nscene_metadata = scene_metadata + \"\\n\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\\n\"\n\n\npath_scene_metadata = os.path.join(path_dest, \"scene_metadata.txt\")\n\nscene_metadata_file = open(path_scene_metadata, \"w\")\nscene_metadata_file.write(scene_metadata)\nscene_metadata_file.close()"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/ibr_preprocess_rc_to_sibr.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# --------------------------------------------\n\"\"\" @package dataset_tools_preprocess\nThis script converts a Reality Capture dataset to SIBR template dataset which can be fed to an SIBR application\n\nParameters: -h help,\n            -i <path to input directory which is the output from RC> <default: ${CMAKE_INSTALL_DIR}/bin/datasets/rc_out/>,\n            -o <path to output directory which can be fed into SIBR apps> <default: input directory> [optional],\n            -r use release w/ debug symbols executables\n\nUsage: python ibr_preprocess_rc_to_sibr.py -r\n                                           -i <path_to_sibr>\\sibr\\install\\bin\\datasets\\museum_sibr_new_preproc_template_RCOut\n                                           -o <path_to_sibr>\\sibr\\install\\bin\\datasets\\museum_sibr_new_preproc2\n\n\"\"\"\n\nimport subprocess\nimport shutil\nimport os\nimport re\nfrom utils.commands import getProcess\nfrom utils.paths import getBinariesPath\nfrom generate_list_images import generateListImages\n\nfrom os import walk\n\n# --------------------------------------------\n\nfrom tempfile import mkstemp\nfrom shutil import move\nfrom os import remove, close\n\n# ===============================================================================\n\nimport sys, getopt\nimport struct\nimport imghdr\n\n# ===============================================================================\nimport bundle\n\n\ndef get_image_size(fname):\n    '''Determine the image type of fhandle and return its size.\n    from draco'''\n    with open(fname, 'rb') as fhandle:\n        head = fhandle.read(24)\n        if len(head) != 24:\n            return\n        if imghdr.what(fname) == 'png':\n            check = struct.unpack('>i', head[4:8])[0]\n            if check != 0x0d0a1a0a:\n                return\n            width, height = struct.unpack('>ii', head[16:24])\n        elif imghdr.what(fname) == 'gif':\n            width, height = struct.unpack('<HH', head[6:10])\n        elif imghdr.what(fname) == 'jpeg':\n            try:\n                fhandle.seek(0)  # Read 0xff next\n                size = 2\n                ftype = 0\n                while not 0xc0 <= ftype <= 0xcf:\n                    fhandle.seek(size, 1)\n                    byte = fhandle.read(1)\n                    while ord(byte) == 0xff:\n                        byte = fhandle.read(1)\n                    ftype = ord(byte)\n                    size = struct.unpack('>H', fhandle.read(2))[0] - 2\n                # We are at a SOFn block\n                fhandle.seek(1, 1)  # Skip `precision' byte.\n                height, width = struct.unpack('>HH', fhandle.read(4))\n            except Exception:  # IGNORE:W0703\n                return\n        else:\n            return\n        return width, height\n\n\n# ===============================================================================\n\ndef replace(file_path, pattern, subst):\n    # Create temp file\n    fh, abs_path = mkstemp()\n    with open(abs_path, 'w') as new_file:\n        with open(file_path) as old_file:\n            for line in old_file:\n                new_file.write(line.replace(pattern, subst))\n    close(fh)\n    # Remove original file\n    remove(file_path)\n    # Move new file\n    move(abs_path, file_path)\n\ndef checkOutput( output, force_continue ):\n    \"\"\"Check if an external process succeeded and if we should abort if something went wrong\n\n    Args:\n        output          (int): output of some external launched process (0=fine, 1 or greater=error)\n        force_continue  (bool): should we continue anyway?\n\n    Returns:\n        bool: True if last process succeeded\n    \"\"\"\n    if(output != 0):\n        if( not force_continue ):\n            sys.exit()\n        else:\n            return False\n    else:\n        return True\n\ndef get_textured_mesh_base_name (source_folder):\n    \"\"\"Return the base name of a textured mesh obtained with RealityCapture\n\n    Args:\n        source_folder (str): path to dataset (bundle file, textured and images)\n\n    Returns:\n        str: base name of <base name>.obj, <base name>.mtl and <base name>_u1_v1.png\n    \"\"\"\n    default_name = \"textured\"\n    for file_in_dir in os.listdir (source_folder):\n        if (file_in_dir.lower().endswith(\".mtl\")):\n            return os.path.splitext( file_in_dir )[0]\n    return default_name\n\n\ndef get_scale_factor (current_res, target_res):\n    \"\"\"Return the scale factor needed to go from current_res to target_res.\n    The value is calculated based on the idea that we don't want to crop the input dataset anymore\n    and that we prefer to add black borders in order to reach the target resolution\n\n    Args:\n        current_res (vec2): current dataset resolution\n        target_res  (vec2): target dataset resolution\n\n    Returns:\n        float: scale factor\n    \"\"\"\n\n    # to go from current to target resolution, we have to options:\n    # either scale down current width to match target width and modify height accordingly\n    # or scalen down current height to match target height and modify width accordingly.\n    # we take the option that doesn't crop the remaining dimension and add the least black border\n\n    # trying scaling down width\n    alpha_by_width  = (float)(target_res[0]) / current_res[0]\n    adjusted_height = (int) (alpha_by_width * current_res[1])\n    delta_height    = target_res[1] - adjusted_height\n\n    # trying scaling down height\n    alpha_by_height = (float)(target_res[1]) / current_res[1]\n    adjusted_width  = (int) (alpha_by_height * current_res[0])\n    delta_width     = target_res[0] - adjusted_width\n\n    # since we don't want to crop the input images even more, we considerer only\n    # the options were black borders need to be added\n\n    if (delta_height < 0):\n        # height would need to be cropped. take the other option\n        return alpha_by_height\n    elif (delta_width < 0):\n        # width would need to be cropped. take the other option\n        return alpha_by_width\n    else:\n        # none of them need to be cropped. take option that adds less black border\n        return alpha_by_width if (delta_height < delta_width) else alpha_by_height\n\n\n\n# ===============================================================================\n\n# --------------------------------------------\n# 0. Paths, commands and options\n\ndef main(argv, path_dest):\n    opts, args = getopt.getopt(argv, \"hi:ro:\", [\"idir=\", \"bin=\"])\n    executables_suffix = \"\"\n    executables_folder = getBinariesPath()\n    path_data = \"\"\n    for opt, arg in opts:\n        if opt == '-h':\n            print(\"-i path_to_rc_data_dir -o path_to_destination_dir [-r (use release w/ debug symbols executables)]\")\n            sys.exit()\n        elif opt == '-i':\n            path_data = arg\n            print(['Setting path_data to ', path_data])\n        elif opt == '-r':\n            executables_suffix = \"_rwdi\"\n            print(\"Using rwdi executables.\")\n        elif opt == '-o':\n            path_dest = arg\n            print(['Setting path_dest to ', path_dest])\n        elif opt in ('-bin', '--bin'):\n            executables_folder = os.path.abspath(arg)\n\n    return (path_data, path_dest, executables_suffix, executables_folder)\n\n\npath_dest = \"\"\npath_data, path_dest, executables_suffix, executables_folder = main(sys.argv[1:], path_dest)\n\nif(path_data == \"\"):\n    path_data = os.path.abspath(os.path.join(os.path.dirname(__file__), \"../datasets\"))\n\nif(path_dest == \"\"):\n    path_dest = path_data\n\npath_data = os.path.abspath(path_data + \"/\") + \"/\"\npath_dest = os.path.abspath(path_dest + \"/\") + \"/\"\nexecutables_folder = os.path.abspath(executables_folder + \"/\") + \"/\"\n\npath_in_imgs = path_data\npath_out_imgs = path_dest + \"images/\"\n\nprint(['Raw_data folder: ', path_data])\nprint(['Path_dest: ', path_dest])\nprint(['Executables folder: ', executables_folder])\n\n# dirs to create\n\nraw_data = \"raw/\"\ncameras_dir = \"cameras/\"\nimages_dir = \"images/\"\npmvs_model_dir\t= \"meshes/\"\nparentdir = os.path.dirname(os.path.split(path_dest)[0]) \nprint(\"COMPARE \" ,  parentdir , \" AND \" ,  os.path.dirname(os.path.split(path_data)[0]))\nif( parentdir == os.path.dirname(os.path.split(path_data)[0])):\n\tcapreal_dir = os.path.join(parentdir, \"capreal/\")\n\tprint(\"CAPREAL \" ,  capreal_dir)\n\tif not os.path.exists(capreal_dir):\n\t\tos.makedirs(capreal_dir)\n\ndirs_to_create = [ raw_data, cameras_dir, images_dir, pmvs_model_dir]\n\nfor dir_to_create in dirs_to_create:\n    path_to_dir = os.path.join(path_dest, dir_to_create)\n    if not os.path.exists(path_to_dir):\n        os.makedirs(path_to_dir)\n\n\n################################# GLOBALS ######################################\n\n# half size parameters\nwidth_limit         = 2500\ncreate_temp_folders = False\n\ninput_bundle = bundle.Bundle(path_data + \"bundle.out\")\n\n\n############################# RUN DISTORDCROP ##################################\n# by calling distordCrop (preprocess/distordCrop), input images that have a\n# resolution completely different from the average or that have too much\n# black border added by RealityCapture will be listed in a exclude_images.txt file.\n# A new proposed resolution will be also output in a file called cropNewSize.txt\n# In order to accelerate this process and avoid loading the images multiple times,\n# make sure that average resolution was already calculated and there is file called\n# resolutions.txt in the dataset source folder containing the current resolution\n# of each image.\n\n# distordCrop executable\ncrop_app = getProcess(\"distordCrop\" + executables_suffix, executables_folder)\n\n# query current avera resolution in dataset\navg_resolution = input_bundle.get_avg_resolution()\n\n# generate resolutions.txt and put it in the current dataset folder\nresolutions_txt_path = os.path.join(path_data, \"resolutions.txt\")\ninput_bundle.generate_list_of_images_file(resolutions_txt_path)\n\n# call distordCrop\np_exit = subprocess.call([crop_app, \"--path\", path_data, \"--ratio\",  \"0.3\", \"--avg_width\", str(avg_resolution[0]), \"--avg_height\", str(avg_resolution[1]) ])\nprint(crop_app, \" exited with \", p_exit);\ncheckOutput(p_exit, False)\n\n# read new proposed resolution and check if images were discarded\nexclude = []\npath_to_exclude_images_txt = os.path.join(path_data, \"exclude_images.txt\")\nif (os.path.exists(path_to_exclude_images_txt)):\n    # list of excluded cameras (one line having all the camera ids to exclude)\n    exclusion_file = open(path_to_exclude_images_txt, \"r\")\n    line = exclusion_file.readline()\n    tokens = line.split()\n\n    for cam_id in tokens:\n        exclude.append(int(cam_id))\n    exclusion_file.close()\n\n# exclude cams from bundle file\ninput_bundle.exclude_cams (exclude)\n\n# read proposed cropped resolution\npath_to_crop_new_size_txt = os.path.join(path_data, \"cropNewSize.txt\")\nwith open(path_to_crop_new_size_txt) as crop_size_file:\n    line = crop_size_file.readline()\n    tokens = line.split()\n    new_width   = int(tokens[0])\n    new_height  = int(tokens[1])\n    proposed_res = [new_width, new_height]\n\nprint(\"crop size:\", proposed_res)\n\n################################################################################\n\n##################### TRANSFORM IMAGES TO TARGET RESOLUTION ####################\n# we need to crop images to the previous proposed resolution (crop applied from the center).\n# if a target resolution was passed as parameter, we also need to scale down the images\n# and pad them with black borders in order to end up with the exact target resolution.\n# Before padding the images, we need to have available the temporary result of the\n# dataset scaled down in order to potentially call harmonize (which doesn't work with\n# images that were padded with black borders).\n# Scaled down dataset will be stored inside \\<destination_folder\\>/scaledDown\n# and we will store the scale down factor in a scale_factor.txt file\ntarget_res = None\nif (proposed_res[0] > width_limit):\n    half_width  = (int)(proposed_res[0] * 0.5)\n    half_height = (int)(proposed_res[0] * 0.5)\n    target_res  = [half_width, half_height]\n\n# cropFromCenter executable\ncrop_from_center_app = getProcess(\"cropFromCenter\" + executables_suffix, executables_folder)\n\n# generate file with list of current selected images to process\npath_to_transform_list_txt = os.path.join (path_data, \"toTransform.txt\")\ninput_bundle.generate_list_of_images_file(path_to_transform_list_txt)\n\ncrop_from_center_args = [crop_from_center_app,\n    \"--inputFile\", path_to_transform_list_txt,\n    \"--outputPath\", path_out_imgs,\n    \"--avgResolution\", str(avg_resolution[0]), str(avg_resolution[1]),\n    \"--cropResolution\", str(proposed_res[0]), str(proposed_res[1])\n]\n\n# calculate scale factor and how to achieve target resolution\n# scaled dataset will be store in destionation_folder/scaled\nif (target_res is not None):\n    scale_factor = get_scale_factor(proposed_res, target_res)\n    crop_from_center_args.extend([\n        \"--scaleDownFactor\", str(scale_factor),\n        \"--targetResolution\", str(target_res[0]), str(target_res[1])\n    ])\n\n# call cropFromCenter\np_exit = subprocess.call(crop_from_center_args)\nprint(crop_from_center_app, \" exited with \", p_exit);\ncheckOutput(p_exit, False)\n\n# write bundle file in output cameras folder\npath_to_output_bundle = os.path.join (path_dest, cameras_dir, \"bundle.out\")\ninput_bundle.save(path_to_output_bundle)\n\n# and also in scaled down output folder if needed\nif (target_res is not None):\n    # scale bundle file for the same factor\n    input_bundle.scale(scale_factor)\n    path_to_scaled_down_output_bundle = os.path.join (os.path.join (path_dest, \"images/scaled\"), \"bundle.out\")\n    input_bundle.save(path_to_scaled_down_output_bundle)\n\n################################################################################\n\n############################ MOVE REST OF ASSETS ###############################\n\ntextured_mesh_base_name = get_textured_mesh_base_name(path_data)\nprint(\"***** TEXT * \", textured_mesh_base_name)\n\n# copy files\nfiles_to_move = [   #['pmvs/models/pmvs_recon.ply',''],\n                    ['pmvs_recon.ply', pmvs_model_dir],\n                    ['mesh.ply', pmvs_model_dir],\n                    ['mesh.ply', capreal_dir],\n                    ['recon.ply', pmvs_model_dir],\n                    ['rc_out.csv', path_dest],\n                    [\"textured.obj\", capreal_dir],\n                    [\"textured.mtl\", capreal_dir],\n                    [\"textured_u1_v1.png\", capreal_dir],\n                    [textured_mesh_base_name + \".obj\", capreal_dir],\n                    [textured_mesh_base_name + \".mtl\", capreal_dir],\n                    [textured_mesh_base_name + \"_u1_v1.png\", capreal_dir] ]\nfor filename, directory_name in files_to_move:\n    source_file = os.path.join (path_data, filename)\n    destination_file = os.path.join (os.path.join (path_dest, directory_name), filename)\n    # print(\"Trying \",  source_folder + file , \" \", destination_folder + dir + file )\n    print(\"Trying \",  source_file , \"-->\", destination_file )\n    if (os.path.exists(source_file)):\n        print(\"Moving \",  source_file , \" \", destination_file )\n        shutil.copy( source_file , destination_file )\n\n################################################################################\n\n######################## CALCULATE CLIPPING PLANES #############################\n# clippingPlanes executable\nclipping_planes_app = getProcess(\"clippingPlanes\" + executables_suffix, executables_folder)\n\nclipping_planes_args = [clipping_planes_app, path_dest]\n\n# call clippingPlanes app\np_exit = subprocess.call(clipping_planes_args)\nprint(clipping_planes_app, \" exited with \", p_exit);\ncheckOutput(p_exit, False)\n\n################################################################################\n\n########################## CREATE LIST IMAGES ##################################\n\npath_images = os.path.join(path_dest, images_dir)\npath_list_images = os.path.join(path_images, \"list_images.txt\")\ngenerateListImages(path_images)\n\n################################################################################\n\n######################## CREATE SCENE METADATA #################################\n\n# read list image file\nlist_images = []\n\nif os.path.exists(path_list_images):\n    list_image_file = open(path_list_images, \"r\")\n\n    for line in list_image_file:\n        list_images.append(line)\n\n    list_image_file.close()\n\n# read clipping planes file\npath_clipping_planes = os.path.join(path_dest, \"clipping_planes.txt\")\nclipping_planes = []\n\nif os.path.exists(path_clipping_planes):\n    clipping_planes_file = open(path_clipping_planes, \"r\")\n\n    for line in clipping_planes_file:\n        clipping_planes.append(line)\n\n    clipping_planes_file.close()\n\n\n# Create scene metadata file from list image file\nscene_metadata = \"Scene Metadata File\\n\\n\"\n\nif len(list_images) == len(clipping_planes):\n    scene_metadata = scene_metadata + \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\\n\"\n    new_list = [a[:-1] + \" \" + b for a, b in zip(list_images, clipping_planes)]\n    for line in new_list:\n        scene_metadata = scene_metadata + line\n\nscene_metadata = scene_metadata + \"\\n\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\\n\"\n\n# if len(exclude) > 0:\n#     for line in exclude:\n#         scene_metadata = scene_metadata + str(line) + \" \"\n\nscene_metadata = scene_metadata + \"\\n\\n\\n[other parameters]\"\n\n\n# rename pmvs_recon.ply to recon.ply\nif (os.path.exists(os.path.join(path_dest, pmvs_model_dir, \"pmvs_recon.ply\"))):\n    shutil.copy(os.path.join(path_dest, pmvs_model_dir, \"pmvs_recon.ply\"), os.path.join(path_dest, pmvs_model_dir, \"recon.ply\"))\n\nif (os.path.exists(os.path.join(path_dest, pmvs_model_dir, \"mesh.ply\"))):\n    shutil.copy(os.path.join(path_dest, pmvs_model_dir, \"mesh.ply\"), os.path.join(path_dest, pmvs_model_dir, \"recon.ply\"))\n\npath_scene_metadata = os.path.join(path_dest, \"scene_metadata.txt\")\n\nscene_metadata_file = open(path_scene_metadata, \"w\")\nscene_metadata_file.write(scene_metadata)\nscene_metadata_file.close()\n\n################################################################################\n\nfor filename in os.listdir(path_data):\n    src = os.path.join(path_data, filename)\n    dst = os.path.join(path_dest, raw_data)\n    if not os.path.isdir(src):\n        shutil.copy(src, dst)\n\nprint(\"Fin.\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/simplify.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Remove Duplicate Vertices\"/>\n <filter name=\"Remove Unreferenced Vertices\"/>\n <filter name=\"Simplification: Quadric Edge Collapse Decimation\">\n  <Param name=\"TargetFaceNum\" type=\"RichInt\" tooltip=\"The desired final number of faces.\" value=\"100000\" description=\"Target number of faces\"/>\n  <Param name=\"TargetPerc\" type=\"RichFloat\" tooltip=\"If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.\" value=\"0\" description=\"Percentage reduction (0..1)\"/>\n  <Param name=\"QualityThr\" type=\"RichFloat\" tooltip=\"Quality threshold for penalizing bad shaped faces.&lt;br>The value is in the range [0..1]&#xa; 0 accept any kind of face (no penalties),&#xa; 0.5  penalize faces with quality &lt; 0.5, proportionally to their shape&#xa;\" value=\"0.3\" description=\"Quality threshold\"/>\n  <Param name=\"PreserveBoundary\" type=\"RichBool\" tooltip=\"The simplification process tries to do not affect mesh boundaries during simplification\" value=\"false\" description=\"Preserve Boundary of the mesh\"/>\n  <Param name=\"BoundaryWeight\" type=\"RichFloat\" tooltip=\"The importance of the boundary during simplification. Default (1.0) means that the boundary has the same importance of the rest. Values greater than 1.0 raise boundary importance and has the effect of removing less vertices on the border. Admitted range of values (0,+inf). \" value=\"1\" description=\"Boundary Preserving Weight\"/>\n  <Param name=\"PreserveNormal\" type=\"RichBool\" tooltip=\"Try to avoid face flipping effects and try to preserve the original orientation of the surface\" value=\"false\" description=\"Preserve Normal\"/>\n  <Param name=\"PreserveTopology\" type=\"RichBool\" tooltip=\"Avoid all the collapses that should cause a topology change in the mesh (like closing holes, squeezing handles, etc). If checked the genus of the mesh should stay unchanged.\" value=\"false\" description=\"Preserve Topology\"/>\n  <Param name=\"OptimalPlacement\" type=\"RichBool\" tooltip=\"Each collapsed vertex is placed in the position minimizing the quadric error.&#xa; It can fail (creating bad spikes) in case of very flat areas. &#xa;If disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. \" value=\"true\" description=\"Optimal position of simplified vertices\"/>\n  <Param name=\"PlanarQuadric\" type=\"RichBool\" tooltip=\"Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh, as a side effect, more triangles will be preserved in flat areas (allowing better shaped triangles).\" value=\"false\" description=\"Planar Simplification\"/>\n  <Param name=\"PlanarWeight\" type=\"RichFloat\" tooltip=\"How much we should try to preserve the triangles in the planar regions. If you lower this value planar areas will be simplified more.\" value=\"0.001\" description=\"Planar Simp. Weight\"/>\n  <Param name=\"QualityWeight\" type=\"RichBool\" tooltip=\"Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.\" value=\"false\" description=\"Weighted Simplification\"/>\n  <Param name=\"AutoClean\" type=\"RichBool\" tooltip=\"After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)\" value=\"true\" description=\"Post-simplification cleaning\"/>\n  <Param name=\"Selected\" type=\"RichBool\" tooltip=\"The simplification is applied only to the selected set of faces.&#xa; Take care of the target number of faces!\" value=\"false\" description=\"Simplify only selected faces\"/>\n </filter>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/simplify200.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Remove Duplicate Vertices\"/>\n <filter name=\"Remove Unreferenced Vertices\"/>\n <filter name=\"Simplification: Quadric Edge Collapse Decimation\">\n  <Param name=\"TargetFaceNum\" type=\"RichInt\" tooltip=\"The desired final number of faces.\" value=\"200000\" description=\"Target number of faces\"/>\n  <Param name=\"TargetPerc\" type=\"RichFloat\" tooltip=\"If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.\" value=\"0\" description=\"Percentage reduction (0..1)\"/>\n  <Param name=\"QualityThr\" type=\"RichFloat\" tooltip=\"Quality threshold for penalizing bad shaped faces.&lt;br>The value is in the range [0..1]&#xa; 0 accept any kind of face (no penalties),&#xa; 0.5  penalize faces with quality &lt; 0.5, proportionally to their shape&#xa;\" value=\"0.3\" description=\"Quality threshold\"/>\n  <Param name=\"PreserveBoundary\" type=\"RichBool\" tooltip=\"The simplification process tries to do not affect mesh boundaries during simplification\" value=\"false\" description=\"Preserve Boundary of the mesh\"/>\n  <Param name=\"BoundaryWeight\" type=\"RichFloat\" tooltip=\"The importance of the boundary during simplification. Default (1.0) means that the boundary has the same importance of the rest. Values greater than 1.0 raise boundary importance and has the effect of removing less vertices on the border. Admitted range of values (0,+inf). \" value=\"1\" description=\"Boundary Preserving Weight\"/>\n  <Param name=\"PreserveNormal\" type=\"RichBool\" tooltip=\"Try to avoid face flipping effects and try to preserve the original orientation of the surface\" value=\"false\" description=\"Preserve Normal\"/>\n  <Param name=\"PreserveTopology\" type=\"RichBool\" tooltip=\"Avoid all the collapses that should cause a topology change in the mesh (like closing holes, squeezing handles, etc). If checked the genus of the mesh should stay unchanged.\" value=\"false\" description=\"Preserve Topology\"/>\n  <Param name=\"OptimalPlacement\" type=\"RichBool\" tooltip=\"Each collapsed vertex is placed in the position minimizing the quadric error.&#xa; It can fail (creating bad spikes) in case of very flat areas. &#xa;If disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. \" value=\"true\" description=\"Optimal position of simplified vertices\"/>\n  <Param name=\"PlanarQuadric\" type=\"RichBool\" tooltip=\"Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh, as a side effect, more triangles will be preserved in flat areas (allowing better shaped triangles).\" value=\"false\" description=\"Planar Simplification\"/>\n  <Param name=\"PlanarWeight\" type=\"RichFloat\" tooltip=\"How much we should try to preserve the triangles in the planar regions. If you lower this value planar areas will be simplified more.\" value=\"0.001\" description=\"Planar Simp. Weight\"/>\n  <Param name=\"QualityWeight\" type=\"RichBool\" tooltip=\"Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.\" value=\"false\" description=\"Weighted Simplification\"/>\n  <Param name=\"AutoClean\" type=\"RichBool\" tooltip=\"After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)\" value=\"true\" description=\"Post-simplification cleaning\"/>\n  <Param name=\"Selected\" type=\"RichBool\" tooltip=\"The simplification is applied only to the selected set of faces.&#xa; Take care of the target number of faces!\" value=\"false\" description=\"Simplify only selected faces\"/>\n </filter>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/simplify250.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Remove Duplicate Vertices\"/>\n <filter name=\"Remove Unreferenced Vertices\"/>\n <filter name=\"Simplification: Quadric Edge Collapse Decimation\">\n  <Param name=\"TargetFaceNum\" type=\"RichInt\" tooltip=\"The desired final number of faces.\" value=\"250000\" description=\"Target number of faces\"/>\n  <Param name=\"TargetPerc\" type=\"RichFloat\" tooltip=\"If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.\" value=\"0\" description=\"Percentage reduction (0..1)\"/>\n  <Param name=\"QualityThr\" type=\"RichFloat\" tooltip=\"Quality threshold for penalizing bad shaped faces.&lt;br>The value is in the range [0..1]&#xa; 0 accept any kind of face (no penalties),&#xa; 0.5  penalize faces with quality &lt; 0.5, proportionally to their shape&#xa;\" value=\"0.3\" description=\"Quality threshold\"/>\n  <Param name=\"PreserveBoundary\" type=\"RichBool\" tooltip=\"The simplification process tries to do not affect mesh boundaries during simplification\" value=\"false\" description=\"Preserve Boundary of the mesh\"/>\n  <Param name=\"BoundaryWeight\" type=\"RichFloat\" tooltip=\"The importance of the boundary during simplification. Default (1.0) means that the boundary has the same importance of the rest. Values greater than 1.0 raise boundary importance and has the effect of removing less vertices on the border. Admitted range of values (0,+inf). \" value=\"1\" description=\"Boundary Preserving Weight\"/>\n  <Param name=\"PreserveNormal\" type=\"RichBool\" tooltip=\"Try to avoid face flipping effects and try to preserve the original orientation of the surface\" value=\"false\" description=\"Preserve Normal\"/>\n  <Param name=\"PreserveTopology\" type=\"RichBool\" tooltip=\"Avoid all the collapses that should cause a topology change in the mesh (like closing holes, squeezing handles, etc). If checked the genus of the mesh should stay unchanged.\" value=\"false\" description=\"Preserve Topology\"/>\n  <Param name=\"OptimalPlacement\" type=\"RichBool\" tooltip=\"Each collapsed vertex is placed in the position minimizing the quadric error.&#xa; It can fail (creating bad spikes) in case of very flat areas. &#xa;If disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. \" value=\"true\" description=\"Optimal position of simplified vertices\"/>\n  <Param name=\"PlanarQuadric\" type=\"RichBool\" tooltip=\"Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh, as a side effect, more triangles will be preserved in flat areas (allowing better shaped triangles).\" value=\"false\" description=\"Planar Simplification\"/>\n  <Param name=\"PlanarWeight\" type=\"RichFloat\" tooltip=\"How much we should try to preserve the triangles in the planar regions. If you lower this value planar areas will be simplified more.\" value=\"0.001\" description=\"Planar Simp. Weight\"/>\n  <Param name=\"QualityWeight\" type=\"RichBool\" tooltip=\"Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.\" value=\"false\" description=\"Weighted Simplification\"/>\n  <Param name=\"AutoClean\" type=\"RichBool\" tooltip=\"After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)\" value=\"true\" description=\"Post-simplification cleaning\"/>\n  <Param name=\"Selected\" type=\"RichBool\" tooltip=\"The simplification is applied only to the selected set of faces.&#xa; Take care of the target number of faces!\" value=\"false\" description=\"Simplify only selected faces\"/>\n </filter>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/simplify300.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Remove Duplicate Vertices\"/>\n <filter name=\"Remove Unreferenced Vertices\"/>\n <filter name=\"Simplification: Quadric Edge Collapse Decimation\">\n  <Param name=\"TargetFaceNum\" type=\"RichInt\" tooltip=\"The desired final number of faces.\" value=\"300000\" description=\"Target number of faces\"/>\n  <Param name=\"TargetPerc\" type=\"RichFloat\" tooltip=\"If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.\" value=\"0\" description=\"Percentage reduction (0..1)\"/>\n  <Param name=\"QualityThr\" type=\"RichFloat\" tooltip=\"Quality threshold for penalizing bad shaped faces.&lt;br>The value is in the range [0..1]&#xa; 0 accept any kind of face (no penalties),&#xa; 0.5  penalize faces with quality &lt; 0.5, proportionally to their shape&#xa;\" value=\"0.3\" description=\"Quality threshold\"/>\n  <Param name=\"PreserveBoundary\" type=\"RichBool\" tooltip=\"The simplification process tries to do not affect mesh boundaries during simplification\" value=\"false\" description=\"Preserve Boundary of the mesh\"/>\n  <Param name=\"BoundaryWeight\" type=\"RichFloat\" tooltip=\"The importance of the boundary during simplification. Default (1.0) means that the boundary has the same importance of the rest. Values greater than 1.0 raise boundary importance and has the effect of removing less vertices on the border. Admitted range of values (0,+inf). \" value=\"1\" description=\"Boundary Preserving Weight\"/>\n  <Param name=\"PreserveNormal\" type=\"RichBool\" tooltip=\"Try to avoid face flipping effects and try to preserve the original orientation of the surface\" value=\"false\" description=\"Preserve Normal\"/>\n  <Param name=\"PreserveTopology\" type=\"RichBool\" tooltip=\"Avoid all the collapses that should cause a topology change in the mesh (like closing holes, squeezing handles, etc). If checked the genus of the mesh should stay unchanged.\" value=\"false\" description=\"Preserve Topology\"/>\n  <Param name=\"OptimalPlacement\" type=\"RichBool\" tooltip=\"Each collapsed vertex is placed in the position minimizing the quadric error.&#xa; It can fail (creating bad spikes) in case of very flat areas. &#xa;If disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. \" value=\"true\" description=\"Optimal position of simplified vertices\"/>\n  <Param name=\"PlanarQuadric\" type=\"RichBool\" tooltip=\"Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh, as a side effect, more triangles will be preserved in flat areas (allowing better shaped triangles).\" value=\"false\" description=\"Planar Simplification\"/>\n  <Param name=\"PlanarWeight\" type=\"RichFloat\" tooltip=\"How much we should try to preserve the triangles in the planar regions. If you lower this value planar areas will be simplified more.\" value=\"0.001\" description=\"Planar Simp. Weight\"/>\n  <Param name=\"QualityWeight\" type=\"RichBool\" tooltip=\"Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.\" value=\"false\" description=\"Weighted Simplification\"/>\n  <Param name=\"AutoClean\" type=\"RichBool\" tooltip=\"After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)\" value=\"true\" description=\"Post-simplification cleaning\"/>\n  <Param name=\"Selected\" type=\"RichBool\" tooltip=\"The simplification is applied only to the selected set of faces.&#xa; Take care of the target number of faces!\" value=\"false\" description=\"Simplify only selected faces\"/>\n </filter>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/simplify350.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Remove Duplicate Vertices\"/>\n <filter name=\"Remove Unreferenced Vertices\"/>\n <filter name=\"Simplification: Quadric Edge Collapse Decimation\">\n  <Param name=\"TargetFaceNum\" type=\"RichInt\" tooltip=\"The desired final number of faces.\" value=\"250000\" description=\"Target number of faces\"/>\n  <Param name=\"TargetPerc\" type=\"RichFloat\" tooltip=\"If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.\" value=\"0\" description=\"Percentage reduction (0..1)\"/>\n  <Param name=\"QualityThr\" type=\"RichFloat\" tooltip=\"Quality threshold for penalizing bad shaped faces.&lt;br>The value is in the range [0..1]&#xa; 0 accept any kind of face (no penalties),&#xa; 0.5  penalize faces with quality &lt; 0.5, proportionally to their shape&#xa;\" value=\"0.3\" description=\"Quality threshold\"/>\n  <Param name=\"PreserveBoundary\" type=\"RichBool\" tooltip=\"The simplification process tries to do not affect mesh boundaries during simplification\" value=\"false\" description=\"Preserve Boundary of the mesh\"/>\n  <Param name=\"BoundaryWeight\" type=\"RichFloat\" tooltip=\"The importance of the boundary during simplification. Default (1.0) means that the boundary has the same importance of the rest. Values greater than 1.0 raise boundary importance and has the effect of removing less vertices on the border. Admitted range of values (0,+inf). \" value=\"1\" description=\"Boundary Preserving Weight\"/>\n  <Param name=\"PreserveNormal\" type=\"RichBool\" tooltip=\"Try to avoid face flipping effects and try to preserve the original orientation of the surface\" value=\"false\" description=\"Preserve Normal\"/>\n  <Param name=\"PreserveTopology\" type=\"RichBool\" tooltip=\"Avoid all the collapses that should cause a topology change in the mesh (like closing holes, squeezing handles, etc). If checked the genus of the mesh should stay unchanged.\" value=\"false\" description=\"Preserve Topology\"/>\n  <Param name=\"OptimalPlacement\" type=\"RichBool\" tooltip=\"Each collapsed vertex is placed in the position minimizing the quadric error.&#xa; It can fail (creating bad spikes) in case of very flat areas. &#xa;If disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. \" value=\"true\" description=\"Optimal position of simplified vertices\"/>\n  <Param name=\"PlanarQuadric\" type=\"RichBool\" tooltip=\"Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh, as a side effect, more triangles will be preserved in flat areas (allowing better shaped triangles).\" value=\"false\" description=\"Planar Simplification\"/>\n  <Param name=\"PlanarWeight\" type=\"RichFloat\" tooltip=\"How much we should try to preserve the triangles in the planar regions. If you lower this value planar areas will be simplified more.\" value=\"0.001\" description=\"Planar Simp. Weight\"/>\n  <Param name=\"QualityWeight\" type=\"RichBool\" tooltip=\"Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.\" value=\"false\" description=\"Weighted Simplification\"/>\n  <Param name=\"AutoClean\" type=\"RichBool\" tooltip=\"After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)\" value=\"true\" description=\"Post-simplification cleaning\"/>\n  <Param name=\"Selected\" type=\"RichBool\" tooltip=\"The simplification is applied only to the selected set of faces.&#xa; Take care of the target number of faces!\" value=\"false\" description=\"Simplify only selected faces\"/>\n </filter>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/meshlab/wedge_to_vertex_uvs.mlx",
    "content": "<!DOCTYPE FilterScript>\n<FilterScript>\n <filter name=\"Convert PerWedge UV into PerVertex UV\"/>\n</FilterScript>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/simplify_mesh.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script calls meshlab to simplify a mesh\n\nParameters: -h help,\n            -inputMesh <the mesh to simplify>,\n            -outputMesh <the output mesh>,\n            -meshlabPath <Meshlab binary directory>\n\nUsage: python simplify_mesh.py --inputMesh <the mesh to simplify>\n                               --outputMesh <the output mesh>\n                               --meshlabPath <Meshlab binary directory>\n                               --meshsize <size of the output mesh in K polygons (ie 200 == 200,000 polygons). Values allowed: 200, 250, 300, 350, 400>\n\n\"\"\"\n\nimport os, sys\nimport argparse\nfrom utils.commands import runCommand, getMeshlabServer\nfrom utils.paths import getMeshlabPath\n\ndef simplifyMesh(inputMesh, outputMesh, meshsize=\"\", meshlabPath = getMeshlabPath()):\n    mlxFileEnd = 'meshlab/simplify.mlx'\n\n    if( meshsize != \"\" ):\n        if( meshsize == \"200\"):\n            mlxFileEnd = 'meshlab/simplify200.mlx'\n        elif( meshsize == \"250\"):\n            mlxFileEnd = 'meshlab/simplify250.mlx'\n        elif( meshsize == \"300\"):\n            mlxFileEnd = 'meshlab/simplify300.mlx'\n        elif( meshsize == \"350\"):\n            mlxFileEnd = 'meshlab/simplify350.mlx'\n        elif( meshsize == \"400\"):\n            mlxFileEnd = 'meshlab/simplify400.mlx'\n\n\n    mlxFile = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), mlxFileEnd))\n\n    return runCommand(getMeshlabServer(meshlabPath), ['-i', inputMesh,\n                                                      '-o', outputMesh,\n                                                      '-s', mlxFile])\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--inputMesh\", type=str, required=True, help=\"the mesh to simplify\")\n    parser.add_argument(\"--outputMesh\", type=str, required=True, help=\"the output mesh\")\n    parser.add_argument(\"--meshlabPath\", type=str, default=getMeshlabPath(), help=\"Meshlab binary directory\")\n    parser.add_argument(\"--meshsize\", type=str, help=\"size of the output mesh in K polygons (ie 200 == 200,000 polygons). Values allowed: 200, 250, 300, 350, 400\")\n\n    args = vars(parser.parse_args())\n\n    return simplifyMesh(args['inputMesh'], args['outputMesh'], args['meshsize'], args['meshlabPath'])\n\n#    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/converters/wedge_to_vertex_uvs.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script calls meshlab to simplify a mesh\n\nParameters: -h help,\n            -inputMesh <the mesh to simplify>,\n            -outputMesh <the output mesh>,\n            -meshlabPath <Meshlab binary directory>\n\nUsage: python wedge_to_vertex_uvs.py -inputMesh <the mesh to convert>\n                               -outputMesh <the output mesh>\n                               -meshlabPath <Meshlab binary directory>\n\n\"\"\"\n\nimport os, sys\nimport argparse\nfrom utils.commands import runCommand, getMeshlabServer\nfrom utils.paths import getMeshlabPath\n\ndef convertUVs(inputMesh, outputMesh, meshlabPath = getMeshlabPath()):\n    mlxFile = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'meshlab/wedge_to_vertex_uvs.mlx'))\n\n    ret = runCommand(getMeshlabServer(meshlabPath), ['-i', inputMesh,\n                                                     '-o', outputMesh,\n                                                     '-m', 'vt',\n                                                     '-s', mlxFile])\n    return ret\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--inputMesh\", type=str, required=True, help=\"the mesh to simplify\")\n    parser.add_argument(\"--outputMesh\", type=str, required=True, help=\"the output mesh\")\n    parser.add_argument(\"--meshlabPath\", type=str, default=getMeshlabPath(), help=\"Meshlab binary directory\")\n\n    args = vars(parser.parse_args())\n\n    ret = convertUVs(args['inputMesh'], args['outputMesh'], args['meshlabPath'])\n    if( ret.returncode != 0 ):\n        print(\"SIBR_ERROR meshlab error in converting UVs\")\n        sys.exit(1)\n\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/cropFromCenter/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(cropFromCenter)\n\n# libraries used:\n# * sibr graphics (vector2i class)\n# * sibr system (programArg class)\n# * boost filesystem (path class)\n# * openmp\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n\tOpenMP::OpenMP_CXX\n\tsibr_system\n    sibr_graphics\n\tsibr_imgproc\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/cropFromCenter/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <core/imgproc/CropScaleImageUtility.hpp>\n#include <core/system/CommandLineArgs.hpp>\n\n\n\n/*\nCrop input images from center so they end up with resolution <crop_width> x <crop_height>\nif scale down factor is also passed, after the image has been cropped, it will be scaled down by that value\n*/\nconst char* USAGE = \"Usage: cropFromCenter --inputFile <path_to_input_file> --outputPath <path_to_output_folder> --avgResolution <width x height> --cropResolution <width x height> [--scaleDownFactor <alpha> --targetResolution <width x height>] \\n\";\n//const char* USAGE\t\t\t\t\t\t= \"Usage: cropFromCenter --inputFile <path_to_input_file> --outputPath <path_to_output_folder> --avgResolution <width x height> --cropResolution <widht x height> [--scaleDownFactor <alpha> --targetResolution <width x height>] \\n\";\nconst char* TAG = \"[cropFromCenter]\";\nconst unsigned PROCESSING_BATCH_SIZE = 150;\nconst char* LOG_FILE_NAME = \"cropFromCenter.log\";\nconst char* SCALED_DOWN_SUBFOLDER = \"scaled\";\nconst char* SCALED_DOWN_FILENAME = \"scale_factor.txt\";\n\nstruct CropAppArgs :\n\tvirtual sibr::BasicIBRAppArgs {\n\tsibr::Arg<std::string> inputFileArg = { \"inputFile\", \"\" };\n\tsibr::Arg<std::string> outputFolderArg = { \"outputPath\", \"\" };\n\tsibr::Arg<sibr::Vector2i> avgResolutionArg = { \"avgResolution\",{ 0, 0 } };\n\tsibr::Arg<sibr::Vector2i> cropResolutionArg = { \"cropResolution\",{ 0, 0 } };\n\tsibr::Arg<float> scaleDownFactorArg = { \"scaleDownFactor\", 0.0f };\n\tsibr::Arg<sibr::Vector2i> targetResolutionArg = { \"targetResolution\",{ 0, 0 } };\n};\n\nvoid printUsage()\n{\n\tstd::cout << USAGE << std::endl;\n}\n\n\nbool getParamas(int argc, const char ** argv,\n\tstd::string & inputFile, boost::filesystem::path & outputPath,\n\tsibr::Vector2i & avgResolution, sibr::Vector2i & cropResolution, float & scaleDownFactor, sibr::Vector2i & targetResolution)\n{\n\n\tsibr::CommandLineArgs::parseMainArgs(argc, argv);\n\tCropAppArgs myArgs;\n\n\tinputFile = myArgs.inputFileArg;\n\n\tstd::string outputFolder = myArgs.outputFolderArg;\n\toutputPath = outputFolder;\n\n\tavgResolution = myArgs.avgResolutionArg;\n\n\tcropResolution = myArgs.cropResolutionArg;\n\n\t// optional parameters\n\tif (myArgs.scaleDownFactorArg != 0.0f) {\n\t\tscaleDownFactor = myArgs.scaleDownFactorArg;\n\t}\n\n\tif (myArgs.targetResolutionArg.get() != sibr::Vector2i(0, 0)) {\n\t\ttargetResolution = myArgs.targetResolutionArg;\n\t}\n\n\n\tif (inputFile.empty() || outputFolder.empty() || avgResolution == sibr::Vector2i(0, 0) || cropResolution == sibr::Vector2i(0, 0)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n\nint main(const int argc, const char** argv)\n{\n\t// process parameters\n\tstd::string\t\t\t\t\tinputFileName;\n\tboost::filesystem::path\t\toutputFolder;\n\tboost::filesystem::path\t\tscaledDownOutputFolder;\n\tsibr::Vector2i\t\t\t\tavgInitialResolution;\t\t// just for statistics and log file\n\tsibr::Vector2i\t\t\t\tcropResolution;\n\tfloat\t\t\t\t\t\tscaleDownFactor = 0.f;\n\tsibr::Vector2i\t\t\t\ttargetResolution;\n\n\tsibr::CropScaleImageUtility appUtility;\n\n\tif (!getParamas(argc, argv, inputFileName, outputFolder, avgInitialResolution, cropResolution, scaleDownFactor, targetResolution)) {\n\t\tstd::cerr << TAG << \" ERROR: wrong parameters.\\n\";\n\t\tprintUsage();\n\t\treturn -1;\n\t}\n\n\tscaledDownOutputFolder = (outputFolder / SCALED_DOWN_SUBFOLDER);\n\n\tbool scaleDown = (scaleDownFactor > 0);\n\t//cv::Size resizedSize (finalResolution[0], cropResolution[1] * ((float)(finalResolution[0]) / cropResolution[0]));\n\tcv::Size resizedSize(int(cropResolution[0] * scaleDownFactor), int(cropResolution[1] * scaleDownFactor));\n\n\n\tif (!boost::filesystem::exists(outputFolder))\n\t{\n\t\tboost::filesystem::create_directory(outputFolder);\n\t}\n\n\tif (scaleDown && !boost::filesystem::exists(scaledDownOutputFolder)) {\n\t\tboost::filesystem::create_directory(scaledDownOutputFolder);\n\t}\n\n\t// read input file\n\tstd::vector<std::string> pathToImgs = appUtility.getPathToImgs(inputFileName);\n\tstd::vector<sibr::CropScaleImageUtility::Image> listOfImages(pathToImgs.size());\n\tstd::vector<sibr::CropScaleImageUtility::Image> listOfImagesScaledDown(scaleDown ? pathToImgs.size() : 0);\n\n\t// calculate nr batches\n\tconst int nrBatches = static_cast<int>(ceil((float)(pathToImgs.size()) / PROCESSING_BATCH_SIZE));\n\n\tstd::chrono::time_point <std::chrono::system_clock> start, end;\n\tstart = std::chrono::system_clock::now();\n\n\tconst int batchSize = int(PROCESSING_BATCH_SIZE);\n\t// run batches sequentially\n\tfor (int batchId = 0; batchId < nrBatches; batchId++) {\n\n\t\tconst int nrItems = (batchId != nrBatches - 1) ? batchSize : ((nrBatches * batchSize != int(pathToImgs.size())) ? (int(pathToImgs.size()) - (batchSize * batchId)) : batchSize);\n\n\t\t#pragma omp parallel for\n\t\tfor (int localImgIndex = 0; localImgIndex < nrItems; localImgIndex++) {\n\n\t\t\tconst int globalImgIndex = (batchId * batchSize) + localImgIndex;\n\n\t\t\t// using next code will keep filename in output directory\n\t\t\tboost::filesystem::path boostPath(pathToImgs[globalImgIndex]);\n\t\t\t//std::string outputFileName = (outputFolder / boostPath.filename()).string();\n\n\t\t\tstd::stringstream ss;\n\t\t\tss << std::setfill('0') << std::setw(8) << globalImgIndex << boostPath.extension().string();\n\t\t\tstd::string outputFileName = (outputFolder / ss.str()).string();\n\t\t\tstd::string scaledDownOutputFileName = (scaledDownOutputFolder / ss.str()).string();\n\n\t\t\tcv::Mat img = cv::imread(pathToImgs[globalImgIndex], 1);\n\n\t\t\tcv::Rect areOfIntererst = cv::Rect((img.cols - cropResolution[0]) / 2, (img.rows - cropResolution[1]) / 2, cropResolution[0], cropResolution[1]);\n\n\t\t\tcv::Mat croppedImg = img(areOfIntererst);\n\n\t\t\tcv::imwrite(outputFileName, croppedImg);\n\n\t\t\tlistOfImages[globalImgIndex].filename = ss.str();\n\t\t\tlistOfImages[globalImgIndex].width = croppedImg.cols;\n\t\t\tlistOfImages[globalImgIndex].height = croppedImg.rows;\n\n\t\t\tif (scaleDown) {\n\t\t\t\tcv::Mat resizedImg;\n\t\t\t\tcv::resize(croppedImg, resizedImg, resizedSize, 0, 0, cv::INTER_LINEAR);\n\n\t\t\t\tcv::imwrite(scaledDownOutputFileName, resizedImg);\n\n\t\t\t\tlistOfImagesScaledDown[globalImgIndex].filename\t= ss.str();\n\t\t\t\tlistOfImagesScaledDown[globalImgIndex].width\t= resizedImg.cols;\n\t\t\t\tlistOfImagesScaledDown[globalImgIndex].height\t= resizedImg.rows;\n\t\t\t}\n\t\t}\n\t}\n\n\tend = std::chrono::system_clock::now();\n\tauto elapsedTime = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();\n\n\tstd::cout << TAG << \" elapsed time=\" << elapsedTime << \"s.\\n\";\n\n\tappUtility.logExecution(avgInitialResolution, int(pathToImgs.size()), elapsedTime, scaleDown, LOG_FILE_NAME);\n\n\t// write list_images.txt\n\tappUtility.writeListImages((outputFolder / \"list_images.txt\").string(), listOfImages);\n\n\t// write list_images.txt and scale_factor in scaled down directoy if needed\n\tif (scaleDown) {\n\t\tappUtility.writeListImages((scaledDownOutputFolder / \"list_images.txt\").string(), listOfImagesScaledDown);\n\t\tappUtility.writeScaleFactor((scaledDownOutputFolder / SCALED_DOWN_FILENAME).string(), scaleDownFactor);\n\n\t\tif (targetResolution != sibr::Vector2i(0, 0)) {\n\t\t\tappUtility.writeTargetResolution((scaledDownOutputFolder / \"target_resolution.txt\").string(), targetResolution);\n\t\t}\n\t}\n\n\treturn 0;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/distordCrop/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n# project name\nproject(distordCrop)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} ${SOURCES})\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n    OpenMP::OpenMP_CXX\n    sibr_system\n    sibr_graphics\n    sibr_imgproc\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nif (WIN32)\n\tset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} /wd4251\")\nendif()\n\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/distordCrop/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <core/imgproc/DistordCropUtility.hpp>\n#include <core/system/CommandLineArgs.hpp>\n\ntypedef boost::filesystem::path Path;\nusing namespace boost::filesystem;\n\nint threshold_black_color = 10; //10\nint thinest_bounding_box_size = 5;\nint threshold_bounding_box_size = 500;\nfloat threshold_ratio_bounding_box_size = 0.2f;\n\nconst int PROCESSING_BATCH_SIZE = 150;\t// process PROCESSING_BATCH_SIZE images together\n\nsibr::Vector3i backgroundColor = sibr::Vector3i(0, 0, 0);\n\n/*\n\tif input image resolution is too different from the avg, it will be discarded automatically at the beginning\n*/\nfloat resolutionThreshold = 0.15f;\n\n/*\n\ttolerance factor is used to allow somehow some black borders in the final images.\n\tif tolerance factor is zero, then all black borders are remove.\n\tif tolerance factor is one, then the image keeps its original resolution\n*/\nfloat toleranceFactor = 0.0f;\n\nbool debug_viz = false;\n\nstruct DistordCropAppArgs :\n\tvirtual sibr::BasicIBRAppArgs {\n\tsibr::Arg<int> black_threshold = { \"black\", threshold_black_color };\n\tsibr::Arg<int> minSizeThresholdArg = { \"min\", threshold_bounding_box_size};\n\tsibr::Arg<float> minRatioThresholdArg = { \"ratio\", threshold_ratio_bounding_box_size };\n\tsibr::Arg<float> resThreshold = { \"resolution_threshold\", 0.15f };\n\tsibr::Arg<float> toleranceArg = { \"tolerance\", toleranceFactor };\n\tsibr::Arg<bool> vizArg = { \"debug\" };\n\tsibr::ArgSwitch modeArg = { \"modesame\", true };\n\tsibr::Arg<int> avgWidthArg = { \"avg_width\", 0 };\n\tsibr::Arg<int> avgHeightArg = { \"avg_height\", 0 };\n\tsibr::Arg<sibr::Vector3i> backgroundColor = { \"backgroundColor\", sibr::Vector3i(0, 0, 0) };\n};\n\n\n/*\nutility program that determines a new resolution taking into account that some input images have black borders added by reality capture.\nthe second output of the program [optional] is a excludeImages.txt file containing the id of the images that didn't pass the threshold test\n(they would have to be cropped to much). current pipeline (IBR_recons_RC.py) doesn't used that file properly.\n\nwe might need to call process_cam_selection manually passing as argument the excludeImages.txt in order to actually remove the cameras that\ndidn't pass the threshold test\n\nupdate: reality capture (using the 'fit' option when exporting bundle) sometimes produces datasets that have images not only with black borders\nbut also with a completely different resolution. We need to take into account those datasets too.\n*/\n\n\nusing namespace sibr;\n\n\nint main(const int argc, const char* const* argv)\n{\n\t// parameters stuff\n\tsibr::CommandLineArgs::parseMainArgs(argc, argv);\n\tDistordCropAppArgs myArgs;\n\n\tDistordCropUtility appUtils;\n\n\tstd::string datasetPath = myArgs.dataset_path;\n\n\tthreshold_black_color = myArgs.black_threshold;\n\tthreshold_bounding_box_size = myArgs.minSizeThresholdArg;\n\tthreshold_ratio_bounding_box_size = myArgs.minRatioThresholdArg;\n\ttoleranceFactor = myArgs.toleranceArg;\n\tbackgroundColor = myArgs.backgroundColor;\t\n\tresolutionThreshold = myArgs.resThreshold;\n\n\tif( myArgs.vizArg.get()) {\n\t\tdebug_viz = true;\n\t}\n\t\n\tint avgWidth = myArgs.avgWidthArg;\n\tint avgHeight = myArgs.avgHeightArg;\n\t\n\tbool sameSize = myArgs.modeArg;\n\t// end parameters stuff\n\n\tPath root(datasetPath);\n\n\tstd::cout << \"[distordCrop] looking for input images : \" << std::endl;\n\tstd::vector< Path > imagePaths;\n\tdirectory_iterator it(root), eod;\n\tstd::vector<sibr::Vector2i> resolutions;\n\n\tBOOST_FOREACH(Path const &p, std::make_pair(it, eod)) {\n\t\tif (is_regular_file(p) && ( p.extension() == \".jpg\" || p.extension() == \".JPG\" || p.extension() == \".PNG\" || p.extension() == \".png\" ) && appUtils.is_number(p.stem().string())) {\n\n\t\t\tstd::cout << \"\\t \" << p.filename().string() << std::endl;\n\t\t\timagePaths.push_back(p);\n\t\t}\n\t\telse if (is_regular_file(p) && p.extension() == \".txt\" && p.stem().string() == \"resolutions\") {\n\t\t\t\n\t\t\t// read resolutions file\n\t\t\tifstream inputFile(p.string());\n\n\t\t\tstd::string line;\n\t\t\twhile (getline(inputFile, line)) {\n\t\t\t\tstd::stringstream iss(line);\n\t\t\t\tstd::string pathToImg;\n\t\t\t\tstd::string widthStr;\n\t\t\t\tstd::string heightStr;\n\n\t\t\t\tgetline(iss, pathToImg, '\\t');\n\t\t\t\tgetline(iss, widthStr, '\\t');\n\t\t\t\tgetline(iss, heightStr, '\\n');\n\n\t\t\t\tsibr::Vector2i res(std::stoi(widthStr), std::stoi(heightStr));\n\n\t\t\t\tresolutions.push_back(res);\n\n\t\t\t}\n\n\t\t\tinputFile.close();\n\t\t}\n\t}\n\n\tif (resolutions.size() == 0) {\n\t\tstd::cout << \"[distordCrop] WARNING : no resolution.txt file found\" << std::endl;\n\t\treturn 0;\n\t}\n\n\tif (imagePaths.size() == 0) {\n\t\tstd::cout << \"[distordCrop] WARNING: no images found: need .jpg,.JPG,.png,.PNG \" << std::endl;\n\t\treturn 0;\n\t}\n\n\tif (resolutions.size() != imagePaths.size()) {\n\t\tstd::cout << \"[distordCrop] WARNING : different number of input images and resolutions written in resolutions.txt\" << std::endl;\n\t\treturn 0;\n\t}\n\n\tint minWidth, minHeight, new_half_w, new_half_h;\n\t\n\tif (sameSize) {\n\t\tstd::cout << \" ALL IMG SHOULD HAVE SAME SIZE \" << std::endl;\n\t\tsibr::Vector2i minSize = appUtils.findBiggestImageCenteredBox(root, imagePaths, resolutions, avgWidth, avgHeight, \n\t\t\tPROCESSING_BATCH_SIZE, resolutionThreshold, threshold_ratio_bounding_box_size, backgroundColor, \n\t\t\tthreshold_black_color, thinest_bounding_box_size, toleranceFactor);\n\n\t\tstd::cout << \"[distordCrop] minSize \" << minSize[0] << \"x\" << minSize[1] << std::endl;\n\t\tminWidth = minSize[0];\n\t\tminHeight = minSize[1];\n\t} else {\n\t\tstd::cout << \" ALL IMG SHOULD NOT HAVE SAME SIZE \" << std::endl;\n\t\tsibr::Vector2i minSize = appUtils.findMinImageSize(root, imagePaths);\n\t\tminWidth = minSize[0];\n\t\tminHeight = minSize[1];\n\t}\n\n\tnew_half_w = (minWidth % 2 == 0) ? (minWidth / 2) : (--minWidth / 2);\n\tnew_half_h = (minHeight % 2 == 0) ? (minHeight / 2) : (--minHeight / 2);\n\n\twhile ((new_half_w % 4) != 0) { --new_half_w; }\n\twhile ((new_half_h % 4) != 0) { --new_half_h; }\n\n\tstd::string outputFilePath = root.string() + \"/cropNewSize.txt\";\n\tstd::ofstream file(outputFilePath, std::ios::trunc);\n\tif (file) {\n\t\tfile << 2 * new_half_w << \" \" << 2 * new_half_h;\n\t\tfile.close(); \n\t}\n\telse {\n\t\tstd::cout << \"[distordCrop]  ERROR cant open file : \" << outputFilePath << std::endl;\n\t\treturn 1;\n\t}\n\n\tstd::cout << \"[distordCrop] done, new size is \" << 2 * new_half_w << \" x \" << 2 * new_half_h << std::endl;\n\n\treturn 0;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(fullColmapProcess)\n\nfile(GLOB SCRIPTS \"*.py\" \"*.json\")\n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FILES ${SCRIPTS})\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/ColmapProcessSteps.json",
    "content": "{\n    \"steps\" : [\n        {\n            \"name\": \"build_dataset_structure\",\n            \"function\": \"utils.datasets.buildDatasetStructure\",\n            \"function_args\": {\n                \"path\" : \"${path}\",\n                \"types\" : [\"colmap\", \"capreal\"]\n            }\n        },\n        {\n            \"name\": \"colmap_feature_extractor\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"feature_extractor\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n\t\t        \"--image_path\", \"${path}/images/\",\n                \"--ImageReader.camera_model\", \"OPENCV\",\n                \"--SiftExtraction.max_image_size\", \"${siftExtraction_ImageSize}\",\n                \"--SiftExtraction.estimate_affine_shape\", \"${siftExtraction_EstimateAffineShape}\",\n                \"--SiftExtraction.domain_size_pooling\", \"${siftExtraction_DomainSizePooling}\",\n                \"--SiftExtraction.max_num_features\", \"${siftExtraction_MaxNumFeatures}\",\n                \"--ImageReader.single_camera\", \"${imageReader_SingleCamera}\",\n                \"--SiftExtraction.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_exhaustive_matcher\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"exhaustive_matcher\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n                \"--SiftMatching.guided_matching\", \"1\",\n                \"--ExhaustiveMatching.block_size\", \"${exhaustiveMatcher_ExhaustiveMatchingBlockSize}\",\n                \"--SiftMatching.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_mapper\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"mapper\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n\t\t        \"--image_path\", \"${path}/images/\",\n                \"--output_path\", \"${path}/colmap/sparse/\",\n                \"--Mapper.ba_local_max_num_iterations\", \"${mapper_MapperDotbaLocalMaxNumIterations}\",\n                \"--Mapper.ba_global_max_num_iterations\", \"${mapper_MapperDotbaGlobalMaxNumIterations}\",\n                \"--Mapper.ba_global_images_ratio\", \"${mapper_MapperDotbaGlobalImagesRatio}\",\n                \"--Mapper.ba_global_points_ratio\", \"${mapper_MapperDotbaGlobalPointsRatio}\",\n                \"--Mapper.ba_global_max_refinements\", \"${mapper_MapperDotbaGlobalMaxRefinements}\",\n                \"--Mapper.ba_local_max_refinements\", \"${mapper_MapperDotbaLocalMaxRefinements}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_image_undistorter_colmap\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"image_undistorter\",\n                \"--image_path\", \"${path}/images/\",\n                \"--input_path\", \"${path}/colmap/sparse/0\",\n                \"--output_path\", \"${path}/colmap/stereo/\",\n                \"--output_type\", \"COLMAP\"\n            ]\n        },\n        {\n            \"name\": \"colmap_image_undistorter_capreal\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"image_undistorter\",\n                \"--image_path\", \"${path}/images/\",\n                \"--input_path\", \"${path}/colmap/sparse/0/\",\n                \"--output_path\", \"${path}/capreal/undistorted/\",\n                \"--output_type\", \"CMP-MVS\"\n            ]\n        },\n        {\n            \"name\": \"colmap_patch_match_stereo\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"patch_match_stereo\",\n                \"--workspace_path\", \"${path}/colmap/stereo\",\n                \"--workspace_format\", \"COLMAP\",\n                \"--PatchMatchStereo.max_image_size\", \"${patchMatchStereo_PatchMatchStereoDotMaxImageSize}\",\n                \"--PatchMatchStereo.window_radius\", \"${patchMatchStereo_PatchMatchStereoDotWindowRadius}\",\n                \"--PatchMatchStereo.window_step\", \"${patchMatchStereo_PatchMatchStereoDotWindowStep}\",\n                \"--PatchMatchStereo.num_samples\", \"${patchMatchStereo_PatchMatchStereoDotNumSamples}\",\n                \"--PatchMatchStereo.num_iterations\", \"${patchMatchStereo_PatchMatchStereoDotNumIterations}\",\n                \"--PatchMatchStereo.geom_consistency\", \"${patchMatchStereo_PatchMatchStereoDotGeomConsistency}\",\n                \"--PatchMatchStereo.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_stereo_fusion\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"stereo_fusion\",\n                \"--workspace_path\", \"${path}/colmap/stereo/\",\n                \"--workspace_format\", \"COLMAP\",\n                \"--input_type\", \"geometric\",\n                \"--output_path\", \"${path}/colmap/stereo/fused.ply\",\n                \"--StereoFusion.max_image_size\", \"${stereoFusion_MaxImageSize}\",\n                \"--StereoFusion.check_num_images\", \"${stereoFusion_CheckNumImages}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_delaunay_mesher\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"delaunay_mesher\",\n                \"--input_path\", \"${path}/colmap/stereo/\",\n                \"--output_path\", \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"--input_type\", \"dense\"\n            ]\n        },\n        {\n            \"name\": \"colmap_model_converter\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"model_converter\",\n                \"--input_path\", \"${path}/colmap/stereo/sparse/\",\n                \"--output_path\", \"${path}/colmap/stereo/sparse/\",\n                \"--output_type\", \"TXT\"\n            ]\n        },\n        {\n            \"name\": \"fix_mesh_eol\",\n            \"function\": \"utils.convert.fixMeshEol\",\n            \"function_args\": {\n                \"meshPath\" : \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"newMeshPath\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\"\n            }\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"simplify_mesh\",\n            \"function\": \"simplify_mesh.simplifyMesh\",\n            \"function_args\": {\n                \"inputMesh\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\",\n                \"outputMesh\" : \"${path}/colmap/stereo/unix-meshed-delaunay-simplified.ply\",\n                \"meshlabPath\" : \"${meshlabPath}\",\n\t\t\"meshsize\" : \"${meshsize}\"\n            }\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"unwrap_mesh\",\n            \"app\": \"unwrapMesh\",\n            \"command_args\": [\n                \"--path\", \"${path}/colmap/stereo/unix-meshed-delaunay-simplified.ply\",\n                \"--output\", \"${path}/capreal/mesh.ply\",\n                \"--texture-name\", \"texture.png\"\n            ]\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"texture_mesh\",\n            \"app\": \"textureMesh\",\n            \"command_args\": [\n                \"--path\", \"${path}\",\n                \"--output\", \"${path}/capreal/texture.png\",\n                \"--size\", \"8192\",\n                \"--flood\"\n            ]\n        },\n        {\n            \"name\": \"move_eol_dirty_mesh\",\n            \"function\": \"shutil.copy\",\n            \"function_args\": {\n                \"src\" : \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"dst\" : \"${path}/colmap/stereo/meshed-delaunay-eolpb.ply\"\n            }\n        },\n        {\n            \"name\": \"use_eol_fixed_mesh\",\n            \"function\": \"shutil.copy\",\n            \"function_args\": {\n                \"src\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\",\n                \"dst\" : \"${path}/colmap/stereo/meshed-delaunay.ply\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/ColmapQualityParameters.json",
    "content": "{\n    \"siftExtraction_ImageSize\": {\n        \"default\": 3200,\n        \"low\": 1000,\n        \"medium\": 1600,\n        \"average\": 3200,\n        \"high\": 2400,\n        \"extreme\": 3200\n    },\n    \"siftExtraction_EstimateAffineShape\": {\n        \"default\": false,\n        \"low\": false,\n        \"medium\": false,\n        \"average\": false,\n        \"high\": true,\n        \"extreme\": true\n    },\n    \"siftExtraction_DomainSizePooling\": {\n        \"default\": false,\n        \"low\": false,\n        \"medium\": false,\n        \"average\": false,\n        \"high\": false,\n        \"extreme\": true\n    },\n    \"siftExtraction_MaxNumFeatures\": {\n        \"default\": 16000,\n        \"low\": 8192,\n        \"medium\": 8192,\n        \"average\": 8192,\n        \"high\": 8192,\n        \"extreme\": 8192\n    },\n    \"imageReader_SingleCamera\": {\n        \"default\": false,\n        \"low\": true,\n        \"medium\": true,\n        \"average\": true,\n        \"high\": true,\n        \"extreme\": true\n    },\n    \"exhaustiveMatcher_ExhaustiveMatchingBlockSize\": {\n        \"default\": 50,\n        \"low\": 50,\n        \"medium\": 50,\n        \"average\": 50,\n        \"high\": 50,\n        \"extreme\": 50\n    },\n    \"mapper_MapperDotbaLocalMaxNumIterations\": {\n        \"default\": 25,\n        \"low\": 12,\n        \"medium\": 16,\n        \"average\": 25,\n        \"high\": 30,\n        \"extreme\": 40\n    },\n    \"mapper_MapperDotbaGlobalMaxNumIterations\": {\n        \"default\": 50,\n        \"low\": 25,\n        \"medium\": 33,\n        \"average\": 50,\n        \"high\": 75,\n        \"extreme\": 100\n    },\n    \"mapper_MapperDotbaGlobalImagesRatio\": {\n        \"default\": 1.100001,\n        \"low\": 1.32,\n        \"medium\": 1.21,\n        \"average\": 1.100001,\n        \"high\": 1.100001,\n        \"extreme\": 1.100001\n    },\n    \"mapper_MapperDotbaGlobalPointsRatio\": {\n        \"default\": 1.100001,\n        \"low\": 1.32,\n        \"medium\": 1.21,\n        \"average\": 1.100001,\n        \"high\": 1.100001,\n        \"extreme\": 1.100001\n    },\n    \"mapper_MapperDotbaGlobalMaxRefinements\": {\n        \"default\": 5,\n        \"low\": 2,\n        \"medium\": 2,\n        \"average\": 5,\n        \"high\": 5,\n        \"extreme\": 5\n    },\n    \"mapper_MapperDotbaLocalMaxRefinements\": {\n        \"default\": 2,\n        \"low\": 2,\n        \"medium\": 2,\n        \"average\": 2,\n        \"high\": 3,\n        \"extreme\": 3\n    },\n    \"patchMatchStereo_PatchMatchStereoDotMaxImageSize\": {\n        \"default\": -1,\n        \"low\": 1000,\n        \"medium\": 1600,\n        \"average\": -1,\n        \"high\": 2400,\n        \"extreme\": -1\n    },\n    \"patchMatchStereo_PatchMatchStereoDotWindowRadius\": {\n        \"default\": 5,\n        \"low\": 4,\n        \"medium\": 4,\n        \"average\": 5,\n        \"high\": 5,\n        \"extreme\": 5\n    },\n    \"patchMatchStereo_PatchMatchStereoDotWindowStep\": {\n        \"default\": 1,\n        \"low\": 2,\n        \"medium\": 2,\n        \"average\": 1,\n        \"high\": 1,\n        \"extreme\": 1\n    },\n    \"patchMatchStereo_PatchMatchStereoDotNumSamples\": {\n        \"default\": 15,\n        \"low\": 7,\n        \"medium\": 10,\n        \"average\": 15,\n        \"high\": 15,\n        \"extreme\": 15\n    },\n    \"patchMatchStereo_PatchMatchStereoDotNumIterations\": {\n        \"default\": 5,\n        \"low\": 3,\n        \"medium\": 5,\n        \"average\": 5,\n        \"high\": 5,\n        \"extreme\": 5\n    },\n    \"patchMatchStereo_PatchMatchStereoDotGeomConsistency\": {\n        \"default\": 1,\n        \"low\": 0,\n        \"medium\": 0,\n        \"average\": 1,\n        \"high\": 1,\n        \"extreme\": 1\n    },\n    \"stereoFusion_CheckNumImages\": {\n        \"default\": 50,\n        \"low\": 25,\n        \"medium\": 33,\n        \"average\": 50,\n        \"high\": 50,\n        \"extreme\": 50\n    },\n    \"stereoFusion_MaxImageSize\": {\n        \"default\": -1,\n        \"low\": 1000,\n        \"medium\": 1600,\n        \"average\": -1,\n        \"high\": 2400,\n        \"extreme\": -1\n    }\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/SelectiveColmapProcessSteps.json",
    "content": "{\n    \"steps\" : [\n        {\n            \"name\": \"build_dataset_structure\",\n            \"function\": \"utils.datasets.buildDatasetStructure\",\n            \"function_args\": {\n                \"path\" : \"${path}\",\n                \"types\" : [\"colmap\"]\n            }\n        },\n        {\n            \"name\": \"extract_video_frames\",\n            \"function\": \"selective_colmap_process.extract_video_frames\",\n            \"function_args\": {\n                \"pathIn\": \"${path}/videos\",\n                \"pathOut\": \"${path}/images\"\n            }\n        },\n        {\n            \"name\": \"colmap_feature_extractor\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"feature_extractor\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n                \"--image_path\", \"${path}/images/\",\n                \"--ImageReader.camera_model\", \"OPENCV\",\n                \"--SiftExtraction.max_image_size\", \"${siftExtraction_ImageSize}\",\n                \"--SiftExtraction.estimate_affine_shape\", \"${siftExtraction_EstimateAffineShape}\",\n                \"--SiftExtraction.domain_size_pooling\", \"${siftExtraction_DomainSizePooling}\",\n                \"--SiftExtraction.max_num_features\", \"${siftExtraction_MaxNumFeatures}\",\n                \"--ImageReader.single_camera\", \"${imageReader_SingleCamera}\",\n                \"--SiftExtraction.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_exhaustive_matcher\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"exhaustive_matcher\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n                \"--SiftMatching.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_mapper\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"mapper\",\n                \"--database_path\", \"${path}/colmap/dataset.db\",\n                \"--image_path\", \"${path}/images/\",\n                \"--output_path\", \"${path}/colmap/sparse/\",\n                \"--Mapper.num_threads\", \"16\",\n                \"--Mapper.init_min_tri_angle\", \"4\",\n                \"--Mapper.multiple_models\", \"0\",\n                \"--Mapper.extract_colors\", \"0\",\n                \"--Mapper.ba_global_images_ratio\", \"1.2\",\n                \"--Mapper.ba_global_points_ratio\", \"1.2\",\n                \"--Mapper.ba_global_max_num_iterations\", \"20\",\n                \"--Mapper.ba_global_max_refinements\", \"3\",\n                \"--Mapper.ba_global_points_freq\", \"200000\"\n            ]\n        },\n        {\n            \"name\": \"colmap_model_converter_sparse_0\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"model_converter\",\n                \"--input_path\", \"${path}/colmap/sparse/0\",\n                \"--output_path\", \"${path}/colmap/sparse/\",\n                \"--output_type\", \"TXT\"\n            ]\n        },\n        {    \n            \"name\": \"fix_cameras\",\n            \"function\": \"selective_colmap_process.fix_cameras\",\n            \"function_args\": {\n                \"path\": \"${path}\",\n                \"photoName\": \"MG_\",\n                \"sparseSubdir\": \"\"\n            }\n        },\n        {\n            \"name\": \"colmap_image_undistorter_colmap\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"image_undistorter\",\n                \"--image_path\", \"${path}/images/\",\n                \"--input_path\", \"${path}/colmap/sparse/\",\n                \"--output_path\", \"${path}/colmap/stereo\",\n                \"--output_type\", \"COLMAP\"\n            ]\n        },\n        {\n            \"name\": \"colmap_model_converter_stereo_sparse\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"model_converter\",\n                \"--input_path\", \"${path}/colmap/stereo/sparse\",\n                \"--output_path\", \"${path}/colmap/stereo/sparse/\",\n                \"--output_type\", \"TXT\"\n            ]\n        },\n        {\n            \"name\": \"build_dataset_structure\",\n            \"function\": \"utils.datasets.buildDatasetStructure\",\n            \"function_args\": {\n                \"path\" : \"${path}\",\n                \"types\" : [\"capreal\"]\n            }\n        },\n        {\n            \"name\": \"colmap_image_deleter_colmap\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"image_deleter\",\n                \"--input_path\", \"${path}/colmap/sparse/\",\n                \"--output_path\", \"${path}/colmap/sparse/\",\n                \"--image_names_path\", \"${path}/videos/Video_frames.txt\"\n            ]\n        },\n        { \n            \"name\": \"remove_video_images\",\n            \"function\": \"selective_colmap_process.remove_video_images\",\n            \"function_args\": {\n                \"path\": \"${path}\"\n            }\n        },\n        {\n            \"name\": \"colmap_patch_match_stereo\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"patch_match_stereo\",\n                \"--workspace_path\", \"${path}/colmap/stereo\",\n                \"--workspace_format\", \"COLMAP\",\n                \"--PatchMatchStereo.max_image_size\", \"${patchMatchStereo_PatchMatchStereoDotMaxImageSize}\",\n                \"--PatchMatchStereo.window_radius\", \"${patchMatchStereo_PatchMatchStereoDotWindowRadius}\",\n                \"--PatchMatchStereo.window_step\", \"${patchMatchStereo_PatchMatchStereoDotWindowStep}\",\n                \"--PatchMatchStereo.num_samples\", \"${patchMatchStereo_PatchMatchStereoDotNumSamples}\",\n                \"--PatchMatchStereo.num_iterations\", \"${patchMatchStereo_PatchMatchStereoDotNumIterations}\",\n                \"--PatchMatchStereo.geom_consistency\", \"${patchMatchStereo_PatchMatchStereoDotGeomConsistency}\",\n                \"--PatchMatchStereo.gpu_index\", \"${gpusIndices}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_stereo_fusion\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"stereo_fusion\",\n                \"--workspace_path\", \"${path}/colmap/stereo/\",\n                \"--workspace_format\", \"COLMAP\",\n                \"--input_type\", \"geometric\",\n                \"--output_path\", \"${path}/colmap/stereo/fused.ply\",\n                \"--StereoFusion.max_image_size\", \"${stereoFusion_MaxImageSize}\",\n                \"--StereoFusion.check_num_images\", \"${stereoFusion_CheckNumImages}\"\n            ]\n        },\n        {\n            \"name\": \"colmap_delaunay_mesher\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"delaunay_mesher\",\n                \"--input_path\", \"${path}/colmap/stereo/\",\n                \"--output_path\", \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"--input_type\", \"dense\"\n            ]\n        },\n        {\n            \"name\": \"colmap_model_converter\",\n            \"app\": \"colmap\",\n            \"command_args\": [\n                \"model_converter\",\n                \"--input_path\", \"${path}/colmap/stereo/sparse/\",\n                \"--output_path\", \"${path}/colmap/stereo/sparse/\",\n                \"--output_type\", \"TXT\"\n            ]\n        },\n        {\n            \"name\": \"fix_mesh_eol\",\n            \"function\": \"utils.convert.fixMeshEol\",\n            \"function_args\": {\n                \"meshPath\" : \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"newMeshPath\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\"\n            }\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"simplify_mesh\",\n            \"function\": \"simplify_mesh.simplifyMesh\",\n            \"function_args\": {\n                \"inputMesh\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\",\n                \"outputMesh\" : \"${path}/colmap/stereo/unix-meshed-delaunay-simplified.ply\",\n                \"meshlabPath\" : \"${meshlabPath}\",\n                \"meshsize\" : \"${meshsize}\"\n            }\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"unwrap_mesh\",\n            \"app\": \"unwrapMesh\",\n            \"command_args\": [\n                \"--path\", \"${path}/colmap/stereo/unix-meshed-delaunay-simplified.ply\",\n                \"--output\", \"${path}/capreal/mesh.ply\",\n                \"--texture-name\", \"texture.png\"\n            ]\n        },\n        {\n            \"if\": \"${with_texture}\",\n            \"name\": \"texture_mesh\",\n            \"app\": \"textureMesh\",\n            \"command_args\": [\n                \"--path\", \"${path}\",\n                \"--output\", \"${path}/capreal/texture.png\",\n                \"--size\", \"8192\",\n                \"--flood\"\n            ]\n        },\n        {\n            \"name\": \"move_eol_dirty_mesh\",\n            \"function\": \"shutil.copy\",\n            \"function_args\": {\n                \"src\" : \"${path}/colmap/stereo/meshed-delaunay.ply\",\n                \"dst\" : \"${path}/colmap/stereo/meshed-delaunay-eolpb.ply\"\n            }\n        },\n        {\n            \"name\": \"use_eol_fixed_mesh\",\n            \"function\": \"shutil.copy\",\n            \"function_args\": {\n                \"src\" : \"${path}/colmap/stereo/unix-meshed-delaunay.ply\",\n                \"dst\" : \"${path}/colmap/stereo/meshed-delaunay.ply\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/colmap2nerf.py",
    "content": "#!/usr/bin/env python3\n\n# Copyright (c) 2020-2022, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport argparse\nimport os\nfrom pathlib import Path, PurePosixPath\n\nimport numpy as np\nimport json\nimport sys\nimport math\nimport cv2\nimport os\nimport shutil\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description=\"convert a text colmap export to nerf format transforms.json; optionally convert video to images, and optionally run colmap in the first place\")\n\n    parser.add_argument(\"--video_in\", default=\"\", help=\"run ffmpeg first to convert a provided video file into a set of images. uses the video_fps parameter also\")\n    parser.add_argument(\"--video_fps\", default=2)\n    parser.add_argument(\"--run_colmap\", action=\"store_true\", help=\"run colmap first on the image folder\")\n    parser.add_argument(\"--colmap_matcher\", default=\"sequential\", choices=[\"exhaustive\",\"sequential\",\"spatial\",\"transitive\",\"vocab_tree\"], help=\"select which matcher colmap should use. sequential for videos, exhaustive for adhoc images\")\n    parser.add_argument(\"--colmap_db\", default=\"colmap.db\", help=\"colmap database filename\")\n    parser.add_argument(\"--images\", default=\"images\", help=\"input path to the images\")\n    parser.add_argument(\"--text\", default=\"colmap_text\", help=\"input path to the colmap text files (set automatically if run_colmap is used)\")\n    parser.add_argument(\"--aabb_scale\", default=16, choices=[\"1\",\"2\",\"4\",\"8\",\"16\"], help=\"large scene scale factor. 1=scene fits in unit cube; power of 2 up to 16\")\n    parser.add_argument(\"--skip_early\", default=0, help=\"skip this many images from the start\")\n    parser.add_argument(\"--out\", default=\"transforms.json\", help=\"output path\")\n    parser.add_argument(\"--path\", default=\"\", help=\"top level dataset\")\n    args = parser.parse_args()\n    return args\n\ndef do_system(arg):\n    print(f\"==== running: {arg}\")\n    err=os.system(arg)\n    if err:\n        print(\"FATAL: command failed\")\n        sys.exit(err)\n\n\ndef run_ffmpeg(args):\n    if not os.path.isabs(args.images):\n        args.images = os.path.join(os.path.dirname(args.video_in), args.images)\n    images=args.images\n    video=args.video_in\n    fps=float(args.video_fps) or 1.0\n    print(f\"running ffmpeg with input video file={video}, output image folder={images}, fps={fps}.\")\n    if (input(f\"warning! folder '{images}' will be deleted/replaced. continue? (Y/n)\").lower().strip()+\"y\")[:1] != \"y\":\n        sys.exit(1)\n    try:\n        shutil.rmtree(images)\n    except:\n        pass\n    do_system(f\"mkdir {images}\")\n    do_system(f\"ffmpeg -i {video} -qscale:v 1 -qmin 1 -vf \\\"fps={fps}\\\" {images}/%04d.jpg\")\n\ndef run_colmap(args):\n    db=args.colmap_db\n    images=args.images\n    db_noext=str(Path(db).with_suffix(\"\"))\n\n    if args.text==\"text\":\n        args.text=db_noext+\"_text\"\n    text=args.text\n    sparse=db_noext+\"_sparse\"\n    print(f\"running colmap with:\\n\\tdb={db}\\n\\timages={images}\\n\\tsparse={sparse}\\n\\ttext={text}\")\n    if (input(f\"warning! folders '{sparse}' and '{text}' will be deleted/replaced. continue? (Y/n)\").lower().strip()+\"y\")[:1] != \"y\":\n        sys.exit(1)\n    if os.path.exists(db):\n        os.remove(db)\n    do_system(f\"colmap feature_extractor --ImageReader.camera_model OPENCV --ImageReader.single_camera 1 --database_path {db} --image_path {images}\")\n    do_system(f\"colmap {args.colmap_matcher}_matcher --database_path {db}\")\n    try:\n        shutil.rmtree(sparse)\n    except:\n        pass\n    do_system(f\"mkdir {sparse}\")\n    do_system(f\"colmap mapper --database_path {db} --image_path {images} --output_path {sparse}\")\n    do_system(f\"colmap bundle_adjuster --input_path {sparse}/0 --output_path {sparse}/0 --BundleAdjustment.refine_principal_point 1\")\n    try:\n        shutil.rmtree(text)\n    except:\n        pass\n    do_system(f\"mkdir {text}\")\n    do_system(f\"colmap model_converter --input_path {sparse}/0 --output_path {text} --output_type TXT\")\n\ndef variance_of_laplacian(image):\n    return cv2.Laplacian(image, cv2.CV_64F).var()\n\ndef sharpness(imagePath):\n    image = cv2.imread(imagePath)\n    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n    fm = variance_of_laplacian(gray)\n    return fm\n\ndef qvec2rotmat(qvec):\n    return np.array([\n        [\n            1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,\n            2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],\n            2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]\n        ], [\n            2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],\n            1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,\n            2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]\n        ], [\n            2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],\n            2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],\n            1 - 2 * qvec[1]**2 - 2 * qvec[2]**2\n        ]\n    ])\n\ndef rotmat(a, b):\n    a, b = a / np.linalg.norm(a), b / np.linalg.norm(b)\n    v = np.cross(a, b)\n    c = np.dot(a, b)\n    s = np.linalg.norm(v)\n    kmat = np.array([[0, -v[2], v[1]], [v[2], 0, -v[0]], [-v[1], v[0], 0]])\n    return np.eye(3) + kmat + kmat.dot(kmat) * ((1 - c) / (s ** 2 + 1e-10))\n\ndef closest_point_2_lines(oa, da, ob, db): # returns point closest to both rays of form o+t*d, and a weight factor that goes to 0 if the lines are parallel\n    da=da/np.linalg.norm(da)\n    db=db/np.linalg.norm(db)\n    c=np.cross(da,db)\n    denom=(np.linalg.norm(c)**2)\n    t=ob-oa\n    ta=np.linalg.det([t,db,c])/(denom+1e-10)\n    tb=np.linalg.det([t,da,c])/(denom+1e-10)\n    if ta>0:\n        ta=0\n    if tb>0:\n        tb=0\n    return (oa+ta*da+ob+tb*db)*0.5,denom\n\n\n\ndef convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, totp=-1, totw=-1, avglen = -1, rMat = np.array([])):\n    print(f\"outputting to {OUT_PATH}...\")\n    with open(os.path.join(TEXT_FOLDER,\"cameras.txt\"), \"r\") as f:\n        angle_x=math.pi/2\n        for line in f:\n            # 1 SIMPLE_RADIAL 2048 1536 1580.46 1024 768 0.0045691\n            # 1 OPENCV 3840 2160 3178.27 3182.09 1920 1080 0.159668 -0.231286 -0.00123982 0.00272224\n            # 1 RADIAL 1920 1080 1665.1 960 540 0.0672856 -0.0761443\n            # \n            if line[0]==\"#\":\n                continue\n            els=line.split(\" \")\n            w = float(els[2])\n            h = float(els[3])\n            fl_x = float(els[4])\n            fl_y = float(els[4])\n            k1 = 0\n            k2 = 0\n            p1 = 0\n            p2 = 0\n            cx = w/2\n            cy = h/2\n            if (els[1]==\"SIMPLE_RADIAL\"):\n                cx = float(els[5])\n                cy = float(els[6])\n                k1 = float(els[7])\n            elif (els[1]==\"RADIAL\"):\n                cx = float(els[5])\n                cy = float(els[6])\n                k1 = float(els[7])\n                k2 = float(els[8])\n            elif (els[1]==\"OPENCV\"):\n                fl_y = float(els[5])\n                cx = float(els[6])\n                cy = float(els[7])\n                k1 = float(els[8])\n                k2 = float(els[9])\n                p1 = float(els[10])\n                p2 = float(els[11])\n            elif (els[1]==\"PINHOLE\"):\n                cx = float(els[6])\n                cy = float(els[7])\n            else:\n                print(\"unknown camera model \", els[1])\n            # fl = 0.5 * w / tan(0.5 * angle_x);\n            angle_x= math.atan(w/(fl_x*2))*2\n            angle_y= math.atan(h/(fl_y*2))*2\n            fovx=angle_x*180/math.pi\n            fovy=angle_y*180/math.pi\n\n    #print(f\"camera:\\n\\tres={w,h}\\n\\tcenter={cx,cy}\\n\\tfocal={fl_x,fl_y}\\n\\tfov={fovx,fovy}\\n\\tk={k1,k2} p={p1,p2} \")\n\n    with open(os.path.join(TEXT_FOLDER,\"images.txt\"), \"r\") as f:\n        i=0\n        bottom = np.array([0,0,0,1.]).reshape([1,4])\n        out={\n            \"camera_angle_x\":angle_x,\n            \"camera_angle_y\":angle_y,\n            \"fl_x\":fl_x,\n            \"fl_y\":fl_y,\n            \"k1\":k1,\n            \"k2\":k2,\n            \"p1\":p1,\n            \"p2\":p2,\n            \"cx\":cx,\n            \"cy\":cy,\n            \"w\":w,\n            \"h\":h,\n            \"aabb_scale\":AABB_SCALE,\"frames\":[]\n        }\n\n        up=np.zeros(3)\n        for line in f:\n            line=line.strip()\n            if len(line)!=0 and line[0]==\"#\":\n                continue\n            i=i+1\n            if i < SKIP_EARLY*2:\n                continue\n            if  i%2==1 :\n                elems=line.split(\" \") # 1-4 is quat, 5-7 is trans, 9 is filename\n                #name = str(PurePosixPath(Path(IMAGE_FOLDER, elems[9])))\n                # why is this requireing a relitive path while using ^\n                image_rel = os.path.relpath(IMAGE_FOLDER)\n                name = str(f\"./{image_rel}/{elems[9]}\")\n                if not os.path.exists(name):\n                    name = name + \".png\"\n                    print(\"opening \", name)\n                b=sharpness(name)\n                #print(name, \"sharpness=\",b)\n                image_id = int(elems[0])\n                qvec = np.array(tuple(map(float, elems[1:5])))\n                tvec = np.array(tuple(map(float, elems[5:8])))\n                R = qvec2rotmat(-qvec)\n                t = tvec.reshape([3,1])\n                m = np.concatenate([np.concatenate([R, t], 1), bottom], 0)\n                c2w = np.linalg.inv(m)\n                c2w[0:3,2] *= -1 # flip the y and z axis\n                c2w[0:3,1] *= -1\n                c2w=c2w[[1,0,2,3],:] # swap y and z\n                c2w[2,:] *= -1 # flip whole world upside down\n\n                up += c2w[0:3,1]\n\n                #s=str(os.path.splitext(os.path.basename(elems[9]))[0])\n                s=str(os.path.basename(elems[9]))\n                #print(\"BASENAME \", s)\n                name = \"images/\"+ s # os.path.join(\"images\", s)\n                frame={\"file_path\":name,\"sharpness\":b,\"transform_matrix\": c2w}\n                #print(\"OUTPUT \", name)\n                out[\"frames\"].append(frame)\n    nframes = len(out[\"frames\"])\n    if len(rMat) == 0:\n        up = up / np.linalg.norm(up)\n        print(\"rMat is None up vector was \", up)\n        R=rotmat(up,[0,0,1]) # rotate up vector to [0,0,1]\n        R=np.pad(R,[0,1])\n        R[-1,-1]=1\n        rMat = R\n    else:\n        R = rMat\n\n\n    for f in out[\"frames\"]:\n        f[\"transform_matrix\"]=np.matmul(R,f[\"transform_matrix\"]) # rotate up to be the z axis\n\n    # find a central point they are all looking at\n    print(\"computing center of attention...\")\n\n    print(\"TOTP {} TOTW {}\".format(totp, totw))\n    if totw < 0 :\n        totw=0\n        totp=[0,0,0]\n        for f in out[\"frames\"]:\n            mf=f[\"transform_matrix\"][0:3,:]\n            for g in out[\"frames\"]:\n                mg=g[\"transform_matrix\"][0:3,:]\n                p,w=closest_point_2_lines(mf[:,3],mf[:,2],mg[:,3],mg[:,2])\n                if w>0.01:\n                    totp+=p*w\n                totw+=w\n        if totw >0:\n            totp/=totw\n\n    print(\"AFTER TOTP {} TOTW {}\".format(totp, totw))\n    print(totp) # the cameras are looking at totp\n    for f in out[\"frames\"]:\n        f[\"transform_matrix\"][0:3,3]-=totp\n\n    if avglen < 0:\n        avglen=0.\n        for f in out[\"frames\"]:\n            avglen+=np.linalg.norm(f[\"transform_matrix\"][0:3,3])\n        avglen/=nframes\n\n    print(\"avg camera distance from origin \", avglen)\n    for f in out[\"frames\"]:\n        f[\"transform_matrix\"][0:3,3]*=4./avglen     # scale to \"nerf sized\"\n\n    for f in out[\"frames\"]:\n        f[\"transform_matrix\"]=f[\"transform_matrix\"].tolist()\n    print(nframes,\"frames\")\n    print(f\"writing {OUT_PATH}\")\n    with open(OUT_PATH, \"w\") as outfile:\n        json.dump(out, outfile, indent=2)\n\n    return totp, totw, avglen, rMat\n\ndef createNerf(path, hires=False):\n    AABB_SCALE=int(16)\n    SKIP_EARLY=int(0)\n    print(\"Path is \", path, str(path))\n    if hires:\n        print(\"DOING HIRES !!\")\n        colmappath = os.path.join(os.path.join(str(path), \"sibr\"), \"colmap\")\n    else:\n        colmappath = os.path.join(os.path.join(str(path), \"colmap_1000\"), \"colmap\")\n    TEXT_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"sparse\")\n    IMAGE_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"images\")\n    OUT_PATH= os.path.join(os.path.join(colmappath,  \"stereo\"), \"transforms.json\")\n\n    totp, totw, avglen, rMat = convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, -1, -1, -1, np.array([]))\n\n    colmappath = os.path.join(os.path.join(str(path), \"colmap_1000\"), \"validation_colmap\") \n    TEXT_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"sparse\")\n    IMAGE_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"images\")\n    OUT_PATH= os.path.join(os.path.join(colmappath,  \"stereo\"), \"transforms.json\")\n    totp, totw, avglen, rMat = convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, totp, totw, avglen, rMat)\n\n    colmappath = os.path.join(os.path.join(str(path), \"colmap_1000\"), \"test_path_colmap\") \n    TEXT_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"sparse\")\n    IMAGE_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"images\")\n    OUT_PATH= os.path.join(os.path.join(colmappath,  \"stereo\"), \"transforms.json\")\n    totp, totw, avglen, rMat = convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, totp, totw, avglen, rMat)\n\n    # if test2_path exists\n    colmappath = os.path.join(os.path.join(str(path), \"colmap_1000\"), \"test_path2\") \n\n    if os.path.exists(colmappath):\n        TEXT_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"sparse\")\n        IMAGE_FOLDER=os.path.join(os.path.join(colmappath,  \"stereo\"), \"images\")\n        OUT_PATH= os.path.join(os.path.join(colmappath,  \"stereo\"), \"transforms.json\")\n        totp, totw, avglen, rMat = convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, totp, totw, avglen, rMat)\n\nif __name__ == \"__main__\":\n    args = parse_args()\n    if args.video_in != \"\":\n        run_ffmpeg(args)\n    if args.run_colmap:\n        run_colmap(args)\n    AABB_SCALE=int(args.aabb_scale)\n    SKIP_EARLY=int(args.skip_early)\n    IMAGE_FOLDER=args.images\n    TEXT_FOLDER=args.text\n    OUT_PATH=args.out\n    convert(AABB_SCALE, SKIP_EARLY, IMAGE_FOLDER, TEXT_FOLDER, OUT_PATH, -1, -1)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/fullColmapProcess.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script runs a pipeline to create Colmap reconstruction data\n\nParameters: -h help,\n            -path <path to your dataset folder>,\n            -sibrBinariesPath <binaries directory of SIBR>,\n            -colmapPath <colmap path directory which contains colmap.bat / colmap.bin>,\n            -quality <quality of the reconstruction : 'low', 'medium', 'high', 'extreme'>,\n\nUsage: python fullColmapProcess.py -path <path to your dataset folder>\n                                   -sibrBinariesPath <binaries directory of SIBR>\n                                   -colmapPath <colmap path directory which contains colmap.bat / colmap.bin>\n                                   -quality <quality of the reconstruction : 'low', 'medium', 'high', 'extreme'>\n\n\"\"\"\n\nimport os, sys, shutil\nimport json\nimport argparse\nfrom utils.paths import getBinariesPath, getColmapPath, getMeshlabPath\nfrom utils.commands import  getProcess, getColmap\nfrom utils.TaskPipeline import TaskPipeline\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--path\", type=str, required=True, help=\"path to your dataset folder\")\n    parser.add_argument(\"--sibrBinariesPath\", type=str, default=getBinariesPath(), help=\"binaries directory of SIBR\")\n    parser.add_argument(\"--colmapPath\", type=str, default=getColmapPath(), help=\"path to directory colmap.bat / colmap.bin directory\")\n    parser.add_argument(\"--meshlabPath\", type=str, default=getMeshlabPath(), help=\"path to meshlabserver directory\")\n    parser.add_argument(\"--quality\", type=str, default='default', choices=['default', 'low', 'medium', 'average', 'high', 'extreme'],\n        help=\"quality of the reconstruction\")\n    parser.add_argument(\"--dry_run\", action='store_true', help=\"run without calling commands\")\n    parser.add_argument(\"--with_texture\", action='store_true', help=\"Add texture steps\")\n    parser.add_argument(\"--create_sibr_scene\", action='store_true', help=\"Create SIBR scene\")\n    parser.add_argument(\"--meshsize\", type=str, help=\"size of the output mesh in K polygons (ie 200 == 200,000 polygons). Values allowed: 200, 250, 300, 350, 400\")\n    \n    #colmap performance arguments\n    parser.add_argument(\"--numGPUs\", type=int, default=2, help=\"number of GPUs allocated to Colmap\")\n\n    # Feature extractor \n    parser.add_argument(\"--SiftExtraction.max_image_size\", type=int, dest=\"siftExtraction_ImageSize\")\n    parser.add_argument(\"--SiftExtraction.estimate_affine_shape\", type=int, dest=\"siftExtraction_EstimateAffineShape\") \n    parser.add_argument(\"--SiftExtraction.domain_size_pooling\", type=int, dest=\"siftExtraction_DomainSizePooling\")\n    parser.add_argument(\"--SiftExtraction.max_num_features\", type=int, dest=\"siftExtraction_MaxNumFeatures\")\n    parser.add_argument(\"--ImageReader.single_camera\", type=int, dest=\"imageReader_SingleCamera\")\n\n    # Exhaustive matcher\n    parser.add_argument(\"--ExhaustiveMatching.block_size\", type=int, dest=\"exhaustiveMatcher_ExhaustiveMatchingBlockSize\")\n\n    # Mapper\n    parser.add_argument(\"--Mapper.ba_local_max_num_iterations\", type=int, dest=\"mapper_MapperDotbaLocalMaxNumIterations\")\n    parser.add_argument(\"--Mapper.ba_global_max_num_iterations\", type=int, dest=\"mapper_MapperDotbaGlobalMaxNumIterations\")\n    parser.add_argument(\"--Mapper.ba_global_images_ratio\", type=float, dest=\"mapper_MapperDotbaGlobalImagesRatio\")\n    parser.add_argument(\"--Mapper.ba_global_points_ratio\", type=float, dest=\"mapper_MapperDotbaGlobalPointsRatio\")\n    parser.add_argument(\"--Mapper.ba_global_max_refinements\", type=int, dest=\"mapper_MapperDotbaGlobalMaxRefinements\")\n    parser.add_argument(\"--Mapper.ba_local_max_refinements\", type=int, dest=\"mapper_MapperDotbaLocalMaxRefinements\")\n\n    # Patch match stereo\n    parser.add_argument(\"--PatchMatchStereo.max_image_size\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotMaxImageSize\")\n    parser.add_argument(\"--PatchMatchStereo.window_radius\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowRadius\")\n    parser.add_argument(\"--PatchMatchStereo.window_step\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowStep\")\n    parser.add_argument(\"--PatchMatchStereo.num_samples\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumSamples\")\n    parser.add_argument(\"--PatchMatchStereo.num_iterations\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumIterations\")\n    parser.add_argument(\"--PatchMatchStereo.geom_consistency\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotGeomConsistency\")\n\n    # Stereo fusion\n    parser.add_argument(\"--StereoFusion.check_num_images\", type=int, dest=\"stereoFusion_CheckNumImages\")\n    parser.add_argument(\"--StereoFusion.max_image_size\", type=int, dest=\"stereoFusion_MaxImageSize\")\n\n    args = vars(parser.parse_args())\n\n    # Update args with quality values\n    with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"ColmapQualityParameters.json\"), \"r\") as qualityParamsFile:\n        qualityParams = json.load(qualityParamsFile)\n\n        for key, value in qualityParams.items():\n            if not key in args or args[key] is None:\n                args[key] = qualityParams[key][args[\"quality\"]] if args[\"quality\"] in qualityParams[key] else qualityParams[key][\"default\"]\n\n    # Get process steps\n    with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"ColmapProcessSteps.json\"), \"r\") as processStepsFile:\n        steps = json.load(processStepsFile)[\"steps\"]\n\n    # Fixing path values\n    args[\"path\"] = os.path.abspath(args[\"path\"])\n    args[\"sibrBinariesPath\"] = os.path.abspath(args[\"sibrBinariesPath\"])\n    args[\"colmapPath\"] = os.path.abspath(args[\"colmapPath\"])\n\n    args[\"gpusIndices\"] = ','.join([str(i) for i in range(args[\"numGPUs\"])])\n\n    programs = {\n        \"colmap\": {\n            \"path\": getColmap(args[\"colmapPath\"])\n        },\n        \"unwrapMesh\": {\n            \"path\": getProcess(\"unwrapMesh\", args[\"sibrBinariesPath\"])\n        },\n        \"textureMesh\": {\n            \"path\": getProcess(\"textureMesh\", args[\"sibrBinariesPath\"])\n        },\n    }\n\n    pipeline = TaskPipeline(args, steps, programs)\n\n    pipeline.runProcessSteps()\n    \n    print(\"fullColmapProcess has finished successfully.\")\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/read_write_model.py",
    "content": "# Copyright (c) 2018, ETH Zurich and UNC Chapel Hill.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are met:\n#\n#     * Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#     * Redistributions in binary form must reproduce the above copyright\n#       notice, this list of conditions and the following disclaimer in the\n#       documentation and/or other materials provided with the distribution.\n#\n#     * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of\n#       its contributors may be used to endorse or promote products derived\n#       from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n#\n# Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)\n\nimport os\nimport collections\nimport numpy as np\nimport struct\nimport argparse\n\n\nCameraModel = collections.namedtuple(\n    \"CameraModel\", [\"model_id\", \"model_name\", \"num_params\"])\nCamera = collections.namedtuple(\n    \"Camera\", [\"id\", \"model\", \"width\", \"height\", \"params\"])\nBaseImage = collections.namedtuple(\n    \"Image\", [\"id\", \"qvec\", \"tvec\", \"camera_id\", \"name\", \"xys\", \"point3D_ids\"])\nPoint3D = collections.namedtuple(\n    \"Point3D\", [\"id\", \"xyz\", \"rgb\", \"error\", \"image_ids\", \"point2D_idxs\"])\n\n\nclass Image(BaseImage):\n    def qvec2rotmat(self):\n        return qvec2rotmat(self.qvec)\n\n\nCAMERA_MODELS = {\n    CameraModel(model_id=0, model_name=\"SIMPLE_PINHOLE\", num_params=3),\n    CameraModel(model_id=1, model_name=\"PINHOLE\", num_params=4),\n    CameraModel(model_id=2, model_name=\"SIMPLE_RADIAL\", num_params=4),\n    CameraModel(model_id=3, model_name=\"RADIAL\", num_params=5),\n    CameraModel(model_id=4, model_name=\"OPENCV\", num_params=8),\n    CameraModel(model_id=5, model_name=\"OPENCV_FISHEYE\", num_params=8),\n    CameraModel(model_id=6, model_name=\"FULL_OPENCV\", num_params=12),\n    CameraModel(model_id=7, model_name=\"FOV\", num_params=5),\n    CameraModel(model_id=8, model_name=\"SIMPLE_RADIAL_FISHEYE\", num_params=4),\n    CameraModel(model_id=9, model_name=\"RADIAL_FISHEYE\", num_params=5),\n    CameraModel(model_id=10, model_name=\"THIN_PRISM_FISHEYE\", num_params=12)\n}\nCAMERA_MODEL_IDS = dict([(camera_model.model_id, camera_model)\n                         for camera_model in CAMERA_MODELS])\nCAMERA_MODEL_NAMES = dict([(camera_model.model_name, camera_model)\n                           for camera_model in CAMERA_MODELS])\n\n\ndef read_next_bytes(fid, num_bytes, format_char_sequence, endian_character=\"<\"):\n    \"\"\"Read and unpack the next bytes from a binary file.\n    :param fid:\n    :param num_bytes: Sum of combination of {2, 4, 8}, e.g. 2, 6, 16, 30, etc.\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    :param endian_character: Any of {@, =, <, >, !}\n    :return: Tuple of read and unpacked values.\n    \"\"\"\n    data = fid.read(num_bytes)\n    return struct.unpack(endian_character + format_char_sequence, data)\n\n\ndef write_next_bytes(fid, data, format_char_sequence, endian_character=\"<\"):\n    \"\"\"pack and write to a binary file.\n    :param fid:\n    :param data: data to send, if multiple elements are sent at the same time,\n    they should be encapsuled either in a list or a tuple\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    should be the same length as the data list or tuple\n    :param endian_character: Any of {@, =, <, >, !}\n    \"\"\"\n    if isinstance(data, (list, tuple)):\n        bytes = struct.pack(endian_character + format_char_sequence, *data)\n    else:\n        bytes = struct.pack(endian_character + format_char_sequence, data)\n    fid.write(bytes)\n\n\ndef read_cameras_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasText(const std::string& path)\n        void Reconstruction::ReadCamerasText(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                camera_id = int(elems[0])\n                model = elems[1]\n                width = int(elems[2])\n                height = int(elems[3])\n                params = np.array(tuple(map(float, elems[4:])))\n                cameras[camera_id] = Camera(id=camera_id, model=model,\n                                            width=width, height=height,\n                                            params=params)\n    return cameras\n\n\ndef read_cameras_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_cameras = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_cameras):\n            camera_properties = read_next_bytes(\n                fid, num_bytes=24, format_char_sequence=\"iiQQ\")\n            camera_id = camera_properties[0]\n            model_id = camera_properties[1]\n            model_name = CAMERA_MODEL_IDS[camera_properties[1]].model_name\n            width = camera_properties[2]\n            height = camera_properties[3]\n            num_params = CAMERA_MODEL_IDS[model_id].num_params\n            params = read_next_bytes(fid, num_bytes=8*num_params,\n                                     format_char_sequence=\"d\"*num_params)\n            cameras[camera_id] = Camera(id=camera_id,\n                                        model=model_name,\n                                        width=width,\n                                        height=height,\n                                        params=np.array(params))\n        assert len(cameras) == num_cameras\n    return cameras\n\n\ndef write_cameras_text(cameras, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasText(const std::string& path)\n        void Reconstruction::ReadCamerasText(const std::string& path)\n    \"\"\"\n    HEADER = \"# Camera list with one line of data per camera:\\n\" + \\\n             \"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\\n\" + \\\n             \"# Number of cameras: {}\\n\".format(len(cameras))\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, cam in cameras.items():\n            to_write = [cam.id, cam.model, cam.width, cam.height, *cam.params]\n            line = \" \".join([str(elem) for elem in to_write])\n            fid.write(line + \"\\n\")\n\n\ndef write_cameras_binary(cameras, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(cameras), \"Q\")\n        for _, cam in cameras.items():\n            model_id = CAMERA_MODEL_NAMES[cam.model].model_id\n            camera_properties = [cam.id,\n                                 model_id,\n                                 cam.width,\n                                 cam.height]\n            write_next_bytes(fid, camera_properties, \"iiQQ\")\n            for p in cam.params:\n                write_next_bytes(fid, float(p), \"d\")\n    return cameras\n\n\ndef read_images_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesText(const std::string& path)\n        void Reconstruction::WriteImagesText(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                image_id = int(elems[0])\n                qvec = np.array(tuple(map(float, elems[1:5])))\n                tvec = np.array(tuple(map(float, elems[5:8])))\n                camera_id = int(elems[8])\n                image_name = elems[9]\n                elems = fid.readline().split()\n                xys = np.column_stack([tuple(map(float, elems[0::3])),\n                                       tuple(map(float, elems[1::3]))])\n                point3D_ids = np.array(tuple(map(int, elems[2::3])))\n                images[image_id] = Image(\n                    id=image_id, qvec=qvec, tvec=tvec,\n                    camera_id=camera_id, name=image_name,\n                    xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef read_images_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_reg_images = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_reg_images):\n            binary_image_properties = read_next_bytes(\n                fid, num_bytes=64, format_char_sequence=\"idddddddi\")\n            image_id = binary_image_properties[0]\n            qvec = np.array(binary_image_properties[1:5])\n            tvec = np.array(binary_image_properties[5:8])\n            camera_id = binary_image_properties[8]\n            image_name = \"\"\n            current_char = read_next_bytes(fid, 1, \"c\")[0]\n            while current_char != b\"\\x00\":   # look for the ASCII 0 entry\n                image_name += current_char.decode(\"utf-8\")\n                current_char = read_next_bytes(fid, 1, \"c\")[0]\n            num_points2D = read_next_bytes(fid, num_bytes=8,\n                                           format_char_sequence=\"Q\")[0]\n            x_y_id_s = read_next_bytes(fid, num_bytes=24*num_points2D,\n                                       format_char_sequence=\"ddq\"*num_points2D)\n            xys = np.column_stack([tuple(map(float, x_y_id_s[0::3])),\n                                   tuple(map(float, x_y_id_s[1::3]))])\n            point3D_ids = np.array(tuple(map(int, x_y_id_s[2::3])))\n            images[image_id] = Image(\n                id=image_id, qvec=qvec, tvec=tvec,\n                camera_id=camera_id, name=image_name,\n                xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef write_images_text(images, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesText(const std::string& path)\n        void Reconstruction::WriteImagesText(const std::string& path)\n    \"\"\"\n    if len(images) == 0:\n        mean_observations = 0\n    else:\n        mean_observations = sum((len(img.point3D_ids) for _, img in images.items()))/len(images)\n    HEADER = \"# Image list with two lines of data per image:\\n\" + \\\n             \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\\n\" + \\\n             \"#   POINTS2D[] as (X, Y, POINT3D_ID)\\n\" + \\\n             \"# Number of images: {}, mean observations per image: {}\\n\".format(len(images), mean_observations)\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, img in images.items():\n            image_header = [img.id, *img.qvec, *img.tvec, img.camera_id, img.name]\n            first_line = \" \".join(map(str, image_header))\n            fid.write(first_line + \"\\n\")\n\n            points_strings = []\n            for xy, point3D_id in zip(img.xys, img.point3D_ids):\n                points_strings.append(\" \".join(map(str, [*xy, point3D_id])))\n            fid.write(\" \".join(points_strings) + \"\\n\")\n\n\ndef write_images_binary(images, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(images), \"Q\")\n        for _, img in images.items():\n            write_next_bytes(fid, img.id, \"i\")\n            write_next_bytes(fid, img.qvec.tolist(), \"dddd\")\n            write_next_bytes(fid, img.tvec.tolist(), \"ddd\")\n            write_next_bytes(fid, img.camera_id, \"i\")\n            for char in img.name:\n                write_next_bytes(fid, char.encode(\"utf-8\"), \"c\")\n            write_next_bytes(fid, b\"\\x00\", \"c\")\n            write_next_bytes(fid, len(img.point3D_ids), \"Q\")\n            for xy, p3d_id in zip(img.xys, img.point3D_ids):\n                write_next_bytes(fid, [*xy, p3d_id], \"ddq\")\n\n\ndef read_points3D_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    points3D = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                point3D_id = int(elems[0])\n                xyz = np.array(tuple(map(float, elems[1:4])))\n                rgb = np.array(tuple(map(int, elems[4:7])))\n                error = float(elems[7])\n                image_ids = np.array(tuple(map(int, elems[8::2])))\n                point2D_idxs = np.array(tuple(map(int, elems[9::2])))\n                points3D[point3D_id] = Point3D(id=point3D_id, xyz=xyz, rgb=rgb,\n                                               error=error, image_ids=image_ids,\n                                               point2D_idxs=point2D_idxs)\n    return points3D\n\n\ndef read_points3D_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n    points3D = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_points = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_points):\n            binary_point_line_properties = read_next_bytes(\n                fid, num_bytes=43, format_char_sequence=\"QdddBBBd\")\n            point3D_id = binary_point_line_properties[0]\n            xyz = np.array(binary_point_line_properties[1:4])\n            rgb = np.array(binary_point_line_properties[4:7])\n            error = np.array(binary_point_line_properties[7])\n            track_length = read_next_bytes(\n                fid, num_bytes=8, format_char_sequence=\"Q\")[0]\n            track_elems = read_next_bytes(\n                fid, num_bytes=8*track_length,\n                format_char_sequence=\"ii\"*track_length)\n            image_ids = np.array(tuple(map(int, track_elems[0::2])))\n            point2D_idxs = np.array(tuple(map(int, track_elems[1::2])))\n            points3D[point3D_id] = Point3D(\n                id=point3D_id, xyz=xyz, rgb=rgb,\n                error=error, image_ids=image_ids,\n                point2D_idxs=point2D_idxs)\n    return points3D\n\n\ndef write_points3D_text(points3D, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    if len(points3D) == 0:\n        mean_track_length = 0\n    else:\n        mean_track_length = sum((len(pt.image_ids) for _, pt in points3D.items()))/len(points3D)\n    HEADER = \"# 3D point list with one line of data per point:\\n\" + \\\n             \"#   POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)\\n\" + \\\n             \"# Number of points: {}, mean track length: {}\\n\".format(len(points3D), mean_track_length)\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, pt in points3D.items():\n            point_header = [pt.id, *pt.xyz, *pt.rgb, pt.error]\n            fid.write(\" \".join(map(str, point_header)) + \" \")\n            track_strings = []\n            for image_id, point2D in zip(pt.image_ids, pt.point2D_idxs):\n                track_strings.append(\" \".join(map(str, [image_id, point2D])))\n            fid.write(\" \".join(track_strings) + \"\\n\")\n\n\ndef write_points3D_binary(points3D, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(points3D), \"Q\")\n        for _, pt in points3D.items():\n            write_next_bytes(fid, pt.id, \"Q\")\n            write_next_bytes(fid, pt.xyz.tolist(), \"ddd\")\n            write_next_bytes(fid, pt.rgb.tolist(), \"BBB\")\n            write_next_bytes(fid, pt.error, \"d\")\n            track_length = pt.image_ids.shape[0]\n            write_next_bytes(fid, track_length, \"Q\")\n            for image_id, point2D_id in zip(pt.image_ids, pt.point2D_idxs):\n                write_next_bytes(fid, [image_id, point2D_id], \"ii\")\n\n\ndef detect_model_format(path, ext):\n    if os.path.isfile(os.path.join(path, \"cameras\"  + ext)) and \\\n       os.path.isfile(os.path.join(path, \"images\"   + ext)) and \\\n       os.path.isfile(os.path.join(path, \"points3D\" + ext)):\n        print(\"Detected model format: '\" + ext + \"'\")\n        return True\n\n    return False\n\n\ndef read_model(path, ext=\"\"):\n    # try to detect the extension automatically\n    if ext == \"\":\n        if detect_model_format(path, \".bin\"):\n            ext = \".bin\"\n        elif detect_model_format(path, \".txt\"):\n            ext = \".txt\"\n        else:\n            print(\"Provide model format: '.bin' or '.txt'\")\n            return\n\n    if ext == \".txt\":\n        cameras = read_cameras_text(os.path.join(path, \"cameras\" + ext))\n        images = read_images_text(os.path.join(path, \"images\" + ext))\n        points3D = read_points3D_text(os.path.join(path, \"points3D\") + ext)\n    else:\n        cameras = read_cameras_binary(os.path.join(path, \"cameras\" + ext))\n        images = read_images_binary(os.path.join(path, \"images\" + ext))\n        points3D = read_points3D_binary(os.path.join(path, \"points3D\") + ext)\n    return cameras, images, points3D\n\n\ndef write_model(cameras, images, points3D, path, ext=\".bin\"):\n    if ext == \".txt\":\n        write_cameras_text(cameras, os.path.join(path, \"cameras\" + ext))\n        write_images_text(images, os.path.join(path, \"images\" + ext))\n        write_points3D_text(points3D, os.path.join(path, \"points3D\") + ext)\n    else:\n        write_cameras_binary(cameras, os.path.join(path, \"cameras\" + ext))\n        write_images_binary(images, os.path.join(path, \"images\" + ext))\n        write_points3D_binary(points3D, os.path.join(path, \"points3D\") + ext)\n    return cameras, images, points3D\n\n\ndef qvec2rotmat(qvec):\n    return np.array([\n        [1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,\n         2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],\n         2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]],\n        [2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],\n         1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,\n         2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]],\n        [2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],\n         2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],\n         1 - 2 * qvec[1]**2 - 2 * qvec[2]**2]])\n\n\ndef rotmat2qvec(R):\n    Rxx, Ryx, Rzx, Rxy, Ryy, Rzy, Rxz, Ryz, Rzz = R.flat\n    K = np.array([\n        [Rxx - Ryy - Rzz, 0, 0, 0],\n        [Ryx + Rxy, Ryy - Rxx - Rzz, 0, 0],\n        [Rzx + Rxz, Rzy + Ryz, Rzz - Rxx - Ryy, 0],\n        [Ryz - Rzy, Rzx - Rxz, Rxy - Ryx, Rxx + Ryy + Rzz]]) / 3.0\n    eigvals, eigvecs = np.linalg.eigh(K)\n    qvec = eigvecs[[3, 0, 1, 2], np.argmax(eigvals)]\n    if qvec[0] < 0:\n        qvec *= -1\n    return qvec\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=\"Read and write COLMAP binary and text models\")\n    parser.add_argument(\"--input_model\", help=\"path to input model folder\")\n    parser.add_argument(\"--input_format\", choices=[\".bin\", \".txt\"],\n                        help=\"input model format\", default=\"\")\n    parser.add_argument(\"--output_model\",\n                        help=\"path to output model folder\")\n    parser.add_argument(\"--output_format\", choices=[\".bin\", \".txt\"],\n                        help=\"outut model format\", default=\".txt\")\n    args = parser.parse_args()\n\n    cameras, images, points3D = read_model(path=args.input_model, ext=args.input_format)\n\n    print(\"num_cameras:\", len(cameras))\n    print(\"num_images:\", len(images))\n    print(\"num_points3D:\", len(points3D))\n\n    if args.output_model is not None:\n        write_model(cameras, images, points3D, path=args.output_model, ext=args.output_format)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/selectiveColmapProcess.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script runs a pipeline to create Colmap reconstruction data; you can choose which steps to do and it also handles test path data which are only calibrated\n\nParameters: -h help,\n            -path <path to your dataset folder>,\n            -sibrBinariesPath <binaries directory of SIBR>,\n            -colmapPath <colmap path directory which contains colmap.bat / colmap.bin>,\n            -quality <quality of the reconstruction : 'low', 'medium', 'high', 'extreme'>,\n\nUsage: python selectiveColmapProcess.py -path <path to your dataset folder>\n                                   -sibrBinariesPath <binaries directory of SIBR>\n                                   -colmapPath <colmap path directory which contains colmap.bat / colmap.bin>\n                                   -quality <quality of the reconstruction : 'low', 'medium', 'high', 'extreme'>\n\n\"\"\"\n\nimport os, sys, shutil\nimport json\nimport argparse\nfrom utils.paths import getBinariesPath, getColmapPath, getMeshlabPath\nfrom utils.commands import  getProcess, getColmap\nfrom utils.TaskPipeline import TaskPipeline\nimport selective_colmap_process\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--path\", type=str, required=True, help=\"path to your dataset folder\")\n    parser.add_argument(\"--sibrBinariesPath\", type=str, default=getBinariesPath(), help=\"binaries directory of SIBR\")\n    parser.add_argument(\"--colmapPath\", type=str, default=getColmapPath(), help=\"path to directory colmap.bat / colmap.bin directory\")\n    parser.add_argument(\"--meshlabPath\", type=str, default=getMeshlabPath(), help=\"path to meshlabserver directory\")\n    parser.add_argument(\"--quality\", type=str, default='default', choices=['default', 'low', 'medium', 'average', 'high', 'extreme'],\n        help=\"quality of the reconstruction\")\n    parser.add_argument(\"--dry_run\", action='store_true', help=\"run without calling commands\")\n    parser.add_argument(\"--with_texture\", action='store_true', help=\"Add texture steps\")\n    parser.add_argument(\"--create_sibr_scene\", action='store_true', help=\"Create SIBR scene\")\n    parser.add_argument(\"--meshsize\", type=str, help=\"size of the output mesh in K polygons (ie 200 == 200,000 polygons). Values allowed: 200, 250, 300, 350, 400\")\n\n    # additional step choice presets\n    parser.add_argument(\"--from_step\", type=str, default='default', help=\"Run from this step to --to_step\")\n    parser.add_argument(\"--to_step\", type=str, default='default', help=\"up to but *excluding* this step (from --from_step); must be unique steps\")\n    parser.add_argument(\"--exclude_steps\", type=str, default='default', help=\"Ignore these steps (string with space separated names of steps)\")\n    parser.add_argument(\"--calibrate_only\", action='store_true', help=\"Do calibration only (from dataset_build_structure to before colmap_path_match_stereo with no special test frame processing\")\n    parser.add_argument(\"--calibrate_only_process_test\", action='store_true', help=\"Do calibration only (from dataset_build_structure to before colmap_path_match_stereo with test frame processing\")\n    parser.add_argument(\"--mvs_only\", action='store_true', help=\"Do mvs only (from colmap_path_match_stereo onwards without test frame processing\")\n    parser.add_argument(\"--fix_cameras\", action='store_true', help=\"Do fix camera step only\")\n    parser.add_argument(\"--fix_cameras_stereo\", action='store_true', help=\"Do fix camera step only for stereo/sparse\")\n    \n    #colmap performance arguments\n    parser.add_argument(\"--numGPUs\", type=int, default=2, help=\"number of GPUs allocated to Colmap\")\n\n    # Feature extractor \n    parser.add_argument(\"--SiftExtraction.max_image_size\", type=int, dest=\"siftExtraction_ImageSize\")\n    parser.add_argument(\"--SiftExtraction.estimate_affine_shape\", type=int, dest=\"siftExtraction_EstimateAffineShape\") \n    parser.add_argument(\"--SiftExtraction.domain_size_pooling\", type=int, dest=\"siftExtraction_DomainSizePooling\")\n    parser.add_argument(\"--SiftExtraction.max_num_features\", type=int, dest=\"siftExtraction_MaxNumFeatures\")\n    parser.add_argument(\"--ImageReader.single_camera\", type=int, dest=\"imageReader_SingleCamera\")\n\n    # Exhaustive matcher\n    parser.add_argument(\"--ExhaustiveMatching.block_size\", type=int, dest=\"exhaustiveMatcher_ExhaustiveMatchingBlockSize\")\n\n    # Mapper\n    parser.add_argument(\"--Mapper.ba_local_max_num_iterations\", type=int, dest=\"mapper_MapperDotbaLocalMaxNumIterations\")\n    parser.add_argument(\"--Mapper.ba_global_max_num_iterations\", type=int, dest=\"mapper_MapperDotbaGlobalMaxNumIterations\")\n    parser.add_argument(\"--Mapper.ba_global_images_ratio\", type=float, dest=\"mapper_MapperDotbaGlobalImagesRatio\")\n    parser.add_argument(\"--Mapper.ba_global_points_ratio\", type=float, dest=\"mapper_MapperDotbaGlobalPointsRatio\")\n    parser.add_argument(\"--Mapper.ba_global_max_refinements\", type=int, dest=\"mapper_MapperDotbaGlobalMaxRefinements\")\n    parser.add_argument(\"--Mapper.ba_local_max_refinements\", type=int, dest=\"mapper_MapperDotbaLocalMaxRefinements\")\n\n    \n    # Patch match stereo\n    parser.add_argument(\"--PatchMatchStereo.max_image_size\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotMaxImageSize\")\n    parser.add_argument(\"--PatchMatchStereo.window_radius\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowRadius\")\n    parser.add_argument(\"--PatchMatchStereo.window_step\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowStep\")\n    parser.add_argument(\"--PatchMatchStereo.num_samples\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumSamples\")\n    parser.add_argument(\"--PatchMatchStereo.num_iterations\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumIterations\")\n    parser.add_argument(\"--PatchMatchStereo.geom_consistency\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotGeomConsistency\")\n\n    # Stereo fusion\n    parser.add_argument(\"--StereoFusion.check_num_images\", type=int, dest=\"stereoFusion_CheckNumImages\")\n    parser.add_argument(\"--StereoFusion.max_image_size\", type=int, dest=\"stereoFusion_MaxImageSize\")\n\n    args = vars(parser.parse_args())\n\n    # Update args with quality values\n    with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"ColmapQualityParameters.json\"), \"r\") as qualityParamsFile:\n        qualityParams = json.load(qualityParamsFile)\n\n        for key, value in qualityParams.items():\n            if not key in args or args[key] is None:\n                args[key] = qualityParams[key][args[\"quality\"]] if args[\"quality\"] in qualityParams[key] else qualityParams[key][\"default\"]\n\n    # Get process steps\n    with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"SelectiveColmapProcessSteps.json\"), \"r\") as processStepsFile:\n        steps = json.load(processStepsFile)[\"steps\"]\n\n    # apply selective processing\n    exclude_steps = []\n    if( args[\"exclude_steps\"] != 'default' ):\n        exclude_steps = args[\"exclude_steps\"].split()\n\n    from_step = args[\"from_step\"]\n    to_step = args[\"to_step\"]\n\n    # treat pre-defined cases\n    if( args[\"fix_cameras\"] or args[\"fix_cameras_stereo\"]):\n        new_steps = []\n        for s in steps:\n            if( s['name'] == \"fix_cameras\" ):\n                print(s)\n                (s['function_args'])['photoName'] = \"00\"\n                if args[\"fix_cameras_stereo\"]:\n                    (s['function_args'])['sparse_subdir'] = os.path.join(os.path.join(\"colmap\", \"stereo\"), \"sparse\")\n                new_steps.append(s)\n                break\n        steps = new_steps\n\n    if( args[\"calibrate_only\"] or args[\"calibrate_only_process_test\"] ):\n        from_step = \"build_dataset_structure\" \n        to_step = \"colmap_patch_match_stereo\" \n        if( args[\"calibrate_only\"] ):\n            exclude_steps = [ \"extract_video_frames\", \"fix_cameras\", \"colmap_image_deleter_colmap\", \"remove_video_images\" ]\n\n    if( args[\"mvs_only\"] ):\n        from_step = \"colmap_patch_match_stereo\" \n        to_step = \"use_eol_fixed_mesh\"\n    \n\n    if( from_step != 'default' ):\n        # check if to_step exists\n        if( to_step != 'default' ):\n            # select steps\n            newsteps = []\n            adding_steps = False\n            for s in steps:\n                if( s['name'] == from_step ):\n                    adding_steps = True\n                # special case for last step that should be added\n                if( s['name'] == to_step and s['name'] != \"use_eol_fixed_mesh\" ):\n                    break\n                if adding_steps :\n                    if not (s['name'] in exclude_steps):\n                        newsteps.append(s)\n            steps = newsteps\n        else:\n            print(\"--from_step given without --to_step; ignoring\")\n\n    if args[\"dry_run\"]:\n        print(\"Keeping only following steps: \")\n        for s in steps:\n           print (s['name'])\n\n    # Fixing path values\n    args[\"path\"] = os.path.abspath(args[\"path\"])\n    args[\"sibrBinariesPath\"] = os.path.abspath(args[\"sibrBinariesPath\"])\n    args[\"colmapPath\"] = os.path.abspath(args[\"colmapPath\"])\n\n    args[\"gpusIndices\"] = ','.join([str(i) for i in range(args[\"numGPUs\"])])\n\n    programs = {\n        \"colmap\": {\n            \"path\": getColmap(args[\"colmapPath\"])\n        },\n        \"unwrapMesh\": {\n            \"path\": getProcess(\"unwrapMesh\", args[\"sibrBinariesPath\"])\n        },\n        \"textureMesh\": {\n            \"path\": getProcess(\"textureMesh\", args[\"sibrBinariesPath\"])\n        },\n    }\n\n    pipeline = TaskPipeline(args, steps, programs)\n\n    pipeline.runProcessSteps()\n    \n    print(\"selectiveColmapProcess has finished successfully.\")\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/selective_colmap_process.py",
    "content": "import os\r\nimport os.path\r\nimport sys\r\nimport argparse\r\nimport shutil\r\nimport sqlite3\r\nimport read_write_model as rwm\r\n\r\n\r\nimport cv2\r\nprint(cv2.__version__)\r\n\r\n\r\ndef extract_images(pathIn, pathOut, videoName, maxNumFrames = -1, resize=False):\r\n    EVERY_NTH = 2\r\n    count = 0\r\n    vidcap = cv2.VideoCapture(pathIn)\r\n    fps = round(vidcap.get(cv2.CAP_PROP_FPS))\r\n    total_frames = vidcap.get(7)/EVERY_NTH\r\n    print(\"FPS = \", fps)\r\n    success,image = vidcap.read()\r\n    success = True\r\n    print(\"Extracting \", total_frames, \" Frames\" )\r\n    fileNames = []\r\n    newFolder = pathOut + \"\\\\%s\" % (videoName)\r\n    if not os.path.exists(newFolder):\r\n      print( \"Creating: \", newFolder)\r\n      os.makedirs(newFolder, exist_ok=True)\r\n\r\n    for frame in range(round(total_frames)):\r\n        # every Nth frame\r\n        vidcap.set(cv2.CAP_PROP_POS_FRAMES,(EVERY_NTH*frame))\r\n        success,image = vidcap.read()\r\n        if not success:\r\n           break\r\n        resized = image\r\n        if resize :\r\n            #print('Original Dimensions : ',image.shape)\r\n            scale_percent = 52 # percent of original size\r\n            width = int(image.shape[1] * scale_percent / 100)\r\n            height = int(image.shape[0] * scale_percent / 100)\r\n            dim = (width, height)\r\n            resized = cv2.resize(image, dim, interpolation = cv2.INTER_AREA)\r\n\r\n        print( \"Writing: frame # \", EVERY_NTH*frame, \" \" , pathOut + \"\\\\%s\\\\frame%04d.png\" % (videoName, count))     \r\n        fileNames.append(\"%s\\\\frame%04d.png\" % (videoName, count))     \r\n        cv2.imwrite( pathOut + \"\\\\%s\\\\frame%04d.png\" % (videoName, count), resized)     # save frame as PNG file\r\n \r\n        if maxNumFrames == count:\r\n           break;\r\n\r\n        count = count + 1\r\n\r\n    return fileNames\r\n\r\ndef extract_images_with_name(imageName, images_data, new_images_data):\r\n   add_next = False\r\n   new_images_data.append(images_data[0])\r\n   new_images_data.append(images_data[1])\r\n   new_images_data.append(images_data[2])\r\n   new_images_data.append(images_data[3])\r\n\r\n   img_cnt = 0\r\n   # create list with photo-only images\r\n   for line in images_data:\r\n       if line.split():\r\n           if imageName in line.split()[-1]:\r\n              new_images_data.append(line)\r\n              img_cnt = img_cnt+1\r\n              add_next = True\r\n           elif add_next:\r\n              new_images_data.append(line)\r\n              add_next = False\r\n           else:\r\n              add_next = False\r\n\r\n   return new_images_data, img_cnt\r\n\r\ndef remove_lines_from_file(fname, match, nextDel=False):\r\n    newdata = []\r\n    prevMatch = False\r\n    with open(fname, 'r') as imagesfile:\r\n        data = imagesfile.read().splitlines()\r\n    for line in data:\r\n        if match in line:\r\n           if nextDel:\r\n              prevMatch = True\r\n        elif (not match in line) and (not prevMatch):\r\n           newdata.append(line)\r\n           prevMatch = False\r\n        else:\r\n           prevMatch = False\r\n\r\n    # overwrite\r\n    with open(fname, 'w') as outfile:\r\n         for line in newdata:\r\n            outfile.write(line + \"\\n\")\r\n    \r\n\r\n\r\ndef remove_video_images(path, photoName=\"MG_\"):\r\n   # make backups\r\n   oldb = os.path.abspath(os.path.join(path, \"colmap\\\\dataset.db\" )) # will be modified\r\n   backuppath = dstpath = os.path.join(path, \"backups\\\\two_cams_all_images\\\\\")\r\n   if not os.path.exists(dstpath):\r\n      os.makedirs(dstpath, exist_ok=True)\r\n\r\n   dbfile = os.path.abspath(os.path.join(dstpath,\"dataset.db\"))\r\n   oldb = os.path.abspath(os.path.join(path, \"colmap\\\\dataset.db\" )) # will be modified\r\n   if not os.path.exists(dbfile):\r\n       shutil.copyfile(oldb, dbfile)\r\n\r\n\r\n   # Read images.txt & cameras.txt\r\n   backup_images = os.path.abspath(os.path.join(dstpath,\"images.txt\"))\r\n   images_fname = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\")) + \"\\\\images.txt\"\r\n   if not os.path.exists(backup_images):\r\n       shutil.copyfile(images_fname, backup_images)\r\n\r\n   backup_cameras = os.path.abspath(os.path.join(dstpath,\"cameras.txt\"))\r\n   cameras_fname = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\")) + \"\\\\cameras.txt\"\r\n   if not os.path.exists(backup_cameras):\r\n       shutil.copyfile(cameras_fname, backup_cameras)\r\n\r\n   # extract photos only for images.txt\r\n   with open(images_fname, 'r') as imagesfile:\r\n       images_data = imagesfile.read().splitlines()\r\n\r\n   videoDirList = []\r\n   imagespath = os.path.abspath(os.path.join(path, \"images\"))\r\n   for filename in os.listdir(imagespath):\r\n       if \"Video\" in filename:\r\n          videoDirList.append(filename)\r\n\r\n   new_images_data = []\r\n   new_images_data, img_cnt = extract_images_with_name(photoName, images_data, new_images_data)\r\n\r\n   # remaining images\r\n   print(\"Remaining images \", img_cnt)\r\n   \r\n   new_images_data[3] = ' '.join(images_data[3].split()[0:4]) + \" \" + str(img_cnt) +\" \" +  ' '.join(images_data[3].split()[5:-1] )\r\n\r\n   # overwrite current calibration\r\n   dstpath = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\"))\r\n   with open(dstpath+\"\\\\images.txt\", 'w') as outfile:\r\n     for line in new_images_data:\r\n       outfile.write(str(line) + \"\\n\")\r\n\r\n   outfile.close()\r\n   print(\"Writing fixed images \", dstpath + \"\\\\images.txt\")\r\n   ims = rwm.read_images_text(dstpath + \"\\\\images.txt\")\r\n   rwm.write_images_binary(ims, dstpath + \"\\\\images.bin\")\r\n\r\n   # fix the database\r\n\r\n   # open the database\r\n   db = sqlite3.connect(oldb)\r\n   cursor = db.cursor()\r\n   cursor.execute(\"SELECT name FROM sqlite_master WHERE type='table';\")\r\n   tables = cursor.fetchall()\r\n   # debug\r\n   delImagesQuery = \"\"\"DELETE from images WHERE name LIKE '%Video%'\"\"\"\r\n   cursor.execute(delImagesQuery)\r\n\r\n   db.commit()\r\n\r\n   # write out database \r\n   db.close()\r\n\r\n   # create GT path directories\r\n   dstpath = os.path.abspath(os.path.join(path, \"paths_GT\"))\r\n\r\n   if not os.path.exists(dstpath):\r\n      print(\"Creating \", dstpath)\r\n      os.makedirs(dstpath)\r\n\r\n\r\n   # backup original (distorted) video images & move undistorted images to special directories\r\n   # then create the colmap data for each\r\n\r\n   for currVideoName in videoDirList:\r\n      # move the original videos to backup\r\n      imagespath = os.path.abspath(os.path.join(path, \"images\"))\r\n      shutil.move(imagespath + \"\\\\\" + currVideoName, backuppath+ \"\\\\\" + currVideoName)\r\n\r\n      # create GT_path dir\r\n      dstpath = os.path.abspath(os.path.join(path, \"paths_GT\"))\r\n      curr_GTpath_dir = dstpath + \"\\\\\" + currVideoName\r\n      print(\"Creating \", curr_GTpath_dir)\r\n      os.makedirs(curr_GTpath_dir)\r\n      os.makedirs(curr_GTpath_dir+\"\\\\images\")\r\n\r\n      # move undistorted mages to GT_path dir\r\n      imagespath = path +  \"\\\\colmap\\\\stereo\\\\images\\\\\"+ currVideoName\r\n      shutil.move(imagespath, curr_GTpath_dir + \"\\\\images\")\r\n\r\n      video_images_list = []\r\n      video_images_list, img_cnt = extract_images_with_name(currVideoName, images_data, video_images_list)\r\n      video_images_list[2] = ' '.join(images_data[2].split()[0:4]) + \" \" + str(img_cnt) +\" \" +  ' '.join(images_data[2].split()[5:-1] )\r\n\r\n      # create colmap data\r\n      dstpath = os.path.abspath(os.path.join(curr_GTpath_dir, \"text\"))\r\n      os.makedirs(dstpath)\r\n\r\n      with open(dstpath+\"\\\\images.txt\", 'w') as outfile:\r\n         for line in video_images_list:\r\n           outfile.write(str(line) + \"\\n\")\r\n\r\n      cameras_fname = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\")) + \"\\\\cameras.txt\"\r\n      shutil.copyfile(cameras_fname, dstpath+\"\\\\cameras.txt\")\r\n\r\n      points_fname = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\")) + \"\\\\points3D.txt\"\r\n      shutil.copyfile(points_fname, dstpath+\"\\\\points3D.txt\")\r\n\r\n      fname = os.path.abspath(os.path.join(path, \"colmap\\\\stereo\\\\stereo\\\\fusion.cfg\")) \r\n      remove_lines_from_file(fname, \"Video\", False)\r\n      fname = os.path.abspath(os.path.join(path, \"colmap\\\\stereo\\\\stereo\\\\patch-match.cfg\")) \r\n      remove_lines_from_file(fname, \"Video\", True)\r\n      # all done\r\n\r\n\r\ndef fix_cameras(path, photoName=\"MG_\", sparseSubdir=\"\"):\r\n    if sparseSubdir == \"\":\r\n        sparse_subdir = os.path.join(\"colmap\", \"sparse\")\r\n    else:\r\n        sparse_subdir = sparseSubdir\r\n\r\n    # Read images.txt\r\n    images_fname = os.path.abspath(os.path.join(path, sparse_subdir)) + \"\\\\images.txt\"\r\n    with open(images_fname, 'r') as imagesfile:\r\n        images_data = imagesfile.read().splitlines()\r\n\r\n    # Read cameras.txt\r\n    cameras_fname = os.path.abspath(os.path.join(path, sparse_subdir)) + \"\\\\cameras.txt\"\r\n    with open(cameras_fname, 'r') as camerasfile:\r\n        cameras_data = camerasfile.read().splitlines()\r\n\r\n    # find the first camera index for a photo\r\n    photoCamIndex = -1\r\n    for line in images_data:\r\n        if line.split():\r\n            if (photoName in line.split()[-1])  and (int(line.split()[0]) > 2):\r\n              photoCamIndex = line.split()[0]\r\n              print(\"Found Photo Camera Index \", photoCamIndex, \" for camera \", line.split()[-1])\r\n              break\r\n\r\n    # find the first camera index for a video\r\n    videoCamIndex = -1\r\n    for line in images_data:\r\n        if line.split():\r\n            if (\"Video\" in line.split()[-1]) and ( int(line.split()[0]) > 2):\r\n              videoCamIndex = line.split()[0]\r\n              print(\"Found Video Camera Index \", videoCamIndex, \" for camera \", line.split()[-1])\r\n              break\r\n\r\n    # make backups of original files\r\n    dstpath = os.path.join(path, \"backups\\\\\")\r\n    if not os.path.exists(dstpath):\r\n       os.makedirs(dstpath, exist_ok=True)\r\n    # \r\n    dstpath = os.path.join(path, \"backups\\\\orig\\\\\")\r\n    if not os.path.exists(dstpath):\r\n       os.makedirs(dstpath, exist_ok=True)\r\n\r\n    # make backups of original files\r\n    if not os.path.exists(dstpath+\"\\\\images.txt\"):\r\n       shutil.copyfile(images_fname, dstpath +\"\\\\images.txt\")\r\n    if not os.path.exists(dstpath+\"\\\\cameras.txt\"):\r\n       shutil.copyfile(cameras_fname, dstpath +\"\\\\cameras.txt\")\r\n\r\n    dbfile = os.path.abspath(os.path.join(dstpath,\"dataset.db\"))\r\n    oldb = os.path.abspath(os.path.join(path, \"colmap\\\\dataset.db\" )) # will be modified\r\n    if os.path.exists(oldb): # only do DB processing if it exists\r\n        print(\"Old \", oldb, \" new \", dbfile, \" path \", path)\r\n        if not os.path.exists(dbfile):\r\n           shutil.copyfile(oldb, dbfile)\r\n\r\n        # open the database\r\n        db = sqlite3.connect(oldb)\r\n        cursor = db.cursor()\r\n        cursor.execute(\"SELECT name FROM sqlite_master WHERE type='table';\")\r\n        tables = cursor.fetchall()\r\n        # debug\r\n        #  table = pd.read_sql_query(\"SELECT * from %s\" % 'images', db)\r\n\r\n        # delete all cameras except videoCamEntry and photoCamEntry from database\r\n        delCamQuery = \"\"\"DELETE from cameras WHERE camera_id != '%s' and camera_id != '%s'\"\"\" % (videoCamIndex, photoCamIndex)\r\n        cursor.execute(delCamQuery )\r\n\r\n        # change photo cam id to 1 and video cam id to 2\r\n        setQuery = \"UPDATE cameras SET camera_id = '%s' WHERE  camera_id = '%s'\" % (\"1\", photoCamIndex)\r\n        cursor.execute(setQuery)\r\n\r\n        setQuery = \"UPDATE cameras SET camera_id = '%s' WHERE  camera_id = '%s'\" % (\"2\", videoCamIndex)\r\n        cursor.execute(setQuery)\r\n\r\n        # change photo cam id to 1 for all images of photos\r\n        setQuery = \"UPDATE images SET camera_id = '1' WHERE name LIKE '%MG_%'\"\r\n        cursor.execute(setQuery)\r\n\r\n        # change video cam id to 2 for all images\r\n        setQuery = \"UPDATE images SET camera_id = '2' WHERE name LIKE '%Video%'\"\r\n        cursor.execute(setQuery)\r\n\r\n        db.commit()\r\n\r\n        # write out database ; next step re-exports the result to TXT and BIN\r\n        db.close()\r\n      \r\n    # replace all camera indices in images.txt\r\n    new_images_data = images_data\r\n    cnt = 0\r\n    for line in new_images_data:\r\n        if line.split():\r\n            if photoName in line.split()[-1]:\r\n               new_images_data[cnt] = ' '.join(line.split()[0:-2]) + \" 1 \" + line.split()[-1] \r\n               print(\"replace \", line.split()[0],  \" by 1 in \", new_images_data[cnt] )\r\n            elif \"Video\" in line.split()[-1]:\r\n               new_images_data[cnt] = ' '.join(line.split()[0:-2]) + \" 2 \" + line.split()[-1] \r\n\r\n        cnt = cnt + 1\r\n\r\n    videoCamEntry = \"\"\r\n    for line in cameras_data:\r\n        if line.split():\r\n            if photoCamIndex == line.split()[0]:\r\n              photoCamEntry = \"1 \" + ' '.join(line.split()[1:])\r\n            if videoCamIndex == line.split()[0]:\r\n              videoCamEntry = \"2 \" + ' '.join(line.split()[1:])\r\n\r\n    # create two element camera file one for photos one for video\r\n    dstpath = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\"))\r\n    dst = dstpath + \"\\\\cameras_two.txt\"\r\n    with open(dst, 'w') as outfile:\r\n        outfile.write(photoCamEntry + \"\\n\")\r\n        if( videoCamEntry != \"\" ):\r\n            outfile.write(videoCamEntry + \"\\n\")\r\n    outfile.close()\r\n\r\n    # write out new file\r\n    dst = dstpath + \"\\\\images_two.txt\"\r\n    with open(dst, 'w') as outfile:\r\n         for line in new_images_data:\r\n            outfile.write(line + \"\\n\")\r\n    outfile.close()\r\n\r\n    # replace files\r\n    dstpath = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\"))\r\n    shutil.move(dstpath + \"\\\\images_two.txt\", images_fname)\r\n    shutil.move(dstpath + \"\\\\cameras_two.txt\", cameras_fname)\r\n\r\n    dstpath = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\\"))\r\n    print(\"Writing cam/im binary \", dstpath + \"\\\\cameras.bin\")\r\n    cams = rwm.read_cameras_text(dstpath + \"\\\\cameras.txt\")\r\n    ims = rwm.read_images_text(dstpath + \"\\\\images.txt\")\r\n    rwm.write_cameras_binary(cams, dstpath + \"\\\\cameras.bin\")\r\n    rwm.write_images_binary(ims, dstpath + \"\\\\images.bin\")\r\n\r\n    ptsbin = dstpath+\"\\\\0\\\\points3D.bin\"\r\n    print(\"Pts bin \", ptsbin, \" Exists \" ,os.path.exists(ptsbin))\r\n    if os.path.exists(ptsbin):\r\n       shutil.copyfile(ptsbin, dstpath+\"\\\\points3D.bin\")\r\n\r\n    # overwrite 0 as well\r\n    dstpath = os.path.abspath(os.path.join(path, \"colmap\\\\sparse\\\\0\\\\\"))\r\n    print(\"Writing cam/im binary \", dstpath + \"\\\\cameras.bin\")\r\n    rwm.write_cameras_binary(cams, dstpath + \"\\\\cameras.bin\")\r\n    rwm.write_images_binary(ims, dstpath + \"\\\\images.bin\")\r\n    rwm.write_cameras_text(cams, dstpath + \"\\\\cameras.txt\")\r\n    rwm.write_images_text(ims, dstpath + \"\\\\images.txt\")\r\n\r\n    return True\r\n\r\ndef extract_video_frames(pathIn, pathOut):\r\n    cnt = 0\r\n    fileNames = []\r\n    for filename in os.listdir(pathIn):\r\n      if (\"MP4\" in filename) or (\"mp4\" in filename):\r\n        with open(os.path.join(pathIn, filename), 'r') as f:\r\n          print(\"Extracting Video from File: \", f.name)\r\n#          fileNames  = fileNames + extract_images(f.name, pathOut, \"Video%d\" % cnt, maxNumFrames=3, resize=True)\r\n          fileNames  = fileNames + extract_images(f.name, pathOut, \"Video%d\" % cnt, resize=True)\r\n#          extract_images(f.name, pathOut, videoName=\"Video%d\" % cnt)\r\n          cnt = cnt+1\r\n\r\n    with open(os.path.dirname(pathIn) + \"\\\\videos\\\\Video_Frames.txt\", 'w') as f:\r\n       for item in fileNames:\r\n          f.write(\"%s\\n\" % item.replace(\"\\\\\", \"/\"))\r\n       f.close()\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/fullColmapProcess/textureOnly.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\n\"\"\" @package dataset_tools_preprocess\nThis script runs a pipeline to texture a mesh after colmap has been run\n\nParameters: -h help,\n            -path <path to your dataset folder>,\n            -sibrBinariesPath <binaries directory of SIBR>,\n\nUsage: python textureOnly.py -path <path to your dataset folder>\n                                   -sibrBinariesPath <binaries directory of SIBR>\n\n\"\"\"\n\nimport subprocess\nimport os, sys, getopt\nimport os, sys, shutil\nimport json\nimport argparse\nfrom utils.paths import getBinariesPath \nfrom utils.commands import  getProcess\nfrom utils.TaskPipeline import TaskPipeline\nfrom simplify_mesh import simplifyMesh\n\ndef main():\n    parser = argparse.ArgumentParser()\n\n    # common arguments\n    parser.add_argument(\"--path\", type=str, required=True, help=\"path to your dataset folder\")\n    parser.add_argument(\"--sibrBinariesPath\", type=str, default=getBinariesPath(), help=\"binaries directory of SIBR\")\n    parser.add_argument(\"--dry_run\", action='store_true', help=\"run without calling commands\")\n    \n\n    args = vars(parser.parse_args())\n\n\n    # Fixing path values\n    args[\"path\"] = os.path.abspath(args[\"path\"])\n    args[\"sibrBinariesPath\"] = os.path.abspath(args[\"sibrBinariesPath\"])\n\n    ret = simplifyMesh( args[\"path\"] + \"/colmap/stereo/unix-meshed-delaunay.ply\", args[\"path\"]  + \"/colmap/stereo/unix-meshed-delaunay-simplified.ply\")\n    print(\"RET \", ret)\n    if( ret.returncode != 0 ):\n        print(\"SIBR ERROR: meshlab simplify failed, exiting\")\n        sys.exit(1)\n\n    unwrap_app = getProcess(\"unwrapMesh\")\n    unwrap_args = [unwrap_app,\n             \"--path\", args[\"path\"] + \"/colmap/stereo/unix-meshed-delaunay-simplified.ply\",\n             \"--output\", args[\"path\"] + \"/capreal/mesh.ply\",\n        ]\n\n    print(\"Running unwrap mesh \", unwrap_args)\n    p_exit = subprocess.call(unwrap_args)\n    if p_exit != 0:\n        print(\"SIBR ERROR: unwrap failed, exiting\")\n        sys.exit(1)\n\n    texturemesh_app = getProcess(\"textureMesh\")\n    texturemesh_args = [texturemesh_app,\n             \"--path\", args[\"path\"], \n             \"--output\", args[\"path\"] + \"/capreal/texture.png\",\n             \"--size\", \"8192\",\n             \"--flood\"\n        ]\n\n    print(\"Texturing mesh \", texturemesh_args)\n    p_exit = subprocess.call(texturemesh_args)\n    if p_exit != 0:\n        print(\"SIBR ERROR: mesh texturing failed, exiting\")\n        sys.exit(1)\n\n\n    print(\"textureonly has finished successfully.\")\n    sys.exit(0)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/meshroomPythonScripts/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(meshroomPythonScripts)\n\nfile(GLOB SCRIPTS \"*.py\")  \n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FILES ${SCRIPTS})\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/meshroomPythonScripts/ULR.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n__version__ = \"3.0\"\n\nfrom meshroom.core import desc\nimport os\n\nclass ULR(desc.CommandLineNode):\n    commandLine = 'SIBR_ulrv2_app_rwdi {allParams}'\n\n    print(os.path.abspath('.'))\n    cpu = desc.Level.INTENSIVE\n    ram = desc.Level.INTENSIVE\n\n    inputs = [\n        desc.ListAttribute(\n            elementDesc = desc.File(\n                name = \"path\",\n                label = \"Cache folder\",\n                description = \"\",\n                value = desc.Node.internalFolder + \"../..\",\n                uid=[0],\n            ),\n            name='path',\n            label='Input Folder',\n            description='MeshroomCache folder containing the StructureFromMotion folder, PrepareDenseScene folder, and Texturing folder.'\n        ),\n        desc.ChoiceParam(\n            name='texture-width',\n            label='Texture Width',\n            description='''Output texture size''',\n            value=1024,\n            values=(256, 512, 1024, 2048, 4096),\n            exclusive=True,\n            uid=[0],\n        ),\n    ]\n\n    outputs = [\n    ]\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/nvmToSIBR/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(nvmToSIBR)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n    sibr_graphics\n    sibr_assets\n    sibr_raycaster\n    sibr_system\n    sibr_view\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/nvmToSIBR/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n#include <iostream>\n#include <core/system/CommandLineArgs.hpp>\n#include <core/scene/BasicIBRScene.hpp>\n#include <core/raycaster/CameraRaycaster.hpp>\n#include <core/assets/ImageListFile.hpp>\n#include <core/system/Utils.hpp>\n\n\n#define PROGRAM_NAME \"sibr_nvm_to_sibr\"\nusing namespace sibr;\n\nconst char* usage = \"\"\n\"Usage: \" PROGRAM_NAME \" -path \" \"\\n\"\n;\n\nstruct ColmapPreprocessArgs :\n\tvirtual BasicIBRAppArgs {\n};\n\nint main(const int argc, const char** argv)\n{\n\n\tCommandLineArgs::parseMainArgs(argc, argv);\n\tColmapPreprocessArgs myArgs;\n\n\tstd::string pathScene = myArgs.dataset_path;\n\n\tstd::vector<std::string> dirs = { \"cameras\", \"images\", \"meshes\"};\n\n\tstd::cout << \"Generating SIBR scene.\" << std::endl;\n\tBasicIBRScene scene(myArgs, true);\n\n\t// load the cams\n\tstd::vector<InputCamera::Ptr>\tcams = scene.cameras()->inputCameras();\n\tconst int maxCam = int(cams.size());\n\tconst int minCam = 0;\n\n\tfor (auto dir : dirs) {\n\t\tstd::cout << dir << std::endl;\n\t\tif (!directoryExists(pathScene + \"/\" + dir.c_str())) {\n\t\t\tmakeDirectory(pathScene + \"/\" + dir.c_str());\n\t\t}\n\t}\n\n\tstd::ofstream outputBundleCam;\n\tstd::ofstream outputListIm;\n\tstd::ofstream outputSceneMetadata;\n\n\toutputBundleCam.open(pathScene + \"/cameras/bundle.out\");\n\toutputListIm.open(pathScene + \"/images/list_images.txt\");\n\toutputSceneMetadata.open(pathScene + \"/scene_metadata.txt\");\n\toutputBundleCam << \"# Bundle file v0.3\" << std::endl;\n\toutputBundleCam << maxCam << \" \" << 0 << std::endl;\n\toutputSceneMetadata << \"Scene Metadata File\\n\" << std::endl;\n\toutputSceneMetadata << \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\" << std::endl;\n\n\tstd::sort(cams.begin(), cams.end(), [](const InputCamera::Ptr & a, const InputCamera::Ptr & b) {\n\t\treturn a->id() < b->id();\n\t});\n\n\tfor (int c = minCam; c < maxCam; c++) {\n\t\tInputCamera & camIm = *cams[c];\n\n\t\tstd::string extensionFile = boost::filesystem::extension(camIm.name());\n\t\tstd::ostringstream ssZeroPad;\n\t\tssZeroPad << std::setw(8) << std::setfill('0') << camIm.id();\n\t\tstd::string newFileName = ssZeroPad.str() + extensionFile;\n\n\t\tboost::filesystem::copy_file(pathScene + \"/nvm/\" + camIm.name(), pathScene + \"/images/\" + newFileName, boost::filesystem::copy_option::overwrite_if_exists);\n\t\toutputBundleCam << camIm.toBundleString();\n\t\toutputListIm << newFileName << \" \" << camIm.w() << \" \" << camIm.h() << std::endl;\n\t\toutputSceneMetadata << newFileName << \" \" << camIm.w() << \" \" << camIm.h() << \" \" << camIm.znear() << \" \" << camIm.zfar() << std::endl;\n\t}\n\n\n\toutputSceneMetadata << \"\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\" << std::endl;\n\n\tfor (int i = 0; i < scene.data()->activeImages().size(); i++) {\n\t\tif (!scene.data()->activeImages()[i])\n\t\t\toutputSceneMetadata << i << \" \";\n\t}\n\n\toutputSceneMetadata << \"\\n\\n\\n[other parameters]\" << std::endl;\n\n\toutputBundleCam.close();\n\toutputListIm.close();\n\toutputSceneMetadata.close();\n\n\tconst std::string meshPath = pathScene + \"/capreal/mesh.ply\";\n\tsibr::copyFile(meshPath, pathScene + \"/meshes/recon.ply\", true);\n\n\treturn EXIT_SUCCESS;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/prepareColmap4Sibr/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(prepareColmap4Sibr)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n    sibr_graphics\n    sibr_assets\n    sibr_raycaster\n    sibr_system\n    sibr_view\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/prepareColmap4Sibr/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n#include <iostream>\n#include <core/system/CommandLineArgs.hpp>\n#include <core/scene/BasicIBRScene.hpp>\n#include <core/raycaster/CameraRaycaster.hpp>\n#include <core/assets/ImageListFile.hpp>\n#include <core/system/Utils.hpp>\n\n\n#define PROGRAM_NAME \"prepareColmap4Sibr\"\nusing namespace sibr;\n\nconst char* usage = \"\"\n\"Usage: \" PROGRAM_NAME \" -path \" \"\\n\"\n;\n\nstruct ColmapPreprocessArgs : public BasicIBRAppArgs {\n\tArg<bool> fix_metadata = { \"fix_metadata\", \"Fix scene_metadata after crop and distort \" };\n};\n\nint main(const int argc, const char** argv)\n{\n\n\tCommandLineArgs::parseMainArgs(argc, argv);\n\tColmapPreprocessArgs myArgs;\n\n\tstd::string pathScene = myArgs.dataset_path;\n\n\tstd::vector<std::string> dirs = { \"sfm_mvs_cm\" , \"sibr_cm\" };\n\n\tstd::ofstream outputSceneMetadata;\n\n\tif( myArgs.fix_metadata ) {\n\t\tstd::string cm_path = myArgs.dataset_path.get() + \"/sibr_cm\";\n\t\tmyArgs.dataset_path = cm_path;\n\n\t\tBasicIBRScene cm_scene(myArgs, true, true);\n\n\t\tstd::vector<InputCamera::Ptr>\tcams = cm_scene.cameras()->inputCameras();\n\n\t\tstd::string tmpFileName = cm_path +  \"/scene_metadata_tmp.txt\"; \n\t\t// done in a second pass, when everything has been created.\n\t\toutputSceneMetadata.open(tmpFileName);\n\n\t\t// overwrite previous version since image sizes have changed when running sibr preprocessing\n\t\toutputSceneMetadata << \"Scene Metadata File\\n\" << std::endl;\n\n\t\tif (outputSceneMetadata.bad())\n\t\t\tSIBR_ERR << \"Problem writing new metadata file\" << std::endl;\n\n\t\tSIBR_LOG << \"Writing new scene_metadata.txt file \" << cm_path + \"/scene_metadata.txt\" << std::endl;\n\n\t\toutputSceneMetadata << \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\" << std::endl;\n\n\t\tfor (int c = 0; c < cams.size(); c++) {\n\t\t\tInputCamera & camIm = *cams[c];\n\n\t\t\tstd::string extensionFile = boost::filesystem::extension(camIm.name());\n\t\t\tstd::ostringstream ssZeroPad;\n\t\t\tssZeroPad << std::setw(8) << std::setfill('0') << camIm.id();\n\t\t\tstd::string newFileName = ssZeroPad.str() + extensionFile;\n\t\t\t// load image\n\t\t\tstd::string imgpath = cm_path + \"/images/\" + camIm.name();\n\t\t\tsibr::ImageRGB im;\n\t\t\tif (!im.load(imgpath, false))\n\t\t\t\tSIBR_ERR << \"Cant open image \" << imgpath << std::endl;\n\n\t\t\tstd::cerr << newFileName << \" \" << im.w() << \" \" << im.h() << \" \" << camIm.znear() << \" \" << camIm.zfar() << std::endl;\n\t\t\toutputSceneMetadata << newFileName << \" \" << im.w() << \" \" << im.h() << \" \" << camIm.znear() << \" \" << camIm.zfar() << std::endl;\n\t\t}\n\n\t\toutputSceneMetadata << \"\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\" << std::endl;\n\n\t\tfor (int i = 0; i < cm_scene.data()->activeImages().size(); i++) {\n\t\t\tif (!cm_scene.data()->activeImages()[i])\n\t\t\t\toutputSceneMetadata << i << \" \";\n\t\t}\n\t\toutputSceneMetadata << \"\\n\\n\\n[other parameters]\" << std::endl;\n\t\toutputSceneMetadata.close();\n\n\t\tstd::string SMName = cm_path +  \"/scene_metadata.txt\"; \n\n\t\tSIBR_LOG << \"Copying \" << tmpFileName << \" to \" << SMName << std::endl;\n\t\tboost::filesystem::copy_file( tmpFileName, SMName, boost::filesystem::copy_option::overwrite_if_exists);\n\t\tboost::filesystem::remove(tmpFileName);\n\n\t\texit(0);\n\t}\n\tstd::cout << \"Creating bundle file for SIBR scene.\" << std::endl;\n\tBasicIBRScene scene(myArgs, true, true);\n\n\t// load the cams\n\tstd::vector<InputCamera::Ptr>\tcams = scene.cameras()->inputCameras();\n\tconst int maxCam = int(cams.size());\n\tconst int minCam = 0;\n\n\tfor (auto dir : dirs) {\n\t\tstd::cout << dir << std::endl;\n\t\tif (!directoryExists(pathScene + \"/\" + dir.c_str())) {\n\t\t\tmakeDirectory(pathScene + \"/\" + dir.c_str());\n\t\t}\n\t}\n\n\tstd::ofstream outputBundleCam;\n\tstd::ofstream outputListIm;\n\n\toutputBundleCam.open(pathScene + \"/sfm_mvs_cm/bundle.out\");\n\toutputListIm.open(pathScene + \"/sfm_mvs_cm/list_images.txt\");\n\toutputBundleCam << \"# Bundle file v0.3\" << std::endl;\n\toutputBundleCam << maxCam << \" \" << 0 << std::endl;\n\n\toutputSceneMetadata.open(pathScene +  \"/sibr_cm/scene_metadata.txt\");\n\toutputSceneMetadata << \"Scene Metadata File\\n\" << std::endl;\n\toutputSceneMetadata << \"[list_images]\\n<filename> <image_width> <image_height> <near_clipping_plane> <far_clipping_plane>\" << std::endl;\n\n\tstd::sort(cams.begin(), cams.end(), [](const InputCamera::Ptr & a, const InputCamera::Ptr & b) {\n\t\treturn a->id() < b->id();\n\t});\n\n\tfor (int c = minCam; c < maxCam; c++) {\n\t\tInputCamera & camIm = *cams[c];\n\n\t\tstd::string extensionFile = boost::filesystem::extension(camIm.name());\n\t\tstd::ostringstream ssZeroPad;\n\t\tssZeroPad << std::setw(8) << std::setfill('0') << camIm.id();\n\t\tstd::string newFileName = ssZeroPad.str() + extensionFile;\n\n\t\tboost::filesystem::copy_file(pathScene + \"/colmap/stereo/images/\" + camIm.name(), pathScene + \"/sfm_mvs_cm/\" + newFileName, boost::filesystem::copy_option::overwrite_if_exists);\n\t\t// keep focal\n\t\toutputBundleCam << camIm.toBundleString(false, true);\n\t\toutputListIm << newFileName << \" \" << camIm.w() << \" \" << camIm.h() << std::endl;\n\t\toutputSceneMetadata << newFileName << \" \" << camIm.w() << \" \" << camIm.h() << \" \" << camIm.znear() << \" \" << camIm.zfar() << std::endl;\n\t}\n\n\toutputSceneMetadata << \"\\n// Always specify active/exclude images after list images\\n\\n[exclude_images]\\n<image1_idx> <image2_idx> ... <image3_idx>\" << std::endl;\n\n\tfor (int i = 0; i < scene.data()->activeImages().size(); i++) {\n\t\tif (!scene.data()->activeImages()[i])\n\t\t\toutputSceneMetadata << i << \" \";\n\t}\n\toutputSceneMetadata << \"\\n\\n\\n[other parameters]\" << std::endl;\n\n\n\toutputBundleCam.close();\n\toutputListIm.close();\n\toutputSceneMetadata.close();\n\n\tstd::vector<std::vector<std::string>> meshPathList = {\n\t\t{ \"/capreal/mesh.ply\", \t\t\t\"/sfm_mvs_cm/recon.ply\"},\n\t\t{ \"/capreal/mesh.obj\", \t\t\t\"/sfm_mvs_cm/recon.ply\"},\n\t\t{ \"/capreal/mesh.mtl\", \t\t\t\"/sfm_mvs_cm/\"},\n\t\t{ \"/capreal/texture.png\", \t\t\t\"/sfm_mvs_cm/\"},\n\t\t{ \"/capreal/mesh_u1_v1.png\", \t\"/sfm_mvs_cm/\"},\n\t\t{ \"/colmap/stereo/meshed-delaunay.ply\", \t\t\t\"/sfm_mvs_cm/recon.ply\"},\n\t};\n\n\tbool success = false;\n\tfor(const std::vector<std::string> & meshPaths : meshPathList) {\n\t\tif(boost::filesystem::exists(pathScene + meshPaths[0])) {\n\t\t\tsibr::copyFile(pathScene + meshPaths[0], pathScene + meshPaths[1], true);\n\t\t\tsuccess = true;\n\t\t}\n\t}\n\tif (!success) {\n\t\tstd::cerr << \"Couldnt file proxy geometry in any of the following places \";\n\t\tfor (const std::vector<std::string>& meshPaths : meshPathList)\n\t\t\tstd::cerr << pathScene + meshPaths[0] << std::endl;\n\t\tSIBR_ERR << \"No proxy geometry, exiting\" << std::endl;\n\n\t}\n\n\treturn EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(realityCaptureTools)\n\nfile(GLOB SCRIPTS \"*.py\" \"*.json\" \".bat\" \".xml\") \n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FILES ${SCRIPTS})\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/SetVariables.bat",
    "content": "::CapturingReality\r\n:: switch off console output\r\n::@echo off\r\n\r\n\r\n:: root path to work folders where the dataset is stored \r\nset RootFolder=E:\\datasets\\Yorgos\\Reflections\\KitchenRCTest\\\r\nset Video=\"%RootFolder%\\videos\\MVI_3030.MP4\"\r\nset FPS=0.2\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/exportModel.xml",
    "content": "<Configuration>\r\n  <entry key=\"ModelExportFormatVersion\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportCamerasAsModelPart\" value=\"false\"/>\r\n  <entry key=\"MvsMeshExportTexturingAllowed\" value=\"-1\"/>\r\n  <entry key=\"MvsExportIsModelCoordinates\" value=\"0\"/>\r\n  <entry key=\"MvsExportIsGeoreferenced\" value=\"0x0\"/>\r\n  <entry key=\"MvsExportScaleZ\" value=\"1.0\"/>\r\n  <entry key=\"MvsMeshExportTileType\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportNormals\" value=\"true\"/>\r\n  <entry key=\"MvsExportScaleY\" value=\"1.0\"/>\r\n  <entry key=\"MvsMeshExportTexAlpha\" value=\"false\"/>\r\n  <entry key=\"MvsExportScaleX\" value=\"1.0\"/>\r\n  <entry key=\"MvsMeshExportTexImgFormat_Color8_0\" value=\"png\"/>\r\n  <entry key=\"MvsExportcoordinatesystemtype\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportTexPixFormat_Color8_0\" value=\"32bppBGRA\"/>\r\n  <entry key=\"MvsMeshExportNormalsAllowed\" value=\"-1\"/>\r\n  <entry key=\"MvsMeshExportNumberFormatAllowed\" value=\"-1\"/>\r\n  <entry key=\"MvsExportMoveZ\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportMoveX\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportMoveY\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportNormalRange\" value=\"ZeroToOne\"/>\r\n  <entry key=\"MvsMeshExportInfoFile\" value=\"true\"/>\r\n  <entry key=\"MvsMeshExportByParts\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportClassificationAllowed\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportNumberFormat\" value=\"5\"/>\r\n  <entry key=\"MvsExportRotationY\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportNormalFlipZ\" value=\"false\"/>\r\n  <entry key=\"MvsExportRotationX\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportNormalFlipY\" value=\"false\"/>\r\n  <entry key=\"MvsMeshExportCamerasAllowed\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportColors\" value=\"true\"/>\r\n  <entry key=\"MvsExportNormalSpace\" value=\"Mikktspace\"/>\r\n  <entry key=\"MvsExportNormalFlipX\" value=\"false\"/>\r\n  <entry key=\"MvsExportTransformationPreset\" value=\"[[Default]]\"/>\r\n  <entry key=\"MvsExportRotationZ\" value=\"0.0\"/>\r\n  <entry key=\"MvsMeshExportFileTypeSelectionDisplay\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportTexOneFile\" value=\"0\"/>\r\n  <entry key=\"MvsMeshExportTexturing\" value=\"-1\"/>\r\n  <entry key=\"MvsMeshExportEmbeddTxrsAllowed\" value=\"0\"/>\r\n</Configuration>\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/fixup.bat",
    "content": "::CapturingReality\n\n:: switch off console output\n::@echo off\n@echo on\nset RootFolder=%1\n\n:: path to RealityCapture application\nset RealityCaptureExe=\"C:\\Program Files\\Capturing Reality\\RealityCapture\\RealityCapture.exe\"\n\n:: variable storing path to images for texturing model\nset Project=\"%RootFolder%\\rcProj\\RCproject.rcproj\"\n\n:: run RealityCapture\n:: test and fix video import when RC working again\n\n%RealityCaptureExe% -load %Project% ^\n        -selectAllImages ^\n        -enableAlignment false ^\n        -selectImage *test_* ^\n        -enableAlignment true ^\n       \n        \n\n\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/processRCSteps.json",
    "content": "{\n    \"steps\" : [\n        {\n            \"if\": \"${car_data}\",\n            \"name\": \"car_data_process\",\n            \"function\": \"rc_tools.car_data_process\",\n            \"function_args\": {\n                \"path\": \"${path}\"\n            }\n        },\n        {\n            \"name\": \"preprocess_for_rc\",\n            \"function\": \"rc_tools.preprocess_for_rc\",\n            \"function_args\": {\n                \"path\": \"${path}\",\n                \"video_name\": \"${video_name}\",\n                \"do_validation_split\": \"${do_validation_split}\",\n                \"valid_skip\": \"${valid_skip}\"\n            }\n        },\n        {\n            \"if\" : \"${calib_only}\", \n            \"name\": \"calib_only\",\n            \"app\": \"RC\",\n            \"optional_arg1\": [ \n                \"${do_train}\", \n                \"-addFolder\", \"${path}/input/train/\" \n            ],\n            \"optional_arg2\": [ \"${do_validation}\", \n                \"-addFolder\", \"${path}/input/validation/\"\n            ],\n            \"optional_arg3\": [ \"${do_video}\", \n                \"-importVideo\", \"${video_filename}\", \"${path}/input/test_video_frames/\", \"${one_over_fps}\" \n            ],\n            \"optional_arg4\": [ \"${do_test}\", \n                \"-addFolder\", \"${path}/input/test/\"\n            ],\n            \"command_args\": [\n                \"-align\" ,\n                \"-selectMaximalComponent\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*validation_*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/validation_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*${path_prefix}*\",\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/test_path_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*train_*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/train_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\" ,\n                \"-save\", \"${path}/rcProj/RCproject.rcproj\" ,\n                \"-quit\"\n            ]\n        },\n        {\n            \"if\": \"${video_only}\",\n            \"name\": \"fix_video_only\",\n            \"function\": \"rc_tools.fix_video_only\",\n            \"function_args\": {\n                \"path\": \"${path}\"\n             }\n        },\n        {\n            \"if\" : \"${do_mvs}\", \n            \"name\": \"run_rc\",\n            \"app\": \"RC\",\n            \"optional_arg1\": [ \n                \"${do_train}\", \n                \"-addFolder\", \"${path}/input/train/\" \n            ],\n            \"optional_arg2\": [ \"${do_validation}\", \n                \"-addFolder\", \"${path}/input/validation/\"\n            ],\n            \"optional_arg3\": [ \"${do_video}\", \n                \"-importVideo\", \"${video_filename}\", \"${path}/input/test_video_frames/\", \"${one_over_fps}\" \n            ],\n            \"optional_arg4\": [ \"${do_test}\", \n                \"-addFolder\", \"${path}/input/test/\"\n            ],\n            \"command_args\": [\n                \"-align\" ,\n                \"-selectMaximalComponent\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*validation_*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/validation_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*${path_prefix}*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/test_path_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*train_*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-exportRegistration\", \"${path}/rcScene/train_cameras/bundle.out\", \"${config_folder}/registrationConfig.xml\",\n                \"-setReconstructionRegionAuto\" ,\n                \"-scaleReconstructionRegion\", \"1.4\", \"1.4\", \"2.5\", \"center\", \"factor\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*${path_prefix}*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-save\", \"${path}/rcProj/RCproject.rcproj\" \n            ],\n            \"optional_final_arg\": [ \"${auto_recon_area}\",\n                \"-quit\"\n            ]\n        },\n        {\n            \"if\" : \"${do_mvs}\", \n            \"name\": \"run_rc_mvs\",\n            \"app\": \"RC\",\n            \"command_args\": [ \n                \"-load\", \"${path}/rcProj/RCproject.rcproj\" ,\n                \"-selectMaximalComponent\" ,\n                \"-selectAllImages\" ,\n                \"-enableAlignment\", \"false\" ,\n                \"-selectImage\", \"*train_*\" ,\n                \"-enableAlignment\", \"true\" ,\n                \"-calculateNormalModel\" ,\n                \"-calculateTexture\" ,\n                \"-selectMarginalTriangles\" ,\n                \"-removeSelectedTriangles\" ,\n                \"-save\", \"${path}/rcProj/RCproject.rcproj\" ,\n                \"-renameSelectedModel\", \"${model_name}\" ,\n                \"-exportModel\", \"${model_name}\", \"${mesh_obj_filename}\", \"${config_folder}/exportModel.xml\" ,\n                \"-deselectModelTriangles\" ,\n                \"-exportModel\", \"${model_name}\", \"${mesh_ply_filename}\", \"${config_folder}/exportModel.xml\" ,\n                \"-quit\"\n            ]\n        },\n        {\n            \"name\": \"densify_mesh\",\n            \"function\": \"rc_tools.densify_mesh\",\n            \"function_args\": {\n                \"mesh_path\": \"${path}/rcScene/meshes/mesh.obj\"\n            }\n        },\n        {\n            \"name\": \"dense_mesh\",\n            \"app\": \"RC\",\n            \"command_args\": [\n                \"-load\", \"${path}/rcProj/RCProject.rcproj\",\n                \"-selectMaximalComponent\",\n                \"-importModel\" , \"${path}/rcScene/meshes/dense_mesh.obj\",\n                \"-renameSelectedModel\",  \"RCTest\",\n                \"-exportModel\",  \"RCTest\",  \"${path}/rcScene/meshes/dense_point_cloud.xyz\", \"${config_folder}/exportModel.xml\" ,\n                \"-quit\"\n            ]\n        },\n        {\n            \"name\": \"rc_to_colmap_validation_cameras\",\n            \"function\": \"rc_tools.rc_to_colmap\",\n            \"function_args\": {\n                \"rc_path\": \"${path}/rcScene/validation_cameras\",\n                \"out_path\": \"${path}/colmap_1000/validation_colmap\",\n                \"create_colmap\": \"0\",\n                \"target_width\": \"${target_width}\"\n            }\n        },\n        {\n            \"name\": \"rc_to_colmap_path_cameras\",\n            \"function\": \"rc_tools.rc_to_colmap\",\n            \"function_args\": {\n                \"rc_path\": \"${path}/rcScene/test_path_cameras\",\n                \"out_path\": \"${path}/colmap_1000/test_path_colmap\",\n                \"create_colmap\": \"0\",\n                \"target_width\": \"${target_width}\"\n            }\n        },\n        {\n            \"name\": \"crop_cameras\",\n            \"function\": \"rc_tools.crop_images\",\n            \"function_args\": {\n                \"path_data\": \"${path}/rcScene/train_cameras/\",\n                \"path_dest\": \"${path}/rcScene/cropped_train_cameras/\"\n            }\n        },\n        {\n            \"name\": \"rc_to_colmap_1000_cropped_cameras\",\n            \"function\": \"rc_tools.rc_to_colmap\",\n            \"function_args\": {\n                \"rc_path\": \"${path}/rcScene/cropped_train_cameras\",\n                \"out_path\": \"${path}/colmap_1000/colmap\",\n                \"create_colmap\": \"1\",\n                \"target_width\": \"${target_width}\"\n            }\n        },\n        {\n            \"name\": \"rc_to_colmap_cropped_cameras\",\n            \"function\": \"rc_tools.rc_to_colmap\",\n            \"function_args\": {\n                \"rc_path\": \"${path}/rcScene/cropped_train_cameras\",\n                \"out_path\": \"${path}/sibr/colmap\",\n                \"create_colmap\": \"1\"\n            }\n        },\n        {\n            \"name\": \"create_nerf\",\n            \"function\": \"colmap2nerf.createNerf\",\n            \"function_args\": {\n                \"path\": \"${path}\"\n            }\n        },\n        {\n            \"if\": \"${hires_nerf}\",\n            \"name\": \"create_hi_nerf\",\n            \"function\": \"colmap2nerf.createNerf\",\n            \"function_args\": {\n                \"path\": \"${path}\",\n                \"hires\": \"True\"\n            }\n        },\n        {\n            \"name\": \"convert_sibr_mesh\",\n            \"function\": \"rc_tools.convert_sibr_mesh\",\n            \"function_args\": {\n                \"path\": \"${path}\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/rc_tools.py",
    "content": "#\r\n# RealityCapture tools\r\n#\r\nimport os\r\nimport os.path\r\nimport sys\r\nimport argparse\r\nimport shutil\r\nimport sqlite3\r\nimport read_write_model as rwm\r\nimport pymeshlab\r\n\r\n\r\nimport cv2\r\nprint(cv2.__version__)\r\n\r\n\r\n\"\"\" @package dataset_tools_preprocess\r\nLibrary for RealityCapture treatment\r\n\r\n\r\n\"\"\"\r\n\r\nimport bundle\r\nimport os, sys, shutil\r\nimport json\r\nimport argparse\r\nimport scipy\r\nimport numpy as np\r\nfrom scipy.spatial.transform import Rotation as R\r\nfrom utils.paths import getBinariesPath, getColmapPath, getMeshlabPath\r\nfrom utils.commands import  getProcess, getColmap, getRCprocess, runCommand\r\n\r\ndef preprocess_for_rc(path, video_name='default', do_validation_split=True, valid_skip='10'):\r\n    # create train/validation split (every 10 images by default now)\r\n    print(\"VALID SKIP \", valid_skip)\r\n    int_valid_skip = int(valid_skip)\r\n\r\n    # Should exist\r\n    rawpath = os.path.join(path, \"raw\")\r\n    if not os.path.exists(rawpath):\r\n        os.makedirs(os.path.join(path, \"raw\"))\r\n\r\n    imagespath = os.path.abspath(os.path.join(rawpath, \"images\"))\r\n    testpath = os.path.abspath(os.path.join(rawpath, \"test\"))\r\n    videopath = os.path.abspath(os.path.join(rawpath, \"videos\"))\r\n    do_test = False\r\n    inputpath = os.path.join(path, \"input\")\r\n\r\n    # If not, move around\r\n    if not os.path.exists(imagespath):\r\n        if os.path.exists(os.path.join(path, \"images\")):\r\n            shutil.move(os.path.join(path, \"images\"), imagespath)\r\n        elif not os.path.exists(os.path.join(path, \"videos\")) and not os.path.exists(videopath):\r\n            print(\"ERROR: No images nor video, exiting. Images should be in $path/raw/images\")\r\n            exit(-1)\r\n        # videos are optional\r\n        if os.path.exists(os.path.join(path, \"videos\")):\r\n            shutil.move(os.path.join(path, \"videos\"), videopath)\r\n        # test images (stills for path)\r\n        test_orig = os.path.join(path, \"test\")\r\n#        print(\"TEST \", test_orig, \" \" , os.path.exists(test_orig) , \" > \", testpath)\r\n        if os.path.exists(test_orig):\r\n            do_test = True\r\n            shutil.move(test_orig, testpath)\r\n    else:\r\n        print(\"Found images {}\".format(imagespath))\r\n        if os.path.exists(videopath):\r\n            print(\"Found video {}\".format(videopath))\r\n        if os.path.exists(testpath):\r\n            print(\"Found test {}\".format(testpath))\r\n            do_test = True\r\n\r\n    cnt = 0\r\n    validation_path = os.path.abspath(os.path.join(inputpath, \"validation\"))\r\n    train_path = os.path.abspath(os.path.join(inputpath, \"train\"))\r\n    if not os.path.exists(train_path):\r\n        os.makedirs(train_path)\r\n    if not os.path.exists(validation_path):\r\n        os.makedirs(validation_path)\r\n    input_test_path = os.path.abspath(os.path.join(inputpath, \"test\"))\r\n    if not os.path.exists(input_test_path):\r\n        os.makedirs(input_test_path)\r\n\r\n    # rcScene -- will contain full bundle files from RC\r\n    rcscenepath = os.path.join(path, \"rcScene\")\r\n    if not os.path.exists(rcscenepath):\r\n        os.makedirs(rcscenepath)\r\n\r\n    # rcProj -- RC project save\r\n    rcprojpath = os.path.join(path, \"rcProj\")\r\n    if not os.path.exists(rcprojpath):\r\n        os.makedirs(rcprojpath)\r\n\r\n\r\n    # sibr -- will contain full size colmap\r\n    sibrpath = os.path.join(path, \"sibr\")\r\n    if not os.path.exists(sibrpath):\r\n        os.makedirs(sibrpath)\r\n        caprealpath = os.path.join(sibrpath, \"capreal\")\r\n        os.makedirs(caprealpath)\r\n\r\n    # BUG: do_validation_split is a string\r\n    if do_validation_split != 'False':\r\n        print(\"Train/Validation\", train_path , \" : \", validation_path)\r\n        for filename in os.listdir(imagespath):\r\n            ext = os.path.splitext(filename)[1]\r\n            if ext == \".JPG\" or ext == \".jpg\" or ext == \".PNG\" or ext == \".png\" :\r\n                image = os.path.join(imagespath, filename) \r\n#            print(\"IM \", image)\r\n                if not(cnt % int_valid_skip ):\r\n                    filename = \"validation_\"+filename\r\n                    fname = os.path.join(validation_path, filename)\r\n#                print(\"Copying \", image, \" to \", fname , \" in validation\")\r\n                    shutil.copyfile(image, fname)\r\n                else:\r\n                    filename = \"train_\"+filename\r\n                    fname = os.path.join(train_path, filename)\r\n#                print(\"Copying \", image, \" to \", fname , \" in train\")\r\n                    shutil.copyfile(image, fname)\r\n\r\n            cnt = cnt + 1\r\n    else:\r\n        print(\"Not doing validation\")\r\n        for filename in os.listdir(imagespath):\r\n            ext = os.path.splitext(filename)[1]\r\n            if ext == \".JPG\" or ext == \".jpg\" or ext == \".PNG\" or ext == \".png\" :\r\n                image = os.path.join(imagespath, filename) \r\n#            print(\"IM \", image)\r\n          \r\n                filename = \"train_\"+filename\r\n                fname = os.path.join(train_path, filename)\r\n#                print(\"Copying \", image, \" to \", fname , \" in train\")\r\n                shutil.copyfile(image, fname)\r\n\r\n            cnt = cnt + 1\r\n\r\n    if do_test:\r\n        for filename in os.listdir(testpath):\r\n            ext = os.path.splitext(filename)[1]\r\n            if ext == \".JPG\" or ext == \".jpg\" or ext == \".PNG\" or ext == \".jpg\" :\r\n                image = os.path.join(testpath, filename) \r\n                filename = \"test_\"+filename\r\n                fname = os.path.join(input_test_path, filename)\r\n#                print(\"Copying \", image, \" to \", fname , \" in test\")\r\n                shutil.copyfile(image, fname)\r\n    else:\r\n        print (\"****************** NOT DOING TEST !!!\")\r\n\r\n\r\n    # extract video name -- if not given, take first\r\n    if video_name == 'default':\r\n        if os.path.exists(videopath):\r\n            for filename in os.listdir(videopath):\r\n#            print(\"Checking \", filename)\r\n                if (\"MP4\" in filename) or (\"mp4\" in filename):\r\n                    video_name = filename\r\n    video_filename = os.path.join(path, os.path.join(\"raw\", os.path.join(\"videos\", video_name)))\r\n    print(\"Full video path:\", video_filename)\r\n\r\n    return \"video_filename\", video_filename\r\n\r\ndef convert_sibr_mesh(path):\r\n    ms = pymeshlab.MeshSet()\r\n    mesh_path = os.path.join(os.path.join(os.path.join(path, \"rcScene\"), \"meshes\"), \"mesh.obj\")\r\n    print(\"Loading mesh (slow...)\", mesh_path)\r\n    ms.load_new_mesh(mesh_path)\r\n    meshply_path = out_mesh_path = os.path.join(os.path.join(os.path.join(path, \"sibr\"), \"capreal\"), \"mesh.ply\")\r\n    print(\"Saving mesh (slow...)\", out_mesh_path)\r\n    ms.save_current_mesh(out_mesh_path, save_wedge_texcoord=False, binary=False)\r\n    print(\"Done saving mesh (slow...)\", out_mesh_path)\r\n    texture_path = os.path.join(os.path.join(os.path.join(path, \"sibr\"), \"capreal\"), \"mesh_u1_v1.png\")\r\n    out_texture_path = os.path.join(os.path.join(os.path.join(path, \"sibr\"), \"capreal\"), \"texture.png\")\r\n    print(\"Copying (to allow meshlab to work) {} to {}\".format(texture_path, out_texture_path))\r\n    shutil.copyfile(texture_path, out_texture_path)\r\n    out_mesh_path = os.path.join(os.path.join(os.path.join(os.path.join(path, \"sibr\"), \"colmap\"), \"stereo\"), \"meshed-delaunay.ply\")\r\n    print(\"Copying {} to {}\".format(meshply_path, out_mesh_path))\r\n    shutil.copyfile(meshply_path, out_mesh_path)\r\n\r\n\r\ndef densify_mesh(mesh_path):\r\n    ms = pymeshlab.MeshSet()\r\n    subdiv_threshold = pymeshlab.Percentage(0.09)\r\n    ms.load_new_mesh(mesh_path)\r\n    print(\"Loaded mesh \", mesh_path, \" Subdividing (this can take some time)...\")\r\n    ms.subdivision_surfaces_butterfly_subdivision(threshold=subdiv_threshold)\r\n    path_split = os.path.split(mesh_path)\r\n    dense_mesh_fname = \"dense_\" + path_split[1]\r\n    fname, fname_ext = os.path.splitext(dense_mesh_fname)\r\n    dense_mesh_fname = fname + \".obj\"\r\n    dense_mesh_path = os.path.join(path_split[0], dense_mesh_fname)\r\n    print(\"Writing dense mesh \", dense_mesh_path)\r\n    ms.save_current_mesh(dense_mesh_path)\r\n\r\ndef rc_to_colmap(rc_path, out_path, create_colmap=False, target_width=-1):\r\n\r\n    input_bundle = bundle.Bundle(os.path.join(rc_path , \"bundle.out\"))\r\n    input_bundle.generate_list_of_images_file (os.path.join(rc_path , \"list_images.txt\"))\r\n\r\n    dst_image_path = os.path.join(out_path, \"images\")\r\n\r\n    # create entire colmap structure\r\n    if create_colmap:\r\n        dir_name = os.path.join(out_path, \"stereo\")\r\n        if not os.path.exists(dir_name):\r\n            os.makedirs(dir_name)\r\n\r\n        stereo_stereo_dir = os.path.join(dir_name, \"stereo\")\r\n        if not os.path.exists(stereo_stereo_dir):\r\n            os.makedirs(stereo_stereo_dir)\r\n\r\n        dst_image_path = os.path.join(dir_name, \"images\")\r\n\r\n        sparse_stereo_dir = dir_name = os.path.join(dir_name, \"sparse\")\r\n        if not os.path.exists(dir_name):\r\n            os.makedirs(dir_name)\r\n\r\n\r\n    else:\r\n        sparse_stereo_dir = out_path\r\n\r\n    if not os.path.exists(dst_image_path):\r\n        os.makedirs(dst_image_path)\r\n\r\n    # create cameras.txt\r\n    fname = os.path.join(sparse_stereo_dir, \"cameras.txt\")\r\n    print(\"Creating \", fname)\r\n    numcams = len(input_bundle.list_of_input_images)\r\n\r\n    camera_id = 1\r\n    scale = 1.\r\n    with open(fname, 'w') as outfile:\r\n        outfile.write(\"# Camera list with one line of data per camera:\\n\")\r\n        outfile.write(\"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\\n\")\r\n        outfile.write(\"# Number of cameras: {}\\n\".format(numcams))\r\n        for im in input_bundle.list_of_input_images:\r\n            width = im.resolution[0]\r\n            height = im.resolution[1]\r\n            focal_length = input_bundle.list_of_cameras[camera_id-1].focal_length\r\n\r\n            # resize images if required\r\n            if target_width != -1:\r\n                orig_width = width\r\n                width = float(target_width)\r\n                scale = float(target_width) / orig_width \r\n                aspect = height / orig_width\r\n                height = width * aspect\r\n                focal_length = scale * focal_length\r\n               \r\n            outfile.write(\"{} PINHOLE {} {} {} {} {} {}\\n\".format(camera_id, int(width), int(height), focal_length, focal_length, width/2.0, height/2.0))\r\n            camera_id = camera_id + 1\r\n        outfile.close()\r\n\r\n    # create images.txt\r\n    fname = os.path.join(sparse_stereo_dir, \"images.txt\")\r\n\r\n    print(\"Creating \", fname)\r\n    camera_id = 1\r\n    with open(fname, 'w') as outfile:\r\n        outfile.write( \"# Image list with two lines of data per image:\\n\" )\r\n        outfile.write( \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\\n\" )\r\n        outfile.write( \"#   POINTS2D[] as (X, Y, POINT3D_ID)\\n\" )\r\n        point2d_index = 0\r\n        for cam in input_bundle.list_of_cameras:\r\n            in_im = input_bundle.list_of_input_images[camera_id-1]\r\n            imname = in_im.path\r\n            name = os.path.basename(imname)\r\n            im = cv2.imread(imname, cv2.IMREAD_UNCHANGED)\r\n            w = im.shape[1]\r\n            h = im.shape[0]\r\n\r\n            # to sibr internal\r\n            br = np.matrix(cam.rotation).transpose()\r\n            t = -np.matmul(br , np.matrix([cam.translation[0], cam.translation[1], cam.translation[2]]).transpose())\r\n         \r\n            # sibr save to colmap\r\n            br = np.matmul(br, np.matrix([[1, 0, 0], [0, -1, 0], [0, 0, -1]]))\r\n            br = br.transpose()\r\n\r\n            sci_rot = R.from_matrix(br)\r\n            sci_quat = sci_rot.as_quat()\r\n\r\n            t = -np.matmul(br, t)\r\n\r\n            outfile.write(\"{} {} {} {} {} {} {} {} {} {}\\n\".format(camera_id, -sci_quat[3], -sci_quat[0], -sci_quat[1], -sci_quat[2], t[0,0], t[1,0], t[2,0], camera_id, name))\r\n            # write out points\r\n            first = False\r\n            scale = 1.0\r\n            if target_width !=1 :\r\n                scale = float(target_width) / float(in_im.resolution[0])\r\n            for p in cam.list_of_feature_points:\r\n                for v in p.view_list:\r\n                    if v[0] == camera_id-1:\r\n                        outfile.write( str(scale*(2.*v[2]+w)) + \" \" + str(scale*(2.*v[3]+h))+ \" -1\" ) # TODO: not sure about this, seems to be -1 in all existing files\r\n                        if not first:\r\n                            outfile.write(\" \")\r\n                        else:\r\n                            first = False\r\n\r\n                        p.point2d_index[v[0]] = point2d_index\r\n                        point2d_index = point2d_index + 1\r\n\r\n            outfile.write(\"\\n\")\r\n            camera_id = camera_id + 1\r\n    outfile.close()\r\n\r\n    # create points3D.txt\r\n    fname = os.path.join(sparse_stereo_dir, \"points3D.txt\")\r\n\r\n    print(\"Creating \", fname)\r\n    camera_id = 1\r\n    with open(fname, 'w') as outfile:\r\n        num_points = len(input_bundle.list_of_feature_points)\r\n#  FIX mean_track_length = sum((len(pt.image_ids) for _, pt in points3D.items()))/len(points3D)\r\n        mean_track_length = 10 # 10 is a placeholder value\r\n        outfile.write(\"# 3D point list with one line of data per point:\\n\" )\r\n        outfile.write(\"#   POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)\\n\")\r\n        outfile.write(\"# Number of points: {}, mean track length: {}\\n\".format(num_points, mean_track_length))\r\n        for p in input_bundle.list_of_feature_points:\r\n            # error set to 0.1 for all\r\n            outfile.write(str(p.id+1)+ \" \" + str(p.position[0]) + \" \" + str(p.position[1]) + \" \" + str(p.position[2]) + \" \" + str( p.color[0])+  \" \" + str( p.color[1])+  \" \" + str( p.color[2])+ \" 0.1\")\r\n            for v in p.view_list:\r\n#                print(\"Cam id \", v[0], \" P= \", p.id+1 , \" p2dind \" , p.point2d_index )\r\n                outfile.write(\" \" + str(v[0]+1)+ \" \" + str(p.point2d_index[v[0]])  )\r\n            outfile.write(\"\\n\")\r\n\r\n\r\n    if create_colmap:\r\n        fname = os.path.join(stereo_stereo_dir, \"fusion.cfg\")\r\n        outfile_fusion = open(fname, 'w') \r\n        fname = os.path.join(stereo_stereo_dir, \"patch-match.cfg\")\r\n        outfile_patchmatch = open(fname, 'w') \r\n        outdir = os.path.join(stereo_stereo_dir, \"normal_maps\")\r\n        if not os.path.exists(outdir):\r\n            os.makedirs(outdir)\r\n        outdir = os.path.join(stereo_stereo_dir, \"depth_maps\")\r\n        if not os.path.exists(outdir):\r\n            os.makedirs(outdir)\r\n        outdir = os.path.join(stereo_stereo_dir, \"consistency_graphs\")\r\n        if not os.path.exists(outdir):\r\n            os.makedirs(outdir)\r\n\r\n    # copy images\r\n    for fname in os.listdir(rc_path):\r\n        if fname.endswith(\".jpg\") or fname.endswith(\".JPG\") or fname.endswith(\".png\") or fname.endswith(\".PNG\") :\r\n            src_image_fname = os.path.join(rc_path, fname)\r\n            dst_image_fname = os.path.join(dst_image_path, os.path.basename(fname))\r\n#            print(\"Copying \", src_image_fname, \"to \", dst_image_fname)\r\n\r\n            if create_colmap:\r\n                  outfile_fusion.write(fname+\"\\n\")\r\n                  outfile_patchmatch.write(fname+\"\\n\")\r\n                  outfile_patchmatch.write(\"__auto__, 20\\n\")\r\n\r\n            # resize if necessary\r\n            if target_width != -1:\r\n                im = cv2.imread(src_image_fname, cv2.IMREAD_UNCHANGED)\r\n                orig_width = im.shape[1]\r\n                orig_height = im.shape[0]\r\n                width = float(target_width)\r\n                scale = float(target_width)/ orig_width \r\n                aspect = orig_height / orig_width\r\n                height = width * aspect\r\n                dim = (int(width), int(height))\r\n                im = cv2.resize(im, dim, interpolation = cv2.INTER_AREA)\r\n                cv2.imwrite(dst_image_fname, im)\r\n            else:\r\n                shutil.copyfile(src_image_fname, dst_image_fname)\r\n\r\n    # copy mesh; fake it\r\n    if create_colmap:\r\n        outfile_patchmatch.close()\r\n        outfile_fusion.close()\r\n\r\n# taken from ibr_preprocess_rc_to_sibr\r\n# TODO: pretty ugly needs rethink and cleanup\r\ndef crop_images(path_data, path_dest):\r\n    # open calibration data\r\n    input_bundle = bundle.Bundle(os.path.join(path_data , \"bundle.out\"))\r\n    # query current average resolution of these cameras\r\n    avg_resolution = input_bundle.get_avg_resolution()\r\n    print(\"AVG resolution \", avg_resolution)\r\n\r\n    # special case: validation_cameras take size/crop data from train cameras so they are all the same\r\n    if \"validation_\" not in path_data:\r\n\r\n        # generate resolutions.txt and put it in the current dataset folder\r\n        resolutions_txt_path = os.path.join(path_data, \"resolutions.txt\")\r\n        input_bundle.generate_list_of_images_file(resolutions_txt_path)\r\n\r\n        # setup avg_resolution parameters for distordCrop\r\n        print(\"Command: run distordCrop ARGS: \", \"--path\", path_data, \"--ratio\",  \"0.3\", \"--avg_width\", str(avg_resolution[0]), \"--avg_height\", str(avg_resolution[1]), \")\")\r\n        retcode = runCommand(getProcess(\"distordCrop\"), [ \"--path\", path_data, \"--ratio\",  \"0.3\", \"--avg_width\", str(avg_resolution[0]), \"--avg_height\", str(avg_resolution[1]) ])\r\n        if retcode.returncode != 0:\r\n            print(\"Command: distordCrop failed, exiting (ARGS: \", \"--path\", path_data, \"--ratio\",  \"0.3\", \"--avg_width\", str(avg_resolution[0]), \"--avg_height\", str(avg_resolution[1]), \")\")\r\n            #exit(1)\r\n\r\n        # read new proposed resolution and check if images were discarded\r\n        exclude = []\r\n        path_to_exclude_images_txt = os.path.join(path_data, \"exclude_images.txt\")\r\n        if (os.path.exists(path_to_exclude_images_txt)):\r\n            # list of excluded cameras (one line having all the camera ids to exclude)\r\n            exclusion_file = open(path_to_exclude_images_txt, \"r\")\r\n            line = exclusion_file.readline()\r\n            tokens = line.split()\r\n\r\n            for cam_id in tokens:\r\n                exclude.append(int(cam_id))\r\n            exclusion_file.close()\r\n\r\n        # exclude cams from bundle file\r\n        if len(exclude) > 0:\r\n            print(\"Excluding \", exclude)\r\n            input_bundle.exclude_cams (exclude)\r\n\r\n        # read proposed cropped resolution\r\n        path_to_crop_new_size_txt = os.path.join(path_data, \"cropNewSize.txt\")\r\n    else:\r\n        train_path_data = str.replace(path_data, \"validation_\", \"\")\r\n        path_to_crop_new_size_txt = os.path.join(train_path_data, \"cropNewSize.txt\")\r\n        print(\"Reading crop size from \", path_to_crop_new_size_txt )\r\n\r\n    with open(path_to_crop_new_size_txt) as crop_size_file:\r\n        line = crop_size_file.readline()\r\n        tokens = line.split()\r\n        new_width   = int(tokens[0])\r\n        new_height  = int(tokens[1])\r\n        proposed_res = [new_width, new_height]\r\n\r\n    print(\"Crop size found:\", proposed_res)\r\n    # generate file with list of current selected images to process\r\n\r\n    path_to_transform_list_txt = os.path.join (path_data, \"toTransform.txt\")\r\n    input_bundle.generate_list_of_images_file(path_to_transform_list_txt)\r\n\r\n    if not os.path.exists(path_dest):\r\n        os.makedirs(path_dest)\r\n\r\n    \r\n    path_to_output_bundle = os.path.join (path_dest, \"bundle.out\")\r\n    # write bundle file in output cameras folder\r\n    new_width = None\r\n    input_bundle.save(path_to_output_bundle, proposed_res)\r\n\r\n    # setup avg_resolution and proposed_resolution parameters for distordCrop\r\n    print(\"Command: run cropFromCenter ARGS:\", \"--inputFile\", path_to_transform_list_txt, \"--outputPath\", path_dest, \"--avgResolution\", str(avg_resolution[0]), str(avg_resolution[1]), \"--cropResolution\", str(proposed_res[0]), str(proposed_res[1]))\r\n    retcode = runCommand(getProcess(\"cropFromCenter\"), [ \"--inputFile\", path_to_transform_list_txt, \"--outputPath\", path_dest, \"--avgResolution\", str(avg_resolution[0]), str(avg_resolution[1]), \"--cropResolution\", str(proposed_res[0]), str(proposed_res[1]) ])\r\n    if retcode.returncode != 0:\r\n        print(\"Command: cropFromCenter failed, exiting (ARGS:\", \"--inputFile\", path_to_transform_list_txt, \"--outputPath\", path_dest, \"--avgResolution\", str(avg_resolution[0]), str(avg_resolution[1]), \"--cropResolution\", str(proposed_res[0]), str(proposed_res[1]))\r\n        exit(1)\r\n\r\n\r\ndef fix_video_only(path):\r\n    # TODO: currently only works for video_only + calib_only; doesnt do video only with MVS\r\n    # verify that train is actually empty\r\n    train_dir = os.path.join(path, os.path.join(\"rcScene\", \"train_cameras\"))\r\n    test_dir = os.path.join(path, os.path.join(\"rcScene\", \"test_path_cameras\"))\r\n    files = os.listdir(train_dir)\r\n    if len(files) == 1: # empty bundle file\r\n        shutil.move(train_dir, train_dir+\"_save\")\r\n        print(\"MOVING {} to {}\".format(test_dir, train_dir))\r\n        shutil.move(test_dir, train_dir)\r\n    else:\r\n        print(\"FATAL ERROR: trying to overwrite existing train images\")\r\n        exit(1)\r\n\r\ndef car_data_process(path):\r\n    # Contains: CAM_{BACK,FRONT}[_]{LEFT, RIGHT}\r\n    rawpath = os.path.join(path, \"raw\")\r\n    if not os.path.exists(rawpath):\r\n        os.makedirs(rawpath)\r\n\r\n    imagespath = os.path.abspath(os.path.join(rawpath, \"images\"))\r\n    if not os.path.exists(imagespath):\r\n        os.makedirs(imagespath)\r\n\r\n    # read all the sets of cameras\r\n\r\n    dirlist = [ \"CAM_BACK\", \"CAM_BACK_LEFT\", \"CAM_BACK_RIGHT\", \"CAM_FRONT\", \"CAM_FRONT_LEFT\", \"CAM_FRONT_RIGHT\" ]\r\n    imlists = {}\r\n    global_im_counter = 0\r\n    \r\n    for dirname in dirlist:\r\n        campath = os.path.join(path, dirname)\r\n        first = True\r\n# basic version\r\n        for filename in os.listdir(campath):\r\n            shutil.copyfile(os.path.join(campath, filename), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+\".jpg\"))\r\n            global_im_counter += 1\r\n\r\n\"\"\"\r\n# code below useless\r\n        for filename in os.listdir(campath):\r\n            ext = os.path.splitext(filename)[1]\r\n            if ext == \".JPG\" or ext == \".jpg\" or ext == \".PNG\" or ext == \".png\" :\r\n                if first:\r\n                    imlists[dirname] = [filename]\r\n                    first = False\r\n                else:\r\n                    imlists[dirname].append(filename)\r\n\r\n#                print(\"Adding \", filename , \" to list \" , dirname)\r\n    for i in range(len(imlists[\"CAM_BACK\"])):\r\n        imname = imlists[ \"CAM_BACK_LEFT\"][i] \r\n        shutil.copyfile(os.path.join(path, os.path.join( \"CAM_BACK_LEFT\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+\".jpg\"))\r\n        global_im_counter += 1\r\n        imname = imlists[ \"CAM_FRONT_LEFT\"][i] \r\n        shutil.copyfile(os.path.join(path, os.path.join( \"CAM_FRONT_LEFT\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+\".jpg\"))\r\n        global_im_counter += 1\r\n        if i > 2:\r\n            imname = imlists[ \"CAM_FRONT\"][i-2] \r\n            shutil.copyfile(os.path.join(path, os.path.join( \"CAM_FRONT\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+\".jpg\"))\r\n            global_im_counter += 1\r\n\r\n    for i in range(len(imlists[\"CAM_BACK\"])):\r\n        imname = imlists[ \"CAM_FRONT_RIGHT\"][i] \r\n        shutil.copyfile(os.path.join(path, os.path.join( \"CAM_FRONT_RIGHT\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+ \".jpg\"))\r\n        global_im_counter += 1\r\n        imname = imlists[ \"CAM_BACK_RIGHT\"][i] \r\n        shutil.copyfile(os.path.join(path, os.path.join( \"CAM_BACK_RIGHT\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+ \".jpg\"))\r\n        global_im_counter += 1\r\n        if i < len(imlists[\"CAM_BACK\"])-2:\r\n            imname = imlists[ \"CAM_BACK\"][i+2] \r\n            shutil.copyfile(os.path.join(path, os.path.join( \"CAM_BACK\", imname)), os.path.join(imagespath, \"{:06d}\".format(global_im_counter)+ \".jpg\"))\r\n            global_im_counter += 1\r\n\"\"\"\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/registrationConfig.xml",
    "content": "<Configuration id=\"{2D5793BC-A65D-4318-A1B9-A05044608385}\">\r\n  <entry key=\"calexUndistResMode\" value=\"2\"/>\r\n  <entry key=\"calexFolder\" value=\"C:\\Users\\gdrett.AD\\Documents\\\"/>\r\n  <entry key=\"calexUndistortNaming\" value=\"1\"/>\r\n  <entry key=\"calexTrans\" value=\"1\"/>\r\n  <entry key=\"calexUndistortPixelFormat\" value=\"32bppBGRA\"/>\r\n  <entry key=\"calexHasDisabled\" value=\"0x0\"/>\r\n  <entry key=\"calexRequiresUndistortPrincipal\" value=\"0x1\"/>\r\n  <entry key=\"calexExportImages\" value=\"true\"/>\r\n  <entry key=\"calexUndistortImageFormat\" value=\"png\"/>\r\n  <entry key=\"MvsExportScaleZ\" value=\"1.0\"/>\r\n  <entry key=\"MvsExportIsGeoreferenced\" value=\"0x1\"/>\r\n  <entry key=\"MvsExportIsModelCoordinates\" value=\"0\"/>\r\n  <entry key=\"calexRequiresColorCorrection\" value=\"0x0\"/>\r\n  <entry key=\"MvsExportScaleY\" value=\"1.0\"/>\r\n  <entry key=\"calexDownscale\" value=\"0x1\"/>\r\n  <entry key=\"calexRequiresEqualResolution\" value=\"0x0\"/>\r\n  <entry key=\"calexUndistMaxPixels\" value=\"0\"/>\r\n  <entry key=\"calexInputHasLayers\" value=\"0\"/>\r\n  <entry key=\"MvsExportScaleX\" value=\"1.0\"/>\r\n  <entry key=\"calexUndistFitMode\" value=\"0\"/>\r\n  <entry key=\"MvsExportRotationY\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportcoordinatesystemtype\" value=\"0\"/>\r\n  <entry key=\"MvsExportNormalFlipZ\" value=\"false\"/>\r\n  <entry key=\"MvsExportRotationX\" value=\"0.0\"/>\r\n  <entry key=\"hasCalexFilePath\" value=\"1\"/>\r\n  <entry key=\"MvsExportNormalFlipY\" value=\"false\"/>\r\n  <entry key=\"MvsExportNormalSpace\" value=\"Mikktspace\"/>\r\n  <entry key=\"calexHasUndistort\" value=\"2\"/>\r\n  <entry key=\"MvsExportNormalFlipX\" value=\"false\"/>\r\n  <entry key=\"MvsExportRotationZ\" value=\"0.0\"/>\r\n  <entry key=\"calexFileFormat\" value=\"Bundler v0.3 (negative z)\"/>\r\n  <entry key=\"MvsExportMoveZ\" value=\"0.0\"/>\r\n  <entry key=\"calexFileFormatId\" value=\"{648CB940-4126-48C3-A96A-B3601D03A6A0}\"/>\r\n  <entry key=\"hasCalexFileName\" value=\"1\"/>\r\n  <entry key=\"calexUndistCutOut\" value=\"1.0\"/>\r\n  <entry key=\"calexHasImageExport\" value=\"1\"/>\r\n  <entry key=\"calexUndistBackColor\" value=\"0\"/>\r\n  <entry key=\"MvsExportMoveX\" value=\"0.0\"/>\r\n  <entry key=\"MvsExportNormalRange\" value=\"ZeroToOne\"/>\r\n  <entry key=\"MvsExportMoveY\" value=\"0.0\"/>\r\n</Configuration>\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/realityCaptureTools/runRC.bat",
    "content": "::CapturingReality\r\n\r\n:: switch off console output\r\n::@echo off\r\n@echo on\r\nset RootFolder=%1\r\nset Video=\"%RootFolder%\\videos\\video.mp4\"\r\nset FPS=%2\r\n\r\nset ConfigFolder=D:\\Users\\gdrett\\src\\sibr_core\\install\\scripts\r\n:: path to RealityCapture application\r\nset RealityCaptureExe=\"C:\\Program Files\\Capturing Reality\\RealityCapture\\RealityCapture.exe\"\r\n\r\n:: variable storing path to images for creating model\r\nset Images=\"%RootFolder%\\images\"\r\nset TestImages=\"%RootFolder%\\test\"\r\nset TrainImages=\"%RootFolder%\\train\"\r\nset PathImages=\"%RootFolder%\\train\"\r\n\r\n:: set a new name for calculated model\r\nset ModelName=\"RCTest\"\r\n\r\n:: set the path, where model is going to be saved, and its name\r\nset ModelObj=\"%RootFolder%\\rcScene\\meshes\\mesh.obj\"\r\nset ModelXYZ=\"%RootFolder%\\rcScene\\meshes\\point_cloud.xyz\"\r\n\r\n:: variable storing path to images for texturing model\r\nset Project=\"%RootFolder%\\rcproj\\mesh.rcproj\"\r\n\r\n:: run RealityCapture\r\n:: test and fix video import when RC working again\r\n\r\necho %@Images%\r\n\r\n%RealityCaptureExe% -addFolder %TrainImages% ^\r\n        -addFolder %TestImages% ^\r\n        -importVideo %Video% %RootFolder%\\video_frames\\ %FPS% ^\r\n        -align ^\r\n        -selectMaximalComponent ^\r\n        -selectAllImages ^\r\n        -enableAlignment false ^\r\n        -selectImage *test_* ^\r\n        -enableAlignment true ^\r\n        -exportRegistration %RootFolder%\\rcScene\\test_cameras\\bundle.out %ConfigFolder%\\registrationConfig.xml ^\r\n        -selectAllImages ^\r\n        -enableAlignment false ^\r\n        -selectImage *frame* ^\r\n        -enableAlignment true ^\r\n        -exportRegistration %RootFolder%\\rcScene\\path_cameras\\bundle.out %ConfigFolder%\\registrationConfig.xml ^\r\n        -selectAllImages ^\r\n        -enableAlignment false ^\r\n        -selectImage *train_* ^\r\n        -enableAlignment true ^\r\n        -exportRegistration %RootFolder%\\rcScene\\cameras\\bundle.out %ConfigFolder%\\registrationConfig.xml ^\r\n        -setReconstructionRegionAuto ^\r\n        -scaleReconstructionRegion 1.4 1.4 2.5 center factor ^\r\n        -calculateNormalModel ^\r\n        -selectMarginalTriangles ^\r\n        -removeSelectedTriangles ^\r\n        -calculateTexture ^\r\n        -save %Project% ^\r\n        -renameSelectedModel %ModelName% ^\r\n        -exportModel %ModelName% %ModelObj% ^\r\n        -exportModel %ModelName% %ModelXYZ% ^\r\n        -quit\r\n       \r\n        \r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/textureMesh/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(textureMesh)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n\tsibr_system\n\tsibr_assets\n    sibr_graphics\n\tsibr_raycaster\n\tsibr_imgproc\n\tsibr_view\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/textureMesh/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"core/system/CommandLineArgs.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n#include \"core/graphics/Image.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n#include \"core/imgproc/MeshTexturing.hpp\"\n#include \"core/scene/BasicIBRScene.hpp\"\n\nusing namespace sibr;\n\n\nstruct TexturingAppArgs : virtual BasicIBRAppArgs {\n\tArg<std::string> meshPath = { \"mesh\", \"\" };\n\tRequiredArg<std::string> output_path = { \"output\", \"output texture path\" };\n\tArg<int> output_size = { \"size\", 8192, \"texture side\" };\n\tArg<bool> flood_fill = { \"flood\", \"perform flood fill\" };\n\tArg<bool> poisson_fill = { \"poisson\", \"perform Poisson filling (slow on large images)\" };\n\tArg<float> samples = { \"samples\", 1.0, \"%ge of total samples to be used for texturing\" };\n};\n\nint main(int ac, char** av) {\n\n\t// Parse Command-line Args\n\tsibr::CommandLineArgs::parseMainArgs(ac, av);\n\n\tTexturingAppArgs args;\n\n\t// Display help.\n\tif(!args.dataset_path.isInit() || !args.output_path.isInit()) {\n\t\tstd::cout << \"Usage: \" << std::endl;\n\t\tstd::cout << \"\\tRequired: --path path/to/dataset --output path/to/output/file.png\" << std::endl;\n\t\tstd::cout << \"\\tOptional: --size 8192 --flood (flood fill) --poisson (poisson fill)\" << std::endl;\n\t\treturn 0;\n\t}\n\n\tBasicIBRScene::SceneOptions opts;\n\topts.renderTargets = false;\n\tif (!args.meshPath.get().empty()) {\n\t\topts.mesh = false;\n\t}\n\topts.texture = false;\n\n\tSIBR_LOG << \"[Texturing] Loading data...\" << std::endl;\n\n\tBasicIBRScene scene(args, opts);\n\t\n\tif (!scene.proxies()->hasProxy()) {\n\t\tsibr::Mesh::Ptr customMesh;\n\t\tcustomMesh.reset(new Mesh());\n\t\tcustomMesh->load(args.meshPath);\n\t\tscene.proxies()->replaceProxyPtr(customMesh);\n\t}\n\n\tMeshTexturing texturer(args.output_size);\n\ttexturer.setMesh(scene.proxies()->proxyPtr());\n\ttexturer.reproject(scene.cameras()->inputCameras(), scene.images()->inputImages(), args.samples);\n\n\t// Export options.\n\t// UVs start at the bottom of the image, we have to flip.\n\tuint options = MeshTexturing::FLIP_VERTICAL;\n\tif (args.flood_fill) {\n\t\toptions = options | MeshTexturing::FLOOD_FILL;\n\t}\n\tif (args.poisson_fill) {\n\t\toptions = options | MeshTexturing::POISSON_FILL;\n\t}\n\n\tsibr::ImageRGB::Ptr result = texturer.getTexture(options);\n\tresult->save(args.output_path);\n\n\treturn 0;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/tonemapper/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(tonemapper)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n\tsibr_system\n\tsibr_assets\n    sibr_graphics\n\tsibr_imgproc\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/tonemapper/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include \"core/system/CommandLineArgs.hpp\"\n#include \"core/assets/InputCamera.hpp\"\n#include \"core/graphics/Image.hpp\"\n#include \"core/graphics/Mesh.hpp\"\n#include \"core/imgproc/MeshTexturing.hpp\"\n#include \"core/scene/BasicIBRScene.hpp\"\n\nusing namespace sibr;\n\n\nstruct TonemapperAppArgs : virtual AppArgs {\n\tRequiredArg<std::string> path = { \"path\", \"path to the EXR images directory\" };\n\tArg<std::string> output = { \"output\", \"\", \"output directory path\" };\n\tArg<std::string> outputExtension = { \"ext\", \"png\", \"output files extension\" };\n\tArg<float> exposure = { \"exposure\", 1.0f, \"exposure value\" };\n\tArg<float> gamma = { \"gamma\", 2.2f, \"gamma value\" };\n};\n\nvoid tonemap(const sibr::ImageRGB32F& hdrImg, sibr::ImageRGB& ldrImg, float exposure, float gamma) {\n\tconst cv::Mat & tonemaped = hdrImg.toOpenCV();\n\tconst cv::Mat exposed = -exposure * tonemaped;\n\tcv::Mat tonemaped2;\n\tcv::exp(exposed, tonemaped2);\n\ttonemaped2 = cv::Scalar(1.0f, 1.0f, 1.0f) - tonemaped2;\n\tif (gamma > 0.0f) {\n\t\tcv::pow(tonemaped2, 1.0f / gamma, tonemaped2);\n\t}\n\tcv::Mat tonemapedRGB;\n\ttonemaped2.convertTo(tonemapedRGB, CV_8UC3, 255.0f);\n\tldrImg.fromOpenCV(tonemapedRGB);\n}\n\nint main(int ac, char** av) {\n\n\t// Parse Command-line Args\n\tsibr::CommandLineArgs::parseMainArgs(ac, av);\n\n\tTonemapperAppArgs args;\n\n\t// Add the extension dot if needed.\n\tstd::string extension = args.outputExtension;\n\tif (!extension.empty() && extension[0] != '.') {\n\t\textension = \".\" + extension;\n\t}\n\t\n\t// Input/output paths.\n\tconst std::string inputPath = args.path;\n\tstd::string outputPath = args.output;\n\t// If we output in the same dir, we want to avoid collisions.\n\tif (outputPath.empty()) {\n\t\toutputPath = inputPath;\n\t\textension = \"_ldr\" + extension;\n\t} else {\n\t\tsibr::makeDirectory(outputPath);\n\t}\n\n\tconst auto files = sibr::listFiles(inputPath, false, false, { \"exr\" });\n\n\tfor (const auto& file : files) {\n\t\tconst std::string src = inputPath + \"/\" + file;\n\t\tconst std::string dst = outputPath + \"/\" + sibr::removeExtension(file) + extension;\n\n\t\tsibr::ImageRGB32F hdrImg;\n\t\tsibr::ImageRGB ldrImg;\n\t\thdrImg.load(src);\n\t\ttonemap(hdrImg, ldrImg, args.exposure, args.gamma);\n\t\tldrImg.save(dst);\n\t}\n\n\treturn 0;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/unwrapMesh/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(unwrapMesh)\n\n# Define build output for project\nadd_executable(${PROJECT_NAME} main.cpp)\n\ntarget_link_libraries(${PROJECT_NAME}\n    ${Boost_LIBRARIES}\n\tsibr_system\n\tsibr_assets\n    sibr_graphics\n)\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/unwrapMesh/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n\n\n#include <core/system/Config.hpp>\n#include <core/graphics/Mesh.hpp>\n#include <core/assets/UVUnwrapper.hpp>\n#include <core/system/CommandLineArgs.hpp>\n\n\nusing namespace sibr;\n\n/** Options for mesh unwrapping. */\nstruct UVMapperArgs : public AppArgs {\n\tRequiredArg<std::string> path = { \"path\", \"path to the mesh\" };\n\tArg<std::string> output = { \"output\", \"\", \"path to the output mesh\" };\n\tArg<int> size = { \"size\", 4096, \"target UV map width (approx.)\" };\n\tArg<bool> visu = { \"visu\", \"save visualisation\" };\n\tArg<std::string> textureName = { \"texture-name\", \"TEXTURE_NAME_TO_PUT_IN_THE_FILE\", \"name of the texture to reference in the output mesh (Meshlab compatible)\" };\n};\n\nint main(int ac, char ** av){\n\n\tCommandLineArgs::parseMainArgs(ac, av);\n\tUVMapperArgs args;\n\tstd::string outputFile = args.output;\n\tif(outputFile.empty()) {\n\t\toutputFile = sibr::removeExtension(args.path.get()) + \"_output.obj\";\n\t}\n\tsibr::makeDirectory(sibr::parentDirectory(outputFile));\n\n\t// Load object file.\n\tMesh mesh(false);\n\tif(sibr::getExtension(args.path) == \"xml\") {\n\t\tmesh.loadMtsXML(args.path);\n\t} else {\n\t\tmesh.load(args.path);\n\t}\n\n\tUVUnwrapper unwrapper(mesh, uint32_t(args.size));\n\tauto finalMesh = unwrapper.unwrap();\n\tfinalMesh->save(outputFile, true, args.textureName);\n\t\n\t// Output debug vis.\n\tif (args.visu) {\n\t\tconst std::string baseName = sibr::removeExtension(outputFile);\n\t\tconst auto visuImgs = unwrapper.atlasVisualization();\n\t\tfor (uint32_t i = 0; i < visuImgs.size(); i++) {\n\t\t\tconst std::string fileName = baseName + \"_charts_atlas_\" + std::to_string(i) + \".png\";\n\t\t\tvisuImgs[i]->save(fileName);\n\t\t}\n\t}\n\treturn EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nproject(dataset_tools_utils)\n\nfile(GLOB SCRIPTS \"*.py\")\n\nadd_custom_target(${PROJECT_NAME} ALL)\n\ninclude(install_runtime)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/dataset_tools/preprocess\")\nibr_install_rsc(${PROJECT_NAME} TYPE \"scripts\" FOLDER \"utils\" FILES ${SCRIPTS})\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/TaskPipeline.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\nimport subprocess\nimport os, sys\nimport re\nimport shutil\nfrom importlib import import_module\nfrom utils.convert import updateStringFromDict\nfrom utils.commands import runCommand\n\nclass TaskPipeline:\n    def __init__(self, args, steps, programs):\n        self.args = args\n        self.steps = steps\n        self.programs = programs\n\n    def isExpressionValid(self, expression):\n        if not re.match(r\"^((?:not|and|or|is|in|\\$\\{\\w+\\})+\\s*)+$\", expression):\n            print(\"Invalid expression '%s'.\" % expression)\n\n        return eval(updateStringFromDict(expression, self.args))\n\n    def runProcessSteps(self):\n        for step in self.steps:\n#            print(\"RUN STEP \", step)\n            if \"if\" in step and not self.isExpressionValid(step[\"if\"]):\n                print(\"Nothing to do on step %s. Skipping.\" % (step[\"name\"]))\n                continue\n\n            print(\"Running step %s...\" % step[\"name\"])\n            command_args = []\n            for i in range(5):\n                if \"app\" in step and \"optional_arg\"+str(i) in step and self.isExpressionValid(step[\"optional_arg\"+str(i)][0]):\n                    optional_arg = []\n                    for optional_arg in step[\"optional_arg\"+str(i)][1:]:\n#                        print(\"Parsing... \", optional_arg, \" \", updateStringFromDict(optional_arg, self.args))\n                        command_args.append(updateStringFromDict(optional_arg, self.args))\n\n            if \"app\" in step:\n#                print(\"Parsing command args...\")\n                for command_arg in step[\"command_args\"]:\n#                    print(\"Parsing... \", command_arg, \" \", updateStringFromDict(command_arg, self.args))\n                    command_args.append(updateStringFromDict(command_arg, self.args))\n\n                # for optionally quitting\n                if \"app\" in step and \"optional_final_arg\" in step and self.isExpressionValid(step[\"optional_final_arg\"][0]):\n                    for command_arg in step[\"optional_final_arg\"][1:]:\n#                        print(\"Parsing... \", command_arg, \" \", updateStringFromDict(command_arg, self.args))\n                        command_args.append(updateStringFromDict(command_arg, self.args))\n\n                if self.args[\"dry_run\"]:\n                    success = True\n                else:\n                    completedProcess = runCommand(self.programs[step[\"app\"]][\"path\"], command_args)\n                    success = completedProcess.returncode == 0\n\n            elif \"function\" in step:\n                if '.' in step[\"function\"]:\n                    currentModuleName, currentFunctionName = step[\"function\"].rsplit('.', 1)\n                    currentFunction = getattr(import_module(currentModuleName), currentFunctionName)\n                else:\n                    print(\"Missing module name for function %s. Aborting.\" % (step[\"function\"]))\n                    sys.exit(1)\n\n                if self.args[\"dry_run\"]:\n                    print('function : %s(%s)' % (step[\"function\"], ', '.join([ \"%s=%s\" % (key, ([updateStringFromDict(item, self.args) for item in val]\n                                                                                                 if type(val) is list else\n                                                                                                 updateStringFromDict(val, self.args)))\n                                                                                                    for key, val in step[\"function_args\"].items()])))\n                else:\n                    ret = currentFunction(**{ key: ([updateStringFromDict(item, self.args) for item in val]\n                                                if type(val) is list else\n                                                updateStringFromDict(val, self.args))\n                                                    for key, val in step[\"function_args\"].items() })\n                    if ret != None:\n                        self.args[ret[0]] = ret[1]\n                        print (\"After step {}: Setting args[{}]={}\".format( step[\"function\"], ret[0] , ret[1], ret[0], self.args[ret[0]]))\n\n                success = True\n            else:\n                print(\"Nothing to do on step %s. Skipping.\" % (step[\"name\"]))\n                continue\n\n            if success:\n                print(\"Step %s successful.\" % (step[\"name\"]))\n            else:\n                sys.stdout.flush()\n                sys.stderr.flush()\n                print(\"Error on step %s. Aborting.\" % (step[\"name\"]))\n                sys.exit(1)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/color.py",
    "content": "# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n\r\n\r\nimport os\r\nos.system(\"color\")\r\n\r\nCOLOR = {\r\n    \"HEADER\": \"\\033[95m\",\r\n    \"BLUE\": \"\\033[94m\",\r\n    \"GREEN\": \"\\033[92m\",\r\n    \"RED\": \"\\033[91m\",\r\n    \"ENDC\": \"\\033[0m\",\r\n}\r\n\r\n#print(COLOR[\"GREEN\"], \"Testing Green!!\", COLOR[\"ENDC\"])\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/commands.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\nimport subprocess\nimport os, sys\nfrom shutil import which\nfrom utils.paths import getBinariesPath, getColmapPath, getMeshlabPath, getRCPath\n\ndef getProcess(programName, binaryPath = getBinariesPath()):\n    suffixes = [ '', '_msr', '_rwdi', '_d']\n\n    print(\"BINARIES \", binaryPath)\n    for suffix in suffixes:\n        binary = os.path.join(binaryPath, programName + suffix + (\".exe\" if os.name == 'nt' else ''))\n\n        if os.path.isfile(binary) or which(binary) is not None:\n            print(\"Program '%s' found in '%s'.\" % (programName, binary))\n            return binary\n\ndef getRCprocess(binaryPath = getRCPath()):\n    programName = \"RealityCapture\"\n    binary = os.path.join(binaryPath, programName + \".exe\")\n\n    if os.path.isfile(binary):\n        print(\"Program '%s' found in '%s'.\" % (programName, binary))\n        return binary\n\n\ndef runCommand(binary, command_args):\n#    print(\"Running process '%s'\" % (' '.join([binary, *command_args])))\n    sys.stdout.flush()\n    completedProcess = subprocess.run([binary, *command_args])\n\n    if completedProcess.returncode == 0:\n        print(\"Process %s completed.\" % binary)\n    else:\n        sys.stdout.flush()\n        sys.stderr.flush()\n        print(\"Process %s failed with code %d.\" % (binary, completedProcess.returncode))\n\n    return completedProcess\n\ndef getColmap(colmapPath = getColmapPath()):\n    colmapBinary = os.path.join(colmapPath, \"COLMAP.bat\" if os.name == 'nt' else 'colmap')\n\n    if os.path.isfile(colmapBinary) or which(colmapBinary) is not None:\n        print(\"Program '%s' found in '%s'.\" % (colmapBinary, colmapPath))\n        return colmapBinary\n    else:\n        print(\"Program '%s' not found in '%s'. Aborting.\" % (colmapBinary, colmapPath))\n        return None\n\ndef getMeshlabServer(meshlabPath = getMeshlabPath()):\n    meshlabserverBinary = os.path.join(meshlabPath, \"meshlabserver\" + ('.exe' if os.name == 'nt' else ''))\n\n    if os.path.isfile(meshlabserverBinary) or which(meshlabserverBinary) is not None:\n        print(\"Program '%s' found in '%s'.\" % (meshlabserverBinary, meshlabPath))\n        return meshlabserverBinary\n    else:\n        print(\"Program '%s' not found in '%s'. Aborting.\" % (meshlabserverBinary, meshlabPath))\n        return None\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/convert.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\nimport os\nimport re\n\ndef updateStringFromDict(string, map, format='${%s}', fix_paths=True):\n    newstring = string\n\n    for keyword, value in map.items():\n        newstring = newstring.replace(format % keyword, str(value))\n        # if it's a path, get absolute path\n        if fix_paths and re.match(r\"^(?:\\w:[\\\\\\/]*|[@A-Za-z_.0-9-]*[\\\\\\/]+|\\.{1,2}[\\\\\\/])(?:[\\\\\\/]|[@A-Za-z_.0-9-]+)*$\", newstring):\n            newstring = os.path.abspath(newstring)\n\n    return newstring\n\ndef fixMeshEol(meshPath, newMeshPath):\n    with open(meshPath,\"rb\") as meshFile, open(newMeshPath, \"wb\") as newMeshFile:\n        meshBytes = meshFile.read()\n        endBytes = b\"end_header\"\n        badEol = b\"\\r\\n\"\n        newEol = b\"\\n\"\n\n        index = meshBytes.find(endBytes) + len(endBytes) + len(badEol)\n\n        newMeshBytes = meshBytes[0:index].replace(badEol, newEol)\n        newMeshBytes += meshBytes[index:]\n\n        newMeshFile.write(newMeshBytes)"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/datasets.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\nimport os\nfrom enum import Enum, unique\n\n@unique\nclass DatasetType(Enum):\n    SIBR = 'sibr'\n    COLMAP = 'colmap'\n    CAPREAL = 'capreal'\n\ndatasetStructure = { \n    \"colmap\": [ \"colmap\", \"colmap/stereo\", \"colmap/sparse\" ],\n    \"capreal\": [ \"capreal\", \"capreal/undistorted\" ],\n    \"sibr\": [ \"cameras\", \"images\", \"meshes\" ]\n}\n\ndef buildDatasetStructure(path, types):\n    for folder in [folder for type in types for folder in datasetStructure[type]]:\n        new_folder = os.path.abspath(os.path.join(path, folder))\n        print(\"Creating folder %s...\" % new_folder)\n        os.makedirs(new_folder, exist_ok=True)"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/preprocess/utils/paths.py",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n#!/usr/bin/env python\n#! -*- encoding: utf-8 -*-\n\nimport os\n\ndef getBinariesPath():\n    if os.path.exists(os.path.join(os.path.dirname(__file__), \"../../bin\")):\n        return os.path.abspath(os.path.join(os.path.dirname(__file__), \"../../bin\"))\n    else: \n        return os.path.abspath(os.path.join(os.path.dirname(__file__), \"../../../../../install/bin\"))\n\ndef getColmapPath():\n    return os.environ['COLMAP_PATH'] if 'COLMAP_PATH' in os.environ else (\"C:\\\\Program Files\\\\Colmap\" if os.name == 'nt' else '')\n    \ndef getMeshlabPath():\n    return os.environ['MESHLAB_PATH'] if 'MESHLAB_PATH' in os.environ else (\"C:\\\\Program Files\\\\VCG\\\\Meshlab\" if os.name == 'nt' else '')\n\ndef getRCPath():\n    return os.environ['RC_PATH'] if 'RC_PATH' in os.environ else \"C:\\\\Program Files\\\\Capturing Reality\\\\RealityCapture\\\\\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/dataset_tools/scripts/processRC.py",
    "content": "\r\n# Copyright (C) 2020, Inria\r\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n# All rights reserved.\r\n# \r\n# This software is free for non-commercial, research and evaluation use \r\n# under the terms of the LICENSE.md file.\r\n# \r\n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n#\r\n\r\n\r\n#!/usr/bin/env python\r\n#! -*- encoding: utf-8 -*-\r\n\r\n\"\"\" @package dataset_tools_preprocess\r\nThis script processes images and creates an RealityCapture (RC) reconstruction, then creates a colmap version using the RC camera registration\r\n\r\nParameters: -h help,\r\n            -path <path to your dataset folder>,\r\n\r\nUsage: python processRC.py -path <path to your dataset folder>\r\n\r\n\"\"\"\r\n\r\nimport os, sys, shutil\r\nos.sys.path.append('../preprocess/')\r\nos.sys.path.append('../preprocess/realityCaptureTools')\r\nos.sys.path.append('../preprocess/fullColmapProcess')\r\nos.sys.path.append('../preprocess/converters')\r\n\r\nimport json\r\nimport argparse\r\nfrom utils.paths import getBinariesPath, getColmapPath, getMeshlabPath\r\nfrom utils.commands import  getProcess, getColmap, getRCprocess\r\nfrom utils.TaskPipeline import TaskPipeline\r\nimport rc_tools\r\nimport colmap2nerf\r\nimport selective_colmap_process\r\n\r\ndef find_file(filename):\r\n    fname = os.path.join(os.path.abspath(os.path.dirname(__file__)), filename)\r\n    if not os.path.exists(fname):\r\n        fname = os.path.join(\"../preprocess/fullColmapProcess\", filename)\r\n    if not os.path.exists(fname):\r\n        fname = os.path.join(\"../preprocess/realityCaptureTools\", filename)\r\n    if not os.path.exists(fname):\r\n        fname = os.path.join(\"../preprocess/converters\", filename)\r\n    return fname\r\n    \r\n\r\ndef main():\r\n    parser = argparse.ArgumentParser()\r\n\r\n    # common arguments\r\n    parser.add_argument(\"--sibrBinariesPath\", type=str, default=getBinariesPath(), help=\"binaries directory of SIBR\")\r\n    parser.add_argument(\"--colmapPath\", type=str, default=getColmapPath(), help=\"path to directory colmap.bat / colmap.bin directory\")\r\n    parser.add_argument(\"--quality\", type=str, default='default', choices=['default', 'low', 'medium', 'average', 'high', 'extreme'],\r\n        help=\"quality of the reconstruction\")\r\n    parser.add_argument(\"--path\", type=str, required=True, help=\"path to your dataset folder\")\r\n    parser.add_argument(\"--dry_run\", action='store_true', help=\"run without calling commands\")\r\n    parser.add_argument(\"--rc_path\", type=str, required=False, help=\"path to rc dataset, containing bundle.out and images\")\r\n    parser.add_argument(\"--out_path\", type=str, required=False, help = \"output path \")\r\n    parser.add_argument(\"--video_name\", type=str, default='default', required=False, help = \"name of video file to load\")\r\n    parser.add_argument(\"--create_colmap\", action='store_true', help=\"create colmap hierarchy\")\r\n    parser.add_argument(\"--target_width\", type=str, default='default', help=\"colmap_target_width\")\r\n    parser.add_argument(\"--from_step\", type=str, default='default', help=\"Run from this step to --to_step (or end if no to_step\")\r\n    parser.add_argument(\"--to_step\", type=str, default='default', help=\"up to but *excluding* this step (from --from_step); must be unique steps\")\r\n\r\n    # RC arguments\r\n    parser.add_argument(\"--do_mvs\", action='store_false', help=\"use train folder\")\r\n    parser.add_argument(\"--calib_only\", action='store_true', help=\"only do calibration\")\r\n    parser.add_argument(\"--hires_nerf\", action='store_true', help=\"create hi res nerf\")\r\n    parser.add_argument(\"--car_data\", action='store_true', help=\"pre(pre)process car camera data \")\r\n    parser.add_argument(\"--do_train\", action='store_false', help=\"use train folder\")\r\n    parser.add_argument(\"--do_validation\", action='store_false', help=\"use validation folder\")\r\n    parser.add_argument(\"--no_validation_split\", action='store_true', help=\"dont do validation split\")\r\n    parser.add_argument(\"--do_video\", action='store_true', help=\"use video folder (mp4)\")\r\n    parser.add_argument(\"--do_test\", action='store_true', help=\"use test folder (stills path)\")\r\n    parser.add_argument(\"--auto_recon_area\", action='store_true', help=\"automatically set recon area (no user intervention)\")\r\n\r\n    parser.add_argument(\"--config_folder\", type=str, default='default', help=\"folder containing configuration files; usually cwd\")\r\n    parser.add_argument(\"--model_name\", type=str, default='default', help=\"Internal name of RC model\")\r\n    parser.add_argument(\"--path_prefix\", type=str, default='default', help=\"Internal prefix of path images\")\r\n    parser.add_argument(\"--one_over_fps\", type=str, default='default', help=\"Sampling rate for the video\")\r\n    parser.add_argument(\"--valid_skip\", type=str, default='default', help=\"skip every nth image for validation\")\r\n    # \"presets\"\r\n    parser.add_argument(\"--images_only\", action='store_false', help=\"just process images: no validation, no test\")\r\n    parser.add_argument(\"--video_only\", action='store_true', help=\"just process video: no photos, no test\")\r\n\r\n    parser.add_argument(\"--no_refl\", action='store_true', help=\"dont densify mesh, dont convert_sibr, dont create nerf (def: false)\")\r\n\r\n\r\n    # needed to avoid parsing issue for passing arguments to next command (TODO)\r\n    parser.add_argument(\"--video_filename\", type=str, default='default', help=\"full path of video file (internal argument; do not set)\")\r\n    parser.add_argument(\"--mesh_obj_filename\", type=str, default='default', help=\"full path of obj mesh file (internal argument; do not set)\")\r\n    parser.add_argument(\"--mesh_xyz_filename\", type=str, default='default', help=\"full path of xyz point cloud file (internal argument; do not set)\")\r\n    parser.add_argument(\"--mesh_ply_filename\", type=str, default='default', help=\"full path of ply mesh file (internal argument; do not set)\")\r\n\r\n    # colmap\r\n    #colmap performance arguments\r\n    parser.add_argument(\"--numGPUs\", type=int, default=2, help=\"number of GPUs allocated to Colmap\")\r\n\r\n    # Patch match stereo\r\n    parser.add_argument(\"--PatchMatchStereo.max_image_size\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotMaxImageSize\")\r\n    parser.add_argument(\"--PatchMatchStereo.window_radius\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowRadius\")\r\n    parser.add_argument(\"--PatchMatchStereo.window_step\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotWindowStep\")\r\n    parser.add_argument(\"--PatchMatchStereo.num_samples\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumSamples\")\r\n    parser.add_argument(\"--PatchMatchStereo.num_iterations\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotNumIterations\")\r\n    parser.add_argument(\"--PatchMatchStereo.geom_consistency\", type=int, dest=\"patchMatchStereo_PatchMatchStereoDotGeomConsistency\")\r\n\r\n    # Stereo fusion\r\n    parser.add_argument(\"--StereoFusion.check_num_images\", type=int, dest=\"stereoFusion_CheckNumImages\")\r\n    parser.add_argument(\"--StereoFusion.max_image_size\", type=int, dest=\"stereoFusion_MaxImageSize\")\r\n\r\n\r\n    args = vars(parser.parse_args())\r\n\r\n    from_step = args[\"from_step\"]\r\n    to_step = args[\"to_step\"]\r\n\r\n    # Update args with quality values\r\n    fname = find_file(\"ColmapQualityParameters.json\")\r\n    with open(fname, \"r\") as qualityParamsFile:\r\n        qualityParams = json.load(qualityParamsFile)\r\n\r\n        for key, value in qualityParams.items():\r\n            if not key in args or args[key] is None:\r\n                args[key] = qualityParams[key][args[\"quality\"]] if args[\"quality\"] in qualityParams[key] else qualityParams[key][\"default\"]\r\n\r\n    # Get process steps\r\n    fname = find_file(\"processRCSteps.json\")\r\n    with open(fname, \"r\") as processStepsFile:\r\n        steps = json.load(processStepsFile)[\"steps\"]\r\n\r\n    # Fixing path values\r\n    args[\"path\"] = os.path.abspath(args[\"path\"])\r\n    args[\"sibrBinariesPath\"] = os.path.abspath(args[\"sibrBinariesPath\"])\r\n    args[\"colmapPath\"] = os.path.abspath(args[\"colmapPath\"])\r\n    args[\"gpusIndices\"] = ','.join([str(i) for i in range(args[\"numGPUs\"])])\r\n\r\n    args[\"mesh_obj_filename\"] = os.path.join(args[\"path\"], os.path.join(\"rcScene\", os.path.join(\"meshes\", \"mesh.obj\")))\r\n    args[\"mesh_xyz_filename\"] = os.path.join(args[\"path\"], os.path.join(\"rcScene\", os.path.join(\"meshes\", \"point_cloud.xyz\")))\r\n    args[\"mesh_ply_filename\"] = os.path.join(args[\"path\"], os.path.join(\"sibr\", os.path.join(\"capreal\", \"mesh.ply\")))\r\n\r\n    args[\"path_prefix\"] = \"test_\"\r\n\r\n    # fixed in preprocess\r\n    args[\"video_filename\"] = os.path.join(args[\"path\"], os.path.join(\"raw\", os.path.join(\"videos\", \"XXX.mp4\")))\r\n    if args[\"config_folder\"] == 'default':\r\n        if os.path.exists(\"registrationConfig.xml\"):\r\n            args[\"config_folder\"] = \".\"\r\n        elif os.path.exists(\"../preprocess/realityCaptureTools/registrationConfig.xml\"):\r\n            args[\"config_folder\"] = \"../preprocess/realityCaptureTools/\"\r\n\r\n    if args[\"valid_skip\"] == 'default' :\r\n        args[\"valid_skip\"] = \"10\"\r\n        \r\n    if args[\"one_over_fps\"] == 'default':\r\n        args[\"one_over_fps\"] = \"0.02\"\r\n\r\n    if args[\"target_width\"] == 'default':\r\n        args[\"target_width\"] = \"1000\"\r\n    print(\"TARGET WIDTH \", args[\"target_width\"])\r\n\r\n    if args[\"no_validation_split\"]:\r\n        args[\"do_validation_split\"] = False\r\n    else:\r\n        args[\"do_validation_split\"] = True\r\n\r\n    # presets\r\n\r\n    exclude_steps = []\r\n\r\n    if args[\"no_refl\"] == True:\r\n        exclude_steps = [ \"densify_mesh\", \"dense_mesh\", \"create_nerf\", \"convert_sibr_mesh\" ] \r\n        print(\"No densification, no sibr, no nerf, exclude:\", exclude_steps)\r\n\r\n    if args[\"car_data\"]:\r\n        print(\"Doing car data\")\r\n    else:\r\n        print(\"No car data\")\r\n\r\n    if args[\"calib_only\"]:\r\n        to_step = \"colmap_patch_match_stereo\"\r\n        args[\"do_mvs\"] = False\r\n        exclude_steps = [ \"densify_mesh\", \"dense_mesh\" ] \r\n\r\n    # either do video or do_test\r\n    if args[\"do_video\"]:\r\n        args[\"path_prefix\"] = \"frame\"       \r\n\r\n    if args[\"video_only\"]:\r\n        args[\"do_train\"] = False\r\n        args[\"do_validation\"] = False\r\n        args[\"do_test\"] = False\r\n        args[\"do_video\"] = True\r\n\r\n    if args[\"do_test\"]:\r\n        args[\"path_prefix\"] = \"test_\"       \r\n        args[\"do_video\"] = False\r\n\r\n\r\n    if args[\"video_only\"] and args[\"calib_only\"]:\r\n        exclude_steps = [ \"densify_mesh\", \"dense_mesh\",  \"rc_to_colmap_path_cameras\", \"rc_to_colmap_validation_cameras\" ]\r\n\r\n    programs = {\r\n        \"colmap\": {\r\n            \"path\": getColmap(args[\"colmapPath\"])\r\n        },\r\n        \"RC\": {\r\n            \"path\": getRCprocess()\r\n        }\r\n    }\r\n\r\n    # TODO: move to generic taskpipeline code; \r\n    if( from_step != 'default' or to_step != 'default' or exclude_steps != []):\r\n        # check if to_step exists\r\n        # select steps\r\n        newsteps = []\r\n        if from_step != 'default':\r\n            adding_steps = False\r\n        else:\r\n            adding_steps = True\r\n                \r\n        for s in steps:\r\n            if s['name'] == from_step :\r\n                adding_steps = True\r\n            if s['name'] == to_step :\r\n                break\r\n            if adding_steps and (not (s['name'] in exclude_steps)):\r\n                newsteps.append(s)\r\n\r\n        steps = newsteps\r\n\r\n    pipeline = TaskPipeline(args, steps, programs)\r\n\r\n    pipeline.runProcessSteps()\r\n    \r\n    print(\"selectiveColmapProcess has finished successfully.\")\r\n    sys.exit(0)\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(sibr_ulr_all)\n\nadd_subdirectory(apps)\nadd_subdirectory(renderer)\n\ninclude(install_runtime)\nsubdirectory_target(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR} \"projects/ulr\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(SIBR_ulr_apps)\n\nadd_subdirectory(ulr/)\nadd_subdirectory(ulrv2/)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulr/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(SIBR_ulr_app)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB RESOURCES \"resources/*.ini\")\nsource_group(\"Resources Files\" FILES ${RESOURCES})\n\nadd_executable(${PROJECT_NAME} ${SOURCES})\ntarget_link_libraries(${PROJECT_NAME}\n\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tsibr_view\n\tsibr_assets\n\tsibr_ulr\n\tsibr_graphics\n)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/ulr/apps\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tRESOURCES  \t${RESOURCES}\n\tRSC_FOLDER \t\"ulr\"\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulr/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n#include <core/graphics/Window.hpp>\n#include <core/view/MultiViewManager.hpp>\n#include <projects/ulr/renderer/ULRView.hpp>\n#include <core/scene/BasicIBRScene.hpp>\n#include <core/raycaster/Raycaster.hpp>\n#include <core/view/SceneDebugView.hpp>\n\n#define PROGRAM_NAME \"sibr_ulr_app\"\nusing namespace sibr;\n\nconst char* usage = \"\"\n\t\"Usage: \" PROGRAM_NAME \" -path <dataset-path>\"    \t                                \"\\n\"\n\t;\n\n\n\nint main( int ac, char** av )\n{\n\t{\n\n\t\t// Parse Commad-line Args\n\t\tCommandLineArgs::parseMainArgs(ac, av);\n\t\tBasicIBRAppArgs myArgs;\n\t\t\n\t\tconst bool doVSync = !myArgs.vsync;\n\t\t// rendering size\n\t\tuint rendering_width = myArgs.rendering_size.get()[0];\n\t\tuint rendering_height = myArgs.rendering_size.get()[1];\n\t\t// window size\n\t\tuint win_width = myArgs.win_width;\n\t\tuint win_height = myArgs.win_height;\n\n\t\t// Window setup\n\t\tsibr::Window        window(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs, getResourcesDirectory() + \"/ulr/\" + PROGRAM_NAME + \".ini\");\n\n\t\t// Setup IBR\n\t\tBasicIBRScene::Ptr\t\tscene(new BasicIBRScene(myArgs));\n\n\t\t// check rendering size\n\t\trendering_width = (rendering_width <= 0) ? scene->cameras()->inputCameras()[0]->w() : rendering_width;\n\t\trendering_height = (rendering_height <= 0) ? scene->cameras()->inputCameras()[0]->h() : rendering_height;\n\t\tVector2u usedResolution(rendering_width, rendering_height);\n\n\t\tconst unsigned int sceneResWidth = usedResolution.x();\n\t\tconst unsigned int sceneResHeight = usedResolution.y();\n\n\t\tULRView::Ptr\tulrView(new ULRView(scene, sceneResWidth, sceneResHeight));\n\t\tulrView->setNumBlend(50, 50);\n\n\t\t// Raycaster.\n\t\tstd::shared_ptr<sibr::Raycaster> raycaster = std::make_shared<sibr::Raycaster>();\n\t\traycaster->init();\n\t\traycaster->addMesh(scene->proxies()->proxy());\n\n\t\t// Camera handler for main view.\n\t\tsibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler());\n\t\tgeneralCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster);\n\n\n\t\t// Add views to mvm.\n\t\tMultiViewManager        multiViewManager(window, false);\n\t\tmultiViewManager.addIBRSubView(\"ULR view\", ulrView, usedResolution, ImGuiWindowFlags_ResizeFromAnySide);\n\t\tmultiViewManager.addCameraForView(\"ULR view\", generalCamera);\n\n\t\t// Top view\n\t\tconst std::shared_ptr<sibr::SceneDebugView>    topView(new sibr::SceneDebugView(scene, generalCamera, myArgs));\n\t\tmultiViewManager.addSubView(\"Top view\", topView, usedResolution);\n\n\t\tif (myArgs.pathFile.get() !=  \"\" ) {\n\t\t\tgeneralCamera->getCameraRecorder().loadPath(myArgs.pathFile.get(), usedResolution.x(), usedResolution.y());\n\t\t\tgeneralCamera->getCameraRecorder().recordOfflinePath(myArgs.outPath, multiViewManager.getIBRSubView(\"ULR view\"), \"ulr\");\n\t\t\tif( !myArgs.noExit )\n\t\t\t\texit(0);\n\t\t}\n\n\t\twhile (window.isOpened())\n\t\t{\n\t\t\tsibr::Input::poll();\n\t\t\twindow.makeContextCurrent();\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape))\n\t\t\t\twindow.close();\n\n\t\t\tmultiViewManager.onUpdate(sibr::Input::global());\n\t\t\tmultiViewManager.onRender(window);\n\t\t\twindow.swapBuffer();\n\t\t\tCHECK_GL_ERROR\n\t\t}\n\n\t}\n\n\treturn EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulr/resources/sibr_ulr_app.ini",
    "content": "\n[Window][Camera ULR view]\nPos=50,50\nSize=900,300\nCollapsed=0\n\n[Window][Top view settings]\nPos=950,50\nSize=450,300\nCollapsed=0\n\n[Window][Metrics##0]\nPos=1400,50\nSize=450,300\nCollapsed=0\n\n[Window][ULR view]\nPos=50,350\nSize=900,600\nCollapsed=0\n\n[Window][Top view]\nPos=950,350\nSize=900,600\nCollapsed=0\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulrv2/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\n\nproject(SIBR_ulrv2_app)\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB RESOURCES \"resources/*.ini\")\nsource_group(\"Resources Files\" FILES ${RESOURCES})\n\nadd_executable(${PROJECT_NAME} ${SOURCES})\ntarget_link_libraries(${PROJECT_NAME}\n\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tOpenMP::OpenMP_CXX\n\tsibr_view\n\tsibr_assets\n\tsibr_ulr\n\tsibr_renderer\n\tsibr_graphics\n)\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/ulr/apps\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tRESOURCES  \t${RESOURCES}\n\tRSC_FOLDER \t\"ulr\"\n    STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulrv2/main.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <fstream>\n\n#include <core/graphics/Window.hpp>\n#include <core/view/MultiViewManager.hpp>\n#include <core/system/String.hpp>\n\n#include \"projects/ulr/renderer/ULRView.hpp\"\n#include <projects/ulr/renderer/ULRV2View.hpp>\n#include <projects/ulr/renderer/ULRV3View.hpp>\n\n#include <core/renderer/DepthRenderer.hpp>\n#include <core/raycaster/Raycaster.hpp>\n#include <core/view/SceneDebugView.hpp>\n\n#define PROGRAM_NAME \"sibr_ulrv2_app\"\nusing namespace sibr;\n\nconst char* usage = \"\"\n\"Usage: \" PROGRAM_NAME \" -path <dataset-path>\"    \t                                \"\\n\"\n;\n\n\nint legacyV1main(ULRAppArgs & myArgs);\nint legacyV2main(ULRAppArgs & myArgs);\n\n\nint main(int ac, char** av) {\n\n\t// Parse Command-line Args\n\tCommandLineArgs::parseMainArgs(ac, av);\n\tULRAppArgs myArgs;\n\tmyArgs.displayHelpIfRequired();\n\n\tif (myArgs.version == 2) {\n\t\treturn legacyV2main(myArgs);\n\t}\n\tif (myArgs.version == 1) {\n\t\treturn legacyV1main(myArgs);\n\t}\n\n\tconst bool doVSync = !myArgs.vsync;\n\t// rendering size\n\tuint rendering_width = myArgs.rendering_size.get()[0];\n\tuint rendering_height = myArgs.rendering_size.get()[1];\n\t\n\t// window size\n\tuint win_width = myArgs.win_width;\n\tuint win_height = myArgs.win_height;\n\n\n\t// Window setup\n\tsibr::Window\t\twindow(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs, getResourcesDirectory() + \"/ulr/\" + PROGRAM_NAME + \".ini\");\n\n\tBasicIBRScene::Ptr\t\tscene(new BasicIBRScene(myArgs, true));\n\n\t// Setup the scene: load the proxy, create the texture arrays.\n\tconst uint flags = SIBR_GPU_LINEAR_SAMPLING | SIBR_FLIP_TEXTURE;\n\n\t// Fix rendering aspect ratio if user provided rendering size\n\tuint scene_width = scene->cameras()->inputCameras()[0]->w();\n\tuint scene_height = scene->cameras()->inputCameras()[0]->h();\n\tfloat scene_aspect_ratio = scene_width * 1.0f / scene_height;\n\tfloat rendering_aspect_ratio = rendering_width * 1.0f / rendering_height;\n\n\tif ((rendering_width > 0) && !myArgs.force_aspect_ratio ) {\n\t\tif (abs(scene_aspect_ratio - rendering_aspect_ratio) > 0.001f) {\n\t\t\tif (scene_width > scene_height) {\n\t\t\t\trendering_height = rendering_width / scene_aspect_ratio;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trendering_width = rendering_height * scene_aspect_ratio;\n\t\t\t}\n\t\t}\n\t}\n\n\t\n\t// check rendering size\n\trendering_width = (rendering_width <= 0) ? scene->cameras()->inputCameras()[0]->w() : rendering_width;\n\trendering_height = (rendering_height <= 0) ? scene->cameras()->inputCameras()[0]->h() : rendering_height;\n\tVector2u usedResolution(rendering_width, rendering_height);\n\tstd::cerr << \" USED RES \" << usedResolution << \" scene w h \" << scene_width << \" : \" << scene_height <<  \n\t\t \" NAME \" << scene->cameras()->inputCameras()[0]->name() << std::endl;\n\n\tconst unsigned int sceneResWidth = usedResolution.x();\n\tconst unsigned int sceneResHeight = usedResolution.y();\n\n\t\n\tscene->renderTargets()->initRGBandDepthTextureArrays(scene->cameras(), scene->images(), scene->proxies(), flags, true, myArgs.force_aspect_ratio);\n\n\t// Create the ULR view.\n\tULRV3View::Ptr\tulrView(new ULRV3View(scene, sceneResWidth, sceneResHeight));\n\n\t// Check if masks are provided and enabled.\n\tif (myArgs.masks) {\n\t\tif (!myArgs.maskParams.get().empty()) {\n\t\t\tif (!myArgs.maskParamsExtra.get().empty()) {\n\t\t\t\tulrView->getULRrenderer()->loadMasks(scene, myArgs.maskParams.get(), \"\", myArgs.maskParamsExtra.get());\n\t\t\t}\n\t\t\telse {\n\t\t\t\tulrView->getULRrenderer()->loadMasks(scene, myArgs.maskParams.get(), \"\", \".png\");\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tulrView->getULRrenderer()->loadMasks(scene);\n\t\t}\n\t\tulrView->getULRrenderer()->useMasks() = true;\n\t}\n\n\t// Raycaster.\n\tstd::shared_ptr<sibr::Raycaster> raycaster = std::make_shared<sibr::Raycaster>();\n\traycaster->init();\n\traycaster->addMesh(scene->proxies()->proxy());\n\n\t// Camera handler for main view.\n\tsibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler());\n\tgeneralCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster);\n\n\t// Add views to mvm.\n\tMultiViewManager        multiViewManager(window, false);\n\tmultiViewManager.addIBRSubView(\"ULR view\", ulrView, usedResolution, ImGuiWindowFlags_ResizeFromAnySide);\n\tmultiViewManager.addCameraForView(\"ULR view\", generalCamera);\n\n\tCHECK_GL_ERROR;\n\n\tif (myArgs.offscreen || myArgs.pathFile.get() !=  \"\" ) {\n\t\tgeneralCamera->getCameraRecorder().loadPath(myArgs.pathFile.get(), usedResolution.x(), usedResolution.y());\n\t\tgeneralCamera->getCameraRecorder().recordOfflinePath(myArgs.outPath, multiViewManager.getIBRSubView(\"ULR view\"), \"\");\n\t\tif( !myArgs.noExit )\n\t\t\texit(0);\n\t}\n\n\t// Top view\n\tconst std::shared_ptr<sibr::SceneDebugView> topView(new sibr::SceneDebugView(scene, generalCamera, myArgs));\n\tmultiViewManager.addSubView(\"Top view\", topView, usedResolution);\n\n\tCHECK_GL_ERROR;\n\n\t// Main looooooop.\n\twhile (window.isOpened()) {\n\n\t\tsibr::Input::poll();\n\t\twindow.makeContextCurrent();\n\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape)) {\n\t\t\twindow.close();\n\t\t}\n\n\t\tmultiViewManager.onUpdate(sibr::Input::global());\n\t\tmultiViewManager.onRender(window);\n\n\t\twindow.swapBuffer();\n\t\tCHECK_GL_ERROR;\n\t}\n\n\treturn EXIT_SUCCESS;\n}\n\n/// Use ULRV2 view and renderer.\nint legacyV2main(ULRAppArgs & myArgs)\n{\n\n\t{\n\n\t\tconst bool doVSync = !myArgs.vsync;\n\t\t// rendering size\n\t\tuint rendering_width = myArgs.rendering_size.get()[0];\n\t\tuint rendering_height = myArgs.rendering_size.get()[1];\n\t\t// window size\n\t\tuint win_width = myArgs.win_width;\n\t\tuint win_height = myArgs.win_height;\n\n\t\t// Window setup\n\t\tsibr::Window\t\twindow(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs);\n\n\t\tBasicIBRScene::Ptr\t\tscene(new BasicIBRScene(myArgs));\n\t\t\n\n\t\t// check rendering size\n\t\trendering_width = (rendering_width <= 0) ? scene->cameras()->inputCameras()[0]->w() : rendering_width;\n\t\trendering_height = (rendering_height <= 0) ? scene->cameras()->inputCameras()[0]->h() : rendering_height;\n\t\tVector2u usedResolution(rendering_width, rendering_height);\n\n\t\tconst unsigned int sceneResWidth = usedResolution.x();\n\t\tconst unsigned int sceneResHeight = usedResolution.y();\n\n\t\tULRV2View::Ptr\tulrView(new ULRV2View(scene, sceneResWidth, sceneResHeight));\n\t\tulrView->setNumBlend(40, 40);\n\n\t\t// Raycaster.\n\t\tstd::shared_ptr<sibr::Raycaster> raycaster = std::make_shared<sibr::Raycaster>();\n\t\traycaster->init();\n\t\traycaster->addMesh(scene->proxies()->proxy());\n\n\t\t// Camera handler for main view.\n\t\tsibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler());\n\t\tgeneralCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster);\n\n\n\t\t// Add views to mvm.\n\t\tMultiViewManager        multiViewManager(window, false);\n\t\tmultiViewManager.addIBRSubView(\"ULR view\", ulrView, usedResolution, ImGuiWindowFlags_ResizeFromAnySide);\n\t\tmultiViewManager.addCameraForView(\"ULR view\", generalCamera);\n\n\t\t// Top view\n\t\tconst std::shared_ptr<sibr::SceneDebugView>    topView(new sibr::SceneDebugView(scene, generalCamera, myArgs));\n\t\tmultiViewManager.addSubView(\"Top view\", topView, usedResolution);\n\n\t\t// Soft Visibility masks\n\t\tstd::vector<sibr::ImageL32F>\tdepths3D(scene->cameras()->inputCameras().size());\n\t\tif (myArgs.softVisibility) {\n\n\t\t\tint numImages = (int)scene->cameras()->inputCameras().size();\n\n\t\t\tfor (int imId = 0; imId < numImages; ++imId) {\n\n\t\t\t\tsibr::InputCamera cam = *scene->cameras()->inputCameras()[imId];\n\t\t\t\tsibr::Vector3f camPos = cam.position();\n\t\t\t\tint w = cam.w();\n\t\t\t\tint h = cam.h();\n\n\t\t\t\tsibr::DepthRenderer rendererDepth(cam.w(), cam.h());\n\n\t\t\t\tsibr::ImageL32F depthMapSIBR(w, h);\n\n\t\t\t\trendererDepth.render(cam, scene->proxies()->proxy());\n\t\t\t\trendererDepth._depth_RT->readBack(depthMapSIBR);\n\n\t\t\t\tdepths3D[imId] = sibr::ImageL32F(w, h, 0);\n\n\t\t\t\tfor (int i = 0; i < w; i++) {\n\t\t\t\t\tfor (int j = 0; j < h; j++) {\n\t\t\t\t\t\tsibr::Vector2i pixelPos(i, j);\n\t\t\t\t\t\tsibr::Vector3f pos3dMesh(cam.unprojectImgSpaceInvertY(pixelPos, depthMapSIBR(i, j).x()));\n\t\t\t\t\t\tdepths3D[imId](i, j).x() = (camPos - pos3dMesh).norm();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//showFloat(depthMapSIBR);\n\t\t\t\t//showFloat(depths3D[imId]);\n\t\t\t}\n\t\t}\n\n\n\t\tif (myArgs.masks) {\n\t\t\tif (!myArgs.maskParams.get().empty()) {\n\t\t\t\tulrView->loadMasks(scene, usedResolution.x(), usedResolution.y(), myArgs.maskParams.get(), \"\", \".png\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tulrView->loadMasks(scene, usedResolution.x(), usedResolution.y());\n\t\t\t}\n\n\t\t}\n\t\tif (myArgs.invert) {\n\t\t\tulrView->_ulr->setDoInvertMasks(true);\n\t\t}\n\t\tif (myArgs.alphas) {\n\t\t\tulrView->_ulr->setAreMasksBinary(false);\n\t\t}\n\t\tif (myArgs.poisson) {\n\t\t\tulrView->noPoissonBlend(true);\n\t\t}\n\n\t\tTexture2DArrayLum32F\tsoft_visibility_textures;\n\t\tif (myArgs.softVisibility) {\n\t\t\tint numImages = (int)scene->cameras()->inputCameras().size();\n\t\t\tstd::vector<sibr::ImageL32F>\tsoftVisibilities(numImages);\n\n\t\t\tint wSoft = depths3D[0].w();\n\t\t\tint hSoft = depths3D[0].h();\n#pragma omp parallel for\n\t\t\tfor (int imId = 0; imId < numImages; ++imId) {\n\n\t\t\t\tsibr::ImageRGBA tempVisibility;\n\t\t\t\tulrView->computeVisibilityMap(depths3D[imId], tempVisibility);\n\t\t\t\tsoftVisibilities[imId] = std::move(sibr::convertRGBAtoL32F(tempVisibility));\n\t\t\t\tcv::Mat temp;\n\t\t\t\tcv::resize(softVisibilities[imId].toOpenCV(), temp, cv::Size(wSoft, hSoft), 0, 0, cv::INTER_NEAREST);\n\t\t\t\tsoftVisibilities[imId].fromOpenCV(temp);\n\t\t\t}\n\n\t\t\tsoft_visibility_textures.createFromImages(softVisibilities, SIBR_GPU_LINEAR_SAMPLING | SIBR_FLIP_TEXTURE);\n\n\t\t\tulrView->_ulr->getSoftVisibilityMaps() = &soft_visibility_textures;\n\t\t\tulrView->_ulr->getSoftVisibilityThreshold() = 20.0f;\n\t\t\t//ulrView->noPoissonBlend(true);\n\n\t\t}\n\n\t\tif (myArgs.pathFile.get() !=  \"\" ) {\n\t\t\tgeneralCamera->getCameraRecorder().loadPath(myArgs.pathFile.get(), usedResolution.x(), usedResolution.y());\n\t\t\tgeneralCamera->getCameraRecorder().recordOfflinePath(myArgs.outPath, multiViewManager.getIBRSubView(\"ULR view\"), \"ulr\");\n\t\t\tif( !myArgs.noExit )\n\t\t\t\texit(0);\n\t\t}\n\n\t\tCHECK_GL_ERROR;\n\t\twhile (window.isOpened())\n\t\t{\n\n\n\t\t\tsibr::Input::poll();\n\t\t\twindow.makeContextCurrent();\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape))\n\t\t\t\twindow.close();\n\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Z)) {\n\t\t\t\tif (ulrView->_ulr->getSoftVisibilityMaps()) {\n\t\t\t\t\tstd::cout << \" disabling soft visibility\" << std::endl;\n\t\t\t\t\tulrView->_ulr->getSoftVisibilityMaps() = nullptr;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstd::cout << \" enabling soft visibility\" << std::endl;\n\t\t\t\t\tulrView->_ulr->getSoftVisibilityMaps() = &soft_visibility_textures;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmultiViewManager.onUpdate(sibr::Input::global());\n\t\t\tmultiViewManager.onRender(window);\n\t\t\twindow.swapBuffer();\n\t\t\tCHECK_GL_ERROR;\n\t\t}\n\t}\n\n\n\treturn EXIT_SUCCESS;\n}\n\n/// Use ULRV1 view and renderer.\nint legacyV1main(ULRAppArgs & myArgs)\n{\n\n\t{\n\n\t\tconst bool doVSync = !myArgs.vsync;\n\t\t// rendering size\n\t\tuint rendering_width = myArgs.rendering_size.get()[0];\n\t\tuint rendering_height = myArgs.rendering_size.get()[1];\n\t\t// window size\n\t\tuint win_width = myArgs.win_width;\n\t\tuint win_height = myArgs.win_height;\n\n\t\t// Window setup\n\t\tsibr::Window        window(PROGRAM_NAME, sibr::Vector2i(50, 50), myArgs);\n\n\t\t// Setup IBR\n\t\tBasicIBRScene::Ptr\t\tscene(new BasicIBRScene(myArgs));\n\t\t\n\t\t// check rendering size\n\t\trendering_width = (rendering_width <= 0) ? scene->cameras()->inputCameras()[0]->w() : rendering_width;\n\t\trendering_height = (rendering_height <= 0) ? scene->cameras()->inputCameras()[0]->h() : rendering_height;\n\t\tVector2u usedResolution(rendering_width, rendering_height);\n\n\t\tconst unsigned int sceneResWidth = usedResolution.x();\n\t\tconst unsigned int sceneResHeight = usedResolution.y();\n\n\t\tULRView::Ptr\tulrView(new ULRView(scene, sceneResWidth, sceneResHeight));\n\t\tulrView->setNumBlend(50, 50);\n\n\t\t// Raycaster.\n\t\tstd::shared_ptr<sibr::Raycaster> raycaster = std::make_shared<sibr::Raycaster>();\n\t\traycaster->init();\n\t\traycaster->addMesh(scene->proxies()->proxy());\n\n\t\t// Camera handler for main view.\n\t\tsibr::InteractiveCameraHandler::Ptr generalCamera(new InteractiveCameraHandler());\n\t\tgeneralCamera->setup(scene->cameras()->inputCameras(), Viewport(0, 0, (float)usedResolution.x(), (float)usedResolution.y()), raycaster);\n\n\n\t\t// Add views to mvm.\n\t\tMultiViewManager        multiViewManager(window, false);\n\t\tmultiViewManager.addIBRSubView(\"ULR view\", ulrView, usedResolution, ImGuiWindowFlags_ResizeFromAnySide);\n\t\tmultiViewManager.addCameraForView(\"ULR view\", generalCamera);\n\n\t\t// Top view\n\t\tconst std::shared_ptr<sibr::SceneDebugView>    topView(new sibr::SceneDebugView(scene, generalCamera, myArgs));\n\t\tmultiViewManager.addSubView(\"Top view\", topView);\n\n\t\tif (myArgs.pathFile.get() !=  \"\" ) {\n\t\t\tgeneralCamera->getCameraRecorder().loadPath(myArgs.pathFile.get(), usedResolution.x(), usedResolution.y());\n\t\t\tgeneralCamera->getCameraRecorder().recordOfflinePath(myArgs.outPath, multiViewManager.getIBRSubView(\"ULR view\"), \"ulr\");\n\t\t\tif( !myArgs.noExit )\n\t\t\t\texit(0);\n\t\t}\n\n\n\t\twhile (window.isOpened())\n\t\t{\n\t\t\tsibr::Input::poll();\n\t\t\twindow.makeContextCurrent();\n\t\t\tif (sibr::Input::global().key().isPressed(sibr::Key::Escape))\n\t\t\t\twindow.close();\n\n\t\t\tmultiViewManager.onUpdate(sibr::Input::global());\n\t\t\tmultiViewManager.onRender(window);\n\t\t\twindow.swapBuffer();\n\t\t\tCHECK_GL_ERROR\n\t\t}\n\n\t}\n\treturn EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/apps/ulrv2/resources/sibr_ulrv2_app.ini",
    "content": "\n[Window][ULRV2 Settings (ULR view)]\nPos=50,50\nSize=350,300\nCollapsed=0\n\n[Window][ULRV3 Settings (ULR view)]\nPos=50,50\nSize=350,300\nCollapsed=0\n\n[Window][Camera ULR view]\nPos=400,50\nSize=550,300\nCollapsed=0\n\n[Window][Top view settings]\nPos=950,50\nSize=450,300\nCollapsed=0\n\n[Window][Metrics##0]\nPos=1400,50\nSize=450,300\nCollapsed=0\n\n[Window][ULR view]\nPos=50,350\nSize=900,600\nCollapsed=0\n\n[Window][Top view]\nPos=950,350\nSize=900,600\nCollapsed=0\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/documentation/IBR_ULR.dox",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/*!\n@page ulrPage Unstructured Lumigraph Rendering (ULR)\n\n\\section ulr_intro Introduction\n\nThis *Project* contains three specialized implementations of Unstructured Lumigraph Rendering \\[Buelher 2001\\]; we refer the reader to that paper for technical details. In contrast to the original paper, our method blends input images on a *per-pixel* basis. In a nutshell the rendering apps in this *Project* first render a depth buffer for the novel (current) view, then for a subset *S* of input images reproject each visible 3D point into each image in *S*, and then blend the result according to the blending weights as defined in the original paper.\n\nThis *Project* contains two renderings apps: `SIBR_ulr_app` which is the original (slow) version, `SIBR_ulrv2_app` that contains the second and third versions of the ULR.\n\nThe original version of ULR first selects a subset of the original images using angle and position criteria on the CPU, then uses a multi-pass ping-pong shader to rank the 4 best-cost images for each pixel, by storing these four color values and their weights in rendertargets and iteratively updating them while keeping them sorted. \n\nVersion 2 removes the need for the ping-pong best-cost image update, by iterating on the selected cameras in one shader. The corresponding images and depth maps are passed as a list of textures. The maximum supported number of cameras is determined by the maximum texture slot count in fragment shaders.\n\nVersion 3 stores images and depth maps as texture 2D arrays, and pack all cameras in a uniform buffer object. This allows all cameras to be considered and do the selection entirely on the GPU. The maximum supported number of cameras is determined by the maximum texture array layer count and uniform buffer object size.\n\n\\subsection ulr_authors Authors\n\nThis *Project* was written by: Gaurav Chaurasia, Sebastien Bonopera, Theo Thonat, Simon Rodriguez, Sebastien Bonopera, Jerome Esnault, Siddhant Prakashand George Drettakis, who also supervised the entire *Project*.\n\n<hr>\n\n\\section ulr_howToUse How to use\n\n\\subsection ulr_binary Use the binary distribution\n\nThe easiest way to use *SIBR* to run ULR is to download the binary distribution. All steps described below, including all preprocessing for your datasets will work using this code.\nDownload the distribution from the page: https://sibr.gitlabpages.inria.fr/download.html (Core, 57Mb); unzip the file and rename the directory \"install\".\n\n\n\\subsection ulr_howToUse_checkout Checkout the code\n\nULR is already available as part of the SIBR Core code. You will need to checkout SIBR Core as mentioned in \\ref sibr_checkout .\n\n\\subsection ulr_howToUse_configure Configuration\n\nAs for most of the projects, ULR can be configured through SIBR Core CMake configuration by selecting `SIBR_IBR_ULR` variable before running the configuration (see \\ref sibr_configure_cmake).\n\n\\subsection ulr_howToUse_build Build & Install\n\nYou can build and install ULR via running ALL_BUILD and/or INSTALL in sibr_projects.sln solution (as mentioned in \\ref sibr_compile Compiling\n) or through `sibr_ulr*` specific targets in sibr_projects.sln solution.\nDont forget to build INSTALL if you use ALL_BUILD.\n\n\\subsection ulr_howToUse_run Run\n\nAfter installing ULR, several apps should be available in `install\\bin`, notably :\n\n- sibr_ulr_app.exe (or sibr_ulr_app_d.exe / sibr_ulr_app_rwdi.exe depending on the configuration of the target) : this is the legacy version of ULR\n- sibr_ulrv2_app.exe (or sibr_ulrv2_app_d.exe / sibr_ulrv2_app_rwdi.exe depending on the configuration of the target) : this updated version gives you the choice between three different implementations of ULR (with GPU optimization and other tweaks)\n\nBoth can be run by running the executable with a path to a working dataset:\n\n\tsibr_ulrv2_app.exe --path PATH_TO_DATASET\n\nOur interactive viewer has a main view running the algorithm and a top view to visualize the position of the calibrated cameras. By default you are in WASD mode, and can toggle to trackball using the \"y\" key. Please see the page [Interface](https://sibr.gitlabpages.inria.fr/docs/develop/howto_sibr_useful_objects.html) for more details on the interface.\n\nFor example datasets see below \\ref ulr_howToUse_example_datasets.\n\n\\subsection Playing paths from the command line\n\nPaths can be played by the ulr renderers by running the renderer in offscreen mode:\n```\nSIBR_ulrv2_app.exe --path PATH_TO_DATASET --offscreen --pathFile path.(out|lookat|tst|path) [--outPath optionalOutputPath --noExit]\n```\nBy default, the application exits when this operation is performed. This is the easiest way to compare algorithms, although interactive options exist for some *Projects*.\n\n<hr>\n\n\\subsection ulr_howToUse_dataset Datasets\n\n\\subsubsection ulr_howToUse_dataset_structure Dataset structure\n\nA ULR dataset only requires standard SfM/MVS data to function: to generate such a dataset from your input images see:\n\n\\ref howto_generate_dataset\n\nA standard SIBR dataset contains *cameras* and the *mesh* required for the algorithm to run; no additional preprocessing is required.\n\n\\subsubsection ulr_howToUse_example_datasets Example Datasets\n\nSome example datasets can be found here:\n\thttps://repo-sam.inria.fr/fungraph/sibr-datasets/datasets.html\n\nYou dan download the ULR only package for each dataset. \nFeel free to download and experiment, for example with (now famous) Museum Front 27 dataset. Goto the install\\bin directory:\n\n```\n\twget https://repo-sam.inria.fr/fungraph/sibr-datasets/museum_front27_ulr.zip\n\tsibr_ulrv2_app.exe --path museum_front27\\sibr_cm\n```\n\n<hr>\n\n\\subsubsection ulr_howToUse_run_cliOptions CLI options\n\n | name                 | type      | Required  | default value             | description                                   |\n | -------------------- | --------- | --------- | ------------------------- | --------------------------------------------- |\n | **Basic app options**            |||||\n | appPath              | string    | false     |   \"./\"                    | define a custom app path                      |\n | help                 | bool      | false     |   false                   | display this help message                     |\n | **Basic window options**         |||||\n | width                | int       | false     |   720                     | initial window width                          |\n | height               | int       | false     |   480                     | initial window height                         |\n | vsync                | int       | false     |   1                       | enable vertical sync                          |\n | fullscreen           | bool      | false     |   false                   | set the window to fullscreen                  |\n | hd                   | bool      | false     |   false                   | rescale UI elements for high-density screens  |\n | nogui                | bool      | false     |   false                   | do not use ImGui                              |\n | gldebug              | bool      | false     |   false                   | enable OpenGL error callback                  |\n | **Basic rendering options**      |||||\n | scene                | string    | false     |   \"scene_metadata.txt\"    | scene metadata file                           |\n | rendering-size       | Vector2i  | false     |   { 0, 0 }                | size at which rendering is performed          |\n | texture-width        | int       | false     |   0                       | size of the input data in memory              |\n | texture-ratio        | float     | false     |   1.0f                    |                                               |\n | rendering-mode       | int       | false     |   RENDERMODE_MONO         | select mono (0) or stereo (1) rendering mode  |\n | focal-pt             | Vector3f  | false     |   { 0.0f, 0.0f, 0.0f }    |                                               |\n | colmap_fovXfovY_flag | Switch    | false     |   false                   |                                               |\n | **Basic dataset options**        |||||\n | path                 | string    | true      |                           | path to the dataset root                      |\n | dataset_type         | string    | false     |   \"\"                      | type of dataset                               |\n | **ULR specific options**         |||||\n | v                    | int       | false     |   3                       | ULR implementation version                    |\n | soft-visibility      | bool      | false     |   false                   | generate and use soft visibility masks        |\n | masks                | bool      | false     |   false                   | use binary masks                              |\n | masks-param          | string    | false     |   \"\"                      |                                               |\n | masks-param-extra    | string    | false     |   \"\"                      |                                               |\n | invert               | bool      | false     |   false                   | invert the masks                              |\n | alphas               | bool      | false     |   false                   |                                               |\n | poisson-blend        | bool      | false     |   false                   | apply Poisson-filling to the ULR result       |\n\n\n\\subsection ulr_references References\n\\[Buehler 2001\\] C. Buehler, M. Bosse, L. McMillan, S. Gortler, and M. Cohen. \"Unstructured lumigraph\nrendering.\" In Proceedings SIGGRAPH 2001, pp. 425-432. ACM, 2001. https://www.ics.uci.edu/~gopi/ICS280Win02/UnstructuredLumigraph.pdf\n*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/documentation/ulr_doc.cmake",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nset(PROJECT_PAGE \"ulrPage\")\nset(PROJECT_LINK \"https://gitlab.inria.fr/sibr/sibr_core\")\nset(PROJECT_TYPE \"SAMPLES\")"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/CMakeLists.txt",
    "content": "# Copyright (C) 2020, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n# \n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n# \n# For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n\n\nset(SIBR_PROJECT \"ulr\")\nproject(sibr_${SIBR_PROJECT})\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\")\nsource_group(\"Source Files\" FILES ${SOURCES})\n\nfile(GLOB SHADERS \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\")\nsource_group(\"Source Files\\\\shaders\" FILES ${SHADERS})\n\nfile(GLOB SOURCES \"*.cpp\" \"*.h\" \"*.hpp\" \"shaders/*.frag\" \"shaders/*.vert\" \"shaders/*.geom\")\n\n\n## Specify target rules\nadd_library(${PROJECT_NAME} SHARED ${SOURCES})\n\ninclude_directories(${Boost_INCLUDE_DIRS} .)\nif(WIN32)\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\tglfw3\n\tsibr_system\n\tsibr_view\n\tsibr_assets\n\tsibr_renderer\n)\nelse()\ntarget_link_libraries(${PROJECT_NAME}\n\t${Boost_LIBRARIES}\n\t${ASSIMP_LIBRARIES}\n\t${GLEW_LIBRARIES}\n\t${OPENGL_LIBRARIES}\n\t${OpenCV_LIBRARIES}\n\t${GLFW_LIBRARY}\n\tsibr_system\n\tsibr_view\n\tsibr_assets\n\tsibr_renderer\n)\nendif\n\nadd_definitions( -DSIBR_EXP_ULR_EXPORTS -DBOOST_ALL_DYN_LINK  )\n\nset_target_properties(${PROJECT_NAME} PROPERTIES FOLDER \"projects/${SIBR_PROJECT}/renderer\")\n\n## High level macro to install in an homogen way all our ibr targets\ninclude(install_runtime)\nibr_install_target(${PROJECT_NAME}\n    INSTALL_PDB                         ## mean install also MSVC IDE *.pdb file (DEST according to target type)\n\tSHADERS ${SHADERS}\n\tRSC_FOLDER ${SIBR_PROJECT}\n\n    #STANDALONE  ${INSTALL_STANDALONE}   ## mean call install_runtime with bundle dependencies resolution\n    COMPONENT   ${PROJECT_NAME}_install ## will create custom target to install only this project\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/Config.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include <core/system/Config.hpp>\n# include <core/system/CommandLineArgs.hpp>\n\n# ifdef SIBR_OS_WINDOWS\n#  ifdef SIBR_STATIC_DEFINE\n#    define SIBR_EXPORT\n#    define SIBR_NO_EXPORT\n#  else\n#    ifndef SIBR_EXP_ULR_EXPORT\n#      ifdef SIBR_EXP_ULR_EXPORTS\n/* We are building this library */\n#        define SIBR_EXP_ULR_EXPORT __declspec(dllexport)\n#      else\n/* We are using this library */\n#        define SIBR_EXP_ULR_EXPORT __declspec(dllimport)\n#      endif\n#    endif\n#    ifndef SIBR_NO_EXPORT\n#      define SIBR_NO_EXPORT\n#    endif\n#  endif\n# else\n#  define SIBR_EXP_ULR_EXPORT\n# endif\n\nnamespace sibr {\n\n\t/// Arguments for all ULR applications.\n\tstruct ULRAppArgs :\n\t\tvirtual BasicIBRAppArgs {\n\t\tArg<int> version = { \"v\", 3, \"ULR implementation version\" };\n\t\tArgSwitch softVisibility = { \"soft-visibility\", false, \"generate and use soft visibility masks\" };\n\t\tArg<bool> masks = { \"masks\" , \"use binary masks\" };\n\t\tArg<std::string> maskParams = { \"masks-param\" , \"\" };\n\t\tArg<std::string> maskParamsExtra = { \"masks-param-extra\" , \"\" };\n\t\tArg<bool> invert = { \"invert\", \"invert the masks\" };\n\t\tArg<bool> alphas = { \"alphas\", \"\" };\n\t\tArg<bool> poisson = { \"poisson-blend\", \"apply Poisson-filling to the ULR result\" };\n\t};\n\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRRenderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n# include \"Config.hpp\"\n# include <core/assets/Resources.hpp>\n# include <projects/ulr/renderer/ULRRenderer.hpp>\n\nnamespace sibr { \nULRRenderer::ULRRenderer(const uint w, const uint h)\n{\n\t\n    std::cerr << \"\\n[ULRenderer] initializing\" << std::endl;\n    std::cerr << \"\\n[ULRenderer] loading shaders\" << std::endl;\n    _ulrShaderPass1 .init(\"ULR1\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr1.frag\"));\n    _ulrShaderPass2 .init(\"ULR2\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr2.frag\"));\n    _depthShader.init(\"Depth\",\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.vert\"),\n\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.frag\"));\n\n    _ulrShaderPass1_nCamPos .init(_ulrShaderPass1, \"nCamPos\");\n    _ulrShaderPass1_iCamPos .init(_ulrShaderPass1, \"iCamPos\");\n    _ulrShaderPass1_iCamDir .init(_ulrShaderPass1, \"iCamDir\");\n    _ulrShaderPass1_iCamProj.init(_ulrShaderPass1, \"iCamProj\");\n    _ulrShaderPass1_occlTest .init(_ulrShaderPass1, \"occlTest\");\n\t_ulrShaderPass1_masking .init(_ulrShaderPass1, \"doMasking\");\n    _depthShader_proj.init(_depthShader,\"proj\");\n\n    std::cerr << \"\\n[ULRenderer] creating render targets\" << std::endl;\n\n    _ulr0_RT .reset(new sibr::RenderTargetRGBA32F(w,h,0,4));\n    _ulr1_RT .reset(new sibr::RenderTargetRGBA32F(w,h,0,4));\n    _depth_RT.reset(new sibr::RenderTargetRGBA32F(w,h));\n\n\t_doOccl = true;\n}\n\nvoid\nULRRenderer::process(std::vector<uint>& imgs_ulr, const sibr::Camera& eye,\n\t\tconst sibr::BasicIBRScene::Ptr scene,\n\t\tstd::shared_ptr<sibr::Mesh>& altMesh,\n\t\tconst std::vector<std::shared_ptr<RenderTargetRGBA32F> >& inputRTs,\n\t\tIRenderTarget& dst)\n{\n\t// Get a new camera with z_near ~ 0\n\tsibr::Camera new_cam = eye;\n\tnew_cam.znear( 0.001f );\n\n    // render geometry to depth map\n\n\tglViewport(0,0, _depth_RT->w(), _depth_RT->h());\n    _depth_RT->clear();\n    _depth_RT->bind();\n\n    _depthShader.begin();\n    _depthShader_proj.set(new_cam.viewproj());\n\n\tglClear(GL_DEPTH_BUFFER_BIT);\n\n\tif( altMesh != nullptr )\n\t\taltMesh->render( true, true); // enable depth test - disable back culling\n\telse\n\t\tscene->proxies()->proxy().render( true, true); // enable depth test - disable back culling\n\n    _depthShader.end();\n    _depth_RT->unbind();\n\n    // ULR pass 1\n    _ulr0_RT->clear(sibr::Vector4f(0,0,0,1e5));\n    _ulr1_RT->clear(sibr::Vector4f(0,0,0,1e5));\n    for (uint i=0; i<imgs_ulr.size(); i++) {\n        if (scene->cameras()->inputCameras()[imgs_ulr[i]]->isActive()) {\n\t\t\tconst sibr::InputCamera& cam = *scene->cameras()->inputCameras()[imgs_ulr[i]];\n            std::swap(_ulr0_RT, _ulr1_RT);\n            _ulrShaderPass1.begin();\n            _ulr0_RT->bind();\n            glViewport(0,0, _ulr0_RT->w(), _ulr0_RT->h());\n            glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, inputRTs[imgs_ulr[i]]->texture());\n            glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, _depth_RT->texture());\n            glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, _ulr1_RT->texture(0));\n            glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, _ulr1_RT->texture(1));\n            glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, _ulr1_RT->texture(2));\n            glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D, _ulr1_RT->texture(3));\n\t\t\tif (useMasks()){\n\t\t\t\t\tglActiveTexture(GL_TEXTURE6);\n\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, getMasks()[imgs_ulr[i]]->texture());\n\t\t\t}\n\t\t\t_ulrShaderPass1_masking.set(useMasks());\n\t\t\t_ulrShaderPass1_nCamPos.set(eye.position());\n            _ulrShaderPass1_iCamPos.set(cam.position());\n            _ulrShaderPass1_iCamDir.set(cam.dir());\n            _ulrShaderPass1_iCamProj.set(cam.viewproj());\n            _ulrShaderPass1_occlTest.set(_doOccl);\n\t\t\tsibr::RenderUtility::renderScreenQuad();\n            _ulr0_RT->unbind();\n            _ulrShaderPass1.end();\n\n#if 0\n\t\t\t{\n\t\t\t\tsibr::ImageRGBA32F img2;\n\t\t\t\t_ulr0_RT->readBack(img2);\n\t\t\t\tshow(img2); // DEBUG\n\t\t\t}\n#endif\n        }\n    }\n\n    // ULR pass 2\n    // enable depth test to ensure depth of proxy is written to\n    // depth buffer by the shader\n//    glEnable(GL_DEPTH_TEST); /// \\todo TODO -- breaks with fences -- check\n    _ulrShaderPass2.begin();\n    dst.clear();\n    dst.bind();\n    glViewport(0,0, dst.w(), dst.h());\n    glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _depth_RT->texture());\n    glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, _ulr0_RT->texture(0));\n    glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, _ulr0_RT->texture(1));\n    glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, _ulr0_RT->texture(2));\n    glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, _ulr0_RT->texture(3));\n\tsibr::RenderUtility::renderScreenQuad();\n    dst.unbind();\n    _ulrShaderPass2.end();\n\n#if 0\n\tsibr::ImageRGB img;\n\tdst.readBack(img);\n\tshow(img); // DEBUG\n#endif\n\n}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRRenderer.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"Config.hpp\"\r\n# include <core/system/Config.hpp>\r\n# include <core/graphics/Texture.hpp>\r\n# include <core/graphics/Shader.hpp>\r\n# include <core/graphics/Mesh.hpp>\r\n# include <core/renderer/RenderMaskHolder.hpp>\r\n# include <core/scene/BasicIBRScene.hpp>\r\n\r\nnamespace sibr { \r\n\r\n\t/** Legacy ULR renderer. Process each input image separately and accumulate them.\r\n\t **/\r\n\tclass SIBR_EXP_ULR_EXPORT ULRRenderer : public RenderMaskHolder\r\n\t{\r\n\t\tSIBR_CLASS_PTR(ULRRenderer);\r\n\r\n\t\t/** Constructor.\r\n\t\t *\\param w rendering width\r\n\t\t *\\param h rendering height\r\n\t\t */\r\n\t\tULRRenderer(const uint w, const uint h);\r\n\r\n\t\t/** Render.\r\n\t\t *\\param imgs_ulr vector of selected image IDs\r\n\t\t *\\param eye novel viewpoint\r\n\t\t *\\param scene the scene to render\r\n\t\t *\\param altMesh optional alternative mesh\r\n\t\t *\\param inputRTs the RGBD input images\r\n\t\t *\\param output destination target\r\n\t\t */\r\n\t\tvoid process(std::vector<uint>& imgs_ulr, const sibr::Camera& eye,\r\n\t\t\tconst sibr::BasicIBRScene::Ptr scene,\r\n\t\t\tstd::shared_ptr<sibr::Mesh>& altMesh,\r\n\t\t\tconst std::vector<std::shared_ptr<RenderTargetRGBA32F> >& inputRTs,\r\n\t\t\tIRenderTarget& output);\r\n\r\n\t\t/** Toggle occlusion testing.\r\n\t\t *\\param val should occlusion testing be performed\r\n\t\t */\r\n\t\tvoid doOccl(bool val) { _doOccl = val; }\r\n\r\n\tprivate:\r\n\t\tsibr::RenderTargetRGBA32F::Ptr _ulr0_RT;\r\n\t\tsibr::RenderTargetRGBA32F::Ptr _ulr1_RT;\r\n\t\tsibr::RenderTargetRGBA32F::Ptr _depth_RT;\r\n\r\n\t\tsibr::GLShader _ulrShaderPass1;\r\n\t\tsibr::GLShader _ulrShaderPass2;\r\n\t\tsibr::GLShader _depthShader;\r\n\r\n\t\tsibr::GLParameter _ulrShaderPass1_nCamPos;\r\n\t\tsibr::GLParameter _ulrShaderPass1_iCamPos;\r\n\t\tsibr::GLParameter _ulrShaderPass1_iCamDir;\r\n\t\tsibr::GLParameter _ulrShaderPass1_iCamProj;\r\n\t\tsibr::GLParameter _ulrShaderPass1_occlTest;\r\n\t\tsibr::GLParameter _ulrShaderPass1_masking;\r\n\t\tsibr::GLParameter _depthShader_proj;\r\n\r\n\t\tbool\t_doOccl;\r\n\r\n   };\r\n\r\n} /*namespace sibr*/\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV2Renderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n# include \"Config.hpp\"\n# include <core/assets/Resources.hpp>\n# include <map>\n# include \"ULRV2Renderer.hpp\"\n#include \"core/system/String.hpp\"\n\nnamespace sibr {\n\t\tULRV2Renderer::ULRV2Renderer(const std::vector<InputCamera::Ptr> & cameras, const uint w, const uint h, const unsigned int maxCams, const std::string & fShader, const std::string & vShader, const bool facecull)\n\t\t{\n\t\t\t\t\t\n\t\t\t// Count how many cameras are active in the scene.\n\t\t\tunsigned int numActiveCams = 0;\n\t\t\tfor (auto & cam : cameras) {\n\t\t\t\tif (cam->isActive()) {\n\t\t\t\t\t++numActiveCams;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_numCams = maxCams == 0 ? numActiveCams : std::min(maxCams, numActiveCams);\n\t\t\t\n\t\t\tsetupULRshader(fShader,vShader);\n\n\t\t\t_depthRT.reset(new sibr::RenderTargetRGBA32F(w, h));\n\n\t\t\t_doOccl = true;\n\t\t\t_areMasksBinary = true;\n\t\t\t_doInvertMasks = false;\n\t\t\t_discardBlackPixels = true;\n\t\t\t_shouldCull = facecull;\n\t\t\t_epsilonOcclusion = 1e-2f;\n\t\t\t_soft_visibility_threshold = 30.0f;\n\t\t\tsoft_visibility_maps = nullptr;\n\t\t}\n\n\t\tvoid ULRV2Renderer::setupULRshader(const std::string & fShader, const std::string & vShader)\n\t\t{\n\t\t\tstd::cerr << \"[ULRV2Renderer] Trying to initialize shaders for at most \" << _numCams << \" cameras.\" << std::endl;\n\t\t\t/// \\todo TODO SR: handle the case were we require more shader texture slots than we are allowed too.\n\t\t\t/// Seems to be around 90 on Quadro K4200. We can either do multiple passes (fi 40 cams per pass),\n\t\t\t/// or try to use texture arrays to avoid this problem.\n\t\t\t/// If this happens to you, lower the maximum number of cameras picked by the ulr algo.\n\n\t\t\tGLShader::Define::List defines;\n\t\t\tdefines.emplace_back(\"NUM_CAMS\", _numCams);\n\t\t\t_ulrShader.init(\"ULRV2\",\n\t\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"\") + \"/\" + vShader + \".vert\"),\n\t\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"\") + \"/\" + fShader + \".frag\", defines));\n\t\t\t_depthShader.init(\"ULRV2Depth\",\n\t\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.vert\"),\n\t\t\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.frag\", defines));\n\n\t\t\t_proj.init(_depthShader, \"proj\");\n\t\t\t_ncamPos.init(_ulrShader, \"ncam_pos\");\n\t\t\t_occTest.init(_ulrShader, \"occ_test\");\n\t\t\t_areMasksBinaryGL.init(_ulrShader, \"is_binary_mask\");\n\t\t\t_doInvertMasksGL.init(_ulrShader, \"invert_mask\");\n\t\t\t_discardBlackPixelsGL.init(_ulrShader, \"discard_black_pixels\");\n\t\t\t_doMask.init(_ulrShader, \"doMasking\");\n\t\t\t_camCount.init(_ulrShader, \"camsCount\");\n\t\t\t_use_soft_visibility.init(_ulrShader, \"useSoftVisibility\");\n\t\t\t_soft_visibility_threshold.init(_ulrShader, \"softVisibilityThreshold\");\n\t\t\t_epsilonOcclusion.init(_ulrShader, \"epsilonOcclusion\");\n\n\t\t\t_icamProj.resize(_numCams);\n\t\t\t_icamPos.resize(_numCams);\n\t\t\t_icamDir.resize(_numCams);\n\t\t\t_inputRGB.resize(_numCams);\n\t\t\t_masks.resize(_numCams);\n\t\t\t_selected_cams.resize(_numCams);\n\n\t\t\t_ulrShader.begin();\n\t\t\tfor (uint i = 0; i<(uint)_numCams; i++)\n\t\t\t{\n\t\t\t\t_icamProj[i].init(_ulrShader, sibr::sprint(\"icam_proj[%d]\", i));\n\t\t\t\t_icamPos[i].init(_ulrShader, sibr::sprint(\"icam_pos[%d]\", i));\n\t\t\t\t_icamDir[i].init(_ulrShader, sibr::sprint(\"icam_dir[%d]\", i));\n\t\t\t\t_selected_cams[i].init(_ulrShader, sibr::sprint(\"selected_cams[%d]\", i));\n\t\t\t\t_inputRGB[i].init(_ulrShader, sibr::sprint(\"input_rgb[%d]\", i));\n\t\t\t\t_inputRGB[i].set(i + 2);  // location 0 and 1 reserved.s\n\t\t\t\t_masks[i].init(_ulrShader, sibr::sprint(\"masks[%d]\", i));\n\t\t\t\t_masks[i].set(GLuint(_numCams + i + 2));\n\n\t\t\t}\n\t\t\t_ulrShader.end();\n\n\t\t}\n\t\t\n\t\tvoid\n\t\t\tULRV2Renderer::process(const std::vector<uint>& imgs_ulr, const sibr::Camera& eye,\n\t\t\t\tconst sibr::BasicIBRScene::Ptr& scene,\n\t\t\t\tstd::shared_ptr<sibr::Mesh>& altMesh,\n\t\t\t\tconst std::vector<std::shared_ptr<RenderTargetRGBA32F> >& inputRTs,\n\t\t\t\tIRenderTarget& dst)\n\t\t{\n\t\t\t// Get a new camera with z_near ~ 0\n\t\t\tsibr::Camera new_cam = eye;\n\t\t\t//new_cam.znear(0.001f);\n\n\n\t\t\tglViewport(0, 0, _depthRT->w(), _depthRT->h());\n\t\t\t_depthRT->bind();\n\t\t\tglClearColor(0, 0, 0, 1);\n\t\t\tglClearDepth(1.0);\n\t\t\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\t\t\t_depthShader.begin();\n\t\t\t_proj.set(new_cam.viewproj());\n\t\t\tif (altMesh != nullptr) {\n\t\t\t\taltMesh->render(true, _shouldCull); // enable depth test - disable back culling\n\t\t\t} else {\n\t\t\t\tscene->proxies()->proxy().render(true, _shouldCull);\n\t\t\t}\n\t\t\t_depthShader.end();\n\t\t\t_depthRT->unbind();\n\t\t\t\n\t\t\tglViewport(0, 0, dst.w(), dst.h());\n\t\t\tdst.clear();\n\t\t\tdst.bind();\n\n\t\t\t_ulrShader.begin();\n\t\t\t\n\t\t\t_ncamPos.set(eye.position());\n\t\t\t_occTest.set(_doOccl);\n\t\t\t_areMasksBinaryGL.set(_areMasksBinary);\n\t\t\t_doInvertMasksGL.set(_doInvertMasks);\n\t\t\t_discardBlackPixelsGL.set(_discardBlackPixels);\n\t\t\t_doMask.set(useMasks());\n\t\t\t_epsilonOcclusion.send();\n\n\t\t\tCHECK_GL_ERROR\n\n\t\t\t_use_soft_visibility.set(soft_visibility_maps != nullptr && soft_visibility_maps->handle());\n\n\t\t\tCHECK_GL_ERROR\n\n\t\t\tglActiveTexture(GL_TEXTURE0);\n\t\t\tglBindTexture(GL_TEXTURE_2D, _depthRT->texture());\n\n\t\t\tCHECK_GL_ERROR\n\t\t\t\n\t\t\tif (_use_soft_visibility) {\n\t\t\t\t//std::cout << \"using soft visib\" << std::endl;\n\t\t\t\t_soft_visibility_threshold.send();\n\n\t\t\t\tCHECK_GL_ERROR;\n\n\t\t\t\tglActiveTexture(GL_TEXTURE1);\n\t\t\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, soft_visibility_maps->handle());\n\n\t\t\t\tCHECK_GL_ERROR;\n\t\t\t}\n\n\t\t\tCHECK_GL_ERROR;\n\n\t\t\tint usedCamerasCount = 0;\n\t\t\t\n\t\t\tfor (int i = 0; i < std::min(imgs_ulr.size(), _numCams); ++i) {\n\t\t\t\t\n\t\t\t\tif (!scene->cameras()->inputCameras()[imgs_ulr[i]]->isActive()) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tauto& cam = *scene->cameras()->inputCameras()[imgs_ulr[i]];\n\t\t\t\t_icamPos[usedCamerasCount].set(cam.position());\n\t\t\t\t_icamDir[usedCamerasCount].set(cam.dir());\n\t\t\t\t_icamProj[usedCamerasCount].set(cam.viewproj());\n\t\t\t\t_selected_cams[usedCamerasCount].set((int)imgs_ulr[i]);\n\t\t\t\tglActiveTexture(GL_TEXTURE0 + usedCamerasCount + 2);\n\t\t\t\tglBindTexture(GL_TEXTURE_2D, inputRTs[imgs_ulr[i]]->texture());\n\n\t\t\t\tif (useMasks()) {\n\t\t\t\t\tglActiveTexture(GL_TEXTURE0 + (int)_numCams + usedCamerasCount + 2);\n\t\t\t\t\tglBindTexture(GL_TEXTURE_2D, getMasks()[imgs_ulr[i]]->texture());\n\t\t\t\t}\n\t\t\t\t++usedCamerasCount;\n\t\t\t}\n\n\t\t\tCHECK_GL_ERROR;\n\n\t\t\t_camCount.set(usedCamerasCount);\n\t\t\t\n\t\t\tCHECK_GL_ERROR;\n\n\t\t\t//glDisable(GL_DEPTH_TEST);\n\t\t\tRenderUtility::renderScreenQuad();\n\n\t\t\tCHECK_GL_ERROR;\n\n\t\t\t_ulrShader.end();\n\t\t\tdst.unbind();\n\n\t\t}\n\n\n\n\t} /*namespace sibr*/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV2Renderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"Config.hpp\"\n# include <core/system/Config.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/renderer/RenderMaskHolder.hpp>\n\nnamespace sibr { \n\n\t/** Second version of the ULR render. use separate samplers for each input image.\n\t */\n\tclass SIBR_EXP_ULR_EXPORT ULRV2Renderer : public RenderMaskHolder\n\t{\n\t\tSIBR_CLASS_PTR(ULRV2Renderer);\n\n\t\t/** Constructor.\n\t\t *\\param cameras input cameras\n\t\t *\\param w rendering width\n\t\t *\\param h rendering height\n\t\t *\\param maxCams maximum number of cameras selcted for rendering a frame\n\t\t *\\param fShader name of the fragment shader\n\t\t *\\param vShader name of the vertex shader\n\t\t *\\param facecull should backface culling be performed during the prepass.\n\t\t **/\n\t\tULRV2Renderer(const std::vector<InputCamera::Ptr> & cameras, const uint w, const uint h, const unsigned int maxCams = 0, const std::string & fShader = \"ulr/ulr_v2\", const std::string & vShader = \"ulr/ulr_v2\", const bool facecull = true);\n\n\t\t/** Setup the ULR shaders.\n\t\t *\\param fShader name of the fragment shader\n\t\t *\\param vShader name of the vertex shader\n\t\t **/\n\t\tvoid setupULRshader(const std::string & fShader = \"ulr/ulr_v2\", const std::string & vShader = \"ulr/ulr_v2\");\n\n\t\t/** Render.\n\t\t *\\param imgs_ulr vector of selected image IDs\n\t\t *\\param eye novel viewpoint\n\t\t *\\param scene the scene to render\n\t\t *\\param altMesh optional alternative mesh\n\t\t *\\param inputRTs the RGBD input images\n\t\t *\\param dst destination target\n\t\t */\n\t\tvoid process(const std::vector<uint>& imgs_ulr, const sibr::Camera& eye,\n\t\t\tconst sibr::BasicIBRScene::Ptr& scene,\n\t\t\tstd::shared_ptr<sibr::Mesh>& altMesh,\n\t\t\tconst std::vector<std::shared_ptr<RenderTargetRGBA32F> >& inputRTs,\n\t\t\tIRenderTarget& dst);\n\n\t\t/** Should occlusion testing be performed.\n\t\t *\\param val true if testing should occur\n\t\t */\n\t\tvoid doOccl(bool val) { _doOccl = val; }\n\n\t\t/** \\return a reference to the occlusion threshold */\n\t\tfloat & epsilonOcclusion() { return _epsilonOcclusion; }\n\n\t\t/** Are the mask smooth values or binary.\n\t\t *\\param val true if they are binary\n\t\t */\n\t\tvoid setAreMasksBinary(bool val) { _areMasksBinary = val; }\n\n\t\t/** Should the masks be inverted.\n\t\t *\\param val true if they should\n\t\t */\n\t\tvoid setDoInvertMasks(bool val) { _doInvertMasks = val; }\n\n\t\t/** Should black pixels be ignored when accumulating colors.\n\t\t *\\param val true if they should be ignored\n\t\t */\n\t\tvoid setDiscardBlackPixels(bool val) { _discardBlackPixels = val; }\n\n\t\t/** Should backface culling be performed.\n\t\t *\\param val true if it should\n\t\t */\n\t\tvoid setCulling(bool val) { _shouldCull = val; }\n\n\t\t/** \\return a pointer to the soft visibility texture array if it exists */\n\t\tTexture2DArrayLum32F * & getSoftVisibilityMaps(void) { return soft_visibility_maps; }\n\n\t\t/** \\return a reference to the soft visibility threshold. */\n\t\tsibr::GLuniform<float> & getSoftVisibilityThreshold() { return _soft_visibility_threshold; }\n\n\t\t/** \\return a pointer to the ULR OpenGL program. */\n\t\tsibr::GLShader * getProgram() { return &_ulrShader; }\n\n\t\t/** \\return the number of cameras */\n\t\tsize_t getNumCams() { return _numCams; }\n\n\tpublic:\n\t\tsibr::RenderTargetRGBA32F::Ptr _depthRT; ///< the prepass render target.\n\n\tprivate:\n\t\t\n\t\tsibr::GLShader _ulrShader;\n\t\tsibr::GLShader _depthShader;\n\n\t\tstd::vector<sibr::GLParameter>\t_icamProj;\n\t\tstd::vector<sibr::GLParameter>\t_icamPos;\n\t\tstd::vector<sibr::GLParameter>\t_icamDir;\n\t\tstd::vector<sibr::GLParameter>\t_inputRGB;\n\t\tstd::vector<sibr::GLParameter>\t_masks;\n\t\tstd::vector<sibr::GLuniform<int> >\t_selected_cams;\n\n\t\tTexture2DArrayLum32F * soft_visibility_maps;\n\t\tsibr::GLuniform<float> _soft_visibility_threshold;\n\t\tsibr::GLuniform<bool> _use_soft_visibility;\n\n\t\tsibr::GLParameter _occTest;\n\t\tsibr::GLParameter _areMasksBinaryGL;\n\t\tsibr::GLParameter _doInvertMasksGL;\n\t\tsibr::GLParameter _discardBlackPixelsGL;\n\t\tsibr::GLParameter _doMask;\n\t\tsibr::GLParameter _ncamPos;\n\t\tsibr::GLParameter _camCount;\n\t\tsibr::GLParameter _proj;\n\t\tsibr::GLuniform<float> _epsilonOcclusion;\n\n\t\tbool\t_doOccl;\n\t\tbool\t_areMasksBinary;\n\t\tbool\t_doInvertMasks;\n\t\tbool\t_discardBlackPixels;\n\t\tbool _shouldCull;\n\t\tsize_t _numCams;\n\t\n   };\n\n} /*namespace sibr*/\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV2View.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n/// \\todo TODO: make shorter\n#include \"Config.hpp\"\n#include <core/assets/Resources.hpp>\n#include <projects/ulr/renderer/ULRV2View.hpp>\n#include <core/system/Vector.hpp>\n#include <core/graphics/Texture.hpp>\n#include <core/graphics/GUI.hpp>\n#include <map>\n\nnamespace sibr { \n\tULRV2View::~ULRV2View( )\n{\n\t_altMesh.reset();\n}\n\nULRV2View::ULRV2View( const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h ) :\n\t_scene(ibrScene),\n\t\tsibr::ViewBase(render_w, render_h), \n\t_renderMode(ULRV2View::RenderMode::NORMAL), _singleCamId(0)\n{\n\t_altMesh.reset();\n\t_altMesh = nullptr;\n\t_numDistUlr = 4, _numAnglUlr = 0;\n    std::cerr << \"[ULR] setting number of images to blend \"<< _numDistUlr << \" \" << _numAnglUlr << std::endl;\n\n\t_ulr.reset(new ULRV2Renderer(ibrScene->cameras()->inputCameras(), render_w, render_h, _numDistUlr + _numAnglUlr));\n\tuint w = render_w;\n\tuint h = render_h;\n\t_poissonRT.reset(new RenderTargetRGBA(w, h, SIBR_CLAMP_UVS));\n\t_blendRT.reset(new RenderTargetRGBA(w, h, SIBR_CLAMP_UVS));\n\t_poisson.reset(new PoissonRenderer(w,h));\n\t_poisson->enableFix() = true;\n\t_inputRTs = ibrScene->renderTargets()->inputImagesRT();\n\n\ttestAltlULRShader = false;\n}\n\nvoid ULRV2View::onRenderIBR( sibr::IRenderTarget& dst, const sibr::Camera& eye ) {\n    // Select subset of input images for ULR\n\t//std::vector<uint> imgs_ulr = chosen_cameras(eye);\n\tstd::vector<uint> imgs_ulr = chosen_cameras_angdist(eye);\n\t_scene->cameras()->debugFlagCameraAsUsed(imgs_ulr);\n\t//std::cout << imgs_ulr.size() << \" \" << std::flush;\n\n\tif (_renderMode == RenderMode::ONLY_ONE_CAM) {\n\t\tfor (auto i : imgs_ulr) {\n\t\t\t//std::cout << i << \" \";\n\t\t}\n\t\tint id_cam = std::max(0, std::min((int)imgs_ulr.size()-1, _singleCamId));\n\t\tint cam = imgs_ulr[id_cam];\n\t\timgs_ulr = std::vector<uint>(1, cam);\n\t\t//std::cout << \" -> ulr debug single cam, id : \" << _singleCamId << \", cam : \";\n\t\t//for (auto i : imgs_ulr) {\n\t\t\t//std::cout << i << \" \";\n\t\t//}\n\t\t//std::cout << std::endl;\n\t} else if(_renderMode == RenderMode::LEAVE_ONE_OUT) {\n\t\tstd::vector<uint> new_imgs_ulr;\n\t\tfor(const auto & i : imgs_ulr) {\n\t\t\t\tif(int(i) != _singleCamId) {\n\t\t\t\t\tnew_imgs_ulr.emplace_back(i);\n\t\t\t\t}\n\t\t}\n\t\timgs_ulr = new_imgs_ulr;\n\t}\n\n\tif (_noPoissonBlend) {\n\t\t_ulr->process(\n\t\t\timgs_ulr,\n\t\t\teye,\n\t\t\t_scene,\n\t\t\t_altMesh,\n\t\t\t_inputRTs,\n\t\t\tdst);\n\n\t}  else {\n\t\t\t_ulr->process(\n\t\t\t\t/* input -- images chosen */ imgs_ulr, \n\t\t\t\t/* input -- camera position */ eye, \n\t\t\t\t/* input -- scene */ _scene, \n\t\t\t\t/* input -- alt mesh if available */ _altMesh, \n\t\t\t\t/* input -- input RTs -- can be RGB or alpha */  _inputRTs,\n\t\t\t\t/* output */ *_blendRT);\n\n\t\t\t_poisson->process(\n\t\t\t\t\t_blendRT,\n\t\t\t\t\t_poissonRT);\n\n\n\t\t\tblit(*_poissonRT, dst);\n\t}\n}\n\nvoid ULRV2View::onUpdate(Input & input)\n{\n\tif (input.key().isReleased(sibr::Key::Tab)) {\n\t\ttestAltlULRShader = !testAltlULRShader;\n\t\tif (testAltlULRShader) {\n\t\t\t_ulr->setupULRshader(\"ulr_v2_alt\");\n\t\t} else {\n\t\t\t_ulr->setupULRshader();\n\t\t}\n\t\tstd::cout << \"ULR using \" << (testAltlULRShader ? \"all cams\" : \"standard ulr\") << std::endl;\n\t}\n}\n\nvoid ULRV2View::onGUI() {\n\t\tconst std::string guiName = \"ULRV2 Settings (\" + name() + \")\";\n\t\tif(ImGui::Begin(guiName.c_str())) {\n\t\t\t\n\t\t\tImGui::PushScaledItemWidth(80);\n\t\t\tconst bool v1_changed = ImGui::InputInt(\"#Dist\", &_numDistUlr, 1, 10);\n\t\t\tImGui::SameLine();\n\t\t\tconst bool v2_changed = ImGui::InputInt(\"#Angle\", &_numAnglUlr, 1, 10);\n\t\t\tImGui::PopItemWidth();\n\n\t\t\tif (v1_changed || v2_changed) {\n\t\t\t\tsetNumBlend(_numDistUlr, _numAnglUlr);\n\t\t\t}\n\n\t\t\t\n\n\t\t\tImGui::Checkbox(\"Disable Poisson\", &_noPoissonBlend);\n\t\t\tImGui::Checkbox(\"Poisson fix\", &_poisson->enableFix());\n\n\t\t\tImGui::PushScaledItemWidth(120);\n\t\t\tImGui::InputFloat(\"Epsilon occlusion\", &_ulr->epsilonOcclusion(), 0.001f, 0.01f);\n\t\t\tImGui::Combo(\"Rendering mode\", (int*)(&_renderMode), \"Standard\\0One image\\0Leave one out\\0\\0\");\n\t\t\tif (ImGui::InputInt(\"Selected image\", &_singleCamId, 1, 10)) {\n\t\t\t\t_renderMode = RenderMode::ONLY_ONE_CAM;\n\t\t\t}\n\t\t\t_singleCamId = sibr::clamp(_singleCamId, 0, (int)_scene->cameras()->inputCameras().size() - 1);\n\t\t\t//ImGui::SliderInt(\"Selected image\", &_singleCamId, 0, scene().inputCameras().size() - 1);\n\t\t\tImGui::PopItemWidth();\n\n\t\t}\n\t\tImGui::End();\n}\n\nvoid ULRV2View::computeVisibilityMap(const sibr::ImageL32F & depthMap, sibr::ImageRGBA & out)\n{\n\tconst float threshold_3d = 2.5f;\n\tconst std::vector<sibr::Vector2i> shifts = { { 1,0 },{ 0,1 },{ -1,0 },{ 0,-1 } };\n\n\tsibr::ImageL8 edgeMap(depthMap.w(), depthMap.h(), 255);\n\tfor (uint i = 0; i < depthMap.h(); i++) {\n\t\tfor (uint j = 0; j < depthMap.w(); j++) {\n\t\t\tsibr::Vector2i pos(j, i);\n\t\t\tfloat currentDepth = depthMap(pos).x();\n\t\t\tfor (const auto & shift : shifts) {\n\t\t\t\tVector2i npos = pos + shift;\n\t\t\t\tif (!depthMap.isInRange(npos)) { continue; }\n\t\t\t\tif (std::abs(depthMap(npos).x() - currentDepth) > threshold_3d) {\n\t\t\t\t\tedgeMap(pos).x() = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcv::Mat distance(depthMap.h(), depthMap.w(), CV_32FC1);\n\tcv::distanceTransform(edgeMap.toOpenCVnonConst(), distance, cv::DIST_L2, cv::DIST_MASK_PRECISE);\n\n\tsibr::ImageL32F outF;\n\toutF.fromOpenCV(distance);\n\tout = sibr::convertL32FtoRGBA(outF);\n\n}\n\n\t// -----------------------------------------------------------------------\n\nstd::vector<uint> ULRV2View::chosen_cameras(const sibr::Camera& eye) {\n    std::vector<uint> imgs_id;\n    std::multimap<float,uint> distMap;\t\t\t\t\t\t\t\t\t// distance wise closest input cameras\n\tstd::multimap<float,uint> dang;\t\t\t\t\t\t\t\t\t// angular distance from inputs to novel camera\n    for (uint i=0; i< _scene->cameras()->inputCameras().size(); i++ ) {\n        const sibr::InputCamera& inputCam = *_scene->cameras()->inputCameras()[i];\n        if (inputCam.isActive()) {\n\t\t\t// Convert following to Eigen versions\n            float dist = sibr::distance(inputCam.position(), eye.position());\n            float angle = sibr::dot(inputCam.dir(),eye.dir());\n                distMap.insert(std::make_pair(dist,i));\t\t\t\t\t// sort distances in increasing order\n\t\t\t\tdang.insert(std::make_pair( acos(angle),i));\t\t\t\t// sort angles in increasing order\n        }\n    }\n\tfor (uint i=0; i< _scene->cameras()->inputCameras().size(); i++) {\n        const sibr::InputCamera& inputCam = *_scene->cameras()->inputCameras()[i];\n        if (inputCam.isActive() && distMap.size() <= (_numDistUlr+_numAnglUlr)/2 ) {\n            float dist = sibr::distance(inputCam.position(),eye.position());\n            distMap.insert(std::make_pair(dist,i));\t\t\t\t\t// sort distances in increasing order\n\t\t\t}\n\t}\n\n    std::multimap<float,uint>::const_iterator d_it(distMap.begin());\t// select the _numDistUlr closest cameras\n\tfor (int i=0; d_it!=distMap.end() && i<_numDistUlr; d_it++,i++) {\n        imgs_id.push_back(d_it->second);\n    }\n\n\tstd::multimap<float,uint>::const_iterator a_it(dang.begin());    // select the NUM_ANG_ULR closest cameras\n\tfor (int i=0; a_it!=dang.end() && i<_numAnglUlr; a_it++,i++) {\n        imgs_id.push_back(a_it->second);\n    }\n\n\tstd::sort( imgs_id.begin(), imgs_id.end() );\t\t\t\t// Avoid repetitions\n\timgs_id.erase( std::unique( imgs_id.begin(), imgs_id.end() ), imgs_id.end() );\n\n\tSIBR_ASSERT(imgs_id.size() <= _numDistUlr + _numAnglUlr);\n    return imgs_id;\n}\n\nstd::vector<uint> ULRV2View::chosen_cameras_angdist(const sibr::Camera & eye)\n{\n\tconst auto & cams = _scene->cameras()->inputCameras();\n\tstd::vector<uint> out;\n\n\t// sort angle / dist combined\n\tstruct camAng\n\t{\n\t\tcamAng() {}\n\t\tcamAng(float a, float d, int i) : ang(a), dist(d), id(i) {}\n\t\tfloat ang, dist;\n\t\tint id;\n\t\tstatic bool compare(const camAng & a, const camAng & b) { return a.ang / a.dist > b.ang / b.dist;  }\n\t};\n\n\tint total_size = _numAnglUlr + _numDistUlr;\n\n\tstd::vector<camAng> allAng;\n\tfor (int id = 0; id < (int)cams.size(); ++id) {\n\t\tconst auto & cam = *cams[id];\n        float angle = sibr::dot(cam.dir(),eye.dir());\n\t\t// reject back facing \n\t\tif( angle > 0.001 && cam.isActive()) {\n\t\t\tfloat dist =  (cam.position() - eye.position()).norm();\n\t\t\tallAng.push_back(camAng(angle, dist, id));\t\t\n\t\t}\n\t}\n\n\tstd::vector<bool> wasChosen(cams.size(), false);\n\n\tstd::sort(allAng.begin(), allAng.end(), camAng::compare);\n\tfor (int id = 0; id < std::min((int)allAng.size(), total_size); ++id) {\n\t\tout.push_back(allAng[id].id);\n\t\twasChosen[allAng[id].id] = true;\n\t}\n\n\tfor (int id = 0; id < (int)cams.size(); ++id) {\n\t\tif (!wasChosen[id] && out.size() < total_size && cams[id]->isActive()) {\n\t\t\tout.push_back(id);\n\t\t}\n\t}\n\n\treturn out;\n}\n\nstd::vector<uint> ULRV2View::chosen_camerasNew(const sibr::Camera & eye)\n{\n\tconst auto & cams = _scene->cameras()->inputCameras();\n\n\tstruct camDist\n\t{\n\t\tcamDist() {}\n\t\tcamDist(float d, int i) : dist(d), id(i) {}\n\t\tfloat dist;\n\t\tint id;\n\t\tstatic bool compare(const camDist & a, const camDist & b) { return a.dist < b.dist;  }\n\t};\n\n\tstd::vector<camDist> allDist;\n\tfor (int id = 0; id < (int)cams.size(); ++id) {\n\t\tconst auto & cam = *cams[id];\n\t\tallDist.push_back(camDist((cam.position() - eye.position()).norm(), id));\n\t}\n\tstd::sort(allDist.begin(), allDist.end(), camDist::compare);\n\tstd::vector<uint> out;\n\tfor (int id = 0; id < std::min((int)cams.size(),(int)_numDistUlr); ++id) {\n\t\tout.push_back(allDist[id].id);\n\t}\n\treturn out;\n}\n\nvoid ULRV2View::setNumBlend(short int dist, short int angle)\n{\n\t// Backup masks.\n\tauto copyMasks = _ulr->getMasks();\n\n\t_numDistUlr = dist, _numAnglUlr = angle;\n\tstd::cerr << \"[ULR] setting number of images to blend \" << _numDistUlr << \" \" << _numAnglUlr << std::endl;\n\t_ulr.reset(new ULRV2Renderer(_scene->cameras()->inputCameras(), _scene->cameras()->inputCameras()[0]->w(), _scene->cameras()->inputCameras()[0]->h(), _numDistUlr + _numAnglUlr));\n\t_ulr->setMasks(copyMasks);\n\t\n}\n\nvoid ULRV2View::loadMasks(const sibr::BasicIBRScene::Ptr& ibrScene, int w, int h, const std::string& maskDir, const std::string& preFileName, const std::string& postFileName\n) {\n\tstd::string finalMaskDir = (maskDir == \"\" ? ibrScene->data()->basePathName() + \"/masks/\" : maskDir);\n\tstd::string finalPostFileName = (postFileName == \"\" ? \"-mask.jpg\" : postFileName);\n\t_ulr->loadMasks(ibrScene, finalMaskDir, preFileName, finalPostFileName, w, h);\n}\n\nvoid ULRV2View::setMasks( const std::vector<RenderTargetLum::Ptr>& masks ) {\n\t\t_ulr->setMasks(masks);\n}\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV2View.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"Config.hpp\"\n# include <core/system/Config.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/view/ViewBase.hpp>\n# include \"core/scene/BasicIBRScene.hpp\"\n# include <core/renderer/CopyRenderer.hpp>\n# include <projects/ulr/renderer/ULRV2Renderer.hpp>\n# include <core/renderer/PoissonRenderer.hpp>\n\nnamespace sibr { \n\n\t/** View associated to ULRRenderer v2, providing interface and options. */\n\tclass SIBR_EXP_ULR_EXPORT ULRV2View : public sibr::ViewBase\n\t{\n\t\tSIBR_CLASS_PTR(ULRV2View);\n\n\t\t/** Camera selection mode. */\n\t\tenum class RenderMode { NORMAL = 0, ONLY_ONE_CAM = 1, LEAVE_ONE_OUT = 2 };\n\n\tpublic:\n\n\t\t/** Constructor.\n\t\t *\\param ibrScene the scene\n\t\t *\\param render_w rendering width\n\t\t *\\param render_h rendering height\n\t\t **/\n\t\tULRV2View( const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h );\n\n\t\t/** Destructor. */\n\t\t~ULRV2View();\n\n\t\t/** Render using the ULR algorithm.\n\t\t *\\param dst destination target\n\t\t *\\param eye novel viewpoint\n\t\t **/\n\t\tvirtual void onRenderIBR( sibr::IRenderTarget& dst, const sibr::Camera& eye );\n\n\t\t/** Update state absed on user inputs.\n\t\t *\\param input the view input\n\t\t **/\n\t\tvirtual void onUpdate(Input& input);\n\n\t\t/** Display GUI. */\n\t\tvirtual void onGUI() override;\n\n\t\t/** Select input cameras to use for rendering.\n\t\t *\\param eye the current viewpoint\n\t\t *\\return a list of camera indices.\n\t\t **/\n\t\tvirtual std::vector<uint> chosen_cameras(const sibr::Camera& eye) ;\n\n\t\t/** Select input cameras to use for rendering, based only on distance.\n\t\t *\\param eye the current viewpoint\n\t\t *\\return a list of camera indices.\n\t\t **/\n\t\tvirtual std::vector<uint> chosen_camerasNew(const sibr::Camera& eye);\n\n\t\t/** Select input cameras to use for rendering.\n\t\t *\\param eye the current viewpoint\n\t\t *\\return a list of camera indices.\n\t\t **/\n\t\tvirtual std::vector<uint> chosen_cameras_angdist(const sibr::Camera& eye);\n\n\t\t/** Set the altMesh and use instead of scene proxy.\n\t\t *\\param m mesh to use\n\t\t **/\n\t\tvoid\taltMesh(std::shared_ptr<sibr::Mesh> m)\t{ _altMesh = m; }\n\n\t\t/** Toggle occlusion testing.\n\t\t *\\param val should occlusion testing be performed\n\t\t */\n\t\tvoid\tdoOccl(bool val) { _ulr->doOccl(val); }\n\n\t\t/** \\return a pointer to the alt mesh if it exists */\n\t\tstd::shared_ptr<sibr::Mesh> \taltMesh()\t{ return _altMesh; }\n\n\t\t/** Set the number of cmaeras to select for blending.\n\t\t *\\param dist number of cameras for the distance criterion\n\t\t *\\param angle number of cameras for the angle criterion\n\t\t **/\n\t\tvoid\tsetNumBlend(short int dist, short int angle);\n\n\t\t/** Set the input RGBD textures.\n\t\t *\\param iRTs the new textures to use.\n\t\t */\n\t\tvoid\tinputRTs(const std::vector<std::shared_ptr<RenderTargetRGBA32F> >& iRTs) { _inputRTs = iRTs;}\n\n\t\t/** Set the masks for ignoring some regions of the input images.\n\t\t *\\param masks the new masks\n\t\t **/\n\t\tvoid\tsetMasks( const std::vector<RenderTargetLum::Ptr>& masks );\n\n\t\t/** Load masks from disk.\n\t\t *\\param ibrScene the scene\n\t\t *\\param w resolution width\n\t\t *\\param h resolution height\n\t\t *\\param maskDir masks directory path\n\t\t *\\param preFileName mask files prefix\n\t\t *\\param postFileName mask files suffix and extension\n\t\t */\n\t\tvoid\tloadMasks(\n\t\t\tconst sibr::BasicIBRScene::Ptr& ibrScene, int w, int h,\n\t\t\tconst std::string& maskDir = \"\",\n\t\t\tconst std::string& preFileName = \"\",\n\t\t\tconst std::string& postFileName = \"\"\n\t\t);\n\n\t\t/** Set the camera selection mode.\n\t\t *\\param mode the new mode. \n\t\t */\n\t\tvoid\t\tsetRenderMode(RenderMode mode) { _renderMode = mode; }\n\t\t/** \\return the camera selection mode. */\n\t\tRenderMode\tgetRenderMode() const { return _renderMode; }\n\n\t\t/** Set the view ID when in single view mode.\n\t\t *\\param id the camera id to use\n\t\t */\n\t\tvoid\t\tsetSingleViewId(int id) { _singleCamId = id; }\n\t\t/** \\return the current selected camera ID in single view mode. */\n\t\tint\t\t\tgetSingleViewId(void)  const { return _singleCamId; }\n\n\t\t/** Toggle poisson blending.\n\t\t *\\param val if true, Poisson blending is disabled.\n\t\t */\n\t\tvoid noPoissonBlend(bool val) { _noPoissonBlend = val; }\n\t\t/** \\return true if pOisson blending is disabled. */\n\t\tbool noPoissonBlend() const { return _noPoissonBlend; }\n\n\t\t/** Compute soft visibility map.\n\t\t *\\param depthMap view depth map\n\t\t *\\param out will contain the soft visibility map\n\t\t */\n\t\tvoid computeVisibilityMap(const sibr::ImageL32F & depthMap, sibr::ImageRGBA & out);\n\n\t\t/** \\return a pointer to the scene */\n\t\tconst std::shared_ptr<sibr::BasicIBRScene> & getScene() const { return _scene; }\n\n\tpublic:\n\t\tULRV2Renderer::Ptr\t\t_ulr; ///< ULRV2 renderer.\n\t\tPoissonRenderer::Ptr\t_poisson; ///< Poisson filling renderer.\n\n\tprotected:\n\t\t\n\t\tstd::shared_ptr<sibr::BasicIBRScene> _scene; ///< the current scene.\n\t\tstd::shared_ptr<sibr::Mesh>\t_altMesh; ///< For the cases when using a different mesh than the scene\n\t\tint _numDistUlr, _numAnglUlr; ///< Number of cameras to select for each criterion.\n\n\t\tstd::vector<std::shared_ptr<RenderTargetRGBA32F> > _inputRTs; ///< input RTs -- usually RGB but can be alpha or other\n\n\t\tbool _noPoissonBlend = false; ///< Runtime status of the poisson blend.\n\n\t\tRenderTargetRGBA::Ptr _blendRT; ///< ULR destination RT.\n\t\tRenderTargetRGBA::Ptr _poissonRT; ///< Poisson filling destination RT.\n\n\t\tRenderMode _renderMode; ///< Current camera selection mode.\n\t\tint _singleCamId; ///< Selected camera in single view mode.\n\n\t\tbool testAltlULRShader; ///< TT: to switch with alternate shader with tab\n\t};\n\n} /*namespace sibr*/ \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV3Renderer.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <projects/ulr/renderer/ULRV3Renderer.hpp>\n\n\n\nsibr::ULRV3Renderer::ULRV3Renderer(const std::vector<InputCamera::Ptr> & cameras, const uint w, const uint h, const std::string & fShader, const std::string & vShader, const bool facecull)\n{\n\t_backFaceCulling = facecull;\n\tfragString = fShader;\n\tvertexString = vShader;\n\t_maxNumCams = cameras.size();\n\t_camsCount = int(_maxNumCams);\n\n\t// Populate the cameraInfos array (will be uploaded to the GPU).\n\t_cameraInfos.clear();\n\t_cameraInfos.resize(_maxNumCams);\n\tfor (size_t i = 0; i < _maxNumCams; ++i) {\n\t\tconst auto & cam = *cameras[i];\n\t\t_cameraInfos[i].vp = cam.viewproj();\n\t\t_cameraInfos[i].pos = cam.position();\n\t\t_cameraInfos[i].dir = cam.dir();\n\t\t_cameraInfos[i].selected = cam.isActive();\n\t}\n\n\t// Compute the max number of cameras allowed.\n\tGLint maxBlockSize = 0, maxSlicesSize = 0;\n\tglGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &maxBlockSize);\n\tglGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &maxSlicesSize);\n\t// For each camera we store a matrix, 2 vecs3, 2 floats (including padding).\n\tconst unsigned int bytesPerCamera = 4 * (16 + 2 * 3 + 2);\n\tconst unsigned int maxCamerasAllowed = std::min((unsigned int)maxSlicesSize, (unsigned int)(maxBlockSize / bytesPerCamera));\n\tstd::cout << \"[ULRV3Renderer] \" << \"MAX_UNIFORM_BLOCK_SIZE: \" << maxBlockSize << \", MAX_ARRAY_TEXTURE_LAYERS: \" << maxSlicesSize << \", meaning at most \" << maxCamerasAllowed << \" cameras.\" << std::endl;\n\n\t// Create UBO.\n\t_uboIndex = 0;\n\tglGenBuffers(1, &_uboIndex);\n\tglBindBuffer(GL_UNIFORM_BUFFER, _uboIndex);\n\tglBufferData(GL_UNIFORM_BUFFER, sizeof(CameraUBOInfos)*_maxNumCams, &_cameraInfos[0], GL_DYNAMIC_DRAW);\n\tglBindBuffer(GL_UNIFORM_BUFFER, 0);\n\n\t// Setup shaders and uniforms.\n\tsetupShaders(fragString, vertexString);\n\n\t// Create the intermediate rendertarget.\n\t_depthRT.reset(new sibr::RenderTargetRGBA32F(w, h));\n\n\tCHECK_GL_ERROR;\n}\n\n\nvoid sibr::ULRV3Renderer::setupShaders(const std::string & fShader, const std::string & vShader)\n{\n\t// Create shaders.\n\tstd::cout << \"[ULRV3Renderer] Setting up shaders for \" << _maxNumCams << \" cameras.\" << std::endl;\n\tGLShader::Define::List defines;\n\tdefines.emplace_back(\"NUM_CAMS\", _maxNumCams);\n\tdefines.emplace_back(\"ULR_STREAMING\", 0);\n\n\t_ulrShader.init(\"ULRV3\",\n\t\tsibr::loadFile(sibr::getShadersDirectory(\"\") + \"/\" + vShader + \".vert\"),\n\t\tsibr::loadFile(sibr::getShadersDirectory(\"\") + \"/\" + fShader + \".frag\", defines));\n\t_depthShader.init(\"ULRV3Depth\",\n\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.vert\"),\n\t\tsibr::loadFile(sibr::getShadersDirectory(\"ulr\") + \"/ulr_intersect.frag\", defines));\n\n\t// Setup uniforms.\n\t_nCamProj.init(_depthShader, \"proj\");\n\t_nCamPos.init(_ulrShader, \"ncam_pos\");\n\t_occTest.init(_ulrShader, \"occ_test\");\n\t_useMasks.init(_ulrShader, \"doMasking\");\n\t_discardBlackPixels.init(_ulrShader, \"discard_black_pixels\");\n\t_epsilonOcclusion.init(_ulrShader, \"epsilonOcclusion\");\n\t_areMasksBinary.init(_ulrShader, \"is_binary_mask\");\n\t_invertMasks.init(_ulrShader, \"invert_mask\");\n\t_flipRGBs.init(_ulrShader, \"flipRGBs\");\n\t_showWeights.init(_ulrShader, \"showWeights\");\n\t_winnerTakesAll.init(_ulrShader, \"winner_takes_all\");\n\t_camsCount.init(_ulrShader, \"camsCount\");\n\t_gammaCorrection.init(_ulrShader, \"gammaCorrection\");\n\n\tCHECK_GL_ERROR;\n}\n\nvoid sibr::ULRV3Renderer::process(\n\tconst sibr::Mesh & mesh,\n\tconst sibr::Camera & eye,\n\tIRenderTarget & dst,\n\tconst sibr::Texture2DArrayRGB::Ptr & inputRGBs,\n\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\tbool passthroughDepth\n) {\n\t// Render the proxy positions in world space.\n\tprocess(mesh, eye, dst, inputRGBs->handle(), inputDepths, passthroughDepth);\n}\n\nvoid sibr::ULRV3Renderer::process(\n\tconst sibr::Mesh & mesh,\n\tconst sibr::Camera & eye,\n\tIRenderTarget & dst,\n\tuint inputRGBHandle,\n\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\tbool passthroughDepth\n) {\n\tif (_profiling) {\n\t\t_depthPassTimer.tic();\n\t}\n\t// Render the proxy positions in world space.\n\trenderProxyDepth(mesh, eye);\n\tif (_profiling) {\n\t\tglFinish();\n\t\t//std::cout << \"\\nDepth Pass: \" << _depthPassTimer.deltaTimeFromLastTic() << \" ms\" << std::endl;\n\t\t_depthCost.push_back(_depthPassTimer.deltaTimeFromLastTic());\n\t}\n\tif (_profiling) {\n\t\t_blendPassTimer.tic();\n\t}\n\t// Perform ULR blending.\n\trenderBlending(eye, dst, inputRGBHandle, inputDepths, passthroughDepth);\n\tif (_profiling) {\n\t\tglFinish();\n\t\t//std::cout << \"\\nBlend Pass: \" << _blendPassTimer.deltaTimeFromLastTic() << \" ms\" << std::endl;\n\t\t_blendCost.push_back(_blendPassTimer.deltaTimeFromLastTic());\n\t}\n}\n\nvoid sibr::ULRV3Renderer::updateCameras(const std::vector<uint> & camIds) {\n\t// Reset all cameras.\n\tfor(auto & caminfos : _cameraInfos) {\n\t\tcaminfos.selected = 0;\n\t}\n\t// Enabled the ones passed as indices.\n\tfor (const auto & camId : camIds) {\n\t\t_cameraInfos[camId].selected = 1;\n\t}\n\n\t// Update the content of the UBO.\n\tglBindBuffer(GL_UNIFORM_BUFFER, _uboIndex);\n\tglBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(CameraUBOInfos)*_maxNumCams, &_cameraInfos[0]);\n\tglBindBuffer(GL_UNIFORM_BUFFER, 0);\n}\n\nvoid sibr::ULRV3Renderer::stopProfile()\n{\n\tconst std::vector<std::string> names = { \"Depth Cost: \", \"Blend Cost: \"};\n\tconst  std::vector<std::vector<float>> counts = {\n\t\t_depthCost, _blendCost};\n\tstd::string profileStr = \"\";\n\t//profileStr = \"\";\n\n\tfor (int i = 0; i < names.size(); ++i) {\n\t\t// Compute metrics: min, max, avg, variance.\n\t\tdouble miniF = std::numeric_limits<double>::max();\n\t\tdouble maxiF = 0.0;\n\t\tdouble avgF = 0.0;\n\t\tfor (size_t tid = 0; tid < counts[i].size(); ++tid) {\n\t\t\tconst double ft = double(counts[i][tid]);\n\t\t\tavgF += ft;\n\t\t\tminiF = std::min(miniF, ft);\n\t\t\tmaxiF = std::max(maxiF, ft);\n\t\t}\n\t\tavgF /= double(counts[i].size());\n\t\tdouble varF = 0.0;\n\t\tfor (size_t tid = 0; tid < counts[i].size(); ++tid) {\n\t\t\tconst double residualF = double(counts[i][tid]) - avgF;\n\t\t\tvarF += residualF * residualF;\n\t\t}\n\t\tvarF /= double(int(counts[i].size()) - 1);\n\t\tprofileStr += \"-----------\\n\";\n\t\tprofileStr += names[i] + \" num frames: \" + std::to_string(counts[i].size()) + \"\\n\";\n\t\tprofileStr += names[i] + \" min/max: \" + std::to_string(miniF) + \"/\" + std::to_string(maxiF) + \"\\n\";\n\t\tprofileStr += names[i] + \" avg/stddev: \" + std::to_string(avgF) + \"/\" + std::to_string(std::sqrt(varF)) + \"\\n\";\n\t}\n\n\tstd::cout << profileStr << std::endl;\n}\n\nvoid sibr::ULRV3Renderer::renderProxyDepth(const sibr::Mesh & mesh, const sibr::Camera & eye)\n{\n\t// Bind and clear RT.\n\t_depthRT->bind();\n\tglViewport(0, 0, _depthRT->w(), _depthRT->h());\n\tglClearColor(0, 0, 0, 1);\n\tglClearDepth(1.0);\n\tglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);\n\n\t// Render the mesh from the current viewpoint, output positions.\n\t_depthShader.begin();\n\t_nCamProj.set(eye.viewproj());\n\n\tmesh.render(true, _backFaceCulling);\n\t\n\t_depthShader.end();\n\t_depthRT->unbind();\n}\n\nvoid sibr::ULRV3Renderer::renderBlending(\n\tconst sibr::Camera & eye,\n\tIRenderTarget & dst,\n\tuint inputRGBHandle,\n\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\tbool passthroughDepth\n) {\n\t// Bind and clear destination rendertarget.\n\tglViewport(0, 0, dst.w(), dst.h());\n\tif (_clearDst) {\n\t\tdst.clear();\n\t}\n\tdst.bind();\n\n\t_ulrShader.begin();\n\n\t// Uniform values.\n\t_nCamPos.set(eye.position());\n\t_occTest.send();\n\t_areMasksBinary.send();\n\t_invertMasks.send();\n\t_discardBlackPixels.send();\n\t_useMasks.send();\n\t_epsilonOcclusion.send();\n\t_flipRGBs.send();\n\t_showWeights.send();\n\t_camsCount.send();\n\t_winnerTakesAll.send();\n\t_gammaCorrection.send();\n\n\t// Textures.\n\tglActiveTexture(GL_TEXTURE0);\n\tglBindTexture(GL_TEXTURE_2D, _depthRT->handle());\n\n\tglActiveTexture(GL_TEXTURE1);\n\tglBindTexture(GL_TEXTURE_2D_ARRAY, inputRGBHandle);\n\n\tglActiveTexture(GL_TEXTURE2);\n\tglBindTexture(GL_TEXTURE_2D_ARRAY, inputDepths->handle());\n\n\t// Pass the masks if enabled and available.\n\tif (_useMasks && _masks.get()) {\n\t\tglActiveTexture(GL_TEXTURE3);\n\t\tglBindTexture(GL_TEXTURE_2D_ARRAY, _masks->handle());\n\t}\n\n\t// Bind UBO to shader, after all possible textures.\n\tglBindBuffer(GL_UNIFORM_BUFFER, _uboIndex);\n\tglBindBufferBase(GL_UNIFORM_BUFFER, 4, _uboIndex);\n\tglBindBuffer(GL_UNIFORM_BUFFER, 0);\n\n\tif (passthroughDepth) {\n\t\tglEnable(GL_DEPTH_TEST);\n\t} else {\n\t\tglDisable(GL_DEPTH_TEST);\n\t}\n\n\t// Perform ULR rendering.\n\tRenderUtility::renderScreenQuad();\n\tglDisable(GL_DEPTH_TEST);\n\n\t_ulrShader.end();\n\tdst.unbind();\n}\n\nvoid sibr::ULRV3Renderer::resize(const unsigned w, const unsigned h) {\n\t_depthRT.reset(new sibr::RenderTargetRGBA32F(w, h));\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV3Renderer.hpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#pragma once\n\n# include \"Config.hpp\"\n# include <core/system/Config.hpp>\n# include <core/graphics/Texture.hpp>\n# include <core/graphics/Shader.hpp>\n# include <core/graphics/Mesh.hpp>\n# include <core/renderer/RenderMaskHolder.hpp>\n# include <core/scene/BasicIBRScene.hpp>\n# include <core/system/SimpleTimer.hpp>\n\nnamespace sibr { \n\t\n\t/**\n\t * \\class ULRV3Renderer\n\t * \\brief Perform per-pixel Unstructured Lumigraph Rendering (Buehler et al., 2001). No selection is done on the CPU side.\n\t * Relies on texture arrays and uniform buffer objects to support a high number of cameras. \n\t */\n\tclass SIBR_EXP_ULR_EXPORT ULRV3Renderer : public RenderMaskHolderArray\n\t{\n\t\tSIBR_CLASS_PTR(ULRV3Renderer);\n\t\n\tpublic:\n\n\t\t/**\n\t\t * Constructor.\n\t\t * \\param cameras The input cameras to use.\n\t\t * \\param w The width of the internal rendertargets.\n\t\t * \\param h The height of the internal rendertargets.\n\t\t * \\param fShader An optional name of the fragment shader to use (default to ulr_v3).\n\t\t * \\param vShader An optional name of the vertex shader to use (default to ulr_v3).\n\t\t * \\param facecull Should the mesh be renderer with backface culling.\n\t\t */\n\t\tULRV3Renderer(const std::vector<InputCamera::Ptr> & cameras, \n\t\t\tconst uint w, const uint h, \n\t\t\tconst std::string & fShader = \"ulr/ulr_v3\", \n\t\t\tconst std::string & vShader = \"ulr/ulr_v3\", \n\t\t\tconst bool facecull = true\n\t\t);\n\n\t\t/**\n\t\t * Change the shaders used by the ULR renderer.\n\t\t * \\param fShader The name of the fragment shader to use.\n\t\t * \\param vShader The name of the vertex shader to use.\n\t\t */\n\t\tvirtual void setupShaders(\n\t\t\tconst std::string & fShader = \"ulr/ulr_v3\",\n\t\t\tconst std::string & vShader = \"ulr/ulr_v3\"\n\t\t);\n\n\t\t/**\n\t\t * Performs ULR rendering to a given destination rendertarget.\n\t\t * \\param mesh The mesh to use as geometric proxy.\n\t\t * \\param eye The novel viewpoint.\n\t\t * \\param dst The destination rendertarget.\n\t\t * \\param inputRGBs A texture array containing the input RGB images.\n\t\t * \\param inputDepths A texture array containing the input depth maps.\n\t\t * \\param passthroughDepth If true, depth from the position map will be output to the depth buffer for ulterior passes.\n\t\t */\n\t\tvirtual void process(\n\t\t\tconst sibr::Mesh & mesh,\n\t\t\tconst sibr::Camera& eye,\n\t\t\tIRenderTarget& dst,\n\t\t\tconst sibr::Texture2DArrayRGB::Ptr & inputRGBs,\n\t\t\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\t\t\tbool passthroughDepth = false\n\t\t\t);\n\n\t\t/**\n\t\t * Performs ULR rendering to a given destination rendertarget.\n\t\t * \\param mesh The mesh to use as geometric proxy.\n\t\t * \\param eye The novel viewpoint.\n\t\t * \\param dst The destination rendertarget.\n\t\t * \\param inputRGBHandle The handle of a texture array containing the input RGB images.\n\t\t * \\param inputDepths A texture array containing the input depth maps.\n\t\t * \\param passthroughDepth If true, depth from the position map will be output to the depth buffer for ulterior passes.\n\t\t */\n\t\tvirtual void process(\n\t\t\tconst sibr::Mesh & mesh,\n\t\t\tconst sibr::Camera& eye,\n\t\t\tIRenderTarget& dst,\n\t\t\tuint inputRGBHandle,\n\t\t\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\t\t\tbool passthroughDepth = false\n\t\t);\n\n\t\t/** \n\t\t *  Update which cameras should be used for rendering, based on the indices passed.\n\t\t *  \\param camIds The indices to enable.\n\t\t **/\n\t\tvoid updateCameras(const std::vector<uint> & camIds);\n\n\t\t/// Set the epsilon occlusion threshold.\n\t\tfloat & epsilonOcclusion() { return _epsilonOcclusion.get(); }\n\n\t\t/// Enable or disable the masks.\n\t\tbool & useMasks() { return _useMasks.get(); }\n\n\t\t/// Flip the RGB images before using them.\n\t\tbool & flipRGBs() { return _flipRGBs.get(); }\n\n\t\t/// Enable or diable occlusion testing.\n\t\tbool& occTest() { return _occTest.get(); }\n\n\t\t/// Show debug weights.\n\t\tbool & showWeights() { return _showWeights.get(); }\n\n\t\t/// Set winner takes all weights strategy\n\t\tbool & winnerTakesAll() { return _winnerTakesAll.get(); }\n\n\t\t/// Apply gamma correction to the output.\n\t\tbool & gammaCorrection() { return _gammaCorrection.get(); }\n\n\t\t/// Apply backface culling to the mesh.\n\t\tbool & backfaceCull() { return _backFaceCulling; }\n\n\t\t/** Resize the internal rendertargets.\n\t\t *\\param w the new width\n\t\t *\\param h the new height\n\t\t **/\n\t\tvoid resize(const unsigned int w, const unsigned int h);\n\n\t\t/// Should the final RT be cleared or not.\n\t\tbool & clearDst() { return _clearDst; }\n\n\t\t/// \\return The ID of the first pass position map texture.\n\t\tuint depthHandle() const { return _depthRT->texture(); }\n\n\t\tvoid startProfile() { \n\t\t\t_profiling = true; \n\t\t\t_depthCost.clear();\n\t\t\t_blendCost.clear();\n\t\t}\n\n\t\tvoid stopProfile();\n\n\t\t/**\n\t\t * Render the world positions of the proxy points in an intermediate rendertarget.\n\t\t * \\param mesh the proxy mesh.\n\t\t * \\param eye The novel viewpoint.\n\t\t */\n\t\tvirtual void renderProxyDepth(const sibr::Mesh & mesh, const sibr::Camera& eye);\n\n\t\t/**\n\t\t* Perform ULR blending.\n\t\t* \\param eye The novel viewpoint.\n\t\t* \\param dst The destination rendertarget.\n\t\t* \\param inputRGBHandle The handle to a texture array containing the input RGB images.\n\t\t* \\param inputDepths A texture array containing the input depth maps.\n\t\t* \\param passthroughDepth If true, depth from the position map will be output to the depth buffer for ulterior passes.\n\t\t*/\n\t\tvirtual void renderBlending(\n\t\t\tconst sibr::Camera& eye,\n\t\t\tIRenderTarget& dst,\n\t\t\tuint inputRGBHandle,\n\t\t\tconst sibr::Texture2DArrayLum32F::Ptr & inputDepths,\n\t\t\tbool passthroughDepth\n\t\t);\n\n\n\tprotected:\n\t\t/// Shader names.\n\t\tstd::string fragString, vertexString;\n\n\t\tsibr::GLShader _ulrShader;\n\t\tsibr::GLShader _depthShader;\n\n\t\tsibr::RenderTargetRGBA32F::Ptr\t\t_depthRT;\n\t\tGLuniform<Matrix4f>\t\t\t\t\t_nCamProj;\n\t\tGLuniform<Vector3f>\t\t\t\t\t_nCamPos;\n\n\t\tGLuniform<bool>\n\t\t\t_occTest = true,\n\t\t\t_useMasks = false,\n\t\t\t_discardBlackPixels = true,\n\t\t\t_areMasksBinary = true,\n\t\t\t_invertMasks = false,\n\t\t\t_flipRGBs = false,\n\t\t\t_showWeights = false,\n\t\t\t_winnerTakesAll = false,\n\t\t\t_gammaCorrection = false;\n\n\t\tsize_t _maxNumCams = 0;\n\t\tGLuniform<int> _camsCount = 0;\n\n\t\tGLuniform<float>\t\t\t\t\t_epsilonOcclusion = 0.01f;\n\t\tbool\t\t\t\t\t\t\t\t_backFaceCulling = true;\n\t\tbool\t\t\t\t\t\t\t\t_clearDst = true;\n\n\t\t/** Camera infos data structure shared between the CPU and GPU.\n\t\t\tWe have to be careful about alignment if we want to send those struct directly into the UBO. */\n\t\tstruct CameraUBOInfos {\t \n\t\t\tMatrix4f vp; ///< Matrix viewproj.\n\t\t\tVector3f pos; ///< Camera position.\n\t\t\tint selected = 0; ///< Is the camera selected (0/1).\n\t\t\tVector3f dir; ///< Camera direction.\n\t\t\tfloat dummy = 0.0f; ///< Padding to a multiple of 16 bytes for alignment on the GPU.\n\t\t};\n\n\t\tstd::vector<CameraUBOInfos> _cameraInfos;\n\t\tGLuint _uboIndex;\n\n\t\tbool\t\t_profiling = false;\n\t\tsibr::Timer\t_depthPassTimer;\n\t\tsibr::Timer\t_blendPassTimer;\n\t\tint\t\t\t\t\t\t\t\t\t\t\t_numFramesProfiling = 100;\n\t\tstd::string\t\t\t\t\t\t\t\t\t_profileStr = \"\";\n\t\tstd::vector<float>\t\t\t\t\t\t\t_depthCost, _blendCost;\n\n\t};\n\n\n} /*namespace sibr*/ \n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV3View.cpp",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#include <projects/ulr/renderer/ULRV3View.hpp>\n#include <core/graphics/GUI.hpp>\n\nsibr::ULRV3View::ULRV3View(const sibr::BasicIBRScene::Ptr & ibrScene, uint render_w, uint render_h) :\n\t_scene(ibrScene),\n\tsibr::ViewBase(render_w, render_h)\n{\n\tconst uint w = render_w;\n\tconst uint h = render_h;\n\n\t//  Renderers.\n\t_ulrRenderer.reset(new ULRV3Renderer(ibrScene->cameras()->inputCameras(), w, h));\n\t_poissonRenderer.reset(new PoissonRenderer(w, h));\n\t_poissonRenderer->enableFix() = true;\n\n\t// Rendertargets.\n\t_poissonRT.reset(new RenderTargetRGBA(w, h, SIBR_CLAMP_UVS));\n\t_blendRT.reset(new RenderTargetRGBA(w, h, SIBR_CLAMP_UVS));\n\n\t// Tell the scene we are a priori using all active cameras.\n\tstd::vector<uint> imgs_ulr;\n\tconst auto & cams = ibrScene->cameras()->inputCameras();\n\tfor(size_t cid = 0; cid < cams.size(); ++cid) {\n\t\tif(cams[cid]->isActive()) {\n\t\t\timgs_ulr.push_back(uint(cid));\n\t\t}\n\t}\n\t_scene->cameras()->debugFlagCameraAsUsed(imgs_ulr);\n}\n\nvoid sibr::ULRV3View::setScene(const sibr::BasicIBRScene::Ptr & newScene) {\n\t_scene = newScene;\n\tconst uint w = getResolution().x();\n\tconst uint h = getResolution().y();\n\n\tstd::string shaderName = \"ulr_v3\";\n\tif (_weightsMode == VARIANCE_BASED_W) {\n\t\tshaderName = \"ulr_v3_alt\";\n\t}\n\telse if (_weightsMode == ULR_FAST) {\n\t\tshaderName = \"ulr_v3_fast\";\n\t}\n\n\t_ulrRenderer.reset(new ULRV3Renderer(newScene->cameras()->inputCameras(), w, h, shaderName));\n\n\t// Tell the scene we are a priori using all active cameras.\n\tstd::vector<uint> imgs_ulr;\n\tconst auto & cams = newScene->cameras()->inputCameras();\n\tfor (size_t cid = 0; cid < cams.size(); ++cid) {\n\t\tif (cams[cid]->isActive()) {\n\t\t\timgs_ulr.push_back(uint(cid));\n\t\t}\n\t}\n\t_scene->cameras()->debugFlagCameraAsUsed(imgs_ulr);\n}\n\nvoid sibr::ULRV3View::setMode(const WeightsMode mode) {\n\t_weightsMode = mode;\n\tif (_weightsMode == VARIANCE_BASED_W) {\n\t\t_ulrRenderer->setupShaders(\"ulr/ulr_v3_alt\");\n\t}\n\telse if (_weightsMode == ULR_FAST) {\n\t\t_ulrRenderer->setupShaders(\"ulr/ulr_v3_fast\");\n\t}\n\telse {\n\t\t_ulrRenderer->setupShaders();\n\t}\n}\n\nvoid sibr::ULRV3View::onRenderIBR(sibr::IRenderTarget & dst, const sibr::Camera & eye)\n{\n\t// Perform ULR rendering, either directly to the destination RT, or to the intermediate RT when poisson blending is enabled.\n\t_ulrRenderer->process(\n\t\t\t_scene->proxies()->proxy(),\n\t\t\teye, \n\t\t\t_poissonBlend ? *_blendRT : dst,\n\t\t\t_scene->renderTargets()->getInputRGBTextureArrayPtr(),\n\t\t_scene->renderTargets()->getInputDepthMapArrayPtr()\n\t\t);\n\n\t// Perform Poisson blending if enabled and copy to the destination RT.\n\tif (_poissonBlend) {\n\t\t_poissonRenderer->process(_blendRT, _poissonRT);\n\t\tblit(*_poissonRT, dst);\n\t}\n\n}\n\nvoid sibr::ULRV3View::onUpdate(Input & input)\n{\n}\n\nvoid sibr::ULRV3View::onGUI()\n{\n\tconst std::string guiName = \"ULRV3 Settings (\" + name() + \")\";\n\tif (ImGui::Begin(guiName.c_str())) {\n\n\t\t// Poisson settings.\n\t\tImGui::Checkbox(\"Poisson \", &_poissonBlend); ImGui::SameLine();\n\t\tImGui::Checkbox(\"Poisson fix\", &_poissonRenderer->enableFix());\n\n\t\t// Other settings.\n\t\tImGui::Checkbox(\"Flip RGB \", &getULRrenderer()->flipRGBs());\n\t\tImGui::PushScaledItemWidth(150);\n\t\tImGui::InputFloat(\"Epsilon occlusion\", &_ulrRenderer->epsilonOcclusion(), 0.001f, 0.01f);\n\n\t\tImGui::Separator();\n\t\t// Rendering mode selection.\n\t\tif(ImGui::Combo(\"Rendering mode\", (int*)(&_renderMode), \"Standard\\0One image\\0Leave one out\\0Every N\\0\\0\")) {\n\t\t\tupdateCameras(true);\n\t\t}\n\n\t\t// Get the desired index, make sure it falls in the cameras range.\n\t\tif (_renderMode == ONE_CAM || _renderMode == LEAVE_ONE_OUT) {\n\t\t\tconst bool changedIndex = ImGui::InputInt(\"Selected image\", &_singleCamId, 1, 10);\n\t\t\t_singleCamId = sibr::clamp(_singleCamId, 0, (int)_scene->cameras()->inputCameras().size() - 1);\n\t\t\tif (changedIndex) {\n\t\t\t\t// If we are in \"leave one out\" or \"one camera only\" mode, we have to update the list of enabled cameras.\n\t\t\t\tupdateCameras(false);\n\t\t\t}\n\t\t}\n\n\t\tif (_renderMode == EVERY_N_CAM) {\n\t\t\tif (ImGui::InputInt(\"Selection step\", &_everyNCamStep, 1, 10)) {\n\t\t\t\t_everyNCamStep = std::max(1, _everyNCamStep);\n\t\t\t\tupdateCameras(false);\n\t\t\t}\n\t\t}\n\t\tImGui::Separator();\n\t\t// Switch the shaders for ULR rendering.\n\t\tif (ImGui::Combo(\"Weights mode\", (int*)(&_weightsMode), \"Standard ULR\\0Variance based\\0Fast ULR\\0\\0\")) {\n\t\t\tsetMode(_weightsMode);\n\t\t}\n\t\t\n\t\tImGui::Checkbox(\"Occlusion Testing\", &_ulrRenderer->occTest());\n\t\tImGui::Checkbox(\"Debug weights\", &_ulrRenderer->showWeights());\n\t\tImGui::Checkbox(\"Gamma correction\", &_ulrRenderer->gammaCorrection());\n\t\tImGui::PopItemWidth();\n\t}\n\tImGui::End();\n}\n\nvoid sibr::ULRV3View::updateCameras(bool allowResetToDefault) {\n\t// If we are here, the rendering mode or the selected index have changed, we need to update the enabled cameras.\n\tstd::vector<uint> imgs_ulr;\n\tconst auto & cams = _scene->cameras()->inputCameras();\n\n\t// Compute the cameras indices based on the new mode.\n\tif (_renderMode == RenderMode::ONE_CAM) {\n\t\t// We only use the given camera (if it is active).\n\t\tif (cams[_singleCamId]->isActive()) {\n\t\t\timgs_ulr = { (uint)_singleCamId };\n\t\t} else {\n\t\t\tstd::cerr << \"The camera is not active, using all cameras.\" << std::endl;\n\t\t}\n\t} else if (_renderMode == RenderMode::LEAVE_ONE_OUT) {\n\t\t// We use all active cameras apart from the one given.\n\t\tfor (size_t cid = 0; cid < cams.size(); ++cid) {\n\t\t\tif (cid != (size_t)_singleCamId && cams[cid]->isActive()) {\n\t\t\t\timgs_ulr.push_back(uint(cid));\n\t\t\t}\n\t\t}\n\t}\n\telse if (_renderMode == RenderMode::EVERY_N_CAM) {\n\t\t// We pick one camera every N\n\t\tfor (size_t cid = 0; cid < cams.size(); ++cid) {\n\t\t\tif ((cid % _everyNCamStep == 0) && cams[cid]->isActive()) {\n\t\t\t\timgs_ulr.push_back(uint(cid));\n\t\t\t}\n\t\t}\n\t} else if(allowResetToDefault){\n\t\t// We use all active cameras.\n\t\tfor (size_t cid = 0; cid < cams.size(); ++cid) {\n\t\t\tif (cams[cid]->isActive()) {\n\t\t\t\timgs_ulr.push_back(uint(cid));\n\t\t\t}\n\t\t}\n\t}\n\t// Only update if there is at least one camera enabled.\n\tif(!imgs_ulr.empty()) {\n\t\t// Update the shader informations in the renderer.\n\t\t_ulrRenderer->updateCameras(imgs_ulr);\n\t\t// Tell the scene which cameras we are using for debug visualization.\n\t\t_scene->cameras()->debugFlagCameraAsUsed(imgs_ulr);\n\t}\n\t\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRV3View.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"Config.hpp\"\r\n# include <core/system/Config.hpp>\r\n# include <core/graphics/Mesh.hpp>\r\n# include <core/view/ViewBase.hpp>\r\n# include <core/renderer/CopyRenderer.hpp>\r\n# include <projects/ulr/renderer/ULRV3Renderer.hpp>\r\n# include <core/renderer/PoissonRenderer.hpp>\r\n\r\nnamespace sibr { \r\n\r\n\t/**\r\n\t * \\class ULRV3View\r\n\t * \\brief Wrap a ULR renderer with additional parameters and information.\r\n\t */\r\n\tclass SIBR_EXP_ULR_EXPORT ULRV3View : public sibr::ViewBase\r\n\t{\r\n\t\tSIBR_CLASS_PTR(ULRV3View);\r\n\r\n\t\t/// Rendering mode: default, use only one camera, use all cameras but one.\r\n\t\tenum RenderMode { ALL_CAMS, ONE_CAM, LEAVE_ONE_OUT, EVERY_N_CAM };\r\n\r\n\t\t/// Blending mode: keep the four best values per pixel, or aggregate them all.\r\n\t\tenum WeightsMode { ULR_W , VARIANCE_BASED_W, ULR_FAST};\r\n\r\n\tpublic:\r\n\r\n\t\t/**\r\n\t\t * Constructor\r\n\t\t * \\param ibrScene The scene to use for rendering.\r\n\t\t * \\param render_w rendering width\r\n\t\t * \\param render_h rendering height\r\n\t\t */\r\n\t\tULRV3View(const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h);\r\n\r\n\t\t/** Replace the current scene.\r\n\t\t *\\param newScene the new scene to render */\r\n\t\tvoid setScene(const sibr::BasicIBRScene::Ptr & newScene);\r\n\r\n\t\t/**\r\n\t\t * Perform rendering. Called by the view manager or rendering mode.\r\n\t\t * \\param dst The destination rendertarget.\r\n\t\t * \\param eye The novel viewpoint.\r\n\t\t */\r\n\t\tvoid onRenderIBR(sibr::IRenderTarget& dst, const sibr::Camera& eye) override;\r\n\r\n\t\t/**\r\n\t\t * Update inputs (do nothing).\r\n\t\t * \\param input The inputs state.\r\n\t\t */\r\n\t\tvoid onUpdate(Input& input) override;\r\n\r\n\t\t/**\r\n\t\t * Update the GUI.\r\n\t\t */\r\n\t\tvoid onGUI() override;\r\n\r\n\t\t/** \\return a reference to the renderer. */\r\n\t\tconst ULRV3Renderer::Ptr & getULRrenderer() const { return _ulrRenderer; }\r\n\r\n\t\t/** Set the renderer blending weights mode.\r\n\t\t *\\param mode the new mode to use\r\n\t\t *\\sa WeightsMode\r\n\t\t **/\r\n\t\tvoid setMode(const WeightsMode mode);\r\n\r\n\t\t/** \\return a reference to the scene */\r\n\t\tconst std::shared_ptr<sibr::BasicIBRScene> & getScene() const { return _scene; }\r\n\r\n\tprotected:\r\n\r\n\t\t/**\r\n\t\t * Update the camera informations in the ULR renderer based on the current rendering mode and selected index.\r\n\t\t * \\param allowResetToDefault If true, when the rendering mode is ALL_CAMS, the cameras information will be updated.\r\n\t\t */\r\n\t\tvoid updateCameras(bool allowResetToDefault);\r\n\r\n\t\tstd::shared_ptr<sibr::BasicIBRScene> _scene; ///< The current scene.\r\n\t\tULRV3Renderer::Ptr\t\t_ulrRenderer; ///< The ULR renderer.\r\n\t\tPoissonRenderer::Ptr\t_poissonRenderer; ///< The poisson filling renderer.\r\n\r\n\t\tRenderTargetRGBA::Ptr\t_blendRT; ///< ULR destination RT.\r\n\t\tRenderTargetRGBA::Ptr\t_poissonRT; ///< Poisson filling destination RT.\r\n\r\n\t\tbool\t\t\t\t\t_poissonBlend = false; ///< Should Poisson filling be applied.\r\n\r\n\t\tRenderMode\t\t\t\t_renderMode = ALL_CAMS; ///< Current rendering mode.\r\n\t\tWeightsMode\t\t\t\t_weightsMode = ULR_W; ///< Current blend weights mode.\r\n\t\tint\t\t\t\t\t\t_singleCamId = 0; ///< Selected camera for the single view mode.\r\n\t\tint\t\t\t\t\t\t_everyNCamStep = 1; ///< Camera step size for the every other N mode.\r\n\t};\r\n\r\n} /*namespace sibr*/ \r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRView.cpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n/// \\todo TODO: make shorter\r\n#include \"Config.hpp\"\r\n#include <core/assets/Resources.hpp>\r\n#include <projects/ulr/renderer/ULRView.hpp>\r\n#include <core/system/Vector.hpp>\r\n#include <core/graphics/Texture.hpp>\r\n#include <core/view/ViewBase.hpp>\r\n#include <map>\r\n\r\nnamespace sibr { \r\n\r\nULRView::~ULRView( )\r\n{\r\n\t_altMesh.reset();\r\n}\r\n\r\nULRView::ULRView( const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h ) :\r\n\t_scene(ibrScene),\r\n\t\tsibr::ViewBase(render_w, render_h)\r\n{\r\n\t_altMesh.reset();\r\n\t_altMesh = nullptr;\r\n\t_numDistUlr = 10, _numAnglUlr = 14;\r\n    std::cerr << \"\\n[ULRenderer] setting number of images to blend \"<< _numDistUlr << \" \" << _numAnglUlr << std::endl;\r\n\r\n\t_ulr.reset(new ULRRenderer(render_w, render_h));\r\n\t\r\n\t_inputRTs = ibrScene->renderTargets()->inputImagesRT();\r\n}\r\n\r\nvoid ULRView::onRenderIBR( sibr::IRenderTarget& dst, const sibr::Camera& eye ) {\r\n    // Select subset of input images for ULR\r\n\tstd::vector<uint> imgs_ulr = chosen_cameras(eye);\r\n\t_scene->cameras()->debugFlagCameraAsUsed(imgs_ulr);\r\n\t_ulr->process(\r\n\t\t/* input -- images chosen */ imgs_ulr, \r\n\t\t/* input -- camera position */ eye, \r\n\t\t/* input -- scene */ _scene, \r\n\t\t/* input -- alt mesh if available */ _altMesh, \r\n\t\t/* input -- input RTs -- can be RGB or alpha */  _inputRTs,\r\n\t\t/* output */ dst);\r\n}\r\n\r\n// -----------------------------------------------------------------------\r\n/// \\todo Select a subset from imput images speed up URL\r\n/// \\todo TODO: This function needs serious cleanup\r\n//\r\nstd::vector<uint> ULRView::chosen_cameras(const sibr::Camera& eye) {\r\n    std::vector<uint> imgs_id;\r\n    std::multimap<float,uint> distMap;\t\t\t\t\t\t\t\t\t// distance wise closest input cameras\r\n\tstd::multimap<float,uint> dang;\t\t\t\t\t\t\t\t\t// angular distance from inputs to novel camera\r\n    for (uint i=0; i<_scene->cameras()->inputCameras().size(); i++ ) {\r\n        const sibr::InputCamera& inputCam = *_scene->cameras()->inputCameras()[i];\r\n        if (inputCam.isActive()) {\r\n\t\t\t// Convert following to Eigen versions\r\n            float dist = sibr::distance(inputCam.position(), eye.position());\r\n            float angle = sibr::dot(inputCam.dir(),eye.dir());\r\n //           if (angle > 0.707) {\t\t\t\t\t\t\t\t\t// cameras with 45 degrees\r\n                distMap.insert(std::make_pair(dist,i));\t\t\t\t\t// sort distances in increasing order\r\n\t\t\t\tdang.insert(std::make_pair( acos(angle),i));\t\t\t\t// sort angles in increasing order\r\n//\t\t\t}\r\n        }\r\n    }\r\n\r\n   // HACK GD -- should really look at camera angles as well and sort them\r\n////   bool not_enough = false;\r\n\t// if you have < 2 cameras, choose the (NUM_DIST+NUM_ANGL)/2 closest ones\r\n////   if( dang.size() + distMap.size() < 2 )\r\n////\t\tnot_enough = true;\r\n\tfor (uint i=0; i< _scene->cameras()->inputCameras().size(); i++) {\r\n        const sibr::InputCamera& inputCam = *_scene->cameras()->inputCameras()[i];\r\n        if (inputCam.isActive() && distMap.size() <= (_numDistUlr+_numAnglUlr)/2 ) {\r\n            float dist = sibr::distance(inputCam.position(),eye.position());\r\n            distMap.insert(std::make_pair(dist,i));\t\t\t\t\t// sort distances in increasing order\r\n\t\t\t}\r\n\t}\r\n\r\n    std::multimap<float,uint>::const_iterator d_it(distMap.begin());\t// select the _numDistUlr closest cameras\r\n\tfor (int i=0; d_it!=distMap.end() && i<_numDistUlr; d_it++,i++) {\r\n        imgs_id.push_back(d_it->second);\r\n    }\r\n\r\n\tstd::multimap<float,uint>::const_iterator a_it(dang.begin());    // select the NUM_ANG_ULR closest cameras\r\n\tfor (int i=0; a_it!=dang.end() && i<_numAnglUlr; a_it++,i++) {\r\n        imgs_id.push_back(a_it->second);\r\n    }\r\n\r\n\tstd::sort( imgs_id.begin(), imgs_id.end() );\t\t\t\t// Avoid repetitions\r\n\timgs_id.erase( std::unique( imgs_id.begin(), imgs_id.end() ), imgs_id.end() );\r\n\r\n\tSIBR_ASSERT(imgs_id.size() <= _numDistUlr + _numAnglUlr);\r\n    return imgs_id;\r\n}\r\n\r\nvoid ULRView::setMasks( const std::vector<RenderTargetLum::Ptr>& masks ) {\r\n\t\t_ulr->setMasks(masks);\r\n}\r\n\r\n} /*namespace sibr*/ \r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/ULRView.hpp",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#pragma once\r\n\r\n# include \"Config.hpp\"\r\n# include <core/system/Config.hpp>\r\n# include <core/graphics/Mesh.hpp>\r\n# include <core/scene/BasicIBRScene.hpp>\r\n# include <core/renderer/CopyRenderer.hpp>\r\n# include <projects/ulr/renderer/ULRRenderer.hpp>\r\n# include <core/view/ViewBase.hpp>\r\n\r\nnamespace sibr { \r\n\r\n\t/** View associated to ULRRenderer v1, providing interface and options. */\r\n\tclass SIBR_EXP_ULR_EXPORT ULRView : public sibr::ViewBase\r\n\t{\r\n\t\tSIBR_CLASS_PTR( ULRView );\r\n\r\n\tpublic:\r\n\r\n\t\t/** Constructor.\r\n\t\t *\\param ibrScene the scene\r\n\t\t *\\param render_w rendering width\r\n\t\t *\\param render_h rendering height\r\n\t\t **/\r\n\t\tULRView( const sibr::BasicIBRScene::Ptr& ibrScene, uint render_w, uint render_h );\r\n\r\n\t\t/** Destructor. */\r\n\t\t~ULRView();\r\n\r\n\t\t/** Render using the ULR algorithm. \r\n\t\t *\\param dst destination target\r\n\t\t *\\param eye novel viewpoint\r\n\t\t **/\r\n\t\tvirtual void onRenderIBR( sibr::IRenderTarget& dst, const sibr::Camera& eye );\r\n\r\n\t\t/** Select input cameras to use for rendering.\r\n\t\t *\\param eye the current viewpoint\r\n\t\t *\\return a list of camera indices.\r\n\t\t **/\r\n\t\tvirtual std::vector<uint> chosen_cameras(const sibr::Camera& eye) ;\r\n\r\n\t\t/** Set the altMesh and use instead of scene proxy.\r\n\t\t *\\param m mesh to use\r\n\t\t **/\r\n\t\tvoid\taltMesh(std::shared_ptr<sibr::Mesh> m)\t{ _altMesh = m; }\r\n\r\n\t\t/** Toggle occlusion testing.\r\n\t\t *\\param val should occlusion testing be performed\r\n\t\t */\r\n\t\tvoid\tdoOccl(bool val) { _ulr->doOccl(val); }\r\n\r\n\t\t/** \\return a pointer to the alt mesh if it exists */\r\n\t\tstd::shared_ptr<sibr::Mesh> \taltMesh()\t{ return _altMesh; }\r\n\r\n\t\t/** Set the number of cmaeras to select for blending.\r\n\t\t *\\param dist number of cameras for the distance criterion\r\n\t\t *\\param angle number of cameras for the angle criterion\r\n\t\t **/\r\n\t\tvoid\tsetNumBlend(short int dist, short int angle) { _numDistUlr = dist, _numAnglUlr = angle; }\r\n\r\n\t\t/** Set the input RGBD textures.\r\n\t\t *\\param iRTs the new textures to use. \r\n\t\t */\r\n\t\tvoid\tinputRTs(const std::vector<std::shared_ptr<RenderTargetRGBA32F> >& iRTs) { _inputRTs = iRTs;}\r\n\r\n\t\t/** Set the masks for ignoring some regions of the input images.\r\n\t\t *\\param masks the new masks\r\n\t\t **/\r\n\t\tvoid\tsetMasks( const std::vector<RenderTargetLum::Ptr>& masks);\r\n\r\n\tprotected:\r\n\r\n\t\tULRRenderer::Ptr\t\t_ulr; ///< Renderer.\r\n\t\tstd::shared_ptr<sibr::BasicIBRScene> _scene; ///< Scene.\r\n\t\tstd::shared_ptr<sibr::Mesh>\t_altMesh; ///< For the cases when using a different mesh than the scene\r\n\t\tshort int _numDistUlr, _numAnglUlr; ///< max number of selected cameras for each criterion.\r\n\t\tstd::vector<std::shared_ptr<RenderTargetRGBA32F> > _inputRTs; ///< input RTs -- usually RGB but can be alpha or other\r\n\r\n\t};\r\n\r\n} /*namespace sibr*/ \r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) in vec3 in_vertex;\nlayout(location = 2) in vec3 in_normal;\n\nout vec3 vertex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex,1.0);\n    vertex_coord  = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr1.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location=0) out vec4 out_color0;\nlayout(location=1) out vec4 out_color1;\nlayout(location=2) out vec4 out_color2;\nlayout(location=3) out vec4 out_color3;\n\nlayout(binding=0) uniform sampler2D image;    // input image with camera-proxy distance in alpha\nlayout(binding=1) uniform sampler2D proxy;    // intersection point with proxy with depth in alpha\nlayout(binding=2) uniform sampler2D texture0; // best candidate for each pixel\nlayout(binding=3) uniform sampler2D texture1; // second best candidate for each pixel\nlayout(binding=4) uniform sampler2D texture2; // third best candidate for each pixel\nlayout(binding=5) uniform sampler2D texture3; // fourth best candidate for each pixel\nlayout(binding=6) uniform sampler2D mask; // masking texture.\n\nuniform mat4 iCamProj;     // input camera projection\nuniform vec3 iCamPos;      // input camera position\nuniform vec3 iCamDir;      // novel camera projection\nuniform vec3 nCamPos;      // novel camera position\nuniform bool occlTest;\t// do occlusion test\nuniform bool doMasking;\t// do masking\n\n// vertex coordinates of the 2D screen size quad,\n// used for computing texture coordinates\nin vec3 vertex_coord;\n\n#define EPSILON 1e-2\n#define BETA \t1e-1  \t/* Relative importance of resolution penalty */\n\nvec3 project(vec3 point, mat4 proj) {\n  vec4 p1 = proj * vec4(point, 1.0);\n  vec3 p2 = (p1.xyz/p1.w);\n  return (p2.xyz*vec3(0.5) + vec3(0.5));\n}\n\nbool frustumTest(vec3 p, vec2 uv) {\n  vec3 d1 = iCamDir;\n  vec3 d2 = p - iCamPos;\n  bool r = dot(d1,d2)>0.0 && uv.x<1.0 && uv.x>0.0 && uv.y<1.0 && uv.y>0.0;\n  return r;\n}\n\nvoid main(void) {\n\n  float penalty_res = 0;  \t\t/* Resolution penalty */\n  float penalty_ang = 0;\t\t\t/* Angular penalty */\n\n  vec2 texcoord = (vertex_coord.xy + vec2(1.0)) / 2.0;\n\n  vec4  point  = texture(proxy,    texcoord);\n  vec4  color0 = texture(texture0, texcoord);\n  vec4  color1 = texture(texture1, texcoord);\n  vec4  color2 = texture(texture2, texcoord);\n  vec4  color3 = texture(texture3, texcoord);\n  \n  vec3 uvd = project(point.xyz, iCamProj);\n  vec2 uv = uvd.xy;\n\n  vec4 color = texture(image, uv);\n\n  out_color0 = color0;\n  out_color1 = color1;\n  out_color2 = color2;\n  out_color3 = color3;\n\n  if(doMasking){\n    float masked = texture(mask, uv).r;\n    if(masked < 0.5){\n\t return;\n    }\n  }\n\n  if (frustumTest(point.xyz, uv))\n  {\n    float dist_i2p \t= distance(point.xyz, iCamPos);\n    float dist_n2p \t= distance(point.xyz, nCamPos);\n    penalty_res \t= max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\n\n    //if (abs(dist-color.w) < EPSILON) {\n\n    vec3 v1 = normalize(point.xyz - iCamPos);\n    vec3 v2 = normalize(point.xyz - nCamPos);\n    if (occlTest && abs(uvd.z-color.w) < EPSILON) {\t\t/* occlusion test */\n      //color.w = max(0.0001, acos(dot(v1,v2)));\n      penalty_ang = max(0.0001, acos(dot(v1,v2)));\n      } else if( occlTest ) {\n        return;;\n        //color.w = 5.0 + max(0.001, acos(dot(v1,v2))); /* increase the penalty */\n      }\n\t  if (all(equal(color.xyz, vec3(0,0,0)))){\n\t\treturn;\n\t\t}\n\n      color.w = penalty_ang + BETA*penalty_res;\n\n      // compare with best four candiates and insert at the\n      // appropriate rank\n      bool done = false;\n      if (!done && color.w<color0.w) {    // better than best candidate\n        out_color0 = color;\n        out_color1 = color0;\n        out_color2 = color1;\n        out_color3 = color2;\n        done = true;\n      }\n      if (!done && color.w<color1.w) {    // better than second best candidate\n        out_color0 = color0;\n        out_color1 = color;\n        out_color2 = color1;\n        out_color3 = color2;\n        done = true;\n      }\n      if (!done && color.w<color2.w) {    // better than third best candidate\n        out_color0 = color0;\n        out_color1 = color1;\n        out_color2 = color;\n        out_color3 = color2;\n        done = true;\n      }\n      if (!done && color.w<color3.w) {    // better than fourth best candidate\n        out_color0 = color0;\n        out_color1 = color1;\n        out_color2 = color2;\n        out_color3 = color;\n        done = true;\n      }\n    }\n  }\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr2.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location=0) out vec4 out_color;\n\nlayout(binding=0) uniform sampler2D proxy;  // intersection point with proxy with depth in alpha\nlayout(binding=1) uniform sampler2D ulr0;   // best candidate for each pixel\nlayout(binding=2) uniform sampler2D ulr1;   // second best candidate for each pixel\nlayout(binding=3) uniform sampler2D ulr2;   // third best candidate for each pixel\nlayout(binding=4) uniform sampler2D ulr3;   // fourth best candidate for each pixel\n\n// vertex coordinates of the 2D screen size quad,\n// used for computing texture coordinates\nin vec3 vertex_coord;\n\nvoid main(void) {\n    vec2 texcoord = (vertex_coord.xy + vec2(1.0)) / 2.0;\n\n    vec4  point  = texture(proxy, texcoord);\n    vec4  color0 = texture(ulr0,  texcoord);\n    vec4  color1 = texture(ulr1,  texcoord);\n    vec4  color2 = texture(ulr2,  texcoord);\n    vec4  color3 = texture(ulr3,  texcoord);\n\n    float thresh = 1.0000001 * color3.w;\n    color0.w = max(0, 1.0 - color0.w/thresh);\n    color1.w = max(0, 1.0 - color1.w/thresh);\n    color2.w = max(0, 1.0 - color2.w/thresh);\n    color3.w = max(0, 1.0 - color3.w/thresh);\n\n    // ignore any candidate which is black\n    if (all(equal(color0.xyz, vec3(0,0,0)))) color0.w = 0;\n    if (all(equal(color1.xyz, vec3(0,0,0)))) color1.w = 0;\n    if (all(equal(color2.xyz, vec3(0,0,0)))) color2.w = 0;\n    if (all(equal(color3.xyz, vec3(0,0,0)))) color3.w = 0;\n\n    // only blend the best two candidates\n    /*color2.w = 0.00001;\n    color3.w = 0.00001;*/\n\n    // blending\n    out_color.xyz = (color0.xyz*color0.w +\n            color1.xyz*color1.w +\n            color2.xyz*color2.w +\n            color3.xyz*color3.w\n            ) / (color0.w + color1.w + color2.w + color3.w);\n    out_color.w = 1.0;\n    gl_FragDepth = point.w;\n\n    // discard if there was no intersection with the proxy\n    if (point.w <= 0) {\n        discard;\n    }\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_intersect.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nlayout(location = 0) out vec4 out_color;\n\nin vec3 vertex_coord;\n\nvoid main(void) {\n\tout_color = vec4(vertex_coord, gl_FragCoord.z);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_intersect.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\nuniform mat4 proj;\n\nlayout(location = 0) in vec3 in_vertex;\n\nout vec3 vertex_coord;\n\nvoid main(void) {\n\tgl_Position = proj * vec4(in_vertex,1.0);\n    vertex_coord  = in_vertex;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v2.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n#define NUM_CAMS (12)\n\nlayout(location = 0) out vec4 out_color;\n\nlayout(binding=0) uniform sampler2D proxy;\nlayout(binding=1) uniform sampler2DArray soft_visibility_maps;\n\nuniform vec3 ncam_pos;\nuniform sampler2D input_rgb[NUM_CAMS];\nuniform sampler2D masks[NUM_CAMS];\nuniform vec3 icam_pos[NUM_CAMS];\nuniform vec3 icam_dir[NUM_CAMS];\nuniform mat4 icam_proj[NUM_CAMS];\nuniform int selected_cams[NUM_CAMS];\nuniform bool occ_test;\nuniform bool invert_mask;\nuniform bool is_binary_mask;\nuniform bool discard_black_pixels;\nuniform bool doMasking;\nuniform float softVisibilityThreshold;\nuniform bool useSoftVisibility;\nuniform int camsCount;\nuniform float epsilonOcclusion = 1e-2;\n\nin vec2 vertex_coord;\n\n\n#define INFTY_W 100000.0\n\n#define BETA \t1e-1  \t/* Relative importance of resolution penalty */\n#define FOV_BLENDING_BORDER 0.6\n#define ENABLE_BORDERS_BLENDING /// \\todo TODO SR: investigate effect of this additional blending.\n\n\nvec3 project(vec3 point, mat4 proj) {\n  vec4 p1 = proj * vec4(point, 1.0);\n  vec3 p2 = (p1.xyz/p1.w);\n  return (p2.xyz*0.5 + 0.5);\n}\n\nbool frustumTest(vec3 p, vec2 ndc, int cam_id) {\n  vec3 d1 = icam_dir[cam_id];\n  vec3 d2 = p - icam_pos[cam_id];\n  return !any(greaterThan(ndc, vec2(1.0))) && dot(d1,d2)>0.0;\n}\n\n\n\n\nvoid main(void){\n  \t\t\n  vec4 point = texture(proxy, vertex_coord);\n  // discard if there was no intersection with the proxy\n  if ( point.w >= 1.0) {\n\tdiscard;\n  }\n\n  vec4  color0 = vec4(0.0,0.0,0.0,INFTY_W);\n  vec4  color1 = vec4(0.0,0.0,0.0,INFTY_W);\n  vec4  color2 = vec4(0.0,0.0,0.0,INFTY_W);\n  vec4  color3 = vec4(0.0,0.0,0.0,INFTY_W);\n\n  // We need to keep the uvs of the selected colors for the fov blending.\n  vec4 uvs01 = vec4(0.0,0.0,0.0,0.0);\n  vec4 uvs23 = vec4(0.0,0.0,0.0,0.0);\n\n  for(int cam_id = 0; cam_id < NUM_CAMS; cam_id++){\n\tif(cam_id >= camsCount){\n\t  break;\n    }\n\tvec3 uvd = project(point.xyz, icam_proj[cam_id]);\n\tvec2 ndc = abs(2.0*uvd.xy-1.0);\n\n\tif (frustumTest(point.xyz, ndc, cam_id))\n\t{\n        vec4 color = texture(input_rgb[cam_id], uvd.xy);\n\t\t\n\t\t\n\t\tif(doMasking){\n            \n\t\t\tfloat masked = texture(masks[cam_id], uvd.xy).r;\n             \n            if( invert_mask ){\n                masked = 1.0 - masked;\n            }\n            \n            if( is_binary_mask ){\n                if( masked < 0.5) {\n                    continue;\n                }\n\t\t\t} else {\n                color.xyz = masked*color.xyz;\n            }\n\t\t\t\n\t\t}\n\t\t\n\n\t\t/// \\todo Separate uniform and per-pixel branching. TODO SR: test impact.\n\n\t\tif (discard_black_pixels){\n\t\t\tif(all(equal(color.xyz, vec3(0.0)))){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n \t\t\n\t\tif (occ_test){\n\t\t\tif(abs(uvd.z-color.w) >= epsilonOcclusion) {\t  \n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} \n\t\t\n\t\tvec3 v1 = (point.xyz - icam_pos[cam_id]);\n\t\tvec3 v2 = (point.xyz - ncam_pos);\n\t\tfloat dist_i2p \t= length(v1);\n\t\tfloat dist_n2p \t= length(v2);\n\n\t\tfloat penalty_ang = float(occ_test) * max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\n\n\t\tfloat penalty_res = max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\n\t\t \n\t\tcolor.w = penalty_ang + BETA*penalty_res;\n\t\t  \n        if(useSoftVisibility){\n\n            //vec4 dist_from_edge = vec4(2.0,2.0,2.0,2.0); // texture(soft_visibility_maps, vec3(uvd.xy, cam_true_id));\n            vec4 dist_from_edge = texture(soft_visibility_maps, vec3(uvd.xy, selected_cams[cam_id]));\n            float weight_visibility = min(dist_from_edge.x/softVisibilityThreshold,1.0);\n            color.w /= weight_visibility; \n\n        }\n        \n        \n\t\t// compare with best four candiates and insert at the\n\t\t// appropriate rank\n\t\tif (color.w<color3.w) {    // better than fourth best candidate\n\t\t\t\n\t\t\tif (color.w<color2.w) {    // better than third best candidate\n\t\t\t\tcolor3 = color2;\n\t\t\t\tuvs23.zw = uvs23.xy;\n\t\t\t\t\n\t\t\t\tif (color.w<color1.w) {    // better than second best candidate\n\t\t\t\t\tcolor2 = color1;\n\t\t\t\t\tuvs23.xy = uvs01.zw;\n\n\t\t\t\t\tif (color.w<color0.w) {    // better than best candidate\n\t\t\t\t\t\tcolor1 = color0;\n\t\t\t\t\t\tuvs01.zw = uvs01.xy;\n\n\t\t\t\t\t\tcolor0 = color;\n\t\t\t\t\t\tuvs01.xy = ndc;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcolor1 = color;\n\t\t\t\t\t\tuvs01.zw = ndc;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tcolor2 = color;\n\t\t\t\t\tuvs23.xy = ndc;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tcolor3 = color;\n\t\t\t\tuvs23.zw = ndc;\n\t\t\t}\n\t\t}\n\t }  \n   }\n   \n\tfloat thresh = 1.0000001 * color3.w;\n    color0.w = max(0, 1.0 - color0.w/thresh);\n    color1.w = max(0, 1.0 - color1.w/thresh);\n    color2.w = max(0, 1.0 - color2.w/thresh);\n    color3.w = 1.0 - 1.0/1.0000001;\n\n    // ignore any candidate which is uninit\n\tif (color0.w == INFTY_W) color0.w = 0;\n    if (color1.w == INFTY_W) color1.w = 0;\n    if (color2.w == INFTY_W) color2.w = 0;\n    //if (color3.w == INFTY_W) color3.w = 0; uneeded, color3.w = 1.0 - 1.0/1.0000001\n\n    // Blending on the sides of input images.\n#ifdef ENABLE_BORDERS_BLENDING\n\t// Compute the attenuation factors.\n\tvec4 fcs01 = 1.0 - smoothstep(vec4(FOV_BLENDING_BORDER), vec4(1.0), uvs01);\n\tvec4 fcs23 = 1.0 - smoothstep(vec4(FOV_BLENDING_BORDER), vec4(1.0), uvs23);\n\tfcs01.xz *= fcs01.yw;\n\tfcs23.xz *= fcs23.yw;\n\n\tcolor0.w *= fcs01.x;\n\tcolor1.w *= fcs01.z;\n\tcolor2.w *= fcs23.x;\n\tcolor3.w *= fcs23.z;\n#endif\n\n    // blending\n    out_color.w = 1.0;\n    out_color.xyz = (color0.w*color0.xyz +\n             color1.w*color1.xyz +\n             color2.w*color2.xyz +\n             color3.w*color3.xyz\n            ) / (color0.w + color1.w + color2.w + color3.w);\n    gl_FragDepth = point.w;\n\t\n\n}\n\n\n/* // ATTENTION - non updated code, tentative to use all samples with a different weighting function.\nvoid main(void) {\n\tvec4 point = texture(proxy, vertex_coord);\n\tvec3 color = vec3(0.0);\n\tfloat mask = 0.0;\n\tfloat sumWeight = 0.0;\n\tvec4 colors[NUM_CAMS];\n\tbool discarded[NUM_CAMS];\n\n\tfloat maxPenalty = 0.0;\n\tfor(int cam_id = 0; NUM_CAMS < camsCount; cam_id++){\n\t\t vec3 uvd = project(point.xyz, icam_proj[cam_id]);\n\t\t vec2 uv = uvd.xy;\n\n\t\t discarded[cam_id] = true;\n\t\t\n\t\tif (frustumTest(point.xyz, uv, cam_id)) // multiply instead\n\t\t{\n   \n\t\t\tvec4 inputColor = texture(input_rgb[cam_id], uv);\n\t\t\t\n\t\t\tif ( !all(equal(inputColor.xyz, vec3(0,0,0))) && \n\t\t\t\tabs(uvd.z-inputColor.w) < epsilonOcclusion) {\t\t\n\t\t\t    vec3 v1 = point.xyz - icam_pos[cam_id];\n\t\t\t    vec3 v2 = point.xyz - ncam_pos;\n\t\t\t\tfloat dist_i2p = length(v1);//distance(point.xyz, icam_pos[cam_id]);\n\t\t\t\tfloat dist_n2p = length(v2);//distance(point.xyz, ncam_pos);\n\t\t\t    float penalty_ang = max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\n\t\t\t\tfloat penalty_res \t= max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\n\t\t\t\tfloat penalty = penalty_ang + BETA*penalty_res;\n\t\t\t\tmaxPenalty = max(maxPenalty, penalty);\n\t\t\t\n\t\t\t\t\n\t\t\t\tcolors[cam_id] = vec4(inputColor.rgb, penalty);\n\t\t\t\tdiscarded[cam_id] = false;\n\t\t\t} \n\t\t}\n\t}\n\t\n\tfor(int i = 0; i < NUM_CAMS; i++){\n\t\tif(discarded[i]){\n\t\t\tcontinue;\n\t\t}\n\t\tfloat weight = max(0.0, 1.0 - colors[i].w/(maxPenalty*1.0000001));\n\t\tsumWeight += weight;\n\t\tcolor += weight*colors[i].rgb;\n\t}\n\t\n\tout_color.rgb = color / sumWeight;\n\tout_color.a = 1.0;\n}\n*/"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v2.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n\nlayout(location = 0) in vec3 in_vertex;\n\nout vec2 vertex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex,1.0);\n    vertex_coord  = in_vertex.xy * 0.5 + 0.5;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v2_alt.frag",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n#define NUM_CAMS (12)\n\nlayout(location = 0) out vec4 out_color;\n\nlayout(binding=0) uniform sampler2D proxy;\nlayout(binding=1) uniform sampler2DArray soft_visibility_maps;\n\nuniform vec3 ncam_pos;\nuniform sampler2D input_rgb[NUM_CAMS];\nuniform sampler2D masks[NUM_CAMS];\nuniform vec3 icam_pos[NUM_CAMS];\nuniform vec3 icam_dir[NUM_CAMS];\nuniform mat4 icam_proj[NUM_CAMS];\nuniform int selected_cams[NUM_CAMS];\nuniform bool occ_test;\nuniform bool invert_mask;\nuniform bool is_binary_mask;\nuniform bool discard_black_pixels;\nuniform bool doMasking;\nuniform float softVisibilityThreshold;\nuniform bool useSoftVisibility;\nuniform int camsCount;\n\nin vec2 vertex_coord;\n\n\n#define INFTY_W 100000.0\n#define EPSILON 1e-2\n#define BETA \t1e-1  \t/* Relative importance of resolution penalty */\n#define FOV_BLENDING_BORDER 0.6\n#define ENABLE_BORDERS_BLENDING /// \\todo TODO SR: investigate effect of this additional blending.\n\nvec3 project(vec3 point, mat4 proj) {\n  vec4 p1 = proj * vec4(point, 1.0);\n  vec3 p2 = (p1.xyz/p1.w);\n  return (p2.xyz*0.5 + 0.5);\n}\n\nbool frustumTest(vec3 p, vec2 ndc, int cam_id) {\n  vec3 d1 = icam_dir[cam_id];\n  vec3 d2 = p - icam_pos[cam_id];\n  return !any(greaterThan(ndc, vec2(1.0))) && dot(d1,d2)>0.0;\n}\n\nvoid main(void){\n  \t\t\n\tvec4 point = texture(proxy, vertex_coord);\n\t  // discard if there was no intersection with the proxy\n\tif ( point.w >= 1.0) {\n\t\tdiscard;\n\t}\n\n\tvec4  color_sum = vec4(0.0,0.0,0.0,0.0);\n\t//vec3  color_sum_simple = vec3(0.0,0.0,0.0);\n\t//vec3  color_sum_square = vec3(0.0,0.0,0.0);\n\t//vec3  color_sum_square_w = vec3(0.0,0.0,0.0);\n\t//float num = 0.0;\n\t\n\tvec3 v2 = (point.xyz - ncam_pos);\n\tfloat dist_n2p \t= length(v2);\n\t  \n\tfor(int cam_id = 0; cam_id < NUM_CAMS; cam_id++){\n\t\t\n\t\tif(cam_id >= camsCount){\n\t\t  break;\n\t\t}\n\t\tvec3 uvd = project(point.xyz, icam_proj[cam_id]);\n\t\tvec2 ndc = abs(2.0*uvd.xy-1.0);\n\t\t\n\t\tif (!frustumTest(point.xyz, ndc, cam_id)) {\n\t\t\tcontinue;\n\t\t}\n\t\t\n\t\tvec4 color = texture(input_rgb[cam_id], uvd.xy);\n\t\t\t\t\n\t\tif(doMasking){\t\n\t\t\tfloat masked = texture(masks[cam_id], uvd.xy).r;\n\t\t\t \n\t\t\tif( invert_mask ){\n\t\t\t\tmasked = 1.0 - masked;\n\t\t\t}\n\t\t\t\n\t\t\tif( is_binary_mask ){\n\t\t\t\tif( masked < 0.5) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcolor.xyz = masked*color.xyz;\n\t\t\t}\t\n\t\t}\t\t\n\n\t\tif (discard_black_pixels){\n\t\t\tif(all(equal(color.xyz, vec3(0.0)))){\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (occ_test){\n\t\t\tif(abs(uvd.z-color.w) >= EPSILON) {\t  \n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} \n\t\t\n\t\tvec3 v1 = (point.xyz - icam_pos[cam_id]);\n\t\tfloat dist_i2p \t= length(v1);\n\t\t\n\t\tfloat penalty_ang = float(occ_test) * max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\n\n\t\tfloat penalty_res = max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\n\t\t \n\t\tcolor.w = penalty_ang + BETA*penalty_res;\n\t\t  \n\t\tif(useSoftVisibility){\n\t\t\tvec4 dist_from_edge = texture(soft_visibility_maps, vec3(uvd.xy, selected_cams[cam_id]));\n\t\t\tfloat weight_visibility = min(dist_from_edge.x/softVisibilityThreshold,1.0);\n\t\t\tcolor.w /= (weight_visibility*weight_visibility); \n\t\t}\n\t\t\n\t\tcolor.w = 1.0 / color.w;\n\t\t\n\t\tcolor_sum.xyz += color.w * color.xyz;\n\t\tcolor_sum.w += color.w;\n\t\t\n\t\t//color_sum_simple += color.xyz;\n\t\t//color_sum_square += color.xyz*color.xyz;\n\t\t//color_sum_square_w += color.w * color.xyz*color.xyz;\n\t\t//num++;\n\t}\n\t\n\t//vec3 mean = color_sum_simple / num;\n\t//vec3 variance = color_sum_square / num - mean*mean;\n\t//vec3 deviation = sqrt(variance);\n\t\n\t//vec3 mean = color_sum.xyz / color_sum.w;\n\t//vec3 variance = color_sum_square_w / color_sum.w - mean*mean;\n\t//vec3 deviation = 3.0*sqrt(variance);\n\t\n\tcolor_sum.xyz /= color_sum.w;\n\t\n    // blending\n    out_color.w = 1.0;\n    out_color.xyz = color_sum.xyz;\n\t//out_color.xyz = deviation;\n\t\n\tgl_FragDepth = point.w;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v3.frag",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\n#define NUM_CAMS (12)\r\n#define ULR_STREAMING (0)\r\n\r\nin vec2 vertex_coord;\r\nlayout(location = 0) out vec4 out_color;\r\n\r\n// 2D proxy texture.\r\nlayout(binding=0) uniform sampler2D proxy;\r\n\r\n// Input cameras.\r\nstruct CameraInfos\r\n{\r\n  mat4 vp;\r\n  vec3 pos;\r\n  int selected;\r\n  vec3 dir;\r\n};\r\n// They are stored in a contiguous buffer (UBO), lifting most limitations on the number of uniforms.\r\nlayout(std140, binding=4) uniform InputCameras\r\n{\r\n  CameraInfos cameras[NUM_CAMS];\r\n};\r\n\r\n// Uniforms.\r\nuniform int camsCount;\r\nuniform vec3 ncam_pos;\r\nuniform bool occ_test = true;\r\nuniform bool invert_mask = false;\r\nuniform bool is_binary_mask = true;\r\nuniform bool discard_black_pixels = true;\r\nuniform bool doMasking = false;\r\nuniform bool flipRGBs = false;\r\nuniform bool showWeights = false;\r\nuniform float epsilonOcclusion = 1e-2;\r\nuniform bool winner_takes_all = false;\r\n\r\n// for uv derivatives blending\r\nuniform bool useUVDerivatives = false;\r\nuniform float uvDerivativesAlphaBlending = 0.5f;\r\nuniform float uvDerivativesScaleFactor = 1.0f;\r\nuniform vec2 rtResolution = vec2(1.0);\r\n\r\n#define INFTY_W 100000.0\r\n#define BETA \t1e-1  \t/* Relative importance of resolution penalty */\r\n\r\n// Textures.\r\n// To support both the regular version (using texture arrays) and the streaming version (using 2D RTs),\r\n// we wrap the texture accesses in two helpers that hide the difference.\r\n\r\n#if ULR_STREAMING\r\n\r\nuniform sampler2D input_rgbds[NUM_CAMS];\r\nuniform sampler2D input_masks[NUM_CAMS];\r\n\r\nvec4 getRGBD(vec3 xy_camid){\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tvec4 rgbd = texture(input_rgbds[int(xy_camid.z)], xy_camid.xy);\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\treturn rgbd;\r\n}\r\n\r\nfloat getMask(vec3 xy_camid){\r\n\treturn texture(input_masks[int(xy_camid.z)], xy_camid.xy).r;\r\n}\r\n\r\n#else\r\n\r\nlayout(binding=1) uniform sampler2DArray input_rgbs;\r\nlayout(binding=2) uniform sampler2DArray input_depths;\r\nlayout(binding=3) uniform sampler2DArray input_masks;\r\n\r\nvec4 getRGBD(vec3 xy_camid){\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tvec3 rgb = texture(input_rgbs, xy_camid).rgb;\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tfloat depth = texture(input_depths, xy_camid).r;\r\n    return vec4(rgb,depth);\r\n}\r\n\r\nfloat getMask(vec3 xy_camid){\r\n\treturn texture(input_masks, xy_camid).r;\r\n}\r\n\r\n#endif\r\n\r\n// Helpers.\r\n\r\nvec3 project(vec3 point, mat4 proj) {\r\n  vec4 p1 = proj * vec4(point, 1.0);\r\n  vec3 p2 = (p1.xyz/p1.w);\r\n  return (p2.xyz*0.5 + 0.5);\r\n}\r\n\r\nbool frustumTest(vec3 p, vec2 ndc, int i) {\r\n  vec3 d1 = cameras[i].dir;\r\n  vec3 d2 = p - cameras[i].pos;\r\n  return !any(greaterThan(ndc, vec2(1.0))) && dot(d1,d2)>0.0;\r\n}\r\n\r\nvec3 getRandomColor(int x);\r\n\r\nvoid main(void){\r\n  \t\t\r\n  vec4 point = texture(proxy, vertex_coord);\r\n  // discard if there was no intersection with the proxy\r\n  if ( point.w >= 1.0) {\r\n\tdiscard;\r\n  }\r\n\r\n  vec4  color0 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color1 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color2 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color3 = vec4(0.0,0.0,0.0,INFTY_W);\r\n\r\n  bool atLeastOneValid = false;\r\n  \r\n  for(int i = 0; i < NUM_CAMS; i++){\r\n\tif(i>=camsCount){\r\n\t\tcontinue;\r\n\t}\r\n\tif(cameras[i].selected == 0){\r\n\t\tcontinue;\r\n\t}\r\n\r\n\tvec3 uvd = project(point.xyz, cameras[i].vp);\r\n\tvec2 ndc = abs(2.0*uvd.xy-1.0);\r\n\r\n\tvec2 uv_ddx = dFdx(uvd.xy * rtResolution); \r\n\tvec2 uv_ddy = dFdy(uvd.xy * rtResolution);\r\n\r\n\r\n\tif (frustumTest(point.xyz, ndc, i)){\r\n\t\tvec3 xy_camid = vec3(uvd.xy,i);\r\n\t\t\r\n\t\t\r\n\t\tvec4 color = getRGBD(xy_camid);\r\n\r\n\t\t\r\n\r\n\t\tif(doMasking){        \r\n\t\t\tfloat masked = getMask(xy_camid);\r\n             \r\n            if( invert_mask ){\r\n                masked = 1.0 - masked;\r\n            }\r\n            \r\n            if( is_binary_mask ){\r\n                if( masked < 0.5) {\r\n                    continue;\r\n                }\r\n\t\t\t} else {\r\n                color.xyz = masked*color.xyz;\r\n            }\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\tif (discard_black_pixels){\r\n\t\t\tif(all(equal(color.xyz, vec3(0.0)))){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n \t\t\r\n\t\tif (occ_test){\r\n\t\t\tif(abs(uvd.z-color.w) >= epsilonOcclusion) {\t  \r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Support output weights as random colors for debug.\r\n\t\tif(showWeights){\r\n\t\t\tcolor.xyz = getRandomColor(i);\r\n\t\t}\r\n\r\n\t\tfloat penaltyValue = 0;\r\n\r\n\t\tif (!useUVDerivatives) {\r\n\t\t\t// classic ulr\r\n\t\t\tvec3 v1 = (point.xyz - cameras[i].pos);\r\n\t\t\tvec3 v2 = (point.xyz - ncam_pos);\r\n\t\t\tfloat dist_i2p \t= length(v1);\r\n\t\t\tfloat dist_n2p \t= length(v2);\r\n\r\n\t\t\tfloat penalty_ang = float(occ_test) * max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\r\n\r\n\t\t\tfloat penalty_res = max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\r\n\t\t \r\n\t\t\tpenaltyValue = penalty_ang + BETA*penalty_res;\r\n\t\t} else {\r\n\t\t\t/// use uv derivatives\r\n\t\t\t/// \\todo TODO: check if uv needs to be scale by screen size as needed in unity hlsl\r\n\r\n\t\t\tvec3 crossProduct = cross(vec3(uv_ddx, 0), vec3(uv_ddy, 0));\r\n\t\t\tfloat transformScale = length (crossProduct);\r\n\t\t\tfloat weight = 1.0f / transformScale;\r\n\t\t\tpenaltyValue = weight;\r\n\t\t}\r\n\r\n        atLeastOneValid = true;\r\n\t\tcolor.w = penaltyValue;\r\n\t\t  \r\n\t\t// compare with best four candiates and insert at the\r\n\t\t// appropriate rank\r\n\t\tif (color.w<color3.w) {    // better than fourth best candidate\r\n\t\t\tif (color.w<color2.w) {    // better than third best candidate\r\n\t\t\t\tcolor3 = color2;\r\n\t\t\t\tif (color.w<color1.w) {    // better than second best candidate\r\n\t\t\t\t\tcolor2 = color1;\r\n\t\t\t\t\tif (color.w<color0.w) {    // better than best candidate\r\n\t\t\t\t\t\tcolor1 = color0;\r\n\t\t\t\t\t\tcolor0 = color;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcolor1 = color;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcolor2 = color;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcolor3 = color;\r\n\t\t\t}\r\n\t\t}\r\n\t }  \r\n   }\r\n   \r\n   if(!atLeastOneValid){\r\n        discard;\r\n   }\r\n   \r\n   \tif(winner_takes_all){\r\n\t\tgl_FragDepth = point.w;\r\n\t\tout_color.w = 1.0;\r\n\t\tout_color.xyz = color0.xyz;\r\n\t\treturn;\r\n\t}\r\n    \r\n\tfloat thresh = 1.0000001 * color3.w;\r\n    color0.w = max(0, 1.0 - color0.w/thresh);\r\n    color1.w = max(0, 1.0 - color1.w/thresh);\r\n    color2.w = max(0, 1.0 - color2.w/thresh);\r\n    color3.w = 1.0 - 1.0/1.0000001;\r\n\r\n    // ignore any candidate which is uninit\r\n\tif (color0.w == INFTY_W) color0.w = 0;\r\n    if (color1.w == INFTY_W) color1.w = 0;\r\n    if (color2.w == INFTY_W) color2.w = 0;\r\n    //if (color3.w == INFTY_W) color3.w = 0; uneeded, color3.w = 1.0 - 1.0/1.0000001\r\n\t\r\n\t\r\n    // blending\r\n    out_color.w = 1.0;\r\n    out_color.xyz = (color0.w*color0.xyz +\r\n             color1.w*color1.xyz +\r\n             color2.w*color2.xyz +\r\n             color3.w*color3.xyz\r\n            ) / (color0.w + color1.w + color2.w + color3.w);\r\n    gl_FragDepth = point.w;\r\n\t\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n/*\r\nfloat getPenalizeStretch(vec2 uv)\r\n{\r\n\t//uv = uv * reso;\r\n      // Source:\r\n      // - Hyperlapse papers [Kopf et al. 2014]\r\n      // - http://www.lucidarme.me/?p=4624\r\n\r\n      mat2 jacobian = mat2(\r\n        dFdx(uv),\r\n        dFdy(uv)\r\n        );\r\n\r\n      float a = jacobian[0][0];\r\n      float b = jacobian[1][0];\r\n      float c = jacobian[0][1];\r\n      float d = jacobian[1][1];\r\n      float aa = a*a;\r\n      float bb = b*b;\r\n      float cc = c*c;\r\n      float dd = d*d;\r\n\r\n      float S1 = aa + bb + cc + dd;\r\n      float S1a = (aa+bb-cc-dd);\r\n      float S1b = (a*c + b*d);\r\n      float S2 = sqrt(S1a*S1a + 4*S1b*S1b);\r\n\r\n      vec2  sigma = vec2(sqrt((S1+S2)/2.0), sqrt((S1-S2)/2.0));\r\n      return 1.0 - min(sigma.x, sigma.y)/max(sigma.x, sigma.y);\r\n}\r\n*/\r\n\r\n\r\n// Random number generation:\r\n// \"Quality hashes collection\" (https://www.shadertoy.com/view/Xt3cDn)\r\n// by nimitz 2018 (twitter: @stormoid)\r\n// The MIT License\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n/** Compute the based hash for a given index.\r\n\t\\param p the index\r\n\t\\return the hash\r\n*/\r\nuint baseHash(uint p) {\r\n\tp = 1103515245U*((p >> 1U)^(p));\r\n\tuint h32 = 1103515245U*((p)^(p>>3U));\r\n\treturn h32^(h32 >> 16);\r\n}\r\n\r\n/** Generate a random vec3 from an index seed (see http://random.mat.sbg.ac.at/results/karl/server/node4.html).\r\n\t\\param x the seed\r\n\t\\return a random vec3\r\n*/\r\nvec3 getRandomColor(int x) {\r\n\t// Color 0 is black, so we shift everything.\r\n\tx = x+1;\r\n\tuint n = baseHash(uint(x));\r\n\tuvec3 rz = uvec3(n, n*16807U, n*48271U);\r\n\treturn vec3(rz & uvec3(0x7fffffffU))/float(0x7fffffff);\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v3.vert",
    "content": "/*\n * Copyright (C) 2020, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\n */\n\n\n#version 420\n\n\nlayout(location = 0) in vec3 in_vertex;\n\nout vec2 vertex_coord;\n\nvoid main(void) {\n\tgl_Position = vec4(in_vertex,1.0);\n    vertex_coord  = in_vertex.xy * 0.5 + 0.5;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v3_alt.frag",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\n#define NUM_CAMS (12)\r\n#define ULR_STREAMING (0)\r\n\r\nin vec2 vertex_coord;\r\nlayout(location = 0) out vec4 out_color;\r\n\r\n// 2D proxy texture.\r\nlayout(binding=0) uniform sampler2D proxy;\r\n\r\n// Input cameras.\r\nstruct CameraInfos\r\n{\r\n  mat4 vp;\r\n  vec3 pos;\r\n  int selected;\r\n  vec3 dir;\r\n};\r\n// They are stored in a contiguous buffer (UBO), lifting most limitations on the number of uniforms.\r\nlayout(std140, binding=4) uniform InputCameras\r\n{\r\n  CameraInfos cameras[NUM_CAMS];\r\n};\r\n\r\n// Uniforms.\r\nuniform int camsCount;\r\nuniform vec3 ncam_pos;\r\nuniform bool occ_test = true;\r\nuniform bool invert_mask = false;\r\nuniform bool is_binary_mask = true;\r\nuniform bool discard_black_pixels = true;\r\nuniform bool doMasking = false;\r\nuniform bool flipRGBs = false;\r\nuniform bool showWeights = false;\r\nuniform float epsilonOcclusion = 1e-2;\r\n#define INFTY_W 100000.0\r\n#define BETA \t1e-1  \t/* Relative importance of resolution penalty */\r\n\r\n// Textures.\r\n// To support both the regular version (using texture arrays) and the streaming version (using 2D RTs),\r\n// we wrap the texture accesses in two helpers that hide the difference.\r\n\r\n#if ULR_STREAMING\r\n\r\nuniform sampler2D input_rgbds[NUM_CAMS];\r\nuniform sampler2D input_masks[NUM_CAMS];\r\n\r\nvec4 getRGBD(vec3 xy_camid){\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tvec4 rgbd = texture(input_rgbds[int(xy_camid.z)], xy_camid.xy);\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\treturn rgbd;\r\n}\r\n\r\nfloat getMask(vec3 xy_camid){\r\n\treturn texture(input_masks[int(xy_camid.z)], xy_camid.xy).r;\r\n}\r\n\r\n#else\r\n\r\nlayout(binding=1) uniform sampler2DArray input_rgbs;\r\nlayout(binding=2) uniform sampler2DArray input_depths;\r\nlayout(binding=3) uniform sampler2DArray input_masks;\r\n\r\nvec4 getRGBD(vec3 xy_camid){\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tvec3 rgb = texture(input_rgbs, xy_camid).rgb;\r\n\tif(flipRGBs){\r\n\t\txy_camid.y = 1.0 - xy_camid.y;\r\n\t}\r\n\tfloat depth = texture(input_depths, xy_camid).r;\r\n    return vec4(rgb,depth);\r\n}\r\n\r\nfloat getMask(vec3 xy_camid){\r\n\treturn texture(input_masks, xy_camid).r;\r\n}\r\n\r\n#endif\r\n\r\n// Helpers.\r\n\r\nvec3 project(vec3 point, mat4 proj) {\r\n  vec4 p1 = proj * vec4(point, 1.0);\r\n  vec3 p2 = (p1.xyz/p1.w);\r\n  return (p2.xyz*0.5 + 0.5);\r\n}\r\n\r\nbool frustumTest(vec3 p, vec2 ndc, int i) {\r\n  vec3 d1 = cameras[i].dir;\r\n  vec3 d2 = p - cameras[i].pos;\r\n  return !any(greaterThan(ndc, vec2(1.0))) && dot(d1,d2)>0.0;\r\n}\r\n\r\nvec3 getRandomColor(int x);\r\n\r\nvoid main(void){\r\n  \t\t\r\n\tvec4 point = texture(proxy, vertex_coord);\r\n\t  // discard if there was no intersection with the proxy\r\n\tif ( point.w >= 1.0) {\r\n\t\tdiscard;\r\n\t}\r\n\r\n\tvec4  color_sum = vec4(0.0,0.0,0.0,0.0);\r\n\t//vec3  color_sum_simple = vec3(0.0,0.0,0.0);\r\n\t//vec3  color_sum_square = vec3(0.0,0.0,0.0);\r\n\t//vec3  color_sum_square_w = vec3(0.0,0.0,0.0);\r\n\t//float num = 0.0;\r\n\t\r\n\tvec3 v2 = (point.xyz - ncam_pos);\r\n\tfloat dist_n2p \t= length(v2);\r\n\t  \r\n\t  for(int i = 0; i < NUM_CAMS; i++){\r\n\t\tif(i>=camsCount){\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif(cameras[i].selected == 0){\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\tvec3 uvd = project(point.xyz, cameras[i].vp);\r\n\t\tvec2 ndc = abs(2.0*uvd.xy-1.0);\r\n\t\t\r\n\t\tif (!frustumTest(point.xyz, ndc, i)) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\t\r\n\t\tvec3 xy_camid = vec3(uvd.xy,i);\r\n\t\tvec4 color = getRGBD(xy_camid);\r\n\t\t\r\n\t\t// Support output weights as random colors for debug.\r\n\t\tif(showWeights){\r\n\t\t\tcolor.xyz = getRandomColor(i);\r\n\t\t}\r\n\r\n\t\tif(doMasking){\t\r\n\t\t\tfloat masked = getMask(xy_camid);\r\n\t\t\t \r\n\t\t\tif( invert_mask ){\r\n\t\t\t\tmasked = 1.0 - masked;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif( is_binary_mask ){\r\n\t\t\t\tif( masked < 0.5) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcolor.xyz = masked*color.xyz;\r\n\t\t\t}\t\r\n\t\t}\t\t\r\n\r\n\t\tif (discard_black_pixels){\r\n\t\t\tif(all(equal(color.xyz, vec3(0.0)))){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif (occ_test){\r\n\t\t\tif(abs(uvd.z-color.w) >= epsilonOcclusion) {\t  \r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t} \r\n\t\t\r\n\t\tvec3 v1 = (point.xyz - cameras[i].pos);\r\n\t\tfloat dist_i2p \t= length(v1);\r\n\t\t\r\n\t\tfloat penalty_ang = float(occ_test) * max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\r\n\r\n\t\tfloat penalty_res = max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\r\n\t\t \r\n\t\tcolor.w = penalty_ang + BETA*penalty_res;\r\n\t\t  \r\n\t\tcolor.w = 1.0 / color.w;\r\n\t\t\r\n\t\tcolor_sum.xyz += color.w * color.xyz;\r\n\t\tcolor_sum.w += color.w;\r\n\t\t\r\n\t\t//color_sum_simple += color.xyz;\r\n\t\t//color_sum_square += color.xyz*color.xyz;\r\n\t\t//color_sum_square_w += color.w * color.xyz*color.xyz;\r\n\t\t//num++;\r\n\t}\r\n\t\r\n\t//vec3 mean = color_sum_simple / num;\r\n\t//vec3 variance = color_sum_square / num - mean*mean;\r\n\t//vec3 deviation = sqrt(variance);\r\n\t\r\n\t//vec3 mean = color_sum.xyz / color_sum.w;\r\n\t//vec3 variance = color_sum_square_w / color_sum.w - mean*mean;\r\n\t//vec3 deviation = 3.0*sqrt(variance);\r\n\t\r\n\tcolor_sum.xyz /= color_sum.w;\r\n\t\r\n    // blending\r\n    out_color.w = 1.0;\r\n    out_color.xyz = color_sum.xyz;\r\n\t//out_color.xyz = deviation;\r\n\t\r\n\tgl_FragDepth = point.w;\r\n}\r\n\r\n\r\n// Random number generation:\r\n// \"Quality hashes collection\" (https://www.shadertoy.com/view/Xt3cDn)\r\n// by nimitz 2018 (twitter: @stormoid)\r\n// The MIT License\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n/** Compute the based hash for a given index.\r\n\t\\param p the index\r\n\t\\return the hash\r\n*/\r\nuint baseHash(uint p) {\r\n\tp = 1103515245U*((p >> 1U)^(p));\r\n\tuint h32 = 1103515245U*((p)^(p>>3U));\r\n\treturn h32^(h32 >> 16);\r\n}\r\n\r\n/** Generate a random vec3 from an index seed (see http://random.mat.sbg.ac.at/results/karl/server/node4.html).\r\n\t\\param x the seed\r\n\t\\return a random vec3\r\n*/\r\nvec3 getRandomColor(int x) {\r\n\tuint n = baseHash(uint(x));\r\n\tuvec3 rz = uvec3(n, n*16807U, n*48271U);\r\n\treturn vec3(rz & uvec3(0x7fffffffU))/float(0x7fffffff);\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/SIBR_viewers/src/projects/ulr/renderer/shaders/ulr_v3_fast.frag",
    "content": "/*\r\n * Copyright (C) 2020, Inria\r\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\r\n * All rights reserved.\r\n *\r\n * This software is free for non-commercial, research and evaluation use \r\n * under the terms of the LICENSE.md file.\r\n *\r\n * For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr\r\n */\r\n\r\n\r\n#version 420\r\n\r\n#define NUM_CAMS (12)\r\n#define ULR_STREAMING (0)\r\n\r\nin vec2 vertex_coord;\r\nlayout(location = 0) out vec4 out_color;\r\n\r\n// 2D proxy texture.\r\nlayout(binding=0) uniform sampler2D proxy;\r\n\r\n// Input cameras.\r\nstruct CameraInfos\r\n{\r\n  mat4 vp;\r\n  vec3 pos;\r\n  int selected;\r\n  vec3 dir;\r\n};\r\n// They are stored in a contiguous buffer (UBO), lifting most limitations on the number of uniforms.\r\nlayout(std140, binding=4) uniform InputCameras\r\n{\r\n  CameraInfos cameras[NUM_CAMS];\r\n};\r\n\r\n// Uniforms.\r\nuniform int camsCount;\r\nuniform vec3 ncam_pos;\r\nuniform bool occ_test = true;\r\nuniform bool invert_mask = false;\r\nuniform bool is_binary_mask = true;\r\nuniform bool discard_black_pixels = true;\r\nuniform bool doMasking = false;\r\nuniform bool flipRGBs = false;\r\nuniform bool showWeights = false;\r\nuniform bool gammaCorrection = false;\r\nuniform float epsilonOcclusion = 1e-2;\r\n\r\n\r\n#define INFTY_W 100000.0\r\n/* Relative importance of resolution penalty */\r\n#define BETA \t1e-1\r\n/* Relative importance of edges penalty */\r\n#define BETA_UV 0.0\r\n\r\n// Textures.\r\n// To support both the regular version (using texture arrays) and the streaming version (using 2D RTs),\r\n// we wrap the texture accesses in two helpers that hide the difference.\r\n\r\nlayout(binding=1) uniform sampler2DArray input_rgbs;\r\nlayout(binding=2) uniform sampler2DArray input_depths;\r\nlayout(binding=3) uniform sampler2DArray input_masks;\r\n\r\n\r\nfloat getMask(vec3 xy_camid){\r\n\treturn texture(input_masks, xy_camid).r;\r\n}\r\n\r\n\r\n// Helpers.\r\n\r\nvec3 project(vec3 point, mat4 proj) {\r\n  vec4 p1 = proj * vec4(point, 1.0);\r\n  vec3 p2 = (p1.xyz/p1.w);\r\n  return (p2.xyz*0.5 + 0.5);\r\n}\r\n\r\nbool frustumTest(vec3 p, vec2 ndc, int i) {\r\n  vec3 d1 = cameras[i].dir;\r\n  vec3 d2 = p - cameras[i].pos;\r\n  return !any(greaterThan(ndc, vec2(1.0))) && dot(d1,d2)>0.0;\r\n}\r\n\r\nvec3 getRandomColor(int x);\r\n\r\nvoid main(void){\r\n  \t\t\r\n  vec4 point = texture(proxy, vertex_coord);\r\n  // discard if there was no intersection with the proxy\r\n  if ( point.w >= 1.0) {\r\n\tdiscard;\r\n  }\r\n\r\n  vec4  color0 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color1 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color2 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4  color3 = vec4(0.0,0.0,0.0,INFTY_W);\r\n  vec4 masks = vec4(1.0);\r\n  for(int i = 0; i < NUM_CAMS; i++){\r\n\tif(i>=camsCount){\r\n\t\tcontinue;\r\n\t}\r\n\tif(cameras[i].selected == 0){\r\n\t\tcontinue;\r\n\t}\r\n\r\n\tvec3 uvd = project(point.xyz, cameras[i].vp);\r\n\tvec2 ndc = abs(2.0*uvd.xy-1.0);\r\n\r\n\tif (frustumTest(point.xyz, ndc, i)){\r\n\t\tvec3 xy_camid = vec3(uvd.xy,i);\r\n\t\t\r\n\t\tfloat inputDepth = texture(input_depths, xy_camid).r;\r\n\r\n\t\tif (occ_test){\r\n\t\t\tif(abs(uvd.z-inputDepth) >= epsilonOcclusion) {\t  \r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\tfloat masked = 1.0;\r\n\t\tif(doMasking){        \r\n\t\t\tmasked = getMask(xy_camid);\r\n             \r\n            if( invert_mask ){\r\n                masked = 1.0 - masked;\r\n            }\r\n            \r\n            if( is_binary_mask ){\r\n                if( masked < 0.5) {\r\n                    continue;\r\n                }\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfloat penaltyValue = 0;\r\n\r\n\t\t\r\n\t\t// classic ulr\r\n\t\tvec3 v1 = (point.xyz - cameras[i].pos);\r\n\t\tvec3 v2 = (point.xyz - ncam_pos);\r\n\t\tfloat dist_i2p \t= length(v1);\r\n\t\tfloat dist_n2p \t= length(v2);\r\n\r\n\t\tfloat penalty_ang = float(occ_test) * max(0.0001, acos(dot(v1,v2)/(dist_i2p*dist_n2p)));\r\n\r\n\t\tfloat penalty_res = max(0.0001, (dist_i2p - dist_n2p)/dist_i2p );\r\n\t\t \r\n\t\tvec2 fc = vec2(1.0) - smoothstep(vec2(0.7), vec2(1.0), abs(2.0*uvd.xy-1.0));\r\n    \tfloat penalty_uv = 1.0 - fc.x * fc.y; \r\n\r\n\t\tpenaltyValue = penalty_ang + BETA*penalty_res + BETA_UV*penalty_uv;\r\n\t\t\r\n\r\n\r\n\t\tvec4 color = vec4(xy_camid, penaltyValue);\r\n\t\tif(flipRGBs){\r\n\t\t\tcolor.y = 1.0 - color.y;\r\n\t\t}\r\n\t\t \r\n\t\t// compare with best four candiates and insert at the\r\n\t\t// appropriate rank\r\n\t\tif (color.w<color3.w) {    // better than fourth best candidate\r\n\t\t\tif (color.w<color2.w) {    // better than third best candidate\r\n\t\t\t\tcolor3 = color2;\r\n\t\t\t\tif (color.w<color1.w) {    // better than second best candidate\r\n\t\t\t\t\tcolor2 = color1;\r\n\t\t\t\t\tif (color.w<color0.w) {    // better than best candidate\r\n\t\t\t\t\t\tcolor1 = color0;\r\n\t\t\t\t\t\tcolor0 = color;\r\n\t\t\t\t\t\tmasks.x = masked;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcolor1 = color;\r\n\t\t\t\t\t\tmasks.y = masked;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcolor2 = color;\r\n\t\t\t\t\tmasks.z = masked;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcolor3 = color;\r\n\t\t\t\tmasks.w = masked;\r\n\t\t\t}\r\n\t\t}\r\n\t }  \r\n   }\r\n   \r\n\r\n\r\n\tif(color0.w == INFTY_W){\r\n\t\tdiscard;\r\n\t}\r\n\r\n\tfloat thresh = 1.0000001 * color3.w;\r\n    color0.w = max(0, 1.0 - color0.w/thresh);\r\n    color1.w = max(0, 1.0 - color1.w/thresh);\r\n    color2.w = max(0, 1.0 - color2.w/thresh);\r\n    color3.w = 1.0 - 1.0/1.0000001;\r\n\r\n    // ignore any candidate which is uninit\r\n\tif (color0.w == INFTY_W) color0.w = 0;\r\n    if (color1.w == INFTY_W) color1.w = 0;\r\n    if (color2.w == INFTY_W) color2.w = 0;\r\n    //if (color3.w == INFTY_W) color3.w = 0; uneeded, color3.w = 1.0 - 1.0/1.0000001\r\n\t\r\n\t// Support output weights as random colors for debug.\r\n\tif(showWeights){\r\n\t\tcolor0.rgb = getRandomColor(int(color0.z));\r\n\t\tcolor1.rgb = getRandomColor(int(color1.z));\r\n\t\tcolor2.rgb = getRandomColor(int(color2.z));\r\n\t\tcolor3.rgb = getRandomColor(int(color3.z));\r\n\t} else {\r\n\t\t// Read from textures and apply masking.\r\n\t\tcolor0.rgb = masks.x*texture(input_rgbs, color0.rgb).rgb;\r\n\t\tcolor1.rgb = masks.y*texture(input_rgbs, color1.rgb).rgb;\r\n\t\tcolor2.rgb = masks.z*texture(input_rgbs, color2.rgb).rgb;\r\n\t\tcolor3.rgb = masks.w*texture(input_rgbs, color3.rgb).rgb;\r\n\t}\r\n\r\n    // blending\r\n    out_color.w = 1.0;\r\n    out_color.xyz = (color0.w*color0.xyz +\r\n             color1.w*color1.xyz +\r\n             color2.w*color2.xyz +\r\n             color3.w*color3.xyz\r\n            ) / (color0.w + color1.w + color2.w + color3.w);\r\n    gl_FragDepth = point.w;\r\n\r\n\tif(gammaCorrection){\r\n\t\tout_color.xyz = pow(out_color.xyz, vec3(1.0/2.2));\r\n\t}\r\n\t\r\n}\r\n\r\n\r\n\r\n// Random number generation:\r\n// \"Quality hashes collection\" (https://www.shadertoy.com/view/Xt3cDn)\r\n// by nimitz 2018 (twitter: @stormoid)\r\n// The MIT License\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n/** Compute the based hash for a given index.\r\n\t\\param p the index\r\n\t\\return the hash\r\n*/\r\nuint baseHash(uint p) {\r\n\tp = 1103515245U*((p >> 1U)^(p));\r\n\tuint h32 = 1103515245U*((p)^(p>>3U));\r\n\treturn h32^(h32 >> 16);\r\n}\r\n\r\n/** Generate a random vec3 from an index seed (see http://random.mat.sbg.ac.at/results/karl/server/node4.html).\r\n\t\\param x the seed\r\n\t\\return a random vec3\r\n*/\r\nvec3 getRandomColor(int x) {\r\n\t// Color 0 is black, so we shift everything.\r\n\tx = x+1;\r\n\tuint n = baseHash(uint(x));\r\n\tuvec3 rz = uvec3(n, n*16807U, n*48271U);\r\n\treturn vec3(rz & uvec3(0x7fffffffU))/float(0x7fffffff);\r\n}\r\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/arguments/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom argparse import ArgumentParser, Namespace\nimport sys\nimport os\n\nclass GroupParams:\n    pass\n\nclass ParamGroup:\n    def __init__(self, parser: ArgumentParser, name : str, fill_none = False):\n        group = parser.add_argument_group(name)\n        for key, value in vars(self).items():\n            shorthand = False\n            if key.startswith(\"_\"):\n                shorthand = True\n                key = key[1:]\n            t = type(value)\n            value = value if not fill_none else None \n            if shorthand:\n                if t == bool:\n                    group.add_argument(\"--\" + key, (\"-\" + key[0:1]), default=value, action=\"store_true\")\n                else:\n                    group.add_argument(\"--\" + key, (\"-\" + key[0:1]), default=value, type=t)\n            else:\n                if t == bool:\n                    group.add_argument(\"--\" + key, default=value, action=\"store_true\")\n                else:\n                    group.add_argument(\"--\" + key, default=value, type=t)\n\n    def extract(self, args):\n        group = GroupParams()\n        for arg in vars(args).items():\n            if arg[0] in vars(self) or (\"_\" + arg[0]) in vars(self):\n                setattr(group, arg[0], arg[1])\n        return group\n\nclass ModelParams(ParamGroup): \n    def __init__(self, parser, sentinel=False):\n        self.sh_degree = 3\n        self._source_path = \"\"\n        self._model_path = \"\"\n        self._images = \"images\"\n        self._resolution = -1\n        self._white_background = False\n        self.data_device = \"cuda\"\n        self.eval = False\n        super().__init__(parser, \"Loading Parameters\", sentinel)\n\n    def extract(self, args):\n        g = super().extract(args)\n        g.source_path = os.path.abspath(g.source_path)\n        return g\n\nclass PipelineParams(ParamGroup):\n    def __init__(self, parser):\n        self.convert_SHs_python = False\n        self.compute_cov3D_python = False\n        self.debug = False\n        super().__init__(parser, \"Pipeline Parameters\")\n\nclass OptimizationParams(ParamGroup):\n    def __init__(self, parser):\n        self.iterations = 30_000\n        self.position_lr_init = 0.00016\n        self.position_lr_final = 0.0000016\n        self.position_lr_delay_mult = 0.01\n        self.position_lr_max_steps = 30_000\n        self.feature_lr = 0.0025\n        self.opacity_lr = 0.05\n        self.scaling_lr = 0.005\n        self.rotation_lr = 0.001\n        self.percent_dense = 0.01\n        self.lambda_dssim = 0.2\n        self.densification_interval = 100\n        self.opacity_reset_interval = 3000\n        self.densify_from_iter = 500\n        self.densify_until_iter = 15_000\n        self.densify_grad_threshold = 0.0002\n        self.random_background = False\n        super().__init__(parser, \"Optimization Parameters\")\n\ndef get_combined_args(parser : ArgumentParser):\n    cmdlne_string = sys.argv[1:]\n    cfgfile_string = \"Namespace()\"\n    args_cmdline = parser.parse_args(cmdlne_string)\n\n    try:\n        cfgfilepath = os.path.join(args_cmdline.model_path, \"cfg_args\")\n        print(\"Looking for config file in\", cfgfilepath)\n        with open(cfgfilepath) as cfg_file:\n            print(\"Config file found: {}\".format(cfgfilepath))\n            cfgfile_string = cfg_file.read()\n    except TypeError:\n        print(\"Config file not found at\")\n        pass\n    args_cfgfile = eval(cfgfile_string)\n\n    merged_dict = vars(args_cfgfile).copy()\n    for k,v in vars(args_cmdline).items():\n        if v != None:\n            merged_dict[k] = v\n    return Namespace(**merged_dict)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/convert.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\nimport logging\nfrom argparse import ArgumentParser\nimport shutil\n\n# This Python script is based on the shell converter script provided in the MipNerF 360 repository.\nparser = ArgumentParser(\"Colmap converter\")\nparser.add_argument(\"--no_gpu\", action='store_true')\nparser.add_argument(\"--skip_matching\", action='store_true')\nparser.add_argument(\"--source_path\", \"-s\", required=True, type=str)\nparser.add_argument(\"--camera\", default=\"OPENCV\", type=str)\nparser.add_argument(\"--colmap_executable\", default=\"\", type=str)\nparser.add_argument(\"--resize\", action=\"store_true\")\nparser.add_argument(\"--magick_executable\", default=\"\", type=str)\nargs = parser.parse_args()\ncolmap_command = '\"{}\"'.format(args.colmap_executable) if len(args.colmap_executable) > 0 else \"colmap\"\nmagick_command = '\"{}\"'.format(args.magick_executable) if len(args.magick_executable) > 0 else \"magick\"\nuse_gpu = 1 if not args.no_gpu else 0\n\nif not args.skip_matching:\n    os.makedirs(args.source_path + \"/distorted/sparse\", exist_ok=True)\n\n    ## Feature extraction\n    feat_extracton_cmd = colmap_command + \" feature_extractor \"\\\n        \"--database_path \" + args.source_path + \"/distorted/database.db \\\n        --image_path \" + args.source_path + \"/input \\\n        --ImageReader.single_camera 1 \\\n        --ImageReader.camera_model \" + args.camera + \" \\\n        --SiftExtraction.use_gpu \" + str(use_gpu)\n    exit_code = os.system(feat_extracton_cmd)\n    if exit_code != 0:\n        logging.error(f\"Feature extraction failed with code {exit_code}. Exiting.\")\n        exit(exit_code)\n\n    ## Feature matching\n    feat_matching_cmd = colmap_command + \" exhaustive_matcher \\\n        --database_path \" + args.source_path + \"/distorted/database.db \\\n        --SiftMatching.use_gpu \" + str(use_gpu)\n    exit_code = os.system(feat_matching_cmd)\n    if exit_code != 0:\n        logging.error(f\"Feature matching failed with code {exit_code}. Exiting.\")\n        exit(exit_code)\n\n    ### Bundle adjustment\n    # The default Mapper tolerance is unnecessarily large,\n    # decreasing it speeds up bundle adjustment steps.\n    mapper_cmd = (colmap_command + \" mapper \\\n        --database_path \" + args.source_path + \"/distorted/database.db \\\n        --image_path \"  + args.source_path + \"/input \\\n        --output_path \"  + args.source_path + \"/distorted/sparse \\\n        --Mapper.ba_global_function_tolerance=0.000001\")\n    exit_code = os.system(mapper_cmd)\n    if exit_code != 0:\n        logging.error(f\"Mapper failed with code {exit_code}. Exiting.\")\n        exit(exit_code)\n\n### Image undistortion\n## We need to undistort our images into ideal pinhole intrinsics.\nimg_undist_cmd = (colmap_command + \" image_undistorter \\\n    --image_path \" + args.source_path + \"/input \\\n    --input_path \" + args.source_path + \"/distorted/sparse/0 \\\n    --output_path \" + args.source_path + \"\\\n    --output_type COLMAP\")\nexit_code = os.system(img_undist_cmd)\nif exit_code != 0:\n    logging.error(f\"Mapper failed with code {exit_code}. Exiting.\")\n    exit(exit_code)\n\nfiles = os.listdir(args.source_path + \"/sparse\")\nos.makedirs(args.source_path + \"/sparse/0\", exist_ok=True)\n# Copy each file from the source directory to the destination directory\nfor file in files:\n    if file == '0':\n        continue\n    source_file = os.path.join(args.source_path, \"sparse\", file)\n    destination_file = os.path.join(args.source_path, \"sparse\", \"0\", file)\n    shutil.move(source_file, destination_file)\n\nif(args.resize):\n    print(\"Copying and resizing...\")\n\n    # Resize images.\n    os.makedirs(args.source_path + \"/images_2\", exist_ok=True)\n    os.makedirs(args.source_path + \"/images_4\", exist_ok=True)\n    os.makedirs(args.source_path + \"/images_8\", exist_ok=True)\n    # Get the list of files in the source directory\n    files = os.listdir(args.source_path + \"/images\")\n    # Copy each file from the source directory to the destination directory\n    for file in files:\n        source_file = os.path.join(args.source_path, \"images\", file)\n\n        destination_file = os.path.join(args.source_path, \"images_2\", file)\n        shutil.copy2(source_file, destination_file)\n        exit_code = os.system(magick_command + \" mogrify -resize 50% \" + destination_file)\n        if exit_code != 0:\n            logging.error(f\"50% resize failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n\n        destination_file = os.path.join(args.source_path, \"images_4\", file)\n        shutil.copy2(source_file, destination_file)\n        exit_code = os.system(magick_command + \" mogrify -resize 25% \" + destination_file)\n        if exit_code != 0:\n            logging.error(f\"25% resize failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n\n        destination_file = os.path.join(args.source_path, \"images_8\", file)\n        shutil.copy2(source_file, destination_file)\n        exit_code = os.system(magick_command + \" mogrify -resize 12.5% \" + destination_file)\n        if exit_code != 0:\n            logging.error(f\"12.5% resize failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n\nprint(\"Done.\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/environment.yml",
    "content": "name: gaussian_splatting\nchannels:\n  - pytorch\n  - conda-forge\n  - defaults\ndependencies:\n  - cudatoolkit=11.6\n  - plyfile=0.8.1\n  - python=3.7.13\n  - pip=22.3.1\n  - pytorch=1.12.1\n  - torchaudio=0.12.1\n  - torchvision=0.13.1\n  - tqdm\n  - pip:\n    - submodules/diff-gaussian-rasterization\n    - submodules/simple-knn"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/full_eval.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\nfrom argparse import ArgumentParser\n\nmipnerf360_outdoor_scenes = [\"bicycle\", \"flowers\", \"garden\", \"stump\", \"treehill\"]\nmipnerf360_indoor_scenes = [\"room\", \"counter\", \"kitchen\", \"bonsai\"]\ntanks_and_temples_scenes = [\"truck\", \"train\"]\ndeep_blending_scenes = [\"drjohnson\", \"playroom\"]\n\nparser = ArgumentParser(description=\"Full evaluation script parameters\")\nparser.add_argument(\"--skip_training\", action=\"store_true\")\nparser.add_argument(\"--skip_rendering\", action=\"store_true\")\nparser.add_argument(\"--skip_metrics\", action=\"store_true\")\nparser.add_argument(\"--output_path\", default=\"./eval\")\nargs, _ = parser.parse_known_args()\n\nall_scenes = []\nall_scenes.extend(mipnerf360_outdoor_scenes)\nall_scenes.extend(mipnerf360_indoor_scenes)\nall_scenes.extend(tanks_and_temples_scenes)\nall_scenes.extend(deep_blending_scenes)\n\nif not args.skip_training or not args.skip_rendering:\n    parser.add_argument('--mipnerf360', \"-m360\", required=True, type=str)\n    parser.add_argument(\"--tanksandtemples\", \"-tat\", required=True, type=str)\n    parser.add_argument(\"--deepblending\", \"-db\", required=True, type=str)\n    args = parser.parse_args()\n\nif not args.skip_training:\n    common_args = \" --quiet --eval --test_iterations -1 \"\n    for scene in mipnerf360_outdoor_scenes:\n        source = args.mipnerf360 + \"/\" + scene\n        os.system(\"python train.py -s \" + source + \" -i images_4 -m \" + args.output_path + \"/\" + scene + common_args)\n    for scene in mipnerf360_indoor_scenes:\n        source = args.mipnerf360 + \"/\" + scene\n        os.system(\"python train.py -s \" + source + \" -i images_2 -m \" + args.output_path + \"/\" + scene + common_args)\n    for scene in tanks_and_temples_scenes:\n        source = args.tanksandtemples + \"/\" + scene\n        os.system(\"python train.py -s \" + source + \" -m \" + args.output_path + \"/\" + scene + common_args)\n    for scene in deep_blending_scenes:\n        source = args.deepblending + \"/\" + scene\n        os.system(\"python train.py -s \" + source + \" -m \" + args.output_path + \"/\" + scene + common_args)\n\nif not args.skip_rendering:\n    all_sources = []\n    for scene in mipnerf360_outdoor_scenes:\n        all_sources.append(args.mipnerf360 + \"/\" + scene)\n    for scene in mipnerf360_indoor_scenes:\n        all_sources.append(args.mipnerf360 + \"/\" + scene)\n    for scene in tanks_and_temples_scenes:\n        all_sources.append(args.tanksandtemples + \"/\" + scene)\n    for scene in deep_blending_scenes:\n        all_sources.append(args.deepblending + \"/\" + scene)\n\n    common_args = \" --quiet --eval --skip_train\"\n    for scene, source in zip(all_scenes, all_sources):\n        os.system(\"python render.py --iteration 7000 -s \" + source + \" -m \" + args.output_path + \"/\" + scene + common_args)\n        os.system(\"python render.py --iteration 30000 -s \" + source + \" -m \" + args.output_path + \"/\" + scene + common_args)\n\nif not args.skip_metrics:\n    scenes_string = \"\"\n    for scene in all_scenes:\n        scenes_string += \"\\\"\" + args.output_path + \"/\" + scene + \"\\\" \"\n\n    os.system(\"python metrics.py -m \" + scenes_string)"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/gaussian_renderer/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport math\nfrom diff_gaussian_rasterization import GaussianRasterizationSettings, GaussianRasterizer\nfrom scene.gaussian_model import GaussianModel\nfrom utils.sh_utils import eval_sh\n\ndef render(viewpoint_camera, pc : GaussianModel, pipe, bg_color : torch.Tensor, scaling_modifier = 1.0, override_color = None):\n    \"\"\"\n    Render the scene. \n    \n    Background tensor (bg_color) must be on GPU!\n    \"\"\"\n \n    # Create zero tensor. We will use it to make pytorch return gradients of the 2D (screen-space) means\n    screenspace_points = torch.zeros_like(pc.get_xyz, dtype=pc.get_xyz.dtype, requires_grad=True, device=\"cuda\") + 0\n    try:\n        screenspace_points.retain_grad()\n    except:\n        pass\n\n    # Set up rasterization configuration\n    tanfovx = math.tan(viewpoint_camera.FoVx * 0.5)\n    tanfovy = math.tan(viewpoint_camera.FoVy * 0.5)\n\n    raster_settings = GaussianRasterizationSettings(\n        image_height=int(viewpoint_camera.image_height),\n        image_width=int(viewpoint_camera.image_width),\n        tanfovx=tanfovx,\n        tanfovy=tanfovy,\n        bg=bg_color,\n        scale_modifier=scaling_modifier,\n        viewmatrix=viewpoint_camera.world_view_transform,\n        projmatrix=viewpoint_camera.full_proj_transform,\n        sh_degree=pc.active_sh_degree,\n        campos=viewpoint_camera.camera_center,\n        prefiltered=False,\n        debug=pipe.debug\n    )\n\n    rasterizer = GaussianRasterizer(raster_settings=raster_settings)\n\n    means3D = pc.get_xyz\n    means2D = screenspace_points\n    opacity = pc.get_opacity\n\n    # If precomputed 3d covariance is provided, use it. If not, then it will be computed from\n    # scaling / rotation by the rasterizer.\n    scales = None\n    rotations = None\n    cov3D_precomp = None\n    if pipe.compute_cov3D_python:\n        cov3D_precomp = pc.get_covariance(scaling_modifier)\n    else:\n        scales = pc.get_scaling\n        rotations = pc.get_rotation\n\n    # If precomputed colors are provided, use them. Otherwise, if it is desired to precompute colors\n    # from SHs in Python, do it. If not, then SH -> RGB conversion will be done by rasterizer.\n    shs = None\n    colors_precomp = None\n    if override_color is None:\n        if pipe.convert_SHs_python:\n            shs_view = pc.get_features.transpose(1, 2).view(-1, 3, (pc.max_sh_degree+1)**2)\n            dir_pp = (pc.get_xyz - viewpoint_camera.camera_center.repeat(pc.get_features.shape[0], 1))\n            dir_pp_normalized = dir_pp/dir_pp.norm(dim=1, keepdim=True)\n            sh2rgb = eval_sh(pc.active_sh_degree, shs_view, dir_pp_normalized)\n            colors_precomp = torch.clamp_min(sh2rgb + 0.5, 0.0)\n        else:\n            shs = pc.get_features\n    else:\n        colors_precomp = override_color\n\n    # Rasterize visible Gaussians to image, obtain their radii (on screen). \n    rendered_image, radii = rasterizer(\n        means3D = means3D,\n        means2D = means2D,\n        shs = shs,\n        colors_precomp = colors_precomp,\n        opacities = opacity,\n        scales = scales,\n        rotations = rotations,\n        cov3D_precomp = cov3D_precomp)\n\n    # Those Gaussians that were frustum culled or had a radius of 0 were not visible.\n    # They will be excluded from value updates used in the splitting criteria.\n    return {\"render\": rendered_image,\n            \"viewspace_points\": screenspace_points,\n            \"visibility_filter\" : radii > 0,\n            \"radii\": radii}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/gaussian_renderer/network_gui.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport traceback\nimport socket\nimport json\nfrom scene.cameras import MiniCam\n\nhost = \"127.0.0.1\"\nport = 6009\n\nconn = None\naddr = None\n\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\ndef init(wish_host, wish_port):\n    global host, port, listener\n    host = wish_host\n    port = wish_port\n    listener.bind((host, port))\n    listener.listen()\n    listener.settimeout(0)\n\ndef try_connect():\n    global conn, addr, listener\n    try:\n        conn, addr = listener.accept()\n        print(f\"\\nConnected by {addr}\")\n        conn.settimeout(None)\n    except Exception as inst:\n        pass\n            \ndef read():\n    global conn\n    messageLength = conn.recv(4)\n    messageLength = int.from_bytes(messageLength, 'little')\n    message = conn.recv(messageLength)\n    return json.loads(message.decode(\"utf-8\"))\n\ndef send(message_bytes, verify):\n    global conn\n    if message_bytes != None:\n        conn.sendall(message_bytes)\n    conn.sendall(len(verify).to_bytes(4, 'little'))\n    conn.sendall(bytes(verify, 'ascii'))\n\ndef receive():\n    message = read()\n\n    width = message[\"resolution_x\"]\n    height = message[\"resolution_y\"]\n\n    if width != 0 and height != 0:\n        try:\n            do_training = bool(message[\"train\"])\n            fovy = message[\"fov_y\"]\n            fovx = message[\"fov_x\"]\n            znear = message[\"z_near\"]\n            zfar = message[\"z_far\"]\n            do_shs_python = bool(message[\"shs_python\"])\n            do_rot_scale_python = bool(message[\"rot_scale_python\"])\n            keep_alive = bool(message[\"keep_alive\"])\n            scaling_modifier = message[\"scaling_modifier\"]\n            world_view_transform = torch.reshape(torch.tensor(message[\"view_matrix\"]), (4, 4)).cuda()\n            world_view_transform[:,1] = -world_view_transform[:,1]\n            world_view_transform[:,2] = -world_view_transform[:,2]\n            full_proj_transform = torch.reshape(torch.tensor(message[\"view_projection_matrix\"]), (4, 4)).cuda()\n            full_proj_transform[:,1] = -full_proj_transform[:,1]\n            custom_cam = MiniCam(width, height, fovy, fovx, znear, zfar, world_view_transform, full_proj_transform)\n        except Exception as e:\n            print(\"\")\n            traceback.print_exc()\n            raise e\n        return custom_cam, do_training, do_shs_python, do_rot_scale_python, keep_alive, scaling_modifier\n    else:\n        return None, None, None, None, None, None"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/lpipsPyTorch/__init__.py",
    "content": "import torch\n\nfrom .modules.lpips import LPIPS\n\n\ndef lpips(x: torch.Tensor,\n          y: torch.Tensor,\n          net_type: str = 'alex',\n          version: str = '0.1'):\n    r\"\"\"Function that measures\n    Learned Perceptual Image Patch Similarity (LPIPS).\n\n    Arguments:\n        x, y (torch.Tensor): the input tensors to compare.\n        net_type (str): the network type to compare the features: \n                        'alex' | 'squeeze' | 'vgg'. Default: 'alex'.\n        version (str): the version of LPIPS. Default: 0.1.\n    \"\"\"\n    device = x.device\n    criterion = LPIPS(net_type, version).to(device)\n    return criterion(x, y)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/lpipsPyTorch/modules/lpips.py",
    "content": "import torch\nimport torch.nn as nn\n\nfrom .networks import get_network, LinLayers\nfrom .utils import get_state_dict\n\n\nclass LPIPS(nn.Module):\n    r\"\"\"Creates a criterion that measures\n    Learned Perceptual Image Patch Similarity (LPIPS).\n\n    Arguments:\n        net_type (str): the network type to compare the features: \n                        'alex' | 'squeeze' | 'vgg'. Default: 'alex'.\n        version (str): the version of LPIPS. Default: 0.1.\n    \"\"\"\n    def __init__(self, net_type: str = 'alex', version: str = '0.1'):\n\n        assert version in ['0.1'], 'v0.1 is only supported now'\n\n        super(LPIPS, self).__init__()\n\n        # pretrained network\n        self.net = get_network(net_type)\n\n        # linear layers\n        self.lin = LinLayers(self.net.n_channels_list)\n        self.lin.load_state_dict(get_state_dict(net_type, version))\n\n    def forward(self, x: torch.Tensor, y: torch.Tensor):\n        feat_x, feat_y = self.net(x), self.net(y)\n\n        diff = [(fx - fy) ** 2 for fx, fy in zip(feat_x, feat_y)]\n        res = [l(d).mean((2, 3), True) for d, l in zip(diff, self.lin)]\n\n        return torch.sum(torch.cat(res, 0), 0, True)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/lpipsPyTorch/modules/networks.py",
    "content": "from typing import Sequence\n\nfrom itertools import chain\n\nimport torch\nimport torch.nn as nn\nfrom torchvision import models\n\nfrom .utils import normalize_activation\n\n\ndef get_network(net_type: str):\n    if net_type == 'alex':\n        return AlexNet()\n    elif net_type == 'squeeze':\n        return SqueezeNet()\n    elif net_type == 'vgg':\n        return VGG16()\n    else:\n        raise NotImplementedError('choose net_type from [alex, squeeze, vgg].')\n\n\nclass LinLayers(nn.ModuleList):\n    def __init__(self, n_channels_list: Sequence[int]):\n        super(LinLayers, self).__init__([\n            nn.Sequential(\n                nn.Identity(),\n                nn.Conv2d(nc, 1, 1, 1, 0, bias=False)\n            ) for nc in n_channels_list\n        ])\n\n        for param in self.parameters():\n            param.requires_grad = False\n\n\nclass BaseNet(nn.Module):\n    def __init__(self):\n        super(BaseNet, self).__init__()\n\n        # register buffer\n        self.register_buffer(\n            'mean', torch.Tensor([-.030, -.088, -.188])[None, :, None, None])\n        self.register_buffer(\n            'std', torch.Tensor([.458, .448, .450])[None, :, None, None])\n\n    def set_requires_grad(self, state: bool):\n        for param in chain(self.parameters(), self.buffers()):\n            param.requires_grad = state\n\n    def z_score(self, x: torch.Tensor):\n        return (x - self.mean) / self.std\n\n    def forward(self, x: torch.Tensor):\n        x = self.z_score(x)\n\n        output = []\n        for i, (_, layer) in enumerate(self.layers._modules.items(), 1):\n            x = layer(x)\n            if i in self.target_layers:\n                output.append(normalize_activation(x))\n            if len(output) == len(self.target_layers):\n                break\n        return output\n\n\nclass SqueezeNet(BaseNet):\n    def __init__(self):\n        super(SqueezeNet, self).__init__()\n\n        self.layers = models.squeezenet1_1(True).features\n        self.target_layers = [2, 5, 8, 10, 11, 12, 13]\n        self.n_channels_list = [64, 128, 256, 384, 384, 512, 512]\n\n        self.set_requires_grad(False)\n\n\nclass AlexNet(BaseNet):\n    def __init__(self):\n        super(AlexNet, self).__init__()\n\n        self.layers = models.alexnet(True).features\n        self.target_layers = [2, 5, 8, 10, 12]\n        self.n_channels_list = [64, 192, 384, 256, 256]\n\n        self.set_requires_grad(False)\n\n\nclass VGG16(BaseNet):\n    def __init__(self):\n        super(VGG16, self).__init__()\n\n        self.layers = models.vgg16(weights=models.VGG16_Weights.IMAGENET1K_V1).features\n        self.target_layers = [4, 9, 16, 23, 30]\n        self.n_channels_list = [64, 128, 256, 512, 512]\n\n        self.set_requires_grad(False)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/lpipsPyTorch/modules/utils.py",
    "content": "from collections import OrderedDict\n\nimport torch\n\n\ndef normalize_activation(x, eps=1e-10):\n    norm_factor = torch.sqrt(torch.sum(x ** 2, dim=1, keepdim=True))\n    return x / (norm_factor + eps)\n\n\ndef get_state_dict(net_type: str = 'alex', version: str = '0.1'):\n    # build url\n    url = 'https://raw.githubusercontent.com/richzhang/PerceptualSimilarity/' \\\n        + f'master/lpips/weights/v{version}/{net_type}.pth'\n\n    # download\n    old_state_dict = torch.hub.load_state_dict_from_url(\n        url, progress=True,\n        map_location=None if torch.cuda.is_available() else torch.device('cpu')\n    )\n\n    # rename keys\n    new_state_dict = OrderedDict()\n    for key, val in old_state_dict.items():\n        new_key = key\n        new_key = new_key.replace('lin', '')\n        new_key = new_key.replace('model.', '')\n        new_state_dict[new_key] = val\n\n    return new_state_dict\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/metrics.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom pathlib import Path\nimport os\nfrom PIL import Image\nimport torch\nimport torchvision.transforms.functional as tf\nfrom utils.loss_utils import ssim\nfrom lpipsPyTorch import lpips\nimport json\nfrom tqdm import tqdm\nfrom utils.image_utils import psnr\nfrom argparse import ArgumentParser\n\ndef readImages(renders_dir, gt_dir):\n    renders = []\n    gts = []\n    image_names = []\n    for fname in os.listdir(renders_dir):\n        render = Image.open(renders_dir / fname)\n        gt = Image.open(gt_dir / fname)\n        renders.append(tf.to_tensor(render).unsqueeze(0)[:, :3, :, :].cuda())\n        gts.append(tf.to_tensor(gt).unsqueeze(0)[:, :3, :, :].cuda())\n        image_names.append(fname)\n    return renders, gts, image_names\n\ndef evaluate(model_paths):\n\n    full_dict = {}\n    per_view_dict = {}\n    full_dict_polytopeonly = {}\n    per_view_dict_polytopeonly = {}\n    print(\"\")\n\n    for scene_dir in model_paths:\n        try:\n            print(\"Scene:\", scene_dir)\n            full_dict[scene_dir] = {}\n            per_view_dict[scene_dir] = {}\n            full_dict_polytopeonly[scene_dir] = {}\n            per_view_dict_polytopeonly[scene_dir] = {}\n\n            test_dir = Path(scene_dir) / \"test\"\n\n            for method in os.listdir(test_dir):\n                print(\"Method:\", method)\n\n                full_dict[scene_dir][method] = {}\n                per_view_dict[scene_dir][method] = {}\n                full_dict_polytopeonly[scene_dir][method] = {}\n                per_view_dict_polytopeonly[scene_dir][method] = {}\n\n                method_dir = test_dir / method\n                gt_dir = method_dir/ \"gt\"\n                renders_dir = method_dir / \"renders\"\n                renders, gts, image_names = readImages(renders_dir, gt_dir)\n\n                ssims = []\n                psnrs = []\n                lpipss = []\n\n                for idx in tqdm(range(len(renders)), desc=\"Metric evaluation progress\"):\n                    ssims.append(ssim(renders[idx], gts[idx]))\n                    psnrs.append(psnr(renders[idx], gts[idx]))\n                    lpipss.append(lpips(renders[idx], gts[idx], net_type='vgg'))\n\n                print(\"  SSIM : {:>12.7f}\".format(torch.tensor(ssims).mean(), \".5\"))\n                print(\"  PSNR : {:>12.7f}\".format(torch.tensor(psnrs).mean(), \".5\"))\n                print(\"  LPIPS: {:>12.7f}\".format(torch.tensor(lpipss).mean(), \".5\"))\n                print(\"\")\n\n                full_dict[scene_dir][method].update({\"SSIM\": torch.tensor(ssims).mean().item(),\n                                                        \"PSNR\": torch.tensor(psnrs).mean().item(),\n                                                        \"LPIPS\": torch.tensor(lpipss).mean().item()})\n                per_view_dict[scene_dir][method].update({\"SSIM\": {name: ssim for ssim, name in zip(torch.tensor(ssims).tolist(), image_names)},\n                                                            \"PSNR\": {name: psnr for psnr, name in zip(torch.tensor(psnrs).tolist(), image_names)},\n                                                            \"LPIPS\": {name: lp for lp, name in zip(torch.tensor(lpipss).tolist(), image_names)}})\n\n            with open(scene_dir + \"/results.json\", 'w') as fp:\n                json.dump(full_dict[scene_dir], fp, indent=True)\n            with open(scene_dir + \"/per_view.json\", 'w') as fp:\n                json.dump(per_view_dict[scene_dir], fp, indent=True)\n        except:\n            print(\"Unable to compute metrics for model\", scene_dir)\n\nif __name__ == \"__main__\":\n    device = torch.device(\"cuda:0\")\n    torch.cuda.set_device(device)\n\n    # Set up command line argument parser\n    parser = ArgumentParser(description=\"Training script parameters\")\n    parser.add_argument('--model_paths', '-m', required=True, nargs=\"+\", type=str, default=[])\n    args = parser.parse_args()\n    evaluate(args.model_paths)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/render.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nfrom scene import Scene\nimport os\nfrom tqdm import tqdm\nfrom os import makedirs\nfrom gaussian_renderer import render\nimport torchvision\nfrom utils.general_utils import safe_state\nfrom argparse import ArgumentParser\nfrom arguments import ModelParams, PipelineParams, get_combined_args\nfrom gaussian_renderer import GaussianModel\n\ndef render_set(model_path, name, iteration, views, gaussians, pipeline, background):\n    render_path = os.path.join(model_path, name, \"ours_{}\".format(iteration), \"renders\")\n    gts_path = os.path.join(model_path, name, \"ours_{}\".format(iteration), \"gt\")\n\n    makedirs(render_path, exist_ok=True)\n    makedirs(gts_path, exist_ok=True)\n\n    for idx, view in enumerate(tqdm(views, desc=\"Rendering progress\")):\n        rendering = render(view, gaussians, pipeline, background)[\"render\"]\n        gt = view.original_image[0:3, :, :]\n        torchvision.utils.save_image(rendering, os.path.join(render_path, '{0:05d}'.format(idx) + \".png\"))\n        torchvision.utils.save_image(gt, os.path.join(gts_path, '{0:05d}'.format(idx) + \".png\"))\n\ndef render_sets(dataset : ModelParams, iteration : int, pipeline : PipelineParams, skip_train : bool, skip_test : bool):\n    with torch.no_grad():\n        gaussians = GaussianModel(dataset.sh_degree)\n        scene = Scene(dataset, gaussians, load_iteration=iteration, shuffle=False)\n\n        bg_color = [1,1,1] if dataset.white_background else [0, 0, 0]\n        background = torch.tensor(bg_color, dtype=torch.float32, device=\"cuda\")\n\n        if not skip_train:\n             render_set(dataset.model_path, \"train\", scene.loaded_iter, scene.getTrainCameras(), gaussians, pipeline, background)\n\n        if not skip_test:\n             render_set(dataset.model_path, \"test\", scene.loaded_iter, scene.getTestCameras(), gaussians, pipeline, background)\n\nif __name__ == \"__main__\":\n    # Set up command line argument parser\n    parser = ArgumentParser(description=\"Testing script parameters\")\n    model = ModelParams(parser, sentinel=True)\n    pipeline = PipelineParams(parser)\n    parser.add_argument(\"--iteration\", default=-1, type=int)\n    parser.add_argument(\"--skip_train\", action=\"store_true\")\n    parser.add_argument(\"--skip_test\", action=\"store_true\")\n    parser.add_argument(\"--quiet\", action=\"store_true\")\n    args = get_combined_args(parser)\n    print(\"Rendering \" + args.model_path)\n\n    # Initialize system state (RNG)\n    safe_state(args.quiet)\n\n    render_sets(model.extract(args), args.iteration, pipeline.extract(args), args.skip_train, args.skip_test)"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/scene/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\nimport random\nimport json\nfrom utils.system_utils import searchForMaxIteration\nfrom scene.dataset_readers import sceneLoadTypeCallbacks\nfrom scene.gaussian_model import GaussianModel\nfrom arguments import ModelParams\nfrom utils.camera_utils import cameraList_from_camInfos, camera_to_JSON\n\nclass Scene:\n\n    gaussians : GaussianModel\n\n    def __init__(self, args : ModelParams, gaussians : GaussianModel, load_iteration=None, shuffle=True, resolution_scales=[1.0]):\n        \"\"\"b\n        :param path: Path to colmap scene main folder.\n        \"\"\"\n        self.model_path = args.model_path\n        self.loaded_iter = None\n        self.gaussians = gaussians\n\n        if load_iteration:\n            if load_iteration == -1:\n                self.loaded_iter = searchForMaxIteration(os.path.join(self.model_path, \"point_cloud\"))\n            else:\n                self.loaded_iter = load_iteration\n            print(\"Loading trained model at iteration {}\".format(self.loaded_iter))\n\n        self.train_cameras = {}\n        self.test_cameras = {}\n\n        if os.path.exists(os.path.join(args.source_path, \"sparse\")):\n            scene_info = sceneLoadTypeCallbacks[\"Colmap\"](args.source_path, args.images, args.eval)\n        elif os.path.exists(os.path.join(args.source_path, \"transforms_train.json\")):\n            print(\"Found transforms_train.json file, assuming Blender data set!\")\n            scene_info = sceneLoadTypeCallbacks[\"Blender\"](args.source_path, args.white_background, args.eval)\n        else:\n            assert False, \"Could not recognize scene type!\"\n\n        if not self.loaded_iter:\n            with open(scene_info.ply_path, 'rb') as src_file, open(os.path.join(self.model_path, \"input.ply\") , 'wb') as dest_file:\n                dest_file.write(src_file.read())\n            json_cams = []\n            camlist = []\n            if scene_info.test_cameras:\n                camlist.extend(scene_info.test_cameras)\n            if scene_info.train_cameras:\n                camlist.extend(scene_info.train_cameras)\n            for id, cam in enumerate(camlist):\n                json_cams.append(camera_to_JSON(id, cam))\n            with open(os.path.join(self.model_path, \"cameras.json\"), 'w') as file:\n                json.dump(json_cams, file)\n\n        if shuffle:\n            random.shuffle(scene_info.train_cameras)  # Multi-res consistent random shuffling\n            random.shuffle(scene_info.test_cameras)  # Multi-res consistent random shuffling\n\n        self.cameras_extent = scene_info.nerf_normalization[\"radius\"]\n\n        for resolution_scale in resolution_scales:\n            print(\"Loading Training Cameras\")\n            self.train_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.train_cameras, resolution_scale, args)\n            print(\"Loading Test Cameras\")\n            self.test_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.test_cameras, resolution_scale, args)\n\n        if self.loaded_iter:\n            self.gaussians.load_ply(os.path.join(self.model_path,\n                                                           \"point_cloud\",\n                                                           \"iteration_\" + str(self.loaded_iter),\n                                                           \"point_cloud.ply\"))\n        else:\n            self.gaussians.create_from_pcd(scene_info.point_cloud, self.cameras_extent)\n\n    def save(self, iteration):\n        point_cloud_path = os.path.join(self.model_path, \"point_cloud/iteration_{}\".format(iteration))\n        self.gaussians.save_ply(os.path.join(point_cloud_path, \"point_cloud.ply\"))\n\n    def getTrainCameras(self, scale=1.0):\n        return self.train_cameras[scale]\n\n    def getTestCameras(self, scale=1.0):\n        return self.test_cameras[scale]"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/scene/cameras.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nfrom torch import nn\nimport numpy as np\nfrom utils.graphics_utils import getWorld2View2, getProjectionMatrix\n\nclass Camera(nn.Module):\n    def __init__(self, colmap_id, R, T, FoVx, FoVy, image, gt_alpha_mask,\n                 image_name, uid,\n                 trans=np.array([0.0, 0.0, 0.0]), scale=1.0, data_device = \"cuda\"\n                 ):\n        super(Camera, self).__init__()\n\n        self.uid = uid\n        self.colmap_id = colmap_id\n        self.R = R\n        self.T = T\n        self.FoVx = FoVx\n        self.FoVy = FoVy\n        self.image_name = image_name\n\n        try:\n            self.data_device = torch.device(data_device)\n        except Exception as e:\n            print(e)\n            print(f\"[Warning] Custom device {data_device} failed, fallback to default cuda device\" )\n            self.data_device = torch.device(\"cuda\")\n\n        self.original_image = image.clamp(0.0, 1.0).to(self.data_device)\n        self.image_width = self.original_image.shape[2]\n        self.image_height = self.original_image.shape[1]\n\n        if gt_alpha_mask is not None:\n            self.original_image *= gt_alpha_mask.to(self.data_device)\n        else:\n            self.original_image *= torch.ones((1, self.image_height, self.image_width), device=self.data_device)\n\n        self.zfar = 100.0\n        self.znear = 0.01\n\n        self.trans = trans\n        self.scale = scale\n\n        self.world_view_transform = torch.tensor(getWorld2View2(R, T, trans, scale)).transpose(0, 1).cuda()\n        self.projection_matrix = getProjectionMatrix(znear=self.znear, zfar=self.zfar, fovX=self.FoVx, fovY=self.FoVy).transpose(0,1).cuda()\n        self.full_proj_transform = (self.world_view_transform.unsqueeze(0).bmm(self.projection_matrix.unsqueeze(0))).squeeze(0)\n        self.camera_center = self.world_view_transform.inverse()[3, :3]\n\nclass MiniCam:\n    def __init__(self, width, height, fovy, fovx, znear, zfar, world_view_transform, full_proj_transform):\n        self.image_width = width\n        self.image_height = height    \n        self.FoVy = fovy\n        self.FoVx = fovx\n        self.znear = znear\n        self.zfar = zfar\n        self.world_view_transform = world_view_transform\n        self.full_proj_transform = full_proj_transform\n        view_inv = torch.inverse(self.world_view_transform)\n        self.camera_center = view_inv[3][:3]\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/scene/colmap_loader.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport numpy as np\nimport collections\nimport struct\n\nCameraModel = collections.namedtuple(\n    \"CameraModel\", [\"model_id\", \"model_name\", \"num_params\"])\nCamera = collections.namedtuple(\n    \"Camera\", [\"id\", \"model\", \"width\", \"height\", \"params\"])\nBaseImage = collections.namedtuple(\n    \"Image\", [\"id\", \"qvec\", \"tvec\", \"camera_id\", \"name\", \"xys\", \"point3D_ids\"])\nPoint3D = collections.namedtuple(\n    \"Point3D\", [\"id\", \"xyz\", \"rgb\", \"error\", \"image_ids\", \"point2D_idxs\"])\nCAMERA_MODELS = {\n    CameraModel(model_id=0, model_name=\"SIMPLE_PINHOLE\", num_params=3),\n    CameraModel(model_id=1, model_name=\"PINHOLE\", num_params=4),\n    CameraModel(model_id=2, model_name=\"SIMPLE_RADIAL\", num_params=4),\n    CameraModel(model_id=3, model_name=\"RADIAL\", num_params=5),\n    CameraModel(model_id=4, model_name=\"OPENCV\", num_params=8),\n    CameraModel(model_id=5, model_name=\"OPENCV_FISHEYE\", num_params=8),\n    CameraModel(model_id=6, model_name=\"FULL_OPENCV\", num_params=12),\n    CameraModel(model_id=7, model_name=\"FOV\", num_params=5),\n    CameraModel(model_id=8, model_name=\"SIMPLE_RADIAL_FISHEYE\", num_params=4),\n    CameraModel(model_id=9, model_name=\"RADIAL_FISHEYE\", num_params=5),\n    CameraModel(model_id=10, model_name=\"THIN_PRISM_FISHEYE\", num_params=12)\n}\nCAMERA_MODEL_IDS = dict([(camera_model.model_id, camera_model)\n                         for camera_model in CAMERA_MODELS])\nCAMERA_MODEL_NAMES = dict([(camera_model.model_name, camera_model)\n                           for camera_model in CAMERA_MODELS])\n\n\ndef qvec2rotmat(qvec):\n    return np.array([\n        [1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,\n         2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],\n         2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]],\n        [2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],\n         1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,\n         2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]],\n        [2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],\n         2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],\n         1 - 2 * qvec[1]**2 - 2 * qvec[2]**2]])\n\ndef rotmat2qvec(R):\n    Rxx, Ryx, Rzx, Rxy, Ryy, Rzy, Rxz, Ryz, Rzz = R.flat\n    K = np.array([\n        [Rxx - Ryy - Rzz, 0, 0, 0],\n        [Ryx + Rxy, Ryy - Rxx - Rzz, 0, 0],\n        [Rzx + Rxz, Rzy + Ryz, Rzz - Rxx - Ryy, 0],\n        [Ryz - Rzy, Rzx - Rxz, Rxy - Ryx, Rxx + Ryy + Rzz]]) / 3.0\n    eigvals, eigvecs = np.linalg.eigh(K)\n    qvec = eigvecs[[3, 0, 1, 2], np.argmax(eigvals)]\n    if qvec[0] < 0:\n        qvec *= -1\n    return qvec\n\nclass Image(BaseImage):\n    def qvec2rotmat(self):\n        return qvec2rotmat(self.qvec)\n\ndef read_next_bytes(fid, num_bytes, format_char_sequence, endian_character=\"<\"):\n    \"\"\"Read and unpack the next bytes from a binary file.\n    :param fid:\n    :param num_bytes: Sum of combination of {2, 4, 8}, e.g. 2, 6, 16, 30, etc.\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    :param endian_character: Any of {@, =, <, >, !}\n    :return: Tuple of read and unpacked values.\n    \"\"\"\n    data = fid.read(num_bytes)\n    return struct.unpack(endian_character + format_char_sequence, data)\n\ndef read_points3D_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    xyzs = None\n    rgbs = None\n    errors = None\n    num_points = 0\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                num_points += 1\n\n\n    xyzs = np.empty((num_points, 3))\n    rgbs = np.empty((num_points, 3))\n    errors = np.empty((num_points, 1))\n    count = 0\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                xyz = np.array(tuple(map(float, elems[1:4])))\n                rgb = np.array(tuple(map(int, elems[4:7])))\n                error = np.array(float(elems[7]))\n                xyzs[count] = xyz\n                rgbs[count] = rgb\n                errors[count] = error\n                count += 1\n\n    return xyzs, rgbs, errors\n\ndef read_points3D_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n\n\n    with open(path_to_model_file, \"rb\") as fid:\n        num_points = read_next_bytes(fid, 8, \"Q\")[0]\n\n        xyzs = np.empty((num_points, 3))\n        rgbs = np.empty((num_points, 3))\n        errors = np.empty((num_points, 1))\n\n        for p_id in range(num_points):\n            binary_point_line_properties = read_next_bytes(\n                fid, num_bytes=43, format_char_sequence=\"QdddBBBd\")\n            xyz = np.array(binary_point_line_properties[1:4])\n            rgb = np.array(binary_point_line_properties[4:7])\n            error = np.array(binary_point_line_properties[7])\n            track_length = read_next_bytes(\n                fid, num_bytes=8, format_char_sequence=\"Q\")[0]\n            track_elems = read_next_bytes(\n                fid, num_bytes=8*track_length,\n                format_char_sequence=\"ii\"*track_length)\n            xyzs[p_id] = xyz\n            rgbs[p_id] = rgb\n            errors[p_id] = error\n    return xyzs, rgbs, errors\n\ndef read_intrinsics_text(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_write_model.py\n    \"\"\"\n    cameras = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                camera_id = int(elems[0])\n                model = elems[1]\n                assert model == \"PINHOLE\", \"While the loader support other types, the rest of the code assumes PINHOLE\"\n                width = int(elems[2])\n                height = int(elems[3])\n                params = np.array(tuple(map(float, elems[4:])))\n                cameras[camera_id] = Camera(id=camera_id, model=model,\n                                            width=width, height=height,\n                                            params=params)\n    return cameras\n\ndef read_extrinsics_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_reg_images = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_reg_images):\n            binary_image_properties = read_next_bytes(\n                fid, num_bytes=64, format_char_sequence=\"idddddddi\")\n            image_id = binary_image_properties[0]\n            qvec = np.array(binary_image_properties[1:5])\n            tvec = np.array(binary_image_properties[5:8])\n            camera_id = binary_image_properties[8]\n            image_name = \"\"\n            current_char = read_next_bytes(fid, 1, \"c\")[0]\n            while current_char != b\"\\x00\":   # look for the ASCII 0 entry\n                image_name += current_char.decode(\"utf-8\")\n                current_char = read_next_bytes(fid, 1, \"c\")[0]\n            num_points2D = read_next_bytes(fid, num_bytes=8,\n                                           format_char_sequence=\"Q\")[0]\n            x_y_id_s = read_next_bytes(fid, num_bytes=24*num_points2D,\n                                       format_char_sequence=\"ddq\"*num_points2D)\n            xys = np.column_stack([tuple(map(float, x_y_id_s[0::3])),\n                                   tuple(map(float, x_y_id_s[1::3]))])\n            point3D_ids = np.array(tuple(map(int, x_y_id_s[2::3])))\n            images[image_id] = Image(\n                id=image_id, qvec=qvec, tvec=tvec,\n                camera_id=camera_id, name=image_name,\n                xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef read_intrinsics_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_cameras = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_cameras):\n            camera_properties = read_next_bytes(\n                fid, num_bytes=24, format_char_sequence=\"iiQQ\")\n            camera_id = camera_properties[0]\n            model_id = camera_properties[1]\n            model_name = CAMERA_MODEL_IDS[camera_properties[1]].model_name\n            width = camera_properties[2]\n            height = camera_properties[3]\n            num_params = CAMERA_MODEL_IDS[model_id].num_params\n            params = read_next_bytes(fid, num_bytes=8*num_params,\n                                     format_char_sequence=\"d\"*num_params)\n            cameras[camera_id] = Camera(id=camera_id,\n                                        model=model_name,\n                                        width=width,\n                                        height=height,\n                                        params=np.array(params))\n        assert len(cameras) == num_cameras\n    return cameras\n\n\ndef read_extrinsics_text(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_write_model.py\n    \"\"\"\n    images = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                image_id = int(elems[0])\n                qvec = np.array(tuple(map(float, elems[1:5])))\n                tvec = np.array(tuple(map(float, elems[5:8])))\n                camera_id = int(elems[8])\n                image_name = elems[9]\n                elems = fid.readline().split()\n                xys = np.column_stack([tuple(map(float, elems[0::3])),\n                                       tuple(map(float, elems[1::3]))])\n                point3D_ids = np.array(tuple(map(int, elems[2::3])))\n                images[image_id] = Image(\n                    id=image_id, qvec=qvec, tvec=tvec,\n                    camera_id=camera_id, name=image_name,\n                    xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef read_colmap_bin_array(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_dense.py\n\n    :param path: path to the colmap binary file.\n    :return: nd array with the floating point values in the value\n    \"\"\"\n    with open(path, \"rb\") as fid:\n        width, height, channels = np.genfromtxt(fid, delimiter=\"&\", max_rows=1,\n                                                usecols=(0, 1, 2), dtype=int)\n        fid.seek(0)\n        num_delimiter = 0\n        byte = fid.read(1)\n        while True:\n            if byte == b\"&\":\n                num_delimiter += 1\n                if num_delimiter >= 3:\n                    break\n            byte = fid.read(1)\n        array = np.fromfile(fid, np.float32)\n    array = array.reshape((width, height, channels), order=\"F\")\n    return np.transpose(array, (1, 0, 2)).squeeze()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/scene/dataset_readers.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\nimport sys\nfrom PIL import Image\nfrom typing import NamedTuple\nfrom scene.colmap_loader import read_extrinsics_text, read_intrinsics_text, qvec2rotmat, \\\n    read_extrinsics_binary, read_intrinsics_binary, read_points3D_binary, read_points3D_text\nfrom utils.graphics_utils import getWorld2View2, focal2fov, fov2focal\nimport numpy as np\nimport json\nfrom pathlib import Path\nfrom plyfile import PlyData, PlyElement\nfrom utils.sh_utils import SH2RGB\nfrom scene.gaussian_model import BasicPointCloud\n\nclass CameraInfo(NamedTuple):\n    uid: int\n    R: np.array\n    T: np.array\n    FovY: np.array\n    FovX: np.array\n    image: np.array\n    image_path: str\n    image_name: str\n    width: int\n    height: int\n\nclass SceneInfo(NamedTuple):\n    point_cloud: BasicPointCloud\n    train_cameras: list\n    test_cameras: list\n    nerf_normalization: dict\n    ply_path: str\n\ndef getNerfppNorm(cam_info):\n    def get_center_and_diag(cam_centers):\n        cam_centers = np.hstack(cam_centers)\n        avg_cam_center = np.mean(cam_centers, axis=1, keepdims=True)\n        center = avg_cam_center\n        dist = np.linalg.norm(cam_centers - center, axis=0, keepdims=True)\n        diagonal = np.max(dist)\n        return center.flatten(), diagonal\n\n    cam_centers = []\n\n    for cam in cam_info:\n        W2C = getWorld2View2(cam.R, cam.T)\n        C2W = np.linalg.inv(W2C)\n        cam_centers.append(C2W[:3, 3:4])\n\n    center, diagonal = get_center_and_diag(cam_centers)\n    radius = diagonal * 1.1\n\n    translate = -center\n\n    return {\"translate\": translate, \"radius\": radius}\n\ndef readColmapCameras(cam_extrinsics, cam_intrinsics, images_folder):\n    cam_infos = []\n    for idx, key in enumerate(cam_extrinsics):\n        sys.stdout.write('\\r')\n        # the exact output you're looking for:\n        sys.stdout.write(\"Reading camera {}/{}\".format(idx+1, len(cam_extrinsics)))\n        sys.stdout.flush()\n\n        extr = cam_extrinsics[key]\n        intr = cam_intrinsics[extr.camera_id]\n        height = intr.height\n        width = intr.width\n\n        uid = intr.id\n        R = np.transpose(qvec2rotmat(extr.qvec))\n        T = np.array(extr.tvec)\n\n        if intr.model==\"SIMPLE_PINHOLE\":\n            focal_length_x = intr.params[0]\n            FovY = focal2fov(focal_length_x, height)\n            FovX = focal2fov(focal_length_x, width)\n        elif intr.model==\"PINHOLE\":\n            focal_length_x = intr.params[0]\n            focal_length_y = intr.params[1]\n            FovY = focal2fov(focal_length_y, height)\n            FovX = focal2fov(focal_length_x, width)\n        else:\n            assert False, \"Colmap camera model not handled: only undistorted datasets (PINHOLE or SIMPLE_PINHOLE cameras) supported!\"\n\n        # image_path = os.path.join(images_folder, os.path.basename(extr.name))\n        ## HACK: \n        image_path = os.path.join(images_folder.replace('colmap', ''), os.path.basename(extr.name))\n        image_name = os.path.basename(image_path).split(\".\")[0]\n        image = Image.open(image_path)\n\n        cam_info = CameraInfo(uid=uid, R=R, T=T, FovY=FovY, FovX=FovX, image=image,\n                              image_path=image_path, image_name=image_name, width=width, height=height)\n        cam_infos.append(cam_info)\n    sys.stdout.write('\\n')\n    return cam_infos\n\ndef fetchPly(path):\n    plydata = PlyData.read(path)\n    vertices = plydata['vertex']\n    positions = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T\n    colors = np.vstack([vertices['red'], vertices['green'], vertices['blue']]).T / 255.0\n    normals = np.vstack([vertices['nx'], vertices['ny'], vertices['nz']]).T\n    return BasicPointCloud(points=positions, colors=colors, normals=normals)\n\ndef storePly(path, xyz, rgb):\n    # Define the dtype for the structured array\n    dtype = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('nx', 'f4'), ('ny', 'f4'), ('nz', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1')]\n    \n    normals = np.zeros_like(xyz)\n\n    elements = np.empty(xyz.shape[0], dtype=dtype)\n    attributes = np.concatenate((xyz, normals, rgb), axis=1)\n    elements[:] = list(map(tuple, attributes))\n\n    # Create the PlyData object and write to file\n    vertex_element = PlyElement.describe(elements, 'vertex')\n    ply_data = PlyData([vertex_element])\n    ply_data.write(path)\n\ndef readColmapSceneInfo(path, images, eval, llffhold=8):\n    try:\n        cameras_extrinsic_file = os.path.join(path, \"sparse/0\", \"images.bin\")\n        cameras_intrinsic_file = os.path.join(path, \"sparse/0\", \"cameras.bin\")\n        cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file)\n        cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file)\n    except:\n        cameras_extrinsic_file = os.path.join(path, \"sparse/0\", \"images.txt\")\n        cameras_intrinsic_file = os.path.join(path, \"sparse/0\", \"cameras.txt\")\n        cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file)\n        cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file)\n\n    reading_dir = \"images\" if images == None else images\n    cam_infos_unsorted = readColmapCameras(cam_extrinsics=cam_extrinsics, cam_intrinsics=cam_intrinsics, images_folder=os.path.join(path, reading_dir))\n    cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : x.image_name)\n\n    if eval:\n        train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0]\n        test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0]\n    else:\n        train_cam_infos = cam_infos\n        test_cam_infos = []\n\n    nerf_normalization = getNerfppNorm(train_cam_infos)\n\n    ply_path = os.path.join(path, \"sparse/0/points3D.ply\")\n    bin_path = os.path.join(path, \"sparse/0/points3D.bin\")\n    txt_path = os.path.join(path, \"sparse/0/points3D.txt\")\n    if not os.path.exists(ply_path):\n        print(\"Converting point3d.bin to .ply, will happen only the first time you open the scene.\")\n        try:\n            xyz, rgb, _ = read_points3D_binary(bin_path)\n        except:\n            xyz, rgb, _ = read_points3D_text(txt_path)\n        storePly(ply_path, xyz, rgb)\n    try:\n        pcd = fetchPly(ply_path)\n    except:\n        pcd = None\n\n    scene_info = SceneInfo(point_cloud=pcd,\n                           train_cameras=train_cam_infos,\n                           test_cameras=test_cam_infos,\n                           nerf_normalization=nerf_normalization,\n                           ply_path=ply_path)\n    return scene_info\n\ndef readCamerasFromTransforms(path, transformsfile, white_background, extension=\".png\"):\n    cam_infos = []\n\n    with open(os.path.join(path, transformsfile)) as json_file:\n        contents = json.load(json_file)\n        fovx = contents[\"camera_angle_x\"]\n\n        frames = contents[\"frames\"]\n        for idx, frame in enumerate(frames):\n            # Check if file_path already has an extension\n            file_path = frame[\"file_path\"]\n            if not file_path.endswith(extension):\n                file_path = file_path + extension\n            cam_name = os.path.join(path, file_path)\n\n            # NeRF 'transform_matrix' is a camera-to-world transform\n            c2w = np.array(frame[\"transform_matrix\"])\n            # change from OpenGL/Blender camera axes (Y up, Z back) to COLMAP (Y down, Z forward)\n            c2w[:3, 1:3] *= -1\n\n            # get the world-to-camera transform and set R, T\n            w2c = np.linalg.inv(c2w)\n            R = np.transpose(w2c[:3,:3])  # R is stored transposed due to 'glm' in CUDA code\n            T = w2c[:3, 3]\n\n            image_path = cam_name\n            image_name = Path(file_path).stem\n            image = Image.open(image_path)\n\n            im_data = np.array(image.convert(\"RGBA\"))\n\n            bg = np.array([1,1,1]) if white_background else np.array([0, 0, 0])\n\n            norm_data = im_data / 255.0\n            arr = norm_data[:,:,:3] * norm_data[:, :, 3:4] + bg * (1 - norm_data[:, :, 3:4])\n            image = Image.fromarray(np.array(arr*255.0, dtype=np.byte), \"RGB\")\n\n            fovy = focal2fov(fov2focal(fovx, image.size[0]), image.size[1])\n            FovY = fovy \n            FovX = fovx\n\n            cam_infos.append(CameraInfo(uid=idx, R=R, T=T, FovY=FovY, FovX=FovX, image=image,\n                            image_path=image_path, image_name=image_name, width=image.size[0], height=image.size[1]))\n            \n    return cam_infos\n\ndef readNerfSyntheticInfo(path, white_background, eval, extension=\".png\"):\n    print(\"Reading Training Transforms\")\n    train_cam_infos = readCamerasFromTransforms(path, \"transforms_train.json\", white_background, extension)\n    print(\"Reading Test Transforms\")\n    test_cam_infos = readCamerasFromTransforms(path, \"transforms_test.json\", white_background, extension)\n    \n    if not eval:\n        train_cam_infos.extend(test_cam_infos)\n        test_cam_infos = []\n\n    nerf_normalization = getNerfppNorm(train_cam_infos)\n\n    ply_path = os.path.join(path, \"points3d.ply\")\n    if not os.path.exists(ply_path):\n        # Since this data set has no colmap data, we start with random points\n        num_pts = 100_000\n        print(f\"Generating random point cloud ({num_pts})...\")\n        \n        # We create random points inside the bounds of the synthetic Blender scenes\n        xyz = np.random.random((num_pts, 3)) * 2.6 - 1.3\n        shs = np.random.random((num_pts, 3)) / 255.0\n        pcd = BasicPointCloud(points=xyz, colors=SH2RGB(shs), normals=np.zeros((num_pts, 3)))\n\n        storePly(ply_path, xyz, SH2RGB(shs) * 255)\n    try:\n        pcd = fetchPly(ply_path)\n    except:\n        pcd = None\n\n    scene_info = SceneInfo(point_cloud=pcd,\n                           train_cameras=train_cam_infos,\n                           test_cameras=test_cam_infos,\n                           nerf_normalization=nerf_normalization,\n                           ply_path=ply_path)\n    return scene_info\n\nsceneLoadTypeCallbacks = {\n    \"Colmap\": readColmapSceneInfo,\n    \"Blender\" : readNerfSyntheticInfo\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/scene/gaussian_model.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport numpy as np\nfrom utils.general_utils import inverse_sigmoid, get_expon_lr_func, build_rotation\nfrom torch import nn\nimport os\nfrom utils.system_utils import mkdir_p\nfrom plyfile import PlyData, PlyElement\nfrom utils.sh_utils import RGB2SH\nfrom simple_knn._C import distCUDA2\nfrom utils.graphics_utils import BasicPointCloud\nfrom utils.general_utils import strip_symmetric, build_scaling_rotation\n\nclass GaussianModel:\n\n    def setup_functions(self):\n        def build_covariance_from_scaling_rotation(scaling, scaling_modifier, rotation):\n            L = build_scaling_rotation(scaling_modifier * scaling, rotation)\n            actual_covariance = L @ L.transpose(1, 2)\n            symm = strip_symmetric(actual_covariance)\n            return symm\n        \n        self.scaling_activation = torch.exp\n        self.scaling_inverse_activation = torch.log\n\n        self.covariance_activation = build_covariance_from_scaling_rotation\n\n        self.opacity_activation = torch.sigmoid\n        self.inverse_opacity_activation = inverse_sigmoid\n\n        self.rotation_activation = torch.nn.functional.normalize\n\n\n    def __init__(self, sh_degree : int):\n        self.active_sh_degree = 0\n        self.max_sh_degree = sh_degree  \n        self._xyz = torch.empty(0)\n        self._features_dc = torch.empty(0)\n        self._features_rest = torch.empty(0)\n        self._scaling = torch.empty(0)\n        self._rotation = torch.empty(0)\n        self._opacity = torch.empty(0)\n        self.max_radii2D = torch.empty(0)\n        self.xyz_gradient_accum = torch.empty(0)\n        self.denom = torch.empty(0)\n        self.optimizer = None\n        self.percent_dense = 0\n        self.spatial_lr_scale = 0\n        self.setup_functions()\n\n    def capture(self):\n        return (\n            self.active_sh_degree,\n            self._xyz,\n            self._features_dc,\n            self._features_rest,\n            self._scaling,\n            self._rotation,\n            self._opacity,\n            self.max_radii2D,\n            self.xyz_gradient_accum,\n            self.denom,\n            self.optimizer.state_dict(),\n            self.spatial_lr_scale,\n        )\n    \n    def restore(self, model_args, training_args):\n        (self.active_sh_degree, \n        self._xyz, \n        self._features_dc, \n        self._features_rest,\n        self._scaling, \n        self._rotation, \n        self._opacity,\n        self.max_radii2D, \n        xyz_gradient_accum, \n        denom,\n        opt_dict, \n        self.spatial_lr_scale) = model_args\n        self.training_setup(training_args)\n        self.xyz_gradient_accum = xyz_gradient_accum\n        self.denom = denom\n        self.optimizer.load_state_dict(opt_dict)\n\n    @property\n    def get_scaling(self):\n        return self.scaling_activation(self._scaling)\n    \n    @property\n    def get_rotation(self):\n        return self.rotation_activation(self._rotation)\n    \n    @property\n    def get_xyz(self):\n        return self._xyz\n    \n    @property\n    def get_features(self):\n        features_dc = self._features_dc\n        features_rest = self._features_rest\n        return torch.cat((features_dc, features_rest), dim=1)\n    \n    @property\n    def get_opacity(self):\n        return self.opacity_activation(self._opacity)\n    \n    def get_covariance(self, scaling_modifier = 1):\n        return self.covariance_activation(self.get_scaling, scaling_modifier, self._rotation)\n\n    def oneupSHdegree(self):\n        if self.active_sh_degree < self.max_sh_degree:\n            self.active_sh_degree += 1\n\n    def create_from_pcd(self, pcd : BasicPointCloud, spatial_lr_scale : float):\n        self.spatial_lr_scale = spatial_lr_scale\n        fused_point_cloud = torch.tensor(np.asarray(pcd.points)).float().cuda()\n        fused_color = RGB2SH(torch.tensor(np.asarray(pcd.colors)).float().cuda())\n        features = torch.zeros((fused_color.shape[0], 3, (self.max_sh_degree + 1) ** 2)).float().cuda()\n        features[:, :3, 0 ] = fused_color\n        features[:, 3:, 1:] = 0.0\n\n        print(\"Number of points at initialisation : \", fused_point_cloud.shape[0])\n\n        dist2 = torch.clamp_min(distCUDA2(torch.from_numpy(np.asarray(pcd.points)).float().cuda()), 0.0000001)\n        scales = torch.log(torch.sqrt(dist2))[...,None].repeat(1, 3)\n        rots = torch.zeros((fused_point_cloud.shape[0], 4), device=\"cuda\")\n        rots[:, 0] = 1\n\n        opacities = inverse_sigmoid(0.1 * torch.ones((fused_point_cloud.shape[0], 1), dtype=torch.float, device=\"cuda\"))\n\n        self._xyz = nn.Parameter(fused_point_cloud.requires_grad_(True))\n        self._features_dc = nn.Parameter(features[:,:,0:1].transpose(1, 2).contiguous().requires_grad_(True))\n        self._features_rest = nn.Parameter(features[:,:,1:].transpose(1, 2).contiguous().requires_grad_(True))\n        self._scaling = nn.Parameter(scales.requires_grad_(True))\n        self._rotation = nn.Parameter(rots.requires_grad_(True))\n        self._opacity = nn.Parameter(opacities.requires_grad_(True))\n        self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n\n    def training_setup(self, training_args):\n        self.percent_dense = training_args.percent_dense\n        self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.denom = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n\n        l = [\n            {'params': [self._xyz], 'lr': training_args.position_lr_init * self.spatial_lr_scale, \"name\": \"xyz\"},\n            {'params': [self._features_dc], 'lr': training_args.feature_lr, \"name\": \"f_dc\"},\n            {'params': [self._features_rest], 'lr': training_args.feature_lr / 20.0, \"name\": \"f_rest\"},\n            {'params': [self._opacity], 'lr': training_args.opacity_lr, \"name\": \"opacity\"},\n            {'params': [self._scaling], 'lr': training_args.scaling_lr, \"name\": \"scaling\"},\n            {'params': [self._rotation], 'lr': training_args.rotation_lr, \"name\": \"rotation\"}\n        ]\n\n        self.optimizer = torch.optim.Adam(l, lr=0.0, eps=1e-15)\n        self.xyz_scheduler_args = get_expon_lr_func(lr_init=training_args.position_lr_init*self.spatial_lr_scale,\n                                                    lr_final=training_args.position_lr_final*self.spatial_lr_scale,\n                                                    lr_delay_mult=training_args.position_lr_delay_mult,\n                                                    max_steps=training_args.position_lr_max_steps)\n\n    def update_learning_rate(self, iteration):\n        ''' Learning rate scheduling per step '''\n        for param_group in self.optimizer.param_groups:\n            if param_group[\"name\"] == \"xyz\":\n                lr = self.xyz_scheduler_args(iteration)\n                param_group['lr'] = lr\n                return lr\n\n    def construct_list_of_attributes(self):\n        l = ['x', 'y', 'z', 'nx', 'ny', 'nz']\n        # All channels except the 3 DC\n        for i in range(self._features_dc.shape[1]*self._features_dc.shape[2]):\n            l.append('f_dc_{}'.format(i))\n        for i in range(self._features_rest.shape[1]*self._features_rest.shape[2]):\n            l.append('f_rest_{}'.format(i))\n        l.append('opacity')\n        for i in range(self._scaling.shape[1]):\n            l.append('scale_{}'.format(i))\n        for i in range(self._rotation.shape[1]):\n            l.append('rot_{}'.format(i))\n        return l\n\n    def save_ply(self, path):\n        mkdir_p(os.path.dirname(path))\n\n        xyz = self._xyz.detach().cpu().numpy()\n        normals = np.zeros_like(xyz)\n        f_dc = self._features_dc.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n        f_rest = self._features_rest.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n        opacities = self._opacity.detach().cpu().numpy()\n        scale = self._scaling.detach().cpu().numpy()\n        rotation = self._rotation.detach().cpu().numpy()\n\n        dtype_full = [(attribute, 'f4') for attribute in self.construct_list_of_attributes()]\n\n        elements = np.empty(xyz.shape[0], dtype=dtype_full)\n        attributes = np.concatenate((xyz, normals, f_dc, f_rest, opacities, scale, rotation), axis=1)\n        elements[:] = list(map(tuple, attributes))\n        el = PlyElement.describe(elements, 'vertex')\n        PlyData([el]).write(path)\n\n    def reset_opacity(self):\n        opacities_new = inverse_sigmoid(torch.min(self.get_opacity, torch.ones_like(self.get_opacity)*0.01))\n        optimizable_tensors = self.replace_tensor_to_optimizer(opacities_new, \"opacity\")\n        self._opacity = optimizable_tensors[\"opacity\"]\n\n    def load_ply(self, path):\n        plydata = PlyData.read(path)\n\n        print(\"LOADING PLY FILE\")\n        xyz = np.stack((np.asarray(plydata.elements[0][\"x\"]),\n                        np.asarray(plydata.elements[0][\"y\"]),\n                        np.asarray(plydata.elements[0][\"z\"])),  axis=1)\n        print(\"xyz.shape: \", xyz.shape)\n        opacities = np.asarray(plydata.elements[0][\"opacity\"])[..., np.newaxis]\n        print(\"opacities.shape: \", opacities.shape)\n        features_dc = np.zeros((xyz.shape[0], 3, 1))\n        features_dc[:, 0, 0] = np.asarray(plydata.elements[0][\"f_dc_0\"])\n        features_dc[:, 1, 0] = np.asarray(plydata.elements[0][\"f_dc_1\"])\n        features_dc[:, 2, 0] = np.asarray(plydata.elements[0][\"f_dc_2\"])\n        print(\"features_dc.shape: \", features_dc.shape)\n        extra_f_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"f_rest_\")]\n        extra_f_names = sorted(extra_f_names, key = lambda x: int(x.split('_')[-1]))\n        assert len(extra_f_names)==3*(self.max_sh_degree + 1) ** 2 - 3\n        features_extra = np.zeros((xyz.shape[0], len(extra_f_names)))\n        for idx, attr_name in enumerate(extra_f_names):\n            features_extra[:, idx] = np.asarray(plydata.elements[0][attr_name])\n        # Reshape (P,F*SH_coeffs) to (P, F, SH_coeffs except DC)\n        features_extra = features_extra.reshape((features_extra.shape[0], 3, (self.max_sh_degree + 1) ** 2 - 1))\n        print(\"features_extra.shape: \", features_extra.shape)\n\n        scale_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"scale_\")]\n        scale_names = sorted(scale_names, key = lambda x: int(x.split('_')[-1]))\n        scales = np.zeros((xyz.shape[0], len(scale_names)))\n        for idx, attr_name in enumerate(scale_names):\n            scales[:, idx] = np.asarray(plydata.elements[0][attr_name])\n\n        print(\"scales.shape: \", scales.shape)\n        rot_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"rot\")]\n        rot_names = sorted(rot_names, key = lambda x: int(x.split('_')[-1]))\n        rots = np.zeros((xyz.shape[0], len(rot_names)))\n        for idx, attr_name in enumerate(rot_names):\n            rots[:, idx] = np.asarray(plydata.elements[0][attr_name])\n        print(\"rots.shape: \", rots.shape)\n        self._xyz = nn.Parameter(torch.tensor(xyz, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._features_dc = nn.Parameter(torch.tensor(features_dc, dtype=torch.float, device=\"cuda\").transpose(1, 2).contiguous().requires_grad_(True))\n        self._features_rest = nn.Parameter(torch.tensor(features_extra, dtype=torch.float, device=\"cuda\").transpose(1, 2).contiguous().requires_grad_(True))\n        self._opacity = nn.Parameter(torch.tensor(opacities, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._scaling = nn.Parameter(torch.tensor(scales, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._rotation = nn.Parameter(torch.tensor(rots, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n\n        self.active_sh_degree = self.max_sh_degree\n\n    def replace_tensor_to_optimizer(self, tensor, name):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            if group[\"name\"] == name:\n                stored_state = self.optimizer.state.get(group['params'][0], None)\n                stored_state[\"exp_avg\"] = torch.zeros_like(tensor)\n                stored_state[\"exp_avg_sq\"] = torch.zeros_like(tensor)\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter(tensor.requires_grad_(True))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n        return optimizable_tensors\n\n    def _prune_optimizer(self, mask):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            stored_state = self.optimizer.state.get(group['params'][0], None)\n            if stored_state is not None:\n                stored_state[\"exp_avg\"] = stored_state[\"exp_avg\"][mask]\n                stored_state[\"exp_avg_sq\"] = stored_state[\"exp_avg_sq\"][mask]\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter((group[\"params\"][0][mask].requires_grad_(True)))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n            else:\n                group[\"params\"][0] = nn.Parameter(group[\"params\"][0][mask].requires_grad_(True))\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n        return optimizable_tensors\n\n    def prune_points(self, mask):\n        valid_points_mask = ~mask\n        optimizable_tensors = self._prune_optimizer(valid_points_mask)\n\n        self._xyz = optimizable_tensors[\"xyz\"]\n        self._features_dc = optimizable_tensors[\"f_dc\"]\n        self._features_rest = optimizable_tensors[\"f_rest\"]\n        self._opacity = optimizable_tensors[\"opacity\"]\n        self._scaling = optimizable_tensors[\"scaling\"]\n        self._rotation = optimizable_tensors[\"rotation\"]\n\n        self.xyz_gradient_accum = self.xyz_gradient_accum[valid_points_mask]\n\n        self.denom = self.denom[valid_points_mask]\n        self.max_radii2D = self.max_radii2D[valid_points_mask]\n\n    def cat_tensors_to_optimizer(self, tensors_dict):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            assert len(group[\"params\"]) == 1\n            extension_tensor = tensors_dict[group[\"name\"]]\n            stored_state = self.optimizer.state.get(group['params'][0], None)\n            if stored_state is not None:\n\n                stored_state[\"exp_avg\"] = torch.cat((stored_state[\"exp_avg\"], torch.zeros_like(extension_tensor)), dim=0)\n                stored_state[\"exp_avg_sq\"] = torch.cat((stored_state[\"exp_avg_sq\"], torch.zeros_like(extension_tensor)), dim=0)\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter(torch.cat((group[\"params\"][0], extension_tensor), dim=0).requires_grad_(True))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n            else:\n                group[\"params\"][0] = nn.Parameter(torch.cat((group[\"params\"][0], extension_tensor), dim=0).requires_grad_(True))\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n\n        return optimizable_tensors\n\n    def densification_postfix(self, new_xyz, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation):\n        d = {\"xyz\": new_xyz,\n        \"f_dc\": new_features_dc,\n        \"f_rest\": new_features_rest,\n        \"opacity\": new_opacities,\n        \"scaling\" : new_scaling,\n        \"rotation\" : new_rotation}\n\n        optimizable_tensors = self.cat_tensors_to_optimizer(d)\n        self._xyz = optimizable_tensors[\"xyz\"]\n        self._features_dc = optimizable_tensors[\"f_dc\"]\n        self._features_rest = optimizable_tensors[\"f_rest\"]\n        self._opacity = optimizable_tensors[\"opacity\"]\n        self._scaling = optimizable_tensors[\"scaling\"]\n        self._rotation = optimizable_tensors[\"rotation\"]\n\n        self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.denom = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n\n    def densify_and_split(self, grads, grad_threshold, scene_extent, N=2):\n        n_init_points = self.get_xyz.shape[0]\n        # Extract points that satisfy the gradient condition\n        padded_grad = torch.zeros((n_init_points), device=\"cuda\")\n        padded_grad[:grads.shape[0]] = grads.squeeze()\n        selected_pts_mask = torch.where(padded_grad >= grad_threshold, True, False)\n        selected_pts_mask = torch.logical_and(selected_pts_mask,\n                                              torch.max(self.get_scaling, dim=1).values > self.percent_dense*scene_extent)\n\n        stds = self.get_scaling[selected_pts_mask].repeat(N,1)\n        means =torch.zeros((stds.size(0), 3),device=\"cuda\")\n        samples = torch.normal(mean=means, std=stds)\n        rots = build_rotation(self._rotation[selected_pts_mask]).repeat(N,1,1)\n        new_xyz = torch.bmm(rots, samples.unsqueeze(-1)).squeeze(-1) + self.get_xyz[selected_pts_mask].repeat(N, 1)\n        new_scaling = self.scaling_inverse_activation(self.get_scaling[selected_pts_mask].repeat(N,1) / (0.8*N))\n        new_rotation = self._rotation[selected_pts_mask].repeat(N,1)\n        new_features_dc = self._features_dc[selected_pts_mask].repeat(N,1,1)\n        new_features_rest = self._features_rest[selected_pts_mask].repeat(N,1,1)\n        new_opacity = self._opacity[selected_pts_mask].repeat(N,1)\n\n        self.densification_postfix(new_xyz, new_features_dc, new_features_rest, new_opacity, new_scaling, new_rotation)\n\n        prune_filter = torch.cat((selected_pts_mask, torch.zeros(N * selected_pts_mask.sum(), device=\"cuda\", dtype=bool)))\n        self.prune_points(prune_filter)\n\n    def densify_and_clone(self, grads, grad_threshold, scene_extent):\n        # Extract points that satisfy the gradient condition\n        selected_pts_mask = torch.where(torch.norm(grads, dim=-1) >= grad_threshold, True, False)\n        selected_pts_mask = torch.logical_and(selected_pts_mask,\n                                              torch.max(self.get_scaling, dim=1).values <= self.percent_dense*scene_extent)\n        \n        new_xyz = self._xyz[selected_pts_mask]\n        new_features_dc = self._features_dc[selected_pts_mask]\n        new_features_rest = self._features_rest[selected_pts_mask]\n        new_opacities = self._opacity[selected_pts_mask]\n        new_scaling = self._scaling[selected_pts_mask]\n        new_rotation = self._rotation[selected_pts_mask]\n\n        self.densification_postfix(new_xyz, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation)\n\n    def densify_and_prune(self, max_grad, min_opacity, extent, max_screen_size):\n        grads = self.xyz_gradient_accum / self.denom\n        grads[grads.isnan()] = 0.0\n\n        self.densify_and_clone(grads, max_grad, extent)\n        self.densify_and_split(grads, max_grad, extent)\n\n        prune_mask = (self.get_opacity < min_opacity).squeeze()\n        if max_screen_size:\n            big_points_vs = self.max_radii2D > max_screen_size\n            big_points_ws = self.get_scaling.max(dim=1).values > 0.1 * extent\n            prune_mask = torch.logical_or(torch.logical_or(prune_mask, big_points_vs), big_points_ws)\n        self.prune_points(prune_mask)\n\n        torch.cuda.empty_cache()\n\n    def add_densification_stats(self, viewspace_point_tensor, update_filter):\n        self.xyz_gradient_accum[update_filter] += torch.norm(viewspace_point_tensor.grad[update_filter,:2], dim=-1, keepdim=True)\n        self.denom[update_filter] += 1"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/.gitignore",
    "content": "build/\ndiff_gaussian_rasterization.egg-info/\ndist/\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/.gitmodules",
    "content": "[submodule \"third_party/glm\"]\n\tpath = third_party/glm\n\turl = https://github.com/g-truc/glm.git\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/CMakeLists.txt",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\ncmake_minimum_required(VERSION 3.20)\n\nproject(DiffRast LANGUAGES CUDA CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_EXTENSIONS OFF)\nset(CMAKE_CUDA_STANDARD 17)\n\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\")\n\nadd_library(CudaRasterizer\n\tcuda_rasterizer/backward.h\n\tcuda_rasterizer/backward.cu\n\tcuda_rasterizer/forward.h\n\tcuda_rasterizer/forward.cu\n\tcuda_rasterizer/auxiliary.h\n\tcuda_rasterizer/rasterizer_impl.cu\n\tcuda_rasterizer/rasterizer_impl.h\n\tcuda_rasterizer/rasterizer.h\n)\n\nset_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES \"70;75;86\")\n\ntarget_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer)\ntarget_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/LICENSE.md",
    "content": "Gaussian-Splatting License  \n===========================  \n\n**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.  \nThe *Software* is in the process of being registered with the Agence pour la Protection des  \nProgrammes (APP).  \n\nThe *Software* is still being developed by the *Licensor*.  \n\n*Licensor*'s goal is to allow the research community to use, test and evaluate  \nthe *Software*.  \n\n## 1.  Definitions  \n\n*Licensee* means any person or entity that uses the *Software* and distributes  \nits *Work*.  \n\n*Licensor* means the owners of the *Software*, i.e Inria and MPII  \n\n*Software* means the original work of authorship made available under this  \nLicense ie gaussian-splatting.  \n\n*Work* means the *Software* and any additions to or derivative works of the  \n*Software* that are made available under this License.  \n\n\n## 2.  Purpose  \nThis license is intended to define the rights granted to the *Licensee* by  \nLicensors under the *Software*.  \n\n## 3.  Rights granted  \n\nFor the above reasons Licensors have decided to distribute the *Software*.  \nLicensors grant non-exclusive rights to use the *Software* for research purposes  \nto research users (both academic and industrial), free of charge, without right  \nto sublicense.. The *Software* may be used \"non-commercially\", i.e., for research  \nand/or evaluation purposes only.  \n\nSubject to the terms and conditions of this License, you are granted a  \nnon-exclusive, royalty-free, license to reproduce, prepare derivative works of,  \npublicly display, publicly perform and distribute its *Work* and any resulting  \nderivative works in any form.  \n\n## 4.  Limitations  \n\n**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do  \nso under this License, (b) you include a complete copy of this License with  \nyour distribution, and (c) you retain without modification any copyright,  \npatent, trademark, or attribution notices that are present in the *Work*.  \n\n**4.2 Derivative Works.** You may specify that additional or different terms apply  \nto the use, reproduction, and distribution of your derivative works of the *Work*  \n(\"Your Terms\") only if (a) Your Terms provide that the use limitation in  \nSection 2 applies to your derivative works, and (b) you identify the specific  \nderivative works that are subject to Your Terms. Notwithstanding Your Terms,  \nthis License (including the redistribution requirements in Section 3.1) will  \ncontinue to apply to the *Work* itself.  \n\n**4.3** Any other use without of prior consent of Licensors is prohibited. Research  \nusers explicitly acknowledge having received from Licensors all information  \nallowing to appreciate the adequacy between of the *Software* and their needs and  \nto undertake all necessary precautions for its execution and use.  \n\n**4.4** The *Software* is provided both as a compiled library file and as source  \ncode. In case of using the *Software* for a publication or other results obtained  \nthrough the use of the *Software*, users are strongly encouraged to cite the  \ncorresponding publications as explained in the documentation of the *Software*.  \n\n## 5.  Disclaimer  \n\nTHE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES  \nWITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY  \nUNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL  \nCONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTIES  \nOF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL  \nUSE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR  \nADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE  \nAUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  \nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  \nGOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)  \nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  \nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR  \nIN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.  \n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/README.md",
    "content": "# Differential Gaussian Rasterization\n\nUsed as the rasterization engine for the paper \"3D Gaussian Splatting for Real-Time Rendering of Radiance Fields\". If you can make use of it in your own research, please be so kind to cite us.\n\n<section class=\"section\" id=\"BibTeX\">\n  <div class=\"container is-max-desktop content\">\n    <h2 class=\"title\">BibTeX</h2>\n    <pre><code>@Article{kerbl3Dgaussians,\n      author       = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\\\"u}hler, Thomas and Drettakis, George},\n      title        = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},\n      journal      = {ACM Transactions on Graphics},\n      number       = {4},\n      volume       = {42},\n      month        = {July},\n      year         = {2023},\n      url          = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}\n}</code></pre>\n  </div>\n</section>"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/auxiliary.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED\n#define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED\n\n#include \"config.h\"\n#include \"stdio.h\"\n\n#define BLOCK_SIZE (BLOCK_X * BLOCK_Y)\n#define NUM_WARPS (BLOCK_SIZE/32)\n\n// Spherical harmonics coefficients\n__device__ const float SH_C0 = 0.28209479177387814f;\n__device__ const float SH_C1 = 0.4886025119029199f;\n__device__ const float SH_C2[] = {\n\t1.0925484305920792f,\n\t-1.0925484305920792f,\n\t0.31539156525252005f,\n\t-1.0925484305920792f,\n\t0.5462742152960396f\n};\n__device__ const float SH_C3[] = {\n\t-0.5900435899266435f,\n\t2.890611442640554f,\n\t-0.4570457994644658f,\n\t0.3731763325901154f,\n\t-0.4570457994644658f,\n\t1.445305721320277f,\n\t-0.5900435899266435f\n};\n\n__forceinline__ __device__ float ndc2Pix(float v, int S)\n{\n\treturn ((v + 1.0) * S - 1.0) * 0.5;\n}\n\n__forceinline__ __device__ void getRect(const float2 p, int max_radius, uint2& rect_min, uint2& rect_max, dim3 grid)\n{\n\trect_min = {\n\t\tmin(grid.x, max((int)0, (int)((p.x - max_radius) / BLOCK_X))),\n\t\tmin(grid.y, max((int)0, (int)((p.y - max_radius) / BLOCK_Y)))\n\t};\n\trect_max = {\n\t\tmin(grid.x, max((int)0, (int)((p.x + max_radius + BLOCK_X - 1) / BLOCK_X))),\n\t\tmin(grid.y, max((int)0, (int)((p.y + max_radius + BLOCK_Y - 1) / BLOCK_Y)))\n\t};\n}\n\n__forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix)\n{\n\tfloat4 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],\n\t\tmatrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15]\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z,\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z,\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z,\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z,\n\t\tmatrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z,\n\t\tmatrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z,\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float dnormvdz(float3 v, float3 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\tfloat dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;\n\treturn dnormvdz;\n}\n\n__forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\n\tfloat3 dnormvdv;\n\tdnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32;\n\tdnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32;\n\tdnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;\n\treturn dnormvdv;\n}\n\n__forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\n\tfloat4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w };\n\tfloat vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w;\n\tfloat4 dnormvdv;\n\tdnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32;\n\tdnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32;\n\tdnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32;\n\tdnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32;\n\treturn dnormvdv;\n}\n\n__forceinline__ __device__ float sigmoid(float x)\n{\n\treturn 1.0f / (1.0f + expf(-x));\n}\n\n__forceinline__ __device__ bool in_frustum(int idx,\n\tconst float* orig_points,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tbool prefiltered,\n\tfloat3& p_view)\n{\n\tfloat3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };\n\n\t// Bring points to screen space\n\tfloat4 p_hom = transformPoint4x4(p_orig, projmatrix);\n\tfloat p_w = 1.0f / (p_hom.w + 0.0000001f);\n\tfloat3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };\n\tp_view = transformPoint4x3(p_orig, viewmatrix);\n\n\tif (p_view.z <= 0.2f)// || ((p_proj.x < -1.3 || p_proj.x > 1.3 || p_proj.y < -1.3 || p_proj.y > 1.3)))\n\t{\n\t\tif (prefiltered)\n\t\t{\n\t\t\tprintf(\"Point is filtered although prefiltered is set. This shouldn't happen!\");\n\t\t\t__trap();\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n#define CHECK_CUDA(A, debug) \\\nA; if(debug) { \\\nauto ret = cudaDeviceSynchronize(); \\\nif (ret != cudaSuccess) { \\\nstd::cerr << \"\\n[CUDA ERROR] in \" << __FILE__ << \"\\nLine \" << __LINE__ << \": \" << cudaGetErrorString(ret); \\\nthrow std::runtime_error(cudaGetErrorString(ret)); \\\n} \\\n}\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/backward.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"backward.h\"\n#include \"auxiliary.h\"\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\nnamespace cg = cooperative_groups;\n\n// Backward pass for conversion of spherical harmonics to RGB for\n// each Gaussian.\n__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)\n{\n\t// Compute intermediate values, as it is done during forward\n\tglm::vec3 pos = means[idx];\n\tglm::vec3 dir_orig = pos - campos;\n\tglm::vec3 dir = dir_orig / glm::length(dir_orig);\n\n\tglm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;\n\n\t// Use PyTorch rule for clamping: if clamping was applied,\n\t// gradient becomes 0.\n\tglm::vec3 dL_dRGB = dL_dcolor[idx];\n\tdL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1;\n\tdL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1;\n\tdL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1;\n\n\tglm::vec3 dRGBdx(0, 0, 0);\n\tglm::vec3 dRGBdy(0, 0, 0);\n\tglm::vec3 dRGBdz(0, 0, 0);\n\tfloat x = dir.x;\n\tfloat y = dir.y;\n\tfloat z = dir.z;\n\n\t// Target location for this Gaussian to write SH gradients to\n\tglm::vec3* dL_dsh = dL_dshs + idx * max_coeffs;\n\n\t// No tricks here, just high school-level calculus.\n\tfloat dRGBdsh0 = SH_C0;\n\tdL_dsh[0] = dRGBdsh0 * dL_dRGB;\n\tif (deg > 0)\n\t{\n\t\tfloat dRGBdsh1 = -SH_C1 * y;\n\t\tfloat dRGBdsh2 = SH_C1 * z;\n\t\tfloat dRGBdsh3 = -SH_C1 * x;\n\t\tdL_dsh[1] = dRGBdsh1 * dL_dRGB;\n\t\tdL_dsh[2] = dRGBdsh2 * dL_dRGB;\n\t\tdL_dsh[3] = dRGBdsh3 * dL_dRGB;\n\n\t\tdRGBdx = -SH_C1 * sh[3];\n\t\tdRGBdy = -SH_C1 * sh[1];\n\t\tdRGBdz = SH_C1 * sh[2];\n\n\t\tif (deg > 1)\n\t\t{\n\t\t\tfloat xx = x * x, yy = y * y, zz = z * z;\n\t\t\tfloat xy = x * y, yz = y * z, xz = x * z;\n\n\t\t\tfloat dRGBdsh4 = SH_C2[0] * xy;\n\t\t\tfloat dRGBdsh5 = SH_C2[1] * yz;\n\t\t\tfloat dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy);\n\t\t\tfloat dRGBdsh7 = SH_C2[3] * xz;\n\t\t\tfloat dRGBdsh8 = SH_C2[4] * (xx - yy);\n\t\t\tdL_dsh[4] = dRGBdsh4 * dL_dRGB;\n\t\t\tdL_dsh[5] = dRGBdsh5 * dL_dRGB;\n\t\t\tdL_dsh[6] = dRGBdsh6 * dL_dRGB;\n\t\t\tdL_dsh[7] = dRGBdsh7 * dL_dRGB;\n\t\t\tdL_dsh[8] = dRGBdsh8 * dL_dRGB;\n\n\t\t\tdRGBdx += 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];\n\t\t\tdRGBdy += 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];\n\t\t\tdRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7];\n\n\t\t\tif (deg > 2)\n\t\t\t{\n\t\t\t\tfloat dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy);\n\t\t\t\tfloat dRGBdsh10 = SH_C3[1] * xy * z;\n\t\t\t\tfloat dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy);\n\t\t\t\tfloat dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy);\n\t\t\t\tfloat dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy);\n\t\t\t\tfloat dRGBdsh14 = SH_C3[5] * z * (xx - yy);\n\t\t\t\tfloat dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy);\n\t\t\t\tdL_dsh[9] = dRGBdsh9 * dL_dRGB;\n\t\t\t\tdL_dsh[10] = dRGBdsh10 * dL_dRGB;\n\t\t\t\tdL_dsh[11] = dRGBdsh11 * dL_dRGB;\n\t\t\t\tdL_dsh[12] = dRGBdsh12 * dL_dRGB;\n\t\t\t\tdL_dsh[13] = dRGBdsh13 * dL_dRGB;\n\t\t\t\tdL_dsh[14] = dRGBdsh14 * dL_dRGB;\n\t\t\t\tdL_dsh[15] = dRGBdsh15 * dL_dRGB;\n\n\t\t\t\tdRGBdx += (\n\t\t\t\t\tSH_C3[0] * sh[9] * 3.f * 2.f * xy +\n\t\t\t\t\tSH_C3[1] * sh[10] * yz +\n\t\t\t\t\tSH_C3[2] * sh[11] * -2.f * xy +\n\t\t\t\t\tSH_C3[3] * sh[12] * -3.f * 2.f * xz +\n\t\t\t\t\tSH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) +\n\t\t\t\t\tSH_C3[5] * sh[14] * 2.f * xz +\n\t\t\t\t\tSH_C3[6] * sh[15] * 3.f * (xx - yy));\n\n\t\t\t\tdRGBdy += (\n\t\t\t\t\tSH_C3[0] * sh[9] * 3.f * (xx - yy) +\n\t\t\t\t\tSH_C3[1] * sh[10] * xz +\n\t\t\t\t\tSH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) +\n\t\t\t\t\tSH_C3[3] * sh[12] * -3.f * 2.f * yz +\n\t\t\t\t\tSH_C3[4] * sh[13] * -2.f * xy +\n\t\t\t\t\tSH_C3[5] * sh[14] * -2.f * yz +\n\t\t\t\t\tSH_C3[6] * sh[15] * -3.f * 2.f * xy);\n\n\t\t\t\tdRGBdz += (\n\t\t\t\t\tSH_C3[1] * sh[10] * xy +\n\t\t\t\t\tSH_C3[2] * sh[11] * 4.f * 2.f * yz +\n\t\t\t\t\tSH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) +\n\t\t\t\t\tSH_C3[4] * sh[13] * 4.f * 2.f * xz +\n\t\t\t\t\tSH_C3[5] * sh[14] * (xx - yy));\n\t\t\t}\n\t\t}\n\t}\n\n\t// The view direction is an input to the computation. View direction\n\t// is influenced by the Gaussian's mean, so SHs gradients\n\t// must propagate back into 3D position.\n\tglm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB));\n\n\t// Account for normalization of direction\n\tfloat3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z });\n\n\t// Gradients of loss w.r.t. Gaussian means, but only the portion \n\t// that is caused because the mean affects the view-dependent color.\n\t// Additional mean gradient is accumulated in below methods.\n\tdL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z);\n}\n\n// Backward version of INVERSE 2D covariance matrix computation\n// (due to length launched as separate kernel before other \n// backward steps contained in preprocess)\n__global__ void computeCov2DCUDA(int P,\n\tconst float3* means,\n\tconst int* radii,\n\tconst float* cov3Ds,\n\tconst float h_x, float h_y,\n\tconst float tan_fovx, float tan_fovy,\n\tconst float* view_matrix,\n\tconst float* dL_dconics,\n\tfloat3* dL_dmeans,\n\tfloat* dL_dcov)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P || !(radii[idx] > 0))\n\t\treturn;\n\n\t// Reading location of 3D covariance for this Gaussian\n\tconst float* cov3D = cov3Ds + 6 * idx;\n\n\t// Fetch gradients, recompute 2D covariance and relevant \n\t// intermediate forward results needed in the backward.\n\tfloat3 mean = means[idx];\n\tfloat3 dL_dconic = { dL_dconics[4 * idx], dL_dconics[4 * idx + 1], dL_dconics[4 * idx + 3] };\n\tfloat3 t = transformPoint4x3(mean, view_matrix);\n\t\n\tconst float limx = 1.3f * tan_fovx;\n\tconst float limy = 1.3f * tan_fovy;\n\tconst float txtz = t.x / t.z;\n\tconst float tytz = t.y / t.z;\n\tt.x = min(limx, max(-limx, txtz)) * t.z;\n\tt.y = min(limy, max(-limy, tytz)) * t.z;\n\t\n\tconst float x_grad_mul = txtz < -limx || txtz > limx ? 0 : 1;\n\tconst float y_grad_mul = tytz < -limy || tytz > limy ? 0 : 1;\n\n\tglm::mat3 J = glm::mat3(h_x / t.z, 0.0f, -(h_x * t.x) / (t.z * t.z),\n\t\t0.0f, h_y / t.z, -(h_y * t.y) / (t.z * t.z),\n\t\t0, 0, 0);\n\n\tglm::mat3 W = glm::mat3(\n\t\tview_matrix[0], view_matrix[4], view_matrix[8],\n\t\tview_matrix[1], view_matrix[5], view_matrix[9],\n\t\tview_matrix[2], view_matrix[6], view_matrix[10]);\n\n\tglm::mat3 Vrk = glm::mat3(\n\t\tcov3D[0], cov3D[1], cov3D[2],\n\t\tcov3D[1], cov3D[3], cov3D[4],\n\t\tcov3D[2], cov3D[4], cov3D[5]);\n\n\tglm::mat3 T = W * J;\n\n\tglm::mat3 cov2D = glm::transpose(T) * glm::transpose(Vrk) * T;\n\n\t// Use helper variables for 2D covariance entries. More compact.\n\tfloat a = cov2D[0][0] += 0.3f;\n\tfloat b = cov2D[0][1];\n\tfloat c = cov2D[1][1] += 0.3f;\n\n\tfloat denom = a * c - b * b;\n\tfloat dL_da = 0, dL_db = 0, dL_dc = 0;\n\tfloat denom2inv = 1.0f / ((denom * denom) + 0.0000001f);\n\n\tif (denom2inv != 0)\n\t{\n\t\t// Gradients of loss w.r.t. entries of 2D covariance matrix,\n\t\t// given gradients of loss w.r.t. conic matrix (inverse covariance matrix).\n\t\t// e.g., dL / da = dL / d_conic_a * d_conic_a / d_a\n\t\tdL_da = denom2inv * (-c * c * dL_dconic.x + 2 * b * c * dL_dconic.y + (denom - a * c) * dL_dconic.z);\n\t\tdL_dc = denom2inv * (-a * a * dL_dconic.z + 2 * a * b * dL_dconic.y + (denom - a * c) * dL_dconic.x);\n\t\tdL_db = denom2inv * 2 * (b * c * dL_dconic.x - (denom + 2 * b * b) * dL_dconic.y + a * b * dL_dconic.z);\n\n\t\t// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, \n\t\t// given gradients w.r.t. 2D covariance matrix (diagonal).\n\t\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\t\tdL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc);\n\t\tdL_dcov[6 * idx + 3] = (T[0][1] * T[0][1] * dL_da + T[0][1] * T[1][1] * dL_db + T[1][1] * T[1][1] * dL_dc);\n\t\tdL_dcov[6 * idx + 5] = (T[0][2] * T[0][2] * dL_da + T[0][2] * T[1][2] * dL_db + T[1][2] * T[1][2] * dL_dc);\n\n\t\t// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, \n\t\t// given gradients w.r.t. 2D covariance matrix (off-diagonal).\n\t\t// Off-diagonal elements appear twice --> double the gradient.\n\t\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\t\tdL_dcov[6 * idx + 1] = 2 * T[0][0] * T[0][1] * dL_da + (T[0][0] * T[1][1] + T[0][1] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][1] * dL_dc;\n\t\tdL_dcov[6 * idx + 2] = 2 * T[0][0] * T[0][2] * dL_da + (T[0][0] * T[1][2] + T[0][2] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][2] * dL_dc;\n\t\tdL_dcov[6 * idx + 4] = 2 * T[0][2] * T[0][1] * dL_da + (T[0][1] * T[1][2] + T[0][2] * T[1][1]) * dL_db + 2 * T[1][1] * T[1][2] * dL_dc;\n\t}\n\telse\n\t{\n\t\tfor (int i = 0; i < 6; i++)\n\t\t\tdL_dcov[6 * idx + i] = 0;\n\t}\n\n\t// Gradients of loss w.r.t. upper 2x3 portion of intermediate matrix T\n\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\tfloat dL_dT00 = 2 * (T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_da +\n\t\t(T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_db;\n\tfloat dL_dT01 = 2 * (T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_da +\n\t\t(T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_db;\n\tfloat dL_dT02 = 2 * (T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_da +\n\t\t(T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_db;\n\tfloat dL_dT10 = 2 * (T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_db;\n\tfloat dL_dT11 = 2 * (T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_db;\n\tfloat dL_dT12 = 2 * (T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_db;\n\n\t// Gradients of loss w.r.t. upper 3x2 non-zero entries of Jacobian matrix\n\t// T = W * J\n\tfloat dL_dJ00 = W[0][0] * dL_dT00 + W[0][1] * dL_dT01 + W[0][2] * dL_dT02;\n\tfloat dL_dJ02 = W[2][0] * dL_dT00 + W[2][1] * dL_dT01 + W[2][2] * dL_dT02;\n\tfloat dL_dJ11 = W[1][0] * dL_dT10 + W[1][1] * dL_dT11 + W[1][2] * dL_dT12;\n\tfloat dL_dJ12 = W[2][0] * dL_dT10 + W[2][1] * dL_dT11 + W[2][2] * dL_dT12;\n\n\tfloat tz = 1.f / t.z;\n\tfloat tz2 = tz * tz;\n\tfloat tz3 = tz2 * tz;\n\n\t// Gradients of loss w.r.t. transformed Gaussian mean t\n\tfloat dL_dtx = x_grad_mul * -h_x * tz2 * dL_dJ02;\n\tfloat dL_dty = y_grad_mul * -h_y * tz2 * dL_dJ12;\n\tfloat dL_dtz = -h_x * tz2 * dL_dJ00 - h_y * tz2 * dL_dJ11 + (2 * h_x * t.x) * tz3 * dL_dJ02 + (2 * h_y * t.y) * tz3 * dL_dJ12;\n\n\t// Account for transformation of mean to t\n\t// t = transformPoint4x3(mean, view_matrix);\n\tfloat3 dL_dmean = transformVec4x3Transpose({ dL_dtx, dL_dty, dL_dtz }, view_matrix);\n\n\t// Gradients of loss w.r.t. Gaussian means, but only the portion \n\t// that is caused because the mean affects the covariance matrix.\n\t// Additional mean gradient is accumulated in BACKWARD::preprocess.\n\tdL_dmeans[idx] = dL_dmean;\n}\n\n// Backward pass for the conversion of scale and rotation to a \n// 3D covariance matrix for each Gaussian. \n__device__ void computeCov3D(int idx, const glm::vec3 scale, float mod, const glm::vec4 rot, const float* dL_dcov3Ds, glm::vec3* dL_dscales, glm::vec4* dL_drots)\n{\n\t// Recompute (intermediate) results for the 3D covariance computation.\n\tglm::vec4 q = rot;// / glm::length(rot);\n\tfloat r = q.x;\n\tfloat x = q.y;\n\tfloat y = q.z;\n\tfloat z = q.w;\n\n\tglm::mat3 R = glm::mat3(\n\t\t1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),\n\t\t2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),\n\t\t2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y)\n\t);\n\n\tglm::mat3 S = glm::mat3(1.0f);\n\n\tglm::vec3 s = mod * scale;\n\tS[0][0] = s.x;\n\tS[1][1] = s.y;\n\tS[2][2] = s.z;\n\n\tglm::mat3 M = S * R;\n\n\tconst float* dL_dcov3D = dL_dcov3Ds + 6 * idx;\n\n\tglm::vec3 dunc(dL_dcov3D[0], dL_dcov3D[3], dL_dcov3D[5]);\n\tglm::vec3 ounc = 0.5f * glm::vec3(dL_dcov3D[1], dL_dcov3D[2], dL_dcov3D[4]);\n\n\t// Convert per-element covariance loss gradients to matrix form\n\tglm::mat3 dL_dSigma = glm::mat3(\n\t\tdL_dcov3D[0], 0.5f * dL_dcov3D[1], 0.5f * dL_dcov3D[2],\n\t\t0.5f * dL_dcov3D[1], dL_dcov3D[3], 0.5f * dL_dcov3D[4],\n\t\t0.5f * dL_dcov3D[2], 0.5f * dL_dcov3D[4], dL_dcov3D[5]\n\t);\n\n\t// Compute loss gradient w.r.t. matrix M\n\t// dSigma_dM = 2 * M\n\tglm::mat3 dL_dM = 2.0f * M * dL_dSigma;\n\n\tglm::mat3 Rt = glm::transpose(R);\n\tglm::mat3 dL_dMt = glm::transpose(dL_dM);\n\n\t// Gradients of loss w.r.t. scale\n\tglm::vec3* dL_dscale = dL_dscales + idx;\n\tdL_dscale->x = glm::dot(Rt[0], dL_dMt[0]);\n\tdL_dscale->y = glm::dot(Rt[1], dL_dMt[1]);\n\tdL_dscale->z = glm::dot(Rt[2], dL_dMt[2]);\n\n\tdL_dMt[0] *= s.x;\n\tdL_dMt[1] *= s.y;\n\tdL_dMt[2] *= s.z;\n\n\t// Gradients of loss w.r.t. normalized quaternion\n\tglm::vec4 dL_dq;\n\tdL_dq.x = 2 * z * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * y * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * x * (dL_dMt[1][2] - dL_dMt[2][1]);\n\tdL_dq.y = 2 * y * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * z * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * r * (dL_dMt[1][2] - dL_dMt[2][1]) - 4 * x * (dL_dMt[2][2] + dL_dMt[1][1]);\n\tdL_dq.z = 2 * x * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * r * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * z * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * y * (dL_dMt[2][2] + dL_dMt[0][0]);\n\tdL_dq.w = 2 * r * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * x * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * y * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * z * (dL_dMt[1][1] + dL_dMt[0][0]);\n\n\t// Gradients of loss w.r.t. unnormalized quaternion\n\tfloat4* dL_drot = (float4*)(dL_drots + idx);\n\t*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 });\n}\n\n// Backward pass of the preprocessing steps, except\n// for the covariance computation and inversion\n// (those are handled by a previous kernel call)\ntemplate<int C>\n__global__ void preprocessCUDA(\n\tint P, int D, int M,\n\tconst float3* means,\n\tconst int* radii,\n\tconst float* shs,\n\tconst bool* clamped,\n\tconst glm::vec3* scales,\n\tconst glm::vec4* rotations,\n\tconst float scale_modifier,\n\tconst float* proj,\n\tconst glm::vec3* campos,\n\tconst float3* dL_dmean2D,\n\tglm::vec3* dL_dmeans,\n\tfloat* dL_dcolor,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tglm::vec3* dL_dscale,\n\tglm::vec4* dL_drot)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P || !(radii[idx] > 0))\n\t\treturn;\n\n\tfloat3 m = means[idx];\n\n\t// Taking care of gradients from the screenspace points\n\tfloat4 m_hom = transformPoint4x4(m, proj);\n\tfloat m_w = 1.0f / (m_hom.w + 0.0000001f);\n\n\t// Compute loss gradient w.r.t. 3D means due to gradients of 2D means\n\t// from rendering procedure\n\tglm::vec3 dL_dmean;\n\tfloat mul1 = (proj[0] * m.x + proj[4] * m.y + proj[8] * m.z + proj[12]) * m_w * m_w;\n\tfloat mul2 = (proj[1] * m.x + proj[5] * m.y + proj[9] * m.z + proj[13]) * m_w * m_w;\n\tdL_dmean.x = (proj[0] * m_w - proj[3] * mul1) * dL_dmean2D[idx].x + (proj[1] * m_w - proj[3] * mul2) * dL_dmean2D[idx].y;\n\tdL_dmean.y = (proj[4] * m_w - proj[7] * mul1) * dL_dmean2D[idx].x + (proj[5] * m_w - proj[7] * mul2) * dL_dmean2D[idx].y;\n\tdL_dmean.z = (proj[8] * m_w - proj[11] * mul1) * dL_dmean2D[idx].x + (proj[9] * m_w - proj[11] * mul2) * dL_dmean2D[idx].y;\n\n\t// That's the second part of the mean gradient. Previous computation\n\t// of cov2D and following SH conversion also affects it.\n\tdL_dmeans[idx] += dL_dmean;\n\n\t// Compute gradient updates due to computing colors from SHs\n\tif (shs)\n\t\tcomputeColorFromSH(idx, D, M, (glm::vec3*)means, *campos, shs, clamped, (glm::vec3*)dL_dcolor, (glm::vec3*)dL_dmeans, (glm::vec3*)dL_dsh);\n\n\t// Compute gradient updates due to computing covariance from scale/rotation\n\tif (scales)\n\t\tcomputeCov3D(idx, scales[idx], scale_modifier, rotations[idx], dL_dcov3D, dL_dscale, dL_drot);\n}\n\n// Backward version of the rendering procedure.\ntemplate <uint32_t C>\n__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)\nrenderCUDA(\n\tconst uint2* __restrict__ ranges,\n\tconst uint32_t* __restrict__ point_list,\n\tint W, int H,\n\tconst float* __restrict__ bg_color,\n\tconst float2* __restrict__ points_xy_image,\n\tconst float4* __restrict__ conic_opacity,\n\tconst float* __restrict__ colors,\n\tconst float* __restrict__ final_Ts,\n\tconst uint32_t* __restrict__ n_contrib,\n\tconst float* __restrict__ dL_dpixels,\n\tfloat3* __restrict__ dL_dmean2D,\n\tfloat4* __restrict__ dL_dconic2D,\n\tfloat* __restrict__ dL_dopacity,\n\tfloat* __restrict__ dL_dcolors)\n{\n\t// We rasterize again. Compute necessary block info.\n\tauto block = cg::this_thread_block();\n\tconst uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;\n\tconst uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };\n\tconst uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };\n\tconst uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };\n\tconst uint32_t pix_id = W * pix.y + pix.x;\n\tconst float2 pixf = { (float)pix.x, (float)pix.y };\n\n\tconst bool inside = pix.x < W&& pix.y < H;\n\tconst uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];\n\n\tconst int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);\n\n\tbool done = !inside;\n\tint toDo = range.y - range.x;\n\n\t__shared__ int collected_id[BLOCK_SIZE];\n\t__shared__ float2 collected_xy[BLOCK_SIZE];\n\t__shared__ float4 collected_conic_opacity[BLOCK_SIZE];\n\t__shared__ float collected_colors[C * BLOCK_SIZE];\n\n\t// In the forward, we stored the final value for T, the\n\t// product of all (1 - alpha) factors. \n\tconst float T_final = inside ? final_Ts[pix_id] : 0;\n\tfloat T = T_final;\n\n\t// We start from the back. The ID of the last contributing\n\t// Gaussian is known from each pixel from the forward.\n\tuint32_t contributor = toDo;\n\tconst int last_contributor = inside ? n_contrib[pix_id] : 0;\n\n\tfloat accum_rec[C] = { 0 };\n\tfloat dL_dpixel[C];\n\tif (inside)\n\t\tfor (int i = 0; i < C; i++)\n\t\t\tdL_dpixel[i] = dL_dpixels[i * H * W + pix_id];\n\n\tfloat last_alpha = 0;\n\tfloat last_color[C] = { 0 };\n\n\t// Gradient of pixel coordinate w.r.t. normalized \n\t// screen-space viewport corrdinates (-1 to 1)\n\tconst float ddelx_dx = 0.5 * W;\n\tconst float ddely_dy = 0.5 * H;\n\n\t// Traverse all Gaussians\n\tfor (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)\n\t{\n\t\t// Load auxiliary data into shared memory, start in the BACK\n\t\t// and load them in revers order.\n\t\tblock.sync();\n\t\tconst int progress = i * BLOCK_SIZE + block.thread_rank();\n\t\tif (range.x + progress < range.y)\n\t\t{\n\t\t\tconst int coll_id = point_list[range.y - progress - 1];\n\t\t\tcollected_id[block.thread_rank()] = coll_id;\n\t\t\tcollected_xy[block.thread_rank()] = points_xy_image[coll_id];\n\t\t\tcollected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];\n\t\t\tfor (int i = 0; i < C; i++)\n\t\t\t\tcollected_colors[i * BLOCK_SIZE + block.thread_rank()] = colors[coll_id * C + i];\n\t\t}\n\t\tblock.sync();\n\n\t\t// Iterate over Gaussians\n\t\tfor (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)\n\t\t{\n\t\t\t// Keep track of current Gaussian ID. Skip, if this one\n\t\t\t// is behind the last contributor for this pixel.\n\t\t\tcontributor--;\n\t\t\tif (contributor >= last_contributor)\n\t\t\t\tcontinue;\n\n\t\t\t// Compute blending values, as before.\n\t\t\tconst float2 xy = collected_xy[j];\n\t\t\tconst float2 d = { xy.x - pixf.x, xy.y - pixf.y };\n\t\t\tconst float4 con_o = collected_conic_opacity[j];\n\t\t\tconst float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;\n\t\t\tif (power > 0.0f)\n\t\t\t\tcontinue;\n\n\t\t\tconst float G = exp(power);\n\t\t\tconst float alpha = min(0.99f, con_o.w * G);\n\t\t\tif (alpha < 1.0f / 255.0f)\n\t\t\t\tcontinue;\n\n\t\t\tT = T / (1.f - alpha);\n\t\t\tconst float dchannel_dcolor = alpha * T;\n\n\t\t\t// Propagate gradients to per-Gaussian colors and keep\n\t\t\t// gradients w.r.t. alpha (blending factor for a Gaussian/pixel\n\t\t\t// pair).\n\t\t\tfloat dL_dalpha = 0.0f;\n\t\t\tconst int global_id = collected_id[j];\n\t\t\tfor (int ch = 0; ch < C; ch++)\n\t\t\t{\n\t\t\t\tconst float c = collected_colors[ch * BLOCK_SIZE + j];\n\t\t\t\t// Update last color (to be used in the next iteration)\n\t\t\t\taccum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch];\n\t\t\t\tlast_color[ch] = c;\n\n\t\t\t\tconst float dL_dchannel = dL_dpixel[ch];\n\t\t\t\tdL_dalpha += (c - accum_rec[ch]) * dL_dchannel;\n\t\t\t\t// Update the gradients w.r.t. color of the Gaussian. \n\t\t\t\t// Atomic, since this pixel is just one of potentially\n\t\t\t\t// many that were affected by this Gaussian.\n\t\t\t\tatomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel);\n\t\t\t}\n\t\t\tdL_dalpha *= T;\n\t\t\t// Update last alpha (to be used in the next iteration)\n\t\t\tlast_alpha = alpha;\n\n\t\t\t// Account for fact that alpha also influences how much of\n\t\t\t// the background color is added if nothing left to blend\n\t\t\tfloat bg_dot_dpixel = 0;\n\t\t\tfor (int i = 0; i < C; i++)\n\t\t\t\tbg_dot_dpixel += bg_color[i] * dL_dpixel[i];\n\t\t\tdL_dalpha += (-T_final / (1.f - alpha)) * bg_dot_dpixel;\n\n\n\t\t\t// Helpful reusable temporary variables\n\t\t\tconst float dL_dG = con_o.w * dL_dalpha;\n\t\t\tconst float gdx = G * d.x;\n\t\t\tconst float gdy = G * d.y;\n\t\t\tconst float dG_ddelx = -gdx * con_o.x - gdy * con_o.y;\n\t\t\tconst float dG_ddely = -gdy * con_o.z - gdx * con_o.y;\n\n\t\t\t// Update gradients w.r.t. 2D mean position of the Gaussian\n\t\t\tatomicAdd(&dL_dmean2D[global_id].x, dL_dG * dG_ddelx * ddelx_dx);\n\t\t\tatomicAdd(&dL_dmean2D[global_id].y, dL_dG * dG_ddely * ddely_dy);\n\n\t\t\t// Update gradients w.r.t. 2D covariance (2x2 matrix, symmetric)\n\t\t\tatomicAdd(&dL_dconic2D[global_id].x, -0.5f * gdx * d.x * dL_dG);\n\t\t\tatomicAdd(&dL_dconic2D[global_id].y, -0.5f * gdx * d.y * dL_dG);\n\t\t\tatomicAdd(&dL_dconic2D[global_id].w, -0.5f * gdy * d.y * dL_dG);\n\n\t\t\t// Update gradients w.r.t. opacity of the Gaussian\n\t\t\tatomicAdd(&(dL_dopacity[global_id]), G * dL_dalpha);\n\t\t}\n\t}\n}\n\nvoid BACKWARD::preprocess(\n\tint P, int D, int M,\n\tconst float3* means3D,\n\tconst int* radii,\n\tconst float* shs,\n\tconst bool* clamped,\n\tconst glm::vec3* scales,\n\tconst glm::vec4* rotations,\n\tconst float scale_modifier,\n\tconst float* cov3Ds,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float focal_x, float focal_y,\n\tconst float tan_fovx, float tan_fovy,\n\tconst glm::vec3* campos,\n\tconst float3* dL_dmean2D,\n\tconst float* dL_dconic,\n\tglm::vec3* dL_dmean3D,\n\tfloat* dL_dcolor,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tglm::vec3* dL_dscale,\n\tglm::vec4* dL_drot)\n{\n\t// Propagate gradients for the path of 2D conic matrix computation. \n\t// Somewhat long, thus it is its own kernel rather than being part of \n\t// \"preprocess\". When done, loss gradient w.r.t. 3D means has been\n\t// modified and gradient w.r.t. 3D covariance matrix has been computed.\t\n\tcomputeCov2DCUDA << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tmeans3D,\n\t\tradii,\n\t\tcov3Ds,\n\t\tfocal_x,\n\t\tfocal_y,\n\t\ttan_fovx,\n\t\ttan_fovy,\n\t\tviewmatrix,\n\t\tdL_dconic,\n\t\t(float3*)dL_dmean3D,\n\t\tdL_dcov3D);\n\n\t// Propagate gradients for remaining steps: finish 3D mean gradients,\n\t// propagate color gradients to SH (if desireD), propagate 3D covariance\n\t// matrix gradients to scale and rotation.\n\tpreprocessCUDA<NUM_CHANNELS> << < (P + 255) / 256, 256 >> > (\n\t\tP, D, M,\n\t\t(float3*)means3D,\n\t\tradii,\n\t\tshs,\n\t\tclamped,\n\t\t(glm::vec3*)scales,\n\t\t(glm::vec4*)rotations,\n\t\tscale_modifier,\n\t\tprojmatrix,\n\t\tcampos,\n\t\t(float3*)dL_dmean2D,\n\t\t(glm::vec3*)dL_dmean3D,\n\t\tdL_dcolor,\n\t\tdL_dcov3D,\n\t\tdL_dsh,\n\t\tdL_dscale,\n\t\tdL_drot);\n}\n\nvoid BACKWARD::render(\n\tconst dim3 grid, const dim3 block,\n\tconst uint2* ranges,\n\tconst uint32_t* point_list,\n\tint W, int H,\n\tconst float* bg_color,\n\tconst float2* means2D,\n\tconst float4* conic_opacity,\n\tconst float* colors,\n\tconst float* final_Ts,\n\tconst uint32_t* n_contrib,\n\tconst float* dL_dpixels,\n\tfloat3* dL_dmean2D,\n\tfloat4* dL_dconic2D,\n\tfloat* dL_dopacity,\n\tfloat* dL_dcolors)\n{\n\trenderCUDA<NUM_CHANNELS> << <grid, block >> >(\n\t\tranges,\n\t\tpoint_list,\n\t\tW, H,\n\t\tbg_color,\n\t\tmeans2D,\n\t\tconic_opacity,\n\t\tcolors,\n\t\tfinal_Ts,\n\t\tn_contrib,\n\t\tdL_dpixels,\n\t\tdL_dmean2D,\n\t\tdL_dconic2D,\n\t\tdL_dopacity,\n\t\tdL_dcolors\n\t\t);\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/backward.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED\n#define CUDA_RASTERIZER_BACKWARD_H_INCLUDED\n\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\nnamespace BACKWARD\n{\n\tvoid render(\n\t\tconst dim3 grid, dim3 block,\n\t\tconst uint2* ranges,\n\t\tconst uint32_t* point_list,\n\t\tint W, int H,\n\t\tconst float* bg_color,\n\t\tconst float2* means2D,\n\t\tconst float4* conic_opacity,\n\t\tconst float* colors,\n\t\tconst float* final_Ts,\n\t\tconst uint32_t* n_contrib,\n\t\tconst float* dL_dpixels,\n\t\tfloat3* dL_dmean2D,\n\t\tfloat4* dL_dconic2D,\n\t\tfloat* dL_dopacity,\n\t\tfloat* dL_dcolors);\n\n\tvoid preprocess(\n\t\tint P, int D, int M,\n\t\tconst float3* means,\n\t\tconst int* radii,\n\t\tconst float* shs,\n\t\tconst bool* clamped,\n\t\tconst glm::vec3* scales,\n\t\tconst glm::vec4* rotations,\n\t\tconst float scale_modifier,\n\t\tconst float* cov3Ds,\n\t\tconst float* view,\n\t\tconst float* proj,\n\t\tconst float focal_x, float focal_y,\n\t\tconst float tan_fovx, float tan_fovy,\n\t\tconst glm::vec3* campos,\n\t\tconst float3* dL_dmean2D,\n\t\tconst float* dL_dconics,\n\t\tglm::vec3* dL_dmeans,\n\t\tfloat* dL_dcolor,\n\t\tfloat* dL_dcov3D,\n\t\tfloat* dL_dsh,\n\t\tglm::vec3* dL_dscale,\n\t\tglm::vec4* dL_drot);\n}\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/config.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED\n#define CUDA_RASTERIZER_CONFIG_H_INCLUDED\n\n#define NUM_CHANNELS 3 // Default 3, RGB\n#define BLOCK_X 16\n#define BLOCK_Y 16\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/forward.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"forward.h\"\n#include \"auxiliary.h\"\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\nnamespace cg = cooperative_groups;\n\n// Forward method for converting the input spherical harmonics\n// coefficients of each Gaussian to a simple RGB color.\n__device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, bool* clamped)\n{\n\t// The implementation is loosely based on code for \n\t// \"Differentiable Point-Based Radiance Fields for \n\t// Efficient View Synthesis\" by Zhang et al. (2022)\n\tglm::vec3 pos = means[idx];\n\tglm::vec3 dir = pos - campos;\n\tdir = dir / glm::length(dir);\n\n\tglm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;\n\tglm::vec3 result = SH_C0 * sh[0];\n\n\tif (deg > 0)\n\t{\n\t\tfloat x = dir.x;\n\t\tfloat y = dir.y;\n\t\tfloat z = dir.z;\n\t\tresult = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];\n\n\t\tif (deg > 1)\n\t\t{\n\t\t\tfloat xx = x * x, yy = y * y, zz = z * z;\n\t\t\tfloat xy = x * y, yz = y * z, xz = x * z;\n\t\t\tresult = result +\n\t\t\t\tSH_C2[0] * xy * sh[4] +\n\t\t\t\tSH_C2[1] * yz * sh[5] +\n\t\t\t\tSH_C2[2] * (2.0f * zz - xx - yy) * sh[6] +\n\t\t\t\tSH_C2[3] * xz * sh[7] +\n\t\t\t\tSH_C2[4] * (xx - yy) * sh[8];\n\n\t\t\tif (deg > 2)\n\t\t\t{\n\t\t\t\tresult = result +\n\t\t\t\t\tSH_C3[0] * y * (3.0f * xx - yy) * sh[9] +\n\t\t\t\t\tSH_C3[1] * xy * z * sh[10] +\n\t\t\t\t\tSH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] +\n\t\t\t\t\tSH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] +\n\t\t\t\t\tSH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] +\n\t\t\t\t\tSH_C3[5] * z * (xx - yy) * sh[14] +\n\t\t\t\t\tSH_C3[6] * x * (xx - 3.0f * yy) * sh[15];\n\t\t\t}\n\t\t}\n\t}\n\tresult += 0.5f;\n\n\t// RGB colors are clamped to positive values. If values are\n\t// clamped, we need to keep track of this for the backward pass.\n\tclamped[3 * idx + 0] = (result.x < 0);\n\tclamped[3 * idx + 1] = (result.y < 0);\n\tclamped[3 * idx + 2] = (result.z < 0);\n\treturn glm::max(result, 0.0f);\n}\n\n// Forward version of 2D covariance matrix computation\n__device__ float3 computeCov2D(const float3& mean, float focal_x, float focal_y, float tan_fovx, float tan_fovy, const float* cov3D, const float* viewmatrix)\n{\n\t// The following models the steps outlined by equations 29\n\t// and 31 in \"EWA Splatting\" (Zwicker et al., 2002). \n\t// Additionally considers aspect / scaling of viewport.\n\t// Transposes used to account for row-/column-major conventions.\n\tfloat3 t = transformPoint4x3(mean, viewmatrix);\n\n\tconst float limx = 1.3f * tan_fovx;\n\tconst float limy = 1.3f * tan_fovy;\n\tconst float txtz = t.x / t.z;\n\tconst float tytz = t.y / t.z;\n\tt.x = min(limx, max(-limx, txtz)) * t.z;\n\tt.y = min(limy, max(-limy, tytz)) * t.z;\n\n\tglm::mat3 J = glm::mat3(\n\t\tfocal_x / t.z, 0.0f, -(focal_x * t.x) / (t.z * t.z),\n\t\t0.0f, focal_y / t.z, -(focal_y * t.y) / (t.z * t.z),\n\t\t0, 0, 0);\n\n\tglm::mat3 W = glm::mat3(\n\t\tviewmatrix[0], viewmatrix[4], viewmatrix[8],\n\t\tviewmatrix[1], viewmatrix[5], viewmatrix[9],\n\t\tviewmatrix[2], viewmatrix[6], viewmatrix[10]);\n\n\tglm::mat3 T = W * J;\n\n\tglm::mat3 Vrk = glm::mat3(\n\t\tcov3D[0], cov3D[1], cov3D[2],\n\t\tcov3D[1], cov3D[3], cov3D[4],\n\t\tcov3D[2], cov3D[4], cov3D[5]);\n\n\tglm::mat3 cov = glm::transpose(T) * glm::transpose(Vrk) * T;\n\n\t// Apply low-pass filter: every Gaussian should be at least\n\t// one pixel wide/high. Discard 3rd row and column.\n\tcov[0][0] += 0.3f;\n\tcov[1][1] += 0.3f;\n\treturn { float(cov[0][0]), float(cov[0][1]), float(cov[1][1]) };\n}\n\n// Forward method for converting scale and rotation properties of each\n// Gaussian to a 3D covariance matrix in world space. Also takes care\n// of quaternion normalization.\n__device__ void computeCov3D(const glm::vec3 scale, float mod, const glm::vec4 rot, float* cov3D)\n{\n\t// Create scaling matrix\n\tglm::mat3 S = glm::mat3(1.0f);\n\tS[0][0] = mod * scale.x;\n\tS[1][1] = mod * scale.y;\n\tS[2][2] = mod * scale.z;\n\n\t// Normalize quaternion to get valid rotation\n\tglm::vec4 q = rot;// / glm::length(rot);\n\tfloat r = q.x;\n\tfloat x = q.y;\n\tfloat y = q.z;\n\tfloat z = q.w;\n\n\t// Compute rotation matrix from quaternion\n\tglm::mat3 R = glm::mat3(\n\t\t1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),\n\t\t2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),\n\t\t2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y)\n\t);\n\n\tglm::mat3 M = S * R;\n\n\t// Compute 3D world covariance matrix Sigma\n\tglm::mat3 Sigma = glm::transpose(M) * M;\n\n\t// Covariance is symmetric, only store upper right\n\tcov3D[0] = Sigma[0][0];\n\tcov3D[1] = Sigma[0][1];\n\tcov3D[2] = Sigma[0][2];\n\tcov3D[3] = Sigma[1][1];\n\tcov3D[4] = Sigma[1][2];\n\tcov3D[5] = Sigma[2][2];\n}\n\n// Perform initial steps for each Gaussian prior to rasterization.\ntemplate<int C>\n__global__ void preprocessCUDA(int P, int D, int M,\n\tconst float* orig_points,\n\tconst glm::vec3* scales,\n\tconst float scale_modifier,\n\tconst glm::vec4* rotations,\n\tconst float* opacities,\n\tconst float* shs,\n\tbool* clamped,\n\tconst float* cov3D_precomp,\n\tconst float* colors_precomp,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst glm::vec3* cam_pos,\n\tconst int W, int H,\n\tconst float tan_fovx, float tan_fovy,\n\tconst float focal_x, float focal_y,\n\tint* radii,\n\tfloat2* points_xy_image,\n\tfloat* depths,\n\tfloat* cov3Ds,\n\tfloat* rgb,\n\tfloat4* conic_opacity,\n\tconst dim3 grid,\n\tuint32_t* tiles_touched,\n\tbool prefiltered)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\t// Initialize radius and touched tiles to 0. If this isn't changed,\n\t// this Gaussian will not be processed further.\n\tradii[idx] = 0;\n\ttiles_touched[idx] = 0;\n\n\t// Perform near culling, quit if outside.\n\tfloat3 p_view;\n\tif (!in_frustum(idx, orig_points, viewmatrix, projmatrix, prefiltered, p_view))\n\t\treturn;\n\n\t// Transform point by projecting\n\tfloat3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };\n\tfloat4 p_hom = transformPoint4x4(p_orig, projmatrix);\n\tfloat p_w = 1.0f / (p_hom.w + 0.0000001f);\n\tfloat3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };\n\n\t// If 3D covariance matrix is precomputed, use it, otherwise compute\n\t// from scaling and rotation parameters. \n\tconst float* cov3D;\n\tif (cov3D_precomp != nullptr)\n\t{\n\t\tcov3D = cov3D_precomp + idx * 6;\n\t}\n\telse\n\t{\n\t\tcomputeCov3D(scales[idx], scale_modifier, rotations[idx], cov3Ds + idx * 6);\n\t\tcov3D = cov3Ds + idx * 6;\n\t}\n\n\t// Compute 2D screen-space covariance matrix\n\tfloat3 cov = computeCov2D(p_orig, focal_x, focal_y, tan_fovx, tan_fovy, cov3D, viewmatrix);\n\n\t// Invert covariance (EWA algorithm)\n\tfloat det = (cov.x * cov.z - cov.y * cov.y);\n\tif (det == 0.0f)\n\t\treturn;\n\tfloat det_inv = 1.f / det;\n\tfloat3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv };\n\n\t// Compute extent in screen space (by finding eigenvalues of\n\t// 2D covariance matrix). Use extent to compute a bounding rectangle\n\t// of screen-space tiles that this Gaussian overlaps with. Quit if\n\t// rectangle covers 0 tiles. \n\tfloat mid = 0.5f * (cov.x + cov.z);\n\tfloat lambda1 = mid + sqrt(max(0.1f, mid * mid - det));\n\tfloat lambda2 = mid - sqrt(max(0.1f, mid * mid - det));\n\tfloat my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));\n\tfloat2 point_image = { ndc2Pix(p_proj.x, W), ndc2Pix(p_proj.y, H) };\n\tuint2 rect_min, rect_max;\n\tgetRect(point_image, my_radius, rect_min, rect_max, grid);\n\tif ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0)\n\t\treturn;\n\n\t// If colors have been precomputed, use them, otherwise convert\n\t// spherical harmonics coefficients to RGB color.\n\tif (colors_precomp == nullptr)\n\t{\n\t\tglm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3*)orig_points, *cam_pos, shs, clamped);\n\t\trgb[idx * C + 0] = result.x;\n\t\trgb[idx * C + 1] = result.y;\n\t\trgb[idx * C + 2] = result.z;\n\t}\n\n\t// Store some useful helper data for the next steps.\n\tdepths[idx] = p_view.z;\n\tradii[idx] = my_radius;\n\tpoints_xy_image[idx] = point_image;\n\t// Inverse 2D covariance and opacity neatly pack into one float4\n\tconic_opacity[idx] = { conic.x, conic.y, conic.z, opacities[idx] };\n\ttiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x);\n}\n\n// Main rasterization method. Collaboratively works on one tile per\n// block, each thread treats one pixel. Alternates between fetching \n// and rasterizing data.\ntemplate <uint32_t CHANNELS>\n__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)\nrenderCUDA(\n\tconst uint2* __restrict__ ranges,\n\tconst uint32_t* __restrict__ point_list,\n\tint W, int H,\n\tconst float2* __restrict__ points_xy_image,\n\tconst float* __restrict__ features,\n\tconst float4* __restrict__ conic_opacity,\n\tfloat* __restrict__ final_T,\n\tuint32_t* __restrict__ n_contrib,\n\tconst float* __restrict__ bg_color,\n\tfloat* __restrict__ out_color)\n{\n\t// Identify current tile and associated min/max pixel range.\n\tauto block = cg::this_thread_block();\n\tuint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;\n\tuint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };\n\tuint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };\n\tuint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };\n\tuint32_t pix_id = W * pix.y + pix.x;\n\tfloat2 pixf = { (float)pix.x, (float)pix.y };\n\n\t// Check if this thread is associated with a valid pixel or outside.\n\tbool inside = pix.x < W&& pix.y < H;\n\t// Done threads can help with fetching, but don't rasterize\n\tbool done = !inside;\n\n\t// Load start/end range of IDs to process in bit sorted list.\n\tuint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];\n\tconst int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);\n\tint toDo = range.y - range.x;\n\n\t// Allocate storage for batches of collectively fetched data.\n\t__shared__ int collected_id[BLOCK_SIZE];\n\t__shared__ float2 collected_xy[BLOCK_SIZE];\n\t__shared__ float4 collected_conic_opacity[BLOCK_SIZE];\n\n\t// Initialize helper variables\n\tfloat T = 1.0f;\n\tuint32_t contributor = 0;\n\tuint32_t last_contributor = 0;\n\tfloat C[CHANNELS] = { 0 };\n\n\t// Iterate over batches until all done or range is complete\n\tfor (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)\n\t{\n\t\t// End if entire block votes that it is done rasterizing\n\t\tint num_done = __syncthreads_count(done);\n\t\tif (num_done == BLOCK_SIZE)\n\t\t\tbreak;\n\n\t\t// Collectively fetch per-Gaussian data from global to shared\n\t\tint progress = i * BLOCK_SIZE + block.thread_rank();\n\t\tif (range.x + progress < range.y)\n\t\t{\n\t\t\tint coll_id = point_list[range.x + progress];\n\t\t\tcollected_id[block.thread_rank()] = coll_id;\n\t\t\tcollected_xy[block.thread_rank()] = points_xy_image[coll_id];\n\t\t\tcollected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];\n\t\t}\n\t\tblock.sync();\n\n\t\t// Iterate over current batch\n\t\tfor (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)\n\t\t{\n\t\t\t// Keep track of current position in range\n\t\t\tcontributor++;\n\n\t\t\t// Resample using conic matrix (cf. \"Surface \n\t\t\t// Splatting\" by Zwicker et al., 2001)\n\t\t\tfloat2 xy = collected_xy[j];\n\t\t\tfloat2 d = { xy.x - pixf.x, xy.y - pixf.y };\n\t\t\tfloat4 con_o = collected_conic_opacity[j];\n\t\t\tfloat power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;\n\t\t\tif (power > 0.0f)\n\t\t\t\tcontinue;\n\n\t\t\t// Eq. (2) from 3D Gaussian splatting paper.\n\t\t\t// Obtain alpha by multiplying with Gaussian opacity\n\t\t\t// and its exponential falloff from mean.\n\t\t\t// Avoid numerical instabilities (see paper appendix). \n\t\t\tfloat alpha = min(0.99f, con_o.w * exp(power));\n\t\t\tif (alpha < 1.0f / 255.0f)\n\t\t\t\tcontinue;\n\t\t\tfloat test_T = T * (1 - alpha);\n\t\t\tif (test_T < 0.0001f)\n\t\t\t{\n\t\t\t\tdone = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Eq. (3) from 3D Gaussian splatting paper.\n\t\t\tfor (int ch = 0; ch < CHANNELS; ch++)\n\t\t\t\tC[ch] += features[collected_id[j] * CHANNELS + ch] * alpha * T;\n\n\t\t\tT = test_T;\n\n\t\t\t// Keep track of last range entry to update this\n\t\t\t// pixel.\n\t\t\tlast_contributor = contributor;\n\t\t}\n\t}\n\n\t// All threads that treat valid pixel write out their final\n\t// rendering data to the frame and auxiliary buffers.\n\tif (inside)\n\t{\n\t\tfinal_T[pix_id] = T;\n\t\tn_contrib[pix_id] = last_contributor;\n\t\tfor (int ch = 0; ch < CHANNELS; ch++)\n\t\t\tout_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch];\n\t}\n}\n\nvoid FORWARD::render(\n\tconst dim3 grid, dim3 block,\n\tconst uint2* ranges,\n\tconst uint32_t* point_list,\n\tint W, int H,\n\tconst float2* means2D,\n\tconst float* colors,\n\tconst float4* conic_opacity,\n\tfloat* final_T,\n\tuint32_t* n_contrib,\n\tconst float* bg_color,\n\tfloat* out_color)\n{\n\trenderCUDA<NUM_CHANNELS> << <grid, block >> > (\n\t\tranges,\n\t\tpoint_list,\n\t\tW, H,\n\t\tmeans2D,\n\t\tcolors,\n\t\tconic_opacity,\n\t\tfinal_T,\n\t\tn_contrib,\n\t\tbg_color,\n\t\tout_color);\n}\n\nvoid FORWARD::preprocess(int P, int D, int M,\n\tconst float* means3D,\n\tconst glm::vec3* scales,\n\tconst float scale_modifier,\n\tconst glm::vec4* rotations,\n\tconst float* opacities,\n\tconst float* shs,\n\tbool* clamped,\n\tconst float* cov3D_precomp,\n\tconst float* colors_precomp,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst glm::vec3* cam_pos,\n\tconst int W, int H,\n\tconst float focal_x, float focal_y,\n\tconst float tan_fovx, float tan_fovy,\n\tint* radii,\n\tfloat2* means2D,\n\tfloat* depths,\n\tfloat* cov3Ds,\n\tfloat* rgb,\n\tfloat4* conic_opacity,\n\tconst dim3 grid,\n\tuint32_t* tiles_touched,\n\tbool prefiltered)\n{\n\tpreprocessCUDA<NUM_CHANNELS> << <(P + 255) / 256, 256 >> > (\n\t\tP, D, M,\n\t\tmeans3D,\n\t\tscales,\n\t\tscale_modifier,\n\t\trotations,\n\t\topacities,\n\t\tshs,\n\t\tclamped,\n\t\tcov3D_precomp,\n\t\tcolors_precomp,\n\t\tviewmatrix, \n\t\tprojmatrix,\n\t\tcam_pos,\n\t\tW, H,\n\t\ttan_fovx, tan_fovy,\n\t\tfocal_x, focal_y,\n\t\tradii,\n\t\tmeans2D,\n\t\tdepths,\n\t\tcov3Ds,\n\t\trgb,\n\t\tconic_opacity,\n\t\tgrid,\n\t\ttiles_touched,\n\t\tprefiltered\n\t\t);\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/forward.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED\n#define CUDA_RASTERIZER_FORWARD_H_INCLUDED\n\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\nnamespace FORWARD\n{\n\t// Perform initial steps for each Gaussian prior to rasterization.\n\tvoid preprocess(int P, int D, int M,\n\t\tconst float* orig_points,\n\t\tconst glm::vec3* scales,\n\t\tconst float scale_modifier,\n\t\tconst glm::vec4* rotations,\n\t\tconst float* opacities,\n\t\tconst float* shs,\n\t\tbool* clamped,\n\t\tconst float* cov3D_precomp,\n\t\tconst float* colors_precomp,\n\t\tconst float* viewmatrix,\n\t\tconst float* projmatrix,\n\t\tconst glm::vec3* cam_pos,\n\t\tconst int W, int H,\n\t\tconst float focal_x, float focal_y,\n\t\tconst float tan_fovx, float tan_fovy,\n\t\tint* radii,\n\t\tfloat2* points_xy_image,\n\t\tfloat* depths,\n\t\tfloat* cov3Ds,\n\t\tfloat* colors,\n\t\tfloat4* conic_opacity,\n\t\tconst dim3 grid,\n\t\tuint32_t* tiles_touched,\n\t\tbool prefiltered);\n\n\t// Main rasterization method.\n\tvoid render(\n\t\tconst dim3 grid, dim3 block,\n\t\tconst uint2* ranges,\n\t\tconst uint32_t* point_list,\n\t\tint W, int H,\n\t\tconst float2* points_xy_image,\n\t\tconst float* features,\n\t\tconst float4* conic_opacity,\n\t\tfloat* final_T,\n\t\tuint32_t* n_contrib,\n\t\tconst float* bg_color,\n\t\tfloat* out_color);\n}\n\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/rasterizer.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_H_INCLUDED\n#define CUDA_RASTERIZER_H_INCLUDED\n\n#include <vector>\n#include <functional>\n\nnamespace CudaRasterizer\n{\n\tclass Rasterizer\n\t{\n\tpublic:\n\n\t\tstatic void markVisible(\n\t\t\tint P,\n\t\t\tfloat* means3D,\n\t\t\tfloat* viewmatrix,\n\t\t\tfloat* projmatrix,\n\t\t\tbool* present);\n\n\t\tstatic int forward(\n\t\t\tstd::function<char* (size_t)> geometryBuffer,\n\t\t\tstd::function<char* (size_t)> binningBuffer,\n\t\t\tstd::function<char* (size_t)> imageBuffer,\n\t\t\tconst int P, int D, int M,\n\t\t\tconst float* background,\n\t\t\tconst int width, int height,\n\t\t\tconst float* means3D,\n\t\t\tconst float* shs,\n\t\t\tconst float* colors_precomp,\n\t\t\tconst float* opacities,\n\t\t\tconst float* scales,\n\t\t\tconst float scale_modifier,\n\t\t\tconst float* rotations,\n\t\t\tconst float* cov3D_precomp,\n\t\t\tconst float* viewmatrix,\n\t\t\tconst float* projmatrix,\n\t\t\tconst float* cam_pos,\n\t\t\tconst float tan_fovx, float tan_fovy,\n\t\t\tconst bool prefiltered,\n\t\t\tfloat* out_color,\n\t\t\tint* radii = nullptr,\n\t\t\tbool debug = false);\n\n\t\tstatic void backward(\n\t\t\tconst int P, int D, int M, int R,\n\t\t\tconst float* background,\n\t\t\tconst int width, int height,\n\t\t\tconst float* means3D,\n\t\t\tconst float* shs,\n\t\t\tconst float* colors_precomp,\n\t\t\tconst float* scales,\n\t\t\tconst float scale_modifier,\n\t\t\tconst float* rotations,\n\t\t\tconst float* cov3D_precomp,\n\t\t\tconst float* viewmatrix,\n\t\t\tconst float* projmatrix,\n\t\t\tconst float* campos,\n\t\t\tconst float tan_fovx, float tan_fovy,\n\t\t\tconst int* radii,\n\t\t\tchar* geom_buffer,\n\t\t\tchar* binning_buffer,\n\t\t\tchar* image_buffer,\n\t\t\tconst float* dL_dpix,\n\t\t\tfloat* dL_dmean2D,\n\t\t\tfloat* dL_dconic,\n\t\t\tfloat* dL_dopacity,\n\t\t\tfloat* dL_dcolor,\n\t\t\tfloat* dL_dmean3D,\n\t\t\tfloat* dL_dcov3D,\n\t\t\tfloat* dL_dsh,\n\t\t\tfloat* dL_dscale,\n\t\t\tfloat* dL_drot,\n\t\t\tbool debug);\n\t};\n};\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/rasterizer_impl.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"rasterizer_impl.h\"\n#include <iostream>\n#include <fstream>\n#include <algorithm>\n#include <numeric>\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#include <cub/cub.cuh>\n#include <cub/device/device_radix_sort.cuh>\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\nnamespace cg = cooperative_groups;\n\n#include \"auxiliary.h\"\n#include \"forward.h\"\n#include \"backward.h\"\n\n// Helper function to find the next-highest bit of the MSB\n// on the CPU.\nuint32_t getHigherMsb(uint32_t n)\n{\n\tuint32_t msb = sizeof(n) * 4;\n\tuint32_t step = msb;\n\twhile (step > 1)\n\t{\n\t\tstep /= 2;\n\t\tif (n >> msb)\n\t\t\tmsb += step;\n\t\telse\n\t\t\tmsb -= step;\n\t}\n\tif (n >> msb)\n\t\tmsb++;\n\treturn msb;\n}\n\n// Wrapper method to call auxiliary coarse frustum containment test.\n// Mark all Gaussians that pass it.\n__global__ void checkFrustum(int P,\n\tconst float* orig_points,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tbool* present)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tfloat3 p_view;\n\tpresent[idx] = in_frustum(idx, orig_points, viewmatrix, projmatrix, false, p_view);\n}\n\n// Generates one key/value pair for all Gaussian / tile overlaps. \n// Run once per Gaussian (1:N mapping).\n__global__ void duplicateWithKeys(\n\tint P,\n\tconst float2* points_xy,\n\tconst float* depths,\n\tconst uint32_t* offsets,\n\tuint64_t* gaussian_keys_unsorted,\n\tuint32_t* gaussian_values_unsorted,\n\tint* radii,\n\tdim3 grid)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\t// Generate no key/value pair for invisible Gaussians\n\tif (radii[idx] > 0)\n\t{\n\t\t// Find this Gaussian's offset in buffer for writing keys/values.\n\t\tuint32_t off = (idx == 0) ? 0 : offsets[idx - 1];\n\t\tuint2 rect_min, rect_max;\n\n\t\tgetRect(points_xy[idx], radii[idx], rect_min, rect_max, grid);\n\n\t\t// For each tile that the bounding rect overlaps, emit a \n\t\t// key/value pair. The key is |  tile ID  |      depth      |,\n\t\t// and the value is the ID of the Gaussian. Sorting the values \n\t\t// with this key yields Gaussian IDs in a list, such that they\n\t\t// are first sorted by tile and then by depth. \n\t\tfor (int y = rect_min.y; y < rect_max.y; y++)\n\t\t{\n\t\t\tfor (int x = rect_min.x; x < rect_max.x; x++)\n\t\t\t{\n\t\t\t\tuint64_t key = y * grid.x + x;\n\t\t\t\tkey <<= 32;\n\t\t\t\tkey |= *((uint32_t*)&depths[idx]);\n\t\t\t\tgaussian_keys_unsorted[off] = key;\n\t\t\t\tgaussian_values_unsorted[off] = idx;\n\t\t\t\toff++;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Check keys to see if it is at the start/end of one tile's range in \n// the full sorted list. If yes, write start/end of this tile. \n// Run once per instanced (duplicated) Gaussian ID.\n__global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= L)\n\t\treturn;\n\n\t// Read tile ID from key. Update start/end of tile range if at limit.\n\tuint64_t key = point_list_keys[idx];\n\tuint32_t currtile = key >> 32;\n\tif (idx == 0)\n\t\tranges[currtile].x = 0;\n\telse\n\t{\n\t\tuint32_t prevtile = point_list_keys[idx - 1] >> 32;\n\t\tif (currtile != prevtile)\n\t\t{\n\t\t\tranges[prevtile].y = idx;\n\t\t\tranges[currtile].x = idx;\n\t\t}\n\t}\n\tif (idx == L - 1)\n\t\tranges[currtile].y = L;\n}\n\n// Mark Gaussians as visible/invisible, based on view frustum testing\nvoid CudaRasterizer::Rasterizer::markVisible(\n\tint P,\n\tfloat* means3D,\n\tfloat* viewmatrix,\n\tfloat* projmatrix,\n\tbool* present)\n{\n\tcheckFrustum << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tmeans3D,\n\t\tviewmatrix, projmatrix,\n\t\tpresent);\n}\n\nCudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P)\n{\n\tGeometryState geom;\n\tobtain(chunk, geom.depths, P, 128);\n\tobtain(chunk, geom.clamped, P * 3, 128);\n\tobtain(chunk, geom.internal_radii, P, 128);\n\tobtain(chunk, geom.means2D, P, 128);\n\tobtain(chunk, geom.cov3D, P * 6, 128);\n\tobtain(chunk, geom.conic_opacity, P, 128);\n\tobtain(chunk, geom.rgb, P * 3, 128);\n\tobtain(chunk, geom.tiles_touched, P, 128);\n\tcub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P);\n\tobtain(chunk, geom.scanning_space, geom.scan_size, 128);\n\tobtain(chunk, geom.point_offsets, P, 128);\n\treturn geom;\n}\n\nCudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N)\n{\n\tImageState img;\n\tobtain(chunk, img.accum_alpha, N, 128);\n\tobtain(chunk, img.n_contrib, N, 128);\n\tobtain(chunk, img.ranges, N, 128);\n\treturn img;\n}\n\nCudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P)\n{\n\tBinningState binning;\n\tobtain(chunk, binning.point_list, P, 128);\n\tobtain(chunk, binning.point_list_unsorted, P, 128);\n\tobtain(chunk, binning.point_list_keys, P, 128);\n\tobtain(chunk, binning.point_list_keys_unsorted, P, 128);\n\tcub::DeviceRadixSort::SortPairs(\n\t\tnullptr, binning.sorting_size,\n\t\tbinning.point_list_keys_unsorted, binning.point_list_keys,\n\t\tbinning.point_list_unsorted, binning.point_list, P);\n\tobtain(chunk, binning.list_sorting_space, binning.sorting_size, 128);\n\treturn binning;\n}\n\n// Forward rendering procedure for differentiable rasterization\n// of Gaussians.\nint CudaRasterizer::Rasterizer::forward(\n\tstd::function<char* (size_t)> geometryBuffer,\n\tstd::function<char* (size_t)> binningBuffer,\n\tstd::function<char* (size_t)> imageBuffer,\n\tconst int P, int D, int M,\n\tconst float* background,\n\tconst int width, int height,\n\tconst float* means3D,\n\tconst float* shs,\n\tconst float* colors_precomp,\n\tconst float* opacities,\n\tconst float* scales,\n\tconst float scale_modifier,\n\tconst float* rotations,\n\tconst float* cov3D_precomp,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float* cam_pos,\n\tconst float tan_fovx, float tan_fovy,\n\tconst bool prefiltered,\n\tfloat* out_color,\n\tint* radii,\n\tbool debug)\n{\n\tconst float focal_y = height / (2.0f * tan_fovy);\n\tconst float focal_x = width / (2.0f * tan_fovx);\n\n\tsize_t chunk_size = required<GeometryState>(P);\n\tchar* chunkptr = geometryBuffer(chunk_size);\n\tGeometryState geomState = GeometryState::fromChunk(chunkptr, P);\n\n\tif (radii == nullptr)\n\t{\n\t\tradii = geomState.internal_radii;\n\t}\n\n\tdim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);\n\tdim3 block(BLOCK_X, BLOCK_Y, 1);\n\n\t// Dynamically resize image-based auxiliary buffers during training\n\tsize_t img_chunk_size = required<ImageState>(width * height);\n\tchar* img_chunkptr = imageBuffer(img_chunk_size);\n\tImageState imgState = ImageState::fromChunk(img_chunkptr, width * height);\n\n\tif (NUM_CHANNELS != 3 && colors_precomp == nullptr)\n\t{\n\t\tthrow std::runtime_error(\"For non-RGB, provide precomputed Gaussian colors!\");\n\t}\n\n\t// Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB)\n\tCHECK_CUDA(FORWARD::preprocess(\n\t\tP, D, M,\n\t\tmeans3D,\n\t\t(glm::vec3*)scales,\n\t\tscale_modifier,\n\t\t(glm::vec4*)rotations,\n\t\topacities,\n\t\tshs,\n\t\tgeomState.clamped,\n\t\tcov3D_precomp,\n\t\tcolors_precomp,\n\t\tviewmatrix, projmatrix,\n\t\t(glm::vec3*)cam_pos,\n\t\twidth, height,\n\t\tfocal_x, focal_y,\n\t\ttan_fovx, tan_fovy,\n\t\tradii,\n\t\tgeomState.means2D,\n\t\tgeomState.depths,\n\t\tgeomState.cov3D,\n\t\tgeomState.rgb,\n\t\tgeomState.conic_opacity,\n\t\ttile_grid,\n\t\tgeomState.tiles_touched,\n\t\tprefiltered\n\t), debug)\n\n\t// Compute prefix sum over full list of touched tile counts by Gaussians\n\t// E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8]\n\tCHECK_CUDA(cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, geomState.tiles_touched, geomState.point_offsets, P), debug)\n\n\t// Retrieve total number of Gaussian instances to launch and resize aux buffers\n\tint num_rendered;\n\tCHECK_CUDA(cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost), debug);\n\n\tsize_t binning_chunk_size = required<BinningState>(num_rendered);\n\tchar* binning_chunkptr = binningBuffer(binning_chunk_size);\n\tBinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered);\n\n\t// For each instance to be rendered, produce adequate [ tile | depth ] key \n\t// and corresponding dublicated Gaussian indices to be sorted\n\tduplicateWithKeys << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tgeomState.means2D,\n\t\tgeomState.depths,\n\t\tgeomState.point_offsets,\n\t\tbinningState.point_list_keys_unsorted,\n\t\tbinningState.point_list_unsorted,\n\t\tradii,\n\t\ttile_grid)\n\tCHECK_CUDA(, debug)\n\n\tint bit = getHigherMsb(tile_grid.x * tile_grid.y);\n\n\t// Sort complete list of (duplicated) Gaussian indices by keys\n\tCHECK_CUDA(cub::DeviceRadixSort::SortPairs(\n\t\tbinningState.list_sorting_space,\n\t\tbinningState.sorting_size,\n\t\tbinningState.point_list_keys_unsorted, binningState.point_list_keys,\n\t\tbinningState.point_list_unsorted, binningState.point_list,\n\t\tnum_rendered, 0, 32 + bit), debug)\n\n\tCHECK_CUDA(cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)), debug);\n\n\t// Identify start and end of per-tile workloads in sorted list\n\tif (num_rendered > 0)\n\t\tidentifyTileRanges << <(num_rendered + 255) / 256, 256 >> > (\n\t\t\tnum_rendered,\n\t\t\tbinningState.point_list_keys,\n\t\t\timgState.ranges);\n\tCHECK_CUDA(, debug)\n\n\t// Let each tile blend its range of Gaussians independently in parallel\n\tconst float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb;\n\tCHECK_CUDA(FORWARD::render(\n\t\ttile_grid, block,\n\t\timgState.ranges,\n\t\tbinningState.point_list,\n\t\twidth, height,\n\t\tgeomState.means2D,\n\t\tfeature_ptr,\n\t\tgeomState.conic_opacity,\n\t\timgState.accum_alpha,\n\t\timgState.n_contrib,\n\t\tbackground,\n\t\tout_color), debug)\n\n\treturn num_rendered;\n}\n\n// Produce necessary gradients for optimization, corresponding\n// to forward render pass\nvoid CudaRasterizer::Rasterizer::backward(\n\tconst int P, int D, int M, int R,\n\tconst float* background,\n\tconst int width, int height,\n\tconst float* means3D,\n\tconst float* shs,\n\tconst float* colors_precomp,\n\tconst float* scales,\n\tconst float scale_modifier,\n\tconst float* rotations,\n\tconst float* cov3D_precomp,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float* campos,\n\tconst float tan_fovx, float tan_fovy,\n\tconst int* radii,\n\tchar* geom_buffer,\n\tchar* binning_buffer,\n\tchar* img_buffer,\n\tconst float* dL_dpix,\n\tfloat* dL_dmean2D,\n\tfloat* dL_dconic,\n\tfloat* dL_dopacity,\n\tfloat* dL_dcolor,\n\tfloat* dL_dmean3D,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tfloat* dL_dscale,\n\tfloat* dL_drot,\n\tbool debug)\n{\n\tGeometryState geomState = GeometryState::fromChunk(geom_buffer, P);\n\tBinningState binningState = BinningState::fromChunk(binning_buffer, R);\n\tImageState imgState = ImageState::fromChunk(img_buffer, width * height);\n\n\tif (radii == nullptr)\n\t{\n\t\tradii = geomState.internal_radii;\n\t}\n\n\tconst float focal_y = height / (2.0f * tan_fovy);\n\tconst float focal_x = width / (2.0f * tan_fovx);\n\n\tconst dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);\n\tconst dim3 block(BLOCK_X, BLOCK_Y, 1);\n\n\t// Compute loss gradients w.r.t. 2D mean position, conic matrix,\n\t// opacity and RGB of Gaussians from per-pixel loss gradients.\n\t// If we were given precomputed colors and not SHs, use them.\n\tconst float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb;\n\tCHECK_CUDA(BACKWARD::render(\n\t\ttile_grid,\n\t\tblock,\n\t\timgState.ranges,\n\t\tbinningState.point_list,\n\t\twidth, height,\n\t\tbackground,\n\t\tgeomState.means2D,\n\t\tgeomState.conic_opacity,\n\t\tcolor_ptr,\n\t\timgState.accum_alpha,\n\t\timgState.n_contrib,\n\t\tdL_dpix,\n\t\t(float3*)dL_dmean2D,\n\t\t(float4*)dL_dconic,\n\t\tdL_dopacity,\n\t\tdL_dcolor), debug)\n\n\t// Take care of the rest of preprocessing. Was the precomputed covariance\n\t// given to us or a scales/rot pair? If precomputed, pass that. If not,\n\t// use the one we computed ourselves.\n\tconst float* cov3D_ptr = (cov3D_precomp != nullptr) ? cov3D_precomp : geomState.cov3D;\n\tCHECK_CUDA(BACKWARD::preprocess(P, D, M,\n\t\t(float3*)means3D,\n\t\tradii,\n\t\tshs,\n\t\tgeomState.clamped,\n\t\t(glm::vec3*)scales,\n\t\t(glm::vec4*)rotations,\n\t\tscale_modifier,\n\t\tcov3D_ptr,\n\t\tviewmatrix,\n\t\tprojmatrix,\n\t\tfocal_x, focal_y,\n\t\ttan_fovx, tan_fovy,\n\t\t(glm::vec3*)campos,\n\t\t(float3*)dL_dmean2D,\n\t\tdL_dconic,\n\t\t(glm::vec3*)dL_dmean3D,\n\t\tdL_dcolor,\n\t\tdL_dcov3D,\n\t\tdL_dsh,\n\t\t(glm::vec3*)dL_dscale,\n\t\t(glm::vec4*)dL_drot), debug)\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/cuda_rasterizer/rasterizer_impl.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#pragma once\n\n#include <iostream>\n#include <vector>\n#include \"rasterizer.h\"\n#include <cuda_runtime_api.h>\n\nnamespace CudaRasterizer\n{\n\ttemplate <typename T>\n\tstatic void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment)\n\t{\n\t\tstd::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1);\n\t\tptr = reinterpret_cast<T*>(offset);\n\t\tchunk = reinterpret_cast<char*>(ptr + count);\n\t}\n\n\tstruct GeometryState\n\t{\n\t\tsize_t scan_size;\n\t\tfloat* depths;\n\t\tchar* scanning_space;\n\t\tbool* clamped;\n\t\tint* internal_radii;\n\t\tfloat2* means2D;\n\t\tfloat* cov3D;\n\t\tfloat4* conic_opacity;\n\t\tfloat* rgb;\n\t\tuint32_t* point_offsets;\n\t\tuint32_t* tiles_touched;\n\n\t\tstatic GeometryState fromChunk(char*& chunk, size_t P);\n\t};\n\n\tstruct ImageState\n\t{\n\t\tuint2* ranges;\n\t\tuint32_t* n_contrib;\n\t\tfloat* accum_alpha;\n\n\t\tstatic ImageState fromChunk(char*& chunk, size_t N);\n\t};\n\n\tstruct BinningState\n\t{\n\t\tsize_t sorting_size;\n\t\tuint64_t* point_list_keys_unsorted;\n\t\tuint64_t* point_list_keys;\n\t\tuint32_t* point_list_unsorted;\n\t\tuint32_t* point_list;\n\t\tchar* list_sorting_space;\n\n\t\tstatic BinningState fromChunk(char*& chunk, size_t P);\n\t};\n\n\ttemplate<typename T> \n\tsize_t required(size_t P)\n\t{\n\t\tchar* size = nullptr;\n\t\tT::fromChunk(size, P);\n\t\treturn ((size_t)size) + 128;\n\t}\n};"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/diff_gaussian_rasterization/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom typing import NamedTuple\nimport torch.nn as nn\nimport torch\nfrom . import _C\n\ndef cpu_deep_copy_tuple(input_tuple):\n    copied_tensors = [item.cpu().clone() if isinstance(item, torch.Tensor) else item for item in input_tuple]\n    return tuple(copied_tensors)\n\ndef rasterize_gaussians(\n    means3D,\n    means2D,\n    sh,\n    colors_precomp,\n    opacities,\n    scales,\n    rotations,\n    cov3Ds_precomp,\n    raster_settings,\n):\n    return _RasterizeGaussians.apply(\n        means3D,\n        means2D,\n        sh,\n        colors_precomp,\n        opacities,\n        scales,\n        rotations,\n        cov3Ds_precomp,\n        raster_settings,\n    )\n\nclass _RasterizeGaussians(torch.autograd.Function):\n    @staticmethod\n    def forward(\n        ctx,\n        means3D,\n        means2D,\n        sh,\n        colors_precomp,\n        opacities,\n        scales,\n        rotations,\n        cov3Ds_precomp,\n        raster_settings,\n    ):\n\n        # Restructure arguments the way that the C++ lib expects them\n        args = (\n            raster_settings.bg, \n            means3D,\n            colors_precomp,\n            opacities,\n            scales,\n            rotations,\n            raster_settings.scale_modifier,\n            cov3Ds_precomp,\n            raster_settings.viewmatrix,\n            raster_settings.projmatrix,\n            raster_settings.tanfovx,\n            raster_settings.tanfovy,\n            raster_settings.image_height,\n            raster_settings.image_width,\n            sh,\n            raster_settings.sh_degree,\n            raster_settings.campos,\n            raster_settings.prefiltered,\n            raster_settings.debug\n        )\n\n        # Invoke C++/CUDA rasterizer\n        if raster_settings.debug:\n            cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted\n            try:\n                num_rendered, color, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)\n            except Exception as ex:\n                torch.save(cpu_args, \"snapshot_fw.dump\")\n                print(\"\\nAn error occured in forward. Please forward snapshot_fw.dump for debugging.\")\n                raise ex\n        else:\n            num_rendered, color, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)\n\n        # Keep relevant tensors for backward\n        ctx.raster_settings = raster_settings\n        ctx.num_rendered = num_rendered\n        ctx.save_for_backward(colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer)\n        return color, radii\n\n    @staticmethod\n    def backward(ctx, grad_out_color, _):\n\n        # Restore necessary values from context\n        num_rendered = ctx.num_rendered\n        raster_settings = ctx.raster_settings\n        colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer = ctx.saved_tensors\n\n        # Restructure args as C++ method expects them\n        args = (raster_settings.bg,\n                means3D, \n                radii, \n                colors_precomp, \n                scales, \n                rotations, \n                raster_settings.scale_modifier, \n                cov3Ds_precomp, \n                raster_settings.viewmatrix, \n                raster_settings.projmatrix, \n                raster_settings.tanfovx, \n                raster_settings.tanfovy, \n                grad_out_color, \n                sh, \n                raster_settings.sh_degree, \n                raster_settings.campos,\n                geomBuffer,\n                num_rendered,\n                binningBuffer,\n                imgBuffer,\n                raster_settings.debug)\n\n        # Compute gradients for relevant tensors by invoking backward method\n        if raster_settings.debug:\n            cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted\n            try:\n                grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)\n            except Exception as ex:\n                torch.save(cpu_args, \"snapshot_bw.dump\")\n                print(\"\\nAn error occured in backward. Writing snapshot_bw.dump for debugging.\\n\")\n                raise ex\n        else:\n             grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args)\n\n        grads = (\n            grad_means3D,\n            grad_means2D,\n            grad_sh,\n            grad_colors_precomp,\n            grad_opacities,\n            grad_scales,\n            grad_rotations,\n            grad_cov3Ds_precomp,\n            None,\n        )\n\n        return grads\n\nclass GaussianRasterizationSettings(NamedTuple):\n    image_height: int\n    image_width: int \n    tanfovx : float\n    tanfovy : float\n    bg : torch.Tensor\n    scale_modifier : float\n    viewmatrix : torch.Tensor\n    projmatrix : torch.Tensor\n    sh_degree : int\n    campos : torch.Tensor\n    prefiltered : bool\n    debug : bool\n\nclass GaussianRasterizer(nn.Module):\n    def __init__(self, raster_settings):\n        super().__init__()\n        self.raster_settings = raster_settings\n\n    def markVisible(self, positions):\n        # Mark visible points (based on frustum culling for camera) with a boolean \n        with torch.no_grad():\n            raster_settings = self.raster_settings\n            visible = _C.mark_visible(\n                positions,\n                raster_settings.viewmatrix,\n                raster_settings.projmatrix)\n            \n        return visible\n\n    def forward(self, means3D, means2D, opacities, shs = None, colors_precomp = None, scales = None, rotations = None, cov3D_precomp = None):\n        \n        raster_settings = self.raster_settings\n\n        if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None):\n            raise Exception('Please provide excatly one of either SHs or precomputed colors!')\n        \n        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):\n            raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!')\n        \n        if shs is None:\n            shs = torch.Tensor([])\n        if colors_precomp is None:\n            colors_precomp = torch.Tensor([])\n\n        if scales is None:\n            scales = torch.Tensor([])\n        if rotations is None:\n            rotations = torch.Tensor([])\n        if cov3D_precomp is None:\n            cov3D_precomp = torch.Tensor([])\n\n        # Invoke C++/CUDA rasterization routine\n        return rasterize_gaussians(\n            means3D,\n            means2D,\n            shs,\n            colors_precomp,\n            opacities,\n            scales, \n            rotations,\n            cov3D_precomp,\n            raster_settings, \n        )\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/ext.cpp",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n#include \"rasterize_points.h\"\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\"rasterize_gaussians\", &RasterizeGaussiansCUDA);\n  m.def(\"rasterize_gaussians_backward\", &RasterizeGaussiansBackwardCUDA);\n  m.def(\"mark_visible\", &markVisible);\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/rasterize_points.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <math.h>\n#include <torch/extension.h>\n#include <cstdio>\n#include <sstream>\n#include <iostream>\n#include <tuple>\n#include <stdio.h>\n#include <cuda_runtime_api.h>\n#include <memory>\n#include \"cuda_rasterizer/config.h\"\n#include \"cuda_rasterizer/rasterizer.h\"\n#include <fstream>\n#include <string>\n#include <functional>\n\nstd::function<char*(size_t N)> resizeFunctional(torch::Tensor& t) {\n    auto lambda = [&t](size_t N) {\n        t.resize_({(long long)N});\n\t\treturn reinterpret_cast<char*>(t.contiguous().data_ptr());\n    };\n    return lambda;\n}\n\nstd::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansCUDA(\n\tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n    const torch::Tensor& colors,\n    const torch::Tensor& opacity,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n\tconst torch::Tensor& projmatrix,\n\tconst float tan_fovx, \n\tconst float tan_fovy,\n    const int image_height,\n    const int image_width,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst bool prefiltered,\n\tconst bool debug)\n{\n  if (means3D.ndimension() != 2 || means3D.size(1) != 3) {\n    AT_ERROR(\"means3D must have dimensions (num_points, 3)\");\n  }\n  \n  const int P = means3D.size(0);\n  const int H = image_height;\n  const int W = image_width;\n\n  auto int_opts = means3D.options().dtype(torch::kInt32);\n  auto float_opts = means3D.options().dtype(torch::kFloat32);\n\n  torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts);\n  torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));\n  \n  torch::Device device(torch::kCUDA);\n  torch::TensorOptions options(torch::kByte);\n  torch::Tensor geomBuffer = torch::empty({0}, options.device(device));\n  torch::Tensor binningBuffer = torch::empty({0}, options.device(device));\n  torch::Tensor imgBuffer = torch::empty({0}, options.device(device));\n  std::function<char*(size_t)> geomFunc = resizeFunctional(geomBuffer);\n  std::function<char*(size_t)> binningFunc = resizeFunctional(binningBuffer);\n  std::function<char*(size_t)> imgFunc = resizeFunctional(imgBuffer);\n  \n  int rendered = 0;\n  if(P != 0)\n  {\n\t  int M = 0;\n\t  if(sh.size(0) != 0)\n\t  {\n\t\tM = sh.size(1);\n      }\n\n\t  rendered = CudaRasterizer::Rasterizer::forward(\n\t    geomFunc,\n\t\tbinningFunc,\n\t\timgFunc,\n\t    P, degree, M,\n\t\tbackground.contiguous().data<float>(),\n\t\tW, H,\n\t\tmeans3D.contiguous().data<float>(),\n\t\tsh.contiguous().data_ptr<float>(),\n\t\tcolors.contiguous().data<float>(), \n\t\topacity.contiguous().data<float>(), \n\t\tscales.contiguous().data_ptr<float>(),\n\t\tscale_modifier,\n\t\trotations.contiguous().data_ptr<float>(),\n\t\tcov3D_precomp.contiguous().data<float>(), \n\t\tviewmatrix.contiguous().data<float>(), \n\t\tprojmatrix.contiguous().data<float>(),\n\t\tcampos.contiguous().data<float>(),\n\t\ttan_fovx,\n\t\ttan_fovy,\n\t\tprefiltered,\n\t\tout_color.contiguous().data<float>(),\n\t\tradii.contiguous().data<int>(),\n\t\tdebug);\n  }\n  return std::make_tuple(rendered, out_color, radii, geomBuffer, binningBuffer, imgBuffer);\n}\n\nstd::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\n RasterizeGaussiansBackwardCUDA(\n \tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n\tconst torch::Tensor& radii,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n    const torch::Tensor& projmatrix,\n\tconst float tan_fovx,\n\tconst float tan_fovy,\n    const torch::Tensor& dL_dout_color,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst torch::Tensor& geomBuffer,\n\tconst int R,\n\tconst torch::Tensor& binningBuffer,\n\tconst torch::Tensor& imageBuffer,\n\tconst bool debug) \n{\n  const int P = means3D.size(0);\n  const int H = dL_dout_color.size(1);\n  const int W = dL_dout_color.size(2);\n  \n  int M = 0;\n  if(sh.size(0) != 0)\n  {\t\n\tM = sh.size(1);\n  }\n\n  torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options());\n  torch::Tensor dL_dconic = torch::zeros({P, 2, 2}, means3D.options());\n  torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options());\n  torch::Tensor dL_dcov3D = torch::zeros({P, 6}, means3D.options());\n  torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options());\n  torch::Tensor dL_dscales = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options());\n  \n  if(P != 0)\n  {  \n\t  CudaRasterizer::Rasterizer::backward(P, degree, M, R,\n\t  background.contiguous().data<float>(),\n\t  W, H, \n\t  means3D.contiguous().data<float>(),\n\t  sh.contiguous().data<float>(),\n\t  colors.contiguous().data<float>(),\n\t  scales.data_ptr<float>(),\n\t  scale_modifier,\n\t  rotations.data_ptr<float>(),\n\t  cov3D_precomp.contiguous().data<float>(),\n\t  viewmatrix.contiguous().data<float>(),\n\t  projmatrix.contiguous().data<float>(),\n\t  campos.contiguous().data<float>(),\n\t  tan_fovx,\n\t  tan_fovy,\n\t  radii.contiguous().data<int>(),\n\t  reinterpret_cast<char*>(geomBuffer.contiguous().data_ptr()),\n\t  reinterpret_cast<char*>(binningBuffer.contiguous().data_ptr()),\n\t  reinterpret_cast<char*>(imageBuffer.contiguous().data_ptr()),\n\t  dL_dout_color.contiguous().data<float>(),\n\t  dL_dmeans2D.contiguous().data<float>(),\n\t  dL_dconic.contiguous().data<float>(),  \n\t  dL_dopacity.contiguous().data<float>(),\n\t  dL_dcolors.contiguous().data<float>(),\n\t  dL_dmeans3D.contiguous().data<float>(),\n\t  dL_dcov3D.contiguous().data<float>(),\n\t  dL_dsh.contiguous().data<float>(),\n\t  dL_dscales.contiguous().data<float>(),\n\t  dL_drotations.contiguous().data<float>(),\n\t  debug);\n  }\n\n  return std::make_tuple(dL_dmeans2D, dL_dcolors, dL_dopacity, dL_dmeans3D, dL_dcov3D, dL_dsh, dL_dscales, dL_drotations);\n}\n\ntorch::Tensor markVisible(\n\t\ttorch::Tensor& means3D,\n\t\ttorch::Tensor& viewmatrix,\n\t\ttorch::Tensor& projmatrix)\n{ \n  const int P = means3D.size(0);\n  \n  torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool));\n \n  if(P != 0)\n  {\n\tCudaRasterizer::Rasterizer::markVisible(P,\n\t\tmeans3D.contiguous().data<float>(),\n\t\tviewmatrix.contiguous().data<float>(),\n\t\tprojmatrix.contiguous().data<float>(),\n\t\tpresent.contiguous().data<bool>());\n  }\n  \n  return present;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/rasterize_points.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#pragma once\n#include <torch/extension.h>\n#include <cstdio>\n#include <tuple>\n#include <string>\n\t\nstd::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansCUDA(\n\tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n    const torch::Tensor& colors,\n    const torch::Tensor& opacity,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n\tconst torch::Tensor& projmatrix,\n\tconst float tan_fovx, \n\tconst float tan_fovy,\n    const int image_height,\n    const int image_width,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst bool prefiltered,\n\tconst bool debug);\n\nstd::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\n RasterizeGaussiansBackwardCUDA(\n \tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n\tconst torch::Tensor& radii,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n    const torch::Tensor& projmatrix,\n\tconst float tan_fovx, \n\tconst float tan_fovy,\n    const torch::Tensor& dL_dout_color,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst torch::Tensor& geomBuffer,\n\tconst int R,\n\tconst torch::Tensor& binningBuffer,\n\tconst torch::Tensor& imageBuffer,\n\tconst bool debug);\n\t\t\ntorch::Tensor markVisible(\n\t\ttorch::Tensor& means3D,\n\t\ttorch::Tensor& viewmatrix,\n\t\ttorch::Tensor& projmatrix);"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/setup.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom setuptools import setup\nfrom torch.utils.cpp_extension import CUDAExtension, BuildExtension\nimport os\nos.path.dirname(os.path.abspath(__file__))\n\nsetup(\n    name=\"diff_gaussian_rasterization\",\n    packages=['diff_gaussian_rasterization'],\n    ext_modules=[\n        CUDAExtension(\n            name=\"diff_gaussian_rasterization._C\",\n            sources=[\n            \"cuda_rasterizer/rasterizer_impl.cu\",\n            \"cuda_rasterizer/forward.cu\",\n            \"cuda_rasterizer/backward.cu\",\n            \"rasterize_points.cu\",\n            \"ext.cpp\"],\n            extra_compile_args={\"nvcc\": [\"-I\" + os.path.join(os.path.dirname(os.path.abspath(__file__)), \"third_party/glm/\")]})\n        ],\n    cmdclass={\n        'build_ext': BuildExtension\n    }\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/.appveyor.yml",
    "content": "shallow_clone: true\n\nplatform:\n  - x86\n  - x64\n\nconfiguration:\n  - Debug\n  - Release\n\nimage:\n  - Visual Studio 2013\n  - Visual Studio 2015\n  - Visual Studio 2017\n  - Visual Studio 2019\n\nenvironment:\n  matrix:\n    - GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n\nmatrix:\n    exclude:\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n    - image: Visual Studio 2013\n      configuration: Debug\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n    - image: Visual Studio 2015\n      platform: x86\n    - image: Visual Studio 2015\n      configuration: Debug\n    - image: Visual Studio 2017\n      platform: x86\n    - image: Visual Studio 2017\n      configuration: Debug\n    - image: Visual Studio 2019\n      platform: x64\n\nbranches:\n  only:\n    - master\n\nbefore_build:\n  - ps: |\n      mkdir build\n      cd build\n\n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2013\") {\n          $env:generator=\"Visual Studio 12 2013\"\n      } \n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2015\") {\n          $env:generator=\"Visual Studio 14 2015\"\n      } \n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2017\") {\n          $env:generator=\"Visual Studio 15 2017\"\n      }\n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2019\") {\n          $env:generator=\"Visual Studio 16 2019\"\n      }\n      if ($env:PLATFORM -eq \"x64\") {\n          $env:generator=\"$env:generator Win64\"\n      }\n      echo generator=\"$env:generator\"\n      cmake .. -G \"$env:generator\" -DCMAKE_INSTALL_PREFIX=\"$env:APPVEYOR_BUILD_FOLDER/install\" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON \"$env:GLM_ARGUMENTS\"\n\nbuild_script:\n  - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal\n  - cmake --build . --target install --parallel --config %CONFIGURATION% -- /m /v:minimal\n\ntest_script:\n  - ctest --parallel 4 --verbose -C %CONFIGURATION%\n  - cd ..\n  - ps: |\n      mkdir build_test_cmake\n      cd build_test_cmake\n      cmake ..\\test\\cmake\\ -G \"$env:generator\" -DCMAKE_PREFIX_PATH=\"$env:APPVEYOR_BUILD_FOLDER/install\"\n  - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal\n\ndeploy: off\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/.gitignore",
    "content": "# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libraries\n*.so\n*.dylib\n*.dll\n\n# Fortran module files\n*.mod\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n*.lib\n\n# Executables\n*.exe\n*.out\n*.app\n\n# CMake\nCMakeCache.txt\nCMakeFiles\ncmake_install.cmake\ninstall_manifest.txt\n*.cmake\n!glmConfig.cmake\n!glmConfig-version.cmake\n# ^ May need to add future .cmake files as exceptions\n\n# Test logs\nTesting/*\n\n# Test input\ntest/gtc/*.dds\n\n# Project Files\nMakefile\n*.cbp\n*.user\n\n# Misc.\n*.log\n\n# local build(s)\nbuild*\n\n/.vs\n/.vscode\n/CMakeSettings.json\n.DS_Store\n*.swp\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/.travis.yml",
    "content": "language: cpp\n\nbranches:\n  only:\n    - master\n    - stable\n\njobs:\n  include:\n    - name: \"Xcode 7.3 C++98 pure release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n\n    - name: \"Xcode 7.3 C++98 sse2 release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n\n    - name: \"Xcode 7.3 C++98 ms release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n\n    - name: \"XCode 7.3 C++11 pure release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON\"\n\n    - name: \"XCode 7.3 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n\n    - name: \"XCode 10.3 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode10.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n\n    - name: \"XCode 12.2 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++11 sse2 debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++11 avx debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++14 avx debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++14 pure debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 pure debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 sse2 debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 sse2 release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 avx release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 pure release\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 pure debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 ms debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++11 ms debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++11 pure debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 6 C++14 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-6\n      env:\n        - MATRIX_EVAL=\"CC=gcc-6 && CXX=g++-6\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 6 C++14 ms debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-6\n      env:\n        - MATRIX_EVAL=\"CC=gcc-6 && CXX=g++-6\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 7 C++17 ms debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-7\n      env:\n        - MATRIX_EVAL=\"CC=gcc-7 && CXX=g++-7\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 7 C++17 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-7\n      env:\n        - MATRIX_EVAL=\"CC=gcc-7 && CXX=g++-7\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 10 C++17 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-10\n      env:\n        - MATRIX_EVAL=\"CC=gcc-10 && CXX=g++-10\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 10 C++17 pure release\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-10\n      env:\n        - MATRIX_EVAL=\"CC=gcc-10 && CXX=g++-10\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 pure release\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 pure debug\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 sse2 debug\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 sse2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 sse2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 avx2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - 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\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 pure debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 pure release\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\nbefore_script:\n    - cmake --version\n    - eval \"${MATRIX_EVAL}\"\n\nscript:\n  - ${CC} --version\n  - mkdir ./build\n  - cd ./build\n  - cmake -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/install -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} ..\n  - cmake --build . ${CMAKE_ENV}\n  - ctest ${CTEST_ENV}\n  - cmake --build . --target install ${CMAKE_ENV}\n  - cd $TRAVIS_BUILD_DIR\n  - mkdir ./build_test_cmake\n  - cd ./build_test_cmake\n  - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/install\n  - cmake --build .\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.2 FATAL_ERROR)\ncmake_policy(VERSION 3.2)\n\n\nfile(READ \"glm/detail/setup.hpp\" GLM_SETUP_FILE)\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_MAJOR \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_MINOR[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_MINOR \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_PATCH[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_PATCH \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_REVISION \"${CMAKE_MATCH_1}\")\n\nset(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})\nproject(glm VERSION ${GLM_VERSION} LANGUAGES CXX)\nmessage(STATUS \"GLM: Version \" ${GLM_VERSION})\n\nadd_subdirectory(glm)\nadd_library(glm::glm ALIAS glm)\n\nif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})\n\n\tinclude(CPack)\n\tinstall(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN \"CMakeLists.txt\" EXCLUDE)\n\tinstall(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)\n\tinclude(CMakePackageConfigHelpers)\n\twrite_basic_package_version_file(\"glmConfigVersion.cmake\" COMPATIBILITY AnyNewerVersion)\n\tinstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)\n\n\tinclude(CTest)\n\tif(BUILD_TESTING)\n\t\tadd_subdirectory(test)\n\tendif()\n\nendif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})\n\nif (NOT TARGET uninstall)\nconfigure_file(cmake/cmake_uninstall.cmake.in\n               cmake_uninstall.cmake IMMEDIATE @ONLY)\n\nadd_custom_target(uninstall\n                  \"${CMAKE_COMMAND}\" -P\n                  \"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake\")\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/cmake/cmake_uninstall.cmake.in",
    "content": "if(NOT EXISTS \"@CMAKE_BINARY_DIR@/install_manifest.txt\")\n  message(FATAL_ERROR \"Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt\")\nendif()\n\nfile(READ \"@CMAKE_BINARY_DIR@/install_manifest.txt\" files)\nstring(REGEX REPLACE \"\\n\" \";\" files \"${files}\")\nforeach(file ${files})\n  message(STATUS \"Uninstalling $ENV{DESTDIR}${file}\")\n  if(IS_SYMLINK \"$ENV{DESTDIR}${file}\" OR EXISTS \"$ENV{DESTDIR}${file}\")\n    exec_program(\n      \"@CMAKE_COMMAND@\" ARGS \"-E remove \\\"$ENV{DESTDIR}${file}\\\"\"\n      OUTPUT_VARIABLE rm_out\n      RETURN_VALUE rm_retval\n      )\n    if(NOT \"${rm_retval}\" STREQUAL 0)\n      message(FATAL_ERROR \"Problem when removing $ENV{DESTDIR}${file}\")\n    endif()\n  else(IS_SYMLINK \"$ENV{DESTDIR}${file}\" OR EXISTS \"$ENV{DESTDIR}${file}\")\n    message(STATUS \"File $ENV{DESTDIR}${file} does not exist.\")\n  endif()\nendforeach()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/copying.txt",
    "content": "================================================================================\nOpenGL Mathematics (GLM)\n--------------------------------------------------------------------------------\nGLM is licensed under The Happy Bunny License or MIT License\n\n================================================================================\nThe Happy Bunny License (Modified MIT License)\n--------------------------------------------------------------------------------\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nRestrictions:\n By making use of the Software for military purposes, you choose to make a\n Bunny unhappy.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n================================================================================\nThe MIT License\n--------------------------------------------------------------------------------\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00001_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _features.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_features.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// #define GLM_CXX98_EXCEPTIONS</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"comment\">// #define GLM_CXX98_RTTI</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"comment\">// #define GLM_CXX11_RVALUE_REFERENCES</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"comment\">// Rvalue references - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"comment\">// GLM_CXX11_TRAILING_RETURN</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"comment\">// Rvalue references for *this - GCC not supported</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Initialization of class objects by rvalues - GCC any</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Non-static data member initializers - GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Variadic templates - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// Extending variadic template template parameters - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"comment\">// Initializer lists - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"comment\">// #define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"comment\">// Static assertions - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"comment\">// auto-typed variables - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"comment\">// Multi-declarator auto - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"comment\">// Removal of auto as a storage-class specifier - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// New function declarator syntax - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"comment\">// #define GLM_CXX11_LAMBDAS</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">// New wording for C++0x lambdas - GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DECLTYPE</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">// Declared type of an expression - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">// Right angle brackets - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">// Default template arguments for function templates    DR226   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">// Solving the SFINAE problem for expressions   DR339   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"comment\">// Template aliases     N2258   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">// Extern templates     N1987   Yes</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"comment\">// #define GLM_CXX11_NULLPTR</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">// Null pointer constant        N2431   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"comment\">// #define GLM_CXX11_STRONG_ENUMS</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"comment\">// Strongly-typed enums N2347   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"comment\">// Forward declarations for enums       N2764   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"comment\">// Generalized attributes       N2761   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"comment\">// Generalized constant expressions     N2235   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"comment\">// Alignment support    N2341   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"comment\">// Delegating constructors      N1986   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"comment\">// Inheriting constructors      N2540   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"comment\">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"comment\">// Explicit conversion operators        N2437   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"comment\">// New character types  N2249   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"comment\">// Unicode string literals      N2442   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"comment\">// Raw string literals  N2442   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"comment\">// Universal character name literals    N2170   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"comment\">// #define GLM_CXX11_USER_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"comment\">// User-defined literals                N2765   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"comment\">// Standard Layout Types        N2342   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"comment\">// Defaulted and deleted functions      N2346   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"comment\">// Extended friend declarations N1791   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"comment\">// Extending sizeof     N2253   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"comment\">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"comment\">// Inline namespaces    N2535   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"comment\">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"comment\">// Unrestricted unions  N2544   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"comment\">// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"comment\">// Local and unnamed types as template arguments        N2657   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"comment\">// #define GLM_CXX11_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"comment\">// Range-based for      N2930   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"comment\">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"comment\">// Explicit virtual overrides   N2928 N3206 N3272       GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"comment\">// Minimal support for garbage collection and reachability-based leak detection N2670   No</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"comment\">// #define GLM_CXX11_NOEXCEPT</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"comment\">// Allowing move constructors to throw [noexcept]       N3050   GCC 4.6 (core language only)</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"comment\">// Defining move special member functions       N3053   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"comment\">// Sequence points      N2239   Yes</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"comment\">// Atomic operations    N2427   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"comment\">// Strong Compare and Exchange  N2748   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"comment\">// Bidirectional Fences N2752   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"comment\">// Memory model N2429   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"comment\">// Data-dependency ordering: atomics and memory model   N2664   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"comment\">// Propagating exceptions       N2179   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"comment\">// Abandoning a process and at_quick_exit       N2440   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"comment\">// Allow atomics use in signal handlers N2547   Yes</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"comment\">// Thread-local storage N2659   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"comment\">// Dynamic initialization and destruction with concurrency      N2660   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"comment\">// __func__ predefined identifier       N2340   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"comment\">// C99 preprocessor     N1653   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"comment\">// long long    N1811   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"comment\">// Extended integral types      N1988   Yes</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">#if(GLM_COMPILER &amp; GLM_COMPILER_GCC)</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">#       define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#elif(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_exceptions))</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX98_EXCEPTIONS</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_rtti))</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX98_RTTI</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_access_control_sfinae))</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ACCESS_CONTROL_SFINAE</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_alias_templates))</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ALIAS_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_alignas))</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ALIGNAS</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_attributes))</span></div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ATTRIBUTES</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_constexpr))</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_decltype))</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DECLTYPE</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_default_function_template_args))</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_defaulted_functions))</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_delegating_constructors))</span></div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_deleted_functions))</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DELETED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_explicit_conversions))</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_generalized_initializers))</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_implicit_moves))</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_IMPLICIT_MOVES</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_inheriting_constructors))</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_inline_namespaces))</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_INLINE_NAMESPACES</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_lambdas))</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_LAMBDAS</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_local_type_template_args))</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_noexcept))</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NOEXCEPT</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_nonstatic_member_init))</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_nullptr))</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NULLPTR</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_override_control))</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_OVERRIDE_CONTROL</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_reference_qualified_functions))</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_range_for))</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_raw_string_literals))</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RAW_STRING_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_rvalue_references))</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RVALUE_REFERENCES</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_static_assert))</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_auto_type))</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_strong_enums))</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_STRONG_ENUMS</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_trailing_return))</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_TRAILING_RETURN</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_unicode_literals))</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_UNICODE_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_unrestricted_unions))</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_user_literals))</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_USER_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_variadic_templates))</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_VARIADIC_TEMPLATES</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">#endif//(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00002_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _fixes.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_fixes.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#ifdef max</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#undef max</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifdef min</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#undef min</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef isnan</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#undef isnan</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#ifdef isinf</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#undef isinf</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#ifdef log2</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#undef log2</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00003_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _noise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_noise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        GLM_FUNC_QUALIFIER T mod289(T <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                <span class=\"keywordflow\">return</span> x - <a class=\"code\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a>(x * (static_cast&lt;T&gt;(1.0) / static_cast&lt;T&gt;(289.0))) * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(289.0);</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        GLM_FUNC_QUALIFIER T permute(T <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; permute(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; permute(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; permute(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; taylorInvSqrt(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; taylorInvSqrt(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; taylorInvSqrt(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; fade(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; fade(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; fade(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"ttc\" id=\"a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d\"><div class=\"ttname\"><a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">glm::floor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00004_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _swizzle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_swizzle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;        <span class=\"comment\">// Internal class for implementing swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">int</span> N&gt;</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base0</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                GLM_FUNC_QUALIFIER T&amp; elem(<span class=\"keywordtype\">size_t</span> i){ <span class=\"keywordflow\">return</span> (reinterpret_cast&lt;T*&gt;(_buffer))[i]; }</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                GLM_FUNC_QUALIFIER T <span class=\"keyword\">const</span>&amp; elem(<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span>{ <span class=\"keywordflow\">return</span> (reinterpret_cast&lt;const T*&gt;(_buffer))[i]; }</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                <span class=\"comment\">// Use an opaque buffer to *ensure* the compiler doesn&#39;t call a constructor.</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"comment\">// The size 1 buffer is assumed to aligned to the actual members so that the</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"comment\">// elem()</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keywordtype\">char</span>    _buffer[1];</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1 : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, N&gt;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;2, T, Q, E0,E1,-1,-2, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 2&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1)); }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;3, T, Q, E0,E1,E2,-1, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 3&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1), this-&gt;elem(E2)); }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;4, T, Q, E0,E1,E2,E3, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 4&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1), this-&gt;elem(E2), this-&gt;elem(E3)); }</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"comment\">// Internal class for implementing swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"comment\">                Template parameters:</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"comment\">                T                       = type of scalar values (e.g. float, double)</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"comment\">                N                       = number of components in the vector (e.g. 3)</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"comment\">                E0...3          = what index the n-th element of this swizzle refers to in the unswizzled vec</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">                DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">                        containing duplicate elements so that they cannot be used as r-values).</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">        */</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">int</span> DUPLICATE_ELEMENTS&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base2 : <span class=\"keyword\">public</span> _swizzle_base1&lt;N, T, Q, E0,E1,E2,E3, detail::is_aligned&lt;Q&gt;::value&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"keyword\">struct </span>op_equal</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e = t; }</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                <span class=\"keyword\">struct </span>op_minus</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e -= t; }</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"keyword\">struct </span>op_plus</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e += t; }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keyword\">struct </span>op_mul</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e *= t; }</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">struct </span>op_div</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e /= t; }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (<span class=\"keyword\">const</span> T&amp; t)</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                                (*<span class=\"keyword\">this</span>)[i] = t;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        _apply_op(that, op_equal());</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator -= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                        _apply_op(that, op_minus());</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator += (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                        _apply_op(that, op_plus());</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator *= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                        _apply_op(that, op_mul());</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator /= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                        _apply_op(that, op_div());</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_QUALIFIER T&amp; operator[](<span class=\"keywordtype\">size_t</span> i)</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                GLM_FUNC_QUALIFIER T operator[](<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"keyword\">                </span>{</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> _apply_op(vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that, <span class=\"keyword\">const</span> U&amp; op)</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                        <span class=\"comment\">// Make a copy of the data in this == &amp;that.</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                        <span class=\"comment\">// The copier should optimize out the copy in cases where the function is</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                        <span class=\"comment\">// properly inlined and the copy is not necessary.</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        T t[N];</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                                t[i] = that[i];</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                                op( (*<span class=\"keyword\">this</span>)[i], t[i] );</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"comment\">// Specialization for swizzles containing duplicate elements.  These cannot be modified.</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base2&lt;N, T, Q, E0,E1,E2,E3, 1&gt; : <span class=\"keyword\">public</span> _swizzle_base1&lt;N, T, Q, E0,E1,E2,E3, detail::is_aligned&lt;Q&gt;::value&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                <span class=\"keyword\">struct </span>Stub {};</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (Stub <span class=\"keyword\">const</span>&amp;) { <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>; }</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                GLM_FUNC_QUALIFIER T operator[]  (<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"keyword\">                </span>{</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">struct </span>_swizzle : <span class=\"keyword\">public</span> _swizzle_base2&lt;N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"keyword\">typedef</span> _swizzle_base2&lt;N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)&gt; base_type;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                <span class=\"keyword\">using</span> base_type::operator=;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">operator</span> vec&lt;N, T, Q&gt; () <span class=\"keyword\">const</span> { <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)(); }</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"comment\">// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TEMPLATE1   template&lt;int N, typename T, qualifier Q, int E0, int E1, int E2, int E3&gt;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TEMPLATE2   template&lt;int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3&gt;</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TYPE1       _swizzle&lt;N, T, Q, E0, E1, E2, E3&gt;</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TYPE2       _swizzle&lt;N, T, Q, F0, F1, F2, F3&gt;</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"comment\">// Wrapper for a binary operator (e.g. u.yy + v.zy)</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b)  \\</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b();                                                     \\</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">        }                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const vec&lt;N, T, Q&gt;&amp; b)                   \\</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b;                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">        }                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const vec&lt;N, T, Q&gt;&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)                   \\</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;<span class=\"preprocessor\">                return a OPERAND b();                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"comment\">// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const T&amp; b)      \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b;                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">        }                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const T&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)      \\</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">                return a OPERAND b();                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"comment\">// Macro for wrapping a function taking one argument (e.g. abs())</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a)         \\</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a());                                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"comment\">// Macro for wrapping a function taking two vector arguments (e.g. dot()).</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b) \\</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b());                                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE1&amp; b) \\</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b());                                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const typename V&amp; b)         \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b);                                                                                \\</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)                  \\</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a, b());                                                                                \\</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"comment\">// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \\</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b, const T&amp; c)   \\</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b(), c);                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE1&amp; b, const T&amp; c)   \\</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b(), c);                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const typename S0::vec_type&amp; b, const T&amp; c)\\</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b, c);                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V&amp; a, const GLM_SWIZZLE_TYPE1&amp; b, const T&amp; c)           \\</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a, b(), c);                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        <span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;                GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"comment\">// Swizzles are distinct types from the unswizzled type.  The below macros will</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        <span class=\"comment\">// provide template specializations for the swizzle types for the given functions</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        <span class=\"comment\">// so that the compiler does not have any ambiguity to choosing how to handle</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"comment\">// the function.</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        <span class=\"comment\">// The alternative is to use the operator()() when calling the function in order</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"comment\">// to explicitly convert the swizzled type to the unswizzled type.</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 1,1,-1,-2&gt; E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,2,-1,-2&gt; E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,1,-1,-2&gt; E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,2,-1,-2&gt; E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,0,-1,-2&gt; E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,1,-1,-2&gt; E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,2,-1,-2&gt; E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,2,-1&gt; E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,2,-1&gt; E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,0,-1&gt; E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,1,-1&gt; E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,2,-1&gt; E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,2,-1&gt; E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,2,-1&gt; E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,0,-1&gt; E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,1,-1&gt; E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,2,-1&gt; E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,0,-1&gt; E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,1,-1&gt; E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,2,-1&gt; E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,0,-1&gt; E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,1,-1&gt; E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,2,-1&gt; E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,0,-1&gt; E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,1,-1&gt; E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,2,-1&gt; E2 ## E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,2&gt; E0 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,2&gt; E0 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,0&gt; E0 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,1&gt; E0 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,2&gt; E0 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,2&gt; E0 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,2&gt; E0 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,0&gt; E0 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,1&gt; E0 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,2&gt; E0 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,0&gt; E0 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,1&gt; E0 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,2&gt; E0 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,0&gt; E0 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,1&gt; E0 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,2&gt; E0 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,0&gt; E0 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,1&gt; E0 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,2&gt; E0 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,2&gt; E1 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,2&gt; E1 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,0&gt; E1 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,1&gt; E1 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,2&gt; E1 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,2&gt; E1 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,2&gt; E1 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,0&gt; E1 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,1&gt; E1 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,2&gt; E1 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,0&gt; E1 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,1&gt; E1 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,2&gt; E1 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,0&gt; E1 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,1&gt; E1 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,2&gt; E1 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,0&gt; E1 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,1&gt; E1 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,2&gt; E1 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,0&gt; E2 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,1&gt; E2 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,2&gt; E2 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,0&gt; E2 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,1&gt; E2 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,2&gt; E2 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,0&gt; E2 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,1&gt; E2 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,2&gt; E2 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,0&gt; E2 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,1&gt; E2 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,2&gt; E2 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,0&gt; E2 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,1&gt; E2 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,2&gt; E2 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,0&gt; E2 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,1&gt; E2 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,2&gt; E2 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,0&gt; E2 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,1&gt; E2 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,2&gt; E2 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,0&gt; E2 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,1&gt; E2 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,2&gt; E2 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,0&gt; E2 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,1&gt; E2 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,2&gt; E2 ## E2 ## E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,2,-1,-2&gt; E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,3,-1,-2&gt; E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,1,-1,-2&gt; E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,2,-1,-2&gt; E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,3,-1,-2&gt; E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,0,-1,-2&gt; E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,1,-1,-2&gt; E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,2,-1,-2&gt; E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,3,-1,-2&gt; E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,0,-1,-2&gt; E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,1,-1,-2&gt; E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,2,-1,-2&gt; E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,3,-1,-2&gt; E3 ## E3; };</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,2,-1&gt; E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,3,-1&gt; E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,2,-1&gt; E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,3,-1&gt; E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,0,-1&gt; E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,1,-1&gt; E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,2,-1&gt; E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,3,-1&gt; E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,0,-1&gt; E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,1,-1&gt; E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,2,-1&gt; E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,3,-1&gt; E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,2,-1&gt; E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,3,-1&gt; E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,2,-1&gt; E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,3,-1&gt; E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,0,-1&gt; E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,1,-1&gt; E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,2,-1&gt; E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,3,-1&gt; E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,0,-1&gt; E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,1,-1&gt; E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,2,-1&gt; E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,3,-1&gt; E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,0,-1&gt; E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,1,-1&gt; E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,2,-1&gt; E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,3,-1&gt; E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,0,-1&gt; E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,1,-1&gt; E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,2,-1&gt; E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,3,-1&gt; E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,0,-1&gt; E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,1,-1&gt; E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,2,-1&gt; E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,3,-1&gt; E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,0,-1&gt; E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,1,-1&gt; E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,2,-1&gt; E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,3,-1&gt; E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,0,-1&gt; E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,1,-1&gt; E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,2,-1&gt; E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,3,-1&gt; E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,0,-1&gt; E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,1,-1&gt; E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,2,-1&gt; E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,3,-1&gt; E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,0,-1&gt; E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,1,-1&gt; E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,2,-1&gt; E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,3,-1&gt; E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,0,-1&gt; E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,1,-1&gt; E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,2,-1&gt; E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,3,-1&gt; E3 ## E3 ## E3; };</span></div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,2&gt; E0 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,3&gt; E0 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,2&gt; E0 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,3&gt; E0 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,0&gt; E0 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,1&gt; E0 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,2&gt; E0 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,3&gt; E0 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,0&gt; E0 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,1&gt; E0 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,2&gt; E0 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,3&gt; E0 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,2&gt; E0 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,3&gt; E0 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,2&gt; E0 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,3&gt; E0 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,0&gt; E0 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,1&gt; E0 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,2&gt; E0 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,3&gt; E0 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,0&gt; E0 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,1&gt; E0 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,2&gt; E0 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,3&gt; E0 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,0&gt; E0 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,1&gt; E0 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,2&gt; E0 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,3&gt; E0 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,0&gt; E0 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,1&gt; E0 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,2&gt; E0 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,3&gt; E0 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,0&gt; E0 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,1&gt; E0 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,2&gt; E0 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,3&gt; E0 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,0&gt; E0 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,1&gt; E0 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,2&gt; E0 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,3&gt; E0 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,0&gt; E0 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,1&gt; E0 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,2&gt; E0 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,3&gt; E0 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,0&gt; E0 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,1&gt; E0 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,2&gt; E0 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,3&gt; E0 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,0&gt; E0 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,1&gt; E0 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,2&gt; E0 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,3&gt; E0 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,0&gt; E0 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,1&gt; E0 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,2&gt; E0 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,3&gt; E0 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,2&gt; E1 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,3&gt; E1 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,2&gt; E1 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,3&gt; E1 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,0&gt; E1 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,1&gt; E1 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,2&gt; E1 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,3&gt; E1 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,0&gt; E1 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,1&gt; E1 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,2&gt; E1 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,3&gt; E1 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,2&gt; E1 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,3&gt; E1 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,2&gt; E1 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,3&gt; E1 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,0&gt; E1 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,1&gt; E1 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,2&gt; E1 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,3&gt; E1 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,0&gt; E1 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,1&gt; E1 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,2&gt; E1 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,3&gt; E1 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,0&gt; E1 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,1&gt; E1 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,2&gt; E1 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,3&gt; E1 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,0&gt; E1 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,1&gt; E1 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,2&gt; E1 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,3&gt; E1 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,0&gt; E1 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,1&gt; E1 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,2&gt; E1 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,3&gt; E1 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,0&gt; E1 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,1&gt; E1 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,2&gt; E1 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,3&gt; E1 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,0&gt; E1 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,1&gt; E1 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,2&gt; E1 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,3&gt; E1 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,0&gt; E1 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,1&gt; E1 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,2&gt; E1 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,3&gt; E1 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,0&gt; E1 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,1&gt; E1 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,2&gt; E1 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,3&gt; E1 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,0&gt; E1 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,1&gt; E1 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,2&gt; E1 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,3&gt; E1 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,0&gt; E2 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,1&gt; E2 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,2&gt; E2 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,3&gt; E2 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,0&gt; E2 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,1&gt; E2 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,2&gt; E2 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,3&gt; E2 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,0&gt; E2 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,1&gt; E2 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,2&gt; E2 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,3&gt; E2 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,0&gt; E2 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,1&gt; E2 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,2&gt; E2 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,3&gt; E2 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,0&gt; E2 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,1&gt; E2 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,2&gt; E2 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,3&gt; E2 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,0&gt; E2 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,1&gt; E2 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,2&gt; E2 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,3&gt; E2 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,0&gt; E2 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,1&gt; E2 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,2&gt; E2 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,3&gt; E2 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,0&gt; E2 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,1&gt; E2 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,2&gt; E2 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,3&gt; E2 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,0&gt; E2 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,1&gt; E2 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,2&gt; E2 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,3&gt; E2 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,0&gt; E2 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,1&gt; E2 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,2&gt; E2 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,3&gt; E2 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,0&gt; E2 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,1&gt; E2 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,2&gt; E2 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,3&gt; E2 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,0&gt; E2 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,1&gt; E2 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,2&gt; E2 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,3&gt; E2 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,0&gt; E2 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,1&gt; E2 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,2&gt; E2 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,3&gt; E2 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,0&gt; E2 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,1&gt; E2 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,2&gt; E2 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,3&gt; E2 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,0&gt; E2 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,1&gt; E2 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,2&gt; E2 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,3&gt; E2 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,0&gt; E2 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,1&gt; E2 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,2&gt; E2 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,3&gt; E2 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,0&gt; E3 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,1&gt; E3 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,2&gt; E3 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,3&gt; E3 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,0&gt; E3 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,1&gt; E3 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,2&gt; E3 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,3&gt; E3 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,0&gt; E3 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,1&gt; E3 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,2&gt; E3 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,3&gt; E3 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,0&gt; E3 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,1&gt; E3 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,2&gt; E3 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,3&gt; E3 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,0&gt; E3 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,1&gt; E3 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,2&gt; E3 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,3&gt; E3 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,0&gt; E3 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,1&gt; E3 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,2&gt; E3 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,3&gt; E3 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,0&gt; E3 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,1&gt; E3 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,2&gt; E3 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,3&gt; E3 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,0&gt; E3 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,1&gt; E3 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,2&gt; E3 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,3&gt; E3 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,0&gt; E3 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,1&gt; E3 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,2&gt; E3 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,3&gt; E3 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,0&gt; E3 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,1&gt; E3 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,2&gt; E3 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,3&gt; E3 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,0&gt; E3 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,1&gt; E3 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,2&gt; E3 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,3&gt; E3 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,0&gt; E3 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,1&gt; E3 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,2&gt; E3 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,3&gt; E3 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,0&gt; E3 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,1&gt; E3 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,2&gt; E3 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,3&gt; E3 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,0&gt; E3 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,1&gt; E3 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,2&gt; E3 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,3&gt; E3 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,0&gt; E3 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,1&gt; E3 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,2&gt; E3 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,3&gt; E3 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,0&gt; E3 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,1&gt; E3 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,2&gt; E3 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,3&gt; E3 ## E3 ## E3 ## E3; };</span></div>\n<div class=\"ttc\" id=\"a00290_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><div class=\"ttname\"><a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">glm::e</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class=\"ttdoc\">Return e constant. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00005_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _swizzle_func.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_swizzle_func.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B)   \\</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">        vec&lt;2, T, Q&gt; A ## B() CONST                                                     \\</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">        {                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">                return vec&lt;2, T, Q&gt;(this-&gt;A, this-&gt;B);                  \\</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C)                \\</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">        vec&lt;3, T, Q&gt; A ## B ## C() CONST                                                        \\</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">        {                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">                return vec&lt;3, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C);                 \\</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D)                                     \\</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">        vec&lt;4, T, Q&gt; A ## B ## C ## D() CONST                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">                return vec&lt;4, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C, this-&gt;D);                        \\</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B)    \\</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                            \\</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">        vec&lt;L, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B() CONST                                       \\</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">        {                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">                return vec&lt;2, T, Q&gt;(this-&gt;A, this-&gt;B);                                  \\</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C)         \\</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">        vec&lt;3, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B ## C() CONST                                  \\</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">        {                                                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">                return vec&lt;3, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C);                         \\</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D)              \\</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                                            \\</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">        vec&lt;4, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B ## C ## D() CONST                                     \\</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">                return vec&lt;4, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C, this-&gt;D);                \\</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#define GLM_MUTABLE</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \\</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \\</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \\</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \\</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \\</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \\</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P)                     \\</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y)  \\</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g)  \\</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \\</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \\</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)</span></div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \\</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \\</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00006_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _vectorize.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_vectorize.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;        <span class=\"keyword\">struct </span>functor1{};</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 1, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;1, R, Q&gt; call(R (*Func) (T x), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, R, Q&gt;(Func(v.x));</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 2, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;2, R, Q&gt; call(R (*Func) (T x), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, R, Q&gt;(Func(v.x), Func(v.y));</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 3, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;3, R, Q&gt; call(R (*Func) (T x), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z));</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 4, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;4, R, Q&gt; call(R (*Func) (T x), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z), Func(v.w));</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">struct </span>functor2{};</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b.x));</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca{};</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b));</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b), Func(a.y, b));</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b));</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int {};</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;1, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, int, Q&gt;(Func(a.x, b.x));</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;2, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;3, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;4, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00007.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: associated_min_max.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">associated_min_max.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00007_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">associatedMax</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)</td></tr>\n<tr class=\"memdesc:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">associatedMin</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:gacc01bd272359572fc28437ae214a02df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc01bd272359572fc28437ae214a02df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacfec519c820331d023ef53a511749319\">associatedMin</a> (T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)</td></tr>\n<tr class=\"memdesc:gacfec519c820331d023ef53a511749319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacfec519c820331d023ef53a511749319\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfec519c820331d023ef53a511749319\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">associatedMin</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00007_source.html\">associated_min_max.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00007_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: associated_min_max.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">associated_min_max.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00007.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_associated_min_max extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(T x, U a, T y, U b);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                T x, <span class=\"keyword\">const</span> vec&lt;L, U, Q&gt;&amp; a,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T y, <span class=\"keyword\">const</span> vec&lt;L, U, Q&gt;&amp; b);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                T z, U c);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                T z, U c,</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                T w, U d);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                T w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c,</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, U d);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(T x, U a, T y, U b);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                T z, U c);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                T z, U c,</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                T w, U d);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                T w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c,</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, U d);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">#include &quot;associated_min_max.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00308_html_gab9c3dd74cac899d2c625b5767ea3b3fb\"><div class=\"ttname\"><a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">glm::associatedMax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class=\"ttdoc\">Maximum comparison between 4 variables and returns 4 associated variable values. </div></div>\n<div class=\"ttc\" id=\"a00308_html_ga2db7e351994baee78540a562d4bb6d3b\"><div class=\"ttname\"><a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">glm::associatedMin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class=\"ttdoc\">Minimum comparison between 4 variables and returns 4 associated variable values. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00008.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bit.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">bit.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00008_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05\">highestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the highest bit set to 1 in a integer variable and return its value.  <a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">powerOfTwoAbove</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">powerOfTwoBelow</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">powerOfTwoNearest</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00008_source.html\">bit.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00008_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bit.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">bit.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00008.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/bitfield.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_bit extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#include &quot;bit.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"ttc\" id=\"a00309_html_ga898ef075ccf809a1e480faab48fe96bf\"><div class=\"ttname\"><a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">glm::highestBitValue</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Find the highest bit set to 1 in a integer variable and return its value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_gaf78ddcc4152c051b2a21e68fecb10980\"><div class=\"ttname\"><a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">glm::powerOfTwoBelow</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_ga2bbded187c5febfefc1e524ba31b3fab\"><div class=\"ttname\"><a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">glm::powerOfTwoAbove</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_gac87e65d11e16c3d6b91c3bcfaef7da0b\"><div class=\"ttname\"><a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">glm::powerOfTwoNearest</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is the closet to the input value. </div></div>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00009.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bitfield.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">bitfield.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00009_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x)</td></tr>\n<tr class=\"memdesc:ga091d934233a2e121df91b8c7230357c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x)</td></tr>\n<tr class=\"memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x)</td></tr>\n<tr class=\"memdesc:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>\n<tr class=\"memdesc:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>\n<tr class=\"memdesc:ga9a4976a529aec2cee56525e1165da484\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">bitfieldInterleave</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>\n<tr class=\"memdesc:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>\n<tr class=\"memdesc:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">bitfieldInterleave</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>\n<tr class=\"memdesc:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>\n<tr class=\"memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">bitfieldInterleave</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>\n<tr class=\"memdesc:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>\n<tr class=\"memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>\n<tr class=\"memdesc:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>\n<tr class=\"memdesc:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>\n<tr class=\"memdesc:gad2075d96a6640121edaa98ea534102ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>\n<tr class=\"memdesc:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">More...</a><br /></td></tr>\n<tr class=\"separator:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>\n<tr class=\"memdesc:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>\n<tr class=\"memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>\n<tr class=\"memdesc:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafca8768671a14c8016facccb66a89f26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>\n<tr class=\"memdesc:gafca8768671a14c8016facccb66a89f26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">More...</a><br /></td></tr>\n<tr class=\"separator:gafca8768671a14c8016facccb66a89f26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:gae186317091b1a39214ebf79008d44a1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">mask</a> (genIUType Bits)</td></tr>\n<tr class=\"memdesc:gad7eba518a0b71662114571ee76939f8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> </p>\n<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>\n<dd>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00009_source.html\">bitfield.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00009_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bitfield.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">bitfield.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00009.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_bitfield extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a>(genIUType Bits);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a>(genIUType In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a>(genIUType In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a>(genIUType Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a>(genIUType Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL int16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int32 x, int32 y);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint32 x, uint32 y);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y, int8 z);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y, int16 z);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int32 x, int32 y, int32 z);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint32 x, uint32 y, uint32 z);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y, int8 z, int8 w);</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z, uint8 w);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y, int16 z, int16 w);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z, uint16 w);</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#include &quot;bitfield.inl&quot;</span></div>\n<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>\n<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>\n<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>\n<div class=\"ttc\" id=\"a00288_html_ga0d16c9acef4be79ea9b47c082a0cf7c2\"><div class=\"ttname\"><a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">glm::bitfieldFillZero</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class=\"ttdoc\">Set to 0 a range of bits. </div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_gae186317091b1a39214ebf79008d44a1e\"><div class=\"ttname\"><a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">glm::bitfieldRotateLeft</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class=\"ttdoc\">Rotate all bits to the left. </div></div>\n<div class=\"ttc\" id=\"a00288_html_ga2e64e3b922a296033b825311e7f5fff1\"><div class=\"ttname\"><a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">glm::mask</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mask(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a mask of &#39;count&#39; bits. </div></div>\n<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>\n<div class=\"ttc\" id=\"a00288_html_ga3e96dd1f0a4bc892f063251ed118c0c1\"><div class=\"ttname\"><a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">glm::bitfieldFillOne</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class=\"ttdoc\">Set to 1 a range of bits. </div></div>\n<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>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><div class=\"ttname\"><a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">glm::bitfieldRotateRight</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class=\"ttdoc\">Rotate all bits to the right. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00010.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: closest_point.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">closest_point.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00010_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">closestPointOnLine</a> (vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga36529c278ef716986151d58d151d697d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the point on a straight line which is the closet of a point.  <a href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36529c278ef716986151d58d151d697d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a> (vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2d lines work as well <br /></td></tr>\n<tr class=\"separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00010_source.html\">closest_point.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00010_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: closest_point.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">closest_point.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00010.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; point,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; point,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;closest_point.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00310_html_ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><div class=\"ttname\"><a href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">glm::closestPointOnLine</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt; closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</div><div class=\"ttdoc\">2d lines work as well </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00011.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_encoding.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">color_encoding.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00011_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad12f4f65022b2c80e33fcba2ced0dc48\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5265386fc3ac29e4c580d37ed470859c\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to linear sRGB. <br /></td></tr>\n<tr class=\"separator:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1522ba180e3d83d554a734056da031f9\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:ga1522ba180e3d83d554a734056da031f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf9e130d9d4ccf51cc99317de7449f369\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D65 YUV. <br /></td></tr>\n<tr class=\"separator:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> </p>\n<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>\n<dd>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00011_source.html\">color_encoding.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00011_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_encoding.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">color_encoding.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00011.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTC_color_encoding extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinearSRGB);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinearSRGB);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorD65XYZ);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorD65XYZ);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;color_encoding.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00311_html_ga5265386fc3ac29e4c580d37ed470859c\"><div class=\"ttname\"><a href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">glm::convertD65XYZToLinearSRGB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToLinearSRGB(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class=\"ttdoc\">Convert a D65 YUV color to linear sRGB. </div></div>\n<div class=\"ttc\" id=\"a00311_html_ga1522ba180e3d83d554a734056da031f9\"><div class=\"ttname\"><a href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">glm::convertLinearSRGBToD50XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class=\"ttdoc\">Convert a linear sRGB color to D50 YUV. </div></div>\n<div class=\"ttc\" id=\"a00311_html_gaf9e130d9d4ccf51cc99317de7449f369\"><div class=\"ttname\"><a href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">glm::convertLinearSRGBToD65XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD65XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class=\"ttdoc\">Convert a linear sRGB color to D65 YUV. </div></div>\n<div class=\"ttc\" id=\"a00311_html_gad12f4f65022b2c80e33fcba2ced0dc48\"><div class=\"ttname\"><a href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">glm::convertD65XYZToD50XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class=\"ttdoc\">Convert a D65 YUV color to D50 YUV. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00012.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/color_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00012_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear)</td></tr>\n<tr class=\"memdesc:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a standard gamma correction.  <a href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</td></tr>\n<tr class=\"memdesc:gaace0a21167d13d26116c283009af57f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a custom gamma correction.  <a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace0a21167d13d26116c283009af57f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB)</td></tr>\n<tr class=\"memdesc:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a standard gamma correction.  <a href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad1b91f27a9726c9cb403f9fee6e2e200\"></a>\ntemplate&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</td></tr>\n<tr class=\"memdesc:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>\n<tr class=\"separator:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> </p>\n<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>\n<dd>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00012_source.html\">gtc/color_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00012_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/color_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00012.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_color_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinear);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinear, T Gamma);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorSRGB);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"comment\">// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorSRGB, T Gamma);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#include &quot;color_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00289_html_gaace0a21167d13d26116c283009af57f6\"><div class=\"ttname\"><a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">glm::convertLinearToSRGB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</div><div class=\"ttdoc\">Convert a linear color to sRGB color using a custom gamma correction. </div></div>\n<div class=\"ttc\" id=\"a00289_html_gad1b91f27a9726c9cb403f9fee6e2e200\"><div class=\"ttname\"><a href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">glm::convertSRGBToLinear</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</div><div class=\"ttdoc\">Convert a sRGB color to linear color using a custom gamma correction. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00013.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/color_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00013_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a> (vec&lt; 3, T, Q &gt; const &amp;rgbValue)</td></tr>\n<tr class=\"memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from RGB color space to its color in HSV color space.  <a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a> (vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.  <a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">More...</a><br /></td></tr>\n<tr class=\"separator:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a> (vec&lt; 3, T, Q &gt; const &amp;hsvValue)</td></tr>\n<tr class=\"memdesc:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from HSV color space to its color in RGB color space.  <a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">saturation</a> (T const s)</td></tr>\n<tr class=\"memdesc:ga01a97152b44e1550edcac60bd849e884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a saturation matrix.  <a href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">saturation</a> (T const s, vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a> (T const s, vec&lt; 4, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00013_source.html\">gtx/color_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00013_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/color_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00013.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; hsvValue);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgbValue);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                T <span class=\"keyword\">const</span> s);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                T <span class=\"keyword\">const</span> s,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span> s,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#include &quot;color_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00312_html_gad028e0a4f1a9c812b39439b746295b34\"><div class=\"ttname\"><a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">glm::luminosity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T luminosity(vec&lt; 3, T, Q &gt; const &amp;color)</div><div class=\"ttdoc\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>\n<div class=\"ttc\" id=\"a00312_html_gaba0eacee0736dae860e9371cc1ae4785\"><div class=\"ttname\"><a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">glm::saturation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)</div><div class=\"ttdoc\">Modify the saturation of a color. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga5f9193be46f45f0655c05a0cdca006db\"><div class=\"ttname\"><a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">glm::rgbColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class=\"ttdoc\">Converts a color from HSV color space to its color in RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga789802bec2d4fe0f9741c731b4a8a7d8\"><div class=\"ttname\"><a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">glm::hsvColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; hsvColor(vec&lt; 3, T, Q &gt; const &amp;rgbValue)</div><div class=\"ttdoc\">Converts a color from RGB color space to its color in HSV color space. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00014.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space_YCoCg.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">color_space_YCoCg.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00014_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCg color space.  <a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCgR color space.  <a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:ga163596b804c7241810b2534a99eb1343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCg color space to RGB color space.  <a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">More...</a><br /></td></tr>\n<tr class=\"separator:ga163596b804c7241810b2534a99eb1343\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:gaf8d30574c8576838097d8e20c295384a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCgR color space to RGB color space.  <a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00014_source.html\">color_space_YCoCg.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00014_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space_YCoCg.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">color_space_YCoCg.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00014.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; YCoCgColor);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; YCoCgColor);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;color_space_YCoCg.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00313_html_gaf8d30574c8576838097d8e20c295384a\"><div class=\"ttname\"><a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">glm::YCoCgR2rgb</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCgR2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class=\"ttdoc\">Convert a color from YCoCgR color space to RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga163596b804c7241810b2534a99eb1343\"><div class=\"ttname\"><a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">glm::YCoCg2rgb</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCg2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class=\"ttdoc\">Convert a color from YCoCg color space to RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga5f9193be46f45f0655c05a0cdca006db\"><div class=\"ttname\"><a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">glm::rgbColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class=\"ttdoc\">Converts a color from HSV color space to its color in RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga0606353ec2a9b9eaa84f1b02ec391bc5\"><div class=\"ttname\"><a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">glm::rgb2YCoCg</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCg(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class=\"ttdoc\">Convert a color from RGB color space to YCoCg color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga0389772e44ca0fd2ba4a79bdd8efe898\"><div class=\"ttname\"><a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">glm::rgb2YCoCgR</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCgR(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class=\"ttdoc\">Convert a color from RGB color space to YCoCgR color space. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00015.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00015_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">abs</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is greater than or equal to x.  <a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga7cd77683da6361e297c56443fc70806d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:gafba2e0674deb5953878d89483cd6323d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">floatBitsToInt</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">floatBitsToUint</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is less then or equal to x.  <a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a> (genType const &amp;a, genType const &amp;b, genType const &amp;c)</td></tr>\n<tr class=\"memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes and returns a * b + c.  <a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">fract</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2df623004f634b440d61e018d62c751b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df623004f634b440d61e018d62c751b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a> (genType x, int &amp;exp)</td></tr>\n<tr class=\"memdesc:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)  <a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">intBitsToFloat</a> (int const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a> (vec&lt; L, int, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2885587c23a106301f20443896365b62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885587c23a106301f20443896365b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga29ef934c00306490de837b4746b4e14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a> (genType const &amp;x, int const &amp;exp)</td></tr>\n<tr class=\"memdesc:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)  <a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">max</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac1fec0c3303b572a6d4697a637213870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">min</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>\n<tr class=\"memdesc:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.  <a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a> (genType x, genType &amp;i)</td></tr>\n<tr class=\"memdesc:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).  <a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga76b81785045a057989a84d99aeeb1578\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">More...</a><br /></td></tr>\n<tr class=\"separator:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.  <a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>\n<tr class=\"memdesc:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1.  <a href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">step</a> (genType edge, genType x)</td></tr>\n<tr class=\"memdesc:ga015a1261ff23e12650211aa872863cce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.  <a href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">More...</a><br /></td></tr>\n<tr class=\"separator:ga015a1261ff23e12650211aa872863cce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">step</a> (T edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a> (vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.  <a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">uintBitsToFloat</a> (uint const &amp;v)</td></tr>\n<tr class=\"memdesc:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a> (vec&lt; L, uint, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00015_source.html\">common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00015_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00015.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a>(genType x, genType&amp; i);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(genType x, genType minVal, genType maxVal);</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T minVal, T maxVal);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; minVal, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; maxVal);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genTypeT, <span class=\"keyword\">typename</span> genTypeU&gt;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        GLM_FUNC_DECL genTypeT <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U a);</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(genType edge, genType x);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(T edge, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(genType edge0, genType edge1, genType x);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(T edge0, T edge1, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge1, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a>(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a>(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a>(<span class=\"keywordtype\">int</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a>(vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a>(uint <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a>(vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; b, genType <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a>(genType x, <span class=\"keywordtype\">int</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, int, Q&gt;&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a>(genType <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_common.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"ttc\" id=\"a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d\"><div class=\"ttname\"><a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">glm::floor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gad0f444d4b81cc53c3b6edf5aa25078c2\"><div class=\"ttname\"><a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">glm::fma</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fma(genType const &amp;a, genType const &amp;b, genType const &amp;c)</div><div class=\"ttdoc\">Computes and returns a * b + c. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaf9375e3e06173271d49e6ffa3a334259\"><div class=\"ttname\"><a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">glm::trunc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; trunc(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga9b197a452cd52db3c5c18bac72bd7798\"><div class=\"ttname\"><a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">glm::mod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Modulus. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><div class=\"ttname\"><a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</div><div class=\"ttdoc\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>\n<div class=\"ttc\" id=\"a00241_html_gafa03aca8c4713e1cc892aa92ca135a7e\"><div class=\"ttname\"><a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">glm::round</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; round(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga97f46b5f7b42fe44482e13356eb394ae\"><div class=\"ttname\"><a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">glm::uintBitsToFloat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga1e2e5cfff800056540e32f6c9b604b28\"><div class=\"ttname\"><a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">glm::sign</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sign(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga2885587c23a106301f20443896365b62\"><div class=\"ttname\"><a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">glm::isinf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isinf(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga76b81785045a057989a84d99aeeb1578\"><div class=\"ttname\"><a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">glm::roundEven</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundEven(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga85e33f139b8db1b39b590a5713b9e679\"><div class=\"ttname\"><a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">glm::modf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType modf(genType x, genType &amp;i)</div><div class=\"ttdoc\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>\n<div class=\"ttc\" id=\"a00241_html_gafb9d2a645a23aca12d4d6de0104b7657\"><div class=\"ttname\"><a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">glm::ceil</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceil(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga31f49ef9e7d1beb003160c5e009b0c48\"><div class=\"ttname\"><a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><div class=\"ttname\"><a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">glm::intBitsToFloat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga29ef934c00306490de837b4746b4e14d\"><div class=\"ttname\"><a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">glm::isnan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isnan(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...</div></div>\n<div class=\"ttc\" id=\"a00242_html_ga071566cadc7505455e611f2a0353f4d4\"><div class=\"ttname\"><a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural exponentiation of x, i.e., e^x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga49418ba4c8a60fbbb5d57b705f3e26db\"><div class=\"ttname\"><a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">glm::floatBitsToUint</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>\n<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>\n<div class=\"ttc\" id=\"a00241_html_ga81d3abddd0ef0c8de579bc541ecadab6\"><div class=\"ttname\"><a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">glm::abs</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; abs(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns x if x >= 0; otherwise, it returns -x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gac1fec0c3303b572a6d4697a637213870\"><div class=\"ttname\"><a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><div class=\"ttname\"><a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">glm::step</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga2df623004f634b440d61e018d62c751b\"><div class=\"ttname\"><a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">glm::fract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fract(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Return x - floor(x). </div></div>\n<div class=\"ttc\" id=\"a00241_html_gac3010e0a0c35a1b514540f2fb579c58c\"><div class=\"ttname\"><a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">glm::ldexp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType ldexp(genType const &amp;x, int const &amp;exp)</div><div class=\"ttdoc\">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga99f7d62f78ac5ea3b49bae715c9488ed\"><div class=\"ttname\"><a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">glm::floatBitsToInt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a signed integer value representing the encoding of a floating-point value. </div></div>\n<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>\n<div class=\"ttc\" id=\"a00241_html_gaddf5ef73283c171730e0bcc11833fa81\"><div class=\"ttname\"><a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">glm::frexp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType frexp(genType x, int &amp;exp)</div><div class=\"ttdoc\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00016.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00016_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae5e80425df9833164ad469e83b475fb4\"><td class=\"mdescLeft\">&#160;</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>\n<tr class=\"separator:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::bool_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"mdescLeft\">&#160;</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>\n<tr class=\"separator:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00016_source.html\">gtx/common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00016_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00016.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::bool_type <a class=\"code\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00314_html_gae5e80425df9833164ad469e83b475fb4\"><div class=\"ttname\"><a href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">glm::fmod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmod(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Similar to &#39;mod&#39; but with a different rounding and integer support. </div></div>\n<div class=\"ttc\" id=\"a00314_html_gafd303042ba2ba695bf53b2315f53f93f\"><div class=\"ttname\"><a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">glm::openBounded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; openBounded(vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Returns whether vector components values are within an interval. </div></div>\n<div class=\"ttc\" id=\"a00314_html_ga74aa7c7462245d83bd5a9edf9c6c2d91\"><div class=\"ttname\"><a href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">glm::isdenormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::bool_type isdenormal(genType const &amp;x)</div><div class=\"ttdoc\">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represente...</div></div>\n<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>\n<div class=\"ttc\" id=\"a00314_html_gab7d89c14c48ad01f720fb5daf8813161\"><div class=\"ttname\"><a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">glm::closeBounded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; closeBounded(vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Returns whether vector components values are within an interval. </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00017.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compatibility.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">compatibility.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00017_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaddcd7aa2e30e61af5b38660613d3979e\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a></td></tr>\n<tr class=\"memdesc:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f895c936f0c29c8729afbbf22806090\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a></td></tr>\n<tr class=\"memdesc:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa09ab65ec9c3c54305ff502e2b1fe6d9\"></a>\ntypedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a></td></tr>\n<tr class=\"memdesc:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb3703955e513632f98ba12fe051ba3e\"></a>\ntypedef mat&lt; 2, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a></td></tr>\n<tr class=\"memdesc:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ae6ee155d0f90cb1ae5b6c4546738a0\"></a>\ntypedef mat&lt; 2, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a></td></tr>\n<tr class=\"memdesc:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d7fa65be8e8e4ad6d920b45c44e471f\"></a>\ntypedef mat&lt; 2, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a></td></tr>\n<tr class=\"memdesc:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99629f818737f342204071ef8296b2ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99629f818737f342204071ef8296b2ed\"></a>\ntypedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a></td></tr>\n<tr class=\"memdesc:ga99629f818737f342204071ef8296b2ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga99629f818737f342204071ef8296b2ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac7d7311f7e0fa8b6163d96dab033a755\"></a>\ntypedef mat&lt; 3, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a></td></tr>\n<tr class=\"memdesc:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c97b99aac3e302053ffb58aace9033c\"></a>\ntypedef mat&lt; 3, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a></td></tr>\n<tr class=\"memdesc:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae7d6b679463d37d6c527d478fb470fdf\"></a>\ntypedef mat&lt; 3, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a></td></tr>\n<tr class=\"memdesc:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13c3200b82708f73faac6d7f09ec91a3\"></a>\ntypedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a></td></tr>\n<tr class=\"memdesc:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ed830f52408b2f83c085063a3eaf1d0\"></a>\ntypedef mat&lt; 4, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a></td></tr>\n<tr class=\"memdesc:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad0f5dc7f22c2065b1b06d57f1c0658fe\"></a>\ntypedef mat&lt; 4, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a></td></tr>\n<tr class=\"memdesc:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7d2a7d13986602ae2896bfaa394235d4\"></a>\ntypedef mat&lt; 4, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a></td></tr>\n<tr class=\"memdesc:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20b861a9b6e2a300323671c57a02525b\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a></td></tr>\n<tr class=\"memdesc:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45f16a4dd0db1f199afaed9fd12fe9a8\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a></td></tr>\n<tr class=\"memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31b729b04facccda73f07ed26958b3c2\"></a>\ntypedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a></td></tr>\n<tr class=\"memdesc:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae57d0201096834d25f2b91b319e7cdbd\"></a>\ntypedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a></td></tr>\n<tr class=\"memdesc:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3655bc324008553ca61f39952d0b2d08\"></a>\ntypedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a></td></tr>\n<tr class=\"memdesc:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacd33061fc64a7b2dcfd7322c49d9557a\"></a>\ntypedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a></td></tr>\n<tr class=\"memdesc:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3d8b9028a1053a44a98902cd1c389472\"></a>\ntypedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a></td></tr>\n<tr class=\"memdesc:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ec08fc39c9d783dfcc488be240fe975\"></a>\ntypedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a></td></tr>\n<tr class=\"memdesc:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4bad5bb20c6ddaecfe4006c93841d180\"></a>\ntypedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a></td></tr>\n<tr class=\"memdesc:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ef022e453d663d70aec414b2a80f756\"></a>\ntypedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a></td></tr>\n<tr class=\"memdesc:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf92f58af24f35617518aeb3d4f63fda6\"></a>\ntypedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a></td></tr>\n<tr class=\"memdesc:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabca29ccceea53669618b751aae0ba83d\"></a>\ntypedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a></td></tr>\n<tr class=\"memdesc:gabca29ccceea53669618b751aae0ba83d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafad66a02ccd360c86d6ab9ff9cfbc19c\"></a>\ntypedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a></td></tr>\n<tr class=\"memdesc:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab541bed2e788e4537852a2492860806\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaab541bed2e788e4537852a2492860806\"></a>\ntypedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a></td></tr>\n<tr class=\"memdesc:gaab541bed2e788e4537852a2492860806\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaab541bed2e788e4537852a2492860806\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf5208d01f6c6fbcb7bb55d610b9c0ead\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a></td></tr>\n<tr class=\"memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73720b8dc4620835b17f74d428f98c0c\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a></td></tr>\n<tr class=\"memdesc:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02d3c013982c183906c61d74aa3166ce\"></a>\ntypedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a></td></tr>\n<tr class=\"memdesc:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga33d43ecbb60a85a1366ff83f8a0ec85f\"></a>\ntypedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a></td></tr>\n<tr class=\"memdesc:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga939b0cff15cee3030f75c1b2e36f89fe\"></a>\ntypedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a></td></tr>\n<tr class=\"memdesc:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafec3cfd901ab334a92e0242b8f2269b4\"></a>\ntypedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a></td></tr>\n<tr class=\"memdesc:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga821ff110fc8533a053cbfcc93e078cc0\"></a>\ntypedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a></td></tr>\n<tr class=\"memdesc:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa6c69f04ba95f3faedf95dae874de576\"></a>\ntypedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a></td></tr>\n<tr class=\"memdesc:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6ceb5d38a58becdf420026e12a6562f3\"></a>\ntypedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a></td></tr>\n<tr class=\"memdesc:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d2679c321b793ca3784fe0315bb5332\"></a>\ntypedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a></td></tr>\n<tr class=\"memdesc:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae2da7345087db3815a25d8837a727ef1\"></a>\ntypedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a></td></tr>\n<tr class=\"memdesc:gae2da7345087db3815a25d8837a727ef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga308b9af0c221145bcfe9bfc129d9098e\"></a>\ntypedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a></td></tr>\n<tr class=\"memdesc:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac0a51b4812038aa81d73ffcc37f741ac\"></a>\ntypedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a></td></tr>\n<tr class=\"memdesc:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad3051649b3715d828a4ab92cdae7c3bf\"></a>\ntypedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a></td></tr>\n<tr class=\"memdesc:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0670a2111b5e4a6410bd027fa0232fc3\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a></td></tr>\n<tr class=\"memdesc:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga056ffe02d3a45af626f8e62221881c7a\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a></td></tr>\n<tr class=\"memdesc:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafe3a8fd56354caafe24bfe1b1e3ad22a\"></a>\ntypedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a></td></tr>\n<tr class=\"memdesc:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4e5ce477c15836b21e3c42daac68554d\"></a>\ntypedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a></td></tr>\n<tr class=\"memdesc:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga197ded5ad8354f6b6fb91189d7a269b3\"></a>\ntypedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a></td></tr>\n<tr class=\"memdesc:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2749d59a7fddbac44f34ba78e57ef807\"></a>\ntypedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a></td></tr>\n<tr class=\"memdesc:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga909c38a425f215a50c847145d7da09f0\"></a>\ntypedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a></td></tr>\n<tr class=\"memdesc:ga909c38a425f215a50c847145d7da09f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa4cbe16a92cf3664376c7a2fc5126aa8\"></a>\ntypedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a></td></tr>\n<tr class=\"memdesc:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga15c9649286f0bf431bdf9b3509580048\"></a>\ntypedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a></td></tr>\n<tr class=\"memdesc:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaacac46ddc7d15d0f9529d05c92946a0f\"></a>\ntypedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a></td></tr>\n<tr class=\"memdesc:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaecdef18c819c205aeee9f94dc93de56a\"></a>\ntypedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a></td></tr>\n<tr class=\"memdesc:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga97a39dd9bc7d572810d80b8467cbffa1\"></a>\ntypedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a></td></tr>\n<tr class=\"memdesc:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4a2c53f14aeec9a17c2b81142b7e82d\"></a>\ntypedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a></td></tr>\n<tr class=\"memdesc:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04dee1552424198b8f58b377c2ee00d8\"></a>\ntypedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a></td></tr>\n<tr class=\"memdesc:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac63011205bf6d0be82589dc56dd26708\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">atan2</a> (T x, T y)</td></tr>\n<tr class=\"memdesc:gac63011205bf6d0be82589dc56dd26708\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga83bc41bd6f89113ee8006576b12bfc50\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">atan2</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac39314f5087e7e51e592897cabbc1927\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">atan2</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gac39314f5087e7e51e592897cabbc1927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaba86c28da7bf5bdac64fecf7d56e8ff3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf4b04dcd3526996d68c1bfe17bfc8657\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657\">isfinite</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac3b12b8ac3014418fe53c299478b6603\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac3b12b8ac3014418fe53c299478b6603\">isfinite</a> (const vec&lt; 1, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8e76dc3e406ce6a4155c2b12a2e4b084\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084\">isfinite</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga929ef27f896d902c1771a2e5e150fc97\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga929ef27f896d902c1771a2e5e150fc97\">isfinite</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga19925badbe10ce61df1d0de00be0b5ad\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5494ba3a95ea6594c86fc75236886864\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">lerp</a> (T x, T y, T a)</td></tr>\n<tr class=\"memdesc:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa551c0a0e16d2d4608e49f7696df897f\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga44a8b5fd776320f1713413dec959b32a\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga89ac8e000199292ec7875519d27e214b\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga89ac8e000199292ec7875519d27e214b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf68de5baf72d16135368b8ef4f841604\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga4ae1a616c8540a2649eab8e0cd051bb3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab5477ab69c40de4db5d58d3359529724\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gab5477ab69c40de4db5d58d3359529724\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga0fd09e616d122bc2ed9726682ffd44b7\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">saturate</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaee97b8001c794a78a44f5d59f62a8aba\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">saturate</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga39bfe3a421286ee31680d45c31ccc161\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">saturate</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga356f8c3a7e7d6376d3d4b0a026407183\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00017_source.html\">compatibility.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00017_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compatibility.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compatibility.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00017.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_compatibility extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#       include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       if(GLM_PLATFORM &amp; GLM_PLATFORM_ANDROID)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#               undef isfinite</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif//GLM_COMPILER</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">   41</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(T x, T y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                                                                                                                                     </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">   42</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">   44</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">   45</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">   46</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">   47</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">   48</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">   50</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(T x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                                                                                              </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">   51</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">   52</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">   53</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">   55</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(T x, T y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}                                                                                                                              </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">   56</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">   57</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">   58</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt; GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(genType <span class=\"keyword\">const</span>&amp; x);                                                                                       </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;1, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;1, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;2, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;3, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">bool</span>                                            <a class=\"code\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a>;                  </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a>;                  </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">   68</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a>;                  </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a>;                  </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">   71</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">bool</span>                                            <a class=\"code\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a>;                </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">   72</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a>;                </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a>;                </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">   74</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a>;                </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a>;                </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">   76</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a>;                </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">   77</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a>;                </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a>;                </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">   79</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a>;                </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">   80</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a>;                </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">   82</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span>                                                     <a class=\"code\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a>;                   </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">   83</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a>;                   </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a>;                   </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">   85</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a>;                   </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">   87</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span>                                                     <a class=\"code\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a>;                 </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">   88</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">   89</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">   91</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">   92</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">   93</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">   95</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">   98</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                           <a class=\"code\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a>;                 </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a>;                 </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">  100</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a>;                 </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">  101</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a>;                 </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                           <a class=\"code\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a>;               </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">  104</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a>;               </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a>;               </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">  106</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a>;               </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">  107</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a>;               </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a>;               </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">  109</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a>;               </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">  110</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a>;               </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a>;               </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">  112</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a>;               </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                          <a class=\"code\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a>;                </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, highp&gt;           <a class=\"code\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a>;                </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">  116</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, highp&gt;           <a class=\"code\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a>;                </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, highp&gt;           <a class=\"code\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a>;                </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                          <a class=\"code\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a>;              </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a>;              </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">  121</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a>;              </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">  122</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a>;              </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a>;              </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">  124</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a>;              </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">  125</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a>;              </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a>;              </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a>;              </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">  128</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a>;              </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#include &quot;compatibility.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00315_html_gaab541bed2e788e4537852a2492860806\"><div class=\"ttname\"><a href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">glm::double4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; double4x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00128\">compatibility.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaacac46ddc7d15d0f9529d05c92946a0f\"><div class=\"ttname\"><a href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">glm::int3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, highp &gt; int3x4</div><div class=\"ttdoc\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00093\">compatibility.hpp:93</a></div></div>\n<div class=\"ttc\" id=\"a00373_html_gac61629f3a4aa14057e7a8cae002291db\"><div class=\"ttname\"><a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">glm::atan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc tangent. </div></div>\n<div class=\"ttc\" id=\"a00315_html_gaddcd7aa2e30e61af5b38660613d3979e\"><div class=\"ttname\"><a href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">glm::bool1</a></div><div class=\"ttdeci\">bool bool1</div><div class=\"ttdoc\">boolean type with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00066\">compatibility.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gac0a51b4812038aa81d73ffcc37f741ac\"><div class=\"ttname\"><a href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">glm::float4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; float4x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00111\">compatibility.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gad3051649b3715d828a4ab92cdae7c3bf\"><div class=\"ttname\"><a href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">glm::float4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; float4x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00112\">compatibility.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gacd33061fc64a7b2dcfd7322c49d9557a\"><div class=\"ttname\"><a href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">glm::double2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; double2x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00122\">compatibility.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae57d0201096834d25f2b91b319e7cdbd\"><div class=\"ttname\"><a href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">glm::double2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; double2x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00120\">compatibility.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga5ec08fc39c9d783dfcc488be240fe975\"><div class=\"ttname\"><a href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">glm::double3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; double3x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00123\">compatibility.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaba86c28da7bf5bdac64fecf7d56e8ff3\"><div class=\"ttname\"><a href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">glm::atan2</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</div><div class=\"ttdoc\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00058\">compatibility.hpp:58</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga45f16a4dd0db1f199afaed9fd12fe9a8\"><div class=\"ttname\"><a href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">glm::double1x1</a></div><div class=\"ttdeci\">double double1x1</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00119\">compatibility.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gab5477ab69c40de4db5d58d3359529724\"><div class=\"ttname\"><a href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</div><div class=\"ttdoc\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00048\">compatibility.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4bad5bb20c6ddaecfe4006c93841d180\"><div class=\"ttname\"><a href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">glm::double3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; double3x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00124\">compatibility.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae2da7345087db3815a25d8837a727ef1\"><div class=\"ttname\"><a href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">glm::float4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; float4</div><div class=\"ttdoc\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00101\">compatibility.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga056ffe02d3a45af626f8e62221881c7a\"><div class=\"ttname\"><a href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">glm::int1x1</a></div><div class=\"ttdeci\">int int1x1</div><div class=\"ttdoc\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00087\">compatibility.hpp:87</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga02d3c013982c183906c61d74aa3166ce\"><div class=\"ttname\"><a href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">glm::float2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; float2</div><div class=\"ttdoc\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00099\">compatibility.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga19925badbe10ce61df1d0de00be0b5ad\"><div class=\"ttname\"><a href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">glm::isfinite</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isfinite(const vec&lt; 4, T, Q &gt; &amp;x)</div><div class=\"ttdoc\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...</div></div>\n<div class=\"ttc\" id=\"a00315_html_ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><div class=\"ttname\"><a href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">glm::bool2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, bool, highp &gt; bool2x3</div><div class=\"ttdoc\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00073\">compatibility.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga197ded5ad8354f6b6fb91189d7a269b3\"><div class=\"ttname\"><a href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">glm::int2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, highp &gt; int2x3</div><div class=\"ttdoc\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00089\">compatibility.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga0670a2111b5e4a6410bd027fa0232fc3\"><div class=\"ttname\"><a href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">glm::int1</a></div><div class=\"ttdeci\">int int1</div><div class=\"ttdoc\">integer vector with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00082\">compatibility.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga821ff110fc8533a053cbfcc93e078cc0\"><div class=\"ttname\"><a href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">glm::float3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; float3</div><div class=\"ttdoc\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00100\">compatibility.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafec3cfd901ab334a92e0242b8f2269b4\"><div class=\"ttname\"><a href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">glm::float2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; float2x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00106\">compatibility.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gadb3703955e513632f98ba12fe051ba3e\"><div class=\"ttname\"><a href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">glm::bool2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, bool, highp &gt; bool2x2</div><div class=\"ttdoc\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00072\">compatibility.hpp:72</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga7d2a7d13986602ae2896bfaa394235d4\"><div class=\"ttname\"><a href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">glm::bool4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, bool, highp &gt; bool4x4</div><div class=\"ttdoc\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00080\">compatibility.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><div class=\"ttname\"><a href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">glm::float1</a></div><div class=\"ttdeci\">float float1</div><div class=\"ttdoc\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00098\">compatibility.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga73720b8dc4620835b17f74d428f98c0c\"><div class=\"ttname\"><a href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">glm::float1x1</a></div><div class=\"ttdeci\">float float1x1</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00103\">compatibility.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gabca29ccceea53669618b751aae0ba83d\"><div class=\"ttname\"><a href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">glm::double4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; double4x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00126\">compatibility.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae4a2c53f14aeec9a17c2b81142b7e82d\"><div class=\"ttname\"><a href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">glm::int4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, highp &gt; int4x3</div><div class=\"ttdoc\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00095\">compatibility.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga9ed830f52408b2f83c085063a3eaf1d0\"><div class=\"ttname\"><a href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">glm::bool4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, bool, highp &gt; bool4x2</div><div class=\"ttdoc\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00078\">compatibility.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga33d43ecbb60a85a1366ff83f8a0ec85f\"><div class=\"ttname\"><a href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">glm::float2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; float2x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00104\">compatibility.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga909c38a425f215a50c847145d7da09f0\"><div class=\"ttname\"><a href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">glm::int3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; int3</div><div class=\"ttdoc\">integer vector with 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00084\">compatibility.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga308b9af0c221145bcfe9bfc129d9098e\"><div class=\"ttname\"><a href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">glm::float4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; float4x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00110\">compatibility.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga3655bc324008553ca61f39952d0b2d08\"><div class=\"ttname\"><a href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">glm::double2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; double2x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00121\">compatibility.hpp:121</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga939b0cff15cee3030f75c1b2e36f89fe\"><div class=\"ttname\"><a href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">glm::float2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; float2x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00105\">compatibility.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaa4cbe16a92cf3664376c7a2fc5126aa8\"><div class=\"ttname\"><a href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">glm::int3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, highp &gt; int3x2</div><div class=\"ttdoc\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00091\">compatibility.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga13c3200b82708f73faac6d7f09ec91a3\"><div class=\"ttname\"><a href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">glm::bool4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; bool4</div><div class=\"ttdoc\">boolean type with 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00069\">compatibility.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga97a39dd9bc7d572810d80b8467cbffa1\"><div class=\"ttname\"><a href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">glm::int4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, highp &gt; int4x2</div><div class=\"ttdoc\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00094\">compatibility.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga7f895c936f0c29c8729afbbf22806090\"><div class=\"ttname\"><a href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">glm::bool1x1</a></div><div class=\"ttdeci\">bool bool1x1</div><div class=\"ttdoc\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00071\">compatibility.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga356f8c3a7e7d6376d3d4b0a026407183\"><div class=\"ttname\"><a href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">glm::saturate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; saturate(const vec&lt; 4, T, Q &gt; &amp;x)</div><div class=\"ttdoc\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00053\">compatibility.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga99629f818737f342204071ef8296b2ed\"><div class=\"ttname\"><a href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">glm::bool3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; bool3</div><div class=\"ttdoc\">boolean type with 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00068\">compatibility.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00241_html_ga7cd77683da6361e297c56443fc70806d\"><div class=\"ttname\"><a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType 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>\n<div class=\"ttc\" id=\"a00315_html_ga4e5ce477c15836b21e3c42daac68554d\"><div class=\"ttname\"><a href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">glm::int2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; int2x2</div><div class=\"ttdoc\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00088\">compatibility.hpp:88</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafe3a8fd56354caafe24bfe1b1e3ad22a\"><div class=\"ttname\"><a href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">glm::int2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; int2</div><div class=\"ttdoc\">integer vector with 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00083\">compatibility.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga04dee1552424198b8f58b377c2ee00d8\"><div class=\"ttname\"><a href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">glm::int4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; int4x4</div><div class=\"ttdoc\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00096\">compatibility.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gac7d7311f7e0fa8b6163d96dab033a755\"><div class=\"ttname\"><a href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">glm::bool3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, bool, highp &gt; bool3x2</div><div class=\"ttdoc\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00075\">compatibility.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafad66a02ccd360c86d6ab9ff9cfbc19c\"><div class=\"ttname\"><a href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">glm::double4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; double4x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00127\">compatibility.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gad0f5dc7f22c2065b1b06d57f1c0658fe\"><div class=\"ttname\"><a href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">glm::bool4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, bool, highp &gt; bool4x3</div><div class=\"ttdoc\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00079\">compatibility.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga20b861a9b6e2a300323671c57a02525b\"><div class=\"ttname\"><a href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">glm::double1</a></div><div class=\"ttdeci\">double double1</div><div class=\"ttdoc\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00114\">compatibility.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga3d8b9028a1053a44a98902cd1c389472\"><div class=\"ttname\"><a href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">glm::double3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; double3</div><div class=\"ttdoc\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00116\">compatibility.hpp:116</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaf92f58af24f35617518aeb3d4f63fda6\"><div class=\"ttname\"><a href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">glm::double4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; double4</div><div class=\"ttdoc\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00117\">compatibility.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga15c9649286f0bf431bdf9b3509580048\"><div class=\"ttname\"><a href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">glm::int3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; int3x3</div><div class=\"ttdoc\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00092\">compatibility.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga6c97b99aac3e302053ffb58aace9033c\"><div class=\"ttname\"><a href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">glm::bool3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, bool, highp &gt; bool3x3</div><div class=\"ttdoc\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00076\">compatibility.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaa6c69f04ba95f3faedf95dae874de576\"><div class=\"ttname\"><a href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">glm::float3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; float3x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00107\">compatibility.hpp:107</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaecdef18c819c205aeee9f94dc93de56a\"><div class=\"ttname\"><a href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">glm::int4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; int4</div><div class=\"ttdoc\">integer vector with 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00085\">compatibility.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga31b729b04facccda73f07ed26958b3c2\"><div class=\"ttname\"><a href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">glm::double2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; double2</div><div class=\"ttdoc\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00115\">compatibility.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga6ceb5d38a58becdf420026e12a6562f3\"><div class=\"ttname\"><a href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">glm::float3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; float3x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00108\">compatibility.hpp:108</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00315_html_gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><div class=\"ttname\"><a href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">glm::bool2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; bool2</div><div class=\"ttdoc\">boolean type with 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00067\">compatibility.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae7d6b679463d37d6c527d478fb470fdf\"><div class=\"ttname\"><a href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">glm::bool3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, bool, highp &gt; bool3x4</div><div class=\"ttdoc\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00077\">compatibility.hpp:77</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga2749d59a7fddbac44f34ba78e57ef807\"><div class=\"ttname\"><a href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">glm::int2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, highp &gt; int2x4</div><div class=\"ttdoc\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00090\">compatibility.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4d7fa65be8e8e4ad6d920b45c44e471f\"><div class=\"ttname\"><a href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">glm::bool2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, bool, highp &gt; bool2x4</div><div class=\"ttdoc\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00074\">compatibility.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga2ef022e453d663d70aec414b2a80f756\"><div class=\"ttname\"><a href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">glm::double3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; double3x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00125\">compatibility.hpp:125</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00315_html_ga4d2679c321b793ca3784fe0315bb5332\"><div class=\"ttname\"><a href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">glm::float3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; float3x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00109\">compatibility.hpp:109</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00018.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: component_wise.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">component_wise.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00018_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add all vector components together.  <a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the maximum value between single vector components.  <a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the minimum value between single vector components.  <a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply all vector components together.  <a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert an integer vector to a normalized float vector.  <a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga80abc2980d65d675f435d178c36880eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a normalized float vector to an integer vector.  <a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> </p>\n<dl class=\"section date\"><dt>Date</dt><dd>2007-05-21 / 2011-06-07 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>Christophe Riccio</dd></dl>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00018_source.html\">component_wise.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00018_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: component_wise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">component_wise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00018.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_component_wise extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;component_wise.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00316_html_gabfa4bb19298c8c73d4217ba759c496b6\"><div class=\"ttname\"><a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">glm::compMax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMax(genType const &amp;v)</div><div class=\"ttdoc\">Find the maximum value between single vector components. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gae8ab88024197202c9479d33bdc5a8a5d\"><div class=\"ttname\"><a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">glm::compMul</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMul(genType const &amp;v)</div><div class=\"ttdoc\">Multiply all vector components together. </div></div>\n<div class=\"ttc\" id=\"a00316_html_ga80abc2980d65d675f435d178c36880eb\"><div class=\"ttname\"><a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">glm::compScale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; compScale(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a normalized float vector to an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00316_html_ga8f2b81ada8515875e58cb1667b6b9908\"><div class=\"ttname\"><a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">glm::compNormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; compNormalize(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert an integer vector to a normalized float vector. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gab5d0832b5c7bb01b8d7395973bfb1425\"><div class=\"ttname\"><a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">glm::compMin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMin(genType const &amp;v)</div><div class=\"ttdoc\">Find the minimum value between single vector components. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gaf71833350e15e74d31cbf8a3e7f27051\"><div class=\"ttname\"><a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">glm::compAdd</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compAdd(genType const &amp;v)</div><div class=\"ttdoc\">Add all vector components together. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00019_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compute_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compute_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType, <span class=\"keywordtype\">bool</span> <span class=\"comment\">/*signed*/</span>&gt;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">struct </span>compute_abs</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;genFIType, true&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genFIType call(genFIType x)</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                        GLM_STATIC_ASSERT(</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                                std::numeric_limits&lt;genFIType&gt;::is_iec559 || std::numeric_limits&lt;genFIType&gt;::is_signed,</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                                <span class=\"stringliteral\">&quot;&#39;abs&#39; only accept floating-point and integer scalar or vector inputs&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                        <span class=\"keywordflow\">return</span> x &gt;= genFIType(0) ? x : -x;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                        <span class=\"comment\">// TODO, perf comp with: *(((int *) &amp;x) + 1) &amp;= 0x7fffffff;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;float, true&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> <span class=\"keywordtype\">float</span> call(<span class=\"keywordtype\">float</span> x)</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                        <span class=\"keywordflow\">return</span> fabsf(x);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;genFIType, false&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genFIType call(genFIType x)</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        GLM_STATIC_ASSERT(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                                (!std::numeric_limits&lt;genFIType&gt;::is_signed &amp;&amp; std::numeric_limits&lt;genFIType&gt;::is_integer),</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                                <span class=\"stringliteral\">&quot;&#39;abs&#39; only accept floating-point and integer scalar or vector inputs&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        <span class=\"keywordflow\">return</span> x;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00020_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compute_vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compute_vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">//#include &quot;compute_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">bool</span> isFloat&gt;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        <span class=\"keyword\">struct </span>compute_equal</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> call(T a, T b)</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                        <span class=\"keywordflow\">return</span> a == b;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">        template &lt;typename T&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">        struct compute_equal&lt;T, true&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"comment\">        {</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">                GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">                {</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">                        return detail::compute_abs&lt;T, std::numeric_limits&lt;T&gt;::is_signed&gt;::call(b - a) &lt;= static_cast&lt;T&gt;(0);</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"comment\">                        //return std::memcmp(&amp;a, &amp;b, sizeof(T)) == 0;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">                }</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">        };</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00021.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: constants.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">constants.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00021_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a> ()</td></tr>\n<tr class=\"memdesc:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return e constant.  <a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a> ()</td></tr>\n<tr class=\"memdesc:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return Euler's constant.  <a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 4 / pi.  <a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a> ()</td></tr>\n<tr class=\"memdesc:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the golden ratio constant.  <a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2.  <a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a> ()</td></tr>\n<tr class=\"memdesc:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(ln(2)).  <a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a> ()</td></tr>\n<tr class=\"memdesc:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(10).  <a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a> ()</td></tr>\n<tr class=\"memdesc:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(2).  <a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a> ()</td></tr>\n<tr class=\"memdesc:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1.  <a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / pi.  <a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / sqrt(2).  <a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / (pi * 2).  <a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 4.  <a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a> ()</td></tr>\n<tr class=\"memdesc:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(5).  <a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(pi / 2).  <a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a> ()</td></tr>\n<tr class=\"memdesc:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(ln(4)).  <a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return square root of pi.  <a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a> ()</td></tr>\n<tr class=\"memdesc:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(3).  <a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2).  <a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2 * pi).  <a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a> ()</td></tr>\n<tr class=\"memdesc:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / 3.  <a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2 * 3.  <a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga74eadc8a211253079683219a3ea0462a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / pi.  <a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga5827301817640843cf02026a8d493894\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / sqrt(pi).  <a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5827301817640843cf02026a8d493894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi * 2.  <a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a> ()</td></tr>\n<tr class=\"memdesc:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / 3.  <a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a> ()</td></tr>\n<tr class=\"memdesc:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 0.  <a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00021_source.html\">constants.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00021_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: constants.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">constants.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00021.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_constants extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a>();</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a>();</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a>();</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a>();</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a>();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a>();</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a>();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a>();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a>();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>();</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a>();</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a>();</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a>();</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a>();</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a>();</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a>();</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a>();</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a>();</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a>();</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a>();</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;constants.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00290_html_ga3077c6311010a214b69ddc8214ec13b5\"><div class=\"ttname\"><a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">glm::third</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType third()</div><div class=\"ttdoc\">Return 1 / 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga74e607d29020f100c0d0dc46ce2ca950\"><div class=\"ttname\"><a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">glm::root_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two()</div><div class=\"ttdoc\">Return sqrt(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga788fa23a0939bac4d1d0205fb4f35818\"><div class=\"ttname\"><a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">glm::one_over_root_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two()</div><div class=\"ttdoc\">Return 1 / sqrt(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gad8fe2e6f90bce9d829e9723b649fbd42\"><div class=\"ttname\"><a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">glm::euler</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType euler()</div><div class=\"ttdoc\">Return Euler&#39;s constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga9b4d2f4322edcf63a6737b92a29dd1f5\"><div class=\"ttname\"><a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">glm::two_thirds</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds()</div><div class=\"ttdoc\">Return 2 / 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaa5276a4617566abcfe49286f40e3a256\"><div class=\"ttname\"><a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">glm::two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi()</div><div class=\"ttdoc\">Return pi * 2. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga748cf8642830657c5b7eae04d0a80899\"><div class=\"ttname\"><a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">glm::golden_ratio</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio()</div><div class=\"ttdoc\">Return the golden ratio constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga3c9df42bd73c519a995c43f0f99e77e0\"><div class=\"ttname\"><a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">glm::quarter_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi()</div><div class=\"ttdoc\">Return pi / 4. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga39c2fb227631ca25894326529bdd1ee5\"><div class=\"ttname\"><a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">glm::one</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one()</div><div class=\"ttdoc\">Return 1. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gae9ebbded75b53d4faeb1e4ef8b3347a2\"><div class=\"ttname\"><a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">glm::root_five</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_five()</div><div class=\"ttdoc\">Return sqrt(5). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gae94950df74b0ce382b1fc1d978ef7394\"><div class=\"ttname\"><a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">glm::three_over_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi()</div><div class=\"ttdoc\">Return pi / 2 * 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga788f5a421fc0f40a1296ebc094cbaa8a\"><div class=\"ttname\"><a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">glm::zero</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType zero()</div><div class=\"ttdoc\">Return 0. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaf97ebc6c059ffd788e6c4946f71ef66c\"><div class=\"ttname\"><a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">glm::ln_ten</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten()</div><div class=\"ttdoc\">Return ln(10). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4f286be4abe88be1eed7d2a9f6cb193e\"><div class=\"ttname\"><a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">glm::root_three</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_three()</div><div class=\"ttdoc\">Return sqrt(3). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga261380796b2cd496f68d2cf1d08b8eb9\"><div class=\"ttname\"><a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">glm::root_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi()</div><div class=\"ttdoc\">Return square root of pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><div class=\"ttname\"><a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">glm::e</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class=\"ttdoc\">Return e constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga555150da2b06d23c8738981d5013e0eb\"><div class=\"ttname\"><a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">glm::one_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi()</div><div class=\"ttdoc\">Return 1 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga74eadc8a211253079683219a3ea0462a\"><div class=\"ttname\"><a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">glm::two_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi()</div><div class=\"ttdoc\">Return 2 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga753950e5140e4ea6a88e4a18ba61dc09\"><div class=\"ttname\"><a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">glm::four_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi()</div><div class=\"ttdoc\">Return 4 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga2bcedc575039fe0cd765742f8bbb0bd3\"><div class=\"ttname\"><a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">glm::root_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi()</div><div class=\"ttdoc\">Return sqrt(2 * pi). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga24f4d27765678116f41a2f336ab7975c\"><div class=\"ttname\"><a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">glm::ln_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two()</div><div class=\"ttdoc\">Return ln(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4129412e96b33707a77c1a07652e23e2\"><div class=\"ttname\"><a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">glm::root_ln_four</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four()</div><div class=\"ttdoc\">Return sqrt(ln(4)). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga5827301817640843cf02026a8d493894\"><div class=\"ttname\"><a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">glm::two_over_root_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi()</div><div class=\"ttdoc\">Return 2 / sqrt(pi). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaca94292c839ed31a405ab7a81ae7e850\"><div class=\"ttname\"><a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">glm::ln_ln_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two()</div><div class=\"ttdoc\">Return ln(ln(2)). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4e276cb823cc5e612d4f89ed99c75039\"><div class=\"ttname\"><a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">glm::root_half_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi()</div><div class=\"ttdoc\">Return sqrt(pi / 2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga0c36b41d462e45641faf7d7938948bac\"><div class=\"ttname\"><a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">glm::half_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi()</div><div class=\"ttdoc\">Return pi / 2. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga7c922b427986cbb2e4c6ac69874eefbc\"><div class=\"ttname\"><a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">glm::one_over_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi()</div><div class=\"ttdoc\">Return 1 / (pi * 2). </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00022.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: dual_quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">dual_quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00022_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_ddualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a></td></tr>\n<tr class=\"memdesc:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of default double-qualifier floating-point numbers.  <a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a></td></tr>\n<tr class=\"memdesc:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of floating-point numbers.  <a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a></td></tr>\n<tr class=\"memdesc:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of single-qualifier floating-point numbers.  <a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">More...</a><br /></td></tr>\n<tr class=\"separator:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high double-qualifier floating-point numbers.  <a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a></td></tr>\n<tr class=\"memdesc:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a></td></tr>\n<tr class=\"memdesc:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low double-qualifier floating-point numbers.  <a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a></td></tr>\n<tr class=\"memdesc:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a></td></tr>\n<tr class=\"memdesc:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium double-qualifier floating-point numbers.  <a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a></td></tr>\n<tr class=\"memdesc:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an identity dual quaternion.  <a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gac4064ff813759740201765350eac4236\">dualquat_cast</a> (mat&lt; 2, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac4064ff813759740201765350eac4236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.  <a href=\"a00317.html#gac4064ff813759740201765350eac4236\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4064ff813759740201765350eac4236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a> (mat&lt; 3, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.  <a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a> (tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gace8380112d16d33f520839cb35a4d173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the linear interpolation of two dual quaternion.  <a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">More...</a><br /></td></tr>\n<tr class=\"separator:gace8380112d16d33f520839cb35a4d173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 2 * 4 matrix.  <a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 4 matrix.  <a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga299b8641509606b1958ffa104a162cfe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Maksim Vorobiev (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'mso'+'me'+'one'+'@g'+'mai'+'l.'+'com'; return false;\">msome<span style=\"display: none;\">.nosp@m.</span>one@<span style=\"display: none;\">.nosp@m.</span>gmail<span style=\"display: none;\">.nosp@m.</span>.com</a>)</dd></dl>\n<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>\n<dd>\n<a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00022_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: dual_quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">dual_quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00022.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_dual_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">struct </span>tdualquat</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keyword\">typedef</span> qua&lt;T, Q&gt; part_type;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                qua&lt;T, Q&gt; real, dual;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 2;}</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                GLM_FUNC_DECL part_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL part_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat&lt;T, Q&gt; const&amp; d) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat&lt;T, P&gt; const&amp; d);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; real);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>, vec&lt;3, T, Q&gt; const&amp; translation);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; real, qua&lt;T, Q&gt; const&amp; dual);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat&lt;U, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat&lt;2, 4, T, Q&gt; const&amp; holder_mat);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat&lt;3, 4, T, Q&gt; const&amp; aug_mat);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator=(tdualquat&lt;T, Q&gt; const&amp; m) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator=(tdualquat&lt;U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator+(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator-(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator+(tdualquat&lt;T, Q&gt; const&amp; q, tdualquat&lt;T, Q&gt; const&amp; p);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, tdualquat&lt;T, Q&gt; const&amp; p);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, vec&lt;3, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; const&amp; v, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, vec&lt;4, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; const&amp; v, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(T const&amp; s, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator/(tdualquat&lt;T, Q&gt; const&amp; q, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(tdualquat&lt;T, Q&gt; const&amp; q1, tdualquat&lt;T, Q&gt; const&amp; q2);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(tdualquat&lt;T, Q&gt; const&amp; q1, tdualquat&lt;T, Q&gt; const&amp; q2);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        template &lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a>();</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a>(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a>(tdualquat&lt;T, Q&gt; const&amp; x, tdualquat&lt;T, Q&gt; const&amp; y, T const&amp; a);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a>(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; <a class=\"code\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a>(tdualquat&lt;T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; <a class=\"code\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a>(tdualquat&lt;T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a>(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a>(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">  187</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, lowp&gt;          <a class=\"code\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">  192</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, mediump&gt;       <a class=\"code\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">  197</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, highp&gt;         <a class=\"code\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">  203</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, lowp&gt;          <a class=\"code\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">  208</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, mediump&gt;       <a class=\"code\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">  213</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, highp&gt;         <a class=\"code\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">  219</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, lowp&gt;         <a class=\"code\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">  224</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, mediump&gt;      <a class=\"code\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">  229</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, highp&gt;        <a class=\"code\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">#if(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">  241</a></span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fdualquat               <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fdualquat               <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fdualquat                  <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fdualquat                  <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: multiple default precision requested for single-precision floating-point types&quot;</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">typedef</span> highp_ddualquat                 <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">typedef</span> highp_ddualquat                 <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        <span class=\"keyword\">typedef</span> mediump_ddualquat               <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        <span class=\"keyword\">typedef</span> lowp_ddualquat                  <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: Multiple default precision requested for double-precision floating-point types&quot;</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">#include &quot;dual_quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00317_html_ga3d71f98d84ba59dfe4e369fde4714cd6\"><div class=\"ttname\"><a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">glm::ddualquat</a></div><div class=\"ttdeci\">highp_ddualquat ddualquat</div><div class=\"ttdoc\">Dual-quaternion of default double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00260\">dual_quaternion.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga237c2b9b42c9a930e49de5840ae0f930\"><div class=\"ttname\"><a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">glm::fdualquat</a></div><div class=\"ttdeci\">highp_fdualquat fdualquat</div><div class=\"ttdoc\">Dual-quaternion of single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00241\">dual_quaternion.hpp:241</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gae99d143b37f9cad4cd9285571aab685a\"><div class=\"ttname\"><a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">glm::mat2x4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt; mat2x4_cast(tdualquat&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 2 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga8f67eafa7197d7a668dad5105a463d2a\"><div class=\"ttname\"><a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">glm::highp_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, highp &gt; highp_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00229\">dual_quaternion.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga299b8641509606b1958ffa104a162cfe\"><div class=\"ttname\"><a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; normalize(tdualquat&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the normalized quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga0b35c0e30df8a875dbaa751e0bd800e0\"><div class=\"ttname\"><a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">glm::dual_quat_identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; dual_quat_identity()</div><div class=\"ttdoc\">Creates an identity dual quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga070f521a953f6461af4ab4cf8ccbf27e\"><div class=\"ttname\"><a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; inverse(tdualquat&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q inverse. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gace8380112d16d33f520839cb35a4d173\"><div class=\"ttname\"><a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Returns the linear interpolation of two dual quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gade05d29ebd4deea0f883d0e1bb4169aa\"><div class=\"ttname\"><a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">glm::lowp_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, lowp &gt; lowp_dualquat</div><div class=\"ttdoc\">Dual-quaternion of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00187\">dual_quaternion.hpp:187</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gaa38f671be25a7f3b136a452a8bb42860\"><div class=\"ttname\"><a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">glm::lowp_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, lowp &gt; lowp_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00203\">dual_quaternion.hpp:203</a></div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gab4c5103338af3dac7e0fbc86895a3f1a\"><div class=\"ttname\"><a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">glm::lowp_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, lowp &gt; lowp_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00219\">dual_quaternion.hpp:219</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gaf59f5bb69620d2891c3795c6f2639179\"><div class=\"ttname\"><a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">glm::mat3x4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt; mat3x4_cast(tdualquat&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gae93abee0c979902fbec6a7bee0f6fae1\"><div class=\"ttname\"><a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">glm::dualquat</a></div><div class=\"ttdeci\">highp_fdualquat dualquat</div><div class=\"ttdoc\">Dual-quaternion of floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00236\">dual_quaternion.hpp:236</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga4c4e55e9c99dc57b299ed590968da564\"><div class=\"ttname\"><a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">glm::highp_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, highp &gt; highp_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00213\">dual_quaternion.hpp:213</a></div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gaa7aeb54c167712b38f2178a1be2360ad\"><div class=\"ttname\"><a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">glm::mediump_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, mediump &gt; mediump_dualquat</div><div class=\"ttdoc\">Dual-quaternion of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00192\">dual_quaternion.hpp:192</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga4a6b594ff7e81150d8143001367a9431\"><div class=\"ttname\"><a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">glm::mediump_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, mediump &gt; mediump_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00208\">dual_quaternion.hpp:208</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga0fb11e48e2d16348ccb06a25213641b4\"><div class=\"ttname\"><a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">glm::mediump_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, mediump &gt; mediump_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00224\">dual_quaternion.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga91025ebdca0f4ea54da08497b00e8c84\"><div class=\"ttname\"><a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">glm::dualquat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga9ef5bf1da52a9d4932335a517086ceaf\"><div class=\"ttname\"><a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">glm::highp_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, highp &gt; highp_dualquat</div><div class=\"ttdoc\">Dual-quaternion of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00197\">dual_quaternion.hpp:197</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00023.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: easing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">easing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00023_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga93cddcdb6347a44d5927cc2bf2570816\">backEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace6d24722a2f6722b56398206eb810bb\">backEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gabf25069fa906413c858fd46903d520b9\">backEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gabf25069fa906413c858fd46903d520b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga34508d4b204a321ec26d6086aa047997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant IV of unit circle.  <a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].  <a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant II of unit circle.  <a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaff52f746102b94864d105563ba8895ae\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaff52f746102b94864d105563ba8895ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = x^3. <br /></td></tr>\n<tr class=\"separator:gaff52f746102b94864d105563ba8895ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga55134072b42d75452189321d4a2ad91c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = (x - 1)^3 + 1.  <a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))  <a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">More...</a><br /></td></tr>\n<tr class=\"separator:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.  <a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">More...</a><br /></td></tr>\n<tr class=\"separator:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = 2^(10(x - 1))  <a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1].  <a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = -2^(-10x) + 1.  <a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the line y = x.  <a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">More...</a><br /></td></tr>\n<tr class=\"separator:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaf42089d35855695132d217cd902304a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = x^2.  <a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf42089d35855695132d217cd902304a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1].  <a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = -x^2 + 2x.  <a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic x^4.  <a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga6d000f852de12b197e154f234b20c505\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1].  <a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d000f852de12b197e154f234b20c505\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic y = 1 - (x - 1)^4.  <a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga097579d8e087dcf48037588140a21640\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = x^5.  <a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">More...</a><br /></td></tr>\n<tr class=\"separator:ga097579d8e087dcf48037588140a21640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = (x - 1)^5 + 1.  <a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave.  <a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after half sine wave.  <a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave (different phase)  <a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Robert Chisholm</dd></dl>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00023_source.html\">easing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00023_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: easing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">easing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00023.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_easing extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#include &quot;easing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00318_html_gaac30767f2e430b0c3fc859a4d59c7b5b\"><div class=\"ttname\"><a href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">glm::bounceEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseIn(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga0c1027637a5b02d4bb3612aa12599d69\"><div class=\"ttname\"><a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">glm::circularEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaff52f746102b94864d105563ba8895ae\"><div class=\"ttname\"><a href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">glm::cubicEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the cubic y = x^3. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga230918eccee4e113d10ec5b8cdc58695\"><div class=\"ttname\"><a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">glm::elasticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga097579d8e087dcf48037588140a21640\"><div class=\"ttname\"><a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">glm::quinticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quintic y = x^5. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><div class=\"ttname\"><a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">glm::sineEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after half sine wave. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga26fefde9ced9b72745fe21f1a3fe8da7\"><div class=\"ttname\"><a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">glm::circularEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after shifted quadrant II of unit circle. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><div class=\"ttname\"><a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">glm::elasticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga2db4ac8959559b11b4029e54812908d6\"><div class=\"ttname\"><a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">glm::elasticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gafb338ac6f6b2bcafee50e3dca5201dbf\"><div class=\"ttname\"><a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">glm::sineEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after quarter-cycle of sine wave. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga290c3e47cb0a49f2e8abe90b1872b649\"><div class=\"ttname\"><a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">glm::linearInterpolation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType linearInterpolation(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the line y = x. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga808b41f14514f47dad5dcc69eb924afd\"><div class=\"ttname\"><a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">glm::quarticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quartic x^4. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga4dfb33fa7664aa888eb647999d329b98\"><div class=\"ttname\"><a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">glm::quarticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quartic y = 1 - (x - 1)^4. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gab3e454f883afc1606ef91363881bf5a3\"><div class=\"ttname\"><a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">glm::sineEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after quarter-cycle of sine wave (different phase) </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga03e8fc2d7945a4e63ee33b2159c14cea\"><div class=\"ttname\"><a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">glm::quadraticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga34508d4b204a321ec26d6086aa047997\"><div class=\"ttname\"><a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">glm::circularEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after shifted quadrant IV of unit circle. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga283717bc2d937547ad34ec0472234ee3\"><div class=\"ttname\"><a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">glm::quadraticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the parabola y = -x^2 + 2x. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga517f2bcfd15bc2c25c466ae50808efc3\"><div class=\"ttname\"><a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">glm::exponentialEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the exponential function y = -2^(-10x) + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga7dbd4d5c8da3f5353121f615e7b591d7\"><div class=\"ttname\"><a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">glm::quinticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quintic y = (x - 1)^5 + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga40d746385d8bcc5973f5bc6a2340ca91\"><div class=\"ttname\"><a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">glm::cubicEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the cubic y = (x - 1)^3 + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga232fb6dc093c5ce94bee105ff2947501\"><div class=\"ttname\"><a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">glm::exponentialEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga94007005ff0dcfa0749ebfa2aec540b2\"><div class=\"ttname\"><a href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">glm::bounceEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseOut(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga2a82d5c46df7e2d21cc0108eb7b83934\"><div class=\"ttname\"><a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">glm::quinticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga33777c9dd98f61d9472f96aafdf2bd36\"><div class=\"ttname\"><a href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">glm::backEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseIn(genType const &amp;a, genType const &amp;o)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga7f24ee9219ab4c84dc8de24be84c1e3c\"><div class=\"ttname\"><a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">glm::exponentialEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the exponential function y = 2^(10(x - 1)) </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaf42089d35855695132d217cd902304a0\"><div class=\"ttname\"><a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">glm::quadraticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the parabola y = x^2. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga6d000f852de12b197e154f234b20c505\"><div class=\"ttname\"><a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">glm::quarticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga55134072b42d75452189321d4a2ad91c\"><div class=\"ttname\"><a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">glm::cubicEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_gadf9f38eff1e5f4c2fa5b629a25ae413e\"><div class=\"ttname\"><a href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">glm::bounceEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseInOut(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga68a7b760f2afdfab298d5cd6d7611fb1\"><div class=\"ttname\"><a href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">glm::backEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseInOut(genType const &amp;a, genType const &amp;o)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga640c1ac6fe9d277a197da69daf60ee4f\"><div class=\"ttname\"><a href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">glm::backEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseOut(genType const &amp;a, genType const &amp;o)</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00024.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: epsilon.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">epsilon.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00024_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga91b417866cafadd076004778217a1844\">epsilonEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga91b417866cafadd076004778217a1844\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#ga91b417866cafadd076004778217a1844\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91b417866cafadd076004778217a1844\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">epsilonNotEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00024_source.html\">epsilon.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00024_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: epsilon.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">epsilon.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00024.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_epsilon extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;epsilon.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00291_html_gaa7f227999ca09e7ca994e8b35aba47bb\"><div class=\"ttname\"><a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">glm::epsilonEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| < epsilon. </div></div>\n<div class=\"ttc\" id=\"a00291_html_ga50a92103fb0cbd796908e1bf20c79aaf\"><div class=\"ttname\"><a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">glm::epsilonNotEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| >= epsilon. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00025.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: euler_angles.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">euler_angles.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00025_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a> (T const &amp;angleX, T const &amp;angularVelocityX)</td></tr>\n<tr class=\"memdesc:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.  <a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a> (T const &amp;angleY, T const &amp;angularVelocityY)</td></tr>\n<tr class=\"memdesc:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.  <a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a> (T const &amp;angleZ, T const &amp;angularVelocityZ)</td></tr>\n<tr class=\"memdesc:gae8b397348201c42667be983ba3f344df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.  <a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8b397348201c42667be983ba3f344df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a> (T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.  <a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a> (T const &amp;angleX, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).  <a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).  <a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).  <a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a> (T const &amp;angleX, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).  <a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).  <a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).  <a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">More...</a><br /></td></tr>\n<tr class=\"separator:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a> (T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.  <a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a> (T const &amp;angleY, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).  <a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga750fba9894117f87bcc529d7349d11de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).  <a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a> (T const &amp;angleY, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).  <a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).  <a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).  <a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a> (T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.  <a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a> (T const &amp;angle, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga483903115cd4059228961046a28d69b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).  <a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga483903115cd4059228961046a28d69b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).  <a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).  <a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">More...</a><br /></td></tr>\n<tr class=\"separator:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a> (T const &amp;angleZ, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).  <a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).  <a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).  <a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaab8868556361a190db94374e9983ed39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab8868556361a190db94374e9983ed39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga9049b78466796c0de2971756e25b93d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga59359fef9bad92afaca55e193f91e702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 2 * 2 rotation matrix from an euler angle.  <a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">orientate3</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.  <a href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gae6aa26ccb020d281b449619e419a609e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00025_source.html\">euler_angles.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00025_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: euler_angles.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">euler_angles.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00025.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_euler_angles extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a>(</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleX, T <span class=\"keyword\">const</span> &amp; angularVelocityX);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a>(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleY, T <span class=\"keyword\">const</span> &amp; angularVelocityY);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleZ, T <span class=\"keyword\">const</span> &amp; angularVelocityZ);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a>(</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX,</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a>(</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a>(</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a>(</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY,</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a>(</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a>(</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        T <span class=\"keyword\">const</span>&amp; t1,</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        T <span class=\"keyword\">const</span>&amp; t2,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        T <span class=\"keyword\">const</span>&amp; t3);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a>(</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>,</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>,</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a>(</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a>(</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a>(</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a>(</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a>(</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a>(</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a>(</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a>(</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a>(</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a>(</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a>(</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>,</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>,</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; angles);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; angles);</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;    <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;    GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span>&amp; M,</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                                            T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                                            T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                                            T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">#include &quot;euler_angles.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00319_html_ga64036577ee17a2d24be0dbc05881d4e2\"><div class=\"ttname\"><a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">glm::eulerAngleXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXY(T const &amp;angleX, T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga5e5e40abc27630749b42b3327c76d6e4\"><div class=\"ttname\"><a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">glm::eulerAngleYZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaf0937518e63037335a0e8358b6f053c5\"><div class=\"ttname\"><a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">glm::extractEulerAngleYXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYXZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga1975e0f0e9bed7f716dc9946da2ab645\"><div class=\"ttname\"><a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">glm::eulerAngleXYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXYZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga996dce12a60d8a674ba6737a535fa910\"><div class=\"ttname\"><a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">glm::eulerAngleXZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae8b397348201c42667be983ba3f344df\"><div class=\"ttname\"><a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">glm::derivedEulerAngleZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleZ(T const &amp;angleZ, T const &amp;angularVelocityZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><div class=\"ttname\"><a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">glm::eulerAngleYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYX(T const &amp;angleY, T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab84bf4746805fd69b8ecbb230e3974c5\"><div class=\"ttname\"><a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">glm::eulerAngleY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleY(T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gafdfa880a64b565223550c2d3938b1aeb\"><div class=\"ttname\"><a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">glm::extractEulerAngleZYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZYZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga994b8186b3b80d91cf90bc403164692f\"><div class=\"ttname\"><a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">glm::derivedEulerAngleX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleX(T const &amp;angleX, T const &amp;angularVelocityX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaf1077a72171d0f3b08f022ab5ff88af7\"><div class=\"ttname\"><a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">glm::extractEulerAngleXYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXYX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Y * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab4505c54d2dd654df4569fd1f04c43aa\"><div class=\"ttname\"><a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">glm::eulerAngleZXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZXY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga0cc5ad970d0b00829b139fe0fe5a1e13\"><div class=\"ttname\"><a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">glm::roll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T roll(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns roll value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gafba6282e4ed3ff8b5c75331abfba3489\"><div class=\"ttname\"><a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">glm::eulerAngleX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleX(T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae16738a9f1887cf4e4db6a124637608d\"><div class=\"ttname\"><a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">glm::orientate2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; orientate2(T const &amp;angle)</div><div class=\"ttdoc\">Creates a 2D 2 * 2 rotation matrix from an euler angle. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga29bd0787a28a6648159c0d6e69706066\"><div class=\"ttname\"><a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">glm::eulerAngleXYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXYX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab8ba99a9814f6d9edf417b6c6d5b0c10\"><div class=\"ttname\"><a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">glm::eulerAngleYXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYXZ(T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacf0bc6c031f25fa3ee0055b62c8260d0\"><div class=\"ttname\"><a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">glm::extractEulerAngleXZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXZX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Z * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8da38cdfdc452dafa660c2f46506bad5\"><div class=\"ttname\"><a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">glm::yaw</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T yaw(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns yaw value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaab8868556361a190db94374e9983ed39\"><div class=\"ttname\"><a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">glm::extractEulerAngleYXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYXY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga81fbbca2ba0c778b9662d5355b4e2363\"><div class=\"ttname\"><a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">glm::extractEulerAngleZXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZXY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gabe5a65d8eb1cd873c8de121cce1a15ed\"><div class=\"ttname\"><a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">glm::extractEulerAngleXZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXZY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga9049b78466796c0de2971756e25b93d3\"><div class=\"ttname\"><a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">glm::extractEulerAngleYZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYZX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga60171c79a17aec85d7891ae1d1533ec9\"><div class=\"ttname\"><a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">glm::eulerAngleXZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga2e61f1e39069c47530acab9167852dd6\"><div class=\"ttname\"><a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">glm::eulerAngleZYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZYX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga4a044653f71a4ecec68e0b623382b48a\"><div class=\"ttname\"><a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">glm::orientate4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientate4(vec&lt; 3, T, Q &gt; const &amp;angles)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga2d6c11a4abfa60c565483cee2d3f7665\"><div class=\"ttname\"><a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">glm::extractEulerAngleZYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZYX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga5b3935248bb6c3ec6b0d9297d406e251\"><div class=\"ttname\"><a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">glm::eulerAngleZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZ(T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga750fba9894117f87bcc529d7349d11de\"><div class=\"ttname\"><a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">glm::eulerAngleYXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYXY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga11dad972c109e4bf8694c915017c44a6\"><div class=\"ttname\"><a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">glm::extractEulerAngleYZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYZY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae6aa26ccb020d281b449619e419a609e\"><div class=\"ttname\"><a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">glm::yawPitchRoll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; yawPitchRoll(T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaa39bd323c65c2fc0a1508be33a237ce9\"><div class=\"ttname\"><a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">glm::eulerAngleXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZ(T const &amp;angleX, T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacea701562f778c1da4d3a0a1cf091000\"><div class=\"ttname\"><a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">glm::extractEulerAngleXYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXYZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga178f966c52b01e4d65e31ebd007e3247\"><div class=\"ttname\"><a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">glm::eulerAngleZXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZXZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga08bef16357b8f9b3051b3dcaec4b7848\"><div class=\"ttname\"><a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">glm::eulerAngleYZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga400b2bd5984999efab663f3a68e1d020\"><div class=\"ttname\"><a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">glm::eulerAngleZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZY(T const &amp;angleZ, T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacd795f1dbecaf74974f9c76bbcca6830\"><div class=\"ttname\"><a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">glm::eulerAngleZYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZYZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga220379e10ac8cca55e275f0c9018fed9\"><div class=\"ttname\"><a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">glm::eulerAngleYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZ(T const &amp;angleY, T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga7238c8e15c7720e3ca6a45ab151eeabb\"><div class=\"ttname\"><a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">glm::orientate3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)</div><div class=\"ttdoc\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga59359fef9bad92afaca55e193f91e702\"><div class=\"ttname\"><a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">glm::extractEulerAngleZXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZXZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga0a4c56ecce7abcb69508ebe6313e9d10\"><div class=\"ttname\"><a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">glm::derivedEulerAngleY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleY(T const &amp;angleY, T const &amp;angularVelocityY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga7603e81477b46ddb448896909bc04928\"><div class=\"ttname\"><a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">glm::pitch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T pitch(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns pitch value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga483903115cd4059228961046a28d69b5\"><div class=\"ttname\"><a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">glm::eulerAngleZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZX(T const &amp;angle, T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00026.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00026_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural exponentiation of x, i.e., e^x.  <a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 2 raised to the v power.  <a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reciprocal of the positive square root of v.  <a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.  <a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.  <a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a> (vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</td></tr>\n<tr class=\"memdesc:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 'base' raised to the power 'exponent'.  <a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of v.  <a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.2 Exponential Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00026_source.html\">exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00026_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00026.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00178.html\">detail/type_vec1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">detail/type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">detail/type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">detail/type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; base, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; exponent);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_gaa83e5f1648b7ccdf33b87c07c76cb77c\"><div class=\"ttname\"><a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sqrt(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the positive square root of v. </div></div>\n<div class=\"ttc\" id=\"a00242_html_gaff17ace6b579a03bf223ed4d1ed2cd16\"><div class=\"ttname\"><a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">glm::exp2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp2(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns 2 raised to the v power. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><div class=\"ttname\"><a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">glm::inversesqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; inversesqrt(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the reciprocal of the positive square root of v. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00178_html\"><div class=\"ttname\"><a href=\"a00178.html\">type_vec1.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga2254981952d4f333b900a6bf5167a6c4\"><div class=\"ttname\"><a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</div><div class=\"ttdoc\">Returns &#39;base&#39; raised to the power &#39;exponent&#39;. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga071566cadc7505455e611f2a0353f4d4\"><div class=\"ttname\"><a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural exponentiation of x, i.e., e^x. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga918c9f3fd086ce20e6760c903bd30fa9\"><div class=\"ttname\"><a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; log(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y...</div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga82831c7d9cca777cebedfe03a19c8d75\"><div class=\"ttname\"><a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">glm::log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; log2(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00027.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence)  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00027_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00027_source.html\">ext.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00027_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00027.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00037.html\">glm.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: All extensions included (not recommended)&quot;)</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#endif//GLM_MESSAGES</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00063.html\">./ext/matrix_double2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00064.html\">./ext/matrix_double2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00065.html\">./ext/matrix_double2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00066.html\">./ext/matrix_double2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00067.html\">./ext/matrix_double2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00068.html\">./ext/matrix_double2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00069.html\">./ext/matrix_double3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00070.html\">./ext/matrix_double3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00071.html\">./ext/matrix_double3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00072.html\">./ext/matrix_double3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00073.html\">./ext/matrix_double3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00074.html\">./ext/matrix_double3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00075.html\">./ext/matrix_double4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00076.html\">./ext/matrix_double4x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00077.html\">./ext/matrix_double4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00078.html\">./ext/matrix_double4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00079.html\">./ext/matrix_double4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00080.html\">./ext/matrix_double4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00082.html\">./ext/matrix_float2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00083.html\">./ext/matrix_float2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00084.html\">./ext/matrix_float2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00085.html\">./ext/matrix_float2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00086.html\">./ext/matrix_float2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00087.html\">./ext/matrix_float2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00088.html\">./ext/matrix_float3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00089.html\">./ext/matrix_float3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00090.html\">./ext/matrix_float3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00091.html\">./ext/matrix_float3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00092.html\">./ext/matrix_float3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00093.html\">./ext/matrix_float3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00094.html\">./ext/matrix_float4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;./ext/matrix_float4x2_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00096.html\">./ext/matrix_float4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00097.html\">./ext/matrix_float4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00098.html\">./ext/matrix_float4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00099.html\">./ext/matrix_float4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00107.html\">./ext/matrix_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00128.html\">./ext/quaternion_double.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00129.html\">./ext/quaternion_double_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00131.html\">./ext/quaternion_float.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00132.html\">./ext/quaternion_float_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00133.html\">./ext/quaternion_geometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00134.html\">./ext/quaternion_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00145.html\">./ext/scalar_constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00146.html\">./ext/scalar_int_sized.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00149.html\">./ext/scalar_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00189.html\">./ext/vector_bool1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00190.html\">./ext/vector_bool1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00191.html\">./ext/vector_bool2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00192.html\">./ext/vector_bool2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00193.html\">./ext/vector_bool3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00194.html\">./ext/vector_bool3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00195.html\">./ext/vector_bool4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00196.html\">./ext/vector_bool4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00198.html\">./ext/vector_double1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00199.html\">./ext/vector_double1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00200.html\">./ext/vector_double2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00201.html\">./ext/vector_double2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00202.html\">./ext/vector_double3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00203.html\">./ext/vector_double3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00204.html\">./ext/vector_double4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00205.html\">./ext/vector_double4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00206.html\">./ext/vector_float1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00207.html\">./ext/vector_float1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00209.html\">./ext/vector_float2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00210.html\">./ext/vector_float3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00211.html\">./ext/vector_float3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00213.html\">./ext/vector_float4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00214.html\">./ext/vector_int1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00215.html\">./ext/vector_int1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00216.html\">./ext/vector_int2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00217.html\">./ext/vector_int2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00218.html\">./ext/vector_int3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00219.html\">./ext/vector_int3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00220.html\">./ext/vector_int4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00221.html\">./ext/vector_int4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00224.html\">./ext/vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00226.html\">./ext/vector_uint1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00227.html\">./ext/vector_uint1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00229.html\">./ext/vector_uint2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00230.html\">./ext/vector_uint3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00231.html\">./ext/vector_uint3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00232.html\">./ext/vector_uint4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00233.html\">./ext/vector_uint4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00009.html\">./gtc/bitfield.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00012.html\">./gtc/color_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00021.html\">./gtc/constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00024.html\">./gtc/epsilon.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00041.html\">./gtc/integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00058.html\">./gtc/matrix_access.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00100.html\">./gtc/matrix_integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00102.html\">./gtc/matrix_inverse.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00109.html\">./gtc/matrix_transform.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00112.html\">./gtc/noise.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00119.html\">./gtc/packing.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00125.html\">./gtc/quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00137.html\">./gtc/random.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00140.html\">./gtc/reciprocal.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00143.html\">./gtc/round.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">./gtc/type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00175.html\">./gtc/type_ptr.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00182.html\">./gtc/ulp.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00183.html\">./gtc/vec1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00161.html\">./gtc/type_aligned.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#ifdef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00007.html\">./gtx/associated_min_max.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00008.html\">./gtx/bit.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00010.html\">./gtx/closest_point.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00011.html\">./gtx/color_encoding.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00013.html\">./gtx/color_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00014.html\">./gtx/color_space_YCoCg.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00017.html\">./gtx/compatibility.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00018.html\">./gtx/component_wise.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00022.html\">./gtx/dual_quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00025.html\">./gtx/euler_angles.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00028.html\">./gtx/extend.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00029.html\">./gtx/extended_min_max.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00031.html\">./gtx/fast_exponential.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00032.html\">./gtx/fast_square_root.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00033.html\">./gtx/fast_trigonometry.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00034.html\">./gtx/functions.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00038.html\">./gtx/gradient_paint.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00039.html\">./gtx/handed_coordinate_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00042.html\">./gtx/integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00044.html\">./gtx/intersect.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00046.html\">./gtx/log_base.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00061.html\">./gtx/matrix_cross_product.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00101.html\">./gtx/matrix_interpolation.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00103.html\">./gtx/matrix_major_storage.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00104.html\">./gtx/matrix_operation.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00106.html\">./gtx/matrix_query.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00111.html\">./gtx/mixed_product.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00113.html\">./gtx/norm.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00114.html\">./gtx/normal.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00115.html\">./gtx/normalize_dot.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00116.html\">./gtx/number_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00117.html\">./gtx/optimum_pow.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00118.html\">./gtx/orthonormalize.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00121.html\">./gtx/perpendicular.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00122.html\">./gtx/polar_coordinates.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00123.html\">./gtx/projection.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00126.html\">./gtx/quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00139.html\">./gtx/raw_data.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00142.html\">./gtx/rotate_vector.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00154.html\">./gtx/spline.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00155.html\">./gtx/std_based_type.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">#if !(GLM_COMPILER &amp; GLM_COMPILER_CUDA)</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00156.html\">./gtx/string_cast.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00158.html\">./gtx/transform.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00159.html\">./gtx/transform2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00187.html\">./gtx/vec_swizzle.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00188.html\">./gtx/vector_angle.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00223.html\">./gtx/vector_query.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00235.html\">./gtx/wrap.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_TEMPLATE_ALIASES</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00148.html\">./gtx/scalar_multiplication.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00138.html\">./gtx/range.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#endif//GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"ttc\" id=\"a00024_html\"><div class=\"ttname\"><a href=\"a00024.html\">epsilon.hpp</a></div><div class=\"ttdoc\">GLM_GTC_epsilon </div></div>\n<div class=\"ttc\" id=\"a00224_html\"><div class=\"ttname\"><a href=\"a00224.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_relational </div></div>\n<div class=\"ttc\" id=\"a00022_html\"><div class=\"ttname\"><a href=\"a00022.html\">dual_quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTX_dual_quaternion </div></div>\n<div class=\"ttc\" id=\"a00122_html\"><div class=\"ttname\"><a href=\"a00122.html\">polar_coordinates.hpp</a></div><div class=\"ttdoc\">GLM_GTX_polar_coordinates </div></div>\n<div class=\"ttc\" id=\"a00010_html\"><div class=\"ttname\"><a href=\"a00010.html\">closest_point.hpp</a></div><div class=\"ttdoc\">GLM_GTX_closest_point </div></div>\n<div class=\"ttc\" id=\"a00210_html\"><div class=\"ttname\"><a href=\"a00210.html\">vector_float3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00093_html\"><div class=\"ttname\"><a href=\"a00093.html\">matrix_float3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">matrix_double2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00039_html\"><div class=\"ttname\"><a href=\"a00039.html\">handed_coordinate_space.hpp</a></div><div class=\"ttdoc\">GLM_GTX_handed_coordinate_space </div></div>\n<div class=\"ttc\" id=\"a00193_html\"><div class=\"ttname\"><a href=\"a00193.html\">vector_bool3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00139_html\"><div class=\"ttname\"><a href=\"a00139.html\">raw_data.hpp</a></div><div class=\"ttdoc\">GLM_GTX_raw_data </div></div>\n<div class=\"ttc\" id=\"a00091_html\"><div class=\"ttname\"><a href=\"a00091.html\">matrix_float3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">vector_bool2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00156_html\"><div class=\"ttname\"><a href=\"a00156.html\">string_cast.hpp</a></div><div class=\"ttdoc\">GLM_GTX_string_cast </div></div>\n<div class=\"ttc\" id=\"a00227_html\"><div class=\"ttname\"><a href=\"a00227.html\">vector_uint1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_uint1_precision </div></div>\n<div class=\"ttc\" id=\"a00044_html\"><div class=\"ttname\"><a href=\"a00044.html\">intersect.hpp</a></div><div class=\"ttdoc\">GLM_GTX_intersect </div></div>\n<div class=\"ttc\" id=\"a00215_html\"><div class=\"ttname\"><a href=\"a00215.html\">vector_int1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_int1_precision </div></div>\n<div class=\"ttc\" id=\"a00115_html\"><div class=\"ttname\"><a href=\"a00115.html\">normalize_dot.hpp</a></div><div class=\"ttdoc\">GLM_GTX_normalize_dot </div></div>\n<div class=\"ttc\" id=\"a00042_html\"><div class=\"ttname\"><a href=\"a00042.html\">integer.hpp</a></div><div class=\"ttdoc\">GLM_GTX_integer </div></div>\n<div class=\"ttc\" id=\"a00142_html\"><div class=\"ttname\"><a href=\"a00142.html\">rotate_vector.hpp</a></div><div class=\"ttdoc\">GLM_GTX_rotate_vector </div></div>\n<div class=\"ttc\" id=\"a00203_html\"><div class=\"ttname\"><a href=\"a00203.html\">vector_double3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00103_html\"><div class=\"ttname\"><a href=\"a00103.html\">matrix_major_storage.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_major_storage </div></div>\n<div class=\"ttc\" id=\"a00230_html\"><div class=\"ttname\"><a href=\"a00230.html\">vector_uint3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00201_html\"><div class=\"ttname\"><a href=\"a00201.html\">vector_double2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00088_html\"><div class=\"ttname\"><a href=\"a00088.html\">matrix_float3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00101_html\"><div class=\"ttname\"><a href=\"a00101.html\">matrix_interpolation.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_interpolation </div></div>\n<div class=\"ttc\" id=\"a00188_html\"><div class=\"ttname\"><a href=\"a00188.html\">vector_angle.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vector_angle </div></div>\n<div class=\"ttc\" id=\"a00159_html\"><div class=\"ttname\"><a href=\"a00159.html\">transform2.hpp</a></div><div class=\"ttdoc\">GLM_GTX_transform2 </div></div>\n<div class=\"ttc\" id=\"a00076_html\"><div class=\"ttname\"><a href=\"a00076.html\">matrix_double4x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00064_html\"><div class=\"ttname\"><a href=\"a00064.html\">matrix_double2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00235_html\"><div class=\"ttname\"><a href=\"a00235.html\">wrap.hpp</a></div><div class=\"ttdoc\">GLM_GTX_wrap </div></div>\n<div class=\"ttc\" id=\"a00223_html\"><div class=\"ttname\"><a href=\"a00223.html\">vector_query.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vector_query </div></div>\n<div class=\"ttc\" id=\"a00123_html\"><div class=\"ttname\"><a href=\"a00123.html\">projection.hpp</a></div><div class=\"ttdoc\">GLM_GTX_projection </div></div>\n<div class=\"ttc\" id=\"a00021_html\"><div class=\"ttname\"><a href=\"a00021.html\">constants.hpp</a></div><div class=\"ttdoc\">GLM_GTC_constants </div></div>\n<div class=\"ttc\" id=\"a00221_html\"><div class=\"ttname\"><a href=\"a00221.html\">vector_int4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00121_html\"><div class=\"ttname\"><a href=\"a00121.html\">perpendicular.hpp</a></div><div class=\"ttdoc\">GLM_GTX_perpendicular </div></div>\n<div class=\"ttc\" id=\"a00079_html\"><div class=\"ttname\"><a href=\"a00079.html\">matrix_double4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00096_html\"><div class=\"ttname\"><a href=\"a00096.html\">matrix_float4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00067_html\"><div class=\"ttname\"><a href=\"a00067.html\">matrix_double2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00196_html\"><div class=\"ttname\"><a href=\"a00196.html\">vector_bool4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00084_html\"><div class=\"ttname\"><a href=\"a00084.html\">matrix_float2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00155_html\"><div class=\"ttname\"><a href=\"a00155.html\">std_based_type.hpp</a></div><div class=\"ttdoc\">GLM_GTX_std_based_type </div></div>\n<div class=\"ttc\" id=\"a00082_html\"><div class=\"ttname\"><a href=\"a00082.html\">matrix_float2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00018_html\"><div class=\"ttname\"><a href=\"a00018.html\">component_wise.hpp</a></div><div class=\"ttdoc\">GLM_GTX_component_wise </div></div>\n<div class=\"ttc\" id=\"a00182_html\"><div class=\"ttname\"><a href=\"a00182.html\">ulp.hpp</a></div><div class=\"ttdoc\">GLM_GTC_ulp </div></div>\n<div class=\"ttc\" id=\"a00143_html\"><div class=\"ttname\"><a href=\"a00143.html\">round.hpp</a></div><div class=\"ttdoc\">GLM_GTC_round </div></div>\n<div class=\"ttc\" id=\"a00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">vector_int3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00118_html\"><div class=\"ttname\"><a href=\"a00118.html\">orthonormalize.hpp</a></div><div class=\"ttdoc\">GLM_GTX_orthonormalize </div></div>\n<div class=\"ttc\" id=\"a00070_html\"><div class=\"ttname\"><a href=\"a00070.html\">matrix_double3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">integer.hpp</a></div><div class=\"ttdoc\">GLM_GTC_integer </div></div>\n<div class=\"ttc\" id=\"a00206_html\"><div class=\"ttname\"><a href=\"a00206.html\">vector_float1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_float1 </div></div>\n<div class=\"ttc\" id=\"a00099_html\"><div class=\"ttname\"><a href=\"a00099.html\">matrix_float4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00106_html\"><div class=\"ttname\"><a href=\"a00106.html\">matrix_query.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_query </div></div>\n<div class=\"ttc\" id=\"a00199_html\"><div class=\"ttname\"><a href=\"a00199.html\">vector_double1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_double1_precision </div></div>\n<div class=\"ttc\" id=\"a00087_html\"><div class=\"ttname\"><a href=\"a00087.html\">matrix_float2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00187_html\"><div class=\"ttname\"><a href=\"a00187.html\">vec_swizzle.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vec_swizzle </div></div>\n<div class=\"ttc\" id=\"a00075_html\"><div class=\"ttname\"><a href=\"a00075.html\">matrix_double4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00175_html\"><div class=\"ttname\"><a href=\"a00175.html\">type_ptr.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_ptr </div></div>\n<div class=\"ttc\" id=\"a00063_html\"><div class=\"ttname\"><a href=\"a00063.html\">matrix_double2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00038_html\"><div class=\"ttname\"><a href=\"a00038.html\">gradient_paint.hpp</a></div><div class=\"ttdoc\">GLM_GTX_gradient_paint </div></div>\n<div class=\"ttc\" id=\"a00009_html\"><div class=\"ttname\"><a href=\"a00009.html\">bitfield.hpp</a></div><div class=\"ttdoc\">GLM_GTC_bitfield </div></div>\n<div class=\"ttc\" id=\"a00138_html\"><div class=\"ttname\"><a href=\"a00138.html\">range.hpp</a></div><div class=\"ttdoc\">GLM_GTX_range </div></div>\n<div class=\"ttc\" id=\"a00209_html\"><div class=\"ttname\"><a href=\"a00209.html\">vector_float2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00090_html\"><div class=\"ttname\"><a href=\"a00090.html\">matrix_float3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00109_html\"><div class=\"ttname\"><a href=\"a00109.html\">matrix_transform.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_transform </div></div>\n<div class=\"ttc\" id=\"a00061_html\"><div class=\"ttname\"><a href=\"a00061.html\">matrix_cross_product.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_cross_product </div></div>\n<div class=\"ttc\" id=\"a00190_html\"><div class=\"ttname\"><a href=\"a00190.html\">vector_bool1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_bool1_precision </div></div>\n<div class=\"ttc\" id=\"a00161_html\"><div class=\"ttname\"><a href=\"a00161.html\">type_aligned.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_aligned </div></div>\n<div class=\"ttc\" id=\"a00226_html\"><div class=\"ttname\"><a href=\"a00226.html\">vector_uint1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_uint1 </div></div>\n<div class=\"ttc\" id=\"a00126_html\"><div class=\"ttname\"><a href=\"a00126.html\">quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTX_quaternion </div></div>\n<div class=\"ttc\" id=\"a00014_html\"><div class=\"ttname\"><a href=\"a00014.html\">color_space_YCoCg.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_space_YCoCg </div></div>\n<div class=\"ttc\" id=\"a00214_html\"><div class=\"ttname\"><a href=\"a00214.html\">vector_int1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_int1 </div></div>\n<div class=\"ttc\" id=\"a00114_html\"><div class=\"ttname\"><a href=\"a00114.html\">normal.hpp</a></div><div class=\"ttdoc\">GLM_GTX_normal </div></div>\n<div class=\"ttc\" id=\"a00012_html\"><div class=\"ttname\"><a href=\"a00012.html\">color_space.hpp</a></div><div class=\"ttdoc\">GLM_GTC_color_space </div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00112_html\"><div class=\"ttname\"><a href=\"a00112.html\">noise.hpp</a></div><div class=\"ttdoc\">GLM_GTC_noise </div></div>\n<div class=\"ttc\" id=\"a00195_html\"><div class=\"ttname\"><a href=\"a00195.html\">vector_bool4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00200_html\"><div class=\"ttname\"><a href=\"a00200.html\">vector_double2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">matrix_float2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00100_html\"><div class=\"ttname\"><a href=\"a00100.html\">matrix_integer.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_integer </div></div>\n<div class=\"ttc\" id=\"a00058_html\"><div class=\"ttname\"><a href=\"a00058.html\">matrix_access.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_access </div></div>\n<div class=\"ttc\" id=\"a00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">extended_min_max.hpp</a></div><div class=\"ttdoc\">GLM_GTX_extented_min_max </div></div>\n<div class=\"ttc\" id=\"a00183_html\"><div class=\"ttname\"><a href=\"a00183.html\">vec1.hpp</a></div><div class=\"ttdoc\">GLM_GTC_vec1 </div></div>\n<div class=\"ttc\" id=\"a00158_html\"><div class=\"ttname\"><a href=\"a00158.html\">transform.hpp</a></div><div class=\"ttdoc\">GLM_GTX_transform </div></div>\n<div class=\"ttc\" id=\"a00229_html\"><div class=\"ttname\"><a href=\"a00229.html\">vector_uint2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00129_html\"><div class=\"ttname\"><a href=\"a00129.html\">quaternion_double_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_double_precision </div></div>\n<div class=\"ttc\" id=\"a00046_html\"><div class=\"ttname\"><a href=\"a00046.html\">log_base.hpp</a></div><div class=\"ttdoc\">GLM_GTX_log_base </div></div>\n<div class=\"ttc\" id=\"a00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">compatibility.hpp</a></div><div class=\"ttdoc\">GLM_GTX_compatibility </div></div>\n<div class=\"ttc\" id=\"a00146_html\"><div class=\"ttname\"><a href=\"a00146.html\">scalar_int_sized.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_int_sized </div></div>\n<div class=\"ttc\" id=\"a00217_html\"><div class=\"ttname\"><a href=\"a00217.html\">vector_int2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00117_html\"><div class=\"ttname\"><a href=\"a00117.html\">optimum_pow.hpp</a></div><div class=\"ttdoc\">GLM_GTX_optimum_pow </div></div>\n<div class=\"ttc\" id=\"a00034_html\"><div class=\"ttname\"><a href=\"a00034.html\">functions.hpp</a></div><div class=\"ttdoc\">GLM_GTX_functions </div></div>\n<div class=\"ttc\" id=\"a00134_html\"><div class=\"ttname\"><a href=\"a00134.html\">quaternion_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_relational </div></div>\n<div class=\"ttc\" id=\"a00205_html\"><div class=\"ttname\"><a href=\"a00205.html\">vector_double4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00032_html\"><div class=\"ttname\"><a href=\"a00032.html\">fast_square_root.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_square_root </div></div>\n<div class=\"ttc\" id=\"a00232_html\"><div class=\"ttname\"><a href=\"a00232.html\">vector_uint4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00132_html\"><div class=\"ttname\"><a href=\"a00132.html\">quaternion_float_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_float_precision </div></div>\n<div class=\"ttc\" id=\"a00220_html\"><div class=\"ttname\"><a href=\"a00220.html\">vector_int4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00078_html\"><div class=\"ttname\"><a href=\"a00078.html\">matrix_double4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00149_html\"><div class=\"ttname\"><a href=\"a00149.html\">scalar_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_relational </div></div>\n<div class=\"ttc\" id=\"a00066_html\"><div class=\"ttname\"><a href=\"a00066.html\">matrix_double2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00037_html\"><div class=\"ttname\"><a href=\"a00037.html\">glm.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00137_html\"><div class=\"ttname\"><a href=\"a00137.html\">random.hpp</a></div><div class=\"ttdoc\">GLM_GTC_random </div></div>\n<div class=\"ttc\" id=\"a00025_html\"><div class=\"ttname\"><a href=\"a00025.html\">euler_angles.hpp</a></div><div class=\"ttdoc\">GLM_GTX_euler_angles </div></div>\n<div class=\"ttc\" id=\"a00154_html\"><div class=\"ttname\"><a href=\"a00154.html\">spline.hpp</a></div><div class=\"ttdoc\">GLM_GTX_spline </div></div>\n<div class=\"ttc\" id=\"a00125_html\"><div class=\"ttname\"><a href=\"a00125.html\">quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTC_quaternion </div></div>\n<div class=\"ttc\" id=\"a00013_html\"><div class=\"ttname\"><a href=\"a00013.html\">color_space.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_space </div></div>\n<div class=\"ttc\" id=\"a00213_html\"><div class=\"ttname\"><a href=\"a00213.html\">vector_float4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00113_html\"><div class=\"ttname\"><a href=\"a00113.html\">norm.hpp</a></div><div class=\"ttdoc\">GLM_GTX_norm </div></div>\n<div class=\"ttc\" id=\"a00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">color_encoding.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_encoding </div></div>\n<div class=\"ttc\" id=\"a00140_html\"><div class=\"ttname\"><a href=\"a00140.html\">reciprocal.hpp</a></div><div class=\"ttdoc\">GLM_GTC_reciprocal </div></div>\n<div class=\"ttc\" id=\"a00211_html\"><div class=\"ttname\"><a href=\"a00211.html\">vector_float3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">matrix_float4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00111_html\"><div class=\"ttname\"><a href=\"a00111.html\">mixed_product.hpp</a></div><div class=\"ttdoc\">GLM_GTX_mixed_producte </div></div>\n<div class=\"ttc\" id=\"a00069_html\"><div class=\"ttname\"><a href=\"a00069.html\">matrix_double3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00198_html\"><div class=\"ttname\"><a href=\"a00198.html\">vector_double1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_double1 </div></div>\n<div class=\"ttc\" id=\"a00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">matrix_float2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">matrix_double3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n<div class=\"ttc\" id=\"a00145_html\"><div class=\"ttname\"><a href=\"a00145.html\">scalar_constants.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_constants </div></div>\n<div class=\"ttc\" id=\"a00072_html\"><div class=\"ttname\"><a href=\"a00072.html\">matrix_double3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00033_html\"><div class=\"ttname\"><a href=\"a00033.html\">fast_trigonometry.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_trigonometry </div></div>\n<div class=\"ttc\" id=\"a00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">bit.hpp</a></div><div class=\"ttdoc\">GLM_GTX_bit </div></div>\n<div class=\"ttc\" id=\"a00233_html\"><div class=\"ttname\"><a href=\"a00233.html\">vector_uint4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00133_html\"><div class=\"ttname\"><a href=\"a00133.html\">quaternion_geometric.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_geometric </div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00031_html\"><div class=\"ttname\"><a href=\"a00031.html\">fast_exponential.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_exponential </div></div>\n<div class=\"ttc\" id=\"a00231_html\"><div class=\"ttname\"><a href=\"a00231.html\">vector_uint3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00131_html\"><div class=\"ttname\"><a href=\"a00131.html\">quaternion_float.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_float </div></div>\n<div class=\"ttc\" id=\"a00089_html\"><div class=\"ttname\"><a href=\"a00089.html\">matrix_float3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00189_html\"><div class=\"ttname\"><a href=\"a00189.html\">vector_bool1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_bool1 </div></div>\n<div class=\"ttc\" id=\"a00077_html\"><div class=\"ttname\"><a href=\"a00077.html\">matrix_double4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00094_html\"><div class=\"ttname\"><a href=\"a00094.html\">matrix_float4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00065_html\"><div class=\"ttname\"><a href=\"a00065.html\">matrix_double2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00194_html\"><div class=\"ttname\"><a href=\"a00194.html\">vector_bool3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">matrix_float3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00028_html\"><div class=\"ttname\"><a href=\"a00028.html\">extend.hpp</a></div><div class=\"ttdoc\">GLM_GTX_extend </div></div>\n<div class=\"ttc\" id=\"a00192_html\"><div class=\"ttname\"><a href=\"a00192.html\">vector_bool2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00128_html\"><div class=\"ttname\"><a href=\"a00128.html\">quaternion_double.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_double </div></div>\n<div class=\"ttc\" id=\"a00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">matrix_double4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00216_html\"><div class=\"ttname\"><a href=\"a00216.html\">vector_int2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00116_html\"><div class=\"ttname\"><a href=\"a00116.html\">number_precision.hpp</a></div><div class=\"ttdoc\">GLM_GTX_number_precision </div></div>\n<div class=\"ttc\" id=\"a00204_html\"><div class=\"ttname\"><a href=\"a00204.html\">vector_double4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00097_html\"><div class=\"ttname\"><a href=\"a00097.html\">matrix_float4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00104_html\"><div class=\"ttname\"><a href=\"a00104.html\">matrix_operation.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_operation </div></div>\n<div class=\"ttc\" id=\"a00202_html\"><div class=\"ttname\"><a href=\"a00202.html\">vector_double3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00085_html\"><div class=\"ttname\"><a href=\"a00085.html\">matrix_float2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00102_html\"><div class=\"ttname\"><a href=\"a00102.html\">matrix_inverse.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_inverse </div></div>\n<div class=\"ttc\" id=\"a00073_html\"><div class=\"ttname\"><a href=\"a00073.html\">matrix_double3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00148_html\"><div class=\"ttname\"><a href=\"a00148.html\">scalar_multiplication.hpp</a></div><div class=\"ttdoc\">Experimental extensions </div></div>\n<div class=\"ttc\" id=\"a00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">vector_int3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">packing.hpp</a></div><div class=\"ttdoc\">GLM_GTC_packing </div></div>\n<div class=\"ttc\" id=\"a00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">matrix_double3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00007_html\"><div class=\"ttname\"><a href=\"a00007.html\">associated_min_max.hpp</a></div><div class=\"ttdoc\">GLM_GTX_associated_min_max </div></div>\n<div class=\"ttc\" id=\"a00207_html\"><div class=\"ttname\"><a href=\"a00207.html\">vector_float1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_float1_precision </div></div>\n<div class=\"ttc\" id=\"a00107_html\"><div class=\"ttname\"><a href=\"a00107.html\">matrix_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_matrix_relational </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00028.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extend.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">extend.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00028_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a> (genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</td></tr>\n<tr class=\"memdesc:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extends of Length the Origin position using the (Source - Origin) direction.  <a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00028_source.html\">extend.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00028_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extend.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">extend.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00028.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                genType <span class=\"keyword\">const</span>&amp; Origin,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; Source,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> Length);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;extend.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00320_html_ga8140caae613b0f847ab0d7175dc03a37\"><div class=\"ttname\"><a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">glm::extend</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType extend(genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</div><div class=\"ttdoc\">Extends of Length the Origin position using the (Source - Origin) direction. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00029.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extended_min_max.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">extended_min_max.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00029_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">fclamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:ga60796d08903489ee185373593bc16b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60796d08903489ee185373593bc16b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga95466987024d03039607f09e69813d69\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga95466987024d03039607f09e69813d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga95466987024d03039607f09e69813d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95466987024d03039607f09e69813d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00029_source.html\">extended_min_max.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00029_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extended_min_max.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">extended_min_max.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00029.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extented_min_max extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(genType x, genType minVal, genType maxVal);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T minVal, T maxVal);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; minVal, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; maxVal);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#include &quot;extended_min_max.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00321_html_ga5c15fa4709763c269c86c0b8b3aa2297\"><div class=\"ttname\"><a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">glm::fclamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</div><div class=\"ttdoc\">Returns min(max(x, minVal), maxVal) for each component in x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gaa3200559611ac5b9b9ae7283547916a7\"><div class=\"ttname\"><a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fmin(genType x, genType y)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gae5792cb2b51190057e4aea027eb56f81\"><div class=\"ttname\"><a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fmax(genType x, genType y)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gaacffbc466c2d08c140b181e7fd8a4858\"><div class=\"ttname\"><a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL C&lt; T &gt; max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</div><div class=\"ttdoc\">Return the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00321_html_ga7471ea4159eed8dd9ea4ac5d46c2fead\"><div class=\"ttname\"><a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL C&lt; T &gt; min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</div><div class=\"ttdoc\">Return the minimum component-wise values of 4 inputs. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00030.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exterior_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">exterior_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00030_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a> (vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</td></tr>\n<tr class=\"memdesc:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">More...</a><br /></td></tr>\n<tr class=\"separator:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00322.html\" title=\"Include <glm/gtx/exterior_product.hpp> to use the features of this extension. \">GLM_GTX_exterior_product</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00030_source.html\">exterior_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00030_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exterior_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">exterior_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00030.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_exterior_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; u);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;exterior_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00322_html_gac36e72b934ea6a9dd313772d7e78fa93\"><div class=\"ttname\"><a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</div><div class=\"ttdoc\">Returns the cross product of x and y. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00031.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00031_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">fastExp</a> (T x)</td></tr>\n<tr class=\"memdesc:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">fastExp2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0af50585955eb14c60bb286297fabab2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">fastLog</a> (T x)</td></tr>\n<tr class=\"memdesc:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log function but less accurate.  <a href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga937256993a7219e73f186bb348fe6be8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">fastLog2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7562043539194ccc24649f8475bc5584\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7562043539194ccc24649f8475bc5584\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">fastPow</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">fastPow</a> (genTypeT x, genTypeU y)</td></tr>\n<tr class=\"memdesc:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> </p>\n<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>\n<dd>\ngtx_half_float (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00031_source.html\">fast_exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00031_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00031.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_exponential extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genTypeT, <span class=\"keyword\">typename</span> genTypeU&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genTypeT <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(genTypeT x, genTypeU y);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a>(T x);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a>(T x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a>(T x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a>(T x);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#include &quot;fast_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00323_html_ga937256993a7219e73f186bb348fe6be8\"><div class=\"ttname\"><a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">glm::fastLog</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastLog(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga1abe488c0829da5b9de70ac64aeaa7e5\"><div class=\"ttname\"><a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">glm::fastPow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastPow(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common pow function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga7562043539194ccc24649f8475bc5584\"><div class=\"ttname\"><a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">glm::fastLog2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastLog2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common log2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_gacaaed8b67d20d244b7de217e7816c1b6\"><div class=\"ttname\"><a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">glm::fastExp2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastExp2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga3ba6153aec6bd74628f8b00530aa8d58\"><div class=\"ttname\"><a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">glm::fastExp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastExp(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp function but less accurate. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00032.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_square_root.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_square_root.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00032_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">fastDistance</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">fastInverseSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">More...</a><br /></td></tr>\n<tr class=\"separator:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">fastLength</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafe697d6287719538346bbdf8b1367c59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common normalize function but less accurate.  <a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">fastSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00032_source.html\">fast_square_root.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00032_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_square_root.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_square_root.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00032.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_square_root extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;fast_square_root.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00324_html_ga90f66be92ef61e705c005e7b3209edb8\"><div class=\"ttname\"><a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">glm::fastLength</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastLength(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common length function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_ga42d3e771fa7cb3c60d828e315829df19\"><div class=\"ttname\"><a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">glm::fastDistance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Faster than the common distance function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_gae83f0c03614f73eae5478c5b6274ee6d\"><div class=\"ttname\"><a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">glm::fastSqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common sqrt function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_ga3b02c1d6e0c754144e2f1e110bf9f16c\"><div class=\"ttname\"><a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">glm::fastNormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fastNormalize(genType const &amp;x)</div><div class=\"ttdoc\">Faster than the common normalize function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_gadcd7be12b1e5ee182141359d4c45dd24\"><div class=\"ttname\"><a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">glm::fastInverseSqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common inversesqrt function but less accurate. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00033.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_trigonometry.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_trigonometry.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00033_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common acos function but less accurate.  <a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common asin function but less accurate.  <a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">fastAtan</a> (T y, T x)</td></tr>\n<tr class=\"memdesc:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gae25de86a968490ff56856fa425ec9d30\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">More...</a><br /></td></tr>\n<tr class=\"separator:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a> (T angle)</td></tr>\n<tr class=\"memdesc:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common cos function but less accurate.  <a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sin function but less accurate.  <a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common tan function but less accurate.  <a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.  <a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">More...</a><br /></td></tr>\n<tr class=\"separator:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00033_source.html\">fast_trigonometry.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00033_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_trigonometry.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_trigonometry.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00033.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_trigonometry extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a>(T y, T x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#include &quot;fast_trigonometry.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00325_html_ga562cb62c51fbfe7fac7db0bce706b81f\"><div class=\"ttname\"><a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">glm::fastAsin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAsin(T angle)</div><div class=\"ttdoc\">Faster than the common asin function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga9721d63356e5d94fdc4b393a426ab26b\"><div class=\"ttname\"><a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">glm::fastAcos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAcos(T angle)</div><div class=\"ttdoc\">Faster than the common acos function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gaf29b9c1101a10007b4f79ee89df27ba2\"><div class=\"ttname\"><a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">glm::fastTan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastTan(T angle)</div><div class=\"ttdoc\">Faster than the common tan function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gab34c8b45c23c0165a64dcecfcc3b302a\"><div class=\"ttname\"><a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">glm::fastCos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastCos(T angle)</div><div class=\"ttdoc\">Faster than the common cos function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gae25de86a968490ff56856fa425ec9d30\"><div class=\"ttname\"><a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">glm::fastAtan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAtan(T angle)</div><div class=\"ttdoc\">Faster than the common atan function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga0aab3257bb3b628d10a1e0483e2c6915\"><div class=\"ttname\"><a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">glm::fastSin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastSin(T angle)</div><div class=\"ttdoc\">Faster than the common sin function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga069527c6dbd64f53435b8ebc4878b473\"><div class=\"ttname\"><a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">glm::wrapAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T wrapAngle(T angle)</div><div class=\"ttdoc\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00034.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: functions.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">functions.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00034_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>\n<tr class=\"memdesc:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1D gauss function  <a href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a> (vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</td></tr>\n<tr class=\"memdesc:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2D gauss function  <a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00034_source.html\">functions.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00034_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: functions.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">functions.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00034.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_functions extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a>(</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                T x,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                T ExpectedValue,</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                T StandardDeviation);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Coord,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; ExpectedValue,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; StandardDeviation);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#include &quot;functions.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"ttc\" id=\"a00326_html_gad19ec8754a83c0b9a8dc16b7e60705ab\"><div class=\"ttname\"><a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">glm::gauss</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</div><div class=\"ttdoc\">2D gauss function </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00035_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fwd.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fwd.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>                             int8;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>                    int16;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>                    int32;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>                    <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>                    uint8;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>                   uint16;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>                   uint32;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>                   <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">char</span>                             int8;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">short</span>                    int16;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                              int32;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a>                   <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>                   uint8;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span>                  uint16;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>                    uint32;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a>                  <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"comment\">// Scalar int</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">   36</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">   42</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">   43</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">   48</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">   50</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">   52</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">   56</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">   59</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">   60</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">   62</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">   65</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">   68</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">   70</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">   71</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">   74</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">   76</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">   79</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">   80</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">   82</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">   83</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">   85</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"comment\">// Scalar uint</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">   89</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">   91</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">   92</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">   95</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">   98</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">  100</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">  101</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">  104</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">  106</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">  109</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">  110</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">  112</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">  113</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">  118</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">  122</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">  124</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">  128</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">  129</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">  131</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">  132</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">  133</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">  134</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">  136</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">  137</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">  138</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">  141</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">  142</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">  143</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"comment\">// Scalar float</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">  147</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">  148</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">  150</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">  152</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">  153</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a>;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">  154</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">  155</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">  157</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">  158</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">  159</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">  160</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">  163</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">  164</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">  165</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">  166</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">  168</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">  169</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">  170</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">  171</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">  174</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">  175</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">  176</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"comment\">// Vector bool</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, lowp&gt;              <a class=\"code\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, mediump&gt;   <a class=\"code\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, highp&gt;             <a class=\"code\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, defaultp&gt;  <a class=\"code\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        <span class=\"comment\">// Vector int</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;    <a class=\"code\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt;   <a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">  222</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">  223</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">  224</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">  225</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">  227</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">  228</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">  229</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">  230</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">  232</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">  233</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">  234</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">  237</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">  238</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">  239</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">  240</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">  242</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">  243</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">  244</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">  245</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">  247</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">  248</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">  249</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">  250</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">  252</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">  253</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">  254</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">  255</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">  257</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">  258</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">  259</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">  260</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">  262</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">  263</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">  264</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">  265</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">  267</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">  269</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">  270</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">  272</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">  273</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">  274</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">  275</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">  277</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">  278</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">  279</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">  282</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">  283</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">  284</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">  285</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">  287</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">  288</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">  290</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">  292</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">  293</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">  294</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">  295</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">  297</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">  299</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">  300</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"comment\">// Vector uint</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;    <a class=\"code\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt;   <a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">  324</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">  325</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">  326</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">  327</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">  329</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">  331</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">  332</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">  334</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">  335</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">  336</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">  337</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">  339</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">  340</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">  341</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">  342</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">  344</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">  345</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">  346</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">  347</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">  349</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">  350</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">  351</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">  352</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">  354</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">  355</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">  356</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">  357</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">  359</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">  360</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">  361</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">  362</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">  364</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">  365</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">  367</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">  369</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">  370</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">  371</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">  372</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">  374</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">  375</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">  376</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">  377</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">  379</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">  380</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">  381</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">  382</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">  384</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">  385</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">  386</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">  387</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">  389</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">  391</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">  392</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">  394</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">  395</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">  396</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">  397</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">  399</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">  400</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">  401</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        <span class=\"comment\">// Vector float</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt;         <a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">  426</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">  427</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">  428</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">  429</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">  431</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">  432</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">  433</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">  434</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">  436</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">  437</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">  438</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">  439</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">  441</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">  442</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">  444</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">  446</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">  447</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">  448</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">  449</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">  452</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">  453</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">  454</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">  456</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">  457</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">  458</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">  459</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">  461</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">  462</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">  464</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt;                       <a class=\"code\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt;            <a class=\"code\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt;                      <a class=\"code\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt;           <a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">  486</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">  487</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">  488</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">  489</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">  491</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">  492</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">  493</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">  494</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">  496</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">  497</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">  498</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">  499</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">  501</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">  502</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">  503</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">  504</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;        <span class=\"comment\">// Matrix NxN</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">  524</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">  525</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">  526</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">  528</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">  529</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">  530</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">  532</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">  533</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">  534</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">  536</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">  537</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">  538</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">  540</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">  541</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">  542</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">  544</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">  545</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">  546</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">  548</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">  549</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">  550</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">  552</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">  553</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">  554</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">  572</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">  573</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">  574</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">  576</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">  577</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">  578</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">  580</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">  581</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">  582</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">  584</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">  585</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">  586</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        <span class=\"comment\">// Matrix MxN</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">  630</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">  631</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">  632</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">  633</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">  634</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">  635</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">  636</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">  637</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">  638</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">  640</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">  641</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">  642</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">  643</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">  644</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">  645</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">  646</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">  647</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">  648</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">  650</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">  651</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">  652</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">  653</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">  654</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">  655</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">  656</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">  657</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">  658</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">  660</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">  661</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">  662</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">  663</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">  664</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">  665</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">  666</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">  667</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">  668</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">  670</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">  671</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">  672</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">  673</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">  674</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">  675</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">  676</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">  677</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">  678</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">  680</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">  681</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">  682</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">  683</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">  684</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">  685</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">  686</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">  687</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">  688</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">  690</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">  691</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">  692</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">  693</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">  694</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">  695</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">  696</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">  697</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">  698</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">  700</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">  701</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">  702</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">  703</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">  704</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">  705</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">  706</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">  707</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">  708</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">  750</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">  751</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">  752</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">  753</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">  754</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">  755</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">  756</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">  757</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">  758</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">  760</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">  761</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">  762</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">  763</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">  764</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">  765</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">  766</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">  767</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">  768</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">  770</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">  771</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">  772</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">  773</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">  774</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">  775</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">  776</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">  777</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">  778</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">  780</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">  781</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">  782</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">  783</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">  784</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">  785</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">  786</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">  787</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">  788</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"comment\">// Quaternion</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                        <a class=\"code\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;                     <a class=\"code\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a>;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;                       <a class=\"code\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            <a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>;</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                        lowp_fquat;</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;                     mediump_fquat;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;                       highp_fquat;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            fquat;</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">  802</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, lowp&gt;                          <a class=\"code\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">  803</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, mediump&gt;                       <a class=\"code\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">  804</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, highp&gt;                         <a class=\"code\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">  805</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, defaultp&gt;                      <a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, lowp&gt;                       <a class=\"code\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, mediump&gt;            <a class=\"code\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, highp&gt;                      <a class=\"code\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, defaultp&gt;           <a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">  812</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, lowp&gt;                          <a class=\"code\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">  813</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, mediump&gt;                       <a class=\"code\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">  814</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, highp&gt;                         <a class=\"code\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">  815</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, defaultp&gt;                      <a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"ttc\" id=\"a00304_html_gad064202b4cf9a2972475c03de657cb39\"><div class=\"ttname\"><a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">glm::highp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, highp &gt; highp_u16vec1</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00354\">fwd.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad75706b70545412ba9ac27d5ee210f66\"><div class=\"ttname\"><a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">glm::mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, mediump &gt; mediump_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00022\">matrix_float4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga602e119c6b246b4f6edcf66845f2aa0f\"><div class=\"ttname\"><a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">glm::highp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00696\">fwd.hpp:696</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga8d5a4e65fb976e4553b84995b95ecb38\"><div class=\"ttname\"><a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">glm::highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; highp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00028\">matrix_float4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga64ed0deb6573375b7016daf82ffd53a7\"><div class=\"ttname\"><a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">glm::mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, mediump &gt; mediump_uvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00022\">vector_uint4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac30fdf8afa489400053275b6a3350127\"><div class=\"ttname\"><a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">glm::mediump_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, mediump &gt; mediump_f64vec1</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00491\">fwd.hpp:491</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga74e9133378fd0b4da8ac0bc0876702ff\"><div class=\"ttname\"><a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">glm::mediump_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00528\">fwd.hpp:528</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaeeb0077198cff40e3f48b1108ece139\"><div class=\"ttname\"><a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">glm::highp_float64_t</a></div><div class=\"ttdeci\">double highp_float64_t</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00175\">fwd.hpp:175</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0ecd3f4952536e5ef12702b44d2626fc\"><div class=\"ttname\"><a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">glm::f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00586\">fwd.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_gad628c608970b3d0aa6cfb63ce6e53e56\"><div class=\"ttname\"><a href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">glm::mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, mediump &gt; mediump_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00028\">vector_int1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga23a8bca00914a51542bfea13a4778186\"><div class=\"ttname\"><a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">glm::mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, mediump &gt; mediump_dvec4</div><div class=\"ttdoc\">4 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00025\">vector_double4_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaca61dfaccbf2f58f2d8063a4e76b44a9\"><div class=\"ttname\"><a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">glm::highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_vec3</div><div class=\"ttdoc\">3 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00016\">vector_float3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga382dc5295cead78766239a8457abfa98\"><div class=\"ttname\"><a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">glm::lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00016\">matrix_double4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9771450a54785d13080cdde0fe20c1d\"><div class=\"ttname\"><a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">glm::f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00584\">fwd.hpp:584</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41ad497f7eae211556aefd783cb02b90\"><div class=\"ttname\"><a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">glm::mediump_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00647\">fwd.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaaf878d0d7bfc0aac054fe269a886ca8\"><div class=\"ttname\"><a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">glm::mediump_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00545\">fwd.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gabc0f2f4ad21c90b341881cf056f8650e\"><div class=\"ttname\"><a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">glm::mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00040\">matrix_float3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98a687c17b174ea316b5f397b64f44bc\"><div class=\"ttname\"><a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">glm::mediump_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00640\">fwd.hpp:640</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga14c90ca49885723f51d06e295587236f\"><div class=\"ttname\"><a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">glm::highp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00550\">fwd.hpp:550</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gaa2fd8085774376310aeb80588e0eab6e\"><div class=\"ttname\"><a href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">glm::highp_quat</a></div><div class=\"ttdeci\">qua&lt; float, highp &gt; highp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00032\">quaternion_float_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadbb198a4d7aad82a0f4dc466ef6f6215\"><div class=\"ttname\"><a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">glm::highp_float64</a></div><div class=\"ttdeci\">double highp_float64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00170\">fwd.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2076157df85e49b8c021e03e46a376c1\"><div class=\"ttname\"><a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">glm::mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00022\">matrix_double3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1e0ea3fba496bc7c6f620d2590acb66b\"><div class=\"ttname\"><a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">glm::lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00016\">matrix_double3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b69181efbf8f37ae934f135137b29c0\"><div class=\"ttname\"><a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">glm::f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00585\">fwd.hpp:585</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa18f6b80b41c214f10666948539c1f93\"><div class=\"ttname\"><a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">glm::highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; highp_ivec2</div><div class=\"ttdoc\">2 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00016\">vector_int2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gacf237c2d8832fe8db2d7e187585d34bd\"><div class=\"ttname\"><a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">glm::highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00028\">matrix_double4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga497d513d552d927537d61fa11e3701ab\"><div class=\"ttname\"><a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">glm::mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, mediump &gt; mediump_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00022\">matrix_float2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3714dab2c16a6545a405cb0c3b3aaa6f\"><div class=\"ttname\"><a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">glm::lowp_float64</a></div><div class=\"ttdeci\">double lowp_float64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00168\">fwd.hpp:168</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf306dd69e53633636aee38cea79d4cb7\"><div class=\"ttname\"><a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">glm::mediump_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00762\">fwd.hpp:762</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad23b1be9b3bf20352089a6b738f0ebba\"><div class=\"ttname\"><a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">glm::highp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, highp &gt; highp_i64vec4</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00295\">fwd.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5389b3ab32dc0d72bea00057ab6d1dd3\"><div class=\"ttname\"><a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">glm::mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00040\">matrix_double4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab654f4ed4a99d64a6cfc65320c2a7590\"><div class=\"ttname\"><a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">glm::highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; highp_dvec4</div><div class=\"ttdoc\">4 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00018\">vector_double4_precision.hpp:18</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4541dc2feb2a31d6ecb5a303f3dd3280\"><div class=\"ttname\"><a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">glm::fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00536\">fwd.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga93add35d2a44c5830978b827e8c295e8\"><div class=\"ttname\"><a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">glm::lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00016\">matrix_double3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a32c31f4e2e8ca859663b6e3289a2d\"><div class=\"ttname\"><a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">glm::lowp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_fvec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00427\">fwd.hpp:427</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1c38778c0b5a1263f07753c05a4f7b9\"><div class=\"ttname\"><a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">glm::mediump_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00530\">fwd.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bba0ce31210e274f73efacd3364c03f\"><div class=\"ttname\"><a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">glm::lowp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00524\">fwd.hpp:524</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga40b5c557efebb5bb99d6b9aa81095afa\"><div class=\"ttname\"><a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">glm::lowp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_fvec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00428\">fwd.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44bfa55cda5dbf53f24a1fb7610393d6\"><div class=\"ttname\"><a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">glm::mediump_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_fvec2</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00432\">fwd.hpp:432</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga7a0e3fe41512b0494e598f5c58722f19\"><div class=\"ttname\"><a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">glm::highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; highp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00028\">matrix_float2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28733aec7288191b314d42154fd0b690\"><div class=\"ttname\"><a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">glm::lowp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00635\">fwd.hpp:635</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga771fda9109933db34f808d92b9b84d7e\"><div class=\"ttname\"><a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">glm::lowp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00750\">fwd.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga859be7b9d3a3765c1cafc14dbcf249a6\"><div class=\"ttname\"><a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">glm::lowp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, lowp &gt; lowp_u64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00384\">fwd.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6205fd19be355600334edef6af0b27cb\"><div class=\"ttname\"><a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">glm::mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00022\">matrix_double2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga400ce8cc566de093a9b28e59e220d6e4\"><div class=\"ttname\"><a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">glm::mediump_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, mediump &gt; mediump_u16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00349\">fwd.hpp:349</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa92c1954d71b1e7914874bd787b43d1c\"><div class=\"ttname\"><a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">glm::highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_vec2</div><div class=\"ttdoc\">2 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00016\">vector_float2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafd9a6ebc0c7b95f5c581d00d16a17c54\"><div class=\"ttname\"><a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">glm::mediump_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00761\">fwd.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4502885718742aa238c36a312c3f3f20\"><div class=\"ttname\"><a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">glm::lowp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, lowp &gt; lowp_u32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00367\">fwd.hpp:367</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0f038d4e09862a74f03d102c59eda73e\"><div class=\"ttname\"><a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">glm::highp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, highp &gt; highp_f32vec4</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00459\">fwd.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga43e5b41c834fcaf4db5a831c0e28128e\"><div class=\"ttname\"><a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">glm::lowp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, lowp &gt; lowp_f32vec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00446\">fwd.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0aeb5cb001473b08c88175012708a379\"><div class=\"ttname\"><a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">glm::highp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00691\">fwd.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20bf224bd4f8a24ecc4ed2004a40c219\"><div class=\"ttname\"><a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">glm::mediump_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, mediump &gt; mediump_i32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00268\">fwd.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_gaf906eb86b6e96c35138d0e4928e1435a\"><div class=\"ttname\"><a href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">glm::lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, lowp &gt; lowp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00033\">vector_double1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7451266e67794bd1125163502bc4a570\"><div class=\"ttname\"><a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">glm::lowp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00574\">fwd.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8cb400c0f4438f2640035d7b9824a0ca\"><div class=\"ttname\"><a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">glm::fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00538\">fwd.hpp:538</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaefe8ef520c6cb78590ebbefe648da4d4\"><div class=\"ttname\"><a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">glm::mediump_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00645\">fwd.hpp:645</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cab80beee64a5f8d2ae4e823983063a\"><div class=\"ttname\"><a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">glm::lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00016\">matrix_double3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadf70eaaa230aeed5a4c9f4c9c5c55902\"><div class=\"ttname\"><a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">glm::highp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, highp &gt; highp_i32vec4</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00275\">fwd.hpp:275</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae54e4d1aeb5a0f0c64822e6f1b299e19\"><div class=\"ttname\"><a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">glm::highp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00653\">fwd.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa03f939d90d5ef157df957d93f0b9a64\"><div class=\"ttname\"><a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">glm::mediump_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00641\">fwd.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga49b98e7d71804af45d86886a489e633c\"><div class=\"ttname\"><a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">glm::lowp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00633\">fwd.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3eee3a74d0f1de8635d846dfb29ec4bb\"><div class=\"ttname\"><a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">glm::lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, lowp &gt; lowp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00016\">matrix_float2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae400c4ce1f5f3e1fa12861b2baed331a\"><div class=\"ttname\"><a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">glm::lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00016\">matrix_float2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga17d36f0ea22314117e1cec9594b33945\"><div class=\"ttname\"><a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">glm::mediump_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00766\">fwd.hpp:766</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga15ac87724048ab7169bb5d3572939dd3\"><div class=\"ttname\"><a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">glm::lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, lowp &gt; lowp_bvec4</div><div class=\"ttdoc\">4 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00028\">vector_bool4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga791b15ceb3f1e09d1a0ec6f3057ca159\"><div class=\"ttname\"><a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">glm::highp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, highp &gt; highp_u16vec2</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00355\">fwd.hpp:355</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62c31b133ceee9984fbee05ac4c434a9\"><div class=\"ttname\"><a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">glm::highp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, highp &gt; highp_f64vec1</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00496\">fwd.hpp:496</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b5e2c9aaa5d7717bf71179aefa12e88\"><div class=\"ttname\"><a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">glm::mediump_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, mediump &gt; mediump_i16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00248\">fwd.hpp:248</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4920a1536f161f7ded1d6909b7fef0d2\"><div class=\"ttname\"><a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">glm::highp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00652\">fwd.hpp:652</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac53f9d7ab04eace67adad026092fb1e8\"><div class=\"ttname\"><a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">glm::lowp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00673\">fwd.hpp:673</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0be2c682258604a35004f088782a9645\"><div class=\"ttname\"><a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">glm::mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, mediump &gt; mediump_bvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00022\">vector_bool4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga38fde73aaf1420175ece8d4882558a3f\"><div class=\"ttname\"><a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">glm::mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, mediump &gt; mediump_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00032\">vector_uint1_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62324224b9c6cce9c6b4db96bb704a8a\"><div class=\"ttname\"><a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">glm::highp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, highp &gt; highp_i64vec3</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00294\">fwd.hpp:294</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga0a57630f03031706b1d26a7d70d9184c\"><div class=\"ttname\"><a href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">glm::lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00033\">vector_float1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab005efe0fa4de1a928e8ddec4bc2c43f\"><div class=\"ttname\"><a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">glm::mediump_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00686\">fwd.hpp:686</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2ea82e12f4d7afcfce8f59894d400230\"><div class=\"ttname\"><a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">glm::highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00046\">matrix_float3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae7a4711107b7d078fc5f03ce2227b90b\"><div class=\"ttname\"><a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">glm::lowp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, lowp &gt; lowp_f64vec3</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00488\">fwd.hpp:488</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga63362cb4a63fc1be7d2e49cd5d574c84\"><div class=\"ttname\"><a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">glm::lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00034\">matrix_float3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><div class=\"ttname\"><a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">glm::lowp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, lowp &gt; lowp_i64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00284\">fwd.hpp:284</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a8bdc32184ea0a522ef7bd90640cf67\"><div class=\"ttname\"><a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">glm::mediump_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, mediump &gt; mediump_i8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00228\">fwd.hpp:228</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gace3acb313c800552a9411953eb8b2ed7\"><div class=\"ttname\"><a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">glm::lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_vec4</div><div class=\"ttdoc\">4 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00028\">vector_float4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae220fa4c5a7b13ef2ab0420340de645c\"><div class=\"ttname\"><a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">glm::mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00022\">matrix_double4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga30e8baef5d56d5c166872a2bc00f36e9\"><div class=\"ttname\"><a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">glm::lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_vec2</div><div class=\"ttdoc\">2 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00028\">vector_float2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5609c8fa2b7eac3dec337d321cb0ca96\"><div class=\"ttname\"><a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">glm::highp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, highp &gt; highp_i16vec3</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00254\">fwd.hpp:254</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga741e05adf1f12d5d913f67088db1009a\"><div class=\"ttname\"><a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">glm::mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00022\">matrix_double2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3be6c7fc5fe08fa2274bdb001d5f2633\"><div class=\"ttname\"><a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">glm::mediump_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, mediump &gt; mediump_i16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00249\">fwd.hpp:249</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac57496299d276ed97044074097bd5e2c\"><div class=\"ttname\"><a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">glm::mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, mediump &gt; mediump_ivec2</div><div class=\"ttdoc\">2 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00022\">vector_int2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga42569e5b92f8635cedeadb1457ee1467\"><div class=\"ttname\"><a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">glm::mediump_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00643\">fwd.hpp:643</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8343e9d244fb17a5bbf0d94d36b3695e\"><div class=\"ttname\"><a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">glm::mediump_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, mediump &gt; mediump_i64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00287\">fwd.hpp:287</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad8e2727a6e7aa68280245bb0022118e1\"><div class=\"ttname\"><a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">glm::lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00016\">matrix_double2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5ceeb46670fdc000a0701910cc5061c9\"><div class=\"ttname\"><a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">glm::highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00028\">matrix_double2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac8f8a12ee03105ef8861dc652434e3b7\"><div class=\"ttname\"><a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">glm::lowp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00754\">fwd.hpp:754</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e641a54d70c81eabf56c25c966d04bd\"><div class=\"ttname\"><a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">glm::lowp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, lowp &gt; lowp_f64vec2</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00487\">fwd.hpp:487</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf111095594996fef29067b2454fccad\"><div class=\"ttname\"><a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">glm::highp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00651\">fwd.hpp:651</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac21eda58a1475449a5709b412ebd776c\"><div class=\"ttname\"><a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">glm::lowp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00677\">fwd.hpp:677</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58119a41d143ebaea0df70fe882e8a40\"><div class=\"ttname\"><a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">glm::lowp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00573\">fwd.hpp:573</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1900c6ab74acd392809425953359ef52\"><div class=\"ttname\"><a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">glm::mediump_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, mediump &gt; mediump_u64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00391\">fwd.hpp:391</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab83d8aae6e4f115e97a785e8574a115f\"><div class=\"ttname\"><a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">glm::mediump_float64</a></div><div class=\"ttdeci\">double mediump_float64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00169\">fwd.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac6c781a85f012d77a75310a3058702c2\"><div class=\"ttname\"><a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">glm::highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; highp_bvec2</div><div class=\"ttdoc\">2 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00016\">vector_bool2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7db3ad10947cf70cae6474d05ebd227\"><div class=\"ttname\"><a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">glm::highp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, highp &gt; highp_i16vec2</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00253\">fwd.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga39e90adcffe33264bd608fa9c6bd184b\"><div class=\"ttname\"><a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">glm::lowp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00751\">fwd.hpp:751</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac017848a9df570f60916a21a297b1e8e\"><div class=\"ttname\"><a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">glm::lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00034\">matrix_double3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad3ad390560a671b1f676fbf03cd3aa15\"><div class=\"ttname\"><a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">glm::lowp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, lowp &gt; lowp_u32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00366\">fwd.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga755484ffbe39ae3db2875953ed04e7b7\"><div class=\"ttname\"><a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">glm::lowp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_fvec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00429\">fwd.hpp:429</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad80c84bcd5f585840faa6179f6fd446c\"><div class=\"ttname\"><a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">glm::mediump_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, mediump &gt; mediump_f32vec4</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00454\">fwd.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad38c544d332b8c4bd0b70b1bd9feccc2\"><div class=\"ttname\"><a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">glm::mediump_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00765\">fwd.hpp:765</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga71cdb53801ed4c3aadb3603c04723210\"><div class=\"ttname\"><a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">glm::lowp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00631\">fwd.hpp:631</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabed3be8dfdc4a0df4bf3271dbd7344c4\"><div class=\"ttname\"><a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">glm::lowp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, lowp &gt; lowp_u32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00364\">fwd.hpp:364</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaabf6cf90fd31efe25c94965507e98390\"><div class=\"ttname\"><a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">glm::lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, lowp &gt; lowp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00016\">matrix_float3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga46a57f71e430637559097a732b550a7e\"><div class=\"ttname\"><a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">glm::mediump_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, mediump &gt; mediump_i32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00267\">fwd.hpp:267</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><div class=\"ttname\"><a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">glm::highp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, highp &gt; highp_u16vec4</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00357\">fwd.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae31ac3608cf643ceffd6554874bec4a0\"><div class=\"ttname\"><a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">glm::lowp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, lowp &gt; lowp_i32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00262\">fwd.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0f7d875db5f3cc9f3168c5a0ed56437\"><div class=\"ttname\"><a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">glm::lowp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, lowp &gt; lowp_i64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00282\">fwd.hpp:282</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0e35a565b9036bfc3989f5e23a0792e3\"><div class=\"ttname\"><a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">glm::highp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, highp &gt; highp_u32vec1</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00374\">fwd.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_gae8a1e14abae1387274f57741750c06a2\"><div class=\"ttname\"><a href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">glm::highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, highp &gt; highp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00025\">vector_bool1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5c6978d3ffba06738416a33083853fc0\"><div class=\"ttname\"><a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">glm::mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_vec4</div><div class=\"ttdoc\">4 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00022\">vector_float4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga461c4c7d0757404dd0dba931760b25cf\"><div class=\"ttname\"><a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">glm::mediump_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, mediump &gt; mediump_f64vec3</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00493\">fwd.hpp:493</a></div></div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d8c10949691b0fd990253476f47beb3\"><div class=\"ttname\"><a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">glm::highp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, highp &gt; highp_i8vec1</div><div class=\"ttdoc\">High qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00232\">fwd.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a11ccd2e38f674bbf3c2d1afc232aee\"><div class=\"ttname\"><a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">glm::mediump_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, mediump &gt; mediump_u32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00369\">fwd.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d091b6abfba1772450e1745a06525bc\"><div class=\"ttname\"><a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">glm::lowp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00670\">fwd.hpp:670</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e2e1debe022074ab224c9faf856d374\"><div class=\"ttname\"><a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">glm::lowp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, lowp &gt; lowp_f32vec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00449\">fwd.hpp:449</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6ef77413883f48d6b53b4169b25edbd0\"><div class=\"ttname\"><a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">glm::highp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_fvec3</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00438\">fwd.hpp:438</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0cecb80fd106bc369b9e46a165815ce\"><div class=\"ttname\"><a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">glm::lowp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00756\">fwd.hpp:756</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6f526388c74a66b3d52315a14d434ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">glm::mediump_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00644\">fwd.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabd2fda3cd208acf5a370ec9b5b3c58d4\"><div class=\"ttname\"><a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">glm::highp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, highp &gt; highp_i64vec1</div><div class=\"ttdoc\">High qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00292\">fwd.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga7e02566f2bd2caa68e61be45a477c77e\"><div class=\"ttname\"><a href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">glm::highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, highp &gt; highp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00025\">vector_int1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga50c783c25082882ef00fe2e5cddba4aa\"><div class=\"ttname\"><a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">glm::mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, mediump &gt; mediump_bvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00022\">vector_bool3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad4cc829ab1ad3e05ac0a24828a3c95cf\"><div class=\"ttname\"><a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">glm::mediump_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00681\">fwd.hpp:681</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3a132bd05675c2e46556f67cf738600b\"><div class=\"ttname\"><a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">glm::mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00022\">matrix_double3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0eb2d65514ee3e49905aa2caad8c0ad\"><div class=\"ttname\"><a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">glm::lowp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00753\">fwd.hpp:753</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga645f53e6b8056609023a894b4e2beef4\"><div class=\"ttname\"><a href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">glm::mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00030\">vector_float1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga15bca2b70917d9752231160d9da74b01\"><div class=\"ttname\"><a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">glm::mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00040\">matrix_float4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga8433c6c1fdd80c0a83941d94aff73fa0\"><div class=\"ttname\"><a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">glm::lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, lowp &gt; lowp_ivec2</div><div class=\"ttdoc\">2 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00028\">vector_int2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66edb8de17b9235029472f043ae107e9\"><div class=\"ttname\"><a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">glm::mediump_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00768\">fwd.hpp:768</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga51dc36a7719cb458fa5114831c20d64f\"><div class=\"ttname\"><a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">glm::mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00040\">matrix_double2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7f00459b9a2e5b2757e70afc0c189e1\"><div class=\"ttname\"><a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">glm::lowp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, lowp &gt; lowp_u16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00347\">fwd.hpp:347</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaeebd7dd9f3e678691f8620241e5f9221\"><div class=\"ttname\"><a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">glm::highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, highp &gt; highp_uvec4</div><div class=\"ttdoc\">4 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00016\">vector_uint4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga766aed2871e6173a81011a877f398f04\"><div class=\"ttname\"><a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">glm::lowp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00542\">fwd.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7812bf00676fb1a86dcd62cca354d2c7\"><div class=\"ttname\"><a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">glm::mediump_float32</a></div><div class=\"ttdeci\">float mediump_float32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00153\">fwd.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><div class=\"ttname\"><a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">glm::lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, lowp &gt; lowp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00016\">matrix_float4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfea053bd6bb3eddb996a4f94de22a3e\"><div class=\"ttname\"><a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">glm::mediump_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, mediump &gt; mediump_f64vec4</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00494\">fwd.hpp:494</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><div class=\"ttname\"><a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">glm::highp_float32</a></div><div class=\"ttdeci\">float highp_float32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00154\">fwd.hpp:154</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50265a202fbfe0a25fc70066c31d9336\"><div class=\"ttname\"><a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">glm::lowp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00752\">fwd.hpp:752</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade8d1edfb23996ab6c622e65e3893271\"><div class=\"ttname\"><a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">glm::lowp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00755\">fwd.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga868e8e4470a3ef97c7ee3032bf90dc79\"><div class=\"ttname\"><a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">glm::lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_vec3</div><div class=\"ttdoc\">3 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00028\">vector_float3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6454b3a26ea30f69de8e44c08a63d1b7\"><div class=\"ttname\"><a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">glm::highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; highp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00028\">matrix_float3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2dedee030500865267cd5851c00c139d\"><div class=\"ttname\"><a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">glm::lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00016\">matrix_float4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab485c48f06a4fdd6b8d58d343bb49f3c\"><div class=\"ttname\"><a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">glm::lowp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, lowp &gt; lowp_i64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00283\">fwd.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc6bf0209dda0c7c14851a646071c974\"><div class=\"ttname\"><a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">glm::lowp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00672\">fwd.hpp:672</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaee663ff64429443ab07a5327074192f6\"><div class=\"ttname\"><a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">glm::highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; highp_bvec4</div><div class=\"ttdoc\">4 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00016\">vector_bool4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24f9ef3263b1638564713892cc37981f\"><div class=\"ttname\"><a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">glm::highp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00549\">fwd.hpp:549</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84d88a6e3a54ccd2b67e195af4a4c23e\"><div class=\"ttname\"><a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">glm::mediump_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00764\">fwd.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga0b6123e03653cc1bbe366fc55238a934\"><div class=\"ttname\"><a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">glm::bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, defaultp &gt; bvec2</div><div class=\"ttdoc\">2 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00191_source.html#l00015\">vector_bool2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31e070ea3bdee623e6e18a61ba5718b1\"><div class=\"ttname\"><a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">glm::highp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, highp &gt; highp_i32vec3</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00274\">fwd.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6a9d71cc62745302f70422b7dc98755c\"><div class=\"ttname\"><a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">glm::highp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, highp &gt; highp_i32vec1</div><div class=\"ttdoc\">High qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00272\">fwd.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga86d6d4dbad92ffdcc759773340e15a97\"><div class=\"ttname\"><a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">glm::highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00028\">matrix_double3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4187f89f196505b40e63f516139511e5\"><div class=\"ttname\"><a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">glm::lowp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00541\">fwd.hpp:541</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gade27f8324a16626cbce5d3e7da66b070\"><div class=\"ttname\"><a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">glm::lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, lowp &gt; lowp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00016\">matrix_float2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga13a221b910aa9eb1b04ca1c86e81015a\"><div class=\"ttname\"><a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">glm::mediump_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, mediump &gt; mediump_i32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00269\">fwd.hpp:269</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga1e743764869efa9223c2bcefccedaddc\"><div class=\"ttname\"><a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">glm::mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, mediump &gt; mediump_bvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00022\">vector_bool2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7cac84b520a6b57f2fbd880d3d63c51b\"><div class=\"ttname\"><a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">glm::lowp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, lowp &gt; lowp_i16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00243\">fwd.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gabc61976261c406520c7a8e4d946dc3f0\"><div class=\"ttname\"><a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">glm::mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_vec2</div><div class=\"ttdoc\">2 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00022\">vector_float2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73a08ef5a74798f3a1a99250b5f86a7d\"><div class=\"ttname\"><a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">glm::mediump_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, mediump &gt; mediump_u64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00390\">fwd.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9910927f3a4d1addb3da6a82542a8287\"><div class=\"ttname\"><a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">glm::lowp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, lowp &gt; lowp_u8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00327\">fwd.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab691ae40c37976d268d8cac0096e0e1\"><div class=\"ttname\"><a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">glm::highp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00694\">fwd.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8408cb76b6550ff01fa0a3024e7b68d2\"><div class=\"ttname\"><a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">glm::highp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, highp &gt; highp_u8vec1</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00334\">fwd.hpp:334</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d43ee8b5dbaa06c327b03b83682598a\"><div class=\"ttname\"><a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">glm::mediump_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, mediump &gt; mediump_u32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00372\">fwd.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae5eb02d92b7d4605a4b7f37ae5cb2968\"><div class=\"ttname\"><a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">glm::highp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00690\">fwd.hpp:690</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga61185c44c8cc0b25d9a0f67d8a267444\"><div class=\"ttname\"><a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">glm::highp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, highp &gt; highp_f64vec4</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00499\">fwd.hpp:499</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae367ea93c4ad8a7c101dd27b8b2b04ce\"><div class=\"ttname\"><a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">glm::highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00046\">matrix_double3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga150dc47e31c6b8cf8461803c8d56f7bd\"><div class=\"ttname\"><a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">glm::lowp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, lowp &gt; lowp_u8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00326\">fwd.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6906e1ef0b34064b4b675489c5c38725\"><div class=\"ttname\"><a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">glm::highp_f32</a></div><div class=\"ttdeci\">float highp_f32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00149\">fwd.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961ccb34cd1a5654c772c8709e001dc5\"><div class=\"ttname\"><a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">glm::lowp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00671\">fwd.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9ba20234b0c3751d45ce575fc71e551\"><div class=\"ttname\"><a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">glm::mediump_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, mediump &gt; mediump_u16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00351\">fwd.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><div class=\"ttname\"><a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">glm::mediump_dquat</a></div><div class=\"ttdeci\">qua&lt; double, mediump &gt; mediump_dquat</div><div class=\"ttdoc\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00033\">quaternion_double_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga856f3905ee7cc2e4890a8a1d56c150be\"><div class=\"ttname\"><a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">glm::f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00553\">fwd.hpp:553</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4fd527644cccbca4cb205320eab026f3\"><div class=\"ttname\"><a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">glm::mediump_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00760\">fwd.hpp:760</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga77c22c4426da3a6865c88d3fc907e3fe\"><div class=\"ttname\"><a href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">glm::highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, highp &gt; highp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00027\">vector_double1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab8531bc3f269aa45835cd6e1972b7fc7\"><div class=\"ttname\"><a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">glm::mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00022\">matrix_float4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a18659438828f91ccca28f1a1e067b4\"><div class=\"ttname\"><a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">glm::highp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, highp &gt; highp_i16vec4</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00255\">fwd.hpp:255</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5803cb9ae26399762d8bba9e0b2fc09f\"><div class=\"ttname\"><a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">glm::lowp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00526\">fwd.hpp:526</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga94f74851fce338549c705b5f0d601c4f\"><div class=\"ttname\"><a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">glm::mediump_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, mediump &gt; mediump_u32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00370\">fwd.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41bdabea6e589029659331ba47eb78c1\"><div class=\"ttname\"><a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">glm::highp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, highp &gt; highp_u64vec3</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00396\">fwd.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab69ef9cbc2a9214bf5596c528c801b72\"><div class=\"ttname\"><a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">glm::lowp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, lowp &gt; lowp_i16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00244\">fwd.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac0253db6c3d3bae1f591676307a9dd8c\"><div class=\"ttname\"><a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">glm::lowp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, lowp &gt; lowp_u16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00346\">fwd.hpp:346</a></div></div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf739a2cd7b81783a43148b53e40d983b\"><div class=\"ttname\"><a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">glm::lowp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, lowp &gt; lowp_f32vec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00448\">fwd.hpp:448</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf28443ce0cc0959077ec39b21f32c39\"><div class=\"ttname\"><a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">glm::highp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00534\">fwd.hpp:534</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga83079315e230e8f39728f4bf0d2f9a9b\"><div class=\"ttname\"><a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">glm::lowp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00525\">fwd.hpp:525</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa40c03d52dbfbfaf03e75773b9606ff3\"><div class=\"ttname\"><a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">glm::mediump_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, mediump &gt; mediump_f32quat</div><div class=\"ttdoc\">Medium single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00803\">fwd.hpp:803</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab217601c74974a84acbca428123ecf7\"><div class=\"ttname\"><a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">glm::lowp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00632\">fwd.hpp:632</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga609bf0ace941d6ab1bb2f9522a04e546\"><div class=\"ttname\"><a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">glm::highp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00581\">fwd.hpp:581</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6dd1c1618378c6f94d522a61c28773c9\"><div class=\"ttname\"><a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">glm::mediump_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, mediump &gt; mediump_i8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00229\">fwd.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab1b1c9e8667902b78b2c330e4d383a61\"><div class=\"ttname\"><a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">glm::highp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, highp &gt; highp_f32vec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00456\">fwd.hpp:456</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae2f43ace6b5b33ab49516d9e40af1845\"><div class=\"ttname\"><a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">glm::lowp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, lowp &gt; lowp_i8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00224\">fwd.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga47bd2aae4701ee2fc865674a9df3d7a6\"><div class=\"ttname\"><a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">glm::mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00040\">matrix_double3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae731613b25db3a5ef5a05d21e57a57d3\"><div class=\"ttname\"><a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">glm::lowp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00757\">fwd.hpp:757</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f15b41aa24b11cc42ad5798c04a2325\"><div class=\"ttname\"><a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">glm::highp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, highp &gt; highp_u64vec4</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00397\">fwd.hpp:397</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5aae49834d02732942f44e61d7bce136\"><div class=\"ttname\"><a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">glm::mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00022\">matrix_float3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga7b4ccb989ba179fa44f7b0879c782621\"><div class=\"ttname\"><a href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">glm::mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, mediump &gt; mediump_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00028\">vector_bool1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga708bc5b91bbfedd21debac8dcf2a64cd\"><div class=\"ttname\"><a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">glm::lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00016\">matrix_double4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6543eeeb64f48d79a0b96484308c50f0\"><div class=\"ttname\"><a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">glm::highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00028\">matrix_double3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab12383ed6ac7595ed6fde4d266c58425\"><div class=\"ttname\"><a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">glm::f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00552\">fwd.hpp:552</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga35223623e9ccebd8a281873b71b7d213\"><div class=\"ttname\"><a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">glm::mediump_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00642\">fwd.hpp:642</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga429c201b3e92c90b4ef4356f2be52ee1\"><div class=\"ttname\"><a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">glm::mediump_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, mediump &gt; mediump_u16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00350\">fwd.hpp:350</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4143d129898f91545948c46859adce44\"><div class=\"ttname\"><a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">glm::lowp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00678\">fwd.hpp:678</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga752ee45136011301b64afd8c310c47a4\"><div class=\"ttname\"><a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">glm::lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, lowp &gt; lowp_uvec2</div><div class=\"ttdoc\">2 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00028\">vector_uint2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6271ebc85ed778ccc15458c3d86fc854\"><div class=\"ttname\"><a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">glm::lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00016\">matrix_float3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f63fa38635431e51a8f2602f15c566\"><div class=\"ttname\"><a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">glm::lowp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, lowp &gt; lowp_u8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00325\">fwd.hpp:325</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga108086730d086b7f6f7a033955dfb9c3\"><div class=\"ttname\"><a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">glm::lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, lowp &gt; lowp_dvec2</div><div class=\"ttdoc\">2 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00028\">vector_double2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad35fb67eb1d03c5a514f0bd7aed1c776\"><div class=\"ttname\"><a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">glm::mediump_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00577\">fwd.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga83b7df38feefbb357f3673d950fafef7\"><div class=\"ttname\"><a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">glm::mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, mediump &gt; mediump_uvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00022\">vector_uint3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961fac2a885907ffcf4d40daac6615c5\"><div class=\"ttname\"><a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">glm::highp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00655\">fwd.hpp:655</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga09a2374b725c4246d263ee36fb66434c\"><div class=\"ttname\"><a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">glm::highp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00778\">fwd.hpp:778</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4d5a0055544a516237dcdace049b143d\"><div class=\"ttname\"><a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">glm::highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00028\">matrix_float2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade108f16633cf95fa500b5b8c36c8b00\"><div class=\"ttname\"><a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">glm::mediump_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00687\">fwd.hpp:687</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac1a86a75b3c68ebb704d7094043669d6\"><div class=\"ttname\"><a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">glm::lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, lowp &gt; lowp_ivec3</div><div class=\"ttdoc\">3 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00028\">vector_int3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80823dfad5dba98512c76af498343847\"><div class=\"ttname\"><a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">glm::mediump_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00529\">fwd.hpp:529</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf650bc667bf2a0e496b5a9182bc8d378\"><div class=\"ttname\"><a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">glm::mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00022\">matrix_double4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b712b97b2322685fbbed28febe5f84\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">glm::highp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00698\">fwd.hpp:698</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27fc23da61859cd6356326c5f1c796de\"><div class=\"ttname\"><a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">glm::lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, lowp &gt; lowp_ivec4</div><div class=\"ttdoc\">4 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00028\">vector_int4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><div class=\"ttname\"><a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">glm::lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, lowp &gt; lowp_uvec4</div><div class=\"ttdoc\">4 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00028\">vector_uint4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><div class=\"ttname\"><a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">glm::highp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, highp &gt; highp_f64vec2</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00497\">fwd.hpp:497</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga581485db4ba6ddb501505ee711fd8e42\"><div class=\"ttname\"><a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">glm::lowp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, lowp &gt; lowp_u64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00385\">fwd.hpp:385</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga253d453c20e037730023fea0215cb6f6\"><div class=\"ttname\"><a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">glm::fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00537\">fwd.hpp:537</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaab39454f56cf9fc6d940358ce5e6a0f\"><div class=\"ttname\"><a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">glm::mediump_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00683\">fwd.hpp:683</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga970cb3306be25a5ca5db5a9456831228\"><div class=\"ttname\"><a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">glm::dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00015\">matrix_double3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga6f40aa56265b4b0ccad41b86802efe33\"><div class=\"ttname\"><a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">glm::dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00020\">matrix_double3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f3fcb702a666de07650c149cfa845a\"><div class=\"ttname\"><a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">glm::lowp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00676\">fwd.hpp:676</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf1f16c5ab8cb0484bd1e846ae4368f1\"><div class=\"ttname\"><a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">glm::mediump_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, mediump &gt; mediump_i64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00290\">fwd.hpp:290</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9f7b9712373ff4342d9114619b55f5e3\"><div class=\"ttname\"><a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">glm::bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, defaultp &gt; bvec4</div><div class=\"ttdoc\">4 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00195_source.html#l00015\">vector_bool4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga85e8893f4ae3630065690a9000c0c483\"><div class=\"ttname\"><a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">glm::mediump_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, mediump &gt; mediump_i8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00227\">fwd.hpp:227</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga43ef60e4d996db15c9c8f069a96ff763\"><div class=\"ttname\"><a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">glm::mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00022\">matrix_double4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5376ef18dca9d248897c3363ef5a06b2\"><div class=\"ttname\"><a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">glm::highp_float32_t</a></div><div class=\"ttdeci\">float highp_float32_t</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00159\">fwd.hpp:159</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga118d24a3d12c034e7cccef7bf2f01b8a\"><div class=\"ttname\"><a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">glm::highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00046\">matrix_double4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad4689ec33bc2c26e10132b174b49001a\"><div class=\"ttname\"><a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">glm::highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00028\">matrix_double2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga076961cf2d120c7168b957cb2ed107b3\"><div class=\"ttname\"><a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">glm::highp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00656\">fwd.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0b8ebd4262331e139ff257d7cf2a4b77\"><div class=\"ttname\"><a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">glm::highp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, highp &gt; highp_f32vec2</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00457\">fwd.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga685bda24922d112786af385deb4deb43\"><div class=\"ttname\"><a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">glm::mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00022\">matrix_double2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga21dbd1f987775d7cc7607c139531c7e6\"><div class=\"ttname\"><a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">glm::dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00020\">matrix_double2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad281decae52948b82feb3a9db8f63a7b\"><div class=\"ttname\"><a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">glm::highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_vec4</div><div class=\"ttdoc\">4 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00016\">vector_float4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4a8682bec7ec8af666ef87fae38d5d1\"><div class=\"ttname\"><a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">glm::lowp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, lowp &gt; lowp_u64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00386\">fwd.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad5a6484b983b74f9d801cab8bc4e6a10\"><div class=\"ttname\"><a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">glm::dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00015\">matrix_double4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga24a3d364e2ddd444f5b9e7975bbef8f9\"><div class=\"ttname\"><a href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">glm::lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, lowp &gt; lowp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00031\">vector_bool1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga773ea237a051827cfc20de960bc73ff0\"><div class=\"ttname\"><a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">glm::highp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00770\">fwd.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf14d7a50502464e7cbfa074f24684cb1\"><div class=\"ttname\"><a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">glm::highp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, highp &gt; highp_u32vec3</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00376\">fwd.hpp:376</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaedb70027d89a0a405046aefda4eabaa6\"><div class=\"ttname\"><a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">glm::highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; highp_bvec3</div><div class=\"ttdoc\">3 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00016\">vector_bool3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ba60ef8f69c6aeb1629594eaa95347\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">glm::lowp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, lowp &gt; lowp_f32quat</div><div class=\"ttdoc\">Low single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00802\">fwd.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9b2eb4296ffe50a32eacca9ed932c08\"><div class=\"ttname\"><a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">glm::lowp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, lowp &gt; lowp_i32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00265\">fwd.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga70fdfcc1fd38084bde83c3f06a8b9f19\"><div class=\"ttname\"><a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">glm::highp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, highp &gt; highp_i16vec1</div><div class=\"ttdoc\">High qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00252\">fwd.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac2f5263708ac847b361a9841e74ddf9f\"><div class=\"ttname\"><a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">glm::lowp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00638\">fwd.hpp:638</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><div class=\"ttname\"><a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">glm::lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00016\">matrix_double4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga841211b641cff1fcf861bdb14e5e4abc\"><div class=\"ttname\"><a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">glm::lowp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00674\">fwd.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac03e5099d27eeaa74b6016ea435a1df2\"><div class=\"ttname\"><a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">glm::lowp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, lowp &gt; lowp_i8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00223\">fwd.hpp:223</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga298f7d4d273678d0282812368da27fda\"><div class=\"ttname\"><a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">glm::highp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00548\">fwd.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaeea53879fc327293cf3352a409b7867b\"><div class=\"ttname\"><a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">glm::lowp_f32</a></div><div class=\"ttdeci\">float lowp_f32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00147\">fwd.hpp:147</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_gacda57dd8c2bff4934c7f09ddd87c0f39\"><div class=\"ttname\"><a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">glm::highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, highp &gt; highp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00027\">vector_uint1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5793393686ce5bd2d5968ff9144762b8\"><div class=\"ttname\"><a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">glm::mediump_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, mediump &gt; mediump_u16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00352\">fwd.hpp:352</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaef61508dd40ec523416697982f9ceaae\"><div class=\"ttname\"><a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">glm::highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, highp &gt; highp_uvec3</div><div class=\"ttdoc\">3 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00016\">vector_uint3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga61c3b1dff4ec7c878af80503141b9f37\"><div class=\"ttname\"><a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">glm::mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, mediump &gt; mediump_dvec3</div><div class=\"ttdoc\">3 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00024\">vector_double3_precision.hpp:24</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga78f77b8b2d17b431ac5a68c0b5d7050d\"><div class=\"ttname\"><a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">glm::highp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, highp &gt; highp_u64vec2</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00395\">fwd.hpp:395</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga836dbb1dc516c233b7f5fe9763bc15dc\"><div class=\"ttname\"><a href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">glm::lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, lowp &gt; lowp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00031\">vector_int1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">glm::mediump_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00680\">fwd.hpp:680</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54697a78f9a4643af6a57fc2e626ec0d\"><div class=\"ttname\"><a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">glm::mediump_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00767\">fwd.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga51d5266017d88f62737c1973923a7cf4\"><div class=\"ttname\"><a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">glm::highp_f64</a></div><div class=\"ttdeci\">double highp_f64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00165\">fwd.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga999dc6703ad16e3d3c26b74ea8083f07\"><div class=\"ttname\"><a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">glm::mediump_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_fvec3</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00433\">fwd.hpp:433</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaec7ee455cb379ec2993e81482123e1cc\"><div class=\"ttname\"><a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">glm::mediump_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, mediump &gt; mediump_u64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00392\">fwd.hpp:392</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae27ac20302c2e39b6c78e7fe18e62ef7\"><div class=\"ttname\"><a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">glm::highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00046\">matrix_double2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2f256334f83fba4c2d219e414b51df6c\"><div class=\"ttname\"><a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">glm::highp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, highp &gt; highp_u32vec2</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00375\">fwd.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga79a789ebb176b37a45848f7ccdd3b3dd\"><div class=\"ttname\"><a href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">glm::mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, mediump &gt; mediump_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00030\">vector_double1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa1040342c4efdedc8f90e6267db8d41c\"><div class=\"ttname\"><a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">glm::highp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_fvec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00436\">fwd.hpp:436</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb4229a4c1488bf063eed0c45355bb9c\"><div class=\"ttname\"><a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">glm::lowp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, lowp &gt; lowp_i64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00285\">fwd.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gafb84dccdf5d82443df3ffc8428dcaf3e\"><div class=\"ttname\"><a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">glm::highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; highp_ivec4</div><div class=\"ttdoc\">4 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00016\">vector_int4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga88938ee1e7981fa3402e88da6ad74531\"><div class=\"ttname\"><a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">glm::highp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00692\">fwd.hpp:692</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><div class=\"ttname\"><a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">glm::lowp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, lowp &gt; lowp_i8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00222\">fwd.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7adb92ce8de0afaff01436b039fd924\"><div class=\"ttname\"><a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">glm::highp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00580\">fwd.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga42c518b2917e19ce6946a84c64a3a4b2\"><div class=\"ttname\"><a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">glm::lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, lowp &gt; lowp_dvec3</div><div class=\"ttdoc\">3 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00031\">vector_double3_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><div class=\"ttname\"><a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">glm::highp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</div><div class=\"ttdoc\">High double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00773\">fwd.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga012c24c8fc69707b90260474c70275a2\"><div class=\"ttname\"><a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">glm::mediump_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, mediump &gt; mediump_u32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00371\">fwd.hpp:371</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><div class=\"ttname\"><a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">glm::highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00028\">matrix_float3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga45721c13b956eb691cbd6c6c1429167a\"><div class=\"ttname\"><a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">glm::highp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, highp &gt; highp_u8vec3</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00336\">fwd.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50542e4cb9b2f9bec213b66e06145d07\"><div class=\"ttname\"><a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">glm::highp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, highp &gt; highp_i8vec2</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00233\">fwd.hpp:233</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga369b447bb1b312449b679ea1f90f3cea\"><div class=\"ttname\"><a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">glm::highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00028\">matrix_double2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fe17c87ede1b1b4d92454cff4da076d\"><div class=\"ttname\"><a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">glm::lowp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, lowp &gt; lowp_i32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00264\">fwd.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22e27beead07bff4d5ce9d6065a57279\"><div class=\"ttname\"><a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">glm::mediump_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00648\">fwd.hpp:648</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5b0413198b7e9f061f7534a221c9dac9\"><div class=\"ttname\"><a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">glm::lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00034\">matrix_double4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga945254f459860741138bceb74da496b9\"><div class=\"ttname\"><a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">glm::highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00028\">matrix_double4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d47d94d17c2406abdd1f087a816e387\"><div class=\"ttname\"><a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">glm::lowp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, lowp &gt; lowp_i16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00245\">fwd.hpp:245</a></div></div>\n<div class=\"ttc\" id=\"a00265_html_ga067af382616d93f8e850baae5154cdcc\"><div class=\"ttname\"><a href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">glm::bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, defaultp &gt; bvec1</div><div class=\"ttdoc\">1 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00189_source.html#l00027\">vector_bool1.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae94823d65648e44d972863c6caa13103\"><div class=\"ttname\"><a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">glm::highp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</div><div class=\"ttdoc\">High double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00777\">fwd.hpp:777</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga27585b7c3ab300059f11fcba465f6fd2\"><div class=\"ttname\"><a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">glm::highp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, highp &gt; highp_u8vec2</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00335\">fwd.hpp:335</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27cfb51e0dbe15bba27a14a8590e8466\"><div class=\"ttname\"><a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">glm::mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, mediump &gt; mediump_ivec3</div><div class=\"ttdoc\">3 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00022\">vector_int3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8396bfdc081d9113190d0c39c9f67084\"><div class=\"ttname\"><a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">glm::highp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, highp &gt; highp_i8vec3</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00234\">fwd.hpp:234</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1196090ece7a69fb5c3e43a7d4d851\"><div class=\"ttname\"><a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">glm::highp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, highp &gt; highp_f64vec3</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00498\">fwd.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa666bb9e6d204d3bea0b3a39a3a335f4\"><div class=\"ttname\"><a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">glm::lowp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, lowp &gt; lowp_f64vec4</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00489\">fwd.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gaf13a25f41afc03480b40fc71bd249cec\"><div class=\"ttname\"><a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">glm::highp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, highp &gt; highp_dquat</div><div class=\"ttdoc\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00038\">quaternion_double_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga062ffef2973bd8241df993c3b30b327c\"><div class=\"ttname\"><a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">glm::mediump_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, mediump &gt; mediump_f32vec3</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00453\">fwd.hpp:453</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabc7a97c07cbfac8e35eb5e63beb4b679\"><div class=\"ttname\"><a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">glm::lowp_f64</a></div><div class=\"ttdeci\">double lowp_f64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00163\">fwd.hpp:163</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5868c2dcce41cc3ea5edcaeae239f62c\"><div class=\"ttname\"><a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">glm::lowp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00636\">fwd.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><div class=\"ttname\"><a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">glm::highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; highp_ivec3</div><div class=\"ttdoc\">3 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00016\">vector_int3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a67a7440b9c0d1538533540f99036a5\"><div class=\"ttname\"><a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">glm::highp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</div><div class=\"ttdoc\">High double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00772\">fwd.hpp:772</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad308e0ed27d64daa4213fb257fcbd5a5\"><div class=\"ttname\"><a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">glm::highp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00582\">fwd.hpp:582</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6addd4dfee87fc09ab9525e3d07db4c8\"><div class=\"ttname\"><a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">glm::mediump_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, mediump &gt; mediump_i32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00270\">fwd.hpp:270</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga52409bc6d4a2ce3421526c069220d685\"><div class=\"ttname\"><a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">glm::lowp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00540\">fwd.hpp:540</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0412a634d183587e6188e9b11869f8f4\"><div class=\"ttname\"><a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">glm::dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, defaultp &gt; dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00073_source.html#l00015\">matrix_double3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf6bf2f5bde7ad5b9c289f777b93094af\"><div class=\"ttname\"><a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">glm::lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00016\">matrix_double2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><div class=\"ttname\"><a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">glm::mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, mediump &gt; mediump_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00022\">matrix_float2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad310b1dddeec9ec837a104e7db8de580\"><div class=\"ttname\"><a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">glm::highp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</div><div class=\"ttdoc\">High double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00775\">fwd.hpp:775</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaed2dc69e0d507d4191092dbd44b3eb75\"><div class=\"ttname\"><a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">glm::highp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00533\">fwd.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd80ad7640e9e32f2edcb8330b1ffe4f\"><div class=\"ttname\"><a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">glm::mediump_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00684\">fwd.hpp:684</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e52f485059ce6e3010c590b882602c9\"><div class=\"ttname\"><a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">glm::mediump_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, mediump &gt; mediump_f64quat</div><div class=\"ttdoc\">Medium double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00813\">fwd.hpp:813</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga66b6a9af787e468a46dfe24189e87f9b\"><div class=\"ttname\"><a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">glm::dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00015\">matrix_double2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc44265ed440bf5e6e566782570de842\"><div class=\"ttname\"><a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">glm::mediump_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, mediump &gt; mediump_i16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00247\">fwd.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaef2198807e937072803ae0ae45e1965e\"><div class=\"ttname\"><a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">glm::dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, defaultp &gt; dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00067_source.html#l00015\">matrix_double2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3647309010a2160e9ec89bc6f7c95c35\"><div class=\"ttname\"><a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">glm::highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00028\">matrix_double3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28635abcddb2f3e92c33c3f0fcc682ad\"><div class=\"ttname\"><a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">glm::highp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00650\">fwd.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b839abbb44f5102609eed89f6ed61f7\"><div class=\"ttname\"><a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">glm::highp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_fvec4</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00439\">fwd.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c2cadb9b85cc7e0d125db21ca19dea4\"><div class=\"ttname\"><a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">glm::highp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00774\">fwd.hpp:774</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2384e263df19f1404b733016eff78fca\"><div class=\"ttname\"><a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">glm::mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_vec3</div><div class=\"ttdoc\">3 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00022\">vector_float3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a7d997da9ac29cb931e35bd399f58df\"><div class=\"ttname\"><a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">glm::lowp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, lowp &gt; lowp_u16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00345\">fwd.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22166f0da65038b447f3c5e534fff1c2\"><div class=\"ttname\"><a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">glm::highp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, highp &gt; highp_u32vec4</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00377\">fwd.hpp:377</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><div class=\"ttname\"><a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">glm::dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, defaultp &gt; dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00075_source.html#l00015\">matrix_double4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0b4432cb8d910e406576d10d802e190d\"><div class=\"ttname\"><a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">glm::lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, lowp &gt; lowp_dvec4</div><div class=\"ttdoc\">4 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00032\">vector_double4_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><div class=\"ttname\"><a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">glm::lowp_float32_t</a></div><div class=\"ttdeci\">float lowp_float32_t</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00157\">fwd.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3b694b2b8ded7e0b9f07b061917e1a0\"><div class=\"ttname\"><a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">glm::lowp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, lowp &gt; lowp_f32vec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00447\">fwd.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1281da5ded55047e8892b0e1f1ae965\"><div class=\"ttname\"><a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">glm::mediump_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00576\">fwd.hpp:576</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gad2a59409de1bb12ccb6eb692ee7e9d8d\"><div class=\"ttname\"><a href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">glm::mediump_quat</a></div><div class=\"ttdeci\">qua&lt; float, mediump &gt; mediump_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00029\">quaternion_float_precision.hpp:29</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><div class=\"ttname\"><a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">glm::highp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00697\">fwd.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><div class=\"ttname\"><a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">glm::lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, lowp &gt; lowp_uvec3</div><div class=\"ttdoc\">3 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00028\">vector_uint3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2df7cdaf9a571ce7a1b09435f502c694\"><div class=\"ttname\"><a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">glm::lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00034\">matrix_float2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00250_html_ga9e6e5f42e67dd5877350ba485c191f1c\"><div class=\"ttname\"><a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">glm::lowp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, lowp &gt; lowp_dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00028\">quaternion_double_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4fe774744852c4d7d069be2e05257ab\"><div class=\"ttname\"><a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">glm::highp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, highp &gt; highp_u64vec1</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00394\">fwd.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaa669c6675c3405f76c0b14020d1c0d61\"><div class=\"ttname\"><a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">glm::mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, mediump &gt; mediump_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00022\">matrix_float3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8342c7469384c6d769cacc9e309278d9\"><div class=\"ttname\"><a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">glm::highp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</div><div class=\"ttdoc\">High double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00771\">fwd.hpp:771</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><div class=\"ttname\"><a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">glm::lowp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, lowp &gt; lowp_i8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00225\">fwd.hpp:225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e649bbdb135fbcb4bfe950f4c73a444\"><div class=\"ttname\"><a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">glm::lowp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00637\">fwd.hpp:637</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa9b4579f8e6f3d9b649a965bcb785530\"><div class=\"ttname\"><a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">glm::highp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, highp &gt; highp_i32vec2</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00273\">fwd.hpp:273</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4a43050843b141bdc7e85437faef6f55\"><div class=\"ttname\"><a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">glm::mediump_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, mediump &gt; mediump_u8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00329\">fwd.hpp:329</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae406ec670f64170a7437b5e302eeb2cb\"><div class=\"ttname\"><a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">glm::highp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00657\">fwd.hpp:657</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga001e3e0638fbf8719788fc64c5b8cf39\"><div class=\"ttname\"><a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">glm::dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, defaultp &gt; dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00069_source.html#l00015\">matrix_double3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf52982bb23e3a3772649b2c5bb84b107\"><div class=\"ttname\"><a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">glm::mediump_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, mediump &gt; mediump_i16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00250\">fwd.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa805ef691c711dc41e2776cfb67f5cf5\"><div class=\"ttname\"><a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">glm::mediump_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00578\">fwd.hpp:578</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaf4ee3b76d43d98da02ec399b99bda4b\"><div class=\"ttname\"><a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">glm::mediump_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, mediump &gt; mediump_u8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00332\">fwd.hpp:332</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab24dc20dcdc5b71282634bdbf6b70105\"><div class=\"ttname\"><a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">glm::highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; highp_dvec3</div><div class=\"ttdoc\">3 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00017\">vector_double3_precision.hpp:17</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga21b1b22dec013a72656e3644baf8a1e1\"><div class=\"ttname\"><a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">glm::lowp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00675\">fwd.hpp:675</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac61843e4fa96c1f4e9d8316454f32a8e\"><div class=\"ttname\"><a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">glm::mediump_float64_t</a></div><div class=\"ttdeci\">double mediump_float64_t</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00174\">fwd.hpp:174</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2352ae43b284c9f71446674c0208c05d\"><div class=\"ttname\"><a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">glm::highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00046\">matrix_float2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga534c3ef5c3b8fdd8656b6afc205b4b77\"><div class=\"ttname\"><a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">glm::lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, lowp &gt; lowp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00016\">matrix_float4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c0d196f5fa79f7e892a2f323a0be1ae\"><div class=\"ttname\"><a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">glm::highp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_fvec2</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00437\">fwd.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga8bf3fc8a7863d140f48b29341c750402\"><div class=\"ttname\"><a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">glm::lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, lowp &gt; lowp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00037\">vector_uint1_precision.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga99d1b85ff99956b33da7e9992aad129a\"><div class=\"ttname\"><a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">glm::f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00554\">fwd.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacea38a85893e17e6834b6cb09a9ad0cf\"><div class=\"ttname\"><a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">glm::mediump_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00646\">fwd.hpp:646</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafc730f6b4242763b0eda0ffa25150292\"><div class=\"ttname\"><a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">glm::lowp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00572\">fwd.hpp:572</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaba56275dd04a7a61560b0e8fa5d365b4\"><div class=\"ttname\"><a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">glm::lowp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00634\">fwd.hpp:634</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7286a37076a09da140df18bfa75d4e38\"><div class=\"ttname\"><a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">glm::lowp_float64_t</a></div><div class=\"ttdeci\">double lowp_float64_t</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00173\">fwd.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5b44d3ef6efcf33f44876673a7a936e\"><div class=\"ttname\"><a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">glm::highp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00654\">fwd.hpp:654</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><div class=\"ttname\"><a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">glm::dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00020\">matrix_double4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4a1440b5ea3cf84d5b06c79b534bd770\"><div class=\"ttname\"><a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">glm::mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, mediump &gt; mediump_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00022\">matrix_float4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b2e0e10d8d154fec9cab50e216588ec\"><div class=\"ttname\"><a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">glm::lowp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, lowp &gt; lowp_u8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00324\">fwd.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8089722ffdf868cdfe721dea1fb6a90e\"><div class=\"ttname\"><a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">glm::mediump_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, mediump &gt; mediump_i64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00289\">fwd.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><div class=\"ttname\"><a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">glm::highp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, highp &gt; highp_f32quat</div><div class=\"ttdoc\">High single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00804\">fwd.hpp:804</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga9e1c9ee65fef547bde793e69723e24eb\"><div class=\"ttname\"><a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">glm::mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, mediump &gt; mediump_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00022\">matrix_float3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5a5452140650988b94d5716e4d872465\"><div class=\"ttname\"><a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">glm::lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, lowp &gt; lowp_bvec2</div><div class=\"ttdoc\">2 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00028\">vector_bool2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga907f85d4a0eac3d8aaf571e5c2647194\"><div class=\"ttname\"><a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">glm::mediump_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, mediump &gt; mediump_u8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00330\">fwd.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6aab4ee7189b86716f5d7015d43021d\"><div class=\"ttname\"><a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">glm::lowp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, lowp &gt; lowp_u16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00344\">fwd.hpp:344</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee80c7cd3caa0f2635058656755f6f69\"><div class=\"ttname\"><a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">glm::highp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00658\">fwd.hpp:658</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5086dbd6efb272d13fc88829330861d\"><div class=\"ttname\"><a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">glm::highp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00695\">fwd.hpp:695</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga197151b72dfaf289daf98b361760ffe7\"><div class=\"ttname\"><a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">glm::bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, defaultp &gt; bvec3</div><div class=\"ttdoc\">3 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00193_source.html#l00015\">vector_bool3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfd806749008f0ade6ac4bb9dd91082f\"><div class=\"ttname\"><a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">glm::highp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, highp &gt; highp_u16vec3</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00356\">fwd.hpp:356</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4dee61f8fe1caccec309fbed02faf12\"><div class=\"ttname\"><a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">glm::mediump_float32_t</a></div><div class=\"ttdeci\">float mediump_float32_t</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00158\">fwd.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><div class=\"ttname\"><a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">glm::mediump_f32</a></div><div class=\"ttdeci\">float mediump_f32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00148\">fwd.hpp:148</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga936e95b881ecd2d109459ca41913fa99\"><div class=\"ttname\"><a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">glm::mediump_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00688\">fwd.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gade62c5316c1c11a79c34c00c189558eb\"><div class=\"ttname\"><a href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">glm::lowp_quat</a></div><div class=\"ttdeci\">qua&lt; float, lowp &gt; lowp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00026\">quaternion_float_precision.hpp:26</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad6eb11412a3161ca8dc1d63b2a307c4b\"><div class=\"ttname\"><a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">glm::mediump_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, mediump &gt; mediump_f32vec2</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00452\">fwd.hpp:452</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf2d02c5f4d59135b9bc524fe317fd26b\"><div class=\"ttname\"><a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">glm::lowp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, lowp &gt; lowp_f64vec1</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00486\">fwd.hpp:486</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga36537e701456f12c20e73f469cac4967\"><div class=\"ttname\"><a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">glm::highp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00693\">fwd.hpp:693</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd926d36a72433f6cac51dd60fa13107\"><div class=\"ttname\"><a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">glm::mediump_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00763\">fwd.hpp:763</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga939fbf9c53008a8e84c7dd7cf8de29e2\"><div class=\"ttname\"><a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">glm::mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00022\">matrix_double3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaddc6f7748b699254942c5216b68f8f7f\"><div class=\"ttname\"><a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">glm::mediump_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, mediump &gt; mediump_u8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00331\">fwd.hpp:331</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga92cd388753d48e20de69ea2dbedf826a\"><div class=\"ttname\"><a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">glm::dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, defaultp &gt; dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00065_source.html#l00015\">matrix_double2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c9cd734e03cd49674f3e287aa4a6f95\"><div class=\"ttname\"><a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">glm::lowp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00758\">fwd.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga501a2f313f1c220eef4ab02bdabdc3c6\"><div class=\"ttname\"><a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">glm::lowp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, lowp &gt; lowp_i16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00242\">fwd.hpp:242</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga97507a31ecee8609887d0f23bbde92c7\"><div class=\"ttname\"><a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">glm::lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00016\">matrix_double2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7e286e81347011e257ee779524e73b9\"><div class=\"ttname\"><a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">glm::lowp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, lowp &gt; lowp_u32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00365\">fwd.hpp:365</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae71445ac6cd0b9fba3e5c905cd030fb1\"><div class=\"ttname\"><a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">glm::mediump_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00682\">fwd.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9d1903cb20899966e8ebe0670889a5f\"><div class=\"ttname\"><a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">glm::highp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, highp &gt; highp_i64vec2</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00293\">fwd.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4491baaebbc46a20f1cb5da985576bf4\"><div class=\"ttname\"><a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">glm::mediump_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00546\">fwd.hpp:546</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1eda47a00027ec440eac05d63739c71b\"><div class=\"ttname\"><a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">glm::highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; highp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00028\">matrix_float3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga58cc504be0e3b61c48bc91554a767b9f\"><div class=\"ttname\"><a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">glm::highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00046\">matrix_float4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2f4f6e9a69a0281d06940fd0990cafc3\"><div class=\"ttname\"><a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">glm::mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, mediump &gt; mediump_dvec2</div><div class=\"ttdoc\">2 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00022\">vector_double2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac61b94f5d9775f83f321bac899322fe2\"><div class=\"ttname\"><a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">glm::lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00034\">matrix_double2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga79e0922a977662a8fd39d7829be3908b\"><div class=\"ttname\"><a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">glm::lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, lowp &gt; lowp_bvec3</div><div class=\"ttdoc\">3 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00028\">vector_bool3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac5fc6786688eff02904ca5e7d6960092\"><div class=\"ttname\"><a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">glm::lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, lowp &gt; lowp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00016\">matrix_float3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga686468a9a815bd4db8cddae42a6d6b87\"><div class=\"ttname\"><a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">glm::lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00034\">matrix_float4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga9e8ed21862a897c156c0b2abca70b1e9\"><div class=\"ttname\"><a href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">glm::highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00027\">vector_float1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb33cab7d7c74cc14aa95455d0690865\"><div class=\"ttname\"><a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">glm::mediump_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, mediump &gt; mediump_f32vec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00451\">fwd.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8df705d775b776f5ae6b39e2ab892899\"><div class=\"ttname\"><a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">glm::mediump_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00685\">fwd.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae98c88d9a7befa9b5877f49176225535\"><div class=\"ttname\"><a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">glm::highp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00532\">fwd.hpp:532</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><div class=\"ttname\"><a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">glm::highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, highp &gt; highp_uvec2</div><div class=\"ttdoc\">2 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00016\">vector_uint2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga522775dbcc6d96246a1c5cf02344fd8c\"><div class=\"ttname\"><a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">glm::highp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, highp &gt; highp_f32vec3</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00458\">fwd.hpp:458</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cdf57d29f9448864237b2fb3e39aa1d\"><div class=\"ttname\"><a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">glm::mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00040\">matrix_float2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac7bb04fb857ef7b520e49f6c381432be\"><div class=\"ttname\"><a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">glm::mediump_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, mediump &gt; mediump_i8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00230\">fwd.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41b0d390bd8cc827323b1b3816ff4bf8\"><div class=\"ttname\"><a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">glm::lowp_float32</a></div><div class=\"ttdeci\">float lowp_float32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00152\">fwd.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><div class=\"ttname\"><a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">glm::mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, mediump &gt; mediump_uvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00022\">vector_uint2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab98d77cca255914f5e29697fcbc2d975\"><div class=\"ttname\"><a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">glm::highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; highp_dvec2</div><div class=\"ttdoc\">2 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00016\">vector_double2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bed890513c0f50b7e7ba4f7f359dbfb\"><div class=\"ttname\"><a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">glm::mediump_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_fvec4</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00434\">fwd.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga745452bd9c89f5ad948203e4fb4b4ea3\"><div class=\"ttname\"><a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">glm::mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00022\">matrix_float2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ee2bc4af03cc06578b66b3e3f878ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">glm::lowp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, lowp &gt; lowp_f64quat</div><div class=\"ttdoc\">Low double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00812\">fwd.hpp:812</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gacd18864049f8c83799babe7e596ca05b\"><div class=\"ttname\"><a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">glm::dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, defaultp &gt; dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00077_source.html#l00015\">matrix_double4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaeda1f474c668eaecc443bea85a4a4eca\"><div class=\"ttname\"><a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">glm::highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00028\">matrix_double4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0feb11edd0d3ab3e8ed996d349a5066\"><div class=\"ttname\"><a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">glm::lowp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00630\">fwd.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4824e3ddf6e608117dfe4809430737b4\"><div class=\"ttname\"><a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">glm::highp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, highp &gt; highp_i8vec4</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00235\">fwd.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fccc89c34045c86339f6fa781ce96de\"><div class=\"ttname\"><a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">glm::lowp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, lowp &gt; lowp_u64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00387\">fwd.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c94aeae3457325944ca1059b0b68330\"><div class=\"ttname\"><a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">glm::mediump_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, mediump &gt; mediump_i64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00288\">fwd.hpp:288</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58c4631421e323e252fc716b6103e38c\"><div class=\"ttname\"><a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">glm::highp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</div><div class=\"ttdoc\">High double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00776\">fwd.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad72e13d669d039f12ae5afa23148adc1\"><div class=\"ttname\"><a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">glm::highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00028\">matrix_float4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab68b66e6d2c37b804d0baf970fa4f0e5\"><div class=\"ttname\"><a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">glm::highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; highp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00028\">matrix_float4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga867a3c2d99ab369a454167d2c0a24dbd\"><div class=\"ttname\"><a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">glm::lowp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, lowp &gt; lowp_i32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00263\">fwd.hpp:263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafcfdd74a115163af2ce1093551747352\"><div class=\"ttname\"><a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">glm::highp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, highp &gt; highp_f64quat</div><div class=\"ttdoc\">High double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00814\">fwd.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8ebc04ecf6440c4ee24718a16600ce6b\"><div class=\"ttname\"><a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">glm::mediump_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, mediump &gt; mediump_f64vec2</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00492\">fwd.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga346b2336fff168a7e0df1583aae3e5a5\"><div class=\"ttname\"><a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">glm::lowp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_fvec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00426\">fwd.hpp:426</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga659f372ccb8307d5db5beca942cde5e8\"><div class=\"ttname\"><a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">glm::mediump_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, mediump &gt; mediump_u64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00389\">fwd.hpp:389</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf9020c6176a75bc84828ab01ea7dac25\"><div class=\"ttname\"><a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">glm::mediump_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00544\">fwd.hpp:544</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga92a204c37e66ac6c1dc7ae91142f2ea5\"><div class=\"ttname\"><a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">glm::mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, mediump &gt; mediump_ivec4</div><div class=\"ttdoc\">4 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00022\">vector_int4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><div class=\"ttname\"><a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">glm::highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; highp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00028\">matrix_float2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga6d40381d78472553f878f66e443feeef\"><div class=\"ttname\"><a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">glm::mediump_f64</a></div><div class=\"ttdeci\">double mediump_f64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00164\">fwd.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga367964fc2133d3f1b5b3755ff9cf6c9b\"><div class=\"ttname\"><a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">glm::mediump_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_fvec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00431\">fwd.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae0b75ad0fed8c00ddc0b5ce335d31060\"><div class=\"ttname\"><a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">glm::highp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, highp &gt; highp_u8vec4</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00337\">fwd.hpp:337</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00036.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: geometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">geometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00036_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).  <a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the dot product of x and y, i.e., result = x * y.  <a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a> (vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</td></tr>\n<tr class=\"memdesc:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N.  <a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the length of x, i.e., sqrt(x * x).  <a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a vector in the same direction as x but with length of 1.  <a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</td></tr>\n<tr class=\"memdesc:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.  <a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</td></tr>\n<tr class=\"memdesc:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.  <a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.5 Geometric Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00036_source.html\">geometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00036_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: geometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">geometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00036.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">detail/type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Nref);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a>(</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a>(</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T eta);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_geometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00279_html_ga5631dd1d5618de5450b1ea3cf3e94905\"><div class=\"ttname\"><a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">glm::reflect</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; reflect(vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</div><div class=\"ttdoc\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...</div></div>\n<div class=\"ttc\" id=\"a00279_html_ga7aed0a36c738169402404a3a5d54e43b\"><div class=\"ttname\"><a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">glm::faceforward</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; faceforward(vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</div><div class=\"ttdoc\">If dot(Nref, I) < 0.0, return N, otherwise, return -N. </div></div>\n<div class=\"ttc\" id=\"a00279_html_ga0cdabbb000834d994a1d6dc56f8f5263\"><div class=\"ttname\"><a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the length of x, i.e., sqrt(x * x). </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaeeec0794212fe84fc9d261de067c9587\"><div class=\"ttname\"><a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the cross product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00279_html_ga01da3dff9e2ef6b9d4915c3047e22b74\"><div class=\"ttname\"><a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">glm::refract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; refract(vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</div><div class=\"ttdoc\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta...</div></div>\n<div class=\"ttc\" id=\"a00279_html_ga3b8d3dcae77870781392ed2902cce597\"><div class=\"ttname\"><a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; normalize(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a vector in the same direction as x but with length of 1. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaa68de6c53e20dfb2dac2d20197562e3f\"><div class=\"ttname\"><a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">glm::distance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><div class=\"ttname\"><a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">glm::dot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the dot product of x and y, i.e., result = x * y. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00037.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00037_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00037_source.html\">glm.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00037_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00037.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &lt;climits&gt;</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">#include &lt;cassert&gt;</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#include &quot;fwd.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00184.html\">vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00185.html\">vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00186.html\">vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00048.html\">mat2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00049.html\">mat2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00050.html\">mat2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00051.html\">mat3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00052.html\">mat3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00053.html\">mat3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00054.html\">mat4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00055.html\">mat4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00056.html\">mat4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00160.html\">trigonometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00026.html\">exponential.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00015.html\">common.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00120.html\">packing.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00036.html\">geometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00057.html\">matrix.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00225.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00043.html\">integer.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">mat4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00015_html\"><div class=\"ttname\"><a href=\"a00015.html\">common.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">mat2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00055_html\"><div class=\"ttname\"><a href=\"a00055.html\">mat4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00184_html\"><div class=\"ttname\"><a href=\"a00184.html\">vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00043_html\"><div class=\"ttname\"><a href=\"a00043.html\">integer.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00026_html\"><div class=\"ttname\"><a href=\"a00026.html\">exponential.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00120_html\"><div class=\"ttname\"><a href=\"a00120.html\">packing.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00049_html\"><div class=\"ttname\"><a href=\"a00049.html\">mat2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00054_html\"><div class=\"ttname\"><a href=\"a00054.html\">mat4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00225_html\"><div class=\"ttname\"><a href=\"a00225.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00052_html\"><div class=\"ttname\"><a href=\"a00052.html\">mat3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00057_html\"><div class=\"ttname\"><a href=\"a00057.html\">matrix.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00186_html\"><div class=\"ttname\"><a href=\"a00186.html\">vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00160_html\"><div class=\"ttname\"><a href=\"a00160.html\">trigonometric.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">mat3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00051_html\"><div class=\"ttname\"><a href=\"a00051.html\">mat3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00185_html\"><div class=\"ttname\"><a href=\"a00185.html\">vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00048_html\"><div class=\"ttname\"><a href=\"a00048.html\">mat2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00036_html\"><div class=\"ttname\"><a href=\"a00036.html\">geometric.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00038.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gradient_paint.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gradient_paint.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00038_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:ga849241df1e55129b8ce9476200307419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a linear gradient.  <a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga849241df1e55129b8ce9476200307419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a radial gradient.  <a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00038_source.html\">gradient_paint.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00038_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gradient_paint.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gradient_paint.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00038.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/optimum_pow.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_gradient_paint extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a>(</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Center,</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                T <span class=\"keyword\">const</span>&amp; Radius,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Focal,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Position);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Point0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Point1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Position);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#include &quot;gradient_paint.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00327_html_gaaecb1e93de4cbe0758b882812d4da294\"><div class=\"ttname\"><a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">glm::radialGradient</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T radialGradient(vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</div><div class=\"ttdoc\">Return a color from a radial gradient. </div></div>\n<div class=\"ttc\" id=\"a00327_html_ga849241df1e55129b8ce9476200307419\"><div class=\"ttname\"><a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">glm::linearGradient</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T linearGradient(vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</div><div class=\"ttdoc\">Return a color from a linear gradient. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00039.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: handed_coordinate_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">handed_coordinate_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00039_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron left handed or not.  <a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga99386a5ab5491871b947076e21699cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron right handed or not.  <a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00039_source.html\">handed_coordinate_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00039_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: handed_coordinate_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">handed_coordinate_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00039.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_handed_coordinate_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; tangent,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; binormal,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; tangent,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; binormal,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;handed_coordinate_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00328_html_ga6f1bad193b9a3b048543d1935cf04dd3\"><div class=\"ttname\"><a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">glm::leftHanded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool leftHanded(vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Return if a trihedron left handed or not. </div></div>\n<div class=\"ttc\" id=\"a00328_html_ga99386a5ab5491871b947076e21699cc8\"><div class=\"ttname\"><a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">glm::rightHanded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool rightHanded(vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Return if a trihedron right handed or not. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00040.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: hash.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">hash.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00040_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00040_source.html\">hash.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00040_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: hash.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">hash.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00040.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_hash extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#if !GLM_HAS_CXX11_STL</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_GTX_hash requires C++11 standard library support&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00240.html\">std</a></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;1, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::qua&lt;T,Q&gt;&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::tdualquat&lt;T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::tdualquat&lt;T,Q&gt; <span class=\"keyword\">const</span>&amp; q) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;} <span class=\"comment\">// namespace std</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#include &quot;hash.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00240_html\"><div class=\"ttname\"><a href=\"a00240.html\">std</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00040_source.html#l00049\">hash.hpp:49</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00041.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00041_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga9bd682e74bfacb005c735305207ec417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the log2 of x for integer values.  <a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00041_source.html\">gtc/integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00041_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00041.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00292_html_ga6715b9d573972a0f7763d30d45bcaec4\"><div class=\"ttname\"><a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">glm::uround</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; uround(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00292_html_ga9bd682e74bfacb005c735305207ec417\"><div class=\"ttname\"><a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">glm::log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType log2(genIUType x)</div><div class=\"ttdoc\">Returns the log2 of x for integer values. </div></div>\n<div class=\"ttc\" id=\"a00292_html_ga57824268ebe13a922f1d69a5d37f637f\"><div class=\"ttname\"><a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">glm::iround</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; iround(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00042.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00042_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef signed int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a></td></tr>\n<tr class=\"memdesc:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit signed integer.  <a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">More...</a><br /></td></tr>\n<tr class=\"separator:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.  <a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a> (unsigned int x)</td></tr>\n<tr class=\"memdesc:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the floor log2 of x.  <a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">mod</a> (int x, int y)</td></tr>\n<tr class=\"memdesc:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of leading zeros.  <a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">pow</a> (int x, uint y)</td></tr>\n<tr class=\"memdesc:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">sqrt</a> (int x)</td></tr>\n<tr class=\"memdesc:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00042_source.html\">gtx/integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00042_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00042.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a>(<span class=\"keywordtype\">int</span> x, uint y);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a>(<span class=\"keywordtype\">int</span> x);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a>(<span class=\"keywordtype\">int</span> x, <span class=\"keywordtype\">int</span> y);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                                      <a class=\"code\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a>(uint x, uint y);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a>(uint x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a>(uint x, uint y);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a>(uint x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00330_html_ga78dff8bdb361bf0061194c93e003d189\"><div class=\"ttname\"><a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">glm::nlz</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint nlz(uint x)</div><div class=\"ttdoc\">Returns the number of leading zeros. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga63fc8d63e7da1706439233b386ba8b6f\"><div class=\"ttname\"><a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">glm::mod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint mod(uint x, uint y)</div><div class=\"ttdoc\">Modulus. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga7011b4e1c1e1ed492149b028feacc00e\"><div class=\"ttname\"><a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">glm::floor_log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL unsigned int floor_log2(unsigned int x)</div><div class=\"ttdoc\">Returns the floor log2 of x. </div></div>\n<div class=\"ttc\" id=\"a00330_html_gada7e83fdfe943aba4f1d5bf80cb66f40\"><div class=\"ttname\"><a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">glm::sint</a></div><div class=\"ttdeci\">signed int sint</div><div class=\"ttdoc\">32bit signed integer. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00042_source.html#l00055\">gtx/integer.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00330_html_ga8cbd3120905f398ec321b5d1836e08fb\"><div class=\"ttname\"><a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">glm::factorial</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType factorial(genType const &amp;x)</div><div class=\"ttdoc\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...</div></div>\n<div class=\"ttc\" id=\"a00330_html_ga998e5ee915d3769255519e2fbaa2bbf0\"><div class=\"ttname\"><a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint pow(uint x, uint y)</div><div class=\"ttdoc\">Returns x raised to the y power. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga1975d318978d6dacf78b6444fa5ed7bc\"><div class=\"ttname\"><a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint sqrt(uint x)</div><div class=\"ttdoc\">Returns the positive square root of x. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00043.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00043_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">bitCount</a> (genType v)</td></tr>\n<tr class=\"memdesc:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a> (vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.  <a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a> (vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga2e82992340d421fadb61a473df699b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the insertion the bits least-significant bits of insert into base.  <a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e82992340d421fadb61a473df699b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reversal of the bits of value.  <a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">findLSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">findMSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a> (vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:gac0c510a70e852f57594a9141848642e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0c510a70e852f57594a9141848642e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</td></tr>\n<tr class=\"memdesc:gaedcec48743632dff6786bcc492074b1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).  <a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</td></tr>\n<tr class=\"memdesc:gae3316ba1229ad9b9f09480833321b053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.  <a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.8 Integer Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00043_source.html\">integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00043_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00043.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00015.html\">common.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00225.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;L, uint, Q&gt; &amp; carry);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a>(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                vec&lt;L, uint, Q&gt; &amp; borrow);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a>(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                vec&lt;L, uint, Q&gt; &amp; msb,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                vec&lt;L, uint, Q&gt; &amp; lsb);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;L, int, Q&gt; &amp; msb,</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                vec&lt;L, int, Q&gt; &amp; lsb);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a>(</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value,</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                <span class=\"keywordtype\">int</span> Offset,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                <span class=\"keywordtype\">int</span> Bits);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a>(</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Base,</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Insert,</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                <span class=\"keywordtype\">int</span> Offset,</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                <span class=\"keywordtype\">int</span> Bits);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a>(genType v);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00015_html\"><div class=\"ttname\"><a href=\"a00015.html\">common.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga39ac4d52028bb6ab08db5ad6562c2872\"><div class=\"ttname\"><a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">glm::findMSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findMSB(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the bit number of the most significant bit in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00370_html_ga732e2fb56db57ea541c7e5c92b7121be\"><div class=\"ttname\"><a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">glm::umulExtended</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void umulExtended(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</div><div class=\"ttdoc\">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gac0c510a70e852f57594a9141848642e3\"><div class=\"ttname\"><a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">glm::imulExtended</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void imulExtended(vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</div><div class=\"ttdoc\">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><div class=\"ttname\"><a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">glm::bitCount</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; bitCount(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the number of bits set to 1 in the binary representation of value. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gaedcec48743632dff6786bcc492074b1b\"><div class=\"ttname\"><a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">glm::uaddCarry</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; uaddCarry(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</div><div class=\"ttdoc\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga346b25ab11e793e91a4a69c8aa6819f2\"><div class=\"ttname\"><a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">glm::bitfieldExtract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldExtract(vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</div><div class=\"ttdoc\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...</div></div>\n<div class=\"ttc\" id=\"a00370_html_ga2e82992340d421fadb61a473df699b20\"><div class=\"ttname\"><a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">glm::bitfieldInsert</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldInsert(vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</div><div class=\"ttdoc\">Returns the insertion the bits least-significant bits of insert into base. </div></div>\n<div class=\"ttc\" id=\"a00225_html\"><div class=\"ttname\"><a href=\"a00225.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga750a1d92464489b7711dee67aa3441b6\"><div class=\"ttname\"><a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">glm::bitfieldReverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldReverse(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the reversal of the bits of value. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gae3316ba1229ad9b9f09480833321b053\"><div class=\"ttname\"><a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">glm::usubBorrow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; usubBorrow(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</div><div class=\"ttdoc\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga4454c0331d6369888c28ab677f4810c7\"><div class=\"ttname\"><a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">glm::findLSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findLSB(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the bit number of the least significant bit set to 1 in the binary representation of value...</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00044.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: intersect.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">intersect.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00044_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a> (genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</td></tr>\n<tr class=\"memdesc:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a sphere.  <a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</td></tr>\n<tr class=\"memdesc:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a triangle.  <a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gad3697a9700ea379739a667ea02573488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a plane.  <a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3697a9700ea379739a667ea02573488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection distance of a ray and a sphere.  <a href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</td></tr>\n<tr class=\"memdesc:gad28c00515b823b579c608aafa1100c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a sphere.  <a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</td></tr>\n<tr class=\"memdesc:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a triangle.  <a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00310.html\" title=\"Include <glm/gtx/closest_point.hpp> to use the features of this extension. \">GLM_GTX_closest_point</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00044_source.html\">intersect.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00044_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: intersect.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">intersect.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00044.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/closest_point.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/vector_query.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                genType <span class=\"keyword\">const</span>&amp; orig, genType <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                genType <span class=\"keyword\">const</span>&amp; planeOrig, genType <span class=\"keyword\">const</span>&amp; planeNormal,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type &amp; intersectionDistance);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; orig, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;2, T, Q&gt;&amp; baryPosition, T&amp; <a class=\"code\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                genType <span class=\"keyword\">const</span>&amp; orig, genType <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                genType <span class=\"keyword\">const</span>&amp; vert0, genType <span class=\"keyword\">const</span>&amp; vert1, genType <span class=\"keyword\">const</span>&amp; vert2,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                genType &amp; position);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                genType <span class=\"keyword\">const</span>&amp; rayStarting, genType <span class=\"keyword\">const</span>&amp; rayNormalizedDirection,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> sphereRadiusSquared,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type &amp; intersectionDistance);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a>(</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                genType <span class=\"keyword\">const</span>&amp; rayStarting, genType <span class=\"keyword\">const</span>&amp; rayNormalizedDirection,</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> genType::value_type sphereRadius,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                genType &amp; intersectionPosition, genType &amp; intersectionNormal);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a>(</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                genType <span class=\"keyword\">const</span>&amp; point0, genType <span class=\"keyword\">const</span>&amp; point1,</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">typename</span> genType::value_type sphereRadius,</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                genType &amp; intersectionPosition1, genType &amp; intersectionNormal1,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                genType &amp; intersectionPosition2 = genType(), genType &amp; intersectionNormal2 = genType());</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;intersect.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00331_html_ga65bf2c594482f04881c36bc761f9e946\"><div class=\"ttname\"><a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">glm::intersectRayTriangle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRayTriangle(vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</div><div class=\"ttdoc\">Compute the intersection of a ray and a triangle. </div></div>\n<div class=\"ttc\" id=\"a00331_html_gad28c00515b823b579c608aafa1100c1d\"><div class=\"ttname\"><a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">glm::intersectRaySphere</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</div><div class=\"ttdoc\">Compute the intersection of a ray and a sphere. </div></div>\n<div class=\"ttc\" id=\"a00331_html_gad3697a9700ea379739a667ea02573488\"><div class=\"ttname\"><a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">glm::intersectRayPlane</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRayPlane(genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</div><div class=\"ttdoc\">Compute the intersection of a ray and a plane. </div></div>\n<div class=\"ttc\" id=\"a00331_html_ga9d29b9b3acb504d43986502f42740df4\"><div class=\"ttname\"><a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">glm::intersectLineTriangle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectLineTriangle(genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</div><div class=\"ttdoc\">Compute the intersection of a line and a triangle. </div></div>\n<div class=\"ttc\" id=\"a00331_html_ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><div class=\"ttname\"><a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">glm::intersectLineSphere</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectLineSphere(genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</div><div class=\"ttdoc\">Compute the intersection of a line and a sphere. </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaa68de6c53e20dfb2dac2d20197562e3f\"><div class=\"ttname\"><a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">glm::distance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00045.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: io.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">io.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00045_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Jan P Springer (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'reg'+'ni'+'rps'+'j@'+'gma'+'il'+'.co'+'m'; return false;\">regni<span style=\"display: none;\">.nosp@m.</span>rpsj<span style=\"display: none;\">.nosp@m.</span>@gmai<span style=\"display: none;\">.nosp@m.</span>l.co<span style=\"display: none;\">.nosp@m.</span>m</a>)</dd></dl>\n<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>\n<dd>\n<a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00045_source.html\">io.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00045_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: io.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">io.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00045.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_io extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;iosfwd&gt;</span>  <span class=\"comment\">// std::basic_ostream&lt;&gt; (fwd)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;locale&gt;</span>  <span class=\"comment\">// std::locale, std::locale::facet, std::locale::id</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;utility&gt;</span> <span class=\"comment\">// std::pair&lt;&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">namespace </span>io</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">enum</span> order_type { column_major, row_major};</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">class </span>format_punct : <span class=\"keyword\">public</span> std::locale::facet</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        <span class=\"keyword\">typedef</span> CTy char_type;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        <span class=\"keyword\">static</span> std::locale::id id;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        <span class=\"keywordtype\">bool</span>       formatted;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        <span class=\"keywordtype\">unsigned</span>   precision;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        <span class=\"keywordtype\">unsigned</span>   width;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        char_type  separator;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        char_type  delim_left;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        char_type  delim_right;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        char_type  space;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        char_type  newline;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        order_type order;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> format_punct(<span class=\"keywordtype\">size_t</span> a = 0);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> format_punct(format_punct <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr = std::<span class=\"keywordtype\">char</span>_traits&lt;CTy&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">class </span>basic_state_saver {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> basic_state_saver(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                        GLM_FUNC_DECL ~basic_state_saver();</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        typedef ::std::basic_ios&lt;CTy,CTr&gt;      state_type;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> state_type::char_type char_type;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                        typedef ::std::ios_base::fmtflags      flags_type;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                        typedef ::std::streamsize              streamsize_type;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                        typedef ::std::locale <span class=\"keyword\">const</span>            locale_type;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                        state_type&amp;     state_;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                        flags_type      flags_;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                        streamsize_type precision_;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                        streamsize_type width_;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                        char_type       fill_;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                        locale_type     locale_;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        GLM_FUNC_DECL basic_state_saver&amp; operator=(basic_state_saver <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"keyword\">typedef</span> basic_state_saver&lt;char&gt;     state_saver;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                <span class=\"keyword\">typedef</span> basic_state_saver&lt;wchar_t&gt; wstate_saver;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr = std::<span class=\"keywordtype\">char</span>_traits&lt;CTy&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <span class=\"keyword\">class </span>basic_format_saver</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> basic_format_saver(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                        GLM_FUNC_DECL ~basic_format_saver();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                        basic_state_saver&lt;CTy&gt; <span class=\"keyword\">const</span> bss_;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                        GLM_FUNC_DECL basic_format_saver&amp; operator=(basic_format_saver <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                <span class=\"keyword\">typedef</span> basic_format_saver&lt;char&gt;     format_saver;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keyword\">typedef</span> basic_format_saver&lt;wchar_t&gt; wformat_saver;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                <span class=\"keyword\">struct </span>precision</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordtype\">unsigned</span> value;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> precision(<span class=\"keywordtype\">unsigned</span>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                <span class=\"keyword\">struct </span>width</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                        <span class=\"keywordtype\">unsigned</span> value;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> width(<span class=\"keywordtype\">unsigned</span>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keyword\">struct </span>delimeter</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        CTy value[3];</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> delimeter(CTy <span class=\"comment\">/* left */</span>, CTy <span class=\"comment\">/* right */</span>, CTy <span class=\"comment\">/* separator */</span> = <span class=\"charliteral\">&#39;,&#39;</span>);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                <span class=\"keyword\">struct </span>order</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                        order_type value;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> order(order_type);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                <span class=\"comment\">// functions, inlined (inline)</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                FTy <span class=\"keyword\">const</span>&amp; get_facet(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                std::basic_ios&lt;CTy,CTr&gt;&amp; formatted(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                std::basic_ios&lt;CTy,CTr&gt;&amp; unformattet(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, precision <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, width <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, delimeter&lt;CTy&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, order <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        }<span class=\"comment\">//namespace io</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;  <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt; &amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt; &amp;,</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                                                         std::pair&lt;mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">#include &quot;io.inl&quot;</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00046.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: log_base.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">log_base.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00046_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a> (genType const &amp;x, genType const &amp;base)</td></tr>\n<tr class=\"memdesc:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</td></tr>\n<tr class=\"memdesc:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00046_source.html\">log_base.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00046_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: log_base.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">log_base.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00046.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_log_base extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                genType <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; base);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; base);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;log_base.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00333_html_ga04ef803a24f3d4f8c67dbccb33b0fce0\"><div class=\"ttname\"><a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">glm::sign</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</div><div class=\"ttdoc\">Logarithm for any base. </div></div>\n<div class=\"ttc\" id=\"a00333_html_ga60a7b0a401da660869946b2b77c710c9\"><div class=\"ttname\"><a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType log(genType const &amp;x, genType const &amp;base)</div><div class=\"ttdoc\">Logarithm for any base. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00047_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: man.doxy Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">man.doxy</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\"># Doxyfile 1.8.10</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\"># This file describes the settings to be used by the documentation system</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\"># doxygen (www.doxygen.org) for a project.</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\"># All text after a double hash (##) is considered a comment and is placed in</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\"># front of the TAG it is preceding.</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\"># All text after a single hash (#) is considered a comment and will be ignored.</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\"># The format is:</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\"># TAG = value [value, ...]</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\"># For lists, items can also be appended using:</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\"># TAG += value [value, ...]</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\"># Values that contain spaces should be placed between quotes (\\&quot; \\&quot;).</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\"># Project related configuration options</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\"># This tag specifies the encoding used for all characters in the config file</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\"># that follow. The default is UTF-8 which is also the encoding used for all text</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\"># before the first occurrence of this tag. Doxygen uses libiconv (or the iconv</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\"># built into libc) for the transcoding. See http://www.gnu.org/software/libiconv</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\"># for the list of possible encodings.</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\"># The default value is: UTF-8.</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;DOXYFILE_ENCODING      = UTF-8</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\"># The PROJECT_NAME tag is a single word (or a sequence of words surrounded by</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\"># double-quotes, unless you are using Doxywizard) that should identify the</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\"># project for which the documentation is generated. This name is used in the</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\"># title of most generated pages and in a few other places.</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\"># The default value is: My Project.</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;PROJECT_NAME           = <span class=\"stringliteral\">&quot;0.9.9 API documentation&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\"># The PROJECT_NUMBER tag can be used to enter a project or revision number. This</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\"># could be handy for archiving the generated documentation or if some version</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\"># control system is used.</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;PROJECT_NUMBER         = </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\"># Using the PROJECT_BRIEF tag one can provide an optional one line description</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\"># for a project that appears at the top of each page and should give viewer a</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\"># quick idea about the purpose of the project. Keep the description short.</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;PROJECT_BRIEF          = </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\"># With the PROJECT_LOGO tag one can specify a logo or an icon that is included</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\"># in the documentation. The maximum height of the logo should not exceed 55</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\"># pixels and the maximum width should not exceed 200 pixels. Doxygen will copy</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\"># the logo to the output directory.</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;PROJECT_LOGO           = theme/logo-mini.png</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\"># The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\"># into which the generated documentation will be written. If a relative path is</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\"># entered, it will be relative to the location where doxygen was started. If</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\"># left blank the current directory will be used.</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;OUTPUT_DIRECTORY       = .</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\"># directories (in 2 levels) under the output directory of each output format and</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\"># will distribute the generated files over these directories. Enabling this</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\"># option can be useful when feeding doxygen a huge amount of source files, where</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\"># putting all generated files in the same directory would otherwise causes</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\"># performance problems for the file system.</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;CREATE_SUBDIRS         = NO</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\"># If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\"># characters to appear in the names of generated files. If set to NO, non-ASCII</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\"># characters will be escaped, for example _xE3_x81_x84 will be used for Unicode</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\"># U+3044.</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;ALLOW_UNICODE_NAMES    = NO</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\"># The OUTPUT_LANGUAGE tag is used to specify the language in which all</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\"># documentation generated by doxygen is written. Doxygen will use this</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\"># information to generate all constant output in the proper language.</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\"># Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\"># Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\"># Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\"># Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\"># Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\"># Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\"># Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\"># Ukrainian and Vietnamese.</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\"># The default value is: English.</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;OUTPUT_LANGUAGE        = English</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\"># If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\"># descriptions after the members that are listed in the file and class</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\"># documentation (similar to Javadoc). Set to NO to disable this.</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;BRIEF_MEMBER_DESC      = YES</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\"># If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\"># description of a member or function before the detailed description</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\"># Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\"># brief descriptions will be completely suppressed.</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;REPEAT_BRIEF           = YES</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\"># This tag implements a quasi-intelligent brief description abbreviator that is</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\"># used to form the text in various listings. Each string in this list, if found</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\"># as the leading text of the brief description, will be stripped from the text</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\"># and the result, after processing the whole list, is used as the annotated</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\"># text. Otherwise, the brief description is used as-is. If left blank, the</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\"># following values are used ($name is automatically replaced with the name of</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\"># the entity):The $name class, The $name widget, The $name file, is, provides,</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\"># specifies, contains, represents, a, an and the.</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;ABBREVIATE_BRIEF       = <span class=\"stringliteral\">&quot;The $name class       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                         <span class=\"stringliteral\">&quot;The $name widget       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                         <span class=\"stringliteral\">&quot;The $name file       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                         is \\</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                         provides \\</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                         specifies \\</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                         contains \\</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                         represents \\</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                         a \\</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                         an \\</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                         the</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\"># If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\"># doxygen will generate a detailed section even if there is only a brief</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\"># description.</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;ALWAYS_DETAILED_SEC    = NO</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\"># If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\"># inherited members of a class in the documentation of that class as if those</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\"># members were ordinary class members. Constructors, destructors and assignment</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\"># operators of the base classes will not be shown.</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;INLINE_INHERITED_MEMB  = NO</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\"># If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\"># before files name in the file list and in the header files. If set to NO the</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\"># shortest path that makes the file name unique will be used</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;FULL_PATH_NAMES        = NO</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\"># The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\"># Stripping is only done if one of the specified strings matches the left-hand</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\"># part of the path. The tag can be used to show relative paths in the file list.</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\"># If left blank the directory from which doxygen is run is used as the path to</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\"># strip.</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\"># Note that you can specify absolute paths here, but also relative paths, which</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\"># will be relative from the directory where doxygen is started.</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\"># This tag requires that the tag FULL_PATH_NAMES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;STRIP_FROM_PATH        = <span class=\"stringliteral\">&quot;C:/Documents and Settings/Groove/       &quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\"># The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\"># path mentioned in the documentation of a class, which tells the reader which</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\"># header file to include in order to use a class. If left blank only the name of</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\"># the header file containing the class definition is used. Otherwise one should</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\"># specify the list of include paths that are normally passed to the compiler</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\"># using the -I flag.</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;STRIP_FROM_INC_PATH    = </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\"># If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\"># less readable) file names. This can be useful is your file systems doesn&#39;t</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\"># support long names like on DOS, Mac, or CD-ROM.</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;SHORT_NAMES            = YES</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\"># If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\"># first line (until the first dot) of a Javadoc-style comment as the brief</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\"># description. If set to NO, the Javadoc-style will behave just like regular Qt-</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\"># style comments (thus requiring an explicit @brief command for a brief</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\"># description.)</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;JAVADOC_AUTOBRIEF      = YES</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;<span class=\"preprocessor\"># If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\"># line (until the first dot) of a Qt-style comment as the brief description. If</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\"># set to NO, the Qt-style will behave just like regular Qt-style comments (thus</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\"># requiring an explicit \\brief command for a brief description.)</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;QT_AUTOBRIEF           = NO</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\"># The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\"># multi-line C++ special comment block (i.e. a block of </span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\"># a brief description. This used to be the default behavior. The new default is</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\"># to treat a multi-line C++ comment block as a detailed description. Set this</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\"># tag to YES if you prefer the old behavior instead.</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\"># Note that setting this tag to YES also means that rational rose comments are</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\"># not recognized any more.</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;MULTILINE_CPP_IS_BRIEF = NO</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\"># If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\"># documentation from any documented member that it re-implements.</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;INHERIT_DOCS           = YES</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\"># If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\"># page for each member. If set to NO, the documentation of a member will be part</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\"># of the file/class/namespace that contains it.</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;SEPARATE_MEMBER_PAGES  = NO</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\"># The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\"># uses this value to replace tabs by spaces in code fragments.</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\"># Minimum value: 1, maximum value: 16, default value: 4.</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;TAB_SIZE               = 8</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\"># This tag can be used to specify a number of aliases that act as commands in</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\"># the documentation. An alias has the form:</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\"># name=value</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\"># For example adding</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\"># &quot;sideeffect=@par Side Effects:\\n&quot;</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\"># will allow you to put the command \\sideeffect (or @sideeffect) in the</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\"># documentation, which will result in a user-defined paragraph with heading</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\"># &quot;Side Effects:&quot;. You can put \\n&#39;s in the value part of an alias to insert</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\"># newlines.</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;ALIASES                = </div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\"># This tag can be used to specify a number of word-keyword mappings (TCL only).</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\"># A mapping has the form &quot;name=value&quot;. For example adding &quot;class=itcl::class&quot;</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\"># will allow you to use the command class in the itcl::class meaning.</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;TCL_SUBST              = </div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\"># only. Doxygen will then generate output that is more tailored for C. For</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\"># instance, some of the names that are used will be different. The list of all</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\"># members will be omitted, etc.</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;OPTIMIZE_OUTPUT_FOR_C  = NO</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\"># Python sources only. Doxygen will then generate output that is more tailored</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\"># for that language. For instance, namespaces will be presented as packages,</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\"># qualified scopes will look different, etc.</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;OPTIMIZE_OUTPUT_JAVA   = NO</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\"># sources. Doxygen will then generate output that is tailored for Fortran.</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;OPTIMIZE_FOR_FORTRAN   = NO</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\"># sources. Doxygen will then generate output that is tailored for VHDL.</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;OPTIMIZE_OUTPUT_VHDL   = NO</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\"># Doxygen selects the parser to use depending on the extension of the files it</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\"># parses. With this tag you can assign which parser to use for a given</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\"># extension. Doxygen has a built-in mapping, but you can override or extend it</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\"># using this tag. The format is ext=language, where ext is a file extension, and</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\"># language is one of the parsers supported by doxygen: IDL, Java, Javascript,</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\"># C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\"># FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\"># Fortran. In the later case the parser tries to guess whether the code is fixed</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\"># or free formatted code, this is the default for Fortran type files), VHDL. For</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\"># instance to make doxygen treat .inc files as Fortran files (default is PHP),</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\"># and .f files as C (default is Fortran), use: inc=Fortran f=C.</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\"># Note: For files without extension you can use no_extension as a placeholder.</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\"># Note that for custom extensions you also need to set FILE_PATTERNS otherwise</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\"># the files are not read by doxygen.</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;EXTENSION_MAPPING      = </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\"># If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\"># according to the Markdown format, which allows for more readable</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\"># documentation. See http://daringfireball.net/projects/markdown/ for details.</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\"># The output of markdown processing is further processed by doxygen, so you can</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\"># mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\"># case of backward compatibilities issues.</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;MARKDOWN_SUPPORT       = YES</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\"># When enabled doxygen tries to link words that correspond to documented</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\"># classes, or namespaces to their corresponding documentation. Such a link can</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\"># be prevented in individual cases by putting a % sign in front of the word or</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\"># globally by setting AUTOLINK_SUPPORT to NO.</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;AUTOLINK_SUPPORT       = YES</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\"># If you use STL classes (i.e. std::string, std::vector, etc.) but do not want</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\"># to include (a tag file for) the STL sources as input, then you should set this</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\"># tag to YES in order to let doxygen match functions declarations and</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\"># definitions whose arguments contain STL classes (e.g. func(std::string);</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\"># versus func(std::string) {}). This also make the inheritance and collaboration</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\"># diagrams that involve STL classes more complete and accurate.</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;BUILTIN_STL_SUPPORT    = NO</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\"># If you use Microsoft&#39;s C++/CLI language, you should set this option to YES to</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\"># enable parsing support.</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;CPP_CLI_SUPPORT        = NO</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\"># Set the SIP_SUPPORT tag to YES if your project consists of sip (see:</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\"># http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\"># will parse them like normal C++ but will assume all classes use public instead</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\"># of private inheritance when no explicit protection keyword is present.</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;SIP_SUPPORT            = NO</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\"># For Microsoft&#39;s IDL there are propget and propput attributes to indicate</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\"># getter and setter methods for a property. Setting this option to YES will make</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\"># doxygen to replace the get and set methods by a property in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\"># This will only work if the methods are indeed getting or setting a simple</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\"># type. If this is not the case, or you want to show the methods anyway, you</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\"># should set this option to NO.</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;IDL_PROPERTY_SUPPORT   = YES</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\"># If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\"># tag is set to YES then doxygen will reuse the documentation of the first</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\"># member in the group (if any) for the other members of the group. By default</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\"># all members of a group must be documented explicitly.</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;DISTRIBUTE_GROUP_DOC   = NO</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\"># If one adds a struct or class to a group and this option is enabled, then also</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\"># any nested class or struct is added to the same group. By default this option</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\"># is disabled and one has to add nested compounds explicitly via \\ingroup.</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;GROUP_NESTED_COMPOUNDS = NO</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\"># Set the SUBGROUPING tag to YES to allow class member groups of the same type</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\"># (for instance a group of public functions) to be put as a subgroup of that</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\"># type (e.g. under the Public Functions section). Set it to NO to prevent</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\"># subgrouping. Alternatively, this can be done per class using the</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\"># \\nosubgrouping command.</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;SUBGROUPING            = NO</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\"># When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\"># are shown inside the group in which they are included (e.g. using \\ingroup)</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\"># instead of on a separate page (for HTML and Man pages) or section (for LaTeX</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\"># and RTF).</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\"># Note that this feature does not work in combination with</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\"># SEPARATE_MEMBER_PAGES.</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;INLINE_GROUPED_CLASSES = NO</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\"># When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\"># with only public data fields or simple typedef fields will be shown inline in</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\"># the documentation of the scope in which they are defined (i.e. file,</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\"># namespace, or group documentation), provided this scope is documented. If set</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\"># to NO, structs, classes, and unions are shown on a separate page (for HTML and</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\"># Man pages) or section (for LaTeX and RTF).</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;INLINE_SIMPLE_STRUCTS  = NO</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\"># When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\"># enum is documented as struct, union, or enum with the name of the typedef. So</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\"># typedef struct TypeS {} TypeT, will appear in the documentation as a struct</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\"># with name TypeT. When disabled the typedef will appear as a member of a file,</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\"># namespace, or class. And the struct will be named TypeS. This can typically be</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\"># useful for C code in case the coding convention dictates that all compound</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\"># types are typedef&#39;ed and only the typedef is referenced, never the tag name.</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;TYPEDEF_HIDES_STRUCT   = NO</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\"># The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\"># cache is used to resolve symbols given their name and scope. Since this can be</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\"># an expensive process and often the same symbol appears multiple times in the</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\"># code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\"># doxygen will become slower. If the cache is too large, memory is wasted. The</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\"># cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\"># is 0..9, the default is 0, corresponding to a cache size of 2^16=65536</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\"># symbols. At the end of a run doxygen will report the cache usage and suggest</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\"># the optimal cache size from a speed point of view.</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\"># Minimum value: 0, maximum value: 9, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;LOOKUP_CACHE_SIZE      = 0</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\"># Build related configuration options</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\"># documentation are documented, even if no documentation was available. Private</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\"># class members and static file members will be hidden unless the</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\"># EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\"># Note: This will also disable the warnings about undocumented members that are</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\"># normally produced when WARNINGS is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;EXTRACT_ALL            = NO</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\"># be included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;EXTRACT_PRIVATE        = NO</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\"># scope will be included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;EXTRACT_PACKAGE        = NO</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_STATIC tag is set to YES, all static members of a file will be</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\"># included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;EXTRACT_STATIC         = YES</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\"># locally in source files will be included in the documentation. If set to NO,</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\"># only classes defined in header files are included. Does not have any effect</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\"># for Java sources.</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;EXTRACT_LOCAL_CLASSES  = NO</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\"># This flag is only useful for Objective-C code. If set to YES, local methods,</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\"># which are defined in the implementation section but not in the interface are</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\"># included in the documentation. If set to NO, only methods in the interface are</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\"># included.</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;EXTRACT_LOCAL_METHODS  = NO</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\"># If this flag is set to YES, the members of anonymous namespaces will be</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\"># extracted and appear in the documentation as a namespace called</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\"># &#39;anonymous_namespace{file}&#39;, where file will be replaced with the base name of</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\"># the file that contains the anonymous namespace. By default anonymous namespace</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\"># are hidden.</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;EXTRACT_ANON_NSPACES   = NO</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\"># If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\"># undocumented members inside documented classes or files. If set to NO these</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\"># members will be included in the various overviews, but no documentation</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\"># section is generated. This option has no effect if EXTRACT_ALL is enabled.</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;HIDE_UNDOC_MEMBERS     = YES</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\"># If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\"># undocumented classes that are normally visible in the class hierarchy. If set</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\"># to NO, these classes will be included in the various overviews. This option</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\"># has no effect if EXTRACT_ALL is enabled.</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;HIDE_UNDOC_CLASSES     = YES</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\"># If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\"># (class|struct|union) declarations. If set to NO, these declarations will be</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\"># included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;HIDE_FRIEND_COMPOUNDS  = YES</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\"># If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\"># documentation blocks found inside the body of a function. If set to NO, these</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\"># blocks will be appended to the function&#39;s detailed documentation block.</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;HIDE_IN_BODY_DOCS      = YES</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\"># The INTERNAL_DOCS tag determines if documentation that is typed after a</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\"># \\internal command is included. If the tag is set to NO then the documentation</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\"># will be excluded. Set it to YES to include the internal documentation.</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;INTERNAL_DOCS          = NO</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\"># If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\"># names in lower-case letters. If set to YES, upper-case letters are also</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\"># allowed. This is useful if you have classes or files whose names only differ</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\"># in case and if your file system supports case sensitive file names. Windows</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\"># and Mac users are advised to set this option to NO.</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\"># The default value is: system dependent.</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;CASE_SENSE_NAMES       = YES</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\"># If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\"># their full class and namespace scopes in the documentation. If set to YES, the</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\"># scope will be hidden.</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;HIDE_SCOPE_NAMES       = YES</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\"># If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\"># append additional text to a page&#39;s title, such as Class Reference. If set to</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\"># YES the compound reference will be hidden.</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;HIDE_COMPOUND_REFERENCE= NO</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\"># If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\"># the files that are included by a file in the documentation of that file.</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;SHOW_INCLUDE_FILES     = NO</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\"># If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\"># grouped member an include statement to the documentation, telling the reader</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\"># which file to include in order to use the member.</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;SHOW_GROUPED_MEMB_INC  = NO</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;<span class=\"preprocessor\"># If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\"># files with double quotes in the documentation rather than with sharp brackets.</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;FORCE_LOCAL_INCLUDES   = NO</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\"># If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\"># documentation for inline members.</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;INLINE_INFO            = NO</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\"># If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\"># (detailed) documentation of file and class members alphabetically by member</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\"># name. If set to NO, the members will appear in declaration order.</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;SORT_MEMBER_DOCS       = YES</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\"># If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\"># descriptions of file, namespace and class members alphabetically by member</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\"># name. If set to NO, the members will appear in declaration order. Note that</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\"># this will also influence the order of the classes in the class list.</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;SORT_BRIEF_DOCS        = YES</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\"># If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\"># (brief and detailed) documentation of class members so that constructors and</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\"># destructors are listed first. If set to NO the constructors will appear in the</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\"># respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\"># Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\"># member documentation.</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\"># Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\"># detailed member documentation.</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;SORT_MEMBERS_CTORS_1ST = NO</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\"># If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\"># of group names into alphabetical order. If set to NO the group names will</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\"># appear in their defined order.</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;SORT_GROUP_NAMES       = NO</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\"># If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\"># fully-qualified names, including namespaces. If set to NO, the class list will</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\"># be sorted only by class name, not including the namespace part.</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\"># Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\"># Note: This option applies only to the class list, not to the alphabetical</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\"># list.</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;SORT_BY_SCOPE_NAME     = YES</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\"># If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\"># type resolution of all parameters of a function it will reject a match between</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\"># the prototype and the implementation of a member function even if there is</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\"># only one candidate or it is obvious which candidate to choose by doing a</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\"># simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\"># accept a match between prototype and implementation in such cases.</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;STRICT_PROTO_MATCHING  = NO</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\"># The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\todo commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;GENERATE_TODOLIST      = YES</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\"># The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\test commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;GENERATE_TESTLIST      = YES</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\"># The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\bug commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;GENERATE_BUGLIST       = YES</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\"># The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\"># the deprecated list. This list is created by putting \\deprecated commands in</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\"># the documentation.</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;GENERATE_DEPRECATEDLIST= YES</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\"># The ENABLED_SECTIONS tag can be used to enable conditional documentation</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\"># sections, marked by \\if &lt;section_label&gt; ... \\endif and \\cond &lt;section_label&gt;</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\"># ... \\endcond blocks.</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;ENABLED_SECTIONS       = </div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\"># The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\"># initial value of a variable or macro / define can have for it to appear in the</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\"># documentation. If the initializer consists of more lines than specified here</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\"># it will be hidden. Use a value of 0 to hide initializers completely. The</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\"># appearance of the value of individual variables and macros / defines can be</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\"># controlled using \\showinitializer or \\hideinitializer command in the</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\"># documentation regardless of this setting.</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\"># Minimum value: 0, maximum value: 10000, default value: 30.</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;MAX_INITIALIZER_LINES  = 30</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\"># Set the SHOW_USED_FILES tag to NO to disable the list of files generated at</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\"># the bottom of the documentation of classes and structs. If set to YES, the</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\"># list will mention the files that were used to generate the documentation.</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;SHOW_USED_FILES        = NO</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\"># Set the SHOW_FILES tag to NO to disable the generation of the Files page. This</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\"># will remove the Files entry from the Quick Index and from the Folder Tree View</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\"># (if specified).</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;SHOW_FILES             = YES</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\"># Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\"># page. This will remove the Namespaces entry from the Quick Index and from the</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\"># Folder Tree View (if specified).</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;SHOW_NAMESPACES        = YES</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\"># The FILE_VERSION_FILTER tag can be used to specify a program or script that</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;<span class=\"preprocessor\"># doxygen should invoke to get the current version for each file (typically from</span></div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\"># the version control system). Doxygen will invoke the program by executing (via</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\"># popen()) the command command input-file, where command is the value of the</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\"># FILE_VERSION_FILTER tag, and input-file is the name of an input file provided</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\"># by doxygen. Whatever the program writes to standard output is used as the file</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\"># version. For an example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;FILE_VERSION_FILTER    = </div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;<span class=\"preprocessor\"># The LAYOUT_FILE tag can be used to specify a layout file which will be parsed</span></div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"preprocessor\"># by doxygen. The layout file controls the global structure of the generated</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;<span class=\"preprocessor\"># output files in an output format independent way. To create the layout file</span></div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\"># that represents doxygen&#39;s defaults, run doxygen with the -l option. You can</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\"># optionally specify a file name after the option, if omitted DoxygenLayout.xml</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;<span class=\"preprocessor\"># will be used as the name of the layout file.</span></div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"preprocessor\"># Note that if you run doxygen from a directory containing a file called</span></div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;<span class=\"preprocessor\"># DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE</span></div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;<span class=\"preprocessor\"># tag is left empty.</span></div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;LAYOUT_FILE            = </div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\"># The CITE_BIB_FILES tag can be used to specify one or more bib files containing</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;<span class=\"preprocessor\"># the reference definitions. This must be a list of .bib files. The .bib</span></div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"preprocessor\"># extension is automatically appended if omitted. This requires the bibtex tool</span></div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"preprocessor\"># to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;<span class=\"preprocessor\"># For LaTeX the style of the bibliography can be controlled using</span></div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;<span class=\"preprocessor\"># LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;<span class=\"preprocessor\"># search path. See also \\cite for info how to create references.</span></div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;CITE_BIB_FILES         = </div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;<span class=\"preprocessor\"># Configuration options related to warning and progress messages</span></div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;<span class=\"preprocessor\"># The QUIET tag can be used to turn on/off the messages that are generated to</span></div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;<span class=\"preprocessor\"># standard output by doxygen. If QUIET is set to YES this implies that the</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;<span class=\"preprocessor\"># messages are off.</span></div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;QUIET                  = NO</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;<span class=\"preprocessor\"># The WARNINGS tag can be used to turn on/off the warning messages that are</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;<span class=\"preprocessor\"># generated to standard error (stderr) by doxygen. If WARNINGS is set to YES</span></div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;<span class=\"preprocessor\"># this implies that the warnings are on.</span></div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;<span class=\"preprocessor\"># Tip: Turn warnings on while writing the documentation.</span></div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;WARNINGS               = YES</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;<span class=\"preprocessor\"># If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate</span></div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;<span class=\"preprocessor\"># warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag</span></div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;<span class=\"preprocessor\"># will automatically be disabled.</span></div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;WARN_IF_UNDOCUMENTED   = YES</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;<span class=\"preprocessor\"># If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for</span></div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;<span class=\"preprocessor\"># potential errors in the documentation, such as not documenting some parameters</span></div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;<span class=\"preprocessor\"># in a documented function, or documenting parameters that don&#39;t exist or using</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;<span class=\"preprocessor\"># markup commands wrongly.</span></div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;WARN_IF_DOC_ERROR      = YES</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;<span class=\"preprocessor\"># This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;<span class=\"preprocessor\"># are documented, but have no documentation for their parameters or return</span></div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;<span class=\"preprocessor\"># value. If set to NO, doxygen will only warn about wrong or incomplete</span></div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;<span class=\"preprocessor\"># parameter documentation, but not about the absence of documentation.</span></div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;WARN_NO_PARAMDOC       = NO</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;<span class=\"preprocessor\"># The WARN_FORMAT tag determines the format of the warning messages that doxygen</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;<span class=\"preprocessor\"># can produce. The string should contain the $file, $line, and $text tags, which</span></div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;<span class=\"preprocessor\"># will be replaced by the file and line number from which the warning originated</span></div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;<span class=\"preprocessor\"># and the warning text. Optionally the format may contain $version, which will</span></div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;<span class=\"preprocessor\"># be replaced by the version of the file (if it could be obtained via</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;<span class=\"preprocessor\"># FILE_VERSION_FILTER)</span></div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;<span class=\"preprocessor\"># The default value is: $file:$line: $text.</span></div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;WARN_FORMAT            = <span class=\"stringliteral\">&quot;$file:$line: $text&quot;</span></div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;<span class=\"preprocessor\"># The WARN_LOGFILE tag can be used to specify a file to which warning and error</span></div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;<span class=\"preprocessor\"># messages should be written. If left blank the output is written to standard</span></div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;<span class=\"preprocessor\"># error (stderr).</span></div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;WARN_LOGFILE           = </div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;<span class=\"preprocessor\"># Configuration options related to the input files</span></div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;<span class=\"preprocessor\"># The INPUT tag is used to specify the files and/or directories that contain</span></div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;<span class=\"preprocessor\"># documented source files. You may enter file names like myfile.cpp or</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;<span class=\"preprocessor\"># directories like /usr/src/myproject. Separate the files or directories with</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\"># spaces. See also FILE_PATTERNS and EXTENSION_MAPPING</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;<span class=\"preprocessor\"># Note: If this tag is empty the current directory is searched.</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;INPUT                  = ../<a class=\"code\" href=\"a00236.html\">glm</a> \\</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;                         .</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;# This tag can be used to specify the character encoding of the source files</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\"># that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\"># libiconv (or the iconv built into libc) for the transcoding. See the libiconv</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\"># documentation (see: http://www.gnu.org/software/libiconv) for the list of</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;<span class=\"preprocessor\"># possible encodings.</span></div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;<span class=\"preprocessor\"># The default value is: UTF-8.</span></div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;INPUT_ENCODING         = UTF-8</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\"># If the value of the INPUT tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\"># FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;<span class=\"preprocessor\"># *.h) to filter out the source-files in the directories.</span></div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\"># Note that for custom extensions or not directly supported extensions you also</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\"># need to set EXTENSION_MAPPING for the extension otherwise the files are not</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\"># read by doxygen.</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\"># If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\"># *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;<span class=\"preprocessor\"># *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,</span></div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;<span class=\"preprocessor\"># *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,</span></div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"preprocessor\"># *.vhdl, *.ucf, *.qsf, *.as and *.js.</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;FILE_PATTERNS          = *.hpp \\</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;                         *.doxy</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;<span class=\"preprocessor\"># The RECURSIVE tag can be used to specify whether or not subdirectories should</span></div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;<span class=\"preprocessor\"># be searched for input files as well.</span></div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;RECURSIVE              = YES</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;<span class=\"preprocessor\"># The EXCLUDE tag can be used to specify files and/or directories that should be</span></div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;<span class=\"preprocessor\"># excluded from the INPUT source files. This way you can easily exclude a</span></div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;<span class=\"preprocessor\"># subdirectory from a directory tree whose root is specified with the INPUT tag.</span></div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;<span class=\"preprocessor\"># Note that relative paths are relative to the directory from which doxygen is</span></div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;<span class=\"preprocessor\"># run.</span></div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;EXCLUDE                = </div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;<span class=\"preprocessor\"># The EXCLUDE_SYMLINKS tag can be used to select whether or not files or</span></div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;<span class=\"preprocessor\"># directories that are symbolic links (a Unix file system feature) are excluded</span></div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;<span class=\"preprocessor\"># from the input.</span></div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;EXCLUDE_SYMLINKS       = NO</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;<span class=\"preprocessor\"># If the value of the INPUT tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;<span class=\"preprocessor\"># EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude</span></div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;<span class=\"preprocessor\"># certain files from those directories.</span></div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;<span class=\"preprocessor\"># Note that the wildcards are matched against the file with absolute path, so to</span></div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;<span class=\"preprocessor\"># exclude all test directories for example use the pattern */test</span><span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;<span class=\"comment\">EXCLUDE_PATTERNS       = </span></div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;<span class=\"comment\"># The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names</span></div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;<span class=\"comment\"># (namespaces, classes, functions, etc.) that should be excluded from the</span></div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;<span class=\"comment\"># output. The symbol name can be a fully qualified name, a word, or if the</span></div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;<span class=\"comment\"># wildcard * is used, a substring. Examples: ANamespace, AClass,</span></div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;<span class=\"comment\"># AClass::ANamespace, ANamespace::*Test</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;<span class=\"comment\"># Note that the wildcards are matched against the file with absolute path, so to</span></div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;<span class=\"comment\"># exclude all test directories use the pattern */</span><span class=\"preprocessor\">test</span><span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;<span class=\"comment\">EXCLUDE_SYMBOLS        = </span></div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;<span class=\"comment\"># The EXAMPLE_PATH tag can be used to specify one or more files or directories</span></div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;<span class=\"comment\"># that contain example code fragments that are included (see the \\include</span></div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;<span class=\"comment\">EXAMPLE_PATH           = </span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;<span class=\"comment\"># If the value of the EXAMPLE_PATH tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;<span class=\"comment\"># EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and</span></div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;<span class=\"comment\"># *.h) to filter out the source-files in the directories. If left blank all</span></div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;<span class=\"comment\"># files are included.</span></div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;<span class=\"comment\">EXAMPLE_PATTERNS       = *</span></div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;<span class=\"comment\"># If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be</span></div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;<span class=\"comment\"># searched for input files to be used with the \\include or \\dontinclude commands</span></div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;<span class=\"comment\"># irrespective of the value of the RECURSIVE tag.</span></div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;<span class=\"comment\">EXAMPLE_RECURSIVE      = NO</span></div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;<span class=\"comment\"># The IMAGE_PATH tag can be used to specify one or more files or directories</span></div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;<span class=\"comment\"># that contain images that are to be included in the documentation (see the</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;<span class=\"comment\"># \\image command).</span></div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;<span class=\"comment\">IMAGE_PATH             = </span></div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;<span class=\"comment\"># The INPUT_FILTER tag can be used to specify a program that doxygen should</span></div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;<span class=\"comment\"># invoke to filter for each input file. Doxygen will invoke the filter program</span></div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;<span class=\"comment\"># by executing (via popen()) the command:</span></div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;<span class=\"comment\"># &lt;filter&gt; &lt;input-file&gt;</span></div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;<span class=\"comment\"># where &lt;filter&gt; is the value of the INPUT_FILTER tag, and &lt;input-file&gt; is the</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;<span class=\"comment\"># name of an input file. Doxygen will then use the output that the filter</span></div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;<span class=\"comment\"># program writes to standard output. If FILTER_PATTERNS is specified, this tag</span></div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;<span class=\"comment\"># will be ignored.</span></div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;<span class=\"comment\"># Note that the filter must not add or remove lines; it is applied before the</span></div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;<span class=\"comment\"># code is scanned, but not when the output code is generated. If lines are added</span></div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;<span class=\"comment\"># or removed, the anchors will not be placed correctly.</span></div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"comment\">INPUT_FILTER           = </span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;<span class=\"comment\"># The FILTER_PATTERNS tag can be used to specify filters on a per file pattern</span></div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;<span class=\"comment\"># basis. Doxygen will compare the file name with each pattern and apply the</span></div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;<span class=\"comment\"># filter if there is a match. The filters are a list of the form: pattern=filter</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;<span class=\"comment\"># (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how</span></div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;<span class=\"comment\"># filters are used. If the FILTER_PATTERNS tag is empty or if none of the</span></div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;<span class=\"comment\"># patterns match the file name, INPUT_FILTER is applied.</span></div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;<span class=\"comment\">FILTER_PATTERNS        = </span></div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;<span class=\"comment\"># If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using</span></div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;<span class=\"comment\"># INPUT_FILTER) will also be used to filter the input files that are used for</span></div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"comment\"># producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;<span class=\"comment\">FILTER_SOURCE_FILES    = NO</span></div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;<span class=\"comment\"># The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file</span></div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;<span class=\"comment\"># pattern. A pattern will override the setting for FILTER_PATTERN (if any) and</span></div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;<span class=\"comment\"># it is also possible to disable source filtering for a specific pattern using</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;<span class=\"comment\"># *.ext= (so without naming a filter).</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;<span class=\"comment\"># This tag requires that the tag FILTER_SOURCE_FILES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;<span class=\"comment\">FILTER_SOURCE_PATTERNS = </span></div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;<span class=\"comment\"># If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;<span class=\"comment\"># is part of the input, its contents will be placed on the main page</span></div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;<span class=\"comment\"># (index.html). This can be useful if you have a project on for instance GitHub</span></div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;<span class=\"comment\"># and want to reuse the introduction page also for the doxygen output.</span></div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;<span class=\"comment\">USE_MDFILE_AS_MAINPAGE = </span></div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;<span class=\"comment\"># Configuration options related to source browsing</span></div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;<span class=\"comment\"># If the SOURCE_BROWSER tag is set to YES then a list of source files will be</span></div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;<span class=\"comment\"># generated. Documented entities will be cross-referenced with these sources.</span></div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;<span class=\"comment\"># Note: To get rid of all source code in the generated output, make sure that</span></div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;<span class=\"comment\"># also VERBATIM_HEADERS is set to NO.</span></div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;<span class=\"comment\">SOURCE_BROWSER         = YES</span></div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;<span class=\"comment\"># Setting the INLINE_SOURCES tag to YES will include the body of functions,</span></div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;<span class=\"comment\"># classes and enums directly into the documentation.</span></div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;<span class=\"comment\">INLINE_SOURCES         = NO</span></div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;<span class=\"comment\"># Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any</span></div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;<span class=\"comment\"># special comment blocks from generated source code fragments. Normal C, C++ and</span></div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;<span class=\"comment\"># Fortran comments will always remain visible.</span></div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;<span class=\"comment\">STRIP_CODE_COMMENTS    = YES</span></div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"comment\"># If the REFERENCED_BY_RELATION tag is set to YES then for each documented</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;<span class=\"comment\"># function all documented functions referencing it will be listed.</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;<span class=\"comment\">REFERENCED_BY_RELATION = YES</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;<span class=\"comment\"># If the REFERENCES_RELATION tag is set to YES then for each documented function</span></div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;<span class=\"comment\"># all documented entities called/used by that function will be listed.</span></div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;<span class=\"comment\">REFERENCES_RELATION    = YES</span></div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;<span class=\"comment\"># If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set</span></div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;<span class=\"comment\"># to YES then the hyperlinks from functions in REFERENCES_RELATION and</span></div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;<span class=\"comment\"># REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will</span></div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;<span class=\"comment\"># link to the documentation.</span></div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;<span class=\"comment\">REFERENCES_LINK_SOURCE = YES</span></div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;<span class=\"comment\"># If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the</span></div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;<span class=\"comment\"># source code will show a tooltip with additional information such as prototype,</span></div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"comment\"># brief description and links to the definition and documentation. Since this</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;<span class=\"comment\"># will make the HTML file larger and loading of large files a bit slower, you</span></div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;<span class=\"comment\"># can opt to disable this feature.</span></div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;<span class=\"comment\"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"comment\">SOURCE_TOOLTIPS        = YES</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;<span class=\"comment\"># If the USE_HTAGS tag is set to YES then the references to source code will</span></div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;<span class=\"comment\"># point to the HTML generated by the htags(1) tool instead of doxygen built-in</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;<span class=\"comment\"># source browser. The htags tool is part of GNU&#39;s global source tagging system</span></div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"comment\"># (see http://www.gnu.org/software/global/global.html). You will need version</span></div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;<span class=\"comment\"># 4.8.6 or higher.</span></div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;<span class=\"comment\"># To use it do the following:</span></div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;<span class=\"comment\"># - Install the latest version of global</span></div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;<span class=\"comment\"># - Enable SOURCE_BROWSER and USE_HTAGS in the config file</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;<span class=\"comment\"># - Make sure the INPUT points to the root of the source tree</span></div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;<span class=\"comment\"># - Run doxygen as normal</span></div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;<span class=\"comment\"># Doxygen will invoke htags (and that will in turn invoke gtags), so these</span></div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;<span class=\"comment\"># tools must be available from the command line (i.e. in the search path).</span></div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;<span class=\"comment\"># The result: instead of the source browser generated by doxygen, the links to</span></div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;<span class=\"comment\"># source code will now point to the output of htags.</span></div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;<span class=\"comment\"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;<span class=\"comment\">USE_HTAGS              = NO</span></div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;<span class=\"comment\"># If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;<span class=\"comment\"># verbatim copy of the header file for each class for which an include is</span></div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;<span class=\"comment\"># specified. Set to NO to disable this.</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;<span class=\"comment\"># See also: Section \\class.</span></div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;<span class=\"comment\">VERBATIM_HEADERS       = YES</span></div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;<span class=\"comment\"># If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the</span></div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;<span class=\"comment\"># clang parser (see: http://clang.llvm.org/) for more accurate parsing at the</span></div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;<span class=\"comment\"># cost of reduced performance. This can be particularly helpful with template</span></div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;<span class=\"comment\"># rich C++ code for which doxygen&#39;s built-in parser lacks the necessary type</span></div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;<span class=\"comment\"># information.</span></div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;<span class=\"comment\"># Note: The availability of this option depends on whether or not doxygen was</span></div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;<span class=\"comment\"># compiled with the --with-libclang option.</span></div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;<span class=\"comment\">CLANG_ASSISTED_PARSING = NO</span></div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;<span class=\"comment\"># If clang assisted parsing is enabled you can provide the compiler with command</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;<span class=\"comment\"># line options that you would normally use when invoking the compiler. Note that</span></div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;<span class=\"comment\"># the include paths will already be set by doxygen for the files and directories</span></div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;<span class=\"comment\"># specified with INPUT and INCLUDE_PATH.</span></div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;<span class=\"comment\"># This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;<span class=\"comment\">CLANG_OPTIONS          = </span></div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;<span class=\"comment\"># Configuration options related to the alphabetical class index</span></div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;<span class=\"comment\"># If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all</span></div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;<span class=\"comment\"># compounds will be generated. Enable this if the project contains a lot of</span></div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;<span class=\"comment\"># classes, structs, unions or interfaces.</span></div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;<span class=\"comment\">ALPHABETICAL_INDEX     = NO</span></div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;<span class=\"comment\"># The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in</span></div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;<span class=\"comment\"># which the alphabetical index list will be split.</span></div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;<span class=\"comment\"># Minimum value: 1, maximum value: 20, default value: 5.</span></div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;<span class=\"comment\"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;<span class=\"comment\">COLS_IN_ALPHA_INDEX    = 5</span></div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;<span class=\"comment\"># In case all classes in a project start with a common prefix, all classes will</span></div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;<span class=\"comment\"># be put under the same header in the alphabetical index. The IGNORE_PREFIX tag</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;<span class=\"comment\"># can be used to specify a prefix (or a list of prefixes) that should be ignored</span></div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;<span class=\"comment\"># while generating the index headers.</span></div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;<span class=\"comment\"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;<span class=\"comment\">IGNORE_PREFIX          = </span></div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;<span class=\"comment\"># Configuration options related to the HTML output</span></div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;<span class=\"comment\"># If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output</span></div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;<span class=\"comment\">GENERATE_HTML          = YES</span></div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;<span class=\"comment\"># The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;<span class=\"comment\"># The default directory is: html.</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;<span class=\"comment\">HTML_OUTPUT            = html</span></div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"comment\"># The HTML_FILE_EXTENSION tag can be used to specify the file extension for each</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;<span class=\"comment\"># generated HTML page (for example: .htm, .php, .asp).</span></div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;<span class=\"comment\"># The default value is: .html.</span></div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;<span class=\"comment\">HTML_FILE_EXTENSION    = .html</span></div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;<span class=\"comment\"># The HTML_HEADER tag can be used to specify a user-defined HTML header file for</span></div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;<span class=\"comment\"># each generated HTML page. If the tag is left blank doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;<span class=\"comment\"># standard header.</span></div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;<span class=\"comment\"># To get valid HTML the header file that includes any scripts and style sheets</span></div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;<span class=\"comment\"># that doxygen needs, which is dependent on the configuration options used (e.g.</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;<span class=\"comment\"># the setting GENERATE_TREEVIEW). It is highly recommended to start with a</span></div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;<span class=\"comment\"># default header using</span></div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;<span class=\"comment\"># doxygen -w html new_header.html new_footer.html new_stylesheet.css</span></div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;<span class=\"comment\"># YourConfigFile</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;<span class=\"comment\"># and then modify the file new_header.html. See also section &quot;Doxygen usage&quot;</span></div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;<span class=\"comment\"># for information on how to generate the default header that doxygen normally</span></div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;<span class=\"comment\"># uses.</span></div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;<span class=\"comment\"># Note: The header is subject to change so you typically have to regenerate the</span></div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;<span class=\"comment\"># default header when upgrading to a newer version of doxygen. For a description</span></div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;<span class=\"comment\"># of the possible markers and block names see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;<span class=\"comment\">HTML_HEADER            = </span></div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;<span class=\"comment\"># The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each</span></div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;<span class=\"comment\"># generated HTML page. If the tag is left blank doxygen will generate a standard</span></div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;<span class=\"comment\"># footer. See HTML_HEADER for more information on how to generate a default</span></div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;<span class=\"comment\"># footer and what special commands can be used inside the footer. See also</span></div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;<span class=\"comment\"># section &quot;Doxygen usage&quot; for information on how to generate the default footer</span></div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;<span class=\"comment\"># that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"comment\">HTML_FOOTER            = </span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;<span class=\"comment\"># The HTML_STYLESHEET tag can be used to specify a user-defined cascading style</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;<span class=\"comment\"># sheet that is used by each HTML page. It can be used to fine-tune the look of</span></div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;<span class=\"comment\"># the HTML output. If left blank doxygen will generate a default style sheet.</span></div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;<span class=\"comment\"># See also section &quot;Doxygen usage&quot; for information on how to generate the style</span></div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;<span class=\"comment\"># sheet that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;<span class=\"comment\"># Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as</span></div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;<span class=\"comment\"># it is more robust and this tag (HTML_STYLESHEET) will in the future become</span></div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;<span class=\"comment\"># obsolete.</span></div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;<span class=\"comment\">HTML_STYLESHEET        = </span></div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;<span class=\"comment\"># The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;<span class=\"comment\"># cascading style sheets that are included after the standard style sheets</span></div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;<span class=\"comment\"># created by doxygen. Using this option one can overrule certain style aspects.</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;<span class=\"comment\"># This is preferred over using HTML_STYLESHEET since it does not replace the</span></div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;<span class=\"comment\"># standard style sheet and is therefore more robust against future updates.</span></div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;<span class=\"comment\"># Doxygen will copy the style sheet files to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;<span class=\"comment\"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;<span class=\"comment\"># style sheet in the list overrules the setting of the previous ones in the</span></div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;<span class=\"comment\"># list). For an example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;<span class=\"comment\">HTML_EXTRA_STYLESHEET  = </span></div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;<span class=\"comment\"># The HTML_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;<span class=\"comment\"># other source files which should be copied to the HTML output directory. Note</span></div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;<span class=\"comment\"># that these files will be copied to the base HTML output directory. Use the</span></div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;<span class=\"comment\"># $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these</span></div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;<span class=\"comment\"># files. In the HTML_STYLESHEET file, use the file name only. Also note that the</span></div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;<span class=\"comment\"># files will be copied as-is; there are no commands or markers available.</span></div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;<span class=\"comment\">HTML_EXTRA_FILES       = </span></div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen</span></div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;<span class=\"comment\"># will adjust the colors in the style sheet and background images according to</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;<span class=\"comment\"># this color. Hue is specified as an angle on a colorwheel, see</span></div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160;<span class=\"comment\"># http://en.wikipedia.org/wiki/Hue for more information. For instance the value</span></div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;<span class=\"comment\"># 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300</span></div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;<span class=\"comment\"># purple, and 360 is red again.</span></div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 359, default value: 220.</span></div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_HUE    = 220</span></div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors</span></div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;<span class=\"comment\"># in the HTML output. For a value of 0 the output will use grayscales only. A</span></div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;<span class=\"comment\"># value of 255 will produce the most vivid colors.</span></div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 255, default value: 100.</span></div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_SAT    = 100</span></div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the</span></div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;<span class=\"comment\"># luminance component of the colors in the HTML output. Values below 100</span></div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;<span class=\"comment\"># gradually make the output lighter, whereas values above 100 make the output</span></div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;<span class=\"comment\"># darker. The value divided by 100 is the actual gamma applied, so 80 represents</span></div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;<span class=\"comment\"># a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not</span></div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;<span class=\"comment\"># change the gamma.</span></div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;<span class=\"comment\"># Minimum value: 40, maximum value: 240, default value: 80.</span></div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_GAMMA  = 80</span></div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;<span class=\"comment\"># If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML</span></div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;<span class=\"comment\"># page will contain the date and time when the page was generated. Setting this</span></div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;<span class=\"comment\"># to YES can help to show when doxygen was last run and thus if the</span></div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;<span class=\"comment\"># documentation is up to date.</span></div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;<span class=\"comment\">HTML_TIMESTAMP         = NO</span></div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;<span class=\"comment\"># If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML</span></div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;<span class=\"comment\"># documentation will contain sections that can be hidden and shown after the</span></div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;<span class=\"comment\"># page has loaded.</span></div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;<span class=\"comment\">HTML_DYNAMIC_SECTIONS  = NO</span></div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;<span class=\"comment\"># With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries</span></div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160;<span class=\"comment\"># shown in the various tree structured indices initially; the user can expand</span></div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"> 1192</span>&#160;<span class=\"comment\"># and collapse entries dynamically later on. Doxygen will expand the tree to</span></div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;<span class=\"comment\"># such a level that at most the specified number of entries are visible (unless</span></div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;<span class=\"comment\"># a fully collapsed tree already exceeds this amount). So setting the number of</span></div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;<span class=\"comment\"># entries 1 will produce a full collapsed tree by default. 0 is a special value</span></div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;<span class=\"comment\"># representing an infinite number of entries and will result in a full expanded</span></div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;<span class=\"comment\"># tree by default.</span></div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 9999, default value: 100.</span></div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;<span class=\"comment\">HTML_INDEX_NUM_ENTRIES = 100</span></div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;<span class=\"comment\"># If the GENERATE_DOCSET tag is set to YES, additional index files will be</span></div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;<span class=\"comment\"># generated that can be used as input for Apple&#39;s Xcode 3 integrated development</span></div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;<span class=\"comment\"># environment (see: http://developer.apple.com/tools/xcode/), introduced with</span></div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;<span class=\"comment\"># OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;<span class=\"comment\"># Makefile in the HTML output directory. Running make will produce the docset in</span></div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;<span class=\"comment\"># that directory and running make install will install the docset in</span></div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;<span class=\"comment\"># ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at</span></div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;<span class=\"comment\"># startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html</span></div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;<span class=\"comment\"># for more information.</span></div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;<span class=\"comment\">GENERATE_DOCSET        = NO</span></div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;<span class=\"comment\"># This tag determines the name of the docset feed. A documentation feed provides</span></div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;<span class=\"comment\"># an umbrella under which multiple documentation sets from a single provider</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;<span class=\"comment\"># (such as a company or product suite) can be grouped.</span></div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;<span class=\"comment\"># The default value is: Doxygen generated docs.</span></div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;<span class=\"comment\">DOCSET_FEEDNAME        = &quot;Doxygen generated docs&quot;</span></div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160;<span class=\"comment\"># This tag specifies a string that should uniquely identify the documentation</span></div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;<span class=\"comment\"># set bundle. This should be a reverse domain-name style string, e.g.</span></div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;<span class=\"comment\"># com.mycompany.MyDocSet. Doxygen will append .docset to the name.</span></div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;<span class=\"comment\">DOCSET_BUNDLE_ID       = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160;<span class=\"comment\"># The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify</span></div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;<span class=\"comment\"># the documentation publisher. This should be a reverse domain-name style</span></div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;<span class=\"comment\"># string, e.g. com.mycompany.MyDocSet.documentation.</span></div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Publisher.</span></div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;<span class=\"comment\">DOCSET_PUBLISHER_ID    = org.doxygen.Publisher</span></div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;<span class=\"comment\"># The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.</span></div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;<span class=\"comment\"># The default value is: Publisher.</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;<span class=\"comment\">DOCSET_PUBLISHER_NAME  = Publisher</span></div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;<span class=\"comment\"># If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three</span></div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;<span class=\"comment\"># additional HTML index files: index.hhp, index.hhc, and index.hhk. The</span></div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;<span class=\"comment\"># index.hhp is a project file that can be read by Microsoft&#39;s HTML Help Workshop</span></div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;<span class=\"comment\"># (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on</span></div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;<span class=\"comment\"># Windows.</span></div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;<span class=\"comment\"># The HTML Help Workshop contains a compiler that can convert all HTML output</span></div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;<span class=\"comment\"># generated by doxygen into a single compiled HTML file (.chm). Compiled HTML</span></div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;<span class=\"comment\"># files are now used as the Windows 98 help format, and will replace the old</span></div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160;<span class=\"comment\"># Windows help format (.hlp) on all Windows platforms in the future. Compressed</span></div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;<span class=\"comment\"># HTML files also contain an index, a table of contents, and you can search for</span></div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;<span class=\"comment\"># words in the documentation. The HTML workshop also contains a viewer for</span></div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;<span class=\"comment\"># compressed HTML files.</span></div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;<span class=\"comment\">GENERATE_HTMLHELP      = NO</span></div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160;<span class=\"comment\"># The CHM_FILE tag can be used to specify the file name of the resulting .chm</span></div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;<span class=\"comment\"># file. You can add a path in front of the file if the result should not be</span></div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;<span class=\"comment\"># written to the html output directory.</span></div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;<span class=\"comment\">CHM_FILE               = </span></div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;<span class=\"comment\"># The HHC_LOCATION tag can be used to specify the location (absolute path</span></div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;<span class=\"comment\"># including file name) of the HTML help compiler (hhc.exe). If non-empty,</span></div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;<span class=\"comment\"># doxygen will try to run the HTML help compiler on the generated index.hhp.</span></div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;<span class=\"comment\"># The file has to be specified with full path.</span></div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;<span class=\"comment\">HHC_LOCATION           = </span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;<span class=\"comment\"># The GENERATE_CHI flag controls if a separate .chi index file is generated</span></div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;<span class=\"comment\"># (YES) or that it should be included in the master .chm file (NO).</span></div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;<span class=\"comment\">GENERATE_CHI           = NO</span></div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;<span class=\"comment\"># The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)</span></div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;<span class=\"comment\"># and project file content.</span></div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;<span class=\"comment\">CHM_INDEX_ENCODING     = </span></div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;<span class=\"comment\"># The BINARY_TOC flag controls whether a binary table of contents is generated</span></div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;<span class=\"comment\"># (YES) or a normal table of contents (NO) in the .chm file. Furthermore it</span></div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;<span class=\"comment\"># enables the Previous and Next buttons.</span></div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;<span class=\"comment\">BINARY_TOC             = NO</span></div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;<span class=\"comment\"># The TOC_EXPAND flag can be set to YES to add extra items for group members to</span></div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;<span class=\"comment\"># the table of contents of the HTML help documentation and to the tree view.</span></div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;<span class=\"comment\">TOC_EXPAND             = NO</span></div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;<span class=\"comment\"># If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and</span></div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;<span class=\"comment\"># QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that</span></div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;<span class=\"comment\"># can be used as input for Qt&#39;s qhelpgenerator to generate a Qt Compressed Help</span></div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;<span class=\"comment\"># (.qch) of the generated HTML documentation.</span></div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;<span class=\"comment\">GENERATE_QHP           = NO</span></div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;<span class=\"comment\"># If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify</span></div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;<span class=\"comment\"># the file name of the resulting .qch file. The path specified is relative to</span></div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;<span class=\"comment\"># the HTML output folder.</span></div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;<span class=\"comment\">QCH_FILE               = </span></div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;<span class=\"comment\"># The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help</span></div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160;<span class=\"comment\"># Project output. For more information please see Qt Help Project / Namespace</span></div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;<span class=\"comment\"># (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).</span></div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160;<span class=\"comment\">QHP_NAMESPACE          = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;<span class=\"comment\"># The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt</span></div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;<span class=\"comment\"># Help Project output. For more information please see Qt Help Project / Virtual</span></div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;<span class=\"comment\"># Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-</span></div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160;<span class=\"comment\"># folders).</span></div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;<span class=\"comment\"># The default value is: doc.</span></div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;<span class=\"comment\">QHP_VIRTUAL_FOLDER     = doc</span></div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;<span class=\"comment\"># If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom</span></div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160;<span class=\"comment\"># filter to add. For more information please see Qt Help Project / Custom</span></div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;<span class=\"comment\"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;<span class=\"comment\"># filters).</span></div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;<span class=\"comment\">QHP_CUST_FILTER_NAME   = </span></div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;<span class=\"comment\"># The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the</span></div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160;<span class=\"comment\"># custom filter to add. For more information please see Qt Help Project / Custom</span></div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;<span class=\"comment\"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;<span class=\"comment\"># filters).</span></div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;<span class=\"comment\">QHP_CUST_FILTER_ATTRS  = </span></div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;<span class=\"comment\"># The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this</span></div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160;<span class=\"comment\"># project&#39;s filter section matches. Qt Help Project / Filter Attributes (see:</span></div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;<span class=\"comment\"># http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).</span></div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160;<span class=\"comment\">QHP_SECT_FILTER_ATTRS  = </span></div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;<span class=\"comment\"># The QHG_LOCATION tag can be used to specify the location of Qt&#39;s</span></div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;<span class=\"comment\"># qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the</span></div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160;<span class=\"comment\"># generated .qhp file.</span></div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"> 1367</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;<span class=\"comment\">QHG_LOCATION           = </span></div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160;<span class=\"comment\"># If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be</span></div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;<span class=\"comment\"># generated, together with the HTML files, they form an Eclipse help plugin. To</span></div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;<span class=\"comment\"># install this plugin and make it available under the help contents menu in</span></div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;<span class=\"comment\"># Eclipse, the contents of the directory containing the HTML and XML files needs</span></div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160;<span class=\"comment\"># to be copied into the plugins directory of eclipse. The name of the directory</span></div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;<span class=\"comment\"># within the plugins directory should be the same as the ECLIPSE_DOC_ID value.</span></div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;<span class=\"comment\"># After copying Eclipse needs to be restarted before the help appears.</span></div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;<span class=\"comment\">GENERATE_ECLIPSEHELP   = NO</span></div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160;<span class=\"comment\"># A unique identifier for the Eclipse help plugin. When installing the plugin</span></div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;<span class=\"comment\"># the directory name containing the HTML and XML files should also have this</span></div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;<span class=\"comment\"># name. Each documentation set should have its own identifier.</span></div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;<span class=\"comment\">ECLIPSE_DOC_ID         = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;<span class=\"comment\"># If you want full control over the layout of the generated HTML pages it might</span></div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;<span class=\"comment\"># be necessary to disable the index and replace it with your own. The</span></div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;<span class=\"comment\"># DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top</span></div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;<span class=\"comment\"># of each HTML page. A value of NO enables the index and the value YES disables</span></div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160;<span class=\"comment\"># it. Since the tabs in the index contain the same information as the navigation</span></div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;<span class=\"comment\"># tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.</span></div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;<span class=\"comment\">DISABLE_INDEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;<span class=\"comment\"># The GENERATE_TREEVIEW tag is used to specify whether a tree-like index</span></div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160;<span class=\"comment\"># structure should be generated to display hierarchical information. If the tag</span></div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;<span class=\"comment\"># value is set to YES, a side panel will be generated containing a tree-like</span></div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;<span class=\"comment\"># index structure (just like the one that is generated for HTML Help). For this</span></div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;<span class=\"comment\"># to work a browser that supports JavaScript, DHTML, CSS and frames is required</span></div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;<span class=\"comment\"># (i.e. any modern browser). Windows users are probably better off using the</span></div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160;<span class=\"comment\"># HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can</span></div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;<span class=\"comment\"># further fine-tune the look of the index. As an example, the default style</span></div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;<span class=\"comment\"># sheet generated by doxygen has an example that shows how to put an image at</span></div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;<span class=\"comment\"># the root of the tree instead of the PROJECT_NAME. Since the tree basically has</span></div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;<span class=\"comment\"># the same information as the tab index, you could consider setting</span></div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;<span class=\"comment\"># DISABLE_INDEX to YES when enabling this option.</span></div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;<span class=\"comment\">GENERATE_TREEVIEW      = NO</span></div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160;<span class=\"comment\"># The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that</span></div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;<span class=\"comment\"># doxygen will group on one line in the generated HTML documentation.</span></div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;<span class=\"comment\"># Note that a value of 0 will completely suppress the enum values from appearing</span></div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160;<span class=\"comment\"># in the overview section.</span></div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 20, default value: 4.</span></div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;<span class=\"comment\">ENUM_VALUES_PER_LINE   = 4</span></div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;<span class=\"comment\"># If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;<span class=\"comment\"># to set the initial width (in pixels) of the frame in which the tree is shown.</span></div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 1500, default value: 250.</span></div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;<span class=\"comment\">TREEVIEW_WIDTH         = 250</span></div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;<span class=\"comment\"># If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to</span></div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;<span class=\"comment\"># external symbols imported via tag files in a separate window.</span></div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;<span class=\"comment\">EXT_LINKS_IN_WINDOW    = NO</span></div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;<span class=\"comment\"># Use this tag to change the font size of LaTeX formulas included as images in</span></div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;<span class=\"comment\"># the HTML documentation. When you change the font size after a successful</span></div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160;<span class=\"comment\"># doxygen run you need to manually remove any form_*.png images from the HTML</span></div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;<span class=\"comment\"># output directory to force them to be regenerated.</span></div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;<span class=\"comment\"># Minimum value: 8, maximum value: 50, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;<span class=\"comment\">FORMULA_FONTSIZE       = 10</span></div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;<span class=\"comment\"># Use the FORMULA_TRANPARENT tag to determine whether or not the images</span></div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;<span class=\"comment\"># generated for formulas are transparent PNGs. Transparent PNGs are not</span></div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;<span class=\"comment\"># supported properly for IE 6.0, but are supported on all modern browsers.</span></div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;<span class=\"comment\"># Note that when changing this option you need to delete any form_*.png files in</span></div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160;<span class=\"comment\"># the HTML output directory before the changes have effect.</span></div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"> 1460</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;<span class=\"comment\">FORMULA_TRANSPARENT    = YES</span></div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;<span class=\"comment\"># Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see</span></div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"> 1464</span>&#160;<span class=\"comment\"># http://www.mathjax.org) which uses client side Javascript for the rendering</span></div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;<span class=\"comment\"># instead of using pre-rendered bitmaps. Use this if you do not have LaTeX</span></div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;<span class=\"comment\"># installed or if you want to formulas look prettier in the HTML output. When</span></div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;<span class=\"comment\"># enabled you may also need to install MathJax separately and configure the path</span></div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;<span class=\"comment\"># to it using the MATHJAX_RELPATH option.</span></div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160;<span class=\"comment\">USE_MATHJAX            = NO</span></div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;<span class=\"comment\"># When MathJax is enabled you can set the default output format to be used for</span></div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;<span class=\"comment\"># the MathJax output. See the MathJax site (see:</span></div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"> 1476</span>&#160;<span class=\"comment\"># http://docs.mathjax.org/en/latest/output.html) for more details.</span></div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160;<span class=\"comment\"># Possible values are: HTML-CSS (which is slower, but has the best</span></div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;<span class=\"comment\"># compatibility), NativeMML (i.e. MathML) and SVG.</span></div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;<span class=\"comment\"># The default value is: HTML-CSS.</span></div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;<span class=\"comment\">MATHJAX_FORMAT         = HTML-CSS</span></div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160;<span class=\"comment\"># When MathJax is enabled you need to specify the location relative to the HTML</span></div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;<span class=\"comment\"># output directory using the MATHJAX_RELPATH option. The destination directory</span></div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;<span class=\"comment\"># should contain the MathJax.js script. For instance, if the mathjax directory</span></div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;<span class=\"comment\"># is located at the same level as the HTML output directory, then</span></div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160;<span class=\"comment\"># MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax</span></div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"> 1489</span>&#160;<span class=\"comment\"># Content Delivery Network so you can quickly see the result without installing</span></div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;<span class=\"comment\"># MathJax. However, it is strongly recommended to install a local copy of</span></div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;<span class=\"comment\"># MathJax from http://www.mathjax.org before deployment.</span></div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;<span class=\"comment\"># The default value is: http://cdn.mathjax.org/mathjax/latest.</span></div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;<span class=\"comment\">MATHJAX_RELPATH        = http://www.mathjax.org/mathjax</span></div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160;<span class=\"comment\"># The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax</span></div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;<span class=\"comment\"># extension names that should be enabled during MathJax rendering. For example</span></div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;<span class=\"comment\"># MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols</span></div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;<span class=\"comment\">MATHJAX_EXTENSIONS     = </span></div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160;<span class=\"comment\"># The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces</span></div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160;<span class=\"comment\"># of code that will be used on startup of the MathJax code. See the MathJax site</span></div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;<span class=\"comment\"># (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an</span></div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;<span class=\"comment\"># example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;<span class=\"comment\">MATHJAX_CODEFILE       = </span></div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;<span class=\"comment\"># When the SEARCHENGINE tag is enabled doxygen will generate a search box for</span></div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160;<span class=\"comment\"># the HTML output. The underlying search engine uses javascript and DHTML and</span></div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;<span class=\"comment\"># should work on any modern browser. Note that when using HTML help</span></div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;<span class=\"comment\"># (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)</span></div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;<span class=\"comment\"># there is already a search function so this one should typically be disabled.</span></div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160;<span class=\"comment\"># For large projects the javascript based search engine can be slow, then</span></div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;<span class=\"comment\"># enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to</span></div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;<span class=\"comment\"># search using the keyboard; to jump to the search box use &lt;access key&gt; + S</span></div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;<span class=\"comment\"># (what the &lt;access key&gt; is depends on the OS and browser, but it is typically</span></div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;<span class=\"comment\"># &lt;CTRL&gt;, &lt;ALT&gt;/&lt;option&gt;, or both). Inside the search box use the &lt;cursor down</span></div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;<span class=\"comment\"># key&gt; to jump into the search results window, the results can be navigated</span></div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;<span class=\"comment\"># using the &lt;cursor keys&gt;. Press &lt;Enter&gt; to select an item or &lt;escape&gt; to cancel</span></div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160;<span class=\"comment\"># the search. The filter options can be selected when the cursor is inside the</span></div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;<span class=\"comment\"># search box by pressing &lt;Shift&gt;+&lt;cursor down&gt;. Also here use the &lt;cursor keys&gt;</span></div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;<span class=\"comment\"># to select a filter and &lt;Enter&gt; or &lt;escape&gt; to activate or cancel the filter</span></div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;<span class=\"comment\"># option.</span></div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;<span class=\"comment\">SEARCHENGINE           = YES</span></div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160;<span class=\"comment\"># When the SERVER_BASED_SEARCH tag is enabled the search engine will be</span></div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;<span class=\"comment\"># implemented using a web server instead of a web client using Javascript. There</span></div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;<span class=\"comment\"># are two flavors of web server based searching depending on the EXTERNAL_SEARCH</span></div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;<span class=\"comment\"># setting. When disabled, doxygen will generate a PHP script for searching and</span></div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;<span class=\"comment\"># an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing</span></div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;<span class=\"comment\"># and searching needs to be provided by external tools. See the section</span></div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;<span class=\"comment\"># &quot;External Indexing and Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;<span class=\"comment\">SERVER_BASED_SEARCH    = NO</span></div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;<span class=\"comment\"># When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP</span></div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;<span class=\"comment\"># script for searching. Instead the search results are written to an XML file</span></div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;<span class=\"comment\"># which needs to be processed by an external indexer. Doxygen will invoke an</span></div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;<span class=\"comment\"># external search engine pointed to by the SEARCHENGINE_URL option to obtain the</span></div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;<span class=\"comment\"># search results.</span></div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;<span class=\"comment\"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;<span class=\"comment\"># (doxysearch.cgi) which are based on the open source search engine library</span></div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160;<span class=\"comment\"># Xapian (see: http://xapian.org/).</span></div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;<span class=\"comment\"># See the section &quot;External Indexing and Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160;<span class=\"comment\">EXTERNAL_SEARCH        = NO</span></div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;<span class=\"comment\"># The SEARCHENGINE_URL should point to a search engine hosted by a web server</span></div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;<span class=\"comment\"># which will return the search results when EXTERNAL_SEARCH is enabled.</span></div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"> 1564</span>&#160;<span class=\"comment\"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;<span class=\"comment\"># (doxysearch.cgi) which are based on the open source search engine library</span></div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;<span class=\"comment\"># Xapian (see: http://xapian.org/). See the section &quot;External Indexing and</span></div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;<span class=\"comment\"># Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;<span class=\"comment\">SEARCHENGINE_URL       = </span></div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160;<span class=\"comment\"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed</span></div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;<span class=\"comment\"># search data is written to a file for indexing by an external tool. With the</span></div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;<span class=\"comment\"># SEARCHDATA_FILE tag the name of this file can be specified.</span></div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;<span class=\"comment\"># The default file is: searchdata.xml.</span></div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;<span class=\"comment\">SEARCHDATA_FILE        = searchdata.xml</span></div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160;<span class=\"comment\"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the</span></div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160;<span class=\"comment\"># EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is</span></div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;<span class=\"comment\"># useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple</span></div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;<span class=\"comment\"># projects and redirect the results back to the right project.</span></div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;<span class=\"comment\">EXTERNAL_SEARCH_ID     = </span></div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160;<span class=\"comment\"># The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen</span></div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160;<span class=\"comment\"># projects other than the one defined by this configuration file, but that are</span></div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;<span class=\"comment\"># all added to the same external search index. Each project needs to have a</span></div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;<span class=\"comment\"># unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of</span></div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;<span class=\"comment\"># to a relative location where the documentation can be found. The format is:</span></div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160;<span class=\"comment\"># EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...</span></div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;<span class=\"comment\">EXTRA_SEARCH_MAPPINGS  = </span></div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;<span class=\"comment\"># Configuration options related to the LaTeX output</span></div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;<span class=\"comment\"># If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.</span></div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;<span class=\"comment\">GENERATE_LATEX         = NO</span></div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;<span class=\"comment\"># The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;<span class=\"comment\"># The default directory is: latex.</span></div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;<span class=\"comment\">LATEX_OUTPUT           = latex</span></div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;<span class=\"comment\"># The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be</span></div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160;<span class=\"comment\"># invoked.</span></div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;<span class=\"comment\"># Note that when enabling USE_PDFLATEX this option is only used for generating</span></div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160;<span class=\"comment\"># bitmaps for formulas in the HTML output, but not in the Makefile that is</span></div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;<span class=\"comment\"># written to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;<span class=\"comment\"># The default file is: latex.</span></div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"> 1624</span>&#160;<span class=\"comment\">LATEX_CMD_NAME         = latex</span></div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;<span class=\"comment\"># The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate</span></div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;<span class=\"comment\"># index for LaTeX.</span></div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;<span class=\"comment\"># The default file is: makeindex.</span></div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;<span class=\"comment\">MAKEINDEX_CMD_NAME     = makeindex</span></div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;<span class=\"comment\"># If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX</span></div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160;<span class=\"comment\"># documents. This may be useful for small projects and may help to save some</span></div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"> 1635</span>&#160;<span class=\"comment\"># trees in general.</span></div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;<span class=\"comment\">COMPACT_LATEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;<span class=\"comment\"># The PAPER_TYPE tag can be used to set the paper type that is used by the</span></div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160;<span class=\"comment\"># printer.</span></div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;<span class=\"comment\"># Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x</span></div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;<span class=\"comment\"># 14 inches) and executive (7.25 x 10.5 inches).</span></div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;<span class=\"comment\"># The default value is: a4.</span></div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160;<span class=\"comment\">PAPER_TYPE             = a4wide</span></div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;<span class=\"comment\"># The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names</span></div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;<span class=\"comment\"># that should be included in the LaTeX output. The package can be specified just</span></div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;<span class=\"comment\"># by its name or with the correct syntax as to be used with the LaTeX</span></div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;<span class=\"comment\"># \\usepackage command. To get the times font for instance you can specify :</span></div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;<span class=\"comment\"># EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}</span></div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;<span class=\"comment\"># To use the option intlimits with the amsmath package you can specify:</span></div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;<span class=\"comment\"># EXTRA_PACKAGES=[intlimits]{amsmath}</span></div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;<span class=\"comment\"># If left blank no extra packages will be included.</span></div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"> 1660</span>&#160;<span class=\"comment\">EXTRA_PACKAGES         = </span></div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;<span class=\"comment\"># The LATEX_HEADER tag can be used to specify a personal LaTeX header for the</span></div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;<span class=\"comment\"># generated LaTeX document. The header should contain everything until the first</span></div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160;<span class=\"comment\"># chapter. If it is left blank doxygen will generate a standard header. See</span></div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160;<span class=\"comment\"># section &quot;Doxygen usage&quot; for information on how to let doxygen write the</span></div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;<span class=\"comment\"># default header to a separate file.</span></div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;<span class=\"comment\"># Note: Only use a user-defined header if you know what you are doing! The</span></div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160;<span class=\"comment\"># following commands have a special meaning inside the header: $title,</span></div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;<span class=\"comment\"># $datetime, $date, $doxygenversion, $projectname, $projectnumber,</span></div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;<span class=\"comment\"># $projectbrief, $projectlogo. Doxygen will replace $title with the empty</span></div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;<span class=\"comment\"># string, for the replacement values of the other commands the user is referred</span></div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;<span class=\"comment\"># to HTML_HEADER.</span></div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;<span class=\"comment\">LATEX_HEADER           = </span></div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;<span class=\"comment\"># The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the</span></div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;<span class=\"comment\"># generated LaTeX document. The footer should contain everything after the last</span></div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;<span class=\"comment\"># chapter. If it is left blank doxygen will generate a standard footer. See</span></div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;<span class=\"comment\"># LATEX_HEADER for more information on how to generate a default footer and what</span></div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;<span class=\"comment\"># special commands can be used inside the footer.</span></div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160;<span class=\"comment\"># Note: Only use a user-defined footer if you know what you are doing!</span></div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;<span class=\"comment\">LATEX_FOOTER           = </span></div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;<span class=\"comment\"># The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;<span class=\"comment\"># LaTeX style sheets that are included after the standard style sheets created</span></div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160;<span class=\"comment\"># by doxygen. Using this option one can overrule certain style aspects. Doxygen</span></div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;<span class=\"comment\"># will copy the style sheet files to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;<span class=\"comment\"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;<span class=\"comment\"># style sheet in the list overrules the setting of the previous ones in the</span></div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;<span class=\"comment\"># list).</span></div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;<span class=\"comment\">LATEX_EXTRA_STYLESHEET = </span></div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;<span class=\"comment\"># The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160;<span class=\"comment\"># other source files which should be copied to the LATEX_OUTPUT output</span></div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160;<span class=\"comment\"># directory. Note that the files will be copied as-is; there are no commands or</span></div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;<span class=\"comment\"># markers available.</span></div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160;<span class=\"comment\">LATEX_EXTRA_FILES      = </span></div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;<span class=\"comment\"># If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is</span></div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160;<span class=\"comment\"># prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will</span></div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;<span class=\"comment\"># contain links (just like the HTML output) instead of page references. This</span></div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;<span class=\"comment\"># makes the output suitable for online browsing using a PDF viewer.</span></div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;<span class=\"comment\">PDF_HYPERLINKS         = NO</span></div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;<span class=\"comment\"># If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate</span></div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;<span class=\"comment\"># the PDF file directly from the LaTeX files. Set this option to YES, to get a</span></div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;<span class=\"comment\"># higher quality PDF documentation.</span></div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;<span class=\"comment\">USE_PDFLATEX           = YES</span></div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;<span class=\"comment\"># If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode</span></div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;<span class=\"comment\"># command to the generated LaTeX files. This will instruct LaTeX to keep running</span></div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160;<span class=\"comment\"># if errors occur, instead of asking the user for help. This option is also used</span></div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;<span class=\"comment\"># when generating formulas in HTML.</span></div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;<span class=\"comment\">LATEX_BATCHMODE        = NO</span></div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;<span class=\"comment\"># If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the</span></div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160;<span class=\"comment\"># index chapters (such as File Index, Compound Index, etc.) in the output.</span></div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"> 1739</span>&#160;<span class=\"comment\">LATEX_HIDE_INDICES     = NO</span></div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;<span class=\"comment\"># If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source</span></div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;<span class=\"comment\"># code with syntax highlighting in the LaTeX output.</span></div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;<span class=\"comment\"># Note that which sources are shown also depends on other settings such as</span></div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;<span class=\"comment\"># SOURCE_BROWSER.</span></div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;<span class=\"comment\">LATEX_SOURCE_CODE      = NO</span></div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;<span class=\"comment\"># The LATEX_BIB_STYLE tag can be used to specify the style to use for the</span></div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;<span class=\"comment\"># bibliography, e.g. plainnat, or ieeetr. See</span></div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;<span class=\"comment\"># http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.</span></div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160;<span class=\"comment\"># The default value is: plain.</span></div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;<span class=\"comment\">LATEX_BIB_STYLE        = plain</span></div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;<span class=\"comment\"># Configuration options related to the RTF output</span></div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;<span class=\"comment\"># If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The</span></div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;<span class=\"comment\"># RTF output is optimized for Word 97 and may not look too pretty with other RTF</span></div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;<span class=\"comment\"># readers/editors.</span></div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;<span class=\"comment\">GENERATE_RTF           = NO</span></div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;<span class=\"comment\"># The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"> 1772</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;<span class=\"comment\"># The default directory is: rtf.</span></div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160;<span class=\"comment\">RTF_OUTPUT             = glm.rtf</span></div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;<span class=\"comment\"># If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF</span></div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;<span class=\"comment\"># documents. This may be useful for small projects and may help to save some</span></div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160;<span class=\"comment\"># trees in general.</span></div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160;<span class=\"comment\">COMPACT_RTF            = NO</span></div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;<span class=\"comment\"># If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will</span></div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;<span class=\"comment\"># contain hyperlink fields. The RTF file will contain links (just like the HTML</span></div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;<span class=\"comment\"># output) instead of page references. This makes the output suitable for online</span></div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;<span class=\"comment\"># browsing using Word or some other Word compatible readers that support those</span></div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;<span class=\"comment\"># fields.</span></div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;<span class=\"comment\"># Note: WordPad (write) and others do not support links.</span></div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;<span class=\"comment\">RTF_HYPERLINKS         = YES</span></div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160;<span class=\"comment\"># Load stylesheet definitions from file. Syntax is similar to doxygen&#39;s config</span></div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;<span class=\"comment\"># file, i.e. a series of assignments. You only have to provide replacements,</span></div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;<span class=\"comment\"># missing definitions are set to their default value.</span></div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;<span class=\"comment\"># See also section &quot;Doxygen usage&quot; for information on how to generate the</span></div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;<span class=\"comment\"># default style sheet that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;<span class=\"comment\">RTF_STYLESHEET_FILE    = </span></div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;<span class=\"comment\"># Set optional variables used in the generation of an RTF document. Syntax is</span></div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;<span class=\"comment\"># similar to doxygen&#39;s config file. A template extensions file can be generated</span></div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160;<span class=\"comment\"># using doxygen -e rtf extensionFile.</span></div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;<span class=\"comment\">RTF_EXTENSIONS_FILE    = </span></div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;<span class=\"comment\"># If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code</span></div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;<span class=\"comment\"># with syntax highlighting in the RTF output.</span></div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160;<span class=\"comment\"># Note that which sources are shown also depends on other settings such as</span></div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;<span class=\"comment\"># SOURCE_BROWSER.</span></div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;<span class=\"comment\">RTF_SOURCE_CODE        = NO</span></div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;<span class=\"comment\"># Configuration options related to the man page output</span></div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"> 1829</span>&#160;<span class=\"comment\"># If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for</span></div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;<span class=\"comment\"># classes and files.</span></div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;<span class=\"comment\">GENERATE_MAN           = NO</span></div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;<span class=\"comment\"># The MAN_OUTPUT tag is used to specify where the man pages will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160;<span class=\"comment\"># it. A directory man3 will be created inside the directory specified by</span></div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;<span class=\"comment\"># MAN_OUTPUT.</span></div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;<span class=\"comment\"># The default directory is: man.</span></div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160;<span class=\"comment\">MAN_OUTPUT             = man</span></div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;<span class=\"comment\"># The MAN_EXTENSION tag determines the extension that is added to the generated</span></div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;<span class=\"comment\"># man pages. In case the manual section does not start with a number, the number</span></div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160;<span class=\"comment\"># 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is</span></div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;<span class=\"comment\"># optional.</span></div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;<span class=\"comment\"># The default value is: .3.</span></div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;<span class=\"comment\">MAN_EXTENSION          = .3</span></div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;<span class=\"comment\"># The MAN_SUBDIR tag determines the name of the directory created within</span></div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;<span class=\"comment\"># MAN_OUTPUT in which the man pages are placed. If defaults to man followed by</span></div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160;<span class=\"comment\"># MAN_EXTENSION with the initial . removed.</span></div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;<span class=\"comment\">MAN_SUBDIR             = </span></div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160;<span class=\"comment\"># If the MAN_LINKS tag is set to YES and doxygen generates man output, then it</span></div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;<span class=\"comment\"># will generate one additional man file for each entity documented in the real</span></div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;<span class=\"comment\"># man page(s). These additional files only source the real man page, but without</span></div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;<span class=\"comment\"># them the man command would be unable to find the correct page.</span></div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;<span class=\"comment\">MAN_LINKS              = NO</span></div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;<span class=\"comment\"># Configuration options related to the XML output</span></div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160;<span class=\"comment\"># If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that</span></div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;<span class=\"comment\"># captures the structure of the code including all documentation.</span></div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;<span class=\"comment\">GENERATE_XML           = NO</span></div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;<span class=\"comment\"># The XML_OUTPUT tag is used to specify where the XML pages will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;<span class=\"comment\"># The default directory is: xml.</span></div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;<span class=\"comment\">XML_OUTPUT             = xml</span></div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;<span class=\"comment\"># If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program</span></div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;<span class=\"comment\"># listings (including syntax highlighting and cross-referencing information) to</span></div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160;<span class=\"comment\"># the XML output. Note that enabling this will significantly increase the size</span></div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;<span class=\"comment\"># of the XML output.</span></div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;<span class=\"comment\">XML_PROGRAMLISTING     = YES</span></div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;<span class=\"comment\"># Configuration options related to the DOCBOOK output</span></div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"> 1899</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;<span class=\"comment\"># If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files</span></div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;<span class=\"comment\"># that can be used to generate PDF.</span></div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"> 1903</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;<span class=\"comment\">GENERATE_DOCBOOK       = NO</span></div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;<span class=\"comment\"># The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.</span></div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160;<span class=\"comment\"># If a relative path is entered the value of OUTPUT_DIRECTORY will be put in</span></div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;<span class=\"comment\"># front of it.</span></div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;<span class=\"comment\"># The default directory is: docbook.</span></div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"> 1910</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;<span class=\"comment\">DOCBOOK_OUTPUT         = docbook</span></div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;<span class=\"comment\"># If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the</span></div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;<span class=\"comment\"># program listings (including syntax highlighting and cross-referencing</span></div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160;<span class=\"comment\"># information) to the DOCBOOK output. Note that enabling this will significantly</span></div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;<span class=\"comment\"># increase the size of the DOCBOOK output.</span></div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;<span class=\"comment\">DOCBOOK_PROGRAMLISTING = NO</span></div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;<span class=\"comment\"># Configuration options for the AutoGen Definitions output</span></div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160;<span class=\"comment\"># If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an</span></div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;<span class=\"comment\"># AutoGen Definitions (see http://autogen.sf.net) file that captures the</span></div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;<span class=\"comment\"># structure of the code including all documentation. Note that this feature is</span></div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;<span class=\"comment\"># still experimental and incomplete at the moment.</span></div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;<span class=\"comment\">GENERATE_AUTOGEN_DEF   = NO</span></div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"> 1936</span>&#160;<span class=\"comment\"># Configuration options related to the Perl module output</span></div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;<span class=\"comment\"># If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module</span></div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160;<span class=\"comment\"># file that captures the structure of the code including all documentation.</span></div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;<span class=\"comment\"># Note that this feature is still experimental and incomplete at the moment.</span></div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;<span class=\"comment\">GENERATE_PERLMOD       = NO</span></div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;<span class=\"comment\"># If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary</span></div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;<span class=\"comment\"># Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI</span></div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;<span class=\"comment\"># output from the Perl module output.</span></div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160;<span class=\"comment\">PERLMOD_LATEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;<span class=\"comment\"># If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely</span></div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;<span class=\"comment\"># formatted so it can be parsed by a human reader. This is useful if you want to</span></div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160;<span class=\"comment\"># understand what is going on. On the other hand, if this tag is set to NO, the</span></div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;<span class=\"comment\"># size of the Perl module output will be much smaller and Perl will parse it</span></div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;<span class=\"comment\"># just the same.</span></div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;<span class=\"comment\">PERLMOD_PRETTY         = YES</span></div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;<span class=\"comment\"># The names of the make variables in the generated doxyrules.make file are</span></div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;<span class=\"comment\"># prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful</span></div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;<span class=\"comment\"># so different doxyrules.make files included by the same Makefile don&#39;t</span></div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160;<span class=\"comment\"># overwrite each other&#39;s variables.</span></div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;<span class=\"comment\">PERLMOD_MAKEVAR_PREFIX = </span></div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;<span class=\"comment\"># Configuration options related to the preprocessor</span></div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;<span class=\"comment\"># If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all</span></div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;<span class=\"comment\"># C-preprocessor directives found in the sources and include files.</span></div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160;<span class=\"comment\">ENABLE_PREPROCESSING   = YES</span></div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;<span class=\"comment\"># If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names</span></div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;<span class=\"comment\"># in the source code. If set to NO, only conditional compilation will be</span></div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160;<span class=\"comment\"># performed. Macro expansion can be done in a controlled way by setting</span></div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;<span class=\"comment\"># EXPAND_ONLY_PREDEF to YES.</span></div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"> 1989</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;<span class=\"comment\">MACRO_EXPANSION        = NO</span></div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;<span class=\"comment\"># If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then</span></div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;<span class=\"comment\"># the macro expansion is limited to the macros specified with the PREDEFINED and</span></div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160;<span class=\"comment\"># EXPAND_AS_DEFINED tags.</span></div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160;<span class=\"comment\">EXPAND_ONLY_PREDEF     = NO</span></div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;<span class=\"comment\"># If the SEARCH_INCLUDES tag is set to YES, the include files in the</span></div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;<span class=\"comment\"># INCLUDE_PATH will be searched if a #include is found.</span></div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;<span class=\"comment\">SEARCH_INCLUDES        = YES</span></div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;<span class=\"comment\"># The INCLUDE_PATH tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;<span class=\"comment\"># contain include files that are not input files but should be processed by the</span></div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;<span class=\"comment\"># preprocessor.</span></div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCH_INCLUDES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;<span class=\"comment\">INCLUDE_PATH           = </span></div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;<span class=\"comment\"># You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard</span></div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;<span class=\"comment\"># patterns (like *.h and *.hpp) to filter out the header-files in the</span></div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;<span class=\"comment\"># directories. If left blank, the patterns specified with FILE_PATTERNS will be</span></div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;<span class=\"comment\"># used.</span></div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;<span class=\"comment\">INCLUDE_FILE_PATTERNS  = </span></div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160;<span class=\"comment\"># The PREDEFINED tag can be used to specify one or more macro names that are</span></div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;<span class=\"comment\"># defined before the preprocessor is started (similar to the -D option of e.g.</span></div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;<span class=\"comment\"># gcc). The argument of the tag is a list of macros of the form: name or</span></div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;<span class=\"comment\"># name=definition (no spaces). If the definition and the &quot;=&quot; are omitted, &quot;=1&quot;</span></div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;<span class=\"comment\"># is assumed. To prevent a macro definition from being undefined via #undef or</span></div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;<span class=\"comment\"># recursively expanded use the := operator instead of the = operator.</span></div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160;<span class=\"comment\">PREDEFINED             = </span></div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;<span class=\"comment\"># If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this</span></div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;<span class=\"comment\"># tag can be used to specify a list of macro names that should be expanded. The</span></div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;<span class=\"comment\"># macro definition that is found in the sources will be used. Use the PREDEFINED</span></div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;<span class=\"comment\"># tag if you want to use a different macro definition that overrules the</span></div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;<span class=\"comment\"># definition found in the source code.</span></div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;<span class=\"comment\">EXPAND_AS_DEFINED      = </span></div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;<span class=\"comment\"># If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen&#39;s preprocessor will</span></div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160;<span class=\"comment\"># remove all references to function-like macros that are alone on a line, have</span></div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;<span class=\"comment\"># an all uppercase name, and do not end with a semicolon. Such function macros</span></div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;<span class=\"comment\"># are typically used for boiler-plate code, and will confuse the parser if not</span></div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160;<span class=\"comment\"># removed.</span></div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"> 2046</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160;<span class=\"comment\">SKIP_FUNCTION_MACROS   = YES</span></div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"> 2050</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;<span class=\"comment\"># Configuration options related to external references</span></div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02054\"></a><span class=\"lineno\"> 2054</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02055\"></a><span class=\"lineno\"> 2055</span>&#160;<span class=\"comment\"># The TAGFILES tag can be used to specify one or more tag files. For each tag</span></div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;<span class=\"comment\"># file the location of the external documentation should be added. The format of</span></div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;<span class=\"comment\"># a tag file without this location is as follows:</span></div>\n<div class=\"line\"><a name=\"l02058\"></a><span class=\"lineno\"> 2058</span>&#160;<span class=\"comment\"># TAGFILES = file1 file2 ...</span></div>\n<div class=\"line\"><a name=\"l02059\"></a><span class=\"lineno\"> 2059</span>&#160;<span class=\"comment\"># Adding location for the tag files is done as follows:</span></div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;<span class=\"comment\"># TAGFILES = file1=loc1 &quot;file2 = loc2&quot; ...</span></div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;<span class=\"comment\"># where loc1 and loc2 can be relative or absolute paths or URLs. See the</span></div>\n<div class=\"line\"><a name=\"l02062\"></a><span class=\"lineno\"> 2062</span>&#160;<span class=\"comment\"># section &quot;Linking to external documentation&quot; for more information about the use</span></div>\n<div class=\"line\"><a name=\"l02063\"></a><span class=\"lineno\"> 2063</span>&#160;<span class=\"comment\"># of tag files.</span></div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;<span class=\"comment\"># Note: Each tag file must have a unique name (where the name does NOT include</span></div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;<span class=\"comment\"># the path). If a tag file is not located in the directory in which doxygen is</span></div>\n<div class=\"line\"><a name=\"l02066\"></a><span class=\"lineno\"> 2066</span>&#160;<span class=\"comment\"># run, you must also specify the path to the tagfile here.</span></div>\n<div class=\"line\"><a name=\"l02067\"></a><span class=\"lineno\"> 2067</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;<span class=\"comment\">TAGFILES               = </span></div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02070\"></a><span class=\"lineno\"> 2070</span>&#160;<span class=\"comment\"># When a file name is specified after GENERATE_TAGFILE, doxygen will create a</span></div>\n<div class=\"line\"><a name=\"l02071\"></a><span class=\"lineno\"> 2071</span>&#160;<span class=\"comment\"># tag file that is based on the input files it reads. See section &quot;Linking to</span></div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;<span class=\"comment\"># external documentation&quot; for more information about the usage of tag files.</span></div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02074\"></a><span class=\"lineno\"> 2074</span>&#160;<span class=\"comment\">GENERATE_TAGFILE       = </span></div>\n<div class=\"line\"><a name=\"l02075\"></a><span class=\"lineno\"> 2075</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;<span class=\"comment\"># If the ALLEXTERNALS tag is set to YES, all external class will be listed in</span></div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;<span class=\"comment\"># the class index. If set to NO, only the inherited external classes will be</span></div>\n<div class=\"line\"><a name=\"l02078\"></a><span class=\"lineno\"> 2078</span>&#160;<span class=\"comment\"># listed.</span></div>\n<div class=\"line\"><a name=\"l02079\"></a><span class=\"lineno\"> 2079</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;<span class=\"comment\">ALLEXTERNALS           = NO</span></div>\n<div class=\"line\"><a name=\"l02082\"></a><span class=\"lineno\"> 2082</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02083\"></a><span class=\"lineno\"> 2083</span>&#160;<span class=\"comment\"># If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed</span></div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;<span class=\"comment\"># in the modules index. If set to NO, only the current project&#39;s groups will be</span></div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;<span class=\"comment\"># listed.</span></div>\n<div class=\"line\"><a name=\"l02086\"></a><span class=\"lineno\"> 2086</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02087\"></a><span class=\"lineno\"> 2087</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;<span class=\"comment\">EXTERNAL_GROUPS        = YES</span></div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02090\"></a><span class=\"lineno\"> 2090</span>&#160;<span class=\"comment\"># If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in</span></div>\n<div class=\"line\"><a name=\"l02091\"></a><span class=\"lineno\"> 2091</span>&#160;<span class=\"comment\"># the related pages index. If set to NO, only the current project&#39;s pages will</span></div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;<span class=\"comment\"># be listed.</span></div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;<span class=\"comment\">EXTERNAL_PAGES         = YES</span></div>\n<div class=\"line\"><a name=\"l02096\"></a><span class=\"lineno\"> 2096</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;<span class=\"comment\"># The PERL_PATH should be the absolute path and name of the perl script</span></div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;<span class=\"comment\"># interpreter (i.e. the result of &#39;which perl&#39;).</span></div>\n<div class=\"line\"><a name=\"l02099\"></a><span class=\"lineno\"> 2099</span>&#160;<span class=\"comment\"># The default file (with absolute path) is: /usr/bin/perl.</span></div>\n<div class=\"line\"><a name=\"l02100\"></a><span class=\"lineno\"> 2100</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;<span class=\"comment\">PERL_PATH              = /usr/bin/perl</span></div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02103\"></a><span class=\"lineno\"> 2103</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02104\"></a><span class=\"lineno\"> 2104</span>&#160;<span class=\"comment\"># Configuration options related to the dot tool</span></div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02107\"></a><span class=\"lineno\"> 2107</span>&#160;<span class=\"comment\"># If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram</span></div>\n<div class=\"line\"><a name=\"l02108\"></a><span class=\"lineno\"> 2108</span>&#160;<span class=\"comment\"># (in HTML and LaTeX) for classes with base or super classes. Setting the tag to</span></div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;<span class=\"comment\"># NO turns the diagrams off. Note that this option also works with HAVE_DOT</span></div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;<span class=\"comment\"># disabled, but it is recommended to install and use dot, since it yields more</span></div>\n<div class=\"line\"><a name=\"l02111\"></a><span class=\"lineno\"> 2111</span>&#160;<span class=\"comment\"># powerful graphs.</span></div>\n<div class=\"line\"><a name=\"l02112\"></a><span class=\"lineno\"> 2112</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;<span class=\"comment\">CLASS_DIAGRAMS         = YES</span></div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;<span class=\"comment\"># You can define message sequence charts within doxygen comments using the \\msc</span></div>\n<div class=\"line\"><a name=\"l02117\"></a><span class=\"lineno\"> 2117</span>&#160;<span class=\"comment\"># command. Doxygen will then run the mscgen tool (see:</span></div>\n<div class=\"line\"><a name=\"l02118\"></a><span class=\"lineno\"> 2118</span>&#160;<span class=\"comment\"># http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the</span></div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;<span class=\"comment\"># documentation. The MSCGEN_PATH tag allows you to specify the directory where</span></div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;<span class=\"comment\"># the mscgen tool resides. If left empty the tool is assumed to be found in the</span></div>\n<div class=\"line\"><a name=\"l02121\"></a><span class=\"lineno\"> 2121</span>&#160;<span class=\"comment\"># default search path.</span></div>\n<div class=\"line\"><a name=\"l02122\"></a><span class=\"lineno\"> 2122</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;<span class=\"comment\">MSCGEN_PATH            = </span></div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02125\"></a><span class=\"lineno\"> 2125</span>&#160;<span class=\"comment\"># You can include diagrams made with dia in doxygen documentation. Doxygen will</span></div>\n<div class=\"line\"><a name=\"l02126\"></a><span class=\"lineno\"> 2126</span>&#160;<span class=\"comment\"># then run dia to produce the diagram and insert it in the documentation. The</span></div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;<span class=\"comment\"># DIA_PATH tag allows you to specify the directory where the dia binary resides.</span></div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;<span class=\"comment\"># If left empty dia is assumed to be found in the default search path.</span></div>\n<div class=\"line\"><a name=\"l02129\"></a><span class=\"lineno\"> 2129</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02130\"></a><span class=\"lineno\"> 2130</span>&#160;<span class=\"comment\">DIA_PATH               = </span></div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;<span class=\"comment\"># If set to YES the inheritance and collaboration graphs will hide inheritance</span></div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;<span class=\"comment\"># and usage relations if the target is undocumented or is not a class.</span></div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02135\"></a><span class=\"lineno\"> 2135</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;<span class=\"comment\">HIDE_UNDOC_RELATIONS   = YES</span></div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;<span class=\"comment\"># If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is</span></div>\n<div class=\"line\"><a name=\"l02139\"></a><span class=\"lineno\"> 2139</span>&#160;<span class=\"comment\"># available from the path. This tool is part of Graphviz (see:</span></div>\n<div class=\"line\"><a name=\"l02140\"></a><span class=\"lineno\"> 2140</span>&#160;<span class=\"comment\"># http://www.graphviz.org/), a graph visualization toolkit from AT&amp;T and Lucent</span></div>\n<div class=\"line\"><a name=\"l02141\"></a><span class=\"lineno\"> 2141</span>&#160;<span class=\"comment\"># Bell Labs. The other options in this section have no effect if this option is</span></div>\n<div class=\"line\"><a name=\"l02142\"></a><span class=\"lineno\"> 2142</span>&#160;<span class=\"comment\"># set to NO</span></div>\n<div class=\"line\"><a name=\"l02143\"></a><span class=\"lineno\"> 2143</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02144\"></a><span class=\"lineno\"> 2144</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02145\"></a><span class=\"lineno\"> 2145</span>&#160;<span class=\"comment\">HAVE_DOT               = NO</span></div>\n<div class=\"line\"><a name=\"l02146\"></a><span class=\"lineno\"> 2146</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02147\"></a><span class=\"lineno\"> 2147</span>&#160;<span class=\"comment\"># The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed</span></div>\n<div class=\"line\"><a name=\"l02148\"></a><span class=\"lineno\"> 2148</span>&#160;<span class=\"comment\"># to run in parallel. When set to 0 doxygen will base this on the number of</span></div>\n<div class=\"line\"><a name=\"l02149\"></a><span class=\"lineno\"> 2149</span>&#160;<span class=\"comment\"># processors available in the system. You can set it explicitly to a value</span></div>\n<div class=\"line\"><a name=\"l02150\"></a><span class=\"lineno\"> 2150</span>&#160;<span class=\"comment\"># larger than 0 to get control over the balance between CPU load and processing</span></div>\n<div class=\"line\"><a name=\"l02151\"></a><span class=\"lineno\"> 2151</span>&#160;<span class=\"comment\"># speed.</span></div>\n<div class=\"line\"><a name=\"l02152\"></a><span class=\"lineno\"> 2152</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 32, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l02153\"></a><span class=\"lineno\"> 2153</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02154\"></a><span class=\"lineno\"> 2154</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02155\"></a><span class=\"lineno\"> 2155</span>&#160;<span class=\"comment\">DOT_NUM_THREADS        = 0</span></div>\n<div class=\"line\"><a name=\"l02156\"></a><span class=\"lineno\"> 2156</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02157\"></a><span class=\"lineno\"> 2157</span>&#160;<span class=\"comment\"># When you want a differently looking font in the dot files that doxygen</span></div>\n<div class=\"line\"><a name=\"l02158\"></a><span class=\"lineno\"> 2158</span>&#160;<span class=\"comment\"># generates you can specify the font name using DOT_FONTNAME. You need to make</span></div>\n<div class=\"line\"><a name=\"l02159\"></a><span class=\"lineno\"> 2159</span>&#160;<span class=\"comment\"># sure dot is able to find the font, which can be done by putting it in a</span></div>\n<div class=\"line\"><a name=\"l02160\"></a><span class=\"lineno\"> 2160</span>&#160;<span class=\"comment\"># standard location or by setting the DOTFONTPATH environment variable or by</span></div>\n<div class=\"line\"><a name=\"l02161\"></a><span class=\"lineno\"> 2161</span>&#160;<span class=\"comment\"># setting DOT_FONTPATH to the directory containing the font.</span></div>\n<div class=\"line\"><a name=\"l02162\"></a><span class=\"lineno\"> 2162</span>&#160;<span class=\"comment\"># The default value is: Helvetica.</span></div>\n<div class=\"line\"><a name=\"l02163\"></a><span class=\"lineno\"> 2163</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02164\"></a><span class=\"lineno\"> 2164</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02165\"></a><span class=\"lineno\"> 2165</span>&#160;<span class=\"comment\">DOT_FONTNAME           = Helvetica</span></div>\n<div class=\"line\"><a name=\"l02166\"></a><span class=\"lineno\"> 2166</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02167\"></a><span class=\"lineno\"> 2167</span>&#160;<span class=\"comment\"># The DOT_FONTSIZE tag can be used to set the size (in points) of the font of</span></div>\n<div class=\"line\"><a name=\"l02168\"></a><span class=\"lineno\"> 2168</span>&#160;<span class=\"comment\"># dot graphs.</span></div>\n<div class=\"line\"><a name=\"l02169\"></a><span class=\"lineno\"> 2169</span>&#160;<span class=\"comment\"># Minimum value: 4, maximum value: 24, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l02170\"></a><span class=\"lineno\"> 2170</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02171\"></a><span class=\"lineno\"> 2171</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02172\"></a><span class=\"lineno\"> 2172</span>&#160;<span class=\"comment\">DOT_FONTSIZE           = 10</span></div>\n<div class=\"line\"><a name=\"l02173\"></a><span class=\"lineno\"> 2173</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02174\"></a><span class=\"lineno\"> 2174</span>&#160;<span class=\"comment\"># By default doxygen will tell dot to use the default font as specified with</span></div>\n<div class=\"line\"><a name=\"l02175\"></a><span class=\"lineno\"> 2175</span>&#160;<span class=\"comment\"># DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set</span></div>\n<div class=\"line\"><a name=\"l02176\"></a><span class=\"lineno\"> 2176</span>&#160;<span class=\"comment\"># the path where dot can find it using this tag.</span></div>\n<div class=\"line\"><a name=\"l02177\"></a><span class=\"lineno\"> 2177</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02178\"></a><span class=\"lineno\"> 2178</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02179\"></a><span class=\"lineno\"> 2179</span>&#160;<span class=\"comment\">DOT_FONTPATH           = </span></div>\n<div class=\"line\"><a name=\"l02180\"></a><span class=\"lineno\"> 2180</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02181\"></a><span class=\"lineno\"> 2181</span>&#160;<span class=\"comment\"># If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for</span></div>\n<div class=\"line\"><a name=\"l02182\"></a><span class=\"lineno\"> 2182</span>&#160;<span class=\"comment\"># each documented class showing the direct and indirect inheritance relations.</span></div>\n<div class=\"line\"><a name=\"l02183\"></a><span class=\"lineno\"> 2183</span>&#160;<span class=\"comment\"># Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.</span></div>\n<div class=\"line\"><a name=\"l02184\"></a><span class=\"lineno\"> 2184</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02185\"></a><span class=\"lineno\"> 2185</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02186\"></a><span class=\"lineno\"> 2186</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02187\"></a><span class=\"lineno\"> 2187</span>&#160;<span class=\"comment\">CLASS_GRAPH            = YES</span></div>\n<div class=\"line\"><a name=\"l02188\"></a><span class=\"lineno\"> 2188</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02189\"></a><span class=\"lineno\"> 2189</span>&#160;<span class=\"comment\"># If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l02190\"></a><span class=\"lineno\"> 2190</span>&#160;<span class=\"comment\"># graph for each documented class showing the direct and indirect implementation</span></div>\n<div class=\"line\"><a name=\"l02191\"></a><span class=\"lineno\"> 2191</span>&#160;<span class=\"comment\"># dependencies (inheritance, containment, and class references variables) of the</span></div>\n<div class=\"line\"><a name=\"l02192\"></a><span class=\"lineno\"> 2192</span>&#160;<span class=\"comment\"># class with other documented classes.</span></div>\n<div class=\"line\"><a name=\"l02193\"></a><span class=\"lineno\"> 2193</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02194\"></a><span class=\"lineno\"> 2194</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02195\"></a><span class=\"lineno\"> 2195</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02196\"></a><span class=\"lineno\"> 2196</span>&#160;<span class=\"comment\">COLLABORATION_GRAPH    = YES</span></div>\n<div class=\"line\"><a name=\"l02197\"></a><span class=\"lineno\"> 2197</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02198\"></a><span class=\"lineno\"> 2198</span>&#160;<span class=\"comment\"># If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for</span></div>\n<div class=\"line\"><a name=\"l02199\"></a><span class=\"lineno\"> 2199</span>&#160;<span class=\"comment\"># groups, showing the direct groups dependencies.</span></div>\n<div class=\"line\"><a name=\"l02200\"></a><span class=\"lineno\"> 2200</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02201\"></a><span class=\"lineno\"> 2201</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02202\"></a><span class=\"lineno\"> 2202</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02203\"></a><span class=\"lineno\"> 2203</span>&#160;<span class=\"comment\">GROUP_GRAPHS           = YES</span></div>\n<div class=\"line\"><a name=\"l02204\"></a><span class=\"lineno\"> 2204</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02205\"></a><span class=\"lineno\"> 2205</span>&#160;<span class=\"comment\"># If the UML_LOOK tag is set to YES, doxygen will generate inheritance and</span></div>\n<div class=\"line\"><a name=\"l02206\"></a><span class=\"lineno\"> 2206</span>&#160;<span class=\"comment\"># collaboration diagrams in a style similar to the OMG&#39;s Unified Modeling</span></div>\n<div class=\"line\"><a name=\"l02207\"></a><span class=\"lineno\"> 2207</span>&#160;<span class=\"comment\"># Language.</span></div>\n<div class=\"line\"><a name=\"l02208\"></a><span class=\"lineno\"> 2208</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02209\"></a><span class=\"lineno\"> 2209</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02210\"></a><span class=\"lineno\"> 2210</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02211\"></a><span class=\"lineno\"> 2211</span>&#160;<span class=\"comment\">UML_LOOK               = NO</span></div>\n<div class=\"line\"><a name=\"l02212\"></a><span class=\"lineno\"> 2212</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02213\"></a><span class=\"lineno\"> 2213</span>&#160;<span class=\"comment\"># If the UML_LOOK tag is enabled, the fields and methods are shown inside the</span></div>\n<div class=\"line\"><a name=\"l02214\"></a><span class=\"lineno\"> 2214</span>&#160;<span class=\"comment\"># class node. If there are many fields or methods and many nodes the graph may</span></div>\n<div class=\"line\"><a name=\"l02215\"></a><span class=\"lineno\"> 2215</span>&#160;<span class=\"comment\"># become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the</span></div>\n<div class=\"line\"><a name=\"l02216\"></a><span class=\"lineno\"> 2216</span>&#160;<span class=\"comment\"># number of items for each type to make the size more manageable. Set this to 0</span></div>\n<div class=\"line\"><a name=\"l02217\"></a><span class=\"lineno\"> 2217</span>&#160;<span class=\"comment\"># for no limit. Note that the threshold may be exceeded by 50% before the limit</span></div>\n<div class=\"line\"><a name=\"l02218\"></a><span class=\"lineno\"> 2218</span>&#160;<span class=\"comment\"># is enforced. So when you set the threshold to 10, up to 15 fields may appear,</span></div>\n<div class=\"line\"><a name=\"l02219\"></a><span class=\"lineno\"> 2219</span>&#160;<span class=\"comment\"># but if the number exceeds 15, the total amount of fields shown is limited to</span></div>\n<div class=\"line\"><a name=\"l02220\"></a><span class=\"lineno\"> 2220</span>&#160;<span class=\"comment\"># 10.</span></div>\n<div class=\"line\"><a name=\"l02221\"></a><span class=\"lineno\"> 2221</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 100, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l02222\"></a><span class=\"lineno\"> 2222</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02223\"></a><span class=\"lineno\"> 2223</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02224\"></a><span class=\"lineno\"> 2224</span>&#160;<span class=\"comment\">UML_LIMIT_NUM_FIELDS   = 10</span></div>\n<div class=\"line\"><a name=\"l02225\"></a><span class=\"lineno\"> 2225</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02226\"></a><span class=\"lineno\"> 2226</span>&#160;<span class=\"comment\"># If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and</span></div>\n<div class=\"line\"><a name=\"l02227\"></a><span class=\"lineno\"> 2227</span>&#160;<span class=\"comment\"># collaboration graphs will show the relations between templates and their</span></div>\n<div class=\"line\"><a name=\"l02228\"></a><span class=\"lineno\"> 2228</span>&#160;<span class=\"comment\"># instances.</span></div>\n<div class=\"line\"><a name=\"l02229\"></a><span class=\"lineno\"> 2229</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02230\"></a><span class=\"lineno\"> 2230</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02231\"></a><span class=\"lineno\"> 2231</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02232\"></a><span class=\"lineno\"> 2232</span>&#160;<span class=\"comment\">TEMPLATE_RELATIONS     = NO</span></div>\n<div class=\"line\"><a name=\"l02233\"></a><span class=\"lineno\"> 2233</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02234\"></a><span class=\"lineno\"> 2234</span>&#160;<span class=\"comment\"># If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to</span></div>\n<div class=\"line\"><a name=\"l02235\"></a><span class=\"lineno\"> 2235</span>&#160;<span class=\"comment\"># YES then doxygen will generate a graph for each documented file showing the</span></div>\n<div class=\"line\"><a name=\"l02236\"></a><span class=\"lineno\"> 2236</span>&#160;<span class=\"comment\"># direct and indirect include dependencies of the file with other documented</span></div>\n<div class=\"line\"><a name=\"l02237\"></a><span class=\"lineno\"> 2237</span>&#160;<span class=\"comment\"># files.</span></div>\n<div class=\"line\"><a name=\"l02238\"></a><span class=\"lineno\"> 2238</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02239\"></a><span class=\"lineno\"> 2239</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02240\"></a><span class=\"lineno\"> 2240</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02241\"></a><span class=\"lineno\"> 2241</span>&#160;<span class=\"comment\">INCLUDE_GRAPH          = YES</span></div>\n<div class=\"line\"><a name=\"l02242\"></a><span class=\"lineno\"> 2242</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02243\"></a><span class=\"lineno\"> 2243</span>&#160;<span class=\"comment\"># If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are</span></div>\n<div class=\"line\"><a name=\"l02244\"></a><span class=\"lineno\"> 2244</span>&#160;<span class=\"comment\"># set to YES then doxygen will generate a graph for each documented file showing</span></div>\n<div class=\"line\"><a name=\"l02245\"></a><span class=\"lineno\"> 2245</span>&#160;<span class=\"comment\"># the direct and indirect include dependencies of the file with other documented</span></div>\n<div class=\"line\"><a name=\"l02246\"></a><span class=\"lineno\"> 2246</span>&#160;<span class=\"comment\"># files.</span></div>\n<div class=\"line\"><a name=\"l02247\"></a><span class=\"lineno\"> 2247</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02248\"></a><span class=\"lineno\"> 2248</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02249\"></a><span class=\"lineno\"> 2249</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02250\"></a><span class=\"lineno\"> 2250</span>&#160;<span class=\"comment\">INCLUDED_BY_GRAPH      = YES</span></div>\n<div class=\"line\"><a name=\"l02251\"></a><span class=\"lineno\"> 2251</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02252\"></a><span class=\"lineno\"> 2252</span>&#160;<span class=\"comment\"># If the CALL_GRAPH tag is set to YES then doxygen will generate a call</span></div>\n<div class=\"line\"><a name=\"l02253\"></a><span class=\"lineno\"> 2253</span>&#160;<span class=\"comment\"># dependency graph for every global function or class method.</span></div>\n<div class=\"line\"><a name=\"l02254\"></a><span class=\"lineno\"> 2254</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02255\"></a><span class=\"lineno\"> 2255</span>&#160;<span class=\"comment\"># Note that enabling this option will significantly increase the time of a run.</span></div>\n<div class=\"line\"><a name=\"l02256\"></a><span class=\"lineno\"> 2256</span>&#160;<span class=\"comment\"># So in most cases it will be better to enable call graphs for selected</span></div>\n<div class=\"line\"><a name=\"l02257\"></a><span class=\"lineno\"> 2257</span>&#160;<span class=\"comment\"># functions only using the \\callgraph command. Disabling a call graph can be</span></div>\n<div class=\"line\"><a name=\"l02258\"></a><span class=\"lineno\"> 2258</span>&#160;<span class=\"comment\"># accomplished by means of the command \\hidecallgraph.</span></div>\n<div class=\"line\"><a name=\"l02259\"></a><span class=\"lineno\"> 2259</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02260\"></a><span class=\"lineno\"> 2260</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02261\"></a><span class=\"lineno\"> 2261</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02262\"></a><span class=\"lineno\"> 2262</span>&#160;<span class=\"comment\">CALL_GRAPH             = YES</span></div>\n<div class=\"line\"><a name=\"l02263\"></a><span class=\"lineno\"> 2263</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02264\"></a><span class=\"lineno\"> 2264</span>&#160;<span class=\"comment\"># If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller</span></div>\n<div class=\"line\"><a name=\"l02265\"></a><span class=\"lineno\"> 2265</span>&#160;<span class=\"comment\"># dependency graph for every global function or class method.</span></div>\n<div class=\"line\"><a name=\"l02266\"></a><span class=\"lineno\"> 2266</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02267\"></a><span class=\"lineno\"> 2267</span>&#160;<span class=\"comment\"># Note that enabling this option will significantly increase the time of a run.</span></div>\n<div class=\"line\"><a name=\"l02268\"></a><span class=\"lineno\"> 2268</span>&#160;<span class=\"comment\"># So in most cases it will be better to enable caller graphs for selected</span></div>\n<div class=\"line\"><a name=\"l02269\"></a><span class=\"lineno\"> 2269</span>&#160;<span class=\"comment\"># functions only using the \\callergraph command. Disabling a caller graph can be</span></div>\n<div class=\"line\"><a name=\"l02270\"></a><span class=\"lineno\"> 2270</span>&#160;<span class=\"comment\"># accomplished by means of the command \\hidecallergraph.</span></div>\n<div class=\"line\"><a name=\"l02271\"></a><span class=\"lineno\"> 2271</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02272\"></a><span class=\"lineno\"> 2272</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02273\"></a><span class=\"lineno\"> 2273</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02274\"></a><span class=\"lineno\"> 2274</span>&#160;<span class=\"comment\">CALLER_GRAPH           = YES</span></div>\n<div class=\"line\"><a name=\"l02275\"></a><span class=\"lineno\"> 2275</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02276\"></a><span class=\"lineno\"> 2276</span>&#160;<span class=\"comment\"># If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical</span></div>\n<div class=\"line\"><a name=\"l02277\"></a><span class=\"lineno\"> 2277</span>&#160;<span class=\"comment\"># hierarchy of all classes instead of a textual one.</span></div>\n<div class=\"line\"><a name=\"l02278\"></a><span class=\"lineno\"> 2278</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02279\"></a><span class=\"lineno\"> 2279</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02280\"></a><span class=\"lineno\"> 2280</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02281\"></a><span class=\"lineno\"> 2281</span>&#160;<span class=\"comment\">GRAPHICAL_HIERARCHY    = YES</span></div>\n<div class=\"line\"><a name=\"l02282\"></a><span class=\"lineno\"> 2282</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02283\"></a><span class=\"lineno\"> 2283</span>&#160;<span class=\"comment\"># If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the</span></div>\n<div class=\"line\"><a name=\"l02284\"></a><span class=\"lineno\"> 2284</span>&#160;<span class=\"comment\"># dependencies a directory has on other directories in a graphical way. The</span></div>\n<div class=\"line\"><a name=\"l02285\"></a><span class=\"lineno\"> 2285</span>&#160;<span class=\"comment\"># dependency relations are determined by the #include relations between the</span></div>\n<div class=\"line\"><a name=\"l02286\"></a><span class=\"lineno\"> 2286</span>&#160;<span class=\"comment\"># files in the directories.</span></div>\n<div class=\"line\"><a name=\"l02287\"></a><span class=\"lineno\"> 2287</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02288\"></a><span class=\"lineno\"> 2288</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02289\"></a><span class=\"lineno\"> 2289</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02290\"></a><span class=\"lineno\"> 2290</span>&#160;<span class=\"comment\">DIRECTORY_GRAPH        = YES</span></div>\n<div class=\"line\"><a name=\"l02291\"></a><span class=\"lineno\"> 2291</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02292\"></a><span class=\"lineno\"> 2292</span>&#160;<span class=\"comment\"># The DOT_IMAGE_FORMAT tag can be used to set the image format of the images</span></div>\n<div class=\"line\"><a name=\"l02293\"></a><span class=\"lineno\"> 2293</span>&#160;<span class=\"comment\"># generated by dot. For an explanation of the image formats see the section</span></div>\n<div class=\"line\"><a name=\"l02294\"></a><span class=\"lineno\"> 2294</span>&#160;<span class=\"comment\"># output formats in the documentation of the dot tool (Graphviz (see:</span></div>\n<div class=\"line\"><a name=\"l02295\"></a><span class=\"lineno\"> 2295</span>&#160;<span class=\"comment\"># http://www.graphviz.org/)).</span></div>\n<div class=\"line\"><a name=\"l02296\"></a><span class=\"lineno\"> 2296</span>&#160;<span class=\"comment\"># Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order</span></div>\n<div class=\"line\"><a name=\"l02297\"></a><span class=\"lineno\"> 2297</span>&#160;<span class=\"comment\"># to make the SVG files visible in IE 9+ (other browsers do not have this</span></div>\n<div class=\"line\"><a name=\"l02298\"></a><span class=\"lineno\"> 2298</span>&#160;<span class=\"comment\"># requirement).</span></div>\n<div class=\"line\"><a name=\"l02299\"></a><span class=\"lineno\"> 2299</span>&#160;<span class=\"comment\"># Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,</span></div>\n<div class=\"line\"><a name=\"l02300\"></a><span class=\"lineno\"> 2300</span>&#160;<span class=\"comment\"># png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and</span></div>\n<div class=\"line\"><a name=\"l02301\"></a><span class=\"lineno\"> 2301</span>&#160;<span class=\"comment\"># png:gdiplus:gdiplus.</span></div>\n<div class=\"line\"><a name=\"l02302\"></a><span class=\"lineno\"> 2302</span>&#160;<span class=\"comment\"># The default value is: png.</span></div>\n<div class=\"line\"><a name=\"l02303\"></a><span class=\"lineno\"> 2303</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02304\"></a><span class=\"lineno\"> 2304</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02305\"></a><span class=\"lineno\"> 2305</span>&#160;<span class=\"comment\">DOT_IMAGE_FORMAT       = png</span></div>\n<div class=\"line\"><a name=\"l02306\"></a><span class=\"lineno\"> 2306</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02307\"></a><span class=\"lineno\"> 2307</span>&#160;<span class=\"comment\"># If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to</span></div>\n<div class=\"line\"><a name=\"l02308\"></a><span class=\"lineno\"> 2308</span>&#160;<span class=\"comment\"># enable generation of interactive SVG images that allow zooming and panning.</span></div>\n<div class=\"line\"><a name=\"l02309\"></a><span class=\"lineno\"> 2309</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02310\"></a><span class=\"lineno\"> 2310</span>&#160;<span class=\"comment\"># Note that this requires a modern browser other than Internet Explorer. Tested</span></div>\n<div class=\"line\"><a name=\"l02311\"></a><span class=\"lineno\"> 2311</span>&#160;<span class=\"comment\"># and working are Firefox, Chrome, Safari, and Opera.</span></div>\n<div class=\"line\"><a name=\"l02312\"></a><span class=\"lineno\"> 2312</span>&#160;<span class=\"comment\"># Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make</span></div>\n<div class=\"line\"><a name=\"l02313\"></a><span class=\"lineno\"> 2313</span>&#160;<span class=\"comment\"># the SVG files visible. Older versions of IE do not have SVG support.</span></div>\n<div class=\"line\"><a name=\"l02314\"></a><span class=\"lineno\"> 2314</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02315\"></a><span class=\"lineno\"> 2315</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02316\"></a><span class=\"lineno\"> 2316</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02317\"></a><span class=\"lineno\"> 2317</span>&#160;<span class=\"comment\">INTERACTIVE_SVG        = NO</span></div>\n<div class=\"line\"><a name=\"l02318\"></a><span class=\"lineno\"> 2318</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02319\"></a><span class=\"lineno\"> 2319</span>&#160;<span class=\"comment\"># The DOT_PATH tag can be used to specify the path where the dot tool can be</span></div>\n<div class=\"line\"><a name=\"l02320\"></a><span class=\"lineno\"> 2320</span>&#160;<span class=\"comment\"># found. If left blank, it is assumed the dot tool can be found in the path.</span></div>\n<div class=\"line\"><a name=\"l02321\"></a><span class=\"lineno\"> 2321</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02322\"></a><span class=\"lineno\"> 2322</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02323\"></a><span class=\"lineno\"> 2323</span>&#160;<span class=\"comment\">DOT_PATH               = </span></div>\n<div class=\"line\"><a name=\"l02324\"></a><span class=\"lineno\"> 2324</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02325\"></a><span class=\"lineno\"> 2325</span>&#160;<span class=\"comment\"># The DOTFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02326\"></a><span class=\"lineno\"> 2326</span>&#160;<span class=\"comment\"># contain dot files that are included in the documentation (see the \\dotfile</span></div>\n<div class=\"line\"><a name=\"l02327\"></a><span class=\"lineno\"> 2327</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02328\"></a><span class=\"lineno\"> 2328</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02329\"></a><span class=\"lineno\"> 2329</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02330\"></a><span class=\"lineno\"> 2330</span>&#160;<span class=\"comment\">DOTFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02331\"></a><span class=\"lineno\"> 2331</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02332\"></a><span class=\"lineno\"> 2332</span>&#160;<span class=\"comment\"># The MSCFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02333\"></a><span class=\"lineno\"> 2333</span>&#160;<span class=\"comment\"># contain msc files that are included in the documentation (see the \\mscfile</span></div>\n<div class=\"line\"><a name=\"l02334\"></a><span class=\"lineno\"> 2334</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02335\"></a><span class=\"lineno\"> 2335</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02336\"></a><span class=\"lineno\"> 2336</span>&#160;<span class=\"comment\">MSCFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02337\"></a><span class=\"lineno\"> 2337</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02338\"></a><span class=\"lineno\"> 2338</span>&#160;<span class=\"comment\"># The DIAFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02339\"></a><span class=\"lineno\"> 2339</span>&#160;<span class=\"comment\"># contain dia files that are included in the documentation (see the \\diafile</span></div>\n<div class=\"line\"><a name=\"l02340\"></a><span class=\"lineno\"> 2340</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02341\"></a><span class=\"lineno\"> 2341</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02342\"></a><span class=\"lineno\"> 2342</span>&#160;<span class=\"comment\">DIAFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02343\"></a><span class=\"lineno\"> 2343</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02344\"></a><span class=\"lineno\"> 2344</span>&#160;<span class=\"comment\"># When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the</span></div>\n<div class=\"line\"><a name=\"l02345\"></a><span class=\"lineno\"> 2345</span>&#160;<span class=\"comment\"># path where java can find the plantuml.jar file. If left blank, it is assumed</span></div>\n<div class=\"line\"><a name=\"l02346\"></a><span class=\"lineno\"> 2346</span>&#160;<span class=\"comment\"># PlantUML is not used or called during a preprocessing step. Doxygen will</span></div>\n<div class=\"line\"><a name=\"l02347\"></a><span class=\"lineno\"> 2347</span>&#160;<span class=\"comment\"># generate a warning when it encounters a \\startuml command in this case and</span></div>\n<div class=\"line\"><a name=\"l02348\"></a><span class=\"lineno\"> 2348</span>&#160;<span class=\"comment\"># will not generate output for the diagram.</span></div>\n<div class=\"line\"><a name=\"l02349\"></a><span class=\"lineno\"> 2349</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02350\"></a><span class=\"lineno\"> 2350</span>&#160;<span class=\"comment\">PLANTUML_JAR_PATH      = </span></div>\n<div class=\"line\"><a name=\"l02351\"></a><span class=\"lineno\"> 2351</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02352\"></a><span class=\"lineno\"> 2352</span>&#160;<span class=\"comment\"># When using plantuml, the specified paths are searched for files specified by</span></div>\n<div class=\"line\"><a name=\"l02353\"></a><span class=\"lineno\"> 2353</span>&#160;<span class=\"comment\"># the !include statement in a plantuml block.</span></div>\n<div class=\"line\"><a name=\"l02354\"></a><span class=\"lineno\"> 2354</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02355\"></a><span class=\"lineno\"> 2355</span>&#160;<span class=\"comment\">PLANTUML_INCLUDE_PATH  = </span></div>\n<div class=\"line\"><a name=\"l02356\"></a><span class=\"lineno\"> 2356</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02357\"></a><span class=\"lineno\"> 2357</span>&#160;<span class=\"comment\"># The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes</span></div>\n<div class=\"line\"><a name=\"l02358\"></a><span class=\"lineno\"> 2358</span>&#160;<span class=\"comment\"># that will be shown in the graph. If the number of nodes in a graph becomes</span></div>\n<div class=\"line\"><a name=\"l02359\"></a><span class=\"lineno\"> 2359</span>&#160;<span class=\"comment\"># larger than this value, doxygen will truncate the graph, which is visualized</span></div>\n<div class=\"line\"><a name=\"l02360\"></a><span class=\"lineno\"> 2360</span>&#160;<span class=\"comment\"># by representing a node as a red box. Note that doxygen if the number of direct</span></div>\n<div class=\"line\"><a name=\"l02361\"></a><span class=\"lineno\"> 2361</span>&#160;<span class=\"comment\"># children of the root node in a graph is already larger than</span></div>\n<div class=\"line\"><a name=\"l02362\"></a><span class=\"lineno\"> 2362</span>&#160;<span class=\"comment\"># DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that</span></div>\n<div class=\"line\"><a name=\"l02363\"></a><span class=\"lineno\"> 2363</span>&#160;<span class=\"comment\"># the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.</span></div>\n<div class=\"line\"><a name=\"l02364\"></a><span class=\"lineno\"> 2364</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 10000, default value: 50.</span></div>\n<div class=\"line\"><a name=\"l02365\"></a><span class=\"lineno\"> 2365</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02366\"></a><span class=\"lineno\"> 2366</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02367\"></a><span class=\"lineno\"> 2367</span>&#160;<span class=\"comment\">DOT_GRAPH_MAX_NODES    = 50</span></div>\n<div class=\"line\"><a name=\"l02368\"></a><span class=\"lineno\"> 2368</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02369\"></a><span class=\"lineno\"> 2369</span>&#160;<span class=\"comment\"># The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs</span></div>\n<div class=\"line\"><a name=\"l02370\"></a><span class=\"lineno\"> 2370</span>&#160;<span class=\"comment\"># generated by dot. A depth value of 3 means that only nodes reachable from the</span></div>\n<div class=\"line\"><a name=\"l02371\"></a><span class=\"lineno\"> 2371</span>&#160;<span class=\"comment\"># root by following a path via at most 3 edges will be shown. Nodes that lay</span></div>\n<div class=\"line\"><a name=\"l02372\"></a><span class=\"lineno\"> 2372</span>&#160;<span class=\"comment\"># further from the root node will be omitted. Note that setting this option to 1</span></div>\n<div class=\"line\"><a name=\"l02373\"></a><span class=\"lineno\"> 2373</span>&#160;<span class=\"comment\"># or 2 may greatly reduce the computation time needed for large code bases. Also</span></div>\n<div class=\"line\"><a name=\"l02374\"></a><span class=\"lineno\"> 2374</span>&#160;<span class=\"comment\"># note that the size of a graph can be further restricted by</span></div>\n<div class=\"line\"><a name=\"l02375\"></a><span class=\"lineno\"> 2375</span>&#160;<span class=\"comment\"># DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.</span></div>\n<div class=\"line\"><a name=\"l02376\"></a><span class=\"lineno\"> 2376</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 1000, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l02377\"></a><span class=\"lineno\"> 2377</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02378\"></a><span class=\"lineno\"> 2378</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02379\"></a><span class=\"lineno\"> 2379</span>&#160;<span class=\"comment\">MAX_DOT_GRAPH_DEPTH    = 1000</span></div>\n<div class=\"line\"><a name=\"l02380\"></a><span class=\"lineno\"> 2380</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02381\"></a><span class=\"lineno\"> 2381</span>&#160;<span class=\"comment\"># Set the DOT_TRANSPARENT tag to YES to generate images with a transparent</span></div>\n<div class=\"line\"><a name=\"l02382\"></a><span class=\"lineno\"> 2382</span>&#160;<span class=\"comment\"># background. This is disabled by default, because dot on Windows does not seem</span></div>\n<div class=\"line\"><a name=\"l02383\"></a><span class=\"lineno\"> 2383</span>&#160;<span class=\"comment\"># to support this out of the box.</span></div>\n<div class=\"line\"><a name=\"l02384\"></a><span class=\"lineno\"> 2384</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02385\"></a><span class=\"lineno\"> 2385</span>&#160;<span class=\"comment\"># Warning: Depending on the platform used, enabling this option may lead to</span></div>\n<div class=\"line\"><a name=\"l02386\"></a><span class=\"lineno\"> 2386</span>&#160;<span class=\"comment\"># badly anti-aliased labels on the edges of a graph (i.e. they become hard to</span></div>\n<div class=\"line\"><a name=\"l02387\"></a><span class=\"lineno\"> 2387</span>&#160;<span class=\"comment\"># read).</span></div>\n<div class=\"line\"><a name=\"l02388\"></a><span class=\"lineno\"> 2388</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02389\"></a><span class=\"lineno\"> 2389</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02390\"></a><span class=\"lineno\"> 2390</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02391\"></a><span class=\"lineno\"> 2391</span>&#160;<span class=\"comment\">DOT_TRANSPARENT        = NO</span></div>\n<div class=\"line\"><a name=\"l02392\"></a><span class=\"lineno\"> 2392</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02393\"></a><span class=\"lineno\"> 2393</span>&#160;<span class=\"comment\"># Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output</span></div>\n<div class=\"line\"><a name=\"l02394\"></a><span class=\"lineno\"> 2394</span>&#160;<span class=\"comment\"># files in one run (i.e. multiple -o and -T options on the command line). This</span></div>\n<div class=\"line\"><a name=\"l02395\"></a><span class=\"lineno\"> 2395</span>&#160;<span class=\"comment\"># makes dot run faster, but since only newer versions of dot (&gt;1.8.10) support</span></div>\n<div class=\"line\"><a name=\"l02396\"></a><span class=\"lineno\"> 2396</span>&#160;<span class=\"comment\"># this, this feature is disabled by default.</span></div>\n<div class=\"line\"><a name=\"l02397\"></a><span class=\"lineno\"> 2397</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02398\"></a><span class=\"lineno\"> 2398</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02399\"></a><span class=\"lineno\"> 2399</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02400\"></a><span class=\"lineno\"> 2400</span>&#160;<span class=\"comment\">DOT_MULTI_TARGETS      = NO</span></div>\n<div class=\"line\"><a name=\"l02401\"></a><span class=\"lineno\"> 2401</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02402\"></a><span class=\"lineno\"> 2402</span>&#160;<span class=\"comment\"># If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page</span></div>\n<div class=\"line\"><a name=\"l02403\"></a><span class=\"lineno\"> 2403</span>&#160;<span class=\"comment\"># explaining the meaning of the various boxes and arrows in the dot generated</span></div>\n<div class=\"line\"><a name=\"l02404\"></a><span class=\"lineno\"> 2404</span>&#160;<span class=\"comment\"># graphs.</span></div>\n<div class=\"line\"><a name=\"l02405\"></a><span class=\"lineno\"> 2405</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02406\"></a><span class=\"lineno\"> 2406</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02407\"></a><span class=\"lineno\"> 2407</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02408\"></a><span class=\"lineno\"> 2408</span>&#160;<span class=\"comment\">GENERATE_LEGEND        = YES</span></div>\n<div class=\"line\"><a name=\"l02409\"></a><span class=\"lineno\"> 2409</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02410\"></a><span class=\"lineno\"> 2410</span>&#160;<span class=\"comment\"># If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot</span></div>\n<div class=\"line\"><a name=\"l02411\"></a><span class=\"lineno\"> 2411</span>&#160;<span class=\"comment\"># files that are used to generate the various graphs.</span></div>\n<div class=\"line\"><a name=\"l02412\"></a><span class=\"lineno\"> 2412</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02413\"></a><span class=\"lineno\"> 2413</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02414\"></a><span class=\"lineno\"> 2414</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02415\"></a><span class=\"lineno\"> 2415</span>&#160;<span class=\"comment\">DOT_CLEANUP            = YES</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00048.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00048_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00048_source.html\">mat2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00048_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00048.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00063.html\">./ext/matrix_double2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00064.html\">./ext/matrix_double2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00082.html\">./ext/matrix_float2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00083.html\">./ext/matrix_float2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00064_html\"><div class=\"ttname\"><a href=\"a00064.html\">matrix_double2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00082_html\"><div class=\"ttname\"><a href=\"a00082.html\">matrix_float2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00063_html\"><div class=\"ttname\"><a href=\"a00063.html\">matrix_double2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">matrix_float2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00049.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00049_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00049_source.html\">mat2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00049_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00049.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00065.html\">./ext/matrix_double2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00066.html\">./ext/matrix_double2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00084.html\">./ext/matrix_float2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00085.html\">./ext/matrix_float2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00084_html\"><div class=\"ttname\"><a href=\"a00084.html\">matrix_float2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00066_html\"><div class=\"ttname\"><a href=\"a00066.html\">matrix_double2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00065_html\"><div class=\"ttname\"><a href=\"a00065.html\">matrix_double2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00085_html\"><div class=\"ttname\"><a href=\"a00085.html\">matrix_float2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00050.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00050_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00050_source.html\">mat2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00050_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00050.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00067.html\">./ext/matrix_double2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00068.html\">./ext/matrix_double2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00086.html\">./ext/matrix_float2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00087.html\">./ext/matrix_float2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">matrix_double2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00067_html\"><div class=\"ttname\"><a href=\"a00067.html\">matrix_double2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00087_html\"><div class=\"ttname\"><a href=\"a00087.html\">matrix_float2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">matrix_float2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00051.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00051_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00051_source.html\">mat3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00051_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00051.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00069.html\">./ext/matrix_double3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00070.html\">./ext/matrix_double3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00088.html\">./ext/matrix_float3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00089.html\">./ext/matrix_float3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00088_html\"><div class=\"ttname\"><a href=\"a00088.html\">matrix_float3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00070_html\"><div class=\"ttname\"><a href=\"a00070.html\">matrix_double3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00069_html\"><div class=\"ttname\"><a href=\"a00069.html\">matrix_double3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00089_html\"><div class=\"ttname\"><a href=\"a00089.html\">matrix_float3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00052.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00052_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00052_source.html\">mat3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00052_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00052.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00071.html\">./ext/matrix_double3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00072.html\">./ext/matrix_double3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00090.html\">./ext/matrix_float3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00091.html\">./ext/matrix_float3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00091_html\"><div class=\"ttname\"><a href=\"a00091.html\">matrix_float3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00090_html\"><div class=\"ttname\"><a href=\"a00090.html\">matrix_float3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00072_html\"><div class=\"ttname\"><a href=\"a00072.html\">matrix_double3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">matrix_double3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00053.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00053_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00053_source.html\">mat3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00053_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00053.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00073.html\">./ext/matrix_double3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00074.html\">./ext/matrix_double3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00092.html\">./ext/matrix_float3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00093.html\">./ext/matrix_float3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00093_html\"><div class=\"ttname\"><a href=\"a00093.html\">matrix_float3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">matrix_double3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">matrix_float3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00073_html\"><div class=\"ttname\"><a href=\"a00073.html\">matrix_double3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00054.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00054_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00054_source.html\">mat4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00054_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00054.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00075.html\">./ext/matrix_double4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00076.html\">./ext/matrix_double4x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00094.html\">./ext/matrix_float4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;./ext/matrix_float4x2_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00076_html\"><div class=\"ttname\"><a href=\"a00076.html\">matrix_double4x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00075_html\"><div class=\"ttname\"><a href=\"a00075.html\">matrix_double4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00094_html\"><div class=\"ttname\"><a href=\"a00094.html\">matrix_float4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00055.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00055_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00055_source.html\">mat4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00055_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00055.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00077.html\">./ext/matrix_double4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00078.html\">./ext/matrix_double4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00096.html\">./ext/matrix_float4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00097.html\">./ext/matrix_float4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00096_html\"><div class=\"ttname\"><a href=\"a00096.html\">matrix_float4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00078_html\"><div class=\"ttname\"><a href=\"a00078.html\">matrix_double4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00077_html\"><div class=\"ttname\"><a href=\"a00077.html\">matrix_double4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00097_html\"><div class=\"ttname\"><a href=\"a00097.html\">matrix_float4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00056.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00056_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00056_source.html\">mat4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00056_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00056.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00079.html\">./ext/matrix_double4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00080.html\">./ext/matrix_double4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00098.html\">./ext/matrix_float4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00099.html\">./ext/matrix_float4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00079_html\"><div class=\"ttname\"><a href=\"a00079.html\">matrix_double4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00099_html\"><div class=\"ttname\"><a href=\"a00099.html\">matrix_float4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">matrix_float4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">matrix_double4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00057.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00057_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad7928795124768e058f99dce270f5c8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the determinant of a squared matrix.  <a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7928795124768e058f99dce270f5c8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the inverse of a squared matrix.  <a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].  <a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a> (vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</td></tr>\n<tr class=\"memdesc:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.  <a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">More...</a><br /></td></tr>\n<tr class=\"separator:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a> (mat&lt; C, R, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the transposed matrix of x.  <a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">More...</a><br /></td></tr>\n<tr class=\"separator:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.6 Matrix Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00057_source.html\">matrix.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00057_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00057.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00184.html\">vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00185.html\">vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00186.html\">vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00048.html\">mat2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00049.html\">mat2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00050.html\">mat2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00051.html\">mat3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00052.html\">mat3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00053.html\">mat3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00054.html\">mat4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00055.html\">mat4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00056.html\">mat4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait{};</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> detail::outerProduct_trait&lt;C, R, T, Q&gt;::type <a class=\"code\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a>(vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;R, T, Q&gt; <span class=\"keyword\">const</span>&amp; r);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> mat&lt;C, R, T, Q&gt;::transpose_type <a class=\"code\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_matrix.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00371_html_gaf14569404c779fedca98d0b9b8e58c1f\"><div class=\"ttname\"><a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">glm::matrixCompMult</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; matrixCompMult(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...</div></div>\n<div class=\"ttc\" id=\"a00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">mat4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gad7928795124768e058f99dce270f5c8d\"><div class=\"ttname\"><a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">glm::determinant</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T determinant(mat&lt; C, R, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Return the determinant of a squared matrix. </div></div>\n<div class=\"ttc\" id=\"a00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">mat2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gac29fb7bae75a8e4c1b74cbbf85520e50\"><div class=\"ttname\"><a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">glm::outerProduct</a></div><div class=\"ttdeci\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type outerProduct(vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</div><div class=\"ttdoc\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...</div></div>\n<div class=\"ttc\" id=\"a00055_html\"><div class=\"ttname\"><a href=\"a00055.html\">mat4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00184_html\"><div class=\"ttname\"><a href=\"a00184.html\">vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gae679d841da8ce9dbcc6c2d454f15bc35\"><div class=\"ttname\"><a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">glm::transpose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type transpose(mat&lt; C, R, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the transposed matrix of x. </div></div>\n<div class=\"ttc\" id=\"a00049_html\"><div class=\"ttname\"><a href=\"a00049.html\">mat2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00054_html\"><div class=\"ttname\"><a href=\"a00054.html\">mat4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00052_html\"><div class=\"ttname\"><a href=\"a00052.html\">mat3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00186_html\"><div class=\"ttname\"><a href=\"a00186.html\">vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gaed509fe8129b01e4f20a6d0de5690091\"><div class=\"ttname\"><a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; inverse(mat&lt; C, R, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Return the inverse of a squared matrix. </div></div>\n<div class=\"ttc\" id=\"a00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">mat3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00051_html\"><div class=\"ttname\"><a href=\"a00051.html\">mat3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00185_html\"><div class=\"ttname\"><a href=\"a00185.html\">vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00048_html\"><div class=\"ttname\"><a href=\"a00048.html\">mat2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00058.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_access.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_access.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00058_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::col_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">column</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific column of a matrix.  <a href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a> (genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</td></tr>\n<tr class=\"memdesc:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific column to a matrix.  <a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::row_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">row</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific row of a matrix.  <a href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a> (genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</td></tr>\n<tr class=\"memdesc:gaadcc64829aadf4103477679e48c7594f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific row to a matrix.  <a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00058_source.html\">matrix_access.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00058_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_access.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_access.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00058.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_access extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::row_type <a class=\"code\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a>(</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                length_t index);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                length_t index,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typename</span> genType::row_type <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::col_type <a class=\"code\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                length_t index);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                length_t index,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"keyword\">typename</span> genType::col_type <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_access.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00293_html_gaadcc64829aadf4103477679e48c7594f\"><div class=\"ttname\"><a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">glm::row</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</div><div class=\"ttdoc\">Set a specific row to a matrix. </div></div>\n<div class=\"ttc\" id=\"a00293_html_ga9e757377523890e8b80c5843dbe4dd15\"><div class=\"ttname\"><a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">glm::column</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</div><div class=\"ttdoc\">Set a specific column to a matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00059.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_clip_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_clip_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00059_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga259520cad03b3f8bca9417920035ed01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga94218b094862d17798370242680b9030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga94218b094862d17798370242680b9030\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94218b094862d17798370242680b9030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9236c8439f21be186b79c97b588836b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa73322e152edf50cf30a6edac342a757\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga44fa38a18349450325cae2661bb115ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.  <a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">ortho</a> (T left, T right, T bottom, T top)</td></tr>\n<tr class=\"memdesc:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for projecting two-dimensional coordinates onto the screen.  <a href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.  <a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab219d28a8f178d4517448fcd6395a073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">More...</a><br /></td></tr>\n<tr class=\"separator:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">More...</a><br /></td></tr>\n<tr class=\"separator:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a left handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gad18a4495b77530317327e8d466488c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad18a4495b77530317327e8d466488c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a right handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga257b733ff883c9a065801023cf243eb2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaead4d049d1feab463b700b5641aa590e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaca32af88c2719005c02817ad1142986c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca32af88c2719005c02817ad1142986c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf497e6bca61e7c87088370b126a93758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>\n<tr class=\"memdesc:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00059_source.html\">matrix_clip_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00059_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_clip_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_clip_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00059.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_clip_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                T left, T right, T bottom, T top);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a>(</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a>(</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a>(</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a>(</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a>(</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a>(</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a>(</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a>(</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a>(</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a>(</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a>(</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a>(</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a>(</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a>(</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a>(</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a>(</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a>(</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a>(</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a>(</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a>(</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a>(</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a>(</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;                T fovy, T aspect, T near, T ep);</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_clip_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00243_html_ga9236c8439f21be186b79c97b588836b9\"><div class=\"ttname\"><a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">glm::frustumRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH_NO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga44fa38a18349450325cae2661bb115ca\"><div class=\"ttname\"><a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">glm::infinitePerspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspective(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default han...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaea11a70817af2c0801c869dea0b7a5bc\"><div class=\"ttname\"><a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">glm::orthoZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf5b3c85ff6737030a1d2214474ffa7a8\"><div class=\"ttname\"><a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">glm::tweakedInfinitePerspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)</div><div class=\"ttdoc\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga16264c9b838edeb9dd1de7a1010a13a4\"><div class=\"ttname\"><a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">glm::orthoRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga6aebe16c164bd8e52554cbe0304ef4aa\"><div class=\"ttname\"><a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">glm::perspectiveFovLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a left handed perspective projection matrix based on a field of view. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga94218b094862d17798370242680b9030\"><div class=\"ttname\"><a href=\"a00243.html#ga94218b094862d17798370242680b9030\">glm::frustumLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH_ZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga259520cad03b3f8bca9417920035ed01\"><div class=\"ttname\"><a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">glm::frustumLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH_NO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gae34ec664ad44860bf4b5ba631f0e0e90\"><div class=\"ttname\"><a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">glm::frustumNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumNO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4366ab45880c6c5f8b3e8c371ca4b136\"><div class=\"ttname\"><a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">glm::frustumRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gae4277c37f61d81da01bc9db14ea90296\"><div class=\"ttname\"><a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">glm::frustumLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga257b733ff883c9a065801023cf243eb2\"><div class=\"ttname\"><a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">glm::perspectiveFovRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH_NO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using right-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaebd02240fd36e85ad754f02ddd9a560d\"><div class=\"ttname\"><a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">glm::perspectiveFov</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFov(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view and the default handedness and defaul...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf32bf563f28379c68554a44ee60c6a85\"><div class=\"ttname\"><a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">glm::perspectiveFovRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a right handed perspective projection matrix based on a field of view. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga7654a9227f14d5382786b9fc0eb5692d\"><div class=\"ttname\"><a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">glm::frustumRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH_ZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gab37ac3eec8d61f22fceda7775e836afa\"><div class=\"ttname\"><a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">glm::orthoLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaca32af88c2719005c02817ad1142986c\"><div class=\"ttname\"><a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">glm::perspectiveLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH_ZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gad1526cb2cbe796095284e8f34b01c582\"><div class=\"ttname\"><a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">glm::perspectiveRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH_NO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa2f7a1373170bf0a4a2ddef9b0706780\"><div class=\"ttname\"><a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">glm::orthoRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaead4d049d1feab463b700b5641aa590e\"><div class=\"ttname\"><a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">glm::perspectiveLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH_NO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga6615d8a9d39432e279c4575313ecb456\"><div class=\"ttname\"><a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">glm::ortho</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; ortho(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and defaul...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gabdd37014f529e25b2fa1b3ba06c10d5c\"><div class=\"ttname\"><a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">glm::perspectiveFovLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH_ZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa73322e152edf50cf30a6edac342a757\"><div class=\"ttname\"><a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">glm::frustumZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gad122a79aadaa5529cec4ac197203db7f\"><div class=\"ttname\"><a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">glm::orthoLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gab219d28a8f178d4517448fcd6395a073\"><div class=\"ttname\"><a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">glm::orthoNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoNO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FO...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga526416735ea7c5c5cd255bf99d051bd8\"><div class=\"ttname\"><a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">glm::orthoLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf30e7bd3b1387a6776433dd5383e6633\"><div class=\"ttname\"><a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">glm::perspectiveFovNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovNO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga747c8cf99458663dd7ad1bb3a2f07787\"><div class=\"ttname\"><a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">glm::perspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspective(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga9aea2e515b08fd7dce47b7b6ec34d588\"><div class=\"ttname\"><a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">glm::orthoRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4bc69fa1d1f95128430aa3d2a712390b\"><div class=\"ttname\"><a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">glm::perspectiveFovZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga99672ffe5714ef478dab2437255fe7e1\"><div class=\"ttname\"><a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">glm::infinitePerspectiveRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspectiveRH(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf497e6bca61e7c87088370b126a93758\"><div class=\"ttname\"><a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">glm::perspectiveNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveNO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gad18a4495b77530317327e8d466488c1a\"><div class=\"ttname\"><a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">glm::perspectiveFovLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH_NO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><div class=\"ttname\"><a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">glm::perspectiveRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH_ZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa9dfba5c2322da54f72b1eb7c7c11b47\"><div class=\"ttname\"><a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">glm::perspectiveZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga3201b30f5b3ea0f933246d87bfb992a9\"><div class=\"ttname\"><a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">glm::infinitePerspectiveLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspectiveLH(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga9bd34951dc7022ac256fcb51d7f6fc2f\"><div class=\"ttname\"><a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">glm::perspectiveLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga7dcbb25331676f5b0795aced1a905c44\"><div class=\"ttname\"><a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">glm::perspectiveFovRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH_ZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using right-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga0bcd4542e0affc63a0b8c08fcb839ea9\"><div class=\"ttname\"><a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">glm::frustum</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustum(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix with default handedness, using the default handedness and default near and f...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga26b88757fbd90601b80768a7e1ad3aa1\"><div class=\"ttname\"><a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">glm::perspectiveRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00060.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00060_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00060_source.html\">matrix_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00060_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00060.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, mat&lt;C, R, U, Q&gt; <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U a);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_common.inl&quot;</span></div>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00061.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_cross_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_cross_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00061_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga20057fff91ddafa102934adb25458cde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20057fff91ddafa102934adb25458cde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00061_source.html\">matrix_cross_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00061_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_cross_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_cross_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00061.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_cross_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_cross_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00334_html_ga20057fff91ddafa102934adb25458cde\"><div class=\"ttname\"><a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">glm::matrixCross4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; matrixCross4(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Build a cross product matrix. </div></div>\n<div class=\"ttc\" id=\"a00334_html_ga5802386bb4c37b3332a3b6fd8b6960ff\"><div class=\"ttname\"><a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">glm::matrixCross3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; matrixCross3(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Build a cross product matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00062.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_decompose.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_decompose.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00062_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a> (mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</td></tr>\n<tr class=\"memdesc:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decomposes a model matrix to translations, rotation and scale components.  <a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00062_source.html\">matrix_decompose.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00062_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_decompose.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_decompose.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00062.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_decompose extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a>(</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; modelMatrix,</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; &amp; <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, qua&lt;T, Q&gt; &amp; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>, vec&lt;3, T, Q&gt; &amp; translation, vec&lt;3, T, Q&gt; &amp; skew, vec&lt;4, T, Q&gt; &amp; <a class=\"code\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_decompose.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00335_html_gac0e342656ba09a9bc97c57182ba73124\"><div class=\"ttname\"><a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">glm::decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool decompose(mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</div><div class=\"ttdoc\">Decomposes a model matrix to translations, rotation and scale components. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga747c8cf99458663dd7ad1bb3a2f07787\"><div class=\"ttname\"><a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">glm::perspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspective(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...</div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00063.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00063_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a></td></tr>\n<tr class=\"memdesc:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00063_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00063.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga21dbd1f987775d7cc7607c139531c7e6\"><div class=\"ttname\"><a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">glm::dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00020\">matrix_double2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga66b6a9af787e468a46dfe24189e87f9b\"><div class=\"ttname\"><a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">glm::dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00015\">matrix_double2x2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00064.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00064_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6205fd19be355600334edef6af0b27cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00064_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00064.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga6205fd19be355600334edef6af0b27cb\"><div class=\"ttname\"><a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">glm::mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00022\">matrix_double2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad8e2727a6e7aa68280245bb0022118e1\"><div class=\"ttname\"><a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">glm::lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00016\">matrix_double2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga51dc36a7719cb458fa5114831c20d64f\"><div class=\"ttname\"><a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">glm::mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00040\">matrix_double2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae27ac20302c2e39b6c78e7fe18e62ef7\"><div class=\"ttname\"><a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">glm::highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00046\">matrix_double2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga369b447bb1b312449b679ea1f90f3cea\"><div class=\"ttname\"><a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">glm::highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00028\">matrix_double2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac61b94f5d9775f83f321bac899322fe2\"><div class=\"ttname\"><a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">glm::lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00034\">matrix_double2x2_precision.hpp:34</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00065.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00065_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00065_source.html\">matrix_double2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00065_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00065.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga92cd388753d48e20de69ea2dbedf826a\"><div class=\"ttname\"><a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">glm::dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, defaultp &gt; dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00065_source.html#l00015\">matrix_double2x3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00066.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00066_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00066_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00066.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga741e05adf1f12d5d913f67088db1009a\"><div class=\"ttname\"><a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">glm::mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00022\">matrix_double2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad4689ec33bc2c26e10132b174b49001a\"><div class=\"ttname\"><a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">glm::highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00028\">matrix_double2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf6bf2f5bde7ad5b9c289f777b93094af\"><div class=\"ttname\"><a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">glm::lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00016\">matrix_double2x3_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00067.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00067_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaef2198807e937072803ae0ae45e1965e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00067_source.html\">matrix_double2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00067_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00067.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaef2198807e937072803ae0ae45e1965e\"><div class=\"ttname\"><a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">glm::dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, defaultp &gt; dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00067_source.html#l00015\">matrix_double2x4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00068.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00068_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga685bda24922d112786af385deb4deb43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga685bda24922d112786af385deb4deb43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga685bda24922d112786af385deb4deb43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00068_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00068.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga5ceeb46670fdc000a0701910cc5061c9\"><div class=\"ttname\"><a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">glm::highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00028\">matrix_double2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga685bda24922d112786af385deb4deb43\"><div class=\"ttname\"><a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">glm::mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00022\">matrix_double2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga97507a31ecee8609887d0f23bbde92c7\"><div class=\"ttname\"><a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">glm::lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00016\">matrix_double2x4_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00069.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00069_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">More...</a><br /></td></tr>\n<tr class=\"separator:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00069_source.html\">matrix_double3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00069_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00069.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga001e3e0638fbf8719788fc64c5b8cf39\"><div class=\"ttname\"><a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">glm::dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, defaultp &gt; dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00069_source.html#l00015\">matrix_double3x2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00070.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00070_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00070_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00070.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga2076157df85e49b8c021e03e46a376c1\"><div class=\"ttname\"><a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">glm::mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00022\">matrix_double3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1e0ea3fba496bc7c6f620d2590acb66b\"><div class=\"ttname\"><a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">glm::lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00016\">matrix_double3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3647309010a2160e9ec89bc6f7c95c35\"><div class=\"ttname\"><a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">glm::highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00028\">matrix_double3x2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00071.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00071_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a></td></tr>\n<tr class=\"memdesc:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">More...</a><br /></td></tr>\n<tr class=\"separator:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00071_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00071.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga970cb3306be25a5ca5db5a9456831228\"><div class=\"ttname\"><a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">glm::dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00015\">matrix_double3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga6f40aa56265b4b0ccad41b86802efe33\"><div class=\"ttname\"><a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">glm::dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00020\">matrix_double3x3.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00072.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00072_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gac017848a9df570f60916a21a297b1e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00072_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00072.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cab80beee64a5f8d2ae4e823983063a\"><div class=\"ttname\"><a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">glm::lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00016\">matrix_double3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac017848a9df570f60916a21a297b1e8e\"><div class=\"ttname\"><a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">glm::lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00034\">matrix_double3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga86d6d4dbad92ffdcc759773340e15a97\"><div class=\"ttname\"><a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">glm::highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00028\">matrix_double3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae367ea93c4ad8a7c101dd27b8b2b04ce\"><div class=\"ttname\"><a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">glm::highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00046\">matrix_double3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga47bd2aae4701ee2fc865674a9df3d7a6\"><div class=\"ttname\"><a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">glm::mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00040\">matrix_double3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga939fbf9c53008a8e84c7dd7cf8de29e2\"><div class=\"ttname\"><a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">glm::mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00022\">matrix_double3x3_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00073.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00073_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00073_source.html\">matrix_double3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00073_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00073.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga0412a634d183587e6188e9b11869f8f4\"><div class=\"ttname\"><a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">glm::dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, defaultp &gt; dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00073_source.html#l00015\">matrix_double3x4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00074.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00074_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00074_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00074.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga93add35d2a44c5830978b827e8c295e8\"><div class=\"ttname\"><a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">glm::lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00016\">matrix_double3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3a132bd05675c2e46556f67cf738600b\"><div class=\"ttname\"><a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">glm::mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00022\">matrix_double3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6543eeeb64f48d79a0b96484308c50f0\"><div class=\"ttname\"><a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">glm::highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00028\">matrix_double3x4_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00075.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00075_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00075_source.html\">matrix_double4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00075_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00075.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><div class=\"ttname\"><a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">glm::dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, defaultp &gt; dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00075_source.html#l00015\">matrix_double4x2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00076.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00076_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga382dc5295cead78766239a8457abfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga382dc5295cead78766239a8457abfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga382dc5295cead78766239a8457abfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">More...</a><br /></td></tr>\n<tr class=\"separator:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00076_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00076.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga382dc5295cead78766239a8457abfa98\"><div class=\"ttname\"><a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">glm::lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00016\">matrix_double4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae220fa4c5a7b13ef2ab0420340de645c\"><div class=\"ttname\"><a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">glm::mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00022\">matrix_double4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaeda1f474c668eaecc443bea85a4a4eca\"><div class=\"ttname\"><a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">glm::highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00028\">matrix_double4x2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00077.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00077_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacd18864049f8c83799babe7e596ca05b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00077_source.html\">matrix_double4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00077_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00077.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gacd18864049f8c83799babe7e596ca05b\"><div class=\"ttname\"><a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">glm::dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, defaultp &gt; dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00077_source.html#l00015\">matrix_double4x3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00078.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00078_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00078_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00078.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gacf237c2d8832fe8db2d7e187585d34bd\"><div class=\"ttname\"><a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">glm::highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00028\">matrix_double4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga43ef60e4d996db15c9c8f069a96ff763\"><div class=\"ttname\"><a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">glm::mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00022\">matrix_double4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><div class=\"ttname\"><a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">glm::lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00016\">matrix_double4x3_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00079.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00079_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a></td></tr>\n<tr class=\"memdesc:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00079_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00079.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gad5a6484b983b74f9d801cab8bc4e6a10\"><div class=\"ttname\"><a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">glm::dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00015\">matrix_double4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><div class=\"ttname\"><a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">glm::dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00020\">matrix_double4x4.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00080.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00080_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga945254f459860741138bceb74da496b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga945254f459860741138bceb74da496b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga945254f459860741138bceb74da496b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00080_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00080.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga5389b3ab32dc0d72bea00057ab6d1dd3\"><div class=\"ttname\"><a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">glm::mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00040\">matrix_double4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga708bc5b91bbfedd21debac8dcf2a64cd\"><div class=\"ttname\"><a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">glm::lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00016\">matrix_double4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf650bc667bf2a0e496b5a9182bc8d378\"><div class=\"ttname\"><a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">glm::mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00022\">matrix_double4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga118d24a3d12c034e7cccef7bf2f01b8a\"><div class=\"ttname\"><a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">glm::highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00046\">matrix_double4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5b0413198b7e9f061f7534a221c9dac9\"><div class=\"ttname\"><a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">glm::lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00034\">matrix_double4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga945254f459860741138bceb74da496b9\"><div class=\"ttname\"><a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">glm::highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00028\">matrix_double4x4_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00081.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_factorisation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_factorisation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00081_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix columns right and left.  <a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:ga85003371f0ba97380dd25e8905de1870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix rows up and down.  <a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</td></tr>\n<tr class=\"memdesc:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs QR factorisation of a matrix.  <a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">More...</a><br /></td></tr>\n<tr class=\"separator:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</td></tr>\n<tr class=\"memdesc:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs RQ factorisation of a matrix.  <a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00081_source.html\">matrix_factorisation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00081_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_factorisation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_factorisation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00081.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_factorisation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">Suggestions:</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\"> - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances.</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"comment\"> - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc...</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in, mat&lt;(C &lt; R ? C : R), R, T, Q&gt;&amp; q, mat&lt;C, (C &lt; R ? C : R), T, Q&gt;&amp; r);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in, mat&lt;(C &lt; R ? C : R), R, T, Q&gt;&amp; r, mat&lt;C, (C &lt; R ? C : R), T, Q&gt;&amp; q);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_factorisation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00336_html_ga82874e2ebe891ba35ac21d9993873758\"><div class=\"ttname\"><a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">glm::rq_decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void rq_decompose(mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</div><div class=\"ttdoc\">Performs RQ factorisation of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00336_html_gac62d7bfc8dc661e616620d70552cd566\"><div class=\"ttname\"><a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">glm::qr_decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void qr_decompose(mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</div><div class=\"ttdoc\">Performs QR factorisation of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00336_html_ga85003371f0ba97380dd25e8905de1870\"><div class=\"ttname\"><a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">glm::flipud</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; flipud(mat&lt; C, R, T, Q &gt; const &amp;in)</div><div class=\"ttdoc\">Flips the matrix rows up and down. </div></div>\n<div class=\"ttc\" id=\"a00336_html_gaf39f4e5f78eb29c1a90277d45b9b3feb\"><div class=\"ttname\"><a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">glm::fliplr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; fliplr(mat&lt; C, R, T, Q &gt; const &amp;in)</div><div class=\"ttdoc\">Flips the matrix columns right and left. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00082.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00082_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a></td></tr>\n<tr class=\"memdesc:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00082_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00082.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00083.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00083_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga4d5a0055544a516237dcdace049b143d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a></td></tr>\n<tr class=\"memdesc:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00083_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00083.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gae400c4ce1f5f3e1fa12861b2baed331a\"><div class=\"ttname\"><a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">glm::lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00016\">matrix_float2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4d5a0055544a516237dcdace049b143d\"><div class=\"ttname\"><a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">glm::highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00028\">matrix_float2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2df7cdaf9a571ce7a1b09435f502c694\"><div class=\"ttname\"><a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">glm::lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00034\">matrix_float2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2352ae43b284c9f71446674c0208c05d\"><div class=\"ttname\"><a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">glm::highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00046\">matrix_float2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cdf57d29f9448864237b2fb3e39aa1d\"><div class=\"ttname\"><a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">glm::mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00040\">matrix_float2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga745452bd9c89f5ad948203e4fb4b4ea3\"><div class=\"ttname\"><a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">glm::mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00022\">matrix_float2x2_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00084.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00084_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a></td></tr>\n<tr class=\"memdesc:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00084_source.html\">matrix_float2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00084_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00084.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00085.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00085_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga497d513d552d927537d61fa11e3701ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00085_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00085.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga497d513d552d927537d61fa11e3701ab\"><div class=\"ttname\"><a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">glm::mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, mediump &gt; mediump_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00022\">matrix_float2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga7a0e3fe41512b0494e598f5c58722f19\"><div class=\"ttname\"><a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">glm::highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; highp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00028\">matrix_float2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3eee3a74d0f1de8635d846dfb29ec4bb\"><div class=\"ttname\"><a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">glm::lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, lowp &gt; lowp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00016\">matrix_float2x3_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00086.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00086_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a></td></tr>\n<tr class=\"memdesc:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00086_source.html\">matrix_float2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00086_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00086.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00087.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00087_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">More...</a><br /></td></tr>\n<tr class=\"separator:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00087_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00087.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gade27f8324a16626cbce5d3e7da66b070\"><div class=\"ttname\"><a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">glm::lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, lowp &gt; lowp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00016\">matrix_float2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><div class=\"ttname\"><a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">glm::mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, mediump &gt; mediump_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00022\">matrix_float2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><div class=\"ttname\"><a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">glm::highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; highp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00028\">matrix_float2x4_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00088.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00088_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00088_source.html\">matrix_float3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00088_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00088.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, defaultp&gt;                      <a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00089.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00089_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00089_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00089.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gaabf6cf90fd31efe25c94965507e98390\"><div class=\"ttname\"><a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">glm::lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, lowp &gt; lowp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00016\">matrix_float3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga9e1c9ee65fef547bde793e69723e24eb\"><div class=\"ttname\"><a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">glm::mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, mediump &gt; mediump_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00022\">matrix_float3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1eda47a00027ec440eac05d63739c71b\"><div class=\"ttname\"><a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">glm::highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; highp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00028\">matrix_float3x2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00090.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00090_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a></td></tr>\n<tr class=\"memdesc:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab91887d7565059dac640e3a1921c914a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a></td></tr>\n<tr class=\"memdesc:gab91887d7565059dac640e3a1921c914a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab91887d7565059dac640e3a1921c914a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00090_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00090.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00091.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00091_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a></td></tr>\n<tr class=\"memdesc:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga5aae49834d02732942f44e61d7bce136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00091_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00091.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gabc0f2f4ad21c90b341881cf056f8650e\"><div class=\"ttname\"><a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">glm::mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00040\">matrix_float3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2ea82e12f4d7afcfce8f59894d400230\"><div class=\"ttname\"><a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">glm::highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00046\">matrix_float3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga63362cb4a63fc1be7d2e49cd5d574c84\"><div class=\"ttname\"><a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">glm::lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00034\">matrix_float3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5aae49834d02732942f44e61d7bce136\"><div class=\"ttname\"><a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">glm::mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00022\">matrix_float3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6271ebc85ed778ccc15458c3d86fc854\"><div class=\"ttname\"><a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">glm::lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00016\">matrix_float3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><div class=\"ttname\"><a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">glm::highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00028\">matrix_float3x3_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00092.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00092_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a></td></tr>\n<tr class=\"memdesc:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00092_source.html\">matrix_float3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00092_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00092.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00093.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00093_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00093_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00093.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga6454b3a26ea30f69de8e44c08a63d1b7\"><div class=\"ttname\"><a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">glm::highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; highp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00028\">matrix_float3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaa669c6675c3405f76c0b14020d1c0d61\"><div class=\"ttname\"><a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">glm::mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, mediump &gt; mediump_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00022\">matrix_float3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac5fc6786688eff02904ca5e7d6960092\"><div class=\"ttname\"><a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">glm::lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, lowp &gt; lowp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00016\">matrix_float3x4_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00094.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00094_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a></td></tr>\n<tr class=\"memdesc:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">More...</a><br /></td></tr>\n<tr class=\"separator:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00094_source.html\">matrix_float4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00094_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00094.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00095_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gad75706b70545412ba9ac27d5ee210f66\"><div class=\"ttname\"><a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">glm::mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, mediump &gt; mediump_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00022\">matrix_float4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><div class=\"ttname\"><a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">glm::lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, lowp &gt; lowp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00016\">matrix_float4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab68b66e6d2c37b804d0baf970fa4f0e5\"><div class=\"ttname\"><a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">glm::highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; highp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00028\">matrix_float4x2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00096.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00096_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a></td></tr>\n<tr class=\"memdesc:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00096_source.html\">matrix_float4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00096_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00096.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00097.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00097_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00097_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00097.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga8d5a4e65fb976e4553b84995b95ecb38\"><div class=\"ttname\"><a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">glm::highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; highp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00028\">matrix_float4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga534c3ef5c3b8fdd8656b6afc205b4b77\"><div class=\"ttname\"><a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">glm::lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, lowp &gt; lowp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00016\">matrix_float4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4a1440b5ea3cf84d5b06c79b534bd770\"><div class=\"ttname\"><a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">glm::mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, mediump &gt; mediump_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00022\">matrix_float4x3_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00098.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00098_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"memitem:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a></td></tr>\n<tr class=\"memdesc:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a></td></tr>\n<tr class=\"memdesc:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00098_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00098.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00099.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00099_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a></td></tr>\n<tr class=\"memdesc:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2dedee030500865267cd5851c00c139d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2dedee030500865267cd5851c00c139d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2dedee030500865267cd5851c00c139d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga15bca2b70917d9752231160d9da74b01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00099_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00099.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga15bca2b70917d9752231160d9da74b01\"><div class=\"ttname\"><a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">glm::mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00040\">matrix_float4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2dedee030500865267cd5851c00c139d\"><div class=\"ttname\"><a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">glm::lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00016\">matrix_float4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab8531bc3f269aa45835cd6e1972b7fc7\"><div class=\"ttname\"><a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">glm::mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00022\">matrix_float4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga58cc504be0e3b61c48bc91554a767b9f\"><div class=\"ttname\"><a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">glm::highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00046\">matrix_float4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga686468a9a815bd4db8cddae42a6d6b87\"><div class=\"ttname\"><a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">glm::lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00034\">matrix_float4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad72e13d669d039f12ae5afa23148adc1\"><div class=\"ttname\"><a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">glm::highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00028\">matrix_float4x4_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00100.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00100_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a></td></tr>\n<tr class=\"memdesc:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a></td></tr>\n<tr class=\"memdesc:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a></td></tr>\n<tr class=\"memdesc:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a></td></tr>\n<tr class=\"memdesc:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1858820fb292cae396408b2034407f72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga1858820fb292cae396408b2034407f72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1858820fb292cae396408b2034407f72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a></td></tr>\n<tr class=\"memdesc:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a></td></tr>\n<tr class=\"memdesc:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">More...</a><br /></td></tr>\n<tr class=\"separator:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a></td></tr>\n<tr class=\"memdesc:gaa1143120339b7d2d469d327662e8a172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a></td></tr>\n<tr class=\"memdesc:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a></td></tr>\n<tr class=\"memdesc:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">More...</a><br /></td></tr>\n<tr class=\"separator:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a></td></tr>\n<tr class=\"memdesc:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a></td></tr>\n<tr class=\"memdesc:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x3 matrix.  <a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x4 matrix.  <a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a></td></tr>\n<tr class=\"memdesc:ga038f68437155ffa3c2583a15264a8195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">More...</a><br /></td></tr>\n<tr class=\"separator:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a></td></tr>\n<tr class=\"memdesc:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x2 matrix.  <a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a></td></tr>\n<tr class=\"memdesc:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a></td></tr>\n<tr class=\"memdesc:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x4 matrix.  <a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a></td></tr>\n<tr class=\"memdesc:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x2 matrix.  <a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a></td></tr>\n<tr class=\"memdesc:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x3 matrix.  <a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a></td></tr>\n<tr class=\"memdesc:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a></td></tr>\n<tr class=\"memdesc:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a></td></tr>\n<tr class=\"memdesc:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">More...</a><br /></td></tr>\n<tr class=\"separator:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga664f061df00020048c3f8530329ace45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga664f061df00020048c3f8530329ace45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga664f061df00020048c3f8530329ace45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9273faab33623d944af4080befbb2c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga9273faab33623d944af4080befbb2c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9273faab33623d944af4080befbb2c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a></td></tr>\n<tr class=\"memdesc:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a></td></tr>\n<tr class=\"memdesc:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a></td></tr>\n<tr class=\"memdesc:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a></td></tr>\n<tr class=\"memdesc:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a></td></tr>\n<tr class=\"memdesc:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec3d624306bd59649f021864709d56b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a></td></tr>\n<tr class=\"memdesc:gaec3d624306bd59649f021864709d56b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec3d624306bd59649f021864709d56b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a></td></tr>\n<tr class=\"memdesc:gac092c6105827bf9ea080db38074b78eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">More...</a><br /></td></tr>\n<tr class=\"separator:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a></td></tr>\n<tr class=\"memdesc:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a></td></tr>\n<tr class=\"memdesc:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a></td></tr>\n<tr class=\"memdesc:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a></td></tr>\n<tr class=\"memdesc:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a></td></tr>\n<tr class=\"memdesc:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">More...</a><br /></td></tr>\n<tr class=\"separator:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67689a518b181a26540bc44a163525cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga67689a518b181a26540bc44a163525cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga67689a518b181a26540bc44a163525cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf348552978553630d2a00b78eb887ced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a></td></tr>\n<tr class=\"memdesc:gaf348552978553630d2a00b78eb887ced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf348552978553630d2a00b78eb887ced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2596869d154dec1180beadbb9df80501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2596869d154dec1180beadbb9df80501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2596869d154dec1180beadbb9df80501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a></td></tr>\n<tr class=\"memdesc:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a></td></tr>\n<tr class=\"memdesc:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a></td></tr>\n<tr class=\"memdesc:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a></td></tr>\n<tr class=\"memdesc:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a></td></tr>\n<tr class=\"memdesc:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga78009a1e4ca64217e46b418535e52546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a></td></tr>\n<tr class=\"memdesc:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a></td></tr>\n<tr class=\"memdesc:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a></td></tr>\n<tr class=\"memdesc:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4cae85566f900debf930c41944b64691\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a></td></tr>\n<tr class=\"memdesc:ga4cae85566f900debf930c41944b64691\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cae85566f900debf930c41944b64691\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a></td></tr>\n<tr class=\"memdesc:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a></td></tr>\n<tr class=\"memdesc:ga1870da7578d5022b973a83155d386ab3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a></td></tr>\n<tr class=\"memdesc:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a></td></tr>\n<tr class=\"memdesc:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a></td></tr>\n<tr class=\"memdesc:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a></td></tr>\n<tr class=\"memdesc:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x4 matrix.  <a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a></td></tr>\n<tr class=\"memdesc:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a></td></tr>\n<tr class=\"memdesc:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a></td></tr>\n<tr class=\"memdesc:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a></td></tr>\n<tr class=\"memdesc:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00100_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00100.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">   49</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">   53</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">   65</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">   77</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">   81</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">   86</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">  107</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">  131</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">  136</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">  144</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">  153</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">  157</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">  161</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">  165</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">  169</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">  177</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">  181</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">  186</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">  190</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">  194</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">  198</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">  202</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">  206</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">  210</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">  214</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">  218</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">  222</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">  226</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">  230</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">  239</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">  243</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">  248</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">  252</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">  256</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">  260</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">  264</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">  272</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">  276</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">  285</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">  293</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">  302</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">  306</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">  310</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">  314</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">  318</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">  322</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">  326</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_HIGHP_INT))</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2                                                             <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3                                                             <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4                                                             <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x2                                                   <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x3                                                   <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x4                                                   <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x2                                                   <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x3                                                   <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x4                                                   <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x2                                                   <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x3                                                   <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x4                                                   <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_LOWP_INT))</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2                                                              <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3                                                              <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4                                                              <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x2                                                    <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x3                                                    <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x4                                                    <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x2                                                    <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x3                                                    <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x4                                                    <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x2                                                    <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x3                                                    <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x4                                                    <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#else //if(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">  362</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2                                                   <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3                                                   <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">  370</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4                                                   <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">  374</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x2                                                 <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">  378</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x3                                                 <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">  382</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x4                                                 <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">  386</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x2                                                 <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x3                                                 <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">  394</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x4                                                 <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">  398</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x2                                                 <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x3                                                 <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">  406</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x4                                                 <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_HIGHP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2                                                             <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3                                                             <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4                                                             <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x2                                                   <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x3                                                   <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x4                                                   <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x2                                                   <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x3                                                   <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x4                                                   <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x2                                                   <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x3                                                   <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x4                                                   <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_LOWP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2                                                              <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3                                                              <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4                                                              <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x2                                                    <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x3                                                    <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x4                                                    <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x2                                                    <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x3                                                    <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x4                                                    <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x2                                                    <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x3                                                    <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x4                                                    <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">#else //if(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">  439</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2                                                   <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3                                                   <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">  447</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4                                                   <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x2                                                 <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">  455</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x3                                                 <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">  459</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x4                                                 <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x2                                                 <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">  467</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x3                                                 <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">  471</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x4                                                 <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">  475</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x2                                                 <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">  479</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x3                                                 <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">  483</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x4                                                 <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00294_html_ga43ed5e4f475b6f4cad7cba78f29c405b\"><div class=\"ttname\"><a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">glm::imat4x4</a></div><div class=\"ttdeci\">mediump_imat4x4 imat4x4</div><div class=\"ttdoc\">Signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00406\">matrix_integer.hpp:406</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa4732a240522ad9bc28144fda2fc14ec\"><div class=\"ttname\"><a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">glm::imat2x2</a></div><div class=\"ttdeci\">mediump_imat2x2 imat2x2</div><div class=\"ttdoc\">Signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00374\">matrix_integer.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga38bc7bb6494e344185df596deeb4544c\"><div class=\"ttname\"><a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">glm::umat4</a></div><div class=\"ttdeci\">mediump_umat4 umat4</div><div class=\"ttdoc\">Unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00447\">matrix_integer.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga70fa2d05896aa83cbc8c07672a429b53\"><div class=\"ttname\"><a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">glm::umat4x2</a></div><div class=\"ttdeci\">mediump_umat4x2 umat4x2</div><div class=\"ttdoc\">Unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00475\">matrix_integer.hpp:475</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><div class=\"ttname\"><a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">glm::lowp_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, lowp &gt; lowp_umat4x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00330\">matrix_integer.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8b2d35816f7103f0f4c82dd2f27571fc\"><div class=\"ttname\"><a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">glm::mediump_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, mediump &gt; mediump_imat4x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00123\">matrix_integer.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gac092c6105827bf9ea080db38074b78eb\"><div class=\"ttname\"><a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">glm::lowp_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, lowp &gt; lowp_umat4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00293\">matrix_integer.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga91c671c3ff9706c2393e78b22fd84bcb\"><div class=\"ttname\"><a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">glm::highp_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, highp &gt; highp_imat3x2</div><div class=\"ttdoc\">High-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00061\">matrix_integer.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1f7d41c36b980774a4d2e7c1647fb4b2\"><div class=\"ttname\"><a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">glm::highp_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, highp &gt; highp_umat3x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00214\">matrix_integer.hpp:214</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7b2e9d89745f7175051284e54c81d81c\"><div class=\"ttname\"><a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">glm::lowp_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, lowp &gt; lowp_umat2x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00298\">matrix_integer.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><div class=\"ttname\"><a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">glm::umat3x3</a></div><div class=\"ttdeci\">mediump_umat3x3 umat3x3</div><div class=\"ttdoc\">Unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00467\">matrix_integer.hpp:467</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gadca0a4724b4a6f56a2355b6f6e19248b\"><div class=\"ttname\"><a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">glm::highp_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, highp &gt; highp_umat2x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00206\">matrix_integer.hpp:206</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9cd7fa637a4a6788337f45231fad9e1a\"><div class=\"ttname\"><a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">glm::umat3x2</a></div><div class=\"ttdeci\">mediump_umat3x2 umat3x2</div><div class=\"ttdoc\">Unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00463\">matrix_integer.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga33db8f27491d30906cd37c0d86b3f432\"><div class=\"ttname\"><a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">glm::lowp_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, lowp &gt; lowp_imat3x2</div><div class=\"ttdoc\">Low-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00161\">matrix_integer.hpp:161</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa1143120339b7d2d469d327662e8a172\"><div class=\"ttname\"><a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">glm::highp_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, highp &gt; highp_umat3</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00190\">matrix_integer.hpp:190</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5b10acc696759e03f6ab918f4467e94c\"><div class=\"ttname\"><a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">glm::mediump_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, mediump &gt; mediump_imat4x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00127\">matrix_integer.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga038f68437155ffa3c2583a15264a8195\"><div class=\"ttname\"><a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">glm::imat3</a></div><div class=\"ttdeci\">mediump_imat3 imat3</div><div class=\"ttdoc\">Signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00366\">matrix_integer.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><div class=\"ttname\"><a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">glm::mediump_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, mediump &gt; mediump_imat2</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00086\">matrix_integer.hpp:86</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga78009a1e4ca64217e46b418535e52546\"><div class=\"ttname\"><a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">glm::mediump_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, mediump &gt; mediump_umat3x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00268\">matrix_integer.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf65677e53ac8e31a107399340d5e2451\"><div class=\"ttname\"><a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">glm::lowp_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, lowp &gt; lowp_imat4x4</div><div class=\"ttdoc\">Low-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00181\">matrix_integer.hpp:181</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga05a970fd4366dad6c8a0be676b1eae5b\"><div class=\"ttname\"><a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">glm::highp_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, highp &gt; highp_imat2x4</div><div class=\"ttdoc\">High-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00057\">matrix_integer.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1870da7578d5022b973a83155d386ab3\"><div class=\"ttname\"><a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">glm::umat2x3</a></div><div class=\"ttdeci\">mediump_umat2x3 umat2x3</div><div class=\"ttdoc\">Unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00455\">matrix_integer.hpp:455</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8f40483a3ae634ead8ad22272c543a33\"><div class=\"ttname\"><a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">glm::lowp_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, lowp &gt; lowp_imat4x3</div><div class=\"ttdoc\">Low-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00177\">matrix_integer.hpp:177</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf1145f72bcdd590f5808c4bc170c2924\"><div class=\"ttname\"><a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">glm::lowp_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, lowp &gt; lowp_umat3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00289\">matrix_integer.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa9428fc8430dc552aad920653f822ef3\"><div class=\"ttname\"><a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">glm::mediump_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, mediump &gt; mediump_umat4x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00280\">matrix_integer.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaadc28bfdc8ebca81ae85121b11994970\"><div class=\"ttname\"><a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">glm::mediump_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, mediump &gt; mediump_umat3x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00260\">matrix_integer.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae1317ddca16d01e119a40b7f0ee85f95\"><div class=\"ttname\"><a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">glm::mediump_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, mediump &gt; mediump_umat2x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00256\">matrix_integer.hpp:256</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga2c783ee6f8f040ab37df2f70392c8b44\"><div class=\"ttname\"><a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">glm::highp_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; highp_imat4x4</div><div class=\"ttdoc\">High-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00081\">matrix_integer.hpp:81</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8bb45fec4bd77bd81b4ae7eb961a270d\"><div class=\"ttname\"><a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">glm::lowp_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, lowp &gt; lowp_umat2x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00306\">matrix_integer.hpp:306</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga705ee0bf49d6c3de4404ce2481bf0df5\"><div class=\"ttname\"><a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">glm::imat4x3</a></div><div class=\"ttdeci\">mediump_imat4x3 imat4x3</div><div class=\"ttdoc\">Signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00402\">matrix_integer.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga48f2fc38d3f7fab3cfbc961278ced53d\"><div class=\"ttname\"><a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">glm::mediump_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, mediump &gt; mediump_umat3x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00264\">matrix_integer.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8499cc3b016003f835314c1c756e9db9\"><div class=\"ttname\"><a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">glm::highp_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; highp_imat2</div><div class=\"ttdoc\">High-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00037\">matrix_integer.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4cae85566f900debf930c41944b64691\"><div class=\"ttname\"><a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">glm::umat2</a></div><div class=\"ttdeci\">mediump_umat2 umat2</div><div class=\"ttdoc\">Unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00439\">matrix_integer.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaec3d624306bd59649f021864709d56b5\"><div class=\"ttname\"><a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">glm::lowp_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, lowp &gt; lowp_umat3x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00318\">matrix_integer.hpp:318</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf35aefd81cc13718f6b059623f7425fa\"><div class=\"ttname\"><a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">glm::mediump_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, mediump &gt; mediump_umat4x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00272\">matrix_integer.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><div class=\"ttname\"><a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">glm::imat4x2</a></div><div class=\"ttdeci\">mediump_imat4x2 imat4x2</div><div class=\"ttdoc\">Signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00398\">matrix_integer.hpp:398</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga74362470ba99843ac70aee5ac38cc674\"><div class=\"ttname\"><a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">glm::mediump_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, mediump &gt; mediump_imat2x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00103\">matrix_integer.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga43041378b3410ea951b7de0dfd2bc7ee\"><div class=\"ttname\"><a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">glm::mediump_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, mediump &gt; mediump_umat2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00235\">matrix_integer.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaabe04f9948d4a213bb1c20137de03e01\"><div class=\"ttname\"><a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">glm::imat2</a></div><div class=\"ttdeci\">mediump_imat2 imat2</div><div class=\"ttdoc\">Signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00362\">matrix_integer.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4e1bed14fbc7f4b376aaed064f89f0fb\"><div class=\"ttname\"><a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">glm::mediump_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, mediump &gt; mediump_umat4x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00276\">matrix_integer.hpp:276</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6c63bdc736efd3466e0730de0251cb71\"><div class=\"ttname\"><a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">glm::mediump_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, mediump &gt; mediump_imat3</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00090\">matrix_integer.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga42cbce64c4c1cd121b8437daa6e110de\"><div class=\"ttname\"><a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">glm::highp_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, highp &gt; highp_umat2</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00186\">matrix_integer.hpp:186</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6e9ce23496d8b08dfc302d4039694b58\"><div class=\"ttname\"><a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">glm::imat3x4</a></div><div class=\"ttdeci\">mediump_imat3x4 imat3x4</div><div class=\"ttdoc\">Signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00394\">matrix_integer.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga844a5da2e7fc03fc7cccc7f1b70809c4\"><div class=\"ttname\"><a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">glm::highp_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, highp &gt; highp_umat3x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00210\">matrix_integer.hpp:210</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa389e2d1c3b10941cae870bc0aeba5b3\"><div class=\"ttname\"><a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">glm::highp_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; highp_imat2x2</div><div class=\"ttdoc\">High-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00049\">matrix_integer.hpp:49</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga25ee15c323924f2d0fe9896d329e5086\"><div class=\"ttname\"><a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">glm::highp_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, highp &gt; highp_umat3x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00218\">matrix_integer.hpp:218</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gad99cc2aad8fc57f068cfa7719dbbea12\"><div class=\"ttname\"><a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">glm::mediump_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, mediump &gt; mediump_imat3x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00115\">matrix_integer.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6a56cbb769aed334c95241664415f9ba\"><div class=\"ttname\"><a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">glm::highp_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, highp &gt; highp_umat4x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00230\">matrix_integer.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9d8faafdca42583d67e792dd038fc668\"><div class=\"ttname\"><a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">glm::imat2x4</a></div><div class=\"ttdeci\">mediump_imat2x4 imat2x4</div><div class=\"ttdoc\">Signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00382\">matrix_integer.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga57936a3998e992370e59a223e0ee4fd4\"><div class=\"ttname\"><a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">glm::umat2x4</a></div><div class=\"ttdeci\">mediump_umat2x4 umat2x4</div><div class=\"ttdoc\">Unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00459\">matrix_integer.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8da25cd380ba30fc5b68a4687deb3e09\"><div class=\"ttname\"><a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">glm::mediump_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, mediump &gt; mediump_imat2x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00107\">matrix_integer.hpp:107</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa0bff0be804142bb16d441aec0a7962e\"><div class=\"ttname\"><a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">glm::lowp_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, lowp &gt; lowp_imat2</div><div class=\"ttdoc\">Low-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00136\">matrix_integer.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga26ec1a2ba08a1488f5f05336858a0f09\"><div class=\"ttname\"><a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">glm::lowp_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, lowp &gt; lowp_imat4x2</div><div class=\"ttdoc\">Low-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00173\">matrix_integer.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga09ab33a2636f5f43f7fae29cfbc20fff\"><div class=\"ttname\"><a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">glm::lowp_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, lowp &gt; lowp_umat4x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00326\">matrix_integer.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga96b0d26a33b81bb6a60ca0f39682f7eb\"><div class=\"ttname\"><a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">glm::imat4</a></div><div class=\"ttdeci\">mediump_imat4 imat4</div><div class=\"ttdoc\">Signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00370\">matrix_integer.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7b33bbe4f12c060892bd3cc8d4cd737f\"><div class=\"ttname\"><a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">glm::imat3x2</a></div><div class=\"ttdeci\">mediump_imat3x2 imat3x2</div><div class=\"ttdoc\">Signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00386\">matrix_integer.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3072f90fd86f17a862e21589fbb14c0f\"><div class=\"ttname\"><a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">glm::lowp_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, lowp &gt; lowp_umat2x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00302\">matrix_integer.hpp:302</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gac0b4e42d648fb3eaf4bb88da82ecc809\"><div class=\"ttname\"><a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">glm::mediump_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, mediump &gt; mediump_imat3x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00111\">matrix_integer.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf72e6d399c42985db6872c50f53d7eb8\"><div class=\"ttname\"><a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">glm::umat4x4</a></div><div class=\"ttdeci\">mediump_umat4x4 umat4x4</div><div class=\"ttdoc\">Unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00483\">matrix_integer.hpp:483</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6be0b80ae74bb309bc5b964d93d68fc5\"><div class=\"ttname\"><a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">glm::highp_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, highp &gt; highp_imat4x3</div><div class=\"ttdoc\">High-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00077\">matrix_integer.hpp:77</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga87581417945411f75cb31dd6ca1dba98\"><div class=\"ttname\"><a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">glm::umat4x3</a></div><div class=\"ttdeci\">mediump_umat4x3 umat4x3</div><div class=\"ttdoc\">Unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00479\">matrix_integer.hpp:479</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7716c2b210d141846f1ac4e774adef5e\"><div class=\"ttname\"><a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">glm::lowp_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, lowp &gt; lowp_umat4x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00322\">matrix_integer.hpp:322</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><div class=\"ttname\"><a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">glm::lowp_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, lowp &gt; lowp_umat3x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00310\">matrix_integer.hpp:310</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5337b7bc95f9cbac08a0c00b3f936b28\"><div class=\"ttname\"><a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">glm::highp_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, highp &gt; highp_umat2x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00198\">matrix_integer.hpp:198</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga664f061df00020048c3f8530329ace45\"><div class=\"ttname\"><a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">glm::lowp_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, lowp &gt; lowp_imat3x3</div><div class=\"ttdoc\">Low-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00165\">matrix_integer.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga07d7b7173e2a6f843ff5f1c615a95b41\"><div class=\"ttname\"><a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">glm::highp_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; highp_imat3x3</div><div class=\"ttdoc\">High-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00065\">matrix_integer.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaee2c1f13b41f4c92ea5b3efe367a1306\"><div class=\"ttname\"><a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">glm::mediump_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, mediump &gt; mediump_umat2x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00252\">matrix_integer.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae69eb82ec08b0dc9bf2ead2a339ff801\"><div class=\"ttname\"><a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">glm::highp_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, highp &gt; highp_umat4x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00222\">matrix_integer.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4f660a39a395cc14f018f985e7dfbeb5\"><div class=\"ttname\"><a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">glm::lowp_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, lowp &gt; lowp_umat3x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00314\">matrix_integer.hpp:314</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><div class=\"ttname\"><a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">glm::imat2x3</a></div><div class=\"ttdeci\">mediump_imat2x3 imat2x3</div><div class=\"ttdoc\">Signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00378\">matrix_integer.hpp:378</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8c9e7a388f8e7c52f1e6857dee8afb65\"><div class=\"ttname\"><a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">glm::lowp_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, lowp &gt; lowp_imat2x3</div><div class=\"ttdoc\">Low-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00153\">matrix_integer.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf665e4e78c2cc32a54ab40325738f9c9\"><div class=\"ttname\"><a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">glm::highp_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, highp &gt; highp_umat4</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00194\">matrix_integer.hpp:194</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaca4506a3efa679eff7c006d9826291fd\"><div class=\"ttname\"><a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">glm::highp_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; highp_imat3</div><div class=\"ttdoc\">High-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00041\">matrix_integer.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1730dbe3c67801f53520b06d1aa0a34a\"><div class=\"ttname\"><a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">glm::mediump_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, mediump &gt; mediump_umat3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00239\">matrix_integer.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4b2aeb11a329940721dda9583e71f856\"><div class=\"ttname\"><a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">glm::mediump_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, mediump &gt; mediump_imat2x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00099\">matrix_integer.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaba49d890e06c9444795f5a133fbf1336\"><div class=\"ttname\"><a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">glm::highp_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, highp &gt; highp_imat2x3</div><div class=\"ttdoc\">High-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00053\">matrix_integer.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1858820fb292cae396408b2034407f72\"><div class=\"ttname\"><a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">glm::highp_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, highp &gt; highp_imat4x2</div><div class=\"ttdoc\">High-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00073\">matrix_integer.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9273faab33623d944af4080befbb2c80\"><div class=\"ttname\"><a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">glm::lowp_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, lowp &gt; lowp_imat3x4</div><div class=\"ttdoc\">Low-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00169\">matrix_integer.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5085e3ff02abbac5e537eb7b89ab63b6\"><div class=\"ttname\"><a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">glm::umat3</a></div><div class=\"ttdeci\">mediump_umat3 umat3</div><div class=\"ttdoc\">Unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00443\">matrix_integer.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga92b95b679975d408645547ab45a8dcd8\"><div class=\"ttname\"><a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">glm::lowp_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, lowp &gt; lowp_imat2x2</div><div class=\"ttdoc\">Low-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00149\">matrix_integer.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga90718c7128320b24b52f9ea70e643ad4\"><div class=\"ttname\"><a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">glm::highp_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, highp &gt; highp_umat2x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00202\">matrix_integer.hpp:202</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7cfb09b34e0fcf73eaf6512d6483ef56\"><div class=\"ttname\"><a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">glm::highp_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; highp_imat4</div><div class=\"ttdoc\">High-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00045\">matrix_integer.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><div class=\"ttname\"><a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">glm::lowp_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, lowp &gt; lowp_imat2x4</div><div class=\"ttdoc\">Low-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00157\">matrix_integer.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga67689a518b181a26540bc44a163525cd\"><div class=\"ttname\"><a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">glm::mediump_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, mediump &gt; mediump_imat3x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00119\">matrix_integer.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga2596869d154dec1180beadbb9df80501\"><div class=\"ttname\"><a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">glm::mediump_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, mediump &gt; mediump_imat4x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00131\">matrix_integer.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf348552978553630d2a00b78eb887ced\"><div class=\"ttname\"><a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">glm::mediump_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, mediump &gt; mediump_imat4</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00094\">matrix_integer.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><div class=\"ttname\"><a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">glm::imat3x3</a></div><div class=\"ttdeci\">mediump_imat3x3 imat3x3</div><div class=\"ttdoc\">Signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00390\">matrix_integer.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga69bfe668f4170379fc1f35d82b060c43\"><div class=\"ttname\"><a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">glm::lowp_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, lowp &gt; lowp_imat3</div><div class=\"ttdoc\">Low-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00140\">matrix_integer.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf2fba702d990437fc88ff3f3a76846ee\"><div class=\"ttname\"><a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">glm::lowp_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, lowp &gt; lowp_umat2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00285\">matrix_integer.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga45a8163d02c43216252056b0c120f3a5\"><div class=\"ttname\"><a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">glm::highp_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, highp &gt; highp_umat4x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00226\">matrix_integer.hpp:226</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gabf8acdd33ce8951051edbca5200898aa\"><div class=\"ttname\"><a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">glm::umat2x2</a></div><div class=\"ttdeci\">mediump_umat2x2 umat2x2</div><div class=\"ttdoc\">Unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00451\">matrix_integer.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5087c2beb26a11d9af87432e554cf9d1\"><div class=\"ttname\"><a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">glm::mediump_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, mediump &gt; mediump_umat4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00243\">matrix_integer.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gad1e77f7270cad461ca4fcb4c3ec2e98c\"><div class=\"ttname\"><a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">glm::lowp_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, lowp &gt; lowp_imat4</div><div class=\"ttdoc\">Low-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00144\">matrix_integer.hpp:144</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae7c78ff3fc4309605ab0fa186c8d48ba\"><div class=\"ttname\"><a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">glm::umat3x4</a></div><div class=\"ttdeci\">mediump_umat3x4 umat3x4</div><div class=\"ttdoc\">Unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00471\">matrix_integer.hpp:471</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga53008f580be99018a17b357b5a4ffc0d\"><div class=\"ttname\"><a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">glm::highp_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, highp &gt; highp_imat3x4</div><div class=\"ttdoc\">High-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00069\">matrix_integer.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3b209b1b751f041422137e3c065dfa98\"><div class=\"ttname\"><a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">glm::mediump_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, mediump &gt; mediump_umat2x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00248\">matrix_integer.hpp:248</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00101.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_interpolation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_interpolation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00101_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</td></tr>\n<tr class=\"memdesc:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the axis and angle of the rotation from a matrix.  <a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a> (vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</td></tr>\n<tr class=\"memdesc:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from axis and angle.  <a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</td></tr>\n<tr class=\"memdesc:gabbc1c7385a145f04b5c54228965df145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the rotation part of a matrix.  <a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</td></tr>\n<tr class=\"memdesc:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a interpolation of 4 * 4 matrixes.  <a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Ghenadii Ursachi (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'the'+'.a'+'ste'+'ro'+'th@'+'gm'+'ail'+'.c'+'om'; return false;\">the.a<span style=\"display: none;\">.nosp@m.</span>ster<span style=\"display: none;\">.nosp@m.</span>oth@g<span style=\"display: none;\">.nosp@m.</span>mail<span style=\"display: none;\">.nosp@m.</span>.com</a>)</dd></dl>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00101_source.html\">matrix_interpolation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00101_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_interpolation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_interpolation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00101.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_interpolation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; Mat, vec&lt;3, T, Q&gt; &amp; Axis, T &amp; Angle);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Axis, T <span class=\"keyword\">const</span> Angle);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; Mat);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m1, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m2, T <span class=\"keyword\">const</span> Delta);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_interpolation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00337_html_gabbc1c7385a145f04b5c54228965df145\"><div class=\"ttname\"><a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">glm::extractMatrixRotation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; extractMatrixRotation(mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</div><div class=\"ttdoc\">Extracts the rotation part of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00337_html_ga4e67863d150724b10c1ac00972dc958c\"><div class=\"ttname\"><a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">glm::interpolate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; interpolate(mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</div><div class=\"ttdoc\">Build a interpolation of 4 * 4 matrixes. </div></div>\n<div class=\"ttc\" id=\"a00337_html_gafefe32ce5a90a135287ba34fac3623bc\"><div class=\"ttname\"><a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">glm::axisAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void axisAngle(mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</div><div class=\"ttdoc\">Get the axis and angle of the rotation from a matrix. </div></div>\n<div class=\"ttc\" id=\"a00337_html_ga3a788e2f5223397df5c426413ecc2f6b\"><div class=\"ttname\"><a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">glm::axisAngleMatrix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; axisAngleMatrix(vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</div><div class=\"ttdoc\">Build a matrix from axis and angle. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00102.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_inverse.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_inverse.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00102_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast matrix inverse for affine matrix.  <a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the inverse transpose of a matrix.  <a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">More...</a><br /></td></tr>\n<tr class=\"separator:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00102_source.html\">matrix_inverse.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00102_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_inverse.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_inverse.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00102.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_inverse extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a>(genType <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a>(genType <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_inverse.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00295_html_gab213cd0e3ead5f316d583f99d6312008\"><div class=\"ttname\"><a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">glm::inverseTranspose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType inverseTranspose(genType const &amp;m)</div><div class=\"ttdoc\">Compute the inverse transpose of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00295_html_gae0fcc5fc8783291f9702272de428fa0e\"><div class=\"ttname\"><a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">glm::affineInverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType affineInverse(genType const &amp;m)</div><div class=\"ttdoc\">Fast matrix inverse for affine matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00103.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_major_storage.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_major_storage.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00103_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">colMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">colMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga86bd0656e787bb7f217607572590af27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86bd0656e787bb7f217607572590af27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">colMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">rowMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">rowMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga2ae46497493339f745754e40f438442e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae46497493339f745754e40f438442e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">rowMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00103_source.html\">matrix_major_storage.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00103_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_major_storage.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_major_storage.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00103.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_major_storage extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v4);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v4);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_major_storage.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00338_html_gac92ad1c2acdf18d3eb7be45a32f9566b\"><div class=\"ttname\"><a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">glm::rowMajor4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gaf66c75ed69ca9e87462550708c2c6726\"><div class=\"ttname\"><a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">glm::rowMajor2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><div class=\"ttname\"><a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">glm::colMajor4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_ga86bd0656e787bb7f217607572590af27\"><div class=\"ttname\"><a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">glm::colMajor3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gafc25fd44196c92b1397b127aec1281ab\"><div class=\"ttname\"><a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">glm::colMajor2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><div class=\"ttname\"><a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">glm::rowMajor3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00104.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_operation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_operation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00104_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">adjugate</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga40a38402a30860af6e508fe76211e659\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40a38402a30860af6e508fe76211e659\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">adjugate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab69f900206a430e2875a5a073851e175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69f900206a430e2875a5a073851e175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga832c805d5130d28ad76236958d15b47d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacb8969e6543ba775c6638161a37ac330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae235def5049d6740f0028433f5e13f90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae235def5049d6740f0028433f5e13f90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00104_source.html\">matrix_operation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00104_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_operation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_operation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00104.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_operation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a>(</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a>(</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a>(</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a>(</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_operation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00339_html_gae235def5049d6740f0028433f5e13f90\"><div class=\"ttname\"><a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">glm::diagonal4x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt; diagonal4x3(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga58a32a2beeb2478dae2a721368cdd4ac\"><div class=\"ttname\"><a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">glm::diagonal2x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; diagonal2x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gad7551139cff0c4208d27f0ad3437833e\"><div class=\"ttname\"><a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">glm::diagonal3x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt; diagonal3x4(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga832c805d5130d28ad76236958d15b47d\"><div class=\"ttname\"><a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">glm::diagonal3x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt; diagonal3x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gab69f900206a430e2875a5a073851e175\"><div class=\"ttname\"><a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">glm::diagonal2x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt; diagonal2x3(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga5487ff9cdbc8e04d594adef1bcb16ee0\"><div class=\"ttname\"><a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">glm::diagonal3x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; diagonal3x3(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga9aaa7d1f40391b0b5cacccb60e104ba8\"><div class=\"ttname\"><a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">glm::adjugate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build an adjugate matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga30b4dbfed60a919d66acc8a63bcdc549\"><div class=\"ttname\"><a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">glm::diagonal2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt; diagonal2x4(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gacb8969e6543ba775c6638161a37ac330\"><div class=\"ttname\"><a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">glm::diagonal4x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt; diagonal4x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga0b4cd8dea436791b072356231ee8578f\"><div class=\"ttname\"><a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">glm::diagonal4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; diagonal4x4(vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00105.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_projection.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_projection.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00105_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q, typename U &gt; </td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a> (vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define a picking region.  <a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf36e96033f456659e6705472a06b6e11\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.  <a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga05249751f48d14cb282e4979802b8111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05249751f48d14cb282e4979802b8111\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga77d157525063dec83a557186873ee080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77d157525063dec83a557186873ee080\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.  <a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gade5136413ce530f8e606124d570fba32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5136413ce530f8e606124d570fba32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00105_source.html\">matrix_projection.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00105_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_projection.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_projection.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00105.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_projection extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a>(</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a>(</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a>(</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a>(</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; delta, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_projection.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00245_html_gade5136413ce530f8e606124d570fba32\"><div class=\"ttname\"><a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">glm::unProjectZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProjectZO(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </div></div>\n<div class=\"ttc\" id=\"a00351_html_ga58384b7170801dd513de46f87c7fb00e\"><div class=\"ttname\"><a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">glm::proj</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType proj(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x on Normal. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga77d157525063dec83a557186873ee080\"><div class=\"ttname\"><a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">glm::projectZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; projectZO(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga05249751f48d14cb282e4979802b8111\"><div class=\"ttname\"><a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">glm::projectNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; projectNO(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_gaf36e96033f456659e6705472a06b6e11\"><div class=\"ttname\"><a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">glm::project</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; project(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near...</div></div>\n<div class=\"ttc\" id=\"a00245_html_gae089ba9fc150ff69c252a20e508857b5\"><div class=\"ttname\"><a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">glm::unProjectNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProjectNO(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga36641e5d60f994e01c3d8f56b10263d2\"><div class=\"ttname\"><a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">glm::unProject</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProject(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near...</div></div>\n<div class=\"ttc\" id=\"a00245_html_gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><div class=\"ttname\"><a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">glm::pickMatrix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; pickMatrix(vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Define a picking region. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00106.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_query.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_query.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00106_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an identity matrix.  <a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">isNormalized</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">isNormalized</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">isNull</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">isNull</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae14501c6b14ccda6014cc5350080103d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a null matrix.  <a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an orthonormalized matrix.  <a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00106_source.html\">matrix_query.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00106_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_query.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_query.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00106.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/vector_query.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_query extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">template</span>&lt;length_t, length_t, <span class=\"keyword\">typename</span>, qualifier&gt; <span class=\"keyword\">class </span>matType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a>(matType&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">template</span>&lt;length_t, length_t, <span class=\"keyword\">typename</span>, qualifier&gt; <span class=\"keyword\">class </span>matType&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a>(matType&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_query.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00340_html_ga4d9bb4d0465df49fedfad79adc6ce4ad\"><div class=\"ttname\"><a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">glm::isNormalized</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is a normalized matrix. </div></div>\n<div class=\"ttc\" id=\"a00340_html_gaee935d145581c82e82b154ccfd78ad91\"><div class=\"ttname\"><a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">glm::isIdentity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isIdentity(matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is an identity matrix. </div></div>\n<div class=\"ttc\" id=\"a00340_html_ga2b98bb30a9fefa7cdea5f1dcddba677b\"><div class=\"ttname\"><a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">glm::isNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is a null matrix. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00340_html_ga58f3289f74dcab653387dd78ad93ca40\"><div class=\"ttname\"><a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">glm::isOrthogonal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isOrthogonal(matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is an orthonormalized matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00107.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00107_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise equal-to comparison of two matrices.  <a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga5305af376173f1902719fa309bbae671\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5305af376173f1902719fa309bbae671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise not-equal-to comparison of two matrices.  <a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga29071147d118569344d10944b7d5c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29071147d118569344d10944b7d5c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:gaa5517341754149ffba742d230afd1f32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5517341754149ffba742d230afd1f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00107_source.html\">matrix_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00107_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00107.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00246_html_ga5305af376173f1902719fa309bbae671\"><div class=\"ttname\"><a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00246_html_gaa5517341754149ffba742d230afd1f32\"><div class=\"ttname\"><a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00108.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/matrix_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00108_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga81696f2b8d1db02ea1aff8da8f269314\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a> ()</td></tr>\n<tr class=\"memdesc:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an identity matrix. <br /></td></tr>\n<tr class=\"separator:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at view matrix based on the default handedness.  <a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left handed look at view matrix.  <a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right handed look at view matrix.  <a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gaee9e865eaa9776370996da2940873fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle.  <a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 4 * 4 matrix created from 3 scalars.  <a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00108_source.html\">ext/matrix_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00108_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/matrix_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00108.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>();</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a>(</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a>(</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00247_html_gab2c09e25b0a16d3a9d89cc85bbae41b0\"><div class=\"ttname\"><a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">glm::lookAtLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAtLH(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a left handed look at view matrix. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gacfa12c8889c754846bc20c65d9b5c701\"><div class=\"ttname\"><a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">glm::lookAtRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAtRH(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a right handed look at view matrix. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga1a4ecc4ad82652b8fb14dcb087879284\"><div class=\"ttname\"><a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a translation 4 * 4 matrix created from a vector of 3 components. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gaee9e865eaa9776370996da2940873fd4\"><div class=\"ttname\"><a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga81696f2b8d1db02ea1aff8da8f269314\"><div class=\"ttname\"><a href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">glm::identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType identity()</div><div class=\"ttdoc\">Builds an identity matrix. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gaa64aa951a0e99136bba9008d2b59c78e\"><div class=\"ttname\"><a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">glm::lookAt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAt(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a look at view matrix based on the default handedness. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00109.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/matrix_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00109_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00363.html\" title=\"Include <glm/gtx/transform2.hpp> to use the features of this extension. \">GLM_GTX_transform2</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00109_source.html\">gtc/matrix_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00109_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/matrix_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00109.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_projection.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_clip_space.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform.inl&quot;</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00110.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform_2d.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_transform_2d.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00110_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</td></tr>\n<tr class=\"memdesc:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 3 * 3 matrix created from an angle.  <a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:ga2a118ece5db1e2022112b954846012af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a118ece5db1e2022112b954846012af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Miguel Ángel Pérez Martínez</dd></dl>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00110_source.html\">matrix_transform_2d.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00110_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform_2d.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_transform_2d.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00110.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_transform_2d extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a>(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                T y);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                T x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform_2d.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gaf4573ae47c80938aa9053ef6a33755ab\"><div class=\"ttname\"><a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a translation 3 * 3 matrix created from a vector of 2 components. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gad5c84a4932a758f385a87098ce1b1660\"><div class=\"ttname\"><a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</div><div class=\"ttdoc\">Builds a rotation 3 * 3 matrix created from an angle. </div></div>\n<div class=\"ttc\" id=\"a00341_html_ga717f1833369c1ac4a40e4ac015af885e\"><div class=\"ttname\"><a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">glm::shearY</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; shearY(mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</div><div class=\"ttdoc\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gadb47d2ad2bd984b213e8ff7d9cd8154e\"><div class=\"ttname\"><a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 3 * 3 matrix created from a vector of 2 components. </div></div>\n<div class=\"ttc\" id=\"a00341_html_ga2a118ece5db1e2022112b954846012af\"><div class=\"ttname\"><a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">glm::shearX</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; shearX(mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</div><div class=\"ttdoc\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00111.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mixed_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">mixed_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00111_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab3c6048fbb67f7243b088a4fee48d020\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) <br /></td></tr>\n<tr class=\"separator:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00111_source.html\">mixed_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00111_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mixed_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mixed_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00111.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_mixed_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a>(</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;mixed_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00342_html_gab3c6048fbb67f7243b088a4fee48d020\"><div class=\"ttname\"><a href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">glm::mixedProduct</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T mixedProduct(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</div><div class=\"ttdoc\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00112.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: noise.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">noise.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00112_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Classic perlin noise.  <a href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</td></tr>\n<tr class=\"memdesc:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Periodic perlin noise.  <a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">More...</a><br /></td></tr>\n<tr class=\"separator:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga8122468c69015ff397349a7dcc638b27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simplex noise.  <a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00112_source.html\">noise.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00112_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: noise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">noise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00112.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_noise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_noise extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a>(</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; rep);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;noise.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00297_html_ga8122468c69015ff397349a7dcc638b27\"><div class=\"ttname\"><a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">glm::simplex</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T simplex(vec&lt; L, T, Q &gt; const &amp;p)</div><div class=\"ttdoc\">Simplex noise. </div></div>\n<div class=\"ttc\" id=\"a00297_html_gac270edc54c5fc52f5985a45f940bb103\"><div class=\"ttname\"><a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">glm::perlin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</div><div class=\"ttdoc\">Periodic perlin noise. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00113.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: norm.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">norm.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00113_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).  <a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm between x and y.  <a href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm of v.  <a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga41340b2ef40a9307ab0f137181565168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm between x and y.  <a href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm of v.  <a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8d1789651050adb7024917984b41c3de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d1789651050adb7024917984b41c3de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm between x and y.  <a href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">More...</a><br /></td></tr>\n<tr class=\"separator:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6968a324837a8e899396d44de23d5aae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm of v.  <a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm between x and y.  <a href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm of v.  <a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00113_source.html\">norm.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00113_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: norm.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">norm.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00113.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/component_wise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_norm extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> Depth);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> Depth);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#include &quot;norm.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00343_html_ga8d1789651050adb7024917984b41c3de\"><div class=\"ttname\"><a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">glm::length2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the squared length of x. </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga1a7491e2037ceeb37f83ce41addfc0be\"><div class=\"ttname\"><a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">glm::l1Norm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the L1 norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga85660f1b79f66c09c7b5a6f80e68c89f\"><div class=\"ttname\"><a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">glm::distance2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance2(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga6968a324837a8e899396d44de23d5aae\"><div class=\"ttname\"><a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">glm::lMaxNorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the LMax norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_gac61b6d81d796d6eb4d4183396a19ab91\"><div class=\"ttname\"><a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">glm::lxNorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</div><div class=\"ttdoc\">Returns the L norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_gae288bde8f0e41fb4ed62e65137b18cba\"><div class=\"ttname\"><a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">glm::l2Norm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the L2 norm of v. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00114.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normal.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">normal.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00114_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a> (vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</td></tr>\n<tr class=\"memdesc:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes triangle normal from triangle points.  <a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00114_source.html\">normal.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00114_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normal.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">normal.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00114.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normal extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p2, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p3);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;normal.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00344_html_gaff1cb5496925dfa7962df457772a7f35\"><div class=\"ttname\"><a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">glm::triangleNormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; triangleNormal(vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</div><div class=\"ttdoc\">Computes triangle normal from triangle points. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00115.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normalize_dot.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">normalize_dot.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00115_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00115_source.html\">normalize_dot.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00115_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normalize_dot.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">normalize_dot.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00115.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/fast_square_root.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normalize_dot extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;normalize_dot.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00345_html_gacb140a2b903115d318c8b0a2fb5a5daa\"><div class=\"ttname\"><a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">glm::normalizeDot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T normalizeDot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Normalize parameters and returns the dot product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00345_html_ga2746fb9b5bd22b06b2f7c8babba5de9e\"><div class=\"ttname\"><a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">glm::fastNormalizeDot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastNormalizeDot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Normalize parameters and returns the dot product of x and y. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00116.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: number_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">number_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00116_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga145ad477a2a3e152855511c3b52469a6\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a></td></tr>\n<tr class=\"memdesc:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac88c6a4dbfc380aa26e3adbbade36348\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a></td></tr>\n<tr class=\"memdesc:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07f8d7348eb7ae059a84c118fdfeb943\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59bfa589419b5265d01314fcecd33435\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a></td></tr>\n<tr class=\"memdesc:ga59bfa589419b5265d01314fcecd33435\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga448eeb08d0b7d8c43a8b292c981955fd\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a></td></tr>\n<tr class=\"memdesc:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5987a61b8c03d5c432a9e62f0b3efe1\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52cc069a92e126c3a8dcde93424d2ef0\"></a>\ntypedef u16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"></a>\ntypedef u32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a></td></tr>\n<tr class=\"memdesc:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga818de170e2584ab037130f2881925974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga818de170e2584ab037130f2881925974\"></a>\ntypedef u64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a></td></tr>\n<tr class=\"memdesc:ga818de170e2584ab037130f2881925974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga818de170e2584ab037130f2881925974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5853fe457f4c8a6bc09343d0e9833980\"></a>\ntypedef u8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00116_source.html\">number_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00116_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: number_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">number_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00116.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_number_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span>gtx</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>                      <a class=\"code\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a>;         </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">   39</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>                     <a class=\"code\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>                     <a class=\"code\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>                     <a class=\"code\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">   52</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a>;        </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">   53</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a>;      </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a>;        </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a>;      </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace gtx</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;number_precision.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_gac88c6a4dbfc380aa26e3adbbade36348\"><div class=\"ttname\"><a href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">glm::gtx::f32mat1x1</a></div><div class=\"ttdeci\">f32 f32mat1x1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00053\">number_precision.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga59bfa589419b5265d01314fcecd33435\"><div class=\"ttname\"><a href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">glm::gtx::f64mat1</a></div><div class=\"ttdeci\">f64 f64mat1</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00054\">number_precision.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga52cc069a92e126c3a8dcde93424d2ef0\"><div class=\"ttname\"><a href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">glm::gtx::u16vec1</a></div><div class=\"ttdeci\">u16 u16vec1</div><div class=\"ttdoc\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00039\">number_precision.hpp:39</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga145ad477a2a3e152855511c3b52469a6\"><div class=\"ttname\"><a href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">glm::gtx::f32mat1</a></div><div class=\"ttdeci\">f32 f32mat1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00052\">number_precision.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga07f8d7348eb7ae059a84c118fdfeb943\"><div class=\"ttname\"><a href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">glm::gtx::f32vec1</a></div><div class=\"ttdeci\">f32 f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00046\">number_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_gae5987a61b8c03d5c432a9e62f0b3efe1\"><div class=\"ttname\"><a href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">glm::gtx::f64vec1</a></div><div class=\"ttdeci\">f64 f64vec1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00047\">number_precision.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga448eeb08d0b7d8c43a8b292c981955fd\"><div class=\"ttname\"><a href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">glm::gtx::f64mat1x1</a></div><div class=\"ttdeci\">f64 f64mat1x1</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00055\">number_precision.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga818de170e2584ab037130f2881925974\"><div class=\"ttname\"><a href=\"a00346.html#ga818de170e2584ab037130f2881925974\">glm::gtx::u64vec1</a></div><div class=\"ttdeci\">u64 u64vec1</div><div class=\"ttdoc\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00041\">number_precision.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><div class=\"ttname\"><a href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">glm::gtx::u32vec1</a></div><div class=\"ttdeci\">u32 u32vec1</div><div class=\"ttdoc\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00040\">number_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga5853fe457f4c8a6bc09343d0e9833980\"><div class=\"ttname\"><a href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">glm::gtx::u8vec1</a></div><div class=\"ttdeci\">u8 u8vec1</div><div class=\"ttdoc\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00038\">number_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00117.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: optimum_pow.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">optimum_pow.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00117_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 2.  <a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 3.  <a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gacef0968763026e180e53e735007dbf5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 4.  <a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacef0968763026e180e53e735007dbf5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00117_source.html\">optimum_pow.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00117_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: optimum_pow.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">optimum_pow.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00117.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_optimum_pow extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span>gtx</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace gtx</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;optimum_pow.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00347_html_ga35689d03cd434d6ea819f1942d3bf82e\"><div class=\"ttname\"><a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">glm::gtx::pow3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow3(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 3. </div></div>\n<div class=\"ttc\" id=\"a00347_html_gacef0968763026e180e53e735007dbf5a\"><div class=\"ttname\"><a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">glm::gtx::pow4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow4(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 4. </div></div>\n<div class=\"ttc\" id=\"a00347_html_ga19aaff3213bf23bdec3ef124ace237e9\"><div class=\"ttname\"><a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">glm::gtx::pow2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow2(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 2. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00118.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: orthonormalize.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">orthonormalize.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00118_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">orthonormalize</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the orthonormalized matrix of m.  <a href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Orthonormalizes x according y.  <a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00118_source.html\">orthonormalize.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00118_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: orthonormalize.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">orthonormalize.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00118.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_orthonormalize extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;orthonormalize.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00348_html_gac3bc7ef498815026bc3d361ae0b7138e\"><div class=\"ttname\"><a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">glm::orthonormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Orthonormalizes x according y. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00119.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/packing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00119_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4944ad465ff950e926d49621f916c78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.  <a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.  <a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06ecb6afb902dba45419008171db9023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a> (ivec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga06ecb6afb902dba45419008171db9023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06ecb6afb902dba45419008171db9023\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a> (i16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a> (i32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a> (i8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a> (i16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a> (i8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a> (vec&lt; 3, T, Q &gt; const &amp;rgb)</td></tr>\n<tr class=\"memdesc:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename intType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into signed integer values.  <a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 16-bit integer value.  <a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">More...</a><br /></td></tr>\n<tr class=\"separator:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a> (float s)</td></tr>\n<tr class=\"memdesc:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 8-bit integer value.  <a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab997545661877d2c7362a5084d3897d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab997545661877d2c7362a5084d3897d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.  <a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab997545661877d2c7362a5084d3897d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">More...</a><br /></td></tr>\n<tr class=\"separator:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a> (uvec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a> (u16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a> (u8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename uintType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 16-bit integer value.  <a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a> (float v)</td></tr>\n<tr class=\"memdesc:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 8-bit integer value.  <a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.  <a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaec4112086d7fb133bea104a7c237de52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a> (vec&lt; L, uint16, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a> (uint16 v)</td></tr>\n<tr class=\"memdesc:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.  <a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.  <a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a> (int p)</td></tr>\n<tr class=\"memdesc:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a> (int64 p)</td></tr>\n<tr class=\"memdesc:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a> (int16 p)</td></tr>\n<tr class=\"memdesc:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a> (int64 p)</td></tr>\n<tr class=\"memdesc:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a> (int32 p)</td></tr>\n<tr class=\"memdesc:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a> (vec&lt; 4, T, Q &gt; const &amp;rgbm)</td></tr>\n<tr class=\"memdesc:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename intType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a> (vec&lt; L, intType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96dd15002370627a443c835ab03a766c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga96dd15002370627a443c835ab03a766c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.  <a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96dd15002370627a443c835ab03a766c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.  <a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.  <a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.  <a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename uintType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a> (vec&lt; L, uintType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.  <a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a single 8-bit integer to a normalized floating-point value.  <a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.  <a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga5156d3060355fe332865da2c7f78815f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.  <a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00119_source.html\">gtc/packing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00119_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/packing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00119.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_packing extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a>(<span class=\"keywordtype\">float</span> s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a>(uint16 v);</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> <a class=\"code\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> <a class=\"code\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgb);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgbm);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint16, Q&gt; <a class=\"code\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a>(vec&lt;L, uint16, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> u<span class=\"keywordtype\">int</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        GLM_FUNC_DECL vec&lt;L, uintType, Q&gt; <a class=\"code\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> u<span class=\"keywordtype\">int</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a>(vec&lt;L, uintType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">int</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        GLM_FUNC_DECL vec&lt;L, intType, Q&gt; <a class=\"code\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">int</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a>(vec&lt;L, intType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        GLM_FUNC_DECL int16 <a class=\"code\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a>(<a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> <a class=\"code\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a>(int16 p);</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <a class=\"code\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a>(<a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> <a class=\"code\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a>(int32 p);</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a>(<a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> <a class=\"code\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a>(<a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> <a class=\"code\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a>(<span class=\"keywordtype\">int</span> p);</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a>(<a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> <a class=\"code\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> p);</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <a class=\"code\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a>(<a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> <a class=\"code\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a>(<a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> <a class=\"code\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> p);</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <a class=\"code\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;<span class=\"preprocessor\">#include &quot;packing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00298_html_gad3e7e3ce521513584a53aedc5f9765c1\"><div class=\"ttname\"><a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">glm::packUnorm4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3c3c9fb53ae7823b10fa083909357590\"><div class=\"ttname\"><a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">glm::packUint2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab6bbd5be3b8e6db538ecb33a7844481c\"><div class=\"ttname\"><a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">glm::packUnorm2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2ae149c5d2473ac1e5f347bb654a242d\"><div class=\"ttname\"><a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">glm::unpackUnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p)</div><div class=\"ttdoc\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaccde055882918a3175de82f4ca8b7d8e\"><div class=\"ttname\"><a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">glm::unpackInt2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i16vec2 unpackInt2x16(int p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1cd8d2038cdd33a860801aa155a26221\"><div class=\"ttname\"><a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">glm::unpackInt4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gab173834ef14cfc23a96a959f3ff4b8dc\"><div class=\"ttname\"><a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">glm::unpackUint4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf942ff11b65e83eb5f77e68329ebc6ab\"><div class=\"ttname\"><a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">glm::unpackUint2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga30d6b2f1806315bcd6047131f547d33b\"><div class=\"ttname\"><a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">glm::unpackHalf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; unpackHalf(vec&lt; L, uint16, Q &gt; const &amp;p)</div><div class=\"ttdoc\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1f63c264e7ab63264e2b2a99fd393897\"><div class=\"ttname\"><a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">glm::packUnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><div class=\"ttname\"><a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">glm::packUnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt; packUnorm(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2b1fd1e854705b1345e98409e0a25e50\"><div class=\"ttname\"><a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">glm::unpackF2x11_1x10</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4b2fa60df3460403817d28b082ee0736\"><div class=\"ttname\"><a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">glm::packUnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm1x8(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into a 8-bit integer value. ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa7600a6c71784b637a410869d2a5adcd\"><div class=\"ttname\"><a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">glm::unpackUint2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5156d3060355fe332865da2c7f78815f\"><div class=\"ttname\"><a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">glm::unpackUnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2e50476132fe5f27f08e273d9c70d85b\"><div class=\"ttname\"><a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">glm::unpackUnorm2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga0466daf4c90f76cc64b3f105ce727295\"><div class=\"ttname\"><a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">glm::packRGBM</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; packRGBM(vec&lt; 3, T, Q &gt; const &amp;rgb)</div><div class=\"ttdoc\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaaddf9c353528fe896106f7181219c7f4\"><div class=\"ttname\"><a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">glm::unpackSnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p)</div><div class=\"ttdoc\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8a1ee625d2707c60530fb3fca2980b19\"><div class=\"ttname\"><a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">glm::packUnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts the first three components of the normalized floating-point value v into 10-bit unsig...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gab297c0bfd38433524791eb0584d8f08d\"><div class=\"ttname\"><a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">glm::unpackInt2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga7f9abdb50f9be1aa1c14912504a0d98d\"><div class=\"ttname\"><a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">glm::packUnorm2x3_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9f82737bf2a44bedff1d286b76837886\"><div class=\"ttname\"><a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">glm::packUnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm1x16(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into a 16-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1319207e30874fb4931a9ee913983ee1\"><div class=\"ttname\"><a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">glm::unpackUnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackUnorm1x8(uint8 p)</div><div class=\"ttdoc\">Convert a single 8-bit integer to a normalized floating-point value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4851ff86678aa1c7ace9d67846894285\"><div class=\"ttname\"><a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">glm::unpackSnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackSnorm1x8(uint8 p)</div><div class=\"ttdoc\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gac37dedaba24b00adb4ec6e8f92c19dbf\"><div class=\"ttname\"><a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">glm::unpackHalf1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackHalf1x16(uint16 v)</div><div class=\"ttdoc\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga52c154a9b232b62c22517a700cc0c78c\"><div class=\"ttname\"><a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">glm::unpackInt4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga83d34160a5cb7bcb5339823210fc7501\"><div class=\"ttname\"><a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">glm::unpackUnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackUnorm1x16(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8b128e89be449fc71336968a66bf6e1a\"><div class=\"ttname\"><a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">glm::unpackSnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9a05330e5490be0908d3b117d82aff56\"><div class=\"ttname\"><a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">glm::unpackI3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p)</div><div class=\"ttdoc\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gab22f8bcfdb5fc65af4701b25f143c1af\"><div class=\"ttname\"><a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">glm::packSnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packSnorm1x16(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into 16-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><div class=\"ttname\"><a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">glm::unpackF3x9_E1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><div class=\"ttname\"><a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">glm::unpackUnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; unpackUnorm(vec&lt; L, uintType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa54b5855a750d6aeb12c1c902f5939b8\"><div class=\"ttname\"><a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">glm::packSnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt; packSnorm(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into signed integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga768e0337dd6246773f14aa0a421fe9a8\"><div class=\"ttname\"><a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">glm::packUnorm1x5_1x6_1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5ff95ff5bc16f396432ab67243dbae4d\"><div class=\"ttname\"><a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">glm::unpackUnorm3x5_1x1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga7a4fbf79be9740e3c57737bc2af05e5b\"><div class=\"ttname\"><a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">glm::unpackSnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab997545661877d2c7362a5084d3897d3\"><div class=\"ttname\"><a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">glm::packSnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts the first three components of the normalized floating-point value v into 10-bit signe...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1989f093a27ae69cf9207145be48b3d7\"><div class=\"ttname\"><a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">glm::packInt4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int64 packInt4x16(i16vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab3bc08ecfc0f3339be93fb2b3b56d88a\"><div class=\"ttname\"><a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">glm::unpackUnorm1x5_1x6_1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3f648fc205467792dc6d8c59c748f8a6\"><div class=\"ttname\"><a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">glm::packF3x9_E1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const &amp;v)</div><div class=\"ttdoc\">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9a666b1c688ab54100061ed06526de6e\"><div class=\"ttname\"><a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">glm::packUnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2ceb62cca347d8ace42ee90317a3f1f9\"><div class=\"ttname\"><a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">glm::packUint4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaec4112086d7fb133bea104a7c237de52\"><div class=\"ttname\"><a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">glm::packUnorm3x5_1x1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga637cbe3913dd95c6e7b4c99c61bd611f\"><div class=\"ttname\"><a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">glm::unpackUnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga035bbbeab7ec2b28c0529757395b645b\"><div class=\"ttname\"><a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">glm::unpackUint2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5eecc9e8cbaf51ac6cf57501e670ee19\"><div class=\"ttname\"><a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">glm::packUint2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUint2x16(u16vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga358943934d21da947d5bcc88c2ab7832\"><div class=\"ttname\"><a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">glm::packSnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa864081097b86e83d8e4a4d79c382b22\"><div class=\"ttname\"><a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">glm::packUint2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><div class=\"ttname\"><a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">glm::unpackHalf4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p)</div><div class=\"ttdoc\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...</div></div>\n<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>\n<div class=\"ttc\" id=\"a00298_html_gac58ee89d0e224bb6df5e8bbb18843a2d\"><div class=\"ttname\"><a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">glm::unpackUnorm4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gafe2f7b39caf8f5ec555e1c059ec530e6\"><div class=\"ttname\"><a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">glm::packHalf4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component floating-point ...</div></div>\n<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>\n<div class=\"ttc\" id=\"a00298_html_gab0c59f1e259fca9e68adb2207a6b665e\"><div class=\"ttname\"><a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">glm::unpackInt2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<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>\n<div class=\"ttc\" id=\"a00298_html_ga6abd5a9014df3b5ce4059008d2491260\"><div class=\"ttname\"><a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">glm::unpackUnorm2x3_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4944ad465ff950e926d49621f916c78d\"><div class=\"ttname\"><a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">glm::packF2x11_1x10</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &amp;v)</div><div class=\"ttdoc\">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga48df3042a7d079767f5891a1bfd8a60a\"><div class=\"ttname\"><a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">glm::unpackU3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p)</div><div class=\"ttdoc\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga43f2093b6ff192a79058ff7834fc3528\"><div class=\"ttname\"><a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">glm::packHalf1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packHalf1x16(float v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga6d49b31e5c3f9df8e1f99ab62b999482\"><div class=\"ttname\"><a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">glm::unpackSnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; unpackSnorm(vec&lt; L, intType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5c1ec97894b05ea21a05aea4f0204a02\"><div class=\"ttname\"><a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">glm::unpackRGBM</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unpackRGBM(vec&lt; 4, T, Q &gt; const &amp;rgbm)</div><div class=\"ttdoc\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga6be3cfb2cce3702f03e91bbeb5286d7e\"><div class=\"ttname\"><a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">glm::packSnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gae3592e0795e62aaa1865b3a10496a7a1\"><div class=\"ttname\"><a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">glm::packSnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packSnorm1x8(float s)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into 8-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf6dc0e4341810a641c7ed08f10e335d1\"><div class=\"ttname\"><a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">glm::unpackUint4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga06ecb6afb902dba45419008171db9023\"><div class=\"ttname\"><a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">glm::packI3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component signed integer ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8884b1f2292414f36d59ef3be5d62914\"><div class=\"ttname\"><a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">glm::packInt2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int16 packInt2x8(i8vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gad1e4c8a9e67d86b61a6eec86703a827a\"><div class=\"ttname\"><a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">glm::packInt2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int64 packInt2x32(i32vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa0fe2f09aeb403cd66c1a062f58861ab\"><div class=\"ttname\"><a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">glm::packUint4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gada3d88d59f0f458f9c51a9fd359a4bc0\"><div class=\"ttname\"><a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">glm::packU3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3644163cf3a47bf1d4af1f4b03013a7e\"><div class=\"ttname\"><a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">glm::packInt2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int packInt2x16(i16vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2d8bbce673ebc04831c1fb05c47f5251\"><div class=\"ttname\"><a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">glm::packHalf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt; packHalf(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf2238401d5ce2aaade1a44ba19709072\"><div class=\"ttname\"><a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">glm::packInt4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int32 packInt4x8(i8vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga96dd15002370627a443c835ab03a766c\"><div class=\"ttname\"><a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">glm::unpackSnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackSnorm1x16(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00120.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">packing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00120_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a> (uvec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.  <a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.  <a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0e2d107039fe608a209497af867b85fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a> (double v)</td></tr>\n<tr class=\"memdesc:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component unsigned integer vector representation of v.  <a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a> (uint v)</td></tr>\n<tr class=\"memdesc:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga2db488646d48b7c43d3218954523fe82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.4 Floating-Point Pack and Unpack Functions</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00120_source.html\">packing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00120_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">packing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00120.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a>(<a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> <a class=\"code\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a>(<span class=\"keywordtype\">double</span> v);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a>(uint v);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_packing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00372_html_ga1f66188e5d65afeb9ffba1ad971e4007\"><div class=\"ttname\"><a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">glm::unpackUnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_ga977ab172da5494e5ac63e952afacfbe2\"><div class=\"ttname\"><a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">glm::packSnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packSnorm2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga85e8f17627516445026ab7a9c2e3531a\"><div class=\"ttname\"><a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">glm::packSnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packSnorm4x8(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga0e2d107039fe608a209497af867b85fb\"><div class=\"ttname\"><a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">glm::packUnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUnorm2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga5f4296dc5f12f0aa67ac05b8bb322483\"><div class=\"ttname\"><a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">glm::unpackDouble2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uvec2 unpackDouble2x32(double v)</div><div class=\"ttdoc\">Returns a two-component unsigned integer vector representation of v. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_gacd8f8971a3fe28418be0d0fa1f786b38\"><div class=\"ttname\"><a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">glm::unpackSnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_gaf59b52e6b28da9335322c4ae19b5d745\"><div class=\"ttname\"><a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">glm::unpackHalf2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackHalf2x16(uint v)</div><div class=\"ttdoc\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...</div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00372_html_gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><div class=\"ttname\"><a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">glm::packUnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUnorm4x8(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga2db488646d48b7c43d3218954523fe82\"><div class=\"ttname\"><a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">glm::unpackSnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00372_html_gaa916ca426b2bb0343ba17e3753e245c2\"><div class=\"ttname\"><a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">glm::packDouble2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL double packDouble2x32(uvec2 const &amp;v)</div><div class=\"ttdoc\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga20f134b07db3a3d3a38efb2617388c92\"><div class=\"ttname\"><a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">glm::packHalf2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packHalf2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a two-component floating-point v...</div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00372_html_ga7f903259150b67e9466f5f8edffcd197\"><div class=\"ttname\"><a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">glm::unpackUnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00121.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: perpendicular.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">perpendicular.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00121_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x a perpendicular axis of Normal.  <a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00351.html\" title=\"Include <glm/gtx/projection.hpp> to use the features of this extension. \">GLM_GTX_projection</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00121_source.html\">perpendicular.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00121_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: perpendicular.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">perpendicular.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00121.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/projection.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_perpendicular extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; Normal);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;perpendicular.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00349_html_ga264cfc4e180cf9b852e943b35089003c\"><div class=\"ttname\"><a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">glm::perp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType perp(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x a perpendicular axis of Normal. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00122.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: polar_coordinates.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">polar_coordinates.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00122_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a> (vec&lt; 2, T, Q &gt; const &amp;polar)</td></tr>\n<tr class=\"memdesc:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Polar to Euclidean coordinates.  <a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a> (vec&lt; 3, T, Q &gt; const &amp;euclidean)</td></tr>\n<tr class=\"memdesc:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.  <a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00122_source.html\">polar_coordinates.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00122_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: polar_coordinates.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">polar_coordinates.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00122.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_polar_coordinates extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a>);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;polar_coordinates.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00350_html_gab83ac2c0e55b684b06b6c46c28b1590d\"><div class=\"ttname\"><a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">glm::polar</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; polar(vec&lt; 3, T, Q &gt; const &amp;euclidean)</div><div class=\"ttdoc\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...</div></div>\n<div class=\"ttc\" id=\"a00350_html_ga1821d5b3324201e60a9e2823d0b5d0c8\"><div class=\"ttname\"><a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">glm::euclidean</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; euclidean(vec&lt; 2, T, Q &gt; const &amp;polar)</div><div class=\"ttdoc\">Convert Polar to Euclidean coordinates. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00123.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: projection.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">projection.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00123_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x on Normal.  <a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00123_source.html\">projection.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00123_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: projection.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">projection.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00123.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_projection extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; Normal);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;projection.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00351_html_ga58384b7170801dd513de46f87c7fb00e\"><div class=\"ttname\"><a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">glm::proj</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType proj(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x on Normal. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00124_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: qualifier.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">qualifier.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">enum</span> qualifier</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;                packed_highp, </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                packed_mediump, </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                packed_lowp, </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                        aligned_highp, </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                        aligned_mediump, </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                        aligned_lowp, <span class=\"comment\">// ///&lt; Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                        aligned = aligned_highp, </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                highp = packed_highp, </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                mediump = packed_mediump, </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                lowp = packed_lowp, </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                packed = packed_highp, </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE &amp;&amp; defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                        defaultp = aligned_highp</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                        defaultp = highp</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">typedef</span> qualifier precision;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>vec;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>mat;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>qua;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_TEMPLATE_ALIASES</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec1 = vec&lt;1, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec2 = vec&lt;2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec3 = vec&lt;3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec4 = vec&lt;4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x2 = mat&lt;2, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x3 = mat&lt;2, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x4 = mat&lt;2, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x2 = mat&lt;3, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x3 = mat&lt;3, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x4 = mat&lt;3, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x2 = mat&lt;4, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x3 = mat&lt;4, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x4 = mat&lt;4, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tquat = qua&lt;T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;glm::qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">struct </span>is_aligned</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_lowp&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_mediump&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_highp&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">bool</span> is_aligned&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">struct </span>storage</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>type {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                        T data[L];</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                } type;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_ALIGNOF</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                <span class=\"keyword\">struct </span>storage&lt;L, T, true&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><span class=\"keyword\">alignas</span>(L * sizeof(T)) type {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                                T data[L];</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                        } type;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"keyword\">struct </span>storage&lt;3, T, true&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><span class=\"keyword\">alignas</span>(4 * sizeof(T)) type {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                                T data[4];</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                        } type;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#       if GLM_ARCH &amp; GLM_ARCH_SSE2_BIT</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, float, true&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                <span class=\"keyword\">typedef</span> glm_f32vec4 type;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, int, true&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keyword\">typedef</span> glm_i32vec4 type;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, unsigned int, true&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                <span class=\"keyword\">typedef</span> glm_u32vec4 type;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, double, true&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keyword\">typedef</span> glm_f64vec2 type;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, detail::<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                <span class=\"keyword\">typedef</span> glm_i64vec2 type;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, detail::<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                <span class=\"keyword\">typedef</span> glm_u64vec2 type;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX_BIT)</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, double, true&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                <span class=\"keyword\">typedef</span> glm_f64vec4 type;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT)</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, detail::<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"keyword\">typedef</span> glm_i64vec4 type;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, detail::<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                <span class=\"keyword\">typedef</span> glm_u64vec4 type;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#       if GLM_ARCH &amp; GLM_ARCH_NEON_BIT</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, float, true&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                <span class=\"keyword\">typedef</span> glm_f32vec4 type;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, int, true&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                <span class=\"keyword\">typedef</span> glm_i32vec4 type;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, unsigned int, true&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                <span class=\"keyword\">typedef</span> glm_u32vec4 type;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keyword\">enum</span> genTypeEnum</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                GENTYPE_VEC,</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GENTYPE_MAT,</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                GENTYPE_QUAT</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">struct </span>genTypeTrait</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">struct </span>genTypeTrait&lt;mat&lt;C, R, T&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> genTypeEnum GENTYPE = GENTYPE_MAT;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType, genTypeEnum type&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">struct </span>init_gentype</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">struct </span>init_gentype&lt;genType, GENTYPE_QUAT&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>()</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                        <span class=\"keywordflow\">return</span> genType(1, 0, 0, 0);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        <span class=\"keyword\">struct </span>init_gentype&lt;genType, GENTYPE_MAT&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>()</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                        <span class=\"keywordflow\">return</span> genType(1);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00247_html_ga81696f2b8d1db02ea1aff8da8f269314\"><div class=\"ttname\"><a href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">glm::identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType identity()</div><div class=\"ttdoc\">Builds an identity matrix. </div></div>\n<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>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00125.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00125_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns euler angles, pitch as x, yaw as y, roll as z.  <a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac00012eea281800d2403f4ea8443134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac00012eea281800d2403f4ea8443134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga333ab70047fbe4132406100c292dbc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">More...</a><br /></td></tr>\n<tr class=\"separator:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7603e81477b46ddb448896909bc04928\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns pitch value of euler angles expressed in radians.  <a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7603e81477b46ddb448896909bc04928\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 3 * 3 matrix to a quaternion.  <a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 4 * 4 matrix to a quaternion.  <a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at quaternion based on the default handedness.  <a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:ga2da350c73411be3bb19441b226b81a74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left-handed look at quaternion.  <a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right-handed look at quaternion.  <a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns roll value of euler angles expressed in radians.  <a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns yaw value of euler angles expressed in radians.  <a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00125_source.html\">gtc/quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00125_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00125.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_float.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_float_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_double.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_double_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a>(</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a>(</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a>(</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00299_html_ga1113212d9bdefc2e31ad40e5bbb506f3\"><div class=\"ttname\"><a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; mat4_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8f7fa76e06c417b757ddfd438f3f677b\"><div class=\"ttname\"><a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">glm::greaterThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x > y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga388cbeba987dae7b5937f742efa49a5a\"><div class=\"ttname\"><a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">glm::greaterThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x >= y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gac00012eea281800d2403f4ea8443134d\"><div class=\"ttname\"><a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">glm::lessThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x <= y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga0cc5ad970d0b00829b139fe0fe5a1e13\"><div class=\"ttname\"><a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">glm::roll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T roll(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns roll value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gabe7fc5ec5feb41ab234d5d2b6254697f\"><div class=\"ttname\"><a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">glm::quatLookAt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAt(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a look at quaternion based on the default handedness. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga4524810f07f72e8c7bdc7764fa11cb58\"><div class=\"ttname\"><a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">glm::quat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a pure rotation 4 * 4 matrix to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga333ab70047fbe4132406100c292dbc89\"><div class=\"ttname\"><a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; mat3_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gaf4dd967dead22dd932fc7460ceecb03f\"><div class=\"ttname\"><a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">glm::eulerAngles</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; eulerAngles(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gad091a2d22c8acfebfa92bcfca1dfe9c4\"><div class=\"ttname\"><a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">glm::lessThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison result of x < y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8da38cdfdc452dafa660c2f46506bad5\"><div class=\"ttname\"><a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">glm::yaw</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T yaw(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns yaw value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga2da350c73411be3bb19441b226b81a74\"><div class=\"ttname\"><a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">glm::quatLookAtLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAtLH(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a left-handed look at quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gaf6529ac8c04a57fcc35865b5c9437cc8\"><div class=\"ttname\"><a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">glm::quatLookAtRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAtRH(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a right-handed look at quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga7603e81477b46ddb448896909bc04928\"><div class=\"ttname\"><a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">glm::pitch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T pitch(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns pitch value of euler angles expressed in radians. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00126.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00126_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">cross</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2f32f970411c44cdd38bb98960198385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a quaternion and a vector.  <a href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a vector and a quaternion.  <a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the real component of a quaternion.  <a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion normalized linear interpolation.  <a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a> (qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</td></tr>\n<tr class=\"memdesc:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an intermediate control point for squad interpolation.  <a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create an identity quaternion.  <a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga07da6ef58646442efe93b0c273d73776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns quarternion square root.  <a href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a 4 components vector by a quaternion.  <a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</td></tr>\n<tr class=\"memdesc:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the rotation between two vectors.  <a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion interpolation using the rotation short path.  <a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</td></tr>\n<tr class=\"memdesc:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a point on a path according squad equation.  <a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">toQuat</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 3 matrix to a quaternion.  <a href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 4 * 4 matrix to a quaternion.  <a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00126_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00126.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/norm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a>();</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a>(</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; s1,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; s2,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span>&amp; h);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; prev,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; curr,</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; next);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"comment\">//template&lt;typename T, qualifier Q&gt;</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"comment\">//qua&lt;T, Q&gt; sqrt(</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"comment\">//      qua&lt;T, Q&gt; const&amp; q);</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a>(</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">  113</a></span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a>(</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">  120</a></span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a>(</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">  127</a></span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a>(</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">  134</a></span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a>(</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a>(</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a>(</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a>(</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; orig,</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; dest);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00299_html_ga1113212d9bdefc2e31ad40e5bbb506f3\"><div class=\"ttname\"><a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; mat4_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gadc576cc957adc2a568cdcbc3799175bc\"><div class=\"ttname\"><a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">glm::shortMix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; shortMix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Quaternion interpolation using the rotation short path. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga5ee8332600b2aca3a77622a28d857b55\"><div class=\"ttname\"><a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">glm::quat_identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_identity()</div><div class=\"ttdoc\">Create an identity quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga1108a4ab88ca87bac321454eea7702f8\"><div class=\"ttname\"><a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a pure rotation 3 * 3 matrix to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gacc5cd5f3e78de61d141c2355417424de\"><div class=\"ttname\"><a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">glm::intermediate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; intermediate(qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</div><div class=\"ttdoc\">Returns an intermediate control point for squad interpolation. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga333ab70047fbe4132406100c292dbc89\"><div class=\"ttname\"><a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; mat3_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gadfa2c77094e8cc9adad321d938855ffb\"><div class=\"ttname\"><a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">glm::toMat4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; toMat4(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00120\">gtx/quaternion.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga321953c1b2e7befe6f5dcfddbfc6b76b\"><div class=\"ttname\"><a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">glm::extractRealComponent</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T extractRealComponent(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Extract the real component of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gaab0afabb894b28a983fb8ec610409d56\"><div class=\"ttname\"><a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">glm::toMat3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; toMat3(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00113\">gtx/quaternion.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga0b9bf3459e132ad8a18fe970669e3e35\"><div class=\"ttname\"><a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">glm::squad</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; squad(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</div><div class=\"ttdoc\">Compute a point on a path according squad equation. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga9f5f77255756e5668dfee7f0d07ed021\"><div class=\"ttname\"><a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Compute a cross product between a vector and a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga5eb36f51e1638e710451eba194dbc011\"><div class=\"ttname\"><a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">glm::toQuat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a 4 * 4 matrix to a quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00134\">gtx/quaternion.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga03e61282831cc3f52cc76f72f52ad2c5\"><div class=\"ttname\"><a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">glm::rotation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotation(vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</div><div class=\"ttdoc\">Compute the rotation between two vectors. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gafcb78dfff45fbf19a7fcb2bd03fbf196\"><div class=\"ttname\"><a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Rotates a 4 components vector by a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga264e10708d58dd0ff53b7902a2bd2561\"><div class=\"ttname\"><a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">glm::fastMix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; fastMix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Quaternion normalized linear interpolation. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga58a609b1b8ab965f5df2702e8ca4e75b\"><div class=\"ttname\"><a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">glm::length2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length2(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the squared length of x. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00127.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00127_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q conjugate.  <a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab41da854ae678e23e114b598cbca4065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">More...</a><br /></td></tr>\n<tr class=\"separator:gab41da854ae678e23e114b598cbca4065\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga45722741ea266b4e861938b365c5f362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45722741ea266b4e861938b365c5f362\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Linear interpolation of two quaternions.  <a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gae7fc3c945be366b9942b842f55da428a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00127_source.html\">quaternion_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00127_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00127.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00248_html_ga45722741ea266b4e861938b365c5f362\"><div class=\"ttname\"><a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">glm::isinf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isinf(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>\n<div class=\"ttc\" id=\"a00248_html_ga1bb55f8963616502e96dc564384d8a03\"><div class=\"ttname\"><a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">glm::isnan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isnan(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...</div></div>\n<div class=\"ttc\" id=\"a00248_html_ga10d7bda73201788ac2ab28cd8d0d409b\"><div class=\"ttname\"><a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">glm::conjugate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; conjugate(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q conjugate. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gae7fc3c945be366b9942b842f55da428a\"><div class=\"ttname\"><a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">glm::slerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Spherical linear interpolation of two quaternions. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gab41da854ae678e23e114b598cbca4065\"><div class=\"ttname\"><a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; inverse(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q inverse. </div></div>\n<div class=\"ttc\" id=\"a00248_html_ga6033dc0741051fa463a0a147ba29f293\"><div class=\"ttname\"><a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Linear interpolation of two quaternions. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gafbfe587b8da11fb89a30c3d67dd5ccc2\"><div class=\"ttname\"><a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">glm::mix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Spherical linear interpolation of two quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00128.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00128_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1181459aa5d640a3ea43861b118f3f0b\"></a>\ntypedef qua&lt; double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a></td></tr>\n<tr class=\"memdesc:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00128_source.html\">quaternion_double.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00128_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00128.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_double extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, defaultp&gt;           <a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00129.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00129_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a></td></tr>\n<tr class=\"memdesc:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a></td></tr>\n<tr class=\"memdesc:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a></td></tr>\n<tr class=\"memdesc:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00129_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00129.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_double_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, lowp&gt;               <a class=\"code\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, mediump&gt;    <a class=\"code\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, highp&gt;              <a class=\"code\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"ttc\" id=\"a00250_html_gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><div class=\"ttname\"><a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">glm::mediump_dquat</a></div><div class=\"ttdeci\">qua&lt; double, mediump &gt; mediump_dquat</div><div class=\"ttdoc\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00033\">quaternion_double_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gaf13a25f41afc03480b40fc71bd249cec\"><div class=\"ttname\"><a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">glm::highp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, highp &gt; highp_dquat</div><div class=\"ttdoc\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00038\">quaternion_double_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_ga9e6e5f42e67dd5877350ba485c191f1c\"><div class=\"ttname\"><a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">glm::lowp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, lowp &gt; lowp_dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00028\">quaternion_double_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00130.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00130_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a exponential of a quaternion.  <a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a logarithm of a quaternion.  <a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a> (qua&lt; T, Q &gt; const &amp;q, T y)</td></tr>\n<tr class=\"memdesc:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a quaternion raised to a power.  <a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the square root of a quaternion.  <a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00130_source.html\">quaternion_exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00130_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00130.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_exponential extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T y);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00256_html_gaa5f7b20e296671b16ce25a2ab7ad5473\"><div class=\"ttname\"><a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; log(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns a logarithm of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00256_html_ga4975ffcacd312a8c0bbd046a76c5607e\"><div class=\"ttname\"><a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; pow(qua&lt; T, Q &gt; const &amp;q, T y)</div><div class=\"ttdoc\">Returns a quaternion raised to a power. </div></div>\n<div class=\"ttc\" id=\"a00256_html_ga64b7b255ed7bcba616fe6b44470b022e\"><div class=\"ttname\"><a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; sqrt(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the square root of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00256_html_gaab2d37ef7265819f1d2939b9dc2c52ac\"><div class=\"ttname\"><a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; exp(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns a exponential of a quaternion. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00131.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00131_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0b441adb4509bc58d2946c2239a8942\"></a>\ntypedef qua&lt; float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a></td></tr>\n<tr class=\"memdesc:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00131_source.html\">quaternion_float.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00131_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00131.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_float extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            <a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00132.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00132_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa2fd8085774376310aeb80588e0eab6e\"></a>\ntypedef qua&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a></td></tr>\n<tr class=\"memdesc:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gade62c5316c1c11a79c34c00c189558eb\"></a>\ntypedef qua&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a></td></tr>\n<tr class=\"memdesc:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad2a59409de1bb12ccb6eb692ee7e9d8d\"></a>\ntypedef qua&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a></td></tr>\n<tr class=\"memdesc:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00132_source.html\">quaternion_float_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00132_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00132.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_float_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">   26</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                <a class=\"code\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">   29</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;             <a class=\"code\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;               <a class=\"code\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"ttc\" id=\"a00253_html_gaa2fd8085774376310aeb80588e0eab6e\"><div class=\"ttname\"><a href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">glm::highp_quat</a></div><div class=\"ttdeci\">qua&lt; float, highp &gt; highp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00032\">quaternion_float_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gad2a59409de1bb12ccb6eb692ee7e9d8d\"><div class=\"ttname\"><a href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">glm::mediump_quat</a></div><div class=\"ttdeci\">qua&lt; float, mediump &gt; mediump_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00029\">quaternion_float_precision.hpp:29</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gade62c5316c1c11a79c34c00c189558eb\"><div class=\"ttname\"><a href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">glm::lowp_quat</a></div><div class=\"ttdeci\">qua&lt; float, lowp &gt; lowp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00026\">quaternion_float_precision.hpp:26</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00133.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_geometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_geometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00133_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</td></tr>\n<tr class=\"memdesc:ga755beaa929c75751dee646cccba37e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product.  <a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...  <a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab703732449be6c7199369b3f9a91ed38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the norm of a quaternions.  <a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">More...</a><br /></td></tr>\n<tr class=\"separator:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00133_source.html\">quaternion_geometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00133_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_geometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_geometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00133.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_geometric extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_QUALIFIER qua&lt;T, Q&gt; <a class=\"code\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_geometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00254_html_ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><div class=\"ttname\"><a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">glm::dot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </div></div>\n<div class=\"ttc\" id=\"a00254_html_ga755beaa929c75751dee646cccba37e4c\"><div class=\"ttname\"><a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt; cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</div><div class=\"ttdoc\">Compute a cross product. </div></div>\n<div class=\"ttc\" id=\"a00254_html_gabf30e3263fffe8dcc6659aea76ae8927\"><div class=\"ttname\"><a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; normalize(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the normalized quaternion. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00134.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00134_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">More...</a><br /></td></tr>\n<tr class=\"separator:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00134_source.html\">quaternion_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00134_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00134.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00255_html_ga5117a44c1bf21af857cd23e44a96d313\"><div class=\"ttname\"><a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| >= epsilon. </div></div>\n<div class=\"ttc\" id=\"a00255_html_gaa001eecb91106463169a8e5ef1577b39\"><div class=\"ttname\"><a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| < epsilon. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00135.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00135_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components axis and an angle.  <a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00135_source.html\">quaternion_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00135_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00135.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00256_html_gabfc57de6d4d2e11970f54119c5ccf0f5\"><div class=\"ttname\"><a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Rotates a quaternion from a vector of 3 components axis and an angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00136.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_trigonometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_trigonometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00136_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the quaternion rotation angle.  <a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a> (T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from an angle and a normalized axis.  <a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga764254f10248b505e936e5309a88c23d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q rotation axis.  <a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga764254f10248b505e936e5309a88c23d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00136_source.html\">quaternion_trigonometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00136_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_trigonometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_trigonometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00136.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00145.html\">scalar_constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00224.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_trigonometric extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_trigonometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00224_html\"><div class=\"ttname\"><a href=\"a00224.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_relational </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga5c0095cfcb218c75a4b79d7687950036\"><div class=\"ttname\"><a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">glm::angleAxis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; angleAxis(T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Build a quaternion from an angle and a normalized axis. </div></div>\n<div class=\"ttc\" id=\"a00145_html\"><div class=\"ttname\"><a href=\"a00145.html\">scalar_constants.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_constants </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00137.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: random.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">random.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00137_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.  <a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga9dd05c36025088fae25b97c869e88517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.  <a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.  <a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a> (genType Mean, genType Deviation)</td></tr>\n<tr class=\"memdesc:ga5193a83e49e4fdc5652c084711083574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a gaussian distribution.  <a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">linearRand</a> (genType Min, genType Max)</td></tr>\n<tr class=\"memdesc:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a> (vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.  <a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> </p>\n<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>\n<dd>\ngtx_random (extended) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00137_source.html\">random.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00137_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: random.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">random.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00137.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_random extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a>(genType Min, genType Max);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a>(genType Mean, genType Deviation);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#include &quot;random.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00300_html_ga9dd05c36025088fae25b97c869e88517\"><div class=\"ttname\"><a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">glm::circularRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; circularRand(T Radius)</div><div class=\"ttdoc\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...</div></div>\n<div class=\"ttc\" id=\"a00300_html_gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><div class=\"ttname\"><a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">glm::diskRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; diskRand(T Radius)</div><div class=\"ttdoc\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga5193a83e49e4fdc5652c084711083574\"><div class=\"ttname\"><a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">glm::gaussRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation)</div><div class=\"ttdoc\">Generate random numbers in the interval [Min, Max], according a gaussian distribution. </div></div>\n<div class=\"ttc\" id=\"a00300_html_ga22f90fcaccdf001c516ca90f6428e138\"><div class=\"ttname\"><a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">glm::sphericalRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; sphericalRand(T Radius)</div><div class=\"ttdoc\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga7c53b7797f3147af68a11c767679fa3f\"><div class=\"ttname\"><a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">glm::ballRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; ballRand(T Radius)</div><div class=\"ttdoc\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga94731130c298a9ff5e5025fdee6d97a0\"><div class=\"ttname\"><a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">glm::linearRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Generate random numbers in the interval [Min, Max], according a linear distribution. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00138.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: range.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">range.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00138_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Joshua Moerman </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00138_source.html\">range.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00138_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: range.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">range.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00138.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_range extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_ptr.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#               pragma warning(disable : 4100) // unreferenced formal parameter</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">inline</span> length_t components(genType <span class=\"keyword\">const</span>&amp; m)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keywordflow\">return</span> m.length() * m[0].length();</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * begin(genType <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(v);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * end(genType <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keywordflow\">return</span> begin(v) + components(v);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type * begin(genType&amp; v)</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(v);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type * end(genType&amp; v)</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <span class=\"keywordflow\">return</span> begin(v) + components(v);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00305_html_ga1c64669e1ba1160ad9386e43dc57569a\"><div class=\"ttname\"><a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &amp;v)</div><div class=\"ttdoc\">Return the constant address to the data of the input parameter. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00139.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: raw_data.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">raw_data.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00139_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a></td></tr>\n<tr class=\"memdesc:ga3005cb0d839d546c616becfa6602c607\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for byte numbers.  <a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a></td></tr>\n<tr class=\"memdesc:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for dword numbers.  <a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a></td></tr>\n<tr class=\"memdesc:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for qword numbers.  <a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a></td></tr>\n<tr class=\"memdesc:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for word numbers.  <a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00139_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: raw_data.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">raw_data.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00139.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_raw_data extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8           <a class=\"code\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16          <a class=\"code\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">   42</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32          <a class=\"code\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint64          <a class=\"code\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &quot;raw_data.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00354_html_ga86e46fff9f80ae33893d8d697f2ca98a\"><div class=\"ttname\"><a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">glm::dword</a></div><div class=\"ttdeci\">detail::uint32 dword</div><div class=\"ttdoc\">Type for dword numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00042\">raw_data.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga3005cb0d839d546c616becfa6602c607\"><div class=\"ttname\"><a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">glm::byte</a></div><div class=\"ttdeci\">detail::uint8 byte</div><div class=\"ttdoc\">Type for byte numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00034\">raw_data.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga4021754ffb8e5ef14c75802b15657714\"><div class=\"ttname\"><a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">glm::qword</a></div><div class=\"ttdeci\">detail::uint64 qword</div><div class=\"ttdoc\">Type for qword numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00046\">raw_data.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><div class=\"ttname\"><a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">glm::word</a></div><div class=\"ttdeci\">detail::uint16 word</div><div class=\"ttdoc\">Type for word numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00038\">raw_data.hpp:38</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00140.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: reciprocal.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">reciprocal.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00140_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent function.  <a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafaca98a7100170db8841f446282debfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent hyperbolic function.  <a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">More...</a><br /></td></tr>\n<tr class=\"separator:gafaca98a7100170db8841f446282debfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant function.  <a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant hyperbolic function.  <a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant function.  <a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant hyperbolic function.  <a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent function.  <a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent hyperbolic function.  <a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant function.  <a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant hyperbolic function.  <a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a> (genType angle)</td></tr>\n<tr class=\"memdesc:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant function.  <a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant hyperbolic function.  <a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00140_source.html\">reciprocal.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00140_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: reciprocal.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">reciprocal.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00140.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_reciprocal extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#include &quot;reciprocal.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00301_html_gae4bcbebee670c5ea155f0777b3acbd84\"><div class=\"ttname\"><a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">glm::sec</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sec(genType angle)</div><div class=\"ttdoc\">Secant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga59dd0005b6474eea48af743b4f14ebbb\"><div class=\"ttname\"><a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">glm::csc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType csc(genType angle)</div><div class=\"ttdoc\">Cosecant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga6b8b770eb7198e4dea59d52e6db81442\"><div class=\"ttname\"><a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">glm::coth</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType coth(genType angle)</div><div class=\"ttdoc\">Cotangent hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga2c5b7f962c2c9ff684e6d2de48db1f10\"><div class=\"ttname\"><a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">glm::asec</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType asec(genType x)</div><div class=\"ttdoc\">Inverse secant function. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga3a7b517a95bbd3ad74da3aea87a66314\"><div class=\"ttname\"><a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">glm::cot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cot(genType angle)</div><div class=\"ttdoc\">Cotangent function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga1b4bed91476b9b915e76b4a30236d330\"><div class=\"ttname\"><a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">glm::acsc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acsc(genType x)</div><div class=\"ttdoc\">Inverse cosecant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga9a5cfd1e7170104a7b33863b1b75e5ae\"><div class=\"ttname\"><a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">glm::sech</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sech(genType angle)</div><div class=\"ttdoc\">Secant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga6d95843ff3ca6472ab399ba171d290a0\"><div class=\"ttname\"><a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">glm::csch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType csch(genType angle)</div><div class=\"ttdoc\">Cosecant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gafaca98a7100170db8841f446282debfa\"><div class=\"ttname\"><a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">glm::acoth</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acoth(genType x)</div><div class=\"ttdoc\">Inverse cotangent hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gaeadfb9c9d71093f7865b2ba2ca8d104d\"><div class=\"ttname\"><a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">glm::acot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acot(genType x)</div><div class=\"ttdoc\">Inverse cotangent function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gaec7586dccfe431f850d006f3824b8ca6\"><div class=\"ttname\"><a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">glm::asech</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType asech(genType x)</div><div class=\"ttdoc\">Inverse secant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga4b50aa5e5afc7e19ec113ab91596c576\"><div class=\"ttname\"><a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">glm::acsch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acsch(genType x)</div><div class=\"ttdoc\">Inverse cosecant hyperbolic function. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00141.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_normalized_axis.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_normalized_axis.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00141_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">rotateNormalizedAxis</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.  <a href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components normalized axis and an angle.  <a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00141_source.html\">rotate_normalized_axis.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00141_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_normalized_axis.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_normalized_axis.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00141.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_normalized_axis extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a>(</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;rotate_normalized_axis.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00355_html_ga08f9c5411437d528019a25bfc01473d1\"><div class=\"ttname\"><a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">glm::rotateNormalizedAxis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Rotates a quaternion from a vector of 3 components normalized axis and an angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00142.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_vector.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_vector.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00142_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a> (vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</td></tr>\n<tr class=\"memdesc:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a rotation matrix from a normal and a up vector.  <a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">rotate</a> (vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a two dimensional vector.  <a href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">More...</a><br /></td></tr>\n<tr class=\"separator:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">rotate</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around an axis.  <a href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around an axis.  <a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">rotateX</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the X axis.  <a href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the X axis.  <a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">rotateY</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Y axis.  <a href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Y axis.  <a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">rotateZ</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Z axis.  <a href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga923b75c6448161053768822d880702e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Z axis.  <a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga923b75c6448161053768822d880702e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns Spherical interpolation between two vectors.  <a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00142_source.html\">rotate_vector.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00142_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_vector.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_vector.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00142.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_vector extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a>(</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a>(</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a>(</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>(</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Normal,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Up);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;rotate_vector.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga923b75c6448161053768822d880702e6\"><div class=\"ttname\"><a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">glm::rotateZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the Z axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga3ce3db0867b7f8efd878ee34f95a623b\"><div class=\"ttname\"><a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">glm::rotateY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the Y axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga4333b1ea8ebf1bd52bc3801a7617398a\"><div class=\"ttname\"><a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">glm::rotateX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the X axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga8b11b18ce824174ea1a5a69ea14e2cee\"><div class=\"ttname\"><a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">glm::slerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Returns Spherical interpolation between two vectors. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1005f1267ed9c57faa3f24cf6873b961\"><div class=\"ttname\"><a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Rotate a four dimensional vector around an axis. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00143.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: round.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">round.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00143_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">ceilMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">ceilPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">More...</a><br /></td></tr>\n<tr class=\"separator:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">floorMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">floorPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">roundMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">roundPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00143_source.html\">round.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00143_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: round.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">round.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00143.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_round extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;round.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00302_html_ga258802a7d55c03c918f28cf4d241c4d0\"><div class=\"ttname\"><a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">glm::roundPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is the closet to the input value. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><div class=\"ttname\"><a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">glm::ceilMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gaf0d591a8fca8ddb9289cdeb44b989c2d\"><div class=\"ttname\"><a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">glm::floorPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00302_html_ga2f1a68332d761804c054460a612e3a4b\"><div class=\"ttname\"><a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">glm::roundMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gab53d4a97c0d3e297be5f693cdfdfe5d2\"><div class=\"ttname\"><a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">glm::ceilPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<div class=\"ttc\" id=\"a00302_html_gacdd8901448f51f0b192380e422fae3e4\"><div class=\"ttname\"><a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">glm::floorMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00144.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00144_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga36920478565cf608e93064283ce06421\">fmax</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga36920478565cf608e93064283ce06421\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 2 inputs.  <a href=\"a00258.html#ga36920478565cf608e93064283ce06421\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36920478565cf608e93064283ce06421\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">fmax</a> (T a, T b, T C)</td></tr>\n<tr class=\"memdesc:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a> (T a, T b, T C, T D)</td></tr>\n<tr class=\"memdesc:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">fmin</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 2 inputs.  <a href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">fmin</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">max</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">min</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">More...</a><br /></td></tr>\n<tr class=\"separator:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00144_source.html\">scalar_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00144_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00144.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b, T C);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b, T C, T D);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00258_html_ga0d24a9acb8178df77e4aff90cbb2010d\"><div class=\"ttname\"><a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T min(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the minimum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><div class=\"ttname\"><a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T max(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga27e260b1ff4d04c3ad4b864d26cbaf08\"><div class=\"ttname\"><a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fmax(T a, T b, T C, T D)</div><div class=\"ttdoc\">Returns the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><div class=\"ttname\"><a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fmin(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the minimum component-wise values of 4 inputs. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00145.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_constants.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_constants.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00145_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga2a1e57fc5592b69cfae84174cbfc9429\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a> ()</td></tr>\n<tr class=\"memdesc:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the epsilon constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga94bafeb2a0f23ab6450fed1f98ee4e45\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a> ()</td></tr>\n<tr class=\"memdesc:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the pi constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00145_source.html\">scalar_constants.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00145_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_constants.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_constants.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00145.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_constants extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>();</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a>();</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_constants.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00259_html_ga94bafeb2a0f23ab6450fed1f98ee4e45\"><div class=\"ttname\"><a href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">glm::pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType pi()</div><div class=\"ttdoc\">Return the pi constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00146.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_int_sized.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_int_sized.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00146_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga259fa4834387bd68627ddf37bb3ebdb9\"></a>\ntypedef detail::int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a></td></tr>\n<tr class=\"memdesc:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43d43196463bde49cb067f5c20ab8481\"></a>\ntypedef detail::int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a></td></tr>\n<tr class=\"memdesc:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaff5189f97f9e842d9636a0f240001b2e\"></a>\ntypedef detail::int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a></td></tr>\n<tr class=\"memdesc:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1b956fe1df85f3c132b21edb4e116458\"></a>\ntypedef detail::int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a></td></tr>\n<tr class=\"memdesc:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00146_source.html\">scalar_int_sized.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00146_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_int_sized.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_int_sized.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00146.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_int_sized extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>                     <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>            <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>            <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">char</span>                     <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">short</span>            <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                      <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif//</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;int8&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;int16&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">   58</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int8            <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int16           <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int32           <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int64           <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_ga1b956fe1df85f3c132b21edb4e116458\"><div class=\"ttname\"><a href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">glm::int8</a></div><div class=\"ttdeci\">detail::int8 int8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00058\">scalar_int_sized.hpp:58</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00260_html_ga43d43196463bde49cb067f5c20ab8481\"><div class=\"ttname\"><a href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">glm::int32</a></div><div class=\"ttdeci\">detail::int32 int32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00064\">scalar_int_sized.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_ga259fa4834387bd68627ddf37bb3ebdb9\"><div class=\"ttname\"><a href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">glm::int16</a></div><div class=\"ttdeci\">detail::int16 int16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00061\">scalar_int_sized.hpp:61</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00147.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00147_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a> (genIUType x, int significantBitCount)</td></tr>\n<tr class=\"memdesc:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gadf491730354aa7da67fbe23d4d688763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">More...</a><br /></td></tr>\n<tr class=\"separator:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">More...</a><br /></td></tr>\n<tr class=\"separator:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00147_source.html\">scalar_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00147_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00147.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_float.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a>(genIUType x, <span class=\"keywordtype\">int</span> significantBitCount);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00261_html_gab21902a0e7e5a8451a7ad80333618727\"><div class=\"ttname\"><a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">glm::prevPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00261_html_gada3bdd871ffe31f2d484aa668362f636\"><div class=\"ttname\"><a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">glm::prevMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00261_html_gaec593d33956a8fe43f78fccc63ddde9a\"><div class=\"ttname\"><a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">glm::isMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Return true if the &#39;Value&#39; is a multiple of &#39;Multiple&#39;. </div></div>\n<div class=\"ttc\" id=\"a00261_html_ga2777901e41ad6e1e9d0ad6cc855d1075\"><div class=\"ttname\"><a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">glm::findNSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount)</div><div class=\"ttdoc\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00261_html_gab770a3835c44c8a6fd225be4f4e6b317\"><div class=\"ttname\"><a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">glm::nextMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00261_html_gadf491730354aa7da67fbe23d4d688763\"><div class=\"ttname\"><a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">glm::isPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return true if the value is a power of two number. </div></div>\n<div class=\"ttc\" id=\"a00261_html_ga3a37c2f2fd347886c9af6a3ca3db04dc\"><div class=\"ttname\"><a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">glm::nextPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00148.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_multiplication.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_multiplication.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00287.html\">Experimental extensions</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00148_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Joshua Moerman</dd></dl>\n<p>Include &lt;<a class=\"el\" href=\"a00148.html\" title=\"Experimental extensions \">glm/gtx/scalar_multiplication.hpp</a>&gt; to use the features of this extension.</p>\n<p>Enables scalar multiplication for all types</p>\n<p>Since GLSL is very strict about types, the following (often used) combinations do not work: double * vec4 int * vec4 vec4 / int So we'll fix that! Of course \"float * vec4\" should remain the same (hence the enable_if magic) </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00148_source.html\">scalar_multiplication.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00148_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_multiplication.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_multiplication.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00148.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_scalar_multiplication extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;type_traits&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> Vec&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">using</span> return_type_scalar_multiplication = <span class=\"keyword\">typename</span> std::enable_if&lt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                !std::is_same&lt;T, float&gt;::value       <span class=\"comment\">// T may not be a float</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                &amp;&amp; std::is_arithmetic&lt;T&gt;::value, Vec <span class=\"comment\">// But it may be an int or double (no vec3 or mat3, ...)</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        &gt;::type;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#define GLM_IMPLEMENT_SCAL_MULT(Vec) \\</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">        operator*(T const&amp; s, Vec rh){ \\</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">                return rh *= static_cast&lt;float&gt;(s); \\</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">        } \\</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">         \\</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">        operator*(Vec lh, T const&amp; s){ \\</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">                return lh *= static_cast&lt;float&gt;(s); \\</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">        } \\</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">         \\</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">        operator/(Vec lh, T const&amp; s){ \\</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">                return lh *= 1.0f / s; \\</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>)</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>)</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>)</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>)</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>)</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>)</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>)</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>)</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#undef GLM_IMPLEMENT_SCAL_MULT</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;} <span class=\"comment\">// namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00149.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/scalar_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00149_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a90ebafeace352ccc14055418ebd220be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a90ebafeace352ccc14055418ebd220be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>equal</b> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:a90ebafeace352ccc14055418ebd220be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00236.html#a90ebafeace352ccc14055418ebd220be\">More...</a><br /></td></tr>\n<tr class=\"separator:a90ebafeace352ccc14055418ebd220be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>equal</b> (genType const &amp;x, genType const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two scalars in term of ULPs.  <a href=\"a00236.html#a865b9a427c42df73b8af9cd3f7f25394\">More...</a><br /></td></tr>\n<tr class=\"separator:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>notEqual</b> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00236.html#a835ecf946c74f3d68be93e70b10821e7\">More...</a><br /></td></tr>\n<tr class=\"separator:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>notEqual</b> (genType const &amp;x, genType const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two scalars in term of ULPs.  <a href=\"a00236.html#abd21e65b2e4c9d501d51536c4a6ef7cb\">More...</a><br /></td></tr>\n<tr class=\"separator:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00149_source.html\">ext/scalar_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00149_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/scalar_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00149.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00246_html_ga8504f18a7e2bf315393032c2137dad83\"><div class=\"ttname\"><a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Perform a component-wise not-equal-to comparison of two matrices. </div></div>\n<div class=\"ttc\" id=\"a00246_html_ga27e90dcb7941c9b70e295dc3f6f6369f\"><div class=\"ttname\"><a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Perform a component-wise equal-to comparison of two matrices. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00150.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/scalar_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00150_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00150_source.html\">gtx/scalar_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00150_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/scalar_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00150.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_relational.inl&quot;</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00151.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_uint_sized.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_uint_sized.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00151_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"></a>\ntypedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a></td></tr>\n<tr class=\"memdesc:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1134b580f8da4de94ca6b1de4d37975e\"></a>\ntypedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a></td></tr>\n<tr class=\"memdesc:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab630f76c26b50298187f7889104d4b9c\"></a>\ntypedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a></td></tr>\n<tr class=\"memdesc:gab630f76c26b50298187f7889104d4b9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadde6aaee8457bee49c2a92621fe22b79\"></a>\ntypedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a></td></tr>\n<tr class=\"memdesc:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00151_source.html\">scalar_uint_sized.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00151_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_uint_sized.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_uint_sized.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00151.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_uint_sized extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>            <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>           <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>           <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>           <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span>          <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>            <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;uint8&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;uint16&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">   58</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8           <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16          <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32          <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint64          <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00263_html_gadde6aaee8457bee49c2a92621fe22b79\"><div class=\"ttname\"><a href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">glm::uint8</a></div><div class=\"ttdeci\">detail::uint8 uint8</div><div class=\"ttdoc\">8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00058\">scalar_uint_sized.hpp:58</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00152.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00152_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>floatDistance</b> (float x, float y)</td></tr>\n<tr class=\"memdesc:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#ae609a2729cacccbabe966221d61e0dc4\">More...</a><br /></td></tr>\n<tr class=\"separator:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b76118ff56adfbc41a5925908b48606\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>floatDistance</b> (double x, double y)</td></tr>\n<tr class=\"memdesc:a4b76118ff56adfbc41a5925908b48606\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#a4b76118ff56adfbc41a5925908b48606\">More...</a><br /></td></tr>\n<tr class=\"separator:a4b76118ff56adfbc41a5925908b48606\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (genType x)</td></tr>\n<tr class=\"memdesc:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#a30bc0280e7cefd159867b1aa5050b94a\">More...</a><br /></td></tr>\n<tr class=\"separator:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a54eb5916c5250c8f0ad8224fb8e0d392\">More...</a><br /></td></tr>\n<tr class=\"separator:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (genType x)</td></tr>\n<tr class=\"memdesc:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#a25320ace5b3e239405077912eb4e7bf9\">More...</a><br /></td></tr>\n<tr class=\"separator:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a760b98a221f1f511edbcdf0b06c49841\">More...</a><br /></td></tr>\n<tr class=\"separator:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00152_source.html\">scalar_ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00152_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00152.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType nextFloat(genType x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType prevFloat(genType x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType nextFloat(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL genType prevFloat(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> floatDistance(<span class=\"keywordtype\">float</span> x, <span class=\"keywordtype\">float</span> y);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> floatDistance(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_ulp.inl&quot;</span></div>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00153_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: setup.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">setup.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#ifndef GLM_SETUP_INCLUDED</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &lt;cassert&gt;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MAJOR                       0</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MINOR                       9</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_PATCH                       9</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_REVISION            6</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION                                     996</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MESSAGE                     &quot;GLM: version 0.9.9.6&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#define GLM_SETUP_INCLUDED                      GLM_VERSION</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Active states</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#define GLM_DISABLE             0</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#define GLM_ENABLE              1</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Messages</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_MESSAGES)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGES GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGES GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"comment\">// Detect the platform</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../simd/platform.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// Build model</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_64</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#elif defined(__i386__) || defined(__ppc__)</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_32</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_32</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif//</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#if !defined(GLM_MODEL) &amp;&amp; GLM_COMPILER != 0</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message.&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#endif//GLM_MODEL</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// C++ Version</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX98_FLAG                     (1 &lt;&lt; 1)</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX03_FLAG                     (1 &lt;&lt; 2)</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX0X_FLAG                     (1 &lt;&lt; 3)</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX11_FLAG                     (1 &lt;&lt; 4)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX14_FLAG                     (1 &lt;&lt; 5)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX17_FLAG                     (1 &lt;&lt; 6)</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX2A_FLAG                     (1 &lt;&lt; 7)</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXMS_FLAG                     (1 &lt;&lt; 8)</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXGNU_FLAG            (1 &lt;&lt; 9)</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX98                  GLM_LANG_CXX98_FLAG</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX03                  (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX0X                  (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX11                  (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX14                  (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX17                  (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX2A                  (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXMS                  GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXGNU                 GLM_LANG_CXXGNU_FLAG</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#if (defined(_MSC_EXTENSIONS))</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#elif ((GLM_COMPILER &amp; (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT))</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT 0</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#if (defined(GLM_FORCE_CXX_UNKNOWN))</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG 0</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX2A)</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX17)</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX14)</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX11)</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX03)</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX98)</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC &amp;&amp; defined(_MSVC_LANG)</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_VC15_7</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">#                       define GLM_LANG_PLATFORM _MSVC_LANG</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_VC15</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#                       if _MSVC_LANG &gt; 201402L</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#                               define GLM_LANG_PLATFORM 201402L</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#                       else</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#                               define GLM_LANG_PLATFORM _MSVC_LANG</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#                       define GLM_LANG_PLATFORM 0</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG_PLATFORM 0</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#       if __cplusplus &gt; 201703L || GLM_LANG_PLATFORM &gt; 201703L</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#       elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 199711L</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (0 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"comment\">// Has of C++ features</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"comment\">// http://clang.llvm.org/cxx_status.html</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"comment\">// http://gcc.gnu.org/projects/cxx0x.html</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"comment\">// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"comment\">// Android has multiple STLs but C++11 STL detection doesn&#39;t always work #284 #564</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#if GLM_PLATFORM == GLM_PLATFORM_ANDROID &amp;&amp; !defined(GLM_LANG_STL11_FORCED)</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL 0</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#       if (defined(_LIBCPP_VERSION) || (GLM_LANG &amp; GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_CXX11_STL 1</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_CXX11_STL 0</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL 1</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_GCC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_GCC48)) || \\</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">                ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL15))))</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"comment\">// N1720</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT 1</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA)) || \\</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC))))</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"comment\">// N1988</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXTENDED_INTEGER_TYPE 1</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXTENDED_INTEGER_TYPE (\\</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_CUDA)) || \\</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_CLANG)))</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"comment\">// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS 1</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"comment\">// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS 1</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">                (GLM_COMPILER &amp; GLM_COMPILER_VC) || \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA)))</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"comment\">// N2346</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS 1</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">                (GLM_COMPILER &amp; GLM_COMPILER_CUDA)))</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"comment\">// N2118</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES 1</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"comment\">// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES 1</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"comment\">// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR 1</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"comment\">// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF __has_feature(cxx_alignas)</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF 1</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"comment\">// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"comment\">// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\">#if (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don&#39;t support constexpr...</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">#elif (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\">#elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; GLM_HAS_INITIALIZER_LISTS &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL17)) || \\</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15))))</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#       define GLM_CONSTEXPR constexpr</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">#       define GLM_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\"># if (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">#       if __has_feature(cxx_if_constexpr)</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_IF_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\"># elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;<span class=\"preprocessor\"># else</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\"># endif</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_IF_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">#       define GLM_IF_CONSTEXPR if constexpr</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">#       define GLM_IF_CONSTEXPR if</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ASSIGNABLE 1</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ASSIGNABLE ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_GCC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_GCC49))))</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">#define GLM_HAS_TRIVIAL_QUERIES 0</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_MAKE_SIGNED 1</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_MAKE_SIGNED ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_INTRINSICS)</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC14) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_X86_BIT))))</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_BITSCAN_WINDOWS 0</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"comment\">// OpenMP</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">#ifdef _OPENMP</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_GCC61</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 45</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_GCC49</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 40</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_GCC47</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 31</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_CLANG38</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 31</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_OPENMP 20</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_INTEL</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_INTEL16</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 40</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"comment\">// nullptr</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX0X_FLAG</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_NULLPTR GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_NULLPTR GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_NULLPTR == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">#       define GLM_NULLPTR nullptr</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">#       define GLM_NULLPTR 0</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"comment\">// Static assert</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) static_assert(x, message)</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) assert(x)</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">#endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"comment\">// Qualifiers</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DEF __device__ __host__</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DECL __device__ __host__</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DEF</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DECL</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_INLINE)</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE __forceinline</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __declspec((noinline))</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE inline __attribute__((__always_inline__))</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __attribute__((__noinline__))</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE __forceinline__</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __noinline__</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE inline</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">#       endif//GLM_COMPILER</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">#       define GLM_INLINE inline</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">#       define GLM_NEVER_INLINE</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">#endif//defined(GLM_FORCE_INLINE)</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"comment\">// Swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"comment\">// User defines: GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_DISABLED            0</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_OPERATOR            1</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION            2</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_XYZW_ONLY)</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">#       undef GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">#if defined(GLM_SWIZZLE)</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_SWIZZLE) &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_SWIZZLE)</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"comment\">// Allows using not basic types as genType</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"comment\">// #define GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"comment\">// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"comment\">// to use a clip space between 0 to 1.</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;<span class=\"comment\">// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM</span></div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"comment\">// to use left handed coordinate system by default.</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_ZO_BIT         (1 &lt;&lt; 0) // ZERO_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_NO_BIT         (1 &lt;&lt; 1) // NEGATIVE_ONE_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_BIT         (1 &lt;&lt; 2) // LEFT_HANDED, For DirectX, Metal, Vulkan</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_BIT         (1 &lt;&lt; 3) // RIGHT_HANDED, For OpenGL, default in GLM</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_LEFT_HANDED</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_LEFT_HANDED</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"comment\">// Qualifiers</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">#if (GLM_COMPILER &amp; GLM_COMPILER_VC) || ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS))</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED __declspec(deprecated)</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED __attribute__((__deprecated__))</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_EXPLICIT_CTOR</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">#       define GLM_EXPLICIT explicit</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">#       define GLM_EXPLICIT</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"comment\">// SYCL</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER==GLM_COMPILER_SYCL</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">#include &lt;CL/sycl.hpp&gt;</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00240.html\">std</a> {</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;        <span class=\"comment\">// Import SYCL&#39;s functions into the namespace glm::std to force their usages.</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;        <span class=\"comment\">// It&#39;s important to use the math built-in function (sin, exp, ...)</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;        <span class=\"comment\">// of SYCL instead the std ones.</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <span class=\"keyword\">using namespace </span>cl::sycl;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;        <span class=\"comment\">// Import some &quot;harmless&quot; std&#39;s stuffs used by glm into</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        <span class=\"comment\">// the new glm::std namespace.</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        <span class=\"keyword\">using</span> numeric_limits = ::std::numeric_limits&lt;T&gt;;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        using ::std::size_t;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">using ::std::uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;        <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">using ::std::uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">using ::std::uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">using ::std::uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">using ::std::int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">using ::std::int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;        <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">using ::std::int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">using ::std::int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        using ::std::make_unsigned;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;} <span class=\"comment\">//namespace std</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"comment\">// Length type: all length functions returns a length_t type.</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"comment\">// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"comment\">// length_t is a typedef of int like GLSL defines it.</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">#define GLM_LENGTH_INT          1</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">#define GLM_LENGTH_SIZE_T       2</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_SIZE_T_LENGTH</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_LENGTH_TYPE           GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_LENGTH_TYPE           GLM_LENGTH_INT</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"keyword\">using</span> std::size_t;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">size_t</span> length_t;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span> length_t;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"comment\">// constexpr</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        <span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, std::<span class=\"keywordtype\">size_t</span> N&gt;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;                constexpr std::size_t countof(T <span class=\"keyword\">const</span> (&amp;)[N])</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;                        <span class=\"keywordflow\">return</span> N;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        }<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) glm::countof(arr)</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">#elif defined(_MSC_VER)</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) _countof(arr)</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"comment\">// uint</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;        <span class=\"keyword\">struct </span>is_int</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;                <span class=\"keyword\">enum</span> test {value = 0};</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;unsigned int&gt;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;signed int&gt;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>    uint;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"comment\">// 64-bit int</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">#       include &lt;cstdint&gt;</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>                                           <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>                                            <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">#       elif (defined(__STDC_VERSION__) &amp;&amp; (__STDC_VERSION__ &gt;= 199901L)) // C99 detected, 64 bit types available</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>                                                        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>                                                         <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> __int64                                        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> __int64                                          <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\">#               pragma GCC diagnostic ignored &quot;-Wlong-long&quot;</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;                __extension__ <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;                __extension__ <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>          <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">#       elif (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">#               pragma clang diagnostic ignored &quot;-Wc++11-long-long&quot;</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                      <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                        <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">#       else//unknown compiler</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                      <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                        <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"comment\">// make_unsigned</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_MAKE_SIGNED</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\">#       include &lt;type_traits&gt;</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;        <span class=\"keyword\">using</span> std::make_unsigned;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;char&gt;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;signed char&gt;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;short&gt;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span> type;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;int&gt;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> type;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;long&gt;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> type;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> type;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned char&gt;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned short&gt;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span> type;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned int&gt;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> type;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned long&gt;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> type;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> type;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;<span class=\"comment\">// Only use x, y, z, w as vector type components</span></div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_XYZW_ONLY GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_XYZW_ONLY GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;<span class=\"comment\">// Configure the use of defaulted initialized types</span></div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INIT_DISABLE           0</span></div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INITIALIZER_LIST       1</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INITIALISATION         2</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_CTOR_INIT) &amp;&amp; GLM_HAS_INITIALIZER_LISTS</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CTOR_INIT) &amp;&amp; !GLM_HAS_INITIALIZER_LISTS</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"comment\">// Use SIMD instruction sets</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_ALIGNOF &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT)</span></div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SIMD GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SIMD GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;<span class=\"comment\">// Configure the use of defaulted function</span></div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_DEFAULTED_FUNCTIONS &amp;&amp; GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;<span class=\"preprocessor\">#       define GLM_DEFAULT = default</span></div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;<span class=\"preprocessor\">#       define GLM_DEFAULT</span></div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;<span class=\"comment\">// Configure the use of aligned gentypes</span></div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_ALIGNED // Legacy define</span></div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_ALIGNOF &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG) &amp;&amp; (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))</span></div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;<span class=\"comment\">// Configure the use of anonymous structure as implementation detail</span></div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;<span class=\"preprocessor\">#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))</span></div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;<span class=\"comment\">// Silent warnings</span></div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_SILENT_WARNINGS</span></div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;<span class=\"preprocessor\">#       define GLM_SILENT_WARNINGS GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;<span class=\"preprocessor\">#       define GLM_SILENT_WARNINGS GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;<span class=\"comment\">// Precision</span></div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;<span class=\"preprocessor\">#define GLM_HIGHP               1</span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;<span class=\"preprocessor\">#define GLM_MEDIUMP             2</span></div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;<span class=\"preprocessor\">#define GLM_LOWP                3</span></div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)</span></div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)</span></div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)</span></div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;</div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;<span class=\"comment\">// Check inclusions of different versions of GLM</span></div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;<span class=\"preprocessor\">#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) &amp;&amp; !defined(GLM_FORCE_IGNORE_VERSION))</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error.&quot;</span></div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;<span class=\"preprocessor\">#elif GLM_SETUP_INCLUDED == GLM_VERSION</span></div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;<span class=\"comment\">// Messages</span></div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_MESSAGE_DISPLAYED)</span></div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGE_DISPLAYED</span></div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;<span class=\"preprocessor\">#               define GLM_STR_HELPER(x) #x</span></div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;<span class=\"preprocessor\">#               define GLM_STR(x) GLM_STR_HELPER(x)</span></div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"comment\">// Report GLM version</span></div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;<span class=\"preprocessor\">#               pragma message (GLM_STR(GLM_VERSION_MESSAGE))</span></div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <span class=\"comment\">// Report C++ language</span></div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;<span class=\"preprocessor\">#       if (GLM_LANG &amp; GLM_LANG_CXX2A_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 2A with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX2A_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 2A&quot;)</span></div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 17 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 17&quot;)</span></div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 14 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 14&quot;)</span></div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX11_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 11 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX11_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 11&quot;)</span></div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 0x with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 0x&quot;)</span></div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX03_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 03 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX03_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 03&quot;)</span></div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX98_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 98 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX98_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 98&quot;)</span></div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ language undetected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;<span class=\"preprocessor\">#       endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;        <span class=\"comment\">// Report compiler detection</span></div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: CUDA compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Visual C++ compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Clang compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_INTEL</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Intel Compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GCC compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Compiler not detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;        <span class=\"comment\">// Report build target</span></div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with AVX2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with AVX2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with AVX instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with AVX instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE42_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE4.2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE42_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE4.2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE41_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE4.1 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE41_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE4.1 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_X86_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_X86_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_NEON_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 64 bits with Neon instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_NEON_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 32 bits with Neon instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_ARM_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_ARM_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_MIPS_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: MIPS 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_MIPS_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: MIPS 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_PPC_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: PowerPC 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_PPC_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: PowerPC 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Unknown build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;<span class=\"preprocessor\">#       endif//GLM_ARCH</span></div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"comment\">// Report platform name</span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;<span class=\"preprocessor\">#       if(GLM_PLATFORM &amp; GLM_PLATFORM_QNXNTO)</span></div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: QNX platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;<span class=\"comment\">//#     elif(GLM_PLATFORM &amp; GLM_PLATFORM_IOS)</span></div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;<span class=\"comment\">//#             pragma message(&quot;GLM: iOS platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_APPLE)</span></div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Apple platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_WINCE)</span></div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: WinCE platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS)</span></div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Windows platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_CHROME_NACL)</span></div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Native Client detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_ANDROID)</span></div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Android platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_LINUX)</span></div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Linux platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_UNIX)</span></div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: UNIX platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_UNKNOWN)</span></div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: platform unknown&quot;)</span></div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: platform not detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;        <span class=\"comment\">// Report whether only xyzw component are used</span></div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;<span class=\"preprocessor\">#       if defined GLM_FORCE_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        <span class=\"comment\">// Report swizzle operator support</span></div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;<span class=\"preprocessor\">#       elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;        <span class=\"comment\">// Report .length() type</span></div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;<span class=\"preprocessor\">#       if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;<span class=\"preprocessor\">#       if defined(GLM_FORCE_ALIGNED_GENTYPES) &amp;&amp; (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)</span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"preprocessor\">#               undef GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;<span class=\"preprocessor\">#       elif defined(GLM_FORCE_ALIGNED_GENTYPES) &amp;&amp; (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;<span class=\"preprocessor\">#               undef GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;<span class=\"preprocessor\">#       if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)</span></div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;<span class=\"preprocessor\">#                       undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;<span class=\"preprocessor\">#                       pragma message(&quot;GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;<span class=\"preprocessor\">#                       pragma message(&quot;GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_CLIP_CONTROL &amp; GLM_CLIP_CONTROL_ZO_BIT</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_CLIP_CONTROL &amp; GLM_CLIP_CONTROL_LH_BIT</span></div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;<span class=\"preprocessor\">#endif//GLM_MESSAGES</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;<span class=\"preprocessor\">#endif//GLM_SETUP_INCLUDED</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00240_html\"><div class=\"ttname\"><a href=\"a00240.html\">std</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00040_source.html#l00049\">hash.hpp:49</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<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>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00154.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: spline.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">spline.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00154_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a catmull rom curve.  <a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a cubic curve.  <a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a> (genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a hermite curve.  <a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00154_source.html\">spline.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00154_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: spline.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">spline.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00154.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/optimum_pow.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_spline extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v4,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                genType <span class=\"keyword\">const</span>&amp; t1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                genType <span class=\"keyword\">const</span>&amp; t2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v4,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;spline.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00358_html_gaa69e143f6374d32f934a8edeaa50bac9\"><div class=\"ttname\"><a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">glm::hermite</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType hermite(genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a hermite curve. </div></div>\n<div class=\"ttc\" id=\"a00358_html_ga6b867eb52e2fc933d2e0bf26aabc9a70\"><div class=\"ttname\"><a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">glm::cubic</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubic(genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a cubic curve. </div></div>\n<div class=\"ttc\" id=\"a00358_html_ga8119c04f8210fd0d292757565cd6918d\"><div class=\"ttname\"><a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">glm::catmullRom</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType catmullRom(genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a catmull rom curve. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00155.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: std_based_type.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">std_based_type.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00155_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a></td></tr>\n<tr class=\"memdesc:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a></td></tr>\n<tr class=\"memdesc:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a></td></tr>\n<tr class=\"memdesc:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a></td></tr>\n<tr class=\"memdesc:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a></td></tr>\n<tr class=\"memdesc:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a></td></tr>\n<tr class=\"memdesc:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a></td></tr>\n<tr class=\"memdesc:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a></td></tr>\n<tr class=\"memdesc:gaa423efcea63675a2df26990dbcb58656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> </p>\n<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>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00155_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: std_based_type.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">std_based_type.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00155.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;cstdlib&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_std_based_type extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">   39</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">   43</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">   59</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">   63</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a>;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;std_based_type.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00359_html_gaeb877ac8f9a3703961736c1c5072cf68\"><div class=\"ttname\"><a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">glm::size1</a></div><div class=\"ttdeci\">vec&lt; 1, std::size_t, defaultp &gt; size1</div><div class=\"ttdoc\">Vector type based of one std::size_t component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00035\">std_based_type.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaf2654983c60d641fd3808e65a8dfad8d\"><div class=\"ttname\"><a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">glm::size3_t</a></div><div class=\"ttdeci\">vec&lt; 3, std::size_t, defaultp &gt; size3_t</div><div class=\"ttdoc\">Vector type based of three std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00059\">std_based_type.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga5976c25657d4e2b5f73f39364c3845d6\"><div class=\"ttname\"><a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">glm::size2_t</a></div><div class=\"ttdeci\">vec&lt; 2, std::size_t, defaultp &gt; size2_t</div><div class=\"ttdoc\">Vector type based of two std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00055\">std_based_type.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><div class=\"ttname\"><a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">glm::size4</a></div><div class=\"ttdeci\">vec&lt; 4, std::size_t, defaultp &gt; size4</div><div class=\"ttdoc\">Vector type based of four std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00047\">std_based_type.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaaf6accc57f5aa50447ba7310ce3f0d6f\"><div class=\"ttname\"><a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">glm::size1_t</a></div><div class=\"ttdeci\">vec&lt; 1, std::size_t, defaultp &gt; size1_t</div><div class=\"ttdoc\">Vector type based of one std::size_t component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00051\">std_based_type.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gae1c72956d0359b0db332c6c8774d3b04\"><div class=\"ttname\"><a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">glm::size3</a></div><div class=\"ttdeci\">vec&lt; 3, std::size_t, defaultp &gt; size3</div><div class=\"ttdoc\">Vector type based of three std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00043\">std_based_type.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga1bfe8c4975ff282bce41be2bacd524fe\"><div class=\"ttname\"><a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">glm::size2</a></div><div class=\"ttdeci\">vec&lt; 2, std::size_t, defaultp &gt; size2</div><div class=\"ttdoc\">Vector type based of two std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00039\">std_based_type.hpp:39</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaa423efcea63675a2df26990dbcb58656\"><div class=\"ttname\"><a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">glm::size4_t</a></div><div class=\"ttdeci\">vec&lt; 4, std::size_t, defaultp &gt; size4_t</div><div class=\"ttdoc\">Vector type based of four std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00063\">std_based_type.hpp:63</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: string_cast.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">string_cast.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00156_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL std::string&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a string from a GLM vector or matrix typed variable.  <a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00330.html\" title=\"Include <glm/gtx/integer.hpp> to use the features of this extension. \">GLM_GTX_integer</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00156_source.html\">string_cast.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00156_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: string_cast.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">string_cast.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00156.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;string&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_string_cast extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#if(GLM_COMPILER &amp; GLM_COMPILER_CUDA)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_GTX_string_cast is not supported on CUDA compiler&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL std::string <a class=\"code\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#include &quot;string_cast.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00360_html_ga8f0dced1fd45e67e2d77e80ab93c7af5\"><div class=\"ttname\"><a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">glm::to_string</a></div><div class=\"ttdeci\">GLM_FUNC_DECL std::string to_string(genType const &amp;x)</div><div class=\"ttdoc\">Create a string from a GLM vector or matrix typed variable. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00157.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: texture.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">texture.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00157_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a> (vec&lt; L, T, Q &gt; const &amp;Extent)</td></tr>\n<tr class=\"memdesc:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the number of mipmaps levels necessary to create a mipmap complete texture.  <a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00157_source.html\">texture.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00157_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: texture.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">texture.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00157.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/component_wise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_texture extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        T <a class=\"code\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Extent);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;texture.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"ttc\" id=\"a00361_html_gaa8c377f4e63486db4fa872d77880da73\"><div class=\"ttname\"><a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">glm::levels</a></div><div class=\"ttdeci\">T levels(vec&lt; L, T, Q &gt; const &amp;Extent)</div><div class=\"ttdoc\">Compute the number of mipmaps levels necessary to create a mipmap complete texture. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00158.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00158_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a> (T angle, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.  <a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.  <a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00363.html\" title=\"Include <glm/gtx/transform2.hpp> to use the features of this extension. \">GLM_GTX_transform2</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00158_source.html\">transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00158_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00158.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00362_html_ga309a30e652e58c396e2c3d4db3ee7658\"><div class=\"ttname\"><a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; translate(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00362_html_gafbeefee8fec884d566e4ada0049174d7\"><div class=\"ttname\"><a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </div></div>\n<div class=\"ttc\" id=\"a00362_html_gaf599be4c0e9d99be1f9cddba79b6018b\"><div class=\"ttname\"><a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians...</div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00159.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">transform2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00159_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">scaleBias</a> (T scale, T bias)</td></tr>\n<tr class=\"memdesc:gabf249498b236e62c983d90d30d63c99c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</td></tr>\n<tr class=\"memdesc:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:gabf714b8a358181572b32a45555f71948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis.  <a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf714b8a358181572b32a45555f71948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</td></tr>\n<tr class=\"memdesc:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.  <a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:gac7998d0763d9181550c77e8af09a182c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</td></tr>\n<tr class=\"memdesc:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</td></tr>\n<tr class=\"memdesc:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Z axis.  <a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00159_source.html\">transform2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00159_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">transform2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00159.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform2 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T y);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T y, T z);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x, T z);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x, T y);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; GLM_FUNC_QUALIFIER mat&lt;4, 4, T, Q&gt; shear(const mat&lt;4, 4, T, Q&gt; &amp; m, shearPlane, planePoint, angle)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"comment\">// Identity + tan(angle) * cross(Normal, OnPlaneVector)     0</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"comment\">// - dot(PointOnPlane, normal) * OnPlaneVector              1</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"comment\">// Reflect functions seem to don&#39;t work</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; mat&lt;3, 3, T, Q&gt; reflect2D(const mat&lt;3, 3, T, Q&gt; &amp; m, const vec&lt;3, T, Q&gt;&amp; normal){return reflect2DGTX(m, normal);}                                                                        //!&lt; \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; mat&lt;4, 4, T, Q&gt; reflect3D(const mat&lt;4, 4, T, Q&gt; &amp; m, const vec&lt;3, T, Q&gt;&amp; normal){return reflect3DGTX(m, normal);}                                                                        //!&lt; \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span> &amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a>(T <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, T bias);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, T bias);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#include &quot;transform2.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00363_html_gabf714b8a358181572b32a45555f71948\"><div class=\"ttname\"><a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">glm::shearX2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; shearX2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on X axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gac7998d0763d9181550c77e8af09a182c\"><div class=\"ttname\"><a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">glm::shearY2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; shearY2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Y axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gaa2b7f4f15b98f697caede11bef50509e\"><div class=\"ttname\"><a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">glm::proj3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; proj3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Build planar projection matrix along normal axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga5b992a0cdc8298054edb68e228f0d93e\"><div class=\"ttname\"><a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">glm::proj2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; proj2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Build planar projection matrix along normal axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga6591e0a3a9d2c9c0b6577bb4dace0255\"><div class=\"ttname\"><a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">glm::shearZ3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearZ3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Z axis. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gade5bb65ffcb513973db1a1314fb5cfac\"><div class=\"ttname\"><a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">glm::shearY3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearY3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Y axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gae2bdd91a76759fecfbaef97e3020aa8e\"><div class=\"ttname\"><a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">glm::scaleBias</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</div><div class=\"ttdoc\">Build a scale bias matrix. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga73e867c6cd4d700fe2054437e56106c4\"><div class=\"ttname\"><a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">glm::shearX3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearX3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00160.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: trigonometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">trigonometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00160_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacc9b092df8257c68f19c9053703e2563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc cosine.  <a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic cosine; returns the non-negative inverse of cosh.  <a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc sine.  <a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic sine; returns the inverse of sinh.  <a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y_over_x)</td></tr>\n<tr class=\"memdesc:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gabc925650e618357d07da255531658b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic tangent; returns the inverse of tanh.  <a href=\"a00373.html#gabc925650e618357d07da255531658b87\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc925650e618357d07da255531658b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric cosine function.  <a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.  <a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a> (vec&lt; L, T, Q &gt; const &amp;radians)</td></tr>\n<tr class=\"memdesc:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts radians to degrees and returns the result.  <a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a> (vec&lt; L, T, Q &gt; const &amp;degrees)</td></tr>\n<tr class=\"memdesc:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts degrees to radians and returns the result.  <a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric sine function.  <a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.  <a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric tangent function.  <a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)  <a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00160_source.html\">trigonometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00160_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: trigonometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">trigonometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00160.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a>);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y_over_x);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_trigonometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00373_html_ga8faec9e303538065911ba8b3caf7326b\"><div class=\"ttname\"><a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">glm::degrees</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; degrees(vec&lt; L, T, Q &gt; const &amp;radians)</div><div class=\"ttdoc\">Converts radians to degrees and returns the result. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga4e260e372742c5f517aca196cf1e62b3\"><div class=\"ttname\"><a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">glm::cosh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; cosh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gacc9b092df8257c68f19c9053703e2563\"><div class=\"ttname\"><a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">glm::acos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; acos(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc cosine. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga29747fd108cb7292ae5a284f69691a69\"><div class=\"ttname\"><a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">glm::sin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sin(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric sine function. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga6e1db4862c5e25afd553930e2fdd6a68\"><div class=\"ttname\"><a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">glm::radians</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; radians(vec&lt; L, T, Q &gt; const &amp;degrees)</div><div class=\"ttdoc\">Converts degrees to radians and returns the result. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga0552d2df4865fa8c3d7cfc3ec2caac73\"><div class=\"ttname\"><a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">glm::asin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; asin(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc sine. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><div class=\"ttname\"><a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">glm::tanh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; tanh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </div></div>\n<div class=\"ttc\" id=\"a00373_html_gac7c39ff21809e281552b4dbe46f4a39d\"><div class=\"ttname\"><a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">glm::sinh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sinh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga3ef16b501ee859fddde88e22192a5950\"><div class=\"ttname\"><a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">glm::asinh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; asinh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic sine; returns the inverse of sinh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gabc925650e618357d07da255531658b87\"><div class=\"ttname\"><a href=\"a00373.html#gabc925650e618357d07da255531658b87\">glm::atanh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atanh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic tangent; returns the inverse of tanh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga6a41efc740e3b3c937447d3a6284130e\"><div class=\"ttname\"><a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">glm::cos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; cos(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric cosine function. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga5229f087eaccbc466f1c609ce3107b95\"><div class=\"ttname\"><a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">glm::atan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)</div><div class=\"ttdoc\">Arc tangent. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga858f35dc66fd2688f20c52b5f25be76a\"><div class=\"ttname\"><a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">glm::acosh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; acosh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic cosine; returns the non-negative inverse of cosh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga293a34cfb9f0115cc606b4a97c84f11f\"><div class=\"ttname\"><a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">glm::tan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; tan(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric tangent function. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00161.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/type_aligned.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00161_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga780a35f764020f553a9601a3fcdcd059\"></a>\ntypedef aligned_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a></td></tr>\n<tr class=\"memdesc:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae766b317c5afec852bfb3d74a3c54bc8\"></a>\ntypedef aligned_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a></td></tr>\n<tr class=\"memdesc:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae1964ba70d15915e5b710926decbb3cb\"></a>\ntypedef aligned_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a></td></tr>\n<tr class=\"memdesc:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae164a1f7879f828bc35e50b79d786b05\"></a>\ntypedef aligned_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a></td></tr>\n<tr class=\"memdesc:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6783859382677d35fcd5dac7dcbefdbd\"></a>\ntypedef aligned_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga449a3ec2dde6b6bb4bb94c49a6aad388\"></a>\ntypedef aligned_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53d519a7b1bfb69076b3ec206a6b3bd1\"></a>\ntypedef aligned_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ccb2baeb0ab57b818c24e0d486c59d0\"></a>\ntypedef aligned_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga19aa695ffdb45ce29f7ea0b5029627de\"></a>\ntypedef aligned_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a></td></tr>\n<tr class=\"memdesc:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5f5123d834bd1170edf8c386834e112c\"></a>\ntypedef aligned_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga635bf3732281a2c2ca54d8f9d33d178f\"></a>\ntypedef aligned_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf488c6ad88c185054595d4d5c7ba5b9d\"></a>\ntypedef aligned_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga001bb387ae8192fa94dbd8b23b600439\"></a>\ntypedef aligned_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a></td></tr>\n<tr class=\"memdesc:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa409cfb737bd59b68dc683e9b03930cc\"></a>\ntypedef aligned_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga621e89ca1dbdcb7b5a3e7de237c44121\"></a>\ntypedef aligned_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9bda778d0b7ad82f656dab99b71857a\"></a>\ntypedef aligned_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4974f46ae5a19415d91316960a53617a\"></a>\ntypedef aligned_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a></td></tr>\n<tr class=\"memdesc:ga4974f46ae5a19415d91316960a53617a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga18d859f87122b2b3b2992ffe86dbebc0\"></a>\ntypedef aligned_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a></td></tr>\n<tr class=\"memdesc:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa37869eea77d28419b2fb0ff70b69bf0\"></a>\ntypedef aligned_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a></td></tr>\n<tr class=\"memdesc:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9f0a4795ccc442fa9901845026f9f5\"></a>\ntypedef aligned_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga862843a45b01c35ffe4d44c47ea774ad\"></a>\ntypedef vec&lt; 1, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0731b593c5e33559954c80f8687e76c6\"></a>\ntypedef vec&lt; 2, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0913bdf048d0cb74af1d2512aec675bc\"></a>\ntypedef vec&lt; 3, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9df1d0c425852cf63a57e533b7a83f4f\"></a>\ntypedef vec&lt; 4, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a7eeae43cb7673e14cc89bf02f7dd45\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaef26dfe3855a91644665b55c9096a8c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7c9d4ab7ab651cdf8001fe7843e238b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa0d2b8a75f1908dcf32c27f8524bdced\"></a>\ntypedef mat&lt; 2, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8f6abb2c9994850b5d5c04a5f979ed8\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab069b2fc2ec785fc4e193cf26c022679\"></a>\ntypedef mat&lt; 3, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga66073b1ddef34b681741f572338ddb8e\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga683c8ca66de323ea533a760abedd0efc\"></a>\ntypedef mat&lt; 3, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacaa7407ea00ffdd322ce86a57adb547e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga93a23ca3d42818d56e0702213c66354b\"></a>\ntypedef mat&lt; 4, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacab7374b560745cb1d0a306a90353f58\"></a>\ntypedef mat&lt; 4, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacab7374b560745cb1d0a306a90353f58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fbfba14368b742972d3b58a0a303682\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf0448b0f7ceb8273f7eda3a92205eefc\"></a>\ntypedef vec&lt; 1, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab173a333e6b7ce153ceba66ac4a321cf\"></a>\ntypedef vec&lt; 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae94ef61edfa047d05bc69b6065fc42ba\"></a>\ntypedef vec&lt; 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fad35c5677f228e261fe541f15363a4\"></a>\ntypedef vec&lt; 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63b8c5b4dc0500d54d7414ef555178f\"></a>\ntypedef vec&lt; 1, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41563650f36cb7f479e080de21e08418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga41563650f36cb7f479e080de21e08418\"></a>\ntypedef vec&lt; 2, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga41563650f36cb7f479e080de21e08418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga41563650f36cb7f479e080de21e08418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6eca5170bb35eac90b4972590fd31a06\"></a>\ntypedef vec&lt; 3, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31bfa801e1579fdba752ec3f7a45ec91\"></a>\ntypedef vec&lt; 4, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf9db5e8a929c317da5aa12cc53741b63\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a></td></tr>\n<tr class=\"memdesc:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab559d943abf92bc588bcd3f4c0e4664b\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga50c9af5aa3a848956d625fc64dc8488e\"></a>\ntypedef mat&lt; 2, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0edcfdd179f8a158342eead48a4d0c2a\"></a>\ntypedef mat&lt; 2, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabab3afcc04459c7b123604ae5dc663f6\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9fc2167b47c9be9295f2d8eea7f0ca75\"></a>\ntypedef mat&lt; 3, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f7b8c99ba6f2d07c73a195a8143c259\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52e00afd0eb181e6738f40cf41787049\"></a>\ntypedef mat&lt; 3, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058ae939bfdbcbb80521dd4a3b01afba\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga84e1f5e0718952a079b748825c03f956\"></a>\ntypedef mat&lt; 4, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga84e1f5e0718952a079b748825c03f956\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafff1684c4ff19b4a818138ccacc1e78d\"></a>\ntypedef mat&lt; 4, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga40d49648083a0498a12a4bb41ae6ece8\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b80e28396c6ef7d32c6fd18df498451\"></a>\ntypedef vec&lt; 1, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04db692662a4908beeaf5a5ba6e19483\"></a>\ntypedef vec&lt; 2, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga073fd6e8b241afade6d8afbd676b2667\"></a>\ntypedef vec&lt; 3, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd60462042859f876c17c7346c732a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd60462042859f876c17c7346c732a5\"></a>\ntypedef vec&lt; 4, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gabdd60462042859f876c17c7346c732a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabdd60462042859f876c17c7346c732a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d0bd70d5fac49b800546d608b707513\"></a>\ntypedef vec&lt; 1, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9f8482dde741fb6bab7248b81a45465\"></a>\ntypedef vec&lt; 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a></td></tr>\n<tr class=\"memdesc:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65415d2d68c9cc0ca554524a8f5510b2\"></a>\ntypedef vec&lt; 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cb26d354dd69d23849c34c4fba88da9\"></a>\ntypedef vec&lt; 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga76298aed82a439063c3d55980c84aa0b\"></a>\ntypedef aligned_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a></td></tr>\n<tr class=\"memdesc:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4f38fd2c86cee6940986197777b3ca4\"></a>\ntypedef aligned_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a></td></tr>\n<tr class=\"memdesc:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga32794322d294e5ace7fed4a61896f270\"></a>\ntypedef aligned_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a></td></tr>\n<tr class=\"memdesc:ga32794322d294e5ace7fed4a61896f270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f79eae5927c9033d84617e49f6f34e4\"></a>\ntypedef aligned_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a></td></tr>\n<tr class=\"memdesc:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac6036449ab1c4abf8efe1ea00fcdd1c9\"></a>\ntypedef vec&lt; 1, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59fadcd3835646e419372ae8b43c5d37\"></a>\ntypedef vec&lt; 2, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga83aab4d191053f169c93a3e364f2e118\"></a>\ntypedef vec&lt; 3, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7a76555ee4853614e5755181a8dd54e\"></a>\ntypedef vec&lt; 4, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a90173d8faa9816dc852ce447d66ca\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07cb8e846666cbf56045b064fb553d2e\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7a4536b6e1f2ebb690f63816b5d7e48b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0cf4f7c9a264941519acad286e055ea\"></a>\ntypedef mat&lt; 2, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac00e15efded8a57c9dec3aed0fb547e7\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa281a47d5d627313984d0f8df993b648\"></a>\ntypedef mat&lt; 3, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gaa281a47d5d627313984d0f8df993b648\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f3148a72355e39932d6855baca42ebc\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea3ccc5ef5b178e6e49b4fa1427605d3\"></a>\ntypedef mat&lt; 3, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab92c6d7d58d43dfb8147e9aedfe8351b\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf806dfdaffb2e9f7681b1cd2825898ce\"></a>\ntypedef mat&lt; 4, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0931ac7807fa1428c7bbf249efcdf0d\"></a>\ntypedef mat&lt; 4, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8220a93d2fca2dd707821b4ab6f809e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f8a2cc5a686e52b1615761f4978ca62\"></a>\ntypedef vec&lt; 1, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e37cff4a43cca866101f0a35f01db6d\"></a>\ntypedef vec&lt; 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9e669c4efd52d3347fc6d5f6b20fd59\"></a>\ntypedef vec&lt; 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga226f5ec7a953cea559c16fe3aff9924f\"></a>\ntypedef vec&lt; 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1101d3a82b2e3f5f8828bd8f3adab3e1\"></a>\ntypedef vec&lt; 1, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga44c4accad582cfbd7226a19b83b0cadc\"></a>\ntypedef vec&lt; 2, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65663f10a02e52cedcddbcfe36ddf38d\"></a>\ntypedef vec&lt; 3, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaae92fcec8b2e0328ffbeac31cc4fc419\"></a>\ntypedef vec&lt; 4, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga17c424412207b00dba1cf587b099eea3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga17c424412207b00dba1cf587b099eea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e44aeb930a47f9cbf2db15b56433b0f\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7dec6d96bc61312b1e56d137c9c74030\"></a>\ntypedef mat&lt; 2, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa694fab1f8df5f658846573ba8ffc563\"></a>\ntypedef mat&lt; 2, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1eb9076cc28ead5020fd3029fd0472c5\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d6639f0bd777bae1ee0eba71cd7bfdc\"></a>\ntypedef mat&lt; 3, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeaab04e378a90956eec8d68a99d777ed\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f03696ab066572c6c044e63edf635a2\"></a>\ntypedef mat&lt; 3, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga25ea2f684e36aa5e978b4f2f86593824\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2cb16c3fdfb15e0719d942ee3b548bc4\"></a>\ntypedef mat&lt; 4, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e96981e872f17a780d9f1c22dc1f512\"></a>\ntypedef mat&lt; 4, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadae3dcfc22d28c64d0548cbfd9d08719\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad09b93acc43c43423408d17a64f6d7ca\"></a>\ntypedef vec&lt; 1, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6f94fcd28dde906fc6cad5f742b55c1a\"></a>\ntypedef vec&lt; 2, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e9f006970b1a00862e3e6e599eedd4c\"></a>\ntypedef vec&lt; 3, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46b1b0b9eb8625a5d69137bd66cd13dc\"></a>\ntypedef vec&lt; 4, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab34aee3d5e121c543fea11d2c50ecc43\"></a>\ntypedef vec&lt; 1, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53ac5d252317f1fa43c2ef921857bf13\"></a>\ntypedef vec&lt; 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f0b5cd65fce164ff1367c2a3b3aa1e\"></a>\ntypedef vec&lt; 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga82f7275d6102593a69ce38cdad680409\"></a>\ntypedef vec&lt; 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga82f7275d6102593a69ce38cdad680409\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a8a5f8c47cd7d5502dd9932f83472b9\"></a>\ntypedef aligned_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a></td></tr>\n<tr class=\"memdesc:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabb04f459d81d753d278b2072e2375e8e\"></a>\ntypedef aligned_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a></td></tr>\n<tr class=\"memdesc:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga832476bb1c59ef673db37433ff34e399\"></a>\ntypedef aligned_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga832476bb1c59ef673db37433ff34e399\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadab11a7504430825b648ff7c7e36b725\"></a>\ntypedef aligned_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a></td></tr>\n<tr class=\"memdesc:gadab11a7504430825b648ff7c7e36b725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43a92a24ca863e0e0f3b65834b3cf714\"></a>\ntypedef aligned_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a></td></tr>\n<tr class=\"memdesc:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c0df24ba85eafafc0eb0c90690510ed\"></a>\ntypedef aligned_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb065dbe5c11271fef8cf2ea8608f187\"></a>\ntypedef aligned_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a></td></tr>\n<tr class=\"memdesc:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88061c72c997b94c420f2b0a60d9df26\"></a>\ntypedef aligned_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0fddcf95dd51cbcbf624ea7c40dfeb8\"></a>\ntypedef aligned_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a></td></tr>\n<tr class=\"memdesc:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9a2d0fb815fd5c2bd58b869c55e32d3\"></a>\ntypedef aligned_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a></td></tr>\n<tr class=\"memdesc:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga452bbbfd26e244de216e4d004d50bb74\"></a>\ntypedef aligned_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8b8fb86973a0b768c5bd802c92fac1a1\"></a>\ntypedef aligned_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd3b8bd71a758f7fb0da8e525156f34e\"></a>\ntypedef vec&lt; 1, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb183eb5e67ec0d0ea5a016cba962810\"></a>\ntypedef vec&lt; 2, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacfa4a542f1b20a5b63ad702dfb6fd587\"></a>\ntypedef vec&lt; 3, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga91bc1f513bb9b0fd60281d57ded9a48c\"></a>\ntypedef vec&lt; 4, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga62a2dfd668c91072b72c3109fc6cda28\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9b7feec247d378dd407ba81f56ea96c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafcb189f4f93648fe7ca802ca4aca2eb8\"></a>\ntypedef mat&lt; 2, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92f8873e3bbd5ca1323c8bbe5725cc5e\"></a>\ntypedef mat&lt; 2, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc2832b747c00e0a0df621aba196960\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a97f0355d801de3444d42c1d5b40438\"></a>\ntypedef mat&lt; 3, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga649d0acf01054b17e679cf00e150e025\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga649d0acf01054b17e679cf00e150e025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45e155a4840f69b2fa4ed8047a676860\"></a>\ntypedef mat&lt; 3, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9376d82f0e946e25137eb55543e6ce\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc25e547f4de4af62403492532cd1b6d\"></a>\ntypedef mat&lt; 4, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae84f4763ecdc7457ecb7930bad12057c\"></a>\ntypedef mat&lt; 4, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa292ebaa907afdecb2d5967fb4fb1247\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7180b685c581adb224406a7f831608e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7180b685c581adb224406a7f831608e3\"></a>\ntypedef vec&lt; 1, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7180b685c581adb224406a7f831608e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7180b685c581adb224406a7f831608e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9af1eabe22f569e70d9893be72eda0f5\"></a>\ntypedef vec&lt; 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058e7ddab1428e47f2197bdd3a5a6953\"></a>\ntypedef vec&lt; 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaffd747ea2aea1e69c2ecb04e68521b21\"></a>\ntypedef vec&lt; 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20e63dd980b81af10cadbbe219316650\"></a>\ntypedef vec&lt; 1, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga20e63dd980b81af10cadbbe219316650\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea13d89d49daca2c796aeaa82fc2c2f2\"></a>\ntypedef vec&lt; 2, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabbf0f15e9c3d9868e43241ad018f82bd\"></a>\ntypedef vec&lt; 3, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6099dd7878d0a78101a4250d8cd2d736\"></a>\ntypedef vec&lt; 4, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf6f041b212c57664d88bc6aefb7e36f3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04bf49316ee777d42fcfe681ee37d7be\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga26a0b61e444a51a37b9737cf4d84291b\"></a>\ntypedef mat&lt; 2, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga163facc9ed2692ea1300ed57c5d12b17\"></a>\ntypedef mat&lt; 2, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3b76ba17ae5d53debeb6f7e55919a57c\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80dee705d714300378e0847f45059097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga80dee705d714300378e0847f45059097\"></a>\ntypedef mat&lt; 3, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga80dee705d714300378e0847f45059097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga80dee705d714300378e0847f45059097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga721f5404caf40d68962dcc0529de71d9\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f4dc6722a2541a990918c074075359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f4dc6722a2541a990918c074075359\"></a>\ntypedef mat&lt; 3, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga98f4dc6722a2541a990918c074075359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f4dc6722a2541a990918c074075359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeefee8317192174596852ce19b602720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeefee8317192174596852ce19b602720\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gaeefee8317192174596852ce19b602720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeefee8317192174596852ce19b602720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f372a006345c252a41267657cc22c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46f372a006345c252a41267657cc22c0\"></a>\ntypedef mat&lt; 4, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga46f372a006345c252a41267657cc22c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga46f372a006345c252a41267657cc22c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0effece4545acdebdc2a5512a303110e\"></a>\ntypedef mat&lt; 4, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga0effece4545acdebdc2a5512a303110e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga312864244cae4e8f10f478cffd0f76de\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb78126ea2eb779b41c7511128ff1283\"></a>\ntypedef vec&lt; 1, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga081d53e0a71443d0b68ea61c870f9adc\"></a>\ntypedef vec&lt; 2, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6fc921bdde2bdbc7e09b028e1e9b379\"></a>\ntypedef vec&lt; 3, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73ea0c1ba31580e107d21270883f51fc\"></a>\ntypedef vec&lt; 4, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b797eec76fa471e300158f3453b3b2e\"></a>\ntypedef vec&lt; 1, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga026a55ddbf2bafb1432f1157a2708616\"></a>\ntypedef vec&lt; 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a25e494173f6a64637b08a1b50a2132\"></a>\ntypedef vec&lt; 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga320d1c661cff2ef214eb50241f2928b2\"></a>\ntypedef vec&lt; 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ff8ed402c93d280ff0597c1c5e7c548\"></a>\ntypedef aligned_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a></td></tr>\n<tr class=\"memdesc:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga074137e3be58528d67041c223d49f398\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga074137e3be58528d67041c223d49f398\"></a>\ntypedef aligned_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a></td></tr>\n<tr class=\"memdesc:ga074137e3be58528d67041c223d49f398\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga074137e3be58528d67041c223d49f398\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a8d9c3046f89d854eb758adfa0811c0\"></a>\ntypedef aligned_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a></td></tr>\n<tr class=\"memdesc:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabf842c45eea186170c267a328e3f3b7d\"></a>\ntypedef aligned_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a></td></tr>\n<tr class=\"memdesc:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05e6d4c908965d04191c2070a8d0a65e\"></a>\ntypedef aligned_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a></td></tr>\n<tr class=\"memdesc:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0682462f8096a226773e20fac993cde5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0682462f8096a226773e20fac993cde5\"></a>\ntypedef aligned_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a></td></tr>\n<tr class=\"memdesc:ga0682462f8096a226773e20fac993cde5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0682462f8096a226773e20fac993cde5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cf643b66664e0cd3c48759ae66c2bd0\"></a>\ntypedef aligned_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a></td></tr>\n<tr class=\"memdesc:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga85d89e83cb8137e1be1446de8c3b643a\"></a>\ntypedef aligned_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a></td></tr>\n<tr class=\"memdesc:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88632cea9008ac0ac1388e94e804a53c\"></a>\ntypedef packed_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a></td></tr>\n<tr class=\"memdesc:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab85245913eaa40ab82adabcae37086cb\"></a>\ntypedef packed_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a></td></tr>\n<tr class=\"memdesc:gab85245913eaa40ab82adabcae37086cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c48f9417f649e27f3fb0c9f733a18bd\"></a>\ntypedef packed_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3180d7db84a74c402157df3bbc0ae3ed\"></a>\ntypedef packed_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a></td></tr>\n<tr class=\"memdesc:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad87408a8350918711f845f071bbe43fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad87408a8350918711f845f071bbe43fb\"></a>\ntypedef packed_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a></td></tr>\n<tr class=\"memdesc:gad87408a8350918711f845f071bbe43fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad87408a8350918711f845f071bbe43fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa33d8e06657a777efb0c72c44ce87a9\"></a>\ntypedef packed_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3a5315f588ba04ad255188071ec4e22\"></a>\ntypedef packed_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae398fc3156f51d3684b08f62c1a5a6d4\"></a>\ntypedef packed_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03dfc90d539cc87ea3a15a9caa5d2245\"></a>\ntypedef packed_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a></td></tr>\n<tr class=\"memdesc:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae36de20a4c0e0b1444b7903ae811d94e\"></a>\ntypedef packed_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9b909f1392d86854334350efcae85f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9b909f1392d86854334350efcae85f5\"></a>\ntypedef packed_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gab9b909f1392d86854334350efcae85f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab9b909f1392d86854334350efcae85f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga199131fd279c92c2ac12df6d978f1dd6\"></a>\ntypedef packed_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada980a3485640aa8151f368f17ad3086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gada980a3485640aa8151f368f17ad3086\"></a>\ntypedef packed_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a></td></tr>\n<tr class=\"memdesc:gada980a3485640aa8151f368f17ad3086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gada980a3485640aa8151f368f17ad3086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc65249730698d3cc9ac5d7e1bc4d72\"></a>\ntypedef packed_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadf202aaa9ed71c09f9bbe347e43f8764\"></a>\ntypedef packed_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae20617435a6d042d7c38da2badd64a09\"></a>\ntypedef packed_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gae20617435a6d042d7c38da2badd64a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga532f0c940649b1ee303acd572fc35531\"></a>\ntypedef packed_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a></td></tr>\n<tr class=\"memdesc:ga532f0c940649b1ee303acd572fc35531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c194b11fbda636f2ab20c3bd0079196\"></a>\ntypedef packed_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0581ea552d86b2b5de7a2804bed80e72\"></a>\ntypedef packed_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a></td></tr>\n<tr class=\"memdesc:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a9b181f9dc813ad6e125a52b14b935\"></a>\ntypedef packed_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a></td></tr>\n<tr class=\"memdesc:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga439e97795314b81cd15abd4e5c2e6e7a\"></a>\ntypedef vec&lt; 1, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad791d671f4fcf1ed1ea41f752916b70a\"></a>\ntypedef vec&lt; 2, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6a5a3250b57dfadc66735bc72911437f\"></a>\ntypedef vec&lt; 3, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09f517d88b996ef1b2f42fd54222b82d\"></a>\ntypedef vec&lt; 4, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae29686632fd05efac0675d9a6370d77b\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:gae29686632fd05efac0675d9a6370d77b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga22bd6382b16052e301edbfc031b9f37a\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga999d82719696d4c59f4d236dd08f273d\"></a>\ntypedef mat&lt; 2, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6998ac2a8d7fe456b651a6336ed26bb0\"></a>\ntypedef mat&lt; 2, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadac7c040c4810dd52b36fcd09d097400\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab462744977beb85fb5c782bc2eea7b15\"></a>\ntypedef mat&lt; 3, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga49e5a709d098523823b2f824e48672a6\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga49e5a709d098523823b2f824e48672a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c67b3b0adab71c8680c3d819f1fa9b7\"></a>\ntypedef mat&lt; 3, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6718822cd7af005a9b5bd6ee282f6ba6\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga12e39e797fb724a5b51fcbea2513a7da\"></a>\ntypedef mat&lt; 4, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79c2e9f82e67963c1ecad0ad6d0ec72e\"></a>\ntypedef mat&lt; 4, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2df58e03e5afded28707b4f7d077afb4\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab472b2d917b5e6efd76e8c7dbfbbf9f1\"></a>\ntypedef vec&lt; 1, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b2dc48fa19b684d207d69c6b145eb63\"></a>\ntypedef vec&lt; 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaac6b356ef00154da41aaae7d1549193\"></a>\ntypedef vec&lt; 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga81b5368fe485e2630aa9b44832d592e7\"></a>\ntypedef vec&lt; 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7245acc887a5438f46fd85fdf076bb3b\"></a>\ntypedef vec&lt; 1, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga54f368ec6b514a5aa4f28d40e6f93ef7\"></a>\ntypedef vec&lt; 2, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga865a9c7bb22434b1b8c5ac31e164b628\"></a>\ntypedef vec&lt; 3, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6f1b4e3a51c2c051814b60d5d1b8895\"></a>\ntypedef vec&lt; 4, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f2d913d8cca2f935b2522964408c0b2\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga245c12d2daf67feecaa2d3277c8f6661\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069cc8892aadae144c00f35297617d44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga069cc8892aadae144c00f35297617d44\"></a>\ntypedef mat&lt; 2, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga069cc8892aadae144c00f35297617d44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga069cc8892aadae144c00f35297617d44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6904d09b62141d09712b76983892f95b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6904d09b62141d09712b76983892f95b\"></a>\ntypedef mat&lt; 2, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga6904d09b62141d09712b76983892f95b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6904d09b62141d09712b76983892f95b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd5fbffe8b8b8a7b33523f25b120dbe\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2624719cb251d8de8cad1beaefc3a3f9\"></a>\ntypedef mat&lt; 3, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf2e07527d678440bf0c20adbeb9177c5\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga72102fa6ac2445aa3bb203128ad52449\"></a>\ntypedef mat&lt; 3, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga253e8379b08d2dc6fe2800b2fb913203\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae389c2071cf3cdb33e7812c6fd156710\"></a>\ntypedef mat&lt; 4, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4584f64394bd7123b7a8534741e4916c\"></a>\ntypedef mat&lt; 4, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0149fe15668925147e07c94fd2c2d6ae\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8c32b53f628a3616aa5061e58d66fe74\"></a>\ntypedef vec&lt; 1, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab704d4fb15f6f96d70e363d5db7060cd\"></a>\ntypedef vec&lt; 2, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0b570da473fec4619db5aa0dce5133b0\"></a>\ntypedef vec&lt; 3, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa582f38c82aef61dea7aaedf15bb06a6\"></a>\ntypedef vec&lt; 4, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga56473759d2702ee19ab7f91d0017fa70\"></a>\ntypedef vec&lt; 1, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b8b9475e7c3b16aed13edbc460bbc4d\"></a>\ntypedef vec&lt; 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a></td></tr>\n<tr class=\"memdesc:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3815661df0e2de79beff8168c09adf1e\"></a>\ntypedef vec&lt; 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4015f36bf5a5adb6ac5d45beed959867\"></a>\ntypedef vec&lt; 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga11581a06fc7bf941fa4d4b6aca29812c\"></a>\ntypedef packed_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a></td></tr>\n<tr class=\"memdesc:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fe4c5f56b8087d773aa90dc88a257a7\"></a>\ntypedef packed_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a></td></tr>\n<tr class=\"memdesc:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae157682a7847161787951ba1db4cf325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae157682a7847161787951ba1db4cf325\"></a>\ntypedef packed_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a></td></tr>\n<tr class=\"memdesc:gae157682a7847161787951ba1db4cf325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae157682a7847161787951ba1db4cf325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac228b70372abd561340d5f926a7c1778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac228b70372abd561340d5f926a7c1778\"></a>\ntypedef packed_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a></td></tr>\n<tr class=\"memdesc:gac228b70372abd561340d5f926a7c1778\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gac228b70372abd561340d5f926a7c1778\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae3c8750f53259ece334d3aa3b3649a40\"></a>\ntypedef vec&lt; 1, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac969befedbda69eb78d4e23f751fdbee\"></a>\ntypedef vec&lt; 2, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7c20adbe1409e3fe4544677a7f6fe954\"></a>\ntypedef vec&lt; 3, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae473587cff3092edc0877fc691c26a0b\"></a>\ntypedef vec&lt; 4, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gae473587cff3092edc0877fc691c26a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac93f9b1a35b9de4f456b9f2dfeaf1097\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeeaff6c132ec91ebd21da3a2399548ea\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ccdcd4846775cbe4f9d12e71d55b5d2\"></a>\ntypedef mat&lt; 2, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac870c47d2d9d48503f6c9ee3baec8ce1\"></a>\ntypedef mat&lt; 2, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3894a059eeaacec8791c25de398d9955\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga3894a059eeaacec8791c25de398d9955\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23ec236950f5859f59197663266b535d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga23ec236950f5859f59197663266b535d\"></a>\ntypedef mat&lt; 3, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga23ec236950f5859f59197663266b535d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga23ec236950f5859f59197663266b535d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fc0e66da83599071b7ec17510686cd9\"></a>\ntypedef mat&lt; 3, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03e1edf5666c40affe39aee35c87956f\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39658fb13369db869d363684bd8399c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39658fb13369db869d363684bd8399c0\"></a>\ntypedef mat&lt; 4, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga39658fb13369db869d363684bd8399c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39658fb13369db869d363684bd8399c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga30b0351eebc18c6056101359bdd3a359\"></a>\ntypedef mat&lt; 4, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0294d4c45151425c86a11deee7693c0e\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga054050e9d4e78d81db0e6d1573b1c624\"></a>\ntypedef vec&lt; 1, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadc19938ddb204bfcb4d9ef35b1e2bf93\"></a>\ntypedef vec&lt; 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9189210cabd6651a5e14a4c46fb20598\"></a>\ntypedef vec&lt; 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga262dafd0c001c3a38d1cc91d024ca738\"></a>\ntypedef vec&lt; 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf22b77f1cf3e73b8b1dddfe7f959357c\"></a>\ntypedef vec&lt; 1, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52635859f5ef660ab999d22c11b7867f\"></a>\ntypedef vec&lt; 2, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98c9d122a959e9f3ce10a5623c310f5d\"></a>\ntypedef vec&lt; 3, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga931731b8ae3b54c7ecc221509dae96bc\"></a>\ntypedef vec&lt; 4, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70dcb9ef0b24e832772a7405efa9669a\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac70667c7642ec8d50245e6e6936a3927\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3e7df5a11e1be27bc29a4c0d3956f234\"></a>\ntypedef mat&lt; 2, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea9c555e669dc56c45d95dcc75d59bf3\"></a>\ntypedef mat&lt; 2, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0d22400969dd223465b2900fecfb4f53\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga128cd52649621861635fab746df91735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga128cd52649621861635fab746df91735\"></a>\ntypedef mat&lt; 3, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga128cd52649621861635fab746df91735\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga128cd52649621861635fab746df91735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5adf1802c5375a9dfb1729691bedd94e\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92247ca09fa03c4013ba364f3a0fca7f\"></a>\ntypedef mat&lt; 3, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a1dd2387725a335413d4c4fee8609c4\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8f22607dcd090cd280071ccc689f4079\"></a>\ntypedef mat&lt; 4, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7661d759d6ad218e132e3d051e7b2c6c\"></a>\ntypedef mat&lt; 4, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga776f18d1a6e7d399f05d386167dc60f5\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf111fed760ecce16cb1988807569bee5\"></a>\ntypedef vec&lt; 1, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gaf111fed760ecce16cb1988807569bee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga958210fe245a75b058325d367c951132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga958210fe245a75b058325d367c951132\"></a>\ntypedef vec&lt; 2, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga958210fe245a75b058325d367c951132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga958210fe245a75b058325d367c951132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga576a3f8372197a56a79dee1c8280f485\"></a>\ntypedef vec&lt; 3, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafdd97922b4a2a42cd0c99a13877ff4da\"></a>\ntypedef vec&lt; 4, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a6198fe64166a6a61084d43c71518a9\"></a>\ntypedef vec&lt; 1, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafbf1c2cce307c5594b165819ed83bf5d\"></a>\ntypedef vec&lt; 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a30c137c1f8cce478c28eab0427a570\"></a>\ntypedef vec&lt; 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3cc94fb8de80bbd8a4aa7a5b206d304a\"></a>\ntypedef vec&lt; 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd019b43fcf42e1590d45dddaa504a1a\"></a>\ntypedef packed_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a></td></tr>\n<tr class=\"memdesc:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga51eaadcdc292c8750f746a5dc3e6c517\"></a>\ntypedef packed_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga301b76a89b8a9625501ca58815017f20\"></a>\ntypedef packed_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga301b76a89b8a9625501ca58815017f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac401da1dd9177ad81d7618a2a5541e23\"></a>\ntypedef packed_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a></td></tr>\n<tr class=\"memdesc:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bc12b0ab7be8448836711b77cc7b83a\"></a>\ntypedef packed_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a></td></tr>\n<tr class=\"memdesc:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga134f0d99fbd2459c13cd9ebd056509fa\"></a>\ntypedef packed_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c1dbe8cde9fbb231284b01f8aeaaa99\"></a>\ntypedef packed_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63515526cccfe88ffa8fe5ed64f95f8\"></a>\ntypedef packed_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a></td></tr>\n<tr class=\"memdesc:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c139854e5b04cf08a957dee3b510441\"></a>\ntypedef packed_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a></td></tr>\n<tr class=\"memdesc:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga379c1153f1339bdeaefd592bebf538e8\"></a>\ntypedef packed_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab286466e19f7399c8d25089da9400d43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab286466e19f7399c8d25089da9400d43\"></a>\ntypedef packed_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a></td></tr>\n<tr class=\"memdesc:gab286466e19f7399c8d25089da9400d43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab286466e19f7399c8d25089da9400d43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga67e7102557d6067bb6ac00d4ad0e1374\"></a>\ntypedef packed_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5546d828d63010a8f9cf81161ad0275a\"></a>\ntypedef vec&lt; 1, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab4c6414a59539e66a242ad4cf4b476b4\"></a>\ntypedef vec&lt; 2, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70147763edff3fe96b03a0b98d6339a2\"></a>\ntypedef vec&lt; 3, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b1620f259595b9da47a6374fc44588a\"></a>\ntypedef vec&lt; 4, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9d60e32d3fcb51f817046cd881fdbf57\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39e8bb9b70e5694964e8266a21ba534e\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8897c6d9adb4140b1c3b0a07b8f0a430\"></a>\ntypedef mat&lt; 2, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa4126969c765e7faa2ebf6951c22ffb\"></a>\ntypedef mat&lt; 2, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf969eb879c76a5f4576e4a1e10095cf6\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga86efe91cdaa2864c828a5d6d46356c6a\"></a>\ntypedef mat&lt; 3, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf85877d38d8cfbc21d59d939afd72375\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad5dcaf93df267bc3029174e430e0907f\"></a>\ntypedef mat&lt; 3, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4b0ee7996651ddd04eaa0c4cdbb66332\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9a15514a0631f700de6312b9d5db3a73\"></a>\ntypedef mat&lt; 4, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab5b36cc9caee1bb1c5178fe191bf5713\"></a>\ntypedef mat&lt; 4, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga21e86cf2f6c126bacf31b8985db06bd4\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8920e90ea9c01d9c97e604a938ce2cbd\"></a>\ntypedef vec&lt; 1, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c754a783b6fcf80374c013371c4dae9\"></a>\ntypedef vec&lt; 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f18ada6f7cdd8c46db33ba987280fc4\"></a>\ntypedef vec&lt; 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga568b850f1116b667043533cf77826968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga568b850f1116b667043533cf77826968\"></a>\ntypedef vec&lt; 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga568b850f1116b667043533cf77826968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga568b850f1116b667043533cf77826968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09507ef020a49517a7bcd50438f05056\"></a>\ntypedef vec&lt; 1, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga09507ef020a49517a7bcd50438f05056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa891048dddef4627df33809ec726219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa891048dddef4627df33809ec726219\"></a>\ntypedef vec&lt; 2, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaaa891048dddef4627df33809ec726219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaaa891048dddef4627df33809ec726219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga06f26d54dca30994eb1fdadb8e69f4a2\"></a>\ntypedef vec&lt; 3, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70130dc8ed9c966ec2a221ce586d45d8\"></a>\ntypedef vec&lt; 4, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43cd36d430c5187bfdca34a23cb41581\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d2a73e662759e301c22b8931ff6a526\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99049db01faf1e95ed9fb875a47dffe2\"></a>\ntypedef mat&lt; 2, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad43a240533f388ce0504b495d9df3d52\"></a>\ntypedef mat&lt; 2, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gad43a240533f388ce0504b495d9df3d52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13a75c6cbd0a411f694bc82486cd1e55\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04cfaf1421284df3c24ea0985dab24e7\"></a>\ntypedef mat&lt; 3, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa9cea174d342dd9650e3436823cab23\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc93a9560593bd32e099c908531305f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc93a9560593bd32e099c908531305f5\"></a>\ntypedef mat&lt; 3, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gabc93a9560593bd32e099c908531305f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc93a9560593bd32e099c908531305f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae89d72ffc149147f61df701bbc8755bf\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa458f9d9e0934bae3097e2a373b24707\"></a>\ntypedef mat&lt; 4, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02ca6255394aa778abaeb0f733c4d2b6\"></a>\ntypedef mat&lt; 4, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf304f64c06743c1571401504d3f50259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf304f64c06743c1571401504d3f50259\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf304f64c06743c1571401504d3f50259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf304f64c06743c1571401504d3f50259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c29fb42bab9a4f9b66bc60b2e514a34\"></a>\ntypedef vec&lt; 1, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa1f95690a78dc12e39da32943243aeef\"></a>\ntypedef vec&lt; 2, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ea2bbdbcb0a69242f6d884663c1b0ab\"></a>\ntypedef vec&lt; 3, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga63a73be86a4f07ea7a7499ab0bfebe45\"></a>\ntypedef vec&lt; 4, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga71d63cead1e113fca0bcdaaa33aad050\"></a>\ntypedef vec&lt; 1, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6844c6f4691d1bf67673240850430948\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6844c6f4691d1bf67673240850430948\"></a>\ntypedef vec&lt; 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga6844c6f4691d1bf67673240850430948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6844c6f4691d1bf67673240850430948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0eb771b708c5b2205d9b14dd1434fd8\"></a>\ntypedef vec&lt; 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga68c9bb24f387b312bae6a0a68e74d95e\"></a>\ntypedef vec&lt; 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5621493caac01bdd22ab6be4416b0314\"></a>\ntypedef packed_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabcc33efb4d5e83b8fe4706360e75b932\"></a>\ntypedef packed_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a></td></tr>\n<tr class=\"memdesc:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab96804e99e3a72a35740fec690c79617\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab96804e99e3a72a35740fec690c79617\"></a>\ntypedef packed_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a></td></tr>\n<tr class=\"memdesc:gab96804e99e3a72a35740fec690c79617\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab96804e99e3a72a35740fec690c79617\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"></a>\ntypedef packed_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a></td></tr>\n<tr class=\"memdesc:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14741e3d9da9ae83765389927f837331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga14741e3d9da9ae83765389927f837331\"></a>\ntypedef packed_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a></td></tr>\n<tr class=\"memdesc:ga14741e3d9da9ae83765389927f837331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga14741e3d9da9ae83765389927f837331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3254defa5a8f0ae4b02b45fedba84a66\"></a>\ntypedef packed_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a></td></tr>\n<tr class=\"memdesc:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaccccd090e185450caa28b5b63ad4e8f0\"></a>\ntypedef packed_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a></td></tr>\n<tr class=\"memdesc:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga37a0e0bf653169b581c5eea3d547fa5d\"></a>\ntypedef packed_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a></td></tr>\n<tr class=\"memdesc:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00161_source.html\">gtc/type_aligned.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00161_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/type_aligned.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00161.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types.&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\"># pragma message(&quot;GLM: GLM_GTC_type_aligned extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"comment\">// -- *vec1 --</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">   48</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">   60</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">   63</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">   72</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">   81</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">   87</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">   93</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">  102</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">  129</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">  132</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"comment\">// -- *vec2 --</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">  137</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">  143</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">  146</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">  152</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">  155</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">  158</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">  161</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">  164</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">  167</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">  170</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">  176</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">  179</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">  182</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">  185</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">  188</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">  191</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">  194</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">  197</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">  200</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">  203</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">  206</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">  209</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">  212</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">  215</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">  218</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">  221</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">  224</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        <span class=\"comment\">// -- *vec3 --</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">  229</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">  232</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">  238</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">  241</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">  244</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">  247</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">  250</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">  253</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">  256</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">  259</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">  262</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">  265</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">  271</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">  274</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">  277</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">  283</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">  286</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">  292</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">  295</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">  301</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">  304</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">  307</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">  310</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">  313</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">  316</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"comment\">// -- *vec4 --</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">  321</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">  324</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">  327</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">  333</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">  336</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">  339</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">  342</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">  345</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">  348</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">  351</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">  354</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">  357</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">  360</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">  363</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">  369</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">  372</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">  375</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">  378</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">  381</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">  384</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">  387</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">  393</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">  396</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">  399</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">  405</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">  408</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"comment\">// -- *mat2 --</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">  413</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">  416</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">  419</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">  422</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">  425</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">  428</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">  431</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">  434</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">  437</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">  440</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">  446</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        <span class=\"comment\">// -- *mat3 --</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">  454</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">  457</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">  460</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">  466</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">  469</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">  472</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">  475</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">  478</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">  481</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">  484</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        <span class=\"comment\">// -- *mat4 --</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">  489</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">  492</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">  495</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">  498</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">  501</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">  504</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">  507</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">  510</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">  513</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">  516</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">  519</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">  522</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;        <span class=\"comment\">// -- *mat2x2 --</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">  527</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">  530</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">  533</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">  536</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">  539</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">  542</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">  545</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">  548</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">  551</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">  554</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">  557</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">  560</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"comment\">// -- *mat2x3 --</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">  565</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">  568</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">  571</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">  574</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">  577</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">  580</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">  583</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">  586</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">  589</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">  592</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">  595</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">  598</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        <span class=\"comment\">// -- *mat2x4 --</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">  603</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">  606</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">  609</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">  612</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">  615</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">  618</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">  621</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">  624</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">  627</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">  630</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">  633</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">  636</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        <span class=\"comment\">// -- *mat3x2 --</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">  641</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">  644</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">  647</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">  650</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">  653</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">  656</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">  659</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">  662</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">  665</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">  668</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">  671</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">  674</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <span class=\"comment\">// -- *mat3x3 --</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">  679</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">  682</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">  685</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">  688</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">  691</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">  694</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">  697</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">  700</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">  703</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">  706</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">  709</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">  712</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"comment\">// -- *mat3x4 --</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">  717</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">  720</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">  723</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">  726</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">  729</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">  732</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">  735</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">  738</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">  741</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">  744</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">  747</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">  750</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        <span class=\"comment\">// -- *mat4x2 --</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">  755</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">  758</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">  761</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">  764</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">  767</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">  770</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">  773</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">  776</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">  779</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">  782</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">  785</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">  788</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"comment\">// -- *mat4x3 --</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">  793</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">  796</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">  799</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">  802</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">  805</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">  808</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">  811</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">  814</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">  817</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">  820</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">  823</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">  826</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;        <span class=\"comment\">// -- *mat4x4 --</span></div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">  831</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">  834</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">  837</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;</div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">  840</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;</div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">  843</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">  846</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">  849</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">  852</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">  855</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;</div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">  858</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;</div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">  861</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">  864</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        <span class=\"comment\">// -- default --</span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec1                       <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec2                       <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec3                       <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec4                       <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec1                        <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec2                        <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec3                        <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec4                        <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2                       <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3                       <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4                       <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2                        <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3                        <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4                        <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x2                     <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x3                     <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x4                     <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x2                     <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x3                     <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x4                     <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x2                     <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x3                     <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x4                     <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x2                      <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x3                      <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x4                      <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x2                      <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x3                      <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x4                      <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x2                      <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x3                      <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x4                      <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec1            <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec2            <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec3            <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec4            <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec1                     <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec2                     <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec3                     <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec4                     <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2            <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3            <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4            <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2                     <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3                     <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4                     <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x2          <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x3          <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x4          <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x2          <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x3          <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x4          <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x2          <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x3          <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x4          <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x2           <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x3           <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x4           <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x2           <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x3           <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x4           <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x2           <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x3           <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x4           <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec1                      <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">  943</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec2                      <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">  946</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec3                      <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">  949</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec4                      <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">  952</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec1                       <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;</div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">  955</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec2                       <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">  958</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec3                       <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">  961</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec4                       <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">  964</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2                      <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">  967</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3                      <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">  970</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4                      <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">  973</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2                       <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">  976</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3                       <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">  979</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4                       <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">  982</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x2            <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">  985</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x3            <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">  988</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x4            <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">  991</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x2            <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">  994</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x3            <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;</div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">  997</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x4            <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\"> 1000</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x2            <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\"> 1003</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x3            <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\"> 1006</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x4            <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\"> 1009</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x2                     <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\"> 1012</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x3                     <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\"> 1015</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x4                     <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\"> 1018</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x2                     <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\"> 1021</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x3                     <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\"> 1024</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x4                     <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\"> 1027</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x2                     <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\"> 1030</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x3                     <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\"> 1033</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x4                     <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec1                      <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec2                      <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec3                      <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec4                      <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec1                       <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec2                       <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec3                       <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec4                       <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2                      <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3                      <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4                      <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2                       <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3                       <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4                       <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x2            <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x3            <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x4            <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x2            <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x3            <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x4            <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x2            <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x3            <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x4            <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x2                     <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x3                     <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x4                     <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x2                     <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x3                     <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x4                     <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x2                     <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x3                     <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x4                     <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec1           <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec2           <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec3           <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec4           <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec1            <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec2            <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec3            <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec4            <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2           <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3           <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4           <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2            <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3            <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4            <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x2         <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x3         <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x4         <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x2         <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x3         <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x4         <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x2         <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x3         <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x4         <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x2          <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x3          <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x4          <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x2          <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x3          <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x4          <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x2          <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x3          <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x4          <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec1                     <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;</div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\"> 1111</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec2                     <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\"> 1114</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec3                     <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\"> 1117</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec4                     <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\"> 1120</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec1                      <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\"> 1123</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec2                      <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;</div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\"> 1126</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec3                      <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\"> 1129</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec4                      <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\"> 1132</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2                     <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\"> 1135</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3                     <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;</div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\"> 1138</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4                     <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\"> 1141</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2                      <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\"> 1144</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3                      <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;</div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\"> 1147</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4                      <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;</div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\"> 1150</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x2           <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\"> 1153</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x3           <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\"> 1156</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x4           <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\"> 1159</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x2           <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;</div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\"> 1162</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x3           <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\"> 1165</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x4           <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\"> 1168</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x2           <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\"> 1171</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x3           <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\"> 1174</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x4           <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\"> 1177</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x2            <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;</div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\"> 1180</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x3            <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;</div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\"> 1183</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x4            <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\"> 1186</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x2            <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\"> 1189</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x3            <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;</div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\"> 1192</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x4            <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;</div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\"> 1195</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x2            <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\"> 1198</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x3            <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;</div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\"> 1201</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x4            <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;</div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec1                      <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec2                      <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec3                      <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec4                      <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec1           <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec2           <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec3           <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec4           <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_INT)</span></div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec1                     <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;</div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\"> 1219</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec2                     <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\"> 1222</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec3                     <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\"> 1225</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec4                     <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;</div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\"> 1228</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec1                      <a class=\"code\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;</div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\"> 1231</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec2                      <a class=\"code\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\"> 1234</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec3                      <a class=\"code\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\"> 1237</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec4                      <a class=\"code\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;</div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;        <span class=\"comment\">// -- Unsigned integer definition --</span></div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_UINT))</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec1                      <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec2                      <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec3                      <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec4                      <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec1           <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec2           <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec3           <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec4           <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_UINT)</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec1                     <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;</div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\"> 1257</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec2                     <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\"> 1260</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec3                     <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\"> 1263</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec4                     <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\"> 1266</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec1                      <a class=\"code\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;</div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\"> 1269</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec2                      <a class=\"code\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\"> 1272</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec3                      <a class=\"code\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"> 1275</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec4                      <a class=\"code\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_BOOL))</span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec1                      <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec2                      <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec3                      <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec4                      <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))</span></div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec1           <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec2           <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec3           <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec4           <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec1                     <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;</div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\"> 1293</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec2                     <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\"> 1296</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec3                     <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\"> 1299</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec4                     <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\"> 1302</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec1                      <a class=\"code\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\"> 1305</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec2                      <a class=\"code\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\"> 1308</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec3                      <a class=\"code\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\"> 1311</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec4                      <a class=\"code\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;</div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00303_html_gab96804e99e3a72a35740fec690c79617\"><div class=\"ttname\"><a href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">glm::packed_uvec3</a></div><div class=\"ttdeci\">packed_highp_uvec3 packed_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01272\">gtc/type_aligned.hpp:1272</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga51eaadcdc292c8750f746a5dc3e6c517\"><div class=\"ttname\"><a href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">glm::packed_mat2x2</a></div><div class=\"ttdeci\">packed_highp_mat2x2 packed_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01009\">gtc/type_aligned.hpp:1009</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa694fab1f8df5f658846573ba8ffc563\"><div class=\"ttname\"><a href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">glm::aligned_lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_lowp &gt; aligned_lowp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00609\">gtc/type_aligned.hpp:609</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa7a76555ee4853614e5755181a8dd54e\"><div class=\"ttname\"><a href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">glm::aligned_lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_lowp &gt; aligned_lowp_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00363\">gtc/type_aligned.hpp:363</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga81b5368fe485e2630aa9b44832d592e7\"><div class=\"ttname\"><a href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">glm::packed_highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_highp &gt; packed_highp_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00375\">gtc/type_aligned.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac3a5315f588ba04ad255188071ec4e22\"><div class=\"ttname\"><a href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">glm::packed_dmat2x3</a></div><div class=\"ttdeci\">packed_highp_dmat2x3 packed_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01180\">gtc/type_aligned.hpp:1180</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7c20adbe1409e3fe4544677a7f6fe954\"><div class=\"ttname\"><a href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">glm::packed_lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_lowp &gt; packed_lowp_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00316\">gtc/type_aligned.hpp:316</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c139854e5b04cf08a957dee3b510441\"><div class=\"ttname\"><a href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">glm::packed_mat4</a></div><div class=\"ttdeci\">packed_highp_mat4 packed_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00979\">gtc/type_aligned.hpp:979</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga074137e3be58528d67041c223d49f398\"><div class=\"ttname\"><a href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">glm::aligned_uvec2</a></div><div class=\"ttdeci\">aligned_highp_uvec2 aligned_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01257\">gtc/type_aligned.hpp:1257</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga59fadcd3835646e419372ae8b43c5d37\"><div class=\"ttname\"><a href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">glm::aligned_lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_lowp &gt; aligned_lowp_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00179\">gtc/type_aligned.hpp:179</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga865a9c7bb22434b1b8c5ac31e164b628\"><div class=\"ttname\"><a href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">glm::packed_highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_highp &gt; packed_highp_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00292\">gtc/type_aligned.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga12e39e797fb724a5b51fcbea2513a7da\"><div class=\"ttname\"><a href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">glm::packed_highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_highp &gt; packed_highp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00782\">gtc/type_aligned.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad87408a8350918711f845f071bbe43fb\"><div class=\"ttname\"><a href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">glm::packed_dmat2</a></div><div class=\"ttdeci\">packed_highp_dmat2 packed_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01141\">gtc/type_aligned.hpp:1141</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadac7c040c4810dd52b36fcd09d097400\"><div class=\"ttname\"><a href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">glm::packed_highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_highp &gt; packed_highp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00478\">gtc/type_aligned.hpp:478</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7e96981e872f17a780d9f1c22dc1f512\"><div class=\"ttname\"><a href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">glm::aligned_lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_lowp &gt; aligned_lowp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00799\">gtc/type_aligned.hpp:799</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6998ac2a8d7fe456b651a6336ed26bb0\"><div class=\"ttname\"><a href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">glm::packed_highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_highp &gt; packed_highp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00630\">gtc/type_aligned.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea13d89d49daca2c796aeaa82fc2c2f2\"><div class=\"ttname\"><a href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">glm::aligned_mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_mediump &gt; aligned_mediump_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00158\">gtc/type_aligned.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga02ca6255394aa778abaeb0f733c4d2b6\"><div class=\"ttname\"><a href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">glm::packed_mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_mediump &gt; packed_mediump_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00814\">gtc/type_aligned.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae157682a7847161787951ba1db4cf325\"><div class=\"ttname\"><a href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">glm::packed_ivec3</a></div><div class=\"ttdeci\">packed_highp_ivec3 packed_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01234\">gtc/type_aligned.hpp:1234</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga683c8ca66de323ea533a760abedd0efc\"><div class=\"ttname\"><a href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">glm::aligned_highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_highp &gt; aligned_highp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00726\">gtc/type_aligned.hpp:726</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf85877d38d8cfbc21d59d939afd72375\"><div class=\"ttname\"><a href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">glm::packed_mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_mediump &gt; packed_mediump_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00709\">gtc/type_aligned.hpp:709</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadd019b43fcf42e1590d45dddaa504a1a\"><div class=\"ttname\"><a href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">glm::packed_mat2</a></div><div class=\"ttdeci\">packed_highp_mat2 packed_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00973\">gtc/type_aligned.hpp:973</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8fc0e66da83599071b7ec17510686cd9\"><div class=\"ttname\"><a href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">glm::packed_lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_lowp &gt; packed_lowp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00750\">gtc/type_aligned.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga026a55ddbf2bafb1432f1157a2708616\"><div class=\"ttname\"><a href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">glm::aligned_mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_mediump &gt; aligned_mediump_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00140\">gtc/type_aligned.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadae3dcfc22d28c64d0548cbfd9d08719\"><div class=\"ttname\"><a href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">glm::aligned_lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_lowp &gt; aligned_lowp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00837\">gtc/type_aligned.hpp:837</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9bc12b0ab7be8448836711b77cc7b83a\"><div class=\"ttname\"><a href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">glm::packed_mat3</a></div><div class=\"ttdeci\">packed_highp_mat3 packed_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00976\">gtc/type_aligned.hpp:976</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gada980a3485640aa8151f368f17ad3086\"><div class=\"ttname\"><a href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">glm::packed_dmat4</a></div><div class=\"ttdeci\">packed_highp_dmat4 packed_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01147\">gtc/type_aligned.hpp:1147</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga37a0e0bf653169b581c5eea3d547fa5d\"><div class=\"ttname\"><a href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">glm::packed_vec4</a></div><div class=\"ttdeci\">packed_highp_vec4 packed_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00961\">gtc/type_aligned.hpp:961</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cb26d354dd69d23849c34c4fba88da9\"><div class=\"ttname\"><a href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">glm::aligned_highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_highp &gt; aligned_highp_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00321\">gtc/type_aligned.hpp:321</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2df58e03e5afded28707b4f7d077afb4\"><div class=\"ttname\"><a href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">glm::packed_highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_highp &gt; packed_highp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00858\">gtc/type_aligned.hpp:858</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7180b685c581adb224406a7f831608e3\"><div class=\"ttname\"><a href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">glm::aligned_mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_mediump &gt; aligned_mediump_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using medium precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00057\">gtc/type_aligned.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga66073b1ddef34b681741f572338ddb8e\"><div class=\"ttname\"><a href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">glm::aligned_highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_highp &gt; aligned_highp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00688\">gtc/type_aligned.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0581ea552d86b2b5de7a2804bed80e72\"><div class=\"ttname\"><a href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">glm::packed_dvec3</a></div><div class=\"ttdeci\">packed_highp_dvec3 packed_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01126\">gtc/type_aligned.hpp:1126</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8920e90ea9c01d9c97e604a938ce2cbd\"><div class=\"ttname\"><a href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">glm::packed_mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_mediump &gt; packed_mediump_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00102\">gtc/type_aligned.hpp:102</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5621493caac01bdd22ab6be4416b0314\"><div class=\"ttname\"><a href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">glm::packed_uvec1</a></div><div class=\"ttdeci\">packed_highp_uvec1 packed_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01266\">gtc/type_aligned.hpp:1266</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga92247ca09fa03c4013ba364f3a0fca7f\"><div class=\"ttname\"><a href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">glm::packed_lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_lowp &gt; packed_lowp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00741\">gtc/type_aligned.hpp:741</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad09b93acc43c43423408d17a64f6d7ca\"><div class=\"ttname\"><a href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">glm::aligned_lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_lowp &gt; aligned_lowp_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00078\">gtc/type_aligned.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac870c47d2d9d48503f6c9ee3baec8ce1\"><div class=\"ttname\"><a href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">glm::packed_lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_lowp &gt; packed_lowp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00636\">gtc/type_aligned.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga32794322d294e5ace7fed4a61896f270\"><div class=\"ttname\"><a href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">glm::aligned_ivec3</a></div><div class=\"ttdeci\">aligned_highp_ivec3 aligned_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01222\">gtc/type_aligned.hpp:1222</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c67b3b0adab71c8680c3d819f1fa9b7\"><div class=\"ttname\"><a href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">glm::packed_highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_highp &gt; packed_highp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00744\">gtc/type_aligned.hpp:744</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3254defa5a8f0ae4b02b45fedba84a66\"><div class=\"ttname\"><a href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">glm::packed_vec2</a></div><div class=\"ttdeci\">packed_highp_vec2 packed_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00955\">gtc/type_aligned.hpp:955</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8c32b53f628a3616aa5061e58d66fe74\"><div class=\"ttname\"><a href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">glm::packed_highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_highp &gt; packed_highp_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00117\">gtc/type_aligned.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac70667c7642ec8d50245e6e6936a3927\"><div class=\"ttname\"><a href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">glm::packed_lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_lowp &gt; packed_lowp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00551\">gtc/type_aligned.hpp:551</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga439e97795314b81cd15abd4e5c2e6e7a\"><div class=\"ttname\"><a href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">glm::packed_highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_highp &gt; packed_highp_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00126\">gtc/type_aligned.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae164a1f7879f828bc35e50b79d786b05\"><div class=\"ttname\"><a href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">glm::aligned_bvec4</a></div><div class=\"ttdeci\">aligned_highp_bvec4 aligned_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01299\">gtc/type_aligned.hpp:1299</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cf643b66664e0cd3c48759ae66c2bd0\"><div class=\"ttname\"><a href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">glm::aligned_vec3</a></div><div class=\"ttdeci\">aligned_highp_vec3 aligned_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00946\">gtc/type_aligned.hpp:946</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><div class=\"ttname\"><a href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">glm::packed_lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_lowp &gt; packed_lowp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00712\">gtc/type_aligned.hpp:712</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a8d9c3046f89d854eb758adfa0811c0\"><div class=\"ttname\"><a href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">glm::aligned_uvec3</a></div><div class=\"ttdeci\">aligned_highp_uvec3 aligned_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01260\">gtc/type_aligned.hpp:1260</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabc25e547f4de4af62403492532cd1b6d\"><div class=\"ttname\"><a href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">glm::aligned_mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_mediump &gt; aligned_mediump_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00767\">gtc/type_aligned.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabab3afcc04459c7b123604ae5dc663f6\"><div class=\"ttname\"><a href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">glm::aligned_highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_highp &gt; aligned_highp_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00451\">gtc/type_aligned.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa1f95690a78dc12e39da32943243aeef\"><div class=\"ttname\"><a href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">glm::packed_mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_mediump &gt; packed_mediump_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00212\">gtc/type_aligned.hpp:212</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga65415d2d68c9cc0ca554524a8f5510b2\"><div class=\"ttname\"><a href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">glm::aligned_highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_highp &gt; aligned_highp_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00229\">gtc/type_aligned.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga452bbbfd26e244de216e4d004d50bb74\"><div class=\"ttname\"><a href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">glm::aligned_mat4x3</a></div><div class=\"ttdeci\">aligned_highp_mat4x3 aligned_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01003\">gtc/type_aligned.hpp:1003</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaae92fcec8b2e0328ffbeac31cc4fc419\"><div class=\"ttname\"><a href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">glm::aligned_lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_lowp &gt; aligned_lowp_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00345\">gtc/type_aligned.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf9db5e8a929c317da5aa12cc53741b63\"><div class=\"ttname\"><a href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">glm::aligned_highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_highp &gt; aligned_highp_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00413\">gtc/type_aligned.hpp:413</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga14741e3d9da9ae83765389927f837331\"><div class=\"ttname\"><a href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">glm::packed_vec1</a></div><div class=\"ttdeci\">packed_highp_vec1 packed_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00952\">gtc/type_aligned.hpp:952</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga44c4accad582cfbd7226a19b83b0cadc\"><div class=\"ttname\"><a href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">glm::aligned_lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_lowp &gt; aligned_lowp_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00161\">gtc/type_aligned.hpp:161</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga39658fb13369db869d363684bd8399c0\"><div class=\"ttname\"><a href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">glm::packed_lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_lowp &gt; packed_lowp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00788\">gtc/type_aligned.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa37869eea77d28419b2fb0ff70b69bf0\"><div class=\"ttname\"><a href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">glm::aligned_dvec3</a></div><div class=\"ttdeci\">aligned_highp_dvec3 aligned_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01114\">gtc/type_aligned.hpp:1114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0a6198fe64166a6a61084d43c71518a9\"><div class=\"ttname\"><a href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">glm::packed_lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_lowp &gt; packed_lowp_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using low prec...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00096\">gtc/type_aligned.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70147763edff3fe96b03a0b98d6339a2\"><div class=\"ttname\"><a href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">glm::packed_mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_mediump &gt; packed_mediump_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00313\">gtc/type_aligned.hpp:313</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4974f46ae5a19415d91316960a53617a\"><div class=\"ttname\"><a href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">glm::aligned_dvec1</a></div><div class=\"ttdeci\">aligned_highp_dvec1 aligned_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01108\">gtc/type_aligned.hpp:1108</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><div class=\"ttname\"><a href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">glm::packed_uvec4</a></div><div class=\"ttdeci\">packed_highp_uvec4 packed_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01275\">gtc/type_aligned.hpp:1275</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga03dfc90d539cc87ea3a15a9caa5d2245\"><div class=\"ttname\"><a href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">glm::packed_dmat3</a></div><div class=\"ttdeci\">packed_highp_dmat3 packed_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01144\">gtc/type_aligned.hpp:1144</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9f8482dde741fb6bab7248b81a45465\"><div class=\"ttname\"><a href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">glm::aligned_highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_highp &gt; aligned_highp_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00137\">gtc/type_aligned.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaef26dfe3855a91644665b55c9096a8c8\"><div class=\"ttname\"><a href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">glm::aligned_highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_highp &gt; aligned_highp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00536\">gtc/type_aligned.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9e9f006970b1a00862e3e6e599eedd4c\"><div class=\"ttname\"><a href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">glm::aligned_lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_lowp &gt; aligned_lowp_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00262\">gtc/type_aligned.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f8a2cc5a686e52b1615761f4978ca62\"><div class=\"ttname\"><a href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">glm::aligned_lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_lowp &gt; aligned_lowp_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using low precision a...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00060\">gtc/type_aligned.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6b797eec76fa471e300158f3453b3b2e\"><div class=\"ttname\"><a href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">glm::aligned_mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_mediump &gt; aligned_mediump_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using medium precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00048\">gtc/type_aligned.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga30b0351eebc18c6056101359bdd3a359\"><div class=\"ttname\"><a href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">glm::packed_lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_lowp &gt; packed_lowp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00826\">gtc/type_aligned.hpp:826</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea3ccc5ef5b178e6e49b4fa1427605d3\"><div class=\"ttname\"><a href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">glm::aligned_lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_lowp &gt; aligned_lowp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00732\">gtc/type_aligned.hpp:732</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae389c2071cf3cdb33e7812c6fd156710\"><div class=\"ttname\"><a href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">glm::packed_highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_highp &gt; packed_highp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00773\">gtc/type_aligned.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga80dee705d714300378e0847f45059097\"><div class=\"ttname\"><a href=\"a00303.html#ga80dee705d714300378e0847f45059097\">glm::aligned_mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_mediump &gt; aligned_mediump_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00644\">gtc/type_aligned.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0effece4545acdebdc2a5512a303110e\"><div class=\"ttname\"><a href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">glm::aligned_mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_mediump &gt; aligned_mediump_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00796\">gtc/type_aligned.hpp:796</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab9e669c4efd52d3347fc6d5f6b20fd59\"><div class=\"ttname\"><a href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">glm::aligned_lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_lowp &gt; aligned_lowp_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00244\">gtc/type_aligned.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43cd36d430c5187bfdca34a23cb41581\"><div class=\"ttname\"><a href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">glm::packed_mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_mediump &gt; packed_mediump_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00434\">gtc/type_aligned.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><div class=\"ttname\"><a href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">glm::packed_mat3x3</a></div><div class=\"ttdeci\">packed_highp_mat3x3 packed_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01021\">gtc/type_aligned.hpp:1021</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><div class=\"ttname\"><a href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">glm::packed_highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_highp &gt; packed_highp_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using high pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00099\">gtc/type_aligned.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa281a47d5d627313984d0f8df993b648\"><div class=\"ttname\"><a href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">glm::aligned_lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_lowp &gt; aligned_lowp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00656\">gtc/type_aligned.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga13a75c6cbd0a411f694bc82486cd1e55\"><div class=\"ttname\"><a href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">glm::packed_mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_mediump &gt; packed_mediump_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00472\">gtc/type_aligned.hpp:472</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga17c424412207b00dba1cf587b099eea3\"><div class=\"ttname\"><a href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">glm::aligned_lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_lowp &gt; aligned_lowp_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00419\">gtc/type_aligned.hpp:419</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae20617435a6d042d7c38da2badd64a09\"><div class=\"ttname\"><a href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">glm::packed_dmat4x4</a></div><div class=\"ttdeci\">packed_highp_dmat4x4 packed_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01201\">gtc/type_aligned.hpp:1201</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7a4536b6e1f2ebb690f63816b5d7e48b\"><div class=\"ttname\"><a href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">glm::aligned_lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_lowp &gt; aligned_lowp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00580\">gtc/type_aligned.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a1dd2387725a335413d4c4fee8609c4\"><div class=\"ttname\"><a href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">glm::packed_lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_lowp &gt; packed_lowp_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00513\">gtc/type_aligned.hpp:513</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga56473759d2702ee19ab7f91d0017fa70\"><div class=\"ttname\"><a href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">glm::packed_highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_highp &gt; packed_highp_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using high pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00090\">gtc/type_aligned.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga26a0b61e444a51a37b9737cf4d84291b\"><div class=\"ttname\"><a href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">glm::aligned_mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_mediump &gt; aligned_mediump_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00568\">gtc/type_aligned.hpp:568</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga245c12d2daf67feecaa2d3277c8f6661\"><div class=\"ttname\"><a href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">glm::packed_highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_highp &gt; packed_highp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00545\">gtc/type_aligned.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacb183eb5e67ec0d0ea5a016cba962810\"><div class=\"ttname\"><a href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">glm::aligned_mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_mediump &gt; aligned_mediump_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00176\">gtc/type_aligned.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac93f9b1a35b9de4f456b9f2dfeaf1097\"><div class=\"ttname\"><a href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">glm::packed_lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_lowp &gt; packed_lowp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00446\">gtc/type_aligned.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga62a2dfd668c91072b72c3109fc6cda28\"><div class=\"ttname\"><a href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">glm::aligned_mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_mediump &gt; aligned_mediump_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00425\">gtc/type_aligned.hpp:425</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga68c9bb24f387b312bae6a0a68e74d95e\"><div class=\"ttname\"><a href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">glm::packed_mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_mediump &gt; packed_mediump_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00369\">gtc/type_aligned.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa409cfb737bd59b68dc683e9b03930cc\"><div class=\"ttname\"><a href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">glm::aligned_dmat4x2</a></div><div class=\"ttdeci\">aligned_highp_dmat4x2 aligned_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01168\">gtc/type_aligned.hpp:1168</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0294d4c45151425c86a11deee7693c0e\"><div class=\"ttname\"><a href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">glm::packed_lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_lowp &gt; packed_lowp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00864\">gtc/type_aligned.hpp:864</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga22bd6382b16052e301edbfc031b9f37a\"><div class=\"ttname\"><a href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">glm::packed_highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_highp &gt; packed_highp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00554\">gtc/type_aligned.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5adf1802c5375a9dfb1729691bedd94e\"><div class=\"ttname\"><a href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">glm::packed_lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_lowp &gt; packed_lowp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00703\">gtc/type_aligned.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4584f64394bd7123b7a8534741e4916c\"><div class=\"ttname\"><a href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">glm::packed_highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_highp &gt; packed_highp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00811\">gtc/type_aligned.hpp:811</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3b76ba17ae5d53debeb6f7e55919a57c\"><div class=\"ttname\"><a href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">glm::aligned_mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_mediump &gt; aligned_mediump_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00454\">gtc/type_aligned.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacab7374b560745cb1d0a306a90353f58\"><div class=\"ttname\"><a href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">glm::aligned_highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_highp &gt; aligned_highp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00802\">gtc/type_aligned.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac6036449ab1c4abf8efe1ea00fcdd1c9\"><div class=\"ttname\"><a href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">glm::aligned_lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_lowp &gt; aligned_lowp_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00087\">gtc/type_aligned.hpp:87</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a8a5f8c47cd7d5502dd9932f83472b9\"><div class=\"ttname\"><a href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">glm::aligned_mat2</a></div><div class=\"ttdeci\">aligned_highp_mat2 aligned_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00964\">gtc/type_aligned.hpp:964</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa292ebaa907afdecb2d5967fb4fb1247\"><div class=\"ttname\"><a href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">glm::aligned_mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_mediump &gt; aligned_mediump_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00843\">gtc/type_aligned.hpp:843</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabbf0f15e9c3d9868e43241ad018f82bd\"><div class=\"ttname\"><a href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">glm::aligned_mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_mediump &gt; aligned_mediump_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00250\">gtc/type_aligned.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae1964ba70d15915e5b710926decbb3cb\"><div class=\"ttname\"><a href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">glm::aligned_bvec3</a></div><div class=\"ttdeci\">aligned_highp_bvec3 aligned_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01296\">gtc/type_aligned.hpp:1296</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabcc33efb4d5e83b8fe4706360e75b932\"><div class=\"ttname\"><a href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">glm::packed_uvec2</a></div><div class=\"ttdeci\">packed_highp_uvec2 packed_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01269\">gtc/type_aligned.hpp:1269</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga226f5ec7a953cea559c16fe3aff9924f\"><div class=\"ttname\"><a href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">glm::aligned_lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_lowp &gt; aligned_lowp_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00336\">gtc/type_aligned.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac00e15efded8a57c9dec3aed0fb547e7\"><div class=\"ttname\"><a href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">glm::aligned_lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_lowp &gt; aligned_lowp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00466\">gtc/type_aligned.hpp:466</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf304f64c06743c1571401504d3f50259\"><div class=\"ttname\"><a href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">glm::packed_mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_mediump &gt; packed_mediump_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00852\">gtc/type_aligned.hpp:852</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabdd60462042859f876c17c7346c732a5\"><div class=\"ttname\"><a href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">glm::aligned_highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_highp &gt; aligned_highp_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00348\">gtc/type_aligned.hpp:348</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><div class=\"ttname\"><a href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">glm::packed_highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_highp &gt; packed_highp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00820\">gtc/type_aligned.hpp:820</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7661d759d6ad218e132e3d051e7b2c6c\"><div class=\"ttname\"><a href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">glm::packed_lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_lowp &gt; packed_lowp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00817\">gtc/type_aligned.hpp:817</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga53ac5d252317f1fa43c2ef921857bf13\"><div class=\"ttname\"><a href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">glm::aligned_lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_lowp &gt; aligned_lowp_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00143\">gtc/type_aligned.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf22b77f1cf3e73b8b1dddfe7f959357c\"><div class=\"ttname\"><a href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">glm::packed_lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_lowp &gt; packed_lowp_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00114\">gtc/type_aligned.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga83aab4d191053f169c93a3e364f2e118\"><div class=\"ttname\"><a href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">glm::aligned_lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_lowp &gt; aligned_lowp_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00271\">gtc/type_aligned.hpp:271</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9376d82f0e946e25137eb55543e6ce\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">glm::aligned_mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_mediump &gt; aligned_mediump_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00501\">gtc/type_aligned.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad43a240533f388ce0504b495d9df3d52\"><div class=\"ttname\"><a href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">glm::packed_mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_mediump &gt; packed_mediump_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00624\">gtc/type_aligned.hpp:624</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6718822cd7af005a9b5bd6ee282f6ba6\"><div class=\"ttname\"><a href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">glm::packed_highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_highp &gt; packed_highp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00516\">gtc/type_aligned.hpp:516</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga46f372a006345c252a41267657cc22c0\"><div class=\"ttname\"><a href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">glm::aligned_mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_mediump &gt; aligned_mediump_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00758\">gtc/type_aligned.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabc93a9560593bd32e099c908531305f5\"><div class=\"ttname\"><a href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">glm::packed_mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_mediump &gt; packed_mediump_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00738\">gtc/type_aligned.hpp:738</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0b570da473fec4619db5aa0dce5133b0\"><div class=\"ttname\"><a href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">glm::packed_highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_highp &gt; packed_highp_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00301\">gtc/type_aligned.hpp:301</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga449a3ec2dde6b6bb4bb94c49a6aad388\"><div class=\"ttname\"><a href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">glm::aligned_dmat2x2</a></div><div class=\"ttdeci\">aligned_highp_dmat2x2 aligned_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01150\">gtc/type_aligned.hpp:1150</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9d60e32d3fcb51f817046cd881fdbf57\"><div class=\"ttname\"><a href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">glm::packed_mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_mediump &gt; packed_mediump_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00443\">gtc/type_aligned.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga72102fa6ac2445aa3bb203128ad52449\"><div class=\"ttname\"><a href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">glm::packed_highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_highp &gt; packed_highp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00735\">gtc/type_aligned.hpp:735</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad63515526cccfe88ffa8fe5ed64f95f8\"><div class=\"ttname\"><a href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">glm::packed_mat3x4</a></div><div class=\"ttdeci\">packed_highp_mat3x4 packed_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01024\">gtc/type_aligned.hpp:1024</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa4126969c765e7faa2ebf6951c22ffb\"><div class=\"ttname\"><a href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">glm::packed_mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_mediump &gt; packed_mediump_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00633\">gtc/type_aligned.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c29fb42bab9a4f9b66bc60b2e514a34\"><div class=\"ttname\"><a href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">glm::packed_mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_mediump &gt; packed_mediump_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00120\">gtc/type_aligned.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab92c6d7d58d43dfb8147e9aedfe8351b\"><div class=\"ttname\"><a href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">glm::aligned_lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_lowp &gt; aligned_lowp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00504\">gtc/type_aligned.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab286466e19f7399c8d25089da9400d43\"><div class=\"ttname\"><a href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">glm::packed_mat4x3</a></div><div class=\"ttdeci\">packed_highp_mat4x3 packed_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01030\">gtc/type_aligned.hpp:1030</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga931731b8ae3b54c7ecc221509dae96bc\"><div class=\"ttname\"><a href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">glm::packed_lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_lowp &gt; packed_lowp_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00390\">gtc/type_aligned.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70130dc8ed9c966ec2a221ce586d45d8\"><div class=\"ttname\"><a href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">glm::packed_mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_mediump &gt; packed_mediump_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00387\">gtc/type_aligned.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9af1eabe22f569e70d9893be72eda0f5\"><div class=\"ttname\"><a href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">glm::aligned_mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_mediump &gt; aligned_mediump_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00149\">gtc/type_aligned.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1fe4c5f56b8087d773aa90dc88a257a7\"><div class=\"ttname\"><a href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">glm::packed_ivec2</a></div><div class=\"ttdeci\">packed_highp_ivec2 packed_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01231\">gtc/type_aligned.hpp:1231</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga76298aed82a439063c3d55980c84aa0b\"><div class=\"ttname\"><a href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">glm::aligned_ivec1</a></div><div class=\"ttdeci\">aligned_highp_ivec1 aligned_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01216\">gtc/type_aligned.hpp:1216</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga06f26d54dca30994eb1fdadb8e69f4a2\"><div class=\"ttname\"><a href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">glm::packed_mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_mediump &gt; packed_mediump_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00295\">gtc/type_aligned.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga576a3f8372197a56a79dee1c8280f485\"><div class=\"ttname\"><a href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">glm::packed_lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_lowp &gt; packed_lowp_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00307\">gtc/type_aligned.hpp:307</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6dc65249730698d3cc9ac5d7e1bc4d72\"><div class=\"ttname\"><a href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">glm::packed_dmat4x2</a></div><div class=\"ttdeci\">packed_highp_dmat4x2 packed_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01195\">gtc/type_aligned.hpp:1195</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga91bc1f513bb9b0fd60281d57ded9a48c\"><div class=\"ttname\"><a href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">glm::aligned_mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_mediump &gt; aligned_mediump_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00360\">gtc/type_aligned.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0731b593c5e33559954c80f8687e76c6\"><div class=\"ttname\"><a href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">glm::aligned_highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_highp &gt; aligned_highp_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00173\">gtc/type_aligned.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><div class=\"ttname\"><a href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">glm::packed_lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_lowp &gt; packed_lowp_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00372\">gtc/type_aligned.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8fad35c5677f228e261fe541f15363a4\"><div class=\"ttname\"><a href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">glm::aligned_highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_highp &gt; aligned_highp_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00330\">gtc/type_aligned.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga999d82719696d4c59f4d236dd08f273d\"><div class=\"ttname\"><a href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">glm::packed_highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_highp &gt; packed_highp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00592\">gtc/type_aligned.hpp:592</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf6f041b212c57664d88bc6aefb7e36f3\"><div class=\"ttname\"><a href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">glm::aligned_mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_mediump &gt; aligned_mediump_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00416\">gtc/type_aligned.hpp:416</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><div class=\"ttname\"><a href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">glm::aligned_mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_mediump &gt; aligned_mediump_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00615\">gtc/type_aligned.hpp:615</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae473587cff3092edc0877fc691c26a0b\"><div class=\"ttname\"><a href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">glm::packed_lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_lowp &gt; packed_lowp_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00408\">gtc/type_aligned.hpp:408</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0c754a783b6fcf80374c013371c4dae9\"><div class=\"ttname\"><a href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">glm::packed_mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_mediump &gt; packed_mediump_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00194\">gtc/type_aligned.hpp:194</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab173a333e6b7ce153ceba66ac4a321cf\"><div class=\"ttname\"><a href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">glm::aligned_highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_highp &gt; aligned_highp_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00146\">gtc/type_aligned.hpp:146</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0cf4f7c9a264941519acad286e055ea\"><div class=\"ttname\"><a href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">glm::aligned_lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_lowp &gt; aligned_lowp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00618\">gtc/type_aligned.hpp:618</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga832476bb1c59ef673db37433ff34e399\"><div class=\"ttname\"><a href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">glm::aligned_mat2x3</a></div><div class=\"ttdeci\">aligned_highp_mat2x3 aligned_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00985\">gtc/type_aligned.hpp:985</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70dcb9ef0b24e832772a7405efa9669a\"><div class=\"ttname\"><a href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">glm::packed_lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_lowp &gt; packed_lowp_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00437\">gtc/type_aligned.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6099dd7878d0a78101a4250d8cd2d736\"><div class=\"ttname\"><a href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">glm::aligned_mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_mediump &gt; aligned_mediump_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00342\">gtc/type_aligned.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac969befedbda69eb78d4e23f751fdbee\"><div class=\"ttname\"><a href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">glm::packed_lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_lowp &gt; packed_lowp_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00224\">gtc/type_aligned.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga54f368ec6b514a5aa4f28d40e6f93ef7\"><div class=\"ttname\"><a href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">glm::packed_highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_highp &gt; packed_highp_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00200\">gtc/type_aligned.hpp:200</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga199131fd279c92c2ac12df6d978f1dd6\"><div class=\"ttname\"><a href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">glm::packed_dmat3x4</a></div><div class=\"ttdeci\">packed_highp_dmat3x4 packed_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01192\">gtc/type_aligned.hpp:1192</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf969eb879c76a5f4576e4a1e10095cf6\"><div class=\"ttname\"><a href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">glm::packed_mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_mediump &gt; packed_mediump_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00481\">gtc/type_aligned.hpp:481</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0931ac7807fa1428c7bbf249efcdf0d\"><div class=\"ttname\"><a href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">glm::aligned_lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_lowp &gt; aligned_lowp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00808\">gtc/type_aligned.hpp:808</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1fbfba14368b742972d3b58a0a303682\"><div class=\"ttname\"><a href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">glm::aligned_highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_highp &gt; aligned_highp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00840\">gtc/type_aligned.hpp:840</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9a15514a0631f700de6312b9d5db3a73\"><div class=\"ttname\"><a href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">glm::packed_mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_mediump &gt; packed_mediump_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00785\">gtc/type_aligned.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga67e7102557d6067bb6ac00d4ad0e1374\"><div class=\"ttname\"><a href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">glm::packed_mat4x4</a></div><div class=\"ttdeci\">packed_highp_mat4x4 packed_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01033\">gtc/type_aligned.hpp:1033</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga253e8379b08d2dc6fe2800b2fb913203\"><div class=\"ttname\"><a href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">glm::packed_highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_highp &gt; packed_highp_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00507\">gtc/type_aligned.hpp:507</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacaa7407ea00ffdd322ce86a57adb547e\"><div class=\"ttname\"><a href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">glm::aligned_highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_highp &gt; aligned_highp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00498\">gtc/type_aligned.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab069b2fc2ec785fc4e193cf26c022679\"><div class=\"ttname\"><a href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">glm::aligned_highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_highp &gt; aligned_highp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00650\">gtc/type_aligned.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga054050e9d4e78d81db0e6d1573b1c624\"><div class=\"ttname\"><a href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">glm::packed_lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_lowp &gt; packed_lowp_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using low prec...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00105\">gtc/type_aligned.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga25ea2f684e36aa5e978b4f2f86593824\"><div class=\"ttname\"><a href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">glm::aligned_lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_lowp &gt; aligned_lowp_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00495\">gtc/type_aligned.hpp:495</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><div class=\"ttname\"><a href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">glm::packed_mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_mediump &gt; packed_mediump_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00304\">gtc/type_aligned.hpp:304</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga621e89ca1dbdcb7b5a3e7de237c44121\"><div class=\"ttname\"><a href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">glm::aligned_dmat4x3</a></div><div class=\"ttdeci\">aligned_highp_dmat4x3 aligned_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01171\">gtc/type_aligned.hpp:1171</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf806dfdaffb2e9f7681b1cd2825898ce\"><div class=\"ttname\"><a href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">glm::aligned_lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_lowp &gt; aligned_lowp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00770\">gtc/type_aligned.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8897c6d9adb4140b1c3b0a07b8f0a430\"><div class=\"ttname\"><a href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">glm::packed_mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_mediump &gt; packed_mediump_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00595\">gtc/type_aligned.hpp:595</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga93a23ca3d42818d56e0702213c66354b\"><div class=\"ttname\"><a href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">glm::aligned_highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_highp &gt; aligned_highp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00764\">gtc/type_aligned.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga88061c72c997b94c420f2b0a60d9df26\"><div class=\"ttname\"><a href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">glm::aligned_mat3x4</a></div><div class=\"ttdeci\">aligned_highp_mat3x4 aligned_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00997\">gtc/type_aligned.hpp:997</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad8220a93d2fca2dd707821b4ab6f809e\"><div class=\"ttname\"><a href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">glm::aligned_lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_lowp &gt; aligned_lowp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00846\">gtc/type_aligned.hpp:846</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga312864244cae4e8f10f478cffd0f76de\"><div class=\"ttname\"><a href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">glm::aligned_mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_mediump &gt; aligned_mediump_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00834\">gtc/type_aligned.hpp:834</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><div class=\"ttname\"><a href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">glm::aligned_mat4</a></div><div class=\"ttdeci\">aligned_highp_mat4 aligned_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00970\">gtc/type_aligned.hpp:970</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeeaff6c132ec91ebd21da3a2399548ea\"><div class=\"ttname\"><a href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">glm::packed_lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_lowp &gt; packed_lowp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00560\">gtc/type_aligned.hpp:560</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa891048dddef4627df33809ec726219\"><div class=\"ttname\"><a href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">glm::packed_mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_mediump &gt; packed_mediump_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00203\">gtc/type_aligned.hpp:203</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae36de20a4c0e0b1444b7903ae811d94e\"><div class=\"ttname\"><a href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">glm::packed_dmat3x2</a></div><div class=\"ttdeci\">packed_highp_dmat3x2 packed_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01186\">gtc/type_aligned.hpp:1186</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4b0ee7996651ddd04eaa0c4cdbb66332\"><div class=\"ttname\"><a href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">glm::packed_mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_mediump &gt; packed_mediump_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00519\">gtc/type_aligned.hpp:519</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><div class=\"ttname\"><a href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">glm::aligned_lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_lowp &gt; aligned_lowp_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00235\">gtc/type_aligned.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6904d09b62141d09712b76983892f95b\"><div class=\"ttname\"><a href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">glm::packed_highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_highp &gt; packed_highp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00621\">gtc/type_aligned.hpp:621</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga50c9af5aa3a848956d625fc64dc8488e\"><div class=\"ttname\"><a href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">glm::aligned_highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_highp &gt; aligned_highp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00565\">gtc/type_aligned.hpp:565</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa9cea174d342dd9650e3436823cab23\"><div class=\"ttname\"><a href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">glm::packed_mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_mediump &gt; packed_mediump_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00700\">gtc/type_aligned.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4015f36bf5a5adb6ac5d45beed959867\"><div class=\"ttname\"><a href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">glm::packed_highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_highp &gt; packed_highp_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00366\">gtc/type_aligned.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ff8ed402c93d280ff0597c1c5e7c548\"><div class=\"ttname\"><a href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">glm::aligned_uvec1</a></div><div class=\"ttdeci\">aligned_highp_uvec1 aligned_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01254\">gtc/type_aligned.hpp:1254</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga40d49648083a0498a12a4bb41ae6ece8\"><div class=\"ttname\"><a href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">glm::aligned_highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_highp &gt; aligned_highp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00831\">gtc/type_aligned.hpp:831</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa458f9d9e0934bae3097e2a373b24707\"><div class=\"ttname\"><a href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">glm::packed_mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_mediump &gt; packed_mediump_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00776\">gtc/type_aligned.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><div class=\"ttname\"><a href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">glm::aligned_lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_lowp &gt; aligned_lowp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00647\">gtc/type_aligned.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0d22400969dd223465b2900fecfb4f53\"><div class=\"ttname\"><a href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">glm::packed_lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_lowp &gt; packed_lowp_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00475\">gtc/type_aligned.hpp:475</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga09f517d88b996ef1b2f42fd54222b82d\"><div class=\"ttname\"><a href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">glm::packed_highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_highp &gt; packed_highp_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00402\">gtc/type_aligned.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga05e6d4c908965d04191c2070a8d0a65e\"><div class=\"ttname\"><a href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">glm::aligned_vec1</a></div><div class=\"ttdeci\">aligned_highp_vec1 aligned_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00940\">gtc/type_aligned.hpp:940</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaccccd090e185450caa28b5b63ad4e8f0\"><div class=\"ttname\"><a href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">glm::packed_vec3</a></div><div class=\"ttdeci\">packed_highp_vec3 packed_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00958\">gtc/type_aligned.hpp:958</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga301b76a89b8a9625501ca58815017f20\"><div class=\"ttname\"><a href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">glm::packed_mat2x3</a></div><div class=\"ttdeci\">packed_highp_mat2x3 packed_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01012\">gtc/type_aligned.hpp:1012</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacfa4a542f1b20a5b63ad702dfb6fd587\"><div class=\"ttname\"><a href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">glm::aligned_mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_mediump &gt; aligned_mediump_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00268\">gtc/type_aligned.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacb78126ea2eb779b41c7511128ff1283\"><div class=\"ttname\"><a href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">glm::aligned_mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_mediump &gt; aligned_mediump_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00075\">gtc/type_aligned.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae766b317c5afec852bfb3d74a3c54bc8\"><div class=\"ttname\"><a href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">glm::aligned_bvec2</a></div><div class=\"ttdeci\">aligned_highp_bvec2 aligned_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01293\">gtc/type_aligned.hpp:1293</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa33d8e06657a777efb0c72c44ce87a9\"><div class=\"ttname\"><a href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">glm::packed_dmat2x2</a></div><div class=\"ttdeci\">packed_highp_dmat2x2 packed_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01177\">gtc/type_aligned.hpp:1177</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8f22607dcd090cd280071ccc689f4079\"><div class=\"ttname\"><a href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">glm::packed_lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_lowp &gt; packed_lowp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00779\">gtc/type_aligned.hpp:779</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae398fc3156f51d3684b08f62c1a5a6d4\"><div class=\"ttname\"><a href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">glm::packed_dmat2x4</a></div><div class=\"ttdeci\">packed_highp_dmat2x4 packed_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01183\">gtc/type_aligned.hpp:1183</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga073fd6e8b241afade6d8afbd676b2667\"><div class=\"ttname\"><a href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">glm::aligned_highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_highp &gt; aligned_highp_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00256\">gtc/type_aligned.hpp:256</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab4c6414a59539e66a242ad4cf4b476b4\"><div class=\"ttname\"><a href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">glm::packed_mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_mediump &gt; packed_mediump_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00221\">gtc/type_aligned.hpp:221</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga780a35f764020f553a9601a3fcdcd059\"><div class=\"ttname\"><a href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">glm::aligned_bvec1</a></div><div class=\"ttdeci\">aligned_highp_bvec1 aligned_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01290\">gtc/type_aligned.hpp:1290</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5c0df24ba85eafafc0eb0c90690510ed\"><div class=\"ttname\"><a href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">glm::aligned_mat3x2</a></div><div class=\"ttdeci\">aligned_highp_mat3x2 aligned_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00991\">gtc/type_aligned.hpp:991</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><div class=\"ttname\"><a href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">glm::aligned_lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_lowp &gt; aligned_lowp_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00069\">gtc/type_aligned.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga649d0acf01054b17e679cf00e150e025\"><div class=\"ttname\"><a href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">glm::aligned_mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_mediump &gt; aligned_mediump_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00691\">gtc/type_aligned.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga128cd52649621861635fab746df91735\"><div class=\"ttname\"><a href=\"a00303.html#ga128cd52649621861635fab746df91735\">glm::packed_lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_lowp &gt; packed_lowp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00665\">gtc/type_aligned.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga069cc8892aadae144c00f35297617d44\"><div class=\"ttname\"><a href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">glm::packed_highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_highp &gt; packed_highp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00583\">gtc/type_aligned.hpp:583</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga776f18d1a6e7d399f05d386167dc60f5\"><div class=\"ttname\"><a href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">glm::packed_lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_lowp &gt; packed_lowp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00855\">gtc/type_aligned.hpp:855</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabf842c45eea186170c267a328e3f3b7d\"><div class=\"ttname\"><a href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">glm::aligned_uvec4</a></div><div class=\"ttdeci\">aligned_highp_uvec4 aligned_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01263\">gtc/type_aligned.hpp:1263</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab85245913eaa40ab82adabcae37086cb\"><div class=\"ttname\"><a href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">glm::packed_bvec2</a></div><div class=\"ttdeci\">packed_highp_bvec2 packed_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01305\">gtc/type_aligned.hpp:1305</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2f7b8c99ba6f2d07c73a195a8143c259\"><div class=\"ttname\"><a href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">glm::aligned_highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_highp &gt; aligned_highp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00679\">gtc/type_aligned.hpp:679</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3180d7db84a74c402157df3bbc0ae3ed\"><div class=\"ttname\"><a href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">glm::packed_bvec4</a></div><div class=\"ttdeci\">packed_highp_bvec4 packed_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01311\">gtc/type_aligned.hpp:1311</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f79eae5927c9033d84617e49f6f34e4\"><div class=\"ttname\"><a href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">glm::aligned_ivec4</a></div><div class=\"ttdeci\">aligned_highp_ivec4 aligned_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01225\">gtc/type_aligned.hpp:1225</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf2e07527d678440bf0c20adbeb9177c5\"><div class=\"ttname\"><a href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">glm::packed_highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_highp &gt; packed_highp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00697\">gtc/type_aligned.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad6f1b4e3a51c2c051814b60d5d1b8895\"><div class=\"ttname\"><a href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">glm::packed_highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_highp &gt; packed_highp_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00384\">gtc/type_aligned.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga134f0d99fbd2459c13cd9ebd056509fa\"><div class=\"ttname\"><a href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">glm::packed_mat3x2</a></div><div class=\"ttdeci\">packed_highp_mat3x2 packed_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01018\">gtc/type_aligned.hpp:1018</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04db692662a4908beeaf5a5ba6e19483\"><div class=\"ttname\"><a href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">glm::aligned_highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_highp &gt; aligned_highp_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00164\">gtc/type_aligned.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga19aa695ffdb45ce29f7ea0b5029627de\"><div class=\"ttname\"><a href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">glm::aligned_dmat3</a></div><div class=\"ttdeci\">aligned_highp_dmat3 aligned_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01135\">gtc/type_aligned.hpp:1135</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6eca5170bb35eac90b4972590fd31a06\"><div class=\"ttname\"><a href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">glm::aligned_highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_highp &gt; aligned_highp_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00247\">gtc/type_aligned.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga07cb8e846666cbf56045b064fb553d2e\"><div class=\"ttname\"><a href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">glm::aligned_lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_lowp &gt; aligned_lowp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00542\">gtc/type_aligned.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9fc2167b47c9be9295f2d8eea7f0ca75\"><div class=\"ttname\"><a href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">glm::aligned_highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_highp &gt; aligned_highp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00641\">gtc/type_aligned.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5b80e28396c6ef7d32c6fd18df498451\"><div class=\"ttname\"><a href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">glm::aligned_highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_highp &gt; aligned_highp_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00072\">gtc/type_aligned.hpp:72</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadab11a7504430825b648ff7c7e36b725\"><div class=\"ttname\"><a href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">glm::aligned_mat2x4</a></div><div class=\"ttdeci\">aligned_highp_mat2x4 aligned_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00988\">gtc/type_aligned.hpp:988</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeefee8317192174596852ce19b602720\"><div class=\"ttname\"><a href=\"a00303.html#gaeefee8317192174596852ce19b602720\">glm::aligned_mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_mediump &gt; aligned_mediump_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00492\">gtc/type_aligned.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga532f0c940649b1ee303acd572fc35531\"><div class=\"ttname\"><a href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">glm::packed_dvec1</a></div><div class=\"ttdeci\">packed_highp_dvec1 packed_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01120\">gtc/type_aligned.hpp:1120</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5ccb2baeb0ab57b818c24e0d486c59d0\"><div class=\"ttname\"><a href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">glm::aligned_dmat2x4</a></div><div class=\"ttdeci\">aligned_highp_dmat2x4 aligned_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01156\">gtc/type_aligned.hpp:1156</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga39e8bb9b70e5694964e8266a21ba534e\"><div class=\"ttname\"><a href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">glm::packed_mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_mediump &gt; packed_mediump_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00557\">gtc/type_aligned.hpp:557</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9189210cabd6651a5e14a4c46fb20598\"><div class=\"ttname\"><a href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">glm::packed_lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_lowp &gt; packed_lowp_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00289\">gtc/type_aligned.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga46b1b0b9eb8625a5d69137bd66cd13dc\"><div class=\"ttname\"><a href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">glm::aligned_lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_lowp &gt; aligned_lowp_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00354\">gtc/type_aligned.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa582f38c82aef61dea7aaedf15bb06a6\"><div class=\"ttname\"><a href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">glm::packed_highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_highp &gt; packed_highp_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00393\">gtc/type_aligned.hpp:393</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea9c555e669dc56c45d95dcc75d59bf3\"><div class=\"ttname\"><a href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">glm::packed_lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_lowp &gt; packed_lowp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00627\">gtc/type_aligned.hpp:627</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0682462f8096a226773e20fac993cde5\"><div class=\"ttname\"><a href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">glm::aligned_vec2</a></div><div class=\"ttdeci\">aligned_highp_vec2 aligned_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00943\">gtc/type_aligned.hpp:943</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabb04f459d81d753d278b2072e2375e8e\"><div class=\"ttname\"><a href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">glm::aligned_mat2x2</a></div><div class=\"ttdeci\">aligned_highp_mat2x2 aligned_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00982\">gtc/type_aligned.hpp:982</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3894a059eeaacec8791c25de398d9955\"><div class=\"ttname\"><a href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">glm::packed_lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_lowp &gt; packed_lowp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00484\">gtc/type_aligned.hpp:484</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga635bf3732281a2c2ca54d8f9d33d178f\"><div class=\"ttname\"><a href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">glm::aligned_dmat3x3</a></div><div class=\"ttdeci\">aligned_highp_dmat3x3 aligned_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01162\">gtc/type_aligned.hpp:1162</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5b2dc48fa19b684d207d69c6b145eb63\"><div class=\"ttname\"><a href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">glm::packed_highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_highp &gt; packed_highp_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00191\">gtc/type_aligned.hpp:191</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9b7feec247d378dd407ba81f56ea96c8\"><div class=\"ttname\"><a href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">glm::aligned_mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_mediump &gt; aligned_mediump_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00539\">gtc/type_aligned.hpp:539</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf111fed760ecce16cb1988807569bee5\"><div class=\"ttname\"><a href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">glm::packed_lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_lowp &gt; packed_lowp_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00123\">gtc/type_aligned.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga958210fe245a75b058325d367c951132\"><div class=\"ttname\"><a href=\"a00303.html#ga958210fe245a75b058325d367c951132\">glm::packed_lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_lowp &gt; packed_lowp_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00215\">gtc/type_aligned.hpp:215</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadf202aaa9ed71c09f9bbe347e43f8764\"><div class=\"ttname\"><a href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">glm::packed_dmat4x3</a></div><div class=\"ttdeci\">packed_highp_dmat4x3 packed_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01198\">gtc/type_aligned.hpp:1198</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f3148a72355e39932d6855baca42ebc\"><div class=\"ttname\"><a href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">glm::aligned_lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_lowp &gt; aligned_lowp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00694\">gtc/type_aligned.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabdd5fbffe8b8b8a7b33523f25b120dbe\"><div class=\"ttname\"><a href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">glm::packed_highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_highp &gt; packed_highp_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00469\">gtc/type_aligned.hpp:469</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga53d519a7b1bfb69076b3ec206a6b3bd1\"><div class=\"ttname\"><a href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">glm::aligned_dmat2x3</a></div><div class=\"ttdeci\">aligned_highp_dmat2x3 aligned_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01153\">gtc/type_aligned.hpp:1153</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04bf49316ee777d42fcfe681ee37d7be\"><div class=\"ttname\"><a href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">glm::aligned_mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_mediump &gt; aligned_mediump_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00530\">gtc/type_aligned.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0e44aeb930a47f9cbf2db15b56433b0f\"><div class=\"ttname\"><a href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">glm::aligned_lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_lowp &gt; aligned_lowp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00533\">gtc/type_aligned.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5546d828d63010a8f9cf81161ad0275a\"><div class=\"ttname\"><a href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">glm::packed_mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_mediump &gt; packed_mediump_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00129\">gtc/type_aligned.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga03e1edf5666c40affe39aee35c87956f\"><div class=\"ttname\"><a href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">glm::packed_lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_lowp &gt; packed_lowp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00522\">gtc/type_aligned.hpp:522</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga11581a06fc7bf941fa4d4b6aca29812c\"><div class=\"ttname\"><a href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">glm::packed_ivec1</a></div><div class=\"ttdeci\">packed_highp_ivec1 packed_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01228\">gtc/type_aligned.hpp:1228</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae3c8750f53259ece334d3aa3b3649a40\"><div class=\"ttname\"><a href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">glm::packed_lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_lowp &gt; packed_lowp_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00132\">gtc/type_aligned.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5f5123d834bd1170edf8c386834e112c\"><div class=\"ttname\"><a href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">glm::aligned_dmat3x2</a></div><div class=\"ttdeci\">aligned_highp_dmat3x2 aligned_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01159\">gtc/type_aligned.hpp:1159</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab462744977beb85fb5c782bc2eea7b15\"><div class=\"ttname\"><a href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">glm::packed_highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_highp &gt; packed_highp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00668\">gtc/type_aligned.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae4f38fd2c86cee6940986197777b3ca4\"><div class=\"ttname\"><a href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">glm::aligned_ivec2</a></div><div class=\"ttdeci\">aligned_highp_ivec2 aligned_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01219\">gtc/type_aligned.hpp:1219</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9bda778d0b7ad82f656dab99b71857a\"><div class=\"ttname\"><a href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">glm::aligned_dmat4x4</a></div><div class=\"ttdeci\">aligned_highp_dmat4x4 aligned_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01174\">gtc/type_aligned.hpp:1174</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga49e5a709d098523823b2f824e48672a6\"><div class=\"ttname\"><a href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">glm::packed_highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_highp &gt; packed_highp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00706\">gtc/type_aligned.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9df1d0c425852cf63a57e533b7a83f4f\"><div class=\"ttname\"><a href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">glm::aligned_highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_highp &gt; aligned_highp_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00357\">gtc/type_aligned.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7b1620f259595b9da47a6374fc44588a\"><div class=\"ttname\"><a href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">glm::packed_mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_mediump &gt; packed_mediump_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00405\">gtc/type_aligned.hpp:405</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2f2d913d8cca2f935b2522964408c0b2\"><div class=\"ttname\"><a href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">glm::packed_highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_highp &gt; packed_highp_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00431\">gtc/type_aligned.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac401da1dd9177ad81d7618a2a5541e23\"><div class=\"ttname\"><a href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">glm::packed_mat2x4</a></div><div class=\"ttdeci\">packed_highp_mat2x4 packed_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01015\">gtc/type_aligned.hpp:1015</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2cb16c3fdfb15e0719d942ee3b548bc4\"><div class=\"ttname\"><a href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">glm::aligned_lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_lowp &gt; aligned_lowp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00761\">gtc/type_aligned.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadd3b8bd71a758f7fb0da8e525156f34e\"><div class=\"ttname\"><a href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">glm::aligned_mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_mediump &gt; aligned_mediump_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00084\">gtc/type_aligned.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa0d2b8a75f1908dcf32c27f8524bdced\"><div class=\"ttname\"><a href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">glm::aligned_highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_highp &gt; aligned_highp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00612\">gtc/type_aligned.hpp:612</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga721f5404caf40d68962dcc0529de71d9\"><div class=\"ttname\"><a href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">glm::aligned_mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_mediump &gt; aligned_mediump_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00682\">gtc/type_aligned.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae89d72ffc149147f61df701bbc8755bf\"><div class=\"ttname\"><a href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">glm::packed_mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_mediump &gt; packed_mediump_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00510\">gtc/type_aligned.hpp:510</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga71d63cead1e113fca0bcdaaa33aad050\"><div class=\"ttname\"><a href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">glm::packed_mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_mediump &gt; packed_mediump_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00093\">gtc/type_aligned.hpp:93</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8b8fb86973a0b768c5bd802c92fac1a1\"><div class=\"ttname\"><a href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">glm::aligned_mat4x4</a></div><div class=\"ttdeci\">aligned_highp_mat4x4 aligned_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01006\">gtc/type_aligned.hpp:1006</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9a2d0fb815fd5c2bd58b869c55e32d3\"><div class=\"ttname\"><a href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">glm::aligned_mat4x2</a></div><div class=\"ttdeci\">aligned_highp_mat4x2 aligned_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01000\">gtc/type_aligned.hpp:1000</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3815661df0e2de79beff8168c09adf1e\"><div class=\"ttname\"><a href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">glm::packed_highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_highp &gt; packed_highp_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00274\">gtc/type_aligned.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9f0a4795ccc442fa9901845026f9f5\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">glm::aligned_dvec4</a></div><div class=\"ttdeci\">aligned_highp_dvec4 aligned_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01117\">gtc/type_aligned.hpp:1117</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad63b8c5b4dc0500d54d7414ef555178f\"><div class=\"ttname\"><a href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">glm::aligned_highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_highp &gt; aligned_highp_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00063\">gtc/type_aligned.hpp:63</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1eb9076cc28ead5020fd3029fd0472c5\"><div class=\"ttname\"><a href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">glm::aligned_lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_lowp &gt; aligned_lowp_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00457\">gtc/type_aligned.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a7eeae43cb7673e14cc89bf02f7dd45\"><div class=\"ttname\"><a href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">glm::aligned_highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_highp &gt; aligned_highp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00422\">gtc/type_aligned.hpp:422</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf488c6ad88c185054595d4d5c7ba5b9d\"><div class=\"ttname\"><a href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">glm::aligned_dmat3x4</a></div><div class=\"ttdeci\">aligned_highp_dmat3x4 aligned_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01165\">gtc/type_aligned.hpp:1165</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0c48f9417f649e27f3fb0c9f733a18bd\"><div class=\"ttname\"><a href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">glm::packed_bvec3</a></div><div class=\"ttdeci\">packed_highp_bvec3 packed_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01308\">gtc/type_aligned.hpp:1308</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0149fe15668925147e07c94fd2c2d6ae\"><div class=\"ttname\"><a href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">glm::packed_highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_highp &gt; packed_highp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00849\">gtc/type_aligned.hpp:849</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0eb771b708c5b2205d9b14dd1434fd8\"><div class=\"ttname\"><a href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">glm::packed_mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_mediump &gt; packed_mediump_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00277\">gtc/type_aligned.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6f94fcd28dde906fc6cad5f742b55c1a\"><div class=\"ttname\"><a href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">glm::aligned_lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_lowp &gt; aligned_lowp_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00170\">gtc/type_aligned.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga862843a45b01c35ffe4d44c47ea774ad\"><div class=\"ttname\"><a href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">glm::aligned_highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_highp &gt; aligned_highp_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00081\">gtc/type_aligned.hpp:81</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad791d671f4fcf1ed1ea41f752916b70a\"><div class=\"ttname\"><a href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">glm::packed_highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_highp &gt; packed_highp_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00218\">gtc/type_aligned.hpp:218</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7245acc887a5438f46fd85fdf076bb3b\"><div class=\"ttname\"><a href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">glm::packed_highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_highp &gt; packed_highp_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00108\">gtc/type_aligned.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0edcfdd179f8a158342eead48a4d0c2a\"><div class=\"ttname\"><a href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">glm::aligned_highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_highp &gt; aligned_highp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00603\">gtc/type_aligned.hpp:603</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga52635859f5ef660ab999d22c11b7867f\"><div class=\"ttname\"><a href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">glm::packed_lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_lowp &gt; packed_lowp_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00206\">gtc/type_aligned.hpp:206</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaac6b356ef00154da41aaae7d1549193\"><div class=\"ttname\"><a href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">glm::packed_highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_highp &gt; packed_highp_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00283\">gtc/type_aligned.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga41563650f36cb7f479e080de21e08418\"><div class=\"ttname\"><a href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">glm::aligned_highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_highp &gt; aligned_highp_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00155\">gtc/type_aligned.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6783859382677d35fcd5dac7dcbefdbd\"><div class=\"ttname\"><a href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">glm::aligned_dmat2</a></div><div class=\"ttdeci\">aligned_highp_dmat2 aligned_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01132\">gtc/type_aligned.hpp:1132</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga86efe91cdaa2864c828a5d6d46356c6a\"><div class=\"ttname\"><a href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">glm::packed_mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_mediump &gt; packed_mediump_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00671\">gtc/type_aligned.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad6fc921bdde2bdbc7e09b028e1e9b379\"><div class=\"ttname\"><a href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">glm::aligned_mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_mediump &gt; aligned_mediump_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00259\">gtc/type_aligned.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga262dafd0c001c3a38d1cc91d024ca738\"><div class=\"ttname\"><a href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">glm::packed_lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_lowp &gt; packed_lowp_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00381\">gtc/type_aligned.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1f18ada6f7cdd8c46db33ba987280fc4\"><div class=\"ttname\"><a href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">glm::packed_mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_mediump &gt; packed_mediump_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00286\">gtc/type_aligned.hpp:286</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafcb189f4f93648fe7ca802ca4aca2eb8\"><div class=\"ttname\"><a href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">glm::aligned_mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_mediump &gt; aligned_mediump_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00577\">gtc/type_aligned.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga65663f10a02e52cedcddbcfe36ddf38d\"><div class=\"ttname\"><a href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">glm::aligned_lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_lowp &gt; aligned_lowp_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00253\">gtc/type_aligned.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab559d943abf92bc588bcd3f4c0e4664b\"><div class=\"ttname\"><a href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">glm::aligned_highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_highp &gt; aligned_highp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00527\">gtc/type_aligned.hpp:527</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafff1684c4ff19b4a818138ccacc1e78d\"><div class=\"ttname\"><a href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">glm::aligned_highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_highp &gt; aligned_highp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00793\">gtc/type_aligned.hpp:793</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0913bdf048d0cb74af1d2512aec675bc\"><div class=\"ttname\"><a href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">glm::aligned_highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_highp &gt; aligned_highp_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00265\">gtc/type_aligned.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a30c137c1f8cce478c28eab0427a570\"><div class=\"ttname\"><a href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">glm::packed_lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_lowp &gt; packed_lowp_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00280\">gtc/type_aligned.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga081d53e0a71443d0b68ea61c870f9adc\"><div class=\"ttname\"><a href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">glm::aligned_mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_mediump &gt; aligned_mediump_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00167\">gtc/type_aligned.hpp:167</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga09507ef020a49517a7bcd50438f05056\"><div class=\"ttname\"><a href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">glm::packed_mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_mediump &gt; packed_mediump_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00111\">gtc/type_aligned.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad8f6abb2c9994850b5d5c04a5f979ed8\"><div class=\"ttname\"><a href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">glm::aligned_highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_highp &gt; aligned_highp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00460\">gtc/type_aligned.hpp:460</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga63a73be86a4f07ea7a7499ab0bfebe45\"><div class=\"ttname\"><a href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">glm::packed_mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_mediump &gt; packed_mediump_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00396\">gtc/type_aligned.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a97f0355d801de3444d42c1d5b40438\"><div class=\"ttname\"><a href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">glm::aligned_mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_mediump &gt; aligned_mediump_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00653\">gtc/type_aligned.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga45e155a4840f69b2fa4ed8047a676860\"><div class=\"ttname\"><a href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">glm::aligned_mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_mediump &gt; aligned_mediump_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00729\">gtc/type_aligned.hpp:729</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab5b36cc9caee1bb1c5178fe191bf5713\"><div class=\"ttname\"><a href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">glm::packed_mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_mediump &gt; packed_mediump_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00823\">gtc/type_aligned.hpp:823</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab704d4fb15f6f96d70e363d5db7060cd\"><div class=\"ttname\"><a href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">glm::packed_highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_highp &gt; packed_highp_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00209\">gtc/type_aligned.hpp:209</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga73ea0c1ba31580e107d21270883f51fc\"><div class=\"ttname\"><a href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">glm::aligned_mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_mediump &gt; aligned_mediump_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00351\">gtc/type_aligned.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga568b850f1116b667043533cf77826968\"><div class=\"ttname\"><a href=\"a00303.html#ga568b850f1116b667043533cf77826968\">glm::packed_mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_mediump &gt; packed_mediump_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00378\">gtc/type_aligned.hpp:378</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga85d89e83cb8137e1be1446de8c3b643a\"><div class=\"ttname\"><a href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">glm::aligned_vec4</a></div><div class=\"ttdeci\">aligned_highp_vec4 aligned_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00949\">gtc/type_aligned.hpp:949</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga31bfa801e1579fdba752ec3f7a45ec91\"><div class=\"ttname\"><a href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">glm::aligned_highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_highp &gt; aligned_highp_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00339\">gtc/type_aligned.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0e37cff4a43cca866101f0a35f01db6d\"><div class=\"ttname\"><a href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">glm::aligned_lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_lowp &gt; aligned_lowp_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00152\">gtc/type_aligned.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga88632cea9008ac0ac1388e94e804a53c\"><div class=\"ttname\"><a href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">glm::packed_bvec1</a></div><div class=\"ttdeci\">packed_highp_bvec1 packed_bvec1</div><div class=\"ttdoc\">1 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01302\">gtc/type_aligned.hpp:1302</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3e7df5a11e1be27bc29a4c0d3956f234\"><div class=\"ttname\"><a href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">glm::packed_lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_lowp &gt; packed_lowp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00589\">gtc/type_aligned.hpp:589</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab34aee3d5e121c543fea11d2c50ecc43\"><div class=\"ttname\"><a href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">glm::aligned_lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_lowp &gt; aligned_lowp_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using low precision a...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00051\">gtc/type_aligned.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafbf1c2cce307c5594b165819ed83bf5d\"><div class=\"ttname\"><a href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">glm::packed_lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_lowp &gt; packed_lowp_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00188\">gtc/type_aligned.hpp:188</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf0448b0f7ceb8273f7eda3a92205eefc\"><div class=\"ttname\"><a href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">glm::aligned_highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_highp &gt; aligned_highp_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using high precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00054\">gtc/type_aligned.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga99049db01faf1e95ed9fb875a47dffe2\"><div class=\"ttname\"><a href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">glm::packed_mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_mediump &gt; packed_mediump_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00586\">gtc/type_aligned.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04cfaf1421284df3c24ea0985dab24e7\"><div class=\"ttname\"><a href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">glm::packed_mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_mediump &gt; packed_mediump_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00662\">gtc/type_aligned.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga320d1c661cff2ef214eb50241f2928b2\"><div class=\"ttname\"><a href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">glm::aligned_mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_mediump &gt; aligned_mediump_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00324\">gtc/type_aligned.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae8a9b181f9dc813ad6e125a52b14b935\"><div class=\"ttname\"><a href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">glm::packed_dvec4</a></div><div class=\"ttdeci\">packed_highp_dvec4 packed_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01129\">gtc/type_aligned.hpp:1129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaffd747ea2aea1e69c2ecb04e68521b21\"><div class=\"ttname\"><a href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">glm::aligned_mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_mediump &gt; aligned_mediump_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00333\">gtc/type_aligned.hpp:333</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga21e86cf2f6c126bacf31b8985db06bd4\"><div class=\"ttname\"><a href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">glm::packed_mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_mediump &gt; packed_mediump_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00861\">gtc/type_aligned.hpp:861</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad5dcaf93df267bc3029174e430e0907f\"><div class=\"ttname\"><a href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">glm::packed_mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_mediump &gt; packed_mediump_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00747\">gtc/type_aligned.hpp:747</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga52e00afd0eb181e6738f40cf41787049\"><div class=\"ttname\"><a href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">glm::aligned_highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_highp &gt; aligned_highp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00717\">gtc/type_aligned.hpp:717</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga058ae939bfdbcbb80521dd4a3b01afba\"><div class=\"ttname\"><a href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">glm::aligned_highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_highp &gt; aligned_highp_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00489\">gtc/type_aligned.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><div class=\"ttname\"><a href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">glm::packed_lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_lowp &gt; packed_lowp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00598\">gtc/type_aligned.hpp:598</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98f4dc6722a2541a990918c074075359\"><div class=\"ttname\"><a href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">glm::aligned_mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_mediump &gt; aligned_mediump_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00720\">gtc/type_aligned.hpp:720</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab9b909f1392d86854334350efcae85f5\"><div class=\"ttname\"><a href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">glm::packed_dmat3x3</a></div><div class=\"ttdeci\">packed_highp_dmat3x3 packed_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01189\">gtc/type_aligned.hpp:1189</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadb065dbe5c11271fef8cf2ea8608f187\"><div class=\"ttname\"><a href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">glm::aligned_mat3x3</a></div><div class=\"ttdeci\">aligned_highp_mat3x3 aligned_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00994\">gtc/type_aligned.hpp:994</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98c9d122a959e9f3ce10a5623c310f5d\"><div class=\"ttname\"><a href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">glm::packed_lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_lowp &gt; packed_lowp_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00298\">gtc/type_aligned.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga001bb387ae8192fa94dbd8b23b600439\"><div class=\"ttname\"><a href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">glm::aligned_dmat4</a></div><div class=\"ttdeci\">aligned_highp_dmat4 aligned_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01138\">gtc/type_aligned.hpp:1138</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga84e1f5e0718952a079b748825c03f956\"><div class=\"ttname\"><a href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">glm::aligned_highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_highp &gt; aligned_highp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00755\">gtc/type_aligned.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6b8b9475e7c3b16aed13edbc460bbc4d\"><div class=\"ttname\"><a href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">glm::packed_highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_highp &gt; packed_highp_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00182\">gtc/type_aligned.hpp:182</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga79a90173d8faa9816dc852ce447d66ca\"><div class=\"ttname\"><a href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">glm::aligned_lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_lowp &gt; aligned_lowp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00428\">gtc/type_aligned.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafdd97922b4a2a42cd0c99a13877ff4da\"><div class=\"ttname\"><a href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">glm::packed_lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_lowp &gt; packed_lowp_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00399\">gtc/type_aligned.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac228b70372abd561340d5f926a7c1778\"><div class=\"ttname\"><a href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">glm::packed_ivec4</a></div><div class=\"ttdeci\">packed_highp_ivec4 packed_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01237\">gtc/type_aligned.hpp:1237</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5c194b11fbda636f2ab20c3bd0079196\"><div class=\"ttname\"><a href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">glm::packed_dvec2</a></div><div class=\"ttdeci\">packed_highp_dvec2 packed_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01123\">gtc/type_aligned.hpp:1123</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeaab04e378a90956eec8d68a99d777ed\"><div class=\"ttname\"><a href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">glm::aligned_lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_lowp &gt; aligned_lowp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00685\">gtc/type_aligned.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga23ec236950f5859f59197663266b535d\"><div class=\"ttname\"><a href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">glm::packed_lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_lowp &gt; packed_lowp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00674\">gtc/type_aligned.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2624719cb251d8de8cad1beaefc3a3f9\"><div class=\"ttname\"><a href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">glm::packed_highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_highp &gt; packed_highp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00659\">gtc/type_aligned.hpp:659</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6dc2832b747c00e0a0df621aba196960\"><div class=\"ttname\"><a href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">glm::aligned_mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_mediump &gt; aligned_mediump_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00463\">gtc/type_aligned.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7dec6d96bc61312b1e56d137c9c74030\"><div class=\"ttname\"><a href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">glm::aligned_lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_lowp &gt; aligned_lowp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00571\">gtc/type_aligned.hpp:571</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga20e63dd980b81af10cadbbe219316650\"><div class=\"ttname\"><a href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">glm::aligned_mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_mediump &gt; aligned_mediump_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00066\">gtc/type_aligned.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae29686632fd05efac0675d9a6370d77b\"><div class=\"ttname\"><a href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">glm::packed_highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_highp &gt; packed_highp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00440\">gtc/type_aligned.hpp:440</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6844c6f4691d1bf67673240850430948\"><div class=\"ttname\"><a href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">glm::packed_mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_mediump &gt; packed_mediump_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00185\">gtc/type_aligned.hpp:185</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43a92a24ca863e0e0f3b65834b3cf714\"><div class=\"ttname\"><a href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">glm::aligned_mat3</a></div><div class=\"ttdeci\">aligned_highp_mat3 aligned_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00967\">gtc/type_aligned.hpp:967</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae84f4763ecdc7457ecb7930bad12057c\"><div class=\"ttname\"><a href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">glm::aligned_mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_mediump &gt; aligned_mediump_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00805\">gtc/type_aligned.hpp:805</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2d2a73e662759e301c22b8931ff6a526\"><div class=\"ttname\"><a href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">glm::packed_mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_mediump &gt; packed_mediump_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00548\">gtc/type_aligned.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa7c9d4ab7ab651cdf8001fe7843e238b\"><div class=\"ttname\"><a href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">glm::aligned_highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_highp &gt; aligned_highp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00574\">gtc/type_aligned.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga18d859f87122b2b3b2992ffe86dbebc0\"><div class=\"ttname\"><a href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">glm::aligned_dvec2</a></div><div class=\"ttdeci\">aligned_highp_dvec2 aligned_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01111\">gtc/type_aligned.hpp:1111</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1f03696ab066572c6c044e63edf635a2\"><div class=\"ttname\"><a href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">glm::aligned_lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_lowp &gt; aligned_lowp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00723\">gtc/type_aligned.hpp:723</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga379c1153f1339bdeaefd592bebf538e8\"><div class=\"ttname\"><a href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">glm::packed_mat4x2</a></div><div class=\"ttdeci\">packed_highp_mat4x2 packed_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01027\">gtc/type_aligned.hpp:1027</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga82f7275d6102593a69ce38cdad680409\"><div class=\"ttname\"><a href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">glm::aligned_lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_lowp &gt; aligned_lowp_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00327\">gtc/type_aligned.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6a5a3250b57dfadc66735bc72911437f\"><div class=\"ttname\"><a href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">glm::packed_highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_highp &gt; packed_highp_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00310\">gtc/type_aligned.hpp:310</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadc19938ddb204bfcb4d9ef35b1e2bf93\"><div class=\"ttname\"><a href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">glm::packed_lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_lowp &gt; packed_lowp_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00197\">gtc/type_aligned.hpp:197</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga058e7ddab1428e47f2197bdd3a5a6953\"><div class=\"ttname\"><a href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">glm::aligned_mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_mediump &gt; aligned_mediump_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00241\">gtc/type_aligned.hpp:241</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a25e494173f6a64637b08a1b50a2132\"><div class=\"ttname\"><a href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">glm::aligned_mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_mediump &gt; aligned_mediump_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00232\">gtc/type_aligned.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga163facc9ed2692ea1300ed57c5d12b17\"><div class=\"ttname\"><a href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">glm::aligned_mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_mediump &gt; aligned_mediump_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00606\">gtc/type_aligned.hpp:606</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00303_html_gae94ef61edfa047d05bc69b6065fc42ba\"><div class=\"ttname\"><a href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">glm::aligned_highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_highp &gt; aligned_highp_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00238\">gtc/type_aligned.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4d0bd70d5fac49b800546d608b707513\"><div class=\"ttname\"><a href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">glm::aligned_highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_highp &gt; aligned_highp_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using high precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00045\">gtc/type_aligned.hpp:45</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00162.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/type_aligned.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00162_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>\n<tr class=\"memdesc:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>\n<tr class=\"memdesc:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>\n<tr class=\"memdesc:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>\n<tr class=\"memdesc:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>\n<tr class=\"memdesc:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8cff825951aeb54dd846037113c72db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>\n<tr class=\"memdesc:gac8cff825951aeb54dd846037113c72db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8cff825951aeb54dd846037113c72db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>\n<tr class=\"memdesc:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>\n<tr class=\"memdesc:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>\n<tr class=\"memdesc:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1284488189daf897cf095c5eefad9744\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1284488189daf897cf095c5eefad9744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1284488189daf897cf095c5eefad9744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>\n<tr class=\"memdesc:gafafeea923e1983262c972e2b83922d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>\n<tr class=\"memdesc:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>\n<tr class=\"memdesc:ga63b882e29170d428463d99c3d630acc6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>\n<tr class=\"memdesc:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>\n<tr class=\"memdesc:ga70cd2144351c556469ee6119e59971fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">More...</a><br /></td></tr>\n<tr class=\"separator:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>\n<tr class=\"memdesc:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>\n<tr class=\"memdesc:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>\n<tr class=\"memdesc:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>\n<tr class=\"memdesc:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga285649744560be21000cfd81bbb5d507\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>\n<tr class=\"memdesc:ga285649744560be21000cfd81bbb5d507\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">More...</a><br /></td></tr>\n<tr class=\"separator:ga285649744560be21000cfd81bbb5d507\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>\n<tr class=\"memdesc:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>\n<tr class=\"memdesc:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>\n<tr class=\"memdesc:gafd2803d39049dd45a37a63931e25d943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae553b33349d6da832cf0724f1e024094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gae553b33349d6da832cf0724f1e024094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">More...</a><br /></td></tr>\n<tr class=\"separator:gae553b33349d6da832cf0724f1e024094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>\n<tr class=\"memdesc:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>\n<tr class=\"memdesc:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>\n<tr class=\"memdesc:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>\n<tr class=\"memdesc:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>\n<tr class=\"memdesc:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>\n<tr class=\"memdesc:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>\n<tr class=\"memdesc:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2958f907719d94d8109b562540c910e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga2958f907719d94d8109b562540c910e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2958f907719d94d8109b562540c910e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>\n<tr class=\"memdesc:gaa4161e7a496dc96972254143fe873e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>\n<tr class=\"memdesc:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>\n<tr class=\"memdesc:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>\n<tr class=\"memdesc:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga904e9c2436bb099397c0823506a0771f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>\n<tr class=\"memdesc:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>\n<tr class=\"memdesc:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>\n<tr class=\"memdesc:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">More...</a><br /></td></tr>\n<tr class=\"separator:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>\n<tr class=\"memdesc:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">More...</a><br /></td></tr>\n<tr class=\"separator:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1246094581af624aca6c7499aaabf801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga1246094581af624aca6c7499aaabf801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1246094581af624aca6c7499aaabf801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc246401847dcba155f0699425e49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gadc246401847dcba155f0699425e49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc246401847dcba155f0699425e49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>\n<tr class=\"memdesc:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>\n<tr class=\"memdesc:ga404bba7785130e0b1384d695a9450b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>\n<tr class=\"memdesc:ga31ba41fd896257536958ec6080203d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>\n<tr class=\"memdesc:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">More...</a><br /></td></tr>\n<tr class=\"separator:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>\n<tr class=\"memdesc:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>\n<tr class=\"memdesc:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>\n<tr class=\"memdesc:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>\n<tr class=\"memdesc:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga447848a817a626cae08cedc9778b331c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga447848a817a626cae08cedc9778b331c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga447848a817a626cae08cedc9778b331c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71e646f7e301aa422328194162c9c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga71e646f7e301aa422328194162c9c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71e646f7e301aa422328194162c9c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>\n<tr class=\"memdesc:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>\n<tr class=\"memdesc:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>\n<tr class=\"memdesc:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>\n<tr class=\"memdesc:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>\n<tr class=\"memdesc:gabde1d0b4072df35453db76075ab896a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>\n<tr class=\"memdesc:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>\n<tr class=\"memdesc:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>\n<tr class=\"memdesc:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>\n<tr class=\"memdesc:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>\n<tr class=\"memdesc:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>\n<tr class=\"memdesc:ga509af83527f5cd512e9a7873590663aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>\n<tr class=\"memdesc:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>\n<tr class=\"memdesc:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>\n<tr class=\"memdesc:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga5611d6718e3a00096918a64192e73a45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8588bb221448f5541a858903822a57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga8b8588bb221448f5541a858903822a57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b8588bb221448f5541a858903822a57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>\n<tr class=\"memdesc:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">More...</a><br /></td></tr>\n<tr class=\"separator:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>\n<tr class=\"memdesc:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>\n<tr class=\"memdesc:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>\n<tr class=\"memdesc:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>\n<tr class=\"memdesc:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab253845f534a67136f9619843cade903\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab253845f534a67136f9619843cade903\">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>\n<tr class=\"memdesc:gab253845f534a67136f9619843cade903\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gab253845f534a67136f9619843cade903\">More...</a><br /></td></tr>\n<tr class=\"separator:gab253845f534a67136f9619843cade903\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga929427a7627940cdf3304f9c050b677d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>\n<tr class=\"memdesc:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>\n<tr class=\"memdesc:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>\n<tr class=\"memdesc:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">More...</a><br /></td></tr>\n<tr class=\"separator:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>\n<tr class=\"memdesc:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga75930684ff2233171c573e603f216162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga75930684ff2233171c573e603f216162\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>\n<tr class=\"memdesc:ga75930684ff2233171c573e603f216162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga75930684ff2233171c573e603f216162\">More...</a><br /></td></tr>\n<tr class=\"separator:ga75930684ff2233171c573e603f216162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>\n<tr class=\"memdesc:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>\n<tr class=\"memdesc:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>\n<tr class=\"memdesc:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>\n<tr class=\"memdesc:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>\n<tr class=\"memdesc:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>\n<tr class=\"memdesc:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>\n<tr class=\"memdesc:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>\n<tr class=\"memdesc:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>\n<tr class=\"memdesc:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>\n<tr class=\"memdesc:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>\n<tr class=\"memdesc:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">More...</a><br /></td></tr>\n<tr class=\"separator:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>\n<tr class=\"memdesc:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>\n<tr class=\"memdesc:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>\n<tr class=\"memdesc:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>\n<tr class=\"memdesc:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>\n<tr class=\"memdesc:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>\n<tr class=\"memdesc:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>\n<tr class=\"memdesc:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>\n<tr class=\"memdesc:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>\n<tr class=\"memdesc:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>\n<tr class=\"memdesc:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>\n<tr class=\"memdesc:gae5d672d359f2a39f63f98c7975057486\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>\n<tr class=\"memdesc:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>\n<tr class=\"memdesc:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga27b13f465abc8a40705698145e222c3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>\n<tr class=\"memdesc:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>\n<tr class=\"memdesc:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>\n<tr class=\"memdesc:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>\n<tr class=\"memdesc:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1558a48b3934011b52612809f443e46d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga1558a48b3934011b52612809f443e46d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1558a48b3934011b52612809f443e46d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa52e5732daa62851627021ad551c7680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>\n<tr class=\"memdesc:gaa52e5732daa62851627021ad551c7680\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa52e5732daa62851627021ad551c7680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>\n<tr class=\"memdesc:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga3f510999e59e1b309113e1d561162b29\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>\n<tr class=\"memdesc:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>\n<tr class=\"memdesc:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>\n<tr class=\"memdesc:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>\n<tr class=\"memdesc:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>\n<tr class=\"memdesc:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>\n<tr class=\"memdesc:gab059d7b9fe2094acc563b7223987499f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>\n<tr class=\"memdesc:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>\n<tr class=\"memdesc:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>\n<tr class=\"memdesc:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>\n<tr class=\"memdesc:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>\n<tr class=\"memdesc:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>\n<tr class=\"memdesc:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga912a16432608b822f1e13607529934c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>\n<tr class=\"memdesc:ga912a16432608b822f1e13607529934c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga912a16432608b822f1e13607529934c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>\n<tr class=\"memdesc:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_fquat, 16)</td></tr>\n<tr class=\"memdesc:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>\n<tr class=\"memdesc:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>\n<tr class=\"memdesc:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>\n<tr class=\"memdesc:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00162_source.html\">gtx/type_aligned.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00162_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/type_aligned.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00162.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_aligned extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"comment\">// Signed int vector types</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>, aligned_lowp_int8, 1);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>, aligned_lowp_int16, 2);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>, aligned_lowp_int32, 4);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>, aligned_lowp_int64, 8);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>, aligned_lowp_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>, aligned_lowp_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>, aligned_lowp_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>, aligned_lowp_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>, aligned_lowp_i8, 1);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>, aligned_lowp_i16, 2);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>, aligned_lowp_i32, 4);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>, aligned_lowp_i64, 8);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>, aligned_mediump_int8, 1);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>, aligned_mediump_int16, 2);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>, aligned_mediump_int32, 4);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>, aligned_mediump_int64, 8);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>, aligned_mediump_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>, aligned_mediump_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>, aligned_mediump_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>, aligned_mediump_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>, aligned_mediump_i8, 1);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>, aligned_mediump_i16, 2);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>, aligned_mediump_i32, 4);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>, aligned_mediump_i64, 8);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>, aligned_highp_int8, 1);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>, aligned_highp_int16, 2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>, aligned_highp_int32, 4);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>, aligned_highp_int64, 8);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>, aligned_highp_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>, aligned_highp_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>, aligned_highp_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>, aligned_highp_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>, aligned_highp_i8, 1);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>, aligned_highp_i16, 2);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>, aligned_highp_i32, 4);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>, aligned_highp_i64, 8);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int8, aligned_int8, 1);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int16, aligned_int16, 2);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int32, aligned_int32, 4);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, aligned_int64, 8);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>, aligned_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>, aligned_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>, aligned_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>, aligned_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>, aligned_i8, 1);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>, aligned_i16, 2);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>, aligned_i32, 4);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>, aligned_i64, 8);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>, <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>, <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>, <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>, <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>, aligned_i8vec1, 1);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>, aligned_i8vec2, 2);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>, aligned_i8vec3, 4);</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>, aligned_i8vec4, 4);</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>, aligned_i16vec1, 2);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>, aligned_i16vec2, 4);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>, aligned_i16vec3, 8);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>, aligned_i16vec4, 8);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>, aligned_i32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>, aligned_i32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>, aligned_i32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>, aligned_i32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>, aligned_i64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>, aligned_i64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>, aligned_i64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>, aligned_i64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>, aligned_lowp_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>, aligned_lowp_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>, aligned_lowp_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>, aligned_lowp_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>, aligned_lowp_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>, aligned_lowp_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>, aligned_lowp_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>, aligned_lowp_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>, aligned_lowp_u8, 1);</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>, aligned_lowp_u16, 2);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>, aligned_lowp_u32, 4);</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>, aligned_lowp_u64, 8);</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>, aligned_mediump_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>, aligned_mediump_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>, aligned_mediump_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>, aligned_mediump_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>, aligned_mediump_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>, aligned_mediump_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>, aligned_mediump_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>, aligned_mediump_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>, aligned_mediump_u8, 1);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>, aligned_mediump_u16, 2);</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>, aligned_mediump_u32, 4);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>, aligned_mediump_u64, 8);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>, aligned_highp_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>, aligned_highp_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>, aligned_highp_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>, aligned_highp_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>, aligned_highp_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>, aligned_highp_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>, aligned_highp_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>, aligned_highp_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>, aligned_highp_u8, 1);</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>, aligned_highp_u16, 2);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>, aligned_highp_u32, 4);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>, aligned_highp_u64, 8);</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint8, aligned_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint16, aligned_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint32, aligned_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, aligned_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>, aligned_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>, aligned_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>, aligned_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>, aligned_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>, aligned_u8, 1);</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>, aligned_u16, 2);</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>, aligned_u32, 4);</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>, aligned_u64, 8);</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>, <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>, <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>, <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>, <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>, aligned_u8vec1, 1);</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>, aligned_u8vec2, 2);</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>, aligned_u8vec3, 4);</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>, aligned_u8vec4, 4);</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>, aligned_u16vec1, 2);</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>, aligned_u16vec2, 4);</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>, aligned_u16vec3, 8);</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>, aligned_u16vec4, 8);</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>, aligned_u32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>, aligned_u32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>, aligned_u32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>, aligned_u32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>, aligned_u64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>, aligned_u64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>, aligned_u64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>, aligned_u64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>, aligned_float32, 4);</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>, aligned_float32_t, 4);</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>, aligned_f32, 4);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>, aligned_float64, 8);</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>, aligned_float64_t, 8);</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>, aligned_f64, 8);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>, <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>, <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>, <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>, <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>, aligned_fvec1, 4);</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>, aligned_fvec2, 8);</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>, aligned_fvec3, 16);</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>, aligned_fvec4, 16);</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>, aligned_f32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>, aligned_f32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>, aligned_f32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>, aligned_f32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>, <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>, 8);</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>, <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>, <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>, 32);</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>, <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>, 32);</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>, aligned_f64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>, aligned_f64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>, aligned_f64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>, aligned_f64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        <span class=\"comment\">//typedef detail::tmat1&lt;f32&gt; mat1;</span></div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>, <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>, <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>, <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; mat1;</span></div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>, <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>, <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>, <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; fmat1;</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>, aligned_fmat2, 16);</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>, aligned_fmat3, 16);</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>, aligned_fmat4, 16);</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"comment\">//typedef f32 fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>, aligned_fmat2x2, 16);</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>, aligned_fmat2x3, 16);</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>, aligned_fmat2x4, 16);</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>, aligned_fmat3x2, 16);</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>, aligned_fmat3x3, 16);</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>, aligned_fmat3x4, 16);</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>, aligned_fmat4x2, 16);</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>, aligned_fmat4x3, 16);</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>, aligned_fmat4x4, 16);</div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, defaultp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>, aligned_f32mat2, 16);</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>, aligned_f32mat3, 16);</div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>, aligned_f32mat4, 16);</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;</div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;        <span class=\"comment\">//typedef f32 f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>, aligned_f32mat2x2, 16);</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>, aligned_f32mat2x3, 16);</div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>, aligned_f32mat2x4, 16);</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>, aligned_f32mat3x2, 16);</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>, aligned_f32mat3x3, 16);</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>, aligned_f32mat3x4, 16);</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>, aligned_f32mat4x2, 16);</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>, aligned_f32mat4x3, 16);</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>, aligned_f32mat4x4, 16);</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f64, defaultp&gt; f64mat1;</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>, aligned_f64mat2, 32);</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>, aligned_f64mat3, 32);</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>, aligned_f64mat4, 32);</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"comment\">//typedef f64 f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>, aligned_f64mat2x2, 32);</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>, aligned_f64mat2x3, 32);</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>, aligned_f64mat2x4, 32);</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>, aligned_f64mat3x2, 32);</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>, aligned_f64mat3x3, 32);</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>, aligned_f64mat3x4, 32);</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;</div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>, aligned_f64mat4x2, 32);</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>, aligned_f64mat4x3, 32);</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>, aligned_f64mat4x4, 32);</div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;        <span class=\"comment\">// Quaternion types</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>, aligned_quat, 16);</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>, aligned_fquat, 16);</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>, aligned_dquat, 32);</div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>, aligned_f32quat, 16);</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>, aligned_f64quat, 32);</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"preprocessor\">#include &quot;type_aligned.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga074137e3be58528d67041c223d49f398\"><div class=\"ttname\"><a href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">glm::aligned_uvec2</a></div><div class=\"ttdeci\">aligned_highp_uvec2 aligned_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01257\">gtc/type_aligned.hpp:1257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga32794322d294e5ace7fed4a61896f270\"><div class=\"ttname\"><a href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">glm::aligned_ivec3</a></div><div class=\"ttdeci\">aligned_highp_ivec3 aligned_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01222\">gtc/type_aligned.hpp:1222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cf643b66664e0cd3c48759ae66c2bd0\"><div class=\"ttname\"><a href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">glm::aligned_vec3</a></div><div class=\"ttdeci\">aligned_highp_vec3 aligned_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00946\">gtc/type_aligned.hpp:946</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a8d9c3046f89d854eb758adfa0811c0\"><div class=\"ttname\"><a href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">glm::aligned_uvec3</a></div><div class=\"ttdeci\">aligned_highp_uvec3 aligned_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01260\">gtc/type_aligned.hpp:1260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00364_html_ga95cc03b8b475993fa50e05e38e203303\"><div class=\"ttname\"><a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">glm::GLM_ALIGNED_TYPEDEF</a></div><div class=\"ttdeci\">GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)</div><div class=\"ttdoc\">Double-qualifier floating-point aligned quaternion. </div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa37869eea77d28419b2fb0ff70b69bf0\"><div class=\"ttname\"><a href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">glm::aligned_dvec3</a></div><div class=\"ttdeci\">aligned_highp_dvec3 aligned_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01114\">gtc/type_aligned.hpp:1114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4974f46ae5a19415d91316960a53617a\"><div class=\"ttname\"><a href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">glm::aligned_dvec1</a></div><div class=\"ttdeci\">aligned_highp_dvec1 aligned_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01108\">gtc/type_aligned.hpp:1108</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a8a5f8c47cd7d5502dd9932f83472b9\"><div class=\"ttname\"><a href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">glm::aligned_mat2</a></div><div class=\"ttdeci\">aligned_highp_mat2 aligned_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00964\">gtc/type_aligned.hpp:964</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga76298aed82a439063c3d55980c84aa0b\"><div class=\"ttname\"><a href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">glm::aligned_ivec1</a></div><div class=\"ttdeci\">aligned_highp_ivec1 aligned_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01216\">gtc/type_aligned.hpp:1216</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><div class=\"ttname\"><a href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">glm::aligned_mat4</a></div><div class=\"ttdeci\">aligned_highp_mat4 aligned_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00970\">gtc/type_aligned.hpp:970</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ff8ed402c93d280ff0597c1c5e7c548\"><div class=\"ttname\"><a href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">glm::aligned_uvec1</a></div><div class=\"ttdeci\">aligned_highp_uvec1 aligned_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01254\">gtc/type_aligned.hpp:1254</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga05e6d4c908965d04191c2070a8d0a65e\"><div class=\"ttname\"><a href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">glm::aligned_vec1</a></div><div class=\"ttdeci\">aligned_highp_vec1 aligned_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00940\">gtc/type_aligned.hpp:940</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabf842c45eea186170c267a328e3f3b7d\"><div class=\"ttname\"><a href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">glm::aligned_uvec4</a></div><div class=\"ttdeci\">aligned_highp_uvec4 aligned_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01263\">gtc/type_aligned.hpp:1263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f79eae5927c9033d84617e49f6f34e4\"><div class=\"ttname\"><a href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">glm::aligned_ivec4</a></div><div class=\"ttdeci\">aligned_highp_ivec4 aligned_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01225\">gtc/type_aligned.hpp:1225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0682462f8096a226773e20fac993cde5\"><div class=\"ttname\"><a href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">glm::aligned_vec2</a></div><div class=\"ttdeci\">aligned_highp_vec2 aligned_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00943\">gtc/type_aligned.hpp:943</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabb04f459d81d753d278b2072e2375e8e\"><div class=\"ttname\"><a href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">glm::aligned_mat2x2</a></div><div class=\"ttdeci\">aligned_highp_mat2x2 aligned_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00982\">gtc/type_aligned.hpp:982</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae4f38fd2c86cee6940986197777b3ca4\"><div class=\"ttname\"><a href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">glm::aligned_ivec2</a></div><div class=\"ttdeci\">aligned_highp_ivec2 aligned_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01219\">gtc/type_aligned.hpp:1219</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8b8fb86973a0b768c5bd802c92fac1a1\"><div class=\"ttname\"><a href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">glm::aligned_mat4x4</a></div><div class=\"ttdeci\">aligned_highp_mat4x4 aligned_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01006\">gtc/type_aligned.hpp:1006</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9f0a4795ccc442fa9901845026f9f5\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">glm::aligned_dvec4</a></div><div class=\"ttdeci\">aligned_highp_dvec4 aligned_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01117\">gtc/type_aligned.hpp:1117</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga85d89e83cb8137e1be1446de8c3b643a\"><div class=\"ttname\"><a href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">glm::aligned_vec4</a></div><div class=\"ttdeci\">aligned_highp_vec4 aligned_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00949\">gtc/type_aligned.hpp:949</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadb065dbe5c11271fef8cf2ea8608f187\"><div class=\"ttname\"><a href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">glm::aligned_mat3x3</a></div><div class=\"ttdeci\">aligned_highp_mat3x3 aligned_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00994\">gtc/type_aligned.hpp:994</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43a92a24ca863e0e0f3b65834b3cf714\"><div class=\"ttname\"><a href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">glm::aligned_mat3</a></div><div class=\"ttdeci\">aligned_highp_mat3 aligned_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00967\">gtc/type_aligned.hpp:967</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga18d859f87122b2b3b2992ffe86dbebc0\"><div class=\"ttname\"><a href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">glm::aligned_dvec2</a></div><div class=\"ttdeci\">aligned_highp_dvec2 aligned_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01111\">gtc/type_aligned.hpp:1111</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00163_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_float.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_float.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER == GLM_COMPILER_VC12</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#       pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#       pragma warning(disable: 4512) // assignment operator could not be generated</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">union </span>float_t</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"comment\">// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span> &lt;&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">union </span>float_t&lt;float&gt;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span> int_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span> float_type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                GLM_CONSTEXPR float_t&amp; operator=(float_t <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                        f = x.f;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                <span class=\"comment\">// Portable extraction of components.</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> negative()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &lt; 0; }</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                GLM_CONSTEXPR int_type mantissa()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &amp; ((1 &lt;&lt; 23) - 1); }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_CONSTEXPR int_type exponent()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> (i &gt;&gt; 23) &amp; ((1 &lt;&lt; 8) - 1); }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                int_type i;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                float_type f;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span> &lt;&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">union </span>float_t&lt;double&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> int_type;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> float_type;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                GLM_CONSTEXPR float_t(float_type Num = static_cast&lt;float_type&gt;(0)) : f(Num) {}</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                GLM_CONSTEXPR float_t&amp; operator=(float_t <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        f = x.f;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"comment\">// Portable extraction of components.</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> negative()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &lt; 0; }</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                GLM_CONSTEXPR int_type mantissa()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &amp; ((int_type(1) &lt;&lt; 52) - 1); }</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_CONSTEXPR int_type exponent()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> (i &gt;&gt; 52) &amp; ((int_type(1) &lt;&lt; 11) - 1); }</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                int_type i;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                float_type f;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER == GLM_COMPILER_VC12</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#       pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00164_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_half.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_half.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">short</span> hdata;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> toFloat32(hdata value);</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        GLM_FUNC_DECL hdata toFloat16(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;type_half.inl&quot;</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00165.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00165_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00165_source.html\">type_mat2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00165_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00165.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T const&amp; x1, T const&amp; y1,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x2, T const&amp; y2);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                template&lt;typename U, typename V, typename M, typename N&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        U const&amp; x1, V const&amp; y1,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        M const&amp; x2, N const&amp; y2);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        vec&lt;2, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        vec&lt;2, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator+=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator*=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator/=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::col_type operator*(mat&lt;2, 2, T, Q&gt; const&amp; m, typename mat&lt;2, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::row_type operator*(typename mat&lt;2, 2, T, Q&gt;::col_type const&amp; v, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::col_type operator/(mat&lt;2, 2, T, Q&gt; const&amp; m, typename mat&lt;2, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::row_type operator/(typename mat&lt;2, 2, T, Q&gt;::col_type const&amp; v, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00166.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00166_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00166_source.html\">type_mat2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00166_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00166.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                template&lt;typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        X1 x1, Y1 y1, Z1 z1,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        X2 x2, Y2 y2, Z2 z2);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        vec&lt;3, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        vec&lt;3, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator+=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(T scalar, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 3, T, Q&gt;::col_type operator*(mat&lt;2, 3, T, Q&gt; const&amp; m, typename mat&lt;2, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 3, T, Q&gt;::row_type operator*(typename mat&lt;2, 3, T, Q&gt;::col_type const&amp; v, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator/(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator/(T scalar, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00167_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00167_source.html\">type_mat2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00167_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00167.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0, T w0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1, T w1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        X1 x1, Y1 y1, Z1 z1, W1 w1,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        X2 x2, Y2 y2, Z2 z2, W2 w2);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        vec&lt;4, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        vec&lt;4, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator+=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(T scalar, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 4, T, Q&gt;::col_type operator*(mat&lt;2, 4, T, Q&gt; const&amp; m, typename mat&lt;2, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 4, T, Q&gt;::row_type operator*(typename mat&lt;2, 4, T, Q&gt;::col_type const&amp; v, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator/(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator/(T scalar, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00168.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00168_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00168_source.html\">type_mat3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00168_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00168.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X1, typename Y1,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X2, typename Y2,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X3, typename Y3&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X1 x1, Y1 y1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X2 x2, Y2 y2,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X3 x3, Y3 y3);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;2, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;2, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        vec&lt;2, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator+=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(T scalar, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 2, T, Q&gt;::col_type operator*(mat&lt;3, 2, T, Q&gt; const&amp; m, typename mat&lt;3, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 2, T, Q&gt;::row_type operator*(typename mat&lt;3, 2, T, Q&gt;::col_type const&amp; v, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator/(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator/(T scalar, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00169.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00169_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00169_source.html\">type_mat3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00169_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00169.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T x0, T y0, T z0,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x1, T y1, T z1,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x2, T y2, T z2);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        typename X1, typename Y1, typename Z1,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X2, typename Y2, typename Z2,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X3, typename Y3, typename Z3&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        X1 x1, Y1 y1, Z1 z1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X2 x2, Y2 y2, Z2 z2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X3 x3, Y3 y3, Z3 z3);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        vec&lt;3, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;3, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;3, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator+=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator-=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator*=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator/=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::col_type operator*(mat&lt;3, 3, T, Q&gt; const&amp; m, typename mat&lt;3, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::row_type operator*(typename mat&lt;3, 3, T, Q&gt;::col_type const&amp; v, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::col_type operator/(mat&lt;3, 3, T, Q&gt; const&amp; m, typename mat&lt;3, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::row_type operator/(typename mat&lt;3, 3, T, Q&gt;::col_type const&amp; v, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00170.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00170_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00170_source.html\">type_mat3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00170_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00170.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0, T w0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1, T w1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2, T z2, T w2);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X3, typename Y3, typename Z3, typename W3&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X1 x1, Y1 y1, Z1 z1, W1 w1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X2 x2, Y2 y2, Z2 z2, W2 w2,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X3 x3, Y3 y3, Z3 z3, W3 w3);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;4, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;4, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        vec&lt;4, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator+=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator-=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(T scalar, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 4, T, Q&gt;::col_type operator*(mat&lt;3, 4, T, Q&gt; const&amp; m, typename mat&lt;3, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 4, T, Q&gt;::row_type operator*(typename mat&lt;3, 4, T, Q&gt;::col_type const&amp; v, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1,      mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator/(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator/(T scalar, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00171.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00171_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00171_source.html\">type_mat4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00171_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00171.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 4; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T x3, T y3);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X0, typename Y0,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X1, typename Y1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X2, typename Y2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        typename X3, typename Y3&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X0 x0, Y0 y0,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X1 x1, Y1 y1,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X2 x2, Y2 y2,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        X3 x3, Y3 y3);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;2, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;2, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;2, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        vec&lt;2, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator+=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m1,      mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(T scalar, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 2, T, Q&gt;::col_type operator*(mat&lt;4, 2, T, Q&gt; const&amp; m, typename mat&lt;4, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 2, T, Q&gt;::row_type operator*(typename mat&lt;4, 2, T, Q&gt;::col_type const&amp; v, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator/(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator/(T scalar, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00172.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00172_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00172_source.html\">type_mat4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00172_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00172.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 4; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const&amp; x);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x0, T const&amp; y0, T const&amp; z0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T const&amp; x1, T const&amp; y1, T const&amp; z1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T const&amp; x2, T const&amp; y2, T const&amp; z2,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T const&amp; x3, T const&amp; y3, T const&amp; z3);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X1, typename Y1, typename Z1,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X2, typename Y2, typename Z2,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X3, typename Y3, typename Z3,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        typename X4, typename Y4, typename Z4&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X1 const&amp; x1, Y1 const&amp; y1, Z1 const&amp; z1,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X2 const&amp; x2, Y2 const&amp; y2, Z2 const&amp; z2,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X3 const&amp; x3, Y3 const&amp; y3, Z3 const&amp; z3,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        X4 const&amp; x4, Y4 const&amp; y4, Z4 const&amp; z4);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;3, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;3, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;3, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        vec&lt;3, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator+=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator-=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt;&amp; operator++();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt;&amp; operator--();</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(T const&amp; s, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 3, T, Q&gt;::col_type operator*(mat&lt;4, 3, T, Q&gt; const&amp; m, typename mat&lt;4, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 3, T, Q&gt;::row_type operator*(typename mat&lt;4, 3, T, Q&gt;::col_type const&amp; v, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1,      mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator/(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator/(T const&amp; s, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#endif //GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00173.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00173_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00173_source.html\">type_mat4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00173_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00173.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const&amp; x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T const&amp; x0, T const&amp; y0, T const&amp; z0, T const&amp; w0,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x1, T const&amp; y1, T const&amp; z1, T const&amp; w1,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T const&amp; x2, T const&amp; y2, T const&amp; z2, T const&amp; w2,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T const&amp; x3, T const&amp; y3, T const&amp; z3, T const&amp; w3);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X3, typename Y3, typename Z3, typename W3,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X4, typename Y4, typename Z4, typename W4&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X1 const&amp; x1, Y1 const&amp; y1, Z1 const&amp; z1, W1 const&amp; w1,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X2 const&amp; x2, Y2 const&amp; y2, Z2 const&amp; z2, W2 const&amp; w2,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X3 const&amp; x3, Y3 const&amp; y3, Z3 const&amp; z3, W3 const&amp; w3,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X4 const&amp; x4, Y4 const&amp; y4, Z4 const&amp; z4, W4 const&amp; w4);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        vec&lt;4, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;4, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;4, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;4, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator+=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator-=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator*=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator/=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::col_type operator*(mat&lt;4, 4, T, Q&gt; const&amp; m, typename mat&lt;4, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::row_type operator*(typename mat&lt;4, 4, T, Q&gt;::col_type const&amp; v, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::col_type operator/(mat&lt;4, 4, T, Q&gt; const&amp; m, typename mat&lt;4, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::row_type operator/(typename mat&lt;4, 4, T, Q&gt;::col_type const&amp; v, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(mat&lt;4, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00174.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00174_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00174_source.html\">type_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00174_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00174.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_type_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"comment\">// Signed int vector types</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a>;</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a>;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a>;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a>;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;</div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;        <span class=\"keyword\">typedef</span> lowp_float32_t <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;        <span class=\"keyword\">typedef</span> lowp_float64_t <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float32 <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float64 <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;<span class=\"preprocessor\">#else//(defined(GLM_PRECISION_HIGHP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">typedef</span> highp_float32_t <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;        <span class=\"keyword\">typedef</span> highp_float64_t <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;        <span class=\"keyword\">typedef</span> highp_float32_t <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        <span class=\"keyword\">typedef</span> highp_float64_t <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt; <a class=\"code\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;</div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;        <span class=\"comment\">//typedef lowp_f32 lowp_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;        <span class=\"comment\">//typedef lowp_fmat1x1 lowp_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat2x2 <a class=\"code\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat3x3 <a class=\"code\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat4x4 <a class=\"code\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;        <span class=\"comment\">//typedef mediump_f32 mediump_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;</div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;</div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;        <span class=\"comment\">//typedef mediump_fmat1x1 mediump_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat2x2 <a class=\"code\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;</div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat3x3 <a class=\"code\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat4x4 <a class=\"code\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;</div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;        <span class=\"comment\">//typedef highp_f32 highp_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;</div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;</div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;</div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;</div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;        <span class=\"comment\">//typedef highp_fmat1x1 highp_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat2x2 <a class=\"code\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat3x3 <a class=\"code\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat4x4 <a class=\"code\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;</div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;</div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;        <span class=\"comment\">//typedef f32 lowp_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;</div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;</div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, lowp&gt; lowp_f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat2x2 <a class=\"code\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat3x3 <a class=\"code\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;        <span class=\"comment\">//typedef f32 mediump_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;</div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;</div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;</div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;</div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, mediump&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat2x2 <a class=\"code\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat3x3 <a class=\"code\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;</div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;</div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;        <span class=\"comment\">//typedef f32 highp_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;</div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;</div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;</div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;</div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;</div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, highp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;</div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat2x2 <a class=\"code\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;</div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat3x3 <a class=\"code\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;</div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;</div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;</div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;        <span class=\"comment\">//typedef f64 lowp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;</div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;</div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;</div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;</div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;</div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;        <span class=\"comment\">//typedef lowp_f64mat1x1 lowp_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;</div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat2x2 <a class=\"code\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat3x3 <a class=\"code\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;</div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat4x4 <a class=\"code\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;</div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;        <span class=\"comment\">//typedef f64 Highp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;</div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;</div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;</div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;</div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;</div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;        <span class=\"comment\">//typedef mediump_f64mat1x1 mediump_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat2x2 <a class=\"code\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;</div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat3x3 <a class=\"code\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;</div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat4x4 <a class=\"code\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;</div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;        <span class=\"comment\">//typedef f64 highp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;</div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;</div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;</div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;</div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;        <span class=\"comment\">//typedef highp_f64mat1x1 highp_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat2x2 <a class=\"code\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat3x3 <a class=\"code\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;</div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat4x4 <a class=\"code\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;</div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;</div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;</div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;</div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;</div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;</div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;</div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;</div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;</div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;</div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;</div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, highp&gt; <a class=\"code\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;</div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;</div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;</div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;</div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;</div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;</div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;</div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;</div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;</div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;</div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;</div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;</div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;</div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;</div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;</div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;</div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;</div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;</div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;</div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;</div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;</div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;</div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;</div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;</div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;</div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;</div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;</div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;</div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;</div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;</div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;</div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;</div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;</div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;</div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;</div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;</div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;</div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;</div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;</div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;</div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;</div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;</div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;</div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;</div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;</div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;</div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;</div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;</div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;</div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;</div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;                <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;</div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;                <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;</div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>;</div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;</div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>;</div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;</div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>;</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;</div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>;</div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;</div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;</div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;</div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;</div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;</div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;</div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;</div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; fmat1;</span></div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;</div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;        <span class=\"comment\">//typedef f32 fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;</div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;</div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;</div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;</div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;</div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;</div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;</div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, defaultp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;</div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;</div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;        <span class=\"comment\">//typedef f32 f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;</div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;</div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;</div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;</div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;</div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;</div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;</div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f64, defaultp&gt; f64mat1;</span></div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;</div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;</div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;</div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;</div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;        <span class=\"comment\">//typedef f64 f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;</div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;</div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;</div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;</div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;</div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;</div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;</div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;</div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;</div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;</div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;</div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;        <span class=\"comment\">// Quaternion types</span></div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;</div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;</div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;</div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;</div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;</div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;</div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;</div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;</div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, highp&gt; <a class=\"code\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;</div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;</div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;</div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;</div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;<span class=\"preprocessor\">#include &quot;type_precision.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00304_html_gad064202b4cf9a2972475c03de657cb39\"><div class=\"ttname\"><a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">glm::highp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, highp &gt; highp_u16vec1</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00354\">fwd.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga602e119c6b246b4f6edcf66845f2aa0f\"><div class=\"ttname\"><a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">glm::highp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00696\">fwd.hpp:696</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac30fdf8afa489400053275b6a3350127\"><div class=\"ttname\"><a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">glm::mediump_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, mediump &gt; mediump_f64vec1</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00491\">fwd.hpp:491</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga74e9133378fd0b4da8ac0bc0876702ff\"><div class=\"ttname\"><a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">glm::mediump_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00528\">fwd.hpp:528</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaeeb0077198cff40e3f48b1108ece139\"><div class=\"ttname\"><a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">glm::highp_float64_t</a></div><div class=\"ttdeci\">double highp_float64_t</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00175\">fwd.hpp:175</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0ecd3f4952536e5ef12702b44d2626fc\"><div class=\"ttname\"><a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">glm::f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00586\">fwd.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9771450a54785d13080cdde0fe20c1d\"><div class=\"ttname\"><a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">glm::f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00584\">fwd.hpp:584</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41ad497f7eae211556aefd783cb02b90\"><div class=\"ttname\"><a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">glm::mediump_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00647\">fwd.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaaf878d0d7bfc0aac054fe269a886ca8\"><div class=\"ttname\"><a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">glm::mediump_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00545\">fwd.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98a687c17b174ea316b5f397b64f44bc\"><div class=\"ttname\"><a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">glm::mediump_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00640\">fwd.hpp:640</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga14c90ca49885723f51d06e295587236f\"><div class=\"ttname\"><a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">glm::highp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00550\">fwd.hpp:550</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadbb198a4d7aad82a0f4dc466ef6f6215\"><div class=\"ttname\"><a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">glm::highp_float64</a></div><div class=\"ttdeci\">double highp_float64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00170\">fwd.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b69181efbf8f37ae934f135137b29c0\"><div class=\"ttname\"><a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">glm::f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00585\">fwd.hpp:585</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3714dab2c16a6545a405cb0c3b3aaa6f\"><div class=\"ttname\"><a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">glm::lowp_float64</a></div><div class=\"ttdeci\">double lowp_float64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00168\">fwd.hpp:168</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf306dd69e53633636aee38cea79d4cb7\"><div class=\"ttname\"><a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">glm::mediump_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00762\">fwd.hpp:762</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad23b1be9b3bf20352089a6b738f0ebba\"><div class=\"ttname\"><a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">glm::highp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, highp &gt; highp_i64vec4</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00295\">fwd.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4541dc2feb2a31d6ecb5a303f3dd3280\"><div class=\"ttname\"><a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">glm::fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00536\">fwd.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a32c31f4e2e8ca859663b6e3289a2d\"><div class=\"ttname\"><a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">glm::lowp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_fvec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00427\">fwd.hpp:427</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1c38778c0b5a1263f07753c05a4f7b9\"><div class=\"ttname\"><a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">glm::mediump_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00530\">fwd.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bba0ce31210e274f73efacd3364c03f\"><div class=\"ttname\"><a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">glm::lowp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00524\">fwd.hpp:524</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga40b5c557efebb5bb99d6b9aa81095afa\"><div class=\"ttname\"><a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">glm::lowp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_fvec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00428\">fwd.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44bfa55cda5dbf53f24a1fb7610393d6\"><div class=\"ttname\"><a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">glm::mediump_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_fvec2</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00432\">fwd.hpp:432</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28733aec7288191b314d42154fd0b690\"><div class=\"ttname\"><a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">glm::lowp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00635\">fwd.hpp:635</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga771fda9109933db34f808d92b9b84d7e\"><div class=\"ttname\"><a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">glm::lowp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00750\">fwd.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga859be7b9d3a3765c1cafc14dbcf249a6\"><div class=\"ttname\"><a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">glm::lowp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, lowp &gt; lowp_u64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00384\">fwd.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga400ce8cc566de093a9b28e59e220d6e4\"><div class=\"ttname\"><a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">glm::mediump_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, mediump &gt; mediump_u16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00349\">fwd.hpp:349</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafd9a6ebc0c7b95f5c581d00d16a17c54\"><div class=\"ttname\"><a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">glm::mediump_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00761\">fwd.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4502885718742aa238c36a312c3f3f20\"><div class=\"ttname\"><a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">glm::lowp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, lowp &gt; lowp_u32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00367\">fwd.hpp:367</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0f038d4e09862a74f03d102c59eda73e\"><div class=\"ttname\"><a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">glm::highp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, highp &gt; highp_f32vec4</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00459\">fwd.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga43e5b41c834fcaf4db5a831c0e28128e\"><div class=\"ttname\"><a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">glm::lowp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, lowp &gt; lowp_f32vec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00446\">fwd.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0aeb5cb001473b08c88175012708a379\"><div class=\"ttname\"><a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">glm::highp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00691\">fwd.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20bf224bd4f8a24ecc4ed2004a40c219\"><div class=\"ttname\"><a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">glm::mediump_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, mediump &gt; mediump_i32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00268\">fwd.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7451266e67794bd1125163502bc4a570\"><div class=\"ttname\"><a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">glm::lowp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00574\">fwd.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8cb400c0f4438f2640035d7b9824a0ca\"><div class=\"ttname\"><a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">glm::fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00538\">fwd.hpp:538</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaefe8ef520c6cb78590ebbefe648da4d4\"><div class=\"ttname\"><a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">glm::mediump_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00645\">fwd.hpp:645</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadf70eaaa230aeed5a4c9f4c9c5c55902\"><div class=\"ttname\"><a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">glm::highp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, highp &gt; highp_i32vec4</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00275\">fwd.hpp:275</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae54e4d1aeb5a0f0c64822e6f1b299e19\"><div class=\"ttname\"><a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">glm::highp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00653\">fwd.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa03f939d90d5ef157df957d93f0b9a64\"><div class=\"ttname\"><a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">glm::mediump_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00641\">fwd.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga49b98e7d71804af45d86886a489e633c\"><div class=\"ttname\"><a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">glm::lowp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00633\">fwd.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga17d36f0ea22314117e1cec9594b33945\"><div class=\"ttname\"><a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">glm::mediump_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00766\">fwd.hpp:766</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga791b15ceb3f1e09d1a0ec6f3057ca159\"><div class=\"ttname\"><a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">glm::highp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, highp &gt; highp_u16vec2</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00355\">fwd.hpp:355</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62c31b133ceee9984fbee05ac4c434a9\"><div class=\"ttname\"><a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">glm::highp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, highp &gt; highp_f64vec1</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00496\">fwd.hpp:496</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b5e2c9aaa5d7717bf71179aefa12e88\"><div class=\"ttname\"><a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">glm::mediump_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, mediump &gt; mediump_i16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00248\">fwd.hpp:248</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4920a1536f161f7ded1d6909b7fef0d2\"><div class=\"ttname\"><a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">glm::highp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00652\">fwd.hpp:652</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac53f9d7ab04eace67adad026092fb1e8\"><div class=\"ttname\"><a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">glm::lowp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00673\">fwd.hpp:673</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62324224b9c6cce9c6b4db96bb704a8a\"><div class=\"ttname\"><a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">glm::highp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, highp &gt; highp_i64vec3</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00294\">fwd.hpp:294</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab005efe0fa4de1a928e8ddec4bc2c43f\"><div class=\"ttname\"><a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">glm::mediump_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00686\">fwd.hpp:686</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae7a4711107b7d078fc5f03ce2227b90b\"><div class=\"ttname\"><a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">glm::lowp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, lowp &gt; lowp_f64vec3</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00488\">fwd.hpp:488</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><div class=\"ttname\"><a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">glm::lowp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, lowp &gt; lowp_i64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00284\">fwd.hpp:284</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a8bdc32184ea0a522ef7bd90640cf67\"><div class=\"ttname\"><a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">glm::mediump_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, mediump &gt; mediump_i8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00228\">fwd.hpp:228</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5609c8fa2b7eac3dec337d321cb0ca96\"><div class=\"ttname\"><a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">glm::highp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, highp &gt; highp_i16vec3</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00254\">fwd.hpp:254</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3be6c7fc5fe08fa2274bdb001d5f2633\"><div class=\"ttname\"><a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">glm::mediump_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, mediump &gt; mediump_i16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00249\">fwd.hpp:249</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga42569e5b92f8635cedeadb1457ee1467\"><div class=\"ttname\"><a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">glm::mediump_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00643\">fwd.hpp:643</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8343e9d244fb17a5bbf0d94d36b3695e\"><div class=\"ttname\"><a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">glm::mediump_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, mediump &gt; mediump_i64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00287\">fwd.hpp:287</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac8f8a12ee03105ef8861dc652434e3b7\"><div class=\"ttname\"><a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">glm::lowp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00754\">fwd.hpp:754</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e641a54d70c81eabf56c25c966d04bd\"><div class=\"ttname\"><a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">glm::lowp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, lowp &gt; lowp_f64vec2</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00487\">fwd.hpp:487</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf111095594996fef29067b2454fccad\"><div class=\"ttname\"><a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">glm::highp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00651\">fwd.hpp:651</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58119a41d143ebaea0df70fe882e8a40\"><div class=\"ttname\"><a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">glm::lowp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00573\">fwd.hpp:573</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac21eda58a1475449a5709b412ebd776c\"><div class=\"ttname\"><a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">glm::lowp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00677\">fwd.hpp:677</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1900c6ab74acd392809425953359ef52\"><div class=\"ttname\"><a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">glm::mediump_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, mediump &gt; mediump_u64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00391\">fwd.hpp:391</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab83d8aae6e4f115e97a785e8574a115f\"><div class=\"ttname\"><a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">glm::mediump_float64</a></div><div class=\"ttdeci\">double mediump_float64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00169\">fwd.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7db3ad10947cf70cae6474d05ebd227\"><div class=\"ttname\"><a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">glm::highp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, highp &gt; highp_i16vec2</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00253\">fwd.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga39e90adcffe33264bd608fa9c6bd184b\"><div class=\"ttname\"><a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">glm::lowp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00751\">fwd.hpp:751</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad3ad390560a671b1f676fbf03cd3aa15\"><div class=\"ttname\"><a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">glm::lowp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, lowp &gt; lowp_u32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00366\">fwd.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga755484ffbe39ae3db2875953ed04e7b7\"><div class=\"ttname\"><a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">glm::lowp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_fvec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00429\">fwd.hpp:429</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad80c84bcd5f585840faa6179f6fd446c\"><div class=\"ttname\"><a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">glm::mediump_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, mediump &gt; mediump_f32vec4</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00454\">fwd.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad38c544d332b8c4bd0b70b1bd9feccc2\"><div class=\"ttname\"><a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">glm::mediump_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00765\">fwd.hpp:765</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga71cdb53801ed4c3aadb3603c04723210\"><div class=\"ttname\"><a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">glm::lowp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00631\">fwd.hpp:631</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabed3be8dfdc4a0df4bf3271dbd7344c4\"><div class=\"ttname\"><a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">glm::lowp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, lowp &gt; lowp_u32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00364\">fwd.hpp:364</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga46a57f71e430637559097a732b550a7e\"><div class=\"ttname\"><a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">glm::mediump_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, mediump &gt; mediump_i32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00267\">fwd.hpp:267</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><div class=\"ttname\"><a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">glm::highp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, highp &gt; highp_u16vec4</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00357\">fwd.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae31ac3608cf643ceffd6554874bec4a0\"><div class=\"ttname\"><a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">glm::lowp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, lowp &gt; lowp_i32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00262\">fwd.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0f7d875db5f3cc9f3168c5a0ed56437\"><div class=\"ttname\"><a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">glm::lowp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, lowp &gt; lowp_i64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00282\">fwd.hpp:282</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0e35a565b9036bfc3989f5e23a0792e3\"><div class=\"ttname\"><a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">glm::highp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, highp &gt; highp_u32vec1</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00374\">fwd.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga461c4c7d0757404dd0dba931760b25cf\"><div class=\"ttname\"><a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">glm::mediump_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, mediump &gt; mediump_f64vec3</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00493\">fwd.hpp:493</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d8c10949691b0fd990253476f47beb3\"><div class=\"ttname\"><a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">glm::highp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, highp &gt; highp_i8vec1</div><div class=\"ttdoc\">High qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00232\">fwd.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a11ccd2e38f674bbf3c2d1afc232aee\"><div class=\"ttname\"><a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">glm::mediump_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, mediump &gt; mediump_u32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00369\">fwd.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d091b6abfba1772450e1745a06525bc\"><div class=\"ttname\"><a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">glm::lowp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00670\">fwd.hpp:670</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e2e1debe022074ab224c9faf856d374\"><div class=\"ttname\"><a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">glm::lowp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, lowp &gt; lowp_f32vec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00449\">fwd.hpp:449</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6ef77413883f48d6b53b4169b25edbd0\"><div class=\"ttname\"><a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">glm::highp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_fvec3</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00438\">fwd.hpp:438</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0cecb80fd106bc369b9e46a165815ce\"><div class=\"ttname\"><a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">glm::lowp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00756\">fwd.hpp:756</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6f526388c74a66b3d52315a14d434ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">glm::mediump_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00644\">fwd.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabd2fda3cd208acf5a370ec9b5b3c58d4\"><div class=\"ttname\"><a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">glm::highp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, highp &gt; highp_i64vec1</div><div class=\"ttdoc\">High qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00292\">fwd.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad4cc829ab1ad3e05ac0a24828a3c95cf\"><div class=\"ttname\"><a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">glm::mediump_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00681\">fwd.hpp:681</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0eb2d65514ee3e49905aa2caad8c0ad\"><div class=\"ttname\"><a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">glm::lowp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00753\">fwd.hpp:753</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66edb8de17b9235029472f043ae107e9\"><div class=\"ttname\"><a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">glm::mediump_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00768\">fwd.hpp:768</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7f00459b9a2e5b2757e70afc0c189e1\"><div class=\"ttname\"><a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">glm::lowp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, lowp &gt; lowp_u16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00347\">fwd.hpp:347</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga766aed2871e6173a81011a877f398f04\"><div class=\"ttname\"><a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">glm::lowp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00542\">fwd.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7812bf00676fb1a86dcd62cca354d2c7\"><div class=\"ttname\"><a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">glm::mediump_float32</a></div><div class=\"ttdeci\">float mediump_float32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00153\">fwd.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfea053bd6bb3eddb996a4f94de22a3e\"><div class=\"ttname\"><a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">glm::mediump_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, mediump &gt; mediump_f64vec4</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00494\">fwd.hpp:494</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><div class=\"ttname\"><a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">glm::highp_float32</a></div><div class=\"ttdeci\">float highp_float32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00154\">fwd.hpp:154</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50265a202fbfe0a25fc70066c31d9336\"><div class=\"ttname\"><a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">glm::lowp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00752\">fwd.hpp:752</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade8d1edfb23996ab6c622e65e3893271\"><div class=\"ttname\"><a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">glm::lowp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00755\">fwd.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab485c48f06a4fdd6b8d58d343bb49f3c\"><div class=\"ttname\"><a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">glm::lowp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, lowp &gt; lowp_i64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00283\">fwd.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc6bf0209dda0c7c14851a646071c974\"><div class=\"ttname\"><a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">glm::lowp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00672\">fwd.hpp:672</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24f9ef3263b1638564713892cc37981f\"><div class=\"ttname\"><a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">glm::highp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00549\">fwd.hpp:549</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84d88a6e3a54ccd2b67e195af4a4c23e\"><div class=\"ttname\"><a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">glm::mediump_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00764\">fwd.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31e070ea3bdee623e6e18a61ba5718b1\"><div class=\"ttname\"><a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">glm::highp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, highp &gt; highp_i32vec3</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00274\">fwd.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6a9d71cc62745302f70422b7dc98755c\"><div class=\"ttname\"><a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">glm::highp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, highp &gt; highp_i32vec1</div><div class=\"ttdoc\">High qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00272\">fwd.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4187f89f196505b40e63f516139511e5\"><div class=\"ttname\"><a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">glm::lowp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00541\">fwd.hpp:541</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga13a221b910aa9eb1b04ca1c86e81015a\"><div class=\"ttname\"><a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">glm::mediump_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, mediump &gt; mediump_i32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00269\">fwd.hpp:269</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7cac84b520a6b57f2fbd880d3d63c51b\"><div class=\"ttname\"><a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">glm::lowp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, lowp &gt; lowp_i16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00243\">fwd.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73a08ef5a74798f3a1a99250b5f86a7d\"><div class=\"ttname\"><a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">glm::mediump_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, mediump &gt; mediump_u64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00390\">fwd.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9910927f3a4d1addb3da6a82542a8287\"><div class=\"ttname\"><a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">glm::lowp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, lowp &gt; lowp_u8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00327\">fwd.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab691ae40c37976d268d8cac0096e0e1\"><div class=\"ttname\"><a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">glm::highp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00694\">fwd.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8408cb76b6550ff01fa0a3024e7b68d2\"><div class=\"ttname\"><a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">glm::highp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, highp &gt; highp_u8vec1</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00334\">fwd.hpp:334</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d43ee8b5dbaa06c327b03b83682598a\"><div class=\"ttname\"><a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">glm::mediump_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, mediump &gt; mediump_u32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00372\">fwd.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae5eb02d92b7d4605a4b7f37ae5cb2968\"><div class=\"ttname\"><a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">glm::highp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00690\">fwd.hpp:690</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga61185c44c8cc0b25d9a0f67d8a267444\"><div class=\"ttname\"><a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">glm::highp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, highp &gt; highp_f64vec4</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00499\">fwd.hpp:499</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga150dc47e31c6b8cf8461803c8d56f7bd\"><div class=\"ttname\"><a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">glm::lowp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, lowp &gt; lowp_u8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00326\">fwd.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6906e1ef0b34064b4b675489c5c38725\"><div class=\"ttname\"><a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">glm::highp_f32</a></div><div class=\"ttdeci\">float highp_f32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00149\">fwd.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961ccb34cd1a5654c772c8709e001dc5\"><div class=\"ttname\"><a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">glm::lowp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00671\">fwd.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9ba20234b0c3751d45ce575fc71e551\"><div class=\"ttname\"><a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">glm::mediump_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, mediump &gt; mediump_u16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00351\">fwd.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga856f3905ee7cc2e4890a8a1d56c150be\"><div class=\"ttname\"><a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">glm::f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00553\">fwd.hpp:553</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4fd527644cccbca4cb205320eab026f3\"><div class=\"ttname\"><a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">glm::mediump_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00760\">fwd.hpp:760</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a18659438828f91ccca28f1a1e067b4\"><div class=\"ttname\"><a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">glm::highp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, highp &gt; highp_i16vec4</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00255\">fwd.hpp:255</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5803cb9ae26399762d8bba9e0b2fc09f\"><div class=\"ttname\"><a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">glm::lowp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00526\">fwd.hpp:526</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga94f74851fce338549c705b5f0d601c4f\"><div class=\"ttname\"><a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">glm::mediump_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, mediump &gt; mediump_u32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00370\">fwd.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41bdabea6e589029659331ba47eb78c1\"><div class=\"ttname\"><a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">glm::highp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, highp &gt; highp_u64vec3</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00396\">fwd.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab69ef9cbc2a9214bf5596c528c801b72\"><div class=\"ttname\"><a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">glm::lowp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, lowp &gt; lowp_i16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00244\">fwd.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac0253db6c3d3bae1f591676307a9dd8c\"><div class=\"ttname\"><a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">glm::lowp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, lowp &gt; lowp_u16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00346\">fwd.hpp:346</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf739a2cd7b81783a43148b53e40d983b\"><div class=\"ttname\"><a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">glm::lowp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, lowp &gt; lowp_f32vec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00448\">fwd.hpp:448</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf28443ce0cc0959077ec39b21f32c39\"><div class=\"ttname\"><a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">glm::highp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00534\">fwd.hpp:534</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga83079315e230e8f39728f4bf0d2f9a9b\"><div class=\"ttname\"><a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">glm::lowp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00525\">fwd.hpp:525</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa40c03d52dbfbfaf03e75773b9606ff3\"><div class=\"ttname\"><a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">glm::mediump_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, mediump &gt; mediump_f32quat</div><div class=\"ttdoc\">Medium single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00803\">fwd.hpp:803</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab217601c74974a84acbca428123ecf7\"><div class=\"ttname\"><a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">glm::lowp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00632\">fwd.hpp:632</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga609bf0ace941d6ab1bb2f9522a04e546\"><div class=\"ttname\"><a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">glm::highp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00581\">fwd.hpp:581</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6dd1c1618378c6f94d522a61c28773c9\"><div class=\"ttname\"><a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">glm::mediump_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, mediump &gt; mediump_i8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00229\">fwd.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab1b1c9e8667902b78b2c330e4d383a61\"><div class=\"ttname\"><a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">glm::highp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, highp &gt; highp_f32vec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00456\">fwd.hpp:456</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae2f43ace6b5b33ab49516d9e40af1845\"><div class=\"ttname\"><a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">glm::lowp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, lowp &gt; lowp_i8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00224\">fwd.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae731613b25db3a5ef5a05d21e57a57d3\"><div class=\"ttname\"><a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">glm::lowp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00757\">fwd.hpp:757</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f15b41aa24b11cc42ad5798c04a2325\"><div class=\"ttname\"><a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">glm::highp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, highp &gt; highp_u64vec4</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00397\">fwd.hpp:397</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab12383ed6ac7595ed6fde4d266c58425\"><div class=\"ttname\"><a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">glm::f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00552\">fwd.hpp:552</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga429c201b3e92c90b4ef4356f2be52ee1\"><div class=\"ttname\"><a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">glm::mediump_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, mediump &gt; mediump_u16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00350\">fwd.hpp:350</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga35223623e9ccebd8a281873b71b7d213\"><div class=\"ttname\"><a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">glm::mediump_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00642\">fwd.hpp:642</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4143d129898f91545948c46859adce44\"><div class=\"ttname\"><a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">glm::lowp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00678\">fwd.hpp:678</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f63fa38635431e51a8f2602f15c566\"><div class=\"ttname\"><a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">glm::lowp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, lowp &gt; lowp_u8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00325\">fwd.hpp:325</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad35fb67eb1d03c5a514f0bd7aed1c776\"><div class=\"ttname\"><a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">glm::mediump_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00577\">fwd.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961fac2a885907ffcf4d40daac6615c5\"><div class=\"ttname\"><a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">glm::highp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00655\">fwd.hpp:655</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga09a2374b725c4246d263ee36fb66434c\"><div class=\"ttname\"><a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">glm::highp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00778\">fwd.hpp:778</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade108f16633cf95fa500b5b8c36c8b00\"><div class=\"ttname\"><a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">glm::mediump_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00687\">fwd.hpp:687</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80823dfad5dba98512c76af498343847\"><div class=\"ttname\"><a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">glm::mediump_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00529\">fwd.hpp:529</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b712b97b2322685fbbed28febe5f84\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">glm::highp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00698\">fwd.hpp:698</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><div class=\"ttname\"><a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">glm::highp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, highp &gt; highp_f64vec2</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00497\">fwd.hpp:497</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga581485db4ba6ddb501505ee711fd8e42\"><div class=\"ttname\"><a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">glm::lowp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, lowp &gt; lowp_u64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00385\">fwd.hpp:385</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga253d453c20e037730023fea0215cb6f6\"><div class=\"ttname\"><a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">glm::fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00537\">fwd.hpp:537</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaab39454f56cf9fc6d940358ce5e6a0f\"><div class=\"ttname\"><a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">glm::mediump_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00683\">fwd.hpp:683</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f3fcb702a666de07650c149cfa845a\"><div class=\"ttname\"><a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">glm::lowp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00676\">fwd.hpp:676</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf1f16c5ab8cb0484bd1e846ae4368f1\"><div class=\"ttname\"><a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">glm::mediump_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, mediump &gt; mediump_i64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00290\">fwd.hpp:290</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga85e8893f4ae3630065690a9000c0c483\"><div class=\"ttname\"><a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">glm::mediump_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, mediump &gt; mediump_i8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00227\">fwd.hpp:227</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5376ef18dca9d248897c3363ef5a06b2\"><div class=\"ttname\"><a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">glm::highp_float32_t</a></div><div class=\"ttdeci\">float highp_float32_t</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00159\">fwd.hpp:159</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga076961cf2d120c7168b957cb2ed107b3\"><div class=\"ttname\"><a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">glm::highp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00656\">fwd.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0b8ebd4262331e139ff257d7cf2a4b77\"><div class=\"ttname\"><a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">glm::highp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, highp &gt; highp_f32vec2</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00457\">fwd.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4a8682bec7ec8af666ef87fae38d5d1\"><div class=\"ttname\"><a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">glm::lowp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, lowp &gt; lowp_u64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00386\">fwd.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga773ea237a051827cfc20de960bc73ff0\"><div class=\"ttname\"><a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">glm::highp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00770\">fwd.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf14d7a50502464e7cbfa074f24684cb1\"><div class=\"ttname\"><a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">glm::highp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, highp &gt; highp_u32vec3</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00376\">fwd.hpp:376</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ba60ef8f69c6aeb1629594eaa95347\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">glm::lowp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, lowp &gt; lowp_f32quat</div><div class=\"ttdoc\">Low single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00802\">fwd.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9b2eb4296ffe50a32eacca9ed932c08\"><div class=\"ttname\"><a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">glm::lowp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, lowp &gt; lowp_i32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00265\">fwd.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga70fdfcc1fd38084bde83c3f06a8b9f19\"><div class=\"ttname\"><a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">glm::highp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, highp &gt; highp_i16vec1</div><div class=\"ttdoc\">High qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00252\">fwd.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac2f5263708ac847b361a9841e74ddf9f\"><div class=\"ttname\"><a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">glm::lowp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00638\">fwd.hpp:638</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga841211b641cff1fcf861bdb14e5e4abc\"><div class=\"ttname\"><a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">glm::lowp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00674\">fwd.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac03e5099d27eeaa74b6016ea435a1df2\"><div class=\"ttname\"><a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">glm::lowp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, lowp &gt; lowp_i8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00223\">fwd.hpp:223</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga298f7d4d273678d0282812368da27fda\"><div class=\"ttname\"><a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">glm::highp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00548\">fwd.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaeea53879fc327293cf3352a409b7867b\"><div class=\"ttname\"><a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">glm::lowp_f32</a></div><div class=\"ttdeci\">float lowp_f32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00147\">fwd.hpp:147</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5793393686ce5bd2d5968ff9144762b8\"><div class=\"ttname\"><a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">glm::mediump_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, mediump &gt; mediump_u16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00352\">fwd.hpp:352</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga78f77b8b2d17b431ac5a68c0b5d7050d\"><div class=\"ttname\"><a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">glm::highp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, highp &gt; highp_u64vec2</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00395\">fwd.hpp:395</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">glm::mediump_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00680\">fwd.hpp:680</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54697a78f9a4643af6a57fc2e626ec0d\"><div class=\"ttname\"><a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">glm::mediump_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00767\">fwd.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga51d5266017d88f62737c1973923a7cf4\"><div class=\"ttname\"><a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">glm::highp_f64</a></div><div class=\"ttdeci\">double highp_f64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00165\">fwd.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga999dc6703ad16e3d3c26b74ea8083f07\"><div class=\"ttname\"><a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">glm::mediump_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_fvec3</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00433\">fwd.hpp:433</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaec7ee455cb379ec2993e81482123e1cc\"><div class=\"ttname\"><a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">glm::mediump_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, mediump &gt; mediump_u64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00392\">fwd.hpp:392</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2f256334f83fba4c2d219e414b51df6c\"><div class=\"ttname\"><a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">glm::highp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, highp &gt; highp_u32vec2</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00375\">fwd.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa1040342c4efdedc8f90e6267db8d41c\"><div class=\"ttname\"><a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">glm::highp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_fvec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00436\">fwd.hpp:436</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb4229a4c1488bf063eed0c45355bb9c\"><div class=\"ttname\"><a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">glm::lowp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, lowp &gt; lowp_i64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00285\">fwd.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga88938ee1e7981fa3402e88da6ad74531\"><div class=\"ttname\"><a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">glm::highp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00692\">fwd.hpp:692</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><div class=\"ttname\"><a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">glm::lowp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, lowp &gt; lowp_i8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00222\">fwd.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7adb92ce8de0afaff01436b039fd924\"><div class=\"ttname\"><a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">glm::highp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00580\">fwd.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><div class=\"ttname\"><a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">glm::highp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</div><div class=\"ttdoc\">High double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00773\">fwd.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga012c24c8fc69707b90260474c70275a2\"><div class=\"ttname\"><a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">glm::mediump_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, mediump &gt; mediump_u32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00371\">fwd.hpp:371</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga45721c13b956eb691cbd6c6c1429167a\"><div class=\"ttname\"><a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">glm::highp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, highp &gt; highp_u8vec3</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00336\">fwd.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50542e4cb9b2f9bec213b66e06145d07\"><div class=\"ttname\"><a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">glm::highp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, highp &gt; highp_i8vec2</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00233\">fwd.hpp:233</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fe17c87ede1b1b4d92454cff4da076d\"><div class=\"ttname\"><a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">glm::lowp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, lowp &gt; lowp_i32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00264\">fwd.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22e27beead07bff4d5ce9d6065a57279\"><div class=\"ttname\"><a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">glm::mediump_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00648\">fwd.hpp:648</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d47d94d17c2406abdd1f087a816e387\"><div class=\"ttname\"><a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">glm::lowp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, lowp &gt; lowp_i16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00245\">fwd.hpp:245</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae94823d65648e44d972863c6caa13103\"><div class=\"ttname\"><a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">glm::highp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</div><div class=\"ttdoc\">High double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00777\">fwd.hpp:777</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga27585b7c3ab300059f11fcba465f6fd2\"><div class=\"ttname\"><a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">glm::highp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, highp &gt; highp_u8vec2</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00335\">fwd.hpp:335</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8396bfdc081d9113190d0c39c9f67084\"><div class=\"ttname\"><a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">glm::highp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, highp &gt; highp_i8vec3</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00234\">fwd.hpp:234</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1196090ece7a69fb5c3e43a7d4d851\"><div class=\"ttname\"><a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">glm::highp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, highp &gt; highp_f64vec3</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00498\">fwd.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa666bb9e6d204d3bea0b3a39a3a335f4\"><div class=\"ttname\"><a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">glm::lowp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, lowp &gt; lowp_f64vec4</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00489\">fwd.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga062ffef2973bd8241df993c3b30b327c\"><div class=\"ttname\"><a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">glm::mediump_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, mediump &gt; mediump_f32vec3</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00453\">fwd.hpp:453</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabc7a97c07cbfac8e35eb5e63beb4b679\"><div class=\"ttname\"><a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">glm::lowp_f64</a></div><div class=\"ttdeci\">double lowp_f64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00163\">fwd.hpp:163</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5868c2dcce41cc3ea5edcaeae239f62c\"><div class=\"ttname\"><a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">glm::lowp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00636\">fwd.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a67a7440b9c0d1538533540f99036a5\"><div class=\"ttname\"><a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">glm::highp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</div><div class=\"ttdoc\">High double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00772\">fwd.hpp:772</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad308e0ed27d64daa4213fb257fcbd5a5\"><div class=\"ttname\"><a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">glm::highp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00582\">fwd.hpp:582</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6addd4dfee87fc09ab9525e3d07db4c8\"><div class=\"ttname\"><a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">glm::mediump_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, mediump &gt; mediump_i32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00270\">fwd.hpp:270</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga52409bc6d4a2ce3421526c069220d685\"><div class=\"ttname\"><a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">glm::lowp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00540\">fwd.hpp:540</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad310b1dddeec9ec837a104e7db8de580\"><div class=\"ttname\"><a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">glm::highp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</div><div class=\"ttdoc\">High double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00775\">fwd.hpp:775</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaed2dc69e0d507d4191092dbd44b3eb75\"><div class=\"ttname\"><a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">glm::highp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00533\">fwd.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd80ad7640e9e32f2edcb8330b1ffe4f\"><div class=\"ttname\"><a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">glm::mediump_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00684\">fwd.hpp:684</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e52f485059ce6e3010c590b882602c9\"><div class=\"ttname\"><a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">glm::mediump_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, mediump &gt; mediump_f64quat</div><div class=\"ttdoc\">Medium double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00813\">fwd.hpp:813</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc44265ed440bf5e6e566782570de842\"><div class=\"ttname\"><a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">glm::mediump_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, mediump &gt; mediump_i16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00247\">fwd.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28635abcddb2f3e92c33c3f0fcc682ad\"><div class=\"ttname\"><a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">glm::highp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00650\">fwd.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b839abbb44f5102609eed89f6ed61f7\"><div class=\"ttname\"><a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">glm::highp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_fvec4</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00439\">fwd.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c2cadb9b85cc7e0d125db21ca19dea4\"><div class=\"ttname\"><a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">glm::highp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00774\">fwd.hpp:774</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a7d997da9ac29cb931e35bd399f58df\"><div class=\"ttname\"><a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">glm::lowp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, lowp &gt; lowp_u16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00345\">fwd.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22166f0da65038b447f3c5e534fff1c2\"><div class=\"ttname\"><a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">glm::highp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, highp &gt; highp_u32vec4</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00377\">fwd.hpp:377</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><div class=\"ttname\"><a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">glm::lowp_float32_t</a></div><div class=\"ttdeci\">float lowp_float32_t</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00157\">fwd.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3b694b2b8ded7e0b9f07b061917e1a0\"><div class=\"ttname\"><a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">glm::lowp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, lowp &gt; lowp_f32vec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00447\">fwd.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1281da5ded55047e8892b0e1f1ae965\"><div class=\"ttname\"><a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">glm::mediump_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00576\">fwd.hpp:576</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><div class=\"ttname\"><a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">glm::highp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00697\">fwd.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_gae4fe774744852c4d7d069be2e05257ab\"><div class=\"ttname\"><a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">glm::highp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, highp &gt; highp_u64vec1</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00394\">fwd.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8342c7469384c6d769cacc9e309278d9\"><div class=\"ttname\"><a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">glm::highp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</div><div class=\"ttdoc\">High double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00771\">fwd.hpp:771</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><div class=\"ttname\"><a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">glm::lowp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, lowp &gt; lowp_i8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00225\">fwd.hpp:225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e649bbdb135fbcb4bfe950f4c73a444\"><div class=\"ttname\"><a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">glm::lowp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00637\">fwd.hpp:637</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa9b4579f8e6f3d9b649a965bcb785530\"><div class=\"ttname\"><a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">glm::highp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, highp &gt; highp_i32vec2</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00273\">fwd.hpp:273</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4a43050843b141bdc7e85437faef6f55\"><div class=\"ttname\"><a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">glm::mediump_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, mediump &gt; mediump_u8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00329\">fwd.hpp:329</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae406ec670f64170a7437b5e302eeb2cb\"><div class=\"ttname\"><a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">glm::highp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00657\">fwd.hpp:657</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf52982bb23e3a3772649b2c5bb84b107\"><div class=\"ttname\"><a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">glm::mediump_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, mediump &gt; mediump_i16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00250\">fwd.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa805ef691c711dc41e2776cfb67f5cf5\"><div class=\"ttname\"><a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">glm::mediump_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00578\">fwd.hpp:578</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaf4ee3b76d43d98da02ec399b99bda4b\"><div class=\"ttname\"><a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">glm::mediump_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, mediump &gt; mediump_u8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00332\">fwd.hpp:332</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga21b1b22dec013a72656e3644baf8a1e1\"><div class=\"ttname\"><a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">glm::lowp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00675\">fwd.hpp:675</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac61843e4fa96c1f4e9d8316454f32a8e\"><div class=\"ttname\"><a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">glm::mediump_float64_t</a></div><div class=\"ttdeci\">double mediump_float64_t</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00174\">fwd.hpp:174</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c0d196f5fa79f7e892a2f323a0be1ae\"><div class=\"ttname\"><a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">glm::highp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_fvec2</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00437\">fwd.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga99d1b85ff99956b33da7e9992aad129a\"><div class=\"ttname\"><a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">glm::f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00554\">fwd.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacea38a85893e17e6834b6cb09a9ad0cf\"><div class=\"ttname\"><a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">glm::mediump_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00646\">fwd.hpp:646</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafc730f6b4242763b0eda0ffa25150292\"><div class=\"ttname\"><a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">glm::lowp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00572\">fwd.hpp:572</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaba56275dd04a7a61560b0e8fa5d365b4\"><div class=\"ttname\"><a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">glm::lowp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00634\">fwd.hpp:634</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7286a37076a09da140df18bfa75d4e38\"><div class=\"ttname\"><a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">glm::lowp_float64_t</a></div><div class=\"ttdeci\">double lowp_float64_t</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00173\">fwd.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5b44d3ef6efcf33f44876673a7a936e\"><div class=\"ttname\"><a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">glm::highp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00654\">fwd.hpp:654</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b2e0e10d8d154fec9cab50e216588ec\"><div class=\"ttname\"><a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">glm::lowp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, lowp &gt; lowp_u8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00324\">fwd.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8089722ffdf868cdfe721dea1fb6a90e\"><div class=\"ttname\"><a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">glm::mediump_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, mediump &gt; mediump_i64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00289\">fwd.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><div class=\"ttname\"><a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">glm::highp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, highp &gt; highp_f32quat</div><div class=\"ttdoc\">High single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00804\">fwd.hpp:804</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga907f85d4a0eac3d8aaf571e5c2647194\"><div class=\"ttname\"><a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">glm::mediump_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, mediump &gt; mediump_u8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00330\">fwd.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6aab4ee7189b86716f5d7015d43021d\"><div class=\"ttname\"><a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">glm::lowp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, lowp &gt; lowp_u16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00344\">fwd.hpp:344</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee80c7cd3caa0f2635058656755f6f69\"><div class=\"ttname\"><a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">glm::highp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00658\">fwd.hpp:658</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5086dbd6efb272d13fc88829330861d\"><div class=\"ttname\"><a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">glm::highp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00695\">fwd.hpp:695</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfd806749008f0ade6ac4bb9dd91082f\"><div class=\"ttname\"><a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">glm::highp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, highp &gt; highp_u16vec3</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00356\">fwd.hpp:356</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4dee61f8fe1caccec309fbed02faf12\"><div class=\"ttname\"><a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">glm::mediump_float32_t</a></div><div class=\"ttdeci\">float mediump_float32_t</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00158\">fwd.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><div class=\"ttname\"><a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">glm::mediump_f32</a></div><div class=\"ttdeci\">float mediump_f32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00148\">fwd.hpp:148</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga936e95b881ecd2d109459ca41913fa99\"><div class=\"ttname\"><a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">glm::mediump_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00688\">fwd.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad6eb11412a3161ca8dc1d63b2a307c4b\"><div class=\"ttname\"><a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">glm::mediump_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, mediump &gt; mediump_f32vec2</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00452\">fwd.hpp:452</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf2d02c5f4d59135b9bc524fe317fd26b\"><div class=\"ttname\"><a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">glm::lowp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, lowp &gt; lowp_f64vec1</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00486\">fwd.hpp:486</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga36537e701456f12c20e73f469cac4967\"><div class=\"ttname\"><a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">glm::highp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00693\">fwd.hpp:693</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd926d36a72433f6cac51dd60fa13107\"><div class=\"ttname\"><a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">glm::mediump_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00763\">fwd.hpp:763</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaddc6f7748b699254942c5216b68f8f7f\"><div class=\"ttname\"><a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">glm::mediump_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, mediump &gt; mediump_u8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00331\">fwd.hpp:331</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c9cd734e03cd49674f3e287aa4a6f95\"><div class=\"ttname\"><a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">glm::lowp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00758\">fwd.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga501a2f313f1c220eef4ab02bdabdc3c6\"><div class=\"ttname\"><a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">glm::lowp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, lowp &gt; lowp_i16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00242\">fwd.hpp:242</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7e286e81347011e257ee779524e73b9\"><div class=\"ttname\"><a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">glm::lowp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, lowp &gt; lowp_u32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00365\">fwd.hpp:365</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae71445ac6cd0b9fba3e5c905cd030fb1\"><div class=\"ttname\"><a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">glm::mediump_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00682\">fwd.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9d1903cb20899966e8ebe0670889a5f\"><div class=\"ttname\"><a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">glm::highp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, highp &gt; highp_i64vec2</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00293\">fwd.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4491baaebbc46a20f1cb5da985576bf4\"><div class=\"ttname\"><a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">glm::mediump_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00546\">fwd.hpp:546</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb33cab7d7c74cc14aa95455d0690865\"><div class=\"ttname\"><a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">glm::mediump_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, mediump &gt; mediump_f32vec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00451\">fwd.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8df705d775b776f5ae6b39e2ab892899\"><div class=\"ttname\"><a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">glm::mediump_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00685\">fwd.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae98c88d9a7befa9b5877f49176225535\"><div class=\"ttname\"><a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">glm::highp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00532\">fwd.hpp:532</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga522775dbcc6d96246a1c5cf02344fd8c\"><div class=\"ttname\"><a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">glm::highp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, highp &gt; highp_f32vec3</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00458\">fwd.hpp:458</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac7bb04fb857ef7b520e49f6c381432be\"><div class=\"ttname\"><a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">glm::mediump_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, mediump &gt; mediump_i8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00230\">fwd.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41b0d390bd8cc827323b1b3816ff4bf8\"><div class=\"ttname\"><a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">glm::lowp_float32</a></div><div class=\"ttdeci\">float lowp_float32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00152\">fwd.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bed890513c0f50b7e7ba4f7f359dbfb\"><div class=\"ttname\"><a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">glm::mediump_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_fvec4</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00434\">fwd.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ee2bc4af03cc06578b66b3e3f878ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">glm::lowp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, lowp &gt; lowp_f64quat</div><div class=\"ttdoc\">Low double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00812\">fwd.hpp:812</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0feb11edd0d3ab3e8ed996d349a5066\"><div class=\"ttname\"><a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">glm::lowp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00630\">fwd.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4824e3ddf6e608117dfe4809430737b4\"><div class=\"ttname\"><a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">glm::highp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, highp &gt; highp_i8vec4</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00235\">fwd.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fccc89c34045c86339f6fa781ce96de\"><div class=\"ttname\"><a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">glm::lowp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, lowp &gt; lowp_u64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00387\">fwd.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c94aeae3457325944ca1059b0b68330\"><div class=\"ttname\"><a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">glm::mediump_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, mediump &gt; mediump_i64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00288\">fwd.hpp:288</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58c4631421e323e252fc716b6103e38c\"><div class=\"ttname\"><a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">glm::highp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</div><div class=\"ttdoc\">High double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00776\">fwd.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga867a3c2d99ab369a454167d2c0a24dbd\"><div class=\"ttname\"><a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">glm::lowp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, lowp &gt; lowp_i32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00263\">fwd.hpp:263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafcfdd74a115163af2ce1093551747352\"><div class=\"ttname\"><a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">glm::highp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, highp &gt; highp_f64quat</div><div class=\"ttdoc\">High double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00814\">fwd.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8ebc04ecf6440c4ee24718a16600ce6b\"><div class=\"ttname\"><a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">glm::mediump_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, mediump &gt; mediump_f64vec2</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00492\">fwd.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga346b2336fff168a7e0df1583aae3e5a5\"><div class=\"ttname\"><a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">glm::lowp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_fvec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00426\">fwd.hpp:426</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga659f372ccb8307d5db5beca942cde5e8\"><div class=\"ttname\"><a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">glm::mediump_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, mediump &gt; mediump_u64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00389\">fwd.hpp:389</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf9020c6176a75bc84828ab01ea7dac25\"><div class=\"ttname\"><a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">glm::mediump_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00544\">fwd.hpp:544</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<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>\n<div class=\"ttc\" id=\"a00304_html_ga6d40381d78472553f878f66e443feeef\"><div class=\"ttname\"><a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">glm::mediump_f64</a></div><div class=\"ttdeci\">double mediump_f64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00164\">fwd.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga367964fc2133d3f1b5b3755ff9cf6c9b\"><div class=\"ttname\"><a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">glm::mediump_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_fvec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00431\">fwd.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae0b75ad0fed8c00ddc0b5ce335d31060\"><div class=\"ttname\"><a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">glm::highp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, highp &gt; highp_u8vec4</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00337\">fwd.hpp:337</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00175.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_ptr.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">type_ptr.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00175_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">More...</a><br /></td></tr>\n<tr class=\"separator:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga21982104164789cf8985483aaefc25e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21982104164789cf8985483aaefc25e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">More...</a><br /></td></tr>\n<tr class=\"separator:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from a pointer.  <a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">make_vec1</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">make_vec1</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga13c92b81e55f201b052a6404d57da220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">make_vec1</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">make_vec2</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">make_vec2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae54bd325a08ad26edf63929201adebc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">make_vec2</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">make_vec2</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">make_vec3</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">make_vec3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga482b60a842a5b154d3eed392417a9511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">More...</a><br /></td></tr>\n<tr class=\"separator:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">make_vec3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacd57046034df557b8b1c457f58613623\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd57046034df557b8b1c457f58613623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">make_vec3</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">make_vec4</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">make_vec4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">make_vec4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">make_vec4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga63f576518993efc22a969f18f80e29bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type const *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the constant address to the data of the input parameter.  <a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00175_source.html\">type_ptr.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00175_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_ptr.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_ptr.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00175.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &lt;cstring&gt;</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_type_ptr extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL qua&lt;T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">#include &quot;type_ptr.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00305_html_ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><div class=\"ttname\"><a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">glm::make_mat3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt; make_mat3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gad9e0d36ff489cb30c65ad1fa40351651\"><div class=\"ttname\"><a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">glm::make_vec3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; make_vec3(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga27a24e121dc39e6857620e0f85b6e1a8\"><div class=\"ttname\"><a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">glm::make_mat3x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt; make_mat3x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga6af06bb60d64ca8bcd169e3c93bc2419\"><div class=\"ttname\"><a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">glm::make_vec1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt; make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga58110d7d81cf7d029e2bab7f8cd9b246\"><div class=\"ttname\"><a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">glm::make_quat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, defaultp &gt; make_quat(T const *const ptr)</div><div class=\"ttdoc\">Build a quaternion from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gae7bcedb710d1446c87fd1fc93ed8ee9a\"><div class=\"ttname\"><a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">glm::make_mat4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; make_mat4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga81253cf7b0ebfbb1e70540c5774e6824\"><div class=\"ttname\"><a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">glm::make_vec2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; make_vec2(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga078b862c90b0e9a79ed43a58997d8388\"><div class=\"ttname\"><a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">glm::make_mat2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt; make_mat2x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga04409e74dc3da251d2501acf5b4b546c\"><div class=\"ttname\"><a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">glm::make_mat2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; make_mat2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga1c64669e1ba1160ad9386e43dc57569a\"><div class=\"ttname\"><a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &amp;v)</div><div class=\"ttdoc\">Return the constant address to the data of the input parameter. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gae49e1c7bcd5abec74d1c34155031f663\"><div class=\"ttname\"><a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">glm::make_mat2x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; make_mat2x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga21982104164789cf8985483aaefc25e8\"><div class=\"ttname\"><a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">glm::make_mat2x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt; make_mat2x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga05dd66232aedb993e3b8e7b35eaf932b\"><div class=\"ttname\"><a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">glm::make_mat3x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt; make_mat3x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga63f576518993efc22a969f18f80e29bb\"><div class=\"ttname\"><a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">glm::make_vec4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt; make_vec4(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga0330bf6640092d7985fac92927bbd42b\"><div class=\"ttname\"><a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">glm::make_mat4x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt; make_mat4x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gaf2e8337b15c3362aaeb6e5849e1c0536\"><div class=\"ttname\"><a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">glm::make_mat3x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt; make_mat3x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga8f084be30e404844bfbb4a551ac2728c\"><div class=\"ttname\"><a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">glm::make_mat4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; make_mat4x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><div class=\"ttname\"><a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">glm::make_mat4x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt; make_mat4x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00176.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_quat.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_quat.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00176_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00176_source.html\">type_quat.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00176_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_quat.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_quat.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00176.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">struct </span>qua</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> qua&lt;T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#               if GLM_LANG &amp; GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                                <span class=\"keyword\">struct </span>{ T x, y, z, w;};</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;4, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        T x, y, z, w;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(qua&lt;T, Q&gt; const&amp; q) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(qua&lt;T, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec&lt;3, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua&lt;U, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#               if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> mat&lt;3, 3, T, Q&gt;() <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> mat&lt;4, 4, T, Q&gt;() <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL qua(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; u, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator=(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator+=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator-=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator*=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator+(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator-(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator+(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator-(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(T <span class=\"keyword\">const</span>&amp; s, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator/(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#include &quot;type_quat.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00299_html_gaf4dd967dead22dd932fc7460ceecb03f\"><div class=\"ttname\"><a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">glm::eulerAngles</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; eulerAngles(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00177.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_trait.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_trait.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00177_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00177_source.html\">type_trait.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00177_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_trait.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_trait.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00177.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_trait extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">struct </span>type</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 0;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> cols = 0;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> rows = 0;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">struct </span>type&lt;vec&lt;L, T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = L;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">struct </span>type&lt;mat&lt;C, R, T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = C;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> cols = C;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> rows = R;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">struct </span>type&lt;qua&lt;T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 4;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">struct </span>type&lt;tdualquat&lt;T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 8;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#include &quot;type_trait.inl&quot;</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00178.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00178_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00178_source.html\">type_vec1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00178_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00178.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                T x;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                T r;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                T s;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;1, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{T x, r, s;};</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"comment\">                                GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q)</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 1;}</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;2, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"comment\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"comment\">                        template&lt;int E0&gt;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"comment\">                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;1, T, Q, E0, -1,-2,-3&gt; const&amp; that)</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"comment\">                        {</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"comment\">                                *this = that();</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"comment\">                        }</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"comment\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator=(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator~(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        template&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; operator&amp;&amp;(vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v1, vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        template&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; operator||(vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v1, vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec1.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00179.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00179_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00179_source.html\">type_vec2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00179_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00179.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x, y;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                <span class=\"keyword\">struct</span>{ T x, y; };</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">struct</span>{ T r, g; };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                <span class=\"keyword\">struct</span>{ T s, t; };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;2, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        <span class=\"keyword\">union </span>{T x, r, s;};</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{T y, g, t;};</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#                       endif//GLM_CONFIG_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 2;}</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T&amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, Q&gt; const&amp; x, B y);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec&lt;1, B, Q&gt; const&amp; y);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, Q&gt; const&amp; x, vec&lt;1, B, Q&gt; const&amp; y);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;2, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1,-1,-2&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator=(vec <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator~(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, bool, Q&gt; operator&amp;&amp;(vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, bool, Q&gt; operator||(vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00180.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00180_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00180_source.html\">type_vec3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00180_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00180.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#                                       pragma warning(disable: 4324)  // structure was padded due to alignment specifier</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T x, y, z;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                                <span class=\"keyword\">struct</span>{ T x, y, z; };</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">struct</span>{ T r, g, b; };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                                <span class=\"keyword\">struct</span>{ T s, t, p; };</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;3, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">union </span>{ T x, r, s; };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        <span class=\"keyword\">union </span>{ T y, g, t; };</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        <span class=\"keyword\">union </span>{ T z, b, p; };</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#                       endif//GLM_CONFIG_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#               endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 3;}</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                <span class=\"comment\">// -- Conversion scalar constructors --</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; scalar)</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                                *<span class=\"keyword\">this</span> = vec(v(), scalar);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; scalar, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                                *<span class=\"keyword\">this</span> = vec(scalar, v());</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt;&amp; operator=(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T scalar);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator~(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, bool, Q&gt; operator&amp;&amp;(vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, bool, Q&gt; operator||(vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00181.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00181_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00181_source.html\">type_vec4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00181_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00181.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x, y, z, w;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                <span class=\"keyword\">struct </span>{ T x, y, z, w; };</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">struct </span>{ T r, g, b, a; };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                <span class=\"keyword\">struct </span>{ T s, t, p, q; };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;4, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        <span class=\"keyword\">union </span>{ T x, r, s; };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{ T y, g, t; };</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        <span class=\"keyword\">union </span>{ T z, b, p; };</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">union </span>{ T w, a, q; };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q)</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;4, T, Q&gt; const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;4, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                <span class=\"comment\">// -- Conversion scalar constructors --</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _Y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z, C _w);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z, C _w);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz, C _w);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz, C _w);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, B _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;1, B, P&gt; const&amp; _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;1, B, P&gt; const&amp; _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, A, P&gt; const&amp; _xyz, B _w);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, A, P&gt; const&amp; _xyz, vec&lt;1, B, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;3, B, P&gt; const&amp; _yzw);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;3, B, P&gt; const&amp; _yzw);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;2, B, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;4, T, Q, E0, E1, E2, E3&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> F0, <span class=\"keywordtype\">int</span> F1&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, detail::_swizzle&lt;2, T, Q, F0, F1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; u)</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), u());</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, T <span class=\"keyword\">const</span>&amp; y, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, y, v());</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, v(), w);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; z, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), z, w);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), w);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, v());</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator=(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator~(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, bool, Q&gt; operator&amp;&amp;(vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, bool, Q&gt; operator||(vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00182.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00182_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>float_distance</b> (float x, float y)</td></tr>\n<tr class=\"memdesc:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a2358fa840554fa36531aee28f3e14d6b\">More...</a><br /></td></tr>\n<tr class=\"separator:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>float_distance</b> (double x, double y)</td></tr>\n<tr class=\"memdesc:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#a464d5c96158df04d96a11d97b00c51a7\">More...</a><br /></td></tr>\n<tr class=\"separator:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>float_distance</b> (vec&lt; L, float, Q &gt; const &amp;x, vec&lt; L, float, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:a15349749edb8373079f4dcd518cc3d02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a15349749edb8373079f4dcd518cc3d02\">More...</a><br /></td></tr>\n<tr class=\"separator:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int64, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>float_distance</b> (vec&lt; L, double, Q &gt; const &amp;x, vec&lt; L, double, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#ac0726cf2e5ce7d03b0ac4c81438c07fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (genType x)</td></tr>\n<tr class=\"memdesc:ab21fbe69182da4f378862feeffe24b16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#ab21fbe69182da4f378862feeffe24b16\">More...</a><br /></td></tr>\n<tr class=\"separator:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8540f4caeba5037dee6506184f360b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:af8540f4caeba5037dee6506184f360b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:af8540f4caeba5037dee6506184f360b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#af8540f4caeba5037dee6506184f360b0\">More...</a><br /></td></tr>\n<tr class=\"separator:af8540f4caeba5037dee6506184f360b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#a72c18d50df8ef360960ddf1f5d09c728\">More...</a><br /></td></tr>\n<tr class=\"separator:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a78b63ddacacb9e0e8f4172d85f4373aa\">More...</a><br /></td></tr>\n<tr class=\"separator:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48e17607989d47bc99e16cce74543e19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a48e17607989d47bc99e16cce74543e19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a48e17607989d47bc99e16cce74543e19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a48e17607989d47bc99e16cce74543e19\">More...</a><br /></td></tr>\n<tr class=\"separator:a48e17607989d47bc99e16cce74543e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (genType x)</td></tr>\n<tr class=\"memdesc:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#af2a8466ad7470fcafaf91b24b43d1d4d\">More...</a><br /></td></tr>\n<tr class=\"separator:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a71d68bb1fff11ac1c757d44cd23ddf50\">More...</a><br /></td></tr>\n<tr class=\"separator:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2268a89effe42c4d6952085fa616cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:af2268a89effe42c4d6952085fa616cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:af2268a89effe42c4d6952085fa616cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#af2268a89effe42c4d6952085fa616cee\">More...</a><br /></td></tr>\n<tr class=\"separator:af2268a89effe42c4d6952085fa616cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#aa761d18f8e3a93752550c9ce9556749c\">More...</a><br /></td></tr>\n<tr class=\"separator:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a471608a1ffbf4472dc5c84216ea937e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00182_source.html\">ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00182_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00182.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType next_float(genType x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType prev_float(genType x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType next_float(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL genType prev_float(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> float_distance(<span class=\"keywordtype\">float</span> x, <span class=\"keywordtype\">float</span> y);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> float_distance(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; float_distance(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;L, int64, Q&gt; float_distance(vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#include &quot;ulp.inl&quot;</span></div>\n<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>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00183.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00183_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00183_source.html\">vec1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00183_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00183.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_bool1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_bool1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_float1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_float1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_double1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_double1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_int1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_int1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_uint1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_uint1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_vec1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00184.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00184_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00184_source.html\">vec2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00184_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00184.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00191.html\">./ext/vector_bool2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00192.html\">./ext/vector_bool2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00209.html\">./ext/vector_float2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00200.html\">./ext/vector_double2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00201.html\">./ext/vector_double2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00216.html\">./ext/vector_int2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00217.html\">./ext/vector_int2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00229.html\">./ext/vector_uint2_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">vector_bool2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00201_html\"><div class=\"ttname\"><a href=\"a00201.html\">vector_double2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00209_html\"><div class=\"ttname\"><a href=\"a00209.html\">vector_float2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00200_html\"><div class=\"ttname\"><a href=\"a00200.html\">vector_double2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00229_html\"><div class=\"ttname\"><a href=\"a00229.html\">vector_uint2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00217_html\"><div class=\"ttname\"><a href=\"a00217.html\">vector_int2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00192_html\"><div class=\"ttname\"><a href=\"a00192.html\">vector_bool2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00216_html\"><div class=\"ttname\"><a href=\"a00216.html\">vector_int2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00185.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00185_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00185_source.html\">vec3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00185_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00185.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00193.html\">./ext/vector_bool3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00194.html\">./ext/vector_bool3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00210.html\">./ext/vector_float3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00211.html\">./ext/vector_float3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00202.html\">./ext/vector_double3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00203.html\">./ext/vector_double3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00218.html\">./ext/vector_int3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00219.html\">./ext/vector_int3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00230.html\">./ext/vector_uint3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00231.html\">./ext/vector_uint3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00210_html\"><div class=\"ttname\"><a href=\"a00210.html\">vector_float3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00193_html\"><div class=\"ttname\"><a href=\"a00193.html\">vector_bool3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00203_html\"><div class=\"ttname\"><a href=\"a00203.html\">vector_double3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00230_html\"><div class=\"ttname\"><a href=\"a00230.html\">vector_uint3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">vector_int3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00211_html\"><div class=\"ttname\"><a href=\"a00211.html\">vector_float3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00231_html\"><div class=\"ttname\"><a href=\"a00231.html\">vector_uint3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00194_html\"><div class=\"ttname\"><a href=\"a00194.html\">vector_bool3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00202_html\"><div class=\"ttname\"><a href=\"a00202.html\">vector_double3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">vector_int3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00186.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00186_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00186_source.html\">vec4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00186_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00186.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00195.html\">./ext/vector_bool4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00196.html\">./ext/vector_bool4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00213.html\">./ext/vector_float4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00204.html\">./ext/vector_double4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00205.html\">./ext/vector_double4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00220.html\">./ext/vector_int4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00221.html\">./ext/vector_int4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00232.html\">./ext/vector_uint4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00233.html\">./ext/vector_uint4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"ttc\" id=\"a00221_html\"><div class=\"ttname\"><a href=\"a00221.html\">vector_int4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00196_html\"><div class=\"ttname\"><a href=\"a00196.html\">vector_bool4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00195_html\"><div class=\"ttname\"><a href=\"a00195.html\">vector_bool4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00205_html\"><div class=\"ttname\"><a href=\"a00205.html\">vector_double4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00232_html\"><div class=\"ttname\"><a href=\"a00232.html\">vector_uint4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00220_html\"><div class=\"ttname\"><a href=\"a00220.html\">vector_int4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00213_html\"><div class=\"ttname\"><a href=\"a00213.html\">vector_float4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00233_html\"><div class=\"ttname\"><a href=\"a00233.html\">vector_uint4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00204_html\"><div class=\"ttname\"><a href=\"a00204.html\">vector_double4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00187.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec_swizzle.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec_swizzle.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00187_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00187_source.html\">vec_swizzle.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00187_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec_swizzle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec_swizzle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00187.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vec_swizzle extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"comment\">// xx</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"comment\">// xy</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"comment\">// xz</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"comment\">// xw</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"comment\">// yx</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"comment\">// yy</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"comment\">// yz</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"comment\">// yw</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"comment\">// zx</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"comment\">// zy</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"comment\">// zz</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"comment\">// zw</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"comment\">// wx</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"comment\">// wy</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"comment\">// wz</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"comment\">// ww</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; ww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"comment\">// xxx</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"comment\">// xxy</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"comment\">// xxz</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        <span class=\"comment\">// xxw</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"comment\">// xyx</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"comment\">// xyy</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        <span class=\"comment\">// xyz</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"comment\">// xyw</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"comment\">// xzx</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"comment\">// xzy</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"comment\">// xzz</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"comment\">// xzw</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"comment\">// xwx</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"comment\">// xwy</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"comment\">// xwz</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"comment\">// xww</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"comment\">// yxx</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        <span class=\"comment\">// yxy</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        <span class=\"comment\">// yxz</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"comment\">// yxw</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"comment\">// yyx</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"comment\">// yyy</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        <span class=\"comment\">// yyz</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        <span class=\"comment\">// yyw</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;        <span class=\"comment\">// yzx</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"comment\">// yzy</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <span class=\"comment\">// yzz</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;        <span class=\"comment\">// yzw</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <span class=\"comment\">// ywx</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;        <span class=\"comment\">// ywy</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;        <span class=\"comment\">// ywz</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        <span class=\"comment\">// yww</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        <span class=\"comment\">// zxx</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        <span class=\"comment\">// zxy</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;        <span class=\"comment\">// zxz</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        <span class=\"comment\">// zxw</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"comment\">// zyx</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        <span class=\"comment\">// zyy</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;        <span class=\"comment\">// zyz</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"comment\">// zyw</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <span class=\"comment\">// zzx</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        <span class=\"comment\">// zzy</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;        <span class=\"comment\">// zzz</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"comment\">// zzw</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <span class=\"comment\">// zwx</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"comment\">// zwy</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;        <span class=\"comment\">// zwz</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;        <span class=\"comment\">// zww</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;        <span class=\"comment\">// wxx</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;        <span class=\"comment\">// wxy</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <span class=\"comment\">// wxz</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;        <span class=\"comment\">// wxw</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;        <span class=\"comment\">// wyx</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;        <span class=\"comment\">// wyy</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;        <span class=\"comment\">// wyz</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;        <span class=\"comment\">// wyw</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"comment\">// wzx</span></div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"comment\">// wzy</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"comment\">// wzz</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"comment\">// wzw</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"comment\">// wwx</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"comment\">// wwy</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"comment\">// wwz</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <span class=\"comment\">// www</span></div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; www(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"comment\">// xxxx</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;        <span class=\"comment\">// xxxy</span></div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"comment\">// xxxz</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;        <span class=\"comment\">// xxxw</span></div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"comment\">// xxyx</span></div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;        <span class=\"comment\">// xxyy</span></div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;        <span class=\"comment\">// xxyz</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;        <span class=\"comment\">// xxyw</span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;        <span class=\"comment\">// xxzx</span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;</div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"comment\">// xxzy</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;        <span class=\"comment\">// xxzz</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;        <span class=\"comment\">// xxzw</span></div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"comment\">// xxwx</span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;        <span class=\"comment\">// xxwy</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;        <span class=\"comment\">// xxwz</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;        <span class=\"comment\">// xxww</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;</div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;        <span class=\"comment\">// xyxx</span></div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;</div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;        <span class=\"comment\">// xyxy</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;</div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;        <span class=\"comment\">// xyxz</span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;</div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <span class=\"comment\">// xyxw</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;        <span class=\"comment\">// xyyx</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;        <span class=\"comment\">// xyyy</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;</div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;        <span class=\"comment\">// xyyz</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;</div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;        <span class=\"comment\">// xyyw</span></div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;        <span class=\"comment\">// xyzx</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;        <span class=\"comment\">// xyzy</span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;</div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;</div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;        <span class=\"comment\">// xyzz</span></div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;        <span class=\"comment\">// xyzw</span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"comment\">// xywx</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;</div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;        <span class=\"comment\">// xywy</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;        <span class=\"comment\">// xywz</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;</div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;        <span class=\"comment\">// xyww</span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"comment\">// xzxx</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;</div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;        <span class=\"comment\">// xzxy</span></div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;        <span class=\"comment\">// xzxz</span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;</div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;        <span class=\"comment\">// xzxw</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;        <span class=\"comment\">// xzyx</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;        <span class=\"comment\">// xzyy</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;        <span class=\"comment\">// xzyz</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;</div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;</div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;        <span class=\"comment\">// xzyw</span></div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;</div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;        <span class=\"comment\">// xzzx</span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160;</div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;        <span class=\"comment\">// xzzy</span></div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;</div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;        <span class=\"comment\">// xzzz</span></div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"> 1192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;</div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;        <span class=\"comment\">// xzzw</span></div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;</div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160;        <span class=\"comment\">// xzwx</span></div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;        <span class=\"comment\">// xzwy</span></div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;        <span class=\"comment\">// xzwz</span></div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;</div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;        <span class=\"comment\">// xzww</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160;        <span class=\"comment\">// xwxx</span></div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;</div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;        <span class=\"comment\">// xwxy</span></div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;        <span class=\"comment\">// xwxz</span></div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;        <span class=\"comment\">// xwxw</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;</div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;        <span class=\"comment\">// xwyx</span></div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;</div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;        <span class=\"comment\">// xwyy</span></div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160;        <span class=\"comment\">// xwyz</span></div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;        <span class=\"comment\">// xwyw</span></div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;        <span class=\"comment\">// xwzx</span></div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;        <span class=\"comment\">// xwzy</span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;</div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;        <span class=\"comment\">// xwzz</span></div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;</div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160;        <span class=\"comment\">// xwzw</span></div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;        <span class=\"comment\">// xwwx</span></div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;        <span class=\"comment\">// xwwy</span></div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;        <span class=\"comment\">// xwwz</span></div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;</div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160;        <span class=\"comment\">// xwww</span></div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;        <span class=\"comment\">// yxxx</span></div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160;</div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160;</div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160;</div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;        <span class=\"comment\">// yxxy</span></div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;</div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;</div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;        <span class=\"comment\">// yxxz</span></div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;</div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160;</div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;        <span class=\"comment\">// yxxw</span></div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"> 1367</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;        <span class=\"comment\">// yxyx</span></div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;</div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160;</div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;        <span class=\"comment\">// yxyy</span></div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;</div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160;</div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;        <span class=\"comment\">// yxyz</span></div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;</div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;</div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;        <span class=\"comment\">// yxyw</span></div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;        <span class=\"comment\">// yxzx</span></div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160;</div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160;</div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;        <span class=\"comment\">// yxzy</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;</div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160;</div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;        <span class=\"comment\">// yxzz</span></div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160;</div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;        <span class=\"comment\">// yxzw</span></div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;</div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160;        <span class=\"comment\">// yxwx</span></div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"> 1460</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;</div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;        <span class=\"comment\">// yxwy</span></div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"> 1464</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;</div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160;        <span class=\"comment\">// yxwz</span></div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;</div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;        <span class=\"comment\">// yxww</span></div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"> 1476</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;</div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160;        <span class=\"comment\">// yyxx</span></div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;</div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"> 1489</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;</div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;</div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160;        <span class=\"comment\">// yyxy</span></div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;</div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;</div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;</div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160;        <span class=\"comment\">// yyxz</span></div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;</div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160;        <span class=\"comment\">// yyxw</span></div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;        <span class=\"comment\">// yyyx</span></div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;</div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;</div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;        <span class=\"comment\">// yyyy</span></div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;</div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;        <span class=\"comment\">// yyyz</span></div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"> 1564</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;</div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160;</div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;        <span class=\"comment\">// yyyw</span></div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;</div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;        <span class=\"comment\">// yyzx</span></div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160;</div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160;</div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;        <span class=\"comment\">// yyzy</span></div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;</div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;</div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160;        <span class=\"comment\">// yyzz</span></div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;</div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160;        <span class=\"comment\">// yyzw</span></div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;        <span class=\"comment\">// yywx</span></div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160;</div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"> 1624</span>&#160;        <span class=\"comment\">// yywy</span></div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;</div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160;        <span class=\"comment\">// yywz</span></div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"> 1635</span>&#160;</div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;        <span class=\"comment\">// yyww</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;</div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160;        <span class=\"comment\">// yzxx</span></div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;</div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;        <span class=\"comment\">// yzxy</span></div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;</div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"> 1660</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;</div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160;        <span class=\"comment\">// yzxz</span></div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160;</div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;        <span class=\"comment\">// yzxw</span></div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;        <span class=\"comment\">// yzyx</span></div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;</div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160;</div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;        <span class=\"comment\">// yzyy</span></div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;</div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160;</div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;        <span class=\"comment\">// yzyz</span></div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;</div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160;</div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160;        <span class=\"comment\">// yzyw</span></div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;        <span class=\"comment\">// yzzx</span></div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;</div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160;</div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;        <span class=\"comment\">// yzzy</span></div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"> 1739</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;</div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;        <span class=\"comment\">// yzzz</span></div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160;</div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;</div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;        <span class=\"comment\">// yzzw</span></div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160;</div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;        <span class=\"comment\">// yzwx</span></div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;</div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;        <span class=\"comment\">// yzwy</span></div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;        <span class=\"comment\">// yzwz</span></div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"> 1772</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160;</div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;        <span class=\"comment\">// yzww</span></div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;</div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;        <span class=\"comment\">// ywxx</span></div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;</div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;        <span class=\"comment\">// ywxy</span></div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160;</div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;        <span class=\"comment\">// ywxz</span></div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;</div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160;        <span class=\"comment\">// ywxw</span></div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;</div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;        <span class=\"comment\">// ywyx</span></div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;</div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;        <span class=\"comment\">// ywyy</span></div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160;</div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;        <span class=\"comment\">// ywyz</span></div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;</div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160;        <span class=\"comment\">// ywyw</span></div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"> 1829</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;</div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;        <span class=\"comment\">// ywzx</span></div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;</div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160;        <span class=\"comment\">// ywzy</span></div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160;</div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;        <span class=\"comment\">// ywzz</span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;</div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160;        <span class=\"comment\">// ywzw</span></div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;</div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160;        <span class=\"comment\">// ywwx</span></div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160;</div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;        <span class=\"comment\">// ywwy</span></div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;</div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;        <span class=\"comment\">// ywwz</span></div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;</div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160;        <span class=\"comment\">// ywww</span></div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;</div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;        <span class=\"comment\">// zxxx</span></div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;</div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160;</div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;        <span class=\"comment\">// zxxy</span></div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;</div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"> 1899</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;        <span class=\"comment\">// zxxz</span></div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"> 1903</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;</div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"> 1910</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;</div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;        <span class=\"comment\">// zxxw</span></div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;</div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;        <span class=\"comment\">// zxyx</span></div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;</div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;        <span class=\"comment\">// zxyy</span></div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;</div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"> 1936</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;</div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160;        <span class=\"comment\">// zxyz</span></div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;</div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;        <span class=\"comment\">// zxyw</span></div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;</div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160;        <span class=\"comment\">// zxzx</span></div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;</div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160;        <span class=\"comment\">// zxzy</span></div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160;</div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        <span class=\"comment\">// zxzz</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;</div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"> 1989</span>&#160;</div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;        <span class=\"comment\">// zxzw</span></div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160;</div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;        <span class=\"comment\">// zxwx</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;</div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;        <span class=\"comment\">// zxwy</span></div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        <span class=\"comment\">// zxwz</span></div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;</div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;        <span class=\"comment\">// zxww</span></div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;        <span class=\"comment\">// zyxx</span></div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;</div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160;</div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;        <span class=\"comment\">// zyxy</span></div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;</div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;</div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160;        <span class=\"comment\">// zyxz</span></div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"> 2046</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"> 2050</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;</div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;        <span class=\"comment\">// zyxw</span></div>\n<div class=\"line\"><a name=\"l02054\"></a><span class=\"lineno\"> 2054</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02055\"></a><span class=\"lineno\"> 2055</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02058\"></a><span class=\"lineno\"> 2058</span>&#160;</div>\n<div class=\"line\"><a name=\"l02059\"></a><span class=\"lineno\"> 2059</span>&#160;        <span class=\"comment\">// zyyx</span></div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02062\"></a><span class=\"lineno\"> 2062</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02063\"></a><span class=\"lineno\"> 2063</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;</div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02066\"></a><span class=\"lineno\"> 2066</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02067\"></a><span class=\"lineno\"> 2067</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;</div>\n<div class=\"line\"><a name=\"l02070\"></a><span class=\"lineno\"> 2070</span>&#160;        <span class=\"comment\">// zyyy</span></div>\n<div class=\"line\"><a name=\"l02071\"></a><span class=\"lineno\"> 2071</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02074\"></a><span class=\"lineno\"> 2074</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02075\"></a><span class=\"lineno\"> 2075</span>&#160;</div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02078\"></a><span class=\"lineno\"> 2078</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02079\"></a><span class=\"lineno\"> 2079</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;</div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;        <span class=\"comment\">// zyyz</span></div>\n<div class=\"line\"><a name=\"l02082\"></a><span class=\"lineno\"> 2082</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02083\"></a><span class=\"lineno\"> 2083</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02086\"></a><span class=\"lineno\"> 2086</span>&#160;</div>\n<div class=\"line\"><a name=\"l02087\"></a><span class=\"lineno\"> 2087</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02090\"></a><span class=\"lineno\"> 2090</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02091\"></a><span class=\"lineno\"> 2091</span>&#160;</div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;        <span class=\"comment\">// zyyw</span></div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02096\"></a><span class=\"lineno\"> 2096</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;</div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;        <span class=\"comment\">// zyzx</span></div>\n<div class=\"line\"><a name=\"l02099\"></a><span class=\"lineno\"> 2099</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02100\"></a><span class=\"lineno\"> 2100</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02103\"></a><span class=\"lineno\"> 2103</span>&#160;</div>\n<div class=\"line\"><a name=\"l02104\"></a><span class=\"lineno\"> 2104</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02107\"></a><span class=\"lineno\"> 2107</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02108\"></a><span class=\"lineno\"> 2108</span>&#160;</div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;        <span class=\"comment\">// zyzy</span></div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02111\"></a><span class=\"lineno\"> 2111</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02112\"></a><span class=\"lineno\"> 2112</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;</div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02117\"></a><span class=\"lineno\"> 2117</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02118\"></a><span class=\"lineno\"> 2118</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;</div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;        <span class=\"comment\">// zyzz</span></div>\n<div class=\"line\"><a name=\"l02121\"></a><span class=\"lineno\"> 2121</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02122\"></a><span class=\"lineno\"> 2122</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02125\"></a><span class=\"lineno\"> 2125</span>&#160;</div>\n<div class=\"line\"><a name=\"l02126\"></a><span class=\"lineno\"> 2126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02129\"></a><span class=\"lineno\"> 2129</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02130\"></a><span class=\"lineno\"> 2130</span>&#160;</div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;        <span class=\"comment\">// zyzw</span></div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02135\"></a><span class=\"lineno\"> 2135</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;</div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;        <span class=\"comment\">// zywx</span></div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02139\"></a><span class=\"lineno\"> 2139</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02140\"></a><span class=\"lineno\"> 2140</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02141\"></a><span class=\"lineno\"> 2141</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02142\"></a><span class=\"lineno\"> 2142</span>&#160;</div>\n<div class=\"line\"><a name=\"l02143\"></a><span class=\"lineno\"> 2143</span>&#160;        <span class=\"comment\">// zywy</span></div>\n<div class=\"line\"><a name=\"l02144\"></a><span class=\"lineno\"> 2144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02145\"></a><span class=\"lineno\"> 2145</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02146\"></a><span class=\"lineno\"> 2146</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02147\"></a><span class=\"lineno\"> 2147</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02148\"></a><span class=\"lineno\"> 2148</span>&#160;</div>\n<div class=\"line\"><a name=\"l02149\"></a><span class=\"lineno\"> 2149</span>&#160;        <span class=\"comment\">// zywz</span></div>\n<div class=\"line\"><a name=\"l02150\"></a><span class=\"lineno\"> 2150</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02151\"></a><span class=\"lineno\"> 2151</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02152\"></a><span class=\"lineno\"> 2152</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02153\"></a><span class=\"lineno\"> 2153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02154\"></a><span class=\"lineno\"> 2154</span>&#160;</div>\n<div class=\"line\"><a name=\"l02155\"></a><span class=\"lineno\"> 2155</span>&#160;        <span class=\"comment\">// zyww</span></div>\n<div class=\"line\"><a name=\"l02156\"></a><span class=\"lineno\"> 2156</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02157\"></a><span class=\"lineno\"> 2157</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02158\"></a><span class=\"lineno\"> 2158</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02159\"></a><span class=\"lineno\"> 2159</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02160\"></a><span class=\"lineno\"> 2160</span>&#160;</div>\n<div class=\"line\"><a name=\"l02161\"></a><span class=\"lineno\"> 2161</span>&#160;        <span class=\"comment\">// zzxx</span></div>\n<div class=\"line\"><a name=\"l02162\"></a><span class=\"lineno\"> 2162</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02163\"></a><span class=\"lineno\"> 2163</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02164\"></a><span class=\"lineno\"> 2164</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02165\"></a><span class=\"lineno\"> 2165</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02166\"></a><span class=\"lineno\"> 2166</span>&#160;</div>\n<div class=\"line\"><a name=\"l02167\"></a><span class=\"lineno\"> 2167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02168\"></a><span class=\"lineno\"> 2168</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02169\"></a><span class=\"lineno\"> 2169</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02170\"></a><span class=\"lineno\"> 2170</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02171\"></a><span class=\"lineno\"> 2171</span>&#160;</div>\n<div class=\"line\"><a name=\"l02172\"></a><span class=\"lineno\"> 2172</span>&#160;        <span class=\"comment\">// zzxy</span></div>\n<div class=\"line\"><a name=\"l02173\"></a><span class=\"lineno\"> 2173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02174\"></a><span class=\"lineno\"> 2174</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02175\"></a><span class=\"lineno\"> 2175</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02176\"></a><span class=\"lineno\"> 2176</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02177\"></a><span class=\"lineno\"> 2177</span>&#160;</div>\n<div class=\"line\"><a name=\"l02178\"></a><span class=\"lineno\"> 2178</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02179\"></a><span class=\"lineno\"> 2179</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02180\"></a><span class=\"lineno\"> 2180</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02181\"></a><span class=\"lineno\"> 2181</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02182\"></a><span class=\"lineno\"> 2182</span>&#160;</div>\n<div class=\"line\"><a name=\"l02183\"></a><span class=\"lineno\"> 2183</span>&#160;        <span class=\"comment\">// zzxz</span></div>\n<div class=\"line\"><a name=\"l02184\"></a><span class=\"lineno\"> 2184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02185\"></a><span class=\"lineno\"> 2185</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02186\"></a><span class=\"lineno\"> 2186</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02187\"></a><span class=\"lineno\"> 2187</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02188\"></a><span class=\"lineno\"> 2188</span>&#160;</div>\n<div class=\"line\"><a name=\"l02189\"></a><span class=\"lineno\"> 2189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02190\"></a><span class=\"lineno\"> 2190</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02191\"></a><span class=\"lineno\"> 2191</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02192\"></a><span class=\"lineno\"> 2192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02193\"></a><span class=\"lineno\"> 2193</span>&#160;</div>\n<div class=\"line\"><a name=\"l02194\"></a><span class=\"lineno\"> 2194</span>&#160;        <span class=\"comment\">// zzxw</span></div>\n<div class=\"line\"><a name=\"l02195\"></a><span class=\"lineno\"> 2195</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02196\"></a><span class=\"lineno\"> 2196</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02197\"></a><span class=\"lineno\"> 2197</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02198\"></a><span class=\"lineno\"> 2198</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02199\"></a><span class=\"lineno\"> 2199</span>&#160;</div>\n<div class=\"line\"><a name=\"l02200\"></a><span class=\"lineno\"> 2200</span>&#160;        <span class=\"comment\">// zzyx</span></div>\n<div class=\"line\"><a name=\"l02201\"></a><span class=\"lineno\"> 2201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02202\"></a><span class=\"lineno\"> 2202</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02203\"></a><span class=\"lineno\"> 2203</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02204\"></a><span class=\"lineno\"> 2204</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02205\"></a><span class=\"lineno\"> 2205</span>&#160;</div>\n<div class=\"line\"><a name=\"l02206\"></a><span class=\"lineno\"> 2206</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02207\"></a><span class=\"lineno\"> 2207</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02208\"></a><span class=\"lineno\"> 2208</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02209\"></a><span class=\"lineno\"> 2209</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02210\"></a><span class=\"lineno\"> 2210</span>&#160;</div>\n<div class=\"line\"><a name=\"l02211\"></a><span class=\"lineno\"> 2211</span>&#160;        <span class=\"comment\">// zzyy</span></div>\n<div class=\"line\"><a name=\"l02212\"></a><span class=\"lineno\"> 2212</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02213\"></a><span class=\"lineno\"> 2213</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02214\"></a><span class=\"lineno\"> 2214</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02215\"></a><span class=\"lineno\"> 2215</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02216\"></a><span class=\"lineno\"> 2216</span>&#160;</div>\n<div class=\"line\"><a name=\"l02217\"></a><span class=\"lineno\"> 2217</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02218\"></a><span class=\"lineno\"> 2218</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02219\"></a><span class=\"lineno\"> 2219</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02220\"></a><span class=\"lineno\"> 2220</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02221\"></a><span class=\"lineno\"> 2221</span>&#160;</div>\n<div class=\"line\"><a name=\"l02222\"></a><span class=\"lineno\"> 2222</span>&#160;        <span class=\"comment\">// zzyz</span></div>\n<div class=\"line\"><a name=\"l02223\"></a><span class=\"lineno\"> 2223</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02224\"></a><span class=\"lineno\"> 2224</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02225\"></a><span class=\"lineno\"> 2225</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02226\"></a><span class=\"lineno\"> 2226</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02227\"></a><span class=\"lineno\"> 2227</span>&#160;</div>\n<div class=\"line\"><a name=\"l02228\"></a><span class=\"lineno\"> 2228</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02229\"></a><span class=\"lineno\"> 2229</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02230\"></a><span class=\"lineno\"> 2230</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02231\"></a><span class=\"lineno\"> 2231</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02232\"></a><span class=\"lineno\"> 2232</span>&#160;</div>\n<div class=\"line\"><a name=\"l02233\"></a><span class=\"lineno\"> 2233</span>&#160;        <span class=\"comment\">// zzyw</span></div>\n<div class=\"line\"><a name=\"l02234\"></a><span class=\"lineno\"> 2234</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02235\"></a><span class=\"lineno\"> 2235</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02236\"></a><span class=\"lineno\"> 2236</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02237\"></a><span class=\"lineno\"> 2237</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02238\"></a><span class=\"lineno\"> 2238</span>&#160;</div>\n<div class=\"line\"><a name=\"l02239\"></a><span class=\"lineno\"> 2239</span>&#160;        <span class=\"comment\">// zzzx</span></div>\n<div class=\"line\"><a name=\"l02240\"></a><span class=\"lineno\"> 2240</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02241\"></a><span class=\"lineno\"> 2241</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02242\"></a><span class=\"lineno\"> 2242</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02243\"></a><span class=\"lineno\"> 2243</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02244\"></a><span class=\"lineno\"> 2244</span>&#160;</div>\n<div class=\"line\"><a name=\"l02245\"></a><span class=\"lineno\"> 2245</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02246\"></a><span class=\"lineno\"> 2246</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02247\"></a><span class=\"lineno\"> 2247</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02248\"></a><span class=\"lineno\"> 2248</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02249\"></a><span class=\"lineno\"> 2249</span>&#160;</div>\n<div class=\"line\"><a name=\"l02250\"></a><span class=\"lineno\"> 2250</span>&#160;        <span class=\"comment\">// zzzy</span></div>\n<div class=\"line\"><a name=\"l02251\"></a><span class=\"lineno\"> 2251</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02252\"></a><span class=\"lineno\"> 2252</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02253\"></a><span class=\"lineno\"> 2253</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02254\"></a><span class=\"lineno\"> 2254</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02255\"></a><span class=\"lineno\"> 2255</span>&#160;</div>\n<div class=\"line\"><a name=\"l02256\"></a><span class=\"lineno\"> 2256</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02257\"></a><span class=\"lineno\"> 2257</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02258\"></a><span class=\"lineno\"> 2258</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02259\"></a><span class=\"lineno\"> 2259</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02260\"></a><span class=\"lineno\"> 2260</span>&#160;</div>\n<div class=\"line\"><a name=\"l02261\"></a><span class=\"lineno\"> 2261</span>&#160;        <span class=\"comment\">// zzzz</span></div>\n<div class=\"line\"><a name=\"l02262\"></a><span class=\"lineno\"> 2262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02263\"></a><span class=\"lineno\"> 2263</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02264\"></a><span class=\"lineno\"> 2264</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02265\"></a><span class=\"lineno\"> 2265</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02266\"></a><span class=\"lineno\"> 2266</span>&#160;</div>\n<div class=\"line\"><a name=\"l02267\"></a><span class=\"lineno\"> 2267</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02268\"></a><span class=\"lineno\"> 2268</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02269\"></a><span class=\"lineno\"> 2269</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02270\"></a><span class=\"lineno\"> 2270</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02271\"></a><span class=\"lineno\"> 2271</span>&#160;</div>\n<div class=\"line\"><a name=\"l02272\"></a><span class=\"lineno\"> 2272</span>&#160;        <span class=\"comment\">// zzzw</span></div>\n<div class=\"line\"><a name=\"l02273\"></a><span class=\"lineno\"> 2273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02274\"></a><span class=\"lineno\"> 2274</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02275\"></a><span class=\"lineno\"> 2275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02276\"></a><span class=\"lineno\"> 2276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02277\"></a><span class=\"lineno\"> 2277</span>&#160;</div>\n<div class=\"line\"><a name=\"l02278\"></a><span class=\"lineno\"> 2278</span>&#160;        <span class=\"comment\">// zzwx</span></div>\n<div class=\"line\"><a name=\"l02279\"></a><span class=\"lineno\"> 2279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02280\"></a><span class=\"lineno\"> 2280</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02281\"></a><span class=\"lineno\"> 2281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02282\"></a><span class=\"lineno\"> 2282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02283\"></a><span class=\"lineno\"> 2283</span>&#160;</div>\n<div class=\"line\"><a name=\"l02284\"></a><span class=\"lineno\"> 2284</span>&#160;        <span class=\"comment\">// zzwy</span></div>\n<div class=\"line\"><a name=\"l02285\"></a><span class=\"lineno\"> 2285</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02286\"></a><span class=\"lineno\"> 2286</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02287\"></a><span class=\"lineno\"> 2287</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02288\"></a><span class=\"lineno\"> 2288</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02289\"></a><span class=\"lineno\"> 2289</span>&#160;</div>\n<div class=\"line\"><a name=\"l02290\"></a><span class=\"lineno\"> 2290</span>&#160;        <span class=\"comment\">// zzwz</span></div>\n<div class=\"line\"><a name=\"l02291\"></a><span class=\"lineno\"> 2291</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02292\"></a><span class=\"lineno\"> 2292</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02293\"></a><span class=\"lineno\"> 2293</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02294\"></a><span class=\"lineno\"> 2294</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02295\"></a><span class=\"lineno\"> 2295</span>&#160;</div>\n<div class=\"line\"><a name=\"l02296\"></a><span class=\"lineno\"> 2296</span>&#160;        <span class=\"comment\">// zzww</span></div>\n<div class=\"line\"><a name=\"l02297\"></a><span class=\"lineno\"> 2297</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02298\"></a><span class=\"lineno\"> 2298</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02299\"></a><span class=\"lineno\"> 2299</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02300\"></a><span class=\"lineno\"> 2300</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02301\"></a><span class=\"lineno\"> 2301</span>&#160;</div>\n<div class=\"line\"><a name=\"l02302\"></a><span class=\"lineno\"> 2302</span>&#160;        <span class=\"comment\">// zwxx</span></div>\n<div class=\"line\"><a name=\"l02303\"></a><span class=\"lineno\"> 2303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02304\"></a><span class=\"lineno\"> 2304</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02305\"></a><span class=\"lineno\"> 2305</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02306\"></a><span class=\"lineno\"> 2306</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02307\"></a><span class=\"lineno\"> 2307</span>&#160;</div>\n<div class=\"line\"><a name=\"l02308\"></a><span class=\"lineno\"> 2308</span>&#160;        <span class=\"comment\">// zwxy</span></div>\n<div class=\"line\"><a name=\"l02309\"></a><span class=\"lineno\"> 2309</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02310\"></a><span class=\"lineno\"> 2310</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02311\"></a><span class=\"lineno\"> 2311</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02312\"></a><span class=\"lineno\"> 2312</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02313\"></a><span class=\"lineno\"> 2313</span>&#160;</div>\n<div class=\"line\"><a name=\"l02314\"></a><span class=\"lineno\"> 2314</span>&#160;        <span class=\"comment\">// zwxz</span></div>\n<div class=\"line\"><a name=\"l02315\"></a><span class=\"lineno\"> 2315</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02316\"></a><span class=\"lineno\"> 2316</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02317\"></a><span class=\"lineno\"> 2317</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02318\"></a><span class=\"lineno\"> 2318</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02319\"></a><span class=\"lineno\"> 2319</span>&#160;</div>\n<div class=\"line\"><a name=\"l02320\"></a><span class=\"lineno\"> 2320</span>&#160;        <span class=\"comment\">// zwxw</span></div>\n<div class=\"line\"><a name=\"l02321\"></a><span class=\"lineno\"> 2321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02322\"></a><span class=\"lineno\"> 2322</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02323\"></a><span class=\"lineno\"> 2323</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02324\"></a><span class=\"lineno\"> 2324</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02325\"></a><span class=\"lineno\"> 2325</span>&#160;</div>\n<div class=\"line\"><a name=\"l02326\"></a><span class=\"lineno\"> 2326</span>&#160;        <span class=\"comment\">// zwyx</span></div>\n<div class=\"line\"><a name=\"l02327\"></a><span class=\"lineno\"> 2327</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02328\"></a><span class=\"lineno\"> 2328</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02329\"></a><span class=\"lineno\"> 2329</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02330\"></a><span class=\"lineno\"> 2330</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02331\"></a><span class=\"lineno\"> 2331</span>&#160;</div>\n<div class=\"line\"><a name=\"l02332\"></a><span class=\"lineno\"> 2332</span>&#160;        <span class=\"comment\">// zwyy</span></div>\n<div class=\"line\"><a name=\"l02333\"></a><span class=\"lineno\"> 2333</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02334\"></a><span class=\"lineno\"> 2334</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02335\"></a><span class=\"lineno\"> 2335</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02336\"></a><span class=\"lineno\"> 2336</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02337\"></a><span class=\"lineno\"> 2337</span>&#160;</div>\n<div class=\"line\"><a name=\"l02338\"></a><span class=\"lineno\"> 2338</span>&#160;        <span class=\"comment\">// zwyz</span></div>\n<div class=\"line\"><a name=\"l02339\"></a><span class=\"lineno\"> 2339</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02340\"></a><span class=\"lineno\"> 2340</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02341\"></a><span class=\"lineno\"> 2341</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02342\"></a><span class=\"lineno\"> 2342</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02343\"></a><span class=\"lineno\"> 2343</span>&#160;</div>\n<div class=\"line\"><a name=\"l02344\"></a><span class=\"lineno\"> 2344</span>&#160;        <span class=\"comment\">// zwyw</span></div>\n<div class=\"line\"><a name=\"l02345\"></a><span class=\"lineno\"> 2345</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02346\"></a><span class=\"lineno\"> 2346</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02347\"></a><span class=\"lineno\"> 2347</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02348\"></a><span class=\"lineno\"> 2348</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02349\"></a><span class=\"lineno\"> 2349</span>&#160;</div>\n<div class=\"line\"><a name=\"l02350\"></a><span class=\"lineno\"> 2350</span>&#160;        <span class=\"comment\">// zwzx</span></div>\n<div class=\"line\"><a name=\"l02351\"></a><span class=\"lineno\"> 2351</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02352\"></a><span class=\"lineno\"> 2352</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02353\"></a><span class=\"lineno\"> 2353</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02354\"></a><span class=\"lineno\"> 2354</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02355\"></a><span class=\"lineno\"> 2355</span>&#160;</div>\n<div class=\"line\"><a name=\"l02356\"></a><span class=\"lineno\"> 2356</span>&#160;        <span class=\"comment\">// zwzy</span></div>\n<div class=\"line\"><a name=\"l02357\"></a><span class=\"lineno\"> 2357</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02358\"></a><span class=\"lineno\"> 2358</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02359\"></a><span class=\"lineno\"> 2359</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02360\"></a><span class=\"lineno\"> 2360</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02361\"></a><span class=\"lineno\"> 2361</span>&#160;</div>\n<div class=\"line\"><a name=\"l02362\"></a><span class=\"lineno\"> 2362</span>&#160;        <span class=\"comment\">// zwzz</span></div>\n<div class=\"line\"><a name=\"l02363\"></a><span class=\"lineno\"> 2363</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02364\"></a><span class=\"lineno\"> 2364</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02365\"></a><span class=\"lineno\"> 2365</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02366\"></a><span class=\"lineno\"> 2366</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02367\"></a><span class=\"lineno\"> 2367</span>&#160;</div>\n<div class=\"line\"><a name=\"l02368\"></a><span class=\"lineno\"> 2368</span>&#160;        <span class=\"comment\">// zwzw</span></div>\n<div class=\"line\"><a name=\"l02369\"></a><span class=\"lineno\"> 2369</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02370\"></a><span class=\"lineno\"> 2370</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02371\"></a><span class=\"lineno\"> 2371</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02372\"></a><span class=\"lineno\"> 2372</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02373\"></a><span class=\"lineno\"> 2373</span>&#160;</div>\n<div class=\"line\"><a name=\"l02374\"></a><span class=\"lineno\"> 2374</span>&#160;        <span class=\"comment\">// zwwx</span></div>\n<div class=\"line\"><a name=\"l02375\"></a><span class=\"lineno\"> 2375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02376\"></a><span class=\"lineno\"> 2376</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02377\"></a><span class=\"lineno\"> 2377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02378\"></a><span class=\"lineno\"> 2378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02379\"></a><span class=\"lineno\"> 2379</span>&#160;</div>\n<div class=\"line\"><a name=\"l02380\"></a><span class=\"lineno\"> 2380</span>&#160;        <span class=\"comment\">// zwwy</span></div>\n<div class=\"line\"><a name=\"l02381\"></a><span class=\"lineno\"> 2381</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02382\"></a><span class=\"lineno\"> 2382</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02383\"></a><span class=\"lineno\"> 2383</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02384\"></a><span class=\"lineno\"> 2384</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02385\"></a><span class=\"lineno\"> 2385</span>&#160;</div>\n<div class=\"line\"><a name=\"l02386\"></a><span class=\"lineno\"> 2386</span>&#160;        <span class=\"comment\">// zwwz</span></div>\n<div class=\"line\"><a name=\"l02387\"></a><span class=\"lineno\"> 2387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02388\"></a><span class=\"lineno\"> 2388</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02389\"></a><span class=\"lineno\"> 2389</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02390\"></a><span class=\"lineno\"> 2390</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02391\"></a><span class=\"lineno\"> 2391</span>&#160;</div>\n<div class=\"line\"><a name=\"l02392\"></a><span class=\"lineno\"> 2392</span>&#160;        <span class=\"comment\">// zwww</span></div>\n<div class=\"line\"><a name=\"l02393\"></a><span class=\"lineno\"> 2393</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02394\"></a><span class=\"lineno\"> 2394</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02395\"></a><span class=\"lineno\"> 2395</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02396\"></a><span class=\"lineno\"> 2396</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02397\"></a><span class=\"lineno\"> 2397</span>&#160;</div>\n<div class=\"line\"><a name=\"l02398\"></a><span class=\"lineno\"> 2398</span>&#160;        <span class=\"comment\">// wxxx</span></div>\n<div class=\"line\"><a name=\"l02399\"></a><span class=\"lineno\"> 2399</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02400\"></a><span class=\"lineno\"> 2400</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02401\"></a><span class=\"lineno\"> 2401</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02402\"></a><span class=\"lineno\"> 2402</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02403\"></a><span class=\"lineno\"> 2403</span>&#160;</div>\n<div class=\"line\"><a name=\"l02404\"></a><span class=\"lineno\"> 2404</span>&#160;        <span class=\"comment\">// wxxy</span></div>\n<div class=\"line\"><a name=\"l02405\"></a><span class=\"lineno\"> 2405</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02406\"></a><span class=\"lineno\"> 2406</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02407\"></a><span class=\"lineno\"> 2407</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02408\"></a><span class=\"lineno\"> 2408</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02409\"></a><span class=\"lineno\"> 2409</span>&#160;</div>\n<div class=\"line\"><a name=\"l02410\"></a><span class=\"lineno\"> 2410</span>&#160;        <span class=\"comment\">// wxxz</span></div>\n<div class=\"line\"><a name=\"l02411\"></a><span class=\"lineno\"> 2411</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02412\"></a><span class=\"lineno\"> 2412</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02413\"></a><span class=\"lineno\"> 2413</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02414\"></a><span class=\"lineno\"> 2414</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02415\"></a><span class=\"lineno\"> 2415</span>&#160;</div>\n<div class=\"line\"><a name=\"l02416\"></a><span class=\"lineno\"> 2416</span>&#160;        <span class=\"comment\">// wxxw</span></div>\n<div class=\"line\"><a name=\"l02417\"></a><span class=\"lineno\"> 2417</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02418\"></a><span class=\"lineno\"> 2418</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02419\"></a><span class=\"lineno\"> 2419</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02420\"></a><span class=\"lineno\"> 2420</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02421\"></a><span class=\"lineno\"> 2421</span>&#160;</div>\n<div class=\"line\"><a name=\"l02422\"></a><span class=\"lineno\"> 2422</span>&#160;        <span class=\"comment\">// wxyx</span></div>\n<div class=\"line\"><a name=\"l02423\"></a><span class=\"lineno\"> 2423</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02424\"></a><span class=\"lineno\"> 2424</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02425\"></a><span class=\"lineno\"> 2425</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02426\"></a><span class=\"lineno\"> 2426</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02427\"></a><span class=\"lineno\"> 2427</span>&#160;</div>\n<div class=\"line\"><a name=\"l02428\"></a><span class=\"lineno\"> 2428</span>&#160;        <span class=\"comment\">// wxyy</span></div>\n<div class=\"line\"><a name=\"l02429\"></a><span class=\"lineno\"> 2429</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02430\"></a><span class=\"lineno\"> 2430</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02431\"></a><span class=\"lineno\"> 2431</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02432\"></a><span class=\"lineno\"> 2432</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02433\"></a><span class=\"lineno\"> 2433</span>&#160;</div>\n<div class=\"line\"><a name=\"l02434\"></a><span class=\"lineno\"> 2434</span>&#160;        <span class=\"comment\">// wxyz</span></div>\n<div class=\"line\"><a name=\"l02435\"></a><span class=\"lineno\"> 2435</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02436\"></a><span class=\"lineno\"> 2436</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02437\"></a><span class=\"lineno\"> 2437</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02438\"></a><span class=\"lineno\"> 2438</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02439\"></a><span class=\"lineno\"> 2439</span>&#160;</div>\n<div class=\"line\"><a name=\"l02440\"></a><span class=\"lineno\"> 2440</span>&#160;        <span class=\"comment\">// wxyw</span></div>\n<div class=\"line\"><a name=\"l02441\"></a><span class=\"lineno\"> 2441</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02442\"></a><span class=\"lineno\"> 2442</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02443\"></a><span class=\"lineno\"> 2443</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02444\"></a><span class=\"lineno\"> 2444</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02445\"></a><span class=\"lineno\"> 2445</span>&#160;</div>\n<div class=\"line\"><a name=\"l02446\"></a><span class=\"lineno\"> 2446</span>&#160;        <span class=\"comment\">// wxzx</span></div>\n<div class=\"line\"><a name=\"l02447\"></a><span class=\"lineno\"> 2447</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02448\"></a><span class=\"lineno\"> 2448</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02449\"></a><span class=\"lineno\"> 2449</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02450\"></a><span class=\"lineno\"> 2450</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02451\"></a><span class=\"lineno\"> 2451</span>&#160;</div>\n<div class=\"line\"><a name=\"l02452\"></a><span class=\"lineno\"> 2452</span>&#160;        <span class=\"comment\">// wxzy</span></div>\n<div class=\"line\"><a name=\"l02453\"></a><span class=\"lineno\"> 2453</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02454\"></a><span class=\"lineno\"> 2454</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02455\"></a><span class=\"lineno\"> 2455</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02456\"></a><span class=\"lineno\"> 2456</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02457\"></a><span class=\"lineno\"> 2457</span>&#160;</div>\n<div class=\"line\"><a name=\"l02458\"></a><span class=\"lineno\"> 2458</span>&#160;        <span class=\"comment\">// wxzz</span></div>\n<div class=\"line\"><a name=\"l02459\"></a><span class=\"lineno\"> 2459</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02460\"></a><span class=\"lineno\"> 2460</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02461\"></a><span class=\"lineno\"> 2461</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02462\"></a><span class=\"lineno\"> 2462</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02463\"></a><span class=\"lineno\"> 2463</span>&#160;</div>\n<div class=\"line\"><a name=\"l02464\"></a><span class=\"lineno\"> 2464</span>&#160;        <span class=\"comment\">// wxzw</span></div>\n<div class=\"line\"><a name=\"l02465\"></a><span class=\"lineno\"> 2465</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02466\"></a><span class=\"lineno\"> 2466</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02467\"></a><span class=\"lineno\"> 2467</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02468\"></a><span class=\"lineno\"> 2468</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02469\"></a><span class=\"lineno\"> 2469</span>&#160;</div>\n<div class=\"line\"><a name=\"l02470\"></a><span class=\"lineno\"> 2470</span>&#160;        <span class=\"comment\">// wxwx</span></div>\n<div class=\"line\"><a name=\"l02471\"></a><span class=\"lineno\"> 2471</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02472\"></a><span class=\"lineno\"> 2472</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02473\"></a><span class=\"lineno\"> 2473</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02474\"></a><span class=\"lineno\"> 2474</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02475\"></a><span class=\"lineno\"> 2475</span>&#160;</div>\n<div class=\"line\"><a name=\"l02476\"></a><span class=\"lineno\"> 2476</span>&#160;        <span class=\"comment\">// wxwy</span></div>\n<div class=\"line\"><a name=\"l02477\"></a><span class=\"lineno\"> 2477</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02478\"></a><span class=\"lineno\"> 2478</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02479\"></a><span class=\"lineno\"> 2479</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02480\"></a><span class=\"lineno\"> 2480</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02481\"></a><span class=\"lineno\"> 2481</span>&#160;</div>\n<div class=\"line\"><a name=\"l02482\"></a><span class=\"lineno\"> 2482</span>&#160;        <span class=\"comment\">// wxwz</span></div>\n<div class=\"line\"><a name=\"l02483\"></a><span class=\"lineno\"> 2483</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02484\"></a><span class=\"lineno\"> 2484</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02485\"></a><span class=\"lineno\"> 2485</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02486\"></a><span class=\"lineno\"> 2486</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02487\"></a><span class=\"lineno\"> 2487</span>&#160;</div>\n<div class=\"line\"><a name=\"l02488\"></a><span class=\"lineno\"> 2488</span>&#160;        <span class=\"comment\">// wxww</span></div>\n<div class=\"line\"><a name=\"l02489\"></a><span class=\"lineno\"> 2489</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02490\"></a><span class=\"lineno\"> 2490</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02491\"></a><span class=\"lineno\"> 2491</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02492\"></a><span class=\"lineno\"> 2492</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02493\"></a><span class=\"lineno\"> 2493</span>&#160;</div>\n<div class=\"line\"><a name=\"l02494\"></a><span class=\"lineno\"> 2494</span>&#160;        <span class=\"comment\">// wyxx</span></div>\n<div class=\"line\"><a name=\"l02495\"></a><span class=\"lineno\"> 2495</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02496\"></a><span class=\"lineno\"> 2496</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02497\"></a><span class=\"lineno\"> 2497</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02498\"></a><span class=\"lineno\"> 2498</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02499\"></a><span class=\"lineno\"> 2499</span>&#160;</div>\n<div class=\"line\"><a name=\"l02500\"></a><span class=\"lineno\"> 2500</span>&#160;        <span class=\"comment\">// wyxy</span></div>\n<div class=\"line\"><a name=\"l02501\"></a><span class=\"lineno\"> 2501</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02502\"></a><span class=\"lineno\"> 2502</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02503\"></a><span class=\"lineno\"> 2503</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02504\"></a><span class=\"lineno\"> 2504</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02505\"></a><span class=\"lineno\"> 2505</span>&#160;</div>\n<div class=\"line\"><a name=\"l02506\"></a><span class=\"lineno\"> 2506</span>&#160;        <span class=\"comment\">// wyxz</span></div>\n<div class=\"line\"><a name=\"l02507\"></a><span class=\"lineno\"> 2507</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02508\"></a><span class=\"lineno\"> 2508</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02509\"></a><span class=\"lineno\"> 2509</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02510\"></a><span class=\"lineno\"> 2510</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02511\"></a><span class=\"lineno\"> 2511</span>&#160;</div>\n<div class=\"line\"><a name=\"l02512\"></a><span class=\"lineno\"> 2512</span>&#160;        <span class=\"comment\">// wyxw</span></div>\n<div class=\"line\"><a name=\"l02513\"></a><span class=\"lineno\"> 2513</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02514\"></a><span class=\"lineno\"> 2514</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02515\"></a><span class=\"lineno\"> 2515</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02516\"></a><span class=\"lineno\"> 2516</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02517\"></a><span class=\"lineno\"> 2517</span>&#160;</div>\n<div class=\"line\"><a name=\"l02518\"></a><span class=\"lineno\"> 2518</span>&#160;        <span class=\"comment\">// wyyx</span></div>\n<div class=\"line\"><a name=\"l02519\"></a><span class=\"lineno\"> 2519</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02520\"></a><span class=\"lineno\"> 2520</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02521\"></a><span class=\"lineno\"> 2521</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02522\"></a><span class=\"lineno\"> 2522</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02523\"></a><span class=\"lineno\"> 2523</span>&#160;</div>\n<div class=\"line\"><a name=\"l02524\"></a><span class=\"lineno\"> 2524</span>&#160;        <span class=\"comment\">// wyyy</span></div>\n<div class=\"line\"><a name=\"l02525\"></a><span class=\"lineno\"> 2525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02526\"></a><span class=\"lineno\"> 2526</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02527\"></a><span class=\"lineno\"> 2527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02528\"></a><span class=\"lineno\"> 2528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02529\"></a><span class=\"lineno\"> 2529</span>&#160;</div>\n<div class=\"line\"><a name=\"l02530\"></a><span class=\"lineno\"> 2530</span>&#160;        <span class=\"comment\">// wyyz</span></div>\n<div class=\"line\"><a name=\"l02531\"></a><span class=\"lineno\"> 2531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02532\"></a><span class=\"lineno\"> 2532</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02533\"></a><span class=\"lineno\"> 2533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02534\"></a><span class=\"lineno\"> 2534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02535\"></a><span class=\"lineno\"> 2535</span>&#160;</div>\n<div class=\"line\"><a name=\"l02536\"></a><span class=\"lineno\"> 2536</span>&#160;        <span class=\"comment\">// wyyw</span></div>\n<div class=\"line\"><a name=\"l02537\"></a><span class=\"lineno\"> 2537</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02538\"></a><span class=\"lineno\"> 2538</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02539\"></a><span class=\"lineno\"> 2539</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02540\"></a><span class=\"lineno\"> 2540</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02541\"></a><span class=\"lineno\"> 2541</span>&#160;</div>\n<div class=\"line\"><a name=\"l02542\"></a><span class=\"lineno\"> 2542</span>&#160;        <span class=\"comment\">// wyzx</span></div>\n<div class=\"line\"><a name=\"l02543\"></a><span class=\"lineno\"> 2543</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02544\"></a><span class=\"lineno\"> 2544</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02545\"></a><span class=\"lineno\"> 2545</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02546\"></a><span class=\"lineno\"> 2546</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02547\"></a><span class=\"lineno\"> 2547</span>&#160;</div>\n<div class=\"line\"><a name=\"l02548\"></a><span class=\"lineno\"> 2548</span>&#160;        <span class=\"comment\">// wyzy</span></div>\n<div class=\"line\"><a name=\"l02549\"></a><span class=\"lineno\"> 2549</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02550\"></a><span class=\"lineno\"> 2550</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02551\"></a><span class=\"lineno\"> 2551</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02552\"></a><span class=\"lineno\"> 2552</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02553\"></a><span class=\"lineno\"> 2553</span>&#160;</div>\n<div class=\"line\"><a name=\"l02554\"></a><span class=\"lineno\"> 2554</span>&#160;        <span class=\"comment\">// wyzz</span></div>\n<div class=\"line\"><a name=\"l02555\"></a><span class=\"lineno\"> 2555</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02556\"></a><span class=\"lineno\"> 2556</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02557\"></a><span class=\"lineno\"> 2557</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02558\"></a><span class=\"lineno\"> 2558</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02559\"></a><span class=\"lineno\"> 2559</span>&#160;</div>\n<div class=\"line\"><a name=\"l02560\"></a><span class=\"lineno\"> 2560</span>&#160;        <span class=\"comment\">// wyzw</span></div>\n<div class=\"line\"><a name=\"l02561\"></a><span class=\"lineno\"> 2561</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02562\"></a><span class=\"lineno\"> 2562</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02563\"></a><span class=\"lineno\"> 2563</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02564\"></a><span class=\"lineno\"> 2564</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02565\"></a><span class=\"lineno\"> 2565</span>&#160;</div>\n<div class=\"line\"><a name=\"l02566\"></a><span class=\"lineno\"> 2566</span>&#160;        <span class=\"comment\">// wywx</span></div>\n<div class=\"line\"><a name=\"l02567\"></a><span class=\"lineno\"> 2567</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02568\"></a><span class=\"lineno\"> 2568</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02569\"></a><span class=\"lineno\"> 2569</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02570\"></a><span class=\"lineno\"> 2570</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02571\"></a><span class=\"lineno\"> 2571</span>&#160;</div>\n<div class=\"line\"><a name=\"l02572\"></a><span class=\"lineno\"> 2572</span>&#160;        <span class=\"comment\">// wywy</span></div>\n<div class=\"line\"><a name=\"l02573\"></a><span class=\"lineno\"> 2573</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02574\"></a><span class=\"lineno\"> 2574</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02575\"></a><span class=\"lineno\"> 2575</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02576\"></a><span class=\"lineno\"> 2576</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02577\"></a><span class=\"lineno\"> 2577</span>&#160;</div>\n<div class=\"line\"><a name=\"l02578\"></a><span class=\"lineno\"> 2578</span>&#160;        <span class=\"comment\">// wywz</span></div>\n<div class=\"line\"><a name=\"l02579\"></a><span class=\"lineno\"> 2579</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02580\"></a><span class=\"lineno\"> 2580</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02581\"></a><span class=\"lineno\"> 2581</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02582\"></a><span class=\"lineno\"> 2582</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02583\"></a><span class=\"lineno\"> 2583</span>&#160;</div>\n<div class=\"line\"><a name=\"l02584\"></a><span class=\"lineno\"> 2584</span>&#160;        <span class=\"comment\">// wyww</span></div>\n<div class=\"line\"><a name=\"l02585\"></a><span class=\"lineno\"> 2585</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02586\"></a><span class=\"lineno\"> 2586</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02587\"></a><span class=\"lineno\"> 2587</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02588\"></a><span class=\"lineno\"> 2588</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02589\"></a><span class=\"lineno\"> 2589</span>&#160;</div>\n<div class=\"line\"><a name=\"l02590\"></a><span class=\"lineno\"> 2590</span>&#160;        <span class=\"comment\">// wzxx</span></div>\n<div class=\"line\"><a name=\"l02591\"></a><span class=\"lineno\"> 2591</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02592\"></a><span class=\"lineno\"> 2592</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02593\"></a><span class=\"lineno\"> 2593</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02594\"></a><span class=\"lineno\"> 2594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02595\"></a><span class=\"lineno\"> 2595</span>&#160;</div>\n<div class=\"line\"><a name=\"l02596\"></a><span class=\"lineno\"> 2596</span>&#160;        <span class=\"comment\">// wzxy</span></div>\n<div class=\"line\"><a name=\"l02597\"></a><span class=\"lineno\"> 2597</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02598\"></a><span class=\"lineno\"> 2598</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02599\"></a><span class=\"lineno\"> 2599</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02600\"></a><span class=\"lineno\"> 2600</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02601\"></a><span class=\"lineno\"> 2601</span>&#160;</div>\n<div class=\"line\"><a name=\"l02602\"></a><span class=\"lineno\"> 2602</span>&#160;        <span class=\"comment\">// wzxz</span></div>\n<div class=\"line\"><a name=\"l02603\"></a><span class=\"lineno\"> 2603</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02604\"></a><span class=\"lineno\"> 2604</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02605\"></a><span class=\"lineno\"> 2605</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02606\"></a><span class=\"lineno\"> 2606</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02607\"></a><span class=\"lineno\"> 2607</span>&#160;</div>\n<div class=\"line\"><a name=\"l02608\"></a><span class=\"lineno\"> 2608</span>&#160;        <span class=\"comment\">// wzxw</span></div>\n<div class=\"line\"><a name=\"l02609\"></a><span class=\"lineno\"> 2609</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02610\"></a><span class=\"lineno\"> 2610</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02611\"></a><span class=\"lineno\"> 2611</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02612\"></a><span class=\"lineno\"> 2612</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02613\"></a><span class=\"lineno\"> 2613</span>&#160;</div>\n<div class=\"line\"><a name=\"l02614\"></a><span class=\"lineno\"> 2614</span>&#160;        <span class=\"comment\">// wzyx</span></div>\n<div class=\"line\"><a name=\"l02615\"></a><span class=\"lineno\"> 2615</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02616\"></a><span class=\"lineno\"> 2616</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02617\"></a><span class=\"lineno\"> 2617</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02618\"></a><span class=\"lineno\"> 2618</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02619\"></a><span class=\"lineno\"> 2619</span>&#160;</div>\n<div class=\"line\"><a name=\"l02620\"></a><span class=\"lineno\"> 2620</span>&#160;        <span class=\"comment\">// wzyy</span></div>\n<div class=\"line\"><a name=\"l02621\"></a><span class=\"lineno\"> 2621</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02622\"></a><span class=\"lineno\"> 2622</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02623\"></a><span class=\"lineno\"> 2623</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02624\"></a><span class=\"lineno\"> 2624</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02625\"></a><span class=\"lineno\"> 2625</span>&#160;</div>\n<div class=\"line\"><a name=\"l02626\"></a><span class=\"lineno\"> 2626</span>&#160;        <span class=\"comment\">// wzyz</span></div>\n<div class=\"line\"><a name=\"l02627\"></a><span class=\"lineno\"> 2627</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02628\"></a><span class=\"lineno\"> 2628</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02629\"></a><span class=\"lineno\"> 2629</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02630\"></a><span class=\"lineno\"> 2630</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02631\"></a><span class=\"lineno\"> 2631</span>&#160;</div>\n<div class=\"line\"><a name=\"l02632\"></a><span class=\"lineno\"> 2632</span>&#160;        <span class=\"comment\">// wzyw</span></div>\n<div class=\"line\"><a name=\"l02633\"></a><span class=\"lineno\"> 2633</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02634\"></a><span class=\"lineno\"> 2634</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02635\"></a><span class=\"lineno\"> 2635</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02636\"></a><span class=\"lineno\"> 2636</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02637\"></a><span class=\"lineno\"> 2637</span>&#160;</div>\n<div class=\"line\"><a name=\"l02638\"></a><span class=\"lineno\"> 2638</span>&#160;        <span class=\"comment\">// wzzx</span></div>\n<div class=\"line\"><a name=\"l02639\"></a><span class=\"lineno\"> 2639</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02640\"></a><span class=\"lineno\"> 2640</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02641\"></a><span class=\"lineno\"> 2641</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02642\"></a><span class=\"lineno\"> 2642</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02643\"></a><span class=\"lineno\"> 2643</span>&#160;</div>\n<div class=\"line\"><a name=\"l02644\"></a><span class=\"lineno\"> 2644</span>&#160;        <span class=\"comment\">// wzzy</span></div>\n<div class=\"line\"><a name=\"l02645\"></a><span class=\"lineno\"> 2645</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02646\"></a><span class=\"lineno\"> 2646</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02647\"></a><span class=\"lineno\"> 2647</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02648\"></a><span class=\"lineno\"> 2648</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02649\"></a><span class=\"lineno\"> 2649</span>&#160;</div>\n<div class=\"line\"><a name=\"l02650\"></a><span class=\"lineno\"> 2650</span>&#160;        <span class=\"comment\">// wzzz</span></div>\n<div class=\"line\"><a name=\"l02651\"></a><span class=\"lineno\"> 2651</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02652\"></a><span class=\"lineno\"> 2652</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02653\"></a><span class=\"lineno\"> 2653</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02654\"></a><span class=\"lineno\"> 2654</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02655\"></a><span class=\"lineno\"> 2655</span>&#160;</div>\n<div class=\"line\"><a name=\"l02656\"></a><span class=\"lineno\"> 2656</span>&#160;        <span class=\"comment\">// wzzw</span></div>\n<div class=\"line\"><a name=\"l02657\"></a><span class=\"lineno\"> 2657</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02658\"></a><span class=\"lineno\"> 2658</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02659\"></a><span class=\"lineno\"> 2659</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02660\"></a><span class=\"lineno\"> 2660</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02661\"></a><span class=\"lineno\"> 2661</span>&#160;</div>\n<div class=\"line\"><a name=\"l02662\"></a><span class=\"lineno\"> 2662</span>&#160;        <span class=\"comment\">// wzwx</span></div>\n<div class=\"line\"><a name=\"l02663\"></a><span class=\"lineno\"> 2663</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02664\"></a><span class=\"lineno\"> 2664</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02665\"></a><span class=\"lineno\"> 2665</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02666\"></a><span class=\"lineno\"> 2666</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02667\"></a><span class=\"lineno\"> 2667</span>&#160;</div>\n<div class=\"line\"><a name=\"l02668\"></a><span class=\"lineno\"> 2668</span>&#160;        <span class=\"comment\">// wzwy</span></div>\n<div class=\"line\"><a name=\"l02669\"></a><span class=\"lineno\"> 2669</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02670\"></a><span class=\"lineno\"> 2670</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02671\"></a><span class=\"lineno\"> 2671</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02672\"></a><span class=\"lineno\"> 2672</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02673\"></a><span class=\"lineno\"> 2673</span>&#160;</div>\n<div class=\"line\"><a name=\"l02674\"></a><span class=\"lineno\"> 2674</span>&#160;        <span class=\"comment\">// wzwz</span></div>\n<div class=\"line\"><a name=\"l02675\"></a><span class=\"lineno\"> 2675</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02676\"></a><span class=\"lineno\"> 2676</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02677\"></a><span class=\"lineno\"> 2677</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02678\"></a><span class=\"lineno\"> 2678</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02679\"></a><span class=\"lineno\"> 2679</span>&#160;</div>\n<div class=\"line\"><a name=\"l02680\"></a><span class=\"lineno\"> 2680</span>&#160;        <span class=\"comment\">// wzww</span></div>\n<div class=\"line\"><a name=\"l02681\"></a><span class=\"lineno\"> 2681</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02682\"></a><span class=\"lineno\"> 2682</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02683\"></a><span class=\"lineno\"> 2683</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02684\"></a><span class=\"lineno\"> 2684</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02685\"></a><span class=\"lineno\"> 2685</span>&#160;</div>\n<div class=\"line\"><a name=\"l02686\"></a><span class=\"lineno\"> 2686</span>&#160;        <span class=\"comment\">// wwxx</span></div>\n<div class=\"line\"><a name=\"l02687\"></a><span class=\"lineno\"> 2687</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02688\"></a><span class=\"lineno\"> 2688</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02689\"></a><span class=\"lineno\"> 2689</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02690\"></a><span class=\"lineno\"> 2690</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02691\"></a><span class=\"lineno\"> 2691</span>&#160;</div>\n<div class=\"line\"><a name=\"l02692\"></a><span class=\"lineno\"> 2692</span>&#160;        <span class=\"comment\">// wwxy</span></div>\n<div class=\"line\"><a name=\"l02693\"></a><span class=\"lineno\"> 2693</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02694\"></a><span class=\"lineno\"> 2694</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02695\"></a><span class=\"lineno\"> 2695</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02696\"></a><span class=\"lineno\"> 2696</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02697\"></a><span class=\"lineno\"> 2697</span>&#160;</div>\n<div class=\"line\"><a name=\"l02698\"></a><span class=\"lineno\"> 2698</span>&#160;        <span class=\"comment\">// wwxz</span></div>\n<div class=\"line\"><a name=\"l02699\"></a><span class=\"lineno\"> 2699</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02700\"></a><span class=\"lineno\"> 2700</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02701\"></a><span class=\"lineno\"> 2701</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02702\"></a><span class=\"lineno\"> 2702</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02703\"></a><span class=\"lineno\"> 2703</span>&#160;</div>\n<div class=\"line\"><a name=\"l02704\"></a><span class=\"lineno\"> 2704</span>&#160;        <span class=\"comment\">// wwxw</span></div>\n<div class=\"line\"><a name=\"l02705\"></a><span class=\"lineno\"> 2705</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02706\"></a><span class=\"lineno\"> 2706</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02707\"></a><span class=\"lineno\"> 2707</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02708\"></a><span class=\"lineno\"> 2708</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02709\"></a><span class=\"lineno\"> 2709</span>&#160;</div>\n<div class=\"line\"><a name=\"l02710\"></a><span class=\"lineno\"> 2710</span>&#160;        <span class=\"comment\">// wwyx</span></div>\n<div class=\"line\"><a name=\"l02711\"></a><span class=\"lineno\"> 2711</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02712\"></a><span class=\"lineno\"> 2712</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02713\"></a><span class=\"lineno\"> 2713</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02714\"></a><span class=\"lineno\"> 2714</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02715\"></a><span class=\"lineno\"> 2715</span>&#160;</div>\n<div class=\"line\"><a name=\"l02716\"></a><span class=\"lineno\"> 2716</span>&#160;        <span class=\"comment\">// wwyy</span></div>\n<div class=\"line\"><a name=\"l02717\"></a><span class=\"lineno\"> 2717</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02718\"></a><span class=\"lineno\"> 2718</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02719\"></a><span class=\"lineno\"> 2719</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02720\"></a><span class=\"lineno\"> 2720</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02721\"></a><span class=\"lineno\"> 2721</span>&#160;</div>\n<div class=\"line\"><a name=\"l02722\"></a><span class=\"lineno\"> 2722</span>&#160;        <span class=\"comment\">// wwyz</span></div>\n<div class=\"line\"><a name=\"l02723\"></a><span class=\"lineno\"> 2723</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02724\"></a><span class=\"lineno\"> 2724</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02725\"></a><span class=\"lineno\"> 2725</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02726\"></a><span class=\"lineno\"> 2726</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02727\"></a><span class=\"lineno\"> 2727</span>&#160;</div>\n<div class=\"line\"><a name=\"l02728\"></a><span class=\"lineno\"> 2728</span>&#160;        <span class=\"comment\">// wwyw</span></div>\n<div class=\"line\"><a name=\"l02729\"></a><span class=\"lineno\"> 2729</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02730\"></a><span class=\"lineno\"> 2730</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02731\"></a><span class=\"lineno\"> 2731</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02732\"></a><span class=\"lineno\"> 2732</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02733\"></a><span class=\"lineno\"> 2733</span>&#160;</div>\n<div class=\"line\"><a name=\"l02734\"></a><span class=\"lineno\"> 2734</span>&#160;        <span class=\"comment\">// wwzx</span></div>\n<div class=\"line\"><a name=\"l02735\"></a><span class=\"lineno\"> 2735</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02736\"></a><span class=\"lineno\"> 2736</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02737\"></a><span class=\"lineno\"> 2737</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02738\"></a><span class=\"lineno\"> 2738</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02739\"></a><span class=\"lineno\"> 2739</span>&#160;</div>\n<div class=\"line\"><a name=\"l02740\"></a><span class=\"lineno\"> 2740</span>&#160;        <span class=\"comment\">// wwzy</span></div>\n<div class=\"line\"><a name=\"l02741\"></a><span class=\"lineno\"> 2741</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02742\"></a><span class=\"lineno\"> 2742</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02743\"></a><span class=\"lineno\"> 2743</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02744\"></a><span class=\"lineno\"> 2744</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02745\"></a><span class=\"lineno\"> 2745</span>&#160;</div>\n<div class=\"line\"><a name=\"l02746\"></a><span class=\"lineno\"> 2746</span>&#160;        <span class=\"comment\">// wwzz</span></div>\n<div class=\"line\"><a name=\"l02747\"></a><span class=\"lineno\"> 2747</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02748\"></a><span class=\"lineno\"> 2748</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02749\"></a><span class=\"lineno\"> 2749</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02750\"></a><span class=\"lineno\"> 2750</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02751\"></a><span class=\"lineno\"> 2751</span>&#160;</div>\n<div class=\"line\"><a name=\"l02752\"></a><span class=\"lineno\"> 2752</span>&#160;        <span class=\"comment\">// wwzw</span></div>\n<div class=\"line\"><a name=\"l02753\"></a><span class=\"lineno\"> 2753</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02754\"></a><span class=\"lineno\"> 2754</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02755\"></a><span class=\"lineno\"> 2755</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02756\"></a><span class=\"lineno\"> 2756</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02757\"></a><span class=\"lineno\"> 2757</span>&#160;</div>\n<div class=\"line\"><a name=\"l02758\"></a><span class=\"lineno\"> 2758</span>&#160;        <span class=\"comment\">// wwwx</span></div>\n<div class=\"line\"><a name=\"l02759\"></a><span class=\"lineno\"> 2759</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02760\"></a><span class=\"lineno\"> 2760</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02761\"></a><span class=\"lineno\"> 2761</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02762\"></a><span class=\"lineno\"> 2762</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02763\"></a><span class=\"lineno\"> 2763</span>&#160;</div>\n<div class=\"line\"><a name=\"l02764\"></a><span class=\"lineno\"> 2764</span>&#160;        <span class=\"comment\">// wwwy</span></div>\n<div class=\"line\"><a name=\"l02765\"></a><span class=\"lineno\"> 2765</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02766\"></a><span class=\"lineno\"> 2766</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02767\"></a><span class=\"lineno\"> 2767</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02768\"></a><span class=\"lineno\"> 2768</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02769\"></a><span class=\"lineno\"> 2769</span>&#160;</div>\n<div class=\"line\"><a name=\"l02770\"></a><span class=\"lineno\"> 2770</span>&#160;        <span class=\"comment\">// wwwz</span></div>\n<div class=\"line\"><a name=\"l02771\"></a><span class=\"lineno\"> 2771</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02772\"></a><span class=\"lineno\"> 2772</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02773\"></a><span class=\"lineno\"> 2773</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02774\"></a><span class=\"lineno\"> 2774</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02775\"></a><span class=\"lineno\"> 2775</span>&#160;</div>\n<div class=\"line\"><a name=\"l02776\"></a><span class=\"lineno\"> 2776</span>&#160;        <span class=\"comment\">// wwww</span></div>\n<div class=\"line\"><a name=\"l02777\"></a><span class=\"lineno\"> 2777</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02778\"></a><span class=\"lineno\"> 2778</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02779\"></a><span class=\"lineno\"> 2779</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02780\"></a><span class=\"lineno\"> 2780</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02781\"></a><span class=\"lineno\"> 2781</span>&#160;</div>\n<div class=\"line\"><a name=\"l02782\"></a><span class=\"lineno\"> 2782</span>&#160;}</div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00188.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_angle.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_angle.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00188_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the absolute angle between two vectors.  <a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">orientedAngle</a> (vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 2d vectors.  <a href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</td></tr>\n<tr class=\"memdesc:ga706fce3d111f485839756a64f5a48553\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 3d vectors based from a reference axis.  <a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">More...</a><br /></td></tr>\n<tr class=\"separator:ga706fce3d111f485839756a64f5a48553\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd>\n<dd>\ngtx_epsilon (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00188_source.html\">vector_angle.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00188_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_angle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_angle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00188.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/rotate_vector.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_angle extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ref);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#include &quot;vector_angle.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00367_html_ga706fce3d111f485839756a64f5a48553\"><div class=\"ttname\"><a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">glm::orientedAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</div><div class=\"ttdoc\">Returns the oriented angle between two 3d vectors based from a reference axis. </div></div>\n<div class=\"ttc\" id=\"a00367_html_ga2e2917b4cb75ca3d043ac15ff88f14e1\"><div class=\"ttname\"><a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the absolute angle between two vectors. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00189.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00189_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga067af382616d93f8e850baae5154cdcc\"></a>\ntypedef vec&lt; 1, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a></td></tr>\n<tr class=\"memdesc:ga067af382616d93f8e850baae5154cdcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of boolean. <br /></td></tr>\n<tr class=\"separator:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00189_source.html\">vector_bool1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00189_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00189.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_bool1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, defaultp&gt;          <a class=\"code\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00265_html_ga067af382616d93f8e850baae5154cdcc\"><div class=\"ttname\"><a href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">glm::bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, defaultp &gt; bvec1</div><div class=\"ttdoc\">1 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00189_source.html#l00027\">vector_bool1.hpp:27</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00190.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00190_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a1e14abae1387274f57741750c06a2\"></a>\ntypedef vec&lt; 1, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae8a1e14abae1387274f57741750c06a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga24a3d364e2ddd444f5b9e7975bbef8f9\"></a>\ntypedef vec&lt; 1, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b4ccb989ba179fa44f7b0879c782621\"></a>\ntypedef vec&lt; 1, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00190_source.html\">vector_bool1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00190_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00190.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_bool1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, highp&gt;                     <a class=\"code\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, mediump&gt;           <a class=\"code\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, lowp&gt;                      <a class=\"code\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00266_html_gae8a1e14abae1387274f57741750c06a2\"><div class=\"ttname\"><a href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">glm::highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, highp &gt; highp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00025\">vector_bool1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga7b4ccb989ba179fa44f7b0879c782621\"><div class=\"ttname\"><a href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">glm::mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, mediump &gt; mediump_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00028\">vector_bool1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga24a3d364e2ddd444f5b9e7975bbef8f9\"><div class=\"ttname\"><a href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">glm::lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, lowp &gt; lowp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00031\">vector_bool1_precision.hpp:31</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00191.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00191_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a></td></tr>\n<tr class=\"memdesc:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of boolean.  <a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00191_source.html\">vector_bool2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00191_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00191.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga0b6123e03653cc1bbe366fc55238a934\"><div class=\"ttname\"><a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">glm::bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, defaultp &gt; bvec2</div><div class=\"ttdoc\">2 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00191_source.html#l00015\">vector_bool2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00192.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00192_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac6c781a85f012d77a75310a3058702c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a5452140650988b94d5716e4d872465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga5a5452140650988b94d5716e4d872465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a5452140650988b94d5716e4d872465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00192_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00192.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gac6c781a85f012d77a75310a3058702c2\"><div class=\"ttname\"><a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">glm::highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; highp_bvec2</div><div class=\"ttdoc\">2 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00016\">vector_bool2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga1e743764869efa9223c2bcefccedaddc\"><div class=\"ttname\"><a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">glm::mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, mediump &gt; mediump_bvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00022\">vector_bool2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5a5452140650988b94d5716e4d872465\"><div class=\"ttname\"><a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">glm::lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, lowp &gt; lowp_bvec2</div><div class=\"ttdoc\">2 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00028\">vector_bool2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00193.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00193_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a></td></tr>\n<tr class=\"memdesc:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of boolean.  <a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00193_source.html\">vector_bool3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00193_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00193.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga197151b72dfaf289daf98b361760ffe7\"><div class=\"ttname\"><a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">glm::bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, defaultp &gt; bvec3</div><div class=\"ttdoc\">3 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00193_source.html#l00015\">vector_bool3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00194.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00194_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a></td></tr>\n<tr class=\"memdesc:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00194_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00194.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga50c783c25082882ef00fe2e5cddba4aa\"><div class=\"ttname\"><a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">glm::mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, mediump &gt; mediump_bvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00022\">vector_bool3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaedb70027d89a0a405046aefda4eabaa6\"><div class=\"ttname\"><a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">glm::highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; highp_bvec3</div><div class=\"ttdoc\">3 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00016\">vector_bool3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga79e0922a977662a8fd39d7829be3908b\"><div class=\"ttname\"><a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">glm::lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, lowp &gt; lowp_bvec3</div><div class=\"ttdoc\">3 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00028\">vector_bool3_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00195.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00195_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a></td></tr>\n<tr class=\"memdesc:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of boolean.  <a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00195_source.html\">vector_bool4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00195_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00195.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga9f7b9712373ff4342d9114619b55f5e3\"><div class=\"ttname\"><a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">glm::bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, defaultp &gt; bvec4</div><div class=\"ttdoc\">4 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00195_source.html#l00015\">vector_bool4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00196.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00196_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaee663ff64429443ab07a5327074192f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaee663ff64429443ab07a5327074192f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee663ff64429443ab07a5327074192f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0be2c682258604a35004f088782a9645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga0be2c682258604a35004f088782a9645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0be2c682258604a35004f088782a9645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00196_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00196.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga15ac87724048ab7169bb5d3572939dd3\"><div class=\"ttname\"><a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">glm::lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, lowp &gt; lowp_bvec4</div><div class=\"ttdoc\">4 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00028\">vector_bool4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0be2c682258604a35004f088782a9645\"><div class=\"ttname\"><a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">glm::mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, mediump &gt; mediump_bvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00022\">vector_bool4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaee663ff64429443ab07a5327074192f6\"><div class=\"ttname\"><a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">glm::highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; highp_bvec4</div><div class=\"ttdoc\">4 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00016\">vector_bool4_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00197.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00197_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, T b)</td></tr>\n<tr class=\"memdesc:gad66b6441f7200db16c9f341711733c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">More...</a><br /></td></tr>\n<tr class=\"separator:gad66b6441f7200db16c9f341711733c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gae989203363cff9eab5093630df4fe071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">More...</a><br /></td></tr>\n<tr class=\"separator:gae989203363cff9eab5093630df4fe071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga7e62739055b49189d9355471f78fe000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e62739055b49189d9355471f78fe000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">More...</a><br /></td></tr>\n<tr class=\"separator:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00197_source.html\">vector_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00197_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00197.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a>( vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;vector_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00267_html_ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><div class=\"ttname\"><a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00267_html_ga4a543dd7d22ad1f3b8b839f808a9d93c\"><div class=\"ttname\"><a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00267_html_ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><div class=\"ttname\"><a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</div><div class=\"ttdoc\">Return the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00267_html_gab66920ed064ab518d6859c5a889c4be4\"><div class=\"ttname\"><a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Return the minimum component-wise values of 4 inputs. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00198.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00198_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6221af17edc2d4477a4583d2cd53e569\"></a>\ntypedef vec&lt; 1, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a></td></tr>\n<tr class=\"memdesc:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00198_source.html\">vector_double1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00198_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00198.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_double1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, defaultp&gt;                <a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00199.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00199_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga77c22c4426da3a6865c88d3fc907e3fe\"></a>\ntypedef vec&lt; 1, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf906eb86b6e96c35138d0e4928e1435a\"></a>\ntypedef vec&lt; 1, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a789ebb176b37a45848f7ccdd3b3dd\"></a>\ntypedef vec&lt; 1, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00199_source.html\">vector_double1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00199_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00199.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_double1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, highp&gt;           <a class=\"code\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">   30</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, mediump&gt;         <a class=\"code\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, lowp&gt;            <a class=\"code\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00269_html_gaf906eb86b6e96c35138d0e4928e1435a\"><div class=\"ttname\"><a href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">glm::lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, lowp &gt; lowp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00033\">vector_double1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga77c22c4426da3a6865c88d3fc907e3fe\"><div class=\"ttname\"><a href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">glm::highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, highp &gt; highp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00027\">vector_double1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga79a789ebb176b37a45848f7ccdd3b3dd\"><div class=\"ttname\"><a href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">glm::mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, mediump &gt; mediump_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00030\">vector_double1_precision.hpp:30</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00200.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00200_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a></td></tr>\n<tr class=\"memdesc:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00200_source.html\">vector_double2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00200_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00200.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00201.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00201_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">More...</a><br /></td></tr>\n<tr class=\"separator:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00201_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00201.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga108086730d086b7f6f7a033955dfb9c3\"><div class=\"ttname\"><a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">glm::lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, lowp &gt; lowp_dvec2</div><div class=\"ttdoc\">2 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00028\">vector_double2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2f4f6e9a69a0281d06940fd0990cafc3\"><div class=\"ttname\"><a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">glm::mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, mediump &gt; mediump_dvec2</div><div class=\"ttdoc\">2 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00022\">vector_double2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab98d77cca255914f5e29697fcbc2d975\"><div class=\"ttname\"><a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">glm::highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; highp_dvec2</div><div class=\"ttdoc\">2 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00016\">vector_double2_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00202.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00202_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a></td></tr>\n<tr class=\"memdesc:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00202_source.html\">vector_double3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00202_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00202.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00203.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00203_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">More...</a><br /></td></tr>\n<tr class=\"separator:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00203_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00203.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">   17</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">   24</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga61c3b1dff4ec7c878af80503141b9f37\"><div class=\"ttname\"><a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">glm::mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, mediump &gt; mediump_dvec3</div><div class=\"ttdoc\">3 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00024\">vector_double3_precision.hpp:24</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga42c518b2917e19ce6946a84c64a3a4b2\"><div class=\"ttname\"><a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">glm::lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, lowp &gt; lowp_dvec3</div><div class=\"ttdoc\">3 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00031\">vector_double3_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab24dc20dcdc5b71282634bdbf6b70105\"><div class=\"ttname\"><a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">glm::highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; highp_dvec3</div><div class=\"ttdoc\">3 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00017\">vector_double3_precision.hpp:17</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00204.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00204_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a></td></tr>\n<tr class=\"memdesc:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00204_source.html\">vector_double4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00204_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00204.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00205.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00205_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a></td></tr>\n<tr class=\"memdesc:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">More...</a><br /></td></tr>\n<tr class=\"separator:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga23a8bca00914a51542bfea13a4778186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">More...</a><br /></td></tr>\n<tr class=\"separator:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00205_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00205.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">   18</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga23a8bca00914a51542bfea13a4778186\"><div class=\"ttname\"><a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">glm::mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, mediump &gt; mediump_dvec4</div><div class=\"ttdoc\">4 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00025\">vector_double4_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab654f4ed4a99d64a6cfc65320c2a7590\"><div class=\"ttname\"><a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">glm::highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; highp_dvec4</div><div class=\"ttdoc\">4 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00018\">vector_double4_precision.hpp:18</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0b4432cb8d910e406576d10d802e190d\"><div class=\"ttname\"><a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">glm::lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, lowp &gt; lowp_dvec4</div><div class=\"ttdoc\">4 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00032\">vector_double4_precision.hpp:32</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00206.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00206_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadfc071d934d8dae7955a1d530a3cf656\"></a>\ntypedef vec&lt; 1, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a></td></tr>\n<tr class=\"memdesc:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00206_source.html\">vector_float1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00206_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00206.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_float1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt;         <a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00207.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00207_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e8ed21862a897c156c0b2abca70b1e9\"></a>\ntypedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a57630f03031706b1d26a7d70d9184c\"></a>\ntypedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga645f53e6b8056609023a894b4e2beef4\"></a>\ntypedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00207_source.html\">vector_float1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00207_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00207.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_float1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">   30</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00271_html_ga0a57630f03031706b1d26a7d70d9184c\"><div class=\"ttname\"><a href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">glm::lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00033\">vector_float1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga645f53e6b8056609023a894b4e2beef4\"><div class=\"ttname\"><a href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">glm::mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00030\">vector_float1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga9e8ed21862a897c156c0b2abca70b1e9\"><div class=\"ttname\"><a href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">glm::highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00027\">vector_float1_precision.hpp:27</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00208.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00208_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a></td></tr>\n<tr class=\"memdesc:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00208_source.html\">vector_float2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00208_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00208.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt; <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00209.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00209_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a></td></tr>\n<tr class=\"memdesc:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a></td></tr>\n<tr class=\"memdesc:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00209_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00209.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaa92c1954d71b1e7914874bd787b43d1c\"><div class=\"ttname\"><a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">glm::highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_vec2</div><div class=\"ttdoc\">2 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00016\">vector_float2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga30e8baef5d56d5c166872a2bc00f36e9\"><div class=\"ttname\"><a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">glm::lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_vec2</div><div class=\"ttdoc\">2 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00028\">vector_float2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gabc61976261c406520c7a8e4d946dc3f0\"><div class=\"ttname\"><a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">glm::mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_vec2</div><div class=\"ttdoc\">2 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00022\">vector_float2_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00210.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00210_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a></td></tr>\n<tr class=\"memdesc:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00210_source.html\">vector_float3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00210_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00210.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00211.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00211_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a></td></tr>\n<tr class=\"memdesc:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">More...</a><br /></td></tr>\n<tr class=\"separator:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2384e263df19f1404b733016eff78fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga2384e263df19f1404b733016eff78fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2384e263df19f1404b733016eff78fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00211_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00211.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaca61dfaccbf2f58f2d8063a4e76b44a9\"><div class=\"ttname\"><a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">glm::highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_vec3</div><div class=\"ttdoc\">3 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00016\">vector_float3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga868e8e4470a3ef97c7ee3032bf90dc79\"><div class=\"ttname\"><a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">glm::lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_vec3</div><div class=\"ttdoc\">3 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00028\">vector_float3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2384e263df19f1404b733016eff78fca\"><div class=\"ttname\"><a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">glm::mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_vec3</div><div class=\"ttdoc\">3 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00022\">vector_float3_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00212.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00212_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a></td></tr>\n<tr class=\"memdesc:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00212_source.html\">vector_float4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00212_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00212.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00213.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00213_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a></td></tr>\n<tr class=\"memdesc:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a></td></tr>\n<tr class=\"memdesc:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00213_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00213.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gace3acb313c800552a9411953eb8b2ed7\"><div class=\"ttname\"><a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">glm::lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_vec4</div><div class=\"ttdoc\">4 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00028\">vector_float4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5c6978d3ffba06738416a33083853fc0\"><div class=\"ttname\"><a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">glm::mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_vec4</div><div class=\"ttdoc\">4 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00022\">vector_float4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad281decae52948b82feb3a9db8f63a7b\"><div class=\"ttname\"><a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">glm::highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_vec4</div><div class=\"ttdoc\">4 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00016\">vector_float4_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00214.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00214_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaedd0562c2e77714929d7723a7e2e0dba\"></a>\ntypedef vec&lt; 1, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a></td></tr>\n<tr class=\"memdesc:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00214_source.html\">vector_int1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00214_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00214.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_int1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, defaultp&gt;                   <a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00215.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00215_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e02566f2bd2caa68e61be45a477c77e\"></a>\ntypedef vec&lt; 1, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga836dbb1dc516c233b7f5fe9763bc15dc\"></a>\ntypedef vec&lt; 1, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad628c608970b3d0aa6cfb63ce6e53e56\"></a>\ntypedef vec&lt; 1, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00215_source.html\">vector_int1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00215_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00215.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_int1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, highp&gt;                      <a class=\"code\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, mediump&gt;            <a class=\"code\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, lowp&gt;                       <a class=\"code\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00273_html_gad628c608970b3d0aa6cfb63ce6e53e56\"><div class=\"ttname\"><a href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">glm::mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, mediump &gt; mediump_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00028\">vector_int1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga7e02566f2bd2caa68e61be45a477c77e\"><div class=\"ttname\"><a href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">glm::highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, highp &gt; highp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00025\">vector_int1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga836dbb1dc516c233b7f5fe9763bc15dc\"><div class=\"ttname\"><a href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">glm::lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, lowp &gt; lowp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00031\">vector_int1_precision.hpp:31</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00216.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00216_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a></td></tr>\n<tr class=\"memdesc:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of signed integer numbers.  <a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00216_source.html\">vector_int2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00216_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00216.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00217.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00217_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a></td></tr>\n<tr class=\"memdesc:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57496299d276ed97044074097bd5e2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gac57496299d276ed97044074097bd5e2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac57496299d276ed97044074097bd5e2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00217_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00217.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, highp&gt;              <a class=\"code\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaa18f6b80b41c214f10666948539c1f93\"><div class=\"ttname\"><a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">glm::highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; highp_ivec2</div><div class=\"ttdoc\">2 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00016\">vector_int2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac57496299d276ed97044074097bd5e2c\"><div class=\"ttname\"><a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">glm::mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, mediump &gt; mediump_ivec2</div><div class=\"ttdoc\">2 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00022\">vector_int2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga8433c6c1fdd80c0a83941d94aff73fa0\"><div class=\"ttname\"><a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">glm::lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, lowp &gt; lowp_ivec2</div><div class=\"ttdoc\">2 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00028\">vector_int2_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00218.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00218_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a></td></tr>\n<tr class=\"memdesc:gad0d784d8eee201aca362484d2daee46c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of signed integer numbers.  <a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00218_source.html\">vector_int3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00218_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00218.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00219.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00219_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00219_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00219.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, highp&gt;              <a class=\"code\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gac1a86a75b3c68ebb704d7094043669d6\"><div class=\"ttname\"><a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">glm::lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, lowp &gt; lowp_ivec3</div><div class=\"ttdoc\">3 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00028\">vector_int3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27cfb51e0dbe15bba27a14a8590e8466\"><div class=\"ttname\"><a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">glm::mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, mediump &gt; mediump_ivec3</div><div class=\"ttdoc\">3 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00022\">vector_int3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><div class=\"ttname\"><a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">glm::highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; highp_ivec3</div><div class=\"ttdoc\">3 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00016\">vector_int3_precision.hpp:16</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00220.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00220_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a></td></tr>\n<tr class=\"memdesc:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of signed integer numbers.  <a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00220_source.html\">vector_int4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00220_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00220.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00221.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00221_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00221_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00221.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, highp&gt;              <a class=\"code\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga27fc23da61859cd6356326c5f1c796de\"><div class=\"ttname\"><a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">glm::lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, lowp &gt; lowp_ivec4</div><div class=\"ttdoc\">4 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00028\">vector_int4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gafb84dccdf5d82443df3ffc8428dcaf3e\"><div class=\"ttname\"><a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">glm::highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; highp_ivec4</div><div class=\"ttdoc\">4 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00016\">vector_int4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga92a204c37e66ac6c1dc7ae91142f2ea5\"><div class=\"ttname\"><a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">glm::mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, mediump &gt; mediump_ivec4</div><div class=\"ttdoc\">4 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00022\">vector_int4_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00222.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00222_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a> (vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</td></tr>\n<tr class=\"memdesc:gaff61eca266da315002a3db92ff0dd604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga354caf634ef333d9cb4844407416256a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354caf634ef333d9cb4844407416256a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gabb4360e38c0943d8981ba965dead519d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabba67f8aac9915e10fca727277274502\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">More...</a><br /></td></tr>\n<tr class=\"separator:gabba67f8aac9915e10fca727277274502\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00222_source.html\">vector_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00222_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00222.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Source, vec&lt;L, int, Q&gt; SignificantBitCount);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;vector_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00274_html_gabf2b61ded7049bcb13e25164f832a290\"><div class=\"ttname\"><a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">glm::isPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return true if the value is a power of two number. </div></div>\n<div class=\"ttc\" id=\"a00274_html_gabba67f8aac9915e10fca727277274502\"><div class=\"ttname\"><a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">glm::nextPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<div class=\"ttc\" id=\"a00274_html_gacda365edad320c7aff19cc283a3b8ca2\"><div class=\"ttname\"><a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">glm::nextMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00274_html_ga759db73f14d79f63612bd2398b577e7a\"><div class=\"ttname\"><a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">glm::prevPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00274_html_gaff61eca266da315002a3db92ff0dd604\"><div class=\"ttname\"><a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">glm::findNSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</div><div class=\"ttdoc\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00274_html_ga51e04379e8aebbf83e2e5ab094578ee9\"><div class=\"ttname\"><a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">glm::prevMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00274_html_gabb4360e38c0943d8981ba965dead519d\"><div class=\"ttname\"><a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">glm::isMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Return true if the &#39;Value&#39; is a multiple of &#39;Multiple&#39;. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00223.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_query.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_query.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00223_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are collinears.  <a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthogonals.  <a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthonormal.  <a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a each component of a vector is null.  <a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is normalized.  <a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is null.  <a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00223_source.html\">vector_query.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00223_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_query.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_query.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00223.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_query extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#include &quot;vector_query.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00368_html_gab4a3637dbcb4bb42dc55caea7a1e0495\"><div class=\"ttname\"><a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">glm::isNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a vector is null. </div></div>\n<div class=\"ttc\" id=\"a00368_html_ga13da4a787a2ff70e95d561fb19ff91b4\"><div class=\"ttname\"><a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">glm::areCollinear</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areCollinear(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are collinears. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gac3c974f459fd75453134fad7ae89a39e\"><div class=\"ttname\"><a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">glm::isNormalized</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a vector is normalized. </div></div>\n<div class=\"ttc\" id=\"a00368_html_ga1b091c3d7f9ee3b0708311c001c293e3\"><div class=\"ttname\"><a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">glm::areOrthonormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areOrthonormal(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are orthonormal. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gaf6ec1688eab7442fe96fe4941d5d4e76\"><div class=\"ttname\"><a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">glm::isCompNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isCompNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a each component of a vector is null. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gac7b95b3f798e3c293262b2bdaad47c57\"><div class=\"ttname\"><a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">glm::areOrthogonal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areOrthogonal(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are orthogonals. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00224.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/vector_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00224_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga4a99cc41341567567a608719449c1fac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a99cc41341567567a608719449c1fac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga417cf51304359db18e819dda9bce5767\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">More...</a><br /></td></tr>\n<tr class=\"separator:ga417cf51304359db18e819dda9bce5767\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> </p>\n<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>\n<dd>\n<a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00224_source.html\">ext/vector_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00224_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00224.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#include &quot;vector_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00275_html_ga0b15ffe32987a6029b14398eb0def01a\"><div class=\"ttname\"><a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00275_html_ga7da2b8605be7f245b39cb6fbf6d9d581\"><div class=\"ttname\"><a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00225.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00225_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if all components of x are true.  <a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if any component of x is true.  <a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">More...</a><br /></td></tr>\n<tr class=\"separator:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">More...</a><br /></td></tr>\n<tr class=\"separator:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise logical complement of x.  <a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<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.7 Vector Relational Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00225_source.html\">vector_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00225_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00225.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_vector_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00374_html_ga87e53f50b679f5f95c5cb4780311b3dd\"><div class=\"ttname\"><a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">glm::all</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns true if all components of x are true. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gadfdb8ea82deca869ddc7e63ea5a63ae4\"><div class=\"ttname\"><a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">glm::greaterThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x > y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><div class=\"ttname\"><a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x != y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gab0bdafc019d227257ff73fb5bcca1718\"><div class=\"ttname\"><a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">glm::lessThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x <= y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga610fcd175791fd246e328ffee10dbf1e\"><div class=\"ttname\"><a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">glm::not_</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; not_(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the component-wise logical complement of x. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga911b3f8e41459dd551ccb6d385d91061\"><div class=\"ttname\"><a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">glm::any</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns true if any component of x is true. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gab4c5cfdaa70834421397a85aa83ad946\"><div class=\"ttname\"><a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x == y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga859975f538940f8d18fe62f916b9abd7\"><div class=\"ttname\"><a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">glm::greaterThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x >= y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gae90ed1592c395f93e3f3dfce6b2f39c6\"><div class=\"ttname\"><a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">glm::lessThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison result of x < y. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00226.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00226_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3bdd96183d23876c58a1424585fefe7\"></a>\ntypedef vec&lt; 1, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a></td></tr>\n<tr class=\"memdesc:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00226_source.html\">vector_uint1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00226_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00226.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_uint1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, defaultp&gt;                  <a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00227.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00227_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a></td></tr>\n<tr class=\"memdesc:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00227_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00227.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_uint1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, highp&gt;                     <a class=\"code\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, mediump&gt;           <a class=\"code\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, lowp&gt;                      <a class=\"code\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00277_html_ga38fde73aaf1420175ece8d4882558a3f\"><div class=\"ttname\"><a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">glm::mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, mediump &gt; mediump_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00032\">vector_uint1_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_gacda57dd8c2bff4934c7f09ddd87c0f39\"><div class=\"ttname\"><a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">glm::highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, highp &gt; highp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00027\">vector_uint1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga8bf3fc8a7863d140f48b29341c750402\"><div class=\"ttname\"><a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">glm::lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, lowp &gt; lowp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00037\">vector_uint1_precision.hpp:37</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00228.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00228_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a></td></tr>\n<tr class=\"memdesc:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00228_source.html\">vector_uint2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00228_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00228.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00229.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00229_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga752ee45136011301b64afd8c310c47a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00229_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00229.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga752ee45136011301b64afd8c310c47a4\"><div class=\"ttname\"><a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">glm::lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, lowp &gt; lowp_uvec2</div><div class=\"ttdoc\">2 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00028\">vector_uint2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><div class=\"ttname\"><a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">glm::highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, highp &gt; highp_uvec2</div><div class=\"ttdoc\">2 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00016\">vector_uint2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><div class=\"ttname\"><a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">glm::mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, mediump &gt; mediump_uvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00022\">vector_uint2_precision.hpp:22</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00230.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00230_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a></td></tr>\n<tr class=\"memdesc:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00230_source.html\">vector_uint3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00230_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00230.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00231.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00231_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a></td></tr>\n<tr class=\"memdesc:gaef61508dd40ec523416697982f9ceaae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00231_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00231.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga83b7df38feefbb357f3673d950fafef7\"><div class=\"ttname\"><a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">glm::mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, mediump &gt; mediump_uvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00022\">vector_uint3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaef61508dd40ec523416697982f9ceaae\"><div class=\"ttname\"><a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">glm::highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, highp &gt; highp_uvec3</div><div class=\"ttdoc\">3 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00016\">vector_uint3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><div class=\"ttname\"><a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">glm::lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, lowp &gt; lowp_uvec3</div><div class=\"ttdoc\">3 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00028\">vector_uint3_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00232.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00232_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a></td></tr>\n<tr class=\"memdesc:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of unsigned integer numbers.  <a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00232_source.html\">vector_uint4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00232_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00232.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00233.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00233_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00233_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00233.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga64ed0deb6573375b7016daf82ffd53a7\"><div class=\"ttname\"><a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">glm::mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, mediump &gt; mediump_uvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00022\">vector_uint4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaeebd7dd9f3e678691f8620241e5f9221\"><div class=\"ttname\"><a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">glm::highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, highp &gt; highp_uvec4</div><div class=\"ttdoc\">4 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00016\">vector_uint4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><div class=\"ttname\"><a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">glm::lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, lowp &gt; lowp_uvec4</div><div class=\"ttdoc\">4 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00028\">vector_uint4_precision.hpp:28</a></div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00234.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00234_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>floatDistance</b> (vec&lt; L, float, Q &gt; const &amp;x, vec&lt; L, float, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a03f464c6a03a725ea18e72cf1ed31417\">More...</a><br /></td></tr>\n<tr class=\"separator:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int64, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>floatDistance</b> (vec&lt; L, double, Q &gt; const &amp;x, vec&lt; L, double, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#abe2040cbbe66a60cafb37f6155f78e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#adbd6e5dff9c0ae4567b3edd9019c1bee\">More...</a><br /></td></tr>\n<tr class=\"separator:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a92f82c4f45b5b43ccc29533990db079d\">More...</a><br /></td></tr>\n<tr class=\"separator:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a48e9b73c50fcf589e0032b8dbed9a3f9\">More...</a><br /></td></tr>\n<tr class=\"separator:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#a82d4ce132256c1a70d0e7100e6eae2e1\">More...</a><br /></td></tr>\n<tr class=\"separator:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ab818050036d40994346defe41a05b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a4ab818050036d40994346defe41a05b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a4ab818050036d40994346defe41a05b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a4ab818050036d40994346defe41a05b9\">More...</a><br /></td></tr>\n<tr class=\"separator:a4ab818050036d40994346defe41a05b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a569e3ce6771e1e4f9e425ec6d859d9f9\">More...</a><br /></td></tr>\n<tr class=\"separator:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00234_source.html\">vector_ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00234_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00234.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_ulp.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; floatDistance(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;L, int64, Q&gt; floatDistance(vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &quot;vector_ulp.inl&quot;</span></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00235.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: wrap.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">wrap.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00235_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_CLAMP OpenGL wrap mode.  <a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> </p>\n<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>\n\n<p>Definition in file <a class=\"el\" href=\"a00235_source.html\">wrap.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00235_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: wrap.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">wrap.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00235.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_wrap extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#include &quot;wrap.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00369_html_ga16a89b0661b60d5bea85137bbae74d73\"><div class=\"ttname\"><a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">glm::mirrorRepeat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType mirrorRepeat(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_ga809650c6310ea7c42666e918c117fb6f\"><div class=\"ttname\"><a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">glm::repeat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType repeat(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_gaa6856a0a048d2749252848da35e10c8b\"><div class=\"ttname\"><a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">glm::mirrorClamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType mirrorClamp(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_ga6c0cc6bd1d67ea1008d2592e998bad33\"><div class=\"ttname\"><a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType clamp(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_CLAMP OpenGL wrap mode. </div></div>\n<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>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00241.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Common functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Common functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL common functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">abs</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is greater than or equal to x.  <a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga7cd77683da6361e297c56443fc70806d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:gafba2e0674deb5953878d89483cd6323d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">floatBitsToInt</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">floatBitsToUint</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is less then or equal to x.  <a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a> (genType const &amp;a, genType const &amp;b, genType const &amp;c)</td></tr>\n<tr class=\"memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes and returns a * b + c.  <a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">fract</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2df623004f634b440d61e018d62c751b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df623004f634b440d61e018d62c751b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a> (genType x, int &amp;exp)</td></tr>\n<tr class=\"memdesc:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)  <a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">intBitsToFloat</a> (int const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a> (vec&lt; L, int, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2885587c23a106301f20443896365b62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885587c23a106301f20443896365b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga29ef934c00306490de837b4746b4e14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a> (genType const &amp;x, int const &amp;exp)</td></tr>\n<tr class=\"memdesc:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)  <a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">max</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac1fec0c3303b572a6d4697a637213870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">min</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>\n<tr class=\"memdesc:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.  <a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a> (genType x, genType &amp;i)</td></tr>\n<tr class=\"memdesc:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).  <a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga76b81785045a057989a84d99aeeb1578\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">More...</a><br /></td></tr>\n<tr class=\"separator:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.  <a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>\n<tr class=\"memdesc:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1.  <a href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">step</a> (genType edge, genType x)</td></tr>\n<tr class=\"memdesc:ga015a1261ff23e12650211aa872863cce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.  <a href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">More...</a><br /></td></tr>\n<tr class=\"separator:ga015a1261ff23e12650211aa872863cce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">step</a> (T edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a> (vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.  <a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">uintBitsToFloat</a> (uint const &amp;v)</td></tr>\n<tr class=\"memdesc:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a> (vec&lt; L, uint, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL common functions. </p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00015.html\" title=\"Core features \">glm/common.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga439e60a72eadecfeda2df5449c613a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::abs </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x if x &gt;= 0; otherwise, it returns -x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>floating-point or signed integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81d3abddd0ef0c8de579bc541ecadab6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::abs </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x if x &gt;= 0; otherwise, it returns -x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb9d2a645a23aca12d4d6de0104b7657\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceil </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer that is greater than or equal to x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml\">GLSL ceil man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cd77683da6361e297c56443fc70806d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<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>\n\n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00050\">glm::saturate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafba2e0674deb5953878d89483cd6323d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0f2f12e9108b09e22a3f0b2008a0b5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1425c1c3160ec51214b03a0469a3013d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::floatBitsToInt </td>\n          <td>(</td>\n          <td class=\"paramtype\">float const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a signed integer value representing the encoding of a floating-point value. </p>\n<p>The floating-point value's bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99f7d62f78ac5ea3b49bae715c9488ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::floatBitsToInt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a signed integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70e0271c34af52f3100c7960e18c3f2b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::floatBitsToUint </td>\n          <td>(</td>\n          <td class=\"paramtype\">float const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49418ba4c8a60fbbb5d57b705f3e26db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::floatBitsToUint </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9d0742639e85b29c7c5de11cfd6840d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer that is less then or equal to x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml\">GLSL floor man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0f444d4b81cc53c3b6edf5aa25078c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fma </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Computes and returns a * b + c. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml\">GLSL fma man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ba89e40e55ae5cdf228548f9b7639c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fract </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return x - floor(x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2df623004f634b440d61e018d62c751b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return x - floor(x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddf5ef73283c171730e0bcc11833fa81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::frexp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int &amp;&#160;</td>\n          <td class=\"paramname\"><em>exp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>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) </p>\n<p>The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml\">GLSL frexp man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::intBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">int const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::intBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2885587c23a106301f20443896365b62\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isinf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no infinity representations.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml\">GLSL isinf man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29ef934c00306490de837b4746b4e14d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isnan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no NaN representations.</p>\n<p>/!\\ When using compiler fast math, this function may fail.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3010e0a0c35a1b514540f2fb579c58c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::ldexp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int const &amp;&#160;</td>\n          <td class=\"paramname\"><em>exp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) </p>\n<p>If this product is too large to be represented in the floating-point type, the result is undefined.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml\">GLSL ldexp man page</a>; </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae02d42887fc5570451f880e3c624b9ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e45d6e60d1c36edb00c52edeea0f31\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1fec0c3303b572a6d4697a637213870\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6cf8098827054a270ee36b18e30d471d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7d015eba1f9f48519251f4abe69b14d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31f49ef9e7d1beb003160c5e009b0c48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e93f374aae27d1a88b921860351f8d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genTypeT glm::mix </td>\n          <td>(</td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeU&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>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. </p>\n<p>The value for a is not restricted to the range [0, 1].</p>\n<p>If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of 'a' that is false, the corresponding component of 'x' is returned. For a component of 'a' that is true, the corresponding component of 'y' is returned. Components of 'x' and 'y' that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml\">GLSL mix man page</a> </dd>\n<dd>\n<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>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">x</td><td>Value to interpolate. </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">y</td><td>Value to interpolate. </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">a</td><td>Interpolant.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genTypeT</td><td>Floating point scalar or vector. </td></tr>\n    <tr><td class=\"paramname\">genTypeU</td><td>Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.</td></tr>\n  </table>\n  </dd>\n</dl>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\">...</div>\n<div class=\"line\">float a;</div>\n<div class=\"line\"><span class=\"keywordtype\">bool</span> b;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> f;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> g;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> h;</div>\n<div class=\"line\">...</div>\n<div class=\"line\">glm::vec4 r = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, a); <span class=\"comment\">// Interpolate with a floating-point scalar two vectors.</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> s = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, b); <span class=\"comment\">// Returns g or h;</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> t = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(<a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, f, a); <span class=\"comment\">// Types of the third parameter is not required to match with the first and the second.</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> u = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, r); <span class=\"comment\">// Interpolations can be perform per component with a vector for the last parameter.</span></div>\n</div><!-- fragment --> \n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00041\">glm::lerp()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b197a452cd52db3c5c18bac72bd7798\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types, include glm/gtc/integer for integer scalar types support </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e33f139b8db1b39b590a5713b9e679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::modf </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>i</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). </p>\n<p>Both the return value and the output parameter will have the same sign as x.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml\">GLSL modf man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa03aca8c4713e1cc892aa92ca135a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::round </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga76b81785045a057989a84d99aeeb1578\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundEven </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml\">GLSL roundEven man page</a> </dd>\n<dd>\n<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>\n<dd>\n<a href=\"http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx\">New round to even technique</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e2e5cfff800056540e32f6c9b604b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sign </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml\">GLSL sign man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga562edf7eca082cc5b7a0aaf180436daf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::smoothstep </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1. </p>\n<p>This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 &gt;= edge1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml\">GLSL smoothstep man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga015a1261ff23e12650211aa872863cce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f9a911a48ef244b51654eaefc81c551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4a5fc81619c7d3e8b22f53d4a098c7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf9375e3e06173271d49e6ffa3a334259\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::trunc </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml\">GLSL trunc man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2bae0d15dcdca6093f88f76b3975d97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::uintBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97f46b5f7b42fe44482e13356eb394ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::uintBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00242.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Exponential functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Exponential functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL exponential functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural exponentiation of v, i.e., e^v.  <a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 2 raised to the v power.  <a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reciprocal of the positive square root of v.  <a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.  <a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.  <a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a> (vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</td></tr>\n<tr class=\"memdesc:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 'base' raised to the power 'exponent'.  <a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of v.  <a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL exponential functions. </p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00026.html\" title=\"Core features \">glm/exponential.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga071566cadc7505455e611f2a0353f4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::exp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the natural exponentiation of x, i.e., e^x. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml\">GLSL exp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaff17ace6b579a03bf223ed4d1ed2cd16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::exp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 2 raised to the v power. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml\">GLSL exp2 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::inversesqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the reciprocal of the positive square root of v. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml\">GLSL inversesqrt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga918c9f3fd086ce20e6760c903bd30fa9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y. </p>\n<p>Results are undefined if v &lt;= 0.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml\">GLSL log man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga82831c7d9cca777cebedfe03a19c8d75\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml\">GLSL log2 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2254981952d4f333b900a6bf5167a6c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>exponent</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 'base' raised to the power 'exponent'. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">base</td><td>Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n    <tr><td class=\"paramname\">exponent</td><td>Floating point value representing the 'exponent'.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml\">GLSL pow man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa83e5f1648b7ccdf33b87c07c76cb77c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of v. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml\">GLSL sqrt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00243.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_clip_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_clip_space<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions that generate clip space transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga259520cad03b3f8bca9417920035ed01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga94218b094862d17798370242680b9030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga94218b094862d17798370242680b9030\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94218b094862d17798370242680b9030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9236c8439f21be186b79c97b588836b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa73322e152edf50cf30a6edac342a757\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga44fa38a18349450325cae2661bb115ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.  <a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">ortho</a> (T left, T right, T bottom, T top)</td></tr>\n<tr class=\"memdesc:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for projecting two-dimensional coordinates onto the screen.  <a href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.  <a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab219d28a8f178d4517448fcd6395a073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">More...</a><br /></td></tr>\n<tr class=\"separator:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">More...</a><br /></td></tr>\n<tr class=\"separator:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a left handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gad18a4495b77530317327e8d466488c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad18a4495b77530317327e8d466488c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a right handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga257b733ff883c9a065801023cf243eb2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaead4d049d1feab463b700b5641aa590e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaca32af88c2719005c02817ad1142986c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca32af88c2719005c02817ad1142986c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf497e6bca61e7c87088370b126a93758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>\n<tr class=\"memdesc:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions that generate clip space transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00059.html\" title=\"GLM_EXT_matrix_clip_space \">glm/ext/matrix_clip_space.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00247.html\" title=\"Defines functions that generate common transformation matrices. \">GLM_EXT_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00245.html\" title=\"Functions that generate common projection transformation matrices. \">GLM_EXT_matrix_projection</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0bcd4542e0affc63a0b8c08fcb839ea9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustum </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml\">glFrustum man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4277c37f61d81da01bc9db14ea90296\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga259520cad03b3f8bca9417920035ed01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94218b094862d17798370242680b9030\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae34ec664ad44860bf4b5ba631f0e0e90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4366ab45880c6c5f8b3e8c371ca4b136\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9236c8439f21be186b79c97b588836b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7654a9227f14d5382786b9fc0eb5692d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa73322e152edf50cf30a6edac342a757\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44fa38a18349450325cae2661bb115ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3201b30f5b3ea0f933246d87bfb992a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspectiveLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99672ffe5714ef478dab2437255fe7e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspectiveRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5b6b40ed882cd56cd7cb97701909c06\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::ortho </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for projecting two-dimensional coordinates onto the screen. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; zNear, T const&amp; zFar) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluOrtho2D.xml\">gluOrtho2D man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6615d8a9d39432e279c4575313ecb456\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::ortho </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml\">glOrtho man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad122a79aadaa5529cec4ac197203db7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga526416735ea7c5c5cd255bf99d051bd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab37ac3eec8d61f22fceda7775e836afa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab219d28a8f178d4517448fcd6395a073\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16264c9b838edeb9dd1de7a1010a13a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2f7a1373170bf0a4a2ddef9b0706780\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9aea2e515b08fd7dce47b7b6ec34d588\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea11a70817af2c0801c869dea0b7a5bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga747c8cf99458663dd7ad1bb3a2f07787\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml\">gluPerspective man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebd02240fd36e85ad754f02ddd9a560d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFov </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6aebe16c164bd8e52554cbe0304ef4aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a left handed perspective projection matrix based on a field of view. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad18a4495b77530317327e8d466488c1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabdd37014f529e25b2fa1b3ba06c10d5c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf30e7bd3b1387a6776433dd5383e6633\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf32bf563f28379c68554a44ee60c6a85\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a right handed perspective projection matrix based on a field of view. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga257b733ff883c9a065801023cf243eb2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dcbb25331676f5b0795aced1a905c44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bc69fa1d1f95128430aa3d2a712390b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bd34951dc7022ac256fcb51d7f6fc2f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaead4d049d1feab463b700b5641aa590e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca32af88c2719005c02817ad1142986c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf497e6bca61e7c87088370b126a93758\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26b88757fbd90601b80768a7e1ad3aa1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1526cb2cbe796095284e8f34b01c582\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9dfba5c2322da54f72b1eb7c7c11b47\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::tweakedInfinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5b3c85ff6737030a1d2214474ffa7a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::tweakedInfinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>ep</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">ep</td><td>Epsilon</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00244.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions for common matrix operations.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions for common matrix operations. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00060.html\" title=\"GLM_EXT_matrix_common \">glm/ext/matrix_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00244.html\" title=\"Defines functions for common matrix operations. \">GLM_EXT_matrix_common</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00245.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_projection</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_projection<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Functions that generate common projection transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q, typename U &gt; </td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a> (vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define a picking region.  <a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf36e96033f456659e6705472a06b6e11\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.  <a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga05249751f48d14cb282e4979802b8111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05249751f48d14cb282e4979802b8111\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga77d157525063dec83a557186873ee080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77d157525063dec83a557186873ee080\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.  <a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gade5136413ce530f8e606124d570fba32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5136413ce530f8e606124d570fba32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Functions that generate common projection transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00105.html\" title=\"GLM_EXT_matrix_projection \">glm/ext/matrix_projection.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00247.html\" title=\"Defines functions that generate common transformation matrices. \">GLM_EXT_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00243.html\" title=\"Defines functions that generate clip space transformation matrices. \">GLM_EXT_matrix_clip_space</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf6b21eadb7ac2ecbbe258a9a233b4c82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::pickMatrix </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>delta</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Define a picking region. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">center</td><td>Specify the center of a picking region in window coordinates. </td></tr>\n    <tr><td class=\"paramname\">delta</td><td>Specify the width and height, respectively, of the picking region in window coordinates. </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Rendering viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPickMatrix.xml\">gluPickMatrix man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf36e96033f456659e6705472a06b6e11\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::project </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. </p>\n<p>To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05249751f48d14cb282e4979802b8111\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::projectNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga77d157525063dec83a557186873ee080\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::projectZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga36641e5d60f994e01c3d8f56b10263d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProject </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. </p>\n<p>To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae089ba9fc150ff69c252a20e508857b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProjectNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade5136413ce530f8e606124d570fba32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProjectZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00246.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for matrix types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise equal-to comparison of two matrices.  <a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga5305af376173f1902719fa309bbae671\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5305af376173f1902719fa309bbae671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise not-equal-to comparison of two matrices.  <a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga29071147d118569344d10944b7d5c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29071147d118569344d10944b7d5c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:gaa5517341754149ffba742d230afd1f32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5517341754149ffba742d230afd1f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for matrix types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00107.html\" title=\"GLM_EXT_matrix_relational \">glm/ext/matrix_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga27e90dcb7941c9b70e295dc3f6f6369f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Perform a component-wise equal-to comparison of two matrices. </p>\n<p>Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5d687d70d11708b68c36c6db5777040\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa6a053e81179fa4292b35651c83c3fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3a93f19e72e9141f50527c9de21d0c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5305af376173f1902719fa309bbae671\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8504f18a7e2bf315393032c2137dad83\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Perform a component-wise not-equal-to comparison of two matrices. </p>\n<p>Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29071147d118569344d10944b7d5c378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7959e14fbc35b4ed2617daf4d67f6cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1cd7fc228ef6e26c73583fd0d9c6552\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5517341754149ffba742d230afd1f32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00247.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions that generate common transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga81696f2b8d1db02ea1aff8da8f269314\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a> ()</td></tr>\n<tr class=\"memdesc:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an identity matrix. <br /></td></tr>\n<tr class=\"separator:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at view matrix based on the default handedness.  <a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left handed look at view matrix.  <a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right handed look at view matrix.  <a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gaee9e865eaa9776370996da2940873fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle.  <a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 4 * 4 matrix created from 3 scalars.  <a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions that generate common transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00108.html\" title=\"GLM_EXT_matrix_transform \">glm/ext/matrix_transform.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00245.html\" title=\"Functions that generate common projection transformation matrices. \">GLM_EXT_matrix_projection</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00243.html\" title=\"Defines functions that generate clip space transformation matrices. \">GLM_EXT_matrix_clip_space</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa64aa951a0e99136bba9008d2b59c78e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a look at view matrix based on the default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml\">gluLookAt man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2c09e25b0a16d3a9d89cc85bbae41b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAtLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a left handed look at view matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfa12c8889c754846bc20c65d9b5c701\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAtRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a right handed look at view matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee9e865eaa9776370996da2940873fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Rotation axis, recommended to be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- rotate(mat&lt;4, 4, T, Q&gt; const&amp; m, T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(T angle, vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glRotate.xml\">glRotate man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05051adbee603fb3c5095d8cf5cc229b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a scale 4 * 4 matrix created from 3 scalars. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this scale matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Ratio of scaling for each axis.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- scale(mat&lt;4, 4, T, Q&gt; const&amp; m, T x, T y, T z) </dd>\n<dd>\n- scale(vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glScale.xml\">glScale man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a4ecc4ad82652b8fb14dcb087879284\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a translation 4 * 4 matrix created from a vector of 3 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a translation vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00109.html\">glm/gtc/matrix_transform.hpp</a>&gt;</span></div>\n<div class=\"line\">...</div>\n<div class=\"line\">glm::mat4 m = <a class=\"code\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">glm::translate</a>(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a>(1.0f), <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a>(1.0f));</div>\n<div class=\"line\"><span class=\"comment\">// m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f</span></div>\n</div><!-- fragment --><dl class=\"section see\"><dt>See also</dt><dd>- translate(mat&lt;4, 4, T, Q&gt; const&amp; m, T x, T y, T z) </dd>\n<dd>\n- translate(vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml\">glTranslate man page</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00248.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides common functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q conjugate.  <a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab41da854ae678e23e114b598cbca4065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">More...</a><br /></td></tr>\n<tr class=\"separator:gab41da854ae678e23e114b598cbca4065\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga45722741ea266b4e861938b365c5f362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45722741ea266b4e861938b365c5f362\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Linear interpolation of two quaternions.  <a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gae7fc3c945be366b9942b842f55da428a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides common functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00127.html\" title=\"GLM_EXT_quaternion_common \">glm/ext/quaternion_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00258.html\" title=\"Exposes min and max functions for 3 to 4 scalar parameters. \">GLM_EXT_scalar_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00267.html\" title=\"Exposes min and max functions for 3 to 4 vector parameters. \">GLM_EXT_vector_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga10d7bda73201788ac2ab28cd8d0d409b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::conjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q conjugate. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab41da854ae678e23e114b598cbca4065\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q inverse. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45722741ea266b4e861938b365c5f362\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::isinf </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no infinity representations.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bb55f8963616502e96dc564384d8a03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::isnan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no NaN representations.</p>\n<p>/!\\ When using compiler fast math, this function may fail.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6033dc0741051fa463a0a147ba29f293\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::lerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Linear interpolation of two quaternions. </p>\n<p>The interpolation is oriented.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined in the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbfe587b8da11fb89a30c3d67dd5ccc2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::mix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Spherical linear interpolation of two quaternions. </p>\n<p>The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- slerp(qua&lt;T, Q&gt; const&amp; x, qua&lt;T, Q&gt; const&amp; y, T const&amp; a) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7fc3c945be366b9942b842f55da428a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::slerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Spherical linear interpolation of two quaternions. </p>\n<p>The interpolation always take the short path and the rotation is performed at constant speed.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00249.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_double</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_double<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point quaternion type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1181459aa5d640a3ea43861b118f3f0b\"></a>\ntypedef qua&lt; double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a></td></tr>\n<tr class=\"memdesc:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point quaternion type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00128.html\" title=\"GLM_EXT_quaternion_double \">glm/ext/quaternion_double.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00248.html\" title=\"Provides common functions for quaternion types. \">GLM_EXT_quaternion_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00250.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_double_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_double_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point quaternion type with various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a></td></tr>\n<tr class=\"memdesc:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a></td></tr>\n<tr class=\"memdesc:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a></td></tr>\n<tr class=\"memdesc:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point quaternion type with various precision in term of ULPs. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00129.html\" title=\"GLM_EXT_quaternion_double_precision \">glm/ext/quaternion_double_precision.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaf13a25f41afc03480b40fc71bd249cec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, highp &gt; highp_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e6e5f42e67dd5877350ba485c191f1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, lowp &gt; lowp_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacdf73b1f7fd8f5a0c79a3934e99c1a14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, mediump &gt; mediump_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00033\">33</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00251.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_exponential</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_exponential<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides exponential functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<p>Provides exponential functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00130.html\" title=\"GLM_EXT_quaternion_exponential \">glm/ext/quaternion_exponential.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_exponential </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00252.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_float</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_float<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point quaternion type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0b441adb4509bc58d2946c2239a8942\"></a>\ntypedef qua&lt; float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a></td></tr>\n<tr class=\"memdesc:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point quaternion type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00131.html\" title=\"GLM_EXT_quaternion_float \">glm/ext/quaternion_float.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00253.html\" title=\"Exposes single-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_float_precision</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00248.html\" title=\"Provides common functions for quaternion types. \">GLM_EXT_quaternion_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00253.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_float_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_float_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point quaternion type with various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa2fd8085774376310aeb80588e0eab6e\"></a>\ntypedef qua&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a></td></tr>\n<tr class=\"memdesc:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gade62c5316c1c11a79c34c00c189558eb\"></a>\ntypedef qua&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a></td></tr>\n<tr class=\"memdesc:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad2a59409de1bb12ccb6eb692ee7e9d8d\"></a>\ntypedef qua&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a></td></tr>\n<tr class=\"memdesc:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point quaternion type with various precision in term of ULPs. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00132.html\" title=\"GLM_EXT_quaternion_float_precision \">glm/ext/quaternion_float_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00254.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_geometric</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_geometric<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides geometric functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</td></tr>\n<tr class=\"memdesc:ga755beaa929c75751dee646cccba37e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product.  <a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...  <a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab703732449be6c7199369b3f9a91ed38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the norm of a quaternions.  <a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">More...</a><br /></td></tr>\n<tr class=\"separator:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides geometric functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00133.html\" title=\"GLM_EXT_quaternion_geometric \">glm/ext/quaternion_geometric.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_geometric </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga755beaa929c75751dee646cccba37e4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER qua&lt;T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84865a56acb8fbd7bc4f5c0b928e3cfc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::dot </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab703732449be6c7199369b3f9a91ed38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the norm of a quaternions. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf30e3263fffe8dcc6659aea76ae8927\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the normalized quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00255.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for quaternion types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">More...</a><br /></td></tr>\n<tr class=\"separator:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for quaternion types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00134.html\" title=\"GLM_EXT_quaternion_relational \">glm/ext/quaternion_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad7827af0549504ff1cd6a359786acc7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x == y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa001eecb91106463169a8e5ef1577b39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab441cee0de5867a868f3a586ee68cfe1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x != y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5117a44c1bf21af857cd23e44a96d313\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00256.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides transformation functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a exponential of a quaternion.  <a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a logarithm of a quaternion.  <a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a> (qua&lt; T, Q &gt; const &amp;q, T y)</td></tr>\n<tr class=\"memdesc:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a quaternion raised to a power.  <a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components axis and an angle.  <a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the square root of a quaternion.  <a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides transformation functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00135.html\" title=\"GLM_EXT_quaternion_transform \">glm/ext/quaternion_transform.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaab2d37ef7265819f1d2939b9dc2c52ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::exp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a exponential of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5f7b20e296671b16ce25a2ab7ad5473\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a logarithm of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4975ffcacd312a8c0bbd046a76c5607e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a quaternion raised to a power. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabfc57de6d4d2e11970f54119c5ccf0f5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a quaternion from a vector of 3 components axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">q</td><td>Source orientation </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Axis of the rotation</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64b7b255ed7bcba616fe6b44470b022e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the square root of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00257.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_trigonometric</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_trigonometric<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides trigonometric functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the quaternion rotation angle.  <a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a> (T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from an angle and a normalized axis.  <a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga764254f10248b505e936e5309a88c23d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q rotation axis.  <a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga764254f10248b505e936e5309a88c23d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides trigonometric functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00136.html\" title=\"GLM_EXT_quaternion_trigonometric \">glm/ext/quaternion_trigonometric.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8aa248b31d5ade470c87304df5eb7bd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::angle </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the quaternion rotation angle. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c0095cfcb218c75a4b79d7687950036\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::angleAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a quaternion from an angle and a normalized axis. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Axis of the quaternion, must be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga764254f10248b505e936e5309a88c23d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::axis </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q rotation axis. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00258.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes min and max functions for 3 to 4 scalar parameters.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga36920478565cf608e93064283ce06421\">fmax</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga36920478565cf608e93064283ce06421\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 2 inputs.  <a href=\"a00258.html#ga36920478565cf608e93064283ce06421\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36920478565cf608e93064283ce06421\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">fmax</a> (T a, T b, T C)</td></tr>\n<tr class=\"memdesc:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a> (T a, T b, T C, T D)</td></tr>\n<tr class=\"memdesc:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">fmin</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 2 inputs.  <a href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">fmin</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">max</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">min</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">More...</a><br /></td></tr>\n<tr class=\"separator:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes min and max functions for 3 to 4 scalar parameters. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00144.html\" title=\"GLM_EXT_scalar_common \">glm/ext/scalar_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00241.html\" title=\"Provides GLSL common functions. \">Common functions</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00267.html\" title=\"Exposes min and max functions for 3 to 4 vector parameters. \">GLM_EXT_vector_common</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga36920478565cf608e93064283ce06421\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 2 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0007bba71ca451ac70e99d28dfbeaab9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>C</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 3 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27e260b1ff4d04c3ad4b864d26cbaf08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>C</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>D</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 4 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2b438a765e2a62098c79eb212f28f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 2 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a95fe4cf5437e8133f1093fe9726a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 3 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 4 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa20839d9ab14514f8966f69877ea0de8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2274b5e75ed84b0b1e50d8d22f1f2f67\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga420b37cbd98c395b93dab0278305cd46\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d24a9acb8178df77e4aff90cbb2010d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00259.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_constants</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_constants<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides a list of constants and precomputed useful values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga2a1e57fc5592b69cfae84174cbfc9429\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a> ()</td></tr>\n<tr class=\"memdesc:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the epsilon constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga94bafeb2a0f23ab6450fed1f98ee4e45\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a> ()</td></tr>\n<tr class=\"memdesc:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the pi constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides a list of constants and precomputed useful values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00145.html\" title=\"GLM_EXT_scalar_constants \">glm/ext/scalar_constants.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00260.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_int_sized</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_int_sized<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes sized signed integer scalar types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga259fa4834387bd68627ddf37bb3ebdb9\"></a>\ntypedef detail::int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a></td></tr>\n<tr class=\"memdesc:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43d43196463bde49cb067f5c20ab8481\"></a>\ntypedef detail::int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a></td></tr>\n<tr class=\"memdesc:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaff5189f97f9e842d9636a0f240001b2e\"></a>\ntypedef detail::int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a></td></tr>\n<tr class=\"memdesc:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1b956fe1df85f3c132b21edb4e116458\"></a>\ntypedef detail::int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a></td></tr>\n<tr class=\"memdesc:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes sized signed integer scalar types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00146.html\" title=\"GLM_EXT_scalar_int_sized \">glm/ext/scalar_int_sized.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00263.html\" title=\"Exposes sized unsigned integer scalar types. \">GLM_EXT_scalar_uint_sized</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00261.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a> (genIUType x, int significantBitCount)</td></tr>\n<tr class=\"memdesc:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gadf491730354aa7da67fbe23d4d688763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">More...</a><br /></td></tr>\n<tr class=\"separator:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">More...</a><br /></td></tr>\n<tr class=\"separator:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2777901e41ad6e1e9d0ad6cc855d1075\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findNSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>significantBitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. </p>\n<p>If value bitcount is less than the Nth significant bit, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec593d33956a8fe43f78fccc63ddde9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf491730354aa7da67fbe23d4d688763\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the value is a power of two number. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab770a3835c44c8a6fd225be4f4e6b317\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a37c2f2fd347886c9af6a3ca3db04dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::nextPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3bdd871ffe31f2d484aa668362f636\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab21902a0e7e5a8451a7ad80333618727\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::prevPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00262.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for scalar types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<p>Exposes comparison functions for scalar types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00149.html\" title=\"GLM_EXT_scalar_relational \">glm/ext/scalar_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00263.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_uint_sized</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_uint_sized<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes sized unsigned integer scalar types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"></a>\ntypedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a></td></tr>\n<tr class=\"memdesc:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1134b580f8da4de94ca6b1de4d37975e\"></a>\ntypedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a></td></tr>\n<tr class=\"memdesc:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab630f76c26b50298187f7889104d4b9c\"></a>\ntypedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a></td></tr>\n<tr class=\"memdesc:gab630f76c26b50298187f7889104d4b9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadde6aaee8457bee49c2a92621fe22b79\"></a>\ntypedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a></td></tr>\n<tr class=\"memdesc:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes sized unsigned integer scalar types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00151.html\" title=\"GLM_EXT_scalar_uint_sized \">glm/ext/scalar_uint_sized.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00260.html\" title=\"Exposes sized signed integer scalar types. \">GLM_EXT_scalar_int_sized</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00264.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allow the measurement of the accuracy of a function against a reference implementation.  \n<a href=\"#details\">More...</a></p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. </p>\n<p>This extension works on floating-point data and provide results in ULP.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00152.html\" title=\"GLM_EXT_scalar_ulp \">glm/ext/scalar_ulp.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00278.html\" title=\"Allow the measurement of the accuracy of a function against a reference implementation. \">GLM_EXT_vector_ulp</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00265.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_bool1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_bool1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes bvec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga067af382616d93f8e850baae5154cdcc\"></a>\ntypedef vec&lt; 1, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a></td></tr>\n<tr class=\"memdesc:ga067af382616d93f8e850baae5154cdcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of boolean. <br /></td></tr>\n<tr class=\"separator:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes bvec1 vector type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00189.html\" title=\"GLM_EXT_vector_bool1 \">glm/ext/vector_bool1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00266.html\" title=\"Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. \">GLM_EXT_vector_bool1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00266.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_bool1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_bool1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a1e14abae1387274f57741750c06a2\"></a>\ntypedef vec&lt; 1, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae8a1e14abae1387274f57741750c06a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga24a3d364e2ddd444f5b9e7975bbef8f9\"></a>\ntypedef vec&lt; 1, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b4ccb989ba179fa44f7b0879c782621\"></a>\ntypedef vec&lt; 1, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00190.html\" title=\"GLM_EXT_vector_bool1_precision \">glm/ext/vector_bool1_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00267.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes min and max functions for 3 to 4 vector parameters.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, T b)</td></tr>\n<tr class=\"memdesc:gad66b6441f7200db16c9f341711733c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">More...</a><br /></td></tr>\n<tr class=\"separator:gad66b6441f7200db16c9f341711733c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gae989203363cff9eab5093630df4fe071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">More...</a><br /></td></tr>\n<tr class=\"separator:gae989203363cff9eab5093630df4fe071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga7e62739055b49189d9355471f78fe000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e62739055b49189d9355471f78fe000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">More...</a><br /></td></tr>\n<tr class=\"separator:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes min and max functions for 3 to 4 vector parameters. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00197.html\" title=\"GLM_EXT_vector_common \">glm/ext/vector_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_common </dd>\n<dd>\n<a class=\"el\" href=\"a00258.html\" title=\"Exposes min and max functions for 3 to 4 scalar parameters. \">GLM_EXT_scalar_common</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad66b6441f7200db16c9f341711733c56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8df4be3f48d6717c40ea788fd30deebf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f04ba924294dae4234ca93ede23229a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4ed3eb250ccbe17bfe8ded8a6b72d230\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae989203363cff9eab5093630df4fe071\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c42e93cd778c9181d1cdeea4d3e43bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e62739055b49189d9355471f78fe000\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a543dd7d22ad1f3b8b839f808a9d93c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa45d34f6a2906f8bf58ab2ba5429234d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94d42b8da2b4ded5ddf7504fbdc6bf10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3cd83d80fd4f433d8e333593ec56dddf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab66920ed064ab518d6859c5a889c4be4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00268.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_double1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_double1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point vector type with one component.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6221af17edc2d4477a4583d2cd53e569\"></a>\ntypedef vec&lt; 1, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a></td></tr>\n<tr class=\"memdesc:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point vector type with one component. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00198.html\" title=\"GLM_EXT_vector_double1 \">glm/ext/vector_double1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00269.html\" title=\"Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. \">GLM_EXT_vector_double1_precision</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00270.html\" title=\"Exposes single-precision floating point vector type with one component. \">GLM_EXT_vector_float1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00269.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_double1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_double1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga77c22c4426da3a6865c88d3fc907e3fe\"></a>\ntypedef vec&lt; 1, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf906eb86b6e96c35138d0e4928e1435a\"></a>\ntypedef vec&lt; 1, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a789ebb176b37a45848f7ccdd3b3dd\"></a>\ntypedef vec&lt; 1, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00199.html\" title=\"GLM_EXT_vector_double1_precision \">glm/ext/vector_double1_precision.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00268.html\" title=\"Exposes double-precision floating point vector type with one component. \">GLM_EXT_vector_double1</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00270.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_float1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_float1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point vector type with one component.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadfc071d934d8dae7955a1d530a3cf656\"></a>\ntypedef vec&lt; 1, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a></td></tr>\n<tr class=\"memdesc:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point vector type with one component. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00206.html\" title=\"GLM_EXT_vector_float1 \">glm/ext/vector_float1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00271.html\" title=\"Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. \">GLM_EXT_vector_float1_precision</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00268.html\" title=\"Exposes double-precision floating point vector type with one component. \">GLM_EXT_vector_double1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00271.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_float1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_float1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e8ed21862a897c156c0b2abca70b1e9\"></a>\ntypedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a57630f03031706b1d26a7d70d9184c\"></a>\ntypedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga645f53e6b8056609023a894b4e2beef4\"></a>\ntypedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00207.html\" title=\"GLM_EXT_vector_float1_precision \">glm/ext/vector_float1_precision.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00270.html\" title=\"Exposes single-precision floating point vector type with one component. \">GLM_EXT_vector_float1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00272.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_int1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_int1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes ivec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaedd0562c2e77714929d7723a7e2e0dba\"></a>\ntypedef vec&lt; 1, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a></td></tr>\n<tr class=\"memdesc:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes ivec1 vector type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00214.html\" title=\"GLM_EXT_vector_int1 \">glm/ext/vector_int1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00276.html\" title=\"Exposes uvec1 vector type. \">GLM_EXT_vector_uint1</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00273.html\" title=\"Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. \">GLM_EXT_vector_int1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00273.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_int1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_int1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e02566f2bd2caa68e61be45a477c77e\"></a>\ntypedef vec&lt; 1, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga836dbb1dc516c233b7f5fe9763bc15dc\"></a>\ntypedef vec&lt; 1, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad628c608970b3d0aa6cfb63ce6e53e56\"></a>\ntypedef vec&lt; 1, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00215.html\" title=\"GLM_EXT_vector_int1_precision \">glm/ext/vector_int1_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00274.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a> (vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</td></tr>\n<tr class=\"memdesc:gaff61eca266da315002a3db92ff0dd604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga354caf634ef333d9cb4844407416256a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354caf634ef333d9cb4844407416256a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gabb4360e38c0943d8981ba965dead519d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabba67f8aac9915e10fca727277274502\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">More...</a><br /></td></tr>\n<tr class=\"separator:gabba67f8aac9915e10fca727277274502\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaff61eca266da315002a3db92ff0dd604\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findNSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Source</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt;&#160;</td>\n          <td class=\"paramname\"><em>SignificantBitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. </p>\n<p>If value bitcount is less than the Nth significant bit, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga354caf634ef333d9cb4844407416256a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb4360e38c0943d8981ba965dead519d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf2b61ded7049bcb13e25164f832a290\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the value is a power of two number. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace38d00601cbf49cd4dc03f003ab42b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacda365edad320c7aff19cc283a3b8ca2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabba67f8aac9915e10fca727277274502\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b3915a7cd3d50ff4976ab7a75a6880a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51e04379e8aebbf83e2e5ab094578ee9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga759db73f14d79f63612bd2398b577e7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00275.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for vector types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga4a99cc41341567567a608719449c1fac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a99cc41341567567a608719449c1fac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga417cf51304359db18e819dda9bce5767\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">More...</a><br /></td></tr>\n<tr class=\"separator:ga417cf51304359db18e819dda9bce5767\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for vector types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00224.html\" title=\"GLM_EXT_vector_relational \">glm/ext/vector_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2ac7651a2fa7354f2da610dbd50d28e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga37d261a65f69babc82cec2ae1af7145f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b46cb50911e97b32f4cd743c2c69771\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7da2b8605be7f245b39cb6fbf6d9d581\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a99cc41341567567a608719449c1fac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga417cf51304359db18e819dda9bce5767\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b5c2c3f83422ae5b71fa960d03b0339\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b15ffe32987a6029b14398eb0def01a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00276.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_uint1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_uint1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes uvec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3bdd96183d23876c58a1424585fefe7\"></a>\ntypedef vec&lt; 1, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a></td></tr>\n<tr class=\"memdesc:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes uvec1 vector type. </p>\n<p>Include &lt;glm/ext/vector_uvec1.hpp&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00272.html\" title=\"Exposes ivec1 vector type. \">GLM_EXT_vector_int1</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00277.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_uint1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_uint1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a></td></tr>\n<tr class=\"memdesc:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00227.html\" title=\"GLM_EXT_vector_uint1_precision \">glm/ext/vector_uint1_precision.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gacda57dd8c2bff4934c7f09ddd87c0f39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, highp &gt; highp_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00027\">27</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8bf3fc8a7863d140f48b29341c750402\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, lowp &gt; lowp_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38fde73aaf1420175ece8d4882558a3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, mediump &gt; mediump_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00278.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allow the measurement of the accuracy of a function against a reference implementation.  \n<a href=\"#details\">More...</a></p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. </p>\n<p>This extension works on floating-point data and provide results in ULP.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00234.html\" title=\"GLM_EXT_vector_ulp \">glm/ext/vector_ulp.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00264.html\" title=\"Allow the measurement of the accuracy of a function against a reference implementation. \">GLM_EXT_scalar_ulp</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00279.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Geometric functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Geometric functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>These operate on vectors as vectors, not component-wise.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).  <a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the dot product of x and y, i.e., result = x * y.  <a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a> (vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</td></tr>\n<tr class=\"memdesc:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N.  <a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the length of x, i.e., sqrt(x * x).  <a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a vector in the same direction as x but with length of 1.  <a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</td></tr>\n<tr class=\"memdesc:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.  <a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</td></tr>\n<tr class=\"memdesc:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.  <a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>These operate on vectors as vectors, not component-wise. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00036.html\" title=\"Core features \">glm/geometric.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaeeec0794212fe84fc9d261de067c9587\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the cross product of x and y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml\">GLSL cross man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa68de6c53e20dfb2dac2d20197562e3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::distance </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml\">GLSL distance man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaad6c5d9d39bdc0bf43baf1b22e147a0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::dot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the dot product of x and y, i.e., result = x * y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml\">GLSL dot man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7aed0a36c738169402404a3a5d54e43b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::faceforward </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Nref</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml\">GLSL faceforward man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cdabbb000834d994a1d6dc56f8f5263\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the length of x, i.e., sqrt(x * x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml\">GLSL length man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b8d3dcae77870781392ed2902cce597\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a vector in the same direction as x but with length of 1. </p>\n<p>According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml\">GLSL normalize man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5631dd1d5618de5450b1ea3cf3e94905\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::reflect </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml\">GLSL reflect man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01da3dff9e2ef6b9d4915c3047e22b74\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::refract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>eta</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml\">GLSL refract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00280.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Core features</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Core features</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Features that implement in C++ the GLSL specification as closely as possible.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html\">Common functions</a></td></tr>\n<tr class=\"memdesc:a00241\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL common functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00242\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html\">Exponential functions</a></td></tr>\n<tr class=\"memdesc:a00242\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL exponential functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00279\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html\">Geometric functions</a></td></tr>\n<tr class=\"memdesc:a00279\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">These operate on vectors as vectors, not component-wise. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00281\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html\">Vector types</a></td></tr>\n<tr class=\"memdesc:a00281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector types of two to four components with an exhaustive set of operators. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00282\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html\">Vector types with precision qualifiers</a></td></tr>\n<tr class=\"memdesc:a00282\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector types with precision qualifiers which may result in various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html\">Matrix types</a></td></tr>\n<tr class=\"memdesc:a00283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html\">Matrix types with precision qualifiers</a></td></tr>\n<tr class=\"memdesc:a00284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Matrix types with precision qualifiers which may result in various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00370\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html\">Integer functions</a></td></tr>\n<tr class=\"memdesc:a00370\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL functions on integer types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00371\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html\">Matrix functions</a></td></tr>\n<tr class=\"memdesc:a00371\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL matrix functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00372\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html\">Floating-Point Pack and Unpack Functions</a></td></tr>\n<tr class=\"memdesc:a00372\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00373\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html\">Angle and Trigonometry Functions</a></td></tr>\n<tr class=\"memdesc:a00373\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function parameters specified as angle are assumed to be in units of radians. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html\">Vector Relational Functions</a></td></tr>\n<tr class=\"memdesc:a00374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Features that implement in C++ the GLSL specification as closely as possible. </p>\n<p>The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions.</p>\n<p>The best documentation for GLM Core is the current GLSL specification, <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf\">version 4.2 (pdf file)</a>.</p>\n<p>GLM core functionalities require &lt;<a class=\"el\" href=\"a00037.html\" title=\"Core features \">glm/glm.hpp</a>&gt; to be included to be used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga2c27aea32de57d58aec8e92d5d2181e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00088_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00088_source.html\">matrix_float3x2.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00281.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector types</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector types<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Vector types of two to four components with an exhaustive set of operators.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a></td></tr>\n<tr class=\"memdesc:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of boolean.  <a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a></td></tr>\n<tr class=\"memdesc:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of boolean.  <a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a></td></tr>\n<tr class=\"memdesc:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of boolean.  <a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a></td></tr>\n<tr class=\"memdesc:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a></td></tr>\n<tr class=\"memdesc:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a></td></tr>\n<tr class=\"memdesc:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a></td></tr>\n<tr class=\"memdesc:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of signed integer numbers.  <a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a></td></tr>\n<tr class=\"memdesc:gad0d784d8eee201aca362484d2daee46c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of signed integer numbers.  <a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a></td></tr>\n<tr class=\"memdesc:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of signed integer numbers.  <a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a></td></tr>\n<tr class=\"memdesc:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a></td></tr>\n<tr class=\"memdesc:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a></td></tr>\n<tr class=\"memdesc:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of unsigned integer numbers.  <a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a></td></tr>\n<tr class=\"memdesc:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a></td></tr>\n<tr class=\"memdesc:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a></td></tr>\n<tr class=\"memdesc:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Vector types of two to four components with an exhaustive set of operators. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga0b6123e03653cc1bbe366fc55238a934\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, defaultp &gt; bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of boolean. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00191_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00191_source.html\">vector_bool2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga197151b72dfaf289daf98b361760ffe7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, defaultp &gt; bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of boolean. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00193_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00193_source.html\">vector_bool3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f7b9712373ff4342d9114619b55f5e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, defaultp &gt; bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of boolean. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00195_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00195_source.html\">vector_bool4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b09c71aaac7da7867ae58377fe219a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, defaultp &gt; dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of double-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00200_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00200_source.html\">vector_double2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b83ae3d0fdec519c038e4d2cf967cf0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, defaultp &gt; dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of double-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00202_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00202_source.html\">vector_double3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57debab5d98ce618f7b2a97fe26eb3ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, defaultp &gt; dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of double-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00204_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00204_source.html\">vector_double4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6f9269106d91b2d2b91bcf27cd5f5560\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, defaultp &gt; ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00216_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00216_source.html\">vector_int2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0d784d8eee201aca362484d2daee46c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, defaultp &gt; ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00218_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00218_source.html\">vector_int3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5abb4603dae0ce58c595e66d9123d812\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, defaultp &gt; ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00220_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00220_source.html\">vector_int4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f6d9ec3ae14813ade37d6aee3715fdb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, defaultp &gt; uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00228_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00228_source.html\">vector_uint2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d3e55874babd4bf93baa7bbc83ae418\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, defaultp &gt; uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00230_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00230_source.html\">vector_uint3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa57e96bb337867329d5f43bcc27c1095\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, defaultp &gt; uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00232_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00232_source.html\">vector_uint4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe65c061834f61b4f7cb6037b19006a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, defaultp &gt; vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of single-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00208_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00208_source.html\">vector_float2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9c3019b13faf179e4ad3626ea66df334\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, defaultp &gt; vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of single-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00210_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00210_source.html\">vector_float3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac215a35481a6597d1bf622a382e9d6e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, defaultp &gt; vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of single-precision floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00212_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00212_source.html\">vector_float4.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00282.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector types with precision qualifiers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector types with precision qualifiers<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Vector types with precision qualifiers which may result in various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac6c781a85f012d77a75310a3058702c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a></td></tr>\n<tr class=\"memdesc:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee663ff64429443ab07a5327074192f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaee663ff64429443ab07a5327074192f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee663ff64429443ab07a5327074192f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">More...</a><br /></td></tr>\n<tr class=\"separator:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">More...</a><br /></td></tr>\n<tr class=\"separator:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a></td></tr>\n<tr class=\"memdesc:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">More...</a><br /></td></tr>\n<tr class=\"separator:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a></td></tr>\n<tr class=\"memdesc:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a></td></tr>\n<tr class=\"memdesc:gaef61508dd40ec523416697982f9ceaae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a></td></tr>\n<tr class=\"memdesc:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a></td></tr>\n<tr class=\"memdesc:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a></td></tr>\n<tr class=\"memdesc:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a5452140650988b94d5716e4d872465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga5a5452140650988b94d5716e4d872465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a5452140650988b94d5716e4d872465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga752ee45136011301b64afd8c310c47a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">More...</a><br /></td></tr>\n<tr class=\"separator:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a></td></tr>\n<tr class=\"memdesc:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0be2c682258604a35004f088782a9645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga0be2c682258604a35004f088782a9645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0be2c682258604a35004f088782a9645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga23a8bca00914a51542bfea13a4778186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">More...</a><br /></td></tr>\n<tr class=\"separator:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57496299d276ed97044074097bd5e2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gac57496299d276ed97044074097bd5e2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac57496299d276ed97044074097bd5e2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a></td></tr>\n<tr class=\"memdesc:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2384e263df19f1404b733016eff78fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga2384e263df19f1404b733016eff78fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2384e263df19f1404b733016eff78fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Vector types with precision qualifiers which may result in various precision in term of ULPs. </p>\n<p>GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.</p>\n<p>C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.</p>\n<p>None of these types make any guarantees about the actual qualifier used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gac6c781a85f012d77a75310a3058702c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, highp &gt; highp_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaedb70027d89a0a405046aefda4eabaa6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, highp &gt; highp_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee663ff64429443ab07a5327074192f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, highp &gt; highp_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab98d77cca255914f5e29697fcbc2d975\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, highp &gt; highp_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high double-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab24dc20dcdc5b71282634bdbf6b70105\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, highp &gt; highp_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00017\">17</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab654f4ed4a99d64a6cfc65320c2a7590\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, highp &gt; highp_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00018\">18</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa18f6b80b41c214f10666948539c1f93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, highp &gt; highp_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dd782c3ef5719bc6d5c3ca826b8ad18\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, highp &gt; highp_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb84dccdf5d82443df3ffc8428dcaf3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, highp &gt; highp_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad5dd50da9e37387ca6b4e6f9c80fe6f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, highp &gt; highp_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef61508dd40ec523416697982f9ceaae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, highp &gt; highp_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeebd7dd9f3e678691f8620241e5f9221\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, highp &gt; highp_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa92c1954d71b1e7914874bd787b43d1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, highp &gt; highp_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca61dfaccbf2f58f2d8063a4e76b44a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, highp &gt; highp_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad281decae52948b82feb3a9db8f63a7b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, highp &gt; highp_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a5452140650988b94d5716e4d872465\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, lowp &gt; lowp_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga79e0922a977662a8fd39d7829be3908b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, lowp &gt; lowp_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15ac87724048ab7169bb5d3572939dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, lowp &gt; lowp_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga108086730d086b7f6f7a033955dfb9c3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, lowp &gt; lowp_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low double-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42c518b2917e19ce6946a84c64a3a4b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, lowp &gt; lowp_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00031\">31</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b4432cb8d910e406576d10d802e190d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, lowp &gt; lowp_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8433c6c1fdd80c0a83941d94aff73fa0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, lowp &gt; lowp_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1a86a75b3c68ebb704d7094043669d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, lowp &gt; lowp_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27fc23da61859cd6356326c5f1c796de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, lowp &gt; lowp_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga752ee45136011301b64afd8c310c47a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, lowp &gt; lowp_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, lowp &gt; lowp_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, lowp &gt; lowp_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30e8baef5d56d5c166872a2bc00f36e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, lowp &gt; lowp_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga868e8e4470a3ef97c7ee3032bf90dc79\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, lowp &gt; lowp_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace3acb313c800552a9411953eb8b2ed7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, lowp &gt; lowp_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e743764869efa9223c2bcefccedaddc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, mediump &gt; mediump_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50c783c25082882ef00fe2e5cddba4aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, mediump &gt; mediump_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0be2c682258604a35004f088782a9645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, mediump &gt; mediump_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier bool numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f4f6e9a69a0281d06940fd0990cafc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, mediump &gt; mediump_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium double-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61c3b1dff4ec7c878af80503141b9f37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, mediump &gt; mediump_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00024\">24</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga23a8bca00914a51542bfea13a4778186\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, mediump &gt; mediump_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00025\">25</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac57496299d276ed97044074097bd5e2c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, mediump &gt; mediump_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27cfb51e0dbe15bba27a14a8590e8466\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, mediump &gt; mediump_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92a204c37e66ac6c1dc7ae91142f2ea5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, mediump &gt; mediump_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier signed integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3b4f7806dad03d83bb3da0baa1e3b9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, mediump &gt; mediump_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83b7df38feefbb357f3673d950fafef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, mediump &gt; mediump_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64ed0deb6573375b7016daf82ffd53a7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, mediump &gt; mediump_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier unsigned integer numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc61976261c406520c7a8e4d946dc3f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, mediump &gt; mediump_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2384e263df19f1404b733016eff78fca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, mediump &gt; mediump_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c6978d3ffba06738416a33083853fc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, mediump &gt; mediump_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium single-qualifier floating-point numbers. </p>\n<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 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00283.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix types</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix types<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a></td></tr>\n<tr class=\"memdesc:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaef2198807e937072803ae0ae45e1965e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a></td></tr>\n<tr class=\"memdesc:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">More...</a><br /></td></tr>\n<tr class=\"separator:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">More...</a><br /></td></tr>\n<tr class=\"separator:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a></td></tr>\n<tr class=\"memdesc:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacd18864049f8c83799babe7e596ca05b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a></td></tr>\n<tr class=\"memdesc:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a></td></tr>\n<tr class=\"memdesc:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a></td></tr>\n<tr class=\"memdesc:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a></td></tr>\n<tr class=\"memdesc:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab91887d7565059dac640e3a1921c914a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a></td></tr>\n<tr class=\"memdesc:gab91887d7565059dac640e3a1921c914a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab91887d7565059dac640e3a1921c914a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a></td></tr>\n<tr class=\"memdesc:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a></td></tr>\n<tr class=\"memdesc:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">More...</a><br /></td></tr>\n<tr class=\"separator:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a></td></tr>\n<tr class=\"memdesc:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a></td></tr>\n<tr class=\"memdesc:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a></td></tr>\n<tr class=\"memdesc:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. </p>\n<p>These types have exhaustive sets of operators. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga21dbd1f987775d7cc7607c139531c7e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00063_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66b6a9af787e468a46dfe24189e87f9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, defaultp &gt; dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00063_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92cd388753d48e20de69ea2dbedf826a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, defaultp &gt; dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00065_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00065_source.html\">matrix_double2x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef2198807e937072803ae0ae45e1965e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, defaultp &gt; dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00067_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00067_source.html\">matrix_double2x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6f40aa56265b4b0ccad41b86802efe33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00071_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga001e3e0638fbf8719788fc64c5b8cf39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, defaultp &gt; dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00069_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00069_source.html\">matrix_double3x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga970cb3306be25a5ca5db5a9456831228\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, defaultp &gt; dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00071_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0412a634d183587e6188e9b11869f8f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, defaultp &gt; dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00073_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00073_source.html\">matrix_double3x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f34486bb7fec8e5a5b3830b6a6cbeca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00079_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, defaultp &gt; dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00075_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00075_source.html\">matrix_double4x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd18864049f8c83799babe7e596ca05b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, defaultp &gt; dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00077_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00077_source.html\">matrix_double4x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad5a6484b983b74f9d801cab8bc4e6a10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, defaultp &gt; dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00079_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dd59e7fc6913ac5d61b86553e9148ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00082_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaa17ef6bfa4e4f2692348b1460c8efcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00082_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga493ab21243abe564b3f7d381e677d29a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00084_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00084_source.html\">matrix_float2x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e879b57ddd81e5bf5a88929844e8b40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00086_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00086_source.html\">matrix_float2x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefb0fc7a4960b782c18708bb6b655262\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00090_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab91887d7565059dac640e3a1921c914a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00090_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf991cad0b34f64e33af186326dbc4d66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00092_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00092_source.html\">matrix_float3x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0db98d836c5549d31cf64ecd043b7af7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00098_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad941c947ad6cdd117a0e8554a4754983\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00094_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00094_source.html\">matrix_float4x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7574544bb94777bdbd2eb224eb72fd0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00096_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00096_source.html\">matrix_float4x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2d35cc2655f44d60958d60a1de34e81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<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 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00098_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00284.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix types with precision qualifiers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix types with precision qualifiers<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Matrix types with precision qualifiers which may result in various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga945254f459860741138bceb74da496b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga945254f459860741138bceb74da496b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga945254f459860741138bceb74da496b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga4d5a0055544a516237dcdace049b143d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a></td></tr>\n<tr class=\"memdesc:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a></td></tr>\n<tr class=\"memdesc:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gac017848a9df570f60916a21a297b1e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga382dc5295cead78766239a8457abfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga382dc5295cead78766239a8457abfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga382dc5295cead78766239a8457abfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a></td></tr>\n<tr class=\"memdesc:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">More...</a><br /></td></tr>\n<tr class=\"separator:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2dedee030500865267cd5851c00c139d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2dedee030500865267cd5851c00c139d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2dedee030500865267cd5851c00c139d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6205fd19be355600334edef6af0b27cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga685bda24922d112786af385deb4deb43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga685bda24922d112786af385deb4deb43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga685bda24922d112786af385deb4deb43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">More...</a><br /></td></tr>\n<tr class=\"separator:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga497d513d552d927537d61fa11e3701ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga5aae49834d02732942f44e61d7bce136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">More...</a><br /></td></tr>\n<tr class=\"separator:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga15bca2b70917d9752231160d9da74b01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Matrix types with precision qualifiers which may result in various precision in term of ULPs. </p>\n<p>GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.</p>\n<p>C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.</p>\n<p>None of these types make any guarantees about the actual qualifier used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga369b447bb1b312449b679ea1f90f3cea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, highp &gt; highp_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae27ac20302c2e39b6c78e7fe18e62ef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4689ec33bc2c26e10132b174b49001a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ceeb46670fdc000a0701910cc5061c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86d6d4dbad92ffdcc759773340e15a97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, highp &gt; highp_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3647309010a2160e9ec89bc6f7c95c35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae367ea93c4ad8a7c101dd27b8b2b04ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6543eeeb64f48d79a0b96484308c50f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga945254f459860741138bceb74da496b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, highp &gt; highp_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeda1f474c668eaecc443bea85a4a4eca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf237c2d8832fe8db2d7e187585d34bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga118d24a3d12c034e7cccef7bf2f01b8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4d5a0055544a516237dcdace049b143d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2352ae43b284c9f71446674c0208c05d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a0e3fe41512b0494e598f5c58722f19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3fd9849f3da5ed6e3decc3fb10a20b3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1eda47a00027ec440eac05d63739c71b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ea82e12f4d7afcfce8f59894d400230\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6454b3a26ea30f69de8e44c08a63d1b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad72e13d669d039f12ae5afa23148adc1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab68b66e6d2c37b804d0baf970fa4f0e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d5a4e65fb976e4553b84995b95ecb38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58cc504be0e3b61c48bc91554a767b9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8e2727a6e7aa68280245bb0022118e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, lowp &gt; lowp_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61b94f5d9775f83f321bac899322fe2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6bf2f5bde7ad5b9c289f777b93094af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97507a31ecee8609887d0f23bbde92c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cab80beee64a5f8d2ae4e823983063a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, lowp &gt; lowp_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e0ea3fba496bc7c6f620d2590acb66b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac017848a9df570f60916a21a297b1e8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93add35d2a44c5830978b827e8c295e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga708bc5b91bbfedd21debac8dcf2a64cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, lowp &gt; lowp_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga382dc5295cead78766239a8457abfa98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b0413198b7e9f061f7534a221c9dac9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae400c4ce1f5f3e1fa12861b2baed331a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2df7cdaf9a571ce7a1b09435f502c694\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3eee3a74d0f1de8635d846dfb29ec4bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade27f8324a16626cbce5d3e7da66b070\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6271ebc85ed778ccc15458c3d86fc854\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabf6cf90fd31efe25c94965507e98390\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63362cb4a63fc1be7d2e49cd5d574c84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac5fc6786688eff02904ca5e7d6960092\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2dedee030500865267cd5851c00c139d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga534c3ef5c3b8fdd8656b6afc205b4b77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga686468a9a815bd4db8cddae42a6d6b87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6205fd19be355600334edef6af0b27cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, mediump &gt; mediump_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51dc36a7719cb458fa5114831c20d64f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga741e05adf1f12d5d913f67088db1009a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga685bda24922d112786af385deb4deb43\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga939fbf9c53008a8e84c7dd7cf8de29e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, mediump &gt; mediump_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2076157df85e49b8c021e03e46a376c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga47bd2aae4701ee2fc865674a9df3d7a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a132bd05675c2e46556f67cf738600b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf650bc667bf2a0e496b5a9182bc8d378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, mediump &gt; mediump_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae220fa4c5a7b13ef2ab0420340de645c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43ef60e4d996db15c9c8f069a96ff763\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5389b3ab32dc0d72bea00057ab6d1dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga745452bd9c89f5ad948203e4fb4b4ea3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cdf57d29f9448864237b2fb3e39aa1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga497d513d552d927537d61fa11e3701ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7b75ea2e09fa686a79bbe9b6ca68ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5aae49834d02732942f44e61d7bce136\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e1c9ee65fef547bde793e69723e24eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc0f2f4ad21c90b341881cf056f8650e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa669c6675c3405f76c0b14020d1c0d61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8531bc3f269aa45835cd6e1972b7fc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad75706b70545412ba9ac27d5ee210f66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a1440b5ea3cf84d5b06c79b534bd770\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15bca2b70917d9752231160d9da74b01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<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 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00285.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Stable extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Stable extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Additional features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00243\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a></td></tr>\n<tr class=\"memdesc:a00243\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions that generate clip space transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00244\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a></td></tr>\n<tr class=\"memdesc:a00244\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions for common matrix operations. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a></td></tr>\n<tr class=\"memdesc:a00245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Functions that generate common projection transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00246\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a></td></tr>\n<tr class=\"memdesc:a00246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for matrix types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a></td></tr>\n<tr class=\"memdesc:a00247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions that generate common transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00248\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a></td></tr>\n<tr class=\"memdesc:a00248\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides common functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point quaternion type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00250\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a></td></tr>\n<tr class=\"memdesc:a00250\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point quaternion type with various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a></td></tr>\n<tr class=\"memdesc:a00251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides exponential functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00252\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a></td></tr>\n<tr class=\"memdesc:a00252\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point quaternion type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00253\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a></td></tr>\n<tr class=\"memdesc:a00253\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point quaternion type with various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00254\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a></td></tr>\n<tr class=\"memdesc:a00254\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides geometric functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00255\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a></td></tr>\n<tr class=\"memdesc:a00255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for quaternion types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00256\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a></td></tr>\n<tr class=\"memdesc:a00256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides transformation functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00257\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a></td></tr>\n<tr class=\"memdesc:a00257\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides trigonometric functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00258\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a></td></tr>\n<tr class=\"memdesc:a00258\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes min and max functions for 3 to 4 scalar parameters. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a></td></tr>\n<tr class=\"memdesc:a00259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides a list of constants and precomputed useful values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a></td></tr>\n<tr class=\"memdesc:a00260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes sized signed integer scalar types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00261\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a></td></tr>\n<tr class=\"memdesc:a00261\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a></td></tr>\n<tr class=\"memdesc:a00262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for scalar types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00263\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a></td></tr>\n<tr class=\"memdesc:a00263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes sized unsigned integer scalar types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00264\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a></td></tr>\n<tr class=\"memdesc:a00264\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allow the measurement of the accuracy of a function against a reference implementation. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00265\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a></td></tr>\n<tr class=\"memdesc:a00265\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes bvec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00266\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a></td></tr>\n<tr class=\"memdesc:a00266\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00267\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a></td></tr>\n<tr class=\"memdesc:a00267\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes min and max functions for 3 to 4 vector parameters. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a></td></tr>\n<tr class=\"memdesc:a00268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point vector type with one component. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00269\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a></td></tr>\n<tr class=\"memdesc:a00269\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a></td></tr>\n<tr class=\"memdesc:a00270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point vector type with one component. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00271\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a></td></tr>\n<tr class=\"memdesc:a00271\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00272\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a></td></tr>\n<tr class=\"memdesc:a00272\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes ivec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a></td></tr>\n<tr class=\"memdesc:a00273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00274\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a></td></tr>\n<tr class=\"memdesc:a00274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00275\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a></td></tr>\n<tr class=\"memdesc:a00275\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for vector types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00276\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a></td></tr>\n<tr class=\"memdesc:a00276\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes uvec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a></td></tr>\n<tr class=\"memdesc:a00277\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00278\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a></td></tr>\n<tr class=\"memdesc:a00278\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allow the measurement of the accuracy of a function against a reference implementation. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Additional features not specified by GLSL specification. </p>\n<p>EXT extensions are fully tested and documented.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00286.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Recommended extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Recommended extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Additional features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a></td></tr>\n<tr class=\"memdesc:a00288\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00289\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a></td></tr>\n<tr class=\"memdesc:a00289\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00290\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a></td></tr>\n<tr class=\"memdesc:a00290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00291\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a></td></tr>\n<tr class=\"memdesc:a00291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a></td></tr>\n<tr class=\"memdesc:a00292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00293\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a></td></tr>\n<tr class=\"memdesc:a00293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00294\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a></td></tr>\n<tr class=\"memdesc:a00294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00295\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a></td></tr>\n<tr class=\"memdesc:a00295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00296\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a></td></tr>\n<tr class=\"memdesc:a00296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00297\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a></td></tr>\n<tr class=\"memdesc:a00297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00298\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a></td></tr>\n<tr class=\"memdesc:a00298\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a></td></tr>\n<tr class=\"memdesc:a00299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00300\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a></td></tr>\n<tr class=\"memdesc:a00300\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00301\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a></td></tr>\n<tr class=\"memdesc:a00301\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00302\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a></td></tr>\n<tr class=\"memdesc:a00302\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a></td></tr>\n<tr class=\"memdesc:a00303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00304\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a></td></tr>\n<tr class=\"memdesc:a00304\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00305\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a></td></tr>\n<tr class=\"memdesc:a00305\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a></td></tr>\n<tr class=\"memdesc:a00306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00307\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a></td></tr>\n<tr class=\"memdesc:a00307\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Additional features not specified by GLSL specification. </p>\n<p>GTC extensions aim to be stable with tests and documentation.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00287.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Experimental extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Experimental extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Experimental features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00308\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a></td></tr>\n<tr class=\"memdesc:a00308\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00309\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a></td></tr>\n<tr class=\"memdesc:a00309\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00310\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a></td></tr>\n<tr class=\"memdesc:a00310\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a></td></tr>\n<tr class=\"memdesc:a00311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00312\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a></td></tr>\n<tr class=\"memdesc:a00312\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00313\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a></td></tr>\n<tr class=\"memdesc:a00313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a></td></tr>\n<tr class=\"memdesc:a00314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00315\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a></td></tr>\n<tr class=\"memdesc:a00315\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00316\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a></td></tr>\n<tr class=\"memdesc:a00316\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00317\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a></td></tr>\n<tr class=\"memdesc:a00317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00318\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a></td></tr>\n<tr class=\"memdesc:a00318\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00319\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a></td></tr>\n<tr class=\"memdesc:a00319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00320\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a></td></tr>\n<tr class=\"memdesc:a00320\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00321\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a></td></tr>\n<tr class=\"memdesc:a00321\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a></td></tr>\n<tr class=\"memdesc:a00322\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00323\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a></td></tr>\n<tr class=\"memdesc:a00323\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00324\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a></td></tr>\n<tr class=\"memdesc:a00324\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a></td></tr>\n<tr class=\"memdesc:a00325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a></td></tr>\n<tr class=\"memdesc:a00326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00327\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a></td></tr>\n<tr class=\"memdesc:a00327\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00328\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a></td></tr>\n<tr class=\"memdesc:a00328\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00329\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a></td></tr>\n<tr class=\"memdesc:a00329\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00330\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a></td></tr>\n<tr class=\"memdesc:a00330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a></td></tr>\n<tr class=\"memdesc:a00331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a></td></tr>\n<tr class=\"memdesc:a00332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00333\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a></td></tr>\n<tr class=\"memdesc:a00333\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a></td></tr>\n<tr class=\"memdesc:a00334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00335\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a></td></tr>\n<tr class=\"memdesc:a00335\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a></td></tr>\n<tr class=\"memdesc:a00336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00337\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a></td></tr>\n<tr class=\"memdesc:a00337\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00338\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a></td></tr>\n<tr class=\"memdesc:a00338\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00339\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a></td></tr>\n<tr class=\"memdesc:a00339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00340\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a></td></tr>\n<tr class=\"memdesc:a00340\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00341\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a></td></tr>\n<tr class=\"memdesc:a00341\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00342\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a></td></tr>\n<tr class=\"memdesc:a00342\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00343\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a></td></tr>\n<tr class=\"memdesc:a00343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00344\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a></td></tr>\n<tr class=\"memdesc:a00344\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00345\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a></td></tr>\n<tr class=\"memdesc:a00345\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00346\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a></td></tr>\n<tr class=\"memdesc:a00346\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00347\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a></td></tr>\n<tr class=\"memdesc:a00347\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a></td></tr>\n<tr class=\"memdesc:a00348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00349\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a></td></tr>\n<tr class=\"memdesc:a00349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00350\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a></td></tr>\n<tr class=\"memdesc:a00350\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00351\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a></td></tr>\n<tr class=\"memdesc:a00351\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a></td></tr>\n<tr class=\"memdesc:a00352\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00353\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a></td></tr>\n<tr class=\"memdesc:a00353\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00354\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a></td></tr>\n<tr class=\"memdesc:a00354\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00355\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a></td></tr>\n<tr class=\"memdesc:a00355\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00356\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a></td></tr>\n<tr class=\"memdesc:a00356\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00357\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a></td></tr>\n<tr class=\"memdesc:a00357\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00358\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a></td></tr>\n<tr class=\"memdesc:a00358\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a></td></tr>\n<tr class=\"memdesc:a00359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00360\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a></td></tr>\n<tr class=\"memdesc:a00360\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00361\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a></td></tr>\n<tr class=\"memdesc:a00361\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00362\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a></td></tr>\n<tr class=\"memdesc:a00362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a></td></tr>\n<tr class=\"memdesc:a00363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a></td></tr>\n<tr class=\"memdesc:a00364\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a></td></tr>\n<tr class=\"memdesc:a00365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00366\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a></td></tr>\n<tr class=\"memdesc:a00366\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00367\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a></td></tr>\n<tr class=\"memdesc:a00367\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00368\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a></td></tr>\n<tr class=\"memdesc:a00368\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00369\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a></td></tr>\n<tr class=\"memdesc:a00369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Experimental features not specified by GLSL specification. </p>\n<p>Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00288.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_bitfield</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_bitfield<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x)</td></tr>\n<tr class=\"memdesc:ga091d934233a2e121df91b8c7230357c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x)</td></tr>\n<tr class=\"memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x)</td></tr>\n<tr class=\"memdesc:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>\n<tr class=\"memdesc:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>\n<tr class=\"memdesc:ga9a4976a529aec2cee56525e1165da484\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">bitfieldInterleave</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>\n<tr class=\"memdesc:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>\n<tr class=\"memdesc:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">bitfieldInterleave</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>\n<tr class=\"memdesc:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>\n<tr class=\"memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">bitfieldInterleave</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>\n<tr class=\"memdesc:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>\n<tr class=\"memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>\n<tr class=\"memdesc:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>\n<tr class=\"memdesc:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>\n<tr class=\"memdesc:gad2075d96a6640121edaa98ea534102ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>\n<tr class=\"memdesc:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">More...</a><br /></td></tr>\n<tr class=\"separator:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>\n<tr class=\"memdesc:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>\n<tr class=\"memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>\n<tr class=\"memdesc:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafca8768671a14c8016facccb66a89f26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>\n<tr class=\"memdesc:gafca8768671a14c8016facccb66a89f26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">More...</a><br /></td></tr>\n<tr class=\"separator:gafca8768671a14c8016facccb66a89f26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:gae186317091b1a39214ebf79008d44a1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">mask</a> (genIUType Bits)</td></tr>\n<tr class=\"memdesc:gad7eba518a0b71662114571ee76939f8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga091d934233a2e121df91b8c7230357c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7d1cc24dfbcdd932c3a2abbb76235f98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dbb8c87092f33bd815dd8a840be5d60\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46f9295abe3b5c7658f5b13c7f819f0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldFillOne </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 a range of bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e96dd1f0a4bc892f063251ed118c0c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldFillOne </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 a range of bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga697b86998b7d74ee0a69d8e9f8819fee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldFillZero </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 0 a range of bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d16c9acef4be79ea9b47c082a0cf7c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldFillZero </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 0 a range of bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24cad0069f9a0450abd80b3e89501adf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a4976a529aec2cee56525e1165da484\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a76bbca39c40153f3203d0a1926e142\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac51c33a394593f0631fa3aa5bb778809\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94f3646a5667f4be56f8dcf3310e963f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga406c4ee56af4ca37a73f449f154eca3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebb756a24a0784e3d6fba8bd011ab77a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f1e2b3fe699e7d897ae38b2115ddcbd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cb17574d60abd6ade84bc57c10e8f78\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8fdb724dccd4a07d57efc01147102137\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9fc2a0dd5dcf8b00e113f272a5feca93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa901c36a842fa5d126ea650549f17b24\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3afd6d38881fe3948c53d4214d2197fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad2075d96a6640121edaa98ea534102ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab19fbc739fc0cf7247978602c36f7da8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a44ae22f5c953b296c42d067dccbe6d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14bb274d54a3c26f4919dd7ed0dd0c36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga180a63161e1319fbd5a53c84d0429c7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafca8768671a14c8016facccb66a89f26\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2eb49678a344ce1495bdb5586d9896b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldRotateLeft </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the left. </p>\n<p>All the bits dropped in the left side are inserted back on the right side.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae186317091b1a39214ebf79008d44a1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldRotateLeft </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the left. </p>\n<p>All the bits dropped in the left side are inserted back on the right side.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c33d075c5fb8bd8dbfd5092bfc851ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldRotateRight </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the right. </p>\n<p>All the bits dropped in the right side are inserted back on the left side.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga590488e1fc00a6cfe5d3bcaf93fbfe88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldRotateRight </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the right. </p>\n<p>All the bits dropped in the right side are inserted back on the left side.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7eba518a0b71662114571ee76939f8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::mask </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Bits</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a mask of 'count' bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e64e3b922a296033b825311e7f5fff1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::mask </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a mask of 'count' bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00289.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_color_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_color_space<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear)</td></tr>\n<tr class=\"memdesc:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a standard gamma correction.  <a href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</td></tr>\n<tr class=\"memdesc:gaace0a21167d13d26116c283009af57f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a custom gamma correction.  <a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace0a21167d13d26116c283009af57f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB)</td></tr>\n<tr class=\"memdesc:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a standard gamma correction.  <a href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad1b91f27a9726c9cb403f9fee6e2e200\"></a>\ntemplate&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</td></tr>\n<tr class=\"memdesc:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>\n<tr class=\"separator:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga42239e7b3da900f7ef37cec7e2476579\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertLinearToSRGB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorLinear</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a linear color to sRGB color using a standard gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaace0a21167d13d26116c283009af57f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertLinearToSRGB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorLinear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Gamma</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a linear color to sRGB color using a custom gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16c798b7a226b2c3079dedc55083d187\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertSRGBToLinear </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorSRGB</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a sRGB color to linear color using a standard gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00290.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_constants</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_constants<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a> ()</td></tr>\n<tr class=\"memdesc:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return e constant.  <a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a> ()</td></tr>\n<tr class=\"memdesc:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return Euler's constant.  <a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 4 / pi.  <a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a> ()</td></tr>\n<tr class=\"memdesc:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the golden ratio constant.  <a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2.  <a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a> ()</td></tr>\n<tr class=\"memdesc:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(ln(2)).  <a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a> ()</td></tr>\n<tr class=\"memdesc:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(10).  <a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a> ()</td></tr>\n<tr class=\"memdesc:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(2).  <a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a> ()</td></tr>\n<tr class=\"memdesc:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1.  <a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / pi.  <a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / sqrt(2).  <a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / (pi * 2).  <a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 4.  <a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a> ()</td></tr>\n<tr class=\"memdesc:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(5).  <a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(pi / 2).  <a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a> ()</td></tr>\n<tr class=\"memdesc:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(ln(4)).  <a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return square root of pi.  <a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a> ()</td></tr>\n<tr class=\"memdesc:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(3).  <a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2).  <a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2 * pi).  <a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a> ()</td></tr>\n<tr class=\"memdesc:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / 3.  <a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2 * 3.  <a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga74eadc8a211253079683219a3ea0462a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / pi.  <a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga5827301817640843cf02026a8d493894\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / sqrt(pi).  <a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5827301817640843cf02026a8d493894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi * 2.  <a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a> ()</td></tr>\n<tr class=\"memdesc:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / 3.  <a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a> ()</td></tr>\n<tr class=\"memdesc:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 0.  <a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide a list of constants and precomputed useful values. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4b7956eb6e2fbedfc7cf2e46e85c5139\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::e </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return e constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8fe2e6f90bce9d829e9723b649fbd42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::euler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return Euler's constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga753950e5140e4ea6a88e4a18ba61dc09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::four_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 4 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga748cf8642830657c5b7eae04d0a80899\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::golden_ratio </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the golden ratio constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c36b41d462e45641faf7d7938948bac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::half_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca94292c839ed31a405ab7a81ae7e850\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ln_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(ln(2)). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf97ebc6c059ffd788e6c4946f71ef66c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ten </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(10). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24f4d27765678116f41a2f336ab7975c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39c2fb227631ca25894326529bdd1ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga555150da2b06d23c8738981d5013e0eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga788fa23a0939bac4d1d0205fb4f35818\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_root_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / sqrt(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c922b427986cbb2e4c6ac69874eefbc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / (pi * 2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c9df42bd73c519a995c43f0f99e77e0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::quarter_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae9ebbded75b53d4faeb1e4ef8b3347a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_five </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(5). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e276cb823cc5e612d4f89ed99c75039\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_half_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(pi / 2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4129412e96b33707a77c1a07652e23e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_ln_four </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(ln(4)). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga261380796b2cd496f68d2cf1d08b8eb9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return square root of pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f286be4abe88be1eed7d2a9f6cb193e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_three </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(3). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74e607d29020f100c0d0dc46ce2ca950\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2bcedc575039fe0cd765742f8bbb0bd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(2 * pi). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3077c6311010a214b69ddc8214ec13b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::third </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae94950df74b0ce382b1fc1d978ef7394\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::three_over_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 2 * 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74eadc8a211253079683219a3ea0462a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5827301817640843cf02026a8d493894\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_root_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / sqrt(pi). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5276a4617566abcfe49286f40e3a256\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi * 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b4d2f4322edcf63a6737b92a29dd1f5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_thirds </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga788f5a421fc0f40a1296ebc094cbaa8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::zero </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 0. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00291.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_epsilon</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_epsilon<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga91b417866cafadd076004778217a1844\">epsilonEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga91b417866cafadd076004778217a1844\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#ga91b417866cafadd076004778217a1844\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91b417866cafadd076004778217a1844\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">epsilonNotEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension. </p>\n<p>Comparison functions for a user defined epsilon values. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga91b417866cafadd076004778217a1844\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::epsilonEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7f227999ca09e7ca994e8b35aba47bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::epsilonEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf840d33b9a5261ec78dcd5125743b025\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::epsilonNotEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50a92103fb0cbd796908e1bf20c79aaf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::epsilonNotEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00292.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga9bd682e74bfacb005c735305207ec417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the log2 of x for integer values.  <a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga57824268ebe13a922f1d69a5d37f637f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::iround </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>floating point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bd682e74bfacb005c735305207ec417\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the log2 of x for integer values. </p>\n<p>Usefull to compute mipmap count from the texture size. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6715b9d573972a0f7763d30d45bcaec4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::uround </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>floating point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00293.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_access</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_access<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::col_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">column</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific column of a matrix.  <a href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a> (genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</td></tr>\n<tr class=\"memdesc:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific column to a matrix.  <a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::row_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">row</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific row of a matrix.  <a href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a> (genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</td></tr>\n<tr class=\"memdesc:gaadcc64829aadf4103477679e48c7594f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific row to a matrix.  <a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions to access rows or columns of a matrix easily. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga96022eb0d3fae39d89fc7a954e59b374\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::col_type glm::column </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get a specific column of a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e757377523890e8b80c5843dbe4dd15\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::column </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::col_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set a specific column to a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga259e5ebd0f31ec3f83440f8cae7f5dba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::row_type glm::row </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get a specific row of a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaadcc64829aadf4103477679e48c7594f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::row </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::row_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set a specific row to a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00294.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a></td></tr>\n<tr class=\"memdesc:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a></td></tr>\n<tr class=\"memdesc:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a></td></tr>\n<tr class=\"memdesc:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a></td></tr>\n<tr class=\"memdesc:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1858820fb292cae396408b2034407f72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga1858820fb292cae396408b2034407f72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1858820fb292cae396408b2034407f72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a></td></tr>\n<tr class=\"memdesc:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a></td></tr>\n<tr class=\"memdesc:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">More...</a><br /></td></tr>\n<tr class=\"separator:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a></td></tr>\n<tr class=\"memdesc:gaa1143120339b7d2d469d327662e8a172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a></td></tr>\n<tr class=\"memdesc:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a></td></tr>\n<tr class=\"memdesc:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">More...</a><br /></td></tr>\n<tr class=\"separator:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a></td></tr>\n<tr class=\"memdesc:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a></td></tr>\n<tr class=\"memdesc:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x3 matrix.  <a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x4 matrix.  <a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a></td></tr>\n<tr class=\"memdesc:ga038f68437155ffa3c2583a15264a8195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">More...</a><br /></td></tr>\n<tr class=\"separator:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a></td></tr>\n<tr class=\"memdesc:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x2 matrix.  <a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a></td></tr>\n<tr class=\"memdesc:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a></td></tr>\n<tr class=\"memdesc:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x4 matrix.  <a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a></td></tr>\n<tr class=\"memdesc:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x2 matrix.  <a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a></td></tr>\n<tr class=\"memdesc:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x3 matrix.  <a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a></td></tr>\n<tr class=\"memdesc:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a></td></tr>\n<tr class=\"memdesc:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a></td></tr>\n<tr class=\"memdesc:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">More...</a><br /></td></tr>\n<tr class=\"separator:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga664f061df00020048c3f8530329ace45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga664f061df00020048c3f8530329ace45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga664f061df00020048c3f8530329ace45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9273faab33623d944af4080befbb2c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga9273faab33623d944af4080befbb2c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9273faab33623d944af4080befbb2c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a></td></tr>\n<tr class=\"memdesc:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a></td></tr>\n<tr class=\"memdesc:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a></td></tr>\n<tr class=\"memdesc:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a></td></tr>\n<tr class=\"memdesc:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a></td></tr>\n<tr class=\"memdesc:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec3d624306bd59649f021864709d56b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a></td></tr>\n<tr class=\"memdesc:gaec3d624306bd59649f021864709d56b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec3d624306bd59649f021864709d56b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a></td></tr>\n<tr class=\"memdesc:gac092c6105827bf9ea080db38074b78eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">More...</a><br /></td></tr>\n<tr class=\"separator:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a></td></tr>\n<tr class=\"memdesc:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a></td></tr>\n<tr class=\"memdesc:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a></td></tr>\n<tr class=\"memdesc:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a></td></tr>\n<tr class=\"memdesc:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a></td></tr>\n<tr class=\"memdesc:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">More...</a><br /></td></tr>\n<tr class=\"separator:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67689a518b181a26540bc44a163525cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga67689a518b181a26540bc44a163525cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga67689a518b181a26540bc44a163525cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf348552978553630d2a00b78eb887ced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a></td></tr>\n<tr class=\"memdesc:gaf348552978553630d2a00b78eb887ced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf348552978553630d2a00b78eb887ced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2596869d154dec1180beadbb9df80501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2596869d154dec1180beadbb9df80501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2596869d154dec1180beadbb9df80501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a></td></tr>\n<tr class=\"memdesc:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a></td></tr>\n<tr class=\"memdesc:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a></td></tr>\n<tr class=\"memdesc:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a></td></tr>\n<tr class=\"memdesc:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a></td></tr>\n<tr class=\"memdesc:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga78009a1e4ca64217e46b418535e52546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a></td></tr>\n<tr class=\"memdesc:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a></td></tr>\n<tr class=\"memdesc:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a></td></tr>\n<tr class=\"memdesc:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4cae85566f900debf930c41944b64691\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a></td></tr>\n<tr class=\"memdesc:ga4cae85566f900debf930c41944b64691\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cae85566f900debf930c41944b64691\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a></td></tr>\n<tr class=\"memdesc:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a></td></tr>\n<tr class=\"memdesc:ga1870da7578d5022b973a83155d386ab3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a></td></tr>\n<tr class=\"memdesc:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a></td></tr>\n<tr class=\"memdesc:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a></td></tr>\n<tr class=\"memdesc:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a></td></tr>\n<tr class=\"memdesc:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x4 matrix.  <a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a></td></tr>\n<tr class=\"memdesc:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a></td></tr>\n<tr class=\"memdesc:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a></td></tr>\n<tr class=\"memdesc:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a></td></tr>\n<tr class=\"memdesc:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a number of matrices with integer types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga8499cc3b016003f835314c1c756e9db9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, highp&gt; highp_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa389e2d1c3b10941cae870bc0aeba5b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, highp&gt; highp_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00049\">49</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba49d890e06c9444795f5a133fbf1336\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, highp&gt; highp_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00053\">53</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05a970fd4366dad6c8a0be676b1eae5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, highp&gt; highp_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00057\">57</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca4506a3efa679eff7c006d9826291fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, highp&gt; highp_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00041\">41</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91c671c3ff9706c2393e78b22fd84bcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, highp&gt; highp_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00061\">61</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07d7b7173e2a6f843ff5f1c615a95b41\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, highp&gt; highp_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00065\">65</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga53008f580be99018a17b357b5a4ffc0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, highp&gt; highp_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00069\">69</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cfb09b34e0fcf73eaf6512d6483ef56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, highp&gt; highp_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00045\">45</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1858820fb292cae396408b2034407f72\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, highp&gt; highp_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00073\">73</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6be0b80ae74bb309bc5b964d93d68fc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, highp&gt; highp_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00077\">77</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c783ee6f8f040ab37df2f70392c8b44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, highp&gt; highp_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00081\">81</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42cbce64c4c1cd121b8437daa6e110de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, highp&gt; highp_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00186\">186</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5337b7bc95f9cbac08a0c00b3f936b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, highp&gt; highp_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00198\">198</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga90718c7128320b24b52f9ea70e643ad4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, highp&gt; highp_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00202\">202</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadca0a4724b4a6f56a2355b6f6e19248b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, highp&gt; highp_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00206\">206</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1143120339b7d2d469d327662e8a172\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, highp&gt; highp_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00190\">190</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga844a5da2e7fc03fc7cccc7f1b70809c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, highp&gt; highp_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00210\">210</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f7d41c36b980774a4d2e7c1647fb4b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, highp&gt; highp_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00214\">214</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga25ee15c323924f2d0fe9896d329e5086\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, highp&gt; highp_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00218\">218</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf665e4e78c2cc32a54ab40325738f9c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, highp&gt; highp_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00194\">194</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae69eb82ec08b0dc9bf2ead2a339ff801\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, highp&gt; highp_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00222\">222</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45a8163d02c43216252056b0c120f3a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, highp&gt; highp_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00226\">226</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a56cbb769aed334c95241664415f9ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, highp&gt; highp_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00230\">230</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabe04f9948d4a213bb1c20137de03e01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2 imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00362\">362</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4732a240522ad9bc28144fda2fc14ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x2 imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00374\">374</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x3 imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00378\">378</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d8faafdca42583d67e792dd038fc668\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x4 imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00382\">382</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga038f68437155ffa3c2583a15264a8195\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3 imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00366\">366</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b33bbe4f12c060892bd3cc8d4cd737f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x2 imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00386\">386</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6aacc960f62e8f7d2fe9d32d5050e7a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x3 imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00390\">390</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e9ce23496d8b08dfc302d4039694b58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x4 imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00394\">394</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96b0d26a33b81bb6a60ca0f39682f7eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4 imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00370\">370</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ce7ef51d8b2c1901fa5414deccbc3fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x2 imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00398\">398</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga705ee0bf49d6c3de4404ce2481bf0df5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x3 imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00402\">402</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43ed5e4f475b6f4cad7cba78f29c405b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x4 imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00406\">406</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0bff0be804142bb16d441aec0a7962e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, lowp&gt; lowp_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00136\">136</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92b95b679975d408645547ab45a8dcd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, lowp&gt; lowp_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00149\">149</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c9e7a388f8e7c52f1e6857dee8afb65\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, lowp&gt; lowp_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00153\">153</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, lowp&gt; lowp_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00157\">157</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga69bfe668f4170379fc1f35d82b060c43\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, lowp&gt; lowp_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00140\">140</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga33db8f27491d30906cd37c0d86b3f432\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, lowp&gt; lowp_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00161\">161</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga664f061df00020048c3f8530329ace45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, lowp&gt; lowp_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00165\">165</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9273faab33623d944af4080befbb2c80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, lowp&gt; lowp_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00169\">169</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1e77f7270cad461ca4fcb4c3ec2e98c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, lowp&gt; lowp_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00144\">144</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26ec1a2ba08a1488f5f05336858a0f09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, lowp&gt; lowp_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00173\">173</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f40483a3ae634ead8ad22272c543a33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, lowp&gt; lowp_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00177\">177</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf65677e53ac8e31a107399340d5e2451\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, lowp&gt; lowp_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00181\">181</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2fba702d990437fc88ff3f3a76846ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, lowp&gt; lowp_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00285\">285</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2e9d89745f7175051284e54c81d81c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, lowp&gt; lowp_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00298\">298</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3072f90fd86f17a862e21589fbb14c0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, lowp&gt; lowp_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00302\">302</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8bb45fec4bd77bd81b4ae7eb961a270d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, lowp&gt; lowp_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00306\">306</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1145f72bcdd590f5808c4bc170c2924\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, lowp&gt; lowp_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00289\">289</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56ea68c6a6cba8d8c21d17bb14e69c6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, lowp&gt; lowp_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00310\">310</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f660a39a395cc14f018f985e7dfbeb5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, lowp&gt; lowp_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00314\">314</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec3d624306bd59649f021864709d56b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, lowp&gt; lowp_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00318\">318</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac092c6105827bf9ea080db38074b78eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, lowp&gt; lowp_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00293\">293</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7716c2b210d141846f1ac4e774adef5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, lowp&gt; lowp_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00322\">322</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09ab33a2636f5f43f7fae29cfbc20fff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, lowp&gt; lowp_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00326\">326</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga10aafc66cf1a0ece336b1c5ae13d0cc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, lowp&gt; lowp_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00330\">330</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20f4cc7ab23e2aa1f4db9fdb5496d378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, mediump&gt; mediump_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00086\">86</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2aeb11a329940721dda9583e71f856\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, mediump&gt; mediump_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00099\">99</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74362470ba99843ac70aee5ac38cc674\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, mediump&gt; mediump_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00103\">103</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8da25cd380ba30fc5b68a4687deb3e09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, mediump&gt; mediump_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00107\">107</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6c63bdc736efd3466e0730de0251cb71\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, mediump&gt; mediump_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00090\">90</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0b4e42d648fb3eaf4bb88da82ecc809\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, mediump&gt; mediump_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00111\">111</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad99cc2aad8fc57f068cfa7719dbbea12\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, mediump&gt; mediump_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00115\">115</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga67689a518b181a26540bc44a163525cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, mediump&gt; mediump_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00119\">119</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf348552978553630d2a00b78eb887ced\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, mediump&gt; mediump_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00094\">94</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b2d35816f7103f0f4c82dd2f27571fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, mediump&gt; mediump_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00123\">123</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b10acc696759e03f6ab918f4467e94c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, mediump&gt; mediump_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2596869d154dec1180beadbb9df80501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, mediump&gt; mediump_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00131\">131</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43041378b3410ea951b7de0dfd2bc7ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, mediump&gt; mediump_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00235\">235</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b209b1b751f041422137e3c065dfa98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, mediump&gt; mediump_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00248\">248</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee2c1f13b41f4c92ea5b3efe367a1306\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, mediump&gt; mediump_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00252\">252</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1317ddca16d01e119a40b7f0ee85f95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, mediump&gt; mediump_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00256\">256</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1730dbe3c67801f53520b06d1aa0a34a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, mediump&gt; mediump_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00239\">239</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaadc28bfdc8ebca81ae85121b11994970\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, mediump&gt; mediump_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48f2fc38d3f7fab3cfbc961278ced53d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, mediump&gt; mediump_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00264\">264</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78009a1e4ca64217e46b418535e52546\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, mediump&gt; mediump_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00268\">268</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5087c2beb26a11d9af87432e554cf9d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, mediump&gt; mediump_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00243\">243</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf35aefd81cc13718f6b059623f7425fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, mediump&gt; mediump_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00272\">272</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e1bed14fbc7f4b376aaed064f89f0fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, mediump&gt; mediump_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00276\">276</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9428fc8430dc552aad920653f822ef3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, mediump&gt; mediump_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00280\">280</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4cae85566f900debf930c41944b64691\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2 umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00439\">439</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf8acdd33ce8951051edbca5200898aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x2 umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00451\">451</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1870da7578d5022b973a83155d386ab3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x3 umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00455\">455</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57936a3998e992370e59a223e0ee4fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x4 umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00459\">459</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5085e3ff02abbac5e537eb7b89ab63b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3 umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00443\">443</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9cd7fa637a4a6788337f45231fad9e1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x2 umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00463\">463</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x3 umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00467\">467</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7c78ff3fc4309605ab0fa186c8d48ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x4 umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00471\">471</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38bc7bb6494e344185df596deeb4544c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4 umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00447\">447</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70fa2d05896aa83cbc8c07672a429b53\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x2 umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00475\">475</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga87581417945411f75cb31dd6ca1dba98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x3 umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00479\">479</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf72e6d399c42985db6872c50f53d7eb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x4 umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00483\">483</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00295.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_inverse</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_inverse<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast matrix inverse for affine matrix.  <a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the inverse transpose of a matrix.  <a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">More...</a><br /></td></tr>\n<tr class=\"separator:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines additional matrix inverting functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gae0fcc5fc8783291f9702272de428fa0e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::affineInverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Fast matrix inverse for affine matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix to invert. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00295.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_inverse</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab213cd0e3ead5f316d583f99d6312008\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::inverseTranspose </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the inverse transpose of a matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix to invert transpose. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00295.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_inverse</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00296.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions that generate common transformation matrices.</p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00297.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_noise</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_noise<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Classic perlin noise.  <a href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</td></tr>\n<tr class=\"memdesc:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Periodic perlin noise.  <a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">More...</a><br /></td></tr>\n<tr class=\"separator:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga8122468c69015ff397349a7dcc638b27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simplex noise.  <a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\": <a href=\"https://github.com/ashima/webgl-noise\">https://github.com/ashima/webgl-noise</a> Following Stefan Gustavson's paper \"Simplex noise demystified\": <a href=\"http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\">http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf</a> </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1e043ce3b51510e9bc4469227cefc38a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::perlin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Classic perlin noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac270edc54c5fc52f5985a45f940bb103\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::perlin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rep</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Periodic perlin noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8122468c69015ff397349a7dcc638b27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::simplex </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simplex noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00298.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_packing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_packing<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4944ad465ff950e926d49621f916c78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.  <a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.  <a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06ecb6afb902dba45419008171db9023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a> (ivec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga06ecb6afb902dba45419008171db9023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06ecb6afb902dba45419008171db9023\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a> (i16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a> (i32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a> (i8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a> (i16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a> (i8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a> (vec&lt; 3, T, Q &gt; const &amp;rgb)</td></tr>\n<tr class=\"memdesc:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename intType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into signed integer values.  <a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 16-bit integer value.  <a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">More...</a><br /></td></tr>\n<tr class=\"separator:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a> (float s)</td></tr>\n<tr class=\"memdesc:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 8-bit integer value.  <a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab997545661877d2c7362a5084d3897d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab997545661877d2c7362a5084d3897d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.  <a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab997545661877d2c7362a5084d3897d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">More...</a><br /></td></tr>\n<tr class=\"separator:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a> (uvec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a> (u16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a> (u8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename uintType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 16-bit integer value.  <a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a> (float v)</td></tr>\n<tr class=\"memdesc:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 8-bit integer value.  <a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.  <a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaec4112086d7fb133bea104a7c237de52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a> (vec&lt; L, uint16, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a> (uint16 v)</td></tr>\n<tr class=\"memdesc:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.  <a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.  <a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a> (int p)</td></tr>\n<tr class=\"memdesc:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a> (int64 p)</td></tr>\n<tr class=\"memdesc:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a> (int16 p)</td></tr>\n<tr class=\"memdesc:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a> (int64 p)</td></tr>\n<tr class=\"memdesc:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a> (int32 p)</td></tr>\n<tr class=\"memdesc:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a> (vec&lt; 4, T, Q &gt; const &amp;rgbm)</td></tr>\n<tr class=\"memdesc:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename intType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a> (vec&lt; L, intType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96dd15002370627a443c835ab03a766c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga96dd15002370627a443c835ab03a766c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.  <a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96dd15002370627a443c835ab03a766c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.  <a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.  <a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.  <a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename uintType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a> (vec&lt; L, uintType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.  <a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a single 8-bit integer to a normalized floating-point value.  <a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.  <a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga5156d3060355fe332865da2c7f78815f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.  <a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension. </p>\n<p>This extension provides a set of function to convert vertors to packed formats. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4944ad465ff950e926d49621f916c78d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packF2x11_1x10 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>\n<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackF2x11_1x10(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f648fc205467792dc6d8c59c748f8a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packF3x9_E1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>\n<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>\n<p>packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackF3x9_E1x5(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2d8bbce673ebc04831c1fb05c47f5251\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint16, Q&gt; glm::packHalf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, float, Q&gt; unpackHalf(vec&lt;L, uint16, Q&gt; const&amp; p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43f2093b6ff192a79058ff7834fc3528\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packHalf1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packHalf2x16(vec2 const&amp; v) </dd>\n<dd>\nuint64 packHalf4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe2f7b39caf8f5ec555e1c059ec530e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packHalf4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packHalf1x16(float const&amp; v) </dd>\n<dd>\nuint32 packHalf2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga06ecb6afb902dba45419008171db9023\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packI3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packI3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nivec4 unpackI3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3644163cf3a47bf1d4af1f4b03013a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::packInt2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni16vec2 unpackInt2x16(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1e4c8a9e67d86b61a6eec86703a827a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::packInt2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni32vec2 unpackInt2x32(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8884b1f2292414f36d59ef3be5d62914\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int16 glm::packInt2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni8vec2 unpackInt2x8(int16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1989f093a27ae69cf9207145be48b3d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::packInt4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni16vec4 unpackInt4x16(int64 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2238401d5ce2aaade1a44ba19709072\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::packInt4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni8vec4 unpackInt4x8(int32 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0466daf4c90f76cc64b3f105ce727295\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::packRGBM </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgb</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;3, T, Q&gt; unpackRGBM(vec&lt;4, T, Q&gt; const&amp; p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa54b5855a750d6aeb12c1c902f5939b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, intType, Q&gt; glm::packSnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into signed integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, floatType, Q&gt; unpackSnorm(vec&lt;L, intType, Q&gt; const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab22f8bcfdb5fc65af4701b25f143c1af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packSnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into 16-bit integer value. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm2x16(vec2 const&amp; v) </dd>\n<dd>\nuint64 packSnorm4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3592e0795e62aaa1865b3a10496a7a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packSnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>s</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into 8-bit integer value. </p>\n<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>\n<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm2x8(vec2 const&amp; v) </dd>\n<dd>\nuint32 packSnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6be3cfb2cce3702f03e91bbeb5286d7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packSnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packSnorm1x8(float const&amp; v) </dd>\n<dd>\nuint32 packSnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab997545661877d2c7362a5084d3897d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. </p>\n<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)</p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga358943934d21da947d5bcc88c2ab7832\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packSnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm1x16(float const&amp; v) </dd>\n<dd>\nuint32 packSnorm2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3d88d59f0f458f9c51a9fd359a4bc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packU3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nivec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5eecc9e8cbaf51ac6cf57501e670ee19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUint2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu16vec2 unpackUint2x16(uint p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa864081097b86e83d8e4a4d79c382b22\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUint2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu32vec2 unpackUint2x32(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c3c9fb53ae7823b10fa083909357590\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUint2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu8vec2 unpackInt2x8(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ceb62cca347d8ace42ee90317a3f1f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUint4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu16vec4 unpackUint4x16(uint64 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0fe2f09aeb403cd66c1a062f58861ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packUint4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu8vec4 unpackUint4x8(uint32 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaccd3f27e6ba5163eb7aa9bc8ff96251a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uintType, Q&gt; glm::packUnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, floatType, Q&gt; unpackUnorm(vec&lt;L, intType, Q&gt; const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f82737bf2a44bedff1d286b76837886\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into a 16-bit integer value. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm1x16(float const&amp; v) </dd>\n<dd>\nuint64 packSnorm4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga768e0337dd6246773f14aa0a421fe9a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm1x5_1x6_1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackUnorm1x5_1x6_1x5(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2fa60df3460403817d28b082ee0736\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into a 8-bit integer value. </p>\n<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm2x8(vec2 const&amp; v) </dd>\n<dd>\nuint32 packUnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f9abdb50f9be1aa1c14912504a0d98d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm2x3_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackUnorm2x3_1x2(uint8 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab6bbd5be3b8e6db538ecb33a7844481c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x4(uint8 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a666b1c688ab54100061ed06526de6e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm1x8(float const&amp; v) </dd>\n<dd>\nuint32 packUnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a1ee625d2707c60530fb3fca2980b19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. </p>\n<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)</p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec4112086d7fb133bea104a7c237de52\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm3x5_1x1 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm3x5_1x1(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f63c264e7ab63264e2b2a99fd393897\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm1x16(float const&amp; v) </dd>\n<dd>\nuint32 packUnorm2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3e7e3ce521513584a53aedc5f9765c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm4x4(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b1fd1e854705b1345e98409e0a25e50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packF2x11_1x10(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab9e60ebe3ad3eeced6a9ec6eb876d74e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackF3x9_E1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<p>unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packF3x9_E1x5(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30d6b2f1806315bcd6047131f547d33b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::unpackHalf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, <a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, uint16, Q&gt; packHalf(vec&lt;L, float, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac37dedaba24b00adb4ec6e8f92c19dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackHalf1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackHalf2x16(uint32 const&amp; v) </dd>\n<dd>\nvec4 unpackHalf4x16(uint64 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57dfc41b2eb20b0ac00efae7d9c49dcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackHalf4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackHalf1x16(uint16 const&amp; v) </dd>\n<dd>\nvec2 unpackHalf2x16(uint32 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a05330e5490be0908d3b117d82aff56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. </p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p); </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaccde055882918a3175de82f4ca8b7d8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i16vec2 glm::unpackInt2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packInt2x16(i16vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab297c0bfd38433524791eb0584d8f08d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i32vec2 glm::unpackInt2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packInt2x16(i32vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0c59f1e259fca9e68adb2207a6b665e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i8vec2 glm::unpackInt2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint16 packInt2x8(i8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga52c154a9b232b62c22517a700cc0c78c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i16vec4 glm::unpackInt4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint64 packInt4x16(i16vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1cd8d2038cdd33a860801aa155a26221\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i8vec4 glm::unpackInt4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint32 packInt2x8(i8vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c1ec97894b05ea21a05aea4f0204a02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unpackRGBM </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbm</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;4, T, Q&gt; packRGBM(vec&lt;3, float, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d49b31e5c3f9df8e1f99ab62b999482\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::unpackSnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, intType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, intType, Q&gt; packSnorm(vec&lt;L, floatType, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96dd15002370627a443c835ab03a766c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackSnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackSnorm2x16(uint32 p) </dd>\n<dd>\nvec4 unpackSnorm4x16(uint64 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4851ff86678aa1c7ace9d67846894285\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackSnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </p>\n<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackSnorm2x8(uint16 p) </dd>\n<dd>\nvec4 unpackSnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b128e89be449fc71336968a66bf6e1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackSnorm1x8(uint8 p) </dd>\n<dd>\nvec4 unpackSnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a4fbf79be9740e3c57737bc2af05e5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nvec4 unpackUnorm3x10_1x2(uint32 const&amp; p)) </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuvec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaddf9c353528fe896106f7181219c7f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackSnorm1x16(uint16 p) </dd>\n<dd>\nvec2 unpackSnorm2x16(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48df3042a7d079767f5891a1bfd8a60a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. </p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p); </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga035bbbeab7ec2b28c0529757395b645b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u16vec2 glm::unpackUint2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint packUint2x16(u16vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf942ff11b65e83eb5f77e68329ebc6ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u32vec2 glm::unpackUint2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packUint2x16(u32vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7600a6c71784b637a410869d2a5adcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u8vec2 glm::unpackUint2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packInt2x8(u8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab173834ef14cfc23a96a959f3ff4b8dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u16vec4 glm::unpackUint4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint64 packUint4x16(u16vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6dc0e4341810a641c7ed08f10e335d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u8vec4 glm::unpackUint4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packUint4x8(u8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e6ac9178b59f0b1b2f7599f2183eb7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::unpackUnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uintType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, intType, Q&gt; packUnorm(vec&lt;L, floatType, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83d34160a5cb7bcb5339823210fc7501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackUnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </p>\n<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x16(uint32 p) </dd>\n<dd>\nvec4 unpackUnorm4x16(uint64 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3bc08ecfc0f3339be93fb2b3b56d88a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackUnorm1x5_1x6_1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm1x5_1x6_1x5(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1319207e30874fb4931a9ee913983ee1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackUnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a single 8-bit integer to a normalized floating-point value. </p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x8(uint16 p) </dd>\n<dd>\nvec4 unpackUnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6abd5a9014df3b5ce4059008d2491260\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackUnorm2x3_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm2x3_1x2(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e50476132fe5f27f08e273d9c70d85b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm2x4(vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga637cbe3913dd95c6e7b4c99c61bd611f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackUnorm1x8(uint8 v) </dd>\n<dd>\nvec4 unpackUnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5156d3060355fe332865da2c7f78815f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nvec4 unpackInorm3x10_1x2(uint32 const&amp; p)) </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuvec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ff95ff5bc16f396432ab67243dbae4d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm3x5_1x1 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm3x5_1x1(vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ae149c5d2473ac1e5f347bb654a242d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackUnorm1x16(uint16 p) </dd>\n<dd>\nvec2 unpackUnorm2x16(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac58ee89d0e224bb6df5e8bbb18843a2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm4x4(vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00299.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns euler angles, pitch as x, yaw as y, roll as z.  <a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac00012eea281800d2403f4ea8443134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac00012eea281800d2403f4ea8443134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga333ab70047fbe4132406100c292dbc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">More...</a><br /></td></tr>\n<tr class=\"separator:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7603e81477b46ddb448896909bc04928\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns pitch value of euler angles expressed in radians.  <a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7603e81477b46ddb448896909bc04928\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 3 * 3 matrix to a quaternion.  <a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 4 * 4 matrix to a quaternion.  <a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at quaternion based on the default handedness.  <a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:ga2da350c73411be3bb19441b226b81a74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left-handed look at quaternion.  <a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right-handed look at quaternion.  <a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns roll value of euler angles expressed in radians.  <a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns yaw value of euler angles expressed in radians.  <a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a templated quaternion type and several quaternion operations. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf4dd967dead22dd932fc7460ceecb03f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::eulerAngles </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns euler angles, pitch as x, yaw as y, roll as z. </p>\n<p>The result is expressed in radians.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f7fa76e06c417b757ddfd438f3f677b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::greaterThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga388cbeba987dae7b5937f742efa49a5a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::greaterThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad091a2d22c8acfebfa92bcfca1dfe9c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::lessThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison result of x &lt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac00012eea281800d2403f4ea8443134d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::lessThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &lt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga333ab70047fbe4132406100c292dbc89\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::mat3_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 3 matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00113\">glm::toMat3()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1113212d9bdefc2e31ad40e5bbb506f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::mat4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 4 * 4 matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00120\">glm::toMat4()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7603e81477b46ddb448896909bc04928\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::pitch </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns pitch value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1108a4ab88ca87bac321454eea7702f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a pure rotation 3 * 3 matrix to a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00127\">glm::toQuat()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4524810f07f72e8c7bdc7764fa11cb58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a pure rotation 4 * 4 matrix to a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe7fc5ec5feb41ab234d5d2b6254697f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a look at quaternion based on the default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2da350c73411be3bb19441b226b81a74\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAtLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a left-handed look at quaternion. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6529ac8c04a57fcc35865b5c9437cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAtRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a right-handed look at quaternion. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cc5ad970d0b00829b139fe0fe5a1e13\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::roll </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns roll value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8da38cdfdc452dafa660c2f46506bad5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::yaw </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns yaw value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00300.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_random</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_random<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.  <a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga9dd05c36025088fae25b97c869e88517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.  <a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.  <a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a> (genType Mean, genType Deviation)</td></tr>\n<tr class=\"memdesc:ga5193a83e49e4fdc5652c084711083574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a gaussian distribution.  <a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">linearRand</a> (genType Min, genType Max)</td></tr>\n<tr class=\"memdesc:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a> (vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.  <a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension. </p>\n<p>Generate random number from various distribution methods. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga7c53b7797f3147af68a11c767679fa3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::ballRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9dd05c36025088fae25b97c869e88517\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::circularRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::diskRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5193a83e49e4fdc5652c084711083574\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gaussRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Mean</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Deviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a gaussian distribution. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04e241ab88374a477a2c2ceadd2fa03d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::linearRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Min</td><td>Minimum value included in the sampling </td></tr>\n    <tr><td class=\"paramname\">Max</td><td>Maximum value included in the sampling </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Value type. Currently supported: float or double scalars. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94731130c298a9ff5e5025fdee6d97a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::linearRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Min</td><td>Minimum value included in the sampling </td></tr>\n    <tr><td class=\"paramname\">Max</td><td>Maximum value included in the sampling </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Value type. Currently supported: float or double.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22f90fcaccdf001c516ca90f6428e138\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::sphericalRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00301.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_reciprocal</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_reciprocal<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent function.  <a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafaca98a7100170db8841f446282debfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent hyperbolic function.  <a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">More...</a><br /></td></tr>\n<tr class=\"separator:gafaca98a7100170db8841f446282debfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant function.  <a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant hyperbolic function.  <a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant function.  <a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant hyperbolic function.  <a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent function.  <a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent hyperbolic function.  <a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant function.  <a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant hyperbolic function.  <a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a> (genType angle)</td></tr>\n<tr class=\"memdesc:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant function.  <a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant hyperbolic function.  <a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension. </p>\n<p>Define secant, cosecant and cotangent functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaeadfb9c9d71093f7865b2ba2ca8d104d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acot </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cotangent function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafaca98a7100170db8841f446282debfa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acoth </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cotangent hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b4bed91476b9b915e76b4a30236d330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acsc </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cosecant function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b50aa5e5afc7e19ec113ab91596c576\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acsch </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cosecant hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c5b7f962c2c9ff684e6d2de48db1f10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::asec </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse secant function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec7586dccfe431f850d006f3824b8ca6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::asech </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse secant hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a7b517a95bbd3ad74da3aea87a66314\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cot </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cotangent function. </p>\n<p>adjacent / opposite or 1 / tan(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6b8b770eb7198e4dea59d52e6db81442\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::coth </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cotangent hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga59dd0005b6474eea48af743b4f14ebbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::csc </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cosecant function. </p>\n<p>hypotenuse / opposite or 1 / sin(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d95843ff3ca6472ab399ba171d290a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::csch </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cosecant hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4bcbebee670c5ea155f0777b3acbd84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sec </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Secant function. </p>\n<p>hypotenuse / adjacent or 1 / cos(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a5cfd1e7170104a7b33863b1b75e5ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sech </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Secant hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00302.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_round</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_round<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">ceilMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">ceilPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">More...</a><br /></td></tr>\n<tr class=\"separator:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">floorMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">floorPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">roundMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">roundPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension. </p>\n<p>Rounding value to specific boundings </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1d89ac88582aaf4d5dfa5feb4a376fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::ceilMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceilMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c3ef36ae32aa4271f1544f92bd578b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::ceilPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab53d4a97c0d3e297be5f693cdfdfe5d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceilPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ffa3cd5f2ea746ee1bf57c46da6315e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::floorMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacdd8901448f51f0b192380e422fae3e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floorMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe273a57935d04c9db677bf67f9a71f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::floorPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf0d591a8fca8ddb9289cdeb44b989c2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floorPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab892defcc9c0b0618df7251253dc0fbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::roundMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f1a68332d761804c054460a612e3a4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4e1bf5d1cd179f59261a7342bdcafca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::roundPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga258802a7d55c03c918f28cf4d241c4d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00303.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_aligned</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_aligned<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga780a35f764020f553a9601a3fcdcd059\"></a>\ntypedef aligned_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a></td></tr>\n<tr class=\"memdesc:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae766b317c5afec852bfb3d74a3c54bc8\"></a>\ntypedef aligned_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a></td></tr>\n<tr class=\"memdesc:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae1964ba70d15915e5b710926decbb3cb\"></a>\ntypedef aligned_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a></td></tr>\n<tr class=\"memdesc:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae164a1f7879f828bc35e50b79d786b05\"></a>\ntypedef aligned_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a></td></tr>\n<tr class=\"memdesc:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6783859382677d35fcd5dac7dcbefdbd\"></a>\ntypedef aligned_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga449a3ec2dde6b6bb4bb94c49a6aad388\"></a>\ntypedef aligned_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53d519a7b1bfb69076b3ec206a6b3bd1\"></a>\ntypedef aligned_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ccb2baeb0ab57b818c24e0d486c59d0\"></a>\ntypedef aligned_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga19aa695ffdb45ce29f7ea0b5029627de\"></a>\ntypedef aligned_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a></td></tr>\n<tr class=\"memdesc:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5f5123d834bd1170edf8c386834e112c\"></a>\ntypedef aligned_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga635bf3732281a2c2ca54d8f9d33d178f\"></a>\ntypedef aligned_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf488c6ad88c185054595d4d5c7ba5b9d\"></a>\ntypedef aligned_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga001bb387ae8192fa94dbd8b23b600439\"></a>\ntypedef aligned_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a></td></tr>\n<tr class=\"memdesc:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa409cfb737bd59b68dc683e9b03930cc\"></a>\ntypedef aligned_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga621e89ca1dbdcb7b5a3e7de237c44121\"></a>\ntypedef aligned_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9bda778d0b7ad82f656dab99b71857a\"></a>\ntypedef aligned_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4974f46ae5a19415d91316960a53617a\"></a>\ntypedef aligned_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a></td></tr>\n<tr class=\"memdesc:ga4974f46ae5a19415d91316960a53617a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga18d859f87122b2b3b2992ffe86dbebc0\"></a>\ntypedef aligned_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a></td></tr>\n<tr class=\"memdesc:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa37869eea77d28419b2fb0ff70b69bf0\"></a>\ntypedef aligned_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a></td></tr>\n<tr class=\"memdesc:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9f0a4795ccc442fa9901845026f9f5\"></a>\ntypedef aligned_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga862843a45b01c35ffe4d44c47ea774ad\"></a>\ntypedef vec&lt; 1, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0731b593c5e33559954c80f8687e76c6\"></a>\ntypedef vec&lt; 2, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0913bdf048d0cb74af1d2512aec675bc\"></a>\ntypedef vec&lt; 3, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9df1d0c425852cf63a57e533b7a83f4f\"></a>\ntypedef vec&lt; 4, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a7eeae43cb7673e14cc89bf02f7dd45\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaef26dfe3855a91644665b55c9096a8c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7c9d4ab7ab651cdf8001fe7843e238b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa0d2b8a75f1908dcf32c27f8524bdced\"></a>\ntypedef mat&lt; 2, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8f6abb2c9994850b5d5c04a5f979ed8\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab069b2fc2ec785fc4e193cf26c022679\"></a>\ntypedef mat&lt; 3, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga66073b1ddef34b681741f572338ddb8e\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga683c8ca66de323ea533a760abedd0efc\"></a>\ntypedef mat&lt; 3, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacaa7407ea00ffdd322ce86a57adb547e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga93a23ca3d42818d56e0702213c66354b\"></a>\ntypedef mat&lt; 4, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacab7374b560745cb1d0a306a90353f58\"></a>\ntypedef mat&lt; 4, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacab7374b560745cb1d0a306a90353f58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fbfba14368b742972d3b58a0a303682\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf0448b0f7ceb8273f7eda3a92205eefc\"></a>\ntypedef vec&lt; 1, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab173a333e6b7ce153ceba66ac4a321cf\"></a>\ntypedef vec&lt; 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae94ef61edfa047d05bc69b6065fc42ba\"></a>\ntypedef vec&lt; 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fad35c5677f228e261fe541f15363a4\"></a>\ntypedef vec&lt; 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63b8c5b4dc0500d54d7414ef555178f\"></a>\ntypedef vec&lt; 1, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41563650f36cb7f479e080de21e08418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga41563650f36cb7f479e080de21e08418\"></a>\ntypedef vec&lt; 2, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga41563650f36cb7f479e080de21e08418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga41563650f36cb7f479e080de21e08418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6eca5170bb35eac90b4972590fd31a06\"></a>\ntypedef vec&lt; 3, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31bfa801e1579fdba752ec3f7a45ec91\"></a>\ntypedef vec&lt; 4, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf9db5e8a929c317da5aa12cc53741b63\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a></td></tr>\n<tr class=\"memdesc:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab559d943abf92bc588bcd3f4c0e4664b\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga50c9af5aa3a848956d625fc64dc8488e\"></a>\ntypedef mat&lt; 2, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0edcfdd179f8a158342eead48a4d0c2a\"></a>\ntypedef mat&lt; 2, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabab3afcc04459c7b123604ae5dc663f6\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9fc2167b47c9be9295f2d8eea7f0ca75\"></a>\ntypedef mat&lt; 3, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f7b8c99ba6f2d07c73a195a8143c259\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52e00afd0eb181e6738f40cf41787049\"></a>\ntypedef mat&lt; 3, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058ae939bfdbcbb80521dd4a3b01afba\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga84e1f5e0718952a079b748825c03f956\"></a>\ntypedef mat&lt; 4, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga84e1f5e0718952a079b748825c03f956\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafff1684c4ff19b4a818138ccacc1e78d\"></a>\ntypedef mat&lt; 4, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga40d49648083a0498a12a4bb41ae6ece8\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b80e28396c6ef7d32c6fd18df498451\"></a>\ntypedef vec&lt; 1, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04db692662a4908beeaf5a5ba6e19483\"></a>\ntypedef vec&lt; 2, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga073fd6e8b241afade6d8afbd676b2667\"></a>\ntypedef vec&lt; 3, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd60462042859f876c17c7346c732a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd60462042859f876c17c7346c732a5\"></a>\ntypedef vec&lt; 4, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gabdd60462042859f876c17c7346c732a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabdd60462042859f876c17c7346c732a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d0bd70d5fac49b800546d608b707513\"></a>\ntypedef vec&lt; 1, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9f8482dde741fb6bab7248b81a45465\"></a>\ntypedef vec&lt; 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a></td></tr>\n<tr class=\"memdesc:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65415d2d68c9cc0ca554524a8f5510b2\"></a>\ntypedef vec&lt; 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cb26d354dd69d23849c34c4fba88da9\"></a>\ntypedef vec&lt; 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga76298aed82a439063c3d55980c84aa0b\"></a>\ntypedef aligned_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a></td></tr>\n<tr class=\"memdesc:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4f38fd2c86cee6940986197777b3ca4\"></a>\ntypedef aligned_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a></td></tr>\n<tr class=\"memdesc:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga32794322d294e5ace7fed4a61896f270\"></a>\ntypedef aligned_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a></td></tr>\n<tr class=\"memdesc:ga32794322d294e5ace7fed4a61896f270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f79eae5927c9033d84617e49f6f34e4\"></a>\ntypedef aligned_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a></td></tr>\n<tr class=\"memdesc:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac6036449ab1c4abf8efe1ea00fcdd1c9\"></a>\ntypedef vec&lt; 1, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59fadcd3835646e419372ae8b43c5d37\"></a>\ntypedef vec&lt; 2, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga83aab4d191053f169c93a3e364f2e118\"></a>\ntypedef vec&lt; 3, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7a76555ee4853614e5755181a8dd54e\"></a>\ntypedef vec&lt; 4, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a90173d8faa9816dc852ce447d66ca\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07cb8e846666cbf56045b064fb553d2e\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7a4536b6e1f2ebb690f63816b5d7e48b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0cf4f7c9a264941519acad286e055ea\"></a>\ntypedef mat&lt; 2, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac00e15efded8a57c9dec3aed0fb547e7\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa281a47d5d627313984d0f8df993b648\"></a>\ntypedef mat&lt; 3, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gaa281a47d5d627313984d0f8df993b648\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f3148a72355e39932d6855baca42ebc\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea3ccc5ef5b178e6e49b4fa1427605d3\"></a>\ntypedef mat&lt; 3, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab92c6d7d58d43dfb8147e9aedfe8351b\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf806dfdaffb2e9f7681b1cd2825898ce\"></a>\ntypedef mat&lt; 4, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0931ac7807fa1428c7bbf249efcdf0d\"></a>\ntypedef mat&lt; 4, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8220a93d2fca2dd707821b4ab6f809e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f8a2cc5a686e52b1615761f4978ca62\"></a>\ntypedef vec&lt; 1, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e37cff4a43cca866101f0a35f01db6d\"></a>\ntypedef vec&lt; 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9e669c4efd52d3347fc6d5f6b20fd59\"></a>\ntypedef vec&lt; 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga226f5ec7a953cea559c16fe3aff9924f\"></a>\ntypedef vec&lt; 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1101d3a82b2e3f5f8828bd8f3adab3e1\"></a>\ntypedef vec&lt; 1, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga44c4accad582cfbd7226a19b83b0cadc\"></a>\ntypedef vec&lt; 2, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65663f10a02e52cedcddbcfe36ddf38d\"></a>\ntypedef vec&lt; 3, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaae92fcec8b2e0328ffbeac31cc4fc419\"></a>\ntypedef vec&lt; 4, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga17c424412207b00dba1cf587b099eea3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga17c424412207b00dba1cf587b099eea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e44aeb930a47f9cbf2db15b56433b0f\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7dec6d96bc61312b1e56d137c9c74030\"></a>\ntypedef mat&lt; 2, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa694fab1f8df5f658846573ba8ffc563\"></a>\ntypedef mat&lt; 2, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1eb9076cc28ead5020fd3029fd0472c5\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d6639f0bd777bae1ee0eba71cd7bfdc\"></a>\ntypedef mat&lt; 3, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeaab04e378a90956eec8d68a99d777ed\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f03696ab066572c6c044e63edf635a2\"></a>\ntypedef mat&lt; 3, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga25ea2f684e36aa5e978b4f2f86593824\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2cb16c3fdfb15e0719d942ee3b548bc4\"></a>\ntypedef mat&lt; 4, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e96981e872f17a780d9f1c22dc1f512\"></a>\ntypedef mat&lt; 4, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadae3dcfc22d28c64d0548cbfd9d08719\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad09b93acc43c43423408d17a64f6d7ca\"></a>\ntypedef vec&lt; 1, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6f94fcd28dde906fc6cad5f742b55c1a\"></a>\ntypedef vec&lt; 2, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e9f006970b1a00862e3e6e599eedd4c\"></a>\ntypedef vec&lt; 3, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46b1b0b9eb8625a5d69137bd66cd13dc\"></a>\ntypedef vec&lt; 4, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab34aee3d5e121c543fea11d2c50ecc43\"></a>\ntypedef vec&lt; 1, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53ac5d252317f1fa43c2ef921857bf13\"></a>\ntypedef vec&lt; 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f0b5cd65fce164ff1367c2a3b3aa1e\"></a>\ntypedef vec&lt; 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga82f7275d6102593a69ce38cdad680409\"></a>\ntypedef vec&lt; 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga82f7275d6102593a69ce38cdad680409\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a8a5f8c47cd7d5502dd9932f83472b9\"></a>\ntypedef aligned_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a></td></tr>\n<tr class=\"memdesc:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabb04f459d81d753d278b2072e2375e8e\"></a>\ntypedef aligned_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a></td></tr>\n<tr class=\"memdesc:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga832476bb1c59ef673db37433ff34e399\"></a>\ntypedef aligned_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga832476bb1c59ef673db37433ff34e399\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadab11a7504430825b648ff7c7e36b725\"></a>\ntypedef aligned_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a></td></tr>\n<tr class=\"memdesc:gadab11a7504430825b648ff7c7e36b725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43a92a24ca863e0e0f3b65834b3cf714\"></a>\ntypedef aligned_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a></td></tr>\n<tr class=\"memdesc:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c0df24ba85eafafc0eb0c90690510ed\"></a>\ntypedef aligned_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb065dbe5c11271fef8cf2ea8608f187\"></a>\ntypedef aligned_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a></td></tr>\n<tr class=\"memdesc:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88061c72c997b94c420f2b0a60d9df26\"></a>\ntypedef aligned_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0fddcf95dd51cbcbf624ea7c40dfeb8\"></a>\ntypedef aligned_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a></td></tr>\n<tr class=\"memdesc:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9a2d0fb815fd5c2bd58b869c55e32d3\"></a>\ntypedef aligned_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a></td></tr>\n<tr class=\"memdesc:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga452bbbfd26e244de216e4d004d50bb74\"></a>\ntypedef aligned_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8b8fb86973a0b768c5bd802c92fac1a1\"></a>\ntypedef aligned_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd3b8bd71a758f7fb0da8e525156f34e\"></a>\ntypedef vec&lt; 1, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb183eb5e67ec0d0ea5a016cba962810\"></a>\ntypedef vec&lt; 2, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacfa4a542f1b20a5b63ad702dfb6fd587\"></a>\ntypedef vec&lt; 3, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga91bc1f513bb9b0fd60281d57ded9a48c\"></a>\ntypedef vec&lt; 4, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga62a2dfd668c91072b72c3109fc6cda28\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9b7feec247d378dd407ba81f56ea96c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafcb189f4f93648fe7ca802ca4aca2eb8\"></a>\ntypedef mat&lt; 2, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92f8873e3bbd5ca1323c8bbe5725cc5e\"></a>\ntypedef mat&lt; 2, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc2832b747c00e0a0df621aba196960\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a97f0355d801de3444d42c1d5b40438\"></a>\ntypedef mat&lt; 3, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga649d0acf01054b17e679cf00e150e025\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga649d0acf01054b17e679cf00e150e025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45e155a4840f69b2fa4ed8047a676860\"></a>\ntypedef mat&lt; 3, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9376d82f0e946e25137eb55543e6ce\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc25e547f4de4af62403492532cd1b6d\"></a>\ntypedef mat&lt; 4, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae84f4763ecdc7457ecb7930bad12057c\"></a>\ntypedef mat&lt; 4, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa292ebaa907afdecb2d5967fb4fb1247\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7180b685c581adb224406a7f831608e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7180b685c581adb224406a7f831608e3\"></a>\ntypedef vec&lt; 1, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7180b685c581adb224406a7f831608e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7180b685c581adb224406a7f831608e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9af1eabe22f569e70d9893be72eda0f5\"></a>\ntypedef vec&lt; 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058e7ddab1428e47f2197bdd3a5a6953\"></a>\ntypedef vec&lt; 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaffd747ea2aea1e69c2ecb04e68521b21\"></a>\ntypedef vec&lt; 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20e63dd980b81af10cadbbe219316650\"></a>\ntypedef vec&lt; 1, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga20e63dd980b81af10cadbbe219316650\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea13d89d49daca2c796aeaa82fc2c2f2\"></a>\ntypedef vec&lt; 2, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabbf0f15e9c3d9868e43241ad018f82bd\"></a>\ntypedef vec&lt; 3, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6099dd7878d0a78101a4250d8cd2d736\"></a>\ntypedef vec&lt; 4, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf6f041b212c57664d88bc6aefb7e36f3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04bf49316ee777d42fcfe681ee37d7be\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga26a0b61e444a51a37b9737cf4d84291b\"></a>\ntypedef mat&lt; 2, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga163facc9ed2692ea1300ed57c5d12b17\"></a>\ntypedef mat&lt; 2, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3b76ba17ae5d53debeb6f7e55919a57c\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80dee705d714300378e0847f45059097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga80dee705d714300378e0847f45059097\"></a>\ntypedef mat&lt; 3, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga80dee705d714300378e0847f45059097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga80dee705d714300378e0847f45059097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga721f5404caf40d68962dcc0529de71d9\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f4dc6722a2541a990918c074075359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f4dc6722a2541a990918c074075359\"></a>\ntypedef mat&lt; 3, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga98f4dc6722a2541a990918c074075359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f4dc6722a2541a990918c074075359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeefee8317192174596852ce19b602720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeefee8317192174596852ce19b602720\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gaeefee8317192174596852ce19b602720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeefee8317192174596852ce19b602720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f372a006345c252a41267657cc22c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46f372a006345c252a41267657cc22c0\"></a>\ntypedef mat&lt; 4, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga46f372a006345c252a41267657cc22c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga46f372a006345c252a41267657cc22c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0effece4545acdebdc2a5512a303110e\"></a>\ntypedef mat&lt; 4, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga0effece4545acdebdc2a5512a303110e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga312864244cae4e8f10f478cffd0f76de\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb78126ea2eb779b41c7511128ff1283\"></a>\ntypedef vec&lt; 1, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga081d53e0a71443d0b68ea61c870f9adc\"></a>\ntypedef vec&lt; 2, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6fc921bdde2bdbc7e09b028e1e9b379\"></a>\ntypedef vec&lt; 3, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73ea0c1ba31580e107d21270883f51fc\"></a>\ntypedef vec&lt; 4, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b797eec76fa471e300158f3453b3b2e\"></a>\ntypedef vec&lt; 1, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga026a55ddbf2bafb1432f1157a2708616\"></a>\ntypedef vec&lt; 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a25e494173f6a64637b08a1b50a2132\"></a>\ntypedef vec&lt; 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga320d1c661cff2ef214eb50241f2928b2\"></a>\ntypedef vec&lt; 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ff8ed402c93d280ff0597c1c5e7c548\"></a>\ntypedef aligned_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a></td></tr>\n<tr class=\"memdesc:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga074137e3be58528d67041c223d49f398\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga074137e3be58528d67041c223d49f398\"></a>\ntypedef aligned_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a></td></tr>\n<tr class=\"memdesc:ga074137e3be58528d67041c223d49f398\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga074137e3be58528d67041c223d49f398\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a8d9c3046f89d854eb758adfa0811c0\"></a>\ntypedef aligned_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a></td></tr>\n<tr class=\"memdesc:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabf842c45eea186170c267a328e3f3b7d\"></a>\ntypedef aligned_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a></td></tr>\n<tr class=\"memdesc:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05e6d4c908965d04191c2070a8d0a65e\"></a>\ntypedef aligned_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a></td></tr>\n<tr class=\"memdesc:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0682462f8096a226773e20fac993cde5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0682462f8096a226773e20fac993cde5\"></a>\ntypedef aligned_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a></td></tr>\n<tr class=\"memdesc:ga0682462f8096a226773e20fac993cde5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0682462f8096a226773e20fac993cde5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cf643b66664e0cd3c48759ae66c2bd0\"></a>\ntypedef aligned_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a></td></tr>\n<tr class=\"memdesc:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga85d89e83cb8137e1be1446de8c3b643a\"></a>\ntypedef aligned_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a></td></tr>\n<tr class=\"memdesc:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88632cea9008ac0ac1388e94e804a53c\"></a>\ntypedef packed_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a></td></tr>\n<tr class=\"memdesc:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab85245913eaa40ab82adabcae37086cb\"></a>\ntypedef packed_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a></td></tr>\n<tr class=\"memdesc:gab85245913eaa40ab82adabcae37086cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c48f9417f649e27f3fb0c9f733a18bd\"></a>\ntypedef packed_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3180d7db84a74c402157df3bbc0ae3ed\"></a>\ntypedef packed_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a></td></tr>\n<tr class=\"memdesc:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad87408a8350918711f845f071bbe43fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad87408a8350918711f845f071bbe43fb\"></a>\ntypedef packed_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a></td></tr>\n<tr class=\"memdesc:gad87408a8350918711f845f071bbe43fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad87408a8350918711f845f071bbe43fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa33d8e06657a777efb0c72c44ce87a9\"></a>\ntypedef packed_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3a5315f588ba04ad255188071ec4e22\"></a>\ntypedef packed_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae398fc3156f51d3684b08f62c1a5a6d4\"></a>\ntypedef packed_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03dfc90d539cc87ea3a15a9caa5d2245\"></a>\ntypedef packed_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a></td></tr>\n<tr class=\"memdesc:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae36de20a4c0e0b1444b7903ae811d94e\"></a>\ntypedef packed_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9b909f1392d86854334350efcae85f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9b909f1392d86854334350efcae85f5\"></a>\ntypedef packed_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gab9b909f1392d86854334350efcae85f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab9b909f1392d86854334350efcae85f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga199131fd279c92c2ac12df6d978f1dd6\"></a>\ntypedef packed_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada980a3485640aa8151f368f17ad3086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gada980a3485640aa8151f368f17ad3086\"></a>\ntypedef packed_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a></td></tr>\n<tr class=\"memdesc:gada980a3485640aa8151f368f17ad3086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gada980a3485640aa8151f368f17ad3086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc65249730698d3cc9ac5d7e1bc4d72\"></a>\ntypedef packed_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadf202aaa9ed71c09f9bbe347e43f8764\"></a>\ntypedef packed_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae20617435a6d042d7c38da2badd64a09\"></a>\ntypedef packed_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gae20617435a6d042d7c38da2badd64a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga532f0c940649b1ee303acd572fc35531\"></a>\ntypedef packed_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a></td></tr>\n<tr class=\"memdesc:ga532f0c940649b1ee303acd572fc35531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c194b11fbda636f2ab20c3bd0079196\"></a>\ntypedef packed_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0581ea552d86b2b5de7a2804bed80e72\"></a>\ntypedef packed_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a></td></tr>\n<tr class=\"memdesc:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a9b181f9dc813ad6e125a52b14b935\"></a>\ntypedef packed_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a></td></tr>\n<tr class=\"memdesc:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga439e97795314b81cd15abd4e5c2e6e7a\"></a>\ntypedef vec&lt; 1, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad791d671f4fcf1ed1ea41f752916b70a\"></a>\ntypedef vec&lt; 2, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6a5a3250b57dfadc66735bc72911437f\"></a>\ntypedef vec&lt; 3, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09f517d88b996ef1b2f42fd54222b82d\"></a>\ntypedef vec&lt; 4, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae29686632fd05efac0675d9a6370d77b\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:gae29686632fd05efac0675d9a6370d77b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga22bd6382b16052e301edbfc031b9f37a\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga999d82719696d4c59f4d236dd08f273d\"></a>\ntypedef mat&lt; 2, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6998ac2a8d7fe456b651a6336ed26bb0\"></a>\ntypedef mat&lt; 2, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadac7c040c4810dd52b36fcd09d097400\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab462744977beb85fb5c782bc2eea7b15\"></a>\ntypedef mat&lt; 3, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga49e5a709d098523823b2f824e48672a6\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga49e5a709d098523823b2f824e48672a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c67b3b0adab71c8680c3d819f1fa9b7\"></a>\ntypedef mat&lt; 3, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6718822cd7af005a9b5bd6ee282f6ba6\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga12e39e797fb724a5b51fcbea2513a7da\"></a>\ntypedef mat&lt; 4, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79c2e9f82e67963c1ecad0ad6d0ec72e\"></a>\ntypedef mat&lt; 4, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2df58e03e5afded28707b4f7d077afb4\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab472b2d917b5e6efd76e8c7dbfbbf9f1\"></a>\ntypedef vec&lt; 1, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b2dc48fa19b684d207d69c6b145eb63\"></a>\ntypedef vec&lt; 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaac6b356ef00154da41aaae7d1549193\"></a>\ntypedef vec&lt; 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga81b5368fe485e2630aa9b44832d592e7\"></a>\ntypedef vec&lt; 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7245acc887a5438f46fd85fdf076bb3b\"></a>\ntypedef vec&lt; 1, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga54f368ec6b514a5aa4f28d40e6f93ef7\"></a>\ntypedef vec&lt; 2, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga865a9c7bb22434b1b8c5ac31e164b628\"></a>\ntypedef vec&lt; 3, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6f1b4e3a51c2c051814b60d5d1b8895\"></a>\ntypedef vec&lt; 4, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f2d913d8cca2f935b2522964408c0b2\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga245c12d2daf67feecaa2d3277c8f6661\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069cc8892aadae144c00f35297617d44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga069cc8892aadae144c00f35297617d44\"></a>\ntypedef mat&lt; 2, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga069cc8892aadae144c00f35297617d44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga069cc8892aadae144c00f35297617d44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6904d09b62141d09712b76983892f95b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6904d09b62141d09712b76983892f95b\"></a>\ntypedef mat&lt; 2, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga6904d09b62141d09712b76983892f95b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6904d09b62141d09712b76983892f95b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd5fbffe8b8b8a7b33523f25b120dbe\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2624719cb251d8de8cad1beaefc3a3f9\"></a>\ntypedef mat&lt; 3, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf2e07527d678440bf0c20adbeb9177c5\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga72102fa6ac2445aa3bb203128ad52449\"></a>\ntypedef mat&lt; 3, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga253e8379b08d2dc6fe2800b2fb913203\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae389c2071cf3cdb33e7812c6fd156710\"></a>\ntypedef mat&lt; 4, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4584f64394bd7123b7a8534741e4916c\"></a>\ntypedef mat&lt; 4, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0149fe15668925147e07c94fd2c2d6ae\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8c32b53f628a3616aa5061e58d66fe74\"></a>\ntypedef vec&lt; 1, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab704d4fb15f6f96d70e363d5db7060cd\"></a>\ntypedef vec&lt; 2, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0b570da473fec4619db5aa0dce5133b0\"></a>\ntypedef vec&lt; 3, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa582f38c82aef61dea7aaedf15bb06a6\"></a>\ntypedef vec&lt; 4, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga56473759d2702ee19ab7f91d0017fa70\"></a>\ntypedef vec&lt; 1, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b8b9475e7c3b16aed13edbc460bbc4d\"></a>\ntypedef vec&lt; 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a></td></tr>\n<tr class=\"memdesc:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3815661df0e2de79beff8168c09adf1e\"></a>\ntypedef vec&lt; 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4015f36bf5a5adb6ac5d45beed959867\"></a>\ntypedef vec&lt; 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga11581a06fc7bf941fa4d4b6aca29812c\"></a>\ntypedef packed_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a></td></tr>\n<tr class=\"memdesc:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fe4c5f56b8087d773aa90dc88a257a7\"></a>\ntypedef packed_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a></td></tr>\n<tr class=\"memdesc:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae157682a7847161787951ba1db4cf325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae157682a7847161787951ba1db4cf325\"></a>\ntypedef packed_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a></td></tr>\n<tr class=\"memdesc:gae157682a7847161787951ba1db4cf325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae157682a7847161787951ba1db4cf325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac228b70372abd561340d5f926a7c1778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac228b70372abd561340d5f926a7c1778\"></a>\ntypedef packed_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a></td></tr>\n<tr class=\"memdesc:gac228b70372abd561340d5f926a7c1778\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gac228b70372abd561340d5f926a7c1778\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae3c8750f53259ece334d3aa3b3649a40\"></a>\ntypedef vec&lt; 1, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac969befedbda69eb78d4e23f751fdbee\"></a>\ntypedef vec&lt; 2, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7c20adbe1409e3fe4544677a7f6fe954\"></a>\ntypedef vec&lt; 3, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae473587cff3092edc0877fc691c26a0b\"></a>\ntypedef vec&lt; 4, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gae473587cff3092edc0877fc691c26a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac93f9b1a35b9de4f456b9f2dfeaf1097\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeeaff6c132ec91ebd21da3a2399548ea\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ccdcd4846775cbe4f9d12e71d55b5d2\"></a>\ntypedef mat&lt; 2, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac870c47d2d9d48503f6c9ee3baec8ce1\"></a>\ntypedef mat&lt; 2, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3894a059eeaacec8791c25de398d9955\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga3894a059eeaacec8791c25de398d9955\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23ec236950f5859f59197663266b535d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga23ec236950f5859f59197663266b535d\"></a>\ntypedef mat&lt; 3, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga23ec236950f5859f59197663266b535d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga23ec236950f5859f59197663266b535d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fc0e66da83599071b7ec17510686cd9\"></a>\ntypedef mat&lt; 3, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03e1edf5666c40affe39aee35c87956f\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39658fb13369db869d363684bd8399c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39658fb13369db869d363684bd8399c0\"></a>\ntypedef mat&lt; 4, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga39658fb13369db869d363684bd8399c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39658fb13369db869d363684bd8399c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga30b0351eebc18c6056101359bdd3a359\"></a>\ntypedef mat&lt; 4, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0294d4c45151425c86a11deee7693c0e\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga054050e9d4e78d81db0e6d1573b1c624\"></a>\ntypedef vec&lt; 1, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadc19938ddb204bfcb4d9ef35b1e2bf93\"></a>\ntypedef vec&lt; 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9189210cabd6651a5e14a4c46fb20598\"></a>\ntypedef vec&lt; 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga262dafd0c001c3a38d1cc91d024ca738\"></a>\ntypedef vec&lt; 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf22b77f1cf3e73b8b1dddfe7f959357c\"></a>\ntypedef vec&lt; 1, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52635859f5ef660ab999d22c11b7867f\"></a>\ntypedef vec&lt; 2, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98c9d122a959e9f3ce10a5623c310f5d\"></a>\ntypedef vec&lt; 3, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga931731b8ae3b54c7ecc221509dae96bc\"></a>\ntypedef vec&lt; 4, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70dcb9ef0b24e832772a7405efa9669a\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac70667c7642ec8d50245e6e6936a3927\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3e7df5a11e1be27bc29a4c0d3956f234\"></a>\ntypedef mat&lt; 2, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea9c555e669dc56c45d95dcc75d59bf3\"></a>\ntypedef mat&lt; 2, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0d22400969dd223465b2900fecfb4f53\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga128cd52649621861635fab746df91735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga128cd52649621861635fab746df91735\"></a>\ntypedef mat&lt; 3, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga128cd52649621861635fab746df91735\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga128cd52649621861635fab746df91735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5adf1802c5375a9dfb1729691bedd94e\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92247ca09fa03c4013ba364f3a0fca7f\"></a>\ntypedef mat&lt; 3, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a1dd2387725a335413d4c4fee8609c4\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8f22607dcd090cd280071ccc689f4079\"></a>\ntypedef mat&lt; 4, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7661d759d6ad218e132e3d051e7b2c6c\"></a>\ntypedef mat&lt; 4, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga776f18d1a6e7d399f05d386167dc60f5\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf111fed760ecce16cb1988807569bee5\"></a>\ntypedef vec&lt; 1, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gaf111fed760ecce16cb1988807569bee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga958210fe245a75b058325d367c951132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga958210fe245a75b058325d367c951132\"></a>\ntypedef vec&lt; 2, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga958210fe245a75b058325d367c951132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga958210fe245a75b058325d367c951132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga576a3f8372197a56a79dee1c8280f485\"></a>\ntypedef vec&lt; 3, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafdd97922b4a2a42cd0c99a13877ff4da\"></a>\ntypedef vec&lt; 4, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a6198fe64166a6a61084d43c71518a9\"></a>\ntypedef vec&lt; 1, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafbf1c2cce307c5594b165819ed83bf5d\"></a>\ntypedef vec&lt; 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a30c137c1f8cce478c28eab0427a570\"></a>\ntypedef vec&lt; 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3cc94fb8de80bbd8a4aa7a5b206d304a\"></a>\ntypedef vec&lt; 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd019b43fcf42e1590d45dddaa504a1a\"></a>\ntypedef packed_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a></td></tr>\n<tr class=\"memdesc:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga51eaadcdc292c8750f746a5dc3e6c517\"></a>\ntypedef packed_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga301b76a89b8a9625501ca58815017f20\"></a>\ntypedef packed_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga301b76a89b8a9625501ca58815017f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac401da1dd9177ad81d7618a2a5541e23\"></a>\ntypedef packed_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a></td></tr>\n<tr class=\"memdesc:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bc12b0ab7be8448836711b77cc7b83a\"></a>\ntypedef packed_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a></td></tr>\n<tr class=\"memdesc:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga134f0d99fbd2459c13cd9ebd056509fa\"></a>\ntypedef packed_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c1dbe8cde9fbb231284b01f8aeaaa99\"></a>\ntypedef packed_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63515526cccfe88ffa8fe5ed64f95f8\"></a>\ntypedef packed_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a></td></tr>\n<tr class=\"memdesc:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c139854e5b04cf08a957dee3b510441\"></a>\ntypedef packed_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a></td></tr>\n<tr class=\"memdesc:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga379c1153f1339bdeaefd592bebf538e8\"></a>\ntypedef packed_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab286466e19f7399c8d25089da9400d43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab286466e19f7399c8d25089da9400d43\"></a>\ntypedef packed_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a></td></tr>\n<tr class=\"memdesc:gab286466e19f7399c8d25089da9400d43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab286466e19f7399c8d25089da9400d43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga67e7102557d6067bb6ac00d4ad0e1374\"></a>\ntypedef packed_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5546d828d63010a8f9cf81161ad0275a\"></a>\ntypedef vec&lt; 1, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab4c6414a59539e66a242ad4cf4b476b4\"></a>\ntypedef vec&lt; 2, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70147763edff3fe96b03a0b98d6339a2\"></a>\ntypedef vec&lt; 3, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b1620f259595b9da47a6374fc44588a\"></a>\ntypedef vec&lt; 4, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9d60e32d3fcb51f817046cd881fdbf57\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39e8bb9b70e5694964e8266a21ba534e\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8897c6d9adb4140b1c3b0a07b8f0a430\"></a>\ntypedef mat&lt; 2, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa4126969c765e7faa2ebf6951c22ffb\"></a>\ntypedef mat&lt; 2, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf969eb879c76a5f4576e4a1e10095cf6\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga86efe91cdaa2864c828a5d6d46356c6a\"></a>\ntypedef mat&lt; 3, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf85877d38d8cfbc21d59d939afd72375\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad5dcaf93df267bc3029174e430e0907f\"></a>\ntypedef mat&lt; 3, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4b0ee7996651ddd04eaa0c4cdbb66332\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9a15514a0631f700de6312b9d5db3a73\"></a>\ntypedef mat&lt; 4, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab5b36cc9caee1bb1c5178fe191bf5713\"></a>\ntypedef mat&lt; 4, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga21e86cf2f6c126bacf31b8985db06bd4\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8920e90ea9c01d9c97e604a938ce2cbd\"></a>\ntypedef vec&lt; 1, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c754a783b6fcf80374c013371c4dae9\"></a>\ntypedef vec&lt; 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f18ada6f7cdd8c46db33ba987280fc4\"></a>\ntypedef vec&lt; 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga568b850f1116b667043533cf77826968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga568b850f1116b667043533cf77826968\"></a>\ntypedef vec&lt; 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga568b850f1116b667043533cf77826968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga568b850f1116b667043533cf77826968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09507ef020a49517a7bcd50438f05056\"></a>\ntypedef vec&lt; 1, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga09507ef020a49517a7bcd50438f05056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa891048dddef4627df33809ec726219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa891048dddef4627df33809ec726219\"></a>\ntypedef vec&lt; 2, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaaa891048dddef4627df33809ec726219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaaa891048dddef4627df33809ec726219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga06f26d54dca30994eb1fdadb8e69f4a2\"></a>\ntypedef vec&lt; 3, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70130dc8ed9c966ec2a221ce586d45d8\"></a>\ntypedef vec&lt; 4, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43cd36d430c5187bfdca34a23cb41581\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d2a73e662759e301c22b8931ff6a526\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99049db01faf1e95ed9fb875a47dffe2\"></a>\ntypedef mat&lt; 2, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad43a240533f388ce0504b495d9df3d52\"></a>\ntypedef mat&lt; 2, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gad43a240533f388ce0504b495d9df3d52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13a75c6cbd0a411f694bc82486cd1e55\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04cfaf1421284df3c24ea0985dab24e7\"></a>\ntypedef mat&lt; 3, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa9cea174d342dd9650e3436823cab23\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc93a9560593bd32e099c908531305f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc93a9560593bd32e099c908531305f5\"></a>\ntypedef mat&lt; 3, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gabc93a9560593bd32e099c908531305f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc93a9560593bd32e099c908531305f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae89d72ffc149147f61df701bbc8755bf\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa458f9d9e0934bae3097e2a373b24707\"></a>\ntypedef mat&lt; 4, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02ca6255394aa778abaeb0f733c4d2b6\"></a>\ntypedef mat&lt; 4, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf304f64c06743c1571401504d3f50259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf304f64c06743c1571401504d3f50259\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf304f64c06743c1571401504d3f50259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf304f64c06743c1571401504d3f50259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c29fb42bab9a4f9b66bc60b2e514a34\"></a>\ntypedef vec&lt; 1, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa1f95690a78dc12e39da32943243aeef\"></a>\ntypedef vec&lt; 2, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ea2bbdbcb0a69242f6d884663c1b0ab\"></a>\ntypedef vec&lt; 3, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga63a73be86a4f07ea7a7499ab0bfebe45\"></a>\ntypedef vec&lt; 4, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga71d63cead1e113fca0bcdaaa33aad050\"></a>\ntypedef vec&lt; 1, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6844c6f4691d1bf67673240850430948\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6844c6f4691d1bf67673240850430948\"></a>\ntypedef vec&lt; 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga6844c6f4691d1bf67673240850430948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6844c6f4691d1bf67673240850430948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0eb771b708c5b2205d9b14dd1434fd8\"></a>\ntypedef vec&lt; 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga68c9bb24f387b312bae6a0a68e74d95e\"></a>\ntypedef vec&lt; 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5621493caac01bdd22ab6be4416b0314\"></a>\ntypedef packed_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabcc33efb4d5e83b8fe4706360e75b932\"></a>\ntypedef packed_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a></td></tr>\n<tr class=\"memdesc:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab96804e99e3a72a35740fec690c79617\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab96804e99e3a72a35740fec690c79617\"></a>\ntypedef packed_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a></td></tr>\n<tr class=\"memdesc:gab96804e99e3a72a35740fec690c79617\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab96804e99e3a72a35740fec690c79617\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"></a>\ntypedef packed_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a></td></tr>\n<tr class=\"memdesc:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14741e3d9da9ae83765389927f837331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga14741e3d9da9ae83765389927f837331\"></a>\ntypedef packed_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a></td></tr>\n<tr class=\"memdesc:ga14741e3d9da9ae83765389927f837331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga14741e3d9da9ae83765389927f837331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3254defa5a8f0ae4b02b45fedba84a66\"></a>\ntypedef packed_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a></td></tr>\n<tr class=\"memdesc:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaccccd090e185450caa28b5b63ad4e8f0\"></a>\ntypedef packed_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a></td></tr>\n<tr class=\"memdesc:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga37a0e0bf653169b581c5eea3d547fa5d\"></a>\ntypedef packed_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a></td></tr>\n<tr class=\"memdesc:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension. </p>\n<p>Aligned types allowing SIMD optimizations of vectors and matrices types </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00304.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a></td></tr>\n<tr class=\"memdesc:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a></td></tr>\n<tr class=\"memdesc:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a></td></tr>\n<tr class=\"memdesc:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">More...</a><br /></td></tr>\n<tr class=\"separator:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a></td></tr>\n<tr class=\"memdesc:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65261fa8a21045c8646ddff114a56174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a></td></tr>\n<tr class=\"memdesc:ga65261fa8a21045c8646ddff114a56174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65261fa8a21045c8646ddff114a56174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a></td></tr>\n<tr class=\"memdesc:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a></td></tr>\n<tr class=\"memdesc:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a></td></tr>\n<tr class=\"memdesc:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a></td></tr>\n<tr class=\"memdesc:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a></td></tr>\n<tr class=\"memdesc:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38e674196ba411d642be40c47bf33939\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a></td></tr>\n<tr class=\"memdesc:ga38e674196ba411d642be40c47bf33939\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point quaternion.  <a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38e674196ba411d642be40c47bf33939\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">More...</a><br /></td></tr>\n<tr class=\"separator:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a></td></tr>\n<tr class=\"memdesc:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a></td></tr>\n<tr class=\"memdesc:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a></td></tr>\n<tr class=\"memdesc:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a></td></tr>\n<tr class=\"memdesc:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a></td></tr>\n<tr class=\"memdesc:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a></td></tr>\n<tr class=\"memdesc:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a></td></tr>\n<tr class=\"memdesc:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a></td></tr>\n<tr class=\"memdesc:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">More...</a><br /></td></tr>\n<tr class=\"separator:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a></td></tr>\n<tr class=\"memdesc:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a></td></tr>\n<tr class=\"memdesc:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a></td></tr>\n<tr class=\"memdesc:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a></td></tr>\n<tr class=\"memdesc:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a></td></tr>\n<tr class=\"memdesc:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point quaternion.  <a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a></td></tr>\n<tr class=\"memdesc:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a></td></tr>\n<tr class=\"memdesc:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a></td></tr>\n<tr class=\"memdesc:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a></td></tr>\n<tr class=\"memdesc:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar.  <a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a></td></tr>\n<tr class=\"memdesc:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a></td></tr>\n<tr class=\"memdesc:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar.  <a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a></td></tr>\n<tr class=\"memdesc:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a></td></tr>\n<tr class=\"memdesc:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3350c93c3275298f940a42875388e4b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga3350c93c3275298f940a42875388e4b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3350c93c3275298f940a42875388e4b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a></td></tr>\n<tr class=\"memdesc:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253d453c20e037730023fea0215cb6f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a></td></tr>\n<tr class=\"memdesc:ga253d453c20e037730023fea0215cb6f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga253d453c20e037730023fea0215cb6f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a></td></tr>\n<tr class=\"memdesc:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a></td></tr>\n<tr class=\"memdesc:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a></td></tr>\n<tr class=\"memdesc:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24273aa02abaecaab7f160bac437a339\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a></td></tr>\n<tr class=\"memdesc:ga24273aa02abaecaab7f160bac437a339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24273aa02abaecaab7f160bac437a339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89930533646b30d021759298aa6bf04a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a></td></tr>\n<tr class=\"memdesc:ga89930533646b30d021759298aa6bf04a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga89930533646b30d021759298aa6bf04a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a></td></tr>\n<tr class=\"memdesc:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a></td></tr>\n<tr class=\"memdesc:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga298f7d4d273678d0282812368da27fda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a></td></tr>\n<tr class=\"memdesc:ga298f7d4d273678d0282812368da27fda\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">More...</a><br /></td></tr>\n<tr class=\"separator:ga298f7d4d273678d0282812368da27fda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aeb5cb001473b08c88175012708a379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:ga0aeb5cb001473b08c88175012708a379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aeb5cb001473b08c88175012708a379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f9ef3263b1638564713892cc37981f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a></td></tr>\n<tr class=\"memdesc:ga24f9ef3263b1638564713892cc37981f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f9ef3263b1638564713892cc37981f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36537e701456f12c20e73f469cac4967\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:ga36537e701456f12c20e73f469cac4967\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36537e701456f12c20e73f469cac4967\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14c90ca49885723f51d06e295587236f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga14c90ca49885723f51d06e295587236f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14c90ca49885723f51d06e295587236f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a></td></tr>\n<tr class=\"memdesc:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point quaternion.  <a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a></td></tr>\n<tr class=\"memdesc:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">More...</a><br /></td></tr>\n<tr class=\"separator:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a></td></tr>\n<tr class=\"memdesc:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a></td></tr>\n<tr class=\"memdesc:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a></td></tr>\n<tr class=\"memdesc:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a></td></tr>\n<tr class=\"memdesc:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a></td></tr>\n<tr class=\"memdesc:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a></td></tr>\n<tr class=\"memdesc:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">More...</a><br /></td></tr>\n<tr class=\"separator:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a></td></tr>\n<tr class=\"memdesc:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">More...</a><br /></td></tr>\n<tr class=\"separator:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58c4631421e323e252fc716b6103e38c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:ga58c4631421e323e252fc716b6103e38c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58c4631421e323e252fc716b6103e38c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94823d65648e44d972863c6caa13103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:gae94823d65648e44d972863c6caa13103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94823d65648e44d972863c6caa13103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcfdd74a115163af2ce1093551747352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a></td></tr>\n<tr class=\"memdesc:gafcfdd74a115163af2ce1093551747352\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point quaternion.  <a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcfdd74a115163af2ce1093551747352\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a></td></tr>\n<tr class=\"memdesc:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a></td></tr>\n<tr class=\"memdesc:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a></td></tr>\n<tr class=\"memdesc:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a></td></tr>\n<tr class=\"memdesc:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a></td></tr>\n<tr class=\"memdesc:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a></td></tr>\n<tr class=\"memdesc:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a></td></tr>\n<tr class=\"memdesc:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae98c88d9a7befa9b5877f49176225535\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a></td></tr>\n<tr class=\"memdesc:gae98c88d9a7befa9b5877f49176225535\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">More...</a><br /></td></tr>\n<tr class=\"separator:gae98c88d9a7befa9b5877f49176225535\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf111095594996fef29067b2454fccad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a></td></tr>\n<tr class=\"memdesc:gacf111095594996fef29067b2454fccad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf111095594996fef29067b2454fccad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a></td></tr>\n<tr class=\"memdesc:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a></td></tr>\n<tr class=\"memdesc:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a></td></tr>\n<tr class=\"memdesc:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a></td></tr>\n<tr class=\"memdesc:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">More...</a><br /></td></tr>\n<tr class=\"separator:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a></td></tr>\n<tr class=\"memdesc:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a></td></tr>\n<tr class=\"memdesc:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a></td></tr>\n<tr class=\"memdesc:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a></td></tr>\n<tr class=\"memdesc:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a></td></tr>\n<tr class=\"memdesc:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a></td></tr>\n<tr class=\"memdesc:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a></td></tr>\n<tr class=\"memdesc:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a></td></tr>\n<tr class=\"memdesc:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a></td></tr>\n<tr class=\"memdesc:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a></td></tr>\n<tr class=\"memdesc:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a></td></tr>\n<tr class=\"memdesc:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a></td></tr>\n<tr class=\"memdesc:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a></td></tr>\n<tr class=\"memdesc:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a></td></tr>\n<tr class=\"memdesc:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a></td></tr>\n<tr class=\"memdesc:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a></td></tr>\n<tr class=\"memdesc:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a></td></tr>\n<tr class=\"memdesc:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a></td></tr>\n<tr class=\"memdesc:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">More...</a><br /></td></tr>\n<tr class=\"separator:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a></td></tr>\n<tr class=\"memdesc:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a></td></tr>\n<tr class=\"memdesc:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a></td></tr>\n<tr class=\"memdesc:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a></td></tr>\n<tr class=\"memdesc:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a></td></tr>\n<tr class=\"memdesc:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a></td></tr>\n<tr class=\"memdesc:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a></td></tr>\n<tr class=\"memdesc:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a></td></tr>\n<tr class=\"memdesc:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a></td></tr>\n<tr class=\"memdesc:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a></td></tr>\n<tr class=\"memdesc:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a></td></tr>\n<tr class=\"memdesc:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a></td></tr>\n<tr class=\"memdesc:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a></td></tr>\n<tr class=\"memdesc:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad064202b4cf9a2972475c03de657cb39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a></td></tr>\n<tr class=\"memdesc:gad064202b4cf9a2972475c03de657cb39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">More...</a><br /></td></tr>\n<tr class=\"separator:gad064202b4cf9a2972475c03de657cb39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">More...</a><br /></td></tr>\n<tr class=\"separator:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a></td></tr>\n<tr class=\"memdesc:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a></td></tr>\n<tr class=\"memdesc:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a></td></tr>\n<tr class=\"memdesc:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a></td></tr>\n<tr class=\"memdesc:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a></td></tr>\n<tr class=\"memdesc:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a></td></tr>\n<tr class=\"memdesc:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c181fdf06a309691999926b6690c969\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a></td></tr>\n<tr class=\"memdesc:ga0c181fdf06a309691999926b6690c969\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c181fdf06a309691999926b6690c969\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a></td></tr>\n<tr class=\"memdesc:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a></td></tr>\n<tr class=\"memdesc:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a></td></tr>\n<tr class=\"memdesc:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a></td></tr>\n<tr class=\"memdesc:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a></td></tr>\n<tr class=\"memdesc:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a></td></tr>\n<tr class=\"memdesc:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a></td></tr>\n<tr class=\"memdesc:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga746dc6da204f5622e395f492997dbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a></td></tr>\n<tr class=\"memdesc:ga746dc6da204f5622e395f492997dbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga746dc6da204f5622e395f492997dbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a></td></tr>\n<tr class=\"memdesc:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a></td></tr>\n<tr class=\"memdesc:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a></td></tr>\n<tr class=\"memdesc:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a></td></tr>\n<tr class=\"memdesc:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a></td></tr>\n<tr class=\"memdesc:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a></td></tr>\n<tr class=\"memdesc:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a></td></tr>\n<tr class=\"memdesc:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a></td></tr>\n<tr class=\"memdesc:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type.  <a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe730798732aa7b0647096a004db1b1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a></td></tr>\n<tr class=\"memdesc:gafe730798732aa7b0647096a004db1b1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer scalar type.  <a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe730798732aa7b0647096a004db1b1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2996630ba7b10535af8e065cf326f761\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a></td></tr>\n<tr class=\"memdesc:ga2996630ba7b10535af8e065cf326f761\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2996630ba7b10535af8e065cf326f761\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a></td></tr>\n<tr class=\"memdesc:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a></td></tr>\n<tr class=\"memdesc:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">More...</a><br /></td></tr>\n<tr class=\"separator:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a></td></tr>\n<tr class=\"memdesc:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a></td></tr>\n<tr class=\"memdesc:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer scalar type.  <a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a></td></tr>\n<tr class=\"memdesc:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a></td></tr>\n<tr class=\"memdesc:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a></td></tr>\n<tr class=\"memdesc:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb997e409103d4da18abd837e636a496\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a></td></tr>\n<tr class=\"memdesc:gadb997e409103d4da18abd837e636a496\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type.  <a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb997e409103d4da18abd837e636a496\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a></td></tr>\n<tr class=\"memdesc:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer scalar type.  <a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a></td></tr>\n<tr class=\"memdesc:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a></td></tr>\n<tr class=\"memdesc:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a></td></tr>\n<tr class=\"memdesc:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a></td></tr>\n<tr class=\"memdesc:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type.  <a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">More...</a><br /></td></tr>\n<tr class=\"separator:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a></td></tr>\n<tr class=\"memdesc:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer scalar type.  <a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad06935764d78f43f9d542c784c2212ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a></td></tr>\n<tr class=\"memdesc:gad06935764d78f43f9d542c784c2212ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gad06935764d78f43f9d542c784c2212ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a></td></tr>\n<tr class=\"memdesc:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a></td></tr>\n<tr class=\"memdesc:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a></td></tr>\n<tr class=\"memdesc:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type.  <a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a></td></tr>\n<tr class=\"memdesc:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">More...</a><br /></td></tr>\n<tr class=\"separator:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a></td></tr>\n<tr class=\"memdesc:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type.  <a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a></td></tr>\n<tr class=\"memdesc:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type.  <a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeea53879fc327293cf3352a409b7867b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a></td></tr>\n<tr class=\"memdesc:gaeea53879fc327293cf3352a409b7867b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeea53879fc327293cf3352a409b7867b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a></td></tr>\n<tr class=\"memdesc:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4187f89f196505b40e63f516139511e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a></td></tr>\n<tr class=\"memdesc:ga4187f89f196505b40e63f516139511e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4187f89f196505b40e63f516139511e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">More...</a><br /></td></tr>\n<tr class=\"separator:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga766aed2871e6173a81011a877f398f04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga766aed2871e6173a81011a877f398f04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">More...</a><br /></td></tr>\n<tr class=\"separator:ga766aed2871e6173a81011a877f398f04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac21eda58a1475449a5709b412ebd776c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:gac21eda58a1475449a5709b412ebd776c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac21eda58a1475449a5709b412ebd776c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4143d129898f91545948c46859adce44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:ga4143d129898f91545948c46859adce44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4143d129898f91545948c46859adce44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a></td></tr>\n<tr class=\"memdesc:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a></td></tr>\n<tr class=\"memdesc:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a></td></tr>\n<tr class=\"memdesc:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a></td></tr>\n<tr class=\"memdesc:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a></td></tr>\n<tr class=\"memdesc:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a></td></tr>\n<tr class=\"memdesc:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a></td></tr>\n<tr class=\"memdesc:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a></td></tr>\n<tr class=\"memdesc:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">More...</a><br /></td></tr>\n<tr class=\"separator:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7451266e67794bd1125163502bc4a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a></td></tr>\n<tr class=\"memdesc:ga7451266e67794bd1125163502bc4a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7451266e67794bd1125163502bc4a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a></td></tr>\n<tr class=\"memdesc:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a></td></tr>\n<tr class=\"memdesc:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a></td></tr>\n<tr class=\"memdesc:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a></td></tr>\n<tr class=\"memdesc:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a></td></tr>\n<tr class=\"memdesc:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a></td></tr>\n<tr class=\"memdesc:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a></td></tr>\n<tr class=\"memdesc:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a></td></tr>\n<tr class=\"memdesc:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a></td></tr>\n<tr class=\"memdesc:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a></td></tr>\n<tr class=\"memdesc:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a></td></tr>\n<tr class=\"memdesc:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab217601c74974a84acbca428123ecf7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a></td></tr>\n<tr class=\"memdesc:gaab217601c74974a84acbca428123ecf7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab217601c74974a84acbca428123ecf7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a></td></tr>\n<tr class=\"memdesc:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49b98e7d71804af45d86886a489e633c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga49b98e7d71804af45d86886a489e633c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49b98e7d71804af45d86886a489e633c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28733aec7288191b314d42154fd0b690\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga28733aec7288191b314d42154fd0b690\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28733aec7288191b314d42154fd0b690\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a></td></tr>\n<tr class=\"memdesc:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a></td></tr>\n<tr class=\"memdesc:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a></td></tr>\n<tr class=\"memdesc:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a></td></tr>\n<tr class=\"memdesc:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a></td></tr>\n<tr class=\"memdesc:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a></td></tr>\n<tr class=\"memdesc:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a></td></tr>\n<tr class=\"memdesc:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a></td></tr>\n<tr class=\"memdesc:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a></td></tr>\n<tr class=\"memdesc:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a></td></tr>\n<tr class=\"memdesc:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a></td></tr>\n<tr class=\"memdesc:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a></td></tr>\n<tr class=\"memdesc:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a></td></tr>\n<tr class=\"memdesc:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a></td></tr>\n<tr class=\"memdesc:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a></td></tr>\n<tr class=\"memdesc:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">More...</a><br /></td></tr>\n<tr class=\"separator:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a></td></tr>\n<tr class=\"memdesc:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a></td></tr>\n<tr class=\"memdesc:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a></td></tr>\n<tr class=\"memdesc:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a></td></tr>\n<tr class=\"memdesc:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a></td></tr>\n<tr class=\"memdesc:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">More...</a><br /></td></tr>\n<tr class=\"separator:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a></td></tr>\n<tr class=\"memdesc:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a></td></tr>\n<tr class=\"memdesc:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a></td></tr>\n<tr class=\"memdesc:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga698e36b01167fc0f037889334dce8def\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a></td></tr>\n<tr class=\"memdesc:ga698e36b01167fc0f037889334dce8def\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">More...</a><br /></td></tr>\n<tr class=\"separator:ga698e36b01167fc0f037889334dce8def\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a></td></tr>\n<tr class=\"memdesc:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a></td></tr>\n<tr class=\"memdesc:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a></td></tr>\n<tr class=\"memdesc:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a></td></tr>\n<tr class=\"memdesc:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a></td></tr>\n<tr class=\"memdesc:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a></td></tr>\n<tr class=\"memdesc:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a></td></tr>\n<tr class=\"memdesc:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a></td></tr>\n<tr class=\"memdesc:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">More...</a><br /></td></tr>\n<tr class=\"separator:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a></td></tr>\n<tr class=\"memdesc:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a></td></tr>\n<tr class=\"memdesc:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a></td></tr>\n<tr class=\"memdesc:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a></td></tr>\n<tr class=\"memdesc:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a></td></tr>\n<tr class=\"memdesc:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7e286e81347011e257ee779524e73b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a></td></tr>\n<tr class=\"memdesc:gaf7e286e81347011e257ee779524e73b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7e286e81347011e257ee779524e73b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a></td></tr>\n<tr class=\"memdesc:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4502885718742aa238c36a312c3f3f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga4502885718742aa238c36a312c3f3f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4502885718742aa238c36a312c3f3f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a></td></tr>\n<tr class=\"memdesc:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a></td></tr>\n<tr class=\"memdesc:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">More...</a><br /></td></tr>\n<tr class=\"separator:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a></td></tr>\n<tr class=\"memdesc:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a></td></tr>\n<tr class=\"memdesc:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a></td></tr>\n<tr class=\"memdesc:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a></td></tr>\n<tr class=\"memdesc:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a></td></tr>\n<tr class=\"memdesc:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a></td></tr>\n<tr class=\"memdesc:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a></td></tr>\n<tr class=\"memdesc:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">More...</a><br /></td></tr>\n<tr class=\"separator:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a></td></tr>\n<tr class=\"memdesc:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a></td></tr>\n<tr class=\"memdesc:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a></td></tr>\n<tr class=\"memdesc:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa212b805736a759998e312cbdd550fae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a></td></tr>\n<tr class=\"memdesc:gaa212b805736a759998e312cbdd550fae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa212b805736a759998e312cbdd550fae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a></td></tr>\n<tr class=\"memdesc:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf49470869e9be2c059629b250619804e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a></td></tr>\n<tr class=\"memdesc:gaf49470869e9be2c059629b250619804e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf49470869e9be2c059629b250619804e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga667b2ece2b258be898812dc2177995d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a></td></tr>\n<tr class=\"memdesc:ga667b2ece2b258be898812dc2177995d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga667b2ece2b258be898812dc2177995d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a></td></tr>\n<tr class=\"memdesc:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a></td></tr>\n<tr class=\"memdesc:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a></td></tr>\n<tr class=\"memdesc:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">More...</a><br /></td></tr>\n<tr class=\"separator:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a></td></tr>\n<tr class=\"memdesc:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a></td></tr>\n<tr class=\"memdesc:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a></td></tr>\n<tr class=\"memdesc:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a></td></tr>\n<tr class=\"memdesc:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a></td></tr>\n<tr class=\"memdesc:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d40381d78472553f878f66e443feeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a></td></tr>\n<tr class=\"memdesc:ga6d40381d78472553f878f66e443feeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d40381d78472553f878f66e443feeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a></td></tr>\n<tr class=\"memdesc:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a></td></tr>\n<tr class=\"memdesc:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">More...</a><br /></td></tr>\n<tr class=\"separator:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a></td></tr>\n<tr class=\"memdesc:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66edb8de17b9235029472f043ae107e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga66edb8de17b9235029472f043ae107e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66edb8de17b9235029472f043ae107e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a></td></tr>\n<tr class=\"memdesc:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point quaternion.  <a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac30fdf8afa489400053275b6a3350127\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a></td></tr>\n<tr class=\"memdesc:gac30fdf8afa489400053275b6a3350127\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">More...</a><br /></td></tr>\n<tr class=\"separator:gac30fdf8afa489400053275b6a3350127\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a></td></tr>\n<tr class=\"memdesc:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a></td></tr>\n<tr class=\"memdesc:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a></td></tr>\n<tr class=\"memdesc:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a></td></tr>\n<tr class=\"memdesc:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a></td></tr>\n<tr class=\"memdesc:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a></td></tr>\n<tr class=\"memdesc:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a></td></tr>\n<tr class=\"memdesc:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80823dfad5dba98512c76af498343847\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a></td></tr>\n<tr class=\"memdesc:ga80823dfad5dba98512c76af498343847\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80823dfad5dba98512c76af498343847\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a></td></tr>\n<tr class=\"memdesc:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a></td></tr>\n<tr class=\"memdesc:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a></td></tr>\n<tr class=\"memdesc:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a></td></tr>\n<tr class=\"memdesc:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a></td></tr>\n<tr class=\"memdesc:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a></td></tr>\n<tr class=\"memdesc:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a></td></tr>\n<tr class=\"memdesc:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">More...</a><br /></td></tr>\n<tr class=\"separator:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a></td></tr>\n<tr class=\"memdesc:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a></td></tr>\n<tr class=\"memdesc:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc44265ed440bf5e6e566782570de842\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a></td></tr>\n<tr class=\"memdesc:gacc44265ed440bf5e6e566782570de842\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc44265ed440bf5e6e566782570de842\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a></td></tr>\n<tr class=\"memdesc:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a></td></tr>\n<tr class=\"memdesc:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a></td></tr>\n<tr class=\"memdesc:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a></td></tr>\n<tr class=\"memdesc:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46a57f71e430637559097a732b550a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a></td></tr>\n<tr class=\"memdesc:ga46a57f71e430637559097a732b550a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46a57f71e430637559097a732b550a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a></td></tr>\n<tr class=\"memdesc:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a></td></tr>\n<tr class=\"memdesc:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a></td></tr>\n<tr class=\"memdesc:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a></td></tr>\n<tr class=\"memdesc:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a></td></tr>\n<tr class=\"memdesc:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a></td></tr>\n<tr class=\"memdesc:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a></td></tr>\n<tr class=\"memdesc:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a></td></tr>\n<tr class=\"memdesc:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a></td></tr>\n<tr class=\"memdesc:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a></td></tr>\n<tr class=\"memdesc:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a></td></tr>\n<tr class=\"memdesc:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">More...</a><br /></td></tr>\n<tr class=\"separator:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a></td></tr>\n<tr class=\"memdesc:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a></td></tr>\n<tr class=\"memdesc:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a></td></tr>\n<tr class=\"memdesc:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a></td></tr>\n<tr class=\"memdesc:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a></td></tr>\n<tr class=\"memdesc:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a></td></tr>\n<tr class=\"memdesc:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a></td></tr>\n<tr class=\"memdesc:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a></td></tr>\n<tr class=\"memdesc:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a></td></tr>\n<tr class=\"memdesc:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a></td></tr>\n<tr class=\"memdesc:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">More...</a><br /></td></tr>\n<tr class=\"separator:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a></td></tr>\n<tr class=\"memdesc:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a></td></tr>\n<tr class=\"memdesc:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a></td></tr>\n<tr class=\"memdesc:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a></td></tr>\n<tr class=\"memdesc:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga012c24c8fc69707b90260474c70275a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a></td></tr>\n<tr class=\"memdesc:ga012c24c8fc69707b90260474c70275a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga012c24c8fc69707b90260474c70275a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a></td></tr>\n<tr class=\"memdesc:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a></td></tr>\n<tr class=\"memdesc:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1900c6ab74acd392809425953359ef52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a></td></tr>\n<tr class=\"memdesc:ga1900c6ab74acd392809425953359ef52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1900c6ab74acd392809425953359ef52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a></td></tr>\n<tr class=\"memdesc:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a></td></tr>\n<tr class=\"memdesc:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a></td></tr>\n<tr class=\"memdesc:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">More...</a><br /></td></tr>\n<tr class=\"separator:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a></td></tr>\n<tr class=\"memdesc:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a></td></tr>\n<tr class=\"memdesc:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a></td></tr>\n<tr class=\"memdesc:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a></td></tr>\n<tr class=\"memdesc:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a></td></tr>\n<tr class=\"memdesc:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a></td></tr>\n<tr class=\"memdesc:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30652709815ad9404272a31957daa59e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a></td></tr>\n<tr class=\"memdesc:ga30652709815ad9404272a31957daa59e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30652709815ad9404272a31957daa59e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a></td></tr>\n<tr class=\"memdesc:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a></td></tr>\n<tr class=\"memdesc:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfe65c78231039e90507770db50c98c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a></td></tr>\n<tr class=\"memdesc:gadfe65c78231039e90507770db50c98c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfe65c78231039e90507770db50c98c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a></td></tr>\n<tr class=\"memdesc:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a></td></tr>\n<tr class=\"memdesc:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a></td></tr>\n<tr class=\"memdesc:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga529496d75775fb656a07993ea9af2450\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a></td></tr>\n<tr class=\"memdesc:ga529496d75775fb656a07993ea9af2450\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">More...</a><br /></td></tr>\n<tr class=\"separator:ga529496d75775fb656a07993ea9af2450\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8165913e068444f7842302d40ba897b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a></td></tr>\n<tr class=\"memdesc:ga8165913e068444f7842302d40ba897b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8165913e068444f7842302d40ba897b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae627372cfd5f20dd87db490387b71195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a></td></tr>\n<tr class=\"memdesc:gae627372cfd5f20dd87db490387b71195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">More...</a><br /></td></tr>\n<tr class=\"separator:gae627372cfd5f20dd87db490387b71195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a></td></tr>\n<tr class=\"memdesc:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae267358ff2a41d156d97f5762630235a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a></td></tr>\n<tr class=\"memdesc:gae267358ff2a41d156d97f5762630235a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae267358ff2a41d156d97f5762630235a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a></td></tr>\n<tr class=\"memdesc:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f312156984c365e9f65620354da70b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a></td></tr>\n<tr class=\"memdesc:gaf3f312156984c365e9f65620354da70b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f312156984c365e9f65620354da70b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a></td></tr>\n<tr class=\"memdesc:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a></td></tr>\n<tr class=\"memdesc:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a></td></tr>\n<tr class=\"memdesc:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">More...</a><br /></td></tr>\n<tr class=\"separator:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a></td></tr>\n<tr class=\"memdesc:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a></td></tr>\n<tr class=\"memdesc:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29b349e037f0b24320b4548a143daee2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga29b349e037f0b24320b4548a143daee2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29b349e037f0b24320b4548a143daee2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a></td></tr>\n<tr class=\"memdesc:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">More...</a><br /></td></tr>\n<tr class=\"separator:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a></td></tr>\n<tr class=\"memdesc:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a></td></tr>\n<tr class=\"memdesc:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a></td></tr>\n<tr class=\"memdesc:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a></td></tr>\n<tr class=\"memdesc:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a></td></tr>\n<tr class=\"memdesc:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a></td></tr>\n<tr class=\"memdesc:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines specific C++-based qualifier types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 32 bit single-qualifier floating-point scalar. </p>\n<p>32 bit single-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00150\">150</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab12383ed6ac7595ed6fde4d266c58425\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00552\">552</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04100c76f7d55a0dd0983ccf05142bff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00700\">700</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab256cdab5eb582e426d749ae77b5b566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00703\">703</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf512b74c4400b68f9fdf9388b3d6aac8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00706\">706</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga856f3905ee7cc2e4890a8a1d56c150be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00553\">553</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1320a08e14fdff3821241eefab6947e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00701\">701</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65261fa8a21045c8646ddff114a56174\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00704\">704</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab90ade28222f8b861d5ceaf81a3a7f5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00707\">707</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99d1b85ff99956b33da7e9992aad129a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00554\">554</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b32ca1e57a4ef91babbc3d35a34ea20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00702\">702</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga239b96198771b7add8eea7e6b59840c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00705\">705</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee4da0e9fbd8cfa2f89cb80889719dc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00708\">708</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38e674196ba411d642be40c47bf33939\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, defaultp &gt; f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00805\">805</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga701f32ab5b3fb06996b41f5c0d643805\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, defaultp &gt; f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00461\">461</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5d6c70e080409a76a257dc55bd8ea2c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, defaultp &gt; f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00462\">462</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea5c4518e175162e306d2c2b5ef5ac79\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, defaultp &gt; f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00463\">463</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31c6ca0e074a44007f49a9a3720b18c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, defaultp &gt; f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00464\">464</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d794d240091678f602e8de225b8d8c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 64 bit double-qualifier floating-point scalar. </p>\n<p>64 bit double-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00166\">166</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9771450a54785d13080cdde0fe20c1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00584\">584</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ec7c4c79e303c053e30729a95fb2c37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00780\">780</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3ab5719fc4c1e966631dbbcba8d412a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00783\">783</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac87278e0c702ba8afff76316d4eeb769\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00786\">786</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b69181efbf8f37ae934f135137b29c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00585\">585</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2473d8bf3f4abf967c4d0e18175be6f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00781\">781</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga916c1aed91cf91f7b41399ebe7c6e185\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00784\">784</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab239fa9e35b65a67cbaa6ac082f3675\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00787\">787</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ecd3f4952536e5ef12702b44d2626fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00586\">586</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab7daf79d6bc06a68bea1c6f5e11b5512\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00782\">782</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e2e66ffbe341a80bc005ba2b9552110\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00785\">785</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae52e2b7077a9ff928a06ab5ce600b81e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00788\">788</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b114a2f2af0fe1dfeb569c767822940\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, defaultp &gt; f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00815\">815</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade502df1ce14f837fae7f60a03ddb9b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, defaultp &gt; f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00501\">501</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc4e1594f9555d919131ee02b17822a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, defaultp &gt; f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00502\">502</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7a1ddca75c5f629173bf4772db7a635\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, defaultp &gt; f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00503\">503</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66e92e57260bdb910609b9a56bf83e97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, defaultp &gt; f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00504\">504</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaacdc525d6f7bddb3ae95d5c311bd06a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00155\">155</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4947bc8b47c72fceea9bda730ecf603\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 32 bit single-qualifier floating-point scalar. </p>\n<p>32 bit single-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00160\">160</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga232fad1b0d6dcc7c16aabde98b2e2a80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef double float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00171\">171</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga728366fef72cd96f0a5fa6429f05469e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 64 bit double-qualifier floating-point scalar. </p>\n<p>64 bit double-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00176\">176</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4541dc2feb2a31d6ecb5a303f3dd3280\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00536\">536</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3350c93c3275298f940a42875388e4b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00660\">660</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga55a2d2a8eb09b5633668257eb3cad453\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00663\">663</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga681381f19f11c9e5ee45cda2c56937ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00666\">666</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga253d453c20e037730023fea0215cb6f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00537\">537</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6af54d70d9beb0a7ef992a879e86b04f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00661\">661</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07c86650253672a19dbfb898f3265b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00664\">664</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44e158af77a670ee1b58c03cda9e1619\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00667\">667</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cb400c0f4438f2640035d7b9824a0ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00538\">538</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c8aa45aafcc23238edb1d5aeb801774\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00662\">662</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4295048a78bdf46b8a7de77ec665b497\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00665\">665</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad01cc6479bde1fd1870f13d3ed9530b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00668\">668</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga98b9ed43cf8c5cf1d354b23c7df9119f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, defaultp &gt; fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00441\">441</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24273aa02abaecaab7f160bac437a339\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, defaultp &gt; fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00442\">442</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga89930533646b30d021759298aa6bf04a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, defaultp &gt; fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00443\">443</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga713c796c54875cf4092d42ff9d9096b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, defaultp &gt; fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00444\">444</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6906e1ef0b34064b4b675489c5c38725\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00149\">149</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga298f7d4d273678d0282812368da27fda\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat2x2 highp_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00548\">548</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5eb02d92b7d4605a4b7f37ae5cb2968\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00690\">690</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0aeb5cb001473b08c88175012708a379\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00691\">691</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga88938ee1e7981fa3402e88da6ad74531\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00692\">692</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24f9ef3263b1638564713892cc37981f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat3x3 highp_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00549\">549</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga36537e701456f12c20e73f469cac4967\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00693\">693</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab691ae40c37976d268d8cac0096e0e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00694\">694</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5086dbd6efb272d13fc88829330861d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00695\">695</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14c90ca49885723f51d06e295587236f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat4x4 highp_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00550\">550</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga602e119c6b246b4f6edcf66845f2aa0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00696\">696</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00697\">697</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1b712b97b2322685fbbed28febe5f84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00698\">698</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, highp &gt; highp_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00804\">804</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab1b1c9e8667902b78b2c330e4d383a61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, highp &gt; highp_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00456\">456</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b8ebd4262331e139ff257d7cf2a4b77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, highp &gt; highp_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00457\">457</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga522775dbcc6d96246a1c5cf02344fd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, highp &gt; highp_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00458\">458</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f038d4e09862a74f03d102c59eda73e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, highp &gt; highp_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00459\">459</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51d5266017d88f62737c1973923a7cf4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00165\">165</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7adb92ce8de0afaff01436b039fd924\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat2x2 highp_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00580\">580</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga773ea237a051827cfc20de960bc73ff0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00770\">770</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8342c7469384c6d769cacc9e309278d9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00771\">771</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a67a7440b9c0d1538533540f99036a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00772\">772</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga609bf0ace941d6ab1bb2f9522a04e546\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat3x3 highp_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00581\">581</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00773\">773</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c2cadb9b85cc7e0d125db21ca19dea4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00774\">774</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad310b1dddeec9ec837a104e7db8de580\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00775\">775</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad308e0ed27d64daa4213fb257fcbd5a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat4x4 highp_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00582\">582</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58c4631421e323e252fc716b6103e38c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00776\">776</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae94823d65648e44d972863c6caa13103\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00777\">777</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09a2374b725c4246d263ee36fb66434c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00778\">778</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafcfdd74a115163af2ce1093551747352\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, highp &gt; highp_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00814\">814</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62c31b133ceee9984fbee05ac4c434a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, highp &gt; highp_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00496\">496</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga670ea1b0a1172bc73b1d7c1e0c26cce2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, highp &gt; highp_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00497\">497</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd1196090ece7a69fb5c3e43a7d4d851\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, highp &gt; highp_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00498\">498</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61185c44c8cc0b25d9a0f67d8a267444\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, highp &gt; highp_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00499\">499</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac5a7f21136e0a78d0a1b9f60ef2f8aea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00154\">154</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5376ef18dca9d248897c3363ef5a06b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00159\">159</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbb198a4d7aad82a0f4dc466ef6f6215\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00170\">170</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaeeb0077198cff40e3f48b1108ece139\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00175\">175</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae98c88d9a7befa9b5877f49176225535\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat2x2 highp_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00532\">532</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28635abcddb2f3e92c33c3f0fcc682ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00650\">650</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf111095594996fef29067b2454fccad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00651\">651</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4920a1536f161f7ded1d6909b7fef0d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00652\">652</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaed2dc69e0d507d4191092dbd44b3eb75\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat3x3 highp_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00533\">533</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae54e4d1aeb5a0f0c64822e6f1b299e19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00653\">653</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5b44d3ef6efcf33f44876673a7a936e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00654\">654</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga961fac2a885907ffcf4d40daac6615c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00655\">655</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf28443ce0cc0959077ec39b21f32c39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat4x4 highp_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00534\">534</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga076961cf2d120c7168b957cb2ed107b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00656\">656</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae406ec670f64170a7437b5e302eeb2cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00657\">657</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee80c7cd3caa0f2635058656755f6f69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00658\">658</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1040342c4efdedc8f90e6267db8d41c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, highp &gt; highp_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00436\">436</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c0d196f5fa79f7e892a2f323a0be1ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, highp &gt; highp_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00437\">437</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6ef77413883f48d6b53b4169b25edbd0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, highp &gt; highp_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00438\">438</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b839abbb44f5102609eed89f6ed61f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, highp &gt; highp_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00439\">439</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0336abc2604dd2c20c30e036454b64f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00047\">47</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70fdfcc1fd38084bde83c3f06a8b9f19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, highp &gt; highp_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00252\">252</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7db3ad10947cf70cae6474d05ebd227\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, highp &gt; highp_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00253\">253</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5609c8fa2b7eac3dec337d321cb0ca96\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, highp &gt; highp_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00254\">254</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a18659438828f91ccca28f1a1e067b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, highp &gt; highp_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00255\">255</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga727675ac6b5d2fc699520e0059735e25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00061\">61</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a9d71cc62745302f70422b7dc98755c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, highp &gt; highp_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00272\">272</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9b4579f8e6f3d9b649a965bcb785530\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, highp &gt; highp_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00273\">273</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31e070ea3bdee623e6e18a61ba5718b1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, highp &gt; highp_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00274\">274</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf70eaaa230aeed5a4c9f4c9c5c55902\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, highp &gt; highp_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00275\">275</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac25db6d2b1e2a0f351b77ba3409ac4cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00075\">75</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd2fda3cd208acf5a370ec9b5b3c58d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, highp &gt; highp_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00292\">292</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9d1903cb20899966e8ebe0670889a5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, highp &gt; highp_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00293\">293</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62324224b9c6cce9c6b4db96bb704a8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, highp &gt; highp_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00294\">294</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad23b1be9b3bf20352089a6b738f0ebba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, highp &gt; highp_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00295\">295</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb88796f2d08ef253d0345aff20c3aee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00033\">33</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d8c10949691b0fd990253476f47beb3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, highp &gt; highp_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00232\">232</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50542e4cb9b2f9bec213b66e06145d07\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, highp &gt; highp_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00233\">233</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8396bfdc081d9113190d0c39c9f67084\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, highp &gt; highp_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00234\">234</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4824e3ddf6e608117dfe4809430737b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, highp &gt; highp_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00235\">235</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5fde0fa4a3852a9dd5d637a92ee74718\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00052\">52</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacaea06d0a79ef3172e887a7a6ba434ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00056\">56</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84ed04b4e0de18c977e932d617e7c223\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00066\">66</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00070\">70</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga226a8d52b4e3f77aaa6231135e886aac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00080\">80</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73c6abb280a45feeff60f9accaee91f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00084\">84</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0549c902a96a7164e4ac858d5f39dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1085c50dd8fbeb5e7e609b1c127492a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00042\">42</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e62c883d13f47015f3b70ed88751369\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00105\">105</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad064202b4cf9a2972475c03de657cb39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, highp &gt; highp_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00354\">354</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga791b15ceb3f1e09d1a0ec6f3057ca159\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, highp &gt; highp_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00355\">355</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfd806749008f0ade6ac4bb9dd91082f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, highp &gt; highp_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00356\">356</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a85a3d54a8a9e14fe7a1f96196c4f61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, highp &gt; highp_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00357\">357</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a6f1929464dcc680b16381a4ee5f2cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00119\">119</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0e35a565b9036bfc3989f5e23a0792e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, highp &gt; highp_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00374\">374</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f256334f83fba4c2d219e414b51df6c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, highp &gt; highp_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00375\">375</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf14d7a50502464e7cbfa074f24684cb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, highp &gt; highp_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00376\">376</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22166f0da65038b447f3c5e534fff1c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, highp &gt; highp_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00377\">377</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c181fdf06a309691999926b6690c969\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00133\">133</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4fe774744852c4d7d069be2e05257ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, highp &gt; highp_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00394\">394</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78f77b8b2d17b431ac5a68c0b5d7050d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, highp &gt; highp_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00395\">395</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41bdabea6e589029659331ba47eb78c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, highp &gt; highp_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00396\">396</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f15b41aa24b11cc42ad5798c04a2325\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, highp &gt; highp_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00397\">397</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd1259f3a9e8d2a9df5be2d74322ef9c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00091\">91</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8408cb76b6550ff01fa0a3024e7b68d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, highp &gt; highp_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00334\">334</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27585b7c3ab300059f11fcba465f6fd2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, highp &gt; highp_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00335\">335</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45721c13b956eb691cbd6c6c1429167a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, highp &gt; highp_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00336\">336</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae0b75ad0fed8c00ddc0b5ce335d31060\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, highp &gt; highp_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00337\">337</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga746dc6da204f5622e395f492997dbf57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00110\">110</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf54c3330ef60aa3d16cb676c7bcb8c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00114\">114</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga256b12b650c3f2fb86878fd1c5db8bc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00124\">124</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae978599c9711ac263ba732d4ac225b0e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00128\">128</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa38d732f5d4a7bc42a1b43b9d3c141ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00138\">138</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa46172d7dc1c7ffe3e78107ff88adf08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00142\">142</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97432f9979e73e66567361fd01e4cffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00096\">96</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac4e00a26a2adb5f2c0a7096810df29e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00100\">100</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ab5fe184343d394fb6c2723c3ee3699\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00048\">48</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe730798732aa7b0647096a004db1b1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, defaultp &gt; i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00257\">257</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2996630ba7b10535af8e065cf326f761\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, defaultp &gt; i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00258\">258</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae9c90a867a6026b1f6eab00456f3fb8b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, defaultp &gt; i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00259\">259</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga550831bfc26d1e0101c1cb3d79938c06\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, defaultp &gt; i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96faea43ac5f875d2d3ffbf8d213e3eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00062\">62</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga54b8a4e0f5a7203a821bf8e9c1265bcf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, defaultp &gt; i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00277\">277</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b44026374982dcd1e52d22bac99247e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, defaultp &gt; i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00278\">278</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f526b5cccef126a2ebcf9bdd890394e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, defaultp &gt; i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00279\">279</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga866a05905c49912309ed1fa5f5980e61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, defaultp &gt; i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00280\">280</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadb997e409103d4da18abd837e636a496\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00076\">76</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b65767f8b5aed1bd1cf86c541662b50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, defaultp &gt; i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00297\">297</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48310188e1d0c616bf8d78c92447523b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, defaultp &gt; i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00298\">298</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga667948cfe6fb3d6606c750729ec49f77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, defaultp &gt; i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00299\">299</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4e31c3d9de067029efeb161a44b0232\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, defaultp &gt; i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00300\">300</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga302ec977b0c0c3ea245b6c9275495355\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e80d927ff0a3861ced68dfff8a4020b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, defaultp &gt; i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00237\">237</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad06935764d78f43f9d542c784c2212ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, defaultp &gt; i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00238\">238</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a08d36cf7917cd19d081a603d0eae3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, defaultp &gt; i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00239\">239</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4177a44206121dabc8c4ff1c0f544574\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, defaultp &gt; i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00240\">240</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8f5e3e964ca2ae240adc2c0d74adede\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00057\">57</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga042ef09ff2f0cb24a36f541bcb3a3710\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00071\">71</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga322a7d7d2c2c68994dc872a33de63c61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00085\">85</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bf09d8838a86866b39ee6e109341645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00043\">43</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeea53879fc327293cf3352a409b7867b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00147\">147</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga52409bc6d4a2ce3421526c069220d685\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat2x2 lowp_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00540\">540</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d091b6abfba1772450e1745a06525bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00670\">670</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga961ccb34cd1a5654c772c8709e001dc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00671\">671</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc6bf0209dda0c7c14851a646071c974\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00672\">672</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4187f89f196505b40e63f516139511e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat3x3 lowp_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00541\">541</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac53f9d7ab04eace67adad026092fb1e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00673\">673</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga841211b641cff1fcf861bdb14e5e4abc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00674\">674</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga21b1b22dec013a72656e3644baf8a1e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00675\">675</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga766aed2871e6173a81011a877f398f04\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat4x4 lowp_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00542\">542</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6f3fcb702a666de07650c149cfa845a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00676\">676</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac21eda58a1475449a5709b412ebd776c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00677\">677</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4143d129898f91545948c46859adce44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00678\">678</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ba60ef8f69c6aeb1629594eaa95347\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, lowp &gt; lowp_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00802\">802</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43e5b41c834fcaf4db5a831c0e28128e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, lowp &gt; lowp_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00446\">446</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3b694b2b8ded7e0b9f07b061917e1a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, lowp &gt; lowp_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00447\">447</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf739a2cd7b81783a43148b53e40d983b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, lowp &gt; lowp_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00448\">448</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e2e1debe022074ab224c9faf856d374\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, lowp &gt; lowp_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00449\">449</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc7a97c07cbfac8e35eb5e63beb4b679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00163\">163</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafc730f6b4242763b0eda0ffa25150292\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat2x2 lowp_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00572\">572</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga771fda9109933db34f808d92b9b84d7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00750\">750</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39e90adcffe33264bd608fa9c6bd184b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00751\">751</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50265a202fbfe0a25fc70066c31d9336\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00752\">752</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58119a41d143ebaea0df70fe882e8a40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat3x3 lowp_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00573\">573</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0eb2d65514ee3e49905aa2caad8c0ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00753\">753</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac8f8a12ee03105ef8861dc652434e3b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00754\">754</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade8d1edfb23996ab6c622e65e3893271\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00755\">755</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7451266e67794bd1125163502bc4a570\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat4x4 lowp_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00574\">574</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0cecb80fd106bc369b9e46a165815ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00756\">756</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae731613b25db3a5ef5a05d21e57a57d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00757\">757</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c9cd734e03cd49674f3e287aa4a6f95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00758\">758</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ee2bc4af03cc06578b66b3e3f878ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, lowp &gt; lowp_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00812\">812</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2d02c5f4d59135b9bc524fe317fd26b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, lowp &gt; lowp_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00486\">486</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e641a54d70c81eabf56c25c966d04bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, lowp &gt; lowp_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00487\">487</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7a4711107b7d078fc5f03ce2227b90b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, lowp &gt; lowp_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00488\">488</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa666bb9e6d204d3bea0b3a39a3a335f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, lowp &gt; lowp_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00489\">489</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41b0d390bd8cc827323b1b3816ff4bf8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00152\">152</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea881cae4ddc6c0fbf7cc5b08177ca5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00157\">157</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3714dab2c16a6545a405cb0c3b3aaa6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00168\">168</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7286a37076a09da140df18bfa75d4e38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00173\">173</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bba0ce31210e274f73efacd3364c03f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat2x2 lowp_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00524\">524</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0feb11edd0d3ab3e8ed996d349a5066\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00630\">630</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga71cdb53801ed4c3aadb3603c04723210\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00631\">631</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab217601c74974a84acbca428123ecf7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00632\">632</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83079315e230e8f39728f4bf0d2f9a9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat3x3 lowp_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00525\">525</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49b98e7d71804af45d86886a489e633c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00633\">633</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba56275dd04a7a61560b0e8fa5d365b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00634\">634</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28733aec7288191b314d42154fd0b690\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00635\">635</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5803cb9ae26399762d8bba9e0b2fc09f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat4x4 lowp_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00526\">526</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5868c2dcce41cc3ea5edcaeae239f62c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00636\">636</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e649bbdb135fbcb4bfe950f4c73a444\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00637\">637</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac2f5263708ac847b361a9841e74ddf9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00638\">638</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga346b2336fff168a7e0df1583aae3e5a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, lowp &gt; lowp_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00426\">426</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62a32c31f4e2e8ca859663b6e3289a2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, lowp &gt; lowp_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00427\">427</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40b5c557efebb5bb99d6b9aa81095afa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, lowp &gt; lowp_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00428\">428</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga755484ffbe39ae3db2875953ed04e7b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, lowp &gt; lowp_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00429\">429</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga392b673fd10847bfb78fb808c6cf8ff7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00045\">45</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga501a2f313f1c220eef4ab02bdabdc3c6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, lowp &gt; lowp_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00242\">242</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cac84b520a6b57f2fbd880d3d63c51b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, lowp &gt; lowp_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00243\">243</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab69ef9cbc2a9214bf5596c528c801b72\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, lowp &gt; lowp_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00244\">244</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d47d94d17c2406abdd1f087a816e387\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, lowp &gt; lowp_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00245\">245</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ff73a45cea9613ebf1a9fad0b9f82ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00059\">59</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae31ac3608cf643ceffd6554874bec4a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, lowp &gt; lowp_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00262\">262</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga867a3c2d99ab369a454167d2c0a24dbd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, lowp &gt; lowp_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00263\">263</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5fe17c87ede1b1b4d92454cff4da076d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, lowp &gt; lowp_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00264\">264</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9b2eb4296ffe50a32eacca9ed932c08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, lowp &gt; lowp_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00265\">265</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga354736e0c645099cd44c42fb2f87c2b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00073\">73</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0f7d875db5f3cc9f3168c5a0ed56437\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, lowp &gt; lowp_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00282\">282</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab485c48f06a4fdd6b8d58d343bb49f3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, lowp &gt; lowp_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00283\">283</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, lowp &gt; lowp_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00284\">284</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb4229a4c1488bf063eed0c45355bb9c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, lowp &gt; lowp_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00285\">285</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga552a6bde5e75984efb0f863278da2e54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00031\">31</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga036d6c7ca9fbbdc5f3871bfcb937c85c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, lowp &gt; lowp_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00222\">222</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac03e5099d27eeaa74b6016ea435a1df2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, lowp &gt; lowp_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00223\">223</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2f43ace6b5b33ab49516d9e40af1845\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, lowp &gt; lowp_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00224\">224</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d388e9b9aa1b389f0672d9c7dfc61c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, lowp &gt; lowp_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00225\">225</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga698e36b01167fc0f037889334dce8def\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00050\">50</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b2cd8d31eb345b2d641d9261c38db1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00054\">54</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga864aabca5f3296e176e0c3ed9cc16b02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00064\">64</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0350631d35ff800e6133ac6243b13cbc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00068\">68</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf645b1a60203b39c0207baff5e3d8c3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00078\">78</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebf341fc4a5be233f7dde962c2e33847\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00082\">82</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga760bcf26fdb23a2c3ecad3c928a19ae6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00036\">36</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga119c41d73fe9977358174eb3ac1035a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga504ce1631cb2ac02fcf1d44d8c2aa126\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00103\">103</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6aab4ee7189b86716f5d7015d43021d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, lowp &gt; lowp_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00344\">344</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a7d997da9ac29cb931e35bd399f58df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, lowp &gt; lowp_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00345\">345</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0253db6c3d3bae1f591676307a9dd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, lowp &gt; lowp_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00346\">346</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7f00459b9a2e5b2757e70afc0c189e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, lowp &gt; lowp_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00347\">347</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f072ada9552e1e480bbb3b1acde5250\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00117\">117</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabed3be8dfdc4a0df4bf3271dbd7344c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, lowp &gt; lowp_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00364\">364</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7e286e81347011e257ee779524e73b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, lowp &gt; lowp_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00365\">365</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3ad390560a671b1f676fbf03cd3aa15\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, lowp &gt; lowp_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00366\">366</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4502885718742aa238c36a312c3f3f20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, lowp &gt; lowp_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00367\">367</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30069d1f02b19599cbfadf98c23ac6ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00131\">131</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga859be7b9d3a3765c1cafc14dbcf249a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, lowp &gt; lowp_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00384\">384</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga581485db4ba6ddb501505ee711fd8e42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, lowp &gt; lowp_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00385\">385</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4a8682bec7ec8af666ef87fae38d5d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, lowp &gt; lowp_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00386\">386</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fccc89c34045c86339f6fa781ce96de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, lowp &gt; lowp_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00387\">387</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b09f03da7ac43055c68a349d5445083\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00089\">89</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2e0e10d8d154fec9cab50e216588ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, lowp &gt; lowp_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00324\">324</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6f63fa38635431e51a8f2602f15c566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, lowp &gt; lowp_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00325\">325</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga150dc47e31c6b8cf8461803c8d56f7bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, lowp &gt; lowp_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00326\">326</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9910927f3a4d1addb3da6a82542a8287\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, lowp &gt; lowp_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00327\">327</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad68bfd9f881856fc863a6ebca0b67f78\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00108\">108</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91c4815f93177eb423362fd296a87e9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00112\">112</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6a5b461bbf5fe20982472aa51896d4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00122\">122</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1b735b4b1145174f4e4167d13778f9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00126\">126</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa212b805736a759998e312cbdd550fae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00136\">136</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dd3a3281ae5c970ffe0c41d538aa153\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00140\">140</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf49470869e9be2c059629b250619804e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00094\">94</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga667b2ece2b258be898812dc2177995d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00098\">98</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00148\">148</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf9020c6176a75bc84828ab01ea7dac25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat2x2 mediump_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00544\">544</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ca74a44102035b3ffb5c9c52dfdd3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00680\">680</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4cc829ab1ad3e05ac0a24828a3c95cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00681\">681</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae71445ac6cd0b9fba3e5c905cd030fb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00682\">682</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaaf878d0d7bfc0aac054fe269a886ca8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat3x3 mediump_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00545\">545</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaab39454f56cf9fc6d940358ce5e6a0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00683\">683</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd80ad7640e9e32f2edcb8330b1ffe4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00684\">684</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8df705d775b776f5ae6b39e2ab892899\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00685\">685</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4491baaebbc46a20f1cb5da985576bf4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat4x4 mediump_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00546\">546</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab005efe0fa4de1a928e8ddec4bc2c43f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00686\">686</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade108f16633cf95fa500b5b8c36c8b00\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00687\">687</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga936e95b881ecd2d109459ca41913fa99\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00688\">688</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa40c03d52dbfbfaf03e75773b9606ff3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, mediump &gt; mediump_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00803\">803</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb33cab7d7c74cc14aa95455d0690865\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, mediump &gt; mediump_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00451\">451</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6eb11412a3161ca8dc1d63b2a307c4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, mediump &gt; mediump_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00452\">452</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga062ffef2973bd8241df993c3b30b327c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, mediump &gt; mediump_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00453\">453</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad80c84bcd5f585840faa6179f6fd446c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, mediump &gt; mediump_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00454\">454</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d40381d78472553f878f66e443feeef\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00164\">164</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1281da5ded55047e8892b0e1f1ae965\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat2x2 mediump_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00576\">576</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fd527644cccbca4cb205320eab026f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00760\">760</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd9a6ebc0c7b95f5c581d00d16a17c54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00761\">761</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf306dd69e53633636aee38cea79d4cb7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00762\">762</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad35fb67eb1d03c5a514f0bd7aed1c776\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat3x3 mediump_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00577\">577</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd926d36a72433f6cac51dd60fa13107\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00763\">763</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84d88a6e3a54ccd2b67e195af4a4c23e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00764\">764</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad38c544d332b8c4bd0b70b1bd9feccc2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00765\">765</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa805ef691c711dc41e2776cfb67f5cf5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat4x4 mediump_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00578\">578</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga17d36f0ea22314117e1cec9594b33945\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00766\">766</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga54697a78f9a4643af6a57fc2e626ec0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00767\">767</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66edb8de17b9235029472f043ae107e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00768\">768</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e52f485059ce6e3010c590b882602c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, mediump &gt; mediump_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00813\">813</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac30fdf8afa489400053275b6a3350127\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, mediump &gt; mediump_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00491\">491</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ebc04ecf6440c4ee24718a16600ce6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, mediump &gt; mediump_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00492\">492</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga461c4c7d0757404dd0dba931760b25cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, mediump &gt; mediump_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00493\">493</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfea053bd6bb3eddb996a4f94de22a3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, mediump &gt; mediump_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00494\">494</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7812bf00676fb1a86dcd62cca354d2c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00153\">153</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4dee61f8fe1caccec309fbed02faf12\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00158\">158</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab83d8aae6e4f115e97a785e8574a115f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00169\">169</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61843e4fa96c1f4e9d8316454f32a8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00174\">174</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74e9133378fd0b4da8ac0bc0876702ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat2x2 mediump_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00528\">528</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga98a687c17b174ea316b5f397b64f44bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00640\">640</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa03f939d90d5ef157df957d93f0b9a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00641\">641</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga35223623e9ccebd8a281873b71b7d213\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00642\">642</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80823dfad5dba98512c76af498343847\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat3x3 mediump_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00529\">529</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42569e5b92f8635cedeadb1457ee1467\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00643\">643</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6f526388c74a66b3d52315a14d434ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00644\">644</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefe8ef520c6cb78590ebbefe648da4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00645\">645</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1c38778c0b5a1263f07753c05a4f7b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat4x4 mediump_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00530\">530</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacea38a85893e17e6834b6cb09a9ad0cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00646\">646</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41ad497f7eae211556aefd783cb02b90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00647\">647</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22e27beead07bff4d5ce9d6065a57279\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00648\">648</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga367964fc2133d3f1b5b3755ff9cf6c9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, mediump &gt; mediump_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00431\">431</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44bfa55cda5dbf53f24a1fb7610393d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, mediump &gt; mediump_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00432\">432</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga999dc6703ad16e3d3c26b74ea8083f07\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, mediump &gt; mediump_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00433\">433</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bed890513c0f50b7e7ba4f7f359dbfb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, mediump &gt; mediump_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00434\">434</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62a17cddeb4dffb4e18fe3aea23f051a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc44265ed440bf5e6e566782570de842\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, mediump &gt; mediump_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00247\">247</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b5e2c9aaa5d7717bf71179aefa12e88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, mediump &gt; mediump_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00248\">248</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3be6c7fc5fe08fa2274bdb001d5f2633\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, mediump &gt; mediump_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00249\">249</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf52982bb23e3a3772649b2c5bb84b107\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, mediump &gt; mediump_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00250\">250</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5e94bf2a20af7601787c154751dc2e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00060\">60</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46a57f71e430637559097a732b550a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, mediump &gt; mediump_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00267\">267</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20bf224bd4f8a24ecc4ed2004a40c219\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, mediump &gt; mediump_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00268\">268</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13a221b910aa9eb1b04ca1c86e81015a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, mediump &gt; mediump_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00269\">269</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6addd4dfee87fc09ab9525e3d07db4c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, mediump &gt; mediump_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00270\">270</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ebcb1f6d8d8387253de8bccb058d77f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00074\">74</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8343e9d244fb17a5bbf0d94d36b3695e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, mediump &gt; mediump_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00287\">287</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c94aeae3457325944ca1059b0b68330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, mediump &gt; mediump_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00288\">288</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8089722ffdf868cdfe721dea1fb6a90e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, mediump &gt; mediump_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00289\">289</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf1f16c5ab8cb0484bd1e846ae4368f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, mediump &gt; mediump_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00290\">290</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf1ded173e1e2d049c511d095b259e21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e8893f4ae3630065690a9000c0c483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, mediump &gt; mediump_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00227\">227</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a8bdc32184ea0a522ef7bd90640cf67\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, mediump &gt; mediump_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00228\">228</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6dd1c1618378c6f94d522a61c28773c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, mediump &gt; mediump_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00229\">229</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7bb04fb857ef7b520e49f6c381432be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, mediump &gt; mediump_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00230\">230</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadff3608baa4b5bd3ed28f95c1c2c345d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00051\">51</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80e72fe94c88498537e8158ba7591c54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5244cef85d6e870e240c76428a262ae8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00065\">65</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26fc7ced1ad7ca5024f1c973c8dc9180\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00069\">69</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b968f2b86a0442a89c7359171e1d866\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00079\">79</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3bc41bcac61d1ba8f02a6f68ce23f64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00083\">83</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fbd69cbdaa44345bff923a2cf63de7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d7b3789ecb932c26430009478cac7ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00041\">41</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9df98857be695d5a30cb30f5bfa38a80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00104\">104</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga400ce8cc566de093a9b28e59e220d6e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, mediump &gt; mediump_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00349\">349</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga429c201b3e92c90b4ef4356f2be52ee1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, mediump &gt; mediump_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00350\">350</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9ba20234b0c3751d45ce575fc71e551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, mediump &gt; mediump_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00351\">351</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5793393686ce5bd2d5968ff9144762b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, mediump &gt; mediump_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00352\">352</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bd0e914158bf03135f8a317de6debe9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00118\">118</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a11ccd2e38f674bbf3c2d1afc232aee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, mediump &gt; mediump_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00369\">369</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94f74851fce338549c705b5f0d601c4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, mediump &gt; mediump_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00370\">370</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga012c24c8fc69707b90260474c70275a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, mediump &gt; mediump_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00371\">371</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5d43ee8b5dbaa06c327b03b83682598a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, mediump &gt; mediump_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00372\">372</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2af9490085ae3bdf36a544e9dd073610\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00132\">132</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga659f372ccb8307d5db5beca942cde5e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, mediump &gt; mediump_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00389\">389</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73a08ef5a74798f3a1a99250b5f86a7d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, mediump &gt; mediump_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00390\">390</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1900c6ab74acd392809425953359ef52\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, mediump &gt; mediump_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00391\">391</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec7ee455cb379ec2993e81482123e1cc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, mediump &gt; mediump_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00392\">392</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1213a22bbb9e4107f07eaa4956f8281\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00090\">90</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a43050843b141bdc7e85437faef6f55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, mediump &gt; mediump_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00329\">329</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga907f85d4a0eac3d8aaf571e5c2647194\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, mediump &gt; mediump_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00330\">330</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddc6f7748b699254942c5216b68f8f7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, mediump &gt; mediump_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00331\">331</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaf4ee3b76d43d98da02ec399b99bda4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, mediump &gt; mediump_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00332\">332</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2885a6c89916911e418c06bb76b9bdbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00109\">109</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3963b1050fc65a383ee28e3f827b6e3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00113\">113</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga34dd5ec1988c443bae80f1b20a8ade5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00123\">123</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4dae276fd29623950de14a6ca2586b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30652709815ad9404272a31957daa59e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00137\">137</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b170dd4a8f38448a2dc93987c7875e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00141\">141</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fa92a233b9110861cdbc8c2ccf0b5a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00095\">95</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfe65c78231039e90507770db50c98c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00099\">99</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2d7acc0adb536fab71fe261232a40ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00106\">106</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, defaultp &gt; u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00359\">359</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a78447eb9d66a114b193f4a25899c16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, defaultp &gt; u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00360\">360</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c522ca821c27b862fe51cf4024b064b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, defaultp &gt; u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00361\">361</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga529496d75775fb656a07993ea9af2450\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, defaultp &gt; u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00362\">362</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8165913e068444f7842302d40ba897b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00120\">120</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae627372cfd5f20dd87db490387b71195\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, defaultp &gt; u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00379\">379</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a266e46ee218d0c680f12b35c500cc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, defaultp &gt; u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00380\">380</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae267358ff2a41d156d97f5762630235a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, defaultp &gt; u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00381\">381</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31cef34e4cd04840c54741ff2f7005f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, defaultp &gt; u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00382\">382</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3f312156984c365e9f65620354da70b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00134\">134</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf09f3ca4b671a4a4f84505eb4cc865fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, defaultp &gt; u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00399\">399</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef3824ed4fe435a019c5b9dddf53fec5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, defaultp &gt; u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00400\">400</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga489b89ba93d4f7b3934df78debc52276\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, defaultp &gt; u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00401\">401</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3945dd6515d4498cb603e65ff867ab03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, defaultp &gt; u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00402\">402</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaecc7082561fc9028b844b6cf3d305d36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00092\">92</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29b349e037f0b24320b4548a143daee2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, defaultp &gt; u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00339\">339</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga518b8d948a6b4ddb72f84d5c3b7b6611\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, defaultp &gt; u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00340\">340</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c5706f6bbe5282e5598acf7e7b377e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, defaultp &gt; u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00341\">341</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20779a61de2fd526a17f12fe53ec46b1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, defaultp &gt; u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00342\">342</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91f91f411080c37730856ff5887f5bcf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00115\">115</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2171d9dc1fefb1c82e2817f45b622eac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00129\">129</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3999d3e7ff22025c16ddb601e14dfdee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00143\">143</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28d97808322d3c92186e4a0c067d7e8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00101\">101</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00305.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_ptr</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_ptr<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">More...</a><br /></td></tr>\n<tr class=\"separator:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga21982104164789cf8985483aaefc25e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21982104164789cf8985483aaefc25e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">More...</a><br /></td></tr>\n<tr class=\"separator:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from a pointer.  <a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">make_vec1</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">make_vec1</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga13c92b81e55f201b052a6404d57da220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">make_vec1</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">make_vec2</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">make_vec2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae54bd325a08ad26edf63929201adebc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">make_vec2</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">make_vec2</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">make_vec3</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">make_vec3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga482b60a842a5b154d3eed392417a9511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">More...</a><br /></td></tr>\n<tr class=\"separator:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">make_vec3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacd57046034df557b8b1c457f58613623\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd57046034df557b8b1c457f58613623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">make_vec3</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">make_vec4</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">make_vec4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">make_vec4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">make_vec4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga63f576518993efc22a969f18f80e29bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type const *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the constant address to the data of the input parameter.  <a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension. </p>\n<p>Handles the interaction between pointers and vector, matrix types.</p>\n<p>This extension defines an overloaded function, glm::value_ptr. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.</p>\n<p>This is useful for uploading data to matrices or copying data to buffer objects.</p>\n<p>Example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00175.html\">glm/gtc/type_ptr.hpp</a>&gt;</span></div>\n<div class=\"line\"></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a> aVector(3);</div>\n<div class=\"line\"><a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a> someMatrix(1.0);</div>\n<div class=\"line\"></div>\n<div class=\"line\">glUniform3fv(uniformLoc, 1, <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a>(aVector));</div>\n<div class=\"line\">glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a>(someMatrix));</div>\n</div><!-- fragment --><p>&lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; need to be included to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga04409e74dc3da251d2501acf5b4b546c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::make_mat2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae49e1c7bcd5abec74d1c34155031f663\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::make_mat2x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga21982104164789cf8985483aaefc25e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 3, T, defaultp&gt; glm::make_mat2x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga078b862c90b0e9a79ed43a58997d8388\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, defaultp&gt; glm::make_mat2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga611ee7c4d4cadfc83a8fa8e1d10a170f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::make_mat3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27a24e121dc39e6857620e0f85b6e1a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 2, T, defaultp&gt; glm::make_mat3x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2e8337b15c3362aaeb6e5849e1c0536\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::make_mat3x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05dd66232aedb993e3b8e7b35eaf932b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, defaultp&gt; glm::make_mat3x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7bcedb710d1446c87fd1fc93ed8ee9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::make_mat4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b34c9b25bf3310d8ff9c828c7e2d97c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 2, T, defaultp&gt; glm::make_mat4x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0330bf6640092d7985fac92927bbd42b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 3, T, defaultp&gt; glm::make_mat4x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f084be30e404844bfbb4a551ac2728c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::make_mat4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58110d7d81cf7d029e2bab7f8cd9b246\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, defaultp&gt; glm::make_quat </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a quaternion from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4135f03f3049f0a4eb76545c4967957c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13c92b81e55f201b052a6404d57da220\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c23cc74086d361e22bbd5e91a334e03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6af06bb60d64ca8bcd169e3c93bc2419\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8476d0e6f1b9b4a6193cc25f59d8a896\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae54bd325a08ad26edf63929201adebc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0084fea4694cf47276e9cccbe7b1015a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b81f71f3a222fe5bba81e3983751249\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81253cf7b0ebfbb1e70540c5774e6824\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9147e4b3a5d0f4772edfbfd179d7ea0b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga482b60a842a5b154d3eed392417a9511\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd57046034df557b8b1c457f58613623\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b589ed7d41a298b516d2a69169248f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9e0d36ff489cb30c65ad1fa40351651\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga600cb97f70c5d50d3a4a145e1cafbf37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9bd116caf28196fd1cf00b278286fa7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4036328ba4702c74cbdfad1fc03d1b8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa95cb15732f708f613e65a0578895ae5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63f576518993efc22a969f18f80e29bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, defaultp&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c64669e1ba1160ad9386e43dc57569a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type const* glm::value_ptr </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the constant address to the data of the input parameter. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00306.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. This extension works on floating-point data and provide results in ULP. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00307.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_vec1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_vec1<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add vec1, ivec1, uvec1 and bvec1 types. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00308.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_associated_min_max</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_associated_min_max<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">associatedMax</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)</td></tr>\n<tr class=\"memdesc:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">associatedMin</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:gacc01bd272359572fc28437ae214a02df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc01bd272359572fc28437ae214a02df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacfec519c820331d023ef53a511749319\">associatedMin</a> (T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)</td></tr>\n<tr class=\"memdesc:gacfec519c820331d023ef53a511749319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacfec519c820331d023ef53a511749319\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfec519c820331d023ef53a511749319\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">associatedMin</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension. </p>\n<p>Min and max functions that return associated values not the compared onces. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga7d9c8785230c8db60f72ec8975f1ba45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c6758bc50aa7fbe700f87123a045aad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d169d6ce26b03248df175f39005d77f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4086269afabcb81dd7ded33cb3448653\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec891e363d91abbf3a4443cf2f652209\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab84fdc35016a31e8cd0cbb8296bddf7c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadd2a2002f4f2144bbc39eb2336dd2fba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19f59d1141a51a3b2108a9807af78f7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3038ffcb43eaa6af75897a99a5047ccc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga11477c2c4b5b0bfd1b72b29df3725a9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab9c3dd74cac899d2c625b5767ea3b3fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc01bd272359572fc28437ae214a02df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac2f0dff90948f2e44386a5eafd941d1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfec519c820331d023ef53a511749319\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const vec&lt; L, U, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const vec&lt; L, U, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4757c7cab2d809124a8525d0a9deeb37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0aa8f86259a26d839d34a3577a923fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga723e5411cebc7ffbd5c81ffeec61127d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga432224ebe2085eaa2b63a077ecbbbff6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66b08118bc88f0494bcacb7cdb940556\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78c28fde1a7080fb7420bd88e68c6c68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db7e351994baee78540a562d4bb6d3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00309.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_bit</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_bit<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05\">highestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the highest bit set to 1 in a integer variable and return its value.  <a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">powerOfTwoAbove</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">powerOfTwoBelow</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">powerOfTwoNearest</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0dcc8fe7c3d3ad60dea409281efa3d05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::highestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga898ef075ccf809a1e480faab48fe96bf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::highestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the highest bit set to 1 in a integer variable and return its value. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ff6568089f3a9b67f5c30918855fc6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::lowestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cda2459871f574a0aecbe702ac93291\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoAbove </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value. </p>\n<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2bbded187c5febfefc1e524ba31b3fab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoAbove </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value. </p>\n<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3de7df63c589325101a2817a56f8e29d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoBelow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value. </p>\n<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf78ddcc4152c051b2a21e68fecb10980\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoBelow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value. </p>\n<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f65973a5d2ea38c719e6a663149ead9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoNearest </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac87e65d11e16c3d6b91c3bcfaef7da0b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoNearest </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00310.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_closest_point</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_closest_point<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">closestPointOnLine</a> (vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga36529c278ef716986151d58d151d697d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the point on a straight line which is the closet of a point.  <a href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36529c278ef716986151d58d151d697d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a> (vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2d lines work as well <br /></td></tr>\n<tr class=\"separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension. </p>\n<p>Find the point on a straight line which is the closet of a point. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga36529c278ef716986151d58d151d697d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::closestPointOnLine </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the point on a straight line which is the closet of a point. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00310.html\" title=\"Include <glm/gtx/closest_point.hpp> to use the features of this extension. \">GLM_GTX_closest_point</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00311.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_encoding</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_encoding<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad12f4f65022b2c80e33fcba2ced0dc48\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5265386fc3ac29e4c580d37ed470859c\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to linear sRGB. <br /></td></tr>\n<tr class=\"separator:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1522ba180e3d83d554a734056da031f9\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:ga1522ba180e3d83d554a734056da031f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf9e130d9d4ccf51cc99317de7449f369\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D65 YUV. <br /></td></tr>\n<tr class=\"separator:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00312.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_space<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a> (vec&lt; 3, T, Q &gt; const &amp;rgbValue)</td></tr>\n<tr class=\"memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from RGB color space to its color in HSV color space.  <a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a> (vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.  <a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">More...</a><br /></td></tr>\n<tr class=\"separator:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a> (vec&lt; 3, T, Q &gt; const &amp;hsvValue)</td></tr>\n<tr class=\"memdesc:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from HSV color space to its color in RGB color space.  <a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">saturation</a> (T const s)</td></tr>\n<tr class=\"memdesc:ga01a97152b44e1550edcac60bd849e884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a saturation matrix.  <a href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">saturation</a> (T const s, vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a> (T const s, vec&lt; 4, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension. </p>\n<p>Related to RGB to HSV conversions and operations. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga789802bec2d4fe0f9741c731b4a8a7d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::hsvColor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbValue</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a color from RGB color space to its color in HSV color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad028e0a4f1a9c812b39439b746295b34\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::luminosity </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f9193be46f45f0655c05a0cdca006db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgbColor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>hsvValue</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a color from HSV color space to its color in RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01a97152b44e1550edcac60bd849e884\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a saturation matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2156cea600e90148ece5bc96fd6db43a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modify the saturation of a color. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba0eacee0736dae860e9371cc1ae4785\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modify the saturation of a color. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00313.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_space_YCoCg</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_space_YCoCg<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCg color space.  <a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCgR color space.  <a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:ga163596b804c7241810b2534a99eb1343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCg color space to RGB color space.  <a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">More...</a><br /></td></tr>\n<tr class=\"separator:ga163596b804c7241810b2534a99eb1343\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:gaf8d30574c8576838097d8e20c295384a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCgR color space to RGB color space.  <a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension. </p>\n<p>RGB to YCoCg conversions and operations </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0606353ec2a9b9eaa84f1b02ec391bc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgb2YCoCg </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from RGB color space to YCoCg color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0389772e44ca0fd2ba4a79bdd8efe898\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgb2YCoCgR </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from RGB color space to YCoCgR color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>\"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\" </dd>\n<dd>\n<a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga163596b804c7241810b2534a99eb1343\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::YCoCg2rgb </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>YCoCgColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from YCoCg color space to RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf8d30574c8576838097d8e20c295384a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::YCoCgR2rgb </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>YCoCgColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from YCoCgR color space to RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>\"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\" </dd>\n<dd>\n<a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00314.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_common<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae5e80425df9833164ad469e83b475fb4\"><td class=\"mdescLeft\">&#160;</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>\n<tr class=\"separator:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::bool_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"mdescLeft\">&#160;</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>\n<tr class=\"separator:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide functions to increase the compatibility with Cg and HLSL languages </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gab7d89c14c48ad01f720fb5daf8813161\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::closeBounded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns whether vector components values are within an interval. </p>\n<p>A closed interval includes its endpoints, and is denoted with square brackets.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5e80425df9833164ad469e83b475fb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmod </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Similar to 'mod' but with a different rounding and integer support. </p>\n<p>Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\">GLSL mod vs HLSL fmod</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74aa7c7462245d83bd5a9edf9c6c2d91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::bool_type glm::isdenormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>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. </p>\n<p>This format is less precise but can represent values closer to zero.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a> </dd>\n<dd>\n<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>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd303042ba2ba695bf53b2315f53f93f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::openBounded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns whether vector components values are within an interval. </p>\n<p>A open interval excludes its endpoints, and is denoted with square brackets.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00315.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_compatibility</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_compatibility<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaddcd7aa2e30e61af5b38660613d3979e\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a></td></tr>\n<tr class=\"memdesc:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f895c936f0c29c8729afbbf22806090\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a></td></tr>\n<tr class=\"memdesc:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa09ab65ec9c3c54305ff502e2b1fe6d9\"></a>\ntypedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a></td></tr>\n<tr class=\"memdesc:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb3703955e513632f98ba12fe051ba3e\"></a>\ntypedef mat&lt; 2, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a></td></tr>\n<tr class=\"memdesc:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ae6ee155d0f90cb1ae5b6c4546738a0\"></a>\ntypedef mat&lt; 2, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a></td></tr>\n<tr class=\"memdesc:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d7fa65be8e8e4ad6d920b45c44e471f\"></a>\ntypedef mat&lt; 2, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a></td></tr>\n<tr class=\"memdesc:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99629f818737f342204071ef8296b2ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99629f818737f342204071ef8296b2ed\"></a>\ntypedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a></td></tr>\n<tr class=\"memdesc:ga99629f818737f342204071ef8296b2ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga99629f818737f342204071ef8296b2ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac7d7311f7e0fa8b6163d96dab033a755\"></a>\ntypedef mat&lt; 3, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a></td></tr>\n<tr class=\"memdesc:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c97b99aac3e302053ffb58aace9033c\"></a>\ntypedef mat&lt; 3, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a></td></tr>\n<tr class=\"memdesc:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae7d6b679463d37d6c527d478fb470fdf\"></a>\ntypedef mat&lt; 3, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a></td></tr>\n<tr class=\"memdesc:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13c3200b82708f73faac6d7f09ec91a3\"></a>\ntypedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a></td></tr>\n<tr class=\"memdesc:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ed830f52408b2f83c085063a3eaf1d0\"></a>\ntypedef mat&lt; 4, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a></td></tr>\n<tr class=\"memdesc:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad0f5dc7f22c2065b1b06d57f1c0658fe\"></a>\ntypedef mat&lt; 4, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a></td></tr>\n<tr class=\"memdesc:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7d2a7d13986602ae2896bfaa394235d4\"></a>\ntypedef mat&lt; 4, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a></td></tr>\n<tr class=\"memdesc:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20b861a9b6e2a300323671c57a02525b\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a></td></tr>\n<tr class=\"memdesc:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45f16a4dd0db1f199afaed9fd12fe9a8\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a></td></tr>\n<tr class=\"memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31b729b04facccda73f07ed26958b3c2\"></a>\ntypedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a></td></tr>\n<tr class=\"memdesc:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae57d0201096834d25f2b91b319e7cdbd\"></a>\ntypedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a></td></tr>\n<tr class=\"memdesc:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3655bc324008553ca61f39952d0b2d08\"></a>\ntypedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a></td></tr>\n<tr class=\"memdesc:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacd33061fc64a7b2dcfd7322c49d9557a\"></a>\ntypedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a></td></tr>\n<tr class=\"memdesc:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3d8b9028a1053a44a98902cd1c389472\"></a>\ntypedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a></td></tr>\n<tr class=\"memdesc:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ec08fc39c9d783dfcc488be240fe975\"></a>\ntypedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a></td></tr>\n<tr class=\"memdesc:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4bad5bb20c6ddaecfe4006c93841d180\"></a>\ntypedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a></td></tr>\n<tr class=\"memdesc:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ef022e453d663d70aec414b2a80f756\"></a>\ntypedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a></td></tr>\n<tr class=\"memdesc:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf92f58af24f35617518aeb3d4f63fda6\"></a>\ntypedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a></td></tr>\n<tr class=\"memdesc:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabca29ccceea53669618b751aae0ba83d\"></a>\ntypedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a></td></tr>\n<tr class=\"memdesc:gabca29ccceea53669618b751aae0ba83d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafad66a02ccd360c86d6ab9ff9cfbc19c\"></a>\ntypedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a></td></tr>\n<tr class=\"memdesc:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab541bed2e788e4537852a2492860806\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaab541bed2e788e4537852a2492860806\"></a>\ntypedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a></td></tr>\n<tr class=\"memdesc:gaab541bed2e788e4537852a2492860806\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaab541bed2e788e4537852a2492860806\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf5208d01f6c6fbcb7bb55d610b9c0ead\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a></td></tr>\n<tr class=\"memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73720b8dc4620835b17f74d428f98c0c\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a></td></tr>\n<tr class=\"memdesc:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02d3c013982c183906c61d74aa3166ce\"></a>\ntypedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a></td></tr>\n<tr class=\"memdesc:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga33d43ecbb60a85a1366ff83f8a0ec85f\"></a>\ntypedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a></td></tr>\n<tr class=\"memdesc:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga939b0cff15cee3030f75c1b2e36f89fe\"></a>\ntypedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a></td></tr>\n<tr class=\"memdesc:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafec3cfd901ab334a92e0242b8f2269b4\"></a>\ntypedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a></td></tr>\n<tr class=\"memdesc:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga821ff110fc8533a053cbfcc93e078cc0\"></a>\ntypedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a></td></tr>\n<tr class=\"memdesc:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa6c69f04ba95f3faedf95dae874de576\"></a>\ntypedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a></td></tr>\n<tr class=\"memdesc:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6ceb5d38a58becdf420026e12a6562f3\"></a>\ntypedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a></td></tr>\n<tr class=\"memdesc:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d2679c321b793ca3784fe0315bb5332\"></a>\ntypedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a></td></tr>\n<tr class=\"memdesc:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae2da7345087db3815a25d8837a727ef1\"></a>\ntypedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a></td></tr>\n<tr class=\"memdesc:gae2da7345087db3815a25d8837a727ef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga308b9af0c221145bcfe9bfc129d9098e\"></a>\ntypedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a></td></tr>\n<tr class=\"memdesc:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac0a51b4812038aa81d73ffcc37f741ac\"></a>\ntypedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a></td></tr>\n<tr class=\"memdesc:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad3051649b3715d828a4ab92cdae7c3bf\"></a>\ntypedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a></td></tr>\n<tr class=\"memdesc:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0670a2111b5e4a6410bd027fa0232fc3\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a></td></tr>\n<tr class=\"memdesc:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga056ffe02d3a45af626f8e62221881c7a\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a></td></tr>\n<tr class=\"memdesc:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafe3a8fd56354caafe24bfe1b1e3ad22a\"></a>\ntypedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a></td></tr>\n<tr class=\"memdesc:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4e5ce477c15836b21e3c42daac68554d\"></a>\ntypedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a></td></tr>\n<tr class=\"memdesc:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga197ded5ad8354f6b6fb91189d7a269b3\"></a>\ntypedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a></td></tr>\n<tr class=\"memdesc:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2749d59a7fddbac44f34ba78e57ef807\"></a>\ntypedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a></td></tr>\n<tr class=\"memdesc:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga909c38a425f215a50c847145d7da09f0\"></a>\ntypedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a></td></tr>\n<tr class=\"memdesc:ga909c38a425f215a50c847145d7da09f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa4cbe16a92cf3664376c7a2fc5126aa8\"></a>\ntypedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a></td></tr>\n<tr class=\"memdesc:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga15c9649286f0bf431bdf9b3509580048\"></a>\ntypedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a></td></tr>\n<tr class=\"memdesc:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaacac46ddc7d15d0f9529d05c92946a0f\"></a>\ntypedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a></td></tr>\n<tr class=\"memdesc:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaecdef18c819c205aeee9f94dc93de56a\"></a>\ntypedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a></td></tr>\n<tr class=\"memdesc:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga97a39dd9bc7d572810d80b8467cbffa1\"></a>\ntypedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a></td></tr>\n<tr class=\"memdesc:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4a2c53f14aeec9a17c2b81142b7e82d\"></a>\ntypedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a></td></tr>\n<tr class=\"memdesc:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04dee1552424198b8f58b377c2ee00d8\"></a>\ntypedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a></td></tr>\n<tr class=\"memdesc:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac63011205bf6d0be82589dc56dd26708\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">atan2</a> (T x, T y)</td></tr>\n<tr class=\"memdesc:gac63011205bf6d0be82589dc56dd26708\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga83bc41bd6f89113ee8006576b12bfc50\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">atan2</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac39314f5087e7e51e592897cabbc1927\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">atan2</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gac39314f5087e7e51e592897cabbc1927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaba86c28da7bf5bdac64fecf7d56e8ff3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf4b04dcd3526996d68c1bfe17bfc8657\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657\">isfinite</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac3b12b8ac3014418fe53c299478b6603\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac3b12b8ac3014418fe53c299478b6603\">isfinite</a> (const vec&lt; 1, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8e76dc3e406ce6a4155c2b12a2e4b084\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084\">isfinite</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga929ef27f896d902c1771a2e5e150fc97\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga929ef27f896d902c1771a2e5e150fc97\">isfinite</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga19925badbe10ce61df1d0de00be0b5ad\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5494ba3a95ea6594c86fc75236886864\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">lerp</a> (T x, T y, T a)</td></tr>\n<tr class=\"memdesc:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa551c0a0e16d2d4608e49f7696df897f\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga44a8b5fd776320f1713413dec959b32a\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga89ac8e000199292ec7875519d27e214b\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga89ac8e000199292ec7875519d27e214b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf68de5baf72d16135368b8ef4f841604\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga4ae1a616c8540a2649eab8e0cd051bb3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab5477ab69c40de4db5d58d3359529724\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gab5477ab69c40de4db5d58d3359529724\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga0fd09e616d122bc2ed9726682ffd44b7\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">saturate</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaee97b8001c794a78a44f5d59f62a8aba\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">saturate</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga39bfe3a421286ee31680d45c31ccc161\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">saturate</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga356f8c3a7e7d6376d3d4b0a026407183\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide functions to increase the compatibility with Cg and HLSL languages </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00316.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_component_wise</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_component_wise<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add all vector components together.  <a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the maximum value between single vector components.  <a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the minimum value between single vector components.  <a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply all vector components together.  <a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert an integer vector to a normalized float vector.  <a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga80abc2980d65d675f435d178c36880eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a normalized float vector to an integer vector.  <a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension. </p>\n<p>Operations between components of a type </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf71833350e15e74d31cbf8a3e7f27051\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compAdd </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Add all vector components together. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabfa4bb19298c8c73d4217ba759c496b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the maximum value between single vector components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab5d0832b5c7bb01b8d7395973bfb1425\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the minimum value between single vector components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8ab88024197202c9479d33bdc5a8a5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMul </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiply all vector components together. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f2b81ada8515875e58cb1667b6b9908\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::compNormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert an integer vector to a normalized float vector. </p>\n<p>If the parameter value type is already a floating qualifier type, the value is passed through. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80abc2980d65d675f435d178c36880eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::compScale </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a normalized float vector to an integer vector. </p>\n<p>If the parameter value type is already a floating qualifier type, the value is passed through. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00317.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_dual_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_dual_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_ddualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a></td></tr>\n<tr class=\"memdesc:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of default double-qualifier floating-point numbers.  <a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a></td></tr>\n<tr class=\"memdesc:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of floating-point numbers.  <a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a></td></tr>\n<tr class=\"memdesc:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of single-qualifier floating-point numbers.  <a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">More...</a><br /></td></tr>\n<tr class=\"separator:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high double-qualifier floating-point numbers.  <a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a></td></tr>\n<tr class=\"memdesc:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a></td></tr>\n<tr class=\"memdesc:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low double-qualifier floating-point numbers.  <a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a></td></tr>\n<tr class=\"memdesc:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a></td></tr>\n<tr class=\"memdesc:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium double-qualifier floating-point numbers.  <a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a></td></tr>\n<tr class=\"memdesc:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an identity dual quaternion.  <a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gac4064ff813759740201765350eac4236\">dualquat_cast</a> (mat&lt; 2, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac4064ff813759740201765350eac4236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.  <a href=\"a00317.html#gac4064ff813759740201765350eac4236\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4064ff813759740201765350eac4236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a> (mat&lt; 3, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.  <a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a> (tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gace8380112d16d33f520839cb35a4d173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the linear interpolation of two dual quaternion.  <a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">More...</a><br /></td></tr>\n<tr class=\"separator:gace8380112d16d33f520839cb35a4d173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 2 * 4 matrix.  <a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 4 matrix.  <a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga299b8641509606b1958ffa104a162cfe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a templated dual-quaternion type and several dual-quaternion operations. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga3d71f98d84ba59dfe4e369fde4714cd6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_ddualquat ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of default double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae93abee0c979902fbec6a7bee0f6fae1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fdualquat dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00236\">236</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga237c2b9b42c9a930e49de5840ae0f930\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fdualquat fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00241\">241</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f67eafa7197d7a668dad5105a463d2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, highp&gt; highp_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00229\">229</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ef5bf1da52a9d4932335a517086ceaf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, highp&gt; highp_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00197\">197</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4c4e55e9c99dc57b299ed590968da564\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, highp&gt; highp_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00213\">213</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4c5103338af3dac7e0fbc86895a3f1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, lowp&gt; lowp_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00219\">219</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade05d29ebd4deea0f883d0e1bb4169aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, lowp&gt; lowp_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00187\">187</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa38f671be25a7f3b136a452a8bb42860\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, lowp&gt; lowp_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00203\">203</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0fb11e48e2d16348ccb06a25213641b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, mediump&gt; mediump_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00224\">224</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7aeb54c167712b38f2178a1be2360ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, mediump&gt; mediump_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00192\">192</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a6b594ff7e81150d8143001367a9431\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, mediump&gt; mediump_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00208\">208</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0b35c0e30df8a875dbaa751e0bd800e0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dual_quat_identity </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates an identity dual quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac4064ff813759740201765350eac4236\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dualquat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91025ebdca0f4ea54da08497b00e8c84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dualquat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga070f521a953f6461af4ab4cf8ccbf27e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q inverse. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace8380112d16d33f520839cb35a4d173\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::lerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the linear interpolation of two dual quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtc_dual_quaternion </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae99d143b37f9cad4cd9285571aab685a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; glm::mat2x4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 2 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf59f5bb69620d2891c3795c6f2639179\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; glm::mat3x4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga299b8641509606b1958ffa104a162cfe\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the normalized quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00318.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_easing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_easing<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga93cddcdb6347a44d5927cc2bf2570816\">backEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace6d24722a2f6722b56398206eb810bb\">backEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gabf25069fa906413c858fd46903d520b9\">backEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gabf25069fa906413c858fd46903d520b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga34508d4b204a321ec26d6086aa047997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant IV of unit circle.  <a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].  <a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant II of unit circle.  <a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaff52f746102b94864d105563ba8895ae\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaff52f746102b94864d105563ba8895ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = x^3. <br /></td></tr>\n<tr class=\"separator:gaff52f746102b94864d105563ba8895ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga55134072b42d75452189321d4a2ad91c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = (x - 1)^3 + 1.  <a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))  <a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">More...</a><br /></td></tr>\n<tr class=\"separator:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.  <a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">More...</a><br /></td></tr>\n<tr class=\"separator:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = 2^(10(x - 1))  <a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1].  <a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = -2^(-10x) + 1.  <a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the line y = x.  <a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">More...</a><br /></td></tr>\n<tr class=\"separator:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaf42089d35855695132d217cd902304a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = x^2.  <a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf42089d35855695132d217cd902304a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1].  <a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = -x^2 + 2x.  <a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic x^4.  <a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga6d000f852de12b197e154f234b20c505\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1].  <a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d000f852de12b197e154f234b20c505\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic y = 1 - (x - 1)^4.  <a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga097579d8e087dcf48037588140a21640\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = x^5.  <a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">More...</a><br /></td></tr>\n<tr class=\"separator:ga097579d8e087dcf48037588140a21640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = (x - 1)^5 + 1.  <a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave.  <a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after half sine wave.  <a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave (different phase)  <a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension. </p>\n<p>Easing functions for animations and transitons All functions take a parameter x in the range [0.0,1.0]</p>\n<p>Based on the AHEasing project of Warren Moore (<a href=\"https://github.com/warrenm/AHEasing\">https://github.com/warrenm/AHEasing</a>) </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga93cddcdb6347a44d5927cc2bf2570816\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga33777c9dd98f61d9472f96aafdf2bd36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace6d24722a2f6722b56398206eb810bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga68a7b760f2afdfab298d5cd6d7611fb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf25069fa906413c858fd46903d520b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga640c1ac6fe9d277a197da69daf60ee4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaac30767f2e430b0c3fc859a4d59c7b5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf9f38eff1e5f4c2fa5b629a25ae413e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94007005ff0dcfa0749ebfa2aec540b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga34508d4b204a321ec26d6086aa047997\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after shifted quadrant IV of unit circle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c1027637a5b02d4bb3612aa12599d69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26fefde9ced9b72745fe21f1a3fe8da7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after shifted quadrant II of unit circle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga55134072b42d75452189321d4a2ad91c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubicEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40d746385d8bcc5973f5bc6a2340ca91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubicEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the cubic y = (x - 1)^3 + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga230918eccee4e113d10ec5b8cdc58695\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db4ac8959559b11b4029e54812908d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace9c9d1bdf88bf2ab1e7cdefa54c7365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f24ee9219ab4c84dc8de24be84c1e3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the exponential function y = 2^(10(x - 1)) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga232fb6dc093c5ce94bee105ff2947501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga517f2bcfd15bc2c25c466ae50808efc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the exponential function y = -2^(-10x) + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga290c3e47cb0a49f2e8abe90b1872b649\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::linearInterpolation </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the line y = x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf42089d35855695132d217cd902304a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the parabola y = x^2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e8fc2d7945a4e63ee33b2159c14cea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga283717bc2d937547ad34ec0472234ee3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the parabola y = -x^2 + 2x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga808b41f14514f47dad5dcc69eb924afd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quartic x^4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d000f852de12b197e154f234b20c505\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4dfb33fa7664aa888eb647999d329b98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quartic y = 1 - (x - 1)^4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga097579d8e087dcf48037588140a21640\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quintic y = x^5. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a82d5c46df7e2d21cc0108eb7b83934\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dbd4d5c8da3f5353121f615e7b591d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quintic y = (x - 1)^5 + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb338ac6f6b2bcafee50e3dca5201dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after quarter-cycle of sine wave. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa46e3d5fbf7a15caa28eff9ef192d7c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after half sine wave. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3e454f883afc1606ef91363881bf5a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after quarter-cycle of sine wave (different phase) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00319.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_euler_angles</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_euler_angles<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a> (T const &amp;angleX, T const &amp;angularVelocityX)</td></tr>\n<tr class=\"memdesc:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.  <a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a> (T const &amp;angleY, T const &amp;angularVelocityY)</td></tr>\n<tr class=\"memdesc:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.  <a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a> (T const &amp;angleZ, T const &amp;angularVelocityZ)</td></tr>\n<tr class=\"memdesc:gae8b397348201c42667be983ba3f344df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.  <a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8b397348201c42667be983ba3f344df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a> (T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.  <a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a> (T const &amp;angleX, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).  <a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).  <a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).  <a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a> (T const &amp;angleX, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).  <a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).  <a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).  <a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">More...</a><br /></td></tr>\n<tr class=\"separator:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a> (T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.  <a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a> (T const &amp;angleY, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).  <a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga750fba9894117f87bcc529d7349d11de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).  <a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a> (T const &amp;angleY, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).  <a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).  <a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).  <a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a> (T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.  <a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a> (T const &amp;angle, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga483903115cd4059228961046a28d69b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).  <a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga483903115cd4059228961046a28d69b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).  <a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).  <a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">More...</a><br /></td></tr>\n<tr class=\"separator:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a> (T const &amp;angleZ, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).  <a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).  <a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).  <a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaab8868556361a190db94374e9983ed39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab8868556361a190db94374e9983ed39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga9049b78466796c0de2971756e25b93d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga59359fef9bad92afaca55e193f91e702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 2 * 2 rotation matrix from an euler angle.  <a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">orientate3</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.  <a href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gae6aa26ccb020d281b449619e419a609e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build matrices from Euler angles.</p>\n<p>Extraction of Euler angles from rotation matrix. Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga994b8186b3b80d91cf90bc403164692f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0a4c56ecce7abcb69508ebe6313e9d10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8b397348201c42667be983ba3f344df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafba6282e4ed3ff8b5c75331abfba3489\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64036577ee17a2d24be0dbc05881d4e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29bd0787a28a6648159c0d6e69706066\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1975e0f0e9bed7f716dc9946da2ab645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa39bd323c65c2fc0a1508be33a237ce9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60171c79a17aec85d7891ae1d1533ec9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga996dce12a60d8a674ba6737a535fa910\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab84bf4746805fd69b8ecbb230e3974c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga750fba9894117f87bcc529d7349d11de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8ba99a9814f6d9edf417b6c6d5b0c10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>yaw</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>pitch</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>roll</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga220379e10ac8cca55e275f0c9018fed9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08bef16357b8f9b3051b3dcaec4b7848\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e5e40abc27630749b42b3327c76d6e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b3935248bb6c3ec6b0d9297d406e251\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga483903115cd4059228961046a28d69b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4505c54d2dd654df4569fd1f04c43aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga178f966c52b01e4d65e31ebd007e3247\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga400b2bd5984999efab663f3a68e1d020\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e61f1e39069c47530acab9167852dd6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd795f1dbecaf74974f9c76bbcca6830\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1077a72171d0f3b08f022ab5ff88af7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Y * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacea701562f778c1da4d3a0a1cf091000\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf0bc6c031f25fa3ee0055b62c8260d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Z * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe5a65d8eb1cd873c8de121cce1a15ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Z * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab8868556361a190db94374e9983ed39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * X * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf0937518e63037335a0e8358b6f053c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * X * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9049b78466796c0de2971756e25b93d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * Z * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga11dad972c109e4bf8694c915017c44a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81fbbca2ba0c778b9662d5355b4e2363\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * X * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga59359fef9bad92afaca55e193f91e702\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * X * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2d6c11a4abfa60c565483cee2d3f7665\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * Y * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafdfa880a64b565223550c2d3938b1aeb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae16738a9f1887cf4e4db6a124637608d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::orientate2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 2D 2 * 2 rotation matrix from an euler angle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ca98668a5786f19c7b38299ebbc9b4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::orientate3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7238c8e15c7720e3ca6a45ab151eeabb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::orientate3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angles</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a044653f71a4ecec68e0b623382b48a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::orientate4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angles</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6aa26ccb020d281b449619e419a609e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::yawPitchRoll </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>yaw</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>pitch</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>roll</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00320.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_extend</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_extend<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a> (genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</td></tr>\n<tr class=\"memdesc:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extends of Length the Origin position using the (Source - Origin) direction.  <a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extend a position from a source to a position at a defined length. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8140caae613b0f847ab0d7175dc03a37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::extend </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Origin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Source</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const&#160;</td>\n          <td class=\"paramname\"><em>Length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extends of Length the Origin position using the (Source - Origin) direction. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00320.html\" title=\"Include <glm/gtx/extend.hpp> to use the features of this extension. \">GLM_GTX_extend</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00321.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_extented_min_max</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_extented_min_max<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">fclamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:ga60796d08903489ee185373593bc16b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60796d08903489ee185373593bc16b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga95466987024d03039607f09e69813d69\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga95466987024d03039607f09e69813d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga95466987024d03039607f09e69813d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95466987024d03039607f09e69813d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension. </p>\n<p>Min and max functions for 3 to 4 parameters. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1e28539d3a46965ed9ef92ec7cb3b18a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60796d08903489ee185373593bc16b9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c15fa4709763c269c86c0b8b3aa2297\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5792cb2b51190057e4aea027eb56f81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd>\n<dd>\n<a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3200559611ac5b9b9ae7283547916a7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04991ccb9865c4c4e58488cfb209ce69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1b7bbe5c91de4924835ea3e14530744\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf832e9d4ab4826b2dda2fda25935a3a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78e04a0cef1c4863fcae1a2130500d87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cca8b53cfda402040494cdf40fbdf4a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaacffbc466c2d08c140b181e7fd8a4858\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga713d3f9b3e76312c0d314e0c8611a6a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74d1a96e7cdbac40f6d35142d3bcbbd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga95466987024d03039607f09e69813d69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fe35dd31dd0c45693c9b60b830b8d47\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7471ea4159eed8dd9ea4ac5d46c2fead\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00322.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_exterior_product</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_exterior_product<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a> (vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</td></tr>\n<tr class=\"memdesc:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">More...</a><br /></td></tr>\n<tr class=\"separator:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gac36e72b934ea6a9dd313772d7e78fa93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>u</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the cross product of x and y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://en.wikipedia.org/wiki/Exterior_algebra#Cross_and_triple_products\">Exterior product</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00323.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_exponential</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_exponential<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">fastExp</a> (T x)</td></tr>\n<tr class=\"memdesc:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">fastExp2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0af50585955eb14c60bb286297fabab2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">fastLog</a> (T x)</td></tr>\n<tr class=\"memdesc:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log function but less accurate.  <a href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga937256993a7219e73f186bb348fe6be8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">fastLog2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7562043539194ccc24649f8475bc5584\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7562043539194ccc24649f8475bc5584\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">fastPow</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">fastPow</a> (genTypeT x, genTypeU y)</td></tr>\n<tr class=\"memdesc:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of exponential based functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa3180ac8f96ab37ab96e0cacaf608e10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastExp </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ba6153aec6bd74628f8b00530aa8d58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastExp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0af50585955eb14c60bb286297fabab2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastExp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacaaed8b67d20d244b7de217e7816c1b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastExp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1bdc97b7f96a600e29c753f1cd4388a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLog </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga937256993a7219e73f186bb348fe6be8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastLog </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e98118685f6dc9e05fbb13dd5e5234e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLog2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7562043539194ccc24649f8475bc5584\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastLog2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5340e98a11fcbbd936ba6e983a154d50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15325a8ed2d1c4ed2412c4b3b3927aa2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f2562db9c3e02ae76169c36b086c3f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genTypeT glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeU&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1abe488c0829da5b9de70ac64aeaa7e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00324.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_square_root</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_square_root<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">fastDistance</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">fastInverseSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">More...</a><br /></td></tr>\n<tr class=\"separator:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">fastLength</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafe697d6287719538346bbdf8b1367c59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common normalize function but less accurate.  <a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">fastSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of square root based functions.</p><ul>\n<li>Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956 </li>\n</ul>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaac333418d0c4e0cc6d3d219ed606c238\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastDistance </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common distance function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42d3e771fa7cb3c60d828e315829df19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastDistance </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common distance function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f081b14d9c7035c8714eba5f7f75a8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastInverseSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common inversesqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadcd7be12b1e5ee182141359d4c45dd24\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastInverseSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common inversesqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe697d6287719538346bbdf8b1367c59\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastLength </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common length function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga90f66be92ef61e705c005e7b3209edb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLength </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common length function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b02c1d6e0c754144e2f1e110bf9f16c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastNormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common normalize function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6c460e9414a50b2fc455c8f64c86cdc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae83f0c03614f73eae5478c5b6274ee6d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00325.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_trigonometry</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_trigonometry<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common acos function but less accurate.  <a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common asin function but less accurate.  <a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">fastAtan</a> (T y, T x)</td></tr>\n<tr class=\"memdesc:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gae25de86a968490ff56856fa425ec9d30\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">More...</a><br /></td></tr>\n<tr class=\"separator:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a> (T angle)</td></tr>\n<tr class=\"memdesc:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common cos function but less accurate.  <a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sin function but less accurate.  <a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common tan function but less accurate.  <a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.  <a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">More...</a><br /></td></tr>\n<tr class=\"separator:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of trigonometric functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga9721d63356e5d94fdc4b393a426ab26b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAcos </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common acos function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga562cb62c51fbfe7fac7db0bce706b81f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAsin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common asin function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d197c6ef564f5e5d59af3b3f8adcc2c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAtan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common atan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae25de86a968490ff56856fa425ec9d30\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAtan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common atan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab34c8b45c23c0165a64dcecfcc3b302a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastCos </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common cos function but less accurate. </p>\n<p>From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0aab3257bb3b628d10a1e0483e2c6915\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastSin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sin function but less accurate. </p>\n<p>From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf29b9c1101a10007b4f79ee89df27ba2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastTan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common tan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga069527c6dbd64f53435b8ebc4878b473\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::wrapAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00326.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_functions<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>\n<tr class=\"memdesc:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1D gauss function  <a href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a> (vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</td></tr>\n<tr class=\"memdesc:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2D gauss function  <a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension. </p>\n<p>List of useful common functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0b50b197ff74261a0fad90f4b8d24702\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::gauss </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>ExpectedValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>StandardDeviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1D gauss function </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad19ec8754a83c0b9a8dc16b7e60705ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::gauss </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Coord</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ExpectedValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>StandardDeviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2D gauss function </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00327.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_gradient_paint</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_gradient_paint<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:ga849241df1e55129b8ce9476200307419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a linear gradient.  <a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga849241df1e55129b8ce9476200307419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a radial gradient.  <a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions that return the color of procedural gradient for specific coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga849241df1e55129b8ce9476200307419\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::linearGradient </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Point0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Point1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a color from a linear gradient. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>- <a class=\"el\" href=\"a00327.html\" title=\"Include <glm/gtx/gradient_paint.hpp> to use the features of this extension. \">GLM_GTX_gradient_paint</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaecb1e93de4cbe0758b882812d4da294\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::radialGradient </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Radius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Focal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a color from a radial gradient. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>- <a class=\"el\" href=\"a00327.html\" title=\"Include <glm/gtx/gradient_paint.hpp> to use the features of this extension. \">GLM_GTX_gradient_paint</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00328.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_handed_coordinate_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_handed_coordinate_space<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron left handed or not.  <a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga99386a5ab5491871b947076e21699cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron right handed or not.  <a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension. </p>\n<p>To know if a set of three basis vectors defines a right or left-handed coordinate system. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga6f1bad193b9a3b048543d1935cf04dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::leftHanded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>tangent</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>binormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return if a trihedron left handed or not. </p>\n<p>From GLM_GTX_handed_coordinate_space extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99386a5ab5491871b947076e21699cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::rightHanded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>tangent</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>binormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return if a trihedron right handed or not. </p>\n<p>From GLM_GTX_handed_coordinate_space extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00329.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_hash</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_hash<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add std::hash support for glm types </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00330.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef signed int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a></td></tr>\n<tr class=\"memdesc:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit signed integer.  <a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">More...</a><br /></td></tr>\n<tr class=\"separator:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.  <a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a> (unsigned int x)</td></tr>\n<tr class=\"memdesc:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the floor log2 of x.  <a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">mod</a> (int x, int y)</td></tr>\n<tr class=\"memdesc:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of leading zeros.  <a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">pow</a> (int x, uint y)</td></tr>\n<tr class=\"memdesc:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">sqrt</a> (int x)</td></tr>\n<tr class=\"memdesc:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add support for integer for core functions </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gada7e83fdfe943aba4f1d5bf80cb66f40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef signed int sint</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32bit signed integer. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00042_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00042_source.html\">gtx/integer.hpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8cbd3120905f398ec321b5d1836e08fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::factorial </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7011b4e1c1e1ed492149b028feacc00e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL unsigned int glm::floor_log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the floor log2 of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabfbb41531ab7ad8d06fc176edfba785\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63fc8d63e7da1706439233b386ba8b6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78dff8bdb361bf0061194c93e003d189\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::nlz </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of leading zeros. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga465016030a81d513fa2fac881ebdaa83\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the y power. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga998e5ee915d3769255519e2fbaa2bbf0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the y power. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ce36693a75879ccd9bb10167cfa722d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1975d318978d6dacf78b6444fa5ed7bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00331.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_intersect</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_intersect<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a> (genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</td></tr>\n<tr class=\"memdesc:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a sphere.  <a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</td></tr>\n<tr class=\"memdesc:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a triangle.  <a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gad3697a9700ea379739a667ea02573488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a plane.  <a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3697a9700ea379739a667ea02573488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection distance of a ray and a sphere.  <a href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</td></tr>\n<tr class=\"memdesc:gad28c00515b823b579c608aafa1100c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a sphere.  <a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</td></tr>\n<tr class=\"memdesc:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a triangle.  <a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add intersection functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectLineSphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type&#160;</td>\n          <td class=\"paramname\"><em>sphereRadius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition2</em> = <code>genType()</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal2</em> = <code>genType()</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a line and a sphere. </p>\n<p>From GLM_GTX_intersect extension </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d29b9b3acb504d43986502f42740df4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectLineTriangle </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a line and a triangle. </p>\n<p>From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3697a9700ea379739a667ea02573488\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRayPlane </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>planeOrig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>planeNormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionDistance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a plane. </p>\n<p>Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac88f8cd84c4bcb5b947d56acbbcfa56e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRaySphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayStarting</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayNormalizedDirection</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const&#160;</td>\n          <td class=\"paramname\"><em>sphereRadiusSquared</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionDistance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection distance of a ray and a sphere. </p>\n<p>The ray direction vector is unit length. From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad28c00515b823b579c608aafa1100c1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRaySphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayStarting</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayNormalizedDirection</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const typename genType::value_type&#160;</td>\n          <td class=\"paramname\"><em>sphereRadius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a sphere. </p>\n<p>From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65bf2c594482f04881c36bc761f9e946\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRayTriangle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>baryPosition</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>distance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a triangle. </p>\n<p>Based om Tomas Möller implementation <a href=\"http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/\">http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/</a> From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00332.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_io</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_io<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension. </p>\n<p>std::[w]ostream support for glm types</p>\n<p>std::[w]ostream support for glm types + qualifier/width/etc. manipulators based on howard hinnant's std::chrono io proposal [<a href=\"http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html\">http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html</a>] </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00333.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_log_base</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_log_base<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a> (genType const &amp;x, genType const &amp;base)</td></tr>\n<tr class=\"memdesc:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</td></tr>\n<tr class=\"memdesc:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension. </p>\n<p>Logarithm for any base. base can be a vector or a scalar. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga60a7b0a401da660869946b2b77c710c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Logarithm for any base. </p>\n<p>From GLM_GTX_log_base. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04ef803a24f3d4f8c67dbccb33b0fce0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sign </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Logarithm for any base. </p>\n<p>From GLM_GTX_log_base. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00334.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_cross_product</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_cross_product<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga20057fff91ddafa102934adb25458cde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20057fff91ddafa102934adb25458cde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build cross product matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga5802386bb4c37b3332a3b6fd8b6960ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::matrixCross3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a cross product matrix. </p>\n<p>From GLM_GTX_matrix_cross_product extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20057fff91ddafa102934adb25458cde\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::matrixCross4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a cross product matrix. </p>\n<p>From GLM_GTX_matrix_cross_product extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00335.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_decompose</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_decompose<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a> (mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</td></tr>\n<tr class=\"memdesc:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decomposes a model matrix to translations, rotation and scale components.  <a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension. </p>\n<p>Decomposes a model matrix to translations, rotation and scale components </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gac0e342656ba09a9bc97c57182ba73124\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>modelMatrix</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>orientation</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>translation</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>skew</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>perspective</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Decomposes a model matrix to translations, rotation and scale components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00335.html\" title=\"Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension. \">GLM_GTX_matrix_decompose</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00336.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_factorisation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_factorisation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix columns right and left.  <a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:ga85003371f0ba97380dd25e8905de1870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix rows up and down.  <a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</td></tr>\n<tr class=\"memdesc:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs QR factorisation of a matrix.  <a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">More...</a><br /></td></tr>\n<tr class=\"separator:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</td></tr>\n<tr class=\"memdesc:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs RQ factorisation of a matrix.  <a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions to factor matrices in various forms </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf39f4e5f78eb29c1a90277d45b9b3feb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::fliplr </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Flips the matrix columns right and left. </p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85003371f0ba97380dd25e8905de1870\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::flipud </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Flips the matrix rows up and down. </p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac62d7bfc8dc661e616620d70552cd566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::qr_decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Performs QR factorisation of a matrix. </p>\n<p>Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m).</p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga82874e2ebe891ba35ac21d9993873758\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::rq_decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Performs RQ factorisation of a matrix. </p>\n<p>Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m).</p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00337.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_interpolation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_interpolation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</td></tr>\n<tr class=\"memdesc:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the axis and angle of the rotation from a matrix.  <a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a> (vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</td></tr>\n<tr class=\"memdesc:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from axis and angle.  <a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</td></tr>\n<tr class=\"memdesc:gabbc1c7385a145f04b5c54228965df145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the rotation part of a matrix.  <a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</td></tr>\n<tr class=\"memdesc:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a interpolation of 4 * 4 matrixes.  <a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allows to directly interpolate two matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gafefe32ce5a90a135287ba34fac3623bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::axisAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Mat</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>Axis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>Angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get the axis and angle of the rotation from a matrix. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a788e2f5223397df5c426413ecc2f6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::axisAngleMatrix </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Axis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>Angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from axis and angle. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabbc1c7385a145f04b5c54228965df145\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::extractMatrixRotation </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Mat</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the rotation part of a matrix. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e67863d150724b10c1ac00972dc958c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::interpolate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>Delta</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a interpolation of 4 * 4 matrixes. </p>\n<p>From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00338.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_major_storage</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_major_storage<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">colMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">colMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga86bd0656e787bb7f217607572590af27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86bd0656e787bb7f217607572590af27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">colMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">rowMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">rowMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga2ae46497493339f745754e40f438442e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae46497493339f745754e40f438442e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">rowMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build matrices with specific matrix order, row or column </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaaff72f11286e59a4a88ed21a347f284c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::colMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafc25fd44196c92b1397b127aec1281ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::colMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e25b72b085087740c92f5c70f3b051f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::colMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86bd0656e787bb7f217607572590af27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::colMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4aa6c7e17bfce41a6c13bf6469fab05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::colMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3f9511c366c20ba2e4a64c9e4cec2b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::colMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::rowMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf66c75ed69ca9e87462550708c2c6726\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::rowMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ae46497493339f745754e40f438442e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::rowMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8a3a50ab47bbe8d36cdb81d90dfcf77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::rowMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rowMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac92ad1c2acdf18d3eb7be45a32f9566b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rowMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00339.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_operation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_operation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">adjugate</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga40a38402a30860af6e508fe76211e659\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40a38402a30860af6e508fe76211e659\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">adjugate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab69f900206a430e2875a5a073851e175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69f900206a430e2875a5a073851e175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga832c805d5130d28ad76236958d15b47d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacb8969e6543ba775c6638161a37ac330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae235def5049d6740f0028433f5e13f90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae235def5049d6740f0028433f5e13f90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build diagonal matrices from vectors. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga40a38402a30860af6e508fe76211e659\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddb09f7abc1a9c56a243d32ff3538be6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9aaa7d1f40391b0b5cacccb60e104ba8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58a32a2beeb2478dae2a721368cdd4ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::diagonal2x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab69f900206a430e2875a5a073851e175\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; glm::diagonal2x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30b4dbfed60a919d66acc8a63bcdc549\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; glm::diagonal2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga832c805d5130d28ad76236958d15b47d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; glm::diagonal3x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5487ff9cdbc8e04d594adef1bcb16ee0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::diagonal3x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7551139cff0c4208d27f0ad3437833e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; glm::diagonal3x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb8969e6543ba775c6638161a37ac330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; glm::diagonal4x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae235def5049d6740f0028433f5e13f90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; glm::diagonal4x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b4cd8dea436791b072356231ee8578f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::diagonal4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00340.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_query</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_query<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an identity matrix.  <a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">isNormalized</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">isNormalized</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">isNull</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">isNull</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae14501c6b14ccda6014cc5350080103d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a null matrix.  <a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an orthonormalized matrix.  <a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension. </p>\n<p>Query to evaluate matrix properties </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaee935d145581c82e82b154ccfd78ad91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isIdentity </td>\n          <td>(</td>\n          <td class=\"paramtype\">matType&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is an identity matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae785af56f47ce220a1609f7f84aa077a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa068311695f28f5f555f5f746a6a66fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4d9bb4d0465df49fedfad79adc6ce4ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9790ec222ce948c0ff0d8ce927340dba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae14501c6b14ccda6014cc5350080103d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b98bb30a9fefa7cdea5f1dcddba677b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58f3289f74dcab653387dd78ad93ca40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isOrthogonal </td>\n          <td>(</td>\n          <td class=\"paramtype\">matType&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is an orthonormalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00341.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_transform_2d</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_transform_2d<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</td></tr>\n<tr class=\"memdesc:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 3 * 3 matrix created from an angle.  <a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:ga2a118ece5db1e2022112b954846012af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a118ece5db1e2022112b954846012af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions that generate common 2d transformation matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad5c84a4932a758f385a87098ce1b1660\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 3 * 3 matrix created from an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadb47d2ad2bd984b213e8ff7d9cd8154e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a scale 3 * 3 matrix created from a vector of 2 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a scale vector. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a118ece5db1e2022112b954846012af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::shearX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">y</td><td>Shear factor. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga717f1833369c1ac4a40e4ac015af885e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::shearY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">x</td><td>Shear factor. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4573ae47c80938aa9053ef6a33755ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a translation 3 * 3 matrix created from a vector of 2 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a translation vector. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00342.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_mixed_producte</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_mixed_producte<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab3c6048fbb67f7243b088a4fee48d020\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) <br /></td></tr>\n<tr class=\"separator:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Mixed product of 3 vectors. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00343.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_norm</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_norm<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).  <a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm between x and y.  <a href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm of v.  <a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga41340b2ef40a9307ab0f137181565168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm between x and y.  <a href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm of v.  <a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8d1789651050adb7024917984b41c3de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d1789651050adb7024917984b41c3de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm between x and y.  <a href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">More...</a><br /></td></tr>\n<tr class=\"separator:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6968a324837a8e899396d44de23d5aae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm of v.  <a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm between x and y.  <a href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm of v.  <a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension. </p>\n<p>Various ways to compute vector norms. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga85660f1b79f66c09c7b5a6f80e68c89f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::distance2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2fc0b2aa967bebfd6a244700bff6997\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l1Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L1 norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a7491e2037ceeb37f83ce41addfc0be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l1Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L1 norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41340b2ef40a9307ab0f137181565168\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l2Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L2 norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae288bde8f0e41fb4ed62e65137b18cba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l2Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L2 norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d1789651050adb7024917984b41c3de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared length of x. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad58a8231fc32e38104a9e1c4d3c0cb64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lMaxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the LMax norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6968a324837a8e899396d44de23d5aae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lMaxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the LMax norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacad23d30497eb16f67709f2375d1f66a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>Depth</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61b6d81d796d6eb4d4183396a19ab91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>Depth</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00344.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_normal</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_normal<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a> (vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</td></tr>\n<tr class=\"memdesc:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes triangle normal from triangle points.  <a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension. </p>\n<p>Compute the normal of a triangle. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaff1cb5496925dfa7962df457772a7f35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::triangleNormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Computes triangle normal from triangle points. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00344.html\" title=\"Include <glm/gtx/normal.hpp> to use the features of this extension. \">GLM_GTX_normal</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00345.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_normalize_dot</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_normalize_dot<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension. </p>\n<p>Dot product of vectors that need to be normalize with a single square root. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2746fb9b5bd22b06b2f7c8babba5de9e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastNormalizeDot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Normalize parameters and returns the dot product of x and y. </p>\n<p>Faster that dot(fastNormalize(x), fastNormalize(y)).</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00345.html\" title=\"Include <glm/gtx/normalized_dot.hpp> to use the features of this extension. \">GLM_GTX_normalize_dot</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb140a2b903115d318c8b0a2fb5a5daa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::normalizeDot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Normalize parameters and returns the dot product of x and y. </p>\n<p>It's faster that dot(normalize(x), normalize(y)).</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00345.html\" title=\"Include <glm/gtx/normalized_dot.hpp> to use the features of this extension. \">GLM_GTX_normalize_dot</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00346.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_number_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_number_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga145ad477a2a3e152855511c3b52469a6\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a></td></tr>\n<tr class=\"memdesc:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac88c6a4dbfc380aa26e3adbbade36348\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a></td></tr>\n<tr class=\"memdesc:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07f8d7348eb7ae059a84c118fdfeb943\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59bfa589419b5265d01314fcecd33435\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a></td></tr>\n<tr class=\"memdesc:ga59bfa589419b5265d01314fcecd33435\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga448eeb08d0b7d8c43a8b292c981955fd\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a></td></tr>\n<tr class=\"memdesc:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5987a61b8c03d5c432a9e62f0b3efe1\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52cc069a92e126c3a8dcde93424d2ef0\"></a>\ntypedef u16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"></a>\ntypedef u32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a></td></tr>\n<tr class=\"memdesc:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga818de170e2584ab037130f2881925974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga818de170e2584ab037130f2881925974\"></a>\ntypedef u64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a></td></tr>\n<tr class=\"memdesc:ga818de170e2584ab037130f2881925974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga818de170e2584ab037130f2881925974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5853fe457f4c8a6bc09343d0e9833980\"></a>\ntypedef u8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defined size types. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00347.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_optimum_pow</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_optimum_pow<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 2.  <a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 3.  <a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gacef0968763026e180e53e735007dbf5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 4.  <a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacef0968763026e180e53e735007dbf5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension. </p>\n<p>Integer exponentiation of power functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga19aaff3213bf23bdec3ef124ace237e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga35689d03cd434d6ea819f1942d3bf82e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacef0968763026e180e53e735007dbf5a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00348.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_orthonormalize</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_orthonormalize<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">orthonormalize</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the orthonormalized matrix of m.  <a href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Orthonormalizes x according y.  <a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension. </p>\n<p>Orthonormalize matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4cab5d698e6e2eccea30c8e81c74371f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::orthonormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the orthonormalized matrix of m. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00348.html\" title=\"Include <glm/gtx/orthonormalize.hpp> to use the features of this extension. \">GLM_GTX_orthonormalize</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3bc7ef498815026bc3d361ae0b7138e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::orthonormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Orthonormalizes x according y. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00348.html\" title=\"Include <glm/gtx/orthonormalize.hpp> to use the features of this extension. \">GLM_GTX_orthonormalize</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00349.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_perpendicular</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_perpendicular<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x a perpendicular axis of Normal.  <a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension. </p>\n<p>Perpendicular of a vector from other one </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga264cfc4e180cf9b852e943b35089003c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::perp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Projects x a perpendicular axis of Normal. </p>\n<p>From GLM_GTX_perpendicular extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00350.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_polar_coordinates</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_polar_coordinates<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a> (vec&lt; 2, T, Q &gt; const &amp;polar)</td></tr>\n<tr class=\"memdesc:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Polar to Euclidean coordinates.  <a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a> (vec&lt; 3, T, Q &gt; const &amp;euclidean)</td></tr>\n<tr class=\"memdesc:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.  <a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension. </p>\n<p>Conversion from Euclidean space to polar space and revert. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1821d5b3324201e60a9e2823d0b5d0c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::euclidean </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>polar</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert Polar to Euclidean coordinates. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00350.html\" title=\"Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension. \">GLM_GTX_polar_coordinates</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab83ac2c0e55b684b06b6c46c28b1590d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::polar </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>euclidean</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00350.html\" title=\"Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension. \">GLM_GTX_polar_coordinates</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00351.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_projection</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_projection<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x on Normal.  <a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension. </p>\n<p>Projection of a vector to other one </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga58384b7170801dd513de46f87c7fb00e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::proj </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Projects x on Normal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">x</td><td>A vector to project </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">Normal</td><td>A normal that doesn't need to be of unit length.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00351.html\" title=\"Include <glm/gtx/projection.hpp> to use the features of this extension. \">GLM_GTX_projection</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00352.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">cross</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2f32f970411c44cdd38bb98960198385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a quaternion and a vector.  <a href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a vector and a quaternion.  <a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the real component of a quaternion.  <a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion normalized linear interpolation.  <a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a> (qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</td></tr>\n<tr class=\"memdesc:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an intermediate control point for squad interpolation.  <a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create an identity quaternion.  <a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga07da6ef58646442efe93b0c273d73776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns quarternion square root.  <a href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a 4 components vector by a quaternion.  <a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</td></tr>\n<tr class=\"memdesc:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the rotation between two vectors.  <a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion interpolation using the rotation short path.  <a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</td></tr>\n<tr class=\"memdesc:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a point on a path according squad equation.  <a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">toQuat</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 3 matrix to a quaternion.  <a href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 4 * 4 matrix to a quaternion.  <a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extented quaternion types and functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2f32f970411c44cdd38bb98960198385\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product between a quaternion and a vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f5f77255756e5668dfee7f0d07ed021\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product between a vector and a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga321953c1b2e7befe6f5dcfddbfc6b76b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::extractRealComponent </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extract the real component of a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga264e10708d58dd0ff53b7902a2bd2561\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::fastMix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion normalized linear interpolation. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc5cd5f3e78de61d141c2355417424de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::intermediate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>prev</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>curr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>next</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an intermediate control point for squad interpolation. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58a609b1b8ab965f5df2702e8ca4e75b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared length of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ee8332600b2aca3a77622a28d857b55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_identity </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Create an identity quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07da6ef58646442efe93b0c273d73776\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns quarternion square root. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> Rotates a 3 components vector by a quaternion.</dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafcb78dfff45fbf19a7fcb2bd03fbf196\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a 4 components vector by a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e61282831cc3f52cc76f72f52ad2c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotation </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dest</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the rotation between two vectors. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">orig</td><td>vector, needs to be normalized </td></tr>\n    <tr><td class=\"paramname\">dest</td><td>vector, needs to be normalized</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc576cc957adc2a568cdcbc3799175bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::shortMix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion interpolation using the rotation short path. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b9bf3459e132ad8a18fe970669e3e35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::squad </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>h</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a point on a path according squad equation. </p>\n<p>q1 and q2 are control points; s1 and s2 are intermediate control points.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab0afabb894b28a983fb8ec610409d56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::toMat3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00113\">113</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfa2c77094e8cc9adad321d938855ffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::toMat4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 4 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00120\">120</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga798de5d186499c9a9231cd92c8afaef1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::toQuat </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 3 * 3 matrix to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5eb36f51e1638e710451eba194dbc011\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::toQuat </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 4 * 4 matrix to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00134\">134</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast()</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00353.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_range</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_range<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines begin and end for vectors and matrices. Useful for range-based for loop. The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00354.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_raw_data</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_raw_data<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a></td></tr>\n<tr class=\"memdesc:ga3005cb0d839d546c616becfa6602c607\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for byte numbers.  <a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a></td></tr>\n<tr class=\"memdesc:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for dword numbers.  <a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a></td></tr>\n<tr class=\"memdesc:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for qword numbers.  <a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a></td></tr>\n<tr class=\"memdesc:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for word numbers.  <a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension. </p>\n<p>Projection of a vector to other one </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga3005cb0d839d546c616becfa6602c607\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 byte</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for byte numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86e46fff9f80ae33893d8d697f2ca98a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 dword</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for dword numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00042\">42</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4021754ffb8e5ef14c75802b15657714\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 qword</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for qword numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16e9fea0ef1e6c4ef472d3d1731c49a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 word</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for word numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00355.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_rotate_normalized_axis</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_rotate_normalized_axis<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">rotateNormalizedAxis</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.  <a href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components normalized axis and an angle.  <a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension. </p>\n<p>Quaternions and matrices rotations around normalized axis. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga50efd7ebca0f7a603bb3cc11e34c708d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotateNormalizedAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Rotation axis, must be normalized. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Value type used to build the matrix. Currently supported: half (not recommended), float or double.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00355.html\" title=\"Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension. \">GLM_GTX_rotate_normalized_axis</a> </dd>\n<dd>\n- rotate(T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(mat&lt;4, 4, T, Q&gt; const&amp; m, T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(T angle, vec&lt;3, T, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08f9c5411437d528019a25bfc01473d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotateNormalizedAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a quaternion from a vector of 3 components normalized axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">q</td><td>Source orientation </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Normalized axis of the rotation, must be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00355.html\" title=\"Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension. \">GLM_GTX_rotate_normalized_axis</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00356.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_rotate_vector</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_rotate_vector<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a> (vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</td></tr>\n<tr class=\"memdesc:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a rotation matrix from a normal and a up vector.  <a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">rotate</a> (vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a two dimensional vector.  <a href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">More...</a><br /></td></tr>\n<tr class=\"separator:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">rotate</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around an axis.  <a href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around an axis.  <a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">rotateX</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the X axis.  <a href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the X axis.  <a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">rotateY</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Y axis.  <a href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Y axis.  <a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">rotateZ</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Z axis.  <a href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga923b75c6448161053768822d880702e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Z axis.  <a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga923b75c6448161053768822d880702e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns Spherical interpolation between two vectors.  <a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension. </p>\n<p>Function to directly rotate a vector </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1a32fceb71962e6160e8af295c91930a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::orientation </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a rotation matrix from a normal and a up vector. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab64a67b52ff4f86c3ba16595a5a25af6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a two dimensional vector. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ba501ef83d1a009a17ac774cc560f21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around an axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1005f1267ed9c57faa3f24cf6873b961\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around an axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga059fdbdba4cca35cdff172a9d0d0afc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateX </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the X axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4333b1ea8ebf1bd52bc3801a7617398a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateX </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the X axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebdc8b054ace27d9f62e054531c6f44d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateY </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the Y axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ce3db0867b7f8efd878ee34f95a623b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateY </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the Y axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a048838a03f6249acbacb4dbacf79c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the Z axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga923b75c6448161053768822d880702e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the Z axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b11b18ce824174ea1a5a69ea14e2cee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::slerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns Spherical interpolation between two vectors. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A first vector </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A second vector </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00356.html\" title=\"Include <glm/gtx/rotate_vector.hpp> to use the features of this extension. \">GLM_GTX_rotate_vector</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00357.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_scalar_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_scalar_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extend a position from a source to a position at a defined length. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00358.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_spline</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_spline<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a catmull rom curve.  <a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a cubic curve.  <a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a> (genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a hermite curve.  <a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension. </p>\n<p>Spline functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8119c04f8210fd0d292757565cd6918d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::catmullRom </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a catmull rom curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6b867eb52e2fc933d2e0bf26aabc9a70\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubic </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a cubic curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa69e143f6374d32f934a8edeaa50bac9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::hermite </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a hermite curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00359.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_std_based_type</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_std_based_type<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a></td></tr>\n<tr class=\"memdesc:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a></td></tr>\n<tr class=\"memdesc:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a></td></tr>\n<tr class=\"memdesc:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a></td></tr>\n<tr class=\"memdesc:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a></td></tr>\n<tr class=\"memdesc:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a></td></tr>\n<tr class=\"memdesc:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a></td></tr>\n<tr class=\"memdesc:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a></td></tr>\n<tr class=\"memdesc:gaa423efcea63675a2df26990dbcb58656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension. </p>\n<p>Adds vector types based on STL value types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaeb877ac8f9a3703961736c1c5072cf68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;1, std::size_t, defaultp&gt; size1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of one std::size_t component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00035\">35</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaf6accc57f5aa50447ba7310ce3f0d6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;1, std::size_t, defaultp&gt; size1_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of one std::size_t component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00051\">51</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bfe8c4975ff282bce41be2bacd524fe\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;2, std::size_t, defaultp&gt; size2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of two std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00039\">39</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5976c25657d4e2b5f73f39364c3845d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;2, std::size_t, defaultp&gt; size2_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of two std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1c72956d0359b0db332c6c8774d3b04\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;3, std::size_t, defaultp&gt; size3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of three std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00043\">43</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2654983c60d641fd3808e65a8dfad8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;3, std::size_t, defaultp&gt; size3_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of three std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00059\">59</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a19dde617beaf8ce3cfc2ac5064e9aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;4, std::size_t, defaultp&gt; size4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of four std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00047\">47</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa423efcea63675a2df26990dbcb58656\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;4, std::size_t, defaultp&gt; size4_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of four std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00063\">63</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00360.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_string_cast</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_string_cast<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL std::string&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a string from a GLM vector or matrix typed variable.  <a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension. </p>\n<p>Setup strings for GLM type values</p>\n<p>This extension is not supported with CUDA </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8f0dced1fd45e67e2d77e80ab93c7af5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL std::string glm::to_string </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Create a string from a GLM vector or matrix typed variable. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00360.html\" title=\"Include <glm/gtx/string_cast.hpp> to use the features of this extension. \">GLM_GTX_string_cast</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00361.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_texture</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_texture<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a> (vec&lt; L, T, Q &gt; const &amp;Extent)</td></tr>\n<tr class=\"memdesc:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the number of mipmaps levels necessary to create a mipmap complete texture.  <a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension. </p>\n<p>Wrapping mode of texture coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa8c377f4e63486db4fa872d77880da73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">T glm::levels </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Extent</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the number of mipmaps levels necessary to create a mipmap complete texture. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Extent</td><td>Extent of the texture base level mipmap </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00362.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a> (T angle, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.  <a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.  <a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add transformation matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf599be4c0e9d99be1f9cddba79b6018b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbeefee8fec884d566e4ada0049174d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga309a30e652e58c396e2c3d4db3ee7658\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00363.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_transform2</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_transform2<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">scaleBias</a> (T scale, T bias)</td></tr>\n<tr class=\"memdesc:gabf249498b236e62c983d90d30d63c99c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</td></tr>\n<tr class=\"memdesc:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:gabf714b8a358181572b32a45555f71948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis.  <a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf714b8a358181572b32a45555f71948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</td></tr>\n<tr class=\"memdesc:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.  <a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:gac7998d0763d9181550c77e8af09a182c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</td></tr>\n<tr class=\"memdesc:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</td></tr>\n<tr class=\"memdesc:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Z axis.  <a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add extra transformation matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga5b992a0cdc8298054edb68e228f0d93e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::proj2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build planar projection matrix along normal axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2b7f4f15b98f697caede11bef50509e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::proj3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build planar projection matrix along normal axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf249498b236e62c983d90d30d63c99c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scaleBias </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bias</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a scale bias matrix. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2bdd91a76759fecfbaef97e3020aa8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scaleBias </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bias</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a scale bias matrix. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf714b8a358181572b32a45555f71948\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::shearX2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on X axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73e867c6cd4d700fe2054437e56106c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearX3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7998d0763d9181550c77e8af09a182c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::shearY2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Y axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade5bb65ffcb513973db1a1314fb5cfac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearY3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Y axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6591e0a3a9d2c9c0b6577bb4dace0255\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearZ3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Z axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00364.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_type_aligned</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_type_aligned<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>\n<tr class=\"memdesc:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>\n<tr class=\"memdesc:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>\n<tr class=\"memdesc:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>\n<tr class=\"memdesc:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>\n<tr class=\"memdesc:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8cff825951aeb54dd846037113c72db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>\n<tr class=\"memdesc:gac8cff825951aeb54dd846037113c72db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8cff825951aeb54dd846037113c72db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>\n<tr class=\"memdesc:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>\n<tr class=\"memdesc:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>\n<tr class=\"memdesc:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1284488189daf897cf095c5eefad9744\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1284488189daf897cf095c5eefad9744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1284488189daf897cf095c5eefad9744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>\n<tr class=\"memdesc:gafafeea923e1983262c972e2b83922d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>\n<tr class=\"memdesc:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>\n<tr class=\"memdesc:ga63b882e29170d428463d99c3d630acc6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>\n<tr class=\"memdesc:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>\n<tr class=\"memdesc:ga70cd2144351c556469ee6119e59971fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">More...</a><br /></td></tr>\n<tr class=\"separator:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>\n<tr class=\"memdesc:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>\n<tr class=\"memdesc:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>\n<tr class=\"memdesc:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>\n<tr class=\"memdesc:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga285649744560be21000cfd81bbb5d507\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>\n<tr class=\"memdesc:ga285649744560be21000cfd81bbb5d507\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">More...</a><br /></td></tr>\n<tr class=\"separator:ga285649744560be21000cfd81bbb5d507\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>\n<tr class=\"memdesc:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>\n<tr class=\"memdesc:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>\n<tr class=\"memdesc:gafd2803d39049dd45a37a63931e25d943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae553b33349d6da832cf0724f1e024094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gae553b33349d6da832cf0724f1e024094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">More...</a><br /></td></tr>\n<tr class=\"separator:gae553b33349d6da832cf0724f1e024094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>\n<tr class=\"memdesc:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>\n<tr class=\"memdesc:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>\n<tr class=\"memdesc:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>\n<tr class=\"memdesc:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>\n<tr class=\"memdesc:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>\n<tr class=\"memdesc:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>\n<tr class=\"memdesc:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2958f907719d94d8109b562540c910e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga2958f907719d94d8109b562540c910e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2958f907719d94d8109b562540c910e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>\n<tr class=\"memdesc:gaa4161e7a496dc96972254143fe873e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>\n<tr class=\"memdesc:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>\n<tr class=\"memdesc:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>\n<tr class=\"memdesc:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga904e9c2436bb099397c0823506a0771f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>\n<tr class=\"memdesc:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>\n<tr class=\"memdesc:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>\n<tr class=\"memdesc:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">More...</a><br /></td></tr>\n<tr class=\"separator:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>\n<tr class=\"memdesc:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">More...</a><br /></td></tr>\n<tr class=\"separator:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1246094581af624aca6c7499aaabf801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga1246094581af624aca6c7499aaabf801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1246094581af624aca6c7499aaabf801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc246401847dcba155f0699425e49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gadc246401847dcba155f0699425e49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc246401847dcba155f0699425e49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>\n<tr class=\"memdesc:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>\n<tr class=\"memdesc:ga404bba7785130e0b1384d695a9450b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>\n<tr class=\"memdesc:ga31ba41fd896257536958ec6080203d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>\n<tr class=\"memdesc:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">More...</a><br /></td></tr>\n<tr class=\"separator:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>\n<tr class=\"memdesc:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>\n<tr class=\"memdesc:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>\n<tr class=\"memdesc:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>\n<tr class=\"memdesc:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga447848a817a626cae08cedc9778b331c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga447848a817a626cae08cedc9778b331c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga447848a817a626cae08cedc9778b331c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71e646f7e301aa422328194162c9c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga71e646f7e301aa422328194162c9c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71e646f7e301aa422328194162c9c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>\n<tr class=\"memdesc:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>\n<tr class=\"memdesc:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>\n<tr class=\"memdesc:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>\n<tr class=\"memdesc:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>\n<tr class=\"memdesc:gabde1d0b4072df35453db76075ab896a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>\n<tr class=\"memdesc:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>\n<tr class=\"memdesc:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>\n<tr class=\"memdesc:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>\n<tr class=\"memdesc:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>\n<tr class=\"memdesc:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>\n<tr class=\"memdesc:ga509af83527f5cd512e9a7873590663aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>\n<tr class=\"memdesc:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>\n<tr class=\"memdesc:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>\n<tr class=\"memdesc:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga5611d6718e3a00096918a64192e73a45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8588bb221448f5541a858903822a57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga8b8588bb221448f5541a858903822a57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b8588bb221448f5541a858903822a57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>\n<tr class=\"memdesc:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">More...</a><br /></td></tr>\n<tr class=\"separator:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>\n<tr class=\"memdesc:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>\n<tr class=\"memdesc:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>\n<tr class=\"memdesc:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>\n<tr class=\"memdesc:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab253845f534a67136f9619843cade903\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab253845f534a67136f9619843cade903\">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>\n<tr class=\"memdesc:gab253845f534a67136f9619843cade903\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gab253845f534a67136f9619843cade903\">More...</a><br /></td></tr>\n<tr class=\"separator:gab253845f534a67136f9619843cade903\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga929427a7627940cdf3304f9c050b677d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>\n<tr class=\"memdesc:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>\n<tr class=\"memdesc:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>\n<tr class=\"memdesc:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">More...</a><br /></td></tr>\n<tr class=\"separator:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>\n<tr class=\"memdesc:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga75930684ff2233171c573e603f216162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga75930684ff2233171c573e603f216162\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>\n<tr class=\"memdesc:ga75930684ff2233171c573e603f216162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga75930684ff2233171c573e603f216162\">More...</a><br /></td></tr>\n<tr class=\"separator:ga75930684ff2233171c573e603f216162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>\n<tr class=\"memdesc:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>\n<tr class=\"memdesc:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>\n<tr class=\"memdesc:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>\n<tr class=\"memdesc:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>\n<tr class=\"memdesc:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>\n<tr class=\"memdesc:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>\n<tr class=\"memdesc:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>\n<tr class=\"memdesc:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>\n<tr class=\"memdesc:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>\n<tr class=\"memdesc:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>\n<tr class=\"memdesc:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">More...</a><br /></td></tr>\n<tr class=\"separator:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>\n<tr class=\"memdesc:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>\n<tr class=\"memdesc:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>\n<tr class=\"memdesc:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>\n<tr class=\"memdesc:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>\n<tr class=\"memdesc:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>\n<tr class=\"memdesc:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>\n<tr class=\"memdesc:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>\n<tr class=\"memdesc:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>\n<tr class=\"memdesc:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>\n<tr class=\"memdesc:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>\n<tr class=\"memdesc:gae5d672d359f2a39f63f98c7975057486\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>\n<tr class=\"memdesc:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>\n<tr class=\"memdesc:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga27b13f465abc8a40705698145e222c3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>\n<tr class=\"memdesc:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>\n<tr class=\"memdesc:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>\n<tr class=\"memdesc:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>\n<tr class=\"memdesc:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1558a48b3934011b52612809f443e46d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga1558a48b3934011b52612809f443e46d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1558a48b3934011b52612809f443e46d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa52e5732daa62851627021ad551c7680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>\n<tr class=\"memdesc:gaa52e5732daa62851627021ad551c7680\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa52e5732daa62851627021ad551c7680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>\n<tr class=\"memdesc:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga3f510999e59e1b309113e1d561162b29\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>\n<tr class=\"memdesc:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>\n<tr class=\"memdesc:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>\n<tr class=\"memdesc:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>\n<tr class=\"memdesc:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>\n<tr class=\"memdesc:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>\n<tr class=\"memdesc:gab059d7b9fe2094acc563b7223987499f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>\n<tr class=\"memdesc:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>\n<tr class=\"memdesc:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>\n<tr class=\"memdesc:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>\n<tr class=\"memdesc:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>\n<tr class=\"memdesc:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>\n<tr class=\"memdesc:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga912a16432608b822f1e13607529934c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>\n<tr class=\"memdesc:ga912a16432608b822f1e13607529934c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga912a16432608b822f1e13607529934c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>\n<tr class=\"memdesc:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_fquat, 16)</td></tr>\n<tr class=\"memdesc:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>\n<tr class=\"memdesc:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>\n<tr class=\"memdesc:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>\n<tr class=\"memdesc:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines aligned types. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gab5cd5c5fad228b25c782084f1cc30114\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bb5dd895ef625c1b113f2cf400186b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac6efa54cf7c6c86f7158922abdb1a430\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6612eb77c8607048e7552279a11eeb5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ddc1848ff2223026db8968ce0c97497\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22240dd9458b0f8c11fbcc4f48714f68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8130ea381d76a2cc34a93ccbb6cf487d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ccb60f3215d293fd62b33b31ed0e7be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac20d508d2ef5cc95ad3daf083c57ec2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50257b48069a31d0c8d9c1f644d267de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07e98e67b7a3435c0746018c7a2a839\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62601fc6f8ca298b77285bedf03faffd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac8cff825951aeb54dd846037113c72db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78f443d88f438575a62b5df497cdf66b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0680cd3b5d4e8006985fb41a4f9b57af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9e5babb1dd3e3531b42c37bf25dd951\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2196442c0e5c5e8c77842de388c42521\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1284488189daf897cf095c5eefad9744\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73fdc86a539808af58808b7c60a1c4d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafafeea923e1983262c972e2b83922d3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63b882e29170d428463d99c3d630acc6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b20507bb048c1edea2d441cc953e6f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56c5ca60813027b603c7b61425a0479d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a751b3aff24c0259f4a7357c2969089\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70cd2144351c556469ee6119e59971fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46bbf08dc004d8c433041e0b5018a5d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3e10c77a20d1abad2de1c561c7a5c18\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga968f30319ebeaca9ebcd3a25a8e139fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaae773c28e6390c6aa76f5b678b7098a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga790cfff1ca39d0ed696ffed980809311\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8265b91eb23c120a9b0c3e381bc37b96\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6d384de17588d8edb894fbe06e0d410\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9c8172b745ee03fc5b2b91c350c2922f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga77e0dff12aa4020ddc3f8cabbea7b2e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd82b9faa9d4d618dbbe0fc8a1efee63\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga285649744560be21000cfd81bbb5d507\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07732da630b2deda428ce95c0ecaf3ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a8da2a8c51f69c07a2e7f473aa420f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga848aedf13e2d9738acf0bb482c590174\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd2803d39049dd45a37a63931e25d943\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae553b33349d6da832cf0724f1e024094\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16d223a2b3409e812e1d3bd87f0e9e5c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2de065d2ddfdb366bcd0febca79ae2ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd786bdc20a11c8cb05c92c8212e28d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4aefe56691cdb640c72f0d46d3fb532\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8fe9745f7de24a8394518152ff9fccdc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaad735483450099f7f882d4e3a3569bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7b6f823802edbd6edbaf70ea25bf068\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e235bcd2b8029613f25b8d40a2d3ef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50d8a9523968c77f8325b4c9bfbff41e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ec20fdfb729c702032da9378c79679f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga25b3fe1d9e8d0a5e86c1949c1acd8131\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2958f907719d94d8109b562540c910e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fe6fc032a978f1c845fac9aa0668714\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4161e7a496dc96972254143fe873e55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaee91dd2ab34423bcc11072ef6bd0f02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49f047ccaa8b31fad9f26c67bf9b3510\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga904e9c2436bb099397c0823506a0771f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf90651cf2f5e7ee2b11cfdc5a6749534\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7354a4ead8cb17868aec36b9c30d6010\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad2ecbdea18732163e2636e27b37981ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga965b1c9aa1800e93d4abc2eb2b5afcbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f9e9c2ea2768675dff9bae5cde2d829\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad77c317b7d942322cd5be4c8127b3187\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga716f8ea809bdb11b5b542d8b71aeb04f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad46f8e9082d5878b1bc04f9c1471cdaa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1246094581af624aca6c7499aaabf801\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a5009a1d0196bbf21dd7518f61f0249\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45213fd18b3bb1df391671afefe4d1e7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc246401847dcba155f0699425e49dcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaace64bddf51a9def01498da9a94fb01c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7bb97c29d664bd86ffb1bed4abc5534\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga404bba7785130e0b1384d695a9450b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31ba41fd896257536958ec6080203d2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacca5f13627f57b3505676e40a6e43e5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5faf1d3e70bf33174dd7f3d01d5b883b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga727e2bf2c433bb3b0182605860a48363\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga12566ca66d5962dadb4a5eb4c74e891e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b66a97a8acaa35c5a377b947318c6bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9cde002439b74fa66120a16a9f55fcc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ca98c67f7d1e975f7c5202f1da1df1f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1dc8bc6199d785f235576948d80a597c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad14a0f2ec93519682b73d70b8e401d81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada8b996eb6526dc1ead813bd49539d1b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28948f6bfb52b42deb9d73ae1ea8d8b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ee829f7b754b262bbfe6317c0d678ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga447848a817a626cae08cedc9778b331c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6027ae13b2734f542a6e7beee11b8820\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2aca46c8608c95ef991ee4c332acde5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaff50b10dd1c48be324fdaffd18e2c7ea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9fc4421dbb833d5461e6d4e59dcfde55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga329f1e2b94b33ba5e3918197030bcf03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga71e646f7e301aa422328194162c9c998\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8942e09f479489441a7a5004c6d8cb66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab32497d6e4db16ee439dbedd64c5865\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaadbb34952eca8e3d7fe122c3e167742\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92024d27c74a3650afb55ec8e024ed25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabde1d0b4072df35453db76075ab896a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga06c296c9e398b294c8c9dd2a7693dcbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf1744488c96ebd33c9f36ad33b2010a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3328061a64c20ba59d5f9da24c2cd059\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6ced36f13bae57f377bafa6f5fcc299\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbc7fb7847bfc78a339d1d371c915c73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa86bc56a73fd8120b1121b5f5e6245ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga68c0b9e669060d0eb5ab8c3ddeb483d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f3bab577daf3343e99cc005134bce86\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13a2391339d0790d43b76d00a7611c4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga197570e03acbc3d18ab698e342971e8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f033b21e145a1faa32c62ede5878993\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga509af83527f5cd512e9a7873590663aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94e86186978c502c6dc0c0d9c4a30679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5cec574686a7f3c8ed24bb195c5e2d0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga47edfdcee9c89b1ebdaf20450323b1d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5611d6718e3a00096918a64192e73a45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19837e6f72b60d994a805ef564c6c326\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9740cf8e34f068049b42a2753f9601c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b8588bb221448f5541a858903822a57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga991abe990c16de26b2129d6bc2f4c051\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac01bb9fc32a1cd76c2b80d030f71df4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09540dbca093793a36a8997e0d4bee77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaecafb5996f5a44f57e34d29c8670741e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac6b161a04d2f8408fe1c9d857e8daac0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fa0dfc8feb0fa17dab2acd43e05342b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0019500abbfa9c66eff61ca75eaaed94\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14fd29d01dae7b08a04e9facbcc18824\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab253845f534a67136f9619843cade903\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga929427a7627940cdf3304f9c050b677d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae373b6c04fdf9879f33d63e6949c037e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga53a8a03dca2015baec4584f45b8e9cdc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3301bae94ef5bf59fbdd9a24e7d2a01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada9b0bea273d3ae0286f891533b9568f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbce23b9f23d77bb3884e289a574ebd5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga75930684ff2233171c573e603f216162\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e3a2d83b131336219a0f4c7cbba2a48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4deaa0dea930c393d55e7a4352b0a20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81bc497b2bfc6f80bab690c6ee28f0f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3e8f783e9d4b90006695a16c39d4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8d081fac3a38d6f55fa552f32168d32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga12fe7b9769c964c5b48dcfd8b7f40198\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefab04611c7f8fe1fd9be3071efea6cc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2543c05ba19b3bd19d45b1227390c5b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga009afd727fd657ef33a18754d6d28f60\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f26177e74bfb301a3d0e02ec3c3ef53\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga309f495a1d6b75ddf195b674b65cb1e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e185865a2217d0cd47187644683a8c3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade4458b27b039b9ca34f8ec049f3115a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e0f35fa0c626285a8bad41707e7316c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78bfec2f185d1d365ea0a9ef1e3d45b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01fe6fee6db5df580b6724a7e681f069\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga687d5b8f551d5af32425c0b2fba15e99\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e842371d46842ff8f1813419ba49d0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga32814aa0f19316b43134fc25f2aad2b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3d3bbc1e93909b689123b085e177a14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga804c654cead1139bd250f90f9bb01fad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacce4ac532880b8c7469d3c31974420a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0498e0e249a6faddaf96aa55d7f81c3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7435d87de82a0d652b35dc5b9cc718d5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga719da577361541a4c43a2dd1d0e361e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e7ee4f541e1d7db66cd1a224caacafb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5d672d359f2a39f63f98c7975057486\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fa2df037dbfc5fe8c8e0b4db8a34953\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0743b4f4f69a3227b82ff58f6abbad62\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a76b325fdf70f961d835edd182c63dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b4e181cd041ba28c3163e7b8074aef0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27b13f465abc8a40705698145e222c3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2608d19cc275830a6f8c0b6405625a4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93f09768241358a287c4cca538f1f7e7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c117e3ecca089e10247b1d41d88aff9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07c75cd04ba42dc37fa3e105f89455c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65ff0d690a34a4d7f46f9b2eb51525ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadd8ddbe2bf65ccede865ba2f510176dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf18dbff14bf13d3ff540c517659ec045\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66339f6139bf7ff19e245beb33f61cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1558a48b3934011b52612809f443e46d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa52e5732daa62851627021ad551c7680\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac09663c42566bcb58d23c6781ac4e85a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f510999e59e1b309113e1d561162b29\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c9c94f0c89cd71ce56551db6cf4aaec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99ce8274c750fbfdf0e70c95946a2875\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9476ef66790239df53dbe66f3989c3b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc429b3b0b49921e12713b6d31e14e1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga88f6c6fa06e6e64479763e69444669cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Double-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaae8e4639c991e64754145ab8e4c32083\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e9094f3feb3b5b49d0f83683a101fde\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbd2c639c03de1c3e9591b5a39f65559\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Double-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab059d7b9fe2094acc563b7223987499f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabbc811d1c52ed2b8cfcaff1378f75c69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ddf5212777734d2fd841a84439f3bdf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1dda32ed09f94bfcf0a7d8edfb6cf13\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5875e0fa72f07e271e7931811cbbf31a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41e82cd6ac07f912ba2a2d45799dcf0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0892638d6ba773043b3d63d1d092622e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga912a16432608b822f1e13607529934c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd945a8ea86b042aba410e0560df9a3d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19c2ba545d1f2f36bcb7b60c9a228622\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fquat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabc28c84a3288b697605d4688686f9a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_dquat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ed8aeb5ca67fade269a46105f1bf273\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga95cc03b8b475993fa50e05e38e203303\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00365.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_type_trait</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_type_trait<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines traits for each type. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00366.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vec_swizzle</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vec_swizzle<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions to perform swizzle operation. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00367.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vector_angle</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vector_angle<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the absolute angle between two vectors.  <a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">orientedAngle</a> (vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 2d vectors.  <a href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</td></tr>\n<tr class=\"memdesc:ga706fce3d111f485839756a64f5a48553\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 3d vectors based from a reference axis.  <a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">More...</a><br /></td></tr>\n<tr class=\"separator:ga706fce3d111f485839756a64f5a48553\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension. </p>\n<p>Compute angle between vectors </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2e2917b4cb75ca3d043ac15ff88f14e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::angle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the absolute angle between two vectors. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9556a803dce87fe0f42fdabe4ebba1d5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::orientedAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the oriented angle between two 2d vectors. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga706fce3d111f485839756a64f5a48553\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::orientedAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ref</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the oriented angle between two 3d vectors based from a reference axis. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00368.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vector_query</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vector_query<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are collinears.  <a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthogonals.  <a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthonormal.  <a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a each component of a vector is null.  <a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is normalized.  <a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is null.  <a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension. </p>\n<p>Query informations of vector types </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga13da4a787a2ff70e95d561fb19ff91b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areCollinear </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are collinears. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7b95b3f798e3c293262b2bdaad47c57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areOrthogonal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are orthogonals. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b091c3d7f9ee3b0708311c001c293e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areOrthonormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are orthonormal. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6ec1688eab7442fe96fe4941d5d4e76\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isCompNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a each component of a vector is null. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3c974f459fd75453134fad7ae89a39e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a vector is normalized. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4a3637dbcb4bb42dc55caea7a1e0495\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a vector is null. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00369.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_wrap</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_wrap<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_CLAMP OpenGL wrap mode.  <a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension. </p>\n<p>Wrapping mode of texture coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga6c0cc6bd1d67ea1008d2592e998bad33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_CLAMP OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6856a0a048d2749252848da35e10c8b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::mirrorClamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16a89b0661b60d5bea85137bbae74d73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::mirrorRepeat </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga809650c6310ea7c42666e918c117fb6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::repeat </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00370.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Integer functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Integer functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL functions on integer types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">bitCount</a> (genType v)</td></tr>\n<tr class=\"memdesc:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a> (vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.  <a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a> (vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga2e82992340d421fadb61a473df699b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the insertion the bits least-significant bits of insert into base.  <a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e82992340d421fadb61a473df699b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reversal of the bits of value.  <a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">findLSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">findMSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a> (vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:gac0c510a70e852f57594a9141848642e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0c510a70e852f57594a9141848642e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</td></tr>\n<tr class=\"memdesc:gaedcec48743632dff6786bcc492074b1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).  <a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</td></tr>\n<tr class=\"memdesc:gae3316ba1229ad9b9f09480833321b053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.  <a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL functions on integer types. </p>\n<p>These all operate component-wise. The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00043.html\" title=\"Core features \">glm/integer.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga44abfe3379e11cbd29425a843420d0d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::bitCount </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of bits set to 1 in the binary representation of value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaac7b15e40bdea8d9aa4c4cb34049f7b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::bitCount </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of bits set to 1 in the binary representation of value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga346b25ab11e793e91a4a69c8aa6819f2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldExtract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Offset</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Bits</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result. </p>\n<p>For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.</p>\n<p>If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml\">GLSL bitfieldExtract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e82992340d421fadb61a473df699b20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldInsert </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Base</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Insert</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Offset</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Bits</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the insertion the bits least-significant bits of insert into base. </p>\n<p>The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml\">GLSL bitfieldInsert man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga750a1d92464489b7711dee67aa3441b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldReverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the reversal of the bits of value. </p>\n<p>The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml\">GLSL bitfieldReverse man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf74c4d969fa34ab8acb9d390f5ca5274\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findLSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>\n<p>If value is zero, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4454c0331d6369888c28ab677f4810c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findLSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>\n<p>If value is zero, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e4a794d766861c70bc961630f8ef621\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findMSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the most significant bit in the binary representation of value. </p>\n<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39ac4d52028bb6ab08db5ad6562c2872\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findMSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the most significant bit in the binary representation of value. </p>\n<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0c510a70e852f57594a9141848642e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::imulExtended </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>msb</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>lsb</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>\n<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml\">GLSL imulExtended man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaedcec48743632dff6786bcc492074b1b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::uaddCarry </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>carry</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </p>\n<p>The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml\">GLSL uaddCarry man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga732e2fb56db57ea541c7e5c92b7121be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::umulExtended </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>msb</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>lsb</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>\n<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml\">GLSL umulExtended man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3316ba1229ad9b9f09480833321b053\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::usubBorrow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>borrow</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </p>\n<p>The value borrow is set to 0 if x &gt;= y, or to 1 otherwise.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml\">GLSL usubBorrow man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00371.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL matrix functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad7928795124768e058f99dce270f5c8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the determinant of a squared matrix.  <a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7928795124768e058f99dce270f5c8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the inverse of a squared matrix.  <a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].  <a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a> (vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</td></tr>\n<tr class=\"memdesc:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.  <a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">More...</a><br /></td></tr>\n<tr class=\"separator:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a> (mat&lt; C, R, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the transposed matrix of x.  <a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">More...</a><br /></td></tr>\n<tr class=\"separator:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL matrix functions. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00057.html\" title=\"Core features \">glm/matrix.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad7928795124768e058f99dce270f5c8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::determinant </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the determinant of a squared matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaed509fe8129b01e4f20a6d0de5690091\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the inverse of a squared matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml\">GLSL inverse man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf14569404c779fedca98d0b9b8e58c1f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::matrixCompMult </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j]. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac29fb7bae75a8e4c1b74cbbf85520e50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL detail::outerProduct_trait&lt;C, R, T, Q&gt;::type glm::outerProduct </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae679d841da8ce9dbcc6c2d454f15bc35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt;::transpose_type glm::transpose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the transposed matrix of x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00372.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Floating-Point Pack and Unpack Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Floating-Point Pack and Unpack Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a> (uvec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.  <a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.  <a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0e2d107039fe608a209497af867b85fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a> (double v)</td></tr>\n<tr class=\"memdesc:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component unsigned integer vector representation of v.  <a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a> (uint v)</td></tr>\n<tr class=\"memdesc:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga2db488646d48b7c43d3218954523fe82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. </p>\n<p>These functions do not operate component-wise, rather as described in each case.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00120.html\" title=\"Core features \">glm/packing.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa916ca426b2bb0343ba17e3753e245c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL double glm::packDouble2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. </p>\n<p>If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml\">GLSL packDouble2x32 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20f134b07db3a3d3a38efb2617388c92\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packHalf2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga977ab172da5494e5ac63e952afacfbe2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packSnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml\">GLSL packSnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e8f17627516445026ab7a9c2e3531a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packSnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0e2d107039fe608a209497af867b85fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml\">GLSL packUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7d2f7341a9eeb4a436929d6f9ad08f2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f4296dc5f12f0aa67ac05b8bb322483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\">double&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a two-component unsigned integer vector representation of v. </p>\n<p>The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml\">GLSL unpackDouble2x32 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf59b52e6b28da9335322c4ae19b5d745\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackHalf2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd8f8971a3fe28418be0d0fa1f786b38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db488646d48b7c43d3218954523fe82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f66188e5d65afeb9ffba1ad971e4007\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f903259150b67e9466f5f8edffcd197\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00373.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Angle and Trigonometry Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Angle and Trigonometry Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Function parameters specified as angle are assumed to be in units of radians.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacc9b092df8257c68f19c9053703e2563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc cosine.  <a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic cosine; returns the non-negative inverse of cosh.  <a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc sine.  <a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic sine; returns the inverse of sinh.  <a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y_over_x)</td></tr>\n<tr class=\"memdesc:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gabc925650e618357d07da255531658b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic tangent; returns the inverse of tanh.  <a href=\"a00373.html#gabc925650e618357d07da255531658b87\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc925650e618357d07da255531658b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric cosine function.  <a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.  <a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a> (vec&lt; L, T, Q &gt; const &amp;radians)</td></tr>\n<tr class=\"memdesc:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts radians to degrees and returns the result.  <a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a> (vec&lt; L, T, Q &gt; const &amp;degrees)</td></tr>\n<tr class=\"memdesc:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts degrees to radians and returns the result.  <a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric sine function.  <a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.  <a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric tangent function.  <a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)  <a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Function parameters specified as angle are assumed to be in units of radians. </p>\n<p>In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.</p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00160.html\" title=\"Core features \">glm/trigonometric.hpp</a>&gt; to use these core features.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>ext_vector_trigonometric </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gacc9b092df8257c68f19c9053703e2563\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::acos </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc cosine. </p>\n<p>Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| &gt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml\">GLSL acos man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga858f35dc66fd2688f20c52b5f25be76a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::acosh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic cosine; returns the non-negative inverse of cosh. </p>\n<p>Results are undefined if x &lt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml\">GLSL acosh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0552d2df4865fa8c3d7cfc3ec2caac73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::asin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc sine. </p>\n<p>Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| &gt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml\">GLSL asin man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ef16b501ee859fddde88e22192a5950\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::asinh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic sine; returns the inverse of sinh. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml\">GLSL asinh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61629f3a4aa14057e7a8cae002291db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc tangent. </p>\n<p>Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00055\">glm::atan2()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5229f087eaccbc466f1c609ce3107b95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y_over_x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc tangent. </p>\n<p>Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc925650e618357d07da255531658b87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atanh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic tangent; returns the inverse of tanh. </p>\n<p>Results are undefined if abs(x) &gt;= 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml\">GLSL atanh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a41efc740e3b3c937447d3a6284130e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::cos </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric cosine function. </p>\n<p>The values returned by this function will range from [-1, 1].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml\">GLSL cos man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e260e372742c5f517aca196cf1e62b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::cosh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml\">GLSL cosh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8faec9e303538065911ba8b3caf7326b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::degrees </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>radians</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts radians to degrees and returns the result. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml\">GLSL degrees man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e1db4862c5e25afd553930e2fdd6a68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::radians </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>degrees</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts degrees to radians and returns the result. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml\">GLSL radians man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29747fd108cb7292ae5a284f69691a69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric sine function. </p>\n<p>The values returned by this function will range from [-1, 1].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml\">GLSL sin man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7c39ff21809e281552b4dbe46f4a39d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sinh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml\">GLSL sinh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga293a34cfb9f0115cc606b4a97c84f11f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::tan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric tangent function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml\">GLSL tan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::tanh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml\">GLSL tanh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/a00374.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector Relational Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector Relational Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if all components of x are true.  <a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if any component of x is true.  <a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">More...</a><br /></td></tr>\n<tr class=\"separator:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">More...</a><br /></td></tr>\n<tr class=\"separator:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise logical complement of x.  <a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. </p>\n<p>For vector results, use the following built-in functions.</p>\n<p>In all cases, the sizes of all the input and return vectors for any particular call must match.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00225.html\" title=\"Core features \">glm/vector_relational.hpp</a>&gt; to use these core features.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga87e53f50b679f5f95c5cb4780311b3dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR bool glm::all </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if all components of x are true. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml\">GLSL all man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga911b3f8e41459dd551ccb6d385d91061\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR bool glm::any </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if any component of x is true. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml\">GLSL any man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4c5cfdaa70834421397a85aa83ad946\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x == y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point, integer or bool scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml\">GLSL equal man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfdb8ea82deca869ddc7e63ea5a63ae4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::greaterThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml\">GLSL greaterThan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga859975f538940f8d18fe62f916b9abd7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::greaterThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml\">GLSL greaterThanEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae90ed1592c395f93e3f3dfce6b2f39c6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::lessThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison result of x &lt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml\">GLSL lessThan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0bdafc019d227257ff73fb5bcca1718\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::lessThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &lt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml\">GLSL lessThanEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga610fcd175791fd246e328ffee10dbf1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::not_ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise logical complement of x. </p>\n<p>/!\\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml\">GLSL not man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x != y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point, integer or bool scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml\">GLSL notEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: detail Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">detail Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00001\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_features.hpp</b> <a href=\"a00001_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00002\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_fixes.hpp</b> <a href=\"a00002_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00003\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_noise.hpp</b> <a href=\"a00003_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00004\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_swizzle.hpp</b> <a href=\"a00004_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00005\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_swizzle_func.hpp</b> <a href=\"a00005_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00006\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_vectorize.hpp</b> <a href=\"a00006_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00019\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compute_common.hpp</b> <a href=\"a00019_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00020\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compute_vector_relational.hpp</b> <a href=\"a00020_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00124\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>qualifier.hpp</b> <a href=\"a00124_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00153\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>setup.hpp</b> <a href=\"a00153_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00163\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type_float.hpp</b> <a href=\"a00163_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00164\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type_half.hpp</b> <a href=\"a00164_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00165\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html\">type_mat2x2.hpp</a> <a href=\"a00165_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00165\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html\">type_mat2x3.hpp</a> <a href=\"a00166_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00167\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">type_mat2x4.hpp</a> <a href=\"a00167_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00167\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00168\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">type_mat3x2.hpp</a> <a href=\"a00168_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html\">type_mat3x3.hpp</a> <a href=\"a00169_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00169\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00170\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html\">type_mat3x4.hpp</a> <a href=\"a00170_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00170\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00171\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html\">type_mat4x2.hpp</a> <a href=\"a00171_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00171\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">type_mat4x3.hpp</a> <a href=\"a00172_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00173\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00173.html\">type_mat4x4.hpp</a> <a href=\"a00173_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00176.html\">type_quat.hpp</a> <a href=\"a00176_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00176\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html\">type_vec1.hpp</a> <a href=\"a00178_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">type_vec2.hpp</a> <a href=\"a00179_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00180.html\">type_vec3.hpp</a> <a href=\"a00180_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00181.html\">type_vec4.hpp</a> <a href=\"a00181_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00181\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: F: Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">F: Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_9e5fe034a00e89334fd5186c3e7db156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_5189610d3ba09ec39b766fb99b34cd93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_cef2d71d502cb69a9252bca2297d9549\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gtc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00009\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00009.html\">bitfield.hpp</a> <a href=\"a00009_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00009\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00012\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00012.html\">gtc/color_space.hpp</a> <a href=\"a00012_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00012\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html\">constants.hpp</a> <a href=\"a00021_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00024\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00024.html\">epsilon.hpp</a> <a href=\"a00024_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00024\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00041\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">gtc/integer.hpp</a> <a href=\"a00041_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00041\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00058\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00058.html\">matrix_access.hpp</a> <a href=\"a00058_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00058\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">matrix_integer.hpp</a> <a href=\"a00100_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00100\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00102\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00102.html\">matrix_inverse.hpp</a> <a href=\"a00102_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00102\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00109\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00109.html\">gtc/matrix_transform.hpp</a> <a href=\"a00109_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00109\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00112\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00112.html\">noise.hpp</a> <a href=\"a00112_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00112\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00119\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">gtc/packing.hpp</a> <a href=\"a00119_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00119\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00125\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">gtc/quaternion.hpp</a> <a href=\"a00125_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00125\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">random.hpp</a> <a href=\"a00137_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">reciprocal.hpp</a> <a href=\"a00140_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00143\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">round.hpp</a> <a href=\"a00143_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00143\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00161\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">gtc/type_aligned.hpp</a> <a href=\"a00161_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00174.html\">type_precision.hpp</a> <a href=\"a00174_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00175\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00175.html\">type_ptr.hpp</a> <a href=\"a00175_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00182\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">ulp.hpp</a> <a href=\"a00182_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00182\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00183\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">vec1.hpp</a> <a href=\"a00183_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: doc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">doc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00047\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>man.doxy</b> <a href=\"a00047_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00059.html\">matrix_clip_space.hpp</a> <a href=\"a00059_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00060\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">matrix_common.hpp</a> <a href=\"a00060_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00060\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00063\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html\">matrix_double2x2.hpp</a> <a href=\"a00063_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00063\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00064\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00064.html\">matrix_double2x2_precision.hpp</a> <a href=\"a00064_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00064\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00065\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00065.html\">matrix_double2x3.hpp</a> <a href=\"a00065_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00066\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00066.html\">matrix_double2x3_precision.hpp</a> <a href=\"a00066_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00067\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00067.html\">matrix_double2x4.hpp</a> <a href=\"a00067_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00067\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">matrix_double2x4_precision.hpp</a> <a href=\"a00068_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00069.html\">matrix_double3x2.hpp</a> <a href=\"a00069_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00070.html\">matrix_double3x2_precision.hpp</a> <a href=\"a00070_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00071\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00071.html\">matrix_double3x3.hpp</a> <a href=\"a00071_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html\">matrix_double3x3_precision.hpp</a> <a href=\"a00072_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00073\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00073.html\">matrix_double3x4.hpp</a> <a href=\"a00073_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">matrix_double3x4_precision.hpp</a> <a href=\"a00074_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00075\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00075.html\">matrix_double4x2.hpp</a> <a href=\"a00075_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00076\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">matrix_double4x2_precision.hpp</a> <a href=\"a00076_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00076\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00077\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">matrix_double4x3.hpp</a> <a href=\"a00077_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00077\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00078\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00078.html\">matrix_double4x3_precision.hpp</a> <a href=\"a00078_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00078\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00079.html\">matrix_double4x4.hpp</a> <a href=\"a00079_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00080\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00080.html\">matrix_double4x4_precision.hpp</a> <a href=\"a00080_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00082\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00082.html\">matrix_float2x2.hpp</a> <a href=\"a00082_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00082\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00083.html\">matrix_float2x2_precision.hpp</a> <a href=\"a00083_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html\">matrix_float2x3.hpp</a> <a href=\"a00084_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00085\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00085.html\">matrix_float2x3_precision.hpp</a> <a href=\"a00085_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00085\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">matrix_float2x4.hpp</a> <a href=\"a00086_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00087\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html\">matrix_float2x4_precision.hpp</a> <a href=\"a00087_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00087\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00088\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00088.html\">matrix_float3x2.hpp</a> <a href=\"a00088_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00088\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">matrix_float3x2_precision.hpp</a> <a href=\"a00089_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00090.html\">matrix_float3x3.hpp</a> <a href=\"a00090_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html\">matrix_float3x3_precision.hpp</a> <a href=\"a00091_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">matrix_float3x4.hpp</a> <a href=\"a00092_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00093\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">matrix_float3x4_precision.hpp</a> <a href=\"a00093_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00093\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">matrix_float4x2.hpp</a> <a href=\"a00094_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>matrix_float4x2_precision.hpp</b> <a href=\"a00095_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00096\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html\">matrix_float4x3.hpp</a> <a href=\"a00096_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00096\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">matrix_float4x3_precision.hpp</a> <a href=\"a00097_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00098\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">matrix_float4x4.hpp</a> <a href=\"a00098_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00098\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00099\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">matrix_float4x4_precision.hpp</a> <a href=\"a00099_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00099\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00105.html\">matrix_projection.hpp</a> <a href=\"a00105_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00107.html\">matrix_relational.hpp</a> <a href=\"a00107_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00108.html\">ext/matrix_transform.hpp</a> <a href=\"a00108_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00108\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00127\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">quaternion_common.hpp</a> <a href=\"a00127_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00127\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00128\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">quaternion_double.hpp</a> <a href=\"a00128_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00128\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00129\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00129.html\">quaternion_double_precision.hpp</a> <a href=\"a00129_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00129\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00130\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00130.html\">quaternion_exponential.hpp</a> <a href=\"a00130_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00130\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">quaternion_float.hpp</a> <a href=\"a00131_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">quaternion_float_precision.hpp</a> <a href=\"a00132_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">quaternion_geometric.hpp</a> <a href=\"a00133_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00134\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html\">quaternion_relational.hpp</a> <a href=\"a00134_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00134\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00135\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">quaternion_transform.hpp</a> <a href=\"a00135_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00135\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00136.html\">quaternion_trigonometric.hpp</a> <a href=\"a00136_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00144\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html\">scalar_common.hpp</a> <a href=\"a00144_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00144\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00145\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00145.html\">scalar_constants.hpp</a> <a href=\"a00145_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00146\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">scalar_int_sized.hpp</a> <a href=\"a00146_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00146\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00147\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html\">scalar_integer.hpp</a> <a href=\"a00147_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00147\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00149\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">ext/scalar_relational.hpp</a> <a href=\"a00149_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00149\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00151\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00151.html\">scalar_uint_sized.hpp</a> <a href=\"a00151_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00151\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00152\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">scalar_ulp.hpp</a> <a href=\"a00152_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00152\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00189.html\">vector_bool1.hpp</a> <a href=\"a00189_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00190.html\">vector_bool1_precision.hpp</a> <a href=\"a00190_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00190\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00191\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00191.html\">vector_bool2.hpp</a> <a href=\"a00191_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00191\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00192\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00192.html\">vector_bool2_precision.hpp</a> <a href=\"a00192_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00192\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00193.html\">vector_bool3.hpp</a> <a href=\"a00193_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00194.html\">vector_bool3_precision.hpp</a> <a href=\"a00194_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00194\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00195.html\">vector_bool4.hpp</a> <a href=\"a00195_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00196.html\">vector_bool4_precision.hpp</a> <a href=\"a00196_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00197.html\">vector_common.hpp</a> <a href=\"a00197_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00198.html\">vector_double1.hpp</a> <a href=\"a00198_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00199\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00199.html\">vector_double1_precision.hpp</a> <a href=\"a00199_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00199\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00200\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00200.html\">vector_double2.hpp</a> <a href=\"a00200_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00201.html\">vector_double2_precision.hpp</a> <a href=\"a00201_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00201\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00202.html\">vector_double3.hpp</a> <a href=\"a00202_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00202\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00203.html\">vector_double3_precision.hpp</a> <a href=\"a00203_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00204\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00204.html\">vector_double4.hpp</a> <a href=\"a00204_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00204\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00205.html\">vector_double4_precision.hpp</a> <a href=\"a00205_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00205\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00206\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00206.html\">vector_float1.hpp</a> <a href=\"a00206_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00206\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html\">vector_float1_precision.hpp</a> <a href=\"a00207_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00207\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00208.html\">vector_float2.hpp</a> <a href=\"a00208_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00208\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html\">vector_float2_precision.hpp</a> <a href=\"a00209_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html\">vector_float3.hpp</a> <a href=\"a00210_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00210\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00211\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00211.html\">vector_float3_precision.hpp</a> <a href=\"a00211_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00211\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00212\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00212.html\">vector_float4.hpp</a> <a href=\"a00212_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00212\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html\">vector_float4_precision.hpp</a> <a href=\"a00213_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00213\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00214\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html\">vector_int1.hpp</a> <a href=\"a00214_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00214\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html\">vector_int1_precision.hpp</a> <a href=\"a00215_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00215\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00216.html\">vector_int2.hpp</a> <a href=\"a00216_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00216\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00217.html\">vector_int2_precision.hpp</a> <a href=\"a00217_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00217\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">vector_int3.hpp</a> <a href=\"a00218_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00218\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">vector_int3_precision.hpp</a> <a href=\"a00219_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">vector_int4.hpp</a> <a href=\"a00220_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00221.html\">vector_int4_precision.hpp</a> <a href=\"a00221_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00222\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00222.html\">vector_integer.hpp</a> <a href=\"a00222_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00222\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">ext/vector_relational.hpp</a> <a href=\"a00224_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00224\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00226.html\">vector_uint1.hpp</a> <a href=\"a00226_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00226\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">vector_uint1_precision.hpp</a> <a href=\"a00227_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00227\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00228.html\">vector_uint2.hpp</a> <a href=\"a00228_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html\">vector_uint2_precision.hpp</a> <a href=\"a00229_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00229\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00230.html\">vector_uint3.hpp</a> <a href=\"a00230_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00231\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00231.html\">vector_uint3_precision.hpp</a> <a href=\"a00231_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00231\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00232.html\">vector_uint4.hpp</a> <a href=\"a00232_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00232\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00233\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00233.html\">vector_uint4_precision.hpp</a> <a href=\"a00233_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00233\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00234.html\">vector_ulp.hpp</a> <a href=\"a00234_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: G-Truc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">G-Truc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_d9496f0844b48bc7e53b5af8c99b9ab2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: G-Truc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">G-Truc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_44e5e654415abd9ca6fdeaddaff8565e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_033f5edb0915b828d2c46ed4804e5503\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_6b66465792d005310484819a0eb0b0d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_4c6bd29c73fa4e5a2509e1c15f846751\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_f35778ec600a1b9bbc4524e62e226aa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00015\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00015.html\">common.hpp</a> <a href=\"a00015_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00026\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">exponential.hpp</a> <a href=\"a00026_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00026\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00027\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">ext.hpp</a> <a href=\"a00027_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00027\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>fwd.hpp</b> <a href=\"a00035_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00036\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">geometric.hpp</a> <a href=\"a00036_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00037\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00037.html\">glm.hpp</a> <a href=\"a00037_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00037\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00043\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00043.html\">integer.hpp</a> <a href=\"a00043_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00043\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00048.html\">mat2x2.hpp</a> <a href=\"a00048_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">mat2x3.hpp</a> <a href=\"a00049_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">mat2x4.hpp</a> <a href=\"a00050_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00051.html\">mat3x2.hpp</a> <a href=\"a00051_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00052\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html\">mat3x3.hpp</a> <a href=\"a00052_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00052\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00053\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">mat3x4.hpp</a> <a href=\"a00053_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00054\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00054.html\">mat4x2.hpp</a> <a href=\"a00054_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00054\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00055\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00055.html\">mat4x3.hpp</a> <a href=\"a00055_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00055\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00056.html\">mat4x4.hpp</a> <a href=\"a00056_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00057\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00057.html\">matrix.hpp</a> <a href=\"a00057_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00120\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">packing.hpp</a> <a href=\"a00120_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00120\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00160.html\">trigonometric.hpp</a> <a href=\"a00160_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00160\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00184\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">vec2.hpp</a> <a href=\"a00184_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00184\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00185.html\">vec3.hpp</a> <a href=\"a00185_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00185\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00186.html\">vec4.hpp</a> <a href=\"a00186_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">vector_relational.hpp</a> <a href=\"a00225_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Source Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Source Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_a8bee7be44182a33f3820393ae0b105d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gtx Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<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>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00007.html\">associated_min_max.hpp</a> <a href=\"a00007_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00008\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00008.html\">bit.hpp</a> <a href=\"a00008_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00010.html\">closest_point.hpp</a> <a href=\"a00010_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00011.html\">color_encoding.hpp</a> <a href=\"a00011_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00013\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00013.html\">gtx/color_space.hpp</a> <a href=\"a00013_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00013\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00014\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00014.html\">color_space_YCoCg.hpp</a> <a href=\"a00014_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00014\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00016.html\">gtx/common.hpp</a> <a href=\"a00016_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00017\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">compatibility.hpp</a> <a href=\"a00017_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00017\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00018\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00018.html\">component_wise.hpp</a> <a href=\"a00018_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00018\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00022\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">dual_quaternion.hpp</a> <a href=\"a00022_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00022\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">easing.hpp</a> <a href=\"a00023_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00025.html\">euler_angles.hpp</a> <a href=\"a00025_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00028\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00028.html\">extend.hpp</a> <a href=\"a00028_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00028\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00029\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">extended_min_max.hpp</a> <a href=\"a00029_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00029\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00030.html\">exterior_product.hpp</a> <a href=\"a00030_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00031\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00031.html\">fast_exponential.hpp</a> <a href=\"a00031_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00031\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00032\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00032.html\">fast_square_root.hpp</a> <a href=\"a00032_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00032\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00033\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00033.html\">fast_trigonometry.hpp</a> <a href=\"a00033_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00033\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">functions.hpp</a> <a href=\"a00034_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00034\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00038\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html\">gradient_paint.hpp</a> <a href=\"a00038_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00038\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00039\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00039.html\">handed_coordinate_space.hpp</a> <a href=\"a00039_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00040\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html\">hash.hpp</a> <a href=\"a00040_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00042\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">gtx/integer.hpp</a> <a href=\"a00042_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00042\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00044\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00044.html\">intersect.hpp</a> <a href=\"a00044_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00044\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00045.html\">io.hpp</a> <a href=\"a00045_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00046\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html\">log_base.hpp</a> <a href=\"a00046_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00046\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html\">matrix_cross_product.hpp</a> <a href=\"a00061_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00062\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">matrix_decompose.hpp</a> <a href=\"a00062_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00062\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00081\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00081.html\">matrix_factorisation.hpp</a> <a href=\"a00081_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00081\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00101\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">matrix_interpolation.hpp</a> <a href=\"a00101_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00101\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00103.html\">matrix_major_storage.hpp</a> <a href=\"a00103_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00104.html\">matrix_operation.hpp</a> <a href=\"a00104_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00104\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00106\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00106.html\">matrix_query.hpp</a> <a href=\"a00106_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00106\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00110\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00110.html\">matrix_transform_2d.hpp</a> <a href=\"a00110_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00110\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00111\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00111.html\">mixed_product.hpp</a> <a href=\"a00111_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00113\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00113.html\">norm.hpp</a> <a href=\"a00113_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00113\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00114.html\">normal.hpp</a> <a href=\"a00114_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00115\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00115.html\">normalize_dot.hpp</a> <a href=\"a00115_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00115\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00116\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">number_precision.hpp</a> <a href=\"a00116_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00116\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00117\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">optimum_pow.hpp</a> <a href=\"a00117_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00117\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">orthonormalize.hpp</a> <a href=\"a00118_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">perpendicular.hpp</a> <a href=\"a00121_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00122\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">polar_coordinates.hpp</a> <a href=\"a00122_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00122\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00123\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00123.html\">projection.hpp</a> <a href=\"a00123_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00123\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">gtx/quaternion.hpp</a> <a href=\"a00126_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00138\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00138.html\">range.hpp</a> <a href=\"a00138_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00139\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html\">raw_data.hpp</a> <a href=\"a00139_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00141\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">rotate_normalized_axis.hpp</a> <a href=\"a00141_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00141\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html\">rotate_vector.hpp</a> <a href=\"a00142_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00148\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html\">scalar_multiplication.hpp</a> <a href=\"a00148_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00148\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00150\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html\">gtx/scalar_relational.hpp</a> <a href=\"a00150_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00150\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00154\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">spline.hpp</a> <a href=\"a00154_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00154\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00155\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">std_based_type.hpp</a> <a href=\"a00155_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00155\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00156.html\">string_cast.hpp</a> <a href=\"a00156_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00157\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00157.html\">texture.hpp</a> <a href=\"a00157_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00157\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00158\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html\">transform.hpp</a> <a href=\"a00158_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00158\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00159\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00159.html\">transform2.hpp</a> <a href=\"a00159_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00159\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00162.html\">gtx/type_aligned.hpp</a> <a href=\"a00162_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">type_trait.hpp</a> <a href=\"a00177_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00177\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00187.html\">vec_swizzle.hpp</a> <a href=\"a00187_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00188.html\">vector_angle.hpp</a> <a href=\"a00188_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00188\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00223.html\">vector_query.hpp</a> <a href=\"a00223_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00223\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00235\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00235.html\">wrap.hpp</a> <a href=\"a00235_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00235\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.10 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\nbody\n{\n\tmargin:0px;\n\tpadding:0px;\n\tbackground-color:#bf6000;\n\tbackground-repeat:no-repeat;\n\tbackground-position:center center;\n\tbackground-attachment:fixed;\n\tmin-height:1200px;\n\toverflow:auto;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tcolor:#bf6000;\n\tfont-size: 150%;\n}\n\n.title {\n\tcolor:#bf6000;\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #bf6000;\n\tcolor:#bf6000;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #000000;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #606060;\n}\n\n.contents{\n\tbackground-color: #FFFFFF;\n\tpadding-top:8px;\n\tpadding-bottom:8px;\n\tpadding-left:32px; \n\tpadding-right:32px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1216px;\n\tborder-bottom-left-radius: 8px;\n\tborder-bottom-right-radius: 8px;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #FF8000;\n        background-color: #FFF8F0;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n\tfont-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n\twhite-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tcolor: black;\n\tmargin: 0;\n}\n\ntd.indexkey {\n\tbackground-color: #FFF8F0;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n\twhite-space: nowrap;\n\tvertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #FFF8F0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n\tmargin-top: 0px;\n\tmargin-bottom: 0px;\n\tpadding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\tdisplay: none;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #FF8000;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\tdisplay: none;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FFFCF8;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #FFF8F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #bf6000;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #bf6000;\n        border-left: 1px solid #bf6000;\n        border-right: 1px solid #bf6000;\n        padding: 6px 0px 6px 0px;\n        /*color: #253555;*/\n        font-weight: bold;\n        /*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/\n        /*background-image:url('nav_f.png');*/\n        background-repeat:repeat-x;\n        background-color: #FFF8F0;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #bf6000;      \n        border-left: 1px solid #bf6000;      \n        border-right: 1px solid #bf6000; \n        padding: 6px 10px 2px 10px;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFDFB;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n\tbackground-color: #728DC1;\n\tborder-top:1px solid #5373B4;\n\tborder-left:1px solid #5373B4;\n\tborder-right:1px solid #C4CFE5;\n\tborder-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #bf6000;\n        border-bottom: 1px solid #bf6000;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n\twhite-space: nowrap;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n\twidth: 100%;\n\tpadding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #FFFDFB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n\tcursor: pointer;\n\tpadding-left: 2px;\n\tpadding-right: 2px;\n\tcolor: #bf6000;\n}\n\n.arrow {\n    color: #bf6000;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #bf6000;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n\tmargin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n\tmargin-top: 4px;\n\tmargin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\t/*background-image:url('tab_b.png');*/\n\tbackground-color: #FFF8F0;\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#bf6000;\n\tborder:solid 0px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#bf6000;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #bf6000;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#bf6000;\n        font-size: 8pt;\n}\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}\n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n\tbackground-repeat:repeat-x;\n\tbackground-color: #FFFCF8;\n\n\tpadding:0px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #E0C000;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectalign\n{\n        vertical-align: middle;\n}\n\n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n\tcolor: #FF8000;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n\tfont-weight: bold;\n\tcolor: gray;\n\tcursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#titlearea\n{\n\tmargin: 0px;\n\tpadding-top: 8px;\n\tpadding-bottom: 8px;\n\tmargin-top: 32px;\n\twidth: 100%;\n\tborder-bottom: 0px solid #FF8000;\n\tborder-top-left-radius: 8px;\n\tborder-top-right-radius: 8px;\n\tbackground-color:#FFFFFF;\n}\n\n#top\n{\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/dynsections.js",
    "content": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n } \n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\n\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function() {\n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');\n      a.html('&#9660;');\n      $(this).show();\n    } else if (l==level+1) {\n      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');\n      a.html('&#9658;');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  // the clicked row\n  var currentRow = $('#row_'+id);\n\n  // all rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n\n  // only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() { return this.id.match(re); });\n\n  // first row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    // replace down arrow by right arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    currentRowSpans.filter(\".arrow\").html('&#9658;');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide(); // hide all children\n  } else { // we are SHOWING\n    // replace right arrow by down arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfclosed\").removeClass(\"iconfclosed\").addClass(\"iconfopen\");\n    currentRowSpans.filter(\".arrow\").html('&#9660;');\n    // replace down arrows by right arrows for child rows\n    var childRowsSpans = childRows.find(\"span\");\n    childRowsSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    childRowsSpans.filter(\".arrow\").html('&#9658;');\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n\n\n$(document).ready(function() {\n  $('.code,.codeRef').each(function() {\n    $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n  });\n});\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: File List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">File List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented files with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00001_source.html\"><span class=\"icondoc\"></span></a><b>_features.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00002_source.html\"><span class=\"icondoc\"></span></a><b>_fixes.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00003_source.html\"><span class=\"icondoc\"></span></a><b>_noise.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00004_source.html\"><span class=\"icondoc\"></span></a><b>_swizzle.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00005_source.html\"><span class=\"icondoc\"></span></a><b>_swizzle_func.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00006_source.html\"><span class=\"icondoc\"></span></a><b>_vectorize.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00007_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00007.html\" target=\"_self\">associated_min_max.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> </td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00008_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00008.html\" target=\"_self\">bit.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> </td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00009_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00009.html\" target=\"_self\">bitfield.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> </td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00010_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00010.html\" target=\"_self\">closest_point.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> </td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00011_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00011.html\" target=\"_self\">color_encoding.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> </td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00012_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00012.html\" target=\"_self\">gtc/color_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> </td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00013_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00013.html\" target=\"_self\">gtx/color_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> </td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00014_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00014.html\" target=\"_self\">color_space_YCoCg.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> </td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00015_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00015.html\" target=\"_self\">common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00016_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00016.html\" target=\"_self\">gtx/common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> </td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00017_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00017.html\" target=\"_self\">compatibility.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> </td></tr>\n<tr id=\"row_17_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00018_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00018.html\" target=\"_self\">component_wise.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> </td></tr>\n<tr id=\"row_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00019_source.html\"><span class=\"icondoc\"></span></a><b>compute_common.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_19_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00020_source.html\"><span class=\"icondoc\"></span></a><b>compute_vector_relational.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00021_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00021.html\" target=\"_self\">constants.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> </td></tr>\n<tr id=\"row_21_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00022_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00022.html\" target=\"_self\">dual_quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> </td></tr>\n<tr id=\"row_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00023_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00023.html\" target=\"_self\">easing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> </td></tr>\n<tr id=\"row_23_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00024_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00024.html\" target=\"_self\">epsilon.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> </td></tr>\n<tr id=\"row_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00025_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00025.html\" target=\"_self\">euler_angles.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> </td></tr>\n<tr id=\"row_25_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00026_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00026.html\" target=\"_self\">exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00027_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00027.html\" target=\"_self\">ext.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) </td></tr>\n<tr id=\"row_27_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00028_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00028.html\" target=\"_self\">extend.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> </td></tr>\n<tr id=\"row_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00029_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00029.html\" target=\"_self\">extended_min_max.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> </td></tr>\n<tr id=\"row_29_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00030_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00030.html\" target=\"_self\">exterior_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> </td></tr>\n<tr id=\"row_30_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00031_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00031.html\" target=\"_self\">fast_exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> </td></tr>\n<tr id=\"row_31_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00032_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00032.html\" target=\"_self\">fast_square_root.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> </td></tr>\n<tr id=\"row_32_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00033_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00033.html\" target=\"_self\">fast_trigonometry.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> </td></tr>\n<tr id=\"row_33_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00034_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00034.html\" target=\"_self\">functions.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> </td></tr>\n<tr id=\"row_34_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00035_source.html\"><span class=\"icondoc\"></span></a><b>fwd.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_35_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00036_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00036.html\" target=\"_self\">geometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_36_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00037_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00037.html\" target=\"_self\">glm.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_37_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00038_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00038.html\" target=\"_self\">gradient_paint.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> </td></tr>\n<tr id=\"row_38_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00039_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00039.html\" target=\"_self\">handed_coordinate_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> </td></tr>\n<tr id=\"row_39_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00040_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00040.html\" target=\"_self\">hash.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> </td></tr>\n<tr id=\"row_40_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00041_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00041.html\" target=\"_self\">gtc/integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> </td></tr>\n<tr id=\"row_41_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00042_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00042.html\" target=\"_self\">gtx/integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> </td></tr>\n<tr id=\"row_42_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00043_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00043.html\" target=\"_self\">integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_43_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00044_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00044.html\" target=\"_self\">intersect.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> </td></tr>\n<tr id=\"row_44_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00045_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00045.html\" target=\"_self\">io.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> </td></tr>\n<tr id=\"row_45_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00046_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00046.html\" target=\"_self\">log_base.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> </td></tr>\n<tr id=\"row_46_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00047_source.html\"><span class=\"icondoc\"></span></a><b>man.doxy</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_47_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00048_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00048.html\" target=\"_self\">mat2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_48_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00049_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00049.html\" target=\"_self\">mat2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_49_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00050_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00050.html\" target=\"_self\">mat2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_50_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00051_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00051.html\" target=\"_self\">mat3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_51_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00052_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00052.html\" target=\"_self\">mat3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_52_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00053_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00053.html\" target=\"_self\">mat3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_53_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00054_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00054.html\" target=\"_self\">mat4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_54_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00055_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00055.html\" target=\"_self\">mat4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_55_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00056_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00056.html\" target=\"_self\">mat4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_56_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00057_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00057.html\" target=\"_self\">matrix.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_57_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00058_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00058.html\" target=\"_self\">matrix_access.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> </td></tr>\n<tr id=\"row_58_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00059_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00059.html\" target=\"_self\">matrix_clip_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> </td></tr>\n<tr id=\"row_59_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00060_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00060.html\" target=\"_self\">matrix_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> </td></tr>\n<tr id=\"row_60_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00061_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00061.html\" target=\"_self\">matrix_cross_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> </td></tr>\n<tr id=\"row_61_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00062_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00062.html\" target=\"_self\">matrix_decompose.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> </td></tr>\n<tr id=\"row_62_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00063_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00063.html\" target=\"_self\">matrix_double2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_63_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00064_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00064.html\" target=\"_self\">matrix_double2x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_64_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00065_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00065.html\" target=\"_self\">matrix_double2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_65_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00066_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00066.html\" target=\"_self\">matrix_double2x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_66_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00067_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00067.html\" target=\"_self\">matrix_double2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_67_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00068_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00068.html\" target=\"_self\">matrix_double2x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_68_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00069_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00069.html\" target=\"_self\">matrix_double3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_69_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00070_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00070.html\" target=\"_self\">matrix_double3x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_70_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00071_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00071.html\" target=\"_self\">matrix_double3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_71_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00072_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00072.html\" target=\"_self\">matrix_double3x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_72_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00073_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00073.html\" target=\"_self\">matrix_double3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_73_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00074_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00074.html\" target=\"_self\">matrix_double3x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_74_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00075_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00075.html\" target=\"_self\">matrix_double4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_75_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00076_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00076.html\" target=\"_self\">matrix_double4x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_76_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00077_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00077.html\" target=\"_self\">matrix_double4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_77_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00078_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00078.html\" target=\"_self\">matrix_double4x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_78_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00079_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00079.html\" target=\"_self\">matrix_double4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_79_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00080_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00080.html\" target=\"_self\">matrix_double4x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_80_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00081_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00081.html\" target=\"_self\">matrix_factorisation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> </td></tr>\n<tr id=\"row_81_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00082_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00082.html\" target=\"_self\">matrix_float2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_82_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00083_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00083.html\" target=\"_self\">matrix_float2x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_83_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00084_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00084.html\" target=\"_self\">matrix_float2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_84_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00085_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00085.html\" target=\"_self\">matrix_float2x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_85_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00086_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00086.html\" target=\"_self\">matrix_float2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_86_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00087_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00087.html\" target=\"_self\">matrix_float2x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_87_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00088_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00088.html\" target=\"_self\">matrix_float3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_88_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00089_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00089.html\" target=\"_self\">matrix_float3x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_89_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00090_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00090.html\" target=\"_self\">matrix_float3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_90_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00091_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00091.html\" target=\"_self\">matrix_float3x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_91_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00092_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00092.html\" target=\"_self\">matrix_float3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_92_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00093_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00093.html\" target=\"_self\">matrix_float3x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_93_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00094_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00094.html\" target=\"_self\">matrix_float4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_94_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00095_source.html\"><span class=\"icondoc\"></span></a><b>matrix_float4x2_precision.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_95_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00096_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00096.html\" target=\"_self\">matrix_float4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_96_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00097_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00097.html\" target=\"_self\">matrix_float4x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_97_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00098_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00098.html\" target=\"_self\">matrix_float4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_98_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00099_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00099.html\" target=\"_self\">matrix_float4x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_99_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00100_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00100.html\" target=\"_self\">matrix_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> </td></tr>\n<tr id=\"row_100_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00101_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00101.html\" target=\"_self\">matrix_interpolation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> </td></tr>\n<tr id=\"row_101_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00102_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00102.html\" target=\"_self\">matrix_inverse.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> </td></tr>\n<tr id=\"row_102_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00103_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00103.html\" target=\"_self\">matrix_major_storage.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> </td></tr>\n<tr id=\"row_103_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00104_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00104.html\" target=\"_self\">matrix_operation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> </td></tr>\n<tr id=\"row_104_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00105_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00105.html\" target=\"_self\">matrix_projection.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> </td></tr>\n<tr id=\"row_105_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00106_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00106.html\" target=\"_self\">matrix_query.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> </td></tr>\n<tr id=\"row_106_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00107_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00107.html\" target=\"_self\">matrix_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> </td></tr>\n<tr id=\"row_107_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00108_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00108.html\" target=\"_self\">ext/matrix_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> </td></tr>\n<tr id=\"row_108_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00109_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00109.html\" target=\"_self\">gtc/matrix_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> </td></tr>\n<tr id=\"row_109_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00110_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00110.html\" target=\"_self\">matrix_transform_2d.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> </td></tr>\n<tr id=\"row_110_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00111_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00111.html\" target=\"_self\">mixed_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> </td></tr>\n<tr id=\"row_111_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00112_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00112.html\" target=\"_self\">noise.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> </td></tr>\n<tr id=\"row_112_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00113_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00113.html\" target=\"_self\">norm.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> </td></tr>\n<tr id=\"row_113_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00114_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00114.html\" target=\"_self\">normal.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> </td></tr>\n<tr id=\"row_114_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00115_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00115.html\" target=\"_self\">normalize_dot.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> </td></tr>\n<tr id=\"row_115_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00116_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00116.html\" target=\"_self\">number_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> </td></tr>\n<tr id=\"row_116_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00117_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00117.html\" target=\"_self\">optimum_pow.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> </td></tr>\n<tr id=\"row_117_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00118_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00118.html\" target=\"_self\">orthonormalize.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> </td></tr>\n<tr id=\"row_118_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00119_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00119.html\" target=\"_self\">gtc/packing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> </td></tr>\n<tr id=\"row_119_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00120_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00120.html\" target=\"_self\">packing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_120_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00121_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00121.html\" target=\"_self\">perpendicular.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> </td></tr>\n<tr id=\"row_121_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00122_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00122.html\" target=\"_self\">polar_coordinates.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> </td></tr>\n<tr id=\"row_122_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00123_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00123.html\" target=\"_self\">projection.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> </td></tr>\n<tr id=\"row_123_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00124_source.html\"><span class=\"icondoc\"></span></a><b>qualifier.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_124_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00125_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00125.html\" target=\"_self\">gtc/quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> </td></tr>\n<tr id=\"row_125_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00126_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00126.html\" target=\"_self\">gtx/quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> </td></tr>\n<tr id=\"row_126_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00127_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00127.html\" target=\"_self\">quaternion_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> </td></tr>\n<tr id=\"row_127_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00128_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00128.html\" target=\"_self\">quaternion_double.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> </td></tr>\n<tr id=\"row_128_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00129_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00129.html\" target=\"_self\">quaternion_double_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> </td></tr>\n<tr id=\"row_129_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00130_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00130.html\" target=\"_self\">quaternion_exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> </td></tr>\n<tr id=\"row_130_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00131_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00131.html\" target=\"_self\">quaternion_float.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> </td></tr>\n<tr id=\"row_131_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00132_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00132.html\" target=\"_self\">quaternion_float_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> </td></tr>\n<tr id=\"row_132_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00133_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00133.html\" target=\"_self\">quaternion_geometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> </td></tr>\n<tr id=\"row_133_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00134_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00134.html\" target=\"_self\">quaternion_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> </td></tr>\n<tr id=\"row_134_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00135_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00135.html\" target=\"_self\">quaternion_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> </td></tr>\n<tr id=\"row_135_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00136_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00136.html\" target=\"_self\">quaternion_trigonometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> </td></tr>\n<tr id=\"row_136_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00137_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00137.html\" target=\"_self\">random.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> </td></tr>\n<tr id=\"row_137_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00138_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00138.html\" target=\"_self\">range.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> </td></tr>\n<tr id=\"row_138_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00139_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00139.html\" target=\"_self\">raw_data.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> </td></tr>\n<tr id=\"row_139_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00140_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00140.html\" target=\"_self\">reciprocal.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> </td></tr>\n<tr id=\"row_140_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00141_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00141.html\" target=\"_self\">rotate_normalized_axis.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> </td></tr>\n<tr id=\"row_141_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00142_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00142.html\" target=\"_self\">rotate_vector.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> </td></tr>\n<tr id=\"row_142_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00143_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00143.html\" target=\"_self\">round.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> </td></tr>\n<tr id=\"row_143_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00144_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00144.html\" target=\"_self\">scalar_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> </td></tr>\n<tr id=\"row_144_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00145_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00145.html\" target=\"_self\">scalar_constants.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> </td></tr>\n<tr id=\"row_145_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00146_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00146.html\" target=\"_self\">scalar_int_sized.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> </td></tr>\n<tr id=\"row_146_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00147_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00147.html\" target=\"_self\">scalar_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> </td></tr>\n<tr id=\"row_147_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00148_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00148.html\" target=\"_self\">scalar_multiplication.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> </td></tr>\n<tr id=\"row_148_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00149_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00149.html\" target=\"_self\">ext/scalar_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> </td></tr>\n<tr id=\"row_149_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00150_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00150.html\" target=\"_self\">gtx/scalar_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> </td></tr>\n<tr id=\"row_150_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00151_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00151.html\" target=\"_self\">scalar_uint_sized.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> </td></tr>\n<tr id=\"row_151_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00152_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00152.html\" target=\"_self\">scalar_ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> </td></tr>\n<tr id=\"row_152_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00153_source.html\"><span class=\"icondoc\"></span></a><b>setup.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_153_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00154_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00154.html\" target=\"_self\">spline.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> </td></tr>\n<tr id=\"row_154_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00155_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00155.html\" target=\"_self\">std_based_type.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> </td></tr>\n<tr id=\"row_155_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00156_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00156.html\" target=\"_self\">string_cast.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> </td></tr>\n<tr id=\"row_156_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00157_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00157.html\" target=\"_self\">texture.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> </td></tr>\n<tr id=\"row_157_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00158_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00158.html\" target=\"_self\">transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> </td></tr>\n<tr id=\"row_158_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00159_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00159.html\" target=\"_self\">transform2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> </td></tr>\n<tr id=\"row_159_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00160_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00160.html\" target=\"_self\">trigonometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_160_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00161_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00161.html\" target=\"_self\">gtc/type_aligned.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> </td></tr>\n<tr id=\"row_161_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00162_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00162.html\" target=\"_self\">gtx/type_aligned.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> </td></tr>\n<tr id=\"row_162_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00163_source.html\"><span class=\"icondoc\"></span></a><b>type_float.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_163_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00164_source.html\"><span class=\"icondoc\"></span></a><b>type_half.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_164_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00165_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00165.html\" target=\"_self\">type_mat2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_165_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00166_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00166.html\" target=\"_self\">type_mat2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_166_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00167_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00167.html\" target=\"_self\">type_mat2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_167_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00168_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00168.html\" target=\"_self\">type_mat3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_168_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00169_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00169.html\" target=\"_self\">type_mat3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_169_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00170_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00170.html\" target=\"_self\">type_mat3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_170_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00171_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00171.html\" target=\"_self\">type_mat4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_171_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00172_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00172.html\" target=\"_self\">type_mat4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_172_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00173_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00173.html\" target=\"_self\">type_mat4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_173_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00174_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00174.html\" target=\"_self\">type_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> </td></tr>\n<tr id=\"row_174_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00175_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00175.html\" target=\"_self\">type_ptr.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> </td></tr>\n<tr id=\"row_175_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00176_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00176.html\" target=\"_self\">type_quat.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_176_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00177_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00177.html\" target=\"_self\">type_trait.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> </td></tr>\n<tr id=\"row_177_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00178_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00178.html\" target=\"_self\">type_vec1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_178_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00179_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00179.html\" target=\"_self\">type_vec2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_179_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00180_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00180.html\" target=\"_self\">type_vec3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_180_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00181_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00181.html\" target=\"_self\">type_vec4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_181_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00182_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00182.html\" target=\"_self\">ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> </td></tr>\n<tr id=\"row_182_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00183_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00183.html\" target=\"_self\">vec1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> </td></tr>\n<tr id=\"row_183_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00184_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00184.html\" target=\"_self\">vec2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_184_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00185_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00185.html\" target=\"_self\">vec3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_185_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00186_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00186.html\" target=\"_self\">vec4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_186_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00187_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00187.html\" target=\"_self\">vec_swizzle.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> </td></tr>\n<tr id=\"row_187_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00188_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00188.html\" target=\"_self\">vector_angle.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> </td></tr>\n<tr id=\"row_188_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00189_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00189.html\" target=\"_self\">vector_bool1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> </td></tr>\n<tr id=\"row_189_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00190_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00190.html\" target=\"_self\">vector_bool1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> </td></tr>\n<tr id=\"row_190_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00191_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00191.html\" target=\"_self\">vector_bool2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_191_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00192_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00192.html\" target=\"_self\">vector_bool2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_192_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00193_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00193.html\" target=\"_self\">vector_bool3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_193_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00194_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00194.html\" target=\"_self\">vector_bool3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_194_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00195_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00195.html\" target=\"_self\">vector_bool4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_195_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00196_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00196.html\" target=\"_self\">vector_bool4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_196_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00197_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00197.html\" target=\"_self\">vector_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> </td></tr>\n<tr id=\"row_197_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00198_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00198.html\" target=\"_self\">vector_double1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> </td></tr>\n<tr id=\"row_198_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00199_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00199.html\" target=\"_self\">vector_double1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> </td></tr>\n<tr id=\"row_199_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00200_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00200.html\" target=\"_self\">vector_double2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_200_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00201_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00201.html\" target=\"_self\">vector_double2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_201_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00202_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00202.html\" target=\"_self\">vector_double3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_202_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00203_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00203.html\" target=\"_self\">vector_double3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_203_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00204_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00204.html\" target=\"_self\">vector_double4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_204_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00205_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00205.html\" target=\"_self\">vector_double4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_205_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00206_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00206.html\" target=\"_self\">vector_float1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> </td></tr>\n<tr id=\"row_206_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00207_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00207.html\" target=\"_self\">vector_float1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> </td></tr>\n<tr id=\"row_207_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00208_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00208.html\" target=\"_self\">vector_float2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_208_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00209_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00209.html\" target=\"_self\">vector_float2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_209_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00210_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00210.html\" target=\"_self\">vector_float3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_210_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00211_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00211.html\" target=\"_self\">vector_float3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_211_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00212_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00212.html\" target=\"_self\">vector_float4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_212_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00213_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00213.html\" target=\"_self\">vector_float4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_213_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00214_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00214.html\" target=\"_self\">vector_int1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> </td></tr>\n<tr id=\"row_214_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00215_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00215.html\" target=\"_self\">vector_int1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> </td></tr>\n<tr id=\"row_215_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00216_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00216.html\" target=\"_self\">vector_int2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_216_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00217_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00217.html\" target=\"_self\">vector_int2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_217_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00218_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00218.html\" target=\"_self\">vector_int3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_218_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00219_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00219.html\" target=\"_self\">vector_int3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_219_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00220_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00220.html\" target=\"_self\">vector_int4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_220_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00221_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00221.html\" target=\"_self\">vector_int4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_221_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00222_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00222.html\" target=\"_self\">vector_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> </td></tr>\n<tr id=\"row_222_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00223_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00223.html\" target=\"_self\">vector_query.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> </td></tr>\n<tr id=\"row_223_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00224_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00224.html\" target=\"_self\">ext/vector_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> </td></tr>\n<tr id=\"row_224_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00225_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00225.html\" target=\"_self\">vector_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_225_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00226_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00226.html\" target=\"_self\">vector_uint1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> </td></tr>\n<tr id=\"row_226_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00227_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00227.html\" target=\"_self\">vector_uint1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> </td></tr>\n<tr id=\"row_227_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00228_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00228.html\" target=\"_self\">vector_uint2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_228_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00229_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00229.html\" target=\"_self\">vector_uint2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_229_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00230_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00230.html\" target=\"_self\">vector_uint3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_230_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00231_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00231.html\" target=\"_self\">vector_uint3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_231_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00232_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00232.html\" target=\"_self\">vector_uint4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_232_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00233_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00233.html\" target=\"_self\">vector_uint4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_233_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00234_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00234.html\" target=\"_self\">vector_ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> </td></tr>\n<tr id=\"row_234_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00235_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00235.html\" target=\"_self\">wrap.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: OpenGL Mathematics (GLM)</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">OpenGL Mathematics (GLM) </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><ul>\n<li>Website: <a href=\"https://glm.g-truc.net\">glm.g-truc.net</a></li>\n<li><a href=\"modules.html\">GLM API documentation</a></li>\n<li><a href=\"https://github.com/g-truc/glm/blob/master/manual.md\">GLM Manual</a> </li>\n</ul>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b})}})(window);/*!\n * jQuery UI 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI\n */\n(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e===\"number\"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css(\"zIndex\",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){g=parseInt(f.css(\"zIndex\"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}});a.each([\"Width\",\"Height\"],function(g,e){var f=e===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,\"padding\"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,\"border\"+this+\"Width\",true))||0}if(n){l-=parseFloat(a.curCSS(m,\"margin\"+this,true))||0}});return l}a.fn[\"inner\"+e]=function(i){if(i===d){return k[\"inner\"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+\"px\")})};a.fn[\"outer\"+e]=function(i,l){if(typeof i!==\"number\"){return k[\"outer\"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+\"px\")})}});function c(g,e){var j=g.nodeName.toLowerCase();if(\"area\"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!==\"map\"){return false}f=a(\"img[usemap=#\"+h+\"]\")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:\"a\"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[\":\"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,\"tabindex\")))},tabbable:function(g){var e=a.attr(g,\"tabindex\"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement(\"div\"));f.offsetHeight;a.extend(f.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart=\"onselectstart\" in f;e.removeChild(f).style.display=\"none\"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css(\"overflow\")===\"hidden\"){return false}var e=(f&&f===\"left\")?\"scrollLeft\":\"scrollTop\",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!\n * jQuery UI Widget 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Widget\n */\n(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler(\"remove\")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b(\"*\",this).add([this]).each(function(){try{b(this).triggerHandler(\"remove\")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(\".\")[0],j;f=f.split(\".\")[1];j=g+\"-\"+f;if(!e){e=h;h=b.Widget}b.expr[\":\"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i===\"string\",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)===\"_\"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind(\"remove.\"+this.widgetName,function(){e.destroy()});this._create();this._trigger(\"create\");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind(\".\"+this.widgetName).removeData(this.widgetName);this.widget().unbind(\".\"+this.widgetName).removeAttr(\"aria-disabled\").removeClass(this.widgetBaseClass+\"-disabled ui-state-disabled\")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f===\"string\"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e===\"disabled\"){this.widget()[f?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled ui-state-disabled\").attr(\"aria-disabled\",f)}return this},enable:function(){return this._setOption(\"disabled\",false)},disable:function(){return this._setOption(\"disabled\",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!\n * jQuery UI Mouse 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Mouse\n *\n * Depends:\n *\tjquery.ui.widget.js\n */\n(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return d._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+\".preventClickEvent\")){b.removeData(e.target,d.widgetName+\".preventClickEvent\");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel==\"string\"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+\".preventClickEvent\")){b.removeData(f.target,this.widgetName+\".preventClickEvent\")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+\".preventClickEvent\",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget(\"ui.resizable\",c.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=k.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var l=this.handles.split(\",\");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e=\"ui-resizable-\"+j;var h=c('<div class=\"ui-resizable-handle '+e+'\"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if(\"se\"==j){h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[j]=\".ui-resizable-\"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=[\"padding\",/ne|nw|n/.test(n)?\"Top\":/se|sw|s/.test(n)?\"Bottom\":/^e$/.test(n)?\"Right\":\"Left\"].join(\"\");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:\"se\"}});if(k.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){if(k.disabled){return}c(this).removeClass(\"ui-resizable-autohide\");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass(\"ui-resizable-autohide\");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css(\"position\"),width:f.outerWidth(),height:f.outerHeight(),top:f.css(\"top\"),left:f.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(\".ui-draggable\")||(/absolute/).test(e.css(\"position\"))){e.css({position:\"absolute\",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css(\"left\")),h=b(this.helper.css(\"top\"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio==\"number\")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i);e.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate(\"resize\",e);h.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger(\"resize\",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],\"left\")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css(\"left\"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css(\"top\"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e==\"sw\"){h.left=j.left+(f.width-h.width);h.top=null}if(e==\"nw\"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css(\"borderTopWidth\"),h.css(\"borderRightWidth\"),h.css(\"borderBottomWidth\"),h.css(\"borderLeftWidth\")],j=[h.css(\"paddingTop\"),h.css(\"paddingRight\"),h.css(\"paddingBottom\"),h.css(\"paddingLeft\")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(\":hidden\")||c(g).parents(\":hidden\").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:\"absolute\",left:this.elementOffset.left-g+\"px\",top:this.elementOffset.top-g+\"px\",zIndex:++i.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!=\"resize\"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:\"1.8.18\"});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(f,g){var e=c(this).data(\"resizable\"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data(\"resizable-alsoresize\",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css(\"left\"),10),top:parseInt(k.css(\"top\"),10)})})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data(\"resizable\"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data(\"resizable-alsoresize\"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)==\"object\"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData(\"resizable-alsoresize\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(i,n){var p=c(this).data(\"resizable\"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],\"left\")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css(\"width\"),10),height:parseInt(p.element.css(\"height\"),10),top:parseInt(p.element.css(\"top\"),10),left:parseInt(p.element.css(\"left\"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate(\"resize\",i)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(f,r){var t=c(this).data(\"resizable\"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){i[p]=b(n.css(\"padding\"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,\"left\")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data(\"resizable\"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css(\"position\"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css(\"position\"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data(\"resizable\"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(g,h){var e=c(this).data(\"resizable\"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof i.ghost==\"string\"?i.ghost:\"\");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost){e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(e,m){var p=c(this).data(\"resizable\"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid==\"number\"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!\n * jQuery hashchange event - v1.3 - 7/21/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,e,b){var c=\"hashchange\",h=document,f,g=$.event.special,i=h.documentMode,d=\"on\"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return\"#\"+j.replace(/^[^#]*#?(.*)$/,\"$1\")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,\"\")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one(\"load\",function(){r||l(a());n()}).attr(\"src\",r||\"javascript:0\").insertAfter(\"body\")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName===\"title\"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain=\"'+t+'\"<\\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:\"xy\",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),[\"iframe\",\"#document\",\"html\",\"body\"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode==\"BackCompat\"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e==\"object\"){d=e;e=0}if(typeof d==\"function\"){d={onAfter:d}}if(f==\"max\"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is(\"html,body\");switch(typeof k){case\"number\":case\"string\":if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case\"object\":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(\"\"),function(q,r){var s=r==\"x\"?\"Left\":\"Top\",u=s.toLowerCase(),p=\"scroll\"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css(\"margin\"+s))||0;g[p]-=parseInt(k.css(\"border\"+s+\"Width\"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r==\"x\"?\"width\":\"height\"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)==\"%\"?parseFloat(t)/100*n:t}if(/^\\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i==\"x\"?\"Width\":\"Height\",e=\"scroll\"+h;if(!c(j).is(\"html,body\")){return j[e]-c(j)[h.toLowerCase()]()}var g=\"client\"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d==\"object\"?d:{top:d,left:d}}})(jQuery);/*!\n PowerTip - v1.2.0 - 2013-04-03\n http://stevenbenner.github.com/jquery-powertip/\n Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).\n Released under MIT license.\n https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt\n*/\n(function(a){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k(\"body\");var n=\"displayController\",e=\"hasActiveHover\",d=\"forcedOpen\",u=\"hasMouseMove\",f=\"mouseOnToPopup\",g=\"originalTitle\",y=\"powertip\",o=\"powertipjq\",l=\"powertiptarget\",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)===\"string\"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr(\"title\");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr(\"title\")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({\"mouseenter.powertip\":function J(P){k.powerTip.show(this,P)},\"mouseleave.powertip\":function L(){k.powerTip.hide(this)},\"focus.powertip\":function K(){k.powerTip.show(this)},\"blur.powertip\":function H(){k.powerTip.hide(this,true)},\"keydown.powertip\":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:\"powerTip\",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:\"n\",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:[\"n\",\"ne\",\"nw\",\"s\"],e:[\"e\",\"ne\",\"se\",\"w\",\"nw\",\"sw\",\"n\",\"s\",\"e\"],s:[\"s\",\"se\",\"sw\",\"n\"],w:[\"w\",\"nw\",\"sw\",\"e\",\"ne\",\"se\",\"n\",\"s\",\"w\"],nw:[\"nw\",\"w\",\"sw\",\"n\",\"s\",\"se\",\"nw\"],ne:[\"ne\",\"e\",\"se\",\"n\",\"s\",\"sw\",\"ne\"],sw:[\"sw\",\"w\",\"nw\",\"s\",\"n\",\"ne\",\"sw\"],se:[\"se\",\"e\",\"ne\",\"s\",\"n\",\"nw\",\"se\"],\"nw-alt\":[\"nw-alt\",\"n\",\"ne-alt\",\"sw-alt\",\"s\",\"se-alt\",\"w\",\"e\"],\"ne-alt\":[\"ne-alt\",\"n\",\"nw-alt\",\"se-alt\",\"s\",\"sw-alt\",\"e\",\"w\"],\"sw-alt\":[\"sw-alt\",\"s\",\"se-alt\",\"nw-alt\",\"n\",\"ne-alt\",\"w\",\"e\"],\"se-alt\":[\"se-alt\",\"s\",\"sw-alt\",\"ne-alt\",\"n\",\"nw-alt\",\"e\",\"w\"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(\".powertip\").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr(\"title\",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top=\"auto\";F.left=\"auto\";F.right=\"auto\";F.bottom=\"auto\";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split(\"-\")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case\"n\":N.set(\"left\",I.left-(J/2));N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"e\":N.set(\"left\",I.left+P);N.set(\"top\",I.top-(O/2));break;case\"s\":N.set(\"left\",I.left-(J/2));N.set(\"top\",I.top+P);break;case\"w\":N.set(\"top\",I.top-(O/2));N.set(\"right\",c.windowWidth-I.left+P);break;case\"nw\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"nw-alt\":N.set(\"left\",I.left);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne\":N.set(\"left\",I.left-20);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne-alt\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left);break;case\"sw\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"sw-alt\":N.set(\"left\",I.left);N.set(\"top\",I.top+P);break;case\"se\":N.set(\"left\",I.left-20);N.set(\"top\",I.top+P);break;case\"se-alt\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case\"n\":M=O.left+N/2;L=O.top;break;case\"e\":M=O.left+N;L=O.top+I/2;break;case\"s\":M=O.left+N/2;L=O.top+I;break;case\"w\":M=O.left;L=O.top+I/2;break;case\"nw\":M=O.left;L=O.top;break;case\"ne\":M=O.left+N;L=O.top;break;case\"sw\":M=O.left;L=O.top+I;break;case\"se\":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest(\"svg\")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=[\"nw\",\"n\",\"ne\",\"e\",\"se\",\"s\",\"sw\",\"w\"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k(\"#\"+Q.popupId);if(O.length===0){O=k(\"<div/>\",{id:Q.popupId});if(w.length===0){w=k(\"body\")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on(\"mousemove\",M);s.on(\"scroll\",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger(\"powerTipPreRender\");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger(\"powerTipRender\");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger(\"powerTipOpen\")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set(\"top\",c.currentY+Q.offset);T.set(\"left\",c.currentX+Q.offset);O.css(T);R.trigger(\"powerTipClose\")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set(\"top\",c.currentY+Q.offset);U.set(\"left\",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set(\"left\",c.windowWidth-R)}else{if(S===p.bottom){U.set(\"top\",c.scrollTop+c.windowHeight-V)}}}else{U.set(\"left\",c.currentX-R-Q.offset);U.set(\"top\",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set(\"top\",0);V.set(\"left\",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(\":disabled\")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(\":focus\")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on(\"mousemove\",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k(\"#\"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/modules.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Modules</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Modules</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all modules:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\">&#9658;</span><a class=\"el\" href=\"a00280.html\" target=\"_self\">Core features</a></td><td class=\"desc\">Features that implement in C++ the GLSL specification as closely as possible </td></tr>\n<tr id=\"row_0_0_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00241.html\" target=\"_self\">Common functions</a></td><td class=\"desc\">Provides GLSL common functions </td></tr>\n<tr id=\"row_0_1_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00242.html\" target=\"_self\">Exponential functions</a></td><td class=\"desc\">Provides GLSL exponential functions </td></tr>\n<tr id=\"row_0_2_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00279.html\" target=\"_self\">Geometric functions</a></td><td class=\"desc\">These operate on vectors as vectors, not component-wise </td></tr>\n<tr id=\"row_0_3_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00281.html\" target=\"_self\">Vector types</a></td><td class=\"desc\">Vector types of two to four components with an exhaustive set of operators </td></tr>\n<tr id=\"row_0_4_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00282.html\" target=\"_self\">Vector types with precision qualifiers</a></td><td class=\"desc\">Vector types with precision qualifiers which may result in various precision in term of ULPs </td></tr>\n<tr id=\"row_0_5_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00283.html\" target=\"_self\">Matrix types</a></td><td class=\"desc\">Matrix types of with C columns and R rows where C and R are values between 2 to 4 included </td></tr>\n<tr id=\"row_0_6_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00284.html\" target=\"_self\">Matrix types with precision qualifiers</a></td><td class=\"desc\">Matrix types with precision qualifiers which may result in various precision in term of ULPs </td></tr>\n<tr id=\"row_0_7_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00370.html\" target=\"_self\">Integer functions</a></td><td class=\"desc\">Provides GLSL functions on integer types </td></tr>\n<tr id=\"row_0_8_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00371.html\" target=\"_self\">Matrix functions</a></td><td class=\"desc\">Provides GLSL matrix functions </td></tr>\n<tr id=\"row_0_9_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00372.html\" target=\"_self\">Floating-Point Pack and Unpack Functions</a></td><td class=\"desc\">Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types </td></tr>\n<tr id=\"row_0_10_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00373.html\" target=\"_self\">Angle and Trigonometry Functions</a></td><td class=\"desc\">Function parameters specified as angle are assumed to be in units of radians </td></tr>\n<tr id=\"row_0_11_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00374.html\" target=\"_self\">Vector Relational Functions</a></td><td class=\"desc\">Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_1_\" class=\"arrow\" onclick=\"toggleFolder('1_')\">&#9658;</span><a class=\"el\" href=\"a00285.html\" target=\"_self\">Stable extensions</a></td><td class=\"desc\">Additional features not specified by GLSL specification </td></tr>\n<tr id=\"row_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00243.html\" target=\"_self\">GLM_EXT_matrix_clip_space</a></td><td class=\"desc\">Defines functions that generate clip space transformation matrices </td></tr>\n<tr id=\"row_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00244.html\" target=\"_self\">GLM_EXT_matrix_common</a></td><td class=\"desc\">Defines functions for common matrix operations </td></tr>\n<tr id=\"row_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00245.html\" target=\"_self\">GLM_EXT_matrix_projection</a></td><td class=\"desc\">Functions that generate common projection transformation matrices </td></tr>\n<tr id=\"row_1_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00246.html\" target=\"_self\">GLM_EXT_matrix_relational</a></td><td class=\"desc\">Exposes comparison functions for matrix types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00247.html\" target=\"_self\">GLM_EXT_matrix_transform</a></td><td class=\"desc\">Defines functions that generate common transformation matrices </td></tr>\n<tr id=\"row_1_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00248.html\" target=\"_self\">GLM_EXT_quaternion_common</a></td><td class=\"desc\">Provides common functions for quaternion types </td></tr>\n<tr id=\"row_1_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00249.html\" target=\"_self\">GLM_EXT_quaternion_double</a></td><td class=\"desc\">Exposes double-precision floating point quaternion type </td></tr>\n<tr id=\"row_1_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00250.html\" target=\"_self\">GLM_EXT_quaternion_double_precision</a></td><td class=\"desc\">Exposes double-precision floating point quaternion type with various precision in term of ULPs </td></tr>\n<tr id=\"row_1_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00251.html\" target=\"_self\">GLM_EXT_quaternion_exponential</a></td><td class=\"desc\">Provides exponential functions for quaternion types </td></tr>\n<tr id=\"row_1_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00252.html\" target=\"_self\">GLM_EXT_quaternion_float</a></td><td class=\"desc\">Exposes single-precision floating point quaternion type </td></tr>\n<tr id=\"row_1_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00253.html\" target=\"_self\">GLM_EXT_quaternion_float_precision</a></td><td class=\"desc\">Exposes single-precision floating point quaternion type with various precision in term of ULPs </td></tr>\n<tr id=\"row_1_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00254.html\" target=\"_self\">GLM_EXT_quaternion_geometric</a></td><td class=\"desc\">Provides geometric functions for quaternion types </td></tr>\n<tr id=\"row_1_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00255.html\" target=\"_self\">GLM_EXT_quaternion_relational</a></td><td class=\"desc\">Exposes comparison functions for quaternion types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00256.html\" target=\"_self\">GLM_EXT_quaternion_transform</a></td><td class=\"desc\">Provides transformation functions for quaternion types </td></tr>\n<tr id=\"row_1_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00257.html\" target=\"_self\">GLM_EXT_quaternion_trigonometric</a></td><td class=\"desc\">Provides trigonometric functions for quaternion types </td></tr>\n<tr id=\"row_1_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00258.html\" target=\"_self\">GLM_EXT_scalar_common</a></td><td class=\"desc\">Exposes min and max functions for 3 to 4 scalar parameters </td></tr>\n<tr id=\"row_1_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00259.html\" target=\"_self\">GLM_EXT_scalar_constants</a></td><td class=\"desc\">Provides a list of constants and precomputed useful values </td></tr>\n<tr id=\"row_1_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00260.html\" target=\"_self\">GLM_EXT_scalar_int_sized</a></td><td class=\"desc\">Exposes sized signed integer scalar types </td></tr>\n<tr id=\"row_1_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00261.html\" target=\"_self\">GLM_EXT_scalar_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_1_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00262.html\" target=\"_self\">GLM_EXT_scalar_relational</a></td><td class=\"desc\">Exposes comparison functions for scalar types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00263.html\" target=\"_self\">GLM_EXT_scalar_uint_sized</a></td><td class=\"desc\">Exposes sized unsigned integer scalar types </td></tr>\n<tr id=\"row_1_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00264.html\" target=\"_self\">GLM_EXT_scalar_ulp</a></td><td class=\"desc\">Allow the measurement of the accuracy of a function against a reference implementation </td></tr>\n<tr id=\"row_1_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00265.html\" target=\"_self\">GLM_EXT_vector_bool1</a></td><td class=\"desc\">Exposes bvec1 vector type </td></tr>\n<tr id=\"row_1_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00266.html\" target=\"_self\">GLM_EXT_vector_bool1_precision</a></td><td class=\"desc\">Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types </td></tr>\n<tr id=\"row_1_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00267.html\" target=\"_self\">GLM_EXT_vector_common</a></td><td class=\"desc\">Exposes min and max functions for 3 to 4 vector parameters </td></tr>\n<tr id=\"row_1_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00268.html\" target=\"_self\">GLM_EXT_vector_double1</a></td><td class=\"desc\">Exposes double-precision floating point vector type with one component </td></tr>\n<tr id=\"row_1_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00269.html\" target=\"_self\">GLM_EXT_vector_double1_precision</a></td><td class=\"desc\">Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types </td></tr>\n<tr id=\"row_1_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00270.html\" target=\"_self\">GLM_EXT_vector_float1</a></td><td class=\"desc\">Exposes single-precision floating point vector type with one component </td></tr>\n<tr id=\"row_1_28_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00271.html\" target=\"_self\">GLM_EXT_vector_float1_precision</a></td><td class=\"desc\">Exposes highp_vec1, mediump_vec1 and lowp_vec1 types </td></tr>\n<tr id=\"row_1_29_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00272.html\" target=\"_self\">GLM_EXT_vector_int1</a></td><td class=\"desc\">Exposes ivec1 vector type </td></tr>\n<tr id=\"row_1_30_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00273.html\" target=\"_self\">GLM_EXT_vector_int1_precision</a></td><td class=\"desc\">Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types </td></tr>\n<tr id=\"row_1_31_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00274.html\" target=\"_self\">GLM_EXT_vector_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_1_32_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00275.html\" target=\"_self\">GLM_EXT_vector_relational</a></td><td class=\"desc\">Exposes comparison functions for vector types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_33_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00276.html\" target=\"_self\">GLM_EXT_vector_uint1</a></td><td class=\"desc\">Exposes uvec1 vector type </td></tr>\n<tr id=\"row_1_34_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00277.html\" target=\"_self\">GLM_EXT_vector_uint1_precision</a></td><td class=\"desc\">Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types </td></tr>\n<tr id=\"row_1_35_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00278.html\" target=\"_self\">GLM_EXT_vector_ulp</a></td><td class=\"desc\">Allow the measurement of the accuracy of a function against a reference implementation </td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_2_\" class=\"arrow\" onclick=\"toggleFolder('2_')\">&#9658;</span><a class=\"el\" href=\"a00286.html\" target=\"_self\">Recommended extensions</a></td><td class=\"desc\">Additional features not specified by GLSL specification </td></tr>\n<tr id=\"row_2_0_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00288.html\" target=\"_self\">GLM_GTC_bitfield</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_1_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00289.html\" target=\"_self\">GLM_GTC_color_space</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_2_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00290.html\" target=\"_self\">GLM_GTC_constants</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_3_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00291.html\" target=\"_self\">GLM_GTC_epsilon</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_4_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00292.html\" target=\"_self\">GLM_GTC_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_5_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00293.html\" target=\"_self\">GLM_GTC_matrix_access</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_6_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00294.html\" target=\"_self\">GLM_GTC_matrix_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_7_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00295.html\" target=\"_self\">GLM_GTC_matrix_inverse</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_8_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00296.html\" target=\"_self\">GLM_GTC_matrix_transform</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_9_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00297.html\" target=\"_self\">GLM_GTC_noise</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_10_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00298.html\" target=\"_self\">GLM_GTC_packing</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_11_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00299.html\" target=\"_self\">GLM_GTC_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_12_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00300.html\" target=\"_self\">GLM_GTC_random</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_13_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00301.html\" target=\"_self\">GLM_GTC_reciprocal</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_14_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00302.html\" target=\"_self\">GLM_GTC_round</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_15_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00303.html\" target=\"_self\">GLM_GTC_type_aligned</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_16_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00304.html\" target=\"_self\">GLM_GTC_type_precision</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_17_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00305.html\" target=\"_self\">GLM_GTC_type_ptr</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_18_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00306.html\" target=\"_self\">GLM_GTC_ulp</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_19_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00307.html\" target=\"_self\">GLM_GTC_vec1</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_3_\" class=\"arrow\" onclick=\"toggleFolder('3_')\">&#9658;</span><a class=\"el\" href=\"a00287.html\" target=\"_self\">Experimental extensions</a></td><td class=\"desc\">Experimental features not specified by GLSL specification </td></tr>\n<tr id=\"row_3_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00308.html\" target=\"_self\">GLM_GTX_associated_min_max</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00309.html\" target=\"_self\">GLM_GTX_bit</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00310.html\" target=\"_self\">GLM_GTX_closest_point</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00311.html\" target=\"_self\">GLM_GTX_color_encoding</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00312.html\" target=\"_self\">GLM_GTX_color_space</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00313.html\" target=\"_self\">GLM_GTX_color_space_YCoCg</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00314.html\" target=\"_self\">GLM_GTX_common</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00315.html\" target=\"_self\">GLM_GTX_compatibility</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00316.html\" target=\"_self\">GLM_GTX_component_wise</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00317.html\" target=\"_self\">GLM_GTX_dual_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00318.html\" target=\"_self\">GLM_GTX_easing</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00319.html\" target=\"_self\">GLM_GTX_euler_angles</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00320.html\" target=\"_self\">GLM_GTX_extend</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00321.html\" target=\"_self\">GLM_GTX_extented_min_max</a></td><td class=\"desc\">Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00322.html\" target=\"_self\">GLM_GTX_exterior_product</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00323.html\" target=\"_self\">GLM_GTX_fast_exponential</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00324.html\" target=\"_self\">GLM_GTX_fast_square_root</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00325.html\" target=\"_self\">GLM_GTX_fast_trigonometry</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00326.html\" target=\"_self\">GLM_GTX_functions</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00327.html\" target=\"_self\">GLM_GTX_gradient_paint</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00328.html\" target=\"_self\">GLM_GTX_handed_coordinate_space</a></td><td class=\"desc\">Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00329.html\" target=\"_self\">GLM_GTX_hash</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00330.html\" target=\"_self\">GLM_GTX_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00331.html\" target=\"_self\">GLM_GTX_intersect</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00332.html\" target=\"_self\">GLM_GTX_io</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00333.html\" target=\"_self\">GLM_GTX_log_base</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00334.html\" target=\"_self\">GLM_GTX_matrix_cross_product</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00335.html\" target=\"_self\">GLM_GTX_matrix_decompose</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_28_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00336.html\" target=\"_self\">GLM_GTX_matrix_factorisation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_29_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00337.html\" target=\"_self\">GLM_GTX_matrix_interpolation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_30_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00338.html\" target=\"_self\">GLM_GTX_matrix_major_storage</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_31_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00339.html\" target=\"_self\">GLM_GTX_matrix_operation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_32_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00340.html\" target=\"_self\">GLM_GTX_matrix_query</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_33_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00341.html\" target=\"_self\">GLM_GTX_matrix_transform_2d</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_34_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00342.html\" target=\"_self\">GLM_GTX_mixed_producte</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_35_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00343.html\" target=\"_self\">GLM_GTX_norm</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_36_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00344.html\" target=\"_self\">GLM_GTX_normal</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_37_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00345.html\" target=\"_self\">GLM_GTX_normalize_dot</a></td><td class=\"desc\">Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_38_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00346.html\" target=\"_self\">GLM_GTX_number_precision</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_39_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00347.html\" target=\"_self\">GLM_GTX_optimum_pow</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_40_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00348.html\" target=\"_self\">GLM_GTX_orthonormalize</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_41_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00349.html\" target=\"_self\">GLM_GTX_perpendicular</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_42_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00350.html\" target=\"_self\">GLM_GTX_polar_coordinates</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_43_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00351.html\" target=\"_self\">GLM_GTX_projection</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_44_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00352.html\" target=\"_self\">GLM_GTX_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_45_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00353.html\" target=\"_self\">GLM_GTX_range</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_46_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00354.html\" target=\"_self\">GLM_GTX_raw_data</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_47_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00355.html\" target=\"_self\">GLM_GTX_rotate_normalized_axis</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_48_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00356.html\" target=\"_self\">GLM_GTX_rotate_vector</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_49_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00357.html\" target=\"_self\">GLM_GTX_scalar_relational</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_50_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00358.html\" target=\"_self\">GLM_GTX_spline</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_51_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00359.html\" target=\"_self\">GLM_GTX_std_based_type</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_52_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00360.html\" target=\"_self\">GLM_GTX_string_cast</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_53_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00361.html\" target=\"_self\">GLM_GTX_texture</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_54_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00362.html\" target=\"_self\">GLM_GTX_transform</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_55_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00363.html\" target=\"_self\">GLM_GTX_transform2</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_56_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00364.html\" target=\"_self\">GLM_GTX_type_aligned</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_57_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00365.html\" target=\"_self\">GLM_GTX_type_trait</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_58_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00366.html\" target=\"_self\">GLM_GTX_vec_swizzle</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_59_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00367.html\" target=\"_self\">GLM_GTX_vector_angle</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_60_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00368.html\" target=\"_self\">GLM_GTX_vector_query</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_61_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00369.html\" target=\"_self\">GLM_GTX_wrap</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_0.js",
    "content": "var searchData=\n[\n  ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]],\n  ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]],\n  ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]],\n  ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]],\n  ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]],\n  ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]],\n  ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat&lt; 2, 2, T, Q &gt; const &amp;m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]],\n  ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]],\n  ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]],\n  ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]],\n  ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]],\n  ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]],\n  ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]],\n  ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]],\n  ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]],\n  ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]],\n  ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]],\n  ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]],\n  ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]],\n  ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]],\n  ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]],\n  ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]],\n  ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]],\n  ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]],\n  ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]],\n  ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]],\n  ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]],\n  ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]],\n  ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]],\n  ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]],\n  ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]],\n  ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]],\n  ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]],\n  ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]],\n  ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]],\n  ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]],\n  ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]],\n  ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]],\n  ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]],\n  ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]],\n  ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]],\n  ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]],\n  ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]],\n  ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]],\n  ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]],\n  ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]],\n  ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]],\n  ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]],\n  ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]],\n  ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]],\n  ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]],\n  ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]],\n  ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]],\n  ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]],\n  ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]],\n  ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]],\n  ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]],\n  ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]],\n  ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]],\n  ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]],\n  ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]],\n  ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]],\n  ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]],\n  ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]],\n  ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]],\n  ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]],\n  ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]],\n  ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]],\n  ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]],\n  ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]],\n  ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]],\n  ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]],\n  ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]],\n  ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]],\n  ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]],\n  ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]],\n  ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]],\n  ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]],\n  ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]],\n  ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]],\n  ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]],\n  ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]],\n  ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]],\n  ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]],\n  ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]],\n  ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]],\n  ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]],\n  ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]],\n  ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]],\n  ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]],\n  ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]],\n  ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]],\n  ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]],\n  ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]],\n  ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]],\n  ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]],\n  ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]],\n  ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]],\n  ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]],\n  ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]],\n  ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]],\n  ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]],\n  ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]],\n  ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]],\n  ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]],\n  ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]],\n  ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]],\n  ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]],\n  ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]],\n  ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]],\n  ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]],\n  ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]],\n  ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]],\n  ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]],\n  ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]],\n  ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]],\n  ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]],\n  ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]],\n  ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]],\n  ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]],\n  ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]],\n  ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]],\n  ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]],\n  ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]],\n  ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]],\n  ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]],\n  ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]],\n  ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]],\n  ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]],\n  ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]],\n  ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]],\n  ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]],\n  ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua&lt; T, Q &gt; const &amp;x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]],\n  ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]],\n  ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]],\n  ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]],\n  ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]],\n  ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]],\n  ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]],\n  ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]],\n  ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]],\n  ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]],\n  ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)']]],\n  ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)']]],\n  ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]],\n  ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]],\n  ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]],\n  ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]],\n  ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_1.js",
    "content": "var searchData=\n[\n  ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &amp;a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &amp;a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &amp;a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &amp;a, genType const &amp;o)']]],\n  ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]],\n  ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]],\n  ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]],\n  ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]],\n  ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]],\n  ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]],\n  ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &amp;v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &amp;v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &amp;v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]],\n  ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]],\n  ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]],\n  ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]],\n  ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]],\n  ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]],\n  ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]],\n  ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]],\n  ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]],\n  ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]],\n  ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]],\n  ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]],\n  ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]],\n  ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]],\n  ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]],\n  ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]],\n  ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]],\n  ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]],\n  ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]],\n  ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]],\n  ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]],\n  ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]],\n  ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]],\n  ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_10.js",
    "content": "var searchData=\n[\n  ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]],\n  ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec&lt; 3, T, Q &gt; const &amp;color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)']]],\n  ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]],\n  ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]],\n  ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]],\n  ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]],\n  ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]],\n  ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]],\n  ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]],\n  ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)']]],\n  ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]],\n  ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]],\n  ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]],\n  ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]],\n  ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]],\n  ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]],\n  ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]],\n  ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]],\n  ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]],\n  ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]],\n  ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)']]],\n  ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]],\n  ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]],\n  ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]],\n  ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]],\n  ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]],\n  ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]],\n  ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]],\n  ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]],\n  ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]],\n  ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]],\n  ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]],\n  ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]],\n  ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]],\n  ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]],\n  ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]],\n  ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]],\n  ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]],\n  ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]],\n  ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua&lt; T, Q &gt; const &amp;q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]],\n  ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]],\n  ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]],\n  ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_11.js",
    "content": "var searchData=\n[\n  ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]],\n  ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]],\n  ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]],\n  ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]],\n  ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]],\n  ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]],\n  ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]],\n  ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]],\n  ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]],\n  ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]],\n  ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]],\n  ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]],\n  ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]],\n  ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]],\n  ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]],\n  ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]],\n  ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]],\n  ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]],\n  ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]],\n  ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]],\n  ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]],\n  ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]],\n  ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]],\n  ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]],\n  ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]],\n  ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]],\n  ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]],\n  ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]],\n  ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]],\n  ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]],\n  ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]],\n  ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]],\n  ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]],\n  ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]],\n  ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]],\n  ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_12.js",
    "content": "var searchData=\n[\n  ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]],\n  ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]],\n  ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]],\n  ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]],\n  ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]],\n  ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]],\n  ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]],\n  ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]],\n  ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]],\n  ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]],\n  ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]],\n  ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]],\n  ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]],\n  ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]],\n  ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]],\n  ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]],\n  ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]],\n  ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]],\n  ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]],\n  ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]],\n  ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]],\n  ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]],\n  ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]],\n  ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]],\n  ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]],\n  ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]],\n  ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]],\n  ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]],\n  ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]],\n  ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &amp;v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)']]],\n  ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]],\n  ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]],\n  ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]],\n  ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]],\n  ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]],\n  ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]],\n  ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]],\n  ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]],\n  ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]],\n  ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]],\n  ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]],\n  ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]],\n  ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]],\n  ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]],\n  ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]],\n  ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]],\n  ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]],\n  ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]],\n  ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]],\n  ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]],\n  ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]],\n  ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]],\n  ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]],\n  ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]],\n  ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]],\n  ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]],\n  ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]],\n  ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]],\n  ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]],\n  ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]],\n  ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]],\n  ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]],\n  ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]],\n  ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]],\n  ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]],\n  ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]],\n  ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]],\n  ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]],\n  ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]],\n  ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]],\n  ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]],\n  ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]],\n  ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]],\n  ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]],\n  ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]],\n  ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]],\n  ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]],\n  ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]],\n  ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]],\n  ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]],\n  ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]],\n  ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]],\n  ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]],\n  ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]],\n  ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]],\n  ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]],\n  ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]],\n  ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]],\n  ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]],\n  ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]],\n  ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]],\n  ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]],\n  ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]],\n  ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_13.js",
    "content": "var searchData=\n[\n  ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]],\n  ['vector_20types',['Vector types',['../a00281.html',1,'']]],\n  ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]],\n  ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]],\n  ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]],\n  ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]],\n  ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]],\n  ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]],\n  ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]],\n  ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]],\n  ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]],\n  ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]],\n  ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]],\n  ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]],\n  ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]],\n  ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]],\n  ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]],\n  ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]],\n  ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]],\n  ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]],\n  ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]],\n  ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]],\n  ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]],\n  ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]],\n  ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]],\n  ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]],\n  ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]],\n  ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]],\n  ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]],\n  ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]],\n  ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]],\n  ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]],\n  ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]],\n  ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]],\n  ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]],\n  ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]],\n  ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]],\n  ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]],\n  ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]],\n  ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]],\n  ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]],\n  ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]],\n  ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]],\n  ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]],\n  ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]],\n  ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]],\n  ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]],\n  ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]],\n  ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]],\n  ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]],\n  ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]],\n  ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]],\n  ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]],\n  ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]],\n  ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]],\n  ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]],\n  ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]],\n  ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_14.js",
    "content": "var searchData=\n[\n  ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]],\n  ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]],\n  ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_15.js",
    "content": "var searchData=\n[\n  ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]],\n  ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]],\n  ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]],\n  ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_16.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_16.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_16.js",
    "content": "var searchData=\n[\n  ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_2.js",
    "content": "var searchData=\n[\n  ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]],\n  ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]],\n  ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]],\n  ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]],\n  ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]],\n  ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]],\n  ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &amp;Texcoord)']]],\n  ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]],\n  ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]],\n  ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)']]],\n  ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]],\n  ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]],\n  ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &amp;m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)']]],\n  ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]],\n  ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]],\n  ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]],\n  ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]],\n  ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]],\n  ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]],\n  ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]],\n  ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]],\n  ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]],\n  ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]],\n  ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]],\n  ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]],\n  ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]],\n  ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]],\n  ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]],\n  ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)']]],\n  ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)']]],\n  ['core_20features',['Core features',['../a00280.html',1,'']]],\n  ['common_20functions',['Common functions',['../a00241.html',1,'']]],\n  ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]],\n  ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]],\n  ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]],\n  ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]],\n  ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)']]],\n  ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]],\n  ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]],\n  ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]],\n  ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]],\n  ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]],\n  ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_3.js",
    "content": "var searchData=\n[\n  ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]],\n  ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]],\n  ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]],\n  ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]],\n  ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]],\n  ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]],\n  ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]],\n  ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]],\n  ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]],\n  ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]],\n  ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]],\n  ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]],\n  ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]],\n  ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]],\n  ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]],\n  ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]],\n  ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]],\n  ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]],\n  ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]],\n  ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]],\n  ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]],\n  ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]],\n  ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]],\n  ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]],\n  ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]],\n  ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]],\n  ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]],\n  ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]],\n  ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]],\n  ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]],\n  ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]],\n  ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]],\n  ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]],\n  ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]],\n  ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]],\n  ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]],\n  ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]],\n  ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]],\n  ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]],\n  ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]],\n  ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]],\n  ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]],\n  ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]],\n  ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]],\n  ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]],\n  ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]],\n  ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]],\n  ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]],\n  ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]],\n  ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat&lt; 2, 4, T, Q &gt; const &amp;x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)']]],\n  ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]],\n  ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]],\n  ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]],\n  ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]],\n  ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_4.js",
    "content": "var searchData=\n[\n  ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]],\n  ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]],\n  ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]],\n  ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]],\n  ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]],\n  ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]],\n  ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]],\n  ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]],\n  ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]],\n  ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]],\n  ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]],\n  ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]],\n  ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]],\n  ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]],\n  ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]],\n  ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]],\n  ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]],\n  ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]],\n  ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]],\n  ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]],\n  ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]],\n  ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]],\n  ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]],\n  ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]],\n  ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]],\n  ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]],\n  ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]],\n  ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]],\n  ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]],\n  ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]],\n  ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]],\n  ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]],\n  ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]],\n  ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]],\n  ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]],\n  ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]],\n  ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]],\n  ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]],\n  ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]],\n  ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]],\n  ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]],\n  ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]],\n  ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]],\n  ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]],\n  ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]],\n  ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]],\n  ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]],\n  ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]],\n  ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]],\n  ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]],\n  ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]],\n  ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]],\n  ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]],\n  ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]],\n  ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]],\n  ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]],\n  ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]],\n  ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_5.js",
    "content": "var searchData=\n[\n  ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]],\n  ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]],\n  ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]],\n  ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]],\n  ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]],\n  ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]],\n  ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]],\n  ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]],\n  ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]],\n  ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]],\n  ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]],\n  ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]],\n  ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]],\n  ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]],\n  ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]],\n  ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]],\n  ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]],\n  ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]],\n  ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]],\n  ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]],\n  ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]],\n  ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]],\n  ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]],\n  ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]],\n  ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]],\n  ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]],\n  ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]],\n  ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]],\n  ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]],\n  ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]],\n  ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]],\n  ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]],\n  ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]],\n  ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]],\n  ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]],\n  ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]],\n  ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]],\n  ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]],\n  ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]],\n  ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]],\n  ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]],\n  ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]],\n  ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]],\n  ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]],\n  ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]],\n  ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]],\n  ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]],\n  ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]],\n  ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]],\n  ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]],\n  ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]],\n  ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]],\n  ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]],\n  ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]],\n  ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]],\n  ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)']]],\n  ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]],\n  ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)']]],\n  ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]],\n  ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]],\n  ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]],\n  ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]],\n  ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]],\n  ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]],\n  ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]],\n  ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]],\n  ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]],\n  ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]],\n  ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]],\n  ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]],\n  ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]],\n  ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]],\n  ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]],\n  ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]],\n  ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]],\n  ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]],\n  ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]],\n  ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]],\n  ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &amp;v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &amp;v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]],\n  ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]],\n  ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]],\n  ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]],\n  ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]],\n  ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]],\n  ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]],\n  ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]],\n  ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]],\n  ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]],\n  ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]],\n  ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]],\n  ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]],\n  ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]],\n  ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]],\n  ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]],\n  ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]],\n  ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]],\n  ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]],\n  ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]],\n  ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]],\n  ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]],\n  ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]],\n  ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]],\n  ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]],\n  ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]],\n  ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]],\n  ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]],\n  ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]],\n  ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]],\n  ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]],\n  ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]],\n  ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]],\n  ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_6.js",
    "content": "var searchData=\n[\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]],\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]],\n  ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]],\n  ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]],\n  ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]],\n  ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]],\n  ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]],\n  ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]],\n  ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]],\n  ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]],\n  ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]],\n  ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]],\n  ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]],\n  ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]],\n  ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]],\n  ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]],\n  ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]],\n  ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)']]],\n  ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]],\n  ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]],\n  ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]],\n  ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]],\n  ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]],\n  ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]],\n  ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]],\n  ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]],\n  ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]],\n  ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]],\n  ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]],\n  ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]],\n  ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]],\n  ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]],\n  ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]],\n  ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]],\n  ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]],\n  ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]],\n  ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]],\n  ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]],\n  ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]],\n  ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]],\n  ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]],\n  ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]],\n  ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]],\n  ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]],\n  ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]],\n  ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]],\n  ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]],\n  ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]],\n  ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]],\n  ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]],\n  ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]],\n  ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]],\n  ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]],\n  ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]],\n  ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]],\n  ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]],\n  ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]],\n  ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]],\n  ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]],\n  ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]],\n  ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]],\n  ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]],\n  ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]],\n  ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]],\n  ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]],\n  ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]],\n  ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]],\n  ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]],\n  ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]],\n  ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]],\n  ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]],\n  ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]],\n  ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]],\n  ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]],\n  ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]],\n  ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]],\n  ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]],\n  ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]],\n  ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]],\n  ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]],\n  ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]],\n  ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]],\n  ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]],\n  ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_7.js",
    "content": "var searchData=\n[\n  ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]],\n  ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]],\n  ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]],\n  ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]],\n  ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]],\n  ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]],\n  ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]],\n  ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]],\n  ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]],\n  ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]],\n  ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]],\n  ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]],\n  ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]],\n  ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]],\n  ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]],\n  ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]],\n  ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]],\n  ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]],\n  ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]],\n  ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]],\n  ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]],\n  ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]],\n  ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]],\n  ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]],\n  ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]],\n  ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]],\n  ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]],\n  ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]],\n  ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]],\n  ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]],\n  ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]],\n  ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]],\n  ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]],\n  ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]],\n  ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]],\n  ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]],\n  ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]],\n  ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]],\n  ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]],\n  ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]],\n  ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]],\n  ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]],\n  ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]],\n  ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]],\n  ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]],\n  ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]],\n  ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]],\n  ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]],\n  ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]],\n  ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]],\n  ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]],\n  ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]],\n  ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]],\n  ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]],\n  ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]],\n  ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]],\n  ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]],\n  ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]],\n  ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]],\n  ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]],\n  ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]],\n  ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]],\n  ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]],\n  ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]],\n  ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]],\n  ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]],\n  ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]],\n  ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]],\n  ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]],\n  ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]],\n  ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]],\n  ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]],\n  ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]],\n  ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]],\n  ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]],\n  ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]],\n  ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]],\n  ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]],\n  ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]],\n  ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]],\n  ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]],\n  ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]],\n  ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]],\n  ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]],\n  ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]],\n  ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]],\n  ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]],\n  ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]],\n  ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]],\n  ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]],\n  ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]],\n  ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]],\n  ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]],\n  ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]],\n  ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]],\n  ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]],\n  ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]],\n  ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]],\n  ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]],\n  ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]],\n  ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]],\n  ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]],\n  ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]],\n  ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]],\n  ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]],\n  ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]],\n  ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]],\n  ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]],\n  ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]],\n  ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]],\n  ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]],\n  ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]],\n  ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]],\n  ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]],\n  ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]],\n  ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]],\n  ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]],\n  ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]],\n  ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]],\n  ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]],\n  ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]],\n  ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]],\n  ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]],\n  ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]],\n  ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]],\n  ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]],\n  ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]],\n  ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]],\n  ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]],\n  ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]],\n  ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]],\n  ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]],\n  ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]],\n  ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]],\n  ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]],\n  ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]],\n  ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]],\n  ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]],\n  ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]],\n  ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]],\n  ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]],\n  ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]],\n  ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]],\n  ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]],\n  ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]],\n  ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]],\n  ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]],\n  ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]],\n  ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]],\n  ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]],\n  ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]],\n  ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]],\n  ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]],\n  ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]],\n  ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]],\n  ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]],\n  ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]],\n  ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]],\n  ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]],\n  ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]],\n  ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]],\n  ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]],\n  ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]],\n  ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]],\n  ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]],\n  ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]],\n  ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]],\n  ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]],\n  ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]],\n  ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]],\n  ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]],\n  ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]],\n  ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]],\n  ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]],\n  ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]],\n  ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]],\n  ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]],\n  ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]],\n  ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]],\n  ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]],\n  ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]],\n  ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]],\n  ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]],\n  ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]],\n  ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]],\n  ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]],\n  ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]],\n  ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]],\n  ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]],\n  ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_8.js",
    "content": "var searchData=\n[\n  ['integer_20functions',['Integer functions',['../a00370.html',1,'']]],\n  ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]],\n  ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]],\n  ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]],\n  ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]],\n  ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]],\n  ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]],\n  ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]],\n  ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]],\n  ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]],\n  ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]],\n  ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]],\n  ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]],\n  ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]],\n  ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]],\n  ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]],\n  ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]],\n  ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]],\n  ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]],\n  ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]],\n  ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]],\n  ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]],\n  ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]],\n  ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]],\n  ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]],\n  ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]],\n  ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]],\n  ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]],\n  ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]],\n  ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]],\n  ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]],\n  ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]],\n  ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]],\n  ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]],\n  ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]],\n  ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]],\n  ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]],\n  ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]],\n  ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]],\n  ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]],\n  ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]],\n  ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]],\n  ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]],\n  ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]],\n  ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]],\n  ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]],\n  ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]],\n  ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]],\n  ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]],\n  ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]],\n  ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]],\n  ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]],\n  ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]],\n  ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]],\n  ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]],\n  ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]],\n  ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]],\n  ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]],\n  ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]],\n  ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]],\n  ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &amp;v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)']]],\n  ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]],\n  ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]],\n  ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]],\n  ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]],\n  ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]],\n  ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]],\n  ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]],\n  ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)']]],\n  ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]],\n  ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua&lt; T, Q &gt; const &amp;q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat&lt; T, Q &gt; const &amp;q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat&lt; C, R, T, Q &gt; const &amp;m)']]],\n  ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]],\n  ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]],\n  ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]],\n  ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]],\n  ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]],\n  ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]],\n  ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &amp;x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec&lt; 1, T, Q &gt; &amp;x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]],\n  ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]],\n  ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]],\n  ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]],\n  ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]],\n  ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_9.js",
    "content": "var searchData=\n[\n  ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]],\n  ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]],\n  ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]],\n  ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]],\n  ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]],\n  ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)']]],\n  ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]],\n  ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]],\n  ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]],\n  ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua&lt; T, Q &gt; const &amp;q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &amp;x, genType const &amp;base)']]],\n  ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]],\n  ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]],\n  ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]],\n  ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]],\n  ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]],\n  ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]],\n  ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]],\n  ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]],\n  ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]],\n  ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]],\n  ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]],\n  ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]],\n  ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]],\n  ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]],\n  ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]],\n  ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]],\n  ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]],\n  ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]],\n  ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]],\n  ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]],\n  ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]],\n  ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]],\n  ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]],\n  ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]],\n  ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]],\n  ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]],\n  ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]],\n  ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]],\n  ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]],\n  ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]],\n  ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]],\n  ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]],\n  ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]],\n  ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]],\n  ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]],\n  ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]],\n  ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]],\n  ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]],\n  ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]],\n  ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]],\n  ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]],\n  ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]],\n  ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]],\n  ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]],\n  ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]],\n  ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]],\n  ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]],\n  ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]],\n  ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]],\n  ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]],\n  ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]],\n  ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]],\n  ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]],\n  ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]],\n  ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]],\n  ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]],\n  ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]],\n  ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]],\n  ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]],\n  ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]],\n  ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]],\n  ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]],\n  ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]],\n  ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]],\n  ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]],\n  ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]],\n  ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]],\n  ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]],\n  ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]],\n  ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]],\n  ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]],\n  ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]],\n  ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]],\n  ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]],\n  ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]],\n  ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]],\n  ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]],\n  ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]],\n  ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]],\n  ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]],\n  ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]],\n  ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]],\n  ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]],\n  ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]],\n  ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]],\n  ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]],\n  ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]],\n  ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]],\n  ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]],\n  ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]],\n  ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]],\n  ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]],\n  ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]],\n  ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]],\n  ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]],\n  ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]],\n  ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]],\n  ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]],\n  ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]],\n  ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]],\n  ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]],\n  ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]],\n  ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]],\n  ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]],\n  ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]],\n  ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]],\n  ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]],\n  ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]],\n  ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]],\n  ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]],\n  ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]],\n  ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]],\n  ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]],\n  ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]],\n  ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]],\n  ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]],\n  ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]],\n  ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]],\n  ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]],\n  ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]],\n  ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]],\n  ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]],\n  ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]],\n  ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]],\n  ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]],\n  ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]],\n  ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]],\n  ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]],\n  ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]],\n  ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]],\n  ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]],\n  ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]],\n  ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]],\n  ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]],\n  ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]],\n  ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]],\n  ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]],\n  ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]],\n  ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]],\n  ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]],\n  ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]],\n  ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]],\n  ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]],\n  ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]],\n  ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]],\n  ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]],\n  ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]],\n  ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]],\n  ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]],\n  ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]],\n  ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]],\n  ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]],\n  ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]],\n  ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]],\n  ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]],\n  ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]],\n  ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]],\n  ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]],\n  ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]],\n  ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]],\n  ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]],\n  ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]],\n  ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]],\n  ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]],\n  ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]],\n  ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]],\n  ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]],\n  ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]],\n  ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]],\n  ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]],\n  ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]],\n  ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]],\n  ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]],\n  ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]],\n  ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]],\n  ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]],\n  ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]],\n  ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]],\n  ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]],\n  ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]],\n  ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]],\n  ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]],\n  ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]],\n  ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]],\n  ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]],\n  ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]],\n  ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]],\n  ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]],\n  ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]],\n  ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]],\n  ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]],\n  ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]],\n  ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_a.js",
    "content": "var searchData=\n[\n  ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]],\n  ['matrix_20types',['Matrix types',['../a00283.html',1,'']]],\n  ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]],\n  ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]],\n  ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]],\n  ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]],\n  ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]],\n  ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]],\n  ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]],\n  ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]],\n  ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]],\n  ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]],\n  ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]],\n  ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]],\n  ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]],\n  ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]],\n  ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)']]],\n  ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]],\n  ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]],\n  ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]],\n  ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]],\n  ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]],\n  ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]],\n  ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]],\n  ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]],\n  ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]],\n  ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]],\n  ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]],\n  ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]],\n  ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]],\n  ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]],\n  ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]],\n  ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]],\n  ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]],\n  ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]],\n  ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]],\n  ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]],\n  ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]],\n  ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]],\n  ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]],\n  ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]],\n  ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]],\n  ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]],\n  ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]],\n  ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]],\n  ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]],\n  ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]],\n  ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]],\n  ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]],\n  ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]],\n  ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]],\n  ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]],\n  ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]],\n  ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]],\n  ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]],\n  ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]],\n  ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]],\n  ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]],\n  ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]],\n  ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]],\n  ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]],\n  ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]],\n  ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]],\n  ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]],\n  ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]],\n  ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]],\n  ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]],\n  ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]],\n  ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]],\n  ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]],\n  ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]],\n  ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]],\n  ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]],\n  ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]],\n  ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]],\n  ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]],\n  ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]],\n  ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]],\n  ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]],\n  ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]],\n  ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]],\n  ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]],\n  ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]],\n  ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]],\n  ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]],\n  ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]],\n  ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]],\n  ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]],\n  ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]],\n  ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]],\n  ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]],\n  ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]],\n  ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]],\n  ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]],\n  ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]],\n  ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]],\n  ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]],\n  ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]],\n  ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]],\n  ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]],\n  ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]],\n  ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]],\n  ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]],\n  ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]],\n  ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]],\n  ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]],\n  ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]],\n  ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]],\n  ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]],\n  ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]],\n  ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]],\n  ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]],\n  ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]],\n  ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]],\n  ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]],\n  ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]],\n  ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]],\n  ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]],\n  ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]],\n  ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]],\n  ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]],\n  ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]],\n  ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]],\n  ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]],\n  ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]],\n  ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]],\n  ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]],\n  ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]],\n  ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]],\n  ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]],\n  ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]],\n  ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]],\n  ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]],\n  ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]],\n  ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]],\n  ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]],\n  ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]],\n  ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]],\n  ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]],\n  ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]],\n  ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]],\n  ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]],\n  ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]],\n  ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]],\n  ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]],\n  ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]],\n  ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]],\n  ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]],\n  ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]],\n  ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]],\n  ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]],\n  ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]],\n  ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]],\n  ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]],\n  ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]],\n  ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]],\n  ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]],\n  ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]],\n  ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]],\n  ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]],\n  ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]],\n  ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]],\n  ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]],\n  ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]],\n  ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]],\n  ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]],\n  ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]],\n  ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]],\n  ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]],\n  ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]],\n  ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]],\n  ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]],\n  ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]],\n  ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]],\n  ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]],\n  ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]],\n  ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]],\n  ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]],\n  ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]],\n  ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]],\n  ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]],\n  ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]],\n  ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]],\n  ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]],\n  ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]],\n  ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]],\n  ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]],\n  ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]],\n  ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]],\n  ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]],\n  ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]],\n  ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]],\n  ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]],\n  ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]],\n  ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]],\n  ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]],\n  ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]],\n  ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]],\n  ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]],\n  ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]],\n  ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]],\n  ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]],\n  ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]],\n  ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]],\n  ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]],\n  ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]],\n  ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]],\n  ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]],\n  ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]],\n  ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]],\n  ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]],\n  ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]],\n  ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]],\n  ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]],\n  ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]],\n  ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]],\n  ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]],\n  ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]],\n  ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]],\n  ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]],\n  ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]],\n  ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]],\n  ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]],\n  ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]],\n  ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]],\n  ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]],\n  ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]],\n  ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]],\n  ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]],\n  ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]],\n  ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]],\n  ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]],\n  ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]],\n  ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]],\n  ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]],\n  ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]],\n  ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]],\n  ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]],\n  ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]],\n  ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]],\n  ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]],\n  ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]],\n  ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]],\n  ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]],\n  ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]],\n  ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]],\n  ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]],\n  ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]],\n  ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]],\n  ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]],\n  ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]],\n  ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]],\n  ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]],\n  ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]],\n  ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]],\n  ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]],\n  ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]],\n  ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]],\n  ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]],\n  ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]],\n  ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]],\n  ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]],\n  ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]],\n  ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]],\n  ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]],\n  ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]],\n  ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]],\n  ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]],\n  ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]],\n  ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]],\n  ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]],\n  ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]],\n  ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]],\n  ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]],\n  ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]],\n  ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]],\n  ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]],\n  ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]],\n  ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]],\n  ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]],\n  ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]],\n  ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]],\n  ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]],\n  ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]],\n  ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]],\n  ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]],\n  ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)']]],\n  ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]],\n  ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]],\n  ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]],\n  ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_b.js",
    "content": "var searchData=\n[\n  ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]],\n  ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]],\n  ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]],\n  ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]],\n  ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat&lt; T, Q &gt; const &amp;q)']]],\n  ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]],\n  ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]],\n  ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]],\n  ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_c.js",
    "content": "var searchData=\n[\n  ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]],\n  ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]],\n  ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]],\n  ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]],\n  ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]],\n  ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]],\n  ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]],\n  ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]],\n  ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &amp;angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)']]],\n  ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]],\n  ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]],\n  ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)']]],\n  ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]],\n  ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]],\n  ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]],\n  ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]],\n  ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]],\n  ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)']]],\n  ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]],\n  ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]],\n  ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]],\n  ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]],\n  ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]],\n  ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_d.js",
    "content": "var searchData=\n[\n  ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]],\n  ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]],\n  ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]],\n  ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]],\n  ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]],\n  ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]],\n  ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]],\n  ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]],\n  ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]],\n  ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]],\n  ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]],\n  ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]],\n  ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]],\n  ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]],\n  ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]],\n  ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]],\n  ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]],\n  ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]],\n  ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]],\n  ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]],\n  ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]],\n  ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]],\n  ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]],\n  ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]],\n  ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]],\n  ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]],\n  ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]],\n  ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]],\n  ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]],\n  ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]],\n  ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]],\n  ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]],\n  ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]],\n  ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]],\n  ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]],\n  ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]],\n  ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]],\n  ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]],\n  ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]],\n  ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]],\n  ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]],\n  ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]],\n  ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]],\n  ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]],\n  ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]],\n  ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]],\n  ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]],\n  ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]],\n  ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]],\n  ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]],\n  ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]],\n  ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]],\n  ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]],\n  ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]],\n  ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]],\n  ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]],\n  ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]],\n  ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]],\n  ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]],\n  ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]],\n  ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]],\n  ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]],\n  ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]],\n  ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]],\n  ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]],\n  ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]],\n  ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]],\n  ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]],\n  ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]],\n  ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]],\n  ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]],\n  ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]],\n  ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]],\n  ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]],\n  ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]],\n  ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]],\n  ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]],\n  ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]],\n  ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]],\n  ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]],\n  ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]],\n  ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]],\n  ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]],\n  ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]],\n  ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]],\n  ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]],\n  ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]],\n  ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]],\n  ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]],\n  ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]],\n  ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]],\n  ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]],\n  ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]],\n  ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]],\n  ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]],\n  ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]],\n  ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]],\n  ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]],\n  ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]],\n  ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]],\n  ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]],\n  ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]],\n  ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]],\n  ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]],\n  ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]],\n  ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]],\n  ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]],\n  ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]],\n  ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]],\n  ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]],\n  ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]],\n  ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]],\n  ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]],\n  ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]],\n  ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]],\n  ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]],\n  ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]],\n  ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]],\n  ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]],\n  ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]],\n  ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]],\n  ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]],\n  ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]],\n  ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]],\n  ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]],\n  ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]],\n  ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]],\n  ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]],\n  ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]],\n  ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]],\n  ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]],\n  ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]],\n  ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]],\n  ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]],\n  ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]],\n  ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]],\n  ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]],\n  ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]],\n  ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]],\n  ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]],\n  ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]],\n  ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]],\n  ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]],\n  ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]],\n  ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]],\n  ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]],\n  ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]],\n  ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]],\n  ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]],\n  ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]],\n  ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]],\n  ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]],\n  ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]],\n  ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]],\n  ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]],\n  ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]],\n  ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]],\n  ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]],\n  ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]],\n  ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]],\n  ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]],\n  ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]],\n  ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]],\n  ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]],\n  ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]],\n  ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]],\n  ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]],\n  ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]],\n  ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]],\n  ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]],\n  ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]],\n  ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]],\n  ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]],\n  ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]],\n  ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]],\n  ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]],\n  ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]],\n  ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]],\n  ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]],\n  ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]],\n  ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]],\n  ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]],\n  ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]],\n  ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]],\n  ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]],\n  ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]],\n  ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]],\n  ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]],\n  ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]],\n  ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]],\n  ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]],\n  ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]],\n  ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]],\n  ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]],\n  ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]],\n  ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]],\n  ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]],\n  ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]],\n  ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]],\n  ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)']]],\n  ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]],\n  ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]],\n  ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]],\n  ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]],\n  ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]],\n  ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]],\n  ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]],\n  ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]],\n  ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]],\n  ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]],\n  ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]],\n  ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]],\n  ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]],\n  ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]],\n  ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]],\n  ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]],\n  ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]],\n  ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]],\n  ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]],\n  ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]],\n  ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]],\n  ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]],\n  ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]],\n  ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]],\n  ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]],\n  ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua&lt; T, Q &gt; const &amp;q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]],\n  ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]],\n  ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]],\n  ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]],\n  ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]],\n  ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]],\n  ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]],\n  ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]],\n  ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]],\n  ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]],\n  ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_e.js",
    "content": "var searchData=\n[\n  ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]],\n  ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]],\n  ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]],\n  ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]],\n  ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]],\n  ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]],\n  ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]],\n  ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]],\n  ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]],\n  ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]],\n  ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]],\n  ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]],\n  ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]],\n  ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]],\n  ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]],\n  ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]],\n  ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]],\n  ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]],\n  ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]],\n  ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]],\n  ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]],\n  ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]],\n  ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]],\n  ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]],\n  ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]],\n  ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]],\n  ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/all_f.js",
    "content": "var searchData=\n[\n  ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]],\n  ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]],\n  ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]],\n  ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]],\n  ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]],\n  ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]],\n  ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]],\n  ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]],\n  ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]],\n  ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]],\n  ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]],\n  ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]],\n  ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]],\n  ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]],\n  ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]],\n  ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]],\n  ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]],\n  ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]],\n  ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]],\n  ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]],\n  ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]],\n  ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]],\n  ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]],\n  ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]],\n  ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)']]],\n  ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]],\n  ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]],\n  ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]],\n  ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]],\n  ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &amp;m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)']]],\n  ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_0.js",
    "content": "var searchData=\n[\n  ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_1.js",
    "content": "var searchData=\n[\n  ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]],\n  ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_10.js",
    "content": "var searchData=\n[\n  ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]],\n  ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]],\n  ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]],\n  ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]],\n  ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]],\n  ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]],\n  ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]],\n  ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]],\n  ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]],\n  ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_11.js",
    "content": "var searchData=\n[\n  ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]],\n  ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]],\n  ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]],\n  ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]],\n  ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]],\n  ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]],\n  ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]],\n  ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]],\n  ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]],\n  ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]],\n  ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]],\n  ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]],\n  ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]],\n  ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]],\n  ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]],\n  ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]],\n  ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]],\n  ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]],\n  ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]],\n  ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]],\n  ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_12.js",
    "content": "var searchData=\n[\n  ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_13.js",
    "content": "var searchData=\n[\n  ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]],\n  ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]],\n  ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]],\n  ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]],\n  ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]],\n  ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]],\n  ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]],\n  ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]],\n  ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]],\n  ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]],\n  ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]],\n  ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]],\n  ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]],\n  ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]],\n  ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]],\n  ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]],\n  ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]],\n  ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]],\n  ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]],\n  ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]],\n  ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]],\n  ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]],\n  ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]],\n  ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]],\n  ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]],\n  ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]],\n  ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]],\n  ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]],\n  ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]],\n  ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]],\n  ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]],\n  ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]],\n  ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]],\n  ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]],\n  ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]],\n  ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]],\n  ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]],\n  ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]],\n  ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]],\n  ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]],\n  ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]],\n  ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]],\n  ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]],\n  ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]],\n  ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]],\n  ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]],\n  ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]],\n  ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]],\n  ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]],\n  ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_14.js",
    "content": "var searchData=\n[\n  ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_2.js",
    "content": "var searchData=\n[\n  ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]],\n  ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]],\n  ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]],\n  ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]],\n  ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]],\n  ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_3.js",
    "content": "var searchData=\n[\n  ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_4.js",
    "content": "var searchData=\n[\n  ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]],\n  ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]],\n  ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]],\n  ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]],\n  ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]],\n  ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]],\n  ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]],\n  ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_5.js",
    "content": "var searchData=\n[\n  ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]],\n  ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]],\n  ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]],\n  ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_6.js",
    "content": "var searchData=\n[\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]],\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]],\n  ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]],\n  ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]],\n  ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]],\n  ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_7.js",
    "content": "var searchData=\n[\n  ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]],\n  ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_8.js",
    "content": "var searchData=\n[\n  ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]],\n  ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]],\n  ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_9.js",
    "content": "var searchData=\n[\n  ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_a.js",
    "content": "var searchData=\n[\n  ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]],\n  ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]],\n  ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]],\n  ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]],\n  ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]],\n  ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]],\n  ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]],\n  ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]],\n  ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]],\n  ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]],\n  ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]],\n  ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]],\n  ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]],\n  ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]],\n  ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]],\n  ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]],\n  ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]],\n  ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]],\n  ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]],\n  ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]],\n  ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]],\n  ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]],\n  ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]],\n  ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]],\n  ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]],\n  ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]],\n  ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]],\n  ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]],\n  ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]],\n  ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]],\n  ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]],\n  ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]],\n  ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]],\n  ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]],\n  ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]],\n  ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]],\n  ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]],\n  ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]],\n  ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]],\n  ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]],\n  ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]],\n  ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]],\n  ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]],\n  ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]],\n  ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]],\n  ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]],\n  ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]],\n  ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]],\n  ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]],\n  ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]],\n  ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]],\n  ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]],\n  ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]],\n  ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]],\n  ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]],\n  ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]],\n  ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]],\n  ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]],\n  ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]],\n  ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]],\n  ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_b.js",
    "content": "var searchData=\n[\n  ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]],\n  ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]],\n  ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]],\n  ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]],\n  ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_c.js",
    "content": "var searchData=\n[\n  ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]],\n  ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_d.js",
    "content": "var searchData=\n[\n  ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]],\n  ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]],\n  ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]],\n  ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_e.js",
    "content": "var searchData=\n[\n  ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]],\n  ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]],\n  ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]],\n  ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]],\n  ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]],\n  ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]],\n  ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]],\n  ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]],\n  ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]],\n  ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/files_f.js",
    "content": "var searchData=\n[\n  ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]],\n  ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]],\n  ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]],\n  ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]],\n  ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]],\n  ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]],\n  ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_0.js",
    "content": "var searchData=\n[\n  ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]],\n  ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]],\n  ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]],\n  ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]],\n  ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]],\n  ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]],\n  ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat&lt; 2, 2, T, Q &gt; const &amp;m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]],\n  ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]],\n  ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua&lt; T, Q &gt; const &amp;x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]],\n  ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]],\n  ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]],\n  ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]],\n  ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]],\n  ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]],\n  ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]],\n  ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]],\n  ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]],\n  ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)']]],\n  ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)']]],\n  ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]],\n  ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]],\n  ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]],\n  ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_1.js",
    "content": "var searchData=\n[\n  ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &amp;a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &amp;a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &amp;a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &amp;a, genType const &amp;o)']]],\n  ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]],\n  ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]],\n  ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]],\n  ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]],\n  ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &amp;v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &amp;v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &amp;v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]],\n  ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]],\n  ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]],\n  ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]],\n  ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_10.js",
    "content": "var searchData=\n[\n  ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec&lt; 3, T, Q &gt; const &amp;color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)']]],\n  ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)']]],\n  ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]],\n  ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]],\n  ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]],\n  ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]],\n  ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]],\n  ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]],\n  ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]],\n  ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]],\n  ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]],\n  ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]],\n  ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)']]],\n  ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]],\n  ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]],\n  ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]],\n  ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]],\n  ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]],\n  ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]],\n  ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]],\n  ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]],\n  ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua&lt; T, Q &gt; const &amp;q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]],\n  ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]],\n  ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_11.js",
    "content": "var searchData=\n[\n  ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]],\n  ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]],\n  ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]],\n  ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]],\n  ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]],\n  ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]],\n  ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]],\n  ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]],\n  ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]],\n  ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]],\n  ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]],\n  ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]],\n  ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]],\n  ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]],\n  ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_12.js",
    "content": "var searchData=\n[\n  ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]],\n  ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &amp;v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)']]],\n  ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]],\n  ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]],\n  ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]],\n  ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]],\n  ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]],\n  ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]],\n  ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]],\n  ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]],\n  ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]],\n  ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]],\n  ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]],\n  ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]],\n  ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]],\n  ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]],\n  ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]],\n  ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]],\n  ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]],\n  ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]],\n  ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]],\n  ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]],\n  ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]],\n  ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]],\n  ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]],\n  ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]],\n  ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]],\n  ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]],\n  ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]],\n  ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]],\n  ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]],\n  ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]],\n  ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]],\n  ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]],\n  ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]],\n  ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]],\n  ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]],\n  ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]],\n  ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]],\n  ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]],\n  ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]],\n  ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]],\n  ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]],\n  ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]],\n  ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]],\n  ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]],\n  ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]],\n  ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]],\n  ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_13.js",
    "content": "var searchData=\n[\n  ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_14.js",
    "content": "var searchData=\n[\n  ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_15.js",
    "content": "var searchData=\n[\n  ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]],\n  ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]],\n  ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]],\n  ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_16.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_16.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_16.js",
    "content": "var searchData=\n[\n  ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_2.js",
    "content": "var searchData=\n[\n  ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]],\n  ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]],\n  ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]],\n  ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]],\n  ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]],\n  ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]],\n  ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &amp;Texcoord)']]],\n  ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]],\n  ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)']]],\n  ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &amp;m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)']]],\n  ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]],\n  ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]],\n  ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]],\n  ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]],\n  ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]],\n  ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]],\n  ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]],\n  ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]],\n  ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]],\n  ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]],\n  ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]],\n  ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)']]],\n  ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)']]],\n  ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]],\n  ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]],\n  ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]],\n  ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]],\n  ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)']]],\n  ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]],\n  ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]],\n  ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]],\n  ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]],\n  ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]],\n  ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_3.js",
    "content": "var searchData=\n[\n  ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]],\n  ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]],\n  ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]],\n  ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]],\n  ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]],\n  ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]],\n  ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]],\n  ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]],\n  ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]],\n  ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]],\n  ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]],\n  ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]],\n  ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]],\n  ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]],\n  ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]],\n  ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]],\n  ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]],\n  ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]],\n  ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]],\n  ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat&lt; 2, 4, T, Q &gt; const &amp;x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_4.js",
    "content": "var searchData=\n[\n  ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]],\n  ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]],\n  ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]],\n  ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]],\n  ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]],\n  ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]],\n  ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]],\n  ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]],\n  ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]],\n  ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]],\n  ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]],\n  ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]],\n  ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]],\n  ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]],\n  ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]],\n  ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]],\n  ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]],\n  ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]],\n  ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]],\n  ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]],\n  ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]],\n  ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]],\n  ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]],\n  ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]],\n  ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]],\n  ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]],\n  ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]],\n  ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]],\n  ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]],\n  ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]],\n  ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]],\n  ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]],\n  ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]],\n  ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]],\n  ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]],\n  ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]],\n  ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]],\n  ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]],\n  ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]],\n  ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]],\n  ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]],\n  ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]],\n  ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]],\n  ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]],\n  ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]],\n  ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]],\n  ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]],\n  ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_5.js",
    "content": "var searchData=\n[\n  ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]],\n  ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]],\n  ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]],\n  ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]],\n  ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]],\n  ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]],\n  ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]],\n  ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]],\n  ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]],\n  ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]],\n  ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]],\n  ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)']]],\n  ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)']]],\n  ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]],\n  ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]],\n  ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &amp;v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &amp;v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]],\n  ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]],\n  ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]],\n  ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]],\n  ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]],\n  ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]],\n  ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]],\n  ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]],\n  ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]],\n  ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]],\n  ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]],\n  ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]],\n  ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]],\n  ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]],\n  ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]],\n  ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]],\n  ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_6.js",
    "content": "var searchData=\n[\n  ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)']]],\n  ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]],\n  ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]],\n  ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]],\n  ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_7.js",
    "content": "var searchData=\n[\n  ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]],\n  ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]],\n  ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_8.js",
    "content": "var searchData=\n[\n  ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]],\n  ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]],\n  ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]],\n  ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]],\n  ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]],\n  ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &amp;v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)']]],\n  ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]],\n  ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]],\n  ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]],\n  ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]],\n  ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]],\n  ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)']]],\n  ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]],\n  ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua&lt; T, Q &gt; const &amp;q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat&lt; T, Q &gt; const &amp;q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat&lt; C, R, T, Q &gt; const &amp;m)']]],\n  ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]],\n  ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]],\n  ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]],\n  ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]],\n  ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]],\n  ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &amp;x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec&lt; 1, T, Q &gt; &amp;x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]],\n  ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]],\n  ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_9.js",
    "content": "var searchData=\n[\n  ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]],\n  ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]],\n  ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]],\n  ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]],\n  ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]],\n  ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)']]],\n  ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]],\n  ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]],\n  ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]],\n  ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua&lt; T, Q &gt; const &amp;q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &amp;x, genType const &amp;base)']]],\n  ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]],\n  ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]],\n  ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]],\n  ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]],\n  ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]],\n  ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]],\n  ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_a.js",
    "content": "var searchData=\n[\n  ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]],\n  ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]],\n  ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]],\n  ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]],\n  ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]],\n  ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]],\n  ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]],\n  ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]],\n  ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]],\n  ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]],\n  ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]],\n  ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]],\n  ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]],\n  ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)']]],\n  ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]],\n  ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]],\n  ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]],\n  ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]],\n  ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]],\n  ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]],\n  ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]],\n  ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]],\n  ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]],\n  ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]],\n  ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]],\n  ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]],\n  ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)']]],\n  ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]],\n  ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]],\n  ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_b.js",
    "content": "var searchData=\n[\n  ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]],\n  ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat&lt; T, Q &gt; const &amp;q)']]],\n  ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]],\n  ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]],\n  ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_c.js",
    "content": "var searchData=\n[\n  ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]],\n  ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]],\n  ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]],\n  ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]],\n  ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]],\n  ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]],\n  ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &amp;angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)']]],\n  ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]],\n  ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]],\n  ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)']]],\n  ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]],\n  ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]],\n  ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]],\n  ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]],\n  ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]],\n  ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)']]],\n  ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]],\n  ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]],\n  ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]],\n  ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]],\n  ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_d.js",
    "content": "var searchData=\n[\n  ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]],\n  ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]],\n  ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]],\n  ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]],\n  ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]],\n  ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]],\n  ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]],\n  ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]],\n  ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]],\n  ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]],\n  ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]],\n  ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]],\n  ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]],\n  ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]],\n  ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]],\n  ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]],\n  ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]],\n  ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]],\n  ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]],\n  ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]],\n  ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]],\n  ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]],\n  ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]],\n  ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]],\n  ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]],\n  ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]],\n  ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]],\n  ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]],\n  ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]],\n  ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]],\n  ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]],\n  ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]],\n  ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]],\n  ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]],\n  ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]],\n  ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]],\n  ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]],\n  ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]],\n  ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]],\n  ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]],\n  ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]],\n  ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)']]],\n  ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]],\n  ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]],\n  ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]],\n  ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]],\n  ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]],\n  ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]],\n  ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]],\n  ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]],\n  ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]],\n  ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]],\n  ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]],\n  ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]],\n  ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]],\n  ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]],\n  ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]],\n  ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]],\n  ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]],\n  ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]],\n  ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]],\n  ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]],\n  ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]],\n  ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]],\n  ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]],\n  ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua&lt; T, Q &gt; const &amp;q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]],\n  ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]],\n  ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]],\n  ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]],\n  ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]],\n  ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]],\n  ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]],\n  ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]],\n  ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]],\n  ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_e.js",
    "content": "var searchData=\n[\n  ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]],\n  ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]],\n  ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]],\n  ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]],\n  ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]],\n  ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]],\n  ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]],\n  ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]],\n  ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]],\n  ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]],\n  ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]],\n  ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]],\n  ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]],\n  ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]],\n  ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/functions_f.js",
    "content": "var searchData=\n[\n  ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]],\n  ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]],\n  ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]],\n  ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]],\n  ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]],\n  ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]],\n  ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]],\n  ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]],\n  ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]],\n  ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]],\n  ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]],\n  ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]],\n  ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]],\n  ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]],\n  ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]],\n  ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]],\n  ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]],\n  ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)']]],\n  ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]],\n  ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]],\n  ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]],\n  ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &amp;m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)']]],\n  ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_0.js",
    "content": "var searchData=\n[\n  ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_1.js",
    "content": "var searchData=\n[\n  ['core_20features',['Core features',['../a00280.html',1,'']]],\n  ['common_20functions',['Common functions',['../a00241.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_2.js",
    "content": "var searchData=\n[\n  ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]],\n  ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_3.js",
    "content": "var searchData=\n[\n  ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_4.js",
    "content": "var searchData=\n[\n  ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]],\n  ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]],\n  ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]],\n  ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]],\n  ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]],\n  ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]],\n  ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]],\n  ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]],\n  ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]],\n  ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]],\n  ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]],\n  ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]],\n  ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]],\n  ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]],\n  ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]],\n  ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]],\n  ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]],\n  ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]],\n  ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]],\n  ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]],\n  ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]],\n  ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]],\n  ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]],\n  ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]],\n  ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]],\n  ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]],\n  ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]],\n  ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]],\n  ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]],\n  ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]],\n  ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]],\n  ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]],\n  ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]],\n  ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]],\n  ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]],\n  ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]],\n  ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]],\n  ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]],\n  ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]],\n  ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]],\n  ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]],\n  ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]],\n  ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]],\n  ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]],\n  ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]],\n  ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]],\n  ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]],\n  ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]],\n  ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]],\n  ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]],\n  ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]],\n  ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]],\n  ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]],\n  ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]],\n  ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]],\n  ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]],\n  ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]],\n  ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]],\n  ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]],\n  ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]],\n  ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]],\n  ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]],\n  ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]],\n  ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]],\n  ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]],\n  ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]],\n  ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]],\n  ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]],\n  ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]],\n  ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]],\n  ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]],\n  ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]],\n  ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]],\n  ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_5.js",
    "content": "var searchData=\n[\n  ['integer_20functions',['Integer functions',['../a00370.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_6.js",
    "content": "var searchData=\n[\n  ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]],\n  ['matrix_20types',['Matrix types',['../a00283.html',1,'']]],\n  ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_7.js",
    "content": "var searchData=\n[\n  ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_8.js",
    "content": "var searchData=\n[\n  ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/groups_9.js",
    "content": "var searchData=\n[\n  ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]],\n  ['vector_20types',['Vector types',['../a00281.html',1,'']]],\n  ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/nomatches.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/pages_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/pages_0.js",
    "content": "var searchData=\n[\n  ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/search.css",
    "content": "/*---------------- Search Box */\n\n#FSearchBox {\n    float: left;\n}\n\n#MSearchBox {\n    white-space : nowrap;\n    position: absolute;\n    float: none;\n    display: inline;\n    margin-top: 8px;\n    right: 0px;\n    width: 170px;\n    z-index: 102;\n    background-color: white;\n}\n\n#MSearchBox .left\n{\n    display:block;\n    position:absolute;\n    left:10px;\n    width:20px;\n    height:19px;\n    background:url('search_l.png') no-repeat;\n    background-position:right;\n}\n\n#MSearchSelect {\n    display:block;\n    position:absolute;\n    width:20px;\n    height:19px;\n}\n\n.left #MSearchSelect {\n    left:4px;\n}\n\n.right #MSearchSelect {\n    right:5px;\n}\n\n#MSearchField {\n    display:block;\n    position:absolute;\n    height:19px;\n    background:url('search_m.png') repeat-x;\n    border:none;\n    width:111px;\n    margin-left:20px;\n    padding-left:4px;\n    color: #909090;\n    outline: none;\n    font: 9pt Arial, Verdana, sans-serif;\n}\n\n#FSearchBox #MSearchField {\n    margin-left:15px;\n}\n\n#MSearchBox .right {\n    display:block;\n    position:absolute;\n    right:10px;\n    top:0px;\n    width:20px;\n    height:19px;\n    background:url('search_r.png') no-repeat;\n    background-position:left;\n}\n\n#MSearchClose {\n    display: none;\n    position: absolute;\n    top: 4px;\n    background : none;\n    border: none;\n    margin: 0px 4px 0px 0px;\n    padding: 0px 0px;\n    outline: none;\n}\n\n.left #MSearchClose {\n    left: 6px;\n}\n\n.right #MSearchClose {\n    right: 2px;\n}\n\n.MSearchBoxActive #MSearchField {\n    color: #000000;\n}\n\n/*---------------- Search filter selection */\n\n#MSearchSelectWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #90A5CE;\n    background-color: #F9FAFC;\n    z-index: 1;\n    padding-top: 4px;\n    padding-bottom: 4px;\n    -moz-border-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -webkit-border-top-right-radius: 4px;\n    -webkit-border-bottom-left-radius: 4px;\n    -webkit-border-bottom-right-radius: 4px;\n    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\n.SelectItem {\n    font: 8pt Arial, Verdana, sans-serif;\n    padding-left:  2px;\n    padding-right: 12px;\n    border: 0px;\n}\n\nspan.SelectionMark {\n    margin-right: 4px;\n    font-family: monospace;\n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem {\n    display: block;\n    outline-style: none;\n    color: #000000; \n    text-decoration: none;\n    padding-left:   6px;\n    padding-right: 12px;\n}\n\na.SelectItem:focus,\na.SelectItem:active {\n    color: #000000; \n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem:hover {\n    color: #FFFFFF;\n    background-color: #3D578C;\n    outline-style: none;\n    text-decoration: none;\n    cursor: pointer;\n    display: block;\n}\n\n/*---------------- Search results window */\n\niframe#MSearchResults {\n    width: 60ex;\n    height: 15em;\n}\n\n#MSearchResultsWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #000;\n    background-color: #EEF1F7;\n}\n\n/* ----------------------------------- */\n\n\n#SRIndex {\n    clear:both; \n    padding-bottom: 15px;\n}\n\n.SREntry {\n    font-size: 10pt;\n    padding-left: 1ex;\n}\n\n.SRPage .SREntry {\n    font-size: 8pt;\n    padding: 1px 5px;\n}\n\nbody.SRPage {\n    margin: 5px 2px;\n}\n\n.SRChildren {\n    padding-left: 3ex; padding-bottom: .5em \n}\n\n.SRPage .SRChildren {\n    display: none;\n}\n\n.SRSymbol {\n    font-weight: bold; \n    color: #425E97;\n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRScope {\n    display: block;\n    color: #425E97; \n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRSymbol:focus, a.SRSymbol:active,\na.SRScope:focus, a.SRScope:active {\n    text-decoration: underline;\n}\n\nspan.SRScope {\n    padding-left: 4px;\n}\n\n.SRPage .SRStatus {\n    padding: 2px 5px;\n    font-size: 8pt;\n    font-style: italic;\n}\n\n.SRResult {\n    display: none;\n}\n\nDIV.searchresults {\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n/*---------------- External search page results */\n\n.searchresult {\n    background-color: #F0F3F8;\n}\n\n.pages b {\n   color: white;\n   padding: 5px 5px 3px 5px;\n   background-image: url(\"../tab_a.png\");\n   background-repeat: repeat-x;\n   text-shadow: 0 1px 1px #000000;\n}\n\n.pages {\n    line-height: 17px;\n    margin-left: 4px;\n    text-decoration: none;\n}\n\n.hl {\n    font-weight: bold;\n}\n\n#searchresults {\n    margin-bottom: 20px;\n}\n\n.searchpages {\n    margin-top: 10px;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/search.js",
    "content": "function convertToId(search)\n{\n  var result = '';\n  for (i=0;i<search.length;i++)\n  {\n    var c = search.charAt(i);\n    var cn = c.charCodeAt(0);\n    if (c.match(/[a-z0-9\\u0080-\\uFFFF]/))\n    {\n      result+=c;\n    }\n    else if (cn<16)\n    {\n      result+=\"_0\"+cn.toString(16);\n    }\n    else\n    {\n      result+=\"_\"+cn.toString(16);\n    }\n  }\n  return result;\n}\n\nfunction getXPos(item)\n{\n  var x = 0;\n  if (item.offsetWidth)\n  {\n    while (item && item!=document.body)\n    {\n      x   += item.offsetLeft;\n      item = item.offsetParent;\n    }\n  }\n  return x;\n}\n\nfunction getYPos(item)\n{\n  var y = 0;\n  if (item.offsetWidth)\n  {\n     while (item && item!=document.body)\n     {\n       y   += item.offsetTop;\n       item = item.offsetParent;\n     }\n  }\n  return y;\n}\n\n/* A class handling everything associated with the search panel.\n\n   Parameters:\n   name - The name of the global variable that will be\n          storing this instance.  Is needed to be able to set timeouts.\n   resultPath - path to use for external files\n*/\nfunction SearchBox(name, resultsPath, inFrame, label)\n{\n  if (!name || !resultsPath) {  alert(\"Missing parameters to SearchBox.\"); }\n\n  // ---------- Instance variables\n  this.name                  = name;\n  this.resultsPath           = resultsPath;\n  this.keyTimeout            = 0;\n  this.keyTimeoutLength      = 500;\n  this.closeSelectionTimeout = 300;\n  this.lastSearchValue       = \"\";\n  this.lastResultsPage       = \"\";\n  this.hideTimeout           = 0;\n  this.searchIndex           = 0;\n  this.searchActive          = false;\n  this.insideFrame           = inFrame;\n  this.searchLabel           = label;\n\n  // ----------- DOM Elements\n\n  this.DOMSearchField = function()\n  {  return document.getElementById(\"MSearchField\");  }\n\n  this.DOMSearchSelect = function()\n  {  return document.getElementById(\"MSearchSelect\");  }\n\n  this.DOMSearchSelectWindow = function()\n  {  return document.getElementById(\"MSearchSelectWindow\");  }\n\n  this.DOMPopupSearchResults = function()\n  {  return document.getElementById(\"MSearchResults\");  }\n\n  this.DOMPopupSearchResultsWindow = function()\n  {  return document.getElementById(\"MSearchResultsWindow\");  }\n\n  this.DOMSearchClose = function()\n  {  return document.getElementById(\"MSearchClose\"); }\n\n  this.DOMSearchBox = function()\n  {  return document.getElementById(\"MSearchBox\");  }\n\n  // ------------ Event Handlers\n\n  // Called when focus is added or removed from the search field.\n  this.OnSearchFieldFocus = function(isActive)\n  {\n    this.Activate(isActive);\n  }\n\n  this.OnSearchSelectShow = function()\n  {\n    var searchSelectWindow = this.DOMSearchSelectWindow();\n    var searchField        = this.DOMSearchSelect();\n\n    if (this.insideFrame)\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      left += searchField.offsetWidth + 6;\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      left -= searchSelectWindow.offsetWidth;\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n    else\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n\n    // stop selection hide timer\n    if (this.hideTimeout)\n    {\n      clearTimeout(this.hideTimeout);\n      this.hideTimeout=0;\n    }\n    return false; // to avoid \"image drag\" default event\n  }\n\n  this.OnSearchSelectHide = function()\n  {\n    this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n                                  this.closeSelectionTimeout);\n  }\n\n  // Called when the content of the search field is changed.\n  this.OnSearchFieldChange = function(evt)\n  {\n    if (this.keyTimeout) // kill running timer\n    {\n      clearTimeout(this.keyTimeout);\n      this.keyTimeout = 0;\n    }\n\n    var e  = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 || e.keyCode==13)\n    {\n      if (e.shiftKey==1)\n      {\n        this.OnSearchSelectShow();\n        var win=this.DOMSearchSelectWindow();\n        for (i=0;i<win.childNodes.length;i++)\n        {\n          var child = win.childNodes[i]; // get span within a\n          if (child.className=='SelectItem')\n          {\n            child.focus();\n            return;\n          }\n        }\n        return;\n      }\n      else if (window.frames.MSearchResults.searchResults)\n      {\n        var elem = window.frames.MSearchResults.searchResults.NavNext(0);\n        if (elem) elem.focus();\n      }\n    }\n    else if (e.keyCode==27) // Escape out of the search field\n    {\n      this.DOMSearchField().blur();\n      this.DOMPopupSearchResultsWindow().style.display = 'none';\n      this.DOMSearchClose().style.display = 'none';\n      this.lastSearchValue = '';\n      this.Activate(false);\n      return;\n    }\n\n    // strip whitespaces\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n\n    if (searchValue != this.lastSearchValue) // search value has changed\n    {\n      if (searchValue != \"\") // non-empty search\n      {\n        // set timer for search update\n        this.keyTimeout = setTimeout(this.name + '.Search()',\n                                     this.keyTimeoutLength);\n      }\n      else // empty search field\n      {\n        this.DOMPopupSearchResultsWindow().style.display = 'none';\n        this.DOMSearchClose().style.display = 'none';\n        this.lastSearchValue = '';\n      }\n    }\n  }\n\n  this.SelectItemCount = function(id)\n  {\n    var count=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  this.SelectItemSet = function(id)\n  {\n    var i,j=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        var node = child.firstChild;\n        if (j==id)\n        {\n          node.innerHTML='&#8226;';\n        }\n        else\n        {\n          node.innerHTML='&#160;';\n        }\n        j++;\n      }\n    }\n  }\n\n  // Called when an search filter selection is made.\n  // set item with index id as the active item\n  this.OnSelectItem = function(id)\n  {\n    this.searchIndex = id;\n    this.SelectItemSet(id);\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n    if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n    {\n      this.Search();\n    }\n  }\n\n  this.OnSearchSelectKey = function(evt)\n  {\n    var e = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n    {\n      this.searchIndex++;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==38 && this.searchIndex>0) // Up\n    {\n      this.searchIndex--;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==13 || e.keyCode==27)\n    {\n      this.OnSelectItem(this.searchIndex);\n      this.CloseSelectionWindow();\n      this.DOMSearchField().focus();\n    }\n    return false;\n  }\n\n  // --------- Actions\n\n  // Closes the results window.\n  this.CloseResultsWindow = function()\n  {\n    this.DOMPopupSearchResultsWindow().style.display = 'none';\n    this.DOMSearchClose().style.display = 'none';\n    this.Activate(false);\n  }\n\n  this.CloseSelectionWindow = function()\n  {\n    this.DOMSearchSelectWindow().style.display = 'none';\n  }\n\n  // Performs a search.\n  this.Search = function()\n  {\n    this.keyTimeout = 0;\n\n    // strip leading whitespace\n    var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n\n    var code = searchValue.toLowerCase().charCodeAt(0);\n    var idxChar = searchValue.substr(0, 1).toLowerCase();\n    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair\n    {\n      idxChar = searchValue.substr(0, 2);\n    }\n\n    var resultsPage;\n    var resultsPageWithSearch;\n    var hasResultsPage;\n\n    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);\n    if (idx!=-1)\n    {\n       var hexCode=idx.toString(16);\n       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n       hasResultsPage = true;\n    }\n    else // nothing available for this search term\n    {\n       resultsPage = this.resultsPath + '/nomatches.html';\n       resultsPageWithSearch = resultsPage;\n       hasResultsPage = false;\n    }\n\n    window.frames.MSearchResults.location = resultsPageWithSearch;\n    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n\n    if (domPopupSearchResultsWindow.style.display!='block')\n    {\n       var domSearchBox = this.DOMSearchBox();\n       this.DOMSearchClose().style.display = 'inline';\n       if (this.insideFrame)\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         domPopupSearchResultsWindow.style.position = 'relative';\n         domPopupSearchResultsWindow.style.display  = 'block';\n         var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n         domPopupSearchResultsWindow.style.width    = width + 'px';\n         domPopupSearchResults.style.width          = width + 'px';\n       }\n       else\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;\n         domPopupSearchResultsWindow.style.display = 'block';\n         left -= domPopupSearchResults.offsetWidth;\n         domPopupSearchResultsWindow.style.top     = top  + 'px';\n         domPopupSearchResultsWindow.style.left    = left + 'px';\n       }\n    }\n\n    this.lastSearchValue = searchValue;\n    this.lastResultsPage = resultsPage;\n  }\n\n  // -------- Activation Functions\n\n  // Activates or deactivates the search panel, resetting things to\n  // their default values if necessary.\n  this.Activate = function(isActive)\n  {\n    if (isActive || // open it\n        this.DOMPopupSearchResultsWindow().style.display == 'block'\n       )\n    {\n      this.DOMSearchBox().className = 'MSearchBoxActive';\n\n      var searchField = this.DOMSearchField();\n\n      if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n      {\n        searchField.value = '';\n        this.searchActive = true;\n      }\n    }\n    else if (!isActive) // directly remove the panel\n    {\n      this.DOMSearchBox().className = 'MSearchBoxInactive';\n      this.DOMSearchField().value   = this.searchLabel;\n      this.searchActive             = false;\n      this.lastSearchValue          = ''\n      this.lastResultsPage          = '';\n    }\n  }\n}\n\n// -----------------------------------------------------------------------\n\n// The class that handles everything on the search results page.\nfunction SearchResults(name)\n{\n    // The number of matches from the last run of <Search()>.\n    this.lastMatchCount = 0;\n    this.lastKey = 0;\n    this.repeatOn = false;\n\n    // Toggles the visibility of the passed element ID.\n    this.FindChildElement = function(id)\n    {\n      var parentElement = document.getElementById(id);\n      var element = parentElement.firstChild;\n\n      while (element && element!=parentElement)\n      {\n        if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n        {\n          return element;\n        }\n\n        if (element.nodeName == 'DIV' && element.hasChildNodes())\n        {\n           element = element.firstChild;\n        }\n        else if (element.nextSibling)\n        {\n           element = element.nextSibling;\n        }\n        else\n        {\n          do\n          {\n            element = element.parentNode;\n          }\n          while (element && element!=parentElement && !element.nextSibling);\n\n          if (element && element!=parentElement)\n          {\n            element = element.nextSibling;\n          }\n        }\n      }\n    }\n\n    this.Toggle = function(id)\n    {\n      var element = this.FindChildElement(id);\n      if (element)\n      {\n        if (element.style.display == 'block')\n        {\n          element.style.display = 'none';\n        }\n        else\n        {\n          element.style.display = 'block';\n        }\n      }\n    }\n\n    // Searches for the passed string.  If there is no parameter,\n    // it takes it from the URL query.\n    //\n    // Always returns true, since other documents may try to call it\n    // and that may or may not be possible.\n    this.Search = function(search)\n    {\n      if (!search) // get search word from URL\n      {\n        search = window.location.search;\n        search = search.substring(1);  // Remove the leading '?'\n        search = unescape(search);\n      }\n\n      search = search.replace(/^ +/, \"\"); // strip leading spaces\n      search = search.replace(/ +$/, \"\"); // strip trailing spaces\n      search = search.toLowerCase();\n      search = convertToId(search);\n\n      var resultRows = document.getElementsByTagName(\"div\");\n      var matches = 0;\n\n      var i = 0;\n      while (i < resultRows.length)\n      {\n        var row = resultRows.item(i);\n        if (row.className == \"SRResult\")\n        {\n          var rowMatchName = row.id.toLowerCase();\n          rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n\n          if (search.length<=rowMatchName.length &&\n             rowMatchName.substr(0, search.length)==search)\n          {\n            row.style.display = 'block';\n            matches++;\n          }\n          else\n          {\n            row.style.display = 'none';\n          }\n        }\n        i++;\n      }\n      document.getElementById(\"Searching\").style.display='none';\n      if (matches == 0) // no results\n      {\n        document.getElementById(\"NoMatches\").style.display='block';\n      }\n      else // at least one result\n      {\n        document.getElementById(\"NoMatches\").style.display='none';\n      }\n      this.lastMatchCount = matches;\n      return true;\n    }\n\n    // return the first item with index index or higher that is visible\n    this.NavNext = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index++;\n      }\n      return focusItem;\n    }\n\n    this.NavPrev = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index--;\n      }\n      return focusItem;\n    }\n\n    this.ProcessKeys = function(e)\n    {\n      if (e.type == \"keydown\")\n      {\n        this.repeatOn = false;\n        this.lastKey = e.keyCode;\n      }\n      else if (e.type == \"keypress\")\n      {\n        if (!this.repeatOn)\n        {\n          if (this.lastKey) this.repeatOn = true;\n          return false; // ignore first keypress after keydown\n        }\n      }\n      else if (e.type == \"keyup\")\n      {\n        this.lastKey = 0;\n        this.repeatOn = false;\n      }\n      return this.lastKey!=0;\n    }\n\n    this.Nav = function(evt,itemIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        var newIndex = itemIndex-1;\n        var focusItem = this.NavPrev(newIndex);\n        if (focusItem)\n        {\n          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n          if (child && child.style.display == 'block') // children visible\n          {\n            var n=0;\n            var tmpElem;\n            while (1) // search for last child\n            {\n              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n              if (tmpElem)\n              {\n                focusItem = tmpElem;\n              }\n              else // found it!\n              {\n                break;\n              }\n              n++;\n            }\n          }\n        }\n        if (focusItem)\n        {\n          focusItem.focus();\n        }\n        else // return focus to search field\n        {\n           parent.document.getElementById(\"MSearchField\").focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = itemIndex+1;\n        var focusItem;\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem && elem.style.display == 'block') // children visible\n        {\n          focusItem = document.getElementById('Item'+itemIndex+'_c0');\n        }\n        if (!focusItem) focusItem = this.NavNext(newIndex);\n        if (focusItem)  focusItem.focus();\n      }\n      else if (this.lastKey==39) // Right\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'block';\n      }\n      else if (this.lastKey==37) // Left\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'none';\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n\n    this.NavChild = function(evt,itemIndex,childIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        if (childIndex>0)\n        {\n          var newIndex = childIndex-1;\n          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n        }\n        else // already at first child, jump to parent\n        {\n          document.getElementById('Item'+itemIndex).focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = childIndex+1;\n        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n        if (!elem) // last child, jump to parent next parent\n        {\n          elem = this.NavNext(itemIndex+1);\n        }\n        if (elem)\n        {\n          elem.focus();\n        }\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n}\n\nfunction setKeyActions(elem,action)\n{\n  elem.setAttribute('onkeydown',action);\n  elem.setAttribute('onkeypress',action);\n  elem.setAttribute('onkeyup',action);\n}\n\nfunction setClassAttr(elem,attr)\n{\n  elem.setAttribute('class',attr);\n  elem.setAttribute('className',attr);\n}\n\nfunction createResults()\n{\n  var results = document.getElementById(\"SRResults\");\n  for (var e=0; e<searchData.length; e++)\n  {\n    var id = searchData[e][0];\n    var srResult = document.createElement('div');\n    srResult.setAttribute('id','SR_'+id);\n    setClassAttr(srResult,'SRResult');\n    var srEntry = document.createElement('div');\n    setClassAttr(srEntry,'SREntry');\n    var srLink = document.createElement('a');\n    srLink.setAttribute('id','Item'+e);\n    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n    setClassAttr(srLink,'SRSymbol');\n    srLink.innerHTML = searchData[e][1][0];\n    srEntry.appendChild(srLink);\n    if (searchData[e][1].length==2) // single result\n    {\n      srLink.setAttribute('href',searchData[e][1][1][0]);\n      if (searchData[e][1][1][1])\n      {\n       srLink.setAttribute('target','_parent');\n      }\n      var srScope = document.createElement('span');\n      setClassAttr(srScope,'SRScope');\n      srScope.innerHTML = searchData[e][1][1][2];\n      srEntry.appendChild(srScope);\n    }\n    else // multiple results\n    {\n      srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n      var srChildren = document.createElement('div');\n      setClassAttr(srChildren,'SRChildren');\n      for (var c=0; c<searchData[e][1].length-1; c++)\n      {\n        var srChild = document.createElement('a');\n        srChild.setAttribute('id','Item'+e+'_c'+c);\n        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n        setClassAttr(srChild,'SRScope');\n        srChild.setAttribute('href',searchData[e][1][c+1][0]);\n        if (searchData[e][1][c+1][1])\n        {\n         srChild.setAttribute('target','_parent');\n        }\n        srChild.innerHTML = searchData[e][1][c+1][2];\n        srChildren.appendChild(srChild);\n      }\n      srEntry.appendChild(srChildren);\n    }\n    srResult.appendChild(srEntry);\n    results.appendChild(srResult);\n  }\n}\n\nfunction init_search()\n{\n  var results = document.getElementById(\"MSearchSelectWindow\");\n  for (var key in indexSectionLabels)\n  {\n    var link = document.createElement('a');\n    link.setAttribute('class','SelectItem');\n    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');\n    link.href='javascript:void(0)';\n    link.innerHTML='<span class=\"SelectionMark\">&#160;</span>'+indexSectionLabels[key];\n    results.appendChild(link);\n  }\n  searchBox.OnSelectItem(0);\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/searchdata.js",
    "content": "var indexSectionsWithContent =\n{\n  0: \"abcdefghilmnopqrstuvwyz\",\n  1: \"abcdefghilmnopqrstuvw\",\n  2: \"abcdefghilmnopqrstuvwyz\",\n  3: \"abdfhilmpqsuvw\",\n  4: \"acefgimrsv\",\n  5: \"o\"\n};\n\nvar indexSectionNames =\n{\n  0: \"all\",\n  1: \"files\",\n  2: \"functions\",\n  3: \"typedefs\",\n  4: \"groups\",\n  5: \"pages\"\n};\n\nvar indexSectionLabels =\n{\n  0: \"All\",\n  1: \"Files\",\n  2: \"Functions\",\n  3: \"Typedefs\",\n  4: \"Modules\",\n  5: \"Pages\"\n};\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_0.js",
    "content": "var searchData=\n[\n  ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]],\n  ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]],\n  ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]],\n  ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]],\n  ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]],\n  ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]],\n  ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]],\n  ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]],\n  ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]],\n  ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]],\n  ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]],\n  ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]],\n  ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]],\n  ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]],\n  ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]],\n  ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]],\n  ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]],\n  ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]],\n  ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]],\n  ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]],\n  ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]],\n  ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]],\n  ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]],\n  ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]],\n  ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]],\n  ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]],\n  ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]],\n  ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]],\n  ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]],\n  ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]],\n  ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]],\n  ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]],\n  ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]],\n  ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]],\n  ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]],\n  ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]],\n  ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]],\n  ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]],\n  ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]],\n  ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]],\n  ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]],\n  ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]],\n  ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]],\n  ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]],\n  ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]],\n  ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]],\n  ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]],\n  ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]],\n  ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]],\n  ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]],\n  ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]],\n  ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]],\n  ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]],\n  ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]],\n  ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]],\n  ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]],\n  ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]],\n  ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]],\n  ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]],\n  ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]],\n  ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]],\n  ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]],\n  ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]],\n  ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]],\n  ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]],\n  ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]],\n  ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]],\n  ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]],\n  ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]],\n  ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]],\n  ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]],\n  ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]],\n  ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]],\n  ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]],\n  ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]],\n  ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]],\n  ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]],\n  ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]],\n  ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]],\n  ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]],\n  ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]],\n  ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]],\n  ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]],\n  ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]],\n  ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]],\n  ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]],\n  ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]],\n  ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]],\n  ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]],\n  ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]],\n  ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]],\n  ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]],\n  ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]],\n  ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]],\n  ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]],\n  ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]],\n  ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]],\n  ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]],\n  ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]],\n  ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]],\n  ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]],\n  ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]],\n  ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]],\n  ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]],\n  ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]],\n  ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]],\n  ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]],\n  ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]],\n  ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]],\n  ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]],\n  ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]],\n  ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]],\n  ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]],\n  ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]],\n  ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]],\n  ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]],\n  ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]],\n  ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]],\n  ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]],\n  ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]],\n  ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]],\n  ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]],\n  ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]],\n  ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_1.js",
    "content": "var searchData=\n[\n  ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]],\n  ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]],\n  ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]],\n  ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]],\n  ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]],\n  ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]],\n  ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]],\n  ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]],\n  ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]],\n  ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]],\n  ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]],\n  ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]],\n  ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]],\n  ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]],\n  ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]],\n  ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]],\n  ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]],\n  ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]],\n  ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_2.js",
    "content": "var searchData=\n[\n  ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]],\n  ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]],\n  ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]],\n  ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]],\n  ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]],\n  ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]],\n  ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]],\n  ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]],\n  ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]],\n  ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]],\n  ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]],\n  ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]],\n  ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]],\n  ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]],\n  ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]],\n  ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]],\n  ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]],\n  ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]],\n  ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]],\n  ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]],\n  ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]],\n  ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]],\n  ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]],\n  ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]],\n  ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]],\n  ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]],\n  ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]],\n  ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]],\n  ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]],\n  ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]],\n  ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]],\n  ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]],\n  ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]],\n  ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_3.js",
    "content": "var searchData=\n[\n  ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]],\n  ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]],\n  ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]],\n  ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]],\n  ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]],\n  ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]],\n  ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]],\n  ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]],\n  ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]],\n  ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]],\n  ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]],\n  ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]],\n  ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]],\n  ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]],\n  ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]],\n  ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]],\n  ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]],\n  ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]],\n  ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]],\n  ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]],\n  ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]],\n  ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]],\n  ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]],\n  ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]],\n  ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]],\n  ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]],\n  ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]],\n  ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]],\n  ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]],\n  ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]],\n  ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]],\n  ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]],\n  ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]],\n  ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]],\n  ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]],\n  ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]],\n  ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]],\n  ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]],\n  ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]],\n  ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]],\n  ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]],\n  ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]],\n  ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]],\n  ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]],\n  ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]],\n  ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]],\n  ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]],\n  ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]],\n  ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]],\n  ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]],\n  ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]],\n  ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]],\n  ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]],\n  ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]],\n  ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]],\n  ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]],\n  ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]],\n  ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]],\n  ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]],\n  ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]],\n  ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]],\n  ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]],\n  ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]],\n  ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]],\n  ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]],\n  ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]],\n  ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]],\n  ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]],\n  ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]],\n  ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]],\n  ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]],\n  ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]],\n  ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]],\n  ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]],\n  ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_4.js",
    "content": "var searchData=\n[\n  ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]],\n  ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]],\n  ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]],\n  ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]],\n  ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]],\n  ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]],\n  ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]],\n  ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]],\n  ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]],\n  ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]],\n  ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]],\n  ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]],\n  ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]],\n  ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]],\n  ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]],\n  ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]],\n  ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]],\n  ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]],\n  ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]],\n  ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]],\n  ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]],\n  ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]],\n  ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]],\n  ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]],\n  ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]],\n  ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]],\n  ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]],\n  ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]],\n  ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]],\n  ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]],\n  ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]],\n  ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]],\n  ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]],\n  ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]],\n  ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]],\n  ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]],\n  ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]],\n  ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]],\n  ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]],\n  ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]],\n  ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]],\n  ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]],\n  ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]],\n  ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]],\n  ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]],\n  ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]],\n  ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]],\n  ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]],\n  ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]],\n  ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]],\n  ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]],\n  ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]],\n  ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]],\n  ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]],\n  ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]],\n  ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]],\n  ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]],\n  ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]],\n  ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]],\n  ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]],\n  ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]],\n  ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]],\n  ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]],\n  ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]],\n  ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]],\n  ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]],\n  ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]],\n  ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]],\n  ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]],\n  ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]],\n  ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]],\n  ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]],\n  ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]],\n  ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]],\n  ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]],\n  ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]],\n  ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]],\n  ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]],\n  ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]],\n  ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]],\n  ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]],\n  ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]],\n  ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]],\n  ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]],\n  ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]],\n  ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]],\n  ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]],\n  ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]],\n  ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]],\n  ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]],\n  ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]],\n  ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]],\n  ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]],\n  ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]],\n  ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]],\n  ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]],\n  ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]],\n  ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]],\n  ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]],\n  ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]],\n  ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]],\n  ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]],\n  ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]],\n  ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]],\n  ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]],\n  ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]],\n  ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]],\n  ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]],\n  ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]],\n  ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]],\n  ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]],\n  ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]],\n  ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]],\n  ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]],\n  ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]],\n  ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]],\n  ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]],\n  ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]],\n  ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]],\n  ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]],\n  ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]],\n  ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]],\n  ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]],\n  ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]],\n  ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]],\n  ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]],\n  ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]],\n  ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]],\n  ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]],\n  ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]],\n  ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]],\n  ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]],\n  ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]],\n  ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]],\n  ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]],\n  ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]],\n  ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]],\n  ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]],\n  ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]],\n  ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]],\n  ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]],\n  ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]],\n  ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]],\n  ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]],\n  ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]],\n  ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]],\n  ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]],\n  ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]],\n  ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]],\n  ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]],\n  ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]],\n  ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]],\n  ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]],\n  ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]],\n  ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]],\n  ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]],\n  ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]],\n  ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]],\n  ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]],\n  ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]],\n  ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]],\n  ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]],\n  ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]],\n  ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]],\n  ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]],\n  ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]],\n  ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]],\n  ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]],\n  ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]],\n  ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]],\n  ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]],\n  ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]],\n  ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]],\n  ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]],\n  ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]],\n  ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]],\n  ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]],\n  ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]],\n  ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]],\n  ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]],\n  ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]],\n  ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]],\n  ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]],\n  ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]],\n  ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_5.js",
    "content": "var searchData=\n[\n  ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]],\n  ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]],\n  ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]],\n  ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]],\n  ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]],\n  ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]],\n  ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]],\n  ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]],\n  ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]],\n  ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]],\n  ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]],\n  ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]],\n  ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]],\n  ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]],\n  ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]],\n  ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]],\n  ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]],\n  ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]],\n  ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]],\n  ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]],\n  ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]],\n  ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]],\n  ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]],\n  ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]],\n  ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]],\n  ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]],\n  ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]],\n  ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]],\n  ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]],\n  ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]],\n  ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]],\n  ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]],\n  ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]],\n  ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]],\n  ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]],\n  ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]],\n  ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]],\n  ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]],\n  ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]],\n  ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]],\n  ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]],\n  ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]],\n  ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]],\n  ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]],\n  ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]],\n  ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]],\n  ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]],\n  ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]],\n  ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]],\n  ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]],\n  ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]],\n  ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]],\n  ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]],\n  ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]],\n  ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]],\n  ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]],\n  ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]],\n  ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_6.js",
    "content": "var searchData=\n[\n  ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]],\n  ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]],\n  ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]],\n  ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]],\n  ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]],\n  ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]],\n  ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]],\n  ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]],\n  ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]],\n  ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]],\n  ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]],\n  ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]],\n  ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]],\n  ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]],\n  ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]],\n  ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]],\n  ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]],\n  ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]],\n  ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]],\n  ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]],\n  ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]],\n  ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]],\n  ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]],\n  ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]],\n  ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]],\n  ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]],\n  ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]],\n  ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]],\n  ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]],\n  ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]],\n  ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]],\n  ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]],\n  ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]],\n  ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]],\n  ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]],\n  ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]],\n  ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]],\n  ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]],\n  ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]],\n  ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]],\n  ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]],\n  ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]],\n  ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]],\n  ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]],\n  ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]],\n  ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]],\n  ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]],\n  ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]],\n  ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]],\n  ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]],\n  ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]],\n  ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]],\n  ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]],\n  ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]],\n  ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]],\n  ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]],\n  ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]],\n  ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]],\n  ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]],\n  ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]],\n  ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]],\n  ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]],\n  ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]],\n  ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]],\n  ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]],\n  ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]],\n  ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]],\n  ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]],\n  ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]],\n  ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]],\n  ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]],\n  ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]],\n  ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]],\n  ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]],\n  ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]],\n  ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]],\n  ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]],\n  ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]],\n  ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]],\n  ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]],\n  ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]],\n  ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]],\n  ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]],\n  ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]],\n  ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]],\n  ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]],\n  ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]],\n  ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]],\n  ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]],\n  ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]],\n  ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]],\n  ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]],\n  ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]],\n  ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]],\n  ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]],\n  ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]],\n  ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]],\n  ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]],\n  ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]],\n  ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]],\n  ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]],\n  ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]],\n  ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]],\n  ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]],\n  ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]],\n  ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]],\n  ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]],\n  ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]],\n  ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]],\n  ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]],\n  ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]],\n  ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]],\n  ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]],\n  ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]],\n  ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]],\n  ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]],\n  ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]],\n  ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]],\n  ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]],\n  ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]],\n  ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]],\n  ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]],\n  ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]],\n  ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]],\n  ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]],\n  ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]],\n  ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]],\n  ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]],\n  ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]],\n  ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]],\n  ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]],\n  ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]],\n  ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]],\n  ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]],\n  ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]],\n  ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]],\n  ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]],\n  ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]],\n  ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]],\n  ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]],\n  ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]],\n  ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]],\n  ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]],\n  ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]],\n  ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]],\n  ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]],\n  ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]],\n  ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]],\n  ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]],\n  ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]],\n  ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]],\n  ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]],\n  ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]],\n  ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]],\n  ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]],\n  ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]],\n  ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]],\n  ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]],\n  ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]],\n  ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]],\n  ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]],\n  ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]],\n  ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]],\n  ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]],\n  ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]],\n  ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]],\n  ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]],\n  ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]],\n  ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]],\n  ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]],\n  ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]],\n  ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]],\n  ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]],\n  ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]],\n  ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]],\n  ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]],\n  ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]],\n  ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]],\n  ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]],\n  ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]],\n  ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]],\n  ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]],\n  ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]],\n  ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]],\n  ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_7.js",
    "content": "var searchData=\n[\n  ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]],\n  ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]],\n  ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]],\n  ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]],\n  ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]],\n  ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]],\n  ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]],\n  ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]],\n  ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]],\n  ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]],\n  ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]],\n  ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]],\n  ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]],\n  ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]],\n  ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]],\n  ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]],\n  ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]],\n  ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]],\n  ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]],\n  ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]],\n  ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]],\n  ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]],\n  ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]],\n  ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]],\n  ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]],\n  ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]],\n  ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]],\n  ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]],\n  ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]],\n  ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]],\n  ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]],\n  ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]],\n  ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]],\n  ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]],\n  ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]],\n  ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]],\n  ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]],\n  ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]],\n  ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]],\n  ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]],\n  ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]],\n  ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]],\n  ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]],\n  ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]],\n  ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]],\n  ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]],\n  ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]],\n  ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]],\n  ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]],\n  ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]],\n  ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]],\n  ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]],\n  ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]],\n  ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]],\n  ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]],\n  ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]],\n  ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]],\n  ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]],\n  ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]],\n  ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]],\n  ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]],\n  ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]],\n  ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]],\n  ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]],\n  ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]],\n  ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]],\n  ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]],\n  ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]],\n  ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]],\n  ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]],\n  ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]],\n  ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]],\n  ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]],\n  ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]],\n  ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]],\n  ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]],\n  ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]],\n  ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]],\n  ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]],\n  ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]],\n  ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]],\n  ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]],\n  ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]],\n  ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]],\n  ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]],\n  ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]],\n  ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]],\n  ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]],\n  ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]],\n  ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]],\n  ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]],\n  ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]],\n  ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]],\n  ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]],\n  ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]],\n  ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]],\n  ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]],\n  ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]],\n  ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]],\n  ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]],\n  ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]],\n  ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]],\n  ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]],\n  ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]],\n  ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]],\n  ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]],\n  ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]],\n  ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]],\n  ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]],\n  ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]],\n  ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]],\n  ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]],\n  ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]],\n  ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]],\n  ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]],\n  ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]],\n  ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]],\n  ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]],\n  ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]],\n  ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]],\n  ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]],\n  ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]],\n  ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]],\n  ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]],\n  ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]],\n  ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]],\n  ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]],\n  ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]],\n  ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]],\n  ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]],\n  ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]],\n  ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]],\n  ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]],\n  ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]],\n  ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]],\n  ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]],\n  ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]],\n  ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]],\n  ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]],\n  ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]],\n  ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]],\n  ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]],\n  ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]],\n  ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]],\n  ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]],\n  ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]],\n  ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]],\n  ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]],\n  ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]],\n  ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]],\n  ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]],\n  ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]],\n  ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]],\n  ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]],\n  ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]],\n  ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]],\n  ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]],\n  ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]],\n  ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]],\n  ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]],\n  ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]],\n  ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]],\n  ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]],\n  ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]],\n  ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]],\n  ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]],\n  ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]],\n  ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]],\n  ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]],\n  ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]],\n  ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]],\n  ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]],\n  ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]],\n  ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]],\n  ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]],\n  ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]],\n  ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]],\n  ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]],\n  ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]],\n  ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]],\n  ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]],\n  ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]],\n  ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]],\n  ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]],\n  ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]],\n  ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]],\n  ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]],\n  ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]],\n  ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]],\n  ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]],\n  ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]],\n  ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]],\n  ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]],\n  ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]],\n  ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]],\n  ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]],\n  ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_8.js",
    "content": "var searchData=\n[\n  ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]],\n  ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]],\n  ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]],\n  ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]],\n  ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]],\n  ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]],\n  ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]],\n  ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]],\n  ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]],\n  ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]],\n  ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]],\n  ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]],\n  ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]],\n  ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]],\n  ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]],\n  ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]],\n  ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]],\n  ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]],\n  ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]],\n  ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]],\n  ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]],\n  ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]],\n  ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]],\n  ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]],\n  ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]],\n  ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]],\n  ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]],\n  ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]],\n  ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]],\n  ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]],\n  ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]],\n  ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]],\n  ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]],\n  ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]],\n  ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]],\n  ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]],\n  ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]],\n  ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]],\n  ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]],\n  ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]],\n  ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]],\n  ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]],\n  ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]],\n  ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]],\n  ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]],\n  ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]],\n  ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]],\n  ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]],\n  ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]],\n  ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]],\n  ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]],\n  ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]],\n  ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]],\n  ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]],\n  ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]],\n  ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]],\n  ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]],\n  ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]],\n  ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]],\n  ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]],\n  ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]],\n  ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]],\n  ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]],\n  ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]],\n  ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]],\n  ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]],\n  ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]],\n  ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]],\n  ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]],\n  ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]],\n  ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]],\n  ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]],\n  ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]],\n  ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]],\n  ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]],\n  ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]],\n  ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]],\n  ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]],\n  ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]],\n  ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]],\n  ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]],\n  ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]],\n  ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]],\n  ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]],\n  ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]],\n  ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]],\n  ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]],\n  ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]],\n  ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]],\n  ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]],\n  ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]],\n  ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]],\n  ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]],\n  ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]],\n  ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]],\n  ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]],\n  ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]],\n  ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]],\n  ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]],\n  ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]],\n  ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]],\n  ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]],\n  ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]],\n  ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]],\n  ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]],\n  ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]],\n  ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]],\n  ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]],\n  ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]],\n  ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]],\n  ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]],\n  ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]],\n  ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]],\n  ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]],\n  ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]],\n  ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]],\n  ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]],\n  ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]],\n  ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]],\n  ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]],\n  ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]],\n  ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]],\n  ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]],\n  ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]],\n  ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]],\n  ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]],\n  ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]],\n  ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]],\n  ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]],\n  ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]],\n  ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]],\n  ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]],\n  ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]],\n  ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]],\n  ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]],\n  ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]],\n  ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]],\n  ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]],\n  ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]],\n  ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]],\n  ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]],\n  ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]],\n  ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]],\n  ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]],\n  ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]],\n  ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]],\n  ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]],\n  ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]],\n  ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]],\n  ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]],\n  ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]],\n  ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]],\n  ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]],\n  ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]],\n  ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]],\n  ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]],\n  ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_9.js",
    "content": "var searchData=\n[\n  ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]],\n  ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_a.js",
    "content": "var searchData=\n[\n  ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]],\n  ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]],\n  ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]],\n  ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]],\n  ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]],\n  ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]],\n  ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]],\n  ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]],\n  ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_b.js",
    "content": "var searchData=\n[\n  ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]],\n  ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]],\n  ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]],\n  ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]],\n  ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]],\n  ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]],\n  ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]],\n  ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]],\n  ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]],\n  ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]],\n  ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]],\n  ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]],\n  ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]],\n  ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]],\n  ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]],\n  ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]],\n  ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]],\n  ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]],\n  ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]],\n  ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]],\n  ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]],\n  ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]],\n  ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]],\n  ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]],\n  ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]],\n  ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]],\n  ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]],\n  ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]],\n  ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]],\n  ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]],\n  ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]],\n  ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]],\n  ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]],\n  ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]],\n  ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]],\n  ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]],\n  ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]],\n  ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]],\n  ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]],\n  ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]],\n  ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]],\n  ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]],\n  ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]],\n  ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_c.js",
    "content": "var searchData=\n[\n  ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]],\n  ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]],\n  ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]],\n  ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/search/typedefs_d.js",
    "content": "var searchData=\n[\n  ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]]\n];\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/api/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/man.doxy",
    "content": "# Doxyfile 1.8.10\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the config file\n# that follow. The default is UTF-8 which is also the encoding used for all text\n# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n# for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = \"0.9.9 API documentation\"\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         = \n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          = \n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           = theme/logo-mini.png\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = .\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class       \" \\\n                         \"The $name widget       \" \\\n                         \"The $name file       \" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = NO\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        = \"C:/Documents and Settings/Groove/       \"\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = YES\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = YES\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 8\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines.\n\nALIASES                = \n\n# This tag can be used to specify a number of word-keyword mappings (TCL only).\n# A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n# will allow you to use the command class in the itcl::class meaning.\n\nTCL_SUBST              = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:\n# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:\n# Fortran. In the later case the parser tries to guess whether the code is fixed\n# or free formatted code, this is the default for Fortran type files), VHDL. For\n# instance to make doxygen treat .inc files as Fortran files (default is PHP),\n# and .f files as C (default is Fortran), use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      = \n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See http://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = NO\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = NO\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = YES\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = YES\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# (class|struct|union) declarations. If set to NO, these declarations will be\n# included in the documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = YES\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = YES\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES, upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# and Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = YES\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = NO\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = NO\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = YES\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = YES\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = NO\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    = \n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            = \n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         = \n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong or incomplete\n# parameter documentation, but not about the absence of documentation.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = ../glm \\\n                         .\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: http://www.gnu.org/software/libiconv) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,\n# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,\n# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,\n# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,\n# *.vhdl, *.ucf, *.qsf, *.as and *.js.\n\nFILE_PATTERNS          = *.hpp \\\n                         *.doxy\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = \n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n\nINPUT_FILTER           = \n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n\nFILTER_PATTERNS        = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS = \n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE = \n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = YES\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# function all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = YES\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = YES\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see http://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the config file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\n# cost of reduced performance. This can be particularly helpful with template\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\n# information.\n# Note: The availability of this option depends on whether or not doxygen was\n# compiled with the --with-libclang option.\n# The default value is: NO.\n\nCLANG_ASSISTED_PARSING = NO\n\n# If clang assisted parsing is enabled you can provide the compiler with command\n# line options that you would normally use when invoking the compiler. Note that\n# the include paths will already be set by doxygen for the files and directories\n# specified with INPUT and INCLUDE_PATH.\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\n\nCLANG_OPTIONS          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = NO\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        = \n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list). For an example see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  = \n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       = \n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to YES can help to show when doxygen was last run and thus if the\n# documentation is up to date.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = NO\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: http://developer.apple.com/tools/xcode/), introduced with\n# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n# for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               = \n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           = \n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the master .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     = \n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               = \n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   = \n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  = \n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  = \n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           = \n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# http://www.mathjax.org) which uses client side Javascript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from http://www.mathjax.org before deployment.\n# The default value is: http://cdn.mathjax.org/mathjax/latest.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://www.mathjax.org/mathjax\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     = \n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       = \n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = YES\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using Javascript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       = \n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     = \n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when enabling USE_PDFLATEX this option is only used for generating\n# bitmaps for formulas in the HTML output, but not in the Makefile that is\n# written to the output directory.\n# The default file is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber,\n# $projectbrief, $projectlogo. Doxygen will replace $title with the empty\n# string, for the replacement values of the other commands the user is referred\n# to HTML_HEADER.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           = \n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           = \n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET = \n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = NO\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n# the PDF file directly from the LaTeX files. Set this option to YES, to get a\n# higher quality PDF documentation.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = glm.rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = YES\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's config\n# file, i.e. a series of assignments. You only have to provide replacements,\n# missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's config file. A template extensions file can be generated\n# using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    = \n\n# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code\n# with syntax highlighting in the RTF output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_SOURCE_CODE        = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             = \n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the\n# program listings (including syntax highlighting and cross-referencing\n# information) to the DOCBOOK output. Note that enabling this will significantly\n# increase the size of the DOCBOOK output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_PROGRAMLISTING = NO\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see http://autogen.sf.net) file that captures the\n# structure of the code including all documentation. Note that this feature is\n# still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES, all external class will be listed in\n# the class index. If set to NO, only the inherited external classes will be\n# listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script\n# interpreter (i.e. the result of 'which perl').\n# The default file (with absolute path) is: /usr/bin/perl.\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. Doxygen will then run the mscgen tool (see:\n# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n# documentation. The MSCGEN_PATH tag allows you to specify the directory where\n# the mscgen tool resides. If left empty the tool is assumed to be found in the\n# default search path.\n\nMSCGEN_PATH            = \n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               = \n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font in the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = Helvetica\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           = \n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = YES\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = YES\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# http://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           = \n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           = \n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           = \n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file. If left blank, it is assumed\n# PlantUML is not used or called during a preprocessing step. Doxygen will\n# generate a warning when it encounters a \\startuml command in this case and\n# will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      = \n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  = \n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 1000\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/doc/theme/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.10 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\nbody\n{\n\tmargin:0px;\n\tpadding:0px;\n\tbackground-color:#bf6000;\n\tbackground-repeat:no-repeat;\n\tbackground-position:center center;\n\tbackground-attachment:fixed;\n\tmin-height:1200px;\n\toverflow:auto;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tcolor:#bf6000;\n\tfont-size: 150%;\n}\n\n.title {\n\tcolor:#bf6000;\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #bf6000;\n\tcolor:#bf6000;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #000000;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #606060;\n}\n\n.contents{\n\tbackground-color: #FFFFFF;\n\tpadding-top:8px;\n\tpadding-bottom:8px;\n\tpadding-left:32px; \n\tpadding-right:32px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1216px;\n\tborder-bottom-left-radius: 8px;\n\tborder-bottom-right-radius: 8px;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #FF8000;\n        background-color: #FFF8F0;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n\tfont-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n\twhite-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tcolor: black;\n\tmargin: 0;\n}\n\ntd.indexkey {\n\tbackground-color: #FFF8F0;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n\twhite-space: nowrap;\n\tvertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #FFF8F0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n\tmargin-top: 0px;\n\tmargin-bottom: 0px;\n\tpadding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\tdisplay: none;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #FF8000;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\tdisplay: none;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FFFCF8;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #FFF8F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #bf6000;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #bf6000;\n        border-left: 1px solid #bf6000;\n        border-right: 1px solid #bf6000;\n        padding: 6px 0px 6px 0px;\n        /*color: #253555;*/\n        font-weight: bold;\n        /*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/\n        /*background-image:url('nav_f.png');*/\n        background-repeat:repeat-x;\n        background-color: #FFF8F0;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #bf6000;      \n        border-left: 1px solid #bf6000;      \n        border-right: 1px solid #bf6000; \n        padding: 6px 10px 2px 10px;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFDFB;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n\tbackground-color: #728DC1;\n\tborder-top:1px solid #5373B4;\n\tborder-left:1px solid #5373B4;\n\tborder-right:1px solid #C4CFE5;\n\tborder-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #bf6000;\n        border-bottom: 1px solid #bf6000;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n\twhite-space: nowrap;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n\twidth: 100%;\n\tpadding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #FFFDFB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n\tcursor: pointer;\n\tpadding-left: 2px;\n\tpadding-right: 2px;\n\tcolor: #bf6000;\n}\n\n.arrow {\n    color: #bf6000;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #bf6000;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n\tmargin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n\tmargin-top: 4px;\n\tmargin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\t/*background-image:url('tab_b.png');*/\n\tbackground-color: #FFF8F0;\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#bf6000;\n\tborder:solid 0px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#bf6000;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #bf6000;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#bf6000;\n        font-size: 8pt;\n}\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}\n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n\tbackground-repeat:repeat-x;\n\tbackground-color: #FFFCF8;\n\n\tpadding:0px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #E0C000;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectalign\n{\n        vertical-align: middle;\n}\n\n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n\tcolor: #FF8000;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n\tfont-weight: bold;\n\tcolor: gray;\n\tcursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#titlearea\n{\n\tmargin: 0px;\n\tpadding-top: 8px;\n\tpadding-bottom: 8px;\n\tmargin-top: 32px;\n\twidth: 100%;\n\tborder-bottom: 0px solid #FF8000;\n\tborder-top-left-radius: 8px;\n\tborder-top-right-radius: 8px;\n\tbackground-color:#FFFFFF;\n}\n\n#top\n{\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/CMakeLists.txt",
    "content": "file(GLOB ROOT_SOURCE *.cpp)\nfile(GLOB ROOT_INLINE *.inl)\nfile(GLOB ROOT_HEADER *.hpp)\nfile(GLOB ROOT_TEXT ../*.txt)\nfile(GLOB ROOT_MD ../*.md)\nfile(GLOB ROOT_NAT ../util/glm.natvis)\n\nfile(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)\nfile(GLOB_RECURSE CORE_INLINE ./detail/*.inl)\nfile(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)\n\nfile(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp)\nfile(GLOB_RECURSE EXT_INLINE ./ext/*.inl)\nfile(GLOB_RECURSE EXT_HEADER ./ext/*.hpp)\n\nfile(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)\nfile(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)\nfile(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)\n\nfile(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)\nfile(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)\nfile(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)\n\nfile(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)\nfile(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)\nfile(GLOB_RECURSE SIMD_HEADER ./simd/*.h)\n\nsource_group(\"Text Files\" FILES ${ROOT_TEXT} ${ROOT_MD})\nsource_group(\"Core Files\" FILES ${CORE_SOURCE})\nsource_group(\"Core Files\" FILES ${CORE_INLINE})\nsource_group(\"Core Files\" FILES ${CORE_HEADER})\nsource_group(\"EXT Files\" FILES ${EXT_SOURCE})\nsource_group(\"EXT Files\" FILES ${EXT_INLINE})\nsource_group(\"EXT Files\" FILES ${EXT_HEADER})\nsource_group(\"GTC Files\" FILES ${GTC_SOURCE})\nsource_group(\"GTC Files\" FILES ${GTC_INLINE})\nsource_group(\"GTC Files\" FILES ${GTC_HEADER})\nsource_group(\"GTX Files\" FILES ${GTX_SOURCE})\nsource_group(\"GTX Files\" FILES ${GTX_INLINE})\nsource_group(\"GTX Files\" FILES ${GTX_HEADER})\nsource_group(\"SIMD Files\" FILES ${SIMD_SOURCE})\nsource_group(\"SIMD Files\" FILES ${SIMD_INLINE})\nsource_group(\"SIMD Files\" FILES ${SIMD_HEADER})\n\nadd_library(glm INTERFACE)\n\ninclude(GNUInstallDirs)\n\ntarget_include_directories(glm INTERFACE\n\t$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>\n\t$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\n)\n\ninstall(TARGETS glm EXPORT glm)\n\nif(BUILD_STATIC_LIBS)\nadd_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}\n\t${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}\n\t${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}\n\t${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}\n\t${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}\n\t${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}\n\t${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})\n\ttarget_link_libraries(glm_static PUBLIC glm)\n\tadd_library(glm::glm_static ALIAS glm_static)\nendif()\n\nif(BUILD_SHARED_LIBS)\nadd_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}\n\t${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}\n\t${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}\n\t${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}\n\t${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}\n\t${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}\n\t${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})\n\ttarget_link_libraries(glm_shared PUBLIC glm)\n\tadd_library(glm::glm_shared ALIAS glm_shared)\nendif()\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/common.hpp",
    "content": "/// @ref core\n/// @file glm/common.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n///\n/// @defgroup core_func_common Common functions\n/// @ingroup core\n///\n/// Provides GLSL common functions\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/common.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"detail/_fixes.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_common\n\t/// @{\n\n\t/// Returns x if x >= 0; otherwise, it returns -x.\n\t///\n\t/// @tparam genType floating-point or signed integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x);\n\n\t/// Returns x if x >= 0; otherwise, it returns -x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x);\n\n\t/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml\">GLSL sign man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer that is less then or equal to x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml\">GLSL floor man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x\n\t/// whose absolute value is not larger than the absolute value of x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml\">GLSL trunc man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t/// This includes the possibility that round(x) returns the\n\t/// same value as roundEven(x) for all values of x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// A fractional part of 0.5 will round toward the nearest even\n\t/// integer. (Both 3.5 and 4.5 for x will return 4.0.)\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml\">GLSL roundEven man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\t/// @see <a href=\"http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx\">New round to even technique</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer\n\t/// that is greater than or equal to x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml\">GLSL ceil man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x);\n\n\t/// Return x - floor(x).\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fract(genType x);\n\n\t/// Return x - floor(x).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x);\n\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mod(genType x, genType y);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y);\n\n\t/// Modulus. Returns x - y * floor(x / y)\n\t/// for each component in x using the floating point value y.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the fractional part of x and sets i to the integer\n\t/// part (as a whole number floating point value). Both the\n\t/// return value and the output parameter will have the same\n\t/// sign as x.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml\">GLSL modf man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType modf(genType x, genType& i);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_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);\n\n\t/// If genTypeU is a floating scalar or vector:\n\t/// Returns x * (1.0 - a) + y * a, i.e., the linear blend of\n\t/// x and y using the floating-point value a.\n\t/// The value for a is not restricted to the range [0, 1].\n\t///\n\t/// If genTypeU is a boolean scalar or vector:\n\t/// Selects which vector each returned component comes\n\t/// from. For a component of 'a' that is false, the\n\t/// corresponding component of 'x' is returned. For a\n\t/// component of 'a' that is true, the corresponding\n\t/// component of 'y' is returned. Components of 'x' and 'y' that\n\t/// are not selected are allowed to be invalid floating point\n\t/// values and will have no effect on the results. Thus, this\n\t/// provides different functionality than\n\t/// genType mix(genType x, genType y, genType(a))\n\t/// where a is a Boolean vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml\">GLSL mix man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\t///\n\t/// @param[in]  x Value to interpolate.\n\t/// @param[in]  y Value to interpolate.\n\t/// @param[in]  a Interpolant.\n\t///\n\t/// @tparam\tgenTypeT Floating point scalar or vector.\n\t/// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.\n\t///\n\t/// @code\n\t/// #include <glm/glm.hpp>\n\t/// ...\n\t/// float a;\n\t/// bool b;\n\t/// glm::dvec3 e;\n\t/// glm::dvec3 f;\n\t/// glm::vec4 g;\n\t/// glm::vec4 h;\n\t/// ...\n\t/// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.\n\t/// glm::vec4 s = glm::mix(g, h, b); // Returns g or h;\n\t/// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.\n\t/// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.\n\t/// @endcode\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a);\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType step(genType edge, genType x);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x);\n\n\t/// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and\n\t/// performs smooth Hermite interpolation between 0 and 1\n\t/// when edge0 < x < edge1. This is useful in cases where\n\t/// you would want a threshold function with a smooth\n\t/// transition. This is equivalent to:\n\t/// genType t;\n\t/// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);\n\t/// return t * t * (3 - 2 * t);\n\t/// Results are undefined if edge0 >= edge1.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml\">GLSL smoothstep man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x);\n\n\t/// Returns true if x holds a NaN (not a number)\n\t/// representation in the underlying implementation's set of\n\t/// floating point representations. Returns false otherwise,\n\t/// including for implementations with no NaN\n\t/// representations.\n\t///\n\t/// /!\\ When using compiler fast math, this function may fail.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x);\n\n\t/// Returns true if x holds a positive infinity or negative\n\t/// infinity representation in the underlying implementation's\n\t/// set of floating point representations. Returns false\n\t/// otherwise, including for implementations with no infinity\n\t/// representations.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml\">GLSL isinf man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x);\n\n\t/// Returns a signed integer value representing\n\t/// the encoding of a floating-point value. The floating-point\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL int floatBitsToInt(float const& v);\n\n\t/// Returns a signed integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v);\n\n\t/// Returns a unsigned integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL uint floatBitsToUint(float const& v);\n\n\t/// Returns a unsigned integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v);\n\n\t/// Returns a floating-point value corresponding to a signed\n\t/// integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL float intBitsToFloat(int const& v);\n\n\t/// Returns a floating-point value corresponding to a signed\n\t/// integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v);\n\n\t/// Returns a floating-point value corresponding to a\n\t/// unsigned integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL float uintBitsToFloat(uint const& v);\n\n\t/// Returns a floating-point value corresponding to a\n\t/// unsigned integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v);\n\n\t/// Computes and returns a * b + c.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml\">GLSL fma man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c);\n\n\t/// Splits x into a floating-point significand in the range\n\t/// [0.5, 1.0) and an integral exponent of two, such that:\n\t/// x = significand * exp(2, exponent)\n\t///\n\t/// The significand is returned by the function and the\n\t/// exponent is returned in the parameter exp. For a\n\t/// floating-point value of zero, the significant and exponent\n\t/// are both zero. For a floating-point value that is an\n\t/// infinity or is not a number, the results are undefined.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml\">GLSL frexp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType frexp(genType x, int& exp);\n\t\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp);\n\n\t/// Builds a floating-point number from x and the\n\t/// corresponding integral exponent of two in exp, returning:\n\t/// significand * exp(2, exponent)\n\t///\n\t/// If this product is too large to be represented in the\n\t/// floating-point type, the result is undefined.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml\">GLSL ldexp man page</a>;\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType ldexp(genType const& x, int const& exp);\n\t\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_common.inl\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_features.hpp",
    "content": "#pragma once\n\n// #define GLM_CXX98_EXCEPTIONS\n// #define GLM_CXX98_RTTI\n\n// #define GLM_CXX11_RVALUE_REFERENCES\n// Rvalue references - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html\n\n// GLM_CXX11_TRAILING_RETURN\n// Rvalue references for *this - GCC not supported\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm\n\n// GLM_CXX11_NONSTATIC_MEMBER_INIT\n// Initialization of class objects by rvalues - GCC any\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html\n\n// GLM_CXX11_NONSTATIC_MEMBER_INIT\n// Non-static data member initializers - GCC 4.7\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm\n\n// #define GLM_CXX11_VARIADIC_TEMPLATE\n// Variadic templates - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf\n\n//\n// Extending variadic template template parameters - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf\n\n// #define GLM_CXX11_GENERALIZED_INITIALIZERS\n// Initializer lists - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm\n\n// #define GLM_CXX11_STATIC_ASSERT\n// Static assertions - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html\n\n// #define GLM_CXX11_AUTO_TYPE\n// auto-typed variables - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf\n\n// #define GLM_CXX11_AUTO_TYPE\n// Multi-declarator auto - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf\n\n// #define GLM_CXX11_AUTO_TYPE\n// Removal of auto as a storage-class specifier - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm\n\n// #define GLM_CXX11_AUTO_TYPE\n// New function declarator syntax - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm\n\n// #define GLM_CXX11_LAMBDAS\n// New wording for C++0x lambdas - GCC 4.5\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf\n\n// #define GLM_CXX11_DECLTYPE\n// Declared type of an expression - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf\n\n//\n// Right angle brackets - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html\n\n//\n// Default template arguments for function templates\tDR226\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226\n\n//\n// Solving the SFINAE problem for expressions\tDR339\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html\n\n// #define GLM_CXX11_ALIAS_TEMPLATE\n// Template aliases\tN2258\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf\n\n//\n// Extern templates\tN1987\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm\n\n// #define GLM_CXX11_NULLPTR\n// Null pointer constant\tN2431\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf\n\n// #define GLM_CXX11_STRONG_ENUMS\n// Strongly-typed enums\tN2347\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf\n\n//\n// Forward declarations for enums\tN2764\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf\n\n//\n// Generalized attributes\tN2761\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf\n\n//\n// Generalized constant expressions\tN2235\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf\n\n//\n// Alignment support\tN2341\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf\n\n// #define GLM_CXX11_DELEGATING_CONSTRUCTORS\n// Delegating constructors\tN1986\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf\n\n//\n// Inheriting constructors\tN2540\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm\n\n// #define GLM_CXX11_EXPLICIT_CONVERSIONS\n// Explicit conversion operators\tN2437\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf\n\n//\n// New character types\tN2249\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html\n\n//\n// Unicode string literals\tN2442\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\n\n//\n// Raw string literals\tN2442\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\n\n//\n// Universal character name literals\tN2170\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html\n\n// #define GLM_CXX11_USER_LITERALS\n// User-defined literals\t\tN2765\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf\n\n//\n// Standard Layout Types\tN2342\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm\n\n// #define GLM_CXX11_DEFAULTED_FUNCTIONS\n// #define GLM_CXX11_DELETED_FUNCTIONS\n// Defaulted and deleted functions\tN2346\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm\n\n//\n// Extended friend declarations\tN1791\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf\n\n//\n// Extending sizeof\tN2253\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html\n\n// #define GLM_CXX11_INLINE_NAMESPACES\n// Inline namespaces\tN2535\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm\n\n// #define GLM_CXX11_UNRESTRICTED_UNIONS\n// Unrestricted unions\tN2544\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf\n\n// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\n// Local and unnamed types as template arguments\tN2657\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm\n\n// #define GLM_CXX11_RANGE_FOR\n// Range-based for\tN2930\tGCC 4.6\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html\n\n// #define GLM_CXX11_OVERRIDE_CONTROL\n// Explicit virtual overrides\tN2928 N3206 N3272\tGCC 4.7\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm\n\n//\n// Minimal support for garbage collection and reachability-based leak detection\tN2670\tNo\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm\n\n// #define GLM_CXX11_NOEXCEPT\n// Allowing move constructors to throw [noexcept]\tN3050\tGCC 4.6 (core language only)\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html\n\n//\n// Defining move special member functions\tN3053\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html\n\n//\n// Sequence points\tN2239\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\n\n//\n// Atomic operations\tN2427\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\n\n//\n// Strong Compare and Exchange\tN2748\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html\n\n//\n// Bidirectional Fences\tN2752\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm\n\n//\n// Memory model\tN2429\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm\n\n//\n// Data-dependency ordering: atomics and memory model\tN2664\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm\n\n//\n// Propagating exceptions\tN2179\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html\n\n//\n// Abandoning a process and at_quick_exit\tN2440\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm\n\n//\n// Allow atomics use in signal handlers\tN2547\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm\n\n//\n// Thread-local storage\tN2659\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm\n\n//\n// Dynamic initialization and destruction with concurrency\tN2660\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm\n\n//\n// __func__ predefined identifier\tN2340\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm\n\n//\n// C99 preprocessor\tN1653\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm\n\n//\n// long long\tN1811\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf\n\n//\n// Extended integral types\tN1988\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf\n\n#if(GLM_COMPILER & GLM_COMPILER_GCC)\n\n#\tdefine GLM_CXX11_STATIC_ASSERT\n\n#elif(GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tif(__has_feature(cxx_exceptions))\n#\t\tdefine GLM_CXX98_EXCEPTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_rtti))\n#\t\tdefine GLM_CXX98_RTTI\n#\tendif\n\n#\tif(__has_feature(cxx_access_control_sfinae))\n#\t\tdefine GLM_CXX11_ACCESS_CONTROL_SFINAE\n#\tendif\n\n#\tif(__has_feature(cxx_alias_templates))\n#\t\tdefine GLM_CXX11_ALIAS_TEMPLATE\n#\tendif\n\n#\tif(__has_feature(cxx_alignas))\n#\t\tdefine GLM_CXX11_ALIGNAS\n#\tendif\n\n#\tif(__has_feature(cxx_attributes))\n#\t\tdefine GLM_CXX11_ATTRIBUTES\n#\tendif\n\n#\tif(__has_feature(cxx_constexpr))\n#\t\tdefine GLM_CXX11_CONSTEXPR\n#\tendif\n\n#\tif(__has_feature(cxx_decltype))\n#\t\tdefine GLM_CXX11_DECLTYPE\n#\tendif\n\n#\tif(__has_feature(cxx_default_function_template_args))\n#\t\tdefine GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS\n#\tendif\n\n#\tif(__has_feature(cxx_defaulted_functions))\n#\t\tdefine GLM_CXX11_DEFAULTED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_delegating_constructors))\n#\t\tdefine GLM_CXX11_DELEGATING_CONSTRUCTORS\n#\tendif\n\n#\tif(__has_feature(cxx_deleted_functions))\n#\t\tdefine GLM_CXX11_DELETED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_explicit_conversions))\n#\t\tdefine GLM_CXX11_EXPLICIT_CONVERSIONS\n#\tendif\n\n#\tif(__has_feature(cxx_generalized_initializers))\n#\t\tdefine GLM_CXX11_GENERALIZED_INITIALIZERS\n#\tendif\n\n#\tif(__has_feature(cxx_implicit_moves))\n#\t\tdefine GLM_CXX11_IMPLICIT_MOVES\n#\tendif\n\n#\tif(__has_feature(cxx_inheriting_constructors))\n#\t\tdefine GLM_CXX11_INHERITING_CONSTRUCTORS\n#\tendif\n\n#\tif(__has_feature(cxx_inline_namespaces))\n#\t\tdefine GLM_CXX11_INLINE_NAMESPACES\n#\tendif\n\n#\tif(__has_feature(cxx_lambdas))\n#\t\tdefine GLM_CXX11_LAMBDAS\n#\tendif\n\n#\tif(__has_feature(cxx_local_type_template_args))\n#\t\tdefine GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\n#\tendif\n\n#\tif(__has_feature(cxx_noexcept))\n#\t\tdefine GLM_CXX11_NOEXCEPT\n#\tendif\n\n#\tif(__has_feature(cxx_nonstatic_member_init))\n#\t\tdefine GLM_CXX11_NONSTATIC_MEMBER_INIT\n#\tendif\n\n#\tif(__has_feature(cxx_nullptr))\n#\t\tdefine GLM_CXX11_NULLPTR\n#\tendif\n\n#\tif(__has_feature(cxx_override_control))\n#\t\tdefine GLM_CXX11_OVERRIDE_CONTROL\n#\tendif\n\n#\tif(__has_feature(cxx_reference_qualified_functions))\n#\t\tdefine GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_range_for))\n#\t\tdefine GLM_CXX11_RANGE_FOR\n#\tendif\n\n#\tif(__has_feature(cxx_raw_string_literals))\n#\t\tdefine GLM_CXX11_RAW_STRING_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_rvalue_references))\n#\t\tdefine GLM_CXX11_RVALUE_REFERENCES\n#\tendif\n\n#\tif(__has_feature(cxx_static_assert))\n#\t\tdefine GLM_CXX11_STATIC_ASSERT\n#\tendif\n\n#\tif(__has_feature(cxx_auto_type))\n#\t\tdefine GLM_CXX11_AUTO_TYPE\n#\tendif\n\n#\tif(__has_feature(cxx_strong_enums))\n#\t\tdefine GLM_CXX11_STRONG_ENUMS\n#\tendif\n\n#\tif(__has_feature(cxx_trailing_return))\n#\t\tdefine GLM_CXX11_TRAILING_RETURN\n#\tendif\n\n#\tif(__has_feature(cxx_unicode_literals))\n#\t\tdefine GLM_CXX11_UNICODE_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_unrestricted_unions))\n#\t\tdefine GLM_CXX11_UNRESTRICTED_UNIONS\n#\tendif\n\n#\tif(__has_feature(cxx_user_literals))\n#\t\tdefine GLM_CXX11_USER_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_variadic_templates))\n#\t\tdefine GLM_CXX11_VARIADIC_TEMPLATES\n#\tendif\n\n#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_fixes.hpp",
    "content": "#include <cmath>\n\n//! Workaround for compatibility with other libraries\n#ifdef max\n#undef max\n#endif\n\n//! Workaround for compatibility with other libraries\n#ifdef min\n#undef min\n#endif\n\n//! Workaround for Android\n#ifdef isnan\n#undef isnan\n#endif\n\n//! Workaround for Android\n#ifdef isinf\n#undef isinf\n#endif\n\n//! Workaround for Chrone Native Client\n#ifdef log2\n#undef log2\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_noise.hpp",
    "content": "#pragma once\n\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T mod289(T const& x)\n\t{\n\t\treturn x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T permute(T const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n}//namespace detail\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_swizzle.hpp",
    "content": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\t// Internal class for implementing swizzle operators\n\ttemplate<typename T, int N>\n\tstruct _swizzle_base0\n\t{\n\tprotected:\n\t\tGLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }\n\t\tGLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }\n\n\t\t// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.\n\t\t// The size 1 buffer is assumed to aligned to the actual members so that the\n\t\t// elem()\n\t\tchar    _buffer[1];\n\t};\n\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>\n\tstruct _swizzle_base1 : public _swizzle_base0<T, N>\n\t{\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, bool Aligned>\n\tstruct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<2, T, Q> operator ()()  const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); }\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, int E2, bool Aligned>\n\tstruct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator ()()  const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>\n\tstruct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator ()()  const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }\n\t};\n\n\t// Internal class for implementing swizzle operators\n\t/*\n\t\tTemplate parameters:\n\n\t\tT\t\t\t= type of scalar values (e.g. float, double)\n\t\tN\t\t\t= number of components in the vector (e.g. 3)\n\t\tE0...3\t\t= what index the n-th element of this swizzle refers to in the unswizzled vec\n\n\t\tDUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles\n\t\t\tcontaining duplicate elements so that they cannot be used as r-values).\n\t*/\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>\n\tstruct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>\n\t{\n\t\tstruct op_equal\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }\n\t\t};\n\n\t\tstruct op_minus\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }\n\t\t};\n\n\t\tstruct op_plus\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }\n\t\t};\n\n\t\tstruct op_mul\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }\n\t\t};\n\n\t\tstruct op_div\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }\n\t\t};\n\n\tpublic:\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)\n\t\t{\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\t(*this)[i] = t;\n\t\t\treturn *this;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_equal());\n\t\t\treturn *this;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_minus());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_plus());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_mul());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_div());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER T& operator[](size_t i)\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\t\tGLM_FUNC_QUALIFIER T operator[](size_t i) const\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\n\tprotected:\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, const U& op)\n\t\t{\n\t\t\t// Make a copy of the data in this == &that.\n\t\t\t// The copier should optimize out the copy in cases where the function is\n\t\t\t// properly inlined and the copy is not necessary.\n\t\t\tT t[N];\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\tt[i] = that[i];\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\top( (*this)[i], t[i] );\n\t\t}\n\t};\n\n\t// Specialization for swizzles containing duplicate elements.  These cannot be modified.\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>\n\t{\n\t\tstruct Stub {};\n\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; }\n\n\t\tGLM_FUNC_QUALIFIER T operator[]  (size_t i) const\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\t};\n\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>\n\t{\n\t\ttypedef _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;\n\n\t\tusing base_type::operator=;\n\n\t\tGLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)(); }\n\t};\n\n//\n// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros\n//\n#define GLM_SWIZZLE_TEMPLATE1   template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n#define GLM_SWIZZLE_TEMPLATE2   template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>\n#define GLM_SWIZZLE_TYPE1       _swizzle<N, T, Q, E0, E1, E2, E3>\n#define GLM_SWIZZLE_TYPE2       _swizzle<N, T, Q, F0, F1, F2, F3>\n\n//\n// Wrapper for a binary operator (e.g. u.yy + v.zy)\n//\n#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\\n\tGLM_SWIZZLE_TEMPLATE2                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b)  \\\n\t{                                                                               \\\n\t\treturn a() OPERAND b();                                                     \\\n\t}                                                                               \\\n\tGLM_SWIZZLE_TEMPLATE1                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& b)                   \\\n\t{                                                                               \\\n\t\treturn a() OPERAND b;                                                       \\\n\t}                                                                               \\\n\tGLM_SWIZZLE_TEMPLATE1                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b)                   \\\n\t{                                                                               \\\n\t\treturn a OPERAND b();                                                       \\\n\t}\n\n//\n// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)\n//\n#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b)\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn a() OPERAND b;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b)\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn a OPERAND b();\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\n\n//\n// Macro for wrapping a function taking one argument (e.g. abs())\n//\n#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a)\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn FUNCTION(a());\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\n\n//\n// Macro for wrapping a function taking two vector arguments (e.g. dot()).\n//\n#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                       \\\n\tGLM_SWIZZLE_TEMPLATE2                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b());                                                                              \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b());                                                                              \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b)         \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b);                                                                                \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b)                  \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a, b());                                                                                \\\n\t}\n\n//\n// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).\n//\n#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \\\n\tGLM_SWIZZLE_TEMPLATE2                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c)   \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b(), c);                                                                                         \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c)   \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b(), c);                                                                                         \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b, c);                                                                                           \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c)           \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a, b(), c);                                                                                           \\\n\t}\n\n}//namespace detail\n}//namespace glm\n\nnamespace glm\n{\n\tnamespace detail\n\t{\n\t\tGLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)\n\t\tGLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)\n\t}\n\n\t//\n\t// Swizzles are distinct types from the unswizzled type.  The below macros will\n\t// provide template specializations for the swizzle types for the given functions\n\t// so that the compiler does not have any ambiguity to choosing how to handle\n\t// the function.\n\t//\n\t// The alternative is to use the operator()() when calling the function in order\n\t// to explicitly convert the swizzled type to the unswizzled type.\n\t//\n\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);\n\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);\n}\n\n#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };\n\n#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };\n\n#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };\n\n#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \\\n\tstruct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };\n\n#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };\n\n#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };\n\n#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };\n\n#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };\n\n#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_swizzle_func.hpp",
    "content": "#pragma once\n\n#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B)\t\\\n\tvec<2, T, Q> A ## B() CONST\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<2, T, Q>(this->A, this->B);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C)\t\t\\\n\tvec<3, T, Q> A ## B ## C() CONST\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<3, T, Q>(this->A, this->B, this->C);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D)\t\t\t\t\t\\\n\tvec<4, T, Q> A ## B ## C ## D() CONST\t\t\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<4, T, Q>(this->A, this->B, this->C, this->D);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B)\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\\\n\tvec<L, T, Q> vec<L, T, Q>::A ## B() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<2, T, Q>(this->A, this->B);\t\t\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C)\t\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\t\\\n\tvec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<3, T, Q>(this->A, this->B, this->C);\t\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D)\t\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tvec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<4, T, Q>(this->A, this->B, this->C, this->D);\t\t\\\n\t}\n\n#define GLM_MUTABLE\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)\n\n#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)\n\n#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)\n\n#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P)\t\t\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y)\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g)\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/_vectorize.hpp",
    "content": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename R, typename T, qualifier Q>\n\tstruct functor1{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 1, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<1, R, Q>(Func(v.x));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 2, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<2, R, Q>(Func(v.x), Func(v.y));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 3, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 4, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>\n\tstruct functor2{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<1, T, Q>(Func(a.x, b.x));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>\n\tstruct functor2_vec_sca{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<1, T, Q>(Func(a.x, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<2, T, Q>(Func(a.x, b), Func(a.y, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct functor2_vec_int {};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<1, int, Q>(Func(a.x, b.x));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/compute_common.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename genFIType, bool /*signed*/>\n\tstruct compute_abs\n\t{};\n\n\ttemplate<typename genFIType>\n\tstruct compute_abs<genFIType, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(\n\t\t\t\tstd::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,\n\t\t\t\t\"'abs' only accept floating-point and integer scalar or vector inputs\");\n\n\t\t\treturn x >= genFIType(0) ? x : -x;\n\t\t\t// TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;\n\t\t}\n\t};\n\n#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\ttemplate<>\n\tstruct compute_abs<float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x)\n\t\t{\n\t\t\treturn fabsf(x);\n\t\t}\n\t};\n#endif\n\n\ttemplate<typename genFIType>\n\tstruct compute_abs<genFIType, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(\n\t\t\t\t(!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),\n\t\t\t\t\"'abs' only accept floating-point and integer scalar or vector inputs\");\n\t\t\treturn x;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/compute_vector_relational.hpp",
    "content": "#pragma once\n\n//#include \"compute_common.hpp\"\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T, bool isFloat>\n\tstruct compute_equal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)\n\t\t{\n\t\t\treturn a == b;\n\t\t}\n\t};\n/*\n\ttemplate <typename T>\n\tstruct compute_equal<T, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)\n\t\t{\n\t\t\treturn detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);\n\t\t\t//return std::memcmp(&a, &b, sizeof(T)) == 0;\n\t\t}\n\t};\n*/\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_common.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_common.inl\n\n#include \"../vector_relational.hpp\"\n#include \"compute_common.hpp\"\n#include \"type_vec1.hpp\"\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include \"_vectorize.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// min\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn (y < x) ? y : x;\n\t}\n\n\t// max\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\n\t\treturn (x < y) ? y : x;\n\t}\n\n\t// abs\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x)\n\t{\n\t\tint const y = x >> (sizeof(int) * 8 - 1);\n\t\treturn (x ^ y) - y;\n\t}\n\n\t// round\n#\tif GLM_HAS_CXX11_STL\n\t\tusing ::std::round;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType round(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'round' only accept floating-point inputs\");\n\n\t\t\treturn x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));\n\t\t}\n#\tendif\n\n\t// trunc\n#\tif GLM_HAS_CXX11_STL\n\t\tusing ::std::trunc;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType trunc(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'trunc' only accept floating-point inputs\");\n\n\t\t\treturn x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x);\n\t\t}\n#\tendif\n\n}//namespace glm\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_abs_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(abs, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q, bool Aligned>\n\tstruct compute_mix_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mix_vector<L, T, bool, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a)\n\t\t{\n\t\t\tvec<L, T, Q> Result;\n\t\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\t\tResult[i] = a[i] ? y[i] : x[i];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q, bool Aligned>\n\tstruct compute_mix_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mix_scalar<L, T, bool, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a)\n\t\t{\n\t\t\treturn a ? y : x;\n\t\t}\n\t};\n\n\ttemplate<typename T, typename U>\n\tstruct compute_mix\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn static_cast<T>(static_cast<U>(x) * (static_cast<U>(1) - a) + static_cast<U>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<typename T>\n\tstruct compute_mix<T, bool>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a)\n\t\t{\n\t\t\treturn a ? y : x;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>\n\tstruct compute_sign\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0)));\n\t\t}\n\t};\n\n#\tif GLM_ARCH == GLM_ARCH_X86\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_sign<L, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tT const Shift(static_cast<T>(sizeof(T) * 8 - 1));\n\t\t\tvec<L, T, Q> const y(vec<L, typename detail::make_unsigned<T>::type, Q>(-x) >> typename detail::make_unsigned<T>::type(Shift));\n\n\t\t\treturn (x >> Shift) | y;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_floor\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::floor, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_ceil\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::ceil, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_fract\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn x - floor(x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_trunc\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(trunc, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_round\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(round, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mod\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.\");\n\t\t\treturn a - b * floor(a / b);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_min_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(min, x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_max_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(max, x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_clamp_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)\n\t\t{\n\t\t\treturn min(max(x, minVal), maxVal);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_step_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn mix(vec<L, T, Q>(1), vec<L, T, Q>(0), glm::lessThan(x, edge));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_smoothstep_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'smoothstep' only accept floating-point inputs\");\n\t\t\tvec<L, T, Q> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1)));\n\t\t\treturn tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genFIType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x)\n\t{\n\t\treturn detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_abs_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// sign\n\t// fast and works for any type\n\ttemplate<typename genFIType>\n\tGLM_FUNC_QUALIFIER genFIType sign(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),\n\t\t\t\"'sign' only accept signed inputs\");\n\n\t\treturn detail::compute_sign<1, genFIType, defaultp,\n                                    std::numeric_limits<genFIType>::is_iec559, detail::is_aligned<highp>::value>::call(vec<1, genFIType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),\n\t\t\t\"'sign' only accept signed inputs\");\n\n\t\treturn detail::compute_sign<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// floor\n\tusing ::std::floor;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floor(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'floor' only accept floating-point inputs.\");\n\t\treturn detail::compute_floor<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> trunc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'trunc' only accept floating-point inputs\");\n\t\treturn detail::compute_trunc<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> round(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'round' only accept floating-point inputs\");\n\t\treturn detail::compute_round<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n/*\n\t// roundEven\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundEven(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\n\t\treturn genType(int(x + genType(int(x) % 2)));\n\t}\n*/\n\n\t// roundEven\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundEven(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\n\t\tint Integer = static_cast<int>(x);\n\t\tgenType IntegerPart = static_cast<genType>(Integer);\n\t\tgenType FractionalPart = fract(x);\n\n\t\tif(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn round(x);\n\t\t}\n\t\telse if((Integer % 2) == 0)\n\t\t{\n\t\t\treturn IntegerPart;\n\t\t}\n\t\telse if(x <= static_cast<genType>(0)) // Work around...\n\t\t{\n\t\t\treturn IntegerPart - static_cast<genType>(1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn IntegerPart + static_cast<genType>(1);\n\t\t}\n\t\t//else // Bug on MinGW 4.5.2\n\t\t//{\n\t\t//\treturn mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));\n\t\t//}\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundEven(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(roundEven, x);\n\t}\n\n\t// ceil\n\tusing ::std::ceil;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceil(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'ceil' only accept floating-point inputs\");\n\t\treturn detail::compute_ceil<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// fract\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fract(genType x)\n\t{\n\t\treturn fract(vec<1, genType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fract(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fract' only accept floating-point inputs\");\n\t\treturn detail::compute_fract<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// mod\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mod(genType x, genType y)\n\t{\n#\t\tif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t// Another Cuda compiler bug https://github.com/g-truc/glm/issues/530\n\t\t\tvec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y));\n\t\t\treturn Result.x;\n#\t\telse\n\t\t\treturn mod(vec<1, genType, defaultp>(x), y).x;\n#\t\tendif\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\t// modf\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType modf(genType x, genType & i)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'modf' only accept floating-point inputs\");\n\t\treturn std::modf(x, &i);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tmodf(x.x, i.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y),\n\t\t\tmodf(x.z, i.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i)\n\t{\n\t\treturn vec<4, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y),\n\t\t\tmodf(x.z, i.z),\n\t\t\tmodf(x.w, i.w));\n\t}\n\n\t//// Only valid if (INT_MIN <= x-y <= INT_MAX)\n\t//// min(x,y)\n\t//r = y + ((x - y) & ((x - y) >> (sizeof(int) *\n\t//CHAR_BIT - 1)));\n\t//// max(x,y)\n\t//r = x - ((x - y) & ((x - y) >> (sizeof(int) *\n\t//CHAR_BIT - 1)));\n\n\t// min\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);\n\t}\n\n\t// max\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);\n\t}\n\n\t// clamp\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn min(max(x, minVal), maxVal);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(minVal), vec<L, T, Q>(maxVal));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER 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)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, minVal, maxVal);\n\t}\n\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)\n\t{\n\t\treturn detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);\n\t}\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a)\n\t{\n\t\treturn detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);\n\t}\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)\n\t{\n\t\treturn detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);\n\t}\n\n\t// step\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType step(genType edge, genType x)\n\t{\n\t\treturn mix(static_cast<genType>(1), static_cast<genType>(0), x < edge);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> step(T edge, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge), x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge, x);\n\t}\n\n\t// smoothstep\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'smoothstep' only accept floating-point inputs\");\n\n\t\tgenType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)));\n\t\treturn tmp * tmp * (genType(3) - genType(2) * tmp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge0), vec<L, T, Q>(edge1), x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge0, edge1, x);\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::isnan;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER bool isnan(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n#\t\t\tif GLM_HAS_CXX11_STL\n\t\t\t\treturn std::isnan(x);\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\t\t\treturn _isnan(x) != 0;\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\t\t\tif GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\t\t\t\t\treturn _isnan(x) != 0;\n#\t\t\t\telse\n\t\t\t\t\treturn ::isnan(x) != 0;\n#\t\t\t\tendif\n#\t\t\telif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L\n\t\t\t\treturn _isnan(x) != 0;\n#\t\t\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t\treturn ::isnan(x) != 0;\n#\t\t\telse\n\t\t\t\treturn std::isnan(x);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isnan(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n\t\tvec<L, bool, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = glm::isnan(v[l]);\n\t\treturn Result;\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::isinf;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER bool isinf(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n#\t\t\tif GLM_HAS_CXX11_STL\n\t\t\t\treturn std::isinf(x);\n#\t\t\telif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)\n#\t\t\t\tif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)\n\t\t\t\t\treturn _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;\n#\t\t\t\telse\n\t\t\t\t\treturn ::isinf(x);\n#\t\t\t\tendif\n#\t\t\telif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)\n#\t\t\t\tif(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L)\n\t\t\t\t\treturn _isinf(x) != 0;\n#\t\t\t\telse\n\t\t\t\t\treturn std::isinf(x);\n#\t\t\t\tendif\n#\t\t\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t\t// http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab\n\t\t\t\treturn ::isinf(double(x)) != 0;\n#\t\t\telse\n\t\t\t\treturn std::isinf(x);\n#\t\t\tendif\n\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isinf(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n\t\tvec<L, bool, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = glm::isinf(v[l]);\n\t\treturn Result;\n\t}\n\n\tGLM_FUNC_QUALIFIER int floatBitsToInt(float const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tfloat in;\n\t\t\tint out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, int, Q>&>(const_cast<vec<L, float, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tfloat in;\n\t\t\tuint out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, uint, Q>&>(const_cast<vec<L, float, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER float intBitsToFloat(int const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tint in;\n\t\t\tfloat out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, int, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tfloat out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, uint, Q>&>(v));\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fma;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c)\n\t\t{\n\t\t\treturn a * b + c;\n\t\t}\n#\tendif\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType frexp(genType x, int& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'frexp' only accept floating-point inputs\");\n\n\t\treturn std::frexp(x, &exp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'frexp' only accept floating-point inputs\");\n\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = std::frexp(v[l], &exp[l]);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'ldexp' only accept floating-point inputs\");\n\n\t\treturn std::ldexp(x, exp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'ldexp' only accept floating-point inputs\");\n\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = std::ldexp(v[l], exp[l]);\n\t\treturn Result;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_common_simd.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_common_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_common_simd.inl\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#include \"../simd/common.h\"\n\n#include <immintrin.h>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_abs_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_abs(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_abs_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = glm_ivec4_abs(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_floor<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_floor(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_ceil<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_ceil(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_fract<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_fract(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_round<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_round(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_mod<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_mod(x.data, y.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_min_ps(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_min_epi32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_min_epu32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_max_ps(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_max_epi32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_max_epu32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_mix_vector<4, float, bool, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a)\n\t\t{\n\t\t\t__m128i const Load = _mm_set_epi32(-static_cast<int>(a.w), -static_cast<int>(a.z), -static_cast<int>(a.y), -static_cast<int>(a.x));\n\t\t\t__m128 const Mask = _mm_castsi128_ps(Load);\n\n\t\t\tvec<4, float, Q> Result;\n#\t\t\tif 0 && GLM_ARCH & GLM_ARCH_AVX\n\t\t\t\tResult.data = _mm_blendv_ps(x.data, y.data, Mask);\n#\t\t\telse\n\t\t\t\tResult.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data));\n#\t\t\tendif\n\t\t\treturn Result;\n\t\t}\n\t};\n/* FIXME\n\ttemplate<qualifier Q>\n\tstruct compute_step_vector<float, Q, tvec4>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tresult.data = glm_vec4_step(edge.data, x.data);\n\t\t\treturn result;\n\t\t}\n\t};\n*/\n\ttemplate<qualifier Q>\n\tstruct compute_smoothstep_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_exponential.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_exponential.inl\n\n#include \"../vector_relational.hpp\"\n#include \"_vectorize.hpp\"\n#include <limits>\n#include <cmath>\n#include <cassert>\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::log2;\n#\telse\n\t\ttemplate<typename genType>\n\t\tgenType log2(genType Value)\n\t\t{\n\t\t\treturn std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019);\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>\n\tstruct compute_log2\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'log2' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.\");\n\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(log2, v);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_sqrt\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::sqrt, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_inversesqrt\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn static_cast<T>(1) / sqrt(x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, bool Aligned>\n\tstruct compute_inversesqrt<L, float, lowp, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, float, lowp> call(vec<L, float, lowp> const& x)\n\t\t{\n\t\t\tvec<L, float, lowp> tmp(x);\n\t\t\tvec<L, float, lowp> xhalf(tmp * 0.5f);\n\t\t\tvec<L, uint, lowp>* p = reinterpret_cast<vec<L, uint, lowp>*>(const_cast<vec<L, float, lowp>*>(&x));\n\t\t\tvec<L, uint, lowp> i = vec<L, uint, lowp>(0x5f375a86) - (*p >> vec<L, uint, lowp>(1));\n\t\t\tvec<L, float, lowp>* ptmp = reinterpret_cast<vec<L, float, lowp>*>(&i);\n\t\t\ttmp = *ptmp;\n\t\t\ttmp = tmp * (1.5f - xhalf * tmp * tmp);\n\t\t\treturn tmp;\n\t\t}\n\t};\n}//namespace detail\n\n\t// pow\n\tusing std::pow;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(pow, base, exponent);\n\t}\n\n\t// exp\n\tusing std::exp;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> exp(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(exp, x);\n\t}\n\n\t// log\n\tusing std::log;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(log, x);\n\t}\n\n#   if GLM_HAS_CXX11_STL\n    using std::exp2;\n#   else\n\t//exp2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType exp2(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'exp2' only accept floating-point inputs\");\n\n\t\treturn std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x);\n\t}\n#   endif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> exp2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(exp2, x);\n\t}\n\n\t// log2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType log2(genType x)\n\t{\n\t\treturn log2(vec<1, genType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_log2<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// sqrt\n\tusing std::sqrt;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sqrt(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sqrt' only accept floating-point inputs\");\n\t\treturn detail::compute_sqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// inversesqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType inversesqrt(genType x)\n\t{\n\t\treturn static_cast<genType>(1) / sqrt(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> inversesqrt(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'inversesqrt' only accept floating-point inputs\");\n\t\treturn detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_exponential_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_exponential_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_exponential_simd.inl\n\n#include \"../simd/exponential.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_sqrt<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_sqrt_ps(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<>\n\tstruct compute_sqrt<4, float, aligned_lowp, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v)\n\t\t{\n\t\t\tvec<4, float, aligned_lowp> Result;\n\t\t\tResult.data = glm_vec4_sqrt_lowp(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_geometric.inl",
    "content": "#include \"../exponential.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_length\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn sqrt(dot(v, v));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_distance\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t\t{\n\t\t\treturn length(p1 - p0);\n\t\t}\n\t};\n\n\ttemplate<typename V, typename T, bool Aligned>\n\tstruct compute_dot{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<1, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b)\n\t\t{\n\t\t\treturn a.x * b.x;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<2, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b)\n\t\t{\n\t\t\tvec<2, T, Q> tmp(a * b);\n\t\t\treturn tmp.x + tmp.y;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<3, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t\t{\n\t\t\tvec<3, T, Q> tmp(a * b);\n\t\t\treturn tmp.x + tmp.y + tmp.z;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<4, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> tmp(a * b);\n\t\t\treturn (tmp.x + tmp.y) + (tmp.z + tmp.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_cross\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cross' accepts only floating-point inputs\");\n\n\t\t\treturn vec<3, T, Q>(\n\t\t\t\tx.y * y.z - y.y * x.z,\n\t\t\t\tx.z * y.x - y.z * x.x,\n\t\t\t\tx.x * y.y - y.x * x.y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_normalize\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\t\treturn v * inversesqrt(dot(v, v));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_faceforward\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\t\treturn dot(Nref, I) < static_cast<T>(0) ? N : -N;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_reflect\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N)\n\t\t{\n\t\t\treturn I - N * dot(N, I) * static_cast<T>(2);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_refract\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta)\n\t\t{\n\t\t\tT const dotValue(dot(N, I));\n\t\t\tT const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue));\n\t\t\tvec<L, T, Q> const Result =\n                (k >= static_cast<T>(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec<L, T, Q>(0);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n\n\t// length\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType length(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'length' accepts only floating-point inputs\");\n\n\t\treturn abs(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'length' accepts only floating-point inputs\");\n\n\t\treturn detail::compute_length<L, T, Q, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\t// distance\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'distance' accepts only floating-point inputs\");\n\n\t\treturn length(p1 - p0);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t{\n\t\treturn detail::compute_distance<L, T, Q, detail::is_aligned<Q>::value>::call(p0, p1);\n\t}\n\n\t// dot\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(T x, T y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn x * y;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\t// cross\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t{\n\t\treturn detail::compute_cross<T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n/*\n\t// normalize\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType normalize(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\treturn x < genType(0) ? genType(-1) : genType(1);\n\t}\n*/\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> normalize(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\treturn detail::compute_normalize<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// faceforward\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref)\n\t{\n\t\treturn dot(Nref, I) < static_cast<genType>(0) ? N : -N;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> faceforward(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref)\n\t{\n\t\treturn detail::compute_faceforward<L, T, Q, detail::is_aligned<Q>::value>::call(N, I, Nref);\n\t}\n\n\t// reflect\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N)\n\t{\n\t\treturn I - N * dot(N, I) * genType(2);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> reflect(vec<L, T, Q> const& I, vec<L, T, Q> const& N)\n\t{\n\t\treturn detail::compute_reflect<L, T, Q, detail::is_aligned<Q>::value>::call(I, N);\n\t}\n\n\t// refract\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'refract' accepts only floating-point inputs\");\n\t\tgenType const dotValue(dot(N, I));\n\t\tgenType const k(static_cast<genType>(1) - eta * eta * (static_cast<genType>(1) - dotValue * dotValue));\n\t\treturn (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> refract(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'refract' accepts only floating-point inputs\");\n\t\treturn detail::compute_refract<L, T, Q, detail::is_aligned<Q>::value>::call(I, N, eta);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_geometric_simd.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_geometric_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_geometric_simd.inl\n\n#include \"../simd/geometric.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_length<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec4_length(v.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_distance<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_dot<vec<4, float, Q>, float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_cross<float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b)\n\t\t{\n\t\t\t__m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x);\n\t\t\t__m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x);\n\t\t\t__m128 const xpd0 = glm_vec4_cross(set0, set1);\n\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = xpd0;\n\t\t\treturn vec<3, float, Q>(Result);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_normalize<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_normalize(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_faceforward<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_faceforward(N.data, I.data, Nref.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_reflect<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_reflect(I.data, N.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_refract<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta));\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_length<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\treturn sqrt(compute_dot<vec<4, float, Q>, float, true>::call(v, v));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_distance<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1)\n\t\t{\n\t\t\treturn compute_length<4, float, Q, true>::call(p1 - p0);\n\t\t}\n\t};\n\n\n\ttemplate<qualifier Q>\n\tstruct compute_dot<vec<4, float, Q>, float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tfloat32x4_t v = vmulq_f32(x.data, y.data);\n\t\t\treturn vaddvq_f32(v);\n#else  // Armv7a with Neon\n\t\t\tfloat32x4_t p = vmulq_f32(x.data, y.data);\n\t\t\tfloat32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p));\n\t\t\tv = vpadd_f32(v, v);\n\t\t\treturn vget_lane_f32(v, 0);\n#endif\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_normalize<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tfloat32x4_t p = vmulq_f32(v.data, v.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tp = vpaddq_f32(p, p);\n\t\t\tp = vpaddq_f32(p, p);\n#else\n\t\t\tfloat32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p));\n\t\t\tt = vpadd_f32(t, t);\n\t\t\tp = vcombine_f32(t, t);\n#endif\n\n\t\t\tfloat32x4_t vd = vrsqrteq_f32(p);\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vmulq_f32(v.data, vd);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_integer.inl",
    "content": "/// @ref core\n\n#include \"_vectorize.hpp\"\n#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)\n#\tinclude <intrin.h>\n#\tpragma intrinsic(_BitScanReverse)\n#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)\n#include <limits>\n\n#if !GLM_HAS_EXTENDED_INTEGER_TYPE\n#\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma GCC diagnostic ignored \"-Wlong-long\"\n#\tendif\n#\tif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\t\tpragma clang diagnostic ignored \"-Wc++11-long-long\"\n#\tendif\n#endif\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T mask(T Bits)\n\t{\n\t\treturn Bits >= static_cast<T>(sizeof(T) * 8) ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC>\n\tstruct compute_bitfieldReverseStep\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_bitfieldReverseStep<L, T, Q, Aligned, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) << Shift | (v & (~Mask)) >> Shift;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC>\n\tstruct compute_bitfieldBitCountStep\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_bitfieldBitCountStep<L, T, Q, Aligned, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) + ((v >> Shift) & Mask);\n\t\t}\n\t};\n\n\ttemplate<typename genIUType, size_t Bits>\n\tstruct compute_findLSB\n\t{\n\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t{\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\treturn glm::bitCount(~Value & (Value - static_cast<genIUType>(1)));\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstruct compute_findLSB<genIUType, 32>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t\t{\n\t\t\t\tunsigned long Result(0);\n\t\t\t\tunsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast<unsigned long*>(&Value));\n\t\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t\t}\n\t\t};\n\n#\t\tif !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))\n\t\ttemplate<typename genIUType>\n\t\tstruct compute_findLSB<genIUType, 64>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t\t{\n\t\t\t\tunsigned long Result(0);\n\t\t\t\tunsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));\n\t\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t\t}\n\t\t};\n#\t\tendif\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\ttemplate<length_t L, typename T, qualifier Q, bool EXEC = true>\n\tstruct compute_findMSB_step_vec\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T Shift)\n\t\t{\n\t\t\treturn x | (x >> Shift);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_findMSB_step_vec<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T)\n\t\t{\n\t\t\treturn x;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, int>\n\tstruct compute_findMSB_vec\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tvec<L, T, Q> x(v);\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 1));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 2));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 4));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32));\n\t\t\treturn vec<L, int, Q>(sizeof(T) * 8 - 1) - glm::bitCount(~x);\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tGLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value)\n\t\t{\n\t\t\tunsigned long Result(0);\n\t\t\tunsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast<unsigned long*>(&Value));\n\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t}\n\n\t\ttemplate<length_t L, typename T, qualifier Q>\n\t\tstruct compute_findMSB_vec<L, T, Q, 32>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x)\n\t\t\t{\n\t\t\t\treturn detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_32, x);\n\t\t\t}\n\t\t};\n\n#\t\tif !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))\n\t\ttemplate<typename genIUType>\n\t\tGLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value)\n\t\t{\n\t\t\tunsigned long Result(0);\n\t\t\tunsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));\n\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t}\n\n\t\ttemplate<length_t L, typename T, qualifier Q>\n\t\tstruct compute_findMSB_vec<L, T, Q, 64>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x)\n\t\t\t{\n\t\t\t\treturn detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_64, x);\n\t\t\t}\n\t\t};\n#\t\tendif\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n}//namespace detail\n\n\t// uaddCarry\n\tGLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry)\n\t{\n\t\tdetail::uint64 const Value64(static_cast<detail::uint64>(x) + static_cast<detail::uint64>(y));\n\t\tdetail::uint64 const Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1));\n\t\tCarry = Value64 > Max32 ? 1u : 0u;\n\t\treturn static_cast<uint>(Value64 % (Max32 + static_cast<detail::uint64>(1)));\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> uaddCarry(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Carry)\n\t{\n\t\tvec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) + vec<L, detail::uint64, Q>(y));\n\t\tvec<L, detail::uint64, Q> Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1));\n\t\tCarry = mix(vec<L, uint, Q>(0), vec<L, uint, Q>(1), greaterThan(Value64, Max32));\n\t\treturn vec<L, uint, Q>(Value64 % (Max32 + static_cast<detail::uint64>(1)));\n\t}\n\n\t// usubBorrow\n\tGLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow)\n\t{\n\t\tBorrow = x >= y ? static_cast<uint>(0) : static_cast<uint>(1);\n\t\tif(y >= x)\n\t\t\treturn y - x;\n\t\telse\n\t\t\treturn static_cast<uint>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (static_cast<detail::int64>(y) - static_cast<detail::int64>(x)));\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> usubBorrow(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Borrow)\n\t{\n\t\tBorrow = mix(vec<L, uint, Q>(1), vec<L, uint, Q>(0), greaterThanEqual(x, y));\n\t\tvec<L, uint, Q> const YgeX(y - x);\n\t\tvec<L, uint, Q> const XgeY(vec<L, uint, Q>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (vec<L, detail::int64, Q>(y) - vec<L, detail::int64, Q>(x))));\n\t\treturn mix(XgeY, YgeX, greaterThanEqual(y, x));\n\t}\n\n\t// umulExtended\n\tGLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb)\n\t{\n\t\tdetail::uint64 Value64 = static_cast<detail::uint64>(x) * static_cast<detail::uint64>(y);\n\t\tmsb = static_cast<uint>(Value64 >> static_cast<detail::uint64>(32));\n\t\tlsb = static_cast<uint>(Value64);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER void umulExtended(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& msb, vec<L, uint, Q>& lsb)\n\t{\n\t\tvec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) * vec<L, detail::uint64, Q>(y));\n\t\tmsb = vec<L, uint, Q>(Value64 >> static_cast<detail::uint64>(32));\n\t\tlsb = vec<L, uint, Q>(Value64);\n\t}\n\n\t// imulExtended\n\tGLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb)\n\t{\n\t\tdetail::int64 Value64 = static_cast<detail::int64>(x) * static_cast<detail::int64>(y);\n\t\tmsb = static_cast<int>(Value64 >> static_cast<detail::int64>(32));\n\t\tlsb = static_cast<int>(Value64);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER void imulExtended(vec<L, int, Q> const& x, vec<L, int, Q> const& y, vec<L, int, Q>& msb, vec<L, int, Q>& lsb)\n\t{\n\t\tvec<L, detail::int64, Q> Value64(vec<L, detail::int64, Q>(x) * vec<L, detail::int64, Q>(y));\n\t\tlsb = vec<L, int, Q>(Value64 & static_cast<detail::int64>(0xFFFFFFFF));\n\t\tmsb = vec<L, int, Q>((Value64 >> static_cast<detail::int64>(32)) & static_cast<detail::int64>(0xFFFFFFFF));\n\t}\n\n\t// bitfieldExtract\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits)\n\t{\n\t\treturn bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldExtract(vec<L, T, Q> const& Value, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldExtract' only accept integer inputs\");\n\n\t\treturn (Value >> static_cast<T>(Offset)) & static_cast<T>(detail::mask(Bits));\n\t}\n\n\t// bitfieldInsert\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitfieldInsert' only accept integer values\");\n\n\t\treturn bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldInsert(vec<L, T, Q> const& Base, vec<L, T, Q> const& Insert, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldInsert' only accept integer values\");\n\n\t\tT const Mask = detail::mask(static_cast<T>(Bits)) << Offset;\n\t\treturn (Base & ~Mask) | ((Insert << static_cast<T>(Offset)) & Mask);\n\t}\n\n\t// bitfieldReverse\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\treturn bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\tvec<L, T, Q> x(v);\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32));\n\t\treturn x;\n\t}\n\n\t// bitCount\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int bitCount(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\treturn bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> bitCount(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(push)\n#\t\t\tpragma warning(disable : 4310) //cast truncates constant value\n#\t\tendif\n\n\t\tvec<L, typename detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<vec<L, typename detail::make_unsigned<T>::type, Q> const *>(&v));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32));\n\t\treturn vec<L, int, Q>(x);\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(pop)\n#\t\tendif\n\t}\n\n\t// findLSB\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findLSB(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\treturn detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findLSB(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\treturn detail::functor1<vec, L, int, T, Q>::call(findLSB, x);\n\t}\n\n\t// findMSB\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findMSB(genIUType v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\treturn findMSB(vec<1, genIUType>(v)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findMSB(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\treturn detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_integer_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_integer_simd.inl",
    "content": "#include \"../simd/integer.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_bitfieldReverseStep<4, uint, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift)\n\t\t{\n\t\t\t__m128i const set0 = v.data;\n\n\t\t\t__m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask));\n\t\t\t__m128i const and1 = _mm_and_si128(set0, set1);\n\t\t\t__m128i const sft1 = _mm_slli_epi32(and1, Shift);\n\n\t\t\t__m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1));\n\t\t\t__m128i const and2 = _mm_and_si128(set0, set2);\n\t\t\t__m128i const sft2 = _mm_srai_epi32(and2, Shift);\n\n\t\t\t__m128i const or0 = _mm_or_si128(sft1, sft2);\n\n\t\t\treturn or0;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_bitfieldBitCountStep<4, uint, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift)\n\t\t{\n\t\t\t__m128i const set0 = v.data;\n\n\t\t\t__m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask));\n\t\t\t__m128i const and0 = _mm_and_si128(set0, set1);\n\t\t\t__m128i const sft0 = _mm_slli_epi32(set0, Shift);\n\t\t\t__m128i const and1 = _mm_and_si128(sft0, set1);\n\t\t\t__m128i const add0 = _mm_add_epi32(and0, and1);\n\n\t\t\treturn add0;\n\t\t}\n\t};\n}//namespace detail\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER int bitCount(uint x)\n\t{\n\t\treturn _mm_popcnt_u32(x);\n\t}\n\n#\tif(GLM_MODEL == GLM_MODEL_64)\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER int bitCount(detail::uint64 x)\n\t{\n\t\treturn static_cast<int>(_mm_popcnt_u64(x));\n\t}\n#\tendif//GLM_MODEL\n#\tendif//GLM_ARCH\n\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_matrix.inl",
    "content": "#include \"../geometric.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_matrixCompMult\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\tmat<C, R, T, Q> Result;\n\t\t\tfor(length_t i = 0; i < Result.length(); ++i)\n\t\t\t\tResult[i] = x[i] * y[i];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_matrixCompMult_type {\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'matrixCompMult' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tstruct compute_outerProduct {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\ttypename detail::outerProduct_trait<DA, DB, T, Q>::type m;\n\t\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\t\tm[i] = c * r[i];\n\t\t\treturn m;\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q, bool IsFloat>\n\tstruct compute_outerProduct_type {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE,\n\t\t\t\t\"'outerProduct' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\n\t\t\treturn detail::compute_outerProduct<DA, DB, T, Q>::call(c, r);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3,2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\tResult[3][2] = m[2][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[2][3] = m[3][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[2][3] = m[3][2];\n\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\tResult[3][2] = m[2][3];\n\t\t\tResult[3][3] = m[3][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_transpose_type {\n\t\tGLM_FUNC_QUALIFIER static mat<R, C, T, Q> call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'transpose' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\treturn m[0][0] * m[1][1] - m[1][0] * m[0][1];\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\treturn\n\t\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])\n\t\t\t\t- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])\n\t\t\t\t+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tT SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\tT SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\tT SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\tT SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\tT SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\tT SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t\t\tvec<4, T, Q> DetCof(\n\t\t\t\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t\t\t\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t\t\t\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t\t\t\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t\t\treturn\n\t\t\t\tm[0][0] * DetCof[0] + m[0][1] * DetCof[1] +\n\t\t\t\tm[0][2] * DetCof[2] + m[0][3] * DetCof[3];\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_determinant_type{\n\t\n\t\tGLM_FUNC_QUALIFIER static T call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'determinant' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / (\n\t\t\t\t+ m[0][0] * m[1][1]\n\t\t\t\t- m[1][0] * m[0][1]);\n\n\t\t\tmat<2, 2, T, Q> Inverse(\n\t\t\t\t+ m[1][1] * OneOverDeterminant,\n\t\t\t\t- m[0][1] * OneOverDeterminant,\n\t\t\t\t- m[1][0] * OneOverDeterminant,\n\t\t\t\t+ m[0][0] * OneOverDeterminant);\n\n\t\t\treturn Inverse;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / (\n\t\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])\n\t\t\t\t- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])\n\t\t\t\t+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]));\n\n\t\t\tmat<3, 3, T, Q> Inverse;\n\t\t\tInverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant;\n\t\t\tInverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant;\n\t\t\tInverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant;\n\t\t\tInverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant;\n\t\t\tInverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant;\n\n\t\t\treturn Inverse;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tT Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\tT Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t\tT Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t\tT Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\tT Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t\tT Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t\tT Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\tT Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t\tT Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t\tT Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\tT Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t\tT Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t\tT Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\tT Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t\tT Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t\tT Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\tT Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t\tT Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t\tvec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03);\n\t\t\tvec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07);\n\t\t\tvec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11);\n\t\t\tvec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15);\n\t\t\tvec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19);\n\t\t\tvec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23);\n\n\t\t\tvec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);\n\t\t\tvec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);\n\t\t\tvec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);\n\t\t\tvec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);\n\n\t\t\tvec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);\n\t\t\tvec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);\n\t\t\tvec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);\n\t\t\tvec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);\n\n\t\t\tvec<4, T, Q> SignA(+1, -1, +1, -1);\n\t\t\tvec<4, T, Q> SignB(-1, +1, -1, +1);\n\t\t\tmat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB);\n\n\t\t\tvec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);\n\n\t\t\tvec<4, T, Q> Dot0(m[0] * Row0);\n\t\t\tT Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w);\n\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / Dot1;\n\n\t\t\treturn Inverse * OneOverDeterminant;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t{\n\t\treturn detail::compute_matrixCompMult_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename detail::outerProduct_trait<DA, DB, T, Q>::type outerProduct(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t{\n\t\treturn detail::compute_outerProduct_type<DA, DB, T, Q, std::numeric_limits<T>::is_iec559>::call(c, r);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& m)\n\t{\n\t\treturn detail::compute_transpose_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(m);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T determinant(mat<C, R, T, Q> const& m)\n\t{\n\t\treturn detail::compute_determinant_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(m);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'inverse' only accept floating-point inputs\");\n\t\treturn detail::compute_inverse<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_matrix_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_matrix_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#include \"type_mat4x4.hpp\"\n#include \"../geometric.hpp\"\n#include \"../simd/matrix.h\"\n#include <cstring>\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<qualifier Q>\n\tstruct compute_matrixCompMult<4, 4, float, Q, true>\n\t{\n\t\tGLM_STATIC_ASSERT(detail::is_aligned<Q>::value, \"Specialization requires aligned\");\n\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_matrixCompMult(\n\t\t\t        &x[0].data,\n\t\t\t        &y[0].data,\n\t\t\t        &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_transpose<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_transpose(&m[0].data, &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_determinant<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_mat4_determinant(&m[0].data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_inverse<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_inverse(&m[0].data, &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_lowp> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_mediump> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_highp> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n#\tendif\n}//namespace glm\n\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\n\nnamespace glm {\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n\ttemplate <qualifier Q>\n\tGLM_FUNC_QUALIFIER\n\ttypename std::enable_if<detail::is_aligned<Q>::value, mat<4, 4, float, Q>>::type\n\toperator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2)\n\t{\n\t\tauto MulRow = [&](int l) {\n\t\t\tfloat32x4_t const SrcA = m2[l].data;\n\n\t\t\tfloat32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0);\n\t\t\tr = neon::madd_lane(r, m1[1].data, SrcA, 1);\n\t\t\tr = neon::madd_lane(r, m1[2].data, SrcA, 2);\n\t\t\tr = neon::madd_lane(r, m1[3].data, SrcA, 3);\n\n\t\t\treturn r;\n\t\t};\n\n\t\tmat<4, 4, float, aligned_highp> Result;\n\t\tResult[0].data = MulRow(0);\n\t\tResult[1].data = MulRow(1);\n\t\tResult[2].data = MulRow(2);\n\t\tResult[3].data = MulRow(3);\n\n\t\treturn Result;\n\t}\n#endif // CXX11\n\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_inverse<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tfloat32x4_t const& m0 = m[0].data;\n\t\t\tfloat32x4_t const& m1 = m[1].data;\n\t\t\tfloat32x4_t const& m2 = m[2].data;\n\t\t\tfloat32x4_t const& m3 = m[3].data;\n\n\t\t\t// m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\t// m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\t// m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t\t// m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t\tfloat32x4_t Fac0;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac0 = w0 * w1 -  w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\t// m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\t// m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t\t// m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t\tfloat32x4_t Fac1;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac1 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\t// m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\t// m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t\t// m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t\tfloat32x4_t Fac2;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tFac2 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\t// m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\t// m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t\t// m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t\tfloat32x4_t Fac3;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac3 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\t// m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\t// m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t\t// m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t\tfloat32x4_t Fac4;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tFac4 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\t// m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\t// m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t\t// m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t\tfloat32x4_t Fac5;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tFac5 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\tfloat32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]);\n\t\t\tfloat32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]);\n\t\t\tfloat32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]);\n\t\t\tfloat32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]);\n\n\t\t\tfloat32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2;\n\t\t\tfloat32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4;\n\t\t\tfloat32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5;\n\t\t\tfloat32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5;\n\n\t\t\tfloat32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0;\n\t\t\tfloat32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1;\n\t\t\tfloat32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2;\n\t\t\tfloat32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3;\n\n\t\t\tfloat32x4_t det = neon::mul_lane(r0, m0, 0);\n\t\t\tdet = neon::madd_lane(det, r1, m0, 1);\n\t\t\tdet = neon::madd_lane(det, r2, m0, 2);\n\t\t\tdet = neon::madd_lane(det, r3, m0, 3);\n\n\t\t\tfloat32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0));\n\n\t\t\tmat<4, 4, float, Q> r;\n\t\t\tr[0].data = vmulq_f32(r0, rdet);\n\t\t\tr[1].data = vmulq_f32(r1, rdet);\n\t\t\tr[2].data = vmulq_f32(r2, rdet);\n\t\t\tr[3].data = vmulq_f32(r3, rdet);\n\t\t\treturn r;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_packing.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_packing.inl\n\n#include \"../common.hpp\"\n#include \"type_half.hpp\"\n\nnamespace glm\n{\n\tGLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tunsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tunsigned short out[2];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n \n\t\tvec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned short out[2];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tunsigned char in[4];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\t\tu.in[2] = result[2];\n\t\tu.in[3] = result[3];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tunsigned char out[4];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned char in[4];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\t\tu.in[2] = result[2];\n\t\tu.in[3] = result[3];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned char out[4];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint   in[2];\n\t\t\tdouble out;\n\t\t} u;\n\n\t\tu.in[0] = v[0];\n\t\tu.in[1] = v[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tdouble in;\n\t\t\tuint   out[2];\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn uvec2(u.out[0], u.out[1]);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tu.in[0] = detail::toFloat16(v.x);\n\t\tu.in[1] = detail::toFloat16(v.y);\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned short out[2];\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn vec2(\n\t\t\tdetail::toFloat32(u.out[0]),\n\t\t\tdetail::toFloat32(u.out[1]));\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_packing_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_packing_simd.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_trigonometric.inl",
    "content": "#include \"_vectorize.hpp\"\n#include <cmath>\n#include <limits>\n\nnamespace glm\n{\n\t// radians\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'radians' only accept floating-point input\");\n\n\t\treturn degrees * static_cast<genType>(0.01745329251994329576923690768489);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(radians, v);\n\t}\n\n\t// degrees\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'degrees' only accept floating-point input\");\n\n\t\treturn radians * static_cast<genType>(57.295779513082320876798154814105);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(degrees, v);\n\t}\n\n\t// sin\n\tusing ::std::sin;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sin(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(sin, v);\n\t}\n\n\t// cos\n\tusing std::cos;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cos(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cos, v);\n\t}\n\n\t// tan\n\tusing std::tan;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> tan(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tan, v);\n\t}\n\n\t// asin\n\tusing std::asin;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asin(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asin, v);\n\t}\n\n\t// acos\n\tusing std::acos;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acos(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acos, v);\n\t}\n\n\t// atan\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType atan(genType y, genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'atan' only accept floating-point input\");\n\n\t\treturn ::std::atan2(y, x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(::std::atan2, a, b);\n\t}\n\n\tusing std::atan;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atan, v);\n\t}\n\n\t// sinh\n\tusing std::sinh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sinh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(sinh, v);\n\t}\n\n\t// cosh\n\tusing std::cosh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cosh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cosh, v);\n\t}\n\n\t// tanh\n\tusing std::tanh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> tanh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tanh, v);\n\t}\n\n\t// asinh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::asinh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType asinh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asinh' only accept floating-point input\");\n\n\t\t\treturn (x < static_cast<genType>(0) ? static_cast<genType>(-1) : (x > static_cast<genType>(0) ? static_cast<genType>(1) : static_cast<genType>(0))) * log(std::abs(x) + sqrt(static_cast<genType>(1) + x * x));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asinh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asinh, v);\n\t}\n\n\t// acosh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::acosh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType acosh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acosh' only accept floating-point input\");\n\n\t\t\tif(x < static_cast<genType>(1))\n\t\t\t\treturn static_cast<genType>(0);\n\t\t\treturn log(x + sqrt(x * x - static_cast<genType>(1)));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acosh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acosh, v);\n\t}\n\n\t// atanh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::atanh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType atanh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'atanh' only accept floating-point input\");\n\n\t\t\tif(std::abs(x) >= static_cast<genType>(1))\n\t\t\t\treturn 0;\n\t\t\treturn static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atanh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atanh, v);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_trigonometric_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_trigonometric_simd.inl",
    "content": ""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_vector_relational.inl",
    "content": "namespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] < y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] <= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] > y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] >= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] == y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] != y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v)\n\t{\n\t\tbool Result = false;\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult = Result || v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v)\n\t{\n\t\tbool Result = true;\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult = Result && v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = !v[i];\n\t\treturn Result;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_vector_relational_simd.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/func_vector_relational_simd.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/glm.cpp",
    "content": "/// @ref core\n/// @file glm/glm.cpp\n\n#ifndef GLM_ENABLE_EXPERIMENTAL\n#define GLM_ENABLE_EXPERIMENTAL\n#endif\n#include <glm/gtx/dual_quaternion.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <glm/glm.hpp>\n\nnamespace glm\n{\n// tvec1 type explicit instantiation\ntemplate struct vec<1, uint8, lowp>;\ntemplate struct vec<1, uint16, lowp>;\ntemplate struct vec<1, uint32, lowp>;\ntemplate struct vec<1, uint64, lowp>;\ntemplate struct vec<1, int8, lowp>;\ntemplate struct vec<1, int16, lowp>;\ntemplate struct vec<1, int32, lowp>;\ntemplate struct vec<1, int64, lowp>;\ntemplate struct vec<1, float32, lowp>;\ntemplate struct vec<1, float64, lowp>;\n\ntemplate struct vec<1, uint8, mediump>;\ntemplate struct vec<1, uint16, mediump>;\ntemplate struct vec<1, uint32, mediump>;\ntemplate struct vec<1, uint64, mediump>;\ntemplate struct vec<1, int8, mediump>;\ntemplate struct vec<1, int16, mediump>;\ntemplate struct vec<1, int32, mediump>;\ntemplate struct vec<1, int64, mediump>;\ntemplate struct vec<1, float32, mediump>;\ntemplate struct vec<1, float64, mediump>;\n\ntemplate struct vec<1, uint8, highp>;\ntemplate struct vec<1, uint16, highp>;\ntemplate struct vec<1, uint32, highp>;\ntemplate struct vec<1, uint64, highp>;\ntemplate struct vec<1, int8, highp>;\ntemplate struct vec<1, int16, highp>;\ntemplate struct vec<1, int32, highp>;\ntemplate struct vec<1, int64, highp>;\ntemplate struct vec<1, float32, highp>;\ntemplate struct vec<1, float64, highp>;\n\n// tvec2 type explicit instantiation\ntemplate struct vec<2, uint8, lowp>;\ntemplate struct vec<2, uint16, lowp>;\ntemplate struct vec<2, uint32, lowp>;\ntemplate struct vec<2, uint64, lowp>;\ntemplate struct vec<2, int8, lowp>;\ntemplate struct vec<2, int16, lowp>;\ntemplate struct vec<2, int32, lowp>;\ntemplate struct vec<2, int64, lowp>;\ntemplate struct vec<2, float32, lowp>;\ntemplate struct vec<2, float64, lowp>;\n\ntemplate struct vec<2, uint8, mediump>;\ntemplate struct vec<2, uint16, mediump>;\ntemplate struct vec<2, uint32, mediump>;\ntemplate struct vec<2, uint64, mediump>;\ntemplate struct vec<2, int8, mediump>;\ntemplate struct vec<2, int16, mediump>;\ntemplate struct vec<2, int32, mediump>;\ntemplate struct vec<2, int64, mediump>;\ntemplate struct vec<2, float32, mediump>;\ntemplate struct vec<2, float64, mediump>;\n\ntemplate struct vec<2, uint8, highp>;\ntemplate struct vec<2, uint16, highp>;\ntemplate struct vec<2, uint32, highp>;\ntemplate struct vec<2, uint64, highp>;\ntemplate struct vec<2, int8, highp>;\ntemplate struct vec<2, int16, highp>;\ntemplate struct vec<2, int32, highp>;\ntemplate struct vec<2, int64, highp>;\ntemplate struct vec<2, float32, highp>;\ntemplate struct vec<2, float64, highp>;\n\n// tvec3 type explicit instantiation\ntemplate struct vec<3, uint8, lowp>;\ntemplate struct vec<3, uint16, lowp>;\ntemplate struct vec<3, uint32, lowp>;\ntemplate struct vec<3, uint64, lowp>;\ntemplate struct vec<3, int8, lowp>;\ntemplate struct vec<3, int16, lowp>;\ntemplate struct vec<3, int32, lowp>;\ntemplate struct vec<3, int64, lowp>;\ntemplate struct vec<3, float32, lowp>;\ntemplate struct vec<3, float64, lowp>;\n\ntemplate struct vec<3, uint8, mediump>;\ntemplate struct vec<3, uint16, mediump>;\ntemplate struct vec<3, uint32, mediump>;\ntemplate struct vec<3, uint64, mediump>;\ntemplate struct vec<3, int8, mediump>;\ntemplate struct vec<3, int16, mediump>;\ntemplate struct vec<3, int32, mediump>;\ntemplate struct vec<3, int64, mediump>;\ntemplate struct vec<3, float32, mediump>;\ntemplate struct vec<3, float64, mediump>;\n\ntemplate struct vec<3, uint8, highp>;\ntemplate struct vec<3, uint16, highp>;\ntemplate struct vec<3, uint32, highp>;\ntemplate struct vec<3, uint64, highp>;\ntemplate struct vec<3, int8, highp>;\ntemplate struct vec<3, int16, highp>;\ntemplate struct vec<3, int32, highp>;\ntemplate struct vec<3, int64, highp>;\ntemplate struct vec<3, float32, highp>;\ntemplate struct vec<3, float64, highp>;\n\n// tvec4 type explicit instantiation\ntemplate struct vec<4, uint8, lowp>;\ntemplate struct vec<4, uint16, lowp>;\ntemplate struct vec<4, uint32, lowp>;\ntemplate struct vec<4, uint64, lowp>;\ntemplate struct vec<4, int8, lowp>;\ntemplate struct vec<4, int16, lowp>;\ntemplate struct vec<4, int32, lowp>;\ntemplate struct vec<4, int64, lowp>;\ntemplate struct vec<4, float32, lowp>;\ntemplate struct vec<4, float64, lowp>;\n\ntemplate struct vec<4, uint8, mediump>;\ntemplate struct vec<4, uint16, mediump>;\ntemplate struct vec<4, uint32, mediump>;\ntemplate struct vec<4, uint64, mediump>;\ntemplate struct vec<4, int8, mediump>;\ntemplate struct vec<4, int16, mediump>;\ntemplate struct vec<4, int32, mediump>;\ntemplate struct vec<4, int64, mediump>;\ntemplate struct vec<4, float32, mediump>;\ntemplate struct vec<4, float64, mediump>;\n\ntemplate struct vec<4, uint8, highp>;\ntemplate struct vec<4, uint16, highp>;\ntemplate struct vec<4, uint32, highp>;\ntemplate struct vec<4, uint64, highp>;\ntemplate struct vec<4, int8, highp>;\ntemplate struct vec<4, int16, highp>;\ntemplate struct vec<4, int32, highp>;\ntemplate struct vec<4, int64, highp>;\ntemplate struct vec<4, float32, highp>;\ntemplate struct vec<4, float64, highp>;\n\n// tmat2x2 type explicit instantiation\ntemplate struct mat<2, 2, float32, lowp>;\ntemplate struct mat<2, 2, float64, lowp>;\n\ntemplate struct mat<2, 2, float32, mediump>;\ntemplate struct mat<2, 2, float64, mediump>;\n\ntemplate struct mat<2, 2, float32, highp>;\ntemplate struct mat<2, 2, float64, highp>;\n\n// tmat2x3 type explicit instantiation\ntemplate struct mat<2, 3, float32, lowp>;\ntemplate struct mat<2, 3, float64, lowp>;\n\ntemplate struct mat<2, 3, float32, mediump>;\ntemplate struct mat<2, 3, float64, mediump>;\n\ntemplate struct mat<2, 3, float32, highp>;\ntemplate struct mat<2, 3, float64, highp>;\n\n// tmat2x4 type explicit instantiation\ntemplate struct mat<2, 4, float32, lowp>;\ntemplate struct mat<2, 4, float64, lowp>;\n\ntemplate struct mat<2, 4, float32, mediump>;\ntemplate struct mat<2, 4, float64, mediump>;\n\ntemplate struct mat<2, 4, float32, highp>;\ntemplate struct mat<2, 4, float64, highp>;\n\n// tmat3x2 type explicit instantiation\ntemplate struct mat<3, 2, float32, lowp>;\ntemplate struct mat<3, 2, float64, lowp>;\n\ntemplate struct mat<3, 2, float32, mediump>;\ntemplate struct mat<3, 2, float64, mediump>;\n\ntemplate struct mat<3, 2, float32, highp>;\ntemplate struct mat<3, 2, float64, highp>;\n\n// tmat3x3 type explicit instantiation\ntemplate struct mat<3, 3, float32, lowp>;\ntemplate struct mat<3, 3, float64, lowp>;\n\ntemplate struct mat<3, 3, float32, mediump>;\ntemplate struct mat<3, 3, float64, mediump>;\n\ntemplate struct mat<3, 3, float32, highp>;\ntemplate struct mat<3, 3, float64, highp>;\n\n// tmat3x4 type explicit instantiation\ntemplate struct mat<3, 4, float32, lowp>;\ntemplate struct mat<3, 4, float64, lowp>;\n\ntemplate struct mat<3, 4, float32, mediump>;\ntemplate struct mat<3, 4, float64, mediump>;\n\ntemplate struct mat<3, 4, float32, highp>;\ntemplate struct mat<3, 4, float64, highp>;\n\n// tmat4x2 type explicit instantiation\ntemplate struct mat<4, 2, float32, lowp>;\ntemplate struct mat<4, 2, float64, lowp>;\n\ntemplate struct mat<4, 2, float32, mediump>;\ntemplate struct mat<4, 2, float64, mediump>;\n\ntemplate struct mat<4, 2, float32, highp>;\ntemplate struct mat<4, 2, float64, highp>;\n\n// tmat4x3 type explicit instantiation\ntemplate struct mat<4, 3, float32, lowp>;\ntemplate struct mat<4, 3, float64, lowp>;\n\ntemplate struct mat<4, 3, float32, mediump>;\ntemplate struct mat<4, 3, float64, mediump>;\n\ntemplate struct mat<4, 3, float32, highp>;\ntemplate struct mat<4, 3, float64, highp>;\n\n// tmat4x4 type explicit instantiation\ntemplate struct mat<4, 4, float32, lowp>;\ntemplate struct mat<4, 4, float64, lowp>;\n\ntemplate struct mat<4, 4, float32, mediump>;\ntemplate struct mat<4, 4, float64, mediump>;\n\ntemplate struct mat<4, 4, float32, highp>;\ntemplate struct mat<4, 4, float64, highp>;\n\n// tquat type explicit instantiation\ntemplate struct qua<float32, lowp>;\ntemplate struct qua<float64, lowp>;\n\ntemplate struct qua<float32, mediump>;\ntemplate struct qua<float64, mediump>;\n\ntemplate struct qua<float32, highp>;\ntemplate struct qua<float64, highp>;\n\n//tdualquat type explicit instantiation\ntemplate struct tdualquat<float32, lowp>;\ntemplate struct tdualquat<float64, lowp>;\n\ntemplate struct tdualquat<float32, mediump>;\ntemplate struct tdualquat<float64, mediump>;\n\ntemplate struct tdualquat<float32, highp>;\ntemplate struct tdualquat<float64, highp>;\n\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/qualifier.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm\n{\n\t/// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp)\n\tenum qualifier\n\t{\n\t\tpacked_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs\n\t\tpacked_mediump, ///< Typed data is tightly packed in memory  and operations are executed with medium precision in term of ULPs for higher performance\n\t\tpacked_lowp, ///< Typed data is tightly packed in memory  and operations are executed with low precision in term of ULPs to maximize performance\n\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\t\taligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs\n\t\t\taligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance\n\t\t\taligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance\n\t\t\taligned = aligned_highp, ///< By default aligned qualifier is also high precision\n#\t\tendif\n\n\t\thighp = packed_highp, ///< By default highp qualifier is also packed\n\t\tmediump = packed_mediump, ///< By default mediump qualifier is also packed\n\t\tlowp = packed_lowp, ///< By default lowp qualifier is also packed\n\t\tpacked = packed_highp, ///< By default packed qualifier is also high precision\n\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)\n\t\t\tdefaultp = aligned_highp\n#\t\telse\n\t\t\tdefaultp = highp\n#\t\tendif\n\t};\n\n\ttypedef qualifier precision;\n\n\ttemplate<length_t L, typename T, qualifier Q = defaultp> struct vec;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q = defaultp> struct mat;\n\ttemplate<typename T, qualifier Q = defaultp> struct qua;\n\n#\tif GLM_HAS_TEMPLATE_ALIASES\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec1 = vec<1, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x2 = mat<2, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x3 = mat<2, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x4 = mat<2, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x2 = mat<3, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x3 = mat<3, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x4 = mat<3, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x2 = mat<4, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x3 = mat<4, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x4 = mat<4, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tquat = qua<T, Q>;\n#\tendif\n\nnamespace detail\n{\n\ttemplate<glm::qualifier P>\n\tstruct is_aligned\n\t{\n\t\tstatic const bool value = false;\n\t};\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_lowp>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_mediump>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_highp>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n#\tendif\n\n\ttemplate<length_t L, typename T, bool is_aligned>\n\tstruct storage\n\t{\n\t\ttypedef struct type {\n\t\t\tT data[L];\n\t\t} type;\n\t};\n\n#\tif GLM_HAS_ALIGNOF\n\t\ttemplate<length_t L, typename T>\n\t\tstruct storage<L, T, true>\n\t\t{\n\t\t\ttypedef struct alignas(L * sizeof(T)) type {\n\t\t\t\tT data[L];\n\t\t\t} type;\n\t\t};\n\n\t\ttemplate<typename T>\n\t\tstruct storage<3, T, true>\n\t\t{\n\t\t\ttypedef struct alignas(4 * sizeof(T)) type {\n\t\t\t\tT data[4];\n\t\t\t} type;\n\t\t};\n#\tendif\n\n#\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\ttemplate<>\n\tstruct storage<4, float, true>\n\t{\n\t\ttypedef glm_f32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, int, true>\n\t{\n\t\ttypedef glm_i32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, unsigned int, true>\n\t{\n\t\ttypedef glm_u32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, double, true>\n\t{\n\t\ttypedef glm_f64vec2 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, detail::int64, true>\n\t{\n\t\ttypedef glm_i64vec2 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, detail::uint64, true>\n\t{\n\t\ttypedef glm_u64vec2 type;\n\t};\n#\tendif\n#\tif (GLM_ARCH & GLM_ARCH_AVX_BIT)\n\ttemplate<>\n\tstruct storage<4, double, true>\n\t{\n\t\ttypedef glm_f64vec4 type;\n\t};\n#\tendif\n\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT)\n\ttemplate<>\n\tstruct storage<4, detail::int64, true>\n\t{\n\t\ttypedef glm_i64vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, detail::uint64, true>\n\t{\n\t\ttypedef glm_u64vec4 type;\n\t};\n#\tendif\n\n#\tif GLM_ARCH & GLM_ARCH_NEON_BIT\n\ttemplate<>\n\tstruct storage<4, float, true>\n\t{\n\t\ttypedef glm_f32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, int, true>\n\t{\n\t\ttypedef glm_i32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, unsigned int, true>\n\t{\n\t\ttypedef glm_u32vec4 type;\n\t};\n#\tendif\n\n\tenum genTypeEnum\n\t{\n\t\tGENTYPE_VEC,\n\t\tGENTYPE_MAT,\n\t\tGENTYPE_QUAT\n\t};\n\n\ttemplate <typename genType>\n\tstruct genTypeTrait\n\t{};\n\n\ttemplate <length_t C, length_t R, typename T>\n\tstruct genTypeTrait<mat<C, R, T> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = GENTYPE_MAT;\n\t};\n\n\ttemplate<typename genType, genTypeEnum type>\n\tstruct init_gentype\n\t{\n\t};\n\n\ttemplate<typename genType>\n\tstruct init_gentype<genType, GENTYPE_QUAT>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()\n\t\t{\n\t\t\treturn genType(1, 0, 0, 0);\n\t\t}\n\t};\n\n\ttemplate<typename genType>\n\tstruct init_gentype<genType, GENTYPE_MAT>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()\n\t\t{\n\t\t\treturn genType(1);\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/setup.hpp",
    "content": "#ifndef GLM_SETUP_INCLUDED\n\n#include <cassert>\n#include <cstddef>\n\n#define GLM_VERSION_MAJOR 0\n#define GLM_VERSION_MINOR 9\n#define GLM_VERSION_PATCH 9\n#define GLM_VERSION_REVISION 9\n#define GLM_VERSION 999\n#define GLM_VERSION_MESSAGE \"GLM: version 0.9.9.9\"\n\n#define GLM_SETUP_INCLUDED GLM_VERSION\n\n///////////////////////////////////////////////////////////////////////////////////\n// Active states\n\n#define GLM_DISABLE\t\t0\n#define GLM_ENABLE\t\t1\n\n///////////////////////////////////////////////////////////////////////////////////\n// Messages\n\n#if defined(GLM_FORCE_MESSAGES)\n#\tdefine GLM_MESSAGES GLM_ENABLE\n#else\n#\tdefine GLM_MESSAGES GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Detect the platform\n\n#include \"../simd/platform.h\"\n\n///////////////////////////////////////////////////////////////////////////////////\n// Build model\n\n#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)\n#\tdefine GLM_MODEL\tGLM_MODEL_64\n#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM)\n#\tdefine GLM_MODEL\tGLM_MODEL_32\n#else\n#\tdefine GLM_MODEL\tGLM_MODEL_32\n#endif//\n\n#if !defined(GLM_MODEL) && GLM_COMPILER != 0\n#\terror \"GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message.\"\n#endif//GLM_MODEL\n\n///////////////////////////////////////////////////////////////////////////////////\n// C++ Version\n\n// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A\n\n#define GLM_LANG_CXX98_FLAG\t\t\t(1 << 1)\n#define GLM_LANG_CXX03_FLAG\t\t\t(1 << 2)\n#define GLM_LANG_CXX0X_FLAG\t\t\t(1 << 3)\n#define GLM_LANG_CXX11_FLAG\t\t\t(1 << 4)\n#define GLM_LANG_CXX14_FLAG\t\t\t(1 << 5)\n#define GLM_LANG_CXX17_FLAG\t\t\t(1 << 6)\n#define GLM_LANG_CXX2A_FLAG\t\t\t(1 << 7)\n#define GLM_LANG_CXXMS_FLAG\t\t\t(1 << 8)\n#define GLM_LANG_CXXGNU_FLAG\t\t(1 << 9)\n\n#define GLM_LANG_CXX98\t\t\tGLM_LANG_CXX98_FLAG\n#define GLM_LANG_CXX03\t\t\t(GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)\n#define GLM_LANG_CXX0X\t\t\t(GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)\n#define GLM_LANG_CXX11\t\t\t(GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)\n#define GLM_LANG_CXX14\t\t\t(GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)\n#define GLM_LANG_CXX17\t\t\t(GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)\n#define GLM_LANG_CXX2A\t\t\t(GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)\n#define GLM_LANG_CXXMS\t\t\tGLM_LANG_CXXMS_FLAG\n#define GLM_LANG_CXXGNU\t\t\tGLM_LANG_CXXGNU_FLAG\n\n#if (defined(_MSC_EXTENSIONS))\n#\tdefine GLM_LANG_EXT GLM_LANG_CXXMS_FLAG\n#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT))\n#\tdefine GLM_LANG_EXT GLM_LANG_CXXMS_FLAG\n#else\n#\tdefine GLM_LANG_EXT 0\n#endif\n\n#if (defined(GLM_FORCE_CXX_UNKNOWN))\n#\tdefine GLM_LANG 0\n#elif defined(GLM_FORCE_CXX2A)\n#\tdefine GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX17)\n#\tdefine GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX14)\n#\tdefine GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX11)\n#\tdefine GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX03)\n#\tdefine GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)\n#elif defined(GLM_FORCE_CXX98)\n#\tdefine GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)\n#else\n#\tif GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG)\n#\t\tif GLM_COMPILER >= GLM_COMPILER_VC15_7\n#\t\t\tdefine GLM_LANG_PLATFORM _MSVC_LANG\n#\t\telif GLM_COMPILER >= GLM_COMPILER_VC15\n#\t\t\tif _MSVC_LANG > 201402L\n#\t\t\t\tdefine GLM_LANG_PLATFORM 201402L\n#\t\t\telse\n#\t\t\t\tdefine GLM_LANG_PLATFORM _MSVC_LANG\n#\t\t\tendif\n#\t\telse\n#\t\t\tdefine GLM_LANG_PLATFORM 0\n#\t\tendif\n#\telse\n#\t\tdefine GLM_LANG_PLATFORM 0\n#\tendif\n\n#\tif __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)\n#\telif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)\n#\telif __cplusplus == 201402L || __cplusplus == 201406L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)\n#\telif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)\n#\telif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)\n#\t\tdefine GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)\n#\telif __cplusplus == 199711L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)\n#\telse\n#\t\tdefine GLM_LANG (0 | GLM_LANG_EXT)\n#\tendif\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Has of C++ features\n\n// http://clang.llvm.org/cxx_status.html\n// http://gcc.gnu.org/projects/cxx0x.html\n// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx\n\n// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564\n#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif (GLM_COMPILER & GLM_COMPILER_CUDA_RTC) == GLM_COMPILER_CUDA_RTC\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif GLM_COMPILER & GLM_COMPILER_CLANG\n#\tif (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))\n#\t\tdefine GLM_HAS_CXX11_STL 1\n#\telse\n#\t\tdefine GLM_HAS_CXX11_STL 0\n#\tendif\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_CXX11_STL 1\n#else\n#\tdefine GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))\n#endif\n\n// N1720\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_STATIC_ASSERT 1\n#else\n#\tdefine GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N1988\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_EXTENDED_INTEGER_TYPE 1\n#else\n#\tdefine GLM_HAS_EXTENDED_INTEGER_TYPE (\\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP)))\n#endif\n\n// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_INITIALIZER_LISTS 1\n#else\n#\tdefine GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS 1\n#else\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t(GLM_COMPILER & GLM_COMPILER_VC) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP)))\n#endif\n\n// N2346\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)\n#elif GLM_COMPILER & GLM_COMPILER_CUDA\n\t// Do not use defaulted functions for CUDA compiler when function qualifiers are present\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS 0\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS 1\n#else\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2118\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_RVALUE_REFERENCES 1\n#else\n#\tdefine GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1\n#else\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_TEMPLATE_ALIASES 1\n#else\n#\tdefine GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_RANGE_FOR 1\n#else\n#\tdefine GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_ALIGNOF __has_feature(cxx_alignas)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_ALIGNOF 1\n#else\n#\tdefine GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf\n// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html\n#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr...\n#\tdefine GLM_HAS_CONSTEXPR 0\n#elif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tdefine GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)\n#elif (GLM_LANG & GLM_LANG_CXX14_FLAG)\n#\tdefine GLM_HAS_CONSTEXPR 1\n#else\n#\tdefine GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15))))\n#endif\n\n#if GLM_HAS_CONSTEXPR\n#\tdefine GLM_CONSTEXPR constexpr\n#else\n#\tdefine GLM_CONSTEXPR\n#endif\n\n//\n#if GLM_HAS_CONSTEXPR\n# if (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tif __has_feature(cxx_if_constexpr)\n#\t\tdefine GLM_HAS_IF_CONSTEXPR 1\n#\telse\n# \t\tdefine GLM_HAS_IF_CONSTEXPR 0\n#\tendif\n# elif (GLM_LANG & GLM_LANG_CXX17_FLAG)\n# \tdefine GLM_HAS_IF_CONSTEXPR 1\n# else\n# \tdefine GLM_HAS_IF_CONSTEXPR 0\n# endif\n#else\n#\tdefine GLM_HAS_IF_CONSTEXPR 0\n#endif\n\n#if GLM_HAS_IF_CONSTEXPR\n# \tdefine GLM_IF_CONSTEXPR if constexpr\n#else\n#\tdefine GLM_IF_CONSTEXPR if\n#endif\n\n//\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_ASSIGNABLE 1\n#else\n#\tdefine GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))\n#endif\n\n//\n#define GLM_HAS_TRIVIAL_QUERIES 0\n\n//\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_MAKE_SIGNED 1\n#else\n#\tdefine GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n//\n#if defined(GLM_FORCE_INTRINSICS)\n#\tdefine GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))\n#else\n#\tdefine GLM_HAS_BITSCAN_WINDOWS 0\n#endif\n\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_NOEXCEPT 1\n#else\n#\tdefine GLM_HAS_NOEXCEPT 0\n#endif\n\n#if GLM_HAS_NOEXCEPT\n#\tdefine GLM_NOEXCEPT noexcept\n#else\n#\tdefine GLM_NOEXCEPT\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// OpenMP\n#ifdef _OPENMP\n#\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tif GLM_COMPILER >= GLM_COMPILER_GCC61\n#\t\t\tdefine GLM_HAS_OPENMP 45\n#\t\telif GLM_COMPILER >= GLM_COMPILER_GCC49\n#\t\t\tdefine GLM_HAS_OPENMP 40\n#\t\telif GLM_COMPILER >= GLM_COMPILER_GCC47\n#\t\t\tdefine GLM_HAS_OPENMP 31\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tif GLM_COMPILER >= GLM_COMPILER_CLANG38\n#\t\t\tdefine GLM_HAS_OPENMP 31\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tdefine GLM_HAS_OPENMP 20\n#\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\tif GLM_COMPILER >= GLM_COMPILER_INTEL16\n#\t\t\tdefine GLM_HAS_OPENMP 40\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telse\n#\t\tdefine GLM_HAS_OPENMP 0\n#\tendif\n#else\n#\tdefine GLM_HAS_OPENMP 0\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// nullptr\n\n#if GLM_LANG & GLM_LANG_CXX0X_FLAG\n#\tdefine GLM_CONFIG_NULLPTR GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_NULLPTR GLM_DISABLE\n#endif\n\n#if GLM_CONFIG_NULLPTR == GLM_ENABLE\n#\tdefine GLM_NULLPTR nullptr\n#else\n#\tdefine GLM_NULLPTR 0\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Static assert\n\n#if GLM_HAS_STATIC_ASSERT\n#\tdefine GLM_STATIC_ASSERT(x, message) static_assert(x, message)\n#elif GLM_COMPILER & GLM_COMPILER_VC\n#\tdefine GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]\n#else\n#\tdefine GLM_STATIC_ASSERT(x, message) assert(x)\n#endif//GLM_LANG\n\n///////////////////////////////////////////////////////////////////////////////////\n// Qualifiers\n\n// User defines: GLM_CUDA_FORCE_DEVICE_FUNC, GLM_CUDA_FORCE_HOST_FUNC\n\n#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tif defined(GLM_CUDA_FORCE_DEVICE_FUNC) && defined(GLM_CUDA_FORCE_HOST_FUNC)\n#\t\terror \"GLM error: GLM_CUDA_FORCE_DEVICE_FUNC and GLM_CUDA_FORCE_HOST_FUNC should not be defined at the same time, GLM by default generates both device and host code for CUDA compiler.\"\n#\tendif//defined(GLM_CUDA_FORCE_DEVICE_FUNC) && defined(GLM_CUDA_FORCE_HOST_FUNC)\n\n#\tif defined(GLM_CUDA_FORCE_DEVICE_FUNC)\n#\t\tdefine GLM_CUDA_FUNC_DEF __device__\n#\t\tdefine GLM_CUDA_FUNC_DECL __device__\n#\telif defined(GLM_CUDA_FORCE_HOST_FUNC)\n#\t\tdefine GLM_CUDA_FUNC_DEF __host__\n#\t\tdefine GLM_CUDA_FUNC_DECL __host__\n#\telse\n#\t\tdefine GLM_CUDA_FUNC_DEF __device__ __host__\n#\t\tdefine GLM_CUDA_FUNC_DECL __device__ __host__\n#\tendif//defined(GLM_CUDA_FORCE_XXXX_FUNC)\n#else\n#\tdefine GLM_CUDA_FUNC_DEF\n#\tdefine GLM_CUDA_FUNC_DECL\n#endif\n\n#if defined(GLM_FORCE_INLINE)\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tdefine GLM_INLINE __forceinline\n#\t\tdefine GLM_NEVER_INLINE __declspec(noinline)\n#\telif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)\n#\t\tdefine GLM_INLINE inline __attribute__((__always_inline__))\n#\t\tdefine GLM_NEVER_INLINE __attribute__((__noinline__))\n#\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\t\tdefine GLM_INLINE __forceinline__\n#\t\tdefine GLM_NEVER_INLINE __noinline__\n#\telse\n#\t\tdefine GLM_INLINE inline\n#\t\tdefine GLM_NEVER_INLINE\n#\tendif//GLM_COMPILER\n#else\n#\tdefine GLM_INLINE inline\n#\tdefine GLM_NEVER_INLINE\n#endif//defined(GLM_FORCE_INLINE)\n\n#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL\n#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE\n\n///////////////////////////////////////////////////////////////////////////////////\n// Swizzle operators\n\n// User defines: GLM_FORCE_SWIZZLE\n\n#define GLM_SWIZZLE_DISABLED\t\t0\n#define GLM_SWIZZLE_OPERATOR\t\t1\n#define GLM_SWIZZLE_FUNCTION\t\t2\n\n#if defined(GLM_SWIZZLE)\n#\tpragma message(\"GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.\")\n#\tdefine GLM_FORCE_SWIZZLE\n#endif\n\n#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && !defined(GLM_FORCE_XYZW_ONLY)\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR\n#elif defined(GLM_FORCE_SWIZZLE)\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION\n#else\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Allows using not basic types as genType\n\n// #define GLM_FORCE_UNRESTRICTED_GENTYPE\n\n#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE\n#\tdefine GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM\n// to use a clip space between 0 to 1.\n// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM\n// to use left handed coordinate system by default.\n\n#define GLM_CLIP_CONTROL_ZO_BIT\t\t(1 << 0) // ZERO_TO_ONE\n#define GLM_CLIP_CONTROL_NO_BIT\t\t(1 << 1) // NEGATIVE_ONE_TO_ONE\n#define GLM_CLIP_CONTROL_LH_BIT\t\t(1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan\n#define GLM_CLIP_CONTROL_RH_BIT\t\t(1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM\n\n#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)\n#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)\n#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)\n#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)\n\n#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE\n#\tifdef GLM_FORCE_LEFT_HANDED\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO\n#\telse\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO\n#\tendif\n#else\n#\tifdef GLM_FORCE_LEFT_HANDED\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO\n#\telse\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO\n#\tendif\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Qualifiers\n\n#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))\n#\tdefine GLM_DEPRECATED __declspec(deprecated)\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name\n#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)\n#\tdefine GLM_DEPRECATED __attribute__((__deprecated__))\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))\n#elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tdefine GLM_DEPRECATED\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)\n#else\n#\tdefine GLM_DEPRECATED\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n\n#ifdef GLM_FORCE_EXPLICIT_CTOR\n#\tdefine GLM_EXPLICIT explicit\n#else\n#\tdefine GLM_EXPLICIT\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// SYCL\n\n#if GLM_COMPILER==GLM_COMPILER_SYCL\n\n#include <CL/sycl.hpp>\n#include <limits>\n\nnamespace glm {\nnamespace std {\n\t// Import SYCL's functions into the namespace glm::std to force their usages.\n\t// It's important to use the math built-in function (sin, exp, ...)\n\t// of SYCL instead the std ones.\n\tusing namespace cl::sycl;\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// Import some \"harmless\" std's stuffs used by glm into\n\t// the new glm::std namespace.\n\ttemplate<typename T>\n\tusing numeric_limits = ::std::numeric_limits<T>;\n\n\tusing ::std::size_t;\n\n\tusing ::std::uint8_t;\n\tusing ::std::uint16_t;\n\tusing ::std::uint32_t;\n\tusing ::std::uint64_t;\n\n\tusing ::std::int8_t;\n\tusing ::std::int16_t;\n\tusing ::std::int32_t;\n\tusing ::std::int64_t;\n\n\tusing ::std::make_unsigned;\n\t///////////////////////////////////////////////////////////////////////////////\n} //namespace std\n} //namespace glm\n\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////////\n// Length type: all length functions returns a length_t type.\n// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise\n// length_t is a typedef of int like GLSL defines it.\n\n#define GLM_LENGTH_INT\t\t1\n#define GLM_LENGTH_SIZE_T\t2\n\n#ifdef GLM_FORCE_SIZE_T_LENGTH\n#\tdefine GLM_CONFIG_LENGTH_TYPE\t\tGLM_LENGTH_SIZE_T\n#else\n#\tdefine GLM_CONFIG_LENGTH_TYPE\t\tGLM_LENGTH_INT\n#endif\n\nnamespace glm\n{\n\tusing std::size_t;\n#\tif GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T\n\t\ttypedef size_t length_t;\n#\telse\n\t\ttypedef int length_t;\n#\tendif\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// constexpr\n\n#if GLM_HAS_CONSTEXPR\n#\tdefine GLM_CONFIG_CONSTEXP GLM_ENABLE\n\n\tnamespace glm\n\t{\n\t\ttemplate<typename T, std::size_t N>\n\t\tconstexpr std::size_t countof(T const (&)[N])\n\t\t{\n\t\t\treturn N;\n\t\t}\n\t}//namespace glm\n#\tdefine GLM_COUNTOF(arr) glm::countof(arr)\n#elif defined(_MSC_VER)\n#\tdefine GLM_CONFIG_CONSTEXP GLM_DISABLE\n\n#\tdefine GLM_COUNTOF(arr) _countof(arr)\n#else\n#\tdefine GLM_CONFIG_CONSTEXP GLM_DISABLE\n\n#\tdefine GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// uint\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tstruct is_int\n\t{\n\t\tenum test {value = 0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<unsigned int>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<signed int>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\ttypedef unsigned int\tuint;\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// 64-bit int\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n#\tinclude <cstdint>\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::uint64_t\t\t\t\t\t\tuint64;\n\t\ttypedef std::int64_t\t\t\t\t\t\tint64;\n#\telif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available\n\t\ttypedef uint64_t\t\t\t\t\t\t\tuint64;\n\t\ttypedef int64_t\t\t\t\t\t\t\t\tint64;\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\ttypedef unsigned __int64\t\t\t\t\tuint64;\n\t\ttypedef signed __int64\t\t\t\t\t\tint64;\n#\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma GCC diagnostic ignored \"-Wlong-long\"\n\t\t__extension__ typedef unsigned long long\tuint64;\n\t\t__extension__ typedef signed long long\t\tint64;\n#\telif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\t\tpragma clang diagnostic ignored \"-Wc++11-long-long\"\n\t\ttypedef unsigned long long\t\t\t\t\tuint64;\n\t\ttypedef signed long long\t\t\t\t\tint64;\n#\telse//unknown compiler\n\t\ttypedef unsigned long long\t\t\t\t\tuint64;\n\t\ttypedef signed long long\t\t\t\t\tint64;\n#\tendif\n}//namespace detail\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// make_unsigned\n\n#if GLM_HAS_MAKE_SIGNED\n#\tinclude <type_traits>\n\nnamespace glm{\nnamespace detail\n{\n\tusing std::make_unsigned;\n}//namespace detail\n}//namespace glm\n\n#else\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename genType>\n\tstruct make_unsigned\n\t{};\n\n\ttemplate<>\n\tstruct make_unsigned<char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<signed char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<short>\n\t{\n\t\ttypedef unsigned short type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<int>\n\t{\n\t\ttypedef unsigned int type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<long>\n\t{\n\t\ttypedef unsigned long type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<int64>\n\t{\n\t\ttypedef uint64 type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned short>\n\t{\n\t\ttypedef unsigned short type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned int>\n\t{\n\t\ttypedef unsigned int type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned long>\n\t{\n\t\ttypedef unsigned long type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<uint64>\n\t{\n\t\ttypedef uint64 type;\n\t};\n}//namespace detail\n}//namespace glm\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Only use x, y, z, w as vector type components\n\n#ifdef GLM_FORCE_XYZW_ONLY\n#\tdefine GLM_CONFIG_XYZW_ONLY GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_XYZW_ONLY GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of defaulted initialized types\n\n#define GLM_CTOR_INIT_DISABLE\t\t0\n#define GLM_CTOR_INITIALIZER_LIST\t1\n#define GLM_CTOR_INITIALISATION\t\t2\n\n#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST\n#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION\n#else\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Use SIMD instruction sets\n\n#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)\n#\tdefine GLM_CONFIG_SIMD GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_SIMD GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of defaulted function\n\n#if GLM_HAS_DEFAULTED_FUNCTIONS\n#\tdefine GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE\n#\tdefine GLM_DEFAULT = default\n#else\n#\tdefine GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE\n#\tdefine GLM_DEFAULT\n#endif\n\n#if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE && GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n#\tdefine GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_ENABLE\n#\tdefine GLM_DEFAULT_CTOR GLM_DEFAULT\n#else\n#\tdefine GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_DISABLE\n#\tdefine GLM_DEFAULT_CTOR\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of aligned gentypes\n\n#ifdef GLM_FORCE_ALIGNED // Legacy define\n#\tdefine GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#endif\n\n#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#\tdefine GLM_FORCE_ALIGNED_GENTYPES\n#endif\n\n#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))\n#\tdefine GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of anonymous structure as implementation detail\n\n#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))\n#\tdefine GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Silent warnings\n\n#ifdef GLM_FORCE_SILENT_WARNINGS\n#\tdefine GLM_SILENT_WARNINGS GLM_ENABLE\n#else\n#\tdefine GLM_SILENT_WARNINGS GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Precision\n\n#define GLM_HIGHP\t\t1\n#define GLM_MEDIUMP\t\t2\n#define GLM_LOWP\t\t3\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_HIGHP\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Check inclusions of different versions of GLM\n\n#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION))\n#\terror \"GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error.\"\n#elif GLM_SETUP_INCLUDED == GLM_VERSION\n\n///////////////////////////////////////////////////////////////////////////////////\n// Messages\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED)\n#\tdefine GLM_MESSAGE_DISPLAYED\n#\t\tdefine GLM_STR_HELPER(x) #x\n#\t\tdefine GLM_STR(x) GLM_STR_HELPER(x)\n\n\t// Report GLM version\n#\t\tpragma message (GLM_STR(GLM_VERSION_MESSAGE))\n\n\t// Report C++ language\n#\tif (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 2A with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX2A_FLAG)\n#\t\tpragma message(\"GLM: C++ 2A\")\n#\telif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 17 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX17_FLAG)\n#\t\tpragma message(\"GLM: C++ 17\")\n#\telif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 14 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX14_FLAG)\n#\t\tpragma message(\"GLM: C++ 14\")\n#\telif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 11 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX11_FLAG)\n#\t\tpragma message(\"GLM: C++ 11\")\n#\telif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 0x with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX0X_FLAG)\n#\t\tpragma message(\"GLM: C++ 0x\")\n#\telif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 03 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX03_FLAG)\n#\t\tpragma message(\"GLM: C++ 03\")\n#\telif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 98 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX98_FLAG)\n#\t\tpragma message(\"GLM: C++ 98\")\n#\telse\n#\t\tpragma message(\"GLM: C++ language undetected\")\n#\tendif//GLM_LANG\n\n\t// Report compiler detection\n#\tif GLM_COMPILER & GLM_COMPILER_CUDA\n#\t\tpragma message(\"GLM: CUDA compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_HIP\n#\t\tpragma message(\"GLM: HIP compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma message(\"GLM: Visual C++ compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tpragma message(\"GLM: Clang compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\tpragma message(\"GLM: Intel Compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma message(\"GLM: GCC compiler detected\")\n#\telse\n#\t\tpragma message(\"GLM: Compiler not detected\")\n#\tendif\n\n\t// Report build target\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with AVX2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with AVX2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with AVX instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with AVX instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE4.2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE4.2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE4.1 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE4.1 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSSE3 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSSE3 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE3 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE3 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: ARM 64 bits with Neon instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: ARM 32 bits with Neon instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: ARM 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: ARM 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: MIPS 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: MIPS 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: PowerPC 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: PowerPC 32 bits build target\")\n#\telse\n#\t\tpragma message(\"GLM: Unknown build target\")\n#\tendif//GLM_ARCH\n\n\t// Report platform name\n#\tif(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)\n#\t\tpragma message(\"GLM: QNX platform detected\")\n//#\telif(GLM_PLATFORM & GLM_PLATFORM_IOS)\n//#\t\tpragma message(\"GLM: iOS platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_APPLE)\n#\t\tpragma message(\"GLM: Apple platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_WINCE)\n#\t\tpragma message(\"GLM: WinCE platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)\n#\t\tpragma message(\"GLM: Windows platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)\n#\t\tpragma message(\"GLM: Native Client detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n#\t\tpragma message(\"GLM: Android platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_LINUX)\n#\t\tpragma message(\"GLM: Linux platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_UNIX)\n#\t\tpragma message(\"GLM: UNIX platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)\n#\t\tpragma message(\"GLM: platform unknown\")\n#\telse\n#\t\tpragma message(\"GLM: platform not detected\")\n#\tendif\n\n\t// Report whether only xyzw component are used\n#\tif defined GLM_FORCE_XYZW_ONLY\n#\t\tpragma message(\"GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.\")\n#\tendif\n\n\t// Report swizzle operator support\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.\")\n#\telif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\")\n#\tendif\n\n\t// Report .length() type\n#\tif GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T\n#\t\tpragma message(\"GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\")\n#\tendif\n\n#\tif GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE\n#\t\tpragma message(\"GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\")\n#\tendif\n\n#\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\tpragma message(\"GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.\")\n#\tendif\n\n#\tifdef GLM_FORCE_SINGLE_ONLY\n#\t\tpragma message(\"GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.\")\n#\tendif\n\n#\tif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)\n#\t\tundef GLM_FORCE_ALIGNED_GENTYPES\n#\t\tpragma message(\"GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.\")\n#\telif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)\n#\t\tundef GLM_FORCE_ALIGNED_GENTYPES\n#\t\tpragma message(\"GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.\")\n#\tendif\n\n#\tif defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE\n#\t\t\tundef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#\t\t\tpragma message(\"GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.\")\n#\t\telif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\t\t\tpragma message(\"GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.\")\n#\t\tendif\n#\tendif\n\n#\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n#\t\tpragma message(\"GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\")\n#\tendif\n\n#\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n#\t\tpragma message(\"GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\")\n#\tendif\n#endif//GLM_MESSAGES\n\n#endif//GLM_SETUP_INCLUDED\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_float.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\n#if GLM_COMPILER == GLM_COMPILER_VC12\n#\tpragma warning(push)\n#\tpragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tunion float_t\n\t{};\n\n\t// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/\n\ttemplate <>\n\tunion float_t<float>\n\t{\n\t\ttypedef int int_type;\n\t\ttypedef float float_type;\n\n\t\tGLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}\n\n\t\tGLM_CONSTEXPR float_t& operator=(float_t const& x)\n\t\t{\n\t\t\tf = x.f;\n\t\t\treturn *this;\n\t\t}\n\n\t\t// Portable extraction of components.\n\t\tGLM_CONSTEXPR bool negative() const { return i < 0; }\n\t\tGLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); }\n\t\tGLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); }\n\n\t\tint_type i;\n\t\tfloat_type f;\n\t};\n\n\ttemplate <>\n\tunion float_t<double>\n\t{\n\t\ttypedef detail::int64 int_type;\n\t\ttypedef double float_type;\n\n\t\tGLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {}\n\n\t\tGLM_CONSTEXPR float_t& operator=(float_t const& x)\n\t\t{\n\t\t\tf = x.f;\n\t\t\treturn *this;\n\t\t}\n\n\t\t// Portable extraction of components.\n\t\tGLM_CONSTEXPR bool negative() const { return i < 0; }\n\t\tGLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); }\n\t\tGLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); }\n\n\t\tint_type i;\n\t\tfloat_type f;\n\t};\n}//namespace detail\n}//namespace glm\n\n#if GLM_COMPILER == GLM_COMPILER_VC12\n#\tpragma warning(pop)\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_half.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttypedef short hdata;\n\n\tGLM_FUNC_DECL float toFloat32(hdata value);\n\tGLM_FUNC_DECL hdata toFloat16(float const& value);\n\n}//namespace detail\n}//namespace glm\n\n#include \"type_half.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_half.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER float overflow()\n\t{\n\t\tvolatile float f = 1e10;\n\n\t\tfor(int i = 0; i < 10; ++i)\n\t\t\tf = f * f; // this will overflow before the for loop terminates\n\t\treturn f;\n\t}\n\n\tunion uif32\n\t{\n\t\tGLM_FUNC_QUALIFIER uif32() :\n\t\t\ti(0)\n\t\t{}\n\n\t\tGLM_FUNC_QUALIFIER uif32(float f_) :\n\t\t\tf(f_)\n\t\t{}\n\n\t\tGLM_FUNC_QUALIFIER uif32(unsigned int i_) :\n\t\t\ti(i_)\n\t\t{}\n\n\t\tfloat f;\n\t\tunsigned int i;\n\t};\n\n\tGLM_FUNC_QUALIFIER float toFloat32(hdata value)\n\t{\n\t\tint s = (value >> 15) & 0x00000001;\n\t\tint e = (value >> 10) & 0x0000001f;\n\t\tint m =  value        & 0x000003ff;\n\n\t\tif(e == 0)\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Plus or minus zero\n\t\t\t\t//\n\n\t\t\t\tdetail::uif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>(s << 31);\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Denormalized number -- renormalize it\n\t\t\t\t//\n\n\t\t\t\twhile(!(m & 0x00000400))\n\t\t\t\t{\n\t\t\t\t\tm <<= 1;\n\t\t\t\t\te -=  1;\n\t\t\t\t}\n\n\t\t\t\te += 1;\n\t\t\t\tm &= ~0x00000400;\n\t\t\t}\n\t\t}\n\t\telse if(e == 31)\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Positive or negative infinity\n\t\t\t\t//\n\n\t\t\t\tuif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>((s << 31) | 0x7f800000);\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Nan -- preserve sign and significand bits\n\t\t\t\t//\n\n\t\t\t\tuif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>((s << 31) | 0x7f800000 | (m << 13));\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\t// Normalized number\n\t\t//\n\n\t\te = e + (127 - 15);\n\t\tm = m << 13;\n\n\t\t//\n\t\t// Assemble s, e and m.\n\t\t//\n\n\t\tuif32 Result;\n\t\tResult.i = static_cast<unsigned int>((s << 31) | (e << 23) | m);\n\t\treturn Result.f;\n\t}\n\n\tGLM_FUNC_QUALIFIER hdata toFloat16(float const& f)\n\t{\n\t\tuif32 Entry;\n\t\tEntry.f = f;\n\t\tint i = static_cast<int>(Entry.i);\n\n\t\t//\n\t\t// Our floating point number, f, is represented by the bit\n\t\t// pattern in integer i.  Disassemble that bit pattern into\n\t\t// the sign, s, the exponent, e, and the significand, m.\n\t\t// Shift s into the position where it will go in the\n\t\t// resulting half number.\n\t\t// Adjust e, accounting for the different exponent bias\n\t\t// of float and half (127 versus 15).\n\t\t//\n\n\t\tint s =  (i >> 16) & 0x00008000;\n\t\tint e = ((i >> 23) & 0x000000ff) - (127 - 15);\n\t\tint m =   i        & 0x007fffff;\n\n\t\t//\n\t\t// Now reassemble s, e and m into a half:\n\t\t//\n\n\t\tif(e <= 0)\n\t\t{\n\t\t\tif(e < -10)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// E is less than -10.  The absolute value of f is\n\t\t\t\t// less than half_MIN (f may be a small normalized\n\t\t\t\t// float, a denormalized float or a zero).\n\t\t\t\t//\n\t\t\t\t// We convert f to a half zero.\n\t\t\t\t//\n\n\t\t\t\treturn hdata(s);\n\t\t\t}\n\n\t\t\t//\n\t\t\t// E is between -10 and 0.  F is a normalized float,\n\t\t\t// whose magnitude is less than __half_NRM_MIN.\n\t\t\t//\n\t\t\t// We convert f to a denormalized half.\n\t\t\t//\n\n\t\t\tm = (m | 0x00800000) >> (1 - e);\n\n\t\t\t//\n\t\t\t// Round to nearest, round \"0.5\" up.\n\t\t\t//\n\t\t\t// Rounding may cause the significand to overflow and make\n\t\t\t// our number normalized.  Because of the way a half's bits\n\t\t\t// are laid out, we don't have to treat this case separately;\n\t\t\t// the code below will handle it correctly.\n\t\t\t//\n\n\t\t\tif(m & 0x00001000)\n\t\t\t\tm += 0x00002000;\n\n\t\t\t//\n\t\t\t// Assemble the half from s, e (zero) and m.\n\t\t\t//\n\n\t\t\treturn hdata(s | (m >> 13));\n\t\t}\n\t\telse if(e == 0xff - (127 - 15))\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// F is an infinity; convert f to a half\n\t\t\t\t// infinity with the same sign as f.\n\t\t\t\t//\n\n\t\t\t\treturn hdata(s | 0x7c00);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// F is a NAN; we produce a half NAN that preserves\n\t\t\t\t// the sign bit and the 10 leftmost bits of the\n\t\t\t\t// significand of f, with one exception: If the 10\n\t\t\t\t// leftmost bits are all zero, the NAN would turn\n\t\t\t\t// into an infinity, so we have to set at least one\n\t\t\t\t// bit in the significand.\n\t\t\t\t//\n\n\t\t\t\tm >>= 13;\n\n\t\t\t\treturn hdata(s | 0x7c00 | m | (m == 0));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//\n\t\t\t// E is greater than zero.  F is a normalized float.\n\t\t\t// We try to convert f to a normalized half.\n\t\t\t//\n\n\t\t\t//\n\t\t\t// Round to nearest, round \"0.5\" up\n\t\t\t//\n\n\t\t\tif(m &  0x00001000)\n\t\t\t{\n\t\t\t\tm += 0x00002000;\n\n\t\t\t\tif(m & 0x00800000)\n\t\t\t\t{\n\t\t\t\t\tm =  0;     // overflow in significand,\n\t\t\t\t\te += 1;     // adjust exponent\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//\n\t\t\t// Handle exponent overflow\n\t\t\t//\n\n\t\t\tif (e > 30)\n\t\t\t{\n\t\t\t\toverflow();        // Cause a hardware floating point overflow;\n\n\t\t\t\treturn hdata(s | 0x7c00);\n\t\t\t\t// if this returns, the half becomes an\n\t\t\t}   // infinity with the same sign as f.\n\n\t\t\t//\n\t\t\t// Assemble the half from s, e and m.\n\t\t\t//\n\n\t\t\treturn hdata(s | (e << 10) | (m >> 13));\n\t\t}\n\t}\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 2, T, Q> type;\n\t\ttypedef mat<2, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x1, T const& y1,\n\t\t\tT const& x2, T const& y2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<typename U, typename V, typename M, typename N>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tU const& x1, V const& y1,\n\t\t\tM const& x2, N const& y2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, U, Q> const& v1,\n\t\t\tvec<2, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n} //namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x2.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x2.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(scalar, 0), col_type(0, scalar)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(scalar, 0);\n\t\t\tthis->value[1] = col_type(0, scalar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0,\n\t\tT const& x1, T const& y1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{v0, v1}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X1, typename Y1, typename X2, typename Y2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat\n\t(\n\t\tX1 const& x1, Y1 const& y1,\n\t\tX2 const& x2, Y2 const& y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(static_cast<T>(x1), value_type(y1)), col_type(static_cast<T>(x2), value_type(y2)) }\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(static_cast<T>(x1), value_type(y1));\n\t\t\tthis->value[1] = col_type(static_cast<T>(x2), value_type(y2));\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- mat2x2 matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->value[0] += scalar;\n\t\tthis->value[1] += scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->value[0] -= scalar;\n\t\tthis->value[1] -= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->value[0] *= scalar;\n\t\tthis->value[1] *= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->value[0] /= scalar;\n\t\tthis->value[1] /= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tscalar - m[0],\n\t\t\tscalar - m[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator*\n\t(\n\t\tmat<2, 2, T, Q> const& m,\n\t\ttypename mat<2, 2, T, Q>::row_type const& v\n\t)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<2, 2, T, Q>::col_type const& v,\n\t\tmat<2, 2, T, Q> const& m\n\t)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn v *  inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\tmat<2, 2, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x3.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 3, T, Q> type;\n\t\ttypedef mat<3, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0,\n\t\t\tT x1, T y1, T z1);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1,\n\t\t\tX2 x2, Y2 y2, Z2 z2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, U, Q> const& v1,\n\t\t\tvec<3, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x3.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x3.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m.value[0];\n\t\t\tthis->value[1] = m.value[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(scalar, 0, 0), col_type(0, scalar, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(scalar, 0, 0);\n\t\t\tthis->value[1] = col_type(0, scalar, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0,\n\t\tT x1, T y1, T z1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1,\n\t\tX2 x2, Y2 y2, Z2 z2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1), col_type(x2, y2, z2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR  mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator*\n\t(\n\t\tmat<2, 3, T, Q> const& m,\n\t\ttypename mat<2, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<2, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<2, 3, T, Q>::col_type const& v,\n\t\tmat<2, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<2, 3, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\tT SrcA00 = m1[0][0];\n\t\tT SrcA01 = m1[0][1];\n\t\tT SrcA02 = m1[0][2];\n\t\tT SrcA10 = m1[1][0];\n\t\tT SrcA11 = m1[1][1];\n\t\tT SrcA12 = m1[1][2];\n\n\t\tT SrcB00 = m2[0][0];\n\t\tT SrcB01 = m2[0][1];\n\t\tT SrcB10 = m2[1][0];\n\t\tT SrcB11 = m2[1][1];\n\t\tT SrcB20 = m2[2][0];\n\t\tT SrcB21 = m2[2][1];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x4.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 4, T, Q> type;\n\t\ttypedef mat<4, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0, T w0,\n\t\t\tT x1, T y1, T z1, T w1);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\t\tX2 x2, Y2 y2, Z2 z2, W2 w2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, U, Q> const& v1,\n\t\t\tvec<4, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x4.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat2x4.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0, T w0,\n\t\tT x1, T y1, T z1, T w1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\tX2 x2, Y2 y2, Z2 z2, W2 w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<2, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y,\n\t\t\tm[0][3] * v.x + m[1][3] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn typename mat<2, 4, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\tT SrcA00 = m1[0][0];\n\t\tT SrcA01 = m1[0][1];\n\t\tT SrcA02 = m1[0][2];\n\t\tT SrcA03 = m1[0][3];\n\t\tT SrcA10 = m1[1][0];\n\t\tT SrcA11 = m1[1][1];\n\t\tT SrcA12 = m1[1][2];\n\t\tT SrcA13 = m1[1][3];\n\n\t\tT SrcB00 = m2[0][0];\n\t\tT SrcB01 = m2[0][1];\n\t\tT SrcB10 = m2[1][0];\n\t\tT SrcB11 = m2[1][1];\n\t\tT SrcB20 = m2[2][0];\n\t\tT SrcB21 = m2[2][1];\n\t\tT SrcB30 = m2[3][0];\n\t\tT SrcB31 = m2[3][1];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;\n\t\tResult[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;\n\t\tResult[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;\n\t\tResult[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;\n\t\tResult[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;\n\t\tResult[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;\n\t\tResult[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;\n\t\tResult[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 2, T, Q> type;\n\t\ttypedef mat<2, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0,\n\t\t\tT x1, T y1,\n\t\t\tT x2, T y2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1,\n\t\t\ttypename X2, typename Y2,\n\t\t\ttypename X3, typename Y3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1,\n\t\t\tX2 x2, Y2 y2,\n\t\t\tX3 x3, Y3 y3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, V1, Q> const& v1,\n\t\t\tvec<2, V2, Q> const& v2,\n\t\t\tvec<2, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x2.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x2.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1), col_type(0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n\t\t\t\tthis->value[2] = col_type(0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0), col_type(0, s), col_type(0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0);\n\t\t\tthis->value[1] = col_type(0, s);\n\t\t\tthis->value[2] = col_type(0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat\n\t(\n\t\tT x0, T y0,\n\t\tT x1, T y1,\n\t\tT x2, T y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0,\n\t\ttypename X1, typename Y1,\n\t\ttypename X2, typename Y2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0,\n\t\tX1 x1, Y1 y1,\n\t\tX2 x2, Y2 y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V0, typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<3, 2, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn typename mat<3, 2, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1],\n\t\t\tv.x * m[2][0] + v.y * m[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\tconst T SrcA00 = m1[0][0];\n\t\tconst T SrcA01 = m1[0][1];\n\t\tconst T SrcA10 = m1[1][0];\n\t\tconst T SrcA11 = m1[1][1];\n\t\tconst T SrcA20 = m1[2][0];\n\t\tconst T SrcA21 = m1[2][1];\n\n\t\tconst T SrcB00 = m2[0][0];\n\t\tconst T SrcB01 = m2[0][1];\n\t\tconst T SrcB02 = m2[0][2];\n\t\tconst T SrcB10 = m2[1][0];\n\t\tconst T SrcB11 = m2[1][1];\n\t\tconst T SrcB12 = m2[1][2];\n\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x3.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 3, T, Q> type;\n\t\ttypedef mat<3, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0,\n\t\t\tT x1, T y1, T z1,\n\t\t\tT x2, T y2, T z2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1,\n\t\t\ttypename X2, typename Y2, typename Z2,\n\t\t\ttypename X3, typename Y3, typename Z3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1,\n\t\t\tX2 x2, Y2 y2, Z2 z2,\n\t\t\tX3 x3, Y3 y3, Z3 z3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, V1, Q> const& v1,\n\t\t\tvec<3, V2, Q> const& v2,\n\t\t\tvec<3, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x3.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x3.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0,\n\t\tT x1, T y1, T z1,\n\t\tT x2, T y2, T z2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2,\n\t\ttypename X3, typename Y3, typename Z3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1,\n\t\tX2 x2, Y2 y2, Z2 z2,\n\t\tX3 x3, Y3 y3, Z3 z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2);\n\t\t\tthis->value[2] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tscalar - m[0],\n\t\t\tscalar - m[1],\n\t\t\tscalar - m[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<3, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<3, 3, T, Q>::row_type(\n\t\t\tm[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z,\n\t\t\tm[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z,\n\t\t\tm[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA02 = m1[0][2];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA12 = m1[1][2];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA22 = m1[2][2];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB20 = m2[2][0];\n\t\tT const SrcB21 = m2[2][1];\n\t\tT const SrcB22 = m2[2][2];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn  inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn v * inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\tmat<3, 3, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x4.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 4, T, Q> type;\n\t\ttypedef mat<4, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0, T w0,\n\t\t\tT x1, T y1, T z1, T w1,\n\t\t\tT x2, T y2, T z2, T w2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\t\ttypename X3, typename Y3, typename Z3, typename W3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\t\tX2 x2, Y2 y2, Z2 z2, W2 w2,\n\t\t\tX3 x3, Y3 y3, Z3 z3, W3 w3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, V1, Q> const& v1,\n\t\t\tvec<4, V2, Q> const& v2,\n\t\t\tvec<4, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1,\tmat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1,\tmat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x4.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat3x4.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0, T w0,\n\t\tT x1, T y1, T z1, T w1,\n\t\tT x2, T y2, T z2, T w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0, typename Z0, typename W0,\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0, Z0 z0, W0 w0,\n\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\tX2 x2, Y2 y2, Z2 z2, W2 w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator*\n\t(\n\t\tmat<3, 4, T, Q> const& m,\n\t\ttypename mat<3, 4, T, Q>::row_type const& v\n\t)\n\t{\n\t\treturn typename mat<3, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,\n\t\t\tm[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<3, 4, T, Q>::col_type const& v,\n\t\tmat<3, 4, T, Q> const& m\n\t)\n\t{\n\t\treturn typename mat<3, 4, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],\n\t\t\tv.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\tconst T SrcA00 = m1[0][0];\n\t\tconst T SrcA01 = m1[0][1];\n\t\tconst T SrcA02 = m1[0][2];\n\t\tconst T SrcA03 = m1[0][3];\n\t\tconst T SrcA10 = m1[1][0];\n\t\tconst T SrcA11 = m1[1][1];\n\t\tconst T SrcA12 = m1[1][2];\n\t\tconst T SrcA13 = m1[1][3];\n\t\tconst T SrcA20 = m1[2][0];\n\t\tconst T SrcA21 = m1[2][1];\n\t\tconst T SrcA22 = m1[2][2];\n\t\tconst T SrcA23 = m1[2][3];\n\n\t\tconst T SrcB00 = m2[0][0];\n\t\tconst T SrcB01 = m2[0][1];\n\t\tconst T SrcB02 = m2[0][2];\n\t\tconst T SrcB10 = m2[1][0];\n\t\tconst T SrcB11 = m2[1][1];\n\t\tconst T SrcB12 = m2[1][2];\n\t\tconst T SrcB20 = m2[2][0];\n\t\tconst T SrcB21 = m2[2][1];\n\t\tconst T SrcB22 = m2[2][2];\n\t\tconst T SrcB30 = m2[3][0];\n\t\tconst T SrcB31 = m2[3][1];\n\t\tconst T SrcB32 = m2[3][2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;\n\t\tResult[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;\n\t\tResult[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;\n\t\tResult[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22;\n\t\tResult[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32;\n\t\tResult[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32;\n\t\tResult[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32;\n\t\tResult[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 2, T, Q> type;\n\t\ttypedef mat<2, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0,\n\t\t\tT x1, T y1,\n\t\t\tT x2, T y2,\n\t\t\tT x3, T y3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X0, typename Y0,\n\t\t\ttypename X1, typename Y1,\n\t\t\ttypename X2, typename Y2,\n\t\t\ttypename X3, typename Y3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX0 x0, Y0 y0,\n\t\t\tX1 x1, Y1 y1,\n\t\t\tX2 x2, Y2 y2,\n\t\t\tX3 x3, Y3 y3);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, V1, Q> const& v1,\n\t\t\tvec<2, V2, Q> const& v2,\n\t\t\tvec<2, V3, Q> const& v3,\n\t\t\tvec<2, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1,\tmat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x2.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x2.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n\t\t\t\tthis->value[2] = col_type(0, 0);\n\t\t\t\tthis->value[3] = col_type(0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0);\n\t\t\tthis->value[1] = col_type(0, s);\n\t\t\tthis->value[2] = col_type(0, 0);\n\t\t\tthis->value[3] = col_type(0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat\n\t(\n\t\tT x0, T y0,\n\t\tT x1, T y1,\n\t\tT x2, T y2,\n\t\tT x3, T y3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n\t\t\tthis->value[3] = col_type(x3, y3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0,\n\t\ttypename X1, typename Y1,\n\t\ttypename X2, typename Y2,\n\t\ttypename X3, typename Y3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0,\n\t\tX1 x1, Y1 y1,\n\t\tX2 x2, Y2 y2,\n\t\tX3 x3, Y3 y3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n\t\t\tthis->value[3] = col_type(x3, y3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V0, typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n\t\t\tthis->value[3] = col_type(v3);\n#\t\tendif\n\t}\n\n\t// -- Conversion --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar,\n\t\t\tm[3] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar,\n\t\t\tm[3] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar,\n\t\t\tm[3] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar,\n\t\t\tm[3] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<4, 2, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn typename mat<4, 2, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1],\n\t\t\tv.x * m[2][0] + v.y * m[2][1],\n\t\t\tv.x * m[3][0] + v.y * m[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA30 = m1[3][0];\n\t\tT const SrcA31 = m1[3][1];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB03 = m2[0][3];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB13 = m2[1][3];\n\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar,\n\t\t\tm[3] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2],\n\t\t\tscalar / m[3]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x3.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 3, T, Q> type;\n\t\ttypedef mat<3, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x0, T const& y0, T const& z0,\n\t\t\tT const& x1, T const& y1, T const& z1,\n\t\t\tT const& x2, T const& y2, T const& z2,\n\t\t\tT const& x3, T const& y3, T const& z3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1,\n\t\t\ttypename X2, typename Y2, typename Z2,\n\t\t\ttypename X3, typename Y3, typename Z3,\n\t\t\ttypename X4, typename Y4, typename Z4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 const& x1, Y1 const& y1, Z1 const& z1,\n\t\t\tX2 const& x2, Y2 const& y2, Z2 const& z2,\n\t\t\tX3 const& x3, Y3 const& y3, Z3 const& z3,\n\t\t\tX4 const& x4, Y4 const& y4, Z4 const& z4);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, V1, Q> const& v1,\n\t\t\tvec<3, V2, Q> const& v2,\n\t\t\tvec<3, V3, Q> const& v3,\n\t\t\tvec<3, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q>& operator++();\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q>& operator--();\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1,\tmat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x3.inl\"\n#endif //GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x3.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\t\tthis->value[3] = col_type(0, 0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s);\n\t\t\tthis->value[3] = col_type(0, 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0, T const& z0,\n\t\tT const& x1, T const& y1, T const& z1,\n\t\tT const& x2, T const& y2, T const& z2,\n\t\tT const& x3, T const& y3, T const& z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0, typename Z0,\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2,\n\t\ttypename X3, typename Y3, typename Z3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat\n\t(\n\t\tX0 const& x0, Y0 const& y0, Z0 const& z0,\n\t\tX1 const& x1, Y1 const& y1, Z1 const& z1,\n\t\tX2 const& x2, Y2 const& y2, Z2 const& z2,\n\t\tX3 const& x3, Y3 const& y3, Z3 const& z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n\t\t\tthis->value[3] = col_type(v4);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n\t\t\tthis->value[3] = col_type(m[3], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] - s,\n\t\t\tm[1] - s,\n\t\t\tm[2] - s,\n\t\t\tm[3] - s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator*\n\t(\n\t\tmat<4, 3, T, Q> const& m,\n\t\ttypename mat<4, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<4, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<4, 3, T, Q>::col_type const& v,\n\t\tmat<4, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<4, 3, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],\n\t\t\tv.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],\n\t\t\tv.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA02 = m1[0][2];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA12 = m1[1][2];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA22 = m1[2][2];\n\t\tT const SrcA30 = m1[3][0];\n\t\tT const SrcA31 = m1[3][1];\n\t\tT const SrcA32 = m1[3][2];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB03 = m2[0][3];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB13 = m2[1][3];\n\t\tT const SrcB20 = m2[2][0];\n\t\tT const SrcB21 = m2[2][1];\n\t\tT const SrcB22 = m2[2][2];\n\t\tT const SrcB23 = m2[2][3];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] / s,\n\t\t\tm[1] / s,\n\t\t\tm[2] / s,\n\t\t\tm[3] / s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\ts / m[0],\n\t\t\ts / m[1],\n\t\t\ts / m[2],\n\t\t\ts / m[3]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x4.hpp\n\n#pragma once\n\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 4, T, Q> type;\n\t\ttypedef mat<4, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x0, T const& y0, T const& z0, T const& w0,\n\t\t\tT const& x1, T const& y1, T const& z1, T const& w1,\n\t\t\tT const& x2, T const& y2, T const& z2, T const& w2,\n\t\t\tT const& x3, T const& y3, T const& z3, T const& w3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\t\ttypename X3, typename Y3, typename Z3, typename W3,\n\t\t\ttypename X4, typename Y4, typename Z4, typename W4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1,\n\t\t\tX2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2,\n\t\t\tX3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3,\n\t\t\tX4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, V1, Q> const& v1,\n\t\t\tvec<4, V2, Q> const& v2,\n\t\t\tvec<4, V3, Q> const& v3,\n\t\t\tvec<4, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1,\tmat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1,\tmat<4, 4, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x4.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x4.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, s);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0, T const& z0, T const& w0,\n\t\tT const& x1, T const& y1, T const& z1, T const& w1,\n\t\tT const& x2, T const& y2, T const& z2, T const& w2,\n\t\tT const& x3, T const& y3, T const& z3, T const& w3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2),\n\t\t\t\tcol_type(x3, y3, z3, w3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3, w3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\t// -- Conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\ttypename X3, typename Y3, typename Z3, typename W3,\n\t\ttypename X4, typename Y4, typename Z4, typename W4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat\n\t(\n\t\tX1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1,\n\t\tX2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2,\n\t\tX3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3,\n\t\tX4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)}\n#\t\tendif\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X1>::is_iec559 || std::numeric_limits<X1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y1>::is_iec559 || std::numeric_limits<Y1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z1>::is_iec559 || std::numeric_limits<Z1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W1>::is_iec559 || std::numeric_limits<W1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X2>::is_iec559 || std::numeric_limits<X2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 5th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y2>::is_iec559 || std::numeric_limits<Y2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 6th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z2>::is_iec559 || std::numeric_limits<Z2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 7th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W2>::is_iec559 || std::numeric_limits<W2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 8th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X3>::is_iec559 || std::numeric_limits<X3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 9th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y3>::is_iec559 || std::numeric_limits<Y3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 10th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z3>::is_iec559 || std::numeric_limits<Z3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 11th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W3>::is_iec559 || std::numeric_limits<W3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 12th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X4>::is_iec559 || std::numeric_limits<X4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 13th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y4>::is_iec559 || std::numeric_limits<Y4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 14th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z4>::is_iec559 || std::numeric_limits<Z4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 15th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W4>::is_iec559 || std::numeric_limits<W4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 16th parameter type invalid.\");\n\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2, w2);\n\t\t\tthis->value[2] = col_type(x3, y3, z3, w3);\n\t\t\tthis->value[3] = col_type(x4, y4, z4, w4);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)}\n#\t\tendif\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V1>::is_iec559 || std::numeric_limits<V1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V2>::is_iec559 || std::numeric_limits<V2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V3>::is_iec559 || std::numeric_limits<V3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V4>::is_iec559 || std::numeric_limits<V4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.\");\n\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n\t\t\tthis->value[3] = col_type(v4);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n\t\t\tthis->value[3] = col_type(m[3], 1);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m)\n\t{\n\t\t//memcpy could be faster\n\t\t//memcpy(&this->value, &m.value, 16 * sizeof(valType));\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] - s,\n\t\t\tm[1] - s,\n\t\t\tm[2] - s,\n\t\t\tm[3] - s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\ts - m[0],\n\t\t\ts - m[1],\n\t\t\ts - m[2],\n\t\t\ts - m[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const  & s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator*\n\t(\n\t\tmat<4, 4, T, Q> const& m,\n\t\ttypename mat<4, 4, T, Q>::row_type const& v\n\t)\n\t{\n/*\n\t\t__m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(m[0].data, v0);\n\t\t__m128 m1 = _mm_mul_ps(m[1].data, v1);\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\n\t\t__m128 m2 = _mm_mul_ps(m[2].data, v2);\n\t\t__m128 m3 = _mm_mul_ps(m[3].data, v3);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\treturn typename mat<4, 4, T, Q>::col_type(a2);\n*/\n\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov0(v[0]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov1(v[1]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov2(v[2]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov3(v[3]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1;\n\t\treturn Add2;\n\n/*\n\t\treturn typename mat<4, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3],\n\t\t\tm[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3],\n\t\t\tm[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3],\n\t\t\tm[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]);\n*/\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<4, 4, T, Q>::col_type const& v,\n\t\tmat<4, 4, T, Q> const& m\n\t)\n\t{\n\t\treturn typename mat<4, 4, T, Q>::row_type(\n\t\t\tm[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3],\n\t\t\tm[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3],\n\t\t\tm[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3],\n\t\t\tm[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3];\n\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3];\n\t\tResult[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3];\n\t\tResult[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3];\n\t\tResult[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] / s,\n\t\t\tm[1] / s,\n\t\t\tm[2] / s,\n\t\t\tm[3] / s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s,\tmat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\ts / m[0],\n\t\t\ts / m[1],\n\t\t\ts / m[2],\n\t\t\ts / m[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v)\n\t{\n\t\treturn inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn v * inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\tmat<4, 4, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_mat4x4_simd.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_mat4x4_simd.inl",
    "content": "/// @ref core\n\nnamespace glm\n{\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_quat.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_quat.hpp\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../ext/quaternion_relational.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct qua\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef qua<T, Q> type;\n\t\ttypedef T value_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_LANG & GLM_LANG_CXXMS_FLAG\n\t\t\tunion\n\t\t\t{\n#\t\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t\tstruct { T x, y, z, w; };\n#\t\t\t\telse\n\t\t\t\t\tstruct { T w, x, y, z; };\n#\t\t\t\tendif\n\n\t\t\t\ttypename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;\n\t\t\t};\n#\t\telse\n#\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\tT x, y, z, w;\n#\t\t\telse\n\t\t\t\tT w, x, y, z;\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\n\t\t/// Return the count of components of a quaternion\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, Q> const& q) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, P> const& q);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v);\n\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T x, T y, T z, T w);\n#\t\telse\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);\n#\t\tendif\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua<U, P> const& q);\n\n\t\t/// Explicit conversion operators\n#\t\tif GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\t\t\tGLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const;\n\t\t\tGLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const;\n#\t\tendif\n\n\t\t/// Create a quaternion from two normalized axis\n\t\t///\n\t\t/// @param u A first normalized axis\n\t\t/// @param v A second normalized axis\n\t\t/// @see gtc_quaternion\n\t\t/// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors\n\t\tGLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v);\n\n\t\t/// Build a quaternion from euler angles (pitch, yaw, roll), in radians.\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<T, Q> const& q) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator+=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator-=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator/=(U s);\n\t};\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2);\n} //namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_quat.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_quat.inl",
    "content": "#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/quaternion_common.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tstruct genTypeTrait<qua<T> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = GENTYPE_QUAT;\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<qua<T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua<T, Q> const& a, qua<T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z);\n\t\t\treturn (tmp.x + tmp.y) + (tmp.z + tmp.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_add\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_sub\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_mul_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w * s, q.x * s, q.y * s, q.z * s);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_div_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w / s, q.x / s, q.y / s, q.z / s);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_mul_vec4\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, T, Q>(q * vec<3, T, Q>(v), v.w);\n\t\t}\n\t};\n}//namespace detail\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua<T, Q>::operator[](typename qua<T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\treturn (&x)[i];\n#\t\telse\n\t\t\treturn (&w)[i];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua<T, Q>::operator[](typename qua<T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\treturn (&x)[i];\n#\t\telse\n\t\t\treturn (&w)[i];\n#\t\tendif\n\t}\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n#\t\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t\t: x(0), y(0), z(0), w(1)\n#\t\t\t\telse\n\t\t\t\t\t: w(1), x(0), y(0), z(0)\n#\t\t\t\tendif\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, Q> const& q)\n#\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t: x(q.x), y(q.y), z(q.z), w(q.w)\n#\t\t\telse\n\t\t\t\t: w(q.w), x(q.x), y(q.y), z(q.z)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, P> const& q)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(q.x), y(q.y), z(q.z), w(q.w)\n#\t\telse\n\t\t\t: w(q.w), x(q.x), y(q.y), z(q.z)\n#\t\tendif\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T s, vec<3, T, Q> const& v)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(v.x), y(v.y), z(v.z), w(s)\n#\t\telse\n\t\t\t: w(s), x(v.x), y(v.y), z(v.z)\n#\t\tendif\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n#\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _x, T _y, T _z, T _w)\n\t\t\t: x(_x), y(_y), z(_z), w(_w)\n#\telse\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _w, T _x, T _y, T _z)\n\t\t\t: w(_w), x(_x), y(_y), z(_z)\n#\tendif\n\t{}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<U, P> const& q)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z)), w(static_cast<T>(q.w))\n#\t\telse\n\t\t\t: w(static_cast<T>(q.w)), x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z))\n#\t\tendif\n\t{}\n\n\t//template<typename valType>\n\t//GLM_FUNC_QUALIFIER qua<valType>::qua\n\t//(\n\t//\tvalType const& pitch,\n\t//\tvalType const& yaw,\n\t//\tvalType const& roll\n\t//)\n\t//{\n\t//\tvec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5));\n\t//\tvec<3, valType> c = glm::cos(eulerAngle * valType(0.5));\n\t//\tvec<3, valType> s = glm::sin(eulerAngle * valType(0.5));\n\t//\n\t//\tthis->w = c.x * c.y * c.z + s.x * s.y * s.z;\n\t//\tthis->x = s.x * c.y * c.z - c.x * s.y * s.z;\n\t//\tthis->y = c.x * s.y * c.z + s.x * c.y * s.z;\n\t//\tthis->z = c.x * c.y * s.z - s.x * s.y * c.z;\n\t//}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v)\n\t{\n\t\tT norm_u_norm_v = sqrt(dot(u, u) * dot(v, v));\n\t\tT real_part = norm_u_norm_v + dot(u, v);\n\t\tvec<3, T, Q> t;\n\n\t\tif(real_part < static_cast<T>(1.e-6f) * norm_u_norm_v)\n\t\t{\n\t\t\t// If u and v are exactly opposite, rotate 180 degrees\n\t\t\t// around an arbitrary orthogonal axis. Axis normalisation\n\t\t\t// can happen later, when we normalise the quaternion.\n\t\t\treal_part = static_cast<T>(0);\n\t\t\tt = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast<T>(0)) : vec<3, T, Q>(static_cast<T>(0), -u.z, u.y);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise, build quaternion the standard way.\n\t\t\tt = cross(u, v);\n\t\t}\n\n\t\t*this = normalize(qua<T, Q>(real_part, t.x, t.y, t.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(vec<3, T, Q> const& eulerAngle)\n\t{\n\t\tvec<3, T, Q> c = glm::cos(eulerAngle * T(0.5));\n\t\tvec<3, T, Q> s = glm::sin(eulerAngle * T(0.5));\n\n\t\tthis->w = c.x * c.y * c.z + s.x * s.y * s.z;\n\t\tthis->x = s.x * c.y * c.z - c.x * s.y * s.z;\n\t\tthis->y = c.x * s.y * c.z + s.x * c.y * s.z;\n\t\tthis->z = c.x * c.y * s.z - s.x * s.y * c.z;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<3, 3, T, Q> const& m)\n\t{\n\t\t*this = quat_cast(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<4, 4, T, Q> const& m)\n\t{\n\t\t*this = quat_cast(m);\n\t}\n\n#\tif GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::operator mat<3, 3, T, Q>() const\n\t{\n\t\treturn mat3_cast(*this);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::operator mat<4, 4, T, Q>() const\n\t{\n\t\treturn mat4_cast(*this);\n\t}\n#\tendif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<T, Q> const& q)\n\t\t{\n\t\t\tthis->w = q.w;\n\t\t\tthis->x = q.x;\n\t\t\tthis->y = q.y;\n\t\t\tthis->z = q.z;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<U, Q> const& q)\n\t{\n\t\tthis->w = static_cast<T>(q.w);\n\t\tthis->x = static_cast<T>(q.x);\n\t\tthis->y = static_cast<T>(q.y);\n\t\tthis->z = static_cast<T>(q.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator+=(qua<U, Q> const& q)\n\t{\n\t\treturn (*this = detail::compute_quat_add<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator-=(qua<U, Q> const& q)\n\t{\n\t\treturn (*this = detail::compute_quat_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(qua<U, Q> const& r)\n\t{\n\t\tqua<T, Q> const p(*this);\n\t\tqua<T, Q> const q(r);\n\n\t\tthis->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z;\n\t\tthis->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y;\n\t\tthis->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z;\n\t\tthis->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(U s)\n\t{\n\t\treturn (*this = detail::compute_quat_mul_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator/=(U s)\n\t{\n\t\treturn (*this = detail::compute_quat_div_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s)));\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q)\n\t{\n\t\treturn q;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q)\n\t{\n\t\treturn qua<T, Q>(-q.w, -q.x, -q.y, -q.z);\n\t}\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) += p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) -= p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) *= p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> const QuatVector(q.x, q.y, q.z);\n\t\tvec<3, T, Q> const uv(glm::cross(QuatVector, v));\n\t\tvec<3, T, Q> const uuv(glm::cross(QuatVector, uv));\n\n\t\treturn v + ((uv * q.w) + uuv) * static_cast<T>(2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn detail::compute_quat_mul_vec4<T, Q, detail::is_aligned<Q>::value>::call(q, v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq.w * s, q.x * s, q.y * s, q.z * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q)\n\t{\n\t\treturn q * s;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq.w / s, q.x / s, q.y / s, q.z / s);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_quat_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_quat_simd.inl",
    "content": "/// @ref core\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n/*\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q1, qua<float, Q> const& q2)\n\t\t{\n\t\t\t// SSE2 STATS: 11 shuffle, 8 mul, 8 add\n\t\t\t// SSE4 STATS: 3 shuffle, 4 mul, 4 dpps\n\n\t\t\t__m128 const mul0 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(0, 1, 2, 3)));\n\t\t\t__m128 const mul1 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(1, 0, 3, 2)));\n\t\t\t__m128 const mul2 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(2, 3, 0, 1)));\n\t\t\t__m128 const mul3 = _mm_mul_ps(q1.data, q2.data);\n\n#\t\t\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\t\t\t__m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f,  1.0f,  1.0f), 0xff);\n\t\t\t\t__m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f,  1.0f,  1.0f, -1.0f), 0xff);\n\t\t\t\t__m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f,  1.0f, -1.0f,  1.0f), 0xff);\n\t\t\t\t__m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff);\n#\t\t\telse\n\t\t\t\t__m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f,  1.0f,  1.0f));\n\t\t\t\t__m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4));\n\t\t\t\t__m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1));\n\n\t\t\t\t__m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f,  1.0f,  1.0f, -1.0f));\n\t\t\t\t__m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5));\n\t\t\t\t__m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1));\n\n\t\t\t\t__m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f,  1.0f, -1.0f,  1.0f));\n\t\t\t\t__m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6));\n\t\t\t\t__m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1));\n\n\t\t\t\t__m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f));\n\t\t\t\t__m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7));\n\t\t\t\t__m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1));\n\t\t#endif\n\n\t\t\t// This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than\n\t\t\t// the final code below. I'll keep this here for reference - maybe somebody else can do something better...\n\t\t\t//\n\t\t\t//__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t\t//__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t\t//\n\t\t\t//return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t\t\tqua<float, Q> Result;\n\t\t\t_mm_store_ss(&Result.x, add4);\n\t\t\t_mm_store_ss(&Result.y, add5);\n\t\t\t_mm_store_ss(&Result.z, add6);\n\t\t\t_mm_store_ss(&Result.w, add7);\n\t\t\treturn Result;\n\t\t}\n\t};\n*/\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_add<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, qua<float, Q> const& p)\n\t\t{\n\t\t\tqua<float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(q.data, p.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_add<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& a, qua<double, Q> const& b)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_add_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_sub<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, qua<float, Q> const& p)\n\t\t{\n\t\t\tqua<float, Q> Result;\n\t\t\tResult.data = _mm_sub_ps(q.data, p.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_sub<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& a, qua<double, Q> const& b)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_sub_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_scalar<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, float s)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_mul_ps(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_scalar<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& q, double s)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_mul_pd(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_div_scalar<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, float s)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_div_ps(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_div_scalar<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& q, double s)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_div_pd(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_vec4<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(qua<float, Q> const& q, vec<4, float, Q> const& v)\n\t\t{\n\t\t\t__m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3));\n\t\t\t__m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2));\n\t\t\t__m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2));\n\n\t\t\t__m128 uv      = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0));\n\t\t\t__m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2));\n\t\t\t__m128 uuv     = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0));\n\n\t\t\t__m128 const two = _mm_set1_ps(2.0f);\n\t\t\tuv  = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two));\n\t\t\tuuv = _mm_mul_ps(uuv, two);\n\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(v.data, _mm_add_ps(uv, uuv));\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec1.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec1.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<1, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<1, T, Q> type;\n\t\ttypedef vec<1, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x;\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tT x;\n\t\t\t\tT r;\n\t\t\t\tT s;\n\n\t\t\t\ttypename detail::storage<1, T, detail::is_aligned<Q>::value>::type data;\n/*\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, s)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, s)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, s)\n#\t\t\t\tendif\n*/\n\t\t\t};\n#\t\telse\n\t\t\tunion {T x, r, s;};\n/*\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q)\n#\t\t\tendif\n*/\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n/*\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n*/\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec1.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec1.inl",
    "content": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v)\n\t\t\t: x(v.x)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v)\n\t\t: x(v.x)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar)\n\t\t: x(scalar)\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type)\n\t{\n\t\treturn x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const\n\t{\n\t\treturn x;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->x /= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int)\n\t{\n\t\tvec<1, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int)\n\t{\n\t\tvec<1, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\t-v.x);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar + v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x + v2.x);\n\t}\n\n\t//operator-\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar - v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x - v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar * v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x * v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar / v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x / v2.x);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar % v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x % v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar & v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x & v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar | v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x | v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar ^ v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x ^ v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v.x << scalar));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(scalar << v.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v1.x << v2.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v.x >> scalar));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(scalar >> v.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v1.x >> v2.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\t~v.x);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)\n\t{\n\t\treturn vec<1, bool, Q>(v1.x && v2.x);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)\n\t{\n\t\treturn vec<1, bool, Q>(v1.x || v2.x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec2.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<2, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<2, T, Q> type;\n\t\ttypedef vec<2, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, Q, x, y)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct{ T x, y; };\n\t\t\t\tstruct{ T r, g; };\n\t\t\t\tstruct{ T s, t; };\n\n\t\t\t\ttypename detail::storage<2, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion {T x, r, s;};\n\t\t\tunion {T y, g, t;};\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y);\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec2.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec2.inl",
    "content": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v)\n\t\t: x(v.x), y(v.y)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar)\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y)\n\t\t: x(_x), y(_y)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\tthis->y += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\tthis->y -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\tthis->y *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->x /= static_cast<T>(scalar);\n\t\tthis->y /= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int)\n\t{\n\t\tvec<2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int)\n\t{\n\t\tvec<2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= static_cast<T>(scalar);\n\t\tthis->y %= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\tthis->y %= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\tthis->y %= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= static_cast<T>(scalar);\n\t\tthis->y &= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\tthis->y &= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\tthis->y &= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= static_cast<T>(scalar);\n\t\tthis->y |= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\tthis->y |= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\tthis->y |= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= static_cast<T>(scalar);\n\t\tthis->y ^= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\tthis->y ^= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\tthis->y ^= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= static_cast<T>(scalar);\n\t\tthis->y <<= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\tthis->y >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\t-v.x,\n\t\t\t-v.y);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x + scalar,\n\t\t\tv.y + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar + v.x,\n\t\t\tscalar + v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.x + v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x - scalar,\n\t\t\tv.y - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar - v.x,\n\t\t\tscalar - v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.x - v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x * scalar,\n\t\t\tv.y * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar * v.x,\n\t\t\tscalar * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.x * v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x / scalar,\n\t\t\tv.y / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar / v.x,\n\t\t\tscalar / v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.x / v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.y);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x % scalar,\n\t\t\tv.y % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar % v.x,\n\t\t\tscalar % v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.x % v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x & scalar,\n\t\t\tv.y & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar & v.x,\n\t\t\tscalar & v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.x & v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x | scalar,\n\t\t\tv.y | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar | v.x,\n\t\t\tscalar | v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.x | v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x ^ scalar,\n\t\t\tv.y ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar ^ v.x,\n\t\t\tscalar ^ v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.x ^ v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x << scalar,\n\t\t\tv.y << scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar << v.x,\n\t\t\tscalar << v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.x << v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x >> scalar,\n\t\t\tv.y >> scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar >> v.x,\n\t\t\tscalar >> v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.x >> v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\t~v.x,\n\t\t\t~v.y);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)\n\t{\n\t\treturn vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)\n\t{\n\t\treturn vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec3.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<3, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<3, T, Q> type;\n\t\ttypedef vec<3, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\t\t\t\t\tpragma warning(disable: 4324)  // structure was padded due to alignment specifier\n#\t\t\t\tendif\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y, z;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, Q, x, y, z)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct{ T x, y, z; };\n\t\t\t\tstruct{ T r, g, b; };\n\t\t\t\tstruct{ T s, t, p; };\n\n\t\t\t\ttypename detail::storage<3, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion { T x, r, s; };\n\t\t\tunion { T y, g, t; };\n\t\t\tunion { T z, b, p; };\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\tendif//GLM_LANG\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);\n\n\t\t// -- Conversion scalar constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar)\n\t\t\t{\n\t\t\t\t*this = vec(v(), scalar);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)\n\t\t\t{\n\t\t\t\t*this = vec(scalar, v());\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec3.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec3.inl",
    "content": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0), z(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y), z(v.z)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v)\n\t\t: x(v.x), y(v.y), z(v.z)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar), z(scalar)\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z)\n\t\t: x(_x), y(_y), z(_z)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t\t, z(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\t\tcase 0:\n\t\treturn x;\n\t\t\tcase 1:\n\t\treturn y;\n\t\t\tcase 2:\n\t\treturn z;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\tthis->z = v.z;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\tthis->z = static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\tthis->y += static_cast<T>(scalar);\n\t\tthis->z += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.x);\n\t\tthis->z += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.y);\n\t\tthis->z += static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\tthis->y -= static_cast<T>(scalar);\n\t\tthis->z -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.x);\n\t\tthis->z -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.y);\n\t\tthis->z -= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\tthis->y *= static_cast<T>(scalar);\n\t\tthis->z *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.x);\n\t\tthis->z *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.y);\n\t\tthis->z *= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v)\n\t{\n\t\tthis->x /= static_cast<T>(v);\n\t\tthis->y /= static_cast<T>(v);\n\t\tthis->z /= static_cast<T>(v);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.x);\n\t\tthis->z /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.y);\n\t\tthis->z /= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\t++this->z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\t--this->z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int)\n\t{\n\t\tvec<3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int)\n\t{\n\t\tvec<3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= scalar;\n\t\tthis->y %= scalar;\n\t\tthis->z %= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= v.x;\n\t\tthis->y %= v.x;\n\t\tthis->z %= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x %= v.x;\n\t\tthis->y %= v.y;\n\t\tthis->z %= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= scalar;\n\t\tthis->y &= scalar;\n\t\tthis->z &= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= v.x;\n\t\tthis->y &= v.x;\n\t\tthis->z &= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x &= v.x;\n\t\tthis->y &= v.y;\n\t\tthis->z &= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= scalar;\n\t\tthis->y |= scalar;\n\t\tthis->z |= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= v.x;\n\t\tthis->y |= v.x;\n\t\tthis->z |= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x |= v.x;\n\t\tthis->y |= v.y;\n\t\tthis->z |= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= scalar;\n\t\tthis->y ^= scalar;\n\t\tthis->z ^= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= v.x;\n\t\tthis->y ^= v.x;\n\t\tthis->z ^= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x ^= v.x;\n\t\tthis->y ^= v.y;\n\t\tthis->z ^= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= scalar;\n\t\tthis->y <<= scalar;\n\t\tthis->z <<= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.x);\n\t\tthis->z <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.y);\n\t\tthis->z <<= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\tthis->y >>= static_cast<T>(scalar);\n\t\tthis->z >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.x);\n\t\tthis->z >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.y);\n\t\tthis->z >>= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\t-v.x,\n\t\t\t-v.y,\n\t\t\t-v.z);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x + scalar,\n\t\t\tv.y + scalar,\n\t\t\tv.z + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x + scalar.x,\n\t\t\tv.y + scalar.x,\n\t\t\tv.z + scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar + v.x,\n\t\t\tscalar + v.y,\n\t\t\tscalar + v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x + v.x,\n\t\t\tscalar.x + v.y,\n\t\t\tscalar.x + v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.y,\n\t\t\tv1.z + v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x - scalar,\n\t\t\tv.y - scalar,\n\t\t\tv.z - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x - scalar.x,\n\t\t\tv.y - scalar.x,\n\t\t\tv.z - scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar - v.x,\n\t\t\tscalar - v.y,\n\t\t\tscalar - v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x - v.x,\n\t\t\tscalar.x - v.y,\n\t\t\tscalar.x - v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.y,\n\t\t\tv1.z - v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x * scalar,\n\t\t\tv.y * scalar,\n\t\t\tv.z * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x * scalar.x,\n\t\t\tv.y * scalar.x,\n\t\t\tv.z * scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar * v.x,\n\t\t\tscalar * v.y,\n\t\t\tscalar * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x * v.x,\n\t\t\tscalar.x * v.y,\n\t\t\tscalar.x * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.y,\n\t\t\tv1.z * v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x / scalar,\n\t\t\tv.y / scalar,\n\t\t\tv.z / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x / scalar.x,\n\t\t\tv.y / scalar.x,\n\t\t\tv.z / scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar / v.x,\n\t\t\tscalar / v.y,\n\t\t\tscalar / v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x / v.x,\n\t\t\tscalar.x / v.y,\n\t\t\tscalar.x / v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.y,\n\t\t\tv1.z / v2.z);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x % scalar,\n\t\t\tv.y % scalar,\n\t\t\tv.z % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x % scalar.x,\n\t\t\tv.y % scalar.x,\n\t\t\tv.z % scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar % v.x,\n\t\t\tscalar % v.y,\n\t\t\tscalar % v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x % v.x,\n\t\t\tscalar.x % v.y,\n\t\t\tscalar.x % v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.y,\n\t\t\tv1.z % v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x & scalar,\n\t\t\tv.y & scalar,\n\t\t\tv.z & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x & scalar.x,\n\t\t\tv.y & scalar.x,\n\t\t\tv.z & scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar & v.x,\n\t\t\tscalar & v.y,\n\t\t\tscalar & v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x & v.x,\n\t\t\tscalar.x & v.y,\n\t\t\tscalar.x & v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.y,\n\t\t\tv1.z & v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x | scalar,\n\t\t\tv.y | scalar,\n\t\t\tv.z | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x | scalar.x,\n\t\t\tv.y | scalar.x,\n\t\t\tv.z | scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar | v.x,\n\t\t\tscalar | v.y,\n\t\t\tscalar | v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x | v.x,\n\t\t\tscalar.x | v.y,\n\t\t\tscalar.x | v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.y,\n\t\t\tv1.z | v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x ^ scalar,\n\t\t\tv.y ^ scalar,\n\t\t\tv.z ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x ^ scalar.x,\n\t\t\tv.y ^ scalar.x,\n\t\t\tv.z ^ scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar ^ v.x,\n\t\t\tscalar ^ v.y,\n\t\t\tscalar ^ v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x ^ v.x,\n\t\t\tscalar.x ^ v.y,\n\t\t\tscalar.x ^ v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.y,\n\t\t\tv1.z ^ v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x << scalar,\n\t\t\tv.y << scalar,\n\t\t\tv.z << scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x << scalar.x,\n\t\t\tv.y << scalar.x,\n\t\t\tv.z << scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar << v.x,\n\t\t\tscalar << v.y,\n\t\t\tscalar << v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x << v.x,\n\t\t\tscalar.x << v.y,\n\t\t\tscalar.x << v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.y,\n\t\t\tv1.z << v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x >> scalar,\n\t\t\tv.y >> scalar,\n\t\t\tv.z >> scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x >> scalar.x,\n\t\t\tv.y >> scalar.x,\n\t\t\tv.z >> scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar >> v.x,\n\t\t\tscalar >> v.y,\n\t\t\tscalar >> v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x >> v.x,\n\t\t\tscalar.x >> v.y,\n\t\t\tscalar.x >> v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.y,\n\t\t\tv1.z >> v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\t~v.x,\n\t\t\t~v.y,\n\t\t\t~v.z);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2)\n\t{\n\t\treturn vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2)\n\t{\n\t\treturn vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec4.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<4, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<4, T, Q> type;\n\t\ttypedef vec<4, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y, z, w;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, Q, x, y, z, w)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct { T x, y, z, w; };\n\t\t\t\tstruct { T r, g, b, a; };\n\t\t\t\tstruct { T s, t, p, q; };\n\n\t\t\t\ttypename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion { T x, r, s; };\n\t\t\tunion { T y, g, t; };\n\t\t\tunion { T z, b, p; };\n\t\t\tunion { T w, a, q; };\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q)\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\n\t\t/// Return the count of components of the vector\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w);\n\n\t\t// -- Conversion scalar constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1, int E2, int E3>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int F0, int F1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), u());\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, y, v());\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, v(), w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), z, w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, v());\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec4.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec4.inl",
    "content": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_add\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_sub\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_mul\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_div\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_mod\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_and\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_or\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_xor\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_shift_left\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_shift_right\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_equal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t\t{\n\t\t\treturn\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.w, v2.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_nequal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_bitwise_not\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w);\n\t\t}\n\t};\n}//namespace detail\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0), z(0), w(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y), z(v.z), w(v.w)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v)\n\t\t: x(v.x), y(v.y), z(v.z), w(v.w)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar), z(scalar), w(scalar)\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w)\n\t\t: x(_x), y(_y), z(_z), w(_w)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t\t, z(static_cast<T>(v.x))\n\t\t, w(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w)\n\t\t: x(static_cast<T>(_xyz.x))\n\t\t, y(static_cast<T>(_xyz.y))\n\t\t, z(static_cast<T>(_xyz.z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w)\n\t\t: x(static_cast<T>(_xyz.x))\n\t\t, y(static_cast<T>(_xyz.y))\n\t\t, z(static_cast<T>(_xyz.z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yzw.x))\n\t\t, z(static_cast<T>(_yzw.y))\n\t\t, w(static_cast<T>(_yzw.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yzw.x))\n\t\t, z(static_cast<T>(_yzw.y))\n\t\t, w(static_cast<T>(_yzw.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t\t, w(static_cast<T>(v.w))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\tcase 3:\n\t\t\treturn w;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\tcase 3:\n\t\t\treturn w;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\tthis->z = v.z;\n\t\t\tthis->w = v.w;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\tthis->z = static_cast<T>(v.z);\n\t\tthis->w = static_cast<T>(v.w);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\t++this->z;\n\t\t++this->w;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\t--this->z;\n\t\t--this->w;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int)\n\t{\n\t\tvec<4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int)\n\t{\n\t\tvec<4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(0) -= v;\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) += scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) += v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v) += scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v2) += v1;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) += v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) -= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) -= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) *= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) *= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v) *= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v2) *= v1;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) *= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) /= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) /= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) /= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) /= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) /= v2;\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) %= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) %= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) %= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar.x) %= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) %= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) &= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) &= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) &= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) &= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) &= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) |= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) |= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) |= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) |= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) |= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) ^= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) ^= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) ^= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) ^= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) ^= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) <<= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) <<= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) <<= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) <<= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) <<= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) >>= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) >>= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) >>= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) >>= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) >>= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v)\n\t{\n\t\treturn detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2)\n\t{\n\t\treturn vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2)\n\t{\n\t\treturn vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_vec4_simd.inl\"\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/detail/type_vec4_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0<float, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, float, Q> operator ()()  const\n\t\t{\n\t\t\t__m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer);\n\n\t\t\tvec<4, float, Q> Result;\n#\t\t\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\t\t\tResult.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0));\n#\t\t\telse\n\t\t\t\tResult.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0));\n#\t\t\tendif\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0<int, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, int, Q> operator ()()  const\n\t\t{\n\t\t\t__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);\n\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0<uint, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()()  const\n\t\t{\n\t\t\t__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);\n\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_add_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_sub_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_sub_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_mul_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_mul_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_div_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\t#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_div_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<>\n\tstruct compute_vec4_div<float, aligned_lowp, true>\n\t{\n\t\tstatic vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b)\n\t\t{\n\t\t\tvec<4, float, aligned_lowp> Result;\n\t\t\tResult.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_and<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_and_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_and<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_and_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_or<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_or_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_or<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_or_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_xor<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_xor_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_xor<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_xor_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_left<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_sll_epi32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_left<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_sll_epi64(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_right<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_srl_epi32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_right<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_srl_epi64(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_bitwise_not<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_bitwise_not<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) == 0;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<int, Q, true, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\t//return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0;\n\t\t\t__m128i neq = _mm_xor_si128(v1.data, v2.data);\n\t\t\treturn _mm_test_all_zeros(neq, neq) == 0;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<int, Q, true, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\t//return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0;\n\t\t\t__m128i neq = _mm_xor_si128(v1.data, v2.data);\n\t\t\treturn _mm_test_all_zeros(neq, neq) != 0;\n\t\t}\n\t};\n#\tendif\n}//namespace detail\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n#\tendif\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n#\tendif\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\nnamespace glm {\nnamespace detail {\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<float, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, float, Q>\n\t\tcall(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vaddq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<uint, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, uint, Q>\n\t\tcall(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vaddq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<int, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, int, Q>\n\t\tcall(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vaddq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vsubq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<uint, Q, true>\n\t{\n\t\tstatic vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vsubq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<int, Q, true>\n\t{\n\t\tstatic vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vsubq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vmulq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<uint, Q, true>\n\t{\n\t\tstatic vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vmulq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<int, Q, true>\n\t{\n\t\tstatic vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vmulq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tResult.data = vdivq_f32(a.data, b.data);\n#else\n\t\t\t/* Arm assembler reference:\n\t\t\t *\n\t\t\t * The Newton-Raphson iteration: x[n+1] = x[n] * (2 - d * x[n])\n\t\t\t * converges to (1/d) if x0 is the result of VRECPE applied to d.\n\t\t\t *\n\t\t\t * Note: The precision usually improves with two interactions, but more than two iterations are not helpful. */\n\t\t\tfloat32x4_t x = vrecpeq_f32(b.data);\n\t\t\tx = vmulq_f32(vrecpsq_f32(b.data, x), x);\n\t\t\tx = vmulq_f32(vrecpsq_f32(b.data, x), x);\n\t\t\tResult.data = vmulq_f32(a.data, x);\n#endif\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_f32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<uint, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_u32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<int, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_s32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<float, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<uint, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<uint, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<int, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<int, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n}//namespace detail\n\n#if !GLM_CONFIG_XYZW_ONLY\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) :\n\t\tdata(rhs.data)\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) :\n\t\tdata(vcvtq_f32_s32(rhs.data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) :\n\t\tdata(vcvtq_f32_u32(rhs.data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data))\n\t{}\n\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data))\n\t{}\n\n#endif\n}//namespace glm\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/exponential.hpp",
    "content": "/// @ref core\n/// @file glm/exponential.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n///\n/// @defgroup core_func_exponential Exponential functions\n/// @ingroup core\n///\n/// Provides GLSL exponential functions\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/exponential.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/type_vec1.hpp\"\n#include \"detail/type_vec2.hpp\"\n#include \"detail/type_vec3.hpp\"\n#include \"detail/type_vec4.hpp\"\n#include <cmath>\n\nnamespace glm\n{\n\t/// @addtogroup core_func_exponential\n\t/// @{\n\n\t/// Returns 'base' raised to the power 'exponent'.\n\t///\n\t/// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @param exponent Floating point value representing the 'exponent'.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml\">GLSL pow man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent);\n\n\t/// Returns the natural exponentiation of v, i.e., e^v.\n\t///\n\t/// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml\">GLSL exp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> exp(vec<L, T, Q> const& v);\n\n\t/// Returns the natural logarithm of v, i.e.,\n\t/// returns the value y which satisfies the equation x = e^y.\n\t/// Results are undefined if v <= 0.\n\t///\n\t/// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml\">GLSL log man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> log(vec<L, T, Q> const& v);\n\n\t/// Returns 2 raised to the v power.\n\t///\n\t/// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml\">GLSL exp2 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> exp2(vec<L, T, Q> const& v);\n\n\t/// Returns the base 2 log of x, i.e., returns the value y,\n\t/// which satisfies the equation x = 2 ^ y.\n\t///\n\t/// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml\">GLSL log2 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> log2(vec<L, T, Q> const& v);\n\n\t/// Returns the positive square root of v.\n\t///\n\t/// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml\">GLSL sqrt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sqrt(vec<L, T, Q> const& v);\n\n\t/// Returns the reciprocal of the positive square root of v.\n\t///\n\t/// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml\">GLSL inversesqrt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> inversesqrt(vec<L, T, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_exponential.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/_matrix_vectorize.hpp",
    "content": "#pragma once\n\nnamespace glm {\n\n\tnamespace detail {\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, length_t C, length_t R, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1 {\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 2, Ret, T, Q> {\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 2, T, Q> call(Ret (*Func)(T x), mat<2, 2, T, Q> const &x) {\n\t\t\t\treturn mat<2, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1])\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 3, T, Q> call(Ret (*Func)(T x), mat<2, 3, T, Q> const &x) {\n\t\t\t\treturn mat<2, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 4, T, Q> call(Ret (*Func)(T x), mat<2, 4, T, Q> const &x) {\n\t\t\t\treturn mat<2, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 2, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 2, T, Q> call(Ret (*Func)(T x), mat<3, 2, T, Q> const &x) {\n\t\t\t\treturn mat<3, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 3, T, Q> call(Ret (*Func)(T x), mat<3, 3, T, Q> const &x) {\n\t\t\t\treturn mat<3, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 4, T, Q> call(Ret (*Func)(T x), mat<3, 4, T, Q> const &x) {\n\t\t\t\treturn mat<3, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 2, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 2, T, Q> call(Ret (*Func)(T x), mat<4, 2, T, Q> const &x) {\n\t\t\t\treturn mat<4, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 3, T, Q> call(Ret (*Func)(T x), mat<4, 3, T, Q> const &x) {\n\t\t\t\treturn mat<4, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1]), Func(x[3][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 4, T, Q> call(Ret (*Func)(T x), mat<4, 4, T, Q> const &x) {\n\t\t\t\treturn mat<4, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1]), Func(x[3][2]), Func(x[3][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}// namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_clip_space.hpp",
    "content": "/// @ref ext_matrix_clip_space\n/// @file glm/ext/matrix_clip_space.hpp\n///\n/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space\n/// @ingroup ext\n///\n/// Defines functions that generate clip space transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_clip_space.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_transform\n/// @see ext_matrix_projection\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_clip_space extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_clip_space\n\t/// @{\n\n\t/// Creates a matrix for projecting two-dimensional coordinates onto the screen.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluOrtho2D.xml\">gluOrtho2D man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(\n\t\tT left, T right, T bottom, T top);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml\">glOrtho man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml\">glFrustum man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustum(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum based on the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param fovy Specifies the field of view angle in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml\">gluPerspective man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspective(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a right-handed perspective projection matrix based on a field of view.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a left-handed perspective projection matrix based on a field of view.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum with far plane at infinite.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum with far plane at infinite.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param ep Epsilon\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(\n\t\tT fovy, T aspect, T near, T ep);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_clip_space.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_clip_space.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(1));\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(1) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - zNear / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(2) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - (zFar + zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - zNear / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(2) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - (zFar + zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = -(right + left) / (right - left);\n\t\tResult[2][1] = -(top + bottom) / (top - bottom);\n\t\tResult[2][2] = farVal / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = -(right + left) / (right - left);\n\t\tResult[2][1] = -(top + bottom) / (top - bottom);\n\t\tResult[2][2] = (farVal + nearVal) / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = (right + left) / (right - left);\n\t\tResult[2][1] = (top + bottom) / (top - bottom);\n\t\tResult[2][2] = farVal / (nearVal - farVal);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = -(farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = (right + left) / (right - left);\n\t\tResult[2][1] = (top + bottom) / (top - bottom);\n\t\tResult[2][2] = - (farVal + nearVal) / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = zFar / (zNear - zFar);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = - (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = zFar / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = zFar / (zNear - zFar);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = - (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = zFar / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - static_cast<T>(2) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(T(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(1);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - static_cast<T>(2) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn infinitePerspectiveLH(fovy, aspect, zNear);\n#\t\telse\n\t\t\treturn infinitePerspectiveRH(fovy, aspect, zNear);\n#\t\tendif\n\t}\n\n\t// Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = ep - static_cast<T>(1);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = (ep - static_cast<T>(2)) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear)\n\t{\n\t\treturn tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>());\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_common.hpp",
    "content": "/// @ref ext_matrix_common\n/// @file glm/ext/matrix_common.hpp\n///\n/// @defgroup ext_matrix_common GLM_EXT_matrix_common\n/// @ingroup ext\n///\n/// Defines functions for common matrix operations.\n///\n/// Include <glm/ext/matrix_common.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_common\n\n#pragma once\n\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_fixes.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_common\n\t/// @{\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a);\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a);\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR mat<C, R, T, Q> abs(mat<C, R, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_common.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_common.inl",
    "content": "#include \"../matrix.hpp\"\n\n#include \"_matrix_vectorize.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a)\n\t{\n\t\treturn mat<C, R, U, Q>(x) * (static_cast<U>(1) - a) + mat<C, R, U, Q>(y) * a;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a)\n\t{\n\t\treturn matrixCompMult(mat<C, R, U, Q>(x), static_cast<U>(1) - a) + matrixCompMult(mat<C, R, U, Q>(y), a);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_abs_matrix\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::matrix_functor_1<mat, C, R, T, T, Q>::call(abs, x);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR mat<C, R, T, Q> abs(mat<C, R, T, Q> const& x)\n\t{\n\t\treturn compute_abs_matrix<C, R, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, double, defaultp>\t\tdmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, double, defaultp>\t\tdmat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 3, double, defaultp>\t\tdmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, lowp>\t\tlowp_dmat2x3;\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, mediump>\tmediump_dmat2x3;\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, highp>\thighp_dmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 4, double, defaultp>\t\tdmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double2x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, lowp>\t\tlowp_dmat2x4;\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, mediump>\tmediump_dmat2x4;\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, highp>\thighp_dmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 2, double, defaultp>\t\tdmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, lowp>\t\tlowp_dmat3x2;\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, mediump>\tmediump_dmat3x2;\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, highp>\thighp_dmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, double, defaultp>\t\tdmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, double, defaultp>\t\tdmat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 4, double, defaultp>\t\tdmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double3x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, lowp>\t\tlowp_dmat3x4;\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, mediump>\tmediump_dmat3x4;\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, highp>\thighp_dmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 2, double, defaultp>\t\tdmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, lowp>\t\tlowp_dmat4x2;\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, mediump>\tmediump_dmat4x2;\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, highp>\thighp_dmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 3, double, defaultp>\t\tdmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, lowp>\t\tlowp_dmat4x3;\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, mediump>\tmediump_dmat4x3;\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, highp>\thighp_dmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, double, defaultp>\t\tdmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, double, defaultp>\t\tdmat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_double4x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, float, defaultp>\t\tmat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, float, defaultp>\t\tmat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, lowp>\t\tlowp_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, mediump>\tmediump_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, highp>\t\thighp_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, lowp>\t\tlowp_mat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, mediump>\tmediump_mat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, highp>\t\thighp_mat2x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 3, float, defaultp>\t\tmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, lowp>\t\tlowp_mat2x3;\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, mediump>\tmediump_mat2x3;\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, highp>\t\thighp_mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 4, float, defaultp>\t\tmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float2x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, lowp>\t\tlowp_mat2x4;\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, mediump>\tmediump_mat2x4;\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, highp>\t\thighp_mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 2, float, defaultp>\t\t\tmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, lowp>\t\tlowp_mat3x2;\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, mediump>\tmediump_mat3x2;\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, highp>\t\thighp_mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, float, defaultp>\t\t\tmat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, float, defaultp>\t\t\tmat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, lowp>\t\tlowp_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, mediump>\tmediump_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, highp>\t\thighp_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, lowp>\t\tlowp_mat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, mediump>\tmediump_mat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, highp>\t\thighp_mat3x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 4, float, defaultp>\t\t\tmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float3x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, lowp>\t\tlowp_mat3x4;\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, mediump>\tmediump_mat3x4;\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, highp>\t\thighp_mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 2, float, defaultp>\t\t\tmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, lowp>\t\tlowp_mat4x2;\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, mediump>\tmediump_mat4x2;\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, highp>\t\thighp_mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 3, float, defaultp>\t\t\tmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, lowp>\t\tlowp_mat4x3;\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, mediump>\tmediump_mat4x3;\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, highp>\t\thighp_mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @ingroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, float, defaultp>\t\t\tmat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, float, defaultp>\t\t\tmat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_float4x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, lowp>\t\tlowp_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, mediump>\tmediump_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, highp>\t\thighp_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, lowp>\t\tlowp_mat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, mediump>\tmediump_mat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, highp>\t\thighp_mat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x2.hpp",
    "content": "/// @ref ext_matrix_int2x2\n/// @file glm/ext/matrix_int2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x2\n\t/// @{\n\n\t/// Signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2\n\ttypedef mat<2, 2, int, defaultp>\timat2x2;\n\n\t/// Signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2\n\ttypedef mat<2, 2, int, defaultp>\timat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x2_sized.hpp",
    "content": "/// @ref ext_matrix_int2x2_sized\n/// @file glm/ext/matrix_int2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int8, defaultp>\t\t\t\ti8mat2x2;\n\n\t/// 16 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int16, defaultp>\t\t\t\ti16mat2x2;\n\n\t/// 32 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int32, defaultp>\t\t\t\ti32mat2x2;\n\n\t/// 64 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int64, defaultp>\t\t\t\ti64mat2x2;\n\n\n\t/// 8 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int8, defaultp>\t\t\t\ti8mat2;\n\n\t/// 16 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int16, defaultp>\t\t\t\ti16mat2;\n\n\t/// 32 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int32, defaultp>\t\t\t\ti32mat2;\n\n\t/// 64 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int64, defaultp>\t\t\t\ti64mat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x3.hpp",
    "content": "/// @ref ext_matrix_int2x3\n/// @file glm/ext/matrix_int2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x3\n\t/// @{\n\n\t/// Signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3\n\ttypedef mat<2, 3, int, defaultp>\timat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x3_sized.hpp",
    "content": "/// @ref ext_matrix_int2x3_sized\n/// @file glm/ext/matrix_int2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int8, defaultp>\t\t\t\ti8mat2x3;\n\n\t/// 16 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int16, defaultp>\t\t\t\ti16mat2x3;\n\n\t/// 32 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int32, defaultp>\t\t\t\ti32mat2x3;\n\n\t/// 64 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int64, defaultp>\t\t\t\ti64mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x4.hpp",
    "content": "/// @ref ext_matrix_int2x4\n/// @file glm/ext/matrix_int2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x4\n\t/// @{\n\n\t/// Signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4\n\ttypedef mat<2, 4, int, defaultp>\timat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int2x4_sized.hpp",
    "content": "/// @ref ext_matrix_int2x4_sized\n/// @file glm/ext/matrix_int2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int8, defaultp>\t\t\t\ti8mat2x4;\n\n\t/// 16 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int16, defaultp>\t\t\t\ti16mat2x4;\n\n\t/// 32 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int32, defaultp>\t\t\t\ti32mat2x4;\n\n\t/// 64 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int64, defaultp>\t\t\t\ti64mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x2.hpp",
    "content": "/// @ref ext_matrix_int3x2\n/// @file glm/ext/matrix_int3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x2\n\t/// @{\n\n\t/// Signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2\n\ttypedef mat<3, 2, int, defaultp>\timat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x2_sized.hpp",
    "content": "/// @ref ext_matrix_int3x2_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int8, defaultp>\t\t\t\ti8mat3x2;\n\n\t/// 16 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int16, defaultp>\t\t\t\ti16mat3x2;\n\n\t/// 32 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int32, defaultp>\t\t\t\ti32mat3x2;\n\n\t/// 64 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int64, defaultp>\t\t\t\ti64mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x3.hpp",
    "content": "/// @ref ext_matrix_int3x3\n/// @file glm/ext/matrix_int3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x3\n\t/// @{\n\n\t/// Signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3\n\ttypedef mat<3, 3, int, defaultp>\timat3x3;\n\n\t/// Signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3\n\ttypedef mat<3, 3, int, defaultp>\timat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x3_sized.hpp",
    "content": "/// @ref ext_matrix_int3x3_sized\n/// @file glm/ext/matrix_int3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int8, defaultp>\t\t\t\ti8mat3x3;\n\n\t/// 16 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int16, defaultp>\t\t\t\ti16mat3x3;\n\n\t/// 32 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int32, defaultp>\t\t\t\ti32mat3x3;\n\n\t/// 64 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int64, defaultp>\t\t\t\ti64mat3x3;\n\n\n\t/// 8 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int8, defaultp>\t\t\t\ti8mat3;\n\n\t/// 16 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int16, defaultp>\t\t\t\ti16mat3;\n\n\t/// 32 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int32, defaultp>\t\t\t\ti32mat3;\n\n\t/// 64 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int64, defaultp>\t\t\t\ti64mat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x4.hpp",
    "content": "/// @ref ext_matrix_int3x4\n/// @file glm/ext/matrix_int3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x4\n\t/// @{\n\n\t/// Signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4\n\ttypedef mat<3, 4, int, defaultp>\timat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int3x4_sized.hpp",
    "content": "/// @ref ext_matrix_int3x4_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int8, defaultp>\t\t\t\ti8mat3x4;\n\n\t/// 16 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int16, defaultp>\t\t\t\ti16mat3x4;\n\n\t/// 32 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int32, defaultp>\t\t\t\ti32mat3x4;\n\n\t/// 64 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int64, defaultp>\t\t\t\ti64mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x2.hpp",
    "content": "/// @ref ext_matrix_int4x2\n/// @file glm/ext/matrix_int4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x2\n\t/// @{\n\n\t/// Signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2\n\ttypedef mat<4, 2, int, defaultp>\timat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x2_sized.hpp",
    "content": "/// @ref ext_matrix_int4x2_sized\n/// @file glm/ext/matrix_int4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int8, defaultp>\t\t\t\ti8mat4x2;\n\n\t/// 16 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int16, defaultp>\t\t\t\ti16mat4x2;\n\n\t/// 32 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int32, defaultp>\t\t\t\ti32mat4x2;\n\n\t/// 64 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int64, defaultp>\t\t\t\ti64mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x3.hpp",
    "content": "/// @ref ext_matrix_int4x3\n/// @file glm/ext/matrix_int4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x3\n\t/// @{\n\n\t/// Signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3\n\ttypedef mat<4, 3, int, defaultp>\timat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x3_sized.hpp",
    "content": "/// @ref ext_matrix_int4x3_sized\n/// @file glm/ext/matrix_int4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int8, defaultp>\t\t\t\ti8mat4x3;\n\n\t/// 16 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int16, defaultp>\t\t\t\ti16mat4x3;\n\n\t/// 32 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int32, defaultp>\t\t\t\ti32mat4x3;\n\n\t/// 64 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int64, defaultp>\t\t\t\ti64mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x4.hpp",
    "content": "/// @ref ext_matrix_int4x4\n/// @file glm/ext/matrix_int4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x4\n\t/// @{\n\n\t/// Signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4\n\ttypedef mat<4, 4, int, defaultp>\timat4x4;\n\n\t/// Signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4\n\ttypedef mat<4, 4, int, defaultp>\timat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_int4x4_sized.hpp",
    "content": "/// @ref ext_matrix_int4x4_sized\n/// @file glm/ext/matrix_int4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int8, defaultp>\t\t\t\ti8mat4x4;\n\n\t/// 16 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int16, defaultp>\t\t\t\ti16mat4x4;\n\n\t/// 32 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int32, defaultp>\t\t\t\ti32mat4x4;\n\n\t/// 64 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int64, defaultp>\t\t\t\ti64mat4x4;\n\n\n\t/// 8 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int8, defaultp>\t\t\t\ti8mat4;\n\n\t/// 16 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int16, defaultp>\t\t\t\ti16mat4;\n\n\t/// 32 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int32, defaultp>\t\t\t\ti32mat4;\n\n\t/// 64 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int64, defaultp>\t\t\t\ti64mat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_integer.hpp",
    "content": "/// @ref ext_matrix_integer\n/// @file glm/ext/matrix_integer.hpp\n///\n/// @defgroup ext_matrix_integer GLM_EXT_matrix_integer\n/// @ingroup ext\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_integer.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_projection\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_integer\n\t/// @{\n\n\t /// Multiply matrix x by matrix y component-wise, i.e.,\n\t /// result[i][j] is the scalar product of x[i][j] and y[i][j].\n\t ///\n\t /// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t /// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t /// @tparam T Floating-point or signed integer scalar types\n\t /// @tparam Q Value from qualifier enum\n\t ///\n\t /// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a>\n\t /// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Treats the first parameter c as a column vector\n\t/// and the second parameter r as a row vector\n\t/// and does a linear algebraic matrix multiply c * r.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r);\n\n\t/// Returns the transposed matrix of x\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x);\n\n\t/// Return the determinant of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_integer.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_matrixCompMult_type<C, R, T, Q, false, Aligned> {\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tstruct compute_outerProduct_type<DA, DB, T, Q, false> {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\treturn detail::compute_outerProduct<DA, DB, T, Q>::call(c, r);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose_type<C, R, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<R, C, T, Q> call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\treturn detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant_type<C, R, T, Q, false, Aligned>{\n\t\n\t\tGLM_FUNC_QUALIFIER static T call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\treturn detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_projection.hpp",
    "content": "/// @ref ext_matrix_projection\n/// @file glm/ext/matrix_projection.hpp\n///\n/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection\n/// @ingroup ext\n///\n/// Functions that generate common projection transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_projection.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_transform\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_projection extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_projection\n\t/// @{\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> projectZO(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> projectNO(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.\n\t/// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> project(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProjectZO(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProjectNO(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.\n\t/// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProject(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Define a picking region\n\t///\n\t/// @param center Specify the center of a picking region in window coordinates.\n\t/// @param delta Specify the width and height, respectively, of the picking region in window coordinates.\n\t/// @param viewport Rendering viewport\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPickMatrix.xml\">gluPickMatrix man page</a>\n\ttemplate<typename T, qualifier Q, typename U>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix(\n\t\tvec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_projection.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_projection.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1));\n\t\ttmp = model * tmp;\n\t\ttmp = proj * tmp;\n\n\t\ttmp /= tmp.w;\n\t\ttmp.x = tmp.x * static_cast<T>(0.5) + static_cast<T>(0.5);\n\t\ttmp.y = tmp.y * static_cast<T>(0.5) + static_cast<T>(0.5);\n\n\t\ttmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);\n\t\ttmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);\n\n\t\treturn vec<3, T, Q>(tmp);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1));\n\t\ttmp = model * tmp;\n\t\ttmp = proj * tmp;\n\n\t\ttmp /= tmp.w;\n\t\ttmp = tmp * static_cast<T>(0.5) + static_cast<T>(0.5);\n\t\ttmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);\n\t\ttmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);\n\n\t\treturn vec<3, T, Q>(tmp);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn projectZO(obj, model, proj, viewport);\n#\t\telse\n\t\t\treturn projectNO(obj, model, proj, viewport);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tmat<4, 4, T, Q> Inverse = inverse(proj * model);\n\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(win, T(1));\n\t\ttmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);\n\t\ttmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);\n\t\ttmp.x = tmp.x * static_cast<T>(2) - static_cast<T>(1);\n\t\ttmp.y = tmp.y * static_cast<T>(2) - static_cast<T>(1);\n\n\t\tvec<4, T, Q> obj = Inverse * tmp;\n\t\tobj /= obj.w;\n\n\t\treturn vec<3, T, Q>(obj);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tmat<4, 4, T, Q> Inverse = inverse(proj * model);\n\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(win, T(1));\n\t\ttmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);\n\t\ttmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);\n\t\ttmp = tmp * static_cast<T>(2) - static_cast<T>(1);\n\n\t\tvec<4, T, Q> obj = Inverse * tmp;\n\t\tobj /= obj.w;\n\n\t\treturn vec<3, T, Q>(obj);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn unProjectZO(win, model, proj, viewport);\n#\t\telse\n\t\t\treturn unProjectNO(win, model, proj, viewport);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q, typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport)\n\t{\n\t\tassert(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0));\n\t\tmat<4, 4, T, Q> Result(static_cast<T>(1));\n\n\t\tif(!(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0)))\n\t\t\treturn Result; // Error\n\n\t\tvec<3, T, Q> Temp(\n\t\t\t(static_cast<T>(viewport[2]) - static_cast<T>(2) * (center.x - static_cast<T>(viewport[0]))) / delta.x,\n\t\t\t(static_cast<T>(viewport[3]) - static_cast<T>(2) * (center.y - static_cast<T>(viewport[1]))) / delta.y,\n\t\t\tstatic_cast<T>(0));\n\n\t\t// Translate and scale the picked region to the entire window\n\t\tResult = translate(Result, Temp);\n\t\treturn scale(Result, vec<3, T, Q>(static_cast<T>(viewport[2]) / delta.x, static_cast<T>(viewport[3]) / delta.y, static_cast<T>(1)));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_relational.hpp",
    "content": "/// @ref ext_matrix_relational\n/// @file glm/ext/matrix_relational.hpp\n///\n/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for matrix types that take a user defined epsilon values.\n///\n/// Include <glm/ext/matrix_relational.hpp> to use the features of this extension.\n///\n/// @see ext_vector_relational\n/// @see ext_scalar_relational\n/// @see ext_quaternion_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_relational\n\t/// @{\n\n\t/// Perform a component-wise equal-to comparison of two matrices.\n\t/// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Perform a component-wise not-equal-to comparison of two matrices.\n\t/// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_relational.inl",
    "content": "/// @ref ext_vector_relational\n/// @file glm/ext/vector_relational.inl\n\n// Dependency:\n#include \"../ext/vector_relational.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, T Epsilon)\n\t{\n\t\treturn equal(a, b, vec<C, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, T, Q> const& Epsilon)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i], Epsilon[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, T Epsilon)\n\t{\n\t\treturn notEqual(a, b, vec<C, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, T, Q> const& Epsilon)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i], Epsilon[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, int MaxULPs)\n\t{\n\t\treturn equal(a, b, vec<C, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, int, Q> const& MaxULPs)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i], MaxULPs[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, int MaxULPs)\n\t{\n\t\treturn notEqual(a, b, vec<C, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, int, Q> const& MaxULPs)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i], MaxULPs[i]));\n\t\treturn Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_transform.hpp",
    "content": "/// @ref ext_matrix_transform\n/// @file glm/ext/matrix_transform.hpp\n///\n/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform\n/// @ingroup ext\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_transform.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_projection\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_transform extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_transform\n\t/// @{\n\n\t/// Builds an identity matrix.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType identity();\n\n\t/// Builds a translation 4 * 4 matrix created from a vector of 3 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a translation vector.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @code\n\t/// #include <glm/glm.hpp>\n\t/// #include <glm/gtc/matrix_transform.hpp>\n\t/// ...\n\t/// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));\n\t/// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f\n\t/// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f\n\t/// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f\n\t/// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f\n\t/// @endcode\n\t///\n\t/// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z)\n\t/// @see - translate(vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml\">glTranslate man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> translate(\n\t\tmat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);\n\n\t/// Builds a rotation 4 * 4 matrix created from an axis vector and an angle.\n\t///\n\t/// @param m Input matrix multiplied by this rotation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\t/// @param axis Rotation axis, recommended to be normalized.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)\n\t/// @see - rotate(T angle, vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glRotate.xml\">glRotate man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotate(\n\t\tmat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis);\n\n\t/// Builds a scale 4 * 4 matrix created from 3 scalars.\n\t///\n\t/// @param m Input matrix multiplied by this scale matrix.\n\t/// @param v Ratio of scaling for each axis.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z)\n\t/// @see - scale(vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glScale.xml\">glScale man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scale(\n\t\tmat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);\n\n    /// Builds a scale 4 * 4 matrix created from point referent 3 shearers.\n    ///\n    /// @param m Input matrix multiplied by this shear matrix.\n    /// @param p Point of shearing as reference.\n    /// @param l_x Ratio of matrix.x projection in YZ plane relative to the y-axis/z-axis.\n    /// @param l_y Ratio of matrix.y projection in XZ plane relative to the x-axis/z-axis.\n    /// @param l_z Ratio of matrix.z projection in XY plane relative to the x-axis/y-axis.\n    ///\n    /// as example:\n    ///                                         [1   , l_xy, l_xz, -(l_xy+l_xz) * p_x] [x]  T\n    ///   [x`, y`, z`, w`] = [x`, y`, z`, w`] * [l_yx, 1   , l_yz, -(l_yx+l_yz) * p_y] [y]\n    ///                                         [l_zx, l_zy, 1   , -(l_zx+l_zy) * p_z] [z]\n    ///                                         [0   , 0   , 0   , 1                 ] [w]\n    ///\n    /// @tparam T A floating-point shear type\n    /// @tparam Q A value from qualifier enum\n    ///\n    /// @see - shear(mat<4, 4, T, Q> const& m, T x, T y, T z)\n    /// @see - shear(vec<3, T, Q> const& p)\n    /// @see - shear(vec<2, T, Q> const& l_x)\n    /// @see - shear(vec<2, T, Q> const& l_y)\n    /// @see - shear(vec<2, T, Q> const& l_z)\n    /// @see no resource...\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(\n        mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z);\n\n    /// Build a right handed look at view matrix.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// Build a left handed look at view matrix.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// Build a look at view matrix based on the default handedness.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml\">gluLookAt man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAt(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_transform.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_transform.inl",
    "content": "namespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity()\n\t{\n\t\treturn detail::init_gentype<genType, detail::genTypeTrait<genType>::GENTYPE>::identity();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result(m);\n\t\tResult[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tvec<3, T, Q> axis(normalize(v));\n\t\tvec<3, T, Q> temp((T(1) - c) * axis);\n\n\t\tmat<4, 4, T, Q> Rotate;\n\t\tRotate[0][0] = c + temp[0] * axis[0];\n\t\tRotate[0][1] = temp[0] * axis[1] + s * axis[2];\n\t\tRotate[0][2] = temp[0] * axis[2] - s * axis[1];\n\n\t\tRotate[1][0] = temp[1] * axis[0] - s * axis[2];\n\t\tRotate[1][1] = c + temp[1] * axis[1];\n\t\tRotate[1][2] = temp[1] * axis[2] + s * axis[0];\n\n\t\tRotate[2][0] = temp[2] * axis[0] + s * axis[1];\n\t\tRotate[2][1] = temp[2] * axis[1] - s * axis[0];\n\t\tRotate[2][2] = c + temp[2] * axis[2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t\tResult[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t\tResult[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\t\tmat<4, 4, T, Q> Result;\n\n\t\tvec<3, T, Q> axis = normalize(v);\n\n\t\tResult[0][0] = c + (static_cast<T>(1) - c)      * axis.x     * axis.x;\n\t\tResult[0][1] = (static_cast<T>(1) - c) * axis.x * axis.y + s * axis.z;\n\t\tResult[0][2] = (static_cast<T>(1) - c) * axis.x * axis.z - s * axis.y;\n\t\tResult[0][3] = static_cast<T>(0);\n\n\t\tResult[1][0] = (static_cast<T>(1) - c) * axis.y * axis.x - s * axis.z;\n\t\tResult[1][1] = c + (static_cast<T>(1) - c) * axis.y * axis.y;\n\t\tResult[1][2] = (static_cast<T>(1) - c) * axis.y * axis.z + s * axis.x;\n\t\tResult[1][3] = static_cast<T>(0);\n\n\t\tResult[2][0] = (static_cast<T>(1) - c) * axis.z * axis.x + s * axis.y;\n\t\tResult[2][1] = (static_cast<T>(1) - c) * axis.z * axis.y - s * axis.x;\n\t\tResult[2][2] = c + (static_cast<T>(1) - c) * axis.z * axis.z;\n\t\tResult[2][3] = static_cast<T>(0);\n\n\t\tResult[3] = vec<4, T, Q>(0, 0, 0, 1);\n\t\treturn m * Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * v[0];\n\t\tResult[1] = m[1] * v[1];\n\t\tResult[2] = m[2] * v[2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result(T(1));\n\t\tResult[0][0] = v.x;\n\t\tResult[1][1] = v.y;\n\t\tResult[2][2] = v.z;\n\t\treturn m * Result;\n\t}\n\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z)\n    {\n        T const lambda_xy = l_x[0];\n        T const lambda_xz = l_x[1];\n        T const lambda_yx = l_y[0];\n        T const lambda_yz = l_y[1];\n        T const lambda_zx = l_z[0];\n        T const lambda_zy = l_z[1];\n\n        vec<3, T, Q> point_lambda = vec<3, T, Q>(\n            (lambda_xy + lambda_xz), (lambda_yx + lambda_yz), (lambda_zx + lambda_zy)\n        );\n\n        mat<4, 4, T, Q> Shear = mat<4, 4, T, Q>(\n            1                      , lambda_yx              , lambda_zx              , 0,\n            lambda_xy              , 1                      , lambda_zy              , 0,\n            lambda_xz              , lambda_yz              , 1                      , 0,\n            -point_lambda[0] * p[0], -point_lambda[1] * p[1], -point_lambda[2] * p[2], 1\n        );\n\n        mat<4, 4, T, Q> Result;\n        Result[0] = Shear[0] * m[0][0] + Shear[1] * m[0][1] + Shear[2] * m[0][2] + Shear[3] * m[0][3];\n        Result[1] = Shear[0] * m[1][0] + Shear[1] * m[1][1] + Shear[2] * m[1][2] + Shear[3] * m[1][3];\n        Result[2] = Shear[0] * m[2][0] + Shear[1] * m[2][1] + Shear[2] * m[2][2] + Shear[3] * m[2][3];\n        Result[3] = Shear[0] * m[3][0] + Shear[1] * m[3][1] + Shear[2] * m[3][2] + Shear[3] * m[3][3];\n        return Result;\n    }\n\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear_slow(mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z)\n    {\n        T const lambda_xy = static_cast<T>(l_x[0]);\n        T const lambda_xz = static_cast<T>(l_x[1]);\n        T const lambda_yx = static_cast<T>(l_y[0]);\n        T const lambda_yz = static_cast<T>(l_y[1]);\n        T const lambda_zx = static_cast<T>(l_z[0]);\n        T const lambda_zy = static_cast<T>(l_z[1]);\n\n        vec<3, T, Q> point_lambda = vec<3, T, Q>(\n            static_cast<T>(lambda_xy + lambda_xz),\n            static_cast<T>(lambda_yx + lambda_yz),\n            static_cast<T>(lambda_zx + lambda_zy)\n        );\n\n        mat<4, 4, T, Q> Shear = mat<4, 4, T, Q>(\n            1                      , lambda_yx              , lambda_zx              , 0,\n            lambda_xy              , 1                      , lambda_zy              , 0,\n            lambda_xz              , lambda_yz              , 1                      , 0,\n            -point_lambda[0] * p[0], -point_lambda[1] * p[1], -point_lambda[2] * p[2], 1\n        );\n        return m * Shear;\n    }\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n\t\tvec<3, T, Q> const f(normalize(center - eye));\n\t\tvec<3, T, Q> const s(normalize(cross(f, up)));\n\t\tvec<3, T, Q> const u(cross(s, f));\n\n\t\tmat<4, 4, T, Q> Result(1);\n\t\tResult[0][0] = s.x;\n\t\tResult[1][0] = s.y;\n\t\tResult[2][0] = s.z;\n\t\tResult[0][1] = u.x;\n\t\tResult[1][1] = u.y;\n\t\tResult[2][1] = u.z;\n\t\tResult[0][2] =-f.x;\n\t\tResult[1][2] =-f.y;\n\t\tResult[2][2] =-f.z;\n\t\tResult[3][0] =-dot(s, eye);\n\t\tResult[3][1] =-dot(u, eye);\n\t\tResult[3][2] = dot(f, eye);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n\t\tvec<3, T, Q> const f(normalize(center - eye));\n\t\tvec<3, T, Q> const s(normalize(cross(up, f)));\n\t\tvec<3, T, Q> const u(cross(f, s));\n\n\t\tmat<4, 4, T, Q> Result(1);\n\t\tResult[0][0] = s.x;\n\t\tResult[1][0] = s.y;\n\t\tResult[2][0] = s.z;\n\t\tResult[0][1] = u.x;\n\t\tResult[1][1] = u.y;\n\t\tResult[2][1] = u.z;\n\t\tResult[0][2] = f.x;\n\t\tResult[1][2] = f.y;\n\t\tResult[2][2] = f.z;\n\t\tResult[3][0] = -dot(s, eye);\n\t\tResult[3][1] = -dot(u, eye);\n\t\tResult[3][2] = -dot(f, eye);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n#       if (GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT)\n            return lookAtLH(eye, center, up);\n#       else\n            return lookAtRH(eye, center, up);\n#       endif\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x2.hpp",
    "content": "/// @ref ext_matrix_uint2x2\n/// @file glm/ext/matrix_uint2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x2\n\t/// @{\n\n\t/// Unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2\n\ttypedef mat<2, 2, uint, defaultp>\tumat2x2;\n\n\t/// Unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2\n\ttypedef mat<2, 2, uint, defaultp>\tumat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x2_sized\n/// @file glm/ext/matrix_uint2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint8, defaultp>\t\t\t\tu8mat2x2;\n\n\t/// 16 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint16, defaultp>\t\t\t\tu16mat2x2;\n\n\t/// 32 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint32, defaultp>\t\t\t\tu32mat2x2;\n\n\t/// 64 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint64, defaultp>\t\t\t\tu64mat2x2;\n\n\n\t/// 8 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint8, defaultp>\t\t\t\tu8mat2;\n\n\t/// 16 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint16, defaultp>\t\t\t\tu16mat2;\n\n\t/// 32 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint32, defaultp>\t\t\t\tu32mat2;\n\n\t/// 64 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint64, defaultp>\t\t\t\tu64mat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x3.hpp",
    "content": "/// @ref ext_matrix_uint2x3\n/// @file glm/ext/matrix_uint2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x3 GLM_EXT_matrix_uint2x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x3\n\t/// @{\n\n\t/// Unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3\n\ttypedef mat<2, 3, uint, defaultp>\tumat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x3_sized\n/// @file glm/ext/matrix_uint2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint8, defaultp>\t\t\t\tu8mat2x3;\n\n\t/// 16 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint16, defaultp>\t\t\t\tu16mat2x3;\n\n\t/// 32 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint32, defaultp>\t\t\t\tu32mat2x3;\n\n\t/// 64 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint64, defaultp>\t\t\t\tu64mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x4.hpp",
    "content": "/// @ref ext_matrix_uint2x4\n/// @file glm/ext/matrix_uint2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x4\n\t/// @{\n\n\t/// Unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4\n\ttypedef mat<2, 4, uint, defaultp>\tumat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint2x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x4_sized\n/// @file glm/ext/matrix_uint2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint8, defaultp>\t\t\t\tu8mat2x4;\n\n\t/// 16 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint16, defaultp>\t\t\t\tu16mat2x4;\n\n\t/// 32 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint32, defaultp>\t\t\t\tu32mat2x4;\n\n\t/// 64 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint64, defaultp>\t\t\t\tu64mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x2.hpp",
    "content": "/// @ref ext_matrix_uint3x2\n/// @file glm/ext/matrix_uint3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x2 GLM_EXT_matrix_uint3x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x2\n\t/// @{\n\n\t/// Unsigned integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2\n\ttypedef mat<3, 2, uint, defaultp>\tumat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x2_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint8, defaultp>\t\t\t\tu8mat3x2;\n\n\t/// 16 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint16, defaultp>\t\t\t\tu16mat3x2;\n\n\t/// 32 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint32, defaultp>\t\t\t\tu32mat3x2;\n\n\t/// 64 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint64, defaultp>\t\t\t\tu64mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x3.hpp",
    "content": "/// @ref ext_matrix_uint3x3\n/// @file glm/ext/matrix_uint3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x3\n\t/// @{\n\n\t/// Unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3\n\ttypedef mat<3, 3, uint, defaultp>\tumat3x3;\n\n\t/// Unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3\n\ttypedef mat<3, 3, uint, defaultp>\tumat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x3_sized\n/// @file glm/ext/matrix_uint3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint8, defaultp>\t\t\t\tu8mat3x3;\n\n\t/// 16 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint16, defaultp>\t\t\t\tu16mat3x3;\n\n\t/// 32 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint32, defaultp>\t\t\t\tu32mat3x3;\n\n\t/// 64 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint64, defaultp>\t\t\t\tu64mat3x3;\n\n\n\t/// 8 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint8, defaultp>\t\t\t\tu8mat3;\n\n\t/// 16 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint16, defaultp>\t\t\t\tu16mat3;\n\n\t/// 32 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint32, defaultp>\t\t\t\tu32mat3;\n\n\t/// 64 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint64, defaultp>\t\t\t\tu64mat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x4.hpp",
    "content": "/// @ref ext_matrix_uint3x4\n/// @file glm/ext/matrix_uint3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x4\n\t/// @{\n\n\t/// Signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4\n\ttypedef mat<3, 4, uint, defaultp>\tumat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint3x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x4_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint8, defaultp>\t\t\t\tu8mat3x4;\n\n\t/// 16 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint16, defaultp>\t\t\t\tu16mat3x4;\n\n\t/// 32 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint32, defaultp>\t\t\t\tu32mat3x4;\n\n\t/// 64 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint64, defaultp>\t\t\t\tu64mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x2.hpp",
    "content": "/// @ref ext_matrix_uint4x2\n/// @file glm/ext/matrix_uint4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x2\n\t/// @{\n\n\t/// Unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2\n\ttypedef mat<4, 2, uint, defaultp>\tumat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x2_sized\n/// @file glm/ext/matrix_uint4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint8, defaultp>\t\t\t\tu8mat4x2;\n\n\t/// 16 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint16, defaultp>\t\t\t\tu16mat4x2;\n\n\t/// 32 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint32, defaultp>\t\t\t\tu32mat4x2;\n\n\t/// 64 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint64, defaultp>\t\t\t\tu64mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x3.hpp",
    "content": "/// @ref ext_matrix_uint4x3\n/// @file glm/ext/matrix_uint4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x3\n\t/// @{\n\n\t/// Unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3\n\ttypedef mat<4, 3, uint, defaultp>\tumat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x3_sized\n/// @file glm/ext/matrix_uint4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint8, defaultp>\t\t\t\tu8mat4x3;\n\n\t/// 16 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint16, defaultp>\t\t\t\tu16mat4x3;\n\n\t/// 32 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint32, defaultp>\t\t\t\tu32mat4x3;\n\n\t/// 64 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint64, defaultp>\t\t\t\tu64mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x4.hpp",
    "content": "/// @ref ext_matrix_uint4x4\n/// @file glm/ext/matrix_uint4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x4\n\t/// @{\n\n\t/// Unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4\n\ttypedef mat<4, 4, uint, defaultp>\tumat4x4;\n\n\t/// Unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4\n\ttypedef mat<4, 4, uint, defaultp>\tumat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/matrix_uint4x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x4_sized\n/// @file glm/ext/matrix_uint4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint8, defaultp>\t\t\t\tu8mat4x4;\n\n\t/// 16 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint16, defaultp>\t\t\t\tu16mat4x4;\n\n\t/// 32 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint32, defaultp>\t\t\t\tu32mat4x4;\n\n\t/// 64 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint64, defaultp>\t\t\t\tu64mat4x4;\n\n\n\t/// 8 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint8, defaultp>\t\t\t\tu8mat4;\n\n\t/// 16 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint16, defaultp>\t\t\t\tu16mat4;\n\n\t/// 32 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint32, defaultp>\t\t\t\tu32mat4;\n\n\t/// 64 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint64, defaultp>\t\t\t\tu64mat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_common.hpp",
    "content": "/// @ref ext_quaternion_common\n/// @file glm/ext/quaternion_common.hpp\n///\n/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common\n/// @ingroup ext\n///\n/// Provides common functions for quaternion types\n///\n/// Include <glm/ext/quaternion_common.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_common\n/// @see ext_vector_common\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_trigonometric\n/// @see ext_quaternion_transform\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_constants.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_common\n\t/// @{\n\n\t/// Spherical linear interpolation of two quaternions.\n\t/// The interpolation is oriented and the rotation is performed at constant speed.\n\t/// For short path spherical linear interpolation, use the slerp function.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - slerp(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n\t/// Linear interpolation of two quaternions.\n\t/// The interpolation is oriented.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined in the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n\t/// Spherical linear interpolation of two quaternions.\n\t/// The interpolation always take the short path and the rotation is performed at constant speed.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n    /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis.\n    /// The interpolation always take the short path when the spin count is positive and long path\n    /// when count is negative. Rotation is performed at constant speed.\n    ///\n    /// @param x A quaternion\n    /// @param y A quaternion\n    /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n    /// @param k Additional spin count. If Value is negative interpolation will be on \"long\" path.\n    ///\n    /// @tparam T A floating-point scalar type\n    /// @tparam S An integer scalar type\n    /// @tparam Q A value from qualifier enum\n    template<typename T, typename S, qualifier Q>\n    GLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k);\n\n\t/// Returns the q conjugate.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> conjugate(qua<T, Q> const& q);\n\n\t/// Returns the q inverse.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> inverse(qua<T, Q> const& q);\n\n\t/// Returns true if x holds a NaN (not a number)\n\t/// representation in the underlying implementation's set of\n\t/// floating point representations. Returns false otherwise,\n\t/// including for implementations with no NaN\n\t/// representations.\n\t///\n\t/// /!\\ When using compiler fast math, this function may fail.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> isnan(qua<T, Q> const& x);\n\n\t/// Returns true if x holds a positive infinity or negative\n\t/// infinity representation in the underlying implementation's\n\t/// set of floating point representations. Returns false\n\t/// otherwise, including for implementations with no infinity\n\t/// representations.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> isinf(qua<T, Q> const& x);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_common.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_common.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'mix' only accept floating-point inputs\");\n\n\t\tT const cosTheta = dot(x, y);\n\n\t\t// Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n\t\tif(cosTheta > static_cast<T>(1) - epsilon<T>())\n\t\t{\n\t\t\t// Linear interpolation\n\t\t\treturn qua<T, Q>(\n\t\t\t\tmix(x.w, y.w, a),\n\t\t\t\tmix(x.x, y.x, a),\n\t\t\t\tmix(x.y, y.y, a),\n\t\t\t\tmix(x.z, y.z, a));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Essential Mathematics, page 467\n\t\t\tT angle = acos(cosTheta);\n\t\t\treturn (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'lerp' only accept floating-point inputs\");\n\n\t\t// Lerp is only defined in [0, 1]\n\t\tassert(a >= static_cast<T>(0));\n\t\tassert(a <= static_cast<T>(1));\n\n\t\treturn x * (static_cast<T>(1) - a) + (y * a);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'slerp' only accept floating-point inputs\");\n\n\t\tqua<T, Q> z = y;\n\n\t\tT cosTheta = dot(x, y);\n\n\t\t// If cosTheta < 0, the interpolation will take the long way around the sphere.\n\t\t// To fix this, one quat must be negated.\n\t\tif(cosTheta < static_cast<T>(0))\n\t\t{\n\t\t\tz = -y;\n\t\t\tcosTheta = -cosTheta;\n\t\t}\n\n\t\t// Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n\t\tif(cosTheta > static_cast<T>(1) - epsilon<T>())\n\t\t{\n\t\t\t// Linear interpolation\n\t\t\treturn qua<T, Q>(\n\t\t\t\tmix(x.w, z.w, a),\n\t\t\t\tmix(x.x, z.x, a),\n\t\t\t\tmix(x.y, z.y, a),\n\t\t\t\tmix(x.z, z.z, a));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Essential Mathematics, page 467\n\t\t\tT angle = acos(cosTheta);\n\t\t\treturn (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle);\n\t\t}\n\t}\n\n    template<typename T, typename S, qualifier Q>\n    GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k)\n    {\n        GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'slerp' only accept floating-point inputs\");\n        GLM_STATIC_ASSERT(std::numeric_limits<S>::is_integer, \"'slerp' only accept integer for spin count\");\n\n        qua<T, Q> z = y;\n\n        T cosTheta = dot(x, y);\n\n        // If cosTheta < 0, the interpolation will take the long way around the sphere.\n        // To fix this, one quat must be negated.\n        if (cosTheta < static_cast<T>(0))\n        {\n            z = -y;\n            cosTheta = -cosTheta;\n        }\n\n        // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n        if (cosTheta > static_cast<T>(1) - epsilon<T>())\n        {\n            // Linear interpolation\n            return qua<T, Q>(\n                mix(x.w, z.w, a),\n                mix(x.x, z.x, a),\n                mix(x.y, z.y, a),\n                mix(x.z, z.z, a));\n        }\n        else\n        {\n            // Graphics Gems III, page 96\n            T angle = acos(cosTheta);\n            T phi = angle + k * glm::pi<T>();\n            return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle);\n        }\n    }\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> conjugate(qua<T, Q> const& q)\n\t{\n\t\treturn qua<T, Q>(q.w, -q.x, -q.y, -q.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> inverse(qua<T, Q> const& q)\n\t{\n\t\treturn conjugate(q) / dot(q, q);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua<T, Q> const& q)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n\t\treturn vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua<T, Q> const& q)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n\t\treturn vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w));\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"quaternion_common_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_common_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_dot<qua<float, Q>, float, true>\n\t{\n\t\tstatic GLM_FUNC_QUALIFIER float call(qua<float, Q> const& x, qua<float, Q> const& y)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_double.hpp",
    "content": "/// @ref ext_quaternion_double\n/// @file glm/ext/quaternion_double.hpp\n///\n/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double\n/// @ingroup ext\n///\n/// Exposes double-precision floating point quaternion type.\n///\n/// Include <glm/ext/quaternion_double.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double_precision\n/// @see ext_quaternion_common\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_double extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_double\n\t/// @{\n\n\t/// Quaternion of double-precision floating-point numbers.\n\ttypedef qua<double, defaultp>\t\tdquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_double_precision.hpp",
    "content": "/// @ref ext_quaternion_double_precision\n/// @file glm/ext/quaternion_double_precision.hpp\n///\n/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision\n/// @ingroup ext\n///\n/// Exposes double-precision floating point quaternion type with various precision in term of ULPs.\n///\n/// Include <glm/ext/quaternion_double_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_double_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_double_precision\n\t/// @{\n\n\t/// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, lowp>\t\tlowp_dquat;\n\n\t/// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, mediump>\tmediump_dquat;\n\n\t/// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, highp>\t\thighp_dquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_exponential.hpp",
    "content": "/// @ref ext_quaternion_exponential\n/// @file glm/ext/quaternion_exponential.hpp\n///\n/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential\n/// @ingroup ext\n///\n/// Provides exponential functions for quaternion types\n///\n/// Include <glm/ext/quaternion_exponential.hpp> to use the features of this extension.\n///\n/// @see core_exponential\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n#include \"../ext/scalar_constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_exponential extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_transform\n\t/// @{\n\n\t/// Returns a exponential of a quaternion.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> exp(qua<T, Q> const& q);\n\n\t/// Returns a logarithm of a quaternion\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> log(qua<T, Q> const& q);\n\n\t/// Returns a quaternion raised to a power.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> pow(qua<T, Q> const& q, T y);\n\n\t/// Returns the square root of a quaternion\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> sqrt(qua<T, Q> const& q);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_exponential.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_exponential.inl",
    "content": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> exp(qua<T, Q> const& q)\n\t{\n\t\tvec<3, T, Q> u(q.x, q.y, q.z);\n\t\tT const Angle = glm::length(u);\n\t\tif (Angle < epsilon<T>())\n\t\t\treturn qua<T, Q>();\n\n\t\tvec<3, T, Q> const v(u / Angle);\n\t\treturn qua<T, Q>(cos(Angle), sin(Angle) * v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> log(qua<T, Q> const& q)\n\t{\n\t\tvec<3, T, Q> u(q.x, q.y, q.z);\n\t\tT Vec3Len = length(u);\n\n\t\tif (Vec3Len < epsilon<T>())\n\t\t{\n\t\t\tif(q.w > static_cast<T>(0))\n\t\t\t\treturn qua<T, Q>(log(q.w), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t\t\telse if(q.w < static_cast<T>(0))\n\t\t\t\treturn qua<T, Q>(log(-q.w), pi<T>(), static_cast<T>(0), static_cast<T>(0));\n\t\t\telse\n\t\t\t\treturn qua<T, Q>(std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT t = atan(Vec3Len, T(q.w)) / Vec3Len;\n\t\t\tT QuatLen2 = Vec3Len * Vec3Len + q.w * q.w;\n\t\t\treturn qua<T, Q>(static_cast<T>(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> pow(qua<T, Q> const& x, T y)\n\t{\n\t\t//Raising to the power of 0 should yield 1\n\t\t//Needed to prevent a division by 0 error later on\n\t\tif(y > -epsilon<T>() && y < epsilon<T>())\n\t\t\treturn qua<T, Q>(1,0,0,0);\n\n\t\t//To deal with non-unit quaternions\n\t\tT magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w);\n\n\t\tT Angle;\n\t\tif(abs(x.w / magnitude) > cos_one_over_two<T>())\n\t\t{\n\t\t\t//Scalar component is close to 1; using it to recover angle would lose precision\n\t\t\t//Instead, we use the non-scalar components since sin() is accurate around 0\n\n\t\t\t//Prevent a division by 0 error later on\n\t\t\tT VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z;\n\t\t\t//Despite the compiler might say, we actually want to compare\n\t\t\t//VectorMagnitude to 0. here; we could use denorm_int() compiling a\n\t\t\t//project with unsafe maths optimizations might make the comparison\n\t\t\t//always false, even when VectorMagnitude is 0.\n\t\t\tif (VectorMagnitude < std::numeric_limits<T>::min()) {\n\t\t\t\t//Equivalent to raising a real number to a power\n\t\t\t\treturn qua<T, Q>(pow(x.w, y), 0, 0, 0);\n\t\t\t}\n\n\t\t\tAngle = asin(sqrt(VectorMagnitude) / magnitude);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//Scalar component is small, shouldn't cause loss of precision\n\t\t\tAngle = acos(x.w / magnitude);\n\t\t}\n\n\t\tT NewAngle = Angle * y;\n\t\tT Div = sin(NewAngle) / sin(Angle);\n\t\tT Mag = pow(magnitude, y - static_cast<T>(1));\n\t\treturn qua<T, Q>(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> sqrt(qua<T, Q> const& x)\n\t{\n\t\treturn pow(x, static_cast<T>(0.5));\n\t}\n}//namespace glm\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_float.hpp",
    "content": "/// @ref ext_quaternion_float\n/// @file glm/ext/quaternion_float.hpp\n///\n/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float\n/// @ingroup ext\n///\n/// Exposes single-precision floating point quaternion type.\n///\n/// Include <glm/ext/quaternion_float.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_double\n/// @see ext_quaternion_float_precision\n/// @see ext_quaternion_common\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_float extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_float\n\t/// @{\n\n\t/// Quaternion of single-precision floating-point numbers.\n\ttypedef qua<float, defaultp>\t\tquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_float_precision.hpp",
    "content": "/// @ref ext_quaternion_float_precision\n/// @file glm/ext/quaternion_float_precision.hpp\n///\n/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision\n/// @ingroup ext\n///\n/// Exposes single-precision floating point quaternion type with various precision in term of ULPs.\n///\n/// Include <glm/ext/quaternion_float_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_float_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_float_precision\n\t/// @{\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, lowp>\t\tlowp_quat;\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, mediump>\t\tmediump_quat;\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, highp>\t\thighp_quat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_geometric.hpp",
    "content": "/// @ref ext_quaternion_geometric\n/// @file glm/ext/quaternion_geometric.hpp\n///\n/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric\n/// @ingroup ext\n///\n/// Provides geometric functions for quaternion types\n///\n/// Include <glm/ext/quaternion_geometric.hpp> to use the features of this extension.\n///\n/// @see core_func_geometric\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/vector_relational.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_geometric extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_geometric\n\t/// @{\n\n\t/// Returns the norm of a quaternions\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T length(qua<T, Q> const& q);\n\n\t/// Returns the normalized quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> normalize(qua<T, Q> const& q);\n\n\t/// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T dot(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Compute a cross product.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_geometric.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_geometric.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T dot(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn detail::compute_dot<qua<T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length(qua<T, Q> const& q)\n\t{\n\t\treturn glm::sqrt(dot(q, q));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> normalize(qua<T, Q> const& q)\n\t{\n\t\tT len = length(q);\n\t\tif(len <= static_cast<T>(0)) // Problem\n\t\t\treturn qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t\tT oneOverLen = static_cast<T>(1) / len;\n\t\treturn qua<T, Q>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,\n\t\t\tq1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,\n\t\t\tq1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z,\n\t\t\tq1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_relational.hpp",
    "content": "/// @ref ext_quaternion_relational\n/// @file glm/ext/quaternion_relational.hpp\n///\n/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for quaternion types that take a user defined epsilon values.\n///\n/// Include <glm/ext/quaternion_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_vector_relational\n/// @see ext_matrix_relational\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../vector_relational.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of result x == y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of result x != y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_relational.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] == y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn lessThan(abs(v), vec<4, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] != y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn greaterThanEqual(abs(v), vec<4, T, Q>(epsilon));\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_transform.hpp",
    "content": "/// @ref ext_quaternion_transform\n/// @file glm/ext/quaternion_transform.hpp\n///\n/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform\n/// @ingroup ext\n///\n/// Provides transformation functions for quaternion types\n///\n/// Include <glm/ext/quaternion_transform.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_transform extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_transform\n\t/// @{\n\n\t/// Rotates a quaternion from a vector of 3 components axis and an angle.\n\t///\n\t/// @param q Source orientation\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Axis of the rotation\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& axis);\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_transform.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_transform.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> Tmp = v;\n\n\t\t// Axis of rotation must be normalised\n\t\tT len = glm::length(Tmp);\n\t\tif(abs(len - static_cast<T>(1)) > static_cast<T>(0.001))\n\t\t{\n\t\t\tT oneOverLen = static_cast<T>(1) / len;\n\t\t\tTmp.x *= oneOverLen;\n\t\t\tTmp.y *= oneOverLen;\n\t\t\tTmp.z *= oneOverLen;\n\t\t}\n\n\t\tT const AngleRad(angle);\n\t\tT const Sin = sin(AngleRad * static_cast<T>(0.5));\n\n\t\treturn q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_trigonometric.hpp",
    "content": "/// @ref ext_quaternion_trigonometric\n/// @file glm/ext/quaternion_trigonometric.hpp\n///\n/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric\n/// @ingroup ext\n///\n/// Provides trigonometric functions for quaternion types\n///\n/// Include <glm/ext/quaternion_trigonometric.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n\n#pragma once\n\n// Dependency:\n#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"scalar_constants.hpp\"\n#include \"vector_relational.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_trigonometric extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_trigonometric\n\t/// @{\n\n\t/// Returns the quaternion rotation angle.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T angle(qua<T, Q> const& x);\n\n\t/// Returns the q rotation axis.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> axis(qua<T, Q> const& x);\n\n\t/// Build a quaternion from an angle and a normalized axis.\n\t///\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Axis of the quaternion, must be normalized.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& axis);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_trigonometric.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/quaternion_trigonometric.inl",
    "content": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T angle(qua<T, Q> const& x)\n\t{\n\t\tif (abs(x.w) > cos_one_over_two<T>())\n\t\t{\n\t\t\tT const a = asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast<T>(2);\n\t\t\tif(x.w < static_cast<T>(0))\n\t\t\t\treturn pi<T>() * static_cast<T>(2) - a;\n\t\t\treturn a;\n\t\t}\n\n\t\treturn acos(x.w) * static_cast<T>(2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua<T, Q> const& x)\n\t{\n\t\tT const tmp1 = static_cast<T>(1) - x.w * x.w;\n\t\tif(tmp1 <= static_cast<T>(0))\n\t\t\treturn vec<3, T, Q>(0, 0, 1);\n\t\tT const tmp2 = static_cast<T>(1) / sqrt(tmp1);\n\t\treturn vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a(angle);\n\t\tT const s = glm::sin(a * static_cast<T>(0.5));\n\n\t\treturn qua<T, Q>(glm::cos(a * static_cast<T>(0.5)), v * s);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_common.hpp",
    "content": "/// @ref ext_scalar_common\n/// @file glm/ext/scalar_common.hpp\n///\n/// @defgroup ext_scalar_common GLM_EXT_scalar_common\n/// @ingroup ext\n///\n/// Exposes min and max functions for 3 to 4 scalar parameters.\n///\n/// Include <glm/ext/scalar_common.hpp> to use the features of this extension.\n///\n/// @see core_func_common\n/// @see ext_vector_common\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_common\n\t/// @{\n\n\t/// Returns the minimum component-wise values of 3 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(T a, T b, T c);\n\n\t/// Returns the minimum component-wise values of 4 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(T a, T b, T c, T d);\n\n\t/// Returns the maximum component-wise values of 3 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(T a, T b, T c);\n\n\t/// Returns the maximum component-wise values of 4 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(T a, T b, T c, T d);\n\n\t/// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b);\n\n\t/// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b, T c);\n\n\t/// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b, T c, T d);\n\n\t/// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b);\n\n\t/// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b, T C);\n\n\t/// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b, T C, T D);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal);\n\n\t/// Simulate GL_CLAMP OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType clamp(genType const& Texcoord);\n\n\t/// Simulate GL_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType repeat(genType const& Texcoord);\n\n\t/// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord);\n\n\t/// Simulate GL_MIRROR_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam genType floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL int iround(genType const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam genType floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL uint uround(genType const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_common.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_common.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(T a, T b, T c)\n\t{\n\t\treturn glm::min(glm::min(a, b), c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(T a, T b, T c, T d)\n\t{\n\t\treturn glm::min(glm::min(a, b), glm::min(c, d));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(T a, T b, T c)\n\t{\n\t\treturn glm::max(glm::max(a, b), c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(T a, T b, T c, T d)\n\t{\n\t\treturn glm::max(glm::max(a, b), glm::max(c, d));\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fmin;\n#\telse\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER T fmin(T a, T b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\t\tif (isnan(a))\n\t\t\t\treturn b;\n\t\t\treturn min(a, b);\n\t\t}\n#\tendif\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmin(T a, T b, T c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmin(b, c);\n\t\tif (isnan(b))\n\t\t\treturn fmin(a, c);\n\t\tif (isnan(c))\n\t\t\treturn min(a, b);\n\t\treturn min(a, b, c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmin(b, c, d);\n\t\tif (isnan(b))\n\t\t\treturn min(a, fmin(c, d));\n\t\tif (isnan(c))\n\t\t\treturn fmin(min(a, b), d);\n\t\tif (isnan(d))\n\t\t\treturn min(a, b, c);\n\t\treturn min(a, b, c, d);\n\t}\n\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fmax;\n#\telse\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER T fmax(T a, T b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\t\tif (isnan(a))\n\t\t\t\treturn b;\n\t\t\treturn max(a, b);\n\t\t}\n#\tendif\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmax(T a, T b, T c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmax(b, c);\n\t\tif (isnan(b))\n\t\t\treturn fmax(a, c);\n\t\tif (isnan(c))\n\t\t\treturn max(a, b);\n\t\treturn max(a, b, c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmax(b, c, d);\n\t\tif (isnan(b))\n\t\t\treturn max(a, fmax(c, d));\n\t\tif (isnan(c))\n\t\t\treturn fmax(max(a, b), d);\n\t\tif (isnan(d))\n\t\t\treturn max(a, b, c);\n\t\treturn max(a, b, c, d);\n\t}\n\n\t// fclamp\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fclamp' only accept floating-point or integer inputs\");\n\t\treturn fmin(fmax(x, minVal), maxVal);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord)\n\t{\n\t\treturn glm::clamp(Texcoord, static_cast<genType>(0), static_cast<genType>(1));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord)\n\t{\n\t\treturn glm::fract(Texcoord);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord)\n\t{\n\t\treturn glm::fract(glm::abs(Texcoord));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord)\n\t{\n\t\tgenType const Abs = glm::abs(Texcoord);\n\t\tgenType const Clamp = glm::mod(glm::floor(Abs), static_cast<genType>(2));\n\t\tgenType const Floor = glm::floor(Abs);\n\t\tgenType const Rest = Abs - Floor;\n\t\tgenType const Mirror = Clamp + Rest;\n\t\treturn mix(Rest, static_cast<genType>(1) - Rest, Mirror >= static_cast<genType>(1));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER int iround(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'iround' only accept floating-point inputs\");\n\t\tassert(static_cast<genType>(0.0) <= x);\n\n\t\treturn static_cast<int>(x + static_cast<genType>(0.5));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER uint uround(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'uround' only accept floating-point inputs\");\n\t\tassert(static_cast<genType>(0.0) <= x);\n\n\t\treturn static_cast<uint>(x + static_cast<genType>(0.5));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_constants.hpp",
    "content": "/// @ref ext_scalar_constants\n/// @file glm/ext/scalar_constants.hpp\n///\n/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants\n/// @ingroup ext\n///\n/// Provides a list of constants and precomputed useful values.\n///\n/// Include <glm/ext/scalar_constants.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_constants extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_constants\n\t/// @{\n\n\t/// Return the epsilon constant for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType epsilon();\n\n\t/// Return the pi constant for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType pi();\n\n\t/// Return the value of cos(1 / 2) for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two();\n\n\t/// @}\n} //namespace glm\n\n#include \"scalar_constants.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_constants.inl",
    "content": "#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon()\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'epsilon' only accepts floating-point inputs\");\n\t\treturn std::numeric_limits<genType>::epsilon();\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi()\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'pi' only accepts floating-point inputs\");\n\t\treturn static_cast<genType>(3.14159265358979323846264338327950288);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two()\n\t{\n\t\treturn genType(0.877582561890372716130286068203503191);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_int_sized.hpp",
    "content": "/// @ref ext_scalar_int_sized\n/// @file glm/ext/scalar_int_sized.hpp\n///\n/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer scalar types.\n///\n/// Include <glm/ext/scalar_int_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_int_sized extension included\")\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::int8_t\t\t\tint8;\n\t\ttypedef std::int16_t\t\tint16;\n\t\ttypedef std::int32_t\t\tint32;\n#\telse\n\t\ttypedef signed char\t\t\tint8;\n\t\ttypedef signed short\t\tint16;\n\t\ttypedef signed int\t\t\tint32;\n#endif//\n\n\ttemplate<>\n\tstruct is_int<int8>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<int16>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<int64>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\n\t/// @addtogroup ext_scalar_int_sized\n\t/// @{\n\n\t/// 8 bit signed integer type.\n\ttypedef detail::int8\t\tint8;\n\n\t/// 16 bit signed integer type.\n\ttypedef detail::int16\t\tint16;\n\n\t/// 32 bit signed integer type.\n\ttypedef detail::int32\t\tint32;\n\n\t/// 64 bit signed integer type.\n\ttypedef detail::int64\t\tint64;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_integer.hpp",
    "content": "/// @ref ext_scalar_integer\n/// @file glm/ext/scalar_integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_integer.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../detail/type_float.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_integer\n\t/// @{\n\n\t/// Return true if the value is a power of two number.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL bool isPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam genIUType Integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genIUType Integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple);\n\n\t/// Returns the bit number of the Nth significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value bitcount is less than the Nth significant bit, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount);\n\n\t/// @}\n} //namespace glm\n\n#include \"scalar_integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_integer.inl",
    "content": "#include \"../integer.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool compute = false>\n\tstruct compute_ceilShift\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_ceilShift<L, T, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Shift)\n\t\t{\n\t\t\treturn v | (v >> Shift);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isSigned = true>\n\tstruct compute_ceilPowerOfTwo\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, \"'ceilPowerOfTwo' only accept integer scalar or vector inputs\");\n\n\t\t\tvec<L, T, Q> const Sign(sign(x));\n\n\t\t\tvec<L, T, Q> v(abs(x));\n\n\t\t\tv = v - static_cast<T>(1);\n\t\t\tv = v | (v >> static_cast<T>(1));\n\t\t\tv = v | (v >> static_cast<T>(2));\n\t\t\tv = v | (v >> static_cast<T>(4));\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 2>::call(v, 8);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 4>::call(v, 16);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 8>::call(v, 32);\n\t\t\treturn (v + static_cast<T>(1)) * Sign;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_ceilPowerOfTwo<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, \"'ceilPowerOfTwo' only accept integer scalar or vector inputs\");\n\n\t\t\tvec<L, T, Q> v(x);\n\n\t\t\tv = v - static_cast<T>(1);\n\t\t\tv = v | (v >> static_cast<T>(1));\n\t\t\tv = v | (v >> static_cast<T>(2));\n\t\t\tv = v | (v >> static_cast<T>(4));\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 2>::call(v, 8);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 4>::call(v, 16);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 8>::call(v, 32);\n\t\t\treturn v + static_cast<T>(1);\n\t\t}\n\t};\n\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_ceilMultiple{};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source > genType(0))\n\t\t\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t\t\telse\n\t\t\t\treturn Source + std::fmod(-Source, Multiple);\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tgenType Tmp = Source - genType(1);\n\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tassert(Multiple > genType(0));\n\t\t\tif(Source > genType(0))\n\t\t\t{\n\t\t\t\tgenType Tmp = Source - genType(1);\n\t\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn Source + (-Source % Multiple);\n\t\t}\n\t};\n\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_floorMultiple{};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - std::fmod(Source, Multiple);\n\t\t\telse\n\t\t\t\treturn Source - std::fmod(Source, Multiple) - Multiple;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'isPowerOfTwo' only accept integer inputs\");\n\n\t\tgenIUType const Result = glm::abs(Value);\n\t\treturn !(Result & (Result - 1));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'nextPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits<genIUType>::is_signed>::call(vec<1, genIUType, defaultp>(value)).x;\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'prevPowerOfTwo' only accept integer inputs\");\n\n\t\treturn isPowerOfTwo(value) ? value : static_cast<genIUType>(static_cast<genIUType>(1) << static_cast<genIUType>(findMSB(value)));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x;\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilMultiple<std::numeric_limits<genIUType>::is_iec559, std::numeric_limits<genIUType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::compute_floorMultiple<std::numeric_limits<genIUType>::is_iec559, std::numeric_limits<genIUType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findNSB' only accept integer inputs\");\n\n\t\tif(bitCount(x) < significantBitCount)\n\t\t\treturn -1;\n\n\t\tgenIUType const One = static_cast<genIUType>(1);\n\t\tint bitPos = 0;\n\n\t\tgenIUType key = x;\n\t\tint nBitCount = significantBitCount;\n\t\tint Step = sizeof(x) * 8 / 2;\n\t\twhile (key > One)\n\t\t{\n\t\t\tgenIUType Mask = static_cast<genIUType>((One << Step) - One);\n\t\t\tgenIUType currentKey = key & Mask;\n\t\t\tint currentBitCount = bitCount(currentKey);\n\t\t\tif (nBitCount > currentBitCount)\n\t\t\t{\n\t\t\t\tnBitCount -= currentBitCount;\n\t\t\t\tbitPos += Step;\n\t\t\t\tkey >>= static_cast<genIUType>(Step);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tkey = key & Mask;\n\t\t\t}\n\n\t\t\tStep >>= 1;\n\t\t}\n\n\t\treturn static_cast<int>(bitPos);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_packing.hpp",
    "content": "/// @ref ext_scalar_packing\n/// @file glm/ext/scalar_packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert scalar values to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_packing\n\t/// @{\n\n\n\t/// @}\n}// namespace glm\n\n#include \"scalar_packing.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_packing.inl",
    "content": ""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_reciprocal.hpp",
    "content": "/// @ref ext_scalar_reciprocal\n/// @file glm/ext/scalar_reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_reciprocal GLM_EXT_scalar_reciprocal\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_reciprocal extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_reciprocal\n\t/// @{\n\n\t/// Secant function.\n\t/// hypotenuse / adjacent or 1 / cos(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sec(genType angle);\n\n\t/// Cosecant function.\n\t/// hypotenuse / opposite or 1 / sin(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csc(genType angle);\n\n\t/// Cotangent function.\n\t/// adjacent / opposite or 1 / tan(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cot(genType angle);\n\n\t/// Inverse secant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asec(genType x);\n\n\t/// Inverse cosecant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsc(genType x);\n\n\t/// Inverse cotangent function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acot(genType x);\n\n\t/// Secant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sech(genType angle);\n\n\t/// Cosecant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csch(genType angle);\n\n\t/// Cotangent hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType coth(genType angle);\n\n\t/// Inverse secant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asech(genType x);\n\n\t/// Inverse cosecant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsch(genType x);\n\n\t/// Inverse cotangent hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acoth(genType x);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_reciprocal.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_reciprocal.inl",
    "content": "/// @ref ext_scalar_reciprocal\n\n#include \"../trigonometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// sec\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType sec(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'sec' only accept floating-point values\");\n\t\treturn genType(1) / glm::cos(angle);\n\t}\n\n\t// csc\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType csc(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'csc' only accept floating-point values\");\n\t\treturn genType(1) / glm::sin(angle);\n\t}\n\n\t// cot\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType cot(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'cot' only accept floating-point values\");\n\n\t\tgenType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);\n\t\treturn glm::tan(pi_over_2 - angle);\n\t}\n\n\t// asec\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType asec(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asec' only accept floating-point values\");\n\t\treturn acos(genType(1) / x);\n\t}\n\n\t// acsc\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acsc(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acsc' only accept floating-point values\");\n\t\treturn asin(genType(1) / x);\n\t}\n\n\t// acot\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acot(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acot' only accept floating-point values\");\n\n\t\tgenType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);\n\t\treturn pi_over_2 - atan(x);\n\t}\n\n\t// sech\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType sech(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'sech' only accept floating-point values\");\n\t\treturn genType(1) / glm::cosh(angle);\n\t}\n\n\t// csch\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType csch(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'csch' only accept floating-point values\");\n\t\treturn genType(1) / glm::sinh(angle);\n\t}\n\n\t// coth\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType coth(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'coth' only accept floating-point values\");\n\t\treturn glm::cosh(angle) / glm::sinh(angle);\n\t}\n\n\t// asech\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType asech(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asech' only accept floating-point values\");\n\t\treturn acosh(genType(1) / x);\n\t}\n\n\t// acsch\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acsch(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acsch' only accept floating-point values\");\n\t\treturn asinh(genType(1) / x);\n\t}\n\n\t// acoth\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acoth(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acoth' only accept floating-point values\");\n\t\treturn atanh(genType(1) / x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_relational.hpp",
    "content": "/// @ref ext_scalar_relational\n/// @file glm/ext/scalar_relational.hpp\n///\n/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for scalar types that take a user defined epsilon values.\n///\n/// Include <glm/ext/scalar_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_vector_relational\n/// @see ext_matrix_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison between two scalars in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @param x First operand.\n\t/// @param y Second operand.\n\t/// @param ULPs Maximum difference in ULPs between the two operators to consider them equal.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two scalars in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @param x First operand.\n\t/// @param y Second operand.\n\t/// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_relational.inl",
    "content": "#include \"../common.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/type_float.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon)\n\t{\n\t\treturn abs(x - y) <= epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon)\n\t{\n\t\treturn abs(x - y) > epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs)\n\t{\n\t\tdetail::float_t<genType> const a(x);\n\t\tdetail::float_t<genType> const b(y);\n\n\t\t// Different signs means they do not match.\n\t\tif(a.negative() != b.negative())\n\t\t\treturn false;\n\n\t\t// Find the difference in ULPs.\n\t\ttypename detail::float_t<genType>::int_type const DiffULPs = abs(a.i - b.i);\n\t\treturn DiffULPs <= MaxULPs;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs)\n\t{\n\t\treturn !equal(x, y, ULPs);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_uint_sized.hpp",
    "content": "/// @ref ext_scalar_uint_sized\n/// @file glm/ext/scalar_uint_sized.hpp\n///\n/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer scalar types.\n///\n/// Include <glm/ext/scalar_uint_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_uint_sized extension included\")\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::uint8_t\t\tuint8;\n\t\ttypedef std::uint16_t\t\tuint16;\n\t\ttypedef std::uint32_t\t\tuint32;\n#\telse\n\t\ttypedef unsigned char\t\tuint8;\n\t\ttypedef unsigned short\t\tuint16;\n\t\ttypedef unsigned int\t\tuint32;\n#endif\n\n\ttemplate<>\n\tstruct is_int<uint8>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<uint16>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<uint64>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\n\t/// @addtogroup ext_scalar_uint_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer type.\n\ttypedef detail::uint8\t\tuint8;\n\n\t/// 16 bit unsigned integer type.\n\ttypedef detail::uint16\t\tuint16;\n\n\t/// 32 bit unsigned integer type.\n\ttypedef detail::uint32\t\tuint32;\n\n\t/// 64 bit unsigned integer type.\n\ttypedef detail::uint64\t\tuint64;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_ulp.hpp",
    "content": "/// @ref ext_scalar_ulp\n/// @file glm/ext/scalar_ulp.hpp\n///\n/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp\n/// @ingroup ext\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n///\n/// Include <glm/ext/scalar_ulp.hpp> to use the features of this extension.\n///\n/// @see ext_vector_ulp\n/// @see ext_scalar_relational\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../common.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType nextFloat(genType x);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prevFloat(genType x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType nextFloat(genType x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prevFloat(genType x, int ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @see ext_scalar_ulp\n\tGLM_FUNC_DECL int floatDistance(float x, float y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @see ext_scalar_ulp\n\tGLM_FUNC_DECL int64 floatDistance(double x, double y);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_ulp.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/scalar_ulp.inl",
    "content": "/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n///\n/// Developed at SunPro, a Sun Microsystems, Inc. business.\n/// Permission to use, copy, modify, and distribute this\n/// software is freely granted, provided that this notice\n/// is preserved.\n\n#include \"../detail/type_float.hpp\"\n#include \"../ext/scalar_constants.hpp\"\n#include <cmath>\n#include <cfloat>\n\n#if(GLM_COMPILER & GLM_COMPILER_VC)\n#\tpragma warning(push)\n#\tpragma warning(disable : 4127)\n#endif\n\ntypedef union\n{\n\tfloat value;\n\t/* FIXME: Assumes 32 bit int.  */\n\tunsigned int word;\n} ieee_float_shape_type;\n\ntypedef union\n{\n\tdouble value;\n\tstruct\n\t{\n\t\tint lsw;\n\t\tint msw;\n\t} parts;\n} ieee_double_shape_type;\n\n#define GLM_EXTRACT_WORDS(ix0,ix1,d)\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_double_shape_type ew_u;\t\t\\\n\t\tew_u.value = (d);\t\t\t\t\t\\\n\t\t(ix0) = ew_u.parts.msw;\t\t\t\t\\\n\t\t(ix1) = ew_u.parts.lsw;\t\t\t\t\\\n\t} while (0)\n\n#define GLM_GET_FLOAT_WORD(i,d)\t\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_float_shape_type gf_u;\t\t\t\\\n\t\tgf_u.value = (d);\t\t\t\t\t\\\n\t\t(i) = gf_u.word;\t\t\t\t\t\\\n\t} while (0)\n\n#define GLM_SET_FLOAT_WORD(d,i)\t\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_float_shape_type sf_u;\t\t\t\\\n\t\tsf_u.word = (i);\t\t\t\t\t\\\n\t\t(d) = sf_u.value;\t\t\t\t\t\\\n\t} while (0)\n\n#define GLM_INSERT_WORDS(d,ix0,ix1)\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_double_shape_type iw_u;\t\t\\\n\t\tiw_u.parts.msw = (ix0);\t\t\t\t\\\n\t\tiw_u.parts.lsw = (ix1);\t\t\t\t\\\n\t\t(d) = iw_u.value;\t\t\t\t\t\\\n\t} while (0)\n\nnamespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER float nextafterf(float x, float y)\n\t{\n\t\tvolatile float t;\n\t\tint hx, hy, ix, iy;\n\n\t\tGLM_GET_FLOAT_WORD(hx, x);\n\t\tGLM_GET_FLOAT_WORD(hy, y);\n\t\tix = hx & 0x7fffffff;\t\t// |x|\n\t\tiy = hy & 0x7fffffff;\t\t// |y|\n\n\t\tif((ix > 0x7f800000) ||\t// x is nan\n\t\t\t(iy > 0x7f800000))\t// y is nan\n\t\t\treturn x + y;\n\t\tif(abs(y - x) <= epsilon<float>())\n\t\t\treturn y;\t\t// x=y, return y\n\t\tif(ix == 0)\n\t\t{\t\t\t\t// x == 0\n\t\t\tGLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) <= epsilon<float>())\n\t\t\t\treturn t;\n\t\t\telse\n\t\t\t\treturn x;\t// raise underflow flag\n\t\t}\n\t\tif(hx >= 0)\n\t\t{\t\t\t\t\t\t// x > 0\n\t\t\tif(hx > hy)\t\t\t// x > y, x -= ulp\n\t\t\t\thx -= 1;\n\t\t\telse\t\t\t\t// x < y, x += ulp\n\t\t\t\thx += 1;\n\t\t}\n\t\telse\n\t\t{\t\t\t\t\t\t// x < 0\n\t\t\tif(hy >= 0 || hx > hy)\t// x < y, x -= ulp\n\t\t\t\thx -= 1;\n\t\t\telse\t\t\t\t// x > y, x += ulp\n\t\t\t\thx += 1;\n\t\t}\n\t\thy = hx & 0x7f800000;\n\t\tif(hy >= 0x7f800000)\n\t\t\treturn x + x;  \t\t// overflow\n\t\tif(hy < 0x00800000)\t\t// underflow\n\t\t{\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) > epsilon<float>())\n\t\t\t{\t\t\t\t\t// raise underflow flag\n\t\t\t\tGLM_SET_FLOAT_WORD(y, hx);\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\t\tGLM_SET_FLOAT_WORD(x, hx);\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER double nextafter(double x, double y)\n\t{\n\t\tvolatile double t;\n\t\tint hx, hy, ix, iy;\n\t\tunsigned int lx, ly;\n\n\t\tGLM_EXTRACT_WORDS(hx, lx, x);\n\t\tGLM_EXTRACT_WORDS(hy, ly, y);\n\t\tix = hx & 0x7fffffff;\t\t\t\t\t\t\t\t// |x|\n\t\tiy = hy & 0x7fffffff;\t\t\t\t\t\t\t\t// |y|\n\n\t\tif(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) ||\t// x is nan\n\t\t\t((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0))\t// y is nan\n\t\t\treturn x + y;\n\t\tif(abs(y - x) <= epsilon<double>())\n\t\t\treturn y;\t\t\t\t\t\t\t\t\t// x=y, return y\n\t\tif((ix | lx) == 0)\n\t\t{\t\t\t\t\t\t\t\t\t\t\t\t\t// x == 0\n\t\t\tGLM_INSERT_WORDS(x, hy & 0x80000000, 1);\t\t// return +-minsubnormal\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) <= epsilon<double>())\n\t\t\t\treturn t;\n\t\t\telse\n\t\t\t\treturn x;   // raise underflow flag\n\t\t}\n\t\tif(hx >= 0) {                             // x > 0\n\t\t\tif(hx > hy || ((hx == hy) && (lx > ly))) {    // x > y, x -= ulp\n\t\t\t\tif(lx == 0) hx -= 1;\n\t\t\t\tlx -= 1;\n\t\t\t}\n\t\t\telse {                            // x < y, x += ulp\n\t\t\t\tlx += 1;\n\t\t\t\tif(lx == 0) hx += 1;\n\t\t\t}\n\t\t}\n\t\telse {                                // x < 0\n\t\t\tif(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp\n\t\t\t\tif(lx == 0) hx -= 1;\n\t\t\t\tlx -= 1;\n\t\t\t}\n\t\t\telse {                            // x > y, x += ulp\n\t\t\t\tlx += 1;\n\t\t\t\tif(lx == 0) hx += 1;\n\t\t\t}\n\t\t}\n\t\thy = hx & 0x7ff00000;\n\t\tif(hy >= 0x7ff00000)\n\t\t\treturn x + x;\t\t\t// overflow\n\t\tif(hy < 0x00100000)\n\t\t{\t\t\t\t\t\t// underflow\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) > epsilon<double>())\n\t\t\t{\t\t\t\t\t// raise underflow flag\n\t\t\t\tGLM_INSERT_WORDS(y, hx, lx);\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\t\tGLM_INSERT_WORDS(x, hx, lx);\n\t\treturn x;\n\t}\n}//namespace detail\n}//namespace glm\n\n#if(GLM_COMPILER & GLM_COMPILER_VC)\n#\tpragma warning(pop)\n#endif\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER float nextFloat(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<float>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafterf(x, FLT_MAX);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafterf(x, FLT_MAX);\n#\t\telse\n\t\t\treturn nextafterf(x, FLT_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER double nextFloat(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafter(x, DBL_MAX);\n#\t\telse\n\t\t\treturn nextafter(x, DBL_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'next_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor(int i = 0; i < ULPs; ++i)\n\t\t\ttemp = nextFloat(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER float prevFloat(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<float>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafterf(x, FLT_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafterf(x, FLT_MIN);\n#\t\telse\n\t\t\treturn nextafterf(x, FLT_MIN);\n#\t\tendif\n\t}\n\n\tGLM_FUNC_QUALIFIER double prevFloat(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<double>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn _nextafter(x, DBL_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafter(x, DBL_MIN);\n#\t\telse\n\t\t\treturn nextafter(x, DBL_MIN);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'prev_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor(int i = 0; i < ULPs; ++i)\n\t\t\ttemp = prevFloat(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER int floatDistance(float x, float y)\n\t{\n\t\tdetail::float_t<float> const a(x);\n\t\tdetail::float_t<float> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 floatDistance(double x, double y)\n\t{\n\t\tdetail::float_t<double> const a(x);\n\t\tdetail::float_t<double> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool1.hpp",
    "content": "/// @ref ext_vector_bool1\n/// @file glm/ext/vector_bool1.hpp\n///\n/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1\n/// @ingroup ext\n///\n/// Exposes bvec1 vector type.\n///\n/// Include <glm/ext/vector_bool1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_bool1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_bool1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_bool1\n\t/// @{\n\n\t/// 1 components vector of boolean.\n\ttypedef vec<1, bool, defaultp>\t\tbvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool1_precision.hpp",
    "content": "/// @ref ext_vector_bool1_precision\n/// @file glm/ext/vector_bool1_precision.hpp\n///\n/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision\n/// @ingroup ext\n///\n/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.\n///\n/// Include <glm/ext/vector_bool1_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_bool1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_bool1_precision\n\t/// @{\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, highp>\t\t\thighp_bvec1;\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, mediump>\t\tmediump_bvec1;\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, lowp>\t\t\tlowp_bvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, bool, defaultp>\t\tbvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, highp>\t\thighp_bvec2;\n\n\t/// 2 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, mediump>\tmediump_bvec2;\n\n\t/// 2 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, lowp>\t\tlowp_bvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, bool, defaultp>\t\tbvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, highp>\t\thighp_bvec3;\n\n\t/// 3 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, mediump>\tmediump_bvec3;\n\n\t/// 3 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, lowp>\t\tlowp_bvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, bool, defaultp>\t\tbvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_bool4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool4_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, highp>\t\thighp_bvec4;\n\n\t/// 4 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, mediump>\tmediump_bvec4;\n\n\t/// 4 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, lowp>\t\tlowp_bvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_common.hpp",
    "content": "/// @ref ext_vector_common\n/// @file glm/ext/vector_common.hpp\n///\n/// @defgroup ext_vector_common GLM_EXT_vector_common\n/// @ingroup ext\n///\n/// Exposes min and max functions for 3 to 4 vector parameters.\n///\n/// Include <glm/ext/vector_common.hpp> to use the features of this extension.\n///\n/// @see core_common\n/// @see ext_scalar_common\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_common.hpp\"\n#include \"../common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_common\n\t/// @{\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max( vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);\n\n\t/// Simulate GL_CLAMP OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_MIRROR_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam T floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> iround(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam T floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> uround(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_common.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_common.inl",
    "content": "#include \"../detail/_vectorize.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmin, a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmin, a, b);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn fmin(fmin(a, b), c);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn fmin(fmin(a, b), fmin(c, d));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmax, a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmax, a, b);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn fmax(fmax(a, b), c);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn fmax(fmax(a, b), fmax(c, d));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal)\n\t{\n\t\treturn fmin(fmax(x, vec<L, T, Q>(minVal)), vec<L, T, Q>(maxVal));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)\n\t{\n\t\treturn fmin(fmax(x, minVal), maxVal);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::clamp(Texcoord, vec<L, T, Q>(0), vec<L, T, Q>(1));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::fract(Texcoord);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::fract(glm::abs(Texcoord));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord)\n\t{\n\t\tvec<L, T, Q> const Abs = glm::abs(Texcoord);\n\t\tvec<L, T, Q> const Clamp = glm::mod(glm::floor(Abs), vec<L, T, Q>(2));\n\t\tvec<L, T, Q> const Floor = glm::floor(Abs);\n\t\tvec<L, T, Q> const Rest = Abs - Floor;\n\t\tvec<L, T, Q> const Mirror = Clamp + Rest;\n\t\treturn mix(Rest, vec<L, T, Q>(1) - Rest, glm::greaterThanEqual(Mirror, vec<L, T, Q>(1)));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> iround(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'iround' only accept floating-point inputs\");\n\t\tassert(all(lessThanEqual(vec<L, T, Q>(0), x)));\n\n\t\treturn vec<L, int, Q>(x + static_cast<T>(0.5));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> uround(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'uround' only accept floating-point inputs\");\n\t\tassert(all(lessThanEqual(vec<L, T, Q>(0), x)));\n\n\t\treturn vec<L, uint, Q>(x + static_cast<T>(0.5));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double1.hpp",
    "content": "/// @ref ext_vector_double1\n/// @file glm/ext/vector_double1.hpp\n///\n/// @defgroup ext_vector_double1 GLM_EXT_vector_double1\n/// @ingroup ext\n///\n/// Exposes double-precision floating point vector type with one component.\n///\n/// Include <glm/ext/vector_double1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_double1_precision extension.\n/// @see ext_vector_float1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_double1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_double1\n\t/// @{\n\n\t/// 1 components vector of double-precision floating-point numbers.\n\ttypedef vec<1, double, defaultp>\t\tdvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double1_precision.hpp",
    "content": "/// @ref ext_vector_double1_precision\n/// @file glm/ext/vector_double1_precision.hpp\n///\n/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision\n/// @ingroup ext\n///\n/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.\n///\n/// Include <glm/ext/vector_double1_precision.hpp> to use the features of this extension.\n///\n/// @see ext_vector_double1\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_double1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_double1_precision\n\t/// @{\n\n\t/// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, highp>\t\thighp_dvec1;\n\n\t/// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, mediump>\t\tmediump_dvec1;\n\n\t/// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, lowp>\t\tlowp_dvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, double, defaultp>\t\tdvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, highp>\t\thighp_dvec2;\n\n\t/// 2 components vector of medium double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, mediump>\t\tmediump_dvec2;\n\n\t/// 2 components vector of low double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, lowp>\t\tlowp_dvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, double, defaultp>\t\tdvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, highp>\t\thighp_dvec3;\n\n\t/// 3 components vector of medium double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, mediump>\t\tmediump_dvec3;\n\n\t/// 3 components vector of low double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, lowp>\t\tlowp_dvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, double, defaultp>\t\tdvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_double4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double4_precision.hpp\n\n#pragma once\n#include \"../detail/setup.hpp\"\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, highp>\t\thighp_dvec4;\n\n\t/// 4 components vector of medium double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, mediump>\t\tmediump_dvec4;\n\n\t/// 4 components vector of low double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, lowp>\t\tlowp_dvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float1.hpp",
    "content": "/// @ref ext_vector_float1\n/// @file glm/ext/vector_float1.hpp\n///\n/// @defgroup ext_vector_float1 GLM_EXT_vector_float1\n/// @ingroup ext\n///\n/// Exposes single-precision floating point vector type with one component.\n///\n/// Include <glm/ext/vector_float1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_float1_precision extension.\n/// @see ext_vector_double1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_float1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_float1\n\t/// @{\n\n\t/// 1 components vector of single-precision floating-point numbers.\n\ttypedef vec<1, float, defaultp>\t\tvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float1_precision.hpp",
    "content": "/// @ref ext_vector_float1_precision\n/// @file glm/ext/vector_float1_precision.hpp\n///\n/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision\n/// @ingroup ext\n///\n/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.\n///\n/// Include <glm/ext/vector_float1_precision.hpp> to use the features of this extension.\n///\n/// @see ext_vector_float1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_float1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_float1_precision\n\t/// @{\n\n\t/// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, highp>\t\thighp_vec1;\n\n\t/// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, mediump>\t\tmediump_vec1;\n\n\t/// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, lowp>\t\t\tlowp_vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, float, defaultp>\tvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, highp>\t\thighp_vec2;\n\n\t/// 2 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, mediump>\t\tmediump_vec2;\n\n\t/// 2 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, lowp>\t\t\tlowp_vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, float, defaultp>\t\tvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, highp>\t\thighp_vec3;\n\n\t/// 3 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, mediump>\t\tmediump_vec3;\n\n\t/// 3 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, lowp>\t\t\tlowp_vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, float, defaultp>\t\tvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_float4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float4_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, highp>\t\thighp_vec4;\n\n\t/// 4 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, mediump>\t\tmediump_vec4;\n\n\t/// 4 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, lowp>\t\t\tlowp_vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int1.hpp",
    "content": "/// @ref ext_vector_int1\n/// @file glm/ext/vector_int1.hpp\n///\n/// @defgroup ext_vector_int1 GLM_EXT_vector_int1\n/// @ingroup ext\n///\n/// Exposes ivec1 vector type.\n///\n/// Include <glm/ext/vector_int1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_uint1 extension.\n/// @see ext_vector_int1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int1\n\t/// @{\n\n\t/// 1 component vector of signed integer numbers.\n\ttypedef vec<1, int, defaultp>\t\t\tivec1;\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int1_sized.hpp",
    "content": "/// @ref ext_vector_int1_sized\n/// @file glm/ext/vector_int1_sized.hpp\n///\n/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector types.\n///\n/// Include <glm/ext/vector_int1_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint1_sized\n\n#pragma once\n\n#include \"../ext/vector_int1.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int1_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int1_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int8, defaultp>\ti8vec1;\n\n\t/// 16 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int16, defaultp>\ti16vec1;\n\n\t/// 32 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int32, defaultp>\ti32vec1;\n\n\t/// 64 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int64, defaultp>\ti64vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, int, defaultp>\t\tivec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int2_sized.hpp",
    "content": "/// @ref ext_vector_int2_sized\n/// @file glm/ext/vector_int2_sized.hpp\n///\n/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 2 components type.\n///\n/// Include <glm/ext/vector_int2_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint2_sized\n\n#pragma once\n\n#include \"../ext/vector_int2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int2_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int8, defaultp>\t\ti8vec2;\n\n\t/// 16 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int16, defaultp>\t\ti16vec2;\n\n\t/// 32 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int32, defaultp>\t\ti32vec2;\n\n\t/// 64 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int64, defaultp>\t\ti64vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, int, defaultp>\t\tivec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int3_sized.hpp",
    "content": "/// @ref ext_vector_int3_sized\n/// @file glm/ext/vector_int3_sized.hpp\n///\n/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 3 components type.\n///\n/// Include <glm/ext/vector_int3_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint3_sized\n\n#pragma once\n\n#include \"../ext/vector_int3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int3_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int8, defaultp>\t\ti8vec3;\n\n\t/// 16 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int16, defaultp>\t\ti16vec3;\n\n\t/// 32 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int32, defaultp>\t\ti32vec3;\n\n\t/// 64 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int64, defaultp>\t\ti64vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, int, defaultp>\t\tivec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_int4_sized.hpp",
    "content": "/// @ref ext_vector_int4_sized\n/// @file glm/ext/vector_int4_sized.hpp\n///\n/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 4 components type.\n///\n/// Include <glm/ext/vector_int4_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint4_sized\n\n#pragma once\n\n#include \"../ext/vector_int4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int4_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int8, defaultp>\t\ti8vec4;\n\n\t/// 16 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int16, defaultp>\t\ti16vec4;\n\n\t/// 32 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int32, defaultp>\t\ti32vec4;\n\n\t/// 64 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int64, defaultp>\t\ti64vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_integer.hpp",
    "content": "/// @ref ext_vector_integer\n/// @file glm/ext/vector_integer.hpp\n///\n/// @see core (dependence)\n/// @see ext_vector_integer (dependence)\n///\n/// @defgroup ext_vector_integer GLM_EXT_vector_integer\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_integer.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_integer\n\t/// @{\n\n\t/// Return true if the value is a power of two number.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Returns the bit number of the Nth significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value bitcount is less than the Nth significant bit, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findNSB(vec<L, T, Q> const& Source, vec<L, int, Q> SignificantBitCount);\n\n\t/// @}\n} //namespace glm\n\n#include \"vector_integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_integer.inl",
    "content": "#include \"scalar_integer.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isPowerOfTwo(vec<L, T, Q> const& Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isPowerOfTwo' only accept integer inputs\");\n\n\t\tvec<L, T, Q> const Result(abs(Value));\n\t\treturn equal(Result & (Result - vec<L, T, Q>(1)), vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilPowerOfTwo<L, T, Q, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(prevPowerOfTwo, v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isMultiple(vec<L, T, Q> const& Value, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn equal(Value % Multiple, vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isMultiple(vec<L, T, Q> const& Value, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn equal(Value % Multiple, vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextMultiple(vec<L, T, Q> const& Source, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(nextMultiple, Source, vec<L, T, Q>(Multiple));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(nextMultiple, Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevMultiple(vec<L, T, Q> const& Source, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(prevMultiple, Source, vec<L, T, Q>(Multiple));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(prevMultiple, Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findNSB(vec<L, T, Q> const& Source, vec<L, int, Q> SignificantBitCount)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findNSB' only accept integer inputs\");\n\n\t\treturn detail::functor2_vec_int<L, T, Q>::call(findNSB, Source, SignificantBitCount);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_packing.hpp",
    "content": "/// @ref ext_vector_packing\n/// @file glm/ext/vector_packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_vector_packing GLM_EXT_vector_packing\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert vectors to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_packing\n\t/// @{\n\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_packing.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_packing.inl",
    "content": ""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_reciprocal.hpp",
    "content": "/// @ref ext_vector_reciprocal\n/// @file glm/ext/vector_reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_vector_reciprocal GLM_EXT_vector_reciprocal\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_reciprocal extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_reciprocal\n\t/// @{\n\n\t/// Secant function.\n\t/// hypotenuse / adjacent or 1 / cos(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sec(genType angle);\n\n\t/// Cosecant function.\n\t/// hypotenuse / opposite or 1 / sin(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csc(genType angle);\n\n\t/// Cotangent function.\n\t/// adjacent / opposite or 1 / tan(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cot(genType angle);\n\n\t/// Inverse secant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asec(genType x);\n\n\t/// Inverse cosecant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsc(genType x);\n\n\t/// Inverse cotangent function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acot(genType x);\n\n\t/// Secant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sech(genType angle);\n\n\t/// Cosecant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csch(genType angle);\n\n\t/// Cotangent hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType coth(genType angle);\n\n\t/// Inverse secant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asech(genType x);\n\n\t/// Inverse cosecant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsch(genType x);\n\n\t/// Inverse cotangent hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acoth(genType x);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_reciprocal.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_reciprocal.inl",
    "content": "/// @ref ext_vector_reciprocal\n\n#include \"../trigonometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// sec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sec(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sec' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cos, x);\n\t}\n\n\t// csc\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> csc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'csc' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sin, x);\n\t}\n\n\t// cot\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cot(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cot' only accept floating-point inputs\");\n\t\tT const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tan, pi_over_2 - x);\n\t}\n\n\t// asec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asec(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'asec' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acos, static_cast<T>(1) / x);\n\t}\n\n\t// acsc\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acsc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acsc' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asin, static_cast<T>(1) / x);\n\t}\n\n\t// acot\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acot(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acot' only accept floating-point inputs\");\n\t\tT const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);\n\t\treturn pi_over_2 - detail::functor1<vec, L, T, T, Q>::call(atan, x);\n\t}\n\n\t// sech\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sech(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sech' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cosh, x);\n\t}\n\n\t// csch\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> csch(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'csch' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sinh, x);\n\t}\n\n\t// coth\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> coth(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'coth' only accept floating-point inputs\");\n\t\treturn glm::cosh(x) / glm::sinh(x);\n\t}\n\n\t// asech\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asech(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'asech' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acosh, static_cast<T>(1) / x);\n\t}\n\n\t// acsch\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acsch(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acsch' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asinh, static_cast<T>(1) / x);\n\t}\n\n\t// acoth\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acoth(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acoth' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atanh, static_cast<T>(1) / x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_relational.hpp",
    "content": "/// @ref ext_vector_relational\n/// @file glm/ext/vector_relational.hpp\n///\n/// @see core (dependence)\n/// @see ext_scalar_integer (dependence)\n///\n/// @defgroup ext_vector_relational GLM_EXT_vector_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for vector types that take a user defined epsilon values.\n///\n/// Include <glm/ext/vector_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_scalar_relational\n/// @see ext_matrix_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_relational.inl",
    "content": "#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/type_float.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon)\n\t{\n\t\treturn equal(x, y, vec<L, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon)\n\t{\n\t\treturn lessThanEqual(abs(x - y), Epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon)\n\t{\n\t\treturn notEqual(x, y, vec<L, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon)\n\t{\n\t\treturn greaterThan(abs(x - y), Epsilon);\n\t}\n\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs)\n\t{\n\t\treturn equal(x, y, vec<L, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs)\n\t{\n\t\tvec<L, bool, Q> Result(false);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t{\n\t\t\tdetail::float_t<T> const a(x[i]);\n\t\t\tdetail::float_t<T> const b(y[i]);\n\n\t\t\t// Different signs means they do not match.\n\t\t\tif(a.negative() != b.negative())\n\t\t\t{\n\t\t\t\t// Check for equality to make sure +0==-0\n\t\t\t\tResult[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Find the difference in ULPs.\n\t\t\t\ttypename detail::float_t<T>::int_type const DiffULPs = abs(a.i - b.i);\n\t\t\t\tResult[i] = DiffULPs <= MaxULPs[i];\n\t\t\t}\n\t\t}\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs)\n\t{\n\t\treturn notEqual(x, y, vec<L, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs)\n\t{\n\t\treturn not_(equal(x, y, MaxULPs));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint1.hpp",
    "content": "/// @ref ext_vector_uint1\n/// @file glm/ext/vector_uint1.hpp\n///\n/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1\n/// @ingroup ext\n///\n/// Exposes uvec1 vector type.\n///\n/// Include <glm/ext/vector_uvec1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_int1 extension.\n/// @see ext_vector_uint1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint1\n\t/// @{\n\n\t/// 1 component vector of unsigned integer numbers.\n\ttypedef vec<1, unsigned int, defaultp>\t\t\tuvec1;\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint1_sized.hpp",
    "content": "/// @ref ext_vector_uint1_sized\n/// @file glm/ext/vector_uint1_sized.hpp\n///\n/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector types.\n///\n/// Include <glm/ext/vector_uint1_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int1_sized\n\n#pragma once\n\n#include \"../ext/vector_uint1.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint1_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint1_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint8, defaultp>\t\tu8vec1;\n\n\t/// 16 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint16, defaultp>\tu16vec1;\n\n\t/// 32 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint32, defaultp>\tu32vec1;\n\n\t/// 64 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint64, defaultp>\tu64vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, unsigned int, defaultp>\t\tuvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint2_sized.hpp",
    "content": "/// @ref ext_vector_uint2_sized\n/// @file glm/ext/vector_uint2_sized.hpp\n///\n/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 2 components type.\n///\n/// Include <glm/ext/vector_uint2_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int2_sized\n\n#pragma once\n\n#include \"../ext/vector_uint2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint8, defaultp>\t\tu8vec2;\n\n\t/// 16 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint16, defaultp>\tu16vec2;\n\n\t/// 32 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint32, defaultp>\tu32vec2;\n\n\t/// 64 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint64, defaultp>\tu64vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, unsigned int, defaultp>\t\tuvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint3_sized.hpp",
    "content": "/// @ref ext_vector_uint3_sized\n/// @file glm/ext/vector_uint3_sized.hpp\n///\n/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 3 components type.\n///\n/// Include <glm/ext/vector_uint3_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int3_sized\n\n#pragma once\n\n#include \"../ext/vector_uint3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint8, defaultp>\t\tu8vec3;\n\n\t/// 16 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint16, defaultp>\tu16vec3;\n\n\t/// 32 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint32, defaultp>\tu32vec3;\n\n\t/// 64 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint64, defaultp>\tu64vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, unsigned int, defaultp>\t\tuvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_uint4_sized.hpp",
    "content": "/// @ref ext_vector_uint4_sized\n/// @file glm/ext/vector_uint4_sized.hpp\n///\n/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 4 components type.\n///\n/// Include <glm/ext/vector_uint4_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int4_sized\n\n#pragma once\n\n#include \"../ext/vector_uint4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint8, defaultp>\t\tu8vec4;\n\n\t/// 16 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint16, defaultp>\tu16vec4;\n\n\t/// 32 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint32, defaultp>\tu32vec4;\n\n\t/// 64 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint64, defaultp>\tu64vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_ulp.hpp",
    "content": "/// @ref ext_vector_ulp\n/// @file glm/ext/vector_ulp.hpp\n///\n/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp\n/// @ingroup ext\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n///\n/// Include <glm/ext/vector_ulp.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_ulp\n/// @see ext_scalar_relational\n/// @see ext_vector_relational\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_ulp.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> floatDistance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int64, Q> floatDistance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_ulp.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext/vector_ulp.inl",
    "content": "namespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> floatDistance(vec<L, float, Q> const& x, vec<L, float, Q> const& y)\n\t{\n\t\tvec<L, int, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = floatDistance(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int64, Q> floatDistance(vec<L, double, Q> const& x, vec<L, double, Q> const& y)\n\t{\n\t\tvec<L, int64, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = floatDistance(x[i], y[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/ext.hpp",
    "content": "/// @file glm/ext.hpp\n///\n/// @ref core (Dependence)\n\n#include \"detail/setup.hpp\"\n\n#pragma once\n\n#include \"glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)\n#\tdefine GLM_MESSAGE_EXT_INCLUDED_DISPLAYED\n#\tpragma message(\"GLM: All extensions included (not recommended)\")\n#endif//GLM_MESSAGES\n\n#include \"./ext/matrix_clip_space.hpp\"\n#include \"./ext/matrix_common.hpp\"\n\n#include \"./ext/matrix_double2x2.hpp\"\n#include \"./ext/matrix_double2x2_precision.hpp\"\n#include \"./ext/matrix_double2x3.hpp\"\n#include \"./ext/matrix_double2x3_precision.hpp\"\n#include \"./ext/matrix_double2x4.hpp\"\n#include \"./ext/matrix_double2x4_precision.hpp\"\n#include \"./ext/matrix_double3x2.hpp\"\n#include \"./ext/matrix_double3x2_precision.hpp\"\n#include \"./ext/matrix_double3x3.hpp\"\n#include \"./ext/matrix_double3x3_precision.hpp\"\n#include \"./ext/matrix_double3x4.hpp\"\n#include \"./ext/matrix_double3x4_precision.hpp\"\n#include \"./ext/matrix_double4x2.hpp\"\n#include \"./ext/matrix_double4x2_precision.hpp\"\n#include \"./ext/matrix_double4x3.hpp\"\n#include \"./ext/matrix_double4x3_precision.hpp\"\n#include \"./ext/matrix_double4x4.hpp\"\n#include \"./ext/matrix_double4x4_precision.hpp\"\n\n#include \"./ext/matrix_float2x2.hpp\"\n#include \"./ext/matrix_float2x2_precision.hpp\"\n#include \"./ext/matrix_float2x3.hpp\"\n#include \"./ext/matrix_float2x3_precision.hpp\"\n#include \"./ext/matrix_float2x4.hpp\"\n#include \"./ext/matrix_float2x4_precision.hpp\"\n#include \"./ext/matrix_float3x2.hpp\"\n#include \"./ext/matrix_float3x2_precision.hpp\"\n#include \"./ext/matrix_float3x3.hpp\"\n#include \"./ext/matrix_float3x3_precision.hpp\"\n#include \"./ext/matrix_float3x4.hpp\"\n#include \"./ext/matrix_float3x4_precision.hpp\"\n#include \"./ext/matrix_float4x2.hpp\"\n#include \"./ext/matrix_float4x2_precision.hpp\"\n#include \"./ext/matrix_float4x3.hpp\"\n#include \"./ext/matrix_float4x3_precision.hpp\"\n#include \"./ext/matrix_float4x4.hpp\"\n#include \"./ext/matrix_float4x4_precision.hpp\"\n\n#include \"./ext/matrix_int2x2.hpp\"\n#include \"./ext/matrix_int2x2_sized.hpp\"\n#include \"./ext/matrix_int2x3.hpp\"\n#include \"./ext/matrix_int2x3_sized.hpp\"\n#include \"./ext/matrix_int2x4.hpp\"\n#include \"./ext/matrix_int2x4_sized.hpp\"\n#include \"./ext/matrix_int3x2.hpp\"\n#include \"./ext/matrix_int3x2_sized.hpp\"\n#include \"./ext/matrix_int3x3.hpp\"\n#include \"./ext/matrix_int3x3_sized.hpp\"\n#include \"./ext/matrix_int3x4.hpp\"\n#include \"./ext/matrix_int3x4_sized.hpp\"\n#include \"./ext/matrix_int4x2.hpp\"\n#include \"./ext/matrix_int4x2_sized.hpp\"\n#include \"./ext/matrix_int4x3.hpp\"\n#include \"./ext/matrix_int4x3_sized.hpp\"\n#include \"./ext/matrix_int4x4.hpp\"\n#include \"./ext/matrix_int4x4_sized.hpp\"\n\n#include \"./ext/matrix_uint2x2.hpp\"\n#include \"./ext/matrix_uint2x2_sized.hpp\"\n#include \"./ext/matrix_uint2x3.hpp\"\n#include \"./ext/matrix_uint2x3_sized.hpp\"\n#include \"./ext/matrix_uint2x4.hpp\"\n#include \"./ext/matrix_uint2x4_sized.hpp\"\n#include \"./ext/matrix_uint3x2.hpp\"\n#include \"./ext/matrix_uint3x2_sized.hpp\"\n#include \"./ext/matrix_uint3x3.hpp\"\n#include \"./ext/matrix_uint3x3_sized.hpp\"\n#include \"./ext/matrix_uint3x4.hpp\"\n#include \"./ext/matrix_uint3x4_sized.hpp\"\n#include \"./ext/matrix_uint4x2.hpp\"\n#include \"./ext/matrix_uint4x2_sized.hpp\"\n#include \"./ext/matrix_uint4x3.hpp\"\n#include \"./ext/matrix_uint4x3_sized.hpp\"\n#include \"./ext/matrix_uint4x4.hpp\"\n#include \"./ext/matrix_uint4x4_sized.hpp\"\n\n#include \"./ext/matrix_projection.hpp\"\n#include \"./ext/matrix_relational.hpp\"\n#include \"./ext/matrix_transform.hpp\"\n\n#include \"./ext/quaternion_common.hpp\"\n#include \"./ext/quaternion_double.hpp\"\n#include \"./ext/quaternion_double_precision.hpp\"\n#include \"./ext/quaternion_float.hpp\"\n#include \"./ext/quaternion_float_precision.hpp\"\n#include \"./ext/quaternion_exponential.hpp\"\n#include \"./ext/quaternion_geometric.hpp\"\n#include \"./ext/quaternion_relational.hpp\"\n#include \"./ext/quaternion_transform.hpp\"\n#include \"./ext/quaternion_trigonometric.hpp\"\n\n#include \"./ext/scalar_common.hpp\"\n#include \"./ext/scalar_constants.hpp\"\n#include \"./ext/scalar_integer.hpp\"\n#include \"./ext/scalar_packing.hpp\"\n#include \"./ext/scalar_reciprocal.hpp\"\n#include \"./ext/scalar_relational.hpp\"\n#include \"./ext/scalar_ulp.hpp\"\n\n#include \"./ext/scalar_int_sized.hpp\"\n#include \"./ext/scalar_uint_sized.hpp\"\n\n#include \"./ext/vector_common.hpp\"\n#include \"./ext/vector_integer.hpp\"\n#include \"./ext/vector_packing.hpp\"\n#include \"./ext/vector_reciprocal.hpp\"\n#include \"./ext/vector_relational.hpp\"\n#include \"./ext/vector_ulp.hpp\"\n\n#include \"./ext/vector_bool1.hpp\"\n#include \"./ext/vector_bool1_precision.hpp\"\n#include \"./ext/vector_bool2.hpp\"\n#include \"./ext/vector_bool2_precision.hpp\"\n#include \"./ext/vector_bool3.hpp\"\n#include \"./ext/vector_bool3_precision.hpp\"\n#include \"./ext/vector_bool4.hpp\"\n#include \"./ext/vector_bool4_precision.hpp\"\n\n#include \"./ext/vector_double1.hpp\"\n#include \"./ext/vector_double1_precision.hpp\"\n#include \"./ext/vector_double2.hpp\"\n#include \"./ext/vector_double2_precision.hpp\"\n#include \"./ext/vector_double3.hpp\"\n#include \"./ext/vector_double3_precision.hpp\"\n#include \"./ext/vector_double4.hpp\"\n#include \"./ext/vector_double4_precision.hpp\"\n\n#include \"./ext/vector_float1.hpp\"\n#include \"./ext/vector_float1_precision.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float2_precision.hpp\"\n#include \"./ext/vector_float3.hpp\"\n#include \"./ext/vector_float3_precision.hpp\"\n#include \"./ext/vector_float4.hpp\"\n#include \"./ext/vector_float4_precision.hpp\"\n\n#include \"./ext/vector_int1.hpp\"\n#include \"./ext/vector_int1_sized.hpp\"\n#include \"./ext/vector_int2.hpp\"\n#include \"./ext/vector_int2_sized.hpp\"\n#include \"./ext/vector_int3.hpp\"\n#include \"./ext/vector_int3_sized.hpp\"\n#include \"./ext/vector_int4.hpp\"\n#include \"./ext/vector_int4_sized.hpp\"\n\n#include \"./ext/vector_uint1.hpp\"\n#include \"./ext/vector_uint1_sized.hpp\"\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_uint2_sized.hpp\"\n#include \"./ext/vector_uint3.hpp\"\n#include \"./ext/vector_uint3_sized.hpp\"\n#include \"./ext/vector_uint4.hpp\"\n#include \"./ext/vector_uint4_sized.hpp\"\n\n#include \"./gtc/bitfield.hpp\"\n#include \"./gtc/color_space.hpp\"\n#include \"./gtc/constants.hpp\"\n#include \"./gtc/epsilon.hpp\"\n#include \"./gtc/integer.hpp\"\n#include \"./gtc/matrix_access.hpp\"\n#include \"./gtc/matrix_integer.hpp\"\n#include \"./gtc/matrix_inverse.hpp\"\n#include \"./gtc/matrix_transform.hpp\"\n#include \"./gtc/noise.hpp\"\n#include \"./gtc/packing.hpp\"\n#include \"./gtc/quaternion.hpp\"\n#include \"./gtc/random.hpp\"\n#include \"./gtc/reciprocal.hpp\"\n#include \"./gtc/round.hpp\"\n#include \"./gtc/type_precision.hpp\"\n#include \"./gtc/type_ptr.hpp\"\n#include \"./gtc/ulp.hpp\"\n#include \"./gtc/vec1.hpp\"\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\tinclude \"./gtc/type_aligned.hpp\"\n#endif\n\n#ifdef GLM_ENABLE_EXPERIMENTAL\n#include \"./gtx/associated_min_max.hpp\"\n#include \"./gtx/bit.hpp\"\n#include \"./gtx/closest_point.hpp\"\n#include \"./gtx/color_encoding.hpp\"\n#include \"./gtx/color_space.hpp\"\n#include \"./gtx/color_space_YCoCg.hpp\"\n#include \"./gtx/compatibility.hpp\"\n#include \"./gtx/component_wise.hpp\"\n#include \"./gtx/dual_quaternion.hpp\"\n#include \"./gtx/euler_angles.hpp\"\n#include \"./gtx/extend.hpp\"\n#include \"./gtx/extended_min_max.hpp\"\n#include \"./gtx/fast_exponential.hpp\"\n#include \"./gtx/fast_square_root.hpp\"\n#include \"./gtx/fast_trigonometry.hpp\"\n#include \"./gtx/functions.hpp\"\n#include \"./gtx/gradient_paint.hpp\"\n#include \"./gtx/handed_coordinate_space.hpp\"\n#include \"./gtx/integer.hpp\"\n#include \"./gtx/intersect.hpp\"\n#include \"./gtx/log_base.hpp\"\n#include \"./gtx/matrix_cross_product.hpp\"\n#include \"./gtx/matrix_interpolation.hpp\"\n#include \"./gtx/matrix_major_storage.hpp\"\n#include \"./gtx/matrix_operation.hpp\"\n#include \"./gtx/matrix_query.hpp\"\n#include \"./gtx/mixed_product.hpp\"\n#include \"./gtx/norm.hpp\"\n#include \"./gtx/normal.hpp\"\n#include \"./gtx/normalize_dot.hpp\"\n#include \"./gtx/number_precision.hpp\"\n#include \"./gtx/optimum_pow.hpp\"\n#include \"./gtx/orthonormalize.hpp\"\n#include \"./gtx/perpendicular.hpp\"\n#include \"./gtx/polar_coordinates.hpp\"\n#include \"./gtx/projection.hpp\"\n#include \"./gtx/quaternion.hpp\"\n#include \"./gtx/raw_data.hpp\"\n#include \"./gtx/rotate_vector.hpp\"\n#include \"./gtx/spline.hpp\"\n#include \"./gtx/std_based_type.hpp\"\n#if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP))\n#\tinclude \"./gtx/string_cast.hpp\"\n#endif\n#include \"./gtx/transform.hpp\"\n#include \"./gtx/transform2.hpp\"\n#include \"./gtx/vec_swizzle.hpp\"\n#include \"./gtx/vector_angle.hpp\"\n#include \"./gtx/vector_query.hpp\"\n#include \"./gtx/wrap.hpp\"\n\n#if GLM_HAS_TEMPLATE_ALIASES\n#\tinclude \"./gtx/scalar_multiplication.hpp\"\n#endif\n\n#if GLM_HAS_RANGE_FOR\n#\tinclude \"./gtx/range.hpp\"\n#endif\n#endif//GLM_ENABLE_EXPERIMENTAL\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/fwd.hpp",
    "content": "#pragma once\n\n#include \"detail/qualifier.hpp\"\n\nnamespace glm\n{\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\ttypedef std::int8_t\t\t\t\tint8;\n\ttypedef std::int16_t\t\t\tint16;\n\ttypedef std::int32_t\t\t\tint32;\n\ttypedef std::int64_t\t\t\tint64;\n\n\ttypedef std::uint8_t\t\t\tuint8;\n\ttypedef std::uint16_t\t\t\tuint16;\n\ttypedef std::uint32_t\t\t\tuint32;\n\ttypedef std::uint64_t\t\t\tuint64;\n#else\n\ttypedef signed char\t\t\t\tint8;\n\ttypedef signed short\t\t\tint16;\n\ttypedef signed int\t\t\t\tint32;\n\ttypedef detail::int64\t\t\tint64;\n\n\ttypedef unsigned char\t\t\tuint8;\n\ttypedef unsigned short\t\t\tuint16;\n\ttypedef unsigned int\t\t\tuint32;\n\ttypedef detail::uint64\t\t\tuint64;\n#endif\n\n\t// Scalar int\n\n\ttypedef int8\t\t\t\t\tlowp_i8;\n\ttypedef int8\t\t\t\t\tmediump_i8;\n\ttypedef int8\t\t\t\t\thighp_i8;\n\ttypedef int8\t\t\t\t\ti8;\n\n\ttypedef int8\t\t\t\t\tlowp_int8;\n\ttypedef int8\t\t\t\t\tmediump_int8;\n\ttypedef int8\t\t\t\t\thighp_int8;\n\n\ttypedef int8\t\t\t\t\tlowp_int8_t;\n\ttypedef int8\t\t\t\t\tmediump_int8_t;\n\ttypedef int8\t\t\t\t\thighp_int8_t;\n\ttypedef int8\t\t\t\t\tint8_t;\n\n\ttypedef int16\t\t\t\t\tlowp_i16;\n\ttypedef int16\t\t\t\t\tmediump_i16;\n\ttypedef int16\t\t\t\t\thighp_i16;\n\ttypedef int16\t\t\t\t\ti16;\n\n\ttypedef int16\t\t\t\t\tlowp_int16;\n\ttypedef int16\t\t\t\t\tmediump_int16;\n\ttypedef int16\t\t\t\t\thighp_int16;\n\n\ttypedef int16\t\t\t\t\tlowp_int16_t;\n\ttypedef int16\t\t\t\t\tmediump_int16_t;\n\ttypedef int16\t\t\t\t\thighp_int16_t;\n\ttypedef int16\t\t\t\t\tint16_t;\n\n\ttypedef int32\t\t\t\t\tlowp_i32;\n\ttypedef int32\t\t\t\t\tmediump_i32;\n\ttypedef int32\t\t\t\t\thighp_i32;\n\ttypedef int32\t\t\t\t\ti32;\n\n\ttypedef int32\t\t\t\t\tlowp_int32;\n\ttypedef int32\t\t\t\t\tmediump_int32;\n\ttypedef int32\t\t\t\t\thighp_int32;\n\n\ttypedef int32\t\t\t\t\tlowp_int32_t;\n\ttypedef int32\t\t\t\t\tmediump_int32_t;\n\ttypedef int32\t\t\t\t\thighp_int32_t;\n\ttypedef int32\t\t\t\t\tint32_t;\n\n\ttypedef int64\t\t\t\t\tlowp_i64;\n\ttypedef int64\t\t\t\t\tmediump_i64;\n\ttypedef int64\t\t\t\t\thighp_i64;\n\ttypedef int64\t\t\t\t\ti64;\n\n\ttypedef int64\t\t\t\t\tlowp_int64;\n\ttypedef int64\t\t\t\t\tmediump_int64;\n\ttypedef int64\t\t\t\t\thighp_int64;\n\n\ttypedef int64\t\t\t\t\tlowp_int64_t;\n\ttypedef int64\t\t\t\t\tmediump_int64_t;\n\ttypedef int64\t\t\t\t\thighp_int64_t;\n\ttypedef int64\t\t\t\t\tint64_t;\n\n\t// Scalar uint\n\n\ttypedef unsigned int\t\t\tuint;\n\n\ttypedef uint8\t\t\t\t\tlowp_u8;\n\ttypedef uint8\t\t\t\t\tmediump_u8;\n\ttypedef uint8\t\t\t\t\thighp_u8;\n\ttypedef uint8\t\t\t\t\tu8;\n\n\ttypedef uint8\t\t\t\t\tlowp_uint8;\n\ttypedef uint8\t\t\t\t\tmediump_uint8;\n\ttypedef uint8\t\t\t\t\thighp_uint8;\n\n\ttypedef uint8\t\t\t\t\tlowp_uint8_t;\n\ttypedef uint8\t\t\t\t\tmediump_uint8_t;\n\ttypedef uint8\t\t\t\t\thighp_uint8_t;\n\ttypedef uint8\t\t\t\t\tuint8_t;\n\n\ttypedef uint16\t\t\t\t\tlowp_u16;\n\ttypedef uint16\t\t\t\t\tmediump_u16;\n\ttypedef uint16\t\t\t\t\thighp_u16;\n\ttypedef uint16\t\t\t\t\tu16;\n\n\ttypedef uint16\t\t\t\t\tlowp_uint16;\n\ttypedef uint16\t\t\t\t\tmediump_uint16;\n\ttypedef uint16\t\t\t\t\thighp_uint16;\n\n\ttypedef uint16\t\t\t\t\tlowp_uint16_t;\n\ttypedef uint16\t\t\t\t\tmediump_uint16_t;\n\ttypedef uint16\t\t\t\t\thighp_uint16_t;\n\ttypedef uint16\t\t\t\t\tuint16_t;\n\n\ttypedef uint32\t\t\t\t\tlowp_u32;\n\ttypedef uint32\t\t\t\t\tmediump_u32;\n\ttypedef uint32\t\t\t\t\thighp_u32;\n\ttypedef uint32\t\t\t\t\tu32;\n\n\ttypedef uint32\t\t\t\t\tlowp_uint32;\n\ttypedef uint32\t\t\t\t\tmediump_uint32;\n\ttypedef uint32\t\t\t\t\thighp_uint32;\n\n\ttypedef uint32\t\t\t\t\tlowp_uint32_t;\n\ttypedef uint32\t\t\t\t\tmediump_uint32_t;\n\ttypedef uint32\t\t\t\t\thighp_uint32_t;\n\ttypedef uint32\t\t\t\t\tuint32_t;\n\n\ttypedef uint64\t\t\t\t\tlowp_u64;\n\ttypedef uint64\t\t\t\t\tmediump_u64;\n\ttypedef uint64\t\t\t\t\thighp_u64;\n\ttypedef uint64\t\t\t\t\tu64;\n\n\ttypedef uint64\t\t\t\t\tlowp_uint64;\n\ttypedef uint64\t\t\t\t\tmediump_uint64;\n\ttypedef uint64\t\t\t\t\thighp_uint64;\n\n\ttypedef uint64\t\t\t\t\tlowp_uint64_t;\n\ttypedef uint64\t\t\t\t\tmediump_uint64_t;\n\ttypedef uint64\t\t\t\t\thighp_uint64_t;\n\ttypedef uint64\t\t\t\t\tuint64_t;\n\n\t// Scalar float\n\n\ttypedef float\t\t\t\t\tlowp_f32;\n\ttypedef float\t\t\t\t\tmediump_f32;\n\ttypedef float\t\t\t\t\thighp_f32;\n\ttypedef float\t\t\t\t\tf32;\n\n\ttypedef float\t\t\t\t\tlowp_float32;\n\ttypedef float\t\t\t\t\tmediump_float32;\n\ttypedef float\t\t\t\t\thighp_float32;\n\ttypedef float\t\t\t\t\tfloat32;\n\n\ttypedef float\t\t\t\t\tlowp_float32_t;\n\ttypedef float\t\t\t\t\tmediump_float32_t;\n\ttypedef float\t\t\t\t\thighp_float32_t;\n\ttypedef float\t\t\t\t\tfloat32_t;\n\n\n\ttypedef double\t\t\t\t\tlowp_f64;\n\ttypedef double\t\t\t\t\tmediump_f64;\n\ttypedef double\t\t\t\t\thighp_f64;\n\ttypedef double\t\t\t\t\tf64;\n\n\ttypedef double\t\t\t\t\tlowp_float64;\n\ttypedef double\t\t\t\t\tmediump_float64;\n\ttypedef double\t\t\t\t\thighp_float64;\n\ttypedef double\t\t\t\t\tfloat64;\n\n\ttypedef double\t\t\t\t\tlowp_float64_t;\n\ttypedef double\t\t\t\t\tmediump_float64_t;\n\ttypedef double\t\t\t\t\thighp_float64_t;\n\ttypedef double\t\t\t\t\tfloat64_t;\n\n\t// Vector bool\n\n\ttypedef vec<1, bool, lowp>\t\tlowp_bvec1;\n\ttypedef vec<2, bool, lowp>\t\tlowp_bvec2;\n\ttypedef vec<3, bool, lowp>\t\tlowp_bvec3;\n\ttypedef vec<4, bool, lowp>\t\tlowp_bvec4;\n\n\ttypedef vec<1, bool, mediump>\tmediump_bvec1;\n\ttypedef vec<2, bool, mediump>\tmediump_bvec2;\n\ttypedef vec<3, bool, mediump>\tmediump_bvec3;\n\ttypedef vec<4, bool, mediump>\tmediump_bvec4;\n\n\ttypedef vec<1, bool, highp>\t\thighp_bvec1;\n\ttypedef vec<2, bool, highp>\t\thighp_bvec2;\n\ttypedef vec<3, bool, highp>\t\thighp_bvec3;\n\ttypedef vec<4, bool, highp>\t\thighp_bvec4;\n\n\ttypedef vec<1, bool, defaultp>\tbvec1;\n\ttypedef vec<2, bool, defaultp>\tbvec2;\n\ttypedef vec<3, bool, defaultp>\tbvec3;\n\ttypedef vec<4, bool, defaultp>\tbvec4;\n\n\t// Vector int\n\n\ttypedef vec<1, int, lowp>\t\tlowp_ivec1;\n\ttypedef vec<2, int, lowp>\t\tlowp_ivec2;\n\ttypedef vec<3, int, lowp>\t\tlowp_ivec3;\n\ttypedef vec<4, int, lowp>\t\tlowp_ivec4;\n\n\ttypedef vec<1, int, mediump>\tmediump_ivec1;\n\ttypedef vec<2, int, mediump>\tmediump_ivec2;\n\ttypedef vec<3, int, mediump>\tmediump_ivec3;\n\ttypedef vec<4, int, mediump>\tmediump_ivec4;\n\n\ttypedef vec<1, int, highp>\t\thighp_ivec1;\n\ttypedef vec<2, int, highp>\t\thighp_ivec2;\n\ttypedef vec<3, int, highp>\t\thighp_ivec3;\n\ttypedef vec<4, int, highp>\t\thighp_ivec4;\n\n\ttypedef vec<1, int, defaultp>\tivec1;\n\ttypedef vec<2, int, defaultp>\tivec2;\n\ttypedef vec<3, int, defaultp>\tivec3;\n\ttypedef vec<4, int, defaultp>\tivec4;\n\n\ttypedef vec<1, i8, lowp>\t\tlowp_i8vec1;\n\ttypedef vec<2, i8, lowp>\t\tlowp_i8vec2;\n\ttypedef vec<3, i8, lowp>\t\tlowp_i8vec3;\n\ttypedef vec<4, i8, lowp>\t\tlowp_i8vec4;\n\n\ttypedef vec<1, i8, mediump>\t\tmediump_i8vec1;\n\ttypedef vec<2, i8, mediump>\t\tmediump_i8vec2;\n\ttypedef vec<3, i8, mediump>\t\tmediump_i8vec3;\n\ttypedef vec<4, i8, mediump>\t\tmediump_i8vec4;\n\n\ttypedef vec<1, i8, highp>\t\thighp_i8vec1;\n\ttypedef vec<2, i8, highp>\t\thighp_i8vec2;\n\ttypedef vec<3, i8, highp>\t\thighp_i8vec3;\n\ttypedef vec<4, i8, highp>\t\thighp_i8vec4;\n\n\ttypedef vec<1, i8, defaultp>\ti8vec1;\n\ttypedef vec<2, i8, defaultp>\ti8vec2;\n\ttypedef vec<3, i8, defaultp>\ti8vec3;\n\ttypedef vec<4, i8, defaultp>\ti8vec4;\n\n\ttypedef vec<1, i16, lowp>\t\tlowp_i16vec1;\n\ttypedef vec<2, i16, lowp>\t\tlowp_i16vec2;\n\ttypedef vec<3, i16, lowp>\t\tlowp_i16vec3;\n\ttypedef vec<4, i16, lowp>\t\tlowp_i16vec4;\n\n\ttypedef vec<1, i16, mediump>\tmediump_i16vec1;\n\ttypedef vec<2, i16, mediump>\tmediump_i16vec2;\n\ttypedef vec<3, i16, mediump>\tmediump_i16vec3;\n\ttypedef vec<4, i16, mediump>\tmediump_i16vec4;\n\n\ttypedef vec<1, i16, highp>\t\thighp_i16vec1;\n\ttypedef vec<2, i16, highp>\t\thighp_i16vec2;\n\ttypedef vec<3, i16, highp>\t\thighp_i16vec3;\n\ttypedef vec<4, i16, highp>\t\thighp_i16vec4;\n\n\ttypedef vec<1, i16, defaultp>\ti16vec1;\n\ttypedef vec<2, i16, defaultp>\ti16vec2;\n\ttypedef vec<3, i16, defaultp>\ti16vec3;\n\ttypedef vec<4, i16, defaultp>\ti16vec4;\n\n\ttypedef vec<1, i32, lowp>\t\tlowp_i32vec1;\n\ttypedef vec<2, i32, lowp>\t\tlowp_i32vec2;\n\ttypedef vec<3, i32, lowp>\t\tlowp_i32vec3;\n\ttypedef vec<4, i32, lowp>\t\tlowp_i32vec4;\n\n\ttypedef vec<1, i32, mediump>\tmediump_i32vec1;\n\ttypedef vec<2, i32, mediump>\tmediump_i32vec2;\n\ttypedef vec<3, i32, mediump>\tmediump_i32vec3;\n\ttypedef vec<4, i32, mediump>\tmediump_i32vec4;\n\n\ttypedef vec<1, i32, highp>\t\thighp_i32vec1;\n\ttypedef vec<2, i32, highp>\t\thighp_i32vec2;\n\ttypedef vec<3, i32, highp>\t\thighp_i32vec3;\n\ttypedef vec<4, i32, highp>\t\thighp_i32vec4;\n\n\ttypedef vec<1, i32, defaultp>\ti32vec1;\n\ttypedef vec<2, i32, defaultp>\ti32vec2;\n\ttypedef vec<3, i32, defaultp>\ti32vec3;\n\ttypedef vec<4, i32, defaultp>\ti32vec4;\n\n\ttypedef vec<1, i64, lowp>\t\tlowp_i64vec1;\n\ttypedef vec<2, i64, lowp>\t\tlowp_i64vec2;\n\ttypedef vec<3, i64, lowp>\t\tlowp_i64vec3;\n\ttypedef vec<4, i64, lowp>\t\tlowp_i64vec4;\n\n\ttypedef vec<1, i64, mediump>\tmediump_i64vec1;\n\ttypedef vec<2, i64, mediump>\tmediump_i64vec2;\n\ttypedef vec<3, i64, mediump>\tmediump_i64vec3;\n\ttypedef vec<4, i64, mediump>\tmediump_i64vec4;\n\n\ttypedef vec<1, i64, highp>\t\thighp_i64vec1;\n\ttypedef vec<2, i64, highp>\t\thighp_i64vec2;\n\ttypedef vec<3, i64, highp>\t\thighp_i64vec3;\n\ttypedef vec<4, i64, highp>\t\thighp_i64vec4;\n\n\ttypedef vec<1, i64, defaultp>\ti64vec1;\n\ttypedef vec<2, i64, defaultp>\ti64vec2;\n\ttypedef vec<3, i64, defaultp>\ti64vec3;\n\ttypedef vec<4, i64, defaultp>\ti64vec4;\n\n\t// Vector uint\n\n\ttypedef vec<1, uint, lowp>\t\tlowp_uvec1;\n\ttypedef vec<2, uint, lowp>\t\tlowp_uvec2;\n\ttypedef vec<3, uint, lowp>\t\tlowp_uvec3;\n\ttypedef vec<4, uint, lowp>\t\tlowp_uvec4;\n\n\ttypedef vec<1, uint, mediump>\tmediump_uvec1;\n\ttypedef vec<2, uint, mediump>\tmediump_uvec2;\n\ttypedef vec<3, uint, mediump>\tmediump_uvec3;\n\ttypedef vec<4, uint, mediump>\tmediump_uvec4;\n\n\ttypedef vec<1, uint, highp>\t\thighp_uvec1;\n\ttypedef vec<2, uint, highp>\t\thighp_uvec2;\n\ttypedef vec<3, uint, highp>\t\thighp_uvec3;\n\ttypedef vec<4, uint, highp>\t\thighp_uvec4;\n\n\ttypedef vec<1, uint, defaultp>\tuvec1;\n\ttypedef vec<2, uint, defaultp>\tuvec2;\n\ttypedef vec<3, uint, defaultp>\tuvec3;\n\ttypedef vec<4, uint, defaultp>\tuvec4;\n\n\ttypedef vec<1, u8, lowp>\t\tlowp_u8vec1;\n\ttypedef vec<2, u8, lowp>\t\tlowp_u8vec2;\n\ttypedef vec<3, u8, lowp>\t\tlowp_u8vec3;\n\ttypedef vec<4, u8, lowp>\t\tlowp_u8vec4;\n\n\ttypedef vec<1, u8, mediump>\t\tmediump_u8vec1;\n\ttypedef vec<2, u8, mediump>\t\tmediump_u8vec2;\n\ttypedef vec<3, u8, mediump>\t\tmediump_u8vec3;\n\ttypedef vec<4, u8, mediump>\t\tmediump_u8vec4;\n\n\ttypedef vec<1, u8, highp>\t\thighp_u8vec1;\n\ttypedef vec<2, u8, highp>\t\thighp_u8vec2;\n\ttypedef vec<3, u8, highp>\t\thighp_u8vec3;\n\ttypedef vec<4, u8, highp>\t\thighp_u8vec4;\n\n\ttypedef vec<1, u8, defaultp>\tu8vec1;\n\ttypedef vec<2, u8, defaultp>\tu8vec2;\n\ttypedef vec<3, u8, defaultp>\tu8vec3;\n\ttypedef vec<4, u8, defaultp>\tu8vec4;\n\n\ttypedef vec<1, u16, lowp>\t\tlowp_u16vec1;\n\ttypedef vec<2, u16, lowp>\t\tlowp_u16vec2;\n\ttypedef vec<3, u16, lowp>\t\tlowp_u16vec3;\n\ttypedef vec<4, u16, lowp>\t\tlowp_u16vec4;\n\n\ttypedef vec<1, u16, mediump>\tmediump_u16vec1;\n\ttypedef vec<2, u16, mediump>\tmediump_u16vec2;\n\ttypedef vec<3, u16, mediump>\tmediump_u16vec3;\n\ttypedef vec<4, u16, mediump>\tmediump_u16vec4;\n\n\ttypedef vec<1, u16, highp>\t\thighp_u16vec1;\n\ttypedef vec<2, u16, highp>\t\thighp_u16vec2;\n\ttypedef vec<3, u16, highp>\t\thighp_u16vec3;\n\ttypedef vec<4, u16, highp>\t\thighp_u16vec4;\n\n\ttypedef vec<1, u16, defaultp>\tu16vec1;\n\ttypedef vec<2, u16, defaultp>\tu16vec2;\n\ttypedef vec<3, u16, defaultp>\tu16vec3;\n\ttypedef vec<4, u16, defaultp>\tu16vec4;\n\n\ttypedef vec<1, u32, lowp>\t\tlowp_u32vec1;\n\ttypedef vec<2, u32, lowp>\t\tlowp_u32vec2;\n\ttypedef vec<3, u32, lowp>\t\tlowp_u32vec3;\n\ttypedef vec<4, u32, lowp>\t\tlowp_u32vec4;\n\n\ttypedef vec<1, u32, mediump>\tmediump_u32vec1;\n\ttypedef vec<2, u32, mediump>\tmediump_u32vec2;\n\ttypedef vec<3, u32, mediump>\tmediump_u32vec3;\n\ttypedef vec<4, u32, mediump>\tmediump_u32vec4;\n\n\ttypedef vec<1, u32, highp>\t\thighp_u32vec1;\n\ttypedef vec<2, u32, highp>\t\thighp_u32vec2;\n\ttypedef vec<3, u32, highp>\t\thighp_u32vec3;\n\ttypedef vec<4, u32, highp>\t\thighp_u32vec4;\n\n\ttypedef vec<1, u32, defaultp>\tu32vec1;\n\ttypedef vec<2, u32, defaultp>\tu32vec2;\n\ttypedef vec<3, u32, defaultp>\tu32vec3;\n\ttypedef vec<4, u32, defaultp>\tu32vec4;\n\n\ttypedef vec<1, u64, lowp>\t\tlowp_u64vec1;\n\ttypedef vec<2, u64, lowp>\t\tlowp_u64vec2;\n\ttypedef vec<3, u64, lowp>\t\tlowp_u64vec3;\n\ttypedef vec<4, u64, lowp>\t\tlowp_u64vec4;\n\n\ttypedef vec<1, u64, mediump>\tmediump_u64vec1;\n\ttypedef vec<2, u64, mediump>\tmediump_u64vec2;\n\ttypedef vec<3, u64, mediump>\tmediump_u64vec3;\n\ttypedef vec<4, u64, mediump>\tmediump_u64vec4;\n\n\ttypedef vec<1, u64, highp>\t\thighp_u64vec1;\n\ttypedef vec<2, u64, highp>\t\thighp_u64vec2;\n\ttypedef vec<3, u64, highp>\t\thighp_u64vec3;\n\ttypedef vec<4, u64, highp>\t\thighp_u64vec4;\n\n\ttypedef vec<1, u64, defaultp>\tu64vec1;\n\ttypedef vec<2, u64, defaultp>\tu64vec2;\n\ttypedef vec<3, u64, defaultp>\tu64vec3;\n\ttypedef vec<4, u64, defaultp>\tu64vec4;\n\n\t// Vector float\n\n\ttypedef vec<1, float, lowp>\t\t\tlowp_vec1;\n\ttypedef vec<2, float, lowp>\t\t\tlowp_vec2;\n\ttypedef vec<3, float, lowp>\t\t\tlowp_vec3;\n\ttypedef vec<4, float, lowp>\t\t\tlowp_vec4;\n\n\ttypedef vec<1, float, mediump>\t\tmediump_vec1;\n\ttypedef vec<2, float, mediump>\t\tmediump_vec2;\n\ttypedef vec<3, float, mediump>\t\tmediump_vec3;\n\ttypedef vec<4, float, mediump>\t\tmediump_vec4;\n\n\ttypedef vec<1, float, highp>\t\thighp_vec1;\n\ttypedef vec<2, float, highp>\t\thighp_vec2;\n\ttypedef vec<3, float, highp>\t\thighp_vec3;\n\ttypedef vec<4, float, highp>\t\thighp_vec4;\n\n\ttypedef vec<1, float, defaultp>\t\tvec1;\n\ttypedef vec<2, float, defaultp>\t\tvec2;\n\ttypedef vec<3, float, defaultp>\t\tvec3;\n\ttypedef vec<4, float, defaultp>\t\tvec4;\n\n\ttypedef vec<1, float, lowp>\t\t\tlowp_fvec1;\n\ttypedef vec<2, float, lowp>\t\t\tlowp_fvec2;\n\ttypedef vec<3, float, lowp>\t\t\tlowp_fvec3;\n\ttypedef vec<4, float, lowp>\t\t\tlowp_fvec4;\n\n\ttypedef vec<1, float, mediump>\t\tmediump_fvec1;\n\ttypedef vec<2, float, mediump>\t\tmediump_fvec2;\n\ttypedef vec<3, float, mediump>\t\tmediump_fvec3;\n\ttypedef vec<4, float, mediump>\t\tmediump_fvec4;\n\n\ttypedef vec<1, float, highp>\t\thighp_fvec1;\n\ttypedef vec<2, float, highp>\t\thighp_fvec2;\n\ttypedef vec<3, float, highp>\t\thighp_fvec3;\n\ttypedef vec<4, float, highp>\t\thighp_fvec4;\n\n\ttypedef vec<1, f32, defaultp>\t\tfvec1;\n\ttypedef vec<2, f32, defaultp>\t\tfvec2;\n\ttypedef vec<3, f32, defaultp>\t\tfvec3;\n\ttypedef vec<4, f32, defaultp>\t\tfvec4;\n\n\ttypedef vec<1, f32, lowp>\t\t\tlowp_f32vec1;\n\ttypedef vec<2, f32, lowp>\t\t\tlowp_f32vec2;\n\ttypedef vec<3, f32, lowp>\t\t\tlowp_f32vec3;\n\ttypedef vec<4, f32, lowp>\t\t\tlowp_f32vec4;\n\n\ttypedef vec<1, f32, mediump>\t\tmediump_f32vec1;\n\ttypedef vec<2, f32, mediump>\t\tmediump_f32vec2;\n\ttypedef vec<3, f32, mediump>\t\tmediump_f32vec3;\n\ttypedef vec<4, f32, mediump>\t\tmediump_f32vec4;\n\n\ttypedef vec<1, f32, highp>\t\t\thighp_f32vec1;\n\ttypedef vec<2, f32, highp>\t\t\thighp_f32vec2;\n\ttypedef vec<3, f32, highp>\t\t\thighp_f32vec3;\n\ttypedef vec<4, f32, highp>\t\t\thighp_f32vec4;\n\n\ttypedef vec<1, f32, defaultp>\t\tf32vec1;\n\ttypedef vec<2, f32, defaultp>\t\tf32vec2;\n\ttypedef vec<3, f32, defaultp>\t\tf32vec3;\n\ttypedef vec<4, f32, defaultp>\t\tf32vec4;\n\n\ttypedef vec<1, f64, lowp>\t\t\tlowp_dvec1;\n\ttypedef vec<2, f64, lowp>\t\t\tlowp_dvec2;\n\ttypedef vec<3, f64, lowp>\t\t\tlowp_dvec3;\n\ttypedef vec<4, f64, lowp>\t\t\tlowp_dvec4;\n\n\ttypedef vec<1, f64, mediump>\t\tmediump_dvec1;\n\ttypedef vec<2, f64, mediump>\t\tmediump_dvec2;\n\ttypedef vec<3, f64, mediump>\t\tmediump_dvec3;\n\ttypedef vec<4, f64, mediump>\t\tmediump_dvec4;\n\n\ttypedef vec<1, f64, highp>\t\t\thighp_dvec1;\n\ttypedef vec<2, f64, highp>\t\t\thighp_dvec2;\n\ttypedef vec<3, f64, highp>\t\t\thighp_dvec3;\n\ttypedef vec<4, f64, highp>\t\t\thighp_dvec4;\n\n\ttypedef vec<1, f64, defaultp>\t\tdvec1;\n\ttypedef vec<2, f64, defaultp>\t\tdvec2;\n\ttypedef vec<3, f64, defaultp>\t\tdvec3;\n\ttypedef vec<4, f64, defaultp>\t\tdvec4;\n\n\ttypedef vec<1, f64, lowp>\t\t\tlowp_f64vec1;\n\ttypedef vec<2, f64, lowp>\t\t\tlowp_f64vec2;\n\ttypedef vec<3, f64, lowp>\t\t\tlowp_f64vec3;\n\ttypedef vec<4, f64, lowp>\t\t\tlowp_f64vec4;\n\n\ttypedef vec<1, f64, mediump>\t\tmediump_f64vec1;\n\ttypedef vec<2, f64, mediump>\t\tmediump_f64vec2;\n\ttypedef vec<3, f64, mediump>\t\tmediump_f64vec3;\n\ttypedef vec<4, f64, mediump>\t\tmediump_f64vec4;\n\n\ttypedef vec<1, f64, highp>\t\t\thighp_f64vec1;\n\ttypedef vec<2, f64, highp>\t\t\thighp_f64vec2;\n\ttypedef vec<3, f64, highp>\t\t\thighp_f64vec3;\n\ttypedef vec<4, f64, highp>\t\t\thighp_f64vec4;\n\n\ttypedef vec<1, f64, defaultp>\t\tf64vec1;\n\ttypedef vec<2, f64, defaultp>\t\tf64vec2;\n\ttypedef vec<3, f64, defaultp>\t\tf64vec3;\n\ttypedef vec<4, f64, defaultp>\t\tf64vec4;\n\n\t// Matrix NxN\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_mat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_mat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_mat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_mat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_mat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_mat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_mat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_mat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_mat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tmat2;\n\ttypedef mat<3, 3, f32, defaultp>\tmat3;\n\ttypedef mat<4, 4, f32, defaultp>\tmat4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_fmat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_fmat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_fmat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_fmat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_fmat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_fmat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_fmat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_fmat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_fmat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tfmat2;\n\ttypedef mat<3, 3, f32, defaultp>\tfmat3;\n\ttypedef mat<4, 4, f32, defaultp>\tfmat4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_f32mat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_f32mat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_f32mat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_f32mat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_f32mat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_f32mat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_f32mat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_f32mat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_f32mat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tf32mat2;\n\ttypedef mat<3, 3, f32, defaultp>\tf32mat3;\n\ttypedef mat<4, 4, f32, defaultp>\tf32mat4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_dmat2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_dmat3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_dmat4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_dmat2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_dmat3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_dmat4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_dmat2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_dmat3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_dmat4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tdmat2;\n\ttypedef mat<3, 3, f64, defaultp>\tdmat3;\n\ttypedef mat<4, 4, f64, defaultp>\tdmat4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_f64mat2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_f64mat3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_f64mat4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_f64mat2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_f64mat3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_f64mat4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_f64mat2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_f64mat3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_f64mat4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tf64mat2;\n\ttypedef mat<3, 3, f64, defaultp>\tf64mat3;\n\ttypedef mat<4, 4, f64, defaultp>\tf64mat4;\n\n\t// Matrix MxN\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_mat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_mat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_mat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_mat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_mat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_mat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_mat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_mat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_mat4x4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_mat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_mat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_mat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_mat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_mat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_mat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_mat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_mat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_mat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_mat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_mat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_mat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_mat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_mat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_mat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_mat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_mat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_mat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tmat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tmat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tmat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tmat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tmat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tmat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tmat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tmat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tmat4x4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_fmat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_fmat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_fmat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_fmat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_fmat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_fmat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_fmat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_fmat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_fmat4x4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_fmat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_fmat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_fmat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_fmat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_fmat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_fmat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_fmat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_fmat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_fmat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_fmat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_fmat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_fmat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_fmat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_fmat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_fmat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_fmat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_fmat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_fmat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tfmat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tfmat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tfmat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tfmat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tfmat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tfmat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tfmat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tfmat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tfmat4x4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_f32mat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_f32mat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_f32mat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_f32mat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_f32mat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_f32mat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_f32mat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_f32mat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_f32mat4x4;\n\t\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_f32mat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_f32mat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_f32mat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_f32mat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_f32mat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_f32mat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_f32mat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_f32mat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_f32mat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_f32mat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_f32mat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_f32mat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_f32mat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_f32mat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_f32mat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_f32mat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_f32mat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_f32mat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tf32mat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tf32mat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tf32mat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tf32mat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tf32mat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tf32mat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tf32mat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tf32mat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tf32mat4x4;\n\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2x2;\n\ttypedef mat<2, 3, double, lowp>\t\tlowp_dmat2x3;\n\ttypedef mat<2, 4, double, lowp>\t\tlowp_dmat2x4;\n\ttypedef mat<3, 2, double, lowp>\t\tlowp_dmat3x2;\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3x3;\n\ttypedef mat<3, 4, double, lowp>\t\tlowp_dmat3x4;\n\ttypedef mat<4, 2, double, lowp>\t\tlowp_dmat4x2;\n\ttypedef mat<4, 3, double, lowp>\t\tlowp_dmat4x3;\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4x4;\n\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2x2;\n\ttypedef mat<2, 3, double, mediump>\tmediump_dmat2x3;\n\ttypedef mat<2, 4, double, mediump>\tmediump_dmat2x4;\n\ttypedef mat<3, 2, double, mediump>\tmediump_dmat3x2;\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3x3;\n\ttypedef mat<3, 4, double, mediump>\tmediump_dmat3x4;\n\ttypedef mat<4, 2, double, mediump>\tmediump_dmat4x2;\n\ttypedef mat<4, 3, double, mediump>\tmediump_dmat4x3;\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4x4;\n\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2x2;\n\ttypedef mat<2, 3, double, highp>\thighp_dmat2x3;\n\ttypedef mat<2, 4, double, highp>\thighp_dmat2x4;\n\ttypedef mat<3, 2, double, highp>\thighp_dmat3x2;\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3x3;\n\ttypedef mat<3, 4, double, highp>\thighp_dmat3x4;\n\ttypedef mat<4, 2, double, highp>\thighp_dmat4x2;\n\ttypedef mat<4, 3, double, highp>\thighp_dmat4x3;\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4x4;\n\n\ttypedef mat<2, 2, double, defaultp>\tdmat2x2;\n\ttypedef mat<2, 3, double, defaultp>\tdmat2x3;\n\ttypedef mat<2, 4, double, defaultp>\tdmat2x4;\n\ttypedef mat<3, 2, double, defaultp>\tdmat3x2;\n\ttypedef mat<3, 3, double, defaultp>\tdmat3x3;\n\ttypedef mat<3, 4, double, defaultp>\tdmat3x4;\n\ttypedef mat<4, 2, double, defaultp>\tdmat4x2;\n\ttypedef mat<4, 3, double, defaultp>\tdmat4x3;\n\ttypedef mat<4, 4, double, defaultp>\tdmat4x4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_f64mat2x2;\n\ttypedef mat<2, 3, f64, lowp>\t\tlowp_f64mat2x3;\n\ttypedef mat<2, 4, f64, lowp>\t\tlowp_f64mat2x4;\n\ttypedef mat<3, 2, f64, lowp>\t\tlowp_f64mat3x2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_f64mat3x3;\n\ttypedef mat<3, 4, f64, lowp>\t\tlowp_f64mat3x4;\n\ttypedef mat<4, 2, f64, lowp>\t\tlowp_f64mat4x2;\n\ttypedef mat<4, 3, f64, lowp>\t\tlowp_f64mat4x3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_f64mat2x2;\n\ttypedef mat<2, 3, f64, mediump>\t\tmediump_f64mat2x3;\n\ttypedef mat<2, 4, f64, mediump>\t\tmediump_f64mat2x4;\n\ttypedef mat<3, 2, f64, mediump>\t\tmediump_f64mat3x2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_f64mat3x3;\n\ttypedef mat<3, 4, f64, mediump>\t\tmediump_f64mat3x4;\n\ttypedef mat<4, 2, f64, mediump>\t\tmediump_f64mat4x2;\n\ttypedef mat<4, 3, f64, mediump>\t\tmediump_f64mat4x3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_f64mat2x2;\n\ttypedef mat<2, 3, f64, highp>\t\thighp_f64mat2x3;\n\ttypedef mat<2, 4, f64, highp>\t\thighp_f64mat2x4;\n\ttypedef mat<3, 2, f64, highp>\t\thighp_f64mat3x2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_f64mat3x3;\n\ttypedef mat<3, 4, f64, highp>\t\thighp_f64mat3x4;\n\ttypedef mat<4, 2, f64, highp>\t\thighp_f64mat4x2;\n\ttypedef mat<4, 3, f64, highp>\t\thighp_f64mat4x3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tf64mat2x2;\n\ttypedef mat<2, 3, f64, defaultp>\tf64mat2x3;\n\ttypedef mat<2, 4, f64, defaultp>\tf64mat2x4;\n\ttypedef mat<3, 2, f64, defaultp>\tf64mat3x2;\n\ttypedef mat<3, 3, f64, defaultp>\tf64mat3x3;\n\ttypedef mat<3, 4, f64, defaultp>\tf64mat3x4;\n\ttypedef mat<4, 2, f64, defaultp>\tf64mat4x2;\n\ttypedef mat<4, 3, f64, defaultp>\tf64mat4x3;\n\ttypedef mat<4, 4, f64, defaultp>\tf64mat4x4;\n\n\t// Signed integer matrix MxN\n\n\ttypedef mat<2, 2, int, lowp>\t\tlowp_imat2x2;\n\ttypedef mat<2, 3, int, lowp>\t\tlowp_imat2x3;\n\ttypedef mat<2, 4, int, lowp>\t\tlowp_imat2x4;\n\ttypedef mat<3, 2, int, lowp>\t\tlowp_imat3x2;\n\ttypedef mat<3, 3, int, lowp>\t\tlowp_imat3x3;\n\ttypedef mat<3, 4, int, lowp>\t\tlowp_imat3x4;\n\ttypedef mat<4, 2, int, lowp>\t\tlowp_imat4x2;\n\ttypedef mat<4, 3, int, lowp>\t\tlowp_imat4x3;\n\ttypedef mat<4, 4, int, lowp>\t\tlowp_imat4x4;\n\n\ttypedef mat<2, 2, int, mediump>\t\tmediump_imat2x2;\n\ttypedef mat<2, 3, int, mediump>\t\tmediump_imat2x3;\n\ttypedef mat<2, 4, int, mediump>\t\tmediump_imat2x4;\n\ttypedef mat<3, 2, int, mediump>\t\tmediump_imat3x2;\n\ttypedef mat<3, 3, int, mediump>\t\tmediump_imat3x3;\n\ttypedef mat<3, 4, int, mediump>\t\tmediump_imat3x4;\n\ttypedef mat<4, 2, int, mediump>\t\tmediump_imat4x2;\n\ttypedef mat<4, 3, int, mediump>\t\tmediump_imat4x3;\n\ttypedef mat<4, 4, int, mediump>\t\tmediump_imat4x4;\n\n\ttypedef mat<2, 2, int, highp>\t\thighp_imat2x2;\n\ttypedef mat<2, 3, int, highp>\t\thighp_imat2x3;\n\ttypedef mat<2, 4, int, highp>\t\thighp_imat2x4;\n\ttypedef mat<3, 2, int, highp>\t\thighp_imat3x2;\n\ttypedef mat<3, 3, int, highp>\t\thighp_imat3x3;\n\ttypedef mat<3, 4, int, highp>\t\thighp_imat3x4;\n\ttypedef mat<4, 2, int, highp>\t\thighp_imat4x2;\n\ttypedef mat<4, 3, int, highp>\t\thighp_imat4x3;\n\ttypedef mat<4, 4, int, highp>\t\thighp_imat4x4;\n\n\ttypedef mat<2, 2, int, defaultp>\timat2x2;\n\ttypedef mat<2, 3, int, defaultp>\timat2x3;\n\ttypedef mat<2, 4, int, defaultp>\timat2x4;\n\ttypedef mat<3, 2, int, defaultp>\timat3x2;\n\ttypedef mat<3, 3, int, defaultp>\timat3x3;\n\ttypedef mat<3, 4, int, defaultp>\timat3x4;\n\ttypedef mat<4, 2, int, defaultp>\timat4x2;\n\ttypedef mat<4, 3, int, defaultp>\timat4x3;\n\ttypedef mat<4, 4, int, defaultp>\timat4x4;\n\n\n\ttypedef mat<2, 2, int8, lowp>\t\tlowp_i8mat2x2;\n\ttypedef mat<2, 3, int8, lowp>\t\tlowp_i8mat2x3;\n\ttypedef mat<2, 4, int8, lowp>\t\tlowp_i8mat2x4;\n\ttypedef mat<3, 2, int8, lowp>\t\tlowp_i8mat3x2;\n\ttypedef mat<3, 3, int8, lowp>\t\tlowp_i8mat3x3;\n\ttypedef mat<3, 4, int8, lowp>\t\tlowp_i8mat3x4;\n\ttypedef mat<4, 2, int8, lowp>\t\tlowp_i8mat4x2;\n\ttypedef mat<4, 3, int8, lowp>\t\tlowp_i8mat4x3;\n\ttypedef mat<4, 4, int8, lowp>\t\tlowp_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, mediump>\tmediump_i8mat2x2;\n\ttypedef mat<2, 3, int8, mediump>\tmediump_i8mat2x3;\n\ttypedef mat<2, 4, int8, mediump>\tmediump_i8mat2x4;\n\ttypedef mat<3, 2, int8, mediump>\tmediump_i8mat3x2;\n\ttypedef mat<3, 3, int8, mediump>\tmediump_i8mat3x3;\n\ttypedef mat<3, 4, int8, mediump>\tmediump_i8mat3x4;\n\ttypedef mat<4, 2, int8, mediump>\tmediump_i8mat4x2;\n\ttypedef mat<4, 3, int8, mediump>\tmediump_i8mat4x3;\n\ttypedef mat<4, 4, int8, mediump>\tmediump_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, highp>\t\thighp_i8mat2x2;\n\ttypedef mat<2, 3, int8, highp>\t\thighp_i8mat2x3;\n\ttypedef mat<2, 4, int8, highp>\t\thighp_i8mat2x4;\n\ttypedef mat<3, 2, int8, highp>\t\thighp_i8mat3x2;\n\ttypedef mat<3, 3, int8, highp>\t\thighp_i8mat3x3;\n\ttypedef mat<3, 4, int8, highp>\t\thighp_i8mat3x4;\n\ttypedef mat<4, 2, int8, highp>\t\thighp_i8mat4x2;\n\ttypedef mat<4, 3, int8, highp>\t\thighp_i8mat4x3;\n\ttypedef mat<4, 4, int8, highp>\t\thighp_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, defaultp>\ti8mat2x2;\n\ttypedef mat<2, 3, int8, defaultp>\ti8mat2x3;\n\ttypedef mat<2, 4, int8, defaultp>\ti8mat2x4;\n\ttypedef mat<3, 2, int8, defaultp>\ti8mat3x2;\n\ttypedef mat<3, 3, int8, defaultp>\ti8mat3x3;\n\ttypedef mat<3, 4, int8, defaultp>\ti8mat3x4;\n\ttypedef mat<4, 2, int8, defaultp>\ti8mat4x2;\n\ttypedef mat<4, 3, int8, defaultp>\ti8mat4x3;\n\ttypedef mat<4, 4, int8, defaultp>\ti8mat4x4;\n\n\n\ttypedef mat<2, 2, int16, lowp>\t\tlowp_i16mat2x2;\n\ttypedef mat<2, 3, int16, lowp>\t\tlowp_i16mat2x3;\n\ttypedef mat<2, 4, int16, lowp>\t\tlowp_i16mat2x4;\n\ttypedef mat<3, 2, int16, lowp>\t\tlowp_i16mat3x2;\n\ttypedef mat<3, 3, int16, lowp>\t\tlowp_i16mat3x3;\n\ttypedef mat<3, 4, int16, lowp>\t\tlowp_i16mat3x4;\n\ttypedef mat<4, 2, int16, lowp>\t\tlowp_i16mat4x2;\n\ttypedef mat<4, 3, int16, lowp>\t\tlowp_i16mat4x3;\n\ttypedef mat<4, 4, int16, lowp>\t\tlowp_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, mediump>\tmediump_i16mat2x2;\n\ttypedef mat<2, 3, int16, mediump>\tmediump_i16mat2x3;\n\ttypedef mat<2, 4, int16, mediump>\tmediump_i16mat2x4;\n\ttypedef mat<3, 2, int16, mediump>\tmediump_i16mat3x2;\n\ttypedef mat<3, 3, int16, mediump>\tmediump_i16mat3x3;\n\ttypedef mat<3, 4, int16, mediump>\tmediump_i16mat3x4;\n\ttypedef mat<4, 2, int16, mediump>\tmediump_i16mat4x2;\n\ttypedef mat<4, 3, int16, mediump>\tmediump_i16mat4x3;\n\ttypedef mat<4, 4, int16, mediump>\tmediump_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, highp>\t\thighp_i16mat2x2;\n\ttypedef mat<2, 3, int16, highp>\t\thighp_i16mat2x3;\n\ttypedef mat<2, 4, int16, highp>\t\thighp_i16mat2x4;\n\ttypedef mat<3, 2, int16, highp>\t\thighp_i16mat3x2;\n\ttypedef mat<3, 3, int16, highp>\t\thighp_i16mat3x3;\n\ttypedef mat<3, 4, int16, highp>\t\thighp_i16mat3x4;\n\ttypedef mat<4, 2, int16, highp>\t\thighp_i16mat4x2;\n\ttypedef mat<4, 3, int16, highp>\t\thighp_i16mat4x3;\n\ttypedef mat<4, 4, int16, highp>\t\thighp_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, defaultp>\ti16mat2x2;\n\ttypedef mat<2, 3, int16, defaultp>\ti16mat2x3;\n\ttypedef mat<2, 4, int16, defaultp>\ti16mat2x4;\n\ttypedef mat<3, 2, int16, defaultp>\ti16mat3x2;\n\ttypedef mat<3, 3, int16, defaultp>\ti16mat3x3;\n\ttypedef mat<3, 4, int16, defaultp>\ti16mat3x4;\n\ttypedef mat<4, 2, int16, defaultp>\ti16mat4x2;\n\ttypedef mat<4, 3, int16, defaultp>\ti16mat4x3;\n\ttypedef mat<4, 4, int16, defaultp>\ti16mat4x4;\n\n\n\ttypedef mat<2, 2, int32, lowp>\t\tlowp_i32mat2x2;\n\ttypedef mat<2, 3, int32, lowp>\t\tlowp_i32mat2x3;\n\ttypedef mat<2, 4, int32, lowp>\t\tlowp_i32mat2x4;\n\ttypedef mat<3, 2, int32, lowp>\t\tlowp_i32mat3x2;\n\ttypedef mat<3, 3, int32, lowp>\t\tlowp_i32mat3x3;\n\ttypedef mat<3, 4, int32, lowp>\t\tlowp_i32mat3x4;\n\ttypedef mat<4, 2, int32, lowp>\t\tlowp_i32mat4x2;\n\ttypedef mat<4, 3, int32, lowp>\t\tlowp_i32mat4x3;\n\ttypedef mat<4, 4, int32, lowp>\t\tlowp_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, mediump>\tmediump_i32mat2x2;\n\ttypedef mat<2, 3, int32, mediump>\tmediump_i32mat2x3;\n\ttypedef mat<2, 4, int32, mediump>\tmediump_i32mat2x4;\n\ttypedef mat<3, 2, int32, mediump>\tmediump_i32mat3x2;\n\ttypedef mat<3, 3, int32, mediump>\tmediump_i32mat3x3;\n\ttypedef mat<3, 4, int32, mediump>\tmediump_i32mat3x4;\n\ttypedef mat<4, 2, int32, mediump>\tmediump_i32mat4x2;\n\ttypedef mat<4, 3, int32, mediump>\tmediump_i32mat4x3;\n\ttypedef mat<4, 4, int32, mediump>\tmediump_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, highp>\t\thighp_i32mat2x2;\n\ttypedef mat<2, 3, int32, highp>\t\thighp_i32mat2x3;\n\ttypedef mat<2, 4, int32, highp>\t\thighp_i32mat2x4;\n\ttypedef mat<3, 2, int32, highp>\t\thighp_i32mat3x2;\n\ttypedef mat<3, 3, int32, highp>\t\thighp_i32mat3x3;\n\ttypedef mat<3, 4, int32, highp>\t\thighp_i32mat3x4;\n\ttypedef mat<4, 2, int32, highp>\t\thighp_i32mat4x2;\n\ttypedef mat<4, 3, int32, highp>\t\thighp_i32mat4x3;\n\ttypedef mat<4, 4, int32, highp>\t\thighp_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, defaultp>\ti32mat2x2;\n\ttypedef mat<2, 3, int32, defaultp>\ti32mat2x3;\n\ttypedef mat<2, 4, int32, defaultp>\ti32mat2x4;\n\ttypedef mat<3, 2, int32, defaultp>\ti32mat3x2;\n\ttypedef mat<3, 3, int32, defaultp>\ti32mat3x3;\n\ttypedef mat<3, 4, int32, defaultp>\ti32mat3x4;\n\ttypedef mat<4, 2, int32, defaultp>\ti32mat4x2;\n\ttypedef mat<4, 3, int32, defaultp>\ti32mat4x3;\n\ttypedef mat<4, 4, int32, defaultp>\ti32mat4x4;\n\n\n\ttypedef mat<2, 2, int64, lowp>\t\tlowp_i64mat2x2;\n\ttypedef mat<2, 3, int64, lowp>\t\tlowp_i64mat2x3;\n\ttypedef mat<2, 4, int64, lowp>\t\tlowp_i64mat2x4;\n\ttypedef mat<3, 2, int64, lowp>\t\tlowp_i64mat3x2;\n\ttypedef mat<3, 3, int64, lowp>\t\tlowp_i64mat3x3;\n\ttypedef mat<3, 4, int64, lowp>\t\tlowp_i64mat3x4;\n\ttypedef mat<4, 2, int64, lowp>\t\tlowp_i64mat4x2;\n\ttypedef mat<4, 3, int64, lowp>\t\tlowp_i64mat4x3;\n\ttypedef mat<4, 4, int64, lowp>\t\tlowp_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, mediump>\tmediump_i64mat2x2;\n\ttypedef mat<2, 3, int64, mediump>\tmediump_i64mat2x3;\n\ttypedef mat<2, 4, int64, mediump>\tmediump_i64mat2x4;\n\ttypedef mat<3, 2, int64, mediump>\tmediump_i64mat3x2;\n\ttypedef mat<3, 3, int64, mediump>\tmediump_i64mat3x3;\n\ttypedef mat<3, 4, int64, mediump>\tmediump_i64mat3x4;\n\ttypedef mat<4, 2, int64, mediump>\tmediump_i64mat4x2;\n\ttypedef mat<4, 3, int64, mediump>\tmediump_i64mat4x3;\n\ttypedef mat<4, 4, int64, mediump>\tmediump_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, highp>\t\thighp_i64mat2x2;\n\ttypedef mat<2, 3, int64, highp>\t\thighp_i64mat2x3;\n\ttypedef mat<2, 4, int64, highp>\t\thighp_i64mat2x4;\n\ttypedef mat<3, 2, int64, highp>\t\thighp_i64mat3x2;\n\ttypedef mat<3, 3, int64, highp>\t\thighp_i64mat3x3;\n\ttypedef mat<3, 4, int64, highp>\t\thighp_i64mat3x4;\n\ttypedef mat<4, 2, int64, highp>\t\thighp_i64mat4x2;\n\ttypedef mat<4, 3, int64, highp>\t\thighp_i64mat4x3;\n\ttypedef mat<4, 4, int64, highp>\t\thighp_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, defaultp>\ti64mat2x2;\n\ttypedef mat<2, 3, int64, defaultp>\ti64mat2x3;\n\ttypedef mat<2, 4, int64, defaultp>\ti64mat2x4;\n\ttypedef mat<3, 2, int64, defaultp>\ti64mat3x2;\n\ttypedef mat<3, 3, int64, defaultp>\ti64mat3x3;\n\ttypedef mat<3, 4, int64, defaultp>\ti64mat3x4;\n\ttypedef mat<4, 2, int64, defaultp>\ti64mat4x2;\n\ttypedef mat<4, 3, int64, defaultp>\ti64mat4x3;\n\ttypedef mat<4, 4, int64, defaultp>\ti64mat4x4;\n\n\n\t// Unsigned integer matrix MxN\n\n\ttypedef mat<2, 2, uint, lowp>\t\tlowp_umat2x2;\n\ttypedef mat<2, 3, uint, lowp>\t\tlowp_umat2x3;\n\ttypedef mat<2, 4, uint, lowp>\t\tlowp_umat2x4;\n\ttypedef mat<3, 2, uint, lowp>\t\tlowp_umat3x2;\n\ttypedef mat<3, 3, uint, lowp>\t\tlowp_umat3x3;\n\ttypedef mat<3, 4, uint, lowp>\t\tlowp_umat3x4;\n\ttypedef mat<4, 2, uint, lowp>\t\tlowp_umat4x2;\n\ttypedef mat<4, 3, uint, lowp>\t\tlowp_umat4x3;\n\ttypedef mat<4, 4, uint, lowp>\t\tlowp_umat4x4;\n\n\ttypedef mat<2, 2, uint, mediump>\tmediump_umat2x2;\n\ttypedef mat<2, 3, uint, mediump>\tmediump_umat2x3;\n\ttypedef mat<2, 4, uint, mediump>\tmediump_umat2x4;\n\ttypedef mat<3, 2, uint, mediump>\tmediump_umat3x2;\n\ttypedef mat<3, 3, uint, mediump>\tmediump_umat3x3;\n\ttypedef mat<3, 4, uint, mediump>\tmediump_umat3x4;\n\ttypedef mat<4, 2, uint, mediump>\tmediump_umat4x2;\n\ttypedef mat<4, 3, uint, mediump>\tmediump_umat4x3;\n\ttypedef mat<4, 4, uint, mediump>\tmediump_umat4x4;\n\n\ttypedef mat<2, 2, uint, highp>\t\thighp_umat2x2;\n\ttypedef mat<2, 3, uint, highp>\t\thighp_umat2x3;\n\ttypedef mat<2, 4, uint, highp>\t\thighp_umat2x4;\n\ttypedef mat<3, 2, uint, highp>\t\thighp_umat3x2;\n\ttypedef mat<3, 3, uint, highp>\t\thighp_umat3x3;\n\ttypedef mat<3, 4, uint, highp>\t\thighp_umat3x4;\n\ttypedef mat<4, 2, uint, highp>\t\thighp_umat4x2;\n\ttypedef mat<4, 3, uint, highp>\t\thighp_umat4x3;\n\ttypedef mat<4, 4, uint, highp>\t\thighp_umat4x4;\n\n\ttypedef mat<2, 2, uint, defaultp>\tumat2x2;\n\ttypedef mat<2, 3, uint, defaultp>\tumat2x3;\n\ttypedef mat<2, 4, uint, defaultp>\tumat2x4;\n\ttypedef mat<3, 2, uint, defaultp>\tumat3x2;\n\ttypedef mat<3, 3, uint, defaultp>\tumat3x3;\n\ttypedef mat<3, 4, uint, defaultp>\tumat3x4;\n\ttypedef mat<4, 2, uint, defaultp>\tumat4x2;\n\ttypedef mat<4, 3, uint, defaultp>\tumat4x3;\n\ttypedef mat<4, 4, uint, defaultp>\tumat4x4;\n\n\n\ttypedef mat<2, 2, uint8, lowp>\t\tlowp_u8mat2x2;\n\ttypedef mat<2, 3, uint8, lowp>\t\tlowp_u8mat2x3;\n\ttypedef mat<2, 4, uint8, lowp>\t\tlowp_u8mat2x4;\n\ttypedef mat<3, 2, uint8, lowp>\t\tlowp_u8mat3x2;\n\ttypedef mat<3, 3, uint8, lowp>\t\tlowp_u8mat3x3;\n\ttypedef mat<3, 4, uint8, lowp>\t\tlowp_u8mat3x4;\n\ttypedef mat<4, 2, uint8, lowp>\t\tlowp_u8mat4x2;\n\ttypedef mat<4, 3, uint8, lowp>\t\tlowp_u8mat4x3;\n\ttypedef mat<4, 4, uint8, lowp>\t\tlowp_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, mediump>\tmediump_u8mat2x2;\n\ttypedef mat<2, 3, uint8, mediump>\tmediump_u8mat2x3;\n\ttypedef mat<2, 4, uint8, mediump>\tmediump_u8mat2x4;\n\ttypedef mat<3, 2, uint8, mediump>\tmediump_u8mat3x2;\n\ttypedef mat<3, 3, uint8, mediump>\tmediump_u8mat3x3;\n\ttypedef mat<3, 4, uint8, mediump>\tmediump_u8mat3x4;\n\ttypedef mat<4, 2, uint8, mediump>\tmediump_u8mat4x2;\n\ttypedef mat<4, 3, uint8, mediump>\tmediump_u8mat4x3;\n\ttypedef mat<4, 4, uint8, mediump>\tmediump_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, highp>\t\thighp_u8mat2x2;\n\ttypedef mat<2, 3, uint8, highp>\t\thighp_u8mat2x3;\n\ttypedef mat<2, 4, uint8, highp>\t\thighp_u8mat2x4;\n\ttypedef mat<3, 2, uint8, highp>\t\thighp_u8mat3x2;\n\ttypedef mat<3, 3, uint8, highp>\t\thighp_u8mat3x3;\n\ttypedef mat<3, 4, uint8, highp>\t\thighp_u8mat3x4;\n\ttypedef mat<4, 2, uint8, highp>\t\thighp_u8mat4x2;\n\ttypedef mat<4, 3, uint8, highp>\t\thighp_u8mat4x3;\n\ttypedef mat<4, 4, uint8, highp>\t\thighp_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, defaultp>\tu8mat2x2;\n\ttypedef mat<2, 3, uint8, defaultp>\tu8mat2x3;\n\ttypedef mat<2, 4, uint8, defaultp>\tu8mat2x4;\n\ttypedef mat<3, 2, uint8, defaultp>\tu8mat3x2;\n\ttypedef mat<3, 3, uint8, defaultp>\tu8mat3x3;\n\ttypedef mat<3, 4, uint8, defaultp>\tu8mat3x4;\n\ttypedef mat<4, 2, uint8, defaultp>\tu8mat4x2;\n\ttypedef mat<4, 3, uint8, defaultp>\tu8mat4x3;\n\ttypedef mat<4, 4, uint8, defaultp>\tu8mat4x4;\n\n\n\ttypedef mat<2, 2, uint16, lowp>\t\tlowp_u16mat2x2;\n\ttypedef mat<2, 3, uint16, lowp>\t\tlowp_u16mat2x3;\n\ttypedef mat<2, 4, uint16, lowp>\t\tlowp_u16mat2x4;\n\ttypedef mat<3, 2, uint16, lowp>\t\tlowp_u16mat3x2;\n\ttypedef mat<3, 3, uint16, lowp>\t\tlowp_u16mat3x3;\n\ttypedef mat<3, 4, uint16, lowp>\t\tlowp_u16mat3x4;\n\ttypedef mat<4, 2, uint16, lowp>\t\tlowp_u16mat4x2;\n\ttypedef mat<4, 3, uint16, lowp>\t\tlowp_u16mat4x3;\n\ttypedef mat<4, 4, uint16, lowp>\t\tlowp_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, mediump>\tmediump_u16mat2x2;\n\ttypedef mat<2, 3, uint16, mediump>\tmediump_u16mat2x3;\n\ttypedef mat<2, 4, uint16, mediump>\tmediump_u16mat2x4;\n\ttypedef mat<3, 2, uint16, mediump>\tmediump_u16mat3x2;\n\ttypedef mat<3, 3, uint16, mediump>\tmediump_u16mat3x3;\n\ttypedef mat<3, 4, uint16, mediump>\tmediump_u16mat3x4;\n\ttypedef mat<4, 2, uint16, mediump>\tmediump_u16mat4x2;\n\ttypedef mat<4, 3, uint16, mediump>\tmediump_u16mat4x3;\n\ttypedef mat<4, 4, uint16, mediump>\tmediump_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, highp>\thighp_u16mat2x2;\n\ttypedef mat<2, 3, uint16, highp>\thighp_u16mat2x3;\n\ttypedef mat<2, 4, uint16, highp>\thighp_u16mat2x4;\n\ttypedef mat<3, 2, uint16, highp>\thighp_u16mat3x2;\n\ttypedef mat<3, 3, uint16, highp>\thighp_u16mat3x3;\n\ttypedef mat<3, 4, uint16, highp>\thighp_u16mat3x4;\n\ttypedef mat<4, 2, uint16, highp>\thighp_u16mat4x2;\n\ttypedef mat<4, 3, uint16, highp>\thighp_u16mat4x3;\n\ttypedef mat<4, 4, uint16, highp>\thighp_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, defaultp>\tu16mat2x2;\n\ttypedef mat<2, 3, uint16, defaultp>\tu16mat2x3;\n\ttypedef mat<2, 4, uint16, defaultp>\tu16mat2x4;\n\ttypedef mat<3, 2, uint16, defaultp>\tu16mat3x2;\n\ttypedef mat<3, 3, uint16, defaultp>\tu16mat3x3;\n\ttypedef mat<3, 4, uint16, defaultp>\tu16mat3x4;\n\ttypedef mat<4, 2, uint16, defaultp>\tu16mat4x2;\n\ttypedef mat<4, 3, uint16, defaultp>\tu16mat4x3;\n\ttypedef mat<4, 4, uint16, defaultp>\tu16mat4x4;\n\n\n\ttypedef mat<2, 2, uint32, lowp>\t\tlowp_u32mat2x2;\n\ttypedef mat<2, 3, uint32, lowp>\t\tlowp_u32mat2x3;\n\ttypedef mat<2, 4, uint32, lowp>\t\tlowp_u32mat2x4;\n\ttypedef mat<3, 2, uint32, lowp>\t\tlowp_u32mat3x2;\n\ttypedef mat<3, 3, uint32, lowp>\t\tlowp_u32mat3x3;\n\ttypedef mat<3, 4, uint32, lowp>\t\tlowp_u32mat3x4;\n\ttypedef mat<4, 2, uint32, lowp>\t\tlowp_u32mat4x2;\n\ttypedef mat<4, 3, uint32, lowp>\t\tlowp_u32mat4x3;\n\ttypedef mat<4, 4, uint32, lowp>\t\tlowp_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, mediump>\tmediump_u32mat2x2;\n\ttypedef mat<2, 3, uint32, mediump>\tmediump_u32mat2x3;\n\ttypedef mat<2, 4, uint32, mediump>\tmediump_u32mat2x4;\n\ttypedef mat<3, 2, uint32, mediump>\tmediump_u32mat3x2;\n\ttypedef mat<3, 3, uint32, mediump>\tmediump_u32mat3x3;\n\ttypedef mat<3, 4, uint32, mediump>\tmediump_u32mat3x4;\n\ttypedef mat<4, 2, uint32, mediump>\tmediump_u32mat4x2;\n\ttypedef mat<4, 3, uint32, mediump>\tmediump_u32mat4x3;\n\ttypedef mat<4, 4, uint32, mediump>\tmediump_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, highp>\thighp_u32mat2x2;\n\ttypedef mat<2, 3, uint32, highp>\thighp_u32mat2x3;\n\ttypedef mat<2, 4, uint32, highp>\thighp_u32mat2x4;\n\ttypedef mat<3, 2, uint32, highp>\thighp_u32mat3x2;\n\ttypedef mat<3, 3, uint32, highp>\thighp_u32mat3x3;\n\ttypedef mat<3, 4, uint32, highp>\thighp_u32mat3x4;\n\ttypedef mat<4, 2, uint32, highp>\thighp_u32mat4x2;\n\ttypedef mat<4, 3, uint32, highp>\thighp_u32mat4x3;\n\ttypedef mat<4, 4, uint32, highp>\thighp_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, defaultp>\tu32mat2x2;\n\ttypedef mat<2, 3, uint32, defaultp>\tu32mat2x3;\n\ttypedef mat<2, 4, uint32, defaultp>\tu32mat2x4;\n\ttypedef mat<3, 2, uint32, defaultp>\tu32mat3x2;\n\ttypedef mat<3, 3, uint32, defaultp>\tu32mat3x3;\n\ttypedef mat<3, 4, uint32, defaultp>\tu32mat3x4;\n\ttypedef mat<4, 2, uint32, defaultp>\tu32mat4x2;\n\ttypedef mat<4, 3, uint32, defaultp>\tu32mat4x3;\n\ttypedef mat<4, 4, uint32, defaultp>\tu32mat4x4;\n\n\n\ttypedef mat<2, 2, uint64, lowp>\t\tlowp_u64mat2x2;\n\ttypedef mat<2, 3, uint64, lowp>\t\tlowp_u64mat2x3;\n\ttypedef mat<2, 4, uint64, lowp>\t\tlowp_u64mat2x4;\n\ttypedef mat<3, 2, uint64, lowp>\t\tlowp_u64mat3x2;\n\ttypedef mat<3, 3, uint64, lowp>\t\tlowp_u64mat3x3;\n\ttypedef mat<3, 4, uint64, lowp>\t\tlowp_u64mat3x4;\n\ttypedef mat<4, 2, uint64, lowp>\t\tlowp_u64mat4x2;\n\ttypedef mat<4, 3, uint64, lowp>\t\tlowp_u64mat4x3;\n\ttypedef mat<4, 4, uint64, lowp>\t\tlowp_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, mediump>\tmediump_u64mat2x2;\n\ttypedef mat<2, 3, uint64, mediump>\tmediump_u64mat2x3;\n\ttypedef mat<2, 4, uint64, mediump>\tmediump_u64mat2x4;\n\ttypedef mat<3, 2, uint64, mediump>\tmediump_u64mat3x2;\n\ttypedef mat<3, 3, uint64, mediump>\tmediump_u64mat3x3;\n\ttypedef mat<3, 4, uint64, mediump>\tmediump_u64mat3x4;\n\ttypedef mat<4, 2, uint64, mediump>\tmediump_u64mat4x2;\n\ttypedef mat<4, 3, uint64, mediump>\tmediump_u64mat4x3;\n\ttypedef mat<4, 4, uint64, mediump>\tmediump_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, highp>\thighp_u64mat2x2;\n\ttypedef mat<2, 3, uint64, highp>\thighp_u64mat2x3;\n\ttypedef mat<2, 4, uint64, highp>\thighp_u64mat2x4;\n\ttypedef mat<3, 2, uint64, highp>\thighp_u64mat3x2;\n\ttypedef mat<3, 3, uint64, highp>\thighp_u64mat3x3;\n\ttypedef mat<3, 4, uint64, highp>\thighp_u64mat3x4;\n\ttypedef mat<4, 2, uint64, highp>\thighp_u64mat4x2;\n\ttypedef mat<4, 3, uint64, highp>\thighp_u64mat4x3;\n\ttypedef mat<4, 4, uint64, highp>\thighp_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, defaultp>\tu64mat2x2;\n\ttypedef mat<2, 3, uint64, defaultp>\tu64mat2x3;\n\ttypedef mat<2, 4, uint64, defaultp>\tu64mat2x4;\n\ttypedef mat<3, 2, uint64, defaultp>\tu64mat3x2;\n\ttypedef mat<3, 3, uint64, defaultp>\tu64mat3x3;\n\ttypedef mat<3, 4, uint64, defaultp>\tu64mat3x4;\n\ttypedef mat<4, 2, uint64, defaultp>\tu64mat4x2;\n\ttypedef mat<4, 3, uint64, defaultp>\tu64mat4x3;\n\ttypedef mat<4, 4, uint64, defaultp>\tu64mat4x4;\n\n\t// Quaternion\n\n\ttypedef qua<float, lowp>\t\t\tlowp_quat;\n\ttypedef qua<float, mediump>\t\t\tmediump_quat;\n\ttypedef qua<float, highp>\t\t\thighp_quat;\n\ttypedef qua<float, defaultp>\t\tquat;\n\n\ttypedef qua<float, lowp>\t\t\tlowp_fquat;\n\ttypedef qua<float, mediump>\t\t\tmediump_fquat;\n\ttypedef qua<float, highp>\t\t\thighp_fquat;\n\ttypedef qua<float, defaultp>\t\tfquat;\n\n\ttypedef qua<f32, lowp>\t\t\t\tlowp_f32quat;\n\ttypedef qua<f32, mediump>\t\t\tmediump_f32quat;\n\ttypedef qua<f32, highp>\t\t\t\thighp_f32quat;\n\ttypedef qua<f32, defaultp>\t\t\tf32quat;\n\n\ttypedef qua<double, lowp>\t\t\tlowp_dquat;\n\ttypedef qua<double, mediump>\t\tmediump_dquat;\n\ttypedef qua<double, highp>\t\t\thighp_dquat;\n\ttypedef qua<double, defaultp>\t\tdquat;\n\n\ttypedef qua<f64, lowp>\t\t\t\tlowp_f64quat;\n\ttypedef qua<f64, mediump>\t\t\tmediump_f64quat;\n\ttypedef qua<f64, highp>\t\t\t\thighp_f64quat;\n\ttypedef qua<f64, defaultp>\t\t\tf64quat;\n}//namespace glm\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/geometric.hpp",
    "content": "/// @ref core\n/// @file glm/geometric.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n///\n/// @defgroup core_func_geometric Geometric functions\n/// @ingroup core\n///\n/// These operate on vectors as vectors, not component-wise.\n///\n/// Include <glm/geometric.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_geometric\n\t/// @{\n\n\t/// Returns the length of x, i.e., sqrt(x * x).\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml\">GLSL length man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T length(vec<L, T, Q> const& x);\n\n\t/// Returns the distance between p0 and p1, i.e., length(p0 - p1).\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml\">GLSL distance man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);\n\n\t/// Returns the dot product of x and y, i.e., result = x * y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml\">GLSL dot man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the cross product of x and y.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml\">GLSL cross man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t/// Returns a vector in the same direction as x but with length of 1.\n\t/// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml\">GLSL normalize man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> normalize(vec<L, T, Q> const& x);\n\n\t/// If dot(Nref, I) < 0.0, return N, otherwise, return -N.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml\">GLSL faceforward man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> faceforward(\n\t\tvec<L, T, Q> const& N,\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& Nref);\n\n\t/// For the incident vector I and surface orientation N,\n\t/// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml\">GLSL reflect man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> reflect(\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& N);\n\n\t/// For the incident vector I and surface normal N,\n\t/// and the ratio of indices of refraction eta,\n\t/// return the refraction vector.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml\">GLSL refract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> refract(\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& N,\n\t\tT eta);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_geometric.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/glm.hpp",
    "content": "/// @ref core\n/// @file glm/glm.hpp\n///\n/// @mainpage OpenGL Mathematics (GLM)\n/// - Website: <a href=\"https://glm.g-truc.net\">glm.g-truc.net</a>\n/// - <a href=\"modules.html\">GLM API documentation</a>\n/// - <a href=\"https://github.com/g-truc/glm/blob/master/manual.md\">GLM Manual</a>\n///\n/// @defgroup core Core features\n///\n/// @brief Features that implement in C++ the GLSL specification as closely as possible.\n///\n/// The GLM core consists of C++ types that mirror GLSL types and\n/// C++ functions that mirror the GLSL functions.\n///\n/// The best documentation for GLM Core is the current GLSL specification,\n/// <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf\">version 4.2\n/// (pdf file)</a>.\n///\n/// GLM core functionalities require <glm/glm.hpp> to be included to be used.\n///\n///\n/// @defgroup core_vector Vector types\n///\n/// Vector types of two to four components with an exhaustive set of operators.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_vector_precision Vector types with precision qualifiers\n///\n/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs\n///\n/// GLSL allows defining qualifiers for particular variables.\n/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility,\n/// with OpenGL ES's GLSL, these qualifiers do have an effect.\n///\n/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing:\n/// a number of typedefs that use a particular qualifier.\n///\n/// None of these types make any guarantees about the actual qualifier used.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_matrix Matrix types\n///\n/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.\n/// These types have exhaustive sets of operators.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_matrix_precision Matrix types with precision qualifiers\n///\n/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs\n///\n/// GLSL allows defining qualifiers for particular variables.\n/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility,\n/// with OpenGL ES's GLSL, these qualifiers do have an effect.\n///\n/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing:\n/// a number of typedefs that use a particular qualifier.\n///\n/// None of these types make any guarantees about the actual qualifier used.\n///\n/// @ingroup core\n///\n///\n/// @defgroup ext Stable extensions\n///\n/// @brief Additional features not specified by GLSL specification.\n///\n/// EXT extensions are fully tested and documented.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions at once by\n/// including <glm/ext.hpp>. Otherwise, each extension needs to be included  a specific file.\n///\n///\n/// @defgroup gtc Recommended extensions\n///\n/// @brief Additional features not specified by GLSL specification.\n///\n/// GTC extensions aim to be stable with tests and documentation.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions at once by\n/// including <glm/ext.hpp>. Otherwise, each extension needs to be included  a specific file.\n///\n///\n/// @defgroup gtx Experimental extensions\n///\n/// @brief Experimental features not specified by GLSL specification.\n///\n/// Experimental extensions are useful functions and types, but the development of\n/// their API and functionality is not necessarily stable. They can change\n/// substantially between versions. Backwards compatibility is not much of an issue\n/// for them.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions\n/// at once by including <glm/ext.hpp>. Otherwise, each extension needs to be\n/// included  a specific file.\n///\n\n#include \"detail/_fixes.hpp\"\n\n#include \"detail/setup.hpp\"\n\n#pragma once\n\n#include <cmath>\n#include <climits>\n#include <cfloat>\n#include <limits>\n#include <cassert>\n#include \"fwd.hpp\"\n\n#include \"vec2.hpp\"\n#include \"vec3.hpp\"\n#include \"vec4.hpp\"\n#include \"mat2x2.hpp\"\n#include \"mat2x3.hpp\"\n#include \"mat2x4.hpp\"\n#include \"mat3x2.hpp\"\n#include \"mat3x3.hpp\"\n#include \"mat3x4.hpp\"\n#include \"mat4x2.hpp\"\n#include \"mat4x3.hpp\"\n#include \"mat4x4.hpp\"\n\n#include \"trigonometric.hpp\"\n#include \"exponential.hpp\"\n#include \"common.hpp\"\n#include \"packing.hpp\"\n#include \"geometric.hpp\"\n#include \"matrix.hpp\"\n#include \"vector_relational.hpp\"\n#include \"integer.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/bitfield.hpp",
    "content": "/// @ref gtc_bitfield\n/// @file glm/gtc/bitfield.hpp\n///\n/// @see core (dependence)\n/// @see gtc_bitfield (dependence)\n///\n/// @defgroup gtc_bitfield GLM_GTC_bitfield\n/// @ingroup gtc\n///\n/// Include <glm/gtc/bitfield.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#include \"../detail/setup.hpp\"\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"type_precision.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_bitfield extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_bitfield\n\t/// @{\n\n\t/// Build a mask of 'count' bits\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType mask(genIUType Bits);\n\n\t/// Build a mask of 'count' bits\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mask(vec<L, T, Q> const& v);\n\n\t/// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift);\n\n\t/// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldRotateRight(vec<L, T, Q> const& In, int Shift);\n\n\t/// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift);\n\n\t/// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldRotateLeft(vec<L, T, Q> const& In, int Shift);\n\n\t/// Set to 1 a range of bits.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount);\n\n\t/// Set to 1 a range of bits.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldFillOne(vec<L, T, Q> const& Value, int FirstBit, int BitCount);\n\n\t/// Set to 0 a range of bits.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount);\n\n\t/// Set to 0 a range of bits.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldFillZero(vec<L, T, Q> const& Value, int FirstBit, int BitCount);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);\n\n\t/// @}\n} //namespace glm\n\n#include \"bitfield.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/bitfield.inl",
    "content": "/// @ref gtc_bitfield\n\n#include \"../simd/integer.h\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y);\n\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z);\n\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w);\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y)\n\t{\n\t\tglm::uint16 REG1(x);\n\t\tglm::uint16 REG2(y);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint16>(0x0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint16>(0x0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint16>(0x3333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint16>(0x3333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint16>(0x5555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint16>(0x5555);\n\n\t\treturn REG1 | static_cast<glm::uint16>(REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint32>(0x00FF00FF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint32>(0x00FF00FF);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint32>(0x0F0F0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint32>(0x0F0F0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint32>(0x33333333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint32>(0x33333333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint32>(0x55555555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint32>(0x55555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x3333333333333333ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x3333333333333333ull);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint64>(0x5555555555555555ull);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint64>(0x5555555555555555ull);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\t\tglm::uint32 REG3(z);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint32>(0xFF0000FFu);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint32>(0xFF0000FFu);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint32>(0xFF0000FFu);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint32>(0x0F00F00Fu);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint32>(0x0F00F00Fu);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint32>(0x0F00F00Fu);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint32>(0xC30C30C3u);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint32>(0xC30C30C3u);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint32>(0xC30C30C3u);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint32>(0x49249249u);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint32>(0x49249249u);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint32>(0x49249249u);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\n\t\tREG1 = ((REG1 << 32) | REG1) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG2 = ((REG2 << 32) | REG2) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG3 = ((REG3 << 32) | REG3) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint64>(0x9249249249249249ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\n\t\tREG1 = ((REG1 << 32) | REG1) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG2 = ((REG2 << 32) | REG2) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG3 = ((REG3 << 32) | REG3) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint64>(0x9249249249249249ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\t\tglm::uint32 REG3(z);\n\t\tglm::uint32 REG4(w);\n\n\t\tREG1 = ((REG1 << 12) | REG1) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG2 = ((REG2 << 12) | REG2) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG3 = ((REG3 << 12) | REG3) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG4 = ((REG4 << 12) | REG4) & static_cast<glm::uint32>(0x000F000Fu);\n\n\t\tREG1 = ((REG1 <<  6) | REG1) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG2 = ((REG2 <<  6) | REG2) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG3 = ((REG3 <<  6) | REG3) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG4 = ((REG4 <<  6) | REG4) & static_cast<glm::uint32>(0x03030303u);\n\n\t\tREG1 = ((REG1 <<  3) | REG1) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG2 = ((REG2 <<  3) | REG2) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG3 = ((REG3 <<  3) | REG3) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG4 = ((REG4 <<  3) | REG4) & static_cast<glm::uint32>(0x11111111u);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\t\tglm::uint64 REG4(w);\n\n\t\tREG1 = ((REG1 << 24) | REG1) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG2 = ((REG2 << 24) | REG2) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG3 = ((REG3 << 24) | REG3) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG4 = ((REG4 << 24) | REG4) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\n\t\tREG1 = ((REG1 << 12) | REG1) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG2 = ((REG2 << 12) | REG2) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG3 = ((REG3 << 12) | REG3) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG4 = ((REG4 << 12) | REG4) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\n\t\tREG1 = ((REG1 <<  6) | REG1) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG2 = ((REG2 <<  6) | REG2) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG3 = ((REG3 <<  6) | REG3) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG4 = ((REG4 <<  6) | REG4) & static_cast<glm::uint64>(0x0303030303030303ull);\n\n\t\tREG1 = ((REG1 <<  3) | REG1) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG2 = ((REG2 <<  3) | REG2) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG3 = ((REG3 <<  3) | REG3) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG4 = ((REG4 <<  3) | REG4) & static_cast<glm::uint64>(0x1111111111111111ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);\n\t}\n}//namespace detail\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType mask(genIUType Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'mask' accepts only integer values\");\n\n\t\treturn Bits >= sizeof(genIUType) * 8 ? ~static_cast<genIUType>(0) : (static_cast<genIUType>(1) << Bits) - static_cast<genIUType>(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mask(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'mask' accepts only integer values\");\n\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(mask, v);\n\t}\n\n\ttemplate<typename genIType>\n\tGLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, \"'bitfieldRotateRight' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<genIType>(sizeof(genIType) * 8);\n\t\treturn (In << static_cast<genIType>(Shift)) | (In >> static_cast<genIType>(BitSize - Shift));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldRotateRight(vec<L, T, Q> const& In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldRotateRight' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<int>(sizeof(T) * 8);\n\t\treturn (In << static_cast<T>(Shift)) | (In >> static_cast<T>(BitSize - Shift));\n\t}\n\n\ttemplate<typename genIType>\n\tGLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, \"'bitfieldRotateLeft' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<genIType>(sizeof(genIType) * 8);\n\t\treturn (In >> static_cast<genIType>(Shift)) | (In << static_cast<genIType>(BitSize - Shift));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldRotateLeft(vec<L, T, Q> const& In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldRotateLeft' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<int>(sizeof(T) * 8);\n\t\treturn (In >> static_cast<T>(Shift)) | (In << static_cast<T>(BitSize - Shift));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value | static_cast<genIUType>(mask(BitCount) << FirstBit);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldFillOne(vec<L, T, Q> const& Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value | static_cast<T>(mask(BitCount) << FirstBit);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value & static_cast<genIUType>(~(mask(BitCount) << FirstBit));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldFillZero(vec<L, T, Q> const& Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value & static_cast<T>(~(mask(BitCount) << FirstBit));\n\t}\n\n\tGLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint16>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint16>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x)\n\t{\n\t\tuint16 REG1(x);\n\t\tuint16 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<uint16>(0x5555);\n\t\tREG2 = REG2 & static_cast<uint16>(0x5555);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<uint16>(0x3333);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<uint16>(0x3333);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<uint16>(0x0F0F);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<uint16>(0x0F0F);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<uint16>(0x00FF);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<uint16>(0x00FF);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<uint16>(0xFFFF);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<uint16>(0xFFFF);\n\n\t\treturn glm::u8vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint32>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint32>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<glm::uint32>(0x55555555);\n\t\tREG2 = REG2 & static_cast<glm::uint32>(0x55555555);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<glm::uint32>(0x33333333);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<glm::uint32>(0x33333333);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<glm::uint32>(0x0F0F0F0F);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<glm::uint32>(0x0F0F0F0F);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<glm::uint32>(0x00FF00FF);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<glm::uint32>(0x00FF00FF);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<glm::uint32>(0x0000FFFF);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<glm::uint32>(0x0000FFFF);\n\n\t\treturn glm::u16vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y)\n\t{\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<glm::uint64>(0x5555555555555555ull);\n\t\tREG2 = REG2 & static_cast<glm::uint64>(0x5555555555555555ull);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<glm::uint64>(0x3333333333333333ull);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<glm::uint64>(0x3333333333333333ull);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\n\t\tREG1 = ((REG1 >> 16) | REG1) & static_cast<glm::uint64>(0x00000000FFFFFFFFull);\n\t\tREG2 = ((REG2 >> 16) | REG2) & static_cast<glm::uint64>(0x00000000FFFFFFFFull);\n\n\t\treturn glm::u32vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y, sign_z, sign_w;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tsign_w.i = w;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(x, y, z, w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(v.x, v.y, v.z, v.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y, sign_z, sign_w;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tsign_w.i = w;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint64>(x, y, z, w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint64>(v.x, v.y, v.z, v.w);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/color_space.hpp",
    "content": "/// @ref gtc_color_space\n/// @file glm/gtc/color_space.hpp\n///\n/// @see core (dependence)\n/// @see gtc_color_space (dependence)\n///\n/// @defgroup gtc_color_space GLM_GTC_color_space\n/// @ingroup gtc\n///\n/// Include <glm/gtc/color_space.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../exponential.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_color_space extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_color_space\n\t/// @{\n\n\t/// Convert a linear color to sRGB color using a standard gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear);\n\n\t/// Convert a linear color to sRGB color using a custom gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear, T Gamma);\n\n\t/// Convert a sRGB color to linear color using a standard gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB);\n\n\t/// Convert a sRGB color to linear color using a custom gamma correction.\n\t// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB, T Gamma);\n\n\t/// @}\n} //namespace glm\n\n#include \"color_space.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/color_space.inl",
    "content": "/// @ref gtc_color_space\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_rgbToSrgb\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& ColorRGB, T GammaCorrection)\n\t\t{\n\t\t\tvec<L, T, Q> const ClampedColor(clamp(ColorRGB, static_cast<T>(0), static_cast<T>(1)));\n\n\t\t\treturn mix(\n\t\t\t\tpow(ClampedColor, vec<L, T, Q>(GammaCorrection)) * static_cast<T>(1.055) - static_cast<T>(0.055),\n\t\t\t\tClampedColor * static_cast<T>(12.92),\n\t\t\t\tlessThan(ClampedColor, vec<L, T, Q>(static_cast<T>(0.0031308))));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_rgbToSrgb<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection)\n\t\t{\n\t\t\treturn vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_srgbToRgb\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& ColorSRGB, T Gamma)\n\t\t{\n\t\t\treturn mix(\n\t\t\t\tpow((ColorSRGB + static_cast<T>(0.055)) * static_cast<T>(0.94786729857819905213270142180095), vec<L, T, Q>(Gamma)),\n\t\t\t\tColorSRGB * static_cast<T>(0.07739938080495356037151702786378),\n\t\t\t\tlessThanEqual(ColorSRGB, vec<L, T, Q>(static_cast<T>(0.04045))));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_srgbToRgb<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma)\n\t\t{\n\t\t\treturn vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear)\n\t{\n\t\treturn detail::compute_rgbToSrgb<L, T, Q>::call(ColorLinear, static_cast<T>(0.41666));\n\t}\n\n\t// Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear)\n\t{\n\t\tvec<3, float, lowp> S1 = sqrt(ColorLinear);\n\t\tvec<3, float, lowp> S2 = sqrt(S1);\n\t\tvec<3, float, lowp> S3 = sqrt(S2);\n\t\treturn 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear, T Gamma)\n\t{\n\t\treturn detail::compute_rgbToSrgb<L, T, Q>::call(ColorLinear, static_cast<T>(1) / Gamma);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB)\n\t{\n\t\treturn detail::compute_srgbToRgb<L, T, Q>::call(ColorSRGB, static_cast<T>(2.4));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB, T Gamma)\n\t{\n\t\treturn detail::compute_srgbToRgb<L, T, Q>::call(ColorSRGB, Gamma);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/constants.hpp",
    "content": "/// @ref gtc_constants\n/// @file glm/gtc/constants.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_constants GLM_GTC_constants\n/// @ingroup gtc\n///\n/// Include <glm/gtc/constants.hpp> to use the features of this extension.\n///\n/// Provide a list of constants and precomputed useful values.\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_constants extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_constants\n\t/// @{\n\n\t/// Return 0.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType zero();\n\n\t/// Return 1.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one();\n\n\t/// Return pi * 2.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_pi();\n\n\t/// Return square root of pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_pi();\n\n\t/// Return pi / 2.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType half_pi();\n\n\t/// Return pi / 2 * 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi();\n\n\t/// Return pi / 4.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi();\n\n\t/// Return 1 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi();\n\n\t/// Return 1 / (pi * 2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi();\n\n\t/// Return 2 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi();\n\n\t/// Return 4 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi();\n\n\t/// Return 2 / sqrt(pi).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi();\n\n\t/// Return 1 / sqrt(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two();\n\n\t/// Return sqrt(pi / 2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi();\n\n\t/// Return sqrt(2 * pi).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi();\n\n\t/// Return sqrt(ln(4)).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four();\n\n\t/// Return e constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType e();\n\n\t/// Return Euler's constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType euler();\n\n\t/// Return sqrt(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_two();\n\n\t/// Return sqrt(3).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_three();\n\n\t/// Return sqrt(5).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_five();\n\n\t/// Return ln(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_two();\n\n\t/// Return ln(10).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten();\n\n\t/// Return ln(ln(2)).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two();\n\n\t/// Return 1 / 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType third();\n\n\t/// Return 2 / 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds();\n\n\t/// Return the golden ratio constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio();\n\n\t/// @}\n} //namespace glm\n\n#include \"constants.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/constants.inl",
    "content": "/// @ref gtc_constants\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero()\n\t{\n\t\treturn genType(0);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one()\n\t{\n\t\treturn genType(1);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi()\n\t{\n\t\treturn genType(6.28318530717958647692528676655900576);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi()\n\t{\n\t\treturn genType(1.772453850905516027);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi()\n\t{\n\t\treturn genType(1.57079632679489661923132169163975144);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi()\n\t{\n\t\treturn genType(4.71238898038468985769396507491925432);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi()\n\t{\n\t\treturn genType(0.785398163397448309615660845819875721);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi()\n\t{\n\t\treturn genType(0.318309886183790671537767526745028724);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi()\n\t{\n\t\treturn genType(0.159154943091895335768883763372514362);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi()\n\t{\n\t\treturn genType(0.636619772367581343075535053490057448);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi()\n\t{\n\t\treturn genType(1.273239544735162686151070106980114898);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi()\n\t{\n\t\treturn genType(1.12837916709551257389615890312154517);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two()\n\t{\n\t\treturn genType(0.707106781186547524400844362104849039);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi()\n\t{\n\t\treturn genType(1.253314137315500251);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi()\n\t{\n\t\treturn genType(2.506628274631000502);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four()\n\t{\n\t\treturn genType(1.17741002251547469);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e()\n\t{\n\t\treturn genType(2.71828182845904523536);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler()\n\t{\n\t\treturn genType(0.577215664901532860606);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two()\n\t{\n\t\treturn genType(1.41421356237309504880168872420969808);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three()\n\t{\n\t\treturn genType(1.73205080756887729352744634150587236);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five()\n\t{\n\t\treturn genType(2.23606797749978969640917366873127623);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two()\n\t{\n\t\treturn genType(0.693147180559945309417232121458176568);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten()\n\t{\n\t\treturn genType(2.30258509299404568401799145468436421);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two()\n\t{\n\t\treturn genType(-0.3665129205816643);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third()\n\t{\n\t\treturn genType(0.3333333333333333333333333333333333333333);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds()\n\t{\n\t\treturn genType(0.666666666666666666666666666666666666667);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio()\n\t{\n\t\treturn genType(1.61803398874989484820458683436563811);\n\t}\n\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/epsilon.hpp",
    "content": "/// @ref gtc_epsilon\n/// @file glm/gtc/epsilon.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_epsilon GLM_GTC_epsilon\n/// @ingroup gtc\n///\n/// Include <glm/gtc/epsilon.hpp> to use the features of this extension.\n///\n/// Comparison functions for a user defined epsilon values.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_epsilon extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_epsilon\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// @}\n}//namespace glm\n\n#include \"epsilon.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/epsilon.inl",
    "content": "/// @ref gtc_epsilon\n\n// Dependency:\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonEqual\n\t(\n\t\tfloat const& x,\n\t\tfloat const& y,\n\t\tfloat const& epsilon\n\t)\n\t{\n\t\treturn abs(x - y) < epsilon;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonEqual\n\t(\n\t\tdouble const& x,\n\t\tdouble const& y,\n\t\tdouble const& epsilon\n\t)\n\t{\n\t\treturn abs(x - y) < epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon)\n\t{\n\t\treturn lessThan(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon)\n\t{\n\t\treturn lessThan(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon)\n\t{\n\t\treturn abs(x - y) >= epsilon;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon)\n\t{\n\t\treturn abs(x - y) >= epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon)\n\t{\n\t\treturn greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon)\n\t{\n\t\treturn greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn lessThan(abs(v), vec<4, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn greaterThanEqual(abs(v), vec<4, T, Q>(epsilon));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/integer.hpp",
    "content": "/// @ref gtc_integer\n/// @file glm/gtc/integer.hpp\n///\n/// @see core (dependence)\n/// @see gtc_integer (dependence)\n///\n/// @defgroup gtc_integer GLM_GTC_integer\n/// @ingroup gtc\n///\n/// Include <glm/gtc/integer.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../common.hpp\"\n#include \"../integer.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/scalar_common.hpp\"\n#include \"../ext/vector_common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_integer\n\t/// @{\n\n\t/// Returns the log2 of x for integer values. Useful to compute mipmap count from the texture size.\n\t/// @see gtc_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType log2(genIUType x);\n\n\t/// @}\n} //namespace glm\n\n#include \"integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/integer.inl",
    "content": "/// @ref gtc_integer\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_log2<L, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\t//Equivalent to return findMSB(vec); but save one function call in ASM with VC\n\t\t\t//return findMSB(vec);\n\t\t\treturn vec<L, T, Q>(detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v));\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<qualifier Q, bool Aligned>\n\t\tstruct compute_log2<4, int, Q, false, Aligned>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v)\n\t\t\t{\n\t\t\t\tvec<4, int, Q> Result;\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.x), v.x);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.y), v.y);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.z), v.z);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.w), v.w);\n\t\t\t\treturn Result;\n\t\t\t}\n\t\t};\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_access.hpp",
    "content": "/// @ref gtc_matrix_access\n/// @file glm/gtc/matrix_access.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_access GLM_GTC_matrix_access\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_access.hpp> to use the features of this extension.\n///\n/// Defines functions to access rows or columns of a matrix easily.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_access extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_access\n\t/// @{\n\n\t/// Get a specific row of a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::row_type row(\n\t\tgenType const& m,\n\t\tlength_t index);\n\n\t/// Set a specific row to a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType row(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::row_type const& x);\n\n\t/// Get a specific column of a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::col_type column(\n\t\tgenType const& m,\n\t\tlength_t index);\n\n\t/// Set a specific column to a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType column(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::col_type const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_access.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_access.inl",
    "content": "/// @ref gtc_matrix_access\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType row\n\t(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::row_type const& x\n\t)\n\t{\n\t\tassert(index >= 0 && index < m[0].length());\n\n\t\tgenType Result = m;\n\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\tResult[i][index] = x[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER typename genType::row_type row\n\t(\n\t\tgenType const& m,\n\t\tlength_t index\n\t)\n\t{\n\t\tassert(index >= 0 && index < m[0].length());\n\n\t\ttypename genType::row_type Result(0);\n\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\tResult[i] = m[i][index];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType column\n\t(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::col_type const& x\n\t)\n\t{\n\t\tassert(index >= 0 && index < m.length());\n\n\t\tgenType Result = m;\n\t\tResult[index] = x;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER typename genType::col_type column\n\t(\n\t\tgenType const& m,\n\t\tlength_t index\n\t)\n\t{\n\t\tassert(index >= 0 && index < m.length());\n\n\t\treturn m[index];\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_integer.hpp",
    "content": "/// @ref gtc_matrix_integer\n/// @file glm/gtc/matrix_integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_integer\n\t/// @{\n\n\t/// High-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, highp>\t\t\t\thighp_imat2;\n\n\t/// High-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, highp>\t\t\t\thighp_imat3;\n\n\t/// High-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, highp>\t\t\t\thighp_imat4;\n\n\t/// High-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, highp>\t\t\t\thighp_imat2x2;\n\n\t/// High-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, highp>\t\t\t\thighp_imat2x3;\n\n\t/// High-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, highp>\t\t\t\thighp_imat2x4;\n\n\t/// High-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, highp>\t\t\t\thighp_imat3x2;\n\n\t/// High-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, highp>\t\t\t\thighp_imat3x3;\n\n\t/// High-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, highp>\t\t\t\thighp_imat3x4;\n\n\t/// High-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, highp>\t\t\t\thighp_imat4x2;\n\n\t/// High-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, highp>\t\t\t\thighp_imat4x3;\n\n\t/// High-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, highp>\t\t\t\thighp_imat4x4;\n\n\n\t/// Medium-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, mediump>\t\t\tmediump_imat2;\n\n\t/// Medium-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, mediump>\t\t\tmediump_imat3;\n\n\t/// Medium-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, mediump>\t\t\tmediump_imat4;\n\n\n\t/// Medium-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, mediump>\t\t\tmediump_imat2x2;\n\n\t/// Medium-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, mediump>\t\t\tmediump_imat2x3;\n\n\t/// Medium-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, mediump>\t\t\tmediump_imat2x4;\n\n\t/// Medium-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, mediump>\t\t\tmediump_imat3x2;\n\n\t/// Medium-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, mediump>\t\t\tmediump_imat3x3;\n\n\t/// Medium-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, mediump>\t\t\tmediump_imat3x4;\n\n\t/// Medium-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, mediump>\t\t\tmediump_imat4x2;\n\n\t/// Medium-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, mediump>\t\t\tmediump_imat4x3;\n\n\t/// Medium-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, mediump>\t\t\tmediump_imat4x4;\n\n\n\t/// Low-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, lowp>\t\t\t\tlowp_imat2;\n\n\t/// Low-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, lowp>\t\t\t\tlowp_imat3;\n\n\t/// Low-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, lowp>\t\t\t\tlowp_imat4;\n\n\n\t/// Low-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, lowp>\t\t\t\tlowp_imat2x2;\n\n\t/// Low-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, lowp>\t\t\t\tlowp_imat2x3;\n\n\t/// Low-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, lowp>\t\t\t\tlowp_imat2x4;\n\n\t/// Low-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, lowp>\t\t\t\tlowp_imat3x2;\n\n\t/// Low-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, lowp>\t\t\t\tlowp_imat3x3;\n\n\t/// Low-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, lowp>\t\t\t\tlowp_imat3x4;\n\n\t/// Low-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, lowp>\t\t\t\tlowp_imat4x2;\n\n\t/// Low-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, lowp>\t\t\t\tlowp_imat4x3;\n\n\t/// Low-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, lowp>\t\t\t\tlowp_imat4x4;\n\n\n\t/// High-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, highp>\t\t\t\thighp_umat2;\n\n\t/// High-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, highp>\t\t\t\thighp_umat3;\n\n\t/// High-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, highp>\t\t\t\thighp_umat4;\n\n\t/// High-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, highp>\t\t\t\thighp_umat2x2;\n\n\t/// High-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, highp>\t\t\t\thighp_umat2x3;\n\n\t/// High-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, highp>\t\t\t\thighp_umat2x4;\n\n\t/// High-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, highp>\t\t\t\thighp_umat3x2;\n\n\t/// High-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, highp>\t\t\t\thighp_umat3x3;\n\n\t/// High-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, highp>\t\t\t\thighp_umat3x4;\n\n\t/// High-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, highp>\t\t\t\thighp_umat4x2;\n\n\t/// High-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, highp>\t\t\t\thighp_umat4x3;\n\n\t/// High-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, highp>\t\t\t\thighp_umat4x4;\n\n\n\t/// Medium-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, mediump>\t\t\tmediump_umat2;\n\n\t/// Medium-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, mediump>\t\t\tmediump_umat3;\n\n\t/// Medium-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, mediump>\t\t\tmediump_umat4;\n\n\n\t/// Medium-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, mediump>\t\t\tmediump_umat2x2;\n\n\t/// Medium-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, mediump>\t\t\tmediump_umat2x3;\n\n\t/// Medium-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, mediump>\t\t\tmediump_umat2x4;\n\n\t/// Medium-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, mediump>\t\t\tmediump_umat3x2;\n\n\t/// Medium-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, mediump>\t\t\tmediump_umat3x3;\n\n\t/// Medium-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, mediump>\t\t\tmediump_umat3x4;\n\n\t/// Medium-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, mediump>\t\t\tmediump_umat4x2;\n\n\t/// Medium-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, mediump>\t\t\tmediump_umat4x3;\n\n\t/// Medium-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, mediump>\t\t\tmediump_umat4x4;\n\n\n\t/// Low-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, lowp>\t\t\t\tlowp_umat2;\n\n\t/// Low-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, lowp>\t\t\t\tlowp_umat3;\n\n\t/// Low-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, lowp>\t\t\t\tlowp_umat4;\n\n\n\t/// Low-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, lowp>\t\t\t\tlowp_umat2x2;\n\n\t/// Low-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, lowp>\t\t\t\tlowp_umat2x3;\n\n\t/// Low-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, lowp>\t\t\t\tlowp_umat2x4;\n\n\t/// Low-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, lowp>\t\t\t\tlowp_umat3x2;\n\n\t/// Low-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, lowp>\t\t\t\tlowp_umat3x3;\n\n\t/// Low-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, lowp>\t\t\t\tlowp_umat3x4;\n\n\t/// Low-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, lowp>\t\t\t\tlowp_umat4x2;\n\n\t/// Low-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, lowp>\t\t\t\tlowp_umat4x3;\n\n\t/// Low-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, lowp>\t\t\t\tlowp_umat4x4;\n\n\n\n\t/// Signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, defaultp>\t\t\t\timat2;\n\n\t/// Signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, defaultp>\t\t\t\timat3;\n\n\t/// Signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, defaultp>\t\t\t\timat4;\n\n\t/// Signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, defaultp>\t\t\t\timat2x2;\n\n\t/// Signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, defaultp>\t\t\t\timat2x3;\n\n\t/// Signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, defaultp>\t\t\t\timat2x4;\n\n\t/// Signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, defaultp>\t\t\t\timat3x2;\n\n\t/// Signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, defaultp>\t\t\t\timat3x3;\n\n\t/// Signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, defaultp>\t\t\t\timat3x4;\n\n\t/// Signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, defaultp>\t\t\t\timat4x2;\n\n\t/// Signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, defaultp>\t\t\t\timat4x3;\n\n\t/// Signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, defaultp>\t\t\t\timat4x4;\n\n\n\n\t/// Unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, defaultp>\t\t\t\tumat2;\n\n\t/// Unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, defaultp>\t\t\t\tumat3;\n\n\t/// Unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, defaultp>\t\t\t\tumat4;\n\n\t/// Unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, defaultp>\t\t\t\tumat2x2;\n\n\t/// Unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, defaultp>\t\t\t\tumat2x3;\n\n\t/// Unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, defaultp>\t\t\t\tumat2x4;\n\n\t/// Unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, defaultp>\t\t\t\tumat3x2;\n\n\t/// Unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, defaultp>\t\t\t\tumat3x3;\n\n\t/// Unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, defaultp>\t\t\t\tumat3x4;\n\n\t/// Unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, defaultp>\t\t\t\tumat4x2;\n\n\t/// Unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, defaultp>\t\t\t\tumat4x3;\n\n\t/// Unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, defaultp>\t\t\t\tumat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_inverse.hpp",
    "content": "/// @ref gtc_matrix_inverse\n/// @file glm/gtc/matrix_inverse.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_inverse.hpp> to use the features of this extension.\n///\n/// Defines additional matrix inverting functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../matrix.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_inverse extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_inverse\n\t/// @{\n\n\t/// Fast matrix inverse for affine matrix.\n\t///\n\t/// @param m Input matrix to invert.\n\t/// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly inaccurate.\n\t/// @see gtc_matrix_inverse\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType affineInverse(genType const& m);\n\n\t/// Compute the inverse transpose of a matrix.\n\t///\n\t/// @param m Input matrix to invert transpose.\n\t/// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly inaccurate.\n\t/// @see gtc_matrix_inverse\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType inverseTranspose(genType const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_inverse.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_inverse.inl",
    "content": "/// @ref gtc_matrix_inverse\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m)\n\t{\n\t\tmat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m)));\n\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tvec<3, T, Q>(Inv[0], static_cast<T>(0)),\n\t\t\tvec<3, T, Q>(Inv[1], static_cast<T>(0)),\n\t\t\tvec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m)\n\t{\n\t\tmat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m)));\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tvec<4, T, Q>(Inv[0], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(Inv[1], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(Inv[2], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m)\n\t{\n\t\tT Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];\n\n\t\tmat<2, 2, T, Q> Inverse(\n\t\t\t+ m[1][1] / Determinant,\n\t\t\t- m[0][1] / Determinant,\n\t\t\t- m[1][0] / Determinant,\n\t\t\t+ m[0][0] / Determinant);\n\n\t\treturn Inverse;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT Determinant =\n\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])\n\t\t\t- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])\n\t\t\t+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);\n\n\t\tmat<3, 3, T, Q> Inverse;\n\t\tInverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);\n\t\tInverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);\n\t\tInverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);\n\t\tInverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);\n\t\tInverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);\n\t\tInverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);\n\t\tInverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n\t\tInverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);\n\t\tInverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);\n\t\tInverse /= Determinant;\n\n\t\treturn Inverse;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m)\n\t{\n\t\tT SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\tT SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\tT SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\tT SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\tT SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\tT SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\tT SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\tT SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\tT SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\tT SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\tT SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\tT SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\tT SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\t\tT SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\t\tT SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\t\tT SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\t\tT SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\t\tT SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\tmat<4, 4, T, Q> Inverse;\n\t\tInverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02);\n\t\tInverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04);\n\t\tInverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05);\n\t\tInverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05);\n\n\t\tInverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02);\n\t\tInverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04);\n\t\tInverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05);\n\t\tInverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05);\n\n\t\tInverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08);\n\t\tInverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10);\n\t\tInverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11);\n\t\tInverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11);\n\n\t\tInverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14);\n\t\tInverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16);\n\t\tInverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17);\n\t\tInverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17);\n\n\t\tT Determinant =\n\t\t\t+ m[0][0] * Inverse[0][0]\n\t\t\t+ m[0][1] * Inverse[0][1]\n\t\t\t+ m[0][2] * Inverse[0][2]\n\t\t\t+ m[0][3] * Inverse[0][3];\n\n\t\tInverse /= Determinant;\n\n\t\treturn Inverse;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_transform.hpp",
    "content": "/// @ref gtc_matrix_transform\n/// @file glm/gtc/matrix_transform.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform\n/// @see gtx_transform2\n///\n/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_transform.hpp> to use the features of this extension.\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n\n#pragma once\n\n// Dependencies\n#include \"../mat4x4.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../ext/matrix_projection.hpp\"\n#include \"../ext/matrix_clip_space.hpp\"\n#include \"../ext/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_transform extension included\")\n#endif\n\n#include \"matrix_transform.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/matrix_transform.inl",
    "content": "#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/noise.hpp",
    "content": "/// @ref gtc_noise\n/// @file glm/gtc/noise.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_noise GLM_GTC_noise\n/// @ingroup gtc\n///\n/// Include <glm/gtc/noise.hpp> to use the features of this extension.\n///\n/// Defines 2D, 3D and 4D procedural noise functions\n/// Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\":\n/// https://github.com/ashima/webgl-noise\n/// Following Stefan Gustavson's paper \"Simplex noise demystified\":\n/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_noise.hpp\"\n#include \"../geometric.hpp\"\n#include \"../common.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_noise extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_noise\n\t/// @{\n\n\t/// Classic perlin noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T perlin(\n\t\tvec<L, T, Q> const& p);\n\n\t/// Periodic perlin noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T perlin(\n\t\tvec<L, T, Q> const& p,\n\t\tvec<L, T, Q> const& rep);\n\n\t/// Simplex noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T simplex(\n\t\tvec<L, T, Q> const& p);\n\n\t/// @}\n}//namespace glm\n\n#include \"noise.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/noise.inl",
    "content": "/// @ref gtc_noise\n///\n// Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\":\n// https://github.com/ashima/webgl-noise\n// Following Stefan Gustavson's paper \"Simplex noise demystified\":\n// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n\nnamespace glm{\nnamespace gtc\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip)\n\t{\n\t\tvec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1);\n\t\tT pW = static_cast<T>(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1));\n\t\tvec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0)));\n\t\tpXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w;\n\t\treturn vec<4, T, Q>(pXYZ, pW);\n\t}\n}//namespace gtc\n\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position)\n\t{\n\t\tvec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tvec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tPi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation\n\t\tvec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z);\n\t\tvec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w);\n\t\tvec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z);\n\t\tvec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w);\n\n\t\tvec<4, T, Q> i = detail::permute(detail::permute(ix) + iy);\n\n\t\tvec<4, T, Q> gx = static_cast<T>(2) * glm::fract(i / T(41)) - T(1);\n\t\tvec<4, T, Q> gy = glm::abs(gx) - T(0.5);\n\t\tvec<4, T, Q> tx = glm::floor(gx + T(0.5));\n\t\tgx = gx - tx;\n\n\t\tvec<2, T, Q> g00(gx.x, gy.x);\n\t\tvec<2, T, Q> g10(gx.y, gy.y);\n\t\tvec<2, T, Q> g01(gx.z, gy.z);\n\t\tvec<2, T, Q> g11(gx.w, gy.w);\n\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\n\t\tg00 *= norm.x;\n\t\tg01 *= norm.y;\n\t\tg10 *= norm.z;\n\t\tg11 *= norm.w;\n\n\t\tT n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x));\n\t\tT n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y));\n\t\tT n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z));\n\t\tT n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w));\n\n\t\tvec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y));\n\t\tvec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x);\n\t\tT n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n\t\treturn T(2.3) * n_xy;\n\t}\n\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position)\n\t{\n\t\tvec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing\n\t\tvec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1\n\t\tPi0 = detail::mod289(Pi0);\n\t\tPi1 = detail::mod289(Pi1);\n\t\tvec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y));\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0));\n\t\tgx0 -= sz0 * (step(T(0), gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(T(0), gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\t/*\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P)\n\t{\n\t\tvec<3, T, Q> Pi0 = floor(P); // Integer part for indexing\n\t\tvec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1\n\t\tPi0 = mod(Pi0, T(289));\n\t\tPi1 = mod(Pi1, T(289));\n\t\tvec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = permute(permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 / T(7);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0));\n\t\tgx0 -= sz0 * (step(0.0, gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(0.0, gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 / T(7);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(\n\t\t\tvec<2, T, Q>(n_z.x, n_z.y),\n\t\t\tvec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\t*/\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position)\n\t{\n\t\tvec<4, T, Q> Pi0 = floor(Position);\t// Integer part for indexing\n\t\tvec<4, T, Q> Pi1 = Pi0 + T(1);\t\t// Integer part + 1\n\t\tPi0 = mod(Pi0, vec<4, T, Q>(289));\n\t\tPi1 = mod(Pi1, vec<4, T, Q>(289));\n\t\tvec<4, T, Q> Pf0 = fract(Position);\t// Fractional part for interpolation\n\t\tvec<4, T, Q> Pf1 = Pf0 - T(1);\t\t// Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\t\tvec<4, T, Q> iw0(Pi0.w);\n\t\tvec<4, T, Q> iw1(Pi1.w);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\t\tvec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0);\n\t\tvec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1);\n\t\tvec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0);\n\t\tvec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1);\n\n\t\tvec<4, T, Q> gx00 = ixy00 / T(7);\n\t\tvec<4, T, Q> gy00 = floor(gx00) / T(7);\n\t\tvec<4, T, Q> gz00 = floor(gy00) / T(6);\n\t\tgx00 = fract(gx00) - T(0.5);\n\t\tgy00 = fract(gy00) - T(0.5);\n\t\tgz00 = fract(gz00) - T(0.5);\n\t\tvec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\n\t\tvec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0));\n\t\tgx00 -= sw00 * (step(T(0), gx00) - T(0.5));\n\t\tgy00 -= sw00 * (step(T(0), gy00) - T(0.5));\n\n\t\tvec<4, T, Q> gx01 = ixy01 / T(7);\n\t\tvec<4, T, Q> gy01 = floor(gx01) / T(7);\n\t\tvec<4, T, Q> gz01 = floor(gy01) / T(6);\n\t\tgx01 = fract(gx01) - T(0.5);\n\t\tgy01 = fract(gy01) - T(0.5);\n\t\tgz01 = fract(gz01) - T(0.5);\n\t\tvec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\n\t\tvec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0));\n\t\tgx01 -= sw01 * (step(T(0), gx01) - T(0.5));\n\t\tgy01 -= sw01 * (step(T(0), gy01) - T(0.5));\n\n\t\tvec<4, T, Q> gx10 = ixy10 / T(7);\n\t\tvec<4, T, Q> gy10 = floor(gx10) / T(7);\n\t\tvec<4, T, Q> gz10 = floor(gy10) / T(6);\n\t\tgx10 = fract(gx10) - T(0.5);\n\t\tgy10 = fract(gy10) - T(0.5);\n\t\tgz10 = fract(gz10) - T(0.5);\n\t\tvec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\n\t\tvec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0));\n\t\tgx10 -= sw10 * (step(T(0), gx10) - T(0.5));\n\t\tgy10 -= sw10 * (step(T(0), gy10) - T(0.5));\n\n\t\tvec<4, T, Q> gx11 = ixy11 / T(7);\n\t\tvec<4, T, Q> gy11 = floor(gx11) / T(7);\n\t\tvec<4, T, Q> gz11 = floor(gy11) / T(6);\n\t\tgx11 = fract(gx11) - T(0.5);\n\t\tgy11 = fract(gy11) - T(0.5);\n\t\tgz11 = fract(gz11) - T(0.5);\n\t\tvec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\n\t\tvec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0));\n\t\tgx11 -= sw11 * (step(T(0), gx11) - T(0.5));\n\t\tgy11 -= sw11 * (step(T(0), gy11) - T(0.5));\n\n\t\tvec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x);\n\t\tvec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y);\n\t\tvec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z);\n\t\tvec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w);\n\t\tvec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x);\n\t\tvec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y);\n\t\tvec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z);\n\t\tvec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w);\n\t\tvec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x);\n\t\tvec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y);\n\t\tvec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z);\n\t\tvec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w);\n\t\tvec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x);\n\t\tvec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y);\n\t\tvec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z);\n\t\tvec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w);\n\n\t\tvec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\n\t\tg0000 *= norm00.x;\n\t\tg0100 *= norm00.y;\n\t\tg1000 *= norm00.z;\n\t\tg1100 *= norm00.w;\n\n\t\tvec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\n\t\tg0001 *= norm01.x;\n\t\tg0101 *= norm01.y;\n\t\tg1001 *= norm01.z;\n\t\tg1101 *= norm01.w;\n\n\t\tvec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\n\t\tg0010 *= norm10.x;\n\t\tg0110 *= norm10.y;\n\t\tg1010 *= norm10.z;\n\t\tg1110 *= norm10.w;\n\n\t\tvec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\n\t\tg0011 *= norm11.x;\n\t\tg0111 *= norm11.y;\n\t\tg1011 *= norm11.z;\n\t\tg1111 *= norm11.w;\n\n\t\tT n0000 = dot(g0000, Pf0);\n\t\tT n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));\n\t\tT n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));\n\t\tT n1111 = dot(g1111, Pf1);\n\n\t\tvec<4, T, Q> fade_xyzw = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w);\n\t\tvec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w);\n\t\tvec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z);\n\t\tvec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y);\n\t\tT n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\n\t\treturn T(2.2) * n_xyzw;\n\t}\n\n\t// Classic Perlin noise, periodic variant\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep)\n\t{\n\t\tvec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tvec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tPi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period\n\t\tPi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation\n\t\tvec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z);\n\t\tvec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w);\n\t\tvec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z);\n\t\tvec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w);\n\n\t\tvec<4, T, Q> i = detail::permute(detail::permute(ix) + iy);\n\n\t\tvec<4, T, Q> gx = static_cast<T>(2) * fract(i / T(41)) - T(1);\n\t\tvec<4, T, Q> gy = abs(gx) - T(0.5);\n\t\tvec<4, T, Q> tx = floor(gx + T(0.5));\n\t\tgx = gx - tx;\n\n\t\tvec<2, T, Q> g00(gx.x, gy.x);\n\t\tvec<2, T, Q> g10(gx.y, gy.y);\n\t\tvec<2, T, Q> g01(gx.z, gy.z);\n\t\tvec<2, T, Q> g11(gx.w, gy.w);\n\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\n\t\tg00 *= norm.x;\n\t\tg01 *= norm.y;\n\t\tg10 *= norm.z;\n\t\tg11 *= norm.w;\n\n\t\tT n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x));\n\t\tT n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y));\n\t\tT n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z));\n\t\tT n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w));\n\n\t\tvec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y));\n\t\tvec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x);\n\t\tT n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n\t\treturn T(2.3) * n_xy;\n\t}\n\n\t// Classic Perlin noise, periodic variant\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep)\n\t{\n\t\tvec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period\n\t\tvec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period\n\t\tPi0 = mod(Pi0, vec<3, T, Q>(289));\n\t\tPi1 = mod(Pi1, vec<3, T, Q>(289));\n\t\tvec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 / T(7);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0));\n\t\tgx0 -= sz0 * (step(T(0), gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(T(0), gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 / T(7);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0)));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\n\t// Classic Perlin noise, periodic version\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep)\n\t{\n\t\tvec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep\n\t\tvec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep\n\t\tvec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\t\tvec<4, T, Q> iw0(Pi0.w);\n\t\tvec<4, T, Q> iw1(Pi1.w);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\t\tvec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0);\n\t\tvec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1);\n\t\tvec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0);\n\t\tvec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1);\n\n\t\tvec<4, T, Q> gx00 = ixy00 / T(7);\n\t\tvec<4, T, Q> gy00 = floor(gx00) / T(7);\n\t\tvec<4, T, Q> gz00 = floor(gy00) / T(6);\n\t\tgx00 = fract(gx00) - T(0.5);\n\t\tgy00 = fract(gy00) - T(0.5);\n\t\tgz00 = fract(gz00) - T(0.5);\n\t\tvec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\n\t\tvec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0));\n\t\tgx00 -= sw00 * (step(T(0), gx00) - T(0.5));\n\t\tgy00 -= sw00 * (step(T(0), gy00) - T(0.5));\n\n\t\tvec<4, T, Q> gx01 = ixy01 / T(7);\n\t\tvec<4, T, Q> gy01 = floor(gx01) / T(7);\n\t\tvec<4, T, Q> gz01 = floor(gy01) / T(6);\n\t\tgx01 = fract(gx01) - T(0.5);\n\t\tgy01 = fract(gy01) - T(0.5);\n\t\tgz01 = fract(gz01) - T(0.5);\n\t\tvec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\n\t\tvec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0));\n\t\tgx01 -= sw01 * (step(T(0), gx01) - T(0.5));\n\t\tgy01 -= sw01 * (step(T(0), gy01) - T(0.5));\n\n\t\tvec<4, T, Q> gx10 = ixy10 / T(7);\n\t\tvec<4, T, Q> gy10 = floor(gx10) / T(7);\n\t\tvec<4, T, Q> gz10 = floor(gy10) / T(6);\n\t\tgx10 = fract(gx10) - T(0.5);\n\t\tgy10 = fract(gy10) - T(0.5);\n\t\tgz10 = fract(gz10) - T(0.5);\n\t\tvec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\n\t\tvec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0));\n\t\tgx10 -= sw10 * (step(T(0), gx10) - T(0.5));\n\t\tgy10 -= sw10 * (step(T(0), gy10) - T(0.5));\n\n\t\tvec<4, T, Q> gx11 = ixy11 / T(7);\n\t\tvec<4, T, Q> gy11 = floor(gx11) / T(7);\n\t\tvec<4, T, Q> gz11 = floor(gy11) / T(6);\n\t\tgx11 = fract(gx11) - T(0.5);\n\t\tgy11 = fract(gy11) - T(0.5);\n\t\tgz11 = fract(gz11) - T(0.5);\n\t\tvec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\n\t\tvec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0)));\n\t\tgx11 -= sw11 * (step(T(0), gx11) - T(0.5));\n\t\tgy11 -= sw11 * (step(T(0), gy11) - T(0.5));\n\n\t\tvec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x);\n\t\tvec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y);\n\t\tvec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z);\n\t\tvec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w);\n\t\tvec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x);\n\t\tvec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y);\n\t\tvec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z);\n\t\tvec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w);\n\t\tvec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x);\n\t\tvec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y);\n\t\tvec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z);\n\t\tvec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w);\n\t\tvec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x);\n\t\tvec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y);\n\t\tvec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z);\n\t\tvec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w);\n\n\t\tvec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\n\t\tg0000 *= norm00.x;\n\t\tg0100 *= norm00.y;\n\t\tg1000 *= norm00.z;\n\t\tg1100 *= norm00.w;\n\n\t\tvec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\n\t\tg0001 *= norm01.x;\n\t\tg0101 *= norm01.y;\n\t\tg1001 *= norm01.z;\n\t\tg1101 *= norm01.w;\n\n\t\tvec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\n\t\tg0010 *= norm10.x;\n\t\tg0110 *= norm10.y;\n\t\tg1010 *= norm10.z;\n\t\tg1110 *= norm10.w;\n\n\t\tvec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\n\t\tg0011 *= norm11.x;\n\t\tg0111 *= norm11.y;\n\t\tg1011 *= norm11.z;\n\t\tg1111 *= norm11.w;\n\n\t\tT n0000 = dot(g0000, Pf0);\n\t\tT n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));\n\t\tT n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));\n\t\tT n1111 = dot(g1111, Pf1);\n\n\t\tvec<4, T, Q> fade_xyzw = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w);\n\t\tvec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w);\n\t\tvec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z);\n\t\tvec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y);\n\t\tT n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\n\t\treturn T(2.2) * n_xyzw;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v)\n\t{\n\t\tvec<4, T, Q> const C = vec<4, T, Q>(\n\t\t\tT( 0.211324865405187),  // (3.0 -  sqrt(3.0)) / 6.0\n\t\t\tT( 0.366025403784439),  //  0.5 * (sqrt(3.0)  - 1.0)\n\t\t\tT(-0.577350269189626),\t// -1.0 + 2.0 * C.x\n\t\t\tT( 0.024390243902439)); //  1.0 / 41.0\n\n\t\t// First corner\n\t\tvec<2, T, Q> i  = floor(v + dot(v, vec<2, T, Q>(C[1])));\n\t\tvec<2, T, Q> x0 = v -   i + dot(i, vec<2, T, Q>(C[0]));\n\n\t\t// Other corners\n\t\t//i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0\n\t\t//i1.y = 1.0 - i1.x;\n\t\tvec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1);\n\t\t// x0 = x0 - 0.0 + 0.0 * C.xx ;\n\t\t// x1 = x0 - i1 + 1.0 * C.xx ;\n\t\t// x2 = x0 - 1.0 + 2.0 * C.xx ;\n\t\tvec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z);\n\t\tx12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w);\n\n\t\t// Permutations\n\t\ti = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation\n\t\tvec<3, T, Q> p = detail::permute(\n\t\t\tdetail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1)))\n\t\t\t+ i.x + vec<3, T, Q>(T(0), i1.x, T(1)));\n\n\t\tvec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>(\n\t\t\tdot(x0, x0),\n\t\t\tdot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)),\n\t\t\tdot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0));\n\t\tm = m * m ;\n\t\tm = m * m ;\n\n\t\t// Gradients: 41 points uniformly over a line, mapped onto a diamond.\n\t\t// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\n\n\t\tvec<3, T, Q> x = static_cast<T>(2) * fract(p * C.w) - T(1);\n\t\tvec<3, T, Q> h = abs(x) - T(0.5);\n\t\tvec<3, T, Q> ox = floor(x + T(0.5));\n\t\tvec<3, T, Q> a0 = x - ox;\n\n\t\t// Normalise gradients implicitly by scaling m\n\t\t// Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h );\n\t\tm *= static_cast<T>(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h);\n\n\t\t// Compute final noise value at P\n\t\tvec<3, T, Q> g;\n\t\tg.x  = a0.x  * x0.x  + h.x  * x0.y;\n\t\t//g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n\t\tg.y = a0.y * x12.x + h.y * x12.y;\n\t\tg.z = a0.z * x12.z + h.z * x12.w;\n\t\treturn T(130) * dot(m, g);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v)\n\t{\n\t\tvec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0);\n\t\tvec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0);\n\n\t\t// First corner\n\t\tvec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y))));\n\t\tvec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x)));\n\n\t\t// Other corners\n\t\tvec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0));\n\t\tvec<3, T, Q> l(T(1) - g);\n\t\tvec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y)));\n\t\tvec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y)));\n\n\t\t//   x0 = x0 - 0.0 + 0.0 * C.xxx;\n\t\t//   x1 = x0 - i1  + 1.0 * C.xxx;\n\t\t//   x2 = x0 - i2  + 2.0 * C.xxx;\n\t\t//   x3 = x0 - 1.0 + 3.0 * C.xxx;\n\t\tvec<3, T, Q> x1(x0 - i1 + C.x);\n\t\tvec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y\n\t\tvec<3, T, Q> x3(x0 - D.y);      // -1.0+3.0*C.x = -0.5 = -D.y\n\n\t\t// Permutations\n\t\ti = detail::mod289(i);\n\t\tvec<4, T, Q> p(detail::permute(detail::permute(detail::permute(\n\t\t\ti.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) +\n\t\t\ti.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) +\n\t\t\ti.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1))));\n\n\t\t// Gradients: 7x7 points over a square, mapped onto an octahedron.\n\t\t// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n\t\tT n_ = static_cast<T>(0.142857142857); // 1.0/7.0\n\t\tvec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x));\n\n\t\tvec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z));  //  mod(p,7*7)\n\n\t\tvec<4, T, Q> x_(floor(j * ns.z));\n\t\tvec<4, T, Q> y_(floor(j - T(7) * x_));    // mod(j,N)\n\n\t\tvec<4, T, Q> x(x_ * ns.x + ns.y);\n\t\tvec<4, T, Q> y(y_ * ns.x + ns.y);\n\t\tvec<4, T, Q> h(T(1) - abs(x) - abs(y));\n\n\t\tvec<4, T, Q> b0(x.x, x.y, y.x, y.y);\n\t\tvec<4, T, Q> b1(x.z, x.w, y.z, y.w);\n\n\t\t// vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n\t\t// vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n\t\tvec<4, T, Q> s0(floor(b0) * T(2) + T(1));\n\t\tvec<4, T, Q> s1(floor(b1) * T(2) + T(1));\n\t\tvec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0)));\n\n\t\tvec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y);\n\t\tvec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w);\n\n\t\tvec<3, T, Q> p0(a0.x, a0.y, h.x);\n\t\tvec<3, T, Q> p1(a0.z, a0.w, h.y);\n\t\tvec<3, T, Q> p2(a1.x, a1.y, h.z);\n\t\tvec<3, T, Q> p3(a1.z, a1.w, h.w);\n\n\t\t// Normalise gradients\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n\t\tp0 *= norm.x;\n\t\tp1 *= norm.y;\n\t\tp2 *= norm.z;\n\t\tp3 *= norm.w;\n\n\t\t// Mix final noise value\n\t\tvec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0));\n\t\tm = m * m;\n\t\treturn T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v)\n\t{\n\t\tvec<4, T, Q> const C(\n\t\t\t0.138196601125011,  // (5 - sqrt(5))/20  G4\n\t\t\t0.276393202250021,  // 2 * G4\n\t\t\t0.414589803375032,  // 3 * G4\n\t\t\t-0.447213595499958); // -1 + 4 * G4\n\n\t\t// (sqrt(5) - 1)/4 = F4, used once below\n\t\tT const F4 = static_cast<T>(0.309016994374947451);\n\n\t\t// First corner\n\t\tvec<4, T, Q> i  = floor(v + dot(v, vec<4, T, Q>(F4)));\n\t\tvec<4, T, Q> x0 = v -   i + dot(i, vec<4, T, Q>(C.x));\n\n\t\t// Other corners\n\n\t\t// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)\n\t\tvec<4, T, Q> i0;\n\t\tvec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x));\n\t\tvec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z));\n\t\t//  i0.x = dot(isX, vec3(1.0));\n\t\t//i0.x = isX.x + isX.y + isX.z;\n\t\t//i0.yzw = static_cast<T>(1) - isX;\n\t\ti0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX);\n\t\t//  i0.y += dot(isYZ.xy, vec2(1.0));\n\t\ti0.y += isYZ.x + isYZ.y;\n\t\t//i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y);\n\t\ti0.z += static_cast<T>(1) - isYZ.x;\n\t\ti0.w += static_cast<T>(1) - isYZ.y;\n\t\ti0.z += isYZ.z;\n\t\ti0.w += static_cast<T>(1) - isYZ.z;\n\n\t\t// i0 now contains the unique values 0,1,2,3 in each channel\n\t\tvec<4, T, Q> i3 = clamp(i0, T(0), T(1));\n\t\tvec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1));\n\t\tvec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1));\n\n\t\t//  x0 = x0 - 0.0 + 0.0 * C.xxxx\n\t\t//  x1 = x0 - i1  + 0.0 * C.xxxx\n\t\t//  x2 = x0 - i2  + 0.0 * C.xxxx\n\t\t//  x3 = x0 - i3  + 0.0 * C.xxxx\n\t\t//  x4 = x0 - 1.0 + 4.0 * C.xxxx\n\t\tvec<4, T, Q> x1 = x0 - i1 + C.x;\n\t\tvec<4, T, Q> x2 = x0 - i2 + C.y;\n\t\tvec<4, T, Q> x3 = x0 - i3 + C.z;\n\t\tvec<4, T, Q> x4 = x0 + C.w;\n\n\t\t// Permutations\n\t\ti = mod(i, vec<4, T, Q>(289));\n\t\tT j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x);\n\t\tvec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute(\n\t\t\ti.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) +\n\t\t\ti.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) +\n\t\t\ti.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) +\n\t\t\ti.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1)));\n\n\t\t// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope\n\t\t// 7*7*6 = 294, which is close to the ring size 17*17 = 289.\n\t\tvec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0));\n\n\t\tvec<4, T, Q> p0 = gtc::grad4(j0,   ip);\n\t\tvec<4, T, Q> p1 = gtc::grad4(j1.x, ip);\n\t\tvec<4, T, Q> p2 = gtc::grad4(j1.y, ip);\n\t\tvec<4, T, Q> p3 = gtc::grad4(j1.z, ip);\n\t\tvec<4, T, Q> p4 = gtc::grad4(j1.w, ip);\n\n\t\t// Normalise gradients\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n\t\tp0 *= norm.x;\n\t\tp1 *= norm.y;\n\t\tp2 *= norm.z;\n\t\tp3 *= norm.w;\n\t\tp4 *= detail::taylorInvSqrt(dot(p4, p4));\n\n\t\t// Mix contributions from the five corners\n\t\tvec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0));\n\t\tvec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4)             ), vec<2, T, Q>(0));\n\t\tm0 = m0 * m0;\n\t\tm1 = m1 * m1;\n\t\treturn T(49) *\n\t\t\t(dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) +\n\t\t\tdot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4))));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/packing.hpp",
    "content": "/// @ref gtc_packing\n/// @file glm/gtc/packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_packing GLM_GTC_packing\n/// @ingroup gtc\n///\n/// Include <glm/gtc/packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert vertors to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"type_precision.hpp\"\n#include \"../ext/vector_packing.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_packing\n\t/// @{\n\n\t/// First, converts the normalized floating-point value v into a 8-bit integer value.\n\t/// Then, the results are packed into the returned 8-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm1x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm2x8(vec2 const& v)\n\t/// @see uint32 packUnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint8 packUnorm1x8(float v);\n\n\t/// Convert a single 8-bit integer to a normalized floating-point value.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x8(uint16 p)\n\t/// @see vec4 unpackUnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackUnorm1x8(uint8 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 8-bit integer values.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm2x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm1x8(float const& v)\n\t/// @see uint32 packUnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackUnorm1x8(uint8 v)\n\t/// @see vec4 unpackUnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p);\n\n\t/// First, converts the normalized floating-point value v into 8-bit integer value.\n\t/// Then, the results are packed into the returned 8-bit unsigned integer.\n\t///\n\t/// The conversion to fixed point is done as follows:\n\t/// packSnorm1x8:\tround(clamp(s, -1, +1) * 127.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm2x8(vec2 const& v)\n\t/// @see uint32 packSnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint8 packSnorm1x8(float s);\n\n\t/// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.\n\t/// Then, the value is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm1x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackSnorm2x8(uint16 p)\n\t/// @see vec4 unpackSnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackSnorm1x8(uint8 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 8-bit integer values.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x8:\tround(clamp(c, -1, +1) * 127.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packSnorm1x8(float const& v)\n\t/// @see uint32 packSnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm2x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackSnorm1x8(uint8 p)\n\t/// @see vec4 unpackSnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p);\n\n\t/// First, converts the normalized floating-point value v into a 16-bit integer value.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm1x16:\tround(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm1x16(float const& v)\n\t/// @see uint64 packSnorm4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packUnorm1x16(float v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.\n\t/// Then, the value is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm1x16: f / 65535.0\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x16(uint32 p)\n\t/// @see vec4 unpackUnorm4x16(uint64 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackUnorm1x16(uint16 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 16-bit integer values.\n\t/// Then, the results are packed into the returned 64-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm4x16:\tround(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm1x16(float const& v)\n\t/// @see uint32 packUnorm2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v);\n\n\t/// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnormx4x16: f / 65535.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackUnorm1x16(uint16 p)\n\t/// @see vec2 unpackUnorm2x16(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p);\n\n\t/// First, converts the normalized floating-point value v into 16-bit integer value.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion to fixed point is done as follows:\n\t/// packSnorm1x8:\tround(clamp(s, -1, +1) * 32767.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm2x16(vec2 const& v)\n\t/// @see uint64 packSnorm4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packSnorm1x16(float v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm1x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackSnorm2x16(uint32 p)\n\t/// @see vec4 unpackSnorm4x16(uint64 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackSnorm1x16(uint16 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 16-bit integer values.\n\t/// Then, the results are packed into the returned 64-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x8:\tround(clamp(c, -1, +1) * 32767.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm1x16(float const& v)\n\t/// @see uint32 packSnorm2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v);\n\n\t/// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm4x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackSnorm1x16(uint16 p)\n\t/// @see vec2 unpackSnorm2x16(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a floating-point scalar\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing this 16-bit value into a 16-bit unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packHalf2x16(vec2 const& v)\n\t/// @see uint64 packHalf4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packHalf1x16(float v);\n\n\t/// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value,\n\t/// interpreted as a 16-bit floating-point number according to the OpenGL Specification,\n\t/// and converting it to 32-bit floating-point values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackHalf2x16(uint32 const& v)\n\t/// @see vec4 unpackHalf4x16(uint64 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackHalf1x16(uint16 v);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing these four 16-bit values into a 64-bit unsigned integer.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packHalf1x16(float const& v)\n\t/// @see uint32 packHalf2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v);\n\n\t/// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values,\n\t/// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,\n\t/// and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackHalf1x16(uint16 const& v)\n\t/// @see vec2 unpackHalf2x16(uint32 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector\n\t/// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification,\n\t/// and then packing these four values into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packI3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see ivec4 unpackI3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v);\n\n\t/// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p);\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p);\n\tGLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector\n\t/// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification,\n\t/// and then packing these four values into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see ivec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v);\n\n\t/// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p);\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p);\n\tGLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p);\n\n\t/// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.\n\t/// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm3x10_1x2(xyz):\tround(clamp(c, -1, +1) * 511.0)\n\t/// packSnorm3x10_1x2(w):\tround(clamp(c, -1, +1) * 1.0)\n\t///\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\tGLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1)\n\t/// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see vec4 unpackUnorm3x10_1x2(uint32 const& p))\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p)\n\t/// @see uvec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p);\n\n\t/// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.\n\t/// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm3x10_1x2(xyz):\tround(clamp(c, 0, +1) * 1023.0)\n\t/// packUnorm3x10_1x2(w):\tround(clamp(c, 0, +1) * 3.0)\n\t///\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\tGLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1)\n\t/// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see vec4 unpackInorm3x10_1x2(uint32 const& p))\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p)\n\t/// @see uvec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p);\n\n\t/// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.\n\t/// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The first vector component specifies the 11 least-significant bits of the result;\n\t/// the last component specifies the 10 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackF2x11_1x10(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packF2x11_1x10(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p);\n\n\n\t/// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.\n\t/// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The first vector component specifies the 11 least-significant bits of the result;\n\t/// the last component specifies the 10 most-significant bits.\n\t///\n\t/// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackF3x9_E1x5(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packF3x9_E1x5(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p);\n\n\t/// Returns an unsigned integer vector obtained by converting the components of a floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb);\n\n\t/// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm);\n\n\t/// Returns an unsigned integer vector obtained by converting the components of a floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v);\n\n\t/// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, floatType, Q> unpackUnorm(vec<L, intType, Q> const& p);\n\ttemplate<typename uintType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uintType, Q> packUnorm(vec<L, floatType, Q> const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, intType, Q> packUnorm(vec<L, floatType, Q> const& v)\n\ttemplate<typename floatType, length_t L, typename uintType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> unpackUnorm(vec<L, uintType, Q> const& v);\n\n\t/// Convert each component of the normalized floating-point vector into signed integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& p);\n\ttemplate<typename intType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v)\n\ttemplate<typename floatType, length_t L, typename intType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& v);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x4(uint8 p)\n\tGLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm2x4(vec2 const& v)\n\tGLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm4x4(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm4x4(vec4 const& v)\n\tGLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm3x5_1x1(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm3x5_1x1(vec4 const& v)\n\tGLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackUnorm2x3_1x2(uint8 p)\n\tGLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm2x3_1x2(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p);\n\n\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i8vec2 unpackInt2x8(int16 p)\n\tGLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int16 packInt2x8(i8vec2 const& v)\n\tGLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u8vec2 unpackInt2x8(uint16 p)\n\tGLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packInt2x8(u8vec2 const& v)\n\tGLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i8vec4 unpackInt4x8(int32 p)\n\tGLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int32 packInt2x8(i8vec4 const& v)\n\tGLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u8vec4 unpackUint4x8(uint32 p)\n\tGLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packUint4x8(u8vec2 const& v)\n\tGLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i16vec2 unpackInt2x16(int p)\n\tGLM_FUNC_DECL int packInt2x16(i16vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packInt2x16(i16vec2 const& v)\n\tGLM_FUNC_DECL i16vec2 unpackInt2x16(int p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i16vec4 unpackInt4x16(int64 p)\n\tGLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int64 packInt4x16(i16vec4 const& v)\n\tGLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u16vec2 unpackUint2x16(uint p)\n\tGLM_FUNC_DECL uint packUint2x16(u16vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint packUint2x16(u16vec2 const& v)\n\tGLM_FUNC_DECL u16vec2 unpackUint2x16(uint p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u16vec4 unpackUint4x16(uint64 p)\n\tGLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint64 packUint4x16(u16vec4 const& v)\n\tGLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i32vec2 unpackInt2x32(int p)\n\tGLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packInt2x16(i32vec2 const& v)\n\tGLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u32vec2 unpackUint2x32(int p)\n\tGLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packUint2x16(u32vec2 const& v)\n\tGLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p);\n\n\t/// @}\n}// namespace glm\n\n#include \"packing.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/packing.inl",
    "content": "/// @ref gtc_packing\n\n#include \"../ext/scalar_relational.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../common.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../detail/type_half.hpp\"\n#include <cstring>\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((f >> 16) & 0x8000) | // sign\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential\n\t\t\t((f >> 13) & 0x03ff); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x000007c0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential\n\t\t\t((f >> 17) & 0x003f); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x000007c0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential\n\t\t\t((p & 0x003f) << 17); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x0000001F => 00000000 00000000 00000000 00011111\n\t\t// 0x0000003F => 00000000 00000000 00000000 00111111\n\t\t// 0x000003E0 => 00000000 00000000 00000011 11100000\n\t\t// 0x000007C0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007C00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003FF => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential\n\t\t\t((f >> 18) & 0x001f); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x0000001F => 00000000 00000000 00000000 00011111\n\t\t// 0x0000003F => 00000000 00000000 00000000 00111111\n\t\t// 0x000003E0 => 00000000 00000000 00000011 11100000\n\t\t// 0x000007C0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007C00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003FF => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential\n\t\t\t((p & 0x001f) << 18); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h)\n\t{\n\t\treturn ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x)\n\t{\n\t\tif(x == 0.0f)\n\t\t\treturn 0u;\n\t\telse if(glm::isnan(x))\n\t\t\treturn ~0u;\n\t\telse if(glm::isinf(x))\n\t\t\treturn 0x1Fu << 6u;\n\n\t\tuint Pack = 0u;\n\t\tmemcpy(&Pack, &x, sizeof(Pack));\n\t\treturn float2packed11(Pack);\n\t}\n\n\tGLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn 0.0f;\n\t\telse if(x == ((1 << 11) - 1))\n\t\t\treturn ~0;//NaN\n\t\telse if(x == (0x1f << 6))\n\t\t\treturn ~0;//Inf\n\n\t\tuint Result = packed11ToFloat(x);\n\n\t\tfloat Temp = 0;\n\t\tmemcpy(&Temp, &Result, sizeof(Temp));\n\t\treturn Temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x)\n\t{\n\t\tif(x == 0.0f)\n\t\t\treturn 0u;\n\t\telse if(glm::isnan(x))\n\t\t\treturn ~0u;\n\t\telse if(glm::isinf(x))\n\t\t\treturn 0x1Fu << 5u;\n\n\t\tuint Pack = 0;\n\t\tmemcpy(&Pack, &x, sizeof(Pack));\n\t\treturn float2packed10(Pack);\n\t}\n\n\tGLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn 0.0f;\n\t\telse if(x == ((1 << 10) - 1))\n\t\t\treturn ~0;//NaN\n\t\telse if(x == (0x1f << 5))\n\t\t\treturn ~0;//Inf\n\n\t\tuint Result = packed10ToFloat(x);\n\n\t\tfloat Temp = 0;\n\t\tmemcpy(&Temp, &Result, sizeof(Temp));\n\t\treturn Temp;\n\t}\n\n//\tGLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z)\n//\t{\n//\t\treturn ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) |  ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22);\n//\t}\n\n\tunion u3u3u2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 3;\n\t\t\tuint y : 3;\n\t\t\tuint z : 2;\n\t\t} data;\n\t\tuint8 pack;\n\t};\n\n\tunion u4u4\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 4;\n\t\t\tuint y : 4;\n\t\t} data;\n\t\tuint8 pack;\n\t};\n\n\tunion u4u4u4u4\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 4;\n\t\t\tuint y : 4;\n\t\t\tuint z : 4;\n\t\t\tuint w : 4;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u5u6u5\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 5;\n\t\t\tuint y : 6;\n\t\t\tuint z : 5;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u5u5u5u1\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 5;\n\t\t\tuint y : 5;\n\t\t\tuint z : 5;\n\t\t\tuint w : 1;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u10u10u10u2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 10;\n\t\t\tuint y : 10;\n\t\t\tuint z : 10;\n\t\t\tuint w : 2;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\tunion i10i10i10i2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tint x : 10;\n\t\t\tint y : 10;\n\t\t\tint z : 10;\n\t\t\tint w : 2;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\tunion u9u9u9e5\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 9;\n\t\t\tuint y : 9;\n\t\t\tuint z : 9;\n\t\t\tuint w : 5;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_half\n\t{};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<1, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v)\n\t\t{\n\t\t\tint16 const Unpack(detail::toFloat16(v.x));\n\t\t\tu16vec1 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec1 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<1, float, Q>(detail::toFloat32(v.x));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<2, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v)\n\t\t{\n\t\t\tvec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y));\n\t\t\tu16vec2 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec2 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<3, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v)\n\t\t{\n\t\t\tvec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z));\n\t\t\tu16vec3 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec3 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<4, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w));\n\t\t\tu16vec4 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec4 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w));\n\t\t}\n\t};\n}//namespace detail\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v)\n\t{\n\t\treturn static_cast<uint8>(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p)\n\t{\n\t\tfloat const Unpack(p);\n\t\treturn Unpack * static_cast<float>(0.0039215686274509803921568627451); // 1 / 255\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v)\n\t{\n\t\tu8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\n\t\tuint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &Topack, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p)\n\t{\n\t\tu8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v)\n\t{\n\t\tint8 const Topack(static_cast<int8>(round(clamp(v ,-1.0f, 1.0f) * 127.0f)));\n\t\tuint8 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p)\n\t{\n\t\tint8 Unpack = 0;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tstatic_cast<float>(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v)\n\t{\n\t\ti8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p)\n\t{\n\t\ti8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tvec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s)\n\t{\n\t\treturn static_cast<uint16>(round(clamp(s, 0.0f, 1.0f) * 65535.0f));\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p)\n\t{\n\t\tfloat const Unpack(p);\n\t\treturn Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v)\n\t{\n\t\tu16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p)\n\t{\n\t\tu16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v)\n\t{\n\t\tint16 const Topack = static_cast<int16>(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p)\n\t{\n\t\tint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tstatic_cast<float>(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v)\n\t{\n\t\ti16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tvec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packHalf1x16(float v)\n\t{\n\t\tint16 const Topack(detail::toFloat16(v));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v)\n\t{\n\t\tint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\treturn detail::toFloat32(Unpack);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v)\n\t{\n\t\ti16vec4 const Unpack(\n\t\t\tdetail::toFloat16(v.x),\n\t\t\tdetail::toFloat16(v.y),\n\t\t\tdetail::toFloat16(v.z),\n\t\t\tdetail::toFloat16(v.w));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\treturn vec4(\n\t\t\tdetail::toFloat32(Unpack.x),\n\t\t\tdetail::toFloat32(Unpack.y),\n\t\t\tdetail::toFloat32(Unpack.z),\n\t\t\tdetail::toFloat32(Unpack.w));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v)\n\t{\n\t\tdetail::i10i10i10i2 Result;\n\t\tResult.data.x = v.x;\n\t\tResult.data.y = v.y;\n\t\tResult.data.z = v.z;\n\t\tResult.data.w = v.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v)\n\t{\n\t\tdetail::i10i10i10i2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn ivec4(\n\t\t\tUnpack.data.x,\n\t\t\tUnpack.data.y,\n\t\t\tUnpack.data.z,\n\t\t\tUnpack.data.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v)\n\t{\n\t\tdetail::u10u10u10u2 Result;\n\t\tResult.data.x = v.x;\n\t\tResult.data.y = v.y;\n\t\tResult.data.z = v.z;\n\t\tResult.data.w = v.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v)\n\t{\n\t\tdetail::u10u10u10u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn uvec4(\n\t\t\tUnpack.data.x,\n\t\t\tUnpack.data.y,\n\t\t\tUnpack.data.z,\n\t\t\tUnpack.data.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v)\n\t{\n\t\tivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f)));\n\n\t\tdetail::i10i10i10i2 Result;\n\t\tResult.data.x = Pack.x;\n\t\tResult.data.y = Pack.y;\n\t\tResult.data.z = Pack.z;\n\t\tResult.data.w = Pack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v)\n\t{\n\t\tdetail::i10i10i10i2 Unpack;\n\t\tUnpack.pack = v;\n\n\t\tvec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w);\n\n\t\treturn clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v)\n\t{\n\t\tuvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f)));\n\n\t\tdetail::u10u10u10u2 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v)\n\t{\n\t\tvec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f);\n\n\t\tdetail::u10u10u10u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v)\n\t{\n\t\treturn\n\t\t\t((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) <<  0) |\n\t\t\t((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) |\n\t\t\t((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22);\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v)\n\t{\n\t\treturn vec3(\n\t\t\tdetail::packed11bitToFloat(v >> 0),\n\t\t\tdetail::packed11bitToFloat(v >> 11),\n\t\t\tdetail::packed10bitToFloat(v >> 22));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v)\n\t{\n\t\tfloat const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f);\n\t\tvec3 const Color = clamp(v, 0.0f, SharedExpMax);\n\t\tfloat const MaxColor = max(Color.x, max(Color.y, Color.z));\n\n\t\tfloat const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f;\n\t\tfloat const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f);\n\t\tfloat const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon<float>()) ? ExpSharedP + 1.0f : ExpSharedP;\n\n\t\tuvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f));\n\n\t\tdetail::u9u9u9e5 Unpack;\n\t\tUnpack.data.x = ColorComp.x;\n\t\tUnpack.data.y = ColorComp.y;\n\t\tUnpack.data.z = ColorComp.z;\n\t\tUnpack.data.w = uint(ExpShared);\n\t\treturn Unpack.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v)\n\t{\n\t\tdetail::u9u9u9e5 Unpack;\n\t\tUnpack.pack = v;\n\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f);\n\t}\n\n\t// Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb)\n\t{\n\t\tvec<3, T, Q> const Color(rgb * static_cast<T>(1.0 / 6.0));\n\t\tT Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast<T>(1e-6))), static_cast<T>(0), static_cast<T>(1));\n\t\tAlpha = ceil(Alpha * static_cast<T>(255.0)) / static_cast<T>(255.0);\n\t\treturn vec<4, T, Q>(Color / Alpha, Alpha);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm)\n\t{\n\t\treturn vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast<T>(6);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v)\n\t{\n\t\treturn detail::compute_half<L, Q>::pack(v);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& v)\n\t{\n\t\treturn detail::compute_half<L, Q>::unpack(v);\n\t}\n\n\ttemplate<typename uintType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uintType, Q> packUnorm(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, uintType, Q>(round(clamp(v, static_cast<floatType>(0), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<uintType>::max())));\n\t}\n\n\ttemplate<typename floatType, length_t L, typename uintType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> unpackUnorm(vec<L, uintType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, floatType, Q>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<uintType>::max()));\n\t}\n\n\ttemplate<typename intType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, intType, Q>(round(clamp(v , static_cast<floatType>(-1), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<intType>::max())));\n\t}\n\n\ttemplate<typename floatType, length_t L, typename intType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn clamp(vec<L, floatType, Q>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<intType>::max())), static_cast<floatType>(-1), static_cast<floatType>(1));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v)\n\t{\n\t\tu32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));\n\t\tdetail::u4u4 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v)\n\t{\n\t\tfloat const ScaleFactor(1.f / 15.f);\n\t\tdetail::u4u4 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v)\n\t{\n\t\tu32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));\n\t\tdetail::u4u4u4u4 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v)\n\t{\n\t\tfloat const ScaleFactor(1.f / 15.f);\n\t\tdetail::u4u4u4u4 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v)\n\t{\n\t\tu32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f)));\n\t\tdetail::u5u6u5 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v)\n\t{\n\t\tvec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f);\n\t\tdetail::u5u6u5 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v)\n\t{\n\t\tu32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f)));\n\t\tdetail::u5u5u5u1 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v)\n\t{\n\t\tvec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f);\n\t\tdetail::u5u5u5u1 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v)\n\t{\n\t\tu32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f)));\n\t\tdetail::u3u3u2 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v)\n\t{\n\t\tvec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f);\n\t\tdetail::u3u3u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v)\n\t{\n\t\tint16 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p)\n\t{\n\t\ti8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v)\n\t{\n\t\tuint16 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p)\n\t{\n\t\tu8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v)\n\t{\n\t\tint32 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p)\n\t{\n\t\ti8vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v)\n\t{\n\t\tuint32 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p)\n\t{\n\t\tu8vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v)\n\t{\n\t\tint Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p)\n\t{\n\t\ti16vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v)\n\t{\n\t\tint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v)\n\t{\n\t\tuint Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p)\n\t{\n\t\tu16vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v)\n\t{\n\t\tuint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p)\n\t{\n\t\tu16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v)\n\t{\n\t\tint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p)\n\t{\n\t\ti32vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v)\n\t{\n\t\tuint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p)\n\t{\n\t\tu32vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/quaternion.hpp",
    "content": "/// @ref gtc_quaternion\n/// @file glm/gtc/quaternion.hpp\n///\n/// @see core (dependence)\n/// @see gtc_constants (dependence)\n///\n/// @defgroup gtc_quaternion GLM_GTC_quaternion\n/// @ingroup gtc\n///\n/// Include <glm/gtc/quaternion.hpp> to use the features of this extension.\n///\n/// Defines a templated quaternion type and several quaternion operations.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../ext/quaternion_common.hpp\"\n#include \"../ext/quaternion_float.hpp\"\n#include \"../ext/quaternion_float_precision.hpp\"\n#include \"../ext/quaternion_double.hpp\"\n#include \"../ext/quaternion_double_precision.hpp\"\n#include \"../ext/quaternion_relational.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include \"../ext/quaternion_trigonometric.hpp\"\n#include \"../ext/quaternion_transform.hpp\"\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_quaternion extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_quaternion\n\t/// @{\n\n\t/// Returns euler angles, pitch as x, yaw as y, roll as z.\n\t/// The result is expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua<T, Q> const& x);\n\n\t/// Returns roll value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T roll(qua<T, Q> const& x);\n\n\t/// Returns pitch value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T pitch(qua<T, Q> const& x);\n\n\t/// Returns yaw value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T yaw(qua<T, Q> const& x);\n\n\t/// Converts a quaternion to a 3 * 3 matrix.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& x);\n\n\t/// Converts a quaternion to a 4 * 4 matrix.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& x);\n\n\t/// Converts a pure rotation 3 * 3 matrix to a quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quat_cast(mat<3, 3, T, Q> const& x);\n\n\t/// Converts a pure rotation 4 * 4 matrix to a quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quat_cast(mat<4, 4, T, Q> const& x);\n\n\t/// Returns the component-wise comparison result of x < y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x <= y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x > y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x >= y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Build a look at quaternion based on the default handedness.\n\t///\n\t/// @param direction Desired forward direction. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAt(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\n\t/// Build a right-handed look at quaternion.\n\t///\n\t/// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAtRH(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\n\t/// Build a left-handed look at quaternion.\n\t///\n\t/// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAtLH(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\t/// @}\n} //namespace glm\n\n#include \"quaternion.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/quaternion.inl",
    "content": "#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"epsilon.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua<T, Q> const& x)\n\t{\n\t\treturn vec<3, T, Q>(pitch(x), yaw(x), roll(x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T roll(qua<T, Q> const& q)\n\t{\n\t\tT const y = static_cast<T>(2) * (q.x * q.y + q.w * q.z);\n\t\tT const x = q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z;\n\n\t\tif(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon<T>()))) //avoid atan2(0,0) - handle singularity - Matiis\n\t\t\treturn static_cast<T>(0);\n\n\t\treturn static_cast<T>(atan(y, x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T pitch(qua<T, Q> const& q)\n\t{\n\t\t//return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z));\n\t\tT const y = static_cast<T>(2) * (q.y * q.z + q.w * q.x);\n\t\tT const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z;\n\n\t\tif(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon<T>()))) //avoid atan2(0,0) - handle singularity - Matiis\n\t\t\treturn static_cast<T>(static_cast<T>(2) * atan(q.x, q.w));\n\n\t\treturn static_cast<T>(atan(y, x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T yaw(qua<T, Q> const& q)\n\t{\n\t\treturn asin(clamp(static_cast<T>(-2) * (q.x * q.z - q.w * q.y), static_cast<T>(-1), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& q)\n\t{\n\t\tmat<3, 3, T, Q> Result(T(1));\n\t\tT qxx(q.x * q.x);\n\t\tT qyy(q.y * q.y);\n\t\tT qzz(q.z * q.z);\n\t\tT qxz(q.x * q.z);\n\t\tT qxy(q.x * q.y);\n\t\tT qyz(q.y * q.z);\n\t\tT qwx(q.w * q.x);\n\t\tT qwy(q.w * q.y);\n\t\tT qwz(q.w * q.z);\n\n\t\tResult[0][0] = T(1) - T(2) * (qyy +  qzz);\n\t\tResult[0][1] = T(2) * (qxy + qwz);\n\t\tResult[0][2] = T(2) * (qxz - qwy);\n\n\t\tResult[1][0] = T(2) * (qxy - qwz);\n\t\tResult[1][1] = T(1) - T(2) * (qxx +  qzz);\n\t\tResult[1][2] = T(2) * (qyz + qwx);\n\n\t\tResult[2][0] = T(2) * (qxz + qwy);\n\t\tResult[2][1] = T(2) * (qyz - qwx);\n\t\tResult[2][2] = T(1) - T(2) * (qxx +  qyy);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& q)\n\t{\n\t\treturn mat<4, 4, T, Q>(mat3_cast(q));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];\n\t\tT fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];\n\t\tT fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];\n\t\tT fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];\n\n\t\tint biggestIndex = 0;\n\t\tT fourBiggestSquaredMinus1 = fourWSquaredMinus1;\n\t\tif(fourXSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourXSquaredMinus1;\n\t\t\tbiggestIndex = 1;\n\t\t}\n\t\tif(fourYSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourYSquaredMinus1;\n\t\t\tbiggestIndex = 2;\n\t\t}\n\t\tif(fourZSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourZSquaredMinus1;\n\t\t\tbiggestIndex = 3;\n\t\t}\n\n\t\tT biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast<T>(1)) * static_cast<T>(0.5);\n\t\tT mult = static_cast<T>(0.25) / biggestVal;\n\n\t\tswitch(biggestIndex)\n\t\t{\n\t\tcase 0:\n\t\t\treturn qua<T, Q>(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult);\n\t\tcase 1:\n\t\t\treturn qua<T, Q>((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult);\n\t\tcase 2:\n\t\t\treturn qua<T, Q>((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult);\n\t\tcase 3:\n\t\t\treturn qua<T, Q>((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal);\n\t\tdefault: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity.\n\t\t\tassert(false);\n\t\t\treturn qua<T, Q>(1, 0, 0, 0);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<4, 4, T, Q> const& m4)\n\t{\n\t\treturn quat_cast(mat<3, 3, T, Q>(m4));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] < y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] <= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] > y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] >= y[i];\n\t\treturn Result;\n\t}\n\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn quatLookAtLH(direction, up);\n#\t\telse\n\t\t\treturn quatLookAtRH(direction, up);\n# \t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\n\t\tResult[2] = -direction;\n\t\tvec<3, T, Q> const& Right = cross(up, Result[2]);\n\t\tResult[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));\n\t\tResult[1] = cross(Result[2], Result[0]);\n\n\t\treturn quat_cast(Result);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\n\t\tResult[2] = direction;\n\t\tvec<3, T, Q> const& Right = cross(up, Result[2]);\n\t\tResult[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));\n\t\tResult[1] = cross(Result[2], Result[0]);\n\n\t\treturn quat_cast(Result);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"quaternion_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/quaternion_simd.inl",
    "content": ""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/random.hpp",
    "content": "/// @ref gtc_random\n/// @file glm/gtc/random.hpp\n///\n/// @see core (dependence)\n/// @see gtx_random (extended)\n///\n/// @defgroup gtc_random GLM_GTC_random\n/// @ingroup gtc\n///\n/// Include <glm/gtc/random.hpp> to use the features of this extension.\n///\n/// Generate random number from various distribution methods.\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_random extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_random\n\t/// @{\n\n\t/// Generate random numbers in the interval [Min, Max], according a linear distribution\n\t///\n\t/// @param Min Minimum value included in the sampling\n\t/// @param Max Maximum value included in the sampling\n\t/// @tparam genType Value type. Currently supported: float or double scalars.\n\t/// @see gtc_random\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType linearRand(genType Min, genType Max);\n\n\t/// Generate random numbers in the interval [Min, Max], according a linear distribution\n\t///\n\t/// @param Min Minimum value included in the sampling\n\t/// @param Max Maximum value included in the sampling\n\t/// @tparam T Value type. Currently supported: float or double.\n\t///\n\t/// @see gtc_random\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> linearRand(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// Generate random numbers in the interval [Min, Max], according a gaussian distribution\n\t///\n\t/// @see gtc_random\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation);\n\n\t/// Generate a random 2D vector which coordinates are regularly distributed on a circle of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius);\n\n\t/// Generate a random 3D vector which coordinates are regularly distributed on a sphere of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius);\n\n\t/// Generate a random 2D vector which coordinates are regularly distributed within the area of a disk of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius);\n\n\t/// Generate a random 3D vector which coordinates are regularly distributed within the volume of a ball of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius);\n\n\t/// @}\n}//namespace glm\n\n#include \"random.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/random.inl",
    "content": "#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../detail/type_vec1.hpp\"\n#include <cstdlib>\n#include <ctime>\n#include <cassert>\n#include <cmath>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <length_t L, typename T, qualifier Q>\n\tstruct compute_rand\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call();\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<1, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, uint8, P> call()\n\t\t{\n\t\t\treturn vec<1, uint8, P>(\n\t\t\t\tstatic_cast<uint8>(std::rand() % std::numeric_limits<uint8>::max()));\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<2, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, uint8, P> call()\n\t\t{\n\t\t\treturn vec<2, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<3, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, uint8, P> call()\n\t\t{\n\t\t\treturn vec<3, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<4, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint8, P> call()\n\t\t{\n\t\t\treturn vec<4, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint16, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint16, Q>(compute_rand<L, uint8, Q>::call()) << static_cast<uint16>(8)) |\n\t\t\t\t(vec<L, uint16, Q>(compute_rand<L, uint8, Q>::call()) << static_cast<uint16>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint32, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint32, Q>(compute_rand<L, uint16, Q>::call()) << static_cast<uint32>(16)) |\n\t\t\t\t(vec<L, uint32, Q>(compute_rand<L, uint16, Q>::call()) << static_cast<uint32>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint64, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint64, Q>(compute_rand<L, uint32, Q>::call()) << static_cast<uint64>(32)) |\n\t\t\t\t(vec<L, uint64, Q>(compute_rand<L, uint32, Q>::call()) << static_cast<uint64>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tstruct compute_linearRand\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int8, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int8, Q> call(vec<L, int8, Q> const& Min, vec<L, int8, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int8, Q>(compute_rand<L, uint8, Q>::call() % vec<L, uint8, Q>(Max + static_cast<int8>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint8, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint8, Q> call(vec<L, uint8, Q> const& Min, vec<L, uint8, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint8, Q>::call() % (Max + static_cast<uint8>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int16, Q> call(vec<L, int16, Q> const& Min, vec<L, int16, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int16, Q>(compute_rand<L, uint16, Q>::call() % vec<L, uint16, Q>(Max + static_cast<int16>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint16, Q> call(vec<L, uint16, Q> const& Min, vec<L, uint16, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint16, Q>::call() % (Max + static_cast<uint16>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int32, Q> call(vec<L, int32, Q> const& Min, vec<L, int32, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int32, Q>(compute_rand<L, uint32, Q>::call() % vec<L, uint32, Q>(Max + static_cast<int32>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint32, Q> call(vec<L, uint32, Q> const& Min, vec<L, uint32, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint32, Q>::call() % (Max + static_cast<uint32>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int64, Q> call(vec<L, int64, Q> const& Min, vec<L, int64, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int64, Q>(compute_rand<L, uint64, Q>::call() % vec<L, uint64, Q>(Max + static_cast<int64>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint64, Q> call(vec<L, uint64, Q> const& Min, vec<L, uint64, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint64, Q>::call() % (Max + static_cast<uint64>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, float, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, float, Q> call(vec<L, float, Q> const& Min, vec<L, float, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, float, Q>(compute_rand<L, uint32, Q>::call()) / static_cast<float>(std::numeric_limits<uint32>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, double, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, double, Q> call(vec<L, double, Q> const& Min, vec<L, double, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, double, Q>(compute_rand<L, uint64, Q>::call()) / static_cast<double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, long double, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, long double, Q> call(vec<L, long double, Q> const& Min, vec<L, long double, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, long double, Q>(compute_rand<L, uint64, Q>::call()) / static_cast<long double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max)\n\t{\n\t\treturn detail::compute_linearRand<1, genType, highp>::call(\n\t\t\tvec<1, genType, highp>(Min),\n\t\t\tvec<1, genType, highp>(Max)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> linearRand(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn detail::compute_linearRand<L, T, Q>::call(Min, Max);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation)\n\t{\n\t\tgenType w, x1, x2;\n\n\t\tdo\n\t\t{\n\t\t\tx1 = linearRand(genType(-1), genType(1));\n\t\t\tx2 = linearRand(genType(-1), genType(1));\n\n\t\t\tw = x1 * x1 + x2 * x2;\n\t\t} while(w > genType(1));\n\n\t\treturn static_cast<genType>(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> gaussRand(vec<L, T, Q> const& Mean, vec<L, T, Q> const& Deviation)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(gaussRand, Mean, Deviation);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tvec<2, T, defaultp> Result(T(0));\n\t\tT LenRadius(T(0));\n\n\t\tdo\n\t\t{\n\t\t\tResult = linearRand(\n\t\t\t\tvec<2, T, defaultp>(-Radius),\n\t\t\t\tvec<2, T, defaultp>(Radius));\n\t\t\tLenRadius = length(Result);\n\t\t}\n\t\twhile(LenRadius > Radius);\n\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tvec<3, T, defaultp> Result(T(0));\n\t\tT LenRadius(T(0));\n\n\t\tdo\n\t\t{\n\t\t\tResult = linearRand(\n\t\t\t\tvec<3, T, defaultp>(-Radius),\n\t\t\t\tvec<3, T, defaultp>(Radius));\n\t\t\tLenRadius = length(Result);\n\t\t}\n\t\twhile(LenRadius > Radius);\n\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tT a = linearRand(T(0), static_cast<T>(6.283185307179586476925286766559));\n\t\treturn vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tT theta = linearRand(T(0), T(6.283185307179586476925286766559f));\n\t\tT phi = std::acos(linearRand(T(-1.0f), T(1.0f)));\n\n\t\tT x = std::sin(phi) * std::cos(theta);\n\t\tT y = std::sin(phi) * std::sin(theta);\n\t\tT z = std::cos(phi);\n\n\t\treturn vec<3, T, defaultp>(x, y, z) * Radius;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/reciprocal.hpp",
    "content": "/// @ref gtc_reciprocal\n/// @file glm/gtc/reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_reciprocal GLM_GTC_reciprocal\n/// @ingroup gtc\n///\n/// Include <glm/gtc/reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_reciprocal extension included\")\n#endif\n\n#include \"../ext/scalar_reciprocal.hpp\"\n#include \"../ext/vector_reciprocal.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/round.hpp",
    "content": "/// @ref gtc_round\n/// @file glm/gtc/round.hpp\n///\n/// @see core (dependence)\n/// @see gtc_round (dependence)\n///\n/// @defgroup gtc_round GLM_GTC_round\n/// @ingroup gtc\n///\n/// Include <glm/gtc/round.hpp> to use the features of this extension.\n///\n/// Rounding value to specific boundings\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_round extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_round\n\t/// @{\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceilPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floorPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceilMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floorMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// @}\n} //namespace glm\n\n#include \"round.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/round.inl",
    "content": "/// @ref gtc_round\n\n#include \"../integer.hpp\"\n#include \"../ext/vector_integer.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_roundMultiple {};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - std::fmod(Source, Multiple);\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - std::fmod(Tmp, Multiple) - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n}//namespace detail\n\n\t//////////////////\n\t// ceilPowerOfTwo\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value)\n\t{\n\t\treturn detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits<genType>::is_signed>::call(vec<1, genType, defaultp>(value)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceilPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::compute_ceilPowerOfTwo<L, T, Q, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\t///////////////////\n\t// floorPowerOfTwo\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : static_cast<genType>(1) << findMSB(value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floorPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(floorPowerOfTwo, v);\n\t}\n\n\t///////////////////\n\t// roundPowerOfTwo\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value)\n\t{\n\t\tif(isPowerOfTwo(value))\n\t\t\treturn value;\n\n\t\tgenIUType const prev = static_cast<genIUType>(1) << findMSB(value);\n\t\tgenIUType const next = prev << static_cast<genIUType>(1);\n\t\treturn (next - value) < (value - prev) ? next : prev;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(roundPowerOfTwo, v);\n\t}\n\n\t//////////////////////\n\t// ceilMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_ceilMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceilMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(ceilMultiple, Source, Multiple);\n\t}\n\n\t//////////////////////\n\t// floorMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_floorMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floorMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(floorMultiple, Source, Multiple);\n\t}\n\n\t//////////////////////\n\t// roundMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_roundMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(roundMultiple, Source, Multiple);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/type_aligned.hpp",
    "content": "/// @ref gtc_type_aligned\n/// @file glm/gtc/type_aligned.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_type_aligned GLM_GTC_type_aligned\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_aligned.hpp> to use the features of this extension.\n///\n/// Aligned types allowing SIMD optimizations of vectors and matrices types\n\n#pragma once\n\n#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)\n#\terror \"GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types.\"\n#endif\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n# pragma message(\"GLM: GLM_GTC_type_aligned extension included\")\n#endif\n\n#include \"../mat4x4.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_aligned\n\t/// @{\n\n\t// -- *vec1 --\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_highp>\taligned_highp_vec1;\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_mediump>\taligned_mediump_vec1;\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_lowp>\t\taligned_lowp_vec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_highp>\taligned_highp_dvec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_mediump>\taligned_mediump_dvec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_lowp>\taligned_lowp_dvec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_highp>\t\taligned_highp_ivec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_mediump>\taligned_mediump_ivec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_lowp>\t\taligned_lowp_ivec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_highp>\t\taligned_highp_uvec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_mediump>\taligned_mediump_uvec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_lowp>\t\taligned_lowp_uvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_highp>\t\taligned_highp_bvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_mediump>\taligned_mediump_bvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_lowp>\t\taligned_lowp_bvec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_highp>\t\tpacked_highp_vec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_mediump>\tpacked_mediump_vec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_lowp>\t\tpacked_lowp_vec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_highp>\tpacked_highp_dvec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_mediump>\tpacked_mediump_dvec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_lowp>\t\tpacked_lowp_dvec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_highp>\t\tpacked_highp_ivec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_mediump>\t\tpacked_mediump_ivec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_lowp>\t\tpacked_lowp_ivec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_highp>\t\tpacked_highp_uvec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_mediump>\tpacked_mediump_uvec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_lowp>\t\tpacked_lowp_uvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_highp>\t\tpacked_highp_bvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_mediump>\tpacked_mediump_bvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_lowp>\t\tpacked_lowp_bvec1;\n\n\t// -- *vec2 --\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_highp>\taligned_highp_vec2;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_mediump>\taligned_mediump_vec2;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_lowp>\t\taligned_lowp_vec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_highp>\taligned_highp_dvec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_mediump>\taligned_mediump_dvec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_lowp>\taligned_lowp_dvec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_highp>\t\taligned_highp_ivec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_mediump>\taligned_mediump_ivec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_lowp>\t\taligned_lowp_ivec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_highp>\t\taligned_highp_uvec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_mediump>\taligned_mediump_uvec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_lowp>\t\taligned_lowp_uvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_highp>\t\taligned_highp_bvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_mediump>\taligned_mediump_bvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_lowp>\t\taligned_lowp_bvec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_highp>\t\tpacked_highp_vec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_mediump>\tpacked_mediump_vec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_lowp>\t\tpacked_lowp_vec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_highp>\tpacked_highp_dvec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_mediump>\tpacked_mediump_dvec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_lowp>\t\tpacked_lowp_dvec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_highp>\t\tpacked_highp_ivec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_mediump>\t\tpacked_mediump_ivec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_lowp>\t\tpacked_lowp_ivec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_highp>\t\tpacked_highp_uvec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_mediump>\tpacked_mediump_uvec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_lowp>\t\tpacked_lowp_uvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_highp>\t\tpacked_highp_bvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_mediump>\tpacked_mediump_bvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_lowp>\t\tpacked_lowp_bvec2;\n\n\t// -- *vec3 --\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_highp>\taligned_highp_vec3;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_mediump>\taligned_mediump_vec3;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_lowp>\t\taligned_lowp_vec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_highp>\taligned_highp_dvec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_mediump>\taligned_mediump_dvec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_lowp>\taligned_lowp_dvec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_highp>\t\taligned_highp_ivec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_mediump>\taligned_mediump_ivec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_lowp>\t\taligned_lowp_ivec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_highp>\t\taligned_highp_uvec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_mediump>\taligned_mediump_uvec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_lowp>\t\taligned_lowp_uvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_highp>\t\taligned_highp_bvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_mediump>\taligned_mediump_bvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_lowp>\t\taligned_lowp_bvec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_highp>\t\tpacked_highp_vec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_mediump>\tpacked_mediump_vec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_lowp>\t\tpacked_lowp_vec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_highp>\tpacked_highp_dvec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_mediump>\tpacked_mediump_dvec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_lowp>\t\tpacked_lowp_dvec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_highp>\t\tpacked_highp_ivec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_mediump>\t\tpacked_mediump_ivec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_lowp>\t\tpacked_lowp_ivec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_highp>\t\tpacked_highp_uvec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_mediump>\tpacked_mediump_uvec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_lowp>\t\tpacked_lowp_uvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_highp>\t\tpacked_highp_bvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_mediump>\tpacked_mediump_bvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_lowp>\t\tpacked_lowp_bvec3;\n\n\t// -- *vec4 --\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_highp>\taligned_highp_vec4;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_mediump>\taligned_mediump_vec4;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_lowp>\t\taligned_lowp_vec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_highp>\taligned_highp_dvec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_mediump>\taligned_mediump_dvec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_lowp>\taligned_lowp_dvec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_highp>\t\taligned_highp_ivec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_mediump>\taligned_mediump_ivec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_lowp>\t\taligned_lowp_ivec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_highp>\t\taligned_highp_uvec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_mediump>\taligned_mediump_uvec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_lowp>\t\taligned_lowp_uvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_highp>\t\taligned_highp_bvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_mediump>\taligned_mediump_bvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_lowp>\t\taligned_lowp_bvec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_highp>\t\tpacked_highp_vec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_mediump>\tpacked_mediump_vec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_lowp>\t\tpacked_lowp_vec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_highp>\tpacked_highp_dvec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_mediump>\tpacked_mediump_dvec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_lowp>\t\tpacked_lowp_dvec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_highp>\t\tpacked_highp_ivec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_mediump>\t\tpacked_mediump_ivec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_lowp>\t\tpacked_lowp_ivec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_highp>\t\tpacked_highp_uvec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_mediump>\tpacked_mediump_uvec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_lowp>\t\tpacked_lowp_uvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_highp>\t\tpacked_highp_bvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_mediump>\tpacked_mediump_bvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_lowp>\t\tpacked_lowp_bvec4;\n\n\t// -- *mat2 --\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_highp>\t\taligned_highp_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_mediump>\taligned_mediump_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_lowp>\t\taligned_lowp_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_highp>\taligned_highp_dmat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_mediump>\taligned_mediump_dmat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_lowp>\t\taligned_lowp_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_highp>\t\tpacked_highp_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_mediump>\tpacked_mediump_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_lowp>\t\tpacked_lowp_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_highp>\t\tpacked_highp_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_mediump>\tpacked_mediump_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_lowp>\t\tpacked_lowp_dmat2;\n\n\t// -- *mat3 --\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_highp>\t\taligned_highp_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_mediump>\taligned_mediump_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_lowp>\t\taligned_lowp_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_highp>\taligned_highp_dmat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_mediump>\taligned_mediump_dmat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_lowp>\t\taligned_lowp_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_highp>\t\tpacked_highp_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_mediump>\tpacked_mediump_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_lowp>\t\tpacked_lowp_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_highp>\t\tpacked_highp_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_mediump>\tpacked_mediump_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_lowp>\t\tpacked_lowp_dmat3;\n\n\t// -- *mat4 --\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_highp>\t\taligned_highp_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_mediump>\taligned_mediump_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_lowp>\t\taligned_lowp_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_highp>\taligned_highp_dmat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_mediump>\taligned_mediump_dmat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_lowp>\t\taligned_lowp_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_highp>\t\tpacked_highp_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_mediump>\tpacked_mediump_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_lowp>\t\tpacked_lowp_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_highp>\t\tpacked_highp_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_mediump>\tpacked_mediump_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_lowp>\t\tpacked_lowp_dmat4;\n\n\t// -- *mat2x2 --\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_highp>\t\taligned_highp_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_mediump>\taligned_mediump_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_lowp>\t\taligned_lowp_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_highp>\taligned_highp_dmat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_mediump>\taligned_mediump_dmat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_lowp>\t\taligned_lowp_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_highp>\t\tpacked_highp_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_mediump>\tpacked_mediump_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_lowp>\t\tpacked_lowp_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_highp>\t\tpacked_highp_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_mediump>\tpacked_mediump_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_lowp>\t\tpacked_lowp_dmat2x2;\n\n\t// -- *mat2x3 --\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_highp>\t\taligned_highp_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_mediump>\taligned_mediump_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_lowp>\t\taligned_lowp_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_highp>\taligned_highp_dmat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_mediump>\taligned_mediump_dmat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_lowp>\t\taligned_lowp_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_highp>\t\tpacked_highp_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_mediump>\tpacked_mediump_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_lowp>\t\tpacked_lowp_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_highp>\t\tpacked_highp_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_mediump>\tpacked_mediump_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_lowp>\t\tpacked_lowp_dmat2x3;\n\n\t// -- *mat2x4 --\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_highp>\t\taligned_highp_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_mediump>\taligned_mediump_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_lowp>\t\taligned_lowp_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_highp>\taligned_highp_dmat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_mediump>\taligned_mediump_dmat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_lowp>\t\taligned_lowp_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_highp>\t\tpacked_highp_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_mediump>\tpacked_mediump_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_lowp>\t\tpacked_lowp_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_highp>\t\tpacked_highp_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_mediump>\tpacked_mediump_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_lowp>\t\tpacked_lowp_dmat2x4;\n\n\t// -- *mat3x2 --\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_highp>\t\taligned_highp_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_mediump>\taligned_mediump_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_lowp>\t\taligned_lowp_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_highp>\taligned_highp_dmat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_mediump>\taligned_mediump_dmat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_lowp>\t\taligned_lowp_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_highp>\t\tpacked_highp_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_mediump>\tpacked_mediump_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_lowp>\t\tpacked_lowp_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_highp>\t\tpacked_highp_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_mediump>\tpacked_mediump_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_lowp>\t\tpacked_lowp_dmat3x2;\n\n\t// -- *mat3x3 --\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_highp>\t\taligned_highp_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_mediump>\taligned_mediump_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_lowp>\t\taligned_lowp_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_highp>\taligned_highp_dmat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_mediump>\taligned_mediump_dmat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_lowp>\t\taligned_lowp_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_highp>\t\tpacked_highp_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_mediump>\tpacked_mediump_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_lowp>\t\tpacked_lowp_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_highp>\t\tpacked_highp_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_mediump>\tpacked_mediump_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_lowp>\t\tpacked_lowp_dmat3x3;\n\n\t// -- *mat3x4 --\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_highp>\t\taligned_highp_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_mediump>\taligned_mediump_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_lowp>\t\taligned_lowp_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_highp>\taligned_highp_dmat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_mediump>\taligned_mediump_dmat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_lowp>\t\taligned_lowp_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_highp>\t\tpacked_highp_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_mediump>\tpacked_mediump_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_lowp>\t\tpacked_lowp_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_highp>\t\tpacked_highp_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_mediump>\tpacked_mediump_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_lowp>\t\tpacked_lowp_dmat3x4;\n\n\t// -- *mat4x2 --\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_highp>\t\taligned_highp_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_mediump>\taligned_mediump_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_lowp>\t\taligned_lowp_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_highp>\taligned_highp_dmat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_mediump>\taligned_mediump_dmat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_lowp>\t\taligned_lowp_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_highp>\t\tpacked_highp_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_mediump>\tpacked_mediump_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_lowp>\t\tpacked_lowp_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_highp>\t\tpacked_highp_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_mediump>\tpacked_mediump_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_lowp>\t\tpacked_lowp_dmat4x2;\n\n\t// -- *mat4x3 --\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_highp>\t\taligned_highp_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_mediump>\taligned_mediump_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_lowp>\t\taligned_lowp_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_highp>\taligned_highp_dmat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_mediump>\taligned_mediump_dmat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_lowp>\t\taligned_lowp_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_highp>\t\tpacked_highp_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_mediump>\tpacked_mediump_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_lowp>\t\tpacked_lowp_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_highp>\t\tpacked_highp_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_mediump>\tpacked_mediump_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_lowp>\t\tpacked_lowp_dmat4x3;\n\n\t// -- *mat4x4 --\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_highp>\t\taligned_highp_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_mediump>\taligned_mediump_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_lowp>\t\taligned_lowp_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_highp>\taligned_highp_dmat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_mediump>\taligned_mediump_dmat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_lowp>\t\taligned_lowp_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_highp>\t\tpacked_highp_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_mediump>\tpacked_mediump_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_lowp>\t\tpacked_lowp_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_highp>\t\tpacked_highp_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_mediump>\tpacked_mediump_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_lowp>\t\tpacked_lowp_dmat4x4;\n\n\t// -- default --\n\n#if(defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef aligned_lowp_vec1\t\t\taligned_vec1;\n\ttypedef aligned_lowp_vec2\t\t\taligned_vec2;\n\ttypedef aligned_lowp_vec3\t\t\taligned_vec3;\n\ttypedef aligned_lowp_vec4\t\t\taligned_vec4;\n\ttypedef packed_lowp_vec1\t\t\tpacked_vec1;\n\ttypedef packed_lowp_vec2\t\t\tpacked_vec2;\n\ttypedef packed_lowp_vec3\t\t\tpacked_vec3;\n\ttypedef packed_lowp_vec4\t\t\tpacked_vec4;\n\n\ttypedef aligned_lowp_mat2\t\t\taligned_mat2;\n\ttypedef aligned_lowp_mat3\t\t\taligned_mat3;\n\ttypedef aligned_lowp_mat4\t\t\taligned_mat4;\n\ttypedef packed_lowp_mat2\t\t\tpacked_mat2;\n\ttypedef packed_lowp_mat3\t\t\tpacked_mat3;\n\ttypedef packed_lowp_mat4\t\t\tpacked_mat4;\n\n\ttypedef aligned_lowp_mat2x2\t\t\taligned_mat2x2;\n\ttypedef aligned_lowp_mat2x3\t\t\taligned_mat2x3;\n\ttypedef aligned_lowp_mat2x4\t\t\taligned_mat2x4;\n\ttypedef aligned_lowp_mat3x2\t\t\taligned_mat3x2;\n\ttypedef aligned_lowp_mat3x3\t\t\taligned_mat3x3;\n\ttypedef aligned_lowp_mat3x4\t\t\taligned_mat3x4;\n\ttypedef aligned_lowp_mat4x2\t\t\taligned_mat4x2;\n\ttypedef aligned_lowp_mat4x3\t\t\taligned_mat4x3;\n\ttypedef aligned_lowp_mat4x4\t\t\taligned_mat4x4;\n\ttypedef packed_lowp_mat2x2\t\t\tpacked_mat2x2;\n\ttypedef packed_lowp_mat2x3\t\t\tpacked_mat2x3;\n\ttypedef packed_lowp_mat2x4\t\t\tpacked_mat2x4;\n\ttypedef packed_lowp_mat3x2\t\t\tpacked_mat3x2;\n\ttypedef packed_lowp_mat3x3\t\t\tpacked_mat3x3;\n\ttypedef packed_lowp_mat3x4\t\t\tpacked_mat3x4;\n\ttypedef packed_lowp_mat4x2\t\t\tpacked_mat4x2;\n\ttypedef packed_lowp_mat4x3\t\t\tpacked_mat4x3;\n\ttypedef packed_lowp_mat4x4\t\t\tpacked_mat4x4;\n#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))\n\ttypedef aligned_mediump_vec1\t\taligned_vec1;\n\ttypedef aligned_mediump_vec2\t\taligned_vec2;\n\ttypedef aligned_mediump_vec3\t\taligned_vec3;\n\ttypedef aligned_mediump_vec4\t\taligned_vec4;\n\ttypedef packed_mediump_vec1\t\t\tpacked_vec1;\n\ttypedef packed_mediump_vec2\t\t\tpacked_vec2;\n\ttypedef packed_mediump_vec3\t\t\tpacked_vec3;\n\ttypedef packed_mediump_vec4\t\t\tpacked_vec4;\n\n\ttypedef aligned_mediump_mat2\t\taligned_mat2;\n\ttypedef aligned_mediump_mat3\t\taligned_mat3;\n\ttypedef aligned_mediump_mat4\t\taligned_mat4;\n\ttypedef packed_mediump_mat2\t\t\tpacked_mat2;\n\ttypedef packed_mediump_mat3\t\t\tpacked_mat3;\n\ttypedef packed_mediump_mat4\t\t\tpacked_mat4;\n\n\ttypedef aligned_mediump_mat2x2\t\taligned_mat2x2;\n\ttypedef aligned_mediump_mat2x3\t\taligned_mat2x3;\n\ttypedef aligned_mediump_mat2x4\t\taligned_mat2x4;\n\ttypedef aligned_mediump_mat3x2\t\taligned_mat3x2;\n\ttypedef aligned_mediump_mat3x3\t\taligned_mat3x3;\n\ttypedef aligned_mediump_mat3x4\t\taligned_mat3x4;\n\ttypedef aligned_mediump_mat4x2\t\taligned_mat4x2;\n\ttypedef aligned_mediump_mat4x3\t\taligned_mat4x3;\n\ttypedef aligned_mediump_mat4x4\t\taligned_mat4x4;\n\ttypedef packed_mediump_mat2x2\t\tpacked_mat2x2;\n\ttypedef packed_mediump_mat2x3\t\tpacked_mat2x3;\n\ttypedef packed_mediump_mat2x4\t\tpacked_mat2x4;\n\ttypedef packed_mediump_mat3x2\t\tpacked_mat3x2;\n\ttypedef packed_mediump_mat3x3\t\tpacked_mat3x3;\n\ttypedef packed_mediump_mat3x4\t\tpacked_mat3x4;\n\ttypedef packed_mediump_mat4x2\t\tpacked_mat4x2;\n\ttypedef packed_mediump_mat4x3\t\tpacked_mat4x3;\n\ttypedef packed_mediump_mat4x4\t\tpacked_mat4x4;\n#else //defined(GLM_PRECISION_HIGHP_FLOAT)\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec1\t\t\taligned_vec1;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec2\t\t\taligned_vec2;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec3\t\t\taligned_vec3;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec4 \t\t\taligned_vec4;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec1\t\t\tpacked_vec1;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec2\t\t\tpacked_vec2;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec3\t\t\tpacked_vec3;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec4\t\t\tpacked_vec4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2\t\t\taligned_mat2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3\t\t\taligned_mat3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4\t\t\taligned_mat4;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2\t\t\tpacked_mat2;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3\t\t\tpacked_mat3;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4\t\t\tpacked_mat4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x2\t\taligned_mat2x2;\n\n\t/// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x3\t\taligned_mat2x3;\n\n\t/// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x4\t\taligned_mat2x4;\n\n\t/// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x2\t\taligned_mat3x2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x3\t\taligned_mat3x3;\n\n\t/// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x4\t\taligned_mat3x4;\n\n\t/// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x2\t\taligned_mat4x2;\n\n\t/// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x3\t\taligned_mat4x3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x4\t\taligned_mat4x4;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x2\t\t\tpacked_mat2x2;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x3\t\t\tpacked_mat2x3;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x4\t\t\tpacked_mat2x4;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x2\t\t\tpacked_mat3x2;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x3\t\t\tpacked_mat3x3;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x4\t\t\tpacked_mat3x4;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x2\t\t\tpacked_mat4x2;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x3\t\t\tpacked_mat4x3;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x4\t\t\tpacked_mat4x4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef aligned_lowp_dvec1\t\t\taligned_dvec1;\n\ttypedef aligned_lowp_dvec2\t\t\taligned_dvec2;\n\ttypedef aligned_lowp_dvec3\t\t\taligned_dvec3;\n\ttypedef aligned_lowp_dvec4\t\t\taligned_dvec4;\n\ttypedef packed_lowp_dvec1\t\t\tpacked_dvec1;\n\ttypedef packed_lowp_dvec2\t\t\tpacked_dvec2;\n\ttypedef packed_lowp_dvec3\t\t\tpacked_dvec3;\n\ttypedef packed_lowp_dvec4\t\t\tpacked_dvec4;\n\n\ttypedef aligned_lowp_dmat2\t\t\taligned_dmat2;\n\ttypedef aligned_lowp_dmat3\t\t\taligned_dmat3;\n\ttypedef aligned_lowp_dmat4\t\t\taligned_dmat4;\n\ttypedef packed_lowp_dmat2\t\t\tpacked_dmat2;\n\ttypedef packed_lowp_dmat3\t\t\tpacked_dmat3;\n\ttypedef packed_lowp_dmat4\t\t\tpacked_dmat4;\n\n\ttypedef aligned_lowp_dmat2x2\t\taligned_dmat2x2;\n\ttypedef aligned_lowp_dmat2x3\t\taligned_dmat2x3;\n\ttypedef aligned_lowp_dmat2x4\t\taligned_dmat2x4;\n\ttypedef aligned_lowp_dmat3x2\t\taligned_dmat3x2;\n\ttypedef aligned_lowp_dmat3x3\t\taligned_dmat3x3;\n\ttypedef aligned_lowp_dmat3x4\t\taligned_dmat3x4;\n\ttypedef aligned_lowp_dmat4x2\t\taligned_dmat4x2;\n\ttypedef aligned_lowp_dmat4x3\t\taligned_dmat4x3;\n\ttypedef aligned_lowp_dmat4x4\t\taligned_dmat4x4;\n\ttypedef packed_lowp_dmat2x2\t\t\tpacked_dmat2x2;\n\ttypedef packed_lowp_dmat2x3\t\t\tpacked_dmat2x3;\n\ttypedef packed_lowp_dmat2x4\t\t\tpacked_dmat2x4;\n\ttypedef packed_lowp_dmat3x2\t\t\tpacked_dmat3x2;\n\ttypedef packed_lowp_dmat3x3\t\t\tpacked_dmat3x3;\n\ttypedef packed_lowp_dmat3x4\t\t\tpacked_dmat3x4;\n\ttypedef packed_lowp_dmat4x2\t\t\tpacked_dmat4x2;\n\ttypedef packed_lowp_dmat4x3\t\t\tpacked_dmat4x3;\n\ttypedef packed_lowp_dmat4x4\t\t\tpacked_dmat4x4;\n#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))\n\ttypedef aligned_mediump_dvec1\t\taligned_dvec1;\n\ttypedef aligned_mediump_dvec2\t\taligned_dvec2;\n\ttypedef aligned_mediump_dvec3\t\taligned_dvec3;\n\ttypedef aligned_mediump_dvec4\t\taligned_dvec4;\n\ttypedef packed_mediump_dvec1\t\tpacked_dvec1;\n\ttypedef packed_mediump_dvec2\t\tpacked_dvec2;\n\ttypedef packed_mediump_dvec3\t\tpacked_dvec3;\n\ttypedef packed_mediump_dvec4\t\tpacked_dvec4;\n\n\ttypedef aligned_mediump_dmat2\t\taligned_dmat2;\n\ttypedef aligned_mediump_dmat3\t\taligned_dmat3;\n\ttypedef aligned_mediump_dmat4\t\taligned_dmat4;\n\ttypedef packed_mediump_dmat2\t\tpacked_dmat2;\n\ttypedef packed_mediump_dmat3\t\tpacked_dmat3;\n\ttypedef packed_mediump_dmat4\t\tpacked_dmat4;\n\n\ttypedef aligned_mediump_dmat2x2\t\taligned_dmat2x2;\n\ttypedef aligned_mediump_dmat2x3\t\taligned_dmat2x3;\n\ttypedef aligned_mediump_dmat2x4\t\taligned_dmat2x4;\n\ttypedef aligned_mediump_dmat3x2\t\taligned_dmat3x2;\n\ttypedef aligned_mediump_dmat3x3\t\taligned_dmat3x3;\n\ttypedef aligned_mediump_dmat3x4\t\taligned_dmat3x4;\n\ttypedef aligned_mediump_dmat4x2\t\taligned_dmat4x2;\n\ttypedef aligned_mediump_dmat4x3\t\taligned_dmat4x3;\n\ttypedef aligned_mediump_dmat4x4\t\taligned_dmat4x4;\n\ttypedef packed_mediump_dmat2x2\t\tpacked_dmat2x2;\n\ttypedef packed_mediump_dmat2x3\t\tpacked_dmat2x3;\n\ttypedef packed_mediump_dmat2x4\t\tpacked_dmat2x4;\n\ttypedef packed_mediump_dmat3x2\t\tpacked_dmat3x2;\n\ttypedef packed_mediump_dmat3x3\t\tpacked_dmat3x3;\n\ttypedef packed_mediump_dmat3x4\t\tpacked_dmat3x4;\n\ttypedef packed_mediump_dmat4x2\t\tpacked_dmat4x2;\n\ttypedef packed_mediump_dmat4x3\t\tpacked_dmat4x3;\n\ttypedef packed_mediump_dmat4x4\t\tpacked_dmat4x4;\n#else //defined(GLM_PRECISION_HIGHP_DOUBLE)\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec1\t\t\taligned_dvec1;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec2\t\t\taligned_dvec2;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec3\t\t\taligned_dvec3;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec4\t\t\taligned_dvec4;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec1\t\t\tpacked_dvec1;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec2\t\t\tpacked_dvec2;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec3\t\t\tpacked_dvec3;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec4\t\t\tpacked_dvec4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2\t\t\taligned_dmat2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3\t\t\taligned_dmat3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4\t\t\taligned_dmat4;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2\t\t\tpacked_dmat2;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3\t\t\tpacked_dmat3;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4\t\t\tpacked_dmat4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x2\t\taligned_dmat2x2;\n\n\t/// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x3\t\taligned_dmat2x3;\n\n\t/// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x4\t\taligned_dmat2x4;\n\n\t/// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x2\t\taligned_dmat3x2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x3\t\taligned_dmat3x3;\n\n\t/// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x4\t\taligned_dmat3x4;\n\n\t/// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x2\t\taligned_dmat4x2;\n\n\t/// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x3\t\taligned_dmat4x3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x4\t\taligned_dmat4x4;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x2\t\tpacked_dmat2x2;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x3\t\tpacked_dmat2x3;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x4\t\tpacked_dmat2x4;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x2\t\tpacked_dmat3x2;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x3\t\tpacked_dmat3x3;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x4\t\tpacked_dmat3x4;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x2\t\tpacked_dmat4x2;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x3\t\tpacked_dmat4x3;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x4\t\tpacked_dmat4x4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_INT))\n\ttypedef aligned_lowp_ivec1\t\t\taligned_ivec1;\n\ttypedef aligned_lowp_ivec2\t\t\taligned_ivec2;\n\ttypedef aligned_lowp_ivec3\t\t\taligned_ivec3;\n\ttypedef aligned_lowp_ivec4\t\t\taligned_ivec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_INT))\n\ttypedef aligned_mediump_ivec1\t\taligned_ivec1;\n\ttypedef aligned_mediump_ivec2\t\taligned_ivec2;\n\ttypedef aligned_mediump_ivec3\t\taligned_ivec3;\n\ttypedef aligned_mediump_ivec4\t\taligned_ivec4;\n#else //defined(GLM_PRECISION_HIGHP_INT)\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec1\t\t\taligned_ivec1;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec2\t\t\taligned_ivec2;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec3\t\t\taligned_ivec3;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec4\t\t\taligned_ivec4;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec1\t\t\tpacked_ivec1;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec2\t\t\tpacked_ivec2;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec3\t\t\tpacked_ivec3;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec4\t\t\tpacked_ivec4;\n#endif//GLM_PRECISION\n\n\t// -- Unsigned integer definition --\n\n#if(defined(GLM_PRECISION_LOWP_UINT))\n\ttypedef aligned_lowp_uvec1\t\t\taligned_uvec1;\n\ttypedef aligned_lowp_uvec2\t\t\taligned_uvec2;\n\ttypedef aligned_lowp_uvec3\t\t\taligned_uvec3;\n\ttypedef aligned_lowp_uvec4\t\t\taligned_uvec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_UINT))\n\ttypedef aligned_mediump_uvec1\t\taligned_uvec1;\n\ttypedef aligned_mediump_uvec2\t\taligned_uvec2;\n\ttypedef aligned_mediump_uvec3\t\taligned_uvec3;\n\ttypedef aligned_mediump_uvec4\t\taligned_uvec4;\n#else //defined(GLM_PRECISION_HIGHP_UINT)\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec1\t\t\taligned_uvec1;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec2\t\t\taligned_uvec2;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec3\t\t\taligned_uvec3;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec4\t\t\taligned_uvec4;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec1\t\t\tpacked_uvec1;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec2\t\t\tpacked_uvec2;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec3\t\t\tpacked_uvec3;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec4\t\t\tpacked_uvec4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_BOOL))\n\ttypedef aligned_lowp_bvec1\t\t\taligned_bvec1;\n\ttypedef aligned_lowp_bvec2\t\t\taligned_bvec2;\n\ttypedef aligned_lowp_bvec3\t\t\taligned_bvec3;\n\ttypedef aligned_lowp_bvec4\t\t\taligned_bvec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))\n\ttypedef aligned_mediump_bvec1\t\taligned_bvec1;\n\ttypedef aligned_mediump_bvec2\t\taligned_bvec2;\n\ttypedef aligned_mediump_bvec3\t\taligned_bvec3;\n\ttypedef aligned_mediump_bvec4\t\taligned_bvec4;\n#else //defined(GLM_PRECISION_HIGHP_BOOL)\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec1\t\t\taligned_bvec1;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec2\t\t\taligned_bvec2;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec3\t\t\taligned_bvec3;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec4\t\t\taligned_bvec4;\n\n\t/// 1 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec1\t\t\tpacked_bvec1;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec2\t\t\tpacked_bvec2;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec3\t\t\tpacked_bvec3;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec4\t\t\tpacked_bvec4;\n#endif//GLM_PRECISION\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/type_precision.hpp",
    "content": "/// @ref gtc_type_precision\n/// @file glm/gtc/type_precision.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_type_precision GLM_GTC_type_precision\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_precision.hpp> to use the features of this extension.\n///\n/// Defines specific C++-based qualifier types.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../ext/vector_int1_sized.hpp\"\n#include \"../ext/vector_int2_sized.hpp\"\n#include \"../ext/vector_int3_sized.hpp\"\n#include \"../ext/vector_int4_sized.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/vector_uint1_sized.hpp\"\n#include \"../ext/vector_uint2_sized.hpp\"\n#include \"../ext/vector_uint3_sized.hpp\"\n#include \"../ext/vector_uint4_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/type_vec2.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n#include \"../detail/type_mat2x2.hpp\"\n#include \"../detail/type_mat2x3.hpp\"\n#include \"../detail/type_mat2x4.hpp\"\n#include \"../detail/type_mat3x2.hpp\"\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat3x4.hpp\"\n#include \"../detail/type_mat4x2.hpp\"\n#include \"../detail/type_mat4x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_type_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t///////////////////////////\n\t// Signed int vector types\n\n\t/// @addtogroup gtc_type_precision\n\t/// @{\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_int8;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_int16;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_int32;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_int64;\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_int8_t;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_int16_t;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_int32_t;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_int64_t;\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_i8;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_i16;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_i32;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_i64;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_int8;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_int16;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_int32;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_int64;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_int8_t;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_int16_t;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_int32_t;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_int64_t;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_i8;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_i16;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_i32;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_i64;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_int8;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_int16;\n\n\t/// High qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_int32;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_int64;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_int8_t;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_int16_t;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_int32_t;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_int64_t;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_i8;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_i16;\n\n\t/// High qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_i32;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_i64;\n\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\tusing std::int8_t;\n\tusing std::int16_t;\n\tusing std::int32_t;\n\tusing std::int64_t;\n#else\n\t/// 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 int8_t;\n\n\t/// 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 int16_t;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 int32_t;\n\n\t/// 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 int64_t;\n#endif\n\n\t/// 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 i8;\n\n\t/// 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 i16;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 i32;\n\n\t/// 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 i64;\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_uint8;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_uint16;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_uint32;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_uint64;\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_uint8_t;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_uint16_t;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_uint32_t;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_uint64_t;\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_u8;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_u16;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_u32;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_u64;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_uint8;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_uint16;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_uint32;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_uint64;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_uint8_t;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_uint16_t;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_uint32_t;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_uint64_t;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_u8;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_u16;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_u32;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_u64;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_uint8;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_uint16;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_uint32;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_uint64;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_uint8_t;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_uint16_t;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_uint32_t;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_uint64_t;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_u8;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_u16;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_u32;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_u64;\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\tusing std::uint8_t;\n\tusing std::uint16_t;\n\tusing std::uint32_t;\n\tusing std::uint64_t;\n#else\n\t/// Default qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 uint8_t;\n\n\t/// Default qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 uint16_t;\n\n\t/// Default qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 uint32_t;\n\n\t/// Default qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 uint64_t;\n#endif\n\n\t/// Default qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 u8;\n\n\t/// Default qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 u16;\n\n\t/// Default qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 u32;\n\n\t/// Default qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 u64;\n\n\n\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// Single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float float32;\n\n\t/// Double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef double float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_float32;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_float64;\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_float32_t;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_float64_t;\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_f32;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_f64;\n\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_float32;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_float64;\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_float32_t;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_float64_t;\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_f32;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_f64;\n\n\n#if(defined(GLM_PRECISION_LOWP_FLOAT))\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_float32_t float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_float64_t float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32 f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64 f64;\n\n#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float32 float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float64 float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float32 f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float64 f64;\n\n#else//(defined(GLM_PRECISION_HIGHP_FLOAT))\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float32_t float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float64_t float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float32_t f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float64_t f64;\n#endif\n\n\n\t/// Low single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, lowp> lowp_fvec1;\n\n\t/// Low single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, lowp> lowp_fvec2;\n\n\t/// Low single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, lowp> lowp_fvec3;\n\n\t/// Low single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, lowp> lowp_fvec4;\n\n\n\t/// Medium single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, mediump> mediump_fvec1;\n\n\t/// Medium Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, mediump> mediump_fvec2;\n\n\t/// Medium Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, mediump> mediump_fvec3;\n\n\t/// Medium Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, mediump> mediump_fvec4;\n\n\n\t/// High single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, highp> highp_fvec1;\n\n\t/// High Single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, float, highp> highp_fvec2;\n\n\t/// High Single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, float, highp> highp_fvec3;\n\n\t/// High Single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, float, highp> highp_fvec4;\n\n\n\t/// Low single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, lowp> lowp_f32vec1;\n\n\t/// Low single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, f32, lowp> lowp_f32vec2;\n\n\t/// Low single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, f32, lowp> lowp_f32vec3;\n\n\t/// Low single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, f32, lowp> lowp_f32vec4;\n\n\t/// Medium single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, mediump> mediump_f32vec1;\n\n\t/// Medium single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, f32, mediump> mediump_f32vec2;\n\n\t/// Medium single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, f32, mediump> mediump_f32vec3;\n\n\t/// Medium single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, f32, mediump> mediump_f32vec4;\n\n\t/// High single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, highp> highp_f32vec1;\n\n\t/// High single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f32, highp> highp_f32vec2;\n\n\t/// High single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f32, highp> highp_f32vec3;\n\n\t/// High single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f32, highp> highp_f32vec4;\n\n\n\t/// Low double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, lowp> lowp_f64vec1;\n\n\t/// Low double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, lowp> lowp_f64vec2;\n\n\t/// Low double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, lowp> lowp_f64vec3;\n\n\t/// Low double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, lowp> lowp_f64vec4;\n\n\t/// Medium double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, mediump> mediump_f64vec1;\n\n\t/// Medium double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, mediump> mediump_f64vec2;\n\n\t/// Medium double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, mediump> mediump_f64vec3;\n\n\t/// Medium double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, mediump> mediump_f64vec4;\n\n\t/// High double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, highp> highp_f64vec1;\n\n\t/// High double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, highp> highp_f64vec2;\n\n\t/// High double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, highp> highp_f64vec3;\n\n\t/// High double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, highp> highp_f64vec4;\n\n\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_f32 lowp_fmat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, lowp> lowp_fmat2x2;\n\n\t/// Low single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, lowp> lowp_fmat2x3;\n\n\t/// Low single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, lowp> lowp_fmat2x4;\n\n\t/// Low single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, lowp> lowp_fmat3x2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, lowp> lowp_fmat3x3;\n\n\t/// Low single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, lowp> lowp_fmat3x4;\n\n\t/// Low single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, lowp> lowp_fmat4x2;\n\n\t/// Low single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, lowp> lowp_fmat4x3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, lowp> lowp_fmat4x4;\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_fmat1x1 lowp_fmat1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat2x2 lowp_fmat2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat3x3 lowp_fmat3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat4x4 lowp_fmat4;\n\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_f32 mediump_fmat1x1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, mediump> mediump_fmat2x2;\n\n\t/// Medium single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, mediump> mediump_fmat2x3;\n\n\t/// Medium single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, mediump> mediump_fmat2x4;\n\n\t/// Medium single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, mediump> mediump_fmat3x2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, mediump> mediump_fmat3x3;\n\n\t/// Medium single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, mediump> mediump_fmat3x4;\n\n\t/// Medium single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, mediump> mediump_fmat4x2;\n\n\t/// Medium single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, mediump> mediump_fmat4x3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, mediump> mediump_fmat4x4;\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_fmat1x1 mediump_fmat1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat2x2 mediump_fmat2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat3x3 mediump_fmat3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat4x4 mediump_fmat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_f32 highp_fmat1x1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, highp> highp_fmat2x2;\n\n\t/// High single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, highp> highp_fmat2x3;\n\n\t/// High single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, highp> highp_fmat2x4;\n\n\t/// High single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, highp> highp_fmat3x2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, highp> highp_fmat3x3;\n\n\t/// High single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, highp> highp_fmat3x4;\n\n\t/// High single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, highp> highp_fmat4x2;\n\n\t/// High single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, highp> highp_fmat4x3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, highp> highp_fmat4x4;\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_fmat1x1 highp_fmat1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat2x2 highp_fmat2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat3x3 highp_fmat3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat4x4 highp_fmat4;\n\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 lowp_f32mat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, lowp> lowp_f32mat2x2;\n\n\t/// Low single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, lowp> lowp_f32mat2x3;\n\n\t/// Low single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, lowp> lowp_f32mat2x4;\n\n\t/// Low single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, lowp> lowp_f32mat3x2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, lowp> lowp_f32mat3x3;\n\n\t/// Low single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, lowp> lowp_f32mat3x4;\n\n\t/// Low single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, lowp> lowp_f32mat4x2;\n\n\t/// Low single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, lowp> lowp_f32mat4x3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, lowp> lowp_f32mat4x4;\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat2x2 lowp_f32mat2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat3x3 lowp_f32mat3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat4x4 lowp_f32mat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 mediump_f32mat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, mediump> mediump_f32mat2x2;\n\n\t/// Medium single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, mediump> mediump_f32mat2x3;\n\n\t/// Medium single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, mediump> mediump_f32mat2x4;\n\n\t/// Medium single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, mediump> mediump_f32mat3x2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, mediump> mediump_f32mat3x3;\n\n\t/// Medium single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, mediump> mediump_f32mat3x4;\n\n\t/// Medium single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, mediump> mediump_f32mat4x2;\n\n\t/// Medium single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, mediump> mediump_f32mat4x3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, mediump> mediump_f32mat4x4;\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, mediump> f32mat1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat2x2 mediump_f32mat2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat3x3 mediump_f32mat3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat4x4 mediump_f32mat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 highp_f32mat1x1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, highp> highp_f32mat2x2;\n\n\t/// High single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, highp> highp_f32mat2x3;\n\n\t/// High single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, highp> highp_f32mat2x4;\n\n\t/// High single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, highp> highp_f32mat3x2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, highp> highp_f32mat3x3;\n\n\t/// High single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, highp> highp_f32mat3x4;\n\n\t/// High single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, highp> highp_f32mat4x2;\n\n\t/// High single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, highp> highp_f32mat4x3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, highp> highp_f32mat4x4;\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, highp> f32mat1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat2x2 highp_f32mat2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat3x3 highp_f32mat3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat4x4 highp_f32mat4;\n\n\n\t/// Low double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 lowp_f64mat1x1;\n\n\t/// Low double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, lowp> lowp_f64mat2x2;\n\n\t/// Low double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, lowp> lowp_f64mat2x3;\n\n\t/// Low double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, lowp> lowp_f64mat2x4;\n\n\t/// Low double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, lowp> lowp_f64mat3x2;\n\n\t/// Low double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, lowp> lowp_f64mat3x3;\n\n\t/// Low double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, lowp> lowp_f64mat3x4;\n\n\t/// Low double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, lowp> lowp_f64mat4x2;\n\n\t/// Low double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, lowp> lowp_f64mat4x3;\n\n\t/// Low double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, lowp> lowp_f64mat4x4;\n\n\t/// Low double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_f64mat1x1 lowp_f64mat1;\n\n\t/// Low double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat2x2 lowp_f64mat2;\n\n\t/// Low double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat3x3 lowp_f64mat3;\n\n\t/// Low double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat4x4 lowp_f64mat4;\n\n\n\t/// Medium double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 Highp_f64mat1x1;\n\n\t/// Medium double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, mediump> mediump_f64mat2x2;\n\n\t/// Medium double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, mediump> mediump_f64mat2x3;\n\n\t/// Medium double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, mediump> mediump_f64mat2x4;\n\n\t/// Medium double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, mediump> mediump_f64mat3x2;\n\n\t/// Medium double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, mediump> mediump_f64mat3x3;\n\n\t/// Medium double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, mediump> mediump_f64mat3x4;\n\n\t/// Medium double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, mediump> mediump_f64mat4x2;\n\n\t/// Medium double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, mediump> mediump_f64mat4x3;\n\n\t/// Medium double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, mediump> mediump_f64mat4x4;\n\n\t/// Medium double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_f64mat1x1 mediump_f64mat1;\n\n\t/// Medium double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat2x2 mediump_f64mat2;\n\n\t/// Medium double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat3x3 mediump_f64mat3;\n\n\t/// Medium double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat4x4 mediump_f64mat4;\n\n\t/// High double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 highp_f64mat1x1;\n\n\t/// High double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, highp> highp_f64mat2x2;\n\n\t/// High double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, highp> highp_f64mat2x3;\n\n\t/// High double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, highp> highp_f64mat2x4;\n\n\t/// High double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, highp> highp_f64mat3x2;\n\n\t/// High double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, highp> highp_f64mat3x3;\n\n\t/// High double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, highp> highp_f64mat3x4;\n\n\t/// High double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, highp> highp_f64mat4x2;\n\n\t/// High double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, highp> highp_f64mat4x3;\n\n\t/// High double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, highp> highp_f64mat4x4;\n\n\t/// High double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_f64mat1x1 highp_f64mat1;\n\n\t/// High double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat2x2 highp_f64mat2;\n\n\t/// High double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat3x3 highp_f64mat3;\n\n\t/// High double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat4x4 highp_f64mat4;\n\n\n\t/////////////////////////////\n\t// Signed int vector types\n\n\t/// Low qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, lowp>\t\tlowp_ivec1;\n\n\t/// Low qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, lowp>\t\tlowp_ivec2;\n\n\t/// Low qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, lowp>\t\tlowp_ivec3;\n\n\t/// Low qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, lowp>\t\tlowp_ivec4;\n\n\n\t/// Medium qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, mediump>\tmediump_ivec1;\n\n\t/// Medium qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, mediump>\tmediump_ivec2;\n\n\t/// Medium qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, mediump>\tmediump_ivec3;\n\n\t/// Medium qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, mediump>\tmediump_ivec4;\n\n\n\t/// High qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, highp>\t\thighp_ivec1;\n\n\t/// High qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, highp>\t\thighp_ivec2;\n\n\t/// High qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, highp>\t\thighp_ivec3;\n\n\t/// High qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, highp>\t\thighp_ivec4;\n\n\n\t/// Low qualifier 8 bit signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, lowp>\t\tlowp_i8vec1;\n\n\t/// Low qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, lowp>\t\tlowp_i8vec2;\n\n\t/// Low qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, lowp>\t\tlowp_i8vec3;\n\n\t/// Low qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, lowp>\t\tlowp_i8vec4;\n\n\n\t/// Medium qualifier 8 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, mediump>\t\tmediump_i8vec1;\n\n\t/// Medium qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, mediump>\t\tmediump_i8vec2;\n\n\t/// Medium qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, mediump>\t\tmediump_i8vec3;\n\n\t/// Medium qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, mediump>\t\tmediump_i8vec4;\n\n\n\t/// High qualifier 8 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, highp>\t\thighp_i8vec1;\n\n\t/// High qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, highp>\t\thighp_i8vec2;\n\n\t/// High qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, highp>\t\thighp_i8vec3;\n\n\t/// High qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, highp>\t\thighp_i8vec4;\n\n\n\t/// Low qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, lowp>\t\tlowp_i16vec1;\n\n\t/// Low qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, lowp>\t\tlowp_i16vec2;\n\n\t/// Low qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, lowp>\t\tlowp_i16vec3;\n\n\t/// Low qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, lowp>\t\tlowp_i16vec4;\n\n\n\t/// Medium qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, mediump>\tmediump_i16vec1;\n\n\t/// Medium qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, mediump>\tmediump_i16vec2;\n\n\t/// Medium qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, mediump>\tmediump_i16vec3;\n\n\t/// Medium qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, mediump>\tmediump_i16vec4;\n\n\n\t/// High qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, highp>\t\thighp_i16vec1;\n\n\t/// High qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, highp>\t\thighp_i16vec2;\n\n\t/// High qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, highp>\t\thighp_i16vec3;\n\n\t/// High qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, highp>\t\thighp_i16vec4;\n\n\n\t/// Low qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, lowp>\t\tlowp_i32vec1;\n\n\t/// Low qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, lowp>\t\tlowp_i32vec2;\n\n\t/// Low qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, lowp>\t\tlowp_i32vec3;\n\n\t/// Low qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, lowp>\t\tlowp_i32vec4;\n\n\n\t/// Medium qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, mediump>\tmediump_i32vec1;\n\n\t/// Medium qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, mediump>\tmediump_i32vec2;\n\n\t/// Medium qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, mediump>\tmediump_i32vec3;\n\n\t/// Medium qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, mediump>\tmediump_i32vec4;\n\n\n\t/// High qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, highp>\t\thighp_i32vec1;\n\n\t/// High qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, highp>\t\thighp_i32vec2;\n\n\t/// High qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, highp>\t\thighp_i32vec3;\n\n\t/// High qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, highp>\t\thighp_i32vec4;\n\n\n\t/// Low qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, lowp>\t\tlowp_i64vec1;\n\n\t/// Low qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, lowp>\t\tlowp_i64vec2;\n\n\t/// Low qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, lowp>\t\tlowp_i64vec3;\n\n\t/// Low qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, lowp>\t\tlowp_i64vec4;\n\n\n\t/// Medium qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, mediump>\tmediump_i64vec1;\n\n\t/// Medium qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, mediump>\tmediump_i64vec2;\n\n\t/// Medium qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, mediump>\tmediump_i64vec3;\n\n\t/// Medium qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, mediump>\tmediump_i64vec4;\n\n\n\t/// High qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, highp>\t\thighp_i64vec1;\n\n\t/// High qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, highp>\t\thighp_i64vec2;\n\n\t/// High qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, highp>\t\thighp_i64vec3;\n\n\t/// High qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, highp>\t\thighp_i64vec4;\n\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, lowp>\t\tlowp_uvec1;\n\n\t/// Low qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, lowp>\t\tlowp_uvec2;\n\n\t/// Low qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, lowp>\t\tlowp_uvec3;\n\n\t/// Low qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, lowp>\t\tlowp_uvec4;\n\n\n\t/// Medium qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, mediump>\tmediump_uvec1;\n\n\t/// Medium qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, mediump>\tmediump_uvec2;\n\n\t/// Medium qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, mediump>\tmediump_uvec3;\n\n\t/// Medium qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, mediump>\tmediump_uvec4;\n\n\n\t/// High qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, highp>\t\thighp_uvec1;\n\n\t/// High qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, highp>\t\thighp_uvec2;\n\n\t/// High qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, highp>\t\thighp_uvec3;\n\n\t/// High qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, highp>\t\thighp_uvec4;\n\n\n\t/// Low qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, lowp>\t\tlowp_u8vec1;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, lowp>\t\tlowp_u8vec2;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, lowp>\t\tlowp_u8vec3;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, lowp>\t\tlowp_u8vec4;\n\n\n\t/// Medium qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, mediump>\t\tmediump_u8vec1;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, mediump>\t\tmediump_u8vec2;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, mediump>\t\tmediump_u8vec3;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, mediump>\t\tmediump_u8vec4;\n\n\n\t/// High qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, highp>\t\thighp_u8vec1;\n\n\t/// High qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, highp>\t\thighp_u8vec2;\n\n\t/// High qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, highp>\t\thighp_u8vec3;\n\n\t/// High qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, highp>\t\thighp_u8vec4;\n\n\n\t/// Low qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, lowp>\t\tlowp_u16vec1;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, lowp>\t\tlowp_u16vec2;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, lowp>\t\tlowp_u16vec3;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, lowp>\t\tlowp_u16vec4;\n\n\n\t/// Medium qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, mediump>\tmediump_u16vec1;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, mediump>\tmediump_u16vec2;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, mediump>\tmediump_u16vec3;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, mediump>\tmediump_u16vec4;\n\n\n\t/// High qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, highp>\t\thighp_u16vec1;\n\n\t/// High qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, highp>\t\thighp_u16vec2;\n\n\t/// High qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, highp>\t\thighp_u16vec3;\n\n\t/// High qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, highp>\t\thighp_u16vec4;\n\n\n\t/// Low qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, lowp>\t\tlowp_u32vec1;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, lowp>\t\tlowp_u32vec2;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, lowp>\t\tlowp_u32vec3;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, lowp>\t\tlowp_u32vec4;\n\n\n\t/// Medium qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, mediump>\tmediump_u32vec1;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, mediump>\tmediump_u32vec2;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, mediump>\tmediump_u32vec3;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, mediump>\tmediump_u32vec4;\n\n\n\t/// High qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, highp>\t\thighp_u32vec1;\n\n\t/// High qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, highp>\t\thighp_u32vec2;\n\n\t/// High qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, highp>\t\thighp_u32vec3;\n\n\t/// High qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, highp>\t\thighp_u32vec4;\n\n\n\t/// Low qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, lowp>\t\tlowp_u64vec1;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, lowp>\t\tlowp_u64vec2;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, lowp>\t\tlowp_u64vec3;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, lowp>\t\tlowp_u64vec4;\n\n\n\t/// Medium qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, mediump>\tmediump_u64vec1;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, mediump>\tmediump_u64vec2;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, mediump>\tmediump_u64vec3;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, mediump>\tmediump_u64vec4;\n\n\n\t/// High qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, highp>\t\thighp_u64vec1;\n\n\t/// High qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, highp>\t\thighp_u64vec2;\n\n\t/// High qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, highp>\t\thighp_u64vec3;\n\n\t/// High qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, highp>\t\thighp_u64vec4;\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 float32_t;\n\n\t/// 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 f32;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t\t/// 64 bit double-qualifier floating-point scalar.\n\t\t/// @see gtc_type_precision\n\t\ttypedef float64 float64_t;\n\n\t\t/// 64 bit double-qualifier floating-point scalar.\n\t\t/// @see gtc_type_precision\n\t\ttypedef float64 f64;\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// Single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, defaultp> fvec1;\n\n\t/// Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, defaultp> fvec2;\n\n\t/// Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, defaultp> fvec3;\n\n\t/// Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, defaultp> fvec4;\n\n\n\t/// Single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, defaultp> f32vec1;\n\n\t/// Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f32, defaultp> f32vec2;\n\n\t/// Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f32, defaultp> f32vec3;\n\n\t/// Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f32, defaultp> f32vec4;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\t\t/// Double-qualifier floating-point vector of 1 component.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<1, f64, defaultp> f64vec1;\n\n\t\t/// Double-qualifier floating-point vector of 2 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<2, f64, defaultp> f64vec2;\n\n\t\t/// Double-qualifier floating-point vector of 3 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<3, f64, defaultp> f64vec3;\n\n\t\t/// Double-qualifier floating-point vector of 4 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<4, f64, defaultp> f64vec4;\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32> fmat1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> fmat2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> fmat3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> fmat4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 fmat1x1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> fmat2x2;\n\n\t/// Single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, defaultp> fmat2x3;\n\n\t/// Single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, defaultp> fmat2x4;\n\n\t/// Single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, defaultp> fmat3x2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> fmat3x3;\n\n\t/// Single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, defaultp> fmat3x4;\n\n\t/// Single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, defaultp> fmat4x2;\n\n\t/// Single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, defaultp> fmat4x3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> fmat4x4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, defaultp> f32mat1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> f32mat2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> f32mat3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> f32mat4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 f32mat1x1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> f32mat2x2;\n\n\t/// Single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, defaultp> f32mat2x3;\n\n\t/// Single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, defaultp> f32mat2x4;\n\n\t/// Single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, defaultp> f32mat3x2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> f32mat3x3;\n\n\t/// Single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, defaultp> f32mat3x4;\n\n\t/// Single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, defaultp> f32mat4x2;\n\n\t/// Single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, defaultp> f32mat4x3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> f32mat4x4;\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f64, defaultp> f64mat1;\n\n\t/// Double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, defaultp> f64mat2;\n\n\t/// Double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, defaultp> f64mat3;\n\n\t/// Double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, defaultp> f64mat4;\n\n\n\t/// Double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 f64mat1x1;\n\n\t/// Double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, defaultp> f64mat2x2;\n\n\t/// Double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, defaultp> f64mat2x3;\n\n\t/// Double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, defaultp> f64mat2x4;\n\n\t/// Double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, defaultp> f64mat3x2;\n\n\t/// Double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, defaultp> f64mat3x3;\n\n\t/// Double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, defaultp> f64mat3x4;\n\n\t/// Double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, defaultp> f64mat4x2;\n\n\t/// Double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, defaultp> f64mat4x3;\n\n\t/// Double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, defaultp> f64mat4x4;\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t//////////////////////////\n\t// Quaternion types\n\n\t/// Single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, defaultp> f32quat;\n\n\t/// Low single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, lowp> lowp_f32quat;\n\n\t/// Low double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, lowp> lowp_f64quat;\n\n\t/// Medium single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, mediump> mediump_f32quat;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Medium double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, mediump> mediump_f64quat;\n\n\t/// High single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, highp> highp_f32quat;\n\n\t/// High double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, highp> highp_f64quat;\n\n\t/// Double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, defaultp> f64quat;\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// @}\n}//namespace glm\n\n#include \"type_precision.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/type_precision.inl",
    "content": "/// @ref gtc_precision\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/type_ptr.hpp",
    "content": "/// @ref gtc_type_ptr\n/// @file glm/gtc/type_ptr.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_type_ptr GLM_GTC_type_ptr\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_ptr.hpp> to use the features of this extension.\n///\n/// Handles the interaction between pointers and vector, matrix types.\n///\n/// This extension defines an overloaded function, glm::value_ptr. It returns\n/// a pointer to the memory layout of the object. Matrix types store their values\n/// in column-major order.\n///\n/// This is useful for uploading data to matrices or copying data to buffer objects.\n///\n/// Example:\n/// @code\n/// #include <glm/glm.hpp>\n/// #include <glm/gtc/type_ptr.hpp>\n///\n/// glm::vec3 aVector(3);\n/// glm::mat4 someMatrix(1.0);\n///\n/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));\n/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));\n/// @endcode\n///\n/// <glm/gtc/type_ptr.hpp> need to be included to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n#include <cstring>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_type_ptr extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_ptr\n\t/// @{\n\n\t/// Return the constant address to the data of the input parameter.\n\t/// @see gtc_type_ptr\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr);\n\n\t/// Build a quaternion from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL qua<T, defaultp> make_quat(T const * const ptr);\n\n\t/// @}\n}//namespace glm\n\n#include \"type_ptr.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/type_ptr.inl",
    "content": "/// @ref gtc_type_ptr\n\n#include <cstring>\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_ptr\n\t/// @{\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const * value_ptr(qua<T, Q> const& q)\n\t{\n\t\treturn &(q[0]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(qua<T, Q>& q)\n\t{\n\t\treturn &(q[0]);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v.x, static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v.x, v.y, static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, v.y, static_cast<T>(0), static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, v.y, v.z, static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr)\n\t{\n\t\tvec<2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr)\n\t{\n\t\tvec<3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr)\n\t{\n\t\tvec<4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr)\n\t{\n\t\tmat<2, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr)\n\t{\n\t\tmat<2, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr)\n\t{\n\t\tmat<2, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr)\n\t{\n\t\tmat<3, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr)\n\t{\n\t\tmat<3, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr)\n\t{\n\t\tmat<3, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr)\n\t{\n\t\tmat<4, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr)\n\t{\n\t\tmat<4, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr)\n\t{\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr)\n\t{\n\t\treturn make_mat2x2(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr)\n\t{\n\t\treturn make_mat3x3(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr)\n\t{\n\t\treturn make_mat4x4(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER qua<T, defaultp> make_quat(T const *const ptr)\n\t{\n\t\tqua<T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(qua<T, defaultp>));\n\t\treturn Result;\n\t}\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/ulp.hpp",
    "content": "/// @ref gtc_ulp\n/// @file glm/gtc/ulp.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_ulp GLM_GTC_ulp\n/// @ingroup gtc\n///\n/// Include <glm/gtc/ulp.hpp> to use the features of this extension.\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType next_float(genType x);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prev_float(genType x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType next_float(genType x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prev_float(genType x, int ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @see gtc_ulp\n\tGLM_FUNC_DECL int float_distance(float x, float y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @see gtc_ulp\n\tGLM_FUNC_DECL int64 float_distance(double x, double y);\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> float_distance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int64, Q> float_distance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"ulp.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/ulp.inl",
    "content": "/// @ref gtc_ulp\n\n#include \"../ext/scalar_ulp.hpp\"\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER float next_float(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<float>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafterf(x, FLT_MAX);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafterf(x, FLT_MAX);\n#\t\telse\n\t\treturn nextafterf(x, FLT_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER double next_float(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafter(x, DBL_MAX);\n#\t\telse\n\t\treturn nextafter(x, DBL_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T next_float(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'next_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor (int i = 0; i < ULPs; ++i)\n\t\t\ttemp = next_float(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER float prev_float(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<float>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafterf(x, FLT_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafterf(x, FLT_MIN);\n#\t\telse\n\t\treturn nextafterf(x, FLT_MIN);\n#\t\tendif\n\t}\n\n\tGLM_FUNC_QUALIFIER double prev_float(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<double>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn _nextafter(x, DBL_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafter(x, DBL_MIN);\n#\t\telse\n\t\treturn nextafter(x, DBL_MIN);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T prev_float(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'prev_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor (int i = 0; i < ULPs; ++i)\n\t\t\ttemp = prev_float(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER int float_distance(float x, float y)\n\t{\n\t\tdetail::float_t<float> const a(x);\n\t\tdetail::float_t<float> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 float_distance(double x, double y)\n\t{\n\t\tdetail::float_t<double> const a(x);\n\t\tdetail::float_t<double> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> float_distance(vec<L, float, Q> const& x, vec<L, float, Q> const& y)\n\t{\n\t\tvec<L, int, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = float_distance(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int64, Q> float_distance(vec<L, double, Q> const& x, vec<L, double, Q> const& y)\n\t{\n\t\tvec<L, int64, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = float_distance(x[i], y[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtc/vec1.hpp",
    "content": "/// @ref gtc_vec1\n/// @file glm/gtc/vec1.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_vec1 GLM_GTC_vec1\n/// @ingroup gtc\n///\n/// Include <glm/gtc/vec1.hpp> to use the features of this extension.\n///\n/// Add vec1, ivec1, uvec1 and bvec1 types.\n\n#pragma once\n\n// Dependency:\n#include \"../ext/vector_bool1.hpp\"\n#include \"../ext/vector_bool1_precision.hpp\"\n#include \"../ext/vector_float1.hpp\"\n#include \"../ext/vector_float1_precision.hpp\"\n#include \"../ext/vector_double1.hpp\"\n#include \"../ext/vector_double1_precision.hpp\"\n#include \"../ext/vector_int1.hpp\"\n#include \"../ext/vector_int1_sized.hpp\"\n#include \"../ext/vector_uint1.hpp\"\n#include \"../ext/vector_uint1_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_vec1 extension included\")\n#endif\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/associated_min_max.hpp",
    "content": "/// @ref gtx_associated_min_max\n/// @file glm/gtx/associated_min_max.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max\n/// @ingroup gtx\n///\n/// Include <glm/gtx/associated_min_max.hpp> to use the features of this extension.\n///\n/// @brief Min and max functions that return associated values not the compared ones.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_associated_min_max extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_associated_min_max\n\t/// @{\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tT x, const vec<L, U, Q>& a,\n\t\tT y, const vec<L, U, Q>& b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b);\n\n\t/// Minimum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c);\n\n\t/// Minimum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c,\n\t\tT w, U d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\t\tvec<L, T, Q> const& w, vec<L, U, Q> const& d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c,\n\t\tT w, vec<L, U, Q> const& d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c,\n\t\tvec<L, T, Q> const& w, U d);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c,\n\t\tT w, U d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\t\tvec<L, T, Q> const& w, vec<L, U, Q> const& d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c,\n\t\tT w, vec<L, U, Q> const& d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c,\n\t\tvec<L, T, Q> const& w, U d);\n\n\t/// @}\n} //namespace glm\n\n#include \"associated_min_max.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/associated_min_max.inl",
    "content": "/// @ref gtx_associated_min_max\n\nnamespace glm{\n\n// Min comparison between 2 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b)\n{\n\treturn x < y ? a : b;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? a[i] : b[i];\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tT x, const vec<L, U, Q>& a,\n\tT y, const vec<L, U, Q>& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x < y ? a[i] : b[i];\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? a : b;\n\treturn Result;\n}\n\n// Min comparison between 3 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c\n)\n{\n\tU Result = x < y ? (x < z ? a : c) : (y < z ? b : c);\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c,\n\tT w, U d\n)\n{\n\tT Test1 = min(x, y);\n\tT Test2 = min(z, w);\n\tU Result1 = x < y ? a : b;\n\tU Result2 = z < w ? c : d;\n\tU Result = Test1 < Test2 ? Result1 : Result2;\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\tvec<L, T, Q> const& w, vec<L, U, Q> const& d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = min(x[i], y[i]);\n\t\tT Test2 = min(z[i], w[i]);\n\t\tU Result1 = x[i] < y[i] ? a[i] : b[i];\n\t\tU Result2 = z[i] < w[i] ? c[i] : d[i];\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c,\n\tT w, vec<L, U, Q> const& d\n)\n{\n\tT Test1 = min(x, y);\n\tT Test2 = min(z, w);\n\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tU Result1 = x < y ? a[i] : b[i];\n\t\tU Result2 = z < w ? c[i] : d[i];\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c,\n\tvec<L, T, Q> const& w, U d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = min(x[i], y[i]);\n\t\tT Test2 = min(z[i], w[i]);\n\t\tU Result1 = x[i] < y[i] ? a : b;\n\t\tU Result2 = z[i] < w[i] ? c : d;\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b)\n{\n\treturn x > y ? a : b;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? a[i] : b[i];\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x > y ? a[i] : b[i];\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b\n)\n{\n\tvec<L, T, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? a : b;\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c\n)\n{\n\tU Result = x > y ? (x > z ? a : c) : (y > z ? b : c);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c\n)\n{\n\tvec<L, T, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c,\n\tT w, U d\n)\n{\n\tT Test1 = max(x, y);\n\tT Test2 = max(z, w);\n\tU Result1 = x > y ? a : b;\n\tU Result2 = z > w ? c : d;\n\tU Result = Test1 > Test2 ? Result1 : Result2;\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\tvec<L, T, Q> const& w, vec<L, U, Q> const& d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = max(x[i], y[i]);\n\t\tT Test2 = max(z[i], w[i]);\n\t\tU Result1 = x[i] > y[i] ? a[i] : b[i];\n\t\tU Result2 = z[i] > w[i] ? c[i] : d[i];\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c,\n\tT w, vec<L, U, Q> const& d\n)\n{\n\tT Test1 = max(x, y);\n\tT Test2 = max(z, w);\n\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tU Result1 = x > y ? a[i] : b[i];\n\t\tU Result2 = z > w ? c[i] : d[i];\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c,\n\tvec<L, T, Q> const& w, U d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = max(x[i], y[i]);\n\t\tT Test2 = max(z[i], w[i]);\n\t\tU Result1 = x[i] > y[i] ? a : b;\n\t\tU Result2 = z[i] > w[i] ? c : d;\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/bit.hpp",
    "content": "/// @ref gtx_bit\n/// @file glm/gtx/bit.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_bit GLM_GTX_bit\n/// @ingroup gtx\n///\n/// Include <glm/gtx/bit.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/bitfield.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_bit extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_bit\n\t/// @{\n\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType highestBitValue(genIUType Value);\n\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType lowestBitValue(genIUType Value);\n\n\t/// Find the highest bit set to 1 in a integer variable and return its value.\n\t///\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> highestBitValue(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is just higher the input value.\n\t/// Deprecated, use ceilPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value);\n\n\t/// Return the power of two number which value is just higher the input value.\n\t/// Deprecated, use ceilPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoAbove(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is just lower the input value.\n\t/// Deprecated, use floorPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value);\n\n\t/// Return the power of two number which value is just lower the input value.\n\t/// Deprecated, use floorPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoBelow(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t/// Deprecated, use roundPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t/// Deprecated, use roundPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoNearest(vec<L, T, Q> const& value);\n\n\t/// @}\n} //namespace glm\n\n\n#include \"bit.inl\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/bit.inl",
    "content": "/// @ref gtx_bit\n\nnamespace glm\n{\n\t///////////////////\n\t// highestBitValue\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> highestBitValue(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(highestBitValue, v);\n\t}\n\n\t///////////////////\n\t// lowestBitValue\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value)\n\t{\n\t\treturn (Value & (~Value + 1));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> lowestBitValue(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(lowestBitValue, v);\n\t}\n\n\t///////////////////\n\t// powerOfTwoAbove\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoAbove(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoAbove, v);\n\t}\n\n\t///////////////////\n\t// powerOfTwoBelow\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : highestBitValue(value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoBelow(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoBelow, v);\n\t}\n\n\t/////////////////////\n\t// powerOfTwoNearest\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value)\n\t{\n\t\tif(isPowerOfTwo(value))\n\t\t\treturn value;\n\n\t\tgenType const prev = highestBitValue(value);\n\t\tgenType const next = prev << 1;\n\t\treturn (next - value) < (value - prev) ? next : prev;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoNearest(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoNearest, v);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/closest_point.hpp",
    "content": "/// @ref gtx_closest_point\n/// @file glm/gtx/closest_point.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_closest_point GLM_GTX_closest_point\n/// @ingroup gtx\n///\n/// Include <glm/gtx/closest_point.hpp> to use the features of this extension.\n///\n/// Find the point on a straight line which is the closet of a point.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_closest_point\n\t/// @{\n\n\t/// Find the point on a straight line which is the closet of a point.\n\t/// @see gtx_closest_point\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> closestPointOnLine(\n\t\tvec<3, T, Q> const& point,\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b);\n\n\t/// 2d lines work as well\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> closestPointOnLine(\n\t\tvec<2, T, Q> const& point,\n\t\tvec<2, T, Q> const& a,\n\t\tvec<2, T, Q> const& b);\n\n\t/// @}\n}// namespace glm\n\n#include \"closest_point.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/closest_point.inl",
    "content": "/// @ref gtx_closest_point\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine\n\t(\n\t\tvec<3, T, Q> const& point,\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b\n\t)\n\t{\n\t\tT LineLength = distance(a, b);\n\t\tvec<3, T, Q> Vector = point - a;\n\t\tvec<3, T, Q> LineDirection = (b - a) / LineLength;\n\n\t\t// Project Vector to LineDirection to get the distance of point from a\n\t\tT Distance = dot(Vector, LineDirection);\n\n\t\tif(Distance <= T(0)) return a;\n\t\tif(Distance >= LineLength) return b;\n\t\treturn a + LineDirection * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine\n\t(\n\t\tvec<2, T, Q> const& point,\n\t\tvec<2, T, Q> const& a,\n\t\tvec<2, T, Q> const& b\n\t)\n\t{\n\t\tT LineLength = distance(a, b);\n\t\tvec<2, T, Q> Vector = point - a;\n\t\tvec<2, T, Q> LineDirection = (b - a) / LineLength;\n\n\t\t// Project Vector to LineDirection to get the distance of point from a\n\t\tT Distance = dot(Vector, LineDirection);\n\n\t\tif(Distance <= T(0)) return a;\n\t\tif(Distance >= LineLength) return b;\n\t\treturn a + LineDirection * Distance;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_encoding.hpp",
    "content": "/// @ref gtx_color_encoding\n/// @file glm/gtx/color_encoding.hpp\n///\n/// @see core (dependence)\n/// @see gtx_color_encoding (dependence)\n///\n/// @defgroup gtx_color_encoding GLM_GTX_color_encoding\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_encoding.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../vec3.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTC_color_encoding extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_encoding\n\t/// @{\n\n\t/// Convert a linear sRGB color to D65 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB);\n\n\t/// Convert a linear sRGB color to D50 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB);\n\n\t/// Convert a D65 YUV color to linear sRGB.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ);\n\n\t/// Convert a D65 YUV color to D50 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ);\n\n\t/// @}\n} //namespace glm\n\n#include \"color_encoding.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_encoding.inl",
    "content": "/// @ref gtx_color_encoding\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB)\n\t{\n\t\tvec<3, T, Q> const M(0.490f, 0.17697f, 0.2f);\n\t\tvec<3, T, Q> const N(0.31f,  0.8124f, 0.01063f);\n\t\tvec<3, T, Q> const O(0.490f, 0.01f, 0.99f);\n\n\t\treturn (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast<T>(5.650675255693055f);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB)\n\t{\n\t\tvec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f);\n\t\tvec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f);\n\t\tvec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f);\n\n\t\treturn M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ)\n\t{\n\t\tvec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f);\n\t\tvec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f);\n\t\tvec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f);\n\n\t\treturn M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ)\n\t{\n\t\tvec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f);\n\t\tvec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f);\n\t\tvec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f);\n\n\t\treturn M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_space.hpp",
    "content": "/// @ref gtx_color_space\n/// @file glm/gtx/color_space.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_color_space GLM_GTX_color_space\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_space.hpp> to use the features of this extension.\n///\n/// Related to RGB to HSV conversions and operations.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_color_space extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_space\n\t/// @{\n\n\t/// Converts a color from HSV color space to its color in RGB color space.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgbColor(\n\t\tvec<3, T, Q> const& hsvValue);\n\n\t/// Converts a color from RGB color space to its color in HSV color space.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> hsvColor(\n\t\tvec<3, T, Q> const& rgbValue);\n\n\t/// Build a saturation matrix.\n\t/// @see gtx_color_space\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> saturation(\n\t\tT const s);\n\n\t/// Modify the saturation of a color.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> saturation(\n\t\tT const s,\n\t\tvec<3, T, Q> const& color);\n\n\t/// Modify the saturation of a color.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> saturation(\n\t\tT const s,\n\t\tvec<4, T, Q> const& color);\n\n\t/// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T luminosity(\n\t\tvec<3, T, Q> const& color);\n\n\t/// @}\n}//namespace glm\n\n#include \"color_space.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_space.inl",
    "content": "/// @ref gtx_color_space\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor)\n\t{\n\t\tvec<3, T, Q> hsv = hsvColor;\n\t\tvec<3, T, Q> rgbColor;\n\n\t\tif(hsv.y == static_cast<T>(0))\n\t\t\t// achromatic (grey)\n\t\t\trgbColor = vec<3, T, Q>(hsv.z);\n\t\telse\n\t\t{\n\t\t\tT sector = floor(hsv.x * (T(1) / T(60)));\n\t\t\tT frac = (hsv.x * (T(1) / T(60))) - sector;\n\t\t\t// factorial part of h\n\t\t\tT o = hsv.z * (T(1) - hsv.y);\n\t\t\tT p = hsv.z * (T(1) - hsv.y * frac);\n\t\t\tT q = hsv.z * (T(1) - hsv.y * (T(1) - frac));\n\n\t\t\tswitch(int(sector))\n\t\t\t{\n\t\t\tdefault:\n\t\t\tcase 0:\n\t\t\t\trgbColor.r = hsv.z;\n\t\t\t\trgbColor.g = q;\n\t\t\t\trgbColor.b = o;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\trgbColor.r = p;\n\t\t\t\trgbColor.g = hsv.z;\n\t\t\t\trgbColor.b = o;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\trgbColor.r = o;\n\t\t\t\trgbColor.g = hsv.z;\n\t\t\t\trgbColor.b = q;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\trgbColor.r = o;\n\t\t\t\trgbColor.g = p;\n\t\t\t\trgbColor.b = hsv.z;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\trgbColor.r = q;\n\t\t\t\trgbColor.g = o;\n\t\t\t\trgbColor.b = hsv.z;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\trgbColor.r = hsv.z;\n\t\t\t\trgbColor.g = o;\n\t\t\t\trgbColor.b = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn rgbColor;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor)\n\t{\n\t\tvec<3, T, Q> hsv = rgbColor;\n\t\tT Min   = min(min(rgbColor.r, rgbColor.g), rgbColor.b);\n\t\tT Max   = max(max(rgbColor.r, rgbColor.g), rgbColor.b);\n\t\tT Delta = Max - Min;\n\n\t\thsv.z = Max;\n\n\t\tif(Max != static_cast<T>(0))\n\t\t{\n\t\t\thsv.y = Delta / hsv.z;\n\t\t\tT h = static_cast<T>(0);\n\n\t\t\tif(rgbColor.r == Max)\n\t\t\t\t// between yellow & magenta\n\t\t\t\th = static_cast<T>(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta;\n\t\t\telse if(rgbColor.g == Max)\n\t\t\t\t// between cyan & yellow\n\t\t\t\th = static_cast<T>(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta;\n\t\t\telse\n\t\t\t\t// between magenta & cyan\n\t\t\t\th = static_cast<T>(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta;\n\n\t\t\tif(h < T(0))\n\t\t\t\thsv.x = h + T(360);\n\t\t\telse\n\t\t\t\thsv.x = h;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// If r = g = b = 0 then s = 0, h is undefined\n\t\t\thsv.y = static_cast<T>(0);\n\t\t\thsv.x = static_cast<T>(0);\n\t\t}\n\n\t\treturn hsv;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s)\n\t{\n\t\tvec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722));\n\n\t\tvec<3, T, defaultp> const col((T(1) - s) * rgbw);\n\n\t\tmat<4, 4, T, defaultp> result(T(1));\n\t\tresult[0][0] = col.x + s;\n\t\tresult[0][1] = col.x;\n\t\tresult[0][2] = col.x;\n\t\tresult[1][0] = col.y;\n\t\tresult[1][1] = col.y + s;\n\t\tresult[1][2] = col.y;\n\t\tresult[2][0] = col.z;\n\t\tresult[2][1] = col.z;\n\t\tresult[2][2] = col.z + s;\n\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color)\n\t{\n\t\treturn vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color)\n\t{\n\t\treturn saturation(s) * color;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color)\n\t{\n\t\tconst vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11);\n\t\treturn dot(color, tmp);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_space_YCoCg.hpp",
    "content": "/// @ref gtx_color_space_YCoCg\n/// @file glm/gtx/color_space_YCoCg.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension.\n///\n/// RGB to YCoCg conversions and operations\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_color_space_YCoCg extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_space_YCoCg\n\t/// @{\n\n\t/// Convert a color from RGB color space to YCoCg color space.\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg(\n\t\tvec<3, T, Q> const& rgbColor);\n\n\t/// Convert a color from YCoCg color space to RGB color space.\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb(\n\t\tvec<3, T, Q> const& YCoCgColor);\n\n\t/// Convert a color from RGB color space to YCoCgR color space.\n\t/// @see \"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\"\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR(\n\t\tvec<3, T, Q> const& rgbColor);\n\n\t/// Convert a color from YCoCgR color space to RGB color space.\n\t/// @see \"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\"\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb(\n\t\tvec<3, T, Q> const& YCoCgColor);\n\n\t/// @}\n}//namespace glm\n\n#include \"color_space_YCoCg.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/color_space_YCoCg.inl",
    "content": "/// @ref gtx_color_space_YCoCg\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg\n\t(\n\t\tvec<3, T, Q> const& rgbColor\n\t)\n\t{\n\t\tvec<3, T, Q> result;\n\t\tresult.x/*Y */ =   rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4);\n\t\tresult.y/*Co*/ =   rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2);\n\t\tresult.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb\n\t(\n\t\tvec<3, T, Q> const& YCoCgColor\n\t)\n\t{\n\t\tvec<3, T, Q> result;\n\t\tresult.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z;\n\t\tresult.g = YCoCgColor.x\t\t\t\t   + YCoCgColor.z;\n\t\tresult.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z;\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q, bool isInteger>\n\tclass compute_YCoCgR {\n\tpublic:\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t\t(\n\t\t\tvec<3, T, Q> const& rgbColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tresult.x/*Y */ = rgbColor.g * static_cast<T>(0.5) + (rgbColor.r + rgbColor.b) * static_cast<T>(0.25);\n\t\t\tresult.y/*Co*/ = rgbColor.r - rgbColor.b;\n\t\t\tresult.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast<T>(0.5);\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t\t(\n\t\t\tvec<3, T, Q> const& YCoCgRColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tT tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast<T>(0.5));\n\t\t\tresult.g = YCoCgRColor.z + tmp;\n\t\t\tresult.b = tmp - (YCoCgRColor.y * static_cast<T>(0.5));\n\t\t\tresult.r = result.b + YCoCgRColor.y;\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tclass compute_YCoCgR<T, Q, true> {\n\tpublic:\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t\t(\n\t\t\tvec<3, T, Q> const& rgbColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tresult.y/*Co*/ = rgbColor.r - rgbColor.b;\n\t\t\tT tmp = rgbColor.b + (result.y >> 1);\n\t\t\tresult.z/*Cg*/ = rgbColor.g - tmp;\n\t\t\tresult.x/*Y */ = tmp + (result.z >> 1);\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t\t(\n\t\t\tvec<3, T, Q> const& YCoCgRColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tT tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1);\n\t\t\tresult.g = YCoCgRColor.z + tmp;\n\t\t\tresult.b = tmp - (YCoCgRColor.y >> 1);\n\t\t\tresult.r = result.b + YCoCgRColor.y;\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t(\n\t\tvec<3, T, Q> const& rgbColor\n\t)\n\t{\n\t\treturn compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::rgb2YCoCgR(rgbColor);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t(\n\t\tvec<3, T, Q> const& YCoCgRColor\n\t)\n\t{\n\t\treturn compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::YCoCgR2rgb(YCoCgRColor);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/common.hpp",
    "content": "/// @ref gtx_common\n/// @file glm/gtx/common.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_common GLM_GTX_common\n/// @ingroup gtx\n///\n/// Include <glm/gtx/common.hpp> to use the features of this extension.\n///\n/// @brief Provide functions to increase the compatibility with Cg and HLSL languages\n\n#pragma once\n\n// Dependencies:\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_common 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_common extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_common\n\t/// @{\n\n\t/// Returns true if x is a denormalized number\n\t/// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.\n\t/// This format is less precise but can represent values closer to zero.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x);\n\n\t/// Similar to 'mod' but with a different rounding and integer support.\n\t/// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'\n\t///\n\t/// @see <a href=\"http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\">GLSL mod vs HLSL fmod</a>\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmod(vec<L, T, Q> const& v);\n\n\t/// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_relational\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_relational\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// @}\n}//namespace glm\n\n#include \"common.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/common.inl",
    "content": "/// @ref gtx_common\n\n#include <cmath>\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtc/constants.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat = true>\n\tstruct compute_fmod\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(std::fmod, a, b);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_fmod<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\treturn a % b;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool isdenormal(T const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::fpclassify(x) == FP_SUBNORMAL;\n#\t\telse\n\t\t\treturn epsilonNotEqual(x, static_cast<T>(0), epsilon<T>()) && std::fabs(x) < std::numeric_limits<T>::min();\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<1, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<1, T, Q>::bool_type(\n\t\t\tisdenormal(x.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<2, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<2, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<3, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y),\n\t\t\tisdenormal(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<4, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<4, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y),\n\t\t\tisdenormal(x.z),\n\t\t\tisdenormal(x.w));\n\t}\n\n\t// fmod\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fmod(genType x, genType y)\n\t{\n\t\treturn fmod(vec<1, genType>(x), y).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, vec<L, T, Q>(y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn greaterThan(Value, Min) && lessThan(Value, Max);\n\t}\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn greaterThanEqual(Value, Min) && lessThanEqual(Value, Max);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/compatibility.hpp",
    "content": "/// @ref gtx_compatibility\n/// @file glm/gtx/compatibility.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_compatibility GLM_GTX_compatibility\n/// @ingroup gtx\n///\n/// Include <glm/gtx/compatibility.hpp> to use the features of this extension.\n///\n/// Provide functions to increase the compatibility with Cg and HLSL languages\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_compatibility 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_compatibility extension included\")\n#\tendif\n#endif\n\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tinclude <cfloat>\n#elif GLM_COMPILER & GLM_COMPILER_GCC\n#\tinclude <cmath>\n#\tif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n#\t\tundef isfinite\n#\tendif\n#endif//GLM_COMPILER\n\nnamespace glm\n{\n\t/// @addtogroup gtx_compatibility\n\t/// @{\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\n\ttemplate<typename genType> GLM_FUNC_DECL bool isfinite(genType const& x);\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\n\ttypedef bool\t\t\t\t\t\tbool1;\t\t\t//!< \\brief boolean type with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, bool, highp>\t\t\tbool2;\t\t\t//!< \\brief boolean type with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, bool, highp>\t\t\tbool3;\t\t\t//!< \\brief boolean type with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, bool, highp>\t\t\tbool4;\t\t\t//!< \\brief boolean type with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef bool\t\t\t\t\t\tbool1x1;\t\t//!< \\brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, bool, highp>\t\tbool2x2;\t\t//!< \\brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, bool, highp>\t\tbool2x3;\t\t//!< \\brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, bool, highp>\t\tbool2x4;\t\t//!< \\brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, bool, highp>\t\tbool3x2;\t\t//!< \\brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, bool, highp>\t\tbool3x3;\t\t//!< \\brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, bool, highp>\t\tbool3x4;\t\t//!< \\brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, bool, highp>\t\tbool4x2;\t\t//!< \\brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, bool, highp>\t\tbool4x3;\t\t//!< \\brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, bool, highp>\t\tbool4x4;\t\t//!< \\brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef int\t\t\t\t\t\t\tint1;\t\t\t//!< \\brief integer vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, int, highp>\t\t\tint2;\t\t\t//!< \\brief integer vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, int, highp>\t\t\tint3;\t\t\t//!< \\brief integer vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, int, highp>\t\t\tint4;\t\t\t//!< \\brief integer vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef int\t\t\t\t\t\t\tint1x1;\t\t\t//!< \\brief integer matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, int, highp>\t\tint2x2;\t\t\t//!< \\brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, int, highp>\t\tint2x3;\t\t\t//!< \\brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, int, highp>\t\tint2x4;\t\t\t//!< \\brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, int, highp>\t\tint3x2;\t\t\t//!< \\brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, int, highp>\t\tint3x3;\t\t\t//!< \\brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, int, highp>\t\tint3x4;\t\t\t//!< \\brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, int, highp>\t\tint4x2;\t\t\t//!< \\brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, int, highp>\t\tint4x3;\t\t\t//!< \\brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, int, highp>\t\tint4x4;\t\t\t//!< \\brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef float\t\t\t\t\t\tfloat1;\t\t\t//!< \\brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, float, highp>\t\tfloat2;\t\t\t//!< \\brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, float, highp>\t\tfloat3;\t\t\t//!< \\brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, float, highp>\t\tfloat4;\t\t\t//!< \\brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef float\t\t\t\t\t\tfloat1x1;\t\t//!< \\brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, float, highp>\t\tfloat2x2;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, float, highp>\t\tfloat2x3;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, float, highp>\t\tfloat2x4;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, float, highp>\t\tfloat3x2;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, float, highp>\t\tfloat3x3;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, float, highp>\t\tfloat3x4;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, float, highp>\t\tfloat4x2;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, float, highp>\t\tfloat4x3;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, float, highp>\t\tfloat4x4;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef double\t\t\t\t\t\tdouble1;\t\t//!< \\brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, double, highp>\t\tdouble2;\t\t//!< \\brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, double, highp>\t\tdouble3;\t\t//!< \\brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, double, highp>\t\tdouble4;\t\t//!< \\brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef double\t\t\t\t\t\tdouble1x1;\t\t//!< \\brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, double, highp>\t\tdouble2x2;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, double, highp>\t\tdouble2x3;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, double, highp>\t\tdouble2x4;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, double, highp>\t\tdouble3x2;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, double, highp>\t\tdouble3x3;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, double, highp>\t\tdouble3x4;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, double, highp>\t\tdouble4x2;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, double, highp>\t\tdouble4x3;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, double, highp>\t\tdouble4x4;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\t/// @}\n}//namespace glm\n\n#include \"compatibility.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/compatibility.inl",
    "content": "#include <limits>\n\nnamespace glm\n{\n\t// isfinite\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool isfinite(\n\t\tgenType const& x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::isfinite(x) != 0;\n#\t\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\t\treturn _finite(x) != 0;\n#\t\telif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID\n\t\t\treturn _isfinite(x) != 0;\n#\t\telse\n\t\t\tif (std::numeric_limits<genType>::is_integer || std::denorm_absent == std::numeric_limits<genType>::has_denorm)\n\t\t\t\treturn std::numeric_limits<genType>::min() <= x && std::numeric_limits<genType>::max() >= x;\n\t\t\telse\n\t\t\t\treturn -std::numeric_limits<genType>::max() <= x && std::numeric_limits<genType>::max() >= x;\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite(\n\t\tvec<1, T, Q> const& x)\n\t{\n\t\treturn vec<1, bool, Q>(\n\t\t\tisfinite(x.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite(\n\t\tvec<2, T, Q> const& x)\n\t{\n\t\treturn vec<2, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite(\n\t\tvec<3, T, Q> const& x)\n\t{\n\t\treturn vec<3, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y),\n\t\t\tisfinite(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite(\n\t\tvec<4, T, Q> const& x)\n\t{\n\t\treturn vec<4, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y),\n\t\t\tisfinite(x.z),\n\t\t\tisfinite(x.w));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/component_wise.hpp",
    "content": "/// @ref gtx_component_wise\n/// @file glm/gtx/component_wise.hpp\n/// @date 2007-05-21 / 2011-06-07\n/// @author Christophe Riccio\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_component_wise GLM_GTX_component_wise\n/// @ingroup gtx\n///\n/// Include <glm/gtx/component_wise.hpp> to use the features of this extension.\n///\n/// Operations between components of a type\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_component_wise 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_component_wise extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_component_wise\n\t/// @{\n\n\t/// Convert an integer vector to a normalized float vector.\n\t/// If the parameter value type is already a floating qualifier type, the value is passed through.\n\t/// @see gtx_component_wise\n\ttemplate<typename floatType, length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v);\n\n\t/// Convert a normalized float vector to an integer vector.\n\t/// If the parameter value type is already a floating qualifier type, the value is passed through.\n\t/// @see gtx_component_wise\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> compScale(vec<L, floatType, Q> const& v);\n\n\t/// Add all vector components together.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compAdd(genType const& v);\n\n\t/// Multiply all vector components together.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMul(genType const& v);\n\n\t/// Find the minimum value between single vector components.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMin(genType const& v);\n\n\t/// Find the maximum value between single vector components.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMax(genType const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"component_wise.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/component_wise.inl",
    "content": "/// @ref gtx_component_wise\n\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType>\n\tstruct compute_compNormalize\n\t{};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tfloatType const Min = static_cast<floatType>(std::numeric_limits<T>::min());\n\t\t\tfloatType const Max = static_cast<floatType>(std::numeric_limits<T>::max());\n\t\t\treturn (vec<L, floatType, Q>(v) - Min) / (Max - Min) * static_cast<floatType>(2) - static_cast<floatType>(1);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, true, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<L, floatType, Q>(v) / static_cast<floatType>(std::numeric_limits<T>::max());\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, false, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType>\n\tstruct compute_compScale\n\t{};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\tfloatType const Max = static_cast<floatType>(std::numeric_limits<T>::max()) + static_cast<floatType>(0.5);\n\t\t\tvec<L, floatType, Q> const Scaled(v * Max);\n\t\t\tvec<L, T, Q> const Result(Scaled - static_cast<floatType>(0.5));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, true, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\treturn vec<L, T, Q>(vec<L, floatType, Q>(v) * static_cast<floatType>(std::numeric_limits<T>::max()));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, false, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename floatType, length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"'compNormalize' accepts only floating-point types for 'floatType' template parameter\");\n\n\t\treturn detail::compute_compNormalize<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<typename T, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> compScale(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"'compScale' accepts only floating-point types for 'floatType' template parameter\");\n\n\t\treturn detail::compute_compScale<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compAdd(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(0);\n\t\tfor(length_t i = 0, n = v.length(); i < n; ++i)\n\t\t\tResult += v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMul(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(1);\n\t\tfor(length_t i = 0, n = v.length(); i < n; ++i)\n\t\t\tResult *= v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMin(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(v[0]);\n\t\tfor(length_t i = 1, n = v.length(); i < n; ++i)\n\t\t\tResult = min(Result, v[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMax(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(v[0]);\n\t\tfor(length_t i = 1, n = v.length(); i < n; ++i)\n\t\t\tResult = max(Result, v[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/dual_quaternion.hpp",
    "content": "/// @ref gtx_dual_quaternion\n/// @file glm/gtx/dual_quaternion.hpp\n/// @author Maksim Vorobiev (msomeone@gmail.com)\n///\n/// @see core (dependence)\n/// @see gtc_constants (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion\n/// @ingroup gtx\n///\n/// Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension.\n///\n/// Defines a templated dual-quaternion type and several dual-quaternion operations.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_dual_quaternion 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_dual_quaternion extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_dual_quaternion\n\t/// @{\n\n\ttemplate<typename T, qualifier Q = defaultp>\n\tstruct tdualquat\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef qua<T, Q> part_type;\n\n\t\t// -- Data --\n\n\t\tqua<T, Q> real, dual;\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\t\t/// Return the count of components of a dual quaternion\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}\n\n\t\tGLM_FUNC_DECL part_type & operator[](length_type i);\n\t\tGLM_FUNC_DECL part_type const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const& d) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const& d);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& orientation, vec<3, T, Q> const& translation);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real, qua<T, Q> const& dual);\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, P> const& q);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<T, Q> const& m) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator/=(U s);\n\t};\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator-(tdualquat<T, Q> const& q);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator/(tdualquat<T, Q> const& q, T const& s);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);\n\n\t/// Creates an identity dual quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dual_quat_identity();\n\n\t/// Returns the normalized quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> normalize(tdualquat<T, Q> const& q);\n\n\t/// Returns the linear interpolation of two dual quaternion.\n\t///\n\t/// @see gtc_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a);\n\n\t/// Returns the q inverse.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> inverse(tdualquat<T, Q> const& q);\n\n\t/// Converts a quaternion to a 2 * 4 matrix.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x);\n\n\t/// Converts a quaternion to a 3 * 4 matrix.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x);\n\n\t/// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x);\n\n\t/// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x);\n\n\n\t/// Dual-quaternion of low single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, lowp>\t\tlowp_dualquat;\n\n\t/// Dual-quaternion of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, mediump>\tmediump_dualquat;\n\n\t/// Dual-quaternion of high single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, highp>\t\thighp_dualquat;\n\n\n\t/// Dual-quaternion of low single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, lowp>\t\tlowp_fdualquat;\n\n\t/// Dual-quaternion of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, mediump>\tmediump_fdualquat;\n\n\t/// Dual-quaternion of high single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, highp>\t\thighp_fdualquat;\n\n\n\t/// Dual-quaternion of low double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, lowp>\t\tlowp_ddualquat;\n\n\t/// Dual-quaternion of medium double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, mediump>\tmediump_ddualquat;\n\n\t/// Dual-quaternion of high double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, highp>\thighp_ddualquat;\n\n\n#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\t/// Dual-quaternion of floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_fdualquat\t\t\tdualquat;\n\n\t/// Dual-quaternion of single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_fdualquat\t\t\tfdualquat;\n#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef highp_fdualquat\t\t\tdualquat;\n\ttypedef highp_fdualquat\t\t\tfdualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef mediump_fdualquat\t\tdualquat;\n\ttypedef mediump_fdualquat\t\tfdualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef lowp_fdualquat\t\t\tdualquat;\n\ttypedef lowp_fdualquat\t\t\tfdualquat;\n#else\n#\terror \"GLM error: multiple default precision requested for single-precision floating-point types\"\n#endif\n\n\n#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\t/// Dual-quaternion of default double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_ddualquat\t\t\tddualquat;\n#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef highp_ddualquat\t\t\tddualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef mediump_ddualquat\t\tddualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef lowp_ddualquat\t\t\tddualquat;\n#else\n#\terror \"GLM error: Multiple default precision requested for double-precision floating-point types\"\n#endif\n\n\t/// @}\n} //namespace glm\n\n#include \"dual_quaternion.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/dual_quaternion.inl",
    "content": "/// @ref gtx_dual_quaternion\n\n#include \"../geometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type & tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\treturn (&real)[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type const& tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\treturn (&real)[i];\n\t}\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat()\n#\t\t\tif GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE\n\t\t\t: real(qua<T, Q>())\n\t\t\t, dual(qua<T, Q>(0, 0, 0, 0))\n#\t\t\tendif\n\t\t{}\n\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, Q> const& d)\n\t\t\t: real(d.real)\n\t\t\t, dual(d.dual)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, P> const& d)\n\t\t: real(d.real)\n\t\t, dual(d.dual)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r)\n\t\t: real(r), dual(qua<T, Q>(0, 0, 0, 0))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& q, vec<3, T, Q> const& p)\n\t\t: real(q), dual(\n\t\t\tT(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z),\n\t\t\tT(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y),\n\t\t\tT(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x),\n\t\t\tT(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r, qua<T, Q> const& d)\n\t\t: real(r), dual(d)\n\t{}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<U, P> const& q)\n\t\t: real(q.real)\n\t\t, dual(q.dual)\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<2, 4, T, Q> const& m)\n\t{\n\t\t*this = dualquat_cast(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<3, 4, T, Q> const& m)\n\t{\n\t\t*this = dualquat_cast(m);\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<T, Q> const& q)\n\t\t{\n\t\t\tthis->real = q.real;\n\t\t\tthis->dual = q.dual;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<U, Q> const& q)\n\t{\n\t\tthis->real = q.real;\n\t\tthis->dual = q.dual;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator*=(U s)\n\t{\n\t\tthis->real *= static_cast<T>(s);\n\t\tthis->dual *= static_cast<T>(s);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator/=(U s)\n\t{\n\t\tthis->real /= static_cast<T>(s);\n\t\tthis->dual /= static_cast<T>(s);\n\t\treturn *this;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q)\n\t{\n\t\treturn q;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator-(tdualquat<T, Q> const& q)\n\t{\n\t\treturn tdualquat<T, Q>(-q.real, -q.dual);\n\t}\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p)\n\t{\n\t\treturn tdualquat<T, Q>(q.real + p.real,q.dual + p.dual);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& p, tdualquat<T, Q> const& o)\n\t{\n\t\treturn tdualquat<T, Q>(p.real * o.real,p.real * o.dual + p.dual * o.real);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z);\n\t\tvec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z);\n\t\treturn (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v,\ttdualquat<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(q * vec<3, T, Q>(v), v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v,\ttdualquat<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s)\n\t{\n\t\treturn tdualquat<T, Q>(q.real * s, q.dual * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q)\n\t{\n\t\treturn q * s;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator/(tdualquat<T, Q> const& q,\tT const& s)\n\t{\n\t\treturn tdualquat<T, Q>(q.real / s, q.dual / s);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2)\n\t{\n\t\treturn (q1.real == q2.real) && (q1.dual == q2.dual);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2)\n\t{\n\t\treturn (q1.real != q2.real) || (q1.dual != q2.dual);\n\t}\n\n\t// -- Operations --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dual_quat_identity()\n\t{\n\t\treturn tdualquat<T, Q>(\n\t\t\tqua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)),\n\t\t\tqua<T, Q>(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> normalize(tdualquat<T, Q> const& q)\n\t{\n\t\treturn q / length(q.real);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a)\n\t{\n\t\t// Dual Quaternion Linear blend aka DLB:\n\t\t// Lerp is only defined in [0, 1]\n\t\tassert(a >= static_cast<T>(0));\n\t\tassert(a <= static_cast<T>(1));\n\t\tT const k = dot(x.real,y.real) < static_cast<T>(0) ? -a : a;\n\t\tT const one(1);\n\t\treturn tdualquat<T, Q>(x * (one - a) + y * k);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> inverse(tdualquat<T, Q> const& q)\n\t{\n\t\tconst glm::qua<T, Q> real = conjugate(q.real);\n\t\tconst glm::qua<T, Q> dual = conjugate(q.dual);\n\t\treturn tdualquat<T, Q>(real, dual + (real * (-2.0f * dot(real,dual))));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x)\n\t{\n\t\treturn mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w );\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x)\n\t{\n\t\tqua<T, Q> r = x.real / length2(x.real);\n\n\t\tqua<T, Q> const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z);\n\t\tr *= static_cast<T>(2);\n\n\t\tT const xy = r.x * x.real.y;\n\t\tT const xz = r.x * x.real.z;\n\t\tT const yz = r.y * x.real.z;\n\t\tT const wx = r.w * x.real.x;\n\t\tT const wy = r.w * x.real.y;\n\t\tT const wz = r.w * x.real.z;\n\n\t\tvec<4, T, Q> const a(\n\t\t\trr.w + rr.x - rr.y - rr.z,\n\t\t\txy - wz,\n\t\t\txz + wy,\n\t\t\t-(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y));\n\n\t\tvec<4, T, Q> const b(\n\t\t\txy + wz,\n\t\t\trr.w + rr.y - rr.x - rr.z,\n\t\t\tyz - wx,\n\t\t\t-(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x));\n\n\t\tvec<4, T, Q> const c(\n\t\t\txz - wy,\n\t\t\tyz + wx,\n\t\t\trr.w + rr.z - rr.x - rr.y,\n\t\t\t-(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w));\n\n\t\treturn mat<3, 4, T, Q>(a, b, c);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x)\n\t{\n\t\treturn tdualquat<T, Q>(\n\t\t\tqua<T, Q>( x[0].w, x[0].x, x[0].y, x[0].z ),\n\t\t\tqua<T, Q>( x[1].w, x[1].x, x[1].y, x[1].z ));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x)\n\t{\n\t\tqua<T, Q> real;\n\n\t\tT const trace = x[0].x + x[1].y + x[2].z;\n\t\tif(trace > static_cast<T>(0))\n\t\t{\n\t\t\tT const r = sqrt(T(1) + trace);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.w = static_cast<T>(0.5) * r;\n\t\t\treal.x = (x[2].y - x[1].z) * invr;\n\t\t\treal.y = (x[0].z - x[2].x) * invr;\n\t\t\treal.z = (x[1].x - x[0].y) * invr;\n\t\t}\n\t\telse if(x[0].x > x[1].y && x[0].x > x[2].z)\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = static_cast<T>(0.5)*r;\n\t\t\treal.y = (x[1].x + x[0].y) * invr;\n\t\t\treal.z = (x[0].z + x[2].x) * invr;\n\t\t\treal.w = (x[2].y - x[1].z) * invr;\n\t\t}\n\t\telse if(x[1].y > x[2].z)\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = (x[1].x + x[0].y) * invr;\n\t\t\treal.y = static_cast<T>(0.5) * r;\n\t\t\treal.z = (x[2].y + x[1].z) * invr;\n\t\t\treal.w = (x[0].z - x[2].x) * invr;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = (x[0].z + x[2].x) * invr;\n\t\t\treal.y = (x[2].y + x[1].z) * invr;\n\t\t\treal.z = static_cast<T>(0.5) * r;\n\t\t\treal.w = (x[1].x - x[0].y) * invr;\n\t\t}\n\n\t\tqua<T, Q> dual;\n\t\tdual.x =  static_cast<T>(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y);\n\t\tdual.y =  static_cast<T>(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x);\n\t\tdual.z =  static_cast<T>(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w);\n\t\tdual.w = -static_cast<T>(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z);\n\t\treturn tdualquat<T, Q>(real, dual);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/easing.hpp",
    "content": "/// @ref gtx_easing\n/// @file glm/gtx/easing.hpp\n/// @author Robert Chisholm\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_easing GLM_GTX_easing\n/// @ingroup gtx\n///\n/// Include <glm/gtx/easing.hpp> to use the features of this extension.\n///\n/// Easing functions for animations and transitions\n/// All functions take a parameter x in the range [0.0,1.0]\n///\n/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing)\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_easing 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_easing extension included\")\n#\tendif\n#endif\n\nnamespace glm{\n\t/// @addtogroup gtx_easing\n\t/// @{\n\n\t/// Modelled after the line y = x\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType linearInterpolation(genType const & a);\n\n\t/// Modelled after the parabola y = x^2\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseIn(genType const & a);\n\n\t/// Modelled after the parabola y = -x^2 + 2x\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quadratic\n\t/// y = (1/2)((2x)^2)\t\t\t\t; [0, 0.5)\n\t/// y = -(1/2)((2x-1)*(2x-3) - 1)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseInOut(genType const & a);\n\n\t/// Modelled after the cubic y = x^3\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseIn(genType const & a);\n\n\t/// Modelled after the cubic y = (x - 1)^3 + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise cubic\n\t/// y = (1/2)((2x)^3)\t\t; [0, 0.5)\n\t/// y = (1/2)((2x-2)^3 + 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseInOut(genType const & a);\n\n\t/// Modelled after the quartic x^4\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseIn(genType const & a);\n\n\t/// Modelled after the quartic y = 1 - (x - 1)^4\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quartic\n\t/// y = (1/2)((2x)^4)\t\t\t; [0, 0.5)\n\t/// y = -(1/2)((2x-2)^4 - 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseInOut(genType const & a);\n\n\t/// Modelled after the quintic y = x^5\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseIn(genType const & a);\n\n\t/// Modelled after the quintic y = (x - 1)^5 + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quintic\n\t/// y = (1/2)((2x)^5)\t\t; [0, 0.5)\n\t/// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseInOut(genType const & a);\n\n\t/// Modelled after quarter-cycle of sine wave\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseIn(genType const & a);\n\n\t/// Modelled after quarter-cycle of sine wave (different phase)\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseOut(genType const & a);\n\n\t/// Modelled after half sine wave\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseInOut(genType const & a);\n\n\t/// Modelled after shifted quadrant IV of unit circle\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseIn(genType const & a);\n\n\t/// Modelled after shifted quadrant II of unit circle\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise circular function\n\t/// y = (1/2)(1 - sqrt(1 - 4x^2))\t\t\t; [0, 0.5)\n\t/// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseInOut(genType const & a);\n\n\t/// Modelled after the exponential function y = 2^(10(x - 1))\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseIn(genType const & a);\n\n\t/// Modelled after the exponential function y = -2^(-10x) + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise exponential\n\t/// y = (1/2)2^(10(2x - 1))\t\t\t; [0,0.5)\n\t/// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseInOut(genType const & a);\n\n\t/// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseIn(genType const & a);\n\n\t/// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise exponentially-damped sine wave:\n\t/// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1))\t\t; [0,0.5)\n\t/// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseInOut(genType const & a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseIn(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseOut(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseInOut(genType const& a);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseIn(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseOut(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseInOut(genType const& a);\n\n\t/// @}\n}//namespace glm\n\n#include \"easing.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/easing.inl",
    "content": "/// @ref gtx_easing\n\n#include <cmath>\n\nnamespace glm{\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn -(a * (a - static_cast<genType>(2)));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(2) * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn (-static_cast<genType>(2) * a * a) + (4 * a) - one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = a - one<genType>();\n\t\treturn f * f * f + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif (a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(4) * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2));\n\t\t\treturn static_cast<genType>(0.5) * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = (a - one<genType>());\n\t\treturn f * f * f * (one<genType>() - a) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(8) * a * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = (a - one<genType>());\n\t\t\treturn -static_cast<genType>(8) * f * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = (a - one<genType>());\n\t\treturn f * f * f * f * f + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(16) * a * a * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2));\n\t\t\treturn static_cast<genType>(0.5) * f * f * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sin((a - one<genType>()) * half_pi<genType>()) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sin(a * half_pi<genType>());\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn static_cast<genType>(0.5) * (one<genType>() - cos(a * pi<genType>()));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn one<genType>() - sqrt(one<genType>() - (a * a));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sqrt((static_cast<genType>(2) - a) * a);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (one<genType>() - std::sqrt(one<genType>() - static_cast<genType>(4) * (a * a)));\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (std::sqrt(-((static_cast<genType>(2) * a) - static_cast<genType>(3)) * ((static_cast<genType>(2) * a) - one<genType>())) + one<genType>());\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a <= zero<genType>())\n\t\t\treturn a;\n\t\telse\n\t\t{\n\t\t\tgenType const Complementary = a - one<genType>();\n\t\t\tgenType const Two = static_cast<genType>(2);\n\t\t\t\n\t\t\treturn glm::pow(Two, Complementary * static_cast<genType>(10));\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a >= one<genType>())\n\t\t\treturn a;\n\t\telse\n\t\t{\n\t\t\treturn one<genType>() - glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a);\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t\treturn static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (static_cast<genType>(20) * a) - static_cast<genType>(10));\n\t\telse\n\t\t\treturn -static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (-static_cast<genType>(20) * a) + static_cast<genType>(10)) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn std::sin(static_cast<genType>(13) * half_pi<genType>() * a) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * (a - one<genType>()));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn std::sin(-static_cast<genType>(13) * half_pi<genType>() * (a + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t\treturn static_cast<genType>(0.5) * std::sin(static_cast<genType>(13) * half_pi<genType>() * (static_cast<genType>(2) * a)) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * ((static_cast<genType>(2) * a) - one<genType>()));\n\t\telse\n\t\t\treturn static_cast<genType>(0.5) * (std::sin(-static_cast<genType>(13) * half_pi<genType>() * ((static_cast<genType>(2) * a - one<genType>()) + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * (static_cast<genType>(2) * a - one<genType>())) + static_cast<genType>(2));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType z = ((o + one<genType>()) * a) - o;\n\t\treturn (a * a * z);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType n = a - one<genType>();\n\t\tgenType z = ((o + one<genType>()) * n) + o;\n\t\treturn (n * n * z) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType s = o * static_cast<genType>(1.525);\n\t\tgenType x = static_cast<genType>(0.5);\n\t\tgenType n = a / static_cast<genType>(0.5);\n\n\t\tif (n < static_cast<genType>(1))\n\t\t{\n\t\t\tgenType z = ((s + static_cast<genType>(1)) * n) - s;\n\t\t\tgenType m = n * n * z;\n\t\t\treturn x * m;\n\t\t}\n\t\telse \n\t\t{\n\t\t\tn -= static_cast<genType>(2);\n\t\t\tgenType z = ((s + static_cast<genType>(1)) * n) + s;\n\t\t\tgenType m = (n*n*z) + static_cast<genType>(2);\n\t\t\treturn x * m;\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseIn(genType const& a)\n\t{\n\t\treturn backEaseIn(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseOut(genType const& a)\n\t{\n\t\treturn backEaseOut(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a)\n\t{\n\t\treturn backEaseInOut(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(4.0 / 11.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(121) * a * a) / static_cast<genType>(16);\n\t\t}\n\t\telse if(a < static_cast<genType>(8.0 / 11.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(363.0 / 40.0) * a * a) - (static_cast<genType>(99.0 / 10.0) * a) + static_cast<genType>(17.0 / 5.0);\n\t\t}\n\t\telse if(a < static_cast<genType>(9.0 / 10.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(4356.0 / 361.0) * a * a) - (static_cast<genType>(35442.0 / 1805.0) * a) + static_cast<genType>(16061.0 / 1805.0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn (static_cast<genType>(54.0 / 5.0) * a * a) - (static_cast<genType>(513.0 / 25.0) * a) + static_cast<genType>(268.0 / 25.0);\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn one<genType>() - bounceEaseOut(one<genType>() - a);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (one<genType>() - bounceEaseOut(one<genType>() - a * static_cast<genType>(2)));\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * bounceEaseOut(a * static_cast<genType>(2) - one<genType>()) + static_cast<genType>(0.5);\n\t\t}\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/euler_angles.hpp",
    "content": "/// @ref gtx_euler_angles\n/// @file glm/gtx/euler_angles.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_euler_angles GLM_GTX_euler_angles\n/// @ingroup gtx\n///\n/// Include <glm/gtx/euler_angles.hpp> to use the features of this extension.\n///\n/// Build matrices from Euler angles.\n///\n/// Extraction of Euler angles from rotation matrix.\n/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_euler_angles 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_euler_angles extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_euler_angles\n\t/// @{\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX(\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY(\n\t\tT const& angleY);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ(\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX(\n\t\tT const & angleX, T const & angularVelocityX);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY(\n\t\tT const & angleY, T const & angularVelocityY);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ(\n\t\tT const & angleZ, T const & angularVelocityZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY(\n\t\tT const& angleX,\n\t\tT const& angleY);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX(\n\t\tT const& angleY,\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ(\n\t\tT const& angleX,\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX(\n\t\tT const& angle,\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ(\n\t\tT const& angleY,\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY(\n\t\tT const& angleZ,\n\t\tT const& angleY);\n\n    /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).\n    /// @see gtx_euler_angles\n    template<typename T>\n    GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ(\n        T const& t1,\n        T const& t2,\n        T const& t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll);\n\n\t/// Creates a 2D 2 * 2 rotation matrix from an euler angle.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle);\n\n\t/// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle);\n\n\t/// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles);\n\n    /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M\n    /// @see gtx_euler_angles\n    template<typename T>\n    GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,\n                                            T & t1,\n                                            T & t2,\n                                            T & t3);\n\n\t/// Extracts the (Y * X * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Z * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Y * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * X * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * X * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Z * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * Z * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * Y * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * X * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// @}\n}//namespace glm\n\n#include \"euler_angles.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/euler_angles.inl",
    "content": "/// @ref gtx_euler_angles\n\n#include \"compatibility.hpp\" // glm::atan2\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX\n\t(\n\t\tT const& angleX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tT(1), T(0), T(0), T(0),\n\t\t\tT(0), cosX, sinX, T(0),\n\t\t\tT(0),-sinX, cosX, T(0),\n\t\t\tT(0), T(0), T(0), T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY\n\t(\n\t\tT const& angleY\n\t)\n\t{\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,\tT(0),\t-sinY,\tT(0),\n\t\t\tT(0),\tT(1),\tT(0),\tT(0),\n\t\t\tsinY,\tT(0),\tcosY,\tT(0),\n\t\t\tT(0),\tT(0),\tT(0),\tT(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ\n\t(\n\t\tT const& angleZ\n\t)\n\t{\n\t\tT cosZ = glm::cos(angleZ);\n\t\tT sinZ = glm::sin(angleZ);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosZ,\tsinZ,\tT(0), T(0),\n\t\t\t-sinZ,\tcosZ,\tT(0), T(0),\n\t\t\tT(0),\tT(0),\tT(1), T(0),\n\t\t\tT(0),\tT(0),\tT(0), T(1));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX\n\t(\n\t\tT const & angleX,\n\t\tT const & angularVelocityX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX) * angularVelocityX;\n\t\tT sinX = glm::sin(angleX) * angularVelocityX;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tT(0), T(0), T(0), T(0),\n\t\t\tT(0),-sinX, cosX, T(0),\n\t\t\tT(0),-cosX,-sinX, T(0),\n\t\t\tT(0), T(0), T(0), T(0));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY\n\t(\n\t\tT const & angleY,\n\t\tT const & angularVelocityY\n\t)\n\t{\n\t\tT cosY = glm::cos(angleY) * angularVelocityY;\n\t\tT sinY = glm::sin(angleY) * angularVelocityY;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\t-sinY, T(0), -cosY, T(0),\n\t\t\t T(0), T(0),  T(0), T(0),\n\t\t\t cosY, T(0), -sinY, T(0),\n\t\t\t T(0), T(0),  T(0), T(0));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ\n\t(\n\t\tT const & angleZ,\n\t\tT const & angularVelocityZ\n\t)\n\t{\n\t\tT cosZ = glm::cos(angleZ) * angularVelocityZ;\n\t\tT sinZ = glm::sin(angleZ) * angularVelocityZ;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\t-sinZ,  cosZ, T(0), T(0),\n\t\t\t-cosZ, -sinZ, T(0), T(0),\n\t\t\t T(0),  T(0), T(0), T(0),\n\t\t\t T(0),  T(0), T(0), T(0));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY\n\t(\n\t\tT const& angleX,\n\t\tT const& angleY\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,   -sinX * -sinY,  cosX * -sinY,   T(0),\n\t\t\tT(0),   cosX,           sinX,           T(0),\n\t\t\tsinY,   -sinX * cosY,   cosX * cosY,    T(0),\n\t\t\tT(0),   T(0),           T(0),           T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX\n\t(\n\t\tT const& angleY,\n\t\tT const& angleX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,          0,      -sinY,    T(0),\n\t\t\tsinY * sinX,  cosX, cosY * sinX, T(0),\n\t\t\tsinY * cosX, -sinX, cosY * cosX, T(0),\n\t\t\tT(0),         T(0),     T(0),    T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ\n\t(\n\t\tT const& angleX,\n\t\tT const& angleZ\n\t)\n\t{\n\t\treturn eulerAngleX(angleX) * eulerAngleZ(angleZ);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX\n\t(\n\t\tT const& angleZ,\n\t\tT const& angleX\n\t)\n\t{\n\t\treturn eulerAngleZ(angleZ) * eulerAngleX(angleX);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ\n\t(\n\t\tT const& angleY,\n\t\tT const& angleZ\n\t)\n\t{\n\t\treturn eulerAngleY(angleY) * eulerAngleZ(angleZ);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY\n\t(\n\t\tT const& angleZ,\n\t\tT const& angleY\n\t)\n\t{\n\t\treturn eulerAngleZ(angleZ) * eulerAngleY(angleY);\n\t}\n\n    template<typename T>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ\n    (\n     T const& t1,\n     T const& t2,\n     T const& t3\n     )\n    {\n        T c1 = glm::cos(-t1);\n        T c2 = glm::cos(-t2);\n        T c3 = glm::cos(-t3);\n        T s1 = glm::sin(-t1);\n        T s2 = glm::sin(-t2);\n        T s3 = glm::sin(-t3);\n\n        mat<4, 4, T, defaultp> Result;\n        Result[0][0] = c2 * c3;\n        Result[0][1] =-c1 * s3 + s1 * s2 * c3;\n        Result[0][2] = s1 * s3 + c1 * s2 * c3;\n        Result[0][3] = static_cast<T>(0);\n        Result[1][0] = c2 * s3;\n        Result[1][1] = c1 * c3 + s1 * s2 * s3;\n        Result[1][2] =-s1 * c3 + c1 * s2 * s3;\n        Result[1][3] = static_cast<T>(0);\n        Result[2][0] =-s2;\n        Result[2][1] = s1 * c2;\n        Result[2][2] = c1 * c2;\n        Result[2][3] = static_cast<T>(0);\n        Result[3][0] = static_cast<T>(0);\n        Result[3][1] = static_cast<T>(0);\n        Result[3][2] = static_cast<T>(0);\n        Result[3][3] = static_cast<T>(1);\n        return Result;\n    }\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ\n\t(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll\n\t)\n\t{\n\t\tT tmp_ch = glm::cos(yaw);\n\t\tT tmp_sh = glm::sin(yaw);\n\t\tT tmp_cp = glm::cos(pitch);\n\t\tT tmp_sp = glm::sin(pitch);\n\t\tT tmp_cb = glm::cos(roll);\n\t\tT tmp_sb = glm::sin(roll);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;\n\t\tResult[0][1] = tmp_sb * tmp_cp;\n\t\tResult[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;\n\t\tResult[1][1] = tmp_cb * tmp_cp;\n\t\tResult[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = tmp_sh * tmp_cp;\n\t\tResult[2][1] = -tmp_sp;\n\t\tResult[2][2] = tmp_ch * tmp_cp;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2;\n\t\tResult[0][1] = c1 * s2;\n\t\tResult[0][2] = s1 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c3 * s2;\n\t\tResult[1][1] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[1][2] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s2 * s3;\n\t\tResult[2][1] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[2][2] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2;\n\t\tResult[0][1] = s1 * s2;\n\t\tResult[0][2] =-c1 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s2 * s3;\n\t\tResult[1][1] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[1][2] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s2;\n\t\tResult[2][1] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[2][2] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[0][1] = s2* s3;\n\t\tResult[0][2] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s1 * s2;\n\t\tResult[1][1] = c2;\n\t\tResult[1][2] = c1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[2][1] =-c3 * s2;\n\t\tResult[2][2] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[0][1] = c3 * s2;\n\t\tResult[0][2] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c1 * s2;\n\t\tResult[1][1] = c2;\n\t\tResult[1][2] = s1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[2][1] = s2 * s3;\n\t\tResult[2][2] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[0][1] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[0][2] =-c3 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[1][1] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[1][2] = s2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s2;\n\t\tResult[2][1] = s1 * s2;\n\t\tResult[2][2] = c2;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[0][1] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[0][2] = s2 *s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[1][1] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[1][2] = c3 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s1 * s2;\n\t\tResult[2][1] =-c1 * s2;\n\t\tResult[2][2] = c2;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2 * c3;\n\t\tResult[0][1] = s1 * s3 + c1 * c3 * s2;\n\t\tResult[0][2] = c3 * s1 * s2 - c1 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-s2;\n\t\tResult[1][1] = c1 * c2;\n\t\tResult[1][2] = c2 * s1;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c2 * s3;\n\t\tResult[2][1] = c1 * s2 * s3 - c3 * s1;\n\t\tResult[2][2] = c1 * c3 + s1 * s2 *s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2;\n\t\tResult[0][1] = s2;\n\t\tResult[0][2] =-c2 * s1;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s1 * s3 - c1 * c3 * s2;\n\t\tResult[1][1] = c2 * c3;\n\t\tResult[1][2] = c1 * s3 + c3 * s1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s1 + c1 * s2 * s3;\n\t\tResult[2][1] =-c2 * s3;\n\t\tResult[2][2] = c1 * c3 - s1 * s2 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2;\n\t\tResult[0][1] = c2 * s1;\n\t\tResult[0][2] =-s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = c1 * s2 * s3 - c3 * s1;\n\t\tResult[1][1] = c1 * c3 + s1 * s2 * s3;\n\t\tResult[1][2] = c2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s1 * s3 + c1 * c3 * s2;\n\t\tResult[2][1] = c3 * s1 * s2 - c1 * s3;\n\t\tResult[2][2] = c2 * c3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - s1 * s2 * s3;\n\t\tResult[0][1] = c3 * s1 + c1 * s2 * s3;\n\t\tResult[0][2] =-c2 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c2 * s1;\n\t\tResult[1][1] = c1 * c2;\n\t\tResult[1][2] = s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s3 + c3 * s1 * s2;\n\t\tResult[2][1] = s1 * s3 - c1 * c3 * s2;\n\t\tResult[2][2] = c2 * c3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll\n\t(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll\n\t)\n\t{\n\t\tT tmp_ch = glm::cos(yaw);\n\t\tT tmp_sh = glm::sin(yaw);\n\t\tT tmp_cp = glm::cos(pitch);\n\t\tT tmp_sp = glm::sin(pitch);\n\t\tT tmp_cb = glm::cos(roll);\n\t\tT tmp_sb = glm::sin(roll);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;\n\t\tResult[0][1] = tmp_sb * tmp_cp;\n\t\tResult[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;\n\t\tResult[1][1] = tmp_cb * tmp_cp;\n\t\tResult[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = tmp_sh * tmp_cp;\n\t\tResult[2][1] = -tmp_sp;\n\t\tResult[2][2] = tmp_ch * tmp_cp;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2\n\t(\n\t\tT const& angle\n\t)\n\t{\n\t\tT c = glm::cos(angle);\n\t\tT s = glm::sin(angle);\n\n\t\tmat<2, 2, T, defaultp> Result;\n\t\tResult[0][0] = c;\n\t\tResult[0][1] = s;\n\t\tResult[1][0] = -s;\n\t\tResult[1][1] = c;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3\n\t(\n\t\tT const& angle\n\t)\n\t{\n\t\tT c = glm::cos(angle);\n\t\tT s = glm::sin(angle);\n\n\t\tmat<3, 3, T, defaultp> Result;\n\t\tResult[0][0] = c;\n\t\tResult[0][1] = s;\n\t\tResult[0][2] = T(0.0);\n\t\tResult[1][0] = -s;\n\t\tResult[1][1] = c;\n\t\tResult[1][2] = T(0.0);\n\t\tResult[2][0] = T(0.0);\n\t\tResult[2][1] = T(0.0);\n\t\tResult[2][2] = T(1.0);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3\n\t(\n\t\tvec<3, T, Q> const& angles\n\t)\n\t{\n\t\treturn mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4\n\t(\n\t\tvec<3, T, Q> const& angles\n\t)\n\t{\n\t\treturn yawPitchRoll(angles.z, angles.x, angles.y);\n\t}\n\n    template<typename T>\n    GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,\n                                            T & t1,\n                                            T & t2,\n                                            T & t3)\n    {\n        T T1 = glm::atan2(M[2][1], M[2][2]);\n        T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]);\n        T T2 = glm::atan2(-M[2][0], C2);\n        T S1 = glm::sin(T1);\n        T C1 = glm::cos(T1);\n        T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2  ]);\n        t1 = -T1;\n        t2 = -T2;\n        t3 = -T3;\n    }\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][0], M[2][2]);\n\t\tT C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]);\n\t\tT T2 = glm::atan2(-M[2][1], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][2], M[0][1]);\n\t\tT S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(S2, M[0][0]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][1], -M[0][2]);\n\t\tT S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(S2, M[0][0]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][0], M[1][2]);\n\t\tT S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(S2, M[1][1]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][2], -M[1][0]);\n\t\tT S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(S2, M[1][1]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][1], M[2][0]);\n\t\tT S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]);\n\t\tT T2 = glm::atan2(S2, M[2][2]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][0], -M[2][1]);\n\t\tT S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]);\n\t\tT T2 = glm::atan2(S2, M[2][2]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][2], M[1][1]);\n\t\tT C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(-M[1][0], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(-M[0][2], M[0][0]);\n\t\tT C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(M[0][1], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][1], M[0][0]);\n\t\tT C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]);\n\t\tT T2 = glm::atan2(-M[0][2], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(-M[1][0], M[1][1]);\n\t\tT C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]);\n\t\tT T2 = glm::atan2(M[1][2], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/extend.hpp",
    "content": "/// @ref gtx_extend\n/// @file glm/gtx/extend.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_extend GLM_GTX_extend\n/// @ingroup gtx\n///\n/// Include <glm/gtx/extend.hpp> to use the features of this extension.\n///\n/// Extend a position from a source to a position at a defined length.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extend 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extend extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_extend\n\t/// @{\n\n\t/// Extends of Length the Origin position using the (Source - Origin) direction.\n\t/// @see gtx_extend\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType extend(\n\t\tgenType const& Origin,\n\t\tgenType const& Source,\n\t\ttypename genType::value_type const Length);\n\n\t/// @}\n}//namespace glm\n\n#include \"extend.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/extend.inl",
    "content": "/// @ref gtx_extend\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType extend\n\t(\n\t\tgenType const& Origin,\n\t\tgenType const& Source,\n\t\tgenType const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> extend\n\t(\n\t\tvec<2, T, Q> const& Origin,\n\t\tvec<2, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> extend\n\t(\n\t\tvec<3, T, Q> const& Origin,\n\t\tvec<3, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> extend\n\t(\n\t\tvec<4, T, Q> const& Origin,\n\t\tvec<4, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/extended_min_max.hpp",
    "content": "/// @ref gtx_extended_min_max\n/// @file glm/gtx/extended_min_max.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_extended_min_max GLM_GTX_extended_min_max\n/// @ingroup gtx\n///\n/// Include <glm/gtx/extended_min_max.hpp> to use the features of this extension.\n///\n/// Min and max functions for 3 to 4 parameters.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/vector_common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extended_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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extended_min_max extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_extended_min_max\n\t/// @{\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z);\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z);\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w);\n\n\t/// @}\n}//namespace glm\n\n#include \"extended_min_max.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/extended_min_max.inl",
    "content": "/// @ref gtx_extended_min_max\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min\n\t(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max\n\t(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/exterior_product.hpp",
    "content": "/// @ref gtx_exterior_product\n/// @file glm/gtx/exterior_product.hpp\n///\n/// @see core (dependence)\n/// @see gtx_exterior_product (dependence)\n///\n/// @defgroup gtx_exterior_product GLM_GTX_exterior_product\n/// @ingroup gtx\n///\n/// Include <glm/gtx/exterior_product.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_exterior_product 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_exterior_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_exterior_product\n\t/// @{\n\n\t/// Returns the cross product of x and y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"https://en.wikipedia.org/wiki/Exterior_algebra#Cross_and_triple_products\">Exterior product</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u);\n\n\t/// @}\n} //namespace glm\n\n#include \"exterior_product.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/exterior_product.inl",
    "content": "/// @ref gtx_exterior_product\n\n#include <limits>\n\nnamespace glm {\nnamespace detail\n{\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_cross_vec2\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cross' accepts only floating-point inputs\");\n\n\t\t\treturn v.x * u.y - u.x * v.y;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y)\n\t{\n\t\treturn detail::compute_cross_vec2<T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_exponential.hpp",
    "content": "/// @ref gtx_fast_exponential\n/// @file glm/gtx/fast_exponential.hpp\n///\n/// @see core (dependence)\n/// @see gtx_half_float (dependence)\n///\n/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_exponential.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of exponential based functions.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_exponential 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_exponential extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_exponential\n\t/// @{\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastPow(genType x, genType y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x);\n\n\t/// Faster than the common exp function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastExp(T x);\n\n\t/// Faster than the common exp function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastExp(vec<L, T, Q> const& x);\n\n\t/// Faster than the common log function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastLog(T x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastLog(vec<L, T, Q> const& x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastExp2(T x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastExp2(vec<L, T, Q> const& x);\n\n\t/// Faster than the common log2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastLog2(T x);\n\n\t/// Faster than the common log2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastLog2(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"fast_exponential.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_exponential.inl",
    "content": "/// @ref gtx_fast_exponential\n\nnamespace glm\n{\n\t// fastPow:\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastPow(genType x, genType y)\n\t{\n\t\treturn exp(y * log(x));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn exp(y * log(x));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastPow(T x, int y)\n\t{\n\t\tT f = static_cast<T>(1);\n\t\tfor(int i = 0; i < y; ++i)\n\t\t\tf *= x;\n\t\treturn f;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, int, Q> const& y)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = x.length(); i < n; ++i)\n\t\t\tResult[i] = fastPow(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\t// fastExp\n\t// Note: This function provides accurate results only for value between -1 and 1, else avoid it.\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastExp(T x)\n\t{\n\t\t// This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.\n\t\t// return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));\n\t\tT x2 = x * x;\n\t\tT x3 = x2 * x;\n\t\tT x4 = x3 * x;\n\t\tT x5 = x4 * x;\n\t\treturn T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333));\n\t}\n\t/*  // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance\n\tGLM_FUNC_QUALIFIER float fastExp(float x)\n\t{\n\t\tconst float e = 2.718281828f;\n\t\tconst float IntegerPart = floor(x);\n\t\tconst float FloatPart = x - IntegerPart;\n\t\tfloat z = 1.f;\n\n\t\tfor(int i = 0; i < int(IntegerPart); ++i)\n\t\t\tz *= e;\n\n\t\tconst float x2 = FloatPart * FloatPart;\n\t\tconst float x3 = x2 * FloatPart;\n\t\tconst float x4 = x3 * FloatPart;\n\t\tconst float x5 = x4 * FloatPart;\n\t\treturn z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f));\n\t}\n\n\t// Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers\n\tGLM_FUNC_QUALIFIER float fastExp(float x)\n\t{\n\t\t// This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.\n\t\t// return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));\n\t\tfloat x2 = x * x;\n\t\tfloat x3 = x2 * x;\n\t\tfloat x4 = x3 * x;\n\t\tfloat x5 = x4 * x;\n\t\tfloat x6 = x5 * x;\n\t\tfloat x7 = x6 * x;\n\t\tfloat x8 = x7 * x;\n\t\treturn 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);;\n\t}\n\t*/\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastExp(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastExp, x);\n\t}\n\n\t// fastLog\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLog(genType x)\n\t{\n\t\treturn std::log(x);\n\t}\n\n\t/* Slower than the VC7.1 function...\n\tGLM_FUNC_QUALIFIER float fastLog(float x)\n\t{\n\t\tfloat y1 = (x - 1.0f) / (x + 1.0f);\n\t\tfloat y2 = y1 * y1;\n\t\treturn 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f)));\n\t}\n\t*/\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastLog(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastLog, x);\n\t}\n\n\t//fastExp2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastExp2(genType x)\n\t{\n\t\treturn fastExp(static_cast<genType>(0.69314718055994530941723212145818) * x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastExp2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastExp2, x);\n\t}\n\n\t// fastLog2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLog2(genType x)\n\t{\n\t\treturn fastLog(x) / static_cast<genType>(0.69314718055994530941723212145818);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastLog2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastLog2, x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_square_root.hpp",
    "content": "/// @ref gtx_fast_square_root\n/// @file glm/gtx/fast_square_root.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_square_root.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of square root based functions.\n/// - Sqrt optimisation based on Newton's method,\n/// www.gamedev.net/community/forums/topic.asp?topic id=139956\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../exponential.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_square_root 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_square_root extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_square_root\n\t/// @{\n\n\t/// Faster than the common sqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastSqrt(genType x);\n\n\t/// Faster than the common sqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x);\n\n\t/// Faster than the common inversesqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastInverseSqrt(genType x);\n\n\t/// Faster than the common inversesqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x);\n\n\t/// Faster than the common length function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastLength(genType x);\n\n\t/// Faster than the common length function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastLength(vec<L, T, Q> const& x);\n\n\t/// Faster than the common distance function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastDistance(genType x, genType y);\n\n\t/// Faster than the common distance function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Faster than the common normalize function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastNormalize(genType x);\n\n\t/// Faster than the common normalize function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastNormalize(vec<L, T, Q> const& x);\n\n\t/// @}\n}// namespace glm\n\n#include \"fast_square_root.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_square_root.inl",
    "content": "/// @ref gtx_fast_square_root\n\nnamespace glm\n{\n\t// fastSqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastSqrt(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fastSqrt' only accept floating-point input\");\n\n\t\treturn genType(1) / fastInverseSqrt(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastSqrt, x);\n\t}\n\n\t// fastInversesqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x)\n\t{\n\t\treturn detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned<lowp>::value>::call(vec<1, genType, lowp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// fastLength\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLength(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fastLength' only accept floating-point inputs\");\n\n\t\treturn abs(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastLength(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fastLength' only accept floating-point inputs\");\n\n\t\treturn fastSqrt(dot(x, x));\n\t}\n\n\t// fastDistance\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y)\n\t{\n\t\treturn fastLength(y - x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn fastLength(y - x);\n\t}\n\n\t// fastNormalize\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastNormalize(genType x)\n\t{\n\t\treturn x > genType(0) ? genType(1) : -genType(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastNormalize(vec<L, T, Q> const& x)\n\t{\n\t\treturn x * fastInverseSqrt(dot(x, x));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_trigonometry.hpp",
    "content": "/// @ref gtx_fast_trigonometry\n/// @file glm/gtx/fast_trigonometry.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_trigonometry.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of trigonometric functions.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_trigonometry 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_trigonometry extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_trigonometry\n\t/// @{\n\n\t/// Wrap an angle to [0 2pi[\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T wrapAngle(T angle);\n\n\t/// Faster than the common sin function but less accurate.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastSin(T angle);\n\n\t/// Faster than the common cos function but less accurate.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastCos(T angle);\n\n\t/// Faster than the common tan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastTan(T angle);\n\n\t/// Faster than the common asin function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAsin(T angle);\n\n\t/// Faster than the common acos function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAcos(T angle);\n\n\t/// Faster than the common atan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAtan(T y, T x);\n\n\t/// Faster than the common atan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAtan(T angle);\n\n\t/// @}\n}//namespace glm\n\n#include \"fast_trigonometry.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/fast_trigonometry.inl",
    "content": "/// @ref gtx_fast_trigonometry\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> taylorCos(vec<L, T, Q> const& x)\n\t{\n\t\treturn static_cast<T>(1)\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ ((x * x) * (x * x)) * (1.f / 24.f)\n\t\t\t- (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f)\n\t\t\t+ (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T cos_52s(T x)\n\t{\n\t\tT const xx(x * x);\n\t\treturn (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095))));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cos_52s(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cos_52s, x);\n\t}\n}//namespace detail\n\n\t// wrapAngle\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T wrapAngle(T angle)\n\t{\n\t\treturn abs<T>(mod<T>(angle, two_pi<T>()));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> wrapAngle(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(wrapAngle, x);\n\t}\n\n\t// cos\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastCos(T x)\n\t{\n\t\tT const angle(wrapAngle<T>(x));\n\n\t\tif(angle < half_pi<T>())\n\t\t\treturn detail::cos_52s(angle);\n\t\tif(angle < pi<T>())\n\t\t\treturn -detail::cos_52s(pi<T>() - angle);\n\t\tif(angle < (T(3) * half_pi<T>()))\n\t\t\treturn -detail::cos_52s(angle - pi<T>());\n\n\t\treturn detail::cos_52s(two_pi<T>() - angle);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastCos(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastCos, x);\n\t}\n\n\t// sin\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastSin(T x)\n\t{\n\t\treturn fastCos<T>(half_pi<T>() - x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastSin(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastSin, x);\n\t}\n\n\t// tan\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastTan(T x)\n\t{\n\t\treturn x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastTan(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastTan, x);\n\t}\n\n\t// asin\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAsin(T x)\n\t{\n\t\treturn x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAsin(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAsin, x);\n\t}\n\n\t// acos\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAcos(T x)\n\t{\n\t\treturn T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2)\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAcos(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAcos, x);\n\t}\n\n\t// atan\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAtan(T y, T x)\n\t{\n\t\tT sgn = sign(y) * sign(x);\n\t\treturn abs(fastAtan(y / x)) * sgn;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAtan(vec<L, T, Q> const& y, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(fastAtan, y, x);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAtan(T x)\n\t{\n\t\treturn x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAtan(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAtan, x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/float_notmalize.inl",
    "content": "/// @ref gtx_float_normalize\n\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> floatNormalize(vec<L, T, Q> const& v)\n\t{\n\t\treturn vec<L, float, Q>(v) / static_cast<float>(std::numeric_limits<T>::max());\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/functions.hpp",
    "content": "/// @ref gtx_functions\n/// @file glm/gtx/functions.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_functions GLM_GTX_functions\n/// @ingroup gtx\n///\n/// Include <glm/gtx/functions.hpp> to use the features of this extension.\n///\n/// List of useful common functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/type_vec2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_functions 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_functions extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_functions\n\t/// @{\n\n\t/// 1D gauss function\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T gauss(\n\t\tT x,\n\t\tT ExpectedValue,\n\t\tT StandardDeviation);\n\n\t/// 2D gauss function\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T gauss(\n\t\tvec<2, T, Q> const& Coord,\n\t\tvec<2, T, Q> const& ExpectedValue,\n\t\tvec<2, T, Q> const& StandardDeviation);\n\n\t/// @}\n}//namespace glm\n\n#include \"functions.inl\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/functions.inl",
    "content": "/// @ref gtx_functions\n\n#include \"../exponential.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T gauss\n\t(\n\t\tT x,\n\t\tT ExpectedValue,\n\t\tT StandardDeviation\n\t)\n\t{\n\t\treturn exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast<T>(6.28318530717958647692528676655900576)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T gauss\n\t(\n\t\tvec<2, T, Q> const& Coord,\n\t\tvec<2, T, Q> const& ExpectedValue,\n\t\tvec<2, T, Q> const& StandardDeviation\n\t)\n\t{\n\t\tvec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation);\n\t\treturn exp(-(Squared.x + Squared.y));\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/gradient_paint.hpp",
    "content": "/// @ref gtx_gradient_paint\n/// @file glm/gtx/gradient_paint.hpp\n///\n/// @see core (dependence)\n/// @see gtx_optimum_pow (dependence)\n///\n/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint\n/// @ingroup gtx\n///\n/// Include <glm/gtx/gradient_paint.hpp> to use the features of this extension.\n///\n/// Functions that return the color of procedural gradient for specific coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/optimum_pow.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_gradient_paint 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_gradient_paint extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_gradient_paint\n\t/// @{\n\n\t/// Return a color from a radial gradient.\n\t/// @see - gtx_gradient_paint\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T radialGradient(\n\t\tvec<2, T, Q> const& Center,\n\t\tT const& Radius,\n\t\tvec<2, T, Q> const& Focal,\n\t\tvec<2, T, Q> const& Position);\n\n\t/// Return a color from a linear gradient.\n\t/// @see - gtx_gradient_paint\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T linearGradient(\n\t\tvec<2, T, Q> const& Point0,\n\t\tvec<2, T, Q> const& Point1,\n\t\tvec<2, T, Q> const& Position);\n\n\t/// @}\n}// namespace glm\n\n#include \"gradient_paint.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/gradient_paint.inl",
    "content": "/// @ref gtx_gradient_paint\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T radialGradient\n\t(\n\t\tvec<2, T, Q> const& Center,\n\t\tT const& Radius,\n\t\tvec<2, T, Q> const& Focal,\n\t\tvec<2, T, Q> const& Position\n\t)\n\t{\n\t\tvec<2, T, Q> F = Focal - Center;\n\t\tvec<2, T, Q> D = Position - Focal;\n\t\tT Radius2 = pow2(Radius);\n\t\tT Fx2 = pow2(F.x);\n\t\tT Fy2 = pow2(F.y);\n\n\t\tT Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));\n\t\tT Denominator = Radius2 - (Fx2 + Fy2);\n\t\treturn Numerator / Denominator;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T linearGradient\n\t(\n\t\tvec<2, T, Q> const& Point0,\n\t\tvec<2, T, Q> const& Point1,\n\t\tvec<2, T, Q> const& Position\n\t)\n\t{\n\t\tvec<2, T, Q> Dist = Point1 - Point0;\n\t\treturn (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/handed_coordinate_space.hpp",
    "content": "/// @ref gtx_handed_coordinate_space\n/// @file glm/gtx/handed_coordinate_space.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space\n/// @ingroup gtx\n///\n/// Include <glm/gtx/handed_coordinate_space.hpp> to use the features of this extension.\n///\n/// To know if a set of three basis vectors defines a right or left-handed coordinate system.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_handed_coordinate_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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_handed_coordinate_space extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_handed_coordinate_space\n\t/// @{\n\n\t//! Return if a trihedron right handed or not.\n\t//! From GLM_GTX_handed_coordinate_space extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool rightHanded(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Return if a trihedron left handed or not.\n\t//! From GLM_GTX_handed_coordinate_space extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool leftHanded(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal);\n\n\t/// @}\n}// namespace glm\n\n#include \"handed_coordinate_space.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/handed_coordinate_space.inl",
    "content": "/// @ref gtx_handed_coordinate_space\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool rightHanded\n\t(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn dot(cross(normal, tangent), binormal) > T(0);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool leftHanded\n\t(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn dot(cross(normal, tangent), binormal) < T(0);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/hash.hpp",
    "content": "/// @ref gtx_hash\n/// @file glm/gtx/hash.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_hash GLM_GTX_hash\n/// @ingroup gtx\n///\n/// Include <glm/gtx/hash.hpp> to use the features of this extension.\n///\n/// Add std::hash support for glm types\n\n#pragma once\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_hash 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_hash extension included\")\n#\tendif\n#endif\n\n#include <functional>\n\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if !GLM_HAS_CXX11_STL\n#\terror \"GLM_GTX_hash requires C++11 standard library support\"\n#endif\n\nnamespace std\n{\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<1, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::qua<T,Q>>\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::qua<T, Q> const& q) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::tdualquat<T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::tdualquat<T,Q> const& q) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n} // namespace std\n\n#include \"hash.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/hash.inl",
    "content": "/// @ref gtx_hash\n\nnamespace glm {\nnamespace detail\n{\n\tGLM_INLINE void hash_combine(size_t &seed, size_t hash)\n\t{\n\t\thash += 0x9e3779b9 + (seed << 6) + (seed >> 2);\n\t\tseed ^= hash;\n\t}\n}}\n\nnamespace std\n{\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<1, T, Q>>::operator()(glm::vec<1, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\thash<T> hasher;\n\t\treturn hasher(v.x);\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<2, T, Q>>::operator()(glm::vec<2, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<3, T, Q>>::operator()(glm::vec<3, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\tglm::detail::hash_combine(seed, hasher(v.z));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<4, T, Q>>::operator()(glm::vec<4, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\tglm::detail::hash_combine(seed, hasher(v.z));\n\t\tglm::detail::hash_combine(seed, hasher(v.w));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::qua<T, Q>>::operator()(glm::qua<T,Q> const& q) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(q.x));\n\t\tglm::detail::hash_combine(seed, hasher(q.y));\n\t\tglm::detail::hash_combine(seed, hasher(q.z));\n\t\tglm::detail::hash_combine(seed, hasher(q.w));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::tdualquat<T, Q>>::operator()(glm::tdualquat<T, Q> const& q) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::qua<T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(q.real));\n\t\tglm::detail::hash_combine(seed, hasher(q.dual));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 2, T, Q>>::operator()(glm::mat<2, 2, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 3, T, Q>>::operator()(glm::mat<2, 3, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 4, T, Q>>::operator()(glm::mat<2, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 2, T, Q>>::operator()(glm::mat<3, 2, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 3, T, Q>>::operator()(glm::mat<3, 3, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 4, T, Q>>::operator()(glm::mat<3, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 2, T,Q>>::operator()(glm::mat<4, 2, T,Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 3, T,Q>>::operator()(glm::mat<4, 3, T,Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 4, T,Q>>::operator()(glm::mat<4, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/integer.hpp",
    "content": "/// @ref gtx_integer\n/// @file glm/gtx/integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_integer GLM_GTX_integer\n/// @ingroup gtx\n///\n/// Include <glm/gtx/integer.hpp> to use the features of this extension.\n///\n/// Add support for integer for core functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/integer.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_integer 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_integer extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_integer\n\t/// @{\n\n\t//! Returns x raised to the y power.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int pow(int x, uint y);\n\n\t//! Returns the positive square root of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int sqrt(int x);\n\n\t//! Returns the floor log2 of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL unsigned int floor_log2(unsigned int x);\n\n\t//! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int mod(int x, int y);\n\n\t//! Return the factorial value of a number (!12 max, integer only)\n\t//! From GLM_GTX_integer extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType factorial(genType const& x);\n\n\t//! 32bit signed integer.\n\t//! From GLM_GTX_integer extension.\n\ttypedef signed int\t\t\t\t\tsint;\n\n\t//! Returns x raised to the y power.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint pow(uint x, uint y);\n\n\t//! Returns the positive square root of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint sqrt(uint x);\n\n\t//! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint mod(uint x, uint y);\n\n\t//! Returns the number of leading zeros.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint nlz(uint x);\n\n\t/// @}\n}//namespace glm\n\n#include \"integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/integer.inl",
    "content": "/// @ref gtx_integer\n\nnamespace glm\n{\n\t// pow\n\tGLM_FUNC_QUALIFIER int pow(int x, uint y)\n\t{\n\t\tif(y == 0)\n\t\t\treturn x >= 0 ? 1 : -1;\n\n\t\tint result = x;\n\t\tfor(uint i = 1; i < y; ++i)\n\t\t\tresult *= x;\n\t\treturn result;\n\t}\n\n\t// sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387\n\tGLM_FUNC_QUALIFIER int sqrt(int x)\n\t{\n\t\tif(x <= 1) return x;\n\n\t\tint NextTrial = x >> 1;\n\t\tint CurrentAnswer;\n\n\t\tdo\n\t\t{\n\t\t\tCurrentAnswer = NextTrial;\n\t\t\tNextTrial = (NextTrial + x / NextTrial) >> 1;\n\t\t} while(NextTrial < CurrentAnswer);\n\n\t\treturn CurrentAnswer;\n\t}\n\n// Henry Gordon Dietz: http://aggregate.org/MAGIC/\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x)\n\t{\n\t\t/* 32-bit recursive reduction using SWAR...\n\t\tbut first step is mapping 2-bit values\n\t\tinto sum of 2 1-bit values in sneaky way\n\t\t*/\n\t\tx -= ((x >> 1) & 0x55555555);\n\t\tx = (((x >> 2) & 0x33333333) + (x & 0x33333333));\n\t\tx = (((x >> 4) + x) & 0x0f0f0f0f);\n\t\tx += (x >> 8);\n\t\tx += (x >> 16);\n\t\treturn(x & 0x0000003f);\n\t}\n}//namespace detail\n\n\t// Henry Gordon Dietz: http://aggregate.org/MAGIC/\n/*\n\tGLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x)\n\t{\n\t\tx |= (x >> 1);\n\t\tx |= (x >> 2);\n\t\tx |= (x >> 4);\n\t\tx |= (x >> 8);\n\t\tx |= (x >> 16);\n\n\t\treturn _detail::ones32(x) >> 1;\n\t}\n*/\n\t// mod\n\tGLM_FUNC_QUALIFIER int mod(int x, int y)\n\t{\n\t\treturn ((x % y) + y) % y;\n\t}\n\n\t// factorial (!12 max, integer only)\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType factorial(genType const& x)\n\t{\n\t\tgenType Temp = x;\n\t\tgenType Result;\n\t\tfor(Result = 1; Temp > 1; --Temp)\n\t\t\tResult *= Temp;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> factorial(\n\t\tvec<2, T, Q> const& x)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> factorial(\n\t\tvec<3, T, Q> const& x)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y),\n\t\t\tfactorial(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> factorial(\n\t\tvec<4, T, Q> const& x)\n\t{\n\t\treturn vec<4, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y),\n\t\t\tfactorial(x.z),\n\t\t\tfactorial(x.w));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint pow(uint x, uint y)\n\t{\n\t\tif (y == 0)\n\t\t\treturn 1u;\n\n\t\tuint result = x;\n\t\tfor(uint i = 1; i < y; ++i)\n\t\t\tresult *= x;\n\t\treturn result;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint sqrt(uint x)\n\t{\n\t\tif(x <= 1) return x;\n\n\t\tuint NextTrial = x >> 1;\n\t\tuint CurrentAnswer;\n\n\t\tdo\n\t\t{\n\t\t\tCurrentAnswer = NextTrial;\n\t\t\tNextTrial = (NextTrial + x / NextTrial) >> 1;\n\t\t} while(NextTrial < CurrentAnswer);\n\n\t\treturn CurrentAnswer;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint mod(uint x, uint y)\n\t{\n\t\treturn x - y * (x / y);\n\t}\n\n#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC))\n\n\tGLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)\n\t{\n\t\treturn 31u - findMSB(x);\n\t}\n\n#else\n\n\t// Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt\n\tGLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)\n\t{\n\t\tint y, m, n;\n\n\t\ty = -int(x >> 16);      // If left half of x is 0,\n\t\tm = (y >> 16) & 16;  // set n = 16.  If left half\n\t\tn = 16 - m;          // is nonzero, set n = 0 and\n\t\tx = x >> m;          // shift x right 16.\n\t\t\t\t\t\t\t// Now x is of the form 0000xxxx.\n\t\ty = x - 0x100;       // If positions 8-15 are 0,\n\t\tm = (y >> 16) & 8;   // add 8 to n and shift x left 8.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x - 0x1000;      // If positions 12-15 are 0,\n\t\tm = (y >> 16) & 4;   // add 4 to n and shift x left 4.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x - 0x4000;      // If positions 14-15 are 0,\n\t\tm = (y >> 16) & 2;   // add 2 to n and shift x left 2.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x >> 14;         // Set y = 0, 1, 2, or 3.\n\t\tm = y & ~(y >> 1);   // Set m = 0, 1, 2, or 2 resp.\n\t\treturn unsigned(n + 2 - m);\n\t}\n\n#endif//(GLM_COMPILER)\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/intersect.hpp",
    "content": "/// @ref gtx_intersect\n/// @file glm/gtx/intersect.hpp\n///\n/// @see core (dependence)\n/// @see gtx_closest_point (dependence)\n///\n/// @defgroup gtx_intersect GLM_GTX_intersect\n/// @ingroup gtx\n///\n/// Include <glm/gtx/intersect.hpp> to use the features of this extension.\n///\n/// Add intersection functions\n\n#pragma once\n\n// Dependency:\n#include <cfloat>\n#include <limits>\n#include \"../glm.hpp\"\n#include \"../geometric.hpp\"\n#include \"../gtx/closest_point.hpp\"\n#include \"../gtx/vector_query.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_intersect\n\t/// @{\n\n\t//! Compute the intersection of a ray and a plane.\n\t//! Ray direction and plane normal must be unit length.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRayPlane(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& planeOrig, genType const& planeNormal,\n\t\ttypename genType::value_type & intersectionDistance);\n\n\t//! Compute the intersection of a ray and a triangle.\n\t/// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool intersectRayTriangle(\n\t\tvec<3, T, Q> const& orig, vec<3, T, Q> const& dir,\n\t\tvec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,\n\t\tvec<2, T, Q>& baryPosition, T& distance);\n\n\t//! Compute the intersection of a line and a triangle.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectLineTriangle(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& vert0, genType const& vert1, genType const& vert2,\n\t\tgenType & position);\n\n\t//! Compute the intersection distance of a ray and a sphere.\n\t//! The ray direction vector is unit length.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRaySphere(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, typename genType::value_type const sphereRadiusSquared,\n\t\ttypename genType::value_type & intersectionDistance);\n\n\t//! Compute the intersection of a ray and a sphere.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRaySphere(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition, genType & intersectionNormal);\n\n\t//! Compute the intersection of a line and a sphere.\n\t//! From GLM_GTX_intersect extension\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectLineSphere(\n\t\tgenType const& point0, genType const& point1,\n\t\tgenType const& sphereCenter, typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition1, genType & intersectionNormal1,\n\t\tgenType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());\n\n\t/// @}\n}//namespace glm\n\n#include \"intersect.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/intersect.inl",
    "content": "/// @ref gtx_intersect\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRayPlane\n\t(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& planeOrig, genType const& planeNormal,\n\t\ttypename genType::value_type & intersectionDistance\n\t)\n\t{\n\t\ttypename genType::value_type d = glm::dot(dir, planeNormal);\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\n\t\tif(glm::abs(d) > Epsilon)  // if dir and planeNormal are not perpendicular\n\t\t{\n\t\t\ttypename genType::value_type const tmp_intersectionDistance = \tglm::dot(planeOrig - orig, planeNormal) / d;\n\t\t\tif (tmp_intersectionDistance > static_cast<typename genType::value_type>(0)) { // allow only intersections\n\t\t\t\tintersectionDistance = tmp_intersectionDistance;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool intersectRayTriangle\n\t(\n\t\tvec<3, T, Q> const& orig, vec<3, T, Q> const& dir,\n\t\tvec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2,\n\t\tvec<2, T, Q>& baryPosition, T& distance\n\t)\n\t{\n\t\t// find vectors for two edges sharing vert0\n\t\tvec<3, T, Q> const edge1 = vert1 - vert0;\n\t\tvec<3, T, Q> const edge2 = vert2 - vert0;\n\n\t\t// begin calculating determinant - also used to calculate U parameter\n\t\tvec<3, T, Q> const p = glm::cross(dir, edge2);\n\n\t\t// if determinant is near zero, ray lies in plane of triangle\n\t\tT const det = glm::dot(edge1, p);\n\n\t\tvec<3, T, Q> Perpendicular(0);\n\n\t\tif(det > std::numeric_limits<T>::epsilon())\n\t\t{\n\t\t\t// calculate distance from vert0 to ray origin\n\t\t\tvec<3, T, Q> const dist = orig - vert0;\n\n\t\t\t// calculate U parameter and test bounds\n\t\t\tbaryPosition.x = glm::dot(dist, p);\n\t\t\tif(baryPosition.x < static_cast<T>(0) || baryPosition.x > det)\n\t\t\t\treturn false;\n\n\t\t\t// prepare to test V parameter\n\t\t\tPerpendicular = glm::cross(dist, edge1);\n\n\t\t\t// calculate V parameter and test bounds\n\t\t\tbaryPosition.y = glm::dot(dir, Perpendicular);\n\t\t\tif((baryPosition.y < static_cast<T>(0)) || ((baryPosition.x + baryPosition.y) > det))\n\t\t\t\treturn false;\n\t\t}\n\t\telse if(det < -std::numeric_limits<T>::epsilon())\n\t\t{\n\t\t\t// calculate distance from vert0 to ray origin\n\t\t\tvec<3, T, Q> const dist = orig - vert0;\n\n\t\t\t// calculate U parameter and test bounds\n\t\t\tbaryPosition.x = glm::dot(dist, p);\n\t\t\tif((baryPosition.x > static_cast<T>(0)) || (baryPosition.x < det))\n\t\t\t\treturn false;\n\n\t\t\t// prepare to test V parameter\n\t\t\tPerpendicular = glm::cross(dist, edge1);\n\n\t\t\t// calculate V parameter and test bounds\n\t\t\tbaryPosition.y = glm::dot(dir, Perpendicular);\n\t\t\tif((baryPosition.y > static_cast<T>(0)) || (baryPosition.x + baryPosition.y < det))\n\t\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t\treturn false; // ray is parallel to the plane of the triangle\n\n\t\tT inv_det = static_cast<T>(1) / det;\n\n\t\t// calculate distance, ray intersects triangle\n\t\tdistance = glm::dot(edge2, Perpendicular) * inv_det;\n\t\tbaryPosition *= inv_det;\n\n\t\treturn true;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectLineTriangle\n\t(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& vert0, genType const& vert1, genType const& vert2,\n\t\tgenType & position\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\n\t\tgenType edge1 = vert1 - vert0;\n\t\tgenType edge2 = vert2 - vert0;\n\n\t\tgenType Perpendicular = cross(dir, edge2);\n\n\t\ttypename genType::value_type det = dot(edge1, Perpendicular);\n\n\t\tif (det > -Epsilon && det < Epsilon)\n\t\t\treturn false;\n\t\ttypename genType::value_type inv_det = typename genType::value_type(1) / det;\n\n\t\tgenType Tangent = orig - vert0;\n\n\t\tposition.y = dot(Tangent, Perpendicular) * inv_det;\n\t\tif (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1))\n\t\t\treturn false;\n\n\t\tgenType Cotangent = cross(Tangent, edge1);\n\n\t\tposition.z = dot(dir, Cotangent) * inv_det;\n\t\tif (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1))\n\t\t\treturn false;\n\n\t\tposition.x = dot(edge2, Cotangent) * inv_det;\n\n\t\treturn true;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRaySphere\n\t(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadiusSquared,\n\t\ttypename genType::value_type & intersectionDistance\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\t\tgenType diff = sphereCenter - rayStarting;\n\t\ttypename genType::value_type t0 = dot(diff, rayNormalizedDirection);\n\t\ttypename genType::value_type dSquared = dot(diff, diff) - t0 * t0;\n\t\tif( dSquared > sphereRadiusSquared )\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\ttypename genType::value_type t1 = sqrt( sphereRadiusSquared - dSquared );\n\t\tintersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1;\n\t\treturn intersectionDistance > Epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRaySphere\n\t(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition, genType & intersectionNormal\n\t)\n\t{\n\t\ttypename genType::value_type distance;\n\t\tif( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) )\n\t\t{\n\t\t\tintersectionPosition = rayStarting + rayNormalizedDirection * distance;\n\t\t\tintersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectLineSphere\n\t(\n\t\tgenType const& point0, genType const& point1,\n\t\tgenType const& sphereCenter, typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPoint1, genType & intersectionNormal1,\n\t\tgenType & intersectionPoint2, genType & intersectionNormal2\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\t\tgenType dir = normalize(point1 - point0);\n\t\tgenType diff = sphereCenter - point0;\n\t\ttypename genType::value_type t0 = dot(diff, dir);\n\t\ttypename genType::value_type dSquared = dot(diff, diff) - t0 * t0;\n\t\tif( dSquared > sphereRadius * sphereRadius )\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\ttypename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared );\n\t\tif( t0 < t1 + Epsilon )\n\t\t\tt1 = -t1;\n\t\tintersectionPoint1 = point0 + dir * (t0 - t1);\n\t\tintersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius;\n\t\tintersectionPoint2 = point0 + dir * (t0 + t1);\n\t\tintersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius;\n\t\treturn true;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/io.hpp",
    "content": "/// @ref gtx_io\n/// @file glm/gtx/io.hpp\n/// @author Jan P Springer (regnirpsj@gmail.com)\n///\n/// @see core (dependence)\n/// @see gtc_matrix_access (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_io GLM_GTX_io\n/// @ingroup gtx\n///\n/// Include <glm/gtx/io.hpp> to use the features of this extension.\n///\n/// std::[w]ostream support for glm types\n///\n/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators\n/// based on howard hinnant's std::chrono io proposal\n/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html]\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_io 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_io extension included\")\n#\tendif\n#endif\n\n#include <iosfwd>  // std::basic_ostream<> (fwd)\n#include <locale>  // std::locale, std::locale::facet, std::locale::id\n#include <utility> // std::pair<>\n\nnamespace glm\n{\n\t/// @addtogroup gtx_io\n\t/// @{\n\n\tnamespace io\n\t{\n\t\tenum order_type { column_major, row_major};\n\n\t\ttemplate<typename CTy>\n\t\tclass format_punct : public std::locale::facet\n\t\t{\n\t\t\ttypedef CTy char_type;\n\n\t\tpublic:\n\n\t\t\tstatic std::locale::id id;\n\n\t\t\tbool       formatted;\n\t\t\tunsigned   precision;\n\t\t\tunsigned   width;\n\t\t\tchar_type  separator;\n\t\t\tchar_type  delim_left;\n\t\t\tchar_type  delim_right;\n\t\t\tchar_type  space;\n\t\t\tchar_type  newline;\n\t\t\torder_type order;\n\n\t\t\tGLM_FUNC_DECL explicit format_punct(size_t a = 0);\n\t\t\tGLM_FUNC_DECL explicit format_punct(format_punct const&);\n\t\t};\n\n\t\ttemplate<typename CTy, typename CTr = std::char_traits<CTy> >\n\t\tclass basic_state_saver {\n\n\t\tpublic:\n\n\t\t\tGLM_FUNC_DECL explicit basic_state_saver(std::basic_ios<CTy,CTr>&);\n\t\t\tGLM_FUNC_DECL ~basic_state_saver();\n\n\t\tprivate:\n\n\t\t\ttypedef ::std::basic_ios<CTy,CTr>      state_type;\n\t\t\ttypedef typename state_type::char_type char_type;\n\t\t\ttypedef ::std::ios_base::fmtflags      flags_type;\n\t\t\ttypedef ::std::streamsize              streamsize_type;\n\t\t\ttypedef ::std::locale const            locale_type;\n\n\t\t\tstate_type&     state_;\n\t\t\tflags_type      flags_;\n\t\t\tstreamsize_type precision_;\n\t\t\tstreamsize_type width_;\n\t\t\tchar_type       fill_;\n\t\t\tlocale_type     locale_;\n\n\t\t\tGLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&);\n\t\t};\n\n\t\ttypedef basic_state_saver<char>     state_saver;\n\t\ttypedef basic_state_saver<wchar_t> wstate_saver;\n\n\t\ttemplate<typename CTy, typename CTr = std::char_traits<CTy> >\n\t\tclass basic_format_saver\n\t\t{\n\t\tpublic:\n\n\t\t\tGLM_FUNC_DECL explicit basic_format_saver(std::basic_ios<CTy,CTr>&);\n\t\t\tGLM_FUNC_DECL ~basic_format_saver();\n\n\t\tprivate:\n\n\t\t\tbasic_state_saver<CTy> const bss_;\n\n\t\t\tGLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&);\n\t\t};\n\n\t\ttypedef basic_format_saver<char>     format_saver;\n\t\ttypedef basic_format_saver<wchar_t> wformat_saver;\n\n\t\tstruct precision\n\t\t{\n\t\t\tunsigned value;\n\n\t\t\tGLM_FUNC_DECL explicit precision(unsigned);\n\t\t};\n\n\t\tstruct width\n\t\t{\n\t\t\tunsigned value;\n\n\t\t\tGLM_FUNC_DECL explicit width(unsigned);\n\t\t};\n\n\t\ttemplate<typename CTy>\n\t\tstruct delimeter\n\t\t{\n\t\t\tCTy value[3];\n\n\t\t\tGLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');\n\t\t};\n\n\t\tstruct order\n\t\t{\n\t\t\torder_type value;\n\n\t\t\tGLM_FUNC_DECL explicit order(order_type);\n\t\t};\n\n\t\t// functions, inlined (inline)\n\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tFTy const& get_facet(std::basic_ios<CTy,CTr>&);\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tstd::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tstd::basic_ios<CTy,CTr>& unformatted(std::basic_ios<CTy,CTr>&);\n\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);\n\t}//namespace io\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, qua<T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<1, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 4, T, Q> const&);\n\n  template<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,\n                                                         std::pair<mat<4, 4, T, Q> const, mat<4, 4, T, Q> const> const&);\n\n\t/// @}\n}//namespace glm\n\n#include \"io.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/io.inl",
    "content": "/// @ref gtx_io\n/// @author Jan P Springer (regnirpsj@gmail.com)\n\n#include <iomanip>                  // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw\n#include <ostream>                  // std::basic_ostream<>\n#include \"../gtc/matrix_access.hpp\" // glm::col, glm::row\n#include \"../gtx/type_trait.hpp\"    // glm::type<>\n\nnamespace glm{\nnamespace io\n{\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(size_t a)\n\t\t: std::locale::facet(a)\n\t\t, formatted(true)\n\t\t, precision(3)\n\t\t, width(1 + 4 + 1 + precision)\n\t\t, separator(',')\n\t\t, delim_left('[')\n\t\t, delim_right(']')\n\t\t, space(' ')\n\t\t, newline('\\n')\n\t\t, order(column_major)\n\t{}\n\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(format_punct const& a)\n\t\t: std::locale::facet(0)\n\t\t, formatted(a.formatted)\n\t\t, precision(a.precision)\n\t\t, width(a.width)\n\t\t, separator(a.separator)\n\t\t, delim_left(a.delim_left)\n\t\t, delim_right(a.delim_right)\n\t\t, space(a.space)\n\t\t, newline(a.newline)\n\t\t, order(a.order)\n\t{}\n\n\ttemplate<typename CTy> std::locale::id format_punct<CTy>::id;\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::basic_state_saver(std::basic_ios<CTy, CTr>& a)\n\t\t: state_(a)\n\t\t, flags_(a.flags())\n\t\t, precision_(a.precision())\n\t\t, width_(a.width())\n\t\t, fill_(a.fill())\n\t\t, locale_(a.getloc())\n\t{}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::~basic_state_saver()\n\t{\n\t\tstate_.imbue(locale_);\n\t\tstate_.fill(fill_);\n\t\tstate_.width(width_);\n\t\tstate_.precision(precision_);\n\t\tstate_.flags(flags_);\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_format_saver<CTy, CTr>::basic_format_saver(std::basic_ios<CTy, CTr>& a)\n\t\t: bss_(a)\n\t{\n\t\ta.imbue(std::locale(a.getloc(), new format_punct<CTy>(get_facet<format_punct<CTy> >(a))));\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER\n\tbasic_format_saver<CTy, CTr>::~basic_format_saver()\n\t{}\n\n\tGLM_FUNC_QUALIFIER precision::precision(unsigned a)\n\t\t: value(a)\n\t{}\n\n\tGLM_FUNC_QUALIFIER width::width(unsigned a)\n\t\t: value(a)\n\t{}\n\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER delimeter<CTy>::delimeter(CTy a, CTy b, CTy c)\n\t\t: value()\n\t{\n\t\tvalue[0] = a;\n\t\tvalue[1] = b;\n\t\tvalue[2] = c;\n\t}\n\n\tGLM_FUNC_QUALIFIER order::order(order_type a)\n\t\t: value(a)\n\t{}\n\n\ttemplate<typename FTy, typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tif(!std::has_facet<FTy>(ios.getloc()))\n\t\t\tios.imbue(std::locale(ios.getloc(), new FTy));\n\n\t\treturn std::use_facet<FTy>(ios.getloc());\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& formatted(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = true;\n\t\treturn ios;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& unformatted(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = false;\n\t\treturn ios;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, precision const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).precision = a.value;\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, width const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).width = a.value;\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, delimeter<CTy> const& a)\n\t{\n\t\tformat_punct<CTy> & fmt(const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)));\n\n\t\tfmt.delim_left  = a.value[0];\n\t\tfmt.delim_right = a.value[1];\n\t\tfmt.separator   = a.value[2];\n\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, order const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).order = a.value;\n\t\treturn os;\n\t}\n} // namespace io\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, typename V>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>&\n\tprint_vector_on(std::basic_ostream<CTy, CTr>& os, V const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy, CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\n\t\t\tlength_t const& components(type<V>::components);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tio::basic_state_saver<CTy> const bss(os);\n\n\t\t\t\tos << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left;\n\n\t\t\t\tfor(length_t i(0); i < components; ++i)\n\t\t\t\t{\n\t\t\t\t\tos << std::setw(fmt.width) << a[i];\n\t\t\t\t\tif(components-1 != i)\n\t\t\t\t\t\tos << fmt.separator;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor(length_t i(0); i < components; ++i)\n\t\t\t\t{\n\t\t\t\t\tos << a[i];\n\n\t\t\t\t\tif(components-1 != i)\n\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, qua<T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<1, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<2, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<3, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<4, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_on(std::basic_ostream<CTy, CTr>& os, M<C, R, T, Q> const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\n\t\t\tlength_t const& cols(type<M<C, R, T, Q> >::cols);\n\t\t\tlength_t const& rows(type<M<C, R, T, Q> >::rows);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tos << fmt.newline << fmt.delim_left;\n\n\t\t\t\tswitch(fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << row(a, i);\n\n\t\t\t\t\t\t\tif(rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << column(a, i);\n\n\t\t\t\t\t\t\tif(cols-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tos << column(a, i);\n\n\t\t\t\t\t\t\tif(cols - 1 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tos << row(a, i);\n\n\t\t\t\t\t\t\tif (rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_pair_on(std::basic_ostream<CTy, CTr>& os, std::pair<M<C, R, T, Q> const, M<C, R, T, Q> const> const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\t\t\tM<C, R, T, Q> const& ml(a.first);\n\t\t\tM<C, R, T, Q> const& mr(a.second);\n\t\t\tlength_t const& cols(type<M<C, R, T, Q> >::cols);\n\t\t\tlength_t const& rows(type<M<C, R, T, Q> >::rows);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tos << fmt.newline << fmt.delim_left;\n\n\t\t\t\tswitch(fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i);\n\n\t\t\t\t\t\t\tif(rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i);\n\n\t\t\t\t\t\t\tif(cols-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tos << ml << fmt.space << mr;\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(\n\t\tstd::basic_ostream<CTy, CTr> & os,\n\t\tstd::pair<mat<4, 4, T, Q> const,\n\t\tmat<4, 4, T, Q> const> const& a)\n\t{\n\t\treturn detail::print_matrix_pair_on(os, a);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/log_base.hpp",
    "content": "/// @ref gtx_log_base\n/// @file glm/gtx/log_base.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_log_base GLM_GTX_log_base\n/// @ingroup gtx\n///\n/// Include <glm/gtx/log_base.hpp> to use the features of this extension.\n///\n/// Logarithm for any base. base can be a vector or a scalar.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_log_base 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_log_base extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_log_base\n\t/// @{\n\n\t/// Logarithm for any base.\n\t/// From GLM_GTX_log_base.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType log(\n\t\tgenType const& x,\n\t\tgenType const& base);\n\n\t/// Logarithm for any base.\n\t/// From GLM_GTX_log_base.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sign(\n\t\tvec<L, T, Q> const& x,\n\t\tvec<L, T, Q> const& base);\n\n\t/// @}\n}//namespace glm\n\n#include \"log_base.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/log_base.inl",
    "content": "/// @ref gtx_log_base\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base)\n\t{\n\t\treturn glm::log(x) / glm::log(base);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x, vec<L, T, Q> const& base)\n\t{\n\t\treturn glm::log(x) / glm::log(base);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_cross_product.hpp",
    "content": "/// @ref gtx_matrix_cross_product\n/// @file glm/gtx/matrix_cross_product.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_cross_product.hpp> to use the features of this extension.\n///\n/// Build cross product matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_cross_product 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_cross_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_cross_product\n\t/// @{\n\n\t//! Build a cross product matrix.\n\t//! From GLM_GTX_matrix_cross_product extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3(\n\t\tvec<3, T, Q> const& x);\n\n\t//! Build a cross product matrix.\n\t//! From GLM_GTX_matrix_cross_product extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4(\n\t\tvec<3, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_cross_product.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_cross_product.inl",
    "content": "/// @ref gtx_matrix_cross_product\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tmat<3, 3, T, Q> Result(T(0));\n\t\tResult[0][1] = x.z;\n\t\tResult[1][0] = -x.z;\n\t\tResult[0][2] = -x.y;\n\t\tResult[2][0] = x.y;\n\t\tResult[1][2] = x.x;\n\t\tResult[2][1] = -x.x;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tmat<4, 4, T, Q> Result(T(0));\n\t\tResult[0][1] = x.z;\n\t\tResult[1][0] = -x.z;\n\t\tResult[0][2] = -x.y;\n\t\tResult[2][0] = x.y;\n\t\tResult[1][2] = x.x;\n\t\tResult[2][1] = -x.x;\n\t\treturn Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_decompose.hpp",
    "content": "/// @ref gtx_matrix_decompose\n/// @file glm/gtx/matrix_decompose.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension.\n///\n/// Decomposes a model matrix to translations, rotation and scale components\n\n#pragma once\n\n// Dependencies\n#include \"../mat4x4.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../geometric.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_decompose 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_decompose extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_decompose\n\t/// @{\n\n\t/// Decomposes a model matrix to translations, rotation and scale components\n\t/// @see gtx_matrix_decompose\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool decompose(\n\t\tmat<4, 4, T, Q> const& modelMatrix,\n\t\tvec<3, T, Q> & scale, qua<T, Q> & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_decompose.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_decompose.inl",
    "content": "/// @ref gtx_matrix_decompose\n\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/epsilon.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\t/// Make a linear combination of two vectors and return the result.\n\t// result = (a * ascl) + (b * bscl)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> combine(\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b,\n\t\tT ascl, T bscl)\n\t{\n\t\treturn (a * ascl) + (b * bscl);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength)\n\t{\n\t\treturn v * desiredLength / length(v);\n\t}\n}//namespace detail\n\n\t// Matrix decompose\n\t// http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp\n\t// Decomposes the mode matrix to translations,rotation scale components\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua<T, Q> & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective)\n\t{\n\t\tmat<4, 4, T, Q> LocalMatrix(ModelMatrix);\n\n\t\t// Normalize the matrix.\n\t\tif(epsilonEqual(LocalMatrix[3][3], static_cast<T>(0), epsilon<T>()))\n\t\t\treturn false;\n\n\t\tfor(length_t i = 0; i < 4; ++i)\n\t\tfor(length_t j = 0; j < 4; ++j)\n\t\t\tLocalMatrix[i][j] /= LocalMatrix[3][3];\n\n\t\t// perspectiveMatrix is used to solve for perspective, but it also provides\n\t\t// an easy way to test for singularity of the upper 3x3 component.\n\t\tmat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix);\n\n\t\tfor(length_t i = 0; i < 3; i++)\n\t\t\tPerspectiveMatrix[i][3] = static_cast<T>(0);\n\t\tPerspectiveMatrix[3][3] = static_cast<T>(1);\n\n\t\t/// TODO: Fixme!\n\t\tif(epsilonEqual(determinant(PerspectiveMatrix), static_cast<T>(0), epsilon<T>()))\n\t\t\treturn false;\n\n\t\t// First, isolate perspective.  This is the messiest.\n\t\tif(\n\t\t\tepsilonNotEqual(LocalMatrix[0][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[1][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[2][3], static_cast<T>(0), epsilon<T>()))\n\t\t{\n\t\t\t// rightHandSide is the right hand side of the equation.\n\t\t\tvec<4, T, Q> RightHandSide;\n\t\t\tRightHandSide[0] = LocalMatrix[0][3];\n\t\t\tRightHandSide[1] = LocalMatrix[1][3];\n\t\t\tRightHandSide[2] = LocalMatrix[2][3];\n\t\t\tRightHandSide[3] = LocalMatrix[3][3];\n\n\t\t\t// Solve the equation by inverting PerspectiveMatrix and multiplying\n\t\t\t// rightHandSide by the inverse.  (This is the easiest way, not\n\t\t\t// necessarily the best.)\n\t\t\tmat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);//   inverse(PerspectiveMatrix, inversePerspectiveMatrix);\n\t\t\tmat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);//   transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix);\n\n\t\t\tPerspective = TransposedInversePerspectiveMatrix * RightHandSide;\n\t\t\t//  v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint);\n\n\t\t\t// Clear the perspective partition\n\t\t\tLocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast<T>(0);\n\t\t\tLocalMatrix[3][3] = static_cast<T>(1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// No perspective.\n\t\t\tPerspective = vec<4, T, Q>(0, 0, 0, 1);\n\t\t}\n\n\t\t// Next take care of translation (easy).\n\t\tTranslation = vec<3, T, Q>(LocalMatrix[3]);\n\t\tLocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w);\n\n\t\tvec<3, T, Q> Row[3], Pdum3;\n\n\t\t// Now get scale and shear.\n\t\tfor(length_t i = 0; i < 3; ++i)\n\t\tfor(length_t j = 0; j < 3; ++j)\n\t\t\tRow[i][j] = LocalMatrix[i][j];\n\n\t\t// Compute X scale factor and normalize first row.\n\t\tScale.x = length(Row[0]);// v3Length(Row[0]);\n\n\t\tRow[0] = detail::scale(Row[0], static_cast<T>(1));\n\n\t\t// Compute XY shear factor and make 2nd row orthogonal to 1st.\n\t\tSkew.z = dot(Row[0], Row[1]);\n\t\tRow[1] = detail::combine(Row[1], Row[0], static_cast<T>(1), -Skew.z);\n\n\t\t// Now, compute Y scale and normalize 2nd row.\n\t\tScale.y = length(Row[1]);\n\t\tRow[1] = detail::scale(Row[1], static_cast<T>(1));\n\t\tSkew.z /= Scale.y;\n\n\t\t// Compute XZ and YZ shears, orthogonalize 3rd row.\n\t\tSkew.y = glm::dot(Row[0], Row[2]);\n\t\tRow[2] = detail::combine(Row[2], Row[0], static_cast<T>(1), -Skew.y);\n\t\tSkew.x = glm::dot(Row[1], Row[2]);\n\t\tRow[2] = detail::combine(Row[2], Row[1], static_cast<T>(1), -Skew.x);\n\n\t\t// Next, get Z scale and normalize 3rd row.\n\t\tScale.z = length(Row[2]);\n\t\tRow[2] = detail::scale(Row[2], static_cast<T>(1));\n\t\tSkew.y /= Scale.z;\n\t\tSkew.x /= Scale.z;\n\n\t\t// At this point, the matrix (in rows[]) is orthonormal.\n\t\t// Check for a coordinate system flip.  If the determinant\n\t\t// is -1, then negate the matrix and the scaling factors.\n\t\tPdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3);\n\t\tif(dot(Row[0], Pdum3) < 0)\n\t\t{\n\t\t\tfor(length_t i = 0; i < 3; i++)\n\t\t\t{\n\t\t\t\tScale[i] *= static_cast<T>(-1);\n\t\t\t\tRow[i] *= static_cast<T>(-1);\n\t\t\t}\n\t\t}\n\n\t\t// Now, get the rotations out, as described in the gem.\n\n\t\t// FIXME - Add the ability to return either quaternions (which are\n\t\t// easier to recompose with) or Euler angles (rx, ry, rz), which\n\t\t// are easier for authors to deal with. The latter will only be useful\n\t\t// when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I\n\t\t// will leave the Euler angle code here for now.\n\n\t\t// ret.rotateY = asin(-Row[0][2]);\n\t\t// if (cos(ret.rotateY) != 0) {\n\t\t//     ret.rotateX = atan2(Row[1][2], Row[2][2]);\n\t\t//     ret.rotateZ = atan2(Row[0][1], Row[0][0]);\n\t\t// } else {\n\t\t//     ret.rotateX = atan2(-Row[2][0], Row[1][1]);\n\t\t//     ret.rotateZ = 0;\n\t\t// }\n\n\t\tint i, j, k = 0;\n\t\tT root, trace = Row[0].x + Row[1].y + Row[2].z;\n\t\tif(trace > static_cast<T>(0))\n\t\t{\n\t\t\troot = sqrt(trace + static_cast<T>(1.0));\n\t\t\tOrientation.w = static_cast<T>(0.5) * root;\n\t\t\troot = static_cast<T>(0.5) / root;\n\t\t\tOrientation.x = root * (Row[1].z - Row[2].y);\n\t\t\tOrientation.y = root * (Row[2].x - Row[0].z);\n\t\t\tOrientation.z = root * (Row[0].y - Row[1].x);\n\t\t} // End if > 0\n\t\telse\n\t\t{\n\t\t\tstatic int Next[3] = {1, 2, 0};\n\t\t\ti = 0;\n\t\t\tif(Row[1].y > Row[0].x) i = 1;\n\t\t\tif(Row[2].z > Row[i][i]) i = 2;\n\t\t\tj = Next[i];\n\t\t\tk = Next[j];\n\n#           ifdef GLM_FORCE_QUAT_DATA_XYZW\n                int off = 0;\n#           else\n                int off = 1;\n#           endif\n\n\t\t\troot = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast<T>(1.0));\n\n\t\t\tOrientation[i + off] = static_cast<T>(0.5) * root;\n\t\t\troot = static_cast<T>(0.5) / root;\n\t\t\tOrientation[j + off] = root * (Row[i][j] + Row[j][i]);\n\t\t\tOrientation[k + off] = root * (Row[i][k] + Row[k][i]);\n\t\t\tOrientation.w = root * (Row[j][k] - Row[k][j]);\n\t\t} // End if <= 0\n\n\t\treturn true;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_factorisation.hpp",
    "content": "/// @ref gtx_matrix_factorisation\n/// @file glm/gtx/matrix_factorisation.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_factorisation.hpp> to use the features of this extension.\n///\n/// Functions to factor matrices in various forms\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_factorisation 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_factorisation extension included\")\n#\tendif\n#endif\n\n/*\nSuggestions:\n - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances.\n - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc...\n*/\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_factorisation\n\t/// @{\n\n\t/// Flips the matrix rows up and down.\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in);\n\n\t/// Flips the matrix columns right and left.\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in);\n\n\t/// Performs QR factorisation of a matrix.\n\t/// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in.\n\t/// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m).\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r);\n\n\t/// Performs RQ factorisation of a matrix.\n\t/// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in.\n\t/// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left.\n\t/// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m).\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q);\n\n\t/// @}\n}\n\n#include \"matrix_factorisation.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_factorisation.inl",
    "content": "/// @ref gtx_matrix_factorisation\n\nnamespace glm\n{\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in)\n\t{\n\t\tmat<R, C, T, Q> tin = transpose(in);\n\t\ttin = fliplr(tin);\n\t\tmat<C, R, T, Q> out = transpose(tin);\n\n\t\treturn out;\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in)\n\t{\n\t\tmat<C, R, T, Q> out;\n\t\tfor (length_t i = 0; i < C; i++)\n\t\t{\n\t\t\tout[i] = in[(C - i) - 1];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r)\n\t{\n\t\t// Uses modified Gram-Schmidt method\n\t\t// Source: https://en.wikipedia.org/wiki/GramSchmidt_process\n\t\t// And https://en.wikipedia.org/wiki/QR_decomposition\n\n\t\t//For all the linearly independs columns of the input...\n\t\t// (there can be no more linearly independents columns than there are rows.)\n\t\tfor (length_t i = 0; i < (C < R ? C : R); i++)\n\t\t{\n\t\t\t//Copy in Q the input's i-th column.\n\t\t\tq[i] = in[i];\n\n\t\t\t//j = [0,i[\n\t\t\t// Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns.\n\t\t\t// Also: Fill the zero elements of R\n\t\t\tfor (length_t j = 0; j < i; j++)\n\t\t\t{\n\t\t\t\tq[i] -= dot(q[i], q[j])*q[j];\n\t\t\t\tr[j][i] = 0;\n\t\t\t}\n\n\t\t\t//Now, Q i-th column is orthogonal to all the previous columns. Normalize it.\n\t\t\tq[i] = normalize(q[i]);\n\n\t\t\t//j = [i,C[\n\t\t\t//Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input.\n\t\t\tfor (length_t j = i; j < C; j++)\n\t\t\t{\n\t\t\t\tr[j][i] = dot(in[j], q[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q)\n\t{\n\t\t// From https://en.wikipedia.org/wiki/QR_decomposition:\n\t\t// The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices.\n\t\t// QR decomposition is GramSchmidt orthogonalization of columns of A, started from the first column.\n\t\t// RQ decomposition is GramSchmidt orthogonalization of rows of A, started from the last row.\n\n\t\tmat<R, C, T, Q> tin = transpose(in);\n\t\ttin = fliplr(tin);\n\n\t\tmat<R, (C < R ? C : R), T, Q> tr;\n\t\tmat<(C < R ? C : R), C, T, Q> tq;\n\t\tqr_decompose(tin, tq, tr);\n\n\t\ttr = fliplr(tr);\n\t\tr = transpose(tr);\n\t\tr = fliplr(r);\n\n\t\ttq = fliplr(tq);\n\t\tq = transpose(tq);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_interpolation.hpp",
    "content": "/// @ref gtx_matrix_interpolation\n/// @file glm/gtx/matrix_interpolation.hpp\n/// @author Ghenadii Ursachi (the.asteroth@gmail.com)\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.\n///\n/// Allows to directly interpolate two matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_interpolation 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_interpolation extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_interpolation\n\t/// @{\n\n\t/// Get the axis and angle of the rotation from a matrix.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void axisAngle(\n\t\tmat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle);\n\n\t/// Build a matrix from axis and angle.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix(\n\t\tvec<3, T, Q> const& Axis, T const Angle);\n\n\t/// Extracts the rotation part of a matrix.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation(\n\t\tmat<4, 4, T, Q> const& Mat);\n\n\t/// Build a interpolation of 4 * 4 matrixes.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\t/// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> interpolate(\n\t\tmat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_interpolation.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_interpolation.inl",
    "content": "/// @ref gtx_matrix_interpolation\n\n#include \"../ext/scalar_constants.hpp\"\n\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q>& axis, T& angle)\n\t{\n\t\tT const epsilon =\n\t\t    std::numeric_limits<T>::epsilon() * static_cast<T>(1e2);\n\n        bool const nearSymmetrical =\n            abs(m[1][0] - m[0][1]) < epsilon &&\n            abs(m[2][0] - m[0][2]) < epsilon &&\n            abs(m[2][1] - m[1][2]) < epsilon;\n\n\t\tif(nearSymmetrical)\n\t\t{\n            bool const nearIdentity =\n                abs(m[1][0] + m[0][1]) < epsilon &&\n                abs(m[2][0] + m[0][2]) < epsilon &&\n                abs(m[2][1] + m[1][2]) < epsilon &&\n                abs(m[0][0] + m[1][1] + m[2][2] - T(3.0)) < epsilon;\n\t\t\tif (nearIdentity)\n\t\t\t{\n\t\t\t\tangle = static_cast<T>(0.0);\n\t\t\t\taxis = vec<3, T, Q>(\n\t\t\t\t    static_cast<T>(1.0), static_cast<T>(0.0), static_cast<T>(0.0));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tangle = pi<T>();\n\t\t\tT xx = (m[0][0] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT yy = (m[1][1] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT zz = (m[2][2] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT xy = (m[1][0] + m[0][1]) * static_cast<T>(0.25);\n\t\t\tT xz = (m[2][0] + m[0][2]) * static_cast<T>(0.25);\n\t\t\tT yz = (m[2][1] + m[1][2]) * static_cast<T>(0.25);\n\t\t\tif((xx > yy) && (xx > zz))\n\t\t\t{\n\t\t\t\tif(xx < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.0);\n\t\t\t\t\taxis.y = static_cast<T>(0.7071);\n\t\t\t\t\taxis.z = static_cast<T>(0.7071);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.x = sqrt(xx);\n\t\t\t\t\taxis.y = xy / axis.x;\n\t\t\t\t\taxis.z = xz / axis.x;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (yy > zz)\n\t\t\t{\n\t\t\t\tif(yy < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.7071);\n\t\t\t\t\taxis.y = static_cast<T>(0.0);\n\t\t\t\t\taxis.z = static_cast<T>(0.7071);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.y = sqrt(yy);\n\t\t\t\t\taxis.x = xy / axis.y;\n\t\t\t\t\taxis.z = yz / axis.y;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (zz < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.7071);\n\t\t\t\t\taxis.y = static_cast<T>(0.7071);\n\t\t\t\t\taxis.z = static_cast<T>(0.0);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.z = sqrt(zz);\n\t\t\t\t\taxis.x = xz / axis.z;\n\t\t\t\t\taxis.y = yz / axis.z;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tT const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast<T>(1)) * static_cast<T>(0.5);\n\t\tif(angleCos >= static_cast<T>(1.0))\n\t\t{\n\t\t\tangle = static_cast<T>(0.0);\n\t\t}\n\t\telse if (angleCos <= static_cast<T>(-1.0))\n\t\t{\n\t\t\tangle = pi<T>();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tangle = acos(angleCos);\n\t\t}\n\n        axis = glm::normalize(glm::vec<3, T, Q>(\n            m[1][2] - m[2][1], m[2][0] - m[0][2], m[0][1] - m[1][0]));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle)\n\t{\n\t\tT c = cos(angle);\n\t\tT s = sin(angle);\n\t\tT t = static_cast<T>(1) - c;\n\t\tvec<3, T, Q> n = normalize(axis);\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tt * n.x * n.x + c,          t * n.x * n.y + n.z * s,    t * n.x * n.z - n.y * s,    static_cast<T>(0.0),\n\t\t\tt * n.x * n.y - n.z * s,    t * n.y * n.y + c,          t * n.y * n.z + n.x * s,    static_cast<T>(0.0),\n\t\t\tt * n.x * n.z + n.y * s,    t * n.y * n.z - n.x * s,    t * n.z * n.z + c,          static_cast<T>(0.0),\n\t\t\tstatic_cast<T>(0.0),        static_cast<T>(0.0),        static_cast<T>(0.0),        static_cast<T>(1.0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0][0], m[0][1], m[0][2], static_cast<T>(0.0),\n\t\t\tm[1][0], m[1][1], m[1][2], static_cast<T>(0.0),\n\t\t\tm[2][0], m[2][1], m[2][2], static_cast<T>(0.0),\n\t\t\tstatic_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(1.0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta)\n\t{\n\t\tmat<4, 4, T, Q> m1rot = extractMatrixRotation(m1);\n\t\tmat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot);\n\t\tvec<3, T, Q> dltAxis;\n\t\tT dltAngle;\n\t\taxisAngle(dltRotation, dltAxis, dltAngle);\n\t\tmat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot;\n\t\tout[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]);\n\t\tout[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]);\n\t\tout[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]);\n\t\treturn out;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_major_storage.hpp",
    "content": "/// @ref gtx_matrix_major_storage\n/// @file glm/gtx/matrix_major_storage.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_major_storage.hpp> to use the features of this extension.\n///\n/// Build matrices with specific matrix order, row or column\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_major_storage 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_major_storage extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_major_storage\n\t/// @{\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(\n\t\tmat<2, 2, T, Q> const& m);\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(\n\t\tmat<3, 3, T, Q> const& m);\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(\n\t\tvec<4, T, Q> const& v1,\n\t\tvec<4, T, Q> const& v2,\n\t\tvec<4, T, Q> const& v3,\n\t\tvec<4, T, Q> const& v4);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(\n\t\tmat<4, 4, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(\n\t\tmat<2, 2, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(\n\t\tmat<3, 3, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(\n\t\tvec<4, T, Q> const& v1,\n\t\tvec<4, T, Q> const& v2,\n\t\tvec<4, T, Q> const& v3,\n\t\tvec<4, T, Q> const& v4);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(\n\t\tmat<4, 4, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_major_storage.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_major_storage.inl",
    "content": "/// @ref gtx_matrix_major_storage\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2\n\t(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2\n\t)\n\t{\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2(\n\t\tconst mat<2, 2, T, Q>& m)\n\t{\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3(\n\t\tconst vec<3, T, Q>& v1,\n\t\tconst vec<3, T, Q>& v2,\n\t\tconst vec<3, T, Q>& v3)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[2][0] = v1.z;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\tResult[2][1] = v2.z;\n\t\tResult[0][2] = v3.x;\n\t\tResult[1][2] = v3.y;\n\t\tResult[2][2] = v3.z;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3(\n\t\tconst mat<3, 3, T, Q>& m)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[0][2] = m[2][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\tResult[1][2] = m[2][1];\n\t\tResult[2][0] = m[0][2];\n\t\tResult[2][1] = m[1][2];\n\t\tResult[2][2] = m[2][2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4(\n\t\tconst vec<4, T, Q>& v1,\n\t\tconst vec<4, T, Q>& v2,\n\t\tconst vec<4, T, Q>& v3,\n\t\tconst vec<4, T, Q>& v4)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[2][0] = v1.z;\n\t\tResult[3][0] = v1.w;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\tResult[2][1] = v2.z;\n\t\tResult[3][1] = v2.w;\n\t\tResult[0][2] = v3.x;\n\t\tResult[1][2] = v3.y;\n\t\tResult[2][2] = v3.z;\n\t\tResult[3][2] = v3.w;\n\t\tResult[0][3] = v4.x;\n\t\tResult[1][3] = v4.y;\n\t\tResult[2][3] = v4.z;\n\t\tResult[3][3] = v4.w;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4(\n\t\tconst mat<4, 4, T, Q>& m)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[0][2] = m[2][0];\n\t\tResult[0][3] = m[3][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\tResult[1][2] = m[2][1];\n\t\tResult[1][3] = m[3][1];\n\t\tResult[2][0] = m[0][2];\n\t\tResult[2][1] = m[1][2];\n\t\tResult[2][2] = m[2][2];\n\t\tResult[2][3] = m[3][2];\n\t\tResult[3][0] = m[0][3];\n\t\tResult[3][1] = m[1][3];\n\t\tResult[3][2] = m[2][3];\n\t\tResult[3][3] = m[3][3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2(\n\t\tconst vec<2, T, Q>& v1,\n\t\tconst vec<2, T, Q>& v2)\n\t{\n\t\treturn mat<2, 2, T, Q>(v1, v2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2(\n\t\tconst mat<2, 2, T, Q>& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3(\n\t\tconst vec<3, T, Q>& v1,\n\t\tconst vec<3, T, Q>& v2,\n\t\tconst vec<3, T, Q>& v3)\n\t{\n\t\treturn mat<3, 3, T, Q>(v1, v2, v3);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3(\n\t\tconst mat<3, 3, T, Q>& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4(\n\t\tconst vec<4, T, Q>& v1,\n\t\tconst vec<4, T, Q>& v2,\n\t\tconst vec<4, T, Q>& v3,\n\t\tconst vec<4, T, Q>& v4)\n\t{\n\t\treturn mat<4, 4, T, Q>(v1, v2, v3, v4);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4(\n\t\tconst mat<4, 4, T, Q>& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(m);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_operation.hpp",
    "content": "/// @ref gtx_matrix_operation\n/// @file glm/gtx/matrix_operation.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_operation.hpp> to use the features of this extension.\n///\n/// Build diagonal matrices from vectors.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_operation 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_operation extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_operation\n\t/// @{\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4(\n\t\tvec<4, T, Q> const& v);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_operation.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_operation.inl",
    "content": "/// @ref gtx_matrix_operation\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4\n\t(\n\t\tvec<4, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\tResult[3][3] = v[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\t+m[1][1], -m[0][1],\n\t\t\t-m[1][0], +m[0][0]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2]));\n\t\tT const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2]));\n\t\tT const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2]));\n\n\t\tT const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2]));\n\t\tT const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2]));\n\t\tT const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2]));\n\n\t\tT const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1]));\n\t\tT const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1]));\n\t\tT const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1]));\n\n\t\treturn mat<3, 3, T, Q>(\n\t\t\t+m00, -m01, +m02,\n\t\t\t-m10, +m11, -m12,\n\t\t\t+m20, -m21, +m22);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m)\n\t{\n\t\tT const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3]));\n\t\tT const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3]));\n\t\tT const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3]));\n\t\tT const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2]));\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\t+m00, -m10, +m20, -m30,\n\t\t\t-m01, +m11, -m21, +m31,\n\t\t\t+m02, -m12, +m22, -m32,\n\t\t\t-m03, +m13, -m23, +m33);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_query.hpp",
    "content": "/// @ref gtx_matrix_query\n/// @file glm/gtx/matrix_query.hpp\n///\n/// @see core (dependence)\n/// @see gtx_vector_query (dependence)\n///\n/// @defgroup gtx_matrix_query GLM_GTX_matrix_query\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_query.hpp> to use the features of this extension.\n///\n/// Query to evaluate matrix properties\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/vector_query.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_query 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_query extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_query\n\t/// @{\n\n\t/// Return whether a matrix a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is an identity matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>\n\tGLM_FUNC_DECL bool isIdentity(matType<C, R, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is an orthonormalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>\n\tGLM_FUNC_DECL bool isOrthogonal(matType<C, R, T, Q> const& m, T const& epsilon);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_query.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_query.inl",
    "content": "/// @ref gtx_matrix_query\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isIdentity(mat<C, R, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\tfor(length_t j = 0; result && j < glm::min(i, m[0].length()); ++j)\n\t\t\t\tresult = abs(m[i][j]) <= epsilon;\n\t\t\tif(result && i < m[0].length())\n\t\t\t\tresult = abs(m[i][i] - 1) <= epsilon;\n\t\t\tfor(length_t j = i + 1; result && j < m[0].length(); ++j)\n\t\t\t\tresult = abs(m[i][j]) <= epsilon;\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<2, 2, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<3, 3, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<4, 4, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isOrthogonal(mat<C, R, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i(0); result && i < m.length() - 1; ++i)\n\t\tfor(length_t j(i + 1); result && j < m.length(); ++j)\n\t\t\tresult = areOrthogonal(m[i], m[j], epsilon);\n\n\t\tif(result)\n\t\t{\n\t\t\tmat<C, R, T, Q> tmp = transpose(m);\n\t\t\tfor(length_t i(0); result && i < m.length() - 1 ; ++i)\n\t\t\tfor(length_t j(i + 1); result && j < m.length(); ++j)\n\t\t\t\tresult = areOrthogonal(tmp[i], tmp[j], epsilon);\n\t\t}\n\t\treturn result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_transform_2d.hpp",
    "content": "/// @ref gtx_matrix_transform_2d\n/// @file glm/gtx/matrix_transform_2d.hpp\n/// @author Miguel Ángel Pérez Martínez\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_transform_2d.hpp> to use the features of this extension.\n///\n/// Defines functions that generate common 2d transformation matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../vec2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_transform_2d 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_transform_2d extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_transform_2d\n\t/// @{\n\n\t/// Builds a translation 3 * 3 matrix created from a vector of 2 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a translation vector.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v);\n\n\t/// Builds a rotation 3 * 3 matrix created from an angle.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT angle);\n\n\t/// Builds a scale 3 * 3 matrix created from a vector of 2 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a scale vector.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v);\n\n\t/// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param y Shear factor.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT y);\n\n\t/// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param x Shear factor.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_transform_2d.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/matrix_transform_2d.inl",
    "content": "/// @ref gtx_matrix_transform_2d\n/// @author Miguel Ángel Pérez Martínez\n\n#include \"../trigonometric.hpp\"\n\nnamespace glm\n{\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v)\n\t{\n\t\tmat<3, 3, T, Q> Result(m);\n\t\tResult[2] = m[0] * v[0] + m[1] * v[1] + m[2];\n\t\treturn Result;\n\t}\n\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT angle)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0] = m[0] * c + m[1] * s;\n\t\tResult[1] = m[0] * -s + m[1] * c;\n\t\tResult[2] = m[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0] = m[0] * v[0];\n\t\tResult[1] = m[1] * v[1];\n\t\tResult[2] = m[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT y)\n\t{\n\t\tmat<3, 3, T, Q> Result(1);\n\t\tResult[0][1] = y;\n\t\treturn m * Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT x)\n\t{\n\t\tmat<3, 3, T, Q> Result(1);\n\t\tResult[1][0] = x;\n\t\treturn m * Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/mixed_product.hpp",
    "content": "/// @ref gtx_mixed_product\n/// @file glm/gtx/mixed_product.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte\n/// @ingroup gtx\n///\n/// Include <glm/gtx/mixed_product.hpp> to use the features of this extension.\n///\n/// Mixed product of 3 vectors.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_mixed_product 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_mixed_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_mixed_product\n\t/// @{\n\n\t/// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T mixedProduct(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t/// @}\n}// namespace glm\n\n#include \"mixed_product.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/mixed_product.inl",
    "content": "/// @ref gtx_mixed_product\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T mixedProduct\n\t(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3\n\t)\n\t{\n\t\treturn dot(cross(v1, v2), v3);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/norm.hpp",
    "content": "/// @ref gtx_norm\n/// @file glm/gtx/norm.hpp\n///\n/// @see core (dependence)\n/// @see gtx_quaternion (dependence)\n/// @see gtx_component_wise (dependence)\n///\n/// @defgroup gtx_norm GLM_GTX_norm\n/// @ingroup gtx\n///\n/// Include <glm/gtx/norm.hpp> to use the features of this extension.\n///\n/// Various ways to compute vector norms.\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n#include \"../gtx/quaternion.hpp\"\n#include \"../gtx/component_wise.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_norm 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_norm extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_norm\n\t/// @{\n\n\t/// Returns the squared length of x.\n\t/// From GLM_GTX_norm extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T length2(vec<L, T, Q> const& x);\n\n\t/// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).\n\t/// From GLM_GTX_norm extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);\n\n\t//! Returns the L1 norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the L1 norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v);\n\n\t//! Returns the L2 norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the L2 norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x);\n\n\t//! Returns the L norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth);\n\n\t//! Returns the L norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth);\n\n\t//! Returns the LMax norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the LMax norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"norm.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/norm.inl",
    "content": "/// @ref gtx_norm\n\n#include \"../detail/qualifier.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_length2\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn dot(v, v);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType length2(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'length2' accepts only floating-point inputs\");\n\t\treturn x * x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length2(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'length2' accepts only floating-point inputs\");\n\t\treturn detail::compute_length2<L, T, Q, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T distance2(T p0, T p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'distance2' accepts only floating-point inputs\");\n\t\treturn length2(p1 - p0);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'distance2' accepts only floating-point inputs\");\n\t\treturn length2(p1 - p0);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t{\n\t\treturn abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v)\n\t{\n\t\treturn abs(v.x) + abs(v.y) + abs(v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b\n\t)\n\t{\n\t\treturn length(b - a);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v)\n\t{\n\t\treturn length(v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth)\n\t{\n\t\treturn pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth)\n\t{\n\t\treturn pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t{\n\t\treturn compMax(abs(b - a));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v)\n\t{\n\t\treturn compMax(abs(v));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/normal.hpp",
    "content": "/// @ref gtx_normal\n/// @file glm/gtx/normal.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_normal GLM_GTX_normal\n/// @ingroup gtx\n///\n/// Include <glm/gtx/normal.hpp> to use the features of this extension.\n///\n/// Compute the normal of a triangle.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_normal 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_normal extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_normal\n\t/// @{\n\n\t/// Computes triangle normal from triangle points.\n\t///\n\t/// @see gtx_normal\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3);\n\n\t/// @}\n}//namespace glm\n\n#include \"normal.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/normal.inl",
    "content": "/// @ref gtx_normal\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal\n\t(\n\t\tvec<3, T, Q> const& p1,\n\t\tvec<3, T, Q> const& p2,\n\t\tvec<3, T, Q> const& p3\n\t)\n\t{\n\t\treturn normalize(cross(p1 - p2, p1 - p3));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/normalize_dot.hpp",
    "content": "/// @ref gtx_normalize_dot\n/// @file glm/gtx/normalize_dot.hpp\n///\n/// @see core (dependence)\n/// @see gtx_fast_square_root (dependence)\n///\n/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot\n/// @ingroup gtx\n///\n/// Include <glm/gtx/normalize_dot.hpp> to use the features of this extension.\n///\n/// Dot product of vectors that need to be normalize with a single square root.\n\n#pragma once\n\n// Dependency:\n#include \"../gtx/fast_square_root.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_normalize_dot 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_normalize_dot extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_normalize_dot\n\t/// @{\n\n\t/// Normalize parameters and returns the dot product of x and y.\n\t/// It's faster that dot(normalize(x), normalize(y)).\n\t///\n\t/// @see gtx_normalize_dot extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T normalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Normalize parameters and returns the dot product of x and y.\n\t/// Faster that dot(fastNormalize(x), fastNormalize(y)).\n\t///\n\t/// @see gtx_normalize_dot extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastNormalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"normalize_dot.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/normalize_dot.inl",
    "content": "/// @ref gtx_normalize_dot\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T normalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastNormalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/number_precision.hpp",
    "content": "/// @ref gtx_number_precision\n/// @file glm/gtx/number_precision.hpp\n///\n/// @see core (dependence)\n/// @see gtc_type_precision (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_number_precision GLM_GTX_number_precision\n/// @ingroup gtx\n///\n/// Include <glm/gtx/number_precision.hpp> to use the features of this extension.\n///\n/// Defined size types.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/type_precision.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_number_precision 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_number_precision extension included\")\n#\tendif\n#endif\n\nnamespace glm{\nnamespace gtx\n{\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// @addtogroup gtx_number_precision\n\t/// @{\n\n\ttypedef u8\t\t\tu8vec1;\t\t//!< \\brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u16\t\t\tu16vec1;    //!< \\brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u32\t\t\tu32vec1;    //!< \\brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u64\t\t\tu64vec1;    //!< \\brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\n\t//////////////////////\n\t// Float vector types\n\n\ttypedef f32\t\t\tf32vec1;    //!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64vec1;    //!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\n\t//////////////////////\n\t// Float matrix types\n\n\ttypedef f32\t\t\tf32mat1;\t//!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f32\t\t\tf32mat1x1;\t//!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64mat1;\t//!< \\brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64mat1x1;\t//!< \\brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\n\t/// @}\n}//namespace gtx\n}//namespace glm\n\n#include \"number_precision.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/number_precision.inl",
    "content": "/// @ref gtx_number_precision\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/optimum_pow.hpp",
    "content": "/// @ref gtx_optimum_pow\n/// @file glm/gtx/optimum_pow.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow\n/// @ingroup gtx\n///\n/// Include <glm/gtx/optimum_pow.hpp> to use the features of this extension.\n///\n/// Integer exponentiation of power functions.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_optimum_pow 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_optimum_pow extension included\")\n#\tendif\n#endif\n\nnamespace glm{\nnamespace gtx\n{\n\t/// @addtogroup gtx_optimum_pow\n\t/// @{\n\n\t/// Returns x raised to the power of 2.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow2(genType const& x);\n\n\t/// Returns x raised to the power of 3.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow3(genType const& x);\n\n\t/// Returns x raised to the power of 4.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow4(genType const& x);\n\n\t/// @}\n}//namespace gtx\n}//namespace glm\n\n#include \"optimum_pow.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/optimum_pow.inl",
    "content": "/// @ref gtx_optimum_pow\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow2(genType const& x)\n\t{\n\t\treturn x * x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow3(genType const& x)\n\t{\n\t\treturn x * x * x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow4(genType const& x)\n\t{\n\t\treturn (x * x) * (x * x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/orthonormalize.hpp",
    "content": "/// @ref gtx_orthonormalize\n/// @file glm/gtx/orthonormalize.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize\n/// @ingroup gtx\n///\n/// Include <glm/gtx/orthonormalize.hpp> to use the features of this extension.\n///\n/// Orthonormalize matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../vec3.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_orthonormalize 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_orthonormalize extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_orthonormalize\n\t/// @{\n\n\t/// Returns the orthonormalized matrix of m.\n\t///\n\t/// @see gtx_orthonormalize\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m);\n\n\t/// Orthonormalizes x according y.\n\t///\n\t/// @see gtx_orthonormalize\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"orthonormalize.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/orthonormalize.inl",
    "content": "/// @ref gtx_orthonormalize\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m)\n\t{\n\t\tmat<3, 3, T, Q> r = m;\n\n\t\tr[0] = normalize(r[0]);\n\n\t\tT d0 = dot(r[0], r[1]);\n\t\tr[1] -= r[0] * d0;\n\t\tr[1] = normalize(r[1]);\n\n\t\tT d1 = dot(r[1], r[2]);\n\t\td0 = dot(r[0], r[2]);\n\t\tr[2] -= r[0] * d0 + r[1] * d1;\n\t\tr[2] = normalize(r[2]);\n\n\t\treturn r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t{\n\t\treturn normalize(x - y * dot(y, x));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/pca.hpp",
    "content": "/// @ref gtx_pca\n/// @file glm/gtx/pca.hpp\n///\n/// @see core (dependence)\n/// @see ext_scalar_relational (dependence)\n///\n/// @defgroup gtx_pca GLM_GTX_pca\n/// @ingroup gtx\n///\n/// Include <glm/gtx/pca.hpp> to use the features of this extension.\n///\n/// Implements functions required for fundamental 'princple component analysis' in 2D, 3D, and 4D:\n///   1) Computing a covariance matrics from a list of _relative_ position vectors\n///   2) Compute the eigenvalues and eigenvectors of the covariance matrics\n/// This is useful, e.g., to compute an object-aligned bounding box from vertices of an object.\n/// https://en.wikipedia.org/wiki/Principal_component_analysis\n///\n/// Example:\n/// ```\n/// std::vector<glm::dvec3> ptData;\n/// // ... fill ptData with some point data, e.g. vertices\n/// \n/// glm::dvec3 center = computeCenter(ptData);\n/// \n/// glm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center);\n/// \n/// glm::dvec3 evals;\n/// glm::dmat3 evecs;\n/// int evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs);\n/// \n/// if(evcnt != 3)\n///     // ... error handling\n/// \n/// glm::sortEigenvalues(evals, evecs);\n/// \n/// // ... now evecs[0] points in the direction (symmetric) of the largest spatial distribution within ptData\n/// ```\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/scalar_relational.hpp\"\n\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_pca 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_pca extension included\")\n#\tendif\n#endif\n\nnamespace glm {\n\t/// @addtogroup gtx_pca\n\t/// @{\n\n\t/// Compute a covariance matrix form an array of relative coordinates `v` (e.g., relative to the center of gravity of the object)\n\t/// @param v Points to a memory holding `n` times vectors\n\t/// @param n Number of points in v\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_INLINE mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n);\n\n\t/// Compute a covariance matrix form an array of absolute coordinates `v` and a precomputed center of gravity `c`\n\t/// @param v Points to a memory holding `n` times vectors\n\t/// @param n Number of points in v\n\t/// @param c Precomputed center of gravity\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_INLINE mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n, vec<D, T, Q> const& c);\n\n\t/// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with relative coordinates (e.g., relative to the center of gravity of the object)\n\t/// Dereferencing an iterator of type I must yield a `vec&lt;D, T, Q%gt;`\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_DECL mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e);\n\n\t/// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with absolute coordinates and a precomputed center of gravity `c`\n\t/// Dereferencing an iterator of type I must yield a `vec&lt;D, T, Q%gt;`\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_DECL mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e, vec<D, T, Q> const& c);\n\n\t/// Assuming the provided covariance matrix `covarMat` is symmetric and real-valued, this function find the `D` Eigenvalues of the matrix, and also provides the corresponding Eigenvectors.\n\t/// Note: the data in `outEigenvalues` and `outEigenvectors` are in matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\t/// This is a numeric implementation to find the Eigenvalues, using 'QL decomposition` (variant of QR decomposition: https://en.wikipedia.org/wiki/QR_decomposition).\n\t///\n\t/// @param[in] covarMat A symmetric, real-valued covariance matrix, e.g. computed from computeCovarianceMatrix\n\t/// @param[out] outEigenvalues Vector to receive the found eigenvalues\n\t/// @param[out] outEigenvectors Matrix to receive the found eigenvectors corresponding to the found eigenvalues, as column vectors\n\t/// @return The number of eigenvalues found, usually D if the precondition of the covariance matrix is met.\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_DECL unsigned int findEigenvaluesSymReal\n\t(\n\t\tmat<D, D, T, Q> const& covarMat,\n\t\tvec<D, T, Q>& outEigenvalues,\n\t\tmat<D, D, T, Q>& outEigenvectors\n\t);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors);\n\n\t/// @}\n}//namespace glm\n\n#include \"pca.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/pca.inl",
    "content": "/// @ref gtx_pca\n\n#ifndef GLM_HAS_CXX11_STL\n#include <algorithm>\n#else\n#include <utility>\n#endif\n\nnamespace glm {\n\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n)\n\t{\n\t\treturn computeCovarianceMatrix<D, T, Q, vec<D, T, Q> const*>(v, v + n);\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n, vec<D, T, Q> const& c)\n\t{\n\t\treturn computeCovarianceMatrix<D, T, Q, vec<D, T, Q> const*>(v, v + n, c);\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e)\n\t{\n\t\tglm::mat<D, D, T, Q> m(0);\n\n\t\tsize_t cnt = 0;\n\t\tfor(I i = b; i != e; i++)\n\t\t{\n\t\t\tvec<D, T, Q> const& v = *i;\n\t\t\tfor(length_t x = 0; x < D; ++x)\n\t\t\t\tfor(length_t y = 0; y < D; ++y)\n\t\t\t\t\tm[x][y] += static_cast<T>(v[x] * v[y]);\n\t\t\tcnt++;\n\t\t}\n\t\tif(cnt > 0)\n\t\t\tm /= static_cast<T>(cnt);\n\n\t\treturn m;\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e, vec<D, T, Q> const& c)\n\t{\n\t\tglm::mat<D, D, T, Q> m(0);\n\t\tglm::vec<D, T, Q> v;\n\n\t\tsize_t cnt = 0;\n\t\tfor(I i = b; i != e; i++)\n\t\t{\n\t\t\tv = *i - c;\n\t\t\tfor(length_t x = 0; x < D; ++x)\n\t\t\t\tfor(length_t y = 0; y < D; ++y)\n\t\t\t\t\tm[x][y] += static_cast<T>(v[x] * v[y]);\n\t\t\tcnt++;\n\t\t}\n\t\tif(cnt > 0)\n\t\t\tm /= static_cast<T>(cnt);\n\n\t\treturn m;\n\t}\n\n\tnamespace _internal_\n\t{\n\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER static T transferSign(T const& v, T const& s)\n\t\t{\n\t\t\treturn ((s) >= 0 ? glm::abs(v) : -glm::abs(v));\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER static T pythag(T const& a, T const& b) {\n\t\t\tstatic const T epsilon = static_cast<T>(0.0000001);\n\t\t\tT absa = glm::abs(a);\n\t\t\tT absb = glm::abs(b);\n\t\t\tif(absa > absb) {\n\t\t\t\tabsb /= absa;\n\t\t\t\tabsb *= absb;\n\t\t\t\treturn absa * glm::sqrt(static_cast<T>(1) + absb);\n\t\t\t}\n\t\t\tif(glm::equal<T>(absb, 0, epsilon)) return static_cast<T>(0);\n\t\t\tabsa /= absb;\n\t\t\tabsa *= absa;\n\t\t\treturn absb * glm::sqrt(static_cast<T>(1) + absa);\n\t\t}\n\n\t}\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER unsigned int findEigenvaluesSymReal\n\t(\n\t\tmat<D, D, T, Q> const& covarMat,\n\t\tvec<D, T, Q>& outEigenvalues,\n\t\tmat<D, D, T, Q>& outEigenvectors\n\t)\n\t{\n\t\tusing _internal_::transferSign;\n\t\tusing _internal_::pythag;\n\n\t\tT a[D * D]; // matrix -- input and workspace for algorithm (will be changed inplace)\n\t\tT d[D]; // diagonal elements\n\t\tT e[D]; // off-diagonal elements\n\n\t\tfor(length_t r = 0; r < D; r++)\n\t\t\tfor(length_t c = 0; c < D; c++)\n\t\t\t\ta[(r) * D + (c)] = covarMat[c][r];\n\n\t\t// 1. Householder reduction.\n\t\tlength_t l, k, j, i;\n\t\tT scale, hh, h, g, f;\n\t\tstatic const T epsilon = static_cast<T>(0.0000001);\n\n\t\tfor(i = D; i >= 2; i--)\n\t\t{\n\t\t\tl = i - 1;\n\t\t\th = scale = 0;\n\t\t\tif(l > 1)\n\t\t\t{\n\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t{\n\t\t\t\t\tscale += glm::abs(a[(i - 1) * D + (k - 1)]);\n\t\t\t\t}\n\t\t\t\tif(glm::equal<T>(scale, 0, epsilon))\n\t\t\t\t{\n\t\t\t\t\te[i - 1] = a[(i - 1) * D + (l - 1)];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(i - 1) * D + (k - 1)] /= scale;\n\t\t\t\t\t\th += a[(i - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t}\n\t\t\t\t\tf = a[(i - 1) * D + (l - 1)];\n\t\t\t\t\tg = ((f >= 0) ? -glm::sqrt(h) : glm::sqrt(h));\n\t\t\t\t\te[i - 1] = scale * g;\n\t\t\t\t\th -= f * g;\n\t\t\t\t\ta[(i - 1) * D + (l - 1)] = f - g;\n\t\t\t\t\tf = 0;\n\t\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] / h;\n\t\t\t\t\t\tg = 0;\n\t\t\t\t\t\tfor(k = 1; k <= j; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tg += a[(j - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(k = j + 1; k <= l; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tg += a[(k - 1) * D + (j - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\te[j - 1] = g / h;\n\t\t\t\t\t\tf += e[j - 1] * a[(i - 1) * D + (j - 1)];\n\t\t\t\t\t}\n\t\t\t\t\thh = f / (h + h);\n\t\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t\t{\n\t\t\t\t\t\tf = a[(i - 1) * D + (j - 1)];\n\t\t\t\t\t\te[j - 1] = g = e[j - 1] - hh * f;\n\t\t\t\t\t\tfor(k = 1; k <= j; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ta[(j - 1) * D + (k - 1)] -= (f * e[k - 1] + g * a[(i - 1) * D + (k - 1)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\te[i - 1] = a[(i - 1) * D + (l - 1)];\n\t\t\t}\n\t\t\td[i - 1] = h;\n\t\t}\n\t\td[0] = 0;\n\t\te[0] = 0;\n\t\tfor(i = 1; i <= D; i++)\n\t\t{\n\t\t\tl = i - 1;\n\t\t\tif(!glm::equal<T>(d[i - 1], 0, epsilon))\n\t\t\t{\n\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t{\n\t\t\t\t\tg = 0;\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tg += a[(i - 1) * D + (k - 1)] * a[(k - 1) * D + (j - 1)];\n\t\t\t\t\t}\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(k - 1) * D + (j - 1)] -= g * a[(k - 1) * D + (i - 1)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\td[i - 1] = a[(i - 1) * D + (i - 1)];\n\t\t\ta[(i - 1) * D + (i - 1)] = 1;\n\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t{\n\t\t\t\ta[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// 2. Calculation of eigenvalues and eigenvectors (QL algorithm)\n\t\tlength_t m, iter;\n\t\tT s, r, p, dd, c, b;\n\t\tconst length_t MAX_ITER = 30;\n\n\t\tfor(i = 2; i <= D; i++)\n\t\t{\n\t\t\te[i - 2] = e[i - 1];\n\t\t}\n\t\te[D - 1] = 0;\n\n\t\tfor(l = 1; l <= D; l++)\n\t\t{\n\t\t\titer = 0;\n\t\t\tdo\n\t\t\t{\n\t\t\t\tfor(m = l; m <= D - 1; m++)\n\t\t\t\t{\n\t\t\t\t\tdd = glm::abs(d[m - 1]) + glm::abs(d[m - 1 + 1]);\n\t\t\t\t\tif(glm::equal<T>(glm::abs(e[m - 1]) + dd, dd, epsilon))\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(m != l)\n\t\t\t\t{\n\t\t\t\t\tif(iter++ == MAX_ITER)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn 0; // Too many iterations in FindEigenvalues\n\t\t\t\t\t}\n\t\t\t\t\tg = (d[l - 1 + 1] - d[l - 1]) / (2 * e[l - 1]);\n\t\t\t\t\tr = pythag<T>(g, 1);\n\t\t\t\t\tg = d[m - 1] - d[l - 1] + e[l - 1] / (g + transferSign(r, g));\n\t\t\t\t\ts = c = 1;\n\t\t\t\t\tp = 0;\n\t\t\t\t\tfor(i = m - 1; i >= l; i--)\n\t\t\t\t\t{\n\t\t\t\t\t\tf = s * e[i - 1];\n\t\t\t\t\t\tb = c * e[i - 1];\n\t\t\t\t\t\te[i - 1 + 1] = r = pythag(f, g);\n\t\t\t\t\t\tif(glm::equal<T>(r, 0, epsilon))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\td[i - 1 + 1] -= p;\n\t\t\t\t\t\t\te[m - 1] = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = f / r;\n\t\t\t\t\t\tc = g / r;\n\t\t\t\t\t\tg = d[i - 1 + 1] - p;\n\t\t\t\t\t\tr = (d[i - 1] - g) * s + 2 * c * b;\n\t\t\t\t\t\td[i - 1 + 1] = g + (p = s * r);\n\t\t\t\t\t\tg = c * r - b;\n\t\t\t\t\t\tfor(k = 1; k <= D; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tf = a[(k - 1) * D + (i - 1 + 1)];\n\t\t\t\t\t\t\ta[(k - 1) * D + (i - 1 + 1)] = s * a[(k - 1) * D + (i - 1)] + c * f;\n\t\t\t\t\t\t\ta[(k - 1) * D + (i - 1)] = c * a[(k - 1) * D + (i - 1)] - s * f;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(glm::equal<T>(r, 0, epsilon) && (i >= l))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\td[l - 1] -= p;\n\t\t\t\t\te[l - 1] = g;\n\t\t\t\t\te[m - 1] = 0;\n\t\t\t\t}\n\t\t\t} while(m != l);\n\t\t}\n\n\t\t// 3. output\n\t\tfor(i = 0; i < D; i++)\n\t\t\toutEigenvalues[i] = d[i];\n\t\tfor(i = 0; i < D; i++)\n\t\t\tfor(j = 0; j < D; j++)\n\t\t\t\toutEigenvectors[i][j] = a[(j) * D + (i)];\n\n\t\treturn D;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t\tif (eigenvalues[0] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[2]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[2]);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[2]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[3])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[3]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[3]);\n\t\t}\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t\tif (eigenvalues[2] < eigenvalues[3])\n\t\t{\n\t\t\tstd::swap(eigenvalues[2], eigenvalues[3]);\n\t\t\tstd::swap(eigenvectors[2], eigenvectors[3]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[2]);\n\t\t}\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/perpendicular.hpp",
    "content": "/// @ref gtx_perpendicular\n/// @file glm/gtx/perpendicular.hpp\n///\n/// @see core (dependence)\n/// @see gtx_projection (dependence)\n///\n/// @defgroup gtx_perpendicular GLM_GTX_perpendicular\n/// @ingroup gtx\n///\n/// Include <glm/gtx/perpendicular.hpp> to use the features of this extension.\n///\n/// Perpendicular of a vector from other one\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/projection.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_perpendicular 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_perpendicular extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_perpendicular\n\t/// @{\n\n\t//! Projects x a perpendicular axis of Normal.\n\t//! From GLM_GTX_perpendicular extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType perp(genType const& x, genType const& Normal);\n\n\t/// @}\n}//namespace glm\n\n#include \"perpendicular.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/perpendicular.inl",
    "content": "/// @ref gtx_perpendicular\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal)\n\t{\n\t\treturn x - proj(x, Normal);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/polar_coordinates.hpp",
    "content": "/// @ref gtx_polar_coordinates\n/// @file glm/gtx/polar_coordinates.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates\n/// @ingroup gtx\n///\n/// Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension.\n///\n/// Conversion from Euclidean space to polar space and revert.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_polar_coordinates 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_polar_coordinates extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_polar_coordinates\n\t/// @{\n\n\t/// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance.\n\t///\n\t/// @see gtx_polar_coordinates\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> polar(\n\t\tvec<3, T, Q> const& euclidean);\n\n\t/// Convert Polar to Euclidean coordinates.\n\t///\n\t/// @see gtx_polar_coordinates\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> euclidean(\n\t\tvec<2, T, Q> const& polar);\n\n\t/// @}\n}//namespace glm\n\n#include \"polar_coordinates.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/polar_coordinates.inl",
    "content": "/// @ref gtx_polar_coordinates\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> polar\n\t(\n\t\tvec<3, T, Q> const& euclidean\n\t)\n\t{\n\t\tT const Length(length(euclidean));\n\t\tvec<3, T, Q> const tmp(euclidean / Length);\n\t\tT const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z));\n\n\t\treturn vec<3, T, Q>(\n\t\t\tasin(tmp.y),\t// latitude\n\t\t\tatan(tmp.x, tmp.z),\t\t// longitude\n\t\t\txz_dist);\t\t\t\t// xz distance\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> euclidean\n\t(\n\t\tvec<2, T, Q> const& polar\n\t)\n\t{\n\t\tT const latitude(polar.x);\n\t\tT const longitude(polar.y);\n\n\t\treturn vec<3, T, Q>(\n\t\t\tcos(latitude) * sin(longitude),\n\t\t\tsin(latitude),\n\t\t\tcos(latitude) * cos(longitude));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/projection.hpp",
    "content": "/// @ref gtx_projection\n/// @file glm/gtx/projection.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_projection GLM_GTX_projection\n/// @ingroup gtx\n///\n/// Include <glm/gtx/projection.hpp> to use the features of this extension.\n///\n/// Projection of a vector to other one\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_projection 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_projection extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_projection\n\t/// @{\n\n\t/// Projects x on Normal.\n\t///\n\t/// @param[in] x A vector to project\n\t/// @param[in] Normal A normal that doesn't need to be of unit length.\n\t///\n\t/// @see gtx_projection\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType proj(genType const& x, genType const& Normal);\n\n\t/// @}\n}//namespace glm\n\n#include \"projection.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/projection.inl",
    "content": "/// @ref gtx_projection\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal)\n\t{\n\t\treturn glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/quaternion.hpp",
    "content": "/// @ref gtx_quaternion\n/// @file glm/gtx/quaternion.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_quaternion GLM_GTX_quaternion\n/// @ingroup gtx\n///\n/// Include <glm/gtx/quaternion.hpp> to use the features of this extension.\n///\n/// Extended quaternion types and functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../ext/quaternion_exponential.hpp\"\n#include \"../gtx/norm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_quaternion 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_quaternion extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_quaternion\n\t/// @{\n\n\t/// Create an identity quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> quat_identity();\n\n\t/// Compute a cross product between a quaternion and a vector.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> cross(\n\t\tqua<T, Q> const& q,\n\t\tvec<3, T, Q> const& v);\n\n\t//! Compute a cross product between a vector and a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> cross(\n\t\tvec<3, T, Q> const& v,\n\t\tqua<T, Q> const& q);\n\n\t//! Compute a point on a path according squad equation.\n\t//! q1 and q2 are control points; s1 and s2 are intermediate control points.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> squad(\n\t\tqua<T, Q> const& q1,\n\t\tqua<T, Q> const& q2,\n\t\tqua<T, Q> const& s1,\n\t\tqua<T, Q> const& s2,\n\t\tT const& h);\n\n\t//! Returns an intermediate control point for squad interpolation.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> intermediate(\n\t\tqua<T, Q> const& prev,\n\t\tqua<T, Q> const& curr,\n\t\tqua<T, Q> const& next);\n\n\t//! Returns quarternion square root.\n\t///\n\t/// @see gtx_quaternion\n\t//template<typename T, qualifier Q>\n\t//qua<T, Q> sqrt(\n\t//\tqua<T, Q> const& q);\n\n\t//! Rotates a 3 components vector by a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotate(\n\t\tqua<T, Q> const& q,\n\t\tvec<3, T, Q> const& v);\n\n\t/// Rotates a 4 components vector by a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotate(\n\t\tqua<T, Q> const& q,\n\t\tvec<4, T, Q> const& v);\n\n\t/// Extract the real component of a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T extractRealComponent(\n\t\tqua<T, Q> const& q);\n\n\t/// Converts a quaternion to a 3 * 3 matrix.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> toMat3(\n\t\tqua<T, Q> const& x){return mat3_cast(x);}\n\n\t/// Converts a quaternion to a 4 * 4 matrix.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> toMat4(\n\t\tqua<T, Q> const& x){return mat4_cast(x);}\n\n\t/// Converts a 3 * 3 matrix to a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> toQuat(\n\t\tmat<3, 3, T, Q> const& x){return quat_cast(x);}\n\n\t/// Converts a 4 * 4 matrix to a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> toQuat(\n\t\tmat<4, 4, T, Q> const& x){return quat_cast(x);}\n\n\t/// Quaternion interpolation using the rotation short path.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> shortMix(\n\t\tqua<T, Q> const& x,\n\t\tqua<T, Q> const& y,\n\t\tT const& a);\n\n\t/// Quaternion normalized linear interpolation.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> fastMix(\n\t\tqua<T, Q> const& x,\n\t\tqua<T, Q> const& y,\n\t\tT const& a);\n\n\t/// Compute the rotation between two vectors.\n\t/// @param orig vector, needs to be normalized\n\t/// @param dest vector, needs to be normalized\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotation(\n\t\tvec<3, T, Q> const& orig,\n\t\tvec<3, T, Q> const& dest);\n\n\t/// Returns the squared length of x.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR T length2(qua<T, Q> const& q);\n\n\t/// @}\n}//namespace glm\n\n#include \"quaternion.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/quaternion.inl",
    "content": "/// @ref gtx_quaternion\n\n#include <limits>\n#include \"../gtc/constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> quat_identity()\n\t{\n\t\treturn qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> squad\n\t(\n\t\tqua<T, Q> const& q1,\n\t\tqua<T, Q> const& q2,\n\t\tqua<T, Q> const& s1,\n\t\tqua<T, Q> const& s2,\n\t\tT const& h)\n\t{\n\t\treturn mix(mix(q1, q2, h), mix(s1, s2, h), static_cast<T>(2) * (static_cast<T>(1) - h) * h);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> intermediate\n\t(\n\t\tqua<T, Q> const& prev,\n\t\tqua<T, Q> const& curr,\n\t\tqua<T, Q> const& next\n\t)\n\t{\n\t\tqua<T, Q> invQuat = inverse(curr);\n\t\treturn exp((log(next * invQuat) + log(prev * invQuat)) / static_cast<T>(-4)) * curr;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T extractRealComponent(qua<T, Q> const& q)\n\t{\n\t\tT w = static_cast<T>(1) - q.x * q.x - q.y * q.y - q.z * q.z;\n\t\tif(w < T(0))\n\t\t\treturn T(0);\n\t\telse\n\t\t\treturn -sqrt(w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua<T, Q> const& q)\n\t{\n\t\treturn q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> shortMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\t{\n\t\tif(a <= static_cast<T>(0)) return x;\n\t\tif(a >= static_cast<T>(1)) return y;\n\n\t\tT fCos = dot(x, y);\n\t\tqua<T, Q> y2(y); //BUG!!! qua<T> y2;\n\t\tif(fCos < static_cast<T>(0))\n\t\t{\n\t\t\ty2 = -y;\n\t\t\tfCos = -fCos;\n\t\t}\n\n\t\t//if(fCos > 1.0f) // problem\n\t\tT k0, k1;\n\t\tif(fCos > (static_cast<T>(1) - epsilon<T>()))\n\t\t{\n\t\t\tk0 = static_cast<T>(1) - a;\n\t\t\tk1 = static_cast<T>(0) + a; //BUG!!! 1.0f + a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT fSin = sqrt(T(1) - fCos * fCos);\n\t\t\tT fAngle = atan(fSin, fCos);\n\t\t\tT fOneOverSin = static_cast<T>(1) / fSin;\n\t\t\tk0 = sin((static_cast<T>(1) - a) * fAngle) * fOneOverSin;\n\t\t\tk1 = sin((static_cast<T>(0) + a) * fAngle) * fOneOverSin;\n\t\t}\n\n\t\treturn qua<T, Q>(\n\t\t\tk0 * x.w + k1 * y2.w,\n\t\t\tk0 * x.x + k1 * y2.x,\n\t\t\tk0 * x.y + k1 * y2.y,\n\t\t\tk0 * x.z + k1 * y2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> fastMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\t{\n\t\treturn glm::normalize(x * (static_cast<T>(1) - a) + (y * a));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest)\n\t{\n\t\tT cosTheta = dot(orig, dest);\n\t\tvec<3, T, Q> rotationAxis;\n\n\t\tif(cosTheta >= static_cast<T>(1) - epsilon<T>()) {\n\t\t\t// orig and dest point in the same direction\n\t\t\treturn quat_identity<T,Q>();\n\t\t}\n\n\t\tif(cosTheta < static_cast<T>(-1) + epsilon<T>())\n\t\t{\n\t\t\t// special case when vectors in opposite directions :\n\t\t\t// there is no \"ideal\" rotation axis\n\t\t\t// So guess one; any will do as long as it's perpendicular to start\n\t\t\t// This implementation favors a rotation around the Up axis (Y),\n\t\t\t// since it's often what you want to do.\n\t\t\trotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig);\n\t\t\tif(length2(rotationAxis) < epsilon<T>()) // bad luck, they were parallel, try again!\n\t\t\t\trotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig);\n\n\t\t\trotationAxis = normalize(rotationAxis);\n\t\t\treturn angleAxis(pi<T>(), rotationAxis);\n\t\t}\n\n\t\t// Implementation from Stan Melax's Game Programming Gems 1 article\n\t\trotationAxis = cross(orig, dest);\n\n\t\tT s = sqrt((T(1) + cosTheta) * static_cast<T>(2));\n\t\tT invs = static_cast<T>(1) / s;\n\n\t\treturn qua<T, Q>(\n\t\t\ts * static_cast<T>(0.5f),\n\t\t\trotationAxis.x * invs,\n\t\t\trotationAxis.y * invs,\n\t\t\trotationAxis.z * invs);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/range.hpp",
    "content": "/// @ref gtx_range\n/// @file glm/gtx/range.hpp\n/// @author Joshua Moerman\n///\n/// @defgroup gtx_range GLM_GTX_range\n/// @ingroup gtx\n///\n/// Include <glm/gtx/range.hpp> to use the features of this extension.\n///\n/// Defines begin and end for vectors and matrices. Useful for range-based for loop.\n/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements).\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_range 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_range extension included\")\n#\tendif\n#endif\n\n#include \"../gtc/type_ptr.hpp\"\n#include \"../gtc/vec1.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtx_range\n\t/// @{\n\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma warning(push)\n#\t\tpragma warning(disable : 4100) // unreferenced formal parameter\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<1, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<2, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<3, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<4, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename genType>\n\tinline length_t components(genType const& m)\n\t{\n\t\treturn m.length() * m[0].length();\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type const * begin(genType const& v)\n\t{\n\t\treturn value_ptr(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type const * end(genType const& v)\n\t{\n\t\treturn begin(v) + components(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type * begin(genType& v)\n\t{\n\t\treturn value_ptr(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type * end(genType& v)\n\t{\n\t\treturn begin(v) + components(v);\n\t}\n\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma warning(pop)\n#\tendif\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/raw_data.hpp",
    "content": "/// @ref gtx_raw_data\n/// @file glm/gtx/raw_data.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_raw_data GLM_GTX_raw_data\n/// @ingroup gtx\n///\n/// Include <glm/gtx/raw_data.hpp> to use the features of this extension.\n///\n/// Projection of a vector to other one\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_raw_data 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_raw_data extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_raw_data\n\t/// @{\n\n\t//! Type for byte numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint8\t\tbyte;\n\n\t//! Type for word numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint16\t\tword;\n\n\t//! Type for dword numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint32\t\tdword;\n\n\t//! Type for qword numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint64\t\tqword;\n\n\t/// @}\n}// namespace glm\n\n#include \"raw_data.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/raw_data.inl",
    "content": "/// @ref gtx_raw_data\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/rotate_normalized_axis.hpp",
    "content": "/// @ref gtx_rotate_normalized_axis\n/// @file glm/gtx/rotate_normalized_axis.hpp\n///\n/// @see core (dependence)\n/// @see gtc_matrix_transform\n/// @see gtc_quaternion\n///\n/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis\n/// @ingroup gtx\n///\n/// Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension.\n///\n/// Quaternions and matrices rotations around normalized axis.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_normalized_axis 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_normalized_axis extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_rotate_normalized_axis\n\t/// @{\n\n\t/// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.\n\t///\n\t/// @param m Input matrix multiplied by this rotation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\t/// @param axis Rotation axis, must be normalized.\n\t/// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double.\n\t///\n\t/// @see gtx_rotate_normalized_axis\n\t/// @see - rotate(T angle, T x, T y, T z)\n\t/// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)\n\t/// @see - rotate(T angle, vec<3, T, Q> const& v)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis(\n\t\tmat<4, 4, T, Q> const& m,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& axis);\n\n\t/// Rotates a quaternion from a vector of 3 components normalized axis and an angle.\n\t///\n\t/// @param q Source orientation\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Normalized axis of the rotation, must be normalized.\n\t///\n\t/// @see gtx_rotate_normalized_axis\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotateNormalizedAxis(\n\t\tqua<T, Q> const& q,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& axis);\n\n\t/// @}\n}//namespace glm\n\n#include \"rotate_normalized_axis.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/rotate_normalized_axis.inl",
    "content": "/// @ref gtx_rotate_normalized_axis\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis\n\t(\n\t\tmat<4, 4, T, Q> const& m,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tvec<3, T, Q> const axis(v);\n\n\t\tvec<3, T, Q> const temp((static_cast<T>(1) - c) * axis);\n\n\t\tmat<4, 4, T, Q> Rotate;\n\t\tRotate[0][0] = c + temp[0] * axis[0];\n\t\tRotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];\n\t\tRotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];\n\n\t\tRotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];\n\t\tRotate[1][1] = c + temp[1] * axis[1];\n\t\tRotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];\n\n\t\tRotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];\n\t\tRotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];\n\t\tRotate[2][2] = c + temp[2] * axis[2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t\tResult[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t\tResult[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotateNormalizedAxis\n\t(\n\t\tqua<T, Q> const& q,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tvec<3, T, Q> const Tmp(v);\n\n\t\tT const AngleRad(angle);\n\t\tT const Sin = sin(AngleRad * T(0.5));\n\n\t\treturn q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);\n\t\t//return gtc::quaternion::cross(q, tquat<T, Q>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/rotate_vector.hpp",
    "content": "/// @ref gtx_rotate_vector\n/// @file glm/gtx/rotate_vector.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform (dependence)\n///\n/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector\n/// @ingroup gtx\n///\n/// Include <glm/gtx/rotate_vector.hpp> to use the features of this extension.\n///\n/// Function to directly rotate a vector\n\n#pragma once\n\n// Dependency:\n#include \"../gtx/transform.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_vector 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_vector extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_rotate_vector\n\t/// @{\n\n\t/// Returns Spherical interpolation between two vectors\n\t///\n\t/// @param x A first vector\n\t/// @param y A second vector\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @see gtx_rotate_vector\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> slerp(\n\t\tvec<3, T, Q> const& x,\n\t\tvec<3, T, Q> const& y,\n\t\tT const& a);\n\n\t//! Rotate a two dimensional vector.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> rotate(\n\t\tvec<2, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around an axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotate(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Rotate a four dimensional vector around an axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotate(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Rotate a three dimensional vector around the X axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateX(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around the Y axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateY(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around the Z axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateZ(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the X axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateX(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the Y axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateY(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the Z axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateZ(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Build a rotation matrix from a normal and a up vector.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> orientation(\n\t\tvec<3, T, Q> const& Normal,\n\t\tvec<3, T, Q> const& Up);\n\n\t/// @}\n}//namespace glm\n\n#include \"rotate_vector.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/rotate_vector.inl",
    "content": "/// @ref gtx_rotate_vector\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> slerp\n\t(\n\t\tvec<3, T, Q> const& x,\n\t\tvec<3, T, Q> const& y,\n\t\tT const& a\n\t)\n\t{\n\t\t// get cosine of angle between vectors (-1 -> 1)\n\t\tT CosAlpha = dot(x, y);\n\t\t// get angle (0 -> pi)\n\t\tT Alpha = acos(CosAlpha);\n\t\t// get sine of angle between vectors (0 -> 1)\n\t\tT SinAlpha = sin(Alpha);\n\t\t// this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi\n\t\tT t1 = sin((static_cast<T>(1) - a) * Alpha) / SinAlpha;\n\t\tT t2 = sin(a * Alpha) / SinAlpha;\n\n\t\t// interpolate src vectors\n\t\treturn x * t1 + y * t2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> rotate\n\t(\n\t\tvec<2, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<2, T, Q> Result;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotate\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v;\n\t}\n\t/*\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX(\n\t\tconst vec<3, T, Q>& x,\n\t\tT angle,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tconst T Cos = cos(radians(angle));\n\t\tconst T Sin = sin(radians(angle));\n\t\treturn x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin;\n\t}\n\t*/\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotate\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn rotate(angle, normal) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateX\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result(v);\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.y = v.y * Cos - v.z * Sin;\n\t\tResult.z = v.y * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateY\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x =  v.x * Cos + v.z * Sin;\n\t\tResult.z = -v.x * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateX\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.y = v.y * Cos - v.z * Sin;\n\t\tResult.z = v.y * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateY\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x =  v.x * Cos + v.z * Sin;\n\t\tResult.z = -v.x * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation\n\t(\n\t\tvec<3, T, Q> const& Normal,\n\t\tvec<3, T, Q> const& Up\n\t)\n\t{\n\t\tif(all(equal(Normal, Up, epsilon<T>())))\n\t\t\treturn mat<4, 4, T, Q>(static_cast<T>(1));\n\n\t\tvec<3, T, Q> RotationAxis = cross(Up, Normal);\n\t\tT Angle = acos(dot(Normal, Up));\n\n\t\treturn rotate(Angle, RotationAxis);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/scalar_multiplication.hpp",
    "content": "/// @ref gtx_scalar_multiplication\n/// @file glm/gtx/scalar_multiplication.hpp\n/// @author Joshua Moerman\n///\n/// @defgroup gtx_scalar_multiplication GLM_GTX_scalar_multiplication\n/// @ingroup gtx\n///\n/// Include <glm/gtx/scalar_multiplication.hpp> to use the features of this extension.\n///\n/// Enables scalar multiplication for all types\n///\n/// Since GLSL is very strict about types, the following (often used) combinations do not work:\n///    double * vec4\n///    int * vec4\n///    vec4 / int\n/// So we'll fix that! Of course \"float * vec4\" should remain the same (hence the enable_if magic)\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_scalar_multiplication 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_scalar_multiplication extension included\")\n#\tendif\n#endif\n\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../mat2x2.hpp\"\n#include <type_traits>\n\nnamespace glm\n{\n\t/// @addtogroup gtx_scalar_multiplication\n\t/// @{\n\n\ttemplate<typename T, typename Vec>\n\tusing return_type_scalar_multiplication = typename std::enable_if<\n\t\t!std::is_same<T, float>::value       // T may not be a float\n\t\t&& std::is_arithmetic<T>::value, Vec // But it may be an int or double (no vec3 or mat3, ...)\n\t>::type;\n\n#define GLM_IMPLEMENT_SCAL_MULT(Vec) \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator*(T const& s, Vec rh){ \\\n\t\treturn rh *= static_cast<float>(s); \\\n\t} \\\n\t \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator*(Vec lh, T const& s){ \\\n\t\treturn lh *= static_cast<float>(s); \\\n\t} \\\n\t \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator/(Vec lh, T const& s){ \\\n\t\treturn lh *= 1.0f / static_cast<float>(s); \\\n\t}\n\nGLM_IMPLEMENT_SCAL_MULT(vec2)\nGLM_IMPLEMENT_SCAL_MULT(vec3)\nGLM_IMPLEMENT_SCAL_MULT(vec4)\n\nGLM_IMPLEMENT_SCAL_MULT(mat2)\nGLM_IMPLEMENT_SCAL_MULT(mat2x3)\nGLM_IMPLEMENT_SCAL_MULT(mat2x4)\nGLM_IMPLEMENT_SCAL_MULT(mat3x2)\nGLM_IMPLEMENT_SCAL_MULT(mat3)\nGLM_IMPLEMENT_SCAL_MULT(mat3x4)\nGLM_IMPLEMENT_SCAL_MULT(mat4x2)\nGLM_IMPLEMENT_SCAL_MULT(mat4x3)\nGLM_IMPLEMENT_SCAL_MULT(mat4)\n\n#undef GLM_IMPLEMENT_SCAL_MULT\n\t/// @}\n} // namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/scalar_relational.hpp",
    "content": "/// @ref gtx_scalar_relational\n/// @file glm/gtx/scalar_relational.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational\n/// @ingroup gtx\n///\n/// Include <glm/gtx/scalar_relational.hpp> to use the features of this extension.\n///\n/// Extend a position from a source to a position at a defined length.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extend 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extend extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_scalar_relational\n\t/// @{\n\n\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/scalar_relational.inl",
    "content": "/// @ref gtx_scalar_relational\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool lessThan\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x < y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool lessThanEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x <= y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool greaterThan\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x > y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool greaterThanEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x >= y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool equal\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool notEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn !detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER bool any\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER bool all\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER bool not_\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn !x;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/spline.hpp",
    "content": "/// @ref gtx_spline\n/// @file glm/gtx/spline.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_spline GLM_GTX_spline\n/// @ingroup gtx\n///\n/// Include <glm/gtx/spline.hpp> to use the features of this extension.\n///\n/// Spline functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/optimum_pow.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_spline 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_spline extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_spline\n\t/// @{\n\n\t/// Return a point from a catmull rom curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType catmullRom(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s);\n\n\t/// Return a point from a hermite curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType hermite(\n\t\tgenType const& v1,\n\t\tgenType const& t1,\n\t\tgenType const& v2,\n\t\tgenType const& t2,\n\t\ttypename genType::value_type const& s);\n\n\t/// Return a point from a cubic curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cubic(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s);\n\n\t/// @}\n}//namespace glm\n\n#include \"spline.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/spline.inl",
    "content": "/// @ref gtx_spline\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType catmullRom\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\ttypename genType::value_type s2 = pow2(s);\n\t\ttypename genType::value_type s3 = pow3(s);\n\n\t\ttypename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s;\n\t\ttypename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2);\n\t\ttypename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s;\n\t\ttypename genType::value_type f4 = s3 - s2;\n\n\t\treturn (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2);\n\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType hermite\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& t1,\n\t\tgenType const& v2,\n\t\tgenType const& t2,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\ttypename genType::value_type s2 = pow2(s);\n\t\ttypename genType::value_type s3 = pow3(s);\n\n\t\ttypename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1);\n\t\ttypename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2;\n\t\ttypename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s;\n\t\ttypename genType::value_type f4 = s3 - s2;\n\n\t\treturn f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType cubic\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\treturn ((v1 * s + v2) * s + v3) * s + v4;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/std_based_type.hpp",
    "content": "/// @ref gtx_std_based_type\n/// @file glm/gtx/std_based_type.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_std_based_type GLM_GTX_std_based_type\n/// @ingroup gtx\n///\n/// Include <glm/gtx/std_based_type.hpp> to use the features of this extension.\n///\n/// Adds vector types based on STL value types.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include <cstdlib>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_std_based_type 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_std_based_type extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_std_based_type\n\t/// @{\n\n\t/// Vector type based of one std::size_t component.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<1, std::size_t, defaultp>\t\tsize1;\n\n\t/// Vector type based of two std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<2, std::size_t, defaultp>\t\tsize2;\n\n\t/// Vector type based of three std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<3, std::size_t, defaultp>\t\tsize3;\n\n\t/// Vector type based of four std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<4, std::size_t, defaultp>\t\tsize4;\n\n\t/// Vector type based of one std::size_t component.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<1, std::size_t, defaultp>\t\tsize1_t;\n\n\t/// Vector type based of two std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<2, std::size_t, defaultp>\t\tsize2_t;\n\n\t/// Vector type based of three std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<3, std::size_t, defaultp>\t\tsize3_t;\n\n\t/// Vector type based of four std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<4, std::size_t, defaultp>\t\tsize4_t;\n\n\t/// @}\n}//namespace glm\n\n#include \"std_based_type.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/std_based_type.inl",
    "content": "/// @ref gtx_std_based_type\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/string_cast.hpp",
    "content": "/// @ref gtx_string_cast\n/// @file glm/gtx/string_cast.hpp\n///\n/// @see core (dependence)\n/// @see gtx_integer (dependence)\n/// @see gtx_quaternion (dependence)\n///\n/// @defgroup gtx_string_cast GLM_GTX_string_cast\n/// @ingroup gtx\n///\n/// Include <glm/gtx/string_cast.hpp> to use the features of this extension.\n///\n/// Setup strings for GLM type values\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/type_precision.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n#include <string>\n#include <cmath>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_string_cast 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_string_cast extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_string_cast\n\t/// @{\n\n\t/// Create a string from a GLM vector or matrix typed variable.\n\t/// @see gtx_string_cast extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL std::string to_string(genType const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"string_cast.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/string_cast.inl",
    "content": "/// @ref gtx_string_cast\n\n#include <cstdarg>\n#include <cstdio>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tstruct cast\n\t{\n\t\ttypedef T value_type;\n\t};\n\n\ttemplate <>\n\tstruct cast<float>\n\t{\n\t\ttypedef double value_type;\n\t};\n\n\tGLM_FUNC_QUALIFIER std::string format(const char* msg, ...)\n\t{\n\t\tstd::size_t const STRING_BUFFER(4096);\n\t\tchar text[STRING_BUFFER];\n\t\tva_list list;\n\n\t\tif(msg == GLM_NULLPTR)\n\t\t\treturn std::string();\n\n\t\tva_start(list, msg);\n#\t\tif (GLM_COMPILER & GLM_COMPILER_VC)\n\t\t\tvsprintf_s(text, STRING_BUFFER, msg, list);\n#\t\telse//\n\t\t\tstd::vsprintf(text, msg, list);\n#\t\tendif//\n\t\tva_end(list);\n\n\t\treturn std::string(text);\n\t}\n\n\tstatic const char* LabelTrue = \"true\";\n\tstatic const char* LabelFalse = \"false\";\n\n\ttemplate<typename T, bool isFloat = false>\n\tstruct literal\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%d\";}\n\t};\n\n\ttemplate<typename T>\n\tstruct literal<T, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%f\";}\n\t};\n\n#\tif GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC\n\ttemplate<>\n\tstruct literal<uint64_t, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%lld\";}\n\t};\n\n\ttemplate<>\n\tstruct literal<int64_t, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%lld\";}\n\t};\n#\tendif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC\n\n\ttemplate<typename T>\n\tstruct prefix{};\n\n\ttemplate<>\n\tstruct prefix<float>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<double>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"d\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<bool>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"b\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint8_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u8\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int8_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i8\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint16_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u16\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int16_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i16\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint32_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int32_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint64_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u64\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int64_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i64\";}\n\t};\n\n\ttemplate<typename matType>\n\tstruct compute_to_string\n\t{};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<1, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec1(%s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<2, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec2(%s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<3, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec3(%s, %s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[2] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<4, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec4(%s, %s, %s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[2] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[3] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<1, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec1(%s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec2(%s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec3(%s, %s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec4(%s, %s, %s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3]));\n\t\t}\n\t};\n\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x2((%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x3((%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x2((%s, %s), (%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]), static_cast<typename cast<T>::value_type>(x[3][3]));\n\t\t}\n\t};\n\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<qua<T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(qua<T, Q> const& q)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%squat(%s, {%s, %s, %s})\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.z));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<tdualquat<T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(tdualquat<T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.z),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.z));\n\t\t}\n\t};\n\n}//namespace detail\n\ntemplate<class matType>\nGLM_FUNC_QUALIFIER std::string to_string(matType const& x)\n{\n\treturn detail::compute_to_string<matType>::call(x);\n}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/texture.hpp",
    "content": "/// @ref gtx_texture\n/// @file glm/gtx/texture.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_texture GLM_GTX_texture\n/// @ingroup gtx\n///\n/// Include <glm/gtx/texture.hpp> to use the features of this extension.\n///\n/// Wrapping mode of texture coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/integer.hpp\"\n#include \"../gtx/component_wise.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_texture 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_texture extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_texture\n\t/// @{\n\n\t/// Compute the number of mipmaps levels necessary to create a mipmap complete texture\n\t///\n\t/// @param Extent Extent of the texture base level mipmap\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate <length_t L, typename T, qualifier Q>\n\tT levels(vec<L, T, Q> const& Extent);\n\n\t/// @}\n}// namespace glm\n\n#include \"texture.inl\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/texture.inl",
    "content": "/// @ref gtx_texture\n\nnamespace glm\n{\n\ttemplate <length_t L, typename T, qualifier Q>\n\tinline T levels(vec<L, T, Q> const& Extent)\n\t{\n\t\treturn glm::log2(compMax(Extent)) + static_cast<T>(1);\n\t}\n\n\ttemplate <typename T>\n\tinline T levels(T Extent)\n\t{\n\t\treturn vec<1, T, defaultp>(Extent).x;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/transform.hpp",
    "content": "/// @ref gtx_transform\n/// @file glm/gtx/transform.hpp\n///\n/// @see core (dependence)\n/// @see gtc_matrix_transform (dependence)\n/// @see gtx_transform\n/// @see gtx_transform2\n///\n/// @defgroup gtx_transform GLM_GTX_transform\n/// @ingroup gtx\n///\n/// Include <glm/gtx/transform.hpp> to use the features of this extension.\n///\n/// Add transformation matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_transform 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_transform extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_transform\n\t/// @{\n\n\t/// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> translate(\n\t\tvec<3, T, Q> const& v);\n\n\t/// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotate(\n\t\tT angle,\n\t\tvec<3, T, Q> const& v);\n\n\t/// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scale(\n\t\tvec<3, T, Q> const& v);\n\n\t/// @}\n}// namespace glm\n\n#include \"transform.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/transform.inl",
    "content": "/// @ref gtx_transform\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v)\n\t{\n\t\treturn translate(mat<4, 4, T, Q>(static_cast<T>(1)), v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v)\n\t{\n\t\treturn rotate(mat<4, 4, T, Q>(static_cast<T>(1)), angle, v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v)\n\t{\n\t\treturn scale(mat<4, 4, T, Q>(static_cast<T>(1)), v);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/transform2.hpp",
    "content": "/// @ref gtx_transform2\n/// @file glm/gtx/transform2.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform (dependence)\n///\n/// @defgroup gtx_transform2 GLM_GTX_transform2\n/// @ingroup gtx\n///\n/// Include <glm/gtx/transform2.hpp> to use the features of this extension.\n///\n/// Add extra transformation matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_transform2 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_transform2 extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_transform2\n\t/// @{\n\n\t//! Transforms a matrix with a shearing on X axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y);\n\n\t//! Transforms a matrix with a shearing on Y axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x);\n\n\t//! Transforms a matrix with a shearing on X axis\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z);\n\n\t//! Transforms a matrix with a shearing on Y axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z);\n\n\t//! Transforms a matrix with a shearing on Z axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y);\n\n\t//template<typename T> GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle)\n\t// Identity + tan(angle) * cross(Normal, OnPlaneVector)     0\n\t// - dot(PointOnPlane, normal) * OnPlaneVector              1\n\n\t// Reflect functions seem to don't work\n\t//template<typename T> mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);}\t\t\t\t\t\t\t\t\t//!< \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)\n\t//template<typename T> mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);}\t\t\t\t\t\t\t\t\t//!< \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)\n\n\t//! Build planar projection matrix along normal axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal);\n\n\t//! Build planar projection matrix along normal axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal);\n\n\t//! Build a scale bias matrix.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias);\n\n\t//! Build a scale bias matrix.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias);\n\n\t/// @}\n}// namespace glm\n\n#include \"transform2.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/transform2.inl",
    "content": "/// @ref gtx_transform2\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s)\n\t{\n\t\tmat<3, 3, T, Q> r(1);\n\t\tr[1][0] = s;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s)\n\t{\n\t\tmat<3, 3, T, Q> r(1);\n\t\tr[0][1] = s;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[0][1] = s;\n\t\tr[0][2] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[1][0] = s;\n\t\tr[1][2] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[2][0] = s;\n\t\tr[2][1] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal)\n\t{\n\t\tmat<3, 3, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;\n\t\tr[0][1] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][0] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal)\n\t{\n\t\tmat<4, 4, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;\n\t\tr[0][1] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[0][2] = -static_cast<T>(2) * normal.x * normal.z;\n\n\t\tr[1][0] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;\n\t\tr[1][2] = -static_cast<T>(2) * normal.y * normal.z;\n\n\t\tr[2][0] = -static_cast<T>(2) * normal.x * normal.z;\n\t\tr[2][1] = -static_cast<T>(2) * normal.y * normal.z;\n\t\tr[2][2] = static_cast<T>(1) - static_cast<T>(2) * normal.z * normal.z;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D(\n\t\tconst mat<3, 3, T, Q>& m,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tmat<3, 3, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - normal.x * normal.x;\n\t\tr[0][1] = - normal.x * normal.y;\n\t\tr[1][0] = - normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - normal.y * normal.y;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D(\n\t\tconst mat<4, 4, T, Q>& m,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tmat<4, 4, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - normal.x * normal.x;\n\t\tr[0][1] = - normal.x * normal.y;\n\t\tr[0][2] = - normal.x * normal.z;\n\t\tr[1][0] = - normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - normal.y * normal.y;\n\t\tr[1][2] = - normal.y * normal.z;\n\t\tr[2][0] = - normal.x * normal.z;\n\t\tr[2][1] = - normal.y * normal.z;\n\t\tr[2][2] = static_cast<T>(1) - normal.z * normal.z;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias)\n\t{\n\t\tmat<4, 4, T, Q> result;\n\t\tresult[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast<T>(1));\n\t\tresult[0][0] = scale;\n\t\tresult[1][1] = scale;\n\t\tresult[2][2] = scale;\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias)\n\t{\n\t\treturn m * scaleBias<T, Q>(scale, bias);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/type_aligned.hpp",
    "content": "/// @ref gtx_type_aligned\n/// @file glm/gtx/type_aligned.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_type_aligned GLM_GTX_type_aligned\n/// @ingroup gtx\n///\n/// Include <glm/gtx/type_aligned.hpp> to use the features of this extension.\n///\n/// Defines aligned types.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/type_precision.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_type_aligned 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_type_aligned extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t///////////////////////////\n\t// Signed int vector types\n\n\t/// @addtogroup gtx_type_aligned\n\t/// @{\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8);\n\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8);\n\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8);\n\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4);\n\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8);\n\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16);\n\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32);\n\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8);\n\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8);\n\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8);\n\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4);\n\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8);\n\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16);\n\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32);\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4);\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4);\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4);\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8);\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8);\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16);\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16);\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16);\n\n\n\t/// Double-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8);\n\n\t/// Double-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16);\n\n\t/// Double-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32);\n\n\t/// Double-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32);\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8);\n\n\t/// Double-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16);\n\n\t/// Double-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32);\n\n\t/// Double-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1<f32> mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32> mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32> fmat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f32 fmat1x1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16);\n\n\t/// Single-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16);\n\n\t/// Single-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16);\n\n\t/// Single-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16);\n\n\t/// Single-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32, defaultp> f32mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f32 f32mat1x1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16);\n\n\t/// Single-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16);\n\n\t/// Single-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16);\n\n\t/// Single-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16);\n\n\t/// Single-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16);\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f64, defaultp> f64mat1;\n\n\t/// Double-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32);\n\n\t/// Double-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32);\n\n\t/// Double-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32);\n\n\n\t/// Double-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f64 f64mat1x1;\n\n\t/// Double-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32);\n\n\t/// Double-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32);\n\n\t/// Double-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32);\n\n\t/// Double-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32);\n\n\t/// Double-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32);\n\n\t/// Double-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32);\n\n\t/// Double-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32);\n\n\t/// Double-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32);\n\n\t/// Double-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t//////////////////////////\n\t// Quaternion types\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16);\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16);\n\n\t/// Double-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32);\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16);\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// @}\n}//namespace glm\n\n#include \"type_aligned.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/type_aligned.inl",
    "content": "/// @ref gtc_type_aligned\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/type_trait.hpp",
    "content": "/// @ref gtx_type_trait\n/// @file glm/gtx/type_trait.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_type_trait GLM_GTX_type_trait\n/// @ingroup gtx\n///\n/// Include <glm/gtx/type_trait.hpp> to use the features of this extension.\n///\n/// Defines traits for each type.\n\n#pragma once\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_type_trait 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_type_trait extension included\")\n#\tendif\n#endif\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtx_type_trait\n\t/// @{\n\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = 0;\n\t\tstatic length_t const cols = 0;\n\t\tstatic length_t const rows = 0;\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct type<vec<L, T, Q> >\n\t{\n\t\tstatic bool const is_vec = true;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = L;\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tstruct type<mat<C, R, T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = true;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = C;\n\t\tstatic length_t const cols = C;\n\t\tstatic length_t const rows = R;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct type<qua<T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = true;\n\t\tstatic length_t const components = 4;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct type<tdualquat<T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = true;\n\t\tstatic length_t const components = 8;\n\t};\n\n\t/// @}\n}//namespace glm\n\n#include \"type_trait.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/type_trait.inl",
    "content": "/// @ref gtx_type_trait\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tbool const type<T>::is_vec;\n\ttemplate<typename T>\n\tbool const type<T>::is_mat;\n\ttemplate<typename T>\n\tbool const type<T>::is_quat;\n\ttemplate<typename T>\n\tlength_t const type<T>::components;\n\ttemplate<typename T>\n\tlength_t const type<T>::cols;\n\ttemplate<typename T>\n\tlength_t const type<T>::rows;\n\n\t// vec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_vec;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_mat;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_quat;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tlength_t const type<vec<L, T, Q> >::components;\n\n\t// mat\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_vec;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_mat;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_quat;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::components;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::cols;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::rows;\n\n\t// tquat\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_vec;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_mat;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_quat;\n\ttemplate<typename T, qualifier Q>\n\tlength_t const type<qua<T, Q> >::components;\n\n\t// tdualquat\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_vec;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_mat;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_quat;\n\ttemplate<typename T, qualifier Q>\n\tlength_t const type<tdualquat<T, Q> >::components;\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/vec_swizzle.hpp",
    "content": "/// @ref gtx_vec_swizzle\n/// @file glm/gtx/vec_swizzle.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.\n///\n/// Functions to perform swizzle operation.\n\n#pragma once\n\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vec_swizzle 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vec_swizzle extension included\")\n#\tendif\n#endif\n\nnamespace glm {\n\t/// @addtogroup gtx_vec_swizzle\n\t/// @{\n\n\t// xx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\t// xy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\t// xz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.z);\n\t}\n\n\t// xw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.w);\n\t}\n\n\t// yx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\t// yy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\t// yz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.z);\n\t}\n\n\t// yw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.w);\n\t}\n\n\t// zx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.x);\n\t}\n\n\t// zy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.y);\n\t}\n\n\t// zz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.z);\n\t}\n\n\t// zw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.w);\n\t}\n\n\t// wx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.x);\n\t}\n\n\t// wy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.y);\n\t}\n\n\t// wz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.z);\n\t}\n\n\t// ww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.w);\n\t}\n\n\t// xxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\t// xxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\t// xxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.z);\n\t}\n\n\t// xxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.w);\n\t}\n\n\t// xyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\t// xyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\t// xyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.z);\n\t}\n\n\t// xyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.w);\n\t}\n\n\t// xzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.x);\n\t}\n\n\t// xzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.y);\n\t}\n\n\t// xzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.z);\n\t}\n\n\t// xzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.w);\n\t}\n\n\t// xwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.x);\n\t}\n\n\t// xwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.y);\n\t}\n\n\t// xwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.z);\n\t}\n\n\t// xww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.w);\n\t}\n\n\t// yxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\t// yxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\t// yxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.z);\n\t}\n\n\t// yxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.w);\n\t}\n\n\t// yyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\t// yyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\t// yyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.z);\n\t}\n\n\t// yyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.w);\n\t}\n\n\t// yzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.x);\n\t}\n\n\t// yzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.y);\n\t}\n\n\t// yzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.z);\n\t}\n\n\t// yzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.w);\n\t}\n\n\t// ywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.x);\n\t}\n\n\t// ywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.y);\n\t}\n\n\t// ywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.z);\n\t}\n\n\t// yww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.w);\n\t}\n\n\t// zxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.x);\n\t}\n\n\t// zxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.y);\n\t}\n\n\t// zxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.z);\n\t}\n\n\t// zxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.w);\n\t}\n\n\t// zyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.x);\n\t}\n\n\t// zyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.y);\n\t}\n\n\t// zyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.z);\n\t}\n\n\t// zyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.w);\n\t}\n\n\t// zzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.x);\n\t}\n\n\t// zzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.y);\n\t}\n\n\t// zzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.z);\n\t}\n\n\t// zzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.w);\n\t}\n\n\t// zwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.x);\n\t}\n\n\t// zwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.y);\n\t}\n\n\t// zwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.z);\n\t}\n\n\t// zww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.w);\n\t}\n\n\t// wxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.x);\n\t}\n\n\t// wxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.y);\n\t}\n\n\t// wxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.z);\n\t}\n\n\t// wxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.w);\n\t}\n\n\t// wyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.x);\n\t}\n\n\t// wyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.y);\n\t}\n\n\t// wyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.z);\n\t}\n\n\t// wyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.w);\n\t}\n\n\t// wzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.x);\n\t}\n\n\t// wzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.y);\n\t}\n\n\t// wzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.z);\n\t}\n\n\t// wzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.w);\n\t}\n\n\t// wwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.x);\n\t}\n\n\t// wwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.y);\n\t}\n\n\t// wwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.z);\n\t}\n\n\t// www\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.w);\n\t}\n\n\t// xxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\t// xxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\t// xxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);\n\t}\n\n\t// xxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);\n\t}\n\n\t// xxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\t// xxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\t// xxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);\n\t}\n\n\t// xxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);\n\t}\n\n\t// xxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);\n\t}\n\n\t// xxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);\n\t}\n\n\t// xxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);\n\t}\n\n\t// xxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);\n\t}\n\n\t// xxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);\n\t}\n\n\t// xxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);\n\t}\n\n\t// xxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);\n\t}\n\n\t// xxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);\n\t}\n\n\t// xyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\t// xyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\t// xyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);\n\t}\n\n\t// xyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);\n\t}\n\n\t// xyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\t// xyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\t// xyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);\n\t}\n\n\t// xyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);\n\t}\n\n\t// xyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);\n\t}\n\n\t// xyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);\n\t}\n\n\t// xyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);\n\t}\n\n\t// xyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);\n\t}\n\n\t// xywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);\n\t}\n\n\t// xywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);\n\t}\n\n\t// xywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);\n\t}\n\n\t// xyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);\n\t}\n\n\t// xzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);\n\t}\n\n\t// xzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);\n\t}\n\n\t// xzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);\n\t}\n\n\t// xzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);\n\t}\n\n\t// xzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);\n\t}\n\n\t// xzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);\n\t}\n\n\t// xzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);\n\t}\n\n\t// xzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);\n\t}\n\n\t// xzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);\n\t}\n\n\t// xzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);\n\t}\n\n\t// xzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);\n\t}\n\n\t// xzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);\n\t}\n\n\t// xzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);\n\t}\n\n\t// xzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);\n\t}\n\n\t// xzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);\n\t}\n\n\t// xzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);\n\t}\n\n\t// xwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);\n\t}\n\n\t// xwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);\n\t}\n\n\t// xwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);\n\t}\n\n\t// xwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);\n\t}\n\n\t// xwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);\n\t}\n\n\t// xwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);\n\t}\n\n\t// xwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);\n\t}\n\n\t// xwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);\n\t}\n\n\t// xwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);\n\t}\n\n\t// xwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);\n\t}\n\n\t// xwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);\n\t}\n\n\t// xwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);\n\t}\n\n\t// xwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);\n\t}\n\n\t// xwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);\n\t}\n\n\t// xwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);\n\t}\n\n\t// xwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);\n\t}\n\n\t// yxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\t// yxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\t// yxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);\n\t}\n\n\t// yxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);\n\t}\n\n\t// yxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\t// yxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\t// yxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);\n\t}\n\n\t// yxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);\n\t}\n\n\t// yxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);\n\t}\n\n\t// yxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);\n\t}\n\n\t// yxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);\n\t}\n\n\t// yxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);\n\t}\n\n\t// yxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);\n\t}\n\n\t// yxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);\n\t}\n\n\t// yxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);\n\t}\n\n\t// yxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);\n\t}\n\n\t// yyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\t// yyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\t// yyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);\n\t}\n\n\t// yyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);\n\t}\n\n\t// yyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\t// yyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\t// yyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);\n\t}\n\n\t// yyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);\n\t}\n\n\t// yyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);\n\t}\n\n\t// yyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);\n\t}\n\n\t// yyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);\n\t}\n\n\t// yyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);\n\t}\n\n\t// yywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);\n\t}\n\n\t// yywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);\n\t}\n\n\t// yywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);\n\t}\n\n\t// yyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);\n\t}\n\n\t// yzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);\n\t}\n\n\t// yzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);\n\t}\n\n\t// yzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);\n\t}\n\n\t// yzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);\n\t}\n\n\t// yzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);\n\t}\n\n\t// yzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);\n\t}\n\n\t// yzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);\n\t}\n\n\t// yzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);\n\t}\n\n\t// yzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);\n\t}\n\n\t// yzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);\n\t}\n\n\t// yzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);\n\t}\n\n\t// yzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);\n\t}\n\n\t// yzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);\n\t}\n\n\t// yzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);\n\t}\n\n\t// yzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);\n\t}\n\n\t// yzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);\n\t}\n\n\t// ywxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);\n\t}\n\n\t// ywxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);\n\t}\n\n\t// ywxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);\n\t}\n\n\t// ywxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);\n\t}\n\n\t// ywyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);\n\t}\n\n\t// ywyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);\n\t}\n\n\t// ywyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);\n\t}\n\n\t// ywyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);\n\t}\n\n\t// ywzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);\n\t}\n\n\t// ywzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);\n\t}\n\n\t// ywzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);\n\t}\n\n\t// ywzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);\n\t}\n\n\t// ywwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);\n\t}\n\n\t// ywwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);\n\t}\n\n\t// ywwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);\n\t}\n\n\t// ywww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);\n\t}\n\n\t// zxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);\n\t}\n\n\t// zxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);\n\t}\n\n\t// zxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);\n\t}\n\n\t// zxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);\n\t}\n\n\t// zxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);\n\t}\n\n\t// zxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);\n\t}\n\n\t// zxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);\n\t}\n\n\t// zxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);\n\t}\n\n\t// zxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);\n\t}\n\n\t// zxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);\n\t}\n\n\t// zxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);\n\t}\n\n\t// zxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);\n\t}\n\n\t// zxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);\n\t}\n\n\t// zxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);\n\t}\n\n\t// zxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);\n\t}\n\n\t// zxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);\n\t}\n\n\t// zyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);\n\t}\n\n\t// zyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);\n\t}\n\n\t// zyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);\n\t}\n\n\t// zyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);\n\t}\n\n\t// zyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);\n\t}\n\n\t// zyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);\n\t}\n\n\t// zyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);\n\t}\n\n\t// zyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);\n\t}\n\n\t// zyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);\n\t}\n\n\t// zyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);\n\t}\n\n\t// zyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);\n\t}\n\n\t// zyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);\n\t}\n\n\t// zywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);\n\t}\n\n\t// zywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);\n\t}\n\n\t// zywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);\n\t}\n\n\t// zyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);\n\t}\n\n\t// zzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);\n\t}\n\n\t// zzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);\n\t}\n\n\t// zzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);\n\t}\n\n\t// zzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);\n\t}\n\n\t// zzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);\n\t}\n\n\t// zzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);\n\t}\n\n\t// zzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);\n\t}\n\n\t// zzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);\n\t}\n\n\t// zzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);\n\t}\n\n\t// zzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);\n\t}\n\n\t// zzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);\n\t}\n\n\t// zzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);\n\t}\n\n\t// zzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);\n\t}\n\n\t// zzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);\n\t}\n\n\t// zzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);\n\t}\n\n\t// zzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);\n\t}\n\n\t// zwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);\n\t}\n\n\t// zwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);\n\t}\n\n\t// zwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);\n\t}\n\n\t// zwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);\n\t}\n\n\t// zwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);\n\t}\n\n\t// zwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);\n\t}\n\n\t// zwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);\n\t}\n\n\t// zwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);\n\t}\n\n\t// zwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);\n\t}\n\n\t// zwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);\n\t}\n\n\t// zwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);\n\t}\n\n\t// zwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);\n\t}\n\n\t// zwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);\n\t}\n\n\t// zwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);\n\t}\n\n\t// zwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);\n\t}\n\n\t// zwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);\n\t}\n\n\t// wxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);\n\t}\n\n\t// wxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);\n\t}\n\n\t// wxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);\n\t}\n\n\t// wxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);\n\t}\n\n\t// wxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);\n\t}\n\n\t// wxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);\n\t}\n\n\t// wxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);\n\t}\n\n\t// wxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);\n\t}\n\n\t// wxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);\n\t}\n\n\t// wxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);\n\t}\n\n\t// wxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);\n\t}\n\n\t// wxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);\n\t}\n\n\t// wxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);\n\t}\n\n\t// wxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);\n\t}\n\n\t// wxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);\n\t}\n\n\t// wxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);\n\t}\n\n\t// wyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);\n\t}\n\n\t// wyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);\n\t}\n\n\t// wyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);\n\t}\n\n\t// wyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);\n\t}\n\n\t// wyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);\n\t}\n\n\t// wyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);\n\t}\n\n\t// wyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);\n\t}\n\n\t// wyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);\n\t}\n\n\t// wyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);\n\t}\n\n\t// wyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);\n\t}\n\n\t// wyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);\n\t}\n\n\t// wyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);\n\t}\n\n\t// wywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);\n\t}\n\n\t// wywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);\n\t}\n\n\t// wywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);\n\t}\n\n\t// wyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);\n\t}\n\n\t// wzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);\n\t}\n\n\t// wzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);\n\t}\n\n\t// wzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);\n\t}\n\n\t// wzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);\n\t}\n\n\t// wzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);\n\t}\n\n\t// wzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);\n\t}\n\n\t// wzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);\n\t}\n\n\t// wzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);\n\t}\n\n\t// wzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);\n\t}\n\n\t// wzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);\n\t}\n\n\t// wzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);\n\t}\n\n\t// wzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);\n\t}\n\n\t// wzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);\n\t}\n\n\t// wzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);\n\t}\n\n\t// wzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);\n\t}\n\n\t// wzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);\n\t}\n\n\t// wwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);\n\t}\n\n\t// wwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);\n\t}\n\n\t// wwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);\n\t}\n\n\t// wwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);\n\t}\n\n\t// wwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);\n\t}\n\n\t// wwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);\n\t}\n\n\t// wwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);\n\t}\n\n\t// wwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);\n\t}\n\n\t// wwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);\n\t}\n\n\t// wwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);\n\t}\n\n\t// wwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);\n\t}\n\n\t// wwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);\n\t}\n\n\t// wwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);\n\t}\n\n\t// wwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);\n\t}\n\n\t// wwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);\n\t}\n\n\t// wwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);\n\t}\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/vector_angle.hpp",
    "content": "/// @ref gtx_vector_angle\n/// @file glm/gtx/vector_angle.hpp\n///\n/// @see core (dependence)\n/// @see gtx_quaternion (dependence)\n/// @see gtx_epsilon (dependence)\n///\n/// @defgroup gtx_vector_angle GLM_GTX_vector_angle\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vector_angle.hpp> to use the features of this extension.\n///\n/// Compute angle between vectors\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtx/quaternion.hpp\"\n#include \"../gtx/rotate_vector.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vector_angle 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vector_angle extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_vector_angle\n\t/// @{\n\n\t//! Returns the absolute angle between two vectors.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t//! Returns the oriented angle between two 2d vectors.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y);\n\n\t//! Returns the oriented angle between two 3d vectors based from a reference axis.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref);\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_angle.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/vector_angle.inl",
    "content": "/// @ref gtx_vector_angle\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType angle\n\t(\n\t\tgenType const& x,\n\t\tgenType const& y\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'angle' only accept floating-point inputs\");\n\t\treturn acos(clamp(dot(x, y), genType(-1), genType(1)));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'angle' only accept floating-point inputs\");\n\t\treturn acos(clamp(dot(x, y), T(-1), T(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'orientedAngle' only accept floating-point inputs\");\n\t\tT const Angle(acos(clamp(dot(x, y), T(-1), T(1))));\n\n\t\tT const partialCross = x.x * y.y - y.x * x.y;\n\n\t\tif (partialCross > T(0))\n\t\t\treturn Angle;\n\t\telse\n\t\t\treturn -Angle;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'orientedAngle' only accept floating-point inputs\");\n\n\t\tT const Angle(acos(clamp(dot(x, y), T(-1), T(1))));\n\t\treturn mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/vector_query.hpp",
    "content": "/// @ref gtx_vector_query\n/// @file glm/gtx/vector_query.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_vector_query GLM_GTX_vector_query\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vector_query.hpp> to use the features of this extension.\n///\n/// Query information of vector types\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include <cfloat>\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vector_query 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vector_query extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_vector_query\n\t/// @{\n\n\t//! Check whether two vectors are collinears.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t//! Check whether two vectors are orthogonals.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t//! Check whether a vector is normalized.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether a vector is null.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether a each component of a vector is null.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether two vectors are orthonormal.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_query.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/vector_query.inl",
    "content": "/// @ref gtx_vector_query\n\n#include <cassert>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_areCollinear{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(vec<3, T, Q>(v0, static_cast<T>(0)), vec<3, T, Q>(v1, static_cast<T>(0)))) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(v0, v1)) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_isCompNull{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<2, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<3, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon),\n\t\t\t\t(abs(v.z) < epsilon));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<4, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon),\n\t\t\t\t(abs(v.z) < epsilon),\n\t\t\t\t(abs(v.w) < epsilon));\n\t\t}\n\t};\n\n}//namespace detail\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'areCollinear' only accept floating-point inputs\");\n\n\t\treturn detail::compute_areCollinear<L, T, Q>::call(v0, v1, epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'areOrthogonal' only accept floating-point inputs\");\n\n\t\treturn abs(dot(v0, v1)) <= max(\n\t\t\tstatic_cast<T>(1),\n\t\t\tlength(v0)) * max(static_cast<T>(1), length(v1)) * epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isNormalized' only accept floating-point inputs\");\n\n\t\treturn abs(length(v) - static_cast<T>(1)) <= static_cast<T>(2) * epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isNull' only accept floating-point inputs\");\n\n\t\treturn length(v) <= epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isCompNull' only accept floating-point inputs\");\n\n\t\treturn detail::compute_isCompNull<L, T, Q>::call(v, epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<2, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<3, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon,\n\t\t\tabs(v.z) < epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<4, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon,\n\t\t\tabs(v.z) < epsilon,\n\t\t\tabs(v.w) < epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\treturn isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/wrap.hpp",
    "content": "/// @ref gtx_wrap\n/// @file glm/gtx/wrap.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_wrap GLM_GTX_wrap\n/// @ingroup gtx\n///\n/// Include <glm/gtx/wrap.hpp> to use the features of this extension.\n///\n/// Wrapping mode of texture coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/scalar_common.hpp\"\n#include \"../ext/vector_common.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_wrap 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.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_wrap extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_wrap\n\t/// @{\n\n\t/// @}\n}// namespace glm\n\n#include \"wrap.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/gtx/wrap.inl",
    "content": "/// @ref gtx_wrap\n\nnamespace glm\n{\n\n}//namespace glm\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/integer.hpp",
    "content": "/// @ref core\n/// @file glm/integer.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n///\n/// @defgroup core_func_integer Integer functions\n/// @ingroup core\n///\n/// Provides GLSL functions on integer types\n///\n/// These all operate component-wise. The description is per component.\n/// The notation [a, b] means the set of bits from bit-number a through bit-number\n/// b, inclusive. The lowest-order bit is bit 0.\n///\n/// Include <glm/integer.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"common.hpp\"\n#include \"vector_relational.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_integer\n\t/// @{\n\n\t/// Adds 32-bit unsigned integer x and y, returning the sum\n\t/// modulo pow(2, 32). The value carry is set to 0 if the sum was\n\t/// less than pow(2, 32), or to 1 otherwise.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml\">GLSL uaddCarry man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> uaddCarry(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & carry);\n\n\t/// Subtracts the 32-bit unsigned integer y from x, returning\n\t/// the difference if non-negative, or pow(2, 32) plus the difference\n\t/// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml\">GLSL usubBorrow man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> usubBorrow(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & borrow);\n\n\t/// Multiplies 32-bit integers x and y, producing a 64-bit\n\t/// result. The 32 least-significant bits are returned in lsb.\n\t/// The 32 most-significant bits are returned in msb.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml\">GLSL umulExtended man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL void umulExtended(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & msb,\n\t\tvec<L, uint, Q> & lsb);\n\n\t/// Multiplies 32-bit integers x and y, producing a 64-bit\n\t/// result. The 32 least-significant bits are returned in lsb.\n\t/// The 32 most-significant bits are returned in msb.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml\">GLSL imulExtended man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL void imulExtended(\n\t\tvec<L, int, Q> const& x,\n\t\tvec<L, int, Q> const& y,\n\t\tvec<L, int, Q> & msb,\n\t\tvec<L, int, Q> & lsb);\n\n\t/// Extracts bits [offset, offset + bits - 1] from value,\n\t/// returning them in the least significant bits of the result.\n\t/// For unsigned data types, the most significant bits of the\n\t/// result will be set to zero. For signed data types, the\n\t/// most significant bits will be set to the value of bit offset + base - 1.\n\t///\n\t/// If bits is zero, the result will be zero. The result will be\n\t/// undefined if offset or bits is negative, or if the sum of\n\t/// offset and bits is greater than the number of bits used\n\t/// to store the operand.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml\">GLSL bitfieldExtract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldExtract(\n\t\tvec<L, T, Q> const& Value,\n\t\tint Offset,\n\t\tint Bits);\n\n\t/// Returns the insertion the bits least-significant bits of insert into base.\n\t///\n\t/// The result will have bits [offset, offset + bits - 1] taken\n\t/// from bits [0, bits - 1] of insert, and all other bits taken\n\t/// directly from the corresponding bits of base. If bits is\n\t/// zero, the result will simply be base. The result will be\n\t/// undefined if offset or bits is negative, or if the sum of\n\t/// offset and bits is greater than the number of bits used to\n\t/// store the operand.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml\">GLSL bitfieldInsert man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldInsert(\n\t\tvec<L, T, Q> const& Base,\n\t\tvec<L, T, Q> const& Insert,\n\t\tint Offset,\n\t\tint Bits);\n\n\t/// Returns the reversal of the bits of value.\n\t/// The bit numbered n of the result will be taken from bit (bits - 1) - n of value,\n\t/// where bits is the total number of bits used to represent value.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml\">GLSL bitfieldReverse man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v);\n\n\t/// Returns the number of bits set to 1 in the binary representation of value.\n\t///\n\t/// @tparam genType Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL int bitCount(genType v);\n\n\t/// Returns the number of bits set to 1 in the binary representation of value.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> bitCount(vec<L, T, Q> const& v);\n\n\t/// Returns the bit number of the least significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value is zero, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findLSB(genIUType x);\n\n\t/// Returns the bit number of the least significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value is zero, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findLSB(vec<L, T, Q> const& v);\n\n\t/// Returns the bit number of the most significant bit in the binary representation of value.\n\t/// For positive integers, the result will be the bit number of the most significant bit set to 1.\n\t/// For negative integers, the result will be the bit number of the most significant\n\t/// bit set to 0. For a value of zero or negative one, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findMSB(genIUType x);\n\n\t/// Returns the bit number of the most significant bit in the binary representation of value.\n\t/// For positive integers, the result will be the bit number of the most significant bit set to 1.\n\t/// For negative integers, the result will be the bit number of the most significant\n\t/// bit set to 0. For a value of zero or negative one, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findMSB(vec<L, T, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_integer.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat2x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x2.hpp\"\n#include \"./ext/matrix_double2x2_precision.hpp\"\n#include \"./ext/matrix_float2x2.hpp\"\n#include \"./ext/matrix_float2x2_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat2x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x3.hpp\"\n#include \"./ext/matrix_double2x3_precision.hpp\"\n#include \"./ext/matrix_float2x3.hpp\"\n#include \"./ext/matrix_float2x3_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat2x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x4.hpp\"\n#include \"./ext/matrix_double2x4_precision.hpp\"\n#include \"./ext/matrix_float2x4.hpp\"\n#include \"./ext/matrix_float2x4_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat3x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x2.hpp\"\n#include \"./ext/matrix_double3x2_precision.hpp\"\n#include \"./ext/matrix_float3x2.hpp\"\n#include \"./ext/matrix_float3x2_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat3x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x3.hpp\"\n#include \"./ext/matrix_double3x3_precision.hpp\"\n#include \"./ext/matrix_float3x3.hpp\"\n#include \"./ext/matrix_float3x3_precision.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat3x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x4.hpp\"\n#include \"./ext/matrix_double3x4_precision.hpp\"\n#include \"./ext/matrix_float3x4.hpp\"\n#include \"./ext/matrix_float3x4_precision.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat4x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x2.hpp\"\n#include \"./ext/matrix_double4x2_precision.hpp\"\n#include \"./ext/matrix_float4x2.hpp\"\n#include \"./ext/matrix_float4x2_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat4x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x3.hpp\"\n#include \"./ext/matrix_double4x3_precision.hpp\"\n#include \"./ext/matrix_float4x3.hpp\"\n#include \"./ext/matrix_float4x3_precision.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/mat4x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x4.hpp\"\n#include \"./ext/matrix_double4x4_precision.hpp\"\n#include \"./ext/matrix_float4x4.hpp\"\n#include \"./ext/matrix_float4x4_precision.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/matrix.hpp",
    "content": "/// @ref core\n/// @file glm/matrix.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n///\n/// @defgroup core_func_matrix Matrix functions\n/// @ingroup core\n///\n/// Provides GLSL matrix functions.\n///\n/// Include <glm/matrix.hpp> to use these core features.\n\n#pragma once\n\n// Dependencies\n#include \"detail/qualifier.hpp\"\n#include \"detail/setup.hpp\"\n#include \"vec2.hpp\"\n#include \"vec3.hpp\"\n#include \"vec4.hpp\"\n#include \"mat2x2.hpp\"\n#include \"mat2x3.hpp\"\n#include \"mat2x4.hpp\"\n#include \"mat3x2.hpp\"\n#include \"mat3x3.hpp\"\n#include \"mat3x4.hpp\"\n#include \"mat4x2.hpp\"\n#include \"mat4x3.hpp\"\n#include \"mat4x4.hpp\"\n\nnamespace glm {\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tstruct outerProduct_trait{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 4, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 4, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 4, T, Q> type;\n\t};\n}//namespace detail\n\n\t /// @addtogroup core_func_matrix\n\t /// @{\n\n\t /// Multiply matrix x by matrix y component-wise, i.e.,\n\t /// result[i][j] is the scalar product of x[i][j] and y[i][j].\n\t ///\n\t /// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t /// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t /// @tparam T Floating-point scalar types\n\t /// @tparam Q Value from qualifier enum\n\t ///\n\t /// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a>\n\t /// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Treats the first parameter c as a column vector\n\t/// and the second parameter r as a row vector\n\t/// and does a linear algebraic matrix multiply c * r.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r);\n\n\t/// Returns the transposed matrix of x\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x);\n\n\t/// Return the determinant of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m);\n\n\t/// Return the inverse of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml\">GLSL inverse man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_matrix.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/packing.hpp",
    "content": "/// @ref core\n/// @file glm/packing.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n/// @see gtc_packing\n///\n/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions\n/// @ingroup core\n///\n/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.\n///\n/// These functions do not operate component-wise, rather as described in each case.\n///\n/// Include <glm/packing.hpp> to use these core features.\n\n#pragma once\n\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_packing\n\t/// @{\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml\">GLSL packUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packUnorm2x16(vec2 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml\">GLSL packSnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packSnorm2x16(vec2 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm4x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packUnorm4x8(vec4 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm4x8:\tround(clamp(c, -1, +1) * 127.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packSnorm4x8(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm2x16: f / 65535.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackUnorm2x16(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm2x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackSnorm2x16(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackUnorm4x8(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm4x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackSnorm4x8(uint p);\n\n\t/// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.\n\t/// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.\n\t/// Otherwise, the bit- level representation of v is preserved.\n\t/// The first vector component specifies the 32 least significant bits;\n\t/// the second component specifies the 32 most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml\">GLSL packDouble2x32 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL double packDouble2x32(uvec2 const& v);\n\n\t/// Returns a two-component unsigned integer vector representation of v.\n\t/// The bit-level representation of v is preserved.\n\t/// The first component of the vector contains the 32 least significant bits of the double;\n\t/// the second component consists the 32 most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml\">GLSL unpackDouble2x32 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uvec2 unpackDouble2x32(double v);\n\n\t/// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing these two 16- bit integers into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the second component specifies the 16 most-significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packHalf2x16(vec2 const& v);\n\n\t/// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values,\n\t/// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,\n\t/// and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the second component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackHalf2x16(uint v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_packing.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/common.h",
    "content": "/// @ref simd\n/// @file glm/simd/common.h\n\n#pragma once\n\n#include \"platform.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_add_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_add_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_sub_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_sub_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_mul_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_mul_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_div_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_div_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn glm_vec4_mul(a, _mm_rcp_ps(b));\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\t\treturn _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0));\n#\telse\n\t\treturn _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0));\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c)\n{\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t\treturn _mm_fmadd_ss(a, b, c);\n#\telse\n\t\treturn _mm_add_ss(_mm_mul_ss(a, b), c);\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c)\n{\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t\treturn _mm_fmadd_ps(a, b, c);\n#\telse\n\t\treturn glm_vec4_add(glm_vec4_mul(a, b), c);\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x)\n{\n\treturn _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF)));\n}\n\nGLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSSE3_BIT\n\t\treturn _mm_sign_epi32(x, x);\n#\telse\n\t\tglm_ivec4 const sgn0 = _mm_srai_epi32(x, 31);\n\t\tglm_ivec4 const inv0 = _mm_xor_si128(x, sgn0);\n\t\tglm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0);\n\t\treturn sub0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x)\n{\n\tglm_vec4 const zro0 = _mm_setzero_ps();\n\tglm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0);\n\tglm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0);\n\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f));\n\tglm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f));\n\tglm_vec4 const or0 = _mm_or_ps(and0, and1);\n\treturn or0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT);\n#\telse\n\t\tglm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000)));\n\t\tglm_vec4 const and0 = _mm_and_ps(sgn0, x);\n\t\tglm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));\n\t\tglm_vec4 const add0 = glm_vec4_add(x, or0);\n\t\tglm_vec4 const sub0 = glm_vec4_sub(add0, or0);\n\t\treturn sub0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_floor_ps(x);\n#\telse\n\t\tglm_vec4 const rnd0 = glm_vec4_round(x);\n\t\tglm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0);\n\t\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));\n\t\tglm_vec4 const sub0 = glm_vec4_sub(rnd0, and0);\n\t\treturn sub0;\n#\tendif\n}\n\n/* trunc TODO\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x)\n{\n\treturn glm_vec4();\n}\n*/\n\n//roundEven\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x)\n{\n\tglm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000)));\n\tglm_vec4 const and0 = _mm_and_ps(sgn0, x);\n\tglm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));\n\tglm_vec4 const add0 = glm_vec4_add(x, or0);\n\tglm_vec4 const sub0 = glm_vec4_sub(add0, or0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_ceil_ps(x);\n#\telse\n\t\tglm_vec4 const rnd0 = glm_vec4_round(x);\n\t\tglm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0);\n\t\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));\n\t\tglm_vec4 const add0 = glm_vec4_add(rnd0, and0);\n\t\treturn add0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x)\n{\n\tglm_vec4 const flr0 = glm_vec4_floor(x);\n\tglm_vec4 const sub0 = glm_vec4_sub(x, flr0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y)\n{\n\tglm_vec4 const div0 = glm_vec4_div(x, y);\n\tglm_vec4 const flr0 = glm_vec4_floor(div0);\n\tglm_vec4 const mul0 = glm_vec4_mul(y, flr0);\n\tglm_vec4 const sub0 = glm_vec4_sub(x, mul0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal)\n{\n\tglm_vec4 const min0 = _mm_min_ps(v, maxVal);\n\tglm_vec4 const max0 = _mm_max_ps(min0, minVal);\n\treturn max0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a)\n{\n\tglm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a);\n\tglm_vec4 const mul0 = glm_vec4_mul(v1, sub0);\n\tglm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0);\n\treturn mad0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x)\n{\n\tglm_vec4 const cmp = _mm_cmple_ps(x, edge);\n\treturn _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps();\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x)\n{\n\tglm_vec4 const sub0 = glm_vec4_sub(x, edge0);\n\tglm_vec4 const sub1 = glm_vec4_sub(edge1, edge0);\n\tglm_vec4 const div0 = glm_vec4_sub(sub0, sub1);\n\tglm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f));\n\tglm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0);\n\tglm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0);\n\tglm_vec4 const mul1 = glm_vec4_mul(clp0, clp0);\n\tglm_vec4 const mul2 = glm_vec4_mul(mul1, sub2);\n\treturn mul2;\n}\n\n// Agner Fog method\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x)\n{\n\tglm_ivec4 const t1 = _mm_castps_si128(x);\t\t\t\t\t\t// reinterpret as 32-bit integer\n\tglm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1));\t// shift out sign bit\n\tglm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000));\t\t\t\t// exponent mask\n\tglm_ivec4 const t4 = _mm_and_si128(t2, t3);\t\t\t\t\t\t// exponent\n\tglm_ivec4 const t5 = _mm_andnot_si128(t3, t2);\t\t\t\t\t// fraction\n\tglm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4);\n\tglm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128());\n\tglm_ivec4 const And = _mm_and_si128(Equal, Nequal);\n\treturn _mm_castsi128_ps(And);\t\t\t\t\t\t\t\t\t// exponent = all 1s and fraction != 0\n}\n\n// Agner Fog method\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x)\n{\n\tglm_ivec4 const t1 = _mm_castps_si128(x);\t\t\t\t\t\t\t\t\t\t// reinterpret as 32-bit integer\n\tglm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1));\t\t\t\t\t// shift out sign bit\n\treturn _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000))));\t\t// exponent is all 1s, fraction is 0\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/exponential.h",
    "content": "/// @ref simd\n/// @file glm/simd/experimental.h\n\n#pragma once\n\n#include \"platform.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x)\n{\n\treturn _mm_mul_ss(_mm_rsqrt_ss(x), x);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x)\n{\n\treturn _mm_mul_ps(_mm_rsqrt_ps(x), x);\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/geometric.h",
    "content": "/// @ref simd\n/// @file glm/simd/geometric.h\n\n#pragma once\n\n#include \"common.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2);\nGLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2);\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(x, x);\n\tglm_vec4 const sqt0 = _mm_sqrt_ps(dot0);\n\treturn sqt0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1)\n{\n\tglm_vec4 const sub0 = _mm_sub_ps(p0, p1);\n\tglm_vec4 const len0 = glm_vec4_length(sub0);\n\treturn len0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\treturn _mm_dp_ps(v1, v2, 0xff);\n#\telif GLM_ARCH & GLM_ARCH_SSE3_BIT\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0);\n\t\tglm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0);\n\t\treturn hadd1;\n#\telse\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));\n\t\tglm_vec4 const add0 = _mm_add_ps(mul0, swp0);\n\t\tglm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));\n\t\tglm_vec4 const add1 = _mm_add_ps(add0, swp1);\n\t\treturn add1;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\treturn _mm_dp_ps(v1, v2, 0xff);\n#\telif GLM_ARCH & GLM_ARCH_SSE3_BIT\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const had0 = _mm_hadd_ps(mul0, mul0);\n\t\tglm_vec4 const had1 = _mm_hadd_ps(had0, had0);\n\t\treturn had1;\n#\telse\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0);\n\t\tglm_vec4 const add0 = _mm_add_ps(mov0, mul0);\n\t\tglm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1);\n\t\tglm_vec4 const add1 = _mm_add_ss(add0, swp1);\n\t\treturn add1;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2)\n{\n\tglm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));\n\tglm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));\n\tglm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));\n\tglm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));\n\tglm_vec4 const mul0 = _mm_mul_ps(swp0, swp3);\n\tglm_vec4 const mul1 = _mm_mul_ps(swp1, swp2);\n\tglm_vec4 const sub0 = _mm_sub_ps(mul0, mul1);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(v, v);\n\tglm_vec4 const isr0 = _mm_rsqrt_ps(dot0);\n\tglm_vec4 const mul0 = _mm_mul_ps(v, isr0);\n\treturn mul0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(Nref, I);\n\tglm_vec4 const sgn0 = glm_vec4_sign(dot0);\n\tglm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f));\n\tglm_vec4 const mul1 = _mm_mul_ps(N, mul0);\n\treturn mul1;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(N, I);\n\tglm_vec4 const mul0 = _mm_mul_ps(N, dot0);\n\tglm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f));\n\tglm_vec4 const sub0 = _mm_sub_ps(I, mul1);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(N, I);\n\tglm_vec4 const mul0 = _mm_mul_ps(eta, eta);\n\tglm_vec4 const mul1 = _mm_mul_ps(dot0, dot0);\n\tglm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0);\n\tglm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1);\n\tglm_vec4 const mul2 = _mm_mul_ps(sub0, sub1);\n\n\tif(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0)\n\t\treturn _mm_set1_ps(0.0f);\n\n\tglm_vec4 const sqt0 = _mm_sqrt_ps(mul2);\n\tglm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0);\n\tglm_vec4 const mul4 = _mm_mul_ps(mad0, N);\n\tglm_vec4 const mul5 = _mm_mul_ps(eta, I);\n\tglm_vec4 const sub2 = _mm_sub_ps(mul5, mul4);\n\n\treturn sub2;\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/integer.h",
    "content": "/// @ref simd\n/// @file glm/simd/integer.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x)\n{\n\tglm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\tglm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\tglm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\tglm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);\n\tglm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);\n\n\tglm_uvec4 Reg1;\n\tglm_uvec4 Reg2;\n\n\t// REG1 = x;\n\t// REG2 = y;\n\t//Reg1 = _mm_unpacklo_epi64(x, y);\n\tReg1 = x;\n\n\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\tReg2 = _mm_slli_si128(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\tReg2 = _mm_slli_si128(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\tReg2 = _mm_slli_epi32(Reg1, 4);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\tReg2 = _mm_slli_epi32(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t//return REG1 | (REG2 << 1);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg2 = _mm_srli_si128(Reg2, 8);\n\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\treturn Reg1;\n}\n\nGLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y)\n{\n\tglm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\tglm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\tglm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\tglm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);\n\tglm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);\n\n\tglm_uvec4 Reg1;\n\tglm_uvec4 Reg2;\n\n\t// REG1 = x;\n\t// REG2 = y;\n\tReg1 = _mm_unpacklo_epi64(x, y);\n\n\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\tReg2 = _mm_slli_si128(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\tReg2 = _mm_slli_si128(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\tReg2 = _mm_slli_epi32(Reg1, 4);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\tReg2 = _mm_slli_epi32(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t//return REG1 | (REG2 << 1);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg2 = _mm_srli_si128(Reg2, 8);\n\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\treturn Reg1;\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/matrix.h",
    "content": "/// @ref simd\n/// @file glm/simd/matrix.h\n\n#pragma once\n\n#include \"geometric.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_mul_ps(in1[0], in2[0]);\n\tout[1] = _mm_mul_ps(in1[1], in2[1]);\n\tout[2] = _mm_mul_ps(in1[2], in2[2]);\n\tout[3] = _mm_mul_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_add_ps(in1[0], in2[0]);\n\tout[1] = _mm_add_ps(in1[1], in2[1]);\n\tout[2] = _mm_add_ps(in1[2], in2[2]);\n\tout[3] = _mm_add_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_sub_ps(in1[0], in2[0]);\n\tout[1] = _mm_sub_ps(in1[1], in2[1]);\n\tout[2] = _mm_sub_ps(in1[2], in2[2]);\n\tout[3] = _mm_sub_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v)\n{\n\t__m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));\n\n\t__m128 m0 = _mm_mul_ps(m[0], v0);\n\t__m128 m1 = _mm_mul_ps(m[1], v1);\n\t__m128 m2 = _mm_mul_ps(m[2], v2);\n\t__m128 m3 = _mm_mul_ps(m[3], v3);\n\n\t__m128 a0 = _mm_add_ps(m0, m1);\n\t__m128 a1 = _mm_add_ps(m2, m3);\n\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\treturn a2;\n}\n\nGLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4])\n{\n\t__m128 i0 = m[0];\n\t__m128 i1 = m[1];\n\t__m128 i2 = m[2];\n\t__m128 i3 = m[3];\n\n\t__m128 m0 = _mm_mul_ps(v, i0);\n\t__m128 m1 = _mm_mul_ps(v, i1);\n\t__m128 m2 = _mm_mul_ps(v, i2);\n\t__m128 m3 = _mm_mul_ps(v, i3);\n\n\t__m128 u0 = _mm_unpacklo_ps(m0, m1);\n\t__m128 u1 = _mm_unpackhi_ps(m0, m1);\n\t__m128 a0 = _mm_add_ps(u0, u1);\n\n\t__m128 u2 = _mm_unpacklo_ps(m2, m3);\n\t__m128 u3 = _mm_unpackhi_ps(m2, m3);\n\t__m128 a1 = _mm_add_ps(u2, u3);\n\n\t__m128 f0 = _mm_movelh_ps(a0, a1);\n\t__m128 f1 = _mm_movehl_ps(a1, a0);\n\t__m128 f2 = _mm_add_ps(f0, f1);\n\n\treturn f2;\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[0] = a2;\n\t}\n\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[1] = a2;\n\t}\n\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[2] = a2;\n\t}\n\n\t{\n\t\t//(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3))\n\t\t__m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[3] = a2;\n\t}\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44);\n\t__m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE);\n\t__m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44);\n\t__m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE);\n\n\tout[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88);\n\tout[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD);\n\tout[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88);\n\tout[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\treturn Det0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4])\n{\n\t// _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(\n\n\t//T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t//T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t//T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t//T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t//T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t//T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t// First 2 columns\n \t__m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2)));\n \t__m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3)));\n\t__m128 MulA = _mm_mul_ps(Swp2A, Swp3A);\n\n\t// Second 2 columns\n\t__m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3)));\n\t__m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2)));\n\t__m128 MulB = _mm_mul_ps(Swp2B, Swp3B);\n\n\t// Columns subtraction\n\t__m128 SubE = _mm_sub_ps(MulA, MulB);\n\n\t// Last 2 rows\n\t__m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2)));\n\t__m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0)));\n\t__m128 MulC = _mm_mul_ps(Swp2C, Swp3C);\n\t__m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);\n\n\t//vec<4, T, Q> DetCof(\n\t//\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t//\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t//\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t//\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t__m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0)));\n\t__m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1)));\n\t__m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);\n\n\t__m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));\n\t__m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1];\n\t__m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2)));\n\t__m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);\n\n\t__m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);\n\n\t__m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));\n\t__m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0)));\n\t__m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3)));\n\t__m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);\n\n\t__m128 AddRes = _mm_add_ps(SubRes, MulFacC);\n\t__m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));\n\n\t//return m[0][0] * DetCof[0]\n\t//\t + m[0][1] * DetCof[1]\n\t//\t + m[0][2] * DetCof[2]\n\t//\t + m[0][3] * DetCof[3];\n\n\treturn glm_vec4_dot(m[0], DetCof);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4])\n{\n\t// _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add)\n\n\t//T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t//T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t//T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t//T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t//T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t//T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t// First 2 columns\n \t__m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2));\n \t__m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3));\n\t__m128 MulA = _mm_mul_ps(Swp2A, Swp3A);\n\n\t// Second 2 columns\n\t__m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3));\n\t__m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2));\n\t__m128 MulB = _mm_mul_ps(Swp2B, Swp3B);\n\n\t// Columns subtraction\n\t__m128 SubE = _mm_sub_ps(MulA, MulB);\n\n\t// Last 2 rows\n\t__m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2));\n\t__m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0));\n\t__m128 MulC = _mm_mul_ps(Swp2C, Swp3C);\n\t__m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);\n\n\t//vec<4, T, Q> DetCof(\n\t//\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t//\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t//\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t//\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t__m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0));\n\t__m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1));\n\t__m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);\n\n\t__m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));\n\t__m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1];\n\t__m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2));\n\t__m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);\n\n\t__m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);\n\n\t__m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));\n\t__m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0));\n\t__m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3));\n\t__m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);\n\n\t__m128 AddRes = _mm_add_ps(SubRes, MulFacC);\n\t__m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));\n\n\t//return m[0][0] * DetCof[0]\n\t//\t + m[0][1] * DetCof[1]\n\t//\t + m[0][2] * DetCof[2]\n\t//\t + m[0][3] * DetCof[3];\n\n\treturn glm_vec4_dot(m[0], DetCof);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\t__m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0);\n\t//__m128 Rcp0 = _mm_rcp_ps(Det0);\n\n\t//\tInverse /= Determinant;\n\tout[0] = _mm_mul_ps(Inv0, Rcp0);\n\tout[1] = _mm_mul_ps(Inv1, Rcp0);\n\tout[2] = _mm_mul_ps(Inv2, Rcp0);\n\tout[3] = _mm_mul_ps(Inv3, Rcp0);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\t__m128 Rcp0 = _mm_rcp_ps(Det0);\n\t//__m128 Rcp0 = _mm_div_ps(one, Det0);\n\t//\tInverse /= Determinant;\n\tout[0] = _mm_mul_ps(Inv0, Rcp0);\n\tout[1] = _mm_mul_ps(Inv1, Rcp0);\n\tout[2] = _mm_mul_ps(Inv2, Rcp0);\n\tout[3] = _mm_mul_ps(Inv3, Rcp0);\n}\n/*\nGLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4])\n{\n\tfloat a = glm::radians(Angle);\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\n\tglm::vec4 AxisA(v[0], v[1], v[2], float(0));\n\t__m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x);\n\t__m128 AxisC = detail::sse_nrm_ps(AxisB);\n\n\t__m128 Cos0 = _mm_set_ss(c);\n\t__m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Sin0 = _mm_set_ss(s);\n\t__m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0));\n\n\t// vec<3, T, Q> temp = (valType(1) - c) * axis;\n\t__m128 Temp0 = _mm_sub_ps(one, CosA);\n\t__m128 Temp1 = _mm_mul_ps(Temp0, AxisC);\n\n\t//Rotate[0][0] = c + temp[0] * axis[0];\n\t//Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];\n\t//Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];\n\t__m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 TmpA0 = _mm_mul_ps(Axis0, AxisC);\n\t__m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0));\n\t__m128 TmpA1 = _mm_add_ps(CosA0, TmpA0);\n\t__m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f);\n\t__m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3));\n\t__m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2);\n\t__m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3);\n\n\t//Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];\n\t//Rotate[1][1] = c + temp[1] * axis[1];\n\t//Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];\n\t__m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 TmpB0 = _mm_mul_ps(Axis1, AxisC);\n\t__m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1));\n\t__m128 TmpB1 = _mm_add_ps(CosA1, TmpB0);\n\t__m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f);\n\t__m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2));\n\t__m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2);\n\t__m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3);\n\n\t//Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];\n\t//Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];\n\t//Rotate[2][2] = c + temp[2] * axis[2];\n\t__m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 TmpC0 = _mm_mul_ps(Axis2, AxisC);\n\t__m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1));\n\t__m128 TmpC1 = _mm_add_ps(CosA2, TmpC0);\n\t__m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f);\n\t__m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1));\n\t__m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2);\n\t__m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3);\n\n\t__m128 Result[4];\n\tResult[0] = TmpA4;\n\tResult[1] = TmpB4;\n\tResult[2] = TmpC4;\n\tResult[3] = _mm_set_ps(1, 0, 0, 0);\n\n\t//mat<4, 4, valType> Result;\n\t//Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t//Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t//Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t//Result[3] = m[3];\n\t//return Result;\n\tsse_mul_ps(in, Result, out);\n}\n*/\nGLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4])\n{\n\tout[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0)));\n\tout[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1)));\n\tout[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2)));\n\tout[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3)));\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/neon.h",
    "content": "/// @ref simd_neon\n/// @file glm/simd/neon.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\n#include <arm_neon.h>\n\nnamespace glm {\n\tnamespace neon {\n\t\tstatic inline float32x4_t dupq_lane(float32x4_t vsrc, int lane) {\n\t\t\tswitch(lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\t\tcase 0: return vdupq_laneq_f32(vsrc, 0);\n\t\t\t\tcase 1: return vdupq_laneq_f32(vsrc, 1);\n\t\t\t\tcase 2: return vdupq_laneq_f32(vsrc, 2);\n\t\t\t\tcase 3: return vdupq_laneq_f32(vsrc, 3);\n#else\n\t\t\t\tcase 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0));\n\t\t\t\tcase 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1));\n\t\t\t\tcase 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2));\n\t\t\t\tcase 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3));\n#endif\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x2_t dup_lane(float32x4_t vsrc, int lane) {\n\t\t\tswitch(lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\t\tcase 0: return vdup_laneq_f32(vsrc, 0);\n\t\t\t\tcase 1: return vdup_laneq_f32(vsrc, 1);\n\t\t\t\tcase 2: return vdup_laneq_f32(vsrc, 2);\n\t\t\t\tcase 3: return vdup_laneq_f32(vsrc, 3);\n#else\n\t\t\t\tcase 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0));\n\t\t\t\tcase 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1));\n\t\t\t\tcase 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2));\n\t\t\t\tcase 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3));\n#endif\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdup_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tswitch(dlane) {\n\t\t\t\tcase 0:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 1:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 2:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n#else\n\n\t\t\tfloat l;\n\t\t\tswitch(slane) {\n\t\t\t\tcase 0: l = vgetq_lane_f32(vsrc, 0); break;\n\t\t\t\tcase 1: l = vgetq_lane_f32(vsrc, 1); break;\n\t\t\t\tcase 2: l = vgetq_lane_f32(vsrc, 2); break;\n\t\t\t\tcase 3: l = vgetq_lane_f32(vsrc, 3); break;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tswitch(dlane) {\n\t\t\t\tcase 0: return vsetq_lane_f32(l, vdst, 0);\n\t\t\t\tcase 1: return vsetq_lane_f32(l, vdst, 1);\n\t\t\t\tcase 2: return vsetq_lane_f32(l, vdst, 2);\n\t\t\t\tcase 3: return vsetq_lane_f32(l, vdst, 3);\n\t\t\t}\n#endif\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tswitch(lane) { \n\t\t\t\tcase 0: return vmulq_laneq_f32(v, vlane, 0); break;\n\t\t\t\tcase 1: return vmulq_laneq_f32(v, vlane, 1); break;\n\t\t\t\tcase 2: return vmulq_laneq_f32(v, vlane, 2); break;\n\t\t\t\tcase 3: return vmulq_laneq_f32(v, vlane, 3); break;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n#else\n\t\t\treturn vmulq_f32(v, dupq_lane(vlane, lane));\n#endif\n\t\t}\n\n\t\tstatic inline float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n#ifdef GLM_CONFIG_FORCE_FMA\n#\tdefine FMADD_LANE(acc, x, y, L) do { asm volatile (\"fmla %0.4s, %1.4s, %2.4s\" : \"+w\"(acc) : \"w\"(x), \"w\"(dup_lane(y, L))); } while(0)\n#else\n#\tdefine FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0)\n#endif\n\n\t\t\tswitch(lane) { \n\t\t\t\tcase 0: \n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 0);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 1:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 1);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 2:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 2);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 3:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 3);\n\t\t\t\t\treturn acc;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n#\tundef FMADD_LANE\n#else\n\t\t\treturn vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane)));\n#endif\n\t\t}\n\t} //namespace neon\n} // namespace glm\n#endif // GLM_ARCH & GLM_ARCH_NEON_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/packing.h",
    "content": "/// @ref simd\n/// @file glm/simd/packing.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/platform.h",
    "content": "#pragma once\n\n///////////////////////////////////////////////////////////////////////////////////\n// Platform\n\n#define GLM_PLATFORM_UNKNOWN\t\t0x00000000\n#define GLM_PLATFORM_WINDOWS\t\t0x00010000\n#define GLM_PLATFORM_LINUX\t\t\t0x00020000\n#define GLM_PLATFORM_APPLE\t\t\t0x00040000\n//#define GLM_PLATFORM_IOS\t\t\t0x00080000\n#define GLM_PLATFORM_ANDROID\t\t0x00100000\n#define GLM_PLATFORM_CHROME_NACL\t0x00200000\n#define GLM_PLATFORM_UNIX\t\t\t0x00400000\n#define GLM_PLATFORM_QNXNTO\t\t\t0x00800000\n#define GLM_PLATFORM_WINCE\t\t\t0x01000000\n#define GLM_PLATFORM_CYGWIN\t\t\t0x02000000\n\n#ifdef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNKNOWN\n#elif defined(__CYGWIN__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_CYGWIN\n#elif defined(__QNXNTO__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_QNXNTO\n#elif defined(__APPLE__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_APPLE\n#elif defined(WINCE)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_WINCE\n#elif defined(_WIN32)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_WINDOWS\n#elif defined(__native_client__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_CHROME_NACL\n#elif defined(__ANDROID__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_ANDROID\n#elif defined(__linux)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_LINUX\n#elif defined(__unix)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNIX\n#else\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNKNOWN\n#endif//\n\n///////////////////////////////////////////////////////////////////////////////////\n// Compiler\n\n#define GLM_COMPILER_UNKNOWN\t\t0x00000000\n\n// Intel\n#define GLM_COMPILER_INTEL\t\t\t0x00100000\n#define GLM_COMPILER_INTEL14\t\t0x00100040\n#define GLM_COMPILER_INTEL15\t\t0x00100050\n#define GLM_COMPILER_INTEL16\t\t0x00100060\n#define GLM_COMPILER_INTEL17\t\t0x00100070\n\n// Visual C++ defines\n#define GLM_COMPILER_VC\t\t\t\t0x01000000\n#define GLM_COMPILER_VC12\t\t\t0x01000001\n#define GLM_COMPILER_VC14\t\t\t0x01000002\n#define GLM_COMPILER_VC15\t\t\t0x01000003\n#define GLM_COMPILER_VC15_3\t\t\t0x01000004\n#define GLM_COMPILER_VC15_5\t\t\t0x01000005\n#define GLM_COMPILER_VC15_6\t\t\t0x01000006\n#define GLM_COMPILER_VC15_7\t\t\t0x01000007\n#define GLM_COMPILER_VC15_8\t\t\t0x01000008\n#define GLM_COMPILER_VC15_9\t\t\t0x01000009\n#define GLM_COMPILER_VC16\t\t\t0x0100000A\n\n// GCC defines\n#define GLM_COMPILER_GCC\t\t\t0x02000000\n#define GLM_COMPILER_GCC46\t\t\t0x020000D0\n#define GLM_COMPILER_GCC47\t\t\t0x020000E0\n#define GLM_COMPILER_GCC48\t\t\t0x020000F0\n#define GLM_COMPILER_GCC49\t\t\t0x02000100\n#define GLM_COMPILER_GCC5\t\t\t0x02000200\n#define GLM_COMPILER_GCC6\t\t\t0x02000300\n#define GLM_COMPILER_GCC61\t\t\t0x02000800\n#define GLM_COMPILER_GCC7\t\t\t0x02000400\n#define GLM_COMPILER_GCC8\t\t\t0x02000500\n\n// CUDA\n#define GLM_COMPILER_CUDA\t\t\t0x10000000\n#define GLM_COMPILER_CUDA75\t\t\t0x10000001\n#define GLM_COMPILER_CUDA80\t\t\t0x10000002\n#define GLM_COMPILER_CUDA90\t\t\t0x10000004\n#define GLM_COMPILER_CUDA_RTC\t\t\t0x10000100\n\n// SYCL\n#define GLM_COMPILER_SYCL\t\t\t0x00300000\n\n// Clang\n#define GLM_COMPILER_CLANG\t\t\t0x20000000\n#define GLM_COMPILER_CLANG34\t\t0x20000050\n#define GLM_COMPILER_CLANG35\t\t0x20000060\n#define GLM_COMPILER_CLANG36\t\t0x20000070\n#define GLM_COMPILER_CLANG37\t\t0x20000080\n#define GLM_COMPILER_CLANG38\t\t0x20000090\n#define GLM_COMPILER_CLANG39\t\t0x200000A0\n#define GLM_COMPILER_CLANG40\t\t0x200000B0\n#define GLM_COMPILER_CLANG41\t\t0x200000C0\n#define GLM_COMPILER_CLANG42\t\t0x200000D0\n\n// HIP\n#define GLM_COMPILER_HIP\t\t\t0x40000000\n\n// Build model\n#define GLM_MODEL_32\t\t\t\t0x00000010\n#define GLM_MODEL_64\t\t\t\t0x00000020\n\n// Force generic C++ compiler\n#ifdef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_COMPILER GLM_COMPILER_UNKNOWN\n\n#elif defined(__INTEL_COMPILER)\n#\tif __INTEL_COMPILER >= 1700\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL17\n#\telif __INTEL_COMPILER >= 1600\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL16\n#\telif __INTEL_COMPILER >= 1500\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL15\n#\telif __INTEL_COMPILER >= 1400\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL14\n#\telif __INTEL_COMPILER < 1400\n#\t\terror \"GLM requires ICC 2013 SP1 or newer\"\n#\tendif\n\n// CUDA\n#elif defined(__CUDACC__)\n#\tif !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA)\n#\t\tinclude <cuda.h>  // make sure version is defined since nvcc does not define it itself!\n#\tendif\n#\tif defined(__CUDACC_RTC__)\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA_RTC\n#\telif CUDA_VERSION >= 8000\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA80\n#\telif CUDA_VERSION >= 7500\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA75\n#\telif CUDA_VERSION >= 7000\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA70\n#\telif CUDA_VERSION < 7000\n#\t\terror \"GLM requires CUDA 7.0 or higher\"\n#\tendif\n\n// HIP\n#elif defined(__HIP__)\n#\tdefine GLM_COMPILER GLM_COMPILER_HIP\n\n// SYCL\n#elif defined(__SYCL_DEVICE_ONLY__)\n#\tdefine GLM_COMPILER GLM_COMPILER_SYCL\n\n// Clang\n#elif defined(__clang__)\n#\tif defined(__apple_build_version__)\n#\t\tif (__clang_major__ < 6)\n#\t\t\terror \"GLM requires Clang 3.4 / Apple Clang 6.0 or higher\"\n#\t\telif __clang_major__ == 6 && __clang_minor__ == 0\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG35\n#\t\telif __clang_major__ == 6 && __clang_minor__ >= 1\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG36\n#\t\telif __clang_major__ >= 7\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG37\n#\t\tendif\n#\telse\n#\t\tif ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3)\n#\t\t\terror \"GLM requires Clang 3.4 or higher\"\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 4\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG34\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 5\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG35\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 6\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG36\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 7\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG37\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 8\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG38\n#\t\telif __clang_major__ == 3 && __clang_minor__ >= 9\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG39\n#\t\telif __clang_major__ == 4 && __clang_minor__ == 0\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG40\n#\t\telif __clang_major__ == 4 && __clang_minor__ == 1\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG41\n#\t\telif __clang_major__ == 4 && __clang_minor__ >= 2\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG42\n#\t\telif __clang_major__ >= 4\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG42\n#\t\tendif\n#\tendif\n\n// Visual C++\n#elif defined(_MSC_VER)\n#\tif _MSC_VER >= 1920\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC16\n#\telif _MSC_VER >= 1916\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_9\n#\telif _MSC_VER >= 1915\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_8\n#\telif _MSC_VER >= 1914\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_7\n#\telif _MSC_VER >= 1913\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_6\n#\telif _MSC_VER >= 1912\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_5\n#\telif _MSC_VER >= 1911\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_3\n#\telif _MSC_VER >= 1910\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15\n#\telif _MSC_VER >= 1900\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC14\n#\telif _MSC_VER >= 1800\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC12\n#\telif _MSC_VER < 1800\n#\t\terror \"GLM requires Visual C++ 12 - 2013 or higher\"\n#\tendif//_MSC_VER\n\n// G++\n#elif defined(__GNUC__) || defined(__MINGW32__)\n#\tif __GNUC__ >= 8\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC8\n#\telif __GNUC__ >= 7\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC7\n#\telif __GNUC__ >= 6\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC6\n#\telif __GNUC__ >= 5\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC5\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 9\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC49\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 8\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC48\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 7\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC47\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 6\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC46\n#\telif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4)\n#\t\terror \"GLM requires GCC 4.6 or higher\"\n#\tendif\n\n#else\n#\tdefine GLM_COMPILER GLM_COMPILER_UNKNOWN\n#endif\n\n#ifndef GLM_COMPILER\n#\terror \"GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message.\"\n#endif//GLM_COMPILER\n\n///////////////////////////////////////////////////////////////////////////////////\n// Instruction sets\n\n// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2\n\n#define GLM_ARCH_MIPS_BIT\t  (0x10000000)\n#define GLM_ARCH_PPC_BIT\t  (0x20000000)\n#define GLM_ARCH_ARM_BIT\t  (0x40000000)\n#define GLM_ARCH_ARMV8_BIT  (0x01000000)\n#define GLM_ARCH_X86_BIT\t  (0x80000000)\n\n#define GLM_ARCH_SIMD_BIT\t(0x00001000)\n\n#define GLM_ARCH_NEON_BIT\t(0x00000001)\n#define GLM_ARCH_SSE_BIT\t(0x00000002)\n#define GLM_ARCH_SSE2_BIT\t(0x00000004)\n#define GLM_ARCH_SSE3_BIT\t(0x00000008)\n#define GLM_ARCH_SSSE3_BIT\t(0x00000010)\n#define GLM_ARCH_SSE41_BIT\t(0x00000020)\n#define GLM_ARCH_SSE42_BIT\t(0x00000040)\n#define GLM_ARCH_AVX_BIT\t(0x00000080)\n#define GLM_ARCH_AVX2_BIT\t(0x00000100)\n\n#define GLM_ARCH_UNKNOWN\t(0)\n#define GLM_ARCH_X86\t\t(GLM_ARCH_X86_BIT)\n#define GLM_ARCH_SSE\t\t(GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86)\n#define GLM_ARCH_SSE2\t\t(GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE)\n#define GLM_ARCH_SSE3\t\t(GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2)\n#define GLM_ARCH_SSSE3\t\t(GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3)\n#define GLM_ARCH_SSE41\t\t(GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3)\n#define GLM_ARCH_SSE42\t\t(GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41)\n#define GLM_ARCH_AVX\t\t(GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42)\n#define GLM_ARCH_AVX2\t\t(GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX)\n#define GLM_ARCH_ARM\t\t(GLM_ARCH_ARM_BIT)\n#define GLM_ARCH_ARMV8\t\t(GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT)\n#define GLM_ARCH_NEON\t\t(GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM)\n#define GLM_ARCH_MIPS\t\t(GLM_ARCH_MIPS_BIT)\n#define GLM_ARCH_PPC\t\t(GLM_ARCH_PPC_BIT)\n\n#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE)\n#\tdefine GLM_ARCH GLM_ARCH_UNKNOWN\n#elif defined(GLM_FORCE_NEON)\n#\tif __ARM_ARCH >= 8\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARMV8)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_NEON)\n#\tendif\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_AVX2)\n#\tdefine GLM_ARCH (GLM_ARCH_AVX2)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_AVX)\n#\tdefine GLM_ARCH (GLM_ARCH_AVX)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE42)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE42)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE41)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE41)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSSE3)\n#\tdefine GLM_ARCH (GLM_ARCH_SSSE3)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE3)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE3)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE2)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE2)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY)\n#\tif defined(__AVX2__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_AVX2)\n#\telif defined(__AVX__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_AVX)\n#\telif defined(__SSE4_2__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE42)\n#\telif defined(__SSE4_1__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE41)\n#\telif defined(__SSSE3__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSSE3)\n#\telif defined(__SSE3__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE3)\n#\telif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE2)\n#\telif defined(__i386__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_X86)\n#\telif defined(__ARM_ARCH) && (__ARM_ARCH >= 8)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARMV8)\n#\telif defined(__ARM_NEON)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON)\n#\telif defined(__arm__ ) || defined(_M_ARM)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM)\n#\telif defined(__mips__ )\n#\t\tdefine GLM_ARCH (GLM_ARCH_MIPS)\n#\telif defined(__powerpc__ ) || defined(_M_PPC)\n#\t\tdefine GLM_ARCH (GLM_ARCH_PPC)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_UNKNOWN)\n#\tendif\n#else\n#\tif defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_X86)\n#\telif defined(__arm__) || defined(_M_ARM)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM)\n#\telif defined(__powerpc__) || defined(_M_PPC)\n#\t\tdefine GLM_ARCH (GLM_ARCH_PPC)\n#\telif defined(__mips__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_MIPS)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_UNKNOWN)\n#\tendif\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX2_BIT\n#\tinclude <immintrin.h>\n#elif GLM_ARCH & GLM_ARCH_AVX_BIT\n#\tinclude <immintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE42_BIT\n#\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tinclude <popcntintrin.h>\n#\tendif\n#\tinclude <nmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE41_BIT\n#\tinclude <smmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT\n#\tinclude <tmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE3_BIT\n#\tinclude <pmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE2_BIT\n#\tinclude <emmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\n#\tinclude \"neon.h\"\n#endif//GLM_ARCH\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\ttypedef __m128\t\t\tglm_f32vec4;\n\ttypedef __m128i\t\t\tglm_i32vec4;\n\ttypedef __m128i\t\t\tglm_u32vec4;\n\ttypedef __m128d\t\t\tglm_f64vec2;\n\ttypedef __m128i\t\t\tglm_i64vec2;\n\ttypedef __m128i\t\t\tglm_u64vec2;\n\n\ttypedef glm_f32vec4\t\tglm_vec4;\n\ttypedef glm_i32vec4\t\tglm_ivec4;\n\ttypedef glm_u32vec4\t\tglm_uvec4;\n\ttypedef glm_f64vec2\t\tglm_dvec2;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttypedef __m256d\t\t\tglm_f64vec4;\n\ttypedef glm_f64vec4\t\tglm_dvec4;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttypedef __m256i\t\t\tglm_i64vec4;\n\ttypedef __m256i\t\t\tglm_u64vec4;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\n\ttypedef float32x4_t\t\t\tglm_f32vec4;\n\ttypedef int32x4_t\t\t\tglm_i32vec4;\n\ttypedef uint32x4_t\t\t\tglm_u32vec4;\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/trigonometric.h",
    "content": "/// @ref simd\n/// @file glm/simd/trigonometric.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/simd/vector_relational.h",
    "content": "/// @ref simd\n/// @file glm/simd/vector_relational.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/trigonometric.hpp",
    "content": "/// @ref core\n/// @file glm/trigonometric.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n///\n/// @defgroup core_func_trigonometric Angle and Trigonometry Functions\n/// @ingroup core\n///\n/// Function parameters specified as angle are assumed to be in units of radians.\n/// In no case will any of these functions result in a divide by zero error. If\n/// the divisor of a ratio is 0, then results will be undefined.\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/trigonometric.hpp> to use these core features.\n///\n/// @see ext_vector_trigonometric\n\n#pragma once\n\n#include \"detail/setup.hpp\"\n#include \"detail/qualifier.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_trigonometric\n\t/// @{\n\n\t/// Converts degrees to radians and returns the result.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml\">GLSL radians man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& degrees);\n\n\t/// Converts radians to degrees and returns the result.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml\">GLSL degrees man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& radians);\n\n\t/// The standard trigonometric sine function.\n\t/// The values returned by this function will range from [-1, 1].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml\">GLSL sin man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sin(vec<L, T, Q> const& angle);\n\n\t/// The standard trigonometric cosine function.\n\t/// The values returned by this function will range from [-1, 1].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml\">GLSL cos man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> cos(vec<L, T, Q> const& angle);\n\n\t/// The standard trigonometric tangent function.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml\">GLSL tan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> tan(vec<L, T, Q> const& angle);\n\n\t/// Arc sine. Returns an angle whose sine is x.\n\t/// The range of values returned by this function is [-PI/2, PI/2].\n\t/// Results are undefined if |x| > 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml\">GLSL asin man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> asin(vec<L, T, Q> const& x);\n\n\t/// Arc cosine. Returns an angle whose cosine is x.\n\t/// The range of values returned by this function is [0, PI].\n\t/// Results are undefined if |x| > 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml\">GLSL acos man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> acos(vec<L, T, Q> const& x);\n\n\t/// Arc tangent. Returns an angle whose tangent is y/x.\n\t/// The signs of x and y are used to determine what\n\t/// quadrant the angle is in. The range of values returned\n\t/// by this function is [-PI, PI]. Results are undefined\n\t/// if x and y are both 0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y, vec<L, T, Q> const& x);\n\n\t/// Arc tangent. Returns an angle whose tangent is y_over_x.\n\t/// The range of values returned by this function is [-PI/2, PI/2].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y_over_x);\n\n\t/// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml\">GLSL sinh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sinh(vec<L, T, Q> const& angle);\n\n\t/// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml\">GLSL cosh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> cosh(vec<L, T, Q> const& angle);\n\n\t/// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml\">GLSL tanh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> tanh(vec<L, T, Q> const& angle);\n\n\t/// Arc hyperbolic sine; returns the inverse of sinh.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml\">GLSL asinh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> asinh(vec<L, T, Q> const& x);\n\n\t/// Arc hyperbolic cosine; returns the non-negative inverse\n\t/// of cosh. Results are undefined if x < 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml\">GLSL acosh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> acosh(vec<L, T, Q> const& x);\n\n\t/// Arc hyperbolic tangent; returns the inverse of tanh.\n\t/// Results are undefined if abs(x) >= 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml\">GLSL atanh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atanh(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_trigonometric.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/vec2.hpp",
    "content": "/// @ref core\n/// @file glm/vec2.hpp\n\n#pragma once\n#include \"./ext/vector_bool2.hpp\"\n#include \"./ext/vector_bool2_precision.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float2_precision.hpp\"\n#include \"./ext/vector_double2.hpp\"\n#include \"./ext/vector_double2_precision.hpp\"\n#include \"./ext/vector_int2.hpp\"\n#include \"./ext/vector_int2_sized.hpp\"\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_uint2_sized.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/vec3.hpp",
    "content": "/// @ref core\n/// @file glm/vec3.hpp\n\n#pragma once\n#include \"./ext/vector_bool3.hpp\"\n#include \"./ext/vector_bool3_precision.hpp\"\n#include \"./ext/vector_float3.hpp\"\n#include \"./ext/vector_float3_precision.hpp\"\n#include \"./ext/vector_double3.hpp\"\n#include \"./ext/vector_double3_precision.hpp\"\n#include \"./ext/vector_int3.hpp\"\n#include \"./ext/vector_int3_sized.hpp\"\n#include \"./ext/vector_uint3.hpp\"\n#include \"./ext/vector_uint3_sized.hpp\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/vec4.hpp",
    "content": "/// @ref core\n/// @file glm/vec4.hpp\n\n#pragma once\n#include \"./ext/vector_bool4.hpp\"\n#include \"./ext/vector_bool4_precision.hpp\"\n#include \"./ext/vector_float4.hpp\"\n#include \"./ext/vector_float4_precision.hpp\"\n#include \"./ext/vector_double4.hpp\"\n#include \"./ext/vector_double4_precision.hpp\"\n#include \"./ext/vector_int4.hpp\"\n#include \"./ext/vector_int4_sized.hpp\"\n#include \"./ext/vector_uint4.hpp\"\n#include \"./ext/vector_uint4_sized.hpp\"\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/glm/vector_relational.hpp",
    "content": "/// @ref core\n/// @file glm/vector_relational.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n///\n/// @defgroup core_func_vector_relational Vector Relational Functions\n/// @ingroup core\n///\n/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to\n/// operate on scalars and produce scalar Boolean results. For vector results,\n/// use the following built-in functions.\n///\n/// In all cases, the sizes of all the input and return vectors for any particular\n/// call must match.\n///\n/// Include <glm/vector_relational.hpp> to use these core features.\n///\n/// @see ext_vector_relational\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"detail/setup.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_vector_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison result of x < y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml\">GLSL lessThan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x <= y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml\">GLSL lessThanEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x > y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml\">GLSL greaterThan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x >= y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml\">GLSL greaterThanEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x == y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point, integer or bool scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml\">GLSL equal man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x != y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point, integer or bool scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml\">GLSL notEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns true if any component of x is true.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml\">GLSL any man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v);\n\n\t/// Returns true if all components of x are true.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml\">GLSL all man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v);\n\n\t/// Returns the component-wise logical complement of x.\n\t/// /!\\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml\">GLSL not man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_vector_relational.inl\"\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/manual.md",
    "content": "![Alt](./doc/manual/logo-mini.png \"GLM Logo\")\n\n# GLM 0.9.9 Manual\n\n![Alt](./doc/manual/g-truc.png \"G-Truc Logo\")\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## Table of Contents\n\n+ [0. Licenses](#section0)\n+ [1. Getting started](#section1)\n+ [1.1. Using global headers](#section1_1)\n+ [1.2. Using separated headers](#section1_2)\n+ [1.3. Using extension headers](#section1_3)\n+ [1.4. Dependencies](#section1_4)\n+ [1.5. Finding GLM with CMake](#section1_5)\n+ [2. Preprocessor configurations](#section2)\n+ [2.1. GLM\\_FORCE\\_MESSAGES: Platform auto detection and default configuration](#section2_1)\n+ [2.2. GLM\\_FORCE\\_PLATFORM\\_UNKNOWN: Force GLM to no detect the build platform](#section2_2)\n+ [2.3. GLM\\_FORCE\\_COMPILER\\_UNKNOWN: Force GLM to no detect the C++ compiler](#section2_3)\n+ [2.4. GLM\\_FORCE\\_ARCH\\_UNKNOWN: Force GLM to no detect the build architecture](#section2_4)\n+ [2.5. GLM\\_FORCE\\_CXX\\_UNKNOWN: Force GLM to no detect the C++ standard](#section2_5)\n+ [2.6. GLM\\_FORCE\\_CXX**: C++ language detection](#section2_6)\n+ [2.7. GLM\\_FORCE\\_EXPLICIT\\_CTOR: Requiring explicit conversions](#section2_7)\n+ [2.8. GLM\\_FORCE\\_INLINE: Force inline](#section2_8)\n+ [2.9. GLM\\_FORCE\\_ALIGNED\\_GENTYPES: Force GLM to enable aligned types](#section2_9)\n+ [2.10. GLM\\_FORCE\\_DEFAULT\\_ALIGNED\\_GENTYPES: Force GLM to use aligned types by default](#section2_10)\n+ [2.11. GLM\\_FORCE\\_INTRINSICS: Using SIMD optimizations](#section2_11)\n+ [2.12. GLM\\_FORCE\\_PRECISION\\_**: Default precision](#section2_12)\n+ [2.13. GLM\\_FORCE\\_SINGLE\\_ONLY: Removed explicit 64-bits floating point types](#section2_13)\n+ [2.14. GLM\\_FORCE\\_SWIZZLE: Enable swizzle operators](#section2_14)\n+ [2.15. GLM\\_FORCE\\_XYZW\\_ONLY: Only exposes x, y, z and w components](#section2_15)\n+ [2.16. GLM\\_FORCE\\_LEFT\\_HANDED: Force left handed coordinate system](#section2_16)\n+ [2.17. GLM\\_FORCE\\_DEPTH\\_ZERO\\_TO\\_ONE: Force the use of a clip space between 0 to 1](#section2_17)\n+ [2.18. GLM\\_FORCE\\_SIZE\\_T\\_LENGTH: Vector and matrix static size type](#section2_18)\n+ [2.19. GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE: Removing genType restriction](#section2_19)\n+ [2.20. GLM\\_FORCE\\_SILENT\\_WARNINGS: Silent C++ warnings from language extensions](#section2_20)\n+ [2.21. GLM\\_FORCE\\_QUAT\\_DATA\\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w](#section2_21)\n+ [3. Stable extensions](#section3)\n+ [3.1. Scalar types](#section3_1)\n+ [3.2. Scalar functions](#section3_2)\n+ [3.3. Vector types](#section3_3)\n+ [3.4. Vector types with precision qualifiers](#section3_4)\n+ [3.5. Vector functions](#section3_5)\n+ [3.6. Matrix types](#section3_6)\n+ [3.7. Matrix types with precision qualifiers](#section3_7)\n+ [3.8. Matrix functions](#section3_8)\n+ [3.9. Quaternion types](#section3_9)\n+ [3.10. Quaternion types with precision qualifiers](#section3_10)\n+ [3.11. Quaternion functions](#section3_11)\n+ [4. Recommended extensions](#section4)\n+ [4.1. GLM_GTC_bitfield](#section4_1)\n+ [4.2. GLM_GTC_color_space](#section4_2)\n+ [4.3. GLM_GTC_constants](#section4_3)\n+ [4.4. GLM_GTC_epsilon](#section4_4)\n+ [4.5. GLM_GTC_integer](#section4_5)\n+ [4.6. GLM_GTC_matrix_access](#section4_6)\n+ [4.7. GLM_GTC_matrix_integer](#section4_7)\n+ [4.8. GLM_GTC_matrix_inverse](#section4_8)\n+ [4.9. GLM_GTC_matrix_transform](#section4_9)\n+ [4.10. GLM_GTC_noise](#section4_10)\n+ [4.11. GLM_GTC_packing](#section4_11)\n+ [4.12. GLM_GTC_quaternion](#section4_12)\n+ [4.13. GLM_GTC_random](#section4_13)\n+ [4.14. GLM_GTC_reciprocal](#section4_14)\n+ [4.15. GLM_GTC_round](#section4_15)\n+ [4.16. GLM_GTC_type_alignment](#section4_16)\n+ [4.17. GLM_GTC_type_precision](#section4_17)\n+ [4.18. GLM_GTC_type_ptr](#section4_18)\n+ [4.19. GLM_GTC_ulp](#section4_19)\n+ [4.20. GLM_GTC_vec1](#section4_20)\n+ [5. OpenGL interoperability](#section5)\n+ [5.1. GLM Replacements for deprecated OpenGL functions](#section5_1)\n+ [5.2. GLM Replacements for GLU functions](#section5_2)\n+ [6. Known issues](#section6)\n+ [6.1. Not function](#section6_1)\n+ [6.2. Precision qualifiers support](#section6_2)\n+ [7. FAQ](#section7)\n+ [7.1 Why GLM follows GLSL specification and conventions?](#section7_1)\n+ [7.2. Does GLM run GLSL programs?](#section7_2)\n+ [7.3. Does a GLSL compiler build GLM codes?](#section7_3)\n+ [7.4. Should I use ‘GTX’ extensions?](#section7_4)\n+ [7.5. Where can I ask my questions?](#section7_5)\n+ [7.6. Where can I find the documentation of extensions?](#section7_6)\n+ [7.7. Should I use 'using namespace glm;'?](#section7_7)\n+ [7.8. Is GLM fast?](#section7_8)\n+ [7.9. When I build with Visual C++ with /w4 warning level, I have warnings...](#section7_9)\n+ [7.10. Why some GLM functions can crash because of division by zero?](#section7_10)\n+ [7.11. What unit for angles us used in GLM?](#section7_11)\n+ [7.12. Windows headers cause build errors...](#section7_12)\n+ [7.13. Constant expressions support](#section7_13)\n+ [8. Code samples](#section8)\n+ [8.1. Compute a triangle normal](#section8_1)\n+ [8.2. Matrix transform](#section8_2)\n+ [8.3. Vector types](#section8_3)\n+ [8.4. Lighting](#section8_4)\n+ [9. Contributing to GLM](#section9)\n+ [9.1. Submitting bug reports](#section9_1)\n+ [9.2. Contributing to GLM with pull request](#section9_2)\n+ [9.3. Coding style](#section9_3)\n+ [10. References](#section10)\n+ [10.1. OpenGL specifications](#section10_1)\n+ [10.2. External links](#section10_2)\n+ [10.3. Projects using GLM](#section10_3)\n+ [10.4. Tutorials using GLM](#section10_4)\n+ [10.5. Equivalent for other languages](#section10_5)\n+ [10.6. Alternatives to GLM](#section10_6)\n+ [10.7. Acknowledgements](#section10_7)\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section0\"></a> Licenses\n\n### The Happy Bunny License (Modified MIT License)\n\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nRestrictions: By making use of the Software for military purposes, you\nchoose to make a Bunny unhappy.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n![](./doc/manual/frontpage1.png)\n\n### The MIT License\n\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n![](./doc/manual/frontpage2.png)\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section1\"></a> 1. Getting started\n\n### <a name=\"section1_1\"></a> 1.1. Using global headers\n\nGLM is a header-only library, and thus does not need to be compiled. We can use GLM's implementation of GLSL's mathematics functionality by including the `<glm/glm.hpp>` header:\n\n```cpp\n#include <glm/glm.hpp>\n```\n\nTo extend the feature set supported by GLM and keeping the library as close to GLSL as possible, new features are implemented as extensions that can be included thought a separated header:\n\n```cpp\n// Include all GLM core / GLSL features\n#include <glm/glm.hpp> // vec2, vec3, mat4, radians\n\n// Include all GLM extensions\n#include <glm/ext.hpp> // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n*Note: Including `<glm/glm.hpp>` and `<glm/ext.hpp>` is convenient but pull a lot of code which will significantly increase build time, particularly if these files are included in all source files. We may prefer to use the approaches describe in the two following sections to keep the project build fast.*\n\n### <a name=\"section1_2\"></a> 1.2. Using separated headers\n\nGLM relies on C++ templates heavily, and may significantly increase compilation times for projects that use it. Hence, user projects could only include the features they actually use. Following is the list of all the core features, based on GLSL specification, headers:\n\n```cpp\n#include <glm/vec2.hpp>               // vec2, bvec2, dvec2, ivec2 and uvec2\n#include <glm/vec3.hpp>               // vec3, bvec3, dvec3, ivec3 and uvec3\n#include <glm/vec4.hpp>               // vec4, bvec4, dvec4, ivec4 and uvec4\n#include <glm/mat2x2.hpp>             // mat2, dmat2\n#include <glm/mat2x3.hpp>             // mat2x3, dmat2x3\n#include <glm/mat2x4.hpp>             // mat2x4, dmat2x4\n#include <glm/mat3x2.hpp>             // mat3x2, dmat3x2\n#include <glm/mat3x3.hpp>             // mat3, dmat3\n#include <glm/mat3x4.hpp>             // mat3x4, dmat2\n#include <glm/mat4x2.hpp>             // mat4x2, dmat4x2\n#include <glm/mat4x3.hpp>             // mat4x3, dmat4x3\n#include <glm/mat4x4.hpp>             // mat4, dmat4\n#include <glm/common.hpp>             // all the GLSL common functions: abs, min, mix, isnan, fma, etc.\n#include <glm/exponential.hpp>        // all the GLSL exponential functions: pow, log, exp2, sqrt, etc.\n#include <glm/geometric.hpp>          // all the GLSL geometry functions: dot, cross, reflect, etc.\n#include <glm/integer.hpp>            // all the GLSL integer functions: findMSB, bitfieldExtract, etc.\n#include <glm/matrix.hpp>             // all the GLSL matrix functions: transpose, inverse, etc.\n#include <glm/packing.hpp>            // all the GLSL packing functions: packUnorm4x8, unpackHalf2x16, etc.\n#include <glm/trigonometric.hpp>      // all the GLSL trigonometric functions: radians, cos, asin, etc.\n#include <glm/vector_relational.hpp>  // all the GLSL vector relational functions: equal, less, etc.\n```\n\nThe following is a code sample using separated core headers and an extension:\n\n```cpp\n// Include GLM core features\n#include <glm/vec2.hpp>           // vec2\n#include <glm/vec3.hpp>           // vec3\n#include <glm/mat4x4.hpp>         // mat4\n#include <glm/trigonometric.hpp>  //radians\n\n// Include GLM extension\n#include <glm/ext/matrix_transform.hpp> // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n### <a name=\"section1_3\"></a> 1.3. Using extension headers\n\nUsing GLM through split headers to minimize the project build time:\n\n```cpp\n// Include GLM vector extensions:\n#include <glm/ext/vector_float2.hpp>                // vec2\n#include <glm/ext/vector_float3.hpp>                // vec3\n#include <glm/ext/vector_trigonometric.hpp>         // radians\n\n// Include GLM matrix extensions:\n#include <glm/ext/matrix_float4x4.hpp>              // mat4\n#include <glm/ext/matrix_transform.hpp>             // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n### <a name=\"section1_4\"></a> 1.4. Dependencies\n\nGLM does not depend on external libraries or headers such as `<GL/gl.h>`, [`<GL/glcorearb.h>`](http://www.opengl.org/registry/api/GL/glcorearb.h), `<GLES3/gl3.h>`, `<GL/glu.h>`, or `<windows.h>`.\n\n### <a name=\"section1_5\"></a> 1.5. Finding GLM with CMake\n\nWhen installed, GLM provides the CMake package configuration files `glmConfig.cmake` and `glmConfigVersion.cmake`.\n\nTo use these configurations files, you may need to set the `glm_DIR` variable to the directory containing the configuration files `<installation prefix>/lib/cmake/glm/`.\n\nUse the `find_package` CMake command to load the configurations into your project. Lastly, either link your executable against the `glm::glm` target or add `${GLM_INCLUDE_DIRS}` to your target's include directories:\n\n```cmake\nset(glm_DIR <installation prefix>/lib/cmake/glm) # if necessary\nfind_package(glm REQUIRED)\ntarget_link_libraries(<your executable> glm::glm)\n```\n\nTo use GLM as a submodule in a project instead, use `add_subdirectory` to expose the same target, or add the directory to your target's\n\n```cmake\nadd_subdirectory(glm)\ntarget_link_libraries(<your executable> glm::glm)\n# or\ntarget_include_directories(<your executable> glm)\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section2\"></a> 2. Preprocessor configurations\n\n### <a name=\"section2_1\"></a> 2.1. GLM\\_FORCE\\_MESSAGES: Platform auto detection and default configuration\n\nWhen included, GLM will first automatically detect the compiler used, the C++ standard supported, the compiler arguments used to configure itself matching the build environment.\n\nFor example, if the compiler arguments request AVX code generation, GLM will rely on its code path providing AVX optimizations when available.\n\nWe can change GLM configuration using specific C++ preprocessor defines that must be declared before including any GLM headers.\n\nUsing `GLM_FORCE_MESSAGES`, GLM will report the configuration as part of the build log.\n\n```cpp\n#define GLM_FORCE_MESSAGES // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE)\n#include <glm/glm.hpp>\n```\n\nExample of configuration log generated by `GLM_FORCE_MESSAGES`:\n\n```plaintext\nGLM: version 0.9.9.1\nGLM: C++ 17 with extensions\nGLM: Clang compiler detected\nGLM: x86 64 bits with AVX instruction set build target\nGLM: Linux platform detected\nGLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\nGLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\nGLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\nGLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\nGLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\n```\n\nThe following subsections describe each configurations and defines.\n\n### <a name=\"section2_2\"></a> 2.2. GLM\\_FORCE\\_PLATFORM\\_UNKNOWN: Force GLM to no detect the build platform\n\n`GLM_FORCE_PLATFORM_UNKNOWN` prevents GLM from detecting the build platform.\n\n### <a name=\"section2_3\"></a> 2.3. GLM\\_FORCE\\_COMPILER\\_UNKNOWN: Force GLM to no detect the C++ compiler\n\n`GLM_FORCE_COMPILER_UNKNOWN` prevents GLM from detecting the C++ compiler.\n\n### <a name=\"section2_4\"></a> 2.4. GLM\\_FORCE\\_ARCH\\_UNKNOWN: Force GLM to no detect the build architecture\n\n`GLM_FORCE_ARCH_UNKNOWN` prevents GLM from detecting the build target architecture.\n\n### <a name=\"section2_5\"></a> 2.5. GLM\\_FORCE\\_CXX\\_UNKNOWN: Force GLM to no detect the C++ standard\n\n`GLM_FORCE_CSS_UNKNOWN` prevents GLM from detecting the C++ compiler standard support.\n\n### <a name=\"section2_6\"></a> 2.6. GLM\\_FORCE\\_CXX**: C++ language detection\n\nGLM will automatically take advantage of compilers’ language extensions when enabled. To increase cross platform compatibility and to avoid compiler extensions, a programmer can define `GLM_FORCE_CXX98` before\nany inclusion of `<glm/glm.hpp>` to restrict the language feature set C++98:\n\n```cpp\n#define GLM_FORCE_CXX98\n#include <glm/glm.hpp>\n```\n\nFor C++11, C++14, and C++17 equivalent defines are available:\n\n* `GLM_FORCE_CXX11`\n* `GLM_FORCE_CXX14`\n* `GLM_FORCE_CXX17`\n\n```cpp\n#define GLM_FORCE_CXX11\n#include <glm/glm.hpp>\n\n// If the compiler doesn’t support C++11, compiler errors will happen.\n```\n\n`GLM_FORCE_CXX17` overrides `GLM_FORCE_CXX14`; `GLM_FORCE_CXX14` overrides `GLM_FORCE_CXX11`; and `GLM_FORCE_CXX11` overrides `GLM_FORCE_CXX98` defines.\n\n### <a name=\"section2_7\"></a> 2.7. GLM\\_FORCE\\_EXPLICIT\\_CTOR: Requiring explicit conversions\n\nGLSL supports implicit conversions of vector and matrix types. For example, an ivec4 can be implicitly converted into `vec4`.\n\nOften, this behaviour is not desirable but following the spirit of the library, this is the default behavior in GLM. However, GLM 0.9.6 introduced the define `GLM_FORCE_EXPLICIT_CTOR` to require explicit conversion for GLM types.\n\n```cpp\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::ivec4 a;\n    ...\n\n    glm::vec4 b(a); // Explicit conversion, OK\n    glm::vec4 c = a; // Implicit conversion, OK\n    ...\n}\n```\n\nWith `GLM_FORCE_EXPLICIT_CTOR` define, implicit conversions are not allowed:\n\n```cpp\n#define GLM_FORCE_EXPLICIT_CTOR\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::ivec4 a;\n    {\n        glm::vec4 b(a); // Explicit conversion, OK\n        glm::vec4 c = a; // Implicit conversion, ERROR\n        ...\n}\n```\n\n### <a name=\"section2_8\"></a> 2.8. GLM\\_FORCE\\_INLINE: Force inline\n\nTo push further the software performance, a programmer can define `GLM_FORCE_INLINE` before any inclusion of `<glm/glm.hpp>` to force the compiler to inline GLM code.\n\n```cpp\n#define GLM_FORCE_INLINE\n#include <glm/glm.hpp>\n```\n\n### <a name=\"section2_9\"></a> 2.9. GLM\\_FORCE\\_ALIGNED\\_GENTYPES: Force GLM to enable aligned types\n\nEvery object type has the property called alignment requirement, which is an integer value (of type `std::size_t`, always a power of 2) representing the number of bytes between successive addresses at which objects of this type can be allocated. The alignment requirement of a type can be queried with alignof or `std::alignment_of`. The pointer alignment function `std::align` can be used to obtain a suitably-aligned pointer within some buffer, and `std::aligned_storage` can be used to obtain suitably-aligned storage.\n\nEach object type imposes its alignment requirement on every object of that type; stricter alignment (with larger alignment requirement) can be requested using C++11 `alignas`.\n\nIn order to satisfy alignment requirements of all non-static members of a class, padding may be inserted after some of its members.\n\nGLM supports both packed and aligned types. Packed types allow filling data structure without inserting extra padding. Aligned GLM types align addresses based on the size of the value type of a GLM type.\n\n```cpp\n#define GLM_FORCE_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n#include <glm/gtc/type_aligned.hpp>\n\ntypedef glm::aligned_vec4 vec4a;\ntypedef glm::packed_vec4 vec4p;\n```\n\n### <a name=\"section2_10\"></a> 2.10. GLM\\_FORCE\\_DEFAULT\\_ALIGNED\\_GENTYPES: Force GLM to use aligned types by default\n\nGLM allows using aligned types by default for vector types using `GLM_FORCE_DEFAULT_ALIGNED_GENTYPES`:\n\n```cpp\n#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n\nstruct MyStruct\n{\n    glm::vec4 a;\n    float b;\n    glm::vec3 c;\n};\n\nvoid foo()\n{\n    printf(\"MyStruct requires memory padding: %d bytes\\n\", sizeof(MyStruct));\n}\n\n>>> MyStruct requires memory padding: 48 bytes\n```\n\n```cpp\n#include <glm/glm.hpp>\n\nstruct MyStruct\n{\n    glm::vec4 a;\n    float b;\n    glm::vec3 c;\n};\n\nvoid foo()\n{\n    printf(\"MyStruct is tightly packed: %d bytes\\n\", sizeof(MyStruct));\n}\n\n>>> MyStruct is tightly packed: 32 bytes\n```\n\n*Note: GLM SIMD optimizations require the use of aligned types*\n\n### <a name=\"section2_11\"></a> 2.11. GLM\\_FORCE\\_INTRINSICS: Using SIMD optimizations\n\nGLM provides some SIMD optimizations based on [compiler intrinsics](https://msdn.microsoft.com/en-us/library/26td21ds.aspx).\nThese optimizations will be automatically thanks to compiler arguments when `GLM_FORCE_INTRINSICS` is defined before including GLM files.\nFor example, if a program is compiled with Visual Studio using `/arch:AVX`, GLM will detect this argument and generate code using AVX instructions automatically when available.\n\nIt’s possible to avoid the instruction set detection by forcing the use of a specific instruction set with one of the fallowing define:\n`GLM_FORCE_SSE2`, `GLM_FORCE_SSE3`, `GLM_FORCE_SSSE3`, `GLM_FORCE_SSE41`, `GLM_FORCE_SSE42`, `GLM_FORCE_AVX`, `GLM_FORCE_AVX2` or `GLM_FORCE_AVX512`.\n\nThe use of intrinsic functions by GLM implementation can be avoided using the define `GLM_FORCE_PURE` before any inclusion of GLM headers. This can be particularly useful if we want to rely on C++14 `constexpr`.\n\n```cpp\n#define GLM_FORCE_PURE\n#include <glm/glm.hpp>\n\nstatic_assert(glm::vec4::length() == 4, \"Using GLM C++ 14 constexpr support for compile time tests\");\n\n// GLM code will be compiled using pure C++ code without any intrinsics\n```\n\n```cpp\n#define GLM_FORCE_SIMD_AVX2\n#include <glm/glm.hpp>\n\n// If the compiler doesn’t support AVX2 instrinsics, compiler errors will happen.\n```\n\nAdditionally, GLM provides a low level SIMD API in glm/simd directory for users who are really interested in writing fast algorithms.\n\n### <a name=\"section2_12\"></a> 2.12. GLM\\_FORCE\\_PRECISION\\_**: Default precision\n\nC++ does not provide a way to implement GLSL default precision selection (as defined in GLSL 4.10 specification section 4.5.3) with GLSL-like syntax.\n\n```glsl\nprecision mediump int;\nprecision highp float;\n```\n\nTo use the default precision functionality, GLM provides some defines that need to added before any include of `glm.hpp`:\n\n```cpp\n#define GLM_FORCE_PRECISION_MEDIUMP_INT\n#define GLM_FORCE_PRECISION_HIGHP_FLOAT\n#include <glm/glm.hpp>\n```\n\nAvailable defines for floating point types (`glm::vec\\*`, `glm::mat\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_FLOAT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_FLOAT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_FLOAT`: High precision (default)\n\nAvailable defines for floating point types (`glm::dvec\\*`, `glm::dmat\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_DOUBLE`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_DOUBLE`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_DOUBLE`: High precision (default)\n\nAvailable defines for signed integer types (`glm::ivec\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_INT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_INT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_INT`: High precision (default)\n\nAvailable defines for unsigned integer types (`glm::uvec\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_UINT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_UINT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_UINT`: High precision (default)\n\n### <a name=\"section2_13\"></a> 2.13. GLM\\_FORCE\\_SINGLE\\_ONLY: Removed explicit 64-bits floating point types\n\nSome platforms (Dreamcast) doesn't support double precision floating point values. To compile on such platforms, GCC has the `--m4-single-only` build argument. When defining `GLM_FORCE_SINGLE_ONLY` before including GLM headers, GLM releases the requirement of double precision floating point values support. Effectivement, all the float64 types are no longer defined and double behaves like float.\n\n### <a name=\"section2_14\"></a> 2.14. GLM\\_FORCE\\_SWIZZLE: Enable swizzle operators\n\nShader languages like GLSL often feature so-called swizzle expressions, which may be used to freely select and arrange a vector's components. For example, `variable.x`, `variable.xzy` and `variable.zxyy` respectively form a scalar, a 3D vector and a 4D vector.  The result of a swizzle expression in GLSL can be either an R-value or an L-value. Swizzle expressions can be written with characters from exactly one of `xyzw` (usually for positions), `rgba` (usually for colors), and `stpq` (usually for texture coordinates).\n\n```glsl\nvec4 A;\nvec2 B;\n\nB.yx = A.wy;\nB = A.xx;\nvec3 C = A.bgr;\nvec3 D = B.rsz; // Invalid, won't compile\n```\n\nGLM supports some of this functionality. Swizzling can be enabled by defining `GLM_FORCE_SWIZZLE`.\n\n*Note: Enabling swizzle expressions will massively increase the size of your binaries and the time it takes to compile them!*\n\nGLM has two levels of swizzling support described in the following subsections.\n\n#### 2.14.1. Swizzle functions for standard C++ 98\n\nWhen compiling GLM as C++98, R-value swizzle expressions are simulated through member functions of each vector type.\n\n```cpp\n#define GLM_FORCE_SWIZZLE // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE)\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::vec4 const ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f);\n    glm::vec3 const ColorBGR = ColorRGBA.bgr();\n\n    glm::vec3 const PositionA = glm::vec3(1.0f, 0.5f, 0.0f);\n    glm::vec3 const PositionB = PositionXYZ.xyz() * 2.0f;\n\n    glm::vec2 const TexcoordST = glm::vec2(1.0f, 0.5f);\n    glm::vec4 const TexcoordSTPQ = TexcoordST.stst();\n}\n```\n\nSwizzle operators return a **copy** of the component values, and thus *can't* be used as L-values to change a vector's values.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n  glm::vec3 const A = glm::vec3(1.0f, 0.5f, 0.0f);\n\n  // No compiler error, but A is not modified.\n  // An anonymous copy is being modified (and then discarded).\n  A.bgr() = glm::vec3(2.0f, 1.5f, 1.0f); // A is not modified!\n}\n```\n\n#### 2.14.2. Swizzle operations for C++ 98 with language extensions\n\nVisual C++, GCC and Clang support, as a _non-standard language extension_, anonymous `struct`s as `union` members. This permits a powerful swizzling implementation that both allows L-value swizzle expressions and GLSL-like syntax. To use this feature, the language extension must be enabled by a supporting compiler and `GLM_FORCE_SWIZZLE` must be `#define`d.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\n// Only guaranteed to work with Visual C++!\n// Some compilers that support Microsoft extensions may compile this.\nvoid foo()\n{\n  glm::vec4 ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f);\n\n  // l-value:\n  glm::vec4 ColorBGRA = ColorRGBA.bgra;\n\n  // r-value:\n  ColorRGBA.bgra = ColorRGBA;\n\n  // Both l-value and r-value\n  ColorRGBA.bgra = ColorRGBA.rgba;\n}\n```\n\nThis version returns implementation-specific objects that _implicitly convert_ to their respective vector types.  As a consequence of this design, these extra types **can't be directly used** as C++ function arguments; they must be converted through constructors or `operator()`.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\nusing namespace glm;\n\nvoid foo()\n{\n  vec4 Color = vec4(1.0f, 0.5f, 0.0f, 1.0f);\n\n  // Generates compiler errors. Color.rgba is not a vector type.\n  vec4 ClampedA = clamp(Color.rgba, 0.f, 1.f); // ERROR\n\n  // Explicit conversion through a constructor\n  vec4 ClampedB = clamp(vec4(Color.rgba), 0.f, 1.f); // OK\n\n  // Explicit conversion through operator()\n  vec4 ClampedC = clamp(Color.rgba(), 0.f, 1.f); // OK\n}\n```\n\n*Note: The implementation has a caveat: Swizzle operator types must be different on both size of the equal operator or the operation will fail. There is no known fix for this issue to date*\n\n### <a name=\"section2_15\"></a> 2.15. GLM\\_FORCE\\_XYZW\\_ONLY: Only exposes x, y, z and w components\n\nFollowing GLSL specifications, GLM supports three sets of components to access vector types member: x, y, z, w; r, g, b, a; and s, t, p, q.\nAlso, this is making vector component very expressive in the code, it may make debugging vector types a little cubersom as the debuggers will typically display three time the values for each compoenents due to the existence of the three sets.\n\nTo simplify vector types, GLM allows exposing only x, y, z and w components thanks to `GLM_FORCE_XYZW_ONLY` define.\n\n### <a name=\"section2_16\"></a> 2.16. GLM\\_FORCE\\_LEFT\\_HANDED: Force left handed coordinate system\n\nBy default, OpenGL is using a right handed coordinate system. However, others APIs such as Direct3D have done different choice and relies on the left handed coordinate system.\n\nGLM allows switching the coordinate system to left handed by defining `GLM_FORCE_LEFT_HANDED`.\n\n### <a name=\"section2_17\"></a> 2.17. GLM\\_FORCE\\_DEPTH\\_ZERO\\_TO\\_ONE: Force the use of a clip space between 0 to 1\n\nBy default, OpenGL is using a -1 to 1 clip space in Z-axis. However, others APIs such as Direct3D relies on a clip space between 0 to 1 in Z-axis.\n\nGLM allows switching the clip space in Z-axis to 0 to 1 by defining `GLM_FORCE_DEPTH_ZERO_TO_ONE`.\n\n### <a name=\"section2_18\"></a> 2.18. GLM\\_FORCE\\_SIZE\\_T\\_LENGTH: Vector and matrix static size\n\nGLSL supports the member function .length() for all vector and matrix types.\n\n```cpp\n#include <glm/glm.hpp>\n\nvoid foo(vec4 const& v)\n{\n    int Length = v.length();\n    ...\n}\n```\n\nThis function returns an `int` however this function typically interacts with STL `size_t` based code. GLM provides `GLM_FORCE_SIZE_T_LENGTH` pre-processor configuration so that member functions `length()` return a `size_t`.\n\nAdditionally, GLM defines the type `glm::length_t` to identify `length()` returned type, independently from `GLM_FORCE_SIZE_T_LENGTH`.\n\n```cpp\n#define GLM_FORCE_SIZE_T_LENGTH\n#include <glm/glm.hpp>\n\nvoid foo(vec4 const& v)\n{\n    glm::length_t Length = v.length();\n    ...\n}\n```\n\n### <a name=\"section2_19\"></a> 2.19. GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE: Removing genType restriction\n\nGLSL has restrictions on types supported by certain functions that may appear excessive.\nBy default, GLM follows the GLSL specification as accurately as possible however it's possible to relax these rules using `GLM_FORCE_UNRESTRICTED_GENTYPE` define.\n\n```cpp\n#include <glm/glm.hpp>\n\nfloat average(float const A, float const B)\n{\n    return glm::mix(A, B, 0.5f); // By default glm::mix only supports floating-point types\n}\n```\n\nBy defining GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE, we allow using integer types:\n\n```cpp\n#define GLM_FORCE_UNRESTRICTED_GENTYPE\n#include <glm/glm.hpp>\n\nint average(int const A, int const B)\n{\n    return glm::mix(A, B, 0.5f); // integers are ok thanks to GLM_FORCE_UNRESTRICTED_GENTYPE\n}\n```\n\n### <a name=\"section2_20\"></a> 2.20. GLM\\_FORCE\\_SILENT\\_WARNINGS: Silent C++ warnings from language extensions\n\nWhen using /W4 on Visual C++ or -Wpedantic on GCC, for example, the compilers will generate warnings for using C++ language extensions (/Za with Visual C++) such as anonymous struct.\nGLM relies on anonymous structs for swizzle operators and aligned vector types. To silent those warnings define `GLM_FORCE_SILENT_WARNINGS` before including GLM headers.\n\n### <a name=\"section2_21\"></a> 2.21. GLM\\_FORCE\\_QUAT\\_DATA\\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w\n\nBy default GLM store quaternion components with the x, y, z, w order. `GLM_FORCE_QUAT_DATA_WXYZ` allows switching the quaternion data storage to the w, x, y, z order.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section3\"></a> 3. Stable extensions\n\n### <a name=\"section3_1\"></a> 3.1. Scalar types\n\n#### 3.1.1. GLM_EXT_scalar_int_sized\n\nThis extension exposes sized and signed integer types.\n\nInclude `<glm/ext/scalar_int_sized.hpp>` to use these features.\n\n#### 3.1.2. GLM_EXT_scalar_uint_sized\n\nThis extension exposes sized and unsigned integer types.\n\n```cpp\n#include <glm/ext/scalar_common.hpp>\n\nglm::uint64 pack(glm::uint32 A, glm::uint16 B, glm::uint8 C, glm::uint8 D)\n{\n\tglm::uint64 ShiftA = 0;\n\tglm::uint64 ShiftB = sizeof(glm::uint32) * 8;\n\tglm::uint64 ShiftC = (sizeof(glm::uint32) + sizeof(glm::uint16)) * 8;\n\tglm::uint64 ShiftD = (sizeof(glm::uint32) + sizeof(glm::uint16) + sizeof(glm::uint8)) * 8;\n\treturn (glm::uint64(A) << ShiftA) | (glm::uint64(B) << ShiftB) | (glm::uint64(C) << ShiftC) | (glm::uint64(D) << ShiftD);\n}\n```\n\nInclude `<glm/ext/scalar_uint_sized.hpp>` to use these features.\n\n### <a name=\"section3_2\"></a> 3.2. Scalar functions\n\n#### 3.2.1. GLM_EXT_scalar_common\n\nThis extension exposes support for `min` and `max` functions taking more than two scalar arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation.\n\n```cpp\n#include <glm/ext/scalar_common.hpp>\n\nfloat positiveMax(float const a, float const b)\n{\n    return glm::fmax(a, b, 0.0f);\n}\n```\n\nInclude `<glm/ext/scalar_common.hpp>` to use these features.\n\n#### 3.2.2. GLM_EXT_scalar_relational\n\nThis extension exposes `equal` and `notEqual` scalar variants which takes an epsilon argument.\n\n```cpp\n#include <glm/ext/scalar_relational.hpp>\n\nbool epsilonEqual(float const a, float const b)\n{\n    float const CustomEpsilon = 0.0001f;\n    return glm::equal(a, b, CustomEpsilon);\n}\n```\n\nInclude `<glm/ext/scalar_relational.hpp>` to use these features.\n\n#### 3.2.3. GLM_EXT_scalar_constants\n\nThis extension exposes useful constants such as `epsilon` and `pi`.\n\n```cpp\n#include <glm/ext/scalar_constants.hpp>\n\nfloat circumference(float const Diameter)\n{\n    return glm::pi<float>() * Diameter;\n}\n```\n\n```cpp\n#include <glm/common.hpp> // abs\n#include <glm/ext/scalar_constants.hpp> // epsilon\n\nbool equalULP1(float const a, float const b)\n{\n    return glm::abs(a - b) <= glm::epsilon<float>();\n}\n```\n\nInclude `<glm/ext/scalar_constants.hpp>` to use these features.\n\n#### 3.2.4. GLM_EXT_scalar_ulp\n\nThis extension exposes function that measure of accuracy in numeric calculations.\n\n```cpp\n#include <glm/ext/scalar_ulp.hpp>\n\nbool test_ulp(float x)\n{\n    float const a = glm::next_float(x); // return a float a ULP away from the float argument.\n    return float_distance(a, x) == 1; // check both float are a single ULP away.\n}\n```\n\nInclude `<glm/ext/scalar_ulp.hpp>` to use these features.\n\n### <a name=\"section3_3\"></a> 3.3. Vector types\n\n#### 3.3.1. GLM_EXT_vector_float1\n\nThis extension exposes single-precision floating point vector with 1 component: `vec1`.\n\nInclude `<glm/ext/vector_float1.hpp>` to use these features.\n\n#### 3.3.2. GLM_EXT_vector_float2\n\nThis extension exposes single-precision floating point vector with 2 components: `vec2`.\n\nInclude `<glm/ext/vector_float2.hpp>` to use these features.\n\n#### 3.3.3. GLM_EXT_vector_float3\n\nThis extension exposes single-precision floating point vector with 3 components: `vec3`.\n\nInclude `<glm/ext/vector_float3.hpp>` to use these features.\n\n#### 3.3.4. GLM_EXT_vector_float4\n\nThis extension exposes single-precision floating point vector with 4 components: `vec4`.\n\nInclude `<glm/ext/vector_float4.hpp>` to use these features.\n\n#### 3.3.5. GLM_EXT_vector_double1\n\nThis extension exposes double-precision floating point vector with 1 component: `dvec1`.\n\nInclude `<glm/ext/vector_double1.hpp>` to use these features.\n\n#### 3.3.6. GLM_EXT_vector_double2\n\nThis extension exposes double-precision floating point vector with 2 components: `dvec2`.\n\nInclude `<glm/ext/vector_double2.hpp>` to use these features.\n\n#### 3.3.7. GLM_EXT_vector_double3\n\nThis extension exposes double-precision floating point vector with 3 components: `dvec3`.\n\nInclude `<glm/ext/vector_double3.hpp>` to use these features.\n\n#### 3.3.8. GLM_EXT_vector_double4\n\nThis extension exposes double-precision floating point vector with 4 components: `dvec4`.\n\nInclude `<glm/ext/vector_double4.hpp>` to use these features.\n\n#### 3.3.9. GLM_EXT_vector_int1\n\nThis extension exposes signed integer vector with 1 component: `ivec1`.\n\nInclude `<glm/ext/vector_int1.hpp>` to use these features.\n\n#### 3.3.10. GLM_EXT_vector_int2\n\nThis extension exposes signed integer vector with 2 components: `ivec2`.\n\nInclude `<glm/ext/vector_int2.hpp>` to use these features.\n\n#### 3.3.11. GLM_EXT_vector_int3\n\nThis extension exposes signed integer vector with 3 components: `ivec3`.\n\nInclude `<glm/ext/vector_int3.hpp>` to use these features.\n\n#### 3.3.12. GLM_EXT_vector_int4\n\nThis extension exposes signed integer vector with 4 components: `ivec4`.\n\nInclude `<glm/ext/vector_int4.hpp>` to use these features.\n\n#### 3.3.13. GLM_EXT_vector_int1\n\nThis extension exposes unsigned integer vector with 1 component: `uvec1`.\n\nInclude `<glm/ext/vector_uint1.hpp>` to use these features.\n\n#### 3.3.14. GLM_EXT_vector_uint2\n\nThis extension exposes unsigned integer vector with 2 components: `uvec2`.\n\nInclude `<glm/ext/vector_uint2.hpp>` to use these features.\n\n#### 3.3.15. GLM_EXT_vector_uint3\n\nThis extension exposes unsigned integer vector with 3 components: `uvec3`.\n\nInclude `<glm/ext/vector_uint3.hpp>` to use these features.\n\n#### 3.3.16. GLM_EXT_vector_uint4\n\nThis extension exposes unsigned integer vector with 4 components: `uvec4`.\n\nInclude `<glm/ext/vector_uint4.hpp>` to use these features.\n\n#### 3.3.17. GLM_EXT_vector_bool1\n\nThis extension exposes boolean vector with 1 component: `bvec1`.\n\nInclude `<glm/ext/vector_bool1.hpp>` to use these features.\n\n#### 3.3.18. GLM_EXT_vector_bool2\n\nThis extension exposes boolean vector with 2 components: `bvec2`.\n\nInclude `<glm/ext/vector_bool2.hpp>` to use these features.\n\n#### 3.3.19. GLM_EXT_vector_bool3\n\nThis extension exposes boolean vector with 3 components: `bvec3`.\n\nInclude `<glm/ext/vector_bool3.hpp>` to use these features.\n\n#### 3.3.20. GLM_EXT_vector_bool4\n\nThis extension exposes boolean vector with 4 components: `bvec4`.\n\nInclude `<glm/ext/vector_bool4.hpp>` to use these features.\n\n### <a name=\"section3_4\"></a> 3.4. Vector types with precision qualifiers\n\n#### 3.4.1. GLM_EXT_vector_float1_precision\n\nThis extension exposes single-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_vec1`, `mediump_vec1` and `highp_vec1`.\n\nInclude `<glm/ext/vector_float1_precision.hpp>` to use these features.\n\n#### 3.4.2. GLM_EXT_vector_float2_precision\n\nThis extension exposes single-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_vec2`, `mediump_vec2` and `highp_vec2`.\n\nInclude `<glm/ext/vector_float2_precision.hpp>` to use these features.\n\n#### 3.4.3. GLM_EXT_vector_float3_precision\n\nThis extension exposes single-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_vec3`, `mediump_vec3` and `highp_vec3`.\n\nInclude `<glm/ext/vector_float3_precision.hpp>` to use these features.\n\n#### 3.4.4. GLM_EXT_vector_float4_precision\n\nThis extension exposes single-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_vec4`, `mediump_vec4` and `highp_vec4`.\n\nInclude `<glm/ext/vector_float4_precision.hpp>` to use these features.\n\n#### 3.4.5. GLM_EXT_vector_double1_precision\n\nThis extension exposes double-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_dvec1`, `mediump_dvec1` and `highp_dvec1`.\n\nInclude `<glm/ext/vector_double1_precision.hpp>` to use these features.\n\n#### 3.4.6. GLM_EXT_vector_double2_precision\n\nThis extension exposes double-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_dvec2`, `mediump_dvec2` and `highp_dvec2`.\n\nInclude `<glm/ext/vector_double2_precision.hpp>` to use these features.\n\n#### 3.4.7. GLM_EXT_vector_double3_precision\n\nThis extension exposes double-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_dvec3`, `mediump_dvec3` and `highp_dvec3`.\n\nInclude `<glm/ext/vector_double3_precision.hpp>` to use these features.\n\n#### 3.4.8. GLM_EXT_vector_double4_precision\n\nThis extension exposes double-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_dvec4`, `mediump_dvec4` and `highp_dvec4`.\n\nInclude `<glm/ext/vector_double4_precision.hpp>` to use these features.\n\n### <a name=\"section3_5\"></a> 3.5. Vector functions\n\n#### 3.5.1. GLM_EXT_vector_common\n\nThis extension exposes support for `min` and `max` functions taking more than two vector arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_common.hpp> // fmax\n\nfloat positiveMax(float const a, float const b)\n{\n    return glm::fmax(a, b, 0.0f);\n}\n```\n\nInclude `<glm/ext/vector_common.hpp>` to use these features.\n\n#### 3.5.2. GLM_EXT_vector_relational\n\nThis extension exposes `equal` and `notEqual` vector variants which takes an epsilon argument.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_relational.hpp> // equal, all\n\nbool epsilonEqual(glm::vec2 const& A, glm::vec2 const& B)\n{\n    float const CustomEpsilon = 0.0001f;\n    return glm::all(glm::equal(A, B, CustomEpsilon));\n}\n```\n\nInclude `<glm/ext/vector_relational.hpp>` to use these features.\n\n#### 3.5.3. GLM_EXT_vector_ulp\n\nThis extension exposes function that measure of accuracy in numeric calculations.\n\n```cpp\n#include <glm/ext/vector_ulp.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_int4.hpp>\n\nbool test_ulp(glm::vec4 const& x)\n{\n    glm::vec4 const a = glm::next_float(x); // return a float a ULP away from the float argument.\n    return glm::all(float_distance(a, x) == glm::ivec4(1)); // check both float are a single ULP away.\n}\n```\n\nInclude `<glm/ext/vector_ulp.hpp>` to use these features.\n\n### <a name=\"section3_6\"></a> 3.6. Matrix types\n\n#### 3.6.1. GLM_EXT_matrix_float2x2\n\nThis extension exposes single-precision floating point vector with 2 columns by 2 rows: `mat2x2`.\n\nInclude `<glm/ext/matrix_float2x2.hpp>` to use these features.\n\n#### 3.6.2. GLM_EXT_matrix_float2x3\n\nThis extension exposes single-precision floating point vector with 2 columns by 3 rows: `mat2x3`.\n\nInclude `<glm/ext/matrix_float2x3.hpp>` to use these features.\n\n#### 3.6.3. GLM_EXT_matrix_float2x4\n\nThis extension exposes single-precision floating point vector with 2 columns by 4 rows: `mat2x4`.\n\nInclude `<glm/ext/matrix_float2x4.hpp>` to use these features.\n\n#### 3.6.4. GLM_EXT_matrix_float3x2\n\nThis extension exposes single-precision floating point vector with 3 columns by 2 rows: `mat3x2`.\n\nInclude `<glm/ext/matrix_float3x2.hpp>` to use these features.\n\n#### 3.6.5. GLM_EXT_matrix_float3x3\n\nThis extension exposes single-precision floating point vector with 3 columns by 3 rows: `mat3x3`.\n\nInclude `<glm/ext/matrix_float3x3.hpp>` to use these features.\n\n#### 3.6.6. GLM_EXT_matrix_float3x4\n\nThis extension exposes single-precision floating point vector with 3 columns by 4 rows: `mat3x4`.\n\nInclude `<glm/ext/matrix_float3x4.hpp>` to use these features.\n\n#### 3.6.7. GLM_EXT_matrix_float4x2\n\nThis extension exposes single-precision floating point vector with 4 columns by 2 rows: `mat4x2`.\n\nInclude `<glm/ext/matrix_float4x2.hpp>` to use these features.\n\n#### 3.6.8. GLM_EXT_matrix_float4x3\n\nThis extension exposes single-precision floating point vector with 4 columns by 3 rows: `mat4x3`.\n\nInclude `<glm/ext/matrix_float4x3.hpp>` to use these features.\n\n#### 3.6.9. GLM_EXT_matrix_float4x4\n\nThis extension exposes single-precision floating point vector with 4 columns by 4 rows: `mat4x4`.\n\nInclude `<glm/ext/matrix_float4x4.hpp>` to use these features.\n\n#### 3.6.10. GLM_EXT_matrix_double2x2\n\nThis extension exposes double-precision floating point vector with 2 columns by 2 rows: `dmat2x2`.\n\nInclude `<glm/ext/matrix_double2x2.hpp>` to use these features.\n\n#### 3.6.11. GLM_EXT_matrix_double2x3\n\nThis extension exposes double-precision floating point vector with 2 columns by 3 rows: `dmat2x3`.\n\nInclude `<glm/ext/matrix_double2x3.hpp>` to use these features.\n\n#### 3.6.12. GLM_EXT_matrix_double2x4\n\nThis extension exposes double-precision floating point vector with 2 columns by 4 rows: `dmat2x4`.\n\nInclude `<glm/ext/matrix_double2x4.hpp>` to use these features.\n\n#### 3.6.13. GLM_EXT_matrix_double3x2\n\nThis extension exposes double-precision floating point vector with 3 columns by 2 rows: `dmat3x2`.\n\nInclude `<glm/ext/matrix_double3x2.hpp>` to use these features.\n\n#### 3.6.14. GLM_EXT_matrix_double3x3\n\nThis extension exposes double-precision floating point vector with 3 columns by 3 rows: `dmat3x3`.\n\nInclude `<glm/ext/matrix_double3x3.hpp>` to use these features.\n\n#### 3.6.15. GLM_EXT_matrix_double3x4\n\nThis extension exposes double-precision floating point vector with 3 columns by 4 rows: `dmat3x4`.\n\nInclude `<glm/ext/matrix_double3x4.hpp>` to use these features.\n\n#### 3.6.16. GLM_EXT_matrix_double4x2\n\nThis extension exposes double-precision floating point vector with 4 columns by 2 rows: `dmat4x2`.\n\nInclude `<glm/ext/matrix_double4x2.hpp>` to use these features.\n\n#### 3.6.17. GLM_EXT_matrix_double4x3\n\nThis extension exposes double-precision floating point vector with 4 columns by 3 rows: `dmat4x3`.\n\nInclude `<glm/ext/matrix_double4x3.hpp>` to use these features.\n\n#### 3.6.18. GLM_EXT_matrix_double4x4\n\nThis extension exposes double-precision floating point vector with 4 columns by 4 rows: `dmat4x4`.\n\nInclude `<glm/ext/matrix_double4x4.hpp>` to use these features.\n\n### <a name=\"section3_7\"></a> 3.7. Matrix types with precision qualifiers\n\n#### 3.7.1. GLM_EXT_matrix_float2x2_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_mat2x2`, `mediump_mat2x2` and `highp_mat2x2`.\n\nInclude `<glm/ext/matrix_float2x2_precision.hpp>` to use these features.\n\n#### 3.7.2. GLM_EXT_matrix_float2x3_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_mat2x3`, `mediump_mat2x3` and `highp_mat2x3`.\n\nInclude `<glm/ext/matrix_float2x3_precision.hpp>` to use these features.\n\n#### 3.7.3. GLM_EXT_matrix_float2x4_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_mat2x4`, `mediump_mat2x4` and `highp_mat2x4`.\n\nInclude `<glm/ext/matrix_float2x4_precision.hpp>` to use these features.\n\n#### 3.7.4. GLM_EXT_matrix_float3x2_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_mat3x2`, `mediump_mat3x2` and `highp_mat3x2`.\n\nInclude `<glm/ext/matrix_float3x2_precision.hpp>` to use these features.\n\n#### 3.7.5. GLM_EXT_matrix_float3x3_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_mat3x3`, `mediump_mat3x3` and `highp_mat3x3`.\n\nInclude `<glm/ext/matrix_float3x3_precision.hpp>` to use these features.\n\n#### 3.7.6. GLM_EXT_matrix_float3x4_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_mat3x4`, `mediump_mat3x4` and `highp_mat3x4`.\n\nInclude `<glm/ext/matrix_float3x4_precision.hpp>` to use these features.\n\n#### 3.7.7. GLM_EXT_matrix_float4x2_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_mat4x2`, `mediump_mat4x2` and `highp_mat4x2`.\n\nInclude `<glm/ext/matrix_float4x2_precision.hpp>` to use these features.\n\n#### 3.7.8. GLM_EXT_matrix_float4x3_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_mat4x3`, `mediump_mat4x3` and `highp_mat4x3`.\n\nInclude `<glm/ext/matrix_float4x3_precision.hpp>` to use these features.\n\n#### 3.7.9. GLM_EXT_matrix_float4x4_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_mat4x4`, `mediump_mat4x4` and `highp_mat4x4`.\n\nInclude `<glm/ext/matrix_float4x4_precision.hpp>` to use these features.\n\n#### 3.7.10. GLM_EXT_matrix_double2x2_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_dmat2x2`, `mediump_dmat2x2` and `highp_dmat2x2`.\n\nInclude `<glm/ext/matrix_double2x2_precision.hpp>` to use these features.\n\n#### 3.7.11. GLM_EXT_matrix_double2x3_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_dmat2x3`, `mediump_dmat2x3` and `highp_dmat2x3`.\n\nInclude `<glm/ext/matrix_double2x3_precision.hpp>` to use these features.\n\n#### 3.7.12. GLM_EXT_matrix_double2x4_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_dmat2x4`, `mediump_dmat2x4` and `highp_dmat2x4`.\n\nInclude `<glm/ext/matrix_double2x4_precision.hpp>` to use these features.\n\n#### 3.7.13. GLM_EXT_matrix_double3x2_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_dmat3x2`, `mediump_dmat3x2` and `highp_dmat3x2`.\n\nInclude `<glm/ext/matrix_double3x2_precision.hpp>` to use these features.\n\n#### 3.7.14. GLM_EXT_matrix_double3x3_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_dmat3x3`, `mediump_dmat3x3` and `highp_dmat3x3`.\n\nInclude `<glm/ext/matrix_double3x3_precision.hpp>` to use these features.\n\n#### 3.7.15. GLM_EXT_matrix_double3x4_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_dmat3x4`, `mediump_dmat3x4` and `highp_dmat3x4`.\n\nInclude `<glm/ext/matrix_double3x4_precision.hpp>` to use these features.\n\n#### 3.7.16. GLM_EXT_matrix_double4x2_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_dmat4x2`, `mediump_dmat4x2` and `highp_dmat4x2`.\n\nInclude `<glm/ext/matrix_double4x2_precision.hpp>` to use these features.\n\n#### 3.7.17. GLM_EXT_matrix_double4x3_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_dmat4x3`, `mediump_dmat4x3` and `highp_dmat4x3`.\n\nInclude `<glm/ext/matrix_double4x3_precision.hpp>` to use these features.\n\n#### 3.7.18. GLM_EXT_matrix_double4x4_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_dmat4x4`, `mediump_dmat4x4` and `highp_dmat4x4`.\n\nInclude `<glm/ext/matrix_double4x4_precision.hpp>` to use these features.\n\n### <a name=\"section3_8\"></a> 3.8. Matrix functions\n\n#### 3.8.1. GLM_EXT_matrix_relational\n\nThis extension exposes `equal` and `notEqual` matrix variants which takes an optional epsilon argument.\n\n```cpp\n#include <glm/ext/vector_bool4.hpp> // bvec4\n#include <glm/ext/matrix_float4x4.hpp> // mat4\n#include <glm/ext/matrix_relational.hpp> // equal, all\n\nbool epsilonEqual(glm::mat4 const& A, glm::mat4 const& B)\n{\n    float const CustomEpsilon = 0.0001f;\n    glm::bvec4 const ColumnEqual = glm::equal(A, B, CustomEpsilon); // Evaluation per column\n    return glm::all(ColumnEqual);\n}\n```\n\nInclude `<glm/ext/matrix_relational.hpp>` to use these features.\n\n#### 3.8.2. GLM_EXT_matrix_transform\n\nThis extension exposes matrix transformation functions: `translate`, `rotate` and `scale`.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_float3.hpp> // vec3\n#include <glm/ext/matrix_float4x4.hpp> // mat4x4\n#include <glm/ext/matrix_transform.hpp> // translate, rotate, scale, identity\n\nglm::mat4 computeModelViewMatrix(float Translate, glm::vec2 const & Rotate)\n{\n\tglm::mat4 View = glm::translate(glm::identity(), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::identity(), glm::vec3(0.5f));\n\treturn View * Model;\n}\n```\n\nInclude `<glm/ext/matrix_transform.hpp>` to use these features.\n\n#### 3.8.3. GLM_EXT_matrix_clip_space\n\nThis extension exposes functions to transform scenes into the clip space.\n\n```cpp\n#include <glm/ext/matrix_float4x4.hpp> // mat4x4\n#include <glm/ext/matrix_clip_space.hpp> // perspective\n#include <glm/trigonometric.hpp> // radians\n\nglm::mat4 computeProjection(float Width, float Height)\n{\n\treturn glm::perspective(glm::radians(45.0f), Width / Height, 0.1f, 100.f);\n}\n```\n\nInclude `<glm/ext/matrix_clip_space.hpp>` to use these features.\n\n#### 3.8.4. GLM_EXT_matrix_projection\n\nThis extension exposes functions to map object coordinates into window coordinates and reverse\n\nInclude `<glm/ext/matrix_projection.hpp>` to use these features.\n\n### <a name=\"section3_9\"></a> 3.9. Quaternion types\n\n#### 3.9.1. GLM_EXT_quaternion_float\n\nThis extension exposes single-precision floating point quaternion: `quat`.\n\nInclude `<glm/ext/quaternion_float.hpp>` to use these features.\n\n#### 3.9.2. GLM_EXT_quaternion_double\n\nThis extension exposes double-precision floating point quaternion: `dquat`.\n\nInclude `<glm/ext/quaternion_double.hpp>` to use these features.\n\n### <a name=\"section3_10\"></a> 3.10. Quaternion types with precision qualifiers\n\n#### 3.10.1. GLM_EXT_quaternion_float_precision\n\nThis extension exposes single-precision floating point quaternion using various precision in term of ULPs: `lowp_quat`, `mediump_quat` and `highp_quat`.\n\nInclude `<glm/ext/quaternion_float_precision.hpp>` to use these features.\n\n#### 3.10.2. GLM_EXT_quaternion_double_precision\n\nThis extension exposes double-precision floating point quaternion using various precision in term of ULPs: `lowp_dquat`, `mediump_dquat` and `highp_dquat`.\n\nInclude `<glm/ext/quaternion_double_precision.hpp>` to use these features.\n\n### <a name=\"section3_11\"></a> 3.11. Quaternion functions\n\n#### 3.11.1. GLM_EXT_quaternion_common\n\nThis extension exposes common quaternion functions such as `slerp`, `conjugate` and `inverse`.\n\nInclude `<glm/ext/quaternion_common.hpp>` to use these features.\n\n#### 3.11.2. GLM_EXT_quaternion_geometric\n\nThis extension exposes geometric quaternion functions such as `length`, `normalize`, `dot` and `cross`.\n\nInclude `<glm/ext/quaternion_geometric.hpp>` to use these features.\n\n#### 3.11.3. GLM_EXT_quaternion_trigonometric\n\nThis extension exposes trigonometric quaternion functions such as `angle` and `axis`.\n\nInclude `<glm/ext/quaternion_trigonometric.hpp>` to use these features.\n\n#### 3.11.4. GLM_EXT_quaternion_exponential\n\nThis extensions expose exponential functions for quaternions such as `exp`, `log`, `pow` and `sqrt`.\n\nInclude `<glm/ext/quaternion_exponential.hpp>` to use these features.\n\n#### 3.11.5. GLM_EXT_quaternion_relational\n\nThis extension exposes relational functions to compare quaternions.\n\nInclude `<glm/ext/quaternion_relational.hpp>` to use these features.\n\n#### 3.11.6. GLM_EXT_quaternion_transform\n\nThis extension exposes functions to transform objects.\n\nInclude `<glm/ext/quaternion_transform.hpp>` to use these features.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section4\"></a> 4. Recommended extensions\n\nGLM extends the core GLSL feature set with extensions. These extensions include: quaternion, transformation, spline, matrix inverse, color spaces, etc.\n\nTo include an extension, we only need to include the dedicated header file. Once included, the features are added to the GLM namespace.\n\n```cpp\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n\nint foo()\n{\n    glm::vec4 Position = glm::vec4(glm:: vec3(0.0f), 1.0f);\n    glm::mat4 Model = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));\n\n    glm::vec4 Transformed = Model * Position;\n    ...\n\n    return 0;\n}\n```\n\nWhen an extension is included, all the dependent core functionalities and extensions will be included as well.\n\n### <a name=\"section4_1\"></a> 4.1. GLM_GTC_bitfield\n\nFast bitfield operations on scalar and vector variables.\n\n`<glm/gtc/bitfield.hpp>` need to be included to use these features.\n\n### <a name=\"section4_2\"></a> 4.2. GLM_GTC_color_space\n\nConversion between linear RGB and sRGB color spaces.\n\n`<glm/gtc/color_space.hpp>` need to be included to use these features.\n\n### <a name=\"section4_3\"></a> 4.3. GLM_GTC_constants\n\nProvide a list of built-in constants.\n\n`<glm/gtc/constants.hpp>` need to be included to use these features.\n\n### <a name=\"section4_4\"></a> 4.4. GLM\\_GTC\\_epsilon\n\nApproximate equality comparisons for floating-point numbers, possibly with a user-defined epsilon.\n\n`<glm/gtc/epsilon.hpp>` need to be included to use these features.\n\n### <a name=\"section4_5\"></a> 4.5. GLM\\_GTC\\_integer\n\nInteger variants of core GLM functions.\n\n`<glm/gtc/integer.hpp>` need to be included to use these features.\n\n### <a name=\"section4_6\"></a> 4.6. GLM\\_GTC\\_matrix\\_access\n\nFunctions to conveniently access the individual rows or columns of a matrix.\n\n`<glm/gtc/matrix_access.hpp>` need to be included to use these features.\n\n### <a name=\"section4_7\"></a> 4.7. GLM\\_GTC\\_matrix\\_integer\n\nInteger matrix types similar to the core floating-point matrices.  Some operations (such as inverse and determinant) are not supported.\n\n`<glm/gtc/matrix_integer.hpp>` need to be included to use these features.\n\n### <a name=\"section4_8\"></a> 4.8. GLM\\_GTC\\_matrix\\_inverse\n\nAdditional matrix inverse functions.\n\n`<glm/gtc/matrix_inverse.hpp>` need to be included to use these features.\n\n### <a name=\"section4_9\"></a> 4.9. GLM\\_GTC\\_matrix\\_transform\n\nMatrix transformation functions that follow the OpenGL fixed-function conventions.\n\nFor example, the `lookAt` function generates a transformation matrix that projects world coordinates into eye coordinates suitable for projection matrices (e.g. `perspective`, `ortho`). See the OpenGL compatibility specifications for more information about the layout of these generated matrices.\n\nThe matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the `lookAt` function generates a transform from world space into the specific eye space that the\nprojective matrix functions (`perspective`, `ortho`, etc) are designed to expect. The OpenGL compatibility specifications define the particular layout of this eye space.\n\n`<glm/gtc/matrix_transform.hpp>` need to be included to use these features.\n\n### <a name=\"section4_10\"></a> 4.10. GLM\\_GTC\\_noise\n\nDefine 2D, 3D and 4D procedural noise functions.\n\n`<glm/gtc/noise.hpp>` need to be included to use these features.\n\n![](./doc/manual/noise-simplex1.jpg)\n\nFigure 4.10.1: glm::simplex(glm::vec2(x / 16.f, y / 16.f));\n\n![](./doc/manual/noise-simplex2.jpg)\n\nFigure 4.10.2: glm::simplex(glm::vec3(x / 16.f, y / 16.f, 0.5f));\n\n![](./doc/manual/noise-simplex3.jpg)\n\nFigure 4.10.3: glm::simplex(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f));\n\n![](./doc/manual/noise-perlin1.jpg)\n\nFigure 4.10.4: glm::perlin(glm::vec2(x / 16.f, y / 16.f));\n\n![](./doc/manual/noise-perlin2.jpg)\n\nFigure 4.10.5: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f));\n\n![](./doc/manual/noise-perlin3.jpg)\n\nFigure 4.10.6: glm::perlin(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f)));\n\n![](./doc/manual/noise-perlin4.png)\n\nFigure 4.10.7: glm::perlin(glm::vec2(x / 16.f, y / 16.f), glm::vec2(2.0f));\n\n![](./doc/manual/noise-perlin5.png)\n\nFigure 4.10.8: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f), glm::vec3(2.0f));\n\n![](./doc/manual/noise-perlin6.png)\n\nFigure 4.10.9: glm::perlin(glm::vec4(x / 16.f, y / 16.f, glm::vec2(0.5f)), glm::vec4(2.0f));\n\n### <a name=\"section4_11\"></a> 4.11. GLM\\_GTC\\_packing\n\nConvert scalar and vector types to and from packed formats, saving space at the cost of precision. However, packing a value into a format that it was previously unpacked from is guaranteed to be lossless.\n\n`<glm/gtc/packing.hpp>` need to be included to use these features.\n\n### <a name=\"section4_12\"></a> 4.12. GLM\\_GTC\\_quaternion\n\nQuaternions and operations upon thereof.\n\n`<glm/gtc/quaternion.hpp>` need to be included to use these features.\n\n### <a name=\"section4_13\"></a> 4.13. GLM\\_GTC\\_random\n\nProbability distributions in up to four dimensions.\n\n`<glm/gtc/random.hpp>` need to be included to use these features.\n\n![](./doc/manual/random-linearrand.png)\n\nFigure 4.13.1: glm::vec4(glm::linearRand(glm::vec2(-1), glm::vec2(1)), 0, 1);\n\n![](./doc/manual/random-circularrand.png)\n\nFigure 4.13.2: glm::vec4(glm::circularRand(1.0f), 0, 1);\n\n![](./doc/manual/random-sphericalrand.png)\n\nFigure 4.13.3: glm::vec4(glm::sphericalRand(1.0f), 1);\n\n![](./doc/manual/random-diskrand.png)\n\nFigure 4.13.4: glm::vec4(glm::diskRand(1.0f), 0, 1);\n\n![](./doc/manual/random-ballrand.png)\n\nFigure 4.13.5: glm::vec4(glm::ballRand(1.0f), 1);\n\n![](./doc/manual/random-gaussrand.png)\n\nFigure 4.13.6: glm::vec4(glm::gaussRand(glm::vec3(0), glm::vec3(1)), 1);\n\n### <a name=\"section4_14\"></a> 4.14. GLM\\_GTC\\_reciprocal\n\nReciprocal trigonometric functions (e.g. secant, cosecant, tangent).\n\n`<glm/gtc/reciprocal.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_15\"></a> 4.15. GLM\\_GTC\\_round\n\nVarious rounding operations and common special cases thereof.\n\n`<glm/gtc/round.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_16\"></a> 4.16. GLM\\_GTC\\_type\\_aligned\n\nAligned vector types.\n\n`<glm/gtc/type_aligned.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_17\"></a> 4.17. GLM\\_GTC\\_type\\_precision\n\nVector and matrix types with defined precisions, e.g. `i8vec4`, which is a 4D vector of signed 8-bit integers.\n\n`<glm/gtc/type\\_precision.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_18\"></a> 4.18. GLM\\_GTC\\_type\\_ptr\n\nFacilitate interactions between pointers to basic types (e.g. `float*`) and GLM types (e.g. `mat4`).\n\nThis extension defines an overloaded function, `glm::value_ptr`, which returns a pointer to the memory layout of any GLM vector or matrix (`vec3`, `mat4`, etc.). Matrix types store their values in column-major order. This is useful for uploading data to matrices or for copying data to buffer objects.\n\n```cpp\n// GLM_GTC_type_ptr provides a safe solution:\n#include <glm/glm.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\nvoid foo()\n{\n    glm::vec4 v(0.0f);\n    glm::mat4 m(1.0f);\n    ...\n    glVertex3fv(glm::value_ptr(v))\n    glLoadMatrixfv(glm::value_ptr(m));\n}\n\n// Another solution, this one inspired by the STL:\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::vec4 v(0.0f);\n    glm::mat4 m(1.0f);\n    ...\n    glVertex3fv(&v[0]);\n    glLoadMatrixfv(&m[0][0]);\n}\n```\n\n*Note: It would be possible to implement [`glVertex3fv`](http://www.opengl.org/sdk/docs/man2/xhtml/glVertex.xml)(glm::vec3(0)) in C++ with the appropriate cast operator that would result as an\nimplicit cast in this example. However cast operators may produce programs running with unexpected behaviours without build error or any form of notification.*\n\n`<glm/gtc/type_ptr.hpp>` need to be included to use these features.\n\n### <a name=\"section4_19\"></a> 4.19. GLM\\_GTC\\_ulp\n\nMeasure a function's accuracy given a reference implementation of it. This extension works on floating-point data and provides results in [ULP](http://ljk.imag.fr/membres/Carine.Lucas/TPScilab/JMMuller/ulp-toms.pdf).\n\n`<glm/gtc/ulp.hpp>` need to be included to use these features.\n\n### <a name=\"section4_20\"></a> 4.20. GLM\\_GTC\\_vec1\n\nAdd \\*vec1 types.\n\n`<glm/gtc/vec1.hpp>` need to be included to use these features.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section5\"></a> 5. OpenGL interoperability\n\n### <a name=\"section5_1\"></a> 5.1. GLM replacements for deprecated OpenGL functions\n\nOpenGL 3.1 specification has deprecated some features that have been removed from OpenGL 3.2 core profile specification. GLM provides some replacement functions.\n\n[***glRotate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml)\n\n```cpp\nglm::mat4 glm::rotate(glm::mat4 const& m, float angle, glm::vec3 const& axis);\nglm::dmat4 glm::rotate(glm::dmat4 const& m, double angle, glm::dvec3 const& axis);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glScale{f, d}:***](http://www.opengl.org/sdk/docs/man2/xhtml/glScale.xml)\n\n```cpp\nglm::mat4 glm::scale(glm::mat4 const& m, glm::vec3 const& factors);\nglm::dmat4 glm::scale(glm::dmat4 const& m, glm::dvec3 const& factors);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glTranslate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml)\n\n```cpp\nglm::mat4 glm::translate(glm::mat4 const& m, glm::vec3 const& translation);\nglm::dmat4 glm::translate(glm::dmat4 const& m, glm::dvec3 const& translation);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glLoadIdentity:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml)\n\n```cpp\nglm::mat4(1.0) or glm::mat4();\nglm::dmat4(1.0) or glm::dmat4();\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glMultMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultMatrix.xml)\n\n```cpp\nglm::mat4() * glm::mat4();\nglm::dmat4() * glm::dmat4();\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glLoadTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrix.xml)\n\n```cpp\nglm::transpose(glm::mat4());\nglm::transpose(glm::dmat4());\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glMultTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrix.xml)\n\n```cpp\nglm::mat4() * glm::transpose(glm::mat4());\nglm::dmat4() * glm::transpose(glm::dmat4());\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glFrustum:***](http://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml)\n\n```cpp\nglm::mat4 glm::frustum(float left, float right, float bottom, float top, float zNear, float zFar);\nglm::dmat4 glm::frustum(double left, double right, double bottom, double top, double zNear, double zFar);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***glOrtho:***](https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml)\n\n```cpp\nglm::mat4 glm::ortho(float left, float right, float bottom, float top, float zNear, float zFar);\nglm::dmat4 glm::ortho(double left, double right, double bottom, double top, double zNear, double zFar);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n### <a name=\"section5_2\"></a> 5.2. GLM replacements for GLU functions\n\n[***gluLookAt:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml)\n\n```cpp\nglm::mat4 glm::lookAt(glm::vec3 const& eye, glm::vec3 const& center, glm::vec3 const& up);\nglm::dmat4 glm::lookAt(glm::dvec3 const& eye, glm::dvec3 const& center, glm::dvec3 const& up);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluOrtho2D:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml)\n\n```cpp\nglm::mat4 glm::ortho(float left, float right, float bottom, float top);\nglm::dmat4 glm::ortho(double left, double right, double bottom, double top);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluPerspective:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml)\n\n```cpp\nglm::mat4 perspective(float fovy, float aspect, float zNear, float zFar);\nglm::dmat4 perspective(double fovy, double aspect, double zNear, double zFar);\n```\n\nNote that in GLM, fovy is expressed in radians, not degrees.\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluPickMatrix:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml)\n\n```cpp\nglm::mat4 pickMatrix(glm::vec2 const& center, glm::vec2 const& delta, glm::ivec4 const& viewport);\nglm::dmat4 pickMatrix(glm::dvec2 const& center, glm::dvec2 const& delta, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluProject:***](http://www.opengl.org/sdk/docs/man2/xhtml/gluProject.xml)\n\n```cpp\nglm::vec3 project(glm::vec3 const& obj, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport);\nglm::dvec3 project(glm::dvec3 const& obj, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluUnProject:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluUnProject.xml)\n\n```cpp\nglm::vec3 unProject(glm::vec3 const& win, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport);\nglm::dvec3 unProject(glm::dvec3 const& win, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section6\"></a> 6. Known issues\n\nThis section reports GLSL features that GLM can't accurately emulate due to language restrictions.\n\n### <a name=\"section6_1\"></a> 6.1. not function\n\nThe GLSL function 'not' is a keyword in C++. To prevent name collisions and ensure a consistent API, the name `not\\_` (note the underscore) is used instead.\n\n### <a name=\"section6_2\"></a> 6.2. Precision qualifiers support\n\nGLM supports GLSL precision qualifiers through prefixes instead of qualifiers. For example, GLM exposes \\verb|lowp_vec4|, \\verb|mediump_vec4| and \\verb|highp_vec4| as variations of \\verb|vec4|.\n\nSimilarly to GLSL, GLM precision qualifiers are used to trade precision of operations in term of [ULPs](http://en.wikipedia.org/wiki/Unit_in_the_last_place) for better performance. By default, all the types use high precision.\n\n```cpp\n// Using precision qualifier in GLSL:\n\nivec3 foo(in vec4 v)\n{\n    highp vec4 a = v;\n    mediump vec4 b = a;\n    lowp ivec3 c = ivec3(b);\n    return c;\n}\n\n// Using precision qualifier in GLM:\n\n#include <glm/glm.hpp>\n\nivec3 foo(const vec4 & v)\n{\n    highp_vec4 a = v;\n    medium_vec4 b = a;\n    lowp_ivec3 c = glm::ivec3(b);\n    return c;\n}\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section7\"></a> 7. FAQ\n\n### <a name=\"section7_1\"></a> 7.1 Why GLM follows GLSL specification and conventions?\n\nFollowing GLSL conventions is a really strict policy of GLM. It has been designed following the idea that everyone does its own math library with his own conventions. The idea is that brilliant developers (the OpenGL ARB) worked together and agreed to make GLSL. Following GLSL conventions\nis a way to find consensus. Moreover, basically when a developer knows GLSL, he knows GLM.\n\n### <a name=\"section7_2\"></a> 7.2. Does GLM run GLSL program?\n\nNo, GLM is a C++ implementation of a subset of GLSL.\n\n### <a name=\"section7_3\"></a> 7.3. Does a GLSL compiler build GLM codes?\n\nNo, this is not what GLM attends to do.\n\n### <a name=\"section7_4\"></a> 7.4. Should I use ‘GTX’ extensions?\n\nGTX extensions are qualified to be experimental extensions. In GLM this means that these extensions might change from version to version without any restriction. In practice, it doesn’t really change except time to\ntime. GTC extensions are stabled, tested and perfectly reliable in time. Many GTX extensions extend GTC extensions and provide a way to explore features and implementations and APIs and then are promoted to GTC\nextensions. This is fairly the way OpenGL features are developed; through extensions.\n\nStating with GLM 0.9.9, to use experimental extensions, an application must define GLM_ENABLE_EXPERIMENTAL.\n\n### <a name=\"section7_5\"></a> 7.5. Where can I ask my questions?\n\nA good place is [stackoverflow](http://stackoverflow.com/search?q=GLM) using the GLM tag.\n\n### <a name=\"section7_6\"></a> 7.6. Where can I find the documentation of extensions?\n\nThe Doxygen generated documentation includes a complete list of all extensions available. Explore this [*API documentation*](http://glm.g-truc.net/html/index.html) to get a complete\nview of all GLM capabilities!\n\n### <a name=\"section7_7\"></a> 7.7. Should I use ‘using namespace glm;’?\n\nNO! Chances are that if using namespace glm; is called, especially in a header file, name collisions will happen as GLM is based on GLSL which uses common tokens for types and functions. Avoiding using namespace\nglm; will a higher compatibility with third party library and SDKs.\n\n### <a name=\"section7_8\"></a> 7.8. Is GLM fast?\n\nGLM is mainly designed to be convenient and that's why it is written against the GLSL specification.\n\nFollowing the Pareto principle where 20% of the code consumes 80% of the execution time, GLM operates perfectly on the 80% of the code that consumes 20% of the performances. Furthermore, thanks to the lowp,\nmediump and highp qualifiers, GLM provides approximations which trade precision for performance. Finally, GLM can automatically produce SIMD optimized code for functions of its implementation.\n\nHowever, on performance critical code paths, we should expect that dedicated algorithms should be written to reach peak performance.\n\n### <a name=\"section7_9\"></a> 7.9. When I build with Visual C++ with /W4 warning level, I have warnings...\n\nYou should not have any warnings even in `/W4` mode. However, if you expect such level for your code, then you should ask for the same level to the compiler by at least disabling the Visual C++ language extensions\n(`/Za`) which generates warnings when used. If these extensions are enabled, then GLM will take advantage of them and the compiler will generate warnings.\n\n### <a name=\"section7_10\"></a> 7.10. Why some GLM functions can crash because of division by zero?\n\nGLM functions crashing is the result of a domain error. Such behavior follows the precedent set by C and C++'s standard library. For example, it’s a domain error to pass a null vector (all zeroes) to glm::normalize function, or to pass a negative number into std::sqrt.\n\n### <a name=\"section7_11\"></a> 7.11. What unit for angles is used in GLM?\n\nGLSL is using radians but GLU is using degrees to express angles. This has caused GLM to use inconsistent units for angles. Starting with GLM 0.9.6, all GLM functions are using radians. For more information, follow\nthe [link](http://www.g-truc.net/post-0693.html#menu).\n\n### <a name=\"section7_12\"></a> 7.12. Windows headers cause build errors...\n\nSome Windows headers define min and max as macros which may cause compatibility with third party libraries such as GLM.\nIt is highly recommended to [`define NOMINMAX`](http://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c) before including Windows headers to workaround this issue.\nTo workaround the incompatibility with these macros, GLM will systematically undef these macros if they are defined.\n\n### <a name=\"section7_13\"></a> 7.13. Constant expressions support\n\nGLM has some C++ [constant expressions](http://en.cppreference.com/w/cpp/language/constexpr) support. However, GLM automatically detects the use of SIMD instruction sets through compiler arguments to populate its implementation with SIMD intrinsics.\nUnfortunately, GCC and Clang doesn't support SIMD instrinsics as constant expressions. To allow constant expressions on all vectors and matrices types, define `GLM_FORCE_PURE` before including GLM headers.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section8\"></a> 8. Code samples\n\nThis series of samples only shows various GLM features without consideration of any sort.\n\n### <a name=\"section8_1\"></a> 8.1. Compute a triangle normal\n\n```cpp\n#include <glm/glm.hpp> // vec3 normalize cross\n\nglm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c)\n{\n    return glm::normalize(glm::cross(c - a, b - a));\n}\n\n// A much faster but less accurate alternative:\n#include <glm/glm.hpp> // vec3 cross\n#include <glm/gtx/fast_square_root.hpp> // fastNormalize\n\nglm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c)\n{\n    return glm::fastNormalize(glm::cross(c - a, b - a));\n}\n```\n\n### <a name=\"section8_2\"></a> 8.2. Matrix transform\n\n```cpp\n#include <glm/glm.hpp> // vec3, vec4, ivec4, mat4\n#include <glm/gtc/matrix_transform.hpp> // translate, rotate, scale, perspective\n#include <glm/gtc/type_ptr.hpp> // value_ptr\n\nvoid setUniformMVP(GLuint Location, glm::vec3 const& Translate, glm::vec3 const& Rotate)\n{\n    glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);\n    glm::mat4 ViewTranslate = glm::translate(\n        glm::mat4(1.0f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(\n        ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n    glm::mat4 View = glm::rotate(ViewRotateX,\n        Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n    glm::mat4 Model = glm::scale(\n        glm::mat4(1.0f), glm::vec3(0.5f));\n    glm::mat4 MVP = Projection * View * Model;\n    glUniformMatrix4fv(Location, 1, GL_FALSE, glm::value_ptr(MVP));\n}\n```\n\n### <a name=\"section8_3\"></a> 8.3. Vector types\n\n```cpp\n#include <glm/glm.hpp> // vec2\n#include <glm/gtc/type_precision.hpp> // hvec2, i8vec2, i32vec2\n\nstd::size_t const VertexCount = 4;\n\n// Float quad geometry\nstd::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2);\nglm::vec2 const PositionDataF32[VertexCount] =\n{\n    glm::vec2(-1.0f,-1.0f),\n    glm::vec2( 1.0f,-1.0f),\n    glm::vec2( 1.0f, 1.0f),\n    glm::vec2(-1.0f, 1.0f)\n};\n\n// Half-float quad geometry\nstd::size_t const PositionSizeF16 = VertexCount * sizeof(glm::hvec2);\nglm::hvec2 const PositionDataF16[VertexCount] =\n{\n    glm::hvec2(-1.0f, -1.0f),\n    glm::hvec2( 1.0f, -1.0f),\n    glm::hvec2( 1.0f, 1.0f),\n    glm::hvec2(-1.0f, 1.0f)\n};\n\n// 8 bits signed integer quad geometry\nstd::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2);\nglm::i8vec2 const PositionDataI8[VertexCount] =\n{\n    glm::i8vec2(-1,-1),\n    glm::i8vec2( 1,-1),\n    glm::i8vec2( 1, 1),\n    glm::i8vec2(-1, 1)\n};\n\n// 32 bits signed integer quad geometry\nstd::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2);\nglm::i32vec2 const PositionDataI32[VertexCount] =\n{\n    glm::i32vec2(-1,-1),\n    glm::i32vec2( 1,-1),\n    glm::i32vec2( 1, 1),\n    glm::i32vec2(-1, 1)\n};\n```\n\n### <a name=\"section8_4\"></a> 8.4. Lighting\n\n```cpp\n#include <glm/glm.hpp> // vec3 normalize reflect dot pow\n#include <glm/gtc/random.hpp> // ballRand\n\n// vecRand3, generate a random and equiprobable normalized vec3\nglm::vec3 lighting(intersection const& Intersection, material const& Material, light const& Light, glm::vec3 const& View)\n{\n    glm::vec3 Color = glm::vec3(0.0f);\n    glm::vec3 LightVertor = glm::normalize(\n        Light.position() - Intersection.globalPosition() +\n        glm::ballRand(0.0f, Light.inaccuracy());\n\n    if(!shadow(Intersection.globalPosition(), Light.position(), LightVertor))\n    {\n        float Diffuse = glm::dot(Intersection.normal(), LightVector);\n        if(Diffuse &lt;= 0.0f)\n            return Color;\n\n        if(Material.isDiffuse())\n            Color += Light.color() * Material.diffuse() * Diffuse;\n\n        if(Material.isSpecular())\n        {\n            glm::vec3 Reflect = glm::reflect(-LightVector, Intersection.normal());\n            float Dot = glm::dot(Reflect, View);\n            float Base = Dot &gt; 0.0f ? Dot : 0.0f;\n            float Specular = glm::pow(Base, Material.exponent());\n            Color += Material.specular() \\* Specular;\n        }\n    }\n\n    return Color;\n}\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section9\"></a> 9. Contributing to GLM\n\n### <a name=\"section9_1\"></a> 9.1. Submitting bug reports\n\nBug should be reported on Github using the [issue page](https://github.com/g-truc/glm/issues).\n\nA minimal code to reproduce the issue will help.\n\nAdditional, bugs can be configuration specific. We can report the configuration by defining `GLM_FORCE_MESSAGES` before including GLM headers then build and copy paste the build messages GLM will output.\n\n```cpp\n#define GLM_FORCE_MESSAGES\n#include <glm/glm.hpp>\n```\n\nAn example of build messages generated by GLM:\n\n```plaintext\nGLM: 0.9.9.1\nGLM: C++ 17 with extensions\nGLM: GCC compiler detected\"\nGLM: x86 64 bits with AVX instruction set build target\nGLM: Linux platform detected\nGLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\nGLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\nGLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\nGLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\nGLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\n```\n\n### <a name=\"section9_2\"></a> 9.2. Contributing to GLM with pull request\n\nThis tutorial will show us how to successfully contribute a bug-fix to GLM using GitHub's Pull Request workflow.\n\nWe will be typing git commands in the Terminal. Mac and Linux users may have git pre-installed. You can download git from [here](http://git-scm.com/downloads).\n\nThe tutorial assumes you have some basic understanding of git concepts - repositories, branches, commits, etc. Explaining it all from scratch is beyond the scope of this tutorial. Some good links to learn git basics are: [Link 1](http://git-scm.com/book/en/Getting-Started-Git-Basics), [Link 2](https://www.atlassian.com/git/tutorial/git-basics)\n\n#### Step 1: Setup our GLM Fork\n\nWe will make our changes in our own copy of the GLM sitory. On the GLM GitHub repo and we press the Fork button.\nWe need to download a copy of our fork to our local machine. In the terminal, type:\n\n```plaintext\n>>> git clone <our-repository-fork-git-url>\n```\n\nThis will clone our fork repository into the current folder.\n\nWe can find our repository git url on the Github reposotory page. The url looks like this: `https://github.com/<our-username>/<repository-name>.git`\n\n#### Step 2: Synchronizing our fork\n\nWe can use the following command to add `upstream` (original project repository) as a remote repository so that we can fetch the latest GLM commits into our branch and keep our forked copy is synchronized.\n\n```plaintext\n>>> git remote add upstream https://github.com/processing/processing.git\n```\n\nTo synchronize our fork to the latest commit in the GLM repository, we can use the following command:\n\n```plaintext\n>>> git fetch upstream\n```\n\nThen, we can merge the remote master branch to our current branch:\n\n```plaintext\n>>> git merge upstream/master\n```\n\nNow our local copy of our fork has been synchronized. However, the fork's copy is not updated on GitHub's servers yet. To do that, use:\n\n```plaintext\n>>> git push origin master\n```\n\n#### Step 3: Modifying our GLM Fork\n\nOur fork is now setup and we are ready to modify GLM to fix a bug.\n\nIt's a good practice to make changes in our fork in a separate branch than the master branch because we can submit only one pull request per branch.\n\nBefore creating a new branch, it's best to synchronize our fork and then create a new branch from the latest master branch.\n\nIf we are not on the master branch, we should switch to it using:\n\n```plaintext\n>>> git checkout master\n```\n\nTo create a new branch called `bugifx`, we use:\n\n```plaintext\ngit branch bugfix\n```\n\nOnce the code changes for the fix is done, we need to commit the changes:\n\n```plaintext\n>>> git commit -m \"Resolve the issue that caused problem with a specific fix #432\"\n```\n\nThe commit message should be as specific as possible and finished by the bug number in the [GLM GitHub issue page](https://github.com/g-truc/glm/issues)\n\nFinally, we need to push our changes in our branch to our GitHub fork using:\n\n```plaintext\n>>> git push origin bugfix\n```\n\nSome things to keep in mind for a pull request:\n\n* Keep it minimal: Try to make the minimum required changes to fix the issue. If we have added any debugging code, we should remove it.\n* A fix at a time: The pull request should deal with one issue at a time only, unless two issue are so interlinked they must be fixed together.\n* Write a test: GLM is largely unit tests. Unit tests are in `glm/test` directory. We should also add tests for the fixes we provide to ensure future regression doesn't happen.\n* No whitespace changes: Avoid unnecessary formatting or whitespace changes in other parts of the code. Be careful with auto-format options in the code editor which can cause wide scale formatting changes.\n* Follow [GLM Code Style](#section9_3) for consistency.\n* Tests passes: Make sure GLM build and tests don't fail because of the changes.\n\n#### Step 4: Submitting a Pull Request\n\nWe need to submit a pull request from the `bugfix` branch to GLM's master branch.\n\nOn the fork github page, we can click on the *Pull Request* button. Then we can describe our pull request. Finally we press *Send Pull Request*.\n\nPlease be patient and give them some time to go through it.\n\nThe pull request review may suggest additional changes. So we can make those changes in our branch, and push those changes to our fork repository. Our pull request will always include the latest changes in our branch on GitHub, so we don't need to resubmit the pull request.\n\nOnce your changes have been accepted, a project maintainer will merge our pull request.\n\nWe are grateful to the users for their time and effort in contributing fixes.\n\n### <a name=\"section9_3\"></a> 9.3. Coding style\n\n#### Indentation\n\nAlways tabs. Never spaces.\n\n#### Spacing\n\nNo space after if. Use if(blah) not if (blah). Example if/else block:\n\n```cpp\nif(blah)\n{\n    // yes like this\n}\nelse\n{\n    // something besides\n}\n```\n\nSingle line if blocks:\n\n```cpp\nif(blah)\n    // yes like this\nelse\n    // something besides\n```\n\nNo spaces inside parens:\n\n```cpp\nif (blah)    // No\nif( blah )   // No\nif ( blah )  // No\nif(blah)     // Yes\n```\n\nUse spaces before/after commas:\n\n```cpp\nsomeFunction(apple,bear,cat);     // No\nsomeFunction(apple, bear, cat);   // Yes\n```\n\nUse spaces before/after use of `+, -, *, /, %, >>, <<, |, &, ^, ||, &&` operators:\n\n```cpp\nvec4 v = a + b;\n```\n\n#### Blank lines\n\nOne blank line after the function blocks.\n\n#### Comments\n\nAlways one space after the // in single line comments\n\nOne space before // at the end of a line (that has code as well)\n\nTry to use // comments inside functions, to make it easier to remove a whole block via /\\* \\*/\n\n#### Cases\n\n```cpp\n#define GLM_MY_DEFINE 76\n\nclass myClass\n{};\n\nmyClass const MyClass;\n\nnamespace glm{ // glm namespace is for public code\nnamespace detail // glm::detail namespace is for implementation detail\n{\n    float myFunction(vec2 const& V)\n    {\n        return V.x + V.y;\n    }\n\n    float myFunction(vec2 const* const V)\n    {\n        return V->x + V->y;\n    }\n}//namespace detail\n}//namespace glm\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section10\"></a> 10. References\n\n### <a name=\"section10_1\"></a> 10.1. OpenGL specifications\n\n* OpenGL 4.3 core specification\n* [GLSL 4.30 specification](http://www.opengl.org/registry/doc/GLSLangSpec.4.30.7.diff.pdf)\n![](media/image21.png){width=\"2.859722222222222in\" height=\"1.6083333333333334in\"}- [*GLU 1.3 specification*](http://www.opengl.org/documentation/specs/glu/glu1_3.pdf)\n\n### <a name=\"section10_2\"></a> 10.2. External links\n\n* [GLM on stackoverflow](http://stackoverflow.com/search?q=GLM)\n\n### <a name=\"section10_3\"></a> 10.3. Projects using GLM\n\n***[Leo’s Fortune](http://www.leosfortune.com/)***\n\nLeo’s Fortune is a platform adventure game where you hunt down the cunning and mysterious thief that stole your gold. Available on PS4, Xbox One, PC, Mac, iOS and Android.\n\nBeautifully hand-crafted levels bring the story of Leo to life in this epic adventure.\n\n“I just returned home to find all my gold has been stolen! For some devious purpose, the thief has dropped pieces of my gold like breadcrumbs through the woods.”\n\n“Despite this pickle of a trap, I am left with no choice but to follow the trail.”\n\n“Whatever lies ahead, I must recover my fortune.” -Leopold\n\n![](./doc/manual/references-leosfortune.jpeg)\n\n![](./doc/manual/references-leosfortune2.jpg)\n\n[***OpenGL 4.0 Shading Language Cookbook***](http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book?tag=rk/opengl4-abr1/0811)\n\nA set of recipes that demonstrates a wide of techniques for producing high-quality, real-time 3D graphics with GLSL 4.0, such as:\n\n* Using GLSL 4.0 to implement lighting and shading techniques.\n* Using the new features of GLSL 4.0 including tessellation and geometry shaders.\n* Using textures in GLSL as part of a wide variety of techniques from basic texture mapping to deferred shading.\n\nSimple, easy-to-follow examples with GLSL source code are provided, as well as a basic description of the theory behind each technique.\n\n![](./doc/manual/references-glsl4book.jpg)\n\n[***Outerra***](http://outerra.com/)\n\nA 3D planetary engine for seamless planet rendering from space down to the surface. Can use arbitrary resolution of elevation data, refining it to centimetre resolution using fractal algorithms.\n\n![](./doc/manual/references-outerra1.jpg)\n\n![](./doc/manual/references-outerra2.jpg)\n\n![](./doc/manual/references-outerra3.jpg)\n\n![](./doc/manual/references-outerra4.jpg)\n\n[***Falcor***](https://github.com/NVIDIA/Falcor)\n\nReal-time rendering research framework by NVIDIA.\n\n[***Cinder***](https://libcinder.org/)\n\nCinder is a free and open source library for professional-quality creative coding in C++.\n\nCinder is a C++ library for programming with aesthetic intent - the sort of development often called creative coding. This includes domains like graphics, audio, video, and computational geometry. Cinder is cross-platform, with official support for OS X, Windows, iOS, and WinRT.\n\nCinder is production-proven, powerful enough to be the primary tool for professionals, but still suitable for learning and experimentation. Cinder is released under the [2-Clause BSD License](http://opensource.org/licenses/BSD-2-Clause).\n\n![](./doc/manual/references-cinder.png)\n\n[***opencloth***](https://github.com/mmmovania/opencloth/)\n\nA collection of source codes implementing cloth simulation algorithms in OpenGL.\n\nSimple, easy-to-follow examples with GLSL source code, as well as a basic description of the theory behind each technique.\n\n![](./doc/manual/references-opencloth1.png)\n\n![](./doc/manual/references-opencloth3.png)\n\n[***LibreOffice***](https://www.libreoffice.org/)\n\nLibreOffice includes several applications that make it the most powerful Free and Open Source office suite on the market.\n\n[***Are you using GLM in a project?***](mailto:glm@g-truc.net)\n\n### <a name=\"section10_4\"></a> 10.4. Tutorials using GLM\n\n* [Sascha Willems' Vulkan examples](https://github.com/SaschaWillems/Vulkan), Examples and demos for the new Vulkan API\n* [VKTS](https://github.com/McNopper/Vulkan) Vulkan examples using VulKan ToolS (VKTS)\n* [*The OpenGL Samples Pack*](http://www.g-truc.net/project-0026.html#menu), samples that show how to set up all the different new features\n* [*Learning Modern 3D Graphics programming*](http://www.arcsynthesis.org/gltut/), a great OpenGL tutorial using GLM by Jason L. McKesson\n* [*Morten Nobel-Jørgensen’s*](http://blog.nobel-joergensen.com/2011/04/02/glm-brilliant-math-library-for-opengl/) review and use an [*OpenGL renderer*](https://github.com/mortennobel/RenderE)\n* [*Swiftless’ OpenGL tutorial*](http://www.swiftless.com/opengltuts.html) using GLM by Donald Urquhart\n* [*Rastergrid*](http://rastergrid.com/blog/), many technical articles with companion programs using GLM by Daniel Rákos\\\n* [*OpenGL Tutorial*](http://www.opengl-tutorial.org), tutorials for OpenGL 3.1 and later\n* [*OpenGL Programming on Wikibooks*](http://en.wikibooks.org/wiki/OpenGL_Programming): For beginners who are discovering OpenGL.\n* [*3D Game Engine Programming*](http://3dgep.com/): Learning the latest 3D Game Engine Programming techniques.\n* [Game Tutorials](http://www.gametutorials.com/opengl-4-matrices-and-glm/), graphics and game programming.\n* [open.gl](https://open.gl/), OpenGL tutorial\n* [c-jump](http://www.c-jump.com/bcc/common/Talk3/Math/GLM/GLM.html), GLM tutorial\n* [Learn OpenGL](http://learnopengl.com/), OpenGL tutorial\n* [***Are you using GLM in a tutorial?***](mailto:glm@g-truc.net)\n\n### <a name=\"section10_5\"></a> 10.5. Equivalent for other languages\n\n* [*cglm*](https://github.com/recp/cglm): OpenGL Mathematics (glm) for C.\n* [*GlmSharp*](https://github.com/Philip-Trettner/GlmSharp): Open-source semi-generated GLM-flavored math library for .NET/C\\#.\n* [glm-js](https://github.com/humbletim/glm-js): JavaScript adaptation of the OpenGL Mathematics (GLM) C++ library interfaces\n* [JVM OpenGL Mathematics (GLM)](https://github.com/kotlin-graphics/glm): written in Kotlin, Java compatible\n* [JGLM](https://github.com/jroyalty/jglm) - Java OpenGL Mathematics Library\n* [SwiftGL Math Library](https://github.com/SwiftGL/Math/blob/master/Sources/glm.swift) GLM for Swift\n* [glm-go](https://github.com/jbowtie/glm-go): Simple linear algebra library similar in spirit to GLM\n* [openll](https://github.com/Polkm/openll): Lua bindings for OpenGL, GLM, GLFW, OpenAL, SOIL and PhysicsFS\n* [glm-rs](https://github.com/dche/glm-rs): GLSL mathematics for Rust programming language\n* [glmpython](https://github.com/Queatz/glmpython): GLM math library for Python\n\n### <a name=\"section10_6\"></a> 10.6. Alternatives to GLM\n\n* [*CML*](http://cmldev.net/): The CML (Configurable Math Library) is a free C++ math library for games and graphics.\n* [*Eigen*](http://eigen.tuxfamily.org/): A more heavy weight math library for general linear algebra in C++.\n* [*glhlib*](http://glhlib.sourceforge.net/): A much more than glu C library.\n* Are you using or developing an alternative library to GLM?\n\n### <a name=\"section10_7\"></a> 10.7. Acknowledgements\n\nGLM is developed and maintained by [*Christophe Riccio*](http://www.g-truc.net) but many contributors have made this project what it is.\n\nSpecial thanks to:\n\n* Ashima Arts and Stefan Gustavson for their work on [*webgl-noise*](https://github.com/ashima/webgl-noise) which has been used for GLM noises implementation.\n* [*Arthur Winters*](http://athile.net/library/wiki/index.php?title=Athile_Technologies) for the C++11 and Visual C++ swizzle operators implementation and tests.\n* Joshua Smith and Christoph Schied for the discussions and the experiments around the swizzle operators implementation issues.\n* Guillaume Chevallereau for providing and maintaining the [*nightlight build system*](http://my.cdash.org/index.php?project=GLM).\n* Ghenadii Ursachi for GLM\\_GTX\\_matrix\\_interpolation implementation.\n* Mathieu Roumillac for providing some implementation ideas.\n* [*Grant James*](http://www.zeuscmd.com/) for the implementation of all combination of none-squared matrix products.\n* Jesse Talavera-Greenberg for his work on the manual amount other things.\n* All the GLM users that have report bugs and hence help GLM to become a great library!\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/readme.md",
    "content": "![glm](/doc/manual/logo-mini.png)\n\n[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++ mathematics library for graphics software based on the [OpenGL Shading Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangSpec.4.50.diff.pdf).\n\n*GLM* provides classes and functions designed and implemented with the same naming conventions and functionality than *GLSL* so that anyone who knows *GLSL*, can use *GLM* as well in C++.\n\nThis project isn't limited to *GLSL* features. An extension system, based on the *GLSL* extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc...\n\nThis library works perfectly with *[OpenGL](https://www.opengl.org)* but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physics simulations and any development context that requires a simple and convenient mathematics library.\n\n*GLM* is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:\n- [*GCC*](http://gcc.gnu.org/) 4.7 and higher\n- [*Intel C++ Compose*](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher\n- [*Clang*](http://llvm.org/) 3.4 and higher\n- [*Apple Clang 6.0*](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher\n- [*Visual C++*](http://www.visualstudio.com/) 2013 and higher\n- [*CUDA*](https://developer.nvidia.com/about-cuda) 9.0 and higher (experimental)\n- [*SYCL*](https://www.khronos.org/sycl/) (experimental: only [ComputeCpp](https://codeplay.com/products/computesuite/computecpp) implementation has been tested).\n- Any C++11 compiler\n\nFor more information about *GLM*, please have a look at the [manual](manual.md) and the [API reference documentation](http://glm.g-truc.net/0.9.8/api/index.html).\nThe source code and the documentation are licensed under either the [Happy Bunny License (Modified MIT) or the MIT License](manual.md#section0).\n\nThanks for contributing to the project by [submitting pull requests](https://github.com/g-truc/glm/pulls).\n\n```cpp\n#include <glm/vec3.hpp> // glm::vec3\n#include <glm/vec4.hpp> // glm::vec4\n#include <glm/mat4x4.hpp> // glm::mat4\n#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale\n#include <glm/ext/matrix_clip_space.hpp> // glm::perspective\n#include <glm/ext/scalar_constants.hpp> // glm::pi\n\nglm::mat4 camera(float Translate, glm::vec2 const& Rotate)\n{\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f);\n\tglm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));\n\treturn Projection * View * Model;\n}\n```\n\n## [Lastest release](https://github.com/g-truc/glm/releases/latest)\n\n## Project Health\n\n| Service | System | Compiler | Status |\n| ------- | ------ | -------- | ------ |\n| [Travis CI](https://travis-ci.org/g-truc/glm)| MacOSX, Linux 64 bits | Clang 3.6, Clang 5.0, GCC 4.9, GCC 7.3 | [![Travis CI](https://travis-ci.org/g-truc/glm.svg?branch=master)](https://travis-ci.org/g-truc/glm)\n| [AppVeyor](https://ci.appveyor.com/project/Groovounet/glm)| Windows 32 and 64 | Visual Studio 2013, Visual Studio 2015, Visual Studio 2017 | [![AppVeyor](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true)](https://ci.appveyor.com/project/Groovounet/glm)\n\n## Release notes\n\n### [GLM 0.9.9.9](https://github.com/g-truc/glm/releases/tag/0.9.9.9) - 2020-XX-XX\n#### Features:\n- Added *GLM_EXT_scalar_reciprocal* with tests\n- Added *GLM_EXT_vector_reciprocal* with tests\n- Added `glm::iround` and `glm::uround` to *GLM_EXT_scalar_common* and *GLM_EXT_vector_common*\n- Added *GLM_EXT_matrix_integer* with tests\n\n#### Improvements:\n- Added `constexpr` qualifier for `cross` product #1040\n- Added `constexpr` qualifier for `dot` product #1040\n\n#### Fixes:\n- Fixed incorrect assertion for `glm::min` and `glm::max` #1009\n- Fixed quaternion orientation in `glm::decompose` #1012\n- Fixed singularity in quaternion to euler angle roll conversion #1019\n- Fixed `quat` `glm::pow` handling of small magnitude quaternions #1022\n- Fixed `glm::fastNormalize` build error #1033\n- Fixed `glm::isMultiple` build error #1034\n- Fixed `glm::adjugate` calculation #1035\n- Fixed `glm::angle` discards the sign of result for angles in range (2*pi-1, 2*pi) #1038\n- Removed ban on using `glm::string_cast` with *CUDA* host code #1041\n\n### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) - 2020-04-13\n#### Features:\n- Added *GLM_EXT_vector_intX* and *GLM_EXT_vector_uintX* extensions\n- Added *GLM_EXT_matrix_intX* and *GLM_EXT_matrix_uintX* extensions\n\n#### Improvements:\n- Added `glm::clamp`, `glm::repeat`, `glm::mirrorClamp` and `glm::mirrorRepeat` function to `GLM_EXT_scalar_commond` and `GLM_EXT_vector_commond` extensions with tests\n\n#### Fixes:\n- Fixed unnecessary warnings from `matrix_projection.inl` #995\n- Fixed quaternion `glm::slerp` overload which interpolates with extra spins #996\n- Fixed for `glm::length` using arch64 #992\n- Fixed singularity check for `glm::quatLookAt` #770\n\n### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) - 2020-01-05\n#### Improvements:\n- Improved *Neon* support with more functions optimized #950\n- Added *CMake* *GLM* interface #963\n- Added `glm::fma` implementation based on `std::fma` #969\n- Added missing quat constexpr #955\n- Added `GLM_FORCE_QUAT_DATA_WXYZ` to store quat data as w,x,y,z instead of x,y,z,w #983\n\n#### Fixes:\n- Fixed equal *ULP* variation when using negative sign #965\n- Fixed for intersection ray/plane and added related tests #953\n- Fixed ARM 64bit detection #949\n- Fixed *GLM_EXT_matrix_clip_space* warnings #980\n- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986\n- Fixed *GLM_EXT_matrix_clip_space* `perspectiveFov`\n\n### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) - 2019-09-08\n#### Features:\n- Added *Neon* support #945\n- Added *SYCL* support #914\n- Added *GLM_EXT_scalar_integer* extension with power of two and multiple scalar functions\n- Added *GLM_EXT_vector_integer* extension with power of two and multiple vector functions\n\n#### Improvements:\n- Added *Visual C++ 2019* detection\n- Added *Visual C++ 2017* 15.8 and 15.9 detection\n- Added missing genType check for `glm::bitCount` and `glm::bitfieldReverse` #893\n\n#### Fixes:\n- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of 201402 #921\n- Fixed hash hashes qua instead of tquat #919\n- Fixed `.natvis` as structs renamed #915\n- Fixed `glm::ldexp` and `glm::frexp` declaration #895\n- Fixed missing const to quaternion conversion operators #890\n- Fixed *GLM_EXT_scalar_ulp* and *GLM_EXT_vector_ulp* API coding style\n- Fixed quaternion componant order: `w, {x, y, z}` #916\n- Fixed `GLM_HAS_CXX11_STL` broken on Clang with Linux #926\n- Fixed *Clang* or *GCC* build due to wrong `GLM_HAS_IF_CONSTEXPR` definition #907\n- Fixed *CUDA* 9 build #910\n\n#### Deprecation:\n - Removed CMake install and uninstall scripts\n\n### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) - 2019-04-01\n#### Fixes:\n- Fixed build errors when defining `GLM_ENABLE_EXPERIMENTAL` #884 #883\n- Fixed `if constexpr` warning #887\n- Fixed missing declarations for `glm::frexp` and `glm::ldexp` #886\n\n### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) - 2019-03-19\n#### Features:\n- Added `glm::mix` implementation for matrices in *GLM_EXT_matrix_common/ #842\n- Added *CMake* `BUILD_SHARED_LIBS` and `BUILD_STATIC_LIBS` build options #871\n\n#### Improvements:\n- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By default, it's disabled allowing constexpr support by default. #865\n- Optimized inverseTransform #867\n\n#### Fixes:\n- Fixed in `glm::mat4x3` conversion #829\n- Fixed `constexpr` issue on GCC #832 #865\n- Fixed `glm::mix` implementation to improve GLSL conformance #866\n- Fixed `glm::int8` being defined as unsigned char with some compiler #839\n- Fixed `glm::vec1` include #856\n- Ignore `.vscode` #848\n\n### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) - 2018-10-31\n#### Features:\n- Added `glm::equal` and `glm::notEqual` overload with max ULPs parameters for scalar numbers #121\n- Added `GLM_FORCE_SILENT_WARNINGS` to silent *GLM* warnings when using language extensions but using W4 or Wpedantic warnings #814 #775\n- Added adjugate functions to `GLM_GTX_matrix_operation` #151\n- Added `GLM_FORCE_ALIGNED_GENTYPES` to enable aligned types and SIMD instruction are not enabled. This disable `constexpr` #816\n\n#### Improvements:\n- Added constant time ULP distance between float #121\n- Added `GLM_FORCE_SILENT_WARNINGS` to suppress *GLM* warnings #822\n\n#### Fixes:\n- Fixed `glm::simplex` noise build with double #734\n- Fixed `glm::bitfieldInsert` according to GLSL spec #818\n- Fixed `glm::refract` for negative 'k' #808\n\n### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) - 2018-09-14\n#### Fixes:\n- Fixed `GLM_FORCE_CXX**` section in the manual\n- Fixed default initialization with vector and quaternion types using `GLM_FORCE_CTOR_INIT` #812\n\n### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) - 2018-09-03\n#### Features:\n- Added `bitfieldDeinterleave` to *GLM_GTC_bitfield*\n- Added missing `glm::equal` and `glm::notEqual` with epsilon for quaternion types to *GLM_GTC_quaternion*\n- Added *GLM_EXT_matrix_relational*: `glm::equal` and `glm::notEqual` with epsilon for matrix types\n- Added missing aligned matrix types to *GLM_GTC_type_aligned*\n- Added C++17 detection\n- Added *Visual C++* language standard version detection\n- Added PDF manual build from markdown\n\n#### Improvements:\n- Added a section to the manual for contributing to *GLM*\n- Refactor manual, lists all configuration defines\n- Added missing `glm::vec1` based constructors\n- Redesigned constexpr support which excludes both SIMD and `constexpr` #783\n- Added detection of *Visual C++ 2017* toolsets\n- Added identity functions #765\n- Splitted headers into EXT extensions to improve compilation time #670\n- Added separated performance tests\n- Clarified refract valid range of the indices of refraction, between -1 and 1 inclusively #806\n\n#### Fixes:\n- Fixed SIMD detection on *Clang* and *GCC*\n- Fixed build problems due to `std::printf` and `std::clock_t` #778\n- Fixed int mod\n- Anonymous unions require C++ language extensions\n- Fixed `glm::ortho` #790\n- Fixed *Visual C++* 2013 warnings in vector relational code #782\n- Fixed *ICC* build errors with constexpr #704\n- Fixed defaulted operator= and constructors #791\n- Fixed invalid conversion from int scalar with vec4 constructor when using SSE instruction\n- Fixed infinite loop in random functions when using negative radius values using an assert #739\n\n### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) - 2018-05-22\n#### Features:\n- Added *RGBM* encoding in *GLM_GTC_packing* #420\n- Added *GLM_GTX_color_encoding* extension\n- Added *GLM_GTX_vec_swizzle*, faster compile time swizzling then swizzle operator #558\n- Added *GLM_GTX_exterior_product* with a `vec2` `glm::cross` implementation #621\n- Added *GLM_GTX_matrix_factorisation* to factor matrices in various forms #654\n- Added [`GLM_ENABLE_EXPERIMENTAL`](manual.md#section7_4) to enable experimental features.\n- Added packing functions for integer vectors #639\n- Added conan packaging configuration #643 #641\n- Added `glm::quatLookAt` to *GLM_GTX_quaternion* #659\n- Added `glm::fmin`, `glm::fmax` and `glm::fclamp` to *GLM_GTX_extended_min_max* #372\n- Added *GLM_EXT_vector_relational*: extend `glm::equal` and `glm::notEqual` to take an epsilon argument\n- Added *GLM_EXT_vector_relational*: `glm::openBounded` and `glm::closeBounded`\n- Added *GLM_EXT_vec1*: `*vec1` types\n- Added *GLM_GTX_texture*: `levels` function\n- Added spearate functions to use both nagative one and zero near clip plans #680\n- Added `GLM_FORCE_SINGLE_ONLY` to use *GLM* on platforms that don't support double #627\n- Added *GLM_GTX_easing* for interpolation functions #761\n\n#### Improvements:\n- No more default initialization of vector, matrix and quaternion types\n- Added lowp variant of GTC_color_space convertLinearToSRGB #419\n- Replaced the manual by a markdown version #458\n- Improved API documentation #668\n- Optimized GTC_packing implementation\n- Optimized GTC_noise functions\n- Optimized GTC_color_space HSV to RGB conversions\n- Optimised GTX_color_space_YCoCg YCoCgR conversions\n- Optimized GTX_matrix_interpolation axisAngle function\n- Added FAQ 12: Windows headers cause build errors... #557\n- Removed GCC shadow warnings #595\n- Added error for including of different versions of GLM #619\n- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including different version of GLM #619\n- Reduced warnings when using very strict compilation flags #646\n- length() member functions are constexpr #657\n- Added support of -Weverything with Clang #646\n- Improved exponential function test coverage\n- Enabled warnings as error with Clang unit tests\n- Conan package is an external repository: https://github.com/bincrafters/conan-glm\n- Clarify quat_cast documentation, applying on pure rotation matrices #759\n\n#### Fixes:\n- Removed doxygen references to *GLM_GTC_half_float* which was removed in 0.9.4\n- Fixed `glm::decompose` #448\n- Fixed `glm::intersectRayTriangle` #6\n- Fixed dual quaternion != operator #629\n- Fixed usused variable warning in *GLM_GTX_spline* #618\n- Fixed references to `GLM_FORCE_RADIANS` which was removed #642\n- Fixed `glm::fastInverseSqrt` to use fast inverse square #640\n- Fixed `glm::axisAngle` NaN #638\n- Fixed integer pow from *GLM_GTX_integer* with null exponent #658\n- Fixed `quat` `normalize` build error #656\n- Fixed *Visual C++ 2017.2* warning regarding `__has_feature` definision #655\n- Fixed documentation warnings\n- Fixed `GLM_HAS_OPENMP` when *OpenMP* is not enabled\n- Fixed Better follow GLSL `min` and `max` specification #372\n- Fixed quaternion constructor from two vectors special cases #469\n- Fixed `glm::to_string` on quaternions wrong components order #681\n- Fixed `glm::acsch` #698\n- Fixed `glm::isnan` on *CUDA* #727\n\n#### Deprecation:\n- Requires *Visual Studio 2013*, *GCC 4.7*, *Clang 3.4*, *Cuda 7*, *ICC 2013* or a C++11 compiler\n- Removed *GLM_GTX_simd_vec4* extension\n- Removed *GLM_GTX_simd_mat4* extension\n- Removed *GLM_GTX_simd_quat* extension\n- Removed `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead\n- Removed `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead\n- Removed `GLM_DEPTH_ZERO_TO_ONE`, use `GLM_FORCE_DEPTH_ZERO_TO_ONE` instead\n- Removed `GLM_LEFT_HANDED`, use `GLM_FORCE_LEFT_HANDED` instead\n- Removed `GLM_FORCE_NO_CTOR_INIT`\n- Removed `glm::uninitialize`\n\n---\n### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) - 2017-08-16\n#### Features:\n- Added *Conan* package support #647\n\n#### Fixes:\n- Fixed *Clang* version detection from source #608\n- Fixed `glm::packF3x9_E1x5` exponent packing #614\n- Fixed build error `min` and `max` specializations with integer #616\n- Fixed `simd_mat4` build error #652\n\n---\n### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) - 2017-01-22\n#### Fixes:\n- Fixed *GLM_GTC_packing* test failing on *GCC* x86 due to denorms #212 #577\n- Fixed `POPCNT` optimization build in *Clang* #512\n- Fixed `glm::intersectRayPlane` returns true in parallel case #578\n- Fixed *GCC* 6.2 compiler warnings #580\n- Fixed *GLM_GTX_matrix_decompose* `glm::decompose` #582 #448\n- Fixed *GCC* 4.5 and older build #566\n- Fixed *Visual C++* internal error when declaring a global vec type with siwzzle expression enabled #594\n- Fixed `GLM_FORCE_CXX11` with Clang and libstlc++ which wasn't using C++11 STL features. #604\n\n---\n### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) - 2016-11-12\n#### Improvements:\n- Broader support of `GLM_FORCE_UNRESTRICTED_GENTYPE` #378\n\n#### Fixes:\n- Fixed Android build error with C++11 compiler but C++98 STL #284 #564\n- Fixed *GLM_GTX_transform2* shear* functions #403\n- Fixed interaction between `GLM_FORCE_UNRESTRICTED_GENTYPE` and `glm::ortho` function #568\n- Fixed `glm::bitCount` with AVX on 32 bit builds #567\n- Fixed *CMake* `find_package` with version specification #572 #573\n\n---\n### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) - 2016-11-01\n#### Improvements:\n- Added *Visual C++* 15 detection\n- Added *Clang* 4.0 detection\n- Added warning messages when using `GLM_FORCE_CXX**` but the compiler\n  is known to not fully support the requested C++ version #555\n- Refactored `GLM_COMPILER_VC` values\n- Made quat, vec, mat type component `length()` static #565\n\n#### Fixes:\n- Fixed *Visual C++* `constexpr` build error #555, #556\n\n---\n### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) - 2016-09-25\n#### Improvements:\n- Optimized quaternion `glm::log` function #554\n\n#### Fixes:\n- Fixed *GCC* warning filtering, replaced -pedantic by -Wpedantic\n- Fixed SIMD faceforward bug. #549\n- Fixed *GCC* 4.8 with C++11 compilation option #550\n- Fixed *Visual Studio* aligned type W4 warning #548\n- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552\n\n---\n### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) - 2016-09-11\n#### Features:\n- Added right and left handed projection and clip control support #447 #415 #119\n- Added `glm::compNormalize` and `glm::compScale` functions to *GLM_GTX_component_wise*\n- Added `glm::packF3x9_E1x5` and `glm::unpackF3x9_E1x5` to *GLM_GTC_packing* for RGB9E5 #416\n- Added `(un)packHalf` to *GLM_GTC_packing*\n- Added `(un)packUnorm` and `(un)packSnorm` to *GLM_GTC_packing*\n- Added 16bit pack and unpack to *GLM_GTC_packing*\n- Added 8bit pack and unpack to *GLM_GTC_packing*\n- Added missing `bvec*` && and || operators\n- Added `glm::iround` and `glm::uround` to *GLM_GTC_integer*, fast round on positive values\n- Added raw SIMD API\n- Added 'aligned' qualifiers\n- Added *GLM_GTC_type_aligned* with aligned *vec* types\n- Added *GLM_GTC_functions* extension\n- Added quaternion version of `glm::isnan` and `glm::isinf` #521\n- Added `glm::lowestBitValue` to *GLM_GTX_bit* #536\n- Added `GLM_FORCE_UNRESTRICTED_GENTYPE` allowing non basic `genType` #543\n\n#### Improvements:\n- Improved SIMD and swizzle operators interactions with *GCC* and *Clang* #474\n- Improved *GLM_GTC_random* `linearRand` documentation\n- Improved *GLM_GTC_reciprocal* documentation\n- Improved `GLM_FORCE_EXPLICIT_CTOR` coverage #481\n- Improved *OpenMP* support detection for *Clang*, *GCC*, *ICC* and *VC*\n- Improved *GLM_GTX_wrap* for SIMD friendliness\n- Added `constexpr` for `*vec*`, `*mat*`, `*quat*` and `*dual_quat*` types #493\n- Added *NEON* instruction set detection\n- Added *MIPS* CPUs detection\n- Added *PowerPC* CPUs detection\n- Use *Cuda* built-in function for abs function implementation with Cuda compiler\n- Factorized `GLM_COMPILER_LLVM` and `GLM_COMPILER_APPLE_CLANG` into `GLM_COMPILER_CLANG`\n- No more warnings for use of long long\n- Added more information to build messages\n\n#### Fixes:\n- Fixed *GLM_GTX_extended_min_max* filename typo #386\n- Fixed `glm::intersectRayTriangle` to not do any unintentional backface culling\n- Fixed long long warnings when using C++98 on *GCC* and *Clang* #482\n- Fixed sign with signed integer function on non-x86 architecture\n- Fixed strict aliasing warnings #473\n- Fixed missing `glm::vec1` overload to `glm::length2` and `glm::distance2` functions #431\n- Fixed *GLM* test '/fp:fast' and '/Za' command-line options are incompatible\n- Fixed quaterion to mat3 cast function `glm::mat3_cast` from *GLM_GTC_quaternion* #542\n- Fixed *GLM_GTX_io* for *Cuda* #547 #546\n\n#### Deprecation:\n- Removed `GLM_FORCE_SIZE_FUNC` define\n- Deprecated *GLM_GTX_simd_vec4* extension\n- Deprecated *GLM_GTX_simd_mat4* extension\n- Deprecated *GLM_GTX_simd_quat* extension\n- Deprecated `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead\n- Deprecated `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead\n\n---\n### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16\n#### Improvements:\n- Added pkg-config file #509\n- Updated list of compiler versions detected\n- Improved C++ 11 STL detection #523\n\n#### Fixes:\n- Fixed STL for C++11 detection on ICC #510\n- Fixed missing vec1 overload to length2 and distance2 functions #431\n- Fixed long long warnings when using C++98 on GCC and Clang #482\n- Fixed scalar reciprocal functions (GTC_reciprocal) #520\n\n---\n### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24\n#### Improvements:\n- Added Visual C++ Clang toolset detection\n\n#### Fixes:\n- Fixed uaddCarry warning #497\n- Fixed roundPowerOfTwo and floorPowerOfTwo #503\n- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits\n- Fixed to_string when used with GLM_FORCE_INLINE #506\n- Fixed GLM_FORCE_INLINE with binary vec4 operators\n- Fixed GTX_extended_min_max filename typo #386\n- Fixed intersectRayTriangle to not do any unintentional backface culling\n\n---\n### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19\n#### Fixes:\n- Fixed asinh and atanh warning with C++98 STL #484\n- Fixed polar coordinates function latitude #485\n- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4 #475\n- Fixed eulerAngles precision error, returns NaN  #451\n- Fixed undefined reference errors #489\n- Fixed missing GLM_PLATFORM_CYGWIN declaration #495\n- Fixed various undefined reference errors #490\n\n---\n### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21\n#### Improvements:\n- Added AVX512 detection\n\n#### Fixes:\n- Fixed CMake policy warning\n- Fixed GCC 6.0 detection #477\n- Fixed Clang build on Windows #479\n- Fixed 64 bits constants warnings on GCC #463\n\n---\n### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03\n#### Fixes:\n- Fixed GTC_round floorMultiple/ceilMultiple #412\n- Fixed GTC_packing unpackUnorm3x10_1x2 #414\n- Fixed GTC_matrix_inverse affineInverse #192\n- Fixed ICC on Linux build errors #449\n- Fixed ldexp and frexp compilation errors\n- Fixed \"Declaration shadows a field\" warning #468\n- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468\n- Fixed various 'X is not defined' warnings #468\n- Fixed missing unary + operator #435\n- Fixed Cygwin build errors when using C++11 #405\n\n---\n### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07\n#### Improvements:\n- Improved constexpr for constant functions coverage #198\n- Added to_string for quat and dual_quat in GTX_string_cast #375\n- Improved overall execution time of unit tests #396\n\n#### Fixes:\n- Fixed strict alignment warnings #235 #370\n- Fixed link errors on compilers not supported default function #377\n- Fixed compilation warnings in vec4\n- Fixed non-identity quaternions for equal vectors #234\n- Fixed excessive GTX_fast_trigonometry execution time #396\n- Fixed Visual Studio 2015 'hides class member' warnings #394\n- Fixed builtin bitscan never being used #392\n- Removed unused func_noise.* files #398\n\n---\n### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02\n#### Features:\n- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions\n- Added 'fmod' overload to GTX_common with tests #308\n- Left handed perspective and lookAt functions #314\n- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311\n- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367\n- Added <glm/gtx/wrap.hpp> for texcoord wrapping\n- Added static components and precision members to all vector and quat types #350\n- Added .gitignore #349\n- Added support of defaulted functions to GLM types, to use them in unions #366\n\n#### Improvements:\n- Changed usage of __has_include to support Intel compiler #307\n- Specialized integer implementation of YCoCg-R #310\n- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317\n- Added master branch continuous integration service on Linux 64 #332\n- Clarified manual regarding angle unit in GLM, added FAQ 11 #326\n- Updated list of compiler versions\n\n#### Fixes:\n- Fixed default precision for quat and dual_quat type #312\n- Fixed (u)int64 MSB/LSB handling on BE archs #306\n- Fixed multi-line comment warning in g++. #315\n- Fixed specifier removal by 'std::make_pair<>' #333\n- Fixed perspective fovy argument documentation #327\n- Removed -m64 causing build issues on Linux 32 #331\n- Fixed isfinite with C++98 compilers #343\n- Fixed Intel compiler build error on Linux #354\n- Fixed use of libstdc++ with Clang #351\n- Fixed quaternion pow #346\n- Fixed decompose warnings #373\n- Fixed matrix conversions #371\n\n#### Deprecation:\n- Removed integer specification for 'mod' in GTC_integer #308\n- Removed GTX_multiple, replaced by GTC_round\n\n---\n### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) - 2015-02-15\n- Fixed Android doesn't have C++ 11 STL #284\n\n---\n### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) - 2015-02-15\n#### Features:\n- Added display of GLM version with other GLM_MESSAGES\n- Added ARM instruction set detection\n\n#### Improvements:\n- Removed assert for perspective with zFar < zNear #298\n- Added Visual Studio natvis support for vec1, quat and dualqual types\n- Cleaned up C++11 feature detections\n- Clarify GLM licensing\n\n#### Fixes:\n- Fixed faceforward build #289\n- Fixed conflict with Xlib #define True 1 #293\n- Fixed decompose function VS2010 templating issues #294\n- Fixed mat4x3 = mat2x3 * mat4x2 operator #297\n- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295\n- Fixed Visual Studio natvis support for vec4 #288\n- Fixed GTC_packing *pack*norm*x* build and added tests #292\n- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242\n- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support\n- Fixed functions not inlined with Clang #302\n- Fixed memory corruption (undefined behaviour) #303\n\n---\n### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) - 2014-12-10\n#### Features:\n- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags\n- Added C++14 detection\n\n#### Improvements:\n- Clean up GLM_MESSAGES compilation log to report only detected capabilities\n\n#### Fixes:\n- Fixed scalar uaddCarry build error with Cuda #276\n- Fixed C++11 explicit conversion operators detection #282\n- Fixed missing explicit conversion when using integer log2 with *vec1 types\n- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler\n- Fixed Android build issue, STL C++11 is not supported by the NDK #284\n- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10\n- Fixed Visual C++ 32 bit build #283\n- Fixed GLM_FORCE_SIZE_FUNC pragma message\n- Fixed C++98 only build\n- Fixed conflict between GTX_compatibility and GTC_quaternion #286\n- Fixed C++ language restriction using GLM_FORCE_CXX**\n\n---\n### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) - 2014-11-30\n#### Features:\n- Exposed template vector and matrix types in 'glm' namespace #239, #244\n- Added GTX_scalar_multiplication for C++ 11 compiler only #242\n- Added GTX_range for C++ 11 compiler only #240\n- Added closestPointOnLine function for tvec2 to GTX_closest_point #238\n- Added GTC_vec1 extension, *vec1 support to *vec* types\n- Updated GTX_associated_min_max with vec1 support\n- Added support of precision and integers to linearRand #230\n- Added Integer types support to GTX_string_cast #249\n- Added vec3 slerp #237\n- Added GTX_common with isdenomal #223\n- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245\n- Added GLM_FORCE_NO_CTOR_INIT\n- Added 'uninitialize' to explicitly not initialize a GLM type\n- Added GTC_bitfield extension, promoted GTX_bit\n- Added GTC_integer extension, promoted GTX_bit and GTX_integer\n- Added GTC_round extension, promoted GTX_bit\n- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269\n- Added GTX_type_aligned for aligned vector, matrix and quaternion types\n\n#### Improvements:\n- Rely on C++11 to implement isinf and isnan\n- Removed GLM_FORCE_CUDA, Cuda is implicitly detected\n- Separated Apple Clang and LLVM compiler detection\n- Used pragma once\n- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and \n  GLM_FORCE_PURE\n- Added not function (from GLSL specification) on VC12\n- Optimized bitfieldReverse and bitCount functions\n- Optimized findLSB and findMSB functions.\n- Optimized matrix-vector multiple performance with Cuda #257, #258\n- Reduced integer type redifinitions #233\n- Rewrited of GTX_fast_trigonometry #264 #265\n- Made types trivially copyable #263\n- Removed <iostream> in GLM tests\n- Used std features within GLM without redeclaring\n- Optimized cot function #272\n- Optimized sign function #272\n- Added explicit cast from quat to mat3 and mat4 #275\n\n#### Fixes:\n- Fixed std::nextafter not supported with C++11 on Android #217\n- Fixed missing value_type for dual quaternion\n- Fixed return type of dual quaternion length\n- Fixed infinite loop in isfinite function with GCC #221\n- Fixed Visual Studio 14 compiler warnings\n- Fixed implicit conversion from another tvec2 type to another tvec2 #241\n- Fixed lack of consistency of quat and dualquat constructors\n- Fixed uaddCarray #253\n- Fixed float comparison warnings #270\n\n#### Deprecation:\n- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4, ICC 2013 or a C++98 compiler\n- Removed degrees for function parameters\n- Removed GLM_FORCE_RADIANS, active by default\n- Removed VC 2005 / 8 and 2008 / 9 support\n- Removed GCC 3.4 to 4.3 support\n- Removed LLVM GCC support\n- Removed LLVM 2.6 to 3.1 support\n- Removed CUDA 3.0 to 3.2 support\n\n---\n### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9.5.4)\n- Fixed non-utf8 character #196\n- Added FindGLM install for CMake #189\n- Fixed GTX_color_space - saturation #195\n- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191\n- Fixed builtin GLM_ARCH_SSE4 #204\n- Optimized Quaternion vector rotation #205\n- Fixed missing doxygen @endcond tag #211\n- Fixed instruction set detection with Clang #158\n- Fixed orientate3 function #207\n- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210\n- Added GTX_io for io with <iostream> #144\n- Fixed fastDistance ambiguity #215\n- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to\n  tweakedInfinitePerspective\n- Fixed std::copy and std::vector with GLM types #214\n- Fixed strict aliasing issues #212, #152\n- Fixed std::nextafter not supported with C++11 on Android #213\n- Fixed corner cases in exp and log functions for quaternions #199\n\n---\n### GLM 0.9.5.3 - 2014-04-02\n- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch\n  compiler argument\n- Fixed GTX_raw_data code dependency\n- Fixed GCC instruction set detection\n- Added GLM_GTX_matrix_transform_2d extension (#178, #176)\n- Fixed CUDA issues (#169, #168, #183, #182)\n- Added support for all extensions but GTX_string_cast to CUDA\n- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)\n- Fixed missing bitfieldInterleave definisions\n- Fixed usubBorrow (#171)\n- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)\n- Added full tests for eulerAngle*** functions (#173)\n- Added workaround for a CUDA compiler bug (#186, #185)\n\n---\n### GLM 0.9.5.2 - 2014-02-08\n- Fixed initializer list ambiguity (#159, #160)\n- Fixed warnings with the Android NDK 9c\n- Fixed non power of two matrix products\n- Fixed mix function link error\n- Fixed SSE code included in GLM tests on \"pure\" platforms\n- Fixed undefined reference to fastInverseSqrt (#161)\n- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)\n- Fix dot product clamp range for vector angle functions. (#163)\n- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152)\n- Fixed GLM_GTC_constants description brief (#162)\n\n---\n### GLM 0.9.5.1 - 2014-01-11\n- Fixed angle and orientedAngle that sometimes return NaN values (#145)\n- Deprecated degrees for function parameters and display a message\n- Added possible static_cast conversion of GLM types (#72)\n- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)\n- Fixed mismatch between some declarations and definitions\n- Fixed inverse link error when using namespace glm; (#147)\n- Optimized matrix inverse and division code (#149)\n- Added intersectRayPlane function (#153)\n- Fixed outerProduct return type (#155)\n\n---\n### GLM 0.9.5.0 - 2013-12-25\n- Added forward declarations (glm/fwd.hpp) for faster compilations\n- Added per feature headers\n- Minimized GLM internal dependencies\n- Improved Intel Compiler detection\n- Added bitfieldInterleave and _mm_bit_interleave_si128 functions\n- Added GTX_scalar_relational\n- Added GTX_dual_quaternion\n- Added rotation function to GTX_quaternion (#22)\n- Added precision variation of each type\n- Added quaternion comparison functions\n- Fixed GTX_multiple for negative value\n- Removed GTX_ocl_type extension\n- Fixed post increment and decrement operators\n- Fixed perspective with zNear == 0 (#71)\n- Removed l-value swizzle operators\n- Cleaned up compiler detection code for unsupported compilers\n- Replaced C cast by C++ casts\n- Fixed .length() that should return a int and not a size_t\n- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t\n- Removed unnecessary conversions\n- Optimized packing and unpacking functions\n- Removed the normalization of the up argument of lookAt function (#114)\n- Added low precision specializations of inversesqrt\n- Fixed ldexp and frexp implementations\n- Increased assert coverage\n- Increased static_assert coverage\n- Replaced GLM traits by STL traits when possible\n- Allowed including individual core feature\n- Increased unit tests completeness\n- Added creating of a quaternion from two vectors\n- Added C++11 initializer lists\n- Fixed umulExtended and imulExtended implementations for vector types (#76)\n- Fixed CUDA coverage for GTC extensions\n- Added GTX_io extension\n- Improved GLM messages enabled when defining GLM_MESSAGES\n- Hidden matrix_inverse function implementation detail into private section\n\n---\n### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) - 2013-09-20\n- Fixed detection to select the last known compiler if newer version #106\n- Fixed is_int and is_uint code duplication with GCC and C++11 #107 \n- Fixed test suite build while using Clang in C++11 mode\n- Added c++1y mode support in CMake test suite\n- Removed ms extension mode to CMake when no using Visual C++\n- Added pedantic mode to CMake test suite for Clang and GCC\n- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows\n  for ICC\n- Added compilation errors for unsupported compiler versions\n- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112\n- Fixed const ref issue on assignment operator taking a scalar parameter #116\n- Fixed glm::eulerAngleY implementation #117\n\n---\n### GLM 0.9.4.5 - 2013-08-12\n- Fixed CUDA support\n- Fixed inclusion of intrinsics in \"pure\" mode #92\n- Fixed language detection on GCC when the C++0x mode isn't enabled #95\n- Fixed issue #97: register is deprecated in C++11\n- Fixed issue #96: CUDA issues\n- Added Windows CE detection #92\n- Added missing value_ptr for quaternions #99\n\n---\n### GLM 0.9.4.4 - 2013-05-29\n- Fixed slerp when costheta is close to 1 #65\n- Fixed mat4x2 value_type constructor #70\n- Fixed glm.natvis for Visual C++ 12 #82\n- Added assert in inversesqrt to detect division by zero #61\n- Fixed missing swizzle operators #86\n- Fixed CUDA warnings #86\n- Fixed GLM natvis for VC11 #82\n- Fixed GLM_GTX_multiple with negative values #79\n- Fixed glm::perspective when zNear is zero #71\n\n---\n### GLM 0.9.4.3 - 2013-03-20\n- Detected qualifier for Clang\n- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions\n- Fixed squad, intermediate and exp quaternion functions\n- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3\n- Clarify the license applying on the manual\n- Added a docx copy of the manual\n- Fixed GLM_GTX_matrix_interpolation\n- Fixed isnan and isinf on Android with Clang\n- Autodetected C++ version using __cplusplus value\n- Fixed mix for bool and bvec* third parameter\n\n---\n### GLM 0.9.4.2 - 2013-02-14\n- Fixed compAdd from GTX_component_wise\n- Fixed SIMD support for Intel compiler on Windows\n- Fixed isnan and isinf for CUDA compiler\n- Fixed GLM_FORCE_RADIANS on glm::perspective\n- Fixed GCC warnings\n- Fixed packDouble2x32 on Xcode\n- Fixed mix for vec4 SSE implementation\n- Fixed 0x2013 dash character in comments that cause issue in Windows \n  Japanese mode\n- Fixed documentation warnings\n- Fixed CUDA warnings\n\n---\n### GLM 0.9.4.1 - 2012-12-22\n- Improved half support: -0.0 case and implicit conversions\n- Fixed Intel Composer Compiler support on Linux\n- Fixed interaction between quaternion and euler angles\n- Fixed GTC_constants build\n- Fixed GTX_multiple\n- Fixed quat slerp using mix function when cosTheta close to 1\n- Improved fvec4SIMD and fmat4x4SIMD implementations\n- Fixed assert messages\n- Added slerp and lerp quaternion functions and tests\n\n---\n### GLM 0.9.4.0 - 2012-11-18\n- Added Intel Composer Compiler support\n- Promoted GTC_espilon extension\n- Promoted GTC_ulp extension\n- Removed GLM website from the source repository\n- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments\n- Fixed detection of Clang and LLVM GCC on MacOS X\n- Added debugger visualizers for Visual C++ 2012\n- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a C++98 compiler\n\n---\n### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) - 2012-06-30\n- Added SSE4 and AVX2 detection.\n- Removed VIRTREV_xstream and the incompatibility generated with GCC\n- Fixed C++11 compiler option for GCC\n- Removed MS language extension option for GCC (not fonctionnal)\n- Fixed bitfieldExtract for vector types\n- Fixed warnings\n- Fixed SSE includes\n\n---\n### GLM 0.9.3.3 - 2012-05-10\n- Fixed isinf and isnan\n- Improved compatibility with Intel compiler\n- Added CMake test build options: SIMD, C++11, fast math and MS land ext\n- Fixed SIMD mat4 test on GCC\n- Fixed perspectiveFov implementation\n- Fixed matrixCompMult for none-square matrices\n- Fixed namespace issue on stream operators\n- Fixed various warnings\n- Added VC11 support\n\n---\n### GLM 0.9.3.2 - 2012-03-15\n- Fixed doxygen documentation\n- Fixed Clang version detection\n- Fixed simd mat4 /= operator\n\n---\n### GLM 0.9.3.1 - 2012-01-25\n- Fixed platform detection\n- Fixed warnings\n- Removed detail code from Doxygen doc\n\n---\n### GLM 0.9.3.0 - 2012-01-09\n- Added CPP Check project\n- Fixed conflict with Windows headers\n- Fixed isinf implementation\n- Fixed Boost conflict\n- Fixed warnings\n\n---\n### GLM 0.9.3.B - 2011-12-12\n- Added support for Chrone Native Client\n- Added epsilon constant\n- Removed value_size function from vector types\n- Fixed roundEven on GCC\n- Improved API documentation\n- Fixed modf implementation\n- Fixed step function accuracy\n- Fixed outerProduct\n\n---\n### GLM 0.9.3.A - 2011-11-11\n- Improved doxygen documentation\n- Added new swizzle operators for C++11 compilers\n- Added new swizzle operators declared as functions\n- Added GLSL 4.20 length for vector and matrix types\n- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions\n- Promoted GLM_GTC_random extension: linear, gaussian and various random number \ngeneration distribution\n- Added GLM_GTX_constants: provides useful constants\n- Added extension versioning\n- Removed many unused namespaces\n- Fixed half based type contructors\n- Added GLSL core noise functions\n\n---\n### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) - 2011-10-24\n- Added more swizzling constructors\n- Added missing non-squared matrix products\n\n---\n### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) - 2011-10-01\n- Fixed half based type build on old GCC\n- Fixed /W4 warnings on Visual C++\n- Fixed some missing l-value swizzle operators\n\n---\n### GLM 0.9.2.5 - 2011-09-20\n- Fixed floatBitToXint functions\n- Fixed pack and unpack functions\n- Fixed round functions\n\n---\n### GLM 0.9.2.4 - 2011-09-03\n- Fixed extensions bugs\n\n---\n### GLM 0.9.2.3 - 2011-06-08\n- Fixed build issues\n\n---\n### GLM 0.9.2.2 - 2011-06-02\n- Expend matrix constructors flexibility\n- Improved quaternion implementation\n- Fixed many warnings across platforms and compilers\n\n---\n### GLM 0.9.2.1 - 2011-05-24\n- Automatically detect CUDA support\n- Improved compiler detection\n- Fixed errors and warnings in VC with C++ extensions disabled\n- Fixed and tested GLM_GTX_vector_angle\n- Fixed and tested GLM_GTX_rotate_vector\n\n---\n### GLM 0.9.2.0 - 2011-05-09\n- Added CUDA support\n- Added CTest test suite\n- Added GLM_GTX_ulp extension\n- Added GLM_GTX_noise extension\n- Added GLM_GTX_matrix_interpolation extension\n- Updated quaternion slerp interpolation\n\n---\n### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) - 2011-05-07\n- Fixed bugs\n\n---\n### GLM 0.9.1.2 - 2011-04-15\n- Fixed bugs\n\n---\n### GLM 0.9.1.1 - 2011-03-17\n- Fixed bugs\n\n---\n### GLM 0.9.1.0 - 2011-03-03\n- Fixed bugs\n\n---\n### GLM 0.9.1.B - 2011-02-13\n- Updated API documentation\n- Improved SIMD implementation\n- Fixed Linux build\n\n---\n### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) - 2011-02-13\n- Added quaternion product operator.\n- Clarify that GLM is a header only library.\n\n---\n### GLM 0.9.1.A - 2011-01-31\n- Added SIMD support\n- Added new swizzle functions\n- Improved static assert error message with C++0x static_assert\n- New setup system\n- Reduced branching\n- Fixed trunc implementation\n\n---\n### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) - 2011-01-30\n- Added GLSL 4.10 packing functions\n- Added == and != operators for every types.\n\n---\n### GLM 0.9.0.6 - 2010-12-21\n- Many matrices bugs fixed\n\n---\n### GLM 0.9.0.5 - 2010-11-01\n- Improved Clang support\n- Fixed bugs\n\n---\n### GLM 0.9.0.4 - 2010-10-04\n- Added autoexp for GLM\n- Fixed bugs\n\n---\n### GLM 0.9.0.3 - 2010-08-26\n- Fixed non-squared matrix operators\n\n---\n### GLM 0.9.0.2 - 2010-07-08\n- Added GLM_GTX_int_10_10_10_2\n- Fixed bugs\n\n---\n### GLM 0.9.0.1 - 2010-06-21\n- Fixed extensions errors\n\n---\n### GLM 0.9.0.0 - 2010-05-25\n- Objective-C support\n- Fixed warnings\n- Updated documentation\n\n---\n### GLM 0.9.B.2 - 2010-04-30\n- Git transition\n- Removed experimental code from releases\n- Fixed bugs\n\n---\n### GLM 0.9.B.1 - 2010-04-03\n- Based on GLSL 4.00 specification\n- Added the new core functions\n- Added some implicit conversion support\n\n---\n### GLM 0.9.A.2 - 2010-02-20\n- Improved some possible errors messages\n- Improved declarations and definitions match\n\n---\n### GLM 0.9.A.1 - 2010-02-09\n- Removed deprecated features\n- Internal redesign\n\n---\n### GLM 0.8.4.4 final - 2010-01-25\n- Fixed warnings\n\n---\n### GLM 0.8.4.3 final - 2009-11-16\n- Fixed Half float arithmetic\n- Fixed setup defines\n\n---\n### GLM 0.8.4.2 final - 2009-10-19\n- Fixed Half float adds\n\n---\n### GLM 0.8.4.1 final - 2009-10-05\n- Updated documentation\n- Fixed MacOS X build\n\n---\n### GLM 0.8.4.0 final - 2009-09-16\n- Added GCC 4.4 and VC2010 support\n- Added matrix optimizations\n\n---\n### GLM 0.8.3.5 final - 2009-08-11\n- Fixed bugs\n\n---\n### GLM 0.8.3.4 final - 2009-08-10\n- Updated GLM according GLSL 1.5 spec\n- Fixed bugs\n\n---\n### GLM 0.8.3.3 final - 2009-06-25\n- Fixed bugs\n\n---\n### GLM 0.8.3.2 final - 2009-06-04\n- Added GLM_GTC_quaternion\n- Added GLM_GTC_type_precision\n\n---\n### GLM 0.8.3.1 final - 2009-05-21\n- Fixed old extension system.\n\n---\n### GLM 0.8.3.0 final - 2009-05-06\n- Added stable extensions.\n- Added new extension system.\n\n---\n### GLM 0.8.2.3 final - 2009-04-01\n- Fixed bugs.\n\n---\n### GLM 0.8.2.2 final - 2009-02-24\n- Fixed bugs.\n\n---\n### GLM 0.8.2.1 final - 2009-02-13\n- Fixed bugs.\n\n---\n### GLM 0.8.2 final - 2009-01-21\n- Fixed bugs.\n\n---\n### GLM 0.8.1 final - 2008-10-30\n- Fixed bugs.\n\n---\n### GLM 0.8.0 final - 2008-10-23\n- New method to use extension.\n\n---\n### GLM 0.8.0 beta3 - 2008-10-10\n- Added CMake support for GLM tests.\n\n---\n### GLM 0.8.0 beta2 - 2008-10-04\n- Improved half scalars and vectors support.\n\n---\n### GLM 0.8.0 beta1 - 2008-09-26\n- Improved GLSL conformance\n- Added GLSL 1.30 support\n- Improved API documentation\n\n---\n### GLM 0.7.6 final - 2008-08-08\n- Improved C++ standard comformance\n- Added Static assert for types checking\n\n---\n### GLM 0.7.5 final - 2008-07-05\n- Added build message system with Visual Studio\n- Pedantic build with GCC\n\n---\n### GLM 0.7.4 final - 2008-06-01\n- Added external dependencies system.\n\n---\n### GLM 0.7.3 final - 2008-05-24\n- Fixed bugs\n- Added new extension group\n\n---\n### GLM 0.7.2 final - 2008-04-27\n- Updated documentation\n- Added preprocessor options\n\n---\n### GLM 0.7.1 final - 2008-03-24\n- Disabled half on GCC\n- Fixed extensions\n\n---\n### GLM 0.7.0 final - 2008-03-22\n- Changed to MIT license\n- Added new documentation\n\n---\n### GLM 0.6.4 - 2007-12-10\n- Fixed swizzle operators\n\n---\n### GLM 0.6.3 - 2007-11-05\n- Fixed type data accesses\n- Fixed 3DSMax sdk conflict\n\n---\n### GLM 0.6.2 - 2007-10-08\n- Fixed extension\n\n---\n### GLM 0.6.1 - 2007-10-07\n- Fixed a namespace error\n- Added extensions\n\n---\n### GLM 0.6.0 : 2007-09-16\n- Added new extension namespace mecanium\n- Added Automatic compiler detection\n\n---\n### GLM 0.5.1 - 2007-02-19\n- Fixed swizzle operators\n\n---\n### GLM 0.5.0 - 2007-01-06\n- Upgrated to GLSL 1.2\n- Added swizzle operators\n- Added setup settings\n\n---\n### GLM 0.4.1 - 2006-05-22\n- Added OpenGL examples\n\n---\n### GLM 0.4.0 - 2006-05-17\n- Added missing operators to vec* and mat*\n- Added first GLSL 1.2 features\n- Fixed windows.h before glm.h when windows.h required\n\n---\n### GLM 0.3.2 - 2006-04-21\n- Fixed texcoord components access.\n- Fixed mat4 and imat4 division operators.\n\n---\n### GLM 0.3.1 - 2006-03-28\n- Added GCC 4.0 support under MacOS X.\n- Added GCC 4.0 and 4.1 support under Linux.\n- Added code optimisations.\n\n---\n### GLM 0.3 - 2006-02-19\n- Improved GLSL type conversion and construction compliance.\n- Added experimental extensions.\n- Added Doxygen Documentation.\n- Added code optimisations.\n- Fixed bugs.\n\n---\n### GLM 0.2 - 2005-05-05\n- Improve adaptative from GLSL.\n- Add experimental extensions based on OpenGL extension process.\n- Fixed bugs.\n\n---\n### GLM 0.1 - 2005-02-21\n- Add vec2, vec3, vec4 GLSL types\n- Add ivec2, ivec3, ivec4 GLSL types\n- Add bvec2, bvec3, bvec4 GLSL types\n- Add mat2, mat3, mat4 GLSL types\n- Add almost all functions\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/CMakeLists.txt",
    "content": "option(GLM_QUIET \"No CMake Message\" OFF)\noption(BUILD_SHARED_LIBS \"Build shared library\" ON)\noption(BUILD_STATIC_LIBS \"Build static library\" ON)\noption(GLM_TEST_ENABLE_CXX_98 \"Enable C++ 98\" OFF)\noption(GLM_TEST_ENABLE_CXX_11 \"Enable C++ 11\" OFF)\noption(GLM_TEST_ENABLE_CXX_14 \"Enable C++ 14\" OFF)\noption(GLM_TEST_ENABLE_CXX_17 \"Enable C++ 17\" OFF)\noption(GLM_TEST_ENABLE_CXX_20 \"Enable C++ 20\" OFF)\n\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nif(GLM_TEST_ENABLE_CXX_20)\n\tset(CMAKE_CXX_STANDARD 20)\n\tadd_definitions(-DGLM_FORCE_CXX2A)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with C++20 features\")\n\tendif()\n\nelseif(GLM_TEST_ENABLE_CXX_17)\n\tset(CMAKE_CXX_STANDARD 17)\n\tadd_definitions(-DGLM_FORCE_CXX17)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with C++17 features\")\n\tendif()\n\nelseif(GLM_TEST_ENABLE_CXX_14)\n\tset(CMAKE_CXX_STANDARD 14)\n\tadd_definitions(-DGLM_FORCE_CXX14)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with C++14 features\")\n\tendif()\n\nelseif(GLM_TEST_ENABLE_CXX_11)\n\tset(CMAKE_CXX_STANDARD 11)\n\tadd_definitions(-DGLM_FORCE_CXX11)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with C++11 features\")\n\tendif()\n\nelseif(GLM_TEST_ENABLE_CXX_98)\n\tset(CMAKE_CXX_STANDARD 98)\n\tadd_definitions(-DGLM_FORCE_CXX98)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with C++98 features\")\n\tendif()\nendif()\n\noption(GLM_TEST_ENABLE_LANG_EXTENSIONS \"Enable language extensions\" OFF)\n\noption(GLM_DISABLE_AUTO_DETECTION \"Enable language extensions\" OFF)\n\nif(GLM_DISABLE_AUTO_DETECTION)\n\tadd_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)\nendif()\n\nif(GLM_TEST_ENABLE_LANG_EXTENSIONS)\n\tset(CMAKE_CXX_EXTENSIONS ON)\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"Clang\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"GNU\"))\n\t\tadd_compile_options(-fms-extensions)\n\tendif()\n\tmessage(STATUS \"GLM: Build with C++ language extensions\")\nelse()\n\tset(CMAKE_CXX_EXTENSIONS OFF)\n\tif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\t\tadd_compile_options(/Za)\n\t\tif(MSVC15)\n\t\t\tadd_compile_options(/permissive-)\n\t\tendif()\n\tendif()\nendif()\n\noption(GLM_TEST_ENABLE_FAST_MATH \"Enable fast math optimizations\" OFF)\nif(GLM_TEST_ENABLE_FAST_MATH)\n\tif(NOT GLM_QUIET)\n\t\tmessage(STATUS \"GLM: Build with fast math optimizations\")\n\tendif()\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"Clang\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"GNU\"))\n\t\tadd_compile_options(-ffast-math)\n\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\t\tadd_compile_options(/fp:fast)\n\tendif()\nelse()\n\tif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\t\tadd_compile_options(/fp:precise)\n\tendif()\nendif()\n\noption(GLM_TEST_ENABLE \"Build unit tests\" ON)\noption(GLM_TEST_ENABLE_SIMD_SSE2 \"Enable SSE2 optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_SSE3 \"Enable SSE3 optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_SSSE3 \"Enable SSSE3 optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_SSE4_1 \"Enable SSE 4.1 optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_SSE4_2 \"Enable SSE 4.2 optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_AVX \"Enable AVX optimizations\" OFF)\noption(GLM_TEST_ENABLE_SIMD_AVX2 \"Enable AVX2 optimizations\" OFF)\noption(GLM_TEST_FORCE_PURE \"Force 'pure' instructions\" OFF)\n\nif(GLM_TEST_FORCE_PURE)\n\tadd_definitions(-DGLM_FORCE_PURE)\n\n\tif(CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n\t\tadd_compile_options(-mfpmath=387)\n\tendif()\n\tmessage(STATUS \"GLM: No SIMD instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_AVX2)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-mavx2)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxAVX2)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\t\tadd_compile_options(/arch:AVX2)\n\tendif()\n\tmessage(STATUS \"GLM: AVX2 instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_AVX)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-mavx)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxAVX)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\t\tadd_compile_options(/arch:AVX)\n\tendif()\n\tmessage(STATUS \"GLM: AVX instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_SSE4_2)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-msse4.2)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxSSE4.2)\n\telseif((CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\") AND NOT CMAKE_CL_64)\n\t\tadd_compile_options(/arch:SSE2) # VC doesn't support SSE4.2\n\tendif()\n\tmessage(STATUS \"GLM: SSE4.2 instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_SSE4_1)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-msse4.1)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxSSE4.1)\n\telseif((CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\") AND NOT CMAKE_CL_64)\n\t\tadd_compile_options(/arch:SSE2) # VC doesn't support SSE4.1\n\tendif()\n\tmessage(STATUS \"GLM: SSE4.1 instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_SSSE3)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-mssse3)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxSSSE3)\n\telseif((CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\") AND NOT CMAKE_CL_64)\n\t\tadd_compile_options(/arch:SSE2) # VC doesn't support SSSE3\n\tendif()\n\tmessage(STATUS \"GLM: SSSE3 instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_SSE3)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-msse3)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxSSE3)\n\telseif((CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\") AND NOT CMAKE_CL_64)\n\t\tadd_compile_options(/arch:SSE2) # VC doesn't support SSE3\n\tendif()\n\tmessage(STATUS \"GLM: SSE3 instruction set\")\n\nelseif(GLM_TEST_ENABLE_SIMD_SSE2)\n\tadd_definitions(-DGLM_FORCE_INTRINSICS)\n\n\tif((CMAKE_CXX_COMPILER_ID MATCHES \"GNU\") OR (CMAKE_CXX_COMPILER_ID MATCHES \"Clang\"))\n\t\tadd_compile_options(-msse2)\n\telseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\t\tadd_compile_options(/QxSSE2)\n\telseif((CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\") AND NOT CMAKE_CL_64)\n\t\tadd_compile_options(/arch:SSE2)\n\tendif()\n\tmessage(STATUS \"GLM: SSE2 instruction set\")\nendif()\n\n# Compiler and default options\n\nif(CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n\tif(NOT GLM_QUIET)\n\t\tmessage(\"GLM: Clang - ${CMAKE_CXX_COMPILER_ID} compiler\")\n\tendif()\n\n\tadd_compile_options(-Werror -Weverything)\n\tadd_compile_options(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-gnu-anonymous-struct -Wno-nested-anon-types)\n\tadd_compile_options(-Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral)\n\nelseif(CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n\tif(NOT GLM_QUIET)\n\t\tmessage(\"GLM: GCC - ${CMAKE_CXX_COMPILER_ID} compiler\")\n\tendif()\n\n\tadd_compile_options(-O2)\n\tadd_compile_options(-Wno-long-long)\n\nelseif(CMAKE_CXX_COMPILER_ID MATCHES \"Intel\")\n\tif(NOT GLM_QUIET)\n\t\tmessage(\"GLM: Intel - ${CMAKE_CXX_COMPILER_ID} compiler\")\n\tendif()\n\nelseif(CMAKE_CXX_COMPILER_ID MATCHES \"MSVC\")\n\tif(NOT GLM_QUIET)\n\t\tmessage(\"GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler\")\n\tendif()\n\n\tadd_compile_options(/W4 /WX)\n\tadd_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365)\n\tadd_definitions(-D_CRT_SECURE_NO_WARNINGS)\nendif()\n\nfunction(glmCreateTestGTC NAME)\n\tset(SAMPLE_NAME test-${NAME})\n\tadd_executable(${SAMPLE_NAME} ${NAME}.cpp)\n\n\tadd_test(\n\t\tNAME ${SAMPLE_NAME}\n\t\tCOMMAND $<TARGET_FILE:${SAMPLE_NAME}> )\n\ttarget_link_libraries(${SAMPLE_NAME} PRIVATE glm::glm)\nendfunction()\n\nif(GLM_TEST_ENABLE)\n\tadd_subdirectory(bug)\n\tadd_subdirectory(core)\n\tadd_subdirectory(ext)\n\tadd_subdirectory(gtc)\n\tadd_subdirectory(gtx)\n\tadd_subdirectory(perf)\nendif()\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/bug/CMakeLists.txt",
    "content": "glmCreateTestGTC(bug_ms_vec_static)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/bug/bug_ms_vec_static.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\nstruct vec2;\n\nstruct _swizzle\n{\n\tchar _buffer[1];\n};\n\nstruct vec2\n{\n\tGLM_CONSTEXPR vec2() :\n\t\tx(0), y(0)\n\t{}\n\n\tunion\n\t{\n\t\tstruct { float x, y; };\n\t\tstruct { _swizzle xx; };\n\t};\n};\n#endif\n\n// Visual C++ has a bug generating the error: fatal error C1001: An internal error has occurred in the compiler.\n// vec2 Bar;\n\nint main()\n{\n\treturn 0;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/cmake/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.2 FATAL_ERROR)\nproject(test_find_glm)\n\nfind_package(glm REQUIRED)\n\nadd_executable(test_find_glm test_find_glm.cpp)\ntarget_link_libraries(test_find_glm glm::glm)\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/cmake/test_find_glm.cpp",
    "content": "#include <iostream>\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nglm::mat4 camera(float Translate, glm::vec2 const& Rotate)\n{\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f);\n\tglm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));\n\treturn Projection * View * Model;\n}\n\nint main()\n{\n    const glm::mat4 m = camera(1.f, glm::vec2(1.f, 0.5f));\n    std::cout << \"matrix diagonal: \" << m[0][0] << \", \"\n              << m[1][1] << \", \" << m[2][2] << \", \" << m[3][3] << \"\\n\";\n    return 0;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/CMakeLists.txt",
    "content": "glmCreateTestGTC(core_cpp_constexpr)\nglmCreateTestGTC(core_cpp_defaulted_ctor)\nglmCreateTestGTC(core_force_aligned_gentypes)\nglmCreateTestGTC(core_force_ctor_init)\nglmCreateTestGTC(core_force_cxx03)\nglmCreateTestGTC(core_force_cxx98)\nglmCreateTestGTC(core_force_arch_unknown)\nglmCreateTestGTC(core_force_compiler_unknown)\nglmCreateTestGTC(core_force_cxx_unknown)\nglmCreateTestGTC(core_force_explicit_ctor)\nglmCreateTestGTC(core_force_inline)\nglmCreateTestGTC(core_force_platform_unknown)\nglmCreateTestGTC(core_force_pure)\nglmCreateTestGTC(core_force_unrestricted_gentype)\nglmCreateTestGTC(core_force_xyzw_only)\nglmCreateTestGTC(core_force_quat_xyzw)\nglmCreateTestGTC(core_type_aligned)\nglmCreateTestGTC(core_type_cast)\nglmCreateTestGTC(core_type_ctor)\nglmCreateTestGTC(core_type_int)\nglmCreateTestGTC(core_type_length)\nglmCreateTestGTC(core_type_mat2x2)\nglmCreateTestGTC(core_type_mat2x3)\nglmCreateTestGTC(core_type_mat2x4)\nglmCreateTestGTC(core_type_mat3x2)\nglmCreateTestGTC(core_type_mat3x3)\nglmCreateTestGTC(core_type_mat3x4)\nglmCreateTestGTC(core_type_mat4x2)\nglmCreateTestGTC(core_type_mat4x3)\nglmCreateTestGTC(core_type_mat4x4)\nglmCreateTestGTC(core_type_vec1)\nglmCreateTestGTC(core_type_vec2)\nglmCreateTestGTC(core_type_vec3)\nglmCreateTestGTC(core_type_vec4)\nglmCreateTestGTC(core_func_common)\nglmCreateTestGTC(core_func_exponential)\nglmCreateTestGTC(core_func_geometric)\nglmCreateTestGTC(core_func_integer)\nglmCreateTestGTC(core_func_integer_bit_count)\nglmCreateTestGTC(core_func_integer_find_lsb)\nglmCreateTestGTC(core_func_integer_find_msb)\nglmCreateTestGTC(core_func_matrix)\nglmCreateTestGTC(core_func_noise)\nglmCreateTestGTC(core_func_packing)\nglmCreateTestGTC(core_func_trigonometric)\nglmCreateTestGTC(core_func_vector_relational)\nglmCreateTestGTC(core_func_swizzle)\nglmCreateTestGTC(core_setup_force_cxx98)\nglmCreateTestGTC(core_setup_force_size_t_length)\nglmCreateTestGTC(core_setup_message)\nglmCreateTestGTC(core_setup_platform_unknown)\nglmCreateTestGTC(core_setup_precision)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_cpp_constexpr.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/vector_relational.hpp>\n\nstatic int test_vec1()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec1 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec1 D(true);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec2 C(true);\n\t\tconstexpr glm::bvec2 B(true);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec1 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec1(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 P(1);\n\t\tstatic_assert(glm::ivec1(1) == P, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 L(glm::ivec2(1, 2));\n\t\tstatic_assert(glm::ivec1(1) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 M(glm::ivec3(1, 2, 3));\n\t\tstatic_assert(glm::ivec1(1) == M, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec1(1) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec1 A1(true);\n\t\tconstexpr glm::bvec1 A2(true);\n\t\tconstexpr glm::bvec1 B1(false);\n\t\tconstexpr glm::bvec1 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A + 1;\n\t\tconstexpr glm::ivec1 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A - 1;\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A % 2;\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A << 1;\n\t\tstatic_assert(B == glm::ivec1(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(2);\n\t\tconstexpr glm::ivec1 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec1(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(~0);\n\t\tconstexpr glm::ivec1 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec2()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec2 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec2 D(true, false);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec2 C(true);\n\t\tconstexpr glm::bvec2 B(true, false);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec2 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec2(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 A(1);\n\t\tstatic_assert(glm::ivec2(1) == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 F(glm::ivec1(1), glm::ivec1(2));\n\t\tstatic_assert(glm::ivec2(1, 2) == F, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 G(1, glm::ivec1(2));\n\t\tstatic_assert(glm::ivec2(1, 2) == G, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 H(glm::ivec1(1), 2);\n\t\tstatic_assert(glm::ivec2(1, 2) == H, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 I(1, 2);\n\t\tstatic_assert(glm::ivec2(1, 2) == I, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 L(glm::ivec2(1, 2));\n\t\tstatic_assert(glm::ivec2(1, 2) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 M(glm::ivec3(1, 2, 3));\n\t\tstatic_assert(glm::ivec2(1, 2) == M, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec2(1, 2) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2::length() == 2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec2 A1(true);\n\t\tconstexpr glm::bvec2 A2(true);\n\t\tconstexpr glm::bvec2 B1(false);\n\t\tconstexpr glm::bvec2 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A + 1;\n\t\tconstexpr glm::ivec2 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A - 1;\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A % 2;\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A << 1;\n\t\tstatic_assert(B == glm::ivec2(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(2);\n\t\tconstexpr glm::ivec2 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec2(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(~0);\n\t\tconstexpr glm::ivec2 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec3()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec3 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec3 D(true, false, true);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec3 C(true);\n\t\tconstexpr glm::bvec3 B(true, false, true);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec3 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec3(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 A(1);\n\t\tstatic_assert(glm::ivec3(1) == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 B(glm::ivec2(1, 2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1, glm::ivec2(2, 3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D(glm::ivec1(1), glm::ivec2(2, 3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == D, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 E(glm::ivec2(1, 2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == E, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 F(glm::ivec1(1), glm::ivec1(2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == F, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 G(1, glm::ivec1(2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == G, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 H(glm::ivec1(1), 2, glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == H, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 I(1, 2, glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == I, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 J(glm::ivec1(1), glm::ivec1(2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == J, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 K(1, glm::ivec1(2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == K, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 L(glm::ivec1(1), 2, 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 M(1, 2, 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == M, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 const A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3::length() == 3, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec3 A1(true);\n\t\tconstexpr glm::bvec3 A2(true);\n\t\tconstexpr glm::bvec3 B1(false);\n\t\tconstexpr glm::bvec3 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A + 1;\n\t\tconstexpr glm::ivec3 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A - 1;\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A % 2;\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A << 1;\n\t\tstatic_assert(B == glm::ivec3(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(2);\n\t\tconstexpr glm::ivec3 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec3(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(~0);\n\t\tconstexpr glm::ivec3 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tconstexpr glm::bvec4 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec4 D(true, false, true, false);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec4 C(true);\n\t\tconstexpr glm::bvec4 B(true, false, true, false);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 O(glm::ivec4(1));\n\t\tstatic_assert(glm::ivec4(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 A(1);\n\t\tstatic_assert(glm::ivec4(1) == A, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(glm::ivec3(1, 2, 3), 4);\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == A, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 B(glm::ivec2(1, 2), glm::ivec2(3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1, glm::ivec3(2, 3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D(glm::ivec1(1), glm::ivec2(2, 3), glm::ivec1(4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == D, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 E(glm::ivec2(1, 2), glm::ivec1(3), glm::ivec1(4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == E, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 F(glm::ivec1(1), glm::ivec1(2), glm::ivec2(3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == F, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1).x > 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1.0f, -1.0f, -1.0f, 1.0f).x > 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1.0f, -1.0f, -1.0f, 1.0f).y < 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4::length() == 4, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec4 A1(true);\n\t\tconstexpr glm::bvec4 A2(true);\n\t\tconstexpr glm::bvec4 B1(false);\n\t\tconstexpr glm::bvec4 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A + 1;\n\t\tconstexpr glm::ivec4 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A - 1;\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A % 2;\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A << 1;\n\t\tstatic_assert(B == glm::ivec4(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(2);\n\t\tconstexpr glm::ivec4 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec4(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(~0);\n\t\tconstexpr glm::ivec4 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_quat()\n{\n\tint Error = 0;\n\n\t{\n\t\tstatic_assert(glm::quat::length() == 4, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::quat(1.0f, glm::vec3(0.0f)).w > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::quat(1.0f, 0.0f, 0.0f, 0.0f).w > 0.0f, \"GLM: Failed constexpr\");\n\n\t\tglm::quat constexpr Q = glm::identity<glm::quat>();\n\t\tstatic_assert(Q.x - glm::quat(1.0f, glm::vec3(0.0f)).x <= glm::epsilon<float>(), \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_mat2x2()\n{\n\tint Error = 0;\n\n\tstatic_assert(glm::mat2x2::length() == 2, \"GLM: Failed constexpr\");\n\n\treturn Error;\n}\n\n#endif//GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tError += test_vec1();\n\t\tError += test_vec2();\n\t\tError += test_vec3();\n\t\tError += test_vec4();\n\t\tError += test_quat();\n\t\tError += test_mat2x2();\n#\tendif//GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_cpp_defaulted_ctor.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <cstring>\n\nstatic int test_vec_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec1 const A = glm::ivec1(76);\n\t\tglm::ivec1 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec1));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A = glm::ivec2(76);\n\t\tglm::ivec2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec2));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A = glm::ivec3(76);\n\t\tglm::ivec3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec3));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A = glm::ivec4(76);\n\t\tglm::ivec4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec4));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_mat_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 const A = glm::mat2x2(76);\n\t\tglm::mat2x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x3 const A = glm::mat2x3(76);\n\t\tglm::mat2x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x4 const A = glm::mat2x4(76);\n\t\tglm::mat2x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x2 const A = glm::mat3x2(76);\n\t\tglm::mat3x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 const A = glm::mat3x3(76);\n\t\tglm::mat3x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x4 const A = glm::mat3x4(76);\n\t\tglm::mat3x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x2 const A = glm::mat4x2(76);\n\t\tglm::mat4x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 const A = glm::mat4x3(76);\n\t\tglm::mat4x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x4 const A = glm::mat4x4(76);\n\t\tglm::mat4x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_quat_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::quat));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\n#endif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t\tError += test_vec_memcpy();\n\t\tError += test_mat_memcpy();\n\t\tError += test_quat_memcpy();\n#\tendif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_aligned_gentypes.cpp",
    "content": "#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_arch_unknown.cpp",
    "content": "#ifndef GLM_FORCE_ARCH_UNKNOWN\n#\tdefine GLM_FORCE_ARCH_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_compiler_unknown.cpp",
    "content": "#ifndef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_FORCE_COMPILER_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_ctor_init.cpp",
    "content": "#define GLM_FORCE_CTOR_INIT\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nstatic int test_vec()\n{\n\tint Error = 0;\n\n\tglm::vec1 V1;\n\tError += glm::all(glm::equal(V1, glm::vec1(0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec1 U1;\n\tError += glm::all(glm::equal(U1, glm::dvec1(0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec2 V2;\n\tError += glm::all(glm::equal(V2, glm::vec2(0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec2 U2;\n\tError += glm::all(glm::equal(U2, glm::dvec2(0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec3 V3;\n\tError += glm::all(glm::equal(V3, glm::vec3(0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec3 U3;\n\tError += glm::all(glm::equal(U3, glm::dvec3(0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec4 V4;\n\tError += glm::all(glm::equal(V4, glm::vec4(0, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec4 U4;\n\tError += glm::all(glm::equal(U4, glm::dvec4(0, 0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_qua()\n{\n\tint Error = 0;\n\n\tglm::quat F;\n\tError += glm::all(glm::equal(F, glm::quat(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dquat D;\n\tError += glm::all(glm::equal(D, glm::dquat(1, 0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec();\n\tError += test_mat();\n\tError += test_qua();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_cxx03.cpp",
    "content": "#ifndef GLM_FORCE_CXX03\n#\tdefine GLM_FORCE_CXX03\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_cxx98.cpp",
    "content": "#ifndef GLM_FORCE_CXX98\n#\tdefine GLM_FORCE_CXX98\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_cxx_unknown.cpp",
    "content": "#ifndef GLM_FORCE_CXX_UNKNOWN\n#\tdefine GLM_FORCE_CXX_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_depth_zero_to_one.cpp",
    "content": "#define GLM_FORCE_DEPTH_ZERO_TO_ONE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_explicit_ctor.cpp",
    "content": "#define GLM_FORCE_EXPLICIT_CTOR\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\tglm::ivec4 B(1);\n\tError += B == glm::ivec4(1) ? 0 : 1;\n\n\t//glm::vec4 A = B;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_inline.cpp",
    "content": "#define GLM_FORCE_INLINE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_left_handed.cpp",
    "content": "#define GLM_FORCE_LEFT_HANDED\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_platform_unknown.cpp",
    "content": "#ifndef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_FORCE_PLATFORM_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_pure.cpp",
    "content": "#ifndef GLM_FORCE_PURE\n#\tdefine GLM_FORCE_PURE\n#endif//GLM_FORCE_PURE\n#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#define GLM_FORCE_SWIZZLE\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <ctime>\n#include <vector>\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B(A);\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::vec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n\n\t{\n\t\tglm::dvec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::dvec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n#endif\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw;\n\t\tglm::ivec4 C(A.xyzw);\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw);\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz, A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy, A.zw);\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw);\n\t\tglm::ivec4 L(A.x, A.yz, A.w);\n\t\tglm::ivec4 M(A.xy, A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif\n\n#\tif GLM_CONFIG_SWIZZLE\n\t{\n\t\tglm::ivec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw();\n\t\tglm::ivec4 C(A.xyzw());\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw());\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz(), A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy(), A.zw());\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw());\n\t\tglm::ivec4 L(A.x, A.yz(), A.w);\n\t\tglm::ivec4 M(A.xy(), A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1, 1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\t\n\t{\n\t\tstd::vector<glm::ivec4> Tests;\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), 3, 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec2(2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, 2, glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec3(1, 2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec3(2, 3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(1, 2, 3, 4));\n\t\tTests.push_back(glm::ivec4(glm::ivec4(1, 2, 3, 4)));\n\t\t\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec4(1, 2, 3, 4) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_bvec4_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec4 const A(true);\n\tglm::bvec4 const B(true);\n\tglm::bvec4 const C(false);\n\tglm::bvec4 const D = A && B;\n\tglm::bvec4 const E = A && C;\n\tglm::bvec4 const F = A || C;\n\n\tError += D == glm::bvec4(true) ? 0 : 1;\n\tError += E == glm::bvec4(false) ? 0 : 1;\n\tError += F == glm::bvec4(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 const B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tglm::vec4 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec4(5, 7, 9, 11), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec4(3, 3, 3, 3), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec4(4, 10, 18, 28), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec4(4, 2.5, 2, 7.0f / 4.0f), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec4(2, 3, 4, 5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec4(3, 4, 5, 6), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec4(2, 4, 6, 8), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec4(2, 2.5, 3, 3.5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec4(2, 3, 4, 5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec4(-3, -4, -5, -6), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec4(2, 4, 6, 8), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0), 0.0001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec4(5, 7, 9, 11) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec4(6, 8, 10, 12) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec4(3, 3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec4(4, 10, 18, 28) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec4(8, 20, 36, 56) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 4.0f, 6.0f, 8.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec4(4, 2, 2, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec4(2, 1, 1, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec4(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = -A;\n\t\tError += B == glm::ivec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = --A;\n\t\tError += B == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A--;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = ++A;\n\t\tError += B == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A++;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::uvec4 const A(1, 2, 3, 4);\n\t\tglm::uvec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\tError += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_swizzle_partial()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\tglm::ivec4 A(1, 2, 3, 4);\n\n\t{\n\t\tglm::ivec4 B(A.xy, A.zw);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(A.xy, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, A.yz, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, 2, A.zw);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 B(A.xyz, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, A.yzw);\n\t\tError += A == B ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec4 v0(1);\n\tglm::ivec4 v1(v0);\n\tglm::ivec4 v2(v0);\n\tglm::ivec4 v3 = ++v1;\n\tglm::ivec4 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_simd()\n{\n\tint Error = 0;\n\n\tglm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());\n\tglm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());\n\n\tglm::vec4 const c(b * a);\n\tglm::vec4 const d(a + c);\n\n\tError += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec4_ctor();\n\tError += test_bvec4_ctor();\n\tError += test_vec4_size();\n\tError += test_vec4_operators();\n\tError += test_vec4_equal();\n\tError += test_vec4_swizzle_partial();\n\tError += test_vec4_simd();\n\tError += test_operator_increment();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_quat_xyzw.cpp",
    "content": "#define GLM_FORCE_QUAT_DATA_XYZW\n#define GLM_FORCE_INLINE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_size_t_length.cpp",
    "content": "#define GLM_FORCE_SIZE_T_LENGTH\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_unrestricted_gentype.cpp",
    "content": "#define GLM_FORCE_UNRESTRICTED_GENTYPE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_force_xyzw_only.cpp",
    "content": "#define GLM_FORCE_XYZW_ONLY\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec1 const A(1);\n\t\tError += A.x == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t\tError += A.z == 3 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t\tError += A.z == 3 ? 0 : 1;\n\t\tError += A.w == 4 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_common.cpp",
    "content": "#define GLM_FORCE_EXPLICIT_CTOR\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/random.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/common.hpp>\n#include <glm/vec4.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n#include <cstdio>\n#include <cmath>\n#include <ctime>\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4723)\n#endif\n\nnamespace floor_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = 1.1f;\n\t\t\tfloat B = glm::floor(A);\n\t\t\tError += glm::equal(B, 1.f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tdouble A = 1.1;\n\t\t\tdouble B = glm::floor(A);\n\t\t\tError += glm::equal(B, 1.0, 0.0001) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec1 A(1.1f);\n\t\t\tglm::vec1 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec1(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec1 A(1.1);\n\t\t\tglm::dvec1 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec1(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(1.1f);\n\t\t\tglm::vec2 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec2(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(1.1);\n\t\t\tglm::dvec2 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec2(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A(1.1f);\n\t\t\tglm::vec3 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec3(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec3 A(1.1);\n\t\t\tglm::dvec3 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec3(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(1.1f);\n\t\t\tglm::vec4 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec4(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec4 A(1.1);\n\t\t\tglm::dvec4 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec4(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace floor\n\nnamespace modf_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat X(1.5f);\n\t\t\tfloat I(0.0f);\n\t\t\tfloat A = glm::modf(X, I);\n\n\t\t\tError += glm::equal(I, 1.0f, 0.0001f) ? 0 : 1;\n\t\t\tError += glm::equal(A, 0.5f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 X(1.1f, 1.2f, 1.5f, 1.7f);\n\t\t\tglm::vec4 I(0.0f);\n\t\t\tglm::vec4 A = glm::modf(X, I);\n\n\t\t\tError += glm::ivec4(I) == glm::ivec4(1) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(A, glm::vec4(0.1f, 0.2f, 0.5f, 0.7f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec4 X(1.1, 1.2, 1.5, 1.7);\n\t\t\tglm::dvec4 I(0.0);\n\t\t\tglm::dvec4 A = glm::modf(X, I);\n\n\t\t\tError += glm::ivec4(I) == glm::ivec4(1) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(A, glm::dvec4(0.1, 0.2, 0.5, 0.7), 0.000000001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tdouble X(1.5);\n\t\t\tdouble I(0.0);\n\t\t\tdouble A = glm::modf(X, I);\n\n\t\t\tError += glm::equal(I, 1.0, 0.0001) ? 0 : 1;\n\t\t\tError += glm::equal(A, 0.5, 0.0001) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace modf\n\nnamespace mod_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat A(1.5f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 0.5f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A(-0.2f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 0.8f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A(3.0);\n\t\t\tfloat B(2.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(3.0);\n\t\t\tfloat B(2.0f);\n\t\t\tglm::vec4 C = glm::mod(A, B);\n\n\t\t\tError += glm::all(glm::equal(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(3.0);\n\t\t\tglm::vec4 B(2.0f);\n\t\t\tglm::vec4 C = glm::mod(A, B);\n\n\t\t\tError += glm::all(glm::equal(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace mod_\n\nnamespace floatBitsToInt\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\n\t\t{\n\t\t\tfloat A = 1.0f;\n\t\t\tint B = glm::floatBitsToInt(A);\n\t\t\tfloat C = glm::intBitsToFloat(B);\n\t\t\tError += glm::equal(A, C, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(1.0f, 2.0f);\n\t\t\tglm::ivec2 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec2 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\t\t\tglm::ivec3 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec3 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\t\tglm::ivec4 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec4 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace floatBitsToInt\n\nnamespace floatBitsToUint\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\n\t\t{\n\t\t\tfloat A = 1.0f;\n\t\t\tglm::uint B = glm::floatBitsToUint(A);\n\t\t\tfloat C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::equal(A, C, 0.0001f) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec2 A(1.0f, 2.0f);\n\t\t\tglm::uvec2 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec2 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\t\t\tglm::uvec3 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec3 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\t\tglm::uvec4 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec4 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace floatBitsToUint\n\nnamespace min_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec1 A0 = glm::min(glm::vec1(1), glm::vec1(1));\n\t\tbool A1 = glm::all(glm::equal(A0, glm::vec1(1), glm::epsilon<float>()));\n\t\tError += A1 ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::min(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::min(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::min(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::min(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::min(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::min(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint min_tern(int a, int b)\n\t{\n\t\treturn a < b ? a : b;\n\t}\n\n\tint min_int(int x, int y)\n\t{\n\t\treturn y ^ ((x ^ y) & -(x < y)); \n\t}\n\n\tstatic int perf(std::size_t Count)\n\t{\n\t\tstd::vector<int> A(Count);\n\t\tstd::vector<int> B(Count);\n\n\t\tstd::size_t const InternalCount = 200000;\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tA[i] = glm::linearRand(-1000, 1000);\n\t\t\tB[i] = glm::linearRand(-1000, 1000);\n\t\t}\n\n\t\tint Error = 0;\n\n\t\tglm::int32 SumA = 0;\n\t\t{\n\t\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\t\tfor (std::size_t j = 0; j < InternalCount; ++j)\n\t\t\tfor (std::size_t i = 0; i < Count; ++i)\n\t\t\t\tSumA += min_tern(A[i], B[i]);\n\n\t\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t\tstd::printf(\"min_tern Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\t}\n\n\t\tglm::int32 SumB = 0;\n\t\t{\n\t\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\t\tfor (std::size_t j = 0; j < InternalCount; ++j)\n\t\t\tfor (std::size_t i = 0; i < Count; ++i)\n\t\t\t\tSumB += min_int(A[i], B[i]);\n\n\t\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t\tstd::printf(\"min_int Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\t}\n\n\t\tError += SumA == SumB ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace min_\n\nnamespace max_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec1 A0 = glm::max(glm::vec1(1), glm::vec1(1));\n\t\tbool A1 = glm::all(glm::equal(A0, glm::vec1(1), glm::epsilon<float>()));\n\t\tError += A1 ? 0 : 1;\n\n\n\t\tglm::vec2 B0 = glm::max(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::max(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::max(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::max(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::max(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::max(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace max_\n\nnamespace clamp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\treturn Error;\n\t}\n}//namespace clamp_\n\nnamespace mix_\n{\n\ttemplate<typename T, typename B>\n\tstruct entry\n\t{\n\t\tT x;\n\t\tT y;\n\t\tB a;\n\t\tT Result;\n\t};\n\n\tentry<float, bool> const TestBool[] =\n\t{\n\t\t{0.0f, 1.0f, false, 0.0f},\n\t\t{0.0f, 1.0f, true, 1.0f},\n\t\t{-1.0f, 1.0f, false, -1.0f},\n\t\t{-1.0f, 1.0f, true, 1.0f}\n\t};\n\n\tentry<float, float> const TestFloat[] =\n\t{\n\t\t{0.0f, 1.0f, 0.0f, 0.0f},\n\t\t{0.0f, 1.0f, 1.0f, 1.0f},\n\t\t{-1.0f, 1.0f, 0.0f, -1.0f},\n\t\t{-1.0f, 1.0f, 1.0f, 1.0f}\n\t};\n\n\tentry<glm::vec2, bool> const TestVec2Bool[] =\n\t{\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), false, glm::vec2(0.0f)},\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), false, glm::vec2(-1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)}\n\t};\n\n\tentry<glm::vec2, glm::bvec2> const TestBVec2[] =\n\t{\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(0.0f)},\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(-1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true, false), glm::vec2(1.0f, -1.0f)}\n\t};\n\n\tentry<glm::vec3, bool> const TestVec3Bool[] =\n\t{\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), false, glm::vec3(0.0f)},\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), false, glm::vec3(-1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)}\n\t};\n\n\tentry<glm::vec3, glm::bvec3> const TestBVec3[] =\n\t{\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(0.0f)},\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(-1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},\n\t\t{glm::vec3(1.0f, 2.0f, 3.0f), glm::vec3(4.0f, 5.0f, 6.0f), glm::bvec3(true, false, true), glm::vec3(4.0f, 2.0f, 6.0f)}\n\t};\n\n\tentry<glm::vec4, bool> const TestVec4Bool[] = \n\t{\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), false, glm::vec4(0.0f)},\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), false, glm::vec4(-1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)}\n\t};\n\n\tentry<glm::vec4, glm::bvec4> const TestBVec4[] = \n\t{\n\t\t{glm::vec4(0.0f, 0.0f, 1.0f, 1.0f), glm::vec4(2.0f, 2.0f, 3.0f, 3.0f), glm::bvec4(false, true, false, true), glm::vec4(0.0f, 2.0f, 1.0f, 3.0f)},\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(false), glm::vec4(-1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},\n\t\t{glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(5.0f, 6.0f, 7.0f, 8.0f), glm::bvec4(true, false, true, false), glm::vec4(5.0f, 2.0f, 7.0f, 4.0f)}\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t// Float with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBool) / sizeof(entry<float, bool>); ++i)\n\t\t\t{\n\t\t\t\tfloat Result = glm::mix(TestBool[i].x, TestBool[i].y, TestBool[i].a);\n\t\t\t\tError += glm::equal(Result, TestBool[i].Result, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// Float with float\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(entry<float, float>); ++i)\n\t\t\t{\n\t\t\t\tfloat Result = glm::mix(TestFloat[i].x, TestFloat[i].y, TestFloat[i].a);\n\t\t\t\tError += glm::equal(Result, TestFloat[i].Result, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec2 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec2Bool) / sizeof(entry<glm::vec2, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec2 Result = glm::mix(TestVec2Bool[i].x, TestVec2Bool[i].y, TestVec2Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec2Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec2Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec2 with bvec2\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(entry<glm::vec2, glm::bvec2>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec2 Result = glm::mix(TestBVec2[i].x, TestBVec2[i].y, TestBVec2[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec2[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec2[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec3 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec3Bool) / sizeof(entry<glm::vec3, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec3 Result = glm::mix(TestVec3Bool[i].x, TestVec3Bool[i].y, TestVec3Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec3Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec3Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestVec3Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec3 with bvec3\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec3) / sizeof(entry<glm::vec3, glm::bvec3>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec3 Result = glm::mix(TestBVec3[i].x, TestBVec3[i].y, TestBVec3[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec3[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec3[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestBVec3[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec4Bool) / sizeof(entry<glm::vec4, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::mix(TestVec4Bool[i].x, TestVec4Bool[i].y, TestVec4Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec4Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec4Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestVec4Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.w, TestVec4Bool[i].Result.w, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 with bvec4\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec4) / sizeof(entry<glm::vec4, glm::bvec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::mix(TestBVec4[i].x, TestBVec4[i].y, TestBVec4[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec4[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec4[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestBVec4[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.w, TestBVec4[i].Result.w, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace mix_\n\nnamespace step_\n{\n\ttemplate<typename EDGE, typename VEC>\n\tstruct entry\n\t{\n\t\tEDGE edge;\n\t\tVEC x;\n\t\tVEC result;\n\t};\n\n\tentry<float, glm::vec4> TestVec4Scalar [] =\n\t{\n\t\t{ 1.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ 0.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ 0.0f, glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(0.0f) }\n\t};\n\n\tentry<glm::vec4, glm::vec4> TestVec4Vector [] =\n\t{\n\t\t{ glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(-2.0f, -3.0f, -4.0f, -5.0f), glm::vec4(0.0f) },\n\t\t{ glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ glm::vec4( 2.0f, 3.0f, 4.0f, 5.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(0.0f) },\n\t\t{ glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4(-1.0f,-2.0f,-3.0f,-4.0f), glm::vec4(0.0f) }\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t// scalar\n\t\t{\n\t\t\tfloat const Edge = 2.0f;\n\n\t\t\tfloat const A = glm::step(Edge, 1.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\t\tfloat const B = glm::step(Edge, 3.0f);\n\t\t\tError += glm::equal(B, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\t\tfloat const C = glm::step(Edge, 2.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t// vec4 and float\n\t\t{\n\t\t\tfor (std::size_t i = 0; i < sizeof(TestVec4Scalar) / sizeof(entry<float, glm::vec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::step(TestVec4Scalar[i].edge, TestVec4Scalar[i].x);\n\t\t\t\tError += glm::all(glm::equal(Result, TestVec4Scalar[i].result, glm::epsilon<float>())) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 and vec4\n\t\t{\n\t\t\tfor (std::size_t i = 0; i < sizeof(TestVec4Vector) / sizeof(entry<glm::vec4, glm::vec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::step(TestVec4Vector[i].edge, TestVec4Vector[i].x);\n\t\t\t\tError += glm::all(glm::equal(Result, TestVec4Vector[i].result, glm::epsilon<float>())) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace step_\n\nnamespace round_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = glm::round(0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::round(0.5f);\n\t\t\tError += (glm::equal(B, 1.0f, glm::epsilon<float>()) || glm::equal(B, 0.0f, glm::epsilon<float>())) ? 0 : 1;\n\t\t\tfloat C = glm::round(1.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::round(0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::round(0.9f);\n\t\t\tError += glm::equal(E, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::round(1.5f);\n\t\t\tError += glm::equal(F, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::round(1.9f);\n\t\t\tError += glm::equal(G, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tfloat A = glm::round(-0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::round(-0.5f);\n\t\t\tError += (glm::equal(B, -1.0f, glm::epsilon<float>()) || glm::equal(B, 0.0f, glm::epsilon<float>())) ? 0 : 1;\n\t\t\tfloat C = glm::round(-1.0f);\n\t\t\tError += glm::equal(C, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::round(-0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::round(-0.9f);\n\t\t\tError += glm::equal(E, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::round(-1.5f);\n\t\t\tError += glm::equal(F, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::round(-1.9f);\n\t\t\tError += glm::equal(G, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace round_\n\nnamespace roundEven\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A1 = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(A1, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A2 = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(A2, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A5 = glm::roundEven(-2.5f);\n\t\t\tError += glm::equal(A5, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A6 = glm::roundEven(2.5f);\n\t\t\tError += glm::equal(A6, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A3 = glm::roundEven(-3.5f);\n\t\t\tError += glm::equal(A3, -4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A4 = glm::roundEven(3.5f);\n\t\t\tError += glm::equal(A4, 4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C7 = glm::roundEven(-4.5f);\n\t\t\tError += glm::equal(C7, -4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C8 = glm::roundEven(4.5f);\n\t\t\tError += glm::equal(C8, 4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C1 = glm::roundEven(-5.5f);\n\t\t\tError += glm::equal(C1, -6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C2 = glm::roundEven(5.5f);\n\t\t\tError += glm::equal(C2, 6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C3 = glm::roundEven(-6.5f);\n\t\t\tError += glm::equal(C3, -6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C4 = glm::roundEven(6.5f);\n\t\t\tError += glm::equal(C4, 6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C5 = glm::roundEven(-7.5f);\n\t\t\tError += glm::equal(C5, -8.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C6 = glm::roundEven(7.5f);\n\t\t\tError += glm::equal(C6, 8.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tError += 0;\n\t\t}\n\n\t\t{\n\t\t\tfloat A7 = glm::roundEven(-2.4f);\n\t\t\tError += glm::equal(A7, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A8 = glm::roundEven(2.4f);\n\t\t\tError += glm::equal(A8, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B1 = glm::roundEven(-2.6f);\n\t\t\tError += glm::equal(B1, -3.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B2 = glm::roundEven(2.6f);\n\t\t\tError += glm::equal(B2, 3.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B3 = glm::roundEven(-2.0f);\n\t\t\tError += glm::equal(B3, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B4 = glm::roundEven(2.0f);\n\t\t\tError += glm::equal(B4, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tError += 0;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(0.5f);\n\t\t\tError += glm::equal(B, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(1.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(0.9f);\n\t\t\tError += glm::equal(E, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(F, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(1.9f);\n\t\t\tError += glm::equal(G, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(-0.0f);\n\t\t\tError += glm::equal(A,  0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(-0.5f);\n\t\t\tError += glm::equal(B, -0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(-1.0f);\n\t\t\tError += glm::equal(C, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(-0.1f);\n\t\t\tError += glm::equal(D,  0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(-0.9f);\n\t\t\tError += glm::equal(E, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(F, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(-1.9f);\n\t\t\tError += glm::equal(G, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(A, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(2.5f);\n\t\t\tError += glm::equal(B, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(3.5f);\n\t\t\tError += glm::equal(C, 4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(4.5f);\n\t\t\tError += glm::equal(D, 4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(5.5f);\n\t\t\tError += glm::equal(E, 6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(6.5f);\n\t\t\tError += glm::equal(F, 6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(7.5f);\n\t\t\tError += glm::equal(G, 8.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tfloat A = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(A, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(-2.5f);\n\t\t\tError += glm::equal(B, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(-3.5f);\n\t\t\tError += glm::equal(C, -4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(-4.5f);\n\t\t\tError += glm::equal(D, -4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(-5.5f);\n\t\t\tError += glm::equal(E, -6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(-6.5f);\n\t\t\tError += glm::equal(F, -6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(-7.5f);\n\t\t\tError += glm::equal(G, -8.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace roundEven\n\nnamespace isnan_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0;\n\t\tdouble Zero_d = 0.0;\n\n\t\t{\n\t\t\tError += true == glm::isnan(0.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec2(0.0 / Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec3(0.0 / Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec4(0.0 / Zero_d))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tError += true == glm::isnan(0.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec2(0.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec3(0.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec4(0.0f/Zero_f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace isnan_\n\nnamespace isinf_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0;\n\t\tdouble Zero_d = 0.0;\n\n\t\t{\n\t\t\tError += true == glm::isinf( 1.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::isinf(-1.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec2( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec2(-1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec3( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec3(-1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec4( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec4(-1.0/Zero_d))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tError += true == glm::isinf( 1.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::isinf(-1.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec2( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec2(-1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec3( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec3(-1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec4( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec4(-1.0f/Zero_f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace isinf_\n\nnamespace sign\n{\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_if(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_iec559 ||\n\t\t\t(std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), \"'sign' only accept signed inputs\");\n\n\t\tgenFIType result;\n\t\tif(x > genFIType(0))\n\t\t\tresult = genFIType(1);\n\t\telse if(x < genFIType(0))\n\t\t\tresult = genFIType(-1);\n\t\telse\n\t\t\tresult = genFIType(0);\n\t\treturn result;\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_alu1(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (x >> 31) | (static_cast<unsigned>(-x) >> 31);\n\t}\n\n\tGLM_FUNC_QUALIFIER int sign_alu2(int x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<int>::is_signed && std::numeric_limits<int>::is_integer, \"'sign' only accept integer inputs\");\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(push)\n#\t\t\tpragma warning(disable : 4146) //cast truncates constant value\n#\t\tendif\n\n\t\treturn -(static_cast<unsigned>(x) >> 31) | (-static_cast<unsigned>(x) >> 31);\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(pop)\n#\t\tendif\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_sub(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (static_cast<unsigned>(-x) >> 31) - (static_cast<unsigned>(x) >> 31);\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_cmp(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (x > 0) - (x < 0);\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{ std::numeric_limits<glm::int32>::max(),  1},\n\t\t\t{ std::numeric_limits<glm::int32>::min(), -1},\n\t\t\t{ 0, 0},\n\t\t\t{ 1, 1},\n\t\t\t{ 2, 1},\n\t\t\t{ 3, 1},\n\t\t\t{-1,-1},\n\t\t\t{-2,-1},\n\t\t\t{-3,-1}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::sign(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_cmp(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_if(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_alu1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_alu2(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_i32vec4()\n\t{\n\t\ttype<glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4( 1), glm::ivec4( 1)},\n\t\t\t{glm::ivec4( 0), glm::ivec4( 0)},\n\t\t\t{glm::ivec4( 2), glm::ivec4( 1)},\n\t\t\t{glm::ivec4( 3), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(-1), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(-2), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(-3), glm::ivec4(-1)}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::ivec4>); ++i)\n\t\t{\n\t\t\tglm::ivec4 Result = glm::sign(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_f32vec4()\n\t{\n\t\ttype<glm::vec4> const Data[] =\n\t\t{\n\t\t\t{glm::vec4( 1), glm::vec4( 1)},\n\t\t\t{glm::vec4( 0), glm::vec4( 0)},\n\t\t\t{glm::vec4( 2), glm::vec4( 1)},\n\t\t\t{glm::vec4( 3), glm::vec4( 1)},\n\t\t\t{glm::vec4(-1), glm::vec4(-1)},\n\t\t\t{glm::vec4(-2), glm::vec4(-1)},\n\t\t\t{glm::vec4(-3), glm::vec4(-1)}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::vec4>); ++i)\n\t\t{\n\t\t\tglm::vec4 Result = glm::sign(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result, glm::epsilon<float>())) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int32();\n\t\tError += test_i32vec4();\n\t\tError += test_f32vec4();\n\n\t\treturn Error;\n\t}\n\n\tint perf_rand(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::size_t const Count = Samples;\n\t\tstd::vector<glm::int32> Input, Output;\n\t\tInput.resize(Count);\n\t\tOutput.resize(Count);\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tInput[i] = static_cast<glm::int32>(glm::linearRand(-65536.f, 65536.f));\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_cmp(Input[i]);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_if(Input[i]);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu1(Input[i]);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu2(Input[i]);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_sub(Input[i]);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = glm::sign(Input[i]);\n\n\t\tstd::clock_t Timestamp6 = std::clock();\n\n\t\tstd::printf(\"sign_cmp(rand) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(rand) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(rand) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(rand) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(rand) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\t\tstd::printf(\"glm::sign(rand) Time %d clocks\\n\", static_cast<int>(Timestamp6 - Timestamp5));\n\n\t\treturn Error;\n\t}\n\n\tint perf_linear(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::size_t const Count = Samples;\n\t\tstd::vector<glm::int32> Input, Output;\n\t\tInput.resize(Count);\n\t\tOutput.resize(Count);\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tInput[i] = static_cast<glm::int32>(i);\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_cmp(Input[i]);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_if(Input[i]);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu1(Input[i]);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu2(Input[i]);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_sub(Input[i]);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tstd::printf(\"sign_cmp(linear) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(linear) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(linear) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(linear) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(linear) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\n\t\treturn Error;\n\t}\n\n\tint perf_linear_cal(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tglm::int32 const Count = static_cast<glm::int32>(Samples);\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\t\tglm::int32 Sum = 0;\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_cmp(i);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_if(i);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_alu1(i);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_alu2(i);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_sub(i);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tstd::printf(\"Sum %d\\n\", static_cast<int>(Sum));\n\n\t\tstd::printf(\"sign_cmp(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_linear_cal(Samples);\n\t\tError += perf_linear(Samples);\n\t\tError += perf_rand(Samples);\n\n\t\treturn Error;\n\t}\n}//namespace sign\n\nnamespace frexp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec1 const x(1024);\n\t\t\tglm::ivec1 exp;\n\t\t\tglm::vec1 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec1(0.5), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec1(11))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 const x(1024, 0.24);\n\t\t\tglm::ivec2 exp;\n\t\t\tglm::vec2 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec2(0.5, 0.96), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec2(11, -2))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 const x(1024, 0.24, 0);\n\t\t\tglm::ivec3 exp;\n\t\t\tglm::vec3 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec3(0.5, 0.96, 0.0), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec3(11, -2, 0))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const x(1024, 0.24, 0, -1.33);\n\t\t\tglm::ivec4 exp;\n\t\t\tglm::vec4 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec4(0.5, 0.96, 0.0, -0.665), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec4(11, -2, 0, 1))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace frexp_\n\nnamespace ldexp_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::vec1 A = glm::vec1(0.5);\n\t\t\tglm::ivec1 exp = glm::ivec1(11);\n\t\t\tglm::vec1 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec1(1024),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A = glm::vec2(0.5, 0.96);\n\t\t\tglm::ivec2 exp = glm::ivec2(11, -2);\n\t\t\tglm::vec2 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec2(1024, .24),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A = glm::vec3(0.5, 0.96, 0.0);\n\t\t\tglm::ivec3 exp = glm::ivec3(11, -2, 0);\n\t\t\tglm::vec3 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec3(1024, .24, 0),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A = glm::vec4(0.5, 0.96, 0.0, -0.665);\n\t\t\tglm::ivec4 exp = glm::ivec4(11, -2, 0, 1);\n\t\t\tglm::vec4 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec4(1024, .24, 0, -1.33),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace ldexp_\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::abs(1.0f) > 0.0f, \"GLM: Failed constexpr\");\n\tconstexpr glm::vec1 const A = glm::abs(glm::vec1(1.0f));\n\tconstexpr glm::vec2 const B = glm::abs(glm::vec2(1.0f));\n\tconstexpr glm::vec3 const C = glm::abs(glm::vec3(1.0f));\n\tconstexpr glm::vec4 const D = glm::abs(glm::vec4(1.0f));\n#endif // GLM_HAS_CONSTEXPR\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_constexpr();\n\tError += sign::test();\n\tError += floor_::test();\n\tError += mod_::test();\n\tError += modf_::test();\n\tError += floatBitsToInt::test();\n\tError += floatBitsToUint::test();\n\tError += mix_::test();\n\tError += step_::test();\n\tError += max_::test();\n\tError += min_::test();\n\tError += clamp_::test();\n\tError += round_::test();\n\tError += roundEven::test();\n\tError += isnan_::test();\n\tError += isinf_::test();\n\tError += frexp_::test();\n\tError += ldexp_::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t Samples = 1000;\n#\telse\n\t\tstd::size_t Samples = 1;\n#\tendif\n\tError += sign::perf(Samples);\n\n\tError += min_::perf(Samples);\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_exponential.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/common.hpp>\n#include <glm/exponential.hpp>\n\nstatic int test_pow()\n{\n\tint Error(0);\n\n\tfloat A = glm::pow(2.f, 2.f);\n\tError += glm::equal(A, 4.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::pow(glm::vec1(2.f), glm::vec1(2.f));\n\tError += glm::all(glm::equal(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::pow(glm::vec2(2.f), glm::vec2(2.f));\n\tError += glm::all(glm::equal(C, glm::vec2(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::pow(glm::vec3(2.f), glm::vec3(2.f));\n\tError += glm::all(glm::equal(D, glm::vec3(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::pow(glm::vec4(2.f), glm::vec4(2.f));\n\tError += glm::all(glm::equal(E, glm::vec4(4.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sqrt()\n{\n\tint Error = 0;\n\n\tfloat A = glm::sqrt(4.f);\n\tError += glm::equal(A, 2.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::sqrt(glm::vec1(4.f));\n\tError += glm::all(glm::equal(B, glm::vec1(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::sqrt(glm::vec2(4.f));\n\tError += glm::all(glm::equal(C, glm::vec2(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::sqrt(glm::vec3(4.f));\n\tError += glm::all(glm::equal(D, glm::vec3(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::sqrt(glm::vec4(4.f));\n\tError += glm::all(glm::equal(E, glm::vec4(2.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_exp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::exp(1.f);\n\tError += glm::equal(A, glm::e<float>(), 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::exp(glm::vec1(1.f));\n\tError += glm::all(glm::equal(B, glm::vec1(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::exp(glm::vec2(1.f));\n\tError += glm::all(glm::equal(C, glm::vec2(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::exp(glm::vec3(1.f));\n\tError += glm::all(glm::equal(D, glm::vec3(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::exp(glm::vec4(1.f));\n\tError += glm::all(glm::equal(E, glm::vec4(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_log()\n{\n\tint Error = 0;\n\n\tfloat const A = glm::log(glm::e<float>());\n\tError += glm::equal(A, 1.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 const B = glm::log(glm::vec1(glm::e<float>()));\n\tError += glm::all(glm::equal(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 const C = glm::log(glm::vec2(glm::e<float>()));\n\tError += glm::all(glm::equal(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 const D = glm::log(glm::vec3(glm::e<float>()));\n\tError += glm::all(glm::equal(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 const E = glm::log(glm::vec4(glm::e<float>()));\n\tError += glm::all(glm::equal(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_exp2()\n{\n\tint Error = 0;\n\n\tfloat A = glm::exp2(4.f);\n\tError += glm::equal(A, 16.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::exp2(glm::vec1(4.f));\n\tError += glm::all(glm::equal(B, glm::vec1(16.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::exp2(glm::vec2(4.f, 3.f));\n\tError += glm::all(glm::equal(C, glm::vec2(16.f, 8.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::exp2(glm::vec3(4.f, 3.f, 2.f));\n\tError += glm::all(glm::equal(D, glm::vec3(16.f, 8.f, 4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::exp2(glm::vec4(4.f, 3.f, 2.f, 1.f));\n\tError += glm::all(glm::equal(E, glm::vec4(16.f, 8.f, 4.f, 2.f), 0.01f)) ? 0 : 1;\n\n#   if GLM_HAS_CXX11_STL\n\t//large exponent\n\tfloat F = glm::exp2(23.f);\n\tError += glm::equal(F, 8388608.f, 0.01f) ? 0 : 1;\n#   endif\n\n\treturn Error;\n}\n\nstatic int test_log2()\n{\n\tint Error = 0;\n\n\tfloat A = glm::log2(16.f);\n\tError += glm::equal(A, 4.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::log2(glm::vec1(16.f));\n\tError += glm::all(glm::equal(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::log2(glm::vec2(16.f, 8.f));\n\tError += glm::all(glm::equal(C, glm::vec2(4.f, 3.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::log2(glm::vec3(16.f, 8.f, 4.f));\n\tError += glm::all(glm::equal(D, glm::vec3(4.f, 3.f, 2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::log2(glm::vec4(16.f, 8.f, 4.f, 2.f));\n\tError += glm::all(glm::equal(E, glm::vec4(4.f, 3.f, 2.f, 1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_inversesqrt()\n{\n\tint Error = 0;\n\n\tfloat A = glm::inversesqrt(16.f) * glm::sqrt(16.f);\n\tError += glm::equal(A, 1.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::inversesqrt(glm::vec1(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::inversesqrt(glm::vec2(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::inversesqrt(glm::vec3(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::inversesqrt(glm::vec4(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_pow();\n\tError += test_sqrt();\n\tError += test_exp();\n\tError += test_log();\n\tError += test_exp2();\n\tError += test_log2();\n\tError += test_inversesqrt();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_geometric.cpp",
    "content": "#include <glm/geometric.hpp>\n#include <glm/trigonometric.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <limits>\n\nnamespace length\n{\n\tint test()\n\t{\n\t\tfloat Length1 = glm::length(glm::vec1(1));\n\t\tfloat Length2 = glm::length(glm::vec2(1, 0));\n\t\tfloat Length3 = glm::length(glm::vec3(1, 0, 0));\n\t\tfloat Length4 = glm::length(glm::vec4(1, 0, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Length1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length2 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length3 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length4 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace length\n\nnamespace distance\n{\n\tint test()\n\t{\n\t\tfloat Distance1 = glm::distance(glm::vec1(1), glm::vec1(1));\n\t\tfloat Distance2 = glm::distance(glm::vec2(1, 0), glm::vec2(1, 0));\n\t\tfloat Distance3 = glm::distance(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));\n\t\tfloat Distance4 = glm::distance(glm::vec4(1, 0, 0, 0), glm::vec4(1, 0, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Distance1) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance2) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance3) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance4) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace distance\n\nnamespace dot\n{\n\tint test()\n\t{\n\t\tfloat Dot1 = glm::dot(glm::vec1(1), glm::vec1(1));\n\t\tfloat Dot2 = glm::dot(glm::vec2(1), glm::vec2(1));\n\t\tfloat Dot3 = glm::dot(glm::vec3(1), glm::vec3(1));\n\t\tfloat Dot4 = glm::dot(glm::vec4(1), glm::vec4(1));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Dot1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot2 - 2.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot3 - 3.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot4 - 4.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace dot\n\nnamespace cross\n{\n\tint test()\n\t{\n\t\tglm::vec3 Cross1 = glm::cross(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\t\tglm::vec3 Cross2 = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::all(glm::lessThan(glm::abs(Cross1 - glm::vec3(0, 0, 1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\t\tError += glm::all(glm::lessThan(glm::abs(Cross2 - glm::vec3(0, 0,-1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace cross\n\nnamespace normalize\n{\n\tint test()\n\t{\n\t\tglm::vec3 Normalize1 = glm::normalize(glm::vec3(1, 0, 0));\n\t\tglm::vec3 Normalize2 = glm::normalize(glm::vec3(2, 0, 0));\n\n\t\tglm::vec3 Normalize3 = glm::normalize(glm::vec3(-0.6, 0.7, -0.5));\n\n\t\tglm::vec3 ro = glm::vec3(glm::cos(5.f) * 3.f, 2.f, glm::sin(5.f) * 3.f);\n\t\tglm::vec3 w = glm::normalize(glm::vec3(0, -0.2f, 0) - ro);\n\t\tglm::vec3 u = glm::normalize(glm::cross(w, glm::vec3(0, 1, 0)));\n\t\tglm::vec3 v = glm::cross(u, w);\n\n\t\tint Error = 0;\n\n\t\tError += glm::all(glm::lessThan(glm::abs(Normalize1 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\t\tError += glm::all(glm::lessThan(glm::abs(Normalize2 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace normalize\n\nnamespace faceforward\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec3 N(0.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 I(1.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 Nref(0.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 F = glm::faceforward(N, I, Nref);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace faceforward\n\nnamespace reflect\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec2 A(1.0f,-1.0f);\n\t\t\tglm::vec2 B(0.0f, 1.0f);\n\t\t\tglm::vec2 C = glm::reflect(A, B);\n\t\t\tError += glm::all(glm::equal(C, glm::vec2(1.0, 1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(1.0f,-1.0f);\n\t\t\tglm::dvec2 B(0.0f, 1.0f);\n\t\t\tglm::dvec2 C = glm::reflect(A, B);\n\t\t\tError += glm::all(glm::equal(C, glm::dvec2(1.0, 1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace reflect\n\nnamespace refract\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A(-1.0f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::refract(A, B, 0.5f);\n\t\t\tError += glm::equal(C, -1.0f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(0.0f,-1.0f);\n\t\t\tglm::vec2 B(0.0f, 1.0f);\n\t\t\tglm::vec2 C = glm::refract(A, B, 0.5f);\n\t\t\tError += glm::all(glm::equal(C, glm::vec2(0.0, -1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(0.0f,-1.0f);\n\t\t\tglm::dvec2 B(0.0f, 1.0f);\n\t\t\tglm::dvec2 C = glm::refract(A, B, 0.5);\n\t\t\tError += glm::all(glm::equal(C, glm::dvec2(0.0, -1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace refract\n\nint main()\n{\n\tint Error(0);\n\n\tError += length::test();\n\tError += distance::test();\n\tError += dot::test();\n\tError += cross::test();\n\tError += normalize::test();\n\tError += faceforward::test();\n\tError += reflect::test();\n\tError += refract::test();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_integer.cpp",
    "content": "#include <glm/integer.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_int2.hpp>\n#include <glm/ext/vector_int3.hpp>\n#include <glm/ext/vector_int4.hpp>\n#include <glm/ext/vector_uint1.hpp>\n#include <glm/ext/vector_uint2.hpp>\n#include <glm/ext/vector_uint3.hpp>\n#include <glm/ext/vector_uint4.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nenum result\n{\n\tSUCCESS,\n\tFAIL,\n\tASSERT,\n\tSTATIC_ASSERT\n};\n\nnamespace bitfieldInsert\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tBase;\n\t\tgenType\t\tInsert;\n\t\tint\t\t\tOffset;\n\t\tint\t\t\tBits;\n\t\tgenType\t\tReturn;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0x00000000, 0xffffffff,  0, 32, 0xffffffff},\n\t\t{0x00000000, 0xffffffff,  0, 31, 0x7fffffff},\n\t\t{0x00000000, 0xffffffff,  0,  0, 0x00000000},\n\t\t{0xff000000, 0x000000ff,  8,  8, 0xff00ff00},\n\t\t{0xffff0000, 0xffff0000, 16, 16, 0x00000000},\n\t\t{0x0000ffff, 0x0000ffff, 16, 16, 0xffffffff}\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\tglm::uint count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(glm::uint i = 0; i < count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldInsert(\n\t\t\t\tData32[i].Base,\n\t\t\t\tData32[i].Insert,\n\t\t\t\tData32[i].Offset,\n\t\t\t\tData32[i].Bits);\n\n\t\t\tError += Data32[i].Return == Return ? 0 : 1;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n}//bitfieldInsert\n\nnamespace bitfieldExtract\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tint\t\t\tOffset;\n\t\tint\t\t\tBits;\n\t\tgenType\t\tReturn;\n\t\tresult\t\tResult;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0xffffffff, 0,32, 0xffffffff, SUCCESS},\n\t\t{0xffffffff, 8, 0, 0x00000000, SUCCESS},\n\t\t{0x00000000, 0,32, 0x00000000, SUCCESS},\n\t\t{0x0f0f0f0f, 0,32, 0x0f0f0f0f, SUCCESS},\n\t\t{0x00000000, 8, 0, 0x00000000, SUCCESS},\n\t\t{0x80000000,31, 1, 0x00000001, SUCCESS},\n\t\t{0x7fffffff,31, 1, 0x00000000, SUCCESS},\n\t\t{0x00000300, 8, 8, 0x00000003, SUCCESS},\n\t\t{0x0000ff00, 8, 8, 0x000000ff, SUCCESS},\n\t\t{0xfffffff0, 0, 5, 0x00000010, SUCCESS},\n\t\t{0x000000ff, 1, 3, 0x00000007, SUCCESS},\n\t\t{0x000000ff, 0, 3, 0x00000007, SUCCESS},\n\t\t{0x00000000, 0, 2, 0x00000000, SUCCESS},\n\t\t{0xffffffff, 0, 8, 0x000000ff, SUCCESS},\n\t\t{0xffff0000,16,16, 0x0000ffff, SUCCESS},\n\t\t{0xfffffff0, 0, 8, 0x00000000, FAIL},\n\t\t{0xffffffff,16,16, 0x00000000, FAIL},\n\t\t//{0xffffffff,32, 1, 0x00000000, ASSERT}, // Throw an assert \n\t\t//{0xffffffff, 0,33, 0x00000000, ASSERT}, // Throw an assert \n\t\t//{0xffffffff,16,16, 0x00000000, ASSERT}, // Throw an assert \n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::uint count = sizeof(Data32) / sizeof(typeU32);\n\n\t\tfor(glm::uint i = 0; i < count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldExtract(\n\t\t\t\tData32[i].Value, \n\t\t\t\tData32[i].Offset, \n\t\t\t\tData32[i].Bits);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\n\t\t\tif(Data32[i].Result == SUCCESS && Compare)\n\t\t\t\tcontinue;\n\t\t\telse if(Data32[i].Result == FAIL && !Compare)\n\t\t\t\tcontinue;\n\n\t\t\tError += 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//extractField\n\nnamespace bitfieldReverse\n{\n/*\n\tGLM_FUNC_QUALIFIER unsigned int bitfieldReverseLoop(unsigned int v)\n\t{\n\t\tunsigned int Result(0);\n\t\tunsigned int const BitSize = static_cast<unsigned int>(sizeof(unsigned int) * 8);\n\t\tfor(unsigned int i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tunsigned int const BitSet(v & (static_cast<unsigned int>(1) << i));\n\t\t\tunsigned int const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64_t bitfieldReverseLoop(glm::uint64_t v)\n\t{\n\t\tglm::uint64_t Result(0);\n\t\tglm::uint64_t const BitSize = static_cast<glm::uint64_t>(sizeof(unsigned int) * 8);\n\t\tfor(glm::uint64_t i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tglm::uint64_t const BitSet(v & (static_cast<glm::uint64_t>(1) << i));\n\t\t\tglm::uint64_t const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n*/\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> bitfieldReverseLoop(glm::vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\tglm::vec<L, T, Q> Result(0);\n\t\tT const BitSize = static_cast<T>(sizeof(T) * 8);\n\t\tfor(T i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tglm::vec<L, T, Q> const BitSet(v & (static_cast<T>(1) << i));\n\t\t\tglm::vec<L, T, Q> const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T bitfieldReverseLoop(T v)\n\t{\n\t\treturn bitfieldReverseLoop(glm::vec<1, T>(v)).x;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldReverseUint32(glm::uint32 x)\n\t{\n\t\tx = (x & 0x55555555) <<  1 | (x & 0xAAAAAAAA) >>  1;\n\t\tx = (x & 0x33333333) <<  2 | (x & 0xCCCCCCCC) >>  2;\n\t\tx = (x & 0x0F0F0F0F) <<  4 | (x & 0xF0F0F0F0) >>  4;\n\t\tx = (x & 0x00FF00FF) <<  8 | (x & 0xFF00FF00) >>  8;\n\t\tx = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldReverseUint64(glm::uint64 x)\n\t{\n\t\tx = (x & 0x5555555555555555) <<  1 | (x & 0xAAAAAAAAAAAAAAAA) >>  1;\n\t\tx = (x & 0x3333333333333333) <<  2 | (x & 0xCCCCCCCCCCCCCCCC) >>  2;\n\t\tx = (x & 0x0F0F0F0F0F0F0F0F) <<  4 | (x & 0xF0F0F0F0F0F0F0F0) >>  4;\n\t\tx = (x & 0x00FF00FF00FF00FF) <<  8 | (x & 0xFF00FF00FF00FF00) >>  8;\n\t\tx = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;\n\t\tx = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;\n\t\treturn x;\n\t}\n\n\ttemplate<bool EXEC = false>\n\tstruct compute_bitfieldReverseStep\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_bitfieldReverseStep<true>\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) << Shift | (v & (~Mask)) >> Shift;\n\t\t}\n\t};\n\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> bitfieldReverseOps(glm::vec<L, T, Q> const& v)\n\t{\n\t\tglm::vec<L, T, Q> x(v);\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32));\n\t\treturn x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType bitfieldReverseOps(genType x)\n\t{\n\t\treturn bitfieldReverseOps(glm::vec<1, genType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t\tresult\t\tResult;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0x00000001, 0x80000000, SUCCESS},\n\t\t{0x0000000f, 0xf0000000, SUCCESS},\n\t\t{0x000000ff, 0xff000000, SUCCESS},\n\t\t{0xf0000000, 0x0000000f, SUCCESS},\n\t\t{0xff000000, 0x000000ff, SUCCESS},\n\t\t{0xffffffff, 0xffffffff, SUCCESS},\n\t\t{0x00000000, 0x00000000, SUCCESS}\n\t};\n\n\ttypedef type<glm::uint64> typeU64;\n\n\ttypeU64 const Data64[] =\n\t{\n\t\t{0x00000000000000ff, 0xff00000000000000, SUCCESS},\n\t\t{0x000000000000000f, 0xf000000000000000, SUCCESS},\n\t\t{0xf000000000000000, 0x000000000000000f, SUCCESS},\n\t\t{0xffffffffffffffff, 0xffffffffffffffff, SUCCESS},\n\t\t{0x0000000000000000, 0x0000000000000000, SUCCESS}\n\t};\n\n\tstatic int test32_bitfieldReverse()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldReverse(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseLoop()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseLoop(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseUint32()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseUint32(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseOps()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseOps(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverse()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = glm::bitfieldReverse(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseLoop()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseLoop(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseUint64()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseUint64(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseOps()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseOps(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test32_bitfieldReverse();\n\t\tError += test32_bitfieldReverseLoop();\n\t\tError += test32_bitfieldReverseUint32();\n\t\tError += test32_bitfieldReverseOps();\n\n\t\tError += test64_bitfieldReverse();\n\t\tError += test64_bitfieldReverseLoop();\n\t\tError += test64_bitfieldReverseUint64();\n\t\tError += test64_bitfieldReverseOps();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf32(glm::uint32 Count)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::vector<glm::uint32> Data;\n\t\tData.resize(static_cast<std::size_t>(Count));\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = glm::bitfieldReverse(k);\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseLoop(k);\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseUint32(k);\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseOps(k);\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldReverse: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"bitfieldReverseLoop: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"bitfieldReverseUint32: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"bitfieldReverseOps: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf64(glm::uint64 Count)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::vector<glm::uint64> Data;\n\t\tData.resize(static_cast<std::size_t>(Count));\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = glm::bitfieldReverse(k);\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseLoop<glm::uint64>(k);\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseUint64(k);\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseOps(k);\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldReverse - 64: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"bitfieldReverseLoop - 64: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"bitfieldReverseUint - 64: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"bitfieldReverseOps - 64: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tError += perf32(static_cast<glm::uint32>(Samples));\n\t\tError += perf64(static_cast<glm::uint64>(Samples));\n\n\t\treturn Error;\n\t}\n}//bitfieldReverse\n\nnamespace findMSB\n{\n\ttemplate<typename genType, typename retType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tretType\t\tReturn;\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstatic int findMSB_intrinsic(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\tunsigned long Result(0);\n\t\t\t_BitScanReverse(&Result, Value);\n\t\t\treturn int(Result);\n\t\t}\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n#\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\ttemplate<typename genIUType>\n\t\tstatic int findMSB_avx(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\treturn int(_tzcnt_u32(Value));\n\t\t}\n#\tendif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\n\ttemplate<typename genIUType>\n\tstatic int findMSB_095(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\t\t\n\t\tif(Value == genIUType(0) || Value == genIUType(-1))\n\t\t\treturn -1;\n\t\telse if(Value > 0)\n\t\t{\n\t\t\tgenIUType Bit = genIUType(-1);\n\t\t\tfor(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){}\n\t\t\treturn static_cast<int>(Bit);\n\t\t}\n\t\telse //if(Value < 0)\n\t\t{\n\t\t\tint const BitCount(sizeof(genIUType) * 8);\n\t\t\tint MostSignificantBit(-1);\n\t\t\tfor(int BitIndex(0); BitIndex < BitCount; ++BitIndex)\n\t\t\t\tMostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex;\n\t\t\tassert(MostSignificantBit >= 0);\n\t\t\treturn MostSignificantBit;\n\t\t}\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findMSB_nlz1(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\tif (x == 0)\n\t\t\treturn -1;\n\n\t\tint n = 0;\n\t\tif (x <= 0x0000FFFF) {n = n +16; x = x <<16;}\n\t\tif (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}\n\t\tif (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}\n\t\tif (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}\n\t\tif (x <= 0x7FFFFFFF) {n = n + 1;}\n\t\treturn 31 - n;\n\t}\n\n\tstatic int findMSB_nlz2(unsigned int x)\n\t{\n\t\tunsigned int y;\n\t\tint n = 32;\n\n\t\ty = x >>16;  if (y != 0) {n = n -16;  x = y;}\n\t\ty = x >> 8;  if (y != 0) {n = n - 8;  x = y;}\n\t\ty = x >> 4;  if (y != 0) {n = n - 4;  x = y;}\n\t\ty = x >> 2;  if (y != 0) {n = n - 2;  x = y;}\n\t\ty = x >> 1;  if (y != 0) return n - 2;\n\t\treturn 32 - (n - static_cast<int>(x));\n\t}\n\n\tstatic int findMSB_pop(unsigned int x)\n\t{\n\t\tx = x | (x >> 1);\n\t\tx = x | (x >> 2);\n\t\tx = x | (x >> 4);\n\t\tx = x | (x >> 8);\n\t\tx = x | (x >>16);\n\t\treturn 31 - glm::bitCount(~x);\n\t}\n\n\tstatic int perf_int(std::size_t Count)\n\t{\n\t\ttype<int, int> const Data[] =\n\t\t{\n\t\t\t{0x00000000, -1},\n\t\t\t{0x00000001,  0},\n\t\t\t{0x00000002,  1},\n\t\t\t{0x00000003,  1},\n\t\t\t{0x00000004,  2},\n\t\t\t{0x00000005,  2},\n\t\t\t{0x00000007,  2},\n\t\t\t{0x00000008,  3},\n\t\t\t{0x00000010,  4},\n\t\t\t{0x00000020,  5},\n\t\t\t{0x00000040,  6},\n\t\t\t{0x00000080,  7},\n\t\t\t{0x00000100,  8},\n\t\t\t{0x00000200,  9},\n\t\t\t{0x00000400, 10},\n\t\t\t{0x00000800, 11},\n\t\t\t{0x00001000, 12},\n\t\t\t{0x00002000, 13},\n\t\t\t{0x00004000, 14},\n\t\t\t{0x00008000, 15},\n\t\t\t{0x00010000, 16},\n\t\t\t{0x00020000, 17},\n\t\t\t{0x00040000, 18},\n\t\t\t{0x00080000, 19},\n\t\t\t{0x00100000, 20},\n\t\t\t{0x00200000, 21},\n\t\t\t{0x00400000, 22},\n\t\t\t{0x00800000, 23},\n\t\t\t{0x01000000, 24},\n\t\t\t{0x02000000, 25},\n\t\t\t{0x04000000, 26},\n\t\t\t{0x08000000, 27},\n\t\t\t{0x10000000, 28},\n\t\t\t{0x20000000, 29},\n\t\t\t{0x40000000, 30}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = glm::findMSB(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_nlz1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_nlz2(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_095(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t\t{\n\t\t\t\tint Result = findMSB_intrinsic(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\tstd::clock_t Timestamps5 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_pop(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps6 = std::clock();\n\n#\t\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t\t{\n\t\t\t\tint Result = findMSB_avx(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t\t}\n\n\t\t\tstd::clock_t Timestamps7 = std::clock();\n#\t\tendif\n\n\t\tstd::printf(\"glm::findMSB: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"findMSB - nlz1: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"findMSB - nlz2: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"findMSB - 0.9.5: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tstd::printf(\"findMSB - intrinsics: %d clocks\\n\", static_cast<int>(Timestamps5 - Timestamps4));\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\t\tstd::printf(\"findMSB - pop: %d clocks\\n\", static_cast<int>(Timestamps6 - Timestamps5));\n\n#\t\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\t\tstd::printf(\"findMSB - avx tzcnt: %d clocks\\n\", static_cast<int>(Timestamps7 - Timestamps6));\n#\t\tendif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\n\t\treturn Error;\n\t}\n\n\tstatic int test_ivec4()\n\t{\n\t\ttype<glm::ivec4, glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4(0x00000000), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(0x00000001), glm::ivec4( 0)},\n\t\t\t{glm::ivec4(0x00000002), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(0x00000003), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(0x00000004), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000005), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000007), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000008), glm::ivec4( 3)},\n\t\t\t{glm::ivec4(0x00000010), glm::ivec4( 4)},\n\t\t\t{glm::ivec4(0x00000020), glm::ivec4( 5)},\n\t\t\t{glm::ivec4(0x00000040), glm::ivec4( 6)},\n\t\t\t{glm::ivec4(0x00000080), glm::ivec4( 7)},\n\t\t\t{glm::ivec4(0x00000100), glm::ivec4( 8)},\n\t\t\t{glm::ivec4(0x00000200), glm::ivec4( 9)},\n\t\t\t{glm::ivec4(0x00000400), glm::ivec4(10)},\n\t\t\t{glm::ivec4(0x00000800), glm::ivec4(11)},\n\t\t\t{glm::ivec4(0x00001000), glm::ivec4(12)},\n\t\t\t{glm::ivec4(0x00002000), glm::ivec4(13)},\n\t\t\t{glm::ivec4(0x00004000), glm::ivec4(14)},\n\t\t\t{glm::ivec4(0x00008000), glm::ivec4(15)},\n\t\t\t{glm::ivec4(0x00010000), glm::ivec4(16)},\n\t\t\t{glm::ivec4(0x00020000), glm::ivec4(17)},\n\t\t\t{glm::ivec4(0x00040000), glm::ivec4(18)},\n\t\t\t{glm::ivec4(0x00080000), glm::ivec4(19)},\n\t\t\t{glm::ivec4(0x00100000), glm::ivec4(20)},\n\t\t\t{glm::ivec4(0x00200000), glm::ivec4(21)},\n\t\t\t{glm::ivec4(0x00400000), glm::ivec4(22)},\n\t\t\t{glm::ivec4(0x00800000), glm::ivec4(23)},\n\t\t\t{glm::ivec4(0x01000000), glm::ivec4(24)},\n\t\t\t{glm::ivec4(0x02000000), glm::ivec4(25)},\n\t\t\t{glm::ivec4(0x04000000), glm::ivec4(26)},\n\t\t\t{glm::ivec4(0x08000000), glm::ivec4(27)},\n\t\t\t{glm::ivec4(0x10000000), glm::ivec4(28)},\n\t\t\t{glm::ivec4(0x20000000), glm::ivec4(29)},\n\t\t\t{glm::ivec4(0x40000000), glm::ivec4(30)}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::ivec4, glm::ivec4>); ++i)\n\t\t{\n\t\t\tglm::ivec4 Result0 = glm::findMSB(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result0)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test_int()\n\t{\n\t\ttypedef type<glm::uint, int> entry;\n\n\t\tentry const Data[] =\n\t\t{\n\t\t\t{0x00000000, -1},\n\t\t\t{0x00000001,  0},\n\t\t\t{0x00000002,  1},\n\t\t\t{0x00000003,  1},\n\t\t\t{0x00000004,  2},\n\t\t\t{0x00000005,  2},\n\t\t\t{0x00000007,  2},\n\t\t\t{0x00000008,  3},\n\t\t\t{0x00000010,  4},\n\t\t\t{0x00000020,  5},\n\t\t\t{0x00000040,  6},\n\t\t\t{0x00000080,  7},\n\t\t\t{0x00000100,  8},\n\t\t\t{0x00000200,  9},\n\t\t\t{0x00000400, 10},\n\t\t\t{0x00000800, 11},\n\t\t\t{0x00001000, 12},\n\t\t\t{0x00002000, 13},\n\t\t\t{0x00004000, 14},\n\t\t\t{0x00008000, 15},\n\t\t\t{0x00010000, 16},\n\t\t\t{0x00020000, 17},\n\t\t\t{0x00040000, 18},\n\t\t\t{0x00080000, 19},\n\t\t\t{0x00100000, 20},\n\t\t\t{0x00200000, 21},\n\t\t\t{0x00400000, 22},\n\t\t\t{0x00800000, 23},\n\t\t\t{0x01000000, 24},\n\t\t\t{0x02000000, 25},\n\t\t\t{0x04000000, 26},\n\t\t\t{0x08000000, 27},\n\t\t\t{0x10000000, 28},\n\t\t\t{0x20000000, 29},\n\t\t\t{0x40000000, 30}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = glm::findMSB(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_nlz1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n/*\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_nlz2(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n*/\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_095(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result0 = findMSB_intrinsic(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_pop(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_ivec4();\n\t\tError += test_int();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_int(Samples);\n\n\t\treturn Error;\n\t}\n}//findMSB\n\nnamespace findLSB\n{\n\ttemplate<typename genType, typename retType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tretType\t\tReturn;\n\t};\n\n\ttypedef type<int, int> entry;\n\n\tentry const DataI32[] =\n\t{\n\t\t{0x00000001,  0},\n\t\t{0x00000003,  0},\n\t\t{0x00000002,  1},\n\t\t// {0x80000000, 31}, // Clang generates an error with this\n\t\t{0x00010000, 16},\n\t\t{0x7FFF0000, 16},\n\t\t{0x7F000000, 24},\n\t\t{0x7F00FF00,  8},\n\t\t{0x00000000, -1}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstatic int findLSB_intrinsic(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\tunsigned long Result(0);\n\t\t\t_BitScanForward(&Result, Value);\n\t\t\treturn int(Result);\n\t\t}\n#\tendif\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_095(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\t\tif(Value == 0)\n\t\t\treturn -1;\n\n\t\tgenIUType Bit;\n\t\tfor(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}\n\t\treturn Bit;\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_ntz2(genIUType x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn -1;\n\n\t\treturn glm::bitCount(~x & (x - static_cast<genIUType>(1)));\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_branchfree(genIUType x)\n\t{\n\t\tbool IsNull(x == 0);\n\t\tint const Keep(!IsNull);\n\t\tint const Discard(IsNull);\n\n\t\treturn static_cast<int>(glm::bitCount(~x & (x - static_cast<genIUType>(1)))) * Keep + Discard * -1;\n\t}\n\n\tstatic int test_int()\n\t{\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = glm::findLSB(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_095(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result = findLSB_intrinsic(DataI32[i].Value);\n\t\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_ntz2(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_branchfree(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf_int(std::size_t Count)\n\t{\n\t\tint Error(0);\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = glm::findLSB(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_095(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result = findLSB_intrinsic(DataI32[i].Value);\n\t\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_ntz2(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_branchfree(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps5 = std::clock();\n\n\t\tstd::printf(\"glm::findLSB: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"findLSB - 0.9.5: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tstd::printf(\"findLSB - intrinsics: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n#\t\tendif\n\n\t\tstd::printf(\"findLSB - ntz2: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\t\tstd::printf(\"findLSB - branchfree: %d clocks\\n\", static_cast<int>(Timestamps5 - Timestamps4));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_int(Samples);\n\n\t\treturn Error;\n\t}\n}//findLSB\n\nnamespace uaddCarry\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = std::numeric_limits<glm::uint>::max();\n\t\t\tglm::uint y = 0;\n\t\t\tglm::uint Carry = 0;\n\t\t\tglm::uint Result = glm::uaddCarry(x, y, Carry);\n\n\t\t\tError += Carry == 0 ? 0 : 1;\n\t\t\tError += Result == std::numeric_limits<glm::uint>::max() ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uint x = std::numeric_limits<glm::uint>::max();\n\t\t\tglm::uint y = 1;\n\t\t\tglm::uint Carry = 0;\n\t\t\tglm::uint Result = glm::uaddCarry(x, y, Carry);\n\n\t\t\tError += Carry == 1 ? 0 : 1;\n\t\t\tError += Result == 0 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(std::numeric_limits<glm::uint>::max());\n\t\t\tglm::uvec1 y(0);\n\t\t\tglm::uvec1 Carry(0);\n\t\t\tglm::uvec1 Result(glm::uaddCarry(x, y, Carry));\n\n\t\t\tError += glm::all(glm::equal(Carry, glm::uvec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(std::numeric_limits<glm::uint>::max()))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(std::numeric_limits<glm::uint>::max());\n\t\t\tglm::uvec1 y(1);\n\t\t\tglm::uvec1 Carry(0);\n\t\t\tglm::uvec1 Result(glm::uaddCarry(x, y, Carry));\n\n\t\t\tError += glm::all(glm::equal(Carry, glm::uvec1(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(0))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace uaddCarry\n\nnamespace usubBorrow\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = 16;\n\t\t\tglm::uint y = 17;\n\t\t\tglm::uint Borrow = 0;\n\t\t\tglm::uint Result = glm::usubBorrow(x, y, Borrow);\n\n\t\t\tError += Borrow == 1 ? 0 : 1;\n\t\t\tError += Result == 1 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(16);\n\t\t\tglm::uvec1 y(17);\n\t\t\tglm::uvec1 Borrow(0);\n\t\t\tglm::uvec1 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec1(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec2 x(16);\n\t\t\tglm::uvec2 y(17);\n\t\t\tglm::uvec2 Borrow(0);\n\t\t\tglm::uvec2 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec2(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec2(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec3 x(16);\n\t\t\tglm::uvec3 y(17);\n\t\t\tglm::uvec3 Borrow(0);\n\t\t\tglm::uvec3 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec3(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec3(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec4 x(16);\n\t\t\tglm::uvec4 y(17);\n\t\t\tglm::uvec4 Borrow(0);\n\t\t\tglm::uvec4 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec4(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec4(1))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace usubBorrow\n\nnamespace umulExtended\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = 2;\n\t\t\tglm::uint y = 3;\n\t\t\tglm::uint msb = 0;\n\t\t\tglm::uint lsb = 0;\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += msb == 0 ? 0 : 1;\n\t\t\tError += lsb == 6 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(2);\n\t\t\tglm::uvec1 y(3);\n\t\t\tglm::uvec1 msb(0);\n\t\t\tglm::uvec1 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec1(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec2 x(2);\n\t\t\tglm::uvec2 y(3);\n\t\t\tglm::uvec2 msb(0);\n\t\t\tglm::uvec2 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec2(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec2(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec3 x(2);\n\t\t\tglm::uvec3 y(3);\n\t\t\tglm::uvec3 msb(0);\n\t\t\tglm::uvec3 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec3(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec3(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec4 x(2);\n\t\t\tglm::uvec4 y(3);\n\t\t\tglm::uvec4 msb(0);\n\t\t\tglm::uvec4 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec4(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec4(6))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace umulExtended\n\nnamespace imulExtended\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tint x = 2;\n\t\t\tint y = 3;\n\t\t\tint msb = 0;\n\t\t\tint lsb = 0;\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += msb == 0 ? 0 : 1;\n\t\t\tError += lsb == 6 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec1 x(2);\n\t\t\tglm::ivec1 y(3);\n\t\t\tglm::ivec1 msb(0);\n\t\t\tglm::ivec1 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec1(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec2 x(2);\n\t\t\tglm::ivec2 y(3);\n\t\t\tglm::ivec2 msb(0);\n\t\t\tglm::ivec2 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec2(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec2(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec3 x(2);\n\t\t\tglm::ivec3 y(3);\n\t\t\tglm::ivec3 msb(0);\n\t\t\tglm::ivec3 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec3(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec3(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec4 x(2);\n\t\t\tglm::ivec4 y(3);\n\t\t\tglm::ivec4 msb(0);\n\t\t\tglm::ivec4 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec4(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec4(6))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace imulExtended\n\nnamespace bitCount\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\ttype<int> const DataI32[] =\n\t{\n\t\t{0x00000001,  1},\n\t\t{0x00000003,  2},\n\t\t{0x00000002,  1},\n\t\t{0x7fffffff, 31},\n\t\t{0x00000000,  0}\n\t};\n\n\ttemplate<typename T>\n\tinline int bitCount_if(T v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\tint Count(0);\n\t\tfor(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)\n\t\t{\n\t\t\tif(v & static_cast<T>(1 << i))\n\t\t\t\t++Count;\n\t\t}\n\t\treturn Count;\n\t}\n\n\ttemplate<typename T>\n\tinline int bitCount_vec(T v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\tint Count(0);\n\t\tfor(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)\n\t\t{\n\t\t\tCount += static_cast<int>((v >> i) & static_cast<T>(1));\n\t\t}\n\t\treturn Count;\n\t}\n\n\ttemplate<bool EXEC = false>\n\tstruct compute_bitfieldBitCountStep\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_bitfieldBitCountStep<true>\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) + ((v >> Shift) & Mask);\n\t\t}\n\t};\n\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tstatic glm::vec<L, int, Q> bitCount_bitfield(glm::vec<L, T, Q> const& v)\n\t{\n\t\tglm::vec<L, typename glm::detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<glm::vec<L, typename glm::detail::make_unsigned<T>::type, Q> const *>(&v));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  2>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x5555555555555555ull), static_cast<typename glm::detail::make_unsigned<T>::type>( 1));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  4>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x3333333333333333ull), static_cast<typename glm::detail::make_unsigned<T>::type>( 2));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  8>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x0F0F0F0F0F0F0F0Full), static_cast<typename glm::detail::make_unsigned<T>::type>( 4));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 16>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x00FF00FF00FF00FFull), static_cast<typename glm::detail::make_unsigned<T>::type>( 8));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 32>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x0000FFFF0000FFFFull), static_cast<typename glm::detail::make_unsigned<T>::type>(16));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 64>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x00000000FFFFFFFFull), static_cast<typename glm::detail::make_unsigned<T>::type>(32));\n\t\treturn glm::vec<L, int, Q>(x);\n\t}\n\n\ttemplate<typename genType>\n\tstatic int bitCount_bitfield(genType x)\n\t{\n\t\treturn bitCount_bitfield(glm::vec<1, genType, glm::defaultp>(x)).x;\n\t}\n\n\tstatic int perf(std::size_t Size)\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<int> v;\n\t\tv.resize(Size);\n\n\t\tstd::vector<glm::ivec4> w;\n\t\tw.resize(Size);\n\n\n\t\tstd::clock_t TimestampsA = std::clock();\n\n\t\t// bitCount - TimeIf\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_if(static_cast<int>(i));\n\t\t}\n\n\t\tstd::clock_t TimestampsB = std::clock();\n\n\t\t// bitCount - TimeVec\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_vec(i);\n\t\t}\n\n\t\tstd::clock_t TimestampsC = std::clock();\n\n\t\t// bitCount - TimeDefault\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = glm::bitCount(i);\n\t\t}\n\n\t\tstd::clock_t TimestampsD = std::clock();\n\n\t\t// bitCount - TimeVec4\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tw[i] = glm::bitCount(glm::ivec4(static_cast<int>(i)));\n\t\t}\n\n\t\tstd::clock_t TimestampsE = std::clock();\n\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_bitfield(static_cast<int>(i));\n\t\t}\n\n\t\tstd::clock_t TimestampsF = std::clock();\n\n\t\tstd::printf(\"bitCount - TimeIf %d\\n\", static_cast<int>(TimestampsB - TimestampsA));\n\t\tstd::printf(\"bitCount - TimeVec %d\\n\", static_cast<int>(TimestampsC - TimestampsB));\n\t\tstd::printf(\"bitCount - TimeDefault %d\\n\", static_cast<int>(TimestampsD - TimestampsC));\n\t\tstd::printf(\"bitCount - TimeVec4 %d\\n\", static_cast<int>(TimestampsE - TimestampsD));\n\t\tstd::printf(\"bitCount - bitfield %d\\n\", static_cast<int>(TimestampsF - TimestampsE));\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(DataI32) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tint ResultA = glm::bitCount(DataI32[i].Value);\n\t\t\tint ResultB = bitCount_if(DataI32[i].Value);\n\t\t\tint ResultC = bitCount_vec(DataI32[i].Value);\n\t\t\tint ResultE = bitCount_bitfield(DataI32[i].Value);\n\n\t\t\tError += DataI32[i].Return == ResultA ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultB ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultC ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultE ? 0 : 1;\n\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//bitCount\n\nint main()\n{\n\tint Error = 0;\n\n\tError += ::bitCount::test();\n\tError += ::bitfieldReverse::test();\n\tError += ::findMSB::test();\n\tError += ::findLSB::test();\n\tError += ::umulExtended::test();\n\tError += ::imulExtended::test();\n\tError += ::uaddCarry::test();\n\tError += ::usubBorrow::test();\n\tError += ::bitfieldInsert::test();\n\tError += ::bitfieldExtract::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t const Samples = 1000;\n#\telse\n\t\tstd::size_t const Samples = 1;\n#\tendif\n\n\t::bitCount::perf(Samples);\n\t::bitfieldReverse::perf(Samples);\n\t::findMSB::perf(Samples);\n\t::findLSB::perf(Samples);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_integer_bit_count.cpp",
    "content": "// This has the programs for computing the number of 1-bits\n// in a word, or byte, etc.\n// Max line length is 57, to fit in hacker.book.\n#include <cstdio>\n#include <cstdlib>     //To define \"exit\", req'd by XLC.\n#include <ctime>\n\nunsigned rotatel(unsigned x, int n)\n{\n\tif (static_cast<unsigned>(n) > 63) { std::printf(\"rotatel, n out of range.\\n\"); std::exit(1);}\n\treturn (x << n) | (x >> (32 - n));\n}\n\nint pop0(unsigned x)\n{\n\tx = (x & 0x55555555) + ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);\n\tx = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);\n\tx = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);\n\treturn x;\n}\n\nint pop1(unsigned x)\n{\n\tx = x - ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;\n\tx = x + (x >> 8);\n\tx = x + (x >> 16);\n\treturn x & 0x0000003F;\n}\n/* Note: an alternative to the last three executable lines above is:\n   return x*0x01010101 >> 24;\nif your machine has a fast multiplier (suggested by Jari Kirma). */\n\nint pop2(unsigned x)\n{\n\tunsigned n;\n\n\tn = (x >> 1) & 033333333333;       // Count bits in\n\tx = x - n;                         // each 3-bit\n\tn = (n >> 1) & 033333333333;       // field.\n\tx = x - n;\n\tx = (x + (x >> 3)) & 030707070707; // 6-bit sums.\n\treturn x%63;                       // Add 6-bit sums.\n}\n\n/* An alternative to the \"return\" statement above is:\n   return ((x * 0404040404) >> 26) +  // Add 6-bit sums.\n           (x >> 30);\nwhich runs faster on most machines (suggested by Norbert Juffa). */\n\nint pop3(unsigned x)\n{\n\tunsigned n;\n\n\tn = (x >> 1) & 0x77777777;        // Count bits in\n\tx = x - n;                        // each 4-bit\n\tn = (n >> 1) & 0x77777777;        // field.\n\tx = x - n;\n\tn = (n >> 1) & 0x77777777;\n\tx = x - n;\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;  // Get byte sums.\n\tx = x*0x01010101;                 // Add the bytes.\n\treturn x >> 24;\n}\n\nint pop4(unsigned x)\n{\n\tint n;\n\n\tn = 0;\n\twhile (x != 0) {\n\t\tn = n + 1;\n\t\tx = x & (x - 1);\n\t}\n\treturn n;\n}\n\nint pop5(unsigned x)\n{\n\tint i, sum;\n\n\t// Rotate and sum method        // Shift right & subtract\n\n\tsum = x;                     // sum = x;\n\tfor (i = 1; i <= 31; i++) {  // while (x != 0) {\n\t\tx = rotatel(x, 1);        //    x = x >> 1;\n\t\tsum = sum + x;            //    sum = sum - x;\n\t}                            // }\n\treturn -sum;                 // return sum;\n}\n\nint pop5a(unsigned x)\n{\n\tint sum;\n\n\t// Shift right & subtract\n\n\tsum = x;\n\twhile (x != 0) {\n\t\tx = x >> 1;\n\t\tsum = sum - x;\n\t}\n\treturn sum;\n}\n\nint pop6(unsigned x)\n{ // Table lookup.\n\tstatic char table[256] = {\n\t\t0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\t\t4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};\n\n\treturn table[x         & 0xFF] +\n\t\t\ttable[(x >>  8) & 0xFF] +\n\t\t\ttable[(x >> 16) & 0xFF] +\n\t\t\ttable[(x >> 24)];\n}\n\n// The following works only for 8-bit quantities.\nint pop7(unsigned x)\n{\n\tx = x*0x08040201;    // Make 4 copies.\n\tx = x >> 3;          // So next step hits proper bits.\n\tx = x & 0x11111111;  // Every 4th bit.\n\tx = x*0x11111111;    // Sum the digits (each 0 or 1).\n\tx = x >> 28;         // Position the result.\n\treturn x;\n}\n\n// The following works only for 7-bit quantities.\nint pop8(unsigned x)\n{\n\tx = x*0x02040810;    // Make 4 copies, left-adjusted.\n\tx = x & 0x11111111;  // Every 4th bit.\n\tx = x*0x11111111;    // Sum the digits (each 0 or 1).\n\tx = x >> 28;         // Position the result.\n\treturn x;\n}\n\n// The following works only for 15-bit quantities.\nint pop9(unsigned x)\n{\n\tunsigned long long y;\n\ty = x * 0x0002000400080010ULL;\n\ty = y & 0x1111111111111111ULL;\n\ty = y * 0x1111111111111111ULL;\n\ty = y >> 60;\n\treturn static_cast<int>(y);\n}\n\nint errors;\nvoid error(int x, int y)\n{\n\terrors = errors + 1;\n\tstd::printf(\"Error for x = %08x, got %08x\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, n;\n\tstatic unsigned test[] = {0,0, 1,1, 2,1, 3,2, 4,1, 5,2, 6,2, 7,3,\n\t\t8,1, 9,2, 10,2, 11,3, 12,2, 13,3, 14,3, 15,4, 16,1, 17,2,\n\t\t0x3F,6, 0x40,1, 0x41,2, 0x7f,7, 0x80,1, 0x81,2, 0xfe,7, 0xff,8,\n\t\t0x4000,1, 0x4001,2, 0x7000,3, 0x7fff,15,\n\t\t0x55555555,16, 0xAAAAAAAA, 16, 0xFF000000,8, 0xC0C0C0C0,8,\n\t\t0x0FFFFFF0,24, 0x80000000,1, 0xFFFFFFFF,32};\n\n\tstd::size_t const Count = 1000000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop0(test[i]) != test[i+1]) error(test[i], pop0(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop0: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop1(test[i]) != test[i+1]) error(test[i], pop1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop2(test[i]) != test[i+1]) error(test[i], pop2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop3(test[i]) != test[i+1]) error(test[i], pop3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop4(test[i]) != test[i+1]) error(test[i], pop4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop5(test[i]) != test[i+1]) error(test[i], pop5(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop5a(test[i]) != test[i+1]) error(test[i], pop5a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop5a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop6(test[i]) != test[i+1]) error(test[i], pop6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffffff00) == 0)\n\t\tif (pop7(test[i]) != test[i+1]) error(test[i], pop7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffffff80) == 0)\n\t\tif (pop8(test[i]) != test[i+1]) error(test[i], pop8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffff8000) == 0)\n\t\tif (pop9(test[i]) != test[i+1]) error(test[i], pop9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_integer_find_lsb.cpp",
    "content": "#include <glm/glm.hpp>\n#include <cstdio>\n#include <cstdlib>     //To define \"exit\", req'd by XLC.\n#include <ctime>\n\nint nlz(unsigned x)\n{\n\tint pop(unsigned x);\n\n\tx = x | (x >> 1);\n\tx = x | (x >> 2);\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >>16);\n\treturn pop(~x);\n}\n\nint pop(unsigned x)\n{\n\tx = x - ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;\n\tx = x + (x << 8);\n\tx = x + (x << 16);\n\treturn x >> 24;\n}\n\nint ntz1(unsigned x)\n{\n\treturn 32 - nlz(~x & (x-1));\n}\n\nint ntz2(unsigned x)\n{\n\treturn pop(~x & (x - 1));\n}\n\nint ntz3(unsigned x)\n{\n\tint n;\n\n\tif (x == 0) return(32);\n\tn = 1;\n\tif ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;}\n\tif ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;}\n\tif ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;}\n\tif ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;}\n\treturn n - (x & 1);\n}\n\nint ntz4(unsigned x)\n{\n\tunsigned y;\n\tint n;\n\n\tif (x == 0) return 32;\n\tn = 31;\n\ty = x <<16;  if (y != 0) {n = n -16;  x = y;}\n\ty = x << 8;  if (y != 0) {n = n - 8;  x = y;}\n\ty = x << 4;  if (y != 0) {n = n - 4;  x = y;}\n\ty = x << 2;  if (y != 0) {n = n - 2;  x = y;}\n\ty = x << 1;  if (y != 0) {n = n - 1;}\n\treturn n;\n}\n\nint ntz4a(unsigned x)\n{\n\tunsigned y;\n\tint n;\n\n\tif (x == 0) return 32;\n\tn = 31;\n\ty = x <<16;  if (y != 0) {n = n -16;  x = y;}\n\ty = x << 8;  if (y != 0) {n = n - 8;  x = y;}\n\ty = x << 4;  if (y != 0) {n = n - 4;  x = y;}\n\ty = x << 2;  if (y != 0) {n = n - 2;  x = y;}\n\tn = n - ((x << 1) >> 31);\n\treturn n;\n}\n\nint ntz5(char x)\n{\n\tif (x & 15) {\n\t\tif (x & 3) {\n\t\t\tif (x & 1) return 0;\n\t\t\telse return 1;\n\t\t}\n\t\telse if (x & 4) return 2;\n\t\telse return 3;\n\t}\n\telse if (x & 0x30) {\n\t\tif (x & 0x10) return 4;\n\t\telse return 5;\n\t}\n\telse if (x & 0x40) return 6;\n\telse if (x) return 7;\n\telse return 8;\n}\n\nint ntz6(unsigned x)\n{\n\tint n;\n\n\tx = ~x & (x - 1);\n\tn = 0;\t\t\t\t// n = 32;\n\twhile(x != 0)\n\t{\t\t\t\t\t// while (x != 0) {\n\t\tn = n + 1;\t\t//    n = n - 1;\n\t\tx = x >> 1;\t\t//    x = x + x;\n\t}\t\t\t\t\t// }\n\treturn n;\t\t\t// return n;\n}\n\nint ntz6a(unsigned x)\n{\n\tint n = 32;\n\n\twhile (x != 0) {\n\t\tn = n - 1;\n\t\tx = x + x;\n\t}\n\treturn n;\n}\n\n/* Dean Gaudet's algorithm. To be most useful there must be a good way\nto evaluate the C \"conditional expression\" (a?b:c construction) without\nbranching. The result of a?b:c is b if a is true (nonzero), and c if a\nis false (0).\n   For example, a compare to zero op that sets a target GPR to 1 if the\noperand is 0, and to 0 if the operand is nonzero, will do it. With this\ninstruction, the algorithm is entirely branch-free. But the most\ninteresting thing about it is the high degree of parallelism. All six\nlines with conditional expressions can be executed in parallel (on a\nmachine with sufficient computational units).\n   Although the instruction count is 30 measured statically, it could\nexecute in only 10 cycles on a machine with sufficient parallelism.\n   The first two uses of y can instead be x, which would increase the\nuseful parallelism on most machines (the assignments to y, bz, and b4\ncould then all run in parallel). */\n\nint ntz7(unsigned x)\n{\n\tunsigned y, bz, b4, b3, b2, b1, b0;\n\n\ty = x & -x;               // Isolate rightmost 1-bit.\n\tbz = y ? 0 : 1;           // 1 if y = 0.\n\tb4 = (y & 0x0000FFFF) ? 0 : 16;\n\tb3 = (y & 0x00FF00FF) ? 0 : 8;\n\tb2 = (y & 0x0F0F0F0F) ? 0 : 4;\n\tb1 = (y & 0x33333333) ? 0 : 2;\n\tb0 = (y & 0x55555555) ? 0 : 1;\n\treturn bz + b4 + b3 + b2 + b1 + b0;\n}\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4800)\n#endif\n\nint ntz7_christophe(unsigned x)\n{\n\tunsigned y, bz, b4, b3, b2, b1, b0;\n\n\ty = x & -x;               // Isolate rightmost 1-bit.\n\tbz = unsigned(!bool(y));           // 1 if y = 0.\n\tb4 = unsigned(!bool(y & 0x0000FFFF)) * 16;\n\tb3 = unsigned(!bool(y & 0x00FF00FF)) * 8;\n\tb2 = unsigned(!bool(y & 0x0F0F0F0F)) * 4;\n\tb1 = unsigned(!bool(y & 0x33333333)) * 2;\n\tb0 = unsigned(!bool(y & 0x55555555)) * 1;\n\treturn bz + b4 + b3 + b2 + b1 + b0;\n}\n\n/* Below is David Seal's algorithm, found at\nhttp://www.ciphersbyritter.com/NEWS4/BITCT.HTM Table\nentries marked \"u\" are unused. 6 ops including a\nmultiply, plus an indexed load. */\n\n#define u 99\nint ntz8(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32, 0, 1,12, 2, 6, u,13,   3, u, 7, u, u, u, u,14,\n\t\t10, 4, u, u, 8, u, u,25,   u, u, u, u, u,21,27,15,\n\t\t31,11, 5, u, u, u, u, u,   9, u, u,24, u, u,20,26,\n\t\t30, u, u, u, u,23, u,19,  29, u,22,18,28,17,16, u};\n\n\tx = (x & -x)*0x0450FBAF;\n\treturn table[x >> 26];\n}\n\n/* Seal's algorithm with multiply expanded.\n9 elementary ops plus an indexed load. */\n\nint ntz8a(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32, 0, 1,12, 2, 6, u,13,   3, u, 7, u, u, u, u,14,\n\t\t10, 4, u, u, 8, u, u,25,   u, u, u, u, u,21,27,15,\n\t\t31,11, 5, u, u, u, u, u,   9, u, u,24, u, u,20,26,\n\t\t30, u, u, u, u,23, u,19,  29, u,22,18,28,17,16, u};\n\n\tx = (x & -x);\n\tx = (x << 4) + x;    // x = x*17.\n\tx = (x << 6) + x;    // x = x*65.\n\tx = (x << 16) - x;   // x = x*65535.\n\treturn table[x >> 26];\n}\n\n/* Reiser's algorithm. Three ops including a \"remainder,\"\nplus an indexed load. */\n\nint ntz9(unsigned x)\n{\n\tstatic char table[37] = {\n\t\t32,  0,  1, 26,  2, 23, 27,\n\t\tu,  3, 16, 24, 30, 28, 11,  u, 13,  4,\n\t\t7, 17,  u, 25, 22, 31, 15, 29, 10, 12,\n\t\t6,  u, 21, 14,  9,  5, 20,  8, 19, 18};\n\n\tx = (x & -x)%37;\n\treturn table[x];\n}\n\n/* Using a de Bruijn sequence. This is a table lookup with a 32-entry\ntable. The de Bruijn sequence used here is\n                0000 0100 1101 0111 0110 0101 0001 1111,\nobtained from Danny Dube's October 3, 1997, posting in\ncomp.compression.research. Thanks to Norbert Juffa for this reference. */\n\nint ntz10(unsigned x) {\n\n   static char table[32] =\n     { 0, 1, 2,24, 3,19, 6,25,  22, 4,20,10,16, 7,12,26,\n      31,23,18, 5,21, 9,15,11,  30,17, 8,14,29,13,28,27};\n\n   if (x == 0) return 32;\n   x = (x & -x)*0x04D7651F;\n   return table[x >> 27];\n}\n\n/* Norbert Juffa's code, answer to exercise 1 of Chapter 5 (2nd ed). */\n\n#define SLOW_MUL\nint ntz11 (unsigned int n) {\n\n   static unsigned char tab[32] =\n   {   0,  1,  2, 24,  3, 19, 6,  25,\n      22,  4, 20, 10, 16,  7, 12, 26,\n      31, 23, 18,  5, 21,  9, 15, 11,\n      30, 17,  8, 14, 29, 13, 28, 27\n   };\n   unsigned int k;\n   n = n & (-n);        /* isolate lsb */\n   printf(\"n = %d\\n\", n);\n#if defined(SLOW_MUL)\n   k = (n << 11) - n;\n   k = (k <<  2) + k;\n   k = (k <<  8) + n;\n   k = (k <<  5) - k;\n#else\n   k = n * 0x4d7651f;\n#endif\n   return n ? tab[k>>27] : 32;\n}\n\nint errors;\nvoid error(int x, int y) {\n   errors = errors + 1;\n   std::printf(\"Error for x = %08x, got %d\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, m, n;\n\tstatic unsigned test[] = {0,32, 1,0, 2,1, 3,0, 4,2, 5,0, 6,1,  7,0,\n\t\t8,3, 9,0, 16,4, 32,5, 64,6, 128,7, 255,0, 256,8, 512,9, 1024,10,\n\t\t2048,11, 4096,12, 8192,13, 16384,14, 32768,15, 65536,16,\n\t\t0x20000,17, 0x40000,18, 0x80000,19, 0x100000,20, 0x200000,21,\n\t\t0x400000,22, 0x800000,23, 0x1000000,24, 0x2000000,25,\n\t\t0x4000000,26, 0x8000000,27, 0x10000000,28, 0x20000000,29,\n\t\t0x40000000,30, 0x80000000,31, 0xFFFFFFF0,4, 0x3000FF00,8,\n\t\t0xC0000000,30, 0x60000000,29, 0x00011000, 12};\n\n\tstd::size_t const Count = 1000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz1(test[i]) != test[i+1]) error(test[i], ntz1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz2(test[i]) != test[i+1]) error(test[i], ntz2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz3(test[i]) != test[i+1]) error(test[i], ntz3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz4(test[i]) != test[i+1]) error(test[i], ntz4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz4a(test[i]) != test[i+1]) error(test[i], ntz4a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz4a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor(std::size_t k = 0; k < Count; ++k)\n\tfor(i = 0; i < n; i += 2)\n\t{\n\t\tm = test[i+1];\n\t\tif(m > 8)\n\t\t\tm = 8;\n\t\tif(ntz5(static_cast<char>(test[i])) != m)\n\t\t\terror(test[i], ntz5(static_cast<char>(test[i])));\n\t}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz6(test[i]) != test[i+1]) error(test[i], ntz6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz6a(test[i]) != test[i+1]) error(test[i], ntz6a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz6a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz7(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz7_christophe(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz7_christophe: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz8(test[i]) != test[i+1]) error(test[i], ntz8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz8a(test[i]) != test[i+1]) error(test[i], ntz8a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz8a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz9(test[i]) != test[i+1]) error(test[i], ntz9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz10(test[i]) != test[i+1]) error(test[i], ntz10(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz10: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_integer_find_msb.cpp",
    "content": "#include <glm/glm.hpp>\n#include <cstdio>\n#include <cstdlib>     // To define \"exit\", req'd by XLC.\n#include <ctime>\n\n#define LE 1            // 1 for little-endian, 0 for big-endian.\n\nint pop(unsigned x) {\n   x = x - ((x >> 1) & 0x55555555);\n   x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n   x = (x + (x >> 4)) & 0x0F0F0F0F;\n   x = x + (x << 8);\n   x = x + (x << 16);\n   return x >> 24;\n}\n\nint nlz1(unsigned x) {\n   int n;\n\n   if (x == 0) return(32);\n   n = 0;\n   if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}\n   if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}\n   if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}\n   if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}\n   if (x <= 0x7FFFFFFF) {n = n + 1;}\n   return n;\n}\n\nint nlz1a(unsigned x) {\n   int n;\n\n/* if (x == 0) return(32); */\n   if (static_cast<int>(x) <= 0) return (~x >> 26) & 32;\n   n = 1;\n   if ((x >> 16) == 0) {n = n +16; x = x <<16;}\n   if ((x >> 24) == 0) {n = n + 8; x = x << 8;}\n   if ((x >> 28) == 0) {n = n + 4; x = x << 4;}\n   if ((x >> 30) == 0) {n = n + 2; x = x << 2;}\n   n = n - (x >> 31);\n   return n;\n}\n// On basic Risc, 12 to 20 instructions.\n\nint nlz2(unsigned x) {\n   unsigned y;\n   int n;\n\n   n = 32;\n   y = x >>16;  if (y != 0) {n = n -16;  x = y;}\n   y = x >> 8;  if (y != 0) {n = n - 8;  x = y;}\n   y = x >> 4;  if (y != 0) {n = n - 4;  x = y;}\n   y = x >> 2;  if (y != 0) {n = n - 2;  x = y;}\n   y = x >> 1;  if (y != 0) return n - 2;\n   return n - x;\n}\n\n// As above but coded as a loop for compactness:\n// 23 to 33 basic Risc instructions.\nint nlz2a(unsigned x) {\n   unsigned y;\n   int n, c;\n\n   n = 32;\n   c = 16;\n   do {\n      y = x >> c;  if (y != 0) {n = n - c;  x = y;}\n      c = c >> 1;\n   } while (c != 0);\n   return n - x;\n}\n\nint nlz3(int x) {\n   int y, n;\n\n   n = 0;\n   y = x;\nL: if (x < 0) return n;\n   if (y == 0) return 32 - n;\n   n = n + 1;\n   x = x << 1;\n   y = y >> 1;\n   goto L;\n}\n\nint nlz4(unsigned x) {\n   int y, m, n;\n\n   y = -(x >> 16);      // If left half of x is 0,\n   m = (y >> 16) & 16;  // set n = 16.  If left half\n   n = 16 - m;          // is nonzero, set n = 0 and\n   x = x >> m;          // shift x right 16.\n                        // Now x is of the form 0000xxxx.\n   y = x - 0x100;       // If positions 8-15 are 0,\n   m = (y >> 16) & 8;   // add 8 to n and shift x left 8.\n   n = n + m;\n   x = x << m;\n\n   y = x - 0x1000;      // If positions 12-15 are 0,\n   m = (y >> 16) & 4;   // add 4 to n and shift x left 4.\n   n = n + m;\n   x = x << m;\n\n   y = x - 0x4000;      // If positions 14-15 are 0,\n   m = (y >> 16) & 2;   // add 2 to n and shift x left 2.\n   n = n + m;\n   x = x << m;\n\n   y = x >> 14;         // Set y = 0, 1, 2, or 3.\n   m = y & ~(y >> 1);   // Set m = 0, 1, 2, or 2 resp.\n   return n + 2 - m;\n}\n\nint nlz5(unsigned x) {\n   int pop(unsigned x);\n\n   x = x | (x >> 1);\n   x = x | (x >> 2);\n   x = x | (x >> 4);\n   x = x | (x >> 8);\n   x = x | (x >>16);\n   return pop(~x);\n}\n\n/* The four programs below are not valid ANSI C programs.  This is\nbecause they refer to the same storage locations as two different types.\nHowever, they work with xlc/AIX, gcc/AIX, and gcc/NT.  If you try to\ncode them more compactly by declaring a variable xx to be \"double,\" and\nthen using\n\n   n = 1054 - (*((unsigned *)&xx + LE) >> 20);\n\nthen you are violating not only the rule above, but also the ANSI C\nrule that pointer arithmetic can be performed only on pointers to\narray elements.\n   When coded with the above statement, the program fails with xlc,\ngcc/AIX, and gcc/NT, at some optimization levels.\n   BTW, these programs use the \"anonymous union\" feature of C++, not\navailable in C. */\n\nint nlz6(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt[2];\n\t\tdouble asDouble;\n\t};\n\tint n;\n\n\tasDouble = static_cast<double>(k) + 0.5;\n\tn = 1054 - (asInt[LE] >> 20);\n\treturn n;\n}\n\nint nlz7(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt[2];\n\t\tdouble asDouble;\n\t};\n\tint n;\n\n\tasDouble = static_cast<double>(k);\n\tn = 1054 - (asInt[LE] >> 20);\n\tn = (n & 31) + (n >> 9);\n\treturn n;\n}\n\n   /* In single qualifier, round-to-nearest mode, the basic method fails for:\n   k = 0, k = 01FFFFFF, 03FFFFFE <= k <= 03FFFFFF,\n                        07FFFFFC <= k <= 07FFFFFF,\n                        0FFFFFF8 <= k <= 0FFFFFFF,\n                                   ...\n                        7FFFFFC0 <= k <= 7FFFFFFF.\n                        FFFFFF80 <= k <= FFFFFFFF.\n   For k = 0 it gives 158, and for the other values it is too low by 1. */\n\nint nlz8(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt;\n\t\tfloat asFloat;\n\t};\n\tint n;\n\n\tk = k & ~(k >> 1);           /* Fix problem with rounding. */\n\tasFloat = static_cast<float>(k) + 0.5f;\n\tn = 158 - (asInt >> 23);\n\treturn n;\n}\n\n/* The example below shows how to make a macro for nlz.  It uses an\nextension to the C and C++ languages that is provided by the GNU C/C++\ncompiler, namely, that of allowing statements and declarations in\nexpressions (see \"Using and Porting GNU CC\", by Richard M. Stallman\n(1998).  The underscores are necessary to protect against the\npossibility that the macro argument will conflict with one of its local\nvariables, e.g., NLZ(k). */\n\nint nlz9(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt;\n\t\tfloat asFloat;\n\t};\n\tint n;\n\n\tk = k & ~(k >> 1);           /* Fix problem with rounding. */\n\tasFloat = static_cast<float>(k);\n\tn = 158 - (asInt >> 23);\n\tn = (n & 31) + (n >> 6);     /* Fix problem with k = 0. */\n\treturn n;\n}\n\n/* Below are three nearly equivalent programs for computing the number\nof leading zeros in a word. This material is not in HD, but may be in a\nfuture edition.\n   Immediately below is Robert Harley's algorithm, found at the\ncomp.arch newsgroup entry dated 7/12/96, pointed out to me by Norbert\nJuffa.\n   Table entries marked \"u\" are unused. 14 ops including a multiply,\nplus an indexed load.\n   The smallest multiplier that works is 0x045BCED1 = 17*65*129*513 (all\nof form 2**k + 1). There are no multipliers of three terms of the form\n2**k +- 1 that work, with a table size of 64 or 128. There are some,\nwith a table size of 64, if you precede the multiplication with x = x -\n(x >> 1), but that seems less elegant. There are also some if you use a\ntable size of 256, the smallest is 0x01033CBF = 65*255*1025 (this would\nsave two instructions in the form of this algorithm with the\nmultiplication expanded into shifts and adds, but the table size is\ngetting a bit large). */\n\n#define u 99\nint nlz10(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,31, u,16, u,30, 3, u,  15, u, u, u,29,10, 2, u,\n\t\tu, u,12,14,21, u,19, u,   u,28, u,25, u, 9, 1, u,\n\t\t17, u, 4, u, u, u,11, u,  13,22,20, u,26, u, u,18,\n\t\t5, u, u,23, u,27, u, 6,   u,24, 7, u, 8, u, 0, u};\n\n\tx = x | (x >> 1);\t\t// Propagate leftmost\n\tx = x | (x >> 2);\t\t// 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >>16);\n\tx = x*0x06EB14F9;\t\t// Multiplier is 7*255**3.\n\treturn table[x >> 26];\n}\n\n/* Harley's algorithm with multiply expanded.\n19 elementary ops plus an indexed load. */\n\nint nlz10a(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,31, u,16, u,30, 3, u,  15, u, u, u,29,10, 2, u,\n\t\tu, u,12,14,21, u,19, u,   u,28, u,25, u, 9, 1, u,\n\t\t17, u, 4, u, u, u,11, u,  13,22,20, u,26, u, u,18,\n\t\t5, u, u,23, u,27, u, 6,   u,24, 7, u, 8, u, 0, u};\n\n\tx = x | (x >> 1);    // Propagate leftmost\n\tx = x | (x >> 2);    // 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >> 16);\n\tx = (x << 3) - x;    // Multiply by 7.\n\tx = (x << 8) - x;    // Multiply by 255.\n\tx = (x << 8) - x;    // Again.\n\tx = (x << 8) - x;    // Again.\n\treturn table[x >> 26];\n}\n\n/* Julius Goryavsky's version of Harley's algorithm.\n17 elementary ops plus an indexed load, if the machine\nhas \"and not.\" */\n\nint nlz10b(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,20,19, u, u,18, u, 7,  10,17, u, u,14, u, 6, u,\n\t\tu, 9, u,16, u, u, 1,26,   u,13, u, u,24, 5, u, u,\n\t\tu,21, u, 8,11, u,15, u,   u, u, u, 2,27, 0,25, u,\n\t\t22, u,12, u, u, 3,28, u,  23, u, 4,29, u, u,30,31};\n\n\tx = x | (x >> 1);    // Propagate leftmost\n\tx = x | (x >> 2);    // 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x & ~(x >> 16);\n\tx = x*0xFD7049FF;    // Activate this line or the following 3.\n\t// x = (x << 9) - x;    // Multiply by 511.\n\t// x = (x << 11) - x;   // Multiply by 2047.\n\t// x = (x << 14) - x;   // Multiply by 16383.\n\treturn table[x >> 26];\n}\n\nint errors;\nvoid error(int x, int y)\n{\n\terrors = errors + 1;\n\tstd::printf(\"Error for x = %08x, got %d\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, n;\n\tstatic unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29,\n\t\t7,29, 8,28, 9,28, 16,27, 32,26, 64,25, 128,24, 255,24, 256,23,\n\t\t512,22, 1024,21, 2048,20, 4096,19, 8192,18, 16384,17, 32768,16,\n\t\t65536,15, 0x20000,14, 0x40000,13, 0x80000,12, 0x100000,11,\n\t\t0x200000,10, 0x400000,9, 0x800000,8, 0x1000000,7, 0x2000000,6,\n\t\t0x4000000,5, 0x8000000,4, 0x0FFFFFFF,4, 0x10000000,3,\n\t\t0x3000FFFF,2, 0x50003333,1, 0x7FFFFFFF,1, 0x80000000,0,\n\t\t0xFFFFFFFF,0};\n\tstd::size_t const Count = 1000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz1(test[i]) != test[i+1]) error(test[i], nlz1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz1a(test[i]) != test[i+1]) error(test[i], nlz1a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz1a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz2(test[i]) != test[i+1]) error(test[i], nlz2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz2a(test[i]) != test[i+1]) error(test[i], nlz2a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz2a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz3(test[i]) != test[i+1]) error(test[i], nlz3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz4(test[i]) != test[i+1]) error(test[i], nlz4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz5(test[i]) != test[i+1]) error(test[i], nlz5(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz6(test[i]) != test[i+1]) error(test[i], nlz6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz7(test[i]) != test[i+1]) error(test[i], nlz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz8(test[i]) != test[i+1]) error(test[i], nlz8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz9(test[i]) != test[i+1]) error(test[i], nlz9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10(test[i]) != test[i+1]) error(test[i], nlz10(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10a(test[i]) != test[i+1]) error(test[i], nlz10a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10b(test[i]) != test[i+1]) error(test[i], nlz10b(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10b: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_matrix.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nusing namespace glm;\n\nint test_matrixCompMult()\n{\n\tint Error(0);\n\n\t{\n\t\tmat2 m(0, 1, 2, 3);\n\t\tmat2 n = matrixCompMult(m, m);\n\t\tmat2 expected = mat2(0, 1, 4, 9);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x3 m(0, 1, 2, 3, 4, 5);\n\t\tmat2x3 n = matrixCompMult(m, m);\n\t\tmat2x3 expected = mat2x3(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat2x4 n = matrixCompMult(m, m);\n\t\tmat2x4 expected = mat2x4(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\tmat3 n = matrixCompMult(m, m);\n\t\tmat3 expected = mat3(0, 1, 4, 9, 16, 25, 36, 49, 64);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x2 m(0, 1, 2, 3, 4, 5);\n\t\tmat3x2 n = matrixCompMult(m, m);\n\t\tmat3x2 expected = mat3x2(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat3x4 n = matrixCompMult(m, m);\n\t\tmat3x4 expected = mat3x4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\tmat4 n = matrixCompMult(m, m);\n\t\tmat4 expected = mat4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat4x2 n = matrixCompMult(m, m);\n\t\tmat4x2 expected = mat4x2(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat4x3 n = matrixCompMult(m, m);\n\t\tmat4x3 expected = mat4x3(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_outerProduct()\n{\n\t{ glm::mat2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec2(1.0f)); }\n\t{ glm::mat3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec3(1.0f)); }\n\t{ glm::mat4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec4(1.0f)); }\n\n\t{ glm::mat2x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec2(1.0f)); }\n\t{ glm::mat2x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec2(1.0f)); }\n\n\t{ glm::mat3x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec3(1.0f)); }\n\t{ glm::mat3x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec3(1.0f)); }\n  \n\t{ glm::mat4x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec4(1.0f)); }\n\t{ glm::mat4x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec4(1.0f)); }\n\n\treturn 0;\n}\n\nint test_transpose()\n{\n\tint Error(0);\n\n\t{\n\t\tmat2 const m(0, 1, 2, 3);\n\t\tmat2 const t = transpose(m);\n\t\tmat2 const expected = mat2(0, 2, 1, 3);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x3 m(0, 1, 2, 3, 4, 5);\n\t\tmat3x2 t = transpose(m);\n\t\tmat3x2 const expected = mat3x2(0, 3, 1, 4, 2, 5);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat4x2 t = transpose(m);\n\t\tmat4x2 const expected = mat4x2(0, 4, 1, 5, 2, 6, 3, 7);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\tmat3 t = transpose(m);\n\t\tmat3 const expected = mat3(0, 3, 6, 1, 4, 7, 2, 5, 8);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x2 m(0, 1, 2, 3, 4, 5);\n\t\tmat2x3 t = transpose(m);\n\t\tmat2x3 const expected = mat2x3(0, 2, 4, 1, 3, 5);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat4x3 t = transpose(m);\n\t\tmat4x3 const expected = mat4x3(0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\tmat4 t = transpose(m);\n\t\tmat4 const expected = mat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat2x4 t = transpose(m);\n\t\tmat2x4 const expected = mat2x4(0, 2, 4, 6, 1, 3, 5, 7);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat3x4 t = transpose(m);\n\t\tmat3x4 const expected = mat3x4(0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_determinant()\n{\n\n\n\treturn 0;\n}\n\nint test_inverse()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4x4 A4x4(\n\t\t\tglm::vec4(1, 0, 1, 0), \n\t\t\tglm::vec4(0, 1, 0, 0), \n\t\t\tglm::vec4(0, 0, 1, 0), \n\t\t\tglm::vec4(0, 0, 0, 1));\n\t\tglm::mat4x4 B4x4 = inverse(A4x4);\n\t\tglm::mat4x4 I4x4 = A4x4 * B4x4;\n\t\tglm::mat4x4 Identity(1);\n\t\tError += all(equal(I4x4, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 A3x3(\n\t\t\tglm::vec3(1, 0, 1), \n\t\t\tglm::vec3(0, 1, 0), \n\t\t\tglm::vec3(0, 0, 1));\n\t\tglm::mat3x3 B3x3 = glm::inverse(A3x3);\n\t\tglm::mat3x3 I3x3 = A3x3 * B3x3;\n\t\tglm::mat3x3 Identity(1);\n\t\tError += all(equal(I3x3, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x2 A2x2(\n\t\t\tglm::vec2(1, 1), \n\t\t\tglm::vec2(0, 1));\n\t\tglm::mat2x2 B2x2 = glm::inverse(A2x2);\n\t\tglm::mat2x2 I2x2 = A2x2 * B2x2;\n\t\tglm::mat2x2 Identity(1);\n\t\tError += all(equal(I2x2, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_inverse_simd()\n{\n\tint Error = 0;\n\n\tglm::mat4x4 const Identity(1);\n\n\tglm::mat4x4 const A4x4(\n\t\tglm::vec4(1, 0, 1, 0),\n\t\tglm::vec4(0, 1, 0, 0),\n\t\tglm::vec4(0, 0, 1, 0),\n\t\tglm::vec4(0, 0, 0, 1));\n\tglm::mat4x4 const B4x4 = glm::inverse(A4x4);\n\tglm::mat4x4 const I4x4 = A4x4 * B4x4;\n\n\tError += glm::all(glm::equal(I4x4, Identity, 0.001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_shearing()\n{\n    int Error = 0;\n\n    {\n        glm::vec3 const center(0, 0, 0);\n        glm::vec2 const l_x(2, 0);\n        glm::vec2 const l_y(0, 0);\n        glm::vec2 const l_z(0, 0);\n        glm::mat4x4 const A4x4(\n                glm::vec4(0, 0, 1, 1),\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 1, 1, 0),\n                glm::vec4(1, 1, 0, 1));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(0, 0, 1, 1),\n                glm::vec4(2, 1, 1, 0),\n                glm::vec4(3, 1, 1, 0),\n                glm::vec4(3, 1, 0, 1));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(0, 0, 0);\n        glm::vec2 const l_x(1, 0);\n        glm::vec2 const l_y(0, 1);\n        glm::vec2 const l_z(1, 0);\n        glm::mat4x4 const A4x4(\n                glm::vec4(0, 0, 1, 0),\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 1, 1, 0),\n                glm::vec4(1, 0, 0, 0));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 2, 1, 0),\n                glm::vec4(2, 2, 2, 0),\n                glm::vec4(1, 0, 1, 0));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(3, 2, 1);\n        glm::vec2 const l_x(1, 2);\n        glm::vec2 const l_y(3, 1);\n        glm::vec2 const l_z(4, 5);\n        glm::mat4x4 const A4x4(1);\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(1, 3, 4, 0),\n                glm::vec4(1, 1, 5, 0),\n                glm::vec4(2, 1, 1, 0),\n                glm::vec4(-9, -8, -9, 1));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(3, 2, 1);\n        glm::vec2 const l_x(1, 2);\n        glm::vec2 const l_y(3, 1);\n        glm::vec2 const l_z(4, 5);\n        glm::mat4x4 const A4x4(\n                glm::vec4(-3, 2, 1, 0),\n                glm::vec4(3, 2, 1, 0),\n                glm::vec4(4, -8, 0, 0),\n                glm::vec4(7, 1, -2, 0));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(1, -6, -1, 0),\n                glm::vec4(7, 12, 23, 0),\n                glm::vec4(-4, 4, -24, 0),\n                glm::vec4(4, 20, 31, 0));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    return Error;\n}\n\ntemplate<typename VEC3, typename MAT4>\nint test_inverse_perf(std::size_t Count, std::size_t Instance, char const * Message)\n{\n\tstd::vector<MAT4> TestInputs;\n\tTestInputs.resize(Count);\n\tstd::vector<MAT4> TestOutputs;\n\tTestOutputs.resize(TestInputs.size());\n\n\tVEC3 Axis(glm::normalize(VEC3(1.0f, 2.0f, 3.0f)));\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t{\n\t\ttypename MAT4::value_type f = static_cast<typename MAT4::value_type>(i + Instance) * typename MAT4::value_type(0.1) + typename MAT4::value_type(0.1);\n\t\tTestInputs[i] = glm::rotate(glm::translate(MAT4(1), Axis * f), f, Axis);\n\t\t//TestInputs[i] = glm::translate(MAT4(1), Axis * f);\n\t}\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t\tTestOutputs[i] = glm::inverse(TestInputs[i]);\n\n\tstd::clock_t EndTime = std::clock();\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t\tTestOutputs[i] = TestOutputs[i] * TestInputs[i];\n\n\ttypename MAT4::value_type Diff(0);\n\tfor(std::size_t Entry = 0; Entry < TestOutputs.size(); ++Entry)\n\t{\n\t\tMAT4 i(1.0);\n\t\tMAT4 m(TestOutputs[Entry]);\n\t\tfor(glm::length_t y = 0; y < m.length(); ++y)\n\t\tfor(glm::length_t x = 0; x < m[y].length(); ++x)\n\t\t\tDiff = glm::max(m[y][x], i[y][x]);\n\t}\n\n\t//glm::uint Ulp = 0;\n\t//Ulp = glm::max(glm::float_distance(*Dst, *Src), Ulp);\n\n\tstd::printf(\"inverse<%s>(%f): %lu\\n\", Message, static_cast<double>(Diff), EndTime - StartTime);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\tError += test_matrixCompMult();\n\tError += test_outerProduct();\n\tError += test_transpose();\n\tError += test_determinant();\n\tError += test_inverse();\n    Error += test_inverse_simd();\n    Error += test_shearing();\n\n#\tifdef NDEBUG\n\tstd::size_t const Samples = 1000;\n#\telse\n\tstd::size_t const Samples = 1;\n#\tendif//NDEBUG\n\n\tfor(std::size_t i = 0; i < 1; ++i)\n\t{\n\t\tError += test_inverse_perf<glm::vec3, glm::mat4>(Samples, i, \"mat4\");\n\t\tError += test_inverse_perf<glm::dvec3, glm::dmat4>(Samples, i, \"dmat4\");\n\t}\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_noise.cpp",
    "content": "int main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_packing.cpp",
    "content": "#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/packing.hpp>\n#include <vector>\n\nint test_packUnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(0.5f, 0.7f));\n\tA.push_back(glm::vec2(0.1f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x8()\n{\n\tint Error = 0;\n\n\tglm::uint32 Packed = glm::packUnorm4x8(glm::vec4(1.0f, 0.5f, 0.0f, 1.0f));\n\tglm::u8vec4 Vec(255, 128, 0, 255);\n\tglm::uint32 & Ref = *reinterpret_cast<glm::uint32*>(&Vec[0]);\n\n\tError += Packed == Ref ? 0 : 1;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));\n\tA.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackSnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packHalf2x16()\n{\n\tint Error = 0;\n/*\n\tstd::vector<glm::hvec2> A;\n\tA.push_back(glm::hvec2(glm::half( 1.0f), glm::half( 2.0f)));\n\tA.push_back(glm::hvec2(glm::half(-1.0f), glm::half(-2.0f)));\n\tA.push_back(glm::hvec2(glm::half(-1.1f), glm::half( 1.1f)));\n*/\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 2.0f));\n\tA.push_back(glm::vec2(-1.0f,-2.0f));\n\tA.push_back(glm::vec2(-1.1f, 1.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint C = glm::packHalf2x16(B);\n\t\tglm::vec2 D = glm::unpackHalf2x16(C);\n\t\t//Error += B == D ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packDouble2x32()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::uvec2> A;\n\tA.push_back(glm::uvec2( 1, 2));\n\tA.push_back(glm::uvec2(-1,-2));\n\tA.push_back(glm::uvec2(-1000, 1100));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::uvec2 B(A[i]);\n\t\tdouble C = glm::packDouble2x32(B);\n\t\tglm::uvec2 D = glm::unpackDouble2x32(C);\n\t\tError += B == D ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_packSnorm4x8();\n\tError += test_packUnorm4x8();\n\tError += test_packSnorm2x16();\n\tError += test_packUnorm2x16();\n\tError += test_packHalf2x16();\n\tError += test_packDouble2x32();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_swizzle.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_ivec2_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec2 A(1, 2);\n\t\tglm::ivec2 B = A.yx();\n\t\tglm::ivec2 C = B.yx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec2 A(1, 2);\n\t\tglm::ivec2 B = A.yx;\n\t\tglm::ivec2 C = A.yx;\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += B == C ? 0 : 1;\n\n\t\tB.xy = B.yx;\n\t\tC.xy = C.yx;\n\n\t\tError += B == C ? 0 : 1;\n\n\t\tglm::ivec2 D(0, 0);\n\t\tD.yx = A.xy;\n\t\tError += A.yx() == D ? 0 : 1;\n\n\t\tglm::ivec2 E = A.yx;\n\t\tError += E == D ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n\treturn Error;\n}\n\nint test_ivec3_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec3 A(1, 2, 3);\n\t\tglm::ivec3 B = A.zyx();\n\t\tglm::ivec3 C = B.zyx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec2 B = A.yx;\n\t\tglm::ivec2 C = A.yx;\n\n\t\tError += A.yx() == B ? 0 : 1;\n\t\tError += B == C ? 0 : 1;\n\n\t\tB.xy = B.yx;\n\t\tC.xy = C.yx;\n\n\t\tError += B == C ? 0 : 1;\n\n\t\tglm::ivec2 D(0, 0);\n\t\tD.yx = A.xy;\n\n\t\tError += A.yx() == D ? 0 : 1;\n\n\t\tglm::ivec2 E(0, 0);\n\t\tE.xy = A.xy();\n\n\t\tError += E == A.xy() ? 0 : 1;\n\t\tError += E.xy() == A.xy() ? 0 : 1;\n\n\t\tglm::ivec3 const F = A.xxx + A.xxx;\n\t\tError += F == glm::ivec3(2) ? 0 : 1;\n\n\t\tglm::ivec3 const G = A.xxx - A.xxx;\n\t\tError += G == glm::ivec3(0) ? 0 : 1;\n\n\t\tglm::ivec3 const H = A.xxx * A.xxx;\n\t\tError += H == glm::ivec3(1) ? 0 : 1;\n\n\t\tglm::ivec3 const I = A.xxx / A.xxx;\n\t\tError += I == glm::ivec3(1) ? 0 : 1;\n\n\t\tglm::ivec3 J(1, 2, 3);\n\t\tJ.xyz += glm::ivec3(1);\n\t\tError += J == glm::ivec3(2, 3, 4) ? 0 : 1;\n\n\t\tglm::ivec3 K(1, 2, 3);\n\t\tK.xyz += A.xyz;\n\t\tError += K == glm::ivec3(2, 4, 6) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint test_ivec4_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B = A.wzyx();\n\t\tglm::ivec4 C = B.wzyx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint test_vec4_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec4 A(1, 2, 3, 4);\n\t\tglm::vec4 B = A.wzyx();\n\t\tglm::vec4 C = B.wzyx();\n\n\t\tError += glm::any(glm::notEqual(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\n\t\tfloat D = glm::dot(C.wzyx(), C.xyzw());\n\t\tError += glm::equal(D, 20.f, 0.001f) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ivec2_swizzle();\n\tError += test_ivec3_swizzle();\n\tError += test_ivec4_swizzle();\n\tError += test_vec4_swizzle();\n\n\treturn Error;\n}\n\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_trigonometric.cpp",
    "content": "#include <glm/trigonometric.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_func_vector_relational.cpp",
    "content": "#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/gtc/vec1.hpp>\n\nstatic int test_not()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::bvec1 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::bvec2 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::bvec3 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::bvec4 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_less()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const A(1, 2);\n\t\tglm::vec2 const B(2, 3);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1, 2, 3, 4);\n\t\tglm::vec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(2, 3);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec2 const C(1, 3);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec3 const C(1, 3, 4);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec4 const C(1, 3, 4, 5);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_greater()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const A(1, 2);\n\t\tglm::vec2 const B(2, 3);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1, 2, 3, 4);\n\t\tglm::vec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(2, 3);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec2 const C(1, 3);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec3 const C(1, 3, 4);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec4 const C(1, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(1, 2);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(1, 2, 3);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_not();\n\tError += test_less();\n\tError += test_greater();\n\tError += test_equal();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_setup_force_cxx98.cpp",
    "content": "#ifndef GLM_FORCE_CXX98\n#\tdefine GLM_FORCE_CXX98\n#endif\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_setup_force_size_t_length.cpp",
    "content": "#define GLM_FORCE_SIZE_T_LENGTH\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\ntemplate <typename genType>\ngenType add(genType const& a, genType const& b)\n{\n\tgenType result(0);\n\tfor(glm::length_t i = 0; i < a.length(); ++i)\n\t\tresult[i] = a[i] + b[i];\n\treturn result;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tglm::ivec4 v(1);\n\tError += add(v, v) == glm::ivec4(2) ? 0 : 1;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_setup_message.cpp",
    "content": "#define GLM_FORCE_MESSAGES\n#include <glm/vec3.hpp>\n#include <cstdio>\n\nint test_compiler()\n{\n\tint Error(0);\n\t\n\tif(GLM_COMPILER & GLM_COMPILER_VC)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_VC12:\n\t\t\tstd::printf(\"Visual C++ 12 - 2013\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC14:\n\t\t\tstd::printf(\"Visual C++ 14 - 2015\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15:\n\t\t\tstd::printf(\"Visual C++ 15 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_3:\n\t\t\tstd::printf(\"Visual C++ 15.3 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_5:\n\t\t\tstd::printf(\"Visual C++ 15.5 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_6:\n\t\t\tstd::printf(\"Visual C++ 15.6 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_7:\n\t\t\tstd::printf(\"Visual C++ 15.7 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_8:\n\t\t\tstd::printf(\"Visual C++ 15.8 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_9:\n\t\t\tstd::printf(\"Visual C++ 15.9 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC16:\n\t\t\tstd::printf(\"Visual C++ 16 - 2019\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"Visual C++ version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_GCC)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_GCC46:\n\t\t\tstd::printf(\"GCC 4.6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC47:\n\t\t\tstd::printf(\"GCC 4.7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC48:\n\t\t\tstd::printf(\"GCC 4.8\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC49:\n\t\t\tstd::printf(\"GCC 4.9\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC5:\n\t\t\tstd::printf(\"GCC 5\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC6:\n\t\t\tstd::printf(\"GCC 6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC7:\n\t\t\tstd::printf(\"GCC 7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC8:\n\t\t\tstd::printf(\"GCC 8\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"GCC version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_CUDA)\n\t{\n\t\tstd::printf(\"CUDA\\n\");\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_CLANG34:\n\t\t\tstd::printf(\"Clang 3.4\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG35:\n\t\t\tstd::printf(\"Clang 3.5\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG36:\n\t\t\tstd::printf(\"Clang 3.6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG37:\n\t\t\tstd::printf(\"Clang 3.7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG38:\n\t\t\tstd::printf(\"Clang 3.8\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG39:\n\t\t\tstd::printf(\"Clang 3.9\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG40:\n\t\t\tstd::printf(\"Clang 4.0\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG41:\n\t\t\tstd::printf(\"Clang 4.1\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG42:\n\t\t\tstd::printf(\"Clang 4.2\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"LLVM version not detected\\n\");\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_INTEL)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_INTEL14:\n\t\t\tstd::printf(\"ICC 14 - 2013 SP1\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL15:\n\t\t\tstd::printf(\"ICC 15 - 2015\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL16:\n\t\t\tstd::printf(\"ICC 16 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL17:\n\t\t\tstd::printf(\"ICC 17 - 20XX\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"Intel compiler version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse\n\t{\n\t\tstd::printf(\"Undetected compiler\\n\");\n\t\tError += 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_model()\n{\n\tint Error = 0;\n\t\n\tError += ((sizeof(void*) == 4) && (GLM_MODEL == GLM_MODEL_32)) || ((sizeof(void*) == 8) && (GLM_MODEL == GLM_MODEL_64)) ? 0 : 1;\n\t\n\tif(GLM_MODEL == GLM_MODEL_32)\n\t\tstd::printf(\"GLM_MODEL_32\\n\");\n\telse if(GLM_MODEL == GLM_MODEL_64)\n\t\tstd::printf(\"GLM_MODEL_64\\n\");\n\t\n\treturn Error;\n}\n\nint test_instruction_set()\n{\n\tint Error = 0;\n\n\tstd::printf(\"GLM_ARCH: \");\n\n\tif(GLM_ARCH & GLM_ARCH_ARM_BIT)\n\t\tstd::printf(\"ARM \");\n\tif(GLM_ARCH & GLM_ARCH_NEON_BIT)\n\t\tstd::printf(\"NEON \");\n\tif(GLM_ARCH & GLM_ARCH_AVX2_BIT)\n\t\tstd::printf(\"AVX2 \");\n\tif(GLM_ARCH & GLM_ARCH_AVX_BIT)\n\t\tstd::printf(\"AVX \");\n\tif(GLM_ARCH & GLM_ARCH_SSE42_BIT)\n\t\tstd::printf(\"SSE4.2 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE41_BIT)\n\t\tstd::printf(\"SSE4.1 \");\n\tif(GLM_ARCH & GLM_ARCH_SSSE3_BIT)\n\t\tstd::printf(\"SSSE3 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE3_BIT)\n\t\tstd::printf(\"SSE3 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE2_BIT)\n\t\tstd::printf(\"SSE2 \");\n\n\tstd::printf(\"\\n\");\n\n\treturn Error;\n}\n\nint test_cpp_version()\n{\n\tstd::printf(\"__cplusplus: %d\\n\", static_cast<int>(__cplusplus));\n\t\n\treturn 0;\n}\n\nint test_operators()\n{\n\tglm::ivec3 A(1);\n\tglm::ivec3 B(1);\n\tbool R = A != B;\n\tbool S = A == B;\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint main()\n{\n\tint Error = 0;\n\n#\tif !defined(GLM_FORCE_PLATFORM_UNKNOWN) && !defined(GLM_FORCE_COMPILER_UNKNOWN) && !defined(GLM_FORCE_ARCH_UNKNOWN) && !defined(GLM_FORCE_CXX_UNKNOWN)\n\t\t\n\t\tError += test_cpp_version();\n\t\tError += test_compiler();\n\t\tError += test_model();\n\t\tError += test_instruction_set();\n\t\tError += test_operators();\n\n#\tendif\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_setup_platform_unknown.cpp",
    "content": "#ifndef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_FORCE_PLATFORM_UNKNOWN\n#endif\n#ifndef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_FORCE_COMPILER_UNKNOWN\n#endif\n#ifndef GLM_FORCE_ARCH_UNKNOWN\n#\tdefine GLM_FORCE_ARCH_UNKNOWN\n#endif\n#ifndef GLM_FORCE_CXX_UNKNOWN\n#\tdefine GLM_FORCE_CXX_UNKNOWN\n#endif\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_setup_precision.cpp",
    "content": "#define GLM_FORCE_INLINE\n#define GLM_PRECISION_HIGHP_FLOAT\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nstatic int test_mat()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::mat2) == sizeof(glm::highp_mat2) ? 0 : 1;\n\tError += sizeof(glm::mat3) == sizeof(glm::highp_mat3) ? 0 : 1;\n\tError += sizeof(glm::mat4) == sizeof(glm::highp_mat4) ? 0 : 1;\n\n\tError += sizeof(glm::mat2x2) == sizeof(glm::highp_mat2x2) ? 0 : 1;\n\tError += sizeof(glm::mat2x3) == sizeof(glm::highp_mat2x3) ? 0 : 1;\n\tError += sizeof(glm::mat2x4) == sizeof(glm::highp_mat2x4) ? 0 : 1;\n\tError += sizeof(glm::mat3x2) == sizeof(glm::highp_mat3x2) ? 0 : 1;\n\tError += sizeof(glm::mat3x3) == sizeof(glm::highp_mat3x3) ? 0 : 1;\n\tError += sizeof(glm::mat3x4) == sizeof(glm::highp_mat3x4) ? 0 : 1;\n\tError += sizeof(glm::mat4x2) == sizeof(glm::highp_mat4x2) ? 0 : 1;\n\tError += sizeof(glm::mat4x3) == sizeof(glm::highp_mat4x3) ? 0 : 1;\n\tError += sizeof(glm::mat4x4) == sizeof(glm::highp_mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec2) == sizeof(glm::highp_vec2) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_dvec()\n{\n\tint Error = 0;\n\t\n\tError += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mat();\n\tError += test_vec();\n\tError += test_dvec();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_aligned.cpp",
    "content": "#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#include <type_traits>\n\nstatic_assert(sizeof(glm::bvec4) > sizeof(glm::bvec2), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::ivec4) > sizeof(glm::uvec2), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::dvec4) > sizeof(glm::dvec2), \"Invalid sizeof\");\n\nstatic_assert(sizeof(glm::bvec4) == sizeof(glm::bvec3), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::uvec4) == sizeof(glm::uvec3), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::dvec4) == sizeof(glm::dvec3), \"Invalid sizeof\");\n\nstatic int test_storage_aligned()\n{\n\tint Error = 0;\n\n\tsize_t size1_aligned = sizeof(glm::detail::storage<1, int, true>::type);\n\tError += size1_aligned == sizeof(int) * 1 ? 0 : 1;\n\tsize_t size2_aligned = sizeof(glm::detail::storage<2, int, true>::type);\n\tError += size2_aligned == sizeof(int) * 2 ? 0 : 1;\n\tsize_t size4_aligned = sizeof(glm::detail::storage<4, int, true>::type);\n\tError += size4_aligned == sizeof(int) * 4 ? 0 : 1;\n\n\tsize_t align1_aligned = alignof(glm::detail::storage<1, int, true>::type);\n\tError += align1_aligned == 4 ? 0 : 1;\n\tsize_t align2_aligned = alignof(glm::detail::storage<2, int, true>::type);\n\tError += align2_aligned == 8 ? 0 : 1;\n\tsize_t align4_aligned = alignof(glm::detail::storage<4, int, true>::type);\n\tError += align4_aligned == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_storage_unaligned()\n{\n\tint Error = 0;\n\n\tsize_t align1_unaligned = alignof(glm::detail::storage<1, int, false>::type);\n\tError += align1_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align2_unaligned = alignof(glm::detail::storage<2, int, false>::type);\n\tError += align2_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align3_unaligned = alignof(glm::detail::storage<3, int, false>::type);\n\tError += align3_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align4_unaligned = alignof(glm::detail::storage<4, int, false>::type);\n\tError += align4_unaligned == sizeof(int) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec3_aligned()\n{\n\tint Error = 0;\n\n\tstruct Struct1\n\t{\n\t\tglm::vec4 A;\n\t\tfloat B;\n\t\tglm::vec3 C;\n\t};\n\n\tstd::size_t const Size1 = sizeof(Struct1);\n\tError += Size1 == 48 ? 0 : 1;\n\n\tstruct Struct2\n\t{\n\t\tglm::vec4 A;\n\t\tglm::vec3 B;\n\t\tfloat C;\n\t};\n\n\tstd::size_t const Size2 = sizeof(Struct2);\n\tError += Size2 == 48 ? 0 : 1;\n\n\treturn Error;\n}\n\n#endif\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\tError += test_storage_aligned();\n\t\tError += test_storage_unaligned();\n\t\tError += test_vec3_aligned();\n#\tendif\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_cast.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n#include <algorithm>\n#include <vector>\n#include <iterator>\n\nstruct my_vec2\n{\n\toperator glm::vec2() { return glm::vec2(x, y); }\n\tfloat x, y;\n};\n\nint test_vec2_cast()\n{\n\tglm::vec2 A(1.0f, 2.0f);\n\tglm::lowp_vec2 B(A);\n\tglm::mediump_vec2 C(A);\n\tglm::highp_vec2 D(A);\n\t\n\tglm::vec2 E = static_cast<glm::vec2>(A);\n\tglm::lowp_vec2 F = static_cast<glm::lowp_vec2>(A);\n\tglm::mediump_vec2 G = static_cast<glm::mediump_vec2>(A);\n\tglm::highp_vec2 H = static_cast<glm::highp_vec2>(A);\n\t\n\tmy_vec2 I;\n\tglm::vec2 J = static_cast<glm::vec2>(I);\n\tglm::vec2 K(7.8f);\n\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_vec3_cast()\n{\n\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\tglm::lowp_vec3 B(A);\n\tglm::mediump_vec3 C(A);\n\tglm::highp_vec3 D(A);\n\t\n\tglm::vec3 E = static_cast<glm::vec3>(A);\n\tglm::lowp_vec3 F = static_cast<glm::lowp_vec3>(A);\n\tglm::mediump_vec3 G = static_cast<glm::mediump_vec3>(A);\n\tglm::highp_vec3 H = static_cast<glm::highp_vec3>(A);\n\t\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_vec4_cast()\n{\n\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\tglm::lowp_vec4 B(A);\n\tglm::mediump_vec4 C(A);\n\tglm::highp_vec4 D(A);\n\t\n\tglm::vec4 E = static_cast<glm::vec4>(A);\n\tglm::lowp_vec4 F = static_cast<glm::lowp_vec4>(A);\n\tglm::mediump_vec4 G = static_cast<glm::mediump_vec4>(A);\n\tglm::highp_vec4 H = static_cast<glm::highp_vec4>(A);\n\t\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_std_copy()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::vector<int> High;\n\t\tHigh.resize(64);\n\t\tstd::vector<int> Medium(High.size());\n\t\t\n\t\tstd::copy(High.begin(), High.end(), Medium.begin());\n\n\t\t*Medium.begin() = *High.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec4> High4;\n\t\tHigh4.resize(64);\n\t\tstd::vector<glm::vec4> Medium4(High4.size());\n\t\t\n\t\tstd::copy(High4.begin(), High4.end(), Medium4.begin());\n\n\t\t*Medium4.begin() = *High4.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec3> High3;\n\t\tHigh3.resize(64);\n\t\tstd::vector<glm::vec3> Medium3(High3.size());\n\n\t\tstd::copy(High3.begin(), High3.end(), Medium3.begin());\n\n\t\t*Medium3.begin() = *High3.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec2> High2;\n\t\tHigh2.resize(64);\n\t\tstd::vector<glm::vec2> Medium2(High2.size());\n\n\t\tstd::copy(High2.begin(), High2.end(), Medium2.begin());\n\n\t\t*Medium2.begin() = *High2.begin();\n\t}\n\n\tglm::dvec4 v1;\n\tglm::vec4 v2;\n\n\tv2 = v1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_std_copy();\n\tError += test_vec2_cast();\n\tError += test_vec3_cast();\n\tError += test_vec4_cast();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_ctor.cpp",
    "content": "#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec1 f;\n\t\t\tglm::ivec1 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec1(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec1(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec1(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec1(1065353216))) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n\treturn Error;\n}\n\nstatic int test_vec2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec2 f;\n\t\t\tglm::ivec2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec2(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec2(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec2(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec2(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_vec3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec3 f;\n\t\t\tglm::ivec3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec3(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec3(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec3(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec3(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec4 f;\n\t\t\tglm::ivec4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec4(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec4(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec4(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec4(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_mat2x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x2 f;\n\t\t\tglm::mat2x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat2x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x3 f;\n\t\t\tglm::mat2x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat2x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x4 f;\n\t\t\tglm::mat2x4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x4(0);\n\t\tglm::vec4 const C(0, 0, 0, 0);\n\t\tError += glm::all(glm::equal(A.i[0], C, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x4(1);\n\t\tglm::vec4 const D(1, 0, 0, 0);\n\t\tError += glm::all(glm::equal(B.i[0], D, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x2 f;\n\t\t\tglm::mat3x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x3 f;\n\t\t\tglm::mat3x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x4 f;\n\t\t\tglm::mat3x4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x4(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec4(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x4(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4x2 f;\n\t\t\tglm::mat4x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4x3 f;\n\t\t\tglm::mat4x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4 f;\n\t\t\tglm::mat4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec4(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_quat_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::quat f;\n\t\t\tglm::quat i;\n\t\t} A, B;\n\n\t\tA.f = glm::quat(0, 0, 0, 0);\n\t\tError += glm::all(glm::equal(A.i, glm::quat(0, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::quat(1, 1, 1, 1);\n\t\tError += glm::all(glm::equal(B.i, glm::quat(1, 1, 1, 1), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_ctor();\n\tError += test_vec2_ctor();\n\tError += test_vec3_ctor();\n\tError += test_vec4_ctor();\n\tError += test_mat2x2_ctor();\n\tError += test_mat2x3_ctor();\n\tError += test_mat2x4_ctor();\n\tError += test_mat3x2_ctor();\n\tError += test_mat3x3_ctor();\n\tError += test_mat3x4_ctor();\n\tError += test_mat4x2_ctor();\n\tError += test_mat4x3_ctor();\n\tError += test_mat4x4_ctor();\n\tError += test_quat_ctor();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_int.cpp",
    "content": "#include <glm/glm.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n\nstatic int test_bit_operator()\n{\n\tint Error = 0;\n\n\tglm::ivec4 const a(1);\n\tglm::ivec4 const b = ~a;\n\tError += glm::all(glm::equal(b, glm::ivec4(-2))) ? 0 : 1;\n\n\tglm::int32 const c(1);\n\tglm::int32 const d = ~c;\n\tError += d == -2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_bit_operator();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_length.cpp",
    "content": "#include <glm/glm.hpp>\n\nstatic int test_length_mat_non_squared()\n{\n\tint Error = 0;\n\n\tError += glm::mat2x3().length() == 2 ? 0 : 1;\n\tError += glm::mat2x4().length() == 2 ? 0 : 1;\n\tError += glm::mat3x2().length() == 3 ? 0 : 1;\n\tError += glm::mat3x4().length() == 3 ? 0 : 1;\n\tError += glm::mat4x2().length() == 4 ? 0 : 1;\n\tError += glm::mat4x3().length() == 4 ? 0 : 1;\n\t\n\tError += glm::dmat2x3().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4().length() == 2 ? 0 : 1;\n\tError += glm::dmat3x2().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4().length() == 3 ? 0 : 1;\n\tError += glm::dmat4x2().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_length_mat()\n{\n\tint Error = 0;\n\t\n\tError += glm::mat2().length() == 2 ? 0 : 1;\n\tError += glm::mat3().length() == 3 ? 0 : 1;\n\tError += glm::mat4().length() == 4 ? 0 : 1;\n\tError += glm::mat2x2().length() == 2 ? 0 : 1;\n\tError += glm::mat3x3().length() == 3 ? 0 : 1;\n\tError += glm::mat4x4().length() == 4 ? 0 : 1;\n\t\n\tError += glm::dmat2().length() == 2 ? 0 : 1;\n\tError += glm::dmat3().length() == 3 ? 0 : 1;\n\tError += glm::dmat4().length() == 4 ? 0 : 1;\n\tError += glm::dmat2x2().length() == 2 ? 0 : 1;\n\tError += glm::dmat3x3().length() == 3 ? 0 : 1;\n\tError += glm::dmat4x4().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_length_vec()\n{\n\tint Error = 0;\n\t\n\tError += glm::vec2().length() == 2 ? 0 : 1;\n\tError += glm::vec3().length() == 3 ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\n\tError += glm::ivec2().length() == 2 ? 0 : 1;\n\tError += glm::ivec3().length() == 3 ? 0 : 1;\n\tError += glm::ivec4().length() == 4 ? 0 : 1;\n\n\tError += glm::uvec2().length() == 2 ? 0 : 1;\n\tError += glm::uvec3().length() == 3 ? 0 : 1;\n\tError += glm::uvec4().length() == 4 ? 0 : 1;\t\n\t\n\tError += glm::dvec2().length() == 2 ? 0 : 1;\n\tError += glm::dvec3().length() == 3 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_length_vec();\n\tError += test_length_mat();\n\tError += test_length_mat_non_squared();\n\t\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat2x2.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/matrix.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nint test_operators()\n{\n\tglm::mat2x2 l(1.0f);\n\tglm::mat2x2 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x2 n = x / m;\n\tglm::mat2x2 o = m / x;\n\tglm::mat2x2 p = x * m;\n\tglm::mat2x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_inverse()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::mat2 const Matrix(1, 2, 3, 4);\n\t\tglm::mat2 const Inverse = glm::inverse(Matrix);\n\t\tglm::mat2 const Identity = Matrix * Inverse;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2 const Matrix(1, 2, 3, 4);\n\t\tglm::mat2 const Identity = Matrix / Matrix;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_ctr()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::mediump_mat2x2 const A(1.0f);\n\t\tglm::highp_mat2x2 const B(A);\n\t\tglm::mediump_mat2x2 const C(B);\n\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat2x2 m0(\n\t\tglm::vec2(0, 1),\n\t\tglm::vec2(2, 3));\n\n\tglm::mat2x2 m1{0, 1, 2, 3};\n\n\tglm::mat2x2 m2{\n\t\t{0, 1},\n\t\t{2, 3}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat2x2> v1{\n\t\t{0, 1, 2, 3},\n\t\t{0, 1, 2, 3}\n\t};\n\n\tstd::vector<glm::mat2x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5}\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2 B(A);\n\t\tglm::mat2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 16 == sizeof(glm::mat2x2) ? 0 : 1;\n\tError += 32 == sizeof(glm::dmat2x2) ? 0 : 1;\n\tError += glm::mat2x2().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x2().length() == 2 ? 0 : 1;\n\tError += glm::mat2x2::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x2::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x2::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_inverse();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat2x3.cpp",
    "content": "#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat2x3 l(1.0f);\n\tglm::mat2x3 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x3 n = x / m;\n\tglm::mat2x3 o = m / x;\n\tglm::mat2x3 p = x * m;\n\tglm::mat2x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat2x3 m0(\n\t\tglm::vec3(0, 1, 2),\n\t\tglm::vec3(3, 4, 5));\n\t\n\tglm::mat2x3 m1{0, 1, 2, 3, 4, 5};\n\t\n\tglm::mat2x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5}};\n\t\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\t\n\tstd::vector<glm::mat2x3> v1{\n\t\t{0, 1, 2, 3, 4, 5},\n\t\t{0, 1, 2, 3, 4, 5}\n\t};\n\t\n\tstd::vector<glm::mat2x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 4, 5, 6}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 4, 5, 6}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2x3 B(A);\n\t\tglm::mat2x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 24 == sizeof(glm::mat2x3) ? 0 : 1;\n\tError += 48 == sizeof(glm::dmat2x3) ? 0 : 1;\n\tError += glm::mat2x3().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x3().length() == 2 ? 0 : 1;\n\tError += glm::mat2x3::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x3::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x3::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat2x4.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat2x4 l(1.0f);\n\tglm::mat2x4 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec4 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec4 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x4 n = x / m;\n\tglm::mat2x4 o = m / x;\n\tglm::mat2x4 p = x * m;\n\tglm::mat2x4 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat2x4 m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7));\n\n\tglm::mat2x4 m1{0, 1, 2, 3, 4, 5, 6, 7};\n\n\tglm::mat2x4 m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat2x4> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7}\n\t};\n\t\n\tstd::vector<glm::mat2x4> v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2x4 B(A);\n\t\tglm::mat2x4 Identity(1.0f);\n\n\t\tfor(glm::length_t i = 0, length = B.length(); i < length; ++i)\n\t\t\tError += glm::all(glm::epsilonEqual(B[i], Identity[i], glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::mat2x4) ? 0 : 1;\n\tError += 64 == sizeof(glm::dmat2x4) ? 0 : 1;\n\tError += glm::mat2x4().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4().length() == 2 ? 0 : 1;\n\tError += glm::mat2x4::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x4::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat3x2.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic bool test_operators()\n{\n\tglm::mat3x2 l(1.0f);\n\tglm::mat3x2 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x2 n = x / m;\n\tglm::mat3x2 o = m / x;\n\tglm::mat3x2 p = x * m;\n\tglm::mat3x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x2 m0(\n\t\tglm::vec2(0, 1),\n\t\tglm::vec2(2, 3),\n\t\tglm::vec2(4, 5));\n\t\n\tglm::mat3x2 m1{0, 1, 2, 3, 4, 5};\n\t\n\tglm::mat3x2 m2{\n\t\t{0, 1},\n\t\t{2, 3},\n\t\t{4, 5}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x2> v1{\n\t\t{0, 1, 2, 3, 4, 5},\n\t\t{0, 1, 2, 3, 4, 5}\n\t};\n\t\n\tstd::vector<glm::mat3x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 2, 3},\n\t\t\t{ 4, 5}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 2, 3},\n\t\t\t{ 4, 5}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x2 B(A);\n\t\tglm::mat3x2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 24 == sizeof(glm::mat3x2) ? 0 : 1;\n\tError += 48 == sizeof(glm::dmat3x2) ? 0 : 1;\n\tError += glm::mat3x2().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x2().length() == 3 ? 0 : 1;\n\tError += glm::mat3x2::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x2::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x2::length() == 3, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat3x3.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/matrix.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_mat3x3()\n{\n\tglm::dmat3 Mat0(\n\t\tglm::dvec3(0.6f, 0.2f, 0.3f),\n\t\tglm::dvec3(0.2f, 0.7f, 0.5f),\n\t\tglm::dvec3(0.3f, 0.5f, 0.7f));\n\tglm::dmat3 Inv0 = glm::inverse(Mat0);\n\tglm::dmat3 Res0 = Mat0 * Inv0;\n\n\treturn glm::all(glm::equal(Res0, glm::dmat3(1.0), 0.01)) ? 0 : 1;\n}\n\nstatic int test_operators()\n{\n\tglm::mat3x3 l(1.0f);\n\tglm::mat3x3 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x3 n = x / m;\n\tglm::mat3x3 o = m / x;\n\tglm::mat3x3 p = x * m;\n\tglm::mat3x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nstatic int test_inverse()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::mat3 const Matrix(\n\t\t\tglm::vec3(0.6f, 0.2f, 0.3f), \n\t\t\tglm::vec3(0.2f, 0.7f, 0.5f), \n\t\t\tglm::vec3(0.3f, 0.5f, 0.7f));\n\t\tglm::mat3 const Inverse = glm::inverse(Matrix);\n\t\tglm::mat3 const Identity = Matrix * Inverse;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3 const Matrix(\n\t\t\tglm::vec3(0.6f, 0.2f, 0.3f), \n\t\t\tglm::vec3(0.2f, 0.7f, 0.5f), \n\t\t\tglm::vec3(0.3f, 0.5f, 0.7f));\n\t\tglm::mat3 const Identity = Matrix / Matrix;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x3 m0(\n\t\tglm::vec3(0, 1, 2),\n\t\tglm::vec3(3, 4, 5),\n\t\tglm::vec3(6, 7, 8));\n\t\n\tglm::mat3x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8};\n\t\n\tglm::mat3x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5},\n\t\t{6, 7, 8}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x3> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8}\n\t};\n\t\n\tstd::vector<glm::mat3x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 3, 4, 5},\n\t\t\t{ 6, 7, 8}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 3, 4, 5},\n\t\t\t{ 6, 7, 8}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x3 B(A);\n\t\tglm::mat3x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 36 == sizeof(glm::mat3x3) ? 0 : 1;\n\tError += 72 == sizeof(glm::dmat3x3) ? 0 : 1;\n\tError += glm::mat3x3().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x3().length() == 3 ? 0 : 1;\n\tError += glm::mat3x3::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x3::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x3::length() == 3, \"GLM: Failed constexpr\");\n\n\tconstexpr glm::mat3x3 const Z(0.0f);\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_mat3x3();\n\tError += test_operators();\n\tError += test_inverse();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat3x4.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic bool test_operators()\n{\n\tglm::mat3x4 l(1.0f);\n\tglm::mat3x4 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec4 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec4 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x4 n = x / m;\n\tglm::mat3x4 o = m / x;\n\tglm::mat3x4 p = x * m;\n\tglm::mat3x4 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x4 m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7),\n\t\tglm::vec4(8, 9, 10, 11));\n\n\tglm::mat3x4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};\n\n\tglm::mat3x4 m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7},\n\t\t{8, 9, 10, 11}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x4> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}\n\t};\n\t\n\tstd::vector<glm::mat3x4> v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7},\n\t\t\t{ 8, 9, 10, 11}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7},\n\t\t\t{ 8, 9, 10, 11}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x4 B(A);\n\t\tglm::mat3x4 Identity(1.0f);\n\n\t\tfor(glm::length_t i = 0, length = B.length(); i < length; ++i)\n\t\t\tError += glm::all(glm::epsilonEqual(B[i], Identity[i], glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 48 == sizeof(glm::mat3x4) ? 0 : 1;\n\tError += 96 == sizeof(glm::dmat3x4) ? 0 : 1;\n\tError += glm::mat3x4().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4().length() == 3 ? 0 : 1;\n\tError += glm::mat3x4::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x4::length() == 3, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat4x2.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat4x2 l(1.0f);\n\tglm::mat4x2 m(1.0f);\n\tglm::vec4 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec4 b = v * m;\n\tglm::mat4x2 n = x / m;\n\tglm::mat4x2 o = m / x;\n\tglm::mat4x2 p = x * m;\n\tglm::mat4x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat4x2 m0(\n\t\tglm::vec2(0, 1), \n\t\tglm::vec2(2, 3),\n\t\tglm::vec2(4, 5),\n\t\tglm::vec2(6, 7));\n\n\tglm::mat4x2 m1{0, 1, 2, 3, 4, 5, 6, 7};\n\n\tglm::mat4x2 m2{\n\t\t{0, 1},\n\t\t{2, 3},\n\t\t{4, 5},\n\t\t{6, 7}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat4x2> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7}\n\t};\n\n\tstd::vector<glm::mat4x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5},\n\t\t\t{ 8, 9},\n\t\t\t{ 12, 13}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5},\n\t\t\t{ 8, 9},\n\t\t\t{ 12, 13}\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat4x2 B(A);\n\t\tglm::mat4x2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::mat4x2) ? 0 : 1;\n\tError += 64 == sizeof(glm::dmat4x2) ? 0 : 1;\n\tError += glm::mat4x2().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x2().length() == 4 ? 0 : 1;\n\tError += glm::mat4x2::length() == 4 ? 0 : 1;\n\tError += glm::dmat4x2::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4x2::length() == 4, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat4x3.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat4x3 l(1.0f);\n\tglm::mat4x3 m(1.0f);\n\tglm::vec4 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec4 b = v * m;\n\tglm::mat4x3 n = x / m;\n\tglm::mat4x3 o = m / x;\n\tglm::mat4x3 p = x * m;\n\tglm::mat4x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat4x3 m0(\n\t\tglm::vec3(0, 1, 2), \n\t\tglm::vec3(3, 4, 5),\n\t\tglm::vec3(6, 7, 8),\n\t\tglm::vec3(9, 10, 11));\n\n\tglm::mat4x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};\n\n\tglm::mat4x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5},\n\t\t{6, 7, 8},\n\t\t{9, 10, 11}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat4x3> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}\n\t};\n\n\tstd::vector<glm::mat4x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2 },\n\t\t\t{ 4, 5, 6 },\n\t\t\t{ 8, 9, 10 },\n\t\t\t{ 12, 13, 14 }\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2 },\n\t\t\t{ 4, 5, 6 },\n\t\t\t{ 8, 9, 10 },\n\t\t\t{ 12, 13, 14 }\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat4x3 B(A);\n\t\tglm::mat4x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 48 == sizeof(glm::mat4x3) ? 0 : 1;\n\tError += 96 == sizeof(glm::dmat4x3) ? 0 : 1;\n\tError += glm::mat4x3().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3().length() == 4 ? 0 : 1;\n\tError += glm::mat4x3::length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4x3::length() == 4, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_mat4x4.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/matrix.hpp>\n#include <glm/mat4x4.hpp>\n#include <glm/vec4.hpp>\n#include <vector>\n\ntemplate <typename matType, typename vecType>\nstatic int test_operators()\n{\n\ttypedef typename matType::value_type value_type;\n\n\tvalue_type const Epsilon = static_cast<value_type>(0.001);\n\n\tint Error = 0;\n\n\tmatType const M(static_cast<value_type>(2.0f));\n\tmatType const N(static_cast<value_type>(1.0f));\n\tvecType const U(static_cast<value_type>(2.0f));\n\n\t{\n\t\tmatType const P = N * static_cast<value_type>(2.0f);\n\t\tError += glm::all(glm::equal(P, M, Epsilon)) ? 0 : 1;\n\t\t\n\t\tmatType const Q = M / static_cast<value_type>(2.0f);\n\t\tError += glm::all(glm::equal(Q, N, Epsilon)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tvecType const V = M * U;\n\t\tError += glm::all(glm::equal(V, vecType(static_cast<value_type>(4.f)), Epsilon)) ? 0 : 1;\n\t\t\n\t\tvecType const W = U / M;\n\t\tError += glm::all(glm::equal(W, vecType(static_cast<value_type>(1.f)), Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tmatType const O = M * N;\n\t\tError += glm::all(glm::equal(O, matType(static_cast<value_type>(2.f)), Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename matType>\nstatic int test_inverse()\n{\n\ttypedef typename matType::value_type value_type;\n\n\tvalue_type const Epsilon = static_cast<value_type>(0.001);\n\t\n\tint Error = 0;\n\n\tmatType const Identity(static_cast<value_type>(1.0f));\n\tmatType const Matrix(\n\t\tglm::vec4(0.6f, 0.2f, 0.3f, 0.4f),\n\t\tglm::vec4(0.2f, 0.7f, 0.5f, 0.3f),\n\t\tglm::vec4(0.3f, 0.5f, 0.7f, 0.2f),\n\t\tglm::vec4(0.4f, 0.3f, 0.2f, 0.6f));\n\tmatType const Inverse = Identity / Matrix;\n\tmatType const Result = Matrix * Inverse;\n\n\tError += glm::all(glm::equal(Identity, Result, Epsilon)) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_ctr()\n{\n\tint Error = 0;\n\n#if GLM_HAS_TRIVIAL_QUERIES\n\t//Error += std::is_trivially_default_constructible<glm::mat4>::value ? 0 : 1;\n\t//Error += std::is_trivially_copy_assignable<glm::mat4>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::mat4>::value ? 0 : 1;\n\t//Error += std::is_copy_constructible<glm::mat4>::value ? 0 : 1;\n\t//Error += std::has_trivial_copy_constructor<glm::mat4>::value ? 0 : 1;\n#endif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat4 const m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7),\n\t\tglm::vec4(8, 9, 10, 11),\n\t\tglm::vec4(12, 13, 14, 15));\n\n\tassert(sizeof(m0) == 4 * 4 * 4);\n\n\tglm::vec4 const V{0, 1, 2, 3};\n\n\tglm::mat4 const m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\n\tglm::mat4 const m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7},\n\t\t{8, 9, 10, 11},\n\t\t{12, 13, 14, 15}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\n\tstd::vector<glm::mat4> const m3{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};\n\n\tglm::mat4 const m4{\n\t\t{1, 0, 0, 0},\n\t\t{0, 1, 0, 0},\n\t\t{0, 0, 1, 0},\n\t\t{0, 0, 0, 1} };\n\n\tError += glm::equal(m4[0][0], 1.0f, 0.0001f) ? 0 : 1;\n\tError += glm::equal(m4[3][3], 1.0f, 0.0001f) ? 0 : 1;\n\n\tstd::vector<glm::mat4> const v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};\n\n\tstd::vector<glm::mat4> const v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3 },\n\t\t\t{ 4, 5, 6, 7 },\n\t\t\t{ 8, 9, 10, 11 },\n\t\t\t{ 12, 13, 14, 15 }\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3 },\n\t\t\t{ 4, 5, 6, 7 },\n\t\t\t{ 8, 9, 10, 11 },\n\t\t\t{ 12, 13, 14, 15 }\n\t\t}};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nstatic int test_member_alloc_bug()\n{\n\tint Error = 0;\n\t\n\tstruct repro\n\t{\n\t\trepro(){ this->matrix = new glm::mat4(); }\n\t\t~repro(){delete this->matrix;}\n\t\t\n\t\tglm::mat4* matrix;\n\t};\n\t\n\trepro Repro;\n\t\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 64 == sizeof(glm::mat4) ? 0 : 1;\n\tError += 128 == sizeof(glm::dmat4) ? 0 : 1;\n\tError += glm::mat4().length() == 4 ? 0 : 1;\n\tError += glm::dmat4().length() == 4 ? 0 : 1;\n\tError += glm::mat4::length() == 4 ? 0 : 1;\n\tError += glm::dmat4::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4::length() == 4, \"GLM: Failed constexpr\");\n\tconstexpr glm::mat4 A(1.f);\n\tconstexpr glm::mat4 B(1.f);\n\tconstexpr glm::bvec4 C = glm::equal(A, B, 0.01f);\n\tstatic_assert(glm::all(C), \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_member_alloc_bug();\n\tError += test_ctr();\n\n\tError += test_operators<glm::mat4, glm::vec4>();\n\tError += test_operators<glm::lowp_mat4, glm::lowp_vec4>();\n\tError += test_operators<glm::mediump_mat4, glm::mediump_vec4>();\n\tError += test_operators<glm::highp_mat4, glm::highp_vec4>();\n\n\tError += test_operators<glm::dmat4, glm::dvec4>();\n\tError += test_operators<glm::lowp_dmat4, glm::lowp_dvec4>();\n\tError += test_operators<glm::mediump_dmat4, glm::mediump_dvec4>();\n\tError += test_operators<glm::highp_dmat4, glm::highp_dvec4>();\n\n\tError += test_inverse<glm::mat4>();\n\tError += test_inverse<glm::lowp_mat4>();\n\tError += test_inverse<glm::mediump_mat4>();\n\tError += test_inverse<glm::highp_mat4>();\n\n\tError += test_inverse<glm::dmat4>();\n\tError += test_inverse<glm::lowp_dmat4>();\n\tError += test_inverse<glm::mediump_dmat4>();\n\tError += test_inverse<glm::highp_dmat4>();\n\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_vec1.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n\nstatic glm::vec1 g1;\nstatic glm::vec1 g2(1);\n\nint test_vec1_operators()\n{\n\tint Error = 0;\n\n\tglm::ivec1 A(1);\n\tglm::ivec1 B(1);\n\t{\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tA *= 1;\n\t\tB *= 1;\n\t\tA += 1;\n\t\tB += 1;\n\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec1>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec1>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec1>::value ? 0 : 1;\n#\tendif\n\n/*\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec1 a{ 0 };\n\t\tstd::vector<glm::vec1> v = {\n\t\t\t{0.f},\n\t\t\t{4.f},\n\t\t\t{8.f}};\n\t}\n\n\t{\n\t\tglm::dvec2 a{ 0 };\n\t\tstd::vector<glm::dvec1> v = {\n\t\t\t{0.0},\n\t\t\t{4.0},\n\t\t\t{8.0}};\n\t}\n#endif\n*/\n\n\t{\n\t\tglm::vec2 A = glm::vec2(2.0f);\n\t\tglm::vec2 B = glm::vec2(2.0f, 3.0f);\n\t\tglm::vec2 C = glm::vec2(2.0f, 3.0);\n\t\t//glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?\n\t\tglm::vec2 E(glm::dvec2(2.0));\n\t\tglm::vec2 F(glm::ivec2(2));\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec1) == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += 4 == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += sizeof(glm::dvec1) == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += 8 == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += glm::vec1().length() == 1 ? 0 : 1;\n\tError += glm::dvec1().length() == 1 ? 0 : 1;\n\tError += glm::vec1::length() == 1 ? 0 : 1;\n\tError += glm::dvec1::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec1_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec1 v0(1);\n\tglm::ivec1 v1(v0);\n\tglm::ivec1 v2(v0);\n\tglm::ivec1 v3 = ++v1;\n\tglm::ivec1 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec1 A = glm::vec1(1.0f);\n\t\t//glm::vec1 B = A.x;\n\t\tglm::vec1 C(A.x);\n\n\t\t//Error += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_size();\n\tError += test_vec1_ctor();\n\tError += test_vec1_operators();\n\tError += test_vec1_operator_increment();\n\tError += test_swizzle();\n\tError += test_constexpr();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_vec2.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n#if GLM_HAS_TRIVIAL_QUERIES\n#\tinclude <type_traits>\n#endif\n\nstatic glm::ivec2 g1;\nstatic glm::ivec2 g2(1);\nstatic glm::ivec2 g3(1, 1);\n\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 A(1);\n\t\tglm::ivec2 B(1);\n\t\tError += A != B ? 1 : 0;\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A + 1.0f;\n\t\tA += 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 B(2.0f,-1.0f);\n\t\tglm::vec2 C = A + B;\n\t\tA += B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(3.0f, 0.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A - 1.0f;\n\t\tA -= 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(0.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 B(2.0f,-1.0f);\n\t\tglm::vec2 C = A - B;\n\t\tA -= B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(-1.0f, 2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A * 2.0f;\n\t\tA *= 2.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(2.0f);\n\t\tglm::vec2 B(2.0f);\n\t\tglm::vec2 C = A / B;\n\t\tA /= B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(1.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f, 2.0f);\n\t\tglm::vec2 B(4.0f, 5.0f);\n\n\t\tglm::vec2 C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec2(5, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec2(3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec2(4, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec2(4, 2.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec2(2, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec2(3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec2(2, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec2(2, 2.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec2(2, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec2(-3, -4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec2(2, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec2(0.5, 2.0 / 5.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f, 2.0f);\n\t\tglm::vec2 B(4.0f, 5.0f);\n\n\t\tA += B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(5, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tA += 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(6, 8), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 5.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec2(3, 3) ? 0 : 1;\n\n\t\tB -= 1.0f;\n\t\tError += B == glm::ivec2(2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 5.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec2(4, 10) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec2(8, 20) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 16.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec2(4, 8) ? 0 : 1;\n\n\t\tB /= 2.0f;\n\t\tError += B == glm::ivec2(2, 4) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec2(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = -A;\n\t\tError += B == glm::ivec2(-1.0f, -2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = --A;\n\t\tError += B == glm::ivec2(0.0f, 1.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = A--;\n\t\tError += B == glm::ivec2(1.0f, 2.0f) ? 0 : 1;\n\t\tError += A == glm::ivec2(0.0f, 1.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = ++A;\n\t\tError += B == glm::ivec2(2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = A++;\n\t\tError += B == glm::ivec2(1.0f, 2.0f) ? 0 : 1;\n\t\tError += A == glm::ivec2(2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 A(1);\n\t\tglm::ivec2 B(A);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec2>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec2>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec2>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec2 a{ 0, 1 };\n\t\tstd::vector<glm::vec2> v = {\n\t\t\t{0, 1},\n\t\t\t{4, 5},\n\t\t\t{8, 9}};\n\t}\n\n\t{\n\t\tglm::dvec2 a{ 0, 1 };\n\t\tstd::vector<glm::dvec2> v = {\n\t\t\t{0, 1},\n\t\t\t{4, 5},\n\t\t\t{8, 9}};\n\t}\n#endif\n\n\t{\n\t\tglm::vec2 A = glm::vec2(2.0f);\n\t\tglm::vec2 B = glm::vec2(2.0f, 3.0f);\n\t\tglm::vec2 C = glm::vec2(2.0f, 3.0);\n\t\t//glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?\n\t\tglm::vec2 E(glm::dvec2(2.0));\n\t\tglm::vec2 F(glm::ivec2(2));\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec2 const O(1.0f, 2.0f);\n\n\t\tglm::vec2 const A(R);\n\t\tglm::vec2 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const C(R, S);\n\t\tError += glm::all(glm::equal(C, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const D(R, 2.0f);\n\t\tError += glm::all(glm::equal(D, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const E(1.0f, S);\n\t\tError += glm::all(glm::equal(E, O, 0.0001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec2 const O(1.0, 2.0);\n\n\t\tglm::vec2 const A(R);\n\t\tglm::vec2 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const C(R, S);\n\t\tError += glm::all(glm::equal(C, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const D(R, 2.0);\n\t\tError += glm::all(glm::equal(D, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const E(1.0, S);\n\t\tError += glm::all(glm::equal(E, O, 0.0001f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec2) == sizeof(glm::mediump_vec2) ? 0 : 1;\n\tError += 8 == sizeof(glm::mediump_vec2) ? 0 : 1;\n\tError += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += 16 == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += glm::vec2().length() == 2 ? 0 : 1;\n\tError += glm::dvec2().length() == 2 ? 0 : 1;\n\tError += glm::vec2::length() == 2 ? 0 : 1;\n\tError += glm::dvec2::length() == 2 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec2::length();\n\tError += Length == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec2 v0(1);\n\tglm::ivec2 v1(v0);\n\tglm::ivec2 v2(v0);\n\tglm::ivec2 v3 = ++v1;\n\tglm::ivec2 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec2::length() == 2, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec2 A = glm::vec2(1.0f, 2.0f);\n\t\tglm::vec2 B = A.xy;\n\t\tglm::vec2 C(A.xy);\n\t\tglm::vec2 D(A.xy());\n\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, 0.0001f)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec2 A = glm::vec2(1.0f, 2.0f);\n\t\tglm::vec2 B = A.xy();\n\t\tglm::vec2 C(A.xy());\n\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_ctor();\n\tError += test_operators();\n\tError += test_operator_increment();\n\tError += test_swizzle();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_vec3.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/geometric.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <vector>\n\nstatic glm::vec3 g1;\nstatic glm::vec3 g2(1);\nstatic glm::vec3 g3(1, 1, 1);\n\nint test_vec3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec3>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec3>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec3>::value ? 0 : 1;\n#\tendif\n\n#\tif GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec3 a{ 0, 1, 2 };\n\t\tstd::vector<glm::vec3> v = {\n\t\t\t{0, 1, 2},\n\t\t\t{4, 5, 6},\n\t\t\t{8, 9, 0}};\n\t}\n\n\t{\n\t\tglm::dvec3 a{ 0, 1, 2 };\n\t\tstd::vector<glm::dvec3> v = {\n\t\t\t{0, 1, 2},\n\t\t\t{4, 5, 6},\n\t\t\t{8, 9, 0}};\n\t}\n#\tendif\n\n\t{\n\t\tglm::ivec3 A(1);\n\t\tglm::ivec3 B(1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tstd::vector<glm::ivec3> Tests;\n\t\tTests.push_back(glm::ivec3(glm::ivec2(1, 2), 3));\n\t\tTests.push_back(glm::ivec3(1, glm::ivec2(2, 3)));\n\t\tTests.push_back(glm::ivec3(1, 2, 3));\n\t\tTests.push_back(glm::ivec3(glm::ivec4(1, 2, 3, 4)));\n\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec3(1, 2, 3) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec1 const T(3.0f);\n\t\tglm::vec3 const O(1.0f, 2.0f, 3.0f);\n\n\t\tglm::vec3 const A(R);\n\t\tglm::vec3 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const C(R, S, T);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D(R, 2.0f, 3.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E(1.0f, S, 3.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F(1.0f, S, T);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G(R, 2.0f, T);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H(R, S, 3.0f);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec1 const T(3.0);\n\t\tglm::vec3 const O(1.0f, 2.0f, 3.0f);\n\n\t\tglm::vec3 const A(R);\n\t\tglm::vec3 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const C(R, S, T);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D(R, 2.0, 3.0);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E(1.0f, S, 3.0);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F(1.0, S, T);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G(R, 2.0, T);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H(R, S, 3.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nfloat foo()\n{\n\tglm::vec3 bar = glm::vec3(0.0f, 1.0f, 1.0f);\n\n\treturn glm::length(bar);\n}\n\nstatic int test_bvec3_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec3 const A(true);\n\tglm::bvec3 const B(true);\n\tglm::bvec3 const C(false);\n\tglm::bvec3 const D = A && B;\n\tglm::bvec3 const E = A && C;\n\tglm::bvec3 const F = A || C;\n\n\tError += D == glm::bvec3(true) ? 0 : 1;\n\tError += E == glm::bvec3(false) ? 0 : 1;\n\tError += F == glm::bvec3(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec3_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec3 A(1);\n\t\tglm::ivec3 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 const B(4.0f, 5.0f, 6.0f);\n\n\t\tglm::vec3 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec3(5, 7, 9), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec3(3, 3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec3(4, 10, 18), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec3(4, 2.5, 2), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec3(2, 3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec3(3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec3(2, 4, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec3(2, 2.5, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec3(2, 3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec3(-3, -4, -5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec3(2, 4, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec3(0.5, 2.0 / 5.0, 2.0 / 6.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec3(5, 7, 9) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec3(6, 8, 10) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec3(3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec3(2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec3(4, 10, 18) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec3(8, 20, 36) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 4.0f, 6.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec3(4, 2, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec3(2, 1, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec3(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = -A;\n\t\tError += B == glm::ivec3(-1.0f, -2.0f, -3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = --A;\n\t\tError += B == glm::ivec3(0.0f, 1.0f, 2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = A--;\n\t\tError += B == glm::ivec3(1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t\tError += A == glm::ivec3(0.0f, 1.0f, 2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = ++A;\n\t\tError += B == glm::ivec3(2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = A++;\n\t\tError += B == glm::ivec3(1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t\tError += A == glm::ivec3(2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_vec3_size()\n{\n\tint Error = 0;\n\t\n\tError += sizeof(glm::vec3) == sizeof(glm::lowp_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::mediump_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;\n\tError += 12 == sizeof(glm::mediump_vec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::lowp_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::mediump_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += 24 == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += glm::vec3().length() == 3 ? 0 : 1;\n\tError += glm::dvec3().length() == 3 ? 0 : 1;\n\tError += glm::vec3::length() == 3 ? 0 : 1;\n\tError += glm::dvec3::length() == 3 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec3::length();\n\tError += Length == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_vec3_swizzle3_2()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tglm::ivec2 u;\n\n\t\t// Can not assign a vec3 swizzle to a vec2\n\t\t//u = v.xyz;    //Illegal\n\t\t//u = v.rgb;    //Illegal\n\t\t//u = v.stp;    //Illegal\n\n\t\tu = v.xx;       Error += (u.x == 1 && u.y == 1) ? 0 : 1;\n\t\tu = v.xy;       Error += (u.x == 1 && u.y == 2) ? 0 : 1;\n\t\tu = v.xz;       Error += (u.x == 1 && u.y == 3) ? 0 : 1;\n\t\tu = v.yx;       Error += (u.x == 2 && u.y == 1) ? 0 : 1;\n\t\tu = v.yy;       Error += (u.x == 2 && u.y == 2) ? 0 : 1;\n\t\tu = v.yz;       Error += (u.x == 2 && u.y == 3) ? 0 : 1;\n\t\tu = v.zx;       Error += (u.x == 3 && u.y == 1) ? 0 : 1;\n\t\tu = v.zy;       Error += (u.x == 3 && u.y == 2) ? 0 : 1;\n\t\tu = v.zz;       Error += (u.x == 3 && u.y == 3) ? 0 : 1;\n\n\t\tu = v.rr;       Error += (u.r == 1 && u.g == 1) ? 0 : 1;\n\t\tu = v.rg;       Error += (u.r == 1 && u.g == 2) ? 0 : 1;\n\t\tu = v.rb;       Error += (u.r == 1 && u.g == 3) ? 0 : 1;\n\t\tu = v.gr;       Error += (u.r == 2 && u.g == 1) ? 0 : 1;\n\t\tu = v.gg;       Error += (u.r == 2 && u.g == 2) ? 0 : 1;\n\t\tu = v.gb;       Error += (u.r == 2 && u.g == 3) ? 0 : 1;\n\t\tu = v.br;       Error += (u.r == 3 && u.g == 1) ? 0 : 1;\n\t\tu = v.bg;       Error += (u.r == 3 && u.g == 2) ? 0 : 1;\n\t\tu = v.bb;       Error += (u.r == 3 && u.g == 3) ? 0 : 1;\n\n\t\tu = v.ss;       Error += (u.s == 1 && u.t == 1) ? 0 : 1;\n\t\tu = v.st;       Error += (u.s == 1 && u.t == 2) ? 0 : 1;\n\t\tu = v.sp;       Error += (u.s == 1 && u.t == 3) ? 0 : 1;\n\t\tu = v.ts;       Error += (u.s == 2 && u.t == 1) ? 0 : 1;\n\t\tu = v.tt;       Error += (u.s == 2 && u.t == 2) ? 0 : 1;\n\t\tu = v.tp;       Error += (u.s == 2 && u.t == 3) ? 0 : 1;\n\t\tu = v.ps;       Error += (u.s == 3 && u.t == 1) ? 0 : 1;\n\t\tu = v.pt;       Error += (u.s == 3 && u.t == 2) ? 0 : 1;\n\t\tu = v.pp;       Error += (u.s == 3 && u.t == 3) ? 0 : 1;\n\t\t// Mixed member aliases are not valid\n\t\t//u = v.rx;     //Illegal\n\t\t//u = v.sy;     //Illegal\n\n\t\tu = glm::ivec2(1, 2);\n\t\tv = glm::ivec3(1, 2, 3);\n\t\t//v.xx = u;     //Illegal\n\t\tv.xy = u;       Error += (v.x == 1 && v.y == 2 && v.z == 3) ? 0 : 1;\n\t\tv.xz = u;       Error += (v.x == 1 && v.y == 2 && v.z == 2) ? 0 : 1;\n\t\tv.yx = u;       Error += (v.x == 2 && v.y == 1 && v.z == 2) ? 0 : 1;\n\t\t//v.yy = u;     //Illegal\n\t\tv.yz = u;       Error += (v.x == 2 && v.y == 1 && v.z == 2) ? 0 : 1;\n\t\tv.zx = u;       Error += (v.x == 2 && v.y == 1 && v.z == 1) ? 0 : 1;\n\t\tv.zy = u;       Error += (v.x == 2 && v.y == 2 && v.z == 1) ? 0 : 1;\n\t\t//v.zz = u;     //Illegal\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nint test_vec3_swizzle3_3()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tglm::ivec3 u;\n\n\t\tu = v;          Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\n\t\tu = v.xyz;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.zyx;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.zyx = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\n\t\tu = v.rgb;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.bgr;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.bgr = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\n\t\tu = v.stp;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.pts;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.pts = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_operators()\n{\n\tint Error = 0;\n\n\tglm::ivec3 const u = glm::ivec3(1, 2, 3);\n\tglm::ivec3 const v = glm::ivec3(10, 20, 30);\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 q;\n\n\t\t// Swizzle, swizzle binary operators\n\t\tq = u.xyz + v.xyz;          Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.zyx + v.zyx).zyx;    Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.xyz - v.xyz);        Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u.xyz * v.xyz);        Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u.xxx * v.xxx);        Error += (q == glm::ivec3(u.x * v.x)) ? 0 : 1;\n\t\tq = (u.xyz / v.xyz);        Error += (q == (u / v)) ? 0 : 1;\n\n\t\t// vec, swizzle binary operators\n\t\tq = u + v.xyz;              Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u - v.xyz);            Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u * v.xyz);            Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u * v.xxx);            Error += (q == v.x * u) ? 0 : 1;\n\t\tq = (u / v.xyz);            Error += (q == (u / v)) ? 0 : 1;\n\n\t\t// swizzle,vec binary operators\n\t\tq = u.xyz + v;              Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.xyz - v);            Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u.xyz * v);            Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u.xxx * v);            Error += (q == u.x * v) ? 0 : 1;\n\t\tq = (u.xyz / v);            Error += (q == (u / v)) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG\n\n\t// Compile errors\n\t//q = (u.yz * v.xyz);\n\t//q = (u * v.xy);\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_functions()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\t// NOTE: template functions cannot pick up the implicit conversion from\n\t\t// a swizzle to the unswizzled type, therefore the operator() must be \n\t\t// used.  E.g.:\n\t\t//\n\t\t// glm::dot(u.xy, v.xy);        <--- Compile error\n\t\t// glm::dot(u.xy(), v.xy());    <--- Compiles correctly\n\n\t\tfloat r;\n\n\t\t// vec2\n\t\tglm::vec2 a(1, 2);\n\t\tglm::vec2 b(10, 20);\n\t\tr = glm::dot(a, b);                 Error += (int(r) == 50) ? 0 : 1;\n\t\tr = glm::dot(glm::vec2(a.xy()), glm::vec2(b.xy()));       Error += (int(r) == 50) ? 0 : 1;\n\t\tr = glm::dot(glm::vec2(a.xy()), glm::vec2(b.yy()));       Error += (int(r) == 60) ? 0 : 1;\n\n\t\t// vec3\n\t\tglm::vec3 u = glm::vec3(1, 2, 3);\n\t\tglm::vec3 v = glm::vec3(10, 20, 30);\n\t\tr = glm::dot(u, v);                 Error += (int(r) == 140) ? 0 : 1;\n\t\tr = glm::dot(u.xyz(), v.zyz());     Error += (int(r) == 160) ? 0 : 1;\n\t\tr = glm::dot(u, v.zyx());           Error += (int(r) == 100) ? 0 : 1;\n\t\tr = glm::dot(u.xyz(), v);           Error += (int(r) == 140) ? 0 : 1;\n\t\tr = glm::dot(u.xy(), v.xy());       Error += (int(r) == 50) ? 0 : 1;\n\n\t\t// vec4\n\t\tglm::vec4 s = glm::vec4(1, 2, 3, 4);\n\t\tglm::vec4 t = glm::vec4(10, 20, 30, 40);\n\t\tr = glm::dot(s, t);                 Error += (int(r) == 300) ? 0 : 1;\n\t\tr = glm::dot(s.xyzw(), t.xyzw());   Error += (int(r) == 300) ? 0 : 1;\n\t\tr = glm::dot(s.xyz(), t.xyz());     Error += (int(r) == 140) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_partial()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 B(A.xy, 3);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(1, A.yz);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(A.xyz);\n\t\tError += A == B ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec3 v0(1);\n\tglm::ivec3 v1(v0);\n\tglm::ivec3 v2(v0);\n\tglm::ivec3 v3 = ++v1;\n\tglm::ivec3 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec3 A = glm::vec3(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 B = A.xyz;\n\t\tglm::vec3 C(A.xyz);\n\t\tglm::vec3 D(A.xyz());\n\t\tglm::vec3 E(A.x, A.yz);\n\t\tglm::vec3 F(A.x, A.yz());\n\t\tglm::vec3 G(A.xy, A.z);\n\t\tglm::vec3 H(A.xy(), A.z);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec3 A = glm::vec3(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 B = A.xyz();\n\t\tglm::vec3 C(A.xyz());\n\t\tglm::vec3 D(A.xyz());\n\t\tglm::vec3 E(A.x, A.yz());\n\t\tglm::vec3 F(A.x, A.yz());\n\t\tglm::vec3 G(A.xy(), A.z);\n\t\tglm::vec3 H(A.xy(), A.z);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec3::length() == 3, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec3_ctor();\n\tError += test_bvec3_ctor();\n\tError += test_vec3_operators();\n\tError += test_vec3_size();\n\tError += test_operator_increment();\n\tError += test_constexpr();\n\n\tError += test_swizzle();\n\tError += test_vec3_swizzle3_2();\n\tError += test_vec3_swizzle3_3();\n\tError += test_vec3_swizzle_partial();\n\tError += test_vec3_swizzle_operators();\n\tError += test_vec3_swizzle_functions();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/core/core_type_vec4.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <cstdio>\n#include <ctime>\n#include <vector>\n\nstatic glm::vec4 g1;\nstatic glm::vec4 g2(1);\nstatic glm::vec4 g3(1, 1, 1, 1);\n\ntemplate <int Value>\nstruct mask\n{\n\tenum{value = Value};\n};\n\nenum comp\n{\n\tX,\n\tY,\n\tZ,\n\tW\n};\n\n//template<comp X, comp Y, comp Z, comp W>\n//__m128 swizzle(glm::vec4 const& v)\n//{\n//\t__m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x);\n//\treturn _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value);\n//}\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B(A);\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::vec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n\n\t{\n\t\tglm::dvec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::dvec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n#endif\n\n\t{\n\t\tglm::ivec4 const A(1);\n\t\tglm::ivec4 const B(1, 1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\t\n\t{\n\t\tstd::vector<glm::ivec4> Tests;\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), 3, 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec2(2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, 2, glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec3(1, 2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec3(2, 3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(1, 2, 3, 4));\n\t\tTests.push_back(glm::ivec4(glm::ivec4(1, 2, 3, 4)));\n\t\t\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec4(1, 2, 3, 4) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec1 const T(3.0f);\n\t\tglm::vec1 const U(4.0f);\n\t\tglm::vec4 const O(1.0f, 2.0f, 3.0f, 4.0f);\n\n\t\tglm::vec4 const A(R);\n\t\tglm::vec4 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(R, S, T, U);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(R, 2.0f, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0f, S, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(R, S, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(1.0f, 2.0f, T, 4.0f);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(R, 2.0f, T, 4.0f);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I(1.0f, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(I, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J(R, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(J, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K(R, 2.0f, 3.0f, U);\n\t\tError += glm::all(glm::equal(K, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L(1.0f, S, 3.0f, U);\n\t\tError += glm::all(glm::equal(L, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M(R, S, 3.0f, U);\n\t\tError += glm::all(glm::equal(M, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N(1.0f, 2.0f, T, U);\n\t\tError += glm::all(glm::equal(N, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const P(R, 2.0f, T, U);\n\t\tError += glm::all(glm::equal(P, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const Q(1.0f, S, T, U);\n\t\tError += glm::all(glm::equal(Q, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const V(R, S, T, U);\n\t\tError += glm::all(glm::equal(V, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec1 const T(3.0);\n\t\tglm::dvec1 const U(4.0);\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(R);\n\t\tglm::vec4 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(R, S, T, U);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(R, 2.0f, 3.0, 4.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0, S, 3.0f, 4.0);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(R, S, 3.0, 4.0f);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(1.0f, 2.0, T, 4.0);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(R, 2.0, T, 4.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I(1.0, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(I, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J(R, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(J, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K(R, 2.0f, 3.0, U);\n\t\tError += glm::all(glm::equal(K, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L(1.0f, S, 3.0, U);\n\t\tError += glm::all(glm::equal(L, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M(R, S, 3.0, U);\n\t\tError += glm::all(glm::equal(M, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N(1.0f, 2.0, T, U);\n\t\tError += glm::all(glm::equal(N, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const P(R, 2.0, T, U);\n\t\tError += glm::all(glm::equal(P, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const Q(1.0f, S, T, U);\n\t\tError += glm::all(glm::equal(Q, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const V(R, S, T, U);\n\t\tError += glm::all(glm::equal(V, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const v1_0(1.0f);\n\t\tglm::vec1 const v1_1(2.0f);\n\t\tglm::vec1 const v1_2(3.0f);\n\t\tglm::vec1 const v1_3(4.0f);\n\n\t\tglm::vec2 const v2_0(1.0f, 2.0f);\n\t\tglm::vec2 const v2_1(2.0f, 3.0f);\n\t\tglm::vec2 const v2_2(3.0f, 4.0f);\n\n\t\tglm::vec3 const v3_0(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 const v3_1(2.0f, 3.0f, 4.0f);\n\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(v1_0, v1_1, v2_2);\n\t\tError += glm::all(glm::equal(A, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const B(1.0f, 2.0f, v2_2);\n\t\tError += glm::all(glm::equal(B, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(v1_0, 2.0f, v2_2);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(1.0f, v1_1, v2_2);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(v2_0, v1_2, v1_3);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(v2_0, 3.0, v1_3);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(v2_0, v1_2, 4.0);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(v2_0, 3.0f, 4.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const v1_0(1.0f);\n\t\tglm::vec1 const v1_1(2.0f);\n\t\tglm::vec1 const v1_2(3.0f);\n\t\tglm::vec1 const v1_3(4.0f);\n\n\t\tglm::vec2 const v2(2.0f, 3.0f);\n\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(v1_0, v2, v1_3);\n\t\tError += glm::all(glm::equal(A, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const B(v1_0, v2, 4.0);\n\t\tError += glm::all(glm::equal(B, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(1.0, v2, v1_3);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(1.0f, v2, 4.0);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0, v2, 4.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_bvec4_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec4 const A(true);\n\tglm::bvec4 const B(true);\n\tglm::bvec4 const C(false);\n\tglm::bvec4 const D = A && B;\n\tglm::bvec4 const E = A && C;\n\tglm::bvec4 const F = A || C;\n\n\tError += D == glm::bvec4(true) ? 0 : 1;\n\tError += E == glm::bvec4(false) ? 0 : 1;\n\tError += F == glm::bvec4(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 const B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tglm::vec4 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec4(5, 7, 9, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec4(3, 3, 3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec4(4, 10, 18, 28), glm::epsilon<float>()) )? 0 : 1;\n\n\t\tglm::vec4 const F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec4(4, 2.5, 2, 7.0f / 4.0f), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec4(2, 3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec4(3, 4, 5, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec4(2, 4, 6, 8), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec4(2, 2.5, 3, 3.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec4(2, 3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec4(-3, -4, -5, -6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec4(2, 4, 6, 8), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec4(5, 7, 9, 11) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec4(6, 8, 10, 12) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec4(3, 3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec4(4, 10, 18, 28) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec4(8, 20, 36, 56) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 2.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 4.0f, 8.0f, 8.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec4(4, 2, 4, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec4(2, 1, 2, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec4(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = -A;\n\t\tError += B == glm::ivec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = --A;\n\t\tError += B == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A--;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = ++A;\n\t\tError += B == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A++;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::uvec4 const A(1, 2, 3, 4);\n\t\tglm::uvec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\tError += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\tError += glm::vec4::length() == 4 ? 0 : 1;\n\tError += glm::dvec4::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle_partial()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1, 2, 3, 4);\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec4 B(A.xy, A.zw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(A.xy, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, A.yz, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, 2.0f, A.zw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 B(A.xyz, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, A.yzw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec4 A = glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw;\n\t\tglm::ivec4 C(A.xyzw);\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw);\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz, A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy, A.zw);\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw);\n\t\tglm::ivec4 L(A.x, A.yz, A.w);\n\t\tglm::ivec4 M(A.xy, A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 B = A.xyzw();\n\t\tglm::vec4 C(A.xyzw());\n\t\tglm::vec4 D(A.xyzw());\n\t\tglm::vec4 E(A.x, A.yzw());\n\t\tglm::vec4 F(A.x, A.yzw());\n\t\tglm::vec4 G(A.xyz(), A.w);\n\t\tglm::vec4 H(A.xyz(), A.w);\n\t\tglm::vec4 I(A.xy(), A.zw());\n\t\tglm::vec4 J(A.xy(), A.zw());\n\t\tglm::vec4 K(A.x, A.y, A.zw());\n\t\tglm::vec4 L(A.x, A.yz(), A.w);\n\t\tglm::vec4 M(A.xy(), A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec4 v0(1);\n\tglm::ivec4 v1(v0);\n\tglm::ivec4 v2(v0);\n\tglm::ivec4 v3 = ++v1;\n\tglm::ivec4 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstruct AoS\n{\n\tglm::vec4 A;\n\tglm::vec3 B;\n\tglm::vec3 C;\n\tglm::vec2 D;\n};\n\nstatic int test_perf_AoS(std::size_t Size)\n{\n\tint Error = 0;\n\n\tstd::vector<AoS> In;\n\tstd::vector<AoS> Out;\n\tIn.resize(Size);\n\tOut.resize(Size);\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < In.size(); ++i)\n\t\tOut[i] = In[i];\n\n\tstd::clock_t EndTime = std::clock();\n\n\tstd::printf(\"AoS: %d\\n\", static_cast<int>(EndTime - StartTime));\n\n\treturn Error;\n}\n\nstatic int test_perf_SoA(std::size_t Size)\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> InA;\n\tstd::vector<glm::vec3> InB;\n\tstd::vector<glm::vec3> InC;\n\tstd::vector<glm::vec2> InD;\n\tstd::vector<glm::vec4> OutA;\n\tstd::vector<glm::vec3> OutB;\n\tstd::vector<glm::vec3> OutC;\n\tstd::vector<glm::vec2> OutD;\n\n\tInA.resize(Size);\n\tInB.resize(Size);\n\tInC.resize(Size);\n\tInD.resize(Size);\n\tOutA.resize(Size);\n\tOutB.resize(Size);\n\tOutC.resize(Size);\n\tOutD.resize(Size);\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < InA.size(); ++i)\n\t{\n\t\tOutA[i] = InA[i];\n\t\tOutB[i] = InB[i];\n\t\tOutC[i] = InC[i];\n\t\tOutD[i] = InD[i];\n\t}\n\n\tstd::clock_t EndTime = std::clock();\n\n\tstd::printf(\"SoA: %d\\n\", static_cast<int>(EndTime - StartTime));\n\n\treturn Error;\n}\n\nnamespace heap\n{\n\tstruct A\n\t{\n\t\tfloat f;\n\t};\n\n\tstruct B : public A\n\t{\n\t\tfloat g;\n\t\tglm::vec4 v;\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tA* p = new B;\n\t\tp->f = 0.0f;\n\t\tdelete p;\n\n\t\tError += sizeof(B) == sizeof(glm::vec4) + sizeof(float) * 2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace heap\n\nstatic int test_simd()\n{\n\tint Error = 0;\n\n\tglm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());\n\tglm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());\n\n\tglm::vec4 const c(b * a);\n\tglm::vec4 const d(a + c);\n\n\tError += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_inheritance()\n{\n\tstruct my_vec4 : public glm::vec4\n\t{\n\t\tmy_vec4()\n\t\t\t: glm::vec4(76.f, 75.f, 74.f, 73.f)\n\t\t\t, member(82)\n\t\t{}\n\n\t\tint member;\n\t};\n\n\tint Error = 0;\n\n\tmy_vec4 v;\n\n\tError += v.member == 82 ? 0 : 1;\n\tError += glm::equal(v.x, 76.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.y, 75.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.z, 74.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.w, 73.f, glm::epsilon<float>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec4::length() == 4, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f, -1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f, -1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n/*\nstatic int test_simd_gen()\n{\n\tint Error = 0;\n\n\tint const C = static_cast<int>(std::clock());\n\tint const D = static_cast<int>(std::clock());\n\n\tglm::ivec4 const A(C);\n\tglm::ivec4 const B(D);\n\n\tError += A != B ? 0 : 1;\n\n\treturn Error;\n}\n*/\nint main()\n{\n\tint Error = 0;\n\n\t//Error += test_simd_gen();\n\n/*\n\t{\n\t\tglm::ivec4 const a1(2);\n\t\tglm::ivec4 const b1 = a1 >> 1;\n\n\t\t__m128i const e1 = _mm_set1_epi32(2);\n\t\t__m128i const f1 = _mm_srli_epi32(e1, 1);\n\n\t\tglm::ivec4 const g1 = *reinterpret_cast<glm::ivec4 const* const>(&f1);\n\n\t\tglm::ivec4 const a2(-2);\n\t\tglm::ivec4 const b2 = a2 >> 1;\n\n\t\t__m128i const e2 = _mm_set1_epi32(-1);\n\t\t__m128i const f2 = _mm_srli_epi32(e2, 1);\n\n\t\tglm::ivec4 const g2 = *reinterpret_cast<glm::ivec4 const* const>(&f2);\n\n\t\tstd::printf(\"GNI\\n\");\n\t}\n\n\t{\n\t\tglm::uvec4 const a1(2);\n\t\tglm::uvec4 const b1 = a1 >> 1u;\n\n\t\t__m128i const e1 = _mm_set1_epi32(2);\n\t\t__m128i const f1 = _mm_srli_epi32(e1, 1);\n\n\t\tglm::uvec4 const g1 = *reinterpret_cast<glm::uvec4 const* const>(&f1);\n\n\t\tglm::uvec4 const a2(-1);\n\t\tglm::uvec4 const b2 = a2 >> 1u;\n\n\t\t__m128i const e2 = _mm_set1_epi32(-1);\n\t\t__m128i const f2 = _mm_srli_epi32(e2, 1);\n\n\t\tglm::uvec4 const g2 = *reinterpret_cast<glm::uvec4 const* const>(&f2);\n\n\t\tstd::printf(\"GNI\\n\");\n\t}\n*/\n\n#\tifdef NDEBUG\n\tstd::size_t const Size(1000000);\n#\telse\n\tstd::size_t const Size(1);\n#\tendif//NDEBUG\n\n\tError += test_perf_AoS(Size);\n\tError += test_perf_SoA(Size);\n\n\tError += test_vec4_ctor();\n\tError += test_bvec4_ctor();\n\tError += test_size();\n\tError += test_operators();\n\tError += test_equal();\n\tError += test_swizzle();\n\tError += test_swizzle_partial();\n\tError += test_simd();\n\tError += test_operator_increment();\n\tError += heap::test();\n\tError += test_inheritance();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/CMakeLists.txt",
    "content": "glmCreateTestGTC(ext_matrix_relational)\nglmCreateTestGTC(ext_matrix_transform)\nglmCreateTestGTC(ext_matrix_common)\nglmCreateTestGTC(ext_matrix_integer)\nglmCreateTestGTC(ext_matrix_int2x2_sized)\nglmCreateTestGTC(ext_matrix_int2x3_sized)\nglmCreateTestGTC(ext_matrix_int2x4_sized)\nglmCreateTestGTC(ext_matrix_int3x2_sized)\nglmCreateTestGTC(ext_matrix_int3x3_sized)\nglmCreateTestGTC(ext_matrix_int3x4_sized)\nglmCreateTestGTC(ext_matrix_int4x2_sized)\nglmCreateTestGTC(ext_matrix_int4x3_sized)\nglmCreateTestGTC(ext_matrix_int4x4_sized)\nglmCreateTestGTC(ext_matrix_uint2x2_sized)\nglmCreateTestGTC(ext_matrix_uint2x3_sized)\nglmCreateTestGTC(ext_matrix_uint2x4_sized)\nglmCreateTestGTC(ext_matrix_uint3x2_sized)\nglmCreateTestGTC(ext_matrix_uint3x3_sized)\nglmCreateTestGTC(ext_matrix_uint3x4_sized)\nglmCreateTestGTC(ext_matrix_uint4x2_sized)\nglmCreateTestGTC(ext_matrix_uint4x3_sized)\nglmCreateTestGTC(ext_matrix_uint4x4_sized)\nglmCreateTestGTC(ext_quaternion_common)\nglmCreateTestGTC(ext_quaternion_exponential)\nglmCreateTestGTC(ext_quaternion_geometric)\nglmCreateTestGTC(ext_quaternion_relational)\nglmCreateTestGTC(ext_quaternion_transform)\nglmCreateTestGTC(ext_quaternion_trigonometric)\nglmCreateTestGTC(ext_quaternion_type)\nglmCreateTestGTC(ext_scalar_common)\nglmCreateTestGTC(ext_scalar_constants)\nglmCreateTestGTC(ext_scalar_int_sized)\nglmCreateTestGTC(ext_scalar_uint_sized)\nglmCreateTestGTC(ext_scalar_integer)\nglmCreateTestGTC(ext_scalar_ulp)\nglmCreateTestGTC(ext_scalar_reciprocal)\nglmCreateTestGTC(ext_scalar_relational)\nglmCreateTestGTC(ext_vec1)\nglmCreateTestGTC(ext_vector_bool1)\nglmCreateTestGTC(ext_vector_common)\nglmCreateTestGTC(ext_vector_iec559)\nglmCreateTestGTC(ext_vector_int1_sized)\nglmCreateTestGTC(ext_vector_int2_sized)\nglmCreateTestGTC(ext_vector_int3_sized)\nglmCreateTestGTC(ext_vector_int4_sized)\nglmCreateTestGTC(ext_vector_integer)\nglmCreateTestGTC(ext_vector_integer_sized)\nglmCreateTestGTC(ext_vector_uint1_sized)\nglmCreateTestGTC(ext_vector_uint2_sized)\nglmCreateTestGTC(ext_vector_uint3_sized)\nglmCreateTestGTC(ext_vector_uint4_sized)\nglmCreateTestGTC(ext_vector_reciprocal)\nglmCreateTestGTC(ext_vector_relational)\nglmCreateTestGTC(ext_vector_ulp)\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_clip_space.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_common.cpp",
    "content": "#include <glm/ext/matrix_common.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/matrix_float4x3.hpp>\n\nstatic int test_mix()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4 A(2);\n\t\tglm::mat4 B(4);\n\t\tglm::mat4 C = glm::mix(A, B, 0.5f);\n\t\tglm::bvec4 const D = glm::equal(C, glm::mat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4 A(2);\n\t\tglm::mat4 B(4);\n\t\tglm::mat4 C = glm::mix(A, B, 0.5);\n\t\tglm::bvec4 const D = glm::equal(C, glm::mat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dmat4 A(2);\n\t\tglm::dmat4 B(4);\n\t\tglm::dmat4 C = glm::mix(A, B, 0.5);\n\t\tglm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dmat4 A(2);\n\t\tglm::dmat4 B(4);\n\t\tglm::dmat4 C = glm::mix(A, B, 0.5f);\n\t\tglm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_abs()\n{\n\tint Error = 0;\n\n\t// -------------------- //\n\t// glm::mat4 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t1.4f, 0.5f, 9.3f, 3.7f,\n\t\t\t6.8f, 8.4f, 4.3f, 3.9f,\n\t\t\t5.6f, 7.2f, 1.1f, 4.4f\n\t\t);\n\t\tglm::mat4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,-1.0,\n\t\t\t 1.0,-1.0,-1.0,-1.0,\n\t\t\t-1.0,-1.0, 1.0, 1.0\n\t\t);\n\t\tglm::mat4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec4 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec4 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t4.9f, 1.4f, 0.5f,\n\t\t\t9.3f, 3.7f, 6.8f,\n\t\t\t8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat4x3 B(\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat4x3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4x3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec3 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec3 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 A(\n\t\t\t3.0f, 1.0f,\n\t\t\t1.4f, 0.5f,\n\t\t\t6.8f, 8.4f,\n\t\t\t5.6f, 7.2f\n\t\t);\n\t\tglm::mat4x2 B(\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0, 1.0,\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat4x2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4x2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec2 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec2 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\n\t// -------------------- //\n\t// glm::mat3 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat3x4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t1.4f, 0.5f, 9.3f, 3.7f,\n\t\t\t6.8f, 8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat3x4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,-1.0,\n\t\t\t 1.0,-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat3x4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3x4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec4 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t1.4f, 0.5f, 9.3f,\n\t\t\t6.8f, 8.4f, 4.3f\n\t\t);\n\t\tglm::mat3 B(\n\t\t\t1.0,-1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,\n\t\t\t1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec3 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 A(\n\t\t\t5.2f, 4.9f,\n\t\t\t9.3f, 3.7f,\n\t\t\t4.3f, 3.9f\n\t\t);\n\t\tglm::mat3x2 B(\n\t\t\t 1.0, 1.0,\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat3x2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3x2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec2 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\n\t// -------------------- //\n\t// glm::mat2 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat2x4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t5.6f, 7.2f, 1.1f, 4.4f\n\t\t);\n\t\tglm::mat2x4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0,-1.0, 1.0, 1.0\n\t\t);\n\t\tglm::mat2x4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2x4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat2x3 B(\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat2x3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2x3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2 A(\n\t\t\t3.0f, 1.0f,\n\t\t\t5.6f, 7.2f\n\t\t);\n\t\tglm::mat2 B(\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mix();\n\tError += test_abs();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int2x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8mat2x2) == 4, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16mat2x2) == 8, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32mat2x2) == 16, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64mat2x2) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x2) < sizeof(glm::i16mat2x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x2) < sizeof(glm::i32mat2x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x2) < sizeof(glm::i64mat2x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int2x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat2x3) == 6, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat2x3) == 12, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat2x3) == 24, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat2x3) == 48, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x3) < sizeof(glm::i16mat2x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x3) < sizeof(glm::i32mat2x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x3) < sizeof(glm::i64mat2x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int2x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat2x4) == 8, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat2x4) == 16, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat2x4) == 32, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat2x4) == 64, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x4) < sizeof(glm::i16mat2x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x4) < sizeof(glm::i32mat2x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x4) < sizeof(glm::i64mat2x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int3x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x2) == 6, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x2) == 12, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x2) == 24, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x2) == 48, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x2) < sizeof(glm::i16mat3x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x2) < sizeof(glm::i32mat3x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x2) < sizeof(glm::i64mat3x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int3x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x3) == 9, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x3) == 18, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x3) == 36, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x3) == 72, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x3) < sizeof(glm::i16mat3x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x3) < sizeof(glm::i32mat3x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x3) < sizeof(glm::i64mat3x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int3x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x4) == 12, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x4) == 24, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x4) == 48, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x4) == 96, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x4) < sizeof(glm::i16mat3x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x4) < sizeof(glm::i32mat3x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x4) < sizeof(glm::i64mat3x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int4x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x2) == 8, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x2) == 16, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x2) == 32, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x2) == 64, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x2) < sizeof(glm::i16mat4x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x2) < sizeof(glm::i32mat4x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x2) < sizeof(glm::i64mat4x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int4x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x3) == 12, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x3) == 24, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x3) == 48, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x3) == 96, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x3) < sizeof(glm::i16mat4x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x3) < sizeof(glm::i32mat4x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x3) < sizeof(glm::i64mat4x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_int4x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x4) == 16, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x4) == 32, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x4) == 64, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x4) == 128, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x4) < sizeof(glm::i16mat4x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x4) < sizeof(glm::i32mat4x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x4) < sizeof(glm::i64mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_integer.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_integer.hpp>\n#include <glm/ext/matrix_int2x2.hpp>\n#include <glm/ext/matrix_int2x3.hpp>\n#include <glm/ext/matrix_int2x4.hpp>\n#include <glm/ext/matrix_int3x2.hpp>\n#include <glm/ext/matrix_int3x3.hpp>\n#include <glm/ext/matrix_int3x4.hpp>\n#include <glm/ext/matrix_int4x2.hpp>\n#include <glm/ext/matrix_int4x3.hpp>\n#include <glm/ext/matrix_int4x4.hpp>\n\nusing namespace glm;\n\nint test_matrixCompMult()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 m(0, 1, 2, 3);\n\t\timat2 n = matrixCompMult(m, m);\n\t\timat2 expected = imat2(0, 1, 4, 9);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x3 m(0, 1, 2, 3, 4, 5);\n\t\timat2x3 n = matrixCompMult(m, m);\n\t\timat2x3 expected = imat2x3(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat2x4 n = matrixCompMult(m, m);\n\t\timat2x4 expected = imat2x4(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\timat3 n = matrixCompMult(m, m);\n\t\timat3 expected = imat3(0, 1, 4, 9, 16, 25, 36, 49, 64);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x2 m(0, 1, 2, 3, 4, 5);\n\t\timat3x2 n = matrixCompMult(m, m);\n\t\timat3x2 expected = imat3x2(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat3x4 n = matrixCompMult(m, m);\n\t\timat3x4 expected = imat3x4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\timat4 n = matrixCompMult(m, m);\n\t\timat4 expected = imat4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat4x2 n = matrixCompMult(m, m);\n\t\timat4x2 expected = imat4x2(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat4x3 n = matrixCompMult(m, m);\n\t\timat4x3 expected = imat4x3(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_outerProduct()\n{\n\tint Error = 0;\n\n\t{ \n\t\tglm::imat2x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec2(1));\n\t\tError += all(equal(m, glm::imat2x2(1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat2x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec2(1)); \n\t\tError += all(equal(m, glm::imat2x3(1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat2x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec2(1)); \n\t\tError += all(equal(m, glm::imat2x4(1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::imat3x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec3(1));\n\t\tError += all(equal(m, glm::imat3x2(1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat3x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec3(1)); \n\t\tError += all(equal(m, glm::imat3x3(1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{\n\t\tglm::imat3x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec3(1));\n\t\tError += all(equal(m, glm::imat3x4(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n  \n\t{ \n\t\tglm::imat4x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec4(1)); \n\t\tError += all(equal(m, glm::imat4x2(1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat4x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec4(1));\n\t\tError += all(equal(m, glm::imat4x3(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat4x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec4(1)); \n\t\tError += all(equal(m, glm::imat4x4(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_transpose()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 const m(0, 1, 2, 3);\n\t\timat2 const t = transpose(m);\n\t\timat2 const expected = imat2(0, 2, 1, 3);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x3 m(0, 1, 2, 3, 4, 5);\n\t\timat3x2 t = transpose(m);\n\t\timat3x2 const expected = imat3x2(0, 3, 1, 4, 2, 5);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat4x2 t = transpose(m);\n\t\timat4x2 const expected = imat4x2(0, 4, 1, 5, 2, 6, 3, 7);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\timat3 t = transpose(m);\n\t\timat3 const expected = imat3(0, 3, 6, 1, 4, 7, 2, 5, 8);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x2 m(0, 1, 2, 3, 4, 5);\n\t\timat2x3 t = transpose(m);\n\t\timat2x3 const expected = imat2x3(0, 2, 4, 1, 3, 5);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat4x3 t = transpose(m);\n\t\timat4x3 const expected = imat4x3(0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\timat4 t = transpose(m);\n\t\timat4 const expected = imat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat2x4 t = transpose(m);\n\t\timat2x4 const expected = imat2x4(0, 2, 4, 6, 1, 3, 5, 7);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat3x4 t = transpose(m);\n\t\timat3x4 const expected = imat3x4(0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_determinant()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 const m(1, 1, 1, 1);\n\t\tint const t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(1, 1, 1, 1, 1, 1, 1, 1, 1);\n\t\tint t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\n\t\tint t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_matrixCompMult();\n\tError += test_outerProduct();\n\tError += test_transpose();\n\tError += test_determinant();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_projection.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_projection.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_relational.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_double2x3.hpp>\n#include <glm/ext/matrix_double2x4.hpp>\n#include <glm/ext/matrix_double3x2.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_double3x4.hpp>\n#include <glm/ext/matrix_double4x2.hpp>\n#include <glm/ext/matrix_double4x3.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_float2x3.hpp>\n#include <glm/ext/matrix_float2x4.hpp>\n#include <glm/ext/matrix_float3x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_float3x4.hpp>\n#include <glm/ext/matrix_float4x2.hpp>\n#include <glm/ext/matrix_float4x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/scalar_ulp.hpp>\n\ntemplate <typename matType, typename vecType>\nstatic int test_equal()\n{\n\ttypedef typename matType::value_type valType;\n\n\tvalType const Epsilon = static_cast<valType>(0.001f);\n\tvalType const One = static_cast<valType>(1);\n\tvalType const Two = static_cast<valType>(2);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::equal(matType(One), matType(One), Epsilon)) ? 0 : 1;\n\tError += glm::all(glm::equal(matType(One), matType(Two), vecType(Epsilon))) ? 1 : 0;\n\n\treturn Error;\n}\n\ntemplate <typename matType, typename vecType>\nstatic int test_notEqual()\n{\n\ttypedef typename matType::value_type valType;\n\n\tvalType const Epsilon = static_cast<valType>(0.001f);\n\tvalType const One = static_cast<valType>(1);\n\tvalType const Two = static_cast<valType>(2);\n\n\tint Error = 0;\n\n\tError += !glm::any(glm::notEqual(matType(One), matType(One), Epsilon)) ? 0 : 1;\n\tError += !glm::any(glm::notEqual(matType(One), matType(Two), vecType(Epsilon))) ? 1 : 0;\n\n\treturn Error;\n}\n\n\ntemplate <typename T>\nstatic int test_equal_ulps()\n{\n\ttypedef glm::mat<4, 4, T, glm::defaultp> mat4;\n\n\tT const One(1);\n\tmat4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += glm::all(glm::equal(Ones, mat4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::all(glm::equal(Ones, mat4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += glm::all(glm::equal(Ones, mat4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::all(glm::equal(Ones, mat4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_notEqual_ulps()\n{\n\ttypedef glm::mat<4, 4, T, glm::defaultp> mat4;\n\n\tT const One(1);\n\tmat4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, mat4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::all(glm::notEqual(Ones, mat4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, mat4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::all(glm::notEqual(Ones, mat4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_ulps<float>();\n\tError += test_equal_ulps<double>();\n\tError += test_notEqual_ulps<float>();\n\tError += test_notEqual_ulps<double>();\n\n\tError += test_equal<glm::mat2x2, glm::vec2>();\n\tError += test_equal<glm::mat2x3, glm::vec2>();\n\tError += test_equal<glm::mat2x4, glm::vec2>();\n\tError += test_equal<glm::mat3x2, glm::vec3>();\n\tError += test_equal<glm::mat3x3, glm::vec3>();\n\tError += test_equal<glm::mat3x4, glm::vec3>();\n\tError += test_equal<glm::mat4x2, glm::vec4>();\n\tError += test_equal<glm::mat4x3, glm::vec4>();\n\tError += test_equal<glm::mat4x4, glm::vec4>();\n\n\tError += test_equal<glm::dmat2x2, glm::dvec2>();\n\tError += test_equal<glm::dmat2x3, glm::dvec2>();\n\tError += test_equal<glm::dmat2x4, glm::dvec2>();\n\tError += test_equal<glm::dmat3x2, glm::dvec3>();\n\tError += test_equal<glm::dmat3x3, glm::dvec3>();\n\tError += test_equal<glm::dmat3x4, glm::dvec3>();\n\tError += test_equal<glm::dmat4x2, glm::dvec4>();\n\tError += test_equal<glm::dmat4x3, glm::dvec4>();\n\tError += test_equal<glm::dmat4x4, glm::dvec4>();\n\n\tError += test_notEqual<glm::mat2x2, glm::vec2>();\n\tError += test_notEqual<glm::mat2x3, glm::vec2>();\n\tError += test_notEqual<glm::mat2x4, glm::vec2>();\n\tError += test_notEqual<glm::mat3x2, glm::vec3>();\n\tError += test_notEqual<glm::mat3x3, glm::vec3>();\n\tError += test_notEqual<glm::mat3x4, glm::vec3>();\n\tError += test_notEqual<glm::mat4x2, glm::vec4>();\n\tError += test_notEqual<glm::mat4x3, glm::vec4>();\n\tError += test_notEqual<glm::mat4x4, glm::vec4>();\n\n\tError += test_notEqual<glm::dmat2x2, glm::dvec2>();\n\tError += test_notEqual<glm::dmat2x3, glm::dvec2>();\n\tError += test_notEqual<glm::dmat2x4, glm::dvec2>();\n\tError += test_notEqual<glm::dmat3x2, glm::dvec3>();\n\tError += test_notEqual<glm::dmat3x3, glm::dvec3>();\n\tError += test_notEqual<glm::dmat3x4, glm::dvec3>();\n\tError += test_notEqual<glm::dmat4x2, glm::dvec4>();\n\tError += test_notEqual<glm::dmat4x3, glm::dvec4>();\n\tError += test_notEqual<glm::dmat4x4, glm::dvec4>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_transform.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nstatic int test_translate()\n{\n\tint Error = 0;\n\n\tglm::mat4 const M(1.0f);\n\tglm::vec3 const V(1.0f);\n\n\tglm::mat4 const T = glm::translate(M, V);\n\tError += glm::all(glm::equal(T[3], glm::vec4(1.0f), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_scale()\n{\n\tint Error = 0;\n\n\tglm::mat4 const M(1.0f);\n\tglm::vec3 const V(2.0f);\n\n\tglm::mat4 const S = glm::scale(M, V);\n\tglm::mat4 const R = glm::mat4(\n\t\tglm::vec4(2, 0, 0, 0),\n\t\tglm::vec4(0, 2, 0, 0),\n\t\tglm::vec4(0, 0, 2, 0),\n\t\tglm::vec4(0, 0, 0, 1));\n\tError += glm::all(glm::equal(S, R, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_rotate()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f, 0.0f, 0.0f, 1.0f);\n\n\tglm::mat4 const R = glm::rotate(glm::mat4(1.0f), glm::radians(90.f), glm::vec3(0, 0, 1));\n\tglm::vec4 const B = R * A;\n\tError += glm::all(glm::equal(B, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_translate();\n\tError += test_scale();\n\tError += test_rotate();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint2x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::u8mat2x2) == 4, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::u16mat2x2) == 8, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u32mat2x2) == 16, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u64mat2x2) == 32, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x2) < sizeof(glm::u16mat2x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x2) < sizeof(glm::u32mat2x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x2) < sizeof(glm::u64mat2x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint2x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat2x3) == 6, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat2x3) == 12, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat2x3) == 24, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat2x3) == 48, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x3) < sizeof(glm::u16mat2x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x3) < sizeof(glm::u32mat2x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x3) < sizeof(glm::u64mat2x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint2x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat2x4) == 8, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat2x4) == 16, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat2x4) == 32, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat2x4) == 64, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x4) < sizeof(glm::u16mat2x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x4) < sizeof(glm::u32mat2x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x4) < sizeof(glm::u64mat2x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint3x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x2) == 6, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x2) == 12, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x2) == 24, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x2) == 48, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x2) < sizeof(glm::u16mat3x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x2) < sizeof(glm::u32mat3x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x2) < sizeof(glm::u64mat3x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint3x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x3) == 9, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x3) == 18, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x3) == 36, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x3) == 72, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x3) < sizeof(glm::u16mat3x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x3) < sizeof(glm::u32mat3x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x3) < sizeof(glm::u64mat3x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint3x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x4) == 12, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x4) == 24, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x4) == 48, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x4) == 96, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x4) < sizeof(glm::u16mat3x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x4) < sizeof(glm::u32mat3x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x4) < sizeof(glm::u64mat3x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint4x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x2) == 8, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x2) == 16, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x2) == 32, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x2) == 64, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x2) < sizeof(glm::u16mat4x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x2) < sizeof(glm::u32mat4x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x2) < sizeof(glm::u64mat4x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint4x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x3) == 12, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x3) == 24, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x3) == 48, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x3) == 96, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x3) < sizeof(glm::u16mat4x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x3) < sizeof(glm::u32mat4x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x3) < sizeof(glm::u64mat4x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_matrix_uint4x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x4) == 16, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x4) == 32, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x4) == 64, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x4) == 128, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x4) < sizeof(glm::u16mat4x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x4) < sizeof(glm::u32mat4x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x4) < sizeof(glm::u64mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_common.cpp",
    "content": "#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/quaternion_common.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nstatic int test_conjugate()\n{\n\tint Error = 0;\n\n\tglm::quat const A(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\tglm::quat const C = glm::conjugate(A);\n\tError += glm::any(glm::notEqual(A, C, glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::quat const B = glm::conjugate(C);\n\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mix()\n{\n\tint Error = 0;\n\n\tglm::quat const Q1(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));\n\tglm::quat const Q2(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\n\t{\n\t\tglm::quat const Q3 = glm::mix(Q1, Q2, 0.5f);\n\t\tfloat const F3 = glm::degrees(glm::angle(Q3));\n\t\tError += glm::equal(F3, 45.0f, 0.001f) ? 0 : 1;\n\n\t\tglm::quat const Q4 = glm::mix(Q2, Q1, 0.5f);\n\t\tfloat const F4 = glm::degrees(glm::angle(Q4));\n\t\tError += glm::equal(F4, 45.0f, 0.001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q3 = glm::slerp(Q1, Q2, 0.5f);\n\t\tfloat const F3 = glm::degrees(glm::angle(Q3));\n\t\tError += glm::equal(F3, 45.0f, 0.001f) ? 0 : 1;\n\n\t\tglm::quat const Q4 = glm::slerp(Q2, Q1, 0.5f);\n\t\tfloat const F4 = glm::degrees(glm::angle(Q4));\n\t\tError += glm::equal(F4, 45.0f, 0.001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_conjugate();\n\tError += test_mix();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_exponential.cpp",
    "content": "#include <glm/ext/quaternion_exponential.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\ntemplate <typename quaType, typename vecType>\nint test_log()\n{\n\ttypedef typename quaType::value_type T;\n\t\n\tT const Epsilon = static_cast<T>(0.001f);\n\t\n\tint Error = 0;\n\t\n\tquaType const Q(vecType(1, 0, 0), vecType(0, 1, 0));\n\tquaType const P = glm::log(Q);\n\tError += glm::any(glm::notEqual(Q, P, Epsilon)) ? 0 : 1;\n\t\n\tquaType const R = glm::exp(P);\n\tError += glm::all(glm::equal(Q, R, Epsilon)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename quaType, typename vecType>\nint test_pow()\n{\n\ttypedef typename quaType::value_type T;\n\t\n\tT const Epsilon = static_cast<T>(0.001f);\n\t\n\tint Error = 0;\n\t\n\tquaType const Q(vecType(1, 0, 0), vecType(0, 1, 0));\n\t\n\t{\n\t\tT const One = static_cast<T>(1.0f);\n\t\tquaType const P = glm::pow(Q, One);\n\t\tError += glm::all(glm::equal(Q, P, Epsilon)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tT const Two = static_cast<T>(2.0f);\n\t\tquaType const P = glm::pow(Q, Two);\n\t\tquaType const R = Q * Q;\n\t\tError += glm::all(glm::equal(P, R, Epsilon)) ? 0 : 1;\n\n\t\tquaType const U = glm::sqrt(P);\n\t\tError += glm::all(glm::equal(Q, U, Epsilon)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_log<glm::quat, glm::vec3>();\n\tError += test_log<glm::lowp_quat, glm::lowp_vec3>();\n\tError += test_log<glm::mediump_quat, glm::mediump_vec3>();\n\tError += test_log<glm::highp_quat, glm::highp_vec3>();\n\t\n\tError += test_log<glm::dquat, glm::dvec3>();\n\tError += test_log<glm::lowp_dquat, glm::lowp_dvec3>();\n\tError += test_log<glm::mediump_dquat, glm::mediump_dvec3>();\n\tError += test_log<glm::highp_dquat, glm::highp_dvec3>();\n\n\tError += test_pow<glm::quat, glm::vec3>();\n\tError += test_pow<glm::lowp_quat, glm::lowp_vec3>();\n\tError += test_pow<glm::mediump_quat, glm::mediump_vec3>();\n\tError += test_pow<glm::highp_quat, glm::highp_vec3>();\n\t\n\tError += test_pow<glm::dquat, glm::dvec3>();\n\tError += test_pow<glm::lowp_dquat, glm::lowp_dvec3>();\n\tError += test_pow<glm::mediump_dquat, glm::mediump_dvec3>();\n\tError += test_pow<glm::highp_dquat, glm::highp_dvec3>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_geometric.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_geometric.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nfloat const Epsilon = 0.001f;\n\nstatic int test_length()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(1, 0, 0, 0));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(1, glm::vec3(0)));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0)));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_normalize()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat const N = glm::normalize(A);\n\t\tError += glm::all(glm::equal(A, N, Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const A = glm::quat(1, glm::vec3(0));\n\t\tglm::quat const N = glm::normalize(A);\n\t\tError += glm::all(glm::equal(A, N, Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_dot()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat const B = glm::quat(1, 0, 0, 0);\n\t\tfloat const C = glm::dot(A, B);\n\t\tError += glm::equal(C, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_cross()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_length();\n\tError += test_normalize();\n\tError += test_dot();\n\tError += test_cross();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_relational.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n\ntemplate <typename quaType>\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\tquaType const Q(1, 0, 0, 0);\n\tquaType const P(1, 0, 0, 0);\n\tError += glm::all(glm::equal(Q, P, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename quaType>\nstatic int test_notEqual()\n{\n\tint Error = 0;\n\n\tquaType const Q(1, 0, 0, 0);\n\tquaType const P(1, 0, 0, 0);\n\tError += glm::any(glm::notEqual(Q, P, glm::epsilon<float>())) ? 1 : 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal<glm::quat>();\n\tError += test_equal<glm::lowp_quat>();\n\tError += test_equal<glm::mediump_quat>();\n\tError += test_equal<glm::highp_quat>();\n\n\tError += test_notEqual<glm::quat>();\n\tError += test_notEqual<glm::lowp_quat>();\n\tError += test_notEqual<glm::mediump_quat>();\n\tError += test_notEqual<glm::highp_quat>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_transform.cpp",
    "content": "#include <glm/ext/quaternion_transform.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/quaternion.hpp>\n\nstatic int test_lookAt()\n{\n\tint Error(0);\n\n\tglm::vec3 eye(0.0f);\n\tglm::vec3 center(1.1f, -2.0f, 3.1416f);\n\tglm::vec3 up(-0.17f, 7.23f, -1.744f);\n\n\tglm::quat test_quat = glm::quatLookAt(glm::normalize(center - eye), up);\n\tglm::quat test_mat = glm::conjugate(glm::quat_cast(glm::lookAt(eye, center, up)));\n\n\tError += static_cast<int>(glm::abs(glm::length(test_quat) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quat + (-test_mat)), glm::length(test_quat + test_mat)) > glm::epsilon<float>());\n\n\t// Test left-handed implementation\n\tglm::quat test_quatLH = glm::quatLookAtLH(glm::normalize(center - eye), up);\n\tglm::quat test_matLH = glm::conjugate(glm::quat_cast(glm::lookAtLH(eye, center, up)));\n\tError += static_cast<int>(glm::abs(glm::length(test_quatLH) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quatLH - test_matLH), glm::length(test_quatLH + test_matLH)) > glm::epsilon<float>());\n \n\t// Test right-handed implementation\n\tglm::quat test_quatRH = glm::quatLookAtRH(glm::normalize(center - eye), up);\n\tglm::quat test_matRH = glm::conjugate(glm::quat_cast(glm::lookAtRH(eye, center, up)));\n\tError += static_cast<int>(glm::abs(glm::length(test_quatRH) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quatRH - test_matRH), glm::length(test_quatRH + test_matRH)) > glm::epsilon<float>());\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_lookAt();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_trigonometric.cpp",
    "content": "#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nfloat const Epsilon = 0.001f;\n\nstatic int test_angle()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const Q = glm::quat(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\t\tfloat const A = glm::degrees(glm::angle(Q));\n\t\tError += glm::equal(A, 90.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q = glm::quat(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));\n\t\tfloat const A = glm::degrees(glm::angle(Q));\n\t\tError += glm::equal(A, 90.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q = glm::angleAxis(glm::two_pi<float>() - 1.0f, glm::vec3(1, 0, 0));\n\t\tfloat const A = glm::angle(Q);\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_angle();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_quaternion_type.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <vector>\n\nstatic int test_ctr()\n{\n\tint Error(0);\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::quat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_default_constructible<glm::dquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::quat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::dquat>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::quat>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::dquat>::value ? 0 : 1;\n\n\tError += std::is_copy_constructible<glm::quat>::value ? 0 : 1;\n\tError += std::is_copy_constructible<glm::dquat>::value ? 0 : 1;\n#\tendif\n\n#\tif GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::quat A{0, 1, 2, 3};\n\n\t\tstd::vector<glm::quat> B{\n\t\t\t{0, 1, 2, 3},\n\t\t{0, 1, 2, 3}};\n\t}\n#\tendif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nstatic int test_two_axis_ctr()\n{\n\tint Error = 0;\n\n\tglm::quat const q1(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\tglm::vec3 const v1 = q1 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v1, glm::vec3(0, 1, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q2 = q1 * q1;\n\tglm::vec3 const v2 = q2 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v2, glm::vec3(-1, 0, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q3(glm::vec3(1, 0, 0), glm::vec3(-1, 0, 0));\n\tglm::vec3 const v3 = q3 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v3, glm::vec3(-1, 0, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q4(glm::vec3(0, 1, 0), glm::vec3(0, -1, 0));\n\tglm::vec3 const v4 = q4 * glm::vec3(0, 1, 0);\n\tError += glm::all(glm::equal(v4, glm::vec3(0, -1, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q5(glm::vec3(0, 0, 1), glm::vec3(0, 0, -1));\n\tglm::vec3 const v5 = q5 * glm::vec3(0, 0, 1);\n\tError += glm::all(glm::equal(v5, glm::vec3(0, 0, -1), 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tstd::size_t const A = sizeof(glm::quat);\n\tError += 16 == A ? 0 : 1;\n\tstd::size_t const B = sizeof(glm::dquat);\n\tError += 32 == B ? 0 : 1;\n\tError += glm::quat().length() == 4 ? 0 : 1;\n\tError += glm::dquat().length() == 4 ? 0 : 1;\n\tError += glm::quat::length() == 4 ? 0 : 1;\n\tError += glm::dquat::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_precision()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::lowp_quat) <= sizeof(glm::mediump_quat) ? 0 : 1;\n\tError += sizeof(glm::mediump_quat) <= sizeof(glm::highp_quat) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::quat::length() == 4, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::quat(1.0f, glm::vec3(0.0f)).w > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ctr();\n\tError += test_two_axis_ctr();\n\tError += test_size();\n\tError += test_precision();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_common.cpp",
    "content": "#include <glm/ext/scalar_common.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/common.hpp>\n\n#if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))\n#\tdefine GLM_NAN(T) NAN\n#else\n#\tdefine GLM_NAN(T) (static_cast<T>(0.0f) / static_cast<T>(0.0f))\n#endif\n\ntemplate <typename T>\nstatic int test_min()\n{\n\tint Error = 0;\n\n\tT const N = static_cast<T>(0);\n\tT const B = static_cast<T>(1);\n\tError += glm::equal(glm::min(N, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, N), N, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::min(N, B, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, N, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, N, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, B, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, C, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(N, C, B), N, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::min(D, N, B, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, D, N, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, N, D, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, B, D, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, C, N, D), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(N, C, B, D), N, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_min_nan()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::isnan(glm::min(N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, N)) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::isnan(glm::min(N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, B, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, C, N)) ? 0 : 1;\n\tError += glm::isnan(glm::min(N, C, B)) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += !glm::isnan(glm::min(D, N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, D, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, N, D, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, B, D, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, C, N, D)) ? 0 : 1;\n\tError += glm::isnan(glm::min(N, C, B, D)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_max()\n{\n\tint Error = 0;\n\n\tT const N = static_cast<T>(0);\n\tT const B = static_cast<T>(1);\n\tError += glm::equal(glm::max(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::max(N, B, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, N, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, N, B), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, B, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, C, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(N, C, B), C, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::max(D, N, B, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, D, N, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, N, D, B), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, B, D, N), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, C, N, D), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(N, C, B, D), D, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_max_nan()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::isnan(glm::max(N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, N)) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::isnan(glm::max(N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, B, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, C, N)) ? 0 : 1;\n\tError += glm::isnan(glm::max(N, C, B)) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += !glm::isnan(glm::max(D, N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, D, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, N, D, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, B, D, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, C, N, D)) ? 0 : 1;\n\tError += glm::isnan(glm::max(N, C, B, D)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_fmin()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::equal(glm::fmin(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::fmin(N, B, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, N, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, C, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(N, C, B), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::fmin(D, N, B, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, D, N, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, N, D, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, B, D, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, C, N, D), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(N, C, B, D), B, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_fmax()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::equal(glm::fmax(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::fmax(N, B, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, N, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, N, B), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, B, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, C, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(N, C, B), C, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::fmax(D, N, B, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, D, N, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, N, D, B), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, B, D, N), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, C, N, D), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(N, C, B, D), D, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_clamp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::clamp(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::clamp(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::clamp(1.0f);\n\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::clamp(-0.5f);\n\tError += glm::equal(D, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::clamp(1.5f);\n\tError += glm::equal(E, 1.0f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_repeat()\n{\n\tint Error = 0;\n\n\tfloat A = glm::repeat(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::repeat(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::repeat(1.0f);\n\tError += glm::equal(C, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::repeat(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::repeat(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::repeat(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorClamp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::mirrorClamp(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::mirrorClamp(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::mirrorClamp(1.1f);\n\tError += glm::equal(C, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::mirrorClamp(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::mirrorClamp(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::mirrorClamp(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\tfloat G = glm::mirrorClamp(3.1f);\n\tError += glm::equal(G, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat H = glm::mirrorClamp(-3.1f);\n\tError += glm::equal(H, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat I = glm::mirrorClamp(-0.9f);\n\tError += glm::equal(I, 0.9f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorRepeat()\n{\n\tint Error = 0;\n\n\tfloat A = glm::mirrorRepeat(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::mirrorRepeat(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::mirrorRepeat(1.0f);\n\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::mirrorRepeat(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::mirrorRepeat(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::mirrorRepeat(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\tfloat G = glm::mirrorRepeat(3.0f);\n\tError += glm::equal(G, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat H = glm::mirrorRepeat(-3.0f);\n\tError += glm::equal(H, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat I = glm::mirrorRepeat(-1.0f);\n\tError += glm::equal(I, 1.0f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_iround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_min<float>();\n\tError += test_min<double>();\n\tError += test_min_nan<float>();\n\tError += test_min_nan<double>();\n\n\tError += test_max<float>();\n\tError += test_max<double>();\n\tError += test_max_nan<float>();\n\tError += test_max_nan<double>();\n\n\tError += test_fmin<float>();\n\tError += test_fmin<double>();\n\n\tError += test_fmax<float>();\n\tError += test_fmax<double>();\n\n\tError += test_clamp();\n\tError += test_repeat();\n\tError += test_mirrorClamp();\n\tError += test_mirrorRepeat();\n\n\tError += test_iround();\n\tError += test_uround();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_constants.cpp",
    "content": "#include <glm/ext/scalar_constants.hpp>\n\ntemplate <typename valType>\nstatic int test_epsilon()\n{\n\tint Error = 0;\n\n\tvalType const Test = glm::epsilon<valType>();\n\tError += Test > static_cast<valType>(0) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename valType>\nstatic int test_pi()\n{\n\tint Error = 0;\n\n\tvalType const Test = glm::pi<valType>();\n\tError += Test > static_cast<valType>(3.14) ? 0 : 1;\n\tError += Test < static_cast<valType>(3.15) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_epsilon<float>();\n\tError += test_epsilon<double>();\n\tError += test_pi<float>();\n\tError += test_pi<double>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_int_sized.cpp",
    "content": "#include <glm/ext/scalar_int_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::int8) == 1, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::int16) == 2, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int32) == 4, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int64) == 8, \"int64 size isn't 8 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int16) == sizeof(short), \"signed short size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int32) == sizeof(int), \"signed int size isn't 4 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) == 1 ? 0 : 1;\n\tError += sizeof(glm::int16) == 2 ? 0 : 1;\n\tError += sizeof(glm::int32) == 4 ? 0 : 1;\n\tError += sizeof(glm::int64) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) < sizeof(glm::int16) ? 0 : 1;\n\tError += sizeof(glm::int16) < sizeof(glm::int32) ? 0 : 1;\n\tError += sizeof(glm::int32) < sizeof(glm::int64) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_integer.cpp",
    "content": "#include <glm/ext/scalar_integer.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#include <chrono>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0080, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x0000000f, false},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x80000000, true},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int16();\n\t\tError += test_uint16();\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace nextPowerOfTwo_advanced\n{\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType nextPowerOfTwo_loop(genType value)\n\t{\n\t\treturn glm::isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{-3, -4},\n\t\t\t{-8, -8},\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x08000000, 0x08000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int32>); i < n; ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::nextPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint32> const Data[] =\n\t\t{\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x80000000, 0x80000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint32>); i < n; ++i)\n\t\t{\n\t\t\tglm::uint32 Result = glm::nextPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<glm::uint> v;\n\t\tv.resize(100000000);\n\n\t\tstd::clock_t Timestramp0 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = nextPowerOfTwo_loop(i);\n\n\t\tstd::clock_t Timestramp1 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = glm::nextPowerOfTwo(i);\n\n\t\tstd::clock_t Timestramp2 = std::clock();\n\n\t\tstd::printf(\"nextPowerOfTwo_loop: %d clocks\\n\", static_cast<int>(Timestramp1 - Timestramp0));\n\t\tstd::printf(\"glm::nextPowerOfTwo: %d clocks\\n\", static_cast<int>(Timestramp2 - Timestramp1));\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo_advanced\n\nnamespace prevPowerOfTwo\n{\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tT const A = glm::prevPowerOfTwo(static_cast<T>(7));\n\t\tError += A == static_cast<T>(4) ? 0 : 1;\n\n\t\tT const B = glm::prevPowerOfTwo(static_cast<T>(15));\n\t\tError += B == static_cast<T>(8) ? 0 : 1;\n\n\t\tT const C = glm::prevPowerOfTwo(static_cast<T>(31));\n\t\tError += C == static_cast<T>(16) ? 0 : 1;\n\n\t\tT const D = glm::prevPowerOfTwo(static_cast<T>(32));\n\t\tError += D == static_cast<T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevPowerOfTwo\n\nnamespace nextPowerOfTwo\n{\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tT const A = glm::nextPowerOfTwo(static_cast<T>(7));\n\t\tError += A == static_cast<T>(8) ? 0 : 1;\n\n\t\tT const B = glm::nextPowerOfTwo(static_cast<T>(15));\n\t\tError += B == static_cast<T>(16) ? 0 : 1;\n\n\t\tT const C = glm::nextPowerOfTwo(static_cast<T>(31));\n\t\tError += C == static_cast<T>(32) ? 0 : 1;\n\n\t\tT const D = glm::nextPowerOfTwo(static_cast<T>(32));\n\t\tError += D == static_cast<T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo\n\nnamespace prevMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{8, 3, 6},\n\t\t\t{7, 7, 7}\n\t\t};\n\n\t\tint Error = 0;\n\t\t\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tT const Result = glm::prevMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevMultiple\n\nnamespace nextMultiple\n{\n\tstatic glm::uint const Multiples = 128;\n\n\tint perf_nextMultiple(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = glm::nextMultiple(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- glm::nextMultiple Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor(std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleMod(T Source, T Multiple)\n\t{\n\t\tT const Tmp = Source - static_cast<T>(1);\n\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t}\n\n\tint perf_nextMultipleMod(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t\tfor (glm::uint Source = 0; Source < Samples; ++Source)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleMod(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleMod Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor(std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleNeg(T Source, T Multiple)\n\t{\n\t\tif(Source > static_cast<T>(0))\n\t\t{\n\t\t\tT const Tmp = Source - static_cast<T>(1);\n\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t}\n\t\telse\n\t\t\treturn Source + (-Source % Multiple);\n\t}\n\n\tint perf_nextMultipleNeg(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleNeg(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleNeg Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleUFloat(T Source, T Multiple)\n\t{\n\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t}\n\n\tint perf_nextMultipleUFloat(glm::uint Samples)\n\t{\n\t\tstd::vector<float> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleUFloat(static_cast<float>(Source), static_cast<float>(Multiples));\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleUFloat Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tfloat Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0.0f ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleFloat(T Source, T Multiple)\n\t{\n\t\tif(Source > static_cast<float>(0))\n\t\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t\telse\n\t\t\treturn Source + std::fmod(-Source, Multiple);\n\t}\n\n\tint perf_nextMultipleFloat(glm::uint Samples)\n\t{\n\t\tstd::vector<float> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleFloat(static_cast<float>(Source), static_cast<float>(Multiples));\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleFloat Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tfloat Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0.0f ? 0 : 1;\n\t}\n\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <typename T>\n\tint test_uint()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 3, 4, 4 },\n\t\t\t{ 6, 3, 6 },\n\t\t\t{ 5, 3, 6 },\n\t\t\t{ 7, 7, 7 },\n\t\t\t{ 0, 1, 0 },\n\t\t\t{ 8, 3, 9 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tT const Result0 = glm::nextMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\n\t\t\tT const Result1 = nextMultipleMod(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result1 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::uint const Samples = 10000;\n\n\t\tfor(int i = 0; i < 4; ++i)\n\t\t{\n\t\t\tstd::printf(\"Run %d :\\n\", i);\n\t\t\tError += perf_nextMultiple(Samples);\n\t\t\tError += perf_nextMultipleMod(Samples);\n\t\t\tError += perf_nextMultipleNeg(Samples);\n\t\t\tError += perf_nextMultipleUFloat(Samples);\n\t\t\tError += perf_nextMultipleFloat(Samples);\n\t\t\tstd::printf(\"\\n\");\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_uint<glm::int8>();\n\t\tError += test_uint<glm::int16>();\n\t\tError += test_uint<glm::int32>();\n\t\tError += test_uint<glm::int64>();\n\n\t\tError += test_uint<glm::uint8>();\n\t\tError += test_uint<glm::uint16>();\n\t\tError += test_uint<glm::uint32>();\n\t\tError += test_uint<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextMultiple\n\nnamespace findNSB\n{\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tT Source;\n\t\tint SignificantBitCount;\n\t\tint Return;\n\t};\n\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 0x00, 1,-1 },\n\t\t\t{ 0x01, 2,-1 },\n\t\t\t{ 0x02, 2,-1 },\n\t\t\t{ 0x06, 3,-1 },\n\t\t\t{ 0x01, 1, 0 },\n\t\t\t{ 0x03, 1, 0 },\n\t\t\t{ 0x03, 2, 1 },\n\t\t\t{ 0x07, 2, 1 },\n\t\t\t{ 0x05, 2, 2 },\n\t\t\t{ 0x0D, 2, 2 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tint const Result0 = glm::findNSB(Data[i].Source, Data[i].SignificantBitCount);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\treturn Error;\n\t}\n}//namespace findNSB\n\nint main()\n{\n\tint Error = 0;\n\n\tError += findNSB::test();\n\n\tError += isPowerOfTwo::test();\n\tError += prevPowerOfTwo::test();\n\tError += nextPowerOfTwo::test();\n\tError += nextPowerOfTwo_advanced::test();\n\tError += prevMultiple::test();\n\tError += nextMultiple::test();\n\n#\tifdef NDEBUG\n\t\tError += nextPowerOfTwo_advanced::perf();\n\t\tError += nextMultiple::perf();\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_packing.cpp",
    "content": "#include <glm/ext/scalar_packing.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_reciprocal.cpp",
    "content": "#include <glm/ext/scalar_reciprocal.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\nstatic int test_sec()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::sec(0.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * 2.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * -2.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * 1.0), -1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * -1.0), -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csc()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::csc(glm::pi<double>() * 0.5);\n\tError += glm::equal(a, 1.0, 0.01) ? 0 : 1;\n\tdouble const b = glm::csc(glm::pi<double>() * -0.5);\n\tError += glm::equal(b, -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_cot()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::cot(glm::pi<double>() * 0.5);\n\tError += glm::equal(a, 0.0, 0.01) ? 0 : 1;\n\tdouble const b = glm::cot(glm::pi<double>() * -0.5);\n\tError += glm::equal(b, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asec()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::asec(100000.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::asec(-100000.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsc()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::acsc(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acsc(-100000.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acot()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::acot(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acot(-100000.0), glm::pi<double>(), 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acot(0.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sech()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::sech(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sech(-100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sech(0.0), 1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csch()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::csch(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::csch(-100000.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_coth()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::coth(100.0);\n\tError += glm::equal(a, 1.0, 0.01) ? 0 : 1;\n\t\n\tdouble const b = glm::coth(-100.0);\n\tError += glm::equal(b, -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asech()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::asech(1.0);\n\tError += glm::equal(a, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsch()\n{\n\tint Error = 0;\n\t\n\tError += glm::acsch(0.01) > 1.0 ? 0 : 1;\n\tError += glm::acsch(-0.01) < -1.0 ? 0 : 1;\n\n\tError += glm::equal(glm::acsch(100.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acsch(-100.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acoth()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::acoth(1.00001);\n\tError += a > 6.0 ? 0 : 1;\n\t\n\tdouble const b = glm::acoth(-1.00001);\n\tError += b < -6.0 ? 0 : 1;\n\n\tdouble const c = glm::acoth(10000.0);\n\tError += glm::equal(c, 0.0, 0.01) ? 0 : 1;\n\t\n\tdouble const d = glm::acoth(-10000.0);\n\tError += glm::equal(d, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_sec();\n\tError += test_csc();\n\tError += test_cot();\n\n\tError += test_asec();\n\tError += test_acsc();\n\tError += test_acot();\n\n\tError += test_sech();\n\tError += test_csch();\n\tError += test_coth();\n\n\tError += test_asech();\n\tError += test_acsch();\n\tError += test_acoth();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_relational.cpp",
    "content": "#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/scalar_integer.hpp>\n#include <glm/ext/scalar_ulp.hpp>\n#include <cmath>\n\nstatic int test_equal_epsilon()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::equal(1.01f, 1.02f, 0.1f), \"GLM: Failed constexpr\");\n\t\tstatic_assert(!glm::equal(1.01f, 1.02f, 0.001f), \"GLM: Failed constexpr\");\n#\tendif\n\t\n\tint Error = 0;\n\n\tError += glm::equal(1.01f, 1.02f, 0.1f) ? 0 : 1;\n\tError += !glm::equal(1.01f, 1.02f, 0.001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_notEqual_epsilon()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::notEqual(1.01f, 1.02f, 0.001f), \"GLM: Failed constexpr\");\n\t\tstatic_assert(!glm::notEqual(1.01f, 1.02f, 0.1f), \"GLM: Failed constexpr\");\n#\tendif\n\t\n\tint Error = 0;\n\n\tError += glm::notEqual(1.01f, 1.02f, 0.001f) ? 0 : 1;\n\tError += !glm::notEqual(1.01f, 1.02f, 0.1f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_equal_ulps()\n{\n\tint Error = 0;\n\t\n\tfloat const ULP1Plus = glm::nextFloat(1.0f);\n\tError += glm::equal(1.0f, ULP1Plus, 1) ? 0 : 1;\n\n\tfloat const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::equal(1.0f, ULP2Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP1Minus = glm::prevFloat(1.0f);\n\tError += glm::equal(1.0f, ULP1Minus, 1) ? 0 : 1;\n\n\tfloat const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::equal(1.0f, ULP2Minus, 1) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_notEqual_ulps()\n{\n\tint Error = 0;\n\t\n\tfloat const ULP1Plus = glm::nextFloat(1.0f);\n\tError += !glm::notEqual(1.0f, ULP1Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::notEqual(1.0f, ULP2Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP1Minus = glm::prevFloat(1.0f);\n\tError += !glm::notEqual(1.0f, ULP1Minus, 1) ? 0 : 1;\n\t\n\tfloat const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::notEqual(1.0f, ULP2Minus, 1) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_equal_sign()\n{\n\tint Error = 0;\n\n\tError += !glm::equal(-0.0f, 0.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-0.0, 0.0, 2) ? 0 : 1;\n\n\tError += !glm::equal(-1.0f, 2.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-1.0, 2.0, 2) ? 0 : 1;\n\n\tError += !glm::equal(-0.00001f, 1.00000f, 2) ? 0 : 1;\n\tError += !glm::equal(-0.00001, 1.00000, 2) ? 0 : 1;\n\n\tError += !glm::equal(-1.0f, 1.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-1.0, 1.0, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_epsilon();\n\tError += test_notEqual_epsilon();\n\n\tError += test_equal_ulps();\n\tError += test_notEqual_ulps();\n\n\tError += test_equal_sign();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_uint_sized.cpp",
    "content": "#include <glm/ext/scalar_uint_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::uint8) == 1, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::uint16) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint32) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint64) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint16) == sizeof(unsigned short), \"unsigned short size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint32) == sizeof(unsigned int), \"unsigned int size isn't 4 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::uint8) == 1 ? 0 : 1;\n\tError += sizeof(glm::uint16) == 2 ? 0 : 1;\n\tError += sizeof(glm::uint32) == 4 ? 0 : 1;\n\tError += sizeof(glm::uint64) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::uint8) < sizeof(glm::uint16) ? 0 : 1;\n\tError += sizeof(glm::uint16) < sizeof(glm::uint32) ? 0 : 1;\n\tError += sizeof(glm::uint32) < sizeof(glm::uint64) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_scalar_ulp.cpp",
    "content": "#include <glm/ext/scalar_ulp.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nstatic int test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfloat B = glm::nextFloat(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tfloat C = glm::prevFloat(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tint D = glm::floatDistance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tint E = glm::floatDistance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tfloat B = glm::nextFloat(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tfloat C = glm::prevFloat(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tint D = glm::floatDistance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tint E = glm::floatDistance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tdouble B = glm::nextFloat(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tdouble C = glm::prevFloat(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tglm::int64 const D = glm::floatDistance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tglm::int64 const E = glm::floatDistance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tdouble B = glm::nextFloat(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tdouble C = glm::prevFloat(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tglm::int64 const D = glm::floatDistance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tglm::int64 const E = glm::floatDistance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vec1.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/vector_relational.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <vector>\n\nstatic glm::vec1 g1;\nstatic glm::vec1 g2(1);\n\nstatic int test_vec1_operators()\n{\n\tint Error(0);\n\n\tglm::ivec1 A(1);\n\tglm::ivec1 B(1);\n\t{\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tA *= 1;\n\t\tB *= 1;\n\t\tA += 1;\n\t\tB += 1;\n\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec1>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec1>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec1>::value ? 0 : 1;\n#\tendif\n\n\n\t{\n\t\tglm::ivec1 A = glm::vec1(2.0f);\n\n\t\tglm::ivec1 E(glm::dvec1(2.0));\n\t\tError += A == E ? 0 : 1;\n\n\t\tglm::ivec1 F(glm::ivec1(2));\n\t\tError += A == F ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec1) == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += 4 == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += sizeof(glm::dvec1) == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += 8 == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += glm::vec1().length() == 1 ? 0 : 1;\n\tError += glm::dvec1().length() == 1 ? 0 : 1;\n\tError += glm::vec1::length() == 1 ? 0 : 1;\n\tError += glm::dvec1::length() == 1 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec1::length();\n\tError += Length == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec1_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec1 v0(1);\n\tglm::ivec1 v1(v0);\n\tglm::ivec1 v2(v0);\n\tglm::ivec1 v3 = ++v1;\n\tglm::ivec1 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_bvec1_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec1 const A(true);\n\tglm::bvec1 const B(true);\n\tglm::bvec1 const C(false);\n\tglm::bvec1 const D = A && B;\n\tglm::bvec1 const E = A && C;\n\tglm::bvec1 const F = A || C;\n\n\tError += D == glm::bvec1(true) ? 0 : 1;\n\tError += E == glm::bvec1(false) ? 0 : 1;\n\tError += F == glm::bvec1(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_size();\n\tError += test_vec1_ctor();\n\tError += test_bvec1_ctor();\n\tError += test_vec1_operators();\n\tError += test_vec1_operator_increment();\n\tError += test_constexpr();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_bool1.cpp",
    "content": "#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool1_precision.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\tgenType const A(true);\n\tgenType const B(true);\n\t{\n\t\tbool const R = A != B;\n\t\tbool const S = A == B;\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec1 const A = genType(true);\n\n\tglm::bvec1 const E(genType(true));\n\tError += A == E ? 0 : 1;\n\n\tglm::bvec1 const F(E);\n\tError += A == F ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::bvec1) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\tint Error = 0;\n\n\tgenType const A(true);\n\tgenType const B(true);\n\tgenType const C(false);\n\n\tError += A == B ? 0 : 1;\n\tError += (A && B) == A ? 0 : 1;\n\tError += (A || C) == A ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_HAS_CONSTEXPR\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::bvec1>();\n\tError += test_operators<glm::lowp_bvec1>();\n\tError += test_operators<glm::mediump_bvec1>();\n\tError += test_operators<glm::highp_bvec1>();\n\n\tError += test_ctor<glm::bvec1>();\n\tError += test_ctor<glm::lowp_bvec1>();\n\tError += test_ctor<glm::mediump_bvec1>();\n\tError += test_ctor<glm::highp_bvec1>();\n\n\tError += test_size<glm::bvec1>();\n\tError += test_size<glm::lowp_bvec1>();\n\tError += test_size<glm::mediump_bvec1>();\n\tError += test_size<glm::highp_bvec1>();\n\n\tError += test_relational<glm::bvec1>();\n\tError += test_relational<glm::lowp_bvec1>();\n\tError += test_relational<glm::mediump_bvec1>();\n\tError += test_relational<glm::highp_bvec1>();\n\n\tError += test_constexpr<glm::bvec1>();\n\tError += test_constexpr<glm::lowp_bvec1>();\n\tError += test_constexpr<glm::mediump_bvec1>();\n\tError += test_constexpr<glm::highp_bvec1>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_common.cpp",
    "content": "#include <glm/ext/vector_common.hpp>\n\n#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool1_precision.hpp>\n#include <glm/ext/vector_bool2.hpp>\n#include <glm/ext/vector_bool2_precision.hpp>\n#include <glm/ext/vector_bool3.hpp>\n#include <glm/ext/vector_bool3_precision.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/vector_bool4_precision.hpp>\n\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float2_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float4_precision.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double2_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_double4_precision.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/common.hpp>\n\n#if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))\n#\tdefine GLM_NAN(T) NAN\n#else\n#\tdefine GLM_NAN(T) (static_cast<T>(0.0f) / static_cast<T>(0.0f))\n#endif\n\ntemplate <typename vecType>\nstatic int test_min()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const N(static_cast<T>(0));\n\tvecType const B(static_cast<T>(1));\n\n\tError += glm::all(glm::equal(glm::min(N, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, N), N, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::min(N, B, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, N, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, N, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, B, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, C, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(N, C, B), N, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::min(D, N, B, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, D, N, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, N, D, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, B, D, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, C, N, D), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(N, C, B, D), N, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_min_nan()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::isnan(glm::min(N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, N))) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::isnan(glm::min(N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, B, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, C, N))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::min(N, C, B))) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += !glm::all(glm::isnan(glm::min(D, N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, D, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, N, D, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, B, D, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, C, N, D))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::min(N, C, B, D))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_max()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const N(static_cast<T>(0));\n\tvecType const B(static_cast<T>(1));\n\tError += glm::all(glm::equal(glm::max(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::max(N, B, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, N, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, N, B), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, B, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, C, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(N, C, B), C, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::max(D, N, B, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, D, N, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, N, D, B), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, B, D, N), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, C, N, D), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(N, C, B, D), D, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_max_nan()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::isnan(glm::max(N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, N))) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::isnan(glm::max(N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, B, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, C, N))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::max(N, C, B))) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += !glm::all(glm::isnan(glm::max(D, N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, D, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, N, D, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, B, D, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, C, N, D))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::max(N, C, B, D))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_fmin()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::equal(glm::fmin(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::fmin(N, B, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, N, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, C, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(N, C, B), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::fmin(D, N, B, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, D, N, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, N, D, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, B, D, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, C, N, D), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(N, C, B, D), B, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_fmax()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::equal(glm::fmax(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::fmax(N, B, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, N, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, N, B), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, B, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, C, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(N, C, B), C, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::fmax(D, N, B, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, D, N, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, N, D, B), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, B, D, N), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, C, N, D), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(N, C, B, D), D, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_clamp()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::clamp(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::clamp(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::clamp(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::clamp(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_repeat()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::repeat(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::repeat(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::repeat(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::repeat(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorClamp()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::mirrorClamp(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::mirrorClamp(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::mirrorClamp(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::mirrorClamp(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorRepeat()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::mirrorRepeat(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::mirrorRepeat(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::mirrorRepeat(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::mirrorRepeat(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_iround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_min<glm::vec3>();\n\tError += test_min<glm::vec2>();\n\tError += test_min_nan<glm::vec3>();\n\tError += test_min_nan<glm::vec2>();\n\n\tError += test_max<glm::vec3>();\n\tError += test_max<glm::vec2>();\n\tError += test_max_nan<glm::vec3>();\n\tError += test_max_nan<glm::vec2>();\n\n\tError += test_fmin<glm::vec3>();\n\tError += test_fmin<glm::vec2>();\n\n\tError += test_fmax<glm::vec3>();\n\tError += test_fmax<glm::vec2>();\n\n\tError += test_clamp();\n\tError += test_repeat();\n\tError += test_mirrorClamp();\n\tError += test_mirrorRepeat();\n\n\tError += test_iround();\n\tError += test_uround();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_iec559.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\ttypedef typename genType::value_type valType;\n\t\n\tint Error = 0;\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tgenType const C = A + B;\n\t\tError += glm::all(glm::equal(C, genType(2), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const D = A - B;\n\t\tError += glm::all(glm::equal(D, genType(0), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const E = A * B;\n\t\tError += glm::all(glm::equal(E, genType(1), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const F = A / B;\n\t\tError += glm::all(glm::equal(F, genType(1), glm::epsilon<valType>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tglm::vec<1, T> const A = genType(1);\n\n\tglm::vec<1, T> const E(genType(1));\n\tError += glm::all(glm::equal(A, E, glm::epsilon<T>())) ? 0 : 1;\n\n\tglm::vec<1, T> const F(E);\n\tError += glm::all(glm::equal(A, F, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const B = genType(1);\n\tgenType const G(glm::vec<2, T>(1));\n\tError += glm::all(glm::equal(B, G, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const H(glm::vec<3, T>(1));\n\tError += glm::all(glm::equal(B, H, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const I(glm::vec<4, T>(1));\n\tError += glm::all(glm::equal(B, I, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tError += sizeof(glm::vec<1, T>) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\ttypedef typename genType::value_type valType;\n\t\n\tint Error = 0;\n\n\tgenType const A(1);\n\tgenType const B(1);\n\tgenType const C(0);\n\n\tError += all(equal(A, B, glm::epsilon<valType>())) ? 0 : 1;\n\tError += any(notEqual(A, C, glm::epsilon<valType>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::dvec1>();\n\tError += test_operators<glm::lowp_dvec1>();\n\tError += test_operators<glm::mediump_dvec1>();\n\tError += test_operators<glm::highp_dvec1>();\n\n\tError += test_ctor<glm::dvec1>();\n\tError += test_ctor<glm::lowp_dvec1>();\n\tError += test_ctor<glm::mediump_dvec1>();\n\tError += test_ctor<glm::highp_dvec1>();\n\n\tError += test_size<glm::dvec1>();\n\tError += test_size<glm::lowp_dvec1>();\n\tError += test_size<glm::mediump_dvec1>();\n\tError += test_size<glm::highp_dvec1>();\n\n\tError += test_relational<glm::dvec1>();\n\tError += test_relational<glm::lowp_dvec1>();\n\tError += test_relational<glm::mediump_dvec1>();\n\tError += test_relational<glm::highp_dvec1>();\n\n\tError += test_constexpr<glm::dvec1>();\n\tError += test_constexpr<glm::lowp_dvec1>();\n\tError += test_constexpr<glm::mediump_dvec1>();\n\tError += test_constexpr<glm::highp_dvec1>();\n\n\tError += test_operators<glm::vec1>();\n\tError += test_operators<glm::lowp_vec1>();\n\tError += test_operators<glm::mediump_vec1>();\n\tError += test_operators<glm::highp_vec1>();\n\t\n\tError += test_ctor<glm::vec1>();\n\tError += test_ctor<glm::lowp_vec1>();\n\tError += test_ctor<glm::mediump_vec1>();\n\tError += test_ctor<glm::highp_vec1>();\n\t\n\tError += test_size<glm::vec1>();\n\tError += test_size<glm::lowp_vec1>();\n\tError += test_size<glm::mediump_vec1>();\n\tError += test_size<glm::highp_vec1>();\n\t\n\tError += test_relational<glm::vec1>();\n\tError += test_relational<glm::lowp_vec1>();\n\tError += test_relational<glm::mediump_vec1>();\n\tError += test_relational<glm::highp_vec1>();\n\t\n\tError += test_constexpr<glm::vec1>();\n\tError += test_constexpr<glm::lowp_vec1>();\n\tError += test_constexpr<glm::mediump_vec1>();\n\tError += test_constexpr<glm::highp_vec1>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_int1_sized.cpp",
    "content": "#include <glm/ext/vector_int1_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec1) == 1, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec1) == 2, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec1) == 4, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec1) == 8, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec1) == 1 ? 0 : 1;\n\tError += sizeof(glm::i16vec1) == 2 ? 0 : 1;\n\tError += sizeof(glm::i32vec1) == 4 ? 0 : 1;\n\tError += sizeof(glm::i64vec1) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec1) < sizeof(glm::i16vec1) ? 0 : 1;\n\tError += sizeof(glm::i16vec1) < sizeof(glm::i32vec1) ? 0 : 1;\n\tError += sizeof(glm::i32vec1) < sizeof(glm::i64vec1) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_int2_sized.cpp",
    "content": "#include <glm/ext/vector_int2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec2) == 2, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec2) == 4, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec2) == 8, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec2) == 16, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) == 2 ? 0 : 1;\n\tError += sizeof(glm::i16vec2) == 4 ? 0 : 1;\n\tError += sizeof(glm::i32vec2) == 8 ? 0 : 1;\n\tError += sizeof(glm::i64vec2) == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) < sizeof(glm::i16vec2) ? 0 : 1;\n\tError += sizeof(glm::i16vec2) < sizeof(glm::i32vec2) ? 0 : 1;\n\tError += sizeof(glm::i32vec2) < sizeof(glm::i64vec2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_int3_sized.cpp",
    "content": "#include <glm/ext/vector_int3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec3) == 3, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec3) == 6, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec3) == 12, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec3) == 24, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec3) == 3 ? 0 : 1;\n\tError += sizeof(glm::i16vec3) == 6 ? 0 : 1;\n\tError += sizeof(glm::i32vec3) == 12 ? 0 : 1;\n\tError += sizeof(glm::i64vec3) == 24 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec3) < sizeof(glm::i16vec3) ? 0 : 1;\n\tError += sizeof(glm::i16vec3) < sizeof(glm::i32vec3) ? 0 : 1;\n\tError += sizeof(glm::i32vec3) < sizeof(glm::i64vec3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_int4_sized.cpp",
    "content": "#include <glm/ext/vector_int4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec4) == 4 ? 0 : 1;\n\tError += sizeof(glm::i16vec4) == 8 ? 0 : 1;\n\tError += sizeof(glm::i32vec4) == 16 ? 0 : 1;\n\tError += sizeof(glm::i64vec4) == 32 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec4) < sizeof(glm::i16vec4) ? 0 : 1;\n\tError += sizeof(glm::i16vec4) < sizeof(glm::i32vec4) ? 0 : 1;\n\tError += sizeof(glm::i32vec4) < sizeof(glm::i64vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_integer.cpp",
    "content": "#include <glm/ext/vector_integer.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\ttemplate <glm::length_t L>\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{ 0x0001, true },\n\t\t\t{ 0x0002, true },\n\t\t\t{ 0x0004, true },\n\t\t\t{ 0x0080, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::int16>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{ 0x0001, true },\n\t\t\t{ 0x0002, true },\n\t\t\t{ 0x0004, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::uint16>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{ 0x00000001, true },\n\t\t\t{ 0x00000002, true },\n\t\t\t{ 0x00000004, true },\n\t\t\t{ 0x0000000f, false },\n\t\t\t{ 0x00000000, true },\n\t\t\t{ 0x00000003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::int32>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{ 0x00000001, true },\n\t\t\t{ 0x00000002, true },\n\t\t\t{ 0x00000004, true },\n\t\t\t{ 0x80000000, true },\n\t\t\t{ 0x00000000, true },\n\t\t\t{ 0x00000003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::uint32>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int16<1>();\n\t\tError += test_int16<2>();\n\t\tError += test_int16<3>();\n\t\tError += test_int16<4>();\n\n\t\tError += test_uint16<1>();\n\t\tError += test_uint16<2>();\n\t\tError += test_uint16<3>();\n\t\tError += test_uint16<4>();\n\n\t\tError += test_int32<1>();\n\t\tError += test_int32<2>();\n\t\tError += test_int32<3>();\n\t\tError += test_int32<4>();\n\n\t\tError += test_uint32<1>();\n\t\tError += test_uint32<2>();\n\t\tError += test_uint32<3>();\n\t\tError += test_uint32<4>();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace prevPowerOfTwo\n{\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec<L, T> const A = glm::prevPowerOfTwo(glm::vec<L, T>(7));\n\t\tError += A == glm::vec<L, T>(4) ? 0 : 1;\n\n\t\tglm::vec<L, T> const B = glm::prevPowerOfTwo(glm::vec<L, T>(15));\n\t\tError += B == glm::vec<L, T>(8) ? 0 : 1;\n\n\t\tglm::vec<L, T> const C = glm::prevPowerOfTwo(glm::vec<L, T>(31));\n\t\tError += C == glm::vec<L, T>(16) ? 0 : 1;\n\n\t\tglm::vec<L, T> const D = glm::prevPowerOfTwo(glm::vec<L, T>(32));\n\t\tError += D == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevPowerOfTwo\n\nnamespace nextPowerOfTwo\n{\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec<L, T> const A = glm::nextPowerOfTwo(glm::vec<L, T>(7));\n\t\tError += A == glm::vec<L, T>(8) ? 0 : 1;\n\n\t\tglm::vec<L, T> const B = glm::nextPowerOfTwo(glm::vec<L, T>(15));\n\t\tError += B == glm::vec<L, T>(16) ? 0 : 1;\n\n\t\tglm::vec<L, T> const C = glm::nextPowerOfTwo(glm::vec<L, T>(31));\n\t\tError += C == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\tglm::vec<L, T> const D = glm::nextPowerOfTwo(glm::vec<L, T>(32));\n\t\tError += D == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo\n\nnamespace prevMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 8, 3, 6 },\n\t\t\t{ 7, 7, 7 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, T> const Result0 = glm::prevMultiple(glm::vec<L, T>(Data[i].Source), Data[i].Multiple);\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result0 ? 0 : 1;\n\n\t\t\tglm::vec<L, T> const Result1 = glm::prevMultiple(glm::vec<L, T>(Data[i].Source), glm::vec<L, T>(Data[i].Multiple));\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result1 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevMultiple\n\nnamespace nextMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 3, 4, 4 },\n\t\t\t{ 6, 3, 6 },\n\t\t\t{ 5, 3, 6 },\n\t\t\t{ 7, 7, 7 },\n\t\t\t{ 0, 1, 0 },\n\t\t\t{ 8, 3, 9 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, T> const Result0 = glm::nextMultiple(glm::vec<L, T>(Data[i].Source), glm::vec<L, T>(Data[i].Multiple));\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result0 ? 0 : 1;\n\n\t\t\tglm::vec<L, T> const Result1 = glm::nextMultiple(glm::vec<L, T>(Data[i].Source), Data[i].Multiple);\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result1 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextMultiple\n\nnamespace findNSB\n{\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tT Source;\n\t\tint SignificantBitCount;\n\t\tint Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 0x00, 1,-1 },\n\t\t\t{ 0x01, 2,-1 },\n\t\t\t{ 0x02, 2,-1 },\n\t\t\t{ 0x06, 3,-1 },\n\t\t\t{ 0x01, 1, 0 },\n\t\t\t{ 0x03, 1, 0 },\n\t\t\t{ 0x03, 2, 1 },\n\t\t\t{ 0x07, 2, 1 },\n\t\t\t{ 0x05, 2, 2 },\n\t\t\t{ 0x0D, 2, 2 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, int> const Result0 = glm::findNSB<L, T, glm::defaultp>(glm::vec<L, T>(Data[i].Source), glm::vec<L, int>(Data[i].SignificantBitCount));\n\t\t\tError += glm::vec<L, int>(Data[i].Return) == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\n\t\treturn Error;\n\t}\n}//namespace findNSB\n\nint main()\n{\n\tint Error = 0;\n\n\tError += isPowerOfTwo::test();\n\tError += prevPowerOfTwo::test();\n\tError += nextPowerOfTwo::test();\n\tError += prevMultiple::test();\n\tError += nextMultiple::test();\n\tError += findNSB::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_integer_sized.cpp",
    "content": "#include <glm/ext/vector_integer.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_int1_sized.hpp>\n#include <glm/ext/vector_uint1.hpp>\n#include <glm/ext/vector_uint1_sized.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tbool const R = A != B;\n\t\tbool const S = A == B;\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tgenType const C = A + B;\n\t\tError += C == genType(2) ? 0 : 1;\n\n\t\tgenType const D = A - B;\n\t\tError += D == genType(0) ? 0 : 1;\n\n\t\tgenType const E = A * B;\n\t\tError += E == genType(1) ? 0 : 1;\n\n\t\tgenType const F = A / B;\n\t\tError += F == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(3);\n\t\tgenType const B(2);\n\n\t\tgenType const C = A % B;\n\t\tError += C == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\t\tgenType const C(0);\n\n\t\tgenType const I = A & B;\n\t\tError += I == genType(1) ? 0 : 1;\n\t\tgenType const D = A & C;\n\t\tError += D == genType(0) ? 0 : 1;\n\n\t\tgenType const E = A | B;\n\t\tError += E == genType(1) ? 0 : 1;\n\t\tgenType const F = A | C;\n\t\tError += F == genType(1) ? 0 : 1;\n\n\t\tgenType const G = A ^ B;\n\t\tError += G == genType(0) ? 0 : 1;\n\t\tgenType const H = A ^ C;\n\t\tError += H == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(0);\n\t\tgenType const B(1);\n\t\tgenType const C(2);\n\n\t\tgenType const D = B << B;\n\t\tError += D == genType(2) ? 0 : 1;\n\t\tgenType const E = C >> B;\n\t\tError += E == genType(1) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tgenType const A = genType(1);\n\n\tgenType const E(genType(1));\n\tError += A == E ? 0 : 1;\n\n\tgenType const F(E);\n\tError += A == F ? 0 : 1;\n\n\tgenType const B = genType(1);\n\tgenType const G(glm::vec<2, T>(1));\n\tError += B == G ? 0 : 1;\n\n\tgenType const H(glm::vec<3, T>(1));\n\tError += B == H ? 0 : 1;\n\n\tgenType const I(glm::vec<4, T>(1));\n\tError += B == I ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(typename genType::value_type) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\tint Error = 0;\n\n\tgenType const A(1);\n\tgenType const B(1);\n\tgenType const C(0);\n\n\tError += A == B ? 0 : 1;\n\tError += A != C ? 0 : 1;\n\tError += all(equal(A, B)) ? 0 : 1;\n\tError += any(notEqual(A, C)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1)[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1) == genType(1), \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1) != genType(0), \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::ivec1>();\n\tError += test_operators<glm::i8vec1>();\n\tError += test_operators<glm::i16vec1>();\n\tError += test_operators<glm::i32vec1>();\n\tError += test_operators<glm::i64vec1>();\n\n\tError += test_ctor<glm::ivec1>();\n\tError += test_ctor<glm::i8vec1>();\n\tError += test_ctor<glm::i16vec1>();\n\tError += test_ctor<glm::i32vec1>();\n\tError += test_ctor<glm::i64vec1>();\n\n\tError += test_size<glm::ivec1>();\n\tError += test_size<glm::i8vec1>();\n\tError += test_size<glm::i16vec1>();\n\tError += test_size<glm::i32vec1>();\n\tError += test_size<glm::i64vec1>();\n\n\tError += test_relational<glm::ivec1>();\n\tError += test_relational<glm::i8vec1>();\n\tError += test_relational<glm::i16vec1>();\n\tError += test_relational<glm::i32vec1>();\n\tError += test_relational<glm::i64vec1>();\n\n\tError += test_constexpr<glm::ivec1>();\n\tError += test_constexpr<glm::i8vec1>();\n\tError += test_constexpr<glm::i16vec1>();\n\tError += test_constexpr<glm::i32vec1>();\n\tError += test_constexpr<glm::i64vec1>();\n\n\tError += test_operators<glm::uvec1>();\n\tError += test_operators<glm::u8vec1>();\n\tError += test_operators<glm::u16vec1>();\n\tError += test_operators<glm::u32vec1>();\n\tError += test_operators<glm::u64vec1>();\n\t\n\tError += test_ctor<glm::uvec1>();\n\tError += test_ctor<glm::u8vec1>();\n\tError += test_ctor<glm::u16vec1>();\n\tError += test_ctor<glm::u32vec1>();\n\tError += test_ctor<glm::u64vec1>();\n\t\n\tError += test_size<glm::uvec1>();\n\tError += test_size<glm::u8vec1>();\n\tError += test_size<glm::u16vec1>();\n\tError += test_size<glm::u32vec1>();\n\tError += test_size<glm::u64vec1>();\n\t\n\tError += test_relational<glm::uvec1>();\n\tError += test_relational<glm::u8vec1>();\n\tError += test_relational<glm::u16vec1>();\n\tError += test_relational<glm::u32vec1>();\n\tError += test_relational<glm::u64vec1>();\n\t\n\tError += test_constexpr<glm::uvec1>();\n\tError += test_constexpr<glm::u8vec1>();\n\tError += test_constexpr<glm::u16vec1>();\n\tError += test_constexpr<glm::u32vec1>();\n\tError += test_constexpr<glm::u64vec1>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_packing.cpp",
    "content": "#include <glm/ext/vector_packing.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_uint2_sized.hpp>\n#include <glm/ext/vector_int2_sized.hpp>\n#include <glm/gtc/packing.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\n\tfor (std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::u16vec2 C = glm::packUnorm<glm::uint16>(B);\n\t\tglm::vec2 D = glm::unpackUnorm<float>(C);\n\t\tError += glm::all(glm::equal(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f, -0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor (std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::i16vec2 C = glm::packSnorm<glm::int16>(B);\n\t\tglm::vec2 D = glm::unpackSnorm<float>(C);\n\t\tError += glm::all(glm::equal(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_reciprocal.cpp",
    "content": "#include <glm/ext/vector_reciprocal.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/vector_double1.hpp>\n\nstatic int test_sec()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::sec(glm::dvec1(0.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::sec(glm::dvec1(glm::pi<double>() * 2.0));\n\tError += glm::all(glm::equal(b, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const c = glm::sec(glm::dvec1(glm::pi<double>() * -2.0));\n\tError += glm::all(glm::equal(c, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const d = glm::sec(glm::dvec1(glm::pi<double>() * 1.0));\n\tError += glm::all(glm::equal(d, -glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const e = glm::sec(glm::dvec1(glm::pi<double>() * -1.0));\n\tError += glm::all(glm::equal(e, -glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csc()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::csc(glm::dvec1(glm::pi<double>() * 0.5));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::csc(glm::dvec1(glm::pi<double>() * -0.5));\n\tError += glm::all(glm::equal(b, glm::dvec1(-1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_cot()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::cot(glm::dvec1(glm::pi<double>() * 0.5));\n\tError += glm::all(glm::equal(a, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::cot(glm::dvec1(glm::pi<double>() * -0.5));\n\tError += glm::all(glm::equal(b, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asec()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::asec(glm::dvec1(100000.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::asec(glm::dvec1(-100000.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsc()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::acsc(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acsc(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acot()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(-100000.0)), glm::dvec1(glm::pi<double>()), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(0.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sech()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(0.0)), glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csch()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::csch(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::csch(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_coth()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::coth(glm::dvec1(100.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\t\n\tglm::dvec1 const b = glm::coth(glm::dvec1(-100.0));\n\tError += glm::all(glm::equal(b, glm::dvec1(-1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asech()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::asech(glm::dvec1(1.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsch()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a(glm::acsch(glm::dvec1(0.01)));\n\tError += a.x > 1.0 ? 0 : 1;\n\n\tglm::dvec1 const b(glm::acsch(glm::dvec1(-0.01)));\n\tError += b.x < -1.0 ? 0 : 1;\n\n\tError += glm::all(glm::equal(glm::acsch(glm::dvec1(100.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acsch(glm::dvec1(-100.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acoth()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::acoth(glm::dvec1(1.00001));\n\tError += a.x > 6.0 ? 0 : 1;\n\t\n\tglm::dvec1 const b = glm::acoth(glm::dvec1(-1.00001));\n\tError += b.x < -6.0 ? 0 : 1;\n\n\tglm::dvec1 const c = glm::acoth(glm::dvec1(10000.0));\n\tError += glm::all(glm::equal(c, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\t\n\tglm::dvec1 const d = glm::acoth(glm::dvec1(-10000.0));\n\tError += glm::all(glm::equal(d, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_sec();\n\tError += test_csc();\n\tError += test_cot();\n\n\tError += test_asec();\n\tError += test_acsc();\n\tError += test_acot();\n\n\tError += test_sech();\n\tError += test_csch();\n\tError += test_coth();\n\n\tError += test_asech();\n\tError += test_acsch();\n\tError += test_acoth();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_relational.cpp",
    "content": "#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float2_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float4_precision.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double2_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_double4_precision.hpp>\n#include <glm/ext/vector_ulp.hpp>\n\ntemplate <typename vecType>\nstatic int test_equal()\n{\n\ttypedef typename vecType::value_type valType;\n\n\tvalType const A = static_cast<valType>(1.01f);\n\tvalType const B = static_cast<valType>(1.02f);\n\tvalType const Epsilon1 = static_cast<valType>(0.1f);\n\tvalType const Epsilon2 = static_cast<valType>(0.001f);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::equal(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;\n\tError += glm::all(glm::equal(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;\n\n\tError += !glm::any(glm::equal(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;\n\tError += !glm::any(glm::equal(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_notEqual()\n{\n\ttypedef typename vecType::value_type valType;\n\n\tvalType const A = static_cast<valType>(1.01f);\n\tvalType const B = static_cast<valType>(1.02f);\n\tvalType const Epsilon1 = static_cast<valType>(0.1f);\n\tvalType const Epsilon2 = static_cast<valType>(0.001f);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::notEqual(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;\n\tError += glm::all(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;\n\n\tError += !glm::any(glm::notEqual(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;\n\tError += !glm::any(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType, typename valType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::all(glm::equal(genType(static_cast<valType>(1.01f)), genType(static_cast<valType>(1.02f)), static_cast<valType>(0.1f))), \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\ntemplate <typename T>\nstatic int test_equal_ulps()\n{\n\ttypedef glm::vec<4, T, glm::defaultp> vec4;\n\n\tT const One(1);\n\tvec4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += glm::all(glm::equal(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::all(glm::equal(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += glm::all(glm::equal(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::all(glm::equal(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_notEqual_ulps()\n{\n\ttypedef glm::vec<4, T, glm::defaultp> vec4;\n\n\tT const One(1);\n\tvec4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::all(glm::notEqual(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::all(glm::notEqual(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_ulps<float>();\n\tError += test_equal_ulps<double>();\n\tError += test_notEqual_ulps<float>();\n\tError += test_notEqual_ulps<double>();\n\n\tError += test_equal<glm::vec1>();\n\tError += test_equal<glm::lowp_vec1>();\n\tError += test_equal<glm::mediump_vec1>();\n\tError += test_equal<glm::highp_vec1>();\n\tError += test_equal<glm::vec2>();\n\tError += test_equal<glm::lowp_vec2>();\n\tError += test_equal<glm::mediump_vec2>();\n\tError += test_equal<glm::highp_vec2>();\n\tError += test_equal<glm::vec3>();\n\tError += test_equal<glm::lowp_vec3>();\n\tError += test_equal<glm::mediump_vec3>();\n\tError += test_equal<glm::highp_vec3>();\n\tError += test_equal<glm::vec4>();\n\tError += test_equal<glm::lowp_vec4>();\n\tError += test_equal<glm::mediump_vec4>();\n\tError += test_equal<glm::highp_vec4>();\n\n\tError += test_equal<glm::dvec1>();\n\tError += test_equal<glm::lowp_dvec1>();\n\tError += test_equal<glm::mediump_dvec1>();\n\tError += test_equal<glm::highp_dvec1>();\n\tError += test_equal<glm::dvec2>();\n\tError += test_equal<glm::lowp_dvec2>();\n\tError += test_equal<glm::mediump_dvec2>();\n\tError += test_equal<glm::highp_dvec2>();\n\tError += test_equal<glm::dvec3>();\n\tError += test_equal<glm::lowp_dvec3>();\n\tError += test_equal<glm::mediump_dvec3>();\n\tError += test_equal<glm::highp_dvec3>();\n\tError += test_equal<glm::dvec4>();\n\tError += test_equal<glm::lowp_dvec4>();\n\tError += test_equal<glm::mediump_dvec4>();\n\tError += test_equal<glm::highp_dvec4>();\n\n\tError += test_notEqual<glm::vec1>();\n\tError += test_notEqual<glm::lowp_vec1>();\n\tError += test_notEqual<glm::mediump_vec1>();\n\tError += test_notEqual<glm::highp_vec1>();\n\tError += test_notEqual<glm::vec2>();\n\tError += test_notEqual<glm::lowp_vec2>();\n\tError += test_notEqual<glm::mediump_vec2>();\n\tError += test_notEqual<glm::highp_vec2>();\n\tError += test_notEqual<glm::vec3>();\n\tError += test_notEqual<glm::lowp_vec3>();\n\tError += test_notEqual<glm::mediump_vec3>();\n\tError += test_notEqual<glm::highp_vec3>();\n\tError += test_notEqual<glm::vec4>();\n\tError += test_notEqual<glm::lowp_vec4>();\n\tError += test_notEqual<glm::mediump_vec4>();\n\tError += test_notEqual<glm::highp_vec4>();\n\n\tError += test_notEqual<glm::dvec1>();\n\tError += test_notEqual<glm::lowp_dvec1>();\n\tError += test_notEqual<glm::mediump_dvec1>();\n\tError += test_notEqual<glm::highp_dvec1>();\n\tError += test_notEqual<glm::dvec2>();\n\tError += test_notEqual<glm::lowp_dvec2>();\n\tError += test_notEqual<glm::mediump_dvec2>();\n\tError += test_notEqual<glm::highp_dvec2>();\n\tError += test_notEqual<glm::dvec3>();\n\tError += test_notEqual<glm::lowp_dvec3>();\n\tError += test_notEqual<glm::mediump_dvec3>();\n\tError += test_notEqual<glm::highp_dvec3>();\n\tError += test_notEqual<glm::dvec4>();\n\tError += test_notEqual<glm::lowp_dvec4>();\n\tError += test_notEqual<glm::mediump_dvec4>();\n\tError += test_notEqual<glm::highp_dvec4>();\n\n\tError += test_constexpr<glm::vec1, float>();\n\tError += test_constexpr<glm::vec2, float>();\n\tError += test_constexpr<glm::vec3, float>();\n\tError += test_constexpr<glm::vec4, float>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_uint1_sized.cpp",
    "content": "#include <glm/ext/vector_uint1_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec1) == 1 ? 0 : 1;\n\tError += sizeof(glm::u16vec1) == 2 ? 0 : 1;\n\tError += sizeof(glm::u32vec1) == 4 ? 0 : 1;\n\tError += sizeof(glm::u64vec1) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec1) < sizeof(glm::u16vec1) ? 0 : 1;\n\tError += sizeof(glm::u16vec1) < sizeof(glm::u32vec1) ? 0 : 1;\n\tError += sizeof(glm::u32vec1) < sizeof(glm::u64vec1) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_uint2_sized.cpp",
    "content": "#include <glm/ext/vector_uint2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec2) == 2, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec2) == 4, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec2) == 8, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec2) == 16, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) == 2 ? 0 : 1;\n\tError += sizeof(glm::u16vec2) == 4 ? 0 : 1;\n\tError += sizeof(glm::u32vec2) == 8 ? 0 : 1;\n\tError += sizeof(glm::u64vec2) == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) < sizeof(glm::u16vec2) ? 0 : 1;\n\tError += sizeof(glm::u16vec2) < sizeof(glm::u32vec2) ? 0 : 1;\n\tError += sizeof(glm::u32vec2) < sizeof(glm::u64vec2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_uint3_sized.cpp",
    "content": "#include <glm/ext/vector_uint3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec3) == 3, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec3) == 6, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec3) == 12, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec3) == 24, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec3) == 3 ? 0 : 1;\n\tError += sizeof(glm::u16vec3) == 6 ? 0 : 1;\n\tError += sizeof(glm::u32vec3) == 12 ? 0 : 1;\n\tError += sizeof(glm::u64vec3) == 24 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec3) < sizeof(glm::u16vec3) ? 0 : 1;\n\tError += sizeof(glm::u16vec3) < sizeof(glm::u32vec3) ? 0 : 1;\n\tError += sizeof(glm::u32vec3) < sizeof(glm::u64vec3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_uint4_sized.cpp",
    "content": "#include <glm/ext/vector_uint4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec4) == 4 ? 0 : 1;\n\tError += sizeof(glm::u16vec4) == 8 ? 0 : 1;\n\tError += sizeof(glm::u32vec4) == 16 ? 0 : 1;\n\tError += sizeof(glm::u64vec4) == 32 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec4) < sizeof(glm::u16vec4) ? 0 : 1;\n\tError += sizeof(glm::u16vec4) < sizeof(glm::u32vec4) ? 0 : 1;\n\tError += sizeof(glm::u32vec4) < sizeof(glm::u64vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/ext/ext_vector_ulp.cpp",
    "content": "#include <glm/ext/vector_ulp.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_int4.hpp>\n\nstatic int test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f);\n\n\tglm::vec4 const B = glm::nextFloat(A);\n\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\tglm::vec4 const C = glm::prevFloat(B);\n\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\tglm::ivec4 const D = glm::floatDistance(A, B);\n\tError += D == glm::ivec4(1) ? 0 : 1;\n\tglm::ivec4 const E = glm::floatDistance(A, C);\n\tError += E == glm::ivec4(0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f);\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tglm::vec4 const B = glm::nextFloat(A, i);\n\t\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\t\tglm::vec4 const C = glm::prevFloat(B, i);\n\t\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\t\tglm::ivec4 const D = glm::floatDistance(A, B);\n\t\tError += D == glm::ivec4(i) ? 0 : 1;\n\t\tglm::ivec4 const E = glm::floatDistance(A, C);\n\t\tError += E == glm::ivec4(0) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tglm::dvec4 const A(1.0);\n\n\tglm::dvec4 const B = glm::nextFloat(A);\n\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\tglm::dvec4 const C = glm::prevFloat(B);\n\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\tglm::ivec4 const D(glm::floatDistance(A, B));\n\tError += D == glm::ivec4(1) ? 0 : 1;\n\tglm::ivec4 const E = glm::floatDistance(A, C);\n\tError += E == glm::ivec4(0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tglm::dvec4 const A(1.0);\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tglm::dvec4 const B = glm::nextFloat(A, i);\n\t\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\t\tglm::dvec4 const C = glm::prevFloat(B, i);\n\t\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\t\tglm::ivec4 const D(glm::floatDistance(A, B));\n\t\tError += D == glm::ivec4(i) ? 0 : 1;\n\t\tglm::ivec4 const E(glm::floatDistance(A, C));\n\t\tError += E == glm::ivec4(0) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/glm.cppcheck",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"1\">\n    <includedir>\n        <dir name=\"../glm\"/>\n    </includedir>\n</project>\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/CMakeLists.txt",
    "content": "glmCreateTestGTC(gtc_bitfield)\nglmCreateTestGTC(gtc_color_space)\nglmCreateTestGTC(gtc_constants)\nglmCreateTestGTC(gtc_epsilon)\nglmCreateTestGTC(gtc_integer)\nglmCreateTestGTC(gtc_matrix_access)\nglmCreateTestGTC(gtc_matrix_integer)\nglmCreateTestGTC(gtc_matrix_inverse)\nglmCreateTestGTC(gtc_matrix_transform)\nglmCreateTestGTC(gtc_noise)\nglmCreateTestGTC(gtc_packing)\nglmCreateTestGTC(gtc_quaternion)\nglmCreateTestGTC(gtc_random)\nglmCreateTestGTC(gtc_round)\nglmCreateTestGTC(gtc_reciprocal)\nglmCreateTestGTC(gtc_type_aligned)\nglmCreateTestGTC(gtc_type_precision)\nglmCreateTestGTC(gtc_type_ptr)\nglmCreateTestGTC(gtc_ulp)\nglmCreateTestGTC(gtc_vec1)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_bitfield.cpp",
    "content": "#include <glm/gtc/bitfield.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/integer.hpp>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n\nnamespace mask\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tinline int mask_zero(int Bits)\n\t{\n\t\treturn ~((~0) << Bits);\n\t}\n\n\tinline int mask_mix(int Bits)\n\t{\n\t\treturn Bits >= sizeof(int) * 8 ? 0xffffffff : (static_cast<int>(1) << Bits) - static_cast<int>(1);\n\t}\n\n\tinline int mask_half(int Bits)\n\t{\n\t\t// We do the shift in two steps because 1 << 32 on an int is undefined.\n\n\t\tint const Half = Bits >> 1;\n\t\tint const Fill = ~0;\n\t\tint const ShiftHaft = (Fill << Half);\n\t\tint const Rest = Bits - Half;\n\t\tint const Reversed = ShiftHaft << Rest;\n\n\t\treturn ~Reversed;\n\t}\n\n\tinline int mask_loop(int Bits)\n\t{\n\t\tint Mask = 0;\n\t\tfor(int Bit = 0; Bit < Bits; ++Bit)\n\t\t\tMask |= (static_cast<int>(1) << Bit);\n\t\treturn Mask;\n\t}\n\n\tint perf()\n\t{\n\t\tint const Count = 100000000;\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_mix(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_loop(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = glm::mask(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_zero(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_half(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp6 = std::clock();\n\n\t\tstd::clock_t TimeMix = Timestamp2 - Timestamp1;\n\t\tstd::clock_t TimeLoop = Timestamp3 - Timestamp2;\n\t\tstd::clock_t TimeDefault = Timestamp4 - Timestamp3;\n\t\tstd::clock_t TimeZero = Timestamp5 - Timestamp4;\n\t\tstd::clock_t TimeHalf = Timestamp6 - Timestamp5;\n\n\t\tstd::printf(\"mask[mix]: %d\\n\", static_cast<unsigned int>(TimeMix));\n\t\tstd::printf(\"mask[loop]: %d\\n\", static_cast<unsigned int>(TimeLoop));\n\t\tstd::printf(\"mask[default]: %d\\n\", static_cast<unsigned int>(TimeDefault));\n\t\tstd::printf(\"mask[zero]: %d\\n\", static_cast<unsigned int>(TimeZero));\n\t\tstd::printf(\"mask[half]: %d\\n\", static_cast<unsigned int>(TimeHalf));\n\n\t\treturn TimeDefault < TimeLoop ? 0 : 1;\n\t}\n\n\tint test_uint()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{ 0, 0x00000000},\n\t\t\t{ 1, 0x00000001},\n\t\t\t{ 2, 0x00000003},\n\t\t\t{ 3, 0x00000007},\n\t\t\t{31, 0x7fffffff},\n\t\t\t{32, 0xffffffff}\n\t\t};\n\n\t\tint Error = 0;\n/* mask_zero is sadly not a correct code\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_zero(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n*/\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_mix(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_half(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_loop(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = glm::mask(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uvec4()\n\t{\n\t\ttype<glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4( 0), glm::ivec4(0x00000000)},\n\t\t\t{glm::ivec4( 1), glm::ivec4(0x00000001)},\n\t\t\t{glm::ivec4( 2), glm::ivec4(0x00000003)},\n\t\t\t{glm::ivec4( 3), glm::ivec4(0x00000007)},\n\t\t\t{glm::ivec4(31), glm::ivec4(0x7fffffff)},\n\t\t\t{glm::ivec4(32), glm::ivec4(0xffffffff)}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::ivec4>); i < n; ++i)\n\t\t{\n\t\t\tglm::ivec4 Result = glm::mask(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_uint();\n\t\tError += test_uvec4();\n\n\t\treturn Error;\n\t}\n}//namespace mask\n\nnamespace bitfieldInterleave3\n{\n\ttemplate<typename PARAM, typename RET>\n\tinline RET refBitfieldInterleave(PARAM x, PARAM y, PARAM z)\n\t{\n\t\tRET Result = 0; \n\t\tfor(RET i = 0; i < sizeof(PARAM) * 8; ++i)\n\t\t{\n\t\t\tResult |= ((RET(x) & (RET(1U) << i)) << ((i << 1) + 0));\n\t\t\tResult |= ((RET(y) & (RET(1U) << i)) << ((i << 1) + 1));\n\t\t\tResult |= ((RET(z) & (RET(1U) << i)) << ((i << 1) + 2));\n\t\t}\n\t\treturn Result;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::uint16 x_max = 1 << 11;\n\t\tglm::uint16 y_max = 1 << 11;\n\t\tglm::uint16 z_max = 1 << 11;\n\n\t\tfor(glm::uint16 z = 0; z < z_max; z += 27)\n\t\tfor(glm::uint16 y = 0; y < y_max; y += 27)\n\t\tfor(glm::uint16 x = 0; x < x_max; x += 27)\n\t\t{\n\t\t\tglm::uint64 ResultA = refBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z);\n\t\t\tglm::uint64 ResultB = glm::bitfieldInterleave(x, y, z);\n\t\t\tError += ResultA == ResultB ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}\n\nnamespace bitfieldInterleave4\n{\n\ttemplate<typename PARAM, typename RET>\n\tinline RET loopBitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w)\n\t{\n\t\tRET const v[4] = {x, y, z, w};\n\t\tRET Result = 0; \n\t\tfor(RET i = 0; i < sizeof(PARAM) * 8; i++)\n\t\t{\n\t\t\tResult |= ((((v[0] >> i) & 1U)) << ((i << 2) + 0));\n\t\t\tResult |= ((((v[1] >> i) & 1U)) << ((i << 2) + 1));\n\t\t\tResult |= ((((v[2] >> i) & 1U)) << ((i << 2) + 2));\n\t\t\tResult |= ((((v[3] >> i) & 1U)) << ((i << 2) + 3));\n\t\t}\n\t\treturn Result;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::uint16 x_max = 1 << 11;\n\t\tglm::uint16 y_max = 1 << 11;\n\t\tglm::uint16 z_max = 1 << 11;\n\t\tglm::uint16 w_max = 1 << 11;\n\n\t\tfor(glm::uint16 w = 0; w < w_max; w += 27)\n\t\tfor(glm::uint16 z = 0; z < z_max; z += 27)\n\t\tfor(glm::uint16 y = 0; y < y_max; y += 27)\n\t\tfor(glm::uint16 x = 0; x < x_max; x += 27)\n\t\t{\n\t\t\tglm::uint64 ResultA = loopBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z, w);\n\t\t\tglm::uint64 ResultB = glm::bitfieldInterleave(x, y, z, w);\n\t\t\tError += ResultA == ResultB ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}\n\nnamespace bitfieldInterleave\n{\n\tinline glm::uint64 fastBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1;\n\t\tglm::uint64 REG2;\n\n\t\tREG1 = x;\n\t\tREG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\tREG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\n\t\tREG2 = y;\n\t\tREG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tREG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\tinline glm::uint64 interleaveBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1;\n\t\tglm::uint64 REG2;\n\n\t\tREG1 = x;\n\t\tREG2 = y;\n\n\t\tREG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n/*\n\tinline glm::uint64 loopBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tstatic glm::uint64 const Mask[5] = \n\t\t{\n\t\t\t0x5555555555555555,\n\t\t\t0x3333333333333333,\n\t\t\t0x0F0F0F0F0F0F0F0F,\n\t\t\t0x00FF00FF00FF00FF,\n\t\t\t0x0000FFFF0000FFFF\n\t\t};\n\n\t\tglm::uint64 REG1 = x;\n\t\tglm::uint64 REG2 = y;\n\t\tfor(int i = 4; i >= 0; --i)\n\t\t{\n\t\t\tREG1 = ((REG1 << (1 << i)) | REG1) & Mask[i];\n\t\t\tREG2 = ((REG2 << (1 << i)) | REG2) & Mask[i];\n\t\t}\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n*/\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\tinline glm::uint64 sseBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\t__m128i const Array = _mm_set_epi32(0, y, 0, x);\n\n\t\t__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\t\t__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\t\t__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\t\t__m128i const Mask1 = _mm_set1_epi32(0x33333333);\n\t\t__m128i const Mask0 = _mm_set1_epi32(0x55555555);\n\n\t\t__m128i Reg1;\n\t\t__m128i Reg2;\n\n\t\t// REG1 = x;\n\t\t// REG2 = y;\n\t\tReg1 = _mm_load_si128(&Array);\n\n\t\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tReg2 = _mm_slli_si128(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tReg2 = _mm_slli_si128(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tReg2 = _mm_slli_epi32(Reg1, 4);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tReg2 = _mm_slli_epi32(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t\t//return REG1 | (REG2 << 1);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg2 = _mm_srli_si128(Reg2, 8);\n\t\tReg1 = _mm_or_si128(Reg1, Reg2);\n\t\n\t\t__m128i Result;\n\t\t_mm_store_si128(&Result, Reg1);\n\t\treturn *reinterpret_cast<glm::uint64*>(&Result);\n\t}\n\n\tinline glm::uint64 sseUnalignedBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\t__m128i const Array = _mm_set_epi32(0, y, 0, x);\n\n\t\t__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\t\t__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\t\t__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\t\t__m128i const Mask1 = _mm_set1_epi32(0x33333333);\n\t\t__m128i const Mask0 = _mm_set1_epi32(0x55555555);\n\n\t\t__m128i Reg1;\n\t\t__m128i Reg2;\n\n\t\t// REG1 = x;\n\t\t// REG2 = y;\n\t\tReg1 = _mm_loadu_si128(&Array);\n\n\t\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tReg2 = _mm_slli_si128(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tReg2 = _mm_slli_si128(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tReg2 = _mm_slli_epi32(Reg1, 4);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tReg2 = _mm_slli_epi32(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t\t//return REG1 | (REG2 << 1);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg2 = _mm_srli_si128(Reg2, 8);\n\t\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\t\t__m128i Result;\n\t\t_mm_store_si128(&Result, Reg1);\n\t\treturn *reinterpret_cast<glm::uint64*>(&Result);\n\t}\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n/*\n\t\t{\n\t\t\tfor(glm::uint32 y = 0; y < (1 << 10); ++y)\n\t\t\tfor(glm::uint32 x = 0; x < (1 << 10); ++x)\n\t\t\t{\n\t\t\t\tglm::uint64 A = glm::bitfieldInterleave(x, y);\n\t\t\t\tglm::uint64 B = fastBitfieldInterleave(x, y);\n\t\t\t\t//glm::uint64 C = loopBitfieldInterleave(x, y);\n\t\t\t\tglm::uint64 D = interleaveBitfieldInterleave(x, y);\n\n\t\t\t\tassert(A == B);\n\t\t\t\t//assert(A == C);\n\t\t\t\tassert(A == D);\n\n#\t\t\t\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t\t\t\tglm::uint64 E = sseBitfieldInterleave(x, y);\n\t\t\t\t\tglm::uint64 F = sseUnalignedBitfieldInterleave(x, y);\n\t\t\t\t\tassert(A == E);\n\t\t\t\t\tassert(A == F);\n\n\t\t\t\t\t__m128i G = glm_i128_interleave(_mm_set_epi32(0, y, 0, x));\n\t\t\t\t\tglm::uint64 Result[2];\n\t\t\t\t\t_mm_storeu_si128((__m128i*)Result, G);\n\t\t\t\t\tassert(A == Result[0]);\n#\t\t\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t\t}\n\t\t}\n*/\n\t\t{\n\t\t\tfor(glm::uint8 y = 0; y < 127; ++y)\n\t\t\tfor(glm::uint8 x = 0; x < 127; ++x)\n\t\t\t{\n\t\t\t\tglm::uint64 A(glm::bitfieldInterleave(glm::u8vec2(x, y)));\n\t\t\t\tglm::uint64 B(glm::bitfieldInterleave(glm::u16vec2(x, y)));\n\t\t\t\tglm::uint64 C(glm::bitfieldInterleave(glm::u32vec2(x, y)));\n\n\t\t\t\tError += A == B ? 0 : 1;\n\t\t\t\tError += A == C ? 0 : 1;\n\n\t\t\t\tglm::u32vec2 const& D = glm::bitfieldDeinterleave(C);\n\t\t\t\tError += D.x == x ? 0 : 1;\n\t\t\t\tError += D.y == y ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tfor(glm::uint8 y = 0; y < 127; ++y)\n\t\t\tfor(glm::uint8 x = 0; x < 127; ++x)\n\t\t\t{\n\t\t\t\tglm::int64 A(glm::bitfieldInterleave(glm::int8(x), glm::int8(y)));\n\t\t\t\tglm::int64 B(glm::bitfieldInterleave(glm::int16(x), glm::int16(y)));\n\t\t\t\tglm::int64 C(glm::bitfieldInterleave(glm::int32(x), glm::int32(y)));\n\n\t\t\t\tError += A == B ? 0 : 1;\n\t\t\t\tError += A == C ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tglm::uint32 x_max = 1 << 11;\n\t\tglm::uint32 y_max = 1 << 10;\n\n\t\t// ALU\n\t\tstd::vector<glm::uint64> Data(x_max * y_max);\n\t\tstd::vector<glm::u32vec2> Param(x_max * y_max);\n\t\tfor(glm::uint32 i = 0; i < Param.size(); ++i)\n\t\t\tParam[i] = glm::u32vec2(i % x_max, i / y_max);\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"glm::bitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = fastBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"fastBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n/*\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = loopBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"loopBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n*/\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = interleaveBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"interleaveBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n#\t\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = sseBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"sseBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = sseUnalignedBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"sseUnalignedBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y, Param[i].x);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"glm::detail::bitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n#\t\tif(GLM_ARCH & GLM_ARCH_SSE2_BIT && !(GLM_COMPILER & GLM_COMPILER_GCC))\n\t\t{\n\t\t\t// SIMD\n\t\t\tstd::vector<__m128i> SimdData;\n\t\t\tSimdData.resize(static_cast<std::size_t>(x_max * y_max));\n\t\t\tstd::vector<__m128i> SimdParam;\n\t\t\tSimdParam.resize(static_cast<std::size_t>(x_max * y_max));\n\t\t\tfor(std::size_t i = 0; i < SimdParam.size(); ++i)\n\t\t\t\tSimdParam[i] = _mm_set_epi32(static_cast<int>(i % static_cast<std::size_t>(x_max)), 0, static_cast<int>(i / static_cast<std::size_t>(y_max)), 0);\n\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < SimdData.size(); ++i)\n\t\t\t\tSimdData[i] = glm_i128_interleave(SimdParam[i]);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"_mm_bit_interleave_si128 Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\t\treturn 0;\n\t}\n}//namespace bitfieldInterleave\n\nnamespace bitfieldInterleave5\n{\n\tGLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave_u8vec2(glm::uint8 x, glm::uint8 y)\n\t{\n\t\tglm::uint32 Result = (glm::uint32(y) << 16) | glm::uint32(x);\n\t\tResult = ((Result <<  4) | Result) & 0x0F0F0F0F;\n\t\tResult = ((Result <<  2) | Result) & 0x33333333;\n\t\tResult = ((Result <<  1) | Result) & 0x55555555;\n\t\treturn static_cast<glm::uint16>((Result & 0x0000FFFF) | (Result >> 15));\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u8vec2 bitfieldDeinterleave_u8vec2(glm::uint16 InterleavedBitfield)\n\t{\n\t\tglm::uint32 Result(InterleavedBitfield);\n\t\tResult = ((Result << 15) | Result) & 0x55555555;\n\t\tResult = ((Result >>  1) | Result) & 0x33333333;\n\t\tResult = ((Result >>  2) | Result) & 0x0F0F0F0F;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF00FF;\n\t\treturn glm::u8vec2(Result & 0x0000FFFF, Result >> 16);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave_u8vec4(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w)\n\t{\n\t\tglm::uint64 Result = (glm::uint64(w) << 48) | (glm::uint64(z) << 32) | (glm::uint64(y) << 16) | glm::uint64(x);\n\t\tResult = ((Result << 12) | Result) & 0x000F000F000F000Full;\n\t\tResult = ((Result <<  6) | Result) & 0x0303030303030303ull;\n\t\tResult = ((Result <<  3) | Result) & 0x1111111111111111ull;\n\n\t\tconst glm::uint32 a = static_cast<glm::uint32>((Result & 0x000000000000FFFF) >> ( 0 - 0));\n\t\tconst glm::uint32 b = static_cast<glm::uint32>((Result & 0x00000000FFFF0000) >> (16 - 3));\n\t\tconst glm::uint32 c = static_cast<glm::uint32>((Result & 0x0000FFFF00000000) >> (32 - 6));\n\t\tconst glm::uint32 d = static_cast<glm::uint32>((Result & 0xFFFF000000000000) >> (48 - 12));\n\n\t\treturn a | b | c | d;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u8vec4 bitfieldDeinterleave_u8vec4(glm::uint32 InterleavedBitfield)\n\t{\n\t\tglm::uint64 Result(InterleavedBitfield);\n\t\tResult = ((Result << 15) | Result) & 0x9249249249249249ull;\n\t\tResult = ((Result >>  1) | Result) & 0x30C30C30C30C30C3ull;\n\t\tResult = ((Result >>  2) | Result) & 0xF00F00F00F00F00Full;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF0000FF0000FFull;\n\t\treturn glm::u8vec4(\n\t\t\t(Result >> 0) & 0x000000000000FFFFull,\n\t\t\t(Result >> 16) & 0x00000000FFFF0000ull,\n\t\t\t(Result >> 32) & 0x0000FFFF00000000ull,\n\t\t\t(Result >> 48) & 0xFFFF000000000000ull);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave_u16vec2(glm::uint16 x, glm::uint16 y)\n\t{\n\t\tglm::uint64 Result = (glm::uint64(y) << 32) | glm::uint64(x);\n\t\tResult = ((Result <<  8) | Result) & static_cast<glm::uint32>(0x00FF00FF00FF00FFull);\n\t\tResult = ((Result <<  4) | Result) & static_cast<glm::uint32>(0x0F0F0F0F0F0F0F0Full);\n\t\tResult = ((Result <<  2) | Result) & static_cast<glm::uint32>(0x3333333333333333ull);\n\t\tResult = ((Result <<  1) | Result) & static_cast<glm::uint32>(0x5555555555555555ull);\n\t\treturn static_cast<glm::uint32>((Result & 0x00000000FFFFFFFFull) | (Result >> 31));\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave_u16vec2(glm::uint32 InterleavedBitfield)\n\t{\n\t\tglm::uint64 Result(InterleavedBitfield);\n\t\tResult = ((Result << 31) | Result) & 0x5555555555555555ull;\n\t\tResult = ((Result >>  1) | Result) & 0x3333333333333333ull;\n\t\tResult = ((Result >>  2) | Result) & 0x0F0F0F0F0F0F0F0Full;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF00FF00FF00FFull;\n\t\tResult = ((Result >>  8) | Result) & 0x0000FFFF0000FFFFull;\n\t\treturn glm::u16vec2(Result & 0x00000000FFFFFFFFull, Result >> 32);\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint16 A = bitfieldInterleave_u8vec2(glm::uint8(i), glm::uint8(j));\n\t\t\tglm::uint16 B = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j));\n\t\t\tError += A == B ? 0 : 1;\n\n\t\t\tglm::u8vec2 C = bitfieldDeinterleave_u8vec2(A);\n\t\t\tError += C.x == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.y == glm::uint8(j) ? 0 : 1;\n\t\t}\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint32 A = bitfieldInterleave_u8vec4(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\tglm::uint32 B = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\tError += A == B ? 0 : 1;\n/*\n\t\t\tglm::u8vec4 C = bitfieldDeinterleave_u8vec4(A);\n\t\t\tError += C.x == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.y == glm::uint8(j) ? 0 : 1;\n\t\t\tError += C.z == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.w == glm::uint8(j) ? 0 : 1;\n*/\n\t\t}\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint32 A = bitfieldInterleave_u16vec2(glm::uint16(i), glm::uint16(j));\n\t\t\tglm::uint32 B = glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j));\n\t\t\tError += A == B ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u8vec2(std::vector<glm::uint16>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\t\t\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u8vec2> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u8vec2(std::vector<glm::uint16>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u8vec2(glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u8vec2 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u8vec4(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u8vec4> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u8vec4(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u8vec4(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u8vec4 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u16vec2(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u16vec2> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u16vec2(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u16vec2(glm::uint16(i), glm::uint16(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u16vec2 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error = 0;\n\n\t\tstd::printf(\"bitfieldInterleave perf: init\\r\");\n\n\t\tstd::vector<glm::uint16> Result_u8vec2(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u8vec2[j * 256 + i] = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j));\n\n\t\tError += perf_old_u8vec2(Result_u8vec2);\n\t\tError += perf_new_u8vec2(Result_u8vec2);\n\n\t\tstd::vector<glm::uint32> Result_u8vec4(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u8vec4[j * 256 + i] = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\n\t\tError += perf_old_u8vec4(Result_u8vec4);\n\t\tError += perf_new_u8vec4(Result_u8vec4);\n\n\t\tstd::vector<glm::uint32> Result_u16vec2(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u16vec2[j * 256 + i] = glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j));\n\n\t\tError += perf_old_u16vec2(Result_u16vec2);\n\t\tError += perf_new_u16vec2(Result_u16vec2);\n\n\t\tstd::printf(\"bitfieldInterleave perf: %d Errors\\n\", Error);\n\n\t\treturn Error;\n\t}\n\n}//namespace bitfieldInterleave5\n\nstatic int test_bitfieldRotateRight()\n{\n\tglm::ivec4 const A = glm::bitfieldRotateRight(glm::ivec4(2), 1);\n\tglm::ivec4 const B = glm::ivec4(2) >> 1;\n\n\treturn A == B;\n}\n\nstatic int test_bitfieldRotateLeft()\n{\n\tglm::ivec4 const A = glm::bitfieldRotateLeft(glm::ivec4(2), 1);\n\tglm::ivec4 const B = glm::ivec4(2) << 1;\n\n\treturn A == B;\n}\n\nint main()\n{\n\tint Error = 0;\n\n/* Tests for a faster and to reserve bitfieldInterleave\n\tError += ::bitfieldInterleave5::test();\n\tError += ::bitfieldInterleave5::perf();\n*/\n\tError += ::mask::test();\n\tError += ::bitfieldInterleave3::test();\n\tError += ::bitfieldInterleave4::test();\n\tError += ::bitfieldInterleave::test();\n\n\tError += test_bitfieldRotateRight();\n\tError += test_bitfieldRotateLeft();\n\n#\tifdef NDEBUG\n\t\tError += ::mask::perf();\n\t\tError += ::bitfieldInterleave::perf();\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_color_space.cpp",
    "content": "#include <glm/gtc/color_space.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n\nnamespace srgb\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);\n\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceGNI = glm::vec4(107, 107, 104, 131) / glm::vec4(255);\n\n\t\t{\n\t\t\tglm::vec4 const ColorGNA = glm::convertSRGBToLinear(ColorSourceGNI) * glm::vec4(255);\n\t\t\tglm::vec4 const ColorGNE = glm::convertLinearToSRGB(ColorSourceGNI) * glm::vec4(255);\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceGNI);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceGNI, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb\n\nnamespace srgb_lowp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfor(float Color = 0.0f; Color < 1.0f; Color += 0.01f)\n\t\t{\n\t\t\tglm::highp_vec3 const HighpSRGB = glm::convertLinearToSRGB(glm::highp_vec3(Color));\n\t\t\tglm::lowp_vec3 const LowpSRGB = glm::convertLinearToSRGB(glm::lowp_vec3(Color));\n\t\t\tError += glm::all(glm::epsilonEqual(glm::abs(HighpSRGB - glm::highp_vec3(LowpSRGB)), glm::highp_vec3(0), 0.1f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb_lowp\n\nint main()\n{\n\tint Error(0);\n\n\tError += srgb::test();\n\tError += srgb_lowp::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_constants.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n\nint test_epsilon()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat Test = glm::epsilon<float>();\n\t\tError += Test > 0.0f ? 0 : 1;\n\t}\n\n\t{\n\t\tdouble Test = glm::epsilon<double>();\n\t\tError += Test > 0.0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\t//float MinHalf = 0.0f;\n\t//while (glm::half(MinHalf) == glm::half(0.0f))\n\t//\tMinHalf += std::numeric_limits<float>::epsilon();\n\tError += test_epsilon();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_epsilon.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/vector_relational.hpp>\n\nint test_defined()\n{\n\tglm::epsilonEqual(glm::vec2(), glm::vec2(), glm::vec2());\n\tglm::epsilonEqual(glm::vec3(), glm::vec3(), glm::vec3());\n\tglm::epsilonEqual(glm::vec4(), glm::vec4(), glm::vec4());\n\n\tglm::epsilonNotEqual(glm::vec2(), glm::vec2(), glm::vec2());\n\tglm::epsilonNotEqual(glm::vec3(), glm::vec3(), glm::vec3());\n\tglm::epsilonNotEqual(glm::vec4(), glm::vec4(), glm::vec4());\n\t\n\tglm::epsilonEqual(glm::vec2(), glm::vec2(), 0.0f);\n\tglm::epsilonEqual(glm::vec3(), glm::vec3(), 0.0f);\n\tglm::epsilonEqual(glm::vec4(), glm::vec4(), 0.0f);\n\tglm::epsilonEqual(glm::quat(), glm::quat(), 0.0f);\n\n\tglm::epsilonNotEqual(glm::vec2(), glm::vec2(), 0.0f);\n\tglm::epsilonNotEqual(glm::vec3(), glm::vec3(), 0.0f);\n\tglm::epsilonNotEqual(glm::vec4(), glm::vec4(), 0.0f);\n\tglm::epsilonNotEqual(glm::quat(), glm::quat(), 0.0f);\n\n\treturn 0;\n}\n\ntemplate<typename T>\nint test_equal()\n{\n\tint Error(0);\n\t\n\t{\n\t\tT A = glm::epsilon<T>();\n\t\tT B = glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A(0);\n\t\tT B = static_cast<T>(0) + glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A(0);\n\t\tT B = static_cast<T>(0) - glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A = static_cast<T>(0) + glm::epsilon<T>();\n\t\tT B = static_cast<T>(0);\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A = static_cast<T>(0) - glm::epsilon<T>();\n\t\tT B = static_cast<T>(0);\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_defined();\n\tError += test_equal<float>();\n\tError += test_equal<double>();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_integer.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#define GLM_FORCE_INLINE\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtx/type_aligned.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n#include <cmath>\n\nnamespace log2_\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tint A0 = static_cast<int>(glm::log2(16.f));\n\t\tglm::ivec1 B0(glm::log2(glm::vec1(16.f)));\n\t\tglm::ivec2 C0(glm::log2(glm::vec2(16.f)));\n\t\tglm::ivec3 D0(glm::log2(glm::vec3(16.f)));\n\t\tglm::ivec4 E0(glm::log2(glm::vec4(16.f)));\n\n\t\tint A1 = glm::log2(int(16));\n\t\tglm::ivec1 B1 = glm::log2(glm::ivec1(16));\n\t\tglm::ivec2 C1 = glm::log2(glm::ivec2(16));\n\t\tglm::ivec3 D1 = glm::log2(glm::ivec3(16));\n\t\tglm::ivec4 E1 = glm::log2(glm::ivec4(16));\n\n\t\tError += A0 == A1 ? 0 : 1;\n\t\tError += glm::all(glm::equal(B0, B1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(C0, C1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(D0, D1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(E0, E1)) ? 0 : 1;\n\n\t\tglm::uint64 A2 = glm::log2(glm::uint64(16));\n\t\tglm::u64vec1 B2 = glm::log2(glm::u64vec1(16));\n\t\tglm::u64vec2 C2 = glm::log2(glm::u64vec2(16));\n\t\tglm::u64vec3 D2 = glm::log2(glm::u64vec3(16));\n\t\tglm::u64vec4 E2 = glm::log2(glm::u64vec4(16));\n\n\t\tError += A2 == glm::uint64(4) ? 0 : 1;\n\t\tError += glm::all(glm::equal(B2, glm::u64vec1(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(C2, glm::u64vec2(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(D2, glm::u64vec3(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(E2, glm::u64vec4(4))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t Count)\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tstd::vector<int> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(static_cast<int>(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<int>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(glm::ivec4(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\tglm::vec<4, unsigned long, glm::defaultp> Tmp;\n\t\t\t\t_BitScanReverse(&Tmp.x, i);\n\t\t\t\t_BitScanReverse(&Tmp.y, i);\n\t\t\t\t_BitScanReverse(&Tmp.z, i);\n\t\t\t\t_BitScanReverse(&Tmp.w, i);\n\t\t\t\tResult[i] = glm::ivec4(Tmp);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> inlined: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\n\t\t{\n\t\t\tstd::vector<glm::vec<4, unsigned long, glm::defaultp> > Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\t_BitScanReverse(&Result[i].x, i);\n\t\t\t\t_BitScanReverse(&Result[i].y, i);\n\t\t\t\t_BitScanReverse(&Result[i].z, i);\n\t\t\t\t_BitScanReverse(&Result[i].w, i);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> inlined no cast: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].x), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].y), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].z), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].w), i);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> reinterpret: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\t{\n\t\t\tstd::vector<float> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t\tResult[i] = glm::log2(static_cast<float>(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<float>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\t{\n\t\t\tstd::vector<glm::vec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(glm::vec4(static_cast<float>(i)));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<vec4>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace log2_\n\nnamespace iround\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t\t{\n\t\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace iround\n\nnamespace uround\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t\t{\n\t\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace uround\n\nint main()\n{\n\tint Error(0);\n\n\tError += ::log2_::test();\n\tError += ::iround::test();\n\tError += ::uround::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t const Samples(1000);\n\t\tError += ::log2_::perf(Samples);\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_matrix_access.cpp",
    "content": "#include <glm/ext/vector_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/matrix_access.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n\nint test_mat2x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\tm = glm::row(m, 2, glm::vec2( 8,  9));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x4 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\tm = glm::row(m, 2, glm::vec2( 8,  9));\n\tm = glm::row(m, 3, glm::vec2(12, 13));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec2(12, 13), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2, 3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6, 7));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2, 3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\tm = glm::column(m, 2, glm::vec2( 8,  9));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::row(m, 2, glm::vec3( 8,  9, 10));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::column(m, 2, glm::vec3( 8,  9, 10));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x4 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::row(m, 2, glm::vec3( 8,  9, 10));\n\tm = glm::row(m, 3, glm::vec3(12, 13, 14));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec3(12, 13, 14), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2, 3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6, 7));\n\tm = glm::column(m, 2, glm::vec4( 8,  9, 10, 11));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2, 3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6, 7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\tm = glm::column(m, 2, glm::vec2( 8,  9));\n\tm = glm::column(m, 3, glm::vec2(12, 13));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec2(12, 13), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::row(m, 2, glm::vec4( 8,  9, 10, 11));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::column(m, 2, glm::vec3( 8,  9, 10));\n\tm = glm::column(m, 3, glm::vec3(12, 13, 14));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec3(12, 13, 14), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::row(m, 2, glm::vec4( 8,  9, 10, 11));\n\tm = glm::row(m, 3, glm::vec4(12, 13, 14, 15));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec4(12, 13, 14, 15), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::column(m, 2, glm::vec4( 8,  9, 10, 11));\n\tm = glm::column(m, 3, glm::vec4(12, 13, 14, 15));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec4(12, 13, 14, 15), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_row_get()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tglm::vec4 A = glm::row(m, 0);\n\tError += glm::all(glm::equal(A, glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 B = glm::row(m, 1);\n\tError += glm::all(glm::equal(B, glm::vec4(0, 1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 C = glm::row(m, 2);\n\tError += glm::all(glm::equal(C, glm::vec4(0, 0, 1, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 D = glm::row(m, 3);\n\tError += glm::all(glm::equal(D, glm::vec4(0, 0, 0, 1), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_col_get()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tglm::vec4 A = glm::column(m, 0);\n\tError += glm::all(glm::equal(A, glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 B = glm::column(m, 1);\n\tError += glm::all(glm::equal(B, glm::vec4(0, 1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 C = glm::column(m, 2);\n\tError += glm::all(glm::equal(C, glm::vec4(0, 0, 1, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 D = glm::column(m, 3);\n\tError += glm::all(glm::equal(D, glm::vec4(0, 0, 0, 1), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mat2x2_row_set();\n\tError += test_mat2x2_col_set();\n\tError += test_mat2x3_row_set();\n\tError += test_mat2x3_col_set();\n\tError += test_mat2x4_row_set();\n\tError += test_mat2x4_col_set();\n\tError += test_mat3x2_row_set();\n\tError += test_mat3x2_col_set();\n\tError += test_mat3x3_row_set();\n\tError += test_mat3x3_col_set();\n\tError += test_mat3x4_row_set();\n\tError += test_mat3x4_col_set();\n\tError += test_mat4x2_row_set();\n\tError += test_mat4x2_col_set();\n\tError += test_mat4x3_row_set();\n\tError += test_mat4x3_col_set();\n\tError += test_mat4x4_row_set();\n\tError += test_mat4x4_col_set();\n\n\tError += test_mat4x4_row_get();\n\tError += test_mat4x4_col_get();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_matrix_integer.cpp",
    "content": "#include <glm/gtc/matrix_integer.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_matrix_inverse.cpp",
    "content": "#include <glm/gtc/matrix_inverse.hpp>\n#include <glm/gtc/epsilon.hpp>\n\nint test_affine()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat3 const M(\n\t\t\t2.f, 0.f, 0.f,\n\t\t\t0.f, 2.f, 0.f,\n\t\t\t0.f, 0.f, 1.f);\n\t\tglm::mat3 const A = glm::affineInverse(M);\n\t\tglm::mat3 const I = glm::inverse(M);\n\t\tglm::mat3 const R = glm::affineInverse(A);\n\n\t\tfor(glm::length_t i = 0; i < A.length(); ++i)\n\t\t{\n\t\t\tError += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;\n\t\t}\n\t}\n\n\t{\n\t\tglm::mat4 const M(\n\t\t\t2.f, 0.f, 0.f, 0.f,\n\t\t\t0.f, 2.f, 0.f, 0.f,\n\t\t\t0.f, 0.f, 2.f, 0.f,\n\t\t\t0.f, 0.f, 0.f, 1.f);\n\t\tglm::mat4 const A = glm::affineInverse(M);\n\t\tglm::mat4 const I = glm::inverse(M);\n\t\tglm::mat4 const R = glm::affineInverse(A);\n\n\t\tfor(glm::length_t i = 0; i < A.length(); ++i)\n\t\t{\n\t\t\tError += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;\n\t\t}\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_affine();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_matrix_transform.cpp",
    "content": "#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/matrix_relational.hpp>\n\nint test_perspective()\n{\n\tint Error = 0;\n\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.0f);\n\n\treturn Error;\n}\n\nint test_pick()\n{\n\tint Error = 0;\n\n\tglm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));\n\n\treturn Error;\n}\n\nint test_tweakedInfinitePerspective()\n{\n\tint Error = 0;\n\n\tglm::mat4 ProjectionA = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f);\n\tglm::mat4 ProjectionB = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f, 0.001f);\n\n\n\treturn Error;\n}\n\nint test_translate()\n{\n\tint Error = 0;\n\n\tglm::lowp_vec3 v(1.0);\n\tglm::lowp_mat4 m(0);\n\tglm::lowp_mat4 t = glm::translate(m, v);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_translate();\n\tError += test_tweakedInfinitePerspective();\n\tError += test_pick();\n\tError += test_perspective();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_noise.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/noise.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/raw_data.hpp>\n\nstatic int test_simplex_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelSimplex2D(glm::byte(glm::abs(glm::simplex(glm::vec2(0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelSimplex3D(glm::byte(glm::abs(glm::simplex(glm::vec3(0.f, 0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelSimplex4D(glm::byte(glm::abs(glm::simplex(glm::vec4(0.f, 0.f, 0.f, 0.f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_simplex_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelSimplex2D(glm::byte(glm::abs(glm::simplex(glm::dvec2(0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelSimplex3D(glm::byte(glm::abs(glm::simplex(glm::dvec3(0.f, 0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelSimplex4D(glm::byte(glm::abs(glm::simplex(glm::dvec4(0.f, 0.f, 0.f, 0.f))) * 255.));\n\n\treturn Error;\n}\n\nstatic int test_perlin_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPerlin2D(glm::byte(glm::abs(glm::perlin(glm::vec2(0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelPerlin3D(glm::byte(glm::abs(glm::perlin(glm::vec3(0.f, 0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelPerlin4D(glm::byte(glm::abs(glm::perlin(glm::vec4(0.f, 0.f, 0.f, 0.f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_perlin_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPerlin2D(glm::byte(glm::abs(glm::perlin(glm::dvec2(0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelPerlin3D(glm::byte(glm::abs(glm::perlin(glm::dvec3(0.f, 0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelPerlin4D(glm::byte(glm::abs(glm::perlin(glm::dvec4(0.f, 0.f, 0.f, 0.f))) * 255.));\n\n\treturn Error;\n}\n\nstatic int test_perlin_pedioric_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPeriodic2D(glm::byte(glm::abs(glm::perlin(glm::vec2(0.f, 0.f), glm::vec2(2.0f))) * 255.f));\n\tglm::u8vec4 const PixelPeriodic3D(glm::byte(glm::abs(glm::perlin(glm::vec3(0.f, 0.f, 0.f), glm::vec3(2.0f))) * 255.f));\n\tglm::u8vec4 const PixelPeriodic4D(glm::byte(glm::abs(glm::perlin(glm::vec4(0.f, 0.f, 0.f, 0.f), glm::vec4(2.0f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_perlin_pedioric_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPeriodic2D(glm::byte(glm::abs(glm::perlin(glm::dvec2(0.f, 0.f), glm::dvec2(2.0))) * 255.));\n\tglm::u8vec4 const PixelPeriodic3D(glm::byte(glm::abs(glm::perlin(glm::dvec3(0.f, 0.f, 0.f), glm::dvec3(2.0))) * 255.));\n\tglm::u8vec4 const PixelPeriodic4D(glm::byte(glm::abs(glm::perlin(glm::dvec4(0.f, 0.f, 0.f, 0.f), glm::dvec4(2.0))) * 255.));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_simplex_float();\n\tError += test_simplex_double();\n\n\tError += test_perlin_float();\n\tError += test_perlin_double();\n\n\tError += test_perlin_pedioric_float();\n\tError += test_perlin_pedioric_double();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_packing.cpp",
    "content": "#include <glm/packing.hpp>\n#include <glm/gtc/packing.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <cstdio>\n#include <vector>\n\nvoid print_bits(float const& s)\n{\n\tunion\n\t{\n\t\tfloat f;\n\t\tunsigned int i;\n\t} uif;\n\n\tuif.f = s;\n\n\tstd::printf(\"f32: \");\n\tfor(std::size_t j = sizeof(s) * 8; j > 0; --j)\n\t{\n\t\tif(j == 23 || j == 31)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (uif.i & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_10bits(glm::uint const& s)\n{\n\tstd::printf(\"10b: \");\n\tfor(std::size_t j = 10; j > 0; --j)\n\t{\n\t\tif(j == 5)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (s & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_11bits(glm::uint const& s)\n{\n\tstd::printf(\"11b: \");\n\tfor(std::size_t j = 11; j > 0; --j)\n\t{\n\t\tif(j == 6)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (s & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_value(float const& s)\n{\n\tstd::printf(\"%2.5f, \", static_cast<double>(s));\n\tprint_bits(s);\n\tstd::printf(\", \");\n//\tprint_11bits(detail::floatTo11bit(s));\n//\tstd::printf(\", \");\n//\tprint_10bits(detail::floatTo10bit(s));\n\tstd::printf(\"\\n\");\n}\n\nint test_Half1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Tests;\n\tTests.push_back(0.0f);\n\tTests.push_back(1.0f);\n\tTests.push_back(-1.0f);\n\tTests.push_back(2.0f);\n\tTests.push_back(-2.0f);\n\tTests.push_back(1.9f);\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint16 p0 = glm::packHalf1x16(Tests[i]);\n\t\tfloat v0 = glm::unpackHalf1x16(p0);\n\t\tglm::uint16 p1 = glm::packHalf1x16(v0);\n\t\tfloat v1 = glm::unpackHalf1x16(p1);\n\t\tError += glm::epsilonEqual(v0, v1, glm::epsilon<float>()) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_Half4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(-0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint64 p0 = glm::packHalf4x16(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackHalf4x16(p0);\n\t\tglm::uint64 p1 = glm::packHalf4x16(v0);\n\t\tglm::vec4 v1 = glm::unpackHalf4x16(p1);\n\t\tglm::u16vec4 p2 = glm::packHalf(v0);\n\t\tglm::vec4 v2 = glm::unpackHalf(p2);\n\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v0, v2, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_I3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::ivec4> Tests;\n\tTests.push_back(glm::ivec4(0));\n\tTests.push_back(glm::ivec4(1));\n\tTests.push_back(glm::ivec4(-1));\n\tTests.push_back(glm::ivec4(2));\n\tTests.push_back(glm::ivec4(-2));\n\tTests.push_back(glm::ivec4(3));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packI3x10_1x2(Tests[i]);\n\t\tglm::ivec4 v0 = glm::unpackI3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packI3x10_1x2(v0);\n\t\tglm::ivec4 v1 = glm::unpackI3x10_1x2(p1);\n\t\tError += glm::all(glm::equal(v0, v1)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_U3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::uvec4> Tests;\n\tTests.push_back(glm::uvec4(0));\n\tTests.push_back(glm::uvec4(1));\n\tTests.push_back(glm::uvec4(2));\n\tTests.push_back(glm::uvec4(3));\n\tTests.push_back(glm::uvec4(4));\n\tTests.push_back(glm::uvec4(5));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packU3x10_1x2(Tests[i]);\n\t\tglm::uvec4 v0 = glm::unpackU3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packU3x10_1x2(v0);\n\t\tglm::uvec4 v1 = glm::unpackU3x10_1x2(p1);\n\t\tError += glm::all(glm::equal(v0, v1)) ? 0 : 1;\n\t}\n\n\tglm::u8vec4 const v0(0xff, 0x77, 0x0, 0x33);\n\tglm::uint32 const p0 = *reinterpret_cast<glm::uint32 const*>(&v0[0]);\n\tglm::uint32 const r0 = 0x330077ff;\n\n\tError += p0 == r0 ? 0 : 1;\n\n\tglm::uvec4 const v1(0xff, 0x77, 0x0, 0x33);\n\tglm::uint32 const p1 = glm::packU3x10_1x2(v1);\n\tglm::uint32 const r1 = 0xc001dcff;\n\n\tError += p1 == r1 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_Snorm3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packSnorm3x10_1x2(v0);\n\t\tglm::vec4 v1 = glm::unpackSnorm3x10_1x2(p1);\n\n\t\tError += glm::all(glm::epsilonEqual(v0, v1, 0.01f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_Unorm3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packUnorm3x10_1x2(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackUnorm3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packUnorm3x10_1x2(v0);\n\t\tglm::vec4 v1 = glm::unpackUnorm3x10_1x2(p1);\n\n\t\tError += glm::all(glm::epsilonEqual(v0, v1, 0.001f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_F2x11_1x10()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> Tests;\n\tTests.push_back(glm::vec3(1.0f));\n\tTests.push_back(glm::vec3(0.0f));\n\tTests.push_back(glm::vec3(2.0f));\n\tTests.push_back(glm::vec3(0.1f));\n\tTests.push_back(glm::vec3(0.5f));\n\tTests.push_back(glm::vec3(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packF2x11_1x10(Tests[i]);\n\t\tglm::vec3 v0 = glm::unpackF2x11_1x10(p0);\n\t\tglm::uint32 p1 = glm::packF2x11_1x10(v0);\n\t\tglm::vec3 v1 = glm::unpackF2x11_1x10(p1);\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_F3x9_E1x5()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> Tests;\n\tTests.push_back(glm::vec3(1.0f));\n\tTests.push_back(glm::vec3(0.0f));\n\tTests.push_back(glm::vec3(2.0f));\n\tTests.push_back(glm::vec3(0.1f));\n\tTests.push_back(glm::vec3(0.5f));\n\tTests.push_back(glm::vec3(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packF3x9_E1x5(Tests[i]);\n\t\tglm::vec3 v0 = glm::unpackF3x9_E1x5(p0);\n\t\tglm::uint32 p1 = glm::packF3x9_E1x5(v0);\n\t\tglm::vec3 v1 = glm::unpackF3x9_E1x5(p1);\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_RGBM()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 0; i < 1024; ++i)\n\t{\n\t\tglm::vec3 const Color(static_cast<float>(i));\n\t\tglm::vec4 const RGBM = glm::packRGBM(Color);\n\t\tglm::vec3 const Result= glm::unpackRGBM(RGBM);\n\n\t\tError += glm::all(glm::equal(Color, Result, 0.01f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1(1.0f));\n\tA.push_back(glm::vec1(0.5f));\n\tA.push_back(glm::vec1(0.1f));\n\tA.push_back(glm::vec1(0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm1x16(B.x);\n\t\tglm::vec1 D(glm::unpackUnorm1x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1( 1.0f));\n\tA.push_back(glm::vec1( 0.0f));\n\tA.push_back(glm::vec1(-0.5f));\n\tA.push_back(glm::vec1(-0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint16 C = glm::packSnorm1x16(B.x);\n\t\tglm::vec1 D(glm::unpackSnorm1x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(0.5f, 0.7f));\n\tA.push_back(glm::vec2(0.1f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f));\n\tA.push_back(glm::vec4(0.5f));\n\tA.push_back(glm::vec4(0.1f));\n\tA.push_back(glm::vec4(0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint64 C = glm::packUnorm4x16(B);\n\t\tglm::vec4 D(glm::unpackUnorm4x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f, -0.5f, 0.5f));\n\tA.push_back(glm::vec4(-0.3f,-0.7f,  0.3f, 0.7f));\n\tA.push_back(glm::vec4(-0.1f, 0.1f, -0.2f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint64 C = glm::packSnorm4x16(B);\n\t\tglm::vec4 D(glm::unpackSnorm4x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm1x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1(1.0f));\n\tA.push_back(glm::vec1(0.5f));\n\tA.push_back(glm::vec1(0.0f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm1x8(B.x);\n\t\tglm::vec1 D(glm::unpackUnorm1x8(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm1x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1( 1.0f));\n\tA.push_back(glm::vec1(-0.7f));\n\tA.push_back(glm::vec1(-1.0f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint8 C = glm::packSnorm1x8(B.x);\n\t\tglm::vec1 D(glm::unpackSnorm1x8(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm2x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm2x8(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.7f,-0.1f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint16 C = glm::packSnorm2x8(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));\n\tA.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackSnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::u16vec2 C = glm::packUnorm<glm::uint16>(B);\n\t\tglm::vec2 D = glm::unpackUnorm<float>(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::i16vec2 C = glm::packSnorm<glm::int16>(B);\n\t\tglm::vec2 D = glm::unpackSnorm<float>(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm2x4()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm2x4(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x4(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm4x4()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm4x4(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x4(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm3x5_1x1()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm3x5_1x1(B);\n\t\tglm::vec4 D = glm::unpackUnorm3x5_1x1(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm1x5_1x6_1x5()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> A;\n\tA.push_back(glm::vec3(1.0f, 0.7f, 0.5f));\n\tA.push_back(glm::vec3(0.5f, 0.1f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec3 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm1x5_1x6_1x5(B);\n\t\tglm::vec3 D = glm::unpackUnorm1x5_1x6_1x5(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm2x3_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> A;\n\tA.push_back(glm::vec3(1.0f, 0.7f, 0.5f));\n\tA.push_back(glm::vec3(0.5f, 0.1f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec3 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm2x3_1x2(B);\n\t\tglm::vec3 D = glm::unpackUnorm2x3_1x2(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 3.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUint2x8()\n{\n\tint Error = 0;\n\n\tglm::u8vec2 const Source(1, 2);\n\n\tglm::uint16 const Packed = glm::packUint2x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u8vec2 const Unpacked = glm::unpackUint2x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint4x8()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const Source(1, 2, 3, 4);\n\n\tglm::uint32 const Packed = glm::packUint4x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u8vec4 const Unpacked = glm::unpackUint4x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint2x16()\n{\n\tint Error = 0;\n\n\tglm::u16vec2 const Source(1, 2);\n\n\tglm::uint32 const Packed = glm::packUint2x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u16vec2 const Unpacked = glm::unpackUint2x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint4x16()\n{\n\tint Error = 0;\n\n\tglm::u16vec4 const Source(1, 2, 3, 4);\n\n\tglm::uint64 const Packed = glm::packUint4x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u16vec4 const Unpacked = glm::unpackUint4x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint2x32()\n{\n\tint Error = 0;\n\n\tglm::u32vec2 const Source(1, 2);\n\n\tglm::uint64 const Packed = glm::packUint2x32(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u32vec2 const Unpacked = glm::unpackUint2x32(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x8()\n{\n\tint Error = 0;\n\n\tglm::i8vec2 const Source(1, 2);\n\n\tglm::int16 const Packed = glm::packInt2x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i8vec2 const Unpacked = glm::unpackInt2x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt4x8()\n{\n\tint Error = 0;\n\n\tglm::i8vec4 const Source(1, 2, 3, 4);\n\n\tglm::int32 const Packed = glm::packInt4x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i8vec4 const Unpacked = glm::unpackInt4x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x16()\n{\n\tint Error = 0;\n\n\tglm::i16vec2 const Source(1, 2);\n\n\tglm::int32 const Packed = glm::packInt2x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i16vec2 const Unpacked = glm::unpackInt2x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt4x16()\n{\n\tint Error = 0;\n\n\tglm::i16vec4 const Source(1, 2, 3, 4);\n\n\tglm::int64 const Packed = glm::packInt4x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i16vec4 const Unpacked = glm::unpackInt4x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x32()\n{\n\tint Error = 0;\n\n\tglm::i32vec2 const Source(1, 2);\n\n\tglm::int64 const Packed = glm::packInt2x32(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i32vec2 const Unpacked = glm::unpackInt2x32(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\tError += test_packSnorm1x16();\n\tError += test_packSnorm2x16();\n\tError += test_packSnorm4x16();\n\n\tError += test_packSnorm1x8();\n\tError += test_packSnorm2x8();\n\tError += test_packSnorm4x8();\n\n\tError += test_packUnorm1x16();\n\tError += test_packUnorm2x16();\n\tError += test_packUnorm4x16();\n\n\tError += test_packUnorm1x8();\n\tError += test_packUnorm2x8();\n\tError += test_packUnorm4x8();\n\n\tError += test_packUnorm2x4();\n\tError += test_packUnorm4x4();\n\tError += test_packUnorm3x5_1x1();\n\tError += test_packUnorm1x5_1x6_1x5();\n\tError += test_packUnorm2x3_1x2();\n\n\tError += test_packUint2x8();\n\tError += test_packUint4x8();\n\tError += test_packUint2x16();\n\tError += test_packUint4x16();\n\tError += test_packUint2x32();\n\n\tError += test_packInt2x8();\n\tError += test_packInt4x8();\n\tError += test_packInt2x16();\n\tError += test_packInt4x16();\n\tError += test_packInt2x32();\n\n\tError += test_F2x11_1x10();\n\tError += test_F3x9_E1x5();\n\tError += test_RGBM();\n\tError += test_Unorm3x10_1x2();\n\tError += test_Snorm3x10_1x2();\n\n\tError += test_I3x10_1x2();\n\tError += test_U3x10_1x2();\n\tError += test_Half1x16();\n\tError += test_Half4x16();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_quaternion.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/glm.hpp>\n#include <vector>\n\nint test_quat_angle()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(0, 1, 1)));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(1, 2, 3)));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_angleAxis()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.f, glm::vec3(0.f, 0.f, 1.f));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::mix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::equal(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_mix()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.f, glm::vec3(0.f, 0.f, 1.f));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::mix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::equal(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_normalize()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 2));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(1, 2, 3));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_euler()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat Roll = glm::roll(q);\n\t\tfloat Pitch = glm::pitch(q);\n\t\tfloat Yaw = glm::yaw(q);\n\t\tglm::vec3 Angles = glm::eulerAngles(q);\n\t\tError += glm::all(glm::equal(Angles, glm::vec3(Pitch, Yaw, Roll), 0.000001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dquat q(1.0, 0.0, 0.0, 1.0);\n\t\tdouble Roll = glm::roll(q);\n\t\tdouble Pitch = glm::pitch(q);\n\t\tdouble Yaw = glm::yaw(q);\n\t\tglm::dvec3 Angles = glm::eulerAngles(q);\n\t\tError += glm::all(glm::equal(Angles, glm::dvec3(Pitch, Yaw, Roll), 0.000001)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_slerp()\n{\n\tint Error = 0;\n\n\tfloat const Epsilon = 0.0001f;//glm::epsilon<float>();\n\n\tfloat sqrt2 = std::sqrt(2.0f)/2.0f;\n\tglm::quat id(static_cast<float>(1), static_cast<float>(0), static_cast<float>(0), static_cast<float>(0));\n\tglm::quat Y90rot(sqrt2, 0.0f, sqrt2, 0.0f);\n\tglm::quat Y180rot(0.0f, 0.0f, 1.0f, 0.0f);\n\n\t// Testing a == 0\n\t// Must be id\n\tglm::quat id2 = glm::slerp(id, Y90rot, 0.0f);\n\tError += glm::all(glm::equal(id, id2, Epsilon)) ? 0 : 1;\n\n\t// Testing a == 1\n\t// Must be 90 rotation on Y : 0 0.7 0 0.7\n\tglm::quat Y90rot2 = glm::slerp(id, Y90rot, 1.0f);\n\tError += glm::all(glm::equal(Y90rot, Y90rot2, Epsilon)) ? 0 : 1;\n\n\t// Testing standard, easy case\n\t// Must be 45 rotation on Y : 0 0.38 0 0.92\n\tglm::quat Y45rot1 = glm::slerp(id, Y90rot, 0.5f);\n\n\t// Testing reverse case\n\t// Must be 45 rotation on Y : 0 0.38 0 0.92\n\tglm::quat Ym45rot2 = glm::slerp(Y90rot, id, 0.5f);\n\n\t// Testing against full circle around the sphere instead of shortest path\n\t// Must be 45 rotation on Y\n\t// certainly not a 135 rotation\n\tglm::quat Y45rot3 = glm::slerp(id , -Y90rot, 0.5f);\n\tfloat Y45angle3 = glm::angle(Y45rot3);\n\tError += glm::equal(Y45angle3, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n\tError += glm::all(glm::equal(Ym45rot2, Y45rot3, Epsilon)) ? 0 : 1;\n\n\t// Same, but inverted\n\t// Must also be 45 rotation on Y :  0 0.38 0 0.92\n\t// -0 -0.38 -0 -0.92 is ok too\n\tglm::quat Y45rot4 = glm::slerp(-Y90rot, id, 0.5f);\n\tError += glm::all(glm::equal(Ym45rot2, -Y45rot4, Epsilon)) ? 0 : 1;\n\n\t// Testing q1 = q2\n\t// Must be 90 rotation on Y : 0 0.7 0 0.7\n\tglm::quat Y90rot3 = glm::slerp(Y90rot, Y90rot, 0.5f);\n\tError += glm::all(glm::equal(Y90rot, Y90rot3, Epsilon)) ? 0 : 1;\n\n\t// Testing 180 rotation\n\t// Must be 90 rotation on almost any axis that is on the XZ plane\n\tglm::quat XZ90rot = glm::slerp(id, -Y90rot, 0.5f);\n\tfloat XZ90angle = glm::angle(XZ90rot); // Must be PI/4 = 0.78;\n\tError += glm::equal(XZ90angle, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n\n\t// Testing almost equal quaternions (this test should pass through the linear interpolation)\n\t// Must be 0 0.00X 0 0.99999\n\tglm::quat almostid = glm::slerp(id, glm::angleAxis(0.1f, glm::vec3(0.0f, 1.0f, 0.0f)), 0.5f);\n\n\t// Testing quaternions with opposite sign\n\t{\n\t\tglm::quat a(-1, 0, 0, 0);\n\n\t\tglm::quat result = glm::slerp(a, id, 0.5f);\n\n\t\tError += glm::equal(glm::pow(glm::dot(id, result), 2.f), 1.f, 0.01f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_slerp_spins()\n{\n    int Error = 0;\n\n    float const Epsilon = 0.0001f;//glm::epsilon<float>();\n\n    float sqrt2 = std::sqrt(2.0f) / 2.0f;\n    glm::quat id(static_cast<float>(1), static_cast<float>(0), static_cast<float>(0), static_cast<float>(0));\n    glm::quat Y90rot(sqrt2, 0.0f, sqrt2, 0.0f);\n    glm::quat Y180rot(0.0f, 0.0f, 1.0f, 0.0f);\n\n    // Testing a == 0, k == 1\n    // Must be id\n    glm::quat id2 = glm::slerp(id, id, 1.0f, 1);\n    Error += glm::all(glm::equal(id, id2, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 2\n    // Must be id\n    glm::quat id3 = glm::slerp(id, id, 1.0f, 2);\n    Error += glm::all(glm::equal(id, id3, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 1\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    // Negative quaternion is representing same orientation\n    glm::quat Y90rot2 = glm::slerp(id, Y90rot, 1.0f, 1);\n    Error += glm::all(glm::equal(Y90rot, -Y90rot2, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 2\n    // Must be id\n    glm::quat Y90rot3 = glm::slerp(id, Y90rot, 8.0f / 9.0f, 2);\n    Error += glm::all(glm::equal(id, Y90rot3, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 1\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    glm::quat Y90rot4 = glm::slerp(id, Y90rot, 0.2f, 1);\n    Error += glm::all(glm::equal(Y90rot, Y90rot4, Epsilon)) ? 0 : 1;\n\n    // Testing reverse case\n    // Must be 45 rotation on Y : 0 0.38 0 0.92\n    // Negative quaternion is representing same orientation\n    glm::quat Ym45rot2 = glm::slerp(Y90rot, id, 0.9f, 1);\n    glm::quat Ym45rot3 = glm::slerp(Y90rot, id, 0.5f);\n    Error += glm::all(glm::equal(-Ym45rot2, Ym45rot3, Epsilon)) ? 0 : 1;\n\n    // Testing against full circle around the sphere instead of shortest path\n    // Must be 45 rotation on Y\n    // certainly not a 135 rotation\n    glm::quat Y45rot3 = glm::slerp(id, -Y90rot, 0.5f, 0);\n    float Y45angle3 = glm::angle(Y45rot3);\n    Error += glm::equal(Y45angle3, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n    Error += glm::all(glm::equal(Ym45rot3, Y45rot3, Epsilon)) ? 0 : 1;\n\n    // Same, but inverted\n    // Must also be 45 rotation on Y :  0 0.38 0 0.92\n    // -0 -0.38 -0 -0.92 is ok too\n    glm::quat Y45rot4 = glm::slerp(-Y90rot, id, 0.5f, 0);\n    Error += glm::all(glm::equal(Ym45rot2, Y45rot4, Epsilon)) ? 0 : 1;\n\n    // Testing q1 = q2 k == 2\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    glm::quat Y90rot5 = glm::slerp(Y90rot, Y90rot, 0.5f, 2);\n    Error += glm::all(glm::equal(Y90rot, Y90rot5, Epsilon)) ? 0 : 1;\n\n    // Testing 180 rotation\n    // Must be 90 rotation on almost any axis that is on the XZ plane\n    glm::quat XZ90rot = glm::slerp(id, -Y90rot, 0.5f, 1);\n    float XZ90angle = glm::angle(XZ90rot); // Must be PI/4 = 0.78;\n    Error += glm::equal(XZ90angle, glm::pi<float>() * 1.25f, Epsilon) ? 0 : 1;\n\n    // Testing rotation over long arc\n    // Distance from id to 90 is 270, so 2/3 of it should be 180\n    // Negative quaternion is representing same orientation\n    glm::quat Neg90rot = glm::slerp(id, Y90rot, 2.0f / 3.0f, -1);\n    Error += glm::all(glm::equal(Y180rot, -Neg90rot, Epsilon)) ? 0 : 1;\n\n    return Error;\n}\n\nstatic int test_quat_mul_vec()\n{\n\tint Error(0);\n\n\tglm::quat q = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec3 v(1, 0, 0);\n\tglm::vec3 u(q * v);\n\tglm::vec3 w(u * q);\n\n\tError += glm::all(glm::equal(v, w, 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mul()\n{\n\tint Error = 0;\n\n\tglm::quat temp1 = glm::normalize(glm::quat(1.0f, glm::vec3(0.0, 1.0, 0.0)));\n\tglm::quat temp2 = glm::normalize(glm::quat(0.5f, glm::vec3(1.0, 0.0, 0.0)));\n\n\tglm::vec3 transformed0 = (temp1 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp1));\n\tglm::vec3 temp4 = temp2 * transformed0 * glm::inverse(temp2);\n\n\tglm::quat temp5 = glm::normalize(temp1 * temp2);\n\tglm::vec3 temp6 = temp5 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp5);\n\n\tglm::quat temp7(1.0f, glm::vec3(0.0, 1.0, 0.0));\n\n\ttemp7 *= temp5;\n\ttemp7 *= glm::inverse(temp5);\n\n\tError += glm::any(glm::notEqual(temp7, glm::quat(1.0f, glm::vec3(0.0, 1.0, 0.0)), glm::epsilon<float>())) ? 1 : 0;\n\n\treturn Error;\n}\n\nint test_identity()\n{\n\tint Error = 0;\n\n\tglm::quat const Q = glm::identity<glm::quat>();\n\n\tError += glm::all(glm::equal(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 0 : 1;\n\tError += glm::any(glm::notEqual(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 1 : 0;\n\n\tglm::mat4 const M = glm::identity<glm::mat4x4>();\n\tglm::mat4 const N(1.0f);\n\n\tError += glm::all(glm::equal(M, N, 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mul();\n\tError += test_quat_mul_vec();\n\tError += test_quat_angle();\n\tError += test_quat_angleAxis();\n\tError += test_quat_mix();\n\tError += test_quat_normalize();\n\tError += test_quat_euler();\n\tError += test_quat_slerp();\n    Error += test_quat_slerp_spins();\n\tError += test_identity();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_random.cpp",
    "content": "#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/gtc/random.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_precision.hpp>\n#if GLM_LANG & GLM_LANG_CXX0X_FLAG\n#\tinclude <array>\n#endif\n\nstd::size_t const TestSamples = 10000;\n\nint test_linearRand()\n{\n\tint Error = 0;\n\n\tglm::int32 const Min = 16;\n\tglm::int32 const Max = 32;\n\n\t{\n\t\tglm::u8vec2 AMin(std::numeric_limits<glm::u8>::max());\n\t\tglm::u8vec2 AMax(std::numeric_limits<glm::u8>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u8vec2 A = glm::linearRand(glm::u8vec2(Min), glm::u8vec2(Max));\n\t\t\t\tAMin = glm::min(AMin, A);\n\t\t\t\tAMax = glm::max(AMax, A);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(A, glm::u8vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(A, glm::u8vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(AMin, glm::u8vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(AMax, glm::u8vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u16vec2 BMin(std::numeric_limits<glm::u16>::max());\n\t\tglm::u16vec2 BMax(std::numeric_limits<glm::u16>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u16vec2 B = glm::linearRand(glm::u16vec2(Min), glm::u16vec2(Max));\n\t\t\t\tBMin = glm::min(BMin, B);\n\t\t\t\tBMax = glm::max(BMax, B);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(B, glm::u16vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(B, glm::u16vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(BMin, glm::u16vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(BMax, glm::u16vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u32vec2 CMin(std::numeric_limits<glm::u32>::max());\n\t\tglm::u32vec2 CMax(std::numeric_limits<glm::u32>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u32vec2 C = glm::linearRand(glm::u32vec2(Min), glm::u32vec2(Max));\n\t\t\t\tCMin = glm::min(CMin, C);\n\t\t\t\tCMax = glm::max(CMax, C);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(C, glm::u32vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(C, glm::u32vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(CMin, glm::u32vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(CMax, glm::u32vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u64vec2 DMin(std::numeric_limits<glm::u64>::max());\n\t\tglm::u64vec2 DMax(std::numeric_limits<glm::u64>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u64vec2 D = glm::linearRand(glm::u64vec2(Min), glm::u64vec2(Max));\n\t\t\t\tDMin = glm::min(DMin, D);\n\t\t\t\tDMax = glm::max(DMax, D);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(D, glm::u64vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(D, glm::u64vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(DMin, glm::u64vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(DMax, glm::u64vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\t}\n\n\t{\n\t\tglm::i8vec2 AMin(std::numeric_limits<glm::i8>::max());\n\t\tglm::i8vec2 AMax(std::numeric_limits<glm::i8>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i8vec2 A = glm::linearRand(glm::i8vec2(Min), glm::i8vec2(Max));\n\t\t\t\tAMin = glm::min(AMin, A);\n\t\t\t\tAMax = glm::max(AMax, A);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(A, glm::i8vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(A, glm::i8vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(AMin, glm::i8vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(AMax, glm::i8vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i16vec2 BMin(std::numeric_limits<glm::i16>::max());\n\t\tglm::i16vec2 BMax(std::numeric_limits<glm::i16>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i16vec2 B = glm::linearRand(glm::i16vec2(Min), glm::i16vec2(Max));\n\t\t\t\tBMin = glm::min(BMin, B);\n\t\t\t\tBMax = glm::max(BMax, B);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(B, glm::i16vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(B, glm::i16vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(BMin, glm::i16vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(BMax, glm::i16vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i32vec2 CMin(std::numeric_limits<glm::i32>::max());\n\t\tglm::i32vec2 CMax(std::numeric_limits<glm::i32>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i32vec2 C = glm::linearRand(glm::i32vec2(Min), glm::i32vec2(Max));\n\t\t\t\tCMin = glm::min(CMin, C);\n\t\t\t\tCMax = glm::max(CMax, C);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(C, glm::i32vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(C, glm::i32vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(CMin, glm::i32vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(CMax, glm::i32vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i64vec2 DMin(std::numeric_limits<glm::i64>::max());\n\t\tglm::i64vec2 DMax(std::numeric_limits<glm::i64>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i64vec2 D = glm::linearRand(glm::i64vec2(Min), glm::i64vec2(Max));\n\t\t\t\tDMin = glm::min(DMin, D);\n\t\t\t\tDMax = glm::max(DMax, D);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(D, glm::i64vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(D, glm::i64vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(DMin, glm::i64vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(DMax, glm::i64vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\t}\n\n\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t{\n\t\tglm::f32vec2 const A(glm::linearRand(glm::f32vec2(static_cast<float>(Min)), glm::f32vec2(static_cast<float>(Max))));\n\t\tif(!glm::all(glm::lessThanEqual(A, glm::f32vec2(static_cast<float>(Max)))))\n\t\t\t++Error;\n\t\tif(!glm::all(glm::greaterThanEqual(A, glm::f32vec2(static_cast<float>(Min)))))\n\t\t\t++Error;\n\n\t\tglm::f64vec2 const B(glm::linearRand(glm::f64vec2(Min), glm::f64vec2(Max)));\n\t\tif(!glm::all(glm::lessThanEqual(B, glm::f64vec2(Max))))\n\t\t\t++Error;\n\t\tif(!glm::all(glm::greaterThanEqual(B, glm::f64vec2(Min))))\n\t\t\t++Error;\n\t\tassert(!Error);\n\t}\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::linearRand(-1.0f, 1.0f);\n\t\t\tResultDouble += glm::linearRand(-1.0, 1.0);\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloat, 0.0f, 0.0001f);\n\t\tError += glm::epsilonEqual(ResultDouble, 0.0, 0.0001);\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_circularRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = TestSamples;\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\t\tdouble Radius = 2.0;\n\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::circularRand(1.0f));\n\t\t\tResultDouble += glm::length(glm::circularRand(Radius));\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloat, float(Max), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDouble, double(Max) * double(Radius), 0.01) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_sphericalRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = TestSamples;\n\t\tfloat ResultFloatA = 0.0f;\n\t\tfloat ResultFloatB = 0.0f;\n\t\tfloat ResultFloatC = 0.0f;\n\t\tdouble ResultDoubleA = 0.0;\n\t\tdouble ResultDoubleB = 0.0;\n\t\tdouble ResultDoubleC = 0.0;\n\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloatA += glm::length(glm::sphericalRand(1.0f));\n\t\t\tResultDoubleA += glm::length(glm::sphericalRand(1.0));\n\t\t\tResultFloatB += glm::length(glm::sphericalRand(2.0f));\n\t\t\tResultDoubleB += glm::length(glm::sphericalRand(2.0));\n\t\t\tResultFloatC += glm::length(glm::sphericalRand(3.0f));\n\t\t\tResultDoubleC += glm::length(glm::sphericalRand(3.0));\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloatA, float(Max), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultFloatB, float(Max * 2), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultFloatC, float(Max * 3), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleC, double(Max * 3), 0.01) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_diskRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::diskRand(2.0f));\n\t\t\tResultDouble += glm::length(glm::diskRand(2.0));\n\t\t}\n\n\t\tError += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;\n\t\tError += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_ballRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::ballRand(2.0f));\n\t\t\tResultDouble += glm::length(glm::ballRand(2.0));\n\t\t}\n\n\t\tError += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;\n\t\tError += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n/*\n#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)\nint test_grid()\n{\n\tint Error = 0;\n\n\ttypedef std::array<int, 8> colors;\n\ttypedef std::array<int, 8 * 8> grid;\n\n\tgrid Grid;\n\tcolors Colors;\n\n\tgrid GridBest;\n\tcolors ColorsBest;\n\n\twhile(true)\n\t{\n\t\tfor(std::size_t i = 0; i < Grid.size(); ++i)\n\t\t\tGrid[i] = int(glm::linearRand(0.0, 8.0 * 8.0 * 8.0 - 1.0) / 64.0);\n\n\t\tfor(std::size_t i = 0; i < Grid.size(); ++i)\n\t\t\t++Colors[Grid[i]];\n\n\t\tbool Exit = true;\n\t\tfor(std::size_t i = 0; i < Colors.size(); ++i)\n\t\t{\n\t\t\tif(Colors[i] == 8)\n\t\t\t\tcontinue;\n\n\t\t\tExit = false;\n\t\t\tbreak;\n\t\t}\n\n\t\tif(Exit == true)\n\t\t\tbreak;\n\t}\n\n\treturn Error;\n}\n#endif\n*/\nint main()\n{\n\tint Error = 0;\n\n\tError += test_linearRand();\n\tError += test_circularRand();\n\tError += test_sphericalRand();\n\tError += test_diskRand();\n\tError += test_ballRand();\n/*\n#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)\n\tError += test_grid();\n#endif\n*/\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_reciprocal.cpp",
    "content": "#include <glm/gtc/reciprocal.hpp>\n#include <ctime>\n\nint main()\n{\n\treturn 0;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_round.cpp",
    "content": "#include <glm/gtc/round.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0080, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x0000000f, false},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec1 Result = glm::isPowerOfTwo(glm::ivec1(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec1(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec2 Result = glm::isPowerOfTwo(glm::ivec2(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec2(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec3 Result = glm::isPowerOfTwo(glm::ivec3(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec3(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec4 Result = glm::isPowerOfTwo(glm::ivec4(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec4(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x80000000, true},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int16();\n\t\tError += test_uint16();\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace ceilPowerOfTwo_advanced\n{\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilPowerOfTwo_loop(genType value)\n\t{\n\t\treturn glm::isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{-3, -4},\n\t\t\t{-8, -8},\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x08000000, 0x08000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int32>); i < n; ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::ceilPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint32> const Data[] =\n\t\t{\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x80000000, 0x80000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint32>); i < n; ++i)\n\t\t{\n\t\t\tglm::uint32 Result = glm::ceilPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<glm::uint> v;\n\t\tv.resize(100000000);\n\n\t\tstd::clock_t Timestramp0 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = ceilPowerOfTwo_loop(i);\n\n\t\tstd::clock_t Timestramp1 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = glm::ceilPowerOfTwo(i);\n\n\t\tstd::clock_t Timestramp2 = std::clock();\n\n\t\tstd::printf(\"ceilPowerOfTwo_loop: %d clocks\\n\", static_cast<int>(Timestramp1 - Timestramp0));\n\t\tstd::printf(\"glm::ceilPowerOfTwo: %d clocks\\n\", static_cast<int>(Timestramp2 - Timestramp1));\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//namespace ceilPowerOfTwo_advanced\n\nnamespace roundPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::roundPowerOfTwo(7u);\n\t\tError += A == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::roundPowerOfTwo(15u);\n\t\tError += B == 16u ? 0 : 1;\n\n\t\tglm::uint32 const C = glm::roundPowerOfTwo(31u);\n\t\tError += C == 32u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const D = glm::roundPowerOfTwo(9u);\n\t\tError += D == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const E = glm::roundPowerOfTwo(17u);\n\t\tError += E == 16u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const F = glm::roundPowerOfTwo(33u);\n\t\tError += F == 32u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace roundPowerOfTwo\n\nnamespace floorPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::floorPowerOfTwo(7u);\n\t\tError += A == 4u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::floorPowerOfTwo(15u);\n\t\tError += B == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const C = glm::floorPowerOfTwo(31u);\n\t\tError += C == 16u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace floorPowerOfTwo\n\nnamespace ceilPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::ceilPowerOfTwo(7u);\n\t\tError += A == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::ceilPowerOfTwo(15u);\n\t\tError += B == 16u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const C = glm::ceilPowerOfTwo(31u);\n\t\tError += C == 32u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace ceilPowerOfTwo\n\nnamespace floorMultiple\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tSource;\n\t\tgenType\t\tMultiple;\n\t\tgenType\t\tReturn;\n\t\tgenType\t\tEpsilon;\n\t};\n\n\tint test_float()\n\t{\n\t\ttype<glm::float64> const Data[] = \n\t\t{\n\t\t\t{3.4, 0.3, 3.3, 0.0001},\n\t\t\t{-1.4, 0.3, -1.5, 0.0001},\n\t\t};\n\n\t\tint Error(0);\n\t\t\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)\n\t\t{\n\t\t\tglm::float64 Result = glm::floorMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_float();\n\n\t\treturn Error;\n\t}\n}//namespace floorMultiple\n\nnamespace ceilMultiple\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tSource;\n\t\tgenType\t\tMultiple;\n\t\tgenType\t\tReturn;\n\t\tgenType\t\tEpsilon;\n\t};\n\n\tint test_float()\n\t{\n\t\ttype<glm::float64> const Data[] = \n\t\t{\n\t\t\t{3.4, 0.3, 3.6, 0.0001},\n\t\t\t{-1.4, 0.3, -1.2, 0.0001},\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)\n\t\t{\n\t\t\tglm::float64 Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int()\n\t{\n\t\ttype<int> const Data[] = \n\t\t{\n\t\t\t{3, 4, 4, 0},\n\t\t\t{7, 4, 8, 0},\n\t\t\t{5, 4, 8, 0},\n\t\t\t{1, 4, 4, 0},\n\t\t\t{1, 3, 3, 0},\n\t\t\t{4, 3, 6, 0},\n\t\t\t{4, 1, 4, 0},\n\t\t\t{1, 1, 1, 0},\n\t\t\t{7, 1, 7, 0},\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tint Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int();\n\t\tError += test_float();\n\n\t\treturn Error;\n\t}\n}//namespace ceilMultiple\n\nint main()\n{\n\tint Error(0);\n\n\tError += isPowerOfTwo::test();\n\tError += floorPowerOfTwo::test();\n\tError += roundPowerOfTwo::test();\n\tError += ceilPowerOfTwo::test();\n\tError += ceilPowerOfTwo_advanced::test();\n\t\n#\tifdef NDEBUG\n\t\tError += ceilPowerOfTwo_advanced::perf();\n#\tendif//NDEBUG\n\n\tError += floorMultiple::test();\n\tError += ceilMultiple::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_type_aligned.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_lowp>::value, \"aligned_lowp is not aligned\");\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_mediump>::value, \"aligned_mediump is not aligned\");\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_highp>::value, \"aligned_highp is not aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_highp>::value, \"packed_highp is aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_mediump>::value, \"packed_mediump is aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_lowp>::value, \"packed_lowp is aligned\");\n\nstruct my_vec4_packed\n{\n\tglm::uint32 a;\n\tglm::vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_vec4_packed) == sizeof(glm::uint32) + sizeof(glm::vec4), \"glm::vec4 packed is not correct\");\n\nstruct my_vec4_aligned\n{\n\tglm::uint32 a;\n\tglm::aligned_vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_vec4_aligned) == sizeof(glm::aligned_vec4) * 2, \"glm::vec4 aligned is not correct\");\n\nstruct my_dvec4_packed\n{\n\tglm::uint64 a;\n\tglm::dvec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_dvec4_packed) == sizeof(glm::uint64) + sizeof(glm::dvec4), \"glm::dvec4 packed is not correct\");\n\nstruct my_dvec4_aligned\n{\n\tglm::uint64 a;\n\tglm::aligned_dvec4 b;\n};\n//GLM_STATIC_ASSERT(sizeof(my_dvec4_aligned) == sizeof(glm::aligned_dvec4) * 2, \"glm::dvec4 aligned is not correct\");\n\nstruct my_ivec4_packed\n{\n\tglm::uint32 a;\n\tglm::ivec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_ivec4_packed) == sizeof(glm::uint32) + sizeof(glm::ivec4), \"glm::ivec4 packed is not correct\");\n\nstruct my_ivec4_aligned\n{\n\tglm::uint32 a;\n\tglm::aligned_ivec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_ivec4_aligned) == sizeof(glm::aligned_ivec4) * 2, \"glm::ivec4 aligned is not correct\");\n\nstruct my_u8vec4_packed\n{\n\tglm::uint32 a;\n\tglm::u8vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_u8vec4_packed) == sizeof(glm::uint32) + sizeof(glm::u8vec4), \"glm::u8vec4 packed is not correct\");\n\nstatic int test_copy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::aligned_ivec4 const a(1, 2, 3, 4);\n\t\tglm::ivec4 const u(a);\n\n\t\tError += a.x == u.x ? 0 : 1;\n\t\tError += a.y == u.y ? 0 : 1;\n\t\tError += a.z == u.z ? 0 : 1;\n\t\tError += a.w == u.w ? 0 : 1;\n\t}\n\n\t{\n\t\tmy_ivec4_aligned a;\n\t\ta.b = glm::ivec4(1, 2, 3, 4);\n\n\t\tmy_ivec4_packed u;\n\t\tu.b = a.b;\n\n\t\tError += a.b.x == u.b.x ? 0 : 1;\n\t\tError += a.b.y == u.b.y ? 0 : 1;\n\t\tError += a.b.z == u.b.z ? 0 : 1;\n\t\tError += a.b.w == u.b.w ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_CONSTEXPR\n\t{\n\t\tconstexpr glm::aligned_ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tconstexpr glm::packed_ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n#\tendif//GLM_HAS_CONSTEXPR\n\n\treturn Error;\n}\n\nstatic int test_aligned_ivec4()\n{\n\tint Error = 0;\n\n\tglm::aligned_ivec4 const v(1, 2, 3, 4);\n\tError += glm::all(glm::equal(v, glm::aligned_ivec4(1, 2, 3, 4))) ? 0 : 1;\n\n\tglm::aligned_ivec4 const u = v * 2;\n\tError += glm::all(glm::equal(u, glm::aligned_ivec4(2, 4, 6, 8))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_aligned_mat4()\n{\n\tint Error = 0;\n\n\tglm::aligned_vec4 const u(1.f, 2.f, 3.f, 4.f);\n\tError += glm::all(glm::equal(u, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), 0.0001f)) ? 0 : 1;\n\n\tglm::aligned_vec4 const v(1, 2, 3, 4);\n\tError += glm::all(glm::equal(v, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), 0.0001f)) ? 0 : 1;\n\n\tglm::aligned_mat4 const m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\tglm::aligned_mat4 const t = glm::transpose(m);\n\tglm::aligned_mat4 const expected = glm::mat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\tError += glm::all(glm::equal(t, expected, 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ctor();\n\tError += test_copy();\n\tError += test_aligned_ivec4();\n\tError += test_aligned_mat4();\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_type_precision.cpp",
    "content": "#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <vector>\n#if GLM_HAS_OPENMP\n#\tinclude <omp.h>\n#endif\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::lowp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\n\n#endif\n\nstatic int test_scalar_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) != 1;\n\tError += sizeof(glm::int16) != 2;\n\tError += sizeof(glm::int32) != 4;\n\tError += sizeof(glm::int64) != 8;\n\tError += sizeof(glm::uint8) != 1;\n\tError += sizeof(glm::uint16) != 2;\n\tError += sizeof(glm::uint32) != 4;\n\tError += sizeof(glm::uint64) != 8;\n\tError += sizeof(glm::float32) != 4;\n\tError += sizeof(glm::float64) != 8;\n\n\tError += sizeof(glm::lowp_int8) != 1;\n\tError += sizeof(glm::lowp_int16) != 2;\n\tError += sizeof(glm::lowp_int32) != 4;\n\tError += sizeof(glm::lowp_int64) != 8;\n\tError += sizeof(glm::lowp_uint8) != 1;\n\tError += sizeof(glm::lowp_uint16) != 2;\n\tError += sizeof(glm::lowp_uint32) != 4;\n\tError += sizeof(glm::lowp_uint64) != 8;\n\tError += sizeof(glm::lowp_float32) != 4;\n\tError += sizeof(glm::lowp_float64) != 8;\n\n\tError += sizeof(glm::mediump_int8) != 1;\n\tError += sizeof(glm::mediump_int16) != 2;\n\tError += sizeof(glm::mediump_int32) != 4;\n\tError += sizeof(glm::mediump_int64) != 8;\n\tError += sizeof(glm::mediump_uint8) != 1;\n\tError += sizeof(glm::mediump_uint16) != 2;\n\tError += sizeof(glm::mediump_uint32) != 4;\n\tError += sizeof(glm::mediump_uint64) != 8;\n\tError += sizeof(glm::mediump_float32) != 4;\n\tError += sizeof(glm::mediump_float64) != 8;\n\n\tError += sizeof(glm::highp_int8) != 1;\n\tError += sizeof(glm::highp_int16) != 2;\n\tError += sizeof(glm::highp_int32) != 4;\n\tError += sizeof(glm::highp_int64) != 8;\n\tError += sizeof(glm::highp_uint8) != 1;\n\tError += sizeof(glm::highp_uint16) != 2;\n\tError += sizeof(glm::highp_uint32) != 4;\n\tError += sizeof(glm::highp_uint64) != 8;\n\tError += sizeof(glm::highp_float32) != 4;\n\tError += sizeof(glm::highp_float64) != 8;\n\n\treturn Error;\n}\n\nstatic int test_fvec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f32vec2) != 8;\n\tError += sizeof(glm::f32vec3) != 12;\n\tError += sizeof(glm::f32vec4) != 16;\n\tError += sizeof(glm::f64vec2) != 16;\n\tError += sizeof(glm::f64vec3) != 24;\n\tError += sizeof(glm::f64vec4) != 32;\n\n\tError += sizeof(glm::lowp_f32vec2) != 8;\n\tError += sizeof(glm::lowp_f32vec3) != 12;\n\tError += sizeof(glm::lowp_f32vec4) != 16;\n\tError += sizeof(glm::lowp_f64vec2) != 16;\n\tError += sizeof(glm::lowp_f64vec3) != 24;\n\tError += sizeof(glm::lowp_f64vec4) != 32;\n\n\tError += sizeof(glm::mediump_f32vec2) != 8;\n\tError += sizeof(glm::mediump_f32vec3) != 12;\n\tError += sizeof(glm::mediump_f32vec4) != 16;\n\tError += sizeof(glm::mediump_f64vec2) != 16;\n\tError += sizeof(glm::mediump_f64vec3) != 24;\n\tError += sizeof(glm::mediump_f64vec4) != 32;\n\n\tError += sizeof(glm::highp_f32vec2) != 8;\n\tError += sizeof(glm::highp_f32vec3) != 12;\n\tError += sizeof(glm::highp_f32vec4) != 16;\n\tError += sizeof(glm::highp_f64vec2) != 16;\n\tError += sizeof(glm::highp_f64vec3) != 24;\n\tError += sizeof(glm::highp_f64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_fvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::f32vec2 v1(1.f);\n\t\tglm::lowp_f32vec2 v2(v1);\n\t\tglm::mediump_f32vec2 v3(v1);\n\t\tglm::highp_f32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f32vec3 v1(1.f);\n\t\tglm::lowp_f32vec3 v2(v1);\n\t\tglm::mediump_f32vec3 v3(v1);\n\t\tglm::highp_f32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::f32vec4 v1(1.f);\n\t\tglm::lowp_f32vec4 v2(v1);\n\t\tglm::mediump_f32vec4 v3(v1);\n\t\tglm::highp_f32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_dvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::f64vec2 v1(1.0);\n\t\tglm::lowp_f64vec2 v2(v1);\n\t\tglm::mediump_f64vec2 v3(v1);\n\t\tglm::highp_f64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f64vec3 v1(1.0);\n\t\tglm::lowp_f64vec3 v2(v1);\n\t\tglm::mediump_f64vec3 v3(v1);\n\t\tglm::highp_f64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f64vec4 v1(1.0);\n\t\tglm::lowp_f64vec4 v2(v1);\n\t\tglm::mediump_f64vec4 v3(v1);\n\t\tglm::highp_f64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ivec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) != 2;\n\tError += sizeof(glm::i8vec3) != 3;\n\tError += sizeof(glm::i8vec4) != 4;\n\tError += sizeof(glm::i16vec2) != 4;\n\tError += sizeof(glm::i16vec3) != 6;\n\tError += sizeof(glm::i16vec4) != 8;\n\tError += sizeof(glm::i32vec2) != 8;\n\tError += sizeof(glm::i32vec3) != 12;\n\tError += sizeof(glm::i32vec4) != 16;\n\tError += sizeof(glm::i64vec2) != 16;\n\tError += sizeof(glm::i64vec3) != 24;\n\tError += sizeof(glm::i64vec4) != 32;\n\n\tError += sizeof(glm::lowp_i8vec2) != 2;\n\tError += sizeof(glm::lowp_i8vec3) != 3;\n\tError += sizeof(glm::lowp_i8vec4) != 4;\n\tError += sizeof(glm::lowp_i16vec2) != 4;\n\tError += sizeof(glm::lowp_i16vec3) != 6;\n\tError += sizeof(glm::lowp_i16vec4) != 8;\n\tError += sizeof(glm::lowp_i32vec2) != 8;\n\tError += sizeof(glm::lowp_i32vec3) != 12;\n\tError += sizeof(glm::lowp_i32vec4) != 16;\n\tError += sizeof(glm::lowp_i64vec2) != 16;\n\tError += sizeof(glm::lowp_i64vec3) != 24;\n\tError += sizeof(glm::lowp_i64vec4) != 32;\n\n\tError += sizeof(glm::mediump_i8vec2) != 2;\n\tError += sizeof(glm::mediump_i8vec3) != 3;\n\tError += sizeof(glm::mediump_i8vec4) != 4;\n\tError += sizeof(glm::mediump_i16vec2) != 4;\n\tError += sizeof(glm::mediump_i16vec3) != 6;\n\tError += sizeof(glm::mediump_i16vec4) != 8;\n\tError += sizeof(glm::mediump_i32vec2) != 8;\n\tError += sizeof(glm::mediump_i32vec3) != 12;\n\tError += sizeof(glm::mediump_i32vec4) != 16;\n\tError += sizeof(glm::mediump_i64vec2) != 16;\n\tError += sizeof(glm::mediump_i64vec3) != 24;\n\tError += sizeof(glm::mediump_i64vec4) != 32;\n\n\tError += sizeof(glm::highp_i8vec2) != 2;\n\tError += sizeof(glm::highp_i8vec3) != 3;\n\tError += sizeof(glm::highp_i8vec4) != 4;\n\tError += sizeof(glm::highp_i16vec2) != 4;\n\tError += sizeof(glm::highp_i16vec3) != 6;\n\tError += sizeof(glm::highp_i16vec4) != 8;\n\tError += sizeof(glm::highp_i32vec2) != 8;\n\tError += sizeof(glm::highp_i32vec3) != 12;\n\tError += sizeof(glm::highp_i32vec4) != 16;\n\tError += sizeof(glm::highp_i64vec2) != 16;\n\tError += sizeof(glm::highp_i64vec3) != 24;\n\tError += sizeof(glm::highp_i64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_ivec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::i8vec2 v1(0);\n\t\tglm::lowp_i8vec2 v2(v1);\n\t\tglm::mediump_i8vec2 v3(v1);\n\t\tglm::highp_i8vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i8vec3 v1(0);\n\t\tglm::lowp_i8vec3 v2(v1);\n\t\tglm::mediump_i8vec3 v3(v1);\n\t\tglm::highp_i8vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i8vec4 v1(0);\n\t\tglm::lowp_i8vec4 v2(v1);\n\t\tglm::mediump_i8vec4 v3(v1);\n\t\tglm::highp_i8vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec2 v1(0);\n\t\tglm::lowp_i16vec2 v2(v1);\n\t\tglm::mediump_i16vec2 v3(v1);\n\t\tglm::highp_i16vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec3 v1(0);\n\t\tglm::lowp_i16vec3 v2(v1);\n\t\tglm::mediump_i16vec3 v3(v1);\n\t\tglm::highp_i16vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec4 v1(0);\n\t\tglm::lowp_i16vec4 v2(v1);\n\t\tglm::mediump_i16vec4 v3(v1);\n\t\tglm::highp_i16vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec2 v1(0);\n\t\tglm::lowp_i32vec2 v2(v1);\n\t\tglm::mediump_i32vec2 v3(v1);\n\t\tglm::highp_i32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec3 v1(0);\n\t\tglm::lowp_i32vec3 v2(v1);\n\t\tglm::mediump_i32vec3 v3(v1);\n\t\tglm::highp_i32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec4 v1(0);\n\t\tglm::lowp_i32vec4 v2(v1);\n\t\tglm::mediump_i32vec4 v3(v1);\n\t\tglm::highp_i32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec2 v1(0);\n\t\tglm::lowp_i64vec2 v2(v1);\n\t\tglm::mediump_i64vec2 v3(v1);\n\t\tglm::highp_i64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec3 v1(0);\n\t\tglm::lowp_i64vec3 v2(v1);\n\t\tglm::mediump_i64vec3 v3(v1);\n\t\tglm::highp_i64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec4 v1(0);\n\t\tglm::lowp_i64vec4 v2(v1);\n\t\tglm::mediump_i64vec4 v3(v1);\n\t\tglm::highp_i64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v4))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uvec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) != 2;\n\tError += sizeof(glm::u8vec3) != 3;\n\tError += sizeof(glm::u8vec4) != 4;\n\tError += sizeof(glm::u16vec2) != 4;\n\tError += sizeof(glm::u16vec3) != 6;\n\tError += sizeof(glm::u16vec4) != 8;\n\tError += sizeof(glm::u32vec2) != 8;\n\tError += sizeof(glm::u32vec3) != 12;\n\tError += sizeof(glm::u32vec4) != 16;\n\tError += sizeof(glm::u64vec2) != 16;\n\tError += sizeof(glm::u64vec3) != 24;\n\tError += sizeof(glm::u64vec4) != 32;\n\n\tError += sizeof(glm::lowp_u8vec2) != 2;\n\tError += sizeof(glm::lowp_u8vec3) != 3;\n\tError += sizeof(glm::lowp_u8vec4) != 4;\n\tError += sizeof(glm::lowp_u16vec2) != 4;\n\tError += sizeof(glm::lowp_u16vec3) != 6;\n\tError += sizeof(glm::lowp_u16vec4) != 8;\n\tError += sizeof(glm::lowp_u32vec2) != 8;\n\tError += sizeof(glm::lowp_u32vec3) != 12;\n\tError += sizeof(glm::lowp_u32vec4) != 16;\n\tError += sizeof(glm::lowp_u64vec2) != 16;\n\tError += sizeof(glm::lowp_u64vec3) != 24;\n\tError += sizeof(glm::lowp_u64vec4) != 32;\n\n\tError += sizeof(glm::mediump_u8vec2) != 2;\n\tError += sizeof(glm::mediump_u8vec3) != 3;\n\tError += sizeof(glm::mediump_u8vec4) != 4;\n\tError += sizeof(glm::mediump_u16vec2) != 4;\n\tError += sizeof(glm::mediump_u16vec3) != 6;\n\tError += sizeof(glm::mediump_u16vec4) != 8;\n\tError += sizeof(glm::mediump_u32vec2) != 8;\n\tError += sizeof(glm::mediump_u32vec3) != 12;\n\tError += sizeof(glm::mediump_u32vec4) != 16;\n\tError += sizeof(glm::mediump_u64vec2) != 16;\n\tError += sizeof(glm::mediump_u64vec3) != 24;\n\tError += sizeof(glm::mediump_u64vec4) != 32;\n\n\tError += sizeof(glm::highp_u8vec2) != 2;\n\tError += sizeof(glm::highp_u8vec3) != 3;\n\tError += sizeof(glm::highp_u8vec4) != 4;\n\tError += sizeof(glm::highp_u16vec2) != 4;\n\tError += sizeof(glm::highp_u16vec3) != 6;\n\tError += sizeof(glm::highp_u16vec4) != 8;\n\tError += sizeof(glm::highp_u32vec2) != 8;\n\tError += sizeof(glm::highp_u32vec3) != 12;\n\tError += sizeof(glm::highp_u32vec4) != 16;\n\tError += sizeof(glm::highp_u64vec2) != 16;\n\tError += sizeof(glm::highp_u64vec3) != 24;\n\tError += sizeof(glm::highp_u64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_uvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::u8vec2 v1(0);\n\t\tglm::lowp_u8vec2 v2(v1);\n\t\tglm::mediump_u8vec2 v3(v1);\n\t\tglm::highp_u8vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u8vec3 v1(0);\n\t\tglm::lowp_u8vec3 v2(v1);\n\t\tglm::mediump_u8vec3 v3(v1);\n\t\tglm::highp_u8vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u8vec4 v1(0);\n\t\tglm::lowp_u8vec4 v2(v1);\n\t\tglm::mediump_u8vec4 v3(v1);\n\t\tglm::highp_u8vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u16vec2 v1(0);\n\t\tglm::lowp_u16vec2 v2(v1);\n\t\tglm::mediump_u16vec2 v3(v1);\n\t\tglm::highp_u16vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u16vec3 v1(0);\n\t\tglm::lowp_u16vec3 v2(v1);\n\t\tglm::mediump_u16vec3 v3(v1);\n\t\tglm::highp_u16vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u16vec4 v1(0);\n\t\tglm::lowp_u16vec4 v2(v1);\n\t\tglm::mediump_u16vec4 v3(v1);\n\t\tglm::highp_u16vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u32vec2 v1(0);\n\t\tglm::lowp_u32vec2 v2(v1);\n\t\tglm::mediump_u32vec2 v3(v1);\n\t\tglm::highp_u32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u32vec3 v1(0);\n\t\tglm::lowp_u32vec3 v2(v1);\n\t\tglm::mediump_u32vec3 v3(v1);\n\t\tglm::highp_u32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u32vec4 v1(0);\n\t\tglm::lowp_u32vec4 v2(v1);\n\t\tglm::mediump_u32vec4 v3(v1);\n\t\tglm::highp_u32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u64vec2 v1(0);\n\t\tglm::lowp_u64vec2 v2(v1);\n\t\tglm::mediump_u64vec2 v3(v1);\n\t\tglm::highp_u64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u64vec3 v1(0);\n\t\tglm::lowp_u64vec3 v2(v1);\n\t\tglm::mediump_u64vec3 v3(v1);\n\t\tglm::highp_u64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u64vec4 v1(0);\n\t\tglm::lowp_u64vec4 v2(v1);\n\t\tglm::mediump_u64vec4 v3(v1);\n\t\tglm::highp_u64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v4))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_fmat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::mat2) != 16;\n\tError += sizeof(glm::mat3) != 36;\n\tError += sizeof(glm::mat4) != 64;\n\tError += sizeof(glm::mat2x2) != 16;\n\tError += sizeof(glm::mat2x3) != 24;\n\tError += sizeof(glm::mat2x4) != 32;\n\tError += sizeof(glm::mat3x2) != 24;\n\tError += sizeof(glm::mat3x3) != 36;\n\tError += sizeof(glm::mat3x4) != 48;\n\tError += sizeof(glm::mat4x2) != 32;\n\tError += sizeof(glm::mat4x3) != 48;\n\tError += sizeof(glm::mat4x4) != 64;\n\n\tError += sizeof(glm::fmat2) != 16;\n\tError += sizeof(glm::fmat3) != 36;\n\tError += sizeof(glm::fmat4) != 64;\n\tError += sizeof(glm::fmat2x2) != 16;\n\tError += sizeof(glm::fmat2x3) != 24;\n\tError += sizeof(glm::fmat2x4) != 32;\n\tError += sizeof(glm::fmat3x2) != 24;\n\tError += sizeof(glm::fmat3x3) != 36;\n\tError += sizeof(glm::fmat3x4) != 48;\n\tError += sizeof(glm::fmat4x2) != 32;\n\tError += sizeof(glm::fmat4x3) != 48;\n\tError += sizeof(glm::fmat4x4) != 64;\n\n\tError += sizeof(glm::f32mat2) != 16;\n\tError += sizeof(glm::f32mat3) != 36;\n\tError += sizeof(glm::f32mat4) != 64;\n\tError += sizeof(glm::f32mat2x2) != 16;\n\tError += sizeof(glm::f32mat2x3) != 24;\n\tError += sizeof(glm::f32mat2x4) != 32;\n\tError += sizeof(glm::f32mat3x2) != 24;\n\tError += sizeof(glm::f32mat3x3) != 36;\n\tError += sizeof(glm::f32mat3x4) != 48;\n\tError += sizeof(glm::f32mat4x2) != 32;\n\tError += sizeof(glm::f32mat4x3) != 48;\n\tError += sizeof(glm::f32mat4x4) != 64;\n\n\n\tError += sizeof(glm::lowp_mat2) != 16;\n\tError += sizeof(glm::lowp_mat3) != 36;\n\tError += sizeof(glm::lowp_mat4) != 64;\n\tError += sizeof(glm::lowp_mat2x2) != 16;\n\tError += sizeof(glm::lowp_mat2x3) != 24;\n\tError += sizeof(glm::lowp_mat2x4) != 32;\n\tError += sizeof(glm::lowp_mat3x2) != 24;\n\tError += sizeof(glm::lowp_mat3x3) != 36;\n\tError += sizeof(glm::lowp_mat3x4) != 48;\n\tError += sizeof(glm::lowp_mat4x2) != 32;\n\tError += sizeof(glm::lowp_mat4x3) != 48;\n\tError += sizeof(glm::lowp_mat4x4) != 64;\n\n\tError += sizeof(glm::lowp_fmat2) != 16;\n\tError += sizeof(glm::lowp_fmat3) != 36;\n\tError += sizeof(glm::lowp_fmat4) != 64;\n\tError += sizeof(glm::lowp_fmat2x2) != 16;\n\tError += sizeof(glm::lowp_fmat2x3) != 24;\n\tError += sizeof(glm::lowp_fmat2x4) != 32;\n\tError += sizeof(glm::lowp_fmat3x2) != 24;\n\tError += sizeof(glm::lowp_fmat3x3) != 36;\n\tError += sizeof(glm::lowp_fmat3x4) != 48;\n\tError += sizeof(glm::lowp_fmat4x2) != 32;\n\tError += sizeof(glm::lowp_fmat4x3) != 48;\n\tError += sizeof(glm::lowp_fmat4x4) != 64;\n\n\tError += sizeof(glm::lowp_f32mat2) != 16;\n\tError += sizeof(glm::lowp_f32mat3) != 36;\n\tError += sizeof(glm::lowp_f32mat4) != 64;\n\tError += sizeof(glm::lowp_f32mat2x2) != 16;\n\tError += sizeof(glm::lowp_f32mat2x3) != 24;\n\tError += sizeof(glm::lowp_f32mat2x4) != 32;\n\tError += sizeof(glm::lowp_f32mat3x2) != 24;\n\tError += sizeof(glm::lowp_f32mat3x3) != 36;\n\tError += sizeof(glm::lowp_f32mat3x4) != 48;\n\tError += sizeof(glm::lowp_f32mat4x2) != 32;\n\tError += sizeof(glm::lowp_f32mat4x3) != 48;\n\tError += sizeof(glm::lowp_f32mat4x4) != 64;\n\n\tError += sizeof(glm::mediump_mat2) != 16;\n\tError += sizeof(glm::mediump_mat3) != 36;\n\tError += sizeof(glm::mediump_mat4) != 64;\n\tError += sizeof(glm::mediump_mat2x2) != 16;\n\tError += sizeof(glm::mediump_mat2x3) != 24;\n\tError += sizeof(glm::mediump_mat2x4) != 32;\n\tError += sizeof(glm::mediump_mat3x2) != 24;\n\tError += sizeof(glm::mediump_mat3x3) != 36;\n\tError += sizeof(glm::mediump_mat3x4) != 48;\n\tError += sizeof(glm::mediump_mat4x2) != 32;\n\tError += sizeof(glm::mediump_mat4x3) != 48;\n\tError += sizeof(glm::mediump_mat4x4) != 64;\n\n\tError += sizeof(glm::mediump_fmat2) != 16;\n\tError += sizeof(glm::mediump_fmat3) != 36;\n\tError += sizeof(glm::mediump_fmat4) != 64;\n\tError += sizeof(glm::mediump_fmat2x2) != 16;\n\tError += sizeof(glm::mediump_fmat2x3) != 24;\n\tError += sizeof(glm::mediump_fmat2x4) != 32;\n\tError += sizeof(glm::mediump_fmat3x2) != 24;\n\tError += sizeof(glm::mediump_fmat3x3) != 36;\n\tError += sizeof(glm::mediump_fmat3x4) != 48;\n\tError += sizeof(glm::mediump_fmat4x2) != 32;\n\tError += sizeof(glm::mediump_fmat4x3) != 48;\n\tError += sizeof(glm::mediump_fmat4x4) != 64;\n\n\tError += sizeof(glm::mediump_f32mat2) != 16;\n\tError += sizeof(glm::mediump_f32mat3) != 36;\n\tError += sizeof(glm::mediump_f32mat4) != 64;\n\tError += sizeof(glm::mediump_f32mat2x2) != 16;\n\tError += sizeof(glm::mediump_f32mat2x3) != 24;\n\tError += sizeof(glm::mediump_f32mat2x4) != 32;\n\tError += sizeof(glm::mediump_f32mat3x2) != 24;\n\tError += sizeof(glm::mediump_f32mat3x3) != 36;\n\tError += sizeof(glm::mediump_f32mat3x4) != 48;\n\tError += sizeof(glm::mediump_f32mat4x2) != 32;\n\tError += sizeof(glm::mediump_f32mat4x3) != 48;\n\tError += sizeof(glm::mediump_f32mat4x4) != 64;\n\n\tError += sizeof(glm::highp_mat2) != 16;\n\tError += sizeof(glm::highp_mat3) != 36;\n\tError += sizeof(glm::highp_mat4) != 64;\n\tError += sizeof(glm::highp_mat2x2) != 16;\n\tError += sizeof(glm::highp_mat2x3) != 24;\n\tError += sizeof(glm::highp_mat2x4) != 32;\n\tError += sizeof(glm::highp_mat3x2) != 24;\n\tError += sizeof(glm::highp_mat3x3) != 36;\n\tError += sizeof(glm::highp_mat3x4) != 48;\n\tError += sizeof(glm::highp_mat4x2) != 32;\n\tError += sizeof(glm::highp_mat4x3) != 48;\n\tError += sizeof(glm::highp_mat4x4) != 64;\n\n\tError += sizeof(glm::highp_fmat2) != 16;\n\tError += sizeof(glm::highp_fmat3) != 36;\n\tError += sizeof(glm::highp_fmat4) != 64;\n\tError += sizeof(glm::highp_fmat2x2) != 16;\n\tError += sizeof(glm::highp_fmat2x3) != 24;\n\tError += sizeof(glm::highp_fmat2x4) != 32;\n\tError += sizeof(glm::highp_fmat3x2) != 24;\n\tError += sizeof(glm::highp_fmat3x3) != 36;\n\tError += sizeof(glm::highp_fmat3x4) != 48;\n\tError += sizeof(glm::highp_fmat4x2) != 32;\n\tError += sizeof(glm::highp_fmat4x3) != 48;\n\tError += sizeof(glm::highp_fmat4x4) != 64;\n\n\tError += sizeof(glm::highp_f32mat2) != 16;\n\tError += sizeof(glm::highp_f32mat3) != 36;\n\tError += sizeof(glm::highp_f32mat4) != 64;\n\tError += sizeof(glm::highp_f32mat2x2) != 16;\n\tError += sizeof(glm::highp_f32mat2x3) != 24;\n\tError += sizeof(glm::highp_f32mat2x4) != 32;\n\tError += sizeof(glm::highp_f32mat3x2) != 24;\n\tError += sizeof(glm::highp_f32mat3x3) != 36;\n\tError += sizeof(glm::highp_f32mat3x4) != 48;\n\tError += sizeof(glm::highp_f32mat4x2) != 32;\n\tError += sizeof(glm::highp_f32mat4x3) != 48;\n\tError += sizeof(glm::highp_f32mat4x4) != 64;\n\n\treturn Error;\n}\n\nstatic int test_dmat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f64mat2) != 32;\n\tError += sizeof(glm::f64mat3) != 72;\n\tError += sizeof(glm::f64mat4) != 128;\n\tError += sizeof(glm::f64mat2x2) != 32;\n\tError += sizeof(glm::f64mat2x3) != 48;\n\tError += sizeof(glm::f64mat2x4) != 64;\n\tError += sizeof(glm::f64mat3x2) != 48;\n\tError += sizeof(glm::f64mat3x3) != 72;\n\tError += sizeof(glm::f64mat3x4) != 96;\n\tError += sizeof(glm::f64mat4x2) != 64;\n\tError += sizeof(glm::f64mat4x3) != 96;\n\tError += sizeof(glm::f64mat4x4) != 128;\n\n\tError += sizeof(glm::lowp_f64mat2) != 32;\n\tError += sizeof(glm::lowp_f64mat3) != 72;\n\tError += sizeof(glm::lowp_f64mat4) != 128;\n\tError += sizeof(glm::lowp_f64mat2x2) != 32;\n\tError += sizeof(glm::lowp_f64mat2x3) != 48;\n\tError += sizeof(glm::lowp_f64mat2x4) != 64;\n\tError += sizeof(glm::lowp_f64mat3x2) != 48;\n\tError += sizeof(glm::lowp_f64mat3x3) != 72;\n\tError += sizeof(glm::lowp_f64mat3x4) != 96;\n\tError += sizeof(glm::lowp_f64mat4x2) != 64;\n\tError += sizeof(glm::lowp_f64mat4x3) != 96;\n\tError += sizeof(glm::lowp_f64mat4x4) != 128;\n\n\tError += sizeof(glm::mediump_f64mat2) != 32;\n\tError += sizeof(glm::mediump_f64mat3) != 72;\n\tError += sizeof(glm::mediump_f64mat4) != 128;\n\tError += sizeof(glm::mediump_f64mat2x2) != 32;\n\tError += sizeof(glm::mediump_f64mat2x3) != 48;\n\tError += sizeof(glm::mediump_f64mat2x4) != 64;\n\tError += sizeof(glm::mediump_f64mat3x2) != 48;\n\tError += sizeof(glm::mediump_f64mat3x3) != 72;\n\tError += sizeof(glm::mediump_f64mat3x4) != 96;\n\tError += sizeof(glm::mediump_f64mat4x2) != 64;\n\tError += sizeof(glm::mediump_f64mat4x3) != 96;\n\tError += sizeof(glm::mediump_f64mat4x4) != 128;\n\n\tError += sizeof(glm::highp_f64mat2) != 32;\n\tError += sizeof(glm::highp_f64mat3) != 72;\n\tError += sizeof(glm::highp_f64mat4) != 128;\n\tError += sizeof(glm::highp_f64mat2x2) != 32;\n\tError += sizeof(glm::highp_f64mat2x3) != 48;\n\tError += sizeof(glm::highp_f64mat2x4) != 64;\n\tError += sizeof(glm::highp_f64mat3x2) != 48;\n\tError += sizeof(glm::highp_f64mat3x3) != 72;\n\tError += sizeof(glm::highp_f64mat3x4) != 96;\n\tError += sizeof(glm::highp_f64mat4x2) != 64;\n\tError += sizeof(glm::highp_f64mat4x3) != 96;\n\tError += sizeof(glm::highp_f64mat4x4) != 128;\n\n\treturn Error;\n}\n\nstatic int test_quat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f32quat) != 16;\n\tError += sizeof(glm::f64quat) != 32;\n\n\tError += sizeof(glm::lowp_f32quat) != 16;\n\tError += sizeof(glm::lowp_f64quat) != 32;\n\n\tError += sizeof(glm::mediump_f32quat) != 16;\n\tError += sizeof(glm::mediump_f64quat) != 32;\n\n\tError += sizeof(glm::highp_f32quat) != 16;\n\tError += sizeof(glm::highp_f64quat) != 32;\n\n\treturn Error;\n}\n\nstatic int test_quat_precision()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::f32quat q1(0.f, glm::vec3(0.f, 0.f, 1.f));\n\t\tglm::lowp_f32quat qA(q1);\n\t\tglm::mediump_f32quat qB(q1);\n\t\tglm::highp_f32quat qC(q1);\n\t\tglm::f32quat q2(qA);\n\t\tglm::f32quat q3(qB);\n\t\tglm::f32quat q4(qC);\n\t\t\n\t\tError += glm::all(glm::equal(q1, q2, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(q1, q3, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(q1, q4, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_fvec_conversion()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::highp_vec4 a = glm::vec4(1, 2, 3, 4);\n\t\tglm::mediump_vec4 b = glm::vec4(1, 2, 3, 4);\n\t\tglm::lowp_vec4 c = b;\n\t\tglm::mediump_vec4 d = c;\n\t\tglm::lowp_ivec4 e = glm::ivec4(d);\n\t\tglm::lowp_ivec3 f = glm::ivec3(e);\n\n\t\tError += glm::all(glm::equal(b, d, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\n#if GLM_HAS_OPENMP\nstatic int test_openmp()\n{\n\tstd::vector<glm::u8vec3> VectorA(1000);\n\tstd::vector<glm::u8vec3> VectorB(1000);\n\tstd::vector<glm::u8vec3> VectorC(1000);\n\n\tfor (std::size_t i = 0; i < VectorA.size(); ++i)\n\t{\n\t\tVectorA[i] = glm::u8vec3(1, 1, 1);\n\t\tVectorB[i] = glm::u8vec3(1, 1, 1);\n\t}\n\n\t#pragma omp parallel for default(none) shared(VectorA, VectorB, VectorC)\n\tfor (int i = 0; i < static_cast<int>(VectorC.size()); ++i)\n\t{\n\t\tVectorC[i] = VectorA[i] + VectorB[i];\n\t}\n\n\treturn 0;\n}\n#endif//GLM_HAS_OPENMP\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_scalar_size();\n\tError += test_fvec_size();\n\n\tError += test_fvec_precision();\n\tError += test_fvec_conversion();\n\n\tError += test_dvec_precision();\n\n\tError += test_uvec_size();\n\tError += test_uvec_precision();\n\tError += test_ivec_size();\n\tError += test_ivec_precision();\n\n\tError += test_fmat_size();\n\tError += test_dmat_size();\n\tError += test_quat_size();\n\tError += test_quat_precision();\n\n#\tif GLM_HAS_OPENMP\n\t\tError += test_openmp();\n#\tendif//\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_type_ptr.cpp",
    "content": "#include <glm/gtc/type_ptr.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nint test_value_ptr_vec()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec3 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dvec2 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec3 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec4 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_vec_const()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec3 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dvec2 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec3 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec4 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_mat_const()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_make_pointer_mat()\n{\n\tint Error = 0;\n\n\tfloat ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tdouble ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\n\tglm::mat2x2 Mat2x2A = glm::make_mat2x2(ArrayA);\n\tglm::mat2x3 Mat2x3A = glm::make_mat2x3(ArrayA);\n\tglm::mat2x4 Mat2x4A = glm::make_mat2x4(ArrayA);\n\tglm::mat3x2 Mat3x2A = glm::make_mat3x2(ArrayA);\n\tglm::mat3x3 Mat3x3A = glm::make_mat3x3(ArrayA);\n\tglm::mat3x4 Mat3x4A = glm::make_mat3x4(ArrayA);\n\tglm::mat4x2 Mat4x2A = glm::make_mat4x2(ArrayA);\n\tglm::mat4x3 Mat4x3A = glm::make_mat4x3(ArrayA);\n\tglm::mat4x4 Mat4x4A = glm::make_mat4x4(ArrayA);\n\n\tglm::dmat2x2 Mat2x2B = glm::make_mat2x2(ArrayB);\n\tglm::dmat2x3 Mat2x3B = glm::make_mat2x3(ArrayB);\n\tglm::dmat2x4 Mat2x4B = glm::make_mat2x4(ArrayB);\n\tglm::dmat3x2 Mat3x2B = glm::make_mat3x2(ArrayB);\n\tglm::dmat3x3 Mat3x3B = glm::make_mat3x3(ArrayB);\n\tglm::dmat3x4 Mat3x4B = glm::make_mat3x4(ArrayB);\n\tglm::dmat4x2 Mat4x2B = glm::make_mat4x2(ArrayB);\n\tglm::dmat4x3 Mat4x3B = glm::make_mat4x3(ArrayB);\n\tglm::dmat4x4 Mat4x4B = glm::make_mat4x4(ArrayB);\n\n\treturn Error;\n}\n\nint test_make_pointer_vec()\n{\n\tint Error = 0;\n\n\tfloat ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tint ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tbool ArrayC[] = {true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false};\n\n\tglm::vec2 Vec2A = glm::make_vec2(ArrayA);\n\tglm::vec3 Vec3A = glm::make_vec3(ArrayA);\n\tglm::vec4 Vec4A = glm::make_vec4(ArrayA);\n\n\tglm::ivec2 Vec2B = glm::make_vec2(ArrayB);\n\tglm::ivec3 Vec3B = glm::make_vec3(ArrayB);\n\tglm::ivec4 Vec4B = glm::make_vec4(ArrayB);\n\n\tglm::bvec2 Vec2C = glm::make_vec2(ArrayC);\n\tglm::bvec3 Vec3C = glm::make_vec3(ArrayC);\n\tglm::bvec4 Vec4C = glm::make_vec4(ArrayC);\n\n\treturn Error;\n}\n\nint test_make_vec1()\n{\n\tint Error = 0;\n\n\tglm::ivec1 const v1 = glm::make_vec1(glm::ivec1(2));\n\tError += v1 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v2 = glm::make_vec1(glm::ivec2(2));\n\tError += v2 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v3 = glm::make_vec1(glm::ivec3(2));\n\tError += v3 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v4 = glm::make_vec1(glm::ivec4(2));\n\tError += v3 == glm::ivec1(2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec2()\n{\n\tint Error = 0;\n\n\tglm::ivec2 const v1 = glm::make_vec2(glm::ivec1(2));\n\tError += v1 == glm::ivec2(2, 0) ? 0 : 1;\n\n\tglm::ivec2 const v2 = glm::make_vec2(glm::ivec2(2));\n\tError += v2 == glm::ivec2(2, 2) ? 0 : 1;\n\n\tglm::ivec2 const v3 = glm::make_vec2(glm::ivec3(2));\n\tError += v3 == glm::ivec2(2, 2) ? 0 : 1;\n\n\tglm::ivec2 const v4 = glm::make_vec2(glm::ivec4(2));\n\tError += v3 == glm::ivec2(2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec3()\n{\n\tint Error = 0;\n\n\tglm::ivec3 const v1 = glm::make_vec3(glm::ivec1(2));\n\tError += v1 == glm::ivec3(2, 0, 0) ? 0 : 1;\n\n\tglm::ivec3 const v2 = glm::make_vec3(glm::ivec2(2));\n\tError += v2 == glm::ivec3(2, 2, 0) ? 0 : 1;\n\n\tglm::ivec3 const v3 = glm::make_vec3(glm::ivec3(2));\n\tError += v3 == glm::ivec3(2, 2, 2) ? 0 : 1;\n\n\tglm::ivec3 const v4 = glm::make_vec3(glm::ivec4(2));\n\tError += v3 == glm::ivec3(2, 2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec4()\n{\n\tint Error = 0;\n\n\tglm::ivec4 const v1 = glm::make_vec4(glm::ivec1(2));\n\tError += v1 == glm::ivec4(2, 0, 0, 1) ? 0 : 1;\n\n\tglm::ivec4 const v2 = glm::make_vec4(glm::ivec2(2));\n\tError += v2 == glm::ivec4(2, 2, 0, 1) ? 0 : 1;\n\n\tglm::ivec4 const v3 = glm::make_vec4(glm::ivec3(2));\n\tError += v3 == glm::ivec4(2, 2, 2, 1) ? 0 : 1;\n\n\tglm::ivec4 const v4 = glm::make_vec4(glm::ivec4(2));\n\tError += v4 == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_make_vec1();\n\tError += test_make_vec2();\n\tError += test_make_vec3();\n\tError += test_make_vec4();\n\tError += test_make_pointer_vec();\n\tError += test_make_pointer_mat();\n\tError += test_value_ptr_vec();\n\tError += test_value_ptr_vec_const();\n\tError += test_value_ptr_mat();\n\tError += test_value_ptr_mat_const();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_ulp.cpp",
    "content": "#include <glm/gtc/ulp.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <limits>\n\nint test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfloat B = glm::next_float(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tfloat C = glm::prev_float(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tint D = glm::float_distance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tint E = glm::float_distance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tfloat B = glm::next_float(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tfloat C = glm::prev_float(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tint D = glm::float_distance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tint E = glm::float_distance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tdouble B = glm::next_float(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tdouble C = glm::prev_float(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tglm::int64 const D = glm::float_distance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tglm::int64 const E = glm::float_distance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tdouble B = glm::next_float(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tdouble C = glm::prev_float(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tglm::int64 const D = glm::float_distance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tglm::int64 const E = glm::float_distance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_user_defined_types.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2010-09-16\n// Updated : 2011-05-27\n// Licence : This source is under MIT licence\n// File    : test/gtc/type_ptr.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#define GLM_FORCE_RADIANS\n#include <glm/gtc/user_defined_type.hpp>\n\nint test_make_pointer_vec()\n{\n\tint Error = 0;\n\n\tglm::func();\n\t//func();\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_make_pointer_vec();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtc/gtc_vec1.cpp",
    "content": "#include <glm/gtc/vec1.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/CMakeLists.txt",
    "content": "glmCreateTestGTC(gtx)\nglmCreateTestGTC(gtx_associated_min_max)\nglmCreateTestGTC(gtx_closest_point)\nglmCreateTestGTC(gtx_color_encoding)\nglmCreateTestGTC(gtx_color_space_YCoCg)\nglmCreateTestGTC(gtx_color_space)\nglmCreateTestGTC(gtx_common)\nglmCreateTestGTC(gtx_compatibility)\nglmCreateTestGTC(gtx_component_wise)\nglmCreateTestGTC(gtx_easing)\nglmCreateTestGTC(gtx_euler_angle)\nglmCreateTestGTC(gtx_extend)\nglmCreateTestGTC(gtx_extended_min_max)\nglmCreateTestGTC(gtx_exterior_product)\nglmCreateTestGTC(gtx_fast_exponential)\nglmCreateTestGTC(gtx_fast_square_root)\nglmCreateTestGTC(gtx_fast_trigonometry)\nglmCreateTestGTC(gtx_functions)\nglmCreateTestGTC(gtx_gradient_paint)\nglmCreateTestGTC(gtx_handed_coordinate_space)\nglmCreateTestGTC(gtx_hash)\nglmCreateTestGTC(gtx_integer)\nglmCreateTestGTC(gtx_intersect)\nglmCreateTestGTC(gtx_io)\nglmCreateTestGTC(gtx_load)\nglmCreateTestGTC(gtx_log_base)\nglmCreateTestGTC(gtx_matrix_cross_product)\nglmCreateTestGTC(gtx_matrix_decompose)\nglmCreateTestGTC(gtx_matrix_factorisation)\nglmCreateTestGTC(gtx_matrix_interpolation)\nglmCreateTestGTC(gtx_matrix_major_storage)\nglmCreateTestGTC(gtx_matrix_operation)\nglmCreateTestGTC(gtx_matrix_query)\nglmCreateTestGTC(gtx_matrix_transform_2d)\nglmCreateTestGTC(gtx_norm)\nglmCreateTestGTC(gtx_normal)\nglmCreateTestGTC(gtx_normalize_dot)\nglmCreateTestGTC(gtx_number_precision)\nglmCreateTestGTC(gtx_orthonormalize)\nglmCreateTestGTC(gtx_optimum_pow)\nglmCreateTestGTC(gtx_pca)\nglmCreateTestGTC(gtx_perpendicular)\nglmCreateTestGTC(gtx_polar_coordinates)\nglmCreateTestGTC(gtx_projection)\nglmCreateTestGTC(gtx_quaternion)\nglmCreateTestGTC(gtx_dual_quaternion)\nglmCreateTestGTC(gtx_range)\nglmCreateTestGTC(gtx_rotate_normalized_axis)\nglmCreateTestGTC(gtx_rotate_vector)\nglmCreateTestGTC(gtx_scalar_multiplication)\nglmCreateTestGTC(gtx_scalar_relational)\nglmCreateTestGTC(gtx_spline)\nglmCreateTestGTC(gtx_string_cast)\nglmCreateTestGTC(gtx_texture)\nglmCreateTestGTC(gtx_type_aligned)\nglmCreateTestGTC(gtx_type_trait)\nglmCreateTestGTC(gtx_vec_swizzle)\nglmCreateTestGTC(gtx_vector_angle)\nglmCreateTestGTC(gtx_vector_query)\nglmCreateTestGTC(gtx_wrap)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx.cpp",
    "content": "#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_associated_min_max.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_closest_point.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/closest_point.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_color_encoding.cpp",
    "content": "#include <glm/gtx/color_encoding.hpp>\n#include <glm/gtc/color_space.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n\nnamespace srgb\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);\n/*\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearSRGBToD65XYZ(ColorSourceRGB);\n\t\t\tglm::vec3 const ColorRGB = glm::convertD65XYZToLinearSRGB(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n*/\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb\n\nint main()\n{\n\tint Error(0);\n\n\tError += srgb::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_color_space.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/color_space.hpp>\n\nint test_saturation()\n{\n\tint Error(0);\n\t\n\tglm::vec4 Color = glm::saturation(1.0f, glm::vec4(1.0, 0.5, 0.0, 1.0));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_saturation();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_color_space_YCoCg.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/color_space_YCoCg.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_common.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/common.hpp>\n\nnamespace fmod_\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType modTrunc(genType a, genType b)\n\t{\n\t\treturn a - b * glm::trunc(a / b);\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat A0(3.0);\n\t\t\tfloat B0(2.0f);\n\t\t\tfloat C0 = glm::fmod(A0, B0);\n\n\t\t\tError += glm::abs(C0 - 1.0f) < 0.00001f ? 0 : 1;\n\n\t\t\tglm::vec4 A1(3.0);\n\t\t\tfloat B1(2.0f);\n\t\t\tglm::vec4 C1 = glm::fmod(A1, B1);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C1, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::vec4 A2(3.0);\n\t\t\tglm::vec4 B2(2.0f);\n\t\t\tglm::vec4 C2 = glm::fmod(A2, B2);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C2, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::ivec4 A3(3);\n\t\t\tint B3(2);\n\t\t\tglm::ivec4 C3 = glm::fmod(A3, B3);\n\n\t\t\tError += glm::all(glm::equal(C3, glm::ivec4(1))) ? 0 : 1;\n\n\t\t\tglm::ivec4 A4(3);\n\t\t\tglm::ivec4 B4(2);\n\t\t\tglm::ivec4 C4 = glm::fmod(A4, B4);\n\n\t\t\tError += glm::all(glm::equal(C4, glm::ivec4(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A0(22.0);\n\t\t\tfloat B0(-10.0f);\n\t\t\tfloat C0 = glm::fmod(A0, B0);\n\n\t\t\tError += glm::abs(C0 - 2.0f) < 0.00001f ? 0 : 1;\n\n\t\t\tglm::vec4 A1(22.0);\n\t\t\tfloat B1(-10.0f);\n\t\t\tglm::vec4 C1 = glm::fmod(A1, B1);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C1, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::vec4 A2(22.0);\n\t\t\tglm::vec4 B2(-10.0f);\n\t\t\tglm::vec4 C2 = glm::fmod(A2, B2);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C2, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::ivec4 A3(22);\n\t\t\tint B3(-10);\n\t\t\tglm::ivec4 C3 = glm::fmod(A3, B3);\n\n\t\t\tError += glm::all(glm::equal(C3, glm::ivec4(2))) ? 0 : 1;\n\n\t\t\tglm::ivec4 A4(22);\n\t\t\tglm::ivec4 B4(-10);\n\t\t\tglm::ivec4 C4 = glm::fmod(A4, B4);\n\n\t\t\tError += glm::all(glm::equal(C4, glm::ivec4(2))) ? 0 : 1;\n\t\t}\n\n\t\t// http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\n\t\t{\n\t\t\tfor (float y = -10.0f; y < 10.0f; y += 0.1f)\n\t\t\tfor (float x = -10.0f; x < 10.0f; x += 0.1f)\n\t\t\t{\n\t\t\t\tfloat const A(std::fmod(x, y));\n\t\t\t\t//float const B(std::remainder(x, y));\n\t\t\t\tfloat const C(glm::fmod(x, y));\n\t\t\t\tfloat const D(modTrunc(x, y));\n\n\t\t\t\t//Error += glm::epsilonEqual(A, B, 0.0001f) ? 0 : 1;\n\t\t\t\t//assert(!Error);\n\t\t\t\tError += glm::epsilonEqual(A, C, 0.0001f) ? 0 : 1;\n\t\t\t\tassert(!Error);\n\t\t\t\tError += glm::epsilonEqual(A, D, 0.00001f) ? 0 : 1;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace fmod_\n\nint test_isdenormal()\n{\n\tint Error = 0;\n\n\tbool A = glm::isdenormal(1.0f);\n\tError += !A ? 0 : 1;\n\n\tglm::bvec1 B = glm::isdenormal(glm::vec1(1.0f));\n\tError += !glm::any(B) ? 0 : 1;\n\n\tglm::bvec2 C = glm::isdenormal(glm::vec2(1.0f));\n\tError += !glm::any(C) ? 0 : 1;\n\n\tglm::bvec3 D = glm::isdenormal(glm::vec3(1.0f));\n\tError += !glm::any(D) ? 0 : 1;\n\n\tglm::bvec4 E = glm::isdenormal(glm::vec4(1.0f));\n\tError += !glm::any(E) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_openBounded()\n{\n\tint Error = 0;\n\n\tError += glm::all(glm::openBounded(glm::ivec2(2), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += !glm::all(glm::openBounded(glm::ivec2(1), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += !glm::all(glm::openBounded(glm::ivec2(3), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_closeBounded()\n{\n\tint Error = 0;\n\n\tError += glm::all(glm::closeBounded(glm::ivec2(2), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += glm::all(glm::closeBounded(glm::ivec2(1), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += glm::all(glm::closeBounded(glm::ivec2(3), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_isdenormal();\n\tError += ::fmod_::test();\n\tError += test_openBounded();\n\tError += test_closeBounded();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_compatibility.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/compatibility.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\tError += glm::isfinite(1.0f) ? 0 : 1;\n\tError += glm::isfinite(1.0) ? 0 : 1;\n\tError += glm::isfinite(-1.0f) ? 0 : 1;\n\tError += glm::isfinite(-1.0) ? 0 : 1;\n\n\tError += glm::all(glm::isfinite(glm::vec4(1.0f))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::dvec4(1.0))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::vec4(-1.0f))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::dvec4(-1.0))) ? 0 : 1;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_component_wise.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/component_wise.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <limits>\n\nnamespace compNormalize\n{\n\tint run()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::u8vec4(0, 127, 128, 255));\n\n\t\t\tError += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.5f ? 0 : 1;\n\t\t\tError += A.z > 0.5f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::i8vec4(-128, -1, 0, 127));\n\n\t\t\tError += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.0f ? 0 : 1;\n\t\t\tError += A.z > 0.0f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::u16vec4(\n\t\t\t\tstd::numeric_limits<glm::u16>::min(),\n\t\t\t\t(std::numeric_limits<glm::u16>::max() >> 1) + 0,\n\t\t\t\t(std::numeric_limits<glm::u16>::max() >> 1) + 1,\n\t\t\t\tstd::numeric_limits<glm::u16>::max()));\n\n\t\t\tError += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.5f ? 0 : 1;\n\t\t\tError += A.z > 0.5f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::i16vec4(\n\t\t\t\tstd::numeric_limits<glm::i16>::min(),\n\t\t\t\tstatic_cast<glm::i16>(-1),\n\t\t\t\tstatic_cast<glm::i16>(0),\n\t\t\t\tstd::numeric_limits<glm::i16>::max()));\n\n\t\t\tError += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.0f ? 0 : 1;\n\t\t\tError += A.z > 0.0f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace compNormalize\n\nnamespace compScale\n{\n\tint run()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::u8vec4 const A = glm::compScale<glm::u8>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == std::numeric_limits<glm::u8>::min() ? 0 : 1;\n\t\t\tError += A.y < (std::numeric_limits<glm::u8>::max() >> 2) ? 0 : 1;\n\t\t\tError += A.z == 127 ? 0 : 1;\n\t\t\tError += A.w == 255 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::i8vec4 const A = glm::compScale<glm::i8>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == 0 ? 0 : 1;\n\t\t\tError += A.y == -128 ? 0 : 1;\n\t\t\tError += A.z == 63 ? 0 : 1;\n\t\t\tError += A.w == 127 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::u16vec4 const A = glm::compScale<glm::u16>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == std::numeric_limits<glm::u16>::min() ? 0 : 1;\n\t\t\tError += A.y < (std::numeric_limits<glm::u16>::max() >> 2) ? 0 : 1;\n\t\t\tError += A.z == 32767 ? 0 : 1;\n\t\t\tError += A.w == 65535 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::i16vec4 const A = glm::compScale<glm::i16>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == 0 ? 0 : 1;\n\t\t\tError += A.y == -32768 ? 0 : 1;\n\t\t\tError += A.z == 16383 ? 0 : 1;\n\t\t\tError += A.w == 32767 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}// compScale\n\nint main()\n{\n\tint Error(0);\n\n\tError += compNormalize::run();\n\tError += compScale::run();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_dual_quaternion.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#define GLM_FORCE_CTOR_INIT\n#include <glm/gtx/dual_quaternion.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/euler_angles.hpp>\n#include <glm/vector_relational.hpp>\n#if GLM_HAS_TRIVIAL_QUERIES\n#\tinclude <type_traits>\n#endif\n\nint myrand()\n{\n\tstatic int holdrand = 1;\n\treturn (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);\n}\n\nfloat myfrand() // returns values from -1 to 1 inclusive\n{\n\treturn float(double(myrand()) / double( 0x7ffff )) * 2.0f - 1.0f;\n}\n\nint test_dquat_type()\n{\n\tglm::dvec3 vA;\n\tglm::dquat dqA, dqB;\n\tglm::ddualquat C(dqA, dqB);\n\tglm::ddualquat B(dqA);\n\tglm::ddualquat D(dqA, vA);\n\treturn 0;\n}\n\nint test_scalars()\n{\n\tfloat const Epsilon = 0.0001f;\n\n\tint Error(0);\n\n\tglm::quat src_q1 = glm::quat(1.0f,2.0f,3.0f,4.0f);\n\tglm::quat src_q2 = glm::quat(5.0f,6.0f,7.0f,8.0f);\n\tglm::dualquat src1(src_q1,src_q2);\n\n\t{\n\t\tglm::dualquat dst1 = src1 * 2.0f;\n\t\tglm::dualquat dst2 = 2.0f * src1;\n\t\tglm::dualquat dst3 = src1;\n\t\tdst3 *= 2.0f;\n\t\tglm::dualquat dstCmp(src_q1 * 2.0f,src_q2 * 2.0f);\n\t\tError += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst3.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst3.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dualquat dst1 = src1 / 2.0f;\n\t\tglm::dualquat dst2 = src1;\n\t\tdst2 /= 2.0f;\n\t\tglm::dualquat dstCmp(src_q1 / 2.0f,src_q2 / 2.0f);\n\t\tError += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t}\n\treturn Error;\n}\n\nint test_inverse() \n{\n\tint Error(0);\n\n\tfloat const Epsilon = 0.0001f;\n\n\tglm::dualquat dqid = glm::dual_quat_identity<float, glm::defaultp>();\n\tglm::mat4x4 mid(1.0f);\n\n\tfor (int j = 0; j < 100; ++j)\n\t{\n\t\tglm::mat4x4 rot = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::vec3 vt = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\n\t\tglm::mat4x4 m = glm::translate(mid, vt) * rot;\n\n\t\tglm::quat qr = glm::quat_cast(m);\n\n\t\tglm::dualquat dq(qr);\n\n\t\tglm::dualquat invdq = glm::inverse(dq);\n\n\t\tglm::dualquat r1 = invdq * dq;\n\t\tglm::dualquat r2 = dq * invdq;\n\n\t\tError += glm::all(glm::epsilonEqual(r1.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r1.dual, dqid.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(r2.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r2.dual, dqid.dual, Epsilon)) ? 0 : 1;\n\n\t\t// testing commutative property\n\t\tglm::dualquat r (   glm::quat( myfrand() * glm::pi<float>() * 2.0f, myfrand(), myfrand(), myfrand() ),\n\t\t\t\t\t\t\tglm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f) );\n\t\tglm::dualquat riq = (r * invdq) * dq;\n\t\tglm::dualquat rqi = (r * dq) * invdq;\n\n\t\tError += glm::all(glm::epsilonEqual(riq.real, rqi.real, Epsilon)) && glm::all(glm::epsilonEqual(riq.dual, rqi.dual, Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_mul() \n{\n\tint Error(0);\n\n\tfloat const Epsilon = 0.0001f;\n\n\tglm::mat4x4 mid(1.0f);\n\n\tfor (int j = 0; j < 100; ++j)\n\t{\n\t\t// generate random rotations and translations and compare transformed by matrix and dualquats random points \n\t\tglm::vec3 vt1 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\t\tglm::vec3 vt2 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\n\t\tglm::mat4x4 rot1 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::mat4x4 rot2 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::mat4x4 m1 = glm::translate(mid, vt1) * rot1;\n\t\tglm::mat4x4 m2 = glm::translate(mid, vt2) * rot2;\n\t\tglm::mat4x4 m3 = m2 * m1;\n\t\tglm::mat4x4 m4 = m1 * m2;\n\n\t\tglm::quat qrot1 = glm::quat_cast(rot1);\n\t\tglm::quat qrot2 = glm::quat_cast(rot2);\n\n\t\tglm::dualquat dq1 = glm::dualquat(qrot1,vt1);\n\t\tglm::dualquat dq2 = glm::dualquat(qrot2,vt2);\n\t\tglm::dualquat dq3 = dq2 * dq1;\n\t\tglm::dualquat dq4 = dq1 * dq2;\n\n\t\tfor (int i = 0; i < 100; ++i)\n\t\t{\n\t\t\tglm::vec4 src_pt = glm::vec4(myfrand() * 4.0f, myfrand() * 5.0f, myfrand() * 3.0f,1.0f);\n\t\t\t// test both multiplication orders        \n\t\t\tglm::vec4 dst_pt_m3  = m3 * src_pt; \n\t\t\tglm::vec4 dst_pt_dq3 = dq3 * src_pt;\n\n\t\t\tglm::vec4 dst_pt_m3_i  = glm::inverse(m3) * src_pt;\n\t\t\tglm::vec4 dst_pt_dq3_i = src_pt * dq3;\n\n\t\t\tglm::vec4 dst_pt_m4  = m4 * src_pt;\n\t\t\tglm::vec4 dst_pt_dq4 = dq4 * src_pt;\n\n\t\t\tglm::vec4 dst_pt_m4_i  = glm::inverse(m4) * src_pt;\n\t\t\tglm::vec4 dst_pt_dq4_i = src_pt * dq4;\n\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m3, dst_pt_dq3, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m4, dst_pt_dq4, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m3_i, dst_pt_dq3_i, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m4_i, dst_pt_dq4_i, Epsilon)) ? 0 : 1;\n\t\t}\n\t} \n\n\treturn Error;\n}\n\nint test_dual_quat_ctr()\n{\n\tint Error(0);\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::dualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_default_constructible<glm::ddualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::dualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::ddualquat>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dualquat>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ddualquat>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::dualquat>::value ? 0 : 1;\n\t\tError += std::is_copy_constructible<glm::ddualquat>::value ? 0 : 1;\n#\tendif\n\n\treturn Error;\n}\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::dualquat) ? 0 : 1;\n\tError += 64 == sizeof(glm::ddualquat) ? 0 : 1;\n\tError += glm::dualquat().length() == 2 ? 0 : 1;\n\tError += glm::ddualquat().length() == 2 ? 0 : 1;\n\tError += glm::dualquat::length() == 2 ? 0 : 1;\n\tError += glm::ddualquat::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_dual_quat_ctr();\n\tError += test_dquat_type();\n\tError += test_scalars();\n\tError += test_inverse();\n\tError += test_mul();\n\tError += test_size();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_easing.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/quaternion.hpp>\n#include <glm/gtx/easing.hpp>\n\nnamespace\n{\n\n\ttemplate<typename T>\n\tvoid _test_easing()\n\t{\n\t\tT a = static_cast<T>(0.5);\n\t\tT r;\n\n\t\tr = glm::linearInterpolation(a);\n\n\t\tr = glm::quadraticEaseIn(a);\n\t\tr = glm::quadraticEaseOut(a);\n\t\tr = glm::quadraticEaseInOut(a);\n\n\t\tr = glm::cubicEaseIn(a);\n\t\tr = glm::cubicEaseOut(a);\n\t\tr = glm::cubicEaseInOut(a);\n\n\t\tr = glm::quarticEaseIn(a);\n\t\tr = glm::quarticEaseOut(a);\n\t\tr = glm::quinticEaseInOut(a);\n\n\t\tr = glm::sineEaseIn(a);\n\t\tr = glm::sineEaseOut(a);\n\t\tr = glm::sineEaseInOut(a);\n\n\t\tr = glm::circularEaseIn(a);\n\t\tr = glm::circularEaseOut(a);\n\t\tr = glm::circularEaseInOut(a);\n\n\t\tr = glm::exponentialEaseIn(a);\n\t\tr = glm::exponentialEaseOut(a);\n\t\tr = glm::exponentialEaseInOut(a);\n\n\t\tr = glm::elasticEaseIn(a);\n\t\tr = glm::elasticEaseOut(a);\n\t\tr = glm::elasticEaseInOut(a);\n\n\t\tr = glm::backEaseIn(a);\n\t\tr = glm::backEaseOut(a);\n\t\tr = glm::backEaseInOut(a);\n\n\t\tr = glm::bounceEaseIn(a);\n\t\tr = glm::bounceEaseOut(a);\n\t\tr = glm::bounceEaseInOut(a);\n\t}\n\n}\n\nint main()\n{\n\tint Error = 0;\n\n\t_test_easing<float>();\n\t_test_easing<double>();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_euler_angle.cpp",
    "content": "// Code sample from Filippo Ramaciotti\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtx/matrix_cross_product.hpp>\n#include <glm/gtx/matrix_operation.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/string_cast.hpp>\n#include <glm/gtx/euler_angles.hpp>\n#include <cstdio>\n#include <vector>\n#include <utility>\n\nnamespace test_eulerAngleX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const X(1.0f, 0.0f, 0.0f);\n\n\t\tglm::vec4 const Y(0.0f, 1.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const Y1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Y;\n\t\tglm::vec4 const Y2 = glm::eulerAngleX(Angle) * Y;\n\t\tglm::vec4 const Y3 = glm::eulerAngleXY(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Y4 = glm::eulerAngleYX(0.0f, Angle) * Y;\n\t\tglm::vec4 const Y5 = glm::eulerAngleXZ(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Y6 = glm::eulerAngleZX(0.0f, Angle) * Y;\n\t\tglm::vec4 const Y7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Y;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Z;\n\t\tglm::vec4 const Z2 = glm::eulerAngleX(Angle) * Z;\n\t\tglm::vec4 const Z3 = glm::eulerAngleXY(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z4 = glm::eulerAngleYX(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z5 = glm::eulerAngleXZ(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z6 = glm::eulerAngleZX(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Z;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleX\n\nnamespace test_eulerAngleY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const Y(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Y) * X;\n\t\tglm::vec4 const X2 = glm::eulerAngleY(Angle) * X;\n\t\tglm::vec4 const X3 = glm::eulerAngleYX(Angle, 0.0f) * X;\n\t\tglm::vec4 const X4 = glm::eulerAngleXY(0.0f, Angle) * X;\n\t\tglm::vec4 const X5 = glm::eulerAngleYZ(Angle, 0.0f) * X;\n\t\tglm::vec4 const X6 = glm::eulerAngleZY(0.0f, Angle) * X;\n\t\tglm::vec4 const X7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * X;\n\t\tError += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::eulerAngleY(Angle) * Z;\n\t\tglm::vec4 const Z2 = glm::rotate(glm::mat4(1.0f), Angle, Y) * Z;\n\t\tglm::vec4 const Z3 = glm::eulerAngleYX(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z4 = glm::eulerAngleXY(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z5 = glm::eulerAngleYZ(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z6 = glm::eulerAngleZY(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * Z;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleY\n\nnamespace test_eulerAngleZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const Z(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * X;\n\t\tglm::vec4 const X2 = glm::eulerAngleZ(Angle) * X;\n\t\tglm::vec4 const X3 = glm::eulerAngleZX(Angle, 0.0f) * X;\n\t\tglm::vec4 const X4 = glm::eulerAngleXZ(0.0f, Angle) * X;\n\t\tglm::vec4 const X5 = glm::eulerAngleZY(Angle, 0.0f) * X;\n\t\tglm::vec4 const X6 = glm::eulerAngleYZ(0.0f, Angle) * X;\n\t\tglm::vec4 const X7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * X;\n\t\tError += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Y(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * Y;\n\t\tglm::vec4 const Z2 = glm::eulerAngleZ(Angle) * Y;\n\t\tglm::vec4 const Z3 = glm::eulerAngleZX(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Z4 = glm::eulerAngleXZ(0.0f, Angle) * Y;\n\t\tglm::vec4 const Z5 = glm::eulerAngleZY(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Z6 = glm::eulerAngleYZ(0.0f, Angle) * Y;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * Y;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZ\n\nnamespace test_derivedEulerAngles\n{\n\tbool epsilonEqual(glm::mat4 const& mat1, glm::mat4 const& mat2, glm::mat4::value_type const& epsilon)\n\t{\n\t\treturn glm::all(glm::epsilonEqual(mat1[0], mat2[0], epsilon)) ?\n\t\t\t\t(\n\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[1], mat2[1], epsilon)) ?\n\t\t\t\t\t(\n\t\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[2], mat2[2], epsilon)) ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[3], mat2[3], epsilon)) ? true : false\n\t\t\t\t\t\t) : false\n\t\t\t\t\t) : false\n\t\t\t\t) : false;\n\t}\n\n\ttemplate<typename RotationFunc, typename TestDerivedFunc>\n\tint test(RotationFunc rotationFunc, TestDerivedFunc testDerivedFunc, const glm::vec3& basis)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::vec3::value_type value;\n\t\tvalue const zeroAngle(0.0f);\n\t\tvalue const Angle(glm::pi<float>() * 0.75f);\n\t\tvalue const negativeAngle(-Angle);\n\t\tvalue const zeroAngleVelocity(0.0f);\n\t\tvalue const AngleVelocity(glm::pi<float>() * 0.27f);\n\t\tvalue const negativeAngleVelocity(-AngleVelocity);\n\n\t\ttypedef std::pair<value,value> AngleAndAngleVelocity;\n\t\tstd::vector<AngleAndAngleVelocity> testPairs;\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, negativeAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, negativeAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, negativeAngleVelocity));\n\n\t\tfor (size_t i = 0, size = testPairs.size(); i < size; ++i)\n\t\t{\n\t\t\tAngleAndAngleVelocity const& pair = testPairs.at(i);\n\n\t\t\tglm::mat4 const W = glm::matrixCross4(basis * pair.second);\n\t\t\tglm::mat4 const rotMt = glm::transpose(rotationFunc(pair.first));\n\t\t\tglm::mat4 const derivedRotM = testDerivedFunc(pair.first, pair.second);\n\n\t\t\tError += epsilonEqual(W, derivedRotM * rotMt, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_derivedEulerAngles\n\nnamespace test_eulerAngleXY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleY(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleXY(AngleX, AngleY) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleY(AngleY) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleXY\n\nnamespace test_eulerAngleYX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleY(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleYX(AngleY, AngleX) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleX(AngleX) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleYX\n\nnamespace test_eulerAngleXZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleXZ(AngleX, AngleZ) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleZ(AngleZ) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleXZ\n\nnamespace test_eulerAngleZX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleZX(AngleZ, AngleX) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleX(AngleX) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZX\n\nnamespace test_eulerAngleYZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleY(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleYZ(AngleY, AngleZ) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleZ(AngleZ) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleYZ\n\nnamespace test_eulerAngleZY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleY(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleZY(AngleZ, AngleY) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleY(AngleY) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZY\n\nnamespace test_eulerAngleYXZ\n{\n\tint test()\n\t{\n\t\tglm::f32 first =  1.046f;\n\t\tglm::f32 second = 0.52f;\n\t\tglm::f32 third = -0.785f;\n\n\t\tglm::fmat4 rotationEuler = glm::eulerAngleYXZ(first, second, third); \n\n\t\tglm::fmat4 rotationInvertedY  = glm::eulerAngleY(-1.f*first) * glm::eulerAngleX(second) * glm::eulerAngleZ(third); \n\t\tglm::fmat4 rotationDumb = glm::fmat4(); \n\t\trotationDumb = glm::rotate(rotationDumb, first, glm::fvec3(0,1,0));\n\t\trotationDumb = glm::rotate(rotationDumb, second, glm::fvec3(1,0,0));\n\t\trotationDumb = glm::rotate(rotationDumb, third, glm::fvec3(0,0,1));\n\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler)).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationDumb)).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationInvertedY)).c_str());\n\n\t\tstd::printf(\"\\nRESIDUAL\\n\");\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler-(rotationDumb))).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler-(rotationInvertedY))).c_str());\n\n\t\treturn 0;\n\t}\n}//namespace eulerAngleYXZ\n\nnamespace test_eulerAngles\n{\n\ttemplate<typename TestRotationFunc>\n\tint test(TestRotationFunc testRotationFunc, glm::vec3 const& I, glm::vec3 const& J, glm::vec3 const& K)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::mat4::value_type value;\n\t\tvalue const minAngle(-glm::pi<value>());\n\t\tvalue const maxAngle(glm::pi<value>());\n\t\tvalue const maxAngleWithDelta(maxAngle - 0.0000001f);\n\t\tvalue const minMidAngle(-glm::pi<value>() * 0.5f);\n\t\tvalue const maxMidAngle(glm::pi<value>() * 0.5f);\n\n\t\tstd::vector<glm::vec3> testEulerAngles;\n\t\ttestEulerAngles.push_back(glm::vec3(1.046f, 0.52f, -0.785f));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, maxAngle));\n\n\t\tfor (size_t i = 0, size = testEulerAngles.size(); i < size; ++i)\n\t\t{\n\t\t\tglm::vec3 const& angles = testEulerAngles.at(i);\n\t\t\tglm::mat4 const rotationEuler = testRotationFunc(angles.x, angles.y, angles.z);\n\n\t\t\tglm::mat4 rotationDumb = glm::diagonal4x4(glm::mat4::col_type(1.0f));\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.x, I);\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.y, J);\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.z, K);\n\n\t\t\tglm::vec4 const V(1.0f,1.0f,1.0f,1.0f);\n\t\t\tglm::vec4 const V1 = rotationEuler * V;\n\t\t\tglm::vec4 const V2 = rotationDumb * V;\n\n\t\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_extractsEulerAngles\n\nnamespace test_extractsEulerAngles\n{\n\ttemplate<typename RotationFunc, typename TestExtractionFunc>\n\tint test(RotationFunc rotationFunc, TestExtractionFunc testExtractionFunc)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::mat4::value_type value;\n\t\tvalue const minAngle(-glm::pi<value>());\n\t\tvalue const maxAngle(glm::pi<value>());\n\t\tvalue const maxAngleWithDelta(maxAngle - 0.0000001f);\n\t\tvalue const minMidAngle(-glm::pi<value>() * 0.5f);\n\t\tvalue const maxMidAngle(glm::pi<value>() * 0.5f);\n\n\t\tstd::vector<glm::vec3> testEulerAngles;\n\t\ttestEulerAngles.push_back(glm::vec3(1.046f, 0.52f, -0.785f));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, maxAngle));\n\n\t\tfor (size_t i = 0, size = testEulerAngles.size(); i < size; ++i)\n\t\t{\n\t\t\tglm::vec3 const& angles = testEulerAngles.at(i);\n\t\t\tglm::mat4 const rotation = rotationFunc(angles.x, angles.y, angles.z);\n\n\t\t\tglm::vec3 extractedEulerAngles(0.0f);\n\t\t\ttestExtractionFunc(rotation, extractedEulerAngles.x, extractedEulerAngles.y, extractedEulerAngles.z);\n\t\t\tglm::mat4 const extractedRotation = rotationFunc(extractedEulerAngles.x, extractedEulerAngles.y, extractedEulerAngles.z);\n\n\t\t\tglm::vec4 const V(1.0f,1.0f,1.0f,1.0f);\n\t\t\tglm::vec4 const V1 = rotation * V;\n\t\t\tglm::vec4 const V2 = extractedRotation * V;\n\n\t\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_extractsEulerAngles\n\nint main()\n{ \n\tint Error = 0;\n\n\ttypedef glm::mat4::value_type value;\n\tglm::vec3 const X(1.0f, 0.0f, 0.0f);\n\tglm::vec3 const Y(0.0f, 1.0f, 0.0f);\n\tglm::vec3 const Z(0.0f, 0.0f, 1.0f);\n\n\tError += test_eulerAngleX::test();\n\tError += test_eulerAngleY::test();\n\tError += test_eulerAngleZ::test();\n\n\tError += test_derivedEulerAngles::test(glm::eulerAngleX<value>, glm::derivedEulerAngleX<value>, X);\n\tError += test_derivedEulerAngles::test(glm::eulerAngleY<value>, glm::derivedEulerAngleY<value>, Y);\n\tError += test_derivedEulerAngles::test(glm::eulerAngleZ<value>, glm::derivedEulerAngleZ<value>, Z);\n\n\tError += test_eulerAngleXY::test();\n\tError += test_eulerAngleYX::test();\n\tError += test_eulerAngleXZ::test();\n\tError += test_eulerAngleZX::test();\n\tError += test_eulerAngleYZ::test();\n\tError += test_eulerAngleZY::test();\n\tError += test_eulerAngleYXZ::test();\n\n\tError += test_eulerAngles::test(glm::eulerAngleXZX<value>, X, Z, X);\n\tError += test_eulerAngles::test(glm::eulerAngleXYX<value>, X, Y, X);\n\tError += test_eulerAngles::test(glm::eulerAngleYXY<value>, Y, X, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleYZY<value>, Y, Z, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleZYZ<value>, Z, Y, Z);\n\tError += test_eulerAngles::test(glm::eulerAngleZXZ<value>, Z, X, Z);\n\tError += test_eulerAngles::test(glm::eulerAngleXZY<value>, X, Z, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleYZX<value>, Y, Z, X);\n\tError += test_eulerAngles::test(glm::eulerAngleZYX<value>, Z, Y, X);\n\tError += test_eulerAngles::test(glm::eulerAngleZXY<value>, Z, X, Y);\n\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYXZ<value>, glm::extractEulerAngleYXZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXZX<value>, glm::extractEulerAngleXZX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXYX<value>, glm::extractEulerAngleXYX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYXY<value>, glm::extractEulerAngleYXY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYZY<value>, glm::extractEulerAngleYZY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZYZ<value>, glm::extractEulerAngleZYZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZXZ<value>, glm::extractEulerAngleZXZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXZY<value>, glm::extractEulerAngleXZY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYZX<value>, glm::extractEulerAngleYZX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZYX<value>, glm::extractEulerAngleZYX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZXY<value>, glm::extractEulerAngleZXY<value>);\n\n\treturn Error; \n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_extend.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/extend.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_extended_min_max.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n\n#include <glm/gtx/extended_min_max.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4723)\n#endif\n\nnamespace fmin_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fmin(glm::vec1(1), glm::vec1(Zero_f / 0.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec1 A1 = glm::fmin(glm::vec1(Zero_f / 0.0f), glm::vec1(1));\n\t\tError += glm::equal(A1.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::fmin(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::fmin(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::fmin(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::fmin(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::fmin(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::fmin(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fmin_\n\nnamespace fmax_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fmax(glm::vec1(1), glm::vec1(Zero_f / 0.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec1 A1 = glm::fmax(glm::vec1(Zero_f / 0.0f), glm::vec1(1));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::fmax(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::fmax(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::fmax(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::fmax(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::fmax(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::fmax(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fmax_\n\nnamespace fclamp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fclamp(glm::vec1(1), glm::vec1(Zero_f / 0.0f), glm::vec1(2.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fclamp_\n\nint main()\n{\n\tint Error = 0;\n\n\tError += fmin_::test();\n\tError += fmax_::test();\n\tError += fclamp_::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_extented_min_max.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2015 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_extented_min_max.cpp\n/// @date 2013-10-25 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtx/extended_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_exterior_product.cpp",
    "content": "#include <glm/gtx/exterior_product.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vec2.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\tfloat const f = glm::cross(glm::vec2(1.0f, 1.0f), glm::vec2(1.0f, 1.0f));\n\tError += glm::epsilonEqual(f, 0.0f, 0.001f) ? 0 : 1;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_fast_exponential.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/fast_exponential.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_fast_square_root.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/fast_square_root.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n\nint test_fastInverseSqrt()\n{\n\tint Error = 0;\n\n\tError += glm::epsilonEqual(glm::fastInverseSqrt(1.0f), 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(glm::fastInverseSqrt(1.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::vec2(1.0f)), glm::vec2(1.0f), 0.01f)) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec3(1.0)), glm::dvec3(1.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec4(1.0)), glm::dvec4(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_fastDistance()\n{\n\tint Error = 0;\n\n\tfloat const A = glm::fastDistance(0.0f, 1.0f);\n\tfloat const B = glm::fastDistance(glm::vec2(0.0f), glm::vec2(1.0f, 0.0f));\n\tfloat const C = glm::fastDistance(glm::vec3(0.0f), glm::vec3(1.0f, 0.0f, 0.0f));\n\tfloat const D = glm::fastDistance(glm::vec4(0.0f), glm::vec4(1.0f, 0.0f, 0.0f, 0.0f));\n\n\tError += glm::epsilonEqual(A, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(B, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(D, 1.0f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_fastInverseSqrt();\n\tError += test_fastDistance();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_fast_trigonometry.cpp",
    "content": "#include <glm/ext/scalar_ulp.hpp>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/fast_trigonometry.hpp>\n#include <glm/gtx/integer.hpp>\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/trigonometric.hpp>\n#include <cmath>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n\nnamespace fastCos\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastCos(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::cos(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastCos Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"cos Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastCos\n\nnamespace fastSin\n{\n\t/*\n\tfloat sin(float x) {\n\tfloat temp;\n\ttemp = (x + M_PI) / ((2 * M_PI) - M_PI);\n\treturn limited_sin((x + M_PI) - ((2 * M_PI) - M_PI) * temp));\n\t}\n\t*/\n\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastSin(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::sin(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastSin Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"sin Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastSin\n\nnamespace fastTan\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastTan(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor (float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::tan(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastTan Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"tan Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastTan\n\nnamespace fastAcos\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAcos(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::acos(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\n\t\tstd::printf(\"fastAcos Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"acos Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAcos\n\nnamespace fastAsin\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAsin(i);\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::asin(i);\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastAsin Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"asin Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAsin\n\nnamespace fastAtan\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAtan(i);\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::atan(i);\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastAtan Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"atan Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAtan\n\nnamespace taylorCos\n{\n\tusing glm::qualifier;\n\tusing glm::length_t;\n\t\n\tglm::vec4 const AngleShift(0.0f, glm::half_pi<float>(), glm::pi<float>(), glm::three_over_two_pi<float>());\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesNewCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Powed2(x * x);\n\t\tglm::vec<L, T, Q> const Powed4(Powed2 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed6(Powed4 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed8(Powed4 * Powed4);\n\n\t\treturn static_cast<T>(1)\n\t\t\t- Powed2 * static_cast<T>(0.5)\n\t\t\t+ Powed4 * static_cast<T>(0.04166666666666666666666666666667)\n\t\t\t- Powed6 * static_cast<T>(0.00138888888888888888888888888889)\n\t\t\t+ Powed8 * static_cast<T>(2.4801587301587301587301587301587e-5);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesNewCos6(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Powed2(x * x);\n\t\tglm::vec<L, T, Q> const Powed4(Powed2 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed6(Powed4 * Powed2);\n\n\t\treturn static_cast<T>(1)\n\t\t\t- Powed2 * static_cast<T>(0.5)\n\t\t\t+ Powed4 * static_cast<T>(0.04166666666666666666666666666667)\n\t\t\t- Powed6 * static_cast<T>(0.00138888888888888888888888888889);\n\t}\n\n\ttemplate<glm::length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, float, Q> fastAbs(glm::vec<L, float, Q> x)\n\t{\n\t\tint* Pointer = reinterpret_cast<int*>(&x[0]);\n\t\tPointer[0] &= 0x7fffffff;\n\t\tPointer[1] &= 0x7fffffff;\n\t\tPointer[2] &= 0x7fffffff;\n\t\tPointer[3] &= 0x7fffffff;\n\t\treturn x;\n\t}\n\n\ttemplate<glm::length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastCosNew(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(fastAbs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n\t\treturn taylorSeriesNewCos6(x);\n/*\n\t\tvec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tvec<L, T, Q> const RevertAngle(mix(vec<L, T, Q>(glm::pi<T>()), vec<L, T, Q>(0), FirstQuarterPi));\n\t\tvec<L, T, Q> const ReturnSign(mix(vec<L, T, Q>(-1), vec<L, T, Q>(1), FirstQuarterPi));\n\t\tvec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesNewCos(SectionAngle);\n*/\n\t}\n\n\tint perf_fastCosNew(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosNew %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> deterministic_fmod(glm::vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn x - y * trunc(x / y);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastCosDeterminisctic(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(abs(deterministic_fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n\t\tglm::vec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, glm::vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tglm::vec<L, T, Q> const RevertAngle(mix(glm::vec<L, T, Q>(glm::pi<T>()), glm::vec<L, T, Q>(0), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const ReturnSign(mix(glm::vec<L, T, Q>(-1), glm::vec<L, T, Q>(1), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesNewCos(SectionAngle);\n\t}\n\n\tint perf_fastCosDeterminisctic(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosDeterminisctic %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesRefCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\treturn static_cast<T>(1)\n\t\t\t- (x * x) / glm::factorial(static_cast<T>(2))\n\t\t\t+ (x * x * x * x) / glm::factorial(static_cast<T>(4))\n\t\t\t- (x * x * x * x * x * x) / glm::factorial(static_cast<T>(6))\n\t\t\t+ (x * x * x * x * x * x * x * x) / glm::factorial(static_cast<T>(8));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastRefCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(glm::abs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n//\t\treturn taylorSeriesRefCos(Angle0_PI);\n\n\t\tglm::vec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, glm::vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tglm::vec<L, T, Q> const RevertAngle(mix(glm::vec<L, T, Q>(glm::pi<T>()), glm::vec<L, T, Q>(0), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const ReturnSign(mix(glm::vec<L, T, Q>(-1), glm::vec<L, T, Q>(1), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesRefCos(SectionAngle);\n\t}\n\n\tint perf_fastCosRef(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosRef %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_fastCosOld(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosOld %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_cos(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"cos %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t const Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Begin = -glm::pi<float>();\n\t\tfloat const End = glm::pi<float>();\n\n\t\tError += perf_cos(Begin, End, Samples);\n\t\tError += perf_fastCosOld(Begin, End, Samples);\n\t\tError += perf_fastCosRef(Begin, End, Samples);\n\t\t//Error += perf_fastCosNew(Begin, End, Samples);\n\t\tError += perf_fastCosDeterminisctic(Begin, End, Samples);\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t//for(float Angle = -4.0f * glm::pi<float>(); Angle < 4.0f * glm::pi<float>(); Angle += 0.1f)\n\t\t//for(float Angle = -720.0f; Angle < 720.0f; Angle += 0.1f)\n\t\tfor(float Angle = 0.0f; Angle < 180.0f; Angle += 0.1f)\n\t\t{\n\t\t\tfloat const modAngle = std::fmod(glm::abs(Angle), 360.f);\n\t\t\tassert(modAngle >= 0.0f && modAngle <= 360.f);\n\t\t\tfloat const radAngle = glm::radians(modAngle);\n\t\t\tfloat const Cos0 = std::cos(radAngle);\n\n\t\t\tfloat const Cos1 = taylorCos::fastRefCos(glm::fvec1(radAngle)).x;\n\t\t\tError += glm::abs(Cos1 - Cos0) < 0.1f ? 0 : 1;\n\n\t\t\t//float const Cos2 = taylorCos::fastCosNew(glm::fvec1(radAngle)).x;\n\t\t\t//Error += glm::abs(Cos2 - Cos0) < 0.1f ? 0 : 1;\n\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace taylorCos\n\nnamespace taylor2\n{\n\tglm::vec4 const AngleShift(0.0f, glm::pi<float>() * 0.5f, glm::pi<float>() * 1.0f, glm::pi<float>() * 1.5f);\n\n\tfloat taylorCosA(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ (x * x * x * x) * (1.f / 24.f)\n\t\t\t- (x * x * x * x * x * x) * (1.f / 720.f)\n\t\t\t+ (x * x * x * x * x * x * x * x) * (1.f / 40320.f);\n\t}\n\n\tfloat taylorCosB(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ (x * x * x * x) * (1.f / 24.f)\n\t\t\t- (x * x * x * x * x * x) * (1.f / 720.f)\n\t\t\t+ (x * x * x * x * x * x * x * x) * (1.f / 40320.f);\n\t}\n\n\tfloat taylorCosC(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ ((x * x) * (x * x)) * (1.f / 24.f)\n\t\t\t- (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f)\n\t\t\t+ (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f);\n\t}\n\n\tint perf_taylorCosA(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosA(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosA %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_taylorCosB(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosB(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosB %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_taylorCosC(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosC(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosC %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Begin = -glm::pi<float>();\n\t\tfloat const End = glm::pi<float>();\n\n\t\tError += perf_taylorCosA(Begin, End, Samples);\n\t\tError += perf_taylorCosB(Begin, End, Samples);\n\t\tError += perf_taylorCosC(Begin, End, Samples);\n\n\t\treturn Error;\n\t}\n\n}//namespace taylor2\n\nint main()\n{\n\tint Error(0);\n\n\tError += ::taylor2::perf(1000);\n\tError += ::taylorCos::test();\n\tError += ::taylorCos::perf(1000);\n\n#\tifdef NDEBUG\n\t\t::fastCos::perf(false);\n\t\t::fastSin::perf(false);\n\t\t::fastTan::perf(false);\n\t\t::fastAcos::perf(false);\n\t\t::fastAsin::perf(false);\n\t\t::fastAtan::perf(false);\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_functions.cpp",
    "content": "#include <glm/gtx/functions.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <vector>\n\nint test_gauss_1d()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Result(20);\n\tfor(std::size_t i = 0, n = Result.size(); i < n; ++i)\n\t\tResult[i] = glm::gauss(static_cast<float>(i) * 0.1f, 0.0f, 1.0f);\n\n\treturn Error;\n}\n\nint test_gauss_2d()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Result(20);\n\tfor(std::size_t i = 0, n = Result.size(); i < n; ++i)\n\t\tResult[i] = glm::gauss(glm::vec2(static_cast<float>(i)) * 0.1f, glm::vec2(0.0f), glm::vec2(1.0f));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_gauss_1d();\n\tError += test_gauss_2d();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_gradient_paint.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/gradient_paint.hpp>\n\nint test_radialGradient()\n{\n\tint Error = 0;\n\t\n\tfloat Gradient = glm::radialGradient(glm::vec2(0), 1.0f, glm::vec2(1), glm::vec2(0.5));\n\tError += Gradient != 0.0f ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_linearGradient()\n{\n\tint Error = 0;\n\n\tfloat Gradient = glm::linearGradient(glm::vec2(0), glm::vec2(1), glm::vec2(0.5));\n\tError += Gradient != 0.0f ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n    Error += test_radialGradient();\n    Error += test_linearGradient();\n    \n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_handed_coordinate_space.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/handed_coordinate_space.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_hash.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/hash.hpp>\n#include <unordered_map>\n\nint test_compile()\n{\n\tint Error = 0;\n\n    // Vector types\n    std::unordered_map<glm::vec1, int> map_vec1;\n    Error += ++map_vec1[glm::vec1(0.0f)];\n    std::unordered_map<glm::vec2, int> map_vec2;\n    Error += ++map_vec2[glm::vec2(0.0f)];\n    std::unordered_map<glm::vec3, int> map_vec3;\n    Error += ++map_vec3[glm::vec3(0.0f)];\n    std::unordered_map<glm::vec4, int> map_vec4;\n    Error += ++map_vec4[glm::vec4(0.0f)];\n\n    // Quaternion types\n    std::unordered_map<glm::quat, int> map_quat;\n    Error += ++map_quat[glm::quat(0.0f, glm::vec3(0.0f))];\n    std::unordered_map<glm::dualquat, int> map_dualquat;\n    Error += ++map_dualquat[glm::dualquat(glm::vec3(0.0f))];\n\n    // Matrix types\n    std::unordered_map<glm::mat2x2, int> map_mat2x2;\n    Error += ++map_mat2x2[glm::mat2x2(0.0f)];\n    std::unordered_map<glm::mat2x3, int> map_mat2x3;\n    Error += ++map_mat2x3[glm::mat2x3(0.0f)];\n    std::unordered_map<glm::mat2x4, int> map_mat2x4;\n    Error += ++map_mat2x4[glm::mat2x4(0.0f)];\n    std::unordered_map<glm::mat3x2, int> map_mat3x2;\n    Error += ++map_mat3x2[glm::mat3x2(0.0f)];\n    std::unordered_map<glm::mat3x3, int> map_mat3x3;\n    Error += ++map_mat3x3[glm::mat3x3(0.0f)];\n    std::unordered_map<glm::mat3x4, int> map_mat3x4;\n    Error += ++map_mat3x4[glm::mat3x4(0.0f)];\n    std::unordered_map<glm::mat4x2, int> map_mat4x2;\n    Error += ++map_mat4x2[glm::mat4x2(0.0f)];\n    std::unordered_map<glm::mat4x3, int> map_mat4x3;\n    Error += ++map_mat4x3[glm::mat4x3(0.0f)];\n    std::unordered_map<glm::mat4x4, int> map_mat4x4;\n    Error += ++map_mat4x4[glm::mat4x4(0.0f)];\n\n\treturn Error > 0 ? 0 : 1;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_compile();\n\n\treturn Error;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_int_10_10_10_2.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2013-10-25\n// Updated : 2013-10-25\n// Licence : This source is under MIT licence\n// File    : test/gtx/associated_min_max.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_integer.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/exponential.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/integer.hpp>\n#include <cstdio>\n/*\nint test_floor_log2()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 1; i < 1000000; ++i)\n\t{\n\t\tglm::uint A = glm::floor_log2(glm::uint(i));\n\t\tglm::uint B = glm::uint(glm::floor(glm::log2(double(i)))); // Will fail with float, lack of accuracy\n\n\t\tError += A == B ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n*/\nint test_log2()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 1; i < 24; ++i)\n\t{\n\t\tglm::uint A = glm::log2(glm::uint(1 << i));\n\t\tglm::uint B = glm::uint(glm::log2(double(1 << i)));\n\n\t\t//Error += glm::equalEpsilon(double(A), B, 1.0) ? 0 : 1;\n\t\tError += glm::abs(double(A) - B) <= 24 ? 0 : 1;\n\t\tassert(!Error);\n\n\t\tstd::printf(\"Log2(%d) error A=%d, B=%d\\n\", 1 << i, A, B);\n\t}\n\n\tstd::printf(\"log2 error=%d\\n\", Error);\n\n\treturn Error;\n}\n\nint test_nlz()\n{\n\tint Error = 0;\n\n\tfor(glm::uint i = 1; i < glm::uint(33); ++i)\n\t\tError += glm::nlz(i) == glm::uint(31u) - glm::findMSB(i) ? 0 : 1;\n\t\t//printf(\"%d, %d\\n\", glm::nlz(i), 31u - glm::findMSB(i));\n\n\treturn Error;\n}\n\nint test_pow_uint()\n{\n\tint Error = 0;\n\n\tglm::uint const p0 = glm::pow(2u, 0u);\n\tError += p0 == 1u ? 0 : 1;\n\n\tglm::uint const p1 = glm::pow(2u, 1u);\n\tError += p1 == 2u ? 0 : 1;\n\n\tglm::uint const p2 = glm::pow(2u, 2u);\n\tError += p2 == 4u ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_pow_int()\n{\n\tint Error = 0;\n\n\tint const p0 = glm::pow(2, 0u);\n\tError += p0 == 1 ? 0 : 1;\n\n\tint const p1 = glm::pow(2, 1u);\n\tError += p1 == 2 ? 0 : 1;\n\n\tint const p2 = glm::pow(2, 2u);\n\tError += p2 == 4 ? 0 : 1;\n\n\tint const p0n = glm::pow(-2, 0u);\n\tError += p0n == -1 ? 0 : 1;\n\n\tint const p1n = glm::pow(-2, 1u);\n\tError += p1n == -2 ? 0 : 1;\n\n\tint const p2n = glm::pow(-2, 2u);\n\tError += p2n == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_nlz();\n//\tError += test_floor_log2();\n\tError += test_log2();\n\tError += test_pow_uint();\n\tError += test_pow_int();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_intersect.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/intersect.hpp>\n\nint test_intersectRayPlane()\n{\n\tint Error = 0;\n\tglm::vec3 const PlaneOrigin(0, 0, 1);\n\tglm::vec3 const PlaneNormal(0, 0, -1);\n\tglm::vec3 const RayOrigin(0, 0, 0);\n\tglm::vec3 const RayDir(0, 0, 1);\n\n\t// check that inversion of the plane normal has no effect\n\t{\n\t\tfloat Distance = 0;\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, PlaneOrigin, PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 1.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 0 : 1;\n\t}\n\t{\n\t\tfloat Distance = 0;\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, PlaneOrigin, -1.f * PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 1.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 0 : 1;\n\t}\n\n\t// check if plane is before of behind the ray origin\n\t{\n\t\tfloat Distance = 9.9999f; // value should not be changed\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, -1.f * PlaneOrigin, PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 9.9999f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 1 : 0; // there is no intersection in front of the ray origin, only behind\n\t}\n\n\treturn Error;\n}\n\nint test_intersectRayTriangle()\n{\n\tint Error = 0;\n\n\tglm::vec3 const Orig(0, 0, 2);\n\tglm::vec3 const Dir(0, 0, -1);\n\tglm::vec3 const Vert0(0, 0, 0);\n\tglm::vec3 const Vert1(-1, -1, 0);\n\tglm::vec3 const Vert2(1, -1, 0);\n\tglm::vec2 BaryPosition(0);\n\tfloat Distance = 0;\n\n\tbool const Result = glm::intersectRayTriangle(Orig, Dir, Vert0, Vert1, Vert2, BaryPosition, Distance);\n\n\tError += glm::all(glm::epsilonEqual(BaryPosition, glm::vec2(0), std::numeric_limits<float>::epsilon())) ? 0 : 1;\n\tError += glm::abs(Distance - 2.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\tError += Result ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_intersectLineTriangle()\n{\n\tint Error = 0;\n\n\tglm::vec3 const Orig(0, 0, 2);\n\tglm::vec3 const Dir(0, 0, -1);\n\tglm::vec3 const Vert0(0, 0, 0);\n\tglm::vec3 const Vert1(-1, -1, 0);\n\tglm::vec3 const Vert2(1, -1, 0);\n\tglm::vec3 Position(2.0f, 0.0f, 0.0f);\n\n\tbool const Result = glm::intersectLineTriangle(Orig, Dir, Vert0, Vert1, Vert2, Position);\n\n\tError += glm::all(glm::epsilonEqual(Position, glm::vec3(2.0f, 0.0f, 0.0f), std::numeric_limits<float>::epsilon())) ? 0 : 1;\n\tError += Result ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_intersectRayPlane();\n\tError += test_intersectRayTriangle();\n\tError += test_intersectLineTriangle();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_io.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#if GLM_LANG & GLM_LANG_CXXMS_FLAG\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/io.hpp>\n#include <iostream>\n#include <sstream>\n#include <typeinfo>\n\nnamespace\n{\n\ttemplate<typename CTy, typename CTr>\n\tstd::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, glm::qualifier const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif (cerberus)\n\t\t{\n\t\t\tswitch (a) {\n\t\t\tcase glm::highp:\t\t\tos << \"uhi\"; break;\n\t\t\tcase glm::mediump:\t\t\tos << \"umd\"; break;\n\t\t\tcase glm::lowp:\t\t\t\tos << \"ulo\"; break;\n#\t\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\t\t\tcase glm::aligned_highp:\tos << \"ahi\"; break;\n\t\t\t\tcase glm::aligned_mediump:\tos << \"amd\"; break;\n\t\t\t\tcase glm::aligned_lowp:\t\tos << \"alo\"; break;\n#\t\t\tendif\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n\n\ttemplate<typename U, glm::qualifier P, typename T, typename CTy, typename CTr>\n\tstd::basic_string<CTy> type_name(std::basic_ostream<CTy,CTr>&, T const&)\n\t{\n\t\tstd::basic_ostringstream<CTy,CTr> ostr;\n\n\t\tif      (typeid(T) == typeid(glm::qua<U,P>))   { ostr << \"quat\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<2, U,P>))   { ostr << \"vec2\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<3, U,P>))   { ostr << \"vec3\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<4, U,P>))   { ostr << \"vec4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 2, U,P>)) { ostr << \"mat2x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 3, U,P>)) { ostr << \"mat2x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 4, U,P>)) { ostr << \"mat2x4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 2, U,P>)) { ostr << \"mat3x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 3, U,P>)) { ostr << \"mat3x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 4, U,P>)) { ostr << \"mat3x4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 2, U,P>)) { ostr << \"mat4x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 3, U,P>)) { ostr << \"mat4x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 4, U,P>)) { ostr << \"mat4x4\"; }\n\t\telse                                             { ostr << \"unknown\"; }\n\n\t\tostr << '<' << typeid(U).name() << ',' << P << '>';\n\n\t\treturn ostr.str();\n\t}\n} // namespace {\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_quat(OS& os)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::qua<T, P> const q(1, 0, 0, 0);\n\n\t{\n\t\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\t\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t\t<< type_name<T, P>(os, q) << \": \" << q << '\\n';\n\t}\n\n\t{\n\t\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\t\tos << glm::io::unformatted\n\t\t\t<< type_name<T, P>(os, q) << \": \" << q << '\\n';\n\t}\n\n\treturn 0;\n}\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_vec(OS& os)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::vec<2, T,P> const v2(0, 1);\n\tglm::vec<3, T,P> const v3(2, 3, 4);\n\tglm::vec<4, T,P> const v4(5, 6, 7, 8);\n\n\tos << type_name<T,P>(os, v2) << \": \" << v2 << '\\n'\n\t\t<< type_name<T,P>(os, v3) << \": \" << v3 << '\\n'\n\t\t<< type_name<T,P>(os, v4) << \": \" << v4 << '\\n';\n\n\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t<< type_name<T,P>(os, v2) << \": \" << v2 << '\\n'\n\t\t<< type_name<T,P>(os, v3) << \": \" << v3 << '\\n'\n\t\t<< type_name<T,P>(os, v4) << \": \" << v4 << '\\n';\n\n\treturn 0;\n}\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_mat(OS& os, glm::io::order_type otype)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::vec<2, T,P> const v2_1( 0,  1);\n\tglm::vec<2, T,P> const v2_2( 2,  3);\n\tglm::vec<2, T,P> const v2_3( 4,  5);\n\tglm::vec<2, T,P> const v2_4( 6,  7);\n\tglm::vec<3, T,P> const v3_1( 8,  9, 10);\n\tglm::vec<3, T,P> const v3_2(11, 12, 13);\n\tglm::vec<3, T,P> const v3_3(14, 15, 16);\n\tglm::vec<3, T,P> const v3_4(17, 18, 19);\n\tglm::vec<4, T,P> const v4_1(20, 21, 22, 23);\n\tglm::vec<4, T,P> const v4_2(24, 25, 26, 27);\n\tglm::vec<4, T,P> const v4_3(28, 29, 30, 31);\n\tglm::vec<4, T,P> const v4_4(32, 33, 34, 35);\n\n\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t<< glm::io::order(otype)\n\t\t<< \"mat2x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 2, T,P>(v2_1, v2_2) << '\\n'\n\t\t<< \"mat2x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 3, T,P>(v3_1, v3_2) << '\\n'\n\t\t<< \"mat2x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 4, T,P>(v4_1, v4_2) << '\\n'\n\t\t<< \"mat3x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 2, T,P>(v2_1, v2_2, v2_3) << '\\n'\n\t\t<< \"mat3x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 3, T,P>(v3_1, v3_2, v3_3) << '\\n'\n\t\t<< \"mat3x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 4, T,P>(v4_1, v4_2, v4_3) << '\\n'\n\t\t<< \"mat4x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 2, T,P>(v2_1, v2_2, v2_3, v2_4) << '\\n'\n\t\t<< \"mat4x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 3, T,P>(v3_1, v3_2, v3_3, v3_4) << '\\n'\n\t\t<< \"mat4x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 4, T,P>(v4_1, v4_2, v4_3, v4_4) << '\\n';\n\n\tos << glm::io::unformatted\n\t\t<< glm::io::order(otype)\n\t\t<< \"mat2x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 2, T,P>(v2_1, v2_2) << '\\n'\n\t\t<< \"mat2x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 3, T,P>(v3_1, v3_2) << '\\n'\n\t\t<< \"mat2x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 4, T,P>(v4_1, v4_2) << '\\n'\n\t\t<< \"mat3x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 2, T,P>(v2_1, v2_2, v2_3) << '\\n'\n\t\t<< \"mat3x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 3, T,P>(v3_1, v3_2, v3_3) << '\\n'\n\t\t<< \"mat3x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 4, T,P>(v4_1, v4_2, v4_3) << '\\n'\n\t\t<< \"mat4x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 2, T,P>(v2_1, v2_2, v2_3, v2_4) << '\\n'\n\t\t<< \"mat4x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 3, T,P>(v3_1, v3_2, v3_3, v3_4) << '\\n'\n\t\t<< \"mat4x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 4, T,P>(v4_1, v4_2, v4_3, v4_4) << '\\n';\n  \n\treturn 0;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_io_quat<float, glm::highp>(std::cout);\n\tError += test_io_quat<float, glm::highp>(std::wcout);\n\tError += test_io_quat<int, glm::mediump>(std::cout);\n\tError += test_io_quat<int, glm::mediump>(std::wcout);\n\tError += test_io_quat<glm::uint, glm::lowp>(std::cout);\n\tError += test_io_quat<glm::uint, glm::lowp>(std::wcout);\n\n\tError += test_io_vec<float, glm::highp>(std::cout);\n\tError += test_io_vec<float, glm::highp>(std::wcout);\n\tError += test_io_vec<int, glm::mediump>(std::cout);\n\tError += test_io_vec<int, glm::mediump>(std::wcout);\n\tError += test_io_vec<glm::uint, glm::lowp>(std::cout);\n\tError += test_io_vec<glm::uint, glm::lowp>(std::wcout);\n\n\tError += test_io_mat<float, glm::highp>(std::cout, glm::io::column_major);\n\tError += test_io_mat<float, glm::lowp>(std::wcout, glm::io::column_major);\n\tError += test_io_mat<float, glm::highp>(std::cout, glm::io::row_major);\n        Error += test_io_mat<float, glm::lowp>(std::wcout, glm::io::row_major);\n\n\treturn Error;\n}\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif// GLM_LANG & GLM_LANG_CXXMS_FLAG\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_load.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n/*\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_aligned.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nnamespace glm\n{\n\tenum genTypeEnum\n\t{\n\t\tQUALIFIER_HIGHP,\n\t\tQUALIFIER_MEDIUMP,\n\t\tQUALIFIER_LOWP\n\t};\n\n\ttemplate <typename genType>\n\tstruct genTypeTrait\n\t{};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_highp> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_HIGHP;\n\t};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_mediump> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_MEDIUMP;\n\t};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_lowp> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_LOWP;\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isAligned>\n\tstruct load_gentype\n\t{\n\t\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\ttemplate<qualifier Q>\n\tstruct load_gentype<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, float, Q> load(float const* Mem)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_loadu_ps(Mem);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType example_identity()\n\t{\n\t\treturn detail::init_gentype<genType, detail::genTypeTrait<genType>::GENTYPE>::identity();\n\t}\n\n\ttemplate <typename genType, typename valType>\n\tgenType load(valType const* Mem)\n\t{\n\t\t\n\t}\n\n\taligned_vec4 loadu(float const* Mem)\n\t{\n\t\taligned_vec4 Result;\n#\t\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\t\tResult.data = _mm_loadu_ps(Mem);\n#\t\telse\n\t\t\tResult[0] = *(Mem + 0);\n\t\t\tResult[1] = *(Mem + 1);\n\t\t\tResult[2] = *(Mem + 2);\n\t\t\tResult[3] = *(Mem + 3);\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\treturn Result;\n\t}\n\n\taligned_vec4 loada(float const* Mem)\n\t{\n\t\taligned_vec4 Result;\n#\t\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\t\tResult.data = _mm_load_ps(Mem);\n#\t\telse\n\t\t\tResult[0] = *(Mem + 0);\n\t\t\tResult[1] = *(Mem + 1);\n\t\t\tResult[2] = *(Mem + 2);\n\t\t\tResult[3] = *(Mem + 3);\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\treturn Result;\n\t}\n}//namespace glm\n\nint test_vec4_load()\n{\n\tint Error = 0;\n\n\tfloat Data[] = {1.f, 2.f, 3.f, 4.f};\n\tglm::aligned_vec4 const V = glm::loadu(Data);\n\tError += glm::all(glm::equal(V, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n#endif\n*/\nint main()\n{\n\tint Error = 0;\n/*\n#\tif GLM_CONFIG_SIMD == GLM_ENABLE\n\t\tError += test_vec4_load();\n#\tendif\n*/\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_log_base.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/log_base.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/exponential.hpp>\n\nnamespace test_log\n{\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = glm::log(10.f, 2.0f);\n\t\t\tfloat B = glm::log2(10.f);\n\t\t\tError += glm::epsilonEqual(A, B, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec1 A = glm::log(glm::vec1(10.f), glm::vec1(2.0f));\n\t\t\tglm::vec1 B = glm::log2(glm::vec1(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec1(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A = glm::log(glm::vec2(10.f), glm::vec2(2.0f));\n\t\t\tglm::vec2 B = glm::log2(glm::vec2(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec2(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A = glm::log(glm::vec3(10.f), glm::vec3(2.0f));\n\t\t\tglm::vec3 B = glm::log2(glm::vec3(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec3(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A = glm::log(glm::vec4(10.f), glm::vec4(2.0f));\n\t\t\tglm::vec4 B = glm::log2(glm::vec4(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec4(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_log\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_log::run();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_cross_product.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_cross_product.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_decompose.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_decompose.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\tglm::mat4 Matrix(1);\n\n\tglm::vec3 Scale;\n\tglm::quat Orientation;\n\tglm::vec3 Translation;\n\tglm::vec3 Skew(1);\n\tglm::vec4 Perspective(1);\n\n\tglm::decompose(Matrix, Scale, Orientation, Translation, Skew, Perspective);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_factorisation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_factorisation.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/epsilon.hpp>\n\ntemplate <glm::length_t C, glm::length_t R, typename T, glm::qualifier Q>\nint test_qr(glm::mat<C, R, T, Q> m)\n{\n\tint Error = 0;\n\n\tT const epsilon = static_cast<T>(1e-10);\n\n\tglm::mat<(C < R ? C : R), R, T, Q> q(-999);\n\tglm::mat<C, (C < R ? C : R), T, Q> r(-999);\n\n\tglm::qr_decompose(m, q, r);\n\n\t//Test if q*r really equals the input matrix\n\tglm::mat<C, R, T, Q> tm = q*r;\n\tglm::mat<C, R, T, Q> err = tm - m;\n\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = 0; j < R; j++)\n\t\tError += glm::abs(err[i][j]) > epsilon ? 1 : 0;\n\n\t//Test if the columns of q are orthonormal\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\t{\n\t\tError += (length(q[i]) - 1) > epsilon ? 1 : 0;\n\n\t\tfor (glm::length_t j = 0; j<i; j++)\n\t\t\tError += glm::abs(dot(q[i], q[j])) > epsilon ? 1 : 0;\n\t}\n\n\t//Test if the matrix r is upper triangular\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = i + 1; j < (C < R ? C : R); j++)\n\t\tError += glm::epsilonEqual(r[i][j], static_cast<T>(0), glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <glm::length_t C, glm::length_t R, typename T, glm::qualifier Q>\nint test_rq(glm::mat<C, R, T, Q> m)\n{\n\tint Error = 0;\n\n\tT const epsilon = static_cast<T>(1e-10);\n\n\tglm::mat<C, (C < R ? C : R), T, Q> q(-999);\n\tglm::mat<(C < R ? C : R), R, T, Q> r(-999);\n\n\tglm::rq_decompose(m, r, q);\n\n\t//Test if q*r really equals the input matrix\n\tglm::mat<C, R, T, Q> tm = r*q;\n\tglm::mat<C, R, T, Q> err = tm - m;\n\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = 0; j < R; j++)\n\t\tError += glm::abs(err[i][j]) > epsilon ? 1 : 0;\n\n\t//Test if the rows of q are orthonormal\n\tglm::mat<(C < R ? C : R), C, T, Q> tq = transpose(q);\n\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\t{\n\t\tError += (length(tq[i]) - 1) > epsilon ? 1 : 0;\n\n\t\tfor (glm::length_t j = 0; j<i; j++)\n\t\t\tError += glm::abs(dot(tq[i], tq[j])) > epsilon ? 1 : 0;\n\t}\n\n\t//Test if the matrix r is upper triangular\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\tfor (glm::length_t j = R - (C < R ? C : R) + i + 1; j < R; j++)\n\t\tError += glm::epsilonEqual(r[i][j], static_cast<T>(0), glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\t//Test QR square\n\tError += test_qr(glm::dmat3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0)) ? 1 : 0;\n\n\t//Test RQ square\n\tError += test_rq(glm::dmat3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0)) ? 1 : 0;\n\n\t//Test QR triangular 1\n\tError += test_qr(glm::dmat3x4(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test QR triangular 2\n\tError += test_qr(glm::dmat4x3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test RQ triangular 1 : Fails at the triangular test\n\tError += test_rq(glm::dmat3x4(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test QR triangular 2\n\tError += test_rq(glm::dmat4x3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_interpolation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtx/component_wise.hpp>\n#include <glm/gtx/matrix_interpolation.hpp>\n\n#include <iostream>\n#include <limits>\n#include <math.h>\n\n\nstatic int test_axisAngle()\n{\n\tint Error = 0;\n\n\tglm::mat4 m1(-0.9946f, 0.0f, -0.104531f, 0.0f,\n\t\t0.0f, 1.0f, 0.0f, 0.0f,\n\t\t0.104531f, 0.0f, -0.9946f, 0.0f,\n\t\t0.0f, 0.0f, 0.0f, 1.0f);\n\tglm::mat4 m2(-0.992624f, 0.0f, -0.121874f, 0.0f,\n\t\t0.0f, 1.0f, 0.0f, 0.0f,\n\t\t0.121874f, 0.0f, -0.992624f, 0.0f,\n\t\t0.0f, 0.0f, 0.0f, 1.0f);\n\n\tglm::mat4 const m1rot = glm::extractMatrixRotation(m1);\n\tglm::mat4 const dltRotation = m2 * glm::transpose(m1rot);\n\n\tglm::vec3 dltAxis(0.0f);\n\tfloat dltAngle = 0.0f;\n\tglm::axisAngle(dltRotation, dltAxis, dltAngle);\n\n\tstd::cout << \"dltAxis: (\" << dltAxis.x << \", \" << dltAxis.y << \", \" << dltAxis.z << \"), dltAngle: \" << dltAngle << std::endl;\n\n\tglm::quat q = glm::quat_cast(dltRotation);\n\tstd::cout << \"q: (\" << q.x << \", \" << q.y << \", \" << q.z << \", \" << q.w << \")\" << std::endl;\n\tfloat yaw = glm::yaw(q);\n\tstd::cout << \"Yaw: \" << yaw << std::endl;\n\n\treturn Error;\n}\n\ntemplate <class T>\nint testForAxisAngle(glm::vec<3, T, glm::defaultp> const axisTrue, T const angleTrue)\n{\n    T const eps = std::sqrt(std::numeric_limits<T>::epsilon());\n\n    glm::mat<4, 4, T, glm::defaultp> const matTrue = glm::axisAngleMatrix(axisTrue, angleTrue);\n\n    glm::vec<3, T, glm::defaultp> axis;\n    T angle;\n    glm::axisAngle(matTrue, axis, angle);\n    glm::mat<4, 4, T, glm::defaultp> const matRebuilt = glm::axisAngleMatrix(axis, angle);\n\n    glm::mat<4, 4, T, glm::defaultp> const errMat = matTrue - matRebuilt;\n    T const maxErr = glm::compMax(glm::vec<4, T, glm::defaultp>(\n            glm::compMax(glm::abs(errMat[0])),\n            glm::compMax(glm::abs(errMat[1])),\n            glm::compMax(glm::abs(errMat[2])),\n            glm::compMax(glm::abs(errMat[3]))\n        ));\n    \n    return maxErr < eps ? 0 : 1;\n}\n\nstatic int test_axisAngle2()\n{\n\tint Error = 0;\n    \n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), 0.0f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.00001f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), 0.0001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), 0.005f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.005f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.03f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.0003f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.01f);\n    Error += testForAxisAngle(glm::dvec3(0.0f, 1.0f, 0.0f), 0.00005);\n    Error += testForAxisAngle(glm::dvec3(-1.0f, 0.0f, 0.0f), 0.000001);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.7071f, 0.0f), 0.5);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.0002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.00002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.000002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.0000002);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.7071f, 0.7071f), 1.3f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.7071f, 0.7071f), 6.3f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), -0.23456f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), -glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), -glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>() + 2e-6f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>() + 1e-4f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), -glm::pi<float>() + 1e-3f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), -glm::pi<float>() + 5e-3f);\n\n\treturn Error;\n}\n\nstatic int test_rotate()\n{\n\tglm::mat4 m2(1.0);\n\tfloat myAngle = 1.0f;\n\tm2 = glm::rotate(m2, myAngle, glm::vec3(1.0f, 0.0f, 0.0f));\n\tglm::vec3 m2Axis;\n\tfloat m2Angle;\n\tglm::axisAngle(m2, m2Axis, m2Angle);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_axisAngle();\n\tError += test_axisAngle2();\n\tError += test_rotate();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_major_storage.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_major_storage.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_operation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/matrix_operation.hpp>\n#include <limits>\n\nint test_adjugate()\n{\n\tint Error = 0;\n\n\tconst float epsilon = std::numeric_limits<float>::epsilon();\n\n\t// mat2\n\tconst glm::mat2 m2(\n\t\t2, 3,\n\t\t1, 5\n\t);\n\n\tconst glm::mat2 eam2(\n\t\t5, -3,\n\t\t-1, 2\n\t);\n\n\tconst glm::mat2 am2 = glm::adjugate(m2);\n\n\tError += glm::all(glm::bvec2(\n\t\tglm::all(glm::epsilonEqual(am2[0], eam2[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am2[1], eam2[1], epsilon))\n\t)) ? 0 : 1;\n\n\t// mat3\n\tconst glm::mat3 m3(\n\t\t2, 3, 3,\n\t\t1, 5, 4,\n\t\t4, 6, 8\n\t);\n\n\tconst glm::mat3 eam3(\n\t\t16, -6, -3,\n\t\t8, 4, -5,\n\t\t-14, 0, 7\n\t);\n\n\tconst glm::mat3 am3 = glm::adjugate(m3);\n\n\tError += glm::all(glm::bvec3(\n\t\tglm::all(glm::epsilonEqual(am3[0], eam3[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am3[1], eam3[1], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am3[2], eam3[2], epsilon))\n\t)) ? 0 : 1;\n\n\t// mat4\n\tconst glm::mat4 m4(\n\t\t2, 3, 3, 1,\n\t\t1, 5, 4, 3,\n\t\t4, 6, 8, 5,\n\t\t-2, -3, -3, 4\n\t);\n\n\tconst glm::mat4 eam4(\n\t\t97, -30, -15, 17,\n\t\t45, 20, -25, 5,\n\t\t-91, 0, 35, -21,\n\t\t14, 0, 0, 14\n\t);\n\n\tconst glm::mat4 am4 = glm::adjugate(m4);\n\n\tError += glm::all(glm::bvec4(\n\t\tglm::all(glm::epsilonEqual(am4[0], eam4[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[1], eam4[1], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[2], eam4[2], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[3], eam4[3], epsilon))\n\t)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_adjugate();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_query.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_query.hpp>\n\nint test_isNull()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNull(glm::mat4(0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isIdentity()\n{\n\tint Error(0);\n\t\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat2(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat3(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat4(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_isNormalized()\n{\n\tint Error(0);\n\n\tbool TestA = glm::isNormalized(glm::mat4(1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isOrthogonal()\n{\n\tint Error(0);\n\n\tbool TestA = glm::isOrthogonal(glm::mat4(1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_isNull();\n\tError += test_isIdentity();\n\tError += test_isNormalized();\n\tError += test_isOrthogonal();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_matrix_transform_2d.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_transform_2d.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_mixed_product.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2013-10-25\n// Updated : 2013-10-25\n// Licence : This source is under MIT licence\n// File    : test/gtx/associated_min_max.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_norm.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/norm.hpp>\n\n\nint test_lMaxNorm()\n{\n\tint Error(0);\n\t\n\t{\n\t\tfloat norm = glm::lMaxNorm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(norm, 3.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat norm = glm::lMaxNorm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(norm, 3.f, 0.00001f) ? 0 : 1;\n\t}\n  \n\treturn Error;\n}\n\nint test_lxNorm()\n{\n\tint Error(0);\n\n\t{\n\t\tunsigned int depth_1 = 1;\n\t\tfloat normA = glm::lxNorm(glm::vec3(2, 3, 1), depth_1);\n\t\tfloat normB = glm::l1Norm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 6.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_1 = 1;\n\t\tfloat normA = glm::lxNorm(glm::vec3(-1, -2, -3), depth_1);\n\t\tfloat normB = glm::l1Norm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 6.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_2 = 2;\n\t\tfloat normA = glm::lxNorm(glm::vec3(2, 3, 1), depth_2);\n\t\tfloat normB = glm::l2Norm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 3.741657387f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_2 = 2;\n\t\tfloat normA = glm::lxNorm(glm::vec3(-1, -2, -3), depth_2);\n\t\tfloat normB = glm::l2Norm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 3.741657387f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int oddDepth = 3;\n\t\tfloat norm = glm::lxNorm(glm::vec3(2, 3, 1), oddDepth);\n\t\tError += glm::epsilonEqual(norm, 3.301927249f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int oddDepth = 3;\n\t\tfloat norm = glm::lxNorm(glm::vec3(-1, -2, -3), oddDepth);\n\t\tError += glm::epsilonEqual(norm, 3.301927249f, 0.00001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_lMaxNorm();\n\tError += test_lxNorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_normal.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/normal.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_normalize_dot.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/normalize_dot.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_number_precision.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/number_precision.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_optimum_pow.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/optimum_pow.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_orthonormalize.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/orthonormalize.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_pca.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/pca.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/string_cast.hpp>\n\n#include <cstdio>\n#include <vector>\n#if GLM_HAS_CXX11_STL == 1\n#include <random>\n#endif\n\ntemplate<typename T>\nT myEpsilon();\ntemplate<>\nGLM_INLINE GLM_CONSTEXPR float myEpsilon<float>() { return 0.00001f; }\ntemplate<>\nGLM_INLINE GLM_CONSTEXPR double myEpsilon<double>() { return 0.000001; }\n\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nbool vectorEpsilonEqual(glm::vec<D, T, Q> const& a, glm::vec<D, T, Q> const& b, T epsilon)\n{\n\tfor (int c = 0; c < D; ++c)\n\t\tif (!glm::epsilonEqual(a[c], b[c], epsilon))\n\t\t{\n\t\t\tfprintf(stderr, \"failing vectorEpsilonEqual: [%d] %lf != %lf (~%lf)\\n\",\n\t\t\t\tc,\n\t\t\t\tstatic_cast<double>(a[c]),\n\t\t\t\tstatic_cast<double>(b[c]),\n\t\t\t\tstatic_cast<double>(epsilon)\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\treturn true;\n}\n\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nbool matrixEpsilonEqual(glm::mat<D, D, T, Q> const& a, glm::mat<D, D, T, Q> const& b, T epsilon)\n{\n\tfor (int c = 0; c < D; ++c)\n\t\tfor (int r = 0; r < D; ++r)\n\t\t\tif (!glm::epsilonEqual(a[c][r], b[c][r], epsilon))\n\t\t\t{\n\t\t\t\tfprintf(stderr, \"failing vectorEpsilonEqual: [%d][%d] %lf != %lf (~%lf)\\n\",\n\t\t\t\t\tc, r,\n\t\t\t\t\tstatic_cast<double>(a[c][r]),\n\t\t\t\t\tstatic_cast<double>(b[c][r]),\n\t\t\t\t\tstatic_cast<double>(epsilon)\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\treturn true;\n}\n\ntemplate<typename T>\nGLM_INLINE bool sameSign(T const& a, T const& b)\n{\n\treturn ((a >= 0) && (b >= 0)) || ((a < 0) && (b < 0));\n}\n\ntemplate<typename T>\nT failReport(T line)\n{\n\tfprintf(stderr, \"Failed in line %d\\n\", static_cast<int>(line));\n\treturn line;\n}\n\n// Test data: 1AGA 'agarose double helix'\n// https://www.rcsb.org/structure/1aga\n// The fourth coordinate is randomized\nnamespace _1aga\n{\n\n\t// Fills `outTestData` with hard-coded atom positions from 1AGA\n\t// The fourth coordinate is randomized\n\ttemplate<typename vec>\n\tvoid fillTestData(std::vector<vec>& outTestData)\n\t{\n\t\t// x,y,z coordinates copied from RCSB PDB file of 1AGA\n\t\t// w coordinate randomized with standard normal distribution\n\t\tstatic const double _1aga[] = {\n\t\t\t3.219, -0.637, 19.462, 2.286,\n\t\t\t4.519, 0.024, 18.980, -0.828,\n\t\t\t4.163, 1.425, 18.481, -0.810,\n\t\t\t3.190, 1.341, 17.330, -0.170,\n\t\t\t1.962, 0.991, 18.165, 0.816,\n\t\t\t2.093, 1.952, 19.331, 0.276,\n\t\t\t5.119, -0.701, 17.908, -0.490,\n\t\t\t3.517, 2.147, 19.514, -0.207,\n\t\t\t2.970, 2.609, 16.719, 0.552,\n\t\t\t2.107, -0.398, 18.564, 0.403,\n\t\t\t2.847, 2.618, 15.335, 0.315,\n\t\t\t1.457, 3.124, 14.979, 0.683,\n\t\t\t1.316, 3.291, 13.473, 0.446,\n\t\t\t2.447, 4.155, 12.931, 1.324,\n\t\t\t3.795, 3.614, 13.394, 0.112,\n\t\t\t4.956, 4.494, 12.982, 0.253,\n\t\t\t0.483, 2.217, 15.479, 1.316,\n\t\t\t0.021, 3.962, 13.166, 1.522,\n\t\t\t2.311, 5.497, 13.395, 0.248,\n\t\t\t3.830, 3.522, 14.827, 0.591,\n\t\t\t5.150, 4.461, 11.576, 0.635,\n\t\t\t-1.057, 3.106, 13.132, 0.191,\n\t\t\t-2.280, 3.902, 12.650, 1.135,\n\t\t\t-3.316, 2.893, 12.151, 0.794,\n\t\t\t-2.756, 2.092, 11.000, 0.720,\n\t\t\t-1.839, 1.204, 11.835, -1.172,\n\t\t\t-2.737, 0.837, 13.001, -0.313,\n\t\t\t-1.952, 4.784, 11.578, 2.082,\n\t\t\t-3.617, 1.972, 13.184, 0.653,\n\t\t\t-3.744, 1.267, 10.389, -0.413,\n\t\t\t-0.709, 2.024, 12.234, -1.747,\n\t\t\t-3.690, 1.156, 9.005, -1.275,\n\t\t\t-3.434, -0.300, 8.649, 0.441,\n\t\t\t-3.508, -0.506, 7.143, 0.237,\n\t\t\t-4.822, 0.042, 6.601, -2.856,\n\t\t\t-5.027, 1.480, 7.064, 0.985,\n\t\t\t-6.370, 2.045, 6.652, 0.915,\n\t\t\t-2.162, -0.690, 9.149, 1.100,\n\t\t\t-3.442, -1.963, 6.836, -0.081,\n\t\t\t-5.916, -0.747, 7.065, -2.345,\n\t\t\t-4.965, 1.556, 8.497, 0.504,\n\t\t\t-6.439, 2.230, 5.246, 1.451,\n\t\t\t-2.161, -2.469, 6.802, -1.171,\n\t\t\t-2.239, -3.925, 6.320, -1.434,\n\t\t\t-0.847, -4.318, 5.821, 0.098,\n\t\t\t-0.434, -3.433, 4.670, -1.446,\n\t\t\t-0.123, -2.195, 5.505, 0.182,\n\t\t\t0.644, -2.789, 6.671, 0.865,\n\t\t\t-3.167, -4.083, 5.248, -0.098,\n\t\t\t0.101, -4.119, 6.854, -0.001,\n\t\t\t0.775, -3.876, 4.059, 1.061,\n\t\t\t-1.398, -1.625, 5.904, 0.230,\n\t\t\t0.844, -3.774, 2.675, 1.313,\n\t\t\t1.977, -2.824, 2.319, -0.112,\n\t\t\t2.192, -2.785, 0.813, -0.981,\n\t\t\t2.375, -4.197, 0.271, -0.355,\n\t\t\t1.232, -5.093, 0.734, 0.632,\n\t\t\t1.414, -6.539, 0.322, 0.576,\n\t\t\t1.678, -1.527, 2.819, -1.187,\n\t\t\t3.421, -1.999, 0.496, -1.770,\n\t\t\t3.605, -4.750, 0.735, 1.099,\n\t\t\t1.135, -5.078, 2.167, 0.854,\n\t\t\t1.289, -6.691, -1.084, -0.487,\n\t\t\t-1.057, 3.106, 22.602, -1.297,\n\t\t\t-2.280, 3.902, 22.120, 0.376,\n\t\t\t-3.316, 2.893, 21.621, 0.932,\n\t\t\t-2.756, 2.092, 20.470, 1.680,\n\t\t\t-1.839, 1.204, 21.305, 0.615,\n\t\t\t-2.737, 0.837, 22.471, 0.899,\n\t\t\t-1.952, 4.784, 21.048, -0.521,\n\t\t\t-3.617, 1.972, 22.654, 0.133,\n\t\t\t-3.744, 1.267, 19.859, 0.081,\n\t\t\t-0.709, 2.024, 21.704, 1.420,\n\t\t\t-3.690, 1.156, 18.475, -0.850,\n\t\t\t-3.434, -0.300, 18.119, -0.249,\n\t\t\t-3.508, -0.506, 16.613, 1.434,\n\t\t\t-4.822, 0.042, 16.071, -2.466,\n\t\t\t-5.027, 1.480, 16.534, -1.045,\n\t\t\t-6.370, 2.045, 16.122, 1.707,\n\t\t\t-2.162, -0.690, 18.619, -2.023,\n\t\t\t-3.442, -1.963, 16.336, -0.304,\n\t\t\t-5.916, -0.747, 16.535, 0.979,\n\t\t\t-4.965, 1.556, 17.967, -1.165,\n\t\t\t-6.439, 2.230, 14.716, 0.929,\n\t\t\t-2.161, -2.469, 16.302, -0.234,\n\t\t\t-2.239, -3.925, 15.820, -0.228,\n\t\t\t-0.847, -4.318, 15.321, 1.844,\n\t\t\t-0.434, -3.433, 14.170, 1.132,\n\t\t\t-0.123, -2.195, 15.005, 0.211,\n\t\t\t0.644, -2.789, 16.171, -0.632,\n\t\t\t-3.167, -4.083, 14.748, -0.519,\n\t\t\t0.101, -4.119, 16.354, 0.173,\n\t\t\t0.775, -3.876, 13.559, 1.243,\n\t\t\t-1.398, -1.625, 15.404, -0.187,\n\t\t\t0.844, -3.774, 12.175, -1.332,\n\t\t\t1.977, -2.824, 11.819, -1.616,\n\t\t\t2.192, -2.785, 10.313, 1.320,\n\t\t\t2.375, -4.197, 9.771, 0.237,\n\t\t\t1.232, -5.093, 10.234, 0.851,\n\t\t\t1.414, -6.539, 9.822, 1.816,\n\t\t\t1.678, -1.527, 12.319, -1.657,\n\t\t\t3.421, -1.999, 10.036, 1.559,\n\t\t\t3.605, -4.750, 10.235, 0.831,\n\t\t\t1.135, -5.078, 11.667, 0.060,\n\t\t\t1.289, -6.691, 8.416, 1.066,\n\t\t\t3.219, -0.637, 10.002, 2.111,\n\t\t\t4.519, 0.024, 9.520, -0.874,\n\t\t\t4.163, 1.425, 9.021, -1.012,\n\t\t\t3.190, 1.341, 7.870, -0.250,\n\t\t\t1.962, 0.991, 8.705, -1.359,\n\t\t\t2.093, 1.952, 9.871, -0.126,\n\t\t\t5.119, -0.701, 8.448, 0.995,\n\t\t\t3.517, 2.147, 10.054, 0.941,\n\t\t\t2.970, 2.609, 7.259, -0.562,\n\t\t\t2.107, -0.398, 9.104, -0.038,\n\t\t\t2.847, 2.618, 5.875, 0.398,\n\t\t\t1.457, 3.124, 5.519, 0.481,\n\t\t\t1.316, 3.291, 4.013, -0.187,\n\t\t\t2.447, 4.155, 3.471, -0.429,\n\t\t\t3.795, 3.614, 3.934, -0.432,\n\t\t\t4.956, 4.494, 3.522, -0.788,\n\t\t\t0.483, 2.217, 6.019, -0.923,\n\t\t\t0.021, 3.962, 3.636, -0.316,\n\t\t\t2.311, 5.497, 3.935, -1.917,\n\t\t\t3.830, 3.522, 5.367, -0.302,\n\t\t\t5.150, 4.461, 2.116, -1.615\n\t\t};\n\t\tstatic const glm::length_t _1agaSize = sizeof(_1aga) / (4 * sizeof(double));\n\n\t\toutTestData.resize(_1agaSize);\n\t\tfor(glm::length_t i = 0; i < _1agaSize; ++i)\n\t\t\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\t\t\toutTestData[i][d] = static_cast<typename vec::value_type>(_1aga[i * 4 + d]);\n\t}\n\n\t// All reference values computed separately using symbolic precision\n\t// https://github.com/sgrottel/exp-pca-precision\n\t// This applies to all functions named: `_1aga::expected*()`\n\n\tGLM_INLINE glm::dmat4 const& expectedCovarData()\n\t{\n\t\tstatic const glm::dmat4 covar4x4d(\n\t\t\t9.62434068027210898322, -0.00006657369614512471, -4.29321376568405099761, 0.01879374187452758846,\n\t\t\t-0.00006657369614512471, 9.62443937868480681175, 5.35113872637944076871, -0.11569259145880574080,\n\t\t\t-4.29321376568405099761, 5.35113872637944076871, 35.62848549634668415820, 0.90874239254220201545,\n\t\t\t0.01879374187452758846, -0.11569259145880574080, 0.90874239254220201545, 1.09705971856890904803\n\t\t);\n\t\treturn covar4x4d;\n\t}\n\n\ttemplate<glm::length_t D>\n\tGLM_INLINE glm::vec<D, double, glm::defaultp> const& expectedEigenvalues();\n\ttemplate<>\n\tGLM_INLINE glm::dvec2 const& expectedEigenvalues<2>()\n\t{\n\t\tstatic const glm::dvec2 evals2(\n\t\t\t9.62447289926297399961763301774251330057894539467032275382255,\n\t\t\t9.62430715969394210015560961264297422776572580714373620309355\n\t\t);\n\t\treturn evals2;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dvec3 const& expectedEigenvalues<3>()\n\t{\n\t\tstatic const glm::dvec3 evals3(\n\t\t\t\t37.3274494274683425233695502581182052836449738530676689472257,\n\t\t\t\t9.62431434161498823505729817436585077939509766554969096873168,\n\t\t\t\t7.92550178622027216422369326567668971675332732240052872097887\n\t\t\t);\n\t\treturn evals3;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dvec4 const& expectedEigenvalues<4>()\n\t{\n\t\tstatic const glm::dvec4 evals4(\n\t\t\t\t37.3477389918792213596879452204499702406947817221901007885630,\n\t\t\t\t9.62470688921105696017807313860277172063600080413412567999700,\n\t\t\t\t7.94017075281634999342344275928070533134615133171969063657713,\n\t\t\t\t1.06170863996588365446060186982477896078741484440002343404155\n\t\t\t);\n\t\treturn evals4;\n\t}\n\n\ttemplate<glm::length_t D>\n\tGLM_INLINE glm::mat<D, D, double, glm::defaultp> const& expectedEigenvectors();\n\ttemplate<>\n\tGLM_INLINE glm::dmat2 const& expectedEigenvectors<2>()\n\t{\n\t\tstatic const glm::dmat2 evecs2(\n\t\t\tglm::dvec2(\n\t\t\t\t-0.503510847492551904906870957742619139443409162857537237123308,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec2(\n\t\t\t\t1.98605453086051402895741763848787613048533838388005162794043,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs2;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dmat3 const& expectedEigenvectors<3>()\n\t{\n\t\tstatic const glm::dmat3 evecs3(\n\t\t\tglm::dvec3(\n\t\t\t\t-0.154972738414395866005286433008304444294405085038689821864654,\n\t\t\t\t0.193161285869815165989799191097521722568079378840201629578695,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec3(\n\t\t\t\t-158565.112775416943154745839952575022429933119522746586149868,\n\t\t\t\t-127221.506282351944358932458687410410814983610301927832439675,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec3(\n\t\t\t\t2.52702248596556806145700361724323960543858113426446460406536,\n\t\t\t\t-3.14959802931313870497377546974185300816008580801457419079412,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs3;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dmat4 const& expectedEigenvectors<4>()\n\t{\n\t\tstatic const glm::dmat4 evecs4(\n\t\t\tglm::dvec4(\n\t\t\t\t-6.35322390281037045217295803597357821705371650876122113027264,\n\t\t\t\t7.91546394153385394517767054617789939529794642646629201212056,\n\t\t\t\t41.0301543819240679808549819457450130787045236815736490549663,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t-114.622418941087829756565311692197154422302604224781253861297,\n\t\t\t\t-92.2070185807065289900871215218752013659402949497379896153118,\n\t\t\t\t0.0155846091025912430932734548933329458404665760587569100867246,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t13.1771887761559019483954743159026938257325190511642952175789,\n\t\t\t\t-16.3688257459634877666638419310116970616615816436949741766895,\n\t\t\t\t5.17386502341472097227408249233288958059579189051394773143190,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t-0.0192777078948229800494895064532553117703859768210647632969276,\n\t\t\t\t0.0348034950916108873629241563077465542944938906271231198634442,\n\t\t\t\t-0.0340715609308469289267379681032545422644143611273049912226126,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs4;\n\t}\n\n} // namespace _1aga\n\n// Compute center of gravity\ntemplate<typename vec>\nvec computeCenter(const std::vector<vec>& testData)\n{\n\tdouble c[4];\n\tstd::fill(c, c + vec::length(), 0.0);\n\n\ttypename std::vector<vec>::const_iterator e = testData.end();\n\tfor(typename std::vector<vec>::const_iterator i = testData.begin(); i != e; ++i)\n\t\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\t\tc[d] += static_cast<double>((*i)[d]);\n\n\tvec cVec(0);\n\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\tcVec[d] = static_cast<typename vec::value_type>(c[d] / static_cast<double>(testData.size()));\n\treturn cVec;\n}\n\n// Test sorting of Eigenvalue&Eigenvector lists. Use exhaustive search.\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testEigenvalueSort()\n{\n\t// Test input data: four arbitrary values\n\tstatic const glm::vec<D, T, Q> refVal(\n\t\tglm::vec<4, T, Q>(\n\t\t\t10, 8, 6, 4\n\t\t)\n\t);\n\t// Test input data: four arbitrary vectors, which can be matched to the above values\n\tstatic const glm::mat<D, D, T, Q> refVec(\n\t\tglm::mat<4, 4, T, Q>(\n\t\t\t10, 20, 5, 40,\n\t\t\t8, 16, 4, 32,\n\t\t\t6, 12, 3, 24,\n\t\t\t4, 8, 2, 16\n\t\t)\n\t);\n\t// Permutations of test input data for exhaustive check, based on `D` (1 <= D <= 4)\n\tstatic const int permutationCount[] = {\n\t\t0,\n\t\t1,\n\t\t2,\n\t\t6,\n\t\t24\n\t};\n\t// The permutations t perform, based on `D` (1 <= D <= 4)\n\tstatic const glm::ivec4 permutation[] = {\n\t\tglm::ivec4(0, 1, 2, 3),\n\t\tglm::ivec4(1, 0, 2, 3), // last for D = 2\n\t\tglm::ivec4(0, 2, 1, 3),\n\t\tglm::ivec4(1, 2, 0, 3),\n\t\tglm::ivec4(2, 0, 1, 3),\n\t\tglm::ivec4(2, 1, 0, 3), // last for D = 3\n\t\tglm::ivec4(0, 1, 3, 2),\n\t\tglm::ivec4(1, 0, 3, 2),\n\t\tglm::ivec4(0, 2, 3, 1),\n\t\tglm::ivec4(1, 2, 3, 0),\n\t\tglm::ivec4(2, 0, 3, 1),\n\t\tglm::ivec4(2, 1, 3, 0),\n\t\tglm::ivec4(0, 3, 1, 2),\n\t\tglm::ivec4(1, 3, 0, 2),\n\t\tglm::ivec4(0, 3, 2, 1),\n\t\tglm::ivec4(1, 3, 2, 0),\n\t\tglm::ivec4(2, 3, 0, 1),\n\t\tglm::ivec4(2, 3, 1, 0),\n\t\tglm::ivec4(3, 0, 1, 2),\n\t\tglm::ivec4(3, 1, 0, 2),\n\t\tglm::ivec4(3, 0, 2, 1),\n\t\tglm::ivec4(3, 1, 2, 0),\n\t\tglm::ivec4(3, 2, 0, 1),\n\t\tglm::ivec4(3, 2, 1, 0)  // last for D = 4\n\t};\n\n\t// initial sanity check\n\tif(!vectorEpsilonEqual(refVal, refVal, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(refVec, refVec, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\n\t// Exhaustive search through all permutations\n\tfor(int p = 0; p < permutationCount[D]; ++p)\n\t{\n\t\tglm::vec<D, T, Q> testVal;\n\t\tglm::mat<D, D, T, Q> testVec;\n\t\tfor(int i = 0; i < D; ++i)\n\t\t{\n\t\t\ttestVal[i] = refVal[permutation[p][i]];\n\t\t\ttestVec[i] = refVec[permutation[p][i]];\n\t\t}\n\n\t\tglm::sortEigenvalues(testVal, testVec);\n\n\t\tif (!vectorEpsilonEqual(testVal, refVal, myEpsilon<T>()))\n\t\t\treturn failReport(__LINE__);\n\t\tif (!matrixEpsilonEqual(testVec, refVec, myEpsilon<T>()))\n\t\t\treturn failReport(__LINE__);\n\t}\n\n\treturn 0;\n}\n\n// Test covariance matrix creation functions\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testCovar(\n#if GLM_HAS_CXX11_STL == 1\n\tglm::length_t dataSize, unsigned int randomEngineSeed\n#else // GLM_HAS_CXX11_STL == 1\n\tglm::length_t, unsigned int\n#endif // GLM_HAS_CXX11_STL == 1\n)\n{\n\ttypedef glm::vec<D, T, Q> vec;\n\ttypedef glm::mat<D, D, T, Q> mat;\n\n\t// #1: test expected result with fixed data set\n\tstd::vector<vec> testData;\n\t_1aga::fillTestData(testData);\n\n\t// compute center of gravity\n\tvec center = computeCenter(testData);\n\n\tmat covarMat = glm::computeCovarianceMatrix(testData.data(), testData.size(), center);\n\tif(!matrixEpsilonEqual(covarMat, mat(_1aga::expectedCovarData()), myEpsilon<T>()))\n\t{\n\t\tfprintf(stderr, \"Reconstructed covarMat:\\n%s\\n\", glm::to_string(covarMat).c_str());\n\t\treturn failReport(__LINE__);\n\t}\n\n\t// #2: test function variant consitency with random data\n#if GLM_HAS_CXX11_STL == 1\n\tstd::default_random_engine rndEng(randomEngineSeed);\n\tstd::normal_distribution<T> normalDist;\n\ttestData.resize(dataSize);\n\t// some common offset of all data\n\tT offset[D];\n\tfor(glm::length_t d = 0; d < D; ++d)\n\t\toffset[d] = normalDist(rndEng);\n\t// init data\n\tfor(glm::length_t i = 0; i < dataSize; ++i)\n\t\tfor(glm::length_t d = 0; d < D; ++d)\n\t\t\ttestData[i][d] = offset[d] + normalDist(rndEng);\n\tcenter = computeCenter(testData);\n\n\tstd::vector<vec> centeredTestData;\n\tcenteredTestData.reserve(testData.size());\n\ttypename std::vector<vec>::const_iterator e = testData.end();\n\tfor(typename std::vector<vec>::const_iterator i = testData.begin(); i != e; ++i)\n\t\tcenteredTestData.push_back((*i) - center);\n\n\tmat c1 = glm::computeCovarianceMatrix(centeredTestData.data(), centeredTestData.size());\n\tmat c2 = glm::computeCovarianceMatrix<D, T, Q>(centeredTestData.begin(), centeredTestData.end());\n\tmat c3 = glm::computeCovarianceMatrix(testData.data(), testData.size(), center);\n\tmat c4 = glm::computeCovarianceMatrix<D, T, Q>(testData.rbegin(), testData.rend(), center);\n\n\tif(!matrixEpsilonEqual(c1, c2, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(c1, c3, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(c1, c4, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n#endif // GLM_HAS_CXX11_STL == 1\n\treturn 0;\n}\n\n// Computes eigenvalues and eigenvectors from well-known covariance matrix\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testEigenvectors(T epsilon)\n{\n\ttypedef glm::vec<D, T, Q> vec;\n\ttypedef glm::mat<D, D, T, Q> mat;\n\n\t// test expected result with fixed data set\n\tstd::vector<vec> testData;\n\tmat covarMat(_1aga::expectedCovarData());\n\n\tvec eigenvalues;\n\tmat eigenvectors;\n\tunsigned int c = glm::findEigenvaluesSymReal(covarMat, eigenvalues, eigenvectors);\n\tif(c != D)\n\t\treturn failReport(__LINE__);\n\tglm::sortEigenvalues(eigenvalues, eigenvectors);\n\n\tif (!vectorEpsilonEqual(eigenvalues, vec(_1aga::expectedEigenvalues<D>()), epsilon))\n\t\treturn failReport(__LINE__);\n\n\tfor (int i = 0; i < D; ++i)\n\t{\n\t\tvec act = glm::normalize(eigenvectors[i]);\n\t\tvec exp = glm::normalize(_1aga::expectedEigenvectors<D>()[i]);\n\t\tif (!sameSign(act[0], exp[0])) exp = -exp;\n\t\tif (!vectorEpsilonEqual(act, exp, epsilon))\n\t\t\treturn failReport(__LINE__);\n\t}\n\n\treturn 0;\n}\n\n// A simple small smoke test:\n// - a uniformly sampled block\n// - reconstruct main axes\n// - check order of eigenvalues equals order of extends of block in direction of main axes\nint smokeTest()\n{\n\tusing glm::vec3;\n\tusing glm::mat3;\n\tstd::vector<vec3> pts;\n\tpts.reserve(11 * 15 * 7);\n\n\tfor(int x = -5; x <= 5; ++x)\n\t\tfor(int y = -7; y <= 7; ++y)\n\t\t\tfor(int z = -3; z <= 3; ++z)\n\t\t\t\tpts.push_back(vec3(x, y, z));\n\n\tmat3 covar = glm::computeCovarianceMatrix(pts.data(), pts.size());\n\tmat3 eVec;\n\tvec3 eVal;\n\tint eCnt = glm::findEigenvaluesSymReal(covar, eVal, eVec);\n\tif(eCnt != 3)\n\t\treturn failReport(__LINE__);\n\n\t// sort eVec by decending eVal\n\tif(eVal[0] < eVal[1])\n\t{\n\t\tstd::swap(eVal[0], eVal[1]);\n\t\tstd::swap(eVec[0], eVec[1]);\n\t}\n\tif(eVal[0] < eVal[2])\n\t{\n\t\tstd::swap(eVal[0], eVal[2]);\n\t\tstd::swap(eVec[0], eVec[2]);\n\t}\n\tif(eVal[1] < eVal[2])\n\t{\n\t\tstd::swap(eVal[1], eVal[2]);\n\t\tstd::swap(eVec[1], eVec[2]);\n\t}\n\n\tif(!vectorEpsilonEqual(glm::abs(eVec[0]), vec3(0, 1, 0), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\tif(!vectorEpsilonEqual(glm::abs(eVec[1]), vec3(1, 0, 0), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\tif(!vectorEpsilonEqual(glm::abs(eVec[2]), vec3(0, 0, 1), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\n\treturn 0;\n}\n\n#if GLM_HAS_CXX11_STL == 1\nint rndTest(unsigned int randomEngineSeed)\n{\n\tstd::default_random_engine rndEng(randomEngineSeed);\n\tstd::normal_distribution<double> normalDist;\n\n\t// construct orthonormal system\n\tglm::dvec3 x(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tdouble l = glm::length(x);\n\twhile(l < myEpsilon<double>())\n\t\tx = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tx = glm::normalize(x);\n\tglm::dvec3 y(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tl = glm::length(y);\n\twhile(l < myEpsilon<double>())\n\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\twhile(glm::abs(glm::dot(x, y)) < myEpsilon<double>())\n\t{\n\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\t\twhile(l < myEpsilon<double>())\n\t\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\t}\n\ty = glm::normalize(y);\n\tglm::dvec3 z = glm::normalize(glm::cross(x, y));\n\ty = glm::normalize(glm::cross(z, x));\n\n\t// generate input point data\n\tstd::vector<glm::dvec3> ptData;\n\tstatic const int pattern[] = {\n\t\t8, 0, 0,\n\t\t4, 1, 2,\n\t\t0, 2, 0,\n\t\t0, 0, 4\n\t};\n\tglm::dvec3 offset(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tfor(int p = 0; p < 4; ++p)\n\t\tfor(int xs = 1; xs >= -1; xs -= 2)\n\t\t\tfor(int ys = 1; ys >= -1; ys -= 2)\n\t\t\t\tfor(int zs = 1; zs >= -1; zs -= 2)\n\t\t\t\t\tptData.push_back(\n\t\t\t\t\t\toffset\n\t\t\t\t\t\t+ x * static_cast<double>(pattern[p * 3 + 0] * xs)\n\t\t\t\t\t\t+ y * static_cast<double>(pattern[p * 3 + 1] * ys)\n\t\t\t\t\t\t+ z * static_cast<double>(pattern[p * 3 + 2] * zs));\n\n\t// perform PCA:\n\tglm::dvec3 center = computeCenter(ptData);\n\tglm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center);\n\tglm::dvec3 evals;\n\tglm::dmat3 evecs;\n\tint evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs);\n\tif(evcnt != 3)\n\t\treturn failReport(__LINE__);\n\tglm::sortEigenvalues(evals, evecs);\n\n\tif (!sameSign(evecs[0][0], x[0])) evecs[0] = -evecs[0];\n\tif(!vectorEpsilonEqual(x, evecs[0], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\tif (!sameSign(evecs[2][0], y[0])) evecs[2] = -evecs[2];\n\tif (!vectorEpsilonEqual(y, evecs[2], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\tif (!sameSign(evecs[1][0], z[0])) evecs[1] = -evecs[1];\n\tif (!vectorEpsilonEqual(z, evecs[1], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\n\treturn 0;\n}\n#endif // GLM_HAS_CXX11_STL == 1\n\nint main()\n{\n\tint error(0);\n\n\t// A small smoke test to fail early with most problems\n\tif(smokeTest())\n\t\treturn failReport(__LINE__);\n\n\t// test sorting utility.\n\tif(testEigenvalueSort<2, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<2, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<3, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<3, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<4, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<4, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n\n\t// Note: the random engine uses a fixed seed to create consistent and reproducible test data\n\t// test covariance matrix computation from different data sources\n\tif(testCovar<2, float, glm::defaultp>(100, 12345) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<2, double, glm::defaultp>(100, 42) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<3, float, glm::defaultp>(100, 2021) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<3, double, glm::defaultp>(100, 815) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<4, float, glm::defaultp>(100, 3141) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<4, double, glm::defaultp>(100, 174) != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n\n\t// test PCA eigen vector reconstruction\n\t// Expected epsilon precision evaluated separately:\n\t// https://github.com/sgrottel/exp-pca-precision\n\tif(testEigenvectors<2, float, glm::defaultp>(0.002f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<2, double, glm::defaultp>(0.00000000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<3, float, glm::defaultp>(0.00001f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<3, double, glm::defaultp>(0.0000000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<4, float, glm::defaultp>(0.0001f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<4, double, glm::defaultp>(0.0000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(error != 0)\n\t\treturn error;\n\n\t// Final tests with randomized data\n#if GLM_HAS_CXX11_STL == 1\n\tif(rndTest(12345) != 0)\n\t\terror = failReport(__LINE__);\n\tif(rndTest(42) != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n#endif // GLM_HAS_CXX11_STL == 1\n\n\treturn error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_perpendicular.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/perpendicular.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_polar_coordinates.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/polar_coordinates.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_projection.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/projection.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_quaternion.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_ptr.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtx/transform.hpp>\n#include <glm/gtx/quaternion.hpp>\n#include <glm/gtx/compatibility.hpp>\n#include <glm/ext.hpp>\n\nint test_quat_fastMix()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::fastMix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_shortMix()\n{\n\tint Error(0);\n\n\tglm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::shortMix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientation()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::roll(q);\n\t\tError += glm::epsilonEqual(p, glm::pi<float>() * 0.5f, 0.0001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::pitch(q);\n\t\tError += glm::epsilonEqual(p, 0.f, 0.0001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::yaw(q);\n\t\tError += glm::epsilonEqual(p, 0.f, 0.0001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_rotation()\n{\n\tint Error(0);\n\n\tglm::vec3 v(1, 0, 0);\n\tglm::vec3 u(0, 1, 0);\n\n\tglm::quat Rotation = glm::rotation(v, u);\n\n\tfloat Angle = glm::angle(Rotation);\n\n\tError += glm::abs(Angle - glm::pi<float>() * 0.5f) < glm::epsilon<float>() ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_log()\n{\n\tint Error(0);\n\t\n\tglm::quat q;\n\tglm::quat p = glm::log(q);\n\tglm::quat r = glm::exp(p);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_log();\n\tError += test_rotation();\n\tError += test_orientation();\n\tError += test_quat_fastMix();\n\tError += test_quat_shortMix();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_random.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2011-05-31\n// Updated : 2011-05-31\n// Licence : This source is under MIT licence\n// File    : test/gtx/random.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtx/random.hpp>\n#include <glm/gtx/epsilon.hpp>\n#include <iostream>\n\nint test_signedRand1()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0f;\n\t\tfor(std::size_t i = 0; i < 100000; ++i)\n\t\t{\n\t\t\tResultFloat += glm::signedRand1<float>();\n\t\t\tResultDouble += glm::signedRand1<double>();\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloat, 0.0f, 0.0001f);\n\t\tError += glm::equalEpsilon(ResultDouble, 0.0, 0.0001);\n\t}\n\n\treturn Error;\n}\n\nint test_normalizedRand2()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = 100000;\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0f;\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::normalizedRand2<float>());\n\t\t\tResultDouble += glm::length(glm::normalizedRand2<double>());\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloat, float(Max), 0.000001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDouble, double(Max), 0.000001) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_normalizedRand3()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = 100000;\n\t\tfloat ResultFloatA = 0.0f;\n\t\tfloat ResultFloatB = 0.0f;\n\t\tfloat ResultFloatC = 0.0f;\n\t\tdouble ResultDoubleA = 0.0f;\n\t\tdouble ResultDoubleB = 0.0f;\n\t\tdouble ResultDoubleC = 0.0f;\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloatA += glm::length(glm::normalizedRand3<float>());\n\t\t\tResultDoubleA += glm::length(glm::normalizedRand3<double>());\n\t\t\tResultFloatB += glm::length(glm::normalizedRand3(2.0f, 2.0f));\n\t\t\tResultDoubleB += glm::length(glm::normalizedRand3(2.0, 2.0));\n\t\t\tResultFloatC += glm::length(glm::normalizedRand3(1.0f, 3.0f));\n\t\t\tResultDoubleC += glm::length(glm::normalizedRand3(1.0, 3.0));\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloatA, float(Max), 0.0001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultFloatB, float(Max * 2), 0.0001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;\n\t\tError += (ResultFloatC >= float(Max) && ResultFloatC <= float(Max * 3)) ? 0 : 1;\n\t\tError += (ResultDoubleC >= double(Max) && ResultDoubleC <= double(Max * 3)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_signedRand1();\n\tError += test_normalizedRand2();\n\tError += test_normalizedRand3();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_range.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\n#if GLM_HAS_RANGE_FOR\n\n#include <glm/gtx/range.hpp>\n\nint test_vec()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec3 const v(1, 2, 3);\n\n\t\tint count = 0;\n\t\tglm::ivec3 Result(0);\n\t\tfor(int x : v)\n\t\t{\n\t\t\tResult[count] = x;\n\t\t\tcount++;\n\t\t}\n\t\tError += count == 3 ? 0 : 1;\n\t\tError += v == Result ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tfor(int& x : v)\n\t\t\tx = 0;\n\t\tError += glm::all(glm::equal(v, glm::ivec3(0))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4x3 m(1.0f);\n\n\t\tint count = 0;\n\t\tfloat Sum = 0.0f;\n\t\tfor(float x : m)\n\t\t{\n\t\t\tcount++;\n\t\t\tSum += x;\n\t\t}\n\t\tError += count == 12 ? 0 : 1;\n\t\tError += glm::equal(Sum, 3.0f, 0.001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 m(1.0f);\n\n\t\tfor (float& x : m) { x = 0; }\n\t\tglm::vec4 v(1, 1, 1, 1);\n\t\tError += glm::all(glm::equal(m*v, glm::vec3(0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\tError += test_vec();\n\tError += test_mat();\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif//GLM_HAS_RANGE_FOR\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_rotate_normalized_axis.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/rotate_normalized_axis.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_rotate_vector.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/rotate_vector.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nint test_rotate()\n{\n\tint Error = 0;\n\n\tglm::vec2 A = glm::rotate(glm::vec2(1, 0), glm::pi<float>() * 0.5f);\n\tglm::vec3 B = glm::rotate(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec4 C = glm::rotate(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\tglm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\tglm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);\n\tglm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));\n\n\treturn Error;\n}\n\nint test_rotateX()\n{\n\tint Error = 0;\n\n\tglm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\nint test_rotateY()\n{\n\tint Error = 0;\n\n\tglm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\n\nint test_rotateZ()\n{\n\tint Error = 0;\n\n\tglm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\nint test_orientation()\n{\n\tint Error = 0;\n\n\tglm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_rotate();\n\tError += test_rotateX();\n\tError += test_rotateY();\n\tError += test_rotateZ();\n\tError += test_orientation();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_scalar_multiplication.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\n#if GLM_HAS_TEMPLATE_ALIASES && !(GLM_COMPILER & GLM_COMPILER_GCC)\n#include <glm/gtx/scalar_multiplication.hpp>\n\nint main()\n{\n\tint Error(0);\n\tglm::vec3 v(0.5, 3.1, -9.1);\n\n\tError += glm::all(glm::equal(v, 1.0 * v, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(v, 1 * v, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(v, 1u * v, glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::mat3 m(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tglm::vec3 w = 0.5f * m * v;\n\n\tError += glm::all(glm::equal((m*v)/2, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m*(v/2), w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal((m/2)*v, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal((0.5*m)*v, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(0.5*(m*v), w, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_scalar_relational.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/scalar_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_lessThan()\n{\n\tint Error = 0;\n\n\tError += glm::lessThan(0, 1) ? 0 : 1;\n\tError += glm::lessThan(1, 0) ? 1 : 0;\n\tError += glm::lessThan(0, 0) ? 1 : 0;\n\tError += glm::lessThan(1, 1) ? 1 : 0;\n\tError += glm::lessThan(0.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThan(1.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThan(0.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThan(1.0f, 1.0f) ? 1 : 0;\n\tError += glm::lessThan(0.0, 1.0) ? 0 : 1;\n\tError += glm::lessThan(1.0, 0.0) ? 1 : 0;\n\tError += glm::lessThan(0.0, 0.0) ? 1 : 0;\n\tError += glm::lessThan(1.0, 1.0) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_lessThanEqual()\n{\n\tint Error = 0;\n\n\tError += glm::lessThanEqual(0, 1) ? 0 : 1;\n\tError += glm::lessThanEqual(1, 0) ? 1 : 0;\n\tError += glm::lessThanEqual(0, 0) ? 0 : 1;\n\tError += glm::lessThanEqual(1, 1) ? 0 : 1;\n\tError += glm::lessThanEqual(0.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThanEqual(0.0f, 0.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(0.0, 1.0) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0, 0.0) ? 1 : 0;\n\tError += glm::lessThanEqual(0.0, 0.0) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0, 1.0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_greaterThan()\n{\n\tint Error = 0;\n\n\tError += glm::greaterThan(0, 1) ? 1 : 0;\n\tError += glm::greaterThan(1, 0) ? 0 : 1;\n\tError += glm::greaterThan(0, 0) ? 1 : 0;\n\tError += glm::greaterThan(1, 1) ? 1 : 0;\n\tError += glm::greaterThan(0.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThan(1.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThan(0.0f, 0.0f) ? 1 : 0;\n\tError += glm::greaterThan(1.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThan(0.0, 1.0) ? 1 : 0;\n\tError += glm::greaterThan(1.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThan(0.0, 0.0) ? 1 : 0;\n\tError += glm::greaterThan(1.0, 1.0) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_greaterThanEqual()\n{\n\tint Error = 0;\n\n\tError += glm::greaterThanEqual(0, 1) ? 1 : 0;\n\tError += glm::greaterThanEqual(1, 0) ? 0 : 1;\n\tError += glm::greaterThanEqual(0, 0) ? 0 : 1;\n\tError += glm::greaterThanEqual(1, 1) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThanEqual(1.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(1.0f, 1.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0, 1.0) ? 1 : 0;\n\tError += glm::greaterThanEqual(1.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThanEqual(1.0, 1.0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\tError += glm::equal(0, 1) ? 1 : 0;\n\tError += glm::equal(1, 0) ? 1 : 0;\n\tError += glm::equal(0, 0) ? 0 : 1;\n\tError += glm::equal(1, 1) ? 0 : 1;\n\tError += glm::equal(0.0f, 1.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::equal(1.0f, 0.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::equal(0.0f, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(1.0f, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(0.0, 1.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::equal(1.0, 0.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::equal(0.0, 0.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::equal(1.0, 1.0, glm::epsilon<double>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_notEqual()\n{\n\tint Error = 0;\n\n\tError += glm::notEqual(0, 1) ? 0 : 1;\n\tError += glm::notEqual(1, 0) ? 0 : 1;\n\tError += glm::notEqual(0, 0) ? 1 : 0;\n\tError += glm::notEqual(1, 1) ? 1 : 0;\n\tError += glm::notEqual(0.0f, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::notEqual(1.0f, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::notEqual(0.0f, 0.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::notEqual(1.0f, 1.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::notEqual(0.0, 1.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::notEqual(1.0, 0.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::notEqual(0.0, 0.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::notEqual(1.0, 1.0, glm::epsilon<double>()) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_any()\n{\n\tint Error = 0;\n\n\tError += glm::any(true) ? 0 : 1;\n\tError += glm::any(false) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_all()\n{\n\tint Error = 0;\n\n\tError += glm::all(true) ? 0 : 1;\n\tError += glm::all(false) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_not()\n{\n\tint Error = 0;\n\n\tError += glm::not_(true) ? 1 : 0;\n\tError += glm::not_(false) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_lessThan();\n\tError += test_lessThanEqual();\n\tError += test_greaterThan();\n\tError += test_greaterThanEqual();\n\tError += test_equal();\n\tError += test_notEqual();\n\tError += test_any();\n\tError += test_all();\n\tError += test_not();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_simd_mat4.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_simd_mat4.cpp\n/// @date 2010-09-16 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/random.hpp>\n#include <glm/gtx/simd_vec4.hpp>\n#include <glm/gtx/simd_mat4.hpp>\n#include <cstdio>\n#include <ctime>\n#include <vector>\n\n#if(GLM_ARCH != GLM_ARCH_PURE)\n\nstd::vector<float> test_detA(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t\tTest[i] = glm::determinant(Data[i]);\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det A: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detB(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_slow_det_ps((__m128 const * const)&m)); \n\t\tglm::vec4 v;//(d);\n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det B: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detC(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_det_ps((__m128 const * const)&m));\n\t\tglm::vec4 v;//(d);\n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det C: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detD(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_detd_ps((__m128 const * const)&m));\n\t\tglm::vec4 v;//(d); \n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det D: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nvoid test_invA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\tOut[i] = glm::inverse(Data[i]);\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv A: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_invC(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_inverse_fast_ps((__m128 const * const)&m, (__m128 *)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv C: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_invD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_inverse_ps((__m128 const * const)&m, (__m128 *)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv D: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_mulA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\tOut[i] = Data[i] * Data[i];\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Mul A: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_mulD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_mul_ps((__m128 const * const)&m, (__m128 const * const)&m, (__m128*)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Mul D: %ld\\n\", TimeEnd - TimeStart);\n}\n\nint test_compute_glm()\n{\n\treturn 0;\n}\n\nint test_compute_gtx()\n{\n\tstd::vector<glm::vec4> Output(1000000);\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t k = 0; k < Output.size(); ++k)\n\t{\n\t\tfloat i = float(k) / 1000.f + 0.001f;\n\t\tglm::vec3 A = glm::normalize(glm::vec3(i));\n\t\tglm::vec3 B = glm::cross(A, glm::normalize(glm::vec3(1, 1, 2)));\n\t\tglm::mat4 C = glm::rotate(glm::mat4(1.0f), i, B);\n\t\tglm::mat4 D = glm::scale(C, glm::vec3(0.8f, 1.0f, 1.2f));\n\t\tglm::mat4 E = glm::translate(D, glm::vec3(1.4f, 1.2f, 1.1f));\n\t\tglm::mat4 F = glm::perspective(i, 1.5f, 0.1f, 1000.f);\n\t\tglm::mat4 G = glm::inverse(F * E);\n\t\tglm::vec3 H = glm::unProject(glm::vec3(i), G, F, E[3]);\n\t\tglm::vec3 I = glm::any(glm::isnan(glm::project(H, G, F, E[3]))) ? glm::vec3(2) : glm::vec3(1);\n\t\tglm::mat4 J = glm::lookAt(glm::normalize(glm::max(B, glm::vec3(0.001f))), H, I);\n\t\tglm::mat4 K = glm::transpose(J);\n\t\tglm::quat L = glm::normalize(glm::quat_cast(K));\n\t\tglm::vec4 M = L * glm::smoothstep(K[3], J[3], glm::vec4(i));\n\t\tglm::mat4 N = glm::mat4(glm::normalize(glm::max(M, glm::vec4(0.001f))), K[3], J[3], glm::vec4(i));\n\t\tglm::mat4 O = N * glm::inverse(N);\n\t\tglm::vec4 P = O * glm::reflect(N[3], glm::vec4(A, 1.0f));\n\t\tglm::vec4 Q = glm::vec4(glm::dot(M, P));\n\t\tglm::vec4 R = glm::quat(Q.w, glm::vec3(Q)) * P;\n\t\tOutput[k] = R;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"test_compute_gtx: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::mat4> Data(64 * 64 * 1);\n\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\tData[i] = glm::mat4(\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))));\n\n\t{\n\t\tstd::vector<glm::mat4> TestInvA;\n\t\ttest_invA(Data, TestInvA);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestInvC;\n\t\ttest_invC(Data, TestInvC);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestInvD;\n\t\ttest_invD(Data, TestInvD);\n\t}\n\n\t{\n\t\tstd::vector<glm::mat4> TestA;\n\t\ttest_mulA(Data, TestA);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestD;\n\t\ttest_mulD(Data, TestD);\n\t}\n\n\t{\n\t\tstd::vector<float> TestDetA = test_detA(Data);\n\t\tstd::vector<float> TestDetB = test_detB(Data);\n\t\tstd::vector<float> TestDetD = test_detD(Data);\n\t\tstd::vector<float> TestDetC = test_detC(Data);\n\n\t\tfor(std::size_t i = 0; i < TestDetA.size(); ++i)\n\t\t\tif(TestDetA[i] != TestDetB[i] && TestDetC[i] != TestDetB[i] && TestDetC[i] != TestDetD[i])\n\t\t\t\treturn 1;\n\t}\n\n\t// shuffle test\n\tglm::simdVec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\tglm::simdVec4 B(5.0f, 6.0f, 7.0f, 8.0f);\n\t//__m128 C = _mm_shuffle_ps(A.Data, B.Data, _MM_SHUFFLE(1, 0, 1, 0));\n\n\tError += test_compute_glm();\n\tError += test_compute_gtx();\n\tfloat Det = glm::determinant(glm::simdMat4(1.0));\n\tError += Det == 1.0f ? 0 : 1;\n\t\n\tglm::simdMat4 D = glm::matrixCompMult(glm::simdMat4(1.0), glm::simdMat4(1.0));\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n#endif//(GLM_ARCH != GLM_ARCH_PURE)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_simd_vec4.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_simd_vec4.cpp\n/// @date 2010-09-16 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtx/simd_vec4.hpp>\n#include <cstdio>\n\n#if(GLM_ARCH != GLM_ARCH_PURE)\n\nint main()\n{\n\tglm::simdVec4 A1(0.0f, 0.1f, 0.2f, 0.3f);\n\tglm::simdVec4 B1(0.4f, 0.5f, 0.6f, 0.7f);\n\tglm::simdVec4 C1 = A1 + B1;\n\tglm::simdVec4 D1 = A1.swizzle<glm::X, glm::Z, glm::Y, glm::W>();\n\tglm::simdVec4 E1(glm::vec4(1.0f));\n\tglm::vec4 F1 = glm::vec4_cast(E1);\n\t//glm::vec4 G1(E1);\n\n\t//printf(\"A1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", A1.x, A1.y, A1.z, A1.w);\n\t//printf(\"B1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", B1.x, B1.y, B1.z, B1.w);\n\t//printf(\"C1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", C1.x, C1.y, C1.z, C1.w);\n\t//printf(\"D1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", D1.x, D1.y, D1.z, D1.w);\n\n\t__m128 value = _mm_set1_ps(0.0f);\n\t__m128 data = _mm_cmpeq_ps(value, value);\n\t__m128 add0 = _mm_add_ps(data, data);\n\n\tglm::simdVec4 GNI(add0);\n\n\treturn 0;\n}\n\n#else\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n#endif//(GLM_ARCH != GLM_ARCH_PURE)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_spline.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/gtx/spline.hpp>\n\nnamespace catmullRom\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::catmullRom(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::catmullRom(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result4 = glm::catmullRom(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nnamespace hermite\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::hermite(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::hermite(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result4 = glm::hermite(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nnamespace cubic\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::cubic(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::cubic(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result = glm::cubic(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nint main()\n{\n\tint Error(0);\n\n\tError += catmullRom::test();\n\tError += hermite::test();\n\tError += cubic::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_string_cast.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/string_cast.hpp>\n#include <limits>\n\nint test_string_cast_vector()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 A1(1, 2);\n\t\tstd::string A2 = glm::to_string(A1);\n\t\tError += A2 != std::string(\"vec2(1.000000, 2.000000)\") ? 1 : 0;\n\t\n\t\tglm::vec3 B1(1, 2, 3);\n\t\tstd::string B2 = glm::to_string(B1);\n\t\tError += B2 != std::string(\"vec3(1.000000, 2.000000, 3.000000)\") ? 1 : 0;\n\n\t\tglm::vec4 C1(1, 2, 3, 4);\n\t\tstd::string C2 = glm::to_string(C1);\n\t\tError += C2 != std::string(\"vec4(1.000000, 2.000000, 3.000000, 4.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec2 J1(1, 2);\n\t\tstd::string J2 = glm::to_string(J1);\n\t\tError += J2 != std::string(\"dvec2(1.000000, 2.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec3 K1(1, 2, 3);\n\t\tstd::string K2 = glm::to_string(K1);\n\t\tError += K2 != std::string(\"dvec3(1.000000, 2.000000, 3.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec4 L1(1, 2, 3, 4);\n\t\tstd::string L2 = glm::to_string(L1);\n\t\tError += L2 != std::string(\"dvec4(1.000000, 2.000000, 3.000000, 4.000000)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::bvec2 M1(false, true);\n\t\tstd::string M2 = glm::to_string(M1);\n\t\tError += M2 != std::string(\"bvec2(false, true)\") ? 1 : 0;\n\t\n\t\tglm::bvec3 O1(false, true, false);\n\t\tstd::string O2 = glm::to_string(O1);\n\t\tError += O2 != std::string(\"bvec3(false, true, false)\") ? 1 : 0;\n\n\t\tglm::bvec4 P1(false, true, false, true);\n\t\tstd::string P2 = glm::to_string(P1);\n\t\tError += P2 != std::string(\"bvec4(false, true, false, true)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"ivec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::ivec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"ivec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::ivec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"ivec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i8vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i8vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i8vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i8vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i8vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i8vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i16vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i16vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i16vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i16vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i16vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i16vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i64vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i64vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i64vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i64vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i64vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i64vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nint test_string_cast_matrix()\n{\n\tint Error = 0;\n\t\n\tglm::mat2x2 A1(1.000000, 2.000000, 3.000000, 4.000000);\n\tstd::string A2 = glm::to_string(A1);\n\tError += A2 != std::string(\"mat2x2((1.000000, 2.000000), (3.000000, 4.000000))\") ? 1 : 0;\n\n\treturn Error;\n}\n\nint test_string_cast_quaternion()\n{\n\tint Error = 0;\n\n\tglm::quat Q0 = glm::quat(1.0f, 2.0f, 3.0f, 4.0f);\n\tstd::string S0 = glm::to_string(Q0);\n\tError += S0 != std::string(\"quat(1.000000, {2.000000, 3.000000, 4.000000})\") ? 1 : 0;\n\n\treturn Error;\n\n}\n\nint test_string_cast_dual_quaternion()\n{\n\tint Error = 0;\n\n\tglm::dualquat Q0 = glm::dualquat(glm::quat(1.0f, 2.0f, 3.0f, 4.0f), glm::quat(5.0f, 6.0f, 7.0f, 8.0f));\n\tstd::string S0 = glm::to_string(Q0);\n\tError += S0 != std::string(\"dualquat((1.000000, {2.000000, 3.000000, 4.000000}), (5.000000, {6.000000, 7.000000, 8.000000}))\") ? 1 : 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_string_cast_vector();\n\tError += test_string_cast_matrix();\n\tError += test_string_cast_quaternion();\n\tError += test_string_cast_dual_quaternion();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_texture.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/gtx/texture.hpp>\n\nint test_levels()\n{\n\tint Error = 0;\n\n\tint const Levels = glm::levels(glm::ivec2(3, 2));\n\tError += Levels == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_levels();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_type_aligned.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/type_aligned.hpp>\n#include <cstdio>\n\nint test_decl()\n{\n\tint Error(0);\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tglm::aligned_vec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tglm::vec4 B;\n\t\t};\n\n\t\tstd::printf(\"vec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::vec3 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_vec3 B;\n\t\t};\n\n\t\tstd::printf(\"vec3 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) <= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_vec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::vec4 B;\n\t\t};\n\n\t\tstd::printf(\"vec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_dvec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::dvec4 B;\n\t\t};\n\n\t\tstd::printf(\"dvec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate<typename genType>\nvoid print(genType const& Mat0)\n{\n\tstd::printf(\"mat4(\\n\");\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[0][0]), static_cast<double>(Mat0[0][1]), static_cast<double>(Mat0[0][2]), static_cast<double>(Mat0[0][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[1][0]), static_cast<double>(Mat0[1][1]), static_cast<double>(Mat0[1][2]), static_cast<double>(Mat0[1][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[2][0]), static_cast<double>(Mat0[2][1]), static_cast<double>(Mat0[2][2]), static_cast<double>(Mat0[2][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\\n\\n\", static_cast<double>(Mat0[3][0]), static_cast<double>(Mat0[3][1]), static_cast<double>(Mat0[3][2]), static_cast<double>(Mat0[3][3]));\n}\n\nint perf_mul()\n{\n\tint Error = 0;\n\n\tglm::mat4 A(1.0f);\n\tglm::mat4 B(1.0f);\n\n\tglm::mat4 C = A * B;\n\n\tprint(C);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_decl();\n\tError += perf_mul();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_type_trait.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec4.hpp>\n#include <glm/gtx/type_trait.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\t\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_vec_swizzle.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/vec_swizzle.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_vector_angle.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/gtx/vector_angle.hpp>\n#include <limits>\n\nint test_angle()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::angle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::angle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)));\n\tError += glm::epsilonEqual(AngleB, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::angle(glm::vec4(1, 0, 0, 0), glm::normalize(glm::vec4(1, 1, 0, 0)));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientedAngle_vec2()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::orientedAngle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::orientedAngle(glm::vec2(0, 1), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleB, -glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::orientedAngle(glm::normalize(glm::vec2(1, 1)), glm::vec2(0, 1));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientedAngle_vec3()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::orientedAngle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::orientedAngle(glm::vec3(0, 1, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleB, -glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::orientedAngle(glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 1, 0), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\t\n\tError += test_angle();\n\tError += test_orientedAngle_vec2();\n\tError += test_orientedAngle_vec3();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_vector_query.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/gtx/vector_query.hpp>\n\nint test_areCollinear()\n{\n\tint Error(0);\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec3(-1), glm::vec3(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec4(-1), glm::vec4(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_areOrthogonal()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isNormalized()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNormalized(glm::vec4(1, 0, 0, 0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isNull()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNull(glm::vec4(0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_areOrthonormal()\n{\n\tint Error(0);\n\n\tbool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_areCollinear();\n\tError += test_areOrthogonal();\n\tError += test_isNormalized();\n\tError += test_isNull();\n\tError += test_areOrthonormal();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/gtx/gtx_wrap.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/wrap.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nnamespace clamp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::clamp(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::clamp(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::clamp(1.0f);\n\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::clamp(-0.5f);\n\t\tError += glm::equal(D, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::clamp(1.5f);\n\t\tError += glm::equal(E, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::clamp(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::clamp(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::clamp(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::clamp(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace clamp\n\nnamespace repeat\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::repeat(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::repeat(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::repeat(1.0f);\n\t\tError += glm::equal(C, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::repeat(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::repeat(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::repeat(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::repeat(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::repeat(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::repeat(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::repeat(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace repeat\n\nnamespace mirrorClamp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::mirrorClamp(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::mirrorClamp(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::mirrorClamp(1.1f);\n\t\tError += glm::equal(C, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::mirrorClamp(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::mirrorClamp(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::mirrorClamp(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tfloat G = glm::mirrorClamp(3.1f);\n\t\tError += glm::equal(G, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat H = glm::mirrorClamp(-3.1f);\n\t\tError += glm::equal(H, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat I = glm::mirrorClamp(-0.9f);\n\t\tError += glm::equal(I, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::mirrorClamp(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::mirrorClamp(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::mirrorClamp(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::mirrorClamp(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace mirrorClamp\n\nnamespace mirrorRepeat\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::mirrorRepeat(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::mirrorRepeat(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::mirrorRepeat(1.0f);\n\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::mirrorRepeat(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::mirrorRepeat(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::mirrorRepeat(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tfloat G = glm::mirrorRepeat(3.0f);\n\t\tError += glm::equal(G, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat H = glm::mirrorRepeat(-3.0f);\n\t\tError += glm::equal(H, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat I = glm::mirrorRepeat(-1.0f);\n\t\tError += glm::equal(I, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::mirrorRepeat(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::mirrorRepeat(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::mirrorRepeat(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::mirrorRepeat(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace mirrorRepeat\n\nint main()\n{\n\tint Error(0);\n\n\tError += clamp::test();\n\tError += repeat::test();\n\tError += mirrorClamp::test();\n\tError += mirrorRepeat::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/CMakeLists.txt",
    "content": "glmCreateTestGTC(perf_matrix_div)\nglmCreateTestGTC(perf_matrix_inverse)\nglmCreateTestGTC(perf_matrix_mul)\nglmCreateTestGTC(perf_matrix_mul_vector)\nglmCreateTestGTC(perf_matrix_transpose)\nglmCreateTestGTC(perf_vector_mul_matrix)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_matrix_div.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_div_mat(matType const& M, std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M / I[i];\n}\n\ntemplate <typename matType>\nstatic int launch_mat_div_mat(std::vector<matType>& O, matType const& Transform, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_div_mat<matType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_div_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_div_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_div_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"mat2 / mat2:\\n\");\n\tError += comp_mat2_div_mat2<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"dmat2 / dmat2:\\n\");\n\tError += comp_mat2_div_mat2<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"mat3 / mat3:\\n\");\n\tError += comp_mat3_div_mat3<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"dmat3 / dmat3:\\n\");\n\tError += comp_mat3_div_mat3<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"mat4 / mat4:\\n\");\n\tError += comp_mat4_div_mat4<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"dmat4 / dmat4:\\n\");\n\tError += comp_mat4_div_mat4<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_matrix_inverse.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/matrix.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_inverse(std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = glm::inverse(I[i]);\n}\n\ntemplate <typename matType>\nstatic int launch_mat_inverse(std::vector<matType>& O, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_inverse<matType>(I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"glm::inverse(mat2):\\n\");\n\tError += comp_mat2_inverse<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat2):\\n\");\n\tError += comp_mat2_inverse<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"glm::inverse(mat3):\\n\");\n\tError += comp_mat3_inverse<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat3):\\n\");\n\tError += comp_mat3_inverse<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"glm::inverse(mat4):\\n\");\n\tError += comp_mat4_inverse<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat4):\\n\");\n\tError += comp_mat4_inverse<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_matrix_mul.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_mul_mat(matType const& M, std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M * I[i];\n}\n\ntemplate <typename matType>\nstatic int launch_mat_mul_mat(std::vector<matType>& O, matType const& Transform, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_mul_mat<matType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_mul_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_mul_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_mul_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"mat2 * mat2:\\n\");\n\tError += comp_mat2_mul_mat2<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"dmat2 * dmat2:\\n\");\n\tError += comp_mat2_mul_mat2<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"mat3 * mat3:\\n\");\n\tError += comp_mat3_mul_mat3<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"dmat3 * dmat3:\\n\");\n\tError += comp_mat3_mul_mat3<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"mat4 * mat4:\\n\");\n\tError += comp_mat4_mul_mat4<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"dmat4 * dmat4:\\n\");\n\tError += comp_mat4_mul_mat4<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_matrix_mul_vector.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType, typename vecType>\nstatic void test_mat_mul_vec(matType const& M, std::vector<vecType> const& I, std::vector<vecType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M * I[i];\n}\n\ntemplate <typename matType, typename vecType>\nstatic int launch_mat_mul_vec(std::vector<vecType>& O, matType const& Transform, vecType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<vecType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_mul_vec<matType, vecType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat2_mul_vec2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedVecType const Scale(0.01, 0.02);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = packedVecType(SIMD[i]);\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat3_mul_vec3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedVecType const Scale(0.01, 0.02, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat4_mul_vec4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedVecType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\t\n\tint Error = 0;\n\n\tstd::printf(\"mat2 * vec2:\\n\");\n\tError += comp_mat2_mul_vec2<glm::mat2, glm::vec2, glm::aligned_mat2, glm::aligned_vec2>(Samples);\n\t\n\tstd::printf(\"dmat2 * dvec2:\\n\");\n\tError += comp_mat2_mul_vec2<glm::dmat2, glm::dvec2,glm::aligned_dmat2, glm::aligned_dvec2>(Samples);\n\n\tstd::printf(\"mat3 * vec3:\\n\");\n\tError += comp_mat3_mul_vec3<glm::mat3, glm::vec3, glm::aligned_mat3, glm::aligned_vec3>(Samples);\n\t\n\tstd::printf(\"dmat3 * dvec3:\\n\");\n\tError += comp_mat3_mul_vec3<glm::dmat3, glm::dvec3, glm::aligned_dmat3, glm::aligned_dvec3>(Samples);\n\n\tstd::printf(\"mat4 * vec4:\\n\");\n\tError += comp_mat4_mul_vec4<glm::mat4, glm::vec4, glm::aligned_mat4, glm::aligned_vec4>(Samples);\n\t\n\tstd::printf(\"dmat4 * dvec4:\\n\");\n\tError += comp_mat4_mul_vec4<glm::dmat4, glm::dvec4, glm::aligned_dmat4, glm::aligned_dvec4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_matrix_transpose.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/matrix.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_transpose(std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = glm::transpose(I[i]);\n}\n\ntemplate <typename matType>\nstatic int launch_mat_transpose(std::vector<matType>& O, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_transpose<matType>(I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"glm::transpose(mat2):\\n\");\n\tError += comp_mat2_transpose<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat2):\\n\");\n\tError += comp_mat2_transpose<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"glm::transpose(mat3):\\n\");\n\tError += comp_mat3_transpose<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat3):\\n\");\n\tError += comp_mat3_transpose<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"glm::transpose(mat4):\\n\");\n\tError += comp_mat4_transpose<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat4):\\n\");\n\tError += comp_mat4_transpose<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/test/perf/perf_vector_mul_matrix.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType, typename vecType>\nstatic void test_vec_mul_mat(matType const& M, std::vector<vecType> const& I, std::vector<vecType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = I[i] * M;\n}\n\ntemplate <typename matType, typename vecType>\nstatic int launch_vec_mul_mat(std::vector<vecType>& O, matType const& Transform, vecType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<vecType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_vec_mul_mat<matType, vecType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec2_mul_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedVecType const Scale(0.01, 0.02);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = packedVecType(SIMD[i]);\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec3_mul_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedVecType const Scale(0.01, 0.02, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec4_mul_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedVecType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\t\n\tint Error = 0;\n\n\tstd::printf(\"vec2 * mat2:\\n\");\n\tError += comp_vec2_mul_mat2<glm::mat2, glm::vec2, glm::aligned_mat2, glm::aligned_vec2>(Samples);\n\t\n\tstd::printf(\"dvec2 * dmat2:\\n\");\n\tError += comp_vec2_mul_mat2<glm::dmat2, glm::dvec2,glm::aligned_dmat2, glm::aligned_dvec2>(Samples);\n\n\tstd::printf(\"vec3 * mat3:\\n\");\n\tError += comp_vec3_mul_mat3<glm::mat3, glm::vec3, glm::aligned_mat3, glm::aligned_vec3>(Samples);\n\t\n\tstd::printf(\"dvec3 * dmat3:\\n\");\n\tError += comp_vec3_mul_mat3<glm::dmat3, glm::dvec3, glm::aligned_dmat3, glm::aligned_dvec3>(Samples);\n\n\tstd::printf(\"vec4 * mat4:\\n\");\n\tError += comp_vec4_mul_mat4<glm::mat4, glm::vec4, glm::aligned_mat4, glm::aligned_vec4>(Samples);\n\t\n\tstd::printf(\"dvec4 * dmat4:\\n\");\n\tError += comp_vec4_mul_mat4<glm::dmat4, glm::dvec4, glm::aligned_dmat4, glm::aligned_dvec4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/util/autoexp.txt",
    "content": "[Visualizer]\n\nglm::detail::tvec2<*>{\n    preview (\n        #(#($c.x,$c.y))\n    )\n    children (\n            #([x]: $c.x,[y]: $c.y)\n    )\n}\n\nglm::detail::tvec3<*>{\n    preview (\n        #($e.x,$e.y,$e.z)\n    )\n    children (\n            #([x]: $e.x,[y]: $e.y,[z]: $e.z)\n    )\n}\n\nglm::detail::tvec4<*>{\n    preview (\n        #($c.x,$c.y,$c.z,$c.w)\n    )\n    children (\n            #([x]: $e.x,[y]: $e.y,[z]: $e.z, #([w]: $e.w))\n    )\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/glm/util/glm.natvis",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\r\n<!-- \r\n  GLM debugger visualizers for Visual Studio\r\n  \r\n  Makes debugging code using GLM easier by making data more easily accessible\r\n  from the debugger watch windows. \r\n  \r\n  For example, a variable declared like this: \r\n  \r\n  glm::vec4 v = glm::vec4(1, 2, 3, 4);\r\n  \r\n  Will show up like this in the default debugger windows:\r\n  \r\n   Name    Value\r\n  ..............................................................\r\n    v      {x=1.000000 r=1.000000 s=1.000000 y=2.000000 ...}\r\n  \r\n  But if you use this file, it will show up like this:\r\n  \r\n   Name   Value\r\n  ..................\r\n    v     [1 2 3 4]\r\n  \r\n  === How to Use ===\r\n  \r\n  Copy this file to the project directory of each project using GLM, or just copy it to\r\n  \r\n  %USERPROFILE%\\Douments\\Visual Studio 2019\\Visualizers\\ (replace '2019' when necessary)\r\n  or\r\n  %VSINSTALLDIR%\\Common7\\Packages\\Debugger\\Visualizers\\ (requires admin access)\r\n  \r\n  if you want to use this from every project.\r\n  See also https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects \r\n-->\r\n\r\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010\">\r\n\r\n  <Type Name=\"glm::vec&lt;1,*,*&gt;\">\r\n    <DisplayString>[{x,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x,g</Item>\r\n    </Expand>\r\n  </Type>\r\n  \r\n  <Type Name=\"glm::vec&lt;2,*,*&gt;\">\r\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;3,*,*&gt;\">\r\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;4,*,*&gt;\">\r\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;1,bool,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{(int)x}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;2,bool,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{(int)x} {(int)y}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x</Item>\r\n      <Item Name=\"y\">y</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;3,bool,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x</Item>\r\n      <Item Name=\"y\">y</Item>\r\n      <Item Name=\"z\">z</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;4,bool,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g} {(int)w,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x</Item>\r\n      <Item Name=\"y\">y</Item>\r\n      <Item Name=\"z\">z</Item>\r\n      <Item Name=\"w\">w</Item>\r\n    </Expand>\r\n  </Type>\r\n  \r\n  <Type Name=\"glm::vec&lt;2,float,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(float *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0f,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;3,float,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(float *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0f,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Synthetic Name=\"[rgba]\">\r\n        <DisplayString>\r\n          <!-- hex RGBA color - alpha is assumed to be 255 -->\r\n          #{\r\n          (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |\r\n          (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |\r\n          (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) | 0xFF,Xb\r\n          }\r\n        </DisplayString>\r\n      </Synthetic>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;4,float,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(float *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0f,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Synthetic Name=\"[rgba]\">\r\n        <DisplayString>\r\n          <!-- hex RGBA color -->\r\n          #{\r\n          (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |\r\n          (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |\r\n          (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) |\r\n          (unsigned((w&lt;0?0:(w&gt;1?1:w))*255.5f) &lt;&lt; 0),Xb\r\n          }\r\n        </DisplayString>\r\n      </Synthetic>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;2,double,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(double *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;3,double,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(double *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::vec&lt;4,double,*&gt;\" Priority=\"High\">\r\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(double *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::qua&lt;*,*&gt;\">\r\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::qua&lt;float,*&gt;\" Priority=\"High\">\r\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(float *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0f,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::qua&lt;double,*&gt;\" Priority=\"High\">\r\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <CustomListItems MaxItemsPerView=\"1\">\r\n        <!-- calculate length using fast inverse sqrt -->\r\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\r\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\r\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\r\n        <If Condition=\"k != 0\">\r\n          <Exec>k = *(double *)&amp;i</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\r\n          <Item Name=\"[len]\">1/k,g</Item>\r\n        </If>\r\n        <If Condition=\"k == 0\">\r\n          <Item Name=\"[len]\">0.0,g</Item>\r\n        </If>\r\n      </CustomListItems>\r\n      <Item Name=\"x\">x,g</Item>\r\n      <Item Name=\"y\">y,g</Item>\r\n      <Item Name=\"z\">z,g</Item>\r\n      <Item Name=\"w\">w,g</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;2,2,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;2,3,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;2,4,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 4\">\r\n        <DisplayString>[{value[0].w,g} {value[1].w,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;3,2*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;3,3,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;3,4,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 4\">\r\n        <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat4x2&lt;4,2,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n          <Item Name=\"col 4\">value[3]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat4x3&lt;4,3,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n          <Item Name=\"col 4\">value[3]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::mat&lt;4,4,*,*&gt;\">\r\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <!-- display matrix in row major order - it makes more sense -->\r\n      <Synthetic Name=\"row 1\">\r\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 2\">\r\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 3\">\r\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"row 4\">\r\n        <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g} {value[3].w,g}]</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"columns\">\r\n        <Expand>\r\n          <Item Name=\"col 1\">value[0]</Item>\r\n          <Item Name=\"col 2\">value[1]</Item>\r\n          <Item Name=\"col 3\">value[2]</Item>\r\n          <Item Name=\"col 4\">value[3]</Item>\r\n        </Expand>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"glm::tdualquat&lt;*&gt;\">\r\n    <DisplayString>[r: {real}] [d: {dual}]</DisplayString>\r\n    <Expand HideRawView=\"1\">\r\n      <Item Name=\"real\">real</Item>\r\n      <Item Name=\"dual\">dual</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n</AutoVisualizer>"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/diff-gaussian-rasterization/third_party/stbi_image_write.h",
    "content": "/* stb_image_write - v1.16 - public domain - http://nothings.org/stb\n   writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015\n                                     no warranty implied; use at your own risk\n\n   Before #including,\n\n       #define STB_IMAGE_WRITE_IMPLEMENTATION\n\n   in the file that you want to have the implementation.\n\n   Will probably not work correctly with strict-aliasing optimizations.\n\nABOUT:\n\n   This header file is a library for writing images to C stdio or a callback.\n\n   The PNG output is not optimal; it is 20-50% larger than the file\n   written by a decent optimizing implementation; though providing a custom\n   zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that.\n   This library is designed for source code compactness and simplicity,\n   not optimal image file size or run-time performance.\n\nBUILDING:\n\n   You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h.\n   You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace\n   malloc,realloc,free.\n   You can #define STBIW_MEMMOVE() to replace memmove()\n   You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function\n   for PNG compression (instead of the builtin one), it must have the following signature:\n   unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality);\n   The returned data will be freed with STBIW_FREE() (free() by default),\n   so it must be heap allocated with STBIW_MALLOC() (malloc() by default),\n\nUNICODE:\n\n   If compiling for Windows and you wish to use Unicode filenames, compile\n   with\n       #define STBIW_WINDOWS_UTF8\n   and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert\n   Windows wchar_t filenames to utf8.\n\nUSAGE:\n\n   There are five functions, one for each image file format:\n\n     int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);\n     int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);\n     int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);\n     int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality);\n     int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);\n\n     void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically\n\n   There are also five equivalent functions that use an arbitrary write function. You are\n   expected to open/close your file-equivalent before and after calling these:\n\n     int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);\n     int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\n     int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\n     int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);\n     int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality);\n\n   where the callback is:\n      void stbi_write_func(void *context, void *data, int size);\n\n   You can configure it with these global variables:\n      int stbi_write_tga_with_rle;             // defaults to true; set to 0 to disable RLE\n      int stbi_write_png_compression_level;    // defaults to 8; set to higher for more compression\n      int stbi_write_force_png_filter;         // defaults to -1; set to 0..5 to force a filter mode\n\n\n   You can define STBI_WRITE_NO_STDIO to disable the file variant of these\n   functions, so the library will not use stdio.h at all. However, this will\n   also disable HDR writing, because it requires stdio for formatted output.\n\n   Each function returns 0 on failure and non-0 on success.\n\n   The functions create an image file defined by the parameters. The image\n   is a rectangle of pixels stored from left-to-right, top-to-bottom.\n   Each pixel contains 'comp' channels of data stored interleaved with 8-bits\n   per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is\n   monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.\n   The *data pointer points to the first byte of the top-left-most pixel.\n   For PNG, \"stride_in_bytes\" is the distance in bytes from the first byte of\n   a row of pixels to the first byte of the next row of pixels.\n\n   PNG creates output files with the same number of components as the input.\n   The BMP format expands Y to RGB in the file format and does not\n   output alpha.\n\n   PNG supports writing rectangles of data even when the bytes storing rows of\n   data are not consecutive in memory (e.g. sub-rectangles of a larger image),\n   by supplying the stride between the beginning of adjacent rows. The other\n   formats do not. (Thus you cannot write a native-format BMP through the BMP\n   writer, both because it is in BGR order and because it may have padding\n   at the end of the line.)\n\n   PNG allows you to set the deflate compression level by setting the global\n   variable 'stbi_write_png_compression_level' (it defaults to 8).\n\n   HDR expects linear float data. Since the format is always 32-bit rgb(e)\n   data, alpha (if provided) is discarded, and for monochrome data it is\n   replicated across all three channels.\n\n   TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed\n   data, set the global variable 'stbi_write_tga_with_rle' to 0.\n\n   JPEG does ignore alpha channels in input data; quality is between 1 and 100.\n   Higher quality looks better but results in a bigger image.\n   JPEG baseline (no JPEG progressive).\n\nCREDITS:\n\n\n   Sean Barrett           -    PNG/BMP/TGA\n   Baldur Karlsson        -    HDR\n   Jean-Sebastien Guay    -    TGA monochrome\n   Tim Kelsey             -    misc enhancements\n   Alan Hickman           -    TGA RLE\n   Emmanuel Julien        -    initial file IO callback implementation\n   Jon Olick              -    original jo_jpeg.cpp code\n   Daniel Gibson          -    integrate JPEG, allow external zlib\n   Aarni Koskela          -    allow choosing PNG filter\n\n   bugfixes:\n      github:Chribba\n      Guillaume Chereau\n      github:jry2\n      github:romigrou\n      Sergio Gonzalez\n      Jonas Karlsson\n      Filip Wasil\n      Thatcher Ulrich\n      github:poppolopoppo\n      Patrick Boettcher\n      github:xeekworx\n      Cap Petschulat\n      Simon Rodriguez\n      Ivan Tikhonov\n      github:ignotion\n      Adam Schackart\n      Andrew Kensler\n\nLICENSE\n\n  See end of file for license information.\n\n*/\n\n#ifndef INCLUDE_STB_IMAGE_WRITE_H\n#define INCLUDE_STB_IMAGE_WRITE_H\n\n#include <stdlib.h>\n\n// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline'\n#ifndef STBIWDEF\n#ifdef STB_IMAGE_WRITE_STATIC\n#define STBIWDEF  static\n#else\n#ifdef __cplusplus\n#define STBIWDEF  extern \"C\"\n#else\n#define STBIWDEF  extern\n#endif\n#endif\n#endif\n\n#ifndef STB_IMAGE_WRITE_STATIC  // C++ forbids static forward declarations\nSTBIWDEF int stbi_write_tga_with_rle;\nSTBIWDEF int stbi_write_png_compression_level;\nSTBIWDEF int stbi_write_force_png_filter;\n#endif\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void  *data, int stride_in_bytes);\nSTBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);\nSTBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void  *data, int quality);\n\n#ifdef STBIW_WINDOWS_UTF8\nSTBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input);\n#endif\n#endif\n\ntypedef void stbi_write_func(void *context, void *data, int size);\n\nSTBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);\nSTBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);\nSTBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void  *data, int quality);\n\nSTBIWDEF void stbi_flip_vertically_on_write(int flip_boolean);\n\n#endif//INCLUDE_STB_IMAGE_WRITE_H\n\n#ifdef STB_IMAGE_WRITE_IMPLEMENTATION\n\n#ifdef _WIN32\n   #ifndef _CRT_SECURE_NO_WARNINGS\n   #define _CRT_SECURE_NO_WARNINGS\n   #endif\n   #ifndef _CRT_NONSTDC_NO_DEPRECATE\n   #define _CRT_NONSTDC_NO_DEPRECATE\n   #endif\n#endif\n\n#ifndef STBI_WRITE_NO_STDIO\n#include <stdio.h>\n#endif // STBI_WRITE_NO_STDIO\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <math.h>\n\n#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED))\n// ok\n#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED)\n// ok\n#else\n#error \"Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED).\"\n#endif\n\n#ifndef STBIW_MALLOC\n#define STBIW_MALLOC(sz)        malloc(sz)\n#define STBIW_REALLOC(p,newsz)  realloc(p,newsz)\n#define STBIW_FREE(p)           free(p)\n#endif\n\n#ifndef STBIW_REALLOC_SIZED\n#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz)\n#endif\n\n\n#ifndef STBIW_MEMMOVE\n#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz)\n#endif\n\n\n#ifndef STBIW_ASSERT\n#include <assert.h>\n#define STBIW_ASSERT(x) assert(x)\n#endif\n\n#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff)\n\n#ifdef STB_IMAGE_WRITE_STATIC\nstatic int stbi_write_png_compression_level = 8;\nstatic int stbi_write_tga_with_rle = 1;\nstatic int stbi_write_force_png_filter = -1;\n#else\nint stbi_write_png_compression_level = 8;\nint stbi_write_tga_with_rle = 1;\nint stbi_write_force_png_filter = -1;\n#endif\n\nstatic int stbi__flip_vertically_on_write = 0;\n\nSTBIWDEF void stbi_flip_vertically_on_write(int flag)\n{\n   stbi__flip_vertically_on_write = flag;\n}\n\ntypedef struct\n{\n   stbi_write_func *func;\n   void *context;\n   unsigned char buffer[64];\n   int buf_used;\n} stbi__write_context;\n\n// initialize a callback-based context\nstatic void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context)\n{\n   s->func    = c;\n   s->context = context;\n}\n\n#ifndef STBI_WRITE_NO_STDIO\n\nstatic void stbi__stdio_write(void *context, void *data, int size)\n{\n   fwrite(data,1,size,(FILE*) context);\n}\n\n#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8)\n#ifdef __cplusplus\n#define STBIW_EXTERN extern \"C\"\n#else\n#define STBIW_EXTERN extern\n#endif\nSTBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide);\nSTBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);\n\nSTBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input)\n{\n   return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL);\n}\n#endif\n\nstatic FILE *stbiw__fopen(char const *filename, char const *mode)\n{\n   FILE *f;\n#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8)\n   wchar_t wMode[64];\n   wchar_t wFilename[1024];\n   if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename)))\n      return 0;\n\n   if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode)))\n      return 0;\n\n#if defined(_MSC_VER) && _MSC_VER >= 1400\n   if (0 != _wfopen_s(&f, wFilename, wMode))\n      f = 0;\n#else\n   f = _wfopen(wFilename, wMode);\n#endif\n\n#elif defined(_MSC_VER) && _MSC_VER >= 1400\n   if (0 != fopen_s(&f, filename, mode))\n      f=0;\n#else\n   f = fopen(filename, mode);\n#endif\n   return f;\n}\n\nstatic int stbi__start_write_file(stbi__write_context *s, const char *filename)\n{\n   FILE *f = stbiw__fopen(filename, \"wb\");\n   stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f);\n   return f != NULL;\n}\n\nstatic void stbi__end_write_file(stbi__write_context *s)\n{\n   fclose((FILE *)s->context);\n}\n\n#endif // !STBI_WRITE_NO_STDIO\n\ntypedef unsigned int stbiw_uint32;\ntypedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1];\n\nstatic void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v)\n{\n   while (*fmt) {\n      switch (*fmt++) {\n         case ' ': break;\n         case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int));\n                     s->func(s->context,&x,1);\n                     break; }\n         case '2': { int x = va_arg(v,int);\n                     unsigned char b[2];\n                     b[0] = STBIW_UCHAR(x);\n                     b[1] = STBIW_UCHAR(x>>8);\n                     s->func(s->context,b,2);\n                     break; }\n         case '4': { stbiw_uint32 x = va_arg(v,int);\n                     unsigned char b[4];\n                     b[0]=STBIW_UCHAR(x);\n                     b[1]=STBIW_UCHAR(x>>8);\n                     b[2]=STBIW_UCHAR(x>>16);\n                     b[3]=STBIW_UCHAR(x>>24);\n                     s->func(s->context,b,4);\n                     break; }\n         default:\n            STBIW_ASSERT(0);\n            return;\n      }\n   }\n}\n\nstatic void stbiw__writef(stbi__write_context *s, const char *fmt, ...)\n{\n   va_list v;\n   va_start(v, fmt);\n   stbiw__writefv(s, fmt, v);\n   va_end(v);\n}\n\nstatic void stbiw__write_flush(stbi__write_context *s)\n{\n   if (s->buf_used) {\n      s->func(s->context, &s->buffer, s->buf_used);\n      s->buf_used = 0;\n   }\n}\n\nstatic void stbiw__putc(stbi__write_context *s, unsigned char c)\n{\n   s->func(s->context, &c, 1);\n}\n\nstatic void stbiw__write1(stbi__write_context *s, unsigned char a)\n{\n   if ((size_t)s->buf_used + 1 > sizeof(s->buffer))\n      stbiw__write_flush(s);\n   s->buffer[s->buf_used++] = a;\n}\n\nstatic void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c)\n{\n   int n;\n   if ((size_t)s->buf_used + 3 > sizeof(s->buffer))\n      stbiw__write_flush(s);\n   n = s->buf_used;\n   s->buf_used = n+3;\n   s->buffer[n+0] = a;\n   s->buffer[n+1] = b;\n   s->buffer[n+2] = c;\n}\n\nstatic void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d)\n{\n   unsigned char bg[3] = { 255, 0, 255}, px[3];\n   int k;\n\n   if (write_alpha < 0)\n      stbiw__write1(s, d[comp - 1]);\n\n   switch (comp) {\n      case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case\n      case 1:\n         if (expand_mono)\n            stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp\n         else\n            stbiw__write1(s, d[0]);  // monochrome TGA\n         break;\n      case 4:\n         if (!write_alpha) {\n            // composite against pink background\n            for (k = 0; k < 3; ++k)\n               px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255;\n            stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]);\n            break;\n         }\n         /* FALLTHROUGH */\n      case 3:\n         stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]);\n         break;\n   }\n   if (write_alpha > 0)\n      stbiw__write1(s, d[comp - 1]);\n}\n\nstatic void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono)\n{\n   stbiw_uint32 zero = 0;\n   int i,j, j_end;\n\n   if (y <= 0)\n      return;\n\n   if (stbi__flip_vertically_on_write)\n      vdir *= -1;\n\n   if (vdir < 0) {\n      j_end = -1; j = y-1;\n   } else {\n      j_end =  y; j = 0;\n   }\n\n   for (; j != j_end; j += vdir) {\n      for (i=0; i < x; ++i) {\n         unsigned char *d = (unsigned char *) data + (j*x+i)*comp;\n         stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d);\n      }\n      stbiw__write_flush(s);\n      s->func(s->context, &zero, scanline_pad);\n   }\n}\n\nstatic int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...)\n{\n   if (y < 0 || x < 0) {\n      return 0;\n   } else {\n      va_list v;\n      va_start(v, fmt);\n      stbiw__writefv(s, fmt, v);\n      va_end(v);\n      stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono);\n      return 1;\n   }\n}\n\nstatic int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data)\n{\n   if (comp != 4) {\n      // write RGB bitmap\n      int pad = (-x*3) & 3;\n      return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad,\n              \"11 4 22 4\" \"4 44 22 444444\",\n              'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40,  // file header\n               40, x,y, 1,24, 0,0,0,0,0,0);             // bitmap header\n   } else {\n      // RGBA bitmaps need a v4 header\n      // use BI_BITFIELDS mode with 32bpp and alpha mask\n      // (straight BI_RGB with alpha mask doesn't work in most readers)\n      return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0,\n         \"11 4 22 4\" \"4 44 22 444444 4444 4 444 444 444 444\",\n         'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header\n         108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header\n   }\n}\n\nSTBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_bmp_core(&s, x, y, comp, data);\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_bmp_core(&s, x, y, comp, data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif //!STBI_WRITE_NO_STDIO\n\nstatic int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data)\n{\n   int has_alpha = (comp == 2 || comp == 4);\n   int colorbytes = has_alpha ? comp-1 : comp;\n   int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3\n\n   if (y < 0 || x < 0)\n      return 0;\n\n   if (!stbi_write_tga_with_rle) {\n      return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0,\n         \"111 221 2222 11\", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8);\n   } else {\n      int i,j,k;\n      int jend, jdir;\n\n      stbiw__writef(s, \"111 221 2222 11\", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8);\n\n      if (stbi__flip_vertically_on_write) {\n         j = 0;\n         jend = y;\n         jdir = 1;\n      } else {\n         j = y-1;\n         jend = -1;\n         jdir = -1;\n      }\n      for (; j != jend; j += jdir) {\n         unsigned char *row = (unsigned char *) data + j * x * comp;\n         int len;\n\n         for (i = 0; i < x; i += len) {\n            unsigned char *begin = row + i * comp;\n            int diff = 1;\n            len = 1;\n\n            if (i < x - 1) {\n               ++len;\n               diff = memcmp(begin, row + (i + 1) * comp, comp);\n               if (diff) {\n                  const unsigned char *prev = begin;\n                  for (k = i + 2; k < x && len < 128; ++k) {\n                     if (memcmp(prev, row + k * comp, comp)) {\n                        prev += comp;\n                        ++len;\n                     } else {\n                        --len;\n                        break;\n                     }\n                  }\n               } else {\n                  for (k = i + 2; k < x && len < 128; ++k) {\n                     if (!memcmp(begin, row + k * comp, comp)) {\n                        ++len;\n                     } else {\n                        break;\n                     }\n                  }\n               }\n            }\n\n            if (diff) {\n               unsigned char header = STBIW_UCHAR(len - 1);\n               stbiw__write1(s, header);\n               for (k = 0; k < len; ++k) {\n                  stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp);\n               }\n            } else {\n               unsigned char header = STBIW_UCHAR(len - 129);\n               stbiw__write1(s, header);\n               stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin);\n            }\n         }\n      }\n      stbiw__write_flush(s);\n   }\n   return 1;\n}\n\nSTBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_tga_core(&s, x, y, comp, (void *) data);\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_tga_core(&s, x, y, comp, (void *) data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif\n\n// *************************************************************************************************\n// Radiance RGBE HDR writer\n// by Baldur Karlsson\n\n#define stbiw__max(a, b)  ((a) > (b) ? (a) : (b))\n\n#ifndef STBI_WRITE_NO_STDIO\n\nstatic void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear)\n{\n   int exponent;\n   float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2]));\n\n   if (maxcomp < 1e-32f) {\n      rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0;\n   } else {\n      float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp;\n\n      rgbe[0] = (unsigned char)(linear[0] * normalize);\n      rgbe[1] = (unsigned char)(linear[1] * normalize);\n      rgbe[2] = (unsigned char)(linear[2] * normalize);\n      rgbe[3] = (unsigned char)(exponent + 128);\n   }\n}\n\nstatic void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte)\n{\n   unsigned char lengthbyte = STBIW_UCHAR(length+128);\n   STBIW_ASSERT(length+128 <= 255);\n   s->func(s->context, &lengthbyte, 1);\n   s->func(s->context, &databyte, 1);\n}\n\nstatic void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data)\n{\n   unsigned char lengthbyte = STBIW_UCHAR(length);\n   STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code\n   s->func(s->context, &lengthbyte, 1);\n   s->func(s->context, data, length);\n}\n\nstatic void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline)\n{\n   unsigned char scanlineheader[4] = { 2, 2, 0, 0 };\n   unsigned char rgbe[4];\n   float linear[3];\n   int x;\n\n   scanlineheader[2] = (width&0xff00)>>8;\n   scanlineheader[3] = (width&0x00ff);\n\n   /* skip RLE for images too small or large */\n   if (width < 8 || width >= 32768) {\n      for (x=0; x < width; x++) {\n         switch (ncomp) {\n            case 4: /* fallthrough */\n            case 3: linear[2] = scanline[x*ncomp + 2];\n                    linear[1] = scanline[x*ncomp + 1];\n                    linear[0] = scanline[x*ncomp + 0];\n                    break;\n            default:\n                    linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];\n                    break;\n         }\n         stbiw__linear_to_rgbe(rgbe, linear);\n         s->func(s->context, rgbe, 4);\n      }\n   } else {\n      int c,r;\n      /* encode into scratch buffer */\n      for (x=0; x < width; x++) {\n         switch(ncomp) {\n            case 4: /* fallthrough */\n            case 3: linear[2] = scanline[x*ncomp + 2];\n                    linear[1] = scanline[x*ncomp + 1];\n                    linear[0] = scanline[x*ncomp + 0];\n                    break;\n            default:\n                    linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];\n                    break;\n         }\n         stbiw__linear_to_rgbe(rgbe, linear);\n         scratch[x + width*0] = rgbe[0];\n         scratch[x + width*1] = rgbe[1];\n         scratch[x + width*2] = rgbe[2];\n         scratch[x + width*3] = rgbe[3];\n      }\n\n      s->func(s->context, scanlineheader, 4);\n\n      /* RLE each component separately */\n      for (c=0; c < 4; c++) {\n         unsigned char *comp = &scratch[width*c];\n\n         x = 0;\n         while (x < width) {\n            // find first run\n            r = x;\n            while (r+2 < width) {\n               if (comp[r] == comp[r+1] && comp[r] == comp[r+2])\n                  break;\n               ++r;\n            }\n            if (r+2 >= width)\n               r = width;\n            // dump up to first run\n            while (x < r) {\n               int len = r-x;\n               if (len > 128) len = 128;\n               stbiw__write_dump_data(s, len, &comp[x]);\n               x += len;\n            }\n            // if there's a run, output it\n            if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd\n               // find next byte after run\n               while (r < width && comp[r] == comp[x])\n                  ++r;\n               // output run up to r\n               while (x < r) {\n                  int len = r-x;\n                  if (len > 127) len = 127;\n                  stbiw__write_run_data(s, len, comp[x]);\n                  x += len;\n               }\n            }\n         }\n      }\n   }\n}\n\nstatic int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data)\n{\n   if (y <= 0 || x <= 0 || data == NULL)\n      return 0;\n   else {\n      // Each component is stored separately. Allocate scratch space for full output scanline.\n      unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4);\n      int i, len;\n      char buffer[128];\n      char header[] = \"#?RADIANCE\\n# Written by stb_image_write.h\\nFORMAT=32-bit_rle_rgbe\\n\";\n      s->func(s->context, header, sizeof(header)-1);\n\n#ifdef __STDC_LIB_EXT1__\n      len = sprintf_s(buffer, sizeof(buffer), \"EXPOSURE=          1.0000000000000\\n\\n-Y %d +X %d\\n\", y, x);\n#else\n      len = sprintf(buffer, \"EXPOSURE=          1.0000000000000\\n\\n-Y %d +X %d\\n\", y, x);\n#endif\n      s->func(s->context, buffer, len);\n\n      for(i=0; i < y; i++)\n         stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i));\n      STBIW_FREE(scratch);\n      return 1;\n   }\n}\n\nSTBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_hdr_core(&s, x, y, comp, (float *) data);\n}\n\nSTBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif // STBI_WRITE_NO_STDIO\n\n\n//////////////////////////////////////////////////////////////////////////////\n//\n// PNG writer\n//\n\n#ifndef STBIW_ZLIB_COMPRESS\n// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size()\n#define stbiw__sbraw(a) ((int *) (void *) (a) - 2)\n#define stbiw__sbm(a)   stbiw__sbraw(a)[0]\n#define stbiw__sbn(a)   stbiw__sbraw(a)[1]\n\n#define stbiw__sbneedgrow(a,n)  ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a))\n#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0)\n#define stbiw__sbgrow(a,n)  stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a)))\n\n#define stbiw__sbpush(a, v)      (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v))\n#define stbiw__sbcount(a)        ((a) ? stbiw__sbn(a) : 0)\n#define stbiw__sbfree(a)         ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0)\n\nstatic void *stbiw__sbgrowf(void **arr, int increment, int itemsize)\n{\n   int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1;\n   void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2);\n   STBIW_ASSERT(p);\n   if (p) {\n      if (!*arr) ((int *) p)[1] = 0;\n      *arr = (void *) ((int *) p + 2);\n      stbiw__sbm(*arr) = m;\n   }\n   return *arr;\n}\n\nstatic unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount)\n{\n   while (*bitcount >= 8) {\n      stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer));\n      *bitbuffer >>= 8;\n      *bitcount -= 8;\n   }\n   return data;\n}\n\nstatic int stbiw__zlib_bitrev(int code, int codebits)\n{\n   int res=0;\n   while (codebits--) {\n      res = (res << 1) | (code & 1);\n      code >>= 1;\n   }\n   return res;\n}\n\nstatic unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit)\n{\n   int i;\n   for (i=0; i < limit && i < 258; ++i)\n      if (a[i] != b[i]) break;\n   return i;\n}\n\nstatic unsigned int stbiw__zhash(unsigned char *data)\n{\n   stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16);\n   hash ^= hash << 3;\n   hash += hash >> 5;\n   hash ^= hash << 4;\n   hash += hash >> 17;\n   hash ^= hash << 25;\n   hash += hash >> 6;\n   return hash;\n}\n\n#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount))\n#define stbiw__zlib_add(code,codebits) \\\n      (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush())\n#define stbiw__zlib_huffa(b,c)  stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c)\n// default huffman tables\n#define stbiw__zlib_huff1(n)  stbiw__zlib_huffa(0x30 + (n), 8)\n#define stbiw__zlib_huff2(n)  stbiw__zlib_huffa(0x190 + (n)-144, 9)\n#define stbiw__zlib_huff3(n)  stbiw__zlib_huffa(0 + (n)-256,7)\n#define stbiw__zlib_huff4(n)  stbiw__zlib_huffa(0xc0 + (n)-280,8)\n#define stbiw__zlib_huff(n)  ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n))\n#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n))\n\n#define stbiw__ZHASH   16384\n\n#endif // STBIW_ZLIB_COMPRESS\n\nSTBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality)\n{\n#ifdef STBIW_ZLIB_COMPRESS\n   // user provided a zlib compress implementation, use that\n   return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality);\n#else // use builtin\n   static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 };\n   static unsigned char  lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,  4,  5,  5,  5,  5,  0 };\n   static unsigned short distc[]   = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 };\n   static unsigned char  disteb[]  = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 };\n   unsigned int bitbuf=0;\n   int i,j, bitcount=0;\n   unsigned char *out = NULL;\n   unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**));\n   if (hash_table == NULL)\n      return NULL;\n   if (quality < 5) quality = 5;\n\n   stbiw__sbpush(out, 0x78);   // DEFLATE 32K window\n   stbiw__sbpush(out, 0x5e);   // FLEVEL = 1\n   stbiw__zlib_add(1,1);  // BFINAL = 1\n   stbiw__zlib_add(1,2);  // BTYPE = 1 -- fixed huffman\n\n   for (i=0; i < stbiw__ZHASH; ++i)\n      hash_table[i] = NULL;\n\n   i=0;\n   while (i < data_len-3) {\n      // hash next 3 bytes of data to be compressed\n      int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3;\n      unsigned char *bestloc = 0;\n      unsigned char **hlist = hash_table[h];\n      int n = stbiw__sbcount(hlist);\n      for (j=0; j < n; ++j) {\n         if (hlist[j]-data > i-32768) { // if entry lies within window\n            int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i);\n            if (d >= best) { best=d; bestloc=hlist[j]; }\n         }\n      }\n      // when hash table entry is too long, delete half the entries\n      if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) {\n         STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality);\n         stbiw__sbn(hash_table[h]) = quality;\n      }\n      stbiw__sbpush(hash_table[h],data+i);\n\n      if (bestloc) {\n         // \"lazy matching\" - check match at *next* byte, and if it's better, do cur byte as literal\n         h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1);\n         hlist = hash_table[h];\n         n = stbiw__sbcount(hlist);\n         for (j=0; j < n; ++j) {\n            if (hlist[j]-data > i-32767) {\n               int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1);\n               if (e > best) { // if next match is better, bail on current match\n                  bestloc = NULL;\n                  break;\n               }\n            }\n         }\n      }\n\n      if (bestloc) {\n         int d = (int) (data+i - bestloc); // distance back\n         STBIW_ASSERT(d <= 32767 && best <= 258);\n         for (j=0; best > lengthc[j+1]-1; ++j);\n         stbiw__zlib_huff(j+257);\n         if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]);\n         for (j=0; d > distc[j+1]-1; ++j);\n         stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5);\n         if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]);\n         i += best;\n      } else {\n         stbiw__zlib_huffb(data[i]);\n         ++i;\n      }\n   }\n   // write out final bytes\n   for (;i < data_len; ++i)\n      stbiw__zlib_huffb(data[i]);\n   stbiw__zlib_huff(256); // end of block\n   // pad with 0 bits to byte boundary\n   while (bitcount)\n      stbiw__zlib_add(0,1);\n\n   for (i=0; i < stbiw__ZHASH; ++i)\n      (void) stbiw__sbfree(hash_table[i]);\n   STBIW_FREE(hash_table);\n\n   // store uncompressed instead if compression was worse\n   if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) {\n      stbiw__sbn(out) = 2;  // truncate to DEFLATE 32K window and FLEVEL = 1\n      for (j = 0; j < data_len;) {\n         int blocklen = data_len - j;\n         if (blocklen > 32767) blocklen = 32767;\n         stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression\n         stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN\n         stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8));\n         stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN\n         stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8));\n         memcpy(out+stbiw__sbn(out), data+j, blocklen);\n         stbiw__sbn(out) += blocklen;\n         j += blocklen;\n      }\n   }\n\n   {\n      // compute adler32 on input\n      unsigned int s1=1, s2=0;\n      int blocklen = (int) (data_len % 5552);\n      j=0;\n      while (j < data_len) {\n         for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; }\n         s1 %= 65521; s2 %= 65521;\n         j += blocklen;\n         blocklen = 5552;\n      }\n      stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8));\n      stbiw__sbpush(out, STBIW_UCHAR(s2));\n      stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8));\n      stbiw__sbpush(out, STBIW_UCHAR(s1));\n   }\n   *out_len = stbiw__sbn(out);\n   // make returned pointer freeable\n   STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len);\n   return (unsigned char *) stbiw__sbraw(out);\n#endif // STBIW_ZLIB_COMPRESS\n}\n\nstatic unsigned int stbiw__crc32(unsigned char *buffer, int len)\n{\n#ifdef STBIW_CRC32\n    return STBIW_CRC32(buffer, len);\n#else\n   static unsigned int crc_table[256] =\n   {\n      0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n      0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n      0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n      0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n      0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n      0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n      0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n      0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n      0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n      0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n      0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n      0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n      0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n      0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n      0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n      0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n      0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n      0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n      0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n      0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n      0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n      0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n      0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n      0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n      0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n      0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n      0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n      0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n      0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n      0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n      0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n      0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n   };\n\n   unsigned int crc = ~0u;\n   int i;\n   for (i=0; i < len; ++i)\n      crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)];\n   return ~crc;\n#endif\n}\n\n#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4)\n#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v));\n#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3])\n\nstatic void stbiw__wpcrc(unsigned char **data, int len)\n{\n   unsigned int crc = stbiw__crc32(*data - len - 4, len+4);\n   stbiw__wp32(*data, crc);\n}\n\nstatic unsigned char stbiw__paeth(int a, int b, int c)\n{\n   int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c);\n   if (pa <= pb && pa <= pc) return STBIW_UCHAR(a);\n   if (pb <= pc) return STBIW_UCHAR(b);\n   return STBIW_UCHAR(c);\n}\n\n// @OPTIMIZE: provide an option that always forces left-predict or paeth predict\nstatic void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer)\n{\n   static int mapping[] = { 0,1,2,3,4 };\n   static int firstmap[] = { 0,1,0,5,6 };\n   int *mymap = (y != 0) ? mapping : firstmap;\n   int i;\n   int type = mymap[filter_type];\n   unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);\n   int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;\n\n   if (type==0) {\n      memcpy(line_buffer, z, width*n);\n      return;\n   }\n\n   // first loop isn't optimized since it's just one pixel\n   for (i = 0; i < n; ++i) {\n      switch (type) {\n         case 1: line_buffer[i] = z[i]; break;\n         case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break;\n         case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break;\n         case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break;\n         case 5: line_buffer[i] = z[i]; break;\n         case 6: line_buffer[i] = z[i]; break;\n      }\n   }\n   switch (type) {\n      case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break;\n      case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break;\n      case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break;\n      case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break;\n      case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break;\n      case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break;\n   }\n}\n\nSTBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len)\n{\n   int force_filter = stbi_write_force_png_filter;\n   int ctype[5] = { -1, 0, 4, 2, 6 };\n   unsigned char sig[8] = { 137,80,78,71,13,10,26,10 };\n   unsigned char *out,*o, *filt, *zlib;\n   signed char *line_buffer;\n   int j,zlen;\n\n   if (stride_bytes == 0)\n      stride_bytes = x * n;\n\n   if (force_filter >= 5) {\n      force_filter = -1;\n   }\n\n   filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0;\n   line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; }\n   for (j=0; j < y; ++j) {\n      int filter_type;\n      if (force_filter > -1) {\n         filter_type = force_filter;\n         stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer);\n      } else { // Estimate the best filter by running through all of them:\n         int best_filter = 0, best_filter_val = 0x7fffffff, est, i;\n         for (filter_type = 0; filter_type < 5; filter_type++) {\n            stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer);\n\n            // Estimate the entropy of the line using this filter; the less, the better.\n            est = 0;\n            for (i = 0; i < x*n; ++i) {\n               est += abs((signed char) line_buffer[i]);\n            }\n            if (est < best_filter_val) {\n               best_filter_val = est;\n               best_filter = filter_type;\n            }\n         }\n         if (filter_type != best_filter) {  // If the last iteration already got us the best filter, don't redo it\n            stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer);\n            filter_type = best_filter;\n         }\n      }\n      // when we get here, filter_type contains the filter type, and line_buffer contains the data\n      filt[j*(x*n+1)] = (unsigned char) filter_type;\n      STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n);\n   }\n   STBIW_FREE(line_buffer);\n   zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level);\n   STBIW_FREE(filt);\n   if (!zlib) return 0;\n\n   // each tag requires 12 bytes of overhead\n   out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12);\n   if (!out) return 0;\n   *out_len = 8 + 12+13 + 12+zlen + 12;\n\n   o=out;\n   STBIW_MEMMOVE(o,sig,8); o+= 8;\n   stbiw__wp32(o, 13); // header length\n   stbiw__wptag(o, \"IHDR\");\n   stbiw__wp32(o, x);\n   stbiw__wp32(o, y);\n   *o++ = 8;\n   *o++ = STBIW_UCHAR(ctype[n]);\n   *o++ = 0;\n   *o++ = 0;\n   *o++ = 0;\n   stbiw__wpcrc(&o,13);\n\n   stbiw__wp32(o, zlen);\n   stbiw__wptag(o, \"IDAT\");\n   STBIW_MEMMOVE(o, zlib, zlen);\n   o += zlen;\n   STBIW_FREE(zlib);\n   stbiw__wpcrc(&o, zlen);\n\n   stbiw__wp32(o,0);\n   stbiw__wptag(o, \"IEND\");\n   stbiw__wpcrc(&o,0);\n\n   STBIW_ASSERT(o == out + *out_len);\n\n   return out;\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes)\n{\n   FILE *f;\n   int len;\n   unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len);\n   if (png == NULL) return 0;\n\n   f = stbiw__fopen(filename, \"wb\");\n   if (!f) { STBIW_FREE(png); return 0; }\n   fwrite(png, 1, len, f);\n   fclose(f);\n   STBIW_FREE(png);\n   return 1;\n}\n#endif\n\nSTBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes)\n{\n   int len;\n   unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len);\n   if (png == NULL) return 0;\n   func(context, png, len);\n   STBIW_FREE(png);\n   return 1;\n}\n\n\n/* ***************************************************************************\n *\n * JPEG writer\n *\n * This is based on Jon Olick's jo_jpeg.cpp:\n * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html\n */\n\nstatic const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,\n      24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 };\n\nstatic void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) {\n   int bitBuf = *bitBufP, bitCnt = *bitCntP;\n   bitCnt += bs[1];\n   bitBuf |= bs[0] << (24 - bitCnt);\n   while(bitCnt >= 8) {\n      unsigned char c = (bitBuf >> 16) & 255;\n      stbiw__putc(s, c);\n      if(c == 255) {\n         stbiw__putc(s, 0);\n      }\n      bitBuf <<= 8;\n      bitCnt -= 8;\n   }\n   *bitBufP = bitBuf;\n   *bitCntP = bitCnt;\n}\n\nstatic void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) {\n   float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p;\n   float z1, z2, z3, z4, z5, z11, z13;\n\n   float tmp0 = d0 + d7;\n   float tmp7 = d0 - d7;\n   float tmp1 = d1 + d6;\n   float tmp6 = d1 - d6;\n   float tmp2 = d2 + d5;\n   float tmp5 = d2 - d5;\n   float tmp3 = d3 + d4;\n   float tmp4 = d3 - d4;\n\n   // Even part\n   float tmp10 = tmp0 + tmp3;   // phase 2\n   float tmp13 = tmp0 - tmp3;\n   float tmp11 = tmp1 + tmp2;\n   float tmp12 = tmp1 - tmp2;\n\n   d0 = tmp10 + tmp11;       // phase 3\n   d4 = tmp10 - tmp11;\n\n   z1 = (tmp12 + tmp13) * 0.707106781f; // c4\n   d2 = tmp13 + z1;       // phase 5\n   d6 = tmp13 - z1;\n\n   // Odd part\n   tmp10 = tmp4 + tmp5;       // phase 2\n   tmp11 = tmp5 + tmp6;\n   tmp12 = tmp6 + tmp7;\n\n   // The rotator is modified from fig 4-8 to avoid extra negations.\n   z5 = (tmp10 - tmp12) * 0.382683433f; // c6\n   z2 = tmp10 * 0.541196100f + z5; // c2-c6\n   z4 = tmp12 * 1.306562965f + z5; // c2+c6\n   z3 = tmp11 * 0.707106781f; // c4\n\n   z11 = tmp7 + z3;      // phase 5\n   z13 = tmp7 - z3;\n\n   *d5p = z13 + z2;         // phase 6\n   *d3p = z13 - z2;\n   *d1p = z11 + z4;\n   *d7p = z11 - z4;\n\n   *d0p = d0;  *d2p = d2;  *d4p = d4;  *d6p = d6;\n}\n\nstatic void stbiw__jpg_calcBits(int val, unsigned short bits[2]) {\n   int tmp1 = val < 0 ? -val : val;\n   val = val < 0 ? val-1 : val;\n   bits[1] = 1;\n   while(tmp1 >>= 1) {\n      ++bits[1];\n   }\n   bits[0] = val & ((1<<bits[1])-1);\n}\n\nstatic int stbiw__jpg_processDU(stbi__write_context *s, int *bitBuf, int *bitCnt, float *CDU, int du_stride, float *fdtbl, int DC, const unsigned short HTDC[256][2], const unsigned short HTAC[256][2]) {\n   const unsigned short EOB[2] = { HTAC[0x00][0], HTAC[0x00][1] };\n   const unsigned short M16zeroes[2] = { HTAC[0xF0][0], HTAC[0xF0][1] };\n   int dataOff, i, j, n, diff, end0pos, x, y;\n   int DU[64];\n\n   // DCT rows\n   for(dataOff=0, n=du_stride*8; dataOff<n; dataOff+=du_stride) {\n      stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+1], &CDU[dataOff+2], &CDU[dataOff+3], &CDU[dataOff+4], &CDU[dataOff+5], &CDU[dataOff+6], &CDU[dataOff+7]);\n   }\n   // DCT columns\n   for(dataOff=0; dataOff<8; ++dataOff) {\n      stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+du_stride], &CDU[dataOff+du_stride*2], &CDU[dataOff+du_stride*3], &CDU[dataOff+du_stride*4],\n                     &CDU[dataOff+du_stride*5], &CDU[dataOff+du_stride*6], &CDU[dataOff+du_stride*7]);\n   }\n   // Quantize/descale/zigzag the coefficients\n   for(y = 0, j=0; y < 8; ++y) {\n      for(x = 0; x < 8; ++x,++j) {\n         float v;\n         i = y*du_stride+x;\n         v = CDU[i]*fdtbl[j];\n         // DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? ceilf(v - 0.5f) : floorf(v + 0.5f));\n         // ceilf() and floorf() are C99, not C89, but I /think/ they're not needed here anyway?\n         DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? v - 0.5f : v + 0.5f);\n      }\n   }\n\n   // Encode DC\n   diff = DU[0] - DC;\n   if (diff == 0) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[0]);\n   } else {\n      unsigned short bits[2];\n      stbiw__jpg_calcBits(diff, bits);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[bits[1]]);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits);\n   }\n   // Encode ACs\n   end0pos = 63;\n   for(; (end0pos>0)&&(DU[end0pos]==0); --end0pos) {\n   }\n   // end0pos = first element in reverse order !=0\n   if(end0pos == 0) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB);\n      return DU[0];\n   }\n   for(i = 1; i <= end0pos; ++i) {\n      int startpos = i;\n      int nrzeroes;\n      unsigned short bits[2];\n      for (; DU[i]==0 && i<=end0pos; ++i) {\n      }\n      nrzeroes = i-startpos;\n      if ( nrzeroes >= 16 ) {\n         int lng = nrzeroes>>4;\n         int nrmarker;\n         for (nrmarker=1; nrmarker <= lng; ++nrmarker)\n            stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes);\n         nrzeroes &= 15;\n      }\n      stbiw__jpg_calcBits(DU[i], bits);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits);\n   }\n   if(end0pos != 63) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB);\n   }\n   return DU[0];\n}\n\nstatic int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) {\n   // Constants that don't pollute global namespace\n   static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0};\n   static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11};\n   static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d};\n   static const unsigned char std_ac_luminance_values[] = {\n      0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n      0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n      0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n      0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n      0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n      0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n      0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa\n   };\n   static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0};\n   static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11};\n   static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77};\n   static const unsigned char std_ac_chrominance_values[] = {\n      0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n      0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n      0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n      0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n      0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n      0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n      0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa\n   };\n   // Huffman tables\n   static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}};\n   static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}};\n   static const unsigned short YAC_HT[256][2] = {\n      {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0}\n   };\n   static const unsigned short UVAC_HT[256][2] = {\n      {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0}\n   };\n   static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,\n                             37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99};\n   static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,\n                              99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99};\n   static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,\n                                 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f };\n\n   int row, col, i, k, subsample;\n   float fdtbl_Y[64], fdtbl_UV[64];\n   unsigned char YTable[64], UVTable[64];\n\n   if(!data || !width || !height || comp > 4 || comp < 1) {\n      return 0;\n   }\n\n   quality = quality ? quality : 90;\n   subsample = quality <= 90 ? 1 : 0;\n   quality = quality < 1 ? 1 : quality > 100 ? 100 : quality;\n   quality = quality < 50 ? 5000 / quality : 200 - quality * 2;\n\n   for(i = 0; i < 64; ++i) {\n      int uvti, yti = (YQT[i]*quality+50)/100;\n      YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti);\n      uvti = (UVQT[i]*quality+50)/100;\n      UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti);\n   }\n\n   for(row = 0, k = 0; row < 8; ++row) {\n      for(col = 0; col < 8; ++col, ++k) {\n         fdtbl_Y[k]  = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]);\n         fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]);\n      }\n   }\n\n   // Write Headers\n   {\n      static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 };\n      static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 };\n      const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width),\n                                      3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 };\n      s->func(s->context, (void*)head0, sizeof(head0));\n      s->func(s->context, (void*)YTable, sizeof(YTable));\n      stbiw__putc(s, 1);\n      s->func(s->context, UVTable, sizeof(UVTable));\n      s->func(s->context, (void*)head1, sizeof(head1));\n      s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1);\n      s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values));\n      stbiw__putc(s, 0x10); // HTYACinfo\n      s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1);\n      s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values));\n      stbiw__putc(s, 1); // HTUDCinfo\n      s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1);\n      s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values));\n      stbiw__putc(s, 0x11); // HTUACinfo\n      s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1);\n      s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values));\n      s->func(s->context, (void*)head2, sizeof(head2));\n   }\n\n   // Encode 8x8 macroblocks\n   {\n      static const unsigned short fillBits[] = {0x7F, 7};\n      int DCY=0, DCU=0, DCV=0;\n      int bitBuf=0, bitCnt=0;\n      // comp == 2 is grey+alpha (alpha is ignored)\n      int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0;\n      const unsigned char *dataR = (const unsigned char *)data;\n      const unsigned char *dataG = dataR + ofsG;\n      const unsigned char *dataB = dataR + ofsB;\n      int x, y, pos;\n      if(subsample) {\n         for(y = 0; y < height; y += 16) {\n            for(x = 0; x < width; x += 16) {\n               float Y[256], U[256], V[256];\n               for(row = y, pos = 0; row < y+16; ++row) {\n                  // row >= height => use last input row\n                  int clamped_row = (row < height) ? row : height - 1;\n                  int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;\n                  for(col = x; col < x+16; ++col, ++pos) {\n                     // if col >= width => use pixel from last input column\n                     int p = base_p + ((col < width) ? col : (width-1))*comp;\n                     float r = dataR[p], g = dataG[p], b = dataB[p];\n                     Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;\n                     U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;\n                     V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;\n                  }\n               }\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0,   16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8,   16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\n               // subsample U,V\n               {\n                  float subU[64], subV[64];\n                  int yy, xx;\n                  for(yy = 0, pos = 0; yy < 8; ++yy) {\n                     for(xx = 0; xx < 8; ++xx, ++pos) {\n                        int j = yy*32+xx*2;\n                        subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f;\n                        subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f;\n                     }\n                  }\n                  DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                  DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n               }\n            }\n         }\n      } else {\n         for(y = 0; y < height; y += 8) {\n            for(x = 0; x < width; x += 8) {\n               float Y[64], U[64], V[64];\n               for(row = y, pos = 0; row < y+8; ++row) {\n                  // row >= height => use last input row\n                  int clamped_row = (row < height) ? row : height - 1;\n                  int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;\n                  for(col = x; col < x+8; ++col, ++pos) {\n                     // if col >= width => use pixel from last input column\n                     int p = base_p + ((col < width) ? col : (width-1))*comp;\n                     float r = dataR[p], g = dataG[p], b = dataB[p];\n                     Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;\n                     U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;\n                     V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;\n                  }\n               }\n\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y,  DCY, YDC_HT, YAC_HT);\n               DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n               DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n            }\n         }\n      }\n\n      // Do the bit alignment of the EOI marker\n      stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits);\n   }\n\n   // EOI\n   stbiw__putc(s, 0xFF);\n   stbiw__putc(s, 0xD9);\n\n   return 1;\n}\n\nSTBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality);\n}\n\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_jpg_core(&s, x, y, comp, data, quality);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif\n\n#endif // STB_IMAGE_WRITE_IMPLEMENTATION\n\n/* Revision history\n      1.16  (2021-07-11)\n             make Deflate code emit uncompressed blocks when it would otherwise expand\n             support writing BMPs with alpha channel\n      1.15  (2020-07-13) unknown\n      1.14  (2020-02-02) updated JPEG writer to downsample chroma channels\n      1.13\n      1.12\n      1.11  (2019-08-11)\n\n      1.10  (2019-02-07)\n             support utf8 filenames in Windows; fix warnings and platform ifdefs\n      1.09  (2018-02-11)\n             fix typo in zlib quality API, improve STB_I_W_STATIC in C++\n      1.08  (2018-01-29)\n             add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter\n      1.07  (2017-07-24)\n             doc fix\n      1.06 (2017-07-23)\n             writing JPEG (using Jon Olick's code)\n      1.05   ???\n      1.04 (2017-03-03)\n             monochrome BMP expansion\n      1.03   ???\n      1.02 (2016-04-02)\n             avoid allocating large structures on the stack\n      1.01 (2016-01-16)\n             STBIW_REALLOC_SIZED: support allocators with no realloc support\n             avoid race-condition in crc initialization\n             minor compile issues\n      1.00 (2015-09-14)\n             installable file IO function\n      0.99 (2015-09-13)\n             warning fixes; TGA rle support\n      0.98 (2015-04-08)\n             added STBIW_MALLOC, STBIW_ASSERT etc\n      0.97 (2015-01-18)\n             fixed HDR asserts, rewrote HDR rle logic\n      0.96 (2015-01-17)\n             add HDR output\n             fix monochrome BMP\n      0.95 (2014-08-17)\n             add monochrome TGA output\n      0.94 (2014-05-31)\n             rename private functions to avoid conflicts with stb_image.h\n      0.93 (2014-05-27)\n             warning fixes\n      0.92 (2010-08-01)\n             casts to unsigned char to fix warnings\n      0.91 (2010-07-17)\n             first public release\n      0.90   first internal release\n*/\n\n/*\n------------------------------------------------------------------------------\nThis software is available under 2 licenses -- choose whichever you prefer.\n------------------------------------------------------------------------------\nALTERNATIVE A - MIT License\nCopyright (c) 2017 Sean Barrett\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------------------------------------------------------------------------------\nALTERNATIVE B - Public Domain (www.unlicense.org)\nThis is free and unencumbered software released into the public domain.\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute this\nsoftware, either in source code form or as a compiled binary, for any purpose,\ncommercial or non-commercial, and by any means.\nIn jurisdictions that recognize copyright laws, the author or authors of this\nsoftware dedicate any and all copyright interest in the software to the public\ndomain. We make this dedication for the benefit of the public at large and to\nthe detriment of our heirs and successors. We intend this dedication to be an\novert act of relinquishment in perpetuity of all present and future rights to\nthis software under copyright law.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------------------------------------------------------------------------------\n*/"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/ext.cpp",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n#include \"spatial.h\"\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\"distCUDA2\", &distCUDA2);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/setup.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom setuptools import setup\nfrom torch.utils.cpp_extension import CUDAExtension, BuildExtension\nimport os\n\ncxx_compiler_flags = []\n\nif os.name == 'nt':\n    cxx_compiler_flags.append(\"/wd4624\")\n\nsetup(\n    name=\"simple_knn\",\n    ext_modules=[\n        CUDAExtension(\n            name=\"simple_knn._C\",\n            sources=[\n            \"spatial.cu\", \n            \"simple_knn.cu\",\n            \"ext.cpp\"],\n            extra_compile_args={\"nvcc\": [], \"cxx\": cxx_compiler_flags})\n        ],\n    cmdclass={\n        'build_ext': BuildExtension\n    }\n)\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/simple_knn/.gitkeep",
    "content": ""
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/simple_knn.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#define BOX_SIZE 1024\n#include <cfloat>  // for FLT_MAX\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#include \"simple_knn.h\"\n#include <cub/cub.cuh>\n#include <cub/device/device_radix_sort.cuh>\n#include <vector>\n#include <cuda_runtime_api.h>\n#include <thrust/device_vector.h>\n#include <thrust/sequence.h>\n#define __CUDACC__\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\n\nnamespace cg = cooperative_groups;\n\nstruct CustomMin\n{\n\t__device__ __forceinline__\n\t\tfloat3 operator()(const float3& a, const float3& b) const {\n\t\treturn { min(a.x, b.x), min(a.y, b.y), min(a.z, b.z) };\n\t}\n};\n\nstruct CustomMax\n{\n\t__device__ __forceinline__\n\t\tfloat3 operator()(const float3& a, const float3& b) const {\n\t\treturn { max(a.x, b.x), max(a.y, b.y), max(a.z, b.z) };\n\t}\n};\n\n__host__ __device__ uint32_t prepMorton(uint32_t x)\n{\n\tx = (x | (x << 16)) & 0x030000FF;\n\tx = (x | (x << 8)) & 0x0300F00F;\n\tx = (x | (x << 4)) & 0x030C30C3;\n\tx = (x | (x << 2)) & 0x09249249;\n\treturn x;\n}\n\n__host__ __device__ uint32_t coord2Morton(float3 coord, float3 minn, float3 maxx)\n{\n\tuint32_t x = prepMorton(((coord.x - minn.x) / (maxx.x - minn.x)) * ((1 << 10) - 1));\n\tuint32_t y = prepMorton(((coord.y - minn.y) / (maxx.y - minn.y)) * ((1 << 10) - 1));\n\tuint32_t z = prepMorton(((coord.z - minn.z) / (maxx.z - minn.z)) * ((1 << 10) - 1));\n\n\treturn x | (y << 1) | (z << 2);\n}\n\n__global__ void coord2Morton(int P, const float3* points, float3 minn, float3 maxx, uint32_t* codes)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tcodes[idx] = coord2Morton(points[idx], minn, maxx);\n}\n\nstruct MinMax\n{\n\tfloat3 minn;\n\tfloat3 maxx;\n};\n\n__global__ void boxMinMax(uint32_t P, float3* points, uint32_t* indices, MinMax* boxes)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\n\tMinMax me;\n\tif (idx < P)\n\t{\n\t\tme.minn = points[indices[idx]];\n\t\tme.maxx = points[indices[idx]];\n\t}\n\telse\n\t{\n\t\tme.minn = { FLT_MAX, FLT_MAX, FLT_MAX };\n\t\tme.maxx = { -FLT_MAX,-FLT_MAX,-FLT_MAX };\n\t}\n\n\t__shared__ MinMax redResult[BOX_SIZE];\n\n\tfor (int off = BOX_SIZE / 2; off >= 1; off /= 2)\n\t{\n\t\tif (threadIdx.x < 2 * off)\n\t\t\tredResult[threadIdx.x] = me;\n\t\t__syncthreads();\n\n\t\tif (threadIdx.x < off)\n\t\t{\n\t\t\tMinMax other = redResult[threadIdx.x + off];\n\t\t\tme.minn.x = min(me.minn.x, other.minn.x);\n\t\t\tme.minn.y = min(me.minn.y, other.minn.y);\n\t\t\tme.minn.z = min(me.minn.z, other.minn.z);\n\t\t\tme.maxx.x = max(me.maxx.x, other.maxx.x);\n\t\t\tme.maxx.y = max(me.maxx.y, other.maxx.y);\n\t\t\tme.maxx.z = max(me.maxx.z, other.maxx.z);\n\t\t}\n\t\t__syncthreads();\n\t}\n\n\tif (threadIdx.x == 0)\n\t\tboxes[blockIdx.x] = me;\n}\n\n__device__ __host__ float distBoxPoint(const MinMax& box, const float3& p)\n{\n\tfloat3 diff = { 0, 0, 0 };\n\tif (p.x < box.minn.x || p.x > box.maxx.x)\n\t\tdiff.x = min(abs(p.x - box.minn.x), abs(p.x - box.maxx.x));\n\tif (p.y < box.minn.y || p.y > box.maxx.y)\n\t\tdiff.y = min(abs(p.y - box.minn.y), abs(p.y - box.maxx.y));\n\tif (p.z < box.minn.z || p.z > box.maxx.z)\n\t\tdiff.z = min(abs(p.z - box.minn.z), abs(p.z - box.maxx.z));\n\treturn diff.x * diff.x + diff.y * diff.y + diff.z * diff.z;\n}\n\ntemplate<int K>\n__device__ void updateKBest(const float3& ref, const float3& point, float* knn)\n{\n\tfloat3 d = { point.x - ref.x, point.y - ref.y, point.z - ref.z };\n\tfloat dist = d.x * d.x + d.y * d.y + d.z * d.z;\n\tfor (int j = 0; j < K; j++)\n\t{\n\t\tif (knn[j] > dist)\n\t\t{\n\t\t\tfloat t = knn[j];\n\t\t\tknn[j] = dist;\n\t\t\tdist = t;\n\t\t}\n\t}\n}\n\n__global__ void boxMeanDist(uint32_t P, float3* points, uint32_t* indices, MinMax* boxes, float* dists)\n{\n\tint idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tfloat3 point = points[indices[idx]];\n\tfloat best[3] = { FLT_MAX, FLT_MAX, FLT_MAX };\n\n\tfor (int i = max(0, idx - 3); i <= min(P - 1, idx + 3); i++)\n\t{\n\t\tif (i == idx)\n\t\t\tcontinue;\n\t\tupdateKBest<3>(point, points[indices[i]], best);\n\t}\n\n\tfloat reject = best[2];\n\tbest[0] = FLT_MAX;\n\tbest[1] = FLT_MAX;\n\tbest[2] = FLT_MAX;\n\n\tfor (int b = 0; b < (P + BOX_SIZE - 1) / BOX_SIZE; b++)\n\t{\n\t\tMinMax box = boxes[b];\n\t\tfloat dist = distBoxPoint(box, point);\n\t\tif (dist > reject || dist > best[2])\n\t\t\tcontinue;\n\n\t\tfor (int i = b * BOX_SIZE; i < min(P, (b + 1) * BOX_SIZE); i++)\n\t\t{\n\t\t\tif (i == idx)\n\t\t\t\tcontinue;\n\t\t\tupdateKBest<3>(point, points[indices[i]], best);\n\t\t}\n\t}\n\tdists[indices[idx]] = (best[0] + best[1] + best[2]) / 3.0f;\n}\n\nvoid SimpleKNN::knn(int P, float3* points, float* meanDists)\n{\n\tfloat3* result;\n\tcudaMalloc(&result, sizeof(float3));\n\tsize_t temp_storage_bytes;\n\n\tfloat3 init = { 0, 0, 0 }, minn, maxx;\n\n\tcub::DeviceReduce::Reduce(nullptr, temp_storage_bytes, points, result, P, CustomMin(), init);\n\tthrust::device_vector<char> temp_storage(temp_storage_bytes);\n\n\tcub::DeviceReduce::Reduce(temp_storage.data().get(), temp_storage_bytes, points, result, P, CustomMin(), init);\n\tcudaMemcpy(&minn, result, sizeof(float3), cudaMemcpyDeviceToHost);\n\n\tcub::DeviceReduce::Reduce(temp_storage.data().get(), temp_storage_bytes, points, result, P, CustomMax(), init);\n\tcudaMemcpy(&maxx, result, sizeof(float3), cudaMemcpyDeviceToHost);\n\n\tthrust::device_vector<uint32_t> morton(P);\n\tthrust::device_vector<uint32_t> morton_sorted(P);\n\tcoord2Morton << <(P + 255) / 256, 256 >> > (P, points, minn, maxx, morton.data().get());\n\n\tthrust::device_vector<uint32_t> indices(P);\n\tthrust::sequence(indices.begin(), indices.end());\n\tthrust::device_vector<uint32_t> indices_sorted(P);\n\n\tcub::DeviceRadixSort::SortPairs(nullptr, temp_storage_bytes, morton.data().get(), morton_sorted.data().get(), indices.data().get(), indices_sorted.data().get(), P);\n\ttemp_storage.resize(temp_storage_bytes);\n\n\tcub::DeviceRadixSort::SortPairs(temp_storage.data().get(), temp_storage_bytes, morton.data().get(), morton_sorted.data().get(), indices.data().get(), indices_sorted.data().get(), P);\n\n\tuint32_t num_boxes = (P + BOX_SIZE - 1) / BOX_SIZE;\n\tthrust::device_vector<MinMax> boxes(num_boxes);\n\tboxMinMax << <num_boxes, BOX_SIZE >> > (P, points, indices_sorted.data().get(), boxes.data().get());\n\tboxMeanDist << <num_boxes, BOX_SIZE >> > (P, points, indices_sorted.data().get(), boxes.data().get(), meanDists);\n\n\tcudaFree(result);\n}\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/simple_knn.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef SIMPLEKNN_H_INCLUDED\n#define SIMPLEKNN_H_INCLUDED\n\nclass SimpleKNN\n{\npublic:\n\tstatic void knn(int P, float3* points, float* meanDists);\n};\n\n#endif"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/spatial.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"spatial.h\"\n#include \"simple_knn.h\"\n\ntorch::Tensor\ndistCUDA2(const torch::Tensor& points)\n{\n  const int P = points.size(0);\n\n  auto float_opts = points.options().dtype(torch::kFloat32);\n  torch::Tensor means = torch::full({P}, 0.0, float_opts);\n  \n  SimpleKNN::knn(P, (float3*)points.contiguous().data<float>(), means.contiguous().data<float>());\n\n  return means;\n}"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/submodules/simple-knn/spatial.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n\ntorch::Tensor distCUDA2(const torch::Tensor& points);"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/train.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\nimport torch\nfrom random import randint\nfrom utils.loss_utils import l1_loss, ssim\nfrom gaussian_renderer import render, network_gui\nimport sys\nfrom scene import Scene, GaussianModel\nfrom utils.general_utils import safe_state\nimport uuid\nfrom tqdm import tqdm\nfrom utils.image_utils import psnr\nfrom argparse import ArgumentParser, Namespace\nfrom arguments import ModelParams, PipelineParams, OptimizationParams\ntry:\n    from torch.utils.tensorboard import SummaryWriter\n    TENSORBOARD_FOUND = True\nexcept ImportError:\n    TENSORBOARD_FOUND = False\n\ndef training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):\n    first_iter = 0\n    tb_writer = prepare_output_and_logger(dataset)\n    gaussians = GaussianModel(dataset.sh_degree)\n    scene = Scene(dataset, gaussians)\n    gaussians.training_setup(opt)\n    if checkpoint:\n        (model_params, first_iter) = torch.load(checkpoint)\n        gaussians.restore(model_params, opt)\n\n    bg_color = [1, 1, 1] if dataset.white_background else [0, 0, 0]\n    background = torch.tensor(bg_color, dtype=torch.float32, device=\"cuda\")\n\n    iter_start = torch.cuda.Event(enable_timing = True)\n    iter_end = torch.cuda.Event(enable_timing = True)\n\n    viewpoint_stack = None\n    ema_loss_for_log = 0.0\n    progress_bar = tqdm(range(first_iter, opt.iterations), desc=\"Training progress\")\n    first_iter += 1\n    for iteration in range(first_iter, opt.iterations + 1):        \n        if network_gui.conn == None:\n            network_gui.try_connect()\n        while network_gui.conn != None:\n            try:\n                net_image_bytes = None\n                custom_cam, do_training, pipe.convert_SHs_python, pipe.compute_cov3D_python, keep_alive, scaling_modifer = network_gui.receive()\n                if custom_cam != None:\n                    net_image = render(custom_cam, gaussians, pipe, background, scaling_modifer)[\"render\"]\n                    net_image_bytes = memoryview((torch.clamp(net_image, min=0, max=1.0) * 255).byte().permute(1, 2, 0).contiguous().cpu().numpy())\n                network_gui.send(net_image_bytes, dataset.source_path)\n                if do_training and ((iteration < int(opt.iterations)) or not keep_alive):\n                    break\n            except Exception as e:\n                network_gui.conn = None\n\n        iter_start.record()\n\n        gaussians.update_learning_rate(iteration)\n\n        # Every 1000 its we increase the levels of SH up to a maximum degree\n        if iteration % 1000 == 0:\n            gaussians.oneupSHdegree()\n\n        # Pick a random Camera\n        if not viewpoint_stack:\n            viewpoint_stack = scene.getTrainCameras().copy()\n        viewpoint_cam = viewpoint_stack.pop(randint(0, len(viewpoint_stack)-1))\n\n        # Render\n        if (iteration - 1) == debug_from:\n            pipe.debug = True\n\n        bg = torch.rand((3), device=\"cuda\") if opt.random_background else background\n\n        render_pkg = render(viewpoint_cam, gaussians, pipe, bg)\n        image, viewspace_point_tensor, visibility_filter, radii = render_pkg[\"render\"], render_pkg[\"viewspace_points\"], render_pkg[\"visibility_filter\"], render_pkg[\"radii\"]\n\n        # Loss\n        gt_image = viewpoint_cam.original_image.cuda()\n        Ll1 = l1_loss(image, gt_image)\n        loss = (1.0 - opt.lambda_dssim) * Ll1 + opt.lambda_dssim * (1.0 - ssim(image, gt_image))\n        loss.backward()\n\n        iter_end.record()\n\n        with torch.no_grad():\n            # Progress bar\n            ema_loss_for_log = 0.4 * loss.item() + 0.6 * ema_loss_for_log\n            if iteration % 10 == 0:\n                progress_bar.set_postfix({\"Loss\": f\"{ema_loss_for_log:.{7}f}\"})\n                progress_bar.update(10)\n            if iteration == opt.iterations:\n                progress_bar.close()\n\n            # Log and save\n            training_report(tb_writer, iteration, Ll1, loss, l1_loss, iter_start.elapsed_time(iter_end), testing_iterations, scene, render, (pipe, background))\n            if (iteration in saving_iterations):\n                print(\"\\n[ITER {}] Saving Gaussians\".format(iteration))\n                scene.save(iteration)\n\n            # Densification\n            if iteration < opt.densify_until_iter:\n                # Keep track of max radii in image-space for pruning\n                gaussians.max_radii2D[visibility_filter] = torch.max(gaussians.max_radii2D[visibility_filter], radii[visibility_filter])\n                gaussians.add_densification_stats(viewspace_point_tensor, visibility_filter)\n\n                if iteration > opt.densify_from_iter and iteration % opt.densification_interval == 0:\n                    size_threshold = 20 if iteration > opt.opacity_reset_interval else None\n                    gaussians.densify_and_prune(opt.densify_grad_threshold, 0.005, scene.cameras_extent, size_threshold)\n                \n                if iteration % opt.opacity_reset_interval == 0 or (dataset.white_background and iteration == opt.densify_from_iter):\n                    gaussians.reset_opacity()\n\n            # Optimizer step\n            if iteration < opt.iterations:\n                gaussians.optimizer.step()\n                gaussians.optimizer.zero_grad(set_to_none = True)\n\n            if (iteration in checkpoint_iterations):\n                print(\"\\n[ITER {}] Saving Checkpoint\".format(iteration))\n                torch.save((gaussians.capture(), iteration), scene.model_path + \"/chkpnt\" + str(iteration) + \".pth\")\n\ndef prepare_output_and_logger(args):    \n    if not args.model_path:\n        if os.getenv('OAR_JOB_ID'):\n            unique_str=os.getenv('OAR_JOB_ID')\n        else:\n            unique_str = str(uuid.uuid4())\n        args.model_path = os.path.join(\"./output/\", unique_str[0:10])\n        \n    # Set up output folder\n    print(\"Output folder: {}\".format(args.model_path))\n    os.makedirs(args.model_path, exist_ok = True)\n    with open(os.path.join(args.model_path, \"cfg_args\"), 'w') as cfg_log_f:\n        cfg_log_f.write(str(Namespace(**vars(args))))\n\n    # Create Tensorboard writer\n    tb_writer = None\n    if TENSORBOARD_FOUND:\n        tb_writer = SummaryWriter(args.model_path)\n    else:\n        print(\"Tensorboard not available: not logging progress\")\n    return tb_writer\n\ndef training_report(tb_writer, iteration, Ll1, loss, l1_loss, elapsed, testing_iterations, scene : Scene, renderFunc, renderArgs):\n    if tb_writer:\n        tb_writer.add_scalar('train_loss_patches/l1_loss', Ll1.item(), iteration)\n        tb_writer.add_scalar('train_loss_patches/total_loss', loss.item(), iteration)\n        tb_writer.add_scalar('iter_time', elapsed, iteration)\n\n    # Report test and samples of training set\n    if iteration in testing_iterations:\n        torch.cuda.empty_cache()\n        validation_configs = ({'name': 'test', 'cameras' : scene.getTestCameras()}, \n                              {'name': 'train', 'cameras' : [scene.getTrainCameras()[idx % len(scene.getTrainCameras())] for idx in range(5, 30, 5)]})\n\n        for config in validation_configs:\n            if config['cameras'] and len(config['cameras']) > 0:\n                l1_test = 0.0\n                psnr_test = 0.0\n                for idx, viewpoint in enumerate(config['cameras']):\n                    image = torch.clamp(renderFunc(viewpoint, scene.gaussians, *renderArgs)[\"render\"], 0.0, 1.0)\n                    gt_image = torch.clamp(viewpoint.original_image.to(\"cuda\"), 0.0, 1.0)\n                    if tb_writer and (idx < 5):\n                        tb_writer.add_images(config['name'] + \"_view_{}/render\".format(viewpoint.image_name), image[None], global_step=iteration)\n                        if iteration == testing_iterations[0]:\n                            tb_writer.add_images(config['name'] + \"_view_{}/ground_truth\".format(viewpoint.image_name), gt_image[None], global_step=iteration)\n                    l1_test += l1_loss(image, gt_image).mean().double()\n                    psnr_test += psnr(image, gt_image).mean().double()\n                psnr_test /= len(config['cameras'])\n                l1_test /= len(config['cameras'])          \n                print(\"\\n[ITER {}] Evaluating {}: L1 {} PSNR {}\".format(iteration, config['name'], l1_test, psnr_test))\n                if tb_writer:\n                    tb_writer.add_scalar(config['name'] + '/loss_viewpoint - l1_loss', l1_test, iteration)\n                    tb_writer.add_scalar(config['name'] + '/loss_viewpoint - psnr', psnr_test, iteration)\n\n        if tb_writer:\n            tb_writer.add_histogram(\"scene/opacity_histogram\", scene.gaussians.get_opacity, iteration)\n            tb_writer.add_scalar('total_points', scene.gaussians.get_xyz.shape[0], iteration)\n        torch.cuda.empty_cache()\n\nif __name__ == \"__main__\":\n    # Set up command line argument parser\n    parser = ArgumentParser(description=\"Training script parameters\")\n    lp = ModelParams(parser)\n    op = OptimizationParams(parser)\n    pp = PipelineParams(parser)\n    parser.add_argument('--ip', type=str, default=\"127.0.0.1\")\n    parser.add_argument('--port', type=int, default=6009)\n    parser.add_argument('--debug_from', type=int, default=-1)\n    parser.add_argument('--detect_anomaly', action='store_true', default=False)\n    parser.add_argument(\"--test_iterations\", nargs=\"+\", type=int, default=[7_000, 30_000])\n    parser.add_argument(\"--save_iterations\", nargs=\"+\", type=int, default=[7_000, 30_000])\n    parser.add_argument(\"--quiet\", action=\"store_true\")\n    parser.add_argument(\"--checkpoint_iterations\", nargs=\"+\", type=int, default=[])\n    parser.add_argument(\"--start_checkpoint\", type=str, default = None)\n    args = parser.parse_args(sys.argv[1:])\n    args.save_iterations.append(args.iterations)\n    \n    print(\"Optimizing \" + args.model_path)\n\n    # Initialize system state (RNG)\n    safe_state(args.quiet)\n\n    # Start GUI server, configure and run training\n    network_gui.init(args.ip, args.port)\n    torch.autograd.set_detect_anomaly(args.detect_anomaly)\n    training(lp.extract(args), op.extract(args), pp.extract(args), args.test_iterations, args.save_iterations, args.checkpoint_iterations, args.start_checkpoint, args.debug_from)\n\n    # All done\n    print(\"\\nTraining complete.\")\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/camera_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom scene.cameras import Camera\nimport numpy as np\nfrom utils.general_utils import PILtoTorch\nfrom utils.graphics_utils import fov2focal\n\nWARNED = False\n\ndef loadCam(args, id, cam_info, resolution_scale):\n    orig_w, orig_h = cam_info.image.size\n\n    if args.resolution in [1, 2, 4, 8]:\n        resolution = round(orig_w/(resolution_scale * args.resolution)), round(orig_h/(resolution_scale * args.resolution))\n    else:  # should be a type that converts to float\n        if args.resolution == -1:\n            if orig_w > 1600:\n                global WARNED\n                if not WARNED:\n                    print(\"[ INFO ] Encountered quite large input images (>1.6K pixels width), rescaling to 1.6K.\\n \"\n                        \"If this is not desired, please explicitly specify '--resolution/-r' as 1\")\n                    WARNED = True\n                global_down = orig_w / 1600\n            else:\n                global_down = 1\n        else:\n            global_down = orig_w / args.resolution\n\n        scale = float(global_down) * float(resolution_scale)\n        resolution = (int(orig_w / scale), int(orig_h / scale))\n\n    resized_image_rgb = PILtoTorch(cam_info.image, resolution)\n\n    gt_image = resized_image_rgb[:3, ...]\n    loaded_mask = None\n\n    if resized_image_rgb.shape[1] == 4:\n        loaded_mask = resized_image_rgb[3:4, ...]\n\n    return Camera(colmap_id=cam_info.uid, R=cam_info.R, T=cam_info.T, \n                  FoVx=cam_info.FovX, FoVy=cam_info.FovY, \n                  image=gt_image, gt_alpha_mask=loaded_mask,\n                  image_name=cam_info.image_name, uid=id, data_device=args.data_device)\n\ndef cameraList_from_camInfos(cam_infos, resolution_scale, args):\n    camera_list = []\n\n    for id, c in enumerate(cam_infos):\n        camera_list.append(loadCam(args, id, c, resolution_scale))\n\n    return camera_list\n\ndef camera_to_JSON(id, camera : Camera):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = camera.R.transpose()\n    Rt[:3, 3] = camera.T\n    Rt[3, 3] = 1.0\n\n    W2C = np.linalg.inv(Rt)\n    pos = W2C[:3, 3]\n    rot = W2C[:3, :3]\n    serializable_array_2d = [x.tolist() for x in rot]\n    camera_entry = {\n        'id' : id,\n        'img_name' : camera.image_name,\n        'width' : camera.width,\n        'height' : camera.height,\n        'position': pos.tolist(),\n        'rotation': serializable_array_2d,\n        'fy' : fov2focal(camera.FovY, camera.height),\n        'fx' : fov2focal(camera.FovX, camera.width)\n    }\n    return camera_entry\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/general_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport sys\nfrom datetime import datetime\nimport numpy as np\nimport random\n\ndef inverse_sigmoid(x):\n    return torch.log(x/(1-x))\n\ndef PILtoTorch(pil_image, resolution):\n    resized_image_PIL = pil_image.resize(resolution)\n    resized_image = torch.from_numpy(np.array(resized_image_PIL)) / 255.0\n    if len(resized_image.shape) == 3:\n        return resized_image.permute(2, 0, 1)\n    else:\n        return resized_image.unsqueeze(dim=-1).permute(2, 0, 1)\n\ndef get_expon_lr_func(\n    lr_init, lr_final, lr_delay_steps=0, lr_delay_mult=1.0, max_steps=1000000\n):\n    \"\"\"\n    Copied from Plenoxels\n\n    Continuous learning rate decay function. Adapted from JaxNeRF\n    The returned rate is lr_init when step=0 and lr_final when step=max_steps, and\n    is log-linearly interpolated elsewhere (equivalent to exponential decay).\n    If lr_delay_steps>0 then the learning rate will be scaled by some smooth\n    function of lr_delay_mult, such that the initial learning rate is\n    lr_init*lr_delay_mult at the beginning of optimization but will be eased back\n    to the normal learning rate when steps>lr_delay_steps.\n    :param conf: config subtree 'lr' or similar\n    :param max_steps: int, the number of steps during optimization.\n    :return HoF which takes step as input\n    \"\"\"\n\n    def helper(step):\n        if step < 0 or (lr_init == 0.0 and lr_final == 0.0):\n            # Disable this parameter\n            return 0.0\n        if lr_delay_steps > 0:\n            # A kind of reverse cosine decay.\n            delay_rate = lr_delay_mult + (1 - lr_delay_mult) * np.sin(\n                0.5 * np.pi * np.clip(step / lr_delay_steps, 0, 1)\n            )\n        else:\n            delay_rate = 1.0\n        t = np.clip(step / max_steps, 0, 1)\n        log_lerp = np.exp(np.log(lr_init) * (1 - t) + np.log(lr_final) * t)\n        return delay_rate * log_lerp\n\n    return helper\n\ndef strip_lowerdiag(L):\n    uncertainty = torch.zeros((L.shape[0], 6), dtype=torch.float, device=\"cuda\")\n\n    uncertainty[:, 0] = L[:, 0, 0]\n    uncertainty[:, 1] = L[:, 0, 1]\n    uncertainty[:, 2] = L[:, 0, 2]\n    uncertainty[:, 3] = L[:, 1, 1]\n    uncertainty[:, 4] = L[:, 1, 2]\n    uncertainty[:, 5] = L[:, 2, 2]\n    return uncertainty\n\ndef strip_symmetric(sym):\n    return strip_lowerdiag(sym)\n\ndef build_rotation(r):\n    norm = torch.sqrt(r[:,0]*r[:,0] + r[:,1]*r[:,1] + r[:,2]*r[:,2] + r[:,3]*r[:,3])\n\n    q = r / norm[:, None]\n\n    R = torch.zeros((q.size(0), 3, 3), device='cuda')\n\n    r = q[:, 0]\n    x = q[:, 1]\n    y = q[:, 2]\n    z = q[:, 3]\n\n    R[:, 0, 0] = 1 - 2 * (y*y + z*z)\n    R[:, 0, 1] = 2 * (x*y - r*z)\n    R[:, 0, 2] = 2 * (x*z + r*y)\n    R[:, 1, 0] = 2 * (x*y + r*z)\n    R[:, 1, 1] = 1 - 2 * (x*x + z*z)\n    R[:, 1, 2] = 2 * (y*z - r*x)\n    R[:, 2, 0] = 2 * (x*z - r*y)\n    R[:, 2, 1] = 2 * (y*z + r*x)\n    R[:, 2, 2] = 1 - 2 * (x*x + y*y)\n    return R\n\ndef build_scaling_rotation(s, r):\n    L = torch.zeros((s.shape[0], 3, 3), dtype=torch.float, device=\"cuda\")\n    R = build_rotation(r)\n\n    L[:,0,0] = s[:,0]\n    L[:,1,1] = s[:,1]\n    L[:,2,2] = s[:,2]\n\n    L = R @ L\n    return L\n\ndef safe_state(silent):\n    old_f = sys.stdout\n    class F:\n        def __init__(self, silent):\n            self.silent = silent\n\n        def write(self, x):\n            if not self.silent:\n                if x.endswith(\"\\n\"):\n                    old_f.write(x.replace(\"\\n\", \" [{}]\\n\".format(str(datetime.now().strftime(\"%d/%m %H:%M:%S\")))))\n                else:\n                    old_f.write(x)\n\n        def flush(self):\n            old_f.flush()\n\n    sys.stdout = F(silent)\n\n    random.seed(0)\n    np.random.seed(0)\n    torch.manual_seed(0)\n    torch.cuda.set_device(torch.device(\"cuda:0\"))\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/graphics_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport math\nimport numpy as np\nfrom typing import NamedTuple\n\nclass BasicPointCloud(NamedTuple):\n    points : np.array\n    colors : np.array\n    normals : np.array\n\ndef geom_transform_points(points, transf_matrix):\n    P, _ = points.shape\n    ones = torch.ones(P, 1, dtype=points.dtype, device=points.device)\n    points_hom = torch.cat([points, ones], dim=1)\n    points_out = torch.matmul(points_hom, transf_matrix.unsqueeze(0))\n\n    denom = points_out[..., 3:] + 0.0000001\n    return (points_out[..., :3] / denom).squeeze(dim=0)\n\ndef getWorld2View(R, t):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n    return np.float32(Rt)\n\ndef getWorld2View2(R, t, translate=np.array([.0, .0, .0]), scale=1.0):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n\n    C2W = np.linalg.inv(Rt)\n    cam_center = C2W[:3, 3]\n    cam_center = (cam_center + translate) * scale\n    C2W[:3, 3] = cam_center\n    Rt = np.linalg.inv(C2W)\n    return np.float32(Rt)\n\ndef getProjectionMatrix(znear, zfar, fovX, fovY):\n    tanHalfFovY = math.tan((fovY / 2))\n    tanHalfFovX = math.tan((fovX / 2))\n\n    top = tanHalfFovY * znear\n    bottom = -top\n    right = tanHalfFovX * znear\n    left = -right\n\n    P = torch.zeros(4, 4)\n\n    z_sign = 1.0\n\n    P[0, 0] = 2.0 * znear / (right - left)\n    P[1, 1] = 2.0 * znear / (top - bottom)\n    P[0, 2] = (right + left) / (right - left)\n    P[1, 2] = (top + bottom) / (top - bottom)\n    P[3, 2] = z_sign\n    P[2, 2] = z_sign * zfar / (zfar - znear)\n    P[2, 3] = -(zfar * znear) / (zfar - znear)\n    return P\n\ndef fov2focal(fov, pixels):\n    return pixels / (2 * math.tan(fov / 2))\n\ndef focal2fov(focal, pixels):\n    return 2*math.atan(pixels/(2*focal))"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/image_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\n\ndef mse(img1, img2):\n    return (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n\ndef psnr(img1, img2):\n    mse = (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n    return 20 * torch.log10(1.0 / torch.sqrt(mse))\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/loss_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.autograd import Variable\nfrom math import exp\n\ndef l1_loss(network_output, gt):\n    return torch.abs((network_output - gt)).mean()\n\ndef l2_loss(network_output, gt):\n    return ((network_output - gt) ** 2).mean()\n\ndef gaussian(window_size, sigma):\n    gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) for x in range(window_size)])\n    return gauss / gauss.sum()\n\ndef create_window(window_size, channel):\n    _1D_window = gaussian(window_size, 1.5).unsqueeze(1)\n    _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0)\n    window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous())\n    return window\n\ndef ssim(img1, img2, window_size=11, size_average=True):\n    channel = img1.size(-3)\n    window = create_window(window_size, channel)\n\n    if img1.is_cuda:\n        window = window.cuda(img1.get_device())\n    window = window.type_as(img1)\n\n    return _ssim(img1, img2, window, window_size, channel, size_average)\n\ndef _ssim(img1, img2, window, window_size, channel, size_average=True):\n    mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel)\n    mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel)\n\n    mu1_sq = mu1.pow(2)\n    mu2_sq = mu2.pow(2)\n    mu1_mu2 = mu1 * mu2\n\n    sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq\n    sigma2_sq = F.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq\n    sigma12 = F.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2\n\n    C1 = 0.01 ** 2\n    C2 = 0.03 ** 2\n\n    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))\n\n    if size_average:\n        return ssim_map.mean()\n    else:\n        return ssim_map.mean(1).mean(1).mean(1)\n\n"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/sh_utils.py",
    "content": "#  Copyright 2021 The PlenOctree Authors.\n#  Redistribution and use in source and binary forms, with or without\n#  modification, are permitted provided that the following conditions are met:\n#\n#  1. Redistributions of source code must retain the above copyright notice,\n#  this list of conditions and the following disclaimer.\n#\n#  2. Redistributions in binary form must reproduce the above copyright notice,\n#  this list of conditions and the following disclaimer in the documentation\n#  and/or other materials provided with the distribution.\n#\n#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n#  POSSIBILITY OF SUCH DAMAGE.\n\nimport torch\n\nC0 = 0.28209479177387814\nC1 = 0.4886025119029199\nC2 = [\n    1.0925484305920792,\n    -1.0925484305920792,\n    0.31539156525252005,\n    -1.0925484305920792,\n    0.5462742152960396\n]\nC3 = [\n    -0.5900435899266435,\n    2.890611442640554,\n    -0.4570457994644658,\n    0.3731763325901154,\n    -0.4570457994644658,\n    1.445305721320277,\n    -0.5900435899266435\n]\nC4 = [\n    2.5033429417967046,\n    -1.7701307697799304,\n    0.9461746957575601,\n    -0.6690465435572892,\n    0.10578554691520431,\n    -0.6690465435572892,\n    0.47308734787878004,\n    -1.7701307697799304,\n    0.6258357354491761,\n]   \n\n\ndef eval_sh(deg, sh, dirs):\n    \"\"\"\n    Evaluate spherical harmonics at unit directions\n    using hardcoded SH polynomials.\n    Works with torch/np/jnp.\n    ... Can be 0 or more batch dimensions.\n    Args:\n        deg: int SH deg. Currently, 0-3 supported\n        sh: jnp.ndarray SH coeffs [..., C, (deg + 1) ** 2]\n        dirs: jnp.ndarray unit directions [..., 3]\n    Returns:\n        [..., C]\n    \"\"\"\n    assert deg <= 4 and deg >= 0\n    coeff = (deg + 1) ** 2\n    assert sh.shape[-1] >= coeff\n\n    result = C0 * sh[..., 0]\n    if deg > 0:\n        x, y, z = dirs[..., 0:1], dirs[..., 1:2], dirs[..., 2:3]\n        result = (result -\n                C1 * y * sh[..., 1] +\n                C1 * z * sh[..., 2] -\n                C1 * x * sh[..., 3])\n\n        if deg > 1:\n            xx, yy, zz = x * x, y * y, z * z\n            xy, yz, xz = x * y, y * z, x * z\n            result = (result +\n                    C2[0] * xy * sh[..., 4] +\n                    C2[1] * yz * sh[..., 5] +\n                    C2[2] * (2.0 * zz - xx - yy) * sh[..., 6] +\n                    C2[3] * xz * sh[..., 7] +\n                    C2[4] * (xx - yy) * sh[..., 8])\n\n            if deg > 2:\n                result = (result +\n                C3[0] * y * (3 * xx - yy) * sh[..., 9] +\n                C3[1] * xy * z * sh[..., 10] +\n                C3[2] * y * (4 * zz - xx - yy)* sh[..., 11] +\n                C3[3] * z * (2 * zz - 3 * xx - 3 * yy) * sh[..., 12] +\n                C3[4] * x * (4 * zz - xx - yy) * sh[..., 13] +\n                C3[5] * z * (xx - yy) * sh[..., 14] +\n                C3[6] * x * (xx - 3 * yy) * sh[..., 15])\n\n                if deg > 3:\n                    result = (result + C4[0] * xy * (xx - yy) * sh[..., 16] +\n                            C4[1] * yz * (3 * xx - yy) * sh[..., 17] +\n                            C4[2] * xy * (7 * zz - 1) * sh[..., 18] +\n                            C4[3] * yz * (7 * zz - 3) * sh[..., 19] +\n                            C4[4] * (zz * (35 * zz - 30) + 3) * sh[..., 20] +\n                            C4[5] * xz * (7 * zz - 3) * sh[..., 21] +\n                            C4[6] * (xx - yy) * (7 * zz - 1) * sh[..., 22] +\n                            C4[7] * xz * (xx - 3 * yy) * sh[..., 23] +\n                            C4[8] * (xx * (xx - 3 * yy) - yy * (3 * xx - yy)) * sh[..., 24])\n    return result\n\ndef RGB2SH(rgb):\n    return (rgb - 0.5) / C0\n\ndef SH2RGB(sh):\n    return sh * C0 + 0.5"
  },
  {
    "path": "third_party/PhysGaussian/gaussian-splatting/utils/system_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom errno import EEXIST\nfrom os import makedirs, path\nimport os\n\ndef mkdir_p(folder_path):\n    # Creates a directory. equivalent to using mkdir -p on the command line\n    try:\n        makedirs(folder_path)\n    except OSError as exc: # Python >2.5\n        if exc.errno == EEXIST and path.isdir(folder_path):\n            pass\n        else:\n            raise\n\ndef searchForMaxIteration(folder):\n    saved_iters = [int(fname.split(\"_\")[-1]) for fname in os.listdir(folder)]\n    return max(saved_iters)\n"
  },
  {
    "path": "third_party/PhysGaussian/gs_simulation.py",
    "content": "import sys\n\nsys.path.append(\"gaussian-splatting\")\n\nimport argparse\nimport cv2\nimport torch\nimport os\nimport numpy as np\nimport json\nfrom tqdm import tqdm\nimport imageio.v2 as imageio\nfrom plyfile import PlyData, PlyElement\nimport re\nimport shutil\n\n# Gaussian splatting dependencies\nfrom utils.sh_utils import eval_sh\nfrom scene.gaussian_model import GaussianModel\nfrom diff_gaussian_rasterization import (\n    GaussianRasterizationSettings,\n    GaussianRasterizer,\n)\nfrom scene.cameras import Camera as GSCamera\nfrom gaussian_renderer import render, GaussianModel\nfrom utils.system_utils import searchForMaxIteration\nfrom utils.graphics_utils import focal2fov\n\n# MPM dependencies\nfrom mpm_solver_warp.engine_utils import *\nfrom mpm_solver_warp.mpm_solver_warp import MPM_Simulator_WARP\nimport warp as wp\n\n# Particle filling dependencies\nfrom particle_filling.filling import *\nfrom material_field import apply_material_field_to_simulation, transform_to_original_coordinates\n\n# Utils\nfrom utils.decode_param import *\nfrom utils.transformation_utils import *\nfrom utils.camera_view_utils import *\nfrom utils.render_utils import *\nimport glob\nfrom scipy.spatial.transform import Rotation as scipy_R\n\nwp.init()\nwp.config.verify_cuda = True\n\nti.init(arch=ti.cuda, device_memory_GB=8.0)\n\n\n\ndef save_semantic_point_cloud(mpm_solver, gs_num, output_path, \n                              scale_origin, original_mean_pos, rotation_matrices,\n                              to_original_coord=True):\n    \"\"\"\n    Save a point cloud with material IDs, density, E, and nu as vertex data to a PLY file.\n    \n    Args:\n        positions: Tensor of 3D point positions [N, 3]\n        material_ids: Array of material IDs for each point\n        density: Array of density values for each point\n        E: Array of Young's modulus values for each point\n        nu: Array of Poisson's ratio values for each point\n        output_path: Directory to save the PLY file\n        frame_number: Current frame number for filename\n    \"\"\"\n    positions = mpm_solver.export_particle_x_to_torch()[:gs_num]\n    material_ids = mpm_solver.mpm_state.particle_material.numpy()[:gs_num]\n    density = mpm_solver.mpm_state.particle_density.numpy()[:gs_num]\n    E = mpm_solver.mpm_model.E.numpy()[:gs_num]\n    nu = mpm_solver.mpm_model.nu.numpy()[:gs_num]\n\n\n    # Convert positions to numpy array\n    if to_original_coord:\n        positions = transform_to_original_coordinates(\n            positions, scale_origin, original_mean_pos, rotation_matrices\n        )\n        \n    positions_np = positions.detach().cpu().numpy()\n\n    \n    # Create vertex data with positions and material IDs\n    vertex_data = np.zeros(positions_np.shape[0], dtype=[\n        ('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n        ('material_id', 'i4'),\n        ('density', 'f4'), ('E', 'f4'), ('nu', 'f4'),\n    ])\n    \n    # Fill in the vertex data\n    vertex_data['x'] = positions_np[:, 0]\n    vertex_data['y'] = positions_np[:, 1]\n    vertex_data['z'] = positions_np[:, 2]\n    vertex_data['material_id'] = material_ids\n    vertex_data['density'] = density\n    vertex_data['E'] = E\n    vertex_data['nu'] = nu\n    # Create the PLY element\n    vertex_element = PlyElement.describe(vertex_data, 'vertex')\n    \n    # Create the PLY file\n    PlyData([vertex_element], text=True).write(output_path)\n    \n    print(f\"Saved semantic point cloud to {output_path}\")\n\n\ndef load_point_cloud(ply_path, opacity_value=0.5, sh_degree=3):\n    \"\"\"\n    Load a point cloud from a PLY file and prepare it for simulation.\n    \n    Args:\n        ply_path: Path to the PLY file\n        opacity_value: Default opacity to assign to all points\n        sh_degree: SH degree for the Gaussian model\n    \n    Returns:\n        Dictionary with positions, default covariances, and opacities\n    \"\"\"\n\n    \n    # Load the point cloud\n    plydata = PlyData.read(ply_path)\n    vertex_element = plydata['vertex']\n    \n\n    # Extract positions\n    x = vertex_element['x']\n    y = vertex_element['y']\n    z = vertex_element['z']\n    positions = np.column_stack((x, y, z))\n    \n    # Optional confidence/probability of material assignment\n    conf = vertex_element['conf'].astype(np.float32) if 'conf' in [p.name for p in vertex_element.properties] else np.ones(len(x), dtype=np.float32)\n    \n    # Check if color data exists in the PLY file\n    # Get property names from the vertex element\n    property_names = [p.name for p in vertex_element.properties]\n    has_colors = all(color in property_names for color in ['red', 'green', 'blue'])\n    \n    colors_tensor=None\n    if has_colors:\n        # Extract colors if they exist\n        red = vertex_element['red']\n        green = vertex_element['green']\n        blue = vertex_element['blue']\n        colors = np.column_stack((red, green, blue))\n        colors_tensor = torch.tensor(colors, dtype=torch.float32, device=\"cuda\") / 255.0\n        \n        # Convert colors to DC component (first spherical harmonic)\n        features_dc = colors_tensor.unsqueeze(1) / 0.282095  # SH normalization factor\n    else:\n        # Default to gray color if no colors are present\n        features_dc = torch.ones((positions.shape[0], 1, 3), device=\"cuda\") * 0.5\n    \n    # Create rest of spherical harmonics\n    features_rest = torch.zeros((positions.shape[0], (sh_degree + 1) ** 2 - 1, 3), device=\"cuda\")\n    \n    # Combine into final SH coefficients\n    shs = torch.cat([features_dc, features_rest], dim=1)\n    \n    # Create default covariances (small spheres)\n    default_scale = 0.01  # Small default scale\n    cov = torch.ones((positions.shape[0], 6), device=\"cuda\") * default_scale\n    \n    # Create default opacities\n    opacities = torch.ones((positions.shape[0], 1), device=\"cuda\") * opacity_value\n    \n    # Create placeholder for screen points\n    screen_points = torch.zeros((positions.shape[0], 3), device=\"cuda\")\n    \n    positions_tensor = torch.tensor(positions, device=\"cuda\").float()\n\n    ## if material_id is not present, then set part_labels to material_id\n    if 'part_label' not in vertex_element:\n        part_labels = vertex_element['material_id']\n    else:\n        ## material field\n        part_labels = vertex_element['part_label']\n\n    density = vertex_element['density']\n    E = vertex_element['E']\n    nu = vertex_element['nu']\n    material_id = vertex_element['material_id']\n    \n    \n    return {\n        \"pos\": positions_tensor,\n        \"cov3D_precomp\": cov,\n        \"opacity\": opacities,\n        \"shs\": shs,\n        \"screen_points\": screen_points,\n        \"colors\": colors_tensor,\n\n        ### material field\n        \"part_labels\": part_labels,\n        \"density\": density,\n        \"E\": E,\n        \"nu\": nu,\n        \"material_id\": material_id,\n        \"conf\": conf,\n    }\n\n\n\nclass PipelineParamsNoparse:\n    \"\"\"Same as PipelineParams but without argument parser.\"\"\"\n\n    def __init__(self):\n        self.convert_SHs_python = False\n        self.compute_cov3D_python = False\n        self.debug = False\n\n\ndef load_checkpoint(model_path, sh_degree=3, iteration=-1):\n    # Find checkpoint\n    checkpt_dir = os.path.join(model_path, \"point_cloud\")\n    if iteration == -1:\n        iteration = searchForMaxIteration(checkpt_dir)\n    checkpt_path = os.path.join(\n        checkpt_dir, f\"iteration_{iteration}\", \"point_cloud.ply\"\n    )\n\n    # Load guassians\n    gaussians = GaussianModel(sh_degree)\n    gaussians.load_ply(checkpt_path)\n    return gaussians\n\n\ndef compile_video(folder, output_filename, fps=30):\n    \"\"\"Save a sequence of frames as a video using imageio.\n    \n    Args:\n        folder (str): Directory containing the PNG frames\n        output_filename (str): Path to save the output video\n        fps (int): Frames per second\n    \"\"\"\n    image = []\n    for filename in sorted(os.listdir(folder)):\n        if filename.endswith('.png'):\n            image.append(imageio.imread(os.path.join(folder, filename)))\n    imageio.mimsave(output_filename, image, fps=fps)\n    print(f\"Video successfully saved to: {output_filename}\")\n\n\ndef load_e_field_from_ply(ply_file_path, device=\"cuda\"):\n    \"\"\"Load E values from a PLY file.\"\"\"\n    plydata = PlyData.read(ply_file_path)\n    E_values = plydata['vertex']['E']\n    return torch.tensor(E_values, dtype=torch.float32).to(device)\n\n\ndef cov3D_to_log_scales_and_quats(cov3D: torch.Tensor):\n    \"\"\"\n    cov3D : (N,6) Gaussian symmetric covariance (σ₁₁, σ₁₂, σ₁₃, σ₂₂, σ₂₃, σ₃₃)\n    returns\n        log_scales : (N,3)  (log sₓ, log s_y, log s_z)\n        quats      : (N,4)  (w, x, y, z)  right–handed, unit length\n    \"\"\"\n    N = cov3D.shape[0]\n    Σ = cov3D.new_zeros((N,3,3))\n    Σ[:,0,0] = cov3D[:,0] ; Σ[:,0,1] = Σ[:,1,0] = cov3D[:,1]\n    Σ[:,0,2] = Σ[:,2,0] = cov3D[:,2] ; Σ[:,1,1] = cov3D[:,3]\n    Σ[:,1,2] = Σ[:,2,1] = cov3D[:,4] ; Σ[:,2,2] = cov3D[:,5]\n\n    # eigen-decomposition  (ascending order)\n    evals, evecs = torch.linalg.eigh(Σ)          # (N,3) , (N,3,3)\n\n    # put the largest scale first, like gaussian-splatting does\n    idx = torch.argsort(evals, dim=1, descending=True)\n    evals  = evals.gather(1, idx)\n    evecs  = evecs.gather(2, idx.unsqueeze(1).expand(-1,3,-1))\n\n    scales = torch.sqrt(torch.clamp(evals, min=1e-12))\n    log_scales = torch.log(scales)\n\n    # rotation: R = eigenvectorsᵀ\n    R = evecs\n\n    # enforce right-handedness\n    det = torch.det(R)\n    neg = det < 0\n    if neg.any():\n        R[neg,:,2] *= -1\n\n    quats_xyzw = torch.tensor(scipy_R.from_matrix(R.detach().cpu()).as_quat(), device=R.device)\n    quats_wxyz = quats_xyzw[:, [3,0,1,2]]       # convert (x,y,z,w) -> (w,x,y,z)\n    return log_scales, quats_wxyz\n\ndef export_gaussians_to_ply(ply_out_dir, mpm_solver, active_sh_degree, gs_num,\n                            scale_origin, rotation_matrices,\n                            opacity_render, shs_render, frame, preprocessing_params, original_mean_pos,\n                            to_original_coord=True):\n\n    # ── 1.  Pull positions and covariances ────────────────────────────────\n    pos = mpm_solver.export_particle_x_to_torch()[:gs_num]                        # (gs_num,3)\n    if to_original_coord:\n        pos = transform_to_original_coordinates(\n            undoshift2center111(pos, preprocessing_params[\"z_shift_value\"]),\n            scale_origin, original_mean_pos, rotation_matrices\n        )\n\n    cov_raw = mpm_solver.export_particle_cov_to_torch().view(-1, 6)[:gs_num]\n    cov_world = apply_inverse_cov_rotations(\n        cov_raw / (scale_origin**2), rotation_matrices)\n\n    log_s, quat_wxyz = cov3D_to_log_scales_and_quats(cov_world.cpu())             # (gs_num,3) (gs_num,4)\n\n    # ── 2.  Build a fully-formed GaussianModel stub ───────────────────────\n    out_gs = GaussianModel(active_sh_degree)\n\n    out_gs._xyz           = pos.detach()                                           # (gs_num,3)\n    out_gs._opacity       = opacity_render[:gs_num].detach()                       # (gs_num,1)\n    out_gs._features_dc   = shs_render[:gs_num, :1, :].detach()                    # (gs_num,1,3)\n    out_gs._features_rest = shs_render[:gs_num, 1:, :].detach()                    # (gs_num,(Ks-1),3)\n    out_gs._scaling       = log_s\n    out_gs._rotation      = quat_wxyz\n\n    # ── 3.  Write PLY using the repo's own routine ────────────────────────\n    ply_path = os.path.join(ply_out_dir, f\"frame_{frame:05d}.ply\")\n    os.makedirs(os.path.dirname(ply_path), exist_ok=True)\n    out_gs.save_ply(ply_path)\n\n\n\ndef save_boundary_conditions(boundary_conditions, output_path):\n    \"\"\"\n    Save collected boundary conditions to a JSON file.\n    \n    Args:\n        boundary_conditions: List of boundary condition dictionaries\n        output_path: Directory to save the boundary conditions file\n    \"\"\"\n    bc_file_path = os.path.join(output_path, \"boundary_conditions.json\")\n    \n    # Convert numpy arrays to lists for JSON serialization\n    serializable_bcs = []\n    for bc in boundary_conditions:\n        serializable_bc = {}\n        for key, value in bc.items():\n            if isinstance(value, np.ndarray):\n                serializable_bc[key] = value.tolist()\n            elif isinstance(value, np.integer):\n                serializable_bc[key] = int(value)\n            elif isinstance(value, np.floating):\n                serializable_bc[key] = float(value)\n            else:\n                serializable_bc[key] = value\n        serializable_bcs.append(serializable_bc)\n    \n    with open(bc_file_path, 'w') as f:\n        json.dump(serializable_bcs, f, indent=2)\n\n\ndef setup_simulation(args):\n    \"\"\"Initialize and setup the simulation environment\"\"\"\n    # Load scene config\n    print(\"Loading scene config...\")\n    material_params, bc_params, time_params, preprocessing_params, camera_params = decode_param_json(args.config)\n\n    # Load gaussians\n    print(\"Loading gaussians...\")\n    gaussians = load_checkpoint(args.model_path)\n    print(\"loaded from\", args.model_path)\n    \n    pipeline = PipelineParamsNoparse()\n    pipeline.compute_cov3D_python = True\n    background = (\n        torch.tensor([1, 1, 1], dtype=torch.float32, device=\"cuda\")\n        if args.white_bg\n        else torch.tensor([0, 0, 0], dtype=torch.float32, device=\"cuda\")\n    )\n    \n    return material_params, bc_params, time_params, preprocessing_params, camera_params, gaussians, pipeline, background\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--model_path\", type=str, required=True)\n    parser.add_argument(\"--output_path\", type=str, default=None)\n    parser.add_argument(\"--config\", type=str, required=True)\n    parser.add_argument(\"--save_ply\", action=\"store_true\")\n\n    parser.add_argument(\"--render_img\", action=\"store_true\")\n    parser.add_argument(\"--compile_video\", action=\"store_true\")\n    parser.add_argument(\"--white_bg\", action=\"store_true\")\n    parser.add_argument(\"--debug\", action=\"store_true\")\n    parser.add_argument(\"--point_cloud_path\", type=str, help=\"Path to input point cloud PLY file\")\n    parser.add_argument(\"--optimization_output_path\", type=str, default=None, help=\"Path to the output directory of the optimization run (containing E_field_epoch_XX.ply)\")\n    parser.add_argument(\"--replay_epoch\", type=int, default=None, required=False, help=\"Epoch number of the E-field to load for replay. If None, uses the latest epoch found.\")\n\n    args = parser.parse_args()\n\n    assert os.path.exists(args.model_path), \"Model path does not exist!\"\n    assert os.path.exists(args.config), \"Scene config does not exist!\"\n    if args.output_path is not None and not os.path.exists(args.output_path):\n        os.makedirs(args.output_path)\n\n    # Setup simulation\n    material_params, bc_params, time_params, preprocessing_params, camera_params, gaussians, pipeline, background = setup_simulation(args)\n\n    print(\"Initializing scene and pre-processing...\")\n    params = load_params_from_gs(gaussians, pipeline)\n\n    mask = params[\"opacity\"][:, 0] > preprocessing_params[\"opacity_threshold\"]\n    init_pos = params[\"pos\"][mask, :]\n    init_cov = params[\"cov3D_precomp\"][mask, :]\n    init_opacity = params[\"opacity\"][mask, :]\n    init_shs = params[\"shs\"][mask, :]\n    init_screen_points = params[\"screen_points\"][mask, :]\n    print(f\"Particles remaining {init_pos.shape[0]} after filtering based on opacity.\")\n\n    rotation_matrices = generate_rotation_matrices(\n        torch.tensor(preprocessing_params[\"rotation_degree\"]),\n        preprocessing_params[\"rotation_axis\"],\n    )\n    rotated_pos = apply_rotations(init_pos, rotation_matrices)\n\n    unselected_pos, unselected_cov, unselected_opacity, unselected_shs = (None, None, None, None)\n    if preprocessing_params[\"sim_area\"] is not None:\n        boundary = preprocessing_params[\"sim_area\"]\n        mask = torch.ones(rotated_pos.shape[0], dtype=torch.bool, device=\"cuda\")\n        for i in range(3):\n            mask &= (rotated_pos[:, i] > boundary[2 * i]) & (rotated_pos[:, i] < boundary[2 * i + 1])\n\n        unselected_pos = init_pos[~mask, :]\n        unselected_cov = init_cov[~mask, :]\n        unselected_opacity = init_opacity[~mask, :]\n        unselected_shs = init_shs[~mask, :]\n\n        rotated_pos = rotated_pos[mask, :]\n        init_cov = init_cov[mask, :]\n        init_opacity = init_opacity[mask, :]\n        init_shs = init_shs[mask, :]\n\n    transformed_pos, scale_origin, original_mean_pos = transform2origin(rotated_pos)\n    transformed_pos = shift2center111(transformed_pos, preprocessing_params[\"z_shift_value\"])\n    init_cov = apply_cov_rotations(init_cov, rotation_matrices) * (scale_origin ** 2)\n\n    gs_num = transformed_pos.shape[0]\n    device = \"cuda:0\"\n    filling_params = preprocessing_params.get(\"particle_filling\")\n\n    if filling_params:\n        print(\"Filling internal particles...\")\n        mpm_init_pos = fill_particles(\n            pos=transformed_pos,\n            opacity=init_opacity,\n            cov=init_cov,\n            grid_n=filling_params[\"n_grid\"],\n            max_samples=filling_params[\"max_particles_num\"],\n            grid_dx=material_params[\"grid_lim\"] / filling_params[\"n_grid\"],\n            density_thres=filling_params[\"density_threshold\"],\n            search_thres=filling_params[\"search_threshold\"],\n            max_particles_per_cell=filling_params[\"max_partciels_per_cell\"],\n            search_exclude_dir=filling_params[\"search_exclude_direction\"],\n            ray_cast_dir=filling_params[\"ray_cast_direction\"],\n            boundary=filling_params[\"boundary\"],\n            smooth=filling_params[\"smooth\"],\n        ).to(device=device)\n    else:\n        mpm_init_pos = transformed_pos.to(device=device)\n\n    print(\"Initializing MPM solver...\")\n    grid_lim = material_params[\"grid_lim\"]\n    mpm_init_vol = get_particle_volume(\n        mpm_init_pos,\n        material_params[\"n_grid\"],\n        grid_lim / material_params[\"n_grid\"],\n        unifrom=material_params[\"material\"] == \"sand\",\n    ).to(device=device)\n\n    if filling_params and filling_params.get(\"visualize\", False):\n        shs_render, opacity_render, mpm_init_cov = init_filled_particles(\n            mpm_init_pos[:gs_num], init_shs, init_cov, init_opacity, mpm_init_pos[gs_num:]\n        )\n        gs_num = mpm_init_pos.shape[0]\n    else:\n        mpm_init_cov = torch.zeros((mpm_init_pos.shape[0], 6), device=device)\n        mpm_init_cov[:gs_num] = init_cov\n        shs_render, opacity_render = init_shs, init_opacity\n\n    mpm_solver = MPM_Simulator_WARP(10)\n    mpm_solver.load_initial_data_from_torch(\n        mpm_init_pos, mpm_init_vol, mpm_init_cov,\n        n_grid=material_params[\"n_grid\"], grid_lim=grid_lim\n    )\n    mpm_solver.set_parameters_dict(material_params)\n    set_boundary_conditions(mpm_solver, bc_params, time_params)\n\n    pc_params = load_point_cloud(args.point_cloud_path)\n    conf_values, collected_bcs = apply_material_field_to_simulation(\n        mpm_solver, pc_params, device=device,\n        scale_origin=scale_origin, original_mean_pos=original_mean_pos,\n        rotation_matrices=rotation_matrices,\n        fix_ground=preprocessing_params[\"fix_ground\"],\n    k_smoothing_neighbors=preprocessing_params[\"k_smoothing_neighbors\"],\n        nn_distance_threshold=preprocessing_params[\"nn_distance_threshold\"],\n        only_handle_largest_cluster=preprocessing_params[\"only_handle_largest_cluster\"],\n        debug=args.debug,\n    )\n\n    # Save collected boundary conditions\n    if collected_bcs and args.debug:\n        save_boundary_conditions(collected_bcs, args.output_path)\n        print(f\"Saved {len(collected_bcs)} boundary conditions to {args.output_path}\")\n\n    if args.optimization_output_path:\n        replay_epoch_to_use = args.replay_epoch\n        if replay_epoch_to_use is None:\n            print(f\"Searching for latest epoch in {args.optimization_output_path}...\")\n            latest_epoch = -1\n            epoch_pattern = re.compile(r\"E_field_epoch_(\\d+)\\.ply\")\n            try:\n                for filename in os.listdir(args.optimization_output_path):\n                    match = epoch_pattern.match(filename)\n                    if match and int(match.group(1)) > latest_epoch:\n                        latest_epoch = int(match.group(1))\n            except FileNotFoundError:\n                raise FileNotFoundError(f\"Optimization output path not found: {args.optimization_output_path}\")\n\n            if latest_epoch == -1:\n                raise FileNotFoundError(f\"No E_field_epoch_*.ply files found in {args.optimization_output_path}\")\n            replay_epoch_to_use = latest_epoch\n\n        e_field_ply_path = os.path.join(args.optimization_output_path, f\"E_field_epoch_{replay_epoch_to_use:02d}.ply\")\n        optimized_E = load_e_field_from_ply(e_field_ply_path, device=device) * 1e7\n        mpm_solver.mpm_model.E = wp.from_torch(optimized_E.contiguous())\n        print(f\"Loaded optimized E-field from epoch {replay_epoch_to_use} into the MPM solver.\")\n\n    mpm_solver.finalize_mu_lam()\n\n    mpm_space_viewpoint_center = torch.tensor(camera_params[\"mpm_space_viewpoint_center\"], device=\"cuda\").view(1, 3)\n    mpm_space_vertical_upward_axis = torch.tensor(camera_params[\"mpm_space_vertical_upward_axis\"], device=\"cuda\").view(1, 3)\n    viewpoint_center_worldspace, observant_coordinates = get_center_view_worldspace_and_observant_coordinate(\n        mpm_space_viewpoint_center, mpm_space_vertical_upward_axis,\n        rotation_matrices, scale_origin, original_mean_pos,\n    )\n\n    \n\n    ## FOR DEBUGGING\n    if args.debug:\n        save_semantic_point_cloud(mpm_solver,\n                                gs_num,\n                                os.path.join(args.output_path, \"semantic_pc.ply\"),\n                                scale_origin, original_mean_pos, rotation_matrices,\n                                to_original_coord=True,\n                                )\n        save_semantic_point_cloud(mpm_solver,\n                                gs_num,\n                                os.path.join(args.output_path, \"semantic_pc_mpm.ply\"),\n                                scale_origin, original_mean_pos, rotation_matrices,\n                                to_original_coord=False,\n                                )\n    #### \n\n    substep_dt = time_params[\"substep_dt\"]\n    frame_dt = time_params[\"frame_dt\"]\n    frame_num = time_params[\"frame_num\"]\n    step_per_frame = int(frame_dt / substep_dt)\n\n    # Create organized directory structure: sample_X/frames/ and sample_X/ply_files/\n    frames_dir = os.path.join(args.output_path, \"frames\")\n    ply_files_dir = os.path.join(args.output_path, \"ply_files\")\n    \n    if os.path.exists(frames_dir): shutil.rmtree(frames_dir)\n    if os.path.exists(ply_files_dir): shutil.rmtree(ply_files_dir)\n    \n    os.makedirs(frames_dir, exist_ok=True)\n    os.makedirs(ply_files_dir, exist_ok=True)\n\n    for frame in tqdm(range(frame_num), desc=\"Simulating Frames\"):\n        current_camera = get_camera_view(\n            args.model_path,\n            default_camera_index=camera_params[\"default_camera_index\"],\n            center_view_world_space=viewpoint_center_worldspace,\n            observant_coordinates=observant_coordinates,\n            show_hint=camera_params[\"show_hint\"],\n            init_azimuthm=camera_params[\"init_azimuthm\"],\n            init_elevation=camera_params[\"init_elevation\"],\n            init_radius=camera_params[\"init_radius\"],\n            move_camera=camera_params[\"move_camera\"],\n            current_frame=frame,\n            delta_a=camera_params[\"delta_a\"],\n            delta_e=camera_params[\"delta_e\"],\n            delta_r=camera_params[\"delta_r\"],\n        )\n\n        rasterize = initialize_resterize(current_camera, gaussians, pipeline, background)\n        pos = mpm_solver.export_particle_x_to_torch()[:gs_num].to(device)\n\n        if args.render_img:\n            cov3D = mpm_solver.export_particle_cov_to_torch().view(-1, 6)[:gs_num].to(device)\n\n            pos_render = transform_to_original_coordinates(\n                undoshift2center111(pos, preprocessing_params[\"z_shift_value\"]),\n                scale_origin, original_mean_pos, rotation_matrices\n            )\n            cov3D_render = apply_inverse_cov_rotations(cov3D / (scale_origin ** 2), rotation_matrices)\n\n            if unselected_pos is not None:\n                pos_render = torch.cat([pos_render, unselected_pos], dim=0)\n                cov3D_render = torch.cat([cov3D_render, unselected_cov], dim=0)\n                opacity = torch.cat([opacity_render, unselected_opacity], dim=0)\n                shs = torch.cat([shs_render, unselected_shs], dim=0)\n            else:\n                opacity, shs = opacity_render, shs_render\n\n            colors_precomp = convert_SH(shs, current_camera, gaussians, pos_render)\n            rendering, _ = rasterize(\n                means3D=pos_render,\n                means2D=None,\n                shs=None,\n                colors_precomp=colors_precomp,\n                opacities=opacity,\n                scales=None, rotations=None,\n                cov3D_precomp=cov3D_render,\n            )\n\n            if args.save_ply:\n                export_gaussians_to_ply(\n                    ply_files_dir, mpm_solver,\n                    gaussians.active_sh_degree, gs_num, scale_origin,\n                    rotation_matrices, opacity_render, shs_render, frame, \n                    preprocessing_params, original_mean_pos,\n                    to_original_coord=preprocessing_params[\"to_original_coord\"],\n                )\n\n            cv2_img = cv2.cvtColor(rendering.permute(1, 2, 0).detach().cpu().numpy(), cv2.COLOR_BGR2RGB)\n            cv2.imwrite(os.path.join(frames_dir, f\"{frame:05d}.png\"), 255 * cv2_img)\n\n        for _ in range(step_per_frame):\n            mpm_solver.p2g2p(frame, substep_dt, device=device)\n\n    if args.render_img and args.compile_video:\n        frame_files = sorted(glob.glob(os.path.join(frames_dir, '*.png')))\n        if frame_files:\n            fps = int(1.0 / time_params[\"frame_dt\"])\n            video_path = os.path.join(frames_dir, 'output.mp4')\n            compile_video(frames_dir, video_path, fps)"
  },
  {
    "path": "third_party/PhysGaussian/material_field.py",
    "content": "import numpy as np\nimport torch\nimport json\nimport os\nimport warp as wp\nfrom tqdm import tqdm\nfrom sklearn.cluster import DBSCAN\nfrom sklearn.neighbors import NearestNeighbors\nimport matplotlib.pyplot as plt\nfrom utils.transformation_utils import *\nfrom collections import Counter\nfrom pprint import pprint\nfrom mpm_solver_warp.mpm_solver_warp import get_material_name\nfrom plyfile import PlyData, PlyElement\n\n# Constants\nDEFAULT_VALUES = {\n    'density': 1000.0,\n    'E': 5000.0,\n    'nu': 0.3,\n    'part_label': 0,\n    'material_id': 'stationary'  # Will be converted to ID later\n}\n\nclass MaterialProperties:\n    \"\"\"Encapsulates material properties and provides helper methods\"\"\"\n    \n    def __init__(self, part_labels, densities, E_values, nu_values, material_ids, conf_values):\n        self.properties = {\n            'part_labels': part_labels,\n            'density': densities, \n            'E': E_values,\n            'nu': nu_values,\n            'material_id': material_ids,\n            'conf': conf_values\n        }\n    \n    def get_defaults(self, n_particles):\n        \"\"\"Get default values for all properties\"\"\"\n        defaults = {}\n        for key, values in self.properties.items():\n            if key == 'material_id':\n                default_val = get_material_name(\"stationary\")\n            elif key in ['part_labels']:\n                default_val = DEFAULT_VALUES['part_label']\n            else:\n                default_val = np.mean(values) if len(values) > 0 else DEFAULT_VALUES.get(key, 0.0)\n            \n            defaults[key] = np.full(n_particles, default_val, dtype=values.dtype if hasattr(values, 'dtype') else np.float32)\n        return defaults\n    \n    def assign_from_neighbors(self, particle_idx, neighbor_indices, distances, weighted=False):\n        \"\"\"Assign material properties from K nearest neighbors\"\"\"\n        results = {}\n        \n        # Distance-based weights\n        weights = 1.0 / (distances + 1e-8)\n        weights = weights / np.sum(weights)\n        \n        for prop_name, prop_values in self.properties.items():\n            neighbor_values = prop_values[neighbor_indices]\n            \n            if prop_name in ['material_id', 'part_labels']:\n                # Categorical properties - use mode (weighted or unweighted)\n                if weighted:\n                    unique_vals, inv_indices = np.unique(neighbor_values, return_inverse=True)\n                    votes = np.bincount(inv_indices, weights=weights)\n                    results[prop_name] = unique_vals[np.argmax(votes)]\n                else:\n                    results[prop_name] = Counter(neighbor_values).most_common(1)[0][0]\n            else:\n                # Continuous properties - use mean (weighted or unweighted)\n                if weighted:\n                    results[prop_name] = np.dot(weights, neighbor_values)\n                else:\n                    results[prop_name] = np.mean(neighbor_values)\n        \n        return results\n\n\ndef transform_to_original_coordinates(positions, scale_origin, original_mean_pos, rotation_matrices):\n    \"\"\"Helper function to transform positions back to original coordinate system\"\"\"\n    return apply_inverse_rotations(\n        undotransform2origin(positions, scale_origin, original_mean_pos),\n        rotation_matrices,\n    )\n\n\ndef scene_bounds(positions):\n    return {\n        \"x\": [positions[:, 0].min(), positions[:, 0].max()],\n        \"y\": [positions[:, 1].min(), positions[:, 1].max()],\n        \"z\": [positions[:, 2].min(), positions[:, 2].max()],\n    }\n\ndef save_points_as_ply(positions, colors, output_path, point_type=\"points\"):\n    \"\"\"\n    Save points as PLY file for visualization with trimesh or other tools.\n    \n    Args:\n        positions: (N, 3) numpy array of point positions\n        colors: (N, 3) numpy array of RGB colors (0-255) or (N,) array of labels\n        output_path: Path to save the PLY file\n        point_type: Description of what these points represent\n    \"\"\"\n    if len(positions) == 0:\n        print(f\"No {point_type} to save\")\n        return\n        \n    # Ensure positions is the right shape\n    positions = np.asarray(positions)\n    assert positions.shape[1] == 3, f\"Positions must be (N, 3), got {positions.shape}\"\n    \n    # Handle colors - if it's labels, convert to colors\n    colors = np.asarray(colors)\n    if colors.ndim == 1:\n        # Convert labels to colors\n        unique_labels = np.unique(colors)\n        # Create a simple color palette\n        palette = plt.cm.tab10(np.linspace(0, 1, len(unique_labels)))[:, :3] * 255\n        color_map = {label: palette[i % len(palette)] for i, label in enumerate(unique_labels)}\n        colors = np.array([color_map[label] for label in colors])\n    \n    # Ensure colors are uint8\n    colors = colors.astype(np.uint8)\n    \n    # Create structured array for PLY format\n    vertex_data = np.array([\n        (positions[i, 0], positions[i, 1], positions[i, 2], \n         colors[i, 0], colors[i, 1], colors[i, 2])\n        for i in range(len(positions))\n    ], dtype=[('x', 'f4'), ('y', 'f4'), ('z', 'f4'), \n              ('red', 'u1'), ('green', 'u1'), ('blue', 'u1')])\n    \n    # Create PLY element\n    vertex_element = PlyElement.describe(vertex_data, 'vertex')\n    \n    # Write PLY file\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n    PlyData([vertex_element]).write(output_path)\n    print(f\"Saved {len(positions)} {point_type} to {output_path}\")\n\n\ndef save_dbscan_debug_data(positions, labels, output_dir=\"dbscan_debug\"):\n    \"\"\"\n    Save DBSCAN clustering results as separate PLY files for debugging.\n    \n    Args:\n        positions: (N, 3) numpy array of point positions  \n        labels: (N,) numpy array of cluster labels from DBSCAN\n        output_dir: Directory to save debug files\n    \"\"\"\n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Save noise points (label == -1)\n    noise_mask = (labels == -1)\n    if np.any(noise_mask):\n        noise_positions = positions[noise_mask]\n        noise_colors = np.full((len(noise_positions), 3), [255, 0, 0])  # Red for noise\n        save_points_as_ply(\n            noise_positions, \n            noise_colors, \n            os.path.join(output_dir, \"noise_points.ply\"),\n            \"noise points\"\n        )\n    \n    # Save each cluster separately\n    unique_labels = np.unique(labels)\n    valid_labels = unique_labels[unique_labels != -1]\n    \n    if len(valid_labels) > 0:\n        # Create color palette for clusters\n        cluster_colors = plt.cm.tab10(np.linspace(0, 1, len(valid_labels)))[:, :3] * 255\n        \n        for i, cluster_id in enumerate(valid_labels):\n            cluster_mask = (labels == cluster_id)\n            cluster_positions = positions[cluster_mask]\n            cluster_color = np.full((len(cluster_positions), 3), cluster_colors[i % len(cluster_colors)])\n            \n            \n            save_points_as_ply(\n                cluster_positions,\n                cluster_color,\n                os.path.join(output_dir, f\"cluster_{cluster_id}.ply\"),\n                f\"cluster {cluster_id}\"\n            )\n    \n    # Save all points with cluster colors\n    all_colors = np.zeros((len(positions), 3))\n    for i, cluster_id in enumerate(valid_labels):\n        cluster_mask = (labels == cluster_id)\n        all_colors[cluster_mask] = cluster_colors[i % len(cluster_colors)]\n    \n    # Color noise points red\n    noise_mask = (labels == -1)\n    all_colors[noise_mask] = [255, 0, 0]\n    \n    save_points_as_ply(\n        positions,\n        all_colors,\n        os.path.join(output_dir, \"all_clusters.ply\"),\n        \"all clustered points\"\n    )\n    \n    print(f\"Saved DBSCAN debug data to {output_dir}/\")\n    print(f\"  - {np.sum(noise_mask)} noise points\")\n    print(f\"  - {len(valid_labels)} clusters\")\n    for i, cluster_id in enumerate(valid_labels):\n        cluster_size = np.sum(labels == cluster_id)\n        print(f\"    Cluster {cluster_id}: {cluster_size} points\")\n\n\ndef extract_material_properties(params):\n    \"\"\"Extract and convert material properties from params dictionary\"\"\"\n    def to_numpy(tensor_or_array):\n        return tensor_or_array.cpu().numpy() if torch.is_tensor(tensor_or_array) else tensor_or_array\n    \n    part_labels = to_numpy(params['part_labels'])\n    densities = to_numpy(params['density']) \n    E_values = to_numpy(params['E'])\n    nu_values = to_numpy(params['nu'])\n    material_ids = to_numpy(params['material_id'])\n    conf_values = params['conf']  # numpy array already\n    \n    return MaterialProperties(part_labels, densities, E_values, nu_values, material_ids, conf_values)\n\n\ndef perform_knn_smoothing(mpm_solver, params, device, scale_origin, original_mean_pos, \n                         rotation_matrices, k_smoothing_neighbors, nn_distance_threshold, \n                         weighted_assignment, debug):\n    \"\"\"Perform K-NN smoothing interpolation for material assignment\"\"\"\n    n_particles = mpm_solver.n_particles\n    material_props = extract_material_properties(params)\n    \n    # Check if smoothing is needed\n    if len(material_props.properties['part_labels']) == n_particles:\n        print(f\">> Material field data matches MPM solver ({n_particles} particles). No K-NN smoothing applied.\")\n        return tuple(material_props.properties.values())\n    \n    print(f\"Material field data ({len(material_props.properties['part_labels'])} particles) doesn't match MPM solver ({n_particles} particles). Performing K-NN smoothing interpolation (K={k_smoothing_neighbors}).\")\n    \n    # Get and transform positions\n    material_positions = params['pos'].cpu().numpy() if torch.is_tensor(params['pos']) else params['pos']\n    mpm_positions_torch = mpm_solver.export_particle_x_to_torch().to(device)\n    mpm_positions_transformed_np = transform_to_original_coordinates(\n        undoshift2center111(mpm_positions_torch), \n        scale_origin, original_mean_pos, rotation_matrices\n    ).detach().cpu().numpy()\n\n    print(\"Material Field Point Cloud Bounds:\", scene_bounds(material_positions))\n    print(\"MPM Particles Bounds:\", scene_bounds(mpm_positions_transformed_np))\n    \n    # Build KNN model and find neighbors\n    nn_model = NearestNeighbors(n_neighbors=k_smoothing_neighbors, algorithm='auto').fit(material_positions)\n    distances_all_k, k_indices = nn_model.kneighbors(mpm_positions_transformed_np)\n    \n    # Filter out particles that are too far\n    too_far_mask = distances_all_k[:, 0] > nn_distance_threshold\n    n_too_far, n_assigned = np.sum(too_far_mask), np.sum(~too_far_mask)\n    print(f\"Particles too far from nearest neighbor: {n_too_far}, Assigned: {n_assigned}\")\n\n    if debug and n_too_far > 0:\n        save_points_as_ply(\n            mpm_positions_transformed_np[too_far_mask],\n            np.full((n_too_far, 3), [0, 0, 0]),\n            \"material_field_debug/too_far_particles.ply\",\n            \"particles too far from material field\"\n        )\n\n    assert n_too_far <= 0.1 * n_particles, f\"[CRITICAL] More than 10% of particles are too far from nearest neighbor. Distance threshold: {nn_distance_threshold}.\"\n\n    # Initialize arrays with defaults\n    mapped_properties = material_props.get_defaults(n_particles)\n    \n    # Assign properties for particles that are close enough\n    active_indices = np.where(~too_far_mask)[0]\n    print(f\"Smoothing with k_smoothing_neighbors: {k_smoothing_neighbors}\")\n    \n    for i in tqdm(active_indices, desc=\"Smoothing material assignment\", leave=False):\n        neighbor_indices = k_indices[i]\n        distances = distances_all_k[i]\n        \n        # Get assignments for this particle from its neighbors\n        assignments = material_props.assign_from_neighbors(i, neighbor_indices, distances, weighted_assignment)\n        \n        # Update the mapped arrays\n        for prop_name, value in assignments.items():\n            mapped_properties[prop_name][i] = value\n    \n    print(f\"K-NN smoothing complete. Avg distance to closest point: {distances_all_k[:, 0].mean():.6f}\")\n    print(f\"Particles assigned default properties: {n_too_far}\")\n    \n    return tuple(mapped_properties.values())\n\n\ndef apply_material_field_to_simulation(mpm_solver, params, device=\"cuda:0\",\n                                       scale_origin=None, original_mean_pos=None, rotation_matrices=None,\n                                       only_handle_largest_cluster=True, fix_ground=True, \n                                       ground_delta_z=0.05, ground_buffer_xy=0.5,\n                                       k_smoothing_neighbors=10,\n                                       nn_distance_threshold=0.1,\n                                       weighted_assignment=False,\n                                       debug=False,\n                                       ):\n    \"\"\"Apply material properties to particles based on material field data loaded from a point cloud.\"\"\"\n    # Check if material properties exist in the params\n    missing = [k for k in ['part_labels', 'density', 'E', 'nu', 'material_id', 'conf'] if k not in params]\n    assert not missing, f\"Missing required keys: {missing}, Available: {list(params.keys())}\"\n    \n    # Get the number of particles\n    n_particles = mpm_solver.n_particles\n    conf_values = params['conf']\n    print(f\"Loaded confidence values: shape={conf_values.shape}, range=[{conf_values.min():.3f}, {conf_values.max():.3f}]\")\n    \n    # Perform K-NN smoothing if needed\n    part_labels, densities, E_values, nu_values, material_ids, conf_values = perform_knn_smoothing(\n        mpm_solver, params, device, scale_origin, original_mean_pos, rotation_matrices,\n        k_smoothing_neighbors, nn_distance_threshold, weighted_assignment, debug\n    )\n    \n    # Setup boundary conditions\n    positions = mpm_solver.mpm_state.particle_x.numpy()\n    bc_conditions = []\n    \n    if fix_ground:\n        print(\"Adding ground boundary condition...\")\n        bc_conditions += fix_to_ground(mpm_solver, positions, ground_delta_z, ground_buffer_xy)\n    \n    bc_conditions += handle_stationary_clusters(\n        mpm_solver, positions, material_ids, eps=0.03, min_samples=8, \n        start_time=0.0, end_time=1e9, buffer=0.1,\n        only_handle_largest_cluster=only_handle_largest_cluster,\n        debug_output_dir=\"stationary_clusters_debug\", debug=debug\n    )\n\n    # Apply material properties to all particles\n    _apply_material_properties_to_solver(mpm_solver, positions, densities, E_values, nu_values, material_ids, device)\n    \n    print(\"Material IDs: \", np.unique(material_ids, return_counts=True))\n    return conf_values, bc_conditions\n\n\ndef _apply_material_properties_to_solver(mpm_solver, positions, densities, E_values, nu_values, material_ids, device):\n    \"\"\"Apply material properties to the MPM solver efficiently\"\"\"\n    n_particles = len(positions)\n    \n    # Create material parameters list efficiently\n    additional_params_list = [\n        {\n            \"point\": positions[i].tolist(),\n            \"size\": [0.001, 0.001, 0.001],  # Tiny region for each particle\n            \"density\": float(densities[i]),\n            \"E\": float(E_values[i]),\n            \"nu\": float(nu_values[i]),\n            \"material\": int(material_ids[i]),\n        }\n        for i in tqdm(range(n_particles), desc=\"Applying material properties\", leave=False)\n    ]\n    \n    # Apply to solver\n    material_params = {\"additional_material_params\": additional_params_list}\n    mpm_solver.set_parameters_dict(material_params, device=device)\n    mpm_solver.finalize_mu_lam(device=device)\n\ndef handle_stationary_clusters(mpm_solver, positions, material_ids,\n                               eps=0.03, min_samples=10,\n                               start_time=0.0, end_time=1e6, buffer=0.0,\n                               only_handle_largest_cluster=True,\n                               debug_output_dir=\"stationary_clusters_debug\",\n                               debug=False):\n    \"\"\"\n    Automatically clusters stationary particles and creates one cuboid BC per cluster.\n    \n    Args:\n        mpm_solver: your MPM_Simulator_WARP or similar solver instance\n        positions: (N, 3) numpy array of particle positions\n        material_ids: length-N array of material IDs for each particle\n        eps: DBSCAN max distance for two samples to be in the same neighborhood\n        min_samples: DBSCAN min number of samples to form a dense region\n        start_time: BC start time\n        end_time: BC end time\n        buffer: an optional buffer to extend each bounding box in all directions (in world units)\n        only_handle_largest_cluster: if True, only create a boundary condition for the largest cluster\n        debug_output_dir: Directory to save debug PLY files\n    \"\"\"\n    # 1) Filter only the stationary particles\n    stationary_mask = (material_ids == get_material_name(\"stationary\"))\n    print(\">>> stationary_mask: \", stationary_mask, \"Number of stationary particles: \", np.sum(stationary_mask),\n          \"material_ids: \", np.unique(material_ids, return_counts=True))\n    stationary_positions = positions[stationary_mask]\n    print(\"[STATIONARY BC] Number of stationary points: \", len(stationary_positions))\n    \n    # Save all stationary particles for debugging\n    if len(stationary_positions) > 0:\n        stationary_colors = np.full((len(stationary_positions), 3), [0, 255, 0])  # Green for stationary\n        save_points_as_ply(\n            stationary_positions,\n            stationary_colors,\n            os.path.join(debug_output_dir, \"stationary_particles.ply\"),\n            \"stationary particles\"\n        )\n    \n    if len(stationary_positions) == 0:\n        print(\"No stationary particles found; skipping cluster-based cuboid BC creation.\")\n        return []\n\n    # 2) Run DBSCAN to find clusters among stationary positions\n    clustering = DBSCAN(eps=eps, min_samples=min_samples)\n    labels = clustering.fit_predict(stationary_positions)\n    \n    # Save DBSCAN results for debugging\n    if debug and len(stationary_positions) > 0:\n        save_dbscan_debug_data(stationary_positions, labels, debug_output_dir)\n\n    unique_labels = np.unique(labels)\n    if len(unique_labels) == 1 and unique_labels[0] == -1:\n        print(\"All stationary points marked as noise by DBSCAN; no cuboid BCs created.\")\n        return []\n    \n    print(\"[STATIONARY BC] Number of 'NOISE' labels: \", np.sum(labels == -1))\n    # Filter out noise label (-1)\n    valid_labels = unique_labels[unique_labels != -1]\n    cluster_sizes = {label: np.sum(labels == label) for label in valid_labels}\n    print(\"[STATIONARY BC] stationary cluster_sizes: \", cluster_sizes)\n    # If only handling the largest cluster, find it and only process that one\n    if only_handle_largest_cluster and len(valid_labels) > 1:\n        # Count number of points in each cluster\n        # Find the label of the largest cluster\n        largest_cluster_label = max(cluster_sizes.items(), key=lambda x: x[1])[0]\n        print(f\"Only handling largest cluster (ID: {largest_cluster_label}) with {cluster_sizes[largest_cluster_label]} points\")\n        # Override valid_labels to only include the largest cluster\n        valid_labels = np.array([largest_cluster_label])\n\n    bc_conditions = []\n    # 3) For each cluster, compute bounding box and add one cuboid BC\n    for cluster_id in valid_labels:\n        cluster_points = stationary_positions[labels == cluster_id]\n        min_xyz = cluster_points.min(axis=0)\n        max_xyz = cluster_points.max(axis=0)\n\n        print(\">> MIN_XYZ: \", min_xyz, \"max_xyz: \", max_xyz)\n\n        # bounding box center\n        center = 0.5 * (min_xyz + max_xyz)\n        # half-size\n        halfsize = 0.5 * (max_xyz - min_xyz)\n\n        # add optional buffer\n        halfsize += buffer\n        # 4) Create a single velocity-on-cuboid boundary condition for this cluster\n        #    velocity=0, effectively pins that region for the entire simulation\n        mpm_solver.set_velocity_on_cuboid(\n            point=center.tolist(),\n            size=halfsize.tolist(),\n            velocity=[0.0, 0.0, 0.0],\n            start_time=start_time,\n            end_time=end_time,\n            reset=1   # reset=1 forcibly sets velocity each step\n        )\n        print(\">>> Created cuboid BC for cluster \", cluster_id, \" at \", center.tolist(), \" with size \", halfsize.tolist(),\n        \"this cluster has \", cluster_sizes[cluster_id], \" points\")\n     \n        # Collect the boundary condition data\n        bc_conditions.append({\n            \"type\": \"stationary_cluster\",\n            \"cluster_id\": int(cluster_id),\n            \"point\": center.tolist(),\n            \"size\": halfsize.tolist(),\n            \"velocity\": [0.0, 0.0, 0.0],\n            \"start_time\": start_time,\n            \"end_time\": end_time,\n            \"reset\": 1,\n            \"cluster_size\": int(cluster_sizes[cluster_id])\n        })\n\n    if only_handle_largest_cluster:\n        print(f\"Created cuboid BC for the largest stationary cluster.\")\n    else:\n        print(f\"Created cuboid BC for {len(valid_labels)} stationary cluster(s).\")\n    return bc_conditions\n\n\n## NOTE: HACK: this assume a canonical pose where the object is upright with Z being the vertical direction\n## this is not necessarily true for some real scenes. TODO: need to preprocess those scenes. Ignoring this issue for now.\ndef fix_to_ground(mpm_solver, positions, delta_z=0.02, buffer_xy=0.5, min_z_percentile=1,\n                  start_time=0.0, end_time=1e6):\n    \"\"\"\n    Creates a thin cuboid boundary condition at the base of the point cloud to fix it to an imaginary ground.\n    \n    Args:\n        mpm_solver: your MPM_Simulator_WARP or similar solver instance\n        positions: (N, 3) numpy array of particle positions\n        delta_z: thickness of the ground boundary condition in z direction\n        buffer_xy: additional buffer to extend the boundary in x and y directions (in world units)\n        min_z_percentile: percentile to use for determining the lowest z position (1=min, 5=5th percentile)\n        start_time: BC start time\n        end_time: BC end time\n        visualize: whether to visualize the ground boundary condition\n        output_path: directory to save visualization if visualize=True\n    \"\"\"\n    # Find the min and max positions in x, y dimensions\n    min_xy = positions[:, :2].min(axis=0)\n    max_xy = positions[:, :2].max(axis=0)\n    \n    # Calculate size of the ground plane in x,y dimensions\n    size_xy = max_xy - min_xy\n    \n    # Find the lowest z-coordinate (using a percentile to avoid outliers)\n    if min_z_percentile > 1:\n        min_z = np.percentile(positions[:, 2], min_z_percentile)\n    else:\n        min_z = positions[:, 2].min()\n    \n    print(f\"Ground BC - Position ranges: X:[{min_xy[0]:.4f}, {max_xy[0]:.4f}], Y:[{min_xy[1]:.4f}, {max_xy[1]:.4f}], Min Z:{min_z:.4f}\")\n    \n    # Calculate center of the ground plane\n    ground_center = [\n        (min_xy[0] + max_xy[0]) / 2,  # x center\n        (min_xy[1] + max_xy[1]) / 2,  # y center\n        min_z + delta_z / 2  # z just above the lowest point\n    ]\n    \n    # Calculate half-size of the ground plane (including buffer)\n    ground_halfsize = [\n        size_xy[0] / 2 + buffer_xy,  # x half-size with buffer\n        size_xy[1] / 2 + buffer_xy,  # y half-size with buffer\n        delta_z / 2  # z half-size (thin layer)\n    ]\n    \n    # Create the velocity-on-cuboid boundary condition for the ground\n    mpm_solver.set_velocity_on_cuboid(\n        point=ground_center,\n        size=ground_halfsize,\n        velocity=[0.0, 0.0, 0.0],\n        start_time=start_time,\n        end_time=end_time,\n        reset=1  # reset=1 forcibly sets velocity each step\n    )\n    \n    print(f\"Created ground boundary condition at {ground_center} with size {ground_halfsize}\")\n    ground_bc = {\n        \"type\": \"ground\",\n        \"point\": ground_center,\n        \"size\": ground_halfsize,\n        \"velocity\": [0.0, 0.0, 0.0],\n        \"start_time\": start_time,\n        \"end_time\": end_time,\n        \"reset\": 1\n    }\n    return [ground_bc]\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/.gitignore",
    "content": "sim_results/\n__pycache__/\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/README.md",
    "content": "# WARP MPM\n<p align=\"center\">\n  <img src=\"assets/sand.gif\">\n</p>\n\nThis MPM solver is implemented using Nvidia's WARP: https://nvidia.github.io/warp/\n\nFor details about MPM, please refer to the course on the Material Point Method: https://www.math.ucla.edu/~cffjiang/research/mpmcourse/mpmcourse.pdf\n\n\n## Prerequisites\n\nThis codebase is tested using the environment with the following key packages:\n\n- Ubuntu 20.04\n- CUDA 11.6\n- Python 3.9.13\n- Warp 0.10.1\n\n## Installation\n```\npip install -r requirements.txt\n```\n\n## Examples\nSand: column collapse \n```\npython run_sand.py\n```\n\nMore coming."
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/engine_utils.py",
    "content": "import numpy as np\nimport h5py\nimport os\nimport sys\nimport warp as wp\nimport torch\nfrom plyfile import PlyData, PlyElement\n\n\ndef save_data_at_frame(mpm_solver, dir_name, frame, save_to_ply=True, save_to_h5=False):\n    os.umask(0)\n    os.makedirs(dir_name, 0o777, exist_ok=True)\n\n    fullfilename = dir_name + \"/sim_\" + str(frame).zfill(10) + \".h5\"\n\n    if save_to_ply:\n        particle_position_to_ply(mpm_solver, fullfilename[:-2] + \"ply\")\n\n    if save_to_h5:\n\n        if os.path.exists(fullfilename):\n            os.remove(fullfilename)\n        newFile = h5py.File(fullfilename, \"w\")\n\n        x_np = (\n            mpm_solver.mpm_state.particle_x.numpy().transpose()\n        )  # x_np has shape (3, n_particles)\n        newFile.create_dataset(\"x\", data=x_np)  # position\n\n        currentTime = np.array([mpm_solver.time]).reshape(1, 1)\n        newFile.create_dataset(\"time\", data=currentTime)  # current time\n\n        f_tensor_np = (\n            mpm_solver.mpm_state.particle_F.numpy().reshape(-1, 9).transpose()\n        )  # shape = (9, n_particles)\n        newFile.create_dataset(\"f_tensor\", data=f_tensor_np)  # deformation grad\n\n        v_np = (\n            mpm_solver.mpm_state.particle_v.numpy().transpose()\n        )  # v_np has shape (3, n_particles)\n        newFile.create_dataset(\"v\", data=v_np)  # particle velocity\n\n        C_np = (\n            mpm_solver.mpm_state.particle_C.numpy().reshape(-1, 9).transpose()\n        )  # shape = (9, n_particles)\n        newFile.create_dataset(\"C\", data=C_np)  # particle C\n        print(\"save siumlation data at frame \", frame, \" to \", fullfilename)\n\n\ndef particle_position_to_ply(mpm_solver, filename):\n    # position is (n,3)\n    if os.path.exists(filename):\n        os.remove(filename)\n    position = mpm_solver.mpm_state.particle_x.numpy()\n    num_particles = (position).shape[0]\n    position = position.astype(np.float32)\n    with open(filename, \"wb\") as f:  # write binary\n        header = f\"\"\"ply\nformat binary_little_endian 1.0\nelement vertex {num_particles}\nproperty float x\nproperty float y\nproperty float z\nend_header\n\"\"\"\n        f.write(str.encode(header))\n        f.write(position.tobytes())\n        print(\"write\", filename)\n\n\ndef particle_position_tensor_to_ply(position_tensor, filename):\n    # position is (n,3)\n    if os.path.exists(filename):\n        os.remove(filename)\n    position = position_tensor.clone().detach().cpu().numpy()\n    num_particles = (position).shape[0]\n    position = position.astype(np.float32)\n    with open(filename, \"wb\") as f:  # write binary\n        header = f\"\"\"ply\nformat binary_little_endian 1.0\nelement vertex {num_particles}\nproperty float x\nproperty float y\nproperty float z\nend_header\n\"\"\"\n        f.write(str.encode(header))\n        f.write(position.tobytes())\n        print(\"write\", filename)\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/mpm_solver_warp.py",
    "content": "import sys\nimport os\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)))\nfrom engine_utils import *\nfrom warp_utils import *\nfrom mpm_utils import *\n\n\nMATERIAL_ID_TO_NAME = {\n    0: \"jelly\",\n    1: \"metal\",\n    2: \"sand\",\n    3: \"visplas\",\n    4: \"fluid\",\n    5: \"snow\",\n    6: \"stationary\"\n}\n\nEXCLUDED_MATERIAL_NAMES = [\"visplas\", \"fluid\"]\nNAME_TO_MATERIAL_ID = {name: i for i, name in MATERIAL_ID_TO_NAME.items() if name not in EXCLUDED_MATERIAL_NAMES}\n# Add aliases\nNAME_TO_MATERIAL_ID.update({\n    \"elastic\": 0,\n    \"rigid\": 6,\n})\n\n\ndef get_material_name(material_id):\n    \"\"\"\n    Convert material ID to a human-readable name based on the MPM material types.\n    \n    Args:\n        material_id: Integer material ID\n        \n    Returns:\n        String name of the material\n    \"\"\"\n    return NAME_TO_MATERIAL_ID.get(material_id, -1)\n\ndef get_material_id(material_name):\n    \"\"\"\n    Convert material name to a material ID based on the MPM material types.\n    \"\"\"\n    return NAME_TO_MATERIAL_ID.get(material_name, -1)\n\nclass MPM_Simulator_WARP:\n    def __init__(self, n_particles, n_grid=100, grid_lim=1.0, device=\"cuda:0\"):\n        self.initialize(n_particles, n_grid, grid_lim, device=device)\n        self.time_profile = {}\n\n    def initialize(self, n_particles, n_grid=100, grid_lim=1.0, device=\"cuda:0\"):\n        self.n_particles = n_particles\n\n        self.mpm_model = MPMModelStruct()\n        self.mpm_model.grid_lim = grid_lim\n        self.mpm_model.n_grid = n_grid\n        self.mpm_model.grid_dim_x = self.mpm_model.n_grid\n        self.mpm_model.grid_dim_y = self.mpm_model.n_grid\n        self.mpm_model.grid_dim_z = self.mpm_model.n_grid\n        (\n            self.mpm_model.dx,\n            self.mpm_model.inv_dx,\n        ) = self.mpm_model.grid_lim / self.mpm_model.n_grid, float(\n            self.mpm_model.n_grid / self.mpm_model.grid_lim\n        )\n\n        self.mpm_model.E = wp.zeros(shape=n_particles, dtype=float, device=device)\n        self.mpm_model.nu = wp.zeros(shape=n_particles, dtype=float, device=device)\n        self.mpm_model.mu = wp.zeros(shape=n_particles, dtype=float, device=device)\n        self.mpm_model.lam = wp.zeros(shape=n_particles, dtype=float, device=device)\n        self.mpm_model.bulk = wp.zeros(shape=n_particles, dtype=float, device=device)\n\n        self.mpm_model.update_cov_with_F = False\n\n        # material is used to switch between different elastoplastic models. 0 is jelly\n        self.mpm_model.material = 0\n\n        self.mpm_model.plastic_viscosity = 0.0\n        self.mpm_model.softening = 0.1\n        self.mpm_model.yield_stress = wp.zeros(\n            shape=n_particles, dtype=float, device=device\n        )\n        self.mpm_model.friction_angle = 25.0\n        sin_phi = wp.sin(self.mpm_model.friction_angle / 180.0 * 3.14159265)\n        self.mpm_model.alpha = wp.sqrt(2.0 / 3.0) * 2.0 * sin_phi / (3.0 - sin_phi)\n\n        self.mpm_model.gravitational_accelaration = wp.vec3(0.0, 0.0, 0.0)\n\n        self.mpm_model.rpic_damping = 0.0  # 0.0 if no damping (apic). -1 if pic\n\n        self.mpm_model.grid_v_damping_scale = 1.1  # globally applied\n\n        self.mpm_state = MPMStateStruct()\n\n        self.mpm_state.particle_x = wp.empty(\n            shape=n_particles, dtype=wp.vec3, device=device\n        )  # current position\n\n        self.mpm_state.particle_v = wp.zeros(\n            shape=n_particles, dtype=wp.vec3, device=device\n        )  # particle velocity\n\n        self.mpm_state.particle_F = wp.zeros(\n            shape=n_particles, dtype=wp.mat33, device=device\n        )  # particle F elastic\n\n        self.mpm_state.particle_R = wp.zeros(\n            shape=n_particles, dtype=wp.mat33, device=device\n        )  # particle R rotation\n\n        self.mpm_state.particle_init_cov = wp.zeros(\n            shape=n_particles * 6, dtype=float, device=device\n        )  # initial covariance matrix\n\n        self.mpm_state.particle_cov = wp.zeros(\n            shape=n_particles * 6, dtype=float, device=device\n        )  # current covariance matrix\n\n        self.mpm_state.particle_F_trial = wp.zeros(\n            shape=n_particles, dtype=wp.mat33, device=device\n        )  # apply return mapping will yield\n\n        self.mpm_state.particle_stress = wp.zeros(\n            shape=n_particles, dtype=wp.mat33, device=device\n        )\n\n        self.mpm_state.particle_vol = wp.zeros(\n            shape=n_particles, dtype=float, device=device\n        )  # particle volume\n        self.mpm_state.particle_mass = wp.zeros(\n            shape=n_particles, dtype=float, device=device\n        )  # particle mass\n        self.mpm_state.particle_density = wp.zeros(\n            shape=n_particles, dtype=float, device=device\n        )\n        self.mpm_state.particle_C = wp.zeros(\n            shape=n_particles, dtype=wp.mat33, device=device\n        )\n        self.mpm_state.particle_Jp = wp.zeros(\n            shape=n_particles, dtype=float, device=device\n        )\n\n        self.mpm_state.particle_selection = wp.zeros(\n            shape=n_particles, dtype=int, device=device\n        )\n\n        self.mpm_state.grid_m = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=float,\n            device=device,\n        )\n        self.mpm_state.grid_v_in = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=wp.vec3,\n            device=device,\n        )\n        self.mpm_state.grid_v_out = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=wp.vec3,\n            device=device,\n        )\n\n\n \n    \n\n\n        self.time = 0.0\n\n        self.grid_postprocess = []\n        self.collider_params = []\n        self.modify_bc = []\n\n        self.tailored_struct_for_bc = MPMtailoredStruct()\n        self.pre_p2g_operations = []\n        self.impulse_params = []\n\n        self.particle_velocity_modifiers = []\n        self.particle_velocity_modifier_params = []\n\n    # the h5 file should store particle initial position and volume.\n    def load_from_sampling(\n        self, sampling_h5, n_grid=100, grid_lim=1.0, device=\"cuda:0\"\n    ):\n        if not os.path.exists(sampling_h5):\n            print(\"h5 file cannot be found at \", os.getcwd() + sampling_h5)\n            exit()\n\n        h5file = h5py.File(sampling_h5, \"r\")\n        x, particle_volume = h5file[\"x\"], h5file[\"particle_volume\"]\n\n        x = x[()].transpose()  # np vector of x # shape now is (n_particles, dim)\n\n        self.dim, self.n_particles = x.shape[1], x.shape[0]\n\n        self.initialize(self.n_particles, n_grid, grid_lim, device=device)\n\n        print(\n            \"Sampling particles are loaded from h5 file. Simulator is re-initialized for the correct n_particles\"\n        )\n        particle_volume = np.squeeze(particle_volume, 0)\n\n        self.mpm_state.particle_x = wp.from_numpy(\n            x, dtype=wp.vec3, device=device\n        )  # initialize warp array from np\n\n        # initial velocity is default to zero\n        wp.launch(\n            kernel=set_vec3_to_zero,\n            dim=self.n_particles,\n            inputs=[self.mpm_state.particle_v],\n            device=device,\n        )\n        # initial velocity is default to zero\n\n        # initial deformation gradient is set to identity\n        wp.launch(\n            kernel=set_mat33_to_identity,\n            dim=self.n_particles,\n            inputs=[self.mpm_state.particle_F_trial],\n            device=device,\n        )\n        # initial deformation gradient is set to identity\n\n        self.mpm_state.particle_vol = wp.from_numpy(\n            particle_volume, dtype=float, device=device\n        )\n\n        print(\"Particles initialized from sampling file.\")\n        print(\"Total particles: \", self.n_particles)\n\n    # shape of tensor_x is (n, 3); shape of tensor_volume is (n,)\n    def load_initial_data_from_torch(\n        self,\n        tensor_x,\n        tensor_volume,\n        tensor_cov=None,\n        n_grid=100,\n        grid_lim=1.0,\n        device=\"cuda:0\",\n    ):\n        self.dim, self.n_particles = tensor_x.shape[1], tensor_x.shape[0]\n        assert tensor_x.shape[0] == tensor_volume.shape[0]\n        # assert tensor_x.shape[0] == tensor_cov.reshape(-1, 6).shape[0]\n        self.initialize(self.n_particles, n_grid, grid_lim, device=device)\n\n        self.import_particle_x_from_torch(tensor_x, device)\n        self.mpm_state.particle_vol = wp.from_numpy(\n            tensor_volume.detach().clone().cpu().numpy(), dtype=float, device=device\n        )\n        if tensor_cov is not None:\n            self.mpm_state.particle_init_cov = wp.from_numpy(\n                tensor_cov.reshape(-1).detach().clone().cpu().numpy(),\n                dtype=float,\n                device=device,\n            )\n\n            if self.mpm_model.update_cov_with_F:\n                self.mpm_state.particle_cov = self.mpm_state.particle_init_cov\n\n        # initial velocity is default to zero\n        wp.launch(\n            kernel=set_vec3_to_zero,\n            dim=self.n_particles,\n            inputs=[self.mpm_state.particle_v],\n            device=device,\n        )\n        # initial velocity is default to zero\n\n        # initial deformation gradient is set to identity\n        wp.launch(\n            kernel=set_mat33_to_identity,\n            dim=self.n_particles,\n            inputs=[self.mpm_state.particle_F_trial],\n            device=device,\n        )\n        # initial trial deformation gradient is set to identity\n\n        print(\"Particles initialized from torch data.\")\n        print(\"Total particles: \", self.n_particles)\n\n    # must give density. mass will be updated as density * volume\n    def set_parameters(self, device=\"cuda:0\", **kwargs):\n        self.set_parameters_dict(device, kwargs)\n\n    def set_parameters_dict(self, kwargs={}, device=\"cuda:0\"):\n        if \"material\" in kwargs:\n            # if kwargs[\"material\"] == \"jelly\":\n            #     self.mpm_model.material = 0\n            # elif kwargs[\"material\"] == \"metal\":\n            #     self.mpm_model.material = 1\n            # elif kwargs[\"material\"] == \"sand\":\n            #     self.mpm_model.material = 2\n            # elif kwargs[\"material\"] == \"foam\":\n            #     self.mpm_model.material = 3\n            # elif kwargs[\"material\"] == \"snow\":\n            #     self.mpm_model.material = 4\n            # elif kwargs[\"material\"] == \"plasticine\":\n            #     self.mpm_model.material = 5\n            # elif kwargs[\"material\"] == \"fluid\":\n            #     self.mpm_model.material = 6\n            # elif kwargs[\"material\"] == \"stationary\":\n            #     self.mpm_model.material = 7\n            # elif kwargs[\"material\"] == \"rock_brittle\":\n            #     self.mpm_model.material = 8\n            # else:\n            #     raise TypeError(\"Undefined material type\")\n            print(\"Setting material to \", kwargs[\"material\"])\n            self.mpm_model.material = get_material_name(kwargs[\"material\"])\n            print(\"Material ID: \", self.mpm_model.material)\n            if self.mpm_model.material == -1:\n                raise TypeError(\"Undefined material type\")\n\n        if \"grid_lim\" in kwargs:\n            self.mpm_model.grid_lim = kwargs[\"grid_lim\"]\n        if \"n_grid\" in kwargs:\n            self.mpm_model.n_grid = kwargs[\"n_grid\"]\n        self.mpm_model.grid_dim_x = self.mpm_model.n_grid\n        self.mpm_model.grid_dim_y = self.mpm_model.n_grid\n        self.mpm_model.grid_dim_z = self.mpm_model.n_grid\n        (\n            self.mpm_model.dx,\n            self.mpm_model.inv_dx,\n        ) = self.mpm_model.grid_lim / self.mpm_model.n_grid, float(\n            self.mpm_model.n_grid / self.mpm_model.grid_lim\n        )\n        self.mpm_state.grid_m = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=float,\n            device=device,\n        )\n        self.mpm_state.grid_v_in = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=wp.vec3,\n            device=device,\n        )\n        self.mpm_state.grid_v_out = wp.zeros(\n            shape=(self.mpm_model.n_grid, self.mpm_model.n_grid, self.mpm_model.n_grid),\n            dtype=wp.vec3,\n            device=device,\n        )\n        ## NOTE: newly added. a new array to store material type for each particle\n        # Add a new array to store material type for each particle\n        self.mpm_state.particle_material = wp.zeros(\n            shape=self.n_particles, dtype=int, device=device\n        )  # particle material type\n            \n        wp.launch(\n                kernel=set_value_to_int_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_state.particle_material, self.mpm_model.material],\n                device=device,\n            )\n\n        if \"E\" in kwargs:\n            wp.launch(\n                kernel=set_value_to_float_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_model.E, kwargs[\"E\"]],\n                device=device,\n            )\n        if \"nu\" in kwargs:\n            wp.launch(\n                kernel=set_value_to_float_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_model.nu, kwargs[\"nu\"]],\n                device=device,\n            )\n        if \"bulk_modulus\" in kwargs:\n            wp.launch(\n                kernel=set_value_to_float_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_model.bulk, kwargs[\"bulk_modulus\"]],\n                device=device\n            )\n\n        if \"yield_stress\" in kwargs:\n            val = kwargs[\"yield_stress\"]\n            wp.launch(\n                kernel=set_value_to_float_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_model.yield_stress, val],\n                device=device,\n            )\n        if \"hardening\" in kwargs:\n            self.mpm_model.hardening = kwargs[\"hardening\"]\n        if \"xi\" in kwargs:\n            self.mpm_model.xi = kwargs[\"xi\"]\n        if \"friction_angle\" in kwargs:\n            self.mpm_model.friction_angle = kwargs[\"friction_angle\"]\n            sin_phi = wp.sin(self.mpm_model.friction_angle / 180.0 * 3.14159265)\n            self.mpm_model.alpha = wp.sqrt(2.0 / 3.0) * 2.0 * sin_phi / (3.0 - sin_phi)\n\n        if \"g\" in kwargs:\n            self.mpm_model.gravitational_accelaration = wp.vec3(\n                kwargs[\"g\"][0], kwargs[\"g\"][1], kwargs[\"g\"][2]\n            )\n\n        if \"spawn_offset\" in kwargs:\n            offset = kwargs[\"spawn_offset\"]\n            pos_torch = self.export_particle_x_to_torch()\n            pos_torch[:, 0] += offset[0]\n            pos_torch[:, 1] += offset[1]\n            pos_torch[:, 2] += offset[2]\n            self.import_particle_x_from_torch(pos_torch)\n\n        if \"density\" in kwargs:\n            density_value = kwargs[\"density\"]\n            wp.launch(\n                kernel=set_value_to_float_array,\n                dim=self.n_particles,\n                inputs=[self.mpm_state.particle_density, density_value],\n                device=device,\n            )\n            wp.launch(\n                kernel=get_float_array_product,\n                dim=self.n_particles,\n                inputs=[\n                    self.mpm_state.particle_density,\n                    self.mpm_state.particle_vol,\n                    self.mpm_state.particle_mass,\n                ],\n                device=device,\n            )\n        if \"rpic_damping\" in kwargs:\n            self.mpm_model.rpic_damping = kwargs[\"rpic_damping\"]\n        if \"plastic_viscosity\" in kwargs:\n            self.mpm_model.plastic_viscosity = kwargs[\"plastic_viscosity\"]\n        if \"softening\" in kwargs:\n            self.mpm_model.softening = kwargs[\"softening\"]\n        if \"grid_v_damping_scale\" in kwargs:\n            self.mpm_model.grid_v_damping_scale = kwargs[\"grid_v_damping_scale\"]\n\n        if \"additional_material_params\" in kwargs:\n            for params in kwargs[\"additional_material_params\"]:\n                param_modifier = MaterialParamsModifier()\n                param_modifier.point = wp.vec3(params[\"point\"])\n                param_modifier.size = wp.vec3(params[\"size\"])\n                if isinstance(params[\"material\"], str):\n                    params[\"material\"] = get_material_name(params[\"material\"])\n                \n                param_modifier.material = params[\"material\"]\n                param_modifier.density = params[\"density\"]\n                param_modifier.E = params[\"E\"]\n                param_modifier.nu = params[\"nu\"]\n                wp.launch(\n                    kernel=apply_additional_params,\n                    dim=self.n_particles,\n                    inputs=[self.mpm_state, self.mpm_model, param_modifier],\n                    device=device,\n                )\n\n            wp.launch(\n                kernel=get_float_array_product,\n                dim=self.n_particles,\n                inputs=[\n                    self.mpm_state.particle_density,\n                    self.mpm_state.particle_vol,\n                    self.mpm_state.particle_mass,\n                ],\n                device=device,\n            )\n\n    def finalize_mu_lam(self, device=\"cuda:0\"):\n        wp.launch(\n            kernel=compute_mu_lam_from_E_nu,\n            dim=self.n_particles,\n            inputs=[self.mpm_state, self.mpm_model],\n            device=device,\n        )\n\n    def debug_particle_positions(self, step_name=\"\"):\n        \"\"\"Debug function to check if particles are within grid bounds\"\"\"\n        import torch\n        \n        # Get particle positions as torch tensor\n        pos_tensor = self.export_particle_x_to_torch()\n        \n        # Check bounds\n        grid_lim = self.mpm_model.grid_lim\n        outside_min = (pos_tensor < 0).any(dim=1).sum().item()\n        outside_max = (pos_tensor > grid_lim).any(dim=1).sum().item()\n        \n        if outside_min > 0 or outside_max > 0:\n            print(f\"[DEBUG {step_name}] WARNING: {outside_min} particles < 0, {outside_max} particles > {grid_lim}\")\n            \n            # Find some example out-of-bounds particles\n            outside_mask = ((pos_tensor < 0) | (pos_tensor > grid_lim)).any(dim=1)\n            outside_indices = torch.where(outside_mask)[0]\n            \n            print(f\"[DEBUG {step_name}] Particle range: [{pos_tensor.min(dim=0)[0][0]:.4f}, {pos_tensor.max(dim=0)[0][0]:.4f}] x \"\n                  f\"[{pos_tensor.min(dim=0)[0][1]:.4f}, {pos_tensor.max(dim=0)[0][1]:.4f}] x \"\n                  f\"[{pos_tensor.min(dim=0)[0][2]:.4f}, {pos_tensor.max(dim=0)[0][2]:.4f}]\")\n            \n            # Print a few examples\n            for i in range(min(5, len(outside_indices))):\n                idx = outside_indices[i].item()\n                print(f\"[DEBUG {step_name}] Out-of-bounds particle {idx}: {pos_tensor[idx]}\")\n            \n            return True\n        return False\n\n    \n    def finalize_mu_lam_bulk(self, device = \"cuda:0\"):\n        wp.launch(kernel = compute_mu_lam_from_E_nu, dim = self.n_particles, inputs = [self.mpm_state, self.mpm_model], device=device)\n        wp.launch(kernel=compute_bulk,\n                  dim=self.n_particles,\n                  inputs=[self.mpm_state, self.mpm_model],\n                  device=device\n                  )\n\n\n    def p2g2p(self, step, dt, device=\"cuda:0\"):\n        # self.debug_particle_positions(\"before_p2g\")\n        grid_size = (\n            self.mpm_model.grid_dim_x,\n            self.mpm_model.grid_dim_y,\n            self.mpm_model.grid_dim_z,\n        )\n        wp.launch(\n            kernel=zero_grid,\n            dim=(grid_size),\n            inputs=[self.mpm_state, self.mpm_model],\n            device=device,\n        )\n\n        # apply pre-p2g operations on particles\n        for k in range(len(self.pre_p2g_operations)):\n            wp.launch(\n                kernel=self.pre_p2g_operations[k],\n                dim=self.n_particles,\n                inputs=[self.time, dt, self.mpm_state, self.impulse_params[k]],\n                device=device,\n            )\n        # apply dirichlet particle v modifier\n        for k in range(len(self.particle_velocity_modifiers)):\n            wp.launch(\n                kernel=self.particle_velocity_modifiers[k],\n                dim=self.n_particles,\n                inputs=[\n                    self.time,\n                    self.mpm_state,\n                    self.particle_velocity_modifier_params[k],\n                ],\n                device=device,\n            )\n\n        # compute stress = stress(returnMap(F_trial))\n        with wp.ScopedTimer(\n            \"compute_stress_from_F_trial\",\n            synchronize=True,\n            print=False,\n            dict=self.time_profile,\n        ):\n            wp.launch(\n                kernel=compute_stress_from_F_trial,\n                dim=self.n_particles,\n                inputs=[self.mpm_state, self.mpm_model, dt],\n                device=device,\n            )  # F and stress are updated\n\n\n        # p2g\n        with wp.ScopedTimer(\n            \"p2g\",\n            synchronize=True,\n            print=False,\n            dict=self.time_profile,\n        ):\n            wp.launch(\n                kernel=p2g_apic_with_stress,\n                dim=self.n_particles,\n                inputs=[self.mpm_state, self.mpm_model, dt],\n                device=device,\n            )  # apply p2g'\n\n        # Add debug after p2g\n        # self.debug_particle_positions(\"after_p2g\")\n\n        # grid update\n        with wp.ScopedTimer(\n            \"grid_update\", synchronize=True, print=False, dict=self.time_profile\n        ):\n            wp.launch(\n                kernel=grid_normalization_and_gravity,\n                dim=(grid_size),\n                inputs=[self.mpm_state, self.mpm_model, dt],\n                device=device,\n            )\n\n        # Add debug after grid update\n        # self.debug_particle_positions(\"after_grid_update\")\n\n        if self.mpm_model.grid_v_damping_scale < 1.0:\n            wp.launch(\n                kernel=add_damping_via_grid,\n                dim=(grid_size),\n                inputs=[self.mpm_state, self.mpm_model.grid_v_damping_scale],\n                device=device,\n            )\n\n        # apply BC on grid\n        with wp.ScopedTimer(\n            \"apply_BC_on_grid\", synchronize=True, print=False, dict=self.time_profile\n        ):\n            for k in range(len(self.grid_postprocess)):\n                wp.launch(\n                    kernel=self.grid_postprocess[k],\n                    dim=grid_size,\n                    inputs=[\n                        self.time,\n                        dt,\n                        self.mpm_state,\n                        self.mpm_model,\n                        self.collider_params[k],\n                    ],\n                    device=device,\n                )\n                if self.modify_bc[k] is not None:\n                    self.modify_bc[k](self.time, dt, self.collider_params[k])\n\n        # Add debug before g2p\n        # self.debug_particle_positions(\"before_g2p\")\n\n        # g2p\n        with wp.ScopedTimer(\n            \"g2p\", synchronize=True, print=False, dict=self.time_profile\n        ):\n            wp.launch(\n                kernel=g2p,\n                dim=self.n_particles,\n                inputs=[self.mpm_state, self.mpm_model, dt],\n                device=device,\n            )  # x, v, C, F_trial are updated\n\n        self.time = self.time + dt\n\n    # set particle densities to all_particle_densities,\n    def reset_densities_and_update_masses(\n        self, all_particle_densities, device=\"cuda:0\"\n    ):\n        all_particle_densities = all_particle_densities.clone().detach()\n        self.mpm_state.particle_density = torch2warp_float(\n            all_particle_densities, dvc=device\n        )\n        wp.launch(\n            kernel=get_float_array_product,\n            dim=self.n_particles,\n            inputs=[\n                self.mpm_state.particle_density,\n                self.mpm_state.particle_vol,\n                self.mpm_state.particle_mass,\n            ],\n            device=device,\n        )\n\n    # clone = True makes a copy, not necessarily needed\n    def import_particle_x_from_torch(self, tensor_x, clone=True, device=\"cuda:0\"):\n        if tensor_x is not None:\n            if clone:\n                tensor_x = tensor_x.clone().detach()\n            self.mpm_state.particle_x = torch2warp_vec3(tensor_x, dvc=device)\n\n    # clone = True makes a copy, not necessarily needed\n    def import_particle_v_from_torch(self, tensor_v, clone=True, device=\"cuda:0\"):\n        if tensor_v is not None:\n            if clone:\n                tensor_v = tensor_v.clone().detach()\n            self.mpm_state.particle_v = torch2warp_vec3(tensor_v, dvc=device)\n\n    # clone = True makes a copy, not necessarily needed\n    def import_particle_F_from_torch(self, tensor_F, clone=True, device=\"cuda:0\"):\n        if tensor_F is not None:\n            if clone:\n                tensor_F = tensor_F.clone().detach()\n            tensor_F = torch.reshape(tensor_F, (-1, 3, 3))  # arranged by rowmajor\n            self.mpm_state.particle_F = torch2warp_mat33(tensor_F, dvc=device)\n\n    # clone = True makes a copy, not necessarily needed\n    def import_particle_C_from_torch(self, tensor_C, clone=True, device=\"cuda:0\"):\n        if tensor_C is not None:\n            if clone:\n                tensor_C = tensor_C.clone().detach()\n            tensor_C = torch.reshape(tensor_C, (-1, 3, 3))  # arranged by rowmajor\n            self.mpm_state.particle_C = torch2warp_mat33(tensor_C, dvc=device)\n\n    def export_particle_x_to_torch(self):\n        return wp.to_torch(self.mpm_state.particle_x)\n    \n    def export_particle_stress_to_torch(self):\n        return wp.to_torch(self.mpm_state.particle_stress)\n\n    def export_particle_v_to_torch(self):\n        return wp.to_torch(self.mpm_state.particle_v)\n\n    def export_particle_F_to_torch(self):\n        F_tensor = wp.to_torch(self.mpm_state.particle_F)\n        F_tensor = F_tensor.reshape(-1, 9)\n        return F_tensor\n\n    def export_particle_R_to_torch(self, device=\"cuda:0\"):\n        with wp.ScopedTimer(\n            \"compute_R_from_F\",\n            synchronize=True,\n            print=False,\n            dict=self.time_profile,\n        ):\n            wp.launch(\n                kernel=compute_R_from_F,\n                dim=self.n_particles,\n                inputs=[self.mpm_state, self.mpm_model],\n                device=device,\n            )\n\n        R_tensor = wp.to_torch(self.mpm_state.particle_R)\n        R_tensor = R_tensor.reshape(-1, 9)\n        return R_tensor\n\n    def export_particle_C_to_torch(self):\n        C_tensor = wp.to_torch(self.mpm_state.particle_C)\n        C_tensor = C_tensor.reshape(-1, 9)\n        return C_tensor\n\n    def export_particle_cov_to_torch(self, device=\"cuda:0\"):\n        if not self.mpm_model.update_cov_with_F:\n            with wp.ScopedTimer(\n                \"compute_cov_from_F\",\n                synchronize=True,\n                print=False,\n                dict=self.time_profile,\n            ):\n                wp.launch(\n                    kernel=compute_cov_from_F,\n                    dim=self.n_particles,\n                    inputs=[self.mpm_state, self.mpm_model],\n                    device=device,\n                )\n\n        cov = wp.to_torch(self.mpm_state.particle_cov)\n        return cov\n\n    def print_time_profile(self):\n        print(\"MPM Time profile:\")\n        for key, value in self.time_profile.items():\n            print(key, sum(value))\n\n    # a surface specified by a point and the normal vector\n    def add_surface_collider(\n        self,\n        point,\n        normal,\n        surface=\"sticky\",\n        friction=0.0,\n        start_time=0.0,\n        end_time=999.0,\n    ):\n        point = list(point)\n        # Normalize normal\n        normal_scale = 1.0 / wp.sqrt(float(sum(x**2 for x in normal)))\n        normal = list(normal_scale * x for x in normal)\n\n        collider_param = Dirichlet_collider()\n        collider_param.start_time = start_time\n        collider_param.end_time = end_time\n\n        collider_param.point = wp.vec3(point[0], point[1], point[2])\n        collider_param.normal = wp.vec3(normal[0], normal[1], normal[2])\n\n        if surface == \"sticky\" and friction != 0:\n            raise ValueError(\"friction must be 0 on sticky surfaces.\")\n        if surface == \"sticky\":\n            collider_param.surface_type = 0\n        elif surface == \"slip\":\n            collider_param.surface_type = 1\n        elif surface == \"cut\":\n            collider_param.surface_type = 11\n        else:\n            collider_param.surface_type = 2\n        # frictional\n        collider_param.friction = friction\n\n        self.collider_params.append(collider_param)\n\n        @wp.kernel\n        def collide(\n            time: float,\n            dt: float,\n            state: MPMStateStruct,\n            model: MPMModelStruct,\n            param: Dirichlet_collider,\n        ):\n            grid_x, grid_y, grid_z = wp.tid()\n            if time >= param.start_time and time < param.end_time:\n                offset = wp.vec3(\n                    float(grid_x) * model.dx - param.point[0],\n                    float(grid_y) * model.dx - param.point[1],\n                    float(grid_z) * model.dx - param.point[2],\n                )\n                n = wp.vec3(param.normal[0], param.normal[1], param.normal[2])\n                dotproduct = wp.dot(offset, n)\n\n                if dotproduct < 0.0:\n                    if param.surface_type == 0:\n                        state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                            0.0, 0.0, 0.0\n                        )\n                    elif param.surface_type == 11:\n                        if (\n                            float(grid_z) * model.dx < 0.4\n                            or float(grid_z) * model.dx > 0.53\n                        ):\n                            state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                                0.0, 0.0, 0.0\n                            )\n                        else:\n                            v_in = state.grid_v_out[grid_x, grid_y, grid_z]\n                            state.grid_v_out[grid_x, grid_y, grid_z] = (\n                                wp.vec3(v_in[0], 0.0, v_in[2]) * 0.3\n                            )\n                    else:\n                        v = state.grid_v_out[grid_x, grid_y, grid_z]\n                        normal_component = wp.dot(v, n)\n                        if param.surface_type == 1:\n                            v = (\n                                v - normal_component * n\n                            )  # Project out all normal component\n                        else:\n                            v = (\n                                v - wp.min(normal_component, 0.0) * n\n                            )  # Project out only inward normal component\n                        if normal_component < 0.0 and wp.length(v) > 1e-20:\n                            v = wp.max(\n                                0.0, wp.length(v) + normal_component * param.friction\n                            ) * wp.normalize(\n                                v\n                            )  # apply friction here\n                        state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                            0.0, 0.0, 0.0\n                        )\n\n        self.grid_postprocess.append(collide)\n        self.modify_bc.append(None)\n\n    # a cubiod is a rectangular cube'\n    # centered at `point`\n    # dimension is x: point[0]±size[0]\n    #              y: point[1]±size[1]\n    #              z: point[2]±size[2]\n    # all grid nodes lie within the cubiod will have their speed set to velocity\n    # the cuboid itself is also moving with const speed = velocity\n    # set the speed to zero to fix BC\n    def set_velocity_on_cuboid(\n        self,\n        point,\n        size,\n        velocity,\n        start_time=0.0,\n        end_time=999.0,\n        reset=0,\n    ):\n        point = list(point)\n\n        collider_param = Dirichlet_collider()\n        collider_param.start_time = start_time\n        collider_param.end_time = end_time\n        collider_param.point = wp.vec3(point[0], point[1], point[2])\n        collider_param.size = size\n        collider_param.velocity = wp.vec3(velocity[0], velocity[1], velocity[2])\n        # collider_param.threshold = threshold\n        collider_param.reset = reset\n        self.collider_params.append(collider_param)\n\n        @wp.kernel\n        def collide(\n            time: float,\n            dt: float,\n            state: MPMStateStruct,\n            model: MPMModelStruct,\n            param: Dirichlet_collider,\n        ):\n            grid_x, grid_y, grid_z = wp.tid()\n            if time >= param.start_time and time < param.end_time:\n                offset = wp.vec3(\n                    float(grid_x) * model.dx - param.point[0],\n                    float(grid_y) * model.dx - param.point[1],\n                    float(grid_z) * model.dx - param.point[2],\n                )\n                if (\n                    wp.abs(offset[0]) < param.size[0]\n                    and wp.abs(offset[1]) < param.size[1]\n                    and wp.abs(offset[2]) < param.size[2]\n                ):\n                    state.grid_v_out[grid_x, grid_y, grid_z] = param.velocity\n            elif param.reset == 1:\n                if time < param.end_time + 15.0 * dt:\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(0.0, 0.0, 0.0)\n\n        def modify(time, dt, param: Dirichlet_collider):\n            if time >= param.start_time and time < param.end_time:\n                param.point = wp.vec3(\n                    param.point[0] + dt * param.velocity[0],\n                    param.point[1] + dt * param.velocity[1],\n                    param.point[2] + dt * param.velocity[2],\n                )  # param.point + dt * param.velocity\n\n        self.grid_postprocess.append(collide)\n        self.modify_bc.append(modify)\n\n    def add_bounding_box(self, start_time=0.0, end_time=999.0):\n        collider_param = Dirichlet_collider()\n        collider_param.start_time = start_time\n        collider_param.end_time = end_time\n\n        self.collider_params.append(collider_param)\n\n        @wp.kernel\n        def collide(\n            time: float,\n            dt: float,\n            state: MPMStateStruct,\n            model: MPMModelStruct,\n            param: Dirichlet_collider,\n        ):\n            grid_x, grid_y, grid_z = wp.tid()\n            padding = 3\n            if time >= param.start_time and time < param.end_time:\n                if grid_x < padding and state.grid_v_out[grid_x, grid_y, grid_z][0] < 0:\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        0.0,\n                        state.grid_v_out[grid_x, grid_y, grid_z][1],\n                        state.grid_v_out[grid_x, grid_y, grid_z][2],\n                    )\n                if (\n                    grid_x >= model.grid_dim_x - padding\n                    and state.grid_v_out[grid_x, grid_y, grid_z][0] > 0\n                ):\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        0.0,\n                        state.grid_v_out[grid_x, grid_y, grid_z][1],\n                        state.grid_v_out[grid_x, grid_y, grid_z][2],\n                    )\n\n                if grid_y < padding and state.grid_v_out[grid_x, grid_y, grid_z][1] < 0:\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        state.grid_v_out[grid_x, grid_y, grid_z][0],\n                        0.0,\n                        state.grid_v_out[grid_x, grid_y, grid_z][2],\n                    )\n                if (\n                    grid_y >= model.grid_dim_y - padding\n                    and state.grid_v_out[grid_x, grid_y, grid_z][1] > 0\n                ):\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        state.grid_v_out[grid_x, grid_y, grid_z][0],\n                        0.0,\n                        state.grid_v_out[grid_x, grid_y, grid_z][2],\n                    )\n\n                if grid_z < padding and state.grid_v_out[grid_x, grid_y, grid_z][2] < 0:\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        state.grid_v_out[grid_x, grid_y, grid_z][0],\n                        state.grid_v_out[grid_x, grid_y, grid_z][1],\n                        0.0,\n                    )\n                if (\n                    grid_z >= model.grid_dim_z - padding\n                    and state.grid_v_out[grid_x, grid_y, grid_z][2] > 0\n                ):\n                    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(\n                        state.grid_v_out[grid_x, grid_y, grid_z][0],\n                        state.grid_v_out[grid_x, grid_y, grid_z][1],\n                        0.0,\n                    )\n\n        self.grid_postprocess.append(collide)\n        self.modify_bc.append(None)\n\n    # particle_v += force/particle_mass * dt\n    # this is applied from start_dt, ends after num_dt p2g2p's\n    # particle velocity is changed before p2g at each timestep\n    def add_impulse_on_particles(\n        self,\n        force,\n        dt,\n        point=[1, 1, 1],\n        size=[1, 1, 1],\n        num_dt=1,\n        start_time=0.0,\n        device=\"cuda:0\",\n    ):\n        impulse_param = Impulse_modifier()\n        impulse_param.start_time = start_time\n        impulse_param.end_time = start_time + dt * num_dt\n\n        impulse_param.point = wp.vec3(point[0], point[1], point[2])\n        impulse_param.size = wp.vec3(size[0], size[1], size[2])\n        impulse_param.mask = wp.zeros(shape=self.n_particles, dtype=int, device=device)\n\n        impulse_param.force = wp.vec3(\n            force[0],\n            force[1],\n            force[2],\n        )\n\n        wp.launch(\n            kernel=selection_add_impulse_on_particles,\n            dim=self.n_particles,\n            inputs=[self.mpm_state, impulse_param],\n            device=device,\n        )\n\n        self.impulse_params.append(impulse_param)\n\n        @wp.kernel\n        def apply_force(\n            time: float, dt: float, state: MPMStateStruct, param: Impulse_modifier\n        ):\n            p = wp.tid()\n            if time >= param.start_time and time < param.end_time:\n                if param.mask[p] == 1:\n                    impulse = wp.vec3(\n                        param.force[0] / state.particle_mass[p],\n                        param.force[1] / state.particle_mass[p],\n                        param.force[2] / state.particle_mass[p],\n                    )\n                    state.particle_v[p] = state.particle_v[p] + impulse * dt\n\n        self.pre_p2g_operations.append(apply_force)\n\n    def enforce_particle_velocity_translation(\n        self, point, size, velocity, start_time, end_time, device=\"cuda:0\"\n    ):\n\n        # first select certain particles based on position\n\n        velocity_modifier_params = ParticleVelocityModifier()\n\n        velocity_modifier_params.point = wp.vec3(point[0], point[1], point[2])\n        velocity_modifier_params.size = wp.vec3(size[0], size[1], size[2])\n\n        velocity_modifier_params.velocity = wp.vec3(\n            velocity[0], velocity[1], velocity[2]\n        )\n\n        velocity_modifier_params.start_time = start_time\n        velocity_modifier_params.end_time = end_time\n\n        velocity_modifier_params.mask = wp.zeros(\n            shape=self.n_particles, dtype=int, device=device\n        )\n\n        wp.launch(\n            kernel=selection_enforce_particle_velocity_translation,\n            dim=self.n_particles,\n            inputs=[self.mpm_state, velocity_modifier_params],\n            device=device,\n        )\n        self.particle_velocity_modifier_params.append(velocity_modifier_params)\n\n        @wp.kernel\n        def modify_particle_v_before_p2g(\n            time: float,\n            state: MPMStateStruct,\n            velocity_modifier_params: ParticleVelocityModifier,\n        ):\n            p = wp.tid()\n            if (\n                time >= velocity_modifier_params.start_time\n                and time < velocity_modifier_params.end_time\n            ):\n                if velocity_modifier_params.mask[p] == 1:\n                    state.particle_v[p] = velocity_modifier_params.velocity\n\n        self.particle_velocity_modifiers.append(modify_particle_v_before_p2g)\n\n    # define a cylinder with center point, half_height, radius, normal\n    # particles within the cylinder are rotating along the normal direction\n    # may also have a translational velocity along the normal direction\n    def enforce_particle_velocity_rotation(\n        self,\n        point,\n        normal,\n        half_height_and_radius,\n        rotation_scale,\n        translation_scale,\n        start_time,\n        end_time,\n        device=\"cuda:0\",\n    ):\n\n        normal_scale = 1.0 / wp.sqrt(\n            float(normal[0] ** 2 + normal[1] ** 2 + normal[2] ** 2)\n        )\n        normal = list(normal_scale * x for x in normal)\n\n        velocity_modifier_params = ParticleVelocityModifier()\n\n        velocity_modifier_params.point = wp.vec3(point[0], point[1], point[2])\n        velocity_modifier_params.half_height_and_radius = wp.vec2(\n            half_height_and_radius[0], half_height_and_radius[1]\n        )\n        velocity_modifier_params.normal = wp.vec3(normal[0], normal[1], normal[2])\n\n        horizontal_1 = wp.vec3(1.0, 1.0, 1.0)\n        if wp.abs(wp.dot(velocity_modifier_params.normal, horizontal_1)) < 0.01:\n            horizontal_1 = wp.vec3(0.72, 0.37, -0.67)\n        horizontal_1 = (\n            horizontal_1\n            - wp.dot(horizontal_1, velocity_modifier_params.normal)\n            * velocity_modifier_params.normal\n        )\n        horizontal_1 = horizontal_1 * (1.0 / wp.length(horizontal_1))\n        horizontal_2 = wp.cross(horizontal_1, velocity_modifier_params.normal)\n\n        velocity_modifier_params.horizontal_axis_1 = horizontal_1\n        velocity_modifier_params.horizontal_axis_2 = horizontal_2\n\n        velocity_modifier_params.rotation_scale = rotation_scale\n        velocity_modifier_params.translation_scale = translation_scale\n\n        velocity_modifier_params.start_time = start_time\n        velocity_modifier_params.end_time = end_time\n\n        velocity_modifier_params.mask = wp.zeros(\n            shape=self.n_particles, dtype=int, device=device\n        )\n\n        wp.launch(\n            kernel=selection_enforce_particle_velocity_cylinder,\n            dim=self.n_particles,\n            inputs=[self.mpm_state, velocity_modifier_params],\n            device=device,\n        )\n        self.particle_velocity_modifier_params.append(velocity_modifier_params)\n\n        @wp.kernel\n        def modify_particle_v_before_p2g(\n            time: float,\n            state: MPMStateStruct,\n            velocity_modifier_params: ParticleVelocityModifier,\n        ):\n            p = wp.tid()\n            if (\n                time >= velocity_modifier_params.start_time\n                and time < velocity_modifier_params.end_time\n            ):\n                if velocity_modifier_params.mask[p] == 1:\n                    offset = state.particle_x[p] - velocity_modifier_params.point\n                    horizontal_distance = wp.length(\n                        offset\n                        - wp.dot(offset, velocity_modifier_params.normal)\n                        * velocity_modifier_params.normal\n                    )\n                    cosine = (\n                        wp.dot(offset, velocity_modifier_params.horizontal_axis_1)\n                        / horizontal_distance\n                    )\n                    theta = wp.acos(cosine)\n                    if wp.dot(offset, velocity_modifier_params.horizontal_axis_2) > 0:\n                        theta = theta\n                    else:\n                        theta = -theta\n                    axis1_scale = (\n                        -horizontal_distance\n                        * wp.sin(theta)\n                        * velocity_modifier_params.rotation_scale\n                    )\n                    axis2_scale = (\n                        horizontal_distance\n                        * wp.cos(theta)\n                        * velocity_modifier_params.rotation_scale\n                    )\n                    axis_vertical_scale = translation_scale\n                    state.particle_v[p] = (\n                        axis1_scale * velocity_modifier_params.horizontal_axis_1\n                        + axis2_scale * velocity_modifier_params.horizontal_axis_2\n                        + axis_vertical_scale * velocity_modifier_params.normal\n                    )\n\n        self.particle_velocity_modifiers.append(modify_particle_v_before_p2g)\n\n    # given normal direction, say [0,0,1]\n    # gradually release grid velocities from start position to end position\n    def release_particles_sequentially(\n        self, normal, start_position, end_position, num_layers, start_time, end_time\n    ):\n        num_layers = 50\n        point = [0, 0, 0]\n        size = [0, 0, 0]\n        axis = -1\n        for i in range(3):\n            if normal[i] == 0:\n                point[i] = 1\n                size[i] = 1\n            else:\n                axis = i\n                point[i] = end_position\n\n        half_length_portion = wp.abs(start_position - end_position) / num_layers\n        end_time_portion = end_time / num_layers\n        for i in range(num_layers):\n            size[axis] = half_length_portion * (num_layers - i)\n            self.enforce_particle_velocity_translation(\n                point=point,\n                size=size,\n                velocity=[0, 0, 0],\n                start_time=start_time,\n                end_time=end_time_portion * (i + 1),\n            )\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/mpm_utils.py",
    "content": "import warp as wp\nfrom warp_utils import *\nimport numpy as np\nimport math\n\n\n\n\n# compute stress from F\n@wp.func\ndef kirchoff_stress_FCR(\n    F: wp.mat33, U: wp.mat33, V: wp.mat33, J: float, mu: float, lam: float\n):\n    # compute kirchoff stress for FCR model (remember tau = P F^T)\n    R = U * wp.transpose(V)\n    id = wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n    return 2.0 * mu * (F - R) * wp.transpose(F) + id * lam * J * (J - 1.0)\n\n\n@wp.func\ndef kirchoff_stress_water(\n    J: float, bulk: float\n):\n    gamma = 1.1 # gamma is set to be a liitle greater than 1 for weakly compressible fluids\n    pressure = -bulk * (wp.pow(J, -gamma) - 1.)\n    id = wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n    cauchy_stress = id * pressure\n    return J * cauchy_stress\n\n@wp.func\ndef kirchoff_stress_neoHookean(\n    F: wp.mat33, U: wp.mat33, V: wp.mat33, J: float, sig: wp.vec3, mu: float, lam: float\n):\n    # compute kirchoff stress for FCR model (remember tau = P F^T)\n    b = wp.vec3(sig[0] * sig[0], sig[1] * sig[1], sig[2] * sig[2])\n    b_hat = b - wp.vec3(\n        (b[0] + b[1] + b[2]) / 3.0,\n        (b[0] + b[1] + b[2]) / 3.0,\n        (b[0] + b[1] + b[2]) / 3.0,\n    )\n    tau = mu * J ** (-2.0 / 3.0) * b_hat + lam / 2.0 * (J * J - 1.0) * wp.vec3(\n        1.0, 1.0, 1.0\n    )\n    return (\n        U\n        * wp.mat33(tau[0], 0.0, 0.0, 0.0, tau[1], 0.0, 0.0, 0.0, tau[2])\n        * wp.transpose(V)\n        * wp.transpose(F)\n    )\n\n\n@wp.func\ndef kirchoff_stress_StVK(\n    F: wp.mat33, U: wp.mat33, V: wp.mat33, sig: wp.vec3, mu: float, lam: float\n):\n    sig = wp.vec3(\n        wp.max(sig[0], 0.01), wp.max(sig[1], 0.01), wp.max(sig[2], 0.01)\n    )  # add this to prevent NaN in extrem cases\n    epsilon = wp.vec3(wp.log(sig[0]), wp.log(sig[1]), wp.log(sig[2]))\n    log_sig_sum = wp.log(sig[0]) + wp.log(sig[1]) + wp.log(sig[2])\n    ONE = wp.vec3(1.0, 1.0, 1.0)\n    tau = 2.0 * mu * epsilon + lam * log_sig_sum * ONE\n    return (\n        U\n        * wp.mat33(tau[0], 0.0, 0.0, 0.0, tau[1], 0.0, 0.0, 0.0, tau[2])\n        * wp.transpose(V)\n        * wp.transpose(F)\n    )\n\n\n@wp.func\ndef kirchoff_stress_drucker_prager(\n    F: wp.mat33, U: wp.mat33, V: wp.mat33, sig: wp.vec3, mu: float, lam: float\n):\n    log_sig_sum = wp.log(sig[0]) + wp.log(sig[1]) + wp.log(sig[2])\n    center00 = 2.0 * mu * wp.log(sig[0]) * (1.0 / sig[0]) + lam * log_sig_sum * (\n        1.0 / sig[0]\n    )\n    center11 = 2.0 * mu * wp.log(sig[1]) * (1.0 / sig[1]) + lam * log_sig_sum * (\n        1.0 / sig[1]\n    )\n    center22 = 2.0 * mu * wp.log(sig[2]) * (1.0 / sig[2]) + lam * log_sig_sum * (\n        1.0 / sig[2]\n    )\n    center = wp.mat33(center00, 0.0, 0.0, 0.0, center11, 0.0, 0.0, 0.0, center22)\n    return U * center * wp.transpose(V) * wp.transpose(F)\n\n\n@wp.func\ndef von_mises_return_mapping(F_trial: wp.mat33, model: MPMModelStruct, p: int):\n    U = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    V = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    sig_old = wp.vec3(0.0)\n    wp.svd3(F_trial, U, sig_old, V)\n\n    sig = wp.vec3(\n        wp.max(sig_old[0], 0.01), wp.max(sig_old[1], 0.01), wp.max(sig_old[2], 0.01)\n    )  # add this to prevent NaN in extrem cases\n    epsilon = wp.vec3(wp.log(sig[0]), wp.log(sig[1]), wp.log(sig[2]))\n    temp = (epsilon[0] + epsilon[1] + epsilon[2]) / 3.0\n\n    tau = 2.0 * model.mu[p] * epsilon + model.lam[p] * (\n        epsilon[0] + epsilon[1] + epsilon[2]\n    ) * wp.vec3(1.0, 1.0, 1.0)\n    sum_tau = tau[0] + tau[1] + tau[2]\n    cond = wp.vec3(\n        tau[0] - sum_tau / 3.0, tau[1] - sum_tau / 3.0, tau[2] - sum_tau / 3.0\n    )\n\n\n    if wp.length(cond) > model.yield_stress[p]:\n        epsilon_hat = epsilon - wp.vec3(temp, temp, temp)\n        epsilon_hat_norm = wp.length(epsilon_hat) + 1e-6\n        delta_gamma = epsilon_hat_norm - model.yield_stress[p] / (2.0 * model.mu[p])\n        epsilon = epsilon - (delta_gamma / epsilon_hat_norm) * epsilon_hat\n        sig_elastic = wp.mat33(\n            wp.exp(epsilon[0]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon[1]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon[2]),\n        )\n        F_elastic = U * sig_elastic * wp.transpose(V)\n        if model.hardening == 1:\n\n            model.yield_stress[p] = (\n                model.yield_stress[p] + 2.0 * model.mu[p] * model.xi * delta_gamma\n            )\n        return F_elastic\n    else:\n        return F_trial\n\n\n@wp.func\ndef von_mises_return_mapping_with_damage(\n    F_trial: wp.mat33, model: MPMModelStruct, p: int\n):\n    U = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    V = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    sig_old = wp.vec3(0.0)\n    wp.svd3(F_trial, U, sig_old, V)\n\n    sig = wp.vec3(\n        wp.max(sig_old[0], 0.01), wp.max(sig_old[1], 0.01), wp.max(sig_old[2], 0.01)\n    )  # add this to prevent NaN in extrem cases\n    epsilon = wp.vec3(wp.log(sig[0]), wp.log(sig[1]), wp.log(sig[2]))\n    temp = (epsilon[0] + epsilon[1] + epsilon[2]) / 3.0\n\n    tau = 2.0 * model.mu[p] * epsilon + model.lam[p] * (\n        epsilon[0] + epsilon[1] + epsilon[2]\n    ) * wp.vec3(1.0, 1.0, 1.0)\n    sum_tau = tau[0] + tau[1] + tau[2]\n    cond = wp.vec3(\n        tau[0] - sum_tau / 3.0, tau[1] - sum_tau / 3.0, tau[2] - sum_tau / 3.0\n    )\n    if wp.length(cond) > model.yield_stress[p]:\n        if model.yield_stress[p] <= 0:\n            return F_trial\n        epsilon_hat = epsilon - wp.vec3(temp, temp, temp)\n        epsilon_hat_norm = wp.length(epsilon_hat) + 1e-6\n        delta_gamma = epsilon_hat_norm - model.yield_stress[p] / (2.0 * model.mu[p])\n        epsilon = epsilon - (delta_gamma / epsilon_hat_norm) * epsilon_hat\n        model.yield_stress[p] = model.yield_stress[p] - model.softening * wp.length(\n            (delta_gamma / epsilon_hat_norm) * epsilon_hat\n        )\n        if model.yield_stress[p] <= 0:\n            model.mu[p] = 0.0\n            model.lam[p] = 0.0\n        sig_elastic = wp.mat33(\n            wp.exp(epsilon[0]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon[1]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon[2]),\n        )\n        F_elastic = U * sig_elastic * wp.transpose(V)\n        if model.hardening == 1:\n            model.yield_stress[p] = (\n                model.yield_stress[p] + 2.0 * model.mu[p] * model.xi * delta_gamma\n            )\n        return F_elastic\n    else:\n        return F_trial\n\n\n# for toothpaste\n@wp.func\ndef viscoplasticity_return_mapping_with_StVK(\n    F_trial: wp.mat33, model: MPMModelStruct, p: int, dt: float\n):\n    U = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    V = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    sig_old = wp.vec3(0.0)\n    wp.svd3(F_trial, U, sig_old, V)\n\n    sig = wp.vec3(\n        wp.max(sig_old[0], 0.01), wp.max(sig_old[1], 0.01), wp.max(sig_old[2], 0.01)\n    )  # add this to prevent NaN in extrem cases\n    b_trial = wp.vec3(sig[0] * sig[0], sig[1] * sig[1], sig[2] * sig[2])\n    epsilon = wp.vec3(wp.log(sig[0]), wp.log(sig[1]), wp.log(sig[2]))\n    trace_epsilon = epsilon[0] + epsilon[1] + epsilon[2]\n    epsilon_hat = epsilon - wp.vec3(\n        trace_epsilon / 3.0, trace_epsilon / 3.0, trace_epsilon / 3.0\n    )\n    s_trial = 2.0 * model.mu[p] * epsilon_hat\n    s_trial_norm = wp.length(s_trial)\n    y = s_trial_norm - wp.sqrt(2.0 / 3.0) * model.yield_stress[p]\n    if y > 0:\n        mu_hat = model.mu[p] * (b_trial[0] + b_trial[1] + b_trial[2]) / 3.0\n        s_new_norm = s_trial_norm - y / (\n            1.0 + model.plastic_viscosity / (2.0 * mu_hat * dt)\n        )\n        s_new = (s_new_norm / s_trial_norm) * s_trial\n        epsilon_new = 1.0 / (2.0 * model.mu[p]) * s_new + wp.vec3(\n            trace_epsilon / 3.0, trace_epsilon / 3.0, trace_epsilon / 3.0\n        )\n        sig_elastic = wp.mat33(\n            wp.exp(epsilon_new[0]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon_new[1]),\n            0.0,\n            0.0,\n            0.0,\n            wp.exp(epsilon_new[2]),\n        )\n        F_elastic = U * sig_elastic * wp.transpose(V)\n        return F_elastic\n    else:\n        return F_trial\n\n\n@wp.func\ndef sand_return_mapping(\n    F_trial: wp.mat33, state: MPMStateStruct, model: MPMModelStruct, p: int\n):\n    U = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    V = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n    sig = wp.vec3(0.0)\n    wp.svd3(F_trial, U, sig, V)\n\n    epsilon = wp.vec3(\n        wp.log(wp.max(wp.abs(sig[0]), 1e-14)),\n        wp.log(wp.max(wp.abs(sig[1]), 1e-14)),\n        wp.log(wp.max(wp.abs(sig[2]), 1e-14)),\n    )\n    sigma_out = wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n    tr = epsilon[0] + epsilon[1] + epsilon[2]  # + state.particle_Jp[p]\n    epsilon_hat = epsilon - wp.vec3(tr / 3.0, tr / 3.0, tr / 3.0)\n    epsilon_hat_norm = wp.length(epsilon_hat)\n    delta_gamma = (\n        epsilon_hat_norm\n        + (3.0 * model.lam[p] + 2.0 * model.mu[p])\n        / (2.0 * model.mu[p])\n        * tr\n        * model.alpha\n    )\n\n    if delta_gamma <= 0:\n        F_elastic = F_trial\n\n    if delta_gamma > 0 and tr > 0:\n        F_elastic = U * wp.transpose(V)\n\n    if delta_gamma > 0 and tr <= 0:\n        H = epsilon - epsilon_hat * (delta_gamma / epsilon_hat_norm)\n        s_new = wp.vec3(wp.exp(H[0]), wp.exp(H[1]), wp.exp(H[2]))\n\n        F_elastic = U * wp.diag(s_new) * wp.transpose(V)\n    return F_elastic\n\n\n@wp.kernel\ndef compute_mu_lam_from_E_nu(state: MPMStateStruct, model: MPMModelStruct):\n    p = wp.tid()\n    model.mu[p] = model.E[p] / (2.0 * (1.0 + model.nu[p]))\n    model.lam[p] = (\n        model.E[p] * model.nu[p] / ((1.0 + model.nu[p]) * (1.0 - 2.0 * model.nu[p]))\n    )\n\n@wp.kernel\ndef compute_bulk(state:MPMStateStruct, model:MPMModelStruct):\n    p = wp.tid()\n    model.bulk[p] = model.lam[p] + 2./3. * model.mu[p]\n\n@wp.kernel\ndef zero_grid(state: MPMStateStruct, model: MPMModelStruct):\n    grid_x, grid_y, grid_z = wp.tid()\n    state.grid_m[grid_x, grid_y, grid_z] = 0.0\n    state.grid_v_in[grid_x, grid_y, grid_z] = wp.vec3(0.0, 0.0, 0.0)\n    state.grid_v_out[grid_x, grid_y, grid_z] = wp.vec3(0.0, 0.0, 0.0)\n\n\n@wp.func\ndef compute_dweight(\n    model: MPMModelStruct, w: wp.mat33, dw: wp.mat33, i: int, j: int, k: int\n):\n    dweight = wp.vec3(\n        dw[0, i] * w[1, j] * w[2, k],\n        w[0, i] * dw[1, j] * w[2, k],\n        w[0, i] * w[1, j] * dw[2, k],\n    )\n    return dweight * model.inv_dx\n\n\n@wp.func\ndef update_cov(state: MPMStateStruct, p: int, grad_v: wp.mat33, dt: float):\n    cov_n = wp.mat33(0.0)\n    cov_n[0, 0] = state.particle_cov[p * 6]\n    cov_n[0, 1] = state.particle_cov[p * 6 + 1]\n    cov_n[0, 2] = state.particle_cov[p * 6 + 2]\n    cov_n[1, 0] = state.particle_cov[p * 6 + 1]\n    cov_n[1, 1] = state.particle_cov[p * 6 + 3]\n    cov_n[1, 2] = state.particle_cov[p * 6 + 4]\n    cov_n[2, 0] = state.particle_cov[p * 6 + 2]\n    cov_n[2, 1] = state.particle_cov[p * 6 + 4]\n    cov_n[2, 2] = state.particle_cov[p * 6 + 5]\n\n    cov_np1 = cov_n + dt * (grad_v * cov_n + cov_n * wp.transpose(grad_v))\n\n    state.particle_cov[p * 6] = cov_np1[0, 0]\n    state.particle_cov[p * 6 + 1] = cov_np1[0, 1]\n    state.particle_cov[p * 6 + 2] = cov_np1[0, 2]\n    state.particle_cov[p * 6 + 3] = cov_np1[1, 1]\n    state.particle_cov[p * 6 + 4] = cov_np1[1, 2]\n    state.particle_cov[p * 6 + 5] = cov_np1[2, 2]\n\n\n@wp.kernel\ndef p2g_apic_with_stress(state: MPMStateStruct, model: MPMModelStruct, dt: float):\n    p = wp.tid()\n    if state.particle_selection[p] == 0:\n        stress = state.particle_stress[p]\n        grid_pos = state.particle_x[p] * model.inv_dx\n        base_pos_x = wp.int(grid_pos[0] - 0.5)\n        base_pos_y = wp.int(grid_pos[1] - 0.5)\n        base_pos_z = wp.int(grid_pos[2] - 0.5)\n        fx = grid_pos - wp.vec3(\n            wp.float(base_pos_x), wp.float(base_pos_y), wp.float(base_pos_z)\n        )\n        wa = wp.vec3(1.5) - fx\n        wb = fx - wp.vec3(1.0)\n        wc = fx - wp.vec3(0.5)\n        w = wp.mat33(\n            wp.cw_mul(wa, wa) * 0.5,\n            wp.vec3(0.0, 0.0, 0.0) - wp.cw_mul(wb, wb) + wp.vec3(0.75),\n            wp.cw_mul(wc, wc) * 0.5,\n        )\n        dw = wp.mat33(fx - wp.vec3(1.5), -2.0 * (fx - wp.vec3(1.0)), fx - wp.vec3(0.5))\n\n        material = state.particle_material[p]\n        for i in range(0, 3):\n            for j in range(0, 3):\n                for k in range(0, 3):\n                    dpos = (\n                        wp.vec3(wp.float(i), wp.float(j), wp.float(k)) - fx\n                    ) * model.dx\n                    ix = base_pos_x + i\n                    iy = base_pos_y + j\n                    iz = base_pos_z + k\n                    weight = w[0, i] * w[1, j] * w[2, k]  # tricubic interpolation\n                    dweight = compute_dweight(model, w, dw, i, j, k)\n                    C = state.particle_C[p]\n                    # if model.rpic = 0, standard apic\n                    C = (1.0 - model.rpic_damping) * C + model.rpic_damping / 2.0 * (\n                        C - wp.transpose(C)\n                    )\n                    if model.rpic_damping < -0.001:\n                        # standard pic\n                        C = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n\n                    elastic_force = -state.particle_vol[p] * stress * dweight\n       \n\n                    v_in_add = wp.vec3(0.0, 0.0, 0.0)\n                    added_mass = 0.0\n\n                    v_in_add = (weight * state.particle_mass[p] * \n                                (state.particle_v[p] + C * dpos) \n                                + dt * elastic_force)\n                    added_mass = weight * state.particle_mass[p]\n\n\n                    wp.atomic_add(state.grid_v_in, ix, iy, iz, v_in_add)\n                    wp.atomic_add(state.grid_m, ix, iy, iz, added_mass)\n\n\n# add gravity\n@wp.kernel\ndef grid_normalization_and_gravity(\n    state: MPMStateStruct, model: MPMModelStruct, dt: float\n):\n    grid_x, grid_y, grid_z = wp.tid()\n    if state.grid_m[grid_x, grid_y, grid_z] > 1e-15:\n        v_out = state.grid_v_in[grid_x, grid_y, grid_z] * (\n            1.0 / state.grid_m[grid_x, grid_y, grid_z]\n        )\n        # add gravity\n        v_out = v_out + dt * model.gravitational_accelaration\n        state.grid_v_out[grid_x, grid_y, grid_z] = v_out\n\n\n@wp.kernel\ndef g2p(state: MPMStateStruct, model: MPMModelStruct, dt: float):\n    p = wp.tid()\n    material = state.particle_material[p]\n\n    if state.particle_selection[p] == 0:\n        grid_pos = state.particle_x[p] * model.inv_dx\n        base_pos_x = wp.int(grid_pos[0] - 0.5)\n        base_pos_y = wp.int(grid_pos[1] - 0.5)\n        base_pos_z = wp.int(grid_pos[2] - 0.5)\n\n        fx = grid_pos - wp.vec3(\n            wp.float(base_pos_x), wp.float(base_pos_y), wp.float(base_pos_z)\n        )\n        wa = wp.vec3(1.5) - fx\n        wb = fx - wp.vec3(1.0)\n        wc = fx - wp.vec3(0.5)\n        w = wp.mat33(\n            wp.cw_mul(wa, wa) * 0.5,\n            wp.vec3(0.0, 0.0, 0.0) - wp.cw_mul(wb, wb) + wp.vec3(0.75),\n            wp.cw_mul(wc, wc) * 0.5,\n        )\n        dw = wp.mat33(fx - wp.vec3(1.5), -2.0 * (fx - wp.vec3(1.0)), fx - wp.vec3(0.5))\n        new_v = wp.vec3(0.0, 0.0, 0.0)\n        new_C = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n        new_F = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n        for i in range(0, 3):\n            for j in range(0, 3):\n                for k in range(0, 3):\n                    ix = base_pos_x + i\n                    iy = base_pos_y + j\n                    iz = base_pos_z + k\n                    dpos = wp.vec3(wp.float(i), wp.float(j), wp.float(k)) - fx\n                    weight = w[0, i] * w[1, j] * w[2, k]  # tricubic interpolation\n                    grid_v = state.grid_v_out[ix, iy, iz]\n                    new_v = new_v + grid_v * weight\n                    new_C = new_C + wp.outer(grid_v, dpos) * (\n                        weight * model.inv_dx * 4.0\n                    )\n                    dweight = compute_dweight(model, w, dw, i, j, k)\n                    new_F = new_F + wp.outer(grid_v, dweight)\n\n        # Only update velocity and position for non-stationary materials\n        state.particle_v[p] = new_v\n        state.particle_x[p] = state.particle_x[p] + dt * new_v\n        state.particle_C[p] = new_C\n        I33 = wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n        F_tmp = (I33 + new_F * dt) * state.particle_F[p]\n        state.particle_F_trial[p] = F_tmp\n\n        if model.update_cov_with_F:\n            update_cov(state, p, new_F, dt)\n\n\n# compute (Kirchhoff) stress = stress(returnMap(F_trial))\n@wp.kernel\ndef compute_stress_from_F_trial(\n    state: MPMStateStruct, model: MPMModelStruct, dt: float\n):\n\n    p = wp.tid()\n    material = state.particle_material[p]\n    if state.particle_selection[p] == 0:\n        # apply return mapping\n        if material == 1:  # metal\n            state.particle_F[p] = von_mises_return_mapping(\n                state.particle_F_trial[p], model, p\n            )\n        elif material == 2:  # sand\n            state.particle_F[p] = sand_return_mapping(\n                state.particle_F_trial[p], state, model, p\n            )\n        elif material == 3:  # visplas, with StVk+VM, no thickening\n            state.particle_F[p] = viscoplasticity_return_mapping_with_StVK(\n                state.particle_F_trial[p], model, p, dt\n            )\n        elif material == 5:\n            state.particle_F[p] = von_mises_return_mapping_with_damage(\n                state.particle_F_trial[p], model, p\n            )\n        else:  # elastic\n            state.particle_F[p] = state.particle_F_trial[p]\n\n        # also compute stress here\n        J = wp.determinant(state.particle_F[p])\n        U = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n        V = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n        sig = wp.vec3(0.0)\n        stress = wp.mat33(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n        wp.svd3(state.particle_F[p], U, sig, V)\n        if material == 0 or material == 5:\n            stress = kirchoff_stress_FCR(\n                state.particle_F[p], U, V, J, model.mu[p], model.lam[p]\n            )\n        if material == 1:\n            stress = kirchoff_stress_StVK(\n                state.particle_F[p], U, V, sig, model.mu[p], model.lam[p]\n            )\n        if material == 2:\n            stress = kirchoff_stress_drucker_prager(\n                state.particle_F[p], U, V, sig, model.mu[p], model.lam[p]\n            )\n        if material == 3:\n            # temporarily use stvk, subject to change\n            stress = kirchoff_stress_StVK(\n                state.particle_F[p], U, V, sig, model.mu[p], model.lam[p]\n            )\n        if material == 6: # fluid\n            stress = kirchoff_stress_water(\n                J, model.bulk[p]\n            )\n\n\n        stress = (stress + wp.transpose(stress)) / 2.0  # enfore symmetry\n        state.particle_stress[p] = stress\n\n\n@wp.kernel\ndef compute_cov_from_F(state: MPMStateStruct, model: MPMModelStruct):\n    p = wp.tid()\n\n    F = state.particle_F_trial[p]\n\n    init_cov = wp.mat33(0.0)\n    init_cov[0, 0] = state.particle_init_cov[p * 6]\n    init_cov[0, 1] = state.particle_init_cov[p * 6 + 1]\n    init_cov[0, 2] = state.particle_init_cov[p * 6 + 2]\n    init_cov[1, 0] = state.particle_init_cov[p * 6 + 1]\n    init_cov[1, 1] = state.particle_init_cov[p * 6 + 3]\n    init_cov[1, 2] = state.particle_init_cov[p * 6 + 4]\n    init_cov[2, 0] = state.particle_init_cov[p * 6 + 2]\n    init_cov[2, 1] = state.particle_init_cov[p * 6 + 4]\n    init_cov[2, 2] = state.particle_init_cov[p * 6 + 5]\n\n    cov = F * init_cov * wp.transpose(F)\n\n    state.particle_cov[p * 6] = cov[0, 0]\n    state.particle_cov[p * 6 + 1] = cov[0, 1]\n    state.particle_cov[p * 6 + 2] = cov[0, 2]\n    state.particle_cov[p * 6 + 3] = cov[1, 1]\n    state.particle_cov[p * 6 + 4] = cov[1, 2]\n    state.particle_cov[p * 6 + 5] = cov[2, 2]\n\n\n@wp.kernel\ndef compute_R_from_F(state: MPMStateStruct, model: MPMModelStruct):\n    p = wp.tid()\n\n    F = state.particle_F_trial[p]\n\n    # polar svd decomposition\n    U = wp.mat33(0.0)\n    V = wp.mat33(0.0)\n    sig = wp.vec3(0.0)\n    wp.svd3(F, U, sig, V)\n\n    if wp.determinant(U) < 0.0:\n        U[0, 2] = -U[0, 2]\n        U[1, 2] = -U[1, 2]\n        U[2, 2] = -U[2, 2]\n\n    if wp.determinant(V) < 0.0:\n        V[0, 2] = -V[0, 2]\n        V[1, 2] = -V[1, 2]\n        V[2, 2] = -V[2, 2]\n\n    # compute rotation matrix\n    R = U * wp.transpose(V)\n    state.particle_R[p] = wp.transpose(R)\n\n\n@wp.kernel\ndef add_damping_via_grid(state: MPMStateStruct, scale: float):\n    grid_x, grid_y, grid_z = wp.tid()\n    state.grid_v_out[grid_x, grid_y, grid_z] = (\n        state.grid_v_out[grid_x, grid_y, grid_z] * scale\n    )\n\n\n@wp.kernel\ndef apply_additional_params(\n    state: MPMStateStruct,\n    model: MPMModelStruct,\n    params_modifier: MaterialParamsModifier,\n):\n    p = wp.tid()\n    pos = state.particle_x[p]\n    if (\n        pos[0] > params_modifier.point[0] - params_modifier.size[0]\n        and pos[0] < params_modifier.point[0] + params_modifier.size[0]\n        and pos[1] > params_modifier.point[1] - params_modifier.size[1]\n        and pos[1] < params_modifier.point[1] + params_modifier.size[1]\n        and pos[2] > params_modifier.point[2] - params_modifier.size[2]\n        and pos[2] < params_modifier.point[2] + params_modifier.size[2]\n    ):\n        model.E[p] = params_modifier.E\n        model.nu[p] = params_modifier.nu\n        state.particle_density[p] = params_modifier.density\n        state.particle_material[p] = params_modifier.material\n\n\n@wp.kernel\ndef selection_add_impulse_on_particles(\n    state: MPMStateStruct, impulse_modifier: Impulse_modifier\n):\n    p = wp.tid()\n    offset = state.particle_x[p] - impulse_modifier.point\n    if (\n        wp.abs(offset[0]) < impulse_modifier.size[0]\n        and wp.abs(offset[1]) < impulse_modifier.size[1]\n        and wp.abs(offset[2]) < impulse_modifier.size[2]\n    ):\n        impulse_modifier.mask[p] = 1\n    else:\n        impulse_modifier.mask[p] = 0\n\n\n@wp.kernel\ndef selection_enforce_particle_velocity_translation(\n    state: MPMStateStruct, velocity_modifier: ParticleVelocityModifier\n):\n    p = wp.tid()\n    offset = state.particle_x[p] - velocity_modifier.point\n    if (\n        wp.abs(offset[0]) < velocity_modifier.size[0]\n        and wp.abs(offset[1]) < velocity_modifier.size[1]\n        and wp.abs(offset[2]) < velocity_modifier.size[2]\n    ):\n        velocity_modifier.mask[p] = 1\n    else:\n        velocity_modifier.mask[p] = 0\n\n\n@wp.kernel\ndef selection_enforce_particle_velocity_cylinder(\n    state: MPMStateStruct, velocity_modifier: ParticleVelocityModifier\n):\n    p = wp.tid()\n    offset = state.particle_x[p] - velocity_modifier.point\n\n    vertical_distance = wp.abs(wp.dot(offset, velocity_modifier.normal))\n\n    horizontal_distance = wp.length(\n        offset - wp.dot(offset, velocity_modifier.normal) * velocity_modifier.normal\n    )\n    if (\n        vertical_distance < velocity_modifier.half_height_and_radius[0]\n        and horizontal_distance < velocity_modifier.half_height_and_radius[1]\n    ):\n        velocity_modifier.mask[p] = 1\n    else:\n        velocity_modifier.mask[p] = 0\n\n            # Default all particles to material type 0 (jelly)\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/run_sand.py",
    "content": "import warp as wp\nfrom mpm_solver_warp import MPM_Simulator_WARP\nfrom engine_utils import *\nimport torch\n\nwp.init()\nwp.config.verify_cuda = True\n\n\ndvc = \"cuda:0\"\n\nmpm_solver = MPM_Simulator_WARP(\n    10\n)  # initialize with whatever number is fine. it will be reintialized\n\n\n# You can either load sampling data from an external h5 file, containing initial position (n,3) and particle_volume (n,)\nmpm_solver.load_from_sampling(\"sand_column.h5\", n_grid=150, device=dvc)\n\n# Or load from torch tensor (also position and volume)\n# Here we borrow the data from h5, but you can use your own\nvolume_tensor = torch.ones(mpm_solver.n_particles) * 2.5e-8\nposition_tensor = mpm_solver.export_particle_x_to_torch()\n\nmpm_solver.load_initial_data_from_torch(position_tensor, volume_tensor)\n\n# Note: You must provide 'density=..' in the function set_parameters() to set particle_mass = density * particle_volume\nmaterial_params = {\n    \"E\": 2000,\n    \"nu\": 0.2,\n    \"material\": \"sand\",\n    \"friction_angle\": 35,\n    \"g\": [0.0, 0.0, -6.0],\n    \"density\": 200.0,\n}\n\nmaterial_params2 = {\n    \"E\": 2000,\n    \"nu\": 0.2,\n    \"material\": \"sand\",\n    \"friction_angle\": 35,\n    \"g\": [0.0, 0.0, -4.0],\n    \"density\": 200.0,\n}\nmpm_solver.set_parameters_dict(material_params2)\n\nmpm_solver.finalize_mu_lam()  # set mu and lambda from the E and nu input\nprint(wp.to_torch(mpm_solver.mpm_model.mu)[0])\ninput()\n\n\nmpm_solver.add_surface_collider((0.0, 0.0, 0.13), (0.0, 0.0, 1.0), \"sticky\", 0.0)\n\n\ndirectory_to_save = \"./sim_results\"\n\nsave_data_at_frame(mpm_solver, directory_to_save, 0, save_to_ply=True, save_to_h5=False)\n\nfor k in range(1, 50):\n    # print(wp.to_torch(mpm_solver.mpm_state.particle_stress)[0,:])\n    # print(mpm_solver.export_particle_v_to_torch()[0,:])\n    # input()\n    mpm_solver.p2g2p(k, 0.002, device=dvc)\n    save_data_at_frame(\n        mpm_solver, directory_to_save, k, save_to_ply=True, save_to_h5=False\n    )\n\n\n# extract the position, make some changes, load it back\nposition = mpm_solver.export_particle_x_to_torch()\n# print(position.shape) # shape is tensor torch.Size([n_particles, 3])\nposition[:, 0] = position[:, 0] + 0.1\nmpm_solver.import_particle_x_from_torch(position)\n\nfor k in range(50, 100):\n\n    mpm_solver.p2g2p(k, 0.002, device=dvc)\n    save_data_at_frame(\n        mpm_solver, directory_to_save, k, save_to_ply=True, save_to_h5=False\n    )\n"
  },
  {
    "path": "third_party/PhysGaussian/mpm_solver_warp/warp_utils.py",
    "content": "import warp as wp\nimport warp.torch\nimport torch\n\n\n@wp.struct\nclass MPMModelStruct:\n    ####### essential #######\n    grid_lim: float\n    n_particles: int\n    n_grid: int\n    dx: float\n    inv_dx: float\n    grid_dim_x: int\n    grid_dim_y: int\n    grid_dim_z: int\n    mu: wp.array(dtype=float)\n    lam: wp.array(dtype=float)\n    E: wp.array(dtype=float)\n    nu: wp.array(dtype=float)\n    bulk: wp.array(dtype=float)\n    material: int\n\n    ######## for plasticity ####\n    yield_stress: wp.array(dtype=float)\n    friction_angle: float\n    alpha: float\n    gravitational_accelaration: wp.vec3\n    hardening: float\n    xi: float\n    plastic_viscosity: float\n    softening: float\n\n    ####### for damping\n    rpic_damping: float\n    grid_v_damping_scale: float\n\n    ####### for PhysGaussian: covariance\n    update_cov_with_F: int\n\n\n@wp.struct\nclass MPMStateStruct:\n    ###### essential #####\n    # particle\n    particle_x: wp.array(dtype=wp.vec3)  # current position\n    particle_v: wp.array(dtype=wp.vec3)  # particle velocity\n    particle_F: wp.array(dtype=wp.mat33)  # particle elastic deformation gradient\n    particle_init_cov: wp.array(dtype=float)  # initial covariance matrix\n    particle_cov: wp.array(dtype=float)  # current covariance matrix\n    particle_F_trial: wp.array(\n        dtype=wp.mat33\n    )  # apply return mapping on this to obtain elastic def grad\n    particle_R: wp.array(dtype=wp.mat33)  # rotation matrix\n    particle_stress: wp.array(dtype=wp.mat33)  # Kirchoff stress, elastic stress\n    particle_C: wp.array(dtype=wp.mat33)\n    particle_vol: wp.array(dtype=float)  # current volume\n    particle_mass: wp.array(dtype=float)  # mass\n    particle_density: wp.array(dtype=float)  # density\n    particle_Jp: wp.array(dtype=float)\n\n    particle_selection: wp.array(\n        dtype=int\n    )  # only particle_selection[p] = 0 will be simulated\n\n    # grid\n    grid_m: wp.array(dtype=float, ndim=3)\n    grid_v_in: wp.array(dtype=wp.vec3, ndim=3)  # grid node momentum/velocity\n    grid_v_out: wp.array(\n        dtype=wp.vec3, ndim=3\n    )  # grid node momentum/velocity, after grid update\n\n    ## NOTE: newly added. a new array to store material type for each particle\n    particle_material: wp.array(dtype=int)\n\n\n# for various boundary conditions\n@wp.struct\nclass Dirichlet_collider:\n    point: wp.vec3\n    normal: wp.vec3\n    direction: wp.vec3\n\n    start_time: float\n    end_time: float\n\n    friction: float\n    surface_type: int\n\n    velocity: wp.vec3\n\n    threshold: float\n    reset: int\n    index: int\n\n    x_unit: wp.vec3\n    y_unit: wp.vec3\n    radius: float\n    v_scale: float\n    width: float\n    height: float\n    length: float\n    R: float\n\n    size: wp.vec3\n\n    horizontal_axis_1: wp.vec3\n    horizontal_axis_2: wp.vec3\n    half_height_and_radius: wp.vec2\n\n\n@wp.struct\nclass Impulse_modifier:\n    # this needs to be changed for each different BC!\n    point: wp.vec3\n    normal: wp.vec3\n    start_time: float\n    end_time: float\n    force: wp.vec3\n    forceTimesDt: wp.vec3\n    numsteps: int\n\n    point: wp.vec3\n    size: wp.vec3\n    mask: wp.array(dtype=int)\n\n\n@wp.struct\nclass MPMtailoredStruct:\n    # this needs to be changed for each different BC!\n    point: wp.vec3\n    normal: wp.vec3\n    start_time: float\n    end_time: float\n    friction: float\n    surface_type: int\n    velocity: wp.vec3\n    threshold: float\n    reset: int\n\n    point_rotate: wp.vec3\n    normal_rotate: wp.vec3\n    x_unit: wp.vec3\n    y_unit: wp.vec3\n    radius: float\n    v_scale: float\n    width: float\n    point_plane: wp.vec3\n    normal_plane: wp.vec3\n    velocity_plane: wp.vec3\n    threshold_plane: float\n\n\n@wp.struct\nclass MaterialParamsModifier:\n    point: wp.vec3\n    size: wp.vec3\n    E: float\n    nu: float\n    density: float\n    material: int\n\n\n@wp.struct\nclass ParticleVelocityModifier:\n    point: wp.vec3\n    normal: wp.vec3\n    half_height_and_radius: wp.vec2\n    rotation_scale: float\n    translation_scale: float\n\n    size: wp.vec3\n\n    horizontal_axis_1: wp.vec3\n    horizontal_axis_2: wp.vec3\n\n    start_time: float\n\n    end_time: float\n\n    velocity: wp.vec3\n\n    mask: wp.array(dtype=int)\n\n\n@wp.kernel\ndef set_vec3_to_zero(target_array: wp.array(dtype=wp.vec3)):\n    tid = wp.tid()\n    target_array[tid] = wp.vec3(0.0, 0.0, 0.0)\n\n\n@wp.kernel\ndef set_mat33_to_identity(target_array: wp.array(dtype=wp.mat33)):\n    tid = wp.tid()\n    target_array[tid] = wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n\n\n@wp.kernel\ndef add_identity_to_mat33(target_array: wp.array(dtype=wp.mat33)):\n    tid = wp.tid()\n    target_array[tid] = wp.add(\n        target_array[tid], wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n    )\n\n\n@wp.kernel\ndef subtract_identity_to_mat33(target_array: wp.array(dtype=wp.mat33)):\n    tid = wp.tid()\n    target_array[tid] = wp.sub(\n        target_array[tid], wp.mat33(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n    )\n\n\n@wp.kernel\ndef add_vec3_to_vec3(\n    first_array: wp.array(dtype=wp.vec3), second_array: wp.array(dtype=wp.vec3)\n):\n    tid = wp.tid()\n    first_array[tid] = wp.add(first_array[tid], second_array[tid])\n\n\n@wp.kernel\ndef set_value_to_float_array(target_array: wp.array(dtype=float), value: float):\n    tid = wp.tid()\n    target_array[tid] = value\n\n@wp.kernel\ndef set_value_to_int_array(target_array: wp.array(dtype=int), value: int):\n    tid = wp.tid()\n    target_array[tid] = value\n\n\n\n@wp.kernel\ndef get_float_array_product(\n    arrayA: wp.array(dtype=float),\n    arrayB: wp.array(dtype=float),\n    arrayC: wp.array(dtype=float),\n):\n    tid = wp.tid()\n    arrayC[tid] = arrayA[tid] * arrayB[tid]\n\n\ndef torch2warp_quat(t, copy=False, dtype=warp.types.float32, dvc=\"cuda:0\"):\n    assert t.is_contiguous()\n    if t.dtype != torch.float32 and t.dtype != torch.int32:\n        raise RuntimeError(\n            \"Error aliasing Torch tensor to Warp array. Torch tensor must be float32 or int32 type\"\n        )\n    assert t.shape[1] == 4\n    a = warp.types.array(\n        ptr=t.data_ptr(),\n        dtype=wp.quat,\n        shape=t.shape[0],\n        copy=False,\n        owner=False,\n        requires_grad=t.requires_grad,\n        # device=t.device.type)\n        device=dvc,\n    )\n    a.tensor = t\n    return a\n\n\ndef torch2warp_float(t, copy=False, dtype=warp.types.float32, dvc=\"cuda:0\"):\n    assert t.is_contiguous()\n    if t.dtype != torch.float32 and t.dtype != torch.int32:\n        raise RuntimeError(\n            \"Error aliasing Torch tensor to Warp array. Torch tensor must be float32 or int32 type\"\n        )\n    a = warp.types.array(\n        ptr=t.data_ptr(),\n        dtype=warp.types.float32,\n        shape=t.shape[0],\n        copy=False,\n        owner=False,\n        requires_grad=t.requires_grad,\n        # device=t.device.type)\n        device=dvc,\n    )\n    a.tensor = t\n    return a\n\n\ndef torch2warp_vec3(t, copy=False, dtype=warp.types.float32, dvc=\"cuda:0\"):\n    assert t.is_contiguous()\n    if t.dtype != torch.float32 and t.dtype != torch.int32:\n        raise RuntimeError(\n            \"Error aliasing Torch tensor to Warp array. Torch tensor must be float32 or int32 type\"\n        )\n    assert t.shape[1] == 3\n    a = warp.types.array(\n        ptr=t.data_ptr(),\n        dtype=wp.vec3,\n        shape=t.shape[0],\n        copy=False,\n        owner=False,\n        requires_grad=t.requires_grad,\n        # device=t.device.type)\n        device=dvc,\n    )\n    a.tensor = t\n    return a\n\n\ndef torch2warp_mat33(t, copy=False, dtype=warp.types.float32, dvc=\"cuda:0\"):\n    assert t.is_contiguous()\n    if t.dtype != torch.float32 and t.dtype != torch.int32:\n        raise RuntimeError(\n            \"Error aliasing Torch tensor to Warp array. Torch tensor must be float32 or int32 type\"\n        )\n    assert t.shape[1] == 3\n    a = warp.types.array(\n        ptr=t.data_ptr(),\n        dtype=wp.mat33,\n        shape=t.shape[0],\n        copy=False,\n        owner=False,\n        requires_grad=t.requires_grad,\n        # device=t.device.type)\n        device=dvc,\n    )\n    a.tensor = t\n    return a\n"
  },
  {
    "path": "third_party/PhysGaussian/particle_filling/filling.py",
    "content": "import torch\nimport os\nimport numpy as np\nimport taichi as ti\nimport mcubes\n\n# 1. densify grids\n# 2. identify grids whose density is larger than some threshold\n# 3. filling grids with particles\n# 4. identify and fill internal grids\n\n\n@ti.func\ndef compute_density(index, pos, opacity, cov, grid_dx):\n    gaussian_weight = 0.0\n    for i in range(0, 2):\n        for j in range(0, 2):\n            for k in range(0, 2):\n                node_pos = (index + ti.Vector([i, j, k])) * grid_dx\n                dist = pos - node_pos\n                gaussian_weight += ti.exp(-0.5 * dist.dot(cov @ dist))\n\n    return opacity * gaussian_weight / 8.0\n\n\n@ti.kernel\ndef densify_grids(\n    init_particles: ti.template(),\n    opacity: ti.template(),\n    cov_upper: ti.template(),\n    grid: ti.template(),\n    grid_density: ti.template(),\n    grid_dx: float,\n):\n    for pi in range(init_particles.shape[0]):\n        pos = init_particles[pi]\n        x = pos[0]\n        y = pos[1]\n        z = pos[2]\n        i = ti.floor(x / grid_dx, dtype=int)\n        j = ti.floor(y / grid_dx, dtype=int)\n        k = ti.floor(z / grid_dx, dtype=int)\n        ti.atomic_add(grid[i, j, k], 1)\n        cov = ti.Matrix(\n            [\n                [cov_upper[pi][0], cov_upper[pi][1], cov_upper[pi][2]],\n                [cov_upper[pi][1], cov_upper[pi][3], cov_upper[pi][4]],\n                [cov_upper[pi][2], cov_upper[pi][4], cov_upper[pi][5]],\n            ]\n        )\n        sig, Q = ti.sym_eig(cov)\n        sig[0] = ti.max(sig[0], 1e-8)\n        sig[1] = ti.max(sig[1], 1e-8)\n        sig[2] = ti.max(sig[2], 1e-8)\n        sig_mat = ti.Matrix(\n            [[1.0 / sig[0], 0, 0], [0, 1.0 / sig[1], 0], [0, 0, 1.0 / sig[2]]]\n        )\n        cov = Q @ sig_mat @ Q.transpose()\n        r = 0.0\n        for idx in ti.static(range(3)):\n            if sig[idx] < 0:\n                sig[idx] = ti.sqrt(-sig[idx])\n            else:\n                sig[idx] = ti.sqrt(sig[idx])\n\n            r = ti.max(r, sig[idx])\n\n        r = ti.ceil(r / grid_dx, dtype=int)\n        for dx in range(-r, r + 1):\n            for dy in range(-r, r + 1):\n                for dz in range(-r, r + 1):\n                    if (\n                        i + dx >= 0\n                        and i + dx < grid_density.shape[0]\n                        and j + dy >= 0\n                        and j + dy < grid_density.shape[1]\n                        and k + dz >= 0\n                        and k + dz < grid_density.shape[2]\n                    ):\n                        density = compute_density(\n                            ti.Vector([i + dx, j + dy, k + dz]),\n                            pos,\n                            opacity[pi],\n                            cov,\n                            grid_dx,\n                        )\n                        ti.atomic_add(grid_density[i + dx, j + dy, k + dz], density)\n\n\n@ti.kernel\ndef fill_dense_grids(\n    grid: ti.template(),\n    grid_density: ti.template(),\n    grid_dx: float,\n    density_thres: float,\n    new_particles: ti.template(),\n    start_idx: int,\n    max_particles_per_cell: int,\n) -> int:\n    new_start_idx = start_idx\n    for i, j, k in grid_density:\n        if grid_density[i, j, k] > density_thres:\n            if grid[i, j, k] < max_particles_per_cell:\n                diff = max_particles_per_cell - grid[i, j, k]\n                grid[i, j, k] = max_particles_per_cell\n                tmp_start_idx = ti.atomic_add(new_start_idx, diff)\n\n                for index in range(tmp_start_idx, tmp_start_idx + diff):\n                    di = ti.random()\n                    dj = ti.random()\n                    dk = ti.random()\n                    new_particles[index] = ti.Vector([i + di, j + dj, k + dk]) * grid_dx\n\n    return new_start_idx\n\n\n@ti.func\ndef collision_search(\n    grid: ti.template(), grid_density: ti.template(), index, dir_type, size, threshold\n) -> bool:\n    dir = ti.Vector([0, 0, 0])\n    if dir_type == 0:\n        dir[0] = 1\n    elif dir_type == 1:\n        dir[0] = -1\n    elif dir_type == 2:\n        dir[1] = 1\n    elif dir_type == 3:\n        dir[1] = -1\n    elif dir_type == 4:\n        dir[2] = 1\n    elif dir_type == 5:\n        dir[2] = -1\n\n    flag = False\n    index += dir\n    i, j, k = index\n    while ti.max(i, j, k) < size and ti.min(i, j, k) >= 0:\n        if grid_density[index] > threshold:\n            flag = True\n            break\n        index += dir\n        i, j, k = index\n\n    return flag\n\n\n@ti.func\ndef collision_times(\n    grid: ti.template(), grid_density: ti.template(), index, dir_type, size, threshold\n) -> int:\n    dir = ti.Vector([0, 0, 0])\n    times = 0\n    if dir_type > 5 or dir_type < 0:\n        times = 1\n    else:\n        if dir_type == 0:\n            dir[0] = 1\n        elif dir_type == 1:\n            dir[0] = -1\n        elif dir_type == 2:\n            dir[1] = 1\n        elif dir_type == 3:\n            dir[1] = -1\n        elif dir_type == 4:\n            dir[2] = 1\n        elif dir_type == 5:\n            dir[2] = -1\n\n        state = grid[index] > 0\n        index += dir\n        i, j, k = index\n        while ti.max(i, j, k) < size and ti.min(i, j, k) >= 0:\n            new_state = grid_density[index] > threshold\n            if new_state != state and state == False:\n                times += 1\n            state = new_state\n            index += dir\n            i, j, k = index\n\n    return times\n\n\n@ti.kernel\ndef internal_filling(\n    grid: ti.template(),\n    grid_density: ti.template(),\n    grid_dx: float,\n    new_particles: ti.template(),\n    start_idx: int,\n    max_particles_per_cell: int,\n    exclude_dir: int,\n    ray_cast_dir: int,\n    threshold: float,\n) -> int:\n    new_start_idx = start_idx\n    for i, j, k in grid:\n        if grid[i, j, k] == 0:\n            collision_hit = True\n            for dir_type in ti.static(range(6)):\n                if dir_type != exclude_dir:\n                    hit_test = collision_search(\n                        grid=grid,\n                        grid_density=grid_density,\n                        index=ti.Vector([i, j, k]),\n                        dir_type=dir_type,\n                        size=grid.shape[0],\n                        threshold=threshold,\n                    )\n                    collision_hit = collision_hit and hit_test\n\n            if collision_hit:\n                hit_times = collision_times(\n                    grid=grid,\n                    grid_density=grid_density,\n                    index=ti.Vector([i, j, k]),\n                    dir_type=ray_cast_dir,\n                    size=grid.shape[0],\n                    threshold=threshold,\n                )\n\n                if ti.math.mod(hit_times, 2) == 1:\n                    diff = max_particles_per_cell - grid[i, j, k]\n                    grid[i, j, k] = max_particles_per_cell\n                    tmp_start_idx = ti.atomic_add(new_start_idx, diff)\n                    for index in range(tmp_start_idx, tmp_start_idx + diff):\n                        di = ti.random()\n                        dj = ti.random()\n                        dk = ti.random()\n                        new_particles[index] = (\n                            ti.Vector([i + di, j + dj, k + dk]) * grid_dx\n                        )\n\n    return new_start_idx\n\n\n@ti.kernel\ndef assign_particle_to_grid(pos: ti.template(), grid: ti.template(), grid_dx: float):\n    for pi in range(pos.shape[0]):\n        p = pos[pi]\n        i = ti.floor(p[0] / grid_dx, dtype=int)\n        j = ti.floor(p[1] / grid_dx, dtype=int)\n        k = ti.floor(p[2] / grid_dx, dtype=int)\n        ti.atomic_add(grid[i, j, k], 1)\n\n\n@ti.kernel\ndef compute_particle_volume(\n    pos: ti.template(), grid: ti.template(), particle_vol: ti.template(), grid_dx: float\n):\n    for pi in range(pos.shape[0]):\n        p = pos[pi]\n        i = ti.floor(p[0] / grid_dx, dtype=int)\n        j = ti.floor(p[1] / grid_dx, dtype=int)\n        k = ti.floor(p[2] / grid_dx, dtype=int)\n        particle_vol[pi] = (grid_dx * grid_dx * grid_dx) / grid[i, j, k]\n\n\n@ti.kernel\ndef assign_particle_to_grid(\n    pos: ti.template(),\n    grid: ti.template(),\n    grid_dx: float,\n):\n    for pi in range(pos.shape[0]):\n        p = pos[pi]\n        i = ti.floor(p[0] / grid_dx, dtype=int)\n        j = ti.floor(p[1] / grid_dx, dtype=int)\n        k = ti.floor(p[2] / grid_dx, dtype=int)\n        ti.atomic_add(grid[i, j, k], 1)\n\n\ndef get_particle_volume(pos, grid_n: int, grid_dx: float, unifrom: bool = False):\n    ti_pos = ti.Vector.field(n=3, dtype=float, shape=pos.shape[0])\n    ti_pos.from_torch(pos.reshape(-1, 3))\n\n    grid = ti.field(dtype=int, shape=(grid_n, grid_n, grid_n))\n    particle_vol = ti.field(dtype=float, shape=pos.shape[0])\n\n    assign_particle_to_grid(ti_pos, grid, grid_dx)\n    compute_particle_volume(ti_pos, grid, particle_vol, grid_dx)\n\n    if unifrom:\n        vol = particle_vol.to_torch()\n        vol = torch.mean(vol).repeat(pos.shape[0])\n        return vol\n    else:\n        return particle_vol.to_torch()\n\n\ndef fill_particles(\n    pos,\n    opacity,\n    cov,\n    grid_n: int,\n    max_samples: int,\n    grid_dx: float,\n    density_thres=2.0,\n    search_thres=1.0,\n    max_particles_per_cell=1,\n    search_exclude_dir=5,\n    ray_cast_dir=4,\n    boundary: list = None,\n    smooth: bool = False,\n):\n    pos_clone = pos.clone()\n    if boundary is not None:\n        assert len(boundary) == 6\n        mask = torch.ones(pos_clone.shape[0], dtype=torch.bool).cuda()\n        max_diff = 0.0\n        for i in range(3):\n            mask = torch.logical_and(mask, pos_clone[:, i] > boundary[2 * i])\n            mask = torch.logical_and(mask, pos_clone[:, i] < boundary[2 * i + 1])\n            max_diff = max(max_diff, boundary[2 * i + 1] - boundary[2 * i])\n\n        pos = pos[mask]\n        opacity = opacity[mask]\n        cov = cov[mask]\n\n        grid_dx = max_diff / grid_n\n        new_origin = torch.tensor([boundary[0], boundary[2], boundary[4]]).cuda()\n        pos = pos - new_origin\n\n    ti_pos = ti.Vector.field(n=3, dtype=float, shape=pos.shape[0])\n    ti_opacity = ti.field(dtype=float, shape=opacity.shape[0])\n    ti_cov = ti.Vector.field(n=6, dtype=float, shape=cov.shape[0])\n    ti_pos.from_torch(pos.reshape(-1, 3))\n    ti_opacity.from_torch(opacity.reshape(-1))\n    ti_cov.from_torch(cov.reshape(-1, 6))\n\n    grid = ti.field(dtype=int, shape=(grid_n, grid_n, grid_n))\n    grid_density = ti.field(dtype=float, shape=(grid_n, grid_n, grid_n))\n    particles = ti.Vector.field(n=3, dtype=float, shape=max_samples)\n    fill_num = 0\n\n    # compute density_field\n    densify_grids(ti_pos, ti_opacity, ti_cov, grid, grid_density, grid_dx)\n\n    # fill dense grids\n    fill_num = fill_dense_grids(\n        grid,\n        grid_density,\n        grid_dx,\n        density_thres,\n        particles,\n        0,\n        max_particles_per_cell,\n    )\n    print(\"after dense grids: \", fill_num)\n\n    # smooth density_field\n    if smooth:\n        df = grid_density.to_numpy()\n        smoothed_df = mcubes.smooth(df, method=\"constrained\", max_iters=500).astype(\n            np.float32\n        )\n        grid_density.from_numpy(smoothed_df)\n        print(\"smooth finished\")\n\n    # fill internal grids\n    fill_num = internal_filling(\n        grid,\n        grid_density,\n        grid_dx,\n        particles,\n        fill_num,\n        max_particles_per_cell,\n        exclude_dir=search_exclude_dir,  # 0: x, 1: -x, 2: y, 3: -y, 4: z, 5: -z direction\n        ray_cast_dir=ray_cast_dir,  # 0: x, 1: -x, 2: y, 3: -y, 4: z, 5: -z direction\n        threshold=search_thres,\n    )\n    print(\"after internal grids: \", fill_num)\n\n    # put new particles together with original particles\n    particles_tensor = particles.to_torch()[:fill_num].cuda()\n    if boundary is not None:\n        particles_tensor = particles_tensor + new_origin\n    particles_tensor = torch.cat([pos_clone, particles_tensor], dim=0)\n\n    return particles_tensor\n\n\n@ti.kernel\ndef get_attr_from_closest(\n    ti_pos: ti.template(),\n    ti_shs: ti.template(),\n    ti_opacity: ti.template(),\n    ti_cov: ti.template(),\n    ti_new_pos: ti.template(),\n    ti_new_shs: ti.template(),\n    ti_new_opacity: ti.template(),\n    ti_new_cov: ti.template(),\n):\n    for pi in range(ti_new_pos.shape[0]):\n        p = ti_new_pos[pi]\n        min_dist = 1e10\n        min_idx = -1\n        for pj in range(ti_pos.shape[0]):\n            dist = (p - ti_pos[pj]).norm()\n            if dist < min_dist:\n                min_dist = dist\n                min_idx = pj\n        ti_new_shs[pi] = ti_shs[min_idx]\n        ti_new_opacity[pi] = ti_opacity[min_idx]\n        ti_new_cov[pi] = ti_cov[min_idx]\n\n\ndef init_filled_particles(pos, shs, cov, opacity, new_pos):\n    shs = shs.reshape(pos.shape[0], -1)\n    ti_pos = ti.Vector.field(n=3, dtype=float, shape=pos.shape[0])\n    ti_cov = ti.Vector.field(n=6, dtype=float, shape=cov.shape[0])\n    ti_shs = ti.Vector.field(n=shs.shape[1], dtype=float, shape=shs.shape[0])\n    ti_opacity = ti.field(dtype=float, shape=opacity.shape[0])\n    ti_pos.from_torch(pos.reshape(-1, 3))\n    ti_cov.from_torch(cov.reshape(-1, 6))\n    ti_shs.from_torch(shs)\n    ti_opacity.from_torch(opacity.reshape(-1))\n\n    new_shs = torch.mean(shs, dim=0).repeat(new_pos.shape[0], 1).cuda()\n    ti_new_pos = ti.Vector.field(n=3, dtype=float, shape=new_pos.shape[0])\n    ti_new_shs = ti.Vector.field(n=shs.shape[1], dtype=float, shape=new_pos.shape[0])\n    ti_new_opacity = ti.field(dtype=float, shape=new_pos.shape[0])\n    ti_new_cov = ti.Vector.field(n=6, dtype=float, shape=new_pos.shape[0])\n    ti_new_pos.from_torch(new_pos.reshape(-1, 3))\n    ti_new_shs.from_torch(new_shs)\n\n    get_attr_from_closest(\n        ti_pos,\n        ti_shs,\n        ti_opacity,\n        ti_cov,\n        ti_new_pos,\n        ti_new_shs,\n        ti_new_opacity,\n        ti_new_cov,\n    )\n\n    shs_tensor = ti_new_shs.to_torch().cuda()\n    opacity_tensor = ti_new_opacity.to_torch().cuda()\n    cov_tensor = ti_new_cov.to_torch().cuda()\n\n    shs_tensor = torch.cat([shs, shs_tensor], dim=0)\n    shs_tensor = shs_tensor.view(shs_tensor.shape[0], -1, 3)\n    opacity_tensor = torch.cat([opacity, opacity_tensor.reshape(-1, 1)], dim=0)\n    cov_tensor = torch.cat([cov, cov_tensor], dim=0)\n    return shs_tensor, opacity_tensor, cov_tensor\n"
  },
  {
    "path": "third_party/PhysGaussian/requirements.txt",
    "content": "plyfile==1.0.3\npymeshlab==2023.12.post1\ntaichi==1.5.0\nwarp_lang==0.10.1\n"
  },
  {
    "path": "third_party/PhysGaussian/utils/camera_view_utils.py",
    "content": "import os\nimport json\nimport numpy as np\nimport torch\nfrom scene.cameras import Camera as GSCamera\nfrom utils.graphics_utils import focal2fov\n\n\n# === Utility ===\n# Rodrigues formula for rotation matrix around arbitrary axis\ndef _rodrigues_rotation(axis: np.ndarray, angle_deg: float) -> np.ndarray:\n    \"\"\"Return 3×3 rotation matrix that rotates *angle_deg* degrees around *axis* (right-hand rule).\"\"\"\n    axis = axis / np.linalg.norm(axis)\n    angle_rad = np.deg2rad(angle_deg)\n    c = np.cos(angle_rad)\n    s = np.sin(angle_rad)\n    t = 1 - c\n    x, y, z = axis\n    return np.array(\n        [\n            [t * x * x + c, t * x * y - s * z, t * x * z + s * y],\n            [t * x * y + s * z, t * y * y + c, t * y * z - s * x],\n            [t * x * z - s * y, t * y * z + s * x, t * z * z + c],\n        ]\n    )\n\n\ndef generate_camera_rotation_matrix(camera_to_object, object_vertical_downward):\n    camera_to_object = camera_to_object / np.linalg.norm(\n        camera_to_object\n    )  # last column\n    # the second column of rotation matrix is pointing toward the downward vertical direction\n    camera_y = (\n        object_vertical_downward\n        - np.dot(object_vertical_downward, camera_to_object) * camera_to_object\n    )\n    camera_y = camera_y / np.linalg.norm(camera_y)  # second column\n    first_column = np.cross(camera_y, camera_to_object)\n    R = np.column_stack((first_column, camera_y, camera_to_object))\n    return R\n\n\n# supply vertical vector in world space\ndef generate_local_coord(vertical_vector):\n    vertical_vector = vertical_vector / np.linalg.norm(vertical_vector)\n    horizontal_1 = np.array([1, 1, 1])\n    if np.abs(np.dot(horizontal_1, vertical_vector)) < 0.01:\n        horizontal_1 = np.array([0.72, 0.37, -0.67])\n    # gram schimit\n    horizontal_1 = (\n        horizontal_1 - np.dot(horizontal_1, vertical_vector) * vertical_vector\n    )\n    horizontal_1 = horizontal_1 / np.linalg.norm(horizontal_1)\n    horizontal_2 = np.cross(horizontal_1, vertical_vector)\n\n    return vertical_vector, horizontal_1, horizontal_2\n\n\n# scalar (in degrees), scalar (in degrees), scalar, vec3, mat33 = [horizontal_1; horizontal_2; vertical];  -> vec3\ndef get_point_on_sphere(azimuth, elevation, radius, center, observant_coordinates):\n    canonical_coordinates = (\n        np.array(\n            [\n                np.cos(azimuth / 180.0 * np.pi) * np.cos(elevation / 180.0 * np.pi),\n                np.sin(azimuth / 180.0 * np.pi) * np.cos(elevation / 180.0 * np.pi),\n                np.sin(elevation / 180.0 * np.pi),\n            ]\n        )\n        * radius\n    )\n\n    return center + observant_coordinates @ canonical_coordinates\n\n\ndef get_camera_position_and_rotation(\n    azimuth,\n    elevation,\n    radius,\n    roll,\n    view_center,\n    observant_coordinates,\n):\n    \"\"\"Return (position, 3×3 rotation) for the given spherical coordinates & roll.\n\n    Parameters\n    ----------\n    azimuth, elevation : float\n        Standard spherical coordinates in *degrees* (0° azimuth = +h1 axis).\n    radius : float\n        Distance from camera to *view_center*.\n    roll : float\n        Rotation *around the viewing axis* in degrees.  0° keeps the camera's +X\n        aligned with *observant_coordinates*[:,0]; positive values rotate towards\n        *observant_coordinates*[:,1] (right-hand rule).\n    view_center : (3,) np.ndarray\n    observant_coordinates : (3,3) np.ndarray\n        Local orthonormal basis returned by\n        `get_center_view_worldspace_and_observant_coordinate` (h1, h2, vertical).\n    \"\"\"\n\n    # --- position on sphere -------------------------------------------------\n    position = get_point_on_sphere(\n        azimuth, elevation, radius, view_center, observant_coordinates\n    )\n\n    # --- base rotation (no roll) -------------------------------------------\n    R_base = generate_camera_rotation_matrix(\n        view_center - position, -observant_coordinates[:, 2]\n    )\n\n    # --- apply roll around forward axis ------------------------------------\n    if roll is None:\n        roll = 0.0\n    R_roll = _rodrigues_rotation(R_base[:, 2], roll)\n    R = R_roll @ R_base\n\n    return position, R\n\n\ndef get_current_radius_azimuth_elevation_roll(\n    camera_position,\n    camera_rotation,\n    view_center,\n    observant_coordinates,\n):\n    center2camera = -view_center + camera_position\n    radius = np.linalg.norm(center2camera)\n    dot_product = np.dot(center2camera, observant_coordinates[:, 2])\n    cosine = dot_product / (\n        np.linalg.norm(center2camera) * np.linalg.norm(observant_coordinates[:, 2])\n    )\n    elevation = np.rad2deg(np.pi / 2.0 - np.arccos(cosine))\n    proj_onto_hori = center2camera - dot_product * observant_coordinates[:, 2]\n    dot_product2 = np.dot(proj_onto_hori, observant_coordinates[:, 0])\n    cosine2 = dot_product2 / (\n        np.linalg.norm(proj_onto_hori) * np.linalg.norm(observant_coordinates[:, 0])\n    )\n\n    if np.dot(proj_onto_hori, observant_coordinates[:, 1]) > 0:\n        azimuth = np.rad2deg(np.arccos(cosine2))\n    else:\n        azimuth = -np.rad2deg(np.arccos(cosine2))\n\n    # --- compute roll via relative rotation --------------------------------\n    cam2world_R = camera_rotation.T  # convert to camera->world\n\n    # Base orientation with zero roll (constructed like in forward synthesis)\n    R_base = generate_camera_rotation_matrix(\n        view_center - camera_position,\n        -observant_coordinates[:, 2],\n    )\n\n    # rotation that maps base frame to the actual camera frame\n    R_rel = cam2world_R @ R_base.T\n\n    # For a pure roll, R_rel is a rotation about the Z (forward) axis, so\n    # we can recover the angle from the upper-left 2×2 block.\n    roll_rad = np.arctan2(R_rel[1, 0], R_rel[0, 0])\n    roll = np.rad2deg(roll_rad)\n\n    return radius, azimuth, elevation, roll\n\n\ndef get_camera_view(\n    model_path,\n    default_camera_index=0,\n    center_view_world_space=None,\n    observant_coordinates=None,\n    show_hint=False,\n    init_azimuthm=None,\n    init_elevation=None,\n    init_radius=None,\n    init_roll=None,\n    move_camera=False,\n    current_frame=0,\n    delta_a=0,\n    delta_e=0,\n    delta_r=0,\n    delta_roll=0,\n):\n    \"\"\"Load one of the default cameras for the scene.\"\"\"\n    ## check if model_path is a directory\n    if os.path.isdir(model_path):\n        cam_path = os.path.join(model_path, \"cameras.json\")\n    else:\n        cam_path = os.path.join(os.path.dirname(model_path), \"cameras.json\")\n\n    with open(cam_path) as f:\n        data = json.load(f)\n\n        if show_hint:\n            if default_camera_index < 0:\n                default_camera_index = 0\n            r, a, e, roll = get_current_radius_azimuth_elevation_roll(\n                data[default_camera_index][\"position\"],\n                np.asarray(data[default_camera_index][\"rotation\"]),\n                center_view_world_space,\n                observant_coordinates,\n            )\n            print(\"Default camera \", default_camera_index, \" has\")\n            print(\"azimuth:    \", a)\n            print(\"elevation:  \", e)\n            print(\"radius:     \", r)\n            print(\"roll:       \", roll)\n            print(\"Now exit program and set your own input!\")\n            exit()\n\n        if default_camera_index > -1:\n            raw_camera = data[default_camera_index]\n\n        else:\n            raw_camera = data[0]  # get data to be modified\n\n            assert init_azimuthm is not None\n            assert init_elevation is not None\n            assert init_radius is not None\n            if init_roll is None:\n                init_roll = 0.0\n\n            if move_camera:\n                assert delta_a is not None\n                assert delta_e is not None\n                assert delta_r is not None\n                assert delta_roll is not None\n                position, R = get_camera_position_and_rotation(\n                    init_azimuthm + current_frame * delta_a,\n                    init_elevation + current_frame * delta_e,\n                    init_radius + current_frame * delta_r,\n                    init_roll + current_frame * delta_roll,\n                    center_view_world_space,\n                    observant_coordinates,\n                )\n            else:\n                position, R = get_camera_position_and_rotation(\n                    init_azimuthm,\n                    init_elevation,\n                    init_radius,\n                    init_roll,\n                    center_view_world_space,\n                    observant_coordinates,\n                )\n            raw_camera[\"rotation\"] = R.tolist()\n            raw_camera[\"position\"] = position.tolist()\n\n        tmp = np.zeros((4, 4))\n        tmp[:3, :3] = raw_camera[\"rotation\"]\n        tmp[:3, 3] = raw_camera[\"position\"]\n        tmp[3, 3] = 1\n        C2W = np.linalg.inv(tmp)\n        R = C2W[:3, :3].transpose()\n        T = C2W[:3, 3]\n\n        width = raw_camera[\"width\"]\n        height = raw_camera[\"height\"]\n        fovx = focal2fov(raw_camera[\"fx\"], width)\n        fovy = focal2fov(raw_camera[\"fy\"], height)\n\n        return GSCamera(\n            colmap_id=0,\n            R=R,\n            T=T,\n            FoVx=fovx,\n            FoVy=fovy,\n            image=torch.zeros((3, height, width)),  # fake\n            gt_alpha_mask=None,\n            image_name=\"fake\",\n            uid=0,\n        )\n"
  },
  {
    "path": "third_party/PhysGaussian/utils/decode_param.py",
    "content": "import json\nimport warp as wp\nfrom mpm_solver_warp.mpm_solver_warp import MPM_Simulator_WARP\nfrom mpm_solver_warp.engine_utils import *\n\n\ndef decode_param_json(json_file):\n    f = open(json_file)\n    sim_params = json.load(f)\n    material_params = {}\n    # material parameters\n    if \"material\" in sim_params.keys():\n        material_params[\"material\"] = sim_params[\"material\"]\n    else:\n        material_params[\"material\"] = \"jelly\"\n\n    if \"grid_lim\" in sim_params.keys():\n        material_params[\"grid_lim\"] = sim_params[\"grid_lim\"]\n    else:\n        material_params[\"grid_lim\"] = 2.0\n\n    if \"n_grid\" in sim_params.keys():\n        material_params[\"n_grid\"] = sim_params[\"n_grid\"]\n    else:\n        material_params[\"n_grid\"] = 50\n\n    if \"nu\" in sim_params.keys():\n        material_params[\"nu\"] = sim_params[\"nu\"]\n        if material_params[\"nu\"] > 0.5 or material_params[\"nu\"] < 0.0:\n            raise ValueError(\"Poisson's ratio should be less than 0.5\")\n    else:\n        material_params[\"nu\"] = 0.4\n\n    if \"E\" in sim_params.keys():\n        material_params[\"E\"] = sim_params[\"E\"]\n    else:\n        material_params[\"E\"] = 1e5\n\n    if \"yield_stress\" in sim_params.keys():\n        material_params[\"yield_stress\"] = sim_params[\"yield_stress\"]\n\n    if \"hardening\" in sim_params.keys():\n        material_params[\"hardening\"] = sim_params[\"hardening\"]\n\n    if \"xi\" in sim_params.keys():\n        material_params[\"xi\"] = sim_params[\"xi\"]\n\n    if \"friction_angle\" in sim_params.keys():\n        material_params[\"friction_angle\"] = sim_params[\"friction_angle\"]\n\n    if \"plastic_viscosity\" in sim_params.keys():\n        material_params[\"plastic_viscosity\"] = sim_params[\"plastic_viscosity\"]\n\n    if \"g\" in sim_params.keys():\n        material_params[\"g\"] = sim_params[\"g\"]\n    else:\n        material_params[\"g\"] = 9.8\n\n    if \"density\" in sim_params.keys():\n        material_params[\"density\"] = sim_params[\"density\"]\n    else:\n        material_params[\"density\"] = 200.0\n\n    if \"rpic_damping\" in sim_params.keys():\n        material_params[\"rpic_damping\"] = sim_params[\"rpic_damping\"]\n\n    if \"pic_damping\" in sim_params.keys():\n        material_params[\"pic_damping\"] = sim_params[\"pic_damping\"]\n\n    if \"softening\" in sim_params.keys():\n        material_params[\"softening\"] = sim_params[\"softening\"]\n\n    if \"opacity_threshold\" in sim_params.keys():\n        material_params[\"opacity_threshold\"] = sim_params[\"opacity_threshold\"]\n\n    if \"grid_v_damping_scale\" in sim_params.keys():\n        material_params[\"grid_v_damping_scale\"] = sim_params[\"grid_v_damping_scale\"]\n\n    if \"additional_material_params\" in sim_params.keys():\n        additional_params = sim_params[\"additional_material_params\"]\n        for i in range(len(additional_params)):\n            if not \"point\" in additional_params[i].keys():\n                raise TypeError(\"point is not defined\")\n\n            if not \"size\" in additional_params[i].keys():\n                raise TypeError(\"size is not defined\")\n\n            if not \"E\" in additional_params[i].keys():\n                raise TypeError(\"E is not defined\")\n\n            if not \"nu\" in additional_params[i].keys():\n                raise TypeError(\"nu is not defined\")\n\n            if not \"density\" in additional_params[i].keys():\n                additional_params[i][\"density\"] = material_params[\"density\"]\n\n        material_params[\"additional_material_params\"] = additional_params\n\n    # boundary conditions\n    bc_params = {}\n    if \"boundary_conditions\" in sim_params.keys():\n        bc_params = sim_params[\"boundary_conditions\"]\n\n    # time step\n    time_params = {}\n    if \"substep_dt\" in sim_params.keys():\n        time_params[\"substep_dt\"] = sim_params[\"substep_dt\"]\n    else:\n        time_params[\"substep_dt\"] = 1e-4\n\n    if \"frame_dt\" in sim_params.keys():\n        time_params[\"frame_dt\"] = sim_params[\"frame_dt\"]\n    else:\n        time_params[\"frame_dt\"] = 1e-2\n\n    if \"frame_num\" in sim_params.keys():\n        time_params[\"frame_num\"] = sim_params[\"frame_num\"]\n    else:\n        time_params[\"frame_num\"] = 100\n\n    # preprocessing_params\n    preprocessing_params = {}\n    if \"nn_distance_threshold\" in sim_params.keys():\n        preprocessing_params[\"nn_distance_threshold\"] = sim_params[\"nn_distance_threshold\"]\n    else:\n        preprocessing_params[\"nn_distance_threshold\"] = 0.1\n\n    if \"to_original_coord\" in sim_params.keys():\n        preprocessing_params[\"to_original_coord\"] = sim_params[\"to_original_coord\"]\n    else:\n        preprocessing_params[\"to_original_coord\"] = True\n\n    if \"z_shift_value\" in sim_params.keys():\n        preprocessing_params[\"z_shift_value\"] = sim_params[\"z_shift_value\"]\n    else:\n        preprocessing_params[\"z_shift_value\"] = 0.0\n\n    if \"only_handle_largest_cluster\" in sim_params.keys():\n        preprocessing_params[\"only_handle_largest_cluster\"] = sim_params[\"only_handle_largest_cluster\"]\n    else:\n        preprocessing_params[\"only_handle_largest_cluster\"] = True\n\n    if \"k_smoothing_neighbors\" in sim_params.keys():\n        preprocessing_params[\"k_smoothing_neighbors\"] = sim_params[\"k_smoothing_neighbors\"]\n    else:\n        preprocessing_params[\"k_smoothing_neighbors\"] = 10\n\n    if \"out_of_bound_check_freq\" in sim_params.keys():\n        preprocessing_params[\"out_of_bound_check_freq\"] = sim_params[\"out_of_bound_check_freq\"]\n    else:\n        preprocessing_params[\"out_of_bound_check_freq\"] = 10\n    if \"fix_ground\" in sim_params.keys():\n        preprocessing_params[\"fix_ground\"] = sim_params[\"fix_ground\"]\n    else:\n        preprocessing_params[\"fix_ground\"] = True\n\n    if \"opacity_threshold\" in sim_params.keys():\n        preprocessing_params[\"opacity_threshold\"] = sim_params[\"opacity_threshold\"]\n    else:\n        preprocessing_params[\"opacity_threshold\"] = 0.02\n\n    if \"rotation_degree\" in sim_params.keys():\n        preprocessing_params[\"rotation_degree\"] = sim_params[\"rotation_degree\"]\n    else:\n        preprocessing_params[\"rotation_degree\"] = []\n\n    if \"rotation_axis\" in sim_params.keys():\n        preprocessing_params[\"rotation_axis\"] = sim_params[\"rotation_axis\"]\n    else:\n        preprocessing_params[\"rotation_axis\"] = []\n\n    if \"sim_area\" in sim_params.keys():\n        preprocessing_params[\"sim_area\"] = sim_params[\"sim_area\"]\n    else:\n        preprocessing_params[\"sim_area\"] = None\n\n    if \"particle_filling\" in sim_params.keys():\n        preprocessing_params[\"particle_filling\"] = sim_params[\"particle_filling\"]\n        filling_params = preprocessing_params[\"particle_filling\"]\n        if not \"n_grid\" in filling_params.keys():\n            filling_params[\"n_grid\"] = material_params[\"n_grid\"] * 4\n\n        if not \"density_threshold\" in filling_params.keys():\n            filling_params[\"density_threshold\"] = 5.0\n\n        if not \"search_threshold\" in filling_params.keys():\n            filling_params[\"search_threshold\"] = 3.0\n\n        if not \"max_particles_num\" in filling_params.keys():\n            filling_params[\"max_particles_num\"] = 2000000\n\n        if not \"max_partciels_per_cell\" in filling_params.keys():\n            filling_params[\"max_partciels_per_cell\"] = 1\n\n        if not \"search_exclude_direction\" in filling_params.keys():\n            filling_params[\"search_exclude_direction\"] = 5\n\n        if not \"ray_cast_direction\" in filling_params.keys():\n            filling_params[\"ray_cast_direction\"] = 4\n\n        if not \"boundary\" in filling_params.keys():\n            filling_params[\"boundary\"] = None\n\n        if not \"smooth\" in filling_params.keys():\n            filling_params[\"smooth\"] = False\n        \n        if not \"visualize\" in filling_params.keys():\n            filling_params[\"visualize\"] = False\n    else:\n        preprocessing_params[\"particle_filling\"] = None\n\n    # camera params\n    camera_params = {}\n    if \"mpm_space_viewpoint_center\" in sim_params.keys():\n        camera_params[\"mpm_space_viewpoint_center\"] = sim_params[\n            \"mpm_space_viewpoint_center\"\n        ]\n    else:\n        camera_params[\"mpm_space_viewpoint_center\"] = [1.0, 1.0, 1.0]\n    if \"mpm_space_vertical_upward_axis\" in sim_params.keys():\n        camera_params[\"mpm_space_vertical_upward_axis\"] = sim_params[\n            \"mpm_space_vertical_upward_axis\"\n        ]\n    else:\n        camera_params[\"mpm_space_vertical_upward_axis\"] = [0, 0, 1]\n    if \"default_camera_index\" in sim_params.keys():\n        camera_params[\"default_camera_index\"] = sim_params[\"default_camera_index\"]\n    else:\n        camera_params[\"default_camera_index\"] = 0\n    if \"show_hint\" in sim_params.keys():\n        camera_params[\"show_hint\"] = sim_params[\"show_hint\"]\n    else:\n        camera_params[\"show_hint\"] = False\n    if \"init_azimuthm\" in sim_params.keys():\n        camera_params[\"init_azimuthm\"] = sim_params[\"init_azimuthm\"]\n    else:\n        camera_params[\"init_azimuthm\"] = None\n    if \"init_elevation\" in sim_params.keys():\n        camera_params[\"init_elevation\"] = sim_params[\"init_elevation\"]\n    else:\n        camera_params[\"init_elevation\"] = None\n    if \"init_radius\" in sim_params.keys():\n        camera_params[\"init_radius\"] = sim_params[\"init_radius\"]\n    else:\n        camera_params[\"init_radius\"] = None\n    if \"delta_a\" in sim_params.keys():\n        camera_params[\"delta_a\"] = sim_params[\"delta_a\"]\n    else:\n        camera_params[\"delta_a\"] = None\n    if \"delta_e\" in sim_params.keys():\n        camera_params[\"delta_e\"] = sim_params[\"delta_e\"]\n    else:\n        camera_params[\"delta_e\"] = None\n    if \"delta_r\" in sim_params.keys():\n        camera_params[\"delta_r\"] = sim_params[\"delta_r\"]\n    else:\n        camera_params[\"delta_r\"] = None\n    if \"move_camera\" in sim_params.keys():\n        camera_params[\"move_camera\"] = sim_params[\"move_camera\"]\n    else:\n        camera_params[\"move_camera\"] = False\n\n    # --- roll ---\n    if \"init_roll\" in sim_params.keys():\n        camera_params[\"init_roll\"] = sim_params[\"init_roll\"]\n    else:\n        camera_params[\"init_roll\"] = 0.0\n\n    if \"delta_roll\" in sim_params.keys():\n        camera_params[\"delta_roll\"] = sim_params[\"delta_roll\"]\n    else:\n        camera_params[\"delta_roll\"] = 0.0\n\n    return material_params, bc_params, time_params, preprocessing_params, camera_params\n\n\ndef set_boundary_conditions(\n    mpm_solver: MPM_Simulator_WARP, bc_params: dict, time_params: dict\n):\n    for bc in bc_params:\n        if bc[\"type\"] == \"cuboid\":\n            assert (\n                \"point\" in bc.keys() and \"size\" in bc.keys() and \"velocity\" in bc.keys()\n            )\n            start_time = 0.0\n            end_time = 1e3\n            reset = 0\n            if \"start_time\" in bc.keys():\n                start_time = bc[\"start_time\"]\n            if \"end_time\" in bc.keys():\n                end_time = bc[\"end_time\"]\n            if \"reset\" in bc.keys():\n                reset = bc[\"reset\"]\n            mpm_solver.set_velocity_on_cuboid(\n                point=bc[\"point\"],\n                size=bc[\"size\"],\n                velocity=bc[\"velocity\"],\n                start_time=start_time,\n                end_time=end_time,\n                reset=reset,\n            )\n\n        elif bc[\"type\"] == \"particle_impulse\":\n            assert \"force\" in bc.keys()\n\n            start_time = 0.0\n            if \"start_time\" in bc.keys():\n                start_time = bc[\"start_time\"]\n            num_dt = 1\n            if \"num_dt\" in bc.keys():\n                num_dt = bc[\"num_dt\"]\n            point = [1, 1, 1]\n            if \"point\" in bc.keys():\n                point = bc[\"point\"]\n            size = [1, 1, 1]\n            if \"size\" in bc.keys():\n                size = bc[\"size\"]\n\n            mpm_solver.add_impulse_on_particles(\n                force=bc[\"force\"],\n                dt=time_params[\"substep_dt\"],\n                point=point,\n                size=size,\n                num_dt=num_dt,\n                start_time=start_time,\n            )\n        elif bc[\"type\"] == \"bounding_box\":\n            mpm_solver.add_bounding_box()\n\n        elif bc[\"type\"] == \"enforce_particle_translation\":\n            assert \"point\" in bc.keys()\n            assert \"size\" in bc.keys()\n            assert \"velocity\" in bc.keys()\n            assert \"start_time\" in bc.keys()\n            assert \"end_time\" in bc.keys()\n\n            mpm_solver.enforce_particle_velocity_translation(\n                point=bc[\"point\"],\n                size=bc[\"size\"],\n                velocity=bc[\"velocity\"],\n                start_time=bc[\"start_time\"],\n                end_time=bc[\"end_time\"],\n            )\n        elif bc[\"type\"] == \"surface_collider\":\n            assert \"point\" in bc.keys()\n            assert \"normal\" in bc.keys()\n            assert \"surface\" in bc.keys()\n            assert \"friction\" in bc.keys()\n            assert \"start_time\" in bc.keys()\n            assert \"end_time\" in bc.keys()\n\n            mpm_solver.add_surface_collider(\n                point=bc[\"point\"],\n                normal=bc[\"normal\"],\n                surface=bc[\"surface\"],\n                friction=bc[\"friction\"],\n                start_time=bc[\"start_time\"],\n                end_time=bc[\"end_time\"],\n            )\n        elif bc[\"type\"] == \"release_particles_sequentially\":\n            assert \"normal\" in bc.keys()\n            assert \"start_position\" in bc.keys()\n            assert \"end_position\" in bc.keys()\n            assert \"num_layers\" in bc.keys()\n            assert \"start_time\" in bc.keys()\n            assert \"end_time\" in bc.keys()\n\n            mpm_solver.release_particles_sequentially(\n                normal=bc[\"normal\"],\n                start_position=bc[\"start_position\"],\n                end_position=bc[\"end_position\"],\n                num_layers=bc[\"num_layers\"],\n                start_time=bc[\"start_time\"],\n                end_time=bc[\"end_time\"],\n            )\n        elif bc[\"type\"] == \"enforce_particle_velocity_rotation\":\n            assert \"normal\" in bc.keys()\n            assert \"point\" in bc.keys()\n            assert \"start_time\" in bc.keys()\n            assert \"end_time\" in bc.keys()\n            assert \"half_height_and_radius\" in bc.keys()\n            assert \"rotation_scale\" in bc.keys()\n            assert \"translation_scale\" in bc.keys()\n\n            mpm_solver.enforce_particle_velocity_rotation(\n                point=bc[\"point\"],\n                normal=bc[\"normal\"],\n                half_height_and_radius=bc[\"half_height_and_radius\"],\n                rotation_scale=bc[\"rotation_scale\"],\n                translation_scale=bc[\"translation_scale\"],\n                start_time=bc[\"start_time\"],\n                end_time=bc[\"end_time\"],\n            )\n\n        else:\n            raise TypeError(\"Undefined BC type\")\n"
  },
  {
    "path": "third_party/PhysGaussian/utils/render_utils.py",
    "content": "import sys\n\nsys.path.append(\"gaussian-splatting\")\n\nimport argparse\nimport math\nimport cv2\nimport torchvision\nimport torch\nimport os\nimport numpy as np\nimport json\nimport copy\nfrom tqdm import tqdm\n\n# Gaussian splatting dependencies\nfrom utils.sh_utils import eval_sh\nfrom scene.gaussian_model import GaussianModel\nfrom diff_gaussian_rasterization import (\n    GaussianRasterizationSettings,\n    GaussianRasterizer,\n)\nfrom scene.cameras import Camera as GSCamera\nfrom gaussian_renderer import render, GaussianModel\nfrom utils.system_utils import searchForMaxIteration\nfrom utils.graphics_utils import focal2fov\n\n\ndef initialize_resterize(\n    viewpoint_camera,\n    pc: GaussianModel,\n    pipe,\n    bg_color: torch.Tensor,\n    scaling_modifier=1.0,\n):\n    # Set up rasterization configuration\n    tanfovx = math.tan(viewpoint_camera.FoVx * 0.5)\n    tanfovy = math.tan(viewpoint_camera.FoVy * 0.5)\n\n    raster_settings = GaussianRasterizationSettings(\n        image_height=int(viewpoint_camera.image_height),\n        image_width=int(viewpoint_camera.image_width),\n        tanfovx=tanfovx,\n        tanfovy=tanfovy,\n        bg=bg_color,\n        scale_modifier=scaling_modifier,\n        viewmatrix=viewpoint_camera.world_view_transform,\n        projmatrix=viewpoint_camera.full_proj_transform,\n        sh_degree=pc.active_sh_degree,\n        campos=viewpoint_camera.camera_center,\n        prefiltered=False,\n        debug=pipe.debug,\n    )\n\n    rasterize = GaussianRasterizer(raster_settings=raster_settings)\n    return rasterize\n\n\ndef load_params_from_gs(\n    pc: GaussianModel, pipe, scaling_modifier=1.0, override_color=None\n):\n    # Create zero tensor. We will use it to make pytorch return gradients of the 2D (screen-space) means\n    screenspace_points = (\n        torch.zeros_like(\n            pc.get_xyz, dtype=pc.get_xyz.dtype, requires_grad=True, device=\"cuda\"\n        )\n        + 0\n    )\n    try:\n        screenspace_points.retain_grad()\n    except:\n        pass\n\n    means3D = pc.get_xyz\n    means2D = screenspace_points\n    opacity = pc.get_opacity\n\n    # If precomputed 3d covariance is provided, use it. If not, then it will be computed from\n    # scaling / rotation by the rasterizer.\n    scales = None\n    rotations = None\n    cov3D_precomp = None\n    if pipe.compute_cov3D_python:\n        cov3D_precomp = pc.get_covariance(scaling_modifier)\n    else:\n        scales = pc.get_scaling\n        rotations = pc.get_rotation\n\n    # If precomputed colors are provided, use them. Otherwise, if it is desired to precompute colors\n    # from SHs in Python, do it. If not, then SH -> RGB conversion will be done by rasterizer.\n    shs = None\n    colors_precomp = None\n    if override_color is None:\n        shs = pc.get_features\n    else:\n        colors_precomp = override_color\n\n    # # Those Gaussians that were frustum culled or had a radius of 0 were not visible.\n    # # They will be excluded from value updates used in the splitting criteria.\n\n    return {\n        \"pos\": means3D,\n        \"screen_points\": means2D,\n        \"shs\": shs,\n        \"colors_precomp\": colors_precomp,\n        \"opacity\": opacity,\n        \"scales\": scales,\n        \"rotations\": rotations,\n        \"cov3D_precomp\": cov3D_precomp,\n    }\n\n\ndef convert_SH(\n    shs_view,\n    viewpoint_camera,\n    pc: GaussianModel,\n    position: torch.tensor,\n    rotation: torch.tensor = None,\n):\n    shs_view = shs_view.transpose(1, 2).view(-1, 3, (pc.max_sh_degree + 1) ** 2)\n    dir_pp = position - viewpoint_camera.camera_center.repeat(shs_view.shape[0], 1)\n    if rotation is not None:\n        n = rotation.shape[0]\n        dir_pp[:n] = torch.matmul(rotation, dir_pp[:n].unsqueeze(2)).squeeze(2)\n\n    dir_pp_normalized = dir_pp / dir_pp.norm(dim=1, keepdim=True)\n    sh2rgb = eval_sh(pc.active_sh_degree, shs_view, dir_pp_normalized)\n    colors_precomp = torch.clamp_min(sh2rgb + 0.5, 0.0)\n\n    return colors_precomp\n\n\ndef save_ply(self, path):\n    mkdir_p(os.path.dirname(path))\n\n    xyz = self._xyz.detach().cpu().numpy()\n    normals = np.zeros_like(xyz)\n    f_dc = self._features_dc.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n    f_rest = self._features_rest.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n    opacities = self._opacity.detach().cpu().numpy()\n    scale = self._scaling.detach().cpu().numpy()\n    rotation = self._rotation.detach().cpu().numpy()\n\n\n    dtype_full = [(attribute, 'f4') for attribute in self.construct_list_of_attributes()]\n\n    elements = np.empty(xyz.shape[0], dtype=dtype_full)\n    attributes = np.concatenate((xyz, normals, f_dc, f_rest, opacities, scale, rotation), axis=1)\n    elements[:] = list(map(tuple, attributes))\n    el = PlyElement.describe(elements, 'vertex')\n    PlyData([el]).write(path)\n"
  },
  {
    "path": "third_party/PhysGaussian/utils/transformation_utils.py",
    "content": "import torch\nimport numpy as np\nfrom utils.camera_view_utils import *\n\n\ndef transform2origin(position_tensor):\n    min_pos = torch.min(position_tensor, 0)[0]\n    max_pos = torch.max(position_tensor, 0)[0]\n    max_diff = torch.max(max_pos - min_pos)\n    original_mean_pos = (min_pos + max_pos) / 2.0\n    scale = 1.0 / max_diff\n    original_mean_pos = original_mean_pos.to(device=\"cuda\")\n    scale = scale.to(device=\"cuda\")\n    new_position_tensor = (position_tensor - original_mean_pos) * scale\n\n    return new_position_tensor, scale, original_mean_pos\n\n\ndef undotransform2origin(position_tensor, scale, original_mean_pos):\n    return original_mean_pos + position_tensor / scale\n\n\ndef generate_rotation_matrix(degree, axis):\n    cos_theta = torch.cos(degree / 180.0 * 3.1415926)\n    sin_theta = torch.sin(degree / 180.0 * 3.1415926)\n    if axis == 0:\n        rotation_matrix = torch.tensor(\n            [[1, 0, 0], [0, cos_theta, -sin_theta], [0, sin_theta, cos_theta]]\n        )\n    elif axis == 1:\n        rotation_matrix = torch.tensor(\n            [[cos_theta, 0, sin_theta], [0, 1, 0], [-sin_theta, 0, cos_theta]]\n        )\n    elif axis == 2:\n        rotation_matrix = torch.tensor(\n            [[cos_theta, -sin_theta, 0], [sin_theta, cos_theta, 0], [0, 0, 1]]\n        )\n    else:\n        raise ValueError(\"Invalid axis selection\")\n    return rotation_matrix.cuda()\n\n\ndef generate_rotation_matrices(degrees, axises):\n    assert len(degrees) == len(axises)\n\n    matrices = []\n\n    for i in range(len(degrees)):\n        matrices.append(generate_rotation_matrix(degrees[i], axises[i]))\n\n    return matrices\n\n\ndef apply_rotation(position_tensor, rotation_matrix):\n    rotated = torch.mm(position_tensor, rotation_matrix.T)\n    return rotated\n\n\ndef apply_cov_rotation(cov_tensor, rotation_matrix):\n    rotated = torch.matmul(cov_tensor, rotation_matrix.T)\n    rotated = torch.matmul(rotation_matrix, rotated)\n    return rotated\n\n\ndef get_mat_from_upper(upper_mat):\n    upper_mat = upper_mat.reshape(-1, 6)\n    mat = torch.zeros((upper_mat.shape[0], 9), device=\"cuda\")\n    mat[:, :3] = upper_mat[:, :3]\n    mat[:, 3] = upper_mat[:, 1]\n    mat[:, 4] = upper_mat[:, 3]\n    mat[:, 5] = upper_mat[:, 4]\n    mat[:, 6] = upper_mat[:, 2]\n    mat[:, 7] = upper_mat[:, 4]\n    mat[:, 8] = upper_mat[:, 5]\n\n    return mat.view(-1, 3, 3)\n\n\ndef get_uppder_from_mat(mat):\n    mat = mat.view(-1, 9)\n    upper_mat = torch.zeros((mat.shape[0], 6), device=\"cuda\")\n    upper_mat[:, :3] = mat[:, :3]\n    upper_mat[:, 3] = mat[:, 4]\n    upper_mat[:, 4] = mat[:, 5]\n    upper_mat[:, 5] = mat[:, 8]\n\n    return upper_mat\n\n\ndef apply_rotations(position_tensor, rotation_matrices):\n    for i in range(len(rotation_matrices)):\n        position_tensor = apply_rotation(position_tensor, rotation_matrices[i])\n    return position_tensor\n\n\ndef apply_cov_rotations(upper_cov_tensor, rotation_matrices):\n    cov_tensor = get_mat_from_upper(upper_cov_tensor)\n    for i in range(len(rotation_matrices)):\n        cov_tensor = apply_cov_rotation(cov_tensor, rotation_matrices[i])\n    return get_uppder_from_mat(cov_tensor)\n\n\ndef shift2center111(position_tensor, z_shift_value=0.0):\n    tensor111 = torch.tensor([1.0, 1.0, 1.0], device=\"cuda\")\n    return position_tensor + tensor111 + torch.tensor([0.0, 0.0, z_shift_value], device=\"cuda\")\n\n\ndef undoshift2center111(position_tensor, z_shift_value=0.0):\n    tensor111 = torch.tensor([1.0, 1.0, 1.0], device=\"cuda\")\n    return position_tensor - tensor111 - torch.tensor([0.0, 0.0, z_shift_value], device=\"cuda\")\n\n\ndef apply_inverse_rotation(position_tensor, rotation_matrix):\n    rotated = torch.mm(position_tensor, rotation_matrix)\n    return rotated\n\n\ndef apply_inverse_rotations(position_tensor, rotation_matrices):\n    for i in range(len(rotation_matrices)):\n        R = rotation_matrices[len(rotation_matrices) - 1 - i]\n        position_tensor = apply_inverse_rotation(position_tensor, R)\n    return position_tensor\n\n\ndef apply_inverse_cov_rotations(upper_cov_tensor, rotation_matrices):\n    cov_tensor = get_mat_from_upper(upper_cov_tensor)\n    for i in range(len(rotation_matrices)):\n        R = rotation_matrices[len(rotation_matrices) - 1 - i]\n        cov_tensor = apply_cov_rotation(cov_tensor, R.T)\n    return get_uppder_from_mat(cov_tensor)\n\n\n# input must be (n,3) tensor on cuda\ndef undo_all_transforms(input, rotation_matrices, scale_origin, original_mean_pos):\n    return apply_inverse_rotations(\n        undotransform2origin(\n            undoshift2center111(input), scale_origin, original_mean_pos\n        ),\n        rotation_matrices,\n    )\n\n\ndef get_center_view_worldspace_and_observant_coordinate(\n    mpm_space_viewpoint_center,\n    mpm_space_vertical_upward_axis,\n    rotation_matrices,\n    scale_origin,\n    original_mean_pos,\n):\n    viewpoint_center_worldspace = undo_all_transforms(\n        mpm_space_viewpoint_center, rotation_matrices, scale_origin, original_mean_pos\n    )\n    mpm_space_up = mpm_space_vertical_upward_axis + mpm_space_viewpoint_center\n    worldspace_up = undo_all_transforms(\n        mpm_space_up, rotation_matrices, scale_origin, original_mean_pos\n    )\n    world_space_vertical_axis = worldspace_up - viewpoint_center_worldspace\n    viewpoint_center_worldspace = np.squeeze(\n        viewpoint_center_worldspace.clone().detach().cpu().numpy(), 0\n    )\n    vertical, h1, h2 = generate_local_coord(\n        np.squeeze(world_space_vertical_axis.clone().detach().cpu().numpy(), 0)\n    )\n    observant_coordinates = np.column_stack((h1, h2, vertical))\n\n    return viewpoint_center_worldspace, observant_coordinates\n"
  },
  {
    "path": "third_party/Wavelet-Generation/.gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\npip-wheel-metadata/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n.python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n**debug\n**pretrain"
  },
  {
    "path": "third_party/Wavelet-Generation/.gitmodules",
    "content": "[submodule \"external/Manifold\"]\n\tpath = external/Manifold\n\turl = https://github.com/hjwdzh/Manifold.git\n[submodule \"external/mesh_to_sdf\"]\n\tpath = external/mesh_to_sdf\n\turl = https://github.com/edward1997104/mesh_to_sdf.git\n"
  },
  {
    "path": "third_party/Wavelet-Generation/data_utils/collect_stats.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\n$ python collect_stats.py --cfg ../trainer/conf/discrete_config.yaml \\\n                          --out stats_material_voxels.npz\n\"\"\"\nimport argparse, json, numpy as np\nfrom tqdm import tqdm\nfrom collections import Counter\nfrom pathlib import Path\n\nfrom my_data import load_config, MaterialVoxelDataset, BACKGROUND_ID\n\n# ---------------------------------------------------------------------\n# running mean / variance  (Welford 1-pass, memory-safe)\n# ---------------------------------------------------------------------\nclass RunningMoments:\n    def __init__(self): self.n=0; self.mu=0.0; self.M2=0.0\n    def update(self, arr):\n        arr = arr.ravel()\n        self.n += arr.size\n        delta = arr - self.mu\n        self.mu += delta.sum() / self.n\n        self.M2 += ((arr - self.mu) * delta).sum()\n    def stats(self):\n        var = self.M2 / max(self.n-1,1)\n        return dict(count=int(self.n), mean=float(self.mu), std=float(np.sqrt(var)))\n\n# ---------------------------------------------------------------------\ndef unscale(x_scaled, lo, hi):\n    \"\"\"Invert min-max scaling from [-1,1] back to raw (log10) value.\"\"\"\n    return (x_scaled + 1.0) * (hi - lo) / 2.0 + lo\n\ndef main(cfg_yaml: str, out_file: str, nbins:int=100):\n\n    # ────────────────────────────────────────────────────────────\n    # 0.  load Hydra cfg & dataset\n    # ────────────────────────────────────────────────────────────\n    cfg = load_config(config_path=Path(cfg_yaml).parent,\n                      config_name=Path(cfg_yaml).stem) if cfg_yaml else load_config()\n    ds  = MaterialVoxelDataset(cfg)\n\n    # histogram ranges (use cfg’s training mins/maxs)\n    h_range = dict(\n        logrho=(cfg.density_min, cfg.density_max),   # still log10\n        logE   =(cfg.E_min,       cfg.E_max),        # still log10\n        nu     =(cfg.nu_min,      cfg.nu_max),       # raw ν\n    )\n    bins = {k: np.linspace(*h_range[k], nbins+1) for k in h_range}\n\n    h_logrho = np.zeros(nbins, np.int64)\n    h_logE   = np.zeros(nbins, np.int64)\n    h_nu     = np.zeros(nbins, np.int64)\n    mat_cnt  = Counter()\n\n    rm_logrho = RunningMoments(); rm_logE = RunningMoments(); rm_nu = RunningMoments()\n\n    # ────────────────────────────────────────────────────────────\n    for feat, mat_cont, mat_id, mask, _ in tqdm(ds, desc=\"collect\"):\n        m = mask.bool().numpy()\n\n        # un-scale (broadcast-safe tensors → numpy)\n        dens_log = unscale(mat_cont[0].numpy(), cfg.density_min, cfg.density_max)  # log10 ρ\n        E_log    = unscale(mat_cont[1].numpy(), cfg.E_min,       cfg.E_max)        # log10 E\n        nu_raw   = unscale(mat_cont[2].numpy(), cfg.nu_min,      cfg.nu_max)       # ν\n\n        # select foreground voxels\n        dens_fg = dens_log[m];  E_fg = E_log[m];  nu_fg = nu_raw[m]\n        ids_fg  = mat_id.numpy()[m]\n\n        rm_logrho.update(dens_fg); rm_logE.update(E_fg); rm_nu.update(nu_fg)\n        h_logrho += np.histogram(dens_fg, bins=bins[\"logrho\"])[0]\n        h_logE   += np.histogram(E_fg,    bins=bins[\"logE\"])[0]\n        h_nu     += np.histogram(nu_fg,   bins=bins[\"nu\"])[0]\n        mat_cnt.update(ids_fg.tolist())\n\n    # ────────────────────────────────────────────────────────────\n    # save\n    np.savez_compressed(\n        out_file,\n        hdr=json.dumps({\"nbins\":nbins,\"hist_range\":h_range}),\n        h_density = h_logrho,      # keep key names identical for plot_stats.py\n        h_logE    = h_logE,\n        h_nu      = h_nu,\n        density_stats=json.dumps(rm_logrho.stats()),\n        logE_stats   =json.dumps(rm_logE.stats()),\n        nu_stats     =json.dumps(rm_nu.stats()),\n        mat_ids   =np.array(list(mat_cnt.keys()), dtype=np.int32),\n        mat_freqs =np.array(list(mat_cnt.values()), dtype=np.int64),\n    )\n    print(f\"[done] stats (foreground voxels only) → {out_file}\")\n\n# ---------------------------------------------------------------------\nif __name__ == \"__main__\":\n    pa = argparse.ArgumentParser()\n    pa.add_argument(\"--cfg\", help=\"path to Hydra .yaml (optional)\")\n    pa.add_argument(\"--out\", default=\"stats_material_voxels.npz\")\n    pa.add_argument(\"--nbins\", type=int, default=100)\n    args = pa.parse_args()\n    main(args.cfg, args.out, args.nbins)\n"
  },
  {
    "path": "third_party/Wavelet-Generation/data_utils/inspect_ranges.py",
    "content": "#!/usr/bin/env python3\nimport os\nimport numpy as np\nimport glob\nimport logging\nfrom pathlib import Path\nfrom tqdm import tqdm\nfrom collections import Counter\nfrom multiprocessing import Pool, cpu_count\nfrom functools import partial\nfrom rich.console import Console\nfrom rich.table import Table\nimport shutil\nimport hydra\nfrom omegaconf import DictConfig\nfrom pixie.utils import set_logger\n# Add the parent directory to sys.path to import pixie utilities\nimport sys\nsys.path.append(str(Path(__file__).parent.parent.parent.parent))\n\nfrom pixie.utils import resolve_paths, validate_config, load_json, save_json\n\ndef process_file(fp, cfg):\n    \"\"\"Process a single material grid file and extract statistics.\"\"\"\n    obj_id = fp.split(\"/\")[-3]\n    feat_fp = f\"{cfg.paths.render_outputs_dir}/{obj_id}/clip_features_features.npy\"\n    grid_size = cfg.training.default_grid_size\n    background_id = cfg.training.background_id\n    \n    ok = (\n        os.path.exists(feat_fp)\n        and os.path.exists(fp)\n    )\n    if not ok:\n        return {'status': 'error', 'obj_id': obj_id, 'reason': 'missing files'}\n\n    try:\n        mat_shape = np.load(fp, mmap_mode='r').shape\n        feat_shape = np.load(feat_fp, mmap_mode='r').shape\n        if not (\n            mat_shape == (grid_size, grid_size, grid_size, cfg.training.in_material_channels)\n            and feat_shape == (grid_size, grid_size, grid_size, cfg.training.normalization.clip_feature_channels)\n        ):\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'invalid shape'}\n\n        mat = np.load(fp, mmap_mode=\"r\")\n        mask = mat[..., 3] != background_id\n        if not mask.any():\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'no foreground'}\n\n        # Get material statistics\n        material_ids = mat[..., 3].astype(int)\n        material_counts = Counter(material_ids.flatten())\n        total_voxels = material_ids.size\n\n        # Get physical properties\n        dens = mat[..., 0][mask]\n        E = mat[..., 1][mask]\n        nu = mat[..., 2][mask]\n\n        # Validate data to prevent NaN issues\n        if np.any(dens < 0):\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'negative density'}\n        if np.any(E < 0):\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'negative Young\\'s modulus'}\n        if np.any(np.isnan(dens)) or np.any(np.isnan(E)) or np.any(np.isnan(nu)):\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'NaN values'}\n        if np.any(np.isinf(dens)) or np.any(np.isinf(E)) or np.any(np.isinf(nu)):\n            return {'status': 'error', 'obj_id': obj_id, 'reason': 'infinite values'}\n\n        # Reservoir sampling for each property\n        def reservoir_sample(arr, cap):\n            if len(arr) <= cap:\n                return arr\n            indices = np.random.choice(len(arr), cap, replace=False)\n            return arr[indices]\n\n        reservoir_cap = cfg.training.normalization.reservoir_cap\n        return {\n            'status': 'success',\n            'material_counts': material_counts,\n            'total_voxels': total_voxels,\n            'dens': reservoir_sample(dens, reservoir_cap),\n            'E': reservoir_sample(E, reservoir_cap),\n            'nu': reservoir_sample(nu, reservoir_cap),\n            'min_max': {\n                'd': (dens.min(), dens.max()),\n                'E': (E.min(), E.max()),\n                'nu': (nu.min(), nu.max())\n            }\n        }\n    except Exception as e:\n        return {'status': 'error', 'obj_id': obj_id, 'reason': f'exception: {str(e)}'}\n\ndef save_statistics(stats, cfg):\n    \"\"\"Save computed statistics to files.\"\"\"\n    # Create output directory\n    output_dir = Path(cfg.paths.normalization_stats_dir)\n    output_dir.mkdir(parents=True, exist_ok=True)\n    \n    # Save detailed statistics as JSON\n    stats_file = output_dir / \"material_statistics.json\"\n    save_json(stats, stats_file)\n    logging.info(f\"Saved detailed statistics to {stats_file}\")\n    \n    # Save normalization ranges for easy loading\n    normalization_ranges = {\n        'density_min': float(stats['normalization_ranges']['density_p1']),\n        'density_max': float(stats['normalization_ranges']['density_p99']),\n        'E_min': float(stats['normalization_ranges']['E_p1']),\n        'E_max': float(stats['normalization_ranges']['E_p99']),\n        'nu_min': float(stats['normalization_ranges']['nu_p1']),\n        'nu_max': float(stats['normalization_ranges']['nu_p99']),\n        'density_p1': float(stats['normalization_ranges']['density_p1']),\n        'density_p99': float(stats['normalization_ranges']['density_p99']),\n        'E_p1': float(stats['normalization_ranges']['E_p1']),\n        'E_p99': float(stats['normalization_ranges']['E_p99']),\n        'nu_p1': float(stats['normalization_ranges']['nu_p1']),\n        'nu_p99': float(stats['normalization_ranges']['nu_p99']),\n    }\n    \n    ranges_file = output_dir / \"normalization_ranges.yaml\"\n    save_json(normalization_ranges, ranges_file)\n    \n    logging.info(f\"Saved normalization ranges to {ranges_file}\")\n    \n    return stats_file, ranges_file\n\n\ndef compute_dataset_statistics(cfg):\n    \"\"\"Compute statistics across the entire dataset.\"\"\"\n    paths = glob.glob(f\"{cfg.paths.render_outputs_dir}/*/sample_0/material_grid.npy\")\n    \n    if not paths:\n        raise ValueError(f\"No material grid files found in {cfg.paths.render_outputs_dir}\")\n    \n    logging.info(f\"Found {len(paths)} material grid files to process\")\n    \n    # Process files in parallel\n    n_workers = max(1, cpu_count() - 1)  # Leave one CPU free\n    process_func = partial(process_file, cfg=cfg)\n    \n    with Pool(n_workers) as pool:\n        results = list(tqdm(\n            pool.imap(process_func, paths),\n            total=len(paths),\n            desc=\"Processing files\"\n        ))\n    \n    # Separate successful and failed results\n    successful_results = []\n    failed_results = []\n    for result in results:\n        if result['status'] == 'success':\n            successful_results.append(result)\n        else:\n            failed_results.append(result)\n\n    # Save problematic object IDs and detailed reasons\n    output_dir = Path(cfg.paths.normalization_stats_dir)\n    output_dir.mkdir(parents=True, exist_ok=True)\n    \n    if failed_results:\n        # Save problematic object IDs as JSON\n        problematic_file = output_dir / 'problematic_objects.json'\n        problematic_ids = [result['obj_id'] for result in failed_results]\n        save_json(problematic_ids, problematic_file)\n        \n        # Save detailed information about problematic objects\n        detailed_problematic_file = output_dir / 'problematic_objects_detailed.json'\n        save_json(failed_results, detailed_problematic_file)\n        \n        # Group by reason for summary\n        reason_counts = Counter(result.get('reason', 'unknown') for result in failed_results)\n        \n        logging.info(f\"Found {len(failed_results)} problematic objects:\")\n        for reason, count in sorted(reason_counts.items()):\n            logging.info(f\"  - {reason}: {count} objects\")\n        logging.info(f\"Problematic object IDs saved to: {problematic_file}\")\n        logging.info(f\"Detailed info saved to: {detailed_problematic_file}\")\n\n    logging.info(f\"Total valid objects: {len(successful_results)}\")\n\n    # Aggregate results\n    material_counts = Counter()\n    total_voxels = 0\n    reservoir_d = []\n    reservoir_E = []\n    reservoir_nu = []\n    d_min = d_max = E_min = E_max = nu_min = nu_max = None\n\n    for result in tqdm(successful_results, desc=\"Aggregating results\"):\n        material_counts.update(result['material_counts'])\n        total_voxels += result['total_voxels']\n        \n        # Update min/max\n        d_min = result['min_max']['d'][0] if d_min is None else min(d_min, result['min_max']['d'][0])\n        d_max = result['min_max']['d'][1] if d_max is None else max(d_max, result['min_max']['d'][1])\n        E_min = result['min_max']['E'][0] if E_min is None else min(E_min, result['min_max']['E'][0])\n        E_max = result['min_max']['E'][1] if E_max is None else max(E_max, result['min_max']['E'][1])\n        nu_min = result['min_max']['nu'][0] if nu_min is None else min(nu_min, result['min_max']['nu'][0])\n        nu_max = result['min_max']['nu'][1] if nu_max is None else max(nu_max, result['min_max']['nu'][1])\n        \n        # Combine reservoir samples\n        reservoir_d.extend(result['dens'])\n        reservoir_E.extend(result['E'])\n        reservoir_nu.extend(result['nu'])\n\n    # Final reservoir sampling if needed\n    reservoir_cap = cfg.training.normalization.reservoir_cap\n    if len(reservoir_d) > reservoir_cap:\n        indices = np.random.choice(len(reservoir_d), reservoir_cap, replace=False)\n        reservoir_d = np.array(reservoir_d)[indices]\n        reservoir_E = np.array(reservoir_E)[indices]\n        reservoir_nu = np.array(reservoir_nu)[indices]\n\n    # ------------------- compute statistics -------------------------------------------\n    def pct(arr, p):\n        \"\"\"percentile if array not empty, else nan\"\"\"\n        arr = np.asarray(arr)\n        return np.percentile(arr, p) if arr.size else float(\"nan\")\n\n    # Log transform for density and Young's modulus\n    dens_log = np.log10(np.maximum(np.asarray(reservoir_d), 1e-6))\n    E_log = np.log10(np.maximum(np.asarray(reservoir_E), 1e-6))\n    nu_arr = np.asarray(reservoir_nu)\n\n    # Compute comprehensive statistics\n    stats = {\n        'dataset_info': {\n            'total_objects': len(successful_results),\n            'failed_objects': len(failed_results),\n            'total_voxels': int(total_voxels),\n        },\n        'material_distribution': {\n            str(mat_id): {\n                'count': int(count),\n                'percentage': float((count / total_voxels) * 100)\n            }\n            for mat_id, count in sorted(material_counts.items())\n        },\n        'raw_ranges': {\n            'density': {'min': float(d_min), 'max': float(d_max)},\n            'youngs_modulus': {'min': float(E_min), 'max': float(E_max)},\n            'poisson_ratio': {'min': float(nu_min), 'max': float(nu_max)},\n        },\n        'log_ranges': {\n            'density': {\n                'min': float(dens_log.min()),\n                'max': float(dens_log.max()),\n                'p1': float(pct(dens_log, 1)),\n                'p99': float(pct(dens_log, 99))\n            },\n            'youngs_modulus': {\n                'min': float(E_log.min()),\n                'max': float(E_log.max()),\n                'p1': float(pct(E_log, 1)),\n                'p99': float(pct(E_log, 99))\n            }\n        },\n        'poisson_percentiles': {\n            f'p{p:02d}': float(pct(nu_arr, p))\n            for p in [1, 5, 10, 25, 50, 75, 90, 95, 99]\n        },\n        'normalization_ranges': {\n            'density_p1': float(pct(dens_log, 1)),\n            'density_p99': float(pct(dens_log, 99)),\n            'E_p1': float(pct(E_log, 1)),\n            'E_p99': float(pct(E_log, 99)),\n            'nu_p1': float(pct(nu_arr, 1)),\n            'nu_p99': float(pct(nu_arr, 99)),\n        }\n    }\n\n    # Print summary report using rich\n    console = Console()\n    \n    # --- Material ID Distribution ---\n    table = Table(title=\"Material ID Distribution\")\n    table.add_column(\"Material ID\", justify=\"right\", style=\"cyan\")\n    table.add_column(\"Voxel Count\", justify=\"right\", style=\"magenta\")\n    table.add_column(\"Percentage\", justify=\"right\", style=\"green\")\n    \n    for mat_id, count in sorted(material_counts.items()):\n        percentage = (count / total_voxels) * 100\n        table.add_row(str(mat_id), f\"{count:,}\", f\"{percentage:.2f}%\")\n    \n    console.print(table)\n    \n    # --- Main Statistics Table ---\n    table = Table(title=\"Physical Property Statistics\")\n    table.add_column(\"Property\", style=\"cyan\", no_wrap=True)\n    table.add_column(\"Min\", justify=\"right\", style=\"magenta\")\n    table.add_column(\"Max\", justify=\"right\", style=\"magenta\")\n    table.add_column(\"Min (log10)\", justify=\"right\", style=\"green\")\n    table.add_column(\"Max (log10)\", justify=\"right\", style=\"green\")\n    table.add_column(\"p1\", justify=\"right\", style=\"yellow\")\n    table.add_column(\"p99\", justify=\"right\", style=\"red\")\n\n    table.add_row(\n        \"Density\",\n        f\"{d_min:.4g}\", f\"{d_max:.4g}\",\n        f\"{dens_log.min():.3f}\", f\"{dens_log.max():.3f}\",\n        f\"{pct(dens_log, 1):.3f}\", f\"{pct(dens_log, 99):.3f}\"\n    )\n    table.add_row(\n        \"Young's E\",\n        f\"{E_min:.4g}\", f\"{E_max:.4g}\",\n        f\"{E_log.min():.3f}\", f\"{E_log.max():.3f}\",\n        f\"{pct(E_log, 1):.3f}\", f\"{pct(E_log, 99):.3f}\"\n    )\n    table.add_row(\n        \"Poisson ν\",\n        f\"{nu_min:.4f}\", f\"{nu_max:.4f}\",\n        \"_\", \"_\",  # Log scale is not used for Poisson's ratio\n        f\"{pct(nu_arr, 1):.4f}\", f\"{pct(nu_arr, 99):.4f}\"\n    )\n    console.print(table)\n\n    return stats\n\n\n@hydra.main(version_base=None, config_path=\"../../../config\", config_name=\"config\")\ndef main(cfg: DictConfig) -> None:\n    \"\"\"Main function to compute material property statistics across the dataset.\"\"\"\n    set_logger()\n    \n    validate_config(cfg, single_obj=False)\n    cfg = resolve_paths(cfg)\n    \n    # Clean up old normalization stats before recomputing\n    output_dir = Path(cfg.paths.normalization_stats_dir)\n    shutil.rmtree(output_dir, ignore_errors=True)\n    \n    logging.info(\"Computing dataset statistics for material properties...\")\n    \n    stats = compute_dataset_statistics(cfg)\n    stats_file, ranges_file = save_statistics(stats, cfg)\n    \n    console = Console()\n    console.print(f\"\\n[bold green]✓ Statistics computation completed![/bold green]\")\n    console.print(f\"Detailed statistics saved to: [cyan]{stats_file}[/cyan]\")\n    console.print(f\"Normalization ranges saved to: [cyan]{ranges_file}[/cyan]\")\n    console.print(f\"You can use the ranges from [cyan]{ranges_file}[/cyan] to update your training config.\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "third_party/Wavelet-Generation/data_utils/my_data.py",
    "content": "import torch\nimport os\nimport numpy as np\nimport socket\nimport yaml\nfrom tqdm import tqdm\nimport hydra\nfrom omegaconf import DictConfig\nfrom typing import Tuple\nfrom pathlib import Path\nfrom hydra.core.global_hydra import GlobalHydra\nfrom hydra import initialize, compose\nfrom pixie.utils import get_obj_class_for_id, load_json\nfrom pixie.training_utils import load_normalization_ranges\nimport logging\n# --------------------------------------------------\n# dataset ----------------------------------------------------------------\n# --------------------------------------------------\nclass MaterialVoxelDataset(torch.utils.data.Dataset):\n    \"\"\"\n    Each sample directory must contain\n        ├─ clip_features_features.npy      (grid_size,grid_size,grid_size,feature_channels) float32\n        ├─ clip_features_mask.npy          (grid_size,grid_size,grid_size) float32\n        └─ sample_0\n           └─ material_grid.npy            (grid_size,grid_size,grid_size,material_channels)   float32\n           # └─ mask.npy                     (grid_size,grid_size,grid_size)     float32 (optional) - OLD REFERENCE\n    \"\"\"\n\n    def __init__(self, cfg):\n        \"\"\"\n        Args\n        ----\n        cfg : omegaconf.DictConfig\n              needs the following keys\n                  .data_dir\n                  .sample_id\n                  .default_grid_size\n                  .num_material_classes\n                  .density_min / .density_max   (after log10)\n                  .E_min / .E_max               (after log10)\n                  .nu_min / .nu_max\n        \"\"\"\n        self.cfg = cfg\n        self.to_normalize = self.cfg.training.to_normalize\n        self.feature_type = self.cfg.training.feature_type\n        self.target_obj_classes = self.cfg.training.target_obj_classes\n        self.problematic_objects = self._load_problematic_objects()\n        self.data_files, self.feature_files, self.mask_files, self.obj_ids = self._collect_files()\n        logging.info(f\"[DATASET] Loaded {len(self.data_files)} data files.\")\n\n    # ---------- I/O helpers --------------------------------------------\n    def _load_problematic_objects(self):\n        \"\"\"Load list of problematic object IDs to skip.\"\"\"\n        problematic_file = Path(self.cfg.paths.normalization_stats_dir) / \"problematic_objects.json\"\n        if problematic_file.exists():\n            problematic_objects = load_json(problematic_file)\n            logging.warning(f\"Loaded {len(problematic_objects)} problematic objects to skip\")\n            return set(problematic_objects)\n        return set()\n\n    def _collect_files(self):\n        data_files, feat_files, mask_files, obj_ids = [], [], [], []\n        D = self.cfg.training.default_grid_size\n        C_feat = self.cfg.training.feature_channels\n        initial_C_mat = self.cfg.training.in_material_channels\n        logging.info(f\"[DATASET] Loading data from {self.cfg.paths.render_outputs_dir}\")\n        for obj_id in os.listdir(self.cfg.paths.render_outputs_dir):\n            # Skip problematic objects\n            if obj_id in self.problematic_objects:\n                logging.warning(f\"Skipping {obj_id} because it is in the problematic objects list\")\n                continue\n                \n            obj_class = get_obj_class_for_id(obj_id, self.cfg)\n            if self.target_obj_classes is not None and obj_class not in self.target_obj_classes:\n                continue\n\n            if self.feature_type == \"clip\":\n                feat_fp = f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/clip_features_features.npy\"\n            elif self.feature_type == \"rgb\":\n                feat_fp = f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/clip_features_rgb.npy\"\n            elif self.feature_type == \"occupancy\":\n                feat_fp = f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/sample_{self.cfg.training.sample_id}/mask.npy\"\n            else:\n                raise ValueError(f\"Invalid feature type: {self.feature_type}\")\n            mat_fp  = (\n                f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/sample_{self.cfg.training.sample_id}/\"\n                f\"material_grid.npy\"\n            )\n            # mask_fp = (\n            #     f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/sample_{self.cfg.training.sample_id}/\"\n            #     f\"mask.npy\"\n            # )\n            mask_fp = (\n                f\"{self.cfg.paths.render_outputs_dir}/{obj_id}/clip_features_mask.npy\"\n            )\n            if not os.path.exists(feat_fp):\n                logging.warning(f\"Skipping {obj_id} because {feat_fp} does not exist\")\n                continue\n            if not os.path.exists(mat_fp):\n                logging.warning(f\"Skipping {obj_id} because {mat_fp} does not exist\")\n                continue\n            \n            # ---------------- Material-ID sanity check -----------------\n            try:\n                mat_chn = np.load(mat_fp, mmap_mode=\"r\")[..., -1]  # (D,D,D) int - last channel is material_id\n                max_id  = mat_chn.max()\n                min_id  = mat_chn.min()\n                if not (0 <= min_id < self.cfg.training.num_material_classes) or max_id >= self.cfg.training.num_material_classes:\n                    logging.warning(f\"[Data warning] Skipping {obj_id}: material_id outside valid range Your range: (min {min_id}, max {max_id}). Valid range: (0, {self.cfg.training.num_material_classes - 1})\")\n                    continue  # invalid labels → skip sample\n                    # raise ValueError(f\"[Data warning] Skipping {obj_id}: material_id outside valid range Your range: (min {min_id}, max {max_id}). Valid range: (0, {self.cfg.training.num_material_classes - 1})\")\n            except Exception as e:\n                logging.warning(f\"[Data warning] Could not validate material_id for {obj_id}: {e}. Skipping.\")\n                continue\n\n            mat_shape  = np.load(mat_fp,  mmap_mode='r').shape  # (D,H,W,material_channels) ?\n            feat_shape = np.load(feat_fp, mmap_mode='r').shape  # (D,H,W,feature_channels) ?\n            if len(feat_shape) == 3:\n                feat_shape = (D, D, D, 1)\n\n            if not (\n                mat_shape == (D, D, D, initial_C_mat)\n                and feat_shape == (D, D, D, C_feat)\n            ):\n                logging.warning(f\"[Data warning] Skipping {obj_id}: mat_shape: {mat_shape} != ({D, D, D, initial_C_mat}) or feat_shape: {feat_shape} != ({D, D, D, C_feat})\")\n                continue\n\n            data_files.append(mat_fp)\n            feat_files.append(feat_fp)\n            mask_files.append(mask_fp)\n            obj_ids.append(obj_id)\n        return data_files, feat_files, mask_files, obj_ids\n\n    # ---------- scaling utils ------------------------------------------\n    def _scale(self, x, lo, hi):\n        \"\"\"min‑max to [‑1,1] (expects x already log‑scaled where needed).\"\"\"\n        x = np.clip(x, lo, hi)\n        return 2.0 * (x - lo) / (hi - lo) - 1.0\n\n    # def _create_and_save_mask(self, mat_fp, mask_fp):\n    #     \"\"\"Create mask based on material_id != background_id and save it.\"\"\"\n    #     mat = np.load(mat_fp)\n    #     background_id = self.cfg.training.background_id\n    #     mask = (mat[..., -1] != background_id).astype(np.float32)  # 1 for foreground, 0 for background\n    #     np.save(mask_fp, mask)\n    #     return mask\n\n    def _load_clip_features_mask(self, mask_fp):\n        \"\"\"Load the pre-computed clip_features_mask.npy file.\"\"\"\n        if not os.path.exists(mask_fp):\n            raise FileNotFoundError(f\"clip_features_mask.npy not found at {mask_fp}. Please run voxelization first.\")\n        mask = np.load(mask_fp).astype(np.float32)\n        return mask\n\n    # ---------- torch Dataset interface --------------------------------\n    def __len__(self):\n        return len(self.data_files)\n\n\n    def __getitem__(self, idx):\n        # --- load material grid (D,H,W,material_channels) --------------------------------\n        mat = np.load(self.data_files[idx]).astype(np.float32)\n        # --- load CLIP features (D,H,W,feature_channels) -------------------------------\n        feat = np.load(self.feature_files[idx]).astype(np.float32)\n        \n        if self.feature_type == \"occupancy\" and feat.ndim == 3:\n            feat = np.expand_dims(feat, axis=-1) # (D,D,D) -> (D,D,D,1)\n        \n        # --- load clip features mask -----------------------------------------\n        mask_fp = self.mask_files[idx]\n        # if os.path.exists(mask_fp):\n        #     mask = np.load(mask_fp).astype(np.float32)\n        # else:\n        #     mask = self._create_and_save_mask(self.data_files[idx], mask_fp)\n        mask = self._load_clip_features_mask(mask_fp)\n        \n        # --- extract material properties and IDs ---\n        density = mat[..., 0]\n        E = mat[..., 1]\n        nu = mat[..., 2]\n        mat_id_np = mat[..., -1]  # Last channel is material_id\n        \n        # --- safeguard: assert mask consistency with material_id background ---\n        background_id = self.cfg.training.background_id\n        expected_mask = (mat_id_np != background_id).astype(np.float32)\n        \n        if self.cfg.training.enforce_mask_consistency:\n            assert np.array_equal(mask, expected_mask), \\\n                f\"Mask inconsistency for {self.obj_ids[idx]}: clip_features_mask.npy doesn't match material_id-based mask\"\n        \n        # --- create info dictionary with object ID ------------------------\n        info = {\n            \"obj_id\": self.obj_ids[idx], \n            \"sample_id\": self.cfg.training.sample_id,\n            \"data_path\": self.data_files[idx],\n            \"feature_path\": self.feature_files[idx],\n            \"mask_path\": mask_fp\n        }\n        \n        if self.to_normalize:\n            # mat = mat.transpose(3, 0, 1, 2)\n            # feat = feat.transpose(3, 0, 1, 2)\n            # return mat, feat, mask, info\n\n            # continuous channels ------------------------------------------------\n            density = np.log10(density + 1e-6)  # log scale\n            E       = np.log10(E + 1e-6)\n\n            density = self._scale(\n                density, self.cfg.training.density_min, self.cfg.training.density_max\n            )\n            E = self._scale(E, self.cfg.training.E_min, self.cfg.training.E_max)\n            nu = self._scale(nu, self.cfg.training.nu_min, self.cfg.training.nu_max)\n\n        # categorical channel ------------------------------------------------\n        mat_id = torch.from_numpy(mat_id_np.astype(np.int64))  # Last channel is material_id\n\n        # concat –> (D,H,W, 3+K)\n        mat_cont   = np.stack([density, E, nu], axis=-1)        # (D,H,W,3)\n        mat_cont = torch.from_numpy(mat_cont).permute(3, 0, 1, 2)\n        feat = torch.from_numpy(feat).permute(3, 0, 1, 2)  # (feature_channels,D,H,W)\n        mask = torch.from_numpy(mask)  # (D,H,W)\n\n        return feat, mat_cont, mat_id, mask, info\n\n\n# ----------------------------------------------------------------------------\n# Dataset for segmentation\n# ----------------------------------------------------------------------------\nclass MaterialSegmentationDataset(MaterialVoxelDataset):\n    \"\"\"Load CLIP feature grids and corresponding *discrete* material_id grids.\n\n    Each sample directory must contain\n        ├─ clip_features_features.npy      (D,D,D,feature_channels) float32\n        └─ sample_<sample_id>/material_grid.npy (D,D,D,material_channels) float32 where the\n           last channel is the integer material id (0‑background_id-1).\n    \"\"\"\n    def __init__(self, cfg):\n        super().__init__(cfg)\n\n    def __getitem__(self, idx):\n        feat, mat_cont, mat_id, mask, info = super().__getitem__(idx)\n        return feat, mat_id, mask, info\n\nclass MaterialVoxelDatasetContinuous(MaterialVoxelDataset):\n    \"\"\"\n    Extends MaterialVoxelDataset but only returns continuous values (density, E, nu).\n    Each sample directory must contain\n        ├─ clip_features_features.npy      (grid_size,grid_size,grid_size,feature_channels) float32\n        ├─ clip_features_mask.npy          (grid_size,grid_size,grid_size) float32\n        └─ sample_0\n           └─ material_grid.npy            (grid_size,grid_size,grid_size,material_channels)   float32\n           # └─ mask.npy                     (grid_size,grid_size,grid_size)     float32 (optional) - OLD REFERENCE\n    \"\"\"\n    def __init__(self, cfg):\n        super().__init__(cfg)\n\n    def __getitem__(self, idx):\n        # feat_torch, mat_continuous_torch, mat_id_torch, mask_torch, info\n        feat, mat_cont, mat_id, mask, info = super().__getitem__(idx)\n        return feat, mat_cont, mask, info\n\n@hydra.main(version_base=None, config_path=\"../../../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    cfg = load_normalization_ranges(cfg)\n    combined_dataset = MaterialVoxelDataset(cfg)\n    # discrete_dataset = MaterialSegmentationDataset(cfg)\n    # continuous_dataset = MaterialVoxelDatasetContinuous(cfg)\n    # print(\"len(discrete_dataset): \", len(discrete_dataset))\n    # print(\"len(continuous_dataset): \", len(continuous_dataset))\n    if cfg.feature_type == \"clip\":\n        D = cfg.features.clip.feature_channels\n    elif cfg.feature_type == \"rgb\":\n        D = cfg.features.rgb.feature_channels\n    elif cfg.feature_type == \"occupancy\":\n        D = cfg.features.occupancy.feature_channels\n    else:\n        raise ValueError(f\"Invalid feature type: {cfg.feature_type}\")\n\n    print(f\"len(combined_dataset): {len(combined_dataset)}\")\n    filtered_indices = [i for i, sample_obj_id in enumerate(combined_dataset.obj_ids) if sample_obj_id == \"pixie\"]\n    print(f\"len(filtered_indices): {len(filtered_indices)}\")\n    # for i in tqdm(range(len(discrete_dataset))):\n    # # for i in tqdm(range(10)):\n    #     feat, mat_id, mask, info = discrete_dataset[i]\n    #     feat_cont, mat_cont, mask_cont, info_cont = continuous_dataset[i]\n    #     feat_combined, mat_cont_combined, mat_id_combined, mask_combined, info_combined = combined_dataset[i]\n    #     assert feat.shape == feat_cont.shape == (D, 64, 64, 64), f\"feat.shape: {feat.shape}, feat_cont.shape: {feat_cont.shape}\"\n    #     # assert mat_id.shape == mat_id_cont.shape, f\"mat_id.shape: {mat_id.shape}, mat_id_cont.shape: {mat_id_cont.shape}\"\n    #     assert mask.shape == mask_cont.shape, f\"mask.shape: {mask.shape}, mask_cont.shape: {mask_cont.shape}\"\n    #     assert mat_id.shape == (64, 64, 64), f\"mat_id.shape: {mat_id.shape}\"\n    #     assert mat_cont.shape == (3, 64, 64, 64), f\"mat_cont.shape: {mat_cont.shape}\"\n    #     assert info == info_cont\n\n    #     assert feat_combined.shape == feat.shape, f\"feat_combined.shape: {feat_combined.shape}, feat.shape: {feat.shape}\"\n    #     assert mat_cont_combined.shape == mat_cont.shape, f\"mat_cont_combined.shape: {mat_cont_combined.shape}, mat_cont.shape: {mat_cont.shape}\"\n    #     assert mat_id_combined.shape == mat_id.shape, f\"mat_id_combined.shape: {mat_id_combined.shape}, mat_id.shape: {mat_id.shape}\"\n    #     assert mask_combined.shape == mask.shape, f\"mask_combined.shape: {mask_combined.shape}, mask.shape: {mask.shape}\"\n    #     assert info_combined == info, f\"info_combined: {info_combined}, info: {info}\"\n\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/diffusion_network.py",
    "content": "from abc import abstractmethod\n\nimport math\n\nimport numpy as np\nimport torch\nimport torch as th\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom .fp16_util import convert_module_to_f16, convert_module_to_f32\nfrom .nn import (\n    SiLU,\n    conv_nd,\n    linear,\n    avg_pool_nd,\n    zero_module,\n    normalization,\n    timestep_embedding,\n    checkpoint,\n)\n\n\nclass TimestepBlock(nn.Module):\n    \"\"\"\n    Any module where forward() takes timestep embeddings as a second argument.\n    \"\"\"\n\n    @abstractmethod\n    def forward(self, x, emb):\n        \"\"\"\n        Apply the module to `x` given `emb` timestep embeddings.\n        \"\"\"\n\n\nclass TimestepEmbedSequential(nn.Sequential, TimestepBlock):\n    \"\"\"\n    A sequential module that passes timestep embeddings to the children that\n    support it as an extra input.\n    \"\"\"\n\n    def forward(self, x, emb):\n        for layer in self:\n            if isinstance(layer, TimestepBlock):\n                x = layer(x, emb)\n            else:\n                x = layer(x)\n        return x\n\n\nclass Upsample(nn.Module):\n    \"\"\"\n    An upsampling layer with an optional convolution.\n    :param channels: channels in the inputs and outputs.\n    :param use_conv: a bool determining if a convolution is applied.\n    :param dims: determines if the signal is 1D, 2D, or 3D\n    \"\"\"\n\n    def __init__(self, channels, use_conv, dims=2):\n        super().__init__()\n        self.channels = channels\n        self.use_conv = use_conv\n        self.dims = dims\n        if use_conv:\n            self.conv = conv_nd(dims, channels, channels, 3, padding=1)\n\n    def forward(self, x):\n        assert x.shape[1] == self.channels\n        x = F.interpolate(x, scale_factor=2, mode=\"nearest\")\n        if self.use_conv:\n            x = self.conv(x)\n        return x\n\n\nclass Downsample(nn.Module):\n    \"\"\"\n    A downsampling layer with an optional convolution.\n    :param channels: channels in the inputs and outputs.\n    :param use_conv: a bool determining if a convolution is applied.\n    :param dims: determines if the signal is 1D, 2D, or 3D. If 3D, then\n                 downsampling occurs in the inner-two dimensions.\n    \"\"\"\n\n    def __init__(self, channels, use_conv, dims=2):\n        super().__init__()\n        self.channels = channels\n        self.use_conv = use_conv\n        self.dims = dims\n        stride = 2\n        if use_conv:\n            self.op = conv_nd(dims, channels, channels, 3, stride=stride, padding=1)\n        else:\n            self.op = avg_pool_nd(stride)\n\n    def forward(self, x):\n        assert x.shape[1] == self.channels\n        return self.op(x)\n\n\nclass ResBlock(TimestepBlock):\n    \"\"\"\n    A residual block that can optionally change the number of channels.\n    :param channels: the number of input channels.\n    :param emb_channels: the number of timestep embedding channels.\n    :param dropout: the rate of dropout.\n    :param out_channels: if specified, the number of out channels.\n    :param use_conv: if True and out_channels is specified, use a spatial\n        convolution instead of a smaller 1x1 convolution to change the\n        channels in the skip connection.\n    :param dims: determines if the signal is 1D, 2D, or 3D.\n    :param use_checkpoint: if True, use gradient checkpointing on this module.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        emb_channels,\n        dropout,\n        out_channels=None,\n        use_conv=False,\n        use_scale_shift_norm=False,\n        dims=2,\n        use_checkpoint=False,\n        activation = SiLU()\n    ):\n        super().__init__()\n        self.channels = channels\n        self.emb_channels = emb_channels\n        self.dropout = dropout\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_checkpoint = use_checkpoint\n        self.use_scale_shift_norm = use_scale_shift_norm\n\n        self.in_layers = nn.Sequential(\n            normalization(channels),\n            activation,\n            conv_nd(dims, channels, self.out_channels, 3, padding=1),\n        )\n        self.emb_layers = nn.Sequential(\n            activation,\n            linear(\n                emb_channels,\n                2 * self.out_channels if use_scale_shift_norm else self.out_channels,\n            ),\n        )\n        self.out_layers = nn.Sequential(\n            normalization(self.out_channels),\n            activation,\n            nn.Dropout(p=dropout),\n            zero_module(\n                conv_nd(dims, self.out_channels, self.out_channels, 3, padding=1)\n            ),\n        )\n\n        if self.out_channels == channels:\n            self.skip_connection = nn.Identity()\n        elif use_conv:\n            self.skip_connection = conv_nd(\n                dims, channels, self.out_channels, 3, padding=1\n            )\n        else:\n            self.skip_connection = conv_nd(dims, channels, self.out_channels, 1)\n\n    def forward(self, x, emb):\n        \"\"\"\n        Apply the block to a Tensor, conditioned on a timestep embedding.\n        :param x: an [N x C x ...] Tensor of features.\n        :param emb: an [N x emb_channels] Tensor of timestep embeddings.\n        :return: an [N x C x ...] Tensor of outputs.\n        \"\"\"\n        return checkpoint(\n            self._forward, (x, emb), self.parameters(), self.use_checkpoint\n        )\n\n    def _forward(self, x, emb):\n        h = self.in_layers(x)\n        emb_out = self.emb_layers(emb).type(h.dtype)\n        while len(emb_out.shape) < len(h.shape):\n            emb_out = emb_out[..., None]\n        if self.use_scale_shift_norm:\n            out_norm, out_rest = self.out_layers[0], self.out_layers[1:]\n            scale, shift = th.chunk(emb_out, 2, dim=1)\n            h = out_norm(h) * (1 + scale) + shift\n            h = out_rest(h)\n        else:\n            h = h + emb_out\n            h = self.out_layers(h)\n        return self.skip_connection(x) + h\n\n\nclass AttentionBlock(nn.Module):\n    \"\"\"\n    An attention block that allows spatial positions to attend to each other.\n    Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.\n    \"\"\"\n\n    def __init__(self, channels, num_heads=1, use_checkpoint=False):\n        super().__init__()\n        self.channels = channels\n        self.num_heads = num_heads\n        self.use_checkpoint = use_checkpoint\n\n        self.norm = normalization(channels)\n        self.qkv = conv_nd(1, channels, channels * 3, 1)\n        self.attention = QKVAttention()\n        self.proj_out = zero_module(conv_nd(1, channels, channels, 1))\n\n    def forward(self, x):\n        return checkpoint(self._forward, (x,), self.parameters(), self.use_checkpoint)\n\n    def _forward(self, x):\n        b, c, *spatial = x.shape\n        x = x.reshape(b, c, -1)\n        qkv = self.qkv(self.norm(x))\n        qkv = qkv.reshape(b * self.num_heads, -1, qkv.shape[2])\n        h = self.attention(qkv)\n        h = h.reshape(b, -1, h.shape[-1])\n        h = self.proj_out(h)\n        return (x + h).reshape(b, c, *spatial)\n\n\nclass QKVAttention(nn.Module):\n    \"\"\"\n    A module which performs QKV attention.\n    \"\"\"\n\n    def forward(self, qkv):\n        \"\"\"\n        Apply QKV attention.\n        :param qkv: an [N x (C * 3) x T] tensor of Qs, Ks, and Vs.\n        :return: an [N x C x T] tensor after attention.\n        \"\"\"\n        ch = qkv.shape[1] // 3\n        q, k, v = th.split(qkv, ch, dim=1)\n        scale = 1 / math.sqrt(math.sqrt(ch))\n        weight = th.einsum(\n            \"bct,bcs->bts\", q * scale, k * scale\n        )  # More stable with f16 than dividing afterwards\n        weight = th.softmax(weight.float(), dim=-1).type(weight.dtype)\n        return th.einsum(\"bts,bcs->bct\", weight, v)\n\n    @staticmethod\n    def count_flops(model, _x, y):\n        \"\"\"\n        A counter for the `thop` package to count the operations in an\n        attention operation.\n        Meant to be used like:\n            macs, params = thop.profile(\n                model,\n                inputs=(inputs, timestamps),\n                custom_ops={QKVAttention: QKVAttention.count_flops},\n            )\n        \"\"\"\n        b, c, *spatial = y[0].shape\n        num_spatial = int(np.prod(spatial))\n        # We perform two matmuls with the same number of ops.\n        # The first computes the weight matrix, the second computes\n        # the combination of the value vectors.\n        matmul_ops = 2 * b * (num_spatial ** 2) * c\n        model.total_ops += th.DoubleTensor([matmul_ops])\n\n\nclass UNetModel(nn.Module):\n    \"\"\"\n    The full UNet model with attention and timestep embedding.\n    :param in_channels: channels in the input Tensor.\n    :param model_channels: base channel count for the model.\n    :param out_channels: channels in the output Tensor.\n    :param num_res_blocks: number of residual blocks per downsample.\n    :param attention_resolutions: a collection of downsample rates at which\n        attention will take place. May be a set, list, or tuple.\n        For example, if this contains 4, then at 4x downsampling, attention\n        will be used.\n    :param dropout: the dropout probability.\n    :param channel_mult: channel multiplier for each level of the UNet.\n    :param conv_resample: if True, use learned convolutions for upsampling and\n        downsampling.\n    :param dims: determines if the signal is 1D, 2D, or 3D.\n    :param num_classes: if specified (as an int), then this model will be\n        class-conditional with `num_classes` classes.\n    :param use_checkpoint: use gradient checkpointing to reduce memory usage.\n    :param num_heads: the number of attention heads in each attention layer.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        model_channels,\n        out_channels,\n        num_res_blocks,\n        attention_resolutions,\n        dropout=0,\n        channel_mult=(1, 2, 4, 8),\n        conv_resample=True,\n        dims=2,\n        num_classes=None,\n        use_checkpoint=False,\n        num_heads=1,\n        num_heads_upsample=-1,\n        use_scale_shift_norm=False,\n        activation = None,\n    ):\n        super().__init__()\n\n        self.activation = activation if activation is not None else SiLU()\n        if num_heads_upsample == -1:\n            num_heads_upsample = num_heads\n\n        self.in_channels = in_channels\n        self.model_channels = model_channels\n        self.out_channels = out_channels\n        self.num_res_blocks = num_res_blocks\n        self.attention_resolutions = attention_resolutions\n        self.dropout = dropout\n        self.channel_mult = channel_mult\n        self.conv_resample = conv_resample\n        self.num_classes = num_classes\n        self.use_checkpoint = use_checkpoint\n        self.num_heads = num_heads\n        self.num_heads_upsample = num_heads_upsample\n\n        time_embed_dim = model_channels * 4\n        self.time_embed = nn.Sequential(\n            linear(model_channels, time_embed_dim),\n            self.activation,\n            linear(time_embed_dim, time_embed_dim),\n        )\n\n        if self.num_classes is not None:\n            self.label_emb = nn.Embedding(num_classes, time_embed_dim)\n\n        self.input_blocks = nn.ModuleList(\n            [\n                TimestepEmbedSequential(\n                    conv_nd(dims, in_channels, model_channels, 3, padding=1)\n                )\n            ]\n        )\n        input_block_chans = [model_channels]\n        ch = model_channels\n        ds = 1\n        for level, mult in enumerate(channel_mult):\n            for _ in range(num_res_blocks):\n                layers = [\n                    ResBlock(\n                        ch,\n                        time_embed_dim,\n                        dropout,\n                        out_channels=mult * model_channels,\n                        dims=dims,\n                        use_checkpoint=use_checkpoint,\n                        use_scale_shift_norm=use_scale_shift_norm,\n                        activation = self.activation\n                    )\n                ]\n                ch = mult * model_channels\n                if ds in attention_resolutions:\n                    layers.append(\n                        AttentionBlock(\n                            ch, use_checkpoint=use_checkpoint, num_heads=num_heads\n                        )\n                    )\n                self.input_blocks.append(TimestepEmbedSequential(*layers))\n                input_block_chans.append(ch)\n            if level != len(channel_mult) - 1:\n                self.input_blocks.append(\n                    TimestepEmbedSequential(Downsample(ch, conv_resample, dims=dims))\n                )\n                input_block_chans.append(ch)\n                ds *= 2\n\n        self.middle_block = TimestepEmbedSequential(\n            ResBlock(\n                ch,\n                time_embed_dim,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n                activation = self.activation\n            ),\n            AttentionBlock(ch, use_checkpoint=use_checkpoint, num_heads=num_heads),\n            ResBlock(\n                ch,\n                time_embed_dim,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n                activation = self.activation\n            ),\n        )\n\n        self.output_blocks = nn.ModuleList([])\n        for level, mult in list(enumerate(channel_mult))[::-1]:\n            for i in range(num_res_blocks + 1):\n                layers = [\n                    ResBlock(\n                        ch + input_block_chans.pop(),\n                        time_embed_dim,\n                        dropout,\n                        out_channels=model_channels * mult,\n                        dims=dims,\n                        use_checkpoint=use_checkpoint,\n                        use_scale_shift_norm=use_scale_shift_norm,\n                        activation = self.activation\n                    )\n                ]\n                ch = model_channels * mult\n                if ds in attention_resolutions:\n                    layers.append(\n                        AttentionBlock(\n                            ch,\n                            use_checkpoint=use_checkpoint,\n                            num_heads=num_heads_upsample,\n                        )\n                    )\n                if level and i == num_res_blocks:\n                    layers.append(Upsample(ch, conv_resample, dims=dims))\n                    ds //= 2\n                self.output_blocks.append(TimestepEmbedSequential(*layers))\n\n        self.out = nn.Sequential(\n            normalization(ch),\n            self.activation,\n            zero_module(conv_nd(dims, model_channels, out_channels, 3, padding=1)),\n        )\n\n    def convert_to_fp16(self):\n        \"\"\"\n        Convert the torso of the model to float16.\n        \"\"\"\n        self.input_blocks.apply(convert_module_to_f16)\n        self.middle_block.apply(convert_module_to_f16)\n        self.output_blocks.apply(convert_module_to_f16)\n\n    def convert_to_fp32(self):\n        \"\"\"\n        Convert the torso of the model to float32.\n        \"\"\"\n        self.input_blocks.apply(convert_module_to_f32)\n        self.middle_block.apply(convert_module_to_f32)\n        self.output_blocks.apply(convert_module_to_f32)\n\n    @property\n    def inner_dtype(self):\n        \"\"\"\n        Get the dtype used by the torso of the model.\n        \"\"\"\n        return torch.float32 # FIXED\n        # return next(self.input_blocks.parameters()).dtype\n\n    def forward(self, x, timesteps, y=None, low_cond = None):\n        \"\"\"\n        Apply the model to an input batch.\n        :param x: an [N x C x ...] Tensor of inputs.\n        :param timesteps: a 1-D batch of timesteps.\n        :param y: an [N] Tensor of labels, if class-conditional.\n        :param low_cond: an [N x C x ...]  Tensor of condition.\n        :return: an [N x C x ...] Tensor of outputs.\n        \"\"\"\n\n        ## concat the condition\n        if low_cond is not None:\n            x = th.cat((x, low_cond), dim = 1)\n\n        assert (y is not None) == (\n            self.num_classes is not None\n        ), \"must specify y if and only if the model is class-conditional\"\n\n        hs = []\n        emb = self.time_embed(timestep_embedding(timesteps, self.model_channels))\n\n        if self.num_classes is not None:\n            assert y.shape == (x.shape[0],)\n            emb = emb + self.label_emb(y)\n\n        h = x.type(self.inner_dtype)\n        for module in self.input_blocks:\n            h = module(h, emb)\n            hs.append(h)\n        h = self.middle_block(h, emb)\n        for module in self.output_blocks:\n\n            # handling for non-even inputs\n            # h = F.interpolate(h, size= hs[-1].size()[-3:], mode='trilinear')\n            if hs[-1].size(-1) < h.size(-1):\n                h = h[..., :-1]\n            if hs[-1].size(-2) < h.size(-2):\n                h = h[..., :-1, :]\n            if hs[-1].size(-3) < h.size(-3):\n                h = h[..., :-1, :, :]\n\n            cat_in = th.cat([h, hs.pop()], dim=1)\n            h = module(cat_in, emb)\n        h = h.type(x.dtype)\n        return self.out(h)\n\n    def get_feature_vectors(self, x, timesteps, y=None):\n        \"\"\"\n        Apply the model and return all of the intermediate tensors.\n        :param x: an [N x C x ...] Tensor of inputs.\n        :param timesteps: a 1-D batch of timesteps.\n        :param y: an [N] Tensor of labels, if class-conditional.\n        :return: a dict with the following keys:\n                 - 'down': a list of hidden state tensors from downsampling.\n                 - 'middle': the tensor of the output of the lowest-resolution\n                             block in the model.\n                 - 'up': a list of hidden state tensors from upsampling.\n        \"\"\"\n        hs = []\n        emb = self.time_embed(timestep_embedding(timesteps, self.model_channels))\n        if self.num_classes is not None:\n            assert y.shape == (x.shape[0],)\n            emb = emb + self.label_emb(y)\n        result = dict(down=[], up=[])\n        h = x.type(self.inner_dtype)\n        for module in self.input_blocks:\n            h = module(h, emb)\n            hs.append(h)\n            result[\"down\"].append(h.type(x.dtype))\n        h = self.middle_block(h, emb)\n        result[\"middle\"] = h.type(x.dtype)\n        for module in self.output_blocks:\n            cat_in = th.cat([h, hs.pop()], dim=1)\n            h = module(cat_in, emb)\n            result[\"up\"].append(h.type(x.dtype))\n        return result\n\n\n\nclass FeatureProjector(nn.Module):\n    \"\"\"Project feature grids (e.g. CLIP 768-D, RGB 3-D) to a common latent dim.\n\n    When *hidden_channels* is **None** the projector degenerates to a single\n    1×1×1 convolution + normalization (+ SiLU) which is extremely cheap and is\n    often sufficient for low-dimensional inputs like RGB (3) or occupancy (1).\n\n    If *hidden_channels* is provided we fall back to the deeper 3-layer stack\n    that was originally used for 768-D CLIP features.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        hidden_channels = None,\n    ) -> None:\n        super().__init__()\n\n        layers: list[nn.Module] = []\n\n        if hidden_channels is None:\n            # ---- Lightweight (single-layer) projector -------------------\n            layers.extend(\n                [\n                    nn.Conv3d(in_channels, out_channels, kernel_size=1),\n                    nn.GroupNorm(\n                        num_groups=max(out_channels // 2, 1),\n                        num_channels=out_channels,\n                    ),\n                    nn.SiLU(),\n                ]\n            )\n        else:\n            # ---- Original 3-layer projector -----------------------------\n            layers.extend(\n                [\n                    nn.Conv3d(in_channels, hidden_channels, kernel_size=1),\n                    nn.GroupNorm(num_groups=32, num_channels=hidden_channels),\n                    nn.SiLU(),\n                    # bottleneck 3×3 convolution\n                    nn.Conv3d(\n                        hidden_channels, hidden_channels, kernel_size=3, padding=1\n                    ),\n                    nn.GroupNorm(num_groups=32, num_channels=hidden_channels),\n                    nn.SiLU(),\n                    # final 1×1 to *out_channels*\n                    nn.Conv3d(hidden_channels, out_channels, kernel_size=1),\n                    nn.GroupNorm(num_groups=32, num_channels=out_channels),\n                ]\n            )\n\n        self.net = nn.Sequential(*layers)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:  # (B, C_in, D, H, W)\n        return self.net(x)\n\n\nclass ConditionedUNet(nn.Module):\n    def __init__(\n        self,\n        material_channels,         # e.g. 10\n        feature_channels,          # e.g. 768\n        cond_dim,                  # e.g. 64\n        model_channels,            # from config\n        out_channels,              # e.g. 10\n        num_res_blocks,\n        channel_mult,\n        attention_resolutions,\n        dropout=0,\n        dims=3,\n        activation=None,\n    ):\n        super().__init__()\n        self.feat_projector = FeatureProjector(feature_channels, out_channels=cond_dim)\n\n        self.unet = UNetModel(\n            in_channels=material_channels + cond_dim,\n            model_channels=model_channels,\n            out_channels=out_channels,\n            num_res_blocks=num_res_blocks,\n            channel_mult=channel_mult,\n            attention_resolutions=attention_resolutions,\n            dropout=dropout,\n            dims=dims,\n            activation=activation\n        )\n\n    def forward(self, mat_grid, feat_grid, t, **kwargs):\n        \"\"\"\n        mat_grid: shape [B, material_channels, D, H, W]\n        feat_grid: shape [B, feature_channels=768, D, H, W]\n        t: timesteps for diffusion\n        \"\"\"\n        # 1) Project features from 768 -> cond_dim\n        feat_proj = self.feat_projector(feat_grid)  # -> [B, cond_dim, D, H, W]\n\n        # 2) Concat with (noisy) material grid along channel dim\n        x = torch.cat([mat_grid, feat_proj], dim=1)  # -> [B, material_channels+cond_dim, D, H, W]\n\n        # 3) Forward through the UNet\n        return self.unet(x, t, **kwargs)\n\n\n\nclass MyResBlock(torch.nn.Module):\n    \"\"\"\n    A residual block that can optionally change the number of channels.\n    :param channels: the number of input channels.\n    :param emb_channels: the number of timestep embedding channels.\n    :param dropout: the rate of dropout.\n    :param out_channels: if specified, the number of out channels.\n    :param use_conv: if True and out_channels is specified, use a spatial\n        convolution instead of a smaller 1x1 convolution to change the\n        channels in the skip connection.\n    :param dims: determines if the signal is 1D, 2D, or 3D.\n    :param use_checkpoint: if True, use gradient checkpointing on this module.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        sp,\n        dropout,\n        out_channels=None,\n        use_conv=False,\n        use_scale_shift_norm=False,\n        dims=2,\n        use_checkpoint=False,\n        activation = SiLU()\n    ):\n        super().__init__()\n        self.channels = channels\n        self.dropout = dropout\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_checkpoint = use_checkpoint\n        self.use_scale_shift_norm = use_scale_shift_norm\n\n        self.in_layers = nn.Sequential(\n            torch.nn.LayerNorm(normalized_shape=[sp, sp, sp]),\n            activation,\n            conv_nd(dims, channels, self.out_channels, 3, padding=1),\n        )\n        self.out_layers = nn.Sequential(\n            torch.nn.LayerNorm(normalized_shape=[sp, sp, sp]),\n            activation,\n            nn.Dropout(p=dropout),\n            zero_module(\n                conv_nd(dims, self.out_channels, self.out_channels, 3, padding=1)\n            ),\n        )\n\n        if self.out_channels == channels:\n            self.skip_connection = nn.Identity()\n        elif use_conv:\n            self.skip_connection = conv_nd(\n                dims, channels, self.out_channels, 3, padding=1\n            )\n        else:\n            self.skip_connection = conv_nd(dims, channels, self.out_channels, 1)\n\n    def forward(self, x):\n        \"\"\"\n        Apply the block to a Tensor, conditioned on a timestep embedding.\n        :param x: an [N x C x ...] Tensor of features.\n        :param emb: an [N x emb_channels] Tensor of timestep embeddings.\n        :return: an [N x C x ...] Tensor of outputs.\n        \"\"\"\n        h = self.in_layers(x)\n        h = self.out_layers(h)\n        return self.skip_connection(x) + h\n\n    def _forward(self, x):\n        h = self.in_layers(x)\n        h = self.out_layers(h)\n        return self.skip_connection(x) + h\n\nclass MyUNetModel(nn.Module):\n    \"\"\"\n    The full UNet model with attention and timestep embedding.\n    :param in_channels: channels in the input Tensor.\n    :param model_channels: base channel count for the model.\n    :param out_channels: channels in the output Tensor.\n    :param num_res_blocks: number of residual blocks per downsample.\n    :param attention_resolutions: a collection of downsample rates at which\n        attention will take place. May be a set, list, or tuple.\n        For example, if this contains 4, then at 4x downsampling, attention\n        will be used.\n    :param dropout: the dropout probability.\n    :param channel_mult: channel multiplier for each level of the UNet.\n    :param conv_resample: if True, use learned convolutions for upsampling and\n        downsampling.\n    :param dims: determines if the signal is 1D, 2D, or 3D.\n    :param num_classes: if specified (as an int), then this model will be\n        class-conditional with `num_classes` classes.\n    :param use_checkpoint: use gradient checkpointing to reduce memory usage.\n    :param num_heads: the number of attention heads in each attention layer.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        model_channels,\n        out_channels,\n        num_res_blocks,\n        attention_resolutions,\n        spatial_size,\n        dropout=0,\n        channel_mult=(1, 2, 4, 8),\n        conv_resample=True,\n        dims=2,\n        num_classes=None,\n        use_checkpoint=False,\n        num_heads=1,\n        num_heads_upsample=-1,\n        use_scale_shift_norm=False,\n        activation = None,\n    ):\n        super().__init__()\n\n        self.activation = activation if activation is not None else SiLU()\n        if num_heads_upsample == -1:\n            num_heads_upsample = num_heads\n\n        self.in_channels = in_channels\n        self.model_channels = model_channels\n        self.out_channels = out_channels\n        self.num_res_blocks = num_res_blocks\n        self.attention_resolutions = attention_resolutions\n        self.dropout = dropout\n        self.channel_mult = channel_mult\n        self.conv_resample = conv_resample\n        self.num_classes = num_classes\n        self.use_checkpoint = use_checkpoint\n        self.num_heads = num_heads\n        self.num_heads_upsample = num_heads_upsample\n\n\n        self.input_blocks = nn.ModuleList(\n            [\n                torch.nn.Sequential(\n                    conv_nd(dims, in_channels, model_channels, 3, padding=1)\n                )\n            ]\n        )\n        input_block_chans = [model_channels]\n        input_block_sizes = [spatial_size]\n        ch = model_channels\n        ds = 1\n        current_sp = spatial_size\n        for level, mult in enumerate(channel_mult):\n            for _ in range(num_res_blocks):\n                layers = [\n                    MyResBlock(\n                        ch,\n                        current_sp,\n                        dropout,\n                        out_channels=mult * model_channels,\n                        dims=dims,\n                        use_checkpoint=use_checkpoint,\n                        use_scale_shift_norm=use_scale_shift_norm,\n                        activation = self.activation\n                    )\n                ]\n                ch = mult * model_channels\n                if ds in attention_resolutions:\n                    layers.append(\n                        AttentionBlock(\n                            ch, use_checkpoint=use_checkpoint, num_heads=num_heads\n                        )\n                    )\n                self.input_blocks.append(torch.nn.Sequential(*layers))\n                input_block_chans.append(ch)\n            if level != len(channel_mult) - 1:\n                self.input_blocks.append(\n                    torch.nn.Sequential(Downsample(ch, conv_resample, dims=dims))\n                )\n                input_block_chans.append(ch)\n                input_block_sizes.append(current_sp)\n                ds *= 2\n                current_sp = (current_sp+1) // 2\n\n        self.middle_block = torch.nn.Sequential(\n            MyResBlock(\n                ch,\n                current_sp,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n                activation = self.activation\n            ),\n            AttentionBlock(ch, use_checkpoint=use_checkpoint, num_heads=num_heads),\n            MyResBlock(\n                ch,\n                current_sp,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n                activation = self.activation\n            ),\n        )\n\n        self.output_blocks = nn.ModuleList([])\n        for level, mult in list(enumerate(channel_mult))[::-1]:\n            for i in range(num_res_blocks + 1):\n                layers = [\n                    MyResBlock(\n                        ch + input_block_chans.pop(),\n                        current_sp,\n                        dropout,\n                        out_channels=model_channels * mult,\n                        dims=dims,\n                        use_checkpoint=use_checkpoint,\n                        use_scale_shift_norm=use_scale_shift_norm,\n                        activation = self.activation\n                    )\n                ]\n                ch = model_channels * mult\n                if ds in attention_resolutions:\n                    layers.append(\n                        AttentionBlock(\n                            ch,\n                            use_checkpoint=use_checkpoint,\n                            num_heads=num_heads_upsample,\n                        )\n                    )\n                if level and i == num_res_blocks:\n                    layers.append(Upsample(ch, conv_resample, dims=dims))\n                    ds //= 2\n                    current_sp = input_block_sizes.pop()\n                self.output_blocks.append(torch.nn.Sequential(*layers))\n\n        self.out = nn.Sequential(\n            torch.nn.LayerNorm(normalized_shape=[current_sp, current_sp, current_sp]),\n            self.activation,\n            zero_module(conv_nd(dims, model_channels, out_channels, 3, padding=1)),\n        )\n\n    def convert_to_fp16(self):\n        \"\"\"\n        Convert the torso of the model to float16.\n        \"\"\"\n        self.input_blocks.apply(convert_module_to_f16)\n        self.middle_block.apply(convert_module_to_f16)\n        self.output_blocks.apply(convert_module_to_f16)\n\n    def convert_to_fp32(self):\n        \"\"\"\n        Convert the torso of the model to float32.\n        \"\"\"\n        self.input_blocks.apply(convert_module_to_f32)\n        self.middle_block.apply(convert_module_to_f32)\n        self.output_blocks.apply(convert_module_to_f32)\n\n    @property\n    def inner_dtype(self):\n        \"\"\"\n        Get the dtype used by the torso of the model.\n        \"\"\"\n        return torch.float32 # FIXED\n        # return next(self.input_blocks.parameters()).dtype\n\n    def forward(self, x, y=None):\n        \"\"\"\n        Apply the model to an input batch.\n        :param x: an [N x C x ...] Tensor of inputs.\n        :param timesteps: a 1-D batch of timesteps.\n        :param y: an [N] Tensor of labels, if class-conditional.\n        :param low_cond: an [N x C x ...]  Tensor of condition.\n        :return: an [N x C x ...] Tensor of outputs.\n        \"\"\"\n\n        ## concat the condition\n        assert (y is not None) == (\n            self.num_classes is not None\n        ), \"must specify y if and only if the model is class-conditional\"\n\n        hs = []\n\n        h = x.type(self.inner_dtype)\n        for module in self.input_blocks:\n            h = module(h)\n            hs.append(h)\n        h = self.middle_block(h)\n        for module in self.output_blocks:\n\n            # handling for non-even inputs\n            # h = F.interpolate(h, size= hs[-1].size()[-3:], mode='trilinear')\n            if hs[-1].size(-1) < h.size(-1):\n                h = h[..., :-1]\n            if hs[-1].size(-2) < h.size(-2):\n                h = h[..., :-1, :]\n            if hs[-1].size(-3) < h.size(-3):\n                h = h[..., :-1, :, :]\n\n            cat_in = th.cat([h, hs.pop()], dim=1)\n            h = module(cat_in)\n        h = h.type(x.dtype)\n        return self.out(h)\n\n    def get_feature_vectors(self, x, timesteps, y=None):\n        \"\"\"\n        Apply the model and return all of the intermediate tensors.\n        :param x: an [N x C x ...] Tensor of inputs.\n        :param timesteps: a 1-D batch of timesteps.\n        :param y: an [N] Tensor of labels, if class-conditional.\n        :return: a dict with the following keys:\n                 - 'down': a list of hidden state tensors from downsampling.\n                 - 'middle': the tensor of the output of the lowest-resolution\n                             block in the model.\n                 - 'up': a list of hidden state tensors from upsampling.\n        \"\"\"\n        hs = []\n        emb = self.time_embed(timestep_embedding(timesteps, self.model_channels))\n        if self.num_classes is not None:\n            assert y.shape == (x.shape[0],)\n            emb = emb + self.label_emb(y)\n        result = dict(down=[], up=[])\n        h = x.type(self.inner_dtype)\n        for module in self.input_blocks:\n            h = module(h, emb)\n            hs.append(h)\n            result[\"down\"].append(h.type(x.dtype))\n        h = self.middle_block(h, emb)\n        result[\"middle\"] = h.type(x.dtype)\n        for module in self.output_blocks:\n            cat_in = th.cat([h, hs.pop()], dim=1)\n            h = module(cat_in, emb)\n            result[\"up\"].append(h.type(x.dtype))\n        return result\n\nclass SuperResModel(UNetModel):\n    \"\"\"\n    A UNetModel that performs super-resolution.\n    Expects an extra kwarg `low_res` to condition on a low-resolution image.\n    \"\"\"\n\n    def __init__(self, in_channels, *args, **kwargs):\n        super().__init__(in_channels * 2, *args, **kwargs)\n\n    def forward(self, x, timesteps, low_res=None, **kwargs):\n        _, _, new_height, new_width = x.shape\n        upsampled = F.interpolate(low_res, (new_height, new_width), mode=\"bilinear\")\n        x = th.cat([x, upsampled], dim=1)\n        return super().forward(x, timesteps, **kwargs)\n\n    def get_feature_vectors(self, x, timesteps, low_res=None, **kwargs):\n        _, new_height, new_width, _ = x.shape\n        upsampled = F.interpolate(low_res, (new_height, new_width), mode=\"bilinear\")\n        x = th.cat([x, upsampled], dim=1)\n        return super().get_feature_vectors(x, timesteps, **kwargs)"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/dwt.py",
    "content": "import numpy\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport pytorch_wavelets.dwt.lowlevel as lowlevel\nfrom pytorch_wavelets.dwt.transform2d import DWTForward\nimport torch\nfrom torch.autograd import Function\nimport time\nimport pywt\n\n### modify from https://github.com/fbcotter/pytorch_wavelets/blob/master/pytorch_wavelets/dwt/lowlevel.py\nfrom models.module.dwt_utils import prep_filt_sfb3d, prep_filt_afb3d\n\n\nclass DWTInverse3d_Laplacian(nn.Module):\n    \"\"\" Performs a 2d DWT Forward decomposition of an image\n    Args:\n        J (int): Number of levels of decomposition\n        wave (str or pywt.Wavelet or tuple(ndarray)): Which wavelet to use.\n            Can be:\n            1) a string to pass to pywt.Wavelet constructor\n            2) a pywt.Wavelet class\n            3) a tuple of numpy arrays, either (h0, h1) or (h0_col, h1_col, h0_row, h1_row)\n        mode (str): 'zero', 'symmetric', 'reflect' or 'periodization'. The\n            padding scheme\n        \"\"\"\n    def __init__(self, J=1, wave='db1', mode='zero'):\n        super().__init__()\n        if isinstance(wave, str):\n            wave = pywt.Wavelet(wave)\n        if isinstance(wave, pywt.Wavelet):\n            g0_col, g1_col = wave.rec_lo, wave.rec_hi\n            g0_row, g1_row = g0_col, g1_col\n            g0_dep, g1_dep = g0_col, g1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_sfb3d(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row)\n        self.register_buffer('g0_dep', filts[0])\n        self.register_buffer('g1_dep', filts[1])\n        self.register_buffer('g0_col', filts[2])\n        self.register_buffer('g1_col', filts[3])\n        self.register_buffer('g0_row', filts[4])\n        self.register_buffer('g1_row', filts[5])\n        self.J = J\n        self.mode = mode\n\n    def forward(self, coeffs):\n        \"\"\"\n        Args:\n            coeffs (yl, yh): tuple of lowpass and bandpass coefficients, where:\n              yl is a lowpass tensor of shape :math:`(N, C_{in}, H_{in}',\n              W_{in}')` and yh is a list of bandpass tensors of shape\n              :math:`list(N, C_{in}, 3, H_{in}'', W_{in}'')`. I.e. should match\n              the format returned by DWTForward\n        Returns:\n            Reconstructed input of shape :math:`(N, C_{in}, H_{in}, W_{in})`\n        Note:\n            :math:`H_{in}', W_{in}', H_{in}'', W_{in}''` denote the correctly\n            downsampled shapes of the DWT pyramid.\n        Note:\n            Can have None for any of the highpass scales and will treat the\n            values as zeros (not in an efficient way though).\n        \"\"\"\n        yl, yh = coeffs\n        ll = yl\n        mode = lowlevel.mode_to_int(self.mode)\n\n        # Do a multilevel inverse transform\n        for h in yh[::-1]:\n\n            # 'Unpad' added dimensions\n            ll_diff = SFB3D_Laplacian.apply(\n                ll, self.g0_dep, self.g0_col, self.g0_row, mode)\n            if ll_diff.shape[-3] > h.shape[-3]:\n                ll_diff = ll_diff[...,:-1, :, :]\n            if ll_diff.shape[-2] > h.shape[-2]:\n                ll_diff = ll_diff[...,:-1,:]\n            if ll_diff.shape[-1] > h.shape[-1]:\n                ll_diff = ll_diff[...,:-1]\n\n            ll = ll_diff + h\n\n        return ll\n\nclass DWTInverse3d(nn.Module):\n    \"\"\" Performs a 2d DWT Forward decomposition of an image\n    Args:\n        J (int): Number of levels of decomposition\n        wave (str or pywt.Wavelet or tuple(ndarray)): Which wavelet to use.\n            Can be:\n            1) a string to pass to pywt.Wavelet constructor\n            2) a pywt.Wavelet class\n            3) a tuple of numpy arrays, either (h0, h1) or (h0_col, h1_col, h0_row, h1_row)\n        mode (str): 'zero', 'symmetric', 'reflect' or 'periodization'. The\n            padding scheme\n        \"\"\"\n    def __init__(self, J=1, wave='db1', mode='zero'):\n        super().__init__()\n        if isinstance(wave, str):\n            wave = pywt.Wavelet(wave)\n        if isinstance(wave, pywt.Wavelet):\n            g0_col, g1_col = wave.rec_lo, wave.rec_hi\n            g0_row, g1_row = g0_col, g1_col\n            g0_dep, g1_dep = g0_col, g1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_sfb3d(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row)\n        self.register_buffer('g0_dep', filts[0])\n        self.register_buffer('g1_dep', filts[1])\n        self.register_buffer('g0_col', filts[2])\n        self.register_buffer('g1_col', filts[3])\n        self.register_buffer('g0_row', filts[4])\n        self.register_buffer('g1_row', filts[5])\n        self.J = J\n        self.mode = mode\n\n    def forward(self, coeffs):\n        \"\"\"\n        Args:\n            coeffs (yl, yh): tuple of lowpass and bandpass coefficients, where:\n              yl is a lowpass tensor of shape :math:`(N, C_{in}, H_{in}',\n              W_{in}')` and yh is a list of bandpass tensors of shape\n              :math:`list(N, C_{in}, 3, H_{in}'', W_{in}'')`. I.e. should match\n              the format returned by DWTForward\n        Returns:\n            Reconstructed input of shape :math:`(N, C_{in}, H_{in}, W_{in})`\n        Note:\n            :math:`H_{in}', W_{in}', H_{in}'', W_{in}''` denote the correctly\n            downsampled shapes of the DWT pyramid.\n        Note:\n            Can have None for any of the highpass scales and will treat the\n            values as zeros (not in an efficient way though).\n        \"\"\"\n        yl, yh = coeffs\n        ll = yl\n        mode = lowlevel.mode_to_int(self.mode)\n\n        # Do a multilevel inverse transform\n        for h in yh[::-1]:\n            if h is None:\n                h = torch.zeros(ll.shape[0], ll.shape[1], 7, ll.shape[-3], ll.shape[-2],\n                                ll.shape[-1], device=ll.device)\n\n            # 'Unpad' added dimensions\n            if ll.shape[-3] > h.shape[-3]:\n                ll = ll[...,:-1, :, :]\n            if ll.shape[-2] > h.shape[-2]:\n                ll = ll[...,:-1,:]\n            if ll.shape[-1] > h.shape[-1]:\n                ll = ll[...,:-1]\n            ll = SFB3D.apply(\n                ll, h, self.g0_dep, self.g1_dep, self.g0_col, self.g1_col, self.g0_row, self.g1_row, mode)\n        return ll\n\nclass DWTForward3d_Laplacian(nn.Module):\n    \"\"\" Performs a 2d DWT Forward decomposition of an image\n    Args:\n        J (int): Number of levels of decomposition\n        wave (str or pywt.Wavelet or tuple(ndarray)): Which wavelet to use.\n            Can be:\n            1) a string to pass to pywt.Wavelet constructor\n            2) a pywt.Wavelet class\n            3) a tuple of numpy arrays, either (h0, h1) or (h0_col, h1_col, h0_row, h1_row)\n        mode (str): 'zero', 'symmetric', 'reflect' or 'periodization'. The\n            padding scheme\n        \"\"\"\n    def __init__(self, J=1, wave='db1', mode='zero'):\n        super().__init__()\n        if isinstance(wave, str):\n            wave = pywt.Wavelet(wave)\n        if isinstance(wave, pywt.Wavelet):\n            h0_col, h1_col = wave.dec_lo, wave.dec_hi\n            h0_row, h1_row = h0_col, h1_col\n            h0_dep, h1_dep = h0_col, h1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_afb3d(h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row)\n        self.register_buffer('h0_dep', filts[0])\n        self.register_buffer('h1_dep', filts[1])\n        self.register_buffer('h0_col', filts[2])\n        self.register_buffer('h1_col', filts[3])\n        self.register_buffer('h0_row', filts[4])\n        self.register_buffer('h1_row', filts[5])\n        self.J = J\n        self.mode = mode\n\n        ## Need for inverse\n        if isinstance(wave, pywt.Wavelet):\n            g0_col, g1_col = wave.rec_lo, wave.rec_hi\n            g0_row, g1_row = g0_col, g1_col\n            g0_dep, g1_dep = g0_col, g1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_sfb3d(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row)\n        self.register_buffer('g0_dep', filts[0])\n        self.register_buffer('g1_dep', filts[1])\n        self.register_buffer('g0_col', filts[2])\n        self.register_buffer('g1_col', filts[3])\n        self.register_buffer('g0_row', filts[4])\n        self.register_buffer('g1_row', filts[5])\n\n    def forward(self, x):\n        \"\"\" Forward pass of the DWT.\n        Args:\n            x (tensor): Input of shape :math:`(N, C_{in}, H_{in}, W_{in})`\n        Returns:\n            (yl, yh)\n                tuple of lowpass (yl) and bandpass (yh) coefficients.\n                yh is a list of length J with the first entry\n                being the finest scale coefficients. yl has shape\n                :math:`(N, C_{in}, H_{in}', W_{in}')` and yh has shape\n                :math:`list(N, C_{in}, 3, H_{in}'', W_{in}'')`. The new\n                dimension in yh iterates over the LH, HL and HH coefficients.\n        Note:\n            :math:`H_{in}', W_{in}', H_{in}'', W_{in}''` denote the correctly\n            downsampled shapes of the DWT pyramid.\n        \"\"\"\n        yh = []\n        ll = x\n        mode = lowlevel.mode_to_int(self.mode)\n\n        # Do a multilevel transform\n        for j in range(self.J):\n            # Do 1 level of the transform\n            ll_new = AFB3D_Laplacian.apply(\n                ll, self.h0_dep, self.h0_col, self.h0_row, mode)\n            reversed_ll = SFB3D_Laplacian.apply(ll_new, self.g0_dep, self.g0_col, self.g0_row, mode)\n            if ll.shape[-1] < reversed_ll.shape[-1]:\n                reversed_ll = reversed_ll[..., :-1]\n            if ll.shape[-2] < reversed_ll.shape[-2]:\n                reversed_ll = reversed_ll[..., :-1, :]\n            if ll.shape[-3] < reversed_ll.shape[-3]:\n                reversed_ll = reversed_ll[..., :-1, :, :]\n            yh.append(ll - reversed_ll)\n            ll = ll_new\n\n        return ll, yh\n\nclass DWTForward3d(nn.Module):\n    \"\"\" Performs a 2d DWT Forward decomposition of an image\n    Args:\n        J (int): Number of levels of decomposition\n        wave (str or pywt.Wavelet or tuple(ndarray)): Which wavelet to use.\n            Can be:\n            1) a string to pass to pywt.Wavelet constructor\n            2) a pywt.Wavelet class\n            3) a tuple of numpy arrays, either (h0, h1) or (h0_col, h1_col, h0_row, h1_row)\n        mode (str): 'zero', 'symmetric', 'reflect' or 'periodization'. The\n            padding scheme\n        \"\"\"\n    def __init__(self, J=1, wave='db1', mode='zero'):\n        super().__init__()\n        if isinstance(wave, str):\n            wave = pywt.Wavelet(wave)\n        if isinstance(wave, pywt.Wavelet):\n            h0_col, h1_col = wave.dec_lo, wave.dec_hi\n            h0_row, h1_row = h0_col, h1_col\n            h0_dep, h1_dep = h0_col, h1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_afb3d(h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row)\n        self.register_buffer('h0_dep', filts[0])\n        self.register_buffer('h1_dep', filts[1])\n        self.register_buffer('h0_col', filts[2])\n        self.register_buffer('h1_col', filts[3])\n        self.register_buffer('h0_row', filts[4])\n        self.register_buffer('h1_row', filts[5])\n        self.J = J\n        self.mode = mode\n\n    def forward(self, x):\n        \"\"\" Forward pass of the DWT.\n        Args:\n            x (tensor): Input of shape :math:`(N, C_{in}, H_{in}, W_{in})`\n        Returns:\n            (yl, yh)\n                tuple of lowpass (yl) and bandpass (yh) coefficients.\n                yh is a list of length J with the first entry\n                being the finest scale coefficients. yl has shape\n                :math:`(N, C_{in}, H_{in}', W_{in}')` and yh has shape\n                :math:`list(N, C_{in}, 3, H_{in}'', W_{in}'')`. The new\n                dimension in yh iterates over the LH, HL and HH coefficients.\n        Note:\n            :math:`H_{in}', W_{in}', H_{in}'', W_{in}''` denote the correctly\n            downsampled shapes of the DWT pyramid.\n        \"\"\"\n        yh = []\n        ll = x\n        mode = lowlevel.mode_to_int(self.mode)\n\n        # Do a multilevel transform\n        for j in range(self.J):\n            # Do 1 level of the transform\n            ll, high = AFB3D.apply(\n                ll, self.h0_dep, self.h1_dep, self.h0_col, self.h1_col, self.h0_row, self.h1_row, mode)\n            yh.append(high)\n\n        return ll, yh\n\n\ndef afb1d_laplacian(x, h0, mode='zero', dim = -1):\n    C = x.shape[1]\n    # Convert the dim to positive\n    d = dim % 5\n    s = [1, 1, 1]\n    s[d - 2] = 2\n    s = tuple(s)\n    N = x.shape[d]\n    # If h0, h1 are not tensors, make them. If they are, then assume that they\n    # are in the right order\n    if not isinstance(h0, torch.Tensor):\n        h0 = torch.tensor(np.copy(np.array(h0).ravel()[::-1]),\n                          dtype=torch.float, device=x.device)\n    L = h0.numel()\n    L2 = L // 2\n    shape = [1, 1, 1, 1, 1]\n    shape[d] = L\n    # If h aren't in the right shape, make them so\n    if h0.shape != tuple(shape):\n        h0 = h0.reshape(*shape)\n\n    h = torch.cat([h0] * C, dim=0)\n\n    assert mode in ['zero']\n\n    # Calculate the pad size\n    outsize = pywt.dwt_coeff_len(N, L, mode=mode)\n    p = 2 * (outsize - 1) - N + L\n\n    # Sadly, pytorch only allows for same padding before and after, if\n    # we need to do more padding after for odd length signals, have to\n    # prepad\n\n    padding_mode = None\n    if mode == 'zero':\n        padding_mode = 'zero'\n    else:\n        raise Exception(\"Unknown mode\")\n\n    if p % 2 == 1:\n        pad = [0, 0, 0, 0, 0, 0]\n        pad[(4 - d) * 2 + 1] = 1\n        pad = tuple(pad)\n        function_padding = 'constant'\n        x = F.pad(x, pad, mode = function_padding)\n    pad = [0, 0, 0]\n    pad[d - 2] = p // 2\n    pad = tuple(pad)\n    # Calculate the high and lowpass\n    if padding_mode == 'zero':\n        lo = F.conv3d(x, h, padding=pad, stride=s, groups=C)\n    else:\n        pad_new = [ pad[2 - i // 2] for i in range(6)]\n        x = F.pad(x, pad_new, mode = padding_mode)\n        lo = F.conv3d(x, h, stride=s, groups=C)\n\n    return lo\n\ndef afb1d(x, h0, h1, mode='zero', dim=-1):\n    \"\"\" 1D analysis filter bank (along one dimension only) of an image\n    Inputs:\n        x (tensor): 5D input with the last two dimensions the spatial input\n        h0 (tensor): 5D input for the lowpass filter. Should have shape (1, 1,\n            h, 1, 1) or (1, 1, 1, w, 1) or (1, 1, 1, 1, d)\n        h1 (tensor): 4D input for the highpass filter. Should have shape (1, 1,\n            h, 1) or (1, 1, 1, w, 1) or (1, 1, 1, 1, d)\n        mode (str): padding method can only be zero\n        dim (int) - dimension of filtering. d=2 is for a vertical filter (called\n            column filtering but filters across the rows). d=3 is for a\n            horizontal filter, (called row filtering but filters across the\n            columns).\n    Returns:\n        lohi: lowpass and highpass subbands concatenated along the channel\n            dimension\n    \"\"\"\n\n    C = x.shape[1]\n    # Convert the dim to positive\n    d = dim % 5\n    s = [1, 1, 1]\n    s[d-2] = 2\n    s = tuple(s)\n    N = x.shape[d]\n    # If h0, h1 are not tensors, make them. If they are, then assume that they\n    # are in the right order\n    if not isinstance(h0, torch.Tensor):\n        h0 = torch.tensor(np.copy(np.array(h0).ravel()[::-1]),\n                          dtype=torch.float, device=x.device)\n    if not isinstance(h1, torch.Tensor):\n        h1 = torch.tensor(np.copy(np.array(h1).ravel()[::-1]),\n                          dtype=torch.float, device=x.device)\n    L = h0.numel()\n    L2 = L // 2\n    shape = [1,1,1,1,1]\n    shape[d] = L\n    # If h aren't in the right shape, make them so\n    if h0.shape != tuple(shape):\n        h0 = h0.reshape(*shape)\n    if h1.shape != tuple(shape):\n        h1 = h1.reshape(*shape)\n    h = torch.cat([h0, h1] * C, dim=0)\n\n    assert mode in ['zero']\n\n    # Calculate the pad size\n    outsize = pywt.dwt_coeff_len(N, L, mode=mode)\n    p = 2 * (outsize - 1) - N + L\n\n    # Sadly, pytorch only allows for same padding before and after, if\n    # we need to do more padding after for odd length signals, have to\n    # prepad\n    padding_mode = None\n    if mode == 'zero':\n        padding_mode = 'zero'\n    else:\n        raise Exception(\"Unknown mode\")\n\n    if p % 2 == 1:\n        pad = [0, 0, 0, 0, 0, 0]\n        pad[(4 - d)*2+1] = 1\n        pad = tuple(pad)\n        function_padding = 'constant'\n        x = F.pad(x, pad, mode = function_padding)\n    pad = [0, 0, 0]\n    pad[d - 2] = p // 2\n    pad = tuple(pad)\n    # Calculate the high and lowpass\n    if padding_mode == 'zero':\n        lohi = F.conv3d(x, h, padding=pad, stride=s, groups=C)\n    else:\n        pad_new = [ pad[2 - i // 2] for i in range(6)]\n        x = F.pad(x, pad_new, mode = padding_mode)\n        lohi = F.conv3d(x, h, stride=s, groups=C)\n\n    return lohi\n\ndef sfb1d_laplacian(lo, g0, mode='zero', dim=-1):\n    \"\"\" 1D synthesis filter bank of an image tensor\n    \"\"\"\n    C = lo.shape[1]\n    d = dim % 5\n    # If g0, g1 are not tensors, make them. If they are, then assume that they\n    # are in the right order\n    if not isinstance(g0, torch.Tensor):\n        g0 = torch.tensor(np.copy(np.array(g0).ravel()),\n                          dtype=torch.float, device=lo.device)\n    L = g0.numel()\n    shape = [1,1,1,1,1]\n    shape[d] = L\n    N = 2*lo.shape[d]\n\n    # If g aren't in the right shape, make them so\n    if g0.shape != tuple(shape):\n        g0 = g0.reshape(*shape)\n\n    s = [1, 1, 1]\n    s[d-2] = 2\n\n    g0 = torch.cat([g0]*C,dim=0)\n\n    assert mode in ['zero']\n\n    pad = [0, 0, 0]\n    pad[d-2] = L - 2\n    pad = tuple(pad)\n\n    y = F.conv_transpose3d(lo, g0, stride=s, padding=pad, groups=C)\n\n    return y\n\ndef sfb1d(lo, hi, g0, g1, mode='zero', dim=-1):\n    \"\"\" 1D synthesis filter bank of an image tensor\n    \"\"\"\n    C = lo.shape[1]\n    d = dim % 5\n    # If g0, g1 are not tensors, make them. If they are, then assume that they\n    # are in the right order\n    if not isinstance(g0, torch.Tensor):\n        g0 = torch.tensor(np.copy(np.array(g0).ravel()),\n                          dtype=torch.float, device=lo.device)\n    if not isinstance(g1, torch.Tensor):\n        g1 = torch.tensor(np.copy(np.array(g1).ravel()),\n                          dtype=torch.float, device=lo.device)\n    L = g0.numel()\n    shape = [1,1,1,1,1]\n    shape[d] = L\n    N = 2*lo.shape[d]\n\n    # If g aren't in the right shape, make them so\n    if g0.shape != tuple(shape):\n        g0 = g0.reshape(*shape)\n    if g1.shape != tuple(shape):\n        g1 = g1.reshape(*shape)\n\n    s = [1, 1, 1]\n    s[d-2] = 2\n\n    g0 = torch.cat([g0]*C,dim=0)\n    g1 = torch.cat([g1]*C,dim=0)\n\n    assert mode in ['zero']\n\n    pad = [0, 0, 0]\n    pad[d-2] = L - 2\n    pad = tuple(pad)\n\n    y = F.conv_transpose3d(lo, g0, stride=s, padding=pad, groups=C) + \\\n        F.conv_transpose3d(hi, g1, stride=s, padding=pad, groups=C)\n\n    return y\n\nclass SFB3D_Laplacian(Function):\n    \"\"\" Does a single level 2d wavelet decomposition of an input. Does separate\n    row and column filtering by two calls to\n    :py:func:`pytorch_wavelets.dwt.lowlevel.afb1d`\n    Needs to have the tensors in the right form. Because this function defines\n    its own backward pass, saves on memory by not having to save the input\n    tensors.\n    Inputs:\n        x (torch.Tensor): Input to decompose\n        h0_row: row lowpass\n        h1_row: row highpass\n        h0_col: col lowpass\n        h1_col: col highpass\n        mode (int): use mode_to_int to get the int code here\n    We encode the mode as an integer rather than a string as gradcheck causes an\n    error when a string is provided.\n    Returns:\n        y: Tensor of shape (N, C*4, H, W)\n    \"\"\"\n    @staticmethod\n    def forward(ctx, low, g0_dep, g0_col, g0_row, mode):\n        mode = lowlevel.int_to_mode(mode)\n        ctx.mode = mode\n        ctx.save_for_backward(g0_dep, g0_col, g0_row)\n        lll = low\n        ## first level\n        ll = sfb1d_laplacian(lll, g0_dep, mode=mode, dim=2)\n\n        ## second level\n        l = sfb1d_laplacian(ll, g0_col, mode=mode, dim=3)\n\n        ## last level\n        y = sfb1d_laplacian(l, g0_row, mode=mode, dim=4)\n        return y\n\n    @staticmethod\n    def backward(ctx, dy):\n        dlow = None\n        if ctx.needs_input_grad[0]:\n            mode = ctx.mode\n            g0_dep, g0_col, g0_row = ctx.saved_tensors\n            dx = afb1d_laplacian(dy, g0_row, mode=mode, dim=4)\n            dx = afb1d_laplacian(dx, g0_col, mode=mode, dim=3)\n            dx = afb1d_laplacian(dx, g0_dep, mode = mode, dim = 2)\n            s = dx.shape\n            dlow = dx.reshape(s[0], -1, s[-3], s[-2], s[-1])\n        return dlow, None, None, None, None, None\n\nclass SFB3D(Function):\n    \"\"\" Does a single level 2d wavelet decomposition of an input. Does separate\n    row and column filtering by two calls to\n    :py:func:`pytorch_wavelets.dwt.lowlevel.afb1d`\n    Needs to have the tensors in the right form. Because this function defines\n    its own backward pass, saves on memory by not having to save the input\n    tensors.\n    Inputs:\n        x (torch.Tensor): Input to decompose\n        h0_row: row lowpass\n        h1_row: row highpass\n        h0_col: col lowpass\n        h1_col: col highpass\n        mode (int): use mode_to_int to get the int code here\n    We encode the mode as an integer rather than a string as gradcheck causes an\n    error when a string is provided.\n    Returns:\n        y: Tensor of shape (N, C*4, H, W)\n    \"\"\"\n    @staticmethod\n    def forward(ctx, low, highs, g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row, mode):\n        mode = lowlevel.int_to_mode(mode)\n        ctx.mode = mode\n        ctx.save_for_backward(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row)\n        hll, lhl, hhl, llh, hlh, lhh, hhh = torch.unbind(highs, dim=2)\n        lll = low\n        ## first level\n        ll = sfb1d(lll, hll, g0_dep, g1_dep, mode=mode, dim=2)\n        hl = sfb1d(lhl, hhl, g0_dep, g1_dep, mode=mode, dim=2)\n        lh = sfb1d(llh, hlh, g0_dep, g1_dep, mode=mode, dim=2)\n        hh = sfb1d(lhh, hhh, g0_dep, g1_dep, mode=mode, dim=2)\n\n        ## second level\n        l = sfb1d(ll, hl, g0_col, g1_col, mode=mode, dim=3)\n        h = sfb1d(lh, hh, g0_col, g1_col, mode=mode, dim=3)\n\n        ## last level\n        y = sfb1d(l, h, g0_row, g1_row, mode=mode, dim=4)\n        return y\n\n    @staticmethod\n    def backward(ctx, dy):\n        dlow, dhigh = None, None\n        if ctx.needs_input_grad[0]:\n            mode = ctx.mode\n            g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row = ctx.saved_tensors\n            dx = afb1d(dy, g0_row, g1_row, mode=mode, dim=4)\n            dx = afb1d(dx, g0_col, g1_col, mode=mode, dim=3)\n            dx = afb1d(dx, g0_dep, g1_dep, mode = mode, dim = 2)\n            s = dx.shape\n            dx = dx.reshape(s[0], -1, 8, s[-3], s[-2], s[-1])\n            dlow = dx[:,:,0].contiguous()\n            dhigh = dx[:,:,1:].contiguous()\n        return dlow, dhigh, None, None, None, None, None, None, None\n\nclass AFB3D_Laplacian(Function):\n    \"\"\" Does a single level 2d wavelet decomposition of an input. Does separate\n    row and column filtering by two calls to\n    :py:func:`pytorch_wavelets.dwt.lowlevel.afb1d`\n    Needs to have the tensors in the right form. Because this function defines\n    its own backward pass, saves on memory by not having to save the input\n    tensors.\n    Inputs:\n        x (torch.Tensor): Input to decompose\n        h0_row: row lowpass\n        h1_row: row highpass\n        h0_col: col lowpass\n        h1_col: col highpass\n        h0_dep: depth lowpass\n        h1_dep: depth highpass\n        mode (int): use mode_to_int to get the int code here\n    We encode the mode as an integer rather than a string as gradcheck causes an\n    error when a string is provided.\n    Returns:\n        y: Tensor of shape (N, C*4, H, W, D)\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, x, h0_dep, h0_col, h0_row, mode):\n        ctx.save_for_backward(h0_dep, h0_col, h0_row)\n        ctx.shape = x.shape[-3:]\n        mode = lowlevel.int_to_mode(mode)\n        ctx.mode = mode\n        lohi_dim_last = afb1d_laplacian(x, h0_row, mode=mode, dim=4)\n        lohi_dim_last_2 = afb1d_laplacian(lohi_dim_last, h0_col, mode=mode, dim=3)\n        y = afb1d_laplacian(lohi_dim_last_2, h0_dep, mode=mode, dim=2)\n        s = y.shape\n        y = y.reshape(s[0], -1, 1, s[-3], s[-2], s[-1])\n        low = y[:, :, 0].contiguous()\n        return low\n\n    @staticmethod\n    def backward(ctx, lll):\n        dx = None\n        if ctx.needs_input_grad[0]:\n            mode = ctx.mode\n            h0_dep, h0_row, h0_col = ctx.saved_tensors\n\n            ## first level\n            ll = sfb1d_laplacian(lll, h0_dep, mode=mode, dim=2)\n\n            ## second level\n            l = sfb1d_laplacian(ll, h0_col, mode=mode, dim=3)\n\n            ## last level\n            dx = sfb1d_laplacian(l, h0_row, mode = mode, dim = 4)\n\n            if dx.shape[-3] > ctx.shape[-3]:\n                dx = dx[:, :, :ctx.shape[-3]]\n            if dx.shape[-2] > ctx.shape[-2]:\n                dx = dx[:, :, :, :ctx.shape[-2]]\n            if dx.shape[-1] > ctx.shape[-1]:\n                dx = dx[:, :, :, :, :ctx.shape[-1]]\n\n        return dx, None, None, None, None\n\nclass AFB3D(Function):\n    \"\"\" Does a single level 2d wavelet decomposition of an input. Does separate\n    row and column filtering by two calls to\n    :py:func:`pytorch_wavelets.dwt.lowlevel.afb1d`\n    Needs to have the tensors in the right form. Because this function defines\n    its own backward pass, saves on memory by not having to save the input\n    tensors.\n    Inputs:\n        x (torch.Tensor): Input to decompose\n        h0_row: row lowpass\n        h1_row: row highpass\n        h0_col: col lowpass\n        h1_col: col highpass\n        h0_dep: depth lowpass\n        h1_dep: depth highpass\n        mode (int): use mode_to_int to get the int code here\n    We encode the mode as an integer rather than a string as gradcheck causes an\n    error when a string is provided.\n    Returns:\n        y: Tensor of shape (N, C*4, H, W, D)\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, x, h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row, mode):\n        ctx.save_for_backward(h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row)\n        ctx.shape = x.shape[-3:]\n        mode = lowlevel.int_to_mode(mode)\n        ctx.mode = mode\n        lohi_dim_last = afb1d(x, h0_row, h1_row, mode=mode, dim=4)\n        lohi_dim_last_2 = afb1d(lohi_dim_last, h0_col, h1_col, mode=mode, dim=3)\n        y = afb1d(lohi_dim_last_2, h0_dep, h1_dep, mode=mode, dim=2)\n        s = y.shape\n        y = y.reshape(s[0], -1, 8, s[-3], s[-2], s[-1])\n        low = y[:, :, 0].contiguous()\n        highs = y[:, :, 1:].contiguous()\n        return low, highs\n\n    @staticmethod\n    def backward(ctx, lll, highs):\n        dx = None\n        if ctx.needs_input_grad[0]:\n            mode = ctx.mode\n            h0_dep, h1_dep, h0_row, h1_row, h0_col, h1_col = ctx.saved_tensors\n            hll, lhl, hhl, llh, hlh, lhh, hhh = torch.unbind(highs, dim=2)\n\n            ## first level\n            ll = sfb1d(lll, hll, h0_dep, h1_dep, mode=mode, dim=2)\n            hl= sfb1d(lhl, hhl, h0_dep, h1_dep, mode=mode, dim=2)\n            lh = sfb1d(llh, hlh, h0_dep, h1_dep, mode=mode, dim=2)\n            hh= sfb1d(lhh, hhh, h0_dep, h1_dep, mode=mode, dim=2)\n\n            ## second level\n            l = sfb1d(ll, hl, h0_col, h1_col, mode=mode, dim=3)\n            h = sfb1d(lh, hh, h0_col, h1_col, mode=mode, dim=3)\n\n            ## last level\n            dx = sfb1d(l, h, h0_row, h1_row, mode = mode, dim = 4)\n\n            if dx.shape[-3] > ctx.shape[-3]:\n                dx = dx[:, :, :ctx.shape[-3]]\n            if dx.shape[-2] > ctx.shape[-2]:\n                dx = dx[:, :, :, :ctx.shape[-2]]\n            if dx.shape[-1] > ctx.shape[-1]:\n                dx = dx[:, :, :, :, :ctx.shape[-1]]\n\n        return dx, None, None, None, None, None\n\n\nif __name__ == '__main__':\n    pass"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/dwt_utils.py",
    "content": "from pytorch_wavelets.dwt import lowlevel as lowlevel\nimport torch\ndevice = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')\n\n\ndef prep_filt_sfb3d(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row):\n    g0_row, g1_row = lowlevel.prep_filt_sfb1d(g0_row, g1_row, device)\n    g0_col, g1_col = lowlevel.prep_filt_sfb1d(g0_col, g1_col, device)\n    g0_dep, g1_dep = lowlevel.prep_filt_sfb1d(g0_dep, g1_dep, device)\n\n    g0_dep = g0_dep.reshape((1, 1, -1, 1, 1))\n    g1_dep = g1_dep.reshape((1, 1, -1, 1, 1))\n    g0_col = g0_col.reshape((1, 1, 1, -1, 1))\n    g1_col = g1_col.reshape((1, 1, 1, -1, 1))\n    g0_row = g0_row.reshape((1, 1, 1, 1, -1))\n    g1_row = g1_row.reshape((1, 1, 1, 1, -1))\n\n    return g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row\n\n\ndef prep_filt_afb3d(h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row):\n    h0_row, h1_row = lowlevel.prep_filt_afb1d(h0_row, h1_row, device)\n    h0_col, h1_col = lowlevel.prep_filt_afb1d(h0_col, h1_col, device)\n    h0_dep, h1_dep = lowlevel.prep_filt_afb1d(h0_dep, h1_dep, device)\n\n    h0_dep = h0_dep.reshape((1, 1, -1, 1, 1))\n    h1_dep = h1_dep.reshape((1, 1, -1, 1, 1))\n    h0_col = h0_col.reshape((1, 1, 1, -1, 1))\n    h1_col = h1_col.reshape((1, 1, 1, -1, 1))\n    h0_row = h0_row.reshape((1, 1, 1, 1, -1))\n    h1_row = h1_row.reshape((1, 1, 1, 1, -1))\n\n    return h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/fp16_util.py",
    "content": "\"\"\"\nHelpers to train with 16-bit precision.\n\"\"\"\n\nimport torch.nn as nn\nfrom torch._utils import _flatten_dense_tensors, _unflatten_dense_tensors\n\n\ndef convert_module_to_f16(l):\n    \"\"\"\n    Convert primitive modules to float16.\n    \"\"\"\n    if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)):\n        l.weight.data = l.weight.data.half()\n        l.bias.data = l.bias.data.half()\n\n\ndef convert_module_to_f32(l):\n    \"\"\"\n    Convert primitive modules to float32, undoing convert_module_to_f16().\n    \"\"\"\n    if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)):\n        l.weight.data = l.weight.data.float()\n        l.bias.data = l.bias.data.float()\n\n\ndef make_master_params(model_params):\n    \"\"\"\n    Copy model parameters into a (differently-shaped) list of full-precision\n    parameters.\n    \"\"\"\n    master_params = _flatten_dense_tensors(\n        [param.detach().float() for param in model_params]\n    )\n    master_params = nn.Parameter(master_params)\n    master_params.requires_grad = True\n    return [master_params]\n\n\ndef model_grads_to_master_grads(model_params, master_params):\n    \"\"\"\n    Copy the gradients from the model parameters into the master parameters\n    from make_master_params().\n    \"\"\"\n    master_params[0].grad = _flatten_dense_tensors(\n        [param.grad.data.detach().float() for param in model_params]\n    )\n\n\ndef master_params_to_model_params(model_params, master_params):\n    \"\"\"\n    Copy the master parameter data back into the model parameters.\n    \"\"\"\n    # Without copying to a list, if a generator is passed, this will\n    # silently not copy any parameters.\n    model_params = list(model_params)\n\n    for param, master_param in zip(\n        model_params, unflatten_master_params(model_params, master_params)\n    ):\n        param.detach().copy_(master_param)\n\n\ndef unflatten_master_params(model_params, master_params):\n    \"\"\"\n    Unflatten the master parameters to look like model_params.\n    \"\"\"\n    return _unflatten_dense_tensors(master_params[0].detach(), model_params)\n\n\ndef zero_grad(model_params):\n    for param in model_params:\n        # Taken from https://pytorch.org/docs/stable/_modules/torch/optim/optimizer.html#Optimizer.add_param_group\n        if param.grad is not None:\n            param.grad.detach_()\n            param.grad.zero_()"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/gaussian_diffusion.py",
    "content": "import enum\nimport math\n\nimport numpy as np\nimport torch\nimport torch as th\n\ndef normal_kl(mean1, logvar1, mean2, logvar2):\n    \"\"\"\n    Compute the KL divergence between two gaussians.\n    Shapes are automatically broadcasted, so batches can be compared to\n    scalars, among other use cases.\n    \"\"\"\n    tensor = None\n    for obj in (mean1, logvar1, mean2, logvar2):\n        if isinstance(obj, th.Tensor):\n            tensor = obj\n            break\n    assert tensor is not None, \"at least one argument must be a Tensor\"\n\n    # Force variances to be Tensors. Broadcasting helps convert scalars to\n    # Tensors, but it does not work for th.exp().\n    logvar1, logvar2 = [\n        x if isinstance(x, th.Tensor) else th.tensor(x).to(tensor)\n        for x in (logvar1, logvar2)\n    ]\n\n    return 0.5 * (\n        -1.0\n        + logvar2\n        - logvar1\n        + th.exp(logvar1 - logvar2)\n        + ((mean1 - mean2) ** 2) * th.exp(-logvar2)\n    )\n\n\ndef approx_standard_normal_cdf(x):\n    \"\"\"\n    A fast approximation of the cumulative distribution function of the\n    standard normal.\n    \"\"\"\n    return 0.5 * (1.0 + th.tanh(np.sqrt(2.0 / np.pi) * (x + 0.044715 * th.pow(x, 3))))\n\ndef discretized_gaussian_log_likelihood(x, *, means, log_scales):\n    \"\"\"\n    Compute the log-likelihood of a Gaussian distribution discretizing to a\n    given image.\n    :param x: the target images. It is assumed that this was uint8 values,\n              rescaled to the range [-1, 1].\n    :param means: the Gaussian mean Tensor.\n    :param log_scales: the Gaussian log stddev Tensor.\n    :return: a tensor like x of log probabilities (in nats).\n    \"\"\"\n    assert x.shape == means.shape == log_scales.shape\n    centered_x = x - means\n    inv_stdv = th.exp(-log_scales)\n    plus_in = inv_stdv * (centered_x + 1.0 / 255.0)\n    cdf_plus = approx_standard_normal_cdf(plus_in)\n    min_in = inv_stdv * (centered_x - 1.0 / 255.0)\n    cdf_min = approx_standard_normal_cdf(min_in)\n    log_cdf_plus = th.log(cdf_plus.clamp(min=1e-12))\n    log_one_minus_cdf_min = th.log((1.0 - cdf_min).clamp(min=1e-12))\n    cdf_delta = cdf_plus - cdf_min\n    log_probs = th.where(\n        x < -0.999,\n        log_cdf_plus,\n        th.where(x > 0.999, log_one_minus_cdf_min, th.log(cdf_delta.clamp(min=1e-12))),\n    )\n    assert log_probs.shape == x.shape\n    return log_probs\n\ndef mean_flat(tensor):\n    \"\"\"\n    Take the mean over all non-batch dimensions.\n    \"\"\"\n    return tensor.mean(dim=list(range(1, len(tensor.shape))))\n\n\ndef get_named_beta_schedule(schedule_name, num_diffusion_timesteps, scale_ratio = 1.0):\n    \"\"\"\n    Get a pre-defined beta schedule for the given name.\n    The beta schedule library consists of beta schedules which remain similar\n    in the limit of num_diffusion_timesteps.\n    Beta schedules may be added, but should not be removed or changed once\n    they are committed to maintain backwards compatibility.\n    \"\"\"\n    if schedule_name == \"linear\":\n        # Linear schedule from Ho et al, extended to work for any number of\n        # diffusion steps.\n        scale = 1000 / num_diffusion_timesteps * scale_ratio\n        beta_start = scale * 0.0001\n        beta_end = scale * 0.02\n        return np.linspace(\n            beta_start, beta_end, num_diffusion_timesteps, dtype=np.float64\n        )\n    elif schedule_name == \"cosine\":\n        return betas_for_alpha_bar(\n            num_diffusion_timesteps,\n            lambda t: math.cos((t + 0.008) / 1.008 * math.pi / 2) ** 2,\n        )\n    else:\n        raise NotImplementedError(f\"unknown beta schedule: {schedule_name}\")\n\n\ndef betas_for_alpha_bar(num_diffusion_timesteps, alpha_bar, max_beta=0.999):\n    \"\"\"\n    Create a beta schedule that discretizes the given alpha_t_bar function,\n    which defines the cumulative product of (1-beta) over time from t = [0,1].\n    :param num_diffusion_timesteps: the number of betas to produce.\n    :param alpha_bar: a lambda that takes an argument t from 0 to 1 and\n                      produces the cumulative product of (1-beta) up to that\n                      part of the diffusion process.\n    :param max_beta: the maximum beta to use; use values lower than 1 to\n                     prevent singularities.\n    \"\"\"\n    betas = []\n    for i in range(num_diffusion_timesteps):\n        t1 = i / num_diffusion_timesteps\n        t2 = (i + 1) / num_diffusion_timesteps\n        betas.append(min(1 - alpha_bar(t2) / alpha_bar(t1), max_beta))\n    return np.array(betas)\n\n\nclass ModelMeanType(enum.Enum):\n    \"\"\"\n    Which type of output the model predicts.\n    \"\"\"\n\n    PREVIOUS_X = enum.auto()  # the model predicts x_{t-1}\n    START_X = enum.auto()  # the model predicts x_0\n    EPSILON = enum.auto()  # the model predicts epsilon\n\n\nclass ModelVarType(enum.Enum):\n    \"\"\"\n    What is used as the model's output variance.\n    The LEARNED_RANGE option has been added to allow the model to predict\n    values between FIXED_SMALL and FIXED_LARGE, making its job easier.\n    \"\"\"\n\n    LEARNED = enum.auto()\n    FIXED_SMALL = enum.auto()\n    FIXED_LARGE = enum.auto()\n    LEARNED_RANGE = enum.auto()\n\n\nclass LossType(enum.Enum):\n    MSE = enum.auto()  # use raw MSE loss (and KL when learning variances)\n    RESCALED_MSE = (\n        enum.auto()\n    )  # use raw MSE loss (with RESCALED_KL when learning variances)\n    KL = enum.auto()  # use the variational lower-bound\n    RESCALED_KL = enum.auto()  # like KL, but rescale to estimate the full VLB\n\n    def is_vb(self):\n        return self == LossType.KL or self == LossType.RESCALED_KL\n\n\n\n\n\nclass GaussianDiffusion:\n    \"\"\"\n    Utilities for training and sampling diffusion models.\n    Ported directly from here, and then adapted over time to further experimentation.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/diffusion_utils_2.py#L42\n    :param betas: a 1-D numpy array of betas for each diffusion timestep,\n                  starting at T and going to 1.\n    :param model_mean_type: a ModelMeanType determining what the model outputs.\n    :param model_var_type: a ModelVarType determining how variance is output.\n    :param loss_type: a LossType determining the loss function to use.\n    :param rescale_timesteps: if True, pass floating point timesteps into the\n                              model so that they are always scaled like in the\n                              original paper (0 to 1000).\n    \"\"\"\n\n    def __init__(\n        self,\n        *,\n        betas,\n        model_mean_type,\n        model_var_type,\n        loss_type,\n        rescale_timesteps=False,\n    ):\n        self.model_mean_type = model_mean_type\n        self.model_var_type = model_var_type\n        self.loss_type = loss_type\n        self.rescale_timesteps = rescale_timesteps\n\n        # Use float64 for accuracy.\n        betas = np.array(betas, dtype=np.float64)\n        self.betas = betas\n        assert len(betas.shape) == 1, \"betas must be 1-D\"\n        assert (betas > 0).all() and (betas <= 1).all()\n\n        self.num_timesteps = int(betas.shape[0])\n\n        alphas = 1.0 - betas\n        self.alphas_cumprod = np.cumprod(alphas, axis=0)\n        self.alphas_cumprod_prev = np.append(1.0, self.alphas_cumprod[:-1])\n        self.alphas_cumprod_next = np.append(self.alphas_cumprod[1:], 0.0)\n        assert self.alphas_cumprod_prev.shape == (self.num_timesteps,)\n\n        # calculations for diffusion q(x_t | x_{t-1}) and others\n        self.sqrt_alphas_cumprod = np.sqrt(self.alphas_cumprod)\n        self.sqrt_one_minus_alphas_cumprod = np.sqrt(1.0 - self.alphas_cumprod)\n        self.log_one_minus_alphas_cumprod = np.log(1.0 - self.alphas_cumprod)\n        self.sqrt_recip_alphas_cumprod = np.sqrt(1.0 / self.alphas_cumprod)\n        self.sqrt_recipm1_alphas_cumprod = np.sqrt(1.0 / self.alphas_cumprod - 1)\n\n        # calculations for posterior q(x_{t-1} | x_t, x_0)\n        self.posterior_variance = (\n            betas * (1.0 - self.alphas_cumprod_prev) / (1.0 - self.alphas_cumprod)\n        )\n        # log calculation clipped because the posterior variance is 0 at the\n        # beginning of the diffusion chain.\n        self.posterior_log_variance_clipped = np.log(\n            np.append(self.posterior_variance[1], self.posterior_variance[1:])\n        )\n        self.posterior_mean_coef1 = (\n            betas * np.sqrt(self.alphas_cumprod_prev) / (1.0 - self.alphas_cumprod)\n        )\n        self.posterior_mean_coef2 = (\n            (1.0 - self.alphas_cumprod_prev)\n            * np.sqrt(alphas)\n            / (1.0 - self.alphas_cumprod)\n        )\n\n    def q_mean_variance(self, x_start, t):\n        \"\"\"\n        Get the distribution q(x_t | x_0).\n        :param x_start: the [N x C x ...] tensor of noiseless inputs.\n        :param t: the number of diffusion steps (minus 1). Here, 0 means one step.\n        :return: A tuple (mean, variance, log_variance), all of x_start's shape.\n        \"\"\"\n        mean = (\n            _extract_into_tensor(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start\n        )\n        variance = _extract_into_tensor(1.0 - self.alphas_cumprod, t, x_start.shape)\n        log_variance = _extract_into_tensor(\n            self.log_one_minus_alphas_cumprod, t, x_start.shape\n        )\n        return mean, variance, log_variance\n\n    def q_sample(self, x_start, t, noise=None):\n        \"\"\"\n        Diffuse the data for a given number of diffusion steps.\n        In other words, sample from q(x_t | x_0).\n        :param x_start: the initial data batch.\n        :param t: the number of diffusion steps (minus 1). Here, 0 means one step.\n        :param noise: if specified, the split-out normal noise.\n        :return: A noisy version of x_start.\n        \"\"\"\n        if noise is None:\n            noise = th.randn_like(x_start)\n        assert noise.shape == x_start.shape\n        return (\n            _extract_into_tensor(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start\n            + _extract_into_tensor(self.sqrt_one_minus_alphas_cumprod, t, x_start.shape)\n            * noise\n        )\n\n    def q_posterior_mean_variance(self, x_start, x_t, t):\n        \"\"\"\n        Compute the mean and variance of the diffusion posterior:\n            q(x_{t-1} | x_t, x_0)\n        \"\"\"\n        assert x_start.shape == x_t.shape\n        posterior_mean = (\n            _extract_into_tensor(self.posterior_mean_coef1, t, x_t.shape) * x_start\n            + _extract_into_tensor(self.posterior_mean_coef2, t, x_t.shape) * x_t\n        )\n        posterior_variance = _extract_into_tensor(self.posterior_variance, t, x_t.shape)\n        posterior_log_variance_clipped = _extract_into_tensor(\n            self.posterior_log_variance_clipped, t, x_t.shape\n        )\n        assert (\n            posterior_mean.shape[0]\n            == posterior_variance.shape[0]\n            == posterior_log_variance_clipped.shape[0]\n            == x_start.shape[0]\n        )\n        return posterior_mean, posterior_variance, posterior_log_variance_clipped\n\n    def p_mean_variance(\n        self, model, x, t, clip_denoised=True, denoised_fn=None, model_kwargs=None\n    ):\n        \"\"\"\n        Apply the model to get p(x_{t-1} | x_t), as well as a prediction of\n        the initial x, x_0.\n        :param model: the model, which takes a signal and a batch of timesteps\n                      as input.\n        :param x: the [N x C x ...] tensor at time t.\n        :param t: a 1-D Tensor of timesteps.\n        :param clip_denoised: if True, clip the denoised signal into [-1, 1].\n        :param denoised_fn: if not None, a function which applies to the\n            x_start prediction before it is used to sample. Applies before\n            clip_denoised.\n        :param model_kwargs: if not None, a dict of extra keyword arguments to\n            pass to the model. This can be used for conditioning.\n        :return: a dict with the following keys:\n                 - 'mean': the model mean output.\n                 - 'variance': the model variance output.\n                 - 'log_variance': the log of 'variance'.\n                 - 'pred_xstart': the prediction for x_0.\n        \"\"\"\n        if model_kwargs is None:\n            model_kwargs = {}\n\n        B, C = x.shape[:2]\n        assert t.shape == (B,)\n        model_output = model(x, self._scale_timesteps(t), **model_kwargs)\n\n        if self.model_var_type in [ModelVarType.LEARNED, ModelVarType.LEARNED_RANGE]:\n            assert model_output.shape == (B, C * 2, *x.shape[2:])\n            model_output, model_var_values = th.split(model_output, C, dim=1)\n            if self.model_var_type == ModelVarType.LEARNED:\n                model_log_variance = model_var_values\n                model_variance = th.exp(model_log_variance)\n            else:\n                min_log = _extract_into_tensor(\n                    self.posterior_log_variance_clipped, t, x.shape\n                )\n                max_log = _extract_into_tensor(np.log(self.betas), t, x.shape)\n                # The model_var_values is [-1, 1] for [min_var, max_var].\n                frac = (model_var_values + 1) / 2\n                model_log_variance = frac * max_log + (1 - frac) * min_log\n                model_variance = th.exp(model_log_variance)\n        else:\n            model_variance, model_log_variance = {\n                # for fixedlarge, we set the initial (log-)variance like so\n                # to get a better decoder log likelihood.\n                ModelVarType.FIXED_LARGE: (\n                    np.append(self.posterior_variance[1], self.betas[1:]),\n                    np.log(np.append(self.posterior_variance[1], self.betas[1:])),\n                ),\n                ModelVarType.FIXED_SMALL: (\n                    self.posterior_variance,\n                    self.posterior_log_variance_clipped,\n                ),\n            }[self.model_var_type]\n            model_variance = _extract_into_tensor(model_variance, t, x.shape)\n            model_log_variance = _extract_into_tensor(model_log_variance, t, x.shape)\n\n        def process_xstart(x):\n            if denoised_fn is not None:\n                x = denoised_fn(x)\n            if clip_denoised:\n                return x.clamp(-1, 1)\n            return x\n\n        if self.model_mean_type == ModelMeanType.PREVIOUS_X:\n            pred_xstart = process_xstart(\n                self._predict_xstart_from_xprev(x_t=x, t=t, xprev=model_output)\n            )\n            model_mean = model_output\n        elif self.model_mean_type in [ModelMeanType.START_X, ModelMeanType.EPSILON]:\n            if self.model_mean_type == ModelMeanType.START_X:\n                pred_xstart = process_xstart(model_output)\n            else:\n                pred_xstart = process_xstart(\n                    self._predict_xstart_from_eps(x_t=x, t=t, eps=model_output)\n                )\n            model_mean, _, _ = self.q_posterior_mean_variance(\n                x_start=pred_xstart, x_t=x, t=t\n            )\n        else:\n            raise NotImplementedError(self.model_mean_type)\n\n        assert (\n            model_mean.shape == model_log_variance.shape == pred_xstart.shape == x.shape\n        )\n        return {\n            \"mean\": model_mean,\n            \"variance\": model_variance,\n            \"log_variance\": model_log_variance,\n            \"pred_xstart\": pred_xstart,\n        }\n\n    def _predict_xstart_from_eps(self, x_t, t, eps):\n        assert x_t.shape == eps.shape\n        return (\n            _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t\n            - _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x_t.shape) * eps\n        )\n\n    def _predict_xstart_from_xprev(self, x_t, t, xprev):\n        assert x_t.shape == xprev.shape\n        return (  # (xprev - coef2*x_t) / coef1\n            _extract_into_tensor(1.0 / self.posterior_mean_coef1, t, x_t.shape) * xprev\n            - _extract_into_tensor(\n                self.posterior_mean_coef2 / self.posterior_mean_coef1, t, x_t.shape\n            )\n            * x_t\n        )\n\n    def _predict_eps_from_xstart(self, x_t, t, pred_xstart):\n        return (\n            _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t\n            - pred_xstart\n        ) / _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x_t.shape)\n\n    def _scale_timesteps(self, t):\n        if self.rescale_timesteps:\n            return t.float() * (1000.0 / self.num_timesteps)\n        return t\n\n    def p_sample(\n        self, model, x, t, clip_denoised=True, denoised_fn=None, model_kwargs=None\n    ):\n        \"\"\"\n        Sample x_{t-1} from the model at the given timestep.\n        :param model: the model to sample from.\n        :param x: the current tensor at x_{t-1}.\n        :param t: the value of t, starting at 0 for the first diffusion step.\n        :param clip_denoised: if True, clip the x_start prediction to [-1, 1].\n        :param denoised_fn: if not None, a function which applies to the\n            x_start prediction before it is used to sample.\n        :param model_kwargs: if not None, a dict of extra keyword arguments to\n            pass to the model. This can be used for conditioning.\n        :return: a dict containing the following keys:\n                 - 'sample': a random sample from the model.\n                 - 'pred_xstart': a prediction of x_0.\n        \"\"\"\n        out = self.p_mean_variance(\n            model,\n            x,\n            t,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            model_kwargs=model_kwargs,\n        )\n        noise = th.randn_like(x)\n        nonzero_mask = (\n            (t != 0).float().view(-1, *([1] * (len(x.shape) - 1)))\n        )  # no noise when t == 0\n        sample = out[\"mean\"] + nonzero_mask * th.exp(0.5 * out[\"log_variance\"]) * noise\n        return {\"sample\": sample, \"pred_xstart\": out[\"pred_xstart\"]}\n\n    def p_sample_loop(\n        self,\n        model,\n        shape,\n        noise=None,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        device=None,\n        progress=False,\n    ):\n        \"\"\"\n        Generate samples from the model.\n        :param model: the model module.\n        :param shape: the shape of the samples, (N, C, H, W).\n        :param noise: if specified, the noise from the encoder to sample.\n                      Should be of the same shape as `shape`.\n        :param clip_denoised: if True, clip x_start predictions to [-1, 1].\n        :param denoised_fn: if not None, a function which applies to the\n            x_start prediction before it is used to sample.\n        :param model_kwargs: if not None, a dict of extra keyword arguments to\n            pass to the model. This can be used for conditioning.\n        :param device: if specified, the device to create the samples on.\n                       If not specified, use a model parameter's device.\n        :param progress: if True, show a tqdm progress bar.\n        :return: a non-differentiable batch of samples.\n        \"\"\"\n        final = None\n        for sample in self.p_sample_loop_progressive(\n            model,\n            shape,\n            noise=noise,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            model_kwargs=model_kwargs,\n            device=device,\n            progress=progress,\n        ):\n            final = sample\n        return final[\"sample\"]\n\n    def p_sample_loop_progressive(\n        self,\n        model,\n        shape,\n        noise=None,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        device=None,\n        progress=False,\n    ):\n        \"\"\"\n        Generate samples from the model and yield intermediate samples from\n        each timestep of diffusion.\n        Arguments are the same as p_sample_loop().\n        Returns a generator over dicts, where each dict is the return value of\n        p_sample().\n        \"\"\"\n        if device is None:\n            device = next(model.parameters()).device\n        assert isinstance(shape, (tuple, list))\n        if noise is not None:\n            img = noise\n\n        else:\n            img = th.randn(*shape, device=device)\n        if model_kwargs['noise_save_path'] is not None:\n            torch.save(img, model_kwargs['noise_save_path'])\n        if 'noise_save_path' in model_kwargs:\n            del model_kwargs['noise_save_path']\n\n        indices = list(range(self.num_timesteps))[::-1]\n\n        if 'start_step' in model_kwargs:\n            indices = indices[model_kwargs['start_step'] - 1:]\n            del model_kwargs['start_step']\n\n        if progress:\n            # Lazy import so that we don't depend on tqdm.\n            from tqdm.auto import tqdm\n\n            indices = tqdm(indices)\n\n        for i in indices:\n            t = th.tensor([i] * shape[0], device=device)\n            with th.no_grad():\n                out = self.p_sample(\n                    model,\n                    img,\n                    t,\n                    clip_denoised=clip_denoised,\n                    denoised_fn=denoised_fn,\n                    model_kwargs=model_kwargs,\n                )\n                yield out\n                img = out[\"sample\"]\n\n    def ddim_sample(\n        self,\n        model,\n        x,\n        t,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        eta=0.0,\n    ):\n        \"\"\"\n        Sample x_{t-1} from the model using DDIM.\n        Same usage as p_sample().\n        \"\"\"\n        out = self.p_mean_variance(\n            model,\n            x,\n            t,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            model_kwargs=model_kwargs,\n        )\n        # Usually our model outputs epsilon, but we re-derive it\n        # in case we used x_start or x_prev prediction.\n        eps = self._predict_eps_from_xstart(x, t, out[\"pred_xstart\"])\n        alpha_bar = _extract_into_tensor(self.alphas_cumprod, t, x.shape)\n        alpha_bar_prev = _extract_into_tensor(self.alphas_cumprod_prev, t, x.shape)\n        sigma = (\n            eta\n            * th.sqrt((1 - alpha_bar_prev) / (1 - alpha_bar))\n            * th.sqrt(1 - alpha_bar / alpha_bar_prev)\n        )\n        # Equation 12.\n        noise = th.randn_like(x)\n        mean_pred = (\n            out[\"pred_xstart\"] * th.sqrt(alpha_bar_prev)\n            + th.sqrt(1 - alpha_bar_prev - sigma ** 2) * eps\n        )\n        nonzero_mask = (\n            (t != 0).float().view(-1, *([1] * (len(x.shape) - 1)))\n        )  # no noise when t == 0\n        sample = mean_pred + nonzero_mask * sigma * noise\n        return {\"sample\": sample, \"pred_xstart\": out[\"pred_xstart\"]}\n\n    def ddim_reverse_sample(\n        self,\n        model,\n        x,\n        t,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        eta=0.0,\n    ):\n        \"\"\"\n        Sample x_{t+1} from the model using DDIM reverse ODE.\n        \"\"\"\n        assert eta == 0.0, \"Reverse ODE only for deterministic path\"\n        out = self.p_mean_variance(\n            model,\n            x,\n            t,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            model_kwargs=model_kwargs,\n        )\n        # Usually our model outputs epsilon, but we re-derive it\n        # in case we used x_start or x_prev prediction.\n        eps = (\n            _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x.shape) * x\n            - out[\"pred_xstart\"]\n        ) / _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x.shape)\n        alpha_bar_next = _extract_into_tensor(self.alphas_cumprod_next, t, x.shape)\n\n        # Equation 12. reversed\n        mean_pred = (\n            out[\"pred_xstart\"] * th.sqrt(alpha_bar_next)\n            + th.sqrt(1 - alpha_bar_next) * eps\n        )\n\n        return {\"sample\": mean_pred, \"pred_xstart\": out[\"pred_xstart\"]}\n\n    def ddim_sample_loop(\n        self,\n        model,\n        shape,\n        noise=None,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        device=None,\n        progress=False,\n        eta=0.0,\n    ):\n        \"\"\"\n        Generate samples from the model using DDIM.\n        Same usage as p_sample_loop().\n        \"\"\"\n        final = None\n        for sample in self.ddim_sample_loop_progressive(\n            model,\n            shape,\n            noise=noise,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            model_kwargs=model_kwargs,\n            device=device,\n            progress=progress,\n            eta=eta,\n        ):\n            final = sample\n        return final[\"sample\"]\n\n    def ddim_sample_loop_progressive(\n        self,\n        model,\n        shape,\n        noise=None,\n        clip_denoised=True,\n        denoised_fn=None,\n        model_kwargs=None,\n        device=None,\n        progress=False,\n        eta=0.0,\n    ):\n        \"\"\"\n        Use DDIM to sample from the model and yield intermediate samples from\n        each timestep of DDIM.\n        Same usage as p_sample_loop_progressive().\n        \"\"\"\n        if device is None:\n            device = next(model.parameters()).device\n        assert isinstance(shape, (tuple, list))\n        if noise is not None:\n            img = noise\n        else:\n            img = th.randn(*shape, device=device)\n\n        if model_kwargs['noise_save_path'] is not None:\n            torch.save(img, model_kwargs['noise_save_path'])\n        if 'noise_save_path' in model_kwargs:\n            del model_kwargs['noise_save_path']\n\n        indices = list(range(self.num_timesteps))[::-1]\n\n        if 'start_step' in model_kwargs:\n            indices = indices[model_kwargs['start_step']-1:]\n            del model_kwargs['start_step']\n\n        if progress:\n            # Lazy import so that we don't depend on tqdm.\n            from tqdm.auto import tqdm\n\n            indices = tqdm(indices)\n\n        for i in indices:\n            t = th.tensor([i] * shape[0], device=device)\n            with th.no_grad():\n                out = self.ddim_sample(\n                    model,\n                    img,\n                    t,\n                    clip_denoised=clip_denoised,\n                    denoised_fn=denoised_fn,\n                    model_kwargs=model_kwargs,\n                    eta=eta,\n                )\n                yield out\n                img = out[\"sample\"]\n\n    def _vb_terms_bpd(\n        self, model, x_start, x_t, t, clip_denoised=True, model_kwargs=None\n    ):\n        \"\"\"\n        Get a term for the variational lower-bound.\n        The resulting units are bits (rather than nats, as one might expect).\n        This allows for comparison to other papers.\n        :return: a dict with the following keys:\n                 - 'output': a shape [N] tensor of NLLs or KLs.\n                 - 'pred_xstart': the x_0 predictions.\n        \"\"\"\n        true_mean, _, true_log_variance_clipped = self.q_posterior_mean_variance(\n            x_start=x_start, x_t=x_t, t=t\n        )\n        out = self.p_mean_variance(\n            model, x_t, t, clip_denoised=clip_denoised, model_kwargs=model_kwargs\n        )\n        kl = normal_kl(\n            true_mean, true_log_variance_clipped, out[\"mean\"], out[\"log_variance\"]\n        )\n        kl = mean_flat(kl) / np.log(2.0)\n\n        decoder_nll = -discretized_gaussian_log_likelihood(\n            x_start, means=out[\"mean\"], log_scales=0.5 * out[\"log_variance\"]\n        )\n        assert decoder_nll.shape == x_start.shape\n        decoder_nll = mean_flat(decoder_nll) / np.log(2.0)\n\n        # At the first timestep return the decoder NLL,\n        # otherwise return KL(q(x_{t-1}|x_t,x_0) || p(x_{t-1}|x_t))\n        # This has chnaged to continuous version\n        output = kl #th.where((t == 0), decoder_nll, kl)\n        return {\"output\": output, \"pred_xstart\": out[\"pred_xstart\"]}\n\n\n    def conditional_sample(\n        self,\n        model,\n        feat_grid,\n        shape,\n        device=None,\n        noise=None,\n        clip_denoised=True,\n        denoised_fn=None,\n        progress=False,\n        model_kwargs=None,\n    ):\n        \"\"\"\n        Generate samples from the model, conditioned on feat_grid.\n        \"\"\"\n        # 1) If user didn't supply initial noise, create random normal:\n        if noise is None:\n            noise = torch.randn(*shape, device=device)\n\n        # 2) We'll define a small function that merges material grid 'x' with feat_grid:\n        def model_wrapper(x, t, **kwargs):\n            return model(x, feat_grid, t, **kwargs)\n        \n        # 3) Then sample in a loop:\n        return self.p_sample_loop(\n            model=model_wrapper,\n            shape=shape,\n            noise=noise,\n            device=device,\n            clip_denoised=clip_denoised,\n            denoised_fn=denoised_fn,\n            progress=progress,\n            model_kwargs=model_kwargs,\n        )\n\n    def conditional_diffusion_loss(self, model, mat_start, feat_start, t, model_kwargs=None, noise=None):\n        if model_kwargs is None:\n            model_kwargs = {}\n        if noise is None:\n            noise = th.randn_like(mat_start)\n        noisy_mat = self.q_sample(mat_start, t, noise=noise)\n\n        # x_t = th.cat([noisy_mat, feat_start], dim=1)\n        # model_output = model(x_t, self._scale_timesteps(t), **model_kwargs)\n\n        model_output = model(noisy_mat, feat_start, self._scale_timesteps(t), **model_kwargs)\n\n        if self.model_mean_type == ModelMeanType.EPSILON:\n            target = noise\n        else:  # Predict denoised\n            target = mat_start\n\n        terms = {}\n        terms[\"mse\"] = mean_flat((target - model_output) ** 2)\n        terms[\"loss\"] = terms[\"mse\"]\n        terms[\"eps_pred\"]   = model_output\n        terms[\"eps_target\"] = target\n        return terms\n\n\n    def training_losses(self, model, x_start, t, model_kwargs=None, noise=None):\n        \"\"\"\n        Compute training losses for a single timestep.\n        :param model: the model to evaluate loss on.\n        :param x_start: the [N x C x ...] tensor of inputs.\n        :param t: a batch of timestep indices.\n        :param model_kwargs: if not None, a dict of extra keyword arguments to\n            pass to the model. This can be used for conditioning.\n        :param noise: if specified, the specific Gaussian noise to try to remove.\n        :return: a dict with the key \"loss\" containing a tensor of shape [N].\n                 Some mean or variance settings may also have other keys.\n        \"\"\"\n        if model_kwargs is None:\n            model_kwargs = {}\n        if noise is None:\n            noise = th.randn_like(x_start)\n        x_t = self.q_sample(x_start, t, noise=noise)\n\n        terms = {}\n\n        if self.loss_type == LossType.KL or self.loss_type == LossType.RESCALED_KL:\n            terms[\"loss\"] = self._vb_terms_bpd(\n                model=model,\n                x_start=x_start,\n                x_t=x_t,\n                t=t,\n                clip_denoised=False,\n                model_kwargs=model_kwargs,\n            )[\"output\"]\n            if self.loss_type == LossType.RESCALED_KL:\n                terms[\"loss\"] *= self.num_timesteps\n        elif self.loss_type == LossType.MSE or self.loss_type == LossType.RESCALED_MSE:\n            model_output = model(x_t, self._scale_timesteps(t), **model_kwargs)\n\n            if self.model_var_type in [\n                ModelVarType.LEARNED,\n                ModelVarType.LEARNED_RANGE,\n            ]:\n                B, C = x_t.shape[:2]\n                assert model_output.shape == (B, C * 2, *x_t.shape[2:])\n                model_output, model_var_values = th.split(model_output, C, dim=1)\n                # Learn the variance using the variational bound, but don't let\n                # it affect our mean prediction.\n                frozen_out = th.cat([model_output.detach(), model_var_values], dim=1)\n                terms[\"vb\"] = self._vb_terms_bpd(\n                    model=lambda *args, r=frozen_out: r,\n                    x_start=x_start,\n                    x_t=x_t,\n                    t=t,\n                    clip_denoised=False,\n                )[\"output\"]\n                if self.loss_type == LossType.RESCALED_MSE:\n                    # Divide by 1000 for equivalence with initial implementation.\n                    # Without a factor of 1/1000, the VB term hurts the MSE term.\n                    terms[\"vb\"] *= self.num_timesteps / 1000.0\n\n            target = {\n                ModelMeanType.PREVIOUS_X: self.q_posterior_mean_variance(\n                    x_start=x_start, x_t=x_t, t=t\n                )[0],\n                ModelMeanType.START_X: x_start,\n                ModelMeanType.EPSILON: noise,\n            }[self.model_mean_type]\n            assert model_output.shape == target.shape == x_start.shape\n            terms[\"mse\"] = mean_flat((target - model_output) ** 2)\n            if \"vb\" in terms:\n                terms[\"loss\"] = terms[\"mse\"] + terms[\"vb\"]\n            else:\n                terms[\"loss\"] = terms[\"mse\"]\n        else:\n            raise NotImplementedError(self.loss_type)\n\n        return terms\n\n    def _prior_bpd(self, x_start):\n        \"\"\"\n        Get the prior KL term for the variational lower-bound, measured in\n        bits-per-dim.\n        This term can't be optimized, as it only depends on the encoder.\n        :param x_start: the [N x C x ...] tensor of inputs.\n        :return: a batch of [N] KL values (in bits), one per batch element.\n        \"\"\"\n        batch_size = x_start.shape[0]\n        t = th.tensor([self.num_timesteps - 1] * batch_size, device=x_start.device)\n        qt_mean, _, qt_log_variance = self.q_mean_variance(x_start, t)\n        kl_prior = normal_kl(\n            mean1=qt_mean, logvar1=qt_log_variance, mean2=0.0, logvar2=0.0\n        )\n        return mean_flat(kl_prior) / np.log(2.0)\n\n    def calc_bpd_loop(self, model, x_start, clip_denoised=True, model_kwargs=None):\n        \"\"\"\n        Compute the entire variational lower-bound, measured in bits-per-dim,\n        as well as other related quantities.\n        :param model: the model to evaluate loss on.\n        :param x_start: the [N x C x ...] tensor of inputs.\n        :param clip_denoised: if True, clip denoised samples.\n        :param model_kwargs: if not None, a dict of extra keyword arguments to\n            pass to the model. This can be used for conditioning.\n        :return: a dict containing the following keys:\n                 - total_bpd: the total variational lower-bound, per batch element.\n                 - prior_bpd: the prior term in the lower-bound.\n                 - vb: an [N x T] tensor of terms in the lower-bound.\n                 - xstart_mse: an [N x T] tensor of x_0 MSEs for each timestep.\n                 - mse: an [N x T] tensor of epsilon MSEs for each timestep.\n        \"\"\"\n        device = x_start.device\n        batch_size = x_start.shape[0]\n\n        vb = []\n        xstart_mse = []\n        mse = []\n        for t in list(range(self.num_timesteps))[::-1]:\n            t_batch = th.tensor([t] * batch_size, device=device)\n            noise = th.randn_like(x_start)\n            x_t = self.q_sample(x_start=x_start, t=t_batch, noise=noise)\n            # Calculate VLB term at the current timestep\n            with th.no_grad():\n                out = self._vb_terms_bpd(\n                    model,\n                    x_start=x_start,\n                    x_t=x_t,\n                    t=t_batch,\n                    clip_denoised=clip_denoised,\n                    model_kwargs=model_kwargs,\n                )\n            vb.append(out[\"output\"])\n            xstart_mse.append(mean_flat((out[\"pred_xstart\"] - x_start) ** 2))\n            eps = self._predict_eps_from_xstart(x_t, t_batch, out[\"pred_xstart\"])\n            mse.append(mean_flat((eps - noise) ** 2))\n\n        vb = th.stack(vb, dim=1)\n        xstart_mse = th.stack(xstart_mse, dim=1)\n        mse = th.stack(mse, dim=1)\n\n        prior_bpd = self._prior_bpd(x_start)\n        total_bpd = vb.sum(dim=1) + prior_bpd\n        return {\n            \"total_bpd\": total_bpd,\n            \"prior_bpd\": prior_bpd,\n            \"vb\": vb,\n            \"xstart_mse\": xstart_mse,\n            \"mse\": mse,\n        }\n\n\ndef _extract_into_tensor(arr, timesteps, broadcast_shape):\n    \"\"\"\n    Extract values from a 1-D numpy array for a batch of indices.\n    :param arr: the 1-D numpy array.\n    :param timesteps: a tensor of indices into the array to extract.\n    :param broadcast_shape: a larger shape of K dimensions with the batch\n                            dimension equal to the length of timesteps.\n    :return: a tensor of shape [batch_size, 1, ...] where the shape has K dims.\n    \"\"\"\n    res = th.from_numpy(arr).to(device=timesteps.device)[timesteps].float()\n    while len(res.shape) < len(broadcast_shape):\n        res = res[..., None]\n    return res.expand(broadcast_shape)\n\nclass SpacedDiffusion(GaussianDiffusion):\n    \"\"\"\n    A diffusion process which can skip steps in a base diffusion process.\n    :param use_timesteps: a collection (sequence or set) of timesteps from the\n                          original diffusion process to retain.\n    :param kwargs: the kwargs to create the base diffusion process.\n    \"\"\"\n\n    def __init__(self, use_timesteps, **kwargs):\n        self.use_timesteps = set(use_timesteps)\n        self.timestep_map = []\n        self.original_num_steps = len(kwargs[\"betas\"])\n\n        base_diffusion = GaussianDiffusion(**kwargs)  # pylint: disable=missing-kwoa\n        last_alpha_cumprod = 1.0\n        new_betas = []\n        for i, alpha_cumprod in enumerate(base_diffusion.alphas_cumprod):\n            if i in self.use_timesteps:\n                new_betas.append(1 - alpha_cumprod / last_alpha_cumprod)\n                last_alpha_cumprod = alpha_cumprod\n                self.timestep_map.append(i)\n        kwargs[\"betas\"] = np.array(new_betas)\n        super().__init__(**kwargs)\n\n    def p_mean_variance(\n        self, model, *args, **kwargs\n    ):  # pylint: disable=signature-differs\n        return super().p_mean_variance(self._wrap_model(model), *args, **kwargs)\n\n    def training_losses(\n        self, model, *args, **kwargs\n    ):  # pylint: disable=signature-differs\n        return super().training_losses(self._wrap_model(model), *args, **kwargs)\n\n    def _wrap_model(self, model):\n        if isinstance(model, _WrappedModel):\n            return model\n        return _WrappedModel(\n            model, self.timestep_map, self.rescale_timesteps, self.original_num_steps\n        )\n\n    def _scale_timesteps(self, t):\n        # Scaling is done by the wrapped model.\n        return t\n\n\nclass _WrappedModel:\n    def __init__(self, model, timestep_map, rescale_timesteps, original_num_steps):\n        self.model = model\n        self.timestep_map = timestep_map\n        self.rescale_timesteps = rescale_timesteps\n        self.original_num_steps = original_num_steps\n\n    def __call__(self, x, ts, **kwargs):\n        map_tensor = th.tensor(self.timestep_map, device=ts.device, dtype=ts.dtype)\n        new_ts = map_tensor[ts]\n        if self.rescale_timesteps:\n            new_ts = new_ts.float() * (1000.0 / self.original_num_steps)\n        return self.model(x, new_ts, **kwargs)\n\ndef space_timesteps(num_timesteps, section_counts):\n    \"\"\"\n    Create a list of timesteps to use from an original diffusion process,\n    given the number of timesteps we want to take from equally-sized portions\n    of the original process.\n    For example, if there's 300 timesteps and the section counts are [10,15,20]\n    then the first 100 timesteps are strided to be 10 timesteps, the second 100\n    are strided to be 15 timesteps, and the final 100 are strided to be 20.\n    If the stride is a string starting with \"ddim\", then the fixed striding\n    from the DDIM paper is used, and only one section is allowed.\n    :param num_timesteps: the number of diffusion steps in the original\n                          process to divide up.\n    :param section_counts: either a list of numbers, or a string containing\n                           comma-separated numbers, indicating the step count\n                           per section. As a special case, use \"ddimN\" where N\n                           is a number of steps to use the striding from the\n                           DDIM paper.\n    :return: a set of diffusion steps from the original process to use.\n    \"\"\"\n    if isinstance(section_counts, str):\n        if section_counts.startswith(\"ddim\"):\n            desired_count = int(section_counts[len(\"ddim\") :])\n            for i in range(1, num_timesteps):\n                if len(range(0, num_timesteps, i)) == desired_count:\n                    return set(range(0, num_timesteps, i))\n            raise ValueError(\n                f\"cannot create exactly {num_timesteps} steps with an integer stride\"\n            )\n        section_counts = [int(x) for x in section_counts.split(\",\")]\n    size_per = num_timesteps // len(section_counts)\n    extra = num_timesteps % len(section_counts)\n    start_idx = 0\n    all_steps = []\n    for i, section_count in enumerate(section_counts):\n        size = size_per + (1 if i < extra else 0)\n        if size < section_count:\n            raise ValueError(\n                f\"cannot divide section of {size} steps into {section_count}\"\n            )\n        if section_count <= 1:\n            frac_stride = 1\n        else:\n            frac_stride = (size - 1) / (section_count - 1)\n        cur_idx = 0.0\n        taken_steps = []\n        for _ in range(section_count):\n            taken_steps.append(start_idx + round(cur_idx))\n            cur_idx += frac_stride\n        all_steps += taken_steps\n        start_idx += size\n    return set(all_steps)\n\n\ndevice = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')\n\nif __name__ == '__main__':\n    pass"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/nn.py",
    "content": "\"\"\"\nVarious utilities for neural networks.\n\"\"\"\n\nimport math\n\nimport torch as th\nimport torch.nn as nn\n\n\n# PyTorch 1.7 has SiLU, but we support PyTorch 1.5.\nclass SiLU(nn.Module):\n    def forward(self, x):\n        return x * th.sigmoid(x)\n\n\nclass GroupNorm32(nn.GroupNorm):\n    def forward(self, x):\n        return super().forward(x.float()).type(x.dtype)\n\n\ndef conv_nd(dims, *args, **kwargs):\n    \"\"\"\n    Create a 1D, 2D, or 3D convolution module.\n    \"\"\"\n    if dims == 1:\n        return nn.Conv1d(*args, **kwargs)\n    elif dims == 2:\n        return nn.Conv2d(*args, **kwargs)\n    elif dims == 3:\n        return nn.Conv3d(*args, **kwargs)\n    raise ValueError(f\"unsupported dimensions: {dims}\")\n\n\ndef linear(*args, **kwargs):\n    \"\"\"\n    Create a linear module.\n    \"\"\"\n    return nn.Linear(*args, **kwargs)\n\n\ndef avg_pool_nd(dims, *args, **kwargs):\n    \"\"\"\n    Create a 1D, 2D, or 3D average pooling module.\n    \"\"\"\n    if dims == 1:\n        return nn.AvgPool1d(*args, **kwargs)\n    elif dims == 2:\n        return nn.AvgPool2d(*args, **kwargs)\n    elif dims == 3:\n        return nn.AvgPool3d(*args, **kwargs)\n    raise ValueError(f\"unsupported dimensions: {dims}\")\n\n\ndef update_ema(target_params, source_params, rate=0.99):\n    \"\"\"\n    Update target parameters to be closer to those of source parameters using\n    an exponential moving average.\n    :param target_params: the target parameter sequence.\n    :param source_params: the source parameter sequence.\n    :param rate: the EMA rate (closer to 1 means slower).\n    \"\"\"\n    for targ, src in zip(target_params, source_params):\n        targ.detach().mul_(rate).add_(src, alpha=1 - rate)\n\n\ndef zero_module(module):\n    \"\"\"\n    Zero out the parameters of a module and return it.\n    \"\"\"\n    for p in module.parameters():\n        p.detach().zero_()\n    return module\n\n\ndef scale_module(module, scale):\n    \"\"\"\n    Scale the parameters of a module and return it.\n    \"\"\"\n    for p in module.parameters():\n        p.detach().mul_(scale)\n    return module\n\n\ndef mean_flat(tensor):\n    \"\"\"\n    Take the mean over all non-batch dimensions.\n    \"\"\"\n    return tensor.mean(dim=list(range(1, len(tensor.shape))))\n\n\n### REMARK: Change to 4\ndef normalization(channels):\n    \"\"\"\n    Make a standard normalization layer.\n    :param channels: number of input channels.\n    :return: an nn.Module for normalization.\n    \"\"\"\n    return GroupNorm32(32, channels)\n\n\ndef timestep_embedding(timesteps, dim, max_period=10000):\n    \"\"\"\n    Create sinusoidal timestep embeddings.\n    :param timesteps: a 1-D Tensor of N indices, one per batch element.\n                      These may be fractional.\n    :param dim: the dimension of the output.\n    :param max_period: controls the minimum frequency of the embeddings.\n    :return: an [N x dim] Tensor of positional embeddings.\n    \"\"\"\n    half = dim // 2\n    freqs = th.exp(\n        -math.log(max_period) * th.arange(start=0, end=half, dtype=th.float32) / half\n    ).to(device=timesteps.device)\n    args = timesteps[:, None].float() * freqs[None]\n    embedding = th.cat([th.cos(args), th.sin(args)], dim=-1)\n    if dim % 2:\n        embedding = th.cat([embedding, th.zeros_like(embedding[:, :1])], dim=-1)\n    return embedding\n\n\ndef checkpoint(func, inputs, params, flag):\n    \"\"\"\n    Evaluate a function without caching intermediate activations, allowing for\n    reduced memory at the expense of extra compute in the backward pass.\n    :param func: the function to evaluate.\n    :param inputs: the argument sequence to pass to `func`.\n    :param params: a sequence of parameters `func` depends on but does not\n                   explicitly take as arguments.\n    :param flag: if False, disable gradient checkpointing.\n    \"\"\"\n    if flag:\n        args = tuple(inputs) + tuple(params)\n        return CheckpointFunction.apply(func, len(inputs), *args)\n    else:\n        return func(*inputs)\n\n\nclass CheckpointFunction(th.autograd.Function):\n    @staticmethod\n    def forward(ctx, run_function, length, *args):\n        ctx.run_function = run_function\n        ctx.input_tensors = list(args[:length])\n        ctx.input_params = list(args[length:])\n        with th.no_grad():\n            output_tensors = ctx.run_function(*ctx.input_tensors)\n        return output_tensors\n\n    @staticmethod\n    def backward(ctx, *output_grads):\n        ctx.input_tensors = [x.detach().requires_grad_(True) for x in ctx.input_tensors]\n        with th.enable_grad():\n            # Fixes a bug where the first op in run_function modifies the\n            # Tensor storage in place, which is not allowed for detach()'d\n            # Tensors.\n            shallow_copies = [x.view_as(x) for x in ctx.input_tensors]\n            output_tensors = ctx.run_function(*shallow_copies)\n        input_grads = th.autograd.grad(\n            output_tensors,\n            ctx.input_tensors + ctx.input_params,\n            output_grads,\n            allow_unused=True,\n        )\n        del ctx.input_tensors\n        del ctx.input_params\n        del output_tensors\n        return (None, None) + input_grads"
  },
  {
    "path": "third_party/Wavelet-Generation/models/module/resample.py",
    "content": "from abc import ABC, abstractmethod\n\nimport numpy as np\nimport torch as th\nimport torch.distributed as dist\n\n\ndef create_named_schedule_sampler(name, diffusion):\n    \"\"\"\n    Create a ScheduleSampler from a library of pre-defined samplers.\n    :param name: the name of the sampler.\n    :param diffusion: the diffusion object to sample for.\n    \"\"\"\n    if name == \"uniform\":\n        return UniformSampler(diffusion)\n    elif name == \"loss-second-moment\":\n        return LossSecondMomentResampler(diffusion)\n    else:\n        raise NotImplementedError(f\"unknown schedule sampler: {name}\")\n\n\nclass ScheduleSampler(ABC):\n    \"\"\"\n    A distribution over timesteps in the diffusion process, intended to reduce\n    variance of the objective.\n    By default, samplers perform unbiased importance sampling, in which the\n    objective's mean is unchanged.\n    However, subclasses may override sample() to change how the resampled\n    terms are reweighted, allowing for actual changes in the objective.\n    \"\"\"\n\n    @abstractmethod\n    def weights(self):\n        \"\"\"\n        Get a numpy array of weights, one per diffusion step.\n        The weights needn't be normalized, but must be positive.\n        \"\"\"\n\n    def sample(self, batch_size, device):\n        \"\"\"\n        Importance-sample timesteps for a batch.\n        :param batch_size: the number of timesteps.\n        :param device: the torch device to save to.\n        :return: a tuple (timesteps, weights):\n                 - timesteps: a tensor of timestep indices.\n                 - weights: a tensor of weights to scale the resulting losses.\n        \"\"\"\n        w = self.weights()\n        p = w / np.sum(w)\n        indices_np = np.random.choice(len(p), size=(batch_size,), p=p)\n        indices = th.from_numpy(indices_np).long().to(device)\n        weights_np = 1 / (len(p) * p[indices_np])\n        weights = th.from_numpy(weights_np).float().to(device)\n        return indices, weights\n\n\nclass UniformSampler(ScheduleSampler):\n    def __init__(self, diffusion):\n        self.diffusion = diffusion\n        self._weights = np.ones([diffusion.num_timesteps])\n\n    def weights(self):\n        return self._weights\n\n\nclass LossAwareSampler(ScheduleSampler):\n    def update_with_local_losses(self, local_ts, local_losses):\n        \"\"\"\n        Update the reweighting using losses from a model.\n        Call this method from each rank with a batch of timesteps and the\n        corresponding losses for each of those timesteps.\n        This method will perform synchronization to make sure all of the ranks\n        maintain the exact same reweighting.\n        :param local_ts: an integer Tensor of timesteps.\n        :param local_losses: a 1D Tensor of losses.\n        \"\"\"\n        batch_sizes = [\n            th.tensor([0], dtype=th.int32, device=local_ts.device)\n            for _ in range(dist.get_world_size())\n        ]\n        dist.all_gather(\n            batch_sizes,\n            th.tensor([len(local_ts)], dtype=th.int32, device=local_ts.device),\n        )\n\n        # Pad all_gather batches to be the maximum batch size.\n        batch_sizes = [x.item() for x in batch_sizes]\n        max_bs = max(batch_sizes)\n\n        timestep_batches = [th.zeros(max_bs).to(local_ts) for bs in batch_sizes]\n        loss_batches = [th.zeros(max_bs).to(local_losses) for bs in batch_sizes]\n        dist.all_gather(timestep_batches, local_ts)\n        dist.all_gather(loss_batches, local_losses)\n        timesteps = [\n            x.item() for y, bs in zip(timestep_batches, batch_sizes) for x in y[:bs]\n        ]\n        losses = [x.item() for y, bs in zip(loss_batches, batch_sizes) for x in y[:bs]]\n        self.update_with_all_losses(timesteps, losses)\n\n    @abstractmethod\n    def update_with_all_losses(self, ts, losses):\n        \"\"\"\n        Update the reweighting using losses from a model.\n        Sub-classes should override this method to update the reweighting\n        using losses from the model.\n        This method directly updates the reweighting without synchronizing\n        between workers. It is called by update_with_local_losses from all\n        ranks with identical arguments. Thus, it should have deterministic\n        behavior to maintain state across workers.\n        :param ts: a list of int timesteps.\n        :param losses: a list of float losses, one per timestep.\n        \"\"\"\n\n\nclass LossSecondMomentResampler(LossAwareSampler):\n    def __init__(self, diffusion, history_per_term=10, uniform_prob=0.001):\n        self.diffusion = diffusion\n        self.history_per_term = history_per_term\n        self.uniform_prob = uniform_prob\n        self._loss_history = np.zeros(\n            [diffusion.num_timesteps, history_per_term], dtype=np.float64\n        )\n        self._loss_counts = np.zeros([diffusion.num_timesteps], dtype=np.int)\n\n    def weights(self):\n        if not self._warmed_up():\n            return np.ones([self.diffusion.num_timesteps], dtype=np.float64)\n        weights = np.sqrt(np.mean(self._loss_history ** 2, axis=-1))\n        weights /= np.sum(weights)\n        weights *= 1 - self.uniform_prob\n        weights += self.uniform_prob / len(weights)\n        return weights\n\n    def update_with_all_losses(self, ts, losses):\n        for t, loss in zip(ts, losses):\n            if self._loss_counts[t] == self.history_per_term:\n                # Shift out the oldest loss term.\n                self._loss_history[t, :-1] = self._loss_history[t, 1:]\n                self._loss_history[t, -1] = loss\n            else:\n                self._loss_history[t, self._loss_counts[t]] = loss\n                self._loss_counts[t] += 1\n\n    def _warmed_up(self):\n        return (self._loss_counts == self.history_per_term).all()"
  },
  {
    "path": "third_party/Wavelet-Generation/models/network.py",
    "content": "import torch\nimport torch.nn.functional as F\nimport numpy as np\nimport copy\nimport pywt\nfrom spconv.core import AlgoHint, ConvAlgo\nimport spconv.pytorch as spconv\nfrom spconv.pytorch.hash import HashTable\nfrom models.module.dwt_utils import prep_filt_sfb3d, prep_filt_afb3d\nfrom models.module.diffusion_network import UNetModel, MyUNetModel\n\ndevice = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')\n\n\"\"\"\nUtility function for computing output of convolutions\ntakes a tuple of (h,w) and returns a tuple of (h,w)\n\"\"\"\ndef conv_output_shape(input_size, kernel_size=1, stride=1, pad=0):\n    from math import floor, ceil\n    h = floor( ((input_size + (2 * pad) - kernel_size )/ stride) + 1)\n    return h\n\ndef indices_to_key(keys, spatial_size, delta = 50): # HACK\n    new_keys = keys[:, 3] + keys[:, 2] * (spatial_size[-1]+delta) + keys[:, 1] * (spatial_size[-1]+delta) * (spatial_size[-2]+delta) + \\\n    keys[:, 0] * (spatial_size[-1]+delta) * (spatial_size[-2]+delta) * (spatial_size[-3]+delta)\n\n    return new_keys\ndef create_coordinates(resolution, feature_dim = 1):\n    dimensions_samples = np.linspace(0, resolution - 1, resolution)\n\n    if feature_dim > 1:\n        feature_samples = np.arange(feature_dim)\n        d, x, y, z = np.meshgrid(feature_samples, dimensions_samples, dimensions_samples, dimensions_samples)\n        d, x, y, z = np.swapaxes(d[:, :, :, :, np.newaxis], 0, 1),\\\n                     np.swapaxes(x[:, :, :, :, np.newaxis], 0, 1),\\\n                     np.swapaxes(y[:, :, :, :, np.newaxis], 0, 1),\\\n                     np.swapaxes(z[:, :, :, :, np.newaxis], 0, 1)\n        coordinates = np.concatenate((d, x, y, z), axis=4)\n        coordinates = torch.from_numpy(coordinates).float().unsqueeze(0).cuda(device)\n        return coordinates\n    else:\n        x, y, z = np.meshgrid(dimensions_samples, dimensions_samples, dimensions_samples)\n        x, y, z = x[:, :, :, np.newaxis], y[:, :, :, np.newaxis], z[:, :, :, np.newaxis]\n        coordinates = np.concatenate((x, y, z), axis=3)\n        coordinates = torch.from_numpy(coordinates).float().unsqueeze(0).cuda(device)\n        return coordinates\n\nclass DummyLayer(torch.nn.Module):\n    def __init__(self):\n        super(DummyLayer, self).__init__()\n    def forward(self, x):\n        return x\n\n\n\nclass NearestUpsample3D(torch.nn.Module):\n    def __init__(self, upsample_ratio):\n        super().__init__()\n        self.upsample_ratio = upsample_ratio\n\n    def forward(self, x):\n        x = F.interpolate(x, scale_factor=self.upsample_ratio, mode='nearest')\n        return x\n\nclass DownSampleConv3D(torch.nn.Module):\n    def __init__(self, input_dim, output_dim, spatial_size, config):\n        super().__init__()\n        self.config = config\n        self.layers = torch.nn.ModuleList()\n        self.activation = self.config.activation\n\n        current_dim = input_dim\n\n        feature_size = spatial_size\n        for layer_dim, kernel_size, stride in self.config.conv3d_downsample_tuple_layers:\n            layer_list = []\n\n            if stride[0] == 1:\n                conv_layer = torch.nn.Conv3d(in_channels=current_dim, out_channels=layer_dim,\n                                kernel_size=kernel_size, padding='same')\n            else:\n                conv_layer = torch.nn.Conv3d(in_channels=current_dim, out_channels=layer_dim,\n                                kernel_size=kernel_size, stride=stride)\n            layer_list.append(conv_layer)\n\n            if stride[0] != 1:\n                feature_size = conv_output_shape(feature_size, kernel_size[0], stride[0], pad=0)\n\n            if self.config.use_instance_norm:\n                norm_layer = torch.nn.InstanceNorm3d(layer_dim, affine=self.config.use_instance_affine)\n                layer_list.append(norm_layer)\n            if self.config.use_layer_norm:\n                norm_layer = torch.nn.LayerNorm([layer_dim, feature_size, feature_size, feature_size],\n                                                elementwise_affine=self.config.use_layer_affine)\n                layer_list.append(norm_layer)\n\n\n\n            new_layer = torch.nn.Sequential(\n                *layer_list\n            )\n\n            self.layers.append(new_layer)\n            current_dim = layer_dim\n\n        for layer in self.layers:\n            if isinstance(layer, torch.nn.Sequential):\n                for sublayer in layer:\n                    if hasattr(sublayer, 'weight') and hasattr(sublayer, 'bias') and not isinstance(sublayer, torch.nn.InstanceNorm3d) and \\\n                        not isinstance(sublayer, torch.nn.LayerNorm):\n                        torch.nn.init.normal_(sublayer.weight, mean=0.0, std=config.weight_sigma)\n                        torch.nn.init.constant_(sublayer.bias, 0)\n            else:\n                torch.nn.init.normal_(layer.weight, mean=0.0, std=config.weight_sigma)\n                torch.nn.init.constant_(layer.bias, 0)\n\n        ### last layer\n        self.last_layer = torch.nn.Conv3d(in_channels=current_dim, out_channels=output_dim, kernel_size=(1,1,1), stride=(1,1,1))\n\n        torch.nn.init.normal_(self.last_layer.weight, mean=0.0, std=config.weight_sigma)\n        torch.nn.init.constant_(self.last_layer.bias, 0)\n\n\n    def forward(self, input_features):\n\n        x = input_features\n        batch_size = x.size(0)\n\n        for layer in self.layers:\n            x = layer(x)\n            x = self.activation(x)\n\n        x = self.last_layer(x)\n\n        x = F.adaptive_avg_pool3d(x, (1, 1, 1))\n        x = x.view((batch_size, -1))\n\n        return x\n\nclass Conv3DHigh(torch.nn.Module):\n    def __init__(self, input_dim, output_dim, level, config):\n        super().__init__()\n        self.config = config\n        self.desne_layers = torch.nn.ModuleList()\n        self.layers = torch.nn.ModuleList()\n        self.activation = self.config.activation\n\n        current_dim = input_dim\n        for layer_dim in self.config.conv3d_dense_layers:\n            new_layer = torch.nn.Linear(current_dim, layer_dim)\n            self.desne_layers.append(new_layer)\n            current_dim = layer_dim\n        self.desne_layers.append(torch.nn.Linear(current_dim, self.config.conv3d_latent_dim))\n\n\n        ### conv3d layers\n        current_dim = self.config.conv3d_latent_dim // 8\n\n        feature_size = 2\n        conv3d_tuple_layers = copy.deepcopy(self.config.conv3d_tuple_layers)\n        for i in range(self.config.max_depth - level):\n            conv3d_tuple_layers.extend(copy.deepcopy(self.config.conv3d_tuple_layers_highs_append))\n\n        for layer_dim, kernel_size, stride in conv3d_tuple_layers:\n            if self.config.conv3d_use_upsample:\n\n                if stride[0] > 1:\n                    layer_list = [NearestUpsample3D(stride)]\n                else:\n                    layer_list = []\n                layer_list.append(torch.nn.Conv3d(in_channels=current_dim, out_channels=layer_dim,\n                                    kernel_size=kernel_size, padding = 'same'))\n                feature_size = int(feature_size * stride[0])\n                if self.config.use_instance_norm:\n                    norm_layer = torch.nn.InstanceNorm3d(layer_dim, affine=self.config.use_instance_affine)\n                    layer_list.append(norm_layer)\n                if self.config.use_layer_norm:\n                    norm_layer = torch.nn.LayerNorm([layer_dim, feature_size, feature_size, feature_size], elementwise_affine=self.config.use_layer_affine)\n                    layer_list.append(norm_layer)\n\n                new_layer = torch.nn.Sequential(\n                    *layer_list\n                )\n\n            else:\n                new_layer = torch.nn.ConvTranspose3d(in_channels=current_dim, out_channels=layer_dim,\n                                                     kernel_size=kernel_size,\n                                                     stride=stride)\n            self.layers.append(new_layer)\n            current_dim = layer_dim\n\n        ### last layer\n        self.last_layer = torch.nn.Conv3d(in_channels=current_dim, out_channels=output_dim, kernel_size=(1,1,1), stride=(1,1,1))\n\n        ### layer initialization\n        for layer in self.desne_layers:\n            torch.nn.init.normal_(layer.weight, mean=0.0, std=config.weight_sigma)\n            torch.nn.init.constant_(layer.bias, 0)\n\n        for layer in self.layers:\n            if isinstance(layer, torch.nn.Sequential):\n                for sublayer in layer:\n                    if hasattr(sublayer, 'weight') and hasattr(sublayer, 'bias') and not isinstance(sublayer, torch.nn.InstanceNorm3d) and \\\n                        not isinstance(sublayer, torch.nn.LayerNorm):\n                        torch.nn.init.normal_(sublayer.weight, mean=0.0, std=config.weight_sigma)\n                        torch.nn.init.constant_(sublayer.bias, 0)\n            else:\n                torch.nn.init.normal_(layer.weight, mean=0.0, std=config.weight_sigma)\n                torch.nn.init.constant_(layer.bias, 0)\n\n        torch.nn.init.normal_(self.last_layer.weight, mean=0.0, std=config.weight_sigma)\n        torch.nn.init.constant_(self.last_layer.bias, 0)\n\n\n\n    def forward(self, codes, spatial_shape):\n\n        ## transform and reshape\n        batch_size = codes.size(0)\n        x = codes\n        for layer in self.desne_layers:\n            x = layer(x)\n            x = self.activation(x)\n\n        ## re shape\n        x = x.view(batch_size, -1, 2, 2, 2)\n\n        ## upsamples\n        for layer in self.layers:\n            x = layer(x)\n            x = self.activation(x)\n\n        ##  last layer\n        x = self.last_layer(x)\n\n        low_bound = x.size(2) // 2 - spatial_shape[0] // 2, x.size(3) // 2 - spatial_shape[1] // 2, x.size(4) // 2 - spatial_shape[2] // 2\n        delta = spatial_shape[0] % 2, spatial_shape[1] % 2, spatial_shape[2] % 2\n        high_bound = x.size(2) // 2 + spatial_shape[0] // 2 + delta[0], x.size(3) // 2 + spatial_shape[1] // 2 + delta[1], x.size(4) // 2 + spatial_shape[2] // 2 + delta[2]\n        x = x[:, :, low_bound[0]:high_bound[0], low_bound[1]:high_bound[1], low_bound[2]:high_bound[2]]\n\n        return x\n\nclass Conv3D(torch.nn.Module):\n    def __init__(self, input_dim, output_dim, config):\n        super().__init__()\n        self.config = config\n        self.desne_layers = torch.nn.ModuleList()\n        self.layers = torch.nn.ModuleList()\n        self.activation = self.config.activation\n\n        current_dim = input_dim\n        for layer_dim in self.config.conv3d_dense_layers:\n            new_layer = torch.nn.Linear(current_dim, layer_dim)\n            self.desne_layers.append(new_layer)\n            current_dim = layer_dim\n        self.desne_layers.append(torch.nn.Linear(current_dim, self.config.conv3d_latent_dim))\n\n\n        ### conv3d layers\n        current_dim = self.config.conv3d_latent_dim // 8\n\n        feature_size = 2\n        if hasattr(self.config, 'conv3d_tuple_layers'):\n            for layer_dim, kernel_size, stride in self.config.conv3d_tuple_layers:\n                if hasattr(self.config, 'conv3d_use_upsample') and self.config.conv3d_use_upsample:\n\n                    layer_list = [ NearestUpsample3D(stride),\n                        torch.nn.Conv3d(in_channels=current_dim, out_channels=layer_dim,\n                                        kernel_size=kernel_size, padding = 'same')]\n                    feature_size *= stride[0]\n                    if self.config.use_instance_norm:\n                        norm_layer = torch.nn.InstanceNorm3d(layer_dim, affine=self.config.use_instance_affine)\n                        layer_list.append(norm_layer)\n                    if self.config.use_layer_norm:\n                        norm_layer = torch.nn.LayerNorm([layer_dim, feature_size, feature_size, feature_size], elementwise_affine=self.config.use_layer_affine)\n                        layer_list.append(norm_layer)\n\n                    new_layer = torch.nn.Sequential(\n                        *layer_list\n                    )\n\n                else:\n                    new_layer = torch.nn.ConvTranspose3d(in_channels=current_dim, out_channels=layer_dim,\n                                                         kernel_size=kernel_size,\n                                                         stride=stride)\n                self.layers.append(new_layer)\n                current_dim = layer_dim\n        else:\n            for layer_dim in self.config.conv3d_layers:\n                new_layer = torch.nn.ConvTranspose3d(in_channels=current_dim, out_channels=layer_dim, kernel_size=self.config.conv3d_kernel_size,\n                                                         stride = (2, 2, 2))\n                self.layers.append(new_layer)\n                current_dim = layer_dim\n\n        ### last layer\n        self.last_layer = torch.nn.Conv3d(in_channels=current_dim, out_channels=output_dim, kernel_size=(1,1,1), stride=(1,1,1))\n\n        ### layer initialization\n        for layer in self.desne_layers:\n            torch.nn.init.normal_(layer.weight, mean=0.0, std=config.weight_sigma)\n            torch.nn.init.constant_(layer.bias, 0)\n\n        for layer in self.layers:\n            if isinstance(layer, torch.nn.Sequential):\n                for sublayer in layer:\n                    if hasattr(sublayer, 'weight') and hasattr(sublayer, 'bias') and not isinstance(sublayer, torch.nn.InstanceNorm3d) and \\\n                        not isinstance(sublayer, torch.nn.LayerNorm):\n                        torch.nn.init.normal_(sublayer.weight, mean=0.0, std=config.weight_sigma)\n                        torch.nn.init.constant_(sublayer.bias, 0)\n            else:\n                torch.nn.init.normal_(layer.weight, mean=0.0, std=config.weight_sigma)\n                torch.nn.init.constant_(layer.bias, 0)\n\n        torch.nn.init.normal_(self.last_layer.weight, mean=0.0, std=config.weight_sigma)\n        torch.nn.init.constant_(self.last_layer.bias, 0)\n\n\n\n    def forward(self, codes, spatial_shape):\n\n        ## transform and reshape\n        batch_size = codes.size(0)\n        x = codes\n        for layer in self.desne_layers:\n            x = layer(x)\n            x = self.activation(x)\n\n        ## re shape\n        x = x.view(batch_size, -1, 2, 2, 2)\n\n        ## upsamples\n        for layer in self.layers:\n            x = layer(x)\n            x = self.activation(x)\n\n        ##  last layer\n        x = self.last_layer(x)\n\n        low_bound = x.size(2) // 2 - spatial_shape[0] // 2, x.size(3) // 2 - spatial_shape[1] // 2, x.size(4) // 2 - spatial_shape[2] // 2\n        delta = spatial_shape[0] % 2, spatial_shape[1] % 2, spatial_shape[2] % 2\n        high_bound = x.size(2) // 2 + spatial_shape[0] // 2 + delta[0], x.size(3) // 2 + spatial_shape[1] // 2 + delta[1], x.size(4) // 2 + spatial_shape[2] // 2 + delta[2]\n        x = x[:, :, low_bound[0]:high_bound[0], low_bound[1]:high_bound[1], low_bound[2]:high_bound[2]]\n\n        return x\n\ndef get_conv_shape(current_spatial_shape, conv_module):\n    spatial_shape_out = spconv.ops.get_conv_output_size(current_spatial_shape, kernel_size=conv_module.kernel_size, stride = conv_module.stride, padding=conv_module.padding,\n                                    dilation=conv_module.dilation)\n\n    return spatial_shape_out\n\ndef get_conv_indices(current_indices, current_spatial_shape, conv_module, batch_size):\n    indices_out = spconv.ops.get_indice_pairs(indices=current_indices, batch_size = batch_size, spatial_shape=current_spatial_shape,\n                                algo= ConvAlgo.Native, ksize=conv_module.kernel_size, stride=conv_module.stride, padding = conv_module.padding,\n                                          dilation=conv_module.dilation, out_padding = conv_module.output_padding)[0]\n    spatial_shape_out = spconv.ops.get_conv_output_size(current_spatial_shape, kernel_size=conv_module.kernel_size, stride = conv_module.stride, padding=conv_module.padding,\n                                    dilation=conv_module.dilation)\n    return indices_out, spatial_shape_out\n\ndef compute_modules(conv_dim, input_shape, h0, g0, mode):\n\n\n    assert mode in ['zero', 'constant']\n\n    N = input_shape[conv_dim]\n    L = h0.numel()\n    # Calculate the pad size\n    outsize = pywt.dwt_coeff_len(N, L, mode=mode)\n    p = 2 * (outsize - 1) - N + L\n\n    # padding for input\n    input_shape = copy.deepcopy(input_shape)\n    if p % 2 == 1:\n        input_shape[conv_dim] += 1\n\n    kernel_size = [1, 1, 1]\n    kernel_size[conv_dim] = L\n    stride = [1, 1, 1]\n    stride[conv_dim] = 2\n    pad = [0, 0, 0]\n    pad[conv_dim] = p // 2\n    conv_module = spconv.SparseConv3d(in_channels = 1, out_channels = 1, kernel_size = kernel_size,\n                                      stride= stride, padding=pad, bias = False, groups = 1).to(device)\n    conv_module.weight = torch.nn.Parameter(torch.reshape(h0 , conv_module.weight.size()).to(device), requires_grad = False)\n    pad = [0, 0, 0]\n    pad[conv_dim] = L - 2\n    inv_module = spconv.SparseConvTranspose3d(in_channels = 1, out_channels = 1, kernel_size = kernel_size,\n                                      stride= stride, padding=pad, bias = False, groups = 1).to(device)\n    #g0 = torch.flip(g0, dims = [2+conv_dim])\n    inv_module.weight = torch.nn.Parameter(torch.reshape(g0 , inv_module.weight.size()).to(device), requires_grad = False)\n\n    output_shape = get_conv_shape(input_shape, conv_module)\n\n    return output_shape, conv_module, inv_module\n\ndef initalize_modules(input_shape, max_depth, h0_dep, h0_col, h0_row, g0_dep, g0_col, g0_row, mode):\n\n\n    ## compute input_indices\n    shapes_list = [input_shape]\n    current_shape = input_shape\n    conv_modules, inv_modules = [], []\n\n    assert mode in [\"zero\", 'constant']\n\n    ## compute shapes and indices\n    for i in range(max_depth):\n        current_shape, conv_module_row, inv_module_row = compute_modules(conv_dim = 2, input_shape = current_shape, h0=h0_row, g0 = g0_row, mode = mode)\n        current_shape, conv_module_col, inv_module_col = compute_modules(conv_dim = 1, input_shape = current_shape, h0=h0_col, g0 = g0_col, mode = mode)\n        current_shape, conv_module_dep, inv_module_dep = compute_modules(conv_dim = 0, input_shape = current_shape, h0=h0_dep, g0 = g0_dep, mode = mode)\n        shapes_list.append(current_shape)\n        conv_modules.append([conv_module_row, conv_module_col, conv_module_dep])\n        inv_modules.append([inv_module_dep, inv_module_col, inv_module_row])\n\n    return shapes_list, conv_modules, inv_modules\n\nclass SparseComposer(torch.nn.Module):\n    def __init__(self, input_shape, J=1, wave='db1', mode='zero', inverse_dwt_module = None):\n        super().__init__()\n        self.inverse_dwt_module = inverse_dwt_module\n        if isinstance(wave, str):\n            wave = pywt.Wavelet(wave)\n        if isinstance(wave, pywt.Wavelet):\n            h0_col, h1_col = wave.dec_lo, wave.dec_hi\n            h0_row, h1_row = h0_col, h1_col\n            h0_dep, h1_dep = h0_col, h1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_afb3d(h0_dep, h1_dep, h0_col, h1_col, h0_row, h1_row)\n        self.register_buffer('h0_dep', filts[0])\n        self.register_buffer('h1_dep', filts[1])\n        self.register_buffer('h0_col', filts[2])\n        self.register_buffer('h1_col', filts[3])\n        self.register_buffer('h0_row', filts[4])\n        self.register_buffer('h1_row', filts[5])\n        self.J = J\n        self.mode = mode\n        self.input_shape = input_shape\n\n        ## Need for inverse\n        if isinstance(wave, pywt.Wavelet):\n            g0_col, g1_col = wave.rec_lo, wave.rec_hi\n            g0_row, g1_row = g0_col, g1_col\n            g0_dep, g1_dep = g0_col, g1_col\n\n\n        # Prepare the filters\n        filts = prep_filt_sfb3d(g0_dep, g1_dep, g0_col, g1_col, g0_row, g1_row)\n        self.register_buffer('g0_dep', filts[0])\n        self.register_buffer('g1_dep', filts[1])\n        self.register_buffer('g0_col', filts[2])\n        self.register_buffer('g1_col', filts[3])\n        self.register_buffer('g0_row', filts[4])\n        self.register_buffer('g1_row', filts[5])\n\n        ### initalize module\n        self.shape_list, self.conv_modules, self.inv_modules = initalize_modules(input_shape = input_shape, max_depth = self.J,\n                          h0_dep = self.h0_dep, h0_col = self.h0_col, h0_row = self.h0_row,\n                          g0_dep = self.g0_dep, g0_col = self.g0_col, g0_row = self.g0_row,\n                          mode = self.mode)\n\n\n    def forward(self, input_indices, weight_func, **kwargs):\n\n        batch_size, indices_list = self.extract_indcies_list(input_indices)\n\n        ### compute the features from bottom-up\n        if self.inverse_dwt_module is None:\n            current_coeff = None\n            for i in range(self.J)[::-1]:\n                kwargs['spatial_shape'] = self.shape_list[i+1]\n                output_coeff = weight_func(indices = indices_list[i+1], level = i+1, **kwargs)\n\n                ### add with previous layer\n                if current_coeff is not None:\n                    current_coeff = current_coeff.unsqueeze(1) + output_coeff\n                else:\n                    current_coeff = output_coeff\n\n                current_coeff = spconv.SparseConvTensor(features = current_coeff, indices = indices_list[i+1],\n                                        spatial_shape = self.shape_list[i+1], batch_size=batch_size)\n\n\n\n                ### perform idwf\n                current_coeff = self.inv_modules[i][0](current_coeff)\n                current_coeff = self.inv_modules[i][1](current_coeff)\n                current_coeff = self.inv_modules[i][2](current_coeff)\n\n                ### retrived only useful coeff\n                table = HashTable(device, torch.int32, torch.float32, max_size=current_coeff.indices.size(0) * 2)\n                coeff_indices, query_indices = indices_to_key(current_coeff.indices, spatial_size=current_coeff.spatial_shape),\\\n                                               indices_to_key(indices_list[i], spatial_size=current_coeff.spatial_shape)\n\n\n                table.insert(coeff_indices, current_coeff.features)\n                current_coeff, isempty = table.query(query_indices)\n\n                assert sum(isempty) == 0\n\n            kwargs['spatial_shape'] = self.shape_list[0]\n            output_coeff = weight_func(indices=indices_list[0], level= 0, **kwargs)\n            final_coeff = current_coeff.unsqueeze(1) + output_coeff\n        else:\n            final_coeff = None\n            low, highs = None, []\n            for i in range(self.J)[::-1]:\n                kwargs['spatial_shape'] = self.shape_list[i+1]\n                output_coeff = weight_func(indices = indices_list[i+1], level = i+1, **kwargs)\n                current_coeff = spconv.SparseConvTensor(features = output_coeff, indices = indices_list[i+1],\n                                        spatial_shape = self.shape_list[i+1], batch_size=batch_size)\n                dense_coeff = current_coeff.dense(channels_first = True)\n                if i+1 == self.J:\n                    low = dense_coeff\n                else:\n                    highs = [dense_coeff] + highs\n\n            ## last layers\n            kwargs['spatial_shape'] = self.shape_list[0]\n            output_coeff = weight_func(indices=indices_list[0], level=0, **kwargs)\n            current_coeff = spconv.SparseConvTensor(features=output_coeff, indices=indices_list[0],\n                                                    spatial_shape=self.shape_list[0], batch_size=batch_size)\n            dense_coeff = current_coeff.dense(channels_first=True)\n            highs = [dense_coeff] + highs\n\n            final_coeff = self.inverse_dwt_module((low, highs))\n            indices_long = indices_list[0].long()\n            final_coeff = final_coeff[indices_long[:, 0], 0, indices_long[:, 1], indices_long[:, 2], indices_long[:, 3]].unsqueeze(1)\n\n        return final_coeff\n\n    def extract_indcies_list(self, input_indices):\n        ## prepare the indices\n        batch_size = input_indices.size(0)\n        sample_num = input_indices.size(1)\n        batch_indices = torch.arange(0, batch_size).int()\n        batch_indices = batch_indices.unsqueeze(1).repeat((1, sample_num)).view((-1, 1)).to(device)\n        input_indices = input_indices.view((-1, 3))\n        current_indices = torch.cat((batch_indices, input_indices), dim=-1)\n        ## compute the indices for each level\n        indices_list = [current_indices]\n        current_shape = self.input_shape\n        for i in range(self.J):\n            current_indices, current_shape = get_conv_indices(current_indices=current_indices,\n                                                              current_spatial_shape=current_shape,\n                                                              conv_module=self.conv_modules[i][0],\n                                                              batch_size=batch_size)\n            current_indices, current_shape = get_conv_indices(current_indices=current_indices,\n                                                              current_spatial_shape=current_shape,\n                                                              conv_module=self.conv_modules[i][1],\n                                                              batch_size=batch_size)\n            current_indices, current_shape = get_conv_indices(current_indices=current_indices,\n                                                              current_spatial_shape=current_shape,\n                                                              conv_module=self.conv_modules[i][2],\n                                                              batch_size=batch_size)\n            indices_list.append(current_indices)\n        return batch_size, indices_list\n\n\nif __name__ == \"__main__\":\n\n    from configs import config\n    from models.module.dwt import DWTForward3d, DWTInverse3d\n\n\n    module = spconv.SparseConvTranspose3d(1, 1, (16, 1, 1), stride = (2, 1, 1), groups= 1, indice_key= 'spconv3').to(device)\n    module_2 = spconv.SparseConvTranspose3d(1, 1, (1, 16, 1), stride = (1, 2, 1), groups= 1).to(device)\n    module_3 = spconv.SparseConvTranspose3d(1, 1, (1, 1, 16), stride = (1, 1, 2), groups= 1).to(device)\n    module.weight = torch.nn.Parameter(torch.zeros_like(module.weight), requires_grad = False)\n    #print(module.weight)\n    print(module.weight.size())\n\n    resolution = 64\n\n    features =  torch.zeros(resolution * resolution * resolution, 1).to(device)# your features with shape [N, num_channels]\n    indices =  create_coordinates(resolution,  1).view(-1, 3).int().to(device)# your indices/coordinates with shape [N, ndim + 1], batch index must be put in indices[:, 0]\n    indices = torch.cat((torch.zeros((indices.size(0), 1), dtype = torch.int32).to(device),indices), dim = -1)\n    spatial_shape =  [resolution, resolution, resolution]# spatial shape of your sparse tensor, spatial_shape[i] is shape of indices[:, 1 + i].\n    batch_size = 1 # batch size of your sparse tensor.\n    x = spconv.SparseConvTensor(features, indices, spatial_shape, batch_size)\n\n    #print(x)\n    #print(indices)\n    #print(x_dense_NCHW.size())\n\n    x_out = module(x)\n    inverse_module = spconv.SparseInverseConv3d(1, 1, (16, 1, 1), indice_key = 'spconv3').to(device)\n    x_out_inverse = inverse_module(x_out)\n    print(x_out)\n    print(x_out.indices.size())\n\n    table = HashTable(device, torch.int32, torch.float, max_size=x_out.indices.size(0) * 2)\n    table.insert(x_out.indices,x_out.features)\n\n    vq, _ = table.query(x_out.indices)\n    print(vq)\n    print(x_out.spatial_shape)\n\n    indices_conv = spconv.ops.get_indice_pairs(indices=x.indices, batch_size = 1, spatial_shape=x.spatial_shape,\n                                algo= ConvAlgo.Native, ksize=module.kernel_size, stride=module.stride, padding = module.padding,\n                                          dilation=module.dilation, out_padding = module.output_padding)\n    print(indices_conv)\n    x_output_size = spconv.ops.get_conv_output_size(x.spatial_shape, kernel_size=module.kernel_size, stride = module.stride, padding=module.padding,\n                                    dilation=module.dilation)\n    print(x_output_size)\n\n\n\n\n\n    #dwt_forward_3d = DWTForward3d(J = config.max_depth, wave=config.wavelet, mode=config.padding_mode).to(device)\n    #dwt_inverse_3d = DWTInverse3d(J = config.max_depth, wave=config.wavelet, mode=config.padding_mode).to(device)\n    #network = MultiScaleMLP(config = config, data_num = 1, dwt_module = dwt_forward_3d, inverse_dwt_module = dwt_inverse_3d).to(device)\n\n    #indices = torch.from_numpy(np.arange(1)).to(device)\n    #output = network(indices)\n"
  },
  {
    "path": "third_party/Wavelet-Generation/models/network_gen.py",
    "content": "import os\r\nimport importlib\r\nimport torch\r\nimport numpy as np\r\nimport mcubes\r\nimport torch.nn.functional as F\r\nfrom models.network import SparseComposer\r\nfrom models.module.dwt import DWTInverse3d_Laplacian, DWTForward3d_Laplacian\r\nfrom models.module.gaussian_diffusion import GaussianDiffusion, get_named_beta_schedule, SpacedDiffusion, space_timesteps\r\nfrom utils.debugger import MyDebugger\r\nfrom models.module.diffusion_network import UNetModel, MyUNetModel\r\nimport time\r\ndef process_state_dict(network_state_dict):\r\n    for key, item in list(network_state_dict.items()):\r\n        if 'module.' in key:\r\n            new_key = key.replace('module.', '')\r\n            network_state_dict[new_key] = item\r\n            del network_state_dict[key]\r\n\r\n    return network_state_dict\r\n\r\n\r\n\r\n\r\n## setting for testing\r\nconfig_folder = os.path.join('configs')\r\nconfig_path = os.path.join(config_folder, 'config.py')\r\nspec = importlib.util.spec_from_file_location('*', config_path)\r\nconfig = importlib.util.module_from_spec(spec)\r\nspec.loader.exec_module(config)\r\n\r\nhigh_level_config_path = os.path.join(config_folder, 'config_highs.py')\r\nspec = importlib.util.spec_from_file_location('*', high_level_config_path)\r\nhigh_level_config = importlib.util.module_from_spec(spec)\r\nspec.loader.exec_module(high_level_config)\r\n\r\ntesting_cnt = 201 ## testing cnt\r\nclip_noise = False\r\nuse_ddim = False\r\nddim_eta = 1.0\r\nrespacing = [config.diffusion_step // 10]\r\n\r\n\r\n### Setting of Diffusion Models\r\ndiffusion_folder = r'pretrain/pretrained/airplane/' # put the category\r\nepoch = 3980 # diffusion model epoch number\r\ntest_index = config.training_stage\r\nnetwork_path = os.path.join(diffusion_folder, f'model_epoch_{test_index}_{epoch}.pth')\r\n\r\n### setting for detail predictor\r\nhigh_level_folder = r'pretrain/pretrained/airplane/highs' # put the category\r\nhigh_level_epoch = 240 # detail predictor model epoch number\r\nhigh_test_index = high_level_config.training_stage\r\nhigh_level_network_path =  os.path.join(high_level_folder, f'model_epoch_{high_test_index}_{high_level_epoch}.pth')\r\n\r\n\r\n\r\n\r\n### debugger\r\nfrom configs import config as current_config\r\n\r\n\r\n\r\n\r\n\r\ndef one_generation_process(args):\r\n\r\n    cuda_id, start_index, testing_cnt, folder_path = args\r\n    device = torch.device(f'cuda:{cuda_id}')\r\n\r\n    ### level_indices_remap\r\n    level_map = {0 : 3, 1 : 2}\r\n\r\n    with torch.no_grad():\r\n        ### initialize network\r\n        dwt_inverse_3d_lap = DWTInverse3d_Laplacian(J=config.max_depth, wave=config.wavelet, mode=config.padding_mode).to(\r\n            device)\r\n        dwt_forward_3d_lap = DWTForward3d_Laplacian(J=config.max_depth, wave=config.wavelet, mode=config.padding_mode).to(\r\n            device)\r\n        composer_parms = dwt_inverse_3d_lap if config.use_dense_conv else None\r\n        dwt_sparse_composer = SparseComposer(input_shape=[config.resolution, config.resolution, config.resolution],\r\n                                             J=config.max_depth,\r\n                                             wave=config.wavelet, mode=config.padding_mode,\r\n                                             inverse_dwt_module=composer_parms).to(\r\n            device)\r\n        network = UNetModel(in_channels=1,\r\n                            model_channels=config.unet_model_channels,\r\n                            out_channels=2 if hasattr(config,\r\n                                                      'diffusion_learn_sigma') and config.diffusion_learn_sigma else 1,\r\n                            num_res_blocks=config.unet_num_res_blocks,\r\n                            channel_mult=config.unet_channel_mult_low,\r\n                            attention_resolutions=config.attention_resolutions,\r\n                            dropout=0,\r\n                            dims=3,\r\n                            activation=config.unet_activation if hasattr(config, 'unet_activation') else None)\r\n\r\n        network_state_dict = torch.load(network_path,map_location=f'cuda:{cuda_id}')\r\n        network_state_dict = process_state_dict(network_state_dict)\r\n\r\n        network.load_state_dict(network_state_dict)\r\n        network = network.to(device)\r\n        network.eval()\r\n\r\n        high_level_network = MyUNetModel(in_channels= 1,\r\n                            spatial_size= dwt_sparse_composer.shape_list[high_level_config.training_stage][0],\r\n                            model_channels=high_level_config.unet_model_channels,\r\n                            out_channels= 1,\r\n                            num_res_blocks=high_level_config.unet_num_res_blocks,\r\n                            channel_mult=high_level_config.unet_channel_mult,\r\n                            attention_resolutions=high_level_config.attention_resolutions,\r\n                            dropout=0,\r\n                            dims=3)\r\n        high_level_network_state_dict = torch.load(high_level_network_path, map_location=f'cuda:{cuda_id}')\r\n        high_level_network_state_dict = process_state_dict(high_level_network_state_dict)\r\n        high_level_network.load_state_dict(high_level_network_state_dict)\r\n        high_level_network = high_level_network.to(device)\r\n        high_level_network.eval()\r\n\r\n\r\n        betas = get_named_beta_schedule(config.diffusion_beta_schedule, config.diffusion_step,\r\n                                        config.diffusion_scale_ratio)\r\n\r\n        diffusion_module = SpacedDiffusion(use_timesteps=space_timesteps(config.diffusion_step, respacing),\r\n                                           betas=betas,\r\n                                           model_var_type=config.diffusion_model_var_type,\r\n                                           model_mean_type=config.diffusion_model_mean_type,\r\n                                           loss_type=config.diffusion_loss_type)\r\n\r\n        testing_indices = [265] * testing_cnt\r\n        noise = None\r\n\r\n\r\n        for m in range(testing_cnt):\r\n            testing_sample_index = testing_indices[m]\r\n\r\n            low_lap = torch.zeros(tuple([1, 1] + dwt_sparse_composer.shape_list[config.max_depth])).float().to(\r\n                device)\r\n            highs_lap = [torch.zeros(tuple([1, 1] + dwt_sparse_composer.shape_list[j])).float().to(device) \\\r\n                         for j in range(config.max_depth)]\r\n\r\n            model_kwargs = {'noise_save_path': os.path.join(folder_path, f'{m+start_index}_{testing_sample_index}_noise.pt')}\r\n            if use_ddim:\r\n                low_samples = diffusion_module.ddim_sample_loop(model=network,\r\n                                                                shape=[1, 1] + dwt_sparse_composer.shape_list[-1],\r\n                                                                device=device,\r\n                                                                clip_denoised=clip_noise, progress=True,\r\n                                                                noise=noise,\r\n                                                                eta=ddim_eta,\r\n                                                                model_kwargs=model_kwargs).detach()\r\n            else:\r\n                low_samples = diffusion_module.p_sample_loop(model=network,\r\n                                                             shape=[1, 1] + dwt_sparse_composer.shape_list[-1],\r\n                                                             device=device,\r\n                                                             clip_denoised=clip_noise, progress=True, noise=noise,\r\n                                                             model_kwargs=model_kwargs).detach()\r\n\r\n            highs_samples = [torch.zeros(tuple([1, 1] + dwt_sparse_composer.shape_list[i]), device=device) for i in\r\n                             range(config.max_depth)]\r\n\r\n            upsampled_low = F.interpolate(low_samples, size=tuple(dwt_sparse_composer.shape_list[high_test_index]))\r\n            highs_samples[high_test_index] = high_level_network(upsampled_low)\r\n\r\n\r\n            voxels_pred = dwt_inverse_3d_lap((low_samples, highs_samples))\r\n            vertices, traingles = mcubes.marching_cubes(voxels_pred.detach().cpu().numpy()[0, 0], 0.0)\r\n            vertices = (vertices.astype(np.float32) - 0.5) / config.resolution - 0.5\r\n            mcubes.export_obj(vertices, traingles, os.path.join(folder_path, f'{m+start_index}_{testing_sample_index}.obj'))\r\n\r\n            print(f\"Done {os.path.join(folder_path,f'{m+start_index}_{testing_sample_index}.off')}!\")\r\n\r\nif __name__ == '__main__':\r\n\r\n    debugger = MyDebugger(f'Network-Marching-Cubes-Diffusion-Gen',\r\n                          is_save_print_to_file=False)\r\n\r\n    from torch.multiprocessing import Pool\r\n\r\n    GPU_CNT = 1\r\n    PER_GPU_PROCESS = 1\r\n    pool = Pool(GPU_CNT * PER_GPU_PROCESS)\r\n\r\n\r\n    args = []\r\n    assert testing_cnt % (GPU_CNT * PER_GPU_PROCESS) == 0\r\n    if GPU_CNT * PER_GPU_PROCESS > 1:\r\n        per_process_data_num = testing_cnt // (GPU_CNT * PER_GPU_PROCESS)\r\n        for i in range(GPU_CNT):\r\n            for j in range(PER_GPU_PROCESS):\r\n                args.append((i, (i * PER_GPU_PROCESS + j) * per_process_data_num, per_process_data_num, debugger.file_path('.')))\r\n\r\n        pool.map(one_generation_process, args)\r\n    else:\r\n        one_generation_process((0, 0, testing_cnt,  debugger.file_path('.')))\r\n\r\n    print(\"done!\")\r\n\r\n"
  },
  {
    "path": "third_party/Wavelet-Generation/trainer/inference_combined.py",
    "content": "import sys\nimport os\nfrom pathlib import Path\nfrom typing import Tuple, Dict, List, Optional\nimport time\nimport math\nimport json\nfrom datetime import datetime\nimport logging\n\n\n\n\n# Add the parent directory to sys.path to import pixie utilities\nsys.path.append(str(Path(__file__).parent.parent.parent.parent))\n\nfrom pixie.utils import resolve_paths, validate_config, load_json, save_json\nfrom pixie.training_utils import (\n    load_normalization_ranges, ddp_setup, masked_mean,\n    get_checkpoint_paths, get_latest_checkpoint_dirs, get_checkpoint,\n    compute_accuracy, load_checkpoint\n)\nfrom pixie.metrics import InferenceMetrics, generate_metrics_report\nfrom pixie.utils import set_logger\n\n# Add the Wavelet-Generation project root to PYTHONPATH\nPROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\"))\nsys.path.append(PROJECT_ROOT)\n\nimport torch\nimport numpy as np\nfrom torch.utils.data import DataLoader, DistributedSampler, Subset\nimport torch.distributed as dist\nimport torch.multiprocessing as mp\nfrom tqdm import tqdm\nimport hydra\nfrom omegaconf import DictConfig, OmegaConf\n\n\nfrom models.module.diffusion_network import MyUNetModel, UNetModel, ConditionedUNet, FeatureProjector\nfrom data_utils.my_data import MaterialVoxelDataset\nfrom training_discrete import SegmentationUNet\nfrom training_continuous_mse import RegressionUNet\nfrom pixie.utils import set_logger\n\n\n\ndef load_test_dataset(config, obj_id=None):\n    \"\"\"Load and prepare test dataset with optional filtering.\"\"\"\n    full_dataset = MaterialVoxelDataset(config)\n    \n    if obj_id:\n        # Filter for specific object\n        filtered_indices = [i for i, sample_obj_id in enumerate(full_dataset.obj_ids) \n                          if sample_obj_id == obj_id]\n        if not filtered_indices:\n            return None, f\"No data found for object ID: {obj_id}\"\n        return Subset(full_dataset, filtered_indices), None\n    \n    # Check for saved test split\n    if config.training.inference.use_saved_test_split:\n        seg_checkpoint_path = get_checkpoint_paths(config)[0]\n        test_split_fp = os.path.join(os.path.dirname(seg_checkpoint_path), \"test_set.json\")\n        assert os.path.isfile(test_split_fp), f\"Test split file not found: {test_split_fp}\"\n        saved_test_ids = set(load_json(test_split_fp))\n        filtered_indices = [i for i, oid in enumerate(full_dataset.obj_ids) \n                          if oid in saved_test_ids]\n        if filtered_indices:\n            return Subset(full_dataset, filtered_indices), None\n    \n    # Default to random split\n    train_size = int(config.training.training.train_size * len(full_dataset))\n    test_size = len(full_dataset) - train_size\n    _, test_dataset = torch.utils.data.random_split(\n        full_dataset, [train_size, test_size],\n        generator=torch.Generator().manual_seed(42)\n    )\n    return test_dataset, None\n\n\ndef create_models(config, rank):\n    \"\"\"Create and return segmentation and continuous models.\"\"\"\n    seg_network = SegmentationUNet(\n        feature_channels=config.training.feature_channels,\n        cond_dim=config.training.cond_dim,\n        model_channels=config.training.training.unet_model_channels,\n        num_res_blocks=config.training.training.unet_num_res_blocks,\n        channel_mult=tuple(config.training.training.unet_channel_mult),\n        attention_resolutions=tuple(config.training.training.attention_resolutions),\n        grid_size=config.training.default_grid_size,\n        num_classes=config.training.num_material_classes,\n    ).to(rank)\n    \n    cont_network = RegressionUNet(\n        feature_channels=config.training.feature_channels,\n        cond_dim=config.training.cond_dim,\n        model_channels=config.training.training.unet_model_channels,\n        num_res_blocks=config.training.training.unet_num_res_blocks,\n        channel_mult=tuple(config.training.training.unet_channel_mult),\n        attention_resolutions=tuple(config.training.training.attention_resolutions),\n        grid_size=config.training.default_grid_size,\n        out_channels=3,  # density, E, nu\n    ).to(rank)\n    \n    return seg_network, cont_network\n\n\ndef process_batch(seg_network, cont_network, batch_data, config, rank, metrics, output_dir=None):\n    \"\"\"Process a single batch and update metrics.\"\"\"\n    feat_grid, mat_cont, mat_id, mask, info_batch = batch_data\n    \n    # Move to device\n    mat_id = mat_id.to(rank)\n    mat_cont = mat_cont.to(rank)\n    mat_grid = torch.cat([mat_cont, mat_id.unsqueeze(1)], dim=1)\n    feat_grid = feat_grid.to(rank)\n    mask = mask.to(rank)\n    \n    batch_size = mat_grid.shape[0]\n    D = mat_grid.shape[2]\n    \n    with torch.no_grad():\n        # Get predictions\n        seg_logits = seg_network(feat_grid)\n        seg_pred = torch.argmax(seg_logits, dim=1)\n        cont_pred = cont_network(feat_grid)\n        \n        # Calculate metrics\n        accuracy = compute_accuracy(seg_logits, mat_id, mask=mask, \n                                  ignore_index=config.training.background_id)\n        \n        gt_cont = mat_grid[:, :3]\n        fg_mask = mask.unsqueeze(1)\n        diff_sq = (cont_pred - gt_cont) ** 2\n        \n        cont_mse = masked_mean(diff_sq, fg_mask.expand_as(diff_sq), dims=(2,3,4)).mean().item()\n        density_mse = masked_mean(diff_sq[:, 0:1], fg_mask, dims=(2,3,4)).mean().item()\n        youngs_mse = masked_mean(diff_sq[:, 1:2], fg_mask, dims=(2,3,4)).mean().item()\n        poisson_mse = masked_mean(diff_sq[:, 2:3], fg_mask, dims=(2,3,4)).mean().item()\n        \n        # Update batch metrics\n        metrics.add_batch_metrics(accuracy.item(), cont_mse, density_mse, youngs_mse, poisson_mse)\n        \n        # Process per-sample metrics\n        for i in range(batch_size):\n            obj_id = info_batch[\"obj_id\"][i]\n            \n            sample_metrics = {\n                \"seg_acc\": compute_accuracy(\n                    seg_logits[i:i+1], mat_id[i:i+1], mask=mask[i:i+1],\n                    ignore_index=config.training.background_id\n                ).item(),\n                \"density_mse\": masked_mean(diff_sq[i:i+1, 0:1], fg_mask[i:i+1], dims=(2,3,4)).mean().item(),\n                \"youngs_mse\": masked_mean(diff_sq[i:i+1, 1:2], fg_mask[i:i+1], dims=(2,3,4)).mean().item(),\n                \"poisson_mse\": masked_mean(diff_sq[i:i+1, 2:3], fg_mask[i:i+1], dims=(2,3,4)).mean().item(),\n            }\n            sample_metrics[\"cont_mse\"] = (sample_metrics[\"density_mse\"] + \n                                         sample_metrics[\"youngs_mse\"] + \n                                         sample_metrics[\"poisson_mse\"]) / 3.0\n            \n            metrics.add_sample_metrics(obj_id, sample_metrics)\n            metrics.local_obj_ids.append(obj_id)\n            \n            # Save predictions if output directory specified\n            if output_dir:\n                save_predictions(\n                    config, output_dir, i, obj_id, info_batch,\n                    seg_pred[i], cont_pred[i], mat_grid[i], \n                    feat_grid[i], mask[i], D\n                )\n\n\ndef save_predictions(config, output_dir, batch_idx, obj_id, info_batch,\n                    seg_pred, cont_pred, gt_tensor, feat_tensor, mask, D):\n    \"\"\"Save prediction results for a single sample.\"\"\"\n    sample_id = info_batch[\"sample_id\"][batch_idx]\n    if isinstance(sample_id, torch.Tensor):\n        sample_id = str(sample_id.item() if sample_id.numel() == 1 else sample_id[0].item())\n    else:\n        sample_id = str(sample_id)\n    \n    obj_out_dir = os.path.join(output_dir, obj_id)\n    os.makedirs(obj_out_dir, exist_ok=True)\n    \n    # Create combined prediction tensor\n    num_classes = config.training.num_material_classes - 1\n    combined_pred = torch.zeros((3 + config.training.num_material_classes, D, D, D), \n                               device=cont_pred.device)\n    combined_pred[:3] = cont_pred\n    \n    # One-hot encoding for segmentation\n    for i in range(num_classes):\n        combined_pred[3 + i] = (seg_pred == i).float()\n    combined_pred[3 + num_classes] = (seg_pred == num_classes).float()  # Background\n    \n    \n    # Save all outputs\n    np.save(os.path.join(obj_out_dir, f\"sample_{sample_id}_pred.npy\"), \n            combined_pred.cpu().numpy())\n    np.save(os.path.join(obj_out_dir, f\"sample_{sample_id}_gt.npy\"), \n            gt_tensor.cpu().numpy())\n\n    # skip saving feat to save space. feat is very large ~ 800 MB\n    # np.save(os.path.join(obj_out_dir, f\"sample_{sample_id}_feat.npy\"), \n    #         feat_tensor.cpu().numpy())\n    np.save(os.path.join(obj_out_dir, f\"sample_{sample_id}_mask.npy\"), \n            mask.cpu().numpy())\n    \n    # Save info\n    info_to_save = {\n        \"obj_id\": obj_id,\n        \"sample_id\": sample_id,\n        \"data_path\": info_batch[\"data_path\"][batch_idx],\n        \"feature_path\": info_batch[\"feature_path\"][batch_idx],\n        \"mask_path\": info_batch[\"mask_path\"][batch_idx]\n    }\n    np.save(os.path.join(obj_out_dir, f\"sample_{sample_id}_info.npy\"), info_to_save)\n\n\n\n\n\n\n\n\n\n\n\ndef run_inference_on_gpu(rank, world_size, config, seg_checkpoint_path, cont_checkpoint_path,\n                        obj_id=None, output_dir=None, steps_factor=10, use_ddim=False,\n                        *, dispersion=\"sem\", print_table=True):\n    \"\"\"Main inference function for each GPU.\"\"\"\n    set_logger()\n    # Setup\n    ddp_setup(rank, world_size)\n    config = load_normalization_ranges(config)\n    \n    # Load dataset\n    test_dataset, error_msg = load_test_dataset(config, obj_id)\n    if error_msg:\n        if rank == 0:\n            logging.error(error_msg)\n        dist.destroy_process_group()\n        sys.exit(1)\n    \n    # Create data loader\n    test_sampler = DistributedSampler(test_dataset, num_replicas=world_size, \n                                     rank=rank, shuffle=False)\n    test_loader = DataLoader(\n        dataset=test_dataset,\n        batch_size=config.training.inference.batch_size,\n        shuffle=False,\n        sampler=test_sampler,\n        num_workers=config.training.inference.data_worker,\n        pin_memory=True\n    )\n    \n    if output_dir and rank == 0:\n        os.makedirs(output_dir, exist_ok=True)\n        logging.info(f\"Results will be saved to: {output_dir}\")\n        logging.info(f\"Testing on {len(test_dataset)} samples\")\n    \n    # Create models\n    seg_network, cont_network = create_models(config, rank)\n    \n    # Load checkpoints using utility function\n    load_checkpoint(seg_checkpoint_path, seg_network, rank=rank)\n    load_checkpoint(cont_checkpoint_path, cont_network, rank=rank)\n    \n    seg_network.eval()\n    cont_network.eval()\n    \n    # Initialize metrics\n    metrics = InferenceMetrics()\n    \n    # Process batches\n    for batch_data in tqdm(test_loader, desc=f\"GPU-{rank} inference\", disable=rank!=0):\n        process_batch(seg_network, cont_network, batch_data, config, rank, \n                     metrics, output_dir)\n    \n    # Gather and report metrics\n    all_metrics = metrics.gather_all_metrics(rank, world_size)\n    \n    if rank == 0 and output_dir:\n        generate_metrics_report(config, all_metrics, output_dir, seg_checkpoint_path,\n                              cont_checkpoint_path, dispersion, print_table)\n    \n    dist.destroy_process_group()\n\n\ndef main_worker(rank, world_size, config, seg_checkpoint_path, cont_checkpoint_path, \n                obj_id, output_dir, steps_factor=10, use_ddim=False, *, dispersion=\"sem\"):\n    \"\"\"Worker function for multiprocessing.\"\"\"\n    run_inference_on_gpu(rank, world_size, config, seg_checkpoint_path, \n                        cont_checkpoint_path, obj_id, output_dir, steps_factor, \n                        use_ddim, dispersion=dispersion)\n\n\n@hydra.main(version_base=None, config_path=\"../../../config\", config_name=\"config\")\ndef main(config: DictConfig):\n    # Set up logging using the centralized set_logger function\n    set_logger()\n    \n    logging.info(\"==== Hydra Config ====\")\n    validate_config(config, single_obj=False)\n    config = resolve_paths(config)\n    logging.info(OmegaConf.to_yaml(config.training))\n    \n    # Get checkpoint paths\n    seg_base_dir, cont_base_dir = get_checkpoint_paths(config)\n    seg_checkpoint_dir, cont_checkpoint_dir, latest_seg_ts, latest_cont_ts = \\\n        get_latest_checkpoint_dirs(seg_base_dir, cont_base_dir)\n    \n    logging.info(f\"seg_checkpoint_dir: {seg_checkpoint_dir}\")\n    logging.info(f\"cont_checkpoint_dir: {cont_checkpoint_dir}\")\n    \n    \n    seg_checkpoint_path = get_checkpoint(seg_checkpoint_dir, \n    epoch=config.training.inference.SEG_EPOCH)\n    cont_checkpoint_path = get_checkpoint(cont_checkpoint_dir, \n    epoch=config.training.inference.CONT_EPOCH)\n    \n    if not seg_checkpoint_path or not cont_checkpoint_path:\n        raise ValueError(\"Could not find checkpoints in one or both directories\")\n    \n    logging.info(f\">>> Loading segmentation checkpoint from: {seg_checkpoint_path}\")\n    logging.info(f\">>> Loading continuous checkpoint from: {cont_checkpoint_path}\")\n    \n    # Create output directory\n    timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n    output_dir = os.path.join(config.paths.base_path, config.paths.inference_results_dir, timestamp)\n    os.makedirs(output_dir, exist_ok=True)\n    \n    # Run inference\n    world_size = torch.cuda.device_count()\n    logging.info(f\"Running inference across {world_size} GPUs\")\n    \n    steps_factor = config.training.inference.steps_factor\n    use_ddim = config.training.inference.use_ddim\n    \n    start_time = time.time()\n    \n    if world_size > 1:\n        mp.spawn(\n            main_worker,\n            args=(world_size, config, seg_checkpoint_path, cont_checkpoint_path, \n                  config.obj_id, output_dir, steps_factor, use_ddim),\n            nprocs=world_size,\n            join=True\n        )\n    else:\n        run_inference_on_gpu(0, 1, config, seg_checkpoint_path, cont_checkpoint_path,\n                           config.obj_id, output_dir, steps_factor, use_ddim)\n    \n    total_time = time.time() - start_time\n    \n    # Save checkpoint info as JSON for better structure\n    checkpoint_info = {\n        \"inference_timestamp\": timestamp,\n        \"segmentation_model\": {\n            \"training_timestamp\": latest_seg_ts,\n            \"checkpoint_path\": seg_checkpoint_path\n        },\n        \"continuous_model\": {\n            \"training_timestamp\": latest_cont_ts,\n            \"checkpoint_path\": cont_checkpoint_path\n        },\n        \"total_time_seconds\": total_time\n    }\n    \n    checkpoint_info_path = os.path.join(output_dir, \"checkpoint_info.json\")\n    save_json(checkpoint_info, checkpoint_info_path)\n    logging.info(f\">>> Created checkpoint info at: {checkpoint_info_path}\")\n    logging.info(f\"Total time taken: {total_time:.2f} seconds\")\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "third_party/Wavelet-Generation/trainer/training_continuous_mse.py",
    "content": "import os\nimport sys\nfrom datetime import datetime\nfrom typing import Tuple\n\nimport hydra\nfrom omegaconf import DictConfig, OmegaConf\n\nimport torch\nimport torch.nn as nn\nimport torch.distributed as dist\nimport torch.multiprocessing as mp\nfrom torch.nn.parallel import DistributedDataParallel as DDP\nfrom torch.utils.data import DataLoader, DistributedSampler, random_split\ntry:\n    from torch.amp import autocast, GradScaler\nexcept ImportError:\n    from torch.cuda.amp import autocast, GradScaler\nimport numpy as np\nfrom tqdm import tqdm\nimport wandb\nimport random\nimport glob\nimport json\nfrom pathlib import Path\n\n# Add the parent directory to sys.path to import pixie utilities\nsys.path.append(str(Path(__file__).parent.parent.parent.parent))\n\nfrom pixie.utils import resolve_paths, validate_config\nfrom pixie.training_utils import (\n     load_normalization_ranges, ddp_setup, seed_everything,\n    masked_mean, setup_wandb, save_train_test_splits, print_dataset_info\n)\n\n# -----------------------------------------------------------------------------\n# Local imports – add project root to PYTHONPATH so we can reuse existing code.\n# -----------------------------------------------------------------------------\nPROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\"))\nsys.path.append(PROJECT_ROOT)\n\nfrom data_utils.my_data import MaterialVoxelDatasetContinuous\nfrom models.module.diffusion_network import FeatureProjector, MyUNetModel  # we reuse network building blocks\n\n# Use shared utility functions from pixie.training_utils\n\n\n# ----------------------------------------------------------------------------\n# Simple regression UNet (features -> 3 continuous channels)\n# ----------------------------------------------------------------------------\nclass RegressionUNet(nn.Module):\n    \"\"\"Project CLIP features to lower dimension and predict 3 continuous channels.\"\"\"\n\n    def __init__(\n        self,\n        feature_channels: int,\n        cond_dim: int,\n        model_channels: int,\n        num_res_blocks: int,\n        channel_mult: Tuple[int, ...],\n        attention_resolutions: Tuple[int, ...],\n        grid_size: int,\n        out_channels: int = 3,\n    ):\n        super().__init__()\n        hidden_ch = 128 if feature_channels > cond_dim else None\n        self.projector = (\n           None\n           if feature_channels == cond_dim\n           else FeatureProjector(feature_channels, out_channels=cond_dim,\n                                 hidden_channels=hidden_ch,)\n       )\n\n\n        self.unet = MyUNetModel(\n            in_channels=cond_dim,\n            model_channels=model_channels,\n            out_channels=out_channels,\n            num_res_blocks=num_res_blocks,\n            channel_mult=channel_mult,\n            attention_resolutions=attention_resolutions,\n            spatial_size=grid_size,\n            dims=3,\n            activation=nn.LeakyReLU(0.02),\n        )\n\n    def forward(self, feat_grid):  # (N,feature_channels,D,H,W)\n        x = feat_grid\n        if self.projector is not None:\n            x = self.projector(feat_grid)\n        pred = self.unet(x)\n        return pred  # (N,3,D,H,W)\n\n\n# ----------------------------------------------------------------------------\n# Training loop per process\n# ----------------------------------------------------------------------------\nclass Trainer:\n    def __init__(self, cfg: DictConfig):\n        self.cfg = cfg\n        self.training_cfg = cfg.training.training  # Keep a reference to the training-specific config\n        self.material_channels = 3  # density, E, nu\n        self.wandb_run = None  # will be initialized on rank 0\n        self.SPATIAL = (2, 3, 4)  # dims for 5D tensors (N,C,D,H,W)\n\n    def mse_supervision(self, mat_grid, feat_grid, mask, network, use_amp=False):\n        LAMBDA_CONT = getattr(self.training_cfg, \"lambda_cont\", 1.0)\n\n        mat_grid = mat_grid.to(torch.float32)\n        feat_grid = feat_grid.to(torch.float32)\n\n        pred_mat = network(feat_grid)\n\n        fg_mask = mask.unsqueeze(1)\n\n        diff_sq = (pred_mat - mat_grid) ** 2\n        loss_per_sample = masked_mean(diff_sq, fg_mask.expand_as(diff_sq), self.SPATIAL)\n        loss = (loss_per_sample.mean(1)).mean() * LAMBDA_CONT\n\n        density_mse = masked_mean(diff_sq[:, 0:1], fg_mask, self.SPATIAL).mean()\n        youngs_mse = masked_mean(diff_sq[:, 1:2], fg_mask, self.SPATIAL).mean()\n        poisson_mse = masked_mean(diff_sq[:, 2:3], fg_mask, self.SPATIAL).mean()\n\n        return {\n            \"loss\": loss,\n            \"density_mse\": density_mse.detach(),\n            \"youngs_mse\": youngs_mse.detach(),\n            \"poisson_mse\": poisson_mse.detach(),\n        }\n\n    def train(self, rank: int, world_size: int, timestamp: str):\n        self.wandb_run = setup_wandb(rank, self.cfg, project_suffix=\"-continuous-mse\")\n\n        seed_everything(self.training_cfg.seed)\n\n        resume_ckpt_path = self.cfg.training.training.resume_checkpoint\n        resume_dir = self.cfg.training.training.resume_dir\n\n        if resume_dir and not resume_ckpt_path:\n            ckpt_candidates = glob.glob(os.path.join(resume_dir, \"epoch_*.pth\"))\n            if ckpt_candidates:\n                def _extract_epoch(fp):\n                    try:\n                        return int(os.path.basename(fp).split(\"_\")[1].split(\".\")[0])\n                    except Exception:\n                        return -1\n                resume_ckpt_path = max(ckpt_candidates, key=_extract_epoch)\n\n        if resume_ckpt_path:\n            ckpt_dir = os.path.dirname(resume_ckpt_path)\n        else:\n            ckpt_dir = os.path.join(self.cfg.paths.continuous_checkpoint_dir, timestamp)\n        os.makedirs(ckpt_dir, exist_ok=True)\n\n        full_dataset = MaterialVoxelDatasetContinuous(self.cfg)\n        train_size = int(self.training_cfg.train_size * len(full_dataset))\n        test_size = len(full_dataset) - train_size\n        \n        print_dataset_info(full_dataset, train_size, test_size, rank)\n        \n        train_dataset, test_dataset = random_split(\n            full_dataset,\n            [train_size, test_size],\n            generator=torch.Generator().manual_seed(42),\n        )\n\n        save_train_test_splits(train_dataset, test_dataset, full_dataset, ckpt_dir, rank)\n        \n        if rank == 0 and self.wandb_run is not None:\n            wandb.save(os.path.join(ckpt_dir, \"train_set.json\"))\n            wandb.save(os.path.join(ckpt_dir, \"test_set.json\"))\n\n        train_sampler = DistributedSampler(train_dataset, num_replicas=world_size, rank=rank, shuffle=True)\n\n        train_loader = DataLoader(\n            dataset=train_dataset,\n            batch_size=self.training_cfg.batch_size,\n            num_workers=self.training_cfg.tdata_worker,\n            shuffle=False,\n            sampler=train_sampler,\n            drop_last=True,\n        )\n\n        test_sampler = DistributedSampler(test_dataset, num_replicas=world_size, rank=rank, shuffle=False)\n        test_loader = DataLoader(\n            dataset=test_dataset,\n            batch_size=self.training_cfg.batch_size,\n            num_workers=self.training_cfg.tdata_worker,\n            shuffle=False,\n            sampler=test_sampler,\n            drop_last=False,\n        )\n\n        network = RegressionUNet(\n            feature_channels=self.cfg.training.feature_channels,\n            cond_dim=self.cfg.training.cond_dim,\n            model_channels=self.training_cfg.unet_model_channels,\n            num_res_blocks=self.training_cfg.unet_num_res_blocks,\n            channel_mult=tuple(self.training_cfg.unet_channel_mult),\n            attention_resolutions=tuple(self.training_cfg.attention_resolutions),\n            grid_size=self.cfg.training.default_grid_size,\n            out_channels=self.material_channels,\n        ).to(rank)\n        network = DDP(network, device_ids=[rank])\n\n        optimizer = torch.optim.Adam(\n            network.parameters(),\n            lr=self.training_cfg.lr,\n            betas=(self.training_cfg.beta1, self.training_cfg.beta2),\n        )\n\n        if self.training_cfg.lr_decay:\n            scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=self.training_cfg.lr_decay_rate)\n        else:\n            scheduler = None\n\n        use_amp = self.training_cfg.mix_precision\n        scaler = GradScaler('cuda') if use_amp else None\n\n        start_epoch = self.training_cfg.starting_epoch\n        if resume_ckpt_path and os.path.isfile(resume_ckpt_path):\n            checkpoint = torch.load(resume_ckpt_path, map_location=lambda storage, loc: storage.cuda(rank))\n            if isinstance(checkpoint, dict) and \"model_state_dict\" in checkpoint:\n                network.module.load_state_dict(checkpoint[\"model_state_dict\"])\n                if \"optimizer_state_dict\" in checkpoint:\n                    optimizer.load_state_dict(checkpoint[\"optimizer_state_dict\"])\n                if scheduler is not None and checkpoint.get(\"scheduler_state_dict\") is not None:\n                    scheduler.load_state_dict(checkpoint[\"scheduler_state_dict\"])\n                start_epoch = checkpoint.get(\"epoch\", start_epoch - 1) + 1\n            else:\n                network.module.load_state_dict(checkpoint)\n            if rank == 0:\n                print(f\"[Rank 0] Resumed training from {resume_ckpt_path} (starting at epoch {start_epoch})\")\n\n        for epoch in range(start_epoch, self.training_cfg.training_epochs + 1):\n            train_sampler.set_epoch(epoch)\n            network.train()\n            epoch_loss = 0.0\n            with tqdm(train_loader, disable=(rank != 0)) as tloader:\n                tloader.set_description(f\"Epoch {epoch} [Rank {rank}]\")\n                for feat_grid, mat_grid, mask, _ in tloader:\n                    feat_grid = feat_grid.to(rank, non_blocking=True)\n                    mat_grid = mat_grid.to(rank, non_blocking=True)\n                    mask = mask.to(rank, non_blocking=True)\n\n                    optimizer.zero_grad()\n                    if use_amp:\n                        with autocast('cuda'):\n                            loss_dict = self.mse_supervision(mat_grid, feat_grid, mask, network, use_amp=True)\n                            loss = loss_dict[\"loss\"]\n                        scaler.scale(loss).backward()\n                        if self.training_cfg.use_gradient_clip:\n                            scaler.unscale_(optimizer)\n                            nn.utils.clip_grad_norm_(network.parameters(), self.training_cfg.gradient_clip_value)\n                        scaler.step(optimizer)\n                        scaler.update()\n                    else:\n                        loss_dict = self.mse_supervision(mat_grid, feat_grid, mask, network)\n                        loss = loss_dict[\"loss\"]\n                        loss.backward()\n                        if self.training_cfg.use_gradient_clip:\n                            nn.utils.clip_grad_norm_(network.parameters(), self.training_cfg.gradient_clip_value)\n                        optimizer.step()\n\n                    epoch_loss += loss.item()\n                    if rank == 0:\n                        avg_loss = epoch_loss / (tloader.n + 1e-8)\n                        tloader.set_postfix(loss=avg_loss)\n                        wandb.log({\n                            \"train_loss\": avg_loss,\n                            \"learning_rate\": optimizer.param_groups[0][\"lr\"],\n                            \"train_density_mse\": loss_dict[\"density_mse\"].item(),\n                            \"train_youngs_mse\": loss_dict[\"youngs_mse\"].item(),\n                            \"train_poisson_mse\": loss_dict[\"poisson_mse\"].item(),\n                        })\n\n            if epoch % self.training_cfg.evaluation_interval == 0:\n                test_metrics = self.evaluate(network, test_loader, rank)\n                if rank == 0:\n                    wandb.log({\"epoch\": epoch, **test_metrics})\n\n            if rank == 0 and epoch % self.training_cfg.saving_intervals == 0:\n                ckpt_fp = os.path.join(ckpt_dir, f\"epoch_{epoch}.pth\")\n                torch.save({\n                    \"epoch\": epoch,\n                    \"model_state_dict\": network.module.state_dict(),\n                    \"optimizer_state_dict\": optimizer.state_dict(),\n                    \"scheduler_state_dict\": scheduler.state_dict() if scheduler else None,\n                }, ckpt_fp)\n                if self.wandb_run is not None:\n                    wandb.log({\"saved_checkpoint\": ckpt_fp, \"epoch\": epoch})\n\n            if scheduler is not None:\n                scheduler.step()\n\n    # ------------------------------------------------------------------\n    # Evaluation\n    # ------------------------------------------------------------------\n    def evaluate(self, network: DDP, data_loader: DataLoader, rank: int):\n        network.eval()\n        # Keep original per-batch metric calculation but accumulate sample-weighted sums\n        unmasked_sum = torch.tensor(0.0, device=rank)\n        masked_sum   = torch.tensor(0.0, device=rank)\n        density_sum  = torch.tensor(0.0, device=rank)\n        youngs_sum   = torch.tensor(0.0, device=rank)\n        poisson_sum  = torch.tensor(0.0, device=rank)\n        total_samples = torch.tensor(0.0, device=rank)\n\n        with torch.no_grad():\n            for feat_grid, mat_grid, mask, _ in data_loader:\n                bs = feat_grid.size(0)\n\n                mat_grid = mat_grid.to(rank, non_blocking=True)\n                feat_grid = feat_grid.to(rank, non_blocking=True)\n                mask = mask.to(rank, non_blocking=True)\n\n                pred_mat = network(feat_grid)\n                diff_sq = (pred_mat - mat_grid) ** 2  # (N,3,D,H,W)\n\n                # Unmasked MSE for the whole batch\n                unmasked_batch = diff_sq.mean().item()\n\n                # Masked (foreground) MSE – same computation used during training\n                fg_mask = mask.unsqueeze(1)\n                masked_batch = masked_mean(diff_sq, fg_mask.expand_as(diff_sq), self.SPATIAL).mean().item()\n\n                density_batch = masked_mean(diff_sq[:, 0:1], fg_mask, self.SPATIAL).mean().item()\n                youngs_batch  = masked_mean(diff_sq[:, 1:2], fg_mask, self.SPATIAL).mean().item()\n                poisson_batch = masked_mean(diff_sq[:, 2:3], fg_mask, self.SPATIAL).mean().item()\n\n                # Accumulate sample-weighted sums\n                unmasked_sum += unmasked_batch * bs\n                masked_sum   += masked_batch * bs\n                density_sum  += density_batch * bs\n                youngs_sum   += youngs_batch * bs\n                poisson_sum  += poisson_batch * bs\n                total_samples += bs\n\n        # Aggregate across GPUs\n        if dist.is_initialized():\n            for tensor in [unmasked_sum, masked_sum, density_sum, youngs_sum, poisson_sum, total_samples]:\n                dist.all_reduce(tensor, op=dist.ReduceOp.SUM)\n\n        eps = 1e-8\n        metrics = {\n            \"eval_unmasked_mse\": (unmasked_sum / (total_samples + eps)).item(),\n            \"eval_masked_mse\": (masked_sum   / (total_samples + eps)).item(),\n            \"eval_density_mse\": (density_sum  / (total_samples + eps)).item(),\n            \"eval_youngs_mse\":  (youngs_sum   / (total_samples + eps)).item(),\n            \"eval_poisson_mse\": (poisson_sum  / (total_samples + eps)).item(),\n        }\n        network.train()\n        if rank == 0:\n            print(\"Evaluation – metrics:\")\n            for k, v in metrics.items():\n                print(f\"  {k}: {v:.6f}\")\n        return metrics\n\n\n# ----------------------------------------------------------------------------\n# Multiprocessing entry point\n# ----------------------------------------------------------------------------\n\ndef run_worker(rank: int, world_size: int, cfg: DictConfig):\n    ddp_setup(rank, world_size)\n    # Load normalization ranges in worker process to ensure they're available\n    cfg = load_normalization_ranges(cfg)\n    trainer = Trainer(cfg)\n    from datetime import datetime\n    timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n    trainer.train(rank, world_size, timestamp)\n    dist.destroy_process_group()\n    # finish wandb on rank 0\n    if rank == 0 and wandb.run is not None:\n        wandb.finish()\n\n\n@hydra.main(version_base=None, config_path=\"../../../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    print(\"==== Hydra Config ====\")\n    validate_config(cfg, single_obj=False)\n    cfg = resolve_paths(cfg)\n    \n    print(OmegaConf.to_yaml(cfg.training))\n\n    world_size = torch.cuda.device_count()\n    mp.spawn(run_worker, args=(world_size, cfg), nprocs=world_size, join=True)\n\n\nif __name__ == \"__main__\":\n    main() "
  },
  {
    "path": "third_party/Wavelet-Generation/trainer/training_discrete.py",
    "content": "import os\nimport sys\nfrom datetime import datetime\nfrom typing import Tuple\n\nimport hydra\nfrom omegaconf import DictConfig, OmegaConf\n\nimport torch\nimport torch.nn as nn\nimport torch.distributed as dist\nimport torch.multiprocessing as mp\nfrom torch.nn.parallel import DistributedDataParallel as DDP\nfrom torch.utils.data import DataLoader, DistributedSampler, random_split\ntry:\n    from torch.amp import autocast, GradScaler\nexcept ImportError:\n    from torch.cuda.amp import autocast, GradScaler\nimport numpy as np\nfrom tqdm import tqdm\nimport wandb\nimport random\nimport glob\nimport json\nfrom pathlib import Path\n\n# Add the parent directory to sys.path to import pixie utilities\nsys.path.append(str(Path(__file__).parent.parent.parent.parent))\n\nfrom pixie.utils import resolve_paths, validate_config\nfrom pixie.training_utils import (\n     load_normalization_ranges, ddp_setup, seed_everything,\n    compute_accuracy, setup_wandb, save_train_test_splits, print_dataset_info\n)\n\n\n\n# -----------------------------------------------------------------------------\n# Local imports – add project root to PYTHONPATH so we can reuse existing code.\n# -----------------------------------------------------------------------------\nPROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\"))\nsys.path.append(PROJECT_ROOT)\n\nfrom data_utils.my_data import MaterialSegmentationDataset  # for dataset path resolution\nfrom models.module.diffusion_network import FeatureProjector, MyUNetModel\n\n\n\n\n# ----------------------------------------------------------------------------\n# Simple segmentation UNet (FeatureProjector + MyUNetModel)\n# ----------------------------------------------------------------------------\nclass SegmentationUNet(nn.Module):\n    def __init__(\n        self,\n        feature_channels: int,\n        cond_dim: int,\n        model_channels: int,\n        num_res_blocks: int,\n        channel_mult: Tuple[int, ...],\n        attention_resolutions: Tuple[int, ...],\n        grid_size: int,\n        num_classes: int,\n    ):\n        super().__init__()\n        hidden_ch = 128 if feature_channels > cond_dim else None\n        self.projector = (\n           None\n           if feature_channels == cond_dim\n           else FeatureProjector(feature_channels, out_channels=cond_dim,\n                                 hidden_channels=hidden_ch,)\n       )\n\n        self.unet = MyUNetModel(\n            in_channels=cond_dim,\n            model_channels=model_channels,\n            out_channels=num_classes,\n            num_res_blocks=num_res_blocks,\n            channel_mult=channel_mult,\n            attention_resolutions=attention_resolutions,\n            spatial_size=grid_size,\n            dims=3,\n            activation=nn.LeakyReLU(0.02),\n        )\n\n    def forward(self, feat_grid):  # (N,feature_channels,D,H,W)\n        x = feat_grid\n        if self.projector is not None:\n            x = self.projector(feat_grid)\n        logits = self.unet(x)  # (N,num_classes,D,H,W)\n        return logits\n\n\n# Use shared utility functions from pixie.training_utils\n\n# ----------------------------------------------------------------------------\n# Training loop per process\n# ----------------------------------------------------------------------------\nclass Trainer:\n    def __init__(self, cfg: DictConfig):\n        self.cfg = cfg\n        self.training_cfg = cfg.training.training  # Keep a reference to the training-specific config\n        self.background_id = self.cfg.training.background_id\n        self.wandb_run = None\n\n    def train(self, rank: int, world_size: int, timestamp: str):\n        self.wandb_run = setup_wandb(rank, self.cfg, project_suffix=\"-material-seg\")\n        \n        seed_everything(self.training_cfg.seed)\n\n        resume_ckpt_path = self.cfg.training.training.resume_checkpoint\n        resume_dir = self.cfg.training.training.resume_dir\n\n        if resume_dir and not resume_ckpt_path:\n            ckpt_candidates = glob.glob(os.path.join(resume_dir, \"epoch_*.pth\"))\n            if ckpt_candidates:\n                def _extract_epoch(fp):\n                    try:\n                        return int(os.path.basename(fp).split(\"_\")[1].split(\".\")[0])\n                    except Exception:\n                        return -1\n                resume_ckpt_path = max(ckpt_candidates, key=_extract_epoch)\n\n        if resume_ckpt_path:\n            ckpt_dir = os.path.dirname(resume_ckpt_path)\n        else:\n            ckpt_dir = os.path.join(self.cfg.paths.discrete_checkpoint_dir, timestamp)\n        os.makedirs(ckpt_dir, exist_ok=True)\n\n        full_dataset = MaterialSegmentationDataset(self.cfg)\n        train_size = int(self.training_cfg.train_size * len(full_dataset))\n        test_size = len(full_dataset) - train_size\n        \n        print_dataset_info(full_dataset, train_size, test_size, rank)\n        \n        train_dataset, test_dataset = random_split(\n            full_dataset,\n            [train_size, test_size],\n            generator=torch.Generator().manual_seed(42),\n        )\n\n        save_train_test_splits(train_dataset, test_dataset, full_dataset, ckpt_dir, rank)\n        \n        if rank == 0 and self.wandb_run is not None:\n            wandb.save(os.path.join(ckpt_dir, \"train_set.json\"))\n            wandb.save(os.path.join(ckpt_dir, \"test_set.json\"))\n\n        train_sampler = DistributedSampler(train_dataset, num_replicas=world_size, rank=rank, shuffle=True)\n        \n        train_loader = DataLoader(\n            dataset=train_dataset,\n            batch_size=self.training_cfg.batch_size,\n            num_workers=self.training_cfg.tdata_worker,\n            shuffle=False,\n            sampler=train_sampler,\n            drop_last=True\n        )\n        \n        test_sampler = DistributedSampler(test_dataset, num_replicas=world_size, rank=rank, shuffle=False)\n        test_loader = DataLoader(\n            dataset=test_dataset,\n            batch_size=self.training_cfg.batch_size,\n            num_workers=self.training_cfg.tdata_worker,\n            shuffle=False,\n            sampler=test_sampler,\n            drop_last=False\n        )\n\n        model = SegmentationUNet(\n            feature_channels=self.cfg.training.feature_channels,\n            cond_dim=self.cfg.training.cond_dim,\n            model_channels=self.training_cfg.unet_model_channels,\n            num_res_blocks=self.training_cfg.unet_num_res_blocks,\n            channel_mult=tuple(self.training_cfg.unet_channel_mult),\n            attention_resolutions=tuple(self.training_cfg.attention_resolutions),\n            grid_size=self.cfg.training.default_grid_size,\n            num_classes=self.cfg.training.num_material_classes,\n        ).to(rank)\n        model = DDP(model, device_ids=[rank])\n\n        optimizer = torch.optim.Adam(\n            model.parameters(),\n            lr=self.training_cfg.lr,\n            betas=(self.training_cfg.beta1, self.training_cfg.beta2),\n        )\n\n        if self.training_cfg.lr_decay:\n            scheduler = torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=self.training_cfg.lr_decay_rate)\n        else:\n            scheduler = None\n\n        criterion = nn.CrossEntropyLoss(ignore_index=self.background_id)\n\n        use_amp = self.training_cfg.mix_precision\n        scaler = GradScaler('cuda') if use_amp else None\n\n        start_epoch = self.training_cfg.starting_epoch\n        if resume_ckpt_path and os.path.isfile(resume_ckpt_path):\n            checkpoint = torch.load(resume_ckpt_path, map_location=lambda storage, loc: storage.cuda(rank))\n            if isinstance(checkpoint, dict) and \"model_state_dict\" in checkpoint:\n                model.module.load_state_dict(checkpoint[\"model_state_dict\"])\n                if \"optimizer_state_dict\" in checkpoint:\n                    optimizer.load_state_dict(checkpoint[\"optimizer_state_dict\"])\n                if scheduler is not None and checkpoint.get(\"scheduler_state_dict\") is not None:\n                    scheduler.load_state_dict(checkpoint[\"scheduler_state_dict\"])\n                start_epoch = checkpoint.get(\"epoch\", start_epoch - 1) + 1\n            else:\n                model.module.load_state_dict(checkpoint)\n            if rank == 0:\n                print(f\"[Rank 0] Resumed training from {resume_ckpt_path} (starting at epoch {start_epoch})\")\n\n        for epoch in range(start_epoch, self.training_cfg.training_epochs + 1):\n            train_sampler.set_epoch(epoch)\n            model.train()\n            epoch_loss = 0.0\n            with tqdm(train_loader, disable=(rank != 0)) as tloader:\n                tloader.set_description(f\"Epoch {epoch} [Rank {rank}]\")\n                for feat_grid, mat_id, mask, _ in tloader:\n                    feat_grid = feat_grid.to(rank, non_blocking=True)\n                    mat_id = mat_id.to(rank, non_blocking=True)\n                    mask = mask.to(rank, non_blocking=True)\n\n                    optimizer.zero_grad()\n                    if use_amp:\n                        with autocast('cuda'):\n                            logits = model(feat_grid)\n                            loss = criterion(logits, mat_id) * mask\n                            loss = loss.sum() / (mask.sum() + 1e-8)\n                        scaler.scale(loss).backward()\n                        if self.training_cfg.use_gradient_clip:\n                            scaler.unscale_(optimizer)\n                            nn.utils.clip_grad_norm_(model.parameters(), self.training_cfg.gradient_clip_value)\n                        scaler.step(optimizer)\n                        scaler.update()\n                    else:\n                        logits = model(feat_grid)\n                        loss = criterion(logits, mat_id) * mask\n                        loss = loss.sum() / (mask.sum() + 1e-8)\n                        loss.backward()\n                        if self.training_cfg.use_gradient_clip:\n                            nn.utils.clip_grad_norm_(model.parameters(), self.training_cfg.gradient_clip_value)\n                        optimizer.step()\n\n                    epoch_loss += loss.item()\n                    if rank == 0:\n                        avg_loss = epoch_loss / (tloader.n + 1e-8)\n                        tloader.set_postfix(loss=avg_loss)\n                        wandb.log({\n                            \"train_loss\": avg_loss,\n                            \"learning_rate\": optimizer.param_groups[0]['lr']\n                        })\n            if epoch % self.training_cfg.evaluation_interval == 0:\n                mean_acc = self.evaluate(model, test_loader, rank)\n                if rank == 0:\n                    wandb.log({\n                        \"epoch\": epoch,\n                        \"eval_mean_accuracy\": mean_acc,\n                    })\n\n            if rank == 0 and epoch % self.training_cfg.saving_intervals == 0:\n                ckpt_fp = os.path.join(ckpt_dir, f\"epoch_{epoch}.pth\")\n                torch.save({\n                    \"epoch\": epoch,\n                    \"model_state_dict\": model.module.state_dict(),\n                    \"optimizer_state_dict\": optimizer.state_dict(),\n                    \"scheduler_state_dict\": scheduler.state_dict() if scheduler else None,\n                }, ckpt_fp)\n                if self.wandb_run is not None:\n                    wandb.log({\"saved_checkpoint\": ckpt_fp, \"epoch\": epoch})\n\n            if scheduler is not None:\n                scheduler.step() \n\n    # ----------------------- evaluation ------------------------------------\n    def evaluate(self, model: DDP, data_loader: DataLoader, rank: int):\n        model.eval()\n\n        # Keep sample-level weighting (each grid counts once) but aggregate across GPUs\n        total_acc_sum = torch.tensor(0.0, device=rank)\n        total_samples = torch.tensor(0.0, device=rank)\n        with torch.no_grad():\n            for feat_grid, mat_id, mask, _ in data_loader:\n                feat_grid = feat_grid.to(rank, non_blocking=True)\n                mat_id = mat_id.to(rank, non_blocking=True)\n                mask = mask.to(rank, non_blocking=True)\n                logits = model(feat_grid)\n                # Use mask for accuracy computation\n                acc = compute_accuracy(logits, mat_id, mask=mask, ignore_index=self.background_id).item()\n                bs = feat_grid.size(0)  # number of samples in this batch\n                total_acc_sum += acc * bs\n                total_samples += bs\n\n        # Aggregate across GPUs\n        if dist.is_initialized():\n            dist.all_reduce(total_acc_sum, op=dist.ReduceOp.SUM)\n            dist.all_reduce(total_samples, op=dist.ReduceOp.SUM)\n\n        mean_acc = (total_acc_sum / total_samples).item() if total_samples > 0 else 0.0\n        if rank == 0:\n            print(f\"Evaluation – mean accuracy: {mean_acc:.4f}\")\n        model.train()\n        return mean_acc\n\n\n# ----------------------------------------------------------------------------\n# Multiprocessing entry point\n# ----------------------------------------------------------------------------\n\ndef run_worker(rank: int, world_size: int, cfg: DictConfig):\n    ddp_setup(rank, world_size)\n    # Load normalization ranges in worker process to ensure they're available\n    cfg = load_normalization_ranges(cfg)\n    trainer = Trainer(cfg)\n    from datetime import datetime\n    timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n    trainer.train(rank, world_size, timestamp)\n    dist.destroy_process_group()\n    # finish wandb on rank 0\n    if rank == 0 and wandb.run is not None:\n        wandb.finish()\n\n\n@hydra.main(version_base=None, config_path=\"../../../config\", config_name=\"config\")\ndef main(cfg: DictConfig):\n    print(\"==== Hydra Config ====\")\n    validate_config(cfg, single_obj=False)\n    cfg = resolve_paths(cfg)\n    \n    print(OmegaConf.to_yaml(cfg.training))\n\n    world_size = torch.cuda.device_count()\n    mp.spawn(run_worker, args=(world_size, cfg), nprocs=world_size, join=True)\n\n\nif __name__ == \"__main__\":\n    main() "
  },
  {
    "path": "third_party/Wavelet-Generation/utils/debugger.py",
    "content": "import time\nimport datetime\nimport os\nimport sys\nimport numpy as np\nimport logging\nimport random\nimport configs.config as config\nfrom shutil import copyfile\nimport torch\n\n\nclass MyDebugger():\n    pre_fix = config.debug_base_folder\n\n    def __init__(self, model_name: str, fix_rand_seed=None, is_save_print_to_file=True,\n                 config_path=os.path.join('configs', 'config.py')):\n        if fix_rand_seed is not None:\n            np.random.seed(seed=fix_rand_seed)\n            random.seed(fix_rand_seed)\n            torch.manual_seed(fix_rand_seed)\n        if isinstance(model_name, str):\n            self.model_name = model_name\n        else:\n            self.model_name = '_'.join(model_name)\n        self._debug_dir_name = os.path.join(os.path.dirname(__file__), MyDebugger.pre_fix,\n                                            datetime.datetime.fromtimestamp(time.time()).strftime(\n                                                f'%Y-%m-%d_%H-%M-%S_{self.model_name}'))\n        # self._debug_dir_name = os.path.join(os.path.dirname(__file__), self._debug_dir_name)\n        print(\"=================== Program Start ====================\")\n        print(f\"Output directory: {self._debug_dir_name}\")\n        self._init_debug_dir()\n\n        ######## redirect the standard output\n        if is_save_print_to_file:\n            sys.stdout = open(self.file_path(\"print.log\"), 'w')\n\n            ######## print the dir again on the log\n            print(\"=================== Program Start ====================\")\n            print(f\"Output directory: {self._debug_dir_name}\")\n\n        ########  copy config file to\n        config_file_save_path = self.file_path(os.path.basename(config_path))\n        assert os.path.exists(config_path)\n        copyfile(config_path, config_file_save_path)\n        print(f\"config file created at {config_file_save_path}\")\n\n    def file_path(self, file_name):\n        return os.path.join(self._debug_dir_name, file_name)\n\n    def set_direcotry_name(self, name):\n        self._debug_dir_name = name\n\n    def _init_debug_dir(self):\n        # init root debug dir\n        if not os.path.exists(MyDebugger.pre_fix):\n            os.mkdir(MyDebugger.pre_fix)\n        if not os.path.exists(self._debug_dir_name):\n            os.mkdir(self._debug_dir_name)\n        logging.info(\"Directory %s established\" % self._debug_dir_name)\n\n    @staticmethod\n    def save_text(idx, save_type, filepath):\n        print(f\"Epoch {idx} {save_type} saved in {filepath}\")\n\n    @staticmethod\n    def get_save_text(save_type):\n        return f\"{save_type} saved in \"\n\n\nif __name__ == '__main__':\n    debugger = MyDebugger('testing')\n    # file can save in the path\n    file_path = debugger.file_path('file_to_be_save.txt')\n"
  },
  {
    "path": "third_party/Wavelet-Generation/utils/meter.py",
    "content": "\nimport numpy as np\n\nclass Meter(object):\n\n    def __init__(self):\n        self.measure_dicts = {}\n\n    def add_attributes(self, new_attribute):\n        self.measure_dicts[new_attribute] = []\n\n    def clear_data(self):\n        for key, item in self.measure_dicts.items():\n            self.measure_dicts[key] = []\n\n    def add_data(self, attribute, data):\n\n        assert attribute in self.measure_dicts\n        self.measure_dicts[attribute].append(data)\n\n    def return_avg_dict(self):\n\n        return_dict = {}\n        for key, item in self.measure_dicts.items():\n            return_dict[key] = f'{np.mean(self.measure_dicts[key]):.9f}'\n\n        return return_dict"
  },
  {
    "path": "third_party/Wavelet-Generation/utils/other_utils.py",
    "content": "import torch\nimport numpy as np\nimport math\nimport matplotlib as mpl\nmpl.use('Agg')\nimport matplotlib.pyplot as plt\nfrom matplotlib import cm\nfrom matplotlib.colors import Normalize, LogNorm\nfrom scipy.sparse import coo_matrix\nfrom scipy.sparse.linalg import lsqr\nEPS = 1e-2\n# from utils.StructuralLosses.match_cost import match_cost\n\nclass TVLoss(torch.nn.Module):\n    def __init__(self,TVLoss_weight=1):\n        super(TVLoss,self).__init__()\n        self.TVLoss_weight = TVLoss_weight\n\n    def forward(self,x):\n        batch_size = x.size()[0]\n        h_x = x.size()[2]\n        w_x = x.size()[3]\n        d_x = x.size()[4]\n        count_h = self._tensor_size(x[:,:,1:,:,:])\n        count_w = self._tensor_size(x[:,:,:,1:,:])\n        count_d = self._tensor_size(x[:,:,:,:,1:])\n        h_tv = torch.pow((x[:,:,1:,:,:]-x[:,:,:h_x-1,:,:]),2).sum()\n        w_tv = torch.pow((x[:,:,:,1:,:]-x[:,:,:,:w_x-1,:]),2).sum()\n        d_tv = torch.pow((x[:,:,:,:,1:]-x[:,:,:,:,:w_x-1]),2).sum()\n\n        return self.TVLoss_weight*(h_tv/count_h+w_tv/count_w+d_tv/count_d)/batch_size\n\n    def _tensor_size(self,t):\n        return t.size()[1]*t.size()[2]*t.size()[3]\n\ndef EMD_loss(sample, ref):\n    B, N, N_ref = sample.size(0), sample.size(1), ref.size(1)\n\n    # import ipdb\n    # ipdb.set_trace()\n\n    assert N == N_ref, \"Not sure what would EMD do in this case\"\n    emd = match_cost(sample, ref)  # (B,)\n    emd_norm = emd / float(N)  # (B,)\n    return emd_norm\n\ndef normalize_point_cloud(inputs):\n    \"\"\"\n    input: pc [N, P, 3]\n    output: pc, centroid, furthest_distance\n    \"\"\"\n    #print(\"shape\",input.shape)\n    C = inputs.shape[-1]\n    pc = inputs[:,:,:3]\n    if C > 3:\n        nor = inputs[:,:,3:]\n\n    centroid = np.mean(pc, axis=1, keepdims=True)\n    pc = inputs[:,:,:3] - centroid\n    furthest_distance = np.amax(\n        np.sqrt(np.sum(pc ** 2, axis=-1, keepdims=True)), axis=1, keepdims=True)\n    pc = pc / furthest_distance\n    return pc\n\ndef save_pointclouds_fig(filename, points_cloud, x_cnt, y_cnt):\n\n    pcd_list = []\n    tile_list = []\n\n    assert  points_cloud.shape[0] >= x_cnt * y_cnt\n    for i in range(x_cnt):\n        title = [\"S_%d\" % (i * y_cnt + j) for j in range(y_cnt)]\n        normalized_point_clouds = normalize_point_cloud(points_cloud[i * y_cnt: (i+1) * y_cnt])\n        pcd_list.append(0.75 * normalized_point_clouds)\n        tile_list.append(title)\n\n    plot_pcd_multi_rows(filename, pcd_list, tile_list)\n\ndef plot_pcd_multi_rows(filename, pcds, titles, suptitle='', sizes=None, cmap='Greys', zdir='y',\n                         xlim=(-0.4, 0.4), ylim=(-0.4, 0.4), zlim=(-0.4, 0.4)):\n    if sizes is None:\n        sizes = [0.2 for i in range(len(pcds[0]))]\n\n    #print(len(pcds),len(pcds[0]))\n    fig = plt.figure(figsize=(len(pcds[0]) * 3, len(pcds)*3)) # W,H\n    for i in range(len(pcds)):\n        elev = 30\n        azim = -45\n        for j, (pcd, size) in enumerate(zip(pcds[i], sizes)):\n            color = np.zeros(pcd.shape[0])\n            ax = fig.add_subplot(len(pcds), len(pcds[i]), i * len(pcds[i]) + j + 1, projection='3d')\n            #print(len(pcds), len(pcds[i]), i * len(pcds[i]) + j + 1)\n            ax.view_init(elev, azim)\n            ax.scatter(pcd[:, 0], pcd[:, 1], pcd[:, 2], zdir=zdir, c=color, s=size, cmap=cmap, vmin=-1, vmax=0.5)\n            ax.set_title(titles[i][j])\n            #ax.text(0, 0, titles[i][j], color=\"green\")\n            ax.set_axis_off()\n            #ax.set_xlabel(titles[i][j])\n\n            ax.set_xlim(xlim)\n            ax.set_ylim(ylim)\n            ax.set_zlim(zlim)\n\n    #plt.xticks(np.arange(len(pcds)), titles[:len(pcds)])\n\n    plt.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.9, wspace=0.1, hspace=0.1)\n    plt.suptitle(suptitle)\n    fig.savefig(filename)\n    plt.close(fig)\n\n\ndef pad_tensor(input_arr, target_length, val=0, dim=1):\n    shp = input_arr.size()\n    npad = tuple([0 if i != 2 * (len(shp) - dim) - 1 else target_length - shp[dim] for i in range(2 * len(shp))])\n    return torch.nn.functional.pad(input_arr, npad, \"constant\", val)\n\n\ndef remove_nans(tensor):\n    tensor_nan = torch.isnan(tensor[:, 3])\n    return tensor[~tensor_nan, :]\n\n\ndef load_obj(path):\n    vertices, normals, face_vertices_indcies, face_normal_indices = [], [], [], []\n    with open(path, mode='r') as f:\n        for line in f.readlines():\n            splited_text = line.split()\n            if len(splited_text) == 0:\n                continue\n            if splited_text[0] == 'v':\n                vertices.append([float(splited_text[1]), float(splited_text[2]), float(splited_text[3])])\n            elif splited_text[0] == 'vn':\n                normals.append([float(splited_text[1]), float(splited_text[2]), float(splited_text[3])])\n            elif splited_text[0] == 'f':\n                if \"//\" in splited_text[1]:\n                    face_vertices_indcies.append(\n                        [int(splited_text[1].split('//')[0]) - 1, int(splited_text[2].split('//')[0]) - 1,\n                         int(splited_text[3].split('//')[0]) - 1])\n                    face_normal_indices.append(\n                        [int(splited_text[1].split('//')[1]) - 1, int(splited_text[2].split('//')[1]) - 1,\n                         int(splited_text[3].split('//')[1]) - 1])\n                elif \"/\" in splited_text[1]:\n                    face_vertices_indcies.append(\n                        [int(splited_text[1].split('/')[0]) - 1, int(splited_text[2].split('/')[0]) - 1,\n                         int(splited_text[3].split('/')[0]) - 1])\n                    face_normal_indices.append(\n                        [int(splited_text[1].split('/')[1]) - 1, int(splited_text[2].split('/')[1]) - 1,\n                         int(splited_text[3].split('/')[1]) - 1])\n                else:  # only face\n                    face_vertices_indcies.append(\n                        [int(splited_text[1]) - 1, int(splited_text[2]) - 1, int(splited_text[3]) - 1])\n\n        return np.array(vertices), np.array(normals), np.array(face_vertices_indcies), np.array(face_normal_indices)\n\n\ndef save_obj(path, vertices_arr, faces_arr):\n    print(\"Writing the mesh.....\")\n    f = open(path, 'w')\n\n    for i in range(vertices_arr.shape[0]):\n        f.write(f'v {vertices_arr[i][0]} {vertices_arr[i][1]} {vertices_arr[i][2]}\\n')\n\n    for i in range(faces_arr.shape[0]):\n        f.write(f'f {faces_arr[i][0] + 1} {faces_arr[i][1] + 1} {faces_arr[i][2] + 1}\\n')\n\n    f.close()\n    print(\"Done Writing the mesh.....\")\n\n\ndef save_off(filename, VPos, ITris, VColors=None):\n    \"\"\"\n    Save a .off file\n    Parameters\n    ----------\n    filename: string\n        Path to which to write .off file\n    VPos : ndarray (N, 3)\n        Array of points in 3D\n    VColors : ndarray(N, 3)\n        Array of RGB colors\n    ITris : ndarray (M, 3)\n        Array of triangles connecting points, pointing to vertex indices\n    \"\"\"\n    nV = VPos.shape[0]\n    nF = ITris.shape[0]\n    fout = open(filename, \"w\")\n    if VColors.size == 0:\n        fout.write(\"OFF\\n%i %i %i\\n\"%(nV, nF, 0))\n    else:\n        fout.write(\"COFF\\n%i %i %i\\n\"%(nV, nF, 0))\n    for i in range(nV):\n        fout.write(\"%g %g %g\"%tuple(VPos[i, :]))\n        if VColors is not None:\n            fout.write(\" %g %g %g\"%tuple(VColors[i, :]))\n        fout.write(\"\\n\")\n    for i in range(nF):\n        fout.write(\"3 %i %i %i\\n\"%tuple(ITris[i, :]))\n    fout.close()\n\n\ndef compute_activate_plane(vertices, bsp_convex):\n    input_vertices = np.array(vertices)\n    input_vertices = np.concatenate((input_vertices, np.ones((input_vertices.shape[0], 1))), axis = 1)\n    distance_values = input_vertices.dot(bsp_convex.T)\n\n    results = [np.where(distance_values[i] <  1e-5)[0].tolist() for i in range(len(distance_values))]\n\n    ## remap here first\n    map_dict = {}\n    cnt = 0\n    for i in range(len(results)):\n        for j in range(len(results[i])):\n            if results[i][j] not in map_dict:\n                map_dict[results[i][j]] = cnt\n                results[i][j] = cnt\n                cnt += 1\n            else:\n                results[i][j] = map_dict[results[i][j]]\n    bsp_convex = np.array(bsp_convex)\n    bsp_convex_active = bsp_convex[np.array(list(map_dict.keys()))]\n    return results, bsp_convex_active\n\ndef reconstruct_plane_params(vertices, active_set, bsp_convex, vertices_weight):\n    plane_count = max([max(active_planes) for active_planes in active_set]) + 1\n    vertices = np.array(vertices)\n    vertices_extended = np.concatenate((vertices, np.ones((vertices.shape[0], 1))), axis = 1)\n\n    equation_cnt = 0\n    row_i, row_j, values = [], [], []\n    for i in range(len(active_set)):\n        for j in range(len(active_set[i])):\n\n            ## slow\n            for k in range(4):\n                row_i.append(equation_cnt)\n                row_j.append(active_set[i][j] * 4 + k)\n                values.append(vertices_extended[i][k] * vertices_weight[i])\n\n            equation_cnt += 1\n\n    ## initalize here\n    WEIGHT = 1\n    vector = np.zeros(equation_cnt)\n    for i in range(len(bsp_convex)):\n        for j in range(4):\n            row_i.append(equation_cnt)\n            row_j.append(i * 4 + j)\n            values.append(WEIGHT)\n            equation_cnt += 1\n\n    row_i, row_j, values = np.array(row_i), np.array(row_j), np.array(values)\n\n    ## construct sparse matrix\n    matrix = coo_matrix((values, (row_i, row_j)), shape = (equation_cnt, plane_count * 4))\n\n    ## construct the zero vector\n    bsp_convex = np.array(bsp_convex).reshape(-1)\n    vector = np.concatenate((vector, bsp_convex * WEIGHT))\n\n    result = lsqr(matrix, vector)[0].reshape(-1, 4)\n\n    return result\n\n\n\n\ndef get_mesh_watertight(bsp_convex_list):\n    vertices = []\n    polygons = []\n    vertices_convex = []\n    polygons_convex = []\n    merge_threshold = 1e-4\n\n    for k in range(len(bsp_convex_list)):\n        vg, tg = digest_bsp(bsp_convex_list[k], bias=0)\n        # if len(vg) <= 4:  ## break for only 1 plane\n        #     continue\n        biass = len(vertices)\n\n        vertices_per_convex = []\n        polygons_per_convex = []\n        # merge same vertex\n        mapping = np.zeros([len(vg)], np.int32)\n        use_flag = np.zeros([len(vg)], np.int32)\n        counter = 0\n        for i in range(len(vg)):\n            same_flag = -1\n            for j in range(i):\n                if abs(vg[i][0] - vg[j][0]) + abs(vg[i][1] - vg[j][1]) + abs(vg[i][2] - vg[j][2]) < merge_threshold:\n                    same_flag = j\n                    break\n            if same_flag >= 0:\n                mapping[i] = mapping[same_flag]\n            else:\n                mapping[i] = counter\n                counter += 1\n                use_flag[i] = True\n        for i in range(len(vg)):\n            if use_flag[i]:\n                vertices.append(vg[i])\n                vertices_per_convex.append(vg[i])\n        for i in range(len(tg)):\n            prev = mapping[tg[i][0]]\n            tmpf = [prev + biass]\n            for j in range(1, len(tg[i])):\n                nowv = mapping[tg[i][j]]\n                if nowv != prev:\n                    tmpf.append(nowv + biass)\n                    prev = nowv\n            if tmpf[0] == tmpf[-1]:\n                tmpf = tmpf[:-1]\n            if len(tmpf) >= 3:\n                polygons.append(tmpf)\n                polygons_per_convex.append([value - biass for value in tmpf])\n\n        vertices_convex.append(vertices_per_convex)\n        polygons_convex.append(polygons_per_convex)\n\n    return np.array(vertices), polygons, vertices_convex, polygons_convex\n\n\n# Union parametric faces to form a mesh, output vertices and polygons\ndef digest_bsp(bsp_convex, bias):\n    faces = []\n\n    cnt = 0\n    # carve out the mesh face by face\n    for i in range(len(bsp_convex)):\n        temp_face = get_polygon_from_params(bsp_convex[i])\n        if temp_face is not None:\n            faces = join_polygons(temp_face, faces)\n        else:\n            cnt += 1\n\n    print(f\"Empty plane cnt : {cnt}\")\n\n    vertices = []\n    polygons = []\n\n    # add \"merge same vertex\" in the future?\n    v_count = bias\n    for i in range(len(faces)):\n        temp_face_idx = []\n        for j in range(1, len(faces[i])):\n            vertices.append(faces[i][j])\n            temp_face_idx.append(v_count)\n            v_count += 1\n        polygons.append(temp_face_idx)\n\n    return vertices, polygons\n\n\nborder_limit = 10.0\ndef get_polygon_from_params(params):\n    epsilon = 1e-5\n    face = []\n    a,b,c,d = params\n    sum = a*a+b*b+c*c\n    if sum<epsilon:\n        return None\n\n    #detect intersection on the 12 edges of a box [-1000,1000]^3\n    if abs(a)>=abs(b) and abs(a)>=abs(c):\n        #x-direction (y,z) = (--,-+,++,+-)\n        x1=-(b*(-border_limit)+c*(-border_limit)+d)/a\n        x2=-(b*(-border_limit)+c*(border_limit)+d)/a\n        x3=-(b*(border_limit)+c*(border_limit)+d)/a\n        x4=-(b*(border_limit)+c*(-border_limit)+d)/a\n        face.append([a,b,c,-d])\n        if a>0:\n            face.append(np.array([x1,-border_limit,-border_limit]))\n            face.append(np.array([x2,-border_limit,border_limit]))\n            face.append(np.array([x3,border_limit,border_limit]))\n            face.append(np.array([x4,border_limit,-border_limit]))\n        else:\n            face.append(np.array([x4,border_limit,-border_limit]))\n            face.append(np.array([x3,border_limit,border_limit]))\n            face.append(np.array([x2,-border_limit,border_limit]))\n            face.append(np.array([x1,-border_limit,-border_limit]))\n    elif abs(b)>=abs(c):\n        #y-direction (x,z) = (--,-+,++,+-)\n        y1=-(a*(-border_limit)+c*(-border_limit)+d)/b\n        y2=-(a*(-border_limit)+c*(border_limit)+d)/b\n        y3=-(a*(border_limit)+c*(border_limit)+d)/b\n        y4=-(a*(border_limit)+c*(-border_limit)+d)/b\n        face.append([a,b,c,-d])\n        if b<0:\n            face.append(np.array([-border_limit,y1,-border_limit]))\n            face.append(np.array([-border_limit,y2,border_limit]))\n            face.append(np.array([border_limit,y3,border_limit]))\n            face.append(np.array([border_limit,y4,-border_limit]))\n        else:\n            face.append(np.array([border_limit,y4,-border_limit]))\n            face.append(np.array([border_limit,y3,border_limit]))\n            face.append(np.array([-border_limit,y2,border_limit]))\n            face.append(np.array([-border_limit,y1,-border_limit]))\n    else:\n        #z-direction (x,y) = (--,-+,++,+-)\n        z1=-(a*(-border_limit)+b*(-border_limit)+d)/c\n        z2=-(a*(-border_limit)+b*(border_limit)+d)/c\n        z3=-(a*(border_limit)+b*(border_limit)+d)/c\n        z4=-(a*(border_limit)+b*(-border_limit)+d)/c\n        face.append([a,b,c,-d])\n        if c>0:\n            face.append(np.array([-border_limit,-border_limit,z1]))\n            face.append(np.array([-border_limit,border_limit,z2]))\n            face.append(np.array([border_limit,border_limit,z3]))\n            face.append(np.array([border_limit,-border_limit,z4]))\n        else:\n            face.append(np.array([border_limit,-border_limit,z4]))\n            face.append(np.array([border_limit,border_limit,z3]))\n            face.append(np.array([-border_limit,border_limit,z2]))\n            face.append(np.array([-border_limit,-border_limit,z1]))\n\n    return face\n\n\n# put a plane into the mesh\n# split faces if necessary\ndef join_polygons(target_face, face_group):\n    epsilon = 1e-5\n    faces = []\n    a, b, c, w = target_face[0]\n\n    for i in range(len(face_group)):\n        # split each face in face_group, if necessary\n        # first detect whether split is needed\n        face_i = face_group[i]\n        front_flag = False\n        back_flag = False\n        vtypes = [-1]  # first element is a dummy\n        for j in range(1, len(face_i)):\n            dist = face_i[j][0] * a + face_i[j][1] * b + face_i[j][2] * c - w\n            if dist < -epsilon:  # back--2\n                back_flag = True\n                vtypes.append(2)\n            elif dist > epsilon:  # front--1\n                front_flag = True\n                vtypes.append(1)\n            else:  # coplanar--0\n                vtypes.append(0)\n\n        if front_flag and back_flag:\n            # split\n            # only save front part\n            face_i_new = [face_i[0]]\n            for j in range(1, len(face_i)):\n                j1 = j + 1\n                if j1 == len(face_i):\n                    j1 = 1\n                if vtypes[j] != 2:\n                    face_i_new.append(face_i[j])\n                if vtypes[j] == 1 and vtypes[j1] == 2 or vtypes[j] == 2 and vtypes[j1] == 1:\n                    dist1 = face_i[j][0] * a + face_i[j][1] * b + face_i[j][2] * c\n                    dist2 = face_i[j1][0] * a + face_i[j1][1] * b + face_i[j1][2] * c\n                    p = (w - dist1) * (face_i[j1] - face_i[j]) / (dist2 - dist1) + face_i[j]\n\n                    dist1 = target_face[1][0] * a + target_face[1][1] * b + target_face[1][2] * c\n                    dist2 = target_face[2][0] * a + target_face[2][1] * b + target_face[2][2] * c\n                    dist3 = target_face[3][0] * a + target_face[3][1] * b + target_face[3][2] * c\n                    dist4 = p[0] * a + p[1] * b + p[2] * c\n                    face_i_new.append(p)\n            faces.append(face_i_new)\n        elif front_flag:\n            faces.append(face_i)\n\n    # also split target_face\n    onsurface_flag = True\n    result_face = []\n    for k in range(len(target_face)):\n        result_face.append(target_face[k])\n\n    for i in range(len(face_group)):\n        # first detect whether split is needed\n        face_i = face_group[i]\n        a, b, c, w = face_i[0]\n        front_flag = False\n        back_flag = False\n        vtypes = [-1]  # first element is a dummy\n        for j in range(1, len(result_face)):\n            dist = result_face[j][0] * a + result_face[j][1] * b + result_face[j][2] * c - w\n            if dist < -epsilon:  # back--2\n                back_flag = True\n                vtypes.append(2)\n            elif dist > epsilon:  # front--1\n                front_flag = True\n                vtypes.append(1)\n            else:  # coplanar--0\n                vtypes.append(0)\n\n        if front_flag and back_flag:\n            # split\n            # only save front part\n            result_face_new = [result_face[0]]\n            for j in range(1, len(result_face)):\n                j1 = j + 1\n                if j1 == len(result_face):\n                    j1 = 1\n                if vtypes[j] != 2:\n                    result_face_new.append(result_face[j])\n                if vtypes[j] == 1 and vtypes[j1] == 2 or vtypes[j] == 2 and vtypes[j1] == 1:\n                    dist1 = result_face[j][0] * a + result_face[j][1] * b + result_face[j][2] * c\n                    dist2 = result_face[j1][0] * a + result_face[j1][1] * b + result_face[j1][2] * c\n                    p = (w - dist1) * (result_face[j1] - result_face[j]) / (dist2 - dist1) + result_face[j]\n                    result_face_new.append(p)\n            result_face = result_face_new\n        elif back_flag:\n            onsurface_flag = False\n            break\n\n    if onsurface_flag:\n        faces.append(result_face)\n    return faces\n\ndef write_ply_polygon(name, vertices, polygons):\n    fout = open(name, 'w')\n    fout.write(\"ply\\n\")\n    fout.write(\"format ascii 1.0\\n\")\n    fout.write(\"element vertex \"+str(len(vertices))+\"\\n\")\n    fout.write(\"property float x\\n\")\n    fout.write(\"property float y\\n\")\n    fout.write(\"property float z\\n\")\n    fout.write(\"element face \" + str(len(polygons)) + \"\\n\")\n    fout.write(\"property list uchar int vertex_index\\n\")\n    fout.write(\"end_header\\n\")\n    for ii in range(len(vertices)):\n        fout.write(str(vertices[ii][0]) + \" \" + str(vertices[ii][1]) + \" \" + str(vertices[ii][2]) + \"\\n\")\n    for ii in range(len(polygons)):\n        fout.write(str(len(polygons[ii])))\n        for jj in range(len(polygons[ii])):\n            fout.write(\" \" + str(polygons[ii][jj]))\n        fout.write(\"\\n\")\n    fout.close()\n\n\ndef write_ply_polygon_with_color(name, vertices, colors, polygons):\n    fout = open(name, 'w')\n    fout.write(\"ply\\n\")\n    fout.write(\"format ascii 1.0\\n\")\n    fout.write(\"element vertex \" + str(len(vertices)) + \"\\n\")\n    fout.write(\"property float x\\n\")\n    fout.write(\"property float y\\n\")\n    fout.write(\"property float z\\n\")\n    fout.write(\"property uchar red\\n\")\n    fout.write(\"property uchar green\\n\")\n    fout.write(\"property uchar blue\\n\")\n    fout.write(\"element face \" + str(len(polygons)) + \"\\n\")\n    fout.write(\"property list uchar int vertex_index\\n\")\n    fout.write(\"end_header\\n\")\n    for ii in range(len(vertices)):\n        fout.write(str(vertices[ii][0]) + \" \" + str(vertices[ii][1]) + \" \" + str(vertices[ii][2]) + \" \" + str(\n            colors[ii][0]) + \" \" + str(colors[ii][1]) + \" \" + str(colors[ii][2]) + \"\\n\")\n    for ii in range(len(polygons)):\n        fout.write(str(len(polygons[ii])))\n        for jj in range(len(polygons[ii])):\n            fout.write(\" \" + str(polygons[ii][jj]))\n        fout.write(\"\\n\")\n    fout.close()\n\n\ndef write_off_polygon(name, vertices, polygons):\n    fout = open(name, 'w')\n    fout.write(\"OFF\\n\")\n    fout.write(f\"{len(vertices)} {len(polygons)} 0\\n\")\n    for ii in range(len(vertices)):\n        fout.write(str(vertices[ii][0]) + \" \" + str(vertices[ii][1]) + \" \" + str(vertices[ii][2]) + \"\\n\")\n    for ii in range(len(polygons)):\n        fout.write(str(len(polygons[ii])))\n        for jj in range(len(polygons[ii])):\n            fout.write(\" \" + str(polygons[ii][jj]))\n        fout.write(\"\\n\")\n    fout.close()\n\ndef sample_points_polygon(vertices, polygons, num_of_points):\n    # convert polygons to triangles\n    triangles, vertices = convert_triangles(polygons, vertices)\n\n    return sample_points_triangles(num_of_points, triangles, vertices)\n\n\ndef convert_triangles(polygons, vertices):\n    triangles = []\n    for ii in range(len(polygons)):\n        for jj in range(len(polygons[ii]) - 2):\n            triangles.append([polygons[ii][0], polygons[ii][jj + 1], polygons[ii][jj + 2]])\n    triangles = np.array(triangles, np.int32)\n    vertices = np.array(vertices, np.float32)\n    return triangles, vertices\n\n\ndef sample_points_triangles(num_of_points, triangles, vertices):\n    small_step = 1.0 / 64\n    epsilon = 1e-6\n    triangle_area_list = np.zeros([len(triangles)], np.float32)\n    triangle_normal_list = np.zeros([len(triangles), 3], np.float32)\n    for i in range(len(triangles)):\n        # area = |u x v|/2 = |u||v|sin(uv)/2\n        a, b, c = vertices[triangles[i, 1]] - vertices[triangles[i, 0]]\n        x, y, z = vertices[triangles[i, 2]] - vertices[triangles[i, 0]]\n        ti = b * z - c * y\n        tj = c * x - a * z\n        tk = a * y - b * x\n        area2 = math.sqrt(ti * ti + tj * tj + tk * tk)\n        if area2 < epsilon:\n            triangle_area_list[i] = 0\n            triangle_normal_list[i, 0] = 0\n            triangle_normal_list[i, 1] = 0\n            triangle_normal_list[i, 2] = 0\n        else:\n            triangle_area_list[i] = area2\n            triangle_normal_list[i, 0] = ti / area2\n            triangle_normal_list[i, 1] = tj / area2\n            triangle_normal_list[i, 2] = tk / area2\n    triangle_area_sum = np.sum(triangle_area_list)\n    sample_prob_list = (num_of_points / triangle_area_sum) * triangle_area_list\n    triangle_index_list = np.arange(len(triangles))\n    point_normal_list = np.zeros([num_of_points, 6], np.float32)\n    count = 0\n    watchdog = 0\n    while (count < num_of_points):\n        np.random.shuffle(triangle_index_list)\n        watchdog += 1\n        if watchdog > 100:\n            print(\"infinite loop here!\")\n            return point_normal_list\n        for i in range(len(triangle_index_list)):\n            if count >= num_of_points: break\n            dxb = triangle_index_list[i]\n            prob = sample_prob_list[dxb]\n            prob_i = int(prob)\n            prob_f = prob - prob_i\n            if np.random.random() < prob_f:\n                prob_i += 1\n            normal_direction = triangle_normal_list[dxb]\n            u = vertices[triangles[dxb, 1]] - vertices[triangles[dxb, 0]]\n            v = vertices[triangles[dxb, 2]] - vertices[triangles[dxb, 0]]\n            base = vertices[triangles[dxb, 0]]\n            for j in range(prob_i):\n                # sample a point here:\n                u_x = np.random.random()\n                v_y = np.random.random()\n                if u_x + v_y >= 1:\n                    u_x = 1 - u_x\n                    v_y = 1 - v_y\n                point_normal_list[count, :3] = u * u_x + v * v_y + base\n                point_normal_list[count, 3:] = normal_direction\n                count += 1\n                if count >= num_of_points: break\n    return point_normal_list\n\n\ndef write_ply_point_normal(name, vertices, normals=None):\n\tfout = open(name, 'w')\n\tfout.write(\"ply\\n\")\n\tfout.write(\"format ascii 1.0\\n\")\n\tfout.write(\"element vertex \"+str(len(vertices))+\"\\n\")\n\tfout.write(\"property float x\\n\")\n\tfout.write(\"property float y\\n\")\n\tfout.write(\"property float z\\n\")\n\tfout.write(\"property float nx\\n\")\n\tfout.write(\"property float ny\\n\")\n\tfout.write(\"property float nz\\n\")\n\tfout.write(\"end_header\\n\")\n\tif normals is None:\n\t\tfor ii in range(len(vertices)):\n\t\t\tfout.write(str(vertices[ii,0])+\" \"+str(vertices[ii,1])+\" \"+str(vertices[ii,2])+\" \"+str(vertices[ii,3])+\" \"+str(vertices[ii,4])+\" \"+str(vertices[ii,5])+\"\\n\")\n\telse:\n\t\tfor ii in range(len(vertices)):\n\t\t\tfout.write(str(vertices[ii,0])+\" \"+str(vertices[ii,1])+\" \"+str(vertices[ii,2])+\" \"+str(normals[ii,0])+\" \"+str(normals[ii,1])+\" \"+str(normals[ii,2])+\"\\n\")\n\tfout.close()\n\ndef normalize_v3(arr):\n    ''' Normalize a numpy array of 3 component vectors shape=(n,3) '''\n    lens = np.sqrt( arr[:,0]**2 + arr[:,1]**2 + arr[:,2]**2 )\n    arr[:,0] /= lens\n    arr[:,1] /= lens\n    arr[:,2] /= lens\n    return arr\n\n## THIS BY GEOMETRIC AVERAGING\ndef compute_vertices_normal(vertices, faces):\n    # Create a zeroed array with the same type and shape as our vertices i.e., per vertex normal\n    norm = np.zeros(vertices.shape, dtype=vertices.dtype)\n    # Create an indexed view into the vertex array using the array of three indices for triangles\n    tris = vertices[faces]\n    # Calculate the normal for all the triangles, by taking the cross product of the vectors v1-v0, and v2-v0 in each triangle\n    n = np.cross(tris[::, 1] - tris[::, 0], tris[::, 2] - tris[::, 0])\n    # n is now an array of normals per triangle. The length of each normal is dependent the vertices,\n    # we need to normalize these, so that our next step weights each normal equally.\n    n = normalize_v3(n)\n    # now we have a normalized array of normals, one per triangle, i.e., per triangle normals.\n    # But instead of one per triangle (i.e., flat shading), we add to each vertex in that triangle,\n    # the triangles' normal. Multiple triangles would then contribute to every vertex, so we need to normalize again afterwards.\n    # The cool part, we can actually add the normals through an indexed view of our (zeroed) per vertex normal array\n    norm[faces[:, 0]] += n\n    norm[faces[:, 1]] += n\n    norm[faces[:, 2]] += n\n    norm = normalize_v3(norm)\n    return norm\n\ndef load_off(filename):\n    \"\"\"\n    Load in an OFF file, assuming it's a triangle mesh\n    Parameters\n    ----------\n    filename: string\n        Path to file\n    Returns\n    -------\n    VPos : ndarray (N, 3)\n        Array of points in 3D\n    VColors : ndarray(N, 3)\n        Array of RGB colors\n    ITris : ndarray (M, 3)\n        Array of triangles connecting points, pointing to vertex indices\n    \"\"\"\n    fin = open(filename, 'r')\n    nVertices = 0\n    nFaces = 0\n    lineCount = 0\n    face = 0\n    vertex = 0\n    divideColor = False\n    VPos = np.zeros((0, 3))\n    VColors = np.zeros((0, 3))\n    ITris = np.zeros((0, 3))\n    for line in fin:\n        lineCount = lineCount+1\n        fields = line.split() #Splits whitespace by default\n        if len(fields) == 0: #Blank line\n            continue\n        if fields[0][0] in ['#', '\\0', ' '] or len(fields[0]) == 0:\n            continue\n        #Check section\n        if nVertices == 0:\n            if fields[0] == \"OFF\" or fields[0] == \"COFF\":\n                if len(fields) > 2:\n                    fields[1:4] = [int(field) for field in fields]\n                    [nVertices, nFaces, nEdges] = fields[1:4]\n                    #Pre-allocate vertex arrays\n                    VPos = np.zeros((nVertices, 3))\n                    VColors = np.zeros((nVertices, 3))\n                    ITris = np.zeros((nFaces, 3))\n                if fields[0] == \"COFF\":\n                    divideColor = True\n            else:\n                fields[0:3] = [int(field) for field in fields]\n                [nVertices, nFaces, nEdges] = fields[0:3]\n                VPos = np.zeros((nVertices, 3))\n                VColors = np.zeros((nVertices, 3))\n                ITris = np.zeros((nFaces, 3))\n        elif vertex < nVertices:\n            fields = [float(i) for i in fields]\n            P = [fields[0],fields[1], fields[2]]\n            color = np.array([0.5, 0.5, 0.5]) #Gray by default\n            if len(fields) >= 6:\n                #There is color information\n                if divideColor:\n                    color = [float(c)/255.0 for c in fields[3:6]]\n                else:\n                    color = [float(c) for c in fields[3:6]]\n            VPos[vertex, :] = P\n            VColors[vertex, :] = color\n            vertex = vertex+1\n        elif face < nFaces:\n            # Assume the vertices are specified in CCW order\n            fields = [int(i) for i in fields]\n            ITris[face, :] = fields[1:fields[0] + 1]\n            face = face + 1\n    fin.close()\n    VPos = np.array(VPos, np.float64)\n    VColors = np.array(VColors, np.float64)\n    ITris = np.array(ITris, np.int32)\n    return (VPos, VColors, ITris)\n\n\ndef saveOffWithColorMap(filename, Vpos, faces, values, color_map_type='Reds'):\n    values = Normalize()(values)\n    values = np.clip(values, EPS, 1)\n    color_map = cm.get_cmap(color_map_type)\n    ## get colors\n    colors = color_map(values)[:, :3]\n    save_off(filename, Vpos, faces, colors)\n\n\ndef process_state_dict(network_state_dict, type = 0):\n\n    if torch.cuda.device_count() >= 2 and type == 0:\n        for key, item in list(network_state_dict.items()):\n            if key[:7] != 'module.':\n                new_key = 'module.' + key\n                network_state_dict[new_key] = item\n                del network_state_dict[key]\n    else:\n        for key, item in list(network_state_dict.items()):\n            if key[:7] == 'module.':\n                new_key = key[7:]\n                network_state_dict[new_key] = item\n                del network_state_dict[key]\n\n    return network_state_dict"
  },
  {
    "path": "third_party/f3rm/.github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Platform**\nPlease include details on your operating system, GPU, CUDA version, etc. if relevant.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": "third_party/f3rm/.gitignore",
    "content": "*.egg-info\n\n.idea/\n__pycache__/\n*.py[cod]\n\n**/.DS_Store\n.env\n\n# Build output\ndist/\n\n# Output of demo extract features script\n**/demo_extract_features.png\n**/demo_clip_features*.png\n\n# Datasets\ndatasets/\n\n# Nerfstudio outputs\noutputs/\nf3rm_outputs/\n**data/\n**outputs/"
  },
  {
    "path": "third_party/f3rm/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 F3RM Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "third_party/f3rm/README.md",
    "content": "# Distilled Feature Fields Enable Few-Shot Language-Guided Manipulation\n\n### [🌐 Project Website](https://f3rm.github.io) | [📝 Paper](https://arxiv.org/abs/2308.07931) | [🎥 Video](https://www.youtube.com/watch?v=PA9rWWVWsc4)\n\n**F3RM:** Feature Fields for Robotic Manipulation\n\nWe distill features from 2D foundation models into 3D feature fields, and enable few-shot language-guided manipulation\nthat generalizes across object poses, shapes, appearances and categories.\n\n**[William Shen](https://shen.nz)<sup>\\*1</sup>, [Ge Yang](https://www.episodeyang.com/)<sup>\\*1,2</sup>,\n[Alan Yu](https://www.linkedin.com/in/alan-yu1/)<sup>1</sup>,\n[Jansen Wong](https://www.linkedin.com/in/jansenwong/)<sup>1</sup>,\n[Leslie Kaelbling](https://people.csail.mit.edu/lpk/)<sup>1</sup>,\n[Phillip Isola](https://people.csail.mit.edu/phillipi/)<sup>1</sup>**<br>\n<sup>1 </sup>[MIT CSAIL](https://www.csail.mit.edu/),\n<sup>2 </sup>[Institute of AI and Fundamental Interactions (IAIFI)](https://iaifi.org/)<br>\n<sup>* </sup>Indicates equal contribution<br>\nCoRL 2023 (Oral)\n\n-----\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [Usage](#usage)\n    - [Downloading Example Datasets](#downloading-example-datasets)\n    - [Training a Feature Field](#training-a-feature-field)\n    - [Using our Custom Viewer](#using-our-custom-viewer)\n    - [Using the Nerfstudio Viewer](#using-the-nerfstudio-viewer)\n    - [Extracting CLIP and DINO Features](#extracting-clip-and-dino-features)\n    - [Language-Guided Pose Optimization](#language-guided-pose-optimization)\n- [Troubleshooting](#troubleshooting)\n- [Citation](#citation)\n\n## Code\n\nWe provide the official implementation of F3RM for:\n\n1. Training Feature Fields\n2. 6-DOF Pose Optimization for Open-Text Language-Guided Manipulation\n\nF3RM is built on top of [Nerfstudio](https://github.com/nerfstudio-project/nerfstudio) following their\n[guide for adding new methods](https://docs.nerf.studio/developer_guides/new_methods.html). For a summary\nof the codebase structure, see [assets/code_structure.md](assets/code_structure.md).\n\n### Installation\n\n**Note:** this repo requires an NVIDIA GPU with CUDA 11.7+ for NeRF and feature field distillation.\n\n#### 1. Setup conda environment\n\n```bash\n# We recommend that you use conda to manage your environment\nconda create -n f3rm python=3.8\nconda activate f3rm\n```\n\n#### 2. Install Nerfstudio dependencies\n\n```bash\n# Install torch per instructions here: https://pytorch.org/get-started/locally/\n# Choose the CUDA version that your GPU supports. We will use CUDA 11.8\npip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118\n\n# Install CUDA toolkit, you can skip this if you already have CUDA 11.8 installed\n# You can check your existing CUDA installation with `nvcc --version`\nconda install -c \"nvidia/label/cuda-11.8.0\" cuda-toolkit\nexport CUDA_HOME=$CONDA_PREFIX\n\n# Install tiny-cuda-nn, this will take a few minutes\npip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch\n```\n\n#### 3. Clone and install F3RM\n\n```bash\ngit clone https://github.com/f3rm/f3rm.git\ncd f3rm\n\n# Install F3RM and its dependencies\npip install -e .\n\n# Install command-line completions for nerfstudio\nns-install-cli\n\n# Test your installation, check that 'f3rm' is a valid method\nns-train --help\n```\n\n**Note:** if you have a previous installation of Nerfstudio, make sure it does not conflict with the new installation\nin the `f3rm` conda environment. Run `which -a ns-train` and check that the first entry points to\n`$CONDA_PREFIX/bin/ns-train`. If it doesn't, then you may need to deactivate all conda environments and only activate\nthe `f3rm` environment.\n\nOur code is tested to work on Nerfstudio versions 0.3.3 and 0.3.4.\n\n#### 4. (Optional) Install dependencies for robot manipulation code\n\nMake sure your conda environment is activated before running the following commands.\n\n```bash\n# Install robot dependencies\npip install -e \".[robot]\"\n\n# Install PyTorch3D, we recommend you build from source which may take a few minutes\n# Alternatively, check: https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md\npip install \"git+https://github.com/facebookresearch/pytorch3d.git@stable\"\n\n# Test your installation. If you see a help message, everything should be working\nf3rm-optimize --help\n```\n\n## Usage\n\n### Downloading Example Datasets\n\nWe provide example datasets of tabletop and room-scale environments which you can download using\nthe `f3rm-download-data` command. By default, the script will download all the datasets (requires ~350MB disk space)\ninto the `datasets/f3rm` directory relative to your current directory.\n\nRun `f3rm-download-data -h` to see how to download specific datasets or set your own save directory. We provide a short\ndescription and preview of each dataset in [assets/datasets.md](assets/datasets.md).\n\n### Training a Feature Field\n\nWe provide the functionality to train a NeRF and distill features in parallel. The default features we distill are CLIP\nfeatures. You can distill DINO features instead by adding `--pipeline.datamanager.feature-type DINO`.\n\n```bash\nns-train f3rm --data <data_folder>\n```\n\nYou can try F3RM with the example datasets which you can download following the\n[instructions here](#downloading-example-datasets) (try out `f3rm/panda/scene_001`). Alternatively, you can prepare your\nown datasets following the instructions in the\n[Nerfstudio documentation](https://docs.nerf.studio/quickstart/custom_dataset.html).\n\nNote that while we focused on tabletop environments in the paper, F3RM can be scaled up to much larger environments. Try\ntraining feature fields on the example [rooms datasets](assets/datasets.md#rooms).\n\nYou do not need to run the training to completion. We save a checkpoint every 2000 steps by default. To see all the\noptions available for training, run `ns-train f3rm -h`.\n\n#### Resuming Training from a Checkpoint\n\nUse the `--load-dir` flag to resume training from a checkpoint. Nerfstudio writes the checkpoint files to the `outputs/`\ndirectory relative to your current directory.\n\n```bash\nns-train f3rm --data <data_folder> --load-dir {outputs/.../nerfstudio_models}\n```\n\nCheckout the [Nerfstudio documentation](https://docs.nerf.studio/quickstart/first_nerf.html) for more details\non functionality.\n\n### Using our Custom Viewer\n\nOur custom web viewer is coming soon! Keep an eye on out for updates.\n\n### Using the Nerfstudio Viewer\n\nOnce you have started training the feature field with `ns-train`, Nerfstudio will print a URL to the viewer in the\nterminal (the URL will start with https://viewer.nerf.studio). You can open this URL to open the Nerfstudio viewer in\nyour browser to visualize training progress and the feature field. Alternatively, to visualize a trained model you can\nrun `ns-viewer --load-config {outputs/.../config.yml}`.\n\nNote that if you are using a remote server, you will need to forward the port to your local machine\n([instructions](https://docs.nerf.studio/quickstart/viewer_quickstart.html#training-on-a-remote-machine)).\nThe default port used by Nerfstudio is 7007, but check the viewer URL to make sure. For a general guide on how to use\nthe Nerfstudio viewer, check out\ntheir [documentation](https://docs.nerf.studio/quickstart/viewer_quickstart.html).\n\n#### Visualizing the Feature Field PCA\n\nTo visualize the PCA of the features, select `feature_pca` in the `Render Options -> Output Render` dropdown box.\nNote that the initial PCA projection matrix is computed based on the features rendered at your current viewpoint.\n\n<img src=\"https://raw.githubusercontent.com/f3rm/f3rm/main/assets/images/ns_viewer/feature-pca_option.png\" width=\"400\" alt=\"feature_pca in Output Render dropdown\">\n\nTo recompute the PCA projection based on your current viewpoint, click the \"Refresh PCA Projection\" button under\n`Trainer/pipeline/model` near the bottom of the controls.\n\n#### Language Interaction with CLIP Feature Fields\n\nIf you are distilling CLIP features (the default feature type), then you will see the following additional controls\nunder `Trainer/pipeline/model` near the bottom of the controls panel. You can enter positive and negative text queries\n(separated by `,` commas), which will compute similarity heatmaps. You will need to click out of the text box or press\nthe enter key to submit the query.\n\n<img src=\"https://raw.githubusercontent.com/f3rm/f3rm/main/assets/images/ns_viewer/f3rm_controls.png\" width=\"400\" alt=\"Additional Controls for F3RM in the Nerfstudio Viewer\">\n\nTo visualize these heatmaps, select `similarity` in the `Render Options -> Output Render` dropdown box. It may take a\nfew seconds for this option to show up on the first query, as we load CLIP lazily.\n\n<img src=\"https://raw.githubusercontent.com/f3rm/f3rm/main/assets/images/ns_viewer/similarity_option.png\" width=\"400\" alt=\"similarity in Output Render dropdown\">\n\nWe show the similarity heatmap over the `f3rm/panda/scene_001` dataset for the \"Baymax\" query, with the negatives in the\ncontrols above (you can download this dataset using the `f3rm-download-data panda` command). Try playing around with\ndifferent language queries and see what results you get!\n\n<img src=\"https://raw.githubusercontent.com/f3rm/f3rm/main/assets/images/ns_viewer/baymax_heatmap.png\" width=\"500\" alt=\"similarity heatmap for Baymax\">\n\n**Note:** if multiple positive queries are specified, we average their CLIP embeddings before computing the pair-wise\nsoftmax described in Section 3.3 of the [paper](https://arxiv.org/abs/2308.07931). The default temperature of 0.1 works\nwell. If no negative queries are specified, then we show the cosine similarity between the positive query and the\nfeature field.\n\n### Extracting CLIP and DINO Features\n\nWe provide scripts to demonstrate how to extract CLIP and DINO features from their respective vision models. You can\nuse these features for your own NeRF pipeline or for other downstream applications.\n\n- Run `python f3rm/scripts/demo_extract_features.py` for a general demo on how to extract CLIP and DINO features.\n  This will create a plot showing the PCA of the CLIP and DINO features. The plot is saved\n  to `demo_extract_features.png`.\n- For details on how to extract CLIP features and compare the extracted features with CLIP text embeddings, run\n  `python f3rm/scripts/demo_clip_features.py`. This script will create a plot showing the similarity heatmaps for a\n  given\n  text query, and will save a plot to `demo_clip_features-{text_query}.png`.\n\n### Language-Guided Pose Optimization\n\nFor details on how to run the 6-DOF pose optimization code for language-guided manipulation, please\ncheck [f3rm_robot/README.md](f3rm_robot/README.md). A detailed tutorial is provided.\n\n[<img src=\"assets/images/f3rm_robot/optimize.gif\" width=\"500\" alt=\"Language-Guided Pose Optimization Visualizer\">](f3rm_robot/README.md)\n\n## Troubleshooting\n\n### Language queries are not working in Nerfstudio viewer\n\nThe Nerfstudio viewer can sometimes fail to register the input you type into the text boxes if you are use the same\nbrowser tab for different training runs. This means `feature_pca` and `similarity` may not appear in the Render Options.\nTo fix this issue, try closing the tab with the viewer in your browser and opening it again. If this doesn't work,\nplease open an issue in this repository.\n\n### Running out of GPU memory\n\nThis codebase was tested on a RTX3090 with 24GB of GPU memory. We observe a peak memory usage of ~6GB when training a\nCLIP feature field **without** using the viewer. When the viewer is used in conjunction with training, the peak memory\nusage is ~12GB.\n\nIf you are running out of memory when using the Nerfstudio viewer, try:\n\n1. Decreasing the number of rays per batch when rendering by using the `--pipeline.model.eval-num-rays-per-chunk 8192`\n   flag when running `ns-train`.\n    - The default rays per chunk is 16384, which uses ~12GB of memory (at `Max Res = 512`).\n    - 8192 rays per chunk uses ~10GB memory. Decreasing this number will further reduce memory usage, at the cost of\n      slower rendering.\n2. Decrease the rendering resolution in `Max Res` under Render Options in the Nerfstudio viewer.\n\nIf you are running out of memory during any other stages, please open a GitHub issue and we will try to help.\n\n## Acknowledgements\n\nWe thank the authors of the following projects for making their code open source:\n\n- [Nerfstudio](https://github.com/nerfstudio-project/nerfstudio)\n- [LERF](https://github.com/kerrj/lerf)\n- [CLIP](https://github.com/openai/CLIP)\n- [DINO](https://github.com/facebookresearch/dino)\n  and [dino-vit-features](https://github.com/ShirAmir/dino-vit-features)\n- [Viser](https://github.com/nerfstudio-project/viser)\n\n## Citation\n\nIf you find our work useful, please consider citing:\n\n```\n@inproceedings{shen2023F3RM,\n    title={Distilled Feature Fields Enable Few-Shot Language-Guided Manipulation},\n    author={Shen, William and Yang, Ge and Yu, Alan and Wong, Jansen and Kaelbling, Leslie Pack and Isola, Phillip},\n    booktitle={7th Annual Conference on Robot Learning},\n    year={2023},\n    url={https://openreview.net/forum?id=Rb0nGIt_kh5}\n}\n```\n"
  },
  {
    "path": "third_party/f3rm/f3rm/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/f3rm/f3rm/f3rm_config.py",
    "content": "from nerfstudio.cameras.camera_optimizers import CameraOptimizerConfig\nfrom nerfstudio.configs.base_config import ViewerConfig\nfrom nerfstudio.data.dataparsers.nerfstudio_dataparser import NerfstudioDataParserConfig\nfrom nerfstudio.data.dataparsers.colmap_dataparser import ColmapDataParserConfig\nfrom nerfstudio.engine.optimizers import AdamOptimizerConfig\nfrom nerfstudio.engine.schedulers import ExponentialDecaySchedulerConfig\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.pipelines.base_pipeline import VanillaPipelineConfig\nfrom nerfstudio.plugins.types import MethodSpecification\nimport os\n\nfrom f3rm.feature_datamanager import FeatureDataManagerConfig\nfrom f3rm.model import FeatureFieldModelConfig\n\ndef get_dataparser_config():\n    \"\"\"Get the appropriate dataparser config based on environment variable.\"\"\"\n    is_real_data = os.environ.get('USE_COLMAP_DATAPARSER', '0') == '1'\n    if is_real_data:\n        dataparser = ColmapDataParserConfig(train_split_fraction=0.95)\n    else:\n        dataparser = NerfstudioDataParserConfig(train_split_fraction=0.95)\n    return dataparser\n\nf3rm_method = MethodSpecification(\n    config=TrainerConfig(\n        method_name=\"f3rm\",\n        steps_per_eval_batch=500,\n        steps_per_save=2000,\n        max_num_iterations=30000,\n        mixed_precision=True,\n        pipeline=VanillaPipelineConfig(\n            datamanager=FeatureDataManagerConfig(\n                feature_type=\"CLIP\",\n                dataparser=get_dataparser_config(),\n                train_num_rays_per_batch=4096,\n                eval_num_rays_per_batch=4096,\n                camera_optimizer=CameraOptimizerConfig(\n                    mode=\"SO3xR3\",\n                    optimizer=AdamOptimizerConfig(lr=6e-4, eps=1e-8, weight_decay=1e-2),\n                ),\n            ),\n            # To support more GPUs, we reduce the num rays per chunk. The default was 1 << 15 which uses ~16GB of GPU\n            # memory when training and using viewer. 1 << 14 uses ~12GB of GPU memory in comparison. The decrease in\n            # rendering speed is not too important.\n            model=FeatureFieldModelConfig(eval_num_rays_per_chunk=1 << 14),\n        ),\n        optimizers={\n            \"proposal_networks\": {\n                \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n                \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n            },\n            \"fields\": {\n                \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n                \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n            },\n            \"feature_field\": {\n                \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n                \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n            },\n        },\n        viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n        vis=\"viewer\",\n    ),\n    description=\"F3RM with parallel NeRF training and feature field distillation.\",\n)\n"
  },
  {
    "path": "third_party/f3rm/f3rm/feature_datamanager.py",
    "content": "import gc\nfrom dataclasses import dataclass, field\nfrom typing import Dict, Literal, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom jaxtyping import Float\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.datamanagers.base_datamanager import (\n    VanillaDataManager,\n    VanillaDataManagerConfig,\n)\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nfrom f3rm.features.clip_extract import CLIPArgs, extract_clip_features\nfrom f3rm.features.dino_extract import DINOArgs, extract_dino_features\n\n@dataclass\nclass FeatureDataManagerConfig(VanillaDataManagerConfig):\n    _target: Type = field(default_factory=lambda: FeatureDataManager)\n    feature_type: Literal[\"CLIP\", \"DINO\"] = \"CLIP\"\n    \"\"\"Feature type to extract.\"\"\"\n    enable_cache: bool = True\n    \"\"\"Whether to cache extracted features.\"\"\"\n\n\nfeat_type_to_extract_fn = {\n    \"CLIP\": extract_clip_features,\n    \"DINO\": extract_dino_features,\n}\n\nfeat_type_to_args = {\n    \"CLIP\": CLIPArgs,\n    \"DINO\": DINOArgs,\n}\n\n\n\n\nclass FeatureDataManager(VanillaDataManager):\n    config: FeatureDataManagerConfig\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        # Extract features\n        features = self.extract_features()\n\n        # Split into train and eval features\n        self.train_features = features[: len(self.train_dataset)]\n        self.eval_features = features[len(self.train_dataset) :]\n        assert len(self.eval_features) == len(self.eval_dataset)\n\n        # Set metadata, so we can initialize model with feature dimensionality\n        self.train_dataset.metadata[\"feature_type\"] = self.config.feature_type\n        self.train_dataset.metadata[\"feature_dim\"] = self.train_features.shape[-1]\n\n        # Determine scaling factors for nearest neighbor interpolation\n        feat_h, feat_w = features.shape[1:3]\n        im_h = set(self.train_dataset.cameras.image_height.squeeze().tolist())\n        im_w = set(self.train_dataset.cameras.image_width.squeeze().tolist())\n        assert len(im_h) == 1, \"All images must have the same height\"\n        assert len(im_w) == 1, \"All images must have the same width\"\n        im_h, im_w = im_h.pop(), im_w.pop()\n        self.scale_h = feat_h / im_h\n        self.scale_w = feat_w / im_w\n        assert np.isclose(\n            self.scale_h, self.scale_w, atol=1.5e-3\n        ), f\"Scales must be similar, got h={self.scale_h} and w={self.scale_w}\"\n\n        # Garbage collect\n        torch.cuda.empty_cache()\n        gc.collect()\n\n    def extract_features(self) -> Float[torch.Tensor, \"n h w c\"]:\n        \"\"\"Extract features with support for caching.\"\"\"\n        if self.config.feature_type not in feat_type_to_extract_fn:\n            raise ValueError(f\"Unknown feature type {self.config.feature_type}\")\n        extract_fn = feat_type_to_extract_fn[self.config.feature_type]\n        extract_args = feat_type_to_args[self.config.feature_type]\n        image_fnames = self.train_dataset.image_filenames + self.eval_dataset.image_filenames\n\n        # If cache exists, load it and validate it. We save it to the dataset directory.\n        cache_dir = self.config.dataparser.data\n        cache_path = cache_dir / f\"f3rm_{self.config.feature_type.lower()}_features.pt\"\n        if self.config.enable_cache and cache_path.exists():\n            cache_dict = torch.load(cache_path, weights_only=False)\n            if cache_dict.get(\"image_fnames\") != image_fnames:\n                CONSOLE.print(\"Image filenames have changed, cache invalidated...\")\n            elif cache_dict.get(\"args\") != extract_args.id_dict():\n                CONSOLE.print(\"Feature extraction args have changed, cache invalidated...\")\n            else:\n                return cache_dict[\"features\"]\n\n        # Cache is invalid or doesn't exist, so extract features\n        CONSOLE.print(f\"Extracting {self.config.feature_type} features for {len(image_fnames)} images...\")\n\n        features = extract_fn(image_fnames, self.device)\n        if self.config.enable_cache:\n            cache_dict = {\"args\": extract_args.id_dict(), \"image_fnames\": image_fnames, \"features\": features}\n            cache_dir.mkdir(exist_ok=True)\n            torch.save(cache_dict, cache_path)\n            CONSOLE.print(f\"Saved {self.config.feature_type} features to cache at {cache_path}\")\n\n        return features\n\n    def next_train(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Nearest neighbor interpolation of features\"\"\"\n        ray_bundle, batch = super().next_train(step)\n        ray_indices = batch[\"indices\"]\n        camera_idx = ray_indices[:, 0]\n        y_idx = (ray_indices[:, 1] * self.scale_h).long()\n        x_idx = (ray_indices[:, 2] * self.scale_w).long()\n        batch[\"feature\"] = self.train_features[camera_idx, y_idx, x_idx]\n        return ray_bundle, batch\n\n    def next_eval(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Nearest neighbor interpolation of features\"\"\"\n        ray_bundle, batch = super().next_eval(step)\n        ray_indices = batch[\"indices\"]\n        camera_idx = ray_indices[:, 0]\n        y_idx = (ray_indices[:, 1] * self.scale_h).long()\n        x_idx = (ray_indices[:, 2] * self.scale_w).long()\n        batch[\"feature\"] = self.eval_features[camera_idx, y_idx, x_idx]\n        return ray_bundle, batch\n"
  },
  {
    "path": "third_party/f3rm/f3rm/feature_field.py",
    "content": "from typing import Dict, Optional, Tuple\n\nimport numpy as np\nimport tinycudann as tcnn\nfrom jaxtyping import Float, Shaped\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SpatialDistortion\nfrom nerfstudio.fields.base_field import Field\nfrom torch import Tensor\nimport torch\nimport os\nfrom nerfstudio.utils.rich_utils import CONSOLE\nfrom nerfstudio.data.scene_box import SceneBox\n\nclass FeatureFieldHeadNames:\n    FEATURE: str = \"feature\"\n\n\nclass FeatureField(Field):\n    aabb: Tensor\n\n    def __init__(\n        self,\n        feature_dim: int,\n        spatial_distortion: SpatialDistortion,\n        aabb: Tensor,\n        # Positional encoding\n        use_pe: bool = True,\n        pe_n_freq: int = 6,\n        # Hash grid\n        num_levels: int = 12,\n        log2_hashmap_size: int = 19,\n        start_res: int = 16,\n        max_res: int = 128,\n        features_per_level: int = 8,\n        # MLP head\n        hidden_dim: int = 64,\n        num_layers: int = 2,\n    ):\n        super().__init__()\n        self.feature_dim = feature_dim\n        self.spatial_distortion = spatial_distortion\n        self.register_buffer(\"aabb\", aabb)\n\n        # Feature field has its own hash grid\n        growth_factor = np.exp((np.log(max_res) - np.log(start_res)) / (num_levels - 1))\n        encoding_config = {\n            \"otype\": \"Composite\",\n            \"nested\": [\n                {\n                    \"otype\": \"HashGrid\",\n                    \"n_levels\": num_levels,\n                    \"n_features_per_level\": features_per_level,\n                    \"log2_hashmap_size\": log2_hashmap_size,\n                    \"base_resolution\": start_res,\n                    \"per_level_scale\": growth_factor,\n                }\n            ],\n        }\n\n        if use_pe:\n            encoding_config[\"nested\"].append(\n                {\n                    \"otype\": \"Frequency\",\n                    \"n_frequencies\": pe_n_freq,\n                    \"n_dims_to_encode\": 3,\n                }\n            )\n\n        self.field = tcnn.NetworkWithInputEncoding(\n            n_input_dims=3,\n            n_output_dims=self.feature_dim,\n            encoding_config=encoding_config,\n            network_config={\n                \"otype\": \"FullyFusedMLP\",\n                \"activation\": \"ReLU\",\n                \"output_activation\": \"None\",\n                \"n_neurons\": hidden_dim,\n                \"n_hidden_layers\": num_layers,\n            },\n        )\n\n\n\n\n\n    def get_density(\n        self, ray_samples: RaySamples\n    ) -> Tuple[Shaped[Tensor, \"*batch 1\"], Float[Tensor, \"*batch num_features\"]]:\n        raise NotImplementedError(\"get_density not supported for FeatureField\")\n\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        outputs = {}\n        # Apply scene contraction\n        if self.spatial_distortion is not None:\n            positions = ray_samples.frustums.get_positions().detach()\n            positions = self.spatial_distortion(positions)\n            positions = (positions + 2.0) / 4.0\n        else:\n            positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n\n        positions_flat = positions.view(-1, 3)\n\n        # Get features from the neural network\n        features = self.field(positions_flat).view(*ray_samples.frustums.directions.shape[:-1], -1)\n        \n        outputs[FeatureFieldHeadNames.FEATURE] = features\n\n        return outputs\n\n\n\n    def forward(self, ray_samples: RaySamples, compute_normals: bool = False) -> Dict[FieldHeadNames, Tensor]:\n        if compute_normals:\n            raise ValueError(\"FeatureField does not support computing normals\")\n        return self.get_outputs(ray_samples)\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/README.md",
    "content": "# CLIP\nModified version of [CLIP](https://github.com/openai/CLIP) with support for dense patch-level feature extraction \n(based on [MaskCLIP](https://arxiv.org/abs/2112.01071) parametrization) and interpolation of the positional encoding.\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/__init__.py",
    "content": "from .clip import *\n\n\"\"\"\nModified from https://github.com/openai/CLIP\n\"\"\"\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/clip.py",
    "content": "import hashlib\nimport os\nimport urllib\nimport warnings\nfrom typing import Any, Union, List\nfrom pkg_resources import packaging\n\nimport torch\nfrom PIL import Image\nfrom torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize\nfrom tqdm import tqdm\n\nfrom f3rm.features.clip.model import build_model\nfrom f3rm.features.clip.simple_tokenizer import SimpleTokenizer as _Tokenizer\n\ntry:\n    from torchvision.transforms import InterpolationMode\n\n    BICUBIC = InterpolationMode.BICUBIC\nexcept ImportError:\n    BICUBIC = Image.BICUBIC\n\nif packaging.version.parse(torch.__version__) < packaging.version.parse(\"1.7.1\"):\n    warnings.warn(\"PyTorch version 1.7.1 or higher is recommended\")\n\n__all__ = [\"available_models\", \"load\", \"tokenize\"]\n_tokenizer = _Tokenizer()\n\n_MODELS = {\n    \"RN50\": \"https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt\",\n    \"RN101\": \"https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt\",\n    \"RN50x4\": \"https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt\",\n    \"RN50x16\": \"https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt\",\n    \"RN50x64\": \"https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt\",\n    \"ViT-B/32\": \"https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt\",\n    \"ViT-B/16\": \"https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt\",\n    \"ViT-L/14\": \"https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt\",\n    \"ViT-L/14@336px\": \"https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt\",\n}\n\n\ndef _download(url: str, root: str):\n    os.makedirs(root, exist_ok=True)\n    filename = os.path.basename(url)\n\n    expected_sha256 = url.split(\"/\")[-2]\n    download_target = os.path.join(root, filename)\n\n    if os.path.exists(download_target) and not os.path.isfile(download_target):\n        raise RuntimeError(f\"{download_target} exists and is not a regular file\")\n\n    if os.path.isfile(download_target):\n        if hashlib.sha256(open(download_target, \"rb\").read()).hexdigest() == expected_sha256:\n            return download_target\n        else:\n            warnings.warn(f\"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file\")\n\n    print(f\"Downloading CLIP model from {url}\")\n    with urllib.request.urlopen(url) as source, open(download_target, \"wb\") as output:\n        with tqdm(total=int(source.info().get(\"Content-Length\")), ncols=80, unit='iB', unit_scale=True,\n                  unit_divisor=1024) as loop:\n            while True:\n                buffer = source.read(8192)\n                if not buffer:\n                    break\n\n                output.write(buffer)\n                loop.update(len(buffer))\n\n    if hashlib.sha256(open(download_target, \"rb\").read()).hexdigest() != expected_sha256:\n        raise RuntimeError(\"Model has been downloaded but the SHA256 checksum does not not match\")\n\n    return download_target\n\n\ndef _convert_image_to_rgb(image):\n    return image.convert(\"RGB\")\n\n\ndef _transform(n_px):\n    return Compose([\n        Resize(n_px, interpolation=BICUBIC),\n        CenterCrop(n_px),\n        _convert_image_to_rgb,\n        ToTensor(),\n        Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)),\n    ])\n\n\ndef available_models() -> List[str]:\n    \"\"\"Returns the names of available CLIP models\"\"\"\n    return list(_MODELS.keys())\n\n\nTORCH_HUB_ROOT = os.path.expandvars(os.getenv(\"$TORCH_HUB_ROOT\", \"$HOME/.torch_hub\"))\n\n\ndef load(\n        name: str,\n        device: Union[str, torch.device] = \"cuda\" if torch.cuda.is_available() else \"cpu\",\n        jit: bool = False,\n        download_root: str = None\n):\n    \"\"\"Load a CLIP model\n\n    Parameters\n    ----------\n    name : str\n        A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict\n\n    device : Union[str, torch.device]\n        The device to put the loaded model\n\n    jit : bool\n        Whether to load the optimized JIT model or more hackable non-JIT model (default).\n\n    download_root: str\n        path to download the model files; by default, it uses \"~/.torch_hub/clip\"\n\n    Returns\n    -------\n    model : torch.nn.Module\n        The CLIP model\n\n    preprocess : Callable[[PIL.Image], torch.Tensor]\n        A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input\n    \"\"\"\n    if name in _MODELS:\n        model_path = _download(_MODELS[name], download_root or TORCH_HUB_ROOT)\n    elif os.path.isfile(name):\n        model_path = name\n    else:\n        raise RuntimeError(f\"Model {name} not found; available models = {available_models()}\")\n\n    with open(model_path, 'rb') as opened_file:\n        try:\n            # loading JIT archive\n            model = torch.jit.load(opened_file, map_location=device if jit else \"cpu\").eval()\n            state_dict = None\n        except RuntimeError:\n            # loading saved state dict\n            if jit:\n                warnings.warn(f\"File {model_path} is not a JIT archive. Loading as a state dict instead\")\n                jit = False\n            state_dict = torch.load(opened_file, map_location=\"cpu\")\n\n    if not jit:\n        model = build_model(state_dict or model.state_dict()).to(device)\n        if str(device) == \"cpu\":\n            model.float()\n        return model, _transform(model.visual.input_resolution)\n\n    # patch the device names\n    device_holder = torch.jit.trace(lambda: torch.ones([]).to(torch.device(device)), example_inputs=[])\n    device_node = [n for n in device_holder.graph.findAllNodes(\"prim::Constant\") if \"Device\" in repr(n)][-1]\n\n    def patch_device(module):\n        try:\n            graphs = [module.graph] if hasattr(module, \"graph\") else []\n        except RuntimeError:\n            graphs = []\n\n        if hasattr(module, \"forward1\"):\n            graphs.append(module.forward1.graph)\n\n        for graph in graphs:\n            for node in graph.findAllNodes(\"prim::Constant\"):\n                if \"value\" in node.attributeNames() and str(node[\"value\"]).startswith(\"cuda\"):\n                    node.copyAttributes(device_node)\n\n    model.apply(patch_device)\n    patch_device(model.encode_image)\n    patch_device(model.encode_text)\n\n    # patch dtype to float32 on CPU\n    if str(device) == \"cpu\":\n        float_holder = torch.jit.trace(lambda: torch.ones([]).float(), example_inputs=[])\n        float_input = list(float_holder.graph.findNode(\"aten::to\").inputs())[1]\n        float_node = float_input.node()\n\n        def patch_float(module):\n            try:\n                graphs = [module.graph] if hasattr(module, \"graph\") else []\n            except RuntimeError:\n                graphs = []\n\n            if hasattr(module, \"forward1\"):\n                graphs.append(module.forward1.graph)\n\n            for graph in graphs:\n                for node in graph.findAllNodes(\"aten::to\"):\n                    inputs = list(node.inputs())\n                    for i in [1, 2]:  # dtype can be the second or third argument to aten::to()\n                        if inputs[i].node()[\"value\"] == 5:\n                            inputs[i].node().copyAttributes(float_node)\n\n        model.apply(patch_float)\n        patch_float(model.encode_image)\n        patch_float(model.encode_text)\n\n        model.float()\n\n    return model, _transform(model.input_resolution.item())\n\n\ndef tokenize(texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False) -> Union[\n    torch.IntTensor, torch.LongTensor]:\n    \"\"\"\n    Returns the tokenized representation of given input string(s)\n\n    Parameters\n    ----------\n    texts : Union[str, List[str]]\n        An input string or a list of input strings to tokenize\n\n    context_length : int\n        The context length to use; all CLIP models use 77 as the context length\n\n    truncate: bool\n        Whether to truncate the text in case its encoding is longer than the context length\n\n    Returns\n    -------\n    A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length].\n    We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long.\n    \"\"\"\n    if isinstance(texts, str):\n        texts = [texts]\n\n    sot_token = _tokenizer.encoder[\"<|startoftext|>\"]\n    eot_token = _tokenizer.encoder[\"<|endoftext|>\"]\n    all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts]\n    if packaging.version.parse(torch.__version__) < packaging.version.parse(\"1.8.0\"):\n        result = torch.zeros(len(all_tokens), context_length, dtype=torch.long)\n    else:\n        result = torch.zeros(len(all_tokens), context_length, dtype=torch.int)\n\n    for i, tokens in enumerate(all_tokens):\n        if len(tokens) > context_length:\n            if truncate:\n                tokens = tokens[:context_length]\n                tokens[-1] = eot_token\n            else:\n                raise RuntimeError(f\"Input {texts[i]} is too long for context length {context_length}\")\n        result[i, :len(tokens)] = torch.tensor(tokens)\n\n    return result\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/interpolate.py",
    "content": "import numpy as np\nimport torch\n\n\ndef interpolate_positional_embedding(\n    positional_embedding: torch.Tensor, x: torch.Tensor, patch_size: int, w: int, h: int\n):\n    \"\"\"\n    Interpolate the positional encoding for CLIP to the number of patches in the image given width and height.\n    Modified from DINO ViT `interpolate_pos_encoding` method.\n    https://github.com/facebookresearch/dino/blob/7c446df5b9f45747937fb0d72314eb9f7b66930a/vision_transformer.py#L174\n    \"\"\"\n    assert positional_embedding.ndim == 2, \"pos_encoding must be 2D\"\n\n    # Number of patches in input\n    num_patches = x.shape[1] - 1\n    # Original number of patches for square images\n    num_og_patches = positional_embedding.shape[0] - 1\n\n    if num_patches == num_og_patches and w == h:\n        # No interpolation needed\n        return positional_embedding.to(x.dtype)\n\n    dim = x.shape[-1]\n    class_pos_embed = positional_embedding[:1]  # (1, dim)\n    patch_pos_embed = positional_embedding[1:]  # (num_og_patches, dim)\n\n    # Compute number of tokens\n    w0 = w // patch_size\n    h0 = h // patch_size\n    assert w0 * h0 == num_patches, \"Number of patches does not match\"\n\n    # Add a small number to avoid floating point error in the interpolation\n    # see discussion at https://github.com/facebookresearch/dino/issues/8\n    w0, h0 = w0 + 0.1, h0 + 0.1\n\n    # Interpolate\n    patch_per_ax = int(np.sqrt(num_og_patches))\n    patch_pos_embed_interp = torch.nn.functional.interpolate(\n        patch_pos_embed.reshape(1, patch_per_ax, patch_per_ax, dim).permute(0, 3, 1, 2),\n        # (1, dim, patch_per_ax, patch_per_ax)\n        scale_factor=(w0 / patch_per_ax, h0 / patch_per_ax),\n        mode=\"bicubic\",\n        align_corners=False,\n        recompute_scale_factor=False,\n    )  # (1, dim, w0, h0)\n    assert (\n        int(w0) == patch_pos_embed_interp.shape[-2] and int(h0) == patch_pos_embed_interp.shape[-1]\n    ), \"Interpolation error.\"\n\n    patch_pos_embed_interp = patch_pos_embed_interp.permute(0, 2, 3, 1).reshape(-1, dim)  # (w0 * h0, dim)\n    # Concat class token embedding and interpolated patch embeddings\n    pos_embed_interp = torch.cat([class_pos_embed, patch_pos_embed_interp], dim=0)  # (w0 * h0 + 1, dim)\n    return pos_embed_interp.to(x.dtype)\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/model.py",
    "content": "from collections import OrderedDict\nfrom typing import Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\n\nfrom f3rm.features.clip.interpolate import interpolate_positional_embedding\n\n\nclass Bottleneck(nn.Module):\n    expansion = 4\n\n    def __init__(self, inplanes, planes, stride=1):\n        super().__init__()\n\n        # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1\n        self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False)\n        self.bn1 = nn.BatchNorm2d(planes)\n        self.relu1 = nn.ReLU(inplace=True)\n\n        self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False)\n        self.bn2 = nn.BatchNorm2d(planes)\n        self.relu2 = nn.ReLU(inplace=True)\n\n        self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity()\n\n        self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False)\n        self.bn3 = nn.BatchNorm2d(planes * self.expansion)\n        self.relu3 = nn.ReLU(inplace=True)\n\n        self.downsample = None\n        self.stride = stride\n\n        if stride > 1 or inplanes != planes * Bottleneck.expansion:\n            # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1\n            self.downsample = nn.Sequential(OrderedDict([\n                (\"-1\", nn.AvgPool2d(stride)),\n                (\"0\", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)),\n                (\"1\", nn.BatchNorm2d(planes * self.expansion))\n            ]))\n\n    def forward(self, x: torch.Tensor):\n        identity = x\n\n        out = self.relu1(self.bn1(self.conv1(x)))\n        out = self.relu2(self.bn2(self.conv2(out)))\n        out = self.avgpool(out)\n        out = self.bn3(self.conv3(out))\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.relu3(out)\n        return out\n\n\nclass AttentionPool2d(nn.Module):\n    def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None):\n        super().__init__()\n        self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5)\n        self.k_proj = nn.Linear(embed_dim, embed_dim)\n        self.q_proj = nn.Linear(embed_dim, embed_dim)\n        self.v_proj = nn.Linear(embed_dim, embed_dim)\n        self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim)\n        self.num_heads = num_heads\n        self.spacial_dim = spacial_dim\n\n    def forward(self, x):\n        x = x.flatten(start_dim=2).permute(2, 0, 1)  # NCHW -> (HW)NC\n        x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0)  # (HW+1)NC\n        x = x + self.positional_embedding[:, None, :].to(x.dtype)  # (HW+1)NC\n        x, _ = F.multi_head_attention_forward(\n            query=x[:1], key=x, value=x,\n            embed_dim_to_check=x.shape[-1],\n            num_heads=self.num_heads,\n            q_proj_weight=self.q_proj.weight,\n            k_proj_weight=self.k_proj.weight,\n            v_proj_weight=self.v_proj.weight,\n            in_proj_weight=None,\n            in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]),\n            bias_k=None,\n            bias_v=None,\n            add_zero_attn=False,\n            dropout_p=0,\n            out_proj_weight=self.c_proj.weight,\n            out_proj_bias=self.c_proj.bias,\n            use_separate_proj_weight=True,\n            training=self.training,\n            need_weights=False\n        )\n        return x.squeeze(0)\n\n    def forward_v(self, x: torch.Tensor):\n        \"\"\"\n        Forward function for computing the value features for dense prediction (i.e., features for every image patch).\n        \"\"\"\n        _, _, w, h = x.shape\n        x = x.flatten(start_dim=2).permute(2, 0, 1)  # NCHW -> (HW)NC\n        x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0)  # (HW+1)NC\n\n        # Interpolate positional embedding to match the size of the input\n        interpolated_pe = interpolate_positional_embedding(self.positional_embedding, x.permute(1, 0, 2), patch_size=1, w=w, h=h)\n        x = x + interpolated_pe[:, None, :]  # (HW+1)NC\n\n        v_in = F.linear(x, self.v_proj.weight, self.v_proj.bias)\n        v_out = F.linear(v_in, self.c_proj.weight, self.c_proj.bias)\n        v_out = v_out.permute(1, 0, 2)  # (HW+1)NC -> N(HW+1)C\n        return v_out\n\n\nclass ModifiedResNet(nn.Module):\n    \"\"\"\n    A ResNet class that is similar to torchvision's but contains the following changes:\n    - There are now 3 \"stem\" convolutions as opposed to 1, with an average pool instead of a max pool.\n    - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1\n    - The final pooling layer is a QKV attention instead of an average pool\n    \"\"\"\n\n    def __init__(self, layers, output_dim, heads, input_resolution=224, width=64):\n        super().__init__()\n        self.output_dim = output_dim\n        self.input_resolution = input_resolution\n\n        # the 3-layer stem\n        self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, stride=2, padding=1, bias=False)\n        self.bn1 = nn.BatchNorm2d(width // 2)\n        self.relu1 = nn.ReLU(inplace=True)\n        self.conv2 = nn.Conv2d(width // 2, width // 2, kernel_size=3, padding=1, bias=False)\n        self.bn2 = nn.BatchNorm2d(width // 2)\n        self.relu2 = nn.ReLU(inplace=True)\n        self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False)\n        self.bn3 = nn.BatchNorm2d(width)\n        self.relu3 = nn.ReLU(inplace=True)\n        self.avgpool = nn.AvgPool2d(2)\n\n        # residual layers\n        self._inplanes = width  # this is a *mutable* variable used during construction\n        self.layer1 = self._make_layer(width, layers[0])\n        self.layer2 = self._make_layer(width * 2, layers[1], stride=2)\n        self.layer3 = self._make_layer(width * 4, layers[2], stride=2)\n        self.layer4 = self._make_layer(width * 8, layers[3], stride=2)\n\n        embed_dim = width * 32  # the ResNet feature dimension\n        self.attnpool = AttentionPool2d(input_resolution // 32, embed_dim, heads, output_dim)\n\n    def _make_layer(self, planes, blocks, stride=1):\n        layers = [Bottleneck(self._inplanes, planes, stride)]\n\n        self._inplanes = planes * Bottleneck.expansion\n        for _ in range(1, blocks):\n            layers.append(Bottleneck(self._inplanes, planes))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x, patch_output: bool = False):\n        def stem(x):\n            x = self.relu1(self.bn1(self.conv1(x)))\n            x = self.relu2(self.bn2(self.conv2(x)))\n            x = self.relu3(self.bn3(self.conv3(x)))\n            x = self.avgpool(x)\n            return x\n\n        x = x.type(self.conv1.weight.dtype)\n        x = stem(x)\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n\n        if patch_output:\n            x = self.attnpool.forward_v(x)\n            x = x[:, 1:, :]  # remove the cls token\n        else:\n            x = self.attnpool(x)\n\n        return x\n\n\nclass LayerNorm(nn.LayerNorm):\n    \"\"\"Subclass torch's LayerNorm to handle fp16.\"\"\"\n\n    def forward(self, x: torch.Tensor):\n        orig_type = x.dtype\n        ret = super().forward(x.type(torch.float32))\n        return ret.type(orig_type)\n\n\nclass QuickGELU(nn.Module):\n    def forward(self, x: torch.Tensor):\n        return x * torch.sigmoid(1.702 * x)\n\n\nclass ResidualAttentionBlock(nn.Module):\n    def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None):\n        super().__init__()\n\n        self.attn = nn.MultiheadAttention(d_model, n_head)\n        self.ln_1 = LayerNorm(d_model)\n        self.mlp = nn.Sequential(OrderedDict([\n            (\"c_fc\", nn.Linear(d_model, d_model * 4)),\n            (\"gelu\", QuickGELU()),\n            (\"c_proj\", nn.Linear(d_model * 4, d_model))\n        ]))\n        self.ln_2 = LayerNorm(d_model)\n        self.attn_mask = attn_mask\n\n    def attention(self, x: torch.Tensor):\n        self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None\n        return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0]\n\n    def forward_v(self, x: torch.Tensor):\n        \"\"\"\n        Forward function for computing the value features for dense prediction (i.e., features for every image patch).\n        \"\"\"\n        # Get the weights and biases for the value projection, multihead attention uses 3 * embed_dim for the input projection\n        v_in_proj_weight = self.attn.in_proj_weight[-self.attn.embed_dim:]\n        v_in_proj_bias = self.attn.in_proj_bias[-self.attn.embed_dim:]\n\n        v_in = F.linear(self.ln_1(x), v_in_proj_weight, v_in_proj_bias)\n        v_out = F.linear(v_in, self.attn.out_proj.weight, self.attn.out_proj.bias)\n\n        # Using the value features works the best. Adding this to 'x' or feeding 'v' to the LayerNorm then MLP degrades the performance\n        return v_out\n\n\n    def forward(self, x: torch.Tensor):\n        x = x + self.attention(self.ln_1(x))\n        x = x + self.mlp(self.ln_2(x))\n        return x\n\n\nclass Transformer(nn.Module):\n    def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None):\n        super().__init__()\n        self.width = width\n        self.layers = layers\n        self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)])\n\n    def forward(self, x: torch.Tensor):\n        return self.resblocks(x)\n\n\nclass VisionTransformer(nn.Module):\n    def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int):\n        super().__init__()\n        self.input_resolution = input_resolution\n        self.output_dim = output_dim\n        self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False)\n\n        scale = width ** -0.5\n        self.class_embedding = nn.Parameter(scale * torch.randn(width))\n        self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width))\n        self.ln_pre = LayerNorm(width)\n\n        self.transformer = Transformer(width, layers, heads)\n\n        self.ln_post = LayerNorm(width)\n        self.proj = nn.Parameter(scale * torch.randn(width, output_dim))\n\n        self.patch_size = patch_size\n\n    def forward(self, x: torch.Tensor, patch_output: bool = False):\n        _, _, w, h = x.shape\n\n        x = self.conv1(x)  # shape = [*, width, grid, grid]\n        x = x.reshape(x.shape[0], x.shape[1], -1)  # shape = [*, width, grid ** 2]\n        x = x.permute(0, 2, 1)  # shape = [*, grid ** 2, width]\n        x = torch.cat([self.class_embedding.to(x.dtype) + torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device), x], dim=1)  # shape = [*, grid ** 2 + 1, width]\n        x = x + interpolate_positional_embedding(self.positional_embedding, x, patch_size=self.patch_size, w=w, h=h)\n        x = self.ln_pre(x)\n\n        x = x.permute(1, 0, 2)  # NLD -> LND\n\n        if patch_output:\n            *layers, last_resblock = self.transformer.resblocks\n            penultimate = nn.Sequential(*layers)\n\n            x = penultimate(x)\n            x = last_resblock.forward_v(x)\n            x = x.permute(1, 0, 2)  # LND -> NLD\n\n            # Extract the patch tokens, not the class token\n            x = x[:, 1:, :]\n            x = self.ln_post(x)\n            if self.proj is not None:\n                # This is equivalent to conv1d\n                x = x @ self.proj\n        return x\n\n        x = self.transformer(x)\n        x = x.permute(1, 0, 2)  # LND -> NLD\n\n        x = self.ln_post(x[:, 0, :])\n\n        if self.proj is not None:\n            x = x @ self.proj\n\n        return x\n\n\nclass CLIP(nn.Module):\n    def __init__(self,\n                 embed_dim: int,\n                 # vision\n                 image_resolution: int,\n                 vision_layers: Union[Tuple[int, int, int, int], int],\n                 vision_width: int,\n                 vision_patch_size: int,\n                 # text\n                 context_length: int,\n                 vocab_size: int,\n                 transformer_width: int,\n                 transformer_heads: int,\n                 transformer_layers: int\n                 ):\n        super().__init__()\n\n        self.context_length = context_length\n\n        if isinstance(vision_layers, (tuple, list)):\n            vision_heads = vision_width * 32 // 64\n            self.visual = ModifiedResNet(\n                layers=vision_layers,\n                output_dim=embed_dim,\n                heads=vision_heads,\n                input_resolution=image_resolution,\n                width=vision_width\n            )\n        else:\n            vision_heads = vision_width // 64\n            self.visual = VisionTransformer(\n                input_resolution=image_resolution,\n                patch_size=vision_patch_size,\n                width=vision_width,\n                layers=vision_layers,\n                heads=vision_heads,\n                output_dim=embed_dim\n            )\n\n        self.transformer = Transformer(\n            width=transformer_width,\n            layers=transformer_layers,\n            heads=transformer_heads,\n            attn_mask=self.build_attention_mask()\n        )\n\n        self.vocab_size = vocab_size\n        self.token_embedding = nn.Embedding(vocab_size, transformer_width)\n        self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width))\n        self.ln_final = LayerNorm(transformer_width)\n\n        self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim))\n        self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07))\n\n        self.initialize_parameters()\n\n    def initialize_parameters(self):\n        nn.init.normal_(self.token_embedding.weight, std=0.02)\n        nn.init.normal_(self.positional_embedding, std=0.01)\n\n        if isinstance(self.visual, ModifiedResNet):\n            if self.visual.attnpool is not None:\n                std = self.visual.attnpool.c_proj.in_features ** -0.5\n                nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std)\n                nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std)\n\n            for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]:\n                for name, param in resnet_block.named_parameters():\n                    if name.endswith(\"bn3.weight\"):\n                        nn.init.zeros_(param)\n\n        proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5)\n        attn_std = self.transformer.width ** -0.5\n        fc_std = (2 * self.transformer.width) ** -0.5\n        for block in self.transformer.resblocks:\n            nn.init.normal_(block.attn.in_proj_weight, std=attn_std)\n            nn.init.normal_(block.attn.out_proj.weight, std=proj_std)\n            nn.init.normal_(block.mlp.c_fc.weight, std=fc_std)\n            nn.init.normal_(block.mlp.c_proj.weight, std=proj_std)\n\n        if self.text_projection is not None:\n            nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5)\n\n    def build_attention_mask(self):\n        # lazily create causal attention mask, with full attention between the vision tokens\n        # pytorch uses additive attention mask; fill with -inf\n        mask = torch.empty(self.context_length, self.context_length)\n        mask.fill_(float(\"-inf\"))\n        mask.triu_(1)  # zero out the lower diagonal\n        return mask\n\n    @property\n    def dtype(self):\n        return self.visual.conv1.weight.dtype\n\n    def encode_image(self, image):\n        return self.visual(image.type(self.dtype))\n\n    def get_patch_encodings(self, image) -> torch.Tensor:\n        \"\"\" Get the encodings for each patch in the image \"\"\"\n        return self.visual(image.type(self.dtype), patch_output=True)\n\n    def get_image_encoder_projection(self) -> nn.Parameter:\n        \"\"\" Get vision transformer projection matrix.\"\"\"\n        assert isinstance(self.visual, VisionTransformer)\n        return self.visual.proj\n\n    def encode_text(self, text):\n        x = self.token_embedding(text).type(self.dtype)  # [batch_size, n_ctx, d_model]\n\n        x = x + self.positional_embedding.type(self.dtype)\n        x = x.permute(1, 0, 2)  # NLD -> LND\n        x = self.transformer(x)\n        x = x.permute(1, 0, 2)  # LND -> NLD\n        x = self.ln_final(x).type(self.dtype)\n\n        # x.shape = [batch_size, n_ctx, transformer.width]\n        # take features from the eot embedding (eot_token is the highest number in each sequence)\n        x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection\n\n        return x\n\n    def forward(self, image, text):\n        image_features = self.encode_image(image)\n        text_features = self.encode_text(text)\n\n        # normalized features\n        image_features = image_features / image_features.norm(dim=1, keepdim=True)\n        text_features = text_features / text_features.norm(dim=1, keepdim=True)\n\n        # cosine similarity as logits\n        logit_scale = self.logit_scale.exp()\n        logits_per_image = logit_scale * image_features @ text_features.t()\n        logits_per_text = logits_per_image.t()\n\n        # shape = [global_batch_size, global_batch_size]\n        return logits_per_image, logits_per_text\n\n\ndef convert_weights(model: nn.Module):\n    \"\"\"Convert applicable model parameters to fp16\"\"\"\n\n    def _convert_weights_to_fp16(l):\n        if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)):\n            l.weight.data = l.weight.data.half()\n            if l.bias is not None:\n                l.bias.data = l.bias.data.half()\n\n        if isinstance(l, nn.MultiheadAttention):\n            for attr in [*[f\"{s}_proj_weight\" for s in [\"in\", \"q\", \"k\", \"v\"]], \"in_proj_bias\", \"bias_k\", \"bias_v\"]:\n                tensor = getattr(l, attr)\n                if tensor is not None:\n                    tensor.data = tensor.data.half()\n\n        for name in [\"text_projection\", \"proj\"]:\n            if hasattr(l, name):\n                attr = getattr(l, name)\n                if attr is not None:\n                    attr.data = attr.data.half()\n\n    model.apply(_convert_weights_to_fp16)\n\n\ndef build_model(state_dict: dict):\n    vit = \"visual.proj\" in state_dict\n\n    if vit:\n        vision_width = state_dict[\"visual.conv1.weight\"].shape[0]\n        vision_layers = len([k for k in state_dict.keys() if k.startswith(\"visual.\") and k.endswith(\".attn.in_proj_weight\")])\n        vision_patch_size = state_dict[\"visual.conv1.weight\"].shape[-1]\n        grid_size = round((state_dict[\"visual.positional_embedding\"].shape[0] - 1) ** 0.5)\n        image_resolution = vision_patch_size * grid_size\n    else:\n        counts: list = [len(set(k.split(\".\")[2] for k in state_dict if k.startswith(f\"visual.layer{b}\"))) for b in [1, 2, 3, 4]]\n        vision_layers = tuple(counts)\n        vision_width = state_dict[\"visual.layer1.0.conv1.weight\"].shape[0]\n        output_width = round((state_dict[\"visual.attnpool.positional_embedding\"].shape[0] - 1) ** 0.5)\n        vision_patch_size = None\n        assert output_width ** 2 + 1 == state_dict[\"visual.attnpool.positional_embedding\"].shape[0]\n        image_resolution = output_width * 32\n\n    embed_dim = state_dict[\"text_projection\"].shape[1]\n    context_length = state_dict[\"positional_embedding\"].shape[0]\n    vocab_size = state_dict[\"token_embedding.weight\"].shape[0]\n    transformer_width = state_dict[\"ln_final.weight\"].shape[0]\n    transformer_heads = transformer_width // 64\n    transformer_layers = len(set(k.split(\".\")[2] for k in state_dict if k.startswith(\"transformer.resblocks\")))\n\n    model = CLIP(\n        embed_dim,\n        image_resolution, vision_layers, vision_width, vision_patch_size,\n        context_length, vocab_size, transformer_width, transformer_heads, transformer_layers\n    )\n\n    for key in [\"input_resolution\", \"context_length\", \"vocab_size\"]:\n        if key in state_dict:\n            del state_dict[key]\n\n    convert_weights(model)\n    model.load_state_dict(state_dict)\n    return model.eval()\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip/simple_tokenizer.py",
    "content": "import gzip\nimport html\nimport os\nfrom collections.abc import Sequence\nfrom functools import lru_cache\n\nimport ftfy\nimport regex as re\n\n\n@lru_cache()\ndef default_bpe():\n    return os.path.join(os.path.dirname(os.path.abspath(__file__)), \"bpe_simple_vocab_16e6.txt.gz\")\n\n\n@lru_cache()\ndef bytes_to_unicode():\n    \"\"\"\n    Returns list of utf-8 byte and a corresponding list of unicode strings.\n    The reversible bpe codes work on unicode strings.\n    This means you need a large # of unicode characters in your vocab if you want to avoid UNKs.\n    When you're at something like a 10B token dataset you end up needing around 5K for decent coverage.\n    This is a signficant percentage of your normal, say, 32K bpe vocab.\n    To avoid that, we want lookup tables between utf-8 bytes and unicode strings.\n    And avoids mapping to whitespace/control characters the bpe code barfs on.\n    \"\"\"\n    bs = list(range(ord(\"!\"), ord(\"~\")+1))+list(range(ord(\"¡\"), ord(\"¬\")+1))+list(range(ord(\"®\"), ord(\"ÿ\")+1))\n    cs = bs[:]\n    n = 0\n    for b in range(2**8):\n        if b not in bs:\n            bs.append(b)\n            cs.append(2**8+n)\n            n += 1\n    cs = [chr(n) for n in cs]\n    return dict(zip(bs, cs))\n\n\ndef get_pairs(word):\n    \"\"\"Return set of symbol pairs in a word.\n    Word is represented as tuple of symbols (symbols being variable-length strings).\n    \"\"\"\n    pairs = set()\n    prev_char = word[0]\n    for char in word[1:]:\n        pairs.add((prev_char, char))\n        prev_char = char\n    return pairs\n\n\ndef basic_clean(text):\n    # note: pretty hacky but it is okay!\n    # ge: bad.this is used by the cli_multi_label.py script\n    if not isinstance(text, str):\n        text = ', '.join(text)\n\n    text = ftfy.fix_text(text)\n    text = html.unescape(html.unescape(text))\n    return text.strip()\n\n\ndef whitespace_clean(text):\n    text = re.sub(r'\\s+', ' ', text)\n    text = text.strip()\n    return text\n\n\nclass SimpleTokenizer(object):\n    def __init__(self, bpe_path: str = default_bpe()):\n        self.byte_encoder = bytes_to_unicode()\n        self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}\n        merges = gzip.open(bpe_path).read().decode(\"utf-8\").split('\\n')\n        merges = merges[1:49152-256-2+1]\n        merges = [tuple(merge.split()) for merge in merges]\n        vocab = list(bytes_to_unicode().values())\n        vocab = vocab + [v+'</w>' for v in vocab]\n        for merge in merges:\n            vocab.append(''.join(merge))\n        vocab.extend(['<|startoftext|>', '<|endoftext|>'])\n        self.encoder = dict(zip(vocab, range(len(vocab))))\n        self.decoder = {v: k for k, v in self.encoder.items()}\n        self.bpe_ranks = dict(zip(merges, range(len(merges))))\n        self.cache = {'<|startoftext|>': '<|startoftext|>', '<|endoftext|>': '<|endoftext|>'}\n        self.pat = re.compile(r\"\"\"<\\|startoftext\\|>|<\\|endoftext\\|>|'s|'t|'re|'ve|'m|'ll|'d|[\\p{L}]+|[\\p{N}]|[^\\s\\p{L}\\p{N}]+\"\"\", re.IGNORECASE)\n\n    def bpe(self, token):\n        if token in self.cache:\n            return self.cache[token]\n        word = tuple(token[:-1]) + ( token[-1] + '</w>',)\n        pairs = get_pairs(word)\n\n        if not pairs:\n            return token+'</w>'\n\n        while True:\n            bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf')))\n            if bigram not in self.bpe_ranks:\n                break\n            first, second = bigram\n            new_word = []\n            i = 0\n            while i < len(word):\n                try:\n                    j = word.index(first, i)\n                    new_word.extend(word[i:j])\n                    i = j\n                except:\n                    new_word.extend(word[i:])\n                    break\n\n                if word[i] == first and i < len(word)-1 and word[i+1] == second:\n                    new_word.append(first+second)\n                    i += 2\n                else:\n                    new_word.append(word[i])\n                    i += 1\n            new_word = tuple(new_word)\n            word = new_word\n            if len(word) == 1:\n                break\n            else:\n                pairs = get_pairs(word)\n        word = ' '.join(word)\n        self.cache[token] = word\n        return word\n\n    def encode(self, text):\n        bpe_tokens = []\n        text = whitespace_clean(basic_clean(text)).lower()\n        for token in re.findall(self.pat, text):\n            token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8'))\n            bpe_tokens.extend(self.encoder[bpe_token] for bpe_token in self.bpe(token).split(' '))\n        return bpe_tokens\n\n    def decode(self, tokens):\n        text = ''.join([self.decoder[token] for token in tokens])\n        text = bytearray([self.byte_decoder[c] for c in text]).decode('utf-8', errors=\"replace\").replace('</w>', ' ')\n        return text\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip_extract.py",
    "content": "import gc\nfrom typing import List\n\nimport torch\nfrom einops import rearrange\nfrom PIL import Image\nfrom torchvision.transforms import CenterCrop, Compose\nfrom tqdm import tqdm\n\n\nclass CLIPArgs:\n    model_name: str = \"ViT-L/14@336px\"\n    skip_center_crop: bool = True\n    batch_size: int = 64\n\n    @classmethod\n    def id_dict(cls):\n        \"\"\"Return dict that identifies the CLIP model parameters.\"\"\"\n        return {\n            \"model_name\": cls.model_name,\n            \"skip_center_crop\": cls.skip_center_crop,\n        }\n\n\n\n\n@torch.no_grad()\ndef extract_sam():\n    pass\n\n@torch.no_grad()\ndef extract_clip_features(image_paths: List[str], device: torch.device) -> torch.Tensor:\n    \"\"\"Extract dense patch-level CLIP features for given images\"\"\"\n    from f3rm.features.clip import clip\n\n    model, preprocess = clip.load(CLIPArgs.model_name, device=device)\n    print(f\"Loaded CLIP model {CLIPArgs.model_name}\")\n\n    # Patch the preprocess if we want to skip center crop\n    if CLIPArgs.skip_center_crop:\n        # Check there is exactly one center crop transform\n        is_center_crop = [isinstance(t, CenterCrop) for t in preprocess.transforms]\n        assert (\n            sum(is_center_crop) == 1\n        ), \"There should be exactly one CenterCrop transform\"\n        # Create new preprocess without center crop\n        preprocess = Compose(\n            [t for t in preprocess.transforms if not isinstance(t, CenterCrop)]\n        )\n        print(\"Skipping center crop\")\n\n    # Preprocess the images\n    images = [Image.open(path) for path in image_paths]\n    raw_img_H, raw_img_W = images[0].size\n    preprocessed_images = torch.stack([preprocess(image) for image in images])\n    preprocessed_images = preprocessed_images.to(device)  # (b, 3, h, w)\n\n    # Get CLIP embeddings for the images\n    embeddings = []\n    for i in tqdm(\n        range(0, len(preprocessed_images), CLIPArgs.batch_size),\n        desc=\"Extracting CLIP features\",\n    ):\n        batch = preprocessed_images[i : i + CLIPArgs.batch_size]\n        embeddings.append(model.get_patch_encodings(batch))\n    embeddings = torch.cat(embeddings, dim=0)\n\n    # Reshape embeddings from flattened patches to patch height and width\n    h_in, w_in = preprocessed_images.shape[-2:]\n    if CLIPArgs.model_name.startswith(\"ViT\"):\n        h_out = h_in // model.visual.patch_size\n        w_out = w_in // model.visual.patch_size\n    elif CLIPArgs.model_name.startswith(\"RN\"):\n        h_out = max(h_in / w_in, 1.0) * model.visual.attnpool.spacial_dim\n        w_out = max(w_in / h_in, 1.0) * model.visual.attnpool.spacial_dim\n        h_out, w_out = int(h_out), int(w_out)\n    else:\n        raise ValueError(f\"Unknown CLIP model name: {CLIPArgs.model_name}\")\n    embeddings = rearrange(embeddings, \"b (h w) c -> b h w c\", h=h_out, w=w_out)\n    print(f\"Extracted CLIP embeddings of shape {embeddings.shape}\")\n\n    # Delete and clear memory to be safe\n    del model\n    del preprocess\n    del preprocessed_images\n    torch.cuda.empty_cache()\n    gc.collect()\n\n    return embeddings\n    "
  },
  {
    "path": "third_party/f3rm/f3rm/features/clip_sam_extract.py",
    "content": "import gc\nfrom typing import List, Dict\nimport torch\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom PIL import Image\nimport cv2\nfrom torchvision.transforms import CenterCrop, Compose, ToTensor, Normalize\nfrom tqdm import tqdm\nimport numpy as np\n\nclass CLIPSAMArgs:\n    # CLIP settings\n    clip_model_name: str = \"ViT-L/14@336px\"\n    skip_center_crop: bool = True\n    batch_size: int = 64\n    \n    # SAM settings\n    sam_size: int = 1024\n    obj_feat_res: int = 100  # Object-level feature resolution\n    final_feat_res: int = 64  # Final output resolution\n    mobilesamv2_encoder_name: str = 'mobilesamv2_efficientvit_l2'\n    \n    # Detector settings\n    yolo_conf: float = 0.4\n    yolo_iou: float = 0.9\n\n    @classmethod\n    def id_dict(cls):\n        \"\"\"Return dict that identifies the model parameters.\"\"\"\n        return {\n            \"clip_model_name\": cls.clip_model_name,\n            \"skip_center_crop\": cls.skip_center_crop,\n            \"sam_size\": cls.sam_size,\n            \"obj_feat_res\": cls.obj_feat_res,\n            \"final_feat_res\": cls.final_feat_res,\n            \"mobilesamv2_encoder_name\": cls.mobilesamv2_encoder_name,\n            \"yolo_conf\": cls.yolo_conf,\n            \"yolo_iou\": cls.yolo_iou,\n        }\n\n\ndef batch_iterator(batch_size: int, *args):\n    \"\"\"Helper for batch processing.\"\"\"\n    n = len(args[0])\n    for i in range(0, n, batch_size):\n        yield tuple(arg[i:i+batch_size] for arg in args)\n\n\ndef resize_image(img, longest_edge):\n    \"\"\"Resize image to have longest edge equal to longest_edge.\"\"\"\n    w, h = img.size\n    if h > w:\n        new_h, new_w = longest_edge, int(longest_edge * w / h)\n    else:\n        new_h, new_w = int(longest_edge * h / w), longest_edge\n    return img.resize((new_w, new_h), Image.BILINEAR)\n\ndef show_anns(anns):\n    if len(anns) == 0:\n        return\n    img = np.ones((anns.shape[1], anns.shape[2], 4))\n    img[:,:,3] = 0\n    for ann in range(anns.shape[0]):\n        m = anns[ann].bool()\n        m=m.cpu().numpy()\n        color_mask = np.concatenate([np.random.random(3), [1]])\n        img[m] = color_mask\n    return img\n"
  },
  {
    "path": "third_party/f3rm/f3rm/features/dino/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/f3rm/f3rm/features/dino/dino_vit_extractor.py",
    "content": "\"\"\"\nHigh Resolution DINO ViT Feature Extractor\nCopied from https://github.com/ShirAmir/dino-vit-features/blob/main/extractor.py\n\"\"\"\nimport argparse\nimport torch\nfrom torch import nn\nfrom torchvision import transforms\nimport torch.nn.modules.utils as nn_utils\nimport math\nimport types\nfrom pathlib import Path\nfrom typing import Union, List, Tuple\nfrom PIL import Image\n\n\nclass ViTExtractor:\n    \"\"\" This class facilitates extraction of features, descriptors, and saliency maps from a ViT.\n\n    We use the following notation in the documentation of the module's methods:\n    B - batch size\n    h - number of heads. usually takes place of the channel dimension in pytorch's convention BxCxHxW\n    p - patch size of the ViT. either 8 or 16.\n    t - number of tokens. equals the number of patches + 1, e.g. HW / p**2 + 1. Where H and W are the height and width\n    of the input image.\n    d - the embedding dimension in the ViT.\n    \"\"\"\n\n    def __init__(self, model_type: str = 'dino_vits8', stride: int = 4, model: nn.Module = None,\n                 device: Union[str, torch.device] = 'cuda'):\n        \"\"\"\n        :param model_type: A string specifying the type of model to extract from.\n                          [dino_vits8 | dino_vits16 | dino_vitb8 | dino_vitb16 | vit_small_patch8_224 |\n                          vit_small_patch16_224 | vit_base_patch8_224 | vit_base_patch16_224]\n        :param stride: stride of first convolution layer. small stride -> higher resolution.\n        :param model: Optional parameter. The nn.Module to extract from instead of creating a new one in ViTExtractor.\n                      should be compatible with model_type.\n        \"\"\"\n        self.model_type = model_type\n        self.device = device\n        if model is not None:\n            self.model = model\n        else:\n            self.model = ViTExtractor.create_model(model_type)\n\n        self.model = ViTExtractor.patch_vit_resolution(self.model, stride=stride)\n        self.model.eval()\n        self.model.to(self.device)\n        self.p = self.model.patch_embed.patch_size\n        self.stride = self.model.patch_embed.proj.stride\n\n        self.mean = (0.485, 0.456, 0.406) if \"dino\" in self.model_type else (0.5, 0.5, 0.5)\n        self.std = (0.229, 0.224, 0.225) if \"dino\" in self.model_type else (0.5, 0.5, 0.5)\n\n        self._feats = []\n        self.hook_handlers = []\n        self.load_size = None\n        self.num_patches = None\n\n    @staticmethod\n    def create_model(model_type: str) -> nn.Module:\n        \"\"\"\n        :param model_type: a string specifying which model to load. [dino_vits8 | dino_vits16 | dino_vitb8 |\n                           dino_vitb16 | vit_small_patch8_224 | vit_small_patch16_224 | vit_base_patch8_224 |\n                           vit_base_patch16_224]\n        :return: the model\n        \"\"\"\n        if 'dino' in model_type:\n            model = torch.hub.load('facebookresearch/dino:main', model_type)\n        else:  # model from timm -- load weights from timm to dino model (enables working on arbitrary size images).\n            try:\n                import timm\n            except ImportError:\n                raise ImportError(\"Please install timm: pip install timm\")\n            temp_model = timm.create_model(model_type, pretrained=True)\n            model_type_dict = {\n                'vit_small_patch16_224': 'dino_vits16',\n                'vit_small_patch8_224': 'dino_vits8',\n                'vit_base_patch16_224': 'dino_vitb16',\n                'vit_base_patch8_224': 'dino_vitb8'\n            }\n            model = torch.hub.load('facebookresearch/dino:main', model_type_dict[model_type])\n            temp_state_dict = temp_model.state_dict()\n            del temp_state_dict['head.weight']\n            del temp_state_dict['head.bias']\n            model.load_state_dict(temp_state_dict)\n        return model\n\n    @staticmethod\n    def _fix_pos_enc(patch_size: int, stride_hw: Tuple[int, int]):\n        \"\"\"\n        Creates a method for position encoding interpolation.\n        :param patch_size: patch size of the model.\n        :param stride_hw: A tuple containing the new height and width stride respectively.\n        :return: the interpolation method\n        \"\"\"\n        def interpolate_pos_encoding(self, x: torch.Tensor, w: int, h: int) -> torch.Tensor:\n            npatch = x.shape[1] - 1\n            N = self.pos_embed.shape[1] - 1\n            if npatch == N and w == h:\n                return self.pos_embed\n            class_pos_embed = self.pos_embed[:, 0]\n            patch_pos_embed = self.pos_embed[:, 1:]\n            dim = x.shape[-1]\n            # compute number of tokens taking stride into account\n            w0 = 1 + (w - patch_size) // stride_hw[1]\n            h0 = 1 + (h - patch_size) // stride_hw[0]\n            assert (w0 * h0 == npatch), f\"\"\"got wrong grid size for {h}x{w} with patch_size {patch_size} and \n                                            stride {stride_hw} got {h0}x{w0}={h0 * w0} expecting {npatch}\"\"\"\n            # we add a small number to avoid floating point error in the interpolation\n            # see discussion at https://github.com/facebookresearch/dino/issues/8\n            w0, h0 = w0 + 0.1, h0 + 0.1\n            patch_pos_embed = nn.functional.interpolate(\n                patch_pos_embed.reshape(1, int(math.sqrt(N)), int(math.sqrt(N)), dim).permute(0, 3, 1, 2),\n                scale_factor=(w0 / math.sqrt(N), h0 / math.sqrt(N)),\n                mode='bicubic',\n                align_corners=False, recompute_scale_factor=False\n            )\n            assert int(w0) == patch_pos_embed.shape[-2] and int(h0) == patch_pos_embed.shape[-1]\n            patch_pos_embed = patch_pos_embed.permute(0, 2, 3, 1).view(1, -1, dim)\n            return torch.cat((class_pos_embed.unsqueeze(0), patch_pos_embed), dim=1)\n\n        return interpolate_pos_encoding\n\n    @staticmethod\n    def patch_vit_resolution(model: nn.Module, stride: int) -> nn.Module:\n        \"\"\"\n        change resolution of model output by changing the stride of the patch extraction.\n        :param model: the model to change resolution for.\n        :param stride: the new stride parameter.\n        :return: the adjusted model\n        \"\"\"\n        patch_size = model.patch_embed.patch_size\n        if stride == patch_size:  # nothing to do\n            return model\n\n        stride = nn_utils._pair(stride)\n        assert all([(patch_size // s_) * s_ == patch_size for s_ in\n                    stride]), f'stride {stride} should divide patch_size {patch_size}'\n\n        # fix the stride\n        model.patch_embed.proj.stride = stride\n        # fix the positional encoding code\n        model.interpolate_pos_encoding = types.MethodType(ViTExtractor._fix_pos_enc(patch_size, stride), model)\n        return model\n\n    def preprocess(self, image_path: Union[str, Path],\n                   load_size: Union[int, Tuple[int, int]] = None) -> Tuple[torch.Tensor, Image.Image]:\n        \"\"\"\n        Preprocesses an image before extraction.\n        :param image_path: path to image to be extracted.\n        :param load_size: optional. Size to resize image before the rest of preprocessing.\n        :return: a tuple containing:\n                    (1) the preprocessed image as a tensor to insert the model of shape BxCxHxW.\n                    (2) the pil image in relevant dimensions\n        \"\"\"\n        pil_image = Image.open(image_path).convert('RGB')\n        if load_size is not None:\n            pil_image = transforms.Resize(load_size, interpolation=transforms.InterpolationMode.LANCZOS)(pil_image)\n        prep = transforms.Compose([\n            transforms.ToTensor(),\n            transforms.Normalize(mean=self.mean, std=self.std)\n        ])\n        prep_img = prep(pil_image)[None, ...]\n        return prep_img, pil_image\n\n    def _get_hook(self, facet: str):\n        \"\"\"\n        generate a hook method for a specific block and facet.\n        \"\"\"\n        if facet in ['attn', 'token']:\n            def _hook(model, input, output):\n                self._feats.append(output)\n            return _hook\n\n        if facet == 'query':\n            facet_idx = 0\n        elif facet == 'key':\n            facet_idx = 1\n        elif facet == 'value':\n            facet_idx = 2\n        else:\n            raise TypeError(f\"{facet} is not a supported facet.\")\n\n        def _inner_hook(module, input, output):\n            input = input[0]\n            B, N, C = input.shape\n            qkv = module.qkv(input).reshape(B, N, 3, module.num_heads, C // module.num_heads).permute(2, 0, 3, 1, 4)\n            self._feats.append(qkv[facet_idx]) #Bxhxtxd\n        return _inner_hook\n\n    def _register_hooks(self, layers: List[int], facet: str) -> None:\n        \"\"\"\n        register hook to extract features.\n        :param layers: layers from which to extract features.\n        :param facet: facet to extract. One of the following options: ['key' | 'query' | 'value' | 'token' | 'attn']\n        \"\"\"\n        for block_idx, block in enumerate(self.model.blocks):\n            if block_idx in layers:\n                if facet == 'token':\n                    self.hook_handlers.append(block.register_forward_hook(self._get_hook(facet)))\n                elif facet == 'attn':\n                    self.hook_handlers.append(block.attn.attn_drop.register_forward_hook(self._get_hook(facet)))\n                elif facet in ['key', 'query', 'value']:\n                    self.hook_handlers.append(block.attn.register_forward_hook(self._get_hook(facet)))\n                else:\n                    raise TypeError(f\"{facet} is not a supported facet.\")\n\n    def _unregister_hooks(self) -> None:\n        \"\"\"\n        unregisters the hooks. should be called after feature extraction.\n        \"\"\"\n        for handle in self.hook_handlers:\n            handle.remove()\n        self.hook_handlers = []\n\n    def _extract_features(self, batch: torch.Tensor, layers: List[int] = 11, facet: str = 'key') -> List[torch.Tensor]:\n        \"\"\"\n        extract features from the model\n        :param batch: batch to extract features for. Has shape BxCxHxW.\n        :param layers: layer to extract. A number between 0 to 11.\n        :param facet: facet to extract. One of the following options: ['key' | 'query' | 'value' | 'token' | 'attn']\n        :return : tensor of features.\n                  if facet is 'key' | 'query' | 'value' has shape Bxhxtxd\n                  if facet is 'attn' has shape Bxhxtxt\n                  if facet is 'token' has shape Bxtxd\n        \"\"\"\n        B, C, H, W = batch.shape\n        self._feats = []\n        self._register_hooks(layers, facet)\n        _ = self.model(batch)\n        self._unregister_hooks()\n        self.load_size = (H, W)\n        self.num_patches = (1 + (H - self.p) // self.stride[0], 1 + (W - self.p) // self.stride[1])\n        return self._feats\n\n    def _log_bin(self, x: torch.Tensor, hierarchy: int = 2) -> torch.Tensor:\n        \"\"\"\n        create a log-binned descriptor.\n        :param x: tensor of features. Has shape Bxhxtxd.\n        :param hierarchy: how many bin hierarchies to use.\n        \"\"\"\n        B = x.shape[0]\n        num_bins = 1 + 8 * hierarchy\n\n        bin_x = x.permute(0, 2, 3, 1).flatten(start_dim=-2, end_dim=-1)  # Bx(t-1)x(dxh)\n        bin_x = bin_x.permute(0, 2, 1)\n        bin_x = bin_x.reshape(B, bin_x.shape[1], self.num_patches[0], self.num_patches[1])\n        # Bx(dxh)xnum_patches[0]xnum_patches[1]\n        sub_desc_dim = bin_x.shape[1]\n\n        avg_pools = []\n        # compute bins of all sizes for all spatial locations.\n        for k in range(0, hierarchy):\n            # avg pooling with kernel 3**kx3**k\n            win_size = 3 ** k\n            avg_pool = torch.nn.AvgPool2d(win_size, stride=1, padding=win_size // 2, count_include_pad=False)\n            avg_pools.append(avg_pool(bin_x))\n\n        bin_x = torch.zeros((B, sub_desc_dim * num_bins, self.num_patches[0], self.num_patches[1])).to(self.device)\n        for y in range(self.num_patches[0]):\n            for x in range(self.num_patches[1]):\n                part_idx = 0\n                # fill all bins for a spatial location (y, x)\n                for k in range(0, hierarchy):\n                    kernel_size = 3 ** k\n                    for i in range(y - kernel_size, y + kernel_size + 1, kernel_size):\n                        for j in range(x - kernel_size, x + kernel_size + 1, kernel_size):\n                            if i == y and j == x and k != 0:\n                                continue\n                            if 0 <= i < self.num_patches[0] and 0 <= j < self.num_patches[1]:\n                                bin_x[:, part_idx * sub_desc_dim: (part_idx + 1) * sub_desc_dim, y, x] = avg_pools[k][\n                                                                                                           :, :, i, j]\n                            else:  # handle padding in a more delicate way than zero padding\n                                temp_i = max(0, min(i, self.num_patches[0] - 1))\n                                temp_j = max(0, min(j, self.num_patches[1] - 1))\n                                bin_x[:, part_idx * sub_desc_dim: (part_idx + 1) * sub_desc_dim, y, x] = avg_pools[k][\n                                                                                                           :, :, temp_i,\n                                                                                                           temp_j]\n                            part_idx += 1\n        bin_x = bin_x.flatten(start_dim=-2, end_dim=-1).permute(0, 2, 1).unsqueeze(dim=1)\n        # Bx1x(t-1)x(dxh)\n        return bin_x\n\n    def extract_descriptors(self, batch: torch.Tensor, layer: int = 11, facet: str = 'key',\n                            bin: bool = False, include_cls: bool = False) -> torch.Tensor:\n        \"\"\"\n        extract descriptors from the model\n        :param batch: batch to extract descriptors for. Has shape BxCxHxW.\n        :param layers: layer to extract. A number between 0 to 11.\n        :param facet: facet to extract. One of the following options: ['key' | 'query' | 'value' | 'token']\n        :param bin: apply log binning to the descriptor. default is False.\n        :return: tensor of descriptors. Bx1xtxd' where d' is the dimension of the descriptors.\n        \"\"\"\n        assert facet in ['key', 'query', 'value', 'token'], f\"\"\"{facet} is not a supported facet for descriptors. \n                                                             choose from ['key' | 'query' | 'value' | 'token'] \"\"\"\n        self._extract_features(batch, [layer], facet)\n        x = self._feats[0]\n        if facet == 'token':\n            x.unsqueeze_(dim=1) #Bx1xtxd\n        if not include_cls:\n            x = x[:, :, 1:, :]  # remove cls token\n        else:\n            assert not bin, \"bin = True and include_cls = True are not supported together, set one of them False.\"\n        if not bin:\n            desc = x.permute(0, 2, 3, 1).flatten(start_dim=-2, end_dim=-1).unsqueeze(dim=1)  # Bx1xtx(dxh)\n        else:\n            desc = self._log_bin(x)\n        return desc\n\n    def extract_saliency_maps(self, batch: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        extract saliency maps. The saliency maps are extracted by averaging several attention heads from the last layer\n        in of the CLS token. All values are then normalized to range between 0 and 1.\n        :param batch: batch to extract saliency maps for. Has shape BxCxHxW.\n        :return: a tensor of saliency maps. has shape Bxt-1\n        \"\"\"\n        assert self.model_type == \"dino_vits8\", f\"saliency maps are supported only for dino_vits model_type.\"\n        self._extract_features(batch, [11], 'attn')\n        head_idxs = [0, 2, 4, 5]\n        curr_feats = self._feats[0] #Bxhxtxt\n        cls_attn_map = curr_feats[:, head_idxs, 0, 1:].mean(dim=1) #Bx(t-1)\n        temp_mins, temp_maxs = cls_attn_map.min(dim=1)[0], cls_attn_map.max(dim=1)[0]\n        cls_attn_maps = (cls_attn_map - temp_mins) / (temp_maxs - temp_mins)  # normalize to range [0,1]\n        return cls_attn_maps\n\n\"\"\" taken from https://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse\"\"\"\ndef str2bool(v):\n    if isinstance(v, bool):\n        return v\n    if v.lower() in ('yes', 'true', 't', 'y', '1'):\n        return True\n    elif v.lower() in ('no', 'false', 'f', 'n', '0'):\n        return False\n    else:\n        raise argparse.ArgumentTypeError('Boolean value expected.')\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description='Facilitate ViT Descriptor extraction.')\n    parser.add_argument('--image_path', type=str, required=True, help='path of the extracted image.')\n    parser.add_argument('--output_path', type=str, required=True, help='path to file containing extracted descriptors.')\n    parser.add_argument('--load_size', default=224, type=int, help='load size of the input image.')\n    parser.add_argument('--stride', default=4, type=int, help=\"\"\"stride of first convolution layer. \n                                                              small stride -> higher resolution.\"\"\")\n    parser.add_argument('--model_type', default='dino_vits8', type=str,\n                        help=\"\"\"type of model to extract. \n                        Choose from [dino_vits8 | dino_vits16 | dino_vitb8 | dino_vitb16 | vit_small_patch8_224 | \n                        vit_small_patch16_224 | vit_base_patch8_224 | vit_base_patch16_224]\"\"\")\n    parser.add_argument('--facet', default='key', type=str, help=\"\"\"facet to create descriptors from. \n                                                                    options: ['key' | 'query' | 'value' | 'token']\"\"\")\n    parser.add_argument('--layer', default=11, type=int, help=\"layer to create descriptors from.\")\n    parser.add_argument('--bin', default='False', type=str2bool, help=\"create a binned descriptor if True.\")\n\n    args = parser.parse_args()\n\n    with torch.no_grad():\n        device = 'cuda' if torch.cuda.is_available() else 'cpu'\n        extractor = ViTExtractor(args.model_type, args.stride, device=device)\n        image_batch, image_pil = extractor.preprocess(args.image_path, args.load_size)\n        print(f\"Image {args.image_path} is preprocessed to tensor of size {image_batch.shape}.\")\n        descriptors = extractor.extract_descriptors(image_batch.to(device), args.layer, args.facet, args.bin)\n        print(f\"Descriptors are of size: {descriptors.shape}\")\n        torch.save(descriptors, args.output_path)\n        print(f\"Descriptors saved to: {args.output_path}\")"
  },
  {
    "path": "third_party/f3rm/f3rm/features/dino_extract.py",
    "content": "import gc\nfrom typing import List\n\nimport torch\nfrom einops import rearrange\nfrom tqdm import tqdm\n\n\nclass DINOArgs:\n    model_type: str = \"dino_vits8\"\n    load_size: int = 224\n    stride: int = 4\n    facet: str = \"key\"\n    layer: int = 11\n    bin: bool = False\n    batch_size: int = 4\n\n    @classmethod\n    def id_dict(cls):\n        \"\"\"Return dict that identifies the DINO model parameters.\"\"\"\n        return {\n            \"model_type\": cls.model_type,\n            \"load_size\": cls.load_size,\n            \"stride\": cls.stride,\n            \"facet\": cls.facet,\n            \"layer\": cls.layer,\n            \"bin\": cls.bin,\n        }\n\n\n_supported_dino_models = {\"dino_vits8\", \"dino_vits16\", \"dino_vitb8\", \"dino_vitb16\"}\n\n\n@torch.no_grad()\ndef extract_dino_features(image_paths: List[str], device: torch.device) -> torch.Tensor:\n    from f3rm.features.dino.dino_vit_extractor import ViTExtractor\n\n    assert (\n        DINOArgs.model_type in _supported_dino_models\n    ), f\"Model type must be one of {_supported_dino_models}, not {DINOArgs.model_type}\"\n\n    extractor = ViTExtractor(DINOArgs.model_type, DINOArgs.stride, device=device)\n    print(f\"Loaded DINO model {DINOArgs.model_type}\")\n\n    # Preprocess images\n    preprocessed_images = [extractor.preprocess(image_path, DINOArgs.load_size)[0] for image_path in image_paths]\n    preprocessed_images = torch.cat(preprocessed_images, dim=0).to(device)\n    print(f\"Preprocessed {len(image_paths)} images to shape {preprocessed_images.shape}\")\n\n    # Extract DINO features in batches\n    embeddings = []\n    for i in tqdm(\n        range(0, len(preprocessed_images), DINOArgs.batch_size),\n        desc=\"Extracting DINO features\",\n    ):\n        batch = preprocessed_images[i : i + DINOArgs.batch_size]\n        embeddings.append(extractor.extract_descriptors(batch, DINOArgs.layer, DINOArgs.facet, DINOArgs.bin))\n    embeddings = torch.cat(embeddings, dim=0)\n\n    # Reshape embeddings to have shape (batch, height, width, channels))\n    height, width = extractor.num_patches\n    embeddings = rearrange(embeddings, \"b 1 (h w) c -> b h w c\", h=height, w=width)\n    print(f\"Extracted DINO embeddings of shape {embeddings.shape}\")\n\n    # Delete and clear memory to be safe\n    del extractor\n    del preprocessed_images\n    torch.cuda.empty_cache()\n    gc.collect()\n\n    return embeddings\n"
  },
  {
    "path": "third_party/f3rm/f3rm/model.py",
    "content": "from dataclasses import dataclass, field\nfrom functools import cached_property\nfrom typing import Dict, List, Optional, Type\n\nimport torch\nimport torch.nn.functional as F\nfrom nerfstudio.cameras.rays import RayBundle, RaySamples\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.model_components.losses import (\n    orientation_loss,\n    pred_normal_loss,\n    scale_gradients_by_distance_squared,\n)\nfrom nerfstudio.models.nerfacto import NerfactoModel, NerfactoModelConfig\nfrom nerfstudio.utils.rich_utils import CONSOLE\nfrom nerfstudio.viewer.server.viewer_elements import (\n    ViewerButton,\n    ViewerNumber,\n    ViewerText,\n)\nfrom torch.nn import Parameter\n\nfrom f3rm.feature_field import FeatureField, FeatureFieldHeadNames\nfrom f3rm.pca_colormap import apply_pca_colormap_return_proj\nfrom f3rm.renderer import FeatureRenderer\n\n\n@dataclass\nclass FeatureFieldModelConfig(NerfactoModelConfig):\n    \"\"\"Note: make sure to use naming that doesn't conflict with NerfactoModelConfig\"\"\"\n\n    _target: Type = field(default_factory=lambda: FeatureFieldModel)\n    # Weighing for the feature loss\n    feat_loss_weight: float = 1e-3\n    # Feature Field Positional Encoding\n    feat_use_pe: bool = True\n    feat_pe_n_freq: int = 6\n    # Feature Field Hash Grid\n    feat_num_levels: int = 12\n    feat_log2_hashmap_size: int = 19\n    feat_start_res: int = 16\n    feat_max_res: int = 128\n    feat_features_per_level: int = 8\n    # Feature Field MLP Head\n    feat_hidden_dim: int = 64\n    feat_num_layers: int = 2\n\n\n\n@dataclass\nclass ViewerUtils:\n    pca_proj: Optional[torch.Tensor] = None\n    positives: List[str] = field(default_factory=list)\n    pos_embed: Optional[torch.Tensor] = None\n    negatives: List[str] = field(default_factory=list)\n    neg_embed: Optional[torch.Tensor] = None\n    softmax_temp: float = 0.1\n    device: Optional[torch.device] = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n    @cached_property\n    def clip(self):\n        from f3rm.features.clip import load\n        from f3rm.features.clip_extract import CLIPArgs\n\n        CONSOLE.print(f\"Loading CLIP {CLIPArgs.model_name} for viewer\")\n        model, _ = load(CLIPArgs.model_name, device=self.device)\n        model.eval()\n        return model\n\n    @torch.no_grad()\n    def handle_language_queries(self, raw_text: str, is_positive: bool):\n        \"\"\"Compute CLIP embeddings based on queries and update state\"\"\"\n        from f3rm.features.clip import tokenize\n\n        texts = [x.strip() for x in raw_text.split(\",\") if x.strip()]\n        # Clear the GUI state if there are no texts\n        if not texts:\n            self.clear_positives() if is_positive else self.clear_negatives()\n            return\n        # Embed text queries\n        tokens = tokenize(texts).to(self.device)\n        embed = self.clip.encode_text(tokens).float()\n        if is_positive:\n            self.positives = texts\n            # Average embedding if we have multiple positives\n            embed = embed.mean(dim=0, keepdim=True)\n            embed /= embed.norm(dim=-1, keepdim=True)\n            self.pos_embed = embed\n        else:\n            self.negatives = texts\n            # We don't average the negatives as we compute pair-wise softmax\n            embed /= embed.norm(dim=-1, keepdim=True)\n            self.neg_embed = embed\n\n    @property\n    def has_positives(self) -> bool:\n        return self.positives and self.pos_embed is not None\n\n    def clear_positives(self):\n        self.positives.clear()\n        self.pos_embed = None\n\n    @property\n    def has_negatives(self) -> bool:\n        return self.negatives and self.neg_embed is not None\n\n    def clear_negatives(self):\n        self.negatives.clear()\n        self.neg_embed = None\n\n    def update_softmax_temp(self, temp: float):\n        self.softmax_temp = temp\n\n    def reset_pca_proj(self):\n        self.pca_proj = None\n        CONSOLE.print(\"Reset PCA projection\")\n\n\nviewer_utils = ViewerUtils()\n\n\nclass FeatureFieldModel(NerfactoModel):\n    config: FeatureFieldModelConfig\n\n    feature_field: FeatureField\n    renderer_feature: FeatureRenderer\n\n    def populate_modules(self):\n        super().populate_modules()\n\n        # Create feature field\n        feature_dim = self.kwargs[\"metadata\"][\"feature_dim\"]\n        if feature_dim <= 0:\n            raise ValueError(f\"Feature dimensionality must be positive, not {feature_dim}\")\n\n        self.feature_field = FeatureField(\n            feature_dim=feature_dim,\n            spatial_distortion=self.field.spatial_distortion,\n            aabb=self.scene_box.aabb,\n            use_pe=self.config.feat_use_pe,\n            pe_n_freq=self.config.feat_pe_n_freq,\n            num_levels=self.config.feat_num_levels,\n            log2_hashmap_size=self.config.feat_log2_hashmap_size,\n            start_res=self.config.feat_start_res,\n            max_res=self.config.feat_max_res,\n            features_per_level=self.config.feat_features_per_level,\n            hidden_dim=self.config.feat_hidden_dim,\n            num_layers=self.config.feat_num_layers,\n        )\n        self.renderer_feature = FeatureRenderer()\n        self.setup_gui()\n\n    def set_language_queries(self, positives: Optional[List[str]] = None, negatives: Optional[List[str]] = None):\n        \"\"\"Set language queries for the model.\n        \n        Args:\n            positives: List of positive text queries\n            negatives: List of negative text queries\n    \n        \"\"\"\n        if positives is not None:\n            viewer_utils.handle_language_queries(positives, is_positive=True)\n        if negatives is not None:\n            viewer_utils.handle_language_queries(negatives, is_positive=False)\n\n    def setup_gui(self):\n        viewer_utils.device = self.kwargs[\"device\"]\n        # Note: the GUI elements are shown based on alphabetical variable names\n        self.btn_refresh_pca = ViewerButton(\"Refresh PCA Projection\", cb_hook=lambda _: viewer_utils.reset_pca_proj())\n\n        # Only setup GUI for language features if we're using CLIP\n        # if self.kwargs[\"metadata\"][\"feature_type\"] != \"CLIP\":\n        #     return\n        self.hint_text = ViewerText(name=\"Note:\", disabled=True, default_value=\"Use , to separate labels\")\n        self.lang_1_pos_text = ViewerText(\n            name=\"Language (Positives)\",\n            default_value=\"\",\n            cb_hook=lambda elem: viewer_utils.handle_language_queries(elem.value, is_positive=True),\n        )\n        self.lang_2_neg_text = ViewerText(\n            name=\"Language (Negatives)\",\n            default_value=\"\",\n            cb_hook=lambda elem: viewer_utils.handle_language_queries(elem.value, is_positive=False),\n        )\n        self.softmax_temp = ViewerNumber(\n            name=\"Softmax temperature\",\n            default_value=viewer_utils.softmax_temp,\n            cb_hook=lambda elem: viewer_utils.update_softmax_temp(elem.value),\n        )\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = super().get_param_groups()\n        param_groups[\"feature_field\"] = list(self.feature_field.parameters())\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        \"\"\"Modified from nerfacto.get_outputs to include feature field outputs.\"\"\"\n        ray_samples: RaySamples\n        ray_samples, weights_list, ray_samples_list = self.proposal_sampler(ray_bundle, density_fns=self.density_fns)\n        field_outputs = self.field.forward(ray_samples, compute_normals=self.config.predict_normals)\n        if self.config.use_gradient_scaling:\n            field_outputs = scale_gradients_by_distance_squared(field_outputs, ray_samples)\n\n        ## transmittance weights in front-to-back alpha blending computed\n        ## from predicted densities: field_outputs[FieldHeadNames.DENSITY]\n        weights = ray_samples.get_weights(field_outputs[FieldHeadNames.DENSITY])\n        weights_list.append(weights)\n        ray_samples_list.append(ray_samples)\n\n        ### do volumetric rendering via ray marching basically\n        ### pixel_rgb = sum(weights_i * rgb_i, axis=1)\n        rgb = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n        with torch.no_grad():\n            depth = self.renderer_depth(weights=weights, ray_samples=ray_samples)\n        expected_depth = self.renderer_expected_depth(weights=weights, ray_samples=ray_samples)\n        accumulation = self.renderer_accumulation(weights=weights)\n\n        # Feature outputs\n        ff_outputs = self.feature_field(ray_samples)\n        ### features is also rendered volumetrically\n        ### features = sum(weights_i * features_i, axis=1)\n        features = self.renderer_feature(features=ff_outputs[FeatureFieldHeadNames.FEATURE], weights=weights)\n        outputs = {\n            \"rgb\": rgb,\n            \"accumulation\": accumulation,\n            \"depth\": depth,\n            \"expected_depth\": expected_depth,\n            \"feature\": features,\n        }\n\n        if self.config.predict_normals:\n            normals = self.renderer_normals(normals=field_outputs[FieldHeadNames.NORMALS], weights=weights)\n            pred_normals = self.renderer_normals(field_outputs[FieldHeadNames.PRED_NORMALS], weights=weights)\n            outputs[\"normals\"] = self.normals_shader(normals)\n            outputs[\"pred_normals\"] = self.normals_shader(pred_normals)\n        # These use a lot of GPU memory, so we avoid storing them for eval.\n        if self.training:\n            outputs[\"weights_list\"] = weights_list\n            outputs[\"ray_samples_list\"] = ray_samples_list\n\n        if self.training and self.config.predict_normals:\n            outputs[\"rendered_orientation_loss\"] = orientation_loss(\n                weights.detach(), field_outputs[FieldHeadNames.NORMALS], ray_bundle.directions\n            )\n\n            outputs[\"rendered_pred_normal_loss\"] = pred_normal_loss(\n                weights.detach(),\n                field_outputs[FieldHeadNames.NORMALS].detach(),\n                field_outputs[FieldHeadNames.PRED_NORMALS],\n            )\n\n        for i in range(self.config.num_proposal_iterations):\n            outputs[f\"prop_depth_{i}\"] = self.renderer_depth(weights=weights_list[i], ray_samples=ray_samples_list[i])\n\n        return outputs\n\n    def get_metrics_dict(self, outputs, batch):\n        metrics_dict = super().get_metrics_dict(outputs, batch)\n        # Compute feature error\n        target_feats = batch[\"feature\"].to(self.device)\n        metrics_dict[\"feature_error\"] = F.mse_loss(outputs[\"feature\"], target_feats)\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        loss_dict = super().get_loss_dict(outputs, batch, metrics_dict)\n        # Compute feature loss\n        target_feats = batch[\"feature\"].to(self.device)\n        loss_dict[\"feature_loss\"] = self.config.feat_loss_weight * F.mse_loss(outputs[\"feature\"], target_feats)\n        return loss_dict\n\n    \n\n    def get_sim(self, clip_features):\n        clip_features /= clip_features.norm(dim=-1, keepdim=True)\n\n        # If there are no negatives, just show the cosine similarity with the positives\n        if not viewer_utils.has_negatives:\n            sims = clip_features @ viewer_utils.pos_embed.T\n            # Show the mean similarity if there are multiple positives\n            if sims.shape[-1] > 1:\n                sims = sims.mean(dim=-1, keepdim=True)\n            return sims\n\n        print(\">>> Similarity for positives:\", viewer_utils.positives, \"and negatives:\", viewer_utils.negatives)\n        # Use paired softmax method as described in the paper with positive and negative texts\n        text_embs = torch.cat([viewer_utils.pos_embed, viewer_utils.neg_embed], dim=0)\n        raw_sims = clip_features @ text_embs.T\n\n        # Broadcast positive label similarities to all negative labels\n        pos_sims, neg_sims = raw_sims[..., :1], raw_sims[..., 1:]\n        pos_sims = pos_sims.broadcast_to(neg_sims.shape)\n        paired_sims = torch.cat([pos_sims, neg_sims], dim=-1)\n\n        # Compute paired softmax\n        probs = (paired_sims / viewer_utils.softmax_temp).softmax(dim=-1)[..., :1]\n        torch.nan_to_num_(probs, nan=0.0)\n        sims, _ = probs.min(dim=-1, keepdim=True)\n        return sims\n\n    @torch.no_grad()\n    def get_outputs_for_camera_ray_bundle(self, camera_ray_bundle: RayBundle) -> Dict[str, torch.Tensor]:\n        outputs = super().get_outputs_for_camera_ray_bundle(camera_ray_bundle)\n\n        # Compute PCA of features separately, so we can reuse the same projection matrix\n        outputs[\"feature_pca\"], viewer_utils.pca_proj, *_ = apply_pca_colormap_return_proj(\n            outputs[\"feature\"], viewer_utils.pca_proj\n        )\n\n        # Nothing else to do if not CLIP features or no positives\n        if self.kwargs[\"metadata\"][\"feature_type\"] != \"CLIP\" or not viewer_utils.has_positives:\n            return outputs\n\n        # Normalize CLIP features rendered by feature field\n        clip_features = outputs[\"feature\"]\n        clip_features /= clip_features.norm(dim=-1, keepdim=True)\n\n        # If there are no negatives, just show the cosine similarity with the positives\n        if not viewer_utils.has_negatives:\n            sims = clip_features @ viewer_utils.pos_embed.T\n            # Show the mean similarity if there are multiple positives\n            if sims.shape[-1] > 1:\n                sims = sims.mean(dim=-1, keepdim=True)\n            outputs[\"similarity\"] = sims\n            return outputs\n\n        # Use paired softmax method as described in the paper with positive and negative texts\n        text_embs = torch.cat([viewer_utils.pos_embed, viewer_utils.neg_embed], dim=0)\n        raw_sims = clip_features @ text_embs.T\n\n        # Broadcast positive label similarities to all negative labels\n        pos_sims, neg_sims = raw_sims[..., :1], raw_sims[..., 1:]\n        pos_sims = pos_sims.broadcast_to(neg_sims.shape)\n        paired_sims = torch.cat([pos_sims, neg_sims], dim=-1)\n\n        # Compute paired softmax\n        probs = (paired_sims / viewer_utils.softmax_temp).softmax(dim=-1)[..., :1]\n        torch.nan_to_num_(probs, nan=0.0)\n        sims, _ = probs.min(dim=-1, keepdim=True)\n        outputs[\"similarity\"] = sims\n        return outputs"
  },
  {
    "path": "third_party/f3rm/f3rm/pca_colormap.py",
    "content": "from typing import Optional\n\nimport torch\nfrom torchtyping import TensorType\n\n\ndef apply_pca_colormap_return_proj(\n    image: TensorType[\"bs\":..., \"d\"],\n    proj_V: Optional[TensorType] = None,\n    low_rank_min: Optional[TensorType] = None,\n    low_rank_max: Optional[TensorType] = None,\n    niter: int = 5,\n) -> TensorType[\"bs\":..., \"rgb\":3]:\n    \"\"\"Convert a multichannel image to color using PCA.\n\n    Args:\n        image: Multichannel image.\n        proj_V: Projection matrix to use. If None, use torch low rank PCA.\n\n    Returns:\n        Colored PCA image of the multichannel input image.\n    \"\"\"\n    image_flat = image.reshape(-1, image.shape[-1])\n\n    # Modified from https://github.com/pfnet-research/distilled-feature-fields/blob/master/train.py\n    if proj_V is None:\n        mean = image_flat.mean(0)\n        with torch.no_grad():\n            U, S, V = torch.pca_lowrank(image_flat - mean, niter=niter)\n        proj_V = V[:, :3]\n\n\n    low_rank = image_flat @ proj_V\n    if low_rank_min is None:\n        low_rank_min = torch.quantile(low_rank, 0.01, dim=0)\n    if low_rank_max is None:\n        low_rank_max = torch.quantile(low_rank, 0.99, dim=0)\n\n    low_rank = (low_rank - low_rank_min) / (low_rank_max - low_rank_min)\n    low_rank = torch.clamp(low_rank, 0, 1)\n\n    colored_image = low_rank.reshape(image.shape[:-1] + (3,))\n    return colored_image, proj_V, low_rank_min, low_rank_max\n\n\ndef apply_pca_colormap(\n    image: TensorType[\"bs\":..., \"d\"],\n    proj_V: Optional[TensorType] = None,\n    low_rank_min: Optional[TensorType] = None,\n    low_rank_max: Optional[TensorType] = None,\n    niter: int = 5,\n) -> TensorType[\"bs\":..., \"rgb\":3]:\n    return apply_pca_colormap_return_proj(image, proj_V, low_rank_min, low_rank_max, niter)[0]\n"
  },
  {
    "path": "third_party/f3rm/f3rm/renderer.py",
    "content": "import torch\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\n\nclass FeatureRenderer(nn.Module):\n    \"\"\"Just a weighted sum.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        features: Float[Tensor, \"*bs num_samples num_channels\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n    ) -> Float[Tensor, \"*bs num_channels\"]:\n        output = torch.sum(weights * features, dim=-2)\n        return output\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/README.md",
    "content": "# Language-Guided Pose Optimization using F3RM\n\nWe provide a clean implementation of language-guided pose optimization using F3RM: Feature Fields for Robotic\nManipulation.\n\n-----\n**Table of Contents**\n\n- [Installation](#installation)\n- [Usage](#usage)\n    - [Tutorial](#tutorial)\n    - [Using the Visualizer](#using-the-visualizer)\n- [FAQ](#faq)\n- [Troubleshooting](#troubleshooting)\n    - [The Visualizer is not working](#the-visualizer-is-not-working)\n    - [Running out of GPU memory](#running-out-of-gpu-memory)\n    - [ValueError: Could not find nerf_to_world.json in ...](#valueerror-could-not-find-nerf_to_worldjson-in-)\n\n## Installation\n\nFollow the installation instructions in\n[Step 4 of the main README](../README.md#4-optional-install-dependencies-for-robot-manipulation-code) to install the\ndependencies required for running the robot code. You can find information about the code\nstructure [here](/assets/code_structure.md#f3rm_robot).\n\n## Usage\n\nThe typical workflow on the robot involves:\n\n1. Collecting multiple images of the scene using a calibrated RGB camera.\n2. Training a feature field using `ns-train f3rm` as described in the main [README](../README.md).\n3. Use `f3rm-optimize --scene <path to output config>` to optimize grasp poses using language queries. The script will\n   ask you to provide queries in the command line and supports web-based visualization of the optimization process.\n4. Executing the optimized grasps on the robot.\n\nWe do not provide code for steps 1 and 4 - you will need to implement these yourself based on your robot setup.\nThe `f3rm-optimize` command provides the functionality to optimize grasp poses once you have a trained feature field.\n\nWe provide a tutorial on one of our example datasets below. For general information and answers to some common\nquestions, please see the [FAQ](#faq). For troubleshooting, see the [Troubleshooting](#troubleshooting) section. Note\nthat our collision checking assumes that you are using the default Franka Panda gripper. See\n[What if I'm using a different gripper or robot?](#what-if-im-using-a-different-gripper-or-robot) for more information.\n\n### Tutorial\n\nWe provide a tutorial on how to use language-guided pose optimization using the F3RM datasets.\n\n**Note:** If you previously downloaded the datasets before the robot code was released, you will need to re-download\nthem using `f3rm-download-data panda`. We added the calibration between the NeRF and world coordinate frames in the\n`nerf_to_world.json` file.\n\n#### 1. Train a Feature Field\n\nWe will use `f3rm/panda/scene_001` for this tutorial. See a description of each dataset\nprovided [here](../assets/datasets.md). Make sure you're in the base directory of this repository.\n\n```\nns-train f3rm --data datasets/f3rm/panda/scene_001 --max-num-iterations 5000 \\\n  --output-dir f3rm_outputs --timestamp ''\n```\n\nWe set `--output-dir` to a separate output directory to Nerfstudio and `--timestamp` to empty string, so that the\noutputs are saved to `f3rm_outputs/scene_001/f3rm`.\n\nThe training takes up to ~5 minutes on a RTX3090. You can train for fewer steps, but the quality of the geometry from\nNeRF will be reduced. In our experiments in the paper, we used 2000 steps and downscaled the input images to 640x360\n(they are 1280x720 in the dataset).\n\nStop the training script using `Ctrl + C` once training is finished. Note that Nerfstudio will print the path to the\n\"Config File\" which you use as the scene for `f3rm-optimize` in the next step.\n\n#### 2. Start the optimization script\n\n```bash\nf3rm-optimize --scene f3rm_outputs/scene_001/f3rm/config.yml\n```\n\nBy default, visualization is enabled which you can view at http://localhost:8012. If you are running the script on a\nremote machine, don't forget to forward the port.\n\nNote that visualization slows down the optimization. You can disable visualization using the `--visualize False` flag.\nTo see all the options available for the `f3rm-optimize` command, run `f3rm-optimize --help`.\n\n#### 3. Provide language queries and optimize\n\nOnce the script loads the feature field and CLIP, it will wait for you to provide language queries. If you are using the\nvisualizer (http://localhost:8012), you can enter the query in the visualizer textbox and click \"Submit\".\n\n<img src=\"../assets/images/f3rm_robot/optimize.gif\" width=\"720\" alt=\"Visualizer Optimization\">\n\nIf you have disabled the visualizer, you can provide a queries in the command line `Enter query (empty to exit): `.\nThe script will ask for a query, optimize for poses, then ask for another query until you exit (empty query). You can\ncheck what objects are in the scene by observing the point cloud in the visualizer. The queries we used in the\npaper and website for this scene were: \"Baymax\", \"blue screwdriver\", \"bowl\", \"red screwdriver\", and \"transparent jug\".\nThe \"metal jug\" predicted an unstable grasp when we optimized. Feel free to try the other objects in the scene.\n\nOnce you enter the language query, we 1) retrieve the relevant demonstrations, 2) generate initial 6-DOF proposals,\nand 3) optimize the grasp proposals. Use the visualizer to see the top proposals during the optimization process. Check\nthe [Using the Visualizer](#using-the-visualizer) section for more information and on what intermediate outputs are\nshown.\n\nThe optimization script will write outputs including args, metrics and the optimized grasps to the directory where the\nfeature field is saved. You can check the printed outputs in the command line for the exact paths. Please note that the\noptimization process is stochastic and may not always converge to the same results. By default, we uniformly sample 8\nrotations for each voxel in the initial proposals and remove grasps which are in collision with the scene.\n\n### Using the Visualizer\n\nThe visualizer will by default be served at http://localhost:8012. You can change the host and port using\nthe `--viser-host` and `--viser-port` flags, respectively.\n\nOur visualizer is powered by [Viser](https://github.com/nerfstudio-project/viser) (thanks to the Nerfstudio team for\nbuilding this!).\n\n#### View Controls\n\n- Left Click and drag to rotate.\n- Right Click and drag to pan.\n- Scroll to zoom in and out.\n- WASD to move forward, left, back, and right.\n- Q and E to move up and down.\n\n#### Entering Language Queries\n\nThe GUI for entering language queries should appear in the top-right of the visualizer. This may take a few seconds to\nload as we only initialize it once the feature field and CLIP has been loaded. You should\nsee `Enter query in the visualizer at: ...` in stdout when the GUI is ready.\n\n<img src=\"../assets/images/f3rm_robot/language_query.png\" width=\"350\" alt=\"Visualizer Language Query\">\n\nYou can enter your query in the textbox and click the submit button to start the optimization process. The textbox and\nbutton will be disabled during optimization, and reset once the optimization is finished.\n\n#### Visualizing the Optimization Process\n\nAfter each optimization step, we find the grasps with the lowest losses and visualize them as skeleton grippers. By\ndefault, we show the top 10 grasp poses during optimization. You can change this using the `--num-poses-to-visualize`\nflag. The color of the gripper corresponds to the loss value, with red being the lowest loss (best) and blue being\nthe highest lost within the top grasps. See the GIF [above](#3-provide-language-queries-and-optimize) for an example of\nthe optimization process.\n\nNote: we do not run collision checking on the grasp poses during optimization, but do so after the final optimization\nstep.\n\n#### Visualizing the Initial Proposals\n\nIf you haven't already, submit a language query. Then, click on the \"Connection and Diagnostics\" button on the\ntop-right (highlighted in red below) so we can view the scene tree.\n\n<img src=\"../assets/images/f3rm_robot/connection_and_diagnostics.png\" width=\"350\" alt=\"Visualizer Connection and Diagnostics Button\">\n\nYou should see the \"Scene tree\" in the 2nd half of the window. You can expand the `/initial_proposals` node and toggle\nthe initial proposal point clouds using the 'eye' icon. Similarly, you can show/hide other nodes in the scene\ntree such as the scene point cloud, and the grasps.\n\n<p>\n<img src=\"../assets/images/f3rm_robot/initial_proposals.png\" width=\"600\" alt=\"Visualizing Initial Proposals\">\n<br>\n<em>Here, we toggled the /initial_proposals/lang_probs node to show the language mask for \"Baymax\"</em>\n</p>\n\nOnce you are done, you can switch back to the GUI using the \"Return to GUI\" button on the top-right (highlighted in red\nabove), and continue entering language queries.\n\n## FAQ\n\n- [How do I run the optimization on my own dataset?](#how-do-i-run-the-optimization-on-my-own-dataset)\n- [How can I execute the grasps on my robot?](#how-can-i-execute-the-grasps-on-my-robot)\n- [What if I'm using a different gripper or robot?](#what-if-im-using-a-different-gripper-or-robot)\n- [Why does the collision checking not remove all collisions?](#why-does-the-collision-checking-not-remove-all-collisions)\n- [The grasps visually look good, can I count that as a success?](#the-grasps-visually-look-good-can-i-count-that-as-a-success)\n- [The rotations in the grasps seem very incorrect, what's going on?](#the-rotations-in-the-grasps-seem-very-incorrect-whats-going-on)\n- [Why doesn't the optimization target the right object specified by my language query?](#why-doesnt-the-optimization-target-the-right-object-specified-by-my-language-query)\n- [Where are the task embeddings?](#where-are-the-task-embeddings)\n- [How can I generate my own task embeddings?](#how-can-i-generate-my-own-task-embeddings)\n\n### How do I run the optimization on my own dataset?\n\nFirstly, you will need to determine the transform from the NeRF coordinate frame to the world coordinate frame. In our Panda datasets, this information is in a `nerf_to_world.json` file which is read by the optimization scripts. See this Github issue for more instructions: https://github.com/f3rm/f3rm/issues/15. This issue also has some good pointers: https://github.com/f3rm/f3rm/issues/11\n\nYou will also need to adjust the bounds of the workspace to match your robot setup. Modify the lines here: https://github.com/f3rm/f3rm/blob/main/f3rm_robot/args.py#L34-L36\n\nA good first step is to make these bounds very big to see the point cloud that has been sampled in the visualizer. Check the rest of the FAQ below for important details.\n\n### How can I execute the grasps on my robot?\n\nThe optimization script writes a ranked list of 6-DOF poses (from best to worst) to a `grasps_to_world.pt` file for each\nlanguage query. You can load these grasps, iterate through them and run inverse kinematics and motion planning to find a\nvalid motion plan to the grasp pose.\n\nIn our real robot setup, we compute intermediate pre-grasp and post-grasp poses to make motion planning a bit easier.\nWe also recommend you run further collision checking (see\n[Why does the collision checking not remove all collisions?](#why-does-the-collision-checking-not-remove-all-collisions)).\n\n### What if I'm using a different gripper or robot?\n\nOur optimization code uses the default Franka Panda gripper for collision checking. The Panda's gripper is known for\nbeing relatively large and bulky, which tends to lead to more collisions. This means you could get away with using our\ndefault collision checking, but it may remove more grasps than necessary.\n\nIf you are using a different gripper, you will need to modify the collision checking code in\n[`f3rm_robot/collision.py`](/f3rm_robot/collision.py). You will need to provide a mesh file for your gripper, and tune\nthe collision checking arguments for voxelizing the mesh, the overlap threshold, etc.\n\n### Why does the collision checking not remove all collisions?\n\nOur collision checking is relatively primitive and coarse. We first voxelize a mesh of the Panda gripper, then transform\neach of these points by the gripper pose, and query the NeRF to get the density. We consider the gripper pose in\ncollision if the number of points with density is above a certain threshold.\n\nYou can check out the implementation for yourself in [`f3rm_robot/collision.py`](/f3rm_robot/collision.py). We run\nfurther collision checking in our motion planner as not all collisions are detected by this method. We recommend that\nyou do so as well if you are working with complex scenes.\n\n### The grasps visually look good, can I count that as a success?\n\nNo. While the grasps may look reasonable in the visualizer, they may not be stable in the real-world due to slight\nerrors in the predictions. Some grasps that may not look good in the visualizer might actually work in the real-world.\nYou should execute the grasps on your real robot to determine whether they are successful.\n\n### The rotations in the grasps seem very incorrect, what's going on?\n\nOur inference procedure involves:\n\n1. Coarse pre-filtering for the translational degrees-of-freedom using alpha masking (we use marching cubes) and\n   language masking using CLIP features. We call these 'voxels' in the code.\n2. Sampling `--num-rots-per-voxel` rotations (default = 8) for each voxel to get the 6-DOF proposals. Note we sample\n   uniformly over SO(3).\n3. Optimizing the 6-DOF proposals using language-guided grasp pose optimization. This may be considered as fine-tuning\n   the initial 6-DOF proposals.\n\nSince we sample rotations uniformly over SO(3), we may not sample a good rotation for the object we want to grasp. The\noptimization limits the extent to which we can adjust the rotations. Increasing the `--num-rots-per-voxel` flag can help\nimprove the results at the cost of increased optimization time. Since the optimization and sampling is stochastic,\nretrying your language query may lead to better results in some cases.\n\nF3RM could also just fail to find a good grasp. This could be due to the small number of demonstrations, loss\nfunction not being conducive to the task, features not being useful, poor geometric reconstruction from the NeRF, etc.\n\n### Why doesn't the optimization target the right object specified by my language query?\n\nYour language query should describe the object you want to grasp. The more specific you are with your language query,\nthe higher chance the optimization process will find a grasp that correctly targets your object. While the system is\nopen-ended and queries such as \"pick up the red mug\" could work, you will find a higher chance of success if you just\nquery \"red mug\" by limiting extraneous information.\n\nCLIP features can also behave like a bag-of-words and struggle to capture relationships, attributes, and ordinal\ninformation within sentences. For example, in queries such as \"black screwdriver\" and \"mug on a can of spam,\" we found\nthat CLIP paid more attention to other black objects and the can of spam, respectively.\n\nGrasps may have also been filtered out due to collisions with the scene, and our language masking could have\nmasked out too much (you can try playing around the negatives in the [`f3rm_robot/optimize.py`](/f3rm_robot/optimize.py)\nscript). We recommend you to [visualize the initial proposals](#visualizing-the-initial-proposals) for a deeper\nunderstanding of what's going on.\n\n### Where are the task embeddings?\n\nOur task embeddings for the mug lip, mug handle, screwdriver handle, caterpillar ear, and place cup on rack tasks are\nprovided in the [`f3rm_robot/assets/tasks`](/f3rm_robot/assets/tasks) directory. These are for CLIP ViT features, and\ncorrespond to 10 demonstrations in total. You can use the `get_tasks` method in\n[`f3rm_robot/task.py`](/f3rm_robot/task.py) to load and inspect them. We use these embeddings in the language-guided\npose optimization scripts.\n\n### How can I generate my own task embeddings?\n\nWe provide the demonstration datasets and poses which you can download with `f3rm-download-data panda_demos`. Each of\nthese datasets contains a `scene_demo*.json` file which contains the demo poses in the world coordinate frame. Please\nsee the [datasets](/assets/datasets.md#panda_demos) page for more information.\n\nFollow the short tutorial below for an example on how to generate task embeddings:\n\n```bash\n# 1. Train a feature field for a demo dataset (Ctrl+C once training is finished)\nns-train f3rm --data datasets/f3rm/panda_demos/caterpillar --max-num-iterations 5000 \\\n  --output-dir f3rm_outputs --timestamp ''\n\n# 2. Run the example script. Use the -h or --help flag to see all the options.\n# By default, this will bring up a visualizer which you can view at http://localhost:8012\n# The task embedding is not saved unless you use the --save flag.\npython f3rm_robot/examples/generate_task.py --scene f3rm_outputs/caterpillar/f3rm/config.yml \\\n  --demo_fname scene_demo.json\n```\n\nYou can adapt the demonstration schemas and example script for your own datasets. As noted in the paper appendix, the\ndownstream performance can vary significantly across different samples of the query points. We recommend you sample\nmultiple sets of query points and select the best performing set over a set of test scenes for your given task.\n\n## Troubleshooting\n\n### The Visualizer is not working\n\nBy default, the Viser visualizer will run on http://localhost:8012. If you are using a remote machine, make sure you\nhave forwarded the relevant port to your local machine. You can forward the port\nusing `ssh -L 8012:localhost:8012 <user>@<remote machine>`.\n\nYou can adjust the host and port using the `--viser-host` and `--viser-port` flags.\n\n### Running out of GPU memory\n\nThe default parameters for the optimization script were tested on a RTX3090 with 24GB of GPU memory. If you are running\nout of memory, you will probably need to decrease the ray samples per batch for the optimization and collision checking\nwhen using `f3rm-optimize`.\n\n- `--ray-samples-per-batch` changes the batch size for optimization. The default is `2**18 = 262144`.\n- `--CollisionArgs.ray-samples-per-batch` changes the batch size for collision checking. The default\n  is `2**22 = 4194304`.\n\n### ValueError: Could not find nerf_to_world.json in ...\n\nYou likely previously downloaded the datasets before the robot code was released. Try re-downloading the datasets using\n`f3rm-download-data panda`. We added the calibration between the NeRF and world coordinate frames in the\n`nerf_to_world.json` file.\n\nFor `f3rm/panda/scene_001` you will need to retrain your NeRF and feature field as the `transforms.json` was updated.\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/f3rm/f3rm_robot/args.py",
    "content": "import os\nfrom typing import Tuple\n\nfrom params_proto import ParamsProto, Proto\n\n\nclass OptimizationArgs(ParamsProto, cli_parse=False):\n    \"\"\"\n    Language-Guided 6-DOF Pose Optimization for a given scene.\n    \"\"\"\n\n    scene: str = Proto(help=\"Path to Nerfstudio scene config.yml file for the f3rm training run.\")\n\n    # Initial proposals\n    voxel_size: float = Proto(0.01, help=\"Voxel size to discretize workspace into (in meters).\")\n    num_rots_per_voxel: int = Proto(8, help=\"Number of rotations to sample for each voxel.\")\n    alpha_threshold: float = Proto(0.1, help=\"Alpha threshold to use for marching cubes masking.\")\n    softmax_temperature: float = Proto(0.001, help=\"Temperature to use for softmax for language masking.\")\n\n    # Optimization\n    num_steps: int = Proto(200, help=\"Number of optimization steps to use.\")\n    lr: float = Proto(2e-3, help=\"Learning rate to use for language-guided pose optimization.\")\n    ray_samples_per_batch: int = Proto(\n        2**18, help=\"Number of ray samples to use per batch. Decrease if you are running out of CUDA memory.\"\n    )\n\n    # Pruning\n    keep_proportion: float = Proto(\n        0.975, help=\"Proportion of proposals to keep after pruning for each optimization step.\"\n    )\n    min_proposals: int = Proto(2048, help=\"Minimum number of proposals to keep after pruning.\")\n    prune_after: int = Proto(10, help=\"Number of optimization steps to run before pruning.\")\n\n    # Min and max bounds of the workspace in world frame with metric scale\n    # min_bounds: Tuple[float, float, float] = (0.1, -0.45, 0.005)\n    # max_bounds: Tuple[float, float, float] = (0.8, 0.45, 0.35)\n    ## For our own scene:\n    min_bounds: Tuple[float, float, float] = (-0.4, 0.05, -0.575)\n    max_bounds: Tuple[float, float, float] = (-0.15, 0.3, -0.325)\n\n    # Visualization\n    visualize: bool = Proto(True, help=\"Whether to enable visualization of the optimization. This slows down the run.\")\n    viser_host: str = Proto(\"localhost\", help=\"Host to use for viser visualization server.\")\n    viser_port: int = Proto(8012, help=\"Port to use for viser visualization server.\")\n    num_poses_to_visualize: int = Proto(10, help=\"Number of poses to visualize during and after optimization.\")\n\n\n# You can access the variables directly with OptimizationArgs.<field_name>, and do not need to instantiate an object\n# of this class.\n_args = OptimizationArgs\n\n\ndef validate_args():\n    assert _args.scene, \"Must specify scene config file using --scene.\"\n    assert os.path.exists(_args.scene), f\"--scene config file {_args.scene} does not exist\"\n    # Initial proposals\n    assert 0 < _args.voxel_size < 0.1, f\"--voxel_size should be between 0 and 0.1\"\n    assert _args.num_rots_per_voxel > 0, \"--num_rots_per_voxel must be positive\"\n    assert 0 < _args.alpha_threshold <= 1.0, \"--alpha_threshold must be between 0 and 1\"\n    assert _args.softmax_temperature > 0, \"--softmax_temperature must be positive\"\n    # Optimization\n    assert _args.num_steps > 0, \"--num_steps must be positive\"\n    assert _args.lr > 0, \"--lr must be positive\"\n    assert _args.ray_samples_per_batch > 0, \"--ray_samples_per_batch must be positive\"\n    # Pruning\n    assert 0 < _args.keep_proportion <= 1.0, \"--keep_proportion must be between 0 and 1\"\n    assert _args.min_proposals > 0, \"--min_proposals must be positive\"\n    assert _args.prune_after > 0, \"--prune_after must be positive\"\n    # Check min and max bounds\n    assert len(_args.min_bounds) == 3, f\"--min_bounds must be a tuple of length 3, not {_args.min_bounds}\"\n    assert len(_args.max_bounds) == 3, f\"--max_bounds must be a tuple of length 3, not {_args.max_bounds}\"\n    assert all(\n        [min_bound < max_bound for min_bound, max_bound in zip(_args.min_bounds, _args.max_bounds)]\n    ), \"--min_bounds must be less than --max_bounds\"\n    # Visualization - try process args.visualize\n    if isinstance(_args.visualize, str):\n        assert _args.visualize.lower() in {\"true\", \"false\"}, \"--visualize must be True or False\"\n        _args.visualize = _args.visualize.lower() == \"true\"\n    assert _args.viser_port > 0, \"--viser_port must be positive\"\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/assets/__init__.py",
    "content": "import os\n\nimport open3d as o3d\n\n_MODULE_PATH = os.path.dirname(__file__)\n\n\ndef get_asset_path(asset_name: str) -> str:\n    return os.path.join(_MODULE_PATH, asset_name)\n\n\ndef get_panda_gripper_mesh() -> o3d.geometry.TriangleMesh:\n    asset_path = get_asset_path(\"panda_gripper_visual.obj\")\n    return o3d.io.read_triangle_mesh(asset_path)\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/assets/panda_gripper_visual.obj",
    "content": "# Created by Open3D \n# object name: panda_gripper_visual_zup\n# number of vertices: 22396\n# number of triangles: 8326\nv 0.00086 0.041913 0.000201997\nvn -0.959 0.0821 -0.2711\nv 0.00174 0.049389 -0.000646996\nvn -0.959 0.0821 -0.2711\nv 0.001526 0.041913 -0.002151\nvn -0.959 0.0821 -0.2711\nv 0.00174 0.049389 -0.000646996\nvn -0.9707 -0.0203 0.2394\nv 0.001297 0.049391 -0.002445\nvn -0.9707 -0.0203 0.2394\nv 0.001526 0.041913 -0.002151\nvn -0.9707 -0.0203 0.2394\nv 0.001297 0.049391 -0.002445\nvn -0.3562 0.0258 0.934\nv -0.000156 0.049388 -0.002999\nvn -0.3562 0.0258 0.934\nv 0.001526 0.041913 -0.002151\nvn -0.3562 0.0258 0.934\nv 0.001526 0.041913 -0.002151\nvn -0.2114 0.0631 0.9754\nv -0.000156 0.049388 -0.002999\nvn -0.2114 0.0631 0.9754\nv -0.000861 0.041913 -0.002668\nvn -0.2114 0.0631 0.9754\nv 0.000156 0.049388 0.000532997\nvn -0.597 -0.0208 -0.802\nv 0.00174 0.049389 -0.000646996\nvn -0.597 -0.0208 -0.802\nv 0.00086 0.041913 0.000201997\nvn -0.597 -0.0208 -0.802\nv 0.002086 0.049431 -0.001502\nvn -0.8966 0.0864 0.4343\nv 0.002153 0.050887 -0.001653\nvn -0.8966 0.0864 0.4343\nv 0.001465 0.049429 -0.002785\nvn -0.8966 0.0864 0.4343\nv 0.002153 0.050887 -0.001653\nvn -0.8203 -0.0545 0.5694\nv 0.00107 0.050884 -0.003214\nvn -0.8203 -0.0545 0.5694\nv 0.001465 0.049429 -0.002785\nvn -0.8203 -0.0545 0.5694\nv -0.000722 0.049434 0.000777003\nvn -0.0186 0.0948 -0.9953\nv 0.000723 0.050895 0.000889\nvn -0.0186 0.0948 -0.9953\nv 0.000698 0.049432 0.000751001\nvn -0.0186 0.0948 -0.9953\nv 0.001465 0.049429 -0.002785\nvn -0.3569 0.1741 0.9178\nv 0.00107 0.050884 -0.003214\nvn -0.3569 0.1741 0.9178\nv 1.1e-05 0.04943 -0.00335\nvn -0.3569 0.1741 0.9178\nv 0.000698 0.049432 0.000751001\nvn -0.6077 0.0856 -0.7895\nv 0.000723 0.050895 0.000889\nvn -0.6077 0.0856 -0.7895\nv 0.001819 0.049438 -0.000112\nvn -0.6077 0.0856 -0.7895\nv 0.000723 0.050895 0.000889\nvn -0.6939 -0.0274 -0.7195\nv 0.001967 0.05089 -0.000309999\nvn -0.6939 -0.0274 -0.7195\nv 0.001819 0.049438 -0.000112\nvn -0.6939 -0.0274 -0.7195\nv 0.001819 0.049438 -0.000112\nvn -0.9793 0.074 -0.1886\nv 0.001967 0.05089 -0.000309999\nvn -0.9793 0.074 -0.1886\nv 0.002086 0.049431 -0.001502\nvn -0.9793 0.074 -0.1886\nv 0.001967 0.05089 -0.000309999\nvn -0.9901 0.0311 -0.1371\nv 0.002153 0.050887 -0.001653\nvn -0.9901 0.0311 -0.1371\nv 0.002086 0.049431 -0.001502\nvn -0.9901 0.0311 -0.1371\nv 0.002887 0.049435 -0.000227998\nvn 0.9979 -0.0384 0.0517\nv 0.002975 0.049437 -0.001936\nvn 0.9979 -0.0384 0.0517\nv 0.003009 0.050894 -0.001512\nvn 0.9979 -0.0384 0.0517\nv 0.002887 0.049435 -0.000227998\nvn 0.953 0.1509 0.2626\nv 0.003009 0.050894 -0.001512\nvn 0.953 0.1509 0.2626\nv 0.002455 0.050896 0.000498001\nvn 0.953 0.1509 0.2626\nv 0.001792 0.049434 -0.003784\nvn 0.2413 0.0789 -0.9672\nv -0.00036 0.0509 -0.004201\nvn 0.2413 0.0789 -0.9672\nv 0.001871 0.050907 -0.003644\nvn 0.2413 0.0789 -0.9672\nv 0.001792 0.049434 -0.003784\nvn 0.2029 0.0191 -0.979\nv -0.000521 0.049434 -0.004263\nvn 0.2029 0.0191 -0.979\nv -0.00036 0.0509 -0.004201\nvn 0.2029 0.0191 -0.979\nv 0.001785 0.049434 0.00127\nvn 0.8043 -0.0565 0.5915\nv 0.002887 0.049435 -0.000227998\nvn 0.8043 -0.0565 0.5915\nv 0.002455 0.050896 0.000498001\nvn 0.8043 -0.0565 0.5915\nv 0.001785 0.049434 0.00127\nvn 0.5881 0.15 0.7948\nv 0.002455 0.050896 0.000498001\nvn 0.5881 0.15 0.7948\nv 0.00097 0.050885 0.001599\nvn 0.5881 0.15 0.7948\nv -1.5e-05 0.049438 0.001825\nvn 0.2938 -0.0514 0.9545\nv 0.001785 0.049434 0.00127\nvn 0.2938 -0.0514 0.9545\nv 0.00097 0.050885 0.001599\nvn 0.2938 -0.0514 0.9545\nv -1.5e-05 0.049438 0.001825\nvn 0.0095 0.1474 0.989\nv 0.00097 0.050885 0.001599\nvn 0.0095 0.1474 0.989\nv -0.001026 0.050895 0.001617\nvn 0.0095 0.1474 0.989\nv 0.002975 0.049437 -0.001936\nvn 0.8421 0.0059 -0.5393\nv 0.001792 0.049434 -0.003784\nvn 0.8421 0.0059 -0.5393\nv 0.001871 0.050907 -0.003644\nvn 0.8421 0.0059 -0.5393\nv 0.002975 0.049437 -0.001936\nvn 0.8765 0.1155 -0.4673\nv 0.001871 0.050907 -0.003644\nvn 0.8765 0.1155 -0.4673\nv 0.003009 0.050894 -0.001512\nvn 0.8765 0.1155 -0.4673\nv -0.002263 0.039916 -0.003496\nvn -0.0042 -1 -0.0081\nv -0.004843 0.039983 -0.00995\nvn -0.0074 -0.9999 -0.0074\nv -0.002269 0.039964 -0.009979\nvn -0.0076 -0.9999 -0.0073\nv -0.007075 0.039981 -0.009002\nvn -0.007 -1 -0.0056\nv -0.008675 0.039993 -0.006552\nvn -0.0085 -0.9999 -0.0074\nv -0.008757 0.03997 -0.003505\nvn -0.0083 -0.9999 -0.0077\nv -0.008763 0.040011 0.007501\nvn -0.0071 -1 0.0063\nv -0.008759 0.039971 0.001039\nvn -0.0073 -1 0.0061\nv -0.002248 0.039924 0.001015\nvn -0.0071 -1 0.0063\nv -0.00227 0.039966 0.007518\nvn -0.007 -1 0.0064\nv 0.002262 0.039916 -0.003496\nvn 0.0142 -0.9999 -0.0073\nv 0.002268 0.039964 -0.009979\nvn 0.0142 -0.9999 -0.0073\nv 0.005692 0.040011 -0.009837\nvn 0.0142 -0.9999 -0.0073\nv 0.002262 0.039916 -0.003496\nvn -0.0084 -0.9998 -0.0195\nv 0.005692 0.040011 -0.009837\nvn -0.0084 -0.9998 -0.0195\nv 0.007818 0.03996 -0.008151\nvn -0.0084 -0.9998 -0.0195\nv 0.002262 0.039916 -0.003496\nvn 0.0148 -0.9999 0.0082\nv 0.007818 0.03996 -0.008151\nvn 0.0148 -0.9999 0.0082\nv 0.008709 0.03999 -0.006172\nvn 0.0148 -0.9999 0.0082\nv 0.002262 0.039916 -0.003496\nvn 0.0084 -0.9999 -0.0071\nv 0.008709 0.03999 -0.006172\nvn 0.0084 -0.9999 -0.0071\nv 0.008758 0.039971 -0.003505\nvn 0.0084 -0.9999 -0.0071\nv 0.002274 0.039963 0.007517\nvn 0.0083 -0.9999 0.0074\nv 0.002244 0.039925 0.001011\nvn 0.0068 -1 0.0058\nv 0.008759 0.03997 0.001043\nvn 0.0083 -0.9999 0.0074\nv 0.008772 0.040028 0.007503\nvn 0.0099 -0.9999 0.009\nv -0.008809 0.041565 -0.001233\nvn -0.9996 0.0055 -0.0269\nv -0.008675 0.039993 -0.006552\nvn -0.9996 0.0055 -0.0269\nv -0.008757 0.03997 -0.003505\nvn -0.9996 0.0055 -0.0269\nv -0.008809 0.041565 -0.001233\nvn -0.9997 -0.0124 -0.0216\nv -0.008786 0.049348 -0.006804\nvn -0.9997 -0.0124 -0.0216\nv -0.008675 0.039993 -0.006552\nvn -0.9997 -0.0124 -0.0216\nv -0.008931 0.049314 0.007677\nvn -0.9999 -0.0042 -0.01\nv -0.008786 0.049348 -0.006804\nvn -0.9999 -0.0042 -0.01\nv -0.008809 0.041565 -0.001233\nvn -0.9999 -0.0042 -0.01\nv -0.008759 0.039971 0.001039\nvn -0.9998 -0.0187 0.0003\nv -0.008931 0.049314 0.007677\nvn -0.9997 -0.022 0.005\nv -0.008809 0.041565 -0.001233\nvn -0.9997 -0.0228 0.0062\nv -0.008763 0.040011 0.007501\nvn -0.9998 -0.0181 -0.0005\nv 0.008804 0.041559 -0.001233\nvn 0.9998 -0.0032 -0.0181\nv 0.008758 0.039971 -0.003505\nvn 0.9998 -0.0032 -0.0181\nv 0.008709 0.03999 -0.006172\nvn 0.9998 -0.0032 -0.0181\nv 0.008893 0.049342 -0.006133\nvn 0.9997 -0.0196 -0.0129\nv 0.008804 0.041559 -0.001233\nvn 0.9997 -0.0196 -0.0129\nv 0.008709 0.03999 -0.006172\nvn 0.9997 -0.0196 -0.0129\nv 0.008931 0.049314 0.007677\nvn 0.9998 -0.0197 0.0023\nv 0.008759 0.03997 0.001043\nvn 0.9998 -0.0176 -0.0012\nv 0.008804 0.041559 -0.001233\nvn 0.9998 -0.0216 0.0046\nv 0.008772 0.040028 0.007503\nvn 0.9999 -0.0171 -0.0019\nv 0.008893 0.049342 -0.006133\nvn 0.9999 -0.0132 -0.0027\nv -0.002263 0.039916 -0.003496\nvn 0.5751 -0.8181 -0.0065\nv -0.002269 0.039964 -0.009979\nvn 0.5751 -0.818 -0.0065\nv 1.3741e-17 0.041559 -0.010037\nvn 0.5751 -0.8181 -0.0065\nv 1.26628e-17 0.041489 -0.001233\nvn 0.575 -0.8181 -0.0065\nv 1.15847e-17 0.041561 0.007571\nvn 0.5757 -0.8176 0.0069\nv -0.00227 0.039966 0.007518\nvn 0.5749 -0.8182 0.0072\nv -0.002248 0.039924 0.001015\nvn 0.5752 -0.818 0.0071\nv 1.26628e-17 0.041489 -0.001233\nvn 0.5759 -0.8175 0.0067\nv 0.002262 0.039916 -0.003496\nvn -0.5751 -0.8181 -0.0065\nv 1.26628e-17 0.041489 -0.001233\nvn -0.575 -0.8181 -0.0065\nv 1.3741e-17 0.041559 -0.010037\nvn -0.5751 -0.8181 -0.0065\nv 0.002268 0.039964 -0.009979\nvn -0.5751 -0.818 -0.0065\nv 1.15847e-17 0.041561 0.007571\nvn -0.5758 -0.8176 0.0069\nv 1.26628e-17 0.041489 -0.001233\nvn -0.5761 -0.8174 0.0067\nv 0.002244 0.039925 0.001011\nvn -0.5752 -0.818 0.0072\nv 0.002274 0.039963 0.007517\nvn -0.5748 -0.8183 0.0074\nv 0.008931 0.049314 0.007677\nvn 0.0067 -0.0218 0.9997\nv 0.002274 0.039963 0.007517\nvn 0.0031 -0.0192 0.9998\nv 0.008772 0.040028 0.007503\nvn 0.0025 -0.0188 0.9998\nv 1.15847e-17 0.041561 0.007571\nvn 0.0076 -0.0224 0.9997\nv -0.008931 0.049314 0.007677\nvn -0.0056 -0.0206 0.9998\nv -0.00227 0.039966 0.007518\nvn -0.0033 -0.0193 0.9998\nv 1.15847e-17 0.041561 0.007571\nvn -0.007 -0.0217 0.9997\nv -0.008763 0.040011 0.007501\nvn -0.0028 -0.0189 0.9998\nv 0.008931 0.049314 0.007677\nvn -1.22452e-16 -0.0137 0.9999\nv 1.3741e-17 0.041559 -0.010037\nvn 0.008 -0.0075 -0.9999\nv -0.00473 0.049351 -0.010133\nvn 0.008 -0.0075 -0.9999\nv 0.00534 0.049355 -0.010052\nvn 0.008 -0.0075 -0.9999\nv 1.3741e-17 0.041559 -0.010037\nvn 0.0292 -0.022 -0.9993\nv 0.00534 0.049355 -0.010052\nvn 0.0292 -0.022 -0.9993\nv 0.005692 0.040011 -0.009837\nvn 0.0292 -0.022 -0.9993\nv 1.3741e-17 0.041559 -0.010037\nvn 0.0412 0.0223 -0.9989\nv 0.005692 0.040011 -0.009837\nvn 0.0412 0.0223 -0.9989\nv 0.002268 0.039964 -0.009979\nvn 0.0412 0.0223 -0.9989\nv -0.004843 0.039983 -0.00995\nvn -0.0116 -0.0195 -0.9997\nv 1.3741e-17 0.041559 -0.010037\nvn -0.0114 -0.0199 -0.9997\nv -0.002269 0.039964 -0.009979\nvn -0.0114 -0.02 -0.9997\nv -0.00473 0.049351 -0.010133\nvn -0.0116 -0.0194 -0.9997\nv 0.002887 0.049435 -0.000227998\nvn 0.0381 0.9989 0.0283\nv 0.002707 0.049384 0.001828\nvn 0.0393 0.9988 0.0284\nv 0.003945 0.0494 -0.000487003\nvn 0.0398 0.9988 0.0285\nv 0.001785 0.049434 0.00127\nvn 0.0375 0.9989 0.0283\nv -0.008786 0.049348 -0.006804\nvn -0.0349 0.9994 -0.0003\nv -0.007493 0.049395 -0.000484\nvn -0.0362 0.9993 -4.43322e-18\nv -0.007497 0.049395 -0.001987\nvn -0.033 0.9995 -0.0008\nv -0.002186 0.049391 -0.004608\nvn -0.0171 0.9989 -0.0434\nv -0.002546 0.049437 -0.003031\nvn -0.0192 0.9993 -0.0334\nv -0.000521 0.049434 -0.004263\nvn -0.0189 0.9992 -0.0345\nv 0.00534 0.049355 -0.010052\nvn 0.0121 0.9998 -0.0178\nv 0.007258 0.049388 -0.006922\nvn 0.0177 0.9996 -0.0212\nv 0.007861 0.049355 -0.008424\nvn 0.0111 0.9998 -0.0172\nv -0.007498 0.049394 0.00626\nvn -0.0002 0.9984 0.0563\nv -0.008931 0.049314 0.007677\nvn -0.0001 0.9984 0.057\nv -0.000754 0.049395 0.006264\nvn 0.0001 0.9985 0.0555\nv 0.004972 0.049393 -0.008671\nvn 0.0191 0.9996 -0.0221\nv -0.007493 0.049395 -0.000484\nvn -0.053 0.9986 0.0006\nv -0.008931 0.049314 0.007677\nvn -0.0477 0.9989 0.0015\nv -0.007498 0.049394 0.00626\nvn -0.0558 0.9984 0.0001\nv -0.008786 0.049348 -0.006804\nvn -0.0456 0.999 0.0019\nv 0.008931 0.049314 0.007677\nvn 0.0003 0.9985 0.055\nv 0.000756 0.049394 0.006265\nvn 0.0002 0.9985 0.0556\nv 0.007492 0.049394 0.006265\nvn 0.055 0.9985 0.0002\nv 0.008931 0.049314 0.007677\nvn 0.055 0.9985 0.0002\nv 0.007497 0.049395 -0.000479999\nvn 0.055 0.9985 0.0002\nv 0.007497 0.049395 -0.000479999\nvn 0.0395 0.9992 0.0004\nv 0.008931 0.049314 0.007677\nvn 0.0453 0.999 0.0019\nv 0.008893 0.049342 -0.006133\nvn 0.0389 0.9992 0.0003\nv 0.007861 0.049355 -0.008424\nvn 0.0322 0.9994 -0.0087\nv 0.007258 0.049388 -0.006922\nvn 0.0296 0.9996 -0.0034\nv 0.008893 0.049342 -0.006133\nvn 0.0317 0.9995 -0.0077\nv -0.002186 0.049391 -0.004608\nvn -0.0442 0.9983 -0.0391\nv -0.003445 0.049387 -0.00329\nvn -0.0442 0.9983 -0.0391\nv -0.002546 0.049437 -0.003031\nvn -0.0442 0.9983 -0.0391\nv -0.006869 0.049352 -0.009336\nvn -0.0098 0.9996 -0.0251\nv -0.007365 0.049394 -0.00656\nvn -0.0136 0.9998 -0.0174\nv -0.005344 0.049386 -0.008589\nvn -0.0051 0.9998 -0.018\nv 0.007492 0.049395 -0.001982\nvn 0.0293 0.9996 -0.0028\nv 0.00534 0.049355 -0.010052\nvn 0.0008 0.9996 -0.0269\nv 0.000754 0.049395 -0.00873\nvn 0.0008 0.9996 -0.0269\nv 0.004972 0.049393 -0.008671\nvn 0.0008 0.9996 -0.0269\nv -0.006869 0.049352 -0.009336\nvn -0.0286 0.9994 -0.0201\nv -0.008786 0.049348 -0.006804\nvn -0.0286 0.9994 -0.0201\nv -0.007365 0.049394 -0.00656\nvn -0.0286 0.9994 -0.0201\nv -1.5e-05 0.049438 0.001825\nvn 0.0198 0.9981 0.0576\nv 0.002707 0.049384 0.001828\nvn 0.0198 0.9981 0.0576\nv 0.001785 0.049434 0.00127\nvn 0.0198 0.9981 0.0576\nv -0.003445 0.049387 -0.00329\nvn -0.0496 0.9986 -0.0204\nv -0.003924 0.04939 -0.001967\nvn -0.0496 0.9986 -0.0204\nv -0.002546 0.049437 -0.003031\nvn -0.0496 0.9986 -0.0204\nv -1.5e-05 0.049438 0.001825\nvn 0.0198 0.9992 0.036\nv 0.00073 0.049392 0.002687\nvn 0.0198 0.9992 0.036\nv 0.002707 0.049384 0.001828\nvn 0.0198 0.9992 0.036\nv -0.002546 0.049437 -0.003031\nvn -0.0399 0.9992 -0.0078\nv -0.003924 0.04939 -0.001967\nvn -0.0476 0.9989 -0.0015\nv -0.003038 0.049434 -0.000886004\nvn -0.0407 0.9991 -0.0072\nv 0.00534 0.049355 -0.010052\nvn 0.0001 0.9996 -0.0297\nv -0.00075 0.049395 -0.008725\nvn -0.0014 0.9997 -0.0259\nv 0.000754 0.049395 -0.00873\nvn 0.0001 0.9996 -0.0294\nv 0.007492 0.049395 -0.001982\nvn 0.0373 0.9993 -0.0001\nv -0.003923 0.04939 -0.000499996\nvn -0.049 0.9988 -0.0003\nv -1.5e-05 0.049438 0.001825\nvn -0.0012 0.9985 0.0541\nv -0.000734 0.04939 0.00269\nvn -0.0012 0.9985 0.0541\nv 0.00073 0.049392 0.002687\nvn -0.0012 0.9985 0.0541\nv -0.002078 0.049434 0.001092\nvn -0.0168 0.9989 0.0428\nv -0.002057 0.049387 0.002212\nvn -0.0171 0.999 0.0414\nv -1.5e-05 0.049438 0.001825\nvn -0.017 0.999 0.0426\nv -0.000734 0.04939 0.00269\nvn -0.0172 0.999 0.0409\nv -0.003923 0.04939 -0.000499996\nvn -0.0421 0.999 0.0155\nv -0.003376 0.049391 0.000952003\nvn -0.0408 0.999 0.0158\nv -0.003038 0.049434 -0.000886004\nvn -0.036 0.9992 0.0167\nv -0.00473 0.049351 -0.010133\nvn -0.0034 0.9995 -0.0301\nv -0.00075 0.049395 -0.008725\nvn -0.0002 1 0.0014\nv 0.000733 0.04939 -0.005156\nvn 0.0002 1 0.0013\nv 0.000754 0.049395 -0.00873\nvn 0.0002 1 0.0012\nv 0.007492 0.049395 -0.001982\nvn -0.0013 1 -1.59204e-19\nv 0.003923 0.04939 -0.001966\nvn -0.0007 1 -0.0013\nv 0.007497 0.049395 -0.000479999\nvn 0.001 1 -0.0055\nv -0.002078 0.049434 0.001092\nvn -0.0353 0.9992 0.0168\nv 0.002056 0.049387 -0.004678\nvn 0.0365 0.9985 -0.0415\nv 0.001792 0.049434 -0.003784\nvn 0.0365 0.9985 -0.0415\nv 0.003375 0.049391 -0.003418\nvn 0.0365 0.9985 -0.0415\nv -0.002078 0.049434 0.001092\nvn -0.0381 0.9983 0.0431\nv -0.003376 0.049391 0.000952003\nvn -0.0381 0.9983 0.0431\nv -0.002057 0.049387 0.002212\nvn -0.0381 0.9983 0.0431\nv 0.007492 0.049394 0.006265\nvn 0.0001 0.9984 0.0561\nv -0.003924 0.04939 -0.001967\nvn 0.0014 1 -0.0003\nv -0.007497 0.049395 -0.001987\nvn 0.0013 1 -0.0002\nv -0.003923 0.04939 -0.000499996\nvn 0.0014 1 -0.0002\nv 0.001792 0.049434 -0.003784\nvn 0.0321 0.9992 -0.0223\nv 0.002975 0.049437 -0.001936\nvn 0.0321 0.9992 -0.0223\nv 0.003375 0.049391 -0.003418\nvn 0.0321 0.9992 -0.0223\nv -0.007365 0.049394 -0.00656\nvn -0.0318 0.9995 -0.0012\nv 0.000733 0.04939 -0.005156\nvn 0.0195 0.9987 -0.0465\nv 0.001792 0.049434 -0.003784\nvn 0.0195 0.9987 -0.0465\nv 0.002056 0.049387 -0.004678\nvn 0.0195 0.9987 -0.0465\nv 0.003375 0.049391 -0.003418\nvn 0.0484 0.9987 -0.0179\nv 0.002975 0.049437 -0.001936\nvn 0.0486 0.9988 -0.0081\nv 0.003923 0.04939 -0.001966\nvn 0.0483 0.9987 -0.0174\nv 0.000733 0.04939 -0.005156\nvn 0.0082 0.9993 -0.0377\nv -0.000521 0.049434 -0.004263\nvn 0.0082 0.9993 -0.0377\nv 0.001792 0.049434 -0.003784\nvn 0.0082 0.9993 -0.0377\nv -0.000734 0.04939 0.00269\nvn -0.0013 1 -0.0014\nv -0.000754 0.049395 0.006264\nvn -0.0009 1 -0.0013\nv 0.00073 0.049392 0.002687\nvn 0.0001 1 -0.0009\nv -0.000734 0.04939 -0.005156\nvn -0.0003 1 0.0014\nv 0.000756 0.049394 0.006265\nvn 0.0004 1 -0.0007\nv 0.003945 0.0494 -0.000487003\nvn 0.0016 1 -0.0068\nv 0.003945 0.0494 -0.000487003\nvn 0.0487 0.9988 -0.0075\nv -0.000734 0.04939 -0.005156\nvn -0.0003 0.9988 -0.0495\nv -0.000521 0.049434 -0.004263\nvn -0.0003 0.9988 -0.0495\nv 0.000733 0.04939 -0.005156\nvn -0.0003 0.9988 -0.0495\nv -0.007493 0.049395 -0.000484\nvn 0.0013 1 -0.0001\nv 0.002975 0.049437 -0.001936\nvn 0.0335 0.9994 0.0027\nv 0.002887 0.049435 -0.000227998\nvn 0.0335 0.9994 0.0027\nv 0.003945 0.0494 -0.000487003\nvn 0.0335 0.9994 0.0027\nv -0.000734 0.04939 -0.005156\nvn -0.0166 0.9988 -0.0456\nv -0.008786 0.049348 -0.006804\nvn -0.7972 -0.0039 -0.6037\nv -0.006869 0.049352 -0.009336\nvn -0.7972 -0.0039 -0.6037\nv -0.007075 0.039981 -0.009002\nvn -0.7972 -0.0039 -0.6037\nv -0.008786 0.049348 -0.006804\nvn -0.8372 -0.0247 -0.5464\nv -0.007075 0.039981 -0.009002\nvn -0.8372 -0.0247 -0.5464\nv -0.008675 0.039993 -0.006552\nvn -0.8372 -0.0247 -0.5464\nv -0.006869 0.049352 -0.009336\nvn -0.3908 -0.0242 -0.9202\nv -0.004843 0.039983 -0.00995\nvn -0.3908 -0.0242 -0.9202\nv -0.007075 0.039981 -0.009002\nvn -0.3908 -0.0242 -0.9202\nv -0.006869 0.049352 -0.009336\nvn -0.3492 -0.0141 -0.9369\nv -0.00473 0.049351 -0.010133\nvn -0.3492 -0.0141 -0.9369\nv -0.004843 0.039983 -0.00995\nvn -0.3492 -0.0141 -0.9369\nv 0.007861 0.049355 -0.008424\nvn 0.6208 -0.0256 -0.7836\nv 0.007818 0.03996 -0.008151\nvn 0.6208 -0.0256 -0.7836\nv 0.005692 0.040011 -0.009837\nvn 0.6208 -0.0256 -0.7836\nv 0.00534 0.049355 -0.010052\nvn 0.5425 0.0011 -0.8401\nv 0.007861 0.049355 -0.008424\nvn 0.5425 0.0011 -0.8401\nv 0.005692 0.040011 -0.009837\nvn 0.5425 0.0011 -0.8401\nv 0.008893 0.049342 -0.006133\nvn 0.9116 -0.0161 -0.4107\nv 0.008709 0.03999 -0.006172\nvn 0.9117 -0.0162 -0.4105\nv 0.007818 0.03996 -0.008151\nvn 0.9117 -0.0161 -0.4105\nv 0.007861 0.049355 -0.008424\nvn 0.9116 -0.0161 -0.4107\nv -0.007493 0.049395 -0.000484\nvn 0.9998 0.0206 0.0006\nv -0.007333 0.041442 0.006094\nvn 0.9998 0.0205 0.0006\nv -0.007331 0.041442 -0.000313002\nvn 0.9998 0.0203 0.0003\nv -0.007498 0.049394 0.00626\nvn 0.9998 0.0207 0.0008\nv -0.003923 0.04939 -0.000499996\nvn -0.0121 0.0286 0.9995\nv -0.007331 0.041442 -0.000313002\nvn -0.0121 0.0286 0.9995\nv -0.004115 0.041434 -0.000273998\nvn -0.0121 0.0286 0.9995\nv -0.007493 0.049395 -0.000484\nvn 0.0045 0.0215 0.9998\nv -0.007331 0.041442 -0.000313002\nvn 0.0045 0.0215 0.9998\nv -0.003923 0.04939 -0.000499996\nvn 0.0045 0.0215 0.9998\nv -0.000914 0.04144 0.002842\nvn -0.3399 0.0257 0.9401\nv -0.000734 0.04939 0.00269\nvn -0.3399 0.0257 0.9401\nv -0.002057 0.049387 0.002212\nvn -0.3399 0.0257 0.9401\nv -0.002675 0.041428 0.002054\nvn -0.4087 0.0136 0.9126\nv -0.000914 0.04144 0.002842\nvn -0.4087 0.0136 0.9126\nv -0.002057 0.049387 0.002212\nvn -0.4087 0.0136 0.9126\nv -0.002675 0.041428 0.002054\nvn -0.6902 0.0392 0.7226\nv -0.002057 0.049387 0.002212\nvn -0.6902 0.0392 0.7226\nv -0.003376 0.049391 0.000952003\nvn -0.6902 0.0392 0.7226\nv -0.004115 0.041434 -0.000273998\nvn -0.8504 -0.002 0.5261\nv -0.002675 0.041428 0.002054\nvn -0.8504 -0.002 0.5261\nv -0.003376 0.049391 0.000952003\nvn -0.8504 -0.002 0.5261\nv -0.004115 0.041434 -0.000273998\nvn -0.9351 0.0326 0.3528\nv -0.003376 0.049391 0.000952003\nvn -0.9351 0.0326 0.3528\nv -0.003923 0.04939 -0.000499996\nvn -0.9351 0.0326 0.3528\nv -0.000916 0.041442 0.006094\nvn -0.9998 0.0209 -0.0047\nv -0.000734 0.04939 0.00269\nvn -0.9998 0.0222 -0.0018\nv -0.000914 0.04144 0.002842\nvn -0.9997 0.0226 -0.0009\nv -0.000754 0.049395 0.006264\nvn -0.9998 0.0205 -0.0057\nv -0.007333 0.041442 0.006094\nvn 1.2244e-16 0.0209 -0.9998\nv -0.007498 0.049394 0.00626\nvn 0.0004 0.0211 -0.9998\nv -0.000916 0.041442 0.006094\nvn 0.0003 0.0211 -0.9998\nv -0.000754 0.049395 0.006264\nvn 0.0006 0.0214 -0.9998\nv -0.002675 0.041428 0.002054\nvn -0.0027 1 0.0022\nv -0.000916 0.041442 0.006094\nvn -0.0056 1 -0.0012\nv -0.000914 0.04144 0.002842\nvn -0.0069 1 -0.0006\nv -0.007333 0.041442 0.006094\nvn 0.0001 1 -0.0034\nv -0.007331 0.041442 -0.000313002\nvn 0.0026 1 0.0006\nv -0.004115 0.041434 -0.000273998\nvn 0.0025 1 0.0009\nv 0.007333 0.041443 0.006095\nvn 0.0001 0.0215 -0.9998\nv 0.000756 0.049394 0.006265\nvn 1.2244e-16 0.0214 -0.9998\nv 0.007492 0.049394 0.006265\nvn 1.2244e-16 0.0214 -0.9998\nv 0.000916 0.041442 0.006094\nvn 0.0001 0.0215 -0.9998\nv 0.00073 0.049392 0.002687\nvn 0.9998 0.0221 -0.003\nv 0.000916 0.041442 0.006094\nvn 0.9998 0.0207 -0.0062\nv 0.000909 0.041442 0.00284\nvn 0.9997 0.0225 -0.002\nv 0.000756 0.049394 0.006265\nvn 0.9998 0.0203 -0.0071\nv 0.003045 0.04142 0.00181\nvn 0.8812 0.0364 0.4714\nv 0.003945 0.0494 -0.000487003\nvn 0.8812 0.0364 0.4714\nv 0.002707 0.049384 0.001828\nvn 0.8812 0.0364 0.4714\nv 0.003045 0.04142 0.00181\nvn 0.9005 0.0235 0.4342\nv 0.004073 0.041442 -0.000323\nvn 0.9005 0.0235 0.4342\nv 0.003945 0.0494 -0.000487003\nvn 0.9005 0.0235 0.4342\nv 0.000909 0.041442 0.00284\nvn 0.3985 0.0267 0.9168\nv 0.002707 0.049384 0.001828\nvn 0.3985 0.0267 0.9168\nv 0.00073 0.049392 0.002687\nvn 0.3985 0.0267 0.9168\nv 0.000909 0.041442 0.00284\nvn 0.4344 0.0165 0.9006\nv 0.003045 0.04142 0.00181\nvn 0.4344 0.0165 0.9006\nv 0.002707 0.049384 0.001828\nvn 0.4344 0.0165 0.9006\nv 0.003945 0.0494 -0.000487003\nvn -0.0028 0.0207 0.9998\nv 0.007332 0.041443 -0.000313002\nvn -0.0022 0.0209 0.9998\nv 0.007497 0.049395 -0.000479999\nvn -0.0019 0.021 0.9998\nv 0.004073 0.041442 -0.000323\nvn -0.0031 0.0205 0.9998\nv 0.007333 0.041443 0.006095\nvn -0.9998 0.0204 -0.0002\nv 0.007497 0.049395 -0.000479999\nvn -0.9998 0.0203 -0.0003\nv 0.007332 0.041443 -0.000313002\nvn -0.9998 0.0207 0.0001\nv 0.007492 0.049394 0.006265\nvn -0.9998 0.0201 -0.0006\nv 0.003045 0.04142 0.00181\nvn 0.009 1 -0.0007\nv 0.000916 0.041442 0.006094\nvn 0.0087 1 -0.0009\nv 0.007333 0.041443 0.006095\nvn -0.0001 1 -0.0053\nv 0.003045 0.04142 0.00181\nvn -0.0009 1 0.009\nv 0.007333 0.041443 0.006095\nvn -0.0054 1 -0.0001\nv 0.007332 0.041443 -0.000313002\nvn -0.0011 1 0.0087\nv 0.000909 0.041442 0.00284\nvn 0.0104 0.9999 -0.0001\nv 0.004073 0.041442 -0.000323\nvn -0.0002 0.9999 0.0104\nv 0.007141 0.041431 -0.006675\nvn -0.6565 0.0331 0.7536\nv 0.007258 0.049388 -0.006922\nvn -0.6565 0.0331 0.7536\nv 0.00509 0.041432 -0.008461\nvn -0.6565 0.0331 0.7536\nv 0.007258 0.049388 -0.006922\nvn -0.6075 0.0119 0.7943\nv 0.004972 0.049393 -0.008671\nvn -0.6075 0.0119 0.7943\nv 0.00509 0.041432 -0.008461\nvn -0.6075 0.0119 0.7943\nv 0.007332 0.041444 -0.002153\nvn -0.9987 0.0187 0.0466\nv 0.007258 0.049388 -0.006922\nvn -0.9989 0.0165 0.043\nv 0.007141 0.041431 -0.006675\nvn -0.999 0.0161 0.0423\nv 0.007492 0.049395 -0.001982\nvn -0.9987 0.019 0.0472\nv 0.007332 0.041444 -0.002153\nvn -0.0045 0.0215 -0.9998\nv 0.003923 0.04939 -0.001966\nvn -0.0045 0.0215 -0.9998\nv 0.007492 0.049395 -0.001982\nvn -0.0045 0.0215 -0.9998\nv 0.004115 0.041433 -0.002192\nvn 0.0121 0.0286 -0.9995\nv 0.003923 0.04939 -0.001966\nvn 0.0121 0.0286 -0.9995\nv 0.007332 0.041444 -0.002153\nvn 0.0121 0.0286 -0.9995\nv 0.000913 0.04144 -0.005308\nvn 0.3397 0.0257 -0.9402\nv 0.000733 0.04939 -0.005156\nvn 0.3397 0.0257 -0.9402\nv 0.002056 0.049387 -0.004678\nvn 0.3397 0.0257 -0.9402\nv 0.002675 0.041427 -0.00452\nvn 0.4085 0.0136 -0.9127\nv 0.000913 0.04144 -0.005308\nvn 0.4085 0.0136 -0.9127\nv 0.002056 0.049387 -0.004678\nvn 0.4085 0.0136 -0.9127\nv 0.002675 0.041427 -0.00452\nvn 0.6902 0.0393 -0.7226\nv 0.002056 0.049387 -0.004678\nvn 0.6902 0.0393 -0.7226\nv 0.003375 0.049391 -0.003418\nvn 0.6902 0.0393 -0.7226\nv 0.004115 0.041433 -0.002192\nvn 0.8505 -0.002 -0.5259\nv 0.002675 0.041427 -0.00452\nvn 0.8505 -0.002 -0.5259\nv 0.003375 0.049391 -0.003418\nvn 0.8505 -0.002 -0.5259\nv 0.004115 0.041433 -0.002192\nvn 0.9351 0.0326 -0.3528\nv 0.003375 0.049391 -0.003418\nvn 0.9351 0.0326 -0.3528\nv 0.003923 0.04939 -0.001966\nvn 0.9351 0.0326 -0.3528\nv 0.000733 0.04939 -0.005156\nvn 0.9998 0.0222 0.002\nv 0.000916 0.041443 -0.008561\nvn 0.9998 0.021 0.0049\nv 0.000754 0.049395 -0.00873\nvn 0.9998 0.0206 0.0058\nv 0.000913 0.04144 -0.005308\nvn 0.9997 0.0226 0.001\nv 0.004972 0.049393 -0.008671\nvn -0.0223 0.0252 0.9994\nv 0.000916 0.041443 -0.008561\nvn -0.0156 0.0217 0.9996\nv 0.00509 0.041432 -0.008461\nvn -0.0238 0.0259 0.9994\nv 0.000754 0.049395 -0.00873\nvn -0.0141 0.021 0.9997\nv 0.004115 0.041433 -0.002192\nvn -0.0025 1 -0.0022\nv 0.007332 0.041444 -0.002153\nvn -0.0031 1 -0.0026\nv 0.007141 0.041431 -0.006675\nvn -0.0025 1 -0.0022\nv 0.002675 0.041427 -0.00452\nvn -0.0023 1 -2.81669e-19\nv 0.00509 0.041432 -0.008461\nvn 0.0043 1 0.0032\nv 0.000913 0.04144 -0.005308\nvn 0.0027 1 0.0011\nv 0.000916 0.041443 -0.008561\nvn 0.0025 1 0.0009\nv -0.006608 0.041413 -0.007402\nvn 0.914 0.0441 0.4033\nv -0.007365 0.049394 -0.00656\nvn 0.914 0.0441 0.4033\nv -0.00731 0.041436 -0.005814\nvn 0.914 0.0441 0.4033\nv -0.004925 0.041437 -0.008496\nvn 0.5443 0.0385 0.838\nv -0.005344 0.049386 -0.008589\nvn 0.5443 0.0385 0.838\nv -0.006608 0.041413 -0.007402\nvn 0.5443 0.0385 0.838\nv -0.005344 0.049386 -0.008589\nvn 0.7085 -0.0073 0.7057\nv -0.007365 0.049394 -0.00656\nvn 0.7085 -0.0073 0.7057\nv -0.006608 0.041413 -0.007402\nvn 0.7085 -0.0073 0.7057\nv -0.005344 0.049386 -0.008589\nvn 0.0297 0.0202 0.9994\nv -0.000916 0.041444 -0.00856\nvn 0.0297 0.0202 0.9994\nv -0.00075 0.049395 -0.008725\nvn 0.0297 0.0202 0.9994\nv -0.005344 0.049386 -0.008589\nvn 0.0158 0.0124 0.9998\nv -0.004925 0.041437 -0.008496\nvn 0.0158 0.0124 0.9998\nv -0.000916 0.041444 -0.00856\nvn 0.0158 0.0124 0.9998\nv -0.000916 0.041444 -0.00856\nvn -0.9998 0.0209 0.0045\nv -0.000734 0.04939 -0.005156\nvn -0.9998 0.0209 0.0045\nv -0.00075 0.049395 -0.008725\nvn -0.9998 0.0209 0.0045\nv -0.000959 0.041433 -0.005348\nvn -0.9995 0.0286 -0.0135\nv -0.000734 0.04939 -0.005156\nvn -0.9995 0.0286 -0.0135\nv -0.000916 0.041444 -0.00856\nvn -0.9995 0.0286 -0.0135\nv -0.004076 0.04144 -0.002146\nvn -0.9401 0.0257 -0.3399\nv -0.003924 0.04939 -0.001967\nvn -0.9401 0.0257 -0.3399\nv -0.003445 0.049387 -0.00329\nvn -0.9401 0.0257 -0.3399\nv -0.003287 0.041427 -0.003909\nvn -0.9127 0.0137 -0.4085\nv -0.004076 0.04144 -0.002146\nvn -0.9127 0.0137 -0.4085\nv -0.003445 0.049387 -0.00329\nvn -0.9127 0.0137 -0.4085\nv -0.003287 0.041427 -0.003909\nvn -0.7226 0.0393 -0.6902\nv -0.003445 0.049387 -0.00329\nvn -0.7226 0.0393 -0.6902\nv -0.002186 0.049391 -0.004608\nvn -0.7226 0.0393 -0.6902\nv -0.000959 0.041433 -0.005348\nvn -0.5259 -0.002 -0.8505\nv -0.003287 0.041427 -0.003909\nvn -0.5259 -0.002 -0.8505\nv -0.002186 0.049391 -0.004608\nvn -0.5259 -0.002 -0.8505\nv -0.000959 0.041433 -0.005348\nvn -0.3529 0.0326 -0.9351\nv -0.002186 0.049391 -0.004608\nvn -0.3529 0.0326 -0.9351\nv -0.000734 0.04939 -0.005156\nvn -0.3529 0.0326 -0.9351\nv -0.007332 0.041443 -0.002153\nvn 0.005 0.0213 -0.9998\nv -0.003924 0.04939 -0.001967\nvn 0.0027 0.0223 -0.9997\nv -0.004076 0.04144 -0.002146\nvn 0.0021 0.0226 -0.9997\nv -0.007497 0.049395 -0.001987\nvn 0.0057 0.021 -0.9998\nv -0.007365 0.049394 -0.00656\nvn 1 0.0075 0.0061\nv -0.007332 0.041443 -0.002153\nvn 1 0.0075 0.0061\nv -0.00731 0.041436 -0.005814\nvn 1 0.0075 0.0061\nv -0.007497 0.049395 -0.001987\nvn 0.9994 0.0202 0.0289\nv -0.007332 0.041443 -0.002153\nvn 0.9994 0.0202 0.0289\nv -0.007365 0.049394 -0.00656\nvn 0.9994 0.0202 0.0289\nv -0.004925 0.041437 -0.008496\nvn -0.0015 1 0.003\nv -0.003287 0.041427 -0.003909\nvn -0.0088 0.9999 0.0055\nv -0.000959 0.041433 -0.005348\nvn -0.0014 1 0.0029\nv -0.000916 0.041444 -0.00856\nvn -0.0015 1 0.0031\nv -0.00731 0.041436 -0.005814\nvn 0.0029 1 -0.0035\nv -0.004076 0.04144 -0.002146\nvn 0.0011 1 -0.0022\nv -0.003287 0.041427 -0.003909\nvn 0.0069 0.9999 -0.0098\nv -0.007332 0.041443 -0.002153\nvn 0.0008 1 -0.002\nv -0.006608 0.041413 -0.007402\nvn 0.0075 0.9999 -0.0111\nv -0.006608 0.041413 -0.007402\nvn -0.0107 0.9999 0.0062\nv 0.000723 0.050895 0.000889\nvn -0.0023 1 -0.0066\nv 0.002455 0.050896 0.000498001\nvn -0.0073 1 -0.0034\nv 0.001967 0.05089 -0.000309999\nvn -0.0091 1 -0.0038\nv 0.003009 0.050894 -0.001512\nvn -0.0079 1 -0.0033\nv 0.000723 0.050895 0.000889\nvn 0.0036 0.9999 0.0125\nv 0.00097 0.050885 0.001599\nvn 0.0035 0.9999 0.0125\nv 0.002455 0.050896 0.000498001\nvn 0.0021 0.9999 0.013\nv 0.002153 0.050887 -0.001653\nvn -0.0083 1 -0.0035\nv -0.001026 0.050895 0.001617\nvn 0.005 0.9999 0.012\nv -0.000985 0.050888 0.000701\nvn -0.0031 1 -0.0074\nv -0.001026 0.050895 0.001617\nvn -0.0031 1 -0.0074\nv 0.000723 0.050895 0.000889\nvn -0.0031 1 -0.0074\nv 0.002153 0.050887 -0.001653\nvn -0.0194 0.9997 0.0129\nv 0.003009 0.050894 -0.001512\nvn -0.0108 0.9999 0.0117\nv 0.001871 0.050907 -0.003644\nvn -0.0131 0.9998 0.012\nv -0.002 0.050897 -0.000318999\nvn 0.0152 0.9999 -0.0065\nv -0.001026 0.050895 0.001617\nvn 0.0152 0.9999 -0.0065\nv -0.000985 0.050888 0.000701\nvn 0.0152 0.9999 -0.0065\nv -0.002346 0.050887 0.000587997\nvn -0.006 0.9999 0.0089\nv -0.001026 0.050895 0.001617\nvn -0.0115 0.9999 0.0069\nv -0.002 0.050897 -0.000318999\nvn -0.0105 0.9999 0.0071\nv 0.00107 0.050884 -0.003214\nvn -0.0218 0.9997 0.0132\nv -0.002999 0.050897 -0.000878002\nvn -0.0049 0.9999 0.0094\nv -0.00036 0.0509 -0.004201\nvn 0.004 0.9999 0.0106\nv -0.000827 0.050891 -0.003252\nvn 0.004 0.9999 0.0106\nv 0.00107 0.050884 -0.003214\nvn 0.004 0.9999 0.0106\nv -0.00036 0.0509 -0.004201\nvn -0.0113 0.9994 0.0327\nv 0.00107 0.050884 -0.003214\nvn -0.0113 0.9994 0.0327\nv 0.001871 0.050907 -0.003644\nvn -0.0113 0.9994 0.0327\nv -0.002999 0.050897 -0.000878002\nvn 0.0092 0.9998 -0.016\nv -0.002 0.050897 -0.000318999\nvn 0.0092 0.9998 -0.016\nv -0.002051 0.05087 -0.002057\nvn 0.0092 0.9998 -0.016\nv -0.002339 0.050885 -0.003188\nvn 0.0349 0.9994 0.0047\nv -0.002999 0.050897 -0.000878002\nvn 0.0349 0.9994 0.0047\nv -0.002051 0.05087 -0.002057\nvn 0.0349 0.9994 0.0047\nv -0.00036 0.0509 -0.004201\nvn -0.0182 0.9998 -0.0003\nv -0.002051 0.05087 -0.002057\nvn -0.0182 0.9998 -0.0003\nv -0.000827 0.050891 -0.003252\nvn -0.0182 0.9998 -0.0003\nv -0.002339 0.050885 -0.003188\nvn -0.0004 0.9999 0.0137\nv -0.002051 0.05087 -0.002057\nvn -0.0004 0.9999 0.0137\nv -0.00036 0.0509 -0.004201\nvn -0.0004 0.9999 0.0137\nv -0.002546 0.049437 -0.003031\nvn -0.9743 0.0273 -0.2235\nv -0.003038 0.049434 -0.000886004\nvn -0.9743 0.0273 -0.2235\nv -0.002999 0.050897 -0.000878002\nvn -0.9743 0.0273 -0.2235\nv -0.002546 0.049437 -0.003031\nvn -0.9558 0.1073 -0.2738\nv -0.002999 0.050897 -0.000878002\nvn -0.9558 0.1073 -0.2738\nv -0.002339 0.050885 -0.003188\nvn -0.9558 0.1073 -0.2738\nv -0.002078 0.049434 0.001092\nvn -0.3331 -0.0975 0.9378\nv -1.5e-05 0.049438 0.001825\nvn -0.3331 -0.0975 0.9378\nv -0.001026 0.050895 0.001617\nvn -0.3331 -0.0975 0.9378\nv -0.000521 0.049434 -0.004263\nvn -0.5196 -0.0181 -0.8542\nv -0.002546 0.049437 -0.003031\nvn -0.5196 -0.0181 -0.8542\nv -0.002339 0.050885 -0.003188\nvn -0.5196 -0.0181 -0.8542\nv -0.002078 0.049434 0.001092\nvn -0.6077 0.1577 0.7783\nv -0.001026 0.050895 0.001617\nvn -0.6077 0.1577 0.7783\nv -0.002346 0.050887 0.000587997\nvn -0.6077 0.1577 0.7783\nv -0.000521 0.049434 -0.004263\nvn -0.4544 0.0875 -0.8865\nv -0.002339 0.050885 -0.003188\nvn -0.4544 0.0875 -0.8865\nv -0.00036 0.0509 -0.004201\nvn -0.4544 0.0875 -0.8865\nv -0.002078 0.049434 0.001092\nvn -0.913 -0.0274 0.4069\nv -0.002346 0.050887 0.000587997\nvn -0.913 -0.0274 0.4069\nv -0.002999 0.050897 -0.000878002\nvn -0.913 -0.0274 0.4069\nv -0.003038 0.049434 -0.000886004\nvn -0.8992 0.0217 0.4369\nv -0.002078 0.049434 0.001092\nvn -0.8992 0.0217 0.4369\nv -0.002999 0.050897 -0.000878002\nvn -0.8992 0.0217 0.4369\nv -0.002155 0.049418 -0.000796999\nvn 0.7316 0.139 -0.6674\nv -0.002 0.050897 -0.000318999\nvn 0.7316 0.139 -0.6674\nv -0.000722 0.049434 0.000777003\nvn 0.7316 0.139 -0.6674\nv 0.00107 0.050884 -0.003214\nvn -0.0204 -0.0785 0.9967\nv -0.000827 0.050891 -0.003252\nvn -0.0204 -0.0785 0.9967\nv 1.1e-05 0.04943 -0.00335\nvn -0.0204 -0.0785 0.9967\nv -0.002 0.050897 -0.000318999\nvn 0.7062 0.0908 -0.7021\nv -0.000985 0.050888 0.000701\nvn 0.7062 0.0908 -0.7021\nv -0.000722 0.049434 0.000777003\nvn 0.7062 0.0908 -0.7021\nv 1.1e-05 0.04943 -0.00335\nvn 0.3489 0.138 0.927\nv -0.000827 0.050891 -0.003252\nvn 0.3489 0.138 0.927\nv -0.001448 0.049429 -0.002801\nvn 0.3489 0.138 0.927\nv -0.000985 0.050888 0.000701\nvn 0.1099 -0.0325 -0.9934\nv 0.000723 0.050895 0.000889\nvn 0.1099 -0.0325 -0.9934\nv -0.000722 0.049434 0.000777003\nvn 0.1099 -0.0325 -0.9934\nv -0.000827 0.050891 -0.003252\nvn 0.6971 -0.0761 0.7129\nv -0.002051 0.05087 -0.002057\nvn 0.6971 -0.0761 0.7129\nv -0.001448 0.049429 -0.002801\nvn 0.6971 -0.0761 0.7129\nv -0.001448 0.049429 -0.002801\nvn 0.9202 0.2171 0.3257\nv -0.002051 0.05087 -0.002057\nvn 0.9202 0.2171 0.3257\nv -0.002155 0.049418 -0.000796999\nvn 0.9202 0.2171 0.3257\nv -0.002051 0.05087 -0.002057\nvn 0.995 -0.0954 -0.0281\nv -0.002 0.050897 -0.000318999\nvn 0.995 -0.0954 -0.0281\nv -0.002155 0.049418 -0.000796999\nvn 0.995 -0.0954 -0.0281\nv -0.000861 0.041913 -0.002668\nvn 0.959 0.0821 0.2711\nv -0.001741 0.049389 -0.001819\nvn 0.959 0.0821 0.2711\nv -0.001526 0.041912 -0.000314999\nvn 0.959 0.0821 0.2711\nv -0.001741 0.049389 -0.001819\nvn 0.9707 -0.0203 -0.2394\nv -0.001298 0.049391 -2.09986e-05\nvn 0.9707 -0.0203 -0.2394\nv -0.001526 0.041912 -0.000314999\nvn 0.9707 -0.0203 -0.2394\nv -0.001298 0.049391 -2.09986e-05\nvn 0.3562 0.0258 -0.934\nv 0.000156 0.049388 0.000532997\nvn 0.3562 0.0258 -0.934\nv -0.001526 0.041912 -0.000314999\nvn 0.3562 0.0258 -0.934\nv -0.001526 0.041912 -0.000314999\nvn 0.2114 0.0631 -0.9754\nv 0.000156 0.049388 0.000532997\nvn 0.2114 0.0631 -0.9754\nv 0.00086 0.041913 0.000201997\nvn 0.2114 0.0631 -0.9754\nv -0.000156 0.049388 -0.002999\nvn 0.597 -0.0208 0.802\nv -0.001741 0.049389 -0.001819\nvn 0.597 -0.0208 0.802\nv -0.000861 0.041913 -0.002668\nvn 0.597 -0.0208 0.802\nv 0.00174 0.049389 -0.000646996\nvn -0.2476 0.9675 -0.0521\nv 0.001819 0.049438 -0.000112\nvn -0.2476 0.9675 -0.0521\nv 0.002086 0.049431 -0.001502\nvn -0.2476 0.9675 -0.0521\nv -0.001298 0.049391 -2.09986e-05\nvn 0.2215 0.9521 -0.2108\nv -0.002155 0.049418 -0.000796999\nvn 0.2215 0.9521 -0.2108\nv -0.000722 0.049434 0.000777003\nvn 0.2215 0.9521 -0.2108\nv 0.000156 0.049388 0.000532997\nvn -0.0022 0.9819 -0.1895\nv -0.000722 0.049434 0.000777003\nvn -0.0022 0.9819 -0.1895\nv 0.000698 0.049432 0.000751001\nvn -0.0022 0.9819 -0.1895\nv 1.1e-05 0.04943 -0.00335\nvn -0.037 0.9947 0.0958\nv 0.001297 0.049391 -0.002445\nvn -0.0387 0.9944 0.0982\nv 0.001465 0.049429 -0.002785\nvn -0.0362 0.9949 0.0946\nv -0.001448 0.049429 -0.002801\nvn 0.0397 0.9978 0.0532\nv -0.001741 0.049389 -0.001819\nvn 0.0397 0.9978 0.0532\nv -0.000156 0.049388 -0.002999\nvn 0.0397 0.9978 0.0532\nv 0.001297 0.049391 -0.002445\nvn -0.1493 0.9881 0.038\nv 0.00174 0.049389 -0.000646996\nvn -0.1493 0.9881 0.038\nv 0.001465 0.049429 -0.002785\nvn -0.1493 0.9881 0.038\nv 0.001465 0.049429 -0.002785\nvn -0.0574 0.998 0.0264\nv 0.00174 0.049389 -0.000646996\nvn -0.0574 0.998 0.0264\nv 0.002086 0.049431 -0.001502\nvn -0.0574 0.998 0.0264\nv -0.000156 0.049388 -0.002999\nvn -0.0395 0.9943 0.0994\nv 0.00174 0.049389 -0.000646996\nvn -0.0677 0.9944 -0.0811\nv 0.000698 0.049432 0.000751001\nvn -0.0677 0.9944 -0.0811\nv 0.001819 0.049438 -0.000112\nvn -0.0677 0.9944 -0.0811\nv 0.00174 0.049389 -0.000646996\nvn -0.0516 0.9963 -0.0692\nv 0.000156 0.049388 0.000532997\nvn -0.0516 0.9963 -0.0692\nv 0.000698 0.049432 0.000751001\nvn -0.0516 0.9963 -0.0692\nv -0.001448 0.049429 -0.002801\nvn 0.5421 0.8172 0.1955\nv -0.002155 0.049418 -0.000796999\nvn 0.5421 0.8172 0.1955\nv -0.001741 0.049389 -0.001819\nvn 0.5421 0.8172 0.1955\nv 1.1e-05 0.04943 -0.00335\nvn 0.0532 0.9883 0.1429\nv -0.001448 0.049429 -0.002801\nvn 0.0532 0.9883 0.1429\nv -0.000156 0.049388 -0.002999\nvn 0.0532 0.9883 0.1429\nv -0.001741 0.049389 -0.001819\nvn 0.0429 0.999 -0.0118\nv -0.002155 0.049418 -0.000796999\nvn 0.0429 0.999 -0.0118\nv -0.001298 0.049391 -2.09986e-05\nvn 0.0429 0.999 -0.0118\nv -0.001298 0.049391 -2.09986e-05\nvn 0.0303 0.9967 -0.0753\nv -0.000722 0.049434 0.000777003\nvn 0.0303 0.9967 -0.0753\nv 0.000156 0.049388 0.000532997\nvn 0.0303 0.9967 -0.0753\nv -0.000861 0.041913 -0.002668\nvn 0 1 0\nv -0.001526 0.041912 -0.000314999\nvn -0.0003 1 0.0002\nv 0.00086 0.041913 0.000201997\nvn 0 1 0\nv 0.001526 0.041913 -0.002151\nvn 0.0003 1 -0.0001\nv 0.002244 0.039925 0.001011\nvn 0.0079 -0.8194 -0.5732\nv 1.26628e-17 0.041489 -0.001233\nvn 0.0065 -0.8175 -0.5759\nv 0.008804 0.041559 -0.001233\nvn 0.0069 -0.8179 -0.5753\nv 0.008759 0.03997 0.001043\nvn 0.0084 -0.8199 -0.5724\nv 0.002262 0.039916 -0.003496\nvn 0.0075 -0.8194 0.5732\nv 0.008758 0.039971 -0.003505\nvn 0.0077 -0.8197 0.5727\nv 0.008804 0.041559 -0.001233\nvn 0.0067 -0.8184 0.5747\nv 1.26628e-17 0.041489 -0.001233\nvn 0.0065 -0.8181 0.575\nv -0.008809 0.041565 -0.001233\nvn -0.0072 -0.818 0.5751\nv -0.008757 0.03997 -0.003505\nvn -0.0076 -0.8186 0.5743\nv -0.002263 0.039916 -0.003496\nvn -0.0074 -0.8183 0.5747\nv 1.26628e-17 0.041489 -0.001233\nvn -0.0071 -0.8178 0.5754\nv -0.008809 0.041565 -0.001233\nvn -0.0073 -0.8176 -0.5757\nv 1.26628e-17 0.041489 -0.001233\nvn -0.0071 -0.8173 -0.5761\nv -0.002248 0.039924 0.001015\nvn -0.0078 -0.8184 -0.5746\nv -0.008759 0.039971 0.001039\nvn -0.0081 -0.8188 -0.574\nv -0.002354 0.04942 -0.003769\nvn 0.6173 -0.6997 0.3596\nv 2e-06 0.052805 -0.001227\nvn 0.6173 -0.6997 0.3596\nv -0.003367 0.04942 -0.002029\nvn 0.6173 -0.6997 0.3596\nv -0.00121 0.049422 -0.004438\nvn 0.3576 -0.7071 0.6101\nv 2e-06 0.052805 -0.001227\nvn 0.3576 -0.7071 0.6101\nv -0.002354 0.04942 -0.003769\nvn 0.3576 -0.7071 0.6101\nv -0.00121 0.049422 -0.004438\nvn 0.0556 -0.6977 0.7142\nv 0.0009 0.049423 -0.0046\nvn 0.0556 -0.6977 0.7142\nv 2e-06 0.052805 -0.001227\nvn 0.0556 -0.6977 0.7142\nv 0.0009 0.049423 -0.0046\nvn -0.3884 -0.7004 0.5988\nv 0.002569 0.049414 -0.003529\nvn -0.3884 -0.7004 0.5988\nv 2e-06 0.052805 -0.001227\nvn -0.3884 -0.7004 0.5988\nv 0.003461 0.049426 -0.001688\nvn -0.6413 -0.6995 0.3154\nv 2e-06 0.052805 -0.001227\nvn -0.6413 -0.6995 0.3154\nv 0.002569 0.049414 -0.003529\nvn -0.6413 -0.6995 0.3154\nv 0.010405 0.058387 0.039803\nvn 1.22416e-16 -0.0272 -0.9996\nv -0.010303 0.059675 0.039767\nvn 1.22416e-16 -0.0272 -0.9996\nv 0.010307 0.059704 0.039767\nvn 1.22416e-16 -0.0272 -0.9996\nv 0.010405 0.058387 0.039803\nvn 0.0016 -0.0017 -1\nv -0.010402 0.058212 0.039769\nvn 0.0016 -0.0017 -1\nv -0.010303 0.059675 0.039767\nvn 0.0016 -0.0017 -1\nv 0.010328 0.057411 0.037455\nvn 0.0014 1 -0.0021\nv -0.010206 0.057442 0.038657\nvn 0.0014 1 -0.0021\nv 0.010402 0.057414 0.038997\nvn 0.0014 1 -0.0021\nv 0.010328 0.057411 0.037455\nvn 3.09836e-18 0.9997 -0.0253\nv -0.010338 0.057411 0.037419\nvn 3.09836e-18 0.9997 -0.0253\nv -0.010206 0.057442 0.038657\nvn 3.09836e-18 0.9997 -0.0253\nv 0.01035 0.042563 0.041967\nvn 0.9997 -0.0207 -0.0105\nv 0.010464 0.048072 0.042026\nvn 0.9997 -0.0207 -0.0105\nv 0.010366 0.042524 0.043634\nvn 0.9997 -0.0207 -0.0105\nv 0.010338 0.048029 0.039929\nvn 0.9965 -0.0596 -0.0588\nv 0.010498 0.050668 0.039959\nvn 0.9965 -0.0596 -0.0588\nv 0.010464 0.048072 0.042026\nvn 0.9965 -0.0596 -0.0588\nv 0.010379 0.052792 0.024915\nvn 0.9995 -0.0228 -0.0219\nv 0.010501 0.057036 0.026053\nvn 0.9995 -0.0228 -0.0219\nv 0.010375 0.051577 0.025994\nvn 0.9995 -0.0228 -0.0219\nv 0.010375 0.051577 0.025994\nvn 0.9997 -0.023 -0.0024\nv 0.010501 0.057036 0.026053\nvn 0.9997 -0.023 -0.0024\nv 0.010403 0.051445 0.038968\nvn 0.9997 -0.023 -0.0024\nv 0.010403 0.051445 0.038968\nvn 1 0.0001 0.0076\nv 0.010501 0.057036 0.026053\nvn 1 0.0001 0.0076\nv 0.010402 0.057414 0.038997\nvn 1 0.0001 0.0076\nv 0.010379 0.052792 0.024915\nvn 0.9871 0.0144 -0.1593\nv 0.010333 0.056215 0.02494\nvn 0.9871 0.0144 -0.1593\nv 0.010501 0.057036 0.026053\nvn 0.9871 0.0144 -0.1593\nv 0.010402 0.057414 0.038997\nvn 0.9998 0.0116 -0.0178\nv 0.010405 0.058387 0.039803\nvn 0.9998 0.0116 -0.0178\nv 0.010498 0.050668 0.039959\nvn 0.9998 0.0116 -0.0178\nv 0.010403 0.051445 0.038968\nvn 0.9955 0.0006 -0.0945\nv 0.010402 0.057414 0.038997\nvn 0.9955 0.0006 -0.0945\nv 0.010498 0.050668 0.039959\nvn 0.9955 0.0006 -0.0945\nv 0.010498 0.050668 0.039959\nvn 0.9999 -0 0.0161\nv 0.010464 0.060754 0.042026\nvn 0.9999 -0 0.0161\nv 0.010464 0.048072 0.042026\nvn 0.9999 -0 0.0161\nv 0.010405 0.058387 0.039803\nvn 0.9992 0.0112 -0.0384\nv 0.010464 0.060754 0.042026\nvn 0.9992 0.0112 -0.0384\nv 0.010498 0.050668 0.039959\nvn 0.9992 0.0112 -0.0384\nv 0.010405 0.058387 0.039803\nvn 0.9936 0.0632 -0.0936\nv 0.010256 0.060798 0.039847\nvn 0.9936 0.0632 -0.0936\nv 0.010464 0.060754 0.042026\nvn 0.9936 0.0632 -0.0936\nv 0.010464 0.060754 0.042026\nvn 0.9989 -0 0.0467\nv 0.010391 0.066304 0.043603\nvn 0.9984 -0.0008 0.056\nv 0.010464 0.048072 0.042026\nvn 0.9988 -0.0003 0.0498\nv 0.010366 0.042524 0.043634\nvn 0.9983 -0.0009 0.0576\nv 0.010464 0.060754 0.042026\nvn 0.9995 0.0205 -0.0255\nv 0.01035 0.066263 0.041967\nvn 0.9995 0.0205 -0.0255\nv 0.010391 0.066304 0.043603\nvn 0.9995 0.0205 -0.0255\nv -0.010213 0.050281 0.039749\nvn -0.0269 -0.0777 -0.9966\nv -0.006784 0.04787 0.039845\nvn -0.0269 -0.0777 -0.9966\nv -0.010339 0.048029 0.039929\nvn -0.0269 -0.0777 -0.9966\nv -0.010213 0.050281 0.039749\nvn 0.0001 -0.0394 -0.9992\nv 0.01021 0.050258 0.039752\nvn 0.0002 -0.0401 -0.9992\nv -0.006784 0.04787 0.039845\nvn 0.0004 -0.0418 -0.9991\nv 0.006688 0.047826 0.039854\nvn 0.0005 -0.0427 -0.9991\nv 0.01021 0.050258 0.039752\nvn 0.0247 -0.0776 -0.9967\nv 0.010338 0.048029 0.039929\nvn 0.0247 -0.0776 -0.9967\nv 0.006688 0.047826 0.039854\nvn 0.0247 -0.0776 -0.9967\nv 0.005033 0.045965 0.039892\nvn 0.0124 -0.0006 -0.9999\nv 0.004875 0.042588 0.039892\nvn 0.0124 -0.0006 -0.9999\nv -0.004882 0.046314 0.039769\nvn 0.0124 -0.0006 -0.9999\nv -0.004882 0.046314 0.039769\nvn -0.0049 -0.0458 -0.9989\nv 0.004875 0.042588 0.039892\nvn -0.0049 -0.0458 -0.9989\nv -0.004875 0.042538 0.039942\nvn -0.0049 -0.0458 -0.9989\nv -0.006784 0.04787 0.039845\nvn 0.0008 0.0499 -0.9988\nv 0.006688 0.047826 0.039854\nvn 0.0008 0.0499 -0.9988\nv -0.004882 0.046314 0.039769\nvn 0.0008 0.0499 -0.9988\nv 0.006688 0.047826 0.039854\nvn 0.0113 -0.0305 -0.9995\nv 0.005033 0.045965 0.039892\nvn 0.0113 -0.0305 -0.9995\nv -0.004882 0.046314 0.039769\nvn 0.0113 -0.0305 -0.9995\nv -0.01035 0.042563 0.041967\nvn -0.0146 -0.9997 -0.0172\nv -0.004862 0.042482 0.042006\nvn -0.0146 -0.9997 -0.0172\nv -0.010378 0.042535 0.043614\nvn -0.0146 -0.9997 -0.0172\nv -0.004875 0.042538 0.039942\nvn 3.30655e-18 -0.9996 -0.027\nv 0.004861 0.042482 0.042006\nvn 3.30655e-18 -0.9996 -0.027\nv -0.004862 0.042482 0.042006\nvn 3.30655e-18 -0.9996 -0.027\nv 0.004875 0.042588 0.039892\nvn 0.0049 -0.9987 -0.05\nv 0.004861 0.042482 0.042006\nvn 0.0049 -0.9987 -0.05\nv -0.004875 0.042538 0.039942\nvn 0.0049 -0.9987 -0.05\nv 0.01035 0.042563 0.041967\nvn 0.0145 -0.9996 -0.0235\nv 0.010366 0.042524 0.043634\nvn 0.0145 -0.9996 -0.0235\nv 0.004861 0.042482 0.042006\nvn 0.0145 -0.9996 -0.0235\nv 0.010366 0.042524 0.043634\nvn -0.0005 -0.9995 0.0303\nv -0.010378 0.042535 0.043614\nvn -0.0006 -0.9995 0.0309\nv -0.004862 0.042482 0.042006\nvn -0.0002 -0.9996 0.0272\nv 0.004861 0.042482 0.042006\nvn -3.14734e-18 -0.9997 0.0257\nv -0.010389 0.06628 0.043634\nvn -0.015 0.9998 -0.0104\nv -0.004901 0.066345 0.042006\nvn -0.015 0.9998 -0.0104\nv -0.01035 0.066263 0.041967\nvn -0.015 0.9998 -0.0104\nv -0.004901 0.066345 0.042006\nvn -0.0046 0.999 -0.0443\nv 0.004838 0.066298 0.039929\nvn -0.0046 0.999 -0.0443\nv -0.004839 0.066252 0.039882\nvn -0.0046 0.999 -0.0443\nv 0.004913 0.066315 0.041988\nvn 0.0031 1 -0.0079\nv 0.004838 0.066298 0.039929\nvn 0.0031 1 -0.0085\nv -0.004901 0.066345 0.042006\nvn 0.0031 1 -0.0044\nv 0.010391 0.066304 0.043603\nvn 0.0094 0.9996 -0.0253\nv 0.01035 0.066263 0.041967\nvn 0.0094 0.9996 -0.0253\nv 0.004913 0.066315 0.041988\nvn 0.0094 0.9996 -0.0253\nv -0.010389 0.06628 0.043634\nvn -0.0011 0.9993 0.0365\nv 0.010391 0.066304 0.043603\nvn -0.0011 0.9993 0.0365\nv -0.004901 0.066345 0.042006\nvn -0.0011 0.9993 0.0365\nv 0.010391 0.066304 0.043603\nvn 0.0031 1 -0.0037\nv 0.00474 0.063087 0.039775\nvn 0.0045 0.0475 -0.9989\nv -0.004839 0.066252 0.039882\nvn 0.0045 0.0475 -0.9989\nv 0.004838 0.066298 0.039929\nvn 0.0045 0.0475 -0.9989\nv 0.00474 0.063087 0.039775\nvn -0.0001 0.0335 -0.9994\nv -0.004737 0.063113 0.039777\nvn -0.0001 0.0335 -0.9994\nv -0.004839 0.066252 0.039882\nvn -0.0001 0.0335 -0.9994\nv 0.010366 0.042524 0.043634\nvn 0.0013 0.0012 1\nv -0.010389 0.06628 0.043634\nvn -0.0008 -0.0007 1\nv -0.010378 0.042535 0.043614\nvn -0.0009 -0.0008 1\nv 0.010391 0.066304 0.043603\nvn 0.0015 0.0013 1\nv -0.010409 0.051617 0.026048\nvn -0.002 -0.9999 -0.0162\nv 0.010375 0.051577 0.025994\nvn -0.0015 -0.9999 -0.0154\nv -0.010398 0.051407 0.039015\nvn 0.0013 -0.9999 -0.0109\nv 0.010403 0.051445 0.038968\nvn 0.0018 -0.9999 -0.0102\nv 0.010333 0.056215 0.02494\nvn 0.0022 0.0072 -1\nv 0.010379 0.052792 0.024915\nvn 0.0022 0.0072 -1\nv -0.010328 0.056056 0.024894\nvn 0.0022 0.0072 -1\nv -0.010328 0.056056 0.024894\nvn -0.0023 -0.0213 -0.9998\nv 0.010379 0.052792 0.024915\nvn -0.0023 -0.0213 -0.9998\nv -0.010383 0.052612 0.024967\nvn -0.0023 -0.0213 -0.9998\nv -0.010268 0.060763 0.039835\nvn -0.9947 0.0542 -0.0874\nv -0.010402 0.058212 0.039769\nvn -0.9947 0.0542 -0.0874\nv -0.010459 0.060803 0.042022\nvn -0.9947 0.0542 -0.0874\nv -0.010389 0.06628 0.043634\nvn -0.9987 -0.0003 0.0509\nv -0.010459 0.060803 0.042022\nvn -0.9992 0.0005 0.0412\nv -0.010465 0.048072 0.042026\nvn -0.999 0.0002 0.0445\nv -0.010378 0.042535 0.043614\nvn -0.9986 -0.0005 0.0528\nv -0.010465 0.048072 0.042026\nvn -0.9996 -0.0206 -0.0173\nv -0.01035 0.042563 0.041967\nvn -0.9996 -0.0206 -0.0173\nv -0.010378 0.042535 0.043614\nvn -0.9996 -0.0206 -0.0173\nv -0.01035 0.066263 0.041967\nvn -0.9995 0.0196 -0.0235\nv -0.010459 0.060803 0.042022\nvn -0.9995 0.0196 -0.0235\nv -0.010389 0.06628 0.043634\nvn -0.9995 0.0196 -0.0235\nv -0.010498 0.050654 0.039968\nvn -0.9965 -0.0596 -0.0587\nv -0.010339 0.048029 0.039929\nvn -0.9965 -0.0596 -0.0587\nv -0.010465 0.048072 0.042026\nvn -0.9965 -0.0596 -0.0587\nv -0.010502 0.057036 0.026053\nvn -0.9999 -0.0171 0.0006\nv -0.010398 0.051407 0.039015\nvn -0.9999 -0.0172 0.0005\nv -0.010499 0.057232 0.039037\nvn -0.9999 -0.0173 0.0005\nv -0.010409 0.051617 0.026048\nvn -0.9999 -0.0171 0.0006\nv -0.010502 0.057036 0.026053\nvn -0.9991 -0.017 -0.04\nv -0.010383 0.052612 0.024967\nvn -0.9991 -0.017 -0.04\nv -0.010409 0.051617 0.026048\nvn -0.9991 -0.017 -0.04\nv -0.010328 0.056056 0.024894\nvn -0.9873 0.0123 -0.1584\nv -0.010383 0.052612 0.024967\nvn -0.9873 0.0123 -0.1584\nv -0.010502 0.057036 0.026053\nvn -0.9873 0.0123 -0.1584\nv -0.010499 0.057232 0.039037\nvn -0.9929 -0.0168 -0.1178\nv -0.010398 0.051407 0.039015\nvn -0.9929 -0.0168 -0.1178\nv -0.010498 0.050654 0.039968\nvn -0.9929 -0.0168 -0.1178\nv -0.010402 0.058212 0.039769\nvn -0.9937 0.0156 0.1108\nv -0.010499 0.057232 0.039037\nvn -0.9937 0.0156 0.1108\nv -0.010498 0.050654 0.039968\nvn -0.9937 0.0156 0.1108\nv -0.010459 0.060803 0.042022\nvn -0.9999 0.0005 0.0167\nv -0.010498 0.050654 0.039968\nvn -0.9999 0.0005 0.0167\nv -0.010465 0.048072 0.042026\nvn -0.9999 0.0005 0.0167\nv -0.010459 0.060803 0.042022\nvn -0.9992 0.0117 -0.0387\nv -0.010402 0.058212 0.039769\nvn -0.9992 0.0117 -0.0387\nv -0.010498 0.050654 0.039968\nvn -0.9992 0.0117 -0.0387\nv -0.01035 0.066263 0.041967\nvn -0.0452 -0.0092 -0.9989\nv -0.007073 0.061006 0.041867\nvn -0.0452 -0.0092 -0.9989\nv -0.010459 0.060803 0.042022\nvn -0.0452 -0.0092 -0.9989\nv -0.005207 0.062541 0.041867\nvn -0.0103 0.0126 -0.9999\nv -0.007073 0.061006 0.041867\nvn -0.0103 0.0126 -0.9999\nv -0.01035 0.066263 0.041967\nvn -0.0103 0.0126 -0.9999\nv -0.004901 0.066345 0.042006\nvn 0.0067 0.0361 -0.9993\nv -0.005207 0.062541 0.041867\nvn 0.0067 0.0361 -0.9993\nv -0.01035 0.066263 0.041967\nvn 0.0067 0.0361 -0.9993\nv -0.005031 0.063349 0.040066\nvn -0.9141 0.3957 0.0881\nv -0.005556 0.062134 0.040067\nvn -0.9141 0.3957 0.0881\nv -0.005207 0.062541 0.041867\nvn -0.9141 0.3957 0.0881\nv -0.005207 0.062541 0.041867\nvn -0.6351 0.7719 -0.0286\nv -0.006974 0.061021 0.040068\nvn -0.6351 0.7719 -0.0286\nv -0.007073 0.061006 0.041867\nvn -0.6351 0.7719 -0.0286\nv -0.005556 0.062134 0.040067\nvn -0.6167 0.7851 -0.0578\nv -0.006974 0.061021 0.040068\nvn -0.6167 0.7851 -0.0578\nv -0.005207 0.062541 0.041867\nvn -0.6167 0.7851 -0.0578\nv -0.004839 0.066252 0.039882\nvn -0.9974 0.0639 -0.0319\nv -0.005031 0.063349 0.040066\nvn -0.9974 0.0639 -0.0319\nv -0.004901 0.066345 0.042006\nvn -0.9974 0.0639 -0.0319\nv -0.004901 0.066345 0.042006\nvn -0.9948 0.0822 -0.0603\nv -0.005031 0.063349 0.040066\nvn -0.9948 0.0822 -0.0603\nv -0.005207 0.062541 0.041867\nvn -0.9948 0.0822 -0.0603\nv -0.006974 0.061021 0.040068\nvn -0.0597 0.9982 0.0048\nv -0.010459 0.060803 0.042022\nvn -0.0597 0.9982 0.0048\nv -0.007073 0.061006 0.041867\nvn -0.0597 0.9982 0.0048\nv -0.006974 0.061021 0.040068\nvn -0.0761 0.9968 -0.0246\nv -0.010268 0.060763 0.039835\nvn -0.0761 0.9968 -0.0246\nv -0.010459 0.060803 0.042022\nvn -0.0761 0.9968 -0.0246\nv -0.005151 0.046139 0.041867\nvn 0.0065 -0.0373 -0.9993\nv -0.004862 0.042482 0.042006\nvn 0.0065 -0.0373 -0.9993\nv -0.01035 0.042563 0.041967\nvn 0.0065 -0.0373 -0.9993\nv -0.006993 0.047813 0.041867\nvn -0.045 0.0097 -0.9989\nv -0.01035 0.042563 0.041967\nvn -0.045 0.0097 -0.9989\nv -0.010465 0.048072 0.042026\nvn -0.045 0.0097 -0.9989\nv -0.006993 0.047813 0.041867\nvn -0.011 -0.012 -0.9999\nv -0.005151 0.046139 0.041867\nvn -0.011 -0.012 -0.9999\nv -0.01035 0.042563 0.041967\nvn -0.011 -0.012 -0.9999\nv -0.006993 0.047813 0.041867\nvn -0.67 -0.7369 -0.0901\nv -0.006784 0.04787 0.039845\nvn -0.67 -0.7369 -0.0901\nv -0.005151 0.046139 0.041867\nvn -0.67 -0.7369 -0.0901\nv -0.006784 0.04787 0.039845\nvn -0.756 -0.6526 0.0516\nv -0.005121 0.045962 0.040073\nvn -0.756 -0.6526 0.0516\nv -0.005151 0.046139 0.041867\nvn -0.756 -0.6526 0.0516\nv -0.010339 0.048029 0.039929\nvn -0.0737 -0.9972 0.0162\nv -0.006993 0.047813 0.041867\nvn -0.0737 -0.9972 0.0162\nv -0.010465 0.048072 0.042026\nvn -0.0737 -0.9972 0.0162\nv -0.010339 0.048029 0.039929\nvn -0.0452 -0.9984 -0.033\nv -0.006784 0.04787 0.039845\nvn -0.0452 -0.9984 -0.033\nv -0.006993 0.047813 0.041867\nvn -0.0452 -0.9984 -0.033\nv -0.005121 0.045962 0.040073\nvn -0.9974 -0.0713 -0.0097\nv -0.004875 0.042538 0.039942\nvn -0.9974 -0.0713 -0.0097\nv -0.005151 0.046139 0.041867\nvn -0.9974 -0.0713 -0.0097\nv -0.005151 0.046139 0.041867\nvn -0.9969 -0.0788 0.0044\nv -0.004875 0.042538 0.039942\nvn -0.9969 -0.0788 0.0044\nv -0.004862 0.042482 0.042006\nvn -0.9969 -0.0788 0.0044\nv 0.01035 0.066263 0.041967\nvn 0.0465 -0.0097 -0.9989\nv 0.010464 0.060754 0.042026\nvn 0.0465 -0.0097 -0.9989\nv 0.007105 0.060991 0.041867\nvn 0.0465 -0.0097 -0.9989\nv 0.01035 0.066263 0.041967\nvn -0.0036 0.0318 -0.9995\nv 0.005206 0.062541 0.041867\nvn -0.0036 0.0318 -0.9995\nv 0.004913 0.066315 0.041988\nvn -0.0036 0.0318 -0.9995\nv 0.01035 0.066263 0.041967\nvn 0.0103 0.0126 -0.9999\nv 0.007105 0.060991 0.041867\nvn 0.0103 0.0126 -0.9999\nv 0.005206 0.062541 0.041867\nvn 0.0103 0.0126 -0.9999\nv 0.007105 0.060991 0.041867\nvn 0.632 0.7742 -0.0333\nv 0.006963 0.06103 0.040078\nvn 0.632 0.7742 -0.0333\nv 0.005206 0.062541 0.041867\nvn 0.632 0.7742 -0.0333\nv 0.006963 0.06103 0.040078\nvn 0.6165 0.7852 -0.0579\nv 0.005556 0.062134 0.040067\nvn 0.6165 0.7852 -0.0579\nv 0.005206 0.062541 0.041867\nvn 0.6165 0.7852 -0.0579\nv 0.005556 0.062134 0.040067\nvn 0.9135 0.3972 0.0877\nv 0.005031 0.06334 0.040064\nvn 0.9135 0.3972 0.0877\nv 0.005206 0.062541 0.041867\nvn 0.9135 0.3972 0.0877\nv 0.010256 0.060798 0.039847\nvn 0.0711 0.9974 0.0154\nv 0.006963 0.06103 0.040078\nvn 0.0714 0.9973 0.0158\nv 0.007105 0.060991 0.041867\nvn 0.0699 0.9975 0.0136\nv 0.010464 0.060754 0.042026\nvn 0.0698 0.9975 0.0132\nv 0.005031 0.06334 0.040064\nvn 0.9973 0.0635 -0.0369\nv 0.004838 0.066298 0.039929\nvn 0.9973 0.0635 -0.0369\nv 0.004913 0.066315 0.041988\nvn 0.9973 0.0635 -0.0369\nv 0.005031 0.06334 0.040064\nvn 0.995 0.0791 -0.0611\nv 0.004913 0.066315 0.041988\nvn 0.995 0.0791 -0.0611\nv 0.005206 0.062541 0.041867\nvn 0.995 0.0791 -0.0611\nv 0.01035 0.042563 0.041967\nvn -0.0064 -0.0434 -0.999\nv 0.004861 0.042482 0.042006\nvn -0.0064 -0.0434 -0.999\nv 0.005051 0.045645 0.041867\nvn -0.0064 -0.0434 -0.999\nv 0.007155 0.047844 0.041867\nvn 1.22465e-16 0 -1\nv 0.005051 0.045645 0.041867\nvn 1.22465e-16 0 -1\nv 0.005778 0.046963 0.041867\nvn 1.22465e-16 0 -1\nv 0.007155 0.047844 0.041867\nvn 0.0121 -0.0116 -0.9999\nv 0.01035 0.042563 0.041967\nvn 0.0121 -0.0116 -0.9999\nv 0.005051 0.045645 0.041867\nvn 0.0121 -0.0116 -0.9999\nv 0.010464 0.048072 0.042026\nvn 0.0473 0.0097 -0.9988\nv 0.01035 0.042563 0.041967\nvn 0.0473 0.0097 -0.9988\nv 0.007155 0.047844 0.041867\nvn 0.0473 0.0097 -0.9988\nv 0.005051 0.045645 0.041867\nvn 0.8725 -0.481 -0.0859\nv 0.005033 0.045965 0.039892\nvn 0.8725 -0.481 -0.0859\nv 0.005778 0.046963 0.041867\nvn 0.8725 -0.481 -0.0859\nv 0.005033 0.045965 0.039892\nvn 0.7467 -0.663 0.0535\nv 0.006688 0.047826 0.039854\nvn 0.7467 -0.663 0.0535\nv 0.005778 0.046963 0.041867\nvn 0.7467 -0.663 0.0535\nv 0.005778 0.046963 0.041867\nvn 0.5349 -0.8368 -0.1167\nv 0.006688 0.047826 0.039854\nvn 0.5349 -0.8368 -0.1167\nv 0.007155 0.047844 0.041867\nvn 0.5349 -0.8368 -0.1167\nv 0.004875 0.042588 0.039892\nvn 0.9988 -0.0469 -0.0167\nv 0.005033 0.045965 0.039892\nvn 0.9988 -0.0469 -0.0167\nv 0.005051 0.045645 0.041867\nvn 0.9988 -0.0469 -0.0167\nv 0.004875 0.042588 0.039892\nvn 0.9982 -0.0599 0.0034\nv 0.005051 0.045645 0.041867\nvn 0.9982 -0.0599 0.0034\nv 0.004861 0.042482 0.042006\nvn 0.9982 -0.0599 0.0034\nv 0.007155 0.047844 0.041867\nvn 0.0681 -0.9975 0.0166\nv 0.010338 0.048029 0.039929\nvn 0.0681 -0.9975 0.0166\nv 0.010464 0.048072 0.042026\nvn 0.0681 -0.9975 0.0166\nv 0.006688 0.047826 0.039854\nvn 0.0556 -0.9984 -0.004\nv 0.010338 0.048029 0.039929\nvn 0.0556 -0.9984 -0.004\nv 0.007155 0.047844 0.041867\nvn 0.0556 -0.9984 -0.004\nv -0.010398 0.051407 0.039015\nvn -0.0009 -0.5466 -0.8374\nv 0.010403 0.051445 0.038968\nvn -0.0008 -0.5478 -0.8366\nv -0.010213 0.050281 0.039749\nvn -0.0006 -0.5498 -0.8353\nv 0.01021 0.050258 0.039752\nvn -0.0005 -0.551 -0.8345\nv 0.010405 0.058387 0.039803\nvn -0.0041 0.6375 -0.7704\nv 0.010402 0.057414 0.038997\nvn -0.0041 0.6375 -0.7704\nv -0.010402 0.058212 0.039769\nvn -0.0041 0.6375 -0.7704\nv -0.010402 0.058212 0.039769\nvn 0.0105 0.8229 -0.5681\nv 0.010402 0.057414 0.038997\nvn 0.0105 0.8229 -0.5681\nv -0.010206 0.057442 0.038657\nvn 0.0105 0.8229 -0.5681\nv -0.010198 0.057334 0.025997\nvn 0.0025 0.7107 -0.7035\nv 0.010194 0.05735 0.026086\nvn 0.0025 0.7107 -0.7035\nv 0.010333 0.056215 0.02494\nvn 0.0025 0.7107 -0.7035\nv -0.010328 0.056056 0.024894\nvn -0.0033 0.6536 -0.7568\nv -0.010198 0.057334 0.025997\nvn -0.0033 0.6536 -0.7568\nv 0.010333 0.056215 0.02494\nvn -0.0033 0.6536 -0.7568\nv -0.010383 0.052612 0.024967\nvn 0.0039 -0.664 -0.7477\nv 0.010379 0.052792 0.024915\nvn 0.0039 -0.664 -0.7477\nv 0.010375 0.051577 0.025994\nvn 0.0039 -0.664 -0.7477\nv -0.010409 0.051617 0.026048\nvn -0.0032 -0.7358 -0.6771\nv -0.010383 0.052612 0.024967\nvn -0.0032 -0.7358 -0.6771\nv 0.010375 0.051577 0.025994\nvn -0.0032 -0.7358 -0.6771\nv 0.006963 0.06103 0.040078\nvn 0.0167 0.8152 -0.579\nv 0.010256 0.060798 0.039847\nvn 0.0167 0.8152 -0.579\nv 0.006566 0.060819 0.03977\nvn 0.0167 0.8152 -0.579\nv 0.006963 0.06103 0.040078\nvn 0.3737 0.468 -0.8008\nv 0.006566 0.060819 0.03977\nvn 0.3737 0.468 -0.8008\nv 0.005556 0.062134 0.040067\nvn 0.3737 0.468 -0.8008\nv 0.006566 0.060819 0.03977\nvn 0.7725 0.6222 -0.1272\nv 0.00474 0.063087 0.039775\nvn 0.7725 0.6222 -0.1272\nv 0.005556 0.062134 0.040067\nvn 0.7725 0.6222 -0.1272\nv 0.005556 0.062134 0.040067\nvn 0.5668 0.2445 -0.7867\nv 0.00474 0.063087 0.039775\nvn 0.5668 0.2445 -0.7867\nv 0.005031 0.06334 0.040064\nvn 0.5668 0.2445 -0.7867\nv 0.004838 0.066298 0.039929\nvn 0.6982 0.0129 -0.7157\nv 0.005031 0.06334 0.040064\nvn 0.6982 0.0129 -0.7157\nv 0.00474 0.063087 0.039775\nvn 0.6982 0.0129 -0.7157\nv 0.010307 0.059704 0.039767\nvn 0.9592 0.0643 -0.2752\nv 0.010256 0.060798 0.039847\nvn 0.9592 0.0643 -0.2752\nv 0.010405 0.058387 0.039803\nvn 0.9592 0.0643 -0.2752\nv 0.010194 0.05735 0.026086\nvn 0.7147 0.6993 -0.0122\nv 0.010328 0.057411 0.037455\nvn 0.7147 0.6993 -0.0122\nv 0.010501 0.057036 0.026053\nvn 0.7147 0.6993 -0.0122\nv 0.010328 0.057411 0.037455\nvn 0.4392 0.8981 -0.0229\nv 0.010402 0.057414 0.038997\nvn 0.4392 0.8981 -0.0229\nv 0.010501 0.057036 0.026053\nvn 0.4392 0.8981 -0.0229\nv 0.010333 0.056215 0.02494\nvn 0.5722 0.6165 -0.5408\nv 0.010194 0.05735 0.026086\nvn 0.5722 0.6165 -0.5408\nv 0.010501 0.057036 0.026053\nvn 0.5722 0.6165 -0.5408\nv -0.004839 0.066252 0.039882\nvn -0.701 0.0011 -0.7132\nv -0.004737 0.063113 0.039777\nvn -0.701 0.0011 -0.7132\nv -0.005031 0.063349 0.040066\nvn -0.701 0.0011 -0.7132\nv -0.005031 0.063349 0.040066\nvn -0.5716 0.2472 -0.7824\nv -0.004737 0.063113 0.039777\nvn -0.5716 0.2472 -0.7824\nv -0.005556 0.062134 0.040067\nvn -0.5716 0.2472 -0.7824\nv -0.004737 0.063113 0.039777\nvn -0.776 0.6251 -0.0842\nv -0.006603 0.060795 0.03977\nvn -0.776 0.6251 -0.0842\nv -0.005556 0.062134 0.040067\nvn -0.776 0.6251 -0.0842\nv -0.005556 0.062134 0.040067\nvn -0.3656 0.4646 -0.8065\nv -0.006603 0.060795 0.03977\nvn -0.3656 0.4646 -0.8065\nv -0.006974 0.061021 0.040068\nvn -0.3656 0.4646 -0.8065\nv -0.006603 0.060795 0.03977\nvn -0.0179 0.787 -0.6167\nv -0.010268 0.060763 0.039835\nvn -0.0179 0.787 -0.6167\nv -0.006974 0.061021 0.040068\nvn -0.0179 0.787 -0.6167\nv 0.010403 0.051445 0.038968\nvn 0.8352 -0.3911 -0.3865\nv 0.010498 0.050668 0.039959\nvn 0.8352 -0.3911 -0.3865\nv 0.01021 0.050258 0.039752\nvn 0.8352 -0.3911 -0.3865\nv -0.010402 0.058212 0.039769\nvn -0.8709 0.058 -0.488\nv -0.010268 0.060763 0.039835\nvn -0.8709 0.058 -0.488\nv -0.010303 0.059675 0.039767\nvn -0.8709 0.058 -0.488\nv 0.010338 0.048029 0.039929\nvn 0.609 -0.0278 -0.7927\nv 0.01021 0.050258 0.039752\nvn 0.609 -0.0278 -0.7927\nv 0.010498 0.050668 0.039959\nvn 0.609 -0.0278 -0.7927\nv -0.010206 0.057442 0.038657\nvn -0.8206 0.3921 -0.4157\nv -0.010499 0.057232 0.039037\nvn -0.8206 0.3921 -0.4157\nv -0.010402 0.058212 0.039769\nvn -0.8206 0.3921 -0.4157\nv -0.010338 0.057411 0.037419\nvn -0.5498 0.8344 0.0372\nv -0.010499 0.057232 0.039037\nvn -0.5498 0.8344 0.0372\nv -0.010206 0.057442 0.038657\nvn -0.5498 0.8344 0.0372\nv -0.010502 0.057036 0.026053\nvn -0.7022 0.7118 -0.0133\nv -0.010338 0.057411 0.037419\nvn -0.7022 0.7118 -0.0133\nv -0.010198 0.057334 0.025997\nvn -0.7022 0.7118 -0.0133\nv -0.010502 0.057036 0.026053\nvn -0.7825 0.6226 -0.0092\nv -0.010499 0.057232 0.039037\nvn -0.7825 0.6226 -0.0092\nv -0.010338 0.057411 0.037419\nvn -0.7825 0.6226 -0.0092\nv -0.010198 0.057334 0.025997\nvn -0.6339 0.5412 -0.5524\nv -0.010328 0.056056 0.024894\nvn -0.6339 0.5412 -0.5524\nv -0.010502 0.057036 0.026053\nvn -0.6339 0.5412 -0.5524\nv -0.010213 0.050281 0.039749\nvn -0.8253 -0.3976 -0.4011\nv -0.010498 0.050654 0.039968\nvn -0.8253 -0.3976 -0.4011\nv -0.010398 0.051407 0.039015\nvn -0.8253 -0.3976 -0.4011\nv -0.010339 0.048029 0.039929\nvn -0.629 -0.0265 -0.7769\nv -0.010498 0.050654 0.039968\nvn -0.629 -0.0265 -0.7769\nv -0.010213 0.050281 0.039749\nvn -0.629 -0.0265 -0.7769\nv -0.004882 0.046314 0.039769\nvn -0.7685 -0.0307 -0.6391\nv -0.004875 0.042538 0.039942\nvn -0.7685 -0.0307 -0.6391\nv -0.005121 0.045962 0.040073\nvn -0.7685 -0.0307 -0.6391\nv -0.006784 0.04787 0.039845\nvn -0.3895 -0.4363 -0.8111\nv -0.004882 0.046314 0.039769\nvn -0.3895 -0.4363 -0.8111\nv -0.005121 0.045962 0.040073\nvn -0.3895 -0.4363 -0.8111\nv 0.006566 0.060819 0.03977\nvn 0.0031 -0.0001 1\nv 0.010293 0.063166 0.039758\nvn 0.0031 -0.0001 1\nv 0.00474 0.063087 0.039775\nvn 0.0031 -0.0001 1\nv 0.006566 0.060819 0.03977\nvn -0.0207 0.0378 0.9991\nv 0.010256 0.060798 0.039847\nvn -0.0207 0.0378 0.9991\nv 0.010293 0.063166 0.039758\nvn -0.0207 0.0378 0.9991\nv 0.008802 0.055652 0.007842\nvn 0.0003 0.8681 -0.4963\nv -0.008804 0.055668 0.007858\nvn -0.001 0.8688 -0.4952\nv 0.010389 0.06522 0.024579\nvn -0.001 0.8688 -0.4952\nv -0.0104 0.065253 0.02473\nvn -0.0022 0.8694 -0.4941\nv 0.008802 0.055652 0.007842\nvn -0.0006 0.0721 -0.9974\nv -0.008747 0.054412 0.007763\nvn -0.0002 0.067 -0.9978\nv -0.008804 0.055668 0.007858\nvn -0.0008 0.0753 -0.9972\nv 0.008749 0.054412 0.007762\nvn 1.2222e-16 0.0637 -0.998\nv 0.00533 0.054302 -0.010043\nvn 0.0873 0.9911 -0.1008\nv 0.008657 0.054413 -0.006065\nvn 0.0873 0.9911 -0.1008\nv 0.007802 0.054238 -0.008524\nvn 0.0873 0.9911 -0.1008\nv -0.0048 0.054331 -0.010065\nvn 0.0025 0.9996 -0.0289\nv 0.008657 0.054413 -0.006065\nvn 0.0013 0.9997 -0.025\nv 0.00533 0.054302 -0.010043\nvn 0.003 0.9995 -0.0305\nv -0.008538 0.054414 -0.006767\nvn 0.001 0.9997 -0.024\nv -0.008747 0.054412 0.007763\nvn -2.44929e-20 1 0.0002\nv 0.008749 0.054412 0.007762\nvn -1.22465e-20 1 0.0001\nv -0.008538 0.054414 -0.006767\nvn -1.22465e-20 1 0.0001\nv 0.008657 0.054413 -0.006065\nvn -1.22465e-20 1 0.0001\nv -0.008538 0.054414 -0.006767\nvn -0.0508 0.9953 -0.0826\nv -0.0048 0.054331 -0.010065\nvn -0.0508 0.9953 -0.0826\nv -0.006547 0.054291 -0.009479\nvn -0.0508 0.9953 -0.0826\nv 0.00533 0.054302 -0.010043\nvn 0.0021 0.0053 -1\nv -0.005532 0.049717 -0.010091\nvn 0.0021 0.0053 -1\nv -0.0048 0.054331 -0.010065\nvn 0.0021 0.0053 -1\nv 0.005468 0.049491 -0.00998\nvn 0.0098 -0.0128 -0.9999\nv -0.005532 0.049717 -0.010091\nvn 0.0098 -0.0128 -0.9999\nv 0.00533 0.054302 -0.010043\nvn 0.0098 -0.0128 -0.9999\nv 0.008779 0.049461 -0.006351\nvn 0.0003 -0.9999 -0.0161\nv 0.002569 0.049414 -0.003529\nvn 0.0003 -0.9999 -0.0161\nv 0.007084 0.049504 -0.009054\nvn 0.0003 -0.9999 -0.0161\nv 0.007084 0.049504 -0.009054\nvn 0.012 -0.9999 -0.0065\nv 0.002569 0.049414 -0.003529\nvn 0.0095 -0.9999 -0.0076\nv 0.005468 0.049491 -0.00998\nvn 0.0043 -0.9999 -0.0092\nv 0.0009 0.049423 -0.0046\nvn 0.0012 -1 -0.0014\nv 0.008779 0.049461 -0.006351\nvn 0.0077 -1 0.0012\nv 0.003461 0.049426 -0.001688\nvn -0.0001 -1 0.0012\nv 0.002569 0.049414 -0.003529\nvn 0.0086 -1 0.0022\nv -0.005491 0.049412 -0.009791\nvn 0.0017 -1 0.0002\nv 0.008745 0.049414 0.007763\nvn -0.0026 -1 0.0018\nv 0.003062 0.049426 0.000275996\nvn 0.0024 -1 -0.0035\nv -0.00121 0.049422 -0.004438\nvn 0.0012 -1 0.0008\nv -0.002354 0.04942 -0.003769\nvn 0.0017 -1 0.0004\nv 0.001954 0.049418 0.001611\nvn 0.0025 -1 -0.0034\nv -0.005491 0.049412 -0.009791\nvn -0.0407 -0.9989 0.0225\nv -0.002354 0.04942 -0.003769\nvn -0.0407 -0.9989 0.0225\nv -0.007738 0.049533 -0.008478\nvn -0.0407 -0.9989 0.0225\nv -0.002354 0.04942 -0.003769\nvn -0.008 -0.9999 -0.0138\nv -0.008802 0.049508 -0.006436\nvn -0.0108 -0.9999 -0.0069\nv -0.007738 0.049533 -0.008478\nvn -0.0071 -0.9998 -0.0159\nv -0.000144 0.049433 0.002256\nvn -0.0009 -1 0.0062\nv -0.003367 0.04942 -0.002029\nvn -0.011 -0.9999 -0.0065\nv -0.003168 0.049425 -5.0022e-06\nvn 0.0005 -1 -0.0011\nv -0.008749 0.049414 0.007762\nvn 0.0036 -1 0.002\nv -0.003367 0.04942 -0.002029\nvn 0.0047 -1 0.0019\nv -0.001943 0.049422 0.001573\nvn 0.0001 -1 -0.0013\nv -0.008749 0.049414 0.007762\nvn -0.0109 -0.9999 -0.0066\nv 0.008745 0.049414 0.007763\nvn 1.21534e-16 -0.123 -0.9924\nv -0.00901 0.048125 0.007922\nvn 1.21534e-16 -0.123 -0.9924\nv -0.008749 0.049414 0.007762\nvn 1.21534e-16 -0.123 -0.9924\nv 0.009015 0.048044 0.008025\nvn 0.0048 -0.1872 -0.9823\nv -0.00901 0.048125 0.007922\nvn 0.0048 -0.1872 -0.9823\nv 0.008745 0.049414 0.007763\nvn 0.0048 -0.1872 -0.9823\nv 0.010193 0.057399 0.024516\nvn 0.0028 -0.8686 0.4956\nv -0.008962 0.048021 0.008188\nvn 0.0055 -0.8699 0.4933\nv 0.009015 0.048044 0.008025\nvn 0.0056 -0.8699 0.4931\nv -0.010188 0.057393 0.024514\nvn 0.0002 -0.8673 0.4979\nv 0.010194 0.05735 0.026086\nvn 0.0009 -0.9995 -0.0313\nv -0.010198 0.057334 0.025997\nvn 0.0008 -0.9994 -0.0335\nv 0.010193 0.057399 0.024516\nvn 0.0005 -0.9993 -0.0372\nv -0.010188 0.057393 0.024514\nvn 0.0003 -0.9992 -0.0394\nv -0.010338 0.057411 0.037419\nvn -0.9927 -0.1198 -0.0113\nv -0.010188 0.057393 0.024514\nvn -0.9927 -0.1198 -0.0113\nv -0.010198 0.057334 0.025997\nvn -0.9927 -0.1198 -0.0113\nv 0.010193 0.057399 0.024516\nvn 0.9565 -0.2916 -0.0098\nv 0.010328 0.057411 0.037455\nvn 0.9565 -0.2916 -0.0098\nv 0.010194 0.05735 0.026086\nvn 0.9565 -0.2916 -0.0098\nv 0.010389 0.06522 0.024579\nvn 0.0015 1 -0.0065\nv -0.0104 0.065253 0.02473\nvn 0.0011 1 -0.0057\nv 0.010362 0.065305 0.037623\nvn -0.0016 1 -0.0014\nv -0.010382 0.065262 0.037648\nvn -0.0021 1 -0.0006\nv -0.010268 0.060763 0.039835\nvn 0.0175 0.0323 0.9993\nv -0.006603 0.060795 0.03977\nvn 0.0175 0.0323 0.9993\nv -0.010294 0.063166 0.039758\nvn 0.0175 0.0323 0.9993\nv -0.010294 0.063166 0.039758\nvn -0.0034 -0.0003 1\nv -0.006603 0.060795 0.03977\nvn -0.0034 -0.0003 1\nv -0.004737 0.063113 0.039777\nvn -0.0034 -0.0003 1\nv -0.010338 0.057411 0.037419\nvn -1 -0.0057 0.0015\nv -0.010382 0.065262 0.037648\nvn -1 -0.0057 0.0015\nv -0.0104 0.065253 0.02473\nvn -1 -0.0057 0.0015\nv -0.010338 0.057411 0.037419\nvn -0.9999 0.01 0.0112\nv -0.0104 0.065253 0.02473\nvn -0.9999 0.01 0.0112\nv -0.01048 0.057678 0.024443\nvn -0.9999 0.01 0.0112\nv -0.010303 0.059675 0.039767\nvn -0.999 0.0027 0.0444\nv -0.010294 0.063166 0.039758\nvn -0.999 0.0027 0.0444\nv -0.010382 0.065262 0.037648\nvn -0.999 0.0027 0.0444\nv -0.010303 0.059675 0.039767\nvn -0.9998 -0.0062 0.0209\nv -0.010382 0.065262 0.037648\nvn -0.9998 -0.0062 0.0209\nv -0.010338 0.057411 0.037419\nvn -0.9998 -0.0062 0.0209\nv 0.010362 0.065305 0.037623\nvn 0.9999 -0.0045 0.0113\nv 0.010328 0.057411 0.037455\nvn 0.9999 -0.0045 0.013\nv 0.010389 0.06522 0.024579\nvn 1 -0.0043 0.0021\nv 0.010389 0.06522 0.024579\nvn 0.9999 0.0117 0.0118\nv 0.010328 0.057411 0.037455\nvn 0.9999 0.0117 0.0118\nv 0.010479 0.057678 0.024443\nvn 0.9999 0.0117 0.0118\nv 0.010293 0.063166 0.039758\nvn 0.9993 0.0041 0.0363\nv 0.010307 0.059704 0.039767\nvn 0.9993 0.0041 0.0363\nv 0.010362 0.065305 0.037623\nvn 0.9993 0.0041 0.0363\nv 0.010307 0.059704 0.039767\nvn 0.9999 -0.0045 0.0138\nv 0.010479 0.057678 0.024443\nvn 0.996 0.0135 -0.0884\nv 0.009055 0.055468 0.008059\nvn 0.996 0.0135 -0.0884\nv 0.010389 0.06522 0.024579\nvn 0.996 0.0135 -0.0884\nv 0.010479 0.057678 0.024443\nvn 0.9963 -0.005 -0.0859\nv 0.009015 0.048044 0.008025\nvn 0.9963 -0.005 -0.0859\nv 0.009055 0.055468 0.008059\nvn 0.9963 -0.005 -0.0859\nv 0.009055 0.054105 0.008039\nvn -0.1556 -0.0012 0.9878\nv 0.009015 0.048044 0.008025\nvn -0.1556 -0.0012 0.9878\nv 0.009049 0.049712 0.008032\nvn -0.1556 -0.0012 0.9878\nv 0.009055 0.054105 0.008039\nvn 0.8822 -0.0069 0.4709\nv 0.009055 0.055468 0.008059\nvn 0.8822 -0.0069 0.4709\nv 0.009015 0.048044 0.008025\nvn 0.8822 -0.0069 0.4709\nv 0.009049 0.049712 0.008032\nvn 0.9992 -0.0351 -0.0181\nv 0.008779 0.049461 -0.006351\nvn 0.9992 -0.0351 -0.0181\nv 0.008945 0.05411 -0.006193\nvn 0.9992 -0.0351 -0.0181\nv 0.009049 0.049712 0.008032\nvn 1 -0.0014 -0.0077\nv 0.008945 0.05411 -0.006193\nvn 1 -0.0014 -0.0077\nv 0.009055 0.054105 0.008039\nvn 1 -0.0014 -0.0077\nv -0.008973 0.054113 -0.005914\nvn -1 -0.0014 -0.006\nv -0.00905 0.049716 0.008031\nvn -1 -0.0014 -0.006\nv -0.009056 0.054109 0.00804\nvn -1 -0.0014 -0.006\nv -0.008802 0.049508 -0.006436\nvn -0.9992 -0.0352 -0.0166\nv -0.00905 0.049716 0.008031\nvn -0.9992 -0.0352 -0.0166\nv -0.008973 0.054113 -0.005914\nvn -0.9992 -0.0352 -0.0166\nv -0.008962 0.048021 0.008188\nvn -0.9862 -0.036 0.1616\nv -0.00905 0.049716 0.008031\nvn -0.9862 -0.036 0.1616\nv -0.00901 0.048125 0.007922\nvn -0.9862 -0.036 0.1616\nv -0.009056 0.055468 0.008059\nvn -0.9267 -0.0052 0.3756\nv -0.009056 0.054109 0.00804\nvn -0.9267 -0.0052 0.3756\nv -0.008962 0.048021 0.008188\nvn -0.9267 -0.0052 0.3756\nv -0.008962 0.048021 0.008188\nvn -0.8829 -0.0022 0.4696\nv -0.009056 0.054109 0.00804\nvn -0.8829 -0.0022 0.4696\nv -0.00905 0.049716 0.008031\nvn -0.8829 -0.0022 0.4696\nv -0.009056 0.055468 0.008059\nvn -0.996 0.0138 -0.0884\nv -0.01048 0.057678 0.024443\nvn -0.996 0.0138 -0.0884\nv -0.0104 0.065253 0.02473\nvn -0.996 0.0138 -0.0884\nv -0.008962 0.048021 0.008188\nvn -0.9963 -0.014 -0.0847\nv -0.01048 0.057678 0.024443\nvn -0.9963 -0.014 -0.0847\nv -0.009056 0.055468 0.008059\nvn -0.9963 -0.014 -0.0847\nv -0.010303 0.059675 0.039767\nvn 0.001 -0.7099 0.7043\nv 0.010328 0.057411 0.037455\nvn 0.001 -0.7099 0.7043\nv 0.010307 0.059704 0.039767\nvn 0.001 -0.7099 0.7043\nv -0.010338 0.057411 0.037419\nvn -0.0012 -0.7198 0.6942\nv 0.010328 0.057411 0.037455\nvn -0.0012 -0.7198 0.6942\nv -0.010303 0.059675 0.039767\nvn -0.0012 -0.7198 0.6942\nv -0.010294 0.063166 0.039758\nvn 0.0043 0.7094 0.7048\nv -0.004737 0.063113 0.039777\nvn 0.0032 0.7079 0.7063\nv -0.010382 0.065262 0.037648\nvn 0.0002 0.7039 0.7103\nv 0.00474 0.063087 0.039775\nvn 0.002 0.6939 0.7201\nv 0.010362 0.065305 0.037623\nvn 0.002 0.6939 0.7201\nv -0.004737 0.063113 0.039777\nvn 0.002 0.6939 0.7201\nv 0.010362 0.065305 0.037623\nvn -0.0006 0.703 0.7112\nv 0.00474 0.063087 0.039775\nvn -0.0078 0.7066 0.7076\nv 0.010293 0.063166 0.039758\nvn -0.0078 0.7066 0.7076\nv 0.010362 0.065305 0.037623\nvn -0.0078 0.7066 0.7076\nv 0.005468 0.049491 -0.00998\nvn 0.5237 0.0038 -0.8519\nv 0.00533 0.054302 -0.010043\nvn 0.5237 0.0038 -0.8519\nv 0.007802 0.054238 -0.008524\nvn 0.5237 0.0038 -0.8519\nv 0.007084 0.049504 -0.009054\nvn 0.4968 0.0219 -0.8676\nv 0.005468 0.049491 -0.00998\nvn 0.4968 0.0219 -0.8676\nv 0.007802 0.054238 -0.008524\nvn 0.4968 0.0219 -0.8676\nv 0.008395 0.049713 -0.007694\nvn 0.7222 -0.0321 -0.6909\nv 0.007084 0.049504 -0.009054\nvn 0.7222 -0.0321 -0.6909\nv 0.007802 0.054238 -0.008524\nvn 0.7222 -0.0321 -0.6909\nv 0.008395 0.049713 -0.007694\nvn 0.8979 0.0372 -0.4385\nv 0.007802 0.054238 -0.008524\nvn 0.8979 0.0372 -0.4385\nv 0.008945 0.05411 -0.006193\nvn 0.8979 0.0372 -0.4385\nv 0.008779 0.049461 -0.006351\nvn 0.9598 -0.0248 -0.2795\nv 0.008395 0.049713 -0.007694\nvn 0.9598 -0.0248 -0.2795\nv 0.008945 0.05411 -0.006193\nvn 0.9598 -0.0248 -0.2795\nv -0.008802 0.049508 -0.006436\nvn -0.9417 0.0032 -0.3365\nv -0.008973 0.054113 -0.005914\nvn -0.9417 0.0032 -0.3365\nv -0.008197 0.054115 -0.008086\nvn -0.9417 0.0032 -0.3365\nv -0.007738 0.049533 -0.008478\nvn -0.8855 -0.0492 -0.4621\nv -0.008802 0.049508 -0.006436\nvn -0.8855 -0.0492 -0.4621\nv -0.008197 0.054115 -0.008086\nvn -0.8855 -0.0492 -0.4621\nv -0.007738 0.049533 -0.008478\nvn -0.6451 0.0007 -0.7641\nv -0.008197 0.054115 -0.008086\nvn -0.6451 0.0007 -0.7641\nv -0.006547 0.054291 -0.009479\nvn -0.6451 0.0007 -0.7641\nv -0.005532 0.049717 -0.010091\nvn -0.5888 -0.0226 -0.808\nv -0.007738 0.049533 -0.008478\nvn -0.5888 -0.0226 -0.808\nv -0.006547 0.054291 -0.009479\nvn -0.5888 -0.0226 -0.808\nv -0.005532 0.049717 -0.010091\nvn -0.3185 0.0559 -0.9463\nv -0.006547 0.054291 -0.009479\nvn -0.3185 0.0559 -0.9463\nv -0.0048 0.054331 -0.010065\nvn -0.3185 0.0559 -0.9463\nv -0.008749 0.049414 0.007762\nvn -0.6455 0.0361 -0.7629\nv -0.00901 0.048125 0.007922\nvn -0.6455 0.0361 -0.7629\nv -0.00905 0.049716 0.008031\nvn -0.6455 0.0361 -0.7629\nv -0.008962 0.048021 0.008188\nvn -0.7021 -0.639 0.3141\nv -0.010188 0.057393 0.024514\nvn -0.7021 -0.639 0.3141\nv -0.01048 0.057678 0.024443\nvn -0.7021 -0.639 0.3141\nv -0.008802 0.049508 -0.006436\nvn -0.7093 -0.7049 -0.002\nv -0.008749 0.049414 0.007762\nvn -0.7093 -0.7049 -0.002\nv -0.00905 0.049716 0.008031\nvn -0.7093 -0.7049 -0.002\nv -0.007738 0.049533 -0.008478\nvn -0.4014 -0.6693 -0.6252\nv -0.005532 0.049717 -0.010091\nvn -0.4014 -0.6693 -0.6252\nv -0.005491 0.049412 -0.009791\nvn -0.4014 -0.6693 -0.6252\nv -0.005532 0.049717 -0.010091\nvn -0.0073 -0.7018 -0.7123\nv 0.005468 0.049491 -0.00998\nvn -0.0073 -0.7018 -0.7123\nv -0.005491 0.049412 -0.009791\nvn -0.0073 -0.7018 -0.7123\nv 0.008395 0.049713 -0.007694\nvn 0.4307 -0.8567 -0.2837\nv 0.008779 0.049461 -0.006351\nvn 0.4307 -0.8567 -0.2837\nv 0.007084 0.049504 -0.009054\nvn 0.4307 -0.8567 -0.2837\nv -0.010188 0.057393 0.024514\nvn -0.6988 -0.7153 -0.0071\nv -0.010338 0.057411 0.037419\nvn -0.6988 -0.7153 -0.0071\nv -0.01048 0.057678 0.024443\nvn -0.6988 -0.7153 -0.0071\nv 0.008745 0.049414 0.007763\nvn 0.6998 -0.7143 -0.0007\nv 0.008779 0.049461 -0.006351\nvn 0.6998 -0.7143 -0.0007\nv 0.009049 0.049712 0.008032\nvn 0.6998 -0.7143 -0.0007\nv -0.010303 0.059675 0.039767\nvn -0.9143 0.0034 0.405\nv -0.010268 0.060763 0.039835\nvn -0.9143 0.0034 0.405\nv -0.010294 0.063166 0.039758\nvn -0.9143 0.0034 0.405\nv 0.009015 0.048044 0.008025\nvn 0.6694 -0.0104 -0.7428\nv 0.008745 0.049414 0.007763\nvn 0.6694 -0.0104 -0.7428\nv 0.009049 0.049712 0.008032\nvn 0.6694 -0.0104 -0.7428\nv 0.010193 0.057399 0.024516\nvn 0.7016 -0.6401 0.3131\nv 0.009015 0.048044 0.008025\nvn 0.7016 -0.6401 0.3131\nv 0.010479 0.057678 0.024443\nvn 0.7016 -0.6401 0.3131\nv -0.0104 0.065253 0.02473\nvn -0.7415 0.5508 -0.3831\nv -0.008804 0.055668 0.007858\nvn -0.7415 0.5508 -0.3831\nv -0.009056 0.055468 0.008059\nvn -0.7415 0.5508 -0.3831\nv 0.010479 0.057678 0.024443\nvn 0.6961 -0.7179 -0.0067\nv 0.010328 0.057411 0.037455\nvn 0.6961 -0.7179 -0.0067\nv 0.010193 0.057399 0.024516\nvn 0.6961 -0.7179 -0.0067\nv -0.009056 0.055468 0.008059\nvn -0.6727 0.0104 -0.7399\nv -0.008747 0.054412 0.007763\nvn -0.6727 0.0104 -0.7399\nv -0.009056 0.054109 0.00804\nvn -0.6727 0.0104 -0.7399\nv -0.008804 0.055668 0.007858\nvn -0.6373 0.0292 -0.77\nv -0.008747 0.054412 0.007763\nvn -0.6373 0.0292 -0.77\nv -0.009056 0.055468 0.008059\nvn -0.6373 0.0292 -0.77\nv 0.010307 0.059704 0.039767\nvn 0.8729 0.0047 0.488\nv 0.010293 0.063166 0.039758\nvn 0.8729 0.0047 0.488\nv 0.010256 0.060798 0.039847\nvn 0.8729 0.0047 0.488\nv -0.008747 0.054412 0.007763\nvn -0.5791 0.8152 -0.0082\nv -0.008538 0.054414 -0.006767\nvn -0.5791 0.8152 -0.0082\nv -0.008973 0.054113 -0.005914\nvn -0.5791 0.8152 -0.0082\nv -0.008747 0.054412 0.007763\nvn -0.701 0.7131 -0.0039\nv -0.008973 0.054113 -0.005914\nvn -0.701 0.7131 -0.0039\nv -0.009056 0.054109 0.00804\nvn -0.701 0.7131 -0.0039\nv -0.008197 0.054115 -0.008086\nvn -0.8712 0.3798 -0.311\nv -0.008973 0.054113 -0.005914\nvn -0.8712 0.3798 -0.311\nv -0.008538 0.054414 -0.006767\nvn -0.8712 0.3798 -0.311\nv -0.008197 0.054115 -0.008086\nvn -0.3404 0.8942 -0.2906\nv -0.008538 0.054414 -0.006767\nvn -0.3404 0.8942 -0.2906\nv -0.006547 0.054291 -0.009479\nvn -0.3404 0.8942 -0.2906\nv 0.008945 0.05411 -0.006193\nvn 0.6369 0.7211 -0.2727\nv 0.007802 0.054238 -0.008524\nvn 0.6369 0.7211 -0.2727\nv 0.008657 0.054413 -0.006065\nvn 0.6369 0.7211 -0.2727\nv 0.008657 0.054413 -0.006065\nvn 0.71 0.7042 -0.0047\nv 0.008749 0.054412 0.007762\nvn 0.71 0.7042 -0.0047\nv 0.009055 0.054105 0.008039\nvn 0.71 0.7042 -0.0047\nv 0.008657 0.054413 -0.006065\nvn 0.7233 0.6905 -0.0053\nv 0.009055 0.054105 0.008039\nvn 0.7233 0.6905 -0.0053\nv 0.008945 0.05411 -0.006193\nvn 0.7233 0.6905 -0.0053\nv 0.008802 0.055652 0.007842\nvn 0.7359 0.5554 -0.3873\nv 0.010389 0.06522 0.024579\nvn 0.7359 0.5554 -0.3873\nv 0.009055 0.055468 0.008059\nvn 0.7359 0.5554 -0.3873\nv 0.008749 0.054412 0.007762\nvn 0.6753 0.0109 -0.7374\nv 0.009055 0.055468 0.008059\nvn 0.6753 0.0109 -0.7374\nv 0.009055 0.054105 0.008039\nvn 0.6753 0.0109 -0.7374\nv 0.008749 0.054412 0.007762\nvn 0.6596 0.0194 -0.7514\nv 0.008802 0.055652 0.007842\nvn 0.6596 0.0194 -0.7514\nv 0.009055 0.055468 0.008059\nvn 0.6596 0.0194 -0.7514\nv -0.003367 0.04942 -0.002029\nvn 0.7152 -0.6956 -0.0688\nv 2e-06 0.052805 -0.001227\nvn 0.7152 -0.6956 -0.0688\nv -0.003168 0.049425 -5.0022e-06\nvn 0.7152 -0.6956 -0.0688\nv -0.001943 0.049422 0.001573\nvn 0.5688 -0.6933 -0.4424\nv -0.003168 0.049425 -5.0022e-06\nvn 0.5688 -0.6933 -0.4424\nv 2e-06 0.052805 -0.001227\nvn 0.5688 -0.6933 -0.4424\nv 0.003062 0.049426 0.000275996\nvn -0.7013 -0.6985 -0.1423\nv 2e-06 0.052805 -0.001227\nvn -0.7013 -0.6985 -0.1423\nv 0.003461 0.049426 -0.001688\nvn -0.7013 -0.6985 -0.1423\nv 0.003062 0.049426 0.000275996\nvn -0.5474 -0.6998 -0.4589\nv 0.001954 0.049418 0.001611\nvn -0.5474 -0.6998 -0.4589\nv 2e-06 0.052805 -0.001227\nvn -0.5474 -0.6998 -0.4589\nv 0.001954 0.049418 0.001611\nvn -0.2154 -0.6971 -0.6839\nv -0.000144 0.049433 0.002256\nvn -0.2154 -0.6971 -0.6839\nv 2e-06 0.052805 -0.001227\nvn -0.2154 -0.6971 -0.6839\nv -0.000144 0.049433 0.002256\nvn 0.2573 -0.6997 -0.6665\nv -0.001943 0.049422 0.001573\nvn 0.2573 -0.6997 -0.6665\nv 2e-06 0.052805 -0.001227\nvn 0.2573 -0.6997 -0.6665\nv -0.00901 0.048125 0.007922\nvn -0.0021 -0.9315 -0.3638\nv 0.009015 0.048044 0.008025\nvn -0.0021 -0.9315 -0.3638\nv -0.008962 0.048021 0.008188\nvn -0.0021 -0.9315 -0.3638\nv 0.009823 0.057502 0.032659\nvn -0.8815 -0.0793 -0.4655\nv 0.00897 0.057535 0.034269\nvn -0.8815 -0.0793 -0.4655\nv 0.009829 0.060413 0.032153\nvn -0.8815 -0.0793 -0.4655\nv 0.009829 0.060413 0.032153\nvn -0.873 -0.0918 -0.479\nv 0.00897 0.057535 0.034269\nvn -0.873 -0.0918 -0.479\nv 0.008382 0.060413 0.034789\nvn -0.873 -0.0918 -0.479\nv 0.005245 0.060413 0.028051\nvn -0.0429 -0.016 0.999\nv 0.005419 0.057719 0.028015\nvn -0.0429 -0.016 0.999\nv 0.006987 0.060413 0.028125\nvn -0.0429 -0.016 0.999\nv 0.005419 0.057719 0.028015\nvn -0.1344 0.0376 0.9902\nv 0.007581 0.057713 0.028308\nvn -0.1344 0.0376 0.9902\nv 0.006987 0.060413 0.028125\nvn -0.1344 0.0376 0.9902\nv 0.00897 0.057535 0.034269\nvn -0.5741 0.0306 -0.8182\nv 0.007903 0.057713 0.035025\nvn -0.5741 0.0306 -0.8182\nv 0.008382 0.060413 0.034789\nvn -0.5741 0.0306 -0.8182\nv 0.006987 0.060413 0.028125\nvn -0.509 -0.0537 0.8591\nv 0.007581 0.057713 0.028308\nvn -0.509 -0.0537 0.8591\nv 0.008937 0.060413 0.029281\nvn -0.509 -0.0537 0.8591\nv 0.008382 0.060413 0.034789\nvn -0.3076 -0.0193 -0.9513\nv 0.006166 0.057719 0.03556\nvn -0.3076 -0.0193 -0.9513\nv 0.006 0.060413 0.035559\nvn -0.3076 -0.0193 -0.9513\nv 0.007903 0.057713 0.035025\nvn -0.2946 -0.031 -0.9551\nv 0.006166 0.057719 0.03556\nvn -0.2946 -0.031 -0.9551\nv 0.008382 0.060413 0.034789\nvn -0.2946 -0.031 -0.9551\nv 0.007581 0.057713 0.028308\nvn -0.6375 0.0432 0.7692\nv 0.00901 0.057713 0.029493\nvn -0.6375 0.0432 0.7692\nv 0.008937 0.060413 0.029281\nvn -0.6375 0.0432 0.7692\nv 0.00901 0.057713 0.029493\nvn -0.9089 0.0081 0.417\nv 0.009712 0.057718 0.031024\nvn -0.9089 0.0081 0.417\nv 0.008937 0.060413 0.029281\nvn -0.9089 0.0081 0.417\nv 0.008937 0.060413 0.029281\nvn -0.9517 -0.0828 0.2955\nv 0.009712 0.057718 0.031024\nvn -0.9517 -0.0828 0.2955\nv 0.009829 0.060413 0.032153\nvn -0.9517 -0.0828 0.2955\nv 0.009712 0.057718 0.031024\nvn -0.9975 0.0139 0.0694\nv 0.009823 0.057502 0.032659\nvn -0.9975 0.0139 0.0694\nv 0.009829 0.060413 0.032153\nvn -0.9975 0.0139 0.0694\nv 0.007581 0.057713 0.028308\nvn -0.3853 -0.7972 0.4647\nv 0.008164 0.057414 0.028278\nvn -0.3853 -0.7972 0.4647\nv 0.00901 0.057713 0.029493\nvn -0.3853 -0.7972 0.4647\nv 0.008164 0.057414 0.028278\nvn -0.6792 -0.446 0.5829\nv 0.009805 0.057414 0.030191\nvn -0.6792 -0.446 0.5829\nv 0.00901 0.057713 0.029493\nvn -0.6792 -0.446 0.5829\nv 0.00216 0.057714 0.031977\nvn 0.4735 -0.8707 0.1332\nv 0.001917 0.057415 0.030887\nvn 0.4735 -0.8707 0.1332\nv 0.002761 0.057713 0.029831\nvn 0.4735 -0.8707 0.1332\nv 0.00901 0.057713 0.029493\nvn -0.5196 -0.8197 0.2411\nv 0.009805 0.057414 0.030191\nvn -0.5196 -0.8197 0.2411\nv 0.009712 0.057718 0.031024\nvn -0.5196 -0.8197 0.2411\nv 0.002761 0.057713 0.029831\nvn 0.4938 -0.7455 0.4476\nv 0.003453 0.057413 0.028569\nvn 0.4938 -0.7455 0.4476\nv 0.003756 0.057713 0.028734\nvn 0.4938 -0.7455 0.4476\nv 0.001917 0.057415 0.030887\nvn 0.773 -0.3741 0.5124\nv 0.003453 0.057413 0.028569\nvn 0.773 -0.3741 0.5124\nv 0.002761 0.057713 0.029831\nvn 0.773 -0.3741 0.5124\nv 0.009805 0.057414 0.030191\nvn -0.9405 -0.3393 0.019\nv 0.009823 0.057502 0.032659\nvn -0.9405 -0.3393 0.019\nv 0.009712 0.057718 0.031024\nvn -0.9405 -0.3393 0.019\nv 0.003756 0.057713 0.028734\nvn 0.2958 -0.6722 0.6787\nv 0.003453 0.057413 0.028569\nvn 0.2958 -0.6722 0.6787\nv 0.005419 0.057719 0.028015\nvn 0.2958 -0.6722 0.6787\nv 0.003453 0.057413 0.028569\nvn 0.3007 -0.6192 0.7254\nv 0.005659 0.057414 0.027655\nvn 0.3007 -0.6192 0.7254\nv 0.005419 0.057719 0.028015\nvn 0.3007 -0.6192 0.7254\nv 0.005419 0.057719 0.028015\nvn -0.0851 -0.7874 0.6106\nv 0.005659 0.057414 0.027655\nvn -0.0851 -0.7874 0.6106\nv 0.007581 0.057713 0.028308\nvn -0.0851 -0.7874 0.6106\nv 0.005659 0.057414 0.027655\nvn -0.21 -0.4943 0.8436\nv 0.008164 0.057414 0.028278\nvn -0.21 -0.4943 0.8436\nv 0.007581 0.057713 0.028308\nvn -0.21 -0.4943 0.8436\nv 0.007442 0.057414 0.035611\nvn 0.0002 1 -0.0001\nv 0.003453 0.057413 0.028569\nvn 0.0007 1 -0.0001\nv 0.0048 0.057414 0.035723\nvn 0.0002 1 -0.0002\nv 0.002534 0.057414 0.034006\nvn 0.0011 1 1.34711e-19\nv 0.005659 0.057414 0.027655\nvn -0.0002 1 0.0001\nv 0.001917 0.057415 0.030887\nvn 0.0015 1 0.0001\nv 0.009805 0.057414 0.030191\nvn 0.0418 0.9985 -0.036\nv 0.008164 0.057414 0.028278\nvn 0.0418 0.9985 -0.036\nv 0.009823 0.057502 0.032659\nvn 0.0418 0.9985 -0.036\nv 0.008164 0.057414 0.028278\nvn 0.0057 0.9997 -0.0224\nv 0.005659 0.057414 0.027655\nvn 0.0029 0.9998 -0.02\nv 0.009823 0.057502 0.032659\nvn 0.0048 0.9998 -0.0216\nv 0.00897 0.057535 0.034269\nvn 0.0023 0.9998 -0.0195\nv 0.00897 0.057535 0.034269\nvn -0.0665 0.9977 0.0149\nv 0.005659 0.057414 0.027655\nvn -0.0665 0.9977 0.0149\nv 0.007442 0.057414 0.035611\nvn -0.0665 0.9977 0.0149\nv 0.004241 0.057708 0.03512\nvn 0.4831 -0.6704 -0.5632\nv 0.002534 0.057414 0.034006\nvn 0.4831 -0.6704 -0.5632\nv 0.002989 0.057713 0.034041\nvn 0.4831 -0.6704 -0.5632\nv 0.0048 0.057414 0.035723\nvn 0.5432 -0.4369 -0.717\nv 0.002534 0.057414 0.034006\nvn 0.5432 -0.4369 -0.717\nv 0.004241 0.057708 0.03512\nvn 0.5432 -0.4369 -0.717\nv 0.002989 0.057713 0.034041\nvn 0.5466 -0.8079 -0.2202\nv 0.002534 0.057414 0.034006\nvn 0.5466 -0.8079 -0.2202\nv 0.00216 0.057714 0.031977\nvn 0.5466 -0.8079 -0.2202\nv 0.002534 0.057414 0.034006\nvn 0.977 -0.0903 -0.1932\nv 0.001917 0.057415 0.030887\nvn 0.977 -0.0903 -0.1932\nv 0.00216 0.057714 0.031977\nvn 0.977 -0.0903 -0.1932\nv 0.00897 0.057535 0.034269\nvn -0.5603 -0.4717 -0.6808\nv 0.007442 0.057414 0.035611\nvn -0.5603 -0.4717 -0.6808\nv 0.007903 0.057713 0.035025\nvn -0.5603 -0.4717 -0.6808\nv 0.007903 0.057713 0.035025\nvn -0.1733 -0.8155 -0.5522\nv 0.007442 0.057414 0.035611\nvn -0.1733 -0.8155 -0.5522\nv 0.006166 0.057719 0.03556\nvn -0.1733 -0.8155 -0.5522\nv 0.007442 0.057414 0.035611\nvn -0.0399 -0.3244 -0.9451\nv 0.0048 0.057414 0.035723\nvn -0.0399 -0.3244 -0.9451\nv 0.006166 0.057719 0.03556\nvn -0.0399 -0.3244 -0.9451\nv 0.006166 0.057719 0.03556\nvn 0.1252 -0.841 -0.5263\nv 0.0048 0.057414 0.035723\nvn 0.1252 -0.841 -0.5263\nv 0.004241 0.057708 0.03512\nvn 0.1252 -0.841 -0.5263\nv 0.00216 0.057714 0.031977\nvn 0.9616 -0.0523 0.2694\nv 0.002761 0.057713 0.029831\nvn 0.9616 -0.0523 0.2694\nv 0.003062 0.060413 0.029281\nvn 0.9616 -0.0523 0.2694\nv 0.002761 0.057713 0.029831\nvn 0.7397 0.0542 0.6707\nv 0.003756 0.057713 0.028734\nvn 0.7397 0.0542 0.6707\nv 0.003062 0.060413 0.029281\nvn 0.7397 0.0542 0.6707\nv 0.006 0.060413 0.035559\nvn 0.3073 -0.0455 -0.9505\nv 0.004241 0.057708 0.03512\nvn 0.3073 -0.0455 -0.9505\nv 0.003617 0.060413 0.034789\nvn 0.3073 -0.0455 -0.9505\nv 0.006166 0.057719 0.03556\nvn 0.2228 0.0134 -0.9748\nv 0.004241 0.057708 0.03512\nvn 0.2228 0.0134 -0.9748\nv 0.006 0.060413 0.035559\nvn 0.2228 0.0134 -0.9748\nv 0.003062 0.060413 0.029281\nvn 0.4904 -0.0503 0.87\nv 0.003756 0.057713 0.028734\nvn 0.4904 -0.0503 0.87\nv 0.005245 0.060413 0.028051\nvn 0.4904 -0.0503 0.87\nv 0.003756 0.057713 0.028734\nvn 0.3967 0.0135 0.9179\nv 0.005419 0.057719 0.028015\nvn 0.3967 0.0135 0.9179\nv 0.005245 0.060413 0.028051\nvn 0.3967 0.0135 0.9179\nv 0.004241 0.057708 0.03512\nvn 0.652 0.0578 -0.756\nv 0.002989 0.057713 0.034041\nvn 0.652 0.0578 -0.756\nv 0.003617 0.060413 0.034789\nvn 0.652 0.0578 -0.756\nv 0.003617 0.060413 0.034789\nvn 0.8745 -0.0705 -0.4798\nv 0.002989 0.057713 0.034041\nvn 0.8745 -0.0705 -0.4798\nv 0.002171 0.060413 0.032153\nvn 0.8745 -0.0705 -0.4798\nv 0.002989 0.057713 0.034041\nvn 0.9278 0.0207 -0.3726\nv 0.00216 0.057714 0.031977\nvn 0.9278 0.0207 -0.3726\nv 0.002171 0.060413 0.032153\nvn 0.9278 0.0207 -0.3726\nv 0.002171 0.060413 0.032153\nvn 0.9548 -0.023 0.2965\nv 0.00216 0.057714 0.031977\nvn 0.9548 -0.023 0.2965\nv 0.003062 0.060413 0.029281\nvn 0.9548 -0.023 0.2965\nv 0.003062 0.060413 0.029281\nvn -0 -1 0\nv 0.005245 0.060413 0.028051\nvn -0 -1 0\nv 0.006987 0.060413 0.028125\nvn -0 -1 0\nv 0.008937 0.060413 0.029281\nvn -0 -1 0\nv 0.009829 0.060413 0.032153\nvn -0 -1 0\nv 0.003617 0.060413 0.034789\nvn -0 -1 0\nv 0.008382 0.060413 0.034789\nvn -0 -1 0\nv 0.002171 0.060413 0.032153\nvn -0 -1 0\nv 0.006 0.060413 0.035559\nvn -0 -1 0\nv -0.002171 0.060413 0.032153\nvn -0.8691 -0.1314 -0.4768\nv -0.002472 0.057538 0.033493\nvn -0.8691 -0.1314 -0.4768\nv -0.003618 0.060413 0.034789\nvn -0.8691 -0.1314 -0.4768\nv -0.006755 0.060413 0.028051\nvn -0.0429 -0.016 0.999\nv -0.006581 0.057719 0.028015\nvn -0.0429 -0.016 0.999\nv -0.005013 0.060413 0.028125\nvn -0.0429 -0.016 0.999\nv -0.006581 0.057719 0.028015\nvn -0.1344 0.0376 0.9902\nv -0.004419 0.057713 0.028308\nvn -0.1344 0.0376 0.9902\nv -0.005013 0.060413 0.028125\nvn -0.1344 0.0376 0.9902\nv -0.002472 0.057538 0.033493\nvn -0.6814 0.0573 -0.7297\nv -0.004097 0.057713 0.035025\nvn -0.6814 0.0573 -0.7297\nv -0.003618 0.060413 0.034789\nvn -0.6814 0.0573 -0.7297\nv -0.005013 0.060413 0.028125\nvn -0.509 -0.0537 0.8591\nv -0.004419 0.057713 0.028308\nvn -0.509 -0.0537 0.8591\nv -0.003063 0.060413 0.029281\nvn -0.509 -0.0537 0.8591\nv -0.003618 0.060413 0.034789\nvn -0.3076 -0.0193 -0.9513\nv -0.005834 0.057719 0.03556\nvn -0.3076 -0.0193 -0.9513\nv -0.006 0.060413 0.035559\nvn -0.3076 -0.0193 -0.9513\nv -0.004097 0.057713 0.035025\nvn -0.2946 -0.031 -0.9551\nv -0.005834 0.057719 0.03556\nvn -0.2946 -0.031 -0.9551\nv -0.003618 0.060413 0.034789\nvn -0.2946 -0.031 -0.9551\nv -0.004419 0.057713 0.028308\nvn -0.6375 0.0432 0.7692\nv -0.00299 0.057713 0.029493\nvn -0.6375 0.0432 0.7692\nv -0.003063 0.060413 0.029281\nvn -0.6375 0.0432 0.7692\nv -0.00299 0.057713 0.029493\nvn -0.9068 0.0085 0.4214\nv -0.002158 0.057603 0.031285\nvn -0.9068 0.0085 0.4214\nv -0.003063 0.060413 0.029281\nvn -0.9068 0.0085 0.4214\nv -0.003063 0.060413 0.029281\nvn -0.9506 -0.0956 0.2952\nv -0.002158 0.057603 0.031285\nvn -0.9506 -0.0956 0.2952\nv -0.002171 0.060413 0.032153\nvn -0.9506 -0.0956 0.2952\nv -0.002158 0.057603 0.031285\nvn -0.9895 0.0384 -0.1395\nv -0.002472 0.057538 0.033493\nvn -0.9895 0.0384 -0.1395\nv -0.002171 0.060413 0.032153\nvn -0.9895 0.0384 -0.1395\nv -0.004419 0.057713 0.028308\nvn -0.3697 -0.8153 0.4458\nv -0.002779 0.057415 0.029123\nvn -0.3697 -0.8153 0.4458\nv -0.00299 0.057713 0.029493\nvn -0.3697 -0.8153 0.4458\nv -0.009967 0.057414 0.032903\nvn 0.9627 -0.2666 0.0459\nv -0.009844 0.057414 0.030325\nvn 0.9627 -0.2666 0.0459\nv -0.00984 0.057714 0.031977\nvn 0.9627 -0.2666 0.0459\nv -0.00984 0.057714 0.031977\nvn 0.5336 -0.8323 0.15\nv -0.009844 0.057414 0.030325\nvn 0.5336 -0.8323 0.15\nv -0.009239 0.057713 0.029831\nvn 0.5336 -0.8323 0.15\nv -0.00299 0.057713 0.029493\nvn -0.6228 -0.7435 0.2435\nv -0.002779 0.057415 0.029123\nvn -0.6228 -0.7435 0.2435\nv -0.002158 0.057603 0.031285\nvn -0.6228 -0.7435 0.2435\nv -0.009844 0.057414 0.030325\nvn 0.6888 -0.4257 0.5868\nv -0.008363 0.057594 0.028717\nvn 0.6888 -0.4257 0.5868\nv -0.009239 0.057713 0.029831\nvn 0.6888 -0.4257 0.5868\nv -0.008363 0.057594 0.028717\nvn 0.3596 -0.4058 0.8402\nv -0.005934 0.057415 0.027591\nvn 0.3596 -0.4058 0.8402\nv -0.006581 0.057719 0.028015\nvn 0.3596 -0.4058 0.8402\nv -0.006581 0.057719 0.028015\nvn -0.0713 -0.8588 0.5073\nv -0.005934 0.057415 0.027591\nvn -0.0713 -0.8588 0.5073\nv -0.004419 0.057713 0.028308\nvn -0.0713 -0.8588 0.5073\nv -0.005934 0.057415 0.027591\nvn -0.4362 0.0548 0.8982\nv -0.002779 0.057415 0.029123\nvn -0.4362 0.0548 0.8982\nv -0.004419 0.057713 0.028308\nvn -0.4362 0.0548 0.8982\nv -0.008496 0.057414 0.035027\nvn -1.22465e-20 1 0.0001\nv -0.009844 0.057414 0.030325\nvn 0.0002 1 -0.0001\nv -0.009967 0.057414 0.032903\nvn 0.0003 1 -0.0001\nv -0.005934 0.057415 0.027591\nvn -0.0001 1 0.0002\nv -0.005934 0.057415 0.027591\nvn 0.2044 0.934 0.2929\nv -0.008363 0.057594 0.028717\nvn 0.2044 0.934 0.2929\nv -0.009844 0.057414 0.030325\nvn 0.2044 0.934 0.2929\nv -0.002472 0.057538 0.033493\nvn -0.097 0.9951 -0.0212\nv -0.002779 0.057415 0.029123\nvn -0.097 0.9951 -0.0212\nv -0.004167 0.057415 0.03549\nvn -0.097 0.9951 -0.0212\nv -0.004167 0.057415 0.03549\nvn -0.0007 1 -0.0002\nv -0.002779 0.057415 0.029123\nvn -0.0004 1 -4.89859e-20\nv -0.006599 0.057413 0.035801\nvn -0.0002 1 0.0001\nv -0.002158 0.057603 0.031285\nvn -0.2618 0.9651 -0.0088\nv -0.002779 0.057415 0.029123\nvn -0.2618 0.9651 -0.0088\nv -0.002472 0.057538 0.033493\nvn -0.2618 0.9651 -0.0088\nv -0.006599 0.057413 0.035801\nvn 0.3163 -0.5461 -0.7757\nv -0.008496 0.057414 0.035027\nvn 0.3163 -0.5461 -0.7757\nv -0.007759 0.057708 0.03512\nvn 0.3163 -0.5461 -0.7757\nv -0.007759 0.057708 0.03512\nvn 0.3803 -0.8111 -0.4445\nv -0.008496 0.057414 0.035027\nvn 0.3803 -0.8111 -0.4445\nv -0.009011 0.057713 0.034041\nvn 0.3803 -0.8111 -0.4445\nv -0.008496 0.057414 0.035027\nvn 0.7461 -0.4199 -0.5168\nv -0.009967 0.057414 0.032903\nvn 0.7461 -0.4199 -0.5168\nv -0.009011 0.057713 0.034041\nvn 0.7461 -0.4199 -0.5168\nv -0.009011 0.057713 0.034041\nvn 0.5038 -0.8396 -0.203\nv -0.009967 0.057414 0.032903\nvn 0.5038 -0.8396 -0.203\nv -0.00984 0.057714 0.031977\nvn 0.5038 -0.8396 -0.203\nv -0.002472 0.057538 0.033493\nvn -0.5497 -0.6635 -0.5076\nv -0.004167 0.057415 0.03549\nvn -0.5497 -0.6635 -0.5076\nv -0.004097 0.057713 0.035025\nvn -0.5497 -0.6635 -0.5076\nv -0.004097 0.057713 0.035025\nvn -0.1725 -0.8175 -0.5495\nv -0.004167 0.057415 0.03549\nvn -0.1725 -0.8175 -0.5495\nv -0.005834 0.057719 0.03556\nvn -0.1725 -0.8175 -0.5495\nv -0.004167 0.057415 0.03549\nvn -0.1149 -0.4207 -0.8999\nv -0.006599 0.057413 0.035801\nvn -0.1149 -0.4207 -0.8999\nv -0.005834 0.057719 0.03556\nvn -0.1149 -0.4207 -0.8999\nv -0.005834 0.057719 0.03556\nvn 0.1377 -0.8015 -0.5819\nv -0.006599 0.057413 0.035801\nvn 0.1377 -0.8015 -0.5819\nv -0.007759 0.057708 0.03512\nvn 0.1377 -0.8015 -0.5819\nv -0.00984 0.057714 0.031977\nvn 0.9616 -0.0523 0.2694\nv -0.009239 0.057713 0.029831\nvn 0.9616 -0.0523 0.2694\nv -0.008938 0.060413 0.029281\nvn 0.9616 -0.0523 0.2694\nv -0.009239 0.057713 0.029831\nvn 0.7877 0.0375 0.615\nv -0.008363 0.057594 0.028717\nvn 0.7877 0.0375 0.615\nv -0.008938 0.060413 0.029281\nvn 0.7877 0.0375 0.615\nv -0.006 0.060413 0.035559\nvn 0.3073 -0.0455 -0.9505\nv -0.007759 0.057708 0.03512\nvn 0.3073 -0.0455 -0.9505\nv -0.008383 0.060413 0.034789\nvn 0.3073 -0.0455 -0.9505\nv -0.005834 0.057719 0.03556\nvn 0.2228 0.0134 -0.9748\nv -0.007759 0.057708 0.03512\nvn 0.2228 0.0134 -0.9748\nv -0.006 0.060413 0.035559\nvn 0.2228 0.0134 -0.9748\nv -0.008938 0.060413 0.029281\nvn 0.4897 -0.074 0.8688\nv -0.008363 0.057594 0.028717\nvn 0.4897 -0.074 0.8688\nv -0.006755 0.060413 0.028051\nvn 0.4897 -0.074 0.8688\nv -0.008363 0.057594 0.028717\nvn 0.3658 0.0113 0.9306\nv -0.006581 0.057719 0.028015\nvn 0.3658 0.0113 0.9306\nv -0.006755 0.060413 0.028051\nvn 0.3658 0.0113 0.9306\nv -0.007759 0.057708 0.03512\nvn 0.652 0.0578 -0.756\nv -0.009011 0.057713 0.034041\nvn 0.652 0.0578 -0.756\nv -0.008383 0.060413 0.034789\nvn 0.652 0.0578 -0.756\nv -0.008383 0.060413 0.034789\nvn 0.8745 -0.0705 -0.4798\nv -0.009011 0.057713 0.034041\nvn 0.8745 -0.0705 -0.4798\nv -0.009829 0.060413 0.032153\nvn 0.8745 -0.0705 -0.4798\nv -0.009011 0.057713 0.034041\nvn 0.9278 0.0207 -0.3726\nv -0.00984 0.057714 0.031977\nvn 0.9278 0.0207 -0.3726\nv -0.009829 0.060413 0.032153\nvn 0.9278 0.0207 -0.3726\nv -0.009829 0.060413 0.032153\nvn 0.9548 -0.023 0.2965\nv -0.00984 0.057714 0.031977\nvn 0.9548 -0.023 0.2965\nv -0.008938 0.060413 0.029281\nvn 0.9548 -0.023 0.2965\nv -0.003618 0.060413 0.034789\nvn -0 -1 0\nv -0.003063 0.060413 0.029281\nvn -0 -1 0\nv -0.002171 0.060413 0.032153\nvn -0 -1 0\nv -0.008383 0.060413 0.034789\nvn -0 -1 0\nv -0.006755 0.060413 0.028051\nvn -0 -1 0\nv -0.005013 0.060413 0.028125\nvn -0 -1 0\nv -0.008938 0.060413 0.029281\nvn -0 -1 0\nv -0.009829 0.060413 0.032153\nvn -0 -1 0\nv -0.006 0.060413 0.035559\nvn -0 -1 0\nv -0.00086 -0.041913 0.000201997\nvn 0.959 -0.0821 -0.2711\nv -0.00174 -0.049389 -0.000646996\nvn 0.959 -0.0821 -0.2711\nv -0.001526 -0.041913 -0.002151\nvn 0.959 -0.0821 -0.2711\nv -0.00174 -0.049389 -0.000646996\nvn 0.9707 0.0203 0.2394\nv -0.001297 -0.049391 -0.002445\nvn 0.9707 0.0203 0.2394\nv -0.001526 -0.041913 -0.002151\nvn 0.9707 0.0203 0.2394\nv -0.001297 -0.049391 -0.002445\nvn 0.3562 -0.0258 0.934\nv 0.000156 -0.049388 -0.002999\nvn 0.3562 -0.0258 0.934\nv -0.001526 -0.041913 -0.002151\nvn 0.3562 -0.0258 0.934\nv -0.001526 -0.041913 -0.002151\nvn 0.2114 -0.0631 0.9754\nv 0.000156 -0.049388 -0.002999\nvn 0.2114 -0.0631 0.9754\nv 0.000861 -0.041913 -0.002668\nvn 0.2114 -0.0631 0.9754\nv -0.000156 -0.049388 0.000532997\nvn 0.597 0.0208 -0.802\nv -0.00174 -0.049389 -0.000646996\nvn 0.597 0.0208 -0.802\nv -0.00086 -0.041913 0.000201997\nvn 0.597 0.0208 -0.802\nv -0.002086 -0.049431 -0.001502\nvn 0.8966 -0.0864 0.4343\nv -0.002153 -0.050887 -0.001653\nvn 0.8966 -0.0864 0.4343\nv -0.001465 -0.049429 -0.002785\nvn 0.8966 -0.0864 0.4343\nv -0.002153 -0.050887 -0.001653\nvn 0.8203 0.0545 0.5694\nv -0.00107 -0.050884 -0.003214\nvn 0.8203 0.0545 0.5694\nv -0.001465 -0.049429 -0.002785\nvn 0.8203 0.0545 0.5694\nv 0.000722 -0.049434 0.000777003\nvn 0.0186 -0.0948 -0.9953\nv -0.000723 -0.050895 0.000889\nvn 0.0186 -0.0948 -0.9953\nv -0.000698 -0.049432 0.000751001\nvn 0.0186 -0.0948 -0.9953\nv -0.001465 -0.049429 -0.002785\nvn 0.3569 -0.1741 0.9178\nv -0.00107 -0.050884 -0.003214\nvn 0.3569 -0.1741 0.9178\nv -1.1e-05 -0.04943 -0.00335\nvn 0.3569 -0.1741 0.9178\nv -0.000698 -0.049432 0.000751001\nvn 0.6077 -0.0856 -0.7896\nv -0.000723 -0.050895 0.000889\nvn 0.6077 -0.0856 -0.7896\nv -0.001819 -0.049438 -0.000112\nvn 0.6077 -0.0856 -0.7896\nv -0.000723 -0.050895 0.000889\nvn 0.6939 0.0274 -0.7195\nv -0.001967 -0.05089 -0.000309999\nvn 0.6939 0.0274 -0.7195\nv -0.001819 -0.049438 -0.000112\nvn 0.6939 0.0274 -0.7195\nv -0.001819 -0.049438 -0.000112\nvn 0.9793 -0.074 -0.1886\nv -0.001967 -0.05089 -0.000309999\nvn 0.9793 -0.074 -0.1886\nv -0.002086 -0.049431 -0.001502\nvn 0.9793 -0.074 -0.1886\nv -0.001967 -0.05089 -0.000309999\nvn 0.9901 -0.0311 -0.1371\nv -0.002153 -0.050887 -0.001653\nvn 0.9901 -0.0311 -0.1371\nv -0.002086 -0.049431 -0.001502\nvn 0.9901 -0.0311 -0.1371\nv -0.002887 -0.049435 -0.000227998\nvn -0.9979 0.0384 0.0517\nv -0.002975 -0.049437 -0.001936\nvn -0.9979 0.0384 0.0517\nv -0.003009 -0.050894 -0.001512\nvn -0.9979 0.0384 0.0517\nv -0.002887 -0.049435 -0.000227998\nvn -0.953 -0.1509 0.2626\nv -0.003009 -0.050894 -0.001512\nvn -0.953 -0.1509 0.2626\nv -0.002455 -0.050896 0.000498001\nvn -0.953 -0.1509 0.2626\nv -0.001792 -0.049434 -0.003784\nvn -0.2413 -0.0789 -0.9672\nv 0.00036 -0.0509 -0.004201\nvn -0.2413 -0.0789 -0.9672\nv -0.001871 -0.050907 -0.003644\nvn -0.2413 -0.0789 -0.9672\nv -0.001792 -0.049434 -0.003784\nvn -0.2029 -0.0191 -0.979\nv 0.000521 -0.049434 -0.004263\nvn -0.2029 -0.0191 -0.979\nv 0.00036 -0.0509 -0.004201\nvn -0.2029 -0.0191 -0.979\nv -0.001785 -0.049434 0.00127\nvn -0.8043 0.0565 0.5915\nv -0.002887 -0.049435 -0.000227998\nvn -0.8043 0.0565 0.5915\nv -0.002455 -0.050896 0.000498001\nvn -0.8043 0.0565 0.5915\nv -0.001785 -0.049434 0.00127\nvn -0.5881 -0.15 0.7948\nv -0.002455 -0.050896 0.000498001\nvn -0.5881 -0.15 0.7948\nv -0.00097 -0.050885 0.001599\nvn -0.5881 -0.15 0.7948\nv 1.5e-05 -0.049438 0.001825\nvn -0.2938 0.0514 0.9545\nv -0.001785 -0.049434 0.00127\nvn -0.2938 0.0514 0.9545\nv -0.00097 -0.050885 0.001599\nvn -0.2938 0.0514 0.9545\nv 1.5e-05 -0.049438 0.001825\nvn -0.0095 -0.1474 0.989\nv -0.00097 -0.050885 0.001599\nvn -0.0095 -0.1474 0.989\nv 0.001026 -0.050895 0.001617\nvn -0.0095 -0.1474 0.989\nv -0.002975 -0.049437 -0.001936\nvn -0.8421 -0.0059 -0.5393\nv -0.001792 -0.049434 -0.003784\nvn -0.8421 -0.0059 -0.5393\nv -0.001871 -0.050907 -0.003644\nvn -0.8421 -0.0059 -0.5393\nv -0.002975 -0.049437 -0.001936\nvn -0.8765 -0.1155 -0.4673\nv -0.001871 -0.050907 -0.003644\nvn -0.8765 -0.1155 -0.4673\nv -0.003009 -0.050894 -0.001512\nvn -0.8765 -0.1155 -0.4673\nv 0.002263 -0.039916 -0.003496\nvn 0.0042 1 -0.0081\nv 0.004843 -0.039983 -0.00995\nvn 0.0074 0.9999 -0.0074\nv 0.002269 -0.039964 -0.009979\nvn 0.0076 0.9999 -0.0073\nv 0.007075 -0.039981 -0.009002\nvn 0.007 1 -0.0056\nv 0.008675 -0.039993 -0.006552\nvn 0.0085 0.9999 -0.0074\nv 0.008757 -0.03997 -0.003505\nvn 0.0083 0.9999 -0.0077\nv 0.008763 -0.040011 0.007501\nvn 0.0071 1 0.0063\nv 0.008759 -0.039971 0.001039\nvn 0.0073 1 0.0061\nv 0.002248 -0.039924 0.001015\nvn 0.0071 1 0.0063\nv 0.00227 -0.039966 0.007518\nvn 0.007 1 0.0064\nv -0.002262 -0.039916 -0.003496\nvn -0.0142 0.9999 -0.0073\nv -0.002268 -0.039964 -0.009979\nvn -0.0142 0.9999 -0.0073\nv -0.005692 -0.040011 -0.009837\nvn -0.0142 0.9999 -0.0073\nv -0.002262 -0.039916 -0.003496\nvn 0.0084 0.9998 -0.0195\nv -0.005692 -0.040011 -0.009837\nvn 0.0084 0.9998 -0.0195\nv -0.007818 -0.03996 -0.008151\nvn 0.0084 0.9998 -0.0195\nv -0.002262 -0.039916 -0.003496\nvn -0.0148 0.9999 0.0082\nv -0.007818 -0.03996 -0.008151\nvn -0.0148 0.9999 0.0082\nv -0.008709 -0.03999 -0.006172\nvn -0.0148 0.9999 0.0082\nv -0.002262 -0.039916 -0.003496\nvn -0.0084 0.9999 -0.0071\nv -0.008709 -0.03999 -0.006172\nvn -0.0084 0.9999 -0.0071\nv -0.008758 -0.039971 -0.003505\nvn -0.0084 0.9999 -0.0071\nv -0.002274 -0.039963 0.007517\nvn -0.0083 0.9999 0.0074\nv -0.002244 -0.039925 0.001011\nvn -0.0068 1 0.0058\nv -0.008759 -0.03997 0.001043\nvn -0.0083 0.9999 0.0074\nv -0.008772 -0.040028 0.007503\nvn -0.0099 0.9999 0.009\nv 0.008809 -0.041565 -0.001233\nvn 0.9996 -0.0055 -0.0269\nv 0.008675 -0.039993 -0.006552\nvn 0.9996 -0.0055 -0.0269\nv 0.008757 -0.03997 -0.003505\nvn 0.9996 -0.0055 -0.0269\nv 0.008809 -0.041565 -0.001233\nvn 0.9997 0.0124 -0.0216\nv 0.008786 -0.049348 -0.006804\nvn 0.9997 0.0124 -0.0216\nv 0.008675 -0.039993 -0.006552\nvn 0.9997 0.0124 -0.0216\nv 0.008931 -0.049314 0.007677\nvn 0.9999 0.0042 -0.01\nv 0.008786 -0.049348 -0.006804\nvn 0.9999 0.0042 -0.01\nv 0.008809 -0.041565 -0.001233\nvn 0.9999 0.0042 -0.01\nv 0.008759 -0.039971 0.001039\nvn 0.9998 0.0187 0.0003\nv 0.008931 -0.049314 0.007677\nvn 0.9997 0.022 0.005\nv 0.008809 -0.041565 -0.001233\nvn 0.9997 0.0228 0.0062\nv 0.008763 -0.040011 0.007501\nvn 0.9998 0.0181 -0.0005\nv -0.008804 -0.041559 -0.001233\nvn -0.9998 0.0032 -0.0181\nv -0.008758 -0.039971 -0.003505\nvn -0.9998 0.0032 -0.0181\nv -0.008709 -0.03999 -0.006172\nvn -0.9998 0.0032 -0.0181\nv -0.008893 -0.049342 -0.006133\nvn -0.9997 0.0196 -0.0129\nv -0.008804 -0.041559 -0.001233\nvn -0.9997 0.0196 -0.0129\nv -0.008709 -0.03999 -0.006172\nvn -0.9997 0.0196 -0.0129\nv -0.008931 -0.049314 0.007677\nvn -0.9998 0.0197 0.0023\nv -0.008759 -0.03997 0.001043\nvn -0.9998 0.0176 -0.0012\nv -0.008804 -0.041559 -0.001233\nvn -0.9998 0.0216 0.0046\nv -0.008772 -0.040028 0.007503\nvn -0.9999 0.0171 -0.0019\nv -0.008893 -0.049342 -0.006133\nvn -0.9999 0.0132 -0.0027\nv 0.002263 -0.039916 -0.003496\nvn -0.5751 0.8181 -0.0065\nv 0.002269 -0.039964 -0.009979\nvn -0.5751 0.818 -0.0065\nv 1.3741e-17 -0.041559 -0.010037\nvn -0.5751 0.8181 -0.0065\nv 1.26628e-17 -0.041489 -0.001233\nvn -0.575 0.8181 -0.0065\nv 1.15847e-17 -0.041561 0.007571\nvn -0.5757 0.8176 0.0069\nv 0.00227 -0.039966 0.007518\nvn -0.5749 0.8182 0.0072\nv 0.002248 -0.039924 0.001015\nvn -0.5752 0.818 0.0071\nv 1.26628e-17 -0.041489 -0.001233\nvn -0.5759 0.8175 0.0067\nv -0.002262 -0.039916 -0.003496\nvn 0.5751 0.8181 -0.0065\nv 1.26628e-17 -0.041489 -0.001233\nvn 0.575 0.8181 -0.0065\nv 1.3741e-17 -0.041559 -0.010037\nvn 0.5751 0.8181 -0.0065\nv -0.002268 -0.039964 -0.009979\nvn 0.5751 0.818 -0.0065\nv 1.15847e-17 -0.041561 0.007571\nvn 0.5758 0.8176 0.0069\nv 1.26628e-17 -0.041489 -0.001233\nvn 0.5761 0.8174 0.0067\nv -0.002244 -0.039925 0.001011\nvn 0.5752 0.818 0.0072\nv -0.002274 -0.039963 0.007517\nvn 0.5748 0.8183 0.0074\nv -0.008931 -0.049314 0.007677\nvn -0.0067 0.0218 0.9997\nv -0.002274 -0.039963 0.007517\nvn -0.0031 0.0192 0.9998\nv -0.008772 -0.040028 0.007503\nvn -0.0025 0.0188 0.9998\nv 1.15847e-17 -0.041561 0.007571\nvn -0.0076 0.0224 0.9997\nv 0.008931 -0.049314 0.007677\nvn 0.0056 0.0206 0.9998\nv 0.00227 -0.039966 0.007518\nvn 0.0033 0.0193 0.9998\nv 1.15847e-17 -0.041561 0.007571\nvn 0.007 0.0217 0.9997\nv 0.008763 -0.040011 0.007501\nvn 0.0028 0.0189 0.9998\nv -0.008931 -0.049314 0.007677\nvn -1.22452e-16 0.0137 0.9999\nv 1.3741e-17 -0.041559 -0.010037\nvn -0.008 0.0075 -0.9999\nv 0.00473 -0.049351 -0.010133\nvn -0.008 0.0075 -0.9999\nv -0.00534 -0.049355 -0.010052\nvn -0.008 0.0075 -0.9999\nv 1.3741e-17 -0.041559 -0.010037\nvn -0.0292 0.022 -0.9993\nv -0.00534 -0.049355 -0.010052\nvn -0.0292 0.022 -0.9993\nv -0.005692 -0.040011 -0.009837\nvn -0.0292 0.022 -0.9993\nv 1.3741e-17 -0.041559 -0.010037\nvn -0.0412 -0.0223 -0.9989\nv -0.005692 -0.040011 -0.009837\nvn -0.0412 -0.0223 -0.9989\nv -0.002268 -0.039964 -0.009979\nvn -0.0412 -0.0223 -0.9989\nv 0.004843 -0.039983 -0.00995\nvn 0.0116 0.0195 -0.9997\nv 1.3741e-17 -0.041559 -0.010037\nvn 0.0114 0.0199 -0.9997\nv 0.002269 -0.039964 -0.009979\nvn 0.0114 0.02 -0.9997\nv 0.00473 -0.049351 -0.010133\nvn 0.0116 0.0194 -0.9997\nv -0.002887 -0.049435 -0.000227998\nvn -0.0381 -0.9989 0.0283\nv -0.002707 -0.049384 0.001828\nvn -0.0393 -0.9988 0.0284\nv -0.003945 -0.0494 -0.000487003\nvn -0.0398 -0.9988 0.0285\nv -0.001785 -0.049434 0.00127\nvn -0.0375 -0.9989 0.0283\nv 0.008786 -0.049348 -0.006804\nvn 0.0349 -0.9994 -0.0003\nv 0.007493 -0.049395 -0.000484\nvn 0.0362 -0.9993 4.43322e-18\nv 0.007497 -0.049395 -0.001987\nvn 0.033 -0.9995 -0.0008\nv 0.002186 -0.049391 -0.004608\nvn 0.0171 -0.9989 -0.0434\nv 0.002546 -0.049437 -0.003031\nvn 0.0192 -0.9993 -0.0334\nv 0.000521 -0.049434 -0.004263\nvn 0.0189 -0.9992 -0.0345\nv -0.00534 -0.049355 -0.010052\nvn -0.0121 -0.9998 -0.0178\nv -0.007258 -0.049388 -0.006922\nvn -0.0177 -0.9996 -0.0212\nv -0.007861 -0.049355 -0.008424\nvn -0.0111 -0.9998 -0.0172\nv 0.007498 -0.049394 0.00626\nvn 0.0002 -0.9984 0.0563\nv 0.008931 -0.049314 0.007677\nvn 0.0001 -0.9984 0.057\nv 0.000754 -0.049395 0.006264\nvn -0.0001 -0.9985 0.0555\nv -0.004972 -0.049393 -0.008671\nvn -0.0191 -0.9996 -0.0221\nv 0.007493 -0.049395 -0.000484\nvn 0.053 -0.9986 0.0006\nv 0.008931 -0.049314 0.007677\nvn 0.0477 -0.9989 0.0015\nv 0.007498 -0.049394 0.00626\nvn 0.0558 -0.9984 0.0001\nv 0.008786 -0.049348 -0.006804\nvn 0.0456 -0.999 0.0019\nv -0.008931 -0.049314 0.007677\nvn -0.0003 -0.9985 0.055\nv -0.000756 -0.049394 0.006265\nvn -0.0002 -0.9985 0.0555\nv -0.007492 -0.049394 0.006265\nvn -0.055 -0.9985 0.0002\nv -0.008931 -0.049314 0.007677\nvn -0.055 -0.9985 0.0002\nv -0.007497 -0.049395 -0.000479999\nvn -0.055 -0.9985 0.0002\nv -0.007497 -0.049395 -0.000479999\nvn -0.0395 -0.9992 0.0004\nv -0.008931 -0.049314 0.007677\nvn -0.0453 -0.999 0.0019\nv -0.008893 -0.049342 -0.006133\nvn -0.0389 -0.9992 0.0003\nv -0.007861 -0.049355 -0.008424\nvn -0.0322 -0.9994 -0.0087\nv -0.007258 -0.049388 -0.006922\nvn -0.0296 -0.9996 -0.0034\nv -0.008893 -0.049342 -0.006133\nvn -0.0317 -0.9995 -0.0077\nv 0.002186 -0.049391 -0.004608\nvn 0.0442 -0.9983 -0.0391\nv 0.003445 -0.049387 -0.00329\nvn 0.0442 -0.9983 -0.0391\nv 0.002546 -0.049437 -0.003031\nvn 0.0442 -0.9983 -0.0391\nv 0.006869 -0.049352 -0.009336\nvn 0.0098 -0.9996 -0.0251\nv 0.007365 -0.049394 -0.00656\nvn 0.0136 -0.9998 -0.0174\nv 0.005344 -0.049386 -0.008589\nvn 0.0051 -0.9998 -0.018\nv -0.007492 -0.049395 -0.001982\nvn -0.0293 -0.9996 -0.0028\nv -0.00534 -0.049355 -0.010052\nvn -0.0008 -0.9996 -0.0269\nv -0.000754 -0.049395 -0.00873\nvn -0.0008 -0.9996 -0.0269\nv -0.004972 -0.049393 -0.008671\nvn -0.0008 -0.9996 -0.0269\nv 0.006869 -0.049352 -0.009336\nvn 0.0286 -0.9994 -0.0201\nv 0.008786 -0.049348 -0.006804\nvn 0.0286 -0.9994 -0.0201\nv 0.007365 -0.049394 -0.00656\nvn 0.0286 -0.9994 -0.0201\nv 1.5e-05 -0.049438 0.001825\nvn -0.0198 -0.9981 0.0576\nv -0.002707 -0.049384 0.001828\nvn -0.0198 -0.9981 0.0576\nv -0.001785 -0.049434 0.00127\nvn -0.0198 -0.9981 0.0576\nv 0.003445 -0.049387 -0.00329\nvn 0.0496 -0.9986 -0.0203\nv 0.003924 -0.04939 -0.001967\nvn 0.0496 -0.9986 -0.0203\nv 0.002546 -0.049437 -0.003031\nvn 0.0496 -0.9986 -0.0203\nv 1.5e-05 -0.049438 0.001825\nvn -0.0198 -0.9992 0.036\nv -0.00073 -0.049392 0.002687\nvn -0.0198 -0.9992 0.036\nv -0.002707 -0.049384 0.001828\nvn -0.0198 -0.9992 0.036\nv 0.002546 -0.049437 -0.003031\nvn 0.0399 -0.9992 -0.0078\nv 0.003924 -0.04939 -0.001967\nvn 0.0476 -0.9989 -0.0015\nv 0.003038 -0.049434 -0.000886004\nvn 0.0407 -0.9991 -0.0072\nv -0.00534 -0.049355 -0.010052\nvn -0.0001 -0.9996 -0.0297\nv 0.00075 -0.049395 -0.008725\nvn 0.0014 -0.9997 -0.0259\nv -0.000754 -0.049395 -0.00873\nvn -0.0001 -0.9996 -0.0294\nv -0.007492 -0.049395 -0.001982\nvn -0.0373 -0.9993 -0.0001\nv 0.003923 -0.04939 -0.000499996\nvn 0.049 -0.9988 -0.0003\nv 1.5e-05 -0.049438 0.001825\nvn 0.0012 -0.9985 0.0541\nv 0.000734 -0.04939 0.00269\nvn 0.0012 -0.9985 0.0541\nv -0.00073 -0.049392 0.002687\nvn 0.0012 -0.9985 0.0541\nv 0.002078 -0.049434 0.001092\nvn 0.0168 -0.9989 0.0428\nv 0.002057 -0.049387 0.002212\nvn 0.0171 -0.999 0.0414\nv 1.5e-05 -0.049438 0.001825\nvn 0.017 -0.999 0.0425\nv 0.000734 -0.04939 0.00269\nvn 0.0172 -0.999 0.0409\nv 0.003923 -0.04939 -0.000499996\nvn 0.0421 -0.999 0.0155\nv 0.003376 -0.049391 0.000952003\nvn 0.0408 -0.999 0.0158\nv 0.003038 -0.049434 -0.000886004\nvn 0.036 -0.9992 0.0167\nv 0.00473 -0.049351 -0.010133\nvn 0.0034 -0.9995 -0.0301\nv 0.00075 -0.049395 -0.008725\nvn 0.0002 -1 0.0014\nv -0.000733 -0.04939 -0.005156\nvn -0.0002 -1 0.0013\nv -0.000754 -0.049395 -0.00873\nvn -0.0002 -1 0.0012\nv -0.007492 -0.049395 -0.001982\nvn 0.0013 -1 1.59204e-19\nv -0.003923 -0.04939 -0.001966\nvn 0.0007 -1 -0.0013\nv -0.007497 -0.049395 -0.000479999\nvn -0.001 -1 -0.0055\nv 0.002078 -0.049434 0.001092\nvn 0.0353 -0.9992 0.0168\nv -0.002056 -0.049387 -0.004678\nvn -0.0365 -0.9985 -0.0415\nv -0.001792 -0.049434 -0.003784\nvn -0.0365 -0.9985 -0.0415\nv -0.003375 -0.049391 -0.003418\nvn -0.0365 -0.9985 -0.0415\nv 0.002078 -0.049434 0.001092\nvn 0.0381 -0.9983 0.0431\nv 0.003376 -0.049391 0.000952003\nvn 0.0381 -0.9983 0.0431\nv 0.002057 -0.049387 0.002212\nvn 0.0381 -0.9983 0.0431\nv -0.007492 -0.049394 0.006265\nvn -0.0001 -0.9984 0.0561\nv 0.003924 -0.04939 -0.001967\nvn -0.0014 -1 -0.0003\nv 0.007497 -0.049395 -0.001987\nvn -0.0013 -1 -0.0002\nv 0.003923 -0.04939 -0.000499996\nvn -0.0014 -1 -0.0002\nv -0.001792 -0.049434 -0.003784\nvn -0.0321 -0.9992 -0.0223\nv -0.002975 -0.049437 -0.001936\nvn -0.0321 -0.9992 -0.0223\nv -0.003375 -0.049391 -0.003418\nvn -0.0321 -0.9992 -0.0223\nv 0.007365 -0.049394 -0.00656\nvn 0.0318 -0.9995 -0.0012\nv -0.000733 -0.04939 -0.005156\nvn -0.0195 -0.9987 -0.0465\nv -0.001792 -0.049434 -0.003784\nvn -0.0195 -0.9987 -0.0465\nv -0.002056 -0.049387 -0.004678\nvn -0.0195 -0.9987 -0.0465\nv -0.003375 -0.049391 -0.003418\nvn -0.0484 -0.9987 -0.0179\nv -0.002975 -0.049437 -0.001936\nvn -0.0486 -0.9988 -0.0081\nv -0.003923 -0.04939 -0.001966\nvn -0.0483 -0.9987 -0.0174\nv -0.000733 -0.04939 -0.005156\nvn -0.0082 -0.9993 -0.0377\nv 0.000521 -0.049434 -0.004263\nvn -0.0082 -0.9993 -0.0377\nv -0.001792 -0.049434 -0.003784\nvn -0.0082 -0.9993 -0.0377\nv 0.000734 -0.04939 0.00269\nvn 0.0013 -1 -0.0014\nv 0.000754 -0.049395 0.006264\nvn 0.0009 -1 -0.0013\nv -0.00073 -0.049392 0.002687\nvn -0.0001 -1 -0.0009\nv 0.000734 -0.04939 -0.005156\nvn 0.0003 -1 0.0014\nv -0.000756 -0.049394 0.006265\nvn -0.0004 -1 -0.0007\nv -0.003945 -0.0494 -0.000487003\nvn -0.0016 -1 -0.0068\nv -0.003945 -0.0494 -0.000487003\nvn -0.0487 -0.9988 -0.0075\nv 0.000734 -0.04939 -0.005156\nvn 0.0003 -0.9988 -0.0495\nv 0.000521 -0.049434 -0.004263\nvn 0.0003 -0.9988 -0.0495\nv -0.000733 -0.04939 -0.005156\nvn 0.0003 -0.9988 -0.0495\nv 0.007493 -0.049395 -0.000484\nvn -0.0013 -1 -0.0001\nv -0.002975 -0.049437 -0.001936\nvn -0.0335 -0.9994 0.0027\nv -0.002887 -0.049435 -0.000227998\nvn -0.0335 -0.9994 0.0027\nv -0.003945 -0.0494 -0.000487003\nvn -0.0335 -0.9994 0.0027\nv 0.000734 -0.04939 -0.005156\nvn 0.0166 -0.9988 -0.0456\nv 0.008786 -0.049348 -0.006804\nvn 0.7972 0.0039 -0.6037\nv 0.006869 -0.049352 -0.009336\nvn 0.7972 0.0039 -0.6037\nv 0.007075 -0.039981 -0.009002\nvn 0.7972 0.0039 -0.6037\nv 0.008786 -0.049348 -0.006804\nvn 0.8372 0.0247 -0.5464\nv 0.007075 -0.039981 -0.009002\nvn 0.8372 0.0247 -0.5464\nv 0.008675 -0.039993 -0.006552\nvn 0.8372 0.0247 -0.5464\nv 0.006869 -0.049352 -0.009336\nvn 0.3908 0.0242 -0.9202\nv 0.004843 -0.039983 -0.00995\nvn 0.3908 0.0242 -0.9202\nv 0.007075 -0.039981 -0.009002\nvn 0.3908 0.0242 -0.9202\nv 0.006869 -0.049352 -0.009336\nvn 0.3492 0.0141 -0.9369\nv 0.00473 -0.049351 -0.010133\nvn 0.3492 0.0141 -0.9369\nv 0.004843 -0.039983 -0.00995\nvn 0.3492 0.0141 -0.9369\nv -0.007861 -0.049355 -0.008424\nvn -0.6208 0.0256 -0.7836\nv -0.007818 -0.03996 -0.008151\nvn -0.6208 0.0256 -0.7836\nv -0.005692 -0.040011 -0.009837\nvn -0.6208 0.0256 -0.7836\nv -0.00534 -0.049355 -0.010052\nvn -0.5425 -0.0011 -0.84\nv -0.007861 -0.049355 -0.008424\nvn -0.5425 -0.0011 -0.84\nv -0.005692 -0.040011 -0.009837\nvn -0.5425 -0.0011 -0.84\nv -0.008893 -0.049342 -0.006133\nvn -0.9116 0.0161 -0.4107\nv -0.008709 -0.03999 -0.006172\nvn -0.9117 0.0162 -0.4105\nv -0.007818 -0.03996 -0.008151\nvn -0.9117 0.0161 -0.4105\nv -0.007861 -0.049355 -0.008424\nvn -0.9116 0.0161 -0.4107\nv 0.007493 -0.049395 -0.000484\nvn -0.9998 -0.0206 0.0006\nv 0.007333 -0.041442 0.006094\nvn -0.9998 -0.0205 0.0006\nv 0.007331 -0.041442 -0.000313002\nvn -0.9998 -0.0203 0.0003\nv 0.007498 -0.049394 0.00626\nvn -0.9998 -0.0207 0.0008\nv 0.003923 -0.04939 -0.000499996\nvn 0.0121 -0.0286 0.9995\nv 0.007331 -0.041442 -0.000313002\nvn 0.0121 -0.0286 0.9995\nv 0.004115 -0.041434 -0.000273998\nvn 0.0121 -0.0286 0.9995\nv 0.007493 -0.049395 -0.000484\nvn -0.0045 -0.0215 0.9998\nv 0.007331 -0.041442 -0.000313002\nvn -0.0045 -0.0215 0.9998\nv 0.003923 -0.04939 -0.000499996\nvn -0.0045 -0.0215 0.9998\nv 0.000914 -0.04144 0.002842\nvn 0.3399 -0.0257 0.9401\nv 0.000734 -0.04939 0.00269\nvn 0.3399 -0.0257 0.9401\nv 0.002057 -0.049387 0.002212\nvn 0.3399 -0.0257 0.9401\nv 0.002675 -0.041428 0.002054\nvn 0.4087 -0.0136 0.9126\nv 0.000914 -0.04144 0.002842\nvn 0.4087 -0.0136 0.9126\nv 0.002057 -0.049387 0.002212\nvn 0.4087 -0.0136 0.9126\nv 0.002675 -0.041428 0.002054\nvn 0.6902 -0.0392 0.7226\nv 0.002057 -0.049387 0.002212\nvn 0.6902 -0.0392 0.7226\nv 0.003376 -0.049391 0.000952003\nvn 0.6902 -0.0392 0.7226\nv 0.004115 -0.041434 -0.000273998\nvn 0.8504 0.002 0.5261\nv 0.002675 -0.041428 0.002054\nvn 0.8504 0.002 0.5261\nv 0.003376 -0.049391 0.000952003\nvn 0.8504 0.002 0.5261\nv 0.004115 -0.041434 -0.000273998\nvn 0.9351 -0.0326 0.3528\nv 0.003376 -0.049391 0.000952003\nvn 0.9351 -0.0326 0.3528\nv 0.003923 -0.04939 -0.000499996\nvn 0.9351 -0.0326 0.3528\nv 0.000916 -0.041442 0.006094\nvn 0.9998 -0.0209 -0.0047\nv 0.000734 -0.04939 0.00269\nvn 0.9998 -0.0222 -0.0018\nv 0.000914 -0.04144 0.002842\nvn 0.9997 -0.0226 -0.0009\nv 0.000754 -0.049395 0.006264\nvn 0.9998 -0.0205 -0.0057\nv 0.007333 -0.041442 0.006094\nvn 1.2244e-16 -0.0209 -0.9998\nv 0.007498 -0.049394 0.00626\nvn -0.0004 -0.0211 -0.9998\nv 0.000916 -0.041442 0.006094\nvn -0.0003 -0.0211 -0.9998\nv 0.000754 -0.049395 0.006264\nvn -0.0006 -0.0214 -0.9998\nv 0.002675 -0.041428 0.002054\nvn 0.0027 -1 0.0022\nv 0.000916 -0.041442 0.006094\nvn 0.0056 -1 -0.0012\nv 0.000914 -0.04144 0.002842\nvn 0.0069 -1 -0.0006\nv 0.007333 -0.041442 0.006094\nvn -0.0001 -1 -0.0034\nv 0.007331 -0.041442 -0.000313002\nvn -0.0026 -1 0.0006\nv 0.004115 -0.041434 -0.000273998\nvn -0.0025 -1 0.0009\nv -0.007333 -0.041443 0.006095\nvn -0.0001 -0.0215 -0.9998\nv -0.000756 -0.049394 0.006265\nvn 1.2244e-16 -0.0214 -0.9998\nv -0.007492 -0.049394 0.006265\nvn 1.2244e-16 -0.0214 -0.9998\nv -0.000916 -0.041442 0.006094\nvn -0.0001 -0.0215 -0.9998\nv -0.00073 -0.049392 0.002687\nvn -0.9998 -0.0221 -0.003\nv -0.000916 -0.041442 0.006094\nvn -0.9998 -0.0207 -0.0062\nv -0.000909 -0.041442 0.00284\nvn -0.9997 -0.0225 -0.002\nv -0.000756 -0.049394 0.006265\nvn -0.9998 -0.0203 -0.0071\nv -0.003045 -0.04142 0.00181\nvn -0.8812 -0.0364 0.4714\nv -0.003945 -0.0494 -0.000487003\nvn -0.8812 -0.0364 0.4714\nv -0.002707 -0.049384 0.001828\nvn -0.8812 -0.0364 0.4714\nv -0.003045 -0.04142 0.00181\nvn -0.9005 -0.0235 0.4342\nv -0.004073 -0.041442 -0.000323\nvn -0.9005 -0.0235 0.4342\nv -0.003945 -0.0494 -0.000487003\nvn -0.9005 -0.0235 0.4342\nv -0.000909 -0.041442 0.00284\nvn -0.3985 -0.0267 0.9168\nv -0.002707 -0.049384 0.001828\nvn -0.3985 -0.0267 0.9168\nv -0.00073 -0.049392 0.002687\nvn -0.3985 -0.0267 0.9168\nv -0.000909 -0.041442 0.00284\nvn -0.4344 -0.0165 0.9006\nv -0.003045 -0.04142 0.00181\nvn -0.4344 -0.0165 0.9006\nv -0.002707 -0.049384 0.001828\nvn -0.4344 -0.0165 0.9006\nv -0.003945 -0.0494 -0.000487003\nvn 0.0028 -0.0207 0.9998\nv -0.007332 -0.041443 -0.000313002\nvn 0.0022 -0.0209 0.9998\nv -0.007497 -0.049395 -0.000479999\nvn 0.0019 -0.021 0.9998\nv -0.004073 -0.041442 -0.000323\nvn 0.0031 -0.0205 0.9998\nv -0.007333 -0.041443 0.006095\nvn 0.9998 -0.0204 -0.0002\nv -0.007497 -0.049395 -0.000479999\nvn 0.9998 -0.0203 -0.0003\nv -0.007332 -0.041443 -0.000313002\nvn 0.9998 -0.0207 0.0001\nv -0.007492 -0.049394 0.006265\nvn 0.9998 -0.0201 -0.0006\nv -0.003045 -0.04142 0.00181\nvn -0.009 -1 -0.0007\nv -0.000916 -0.041442 0.006094\nvn -0.0087 -1 -0.0009\nv -0.007333 -0.041443 0.006095\nvn 0.0001 -1 -0.0053\nv -0.003045 -0.04142 0.00181\nvn 0.0009 -1 0.009\nv -0.007333 -0.041443 0.006095\nvn 0.0054 -1 -0.0001\nv -0.007332 -0.041443 -0.000313002\nvn 0.0011 -1 0.0087\nv -0.000909 -0.041442 0.00284\nvn -0.0104 -0.9999 -0.0001\nv -0.004073 -0.041442 -0.000323\nvn 0.0002 -0.9999 0.0104\nv -0.007141 -0.041431 -0.006675\nvn 0.6565 -0.0331 0.7536\nv -0.007258 -0.049388 -0.006922\nvn 0.6565 -0.0331 0.7536\nv -0.00509 -0.041432 -0.008461\nvn 0.6565 -0.0331 0.7536\nv -0.007258 -0.049388 -0.006922\nvn 0.6075 -0.0119 0.7943\nv -0.004972 -0.049393 -0.008671\nvn 0.6075 -0.0119 0.7943\nv -0.00509 -0.041432 -0.008461\nvn 0.6075 -0.0119 0.7943\nv -0.007332 -0.041444 -0.002153\nvn 0.9987 -0.0187 0.0466\nv -0.007258 -0.049388 -0.006922\nvn 0.9989 -0.0165 0.043\nv -0.007141 -0.041431 -0.006675\nvn 0.999 -0.0161 0.0423\nv -0.007492 -0.049395 -0.001982\nvn 0.9987 -0.019 0.0472\nv -0.007332 -0.041444 -0.002153\nvn 0.0045 -0.0215 -0.9998\nv -0.003923 -0.04939 -0.001966\nvn 0.0045 -0.0215 -0.9998\nv -0.007492 -0.049395 -0.001982\nvn 0.0045 -0.0215 -0.9998\nv -0.004115 -0.041433 -0.002192\nvn -0.0121 -0.0286 -0.9995\nv -0.003923 -0.04939 -0.001966\nvn -0.0121 -0.0286 -0.9995\nv -0.007332 -0.041444 -0.002153\nvn -0.0121 -0.0286 -0.9995\nv -0.000913 -0.04144 -0.005308\nvn -0.3397 -0.0257 -0.9402\nv -0.000733 -0.04939 -0.005156\nvn -0.3397 -0.0257 -0.9402\nv -0.002056 -0.049387 -0.004678\nvn -0.3397 -0.0257 -0.9402\nv -0.002675 -0.041427 -0.00452\nvn -0.4085 -0.0136 -0.9127\nv -0.000913 -0.04144 -0.005308\nvn -0.4085 -0.0136 -0.9127\nv -0.002056 -0.049387 -0.004678\nvn -0.4085 -0.0136 -0.9127\nv -0.002675 -0.041427 -0.00452\nvn -0.6902 -0.0393 -0.7226\nv -0.002056 -0.049387 -0.004678\nvn -0.6902 -0.0393 -0.7226\nv -0.003375 -0.049391 -0.003418\nvn -0.6902 -0.0393 -0.7226\nv -0.004115 -0.041433 -0.002192\nvn -0.8505 0.002 -0.5259\nv -0.002675 -0.041427 -0.00452\nvn -0.8505 0.002 -0.5259\nv -0.003375 -0.049391 -0.003418\nvn -0.8505 0.002 -0.5259\nv -0.004115 -0.041433 -0.002192\nvn -0.9351 -0.0326 -0.3528\nv -0.003375 -0.049391 -0.003418\nvn -0.9351 -0.0326 -0.3528\nv -0.003923 -0.04939 -0.001966\nvn -0.9351 -0.0326 -0.3528\nv -0.000733 -0.04939 -0.005156\nvn -0.9998 -0.0222 0.002\nv -0.000916 -0.041443 -0.008561\nvn -0.9998 -0.021 0.0049\nv -0.000754 -0.049395 -0.00873\nvn -0.9998 -0.0206 0.0058\nv -0.000913 -0.04144 -0.005308\nvn -0.9997 -0.0226 0.001\nv -0.004972 -0.049393 -0.008671\nvn 0.0223 -0.0252 0.9994\nv -0.000916 -0.041443 -0.008561\nvn 0.0156 -0.0217 0.9996\nv -0.00509 -0.041432 -0.008461\nvn 0.0238 -0.0259 0.9994\nv -0.000754 -0.049395 -0.00873\nvn 0.0141 -0.021 0.9997\nv -0.004115 -0.041433 -0.002192\nvn 0.0025 -1 -0.0022\nv -0.007332 -0.041444 -0.002153\nvn 0.0031 -1 -0.0026\nv -0.007141 -0.041431 -0.006675\nvn 0.0025 -1 -0.0022\nv -0.002675 -0.041427 -0.00452\nvn 0.0023 -1 2.81669e-19\nv -0.00509 -0.041432 -0.008461\nvn -0.0043 -1 0.0032\nv -0.000913 -0.04144 -0.005308\nvn -0.0027 -1 0.0011\nv -0.000916 -0.041443 -0.008561\nvn -0.0025 -1 0.0009\nv 0.006608 -0.041413 -0.007402\nvn -0.914 -0.0441 0.4033\nv 0.007365 -0.049394 -0.00656\nvn -0.914 -0.0441 0.4033\nv 0.00731 -0.041436 -0.005814\nvn -0.914 -0.0441 0.4033\nv 0.004925 -0.041437 -0.008496\nvn -0.5443 -0.0385 0.838\nv 0.005344 -0.049386 -0.008589\nvn -0.5443 -0.0385 0.838\nv 0.006608 -0.041413 -0.007402\nvn -0.5443 -0.0385 0.838\nv 0.005344 -0.049386 -0.008589\nvn -0.7085 0.0073 0.7057\nv 0.007365 -0.049394 -0.00656\nvn -0.7085 0.0073 0.7057\nv 0.006608 -0.041413 -0.007402\nvn -0.7085 0.0073 0.7057\nv 0.005344 -0.049386 -0.008589\nvn -0.0297 -0.0202 0.9994\nv 0.000916 -0.041444 -0.00856\nvn -0.0297 -0.0202 0.9994\nv 0.00075 -0.049395 -0.008725\nvn -0.0297 -0.0202 0.9994\nv 0.005344 -0.049386 -0.008589\nvn -0.0158 -0.0124 0.9998\nv 0.004925 -0.041437 -0.008496\nvn -0.0158 -0.0124 0.9998\nv 0.000916 -0.041444 -0.00856\nvn -0.0158 -0.0124 0.9998\nv 0.000916 -0.041444 -0.00856\nvn 0.9998 -0.0209 0.0045\nv 0.000734 -0.04939 -0.005156\nvn 0.9998 -0.0209 0.0045\nv 0.00075 -0.049395 -0.008725\nvn 0.9998 -0.0209 0.0045\nv 0.000959 -0.041433 -0.005348\nvn 0.9995 -0.0286 -0.0135\nv 0.000734 -0.04939 -0.005156\nvn 0.9995 -0.0286 -0.0135\nv 0.000916 -0.041444 -0.00856\nvn 0.9995 -0.0286 -0.0135\nv 0.004076 -0.04144 -0.002146\nvn 0.9401 -0.0257 -0.3399\nv 0.003924 -0.04939 -0.001967\nvn 0.9401 -0.0257 -0.3399\nv 0.003445 -0.049387 -0.00329\nvn 0.9401 -0.0257 -0.3399\nv 0.003287 -0.041427 -0.003909\nvn 0.9127 -0.0136 -0.4085\nv 0.004076 -0.04144 -0.002146\nvn 0.9127 -0.0136 -0.4085\nv 0.003445 -0.049387 -0.00329\nvn 0.9127 -0.0136 -0.4085\nv 0.003287 -0.041427 -0.003909\nvn 0.7226 -0.0393 -0.6902\nv 0.003445 -0.049387 -0.00329\nvn 0.7226 -0.0393 -0.6902\nv 0.002186 -0.049391 -0.004608\nvn 0.7226 -0.0393 -0.6902\nv 0.000959 -0.041433 -0.005348\nvn 0.5259 0.002 -0.8505\nv 0.003287 -0.041427 -0.003909\nvn 0.5259 0.002 -0.8505\nv 0.002186 -0.049391 -0.004608\nvn 0.5259 0.002 -0.8505\nv 0.000959 -0.041433 -0.005348\nvn 0.3529 -0.0326 -0.9351\nv 0.002186 -0.049391 -0.004608\nvn 0.3529 -0.0326 -0.9351\nv 0.000734 -0.04939 -0.005156\nvn 0.3529 -0.0326 -0.9351\nv 0.007332 -0.041443 -0.002153\nvn -0.005 -0.0213 -0.9998\nv 0.003924 -0.04939 -0.001967\nvn -0.0027 -0.0223 -0.9997\nv 0.004076 -0.04144 -0.002146\nvn -0.0021 -0.0226 -0.9997\nv 0.007497 -0.049395 -0.001987\nvn -0.0057 -0.021 -0.9998\nv 0.007365 -0.049394 -0.00656\nvn -1 -0.0075 0.0061\nv 0.007332 -0.041443 -0.002153\nvn -1 -0.0075 0.0061\nv 0.00731 -0.041436 -0.005814\nvn -1 -0.0075 0.0061\nv 0.007497 -0.049395 -0.001987\nvn -0.9994 -0.0202 0.0289\nv 0.007332 -0.041443 -0.002153\nvn -0.9994 -0.0202 0.0289\nv 0.007365 -0.049394 -0.00656\nvn -0.9994 -0.0202 0.0289\nv 0.004925 -0.041437 -0.008496\nvn 0.0015 -1 0.003\nv 0.003287 -0.041427 -0.003909\nvn 0.0088 -0.9999 0.0055\nv 0.000959 -0.041433 -0.005348\nvn 0.0014 -1 0.0029\nv 0.000916 -0.041444 -0.00856\nvn 0.0015 -1 0.0031\nv 0.00731 -0.041436 -0.005814\nvn -0.0029 -1 -0.0035\nv 0.004076 -0.04144 -0.002146\nvn -0.0011 -1 -0.0022\nv 0.003287 -0.041427 -0.003909\nvn -0.0069 -0.9999 -0.0098\nv 0.007332 -0.041443 -0.002153\nvn -0.0008 -1 -0.002\nv 0.006608 -0.041413 -0.007402\nvn -0.0075 -0.9999 -0.0111\nv 0.006608 -0.041413 -0.007402\nvn 0.0107 -0.9999 0.0062\nv -0.000723 -0.050895 0.000889\nvn 0.0023 -1 -0.0066\nv -0.002455 -0.050896 0.000498001\nvn 0.0073 -1 -0.0034\nv -0.001967 -0.05089 -0.000309999\nvn 0.0091 -1 -0.0038\nv -0.003009 -0.050894 -0.001512\nvn 0.0079 -1 -0.0033\nv -0.000723 -0.050895 0.000889\nvn -0.0036 -0.9999 0.0125\nv -0.00097 -0.050885 0.001599\nvn -0.0035 -0.9999 0.0125\nv -0.002455 -0.050896 0.000498001\nvn -0.0021 -0.9999 0.013\nv -0.002153 -0.050887 -0.001653\nvn 0.0083 -1 -0.0035\nv 0.001026 -0.050895 0.001617\nvn -0.005 -0.9999 0.012\nv 0.000985 -0.050888 0.000701\nvn 0.0031 -1 -0.0074\nv 0.001026 -0.050895 0.001617\nvn 0.0031 -1 -0.0074\nv -0.000723 -0.050895 0.000889\nvn 0.0031 -1 -0.0074\nv -0.002153 -0.050887 -0.001653\nvn 0.0194 -0.9997 0.0129\nv -0.003009 -0.050894 -0.001512\nvn 0.0108 -0.9999 0.0117\nv -0.001871 -0.050907 -0.003644\nvn 0.0131 -0.9998 0.012\nv 0.002 -0.050897 -0.000318999\nvn -0.0152 -0.9999 -0.0065\nv 0.001026 -0.050895 0.001617\nvn -0.0152 -0.9999 -0.0065\nv 0.000985 -0.050888 0.000701\nvn -0.0152 -0.9999 -0.0065\nv 0.002346 -0.050887 0.000587997\nvn 0.006 -0.9999 0.0089\nv 0.001026 -0.050895 0.001617\nvn 0.0115 -0.9999 0.0069\nv 0.002 -0.050897 -0.000318999\nvn 0.0105 -0.9999 0.0071\nv -0.00107 -0.050884 -0.003214\nvn 0.0218 -0.9997 0.0132\nv 0.002999 -0.050897 -0.000878002\nvn 0.0049 -0.9999 0.0094\nv 0.00036 -0.0509 -0.004201\nvn -0.004 -0.9999 0.0106\nv 0.000827 -0.050891 -0.003252\nvn -0.004 -0.9999 0.0106\nv -0.00107 -0.050884 -0.003214\nvn -0.004 -0.9999 0.0106\nv 0.00036 -0.0509 -0.004201\nvn 0.0113 -0.9994 0.0327\nv -0.00107 -0.050884 -0.003214\nvn 0.0113 -0.9994 0.0327\nv -0.001871 -0.050907 -0.003644\nvn 0.0113 -0.9994 0.0327\nv 0.002999 -0.050897 -0.000878002\nvn -0.0092 -0.9998 -0.016\nv 0.002 -0.050897 -0.000318999\nvn -0.0092 -0.9998 -0.016\nv 0.002051 -0.05087 -0.002057\nvn -0.0092 -0.9998 -0.016\nv 0.002339 -0.050885 -0.003188\nvn -0.0349 -0.9994 0.0047\nv 0.002999 -0.050897 -0.000878002\nvn -0.0349 -0.9994 0.0047\nv 0.002051 -0.05087 -0.002057\nvn -0.0349 -0.9994 0.0047\nv 0.00036 -0.0509 -0.004201\nvn 0.0182 -0.9998 -0.0003\nv 0.002051 -0.05087 -0.002057\nvn 0.0182 -0.9998 -0.0003\nv 0.000827 -0.050891 -0.003252\nvn 0.0182 -0.9998 -0.0003\nv 0.002339 -0.050885 -0.003188\nvn 0.0004 -0.9999 0.0137\nv 0.002051 -0.05087 -0.002057\nvn 0.0004 -0.9999 0.0137\nv 0.00036 -0.0509 -0.004201\nvn 0.0004 -0.9999 0.0137\nv 0.002546 -0.049437 -0.003031\nvn 0.9743 -0.0273 -0.2235\nv 0.003038 -0.049434 -0.000886004\nvn 0.9743 -0.0273 -0.2235\nv 0.002999 -0.050897 -0.000878002\nvn 0.9743 -0.0273 -0.2235\nv 0.002546 -0.049437 -0.003031\nvn 0.9558 -0.1073 -0.2738\nv 0.002999 -0.050897 -0.000878002\nvn 0.9558 -0.1073 -0.2738\nv 0.002339 -0.050885 -0.003188\nvn 0.9558 -0.1073 -0.2738\nv 0.002078 -0.049434 0.001092\nvn 0.3331 0.0975 0.9378\nv 1.5e-05 -0.049438 0.001825\nvn 0.3331 0.0975 0.9378\nv 0.001026 -0.050895 0.001617\nvn 0.3331 0.0975 0.9378\nv 0.000521 -0.049434 -0.004263\nvn 0.5196 0.0181 -0.8542\nv 0.002546 -0.049437 -0.003031\nvn 0.5196 0.0181 -0.8542\nv 0.002339 -0.050885 -0.003188\nvn 0.5196 0.0181 -0.8542\nv 0.002078 -0.049434 0.001092\nvn 0.6077 -0.1577 0.7783\nv 0.001026 -0.050895 0.001617\nvn 0.6077 -0.1577 0.7783\nv 0.002346 -0.050887 0.000587997\nvn 0.6077 -0.1577 0.7783\nv 0.000521 -0.049434 -0.004263\nvn 0.4544 -0.0875 -0.8865\nv 0.002339 -0.050885 -0.003188\nvn 0.4544 -0.0875 -0.8865\nv 0.00036 -0.0509 -0.004201\nvn 0.4544 -0.0875 -0.8865\nv 0.002078 -0.049434 0.001092\nvn 0.913 0.0274 0.4069\nv 0.002346 -0.050887 0.000587997\nvn 0.913 0.0274 0.4069\nv 0.002999 -0.050897 -0.000878002\nvn 0.913 0.0274 0.4069\nv 0.003038 -0.049434 -0.000886004\nvn 0.8992 -0.0217 0.4369\nv 0.002078 -0.049434 0.001092\nvn 0.8992 -0.0217 0.4369\nv 0.002999 -0.050897 -0.000878002\nvn 0.8992 -0.0217 0.4369\nv 0.002155 -0.049418 -0.000796999\nvn -0.7316 -0.139 -0.6674\nv 0.002 -0.050897 -0.000318999\nvn -0.7316 -0.139 -0.6674\nv 0.000722 -0.049434 0.000777003\nvn -0.7316 -0.139 -0.6674\nv -0.00107 -0.050884 -0.003214\nvn 0.0204 0.0785 0.9967\nv 0.000827 -0.050891 -0.003252\nvn 0.0204 0.0785 0.9967\nv -1.1e-05 -0.04943 -0.00335\nvn 0.0204 0.0785 0.9967\nv 0.002 -0.050897 -0.000318999\nvn -0.7062 -0.0908 -0.7021\nv 0.000985 -0.050888 0.000701\nvn -0.7062 -0.0908 -0.7021\nv 0.000722 -0.049434 0.000777003\nvn -0.7062 -0.0908 -0.7021\nv -1.1e-05 -0.04943 -0.00335\nvn -0.3489 -0.138 0.927\nv 0.000827 -0.050891 -0.003252\nvn -0.3489 -0.138 0.927\nv 0.001448 -0.049429 -0.002801\nvn -0.3489 -0.138 0.927\nv 0.000985 -0.050888 0.000701\nvn -0.1099 0.0325 -0.9934\nv -0.000723 -0.050895 0.000889\nvn -0.1099 0.0325 -0.9934\nv 0.000722 -0.049434 0.000777003\nvn -0.1099 0.0325 -0.9934\nv 0.000827 -0.050891 -0.003252\nvn -0.6971 0.0761 0.7129\nv 0.002051 -0.05087 -0.002057\nvn -0.6971 0.0761 0.7129\nv 0.001448 -0.049429 -0.002801\nvn -0.6971 0.0761 0.7129\nv 0.001448 -0.049429 -0.002801\nvn -0.9202 -0.2171 0.3257\nv 0.002051 -0.05087 -0.002057\nvn -0.9202 -0.2171 0.3257\nv 0.002155 -0.049418 -0.000796999\nvn -0.9202 -0.2171 0.3257\nv 0.002051 -0.05087 -0.002057\nvn -0.995 0.0954 -0.0281\nv 0.002 -0.050897 -0.000318999\nvn -0.995 0.0954 -0.0281\nv 0.002155 -0.049418 -0.000796999\nvn -0.995 0.0954 -0.0281\nv 0.000861 -0.041913 -0.002668\nvn -0.959 -0.0821 0.2711\nv 0.001741 -0.049389 -0.001819\nvn -0.959 -0.0821 0.2711\nv 0.001526 -0.041912 -0.000314999\nvn -0.959 -0.0821 0.2711\nv 0.001741 -0.049389 -0.001819\nvn -0.9707 0.0203 -0.2394\nv 0.001298 -0.049391 -2.09986e-05\nvn -0.9707 0.0203 -0.2394\nv 0.001526 -0.041912 -0.000314999\nvn -0.9707 0.0203 -0.2394\nv 0.001298 -0.049391 -2.09986e-05\nvn -0.3562 -0.0258 -0.934\nv -0.000156 -0.049388 0.000532997\nvn -0.3562 -0.0258 -0.934\nv 0.001526 -0.041912 -0.000314999\nvn -0.3562 -0.0258 -0.934\nv 0.001526 -0.041912 -0.000314999\nvn -0.2114 -0.0631 -0.9754\nv -0.000156 -0.049388 0.000532997\nvn -0.2114 -0.0631 -0.9754\nv -0.00086 -0.041913 0.000201997\nvn -0.2114 -0.0631 -0.9754\nv 0.000156 -0.049388 -0.002999\nvn -0.597 0.0208 0.802\nv 0.001741 -0.049389 -0.001819\nvn -0.597 0.0208 0.802\nv 0.000861 -0.041913 -0.002668\nvn -0.597 0.0208 0.802\nv -0.00174 -0.049389 -0.000646996\nvn 0.2476 -0.9675 -0.0521\nv -0.001819 -0.049438 -0.000112\nvn 0.2476 -0.9675 -0.0521\nv -0.002086 -0.049431 -0.001502\nvn 0.2476 -0.9675 -0.0521\nv 0.001298 -0.049391 -2.09986e-05\nvn -0.2215 -0.9521 -0.2108\nv 0.002155 -0.049418 -0.000796999\nvn -0.2215 -0.9521 -0.2108\nv 0.000722 -0.049434 0.000777003\nvn -0.2215 -0.9521 -0.2108\nv -0.000156 -0.049388 0.000532997\nvn 0.0022 -0.9819 -0.1895\nv 0.000722 -0.049434 0.000777003\nvn 0.0022 -0.9819 -0.1895\nv -0.000698 -0.049432 0.000751001\nvn 0.0022 -0.9819 -0.1895\nv -1.1e-05 -0.04943 -0.00335\nvn 0.037 -0.9947 0.0958\nv -0.001297 -0.049391 -0.002445\nvn 0.0387 -0.9944 0.0982\nv -0.001465 -0.049429 -0.002785\nvn 0.0362 -0.9949 0.0946\nv 0.001448 -0.049429 -0.002801\nvn -0.0397 -0.9978 0.0532\nv 0.001741 -0.049389 -0.001819\nvn -0.0397 -0.9978 0.0532\nv 0.000156 -0.049388 -0.002999\nvn -0.0397 -0.9978 0.0532\nv -0.001297 -0.049391 -0.002445\nvn 0.1493 -0.9881 0.038\nv -0.00174 -0.049389 -0.000646996\nvn 0.1493 -0.9881 0.038\nv -0.001465 -0.049429 -0.002785\nvn 0.1493 -0.9881 0.038\nv -0.001465 -0.049429 -0.002785\nvn 0.0574 -0.998 0.0264\nv -0.00174 -0.049389 -0.000646996\nvn 0.0574 -0.998 0.0264\nv -0.002086 -0.049431 -0.001502\nvn 0.0574 -0.998 0.0264\nv 0.000156 -0.049388 -0.002999\nvn 0.0395 -0.9943 0.0994\nv -0.00174 -0.049389 -0.000646996\nvn 0.0677 -0.9944 -0.0811\nv -0.000698 -0.049432 0.000751001\nvn 0.0677 -0.9944 -0.0811\nv -0.001819 -0.049438 -0.000112\nvn 0.0677 -0.9944 -0.0811\nv -0.00174 -0.049389 -0.000646996\nvn 0.0516 -0.9963 -0.0692\nv -0.000156 -0.049388 0.000532997\nvn 0.0516 -0.9963 -0.0692\nv -0.000698 -0.049432 0.000751001\nvn 0.0516 -0.9963 -0.0692\nv 0.001448 -0.049429 -0.002801\nvn -0.5421 -0.8172 0.1956\nv 0.002155 -0.049418 -0.000796999\nvn -0.5421 -0.8172 0.1956\nv 0.001741 -0.049389 -0.001819\nvn -0.5421 -0.8172 0.1956\nv -1.1e-05 -0.04943 -0.00335\nvn -0.0532 -0.9883 0.1429\nv 0.001448 -0.049429 -0.002801\nvn -0.0532 -0.9883 0.1429\nv 0.000156 -0.049388 -0.002999\nvn -0.0532 -0.9883 0.1429\nv 0.001741 -0.049389 -0.001819\nvn -0.0429 -0.999 -0.0118\nv 0.002155 -0.049418 -0.000796999\nvn -0.0429 -0.999 -0.0118\nv 0.001298 -0.049391 -2.09986e-05\nvn -0.0429 -0.999 -0.0118\nv 0.001298 -0.049391 -2.09986e-05\nvn -0.0303 -0.9967 -0.0753\nv 0.000722 -0.049434 0.000777003\nvn -0.0303 -0.9967 -0.0753\nv -0.000156 -0.049388 0.000532997\nvn -0.0303 -0.9967 -0.0753\nv 0.000861 -0.041913 -0.002668\nvn -0 -1 0\nv 0.001526 -0.041912 -0.000314999\nvn 0.0003 -1 0.0002\nv -0.00086 -0.041913 0.000201997\nvn -0 -1 0\nv -0.001526 -0.041913 -0.002151\nvn -0.0003 -1 -0.0001\nv -0.002244 -0.039925 0.001011\nvn -0.0079 0.8194 -0.5732\nv 1.26628e-17 -0.041489 -0.001233\nvn -0.0065 0.8175 -0.5759\nv -0.008804 -0.041559 -0.001233\nvn -0.0069 0.8179 -0.5753\nv -0.008759 -0.03997 0.001043\nvn -0.0084 0.8199 -0.5724\nv -0.002262 -0.039916 -0.003496\nvn -0.0075 0.8194 0.5732\nv -0.008758 -0.039971 -0.003505\nvn -0.0077 0.8197 0.5727\nv -0.008804 -0.041559 -0.001233\nvn -0.0067 0.8184 0.5747\nv 1.26628e-17 -0.041489 -0.001233\nvn -0.0065 0.8181 0.575\nv 0.008809 -0.041565 -0.001233\nvn 0.0072 0.818 0.5751\nv 0.008757 -0.03997 -0.003505\nvn 0.0076 0.8186 0.5743\nv 0.002263 -0.039916 -0.003496\nvn 0.0074 0.8183 0.5747\nv 1.26628e-17 -0.041489 -0.001233\nvn 0.0071 0.8178 0.5754\nv 0.008809 -0.041565 -0.001233\nvn 0.0073 0.8176 -0.5757\nv 1.26628e-17 -0.041489 -0.001233\nvn 0.0071 0.8173 -0.5761\nv 0.002248 -0.039924 0.001015\nvn 0.0078 0.8184 -0.5746\nv 0.008759 -0.039971 0.001039\nvn 0.0081 0.8188 -0.574\nv 0.002354 -0.04942 -0.003769\nvn -0.6173 0.6997 0.3596\nv -2e-06 -0.052805 -0.001227\nvn -0.6173 0.6997 0.3596\nv 0.003367 -0.04942 -0.002029\nvn -0.6173 0.6997 0.3596\nv 0.00121 -0.049422 -0.004438\nvn -0.3576 0.707 0.6101\nv -2e-06 -0.052805 -0.001227\nvn -0.3576 0.707 0.6101\nv 0.002354 -0.04942 -0.003769\nvn -0.3576 0.707 0.6101\nv 0.00121 -0.049422 -0.004438\nvn -0.0556 0.6977 0.7142\nv -0.0009 -0.049423 -0.0046\nvn -0.0556 0.6977 0.7142\nv -2e-06 -0.052805 -0.001227\nvn -0.0556 0.6977 0.7142\nv -0.0009 -0.049423 -0.0046\nvn 0.3884 0.7004 0.5988\nv -0.002569 -0.049414 -0.003529\nvn 0.3884 0.7004 0.5988\nv -2e-06 -0.052805 -0.001227\nvn 0.3884 0.7004 0.5988\nv -0.003461 -0.049426 -0.001688\nvn 0.6413 0.6995 0.3154\nv -2e-06 -0.052805 -0.001227\nvn 0.6413 0.6995 0.3154\nv -0.002569 -0.049414 -0.003529\nvn 0.6413 0.6995 0.3154\nv -0.010405 -0.058387 0.039803\nvn 1.22416e-16 0.0272 -0.9996\nv 0.010303 -0.059675 0.039767\nvn 1.22416e-16 0.0272 -0.9996\nv -0.010307 -0.059704 0.039767\nvn 1.22416e-16 0.0272 -0.9996\nv -0.010405 -0.058387 0.039803\nvn -0.0016 0.0017 -1\nv 0.010402 -0.058212 0.039769\nvn -0.0016 0.0017 -1\nv 0.010303 -0.059675 0.039767\nvn -0.0016 0.0017 -1\nv -0.010328 -0.057411 0.037455\nvn -0.0014 -1 -0.0021\nv 0.010206 -0.057442 0.038657\nvn -0.0014 -1 -0.0021\nv -0.010402 -0.057414 0.038997\nvn -0.0014 -1 -0.0021\nv -0.010328 -0.057411 0.037455\nvn 3.09836e-18 -0.9997 -0.0253\nv 0.010338 -0.057411 0.037419\nvn 3.09836e-18 -0.9997 -0.0253\nv 0.010206 -0.057442 0.038657\nvn 3.09836e-18 -0.9997 -0.0253\nv -0.01035 -0.042563 0.041967\nvn -0.9997 0.0207 -0.0105\nv -0.010464 -0.048072 0.042026\nvn -0.9997 0.0207 -0.0105\nv -0.010366 -0.042524 0.043634\nvn -0.9997 0.0207 -0.0105\nv -0.010338 -0.048029 0.039929\nvn -0.9965 0.0596 -0.0588\nv -0.010498 -0.050668 0.039959\nvn -0.9965 0.0596 -0.0588\nv -0.010464 -0.048072 0.042026\nvn -0.9965 0.0596 -0.0588\nv -0.010379 -0.052792 0.024915\nvn -0.9995 0.0228 -0.0219\nv -0.010501 -0.057036 0.026053\nvn -0.9995 0.0228 -0.0219\nv -0.010375 -0.051577 0.025994\nvn -0.9995 0.0228 -0.0219\nv -0.010375 -0.051577 0.025994\nvn -0.9997 0.023 -0.0024\nv -0.010501 -0.057036 0.026053\nvn -0.9997 0.023 -0.0024\nv -0.010403 -0.051445 0.038968\nvn -0.9997 0.023 -0.0024\nv -0.010403 -0.051445 0.038968\nvn -1 -0.0001 0.0076\nv -0.010501 -0.057036 0.026053\nvn -1 -0.0001 0.0076\nv -0.010402 -0.057414 0.038997\nvn -1 -0.0001 0.0076\nv -0.010379 -0.052792 0.024915\nvn -0.9871 -0.0144 -0.1593\nv -0.010333 -0.056215 0.02494\nvn -0.9871 -0.0144 -0.1593\nv -0.010501 -0.057036 0.026053\nvn -0.9871 -0.0144 -0.1593\nv -0.010402 -0.057414 0.038997\nvn -0.9998 -0.0116 -0.0178\nv -0.010405 -0.058387 0.039803\nvn -0.9998 -0.0116 -0.0178\nv -0.010498 -0.050668 0.039959\nvn -0.9998 -0.0116 -0.0178\nv -0.010403 -0.051445 0.038968\nvn -0.9955 -0.0006 -0.0945\nv -0.010402 -0.057414 0.038997\nvn -0.9955 -0.0006 -0.0945\nv -0.010498 -0.050668 0.039959\nvn -0.9955 -0.0006 -0.0945\nv -0.010498 -0.050668 0.039959\nvn -0.9999 0 0.0161\nv -0.010464 -0.060754 0.042026\nvn -0.9999 0 0.0161\nv -0.010464 -0.048072 0.042026\nvn -0.9999 0 0.0161\nv -0.010405 -0.058387 0.039803\nvn -0.9992 -0.0112 -0.0384\nv -0.010464 -0.060754 0.042026\nvn -0.9992 -0.0112 -0.0384\nv -0.010498 -0.050668 0.039959\nvn -0.9992 -0.0112 -0.0384\nv -0.010405 -0.058387 0.039803\nvn -0.9936 -0.0632 -0.0936\nv -0.010256 -0.060798 0.039847\nvn -0.9936 -0.0632 -0.0936\nv -0.010464 -0.060754 0.042026\nvn -0.9936 -0.0632 -0.0936\nv -0.010464 -0.060754 0.042026\nvn -0.9989 0 0.0467\nv -0.010391 -0.066304 0.043603\nvn -0.9984 0.0008 0.056\nv -0.010464 -0.048072 0.042026\nvn -0.9988 0.0003 0.0498\nv -0.010366 -0.042524 0.043634\nvn -0.9983 0.0009 0.0576\nv -0.010464 -0.060754 0.042026\nvn -0.9995 -0.0205 -0.0255\nv -0.01035 -0.066263 0.041967\nvn -0.9995 -0.0205 -0.0255\nv -0.010391 -0.066304 0.043603\nvn -0.9995 -0.0205 -0.0255\nv 0.010213 -0.050281 0.039749\nvn 0.0269 0.0777 -0.9966\nv 0.006784 -0.04787 0.039845\nvn 0.0269 0.0777 -0.9966\nv 0.010339 -0.048029 0.039929\nvn 0.0269 0.0777 -0.9966\nv 0.010213 -0.050281 0.039749\nvn -0.0001 0.0394 -0.9992\nv -0.01021 -0.050258 0.039752\nvn -0.0002 0.0401 -0.9992\nv 0.006784 -0.04787 0.039845\nvn -0.0004 0.0418 -0.9991\nv -0.006688 -0.047826 0.039854\nvn -0.0005 0.0427 -0.9991\nv -0.01021 -0.050258 0.039752\nvn -0.0247 0.0776 -0.9967\nv -0.010338 -0.048029 0.039929\nvn -0.0247 0.0776 -0.9967\nv -0.006688 -0.047826 0.039854\nvn -0.0247 0.0776 -0.9967\nv -0.005033 -0.045965 0.039892\nvn -0.0124 0.0006 -0.9999\nv -0.004875 -0.042588 0.039892\nvn -0.0124 0.0006 -0.9999\nv 0.004882 -0.046314 0.039769\nvn -0.0124 0.0006 -0.9999\nv 0.004882 -0.046314 0.039769\nvn 0.0049 0.0458 -0.9989\nv -0.004875 -0.042588 0.039892\nvn 0.0049 0.0458 -0.9989\nv 0.004875 -0.042538 0.039942\nvn 0.0049 0.0458 -0.9989\nv 0.006784 -0.04787 0.039845\nvn -0.0008 -0.0499 -0.9988\nv -0.006688 -0.047826 0.039854\nvn -0.0008 -0.0499 -0.9988\nv 0.004882 -0.046314 0.039769\nvn -0.0008 -0.0499 -0.9988\nv -0.006688 -0.047826 0.039854\nvn -0.0113 0.0305 -0.9995\nv -0.005033 -0.045965 0.039892\nvn -0.0113 0.0305 -0.9995\nv 0.004882 -0.046314 0.039769\nvn -0.0113 0.0305 -0.9995\nv 0.01035 -0.042563 0.041967\nvn 0.0146 0.9997 -0.0172\nv 0.004862 -0.042482 0.042006\nvn 0.0146 0.9997 -0.0172\nv 0.010378 -0.042535 0.043614\nvn 0.0146 0.9997 -0.0172\nv 0.004875 -0.042538 0.039942\nvn 3.30655e-18 0.9996 -0.027\nv -0.004861 -0.042482 0.042006\nvn 3.30655e-18 0.9996 -0.027\nv 0.004862 -0.042482 0.042006\nvn 3.30655e-18 0.9996 -0.027\nv -0.004875 -0.042588 0.039892\nvn -0.0049 0.9987 -0.05\nv -0.004861 -0.042482 0.042006\nvn -0.0049 0.9987 -0.05\nv 0.004875 -0.042538 0.039942\nvn -0.0049 0.9987 -0.05\nv -0.01035 -0.042563 0.041967\nvn -0.0145 0.9996 -0.0235\nv -0.010366 -0.042524 0.043634\nvn -0.0145 0.9996 -0.0235\nv -0.004861 -0.042482 0.042006\nvn -0.0145 0.9996 -0.0235\nv -0.010366 -0.042524 0.043634\nvn 0.0005 0.9995 0.0303\nv 0.010378 -0.042535 0.043614\nvn 0.0006 0.9995 0.0309\nv 0.004862 -0.042482 0.042006\nvn 0.0002 0.9996 0.0272\nv -0.004861 -0.042482 0.042006\nvn -3.14734e-18 0.9997 0.0257\nv 0.010389 -0.06628 0.043634\nvn 0.015 -0.9998 -0.0104\nv 0.004901 -0.066345 0.042006\nvn 0.015 -0.9998 -0.0104\nv 0.01035 -0.066263 0.041967\nvn 0.015 -0.9998 -0.0104\nv 0.004901 -0.066345 0.042006\nvn 0.0046 -0.999 -0.0443\nv -0.004838 -0.066298 0.039929\nvn 0.0046 -0.999 -0.0443\nv 0.004839 -0.066252 0.039882\nvn 0.0046 -0.999 -0.0443\nv -0.004913 -0.066315 0.041988\nvn -0.0031 -1 -0.0079\nv -0.004838 -0.066298 0.039929\nvn -0.0031 -1 -0.0085\nv 0.004901 -0.066345 0.042006\nvn -0.0031 -1 -0.0044\nv -0.010391 -0.066304 0.043603\nvn -0.0094 -0.9996 -0.0252\nv -0.01035 -0.066263 0.041967\nvn -0.0094 -0.9996 -0.0252\nv -0.004913 -0.066315 0.041988\nvn -0.0094 -0.9996 -0.0252\nv 0.010389 -0.06628 0.043634\nvn 0.0011 -0.9993 0.0365\nv -0.010391 -0.066304 0.043603\nvn 0.0011 -0.9993 0.0365\nv 0.004901 -0.066345 0.042006\nvn 0.0011 -0.9993 0.0365\nv -0.010391 -0.066304 0.043603\nvn -0.0031 -1 -0.0037\nv -0.00474 -0.063087 0.039775\nvn -0.0045 -0.0475 -0.9989\nv 0.004839 -0.066252 0.039882\nvn -0.0045 -0.0475 -0.9989\nv -0.004838 -0.066298 0.039929\nvn -0.0045 -0.0475 -0.9989\nv -0.00474 -0.063087 0.039775\nvn 0.0001 -0.0335 -0.9994\nv 0.004737 -0.063113 0.039777\nvn 0.0001 -0.0335 -0.9994\nv 0.004839 -0.066252 0.039882\nvn 0.0001 -0.0335 -0.9994\nv -0.010366 -0.042524 0.043634\nvn -0.0013 -0.0012 1\nv 0.010389 -0.06628 0.043634\nvn 0.0008 0.0007 1\nv 0.010378 -0.042535 0.043614\nvn 0.0009 0.0008 1\nv -0.010391 -0.066304 0.043603\nvn -0.0015 -0.0013 1\nv 0.010409 -0.051617 0.026048\nvn 0.002 0.9999 -0.0162\nv -0.010375 -0.051577 0.025994\nvn 0.0015 0.9999 -0.0154\nv 0.010398 -0.051407 0.039015\nvn -0.0013 0.9999 -0.0109\nv -0.010403 -0.051445 0.038968\nvn -0.0018 0.9999 -0.0102\nv -0.010333 -0.056215 0.02494\nvn -0.0022 -0.0072 -1\nv -0.010379 -0.052792 0.024915\nvn -0.0022 -0.0072 -1\nv 0.010328 -0.056056 0.024894\nvn -0.0022 -0.0072 -1\nv 0.010328 -0.056056 0.024894\nvn 0.0023 0.0213 -0.9998\nv -0.010379 -0.052792 0.024915\nvn 0.0023 0.0213 -0.9998\nv 0.010383 -0.052612 0.024967\nvn 0.0023 0.0213 -0.9998\nv 0.010269 -0.060763 0.039835\nvn 0.9947 -0.0542 -0.0874\nv 0.010402 -0.058212 0.039769\nvn 0.9947 -0.0542 -0.0874\nv 0.010459 -0.060803 0.042022\nvn 0.9947 -0.0542 -0.0874\nv 0.010389 -0.06628 0.043634\nvn 0.9987 0.0003 0.0509\nv 0.010459 -0.060803 0.042022\nvn 0.9992 -0.0005 0.0412\nv 0.010465 -0.048072 0.042026\nvn 0.999 -0.0002 0.0445\nv 0.010378 -0.042535 0.043614\nvn 0.9986 0.0005 0.0528\nv 0.010465 -0.048072 0.042026\nvn 0.9996 0.0206 -0.0173\nv 0.01035 -0.042563 0.041967\nvn 0.9996 0.0206 -0.0173\nv 0.010378 -0.042535 0.043614\nvn 0.9996 0.0206 -0.0173\nv 0.01035 -0.066263 0.041967\nvn 0.9995 -0.0196 -0.0235\nv 0.010459 -0.060803 0.042022\nvn 0.9995 -0.0196 -0.0235\nv 0.010389 -0.06628 0.043634\nvn 0.9995 -0.0196 -0.0235\nv 0.010498 -0.050654 0.039968\nvn 0.9965 0.0596 -0.0587\nv 0.010339 -0.048029 0.039929\nvn 0.9965 0.0596 -0.0587\nv 0.010465 -0.048072 0.042026\nvn 0.9965 0.0596 -0.0587\nv 0.010502 -0.057036 0.026053\nvn 0.9999 0.0171 0.0006\nv 0.010398 -0.051407 0.039015\nvn 0.9999 0.0172 0.0005\nv 0.010499 -0.057232 0.039037\nvn 0.9999 0.0173 0.0005\nv 0.010409 -0.051617 0.026048\nvn 0.9999 0.0171 0.0006\nv 0.010502 -0.057036 0.026053\nvn 0.9991 0.017 -0.04\nv 0.010383 -0.052612 0.024967\nvn 0.9991 0.017 -0.04\nv 0.010409 -0.051617 0.026048\nvn 0.9991 0.017 -0.04\nv 0.010328 -0.056056 0.024894\nvn 0.9873 -0.0123 -0.1584\nv 0.010383 -0.052612 0.024967\nvn 0.9873 -0.0123 -0.1584\nv 0.010502 -0.057036 0.026053\nvn 0.9873 -0.0123 -0.1584\nv 0.010499 -0.057232 0.039037\nvn 0.9929 0.0168 -0.1178\nv 0.010398 -0.051407 0.039015\nvn 0.9929 0.0168 -0.1178\nv 0.010498 -0.050654 0.039968\nvn 0.9929 0.0168 -0.1178\nv 0.010402 -0.058212 0.039769\nvn 0.9937 -0.0156 0.1108\nv 0.010499 -0.057232 0.039037\nvn 0.9937 -0.0156 0.1108\nv 0.010498 -0.050654 0.039968\nvn 0.9937 -0.0156 0.1108\nv 0.010459 -0.060803 0.042022\nvn 0.9999 -0.0005 0.0167\nv 0.010498 -0.050654 0.039968\nvn 0.9999 -0.0005 0.0167\nv 0.010465 -0.048072 0.042026\nvn 0.9999 -0.0005 0.0167\nv 0.010459 -0.060803 0.042022\nvn 0.9992 -0.0117 -0.0387\nv 0.010402 -0.058212 0.039769\nvn 0.9992 -0.0117 -0.0387\nv 0.010498 -0.050654 0.039968\nvn 0.9992 -0.0117 -0.0387\nv 0.01035 -0.066263 0.041967\nvn 0.0452 0.0092 -0.9989\nv 0.007073 -0.061006 0.041867\nvn 0.0452 0.0092 -0.9989\nv 0.010459 -0.060803 0.042022\nvn 0.0452 0.0092 -0.9989\nv 0.005207 -0.062541 0.041867\nvn 0.0103 -0.0126 -0.9999\nv 0.007073 -0.061006 0.041867\nvn 0.0103 -0.0126 -0.9999\nv 0.01035 -0.066263 0.041967\nvn 0.0103 -0.0126 -0.9999\nv 0.004901 -0.066345 0.042006\nvn -0.0067 -0.0361 -0.9993\nv 0.005207 -0.062541 0.041867\nvn -0.0067 -0.0361 -0.9993\nv 0.01035 -0.066263 0.041967\nvn -0.0067 -0.0361 -0.9993\nv 0.005031 -0.063349 0.040066\nvn 0.9141 -0.3957 0.0881\nv 0.005556 -0.062134 0.040067\nvn 0.9141 -0.3957 0.0881\nv 0.005207 -0.062541 0.041867\nvn 0.9141 -0.3957 0.0881\nv 0.005207 -0.062541 0.041867\nvn 0.6351 -0.7719 -0.0286\nv 0.006974 -0.061021 0.040068\nvn 0.6351 -0.7719 -0.0286\nv 0.007073 -0.061006 0.041867\nvn 0.6351 -0.7719 -0.0286\nv 0.005556 -0.062134 0.040067\nvn 0.6167 -0.7851 -0.0578\nv 0.006974 -0.061021 0.040068\nvn 0.6167 -0.7851 -0.0578\nv 0.005207 -0.062541 0.041867\nvn 0.6167 -0.7851 -0.0578\nv 0.004839 -0.066252 0.039882\nvn 0.9974 -0.0639 -0.0319\nv 0.005031 -0.063349 0.040066\nvn 0.9974 -0.0639 -0.0319\nv 0.004901 -0.066345 0.042006\nvn 0.9974 -0.0639 -0.0319\nv 0.004901 -0.066345 0.042006\nvn 0.9948 -0.0822 -0.0603\nv 0.005031 -0.063349 0.040066\nvn 0.9948 -0.0822 -0.0603\nv 0.005207 -0.062541 0.041867\nvn 0.9948 -0.0822 -0.0603\nv 0.006974 -0.061021 0.040068\nvn 0.0597 -0.9982 0.0048\nv 0.010459 -0.060803 0.042022\nvn 0.0597 -0.9982 0.0048\nv 0.007073 -0.061006 0.041867\nvn 0.0597 -0.9982 0.0048\nv 0.006974 -0.061021 0.040068\nvn 0.0761 -0.9968 -0.0246\nv 0.010269 -0.060763 0.039835\nvn 0.0761 -0.9968 -0.0246\nv 0.010459 -0.060803 0.042022\nvn 0.0761 -0.9968 -0.0246\nv 0.005151 -0.046139 0.041867\nvn -0.0065 0.0373 -0.9993\nv 0.004862 -0.042482 0.042006\nvn -0.0065 0.0373 -0.9993\nv 0.01035 -0.042563 0.041967\nvn -0.0065 0.0373 -0.9993\nv 0.006993 -0.047813 0.041867\nvn 0.045 -0.0097 -0.9989\nv 0.01035 -0.042563 0.041967\nvn 0.045 -0.0097 -0.9989\nv 0.010465 -0.048072 0.042026\nvn 0.045 -0.0097 -0.9989\nv 0.006993 -0.047813 0.041867\nvn 0.011 0.012 -0.9999\nv 0.005151 -0.046139 0.041867\nvn 0.011 0.012 -0.9999\nv 0.01035 -0.042563 0.041967\nvn 0.011 0.012 -0.9999\nv 0.006993 -0.047813 0.041867\nvn 0.67 0.7369 -0.0901\nv 0.006784 -0.04787 0.039845\nvn 0.67 0.7369 -0.0901\nv 0.005151 -0.046139 0.041867\nvn 0.67 0.7369 -0.0901\nv 0.006784 -0.04787 0.039845\nvn 0.756 0.6526 0.0516\nv 0.005121 -0.045962 0.040073\nvn 0.756 0.6526 0.0516\nv 0.005151 -0.046139 0.041867\nvn 0.756 0.6526 0.0516\nv 0.010339 -0.048029 0.039929\nvn 0.0737 0.9972 0.0162\nv 0.006993 -0.047813 0.041867\nvn 0.0737 0.9972 0.0162\nv 0.010465 -0.048072 0.042026\nvn 0.0737 0.9972 0.0162\nv 0.010339 -0.048029 0.039929\nvn 0.0452 0.9984 -0.033\nv 0.006784 -0.04787 0.039845\nvn 0.0452 0.9984 -0.033\nv 0.006993 -0.047813 0.041867\nvn 0.0452 0.9984 -0.033\nv 0.005121 -0.045962 0.040073\nvn 0.9974 0.0713 -0.0097\nv 0.004875 -0.042538 0.039942\nvn 0.9974 0.0713 -0.0097\nv 0.005151 -0.046139 0.041867\nvn 0.9974 0.0713 -0.0097\nv 0.005151 -0.046139 0.041867\nvn 0.9969 0.0788 0.0044\nv 0.004875 -0.042538 0.039942\nvn 0.9969 0.0788 0.0044\nv 0.004862 -0.042482 0.042006\nvn 0.9969 0.0788 0.0044\nv -0.01035 -0.066263 0.041967\nvn -0.0465 0.0097 -0.9989\nv -0.010464 -0.060754 0.042026\nvn -0.0465 0.0097 -0.9989\nv -0.007105 -0.060991 0.041867\nvn -0.0465 0.0097 -0.9989\nv -0.01035 -0.066263 0.041967\nvn 0.0036 -0.0318 -0.9995\nv -0.005206 -0.062541 0.041867\nvn 0.0036 -0.0318 -0.9995\nv -0.004913 -0.066315 0.041988\nvn 0.0036 -0.0318 -0.9995\nv -0.01035 -0.066263 0.041967\nvn -0.0103 -0.0126 -0.9999\nv -0.007105 -0.060991 0.041867\nvn -0.0103 -0.0126 -0.9999\nv -0.005206 -0.062541 0.041867\nvn -0.0103 -0.0126 -0.9999\nv -0.007105 -0.060991 0.041867\nvn -0.632 -0.7742 -0.0333\nv -0.006963 -0.06103 0.040078\nvn -0.632 -0.7742 -0.0333\nv -0.005206 -0.062541 0.041867\nvn -0.632 -0.7742 -0.0333\nv -0.006963 -0.06103 0.040078\nvn -0.6165 -0.7852 -0.0579\nv -0.005556 -0.062134 0.040067\nvn -0.6165 -0.7852 -0.0579\nv -0.005206 -0.062541 0.041867\nvn -0.6165 -0.7852 -0.0579\nv -0.005556 -0.062134 0.040067\nvn -0.9135 -0.3972 0.0877\nv -0.005031 -0.06334 0.040064\nvn -0.9135 -0.3972 0.0877\nv -0.005206 -0.062541 0.041867\nvn -0.9135 -0.3972 0.0877\nv -0.010256 -0.060798 0.039847\nvn -0.0711 -0.9974 0.0154\nv -0.006963 -0.06103 0.040078\nvn -0.0714 -0.9973 0.0158\nv -0.007105 -0.060991 0.041867\nvn -0.0699 -0.9975 0.0136\nv -0.010464 -0.060754 0.042026\nvn -0.0698 -0.9975 0.0132\nv -0.005031 -0.06334 0.040064\nvn -0.9973 -0.0635 -0.0369\nv -0.004838 -0.066298 0.039929\nvn -0.9973 -0.0635 -0.0369\nv -0.004913 -0.066315 0.041988\nvn -0.9973 -0.0635 -0.0369\nv -0.005031 -0.06334 0.040064\nvn -0.995 -0.0791 -0.0611\nv -0.004913 -0.066315 0.041988\nvn -0.995 -0.0791 -0.0611\nv -0.005206 -0.062541 0.041867\nvn -0.995 -0.0791 -0.0611\nv -0.01035 -0.042563 0.041967\nvn 0.0064 0.0434 -0.999\nv -0.004861 -0.042482 0.042006\nvn 0.0064 0.0434 -0.999\nv -0.005051 -0.045645 0.041867\nvn 0.0064 0.0434 -0.999\nv -0.007155 -0.047844 0.041867\nvn 1.22465e-16 0 -1\nv -0.005051 -0.045645 0.041867\nvn 1.22465e-16 0 -1\nv -0.005778 -0.046963 0.041867\nvn 1.22465e-16 0 -1\nv -0.007155 -0.047844 0.041867\nvn -0.0121 0.0116 -0.9999\nv -0.01035 -0.042563 0.041967\nvn -0.0121 0.0116 -0.9999\nv -0.005051 -0.045645 0.041867\nvn -0.0121 0.0116 -0.9999\nv -0.010464 -0.048072 0.042026\nvn -0.0473 -0.0097 -0.9988\nv -0.01035 -0.042563 0.041967\nvn -0.0473 -0.0097 -0.9988\nv -0.007155 -0.047844 0.041867\nvn -0.0473 -0.0097 -0.9988\nv -0.005051 -0.045645 0.041867\nvn -0.8725 0.481 -0.0859\nv -0.005033 -0.045965 0.039892\nvn -0.8725 0.481 -0.0859\nv -0.005778 -0.046963 0.041867\nvn -0.8725 0.481 -0.0859\nv -0.005033 -0.045965 0.039892\nvn -0.7467 0.663 0.0535\nv -0.006688 -0.047826 0.039854\nvn -0.7467 0.663 0.0535\nv -0.005778 -0.046963 0.041867\nvn -0.7467 0.663 0.0535\nv -0.005778 -0.046963 0.041867\nvn -0.5349 0.8368 -0.1167\nv -0.006688 -0.047826 0.039854\nvn -0.5349 0.8368 -0.1167\nv -0.007155 -0.047844 0.041867\nvn -0.5349 0.8368 -0.1167\nv -0.004875 -0.042588 0.039892\nvn -0.9988 0.0469 -0.0167\nv -0.005033 -0.045965 0.039892\nvn -0.9988 0.0469 -0.0167\nv -0.005051 -0.045645 0.041867\nvn -0.9988 0.0469 -0.0167\nv -0.004875 -0.042588 0.039892\nvn -0.9982 0.0598 0.0034\nv -0.005051 -0.045645 0.041867\nvn -0.9982 0.0598 0.0034\nv -0.004861 -0.042482 0.042006\nvn -0.9982 0.0598 0.0034\nv -0.007155 -0.047844 0.041867\nvn -0.0681 0.9975 0.0166\nv -0.010338 -0.048029 0.039929\nvn -0.0681 0.9975 0.0166\nv -0.010464 -0.048072 0.042026\nvn -0.0681 0.9975 0.0166\nv -0.006688 -0.047826 0.039854\nvn -0.0556 0.9984 -0.004\nv -0.010338 -0.048029 0.039929\nvn -0.0556 0.9984 -0.004\nv -0.007155 -0.047844 0.041867\nvn -0.0556 0.9984 -0.004\nv 0.010398 -0.051407 0.039015\nvn 0.0009 0.5466 -0.8374\nv -0.010403 -0.051445 0.038968\nvn 0.0008 0.5478 -0.8366\nv 0.010213 -0.050281 0.039749\nvn 0.0006 0.5497 -0.8353\nv -0.01021 -0.050258 0.039752\nvn 0.0005 0.551 -0.8345\nv -0.010405 -0.058387 0.039803\nvn 0.0041 -0.6375 -0.7704\nv -0.010402 -0.057414 0.038997\nvn 0.0041 -0.6375 -0.7704\nv 0.010402 -0.058212 0.039769\nvn 0.0041 -0.6375 -0.7704\nv 0.010402 -0.058212 0.039769\nvn -0.0105 -0.8229 -0.5681\nv -0.010402 -0.057414 0.038997\nvn -0.0105 -0.8229 -0.5681\nv 0.010206 -0.057442 0.038657\nvn -0.0105 -0.8229 -0.5681\nv 0.010198 -0.057334 0.025997\nvn -0.0025 -0.7107 -0.7035\nv -0.010194 -0.05735 0.026086\nvn -0.0025 -0.7107 -0.7035\nv -0.010333 -0.056215 0.02494\nvn -0.0025 -0.7107 -0.7035\nv 0.010328 -0.056056 0.024894\nvn 0.0033 -0.6536 -0.7568\nv 0.010198 -0.057334 0.025997\nvn 0.0033 -0.6536 -0.7568\nv -0.010333 -0.056215 0.02494\nvn 0.0033 -0.6536 -0.7568\nv 0.010383 -0.052612 0.024967\nvn -0.0039 0.664 -0.7477\nv -0.010379 -0.052792 0.024915\nvn -0.0039 0.664 -0.7477\nv -0.010375 -0.051577 0.025994\nvn -0.0039 0.664 -0.7477\nv 0.010409 -0.051617 0.026048\nvn 0.0032 0.7358 -0.6771\nv 0.010383 -0.052612 0.024967\nvn 0.0032 0.7358 -0.6771\nv -0.010375 -0.051577 0.025994\nvn 0.0032 0.7358 -0.6771\nv -0.006963 -0.06103 0.040078\nvn -0.0167 -0.8152 -0.579\nv -0.010256 -0.060798 0.039847\nvn -0.0167 -0.8152 -0.579\nv -0.006566 -0.060819 0.03977\nvn -0.0167 -0.8152 -0.579\nv -0.006963 -0.06103 0.040078\nvn -0.3737 -0.468 -0.8008\nv -0.006566 -0.060819 0.03977\nvn -0.3737 -0.468 -0.8008\nv -0.005556 -0.062134 0.040067\nvn -0.3737 -0.468 -0.8008\nv -0.006566 -0.060819 0.03977\nvn -0.7725 -0.6222 -0.1272\nv -0.00474 -0.063087 0.039775\nvn -0.7725 -0.6222 -0.1272\nv -0.005556 -0.062134 0.040067\nvn -0.7725 -0.6222 -0.1272\nv -0.005556 -0.062134 0.040067\nvn -0.5668 -0.2445 -0.7867\nv -0.00474 -0.063087 0.039775\nvn -0.5668 -0.2445 -0.7867\nv -0.005031 -0.06334 0.040064\nvn -0.5668 -0.2445 -0.7867\nv -0.004838 -0.066298 0.039929\nvn -0.6982 -0.0129 -0.7157\nv -0.005031 -0.06334 0.040064\nvn -0.6982 -0.0129 -0.7157\nv -0.00474 -0.063087 0.039775\nvn -0.6982 -0.0129 -0.7157\nv -0.010307 -0.059704 0.039767\nvn -0.9592 -0.0643 -0.2751\nv -0.010256 -0.060798 0.039847\nvn -0.9592 -0.0643 -0.2751\nv -0.010405 -0.058387 0.039803\nvn -0.9592 -0.0643 -0.2751\nv -0.010194 -0.05735 0.026086\nvn -0.7147 -0.6993 -0.0122\nv -0.010328 -0.057411 0.037455\nvn -0.7147 -0.6993 -0.0122\nv -0.010501 -0.057036 0.026053\nvn -0.7147 -0.6993 -0.0122\nv -0.010328 -0.057411 0.037455\nvn -0.4392 -0.8981 -0.0229\nv -0.010402 -0.057414 0.038997\nvn -0.4392 -0.8981 -0.0229\nv -0.010501 -0.057036 0.026053\nvn -0.4392 -0.8981 -0.0229\nv -0.010333 -0.056215 0.02494\nvn -0.5722 -0.6165 -0.5409\nv -0.010194 -0.05735 0.026086\nvn -0.5722 -0.6165 -0.5409\nv -0.010501 -0.057036 0.026053\nvn -0.5722 -0.6165 -0.5409\nv 0.004839 -0.066252 0.039882\nvn 0.701 -0.0011 -0.7132\nv 0.004737 -0.063113 0.039777\nvn 0.701 -0.0011 -0.7132\nv 0.005031 -0.063349 0.040066\nvn 0.701 -0.0011 -0.7132\nv 0.005031 -0.063349 0.040066\nvn 0.5716 -0.2472 -0.7824\nv 0.004737 -0.063113 0.039777\nvn 0.5716 -0.2472 -0.7824\nv 0.005556 -0.062134 0.040067\nvn 0.5716 -0.2472 -0.7824\nv 0.004737 -0.063113 0.039777\nvn 0.776 -0.6251 -0.0842\nv 0.006603 -0.060795 0.03977\nvn 0.776 -0.6251 -0.0842\nv 0.005556 -0.062134 0.040067\nvn 0.776 -0.6251 -0.0842\nv 0.005556 -0.062134 0.040067\nvn 0.3657 -0.4646 -0.8065\nv 0.006603 -0.060795 0.03977\nvn 0.3657 -0.4646 -0.8065\nv 0.006974 -0.061021 0.040068\nvn 0.3657 -0.4646 -0.8065\nv 0.006603 -0.060795 0.03977\nvn 0.0179 -0.787 -0.6167\nv 0.010269 -0.060763 0.039835\nvn 0.0179 -0.787 -0.6167\nv 0.006974 -0.061021 0.040068\nvn 0.0179 -0.787 -0.6167\nv -0.010403 -0.051445 0.038968\nvn -0.8352 0.3911 -0.3865\nv -0.010498 -0.050668 0.039959\nvn -0.8352 0.3911 -0.3865\nv -0.01021 -0.050258 0.039752\nvn -0.8352 0.3911 -0.3865\nv 0.010402 -0.058212 0.039769\nvn 0.8709 -0.058 -0.488\nv 0.010269 -0.060763 0.039835\nvn 0.8709 -0.058 -0.488\nv 0.010303 -0.059675 0.039767\nvn 0.8709 -0.058 -0.488\nv -0.010338 -0.048029 0.039929\nvn -0.609 0.0278 -0.7927\nv -0.01021 -0.050258 0.039752\nvn -0.609 0.0278 -0.7927\nv -0.010498 -0.050668 0.039959\nvn -0.609 0.0278 -0.7927\nv 0.010206 -0.057442 0.038657\nvn 0.8206 -0.3921 -0.4157\nv 0.010499 -0.057232 0.039037\nvn 0.8206 -0.3921 -0.4157\nv 0.010402 -0.058212 0.039769\nvn 0.8206 -0.3921 -0.4157\nv 0.010338 -0.057411 0.037419\nvn 0.5498 -0.8344 0.0372\nv 0.010499 -0.057232 0.039037\nvn 0.5498 -0.8344 0.0372\nv 0.010206 -0.057442 0.038657\nvn 0.5498 -0.8344 0.0372\nv 0.010502 -0.057036 0.026053\nvn 0.7022 -0.7118 -0.0133\nv 0.010338 -0.057411 0.037419\nvn 0.7022 -0.7118 -0.0133\nv 0.010198 -0.057334 0.025997\nvn 0.7022 -0.7118 -0.0133\nv 0.010502 -0.057036 0.026053\nvn 0.7825 -0.6226 -0.0093\nv 0.010499 -0.057232 0.039037\nvn 0.7825 -0.6226 -0.0093\nv 0.010338 -0.057411 0.037419\nvn 0.7825 -0.6226 -0.0093\nv 0.010198 -0.057334 0.025997\nvn 0.6339 -0.5412 -0.5524\nv 0.010328 -0.056056 0.024894\nvn 0.6339 -0.5412 -0.5524\nv 0.010502 -0.057036 0.026053\nvn 0.6339 -0.5412 -0.5524\nv 0.010213 -0.050281 0.039749\nvn 0.8253 0.3976 -0.4011\nv 0.010498 -0.050654 0.039968\nvn 0.8253 0.3976 -0.4011\nv 0.010398 -0.051407 0.039015\nvn 0.8253 0.3976 -0.4011\nv 0.010339 -0.048029 0.039929\nvn 0.6291 0.0265 -0.7769\nv 0.010498 -0.050654 0.039968\nvn 0.6291 0.0265 -0.7769\nv 0.010213 -0.050281 0.039749\nvn 0.6291 0.0265 -0.7769\nv 0.004882 -0.046314 0.039769\nvn 0.7685 0.0307 -0.6391\nv 0.004875 -0.042538 0.039942\nvn 0.7685 0.0307 -0.6391\nv 0.005121 -0.045962 0.040073\nvn 0.7685 0.0307 -0.6391\nv 0.006784 -0.04787 0.039845\nvn 0.3895 0.4363 -0.8111\nv 0.004882 -0.046314 0.039769\nvn 0.3895 0.4363 -0.8111\nv 0.005121 -0.045962 0.040073\nvn 0.3895 0.4363 -0.8111\nv -0.006566 -0.060819 0.03977\nvn -0.0031 0.0001 1\nv -0.010293 -0.063166 0.039758\nvn -0.0031 0.0001 1\nv -0.00474 -0.063087 0.039775\nvn -0.0031 0.0001 1\nv -0.006566 -0.060819 0.03977\nvn 0.0207 -0.0378 0.9991\nv -0.010256 -0.060798 0.039847\nvn 0.0207 -0.0378 0.9991\nv -0.010293 -0.063166 0.039758\nvn 0.0207 -0.0378 0.9991\nv -0.008802 -0.055652 0.007842\nvn -0.0003 -0.8681 -0.4963\nv 0.008804 -0.055668 0.007858\nvn 0.001 -0.8688 -0.4952\nv -0.010389 -0.06522 0.024579\nvn 0.001 -0.8688 -0.4952\nv 0.0104 -0.065253 0.02473\nvn 0.0022 -0.8694 -0.4941\nv -0.008802 -0.055652 0.007842\nvn 0.0006 -0.0721 -0.9974\nv 0.008747 -0.054412 0.007763\nvn 0.0002 -0.067 -0.9978\nv 0.008804 -0.055668 0.007858\nvn 0.0008 -0.0753 -0.9972\nv -0.008749 -0.054412 0.007762\nvn 1.2222e-16 -0.0637 -0.998\nv -0.00533 -0.054302 -0.010043\nvn -0.0873 -0.9911 -0.1008\nv -0.008657 -0.054413 -0.006065\nvn -0.0873 -0.9911 -0.1008\nv -0.007802 -0.054238 -0.008524\nvn -0.0873 -0.9911 -0.1008\nv 0.0048 -0.054331 -0.010065\nvn -0.0025 -0.9996 -0.0289\nv -0.008657 -0.054413 -0.006065\nvn -0.0013 -0.9997 -0.025\nv -0.00533 -0.054302 -0.010043\nvn -0.003 -0.9995 -0.0305\nv 0.008538 -0.054414 -0.006767\nvn -0.001 -0.9997 -0.024\nv 0.008747 -0.054412 0.007763\nvn -2.44929e-20 -1 0.0002\nv -0.008749 -0.054412 0.007762\nvn -1.22465e-20 -1 0.0001\nv 0.008538 -0.054414 -0.006767\nvn -1.22465e-20 -1 0.0001\nv -0.008657 -0.054413 -0.006065\nvn -1.22465e-20 -1 0.0001\nv 0.008538 -0.054414 -0.006767\nvn 0.0508 -0.9953 -0.0826\nv 0.0048 -0.054331 -0.010065\nvn 0.0508 -0.9953 -0.0826\nv 0.006547 -0.054291 -0.009479\nvn 0.0508 -0.9953 -0.0826\nv -0.00533 -0.054302 -0.010043\nvn -0.0021 -0.0053 -1\nv 0.005532 -0.049717 -0.010091\nvn -0.0021 -0.0053 -1\nv 0.0048 -0.054331 -0.010065\nvn -0.0021 -0.0053 -1\nv -0.005468 -0.049491 -0.00998\nvn -0.0098 0.0128 -0.9999\nv 0.005532 -0.049717 -0.010091\nvn -0.0098 0.0128 -0.9999\nv -0.00533 -0.054302 -0.010043\nvn -0.0098 0.0128 -0.9999\nv -0.008779 -0.049461 -0.006351\nvn -0.0003 0.9999 -0.0161\nv -0.002569 -0.049414 -0.003529\nvn -0.0003 0.9999 -0.0161\nv -0.007084 -0.049504 -0.009054\nvn -0.0003 0.9999 -0.0161\nv -0.007084 -0.049504 -0.009054\nvn -0.012 0.9999 -0.0065\nv -0.002569 -0.049414 -0.003529\nvn -0.0095 0.9999 -0.0076\nv -0.005468 -0.049491 -0.00998\nvn -0.0043 0.9999 -0.0092\nv -0.0009 -0.049423 -0.0046\nvn -0.0012 1 -0.0014\nv -0.008779 -0.049461 -0.006351\nvn -0.0077 1 0.0012\nv -0.003461 -0.049426 -0.001688\nvn 0.0001 1 0.0012\nv -0.002569 -0.049414 -0.003529\nvn -0.0086 1 0.0022\nv 0.005491 -0.049412 -0.009791\nvn -0.0017 1 0.0002\nv -0.008745 -0.049414 0.007763\nvn 0.0026 1 0.0018\nv -0.003062 -0.049426 0.000275996\nvn -0.0024 1 -0.0035\nv 0.00121 -0.049422 -0.004438\nvn -0.0012 1 0.0008\nv 0.002354 -0.04942 -0.003769\nvn -0.0017 1 0.0004\nv -0.001954 -0.049418 0.001611\nvn -0.0025 1 -0.0034\nv 0.005491 -0.049412 -0.009791\nvn 0.0407 0.9989 0.0225\nv 0.002354 -0.04942 -0.003769\nvn 0.0407 0.9989 0.0225\nv 0.007738 -0.049533 -0.008478\nvn 0.0407 0.9989 0.0225\nv 0.002354 -0.04942 -0.003769\nvn 0.008 0.9999 -0.0138\nv 0.008802 -0.049508 -0.006436\nvn 0.0108 0.9999 -0.0069\nv 0.007738 -0.049533 -0.008478\nvn 0.0071 0.9998 -0.0159\nv 0.000144 -0.049433 0.002256\nvn 0.0009 1 0.0062\nv 0.003367 -0.04942 -0.002029\nvn 0.011 0.9999 -0.0065\nv 0.003168 -0.049425 -5.0022e-06\nvn -0.0005 1 -0.0011\nv 0.008749 -0.049414 0.007762\nvn -0.0036 1 0.002\nv 0.003367 -0.04942 -0.002029\nvn -0.0047 1 0.002\nv 0.001943 -0.049422 0.001573\nvn -0.0001 1 -0.0013\nv 0.008749 -0.049414 0.007762\nvn 0.0109 0.9999 -0.0066\nv -0.008745 -0.049414 0.007763\nvn 1.21534e-16 0.123 -0.9924\nv 0.00901 -0.048125 0.007922\nvn 1.21534e-16 0.123 -0.9924\nv 0.008749 -0.049414 0.007762\nvn 1.21534e-16 0.123 -0.9924\nv -0.009015 -0.048044 0.008025\nvn -0.0048 0.1872 -0.9823\nv 0.00901 -0.048125 0.007922\nvn -0.0048 0.1872 -0.9823\nv -0.008745 -0.049414 0.007763\nvn -0.0048 0.1872 -0.9823\nv -0.010193 -0.057399 0.024516\nvn -0.0028 0.8686 0.4956\nv 0.008962 -0.048021 0.008188\nvn -0.0055 0.8699 0.4933\nv -0.009015 -0.048044 0.008025\nvn -0.0056 0.8699 0.4931\nv 0.010188 -0.057393 0.024514\nvn -0.0002 0.8673 0.4979\nv -0.010194 -0.05735 0.026086\nvn -0.0009 0.9995 -0.0313\nv 0.010198 -0.057334 0.025997\nvn -0.0008 0.9994 -0.0335\nv -0.010193 -0.057399 0.024516\nvn -0.0005 0.9993 -0.0372\nv 0.010188 -0.057393 0.024514\nvn -0.0003 0.9992 -0.0394\nv 0.010338 -0.057411 0.037419\nvn 0.9927 0.1198 -0.0113\nv 0.010188 -0.057393 0.024514\nvn 0.9927 0.1198 -0.0113\nv 0.010198 -0.057334 0.025997\nvn 0.9927 0.1198 -0.0113\nv -0.010193 -0.057399 0.024516\nvn -0.9565 0.2916 -0.0098\nv -0.010328 -0.057411 0.037455\nvn -0.9565 0.2916 -0.0098\nv -0.010194 -0.05735 0.026086\nvn -0.9565 0.2916 -0.0098\nv -0.010389 -0.06522 0.024579\nvn -0.0015 -1 -0.0065\nv 0.0104 -0.065253 0.02473\nvn -0.0011 -1 -0.0057\nv -0.010362 -0.065305 0.037623\nvn 0.0016 -1 -0.0014\nv 0.010382 -0.065262 0.037648\nvn 0.0021 -1 -0.0006\nv 0.010269 -0.060763 0.039835\nvn -0.0175 -0.0323 0.9993\nv 0.006603 -0.060795 0.03977\nvn -0.0175 -0.0323 0.9993\nv 0.010294 -0.063166 0.039758\nvn -0.0175 -0.0323 0.9993\nv 0.010294 -0.063166 0.039758\nvn 0.0034 0.0003 1\nv 0.006603 -0.060795 0.03977\nvn 0.0034 0.0003 1\nv 0.004737 -0.063113 0.039777\nvn 0.0034 0.0003 1\nv 0.010338 -0.057411 0.037419\nvn 1 0.0057 0.0015\nv 0.010382 -0.065262 0.037648\nvn 1 0.0057 0.0015\nv 0.0104 -0.065253 0.02473\nvn 1 0.0057 0.0015\nv 0.010338 -0.057411 0.037419\nvn 0.9999 -0.01 0.0112\nv 0.0104 -0.065253 0.02473\nvn 0.9999 -0.01 0.0112\nv 0.01048 -0.057678 0.024443\nvn 0.9999 -0.01 0.0112\nv 0.010303 -0.059675 0.039767\nvn 0.999 -0.0027 0.0444\nv 0.010294 -0.063166 0.039758\nvn 0.999 -0.0027 0.0444\nv 0.010382 -0.065262 0.037648\nvn 0.999 -0.0027 0.0444\nv 0.010303 -0.059675 0.039767\nvn 0.9998 0.0062 0.0209\nv 0.010382 -0.065262 0.037648\nvn 0.9998 0.0062 0.0209\nv 0.010338 -0.057411 0.037419\nvn 0.9998 0.0062 0.0209\nv -0.010362 -0.065305 0.037623\nvn -0.9999 0.0045 0.0113\nv -0.010328 -0.057411 0.037455\nvn -0.9999 0.0045 0.013\nv -0.010389 -0.06522 0.024579\nvn -1 0.0043 0.0021\nv -0.010389 -0.06522 0.024579\nvn -0.9999 -0.0117 0.0118\nv -0.010328 -0.057411 0.037455\nvn -0.9999 -0.0117 0.0118\nv -0.010479 -0.057678 0.024443\nvn -0.9999 -0.0117 0.0118\nv -0.010293 -0.063166 0.039758\nvn -0.9993 -0.0041 0.0363\nv -0.010307 -0.059704 0.039767\nvn -0.9993 -0.0041 0.0363\nv -0.010362 -0.065305 0.037623\nvn -0.9993 -0.0041 0.0363\nv -0.010307 -0.059704 0.039767\nvn -0.9999 0.0045 0.0138\nv -0.010479 -0.057678 0.024443\nvn -0.996 -0.0135 -0.0884\nv -0.009055 -0.055468 0.008059\nvn -0.996 -0.0135 -0.0884\nv -0.010389 -0.06522 0.024579\nvn -0.996 -0.0135 -0.0884\nv -0.010479 -0.057678 0.024443\nvn -0.9963 0.005 -0.0859\nv -0.009015 -0.048044 0.008025\nvn -0.9963 0.005 -0.0859\nv -0.009055 -0.055468 0.008059\nvn -0.9963 0.005 -0.0859\nv -0.009055 -0.054105 0.008039\nvn 0.1556 0.0012 0.9878\nv -0.009015 -0.048044 0.008025\nvn 0.1556 0.0012 0.9878\nv -0.009049 -0.049712 0.008032\nvn 0.1556 0.0012 0.9878\nv -0.009055 -0.054105 0.008039\nvn -0.8822 0.0069 0.4709\nv -0.009055 -0.055468 0.008059\nvn -0.8822 0.0069 0.4709\nv -0.009015 -0.048044 0.008025\nvn -0.8822 0.0069 0.4709\nv -0.009049 -0.049712 0.008032\nvn -0.9992 0.0351 -0.0181\nv -0.008779 -0.049461 -0.006351\nvn -0.9992 0.0351 -0.0181\nv -0.008945 -0.05411 -0.006193\nvn -0.9992 0.0351 -0.0181\nv -0.009049 -0.049712 0.008032\nvn -1 0.0014 -0.0077\nv -0.008945 -0.05411 -0.006193\nvn -1 0.0014 -0.0077\nv -0.009055 -0.054105 0.008039\nvn -1 0.0014 -0.0077\nv 0.008973 -0.054113 -0.005914\nvn 1 0.0014 -0.006\nv 0.00905 -0.049716 0.008031\nvn 1 0.0014 -0.006\nv 0.009056 -0.054109 0.00804\nvn 1 0.0014 -0.006\nv 0.008802 -0.049508 -0.006436\nvn 0.9992 0.0352 -0.0166\nv 0.00905 -0.049716 0.008031\nvn 0.9992 0.0352 -0.0166\nv 0.008973 -0.054113 -0.005914\nvn 0.9992 0.0352 -0.0166\nv 0.008962 -0.048021 0.008188\nvn 0.9862 0.036 0.1616\nv 0.00905 -0.049716 0.008031\nvn 0.9862 0.036 0.1616\nv 0.00901 -0.048125 0.007922\nvn 0.9862 0.036 0.1616\nv 0.009056 -0.055468 0.008059\nvn 0.9268 0.0052 0.3756\nv 0.009056 -0.054109 0.00804\nvn 0.9268 0.0052 0.3756\nv 0.008962 -0.048021 0.008188\nvn 0.9268 0.0052 0.3756\nv 0.008962 -0.048021 0.008188\nvn 0.8829 0.0022 0.4696\nv 0.009056 -0.054109 0.00804\nvn 0.8829 0.0022 0.4696\nv 0.00905 -0.049716 0.008031\nvn 0.8829 0.0022 0.4696\nv 0.009056 -0.055468 0.008059\nvn 0.996 -0.0138 -0.0884\nv 0.01048 -0.057678 0.024443\nvn 0.996 -0.0138 -0.0884\nv 0.0104 -0.065253 0.02473\nvn 0.996 -0.0138 -0.0884\nv 0.008962 -0.048021 0.008188\nvn 0.9963 0.014 -0.0847\nv 0.01048 -0.057678 0.024443\nvn 0.9963 0.014 -0.0847\nv 0.009056 -0.055468 0.008059\nvn 0.9963 0.014 -0.0847\nv 0.010303 -0.059675 0.039767\nvn -0.001 0.7099 0.7043\nv -0.010328 -0.057411 0.037455\nvn -0.001 0.7099 0.7043\nv -0.010307 -0.059704 0.039767\nvn -0.001 0.7099 0.7043\nv 0.010338 -0.057411 0.037419\nvn 0.0012 0.7198 0.6942\nv -0.010328 -0.057411 0.037455\nvn 0.0012 0.7198 0.6942\nv 0.010303 -0.059675 0.039767\nvn 0.0012 0.7198 0.6942\nv 0.010294 -0.063166 0.039758\nvn -0.0043 -0.7094 0.7048\nv 0.004737 -0.063113 0.039777\nvn -0.0032 -0.7079 0.7063\nv 0.010382 -0.065262 0.037648\nvn -0.0002 -0.7039 0.7103\nv -0.00474 -0.063087 0.039775\nvn -0.002 -0.6939 0.7201\nv -0.010362 -0.065305 0.037623\nvn -0.002 -0.6939 0.7201\nv 0.004737 -0.063113 0.039777\nvn -0.002 -0.6939 0.7201\nv -0.010362 -0.065305 0.037623\nvn 0.0006 -0.703 0.7112\nv -0.00474 -0.063087 0.039775\nvn 0.0078 -0.7066 0.7076\nv -0.010293 -0.063166 0.039758\nvn 0.0078 -0.7066 0.7076\nv -0.010362 -0.065305 0.037623\nvn 0.0078 -0.7066 0.7076\nv -0.005468 -0.049491 -0.00998\nvn -0.5237 -0.0038 -0.8519\nv -0.00533 -0.054302 -0.010043\nvn -0.5237 -0.0038 -0.8519\nv -0.007802 -0.054238 -0.008524\nvn -0.5237 -0.0038 -0.8519\nv -0.007084 -0.049504 -0.009054\nvn -0.4968 -0.0219 -0.8676\nv -0.005468 -0.049491 -0.00998\nvn -0.4968 -0.0219 -0.8676\nv -0.007802 -0.054238 -0.008524\nvn -0.4968 -0.0219 -0.8676\nv -0.008395 -0.049713 -0.007694\nvn -0.7222 0.0321 -0.6909\nv -0.007084 -0.049504 -0.009054\nvn -0.7222 0.0321 -0.6909\nv -0.007802 -0.054238 -0.008524\nvn -0.7222 0.0321 -0.6909\nv -0.008395 -0.049713 -0.007694\nvn -0.8979 -0.0372 -0.4385\nv -0.007802 -0.054238 -0.008524\nvn -0.8979 -0.0372 -0.4385\nv -0.008945 -0.05411 -0.006193\nvn -0.8979 -0.0372 -0.4385\nv -0.008779 -0.049461 -0.006351\nvn -0.9598 0.0248 -0.2795\nv -0.008395 -0.049713 -0.007694\nvn -0.9598 0.0248 -0.2795\nv -0.008945 -0.05411 -0.006193\nvn -0.9598 0.0248 -0.2795\nv 0.008802 -0.049508 -0.006436\nvn 0.9417 -0.0032 -0.3365\nv 0.008973 -0.054113 -0.005914\nvn 0.9417 -0.0032 -0.3365\nv 0.008197 -0.054115 -0.008086\nvn 0.9417 -0.0032 -0.3365\nv 0.007738 -0.049533 -0.008478\nvn 0.8855 0.0492 -0.4621\nv 0.008802 -0.049508 -0.006436\nvn 0.8855 0.0492 -0.4621\nv 0.008197 -0.054115 -0.008086\nvn 0.8855 0.0492 -0.4621\nv 0.007738 -0.049533 -0.008478\nvn 0.6451 -0.0007 -0.7641\nv 0.008197 -0.054115 -0.008086\nvn 0.6451 -0.0007 -0.7641\nv 0.006547 -0.054291 -0.009479\nvn 0.6451 -0.0007 -0.7641\nv 0.005532 -0.049717 -0.010091\nvn 0.5888 0.0226 -0.808\nv 0.007738 -0.049533 -0.008478\nvn 0.5888 0.0226 -0.808\nv 0.006547 -0.054291 -0.009479\nvn 0.5888 0.0226 -0.808\nv 0.005532 -0.049717 -0.010091\nvn 0.3185 -0.0559 -0.9463\nv 0.006547 -0.054291 -0.009479\nvn 0.3185 -0.0559 -0.9463\nv 0.0048 -0.054331 -0.010065\nvn 0.3185 -0.0559 -0.9463\nv 0.008749 -0.049414 0.007762\nvn 0.6455 -0.0361 -0.7629\nv 0.00901 -0.048125 0.007922\nvn 0.6455 -0.0361 -0.7629\nv 0.00905 -0.049716 0.008031\nvn 0.6455 -0.0361 -0.7629\nv 0.008962 -0.048021 0.008188\nvn 0.7021 0.639 0.3141\nv 0.010188 -0.057393 0.024514\nvn 0.7021 0.639 0.3141\nv 0.01048 -0.057678 0.024443\nvn 0.7021 0.639 0.3141\nv 0.008802 -0.049508 -0.006436\nvn 0.7093 0.7049 -0.002\nv 0.008749 -0.049414 0.007762\nvn 0.7093 0.7049 -0.002\nv 0.00905 -0.049716 0.008031\nvn 0.7093 0.7049 -0.002\nv 0.007738 -0.049533 -0.008478\nvn 0.4014 0.6693 -0.6252\nv 0.005532 -0.049717 -0.010091\nvn 0.4014 0.6693 -0.6252\nv 0.005491 -0.049412 -0.009791\nvn 0.4014 0.6693 -0.6252\nv 0.005532 -0.049717 -0.010091\nvn 0.0073 0.7019 -0.7123\nv -0.005468 -0.049491 -0.00998\nvn 0.0073 0.7019 -0.7123\nv 0.005491 -0.049412 -0.009791\nvn 0.0073 0.7019 -0.7123\nv -0.008395 -0.049713 -0.007694\nvn -0.4307 0.8567 -0.2837\nv -0.008779 -0.049461 -0.006351\nvn -0.4307 0.8567 -0.2837\nv -0.007084 -0.049504 -0.009054\nvn -0.4307 0.8567 -0.2837\nv 0.010188 -0.057393 0.024514\nvn 0.6988 0.7153 -0.0071\nv 0.010338 -0.057411 0.037419\nvn 0.6988 0.7153 -0.0071\nv 0.01048 -0.057678 0.024443\nvn 0.6988 0.7153 -0.0071\nv -0.008745 -0.049414 0.007763\nvn -0.6998 0.7143 -0.0007\nv -0.008779 -0.049461 -0.006351\nvn -0.6998 0.7143 -0.0007\nv -0.009049 -0.049712 0.008032\nvn -0.6998 0.7143 -0.0007\nv 0.010303 -0.059675 0.039767\nvn 0.9143 -0.0034 0.405\nv 0.010269 -0.060763 0.039835\nvn 0.9143 -0.0034 0.405\nv 0.010294 -0.063166 0.039758\nvn 0.9143 -0.0034 0.405\nv -0.009015 -0.048044 0.008025\nvn -0.6694 0.0104 -0.7428\nv -0.008745 -0.049414 0.007763\nvn -0.6694 0.0104 -0.7428\nv -0.009049 -0.049712 0.008032\nvn -0.6694 0.0104 -0.7428\nv -0.010193 -0.057399 0.024516\nvn -0.7016 0.6401 0.3131\nv -0.009015 -0.048044 0.008025\nvn -0.7016 0.6401 0.3131\nv -0.010479 -0.057678 0.024443\nvn -0.7016 0.6401 0.3131\nv 0.0104 -0.065253 0.02473\nvn 0.7415 -0.5508 -0.3831\nv 0.008804 -0.055668 0.007858\nvn 0.7415 -0.5508 -0.3831\nv 0.009056 -0.055468 0.008059\nvn 0.7415 -0.5508 -0.3831\nv -0.010479 -0.057678 0.024443\nvn -0.6961 0.7179 -0.0067\nv -0.010328 -0.057411 0.037455\nvn -0.6961 0.7179 -0.0067\nv -0.010193 -0.057399 0.024516\nvn -0.6961 0.7179 -0.0067\nv 0.009056 -0.055468 0.008059\nvn 0.6727 -0.0104 -0.7399\nv 0.008747 -0.054412 0.007763\nvn 0.6727 -0.0104 -0.7399\nv 0.009056 -0.054109 0.00804\nvn 0.6727 -0.0104 -0.7399\nv 0.008804 -0.055668 0.007858\nvn 0.6373 -0.0292 -0.77\nv 0.008747 -0.054412 0.007763\nvn 0.6373 -0.0292 -0.77\nv 0.009056 -0.055468 0.008059\nvn 0.6373 -0.0292 -0.77\nv -0.010307 -0.059704 0.039767\nvn -0.8729 -0.0047 0.488\nv -0.010293 -0.063166 0.039758\nvn -0.8729 -0.0047 0.488\nv -0.010256 -0.060798 0.039847\nvn -0.8729 -0.0047 0.488\nv 0.008747 -0.054412 0.007763\nvn 0.5791 -0.8152 -0.0082\nv 0.008538 -0.054414 -0.006767\nvn 0.5791 -0.8152 -0.0082\nv 0.008973 -0.054113 -0.005914\nvn 0.5791 -0.8152 -0.0082\nv 0.008747 -0.054412 0.007763\nvn 0.701 -0.7131 -0.0039\nv 0.008973 -0.054113 -0.005914\nvn 0.701 -0.7131 -0.0039\nv 0.009056 -0.054109 0.00804\nvn 0.701 -0.7131 -0.0039\nv 0.008197 -0.054115 -0.008086\nvn 0.8712 -0.3798 -0.311\nv 0.008973 -0.054113 -0.005914\nvn 0.8712 -0.3798 -0.311\nv 0.008538 -0.054414 -0.006767\nvn 0.8712 -0.3798 -0.311\nv 0.008197 -0.054115 -0.008086\nvn 0.3404 -0.8942 -0.2906\nv 0.008538 -0.054414 -0.006767\nvn 0.3404 -0.8942 -0.2906\nv 0.006547 -0.054291 -0.009479\nvn 0.3404 -0.8942 -0.2906\nv -0.008945 -0.05411 -0.006193\nvn -0.6369 -0.7211 -0.2727\nv -0.007802 -0.054238 -0.008524\nvn -0.6369 -0.7211 -0.2727\nv -0.008657 -0.054413 -0.006065\nvn -0.6369 -0.7211 -0.2727\nv -0.008657 -0.054413 -0.006065\nvn -0.71 -0.7042 -0.0047\nv -0.008749 -0.054412 0.007762\nvn -0.71 -0.7042 -0.0047\nv -0.009055 -0.054105 0.008039\nvn -0.71 -0.7042 -0.0047\nv -0.008657 -0.054413 -0.006065\nvn -0.7233 -0.6905 -0.0053\nv -0.009055 -0.054105 0.008039\nvn -0.7233 -0.6905 -0.0053\nv -0.008945 -0.05411 -0.006193\nvn -0.7233 -0.6905 -0.0053\nv -0.008802 -0.055652 0.007842\nvn -0.7359 -0.5554 -0.3873\nv -0.010389 -0.06522 0.024579\nvn -0.7359 -0.5554 -0.3873\nv -0.009055 -0.055468 0.008059\nvn -0.7359 -0.5554 -0.3873\nv -0.008749 -0.054412 0.007762\nvn -0.6753 -0.011 -0.7374\nv -0.009055 -0.055468 0.008059\nvn -0.6753 -0.011 -0.7374\nv -0.009055 -0.054105 0.008039\nvn -0.6753 -0.011 -0.7374\nv -0.008749 -0.054412 0.007762\nvn -0.6596 -0.0194 -0.7514\nv -0.008802 -0.055652 0.007842\nvn -0.6596 -0.0194 -0.7514\nv -0.009055 -0.055468 0.008059\nvn -0.6596 -0.0194 -0.7514\nv 0.003367 -0.04942 -0.002029\nvn -0.7152 0.6956 -0.0688\nv -2e-06 -0.052805 -0.001227\nvn -0.7152 0.6956 -0.0688\nv 0.003168 -0.049425 -5.0022e-06\nvn -0.7152 0.6956 -0.0688\nv 0.001943 -0.049422 0.001573\nvn -0.5688 0.6933 -0.4424\nv 0.003168 -0.049425 -5.0022e-06\nvn -0.5688 0.6933 -0.4424\nv -2e-06 -0.052805 -0.001227\nvn -0.5688 0.6933 -0.4424\nv -0.003062 -0.049426 0.000275996\nvn 0.7013 0.6985 -0.1423\nv -2e-06 -0.052805 -0.001227\nvn 0.7013 0.6985 -0.1423\nv -0.003461 -0.049426 -0.001688\nvn 0.7013 0.6985 -0.1423\nv -0.003062 -0.049426 0.000275996\nvn 0.5474 0.6999 -0.4589\nv -0.001954 -0.049418 0.001611\nvn 0.5474 0.6999 -0.4589\nv -2e-06 -0.052805 -0.001227\nvn 0.5474 0.6999 -0.4589\nv -0.001954 -0.049418 0.001611\nvn 0.2154 0.6971 -0.6839\nv 0.000144 -0.049433 0.002256\nvn 0.2154 0.6971 -0.6839\nv -2e-06 -0.052805 -0.001227\nvn 0.2154 0.6971 -0.6839\nv 0.000144 -0.049433 0.002256\nvn -0.2573 0.6997 -0.6665\nv 0.001943 -0.049422 0.001573\nvn -0.2573 0.6997 -0.6665\nv -2e-06 -0.052805 -0.001227\nvn -0.2573 0.6997 -0.6665\nv 0.00901 -0.048125 0.007922\nvn 0.0021 0.9315 -0.3638\nv -0.009015 -0.048044 0.008025\nvn 0.0021 0.9315 -0.3638\nv 0.008962 -0.048021 0.008188\nvn 0.0021 0.9315 -0.3638\nv -0.009823 -0.057502 0.032659\nvn 0.8815 0.0793 -0.4655\nv -0.00897 -0.057535 0.034269\nvn 0.8815 0.0793 -0.4655\nv -0.009829 -0.060413 0.032153\nvn 0.8815 0.0793 -0.4655\nv -0.009829 -0.060413 0.032153\nvn 0.873 0.0918 -0.479\nv -0.00897 -0.057535 0.034269\nvn 0.873 0.0918 -0.479\nv -0.008382 -0.060413 0.034789\nvn 0.873 0.0918 -0.479\nv -0.005245 -0.060413 0.028051\nvn 0.0429 0.016 0.999\nv -0.005419 -0.057719 0.028015\nvn 0.0429 0.016 0.999\nv -0.006987 -0.060413 0.028125\nvn 0.0429 0.016 0.999\nv -0.005419 -0.057719 0.028015\nvn 0.1344 -0.0376 0.9902\nv -0.007581 -0.057713 0.028308\nvn 0.1344 -0.0376 0.9902\nv -0.006987 -0.060413 0.028125\nvn 0.1344 -0.0376 0.9902\nv -0.00897 -0.057535 0.034269\nvn 0.5741 -0.0306 -0.8182\nv -0.007903 -0.057713 0.035025\nvn 0.5741 -0.0306 -0.8182\nv -0.008382 -0.060413 0.034789\nvn 0.5741 -0.0306 -0.8182\nv -0.006987 -0.060413 0.028125\nvn 0.509 0.0537 0.8591\nv -0.007581 -0.057713 0.028308\nvn 0.509 0.0537 0.8591\nv -0.008937 -0.060413 0.029281\nvn 0.509 0.0537 0.8591\nv -0.008382 -0.060413 0.034789\nvn 0.3076 0.0193 -0.9513\nv -0.006166 -0.057719 0.03556\nvn 0.3076 0.0193 -0.9513\nv -0.006 -0.060413 0.035559\nvn 0.3076 0.0193 -0.9513\nv -0.007903 -0.057713 0.035025\nvn 0.2946 0.031 -0.9551\nv -0.006166 -0.057719 0.03556\nvn 0.2946 0.031 -0.9551\nv -0.008382 -0.060413 0.034789\nvn 0.2946 0.031 -0.9551\nv -0.007581 -0.057713 0.028308\nvn 0.6375 -0.0432 0.7692\nv -0.00901 -0.057713 0.029493\nvn 0.6375 -0.0432 0.7692\nv -0.008937 -0.060413 0.029281\nvn 0.6375 -0.0432 0.7692\nv -0.00901 -0.057713 0.029493\nvn 0.9089 -0.0081 0.417\nv -0.009712 -0.057718 0.031024\nvn 0.9089 -0.0081 0.417\nv -0.008937 -0.060413 0.029281\nvn 0.9089 -0.0081 0.417\nv -0.008937 -0.060413 0.029281\nvn 0.9517 0.0828 0.2955\nv -0.009712 -0.057718 0.031024\nvn 0.9517 0.0828 0.2955\nv -0.009829 -0.060413 0.032153\nvn 0.9517 0.0828 0.2955\nv -0.009712 -0.057718 0.031024\nvn 0.9975 -0.0139 0.0694\nv -0.009823 -0.057502 0.032659\nvn 0.9975 -0.0139 0.0694\nv -0.009829 -0.060413 0.032153\nvn 0.9975 -0.0139 0.0694\nv -0.007581 -0.057713 0.028308\nvn 0.3853 0.7972 0.4647\nv -0.008164 -0.057414 0.028278\nvn 0.3853 0.7972 0.4647\nv -0.00901 -0.057713 0.029493\nvn 0.3853 0.7972 0.4647\nv -0.008164 -0.057414 0.028278\nvn 0.6791 0.446 0.5829\nv -0.009805 -0.057414 0.030191\nvn 0.6791 0.446 0.5829\nv -0.00901 -0.057713 0.029493\nvn 0.6791 0.446 0.5829\nv -0.00216 -0.057714 0.031977\nvn -0.4735 0.8707 0.1332\nv -0.001917 -0.057415 0.030887\nvn -0.4735 0.8707 0.1332\nv -0.002761 -0.057713 0.029831\nvn -0.4735 0.8707 0.1332\nv -0.00901 -0.057713 0.029493\nvn 0.5196 0.8197 0.2411\nv -0.009805 -0.057414 0.030191\nvn 0.5196 0.8197 0.2411\nv -0.009712 -0.057718 0.031024\nvn 0.5196 0.8197 0.2411\nv -0.002761 -0.057713 0.029831\nvn -0.4938 0.7455 0.4476\nv -0.003453 -0.057413 0.028569\nvn -0.4938 0.7455 0.4476\nv -0.003756 -0.057713 0.028734\nvn -0.4938 0.7455 0.4476\nv -0.001917 -0.057415 0.030887\nvn -0.773 0.3741 0.5124\nv -0.003453 -0.057413 0.028569\nvn -0.773 0.3741 0.5124\nv -0.002761 -0.057713 0.029831\nvn -0.773 0.3741 0.5124\nv -0.009805 -0.057414 0.030191\nvn 0.9405 0.3393 0.019\nv -0.009823 -0.057502 0.032659\nvn 0.9405 0.3393 0.019\nv -0.009712 -0.057718 0.031024\nvn 0.9405 0.3393 0.019\nv -0.003756 -0.057713 0.028734\nvn -0.2958 0.6722 0.6787\nv -0.003453 -0.057413 0.028569\nvn -0.2958 0.6722 0.6787\nv -0.005419 -0.057719 0.028015\nvn -0.2958 0.6722 0.6787\nv -0.003453 -0.057413 0.028569\nvn -0.3007 0.6192 0.7254\nv -0.005659 -0.057414 0.027655\nvn -0.3007 0.6192 0.7254\nv -0.005419 -0.057719 0.028015\nvn -0.3007 0.6192 0.7254\nv -0.005419 -0.057719 0.028015\nvn 0.0851 0.7874 0.6106\nv -0.005659 -0.057414 0.027655\nvn 0.0851 0.7874 0.6106\nv -0.007581 -0.057713 0.028308\nvn 0.0851 0.7874 0.6106\nv -0.005659 -0.057414 0.027655\nvn 0.21 0.4943 0.8436\nv -0.008164 -0.057414 0.028278\nvn 0.21 0.4943 0.8436\nv -0.007581 -0.057713 0.028308\nvn 0.21 0.4943 0.8436\nv -0.007442 -0.057414 0.035611\nvn -0.0002 -1 -0.0001\nv -0.003453 -0.057413 0.028569\nvn -0.0007 -1 -0.0001\nv -0.0048 -0.057414 0.035723\nvn -0.0002 -1 -0.0002\nv -0.002534 -0.057414 0.034006\nvn -0.0011 -1 -1.34711e-19\nv -0.005659 -0.057414 0.027655\nvn 0.0002 -1 0.0001\nv -0.001917 -0.057415 0.030887\nvn -0.0015 -1 0.0001\nv -0.009805 -0.057414 0.030191\nvn -0.0418 -0.9985 -0.036\nv -0.008164 -0.057414 0.028278\nvn -0.0418 -0.9985 -0.036\nv -0.009823 -0.057502 0.032659\nvn -0.0418 -0.9985 -0.036\nv -0.008164 -0.057414 0.028278\nvn -0.0057 -0.9997 -0.0224\nv -0.005659 -0.057414 0.027655\nvn -0.0029 -0.9998 -0.02\nv -0.009823 -0.057502 0.032659\nvn -0.0048 -0.9998 -0.0216\nv -0.00897 -0.057535 0.034269\nvn -0.0023 -0.9998 -0.0195\nv -0.00897 -0.057535 0.034269\nvn 0.0665 -0.9977 0.0149\nv -0.005659 -0.057414 0.027655\nvn 0.0665 -0.9977 0.0149\nv -0.007442 -0.057414 0.035611\nvn 0.0665 -0.9977 0.0149\nv -0.004241 -0.057708 0.03512\nvn -0.4831 0.6704 -0.5632\nv -0.002534 -0.057414 0.034006\nvn -0.4831 0.6704 -0.5632\nv -0.002989 -0.057713 0.034041\nvn -0.4831 0.6704 -0.5632\nv -0.0048 -0.057414 0.035723\nvn -0.5432 0.4369 -0.717\nv -0.002534 -0.057414 0.034006\nvn -0.5432 0.4369 -0.717\nv -0.004241 -0.057708 0.03512\nvn -0.5432 0.4369 -0.717\nv -0.002989 -0.057713 0.034041\nvn -0.5466 0.8079 -0.2202\nv -0.002534 -0.057414 0.034006\nvn -0.5466 0.8079 -0.2202\nv -0.00216 -0.057714 0.031977\nvn -0.5466 0.8079 -0.2202\nv -0.002534 -0.057414 0.034006\nvn -0.977 0.0903 -0.1932\nv -0.001917 -0.057415 0.030887\nvn -0.977 0.0903 -0.1932\nv -0.00216 -0.057714 0.031977\nvn -0.977 0.0903 -0.1932\nv -0.00897 -0.057535 0.034269\nvn 0.5603 0.4717 -0.6809\nv -0.007442 -0.057414 0.035611\nvn 0.5603 0.4717 -0.6809\nv -0.007903 -0.057713 0.035025\nvn 0.5603 0.4717 -0.6809\nv -0.007903 -0.057713 0.035025\nvn 0.1733 0.8155 -0.5522\nv -0.007442 -0.057414 0.035611\nvn 0.1733 0.8155 -0.5522\nv -0.006166 -0.057719 0.03556\nvn 0.1733 0.8155 -0.5522\nv -0.007442 -0.057414 0.035611\nvn 0.0399 0.3244 -0.9451\nv -0.0048 -0.057414 0.035723\nvn 0.0399 0.3244 -0.9451\nv -0.006166 -0.057719 0.03556\nvn 0.0399 0.3244 -0.9451\nv -0.006166 -0.057719 0.03556\nvn -0.1252 0.841 -0.5263\nv -0.0048 -0.057414 0.035723\nvn -0.1252 0.841 -0.5263\nv -0.004241 -0.057708 0.03512\nvn -0.1252 0.841 -0.5263\nv -0.00216 -0.057714 0.031977\nvn -0.9616 0.0523 0.2694\nv -0.002761 -0.057713 0.029831\nvn -0.9616 0.0523 0.2694\nv -0.003062 -0.060413 0.029281\nvn -0.9616 0.0523 0.2694\nv -0.002761 -0.057713 0.029831\nvn -0.7397 -0.0542 0.6707\nv -0.003756 -0.057713 0.028734\nvn -0.7397 -0.0542 0.6707\nv -0.003062 -0.060413 0.029281\nvn -0.7397 -0.0542 0.6707\nv -0.006 -0.060413 0.035559\nvn -0.3073 0.0455 -0.9505\nv -0.004241 -0.057708 0.03512\nvn -0.3073 0.0455 -0.9505\nv -0.003617 -0.060413 0.034789\nvn -0.3073 0.0455 -0.9505\nv -0.006166 -0.057719 0.03556\nvn -0.2228 -0.0134 -0.9748\nv -0.004241 -0.057708 0.03512\nvn -0.2228 -0.0134 -0.9748\nv -0.006 -0.060413 0.035559\nvn -0.2228 -0.0134 -0.9748\nv -0.003062 -0.060413 0.029281\nvn -0.4904 0.0503 0.87\nv -0.003756 -0.057713 0.028734\nvn -0.4904 0.0503 0.87\nv -0.005245 -0.060413 0.028051\nvn -0.4904 0.0503 0.87\nv -0.003756 -0.057713 0.028734\nvn -0.3967 -0.0135 0.9179\nv -0.005419 -0.057719 0.028015\nvn -0.3967 -0.0135 0.9179\nv -0.005245 -0.060413 0.028051\nvn -0.3967 -0.0135 0.9179\nv -0.004241 -0.057708 0.03512\nvn -0.652 -0.0578 -0.756\nv -0.002989 -0.057713 0.034041\nvn -0.652 -0.0578 -0.756\nv -0.003617 -0.060413 0.034789\nvn -0.652 -0.0578 -0.756\nv -0.003617 -0.060413 0.034789\nvn -0.8745 0.0705 -0.4798\nv -0.002989 -0.057713 0.034041\nvn -0.8745 0.0705 -0.4798\nv -0.002171 -0.060413 0.032153\nvn -0.8745 0.0705 -0.4798\nv -0.002989 -0.057713 0.034041\nvn -0.9278 -0.0207 -0.3726\nv -0.00216 -0.057714 0.031977\nvn -0.9278 -0.0207 -0.3726\nv -0.002171 -0.060413 0.032153\nvn -0.9278 -0.0207 -0.3726\nv -0.002171 -0.060413 0.032153\nvn -0.9548 0.023 0.2965\nv -0.00216 -0.057714 0.031977\nvn -0.9548 0.023 0.2965\nv -0.003062 -0.060413 0.029281\nvn -0.9548 0.023 0.2965\nv -0.003062 -0.060413 0.029281\nvn 0 1 0\nv -0.005245 -0.060413 0.028051\nvn 0 1 0\nv -0.006987 -0.060413 0.028125\nvn 0 1 0\nv -0.008937 -0.060413 0.029281\nvn 0 1 0\nv -0.009829 -0.060413 0.032153\nvn 0 1 0\nv -0.003617 -0.060413 0.034789\nvn 0 1 0\nv -0.008382 -0.060413 0.034789\nvn 0 1 0\nv -0.002171 -0.060413 0.032153\nvn 0 1 0\nv -0.006 -0.060413 0.035559\nvn 0 1 0\nv 0.002171 -0.060413 0.032153\nvn 0.8691 0.1314 -0.4768\nv 0.002472 -0.057538 0.033493\nvn 0.8691 0.1314 -0.4768\nv 0.003618 -0.060413 0.034789\nvn 0.8691 0.1314 -0.4768\nv 0.006755 -0.060413 0.028051\nvn 0.0429 0.016 0.999\nv 0.006581 -0.057719 0.028015\nvn 0.0429 0.016 0.999\nv 0.005013 -0.060413 0.028125\nvn 0.0429 0.016 0.999\nv 0.006581 -0.057719 0.028015\nvn 0.1344 -0.0376 0.9902\nv 0.004419 -0.057713 0.028308\nvn 0.1344 -0.0376 0.9902\nv 0.005013 -0.060413 0.028125\nvn 0.1344 -0.0376 0.9902\nv 0.002472 -0.057538 0.033493\nvn 0.6814 -0.0573 -0.7297\nv 0.004097 -0.057713 0.035025\nvn 0.6814 -0.0573 -0.7297\nv 0.003618 -0.060413 0.034789\nvn 0.6814 -0.0573 -0.7297\nv 0.005013 -0.060413 0.028125\nvn 0.509 0.0537 0.8591\nv 0.004419 -0.057713 0.028308\nvn 0.509 0.0537 0.8591\nv 0.003063 -0.060413 0.029281\nvn 0.509 0.0537 0.8591\nv 0.003618 -0.060413 0.034789\nvn 0.3076 0.0193 -0.9513\nv 0.005834 -0.057719 0.03556\nvn 0.3076 0.0193 -0.9513\nv 0.006 -0.060413 0.035559\nvn 0.3076 0.0193 -0.9513\nv 0.004097 -0.057713 0.035025\nvn 0.2946 0.031 -0.9551\nv 0.005834 -0.057719 0.03556\nvn 0.2946 0.031 -0.9551\nv 0.003618 -0.060413 0.034789\nvn 0.2946 0.031 -0.9551\nv 0.004419 -0.057713 0.028308\nvn 0.6376 -0.0432 0.7692\nv 0.00299 -0.057713 0.029493\nvn 0.6376 -0.0432 0.7692\nv 0.003063 -0.060413 0.029281\nvn 0.6376 -0.0432 0.7692\nv 0.00299 -0.057713 0.029493\nvn 0.9068 -0.0085 0.4214\nv 0.002158 -0.057603 0.031285\nvn 0.9068 -0.0085 0.4214\nv 0.003063 -0.060413 0.029281\nvn 0.9068 -0.0085 0.4214\nv 0.003063 -0.060413 0.029281\nvn 0.9506 0.0956 0.2952\nv 0.002158 -0.057603 0.031285\nvn 0.9506 0.0956 0.2952\nv 0.002171 -0.060413 0.032153\nvn 0.9506 0.0956 0.2952\nv 0.002158 -0.057603 0.031285\nvn 0.9895 -0.0384 -0.1395\nv 0.002472 -0.057538 0.033493\nvn 0.9895 -0.0384 -0.1395\nv 0.002171 -0.060413 0.032153\nvn 0.9895 -0.0384 -0.1395\nv 0.004419 -0.057713 0.028308\nvn 0.3697 0.8153 0.4458\nv 0.002779 -0.057415 0.029123\nvn 0.3697 0.8153 0.4458\nv 0.00299 -0.057713 0.029493\nvn 0.3697 0.8153 0.4458\nv 0.009967 -0.057414 0.032903\nvn -0.9627 0.2666 0.0459\nv 0.009844 -0.057414 0.030325\nvn -0.9627 0.2666 0.0459\nv 0.00984 -0.057714 0.031977\nvn -0.9627 0.2666 0.0459\nv 0.00984 -0.057714 0.031977\nvn -0.5336 0.8323 0.15\nv 0.009844 -0.057414 0.030325\nvn -0.5336 0.8323 0.15\nv 0.009239 -0.057713 0.029831\nvn -0.5336 0.8323 0.15\nv 0.00299 -0.057713 0.029493\nvn 0.6228 0.7435 0.2435\nv 0.002779 -0.057415 0.029123\nvn 0.6228 0.7435 0.2435\nv 0.002158 -0.057603 0.031285\nvn 0.6228 0.7435 0.2435\nv 0.009844 -0.057414 0.030325\nvn -0.6888 0.4257 0.5868\nv 0.008363 -0.057594 0.028717\nvn -0.6888 0.4257 0.5868\nv 0.009239 -0.057713 0.029831\nvn -0.6888 0.4257 0.5868\nv 0.008363 -0.057594 0.028717\nvn -0.3596 0.4058 0.8402\nv 0.005934 -0.057415 0.027591\nvn -0.3596 0.4058 0.8402\nv 0.006581 -0.057719 0.028015\nvn -0.3596 0.4058 0.8402\nv 0.006581 -0.057719 0.028015\nvn 0.0713 0.8588 0.5072\nv 0.005934 -0.057415 0.027591\nvn 0.0713 0.8588 0.5072\nv 0.004419 -0.057713 0.028308\nvn 0.0713 0.8588 0.5072\nv 0.005934 -0.057415 0.027591\nvn 0.4362 -0.0548 0.8982\nv 0.002779 -0.057415 0.029123\nvn 0.4362 -0.0548 0.8982\nv 0.004419 -0.057713 0.028308\nvn 0.4362 -0.0548 0.8982\nv 0.008496 -0.057414 0.035027\nvn -1.22465e-20 -1 0.0001\nv 0.009844 -0.057414 0.030325\nvn -0.0002 -1 -0.0001\nv 0.009967 -0.057414 0.032903\nvn -0.0003 -1 -0.0001\nv 0.005934 -0.057415 0.027591\nvn 0.0001 -1 0.0002\nv 0.005934 -0.057415 0.027591\nvn -0.2044 -0.934 0.2929\nv 0.008363 -0.057594 0.028717\nvn -0.2044 -0.934 0.2929\nv 0.009844 -0.057414 0.030325\nvn -0.2044 -0.934 0.2929\nv 0.002472 -0.057538 0.033493\nvn 0.097 -0.9951 -0.0212\nv 0.002779 -0.057415 0.029123\nvn 0.097 -0.9951 -0.0212\nv 0.004167 -0.057415 0.03549\nvn 0.097 -0.9951 -0.0212\nv 0.004167 -0.057415 0.03549\nvn 0.0007 -1 -0.0002\nv 0.002779 -0.057415 0.029123\nvn 0.0004 -1 4.89859e-20\nv 0.006599 -0.057413 0.035801\nvn 0.0002 -1 0.0001\nv 0.002158 -0.057603 0.031285\nvn 0.2618 -0.9651 -0.0088\nv 0.002779 -0.057415 0.029123\nvn 0.2618 -0.9651 -0.0088\nv 0.002472 -0.057538 0.033493\nvn 0.2618 -0.9651 -0.0088\nv 0.006599 -0.057413 0.035801\nvn -0.3163 0.5461 -0.7757\nv 0.008496 -0.057414 0.035027\nvn -0.3163 0.5461 -0.7757\nv 0.007759 -0.057708 0.03512\nvn -0.3163 0.5461 -0.7757\nv 0.007759 -0.057708 0.03512\nvn -0.3803 0.8111 -0.4445\nv 0.008496 -0.057414 0.035027\nvn -0.3803 0.8111 -0.4445\nv 0.009011 -0.057713 0.034041\nvn -0.3803 0.8111 -0.4445\nv 0.008496 -0.057414 0.035027\nvn -0.7461 0.4199 -0.5168\nv 0.009967 -0.057414 0.032903\nvn -0.7461 0.4199 -0.5168\nv 0.009011 -0.057713 0.034041\nvn -0.7461 0.4199 -0.5168\nv 0.009011 -0.057713 0.034041\nvn -0.5038 0.8396 -0.203\nv 0.009967 -0.057414 0.032903\nvn -0.5038 0.8396 -0.203\nv 0.00984 -0.057714 0.031977\nvn -0.5038 0.8396 -0.203\nv 0.002472 -0.057538 0.033493\nvn 0.5497 0.6635 -0.5076\nv 0.004167 -0.057415 0.03549\nvn 0.5497 0.6635 -0.5076\nv 0.004097 -0.057713 0.035025\nvn 0.5497 0.6635 -0.5076\nv 0.004097 -0.057713 0.035025\nvn 0.1725 0.8175 -0.5495\nv 0.004167 -0.057415 0.03549\nvn 0.1725 0.8175 -0.5495\nv 0.005834 -0.057719 0.03556\nvn 0.1725 0.8175 -0.5495\nv 0.004167 -0.057415 0.03549\nvn 0.1149 0.4207 -0.8999\nv 0.006599 -0.057413 0.035801\nvn 0.1149 0.4207 -0.8999\nv 0.005834 -0.057719 0.03556\nvn 0.1149 0.4207 -0.8999\nv 0.005834 -0.057719 0.03556\nvn -0.1377 0.8015 -0.5819\nv 0.006599 -0.057413 0.035801\nvn -0.1377 0.8015 -0.5819\nv 0.007759 -0.057708 0.03512\nvn -0.1377 0.8015 -0.5819\nv 0.00984 -0.057714 0.031977\nvn -0.9616 0.0523 0.2694\nv 0.009239 -0.057713 0.029831\nvn -0.9616 0.0523 0.2694\nv 0.008938 -0.060413 0.029281\nvn -0.9616 0.0523 0.2694\nv 0.009239 -0.057713 0.029831\nvn -0.7877 -0.0375 0.615\nv 0.008363 -0.057594 0.028717\nvn -0.7877 -0.0375 0.615\nv 0.008938 -0.060413 0.029281\nvn -0.7877 -0.0375 0.615\nv 0.006 -0.060413 0.035559\nvn -0.3073 0.0455 -0.9505\nv 0.007759 -0.057708 0.03512\nvn -0.3073 0.0455 -0.9505\nv 0.008383 -0.060413 0.034789\nvn -0.3073 0.0455 -0.9505\nv 0.005834 -0.057719 0.03556\nvn -0.2228 -0.0134 -0.9748\nv 0.007759 -0.057708 0.03512\nvn -0.2228 -0.0134 -0.9748\nv 0.006 -0.060413 0.035559\nvn -0.2228 -0.0134 -0.9748\nv 0.008938 -0.060413 0.029281\nvn -0.4897 0.074 0.8688\nv 0.008363 -0.057594 0.028717\nvn -0.4897 0.074 0.8688\nv 0.006755 -0.060413 0.028051\nvn -0.4897 0.074 0.8688\nv 0.008363 -0.057594 0.028717\nvn -0.3658 -0.0113 0.9306\nv 0.006581 -0.057719 0.028015\nvn -0.3658 -0.0113 0.9306\nv 0.006755 -0.060413 0.028051\nvn -0.3658 -0.0113 0.9306\nv 0.007759 -0.057708 0.03512\nvn -0.652 -0.0578 -0.756\nv 0.009011 -0.057713 0.034041\nvn -0.652 -0.0578 -0.756\nv 0.008383 -0.060413 0.034789\nvn -0.652 -0.0578 -0.756\nv 0.008383 -0.060413 0.034789\nvn -0.8745 0.0705 -0.4798\nv 0.009011 -0.057713 0.034041\nvn -0.8745 0.0705 -0.4798\nv 0.009829 -0.060413 0.032153\nvn -0.8745 0.0705 -0.4798\nv 0.009011 -0.057713 0.034041\nvn -0.9278 -0.0207 -0.3726\nv 0.00984 -0.057714 0.031977\nvn -0.9278 -0.0207 -0.3726\nv 0.009829 -0.060413 0.032153\nvn -0.9278 -0.0207 -0.3726\nv 0.009829 -0.060413 0.032153\nvn -0.9548 0.023 0.2965\nv 0.00984 -0.057714 0.031977\nvn -0.9548 0.023 0.2965\nv 0.008938 -0.060413 0.029281\nvn -0.9548 0.023 0.2965\nv 0.003618 -0.060413 0.034789\nvn 0 1 0\nv 0.003063 -0.060413 0.029281\nvn 0 1 0\nv 0.002171 -0.060413 0.032153\nvn 0 1 0\nv 0.008383 -0.060413 0.034789\nvn 0 1 0\nv 0.006755 -0.060413 0.028051\nvn 0 1 0\nv 0.005013 -0.060413 0.028125\nvn 0 1 0\nv 0.008938 -0.060413 0.029281\nvn 0 1 0\nv 0.009829 -0.060413 0.032153\nvn 0 1 0\nv 0.006 -0.060413 0.035559\nvn 0 1 0\nv -0.020178 0.015848 0.102095\nvn 0.3879 0.423 0.8189\nv -0.019167 0.014783 0.102167\nvn 0.3879 0.423 0.8189\nv -0.018875 0.014902 0.101967\nvn 0.3879 0.423 0.8189\nv -0.017817 0.020697 0.101963\nvn 0.146 -0.5167 0.8436\nv -0.018387 0.020868 0.102166\nvn 0.146 -0.5167 0.8436\nv -0.01912 0.020334 0.101966\nvn 0.146 -0.5167 0.8436\nv -0.019167 0.014783 0.102167\nvn 0.1068 0.7784 0.6186\nv -0.017393 0.014587 0.102107\nvn 0.1068 0.7784 0.6186\nv -0.018875 0.014902 0.101967\nvn 0.1068 0.7784 0.6186\nv -0.018387 0.020868 0.102166\nvn 0.5896 -0.8076 -0.0082\nv -0.020063 0.019645 0.10209\nvn 0.5896 -0.8076 -0.0082\nv -0.01912 0.020334 0.101966\nvn 0.5896 -0.8076 -0.0082\nv -0.020063 0.019645 0.10209\nvn 0.6427 -0.3249 0.6938\nv -0.020957 0.018038 0.102165\nvn 0.6427 -0.3249 0.6938\nv -0.020653 0.018215 0.101967\nvn 0.6427 -0.3249 0.6938\nv -0.020653 0.018215 0.101967\nvn 0.5374 0.0243 0.843\nv -0.020957 0.018038 0.102165\nvn 0.5374 0.0243 0.843\nv -0.020592 0.016875 0.101967\nvn 0.5374 0.0243 0.843\nv -0.020957 0.018038 0.102165\nvn 0.9028 0.3296 -0.2761\nv -0.020178 0.015848 0.102095\nvn 0.9028 0.3296 -0.2761\nv -0.020592 0.016875 0.101967\nvn 0.9028 0.3296 -0.2761\nv 0.006113 0.014557 0.103682\nvn 0.1883 0.7188 0.6692\nv 0.001612 0.015745 0.103672\nvn 0.1883 0.7188 0.6692\nv 0.002629 0.014553 0.104667\nvn 0.1883 0.7188 0.6692\nv 0.006113 0.014557 0.103682\nvn 0.2149 0.61 0.7627\nv 0.002629 0.014553 0.104667\nvn 0.2149 0.61 0.7627\nv 0.007183 0.012948 0.104667\nvn 0.2149 0.61 0.7627\nv 0.007183 0.012948 0.104667\nvn 0.3844 0.6543 0.6512\nv 0.009606 0.012529 0.103657\nvn 0.3844 0.6543 0.6512\nv 0.006113 0.014557 0.103682\nvn 0.3844 0.6543 0.6512\nv 0.009606 0.012529 0.103657\nvn 0.402 0.5354 0.7428\nv 0.007183 0.012948 0.104667\nvn 0.402 0.5354 0.7428\nv 0.01021 0.010676 0.104667\nvn 0.402 0.5354 0.7428\nv 0.01021 0.010676 0.104667\nvn 0.5258 0.5324 0.6633\nv 0.012402 0.00977 0.103656\nvn 0.5258 0.5324 0.6633\nv 0.009606 0.012529 0.103657\nvn 0.5258 0.5324 0.6633\nv 0.012402 0.00977 0.103656\nvn 0.5168 0.4158 0.7483\nv 0.01021 0.010676 0.104667\nvn 0.5168 0.4158 0.7483\nv 0.012848 0.007397 0.104667\nvn 0.5168 0.4158 0.7483\nv 0.014215 0.006838 0.103676\nvn 0.6397 0.3998 0.6565\nv 0.012402 0.00977 0.103656\nvn 0.6397 0.3998 0.6565\nv 0.012848 0.007397 0.104667\nvn 0.6397 0.3998 0.6565\nv 0.015388 0.003536 0.103667\nvn 0.651 0.2418 0.7195\nv 0.012848 0.007397 0.104667\nvn 0.651 0.2418 0.7195\nv 0.014513 0.002915 0.104667\nvn 0.651 0.2418 0.7195\nv 0.015388 0.003536 0.103667\nvn 0.6303 0.2219 0.7439\nv 0.014215 0.006838 0.103676\nvn 0.6303 0.2219 0.7439\nv 0.012848 0.007397 0.104667\nvn 0.6303 0.2219 0.7439\nv 0.014513 0.002915 0.104667\nvn 0.7261 0.0777 0.6832\nv 0.015773 -7.7e-05 0.103667\nvn 0.7261 0.0777 0.6832\nv 0.015388 0.003536 0.103667\nvn 0.7261 0.0777 0.6832\nv 0.014758 -0.000813 0.104667\nvn 0.6841 0.0451 0.728\nv 0.015773 -7.7e-05 0.103667\nvn 0.6841 0.0451 0.728\nv 0.014513 0.002915 0.104667\nvn 0.6841 0.0451 0.728\nv 0.014758 -0.000813 0.104667\nvn 0.7295 -0.0845 0.6787\nv 0.015359 -0.003655 0.103667\nvn 0.7295 -0.0845 0.6787\nv 0.015773 -7.7e-05 0.103667\nvn 0.7295 -0.0845 0.6787\nv 0.015359 -0.003655 0.103667\nvn 0.6362 -0.1329 0.76\nv 0.014758 -0.000813 0.104667\nvn 0.6362 -0.1329 0.76\nv 0.013802 -0.005392 0.104667\nvn 0.6362 -0.1329 0.76\nv 0.013802 -0.005392 0.104667\nvn 0.7237 -0.2877 0.6273\nv 0.013599 -0.008097 0.10366\nvn 0.7237 -0.2877 0.6273\nv 0.015359 -0.003655 0.103667\nvn 0.7237 -0.2877 0.6273\nv 0.011362 -0.009479 0.104667\nvn 0.5486 -0.3275 0.7693\nv 0.013599 -0.008097 0.10366\nvn 0.5486 -0.3275 0.7693\nv 0.013802 -0.005392 0.104667\nvn 0.5486 -0.3275 0.7693\nv 0.011362 -0.009479 0.104667\nvn 0.591 -0.4895 0.6411\nv 0.01067 -0.011636 0.103658\nvn 0.591 -0.4895 0.6411\nv 0.013599 -0.008097 0.10366\nvn 0.591 -0.4895 0.6411\nv 0.01067 -0.011636 0.103658\nvn 0.4253 -0.4919 0.7597\nv 0.011362 -0.009479 0.104667\nvn 0.4253 -0.4919 0.7597\nv 0.007585 -0.012745 0.104667\nvn 0.4253 -0.4919 0.7597\nv 0.007585 -0.012745 0.104667\nvn 0.4359 -0.6143 0.6577\nv 0.007468 -0.01391 0.103656\nvn 0.4359 -0.6143 0.6577\nv 0.01067 -0.011636 0.103658\nvn 0.4359 -0.6143 0.6577\nv 0.003531 -0.015407 0.103672\nvn 0.2228 -0.6203 0.7521\nv 0.007585 -0.012745 0.104667\nvn 0.2228 -0.6203 0.7521\nv 0.002376 -0.014616 0.104667\nvn 0.2228 -0.6203 0.7521\nv 0.003531 -0.015407 0.103672\nvn 0.2496 -0.6487 0.7189\nv 0.007468 -0.01391 0.103656\nvn 0.2496 -0.6487 0.7189\nv 0.007585 -0.012745 0.104667\nvn 0.2496 -0.6487 0.7189\nv 0.002376 -0.014616 0.104667\nvn 0.0716 -0.7385 0.6704\nv -5.5e-05 -0.015762 0.103664\nvn 0.0716 -0.7385 0.6704\nv 0.003531 -0.015407 0.103672\nvn 0.0716 -0.7385 0.6704\nv 0.001612 0.015745 0.103672\nvn 0.0253 0.6531 0.7569\nv -0.001753 0.014722 0.104668\nvn 0.0253 0.6531 0.7569\nv 0.002629 0.014553 0.104667\nvn 0.0253 0.6531 0.7569\nv -5.5e-05 -0.015762 0.103664\nvn 0.0079 -0.6679 0.7442\nv 0.002376 -0.014616 0.104667\nvn 0.0079 -0.6679 0.7442\nv -0.002115 -0.014669 0.104667\nvn 0.0079 -0.6679 0.7442\nv 0.004697 0.031247 0.101167\nvn 0.0246 0.7972 0.6032\nv -0.002156 0.031458 0.101167\nvn 0.0246 0.7972 0.6032\nv 0 0.030635 0.102167\nvn 0.0246 0.7972 0.6032\nv 0.004697 0.031247 0.101167\nvn 0.0935 0.5915 0.8009\nv 0 0.030635 0.102167\nvn 0.0935 0.5915 0.8009\nv 0.009214 0.029179 0.102167\nvn 0.0935 0.5915 0.8009\nv 0.012368 0.029044 0.101167\nvn 0.2219 0.7724 0.5951\nv 0.004697 0.031247 0.101167\nvn 0.2219 0.7724 0.5951\nv 0.009214 0.029179 0.102167\nvn 0.2219 0.7724 0.5951\nv 0.012368 0.029044 0.101167\nvn 0.2683 0.5827 0.7671\nv 0.009214 0.029179 0.102167\nvn 0.2683 0.5827 0.7671\nv 0.015738 0.026176 0.102167\nvn 0.2683 0.5827 0.7671\nv 0.016356 0.026984 0.101166\nvn 0.3244 0.6278 0.7075\nv 0.012368 0.029044 0.101167\nvn 0.3244 0.6278 0.7075\nv 0.015738 0.026176 0.102167\nvn 0.3244 0.6278 0.7075\nv 0.016356 0.026984 0.101166\nvn 0.412 0.5675 0.7129\nv 0.015738 0.026176 0.102167\nvn 0.412 0.5675 0.7129\nv 0.019837 0.0232 0.102167\nvn 0.412 0.5675 0.7129\nv 0.021095 0.023426 0.101167\nvn 0.4381 0.5837 0.6837\nv 0.016356 0.026984 0.101166\nvn 0.4381 0.5837 0.6837\nv 0.019837 0.0232 0.102167\nvn 0.4381 0.5837 0.6837\nv 0.021095 0.023426 0.101167\nvn 0.4942 0.476 0.7275\nv 0.019837 0.0232 0.102167\nvn 0.4931 0.4755 0.7285\nv 0.024413 0.018453 0.102167\nvn 0.4934 0.4756 0.7283\nv 0.02421 0.020191 0.101167\nvn 0.4945 0.4761 0.7271\nv 0.026834 0.016546 0.101167\nvn 0.6183 0.445 0.6478\nv 0.02421 0.020191 0.101167\nvn 0.6183 0.445 0.6478\nv 0.024413 0.018453 0.102167\nvn 0.6183 0.445 0.6478\nv 0.026834 0.016546 0.101167\nvn 0.5607 0.3088 0.7682\nv 0.024413 0.018453 0.102167\nvn 0.5607 0.3088 0.7682\nv 0.028646 0.010769 0.102167\nvn 0.5607 0.3088 0.7682\nv 0.028912 0.012564 0.101167\nvn 0.6058 0.3164 0.73\nv 0.026834 0.016546 0.101167\nvn 0.6058 0.3164 0.73\nv 0.028646 0.010769 0.102167\nvn 0.6058 0.3164 0.73\nv 0.030404 0.008328 0.101167\nvn 0.7192 0.2533 0.6469\nv 0.028912 0.012564 0.101167\nvn 0.7192 0.2533 0.6469\nv 0.028646 0.010769 0.102167\nvn 0.7192 0.2533 0.6469\nv 0.030404 0.008328 0.101167\nvn 0.6266 0.1373 0.7671\nv 0.028646 0.010769 0.102167\nvn 0.6266 0.1373 0.7671\nv 0.030524 0.002199 0.102167\nvn 0.6266 0.1373 0.7671\nv 0.031279 0.003923 0.101167\nvn 0.6672 0.1325 0.733\nv 0.030404 0.008328 0.101167\nvn 0.6672 0.1325 0.733\nv 0.030524 0.002199 0.102167\nvn 0.6672 0.1325 0.733\nv 0.03152 -0.000562 0.101167\nvn 0.7619 0.0408 0.6464\nv 0.031279 0.003923 0.101167\nvn 0.7619 0.0408 0.6464\nv 0.030524 0.002199 0.102167\nvn 0.7619 0.0408 0.6464\nv 0.03152 -0.000562 0.101167\nvn 0.641 -0.0462 0.7661\nv 0.030524 0.002199 0.102167\nvn 0.641 -0.0462 0.7661\nv 0.029893 -0.006551 0.102167\nvn 0.641 -0.0462 0.7661\nv 0.03112 -0.005035 0.101167\nvn 0.6743 -0.0603 0.7359\nv 0.03152 -0.000562 0.101167\nvn 0.6743 -0.0603 0.7359\nv 0.029893 -0.006551 0.102167\nvn 0.6743 -0.0603 0.7359\nv 0.030088 -0.009407 0.101167\nvn 0.7431 -0.1753 0.6458\nv 0.03112 -0.005035 0.101167\nvn 0.7431 -0.1753 0.6458\nv 0.029893 -0.006551 0.102167\nvn 0.7431 -0.1753 0.6458\nv 0.030088 -0.009407 0.101167\nvn 0.6029 -0.2266 0.7649\nv 0.029893 -0.006551 0.102167\nvn 0.6029 -0.2266 0.7649\nv 0.026806 -0.014764 0.102167\nvn 0.6029 -0.2266 0.7649\nv 0.028446 -0.013587 0.101167\nvn 0.6273 -0.2465 0.7388\nv 0.030088 -0.009407 0.101167\nvn 0.6273 -0.2465 0.7388\nv 0.026806 -0.014764 0.102167\nvn 0.6273 -0.2465 0.7388\nv 0.026227 -0.017491 0.101167\nvn 0.6643 -0.3776 0.6451\nv 0.028446 -0.013587 0.101167\nvn 0.6643 -0.3776 0.6451\nv 0.026806 -0.014764 0.102167\nvn 0.6643 -0.3776 0.6451\nv 0.026227 -0.017491 0.101167\nvn 0.515 -0.3893 0.7636\nv 0.026806 -0.014764 0.102167\nvn 0.515 -0.3893 0.7636\nv 0.021515 -0.021762 0.102167\nvn 0.515 -0.3893 0.7636\nv 0.023475 -0.021041 0.101167\nvn 0.5298 -0.4107 0.742\nv 0.026227 -0.017491 0.101167\nvn 0.5298 -0.4107 0.742\nv 0.021515 -0.021762 0.102167\nvn 0.5298 -0.4107 0.742\nv 0.019794 -0.024558 0.101166\nvn 0.531 -0.5562 0.6393\nv 0.023475 -0.021041 0.101167\nvn 0.531 -0.5562 0.6393\nv 0.021515 -0.021762 0.102167\nvn 0.531 -0.5562 0.6393\nv 0.019794 -0.024558 0.101166\nvn 0.3935 -0.5152 0.7614\nv 0.021515 -0.021762 0.102167\nvn 0.3935 -0.5152 0.7614\nv 0.015738 -0.026176 0.102167\nvn 0.3935 -0.5152 0.7614\nv 0.016038 -0.027187 0.101162\nvn 0.4059 -0.5806 0.7058\nv 0.019794 -0.024558 0.101166\nvn 0.4059 -0.5806 0.7058\nv 0.015738 -0.026176 0.102167\nvn 0.4059 -0.5806 0.7058\nv 0.016038 -0.027187 0.101162\nvn 0.29 -0.6298 0.7206\nv 0.015738 -0.026176 0.102167\nvn 0.29 -0.6298 0.7206\nv 0.009214 -0.029179 0.102167\nvn 0.29 -0.6298 0.7206\nv 0.008954 -0.030303 0.101167\nvn 0.2962 -0.6723 0.6784\nv 0.016038 -0.027187 0.101162\nvn 0.2962 -0.6723 0.6784\nv 0.009214 -0.029179 0.102167\nvn 0.2962 -0.6723 0.6784\nv 0.008954 -0.030303 0.101167\nvn 0.1231 -0.6755 0.727\nv 0.009214 -0.029179 0.102167\nvn 0.1231 -0.6755 0.727\nv 0.00215 -0.030467 0.102167\nvn 0.1231 -0.6755 0.727\nv 0.002155 -0.031458 0.101167\nvn 0.1198 -0.7048 0.6992\nv 0.008954 -0.030303 0.101167\nvn 0.1198 -0.7048 0.6992\nv 0.00215 -0.030467 0.102167\nvn 0.1198 -0.7048 0.6992\nv -0.020115 0.015889 0.095667\nvn 0.6242 0.7812 0.0111\nv -0.020178 0.015848 0.102095\nvn 0.6242 0.7812 0.0111\nv -0.018797 0.014836 0.095667\nvn 0.6242 0.7812 0.0111\nv -0.017389 0.020701 0.095667\nvn 0.1649 -0.9863 0.0107\nv -0.017817 0.020697 0.101963\nvn 0.1649 -0.9863 0.0107\nv -0.018879 0.020452 0.095667\nvn 0.1649 -0.9863 0.0107\nv -0.020178 0.015848 0.102095\nvn 0.5877 0.8091 -0.0012\nv -0.018875 0.014902 0.101967\nvn 0.5877 0.8091 -0.0012\nv -0.018797 0.014836 0.095667\nvn 0.5877 0.8091 -0.0012\nv -0.017817 0.020697 0.101963\nvn 0.2682 -0.9633 -0.0077\nv -0.01912 0.020334 0.101966\nvn 0.2682 -0.9633 -0.0077\nv -0.018879 0.020452 0.095667\nvn 0.2682 -0.9633 -0.0077\nv -0.018879 0.020452 0.095667\nvn 0.6072 -0.7945 0.0084\nv -0.01912 0.020334 0.101966\nvn 0.6072 -0.7945 0.0084\nv -0.020084 0.019531 0.095667\nvn 0.6072 -0.7945 0.0084\nv -0.018875 0.014902 0.101967\nvn 0.2081 0.9781 -0.0076\nv -0.017393 0.014587 0.102107\nvn 0.2081 0.9781 -0.0076\nv -0.018797 0.014836 0.095667\nvn 0.2081 0.9781 -0.0076\nv -0.018797 0.014836 0.095667\nvn 0.019 0.9992 0.0344\nv -0.017393 0.014587 0.102107\nvn 0.019 0.9992 0.0344\nv -0.016611 0.014794 0.095667\nvn 0.019 0.9992 0.0344\nv -0.01912 0.020334 0.101966\nvn 0.5914 -0.8063 0.0124\nv -0.020063 0.019645 0.10209\nvn 0.5914 -0.8063 0.0124\nv -0.020084 0.019531 0.095667\nvn 0.5914 -0.8063 0.0124\nv -0.020063 0.019645 0.10209\nvn 0.9243 -0.3816 0.0037\nv -0.020653 0.018215 0.101967\nvn 0.9243 -0.3816 0.0037\nv -0.020084 0.019531 0.095667\nvn 0.9243 -0.3816 0.0037\nv -0.020084 0.019531 0.095667\nvn 0.9437 -0.3303 0.0162\nv -0.020653 0.018215 0.101967\nvn 0.9437 -0.3303 0.0162\nv -0.020752 0.017623 0.095667\nvn 0.9437 -0.3303 0.0162\nv -0.020653 0.018215 0.101967\nvn 0.9988 0.045 -0.0199\nv -0.020592 0.016875 0.101967\nvn 0.9988 0.045 -0.0199\nv -0.020752 0.017623 0.095667\nvn 0.9988 0.045 -0.0199\nv -0.020752 0.017623 0.095667\nvn 0.9385 0.3448 0.0172\nv -0.020592 0.016875 0.101967\nvn 0.9385 0.3448 0.0172\nv -0.020115 0.015889 0.095667\nvn 0.9385 0.3448 0.0172\nv -0.020592 0.016875 0.101967\nvn 0.9268 0.3754 0.0115\nv -0.020178 0.015848 0.102095\nvn 0.9268 0.3754 0.0115\nv -0.020115 0.015889 0.095667\nvn 0.9268 0.3754 0.0115\nv 0.005659 0.014724 0.102167\nvn 0.255 0.9665 0.0295\nv 0.001612 0.015745 0.103672\nvn 0.255 0.9665 0.0295\nv 0.006113 0.014557 0.103682\nvn 0.255 0.9665 0.0295\nv 0.005659 0.014724 0.102167\nvn 0.2393 0.9708 -0.0157\nv 0.001451 0.015761 0.102167\nvn 0.2393 0.9708 -0.0157\nv 0.001612 0.015745 0.103672\nvn 0.2393 0.9708 -0.0157\nv 0.008796 0.013111 0.102167\nvn 0.4567 0.8887 -0.0396\nv 0.005659 0.014724 0.102167\nvn 0.4567 0.8887 -0.0396\nv 0.006113 0.014557 0.103682\nvn 0.4567 0.8887 -0.0396\nv 0.008796 0.013111 0.102167\nvn 0.5014 0.8628 0.0642\nv 0.006113 0.014557 0.103682\nvn 0.5014 0.8628 0.0642\nv 0.009606 0.012529 0.103657\nvn 0.5014 0.8628 0.0642\nv 0.012296 0.009966 0.102167\nvn 0.6667 0.7418 -0.073\nv 0.008796 0.013111 0.102167\nvn 0.6667 0.7418 -0.073\nv 0.009606 0.012529 0.103657\nvn 0.6667 0.7418 -0.073\nv 0.012296 0.009966 0.102167\nvn 0.7018 0.711 0.0435\nv 0.009606 0.012529 0.103657\nvn 0.7018 0.711 0.0435\nv 0.012402 0.00977 0.103656\nvn 0.7018 0.711 0.0435\nv 0.012296 0.009966 0.102167\nvn 0.8505 0.5259 0.0086\nv 0.012402 0.00977 0.103656\nvn 0.8505 0.5259 0.0086\nv 0.014215 0.006838 0.103676\nvn 0.8505 0.5259 0.0086\nv 0.015109 0.004793 0.102167\nvn 0.8715 0.474 -0.1257\nv 0.012296 0.009966 0.102167\nvn 0.8715 0.474 -0.1257\nv 0.014215 0.006838 0.103676\nvn 0.8715 0.474 -0.1257\nv 0.015109 0.004793 0.102167\nvn 0.9372 0.3326 0.1049\nv 0.014215 0.006838 0.103676\nvn 0.9372 0.3326 0.1049\nv 0.015388 0.003536 0.103667\nvn 0.9372 0.3326 0.1049\nv 0.015786 -0.000275 0.102167\nvn 0.9943 0.1062 -0.0059\nv 0.015388 0.003536 0.103667\nvn 0.9943 0.1062 -0.0059\nv 0.015773 -7.7e-05 0.103667\nvn 0.9943 0.1062 -0.0059\nv 0.015786 -0.000275 0.102167\nvn 0.9886 0.1319 -0.0729\nv 0.015109 0.004793 0.102167\nvn 0.9886 0.1319 -0.0729\nv 0.015388 0.003536 0.103667\nvn 0.9886 0.1319 -0.0729\nv 0.015786 -0.000275 0.102167\nvn 0.9931 -0.115 0.0234\nv 0.015773 -7.7e-05 0.103667\nvn 0.9931 -0.115 0.0234\nv 0.015359 -0.003655 0.103667\nvn 0.9931 -0.115 0.0234\nv 0.015042 -0.004922 0.102167\nvn 0.9847 -0.1575 -0.0749\nv 0.015786 -0.000275 0.102167\nvn 0.9847 -0.1575 -0.0749\nv 0.015359 -0.003655 0.103667\nvn 0.9847 -0.1575 -0.0749\nv 0.015042 -0.004922 0.102167\nvn 0.9235 -0.3661 0.1143\nv 0.015359 -0.003655 0.103667\nvn 0.9235 -0.3661 0.1143\nv 0.013599 -0.008097 0.10366\nvn 0.9235 -0.3661 0.1143\nv 0.012887 -0.00912 0.102167\nvn 0.8842 -0.4539 -0.1103\nv 0.015042 -0.004922 0.102167\nvn 0.8842 -0.4539 -0.1103\nv 0.013599 -0.008097 0.10366\nvn 0.8842 -0.4539 -0.1103\nv 0.012887 -0.00912 0.102167\nvn 0.7686 -0.636 0.0695\nv 0.013599 -0.008097 0.10366\nvn 0.7686 -0.636 0.0695\nv 0.01067 -0.011636 0.103658\nvn 0.7686 -0.636 0.0695\nv 0.01052 -0.011753 0.102167\nvn 0.7434 -0.6684 -0.0227\nv 0.012887 -0.00912 0.102167\nvn 0.7434 -0.6684 -0.0227\nv 0.01067 -0.011636 0.103658\nvn 0.7434 -0.6684 -0.0227\nv 0.006979 -0.014206 0.102167\nvn 0.5694 -0.822 0.0069\nv 0.01052 -0.011753 0.102167\nvn 0.5694 -0.822 0.0069\nv 0.01067 -0.011636 0.103658\nvn 0.5694 -0.822 0.0069\nv 0.006979 -0.014206 0.102167\nvn 0.5788 -0.815 -0.0284\nv 0.01067 -0.011636 0.103658\nvn 0.5788 -0.815 -0.0284\nv 0.007468 -0.01391 0.103656\nvn 0.5788 -0.815 -0.0284\nv 0.006979 -0.014206 0.102167\nvn 0.3548 -0.9324 0.0684\nv 0.007468 -0.01391 0.103656\nvn 0.3548 -0.9324 0.0684\nv 0.003531 -0.015407 0.103672\nvn 0.3548 -0.9324 0.0684\nv 0.002848 -0.015514 0.102167\nvn 0.3013 -0.951 -0.069\nv 0.006979 -0.014206 0.102167\nvn 0.3013 -0.951 -0.069\nv 0.003531 -0.015407 0.103672\nvn 0.3013 -0.951 -0.069\nv -0.001452 -0.015761 0.102167\nvn 0.0983 -0.9908 -0.0928\nv 0.003531 -0.015407 0.103672\nvn 0.0983 -0.9908 -0.0928\nv -5.5e-05 -0.015762 0.103664\nvn 0.0983 -0.9908 -0.0928\nv -0.001452 -0.015761 0.102167\nvn 0.0571 -0.9973 0.0451\nv 0.002848 -0.015514 0.102167\nvn 0.0571 -0.9973 0.0451\nv 0.003531 -0.015407 0.103672\nvn 0.0571 -0.9973 0.0451\nv 0.025913 -0.005457 0.094667\nvn 0.0353 0.9988 0.0325\nv 0.023672 -0.005378 0.094667\nvn 0.0353 0.9988 0.0325\nv 0.024053 -0.005505 0.098167\nvn 0.0353 0.9988 0.0325\nv 0.019443 7.3e-05 0.098167\nvn 0.968 -0.2506 -0.0086\nv 0.020022 0.00243 0.094667\nvn 0.968 -0.2506 -0.0086\nv 0.020086 0.002557 0.098167\nvn 0.968 -0.2506 -0.0086\nv 0.019443 -7.3e-05 0.094667\nvn 0.9742 -0.2254 0.0094\nv 0.020022 0.00243 0.094667\nvn 0.9742 -0.2254 0.0094\nv 0.019443 7.3e-05 0.098167\nvn 0.9742 -0.2254 0.0094\nv 0.023672 -0.005378 0.094667\nvn 0.4387 0.8985 -0.0149\nv 0.021575 -0.004354 0.094667\nvn 0.4327 0.9015 -0.0096\nv 0.024053 -0.005505 0.098167\nvn 0.4381 0.8988 -0.0143\nv 0.021465 -0.004265 0.098167\nvn 0.4323 0.9017 -0.0093\nv 0.020086 0.002557 0.098167\nvn 0.7699 -0.6381 -0.008\nv 0.021465 0.004265 0.094667\nvn 0.7699 -0.6381 -0.008\nv 0.021575 0.004354 0.098167\nvn 0.7699 -0.6381 -0.008\nv 0.020022 0.00243 0.094667\nvn 0.786 -0.6182 0.008\nv 0.021465 0.004265 0.094667\nvn 0.786 -0.6182 0.008\nv 0.020086 0.002557 0.098167\nvn 0.786 -0.6182 0.008\nv 0.021575 -0.004354 0.094667\nvn 0.7699 0.6381 0.008\nv 0.020086 -0.002557 0.094667\nvn 0.7699 0.6381 0.008\nv 0.021465 -0.004265 0.098167\nvn 0.7699 0.6381 0.008\nv 0.021465 -0.004265 0.098167\nvn 0.786 0.6182 -0.008\nv 0.020086 -0.002557 0.094667\nvn 0.786 0.6182 -0.008\nv 0.020022 -0.00243 0.098167\nvn 0.786 0.6182 -0.008\nv 0.021465 0.004265 0.094667\nvn 0.4859 -0.874 0.0069\nv 0.023108 0.005178 0.094667\nvn 0.4859 -0.874 0.0069\nv 0.021575 0.004354 0.098167\nvn 0.4859 -0.874 0.0069\nv 0.021575 0.004354 0.098167\nvn 0.4387 -0.8984 -0.0195\nv 0.023108 0.005178 0.094667\nvn 0.4387 -0.8984 -0.0195\nv 0.023672 0.005378 0.098167\nvn 0.4387 -0.8984 -0.0195\nv 0.023108 0.005178 0.094667\nvn 0.1948 -0.9805 0.0245\nv 0.024918 0.005538 0.094667\nvn 0.1948 -0.9805 0.0245\nv 0.023672 0.005378 0.098167\nvn 0.1948 -0.9805 0.0245\nv 0.020086 -0.002557 0.094667\nvn 0.968 0.2506 0.0086\nv 0.019443 -7.3e-05 0.094667\nvn 0.968 0.2506 0.0086\nv 0.020022 -0.00243 0.098167\nvn 0.968 0.2506 0.0086\nv 0.020022 -0.00243 0.098167\nvn 0.9742 0.2254 -0.0094\nv 0.019443 -7.3e-05 0.094667\nvn 0.9742 0.2254 -0.0094\nv 0.019443 7.3e-05 0.098167\nvn 0.9742 0.2254 -0.0094\nv 0.023672 0.005378 0.098167\nvn -0.013 -0.9987 -0.0503\nv 0.024918 0.005538 0.094667\nvn -0.013 -0.9987 -0.0503\nv 0.026696 0.005338 0.098167\nvn -0.013 -0.9987 -0.0503\nv -0.03055 -0.000479 0.094672\nvn 0.9737 -0.2175 0.0682\nv -0.029797 0.00289 0.094667\nvn 0.9737 -0.2175 0.0682\nv -0.030582 0.000471 0.098167\nvn 0.9737 -0.2175 0.0682\nv -0.030582 0.000471 0.098167\nvn 0.9099 -0.4075 -0.0775\nv -0.029797 0.00289 0.094667\nvn 0.9099 -0.4075 -0.0775\nv -0.029069 0.00385 0.098167\nvn 0.9099 -0.4075 -0.0775\nv -0.024919 -0.005538 0.094667\nvn 0.1798 0.9831 0.0353\nv -0.026959 -0.005165 0.094667\nvn 0.1798 0.9831 0.0353\nv -0.026697 -0.005338 0.098167\nvn 0.1798 0.9831 0.0353\nv -0.026959 -0.005165 0.094667\nvn 0.5523 0.8336 6.76372e-17\nv -0.029251 -0.003646 0.094667\nvn 0.5523 0.8336 6.76372e-17\nv -0.026697 -0.005338 0.098167\nvn 0.5523 0.8336 6.76372e-17\nv -0.026697 -0.005338 0.098167\nvn 0.6 0.7983 -0.0518\nv -0.029251 -0.003646 0.094667\nvn 0.6 0.7983 -0.0518\nv -0.029657 -0.003114 0.098167\nvn 0.6 0.7983 -0.0518\nv -0.029797 0.00289 0.094667\nvn 0.6819 -0.7291 0.0582\nv -0.027788 0.004768 0.094667\nvn 0.6819 -0.7291 0.0582\nv -0.029069 0.00385 0.098167\nvn 0.6819 -0.7291 0.0582\nv -0.029069 0.00385 0.098167\nvn 0.479 -0.8761 -0.0546\nv -0.027788 0.004768 0.094667\nvn 0.479 -0.8761 -0.0546\nv -0.02616 0.00544 0.098167\nvn 0.479 -0.8761 -0.0546\nv -0.027788 0.004768 0.094667\nvn 0.3447 -0.9385 0.0199\nv -0.025914 0.005457 0.094667\nvn 0.3447 -0.9385 0.0199\nv -0.02616 0.00544 0.098167\nvn 0.3447 -0.9385 0.0199\nv -0.029251 -0.003646 0.094667\nvn 0.9241 0.379 0.0496\nv -0.03055 -0.000479 0.094672\nvn 0.9241 0.379 0.0496\nv -0.029657 -0.003114 0.098167\nvn 0.9241 0.379 0.0496\nv -0.029657 -0.003114 0.098167\nvn 0.9666 0.2495 -0.0589\nv -0.03055 -0.000479 0.094672\nvn 0.9666 0.2495 -0.0589\nv -0.030582 0.000471 0.098167\nvn 0.9666 0.2495 -0.0589\nv -0.028219 0.000834 0.102167\nvn 0.8171 -0.5764 -0.0096\nv -0.028189 0.000945 0.098167\nvn 0.8171 -0.5764 -0.0096\nv -0.0269 0.002704 0.102167\nvn 0.8171 -0.5764 -0.0096\nv -0.028189 0.000945 0.098167\nvn 0.797 -0.6039 0.0089\nv -0.026809 0.002766 0.098167\nvn 0.797 -0.6039 0.0089\nv -0.0269 0.002704 0.102167\nvn 0.797 -0.6039 0.0089\nv -0.024516 -0.003313 0.102167\nvn 0.2474 0.9674 -0.0536\nv -0.025831 -0.003199 0.098167\nvn 0.2474 0.9674 -0.0536\nv -0.0269 -0.002704 0.102167\nvn 0.2474 0.9674 -0.0536\nv -0.0269 0.002704 0.102167\nvn 0.2478 -0.9688 -0.0094\nv -0.026809 0.002766 0.098167\nvn 0.2478 -0.9688 -0.0094\nv -0.024516 0.003313 0.102167\nvn 0.2478 -0.9688 -0.0094\nv -0.026809 0.002766 0.098167\nvn 0.2144 -0.9767 0.0108\nv -0.024401 0.003295 0.098167\nvn 0.2144 -0.9767 0.0108\nv -0.024516 0.003313 0.102167\nvn 0.2144 -0.9767 0.0108\nv -0.025831 -0.003199 0.098167\nvn 0.5315 0.8462 0.0374\nv -0.027471 -0.002169 0.098167\nvn 0.5315 0.8462 0.0374\nv -0.0269 -0.002704 0.102167\nvn 0.5315 0.8462 0.0374\nv -0.0269 -0.002704 0.102167\nvn 0.7912 0.6107 -0.0311\nv -0.027471 -0.002169 0.098167\nvn 0.7912 0.6107 -0.0311\nv -0.028049 -0.001215 0.102167\nvn 0.7912 0.6107 -0.0311\nv -0.027471 -0.002169 0.098167\nvn 0.8864 0.4626 0.018\nv -0.028146 -0.000874 0.098167\nvn 0.8864 0.4626 0.018\nv -0.028049 -0.001215 0.102167\nvn 0.8864 0.4626 0.018\nv -0.028049 -0.001215 0.102167\nvn 0.9964 0.0825 -0.0171\nv -0.028146 -0.000874 0.098167\nvn 0.9964 0.0825 -0.0171\nv -0.028219 0.000834 0.102167\nvn 0.9964 0.0825 -0.0171\nv -0.028146 -0.000874 0.098167\nvn 0.9997 0.0231 0.0083\nv -0.028189 0.000945 0.098167\nvn 0.9997 0.0231 0.0083\nv -0.028219 0.000834 0.102167\nvn 0.9997 0.0231 0.0083\nv 0.021926 0.001167 0.102167\nvn 0.7942 -0.6062 -0.0415\nv 0.022503 0.002196 0.098167\nvn 0.7942 -0.6062 -0.0415\nv 0.023099 0.002704 0.102167\nvn 0.7942 -0.6062 -0.0415\nv 0.026007 -0.003169 0.102167\nvn 0.0149 0.9998 -0.0156\nv 0.024294 -0.003206 0.098167\nvn 0.0149 0.9998 -0.0156\nv 0.024075 -0.00314 0.102167\nvn 0.0149 0.9998 -0.0156\nv 0.022503 0.002196 0.098167\nvn 0.4527 -0.8905 0.0455\nv 0.024697 0.003311 0.098167\nvn 0.4527 -0.8905 0.0455\nv 0.023099 0.002704 0.102167\nvn 0.4527 -0.8905 0.0455\nv 0.023099 0.002704 0.102167\nvn 0.3183 -0.9479 -0.0169\nv 0.024697 0.003311 0.098167\nvn 0.3183 -0.9479 -0.0169\nv 0.024772 0.003265 0.102167\nvn 0.3183 -0.9479 -0.0169\nv 0.024075 -0.00314 0.102167\nvn 0.5257 0.8504 -0.0216\nv 0.022919 -0.002527 0.098167\nvn 0.5257 0.8504 -0.0216\nv 0.022471 -0.002148 0.102167\nvn 0.5257 0.8504 -0.0216\nv 0.024294 -0.003206 0.098167\nvn 0.4426 0.8967 0.0095\nv 0.022919 -0.002527 0.098167\nvn 0.4426 0.8967 0.0095\nv 0.024075 -0.00314 0.102167\nvn 0.4426 0.8967 0.0095\nv 0.022919 -0.002527 0.098167\nvn 0.8004 0.5986 0.033\nv 0.021941 -0.001219 0.098167\nvn 0.8004 0.5986 0.033\nv 0.022471 -0.002148 0.102167\nvn 0.8004 0.5986 0.033\nv 0.022471 -0.002148 0.102167\nvn 0.9239 0.381 -0.0339\nv 0.021941 -0.001219 0.098167\nvn 0.9239 0.381 -0.0339\nv 0.021751 -0.000404 0.102167\nvn 0.9239 0.381 -0.0339\nv 0.021941 -0.001219 0.098167\nvn 0.993 0.1157 0.0234\nv 0.021751 0.000404 0.098167\nvn 0.993 0.1157 0.0234\nv 0.021751 -0.000404 0.102167\nvn 0.993 0.1157 0.0234\nv 0.021751 -0.000404 0.102167\nvn 0.9936 -0.1106 -0.0223\nv 0.021751 0.000404 0.098167\nvn 0.9936 -0.1106 -0.0223\nv 0.021926 0.001167 0.102167\nvn 0.9936 -0.1106 -0.0223\nv 0.021751 0.000404 0.098167\nvn 0.9217 -0.3864 0.0334\nv 0.022503 0.002196 0.098167\nvn 0.9217 -0.3864 0.0334\nv 0.021926 0.001167 0.102167\nvn 0.9217 -0.3864 0.0334\nv -0.016061 0.027196 0.101163\nvn -0.604 0.7969 0.0136\nv -0.017519 0.02619 0.095556\nvn -0.6045 0.7965 0.0142\nv -0.020726 0.023754 0.095667\nvn -0.6043 0.7966 0.0139\nv -0.021096 0.023426 0.101167\nvn -0.5993 0.8005 0.0074\nv -0.021096 0.023426 0.101167\nvn -0.7094 0.7048 -0.0057\nv -0.020726 0.023754 0.095667\nvn -0.7094 0.7048 -0.0057\nv -0.023884 0.020576 0.095667\nvn -0.7094 0.7048 -0.0057\nv -0.024211 0.020191 0.101167\nvn -0.7204 0.6935 0.0057\nv -0.021096 0.023426 0.101167\nvn -0.7204 0.6935 0.0057\nv -0.023884 0.020576 0.095667\nvn -0.7204 0.6935 0.0057\nv -0.024211 0.020191 0.101167\nvn -0.802 0.5973 -0.0059\nv -0.023884 0.020576 0.095667\nvn -0.802 0.5973 -0.0059\nv -0.026559 0.016983 0.095667\nvn -0.802 0.5973 -0.0059\nv -0.026834 0.016546 0.101167\nvn -0.8117 0.5841 0.0059\nv -0.024211 0.020191 0.101167\nvn -0.8117 0.5841 0.0059\nv -0.026559 0.016983 0.095667\nvn -0.8117 0.5841 0.0059\nv -0.026834 0.016546 0.101167\nvn -0.8786 0.4775 -0.0059\nv -0.026559 0.016983 0.095667\nvn -0.8786 0.4775 -0.0059\nv -0.028699 0.013047 0.095667\nvn -0.8786 0.4775 -0.0059\nv -0.028913 0.012564 0.101167\nvn -0.8864 0.4629 0.006\nv -0.026834 0.016546 0.101167\nvn -0.8864 0.4629 0.006\nv -0.028699 0.013047 0.095667\nvn -0.8864 0.4629 0.006\nv -0.028913 0.012564 0.101167\nvn -0.9374 0.3481 -0.006\nv -0.028699 0.013047 0.095667\nvn -0.9374 0.3481 -0.006\nv -0.030258 0.008847 0.095667\nvn -0.9374 0.3481 -0.006\nv -0.030405 0.008328 0.101167\nvn -0.9432 0.3322 0.0061\nv -0.028913 0.012564 0.101167\nvn -0.9432 0.3322 0.0061\nv -0.030258 0.008847 0.095667\nvn -0.9432 0.3322 0.0061\nv -0.030405 0.008328 0.101167\nvn -0.9773 0.2118 -0.0062\nv -0.030258 0.008847 0.095667\nvn -0.9773 0.2118 -0.0062\nv -0.031207 0.004469 0.095667\nvn -0.9773 0.2118 -0.0062\nv -0.03128 0.003923 0.101167\nvn -0.9808 0.1948 0.0063\nv -0.030405 0.008328 0.101167\nvn -0.9808 0.1948 0.0063\nv -0.031207 0.004469 0.095667\nvn -0.9808 0.1948 0.0063\nv -0.03128 0.003923 0.101167\nvn -0.9975 0.071 -0.0062\nv -0.031207 0.004469 0.095667\nvn -0.9975 0.071 -0.0062\nv -0.031525 0 0.095667\nvn -0.9975 0.071 -0.0062\nv -0.03152 -0.000562 0.101167\nvn -0.9986 0.0534 0.0064\nv -0.03128 0.003923 0.101167\nvn -0.9986 0.0534 0.0064\nv -0.031525 0 0.095667\nvn -0.9986 0.0534 0.0064\nv -0.03152 -0.000562 0.101167\nvn -0.9975 -0.071 -0.0063\nv -0.031525 0 0.095667\nvn -0.9975 -0.071 -0.0063\nv -0.031207 -0.004469 0.095667\nvn -0.9975 -0.071 -0.0063\nv -0.03112 -0.005035 0.101167\nvn -0.996 -0.089 0.0065\nv -0.03152 -0.000562 0.101167\nvn -0.996 -0.089 0.0065\nv -0.031207 -0.004469 0.095667\nvn -0.996 -0.089 0.0065\nv -0.03112 -0.005035 0.101167\nvn -0.9773 -0.2118 -0.0064\nv -0.031207 -0.004469 0.095667\nvn -0.9773 -0.2118 -0.0064\nv -0.030258 -0.008847 0.095667\nvn -0.9773 -0.2118 -0.0064\nv -0.030089 -0.009407 0.101167\nvn -0.9733 -0.2296 0.0065\nv -0.03112 -0.005035 0.101167\nvn -0.9733 -0.2296 0.0065\nv -0.030258 -0.008847 0.095667\nvn -0.9733 -0.2296 0.0065\nv -0.030089 -0.009407 0.101167\nvn -0.9374 -0.3481 -0.0066\nv -0.030258 -0.008847 0.095667\nvn -0.9374 -0.3481 -0.0066\nv -0.028699 -0.013047 0.095667\nvn -0.9374 -0.3481 -0.0066\nv -0.028447 -0.013587 0.101167\nvn -0.9307 -0.3656 0.0067\nv -0.030089 -0.009407 0.101167\nvn -0.9307 -0.3656 0.0067\nv -0.028699 -0.013047 0.095667\nvn -0.9307 -0.3656 0.0067\nv -0.028447 -0.013587 0.101167\nvn -0.8786 -0.4775 -0.0067\nv -0.028699 -0.013047 0.095667\nvn -0.8786 -0.4775 -0.0067\nv -0.026559 -0.016983 0.095667\nvn -0.8786 -0.4775 -0.0067\nv -0.026228 -0.017491 0.101167\nvn -0.8694 -0.4941 0.0068\nv -0.028447 -0.013587 0.101167\nvn -0.8694 -0.4941 0.0068\nv -0.026559 -0.016983 0.095667\nvn -0.8694 -0.4941 0.0068\nv -0.026228 -0.017491 0.101167\nvn -0.802 -0.5973 -0.0068\nv -0.026559 -0.016983 0.095667\nvn -0.802 -0.5973 -0.0068\nv -0.023884 -0.020576 0.095667\nvn -0.802 -0.5973 -0.0068\nv -0.023475 -0.021041 0.101167\nvn -0.7903 -0.6127 0.0069\nv -0.026228 -0.017491 0.101167\nvn -0.7903 -0.6127 0.0069\nv -0.023884 -0.020576 0.095667\nvn -0.7903 -0.6127 0.0069\nv -0.023475 -0.021041 0.101167\nvn -0.7094 -0.7048 -0.0069\nv -0.023884 -0.020576 0.095667\nvn -0.7094 -0.7048 -0.0069\nv -0.020726 -0.023754 0.095667\nvn -0.7094 -0.7048 -0.0069\nv -0.019796 -0.024556 0.101166\nvn -0.6907 -0.723 0.0114\nv -0.023475 -0.021041 0.101167\nvn -0.6907 -0.723 0.0114\nv -0.020726 -0.023754 0.095667\nvn -0.6907 -0.723 0.0114\nv -0.019796 -0.024556 0.101166\nvn -0.6047 -0.7963 -0.0139\nv -0.020726 -0.023754 0.095667\nvn -0.6047 -0.7963 -0.0139\nv -0.017521 -0.026186 0.095546\nvn -0.6047 -0.7963 -0.0139\nv -0.016317 -0.026981 0.101162\nvn -0.5729 -0.8196 0.0068\nv -0.019796 -0.024556 0.101166\nvn -0.5718 -0.8204 0.0065\nv -0.017521 -0.026186 0.095546\nvn -0.5722 -0.8201 0.0066\nv -0.015303 0.015388 0.102165\nvn -0.0003 0.0001 1\nv -0.010521 0.011753 0.102167\nvn -0.0002 0.0002 1\nv -0.014399 0.018038 0.102165\nvn -0.0002 0 1\nv -0.022659 -0.002287 0.102167\nvn -1.22465e-16 0 1\nv -0.01574 -0.001452 0.102167\nvn -1.22465e-16 0 1\nv -0.021767 -0.000712 0.102167\nvn -1.22465e-16 0 1\nv -0.028219 0.000834 0.102167\nvn -1.22465e-16 0 1\nv -0.0269 0.002704 0.102167\nvn -1.22465e-16 0 1\nv -0.030584 -0.0011 0.102167\nvn -1.22465e-16 0 1\nv -0.029639 0.007622 0.102167\nvn -1.22465e-16 0 1\nv 0.023099 0.002704 0.102167\nvn -1.22465e-16 0 1\nv 0.028646 0.010769 0.102167\nvn -1.22465e-16 0 1\nv 0.015109 0.004793 0.102167\nvn -1.22465e-16 0 1\nv 0.005659 0.014724 0.102167\nvn -1.22465e-16 0 1\nv 0.015738 0.026176 0.102167\nvn -1.22465e-16 0 1\nv 0.009214 0.029179 0.102167\nvn -1.22465e-16 0 1\nv 0.008796 0.013111 0.102167\nvn -1.22465e-16 0 1\nv 0.021751 -0.000404 0.102167\nvn -1.22465e-16 0 1\nv 0.021926 0.001167 0.102167\nvn -1.22465e-16 0 1\nv 0.015786 -0.000275 0.102167\nvn -1.22465e-16 0 1\nv 0.012296 0.009966 0.102167\nvn -1.22465e-16 0 1\nv 0.024413 0.018453 0.102167\nvn -1.22465e-16 0 1\nv -0.00698 0.014206 0.102167\nvn -0.0001 0 1\nv 0.019837 0.0232 0.102167\nvn -1.22465e-16 0 1\nv 0.00215 -0.030467 0.102167\nvn -1.22465e-16 0 1\nv -0.001452 -0.015761 0.102167\nvn -1.22465e-16 0 1\nv -0.005005 -0.030187 0.102167\nvn -1.22465e-16 0 1\nv -0.015858 0.020428 0.102165\nvn -1.22465e-16 -0.0002 1\nv -0.02072 0.022522 0.102167\nvn 0.0002 -0.0003 1\nv -0.018387 0.020868 0.102166\nvn 0.0002 -0.0003 1\nv -0.022161 0.001776 0.102167\nvn -1.22465e-16 0 1\nv 0.021515 -0.021762 0.102167\nvn -1.22465e-16 0 1\nv 0.026806 -0.014764 0.102167\nvn -1.22465e-16 0 1\nv 0.012887 -0.00912 0.102167\nvn -1.22465e-16 0 1\nv -0.015528 0.002858 0.102167\nvn -1.22465e-16 0 1\nv -0.024516 0.003313 0.102167\nvn -1.22465e-16 0 1\nv 0.002848 -0.015514 0.102167\nvn -1.22465e-16 0 1\nv -0.01905 -0.02395 0.102167\nvn -1.22465e-16 0 1\nv -0.010354 -0.0119 0.102167\nvn -1.22465e-16 0 1\nv -0.025061 -0.017564 0.102167\nvn -1.22465e-16 0 1\nv -0.015258 0.026441 0.102167\nvn 0.0001 -0.0003 1\nv 0.009214 -0.029179 0.102167\nvn -1.22465e-16 0 1\nv -0.002849 0.015514 0.102167\nvn -1.22465e-16 0 1\nv 0 0.030635 0.102167\nvn -1.22465e-16 0 1\nv -0.009215 0.029179 0.102167\nvn -1.22465e-16 -0.0001 1\nv 0.026007 -0.003169 0.102167\nvn -1.22465e-16 0 1\nv 0.029893 -0.006551 0.102167\nvn -1.22465e-16 0 1\nv 0.027725 -0.001848 0.102167\nvn -1.22465e-16 0 1\nv -0.013066 -0.008908 0.102167\nvn -1.22465e-16 0 1\nv 0.015042 -0.004922 0.102167\nvn -1.22465e-16 0 1\nv 0.006979 -0.014206 0.102167\nvn -1.22465e-16 0 1\nv -0.0269 -0.002704 0.102167\nvn -1.22465e-16 0 1\nv -0.028049 -0.001215 0.102167\nvn -1.22465e-16 0 1\nv -0.014492 0.00623 0.102167\nvn -1.22465e-16 0 1\nv 0.001451 0.015761 0.102167\nvn -1.22465e-16 0 1\nv -0.029015 -0.009732 0.102167\nvn -1.22465e-16 0 1\nv 0.015738 -0.026176 0.102167\nvn -1.22465e-16 0 1\nv -0.006755 -0.014314 0.102167\nvn -1.22465e-16 0 1\nv 0.030524 0.002199 0.102167\nvn -1.22465e-16 0 1\nv 0.028259 -0.000304 0.102167\nvn -0.0001 0 1\nv -0.012391 -0.027936 0.102167\nvn -1.22465e-16 0 1\nv -0.019167 0.014783 0.102167\nvn 0.0101 0.0764 0.997\nv -0.020178 0.015848 0.102095\nvn 0.0101 0.0764 0.997\nv -0.026259 0.015718 0.102167\nvn 0.0101 0.0764 0.997\nv -0.019167 0.014783 0.102167\nvn -1.22465e-16 0 1\nv -0.024516 -0.003313 0.102167\nvn -1.22465e-16 0 1\nv -0.026259 0.015718 0.102167\nvn 0.0001 -0 1\nv 0.02791 0.001608 0.102167\nvn -1.22465e-16 0 1\nv -0.020178 0.015848 0.102095\nvn 0.0124 -0.0275 0.9995\nv -0.020957 0.018038 0.102165\nvn 0.0124 -0.0275 0.9995\nv -0.026259 0.015718 0.102167\nvn 0.0124 -0.0275 0.9995\nv -0.014492 0.00623 0.102167\nvn 0.036 0.0197 0.9992\nv -0.017393 0.014587 0.102107\nvn 0.036 0.0197 0.9992\nv -0.019167 0.014783 0.102167\nvn 0.036 0.0197 0.9992\nv -0.014861 -0.00529 0.102167\nvn -1.22465e-16 0 1\nv -0.012816 0.009214 0.102167\nvn -0.008 0.0045 1\nv -0.017393 0.014587 0.102107\nvn -0.008 0.0045 1\nv -0.014492 0.00623 0.102167\nvn -0.008 0.0045 1\nv 0.01052 -0.011753 0.102167\nvn -1.22465e-16 0 1\nv -0.026259 0.015718 0.102167\nvn 0.0006 -0.0005 1\nv -0.020957 0.018038 0.102165\nvn 0.0006 -0.0005 1\nv -0.02072 0.022522 0.102167\nvn 0.0006 -0.0005 1\nv 0.022471 -0.002148 0.102167\nvn -1.22465e-16 0 1\nv 0.026331 0.003006 0.102167\nvn -1.22465e-16 0 1\nv 0.024075 -0.00314 0.102167\nvn -1.22465e-16 0 1\nv -0.012816 0.009214 0.102167\nvn -0.0245 -0.0096 0.9997\nv -0.015303 0.015388 0.102165\nvn -0.0245 -0.0096 0.9997\nv -0.017393 0.014587 0.102107\nvn -0.0245 -0.0096 0.9997\nv -0.020957 0.018038 0.102165\nvn 0.0938 -0.0054 0.9956\nv -0.020063 0.019645 0.10209\nvn 0.0938 -0.0054 0.9956\nv -0.02072 0.022522 0.102167\nvn 0.0938 -0.0054 0.9956\nv -0.012816 0.009214 0.102167\nvn -0.0002 0.0002 1\nv 0.024772 0.003265 0.102167\nvn -1.22465e-16 0 1\nv -0.018387 0.020868 0.102166\nvn -0.0223 -0.032 0.9992\nv -0.02072 0.022522 0.102167\nvn -0.0223 -0.032 0.9992\nv -0.020063 0.019645 0.10209\nvn -0.0223 -0.032 0.9992\nv 0.027725 -0.001848 0.102167\nvn -0.6096 0.7926 -0.0148\nv 0.026225 -0.003076 0.098167\nvn -0.6096 0.7926 -0.0148\nv 0.026007 -0.003169 0.102167\nvn -0.6096 0.7926 -0.0148\nv 0.027716 -0.001842 0.098167\nvn -0.6375 0.7704 0.0025\nv 0.026225 -0.003076 0.098167\nvn -0.6375 0.7704 0.0025\nv 0.027725 -0.001848 0.102167\nvn -0.6375 0.7704 0.0025\nv 0.024772 0.003265 0.102167\nvn -0.1642 -0.9864 -0.0083\nv 0.024697 0.003311 0.098167\nvn -0.1642 -0.9864 -0.0083\nv 0.026331 0.003006 0.102167\nvn -0.1642 -0.9864 -0.0083\nv 0.024697 0.003311 0.098167\nvn -0.2838 -0.9579 0.0427\nv 0.027057 0.002612 0.098167\nvn -0.2838 -0.9579 0.0427\nv 0.026331 0.003006 0.102167\nvn -0.2838 -0.9579 0.0427\nv 0.026331 0.003006 0.102167\nvn -0.6621 -0.748 -0.0466\nv 0.027057 0.002612 0.098167\nvn -0.6621 -0.748 -0.0466\nv 0.02791 0.001608 0.102167\nvn -0.6621 -0.748 -0.0466\nv 0.026225 -0.003076 0.098167\nvn -0.0671 0.9976 0.0195\nv 0.024294 -0.003206 0.098167\nvn -0.0671 0.9976 0.0195\nv 0.026007 -0.003169 0.102167\nvn -0.0671 0.9976 0.0195\nv 0.027057 0.002612 0.098167\nvn -0.8731 -0.4831 0.0649\nv 0.028334 0.000304 0.098167\nvn -0.8731 -0.4831 0.0649\nv 0.02791 0.001608 0.102167\nvn -0.8731 -0.4831 0.0649\nv 0.02791 0.001608 0.102167\nvn -0.9828 -0.1791 -0.0458\nv 0.028334 0.000304 0.098167\nvn -0.9828 -0.1791 -0.0458\nv 0.028259 -0.000304 0.102167\nvn -0.9828 -0.1791 -0.0458\nv 0.028259 -0.000304 0.102167\nvn -0.9446 0.3266 0.0318\nv 0.028334 0.000304 0.098167\nvn -0.9446 0.3266 0.0318\nv 0.027725 -0.001848 0.102167\nvn -0.9446 0.3266 0.0318\nv 0.028334 0.000304 0.098167\nvn -0.9609 0.2767 0.0025\nv 0.027716 -0.001842 0.098167\nvn -0.9609 0.2767 0.0025\nv 0.027725 -0.001848 0.102167\nvn -0.9609 0.2767 0.0025\nv -0.022659 -0.002287 0.102167\nvn -0.4835 0.8749 -0.0273\nv -0.0239 -0.003098 0.098167\nvn -0.4835 0.8749 -0.0273\nv -0.024516 -0.003313 0.102167\nvn -0.4835 0.8749 -0.0273\nv -0.02259 -0.002214 0.098167\nvn -0.5591 0.8291 0.0055\nv -0.0239 -0.003098 0.098167\nvn -0.5591 0.8291 0.0055\nv -0.022659 -0.002287 0.102167\nvn -0.5591 0.8291 0.0055\nv -0.024516 0.003313 0.102167\nvn -0.5466 -0.8373 -0.0118\nv -0.024401 0.003295 0.098167\nvn -0.5466 -0.8373 -0.0118\nv -0.022161 0.001776 0.102167\nvn -0.5466 -0.8373 -0.0118\nv -0.024401 0.003295 0.098167\nvn -0.5755 -0.8177 0.0118\nv -0.022101 0.001676 0.098167\nvn -0.5755 -0.8177 0.0118\nv -0.022161 0.001776 0.102167\nvn -0.5755 -0.8177 0.0118\nv -0.0239 -0.003098 0.098167\nvn -0.0522 0.9976 0.0458\nv -0.025831 -0.003199 0.098167\nvn -0.0522 0.9976 0.0458\nv -0.024516 -0.003313 0.102167\nvn -0.0522 0.9976 0.0458\nv -0.022161 0.001776 0.102167\nvn -0.9876 -0.1567 -0.0109\nv -0.022101 0.001676 0.098167\nvn -0.9876 -0.1567 -0.0109\nv -0.021767 -0.000712 0.102167\nvn -0.9876 -0.1567 -0.0109\nv -0.022101 0.001676 0.098167\nvn -0.991 -0.134 0.0029\nv -0.021779 -0.000709 0.098167\nvn -0.991 -0.134 0.0029\nv -0.021767 -0.000712 0.102167\nvn -0.991 -0.134 0.0029\nv -0.021779 -0.000709 0.098167\nvn -0.8803 0.4744 0.003\nv -0.02259 -0.002214 0.098167\nvn -0.8803 0.4744 0.003\nv -0.021767 -0.000712 0.102167\nvn -0.8803 0.4744 0.003\nv -0.021767 -0.000712 0.102167\nvn -0.8701 0.4928 -0.0061\nv -0.02259 -0.002214 0.098167\nvn -0.8701 0.4928 -0.0061\nv -0.022659 -0.002287 0.102167\nvn -0.8701 0.4928 -0.0061\nv -0.007414 0.032005 0.101167\nvn 0.0003 0.0027 1\nv -0.012529 0.054511 0.101109\nvn 0.0003 0.0026 1\nv -0.012673 0.032552 0.101167\nvn 0.0003 0.0026 1\nv -0.00727 0.053964 0.101109\nvn 0.0002 0.0026 1\nv 0.007269 -0.053965 0.101109\nvn -0.0002 -0.0026 1\nv 0.002155 -0.031458 0.101167\nvn -1.22465e-16 -0.0009 1\nv -0.005091 -0.053966 0.101108\nvn 0.0002 -0.0027 1\nv 0.012528 -0.054512 0.101109\nvn -0.0003 -0.0026 1\nv 0.007413 -0.032005 0.101167\nvn -0.0003 -0.0026 1\nv 0.014843 0.028432 0.094628\nvn 0.0796 0.0305 0.9964\nv 0.012616 0.032965 0.094667\nvn 0.0796 0.0305 0.9964\nv 0.013779 0.029929 0.094667\nvn 0.0796 0.0305 0.9964\nv -0.01378 -0.029929 0.094667\nvn -0.0795 -0.0305 0.9964\nv -0.014844 -0.028432 0.094628\nvn -0.0795 -0.0305 0.9964\nv -0.012617 -0.032965 0.094667\nvn -0.0795 -0.0305 0.9964\nv -0.01378 0.029929 0.094667\nvn -0.0997 0.038 0.9943\nv -0.012599 0.033029 0.094667\nvn -0.0997 0.038 0.9943\nv -0.01485 0.028425 0.094617\nvn -0.0997 0.038 0.9943\nv 0.012599 -0.033029 0.094667\nvn 0.0652 -0.0248 0.9976\nv 0.014839 -0.028437 0.094635\nvn 0.0652 -0.0248 0.9976\nv 0.013779 -0.029929 0.094667\nvn 0.0652 -0.0248 0.9976\nv -0.024919 -0.005538 0.094667\nvn 1.22465e-16 0 -1\nv -0.026545 -0.015228 0.094667\nvn 1.22465e-16 0 -1\nv -0.029773 -0.00708 0.094667\nvn -0.0016 0.0003 -1\nv -0.022879 -0.005101 0.094667\nvn 1.22465e-16 0 -1\nv -0.020938 -0.003792 0.094667\nvn -0.007 -0.0025 -1\nv -0.021886 -0.021325 0.094667\nvn -0.0025 0.0001 -1\nv -0.017334 -0.025241 0.094607\nvn -0.0062 0.0018 -1\nv -0.019684 -0.001554 0.094667\nvn -0.0039 0.0022 -1\nv -0.017622 0.024964 0.094647\nvn -0.0197 0.0007 -0.9998\nv -0.017334 -0.025241 0.094607\nvn -0.0151 0.0011 -0.9999\nv -0.019502 0.000535 0.094667\nvn -0.0154 0.001 -0.9999\nv -0.017622 0.024964 0.094647\nvn -0.0018 -0.0007 -1\nv -0.019502 0.000535 0.094667\nvn -0.0023 -0.0007 -1\nv -0.020087 0.002557 0.094667\nvn -0.0012 -0.0008 -1\nv -0.019684 -0.001554 0.094667\nvn -0.0137 0.0012 -0.9999\nv -0.030204 0.004925 0.094667\nvn -0.0019 -0.0005 -1\nv -0.027788 0.004768 0.094667\nvn 0.0001 -0.0001 -1\nv -0.029797 0.00289 0.094667\nvn -0.0006 -0.0002 -1\nv -0.025914 0.005457 0.094667\nvn 1.22465e-16 0 -1\nv -0.03055 -0.000479 0.094672\nvn -0.0035 -0.0008 -1\nv -0.02757 0.013283 0.094667\nvn 1.22465e-16 0 -1\nv -0.023902 0.005414 0.094667\nvn 1.22465e-16 0 -1\nv -0.021755 0.004511 0.094667\nvn -0.0021 0.0005 -1\nv -0.022674 0.020553 0.094667\nvn -0.0008 -0.0001 -1\nv -0.029251 -0.003646 0.094667\nvn -0.0004 0.0001 -1\nv -0.03055 -0.000479 0.094672\nvn -0.0029 0.0005 -1\nv -0.026959 -0.005165 0.094667\nvn 1.22465e-16 0.0001 -1\nv 0.019794 -0.024558 0.101166\nvn 0.5735 -0.8191 0.0088\nv 0.016038 -0.027187 0.101162\nvn 0.5656 -0.8247 0.0055\nv 0.017612 -0.026145 0.095597\nvn 0.572 -0.8202 0.0081\nv 0.019794 -0.024558 0.101166\nvn 0.6232 -0.7818 -0.0213\nv 0.017612 -0.026145 0.095597\nvn 0.6232 -0.7818 -0.0213\nv 0.021557 -0.023002 0.095667\nvn 0.6232 -0.7818 -0.0213\nv 0.023475 -0.021041 0.101167\nvn 0.6906 -0.723 0.0169\nv 0.019794 -0.024558 0.101166\nvn 0.6906 -0.723 0.0169\nv 0.021557 -0.023002 0.095667\nvn 0.6906 -0.723 0.0169\nv 0.023475 -0.021041 0.101167\nvn 0.7339 -0.6791 -0.0138\nv 0.021557 -0.023002 0.095667\nvn 0.7339 -0.6791 -0.0138\nv 0.0246 -0.019714 0.095667\nvn 0.7339 -0.6791 -0.0138\nv 0.026227 -0.017491 0.101167\nvn 0.7903 -0.6126 0.0138\nv 0.023475 -0.021041 0.101167\nvn 0.7903 -0.6126 0.0138\nv 0.0246 -0.019714 0.095667\nvn 0.7903 -0.6126 0.0138\nv 0.026227 -0.017491 0.101167\nvn 0.8227 -0.5683 -0.0137\nv 0.0246 -0.019714 0.095667\nvn 0.8227 -0.5683 -0.0137\nv 0.027146 -0.016028 0.095667\nvn 0.8227 -0.5683 -0.0137\nv 0.028446 -0.013587 0.101167\nvn 0.8693 -0.4941 0.0138\nv 0.026227 -0.017491 0.101167\nvn 0.8693 -0.4941 0.0138\nv 0.027146 -0.016028 0.095667\nvn 0.8693 -0.4941 0.0138\nv 0.028446 -0.013587 0.101167\nvn 0.895 -0.4459 -0.0136\nv 0.027146 -0.016028 0.095667\nvn 0.895 -0.4459 -0.0136\nv 0.029144 -0.012019 0.095667\nvn 0.895 -0.4459 -0.0136\nv 0.030088 -0.009407 0.101167\nvn 0.9307 -0.3656 0.0138\nv 0.028446 -0.013587 0.101167\nvn 0.9307 -0.3656 0.0138\nv 0.029144 -0.012019 0.095667\nvn 0.9307 -0.3656 0.0138\nv 0.030088 -0.009407 0.101167\nvn 0.9491 -0.3146 -0.0137\nv 0.029144 -0.012019 0.095667\nvn 0.9491 -0.3146 -0.0137\nv 0.030553 -0.007766 0.095667\nvn 0.9491 -0.3146 -0.0137\nv 0.03112 -0.005035 0.101167\nvn 0.9732 -0.2296 0.0137\nv 0.030088 -0.009407 0.101167\nvn 0.9732 -0.2296 0.0137\nv 0.030553 -0.007766 0.095667\nvn 0.9732 -0.2296 0.0137\nv 0.03112 -0.005035 0.101167\nvn 0.9842 -0.1768 -0.0137\nv 0.030553 -0.007766 0.095667\nvn 0.9842 -0.1768 -0.0137\nv 0.031345 -0.003356 0.095667\nvn 0.9842 -0.1768 -0.0137\nv 0.03152 -0.000562 0.101167\nvn 0.9959 -0.089 0.0136\nv 0.03112 -0.005035 0.101167\nvn 0.9959 -0.089 0.0136\nv 0.031345 -0.003356 0.095667\nvn 0.9959 -0.089 0.0136\nv 0.03152 -0.000562 0.101167\nvn 0.9993 -0.0356 -0.0136\nv 0.031345 -0.003356 0.095667\nvn 0.9993 -0.0356 -0.0136\nv 0.031505 0.001121 0.095667\nvn 0.9993 -0.0356 -0.0136\nv 0.031279 0.003923 0.101167\nvn 0.9985 0.0535 0.0136\nv 0.03152 -0.000562 0.101167\nvn 0.9985 0.0535 0.0136\nv 0.031505 0.001121 0.095667\nvn 0.9985 0.0535 0.0136\nv 0.031279 0.003923 0.101167\nvn 0.9942 0.1065 -0.0136\nv 0.031505 0.001121 0.095667\nvn 0.9942 0.1065 -0.0136\nv 0.031027 0.005575 0.095667\nvn 0.9942 0.1065 -0.0136\nv 0.030404 0.008328 0.101167\nvn 0.9807 0.1948 0.0136\nv 0.031279 0.003923 0.101167\nvn 0.9807 0.1948 0.0136\nv 0.031027 0.005575 0.095667\nvn 0.9807 0.1948 0.0136\nv 0.030404 0.008328 0.101167\nvn 0.9691 0.2463 -0.0135\nv 0.031027 0.005575 0.095667\nvn 0.9691 0.2463 -0.0135\nv 0.029924 0.009917 0.095667\nvn 0.9691 0.2463 -0.0135\nv 0.028912 0.012564 0.101167\nvn 0.9431 0.3321 0.0136\nv 0.030404 0.008328 0.101167\nvn 0.9431 0.3321 0.0136\nv 0.029924 0.009917 0.095667\nvn 0.9431 0.3321 0.0136\nv 0.028912 0.012564 0.101167\nvn 0.9244 0.3812 -0.0135\nv 0.029924 0.009917 0.095667\nvn 0.9244 0.3812 -0.0135\nv 0.028216 0.014059 0.095667\nvn 0.9244 0.3812 -0.0135\nv 0.026834 0.016546 0.101167\nvn 0.8863 0.4628 0.0135\nv 0.028912 0.012564 0.101167\nvn 0.8863 0.4628 0.0135\nv 0.028216 0.014059 0.095667\nvn 0.8863 0.4628 0.0135\nv 0.026834 0.016546 0.101167\nvn 0.861 0.5084 -0.0134\nv 0.028216 0.014059 0.095667\nvn 0.861 0.5084 -0.0134\nv 0.025938 0.017917 0.095667\nvn 0.861 0.5084 -0.0134\nv 0.02421 0.020191 0.101167\nvn 0.8116 0.5841 0.0135\nv 0.026834 0.016546 0.101167\nvn 0.8116 0.5841 0.0135\nv 0.025938 0.017917 0.095667\nvn 0.8116 0.5841 0.0135\nv 0.02421 0.020191 0.101167\nvn 0.7688 0.6391 -0.0227\nv 0.025938 0.017917 0.095667\nvn 0.7688 0.6391 -0.0227\nv 0.021995 0.022659 0.095666\nvn 0.7688 0.6391 -0.0227\nv 0.021095 0.023426 0.101167\nvn 0.7202 0.6934 0.0212\nv 0.02421 0.020191 0.101167\nvn 0.7202 0.6934 0.0212\nv 0.021995 0.022659 0.095666\nvn 0.7202 0.6934 0.0212\nv 0.016356 0.026984 0.101166\nvn 0.6003 0.7996 -0.0133\nv 0.021095 0.023426 0.101167\nvn 0.6003 0.7996 -0.0133\nv 0.021995 0.022659 0.095666\nvn 0.6003 0.7996 -0.0133\nv 0.016356 0.026984 0.101166\nvn 0.6194 0.7851 0.0055\nv 0.021995 0.022659 0.095666\nvn 0.6112 0.7915 0.0043\nv 0.016899 0.026596 0.095407\nvn 0.6117 0.7911 0.0043\nv 0.021885 0.021325 0.094667\nvn 0.0025 -0.0001 -1\nv 0.021465 0.004265 0.094667\nvn 0.007 0.0015 -1\nv 0.017342 0.025245 0.09461\nvn 0.0053 -0.0017 -1\nv 0.020022 0.00243 0.094667\nvn 0.0028 -0.0022 -1\nv 0.026545 0.015228 0.094667\nvn 1.22465e-16 0 -1\nv 0.023108 0.005178 0.094667\nvn 1.22465e-16 0 -1\nv 0.020022 0.00243 0.094667\nvn 0.0072 -0.0017 -1\nv 0.019443 -7.3e-05 0.094667\nvn 0.0106 -0.0014 -0.9999\nv 0.017342 0.025245 0.09461\nvn 0.0092 -0.0015 -1\nv 0.024918 0.005538 0.094667\nvn 1.22465e-16 0 -1\nv 0.029772 0.00708 0.094667\nvn 0.0016 -0.0003 -1\nv 0.026958 0.005165 0.094667\nvn 1.22465e-16 -0.0001 -1\nv 0.02925 0.003646 0.094667\nvn 0.0004 -0.0001 -1\nv 0.030549 0.000479 0.094672\nvn 0.0029 -0.0005 -1\nv 0.030204 -0.004925 0.094667\nvn 0.0019 0.0005 -1\nv 0.029796 -0.00289 0.094667\nvn 0.0006 0.0002 -1\nv 0.030549 0.000479 0.094672\nvn 0.0035 0.0008 -1\nv 0.027787 -0.004768 0.094667\nvn -0.0001 0.0001 -1\nv 0.025913 -0.005457 0.094667\nvn 1.22465e-16 0 -1\nv 0.027569 -0.013283 0.094667\nvn 1.22465e-16 0 -1\nv 0.023672 -0.005378 0.094667\nvn 1.22465e-16 0 -1\nv 0.021575 -0.004354 0.094667\nvn 0.0022 -0.0005 -1\nv 0.022673 -0.020553 0.094667\nvn 0.0009 0.0001 -1\nv 0.017615 -0.024968 0.094645\nvn 0.02 -0.0006 -0.9998\nv 0.017615 -0.024968 0.094645\nvn 0.002 0.0007 -1\nv 0.020086 -0.002557 0.094667\nvn 0.0013 0.0008 -1\nv 0.019443 -7.3e-05 0.094667\nvn 0.0026 0.0007 -1\nv 0.012368 0.029044 0.101167\nvn -1.22465e-16 0 1\nv 0.014026 0.029412 0.101167\nvn 0.0001 -0.0001 1\nv 0.012578 0.033225 0.101167\nvn -1.22465e-16 0 1\nv -0.008955 0.030303 0.101167\nvn 0.0003 -0.0013 1\nv -0.002156 0.031458 0.101167\nvn -1.22465e-16 0.0009 1\nv 0.00509 0.053967 0.101108\nvn -0.0002 0.0027 1\nv 0.016356 0.026984 0.101166\nvn 0.0001 -0.0002 1\nv 0.012456 0.05485 0.101108\nvn -0.0003 0.0027 1\nv 0.005211 0.032342 0.101167\nvn -0.0003 0.0027 1\nv -0.012673 0.032552 0.101167\nvn -1.22465e-16 0 1\nv -0.014213 0.029234 0.101167\nvn 0.0001 -0.0004 1\nv 0.004697 0.031247 0.101167\nvn -1.22465e-16 0.0002 1\nv -0.016061 0.027196 0.101163\nvn 0.0005 -0.0025 1\nv 0.014212 -0.029234 0.101167\nvn -0.0001 0.0005 1\nv 0.016038 -0.027187 0.101162\nvn -0.0005 0.0027 1\nv 0.008954 -0.030303 0.101167\nvn -0.0003 0.0014 1\nv -0.004698 -0.031247 0.101167\nvn -1.22465e-16 -0.0002 1\nv -0.005212 -0.032342 0.101167\nvn 0.0003 -0.0027 1\nv -0.014027 -0.029412 0.101167\nvn -0.0001 0.0001 1\nv -0.012369 -0.029044 0.101167\nvn -0.0003 0.0012 1\nv -0.016317 -0.026981 0.101162\nvn -0.0004 0.0018 1\nv 0.012672 -0.032552 0.101167\nvn -1.22465e-16 0 1\nv -0.012579 -0.033225 0.101167\nvn -1.22465e-16 0 1\nv -0.020661 0.003418 0.098167\nvn 1.22465e-16 0 -1\nv -0.022101 0.001676 0.098167\nvn 1.22465e-16 0 -1\nv -0.022047 0.004669 0.098167\nvn 1.22465e-16 0 -1\nv -0.027471 -0.002169 0.098167\nvn 1.22465e-16 0 -1\nv -0.026697 -0.005338 0.098167\nvn 1.22465e-16 0 -1\nv -0.029657 -0.003114 0.098167\nvn 1.22465e-16 0 -1\nv -0.025831 -0.003199 0.098167\nvn 1.22465e-16 0 -1\nv -0.028146 -0.000874 0.098167\nvn 1.22465e-16 0 -1\nv -0.030582 0.000471 0.098167\nvn 1.22465e-16 0 -1\nv -0.028189 0.000945 0.098167\nvn 1.22465e-16 0 -1\nv -0.023902 -0.005414 0.098167\nvn 1.22465e-16 0 -1\nv -0.0239 -0.003098 0.098167\nvn 1.22465e-16 0 -1\nv -0.029069 0.00385 0.098167\nvn 1.22465e-16 0 -1\nv -0.021755 -0.004511 0.098167\nvn 1.22465e-16 0 -1\nv -0.02259 -0.002214 0.098167\nvn 1.22465e-16 0 -1\nv -0.026809 0.002766 0.098167\nvn 1.22465e-16 0 -1\nv -0.020087 -0.002557 0.098167\nvn 1.22465e-16 0 -1\nv -0.021779 -0.000709 0.098167\nvn 1.22465e-16 0 -1\nv -0.02616 0.00544 0.098167\nvn 1.22465e-16 0 -1\nv -0.024401 0.003295 0.098167\nvn 1.22465e-16 0 -1\nv -0.019502 -0.000535 0.098167\nvn 1.22465e-16 0 -1\nv -0.023772 0.005386 0.098167\nvn 1.22465e-16 0 -1\nv -0.019684 0.001554 0.098167\nvn 1.22465e-16 0 -1\nv -0.019502 0.000535 0.094667\nvn -0.9959 0.0866 0.0264\nv -0.019684 -0.001554 0.094667\nvn -0.9959 0.0866 0.0264\nv -0.019502 -0.000535 0.098167\nvn -0.9959 0.0866 0.0264\nv -0.025914 0.005457 0.094667\nvn -0.0214 -0.9998 -0.0062\nv -0.023902 0.005414 0.094667\nvn -0.0228 -0.9997 -0.0071\nv -0.02616 0.00544 0.098167\nvn -0.0216 -0.9997 -0.0063\nv -0.023772 0.005386 0.098167\nvn -0.0229 -0.9997 -0.0072\nv -0.019502 -0.000535 0.098167\nvn -0.9602 0.2776 -0.0311\nv -0.019684 -0.001554 0.094667\nvn -0.9602 0.2776 -0.0311\nv -0.020087 -0.002557 0.098167\nvn -0.9602 0.2776 -0.0311\nv -0.019684 -0.001554 0.094667\nvn -0.8716 0.4885 0.0396\nv -0.020938 -0.003792 0.094667\nvn -0.8716 0.4885 0.0396\nv -0.020087 -0.002557 0.098167\nvn -0.8716 0.4885 0.0396\nv -0.023772 0.005386 0.098167\nvn -0.3872 -0.9219 0.0073\nv -0.021755 0.004511 0.094667\nvn -0.3846 -0.9231 0.0091\nv -0.022047 0.004669 0.098167\nvn -0.384 -0.9233 0.0095\nv -0.023902 0.005414 0.094667\nvn -0.3877 -0.9218 0.007\nv -0.020087 -0.002557 0.098167\nvn -0.7598 0.6486 -0.0441\nv -0.020938 -0.003792 0.094667\nvn -0.7598 0.6486 -0.0441\nv -0.021755 -0.004511 0.098167\nvn -0.7598 0.6486 -0.0441\nv -0.022047 0.004669 0.098167\nvn -0.6695 -0.7425 -0.0225\nv -0.021755 0.004511 0.094667\nvn -0.6695 -0.7425 -0.0225\nv -0.020661 0.003418 0.098167\nvn -0.6695 -0.7425 -0.0225\nv -0.020938 -0.003792 0.094667\nvn -0.5585 0.8285 0.0398\nv -0.022879 -0.005101 0.094667\nvn -0.5585 0.8285 0.0398\nv -0.021755 -0.004511 0.098167\nvn -0.5585 0.8285 0.0398\nv -0.021755 0.004511 0.094667\nvn -0.7601 -0.6489 0.0351\nv -0.020087 0.002557 0.094667\nvn -0.7601 -0.6489 0.0351\nv -0.020661 0.003418 0.098167\nvn -0.7601 -0.6489 0.0351\nv -0.021755 -0.004511 0.098167\nvn -0.3875 0.9214 -0.0308\nv -0.022879 -0.005101 0.094667\nvn -0.3875 0.9214 -0.0308\nv -0.023902 -0.005414 0.098167\nvn -0.3875 0.9214 -0.0308\nv -0.020661 0.003418 0.098167\nvn -0.8853 -0.464 -0.0309\nv -0.020087 0.002557 0.094667\nvn -0.8853 -0.464 -0.0309\nv -0.019684 0.001554 0.098167\nvn -0.8853 -0.464 -0.0309\nv -0.022879 -0.005101 0.094667\nvn -0.2094 0.9775 0.0263\nv -0.024919 -0.005538 0.094667\nvn -0.2094 0.9775 0.0263\nv -0.023902 -0.005414 0.098167\nvn -0.2094 0.9775 0.0263\nv -0.020087 0.002557 0.094667\nvn -0.9602 -0.2776 0.0311\nv -0.019502 0.000535 0.094667\nvn -0.9602 -0.2776 0.0311\nv -0.019684 0.001554 0.098167\nvn -0.9602 -0.2776 0.0311\nv -0.023902 -0.005414 0.098167\nvn 0.027 0.9987 -0.0432\nv -0.024919 -0.005538 0.094667\nvn 0.027 0.9987 -0.0432\nv -0.026697 -0.005338 0.098167\nvn 0.027 0.9987 -0.0432\nv -0.019684 0.001554 0.098167\nvn -0.9959 -0.0866 -0.0264\nv -0.019502 0.000535 0.094667\nvn -0.9959 -0.0866 -0.0264\nv -0.019502 -0.000535 0.098167\nvn -0.9959 -0.0866 -0.0264\nv 0.029656 0.003114 0.098167\nvn 1.22465e-16 0 -1\nv 0.027057 0.002612 0.098167\nvn 1.22465e-16 0 -1\nv 0.026696 0.005338 0.098167\nvn 1.22465e-16 0 -1\nv 0.022919 -0.002527 0.098167\nvn 1.22465e-16 0 -1\nv 0.021465 -0.004265 0.098167\nvn 1.22465e-16 0 -1\nv 0.020022 -0.00243 0.098167\nvn 1.22465e-16 0 -1\nv 0.021941 -0.001219 0.098167\nvn 1.22465e-16 0 -1\nv 0.024294 -0.003206 0.098167\nvn 1.22465e-16 0 -1\nv 0.024053 -0.005505 0.098167\nvn 1.22465e-16 0 -1\nv 0.019443 7.3e-05 0.098167\nvn 1.22465e-16 0 -1\nv 0.021751 0.000404 0.098167\nvn 1.22465e-16 0 -1\nv 0.026225 -0.003076 0.098167\nvn 1.22465e-16 0 -1\nv 0.026667 -0.005266 0.098167\nvn 1.22465e-16 0 -1\nv 0.020086 0.002557 0.098167\nvn 1.22465e-16 0 -1\nv 0.022503 0.002196 0.098167\nvn 1.22465e-16 0 -1\nv 0.029068 -0.00385 0.098167\nvn 1.22465e-16 0 -1\nv 0.021575 0.004354 0.098167\nvn 1.22465e-16 0 -1\nv 0.027716 -0.001842 0.098167\nvn 1.22465e-16 0 -1\nv 0.024697 0.003311 0.098167\nvn 1.22465e-16 0 -1\nv 0.023672 0.005378 0.098167\nvn 1.22465e-16 0 -1\nv 0.030582 -0.000471 0.098167\nvn 1.22465e-16 0 -1\nv 0.028334 0.000304 0.098167\nvn 1.22465e-16 0 -1\nv 0.030549 0.000479 0.094672\nvn -0.9737 0.2174 0.0682\nv 0.029796 -0.00289 0.094667\nvn -0.9737 0.2174 0.0682\nv 0.030582 -0.000471 0.098167\nvn -0.9737 0.2174 0.0682\nv 0.030582 -0.000471 0.098167\nvn -0.9099 0.4075 -0.0775\nv 0.029796 -0.00289 0.094667\nvn -0.9099 0.4075 -0.0775\nv 0.029068 -0.00385 0.098167\nvn -0.9099 0.4075 -0.0775\nv 0.024918 0.005538 0.094667\nvn -0.1798 -0.9831 0.0353\nv 0.026958 0.005165 0.094667\nvn -0.1798 -0.9831 0.0353\nv 0.026696 0.005338 0.098167\nvn -0.1798 -0.9831 0.0353\nv 0.026958 0.005165 0.094667\nvn -0.5523 -0.8336 0.0001\nv 0.02925 0.003646 0.094667\nvn -0.5523 -0.8336 0.0001\nv 0.026696 0.005338 0.098167\nvn -0.5523 -0.8336 0.0001\nv 0.026696 0.005338 0.098167\nvn -0.5999 -0.7984 -0.0518\nv 0.02925 0.003646 0.094667\nvn -0.5999 -0.7984 -0.0518\nv 0.029656 0.003114 0.098167\nvn -0.5999 -0.7984 -0.0518\nv 0.029796 -0.00289 0.094667\nvn -0.6819 0.7292 0.0583\nv 0.027787 -0.004768 0.094667\nvn -0.6819 0.7292 0.0583\nv 0.029068 -0.00385 0.098167\nvn -0.6819 0.7292 0.0583\nv 0.029068 -0.00385 0.098167\nvn -0.5075 0.8607 -0.04\nv 0.027787 -0.004768 0.094667\nvn -0.5075 0.8607 -0.04\nv 0.026667 -0.005266 0.098167\nvn -0.5075 0.8607 -0.04\nv 0.027787 -0.004768 0.094667\nvn -0.3447 0.9384 0.0231\nv 0.025913 -0.005457 0.094667\nvn -0.3447 0.9384 0.0231\nv 0.026667 -0.005266 0.098167\nvn -0.3447 0.9384 0.0231\nv 0.026667 -0.005266 0.098167\nvn -0.0909 0.9953 -0.0346\nv 0.025913 -0.005457 0.094667\nvn -0.0909 0.9953 -0.0346\nv 0.024053 -0.005505 0.098167\nvn -0.0909 0.9953 -0.0346\nv 0.02925 0.003646 0.094667\nvn -0.9241 -0.379 0.0496\nv 0.030549 0.000479 0.094672\nvn -0.9241 -0.379 0.0496\nv 0.029656 0.003114 0.098167\nvn -0.9241 -0.379 0.0496\nv 0.029656 0.003114 0.098167\nvn -0.9666 -0.2495 -0.0588\nv 0.030549 0.000479 0.094672\nvn -0.9666 -0.2495 -0.0588\nv 0.030582 -0.000471 0.098167\nvn -0.9666 -0.2495 -0.0588\nv -0.001452 -0.015761 0.102167\nvn -0.1052 -0.9897 0.0972\nv -5.5e-05 -0.015762 0.103664\nvn -0.1052 -0.9897 0.0972\nv -0.003647 -0.01538 0.103672\nvn -0.1052 -0.9897 0.0972\nv -0.006755 -0.014314 0.102167\nvn -0.2607 -0.9555 -0.1383\nv -0.001452 -0.015761 0.102167\nvn -0.2607 -0.9555 -0.1383\nv -0.003647 -0.01538 0.103672\nvn -0.2607 -0.9555 -0.1383\nv -0.006755 -0.014314 0.102167\nvn -0.3543 -0.9324 0.0713\nv -0.003647 -0.01538 0.103672\nvn -0.3543 -0.9324 0.0713\nv -0.007234 -0.014017 0.103659\nvn -0.3543 -0.9324 0.0713\nv -0.006755 -0.014314 0.102167\nvn -0.5453 -0.8382 -0.0088\nv -0.007234 -0.014017 0.103659\nvn -0.5453 -0.8382 -0.0088\nv -0.009883 -0.012295 0.10366\nvn -0.5453 -0.8382 -0.0088\nv -0.010354 -0.0119 0.102167\nvn -0.5565 -0.8297 -0.0436\nv -0.006755 -0.014314 0.102167\nvn -0.5565 -0.8297 -0.0436\nv -0.009883 -0.012295 0.10366\nvn -0.5565 -0.8297 -0.0436\nv -0.010354 -0.0119 0.102167\nvn -0.7064 -0.7068 0.0362\nv -0.009883 -0.012295 0.10366\nvn -0.7064 -0.7068 0.0362\nv -0.01235 -0.009829 0.103663\nvn -0.7064 -0.7068 0.0362\nv -0.013066 -0.008908 0.102167\nvn -0.7397 -0.6703 -0.0588\nv -0.010354 -0.0119 0.102167\nvn -0.7397 -0.6703 -0.0588\nv -0.01235 -0.009829 0.103663\nvn -0.7397 -0.6703 -0.0588\nv -0.013066 -0.008908 0.102167\nvn -0.8433 -0.5321 0.0759\nv -0.01235 -0.009829 0.103663\nvn -0.8433 -0.5321 0.0759\nv -0.014142 -0.006988 0.103669\nvn -0.8433 -0.5321 0.0759\nv -0.014861 -0.00529 0.102167\nvn -0.8934 -0.4433 -0.0734\nv -0.013066 -0.008908 0.102167\nvn -0.8934 -0.4433 -0.0734\nv -0.014142 -0.006988 0.103669\nvn -0.8934 -0.4433 -0.0734\nv -0.014861 -0.00529 0.102167\nvn -0.9375 -0.3426 0.0616\nv -0.014142 -0.006988 0.103669\nvn -0.9375 -0.3426 0.0616\nv -0.01536 -0.003655 0.103667\nvn -0.9375 -0.3426 0.0616\nv -0.01574 -0.001452 0.102167\nvn -0.9716 -0.2225 -0.0806\nv -0.014861 -0.00529 0.102167\nvn -0.9716 -0.2225 -0.0806\nv -0.01536 -0.003655 0.103667\nvn -0.9716 -0.2225 -0.0806\nv -0.01574 -0.001452 0.102167\nvn -0.9892 -0.0943 0.1121\nv -0.01536 -0.003655 0.103667\nvn -0.9892 -0.0943 0.1121\nv -0.015786 0.000836 0.103686\nvn -0.9892 -0.0943 0.1121\nv -0.015528 0.002858 0.102167\nvn -0.9934 0.0488 -0.1034\nv -0.01574 -0.001452 0.102167\nvn -0.9934 0.0488 -0.1034\nv -0.015786 0.000836 0.103686\nvn -0.9934 0.0488 -0.1034\nv -0.015528 0.002858 0.102167\nvn -0.9783 0.1888 0.0855\nv -0.015786 0.000836 0.103686\nvn -0.9783 0.1888 0.0855\nv -0.014996 0.00494 0.103656\nvn -0.9783 0.1888 0.0855\nv -0.014492 0.00623 0.102167\nvn -0.9536 0.2931 -0.0692\nv -0.015528 0.002858 0.102167\nvn -0.9536 0.2931 -0.0692\nv -0.014996 0.00494 0.103656\nvn -0.9536 0.2931 -0.0692\nv -0.014492 0.00623 0.102167\nvn -0.8969 0.436 0.0738\nv -0.014996 0.00494 0.103656\nvn -0.8969 0.436 0.0738\nv -0.013073 0.008897 0.103653\nvn -0.8969 0.436 0.0738\nv -0.012816 0.009214 0.102167\nvn -0.8709 0.4892 -0.0465\nv -0.014492 0.00623 0.102167\nvn -0.8709 0.4892 -0.0465\nv -0.013073 0.008897 0.103653\nvn -0.8709 0.4892 -0.0465\nv -0.010521 0.011753 0.102167\nvn -0.742 0.6703 0.0142\nv -0.012816 0.009214 0.102167\nvn -0.7419 0.6704 0.0145\nv -0.013073 0.008897 0.103653\nvn -0.7422 0.67 0.0132\nv -0.010392 0.011867 0.10366\nvn -0.7423 0.6699 0.013\nv -0.00698 0.014206 0.102167\nvn -0.5699 0.8216 -0.0157\nv -0.010521 0.011753 0.102167\nvn -0.5693 0.822 -0.0135\nv -0.010392 0.011867 0.10366\nvn -0.5721 0.8199 -0.0233\nv -0.007472 0.013909 0.103658\nvn -0.5729 0.8192 -0.0259\nv -0.00698 0.014206 0.102167\nvn -0.3551 0.9323 0.0684\nv -0.007472 0.013909 0.103658\nvn -0.3551 0.9323 0.0684\nv -0.00354 0.015405 0.103673\nvn -0.3551 0.9323 0.0684\nv -0.002849 0.015514 0.102167\nvn -0.3013 0.951 -0.0693\nv -0.00698 0.014206 0.102167\nvn -0.3013 0.951 -0.0693\nv -0.00354 0.015405 0.103673\nvn -0.3013 0.951 -0.0693\nv 0.001451 0.015761 0.102167\nvn -0.0658 0.9977 0.0172\nv -0.00354 0.015405 0.103673\nvn -0.0658 0.9977 0.0172\nv 0.001612 0.015745 0.103672\nvn -0.0658 0.9977 0.0172\nv 0.001451 0.015761 0.102167\nvn -0.0571 0.9973 0.0461\nv -0.002849 0.015514 0.102167\nvn -0.0571 0.9973 0.0461\nv -0.00354 0.015405 0.103673\nvn -0.0571 0.9973 0.0461\nv -0.014514 0.002915 0.104667\nvn -1.22465e-16 0 1\nv -0.010211 0.010676 0.104667\nvn 0.0002 -0.0001 1\nv -0.012848 0.007397 0.104667\nvn 0.0004 -0.0002 1\nv -0.007183 0.012948 0.104667\nvn -0.0001 0 1\nv -0.014759 -0.000813 0.104667\nvn -1.22465e-16 0 1\nv -0.001753 0.014722 0.104668\nvn 0.0001 -0.0001 1\nv 0.002629 0.014553 0.104667\nvn -1.22465e-16 0 1\nv -0.013802 -0.005392 0.104667\nvn -1.22465e-16 0 1\nv 0.012848 0.007397 0.104667\nvn -1.22465e-16 0 1\nv 0.007183 0.012948 0.104667\nvn 0.0002 0.0002 1\nv 0.01021 0.010676 0.104667\nvn 0.0004 0.0004 1\nv -0.007586 -0.012745 0.104667\nvn -1.22465e-16 0 1\nv -0.011363 -0.00948 0.104667\nvn -0.0002 -0.0001 1\nv 0.002376 -0.014616 0.104667\nvn -1.22465e-16 0 1\nv -0.002115 -0.014669 0.104667\nvn -1.22465e-16 0.0003 1\nv 0.013802 -0.005392 0.104667\nvn -1.22465e-16 0 1\nv 0.014758 -0.000813 0.104667\nvn 0.0001 -0 1\nv 0.014513 0.002915 0.104667\nvn 0.0001 -0 1\nv 0.007585 -0.012745 0.104667\nvn -1.22465e-16 0.0001 1\nv 0.011362 -0.009479 0.104667\nvn 0.0002 -0.0002 1\nv 0.016436 0.026056 0.094235\nvn 0.6256 -0.0005 -0.7801\nv 0.016066 -0.026435 0.093972\nvn 0.6256 -0.0005 -0.7801\nv 0.015862 0.026677 0.093775\nvn 0.6256 -0.0005 -0.7801\nv 0.01521 -0.027562 0.0928\nvn 0.9701 -0.0001 -0.2427\nv 0.015023 -0.027848 0.092052\nvn 0.9701 -0.0001 -0.2427\nv 0.015221 0.027524 0.092823\nvn 0.9701 -0.0001 -0.2427\nv 0.015862 0.026677 0.093775\nvn 0.8287 -0.0009 -0.5597\nv 0.015528 -0.027109 0.093371\nvn 0.8287 -0.0009 -0.5597\nv 0.015221 0.027524 0.092823\nvn 0.8287 -0.0009 -0.5597\nv 0.015023 -0.027848 0.092052\nvn 0.963 0.0003 -0.2693\nv 0.015029 0.027838 0.09214\nvn 0.963 0.0003 -0.2693\nv 0.015221 0.027524 0.092823\nvn 0.963 0.0003 -0.2693\nv 0.016066 -0.026435 0.093972\nvn 0.7448 0.0004 -0.6673\nv 0.015528 -0.027109 0.093371\nvn 0.7448 0.0004 -0.6673\nv 0.015862 0.026677 0.093775\nvn 0.7448 0.0004 -0.6673\nv 0.016819 -0.02569 0.09443\nvn 0.2605 0.0007 -0.9655\nv 0.017342 0.025245 0.09461\nvn 0.2605 0.0007 -0.9655\nv 0.017615 -0.024968 0.094645\nvn 0.2605 0.0007 -0.9655\nv 0.016819 -0.02569 0.09443\nvn 0.3817 -0.0007 -0.9243\nv 0.016436 0.026056 0.094235\nvn 0.3817 -0.0007 -0.9243\nv 0.017342 0.025245 0.09461\nvn 0.3817 -0.0007 -0.9243\nv 0.016436 0.026056 0.094235\nvn 0.5197 0.0006 -0.8543\nv 0.016819 -0.02569 0.09443\nvn 0.5197 0.0006 -0.8543\nv 0.016066 -0.026435 0.093972\nvn 0.5197 0.0006 -0.8543\nv 0.015528 -0.027109 0.093371\nvn 0.8733 0 -0.4871\nv 0.01521 -0.027562 0.0928\nvn 0.8733 0 -0.4871\nv 0.015221 0.027524 0.092823\nvn 0.8733 0 -0.4871\nv -0.016472 -0.02602 0.094256\nvn -0.6171 0.0005 -0.7869\nv -0.016028 0.026492 0.093938\nvn -0.6171 0.0005 -0.7869\nv -0.015853 -0.026693 0.09377\nvn -0.6171 0.0005 -0.7869\nv -0.016683 0.025813 0.09438\nvn -0.5586 -0.0003 -0.8294\nv -0.016028 0.026492 0.093938\nvn -0.5586 -0.0003 -0.8294\nv -0.016472 -0.02602 0.094256\nvn -0.5586 -0.0003 -0.8294\nv -0.01521 0.027562 0.0928\nvn -0.9701 0.0001 -0.2426\nv -0.015023 0.027848 0.092052\nvn -0.9701 0.0001 -0.2426\nv -0.015222 -0.027524 0.092825\nvn -0.9701 0.0001 -0.2426\nv -0.015853 -0.026693 0.09377\nvn -0.8313 0.0009 -0.5559\nv -0.015528 0.027109 0.093371\nvn -0.8313 0.0009 -0.5559\nv -0.015222 -0.027524 0.092825\nvn -0.8313 0.0009 -0.5559\nv -0.015023 0.027848 0.092052\nvn -0.9631 -0.0003 -0.2692\nv -0.01503 -0.027838 0.09214\nvn -0.9631 -0.0003 -0.2692\nv -0.015222 -0.027524 0.092825\nvn -0.9631 -0.0003 -0.2692\nv -0.016028 0.026492 0.093938\nvn -0.7505 -0.0004 -0.6608\nv -0.015528 0.027109 0.093371\nvn -0.7505 -0.0004 -0.6608\nv -0.015853 -0.026693 0.09377\nvn -0.7505 -0.0004 -0.6608\nv -0.016683 0.025813 0.09438\nvn -0.2729 -0.0008 -0.962\nv -0.017334 -0.025241 0.094607\nvn -0.2729 -0.0008 -0.962\nv -0.017622 0.024964 0.094647\nvn -0.2729 -0.0008 -0.962\nv -0.016683 0.025813 0.09438\nvn -0.3765 0.0007 -0.9264\nv -0.016472 -0.02602 0.094256\nvn -0.3765 0.0007 -0.9264\nv -0.017334 -0.025241 0.094607\nvn -0.3765 0.0007 -0.9264\nv -0.015528 0.027109 0.093371\nvn -0.8733 0 -0.4871\nv -0.01521 0.027562 0.0928\nvn -0.8733 0 -0.4871\nv -0.015222 -0.027524 0.092825\nvn -0.8733 0 -0.4871\nv 0.012616 0.032965 0.094667\nvn 0.9347 0.3554 -0.0086\nv 0.014026 0.029412 0.101167\nvn 0.9339 0.3574 -0.0073\nv 0.013779 0.029929 0.094667\nvn 0.9338 0.3578 -0.007\nv 0.012578 0.033225 0.101167\nvn 0.9348 0.3549 -0.0088\nv 0.013779 0.029929 0.094667\nvn 0.8153 0.5789 0.0151\nv 0.014026 0.029412 0.101167\nvn 0.8153 0.5789 0.0151\nv 0.014843 0.028432 0.094628\nvn 0.8153 0.5789 0.0151\nv 0.014843 0.028432 0.094628\nvn 0.7322 0.6811 -0.0035\nv 0.015531 0.02769 0.094145\nvn 0.7322 0.6811 -0.0035\nv 0.015001 0.028255 0.093082\nvn 0.7322 0.6811 -0.0035\nv 0.014843 0.028432 0.094628\nvn 0.7296 0.6838 -0.0113\nv 0.014026 0.029412 0.101167\nvn 0.7275 0.686 -0.0123\nv 0.015531 0.02769 0.094145\nvn 0.7223 0.6914 -0.0147\nv 0.016356 0.026984 0.101166\nvn 0.7214 0.6924 -0.0152\nv 0.015531 0.02769 0.094145\nvn 0.6213 0.7835 0.0058\nv 0.015953 -0.027281 0.094673\nvn 0.5635 -0.8261 0.0046\nv 0.015953 -0.027281 0.094673\nvn 0.7064 -0.7079 0.0011\nv 0.016038 -0.027187 0.101162\nvn 0.7064 -0.7079 0.0011\nv 0.014991 -0.028244 0.093054\nvn 0.7064 -0.7079 0.0011\nv 0.014991 -0.028244 0.093054\nvn 0.7462 -0.6656 -0.0096\nv 0.016038 -0.027187 0.101162\nvn 0.7461 -0.6657 -0.0096\nv 0.014839 -0.028437 0.094635\nvn 0.7462 -0.6657 -0.0096\nv 0.014212 -0.029234 0.101167\nvn 0.7461 -0.6657 -0.0096\nv 0.014839 -0.028437 0.094635\nvn 0.8153 -0.579 0.0076\nv 0.014212 -0.029234 0.101167\nvn 0.8153 -0.579 0.0076\nv 0.013779 -0.029929 0.094667\nvn 0.8153 -0.579 0.0076\nv 0.014212 -0.029234 0.101167\nvn 0.9069 -0.421 -0.0154\nv 0.012672 -0.032552 0.101167\nvn 0.9069 -0.421 -0.0154\nv 0.013779 -0.029929 0.094667\nvn 0.9069 -0.421 -0.0154\nv 0.013779 -0.029929 0.094667\nvn 0.9344 -0.3558 0.0156\nv 0.012672 -0.032552 0.101167\nvn 0.9344 -0.3558 0.0156\nv 0.012599 -0.033029 0.094667\nvn 0.9344 -0.3558 0.0156\nv -0.012617 -0.032965 0.094667\nvn -0.9347 -0.3554 -0.0085\nv -0.014027 -0.029412 0.101167\nvn -0.934 -0.3573 -0.0073\nv -0.01378 -0.029929 0.094667\nvn -0.9338 -0.3577 -0.007\nv -0.012579 -0.033225 0.101167\nvn -0.9348 -0.355 -0.0087\nv -0.01378 -0.029929 0.094667\nvn -0.8152 -0.579 0.0151\nv -0.014027 -0.029412 0.101167\nvn -0.8152 -0.579 0.0151\nv -0.014844 -0.028432 0.094628\nvn -0.8152 -0.579 0.0151\nv -0.014844 -0.028432 0.094628\nvn -0.7258 -0.6879 -0.0052\nv -0.015872 -0.027348 0.094624\nvn -0.7258 -0.6879 -0.0052\nv -0.015001 -0.028255 0.093082\nvn -0.7258 -0.6879 -0.0052\nv -0.014844 -0.028432 0.094628\nvn -0.7257 -0.6879 -0.0124\nv -0.014027 -0.029412 0.101167\nvn -0.7262 -0.6874 -0.0121\nv -0.015872 -0.027348 0.094624\nvn -0.7274 -0.6861 -0.0113\nv -0.016317 -0.026981 0.101162\nvn -0.7278 -0.6857 -0.0111\nv -0.015872 -0.027348 0.094624\nvn -0.5733 -0.8193 0.0069\nv -0.017519 0.02619 0.095556\nvn -0.5715 0.8206 0.0013\nv -0.016061 0.027196 0.101163\nvn -0.5715 0.8206 0.0013\nv -0.015954 0.027281 0.094673\nvn -0.5715 0.8206 0.0013\nv -0.015954 0.027281 0.094673\nvn -0.7093 0.7049 -0.0024\nv -0.016061 0.027196 0.101163\nvn -0.7093 0.7049 -0.0024\nv -0.014992 0.028244 0.093055\nvn -0.7093 0.7049 -0.0024\nv -0.014992 0.028244 0.093055\nvn -0.7402 0.6723 -0.0107\nv -0.016061 0.027196 0.101163\nvn -0.7403 0.6722 -0.0108\nv -0.01485 0.028425 0.094617\nvn -0.7403 0.6722 -0.0108\nv -0.014213 0.029234 0.101167\nvn -0.7406 0.6718 -0.0109\nv -0.01485 0.028425 0.094617\nvn -0.8149 0.5795 0.0077\nv -0.014213 0.029234 0.101167\nvn -0.8149 0.5795 0.0077\nv -0.01378 0.029929 0.094667\nvn -0.8149 0.5795 0.0077\nv -0.014213 0.029234 0.101167\nvn -0.907 0.4209 -0.0154\nv -0.012673 0.032552 0.101167\nvn -0.907 0.4209 -0.0154\nv -0.01378 0.029929 0.094667\nvn -0.907 0.4209 -0.0154\nv -0.01378 0.029929 0.094667\nvn -0.9344 0.3558 0.0155\nv -0.012673 0.032552 0.101167\nvn -0.9344 0.3558 0.0155\nv -0.012599 0.033029 0.094667\nvn -0.9344 0.3558 0.0155\nv -0.015397 0.019662 0.101967\nvn -0.5897 -0.8075 -0.0147\nv -0.016481 0.020453 0.101967\nvn -0.5897 -0.8075 -0.0147\nv -0.015406 0.019783 0.095667\nvn -0.5897 -0.8075 -0.0147\nv -0.017393 0.014587 0.102107\nvn -0.3519 0.936 -0.0127\nv -0.016236 0.015021 0.101966\nvn -0.3519 0.936 -0.0127\nv -0.016611 0.014794 0.095667\nvn -0.3519 0.936 -0.0127\nv -0.015406 0.019783 0.095667\nvn -0.4199 -0.9072 0.0249\nv -0.016481 0.020453 0.101967\nvn -0.4199 -0.9072 0.0249\nv -0.017389 0.020701 0.095667\nvn -0.4199 -0.9072 0.0249\nv -0.016481 0.020453 0.101967\nvn -0.1796 -0.9837 -0.0128\nv -0.017817 0.020697 0.101963\nvn -0.1796 -0.9837 -0.0128\nv -0.017389 0.020701 0.095667\nvn -0.1796 -0.9837 -0.0128\nv -0.016611 0.014794 0.095667\nvn -0.6615 0.7499 0.0128\nv -0.015228 0.015906 0.101966\nvn -0.664 0.7476 0.0138\nv -0.01498 0.016247 0.095667\nvn -0.665 0.7467 0.0141\nv -0.016236 0.015021 0.101966\nvn -0.6603 0.7509 0.0124\nv -0.015228 0.015906 0.101966\nvn -0.92 0.3915 -0.0151\nv -0.014703 0.01714 0.101967\nvn -0.92 0.3915 -0.0151\nv -0.01498 0.016247 0.095667\nvn -0.92 0.3915 -0.0151\nv -0.01498 0.016247 0.095667\nvn -0.9819 0.1887 0.0163\nv -0.014703 0.01714 0.101967\nvn -0.9819 0.1887 0.0163\nv -0.014663 0.017895 0.095667\nvn -0.9819 0.1887 0.0163\nv -0.014703 0.01714 0.101967\nvn -0.9989 -0.045 -0.0118\nv -0.014764 0.01848 0.101967\nvn -0.9989 -0.045 -0.0118\nv -0.014663 0.017895 0.095667\nvn -0.9989 -0.045 -0.0118\nv -0.014663 0.017895 0.095667\nvn -0.9304 -0.3662 0.0191\nv -0.014764 0.01848 0.101967\nvn -0.9304 -0.3662 0.0191\nv -0.015406 0.019783 0.095667\nvn -0.9304 -0.3662 0.0191\nv -0.014764 0.01848 0.101967\nvn -0.8812 -0.4726 -0.0079\nv -0.015397 0.019662 0.101967\nvn -0.8812 -0.4726 -0.0079\nv -0.015406 0.019783 0.095667\nvn -0.8812 -0.4726 -0.0079\nv -0.015406 0.019783 0.095667\nvn -1.22465e-16 0 1\nv -0.017389 0.020701 0.095667\nvn -1.22465e-16 0 1\nv -0.018879 0.020452 0.095667\nvn -1.22465e-16 0 1\nv -0.020084 0.019531 0.095667\nvn -1.22465e-16 0 1\nv -0.020752 0.017623 0.095667\nvn -1.22465e-16 0 1\nv -0.01498 0.016247 0.095667\nvn -1.22465e-16 0 1\nv -0.020115 0.015889 0.095667\nvn -1.22465e-16 0 1\nv -0.018797 0.014836 0.095667\nvn -1.22465e-16 0 1\nv -0.016611 0.014794 0.095667\nvn -1.22465e-16 0 1\nv -0.014663 0.017895 0.095667\nvn -1.22465e-16 0 1\nv 0.016899 0.026596 0.095407\nvn 0.7917 0.3721 -0.4844\nv 0.016436 0.026056 0.094235\nvn 0.7917 0.3721 -0.4844\nv 0.015862 0.026677 0.093775\nvn 0.7917 0.3721 -0.4844\nv 0.016899 0.026596 0.095407\nvn 0.7736 0.4248 -0.4703\nv 0.015862 0.026677 0.093775\nvn 0.7736 0.4248 -0.4703\nv 0.015531 0.02769 0.094145\nvn 0.7736 0.4248 -0.4703\nv 0.016899 0.026596 0.095407\nvn 0.6811 0.5246 -0.5109\nv 0.017342 0.025245 0.09461\nvn 0.6811 0.5246 -0.5109\nv 0.016436 0.026056 0.094235\nvn 0.6811 0.5246 -0.5109\nv 0.015221 0.027524 0.092823\nvn 0.9394 0.3234 -0.1141\nv 0.015029 0.027838 0.09214\nvn 0.9394 0.3234 -0.1141\nv 0.015001 0.028255 0.093082\nvn 0.9394 0.3234 -0.1141\nv 0.015531 0.02769 0.094145\nvn 0.8968 0.3609 -0.2559\nv 0.015221 0.027524 0.092823\nvn 0.8968 0.3609 -0.2559\nv 0.015001 0.028255 0.093082\nvn 0.8968 0.3609 -0.2559\nv 0.015531 0.02769 0.094145\nvn 0.8871 0.3838 -0.2565\nv 0.015862 0.026677 0.093775\nvn 0.8871 0.3838 -0.2565\nv 0.015221 0.027524 0.092823\nvn 0.8871 0.3838 -0.2565\nv 0.021557 -0.023002 0.095667\nvn 0.4582 -0.5598 -0.6905\nv 0.017612 -0.026145 0.095597\nvn 0.4582 -0.5598 -0.6905\nv 0.017615 -0.024968 0.094645\nvn 0.4582 -0.5598 -0.6905\nv 0.021557 -0.023002 0.095667\nvn 0.4437 -0.5047 -0.7405\nv 0.017615 -0.024968 0.094645\nvn 0.4437 -0.5047 -0.7405\nv 0.022673 -0.020553 0.094667\nvn 0.4437 -0.5047 -0.7405\nv 0.0246 -0.019714 0.095667\nvn 0.5609 -0.5191 -0.6449\nv 0.021557 -0.023002 0.095667\nvn 0.5609 -0.5191 -0.6449\nv 0.022673 -0.020553 0.094667\nvn 0.5609 -0.5191 -0.6449\nv 0.027146 -0.016028 0.095667\nvn 0.5512 -0.3808 -0.7424\nv 0.0246 -0.019714 0.095667\nvn 0.5512 -0.3808 -0.7424\nv 0.022673 -0.020553 0.094667\nvn 0.5512 -0.3808 -0.7424\nv 0.027146 -0.016028 0.095667\nvn 0.5358 -0.3608 -0.7634\nv 0.022673 -0.020553 0.094667\nvn 0.5358 -0.3608 -0.7634\nv 0.027569 -0.013283 0.094667\nvn 0.5358 -0.3608 -0.7634\nv 0.029144 -0.012019 0.095667\nvn 0.6837 -0.3407 -0.6454\nv 0.027146 -0.016028 0.095667\nvn 0.6837 -0.3407 -0.6454\nv 0.027569 -0.013283 0.094667\nvn 0.6837 -0.3407 -0.6454\nv 0.030553 -0.007766 0.095667\nvn 0.6145 -0.1937 -0.7648\nv 0.027569 -0.013283 0.094667\nvn 0.6145 -0.1937 -0.7648\nv 0.030204 -0.004925 0.094667\nvn 0.6145 -0.1937 -0.7648\nv 0.030553 -0.007766 0.095667\nvn 0.6396 -0.212 -0.7389\nv 0.029144 -0.012019 0.095667\nvn 0.6396 -0.212 -0.7389\nv 0.027569 -0.013283 0.094667\nvn 0.6396 -0.212 -0.7389\nv 0.031345 -0.003356 0.095667\nvn 0.7514 -0.135 -0.6459\nv 0.030553 -0.007766 0.095667\nvn 0.7514 -0.135 -0.6459\nv 0.030204 -0.004925 0.094667\nvn 0.7514 -0.135 -0.6459\nv 0.031505 0.001121 0.095667\nvn 0.6773 -0.0241 -0.7353\nv 0.031345 -0.003356 0.095667\nvn 0.6773 -0.0241 -0.7353\nv 0.030204 -0.004925 0.094667\nvn 0.6773 -0.0241 -0.7353\nv 0.031505 0.001121 0.095667\nvn 0.735 -0.0463 -0.6765\nv 0.030204 -0.004925 0.094667\nvn 0.735 -0.0463 -0.6765\nv 0.030549 0.000479 0.094672\nvn 0.735 -0.0463 -0.6765\nv 0.031505 0.001121 0.095667\nvn 0.6921 0.0808 -0.7172\nv 0.030549 0.000479 0.094672\nvn 0.6921 0.0808 -0.7172\nv 0.029772 0.00708 0.094667\nvn 0.6921 0.0808 -0.7172\nv 0.031027 0.005575 0.095667\nvn 0.6729 0.0721 -0.7363\nv 0.031505 0.001121 0.095667\nvn 0.6729 0.0721 -0.7363\nv 0.029772 0.00708 0.094667\nvn 0.6729 0.0721 -0.7363\nv 0.029924 0.009917 0.095667\nvn 0.74 0.1881 -0.6458\nv 0.031027 0.005575 0.095667\nvn 0.74 0.1881 -0.6458\nv 0.029772 0.00708 0.094667\nvn 0.74 0.1881 -0.6458\nv 0.029924 0.009917 0.095667\nvn 0.5993 0.2374 -0.7645\nv 0.029772 0.00708 0.094667\nvn 0.5993 0.2374 -0.7645\nv 0.026545 0.015228 0.094667\nvn 0.5993 0.2374 -0.7645\nv 0.028216 0.014059 0.095667\nvn 0.6221 0.2566 -0.7397\nv 0.029924 0.009917 0.095667\nvn 0.6221 0.2566 -0.7397\nv 0.026545 0.015228 0.094667\nvn 0.6221 0.2566 -0.7397\nv 0.025938 0.017917 0.095667\nvn 0.6579 0.3884 -0.6452\nv 0.028216 0.014059 0.095667\nvn 0.6579 0.3884 -0.6452\nv 0.026545 0.015228 0.094667\nvn 0.6579 0.3884 -0.6452\nv 0.025938 0.017917 0.095667\nvn 0.5212 0.3983 -0.7548\nv 0.026545 0.015228 0.094667\nvn 0.5212 0.3983 -0.7548\nv 0.021885 0.021325 0.094667\nvn 0.5212 0.3983 -0.7548\nv 0.021995 0.022659 0.095666\nvn 0.5608 0.4661 -0.6843\nv 0.025938 0.017917 0.095667\nvn 0.5608 0.4661 -0.6843\nv 0.021885 0.021325 0.094667\nvn 0.5608 0.4661 -0.6843\nv 0.021995 0.022659 0.095666\nvn 0.4502 0.5111 -0.7322\nv 0.021885 0.021325 0.094667\nvn 0.4502 0.5111 -0.7322\nv 0.017342 0.025245 0.09461\nvn 0.4502 0.5111 -0.7322\nv 0.016899 0.026596 0.095407\nvn 0.4659 0.5579 -0.6868\nv 0.021995 0.022659 0.095666\nvn 0.4659 0.5579 -0.6868\nv 0.017342 0.025245 0.09461\nvn 0.4659 0.5579 -0.6868\nv 0.017612 -0.026145 0.095597\nvn 0.6155 -0.4967 -0.612\nv 0.016819 -0.02569 0.09443\nvn 0.6155 -0.4967 -0.612\nv 0.017615 -0.024968 0.094645\nvn 0.6155 -0.4967 -0.612\nv 0.014991 -0.028244 0.093054\nvn 0.8851 -0.326 -0.3323\nv 0.015528 -0.027109 0.093371\nvn 0.8851 -0.326 -0.3323\nv 0.015953 -0.027281 0.094673\nvn 0.8851 -0.326 -0.3323\nv 0.014991 -0.028244 0.093054\nvn 0.9351 -0.3387 -0.1044\nv 0.015023 -0.027848 0.092052\nvn 0.9351 -0.3387 -0.1044\nv 0.01521 -0.027562 0.0928\nvn 0.9351 -0.3387 -0.1044\nv 0.016819 -0.02569 0.09443\nvn 0.6492 -0.4469 -0.6155\nv 0.017612 -0.026145 0.095597\nvn 0.6492 -0.4469 -0.6155\nv 0.015953 -0.027281 0.094673\nvn 0.6492 -0.4469 -0.6155\nv 0.015953 -0.027281 0.094673\nvn 0.859 -0.3896 -0.3322\nv 0.015528 -0.027109 0.093371\nvn 0.859 -0.3896 -0.3322\nv 0.016066 -0.026435 0.093972\nvn 0.859 -0.3896 -0.3322\nv 0.014991 -0.028244 0.093054\nvn 0.905 -0.369 -0.2116\nv 0.01521 -0.027562 0.0928\nvn 0.905 -0.369 -0.2116\nv 0.015528 -0.027109 0.093371\nvn 0.905 -0.369 -0.2116\nv 0.016066 -0.026435 0.093972\nvn 0.7508 -0.4778 -0.4561\nv 0.016819 -0.02569 0.09443\nvn 0.7508 -0.4778 -0.4561\nv 0.015953 -0.027281 0.094673\nvn 0.7508 -0.4778 -0.4561\nv -0.015872 -0.027348 0.094624\nvn -0.8013 -0.4664 -0.3747\nv -0.016472 -0.02602 0.094256\nvn -0.8013 -0.4664 -0.3747\nv -0.015853 -0.026693 0.09377\nvn -0.8013 -0.4664 -0.3747\nv -0.015872 -0.027348 0.094624\nvn -0.6593 -0.4625 -0.5928\nv -0.017334 -0.025241 0.094607\nvn -0.6592 -0.4624 -0.593\nv -0.016472 -0.02602 0.094256\nvn -0.6595 -0.4626 -0.5925\nv -0.017521 -0.026186 0.095546\nvn -0.6579 -0.4615 -0.5951\nv -0.015222 -0.027524 0.092825\nvn -0.9392 -0.324 -0.1139\nv -0.01503 -0.027838 0.09214\nvn -0.9392 -0.324 -0.1139\nv -0.015001 -0.028255 0.093082\nvn -0.9392 -0.324 -0.1139\nv -0.015872 -0.027348 0.094624\nvn -0.8856 -0.3678 -0.2838\nv -0.015222 -0.027524 0.092825\nvn -0.8856 -0.3678 -0.2838\nv -0.015001 -0.028255 0.093082\nvn -0.8856 -0.3678 -0.2838\nv -0.015872 -0.027348 0.094624\nvn -0.8914 -0.3503 -0.2876\nv -0.015853 -0.026693 0.09377\nvn -0.8914 -0.3503 -0.2876\nv -0.015222 -0.027524 0.092825\nvn -0.8914 -0.3503 -0.2876\nv -0.020726 0.023754 0.095667\nvn -0.4472 0.5568 -0.7\nv -0.017519 0.02619 0.095556\nvn -0.4472 0.5568 -0.7\nv -0.017622 0.024964 0.094647\nvn -0.4472 0.5568 -0.7\nv -0.020726 0.023754 0.095667\nvn -0.4402 0.5008 -0.7453\nv -0.017622 0.024964 0.094647\nvn -0.4402 0.5008 -0.7453\nv -0.022674 0.020553 0.094667\nvn -0.4402 0.5008 -0.7453\nv -0.023884 0.020576 0.095667\nvn -0.5341 0.5306 -0.6582\nv -0.020726 0.023754 0.095667\nvn -0.5341 0.5306 -0.6582\nv -0.022674 0.020553 0.094667\nvn -0.5341 0.5306 -0.6582\nv -0.026559 0.016983 0.095667\nvn -0.5717 0.4258 -0.7013\nv -0.023884 0.020576 0.095667\nvn -0.5717 0.4258 -0.7013\nv -0.022674 0.020553 0.094667\nvn -0.5717 0.4258 -0.7013\nv -0.026559 0.016983 0.095667\nvn -0.5236 0.3527 -0.7755\nv -0.022674 0.020553 0.094667\nvn -0.5236 0.3527 -0.7755\nv -0.02757 0.013283 0.094667\nvn -0.5236 0.3527 -0.7755\nv -0.028699 0.013047 0.095667\nvn -0.66 0.3587 -0.6601\nv -0.026559 0.016983 0.095667\nvn -0.66 0.3587 -0.6601\nv -0.02757 0.013283 0.094667\nvn -0.66 0.3587 -0.6601\nv -0.030258 0.008847 0.095667\nvn -0.6709 0.2491 -0.6984\nv -0.028699 0.013047 0.095667\nvn -0.6709 0.2491 -0.6984\nv -0.02757 0.013283 0.094667\nvn -0.6709 0.2491 -0.6984\nv -0.030258 0.008847 0.095667\nvn -0.6016 0.1896 -0.776\nv -0.02757 0.013283 0.094667\nvn -0.6016 0.1896 -0.776\nv -0.030204 0.004925 0.094667\nvn -0.6016 0.1896 -0.776\nv -0.031207 0.004469 0.095667\nvn -0.7326 0.1588 -0.6619\nv -0.030258 0.008847 0.095667\nvn -0.7326 0.1588 -0.6619\nv -0.030204 0.004925 0.094667\nvn -0.7326 0.1588 -0.6619\nv -0.031525 0 0.095667\nvn -0.7169 0.0511 -0.6953\nv -0.031207 0.004469 0.095667\nvn -0.7169 0.0511 -0.6953\nv -0.030204 0.004925 0.094667\nvn -0.7169 0.0511 -0.6953\nv -0.031525 0 0.095667\nvn -0.7025 0.0442 -0.7103\nv -0.030204 0.004925 0.094667\nvn -0.7025 0.0442 -0.7103\nv -0.03055 -0.000479 0.094672\nvn -0.7025 0.0442 -0.7103\nv -0.031207 -0.004469 0.095667\nvn -0.661 -0.0772 -0.7464\nv -0.03055 -0.000479 0.094672\nvn -0.661 -0.0772 -0.7464\nv -0.029773 -0.00708 0.094667\nvn -0.661 -0.0772 -0.7464\nv -0.031207 -0.004469 0.095667\nvn -0.7253 -0.0517 -0.6865\nv -0.031525 0 0.095667\nvn -0.7253 -0.0517 -0.6865\nv -0.03055 -0.000479 0.094672\nvn -0.7253 -0.0517 -0.6865\nv -0.030258 -0.008847 0.095667\nvn -0.7453 -0.1615 -0.6469\nv -0.031207 -0.004469 0.095667\nvn -0.7453 -0.1615 -0.6469\nv -0.029773 -0.00708 0.094667\nvn -0.7453 -0.1615 -0.6469\nv -0.028699 -0.013047 0.095667\nvn -0.6402 -0.2377 -0.7305\nv -0.030258 -0.008847 0.095667\nvn -0.6402 -0.2377 -0.7305\nv -0.029773 -0.00708 0.094667\nvn -0.6402 -0.2377 -0.7305\nv -0.028699 -0.013047 0.095667\nvn -0.5956 -0.2359 -0.7679\nv -0.029773 -0.00708 0.094667\nvn -0.5956 -0.2359 -0.7679\nv -0.026545 -0.015228 0.094667\nvn -0.5956 -0.2359 -0.7679\nv -0.026559 -0.016983 0.095667\nvn -0.6693 -0.3638 -0.6478\nv -0.028699 -0.013047 0.095667\nvn -0.6693 -0.3638 -0.6478\nv -0.026545 -0.015228 0.094667\nvn -0.6693 -0.3638 -0.6478\nv -0.023884 -0.020576 0.095667\nvn -0.5505 -0.41 -0.7272\nv -0.026559 -0.016983 0.095667\nvn -0.5505 -0.41 -0.7272\nv -0.026545 -0.015228 0.094667\nvn -0.5505 -0.41 -0.7272\nv -0.023884 -0.020576 0.095667\nvn -0.5258 -0.4019 -0.7496\nv -0.026545 -0.015228 0.094667\nvn -0.5258 -0.4019 -0.7496\nv -0.021886 -0.021325 0.094667\nvn -0.5258 -0.4019 -0.7496\nv -0.020726 -0.023754 0.095667\nvn -0.53 -0.5267 -0.6646\nv -0.023884 -0.020576 0.095667\nvn -0.53 -0.5267 -0.6646\nv -0.021886 -0.021325 0.094667\nvn -0.53 -0.5267 -0.6646\nv -0.020726 -0.023754 0.095667\nvn -0.4533 -0.5157 -0.727\nv -0.021886 -0.021325 0.094667\nvn -0.4533 -0.5157 -0.727\nv -0.017334 -0.025241 0.094607\nvn -0.4533 -0.5157 -0.727\nv -0.017521 -0.026186 0.095546\nvn -0.4632 -0.5771 -0.6726\nv -0.020726 -0.023754 0.095667\nvn -0.4632 -0.5771 -0.6726\nv -0.017334 -0.025241 0.094607\nvn -0.4632 -0.5771 -0.6726\nv -0.017519 0.02619 0.095556\nvn -0.6229 0.4991 -0.6024\nv -0.016683 0.025813 0.09438\nvn -0.6229 0.4991 -0.6024\nv -0.017622 0.024964 0.094647\nvn -0.6229 0.4991 -0.6024\nv -0.016028 0.026492 0.093938\nvn -0.7732 0.4694 -0.4264\nv -0.016683 0.025813 0.09438\nvn -0.7732 0.4694 -0.4264\nv -0.015954 0.027281 0.094673\nvn -0.7732 0.4694 -0.4264\nv -0.014992 0.028244 0.093055\nvn -0.8851 0.326 -0.3323\nv -0.015528 0.027109 0.093371\nvn -0.8851 0.326 -0.3323\nv -0.015954 0.027281 0.094673\nvn -0.8851 0.326 -0.3323\nv -0.014992 0.028244 0.093055\nvn -0.9351 0.3387 -0.1043\nv -0.015023 0.027848 0.092052\nvn -0.9351 0.3387 -0.1043\nv -0.01521 0.027562 0.0928\nvn -0.9351 0.3387 -0.1043\nv -0.016683 0.025813 0.09438\nvn -0.6552 0.4472 -0.6088\nv -0.017519 0.02619 0.095556\nvn -0.6552 0.4472 -0.6088\nv -0.015954 0.027281 0.094673\nvn -0.6552 0.4472 -0.6088\nv -0.015954 0.027281 0.094673\nvn -0.859 0.3897 -0.3322\nv -0.015528 0.027109 0.093371\nvn -0.859 0.3897 -0.3322\nv -0.016028 0.026492 0.093938\nvn -0.859 0.3897 -0.3322\nv -0.014992 0.028244 0.093055\nvn -0.905 0.369 -0.2116\nv -0.01521 0.027562 0.0928\nvn -0.905 0.369 -0.2116\nv -0.015528 0.027109 0.093371\nvn -0.905 0.369 -0.2116\nv -0.004698 -0.031247 0.101167\nvn -0.0219 -0.7101 0.7038\nv 0.002155 -0.031458 0.101167\nvn -0.0219 -0.7101 0.7038\nv 0.00215 -0.030467 0.102167\nvn -0.0219 -0.7101 0.7038\nv -0.004698 -0.031247 0.101167\nvn -0.027 -0.6902 0.7232\nv 0.00215 -0.030467 0.102167\nvn -0.027 -0.6902 0.7232\nv -0.005005 -0.030187 0.102167\nvn -0.027 -0.6902 0.7232\nv -0.012369 -0.029044 0.101167\nvn -0.2018 -0.7025 0.6825\nv -0.004698 -0.031247 0.101167\nvn -0.2018 -0.7025 0.6825\nv -0.005005 -0.030187 0.102167\nvn -0.2018 -0.7025 0.6825\nv -0.012369 -0.029044 0.101167\nvn -0.2008 -0.6588 0.725\nv -0.005005 -0.030187 0.102167\nvn -0.2008 -0.6588 0.725\nv -0.012391 -0.027936 0.102167\nvn -0.2008 -0.6588 0.725\nv -0.016317 -0.026981 0.101162\nvn -0.333 -0.6357 0.6964\nv -0.012369 -0.029044 0.101167\nvn -0.333 -0.6357 0.6964\nv -0.012391 -0.027936 0.102167\nvn -0.333 -0.6357 0.6964\nv -0.016317 -0.026981 0.101162\nvn -0.3304 -0.552 0.7656\nv -0.012391 -0.027936 0.102167\nvn -0.3304 -0.552 0.7656\nv -0.01905 -0.02395 0.102167\nvn -0.3304 -0.552 0.7656\nv -0.019796 -0.024556 0.101166\nvn -0.4199 -0.6036 0.6778\nv -0.016317 -0.026981 0.101162\nvn -0.4199 -0.6036 0.6778\nv -0.01905 -0.02395 0.102167\nvn -0.4199 -0.6036 0.6778\nv -0.023475 -0.021041 0.101167\nvn -0.5002 -0.5239 0.6894\nv -0.019796 -0.024556 0.101166\nvn -0.5002 -0.5239 0.6894\nv -0.01905 -0.02395 0.102167\nvn -0.5002 -0.5239 0.6894\nv -0.023475 -0.021041 0.101167\nvn -0.4597 -0.4326 0.7756\nv -0.01905 -0.02395 0.102167\nvn -0.4597 -0.4326 0.7756\nv -0.025061 -0.017564 0.102167\nvn -0.4597 -0.4326 0.7756\nv -0.026228 -0.017491 0.101167\nvn -0.594 -0.4605 0.6596\nv -0.023475 -0.021041 0.101167\nvn -0.594 -0.4605 0.6596\nv -0.025061 -0.017564 0.102167\nvn -0.594 -0.4605 0.6596\nv -0.028447 -0.013587 0.101167\nvn -0.6214 -0.3532 0.6993\nv -0.026228 -0.017491 0.101167\nvn -0.6214 -0.3532 0.6993\nv -0.025061 -0.017564 0.102167\nvn -0.6214 -0.3532 0.6993\nv -0.028447 -0.013587 0.101167\nvn -0.563 -0.2842 0.776\nv -0.025061 -0.017564 0.102167\nvn -0.563 -0.2842 0.776\nv -0.029015 -0.009732 0.102167\nvn -0.563 -0.2842 0.776\nv -0.030089 -0.009407 0.101167\nvn -0.6984 -0.2743 0.661\nv -0.028447 -0.013587 0.101167\nvn -0.6984 -0.2743 0.661\nv -0.029015 -0.009732 0.102167\nvn -0.6984 -0.2743 0.661\nv -0.03112 -0.005035 0.101167\nvn -0.6983 -0.1647 0.6966\nv -0.030089 -0.009407 0.101167\nvn -0.6983 -0.1647 0.6966\nv -0.029015 -0.009732 0.102167\nvn -0.6983 -0.1647 0.6966\nv -0.03112 -0.005035 0.101167\nvn -0.6201 -0.1127 0.7764\nv -0.029015 -0.009732 0.102167\nvn -0.6201 -0.1127 0.7764\nv -0.030584 -0.0011 0.102167\nvn -0.6201 -0.1127 0.7764\nv -0.03152 -0.000562 0.101167\nvn -0.7459 -0.0666 0.6628\nv -0.03112 -0.005035 0.101167\nvn -0.7459 -0.0666 0.6628\nv -0.030584 -0.0011 0.102167\nvn -0.7459 -0.0666 0.6628\nv -0.03128 0.003923 0.101167\nvn -0.7189 0.0385 0.6941\nv -0.03152 -0.000562 0.101167\nvn -0.7189 0.0385 0.6941\nv -0.030584 -0.0011 0.102167\nvn -0.7189 0.0385 0.6941\nv -0.03128 0.003923 0.101167\nvn -0.6261 0.0678 0.7768\nv -0.030584 -0.0011 0.102167\nvn -0.6261 0.0678 0.7768\nv -0.029639 0.007622 0.102167\nvn -0.6261 0.0678 0.7768\nv -0.030405 0.008328 0.101167\nvn -0.733 0.1456 0.6645\nv -0.03128 0.003923 0.101167\nvn -0.733 0.1456 0.6645\nv -0.029639 0.007622 0.102167\nvn -0.733 0.1456 0.6645\nv -0.028913 0.012564 0.101167\nvn -0.6813 0.24 0.6916\nv -0.030405 0.008328 0.101167\nvn -0.6813 0.24 0.6916\nv -0.029639 0.007622 0.102167\nvn -0.6813 0.24 0.6916\nv -0.028913 0.012564 0.101167\nvn -0.5808 0.2425 0.7771\nv -0.029639 0.007622 0.102167\nvn -0.5808 0.2425 0.7771\nv -0.026259 0.015718 0.102167\nvn -0.5808 0.2425 0.7771\nv -0.026834 0.016546 0.101167\nvn -0.661 0.3452 0.6663\nv -0.028913 0.012564 0.101167\nvn -0.661 0.3452 0.6663\nv -0.026259 0.015718 0.102167\nvn -0.661 0.3452 0.6663\nv -0.024211 0.020191 0.101167\nvn -0.5882 0.4233 0.6891\nv -0.026834 0.016546 0.101167\nvn -0.5882 0.4233 0.6891\nv -0.026259 0.015718 0.102167\nvn -0.5882 0.4233 0.6891\nv -0.024211 0.020191 0.101167\nvn -0.4878 0.3971 0.7774\nv -0.026259 0.015718 0.102167\nvn -0.4878 0.3971 0.7774\nv -0.02072 0.022522 0.102167\nvn -0.4878 0.3971 0.7774\nv -0.021096 0.023426 0.101167\nvn -0.536 0.516 0.6682\nv -0.024211 0.020191 0.101167\nvn -0.536 0.516 0.6682\nv -0.02072 0.022522 0.102167\nvn -0.536 0.516 0.6682\nv -0.016061 0.027196 0.101163\nvn -0.4342 0.5808 0.6886\nv -0.021096 0.023426 0.101167\nvn -0.4342 0.5808 0.6886\nv -0.02072 0.022522 0.102167\nvn -0.4342 0.5808 0.6886\nv -0.016061 0.027196 0.101163\nvn -0.3967 0.5529 0.7328\nv -0.02072 0.022522 0.102167\nvn -0.3967 0.5529 0.7328\nv -0.015258 0.026441 0.102167\nvn -0.3967 0.5529 0.7328\nv -0.016061 0.027196 0.101163\nvn -0.2897 0.6392 0.7124\nv -0.015258 0.026441 0.102167\nvn -0.2897 0.6392 0.7124\nv -0.009215 0.029179 0.102167\nvn -0.2897 0.6392 0.7124\nv -0.008955 0.030303 0.101167\nvn -0.2944 0.6725 0.6791\nv -0.016061 0.027196 0.101163\nvn -0.2944 0.6725 0.6791\nv -0.009215 0.029179 0.102167\nvn -0.2944 0.6725 0.6791\nv -0.008955 0.030303 0.101167\nvn -0.1066 0.6747 0.7304\nv -0.009215 0.029179 0.102167\nvn -0.1066 0.6747 0.7304\nv 0 0.030635 0.102167\nvn -0.1066 0.6747 0.7304\nv -0.002156 0.031458 0.101167\nvn -0.1087 0.6398 0.7608\nv -0.008955 0.030303 0.101167\nvn -0.1087 0.6398 0.7608\nv 0 0.030635 0.102167\nvn -0.1087 0.6398 0.7608\nv -0.002115 -0.014669 0.104667\nvn -0.0785 -0.7502 0.6565\nv -0.003647 -0.01538 0.103672\nvn -0.0785 -0.7502 0.6565\nv -5.5e-05 -0.015762 0.103664\nvn -0.0785 -0.7502 0.6565\nv -0.003647 -0.01538 0.103672\nvn -0.2141 -0.6087 0.764\nv -0.002115 -0.014669 0.104667\nvn -0.2141 -0.6087 0.764\nv -0.007586 -0.012745 0.104667\nvn -0.2141 -0.6087 0.764\nv -0.007586 -0.012745 0.104667\nvn -0.2466 -0.6427 0.7254\nv -0.007234 -0.014017 0.103659\nvn -0.2466 -0.6427 0.7254\nv -0.003647 -0.01538 0.103672\nvn -0.2466 -0.6427 0.7254\nv -0.007586 -0.012745 0.104667\nvn -0.4117 -0.633 0.6556\nv -0.009883 -0.012295 0.10366\nvn -0.4117 -0.633 0.6556\nv -0.007234 -0.014017 0.103659\nvn -0.4117 -0.633 0.6556\nv -0.011363 -0.00948 0.104667\nvn -0.4285 -0.4956 0.7555\nv -0.009883 -0.012295 0.10366\nvn -0.4285 -0.4956 0.7555\nv -0.007586 -0.012745 0.104667\nvn -0.4285 -0.4956 0.7555\nv -0.011363 -0.00948 0.104667\nvn -0.5146 -0.5157 0.685\nv -0.01235 -0.009829 0.103663\nvn -0.5146 -0.5157 0.685\nv -0.009883 -0.012295 0.10366\nvn -0.5146 -0.5157 0.685\nv -0.014142 -0.006988 0.103669\nvn -0.5925 -0.3754 0.7128\nv -0.01235 -0.009829 0.103663\nvn -0.5925 -0.3754 0.7128\nv -0.011363 -0.00948 0.104667\nvn -0.5925 -0.3754 0.7128\nv -0.014142 -0.006988 0.103669\nvn -0.5743 -0.3427 0.7435\nv -0.011363 -0.00948 0.104667\nvn -0.5743 -0.3427 0.7435\nv -0.013802 -0.005392 0.104667\nvn -0.5743 -0.3427 0.7435\nv -0.013802 -0.005392 0.104667\nvn -0.7096 -0.2589 0.6553\nv -0.01536 -0.003655 0.103667\nvn -0.7096 -0.2589 0.6553\nv -0.014142 -0.006988 0.103669\nvn -0.7096 -0.2589 0.6553\nv -0.01536 -0.003655 0.103667\nvn -0.6363 -0.1329 0.7599\nv -0.013802 -0.005392 0.104667\nvn -0.6363 -0.1329 0.7599\nv -0.014759 -0.000813 0.104667\nvn -0.6363 -0.1329 0.7599\nv -0.014759 -0.000813 0.104667\nvn -0.7484 -0.0738 0.6592\nv -0.015786 0.000836 0.103686\nvn -0.7484 -0.0738 0.6592\nv -0.01536 -0.003655 0.103667\nvn -0.7484 -0.0738 0.6592\nv -0.014514 0.002915 0.104667\nvn -0.6532 0.043 0.7559\nv -0.015786 0.000836 0.103686\nvn -0.6532 0.043 0.7559\nv -0.014759 -0.000813 0.104667\nvn -0.6532 0.043 0.7559\nv -0.014514 0.002915 0.104667\nvn -0.7441 0.1479 0.6514\nv -0.014996 0.00494 0.103656\nvn -0.7441 0.1479 0.6514\nv -0.015786 0.000836 0.103686\nvn -0.7441 0.1479 0.6514\nv -0.012848 0.007397 0.104667\nvn -0.6166 0.2291 0.7532\nv -0.014996 0.00494 0.103656\nvn -0.6166 0.2291 0.7532\nv -0.014514 0.002915 0.104667\nvn -0.6166 0.2291 0.7532\nv -0.012848 0.007397 0.104667\nvn -0.6863 0.3342 0.646\nv -0.013073 0.008897 0.103653\nvn -0.6863 0.3342 0.646\nv -0.014996 0.00494 0.103656\nvn -0.6863 0.3342 0.646\nv -0.010211 0.010676 0.104667\nvn -0.5458 0.491 0.6789\nv -0.010392 0.011867 0.10366\nvn -0.5458 0.491 0.6789\nv -0.013073 0.008897 0.103653\nvn -0.5458 0.491 0.6789\nv -0.010211 0.010676 0.104667\nvn -0.5243 0.4218 0.7397\nv -0.013073 0.008897 0.103653\nvn -0.5243 0.4218 0.7397\nv -0.012848 0.007397 0.104667\nvn -0.5243 0.4218 0.7397\nv -0.007183 0.012948 0.104667\nvn -0.4165 0.5964 0.6862\nv -0.007472 0.013909 0.103658\nvn -0.4165 0.5964 0.6862\nv -0.010392 0.011867 0.10366\nvn -0.4165 0.5964 0.6862\nv -0.007183 0.012948 0.104667\nvn -0.4133 0.5505 0.7254\nv -0.010392 0.011867 0.10366\nvn -0.4133 0.5505 0.7254\nv -0.010211 0.010676 0.104667\nvn -0.4133 0.5505 0.7254\nv -0.00354 0.015405 0.103673\nvn -0.1976 0.6051 0.7713\nv -0.007183 0.012948 0.104667\nvn -0.1976 0.6051 0.7713\nv -0.001753 0.014722 0.104668\nvn -0.1976 0.6051 0.7713\nv -0.00354 0.015405 0.103673\nvn -0.2552 0.6631 0.7037\nv -0.007472 0.013909 0.103658\nvn -0.2552 0.6631 0.7037\nv -0.007183 0.012948 0.104667\nvn -0.2552 0.6631 0.7037\nv -0.001753 0.014722 0.104668\nvn -0.0512 0.7776 0.6266\nv 0.001612 0.015745 0.103672\nvn -0.0512 0.7776 0.6266\nv -0.00354 0.015405 0.103673\nvn -0.0512 0.7776 0.6266\nv -0.014399 0.018038 0.102165\nvn -0.8532 -0.5207 0.0309\nv -0.015858 0.020428 0.102165\nvn -0.8532 -0.5207 0.0309\nv -0.015397 0.019662 0.101967\nvn -0.8532 -0.5207 0.0309\nv -0.015397 0.019662 0.101967\nvn -0.2927 -0.401 0.8681\nv -0.015858 0.020428 0.102165\nvn -0.2927 -0.401 0.8681\nv -0.016481 0.020453 0.101967\nvn -0.2927 -0.401 0.8681\nv -0.017393 0.014587 0.102107\nvn -0.3561 0.9328 -0.0559\nv -0.015303 0.015388 0.102165\nvn -0.3561 0.9328 -0.0559\nv -0.016236 0.015021 0.101966\nvn -0.3561 0.9328 -0.0559\nv -0.015858 0.020428 0.102165\nvn -0.1654 -0.8991 0.4053\nv -0.017817 0.020697 0.101963\nvn -0.1654 -0.8991 0.4053\nv -0.016481 0.020453 0.101967\nvn -0.1654 -0.8991 0.4053\nv -0.015858 0.020428 0.102165\nvn -0.1617 -0.9312 0.3266\nv -0.018387 0.020868 0.102166\nvn -0.1617 -0.9312 0.3266\nv -0.017817 0.020697 0.101963\nvn -0.1617 -0.9312 0.3266\nv -0.016236 0.015021 0.101966\nvn -0.3338 0.3796 0.8628\nv -0.015303 0.015388 0.102165\nvn -0.3338 0.3796 0.8628\nv -0.015228 0.015906 0.101966\nvn -0.3338 0.3796 0.8628\nv -0.015228 0.015906 0.101966\nvn -0.7635 0.3249 0.5581\nv -0.015303 0.015388 0.102165\nvn -0.7635 0.3249 0.5581\nv -0.014703 0.01714 0.101967\nvn -0.7635 0.3249 0.5581\nv -0.015303 0.015388 0.102165\nvn -0.9464 0.3229 -0.0117\nv -0.014399 0.018038 0.102165\nvn -0.9464 0.3229 -0.0117\nv -0.014703 0.01714 0.101967\nvn -0.9464 0.3229 -0.0117\nv -0.014703 0.01714 0.101967\nvn -0.4999 -0.0226 0.8658\nv -0.014399 0.018038 0.102165\nvn -0.4999 -0.0226 0.8658\nv -0.014764 0.01848 0.101967\nvn -0.4999 -0.0226 0.8658\nv -0.014764 0.01848 0.101967\nvn -0.7674 -0.4116 0.4915\nv -0.014399 0.018038 0.102165\nvn -0.7674 -0.4116 0.4915\nv -0.015397 0.019662 0.101967\nvn -0.7674 -0.4116 0.4915\nv -0.012457 -0.054849 0.101108\nvn 0.0003 -0.0027 1\nv 0.012672 -0.032552 0.101167\nvn -0.0003 -0.0026 1\nv -0.01275 -0.035 0.107949\nvn 1 0 1.22465e-16\nv -0.01275 -0.036 0.096417\nvn 1 0 1.22465e-16\nv -0.01275 -0.035 0.095417\nvn 1 0 1.22465e-16\nv -0.01275 -0.036 0.107949\nvn 1 0 1.22465e-16\nv -0.008072 -0.030986 0.108031\nvn 0.0175 0 -0.9998\nv -0.01275 -0.035 0.107949\nvn 0.0175 0 -0.9998\nv -0.011492 -0.029877 0.107971\nvn 0.0175 0 -0.9998\nv -0.011492 -0.029877 0.107971\nvn 0.031 -0.0033 -0.9995\nv -0.013649 -0.034984 0.107921\nvn 0.0312 -0.0034 -0.9995\nv -0.013811 -0.028869 0.107896\nvn 0.031 -0.0033 -0.9995\nv -0.01275 -0.035 0.107949\nvn 0.0313 -0.0034 -0.9995\nv -0.01275 -0.036 0.107949\nvn 0.0175 0 -0.9998\nv -0.003953 -0.045069 0.116064\nvn -0.0175 0.9998 -2.14313e-18\nv -0.003291 -0.045057 0.116657\nvn -0.0175 0.9998 -0.0001\nv -1.76937e-18 -0.045 0.116615\nvn -0.0175 0.9998 -2.14313e-18\nv -1.04095e-18 -0.045 0.110667\nvn -0.0175 0.9998 -2.14313e-18\nv -0.004 -0.04507 0.110597\nvn -0.0175 0.9998 -2.14313e-18\nv -0.001867 -0.099775 0.11401\nvn 0.8034 -0.5026 0.3192\nv -0.00146 -0.098678 0.114714\nvn 0.8034 -0.5026 0.3192\nv -0.001874 -0.098216 0.116482\nvn 0.8034 -0.5026 0.3192\nv -0.000994 -0.100058 0.110001\nvn 0.605 -0.7711 0.1984\nv -0.001145 -0.099788 0.111511\nvn 0.605 -0.7711 0.1984\nv -0.001491 -0.100473 0.109906\nvn 0.605 -0.7711 0.1984\nv -8.21248e-19 -0.099962 0.108873\nvn 0.1816 -0.9678 0.1742\nv -1.04781e-18 -0.09963 0.110723\nvn 0.1816 -0.9678 0.1742\nv -0.000517 -0.099913 0.109689\nvn 0.1816 -0.9678 0.1742\nv -0.001491 -0.100473 0.109906\nvn 0.6429 -0.7448 0.179\nv -0.001145 -0.099788 0.111511\nvn 0.6429 -0.7448 0.179\nv -0.001556 -0.099937 0.112369\nvn 0.6429 -0.7448 0.179\nv -0.001072 -0.098921 0.113607\nvn 0.671 -0.6392 0.3757\nv -0.000979 -0.097748 0.115437\nvn 0.671 -0.6392 0.3757\nv -0.00146 -0.098678 0.114714\nvn 0.671 -0.6392 0.3757\nv -0.000994 -0.100058 0.110001\nvn 0.4036 -0.8928 0.2001\nv -0.000501 -0.099522 0.111398\nvn 0.4038 -0.8927 0.2\nv -0.001145 -0.099788 0.111511\nvn 0.4038 -0.8927 0.2\nv -0.000517 -0.099913 0.109689\nvn 0.4035 -0.8928 0.2001\nv -0.001072 -0.098921 0.113607\nvn 0.2108 -0.8279 0.5198\nv -1.61862e-18 -0.097532 0.115384\nvn 0.2108 -0.8279 0.5198\nv -0.000979 -0.097748 0.115437\nvn 0.2108 -0.8279 0.5198\nv -1.37418e-18 -0.098746 0.113388\nvn 0.238 -0.8297 0.5048\nv -1.61862e-18 -0.097532 0.115384\nvn 0.238 -0.8297 0.5048\nv -0.001072 -0.098921 0.113607\nvn 0.238 -0.8297 0.5048\nv -0.00146 -0.098678 0.114714\nvn 0.8558 -0.4152 0.3086\nv -0.001466 -0.097376 0.116482\nvn 0.8558 -0.4152 0.3086\nv -0.001874 -0.098216 0.116482\nvn 0.8558 -0.4152 0.3086\nv -0.000517 -0.099913 0.109689\nvn 0.0898 -0.9711 0.221\nv -1.04781e-18 -0.09963 0.110723\nvn 0.0898 -0.9711 0.221\nv -0.000501 -0.099522 0.111398\nvn 0.0898 -0.9711 0.221\nv -0.00146 -0.098678 0.114714\nvn 0.5515 -0.6708 0.4959\nv -0.000979 -0.097748 0.115437\nvn 0.5515 -0.6708 0.4959\nv -0.001466 -0.097376 0.116482\nvn 0.5515 -0.6708 0.4959\nv -1.29017e-18 -0.099008 0.112702\nvn 0.1952 -0.9358 0.2936\nv -0.000501 -0.099522 0.111398\nvn 0.1952 -0.9358 0.2936\nv -1.04781e-18 -0.09963 0.110723\nvn 0.1952 -0.9358 0.2936\nv -0.001148 -0.100319 0.108527\nvn 0.7333 -0.6714 0.1072\nv -0.001491 -0.100473 0.109906\nvn 0.7333 -0.6714 0.1072\nv -0.001723 -0.10095 0.108504\nvn 0.7333 -0.6714 0.1072\nv -0.001723 -0.10095 0.108504\nvn 0.9514 -0.3023 0.058\nv -0.001827 -0.100759 0.111208\nvn 0.9514 -0.3023 0.058\nv -0.001979 -0.101566 0.109499\nvn 0.9514 -0.3023 0.058\nv -0.001827 -0.100759 0.111208\nvn 0.9749 -0.2055 0.086\nv -0.001867 -0.099775 0.11401\nvn 0.9749 -0.2055 0.086\nv -0.001963 -0.100667 0.112974\nvn 0.9749 -0.2055 0.086\nv -0.001145 -0.099788 0.111511\nvn 0.7305 -0.6396 0.2392\nv -0.001072 -0.098921 0.113607\nvn 0.7305 -0.6396 0.2392\nv -0.001556 -0.099937 0.112369\nvn 0.7305 -0.6396 0.2392\nv -0.000979 -0.097748 0.115437\nvn 0.5853 -0.6383 0.5\nv -0.000663 -0.096552 0.116593\nvn 0.5853 -0.6383 0.5\nv -0.001466 -0.097376 0.116482\nvn 0.5853 -0.6383 0.5\nv -0.001827 -0.100759 0.111208\nvn 0.8038 -0.5577 0.2072\nv -0.001556 -0.099937 0.112369\nvn 0.8038 -0.5577 0.2072\nv -0.001867 -0.099775 0.11401\nvn 0.8038 -0.5577 0.2072\nv -0.001723 -0.10095 0.108504\nvn 0.7956 -0.6014 0.0731\nv -0.001491 -0.100473 0.109906\nvn 0.7956 -0.6014 0.0731\nv -0.001827 -0.100759 0.111208\nvn 0.7956 -0.6014 0.0731\nv -0.000979 -0.097748 0.115437\nvn 0.193 -0.7079 0.6794\nv -1.61862e-18 -0.097532 0.115384\nvn 0.193 -0.7079 0.6794\nv -0.000663 -0.096552 0.116593\nvn 0.193 -0.7079 0.6794\nv -0.001145 -0.099788 0.111511\nvn 0.2218 -0.9037 0.3662\nv -1.37418e-18 -0.098746 0.113388\nvn 0.2218 -0.9037 0.3662\nv -0.001072 -0.098921 0.113607\nvn 0.2218 -0.9037 0.3662\nv -0.000501 -0.099522 0.111398\nvn 0.4063 -0.8813 0.2413\nv -1.37418e-18 -0.098746 0.113388\nvn 0.4063 -0.8813 0.2413\nv -0.001145 -0.099788 0.111511\nvn 0.4063 -0.8813 0.2413\nv -1.60196e-18 -0.097591 0.115248\nvn 0.5373 0.7748 -0.3333\nv -0.000663 -0.096552 0.116593\nvn 0.5373 0.7748 -0.3333\nv -1.61862e-18 -0.097532 0.115384\nvn 0.5373 0.7748 -0.3333\nv -1.76655e-18 -0.096429 0.116592\nvn 0.1404 -0.7491 0.6475\nv -0.000663 -0.096552 0.116593\nvn 0.1404 -0.7491 0.6475\nv -1.60196e-18 -0.097591 0.115248\nvn 0.1404 -0.7491 0.6475\nv -7.31849e-19 -0.100035 0.108143\nvn 0.2898 -0.9416 0.1716\nv -0.000517 -0.099913 0.109689\nvn 0.2898 -0.9416 0.1716\nv -0.001148 -0.100319 0.108527\nvn 0.2898 -0.9416 0.1716\nv -1.29017e-18 -0.099008 0.112702\nvn 0.0283 -0.9337 0.3569\nv -1.37418e-18 -0.098746 0.113388\nvn 0.0283 -0.9337 0.3569\nv -0.000501 -0.099522 0.111398\nvn 0.0283 -0.9337 0.3569\nv -0.001963 -0.100667 0.112974\nvn 0.9988 -0.0423 0.0264\nv -0.001974 -0.09888 0.11623\nvn 0.9988 -0.0423 0.0264\nv -0.002012 -0.100134 0.115665\nvn 0.9988 -0.0423 0.0264\nv -0.001979 -0.101566 0.109499\nvn 0.9331 -0.3492 0.086\nv -0.001963 -0.100667 0.112974\nvn 0.9331 -0.3492 0.086\nv -0.002012 -0.100134 0.115665\nvn 0.9331 -0.3492 0.086\nv -0.001556 -0.099937 0.112369\nvn 0.8658 -0.4548 0.2087\nv -0.00146 -0.098678 0.114714\nvn 0.8658 -0.4548 0.2087\nv -0.001867 -0.099775 0.11401\nvn 0.8658 -0.4548 0.2087\nv -0.001148 -0.100319 0.108527\nvn 0.6308 -0.7727 0.0704\nv -0.000994 -0.100058 0.110001\nvn 0.6308 -0.7727 0.0704\nv -0.001491 -0.100473 0.109906\nvn 0.6308 -0.7727 0.0704\nv -0.001867 -0.099775 0.11401\nvn 0.9427 -0.2912 0.1628\nv -0.001974 -0.09888 0.11623\nvn 0.9427 -0.2912 0.1628\nv -0.001963 -0.100667 0.112974\nvn 0.9427 -0.2912 0.1628\nv -8.21248e-19 -0.099962 0.108873\nvn 0.0603 -0.9933 0.0988\nv -0.000517 -0.099913 0.109689\nvn 0.0603 -0.9933 0.0988\nv -7.31849e-19 -0.100035 0.108143\nvn 0.0603 -0.9933 0.0988\nv -0.001867 -0.099775 0.11401\nvn 0.973 -0.1941 0.1252\nv -0.001874 -0.098216 0.116482\nvn 0.973 -0.1941 0.1252\nv -0.001974 -0.09888 0.11623\nvn 0.973 -0.1941 0.1252\nv -0.001072 -0.098921 0.113607\nvn 0.5863 -0.7235 0.3645\nv -0.00146 -0.098678 0.114714\nvn 0.5863 -0.7235 0.3645\nv -0.001556 -0.099937 0.112369\nvn 0.5863 -0.7235 0.3645\nv -0.001148 -0.100319 0.108527\nvn 0.3636 -0.9231 0.125\nv -0.000517 -0.099913 0.109689\nvn 0.3636 -0.9231 0.125\nv -0.000994 -0.100058 0.110001\nvn 0.3636 -0.9231 0.125\nv -0.001979 -0.101566 0.109499\nvn 0.926 -0.3665 0.0906\nv -0.001827 -0.100759 0.111208\nvn 0.926 -0.3665 0.0906\nv -0.001963 -0.100667 0.112974\nvn 0.926 -0.3665 0.0906\nv -0.001491 -0.100473 0.109906\nvn 0.8769 -0.4643 0.1242\nv -0.001556 -0.099937 0.112369\nvn 0.8769 -0.4643 0.1242\nv -0.001827 -0.100759 0.111208\nvn 0.8769 -0.4643 0.1242\nv -0.001979 -0.101453 0.094865\nvn 0.9995 -0.0313 -0.0061\nv -0.002021 -0.102634 0.095619\nvn 0.9992 -0.0404 -0.0079\nv -0.002016 -0.101534 0.091439\nvn 0.9992 -0.0385 -0.0097\nv -0.001979 -0.101566 0.109499\nvn 0.9985 -0.055 0.0017\nv -0.002044 -0.102745 0.109144\nvn 0.9984 -0.0564 0.0062\nv -0.002021 -0.102634 0.095619\nvn 0.9985 -0.0549 0.0012\nv -0.001979 -0.101566 0.109499\nvn 0.9994 -0.0355 -0.0003\nv -0.002025 -0.101992 0.112613\nvn 0.9984 -0.0566 0.0069\nv -0.001991 -0.096371 0.0861\nvn 0.9999 0.0096 -0.0036\nv -0.001977 -0.097359 0.087277\nvn 0.9999 0.0096 -0.0036\nv -0.001992 -0.09647 0.085671\nvn 0.9999 0.0096 -0.0036\nv -0.001975 -0.09983 0.090487\nvn 0.9993 -0.0295 -0.0222\nv -0.002016 -0.101534 0.091439\nvn 0.999 -0.0378 -0.0246\nv -0.002018 -0.098941 0.087337\nvn 0.9991 -0.0335 -0.0244\nv -0.002012 -0.100134 0.115665\nvn 0.9996 -0.0253 0.0112\nv -0.002025 -0.101992 0.112613\nvn 0.9996 -0.0253 0.0112\nv -0.001979 -0.101566 0.109499\nvn 0.9996 -0.0253 0.0112\nv -0.001977 -0.097359 0.087277\nvn 0.9994 -0.0268 -0.0231\nv -0.00205 -0.100901 0.115045\nvn 0.9946 -0.0908 0.0511\nv -0.002025 -0.101992 0.112613\nvn 0.9946 -0.0908 0.0511\nv -0.002012 -0.100134 0.115665\nvn 0.9946 -0.0908 0.0511\nv -0.001975 -0.09983 0.090487\nvn 0.9995 -0.0296 -0.01\nv -0.001513 -0.09692 0.083299\nvn 0.1673 -0.7672 0.6192\nv 2.40435e-18 -0.097208 0.082534\nvn 0.1673 -0.7672 0.6192\nv 2.37973e-18 -0.097045 0.082735\nvn 0.1673 -0.7672 0.6192\nv -0.001896 -0.097087 0.083099\nvn 0.0997 -0.8504 0.5166\nv 2.40435e-18 -0.097208 0.082534\nvn 0.0997 -0.8504 0.5166\nv -0.001513 -0.09692 0.083299\nvn 0.0997 -0.8504 0.5166\nv -0.015298 0.000291 0.092303\nvn 0.9995 0.0012 -0.0314\nv -0.01527 -0.028122 0.09208\nvn 0.9995 0.0012 -0.0314\nv -0.015255 -0.066386 0.091097\nvn 0.9995 0.0012 -0.0314\nv -0.015744 -0.027859 0.101046\nvn 0.9983 0.0001 0.058\nv -0.015744 -0.034948 0.101046\nvn 0.9983 -0 0.0581\nv -0.015413 -0.034953 0.095371\nvn 0.9984 0.0009 0.0569\nv -0.015317 -0.028097 0.093425\nvn 0.9984 0.0018 0.0558\nv -0.015383 0.028059 0.092503\nvn 0.9897 0.0108 0.1428\nv -0.015311 0.021536 0.092493\nvn 0.9897 0.0108 0.1428\nv -0.015258 0.030821 0.091429\nvn 0.9897 0.0108 0.1428\nv -0.015311 0.021536 0.092493\nvn 0.9987 0.0002 0.0505\nv -0.015298 0.000291 0.092303\nvn 0.9989 0.0001 0.0477\nv -0.015258 0.030821 0.091429\nvn 0.9991 -0.0001 0.0427\nv -0.015255 -0.066386 0.091097\nvn 0.9992 -0.0001 0.0411\nv -0.015258 0.030821 0.091429\nvn 0.9999 0 0.0111\nv -0.015255 -0.066386 0.091097\nvn 0.9999 0 0.0111\nv -0.015255 0.066307 0.091106\nvn 0.9999 0 0.0111\nv -0.015744 -0.034948 0.101046\nvn 0.9873 -0.0004 -0.1592\nv -0.014781 -0.028382 0.107001\nvn 0.9872 -0.0003 -0.1592\nv -0.014794 -0.034964 0.10695\nvn 0.9873 -0.0007 -0.1588\nv -0.015744 -0.027859 0.101046\nvn 0.9872 0 -0.1595\nv -0.014794 -0.034964 0.10695\nvn 0.8267 0.0027 -0.5627\nv -0.014781 -0.028382 0.107001\nvn 0.8267 0.0027 -0.5627\nv -0.014348 -0.034972 0.107606\nvn 0.8267 0.0027 -0.5627\nv -0.014781 -0.028382 0.107001\nvn 0.8165 0.0007 -0.5774\nv -0.014408 -0.028573 0.107528\nvn 0.8165 0.0007 -0.5774\nv -0.014348 -0.034972 0.107606\nvn 0.8165 0.0007 -0.5774\nv -0.014408 -0.028573 0.107528\nvn 0.5227 -0.0054 -0.8525\nv -0.013811 -0.028869 0.107896\nvn 0.5227 -0.0054 -0.8525\nv -0.014348 -0.034972 0.107606\nvn 0.5227 -0.0054 -0.8525\nv -0.014348 -0.034972 0.107606\nvn 0.4111 0.0072 -0.9116\nv -0.013811 -0.028869 0.107896\nvn 0.4111 0.0072 -0.9116\nv -0.013649 -0.034984 0.107921\nvn 0.4111 0.0072 -0.9116\nv 8.08267e-18 -0.067 0.036167\nvn -0.0174 -0.0009 -0.9998\nv -0.014138 -0.087286 0.03643\nvn -0.02 -0.0004 -0.9998\nv -0.01023 -0.066814 0.036346\nvn -0.0176 -0.0008 -0.9998\nv -0.010831 -0.066594 0.036356\nvn -0.018 -0.0007 -0.9998\nv -0.011453 -0.065813 0.036367\nvn -0.0198 -0.0005 -0.9998\nv -0.011324 0.09213 0.0364\nvn -0.0188 0.0022 -0.9998\nv -0.014056 0.08162 0.036428\nvn -0.0211 0.0007 -0.9998\nv -0.013956 0.090931 0.036447\nvn -0.0189 0.0022 -0.9998\nv 8.07973e-18 -0.092276 0.036191\nvn -0.0173 -0.001 -0.9998\nv -0.012233 -0.091785 0.036403\nvn -0.0174 -0.0013 -0.9998\nv 8.08267e-18 0.067 0.036167\nvn -0.0176 0.0009 -0.9998\nv 8.08022e-18 0.092243 0.036187\nvn -0.0187 0.0021 -0.9998\nv -0.010558 0.066744 0.036351\nvn -0.0179 0.0009 -0.9998\nv -0.011283 0.066133 0.036364\nvn -0.0191 0.0007 -0.9998\nv -0.012233 -0.091785 0.036403\nvn -0.0418 -0.0117 -0.9991\nv -0.014024 -0.090523 0.036463\nvn -0.0418 -0.0117 -0.9991\nv -0.014138 -0.087286 0.03643\nvn -0.0418 -0.0117 -0.9991\nv -0.01149 0.065541 0.036368\nvn -0.0205 0.0005 -0.9998\nv -1.04095e-18 -0.045 0.110667\nvn -0.0175 0 0.9998\nv -1.04095e-18 -0.033494 0.110667\nvn -0.0175 0 0.9998\nv -0.002183 -0.033436 0.110629\nvn -0.0174 0 0.9998\nv -0.004 -0.04507 0.110597\nvn -0.0209 -0.0005 0.9998\nv -0.005809 -0.033013 0.110566\nvn -0.0173 0 0.9999\nv -0.010493 -0.031853 0.110485\nvn -0.018 -0.0003 0.9998\nv -0.013792 -0.030528 0.110418\nvn -0.0205 -0.0015 0.9998\nv -0.014007 -0.073637 0.110369\nvn -0.0202 -0.0009 0.9998\nv -0.004 -0.072999 0.110586\nvn -0.0216 -0.0004 0.9998\nv -0.004749 0.033184 0.110584\nvn -0.0176 0.0007 0.9998\nv -1.04095e-18 0.033517 0.110667\nvn -0.0175 0.0006 0.9998\nv -1.03813e-18 0.072733 0.110644\nvn -0.0175 0.0005 0.9998\nv -0.024783 0.036929 0.110226\nvn -0.0177 0.0006 0.9998\nv -0.008216 0.032482 0.110523\nvn -0.0177 0.001 0.9998\nv -0.022654 0.072295 0.110249\nvn -0.0174 0.0004 0.9998\nv -0.017111 0.032556 0.110351\nvn -0.0193 0.0102 0.9998\nv -0.011923 0.031363 0.110466\nvn -0.0192 0.0123 0.9997\nv -0.008216 0.032482 0.110523\nvn -0.0193 0.0057 0.9998\nv -0.019526 0.034135 0.110298\nvn -0.0193 0.0044 0.9998\nv -0.019526 0.034135 0.110298\nvn -0.0223 -0.0164 0.9996\nv -0.008216 0.032482 0.110523\nvn -0.0223 -0.0164 0.9996\nv -0.024783 0.036929 0.110226\nvn -0.0223 -0.0164 0.9996\nv -0.015313 0.029765 0.110364\nvn -0.0247 -0.0115 0.9996\nv -0.011923 0.031363 0.110466\nvn -0.0247 -0.0115 0.9996\nv -0.017111 0.032556 0.110351\nvn -0.0247 -0.0115 0.9996\nv 6.46944e-18 -0.100547 0.04934\nvn -0.0199 -0.9996 0.0197\nv -0.014021 -0.100206 0.052508\nvn -0.0199 -0.9996 0.0197\nv -0.013486 -0.100314 0.047548\nvn -0.0199 -0.9996 0.0197\nv 4.23605e-18 -0.099354 0.067577\nvn -0.019 -0.9927 0.1194\nv -0.013864 -0.098293 0.074201\nvn -0.0174 -0.9923 0.1226\nv -0.014102 -0.09921 0.066487\nvn -0.0193 -0.9928 0.1186\nv 3.32577e-18 -0.09843 0.07501\nvn -0.017 -0.9922 0.1234\nv 6.46944e-18 -0.100547 0.04934\nvn -0.0178 -0.9998 0.001\nv -0.009232 -0.100388 0.045148\nvn -0.0189 -0.9998 0.0037\nv 7.0247e-18 -0.100569 0.044806\nvn -0.0194 -0.9998 0.0048\nv 5.31901e-18 -0.10013 0.058734\nvn -0.0143 -0.9989 0.0443\nv -0.014021 -0.100206 0.052508\nvn -0.0143 -0.9989 0.0443\nv 6.46944e-18 -0.100547 0.04934\nvn -0.0143 -0.9989 0.0443\nv 5.31901e-18 -0.10013 0.058734\nvn -0.023 -0.9977 0.0638\nv -0.014527 -0.099703 0.060182\nvn -0.023 -0.9977 0.0638\nv -0.014021 -0.100206 0.052508\nvn -0.023 -0.9977 0.0638\nv 2.40435e-18 -0.097208 0.082534\nvn -0.0156 -0.9871 0.1594\nv -0.014096 -0.097316 0.080477\nvn -0.0159 -0.9871 0.1592\nv 3.32577e-18 -0.09843 0.07501\nvn -0.0182 -0.9878 0.1544\nv -0.003682 -0.096662 0.085229\nvn -0.0193 -0.9821 0.1875\nv -0.014059 -0.095974 0.087768\nvn -0.0187 -0.9816 0.1899\nv -0.003142 -0.096726 0.084953\nvn -0.0185 -0.9816 0.1903\nv -0.013864 -0.098293 0.074201\nvn -0.0187 -0.9881 0.153\nv -0.001896 -0.097087 0.083099\nvn -0.0156 -0.9871 0.1592\nv -0.003992 -0.096543 0.085821\nvn -0.0173 -0.9803 0.1969\nv 5.31901e-18 -0.10013 0.058734\nvn -0.0206 -0.9965 0.0809\nv -0.014102 -0.09921 0.066487\nvn -0.0176 -0.9961 0.0863\nv -0.014527 -0.099703 0.060182\nvn -0.0214 -0.9966 0.0794\nv -0.004 -0.095538 0.09079\nvn -0.0171 -0.98 0.1981\nv 4.23605e-18 -0.099354 0.067577\nvn -0.017 -0.996 0.0874\nv -0.001896 -0.097087 0.083099\nvn -0.0198 -0.9838 0.1783\nv -0.003142 -0.096726 0.084953\nvn -0.0198 -0.9838 0.1783\nv -0.014096 -0.097316 0.080477\nvn -0.0198 -0.9838 0.1783\nv -0.013486 -0.100314 0.047548\nvn -0.0173 -0.9999 -2.11864e-18\nv -0.003142 -0.096726 0.084953\nvn -0.021 -0.9832 0.1811\nv -0.014059 -0.095974 0.087768\nvn -0.021 -0.9832 0.1811\nv -0.014096 -0.097316 0.080477\nvn -0.021 -0.9832 0.1811\nv -0.009896 -0.099863 0.043932\nvn -0.1254 -0.7823 -0.6102\nv -0.011278 -0.097824 0.041603\nvn -0.1254 -0.7823 -0.6102\nv -0.007416 -0.098601 0.041805\nvn -0.1254 -0.7823 -0.6102\nv -0.016044 -0.097265 0.044507\nvn -0.6999 -0.5677 -0.4334\nv -0.01631 -0.093853 0.040468\nvn -0.6999 -0.5677 -0.4334\nv -0.015501 -0.095852 0.041779\nvn -0.6999 -0.5677 -0.4334\nv -0.016044 -0.097265 0.044507\nvn -0.7952 -0.5054 -0.335\nv -0.016048 -0.098809 0.046846\nvn -0.7952 -0.5054 -0.335\nv -0.016848 -0.096524 0.045296\nvn -0.7952 -0.5054 -0.335\nv -0.017095 -0.09493 0.043853\nvn -0.8389 -0.4316 -0.3317\nv -0.01631 -0.093853 0.040468\nvn -0.8394 -0.4306 -0.3315\nv -0.016848 -0.096524 0.045296\nvn -0.8397 -0.4302 -0.3314\nv -0.016848 -0.096524 0.045296\nvn -0.7982 -0.4851 -0.3572\nv -0.01631 -0.093853 0.040468\nvn -0.7982 -0.4851 -0.3572\nv -0.016044 -0.097265 0.044507\nvn -0.7982 -0.4851 -0.3572\nv -0.016806 -0.092959 0.040559\nvn -0.8386 -0.4321 -0.3318\nv -0.016048 -0.098809 0.046846\nvn -0.8177 -0.4905 -0.3014\nv -0.016729 -0.098373 0.047983\nvn -0.8177 -0.4905 -0.3014\nv -0.016848 -0.096524 0.045296\nvn -0.8177 -0.4905 -0.3014\nv -0.017319 -0.096559 0.047111\nvn -0.8843 -0.402 -0.2375\nv -0.016848 -0.096524 0.045296\nvn -0.8843 -0.402 -0.2375\nv -0.016729 -0.098373 0.047983\nvn -0.8843 -0.402 -0.2375\nv -0.017669 -0.093681 0.044624\nvn -0.9258 -0.2859 -0.2474\nv -0.016806 -0.092959 0.040559\nvn -0.9281 -0.2789 -0.2466\nv -0.017095 -0.09493 0.043853\nvn -0.9291 -0.2758 -0.2463\nv -0.016848 -0.096524 0.045296\nvn -0.9019 -0.3582 -0.2413\nv -0.017319 -0.096559 0.047111\nvn -0.9019 -0.3582 -0.2413\nv -0.017095 -0.09493 0.043853\nvn -0.9019 -0.3582 -0.2413\nv -0.017388 -0.09758 0.049879\nvn -0.9131 -0.3747 -0.1611\nv -0.017319 -0.096559 0.047111\nvn -0.9131 -0.3747 -0.1611\nv -0.016729 -0.098373 0.047983\nvn -0.9131 -0.3747 -0.1611\nv -0.017124 -0.091661 0.04023\nvn -0.9248 -0.2887 -0.2476\nv -0.017124 -0.091661 0.04023\nvn -0.9486 -0.1696 -0.2673\nv -0.01751 -0.09083 0.041073\nvn -0.9486 -0.1696 -0.2673\nv -0.016948 -0.090354 0.038779\nvn -0.9486 -0.1696 -0.2673\nv -0.018251 -0.092995 0.053421\nvn -0.9922 -0.1229 0.0185\nv -0.01799 -0.095321 0.051964\nvn -0.9911 -0.1317 0.0206\nv -0.018251 -0.089872 0.074163\nvn -0.9919 -0.1257 0.0192\nv -0.017517 -0.097079 0.058126\nvn -0.9844 -0.1738 0.0259\nv -0.017885 -0.093073 0.071006\nvn -0.9844 -0.1738 0.0259\nv -0.01799 -0.095321 0.051964\nvn -0.9844 -0.1738 0.0259\nv -0.017885 -0.093073 0.071006\nvn -0.9907 -0.1345 0.0213\nv -0.017311 -0.095945 0.071617\nvn -0.9826 -0.1819 0.0368\nv -0.017885 -0.093073 0.071006\nvn -0.9814 -0.1887 0.0356\nv -0.017517 -0.097079 0.058126\nvn -0.9814 -0.1897 0.031\nv -0.017669 -0.093681 0.044624\nvn -0.9507 -0.2196 -0.219\nv -0.01751 -0.09083 0.041073\nvn -0.9507 -0.2196 -0.219\nv -0.017124 -0.091661 0.04023\nvn -0.9507 -0.2196 -0.219\nv -0.017711 -0.090482 0.087362\nvn -0.9818 -0.1856 0.0394\nv -0.017171 -0.093258 0.08825\nvn -0.9831 -0.1795 0.0372\nv -0.017885 -0.093073 0.071006\nvn -0.9886 -0.1465 0.0337\nv -0.017711 -0.090482 0.087362\nvn -0.9886 -0.1465 0.0337\nv -0.018251 -0.089872 0.074163\nvn -0.9886 -0.1465 0.0337\nv -0.018251 -0.089872 0.074163\nvn -0.9921 -0.1208 0.035\nv -0.017711 -0.090482 0.087362\nvn -0.9912 -0.126 0.041\nv -0.018248 -0.084549 0.092619\nvn -0.992 -0.1211 0.0353\nv -0.017096 -0.091758 0.093886\nvn -0.9845 -0.1659 0.0572\nv -0.017804 -0.088057 0.092432\nvn -0.9834 -0.1702 0.0627\nv -0.017171 -0.093258 0.08825\nvn -0.9844 -0.1663 0.0578\nv -0.017711 -0.090482 0.087362\nvn -0.9832 -0.171 0.0638\nv -0.016948 -0.090354 0.038779\nvn -0.9571 -0.1266 -0.2605\nv -0.01751 -0.09083 0.041073\nvn -0.9571 -0.1266 -0.2605\nv -0.01732 -0.088409 0.039198\nvn -0.9571 -0.1266 -0.2605\nv -0.009896 -0.099863 0.043932\nvn -0.2022 -0.7933 -0.5743\nv -0.012985 -0.099458 0.04446\nvn -0.2022 -0.7933 -0.5743\nv -0.011278 -0.097824 0.041603\nvn -0.2022 -0.7933 -0.5743\nv -0.009692 -0.096629 0.039845\nvn -0.1576 -0.7386 -0.6554\nv -0.012472 -0.095624 0.039381\nvn -0.1597 -0.7424 -0.6506\nv -0.011378 -0.094067 0.037367\nvn -0.1573 -0.7381 -0.6561\nv -0.017804 -0.088057 0.092432\nvn -0.9909 -0.1277 0.0429\nv -0.017021 -0.090129 0.098159\nvn -0.9844 -0.1578 0.0775\nv -0.017804 -0.088057 0.092432\nvn -0.9844 -0.1578 0.0775\nv -0.017096 -0.091758 0.093886\nvn -0.9844 -0.1578 0.0775\nv -0.011278 -0.097824 0.041603\nvn -0.1601 -0.743 -0.6499\nv -0.017319 -0.096559 0.047111\nvn -0.9308 -0.2973 -0.2128\nv -0.017669 -0.093681 0.044624\nvn -0.9308 -0.2973 -0.2128\nv -0.017095 -0.09493 0.043853\nvn -0.9308 -0.2973 -0.2128\nv -0.01751 -0.09083 0.041073\nvn -0.9706 -0.0951 -0.2212\nv -0.017785 -0.088933 0.041467\nvn -0.9706 -0.0951 -0.2212\nv -0.01732 -0.088409 0.039198\nvn -0.9706 -0.0951 -0.2212\nv -0.017021 -0.090129 0.098159\nvn -0.9877 -0.1291 0.0887\nv -0.018248 -0.084549 0.092619\nvn -0.9877 -0.1275 0.0903\nv -0.017804 -0.088057 0.092432\nvn -0.9876 -0.1297 0.0881\nv -0.017669 -0.093681 0.044624\nvn -0.9703 -0.1654 -0.1764\nv -0.017929 -0.09212 0.044589\nvn -0.9703 -0.1654 -0.1764\nv -0.01751 -0.09083 0.041073\nvn -0.9703 -0.1654 -0.1764\nv -0.016957 -0.088455 0.101201\nvn -0.9877 -0.1271 0.0907\nv -0.011278 -0.097824 0.041603\nvn -0.2782 -0.7529 -0.5965\nv -0.013905 -0.095719 0.040171\nvn -0.2776 -0.7535 -0.596\nv -0.012472 -0.095624 0.039381\nvn -0.2822 -0.7469 -0.6021\nv -0.018248 -0.084549 0.092619\nvn -0.9893 -0.105 0.1011\nv -0.016957 -0.088455 0.101201\nvn -0.9893 -0.105 0.1011\nv -0.01825 -0.079155 0.098207\nvn -0.9893 -0.105 0.1011\nv -0.017319 -0.096559 0.047111\nvn -0.9628 -0.2341 -0.1351\nv -0.017912 -0.094586 0.047919\nvn -0.9628 -0.2341 -0.1351\nv -0.017669 -0.093681 0.044624\nvn -0.9628 -0.2341 -0.1351\nv -0.017388 -0.09758 0.049879\nvn -0.9633 -0.243 -0.1138\nv -0.017912 -0.094586 0.047919\nvn -0.9633 -0.243 -0.1138\nv -0.017319 -0.096559 0.047111\nvn -0.9633 -0.243 -0.1138\nv -0.012472 -0.095624 0.039381\nvn -0.1848 -0.7264 -0.662\nv -0.01339 -0.093555 0.037367\nvn -0.1848 -0.7264 -0.662\nv -0.011378 -0.094067 0.037367\nvn -0.1848 -0.7264 -0.662\nv -0.016957 -0.088455 0.101201\nvn -0.9869 -0.0952 0.1305\nv -0.017566 -0.080193 0.102618\nvn -0.9869 -0.0952 0.1305\nv -0.01825 -0.079155 0.098207\nvn -0.9869 -0.0952 0.1305\nv -0.012985 -0.099458 0.04446\nvn -0.2782 -0.7528 -0.5966\nv -0.012472 -0.095624 0.039381\nvn -0.2737 -0.7305 -0.6257\nv -0.013947 -0.094953 0.039243\nvn -0.2737 -0.7305 -0.6257\nv -0.01339 -0.093555 0.037367\nvn -0.2737 -0.7305 -0.6257\nv -0.01708 -0.078176 0.107155\nvn -0.9882 -0.0691 0.1367\nv -0.017566 -0.080193 0.102618\nvn -0.9894 -0.0593 0.1323\nv -0.016977 -0.082382 0.106101\nvn -0.9897 -0.0572 0.1314\nv -0.01825 -0.079155 0.098207\nvn -0.9882 -0.0691 0.1367\nv -0.01825 -0.073593 0.100985\nvn -0.9883 -0.0682 0.1366\nv -0.013947 -0.094953 0.039243\nvn -0.2828 -0.7459 -0.603\nv -0.016922 -0.086447 0.103651\nvn -0.9924 -0.088 0.0865\nv -0.017566 -0.080193 0.102618\nvn -0.9924 -0.088 0.0865\nv -0.016957 -0.088455 0.101201\nvn -0.9924 -0.088 0.0865\nv -0.016977 -0.082382 0.106101\nvn -0.9899 -0.083 0.1152\nv -0.017566 -0.080193 0.102618\nvn -0.9899 -0.083 0.1152\nv -0.016922 -0.086447 0.103651\nvn -0.9899 -0.083 0.1152\nv -0.01708 -0.078176 0.107155\nvn -0.9863 -0.0343 0.1614\nv -0.017151 -0.073644 0.10769\nvn -0.9863 -0.0343 0.1614\nv -0.01825 -0.073593 0.100985\nvn -0.9863 -0.0343 0.1614\nv -0.017929 -0.09212 0.044589\nvn -0.9814 -0.1099 -0.1574\nv -0.017785 -0.088933 0.041467\nvn -0.9814 -0.1099 -0.1574\nv -0.01751 -0.09083 0.041073\nvn -0.9814 -0.1099 -0.1574\nv -0.01339 -0.093555 0.037367\nvn -0.3664 -0.6906 -0.6235\nv -0.013947 -0.094953 0.039243\nvn -0.3664 -0.6906 -0.6235\nv -0.014807 -0.093133 0.037732\nvn -0.3664 -0.6906 -0.6235\nv -0.013905 -0.095719 0.040171\nvn -0.4104 -0.7122 -0.5695\nv -0.014668 -0.095506 0.040454\nvn -0.4104 -0.7122 -0.5695\nv -0.013947 -0.094953 0.039243\nvn -0.4104 -0.7122 -0.5695\nv -0.017388 -0.09758 0.049879\nvn -0.9765 -0.2078 -0.0565\nv -0.01799 -0.095321 0.051964\nvn -0.9765 -0.2078 -0.0565\nv -0.017912 -0.094586 0.047919\nvn -0.9765 -0.2078 -0.0565\nv -0.017669 -0.093681 0.044624\nvn -0.9824 -0.1655 -0.0864\nv -0.018241 -0.091887 0.04769\nvn -0.9824 -0.1655 -0.0864\nv -0.017929 -0.09212 0.044589\nvn -0.9824 -0.1655 -0.0864\nv -0.017912 -0.094586 0.047919\nvn -0.9857 -0.1295 -0.1081\nv -0.018241 -0.091887 0.04769\nvn -0.9857 -0.1295 -0.1081\nv -0.017669 -0.093681 0.044624\nvn -0.9857 -0.1295 -0.1081\nv -0.017501 -0.097528 0.052519\nvn -0.9737 -0.2249 -0.0372\nv -0.01799 -0.095321 0.051964\nvn -0.9737 -0.2249 -0.0372\nv -0.017388 -0.09758 0.049879\nvn -0.9737 -0.2249 -0.0372\nv -0.014668 -0.095506 0.040454\nvn -0.4578 -0.6738 -0.5801\nv -0.015332 -0.093991 0.039218\nvn -0.4578 -0.6738 -0.5801\nv -0.013947 -0.094953 0.039243\nvn -0.4578 -0.6738 -0.5801\nv -0.013947 -0.094953 0.039243\nvn -0.4659 -0.685 -0.5601\nv -0.015332 -0.093991 0.039218\nvn -0.4659 -0.685 -0.5601\nv -0.014807 -0.093133 0.037732\nvn -0.4659 -0.685 -0.5601\nv -0.01732 -0.088409 0.039198\nvn -0.9784 -0.0213 -0.2057\nv -0.017785 -0.088933 0.041467\nvn -0.9784 -0.0213 -0.2057\nv -0.017318 -0.086124 0.038954\nvn -0.9784 -0.0213 -0.2057\nv -0.017929 -0.09212 0.044589\nvn -0.989 -0.0785 -0.1257\nv -0.018248 -0.089636 0.045543\nvn -0.989 -0.0785 -0.1257\nv -0.017785 -0.088933 0.041467\nvn -0.989 -0.0785 -0.1257\nv 7.61338e-18 -0.097469 0.039999\nvn -0.0183 -0.6958 -0.718\nv -0.003704 -0.096909 0.039551\nvn -0.0183 -0.6958 -0.718\nv 7.85219e-18 -0.095456 0.038049\nvn -0.0183 -0.6958 -0.718\nv 7.17092e-18 -0.100231 0.043612\nvn -0.0162 -0.8196 -0.5728\nv -0.005029 -0.099808 0.043149\nvn -0.0162 -0.8196 -0.5728\nv 7.45528e-18 -0.098608 0.04129\nvn -0.0162 -0.8196 -0.5728\nv 7.45528e-18 -0.098608 0.04129\nvn -0.0332 -0.7492 -0.6615\nv -0.003704 -0.096909 0.039551\nvn -0.0332 -0.7492 -0.6615\nv 7.61338e-18 -0.097469 0.039999\nvn -0.0332 -0.7492 -0.6615\nv -0.014668 -0.095506 0.040454\nvn -0.5463 -0.66 -0.5157\nv -0.015501 -0.095852 0.041779\nvn -0.5463 -0.66 -0.5157\nv -0.015332 -0.093991 0.039218\nvn -0.5463 -0.66 -0.5157\nv -0.014807 -0.093133 0.037732\nvn -0.6266 -0.5584 -0.5437\nv -0.015332 -0.093991 0.039218\nvn -0.6266 -0.5584 -0.5437\nv -0.015887 -0.092282 0.038103\nvn -0.6266 -0.5584 -0.5437\nv -0.015501 -0.095852 0.041779\nvn -0.6731 -0.5765 -0.4633\nv -0.01631 -0.093853 0.040468\nvn -0.6731 -0.5765 -0.4633\nv -0.015332 -0.093991 0.039218\nvn -0.6731 -0.5765 -0.4633\nv -0.005029 -0.099808 0.043149\nvn -0.044 -0.7808 -0.6232\nv -0.007416 -0.098601 0.041805\nvn -0.044 -0.7808 -0.6232\nv 7.45528e-18 -0.098608 0.04129\nvn -0.044 -0.7808 -0.6232\nv 7.85219e-18 -0.095456 0.038049\nvn -0.0158 -0.6102 -0.7921\nv -0.008705 -0.093863 0.036994\nvn -0.0158 -0.6102 -0.7921\nv 8.03136e-18 -0.093558 0.036586\nvn -0.0158 -0.6102 -0.7921\nv -0.01799 -0.095321 0.051964\nvn -0.9913 -0.1246 -0.0417\nv -0.018241 -0.091887 0.04769\nvn -0.9913 -0.1246 -0.0417\nv -0.017912 -0.094586 0.047919\nvn -0.9913 -0.1246 -0.0417\nv 7.45528e-18 -0.098608 0.04129\nvn -0.0457 -0.7613 -0.6468\nv -0.007416 -0.098601 0.041805\nvn -0.0457 -0.7613 -0.6468\nv -0.003704 -0.096909 0.039551\nvn -0.0457 -0.7613 -0.6468\nv -0.003704 -0.096909 0.039551\nvn -0.0343 -0.6749 -0.7371\nv -0.008705 -0.093863 0.036994\nvn -0.0343 -0.6749 -0.7371\nv 7.85219e-18 -0.095456 0.038049\nvn -0.0343 -0.6749 -0.7371\nv -0.018241 -0.091887 0.04769\nvn -0.9915 -0.0915 -0.0929\nv -0.018248 -0.089636 0.045543\nvn -0.9915 -0.0915 -0.0929\nv -0.017929 -0.09212 0.044589\nvn -0.9915 -0.0915 -0.0929\nv -0.01631 -0.093853 0.040468\nvn -0.812 -0.4087 -0.4168\nv -0.016806 -0.092959 0.040559\nvn -0.8095 -0.4132 -0.4171\nv -0.015887 -0.092282 0.038103\nvn -0.8113 -0.4099 -0.4169\nv -0.017517 -0.097079 0.058126\nvn -0.977 -0.2127 0.0143\nv -0.01799 -0.095321 0.051964\nvn -0.977 -0.2127 0.0143\nv -0.017501 -0.097528 0.052519\nvn -0.977 -0.2127 0.0143\nv -0.016455 -0.091492 0.03842\nvn -0.8088 -0.4145 -0.4172\nv -0.01799 -0.095321 0.051964\nvn -0.9949 -0.0987 -0.0207\nv -0.018251 -0.092995 0.053421\nvn -0.9949 -0.0987 -0.0207\nv -0.018241 -0.091887 0.04769\nvn -0.9949 -0.0987 -0.0207\nv -0.003704 -0.096909 0.039551\nvn -0.0485 -0.6876 -0.7245\nv -0.011378 -0.094067 0.037367\nvn -0.0485 -0.6876 -0.7245\nv -0.008705 -0.093863 0.036994\nvn -0.0485 -0.6876 -0.7245\nv -0.003704 -0.096909 0.039551\nvn -0.0675 -0.7414 -0.6677\nv -0.007416 -0.098601 0.041805\nvn -0.0675 -0.7414 -0.6677\nv -0.009692 -0.096629 0.039845\nvn -0.0675 -0.7414 -0.6677\nv -0.018248 -0.089636 0.045543\nvn -0.9926 -0.0295 -0.1177\nv -0.01825 -0.084024 0.044154\nvn -0.9926 -0.0295 -0.1177\nv -0.017785 -0.088933 0.041467\nvn -0.9926 -0.0295 -0.1177\nv -0.017318 -0.086124 0.038954\nvn -0.9835 0.0108 -0.1806\nv -0.01825 -0.084024 0.044154\nvn -0.9822 0.0011 -0.1879\nv -0.017336 -0.08141 0.039336\nvn -0.9834 0.0097 -0.1814\nv -0.009896 -0.099863 0.043932\nvn -0.0841 -0.8109 -0.5791\nv -0.007416 -0.098601 0.041805\nvn -0.0841 -0.8109 -0.5791\nv -0.005029 -0.099808 0.043149\nvn -0.0841 -0.8109 -0.5791\nv -0.017785 -0.088933 0.041467\nvn -0.984 0.0043 -0.1781\nv -0.016806 -0.092959 0.040559\nvn -0.8835 -0.3057 -0.3548\nv -0.017124 -0.091661 0.04023\nvn -0.8835 -0.3057 -0.3548\nv -0.016455 -0.091492 0.03842\nvn -0.8835 -0.3057 -0.3548\nv -0.013905 -0.095719 0.040171\nvn -0.4076 -0.7299 -0.5488\nv -0.012985 -0.099458 0.04446\nvn -0.4076 -0.7299 -0.5488\nv -0.014668 -0.095506 0.040454\nvn -0.4076 -0.7299 -0.5488\nv -0.007416 -0.098601 0.041805\nvn -0.1211 -0.7665 -0.6307\nv -0.011278 -0.097824 0.041603\nvn -0.1211 -0.7665 -0.6307\nv -0.009692 -0.096629 0.039845\nvn -0.1211 -0.7665 -0.6307\nv -0.016455 -0.091492 0.03842\nvn -0.8933 -0.275 -0.3555\nv -0.017124 -0.091661 0.04023\nvn -0.8933 -0.275 -0.3555\nv -0.016948 -0.090354 0.038779\nvn -0.8933 -0.275 -0.3555\nv -0.012985 -0.099458 0.04446\nvn -0.391 -0.732 -0.5579\nv -0.013862 -0.099412 0.045014\nvn -0.391 -0.732 -0.5579\nv -0.014668 -0.095506 0.040454\nvn -0.391 -0.732 -0.5579\nv -0.003704 -0.096909 0.039551\nvn -0.0676 -0.7163 -0.6945\nv -0.009692 -0.096629 0.039845\nvn -0.0676 -0.7163 -0.6945\nv -0.011378 -0.094067 0.037367\nvn -0.0676 -0.7163 -0.6945\nv -0.013862 -0.099412 0.045014\nvn -0.4781 -0.707 -0.5211\nv -0.014954 -0.099321 0.045892\nvn -0.4781 -0.707 -0.5211\nv -0.014668 -0.095506 0.040454\nvn -0.4781 -0.707 -0.5211\nv -0.014954 -0.099321 0.045892\nvn -0.5234 -0.6844 -0.5076\nv -0.015501 -0.095852 0.041779\nvn -0.5234 -0.6844 -0.5076\nv -0.014668 -0.095506 0.040454\nvn -0.5234 -0.6844 -0.5076\nv -0.014954 -0.099321 0.045892\nvn -0.6237 -0.6364 -0.4538\nv -0.016044 -0.097265 0.044507\nvn -0.6237 -0.6364 -0.4538\nv -0.015501 -0.095852 0.041779\nvn -0.6237 -0.6364 -0.4538\nv -0.015332 -0.093991 0.039218\nvn -0.6912 -0.5388 -0.4816\nv -0.01631 -0.093853 0.040468\nvn -0.6912 -0.5388 -0.4816\nv -0.015887 -0.092282 0.038103\nvn -0.6912 -0.5388 -0.4816\nv -0.014954 -0.099321 0.045892\nvn -0.6569 -0.6287 -0.4162\nv -0.016048 -0.098809 0.046846\nvn -0.6569 -0.6287 -0.4162\nv -0.016044 -0.097265 0.044507\nvn -0.6569 -0.6287 -0.4162\nv -0.017857 0.076092 0.0766\nvn -0.9967 -0.0815 -0.0002\nv -0.018123 0.079346 0.07357\nvn -0.9972 -0.0742 0.0006\nv -0.01826 0.081061 0.0581\nvn -0.9969 -0.0788 0.0001\nv -0.018715 0.085133 0.064454\nvn -0.9525 -0.2891 -0.0954\nv -0.018545 0.08113 0.073502\nvn -0.9525 -0.2848 -0.1082\nv -0.019175 0.0865 0.064905\nvn -0.9542 -0.2842 -0.0941\nv -0.018874 0.089461 0.045458\nvn -0.9974 -0.0715 0.0009\nv -0.018123 0.079346 0.07357\nvn -0.9895 -0.142 -0.026\nv -0.019328 0.09227 0.04886\nvn -0.9898 -0.1404 -0.0252\nv -0.018874 0.089461 0.045458\nvn -0.9907 -0.134 -0.0217\nv -0.019328 0.09227 0.04886\nvn -0.9529 -0.2882 -0.0945\nv -0.017784 0.070986 0.070878\nvn -0.9999 -0.0008 0.0146\nv -0.017816 -0.076295 0.069239\nvn -0.9999 0.0023 0.0151\nv -0.01773 -0.068435 0.075359\nvn -0.9999 0.0001 0.0149\nv -0.017749 -0.070077 0.075743\nvn -0.9999 -0.0056 0.0157\nv -0.017816 -0.076295 0.069239\nvn -0.9999 -0.0056 0.0157\nv -0.017731 -0.071007 0.076523\nvn -0.9999 -0.0056 0.0157\nv -0.018272 0.082282 0.044217\nvn -0.9978 -0.0662 -0.0049\nv -0.01826 0.081061 0.0581\nvn -0.9978 -0.0662 -0.0049\nv -0.018365 0.083243 0.050082\nvn -0.9978 -0.0662 -0.0049\nv -0.01826 0.081061 0.0581\nvn -0.9987 -0.0518 -0.0037\nv -0.018272 0.082282 0.044217\nvn -0.9987 -0.0518 -0.0037\nv -0.017784 0.070986 0.070878\nvn -0.9987 -0.0518 -0.0037\nv -0.017857 0.076092 0.0766\nvn -0.9997 -0.0225 0.0129\nv -0.017741 0.072335 0.079033\nvn -0.9997 -0.0225 0.0129\nv -0.017718 0.07222 0.080671\nvn -0.9997 -0.0225 0.0129\nv -0.018272 0.082282 0.044217\nvn -0.9965 -0.0831 -0.0022\nv -0.018365 0.083243 0.050082\nvn -0.9964 -0.0842 -0.0036\nv -0.018874 0.089461 0.045458\nvn -0.996 -0.0889 -0.0099\nv -0.017816 -0.076295 0.069239\nvn -0.9999 0.012 0.011\nv -0.018248 -0.089636 0.045543\nvn -0.9999 0.0094 0.0129\nv -0.018241 -0.091887 0.04769\nvn -0.9998 0.0163 0.0079\nv -0.01774 0.06959 0.089122\nvn -0.9981 -0.0576 -0.0206\nv -0.017857 0.076092 0.0766\nvn -0.9981 -0.0576 -0.0206\nv -0.017718 0.07222 0.080671\nvn -0.9981 -0.0576 -0.0206\nv -0.017715 0.068578 0.07539\nvn -0.9999 -0.0024 0.014\nv -0.017857 0.076092 0.0766\nvn -0.9847 -0.1582 -0.0729\nv -0.01774 0.06959 0.089122\nvn -0.9847 -0.1582 -0.0729\nv -0.017924 0.070428 0.089792\nvn -0.9847 -0.1582 -0.0729\nv -0.020329 0.082721 0.079425\nvn -0.9077 -0.3715 -0.195\nv -0.019236 0.081046 0.077528\nvn -0.9077 -0.3715 -0.195\nv -0.020035 0.076416 0.090069\nvn -0.9077 -0.3715 -0.195\nv -0.017924 0.070428 0.089792\nvn -0.9877 -0.142 -0.066\nv -0.018123 0.079346 0.07357\nvn -0.9877 -0.142 -0.066\nv -0.017857 0.076092 0.0766\nvn -0.9877 -0.142 -0.066\nv -0.021236 0.078946 0.090419\nvn -0.8943 -0.3955 -0.2095\nv -0.020329 0.082721 0.079425\nvn -0.8943 -0.3955 -0.2095\nv -0.020035 0.076416 0.090069\nvn -0.8943 -0.3955 -0.2095\nv -0.01773 -0.068435 0.075359\nvn -0.9999 0.0114 -0.0006\nv -0.017816 -0.076295 0.069239\nvn -0.9999 0.0114 -0.0006\nv -0.017749 -0.070077 0.075743\nvn -0.9999 0.0114 -0.0006\nv -0.01826 0.081061 0.0581\nvn -0.9959 -0.09 -0.0114\nv -0.017857 0.076092 0.0766\nvn -0.9992 -0.0382 -0.0113\nv -0.01771 0.071869 0.077805\nvn -0.9992 -0.0382 -0.0113\nv -0.017741 0.072335 0.079033\nvn -0.9992 -0.0382 -0.0113\nv -0.017713 0.069903 0.075819\nvn -0.9995 -0.0292 0.0081\nv -0.017748 0.071349 0.076753\nvn -0.9996 -0.0285 0.008\nv -0.017784 0.070986 0.070878\nvn -0.9996 -0.0263 0.0074\nv -0.019236 0.081046 0.077528\nvn -0.9032 -0.3924 -0.1739\nv -0.020329 0.082721 0.079425\nvn -0.9032 -0.3924 -0.1739\nv -0.019175 0.0865 0.064905\nvn -0.9032 -0.3924 -0.1739\nv -0.019236 0.081046 0.077528\nvn -0.914 -0.3708 -0.1647\nv -0.019175 0.0865 0.064905\nvn -0.914 -0.3708 -0.1647\nv -0.018545 0.08113 0.073502\nvn -0.914 -0.3708 -0.1647\nv -0.020721 0.092402 0.058877\nvn -0.8982 -0.4063 -0.1675\nv -0.019175 0.0865 0.064905\nvn -0.9007 -0.3981 -0.1739\nv -0.02211 0.090427 0.071121\nvn -0.8987 -0.4048 -0.1687\nv -0.017857 0.076092 0.0766\nvn -0.9997 -0.0231 0.0079\nv -0.01826 0.081061 0.0581\nvn -0.9995 -0.0297 0.0138\nv -0.017731 -0.071007 0.076523\nvn -0.9999 0.0125 0.0026\nv -0.017816 -0.076295 0.069239\nvn -0.9999 0.0117 0.003\nv -0.01774 -0.071932 0.077753\nvn -0.9999 0.0096 0.0041\nv -0.023344 0.087912 0.081942\nvn -0.8822 -0.416 -0.2207\nv -0.020329 0.082721 0.079425\nvn -0.8862 -0.4107 -0.2141\nv -0.021236 0.078946 0.090419\nvn -0.8861 -0.411 -0.2145\nv -0.024212 0.085712 0.08953\nvn -0.8815 -0.4168 -0.2218\nv -0.018715 0.085133 0.064454\nvn -0.9894 -0.143 -0.0265\nv -0.017713 0.069903 0.075819\nvn -0.9999 -0.0026 0.0139\nv -0.019912 0.092878 0.05297\nvn -0.9049 -0.3961 -0.1558\nv -0.019175 0.0865 0.064905\nvn -0.9049 -0.3961 -0.1558\nv -0.020721 0.092402 0.058877\nvn -0.9049 -0.3961 -0.1558\nv -0.02211 0.090427 0.071121\nvn -0.8863 -0.4185 -0.1983\nv -0.020329 0.082721 0.079425\nvn -0.8863 -0.4185 -0.1983\nv -0.023344 0.087912 0.081942\nvn -0.8863 -0.4185 -0.1983\nv -0.01825 -0.084024 0.044154\nvn -0.9998 0.0002 0.0178\nv -0.019912 0.092878 0.05297\nvn -0.954 -0.2849 -0.0933\nv -0.018248 -0.089636 0.045543\nvn -0.9999 0.0036 0.0162\nv -0.018545 0.08113 0.073502\nvn -0.9314 -0.3235 -0.1667\nv -0.018572 0.072784 0.089854\nvn -0.9314 -0.3235 -0.1667\nv -0.019236 0.081046 0.077528\nvn -0.9314 -0.3235 -0.1667\nv -0.018572 0.072784 0.089854\nvn -0.9145 -0.3571 -0.1901\nv -0.020035 0.076416 0.090069\nvn -0.9145 -0.3571 -0.1901\nv -0.019236 0.081046 0.077528\nvn -0.9145 -0.3571 -0.1901\nv -0.018123 0.079346 0.07357\nvn -0.9655 -0.233 -0.1163\nv -0.017924 0.070428 0.089792\nvn -0.9655 -0.233 -0.1163\nv -0.018545 0.08113 0.073502\nvn -0.9655 -0.233 -0.1163\nv -0.017748 0.071349 0.076753\nvn -0.9987 -0.0216 0.0467\nv -0.01771 0.071869 0.077805\nvn -0.9987 -0.0216 0.0467\nv -0.017857 0.076092 0.0766\nvn -0.9987 -0.0216 0.0467\nv -0.018272 0.082282 0.044217\nvn -0.9998 -0.0001 0.0182\nv -0.018545 0.08113 0.073502\nvn -0.9689 -0.2326 -0.0847\nv -0.018715 0.085133 0.064454\nvn -0.9689 -0.2326 -0.0847\nv -0.018123 0.079346 0.07357\nvn -0.9689 -0.2326 -0.0847\nv -0.020329 0.082721 0.079425\nvn -0.9011 -0.3967 -0.1749\nv -0.017924 0.070428 0.089792\nvn -0.9564 -0.2595 -0.134\nv -0.018572 0.072784 0.089854\nvn -0.9564 -0.2595 -0.134\nv -0.018545 0.08113 0.073502\nvn -0.9564 -0.2595 -0.134\nv -0.018249 -0.026286 0.101172\nvn -0.9876 -0.0006 0.1571\nv -0.01825 -0.073593 0.100985\nvn -0.9874 -0.0008 0.1584\nv -0.017253 -0.026954 0.107432\nvn -0.987 -0.0011 0.1605\nv -0.017151 -0.073644 0.10769\nvn -0.9868 -0.0013 0.1617\nv -0.017755 0.067268 0.091213\nvn -0.979 -0.0985 -0.1785\nv -0.017945 0.068543 0.091552\nvn -0.979 -0.0985 -0.1785\nv -0.017721 0.068677 0.090248\nvn -0.979 -0.0985 -0.1785\nv -0.018413 0.067219 0.093013\nvn -0.9038 -0.1304 -0.4077\nv -0.0187 0.069023 0.093074\nvn -0.9038 -0.1304 -0.4077\nv -0.017945 0.068543 0.091552\nvn -0.9038 -0.1304 -0.4077\nv -0.017721 0.068677 0.090248\nvn -0.9855 -0.1398 -0.0961\nv -0.017924 0.070428 0.089792\nvn -0.9855 -0.1398 -0.0961\nv -0.01774 0.06959 0.089122\nvn -0.9855 -0.1398 -0.0961\nv -0.02149 0.077532 0.092671\nvn -0.85 -0.3975 -0.3456\nv -0.024504 0.08474 0.091792\nvn -0.85 -0.3975 -0.3456\nv -0.021236 0.078946 0.090419\nvn -0.85 -0.3975 -0.3456\nv -0.025273 0.08088 0.096696\nvn -0.8065 -0.36 -0.4691\nv -0.024901 0.08293 0.094482\nvn -0.8065 -0.36 -0.4691\nv -0.022128 0.076171 0.094903\nvn -0.8065 -0.36 -0.4691\nv -0.019829 0.068763 0.094813\nvn -0.8171 -0.1586 -0.5542\nv -0.019857 0.070642 0.094316\nvn -0.8171 -0.1586 -0.5542\nv -0.0187 0.069023 0.093074\nvn -0.8171 -0.1586 -0.5542\nv -0.02149 0.077532 0.092671\nvn -0.8323 -0.3953 -0.3886\nv -0.024901 0.08293 0.094482\nvn -0.8323 -0.3953 -0.3886\nv -0.024504 0.08474 0.091792\nvn -0.8323 -0.3953 -0.3886\nv -0.019857 0.070642 0.094316\nvn -0.8448 -0.2344 -0.481\nv -0.01943 0.072192 0.09281\nvn -0.8448 -0.2344 -0.481\nv -0.0187 0.069023 0.093074\nvn -0.8448 -0.2344 -0.481\nv -0.017801 -0.077763 0.076118\nvn -0.9999 0.0094 0.0042\nv -0.021845 0.071923 0.096555\nvn -0.7831 -0.1698 -0.5983\nv -0.019857 0.070642 0.094316\nvn -0.7831 -0.1698 -0.5983\nv -0.019829 0.068763 0.094813\nvn -0.7831 -0.1698 -0.5983\nv -0.019857 0.070642 0.094316\nvn -0.825 -0.26 -0.5017\nv -0.021052 0.073024 0.095045\nvn -0.825 -0.26 -0.5017\nv -0.01943 0.072192 0.09281\nvn -0.825 -0.26 -0.5017\nv -0.01943 0.072192 0.09281\nvn -0.8214 -0.3029 -0.4832\nv -0.021052 0.073024 0.095045\nvn -0.8214 -0.3029 -0.4832\nv -0.022128 0.076171 0.094903\nvn -0.8214 -0.3029 -0.4832\nv -0.017801 -0.077763 0.076118\nvn -0.9998 0.0187 0.0062\nv -0.022128 0.076171 0.094903\nvn -0.8334 -0.3331 -0.4411\nv -0.02149 0.077532 0.092671\nvn -0.8334 -0.3331 -0.4411\nv -0.01943 0.072192 0.09281\nvn -0.8334 -0.3331 -0.4411\nv -0.026425 0.0715 0.101152\nvn -0.6804 -0.0417 -0.7317\nv -0.026199 0.073974 0.100801\nvn -0.6804 -0.0417 -0.7317\nv -0.022057 0.069565 0.097201\nvn -0.6804 -0.0417 -0.7317\nv -0.026199 0.073974 0.100801\nvn -0.7278 -0.1686 -0.6647\nv -0.025962 0.076079 0.100008\nvn -0.7278 -0.1686 -0.6647\nv -0.021845 0.071923 0.096555\nvn -0.7278 -0.1686 -0.6647\nv -0.017915 0.066472 0.092017\nvn -0.9616 -0.073 -0.2644\nv -0.017945 0.068543 0.091552\nvn -0.9616 -0.073 -0.2644\nv -0.017755 0.067268 0.091213\nvn -0.9616 -0.073 -0.2644\nv -0.022128 0.076171 0.094903\nvn -0.8143 -0.3623 -0.4534\nv -0.024901 0.08293 0.094482\nvn -0.8143 -0.3623 -0.4534\nv -0.02149 0.077532 0.092671\nvn -0.8143 -0.3623 -0.4534\nv -0.017785 -0.069357 0.092633\nvn -0.9988 0.0221 -0.0443\nv -0.01825 -0.079155 0.098207\nvn -0.9988 0.0221 -0.0443\nv -0.01825 -0.073593 0.100985\nvn -0.9988 0.0221 -0.0443\nv -0.017856 -0.026555 0.09437\nvn -0.9984 0.0004 -0.0558\nv -0.017715 -0.065856 0.091437\nvn -0.9987 0.0002 -0.05\nv -0.017785 -0.069357 0.092633\nvn -0.9984 0.0006 -0.0569\nv -0.017892 0.026935 0.092626\nvn -0.969 -0.1923 -0.1549\nv -0.018067 0.026412 0.094368\nvn -0.969 -0.1923 -0.1549\nv -0.018466 0.028205 0.094638\nvn -0.969 -0.1923 -0.1549\nv -0.018466 0.028205 0.094638\nvn -0.9414 -0.2063 -0.2669\nv -0.018609 0.029842 0.093878\nvn -0.9414 -0.2063 -0.2669\nv -0.018066 0.028804 0.092763\nvn -0.9414 -0.2063 -0.2669\nv -0.01872 0.03256 0.09345\nvn -0.8862 -0.1071 -0.4507\nv -0.018025 0.031604 0.092311\nvn -0.8862 -0.1071 -0.4507\nv -0.018609 0.029842 0.093878\nvn -0.8862 -0.1071 -0.4507\nv -0.01922 0.030219 0.095031\nvn -0.9335 -0.317 -0.1677\nv -0.018466 0.028205 0.094638\nvn -0.9335 -0.317 -0.1677\nv -0.018504 0.027727 0.095751\nvn -0.9335 -0.317 -0.1677\nv -0.018466 0.028205 0.094638\nvn -0.8861 -0.2566 -0.3859\nv -0.01922 0.030219 0.095031\nvn -0.886 -0.2576 -0.3856\nv -0.018609 0.029842 0.093878\nvn -0.8854 -0.2627 -0.3836\nv -0.018025 0.031604 0.092311\nvn -0.8566 -0.008 -0.5159\nv -0.01872 0.03256 0.09345\nvn -0.8566 -0.008 -0.5159\nv -0.018127 0.035878 0.092414\nvn -0.8566 -0.008 -0.5159\nv -0.018504 0.027727 0.095751\nvn -0.9393 -0.3359 -0.0695\nv -0.018396 0.027046 0.097589\nvn -0.9393 -0.3359 -0.0695\nv -0.018786 0.028126 0.09764\nvn -0.9393 -0.3359 -0.0695\nv -0.019537 0.031483 0.094892\nvn -0.8852 -0.2638 -0.3831\nv -0.017741 -0.072382 0.080162\nvn -0.9999 0.0101 0.0016\nv -0.017801 -0.077763 0.076118\nvn -0.9999 0.0101 0.0016\nv -0.017719 -0.070987 0.084956\nvn -0.9999 0.0101 0.0016\nv -0.019358 0.02996 0.095559\nvn -0.8462 -0.3576 -0.3949\nv -0.01922 0.030219 0.095031\nvn -0.8462 -0.3576 -0.3949\nv -0.018504 0.027727 0.095751\nvn -0.8462 -0.3576 -0.3949\nv -0.01872 0.03256 0.09345\nvn -0.8428 -0.0174 -0.5379\nv -0.018655 0.036638 0.093217\nvn -0.8428 -0.0174 -0.5379\nv -0.018127 0.035878 0.092414\nvn -0.8428 -0.0174 -0.5379\nv -0.019537 0.031483 0.094892\nvn -0.8508 -0.1749 -0.4955\nv -0.019661 0.032655 0.094691\nvn -0.8508 -0.1749 -0.4955\nv -0.018609 0.029842 0.093878\nvn -0.8508 -0.1749 -0.4955\nv -0.018609 0.029842 0.093878\nvn -0.7952 -0.1259 -0.5932\nv -0.019661 0.032655 0.094691\nvn -0.7952 -0.1259 -0.5932\nv -0.01872 0.03256 0.09345\nvn -0.7952 -0.1259 -0.5932\nv -0.018655 0.036638 0.093217\nvn -0.7352 -0.027 -0.6773\nv -0.01872 0.03256 0.09345\nvn -0.7352 -0.027 -0.6773\nv -0.019436 0.034695 0.094141\nvn -0.7352 -0.027 -0.6773\nv -0.019661 0.032655 0.094691\nvn -0.7975 -0.0733 -0.5989\nv -0.019436 0.034695 0.094141\nvn -0.7975 -0.0733 -0.5989\nv -0.01872 0.03256 0.09345\nvn -0.7975 -0.0733 -0.5989\nv -0.019358 0.02996 0.095559\nvn -0.8275 -0.4383 -0.3508\nv -0.02032 0.030666 0.096946\nvn -0.8275 -0.4383 -0.3508\nv -0.020561 0.031679 0.09625\nvn -0.8275 -0.4383 -0.3508\nv -0.019265 0.029318 0.096444\nvn -0.8014 -0.5896 -0.1007\nv -0.019388 0.029206 0.09808\nvn -0.8014 -0.5896 -0.1007\nv -0.02032 0.030666 0.096946\nvn -0.8014 -0.5896 -0.1007\nv -0.019358 0.02996 0.095559\nvn -0.8162 -0.4063 -0.4109\nv -0.020561 0.031679 0.09625\nvn -0.8162 -0.4063 -0.4109\nv -0.01922 0.030219 0.095031\nvn -0.8162 -0.4063 -0.4109\nv -0.020914 0.032681 0.096117\nvn -0.7732 -0.3428 -0.5336\nv -0.019537 0.031483 0.094892\nvn -0.7732 -0.3428 -0.5336\nv -0.020561 0.031679 0.09625\nvn -0.7732 -0.3428 -0.5336\nv -0.020561 0.031679 0.09625\nvn -0.7888 -0.2587 -0.5575\nv -0.019537 0.031483 0.094892\nvn -0.7888 -0.2587 -0.5575\nv -0.01922 0.030219 0.095031\nvn -0.7888 -0.2587 -0.5575\nv -0.018786 0.028126 0.09764\nvn -0.9398 -0.3407 0.0278\nv -0.018396 0.027046 0.097589\nvn -0.9398 -0.3407 0.0278\nv -0.018385 0.027304 0.101143\nvn -0.9398 -0.3407 0.0278\nv -0.018385 0.027304 0.101143\nvn -0.9894 -0.1447 0.0137\nv -0.018396 0.027046 0.097589\nvn -0.9894 -0.1447 0.0137\nv -0.018236 0.026297 0.101221\nvn -0.9894 -0.1447 0.0137\nv -0.019436 0.034695 0.094141\nvn -0.7408 -0.0973 -0.6646\nv -0.019661 0.032655 0.094691\nvn -0.7408 -0.0973 -0.6646\nv -0.020374 0.035776 0.095029\nvn -0.7408 -0.0973 -0.6646\nv -0.020374 0.035776 0.095029\nvn -0.6976 -0.0823 -0.7117\nv -0.019661 0.032655 0.094691\nvn -0.6976 -0.0823 -0.7117\nv -0.021083 0.03382 0.09595\nvn -0.6976 -0.0823 -0.7117\nv -0.02032 0.030666 0.096946\nvn -0.7282 -0.4975 -0.4713\nv -0.021428 0.031577 0.097697\nvn -0.7282 -0.4975 -0.4713\nv -0.020561 0.031679 0.09625\nvn -0.7282 -0.4975 -0.4713\nv -0.020561 0.031679 0.09625\nvn -0.6703 -0.5951 -0.4434\nv -0.021428 0.031577 0.097697\nvn -0.6703 -0.5951 -0.4434\nv -0.02263 0.032558 0.098198\nvn -0.6703 -0.5951 -0.4434\nv -0.02263 0.032558 0.098198\nvn -0.7148 -0.3757 -0.5898\nv -0.022142 0.033118 0.097249\nvn -0.7148 -0.3757 -0.5898\nv -0.020561 0.031679 0.09625\nvn -0.7148 -0.3757 -0.5898\nv -0.02263 0.032558 0.098198\nvn -0.6143 -0.6315 -0.4732\nv -0.022164 0.031841 0.098549\nvn -0.6143 -0.6315 -0.4732\nv -0.023606 0.032641 0.099354\nvn -0.6143 -0.6315 -0.4732\nv -0.019436 0.034695 0.094141\nvn -0.7666 0.0023 -0.6421\nv -0.019394 0.047238 0.094136\nvn -0.7661 0.0024 -0.6427\nv -0.018655 0.036638 0.093217\nvn -0.7654 0.0025 -0.6436\nv -0.020644 0.030803 0.101173\nvn -0.5225 -0.8484 0.0848\nv -0.021549 0.031365 0.10121\nvn -0.5225 -0.8484 0.0848\nv -0.020898 0.030799 0.09956\nvn -0.5225 -0.8484 0.0848\nv -0.024701 0.033799 0.099337\nvn -0.6264 -0.486 -0.6094\nv -0.022142 0.033118 0.097249\nvn -0.6264 -0.486 -0.6094\nv -0.02263 0.032558 0.098198\nvn -0.6264 -0.486 -0.6094\nv -0.02263 0.032558 0.098198\nvn -0.6302 -0.6033 -0.4887\nv -0.023606 0.032641 0.099354\nvn -0.6302 -0.6033 -0.4887\nv -0.024701 0.033799 0.099337\nvn -0.6302 -0.6033 -0.4887\nv -0.022142 0.033118 0.097249\nvn -0.6504 -0.2799 -0.7061\nv -0.024701 0.033799 0.099337\nvn -0.6504 -0.2799 -0.7061\nv -0.023431 0.034298 0.097969\nvn -0.6504 -0.2799 -0.7061\nv -0.01774 -0.071932 0.077753\nvn -0.9997 0.0043 0.0221\nv -0.017801 -0.077763 0.076118\nvn -0.9997 0.0043 0.0221\nv -0.017721 -0.072178 0.078662\nvn -0.9997 0.0043 0.0221\nv -0.018025 0.031604 0.092311\nvn -0.7691 -0.003 -0.6392\nv -0.018127 0.035878 0.092414\nvn -0.7691 -0.003 -0.6392\nv -0.017915 0.066472 0.092017\nvn -0.7691 -0.003 -0.6392\nv -0.019436 0.034695 0.094141\nvn -0.686 0.002 -0.7276\nv -0.020374 0.035776 0.095029\nvn -0.686 0.002 -0.7276\nv -0.019394 0.047238 0.094136\nvn -0.686 0.002 -0.7276\nv -0.022908 0.031906 0.100523\nvn -0.4295 -0.8925 -0.1378\nv -0.025355 0.032984 0.101164\nvn -0.4295 -0.8925 -0.1378\nv -0.023344 0.032198 0.09999\nvn -0.4295 -0.8925 -0.1378\nv -0.024701 0.033799 0.099337\nvn -0.6277 -0.3321 -0.7041\nv -0.028277 0.036669 0.101171\nvn -0.6277 -0.3321 -0.7041\nv -0.023431 0.034298 0.097969\nvn -0.6277 -0.3321 -0.7041\nv -0.023659 0.035498 0.097894\nvn -0.598 -0.1623 -0.7849\nv -0.023431 0.034298 0.097969\nvn -0.598 -0.1623 -0.7849\nv -0.028277 0.036669 0.101171\nvn -0.598 -0.1623 -0.7849\nv -0.027234 0.034524 0.101175\nvn -0.6115 -0.3893 -0.6889\nv -0.027757 0.035338 0.10118\nvn -0.6115 -0.3893 -0.6889\nv -0.024701 0.033799 0.099337\nvn -0.6115 -0.3893 -0.6889\nv -0.018673 0.059883 0.093331\nvn -0.7649 0.0026 -0.6442\nv -0.018251 -0.092995 0.053421\nvn -0.9997 0.0248 0.0032\nv -0.017801 -0.077763 0.076118\nvn -0.9997 0.0248 0.0032\nv -0.018241 -0.091887 0.04769\nvn -0.9997 0.0248 0.0032\nv -0.017719 -0.06869 0.09033\nvn -0.9996 0.0132 -0.0249\nv -0.017785 -0.069357 0.092633\nvn -0.9995 0.01 -0.03\nv -0.017721 -0.067116 0.091247\nvn -0.9996 0.0126 -0.026\nv -0.018127 0.035878 0.092414\nvn -0.814 0.0037 -0.5809\nv -0.018673 0.059883 0.093331\nvn -0.814 0.0037 -0.5809\nv -0.018413 0.067219 0.093013\nvn -0.814 0.0037 -0.5809\nv -0.019829 0.068763 0.094813\nvn -0.7452 -0.1132 -0.6571\nv -0.022057 0.069565 0.097201\nvn -0.7452 -0.1132 -0.6571\nv -0.021845 0.071923 0.096555\nvn -0.7452 -0.1132 -0.6571\nv -0.022729 0.05958 0.097441\nvn -0.6641 0.0267 -0.7472\nv -0.026425 0.0715 0.101152\nvn -0.6641 0.0267 -0.7472\nv -0.022057 0.069565 0.097201\nvn -0.6641 0.0267 -0.7472\nv -0.018445 0.071025 0.091384\nvn -0.8818 -0.3113 -0.3544\nv -0.01943 0.072192 0.09281\nvn -0.8818 -0.3113 -0.3544\nv -0.019674 0.074495 0.091397\nvn -0.8818 -0.3113 -0.3544\nv -0.018445 0.071025 0.091384\nvn -0.9021 -0.3187 -0.291\nv -0.019674 0.074495 0.091397\nvn -0.9021 -0.3187 -0.291\nv -0.018572 0.072784 0.089854\nvn -0.9021 -0.3187 -0.291\nv -0.026425 0.0715 0.101152\nvn -0.6171 0.043 -0.7857\nv -0.025753 0.056313 0.099794\nvn -0.6171 0.043 -0.7857\nv -0.027987 0.049338 0.101167\nvn -0.6171 0.043 -0.7857\nv -0.017801 -0.077763 0.076118\nvn -0.9994 0.0308 -0.015\nv -0.017751 -0.069602 0.089388\nvn -0.9993 0.0335 -0.0168\nv -0.017719 -0.070987 0.084956\nvn -0.9992 0.0359 -0.0183\nv -0.017785 -0.069357 0.092633\nvn -0.9995 0.0277 -0.0131\nv -0.019674 0.074495 0.091397\nvn -0.8641 -0.3765 -0.334\nv -0.02149 0.077532 0.092671\nvn -0.8641 -0.3765 -0.334\nv -0.021236 0.078946 0.090419\nvn -0.8641 -0.3765 -0.334\nv -0.021845 0.071923 0.096555\nvn -0.7567 -0.2464 -0.6056\nv -0.025962 0.076079 0.100008\nvn -0.7567 -0.2464 -0.6056\nv -0.025642 0.078519 0.098615\nvn -0.7567 -0.2464 -0.6056\nv -0.018251 -0.089872 0.074163\nvn -0.9992 0.0389 -0.0104\nv -0.018251 -0.092995 0.053421\nvn -0.9993 0.0381 -0.0058\nv -0.017751 -0.069602 0.089388\nvn -0.9987 0.0494 -0.0144\nv -0.017785 -0.069357 0.092633\nvn -0.9987 0.0494 -0.0144\nv -0.017719 -0.06869 0.09033\nvn -0.9987 0.0494 -0.0144\nv -0.017865 0.023805 0.094367\nvn -0.9987 -0.0002 -0.0501\nv -0.017717 0.021817 0.091432\nvn -0.9988 -0.0001 -0.0482\nv -0.02032 0.030666 0.096946\nvn -0.8029 -0.5194 -0.2925\nv -0.019358 0.02996 0.095559\nvn -0.8029 -0.5194 -0.2925\nv -0.019265 0.029318 0.096444\nvn -0.8029 -0.5194 -0.2925\nv -0.018127 0.035878 0.092414\nvn -0.8346 0.0021 -0.5508\nv -0.018655 0.036638 0.093217\nvn -0.8346 0.0021 -0.5508\nv -0.018673 0.059883 0.093331\nvn -0.8346 0.0021 -0.5508\nv -0.022142 0.033118 0.097249\nvn -0.7005 -0.3303 -0.6326\nv -0.020914 0.032681 0.096117\nvn -0.7005 -0.3303 -0.6326\nv -0.020561 0.031679 0.09625\nvn -0.7005 -0.3303 -0.6326\nv -0.018248 -0.084549 0.092619\nvn -0.9991 0.0305 -0.0297\nv -0.01825 -0.079155 0.098207\nvn -0.9991 0.0305 -0.0297\nv -0.017785 -0.069357 0.092633\nvn -0.9991 0.0305 -0.0297\nv -0.024701 0.033799 0.099337\nvn -0.5834 -0.5725 -0.5761\nv -0.026505 0.033759 0.101202\nvn -0.5863 -0.5668 -0.5788\nv -0.027234 0.034524 0.101175\nvn -0.582 -0.5752 -0.5749\nv -0.022128 0.076171 0.094903\nvn -0.7807 -0.3162 -0.539\nv -0.025642 0.078519 0.098615\nvn -0.7807 -0.3162 -0.539\nv -0.025273 0.08088 0.096696\nvn -0.7807 -0.3162 -0.539\nv -0.024504 0.08474 0.091792\nvn -0.8613 -0.417 -0.2903\nv -0.024212 0.085712 0.08953\nvn -0.8613 -0.417 -0.2903\nv -0.021236 0.078946 0.090419\nvn -0.8613 -0.417 -0.2903\nv -0.018249 -0.026286 0.101172\nvn -0.9984 0.0004 -0.0561\nv -0.024252 0.037458 0.098135\nvn -0.5909 -0.0757 -0.8032\nv -0.023659 0.035498 0.097894\nvn -0.5902 -0.0801 -0.8033\nv -0.028277 0.036669 0.101171\nvn -0.5904 -0.0789 -0.8033\nv -0.028616 0.039374 0.101169\nvn -0.5911 -0.0746 -0.8031\nv -0.01825 -0.073593 0.100985\nvn -0.9985 0.0002 -0.0554\nv -0.017717 0.021817 0.091432\nvn -0.9903 -0.0015 -0.139\nv -0.017892 0.026935 0.092626\nvn -0.9903 -0.0015 -0.139\nv -0.017721 0.029188 0.091378\nvn -0.9903 -0.0015 -0.139\nv -0.018025 0.031604 0.092311\nvn -0.9683 -0.0261 -0.2484\nv -0.017721 0.029188 0.091378\nvn -0.9683 -0.0261 -0.2484\nv -0.018066 0.028804 0.092763\nvn -0.9683 -0.0261 -0.2484\nv -0.017892 0.026935 0.092626\nvn -0.9703 -0.0731 -0.2306\nv -0.018466 0.028205 0.094638\nvn -0.9703 -0.0731 -0.2306\nv -0.018066 0.028804 0.092763\nvn -0.9703 -0.0731 -0.2306\nv -0.018066 0.028804 0.092763\nvn -0.9156 -0.0511 -0.3987\nv -0.018609 0.029842 0.093878\nvn -0.9156 -0.0511 -0.3987\nv -0.018025 0.031604 0.092311\nvn -0.9156 -0.0511 -0.3987\nv -0.018195 0.026323 0.096409\nvn -0.9667 -0.2458 -0.0715\nv -0.018504 0.027727 0.095751\nvn -0.9667 -0.2458 -0.0715\nv -0.018067 0.026412 0.094368\nvn -0.9667 -0.2458 -0.0715\nv -0.018504 0.027727 0.095751\nvn -0.9729 -0.1987 -0.1182\nv -0.018466 0.028205 0.094638\nvn -0.9729 -0.1987 -0.1182\nv -0.018067 0.026412 0.094368\nvn -0.9729 -0.1987 -0.1182\nv -0.018195 0.026323 0.096409\nvn -0.9737 -0.2264 -0.0269\nv -0.018396 0.027046 0.097589\nvn -0.9737 -0.2264 -0.0269\nv -0.018504 0.027727 0.095751\nvn -0.9737 -0.2264 -0.0269\nv -0.018786 0.028126 0.09764\nvn -0.9091 -0.4137 -0.0486\nv -0.019265 0.029318 0.096444\nvn -0.9091 -0.4137 -0.0486\nv -0.018504 0.027727 0.095751\nvn -0.9091 -0.4137 -0.0486\nv -0.018504 0.027727 0.095751\nvn -0.9158 -0.3648 -0.1683\nv -0.019265 0.029318 0.096444\nvn -0.9158 -0.3648 -0.1683\nv -0.019358 0.02996 0.095559\nvn -0.9158 -0.3648 -0.1683\nv -0.018236 0.026297 0.101221\nvn -0.9674 -0.2529 -0.0096\nv -0.018396 0.027046 0.097589\nvn -0.9674 -0.2529 -0.0096\nv -0.018195 0.026323 0.096409\nvn -0.9674 -0.2529 -0.0096\nv -0.01774 0.066021 0.091413\nvn -0.9687 -0.0502 -0.2433\nv -0.017915 0.066472 0.092017\nvn -0.9687 -0.0502 -0.2433\nv -0.017755 0.067268 0.091213\nvn -0.9687 -0.0502 -0.2433\nv -0.018786 0.028126 0.09764\nvn -0.8858 -0.4537 -0.0977\nv -0.019388 0.029206 0.09808\nvn -0.8858 -0.4537 -0.0977\nv -0.019265 0.029318 0.096444\nvn -0.8858 -0.4537 -0.0977\nv -0.019664 0.067465 0.094701\nvn -0.8057 -0.0513 -0.5901\nv -0.019829 0.068763 0.094813\nvn -0.8057 -0.0513 -0.5901\nv -0.018413 0.067219 0.093013\nvn -0.8057 -0.0513 -0.5901\nv -0.017865 0.023805 0.094367\nvn -0.9991 -0.0267 -0.0321\nv -0.017892 0.026935 0.092626\nvn -0.9991 -0.0267 -0.0321\nv -0.017717 0.021817 0.091432\nvn -0.9991 -0.0267 -0.0321\nv -0.018891 0.028563 0.1\nvn -0.9348 -0.3544 0.024\nv -0.018786 0.028126 0.09764\nvn -0.9348 -0.3544 0.024\nv -0.018385 0.027304 0.101143\nvn -0.9348 -0.3544 0.024\nv -0.018067 0.026412 0.094368\nvn -0.9895 -0.0768 -0.1222\nv -0.017892 0.026935 0.092626\nvn -0.9895 -0.0768 -0.1222\nv -0.017865 0.023805 0.094367\nvn -0.9895 -0.0768 -0.1222\nv -0.018066 0.028804 0.092763\nvn -0.9632 -0.0703 -0.2594\nv -0.017721 0.029188 0.091378\nvn -0.9632 -0.0703 -0.2594\nv -0.017892 0.026935 0.092626\nvn -0.9632 -0.0703 -0.2594\nv -0.02032 0.030666 0.096946\nvn -0.6653 -0.7183 -0.2038\nv -0.020014 0.029997 0.098309\nvn -0.6653 -0.7183 -0.2038\nv -0.020765 0.030733 0.098165\nvn -0.6653 -0.7183 -0.2038\nv -0.018891 0.028563 0.1\nvn -0.8627 -0.5028 0.0546\nv -0.019388 0.029206 0.09808\nvn -0.8627 -0.5028 0.0546\nv -0.018786 0.028126 0.09764\nvn -0.8627 -0.5028 0.0546\nv -0.019714 0.029904 0.100882\nvn -0.8409 -0.5399 0.0366\nv -0.019388 0.029206 0.09808\nvn -0.8409 -0.5399 0.0366\nv -0.018891 0.028563 0.1\nvn -0.8409 -0.5399 0.0366\nv -0.019537 0.031483 0.094892\nvn -0.7395 -0.189 -0.6461\nv -0.020914 0.032681 0.096117\nvn -0.7395 -0.189 -0.6461\nv -0.019661 0.032655 0.094691\nvn -0.7395 -0.189 -0.6461\nv -0.019661 0.032655 0.094691\nvn -0.7374 -0.2041 -0.6439\nv -0.020914 0.032681 0.096117\nvn -0.7374 -0.2041 -0.6439\nv -0.021083 0.03382 0.09595\nvn -0.7374 -0.2041 -0.6439\nv -0.019714 0.029904 0.100882\nvn -0.7725 -0.6314 0.0674\nv -0.020014 0.029997 0.098309\nvn -0.7725 -0.6314 0.0674\nv -0.019388 0.029206 0.09808\nvn -0.7725 -0.6314 0.0674\nv -0.020374 0.035776 0.095029\nvn -0.6684 -0.1046 -0.7364\nv -0.021083 0.03382 0.09595\nvn -0.6684 -0.1046 -0.7364\nv -0.021757 0.035806 0.09628\nvn -0.6684 -0.1046 -0.7364\nv -0.020898 0.030799 0.09956\nvn -0.6346 -0.7715 0.0462\nv -0.020014 0.029997 0.098309\nvn -0.6346 -0.7715 0.0462\nv -0.019714 0.029904 0.100882\nvn -0.6346 -0.7715 0.0462\nv -0.020898 0.030799 0.09956\nvn -0.6965 -0.7168 -0.0326\nv -0.020765 0.030733 0.098165\nvn -0.6965 -0.7168 -0.0326\nv -0.020014 0.029997 0.098309\nvn -0.6965 -0.7168 -0.0326\nv -0.020914 0.032681 0.096117\nvn -0.7017 -0.2045 -0.6825\nv -0.022142 0.033118 0.097249\nvn -0.7017 -0.2045 -0.6825\nv -0.021083 0.03382 0.09595\nvn -0.7017 -0.2045 -0.6825\nv -0.019388 0.029206 0.09808\nvn -0.7946 -0.5962 -0.1148\nv -0.020014 0.029997 0.098309\nvn -0.7946 -0.5962 -0.1148\nv -0.02032 0.030666 0.096946\nvn -0.7946 -0.5962 -0.1148\nv -0.020898 0.030799 0.09956\nvn -0.6734 -0.7313 0.1082\nv -0.019714 0.029904 0.100882\nvn -0.6734 -0.7313 0.1082\nv -0.020644 0.030803 0.101173\nvn -0.6734 -0.7313 0.1082\nv -0.022164 0.031841 0.098549\nvn -0.6743 -0.6286 -0.3876\nv -0.02263 0.032558 0.098198\nvn -0.6743 -0.6286 -0.3876\nv -0.021428 0.031577 0.097697\nvn -0.6743 -0.6286 -0.3876\nv -0.021083 0.03382 0.09595\nvn -0.6362 -0.0887 -0.7664\nv -0.023659 0.035498 0.097894\nvn -0.636 -0.0904 -0.7664\nv -0.021757 0.035806 0.09628\nvn -0.6351 -0.0963 -0.7664\nv -0.017721 -0.072178 0.078662\nvn -0.9998 0.0192 -0.0107\nv -0.017801 -0.077763 0.076118\nvn -0.9998 0.0192 -0.0107\nv -0.017741 -0.072382 0.080162\nvn -0.9998 0.0192 -0.0107\nv -0.022142 0.033118 0.097249\nvn -0.6569 -0.2941 -0.6943\nv -0.023431 0.034298 0.097969\nvn -0.6569 -0.2941 -0.6943\nv -0.021083 0.03382 0.09595\nvn -0.6569 -0.2941 -0.6943\nv -0.02032 0.030666 0.096946\nvn -0.704 -0.6751 -0.2202\nv -0.020765 0.030733 0.098165\nvn -0.704 -0.6751 -0.2202\nv -0.021428 0.031577 0.097697\nvn -0.704 -0.6751 -0.2202\nv -0.023431 0.034298 0.097969\nvn -0.6621 -0.171 -0.7296\nv -0.023659 0.035498 0.097894\nvn -0.6621 -0.171 -0.7296\nv -0.021083 0.03382 0.09595\nvn -0.6621 -0.171 -0.7296\nv -0.023344 0.032198 0.09999\nvn -0.567 -0.767 -0.3004\nv -0.023606 0.032641 0.099354\nvn -0.567 -0.767 -0.3004\nv -0.021881 0.03147 0.099088\nvn -0.567 -0.767 -0.3004\nv -0.022908 0.031906 0.100523\nvn -0.4839 -0.8713 -0.0816\nv -0.023344 0.032198 0.09999\nvn -0.4839 -0.8713 -0.0816\nv -0.021881 0.03147 0.099088\nvn -0.4839 -0.8713 -0.0816\nv -0.022743 0.039517 0.096986\nvn -0.5996 -0.007 -0.8003\nv -0.021757 0.035806 0.09628\nvn -0.5996 -0.007 -0.8003\nv -0.024252 0.037458 0.098135\nvn -0.5996 -0.007 -0.8003\nv -0.020898 0.030799 0.09956\nvn -0.5592 -0.8289 -0.0142\nv -0.021881 0.03147 0.099088\nvn -0.5592 -0.8289 -0.0142\nv -0.020765 0.030733 0.098165\nvn -0.5592 -0.8289 -0.0142\nv -0.023606 0.032641 0.099354\nvn -0.5084 -0.7907 -0.3411\nv -0.023344 0.032198 0.09999\nvn -0.5084 -0.7907 -0.3411\nv -0.025355 0.032984 0.101164\nvn -0.5084 -0.7907 -0.3411\nv -0.020765 0.030733 0.098165\nvn -0.6396 -0.6902 -0.3385\nv -0.022164 0.031841 0.098549\nvn -0.6396 -0.6902 -0.3385\nv -0.021428 0.031577 0.097697\nvn -0.6396 -0.6902 -0.3385\nv -0.021881 0.03147 0.099088\nvn -0.6406 -0.747 -0.1782\nv -0.022164 0.031841 0.098549\nvn -0.6406 -0.747 -0.1782\nv -0.020765 0.030733 0.098165\nvn -0.6406 -0.747 -0.1782\nv -0.017721 0.029188 0.091378\nvn -0.9605 -0.0002 -0.2782\nv -0.017915 0.066472 0.092017\nvn -0.9605 -0.0002 -0.2782\nv -0.01774 0.066021 0.091413\nvn -0.9605 -0.0002 -0.2782\nv -0.018025 0.031604 0.092311\nvn -0.9503 0.0004 -0.3112\nv -0.017915 0.066472 0.092017\nvn -0.9503 0.0004 -0.3112\nv -0.017721 0.029188 0.091378\nvn -0.9503 0.0004 -0.3112\nv -0.022743 0.039517 0.096986\nvn -0.6708 -0.0373 -0.7407\nv -0.020374 0.035776 0.095029\nvn -0.6708 -0.0373 -0.7407\nv -0.021757 0.035806 0.09628\nvn -0.6708 -0.0373 -0.7407\nv -0.023606 0.032641 0.099354\nvn -0.5703 -0.7852 -0.2414\nv -0.022164 0.031841 0.098549\nvn -0.5703 -0.7852 -0.2414\nv -0.021881 0.03147 0.099088\nvn -0.5703 -0.7852 -0.2414\nv -0.027757 0.035338 0.10118\nvn -0.5858 -0.2341 -0.7759\nv -0.028277 0.036669 0.101171\nvn -0.5858 -0.2341 -0.7759\nv -0.024701 0.033799 0.099337\nvn -0.5858 -0.2341 -0.7759\nv -0.020943 0.062748 0.095911\nvn -0.6688 0.0183 -0.7432\nv -0.019394 0.047238 0.094136\nvn -0.6688 0.0183 -0.7432\nv -0.022729 0.05958 0.097441\nvn -0.6688 0.0183 -0.7432\nv -0.022729 0.05958 0.097441\nvn -0.6969 0.0037 -0.7172\nv -0.019394 0.047238 0.094136\nvn -0.6969 0.0037 -0.7172\nv -0.020374 0.035776 0.095029\nvn -0.6969 0.0037 -0.7172\nv -0.017915 0.066472 0.092017\nvn -0.8946 0.0004 -0.4469\nv -0.018127 0.035878 0.092414\nvn -0.8946 0.0004 -0.4469\nv -0.018413 0.067219 0.093013\nvn -0.8946 0.0004 -0.4469\nv -0.019394 0.047238 0.094136\nvn -0.7073 0.0103 -0.7069\nv -0.020943 0.062748 0.095911\nvn -0.7141 0.0139 -0.6999\nv -0.019664 0.067465 0.094701\nvn -0.7093 0.0113 -0.7048\nv -0.020898 0.030799 0.09956\nvn -0.5214 -0.8453 -0.1163\nv -0.022908 0.031906 0.100523\nvn -0.5214 -0.8453 -0.1163\nv -0.021881 0.03147 0.099088\nvn -0.5214 -0.8453 -0.1163\nv -0.025753 0.056313 0.099794\nvn -0.6261 0.0181 -0.7795\nv -0.022729 0.05958 0.097441\nvn -0.6212 0.0182 -0.7834\nv -0.022743 0.039517 0.096986\nvn -0.6244 0.0181 -0.7809\nv -0.024252 0.037458 0.098135\nvn -0.6348 -0.0982 -0.7664\nv -0.019394 0.047238 0.094136\nvn -0.7929 0.0064 -0.6094\nv -0.019664 0.067465 0.094701\nvn -0.7929 0.0064 -0.6094\nv -0.018673 0.059883 0.093331\nvn -0.7929 0.0064 -0.6094\nv -0.021549 0.031365 0.10121\nvn -0.4262 -0.894 0.1384\nv -0.022908 0.031906 0.100523\nvn -0.4262 -0.894 0.1384\nv -0.020898 0.030799 0.09956\nvn -0.4262 -0.894 0.1384\nv -0.018248 -0.084549 0.092619\nvn -0.9992 0.0379 -0.0115\nv -0.017721 0.068677 0.090248\nvn -0.9698 -0.1607 -0.1833\nv -0.017945 0.068543 0.091552\nvn -0.9698 -0.1607 -0.1833\nv -0.017924 0.070428 0.089792\nvn -0.9698 -0.1607 -0.1833\nv -0.018413 0.067219 0.093013\nvn -0.8256 -0.1129 -0.5529\nv -0.019829 0.068763 0.094813\nvn -0.8256 -0.1129 -0.5529\nv -0.0187 0.069023 0.093074\nvn -0.8256 -0.1129 -0.5529\nv -0.025355 0.032984 0.101164\nvn -0.5284 -0.7666 -0.365\nv -0.026505 0.033759 0.101202\nvn -0.5284 -0.7666 -0.365\nv -0.023606 0.032641 0.099354\nvn -0.5284 -0.7666 -0.365\nv -0.022057 0.069565 0.097201\nvn -0.7161 0.015 -0.6978\nv -0.0187 0.069023 0.093074\nvn -0.9007 -0.2072 -0.3819\nv -0.018445 0.071025 0.091384\nvn -0.9007 -0.2072 -0.3819\nv -0.017945 0.068543 0.091552\nvn -0.9007 -0.2072 -0.3819\nv -0.018445 0.071025 0.091384\nvn -0.8791 -0.2367 -0.4136\nv -0.0187 0.069023 0.093074\nvn -0.8791 -0.2367 -0.4136\nv -0.01943 0.072192 0.09281\nvn -0.8791 -0.2367 -0.4136\nv -0.019664 0.067465 0.094701\nvn -0.7366 -0.0351 -0.6754\nv -0.022057 0.069565 0.097201\nvn -0.7366 -0.0351 -0.6754\nv -0.019829 0.068763 0.094813\nvn -0.7366 -0.0351 -0.6754\nv -0.017945 0.068543 0.091552\nvn -0.9502 -0.2071 -0.2327\nv -0.018445 0.071025 0.091384\nvn -0.9502 -0.2071 -0.2327\nv -0.017924 0.070428 0.089792\nvn -0.9502 -0.2071 -0.2327\nv -0.022729 0.05958 0.097441\nvn -0.6784 0.028 -0.7342\nv -0.022057 0.069565 0.097201\nvn -0.6784 0.028 -0.7342\nv -0.020943 0.062748 0.095911\nvn -0.6784 0.028 -0.7342\nv -0.023606 0.032641 0.099354\nvn -0.5875 -0.5642 -0.58\nv -0.018445 0.071025 0.091384\nvn -0.9435 -0.2539 -0.213\nv -0.018572 0.072784 0.089854\nvn -0.9435 -0.2539 -0.213\nv -0.017924 0.070428 0.089792\nvn -0.9435 -0.2539 -0.213\nv -0.017715 -0.065856 0.091437\nvn -0.9995 0.0093 -0.0313\nv -0.021845 0.071923 0.096555\nvn -0.7884 -0.2194 -0.5747\nv -0.021052 0.073024 0.095045\nvn -0.7884 -0.2194 -0.5747\nv -0.019857 0.070642 0.094316\nvn -0.7884 -0.2194 -0.5747\nv -0.025753 0.056313 0.099794\nvn -0.6404 0.0403 -0.767\nv -0.026425 0.0715 0.101152\nvn -0.6404 0.0403 -0.767\nv -0.022729 0.05958 0.097441\nvn -0.6404 0.0403 -0.767\nv -0.020374 0.035776 0.095029\nvn -0.6196 0.0182 -0.7847\nv -0.021845 0.071923 0.096555\nvn -0.7219 -0.1219 -0.6812\nv -0.022057 0.069565 0.097201\nvn -0.7219 -0.1219 -0.6812\nv -0.026199 0.073974 0.100801\nvn -0.7219 -0.1219 -0.6812\nv -0.018572 0.072784 0.089854\nvn -0.9013 -0.3478 -0.2582\nv -0.019674 0.074495 0.091397\nvn -0.9013 -0.3478 -0.2582\nv -0.020035 0.076416 0.090069\nvn -0.9013 -0.3478 -0.2582\nv -0.02149 0.077532 0.092671\nvn -0.8497 -0.3385 -0.4042\nv -0.019674 0.074495 0.091397\nvn -0.8497 -0.3385 -0.4042\nv -0.01943 0.072192 0.09281\nvn -0.8497 -0.3385 -0.4042\nv -0.028616 0.039374 0.101169\nvn -0.5794 -0.0297 -0.8145\nv -0.022743 0.039517 0.096986\nvn -0.5794 -0.0297 -0.8145\nv -0.024252 0.037458 0.098135\nvn -0.5794 -0.0297 -0.8145\nv -0.021052 0.073024 0.095045\nvn -0.7799 -0.2919 -0.5537\nv -0.025642 0.078519 0.098615\nvn -0.7799 -0.2919 -0.5537\nv -0.022128 0.076171 0.094903\nvn -0.7799 -0.2919 -0.5537\nv -0.027987 0.049338 0.101167\nvn -0.582 0.0351 -0.8124\nv -0.022743 0.039517 0.096986\nvn -0.5872 0.0308 -0.8089\nv -0.028616 0.039374 0.101169\nvn -0.5803 0.0365 -0.8136\nv -0.025753 0.056313 0.099794\nvn -0.5887 0.0295 -0.8078\nv -0.021236 0.078946 0.090419\nvn -0.8765 -0.3741 -0.303\nv -0.020035 0.076416 0.090069\nvn -0.8765 -0.3741 -0.303\nv -0.019674 0.074495 0.091397\nvn -0.8765 -0.3741 -0.303\nv -0.021845 0.071923 0.096555\nvn -0.7657 -0.2565 -0.5898\nv -0.025642 0.078519 0.098615\nvn -0.7657 -0.2565 -0.5898\nv -0.021052 0.073024 0.095045\nvn -0.7657 -0.2565 -0.5898\nv -0.018413 0.067219 0.093013\nvn -0.803 0.0027 -0.5959\nv -0.018673 0.059883 0.093331\nvn -0.803 0.0027 -0.5959\nv -0.019664 0.067465 0.094701\nvn -0.803 0.0027 -0.5959\nv -0.017915 0.066472 0.092017\nvn -0.918 -0.0992 -0.3839\nv -0.018413 0.067219 0.093013\nvn -0.918 -0.0992 -0.3839\nv -0.017945 0.068543 0.091552\nvn -0.918 -0.0992 -0.3839\nv -0.028277 0.036669 0.101171\nvn -0.9922 -0.1243 -0.0064\nv -0.028566 0.038695 0.10671\nvn -0.9922 -0.1243 -0.0064\nv -0.028616 0.039374 0.101169\nvn -0.9922 -0.1243 -0.0064\nv -0.020628 0.030869 0.106872\nvn -0.637 -0.7708 0.0106\nv -0.020644 0.030803 0.101173\nvn -0.637 -0.7708 0.0106\nv -0.019692 0.030091 0.106555\nvn -0.637 -0.7708 0.0106\nv -0.028111 0.036237 0.106818\nvn -0.9178 -0.397 0.0057\nv -0.027757 0.035338 0.10118\nvn -0.9178 -0.397 0.0057\nv -0.027657 0.035185 0.106657\nvn -0.9178 -0.397 0.0057\nv -0.028566 0.038695 0.10671\nvn -0.9905 -0.1377 -0.0014\nv -0.028277 0.036669 0.101171\nvn -0.9905 -0.1377 -0.0014\nv -0.028351 0.037145 0.106686\nvn -0.9905 -0.1377 -0.0014\nv -0.019714 0.029904 0.100882\nvn -0.8344 -0.5484 0.0556\nv -0.018891 0.028563 0.1\nvn -0.8344 -0.5484 0.0556\nv -0.018732 0.029005 0.10674\nvn -0.8344 -0.5484 0.0556\nv -0.020644 0.030803 0.101173\nvn -0.6907 -0.7227 0.0265\nv -0.019714 0.029904 0.100882\nvn -0.6907 -0.7227 0.0265\nv -0.019692 0.030091 0.106555\nvn -0.6907 -0.7227 0.0265\nv -0.028277 0.036669 0.101171\nvn -0.9671 -0.2542 0.009\nv -0.028111 0.036237 0.106818\nvn -0.9671 -0.2542 0.009\nv -0.028351 0.037145 0.106686\nvn -0.9671 -0.2542 0.009\nv -0.021549 0.031365 0.10121\nvn -0.5268 -0.85 0.0045\nv -0.020644 0.030803 0.101173\nvn -0.5268 -0.85 0.0045\nv -0.02165 0.031458 0.106976\nvn -0.5268 -0.85 0.0045\nv -0.02165 0.031458 0.106976\nvn -0.4985 -0.8668 0.0113\nv -0.020644 0.030803 0.101173\nvn -0.4985 -0.8668 0.0113\nv -0.020628 0.030869 0.106872\nvn -0.4985 -0.8668 0.0113\nv -0.027757 0.035338 0.10118\nvn -0.9315 -0.3637 -0.0004\nv -0.028111 0.036237 0.106818\nvn -0.9315 -0.3637 -0.0004\nv -0.028277 0.036669 0.101171\nvn -0.9315 -0.3637 -0.0004\nv -0.019692 0.030091 0.106555\nvn -0.7513 -0.6595 0.0246\nv -0.019714 0.029904 0.100882\nvn -0.7513 -0.6595 0.0246\nv -0.018732 0.029005 0.10674\nvn -0.7513 -0.6595 0.0246\nv -0.026806 0.034093 0.106899\nvn -0.6517 -0.7584 0.01\nv -0.026505 0.033759 0.101202\nvn -0.6517 -0.7584 0.01\nv -0.025943 0.033347 0.106525\nvn -0.6517 -0.7584 0.01\nv -0.027234 0.034524 0.101175\nvn -0.8411 -0.5409 0.0009\nv -0.027206 0.03449 0.106361\nvn -0.8406 -0.5417 0.0007\nv -0.027757 0.035338 0.10118\nvn -0.8396 -0.5431 0.0004\nv -0.027657 0.035185 0.106657\nvn -0.8391 -0.5439 0.0002\nv -0.026505 0.033759 0.101202\nvn -0.7238 -0.69 -0.0007\nv -0.027206 0.03449 0.106361\nvn -0.7238 -0.69 -0.0007\nv -0.027234 0.034524 0.101175\nvn -0.7238 -0.69 -0.0007\nv -0.027206 0.03449 0.106361\nvn -0.7066 -0.7076 0.0041\nv -0.026505 0.033759 0.101202\nvn -0.7066 -0.7076 0.0041\nv -0.026806 0.034093 0.106899\nvn -0.7066 -0.7076 0.0041\nv -0.025355 0.032984 0.101164\nvn -0.5588 -0.8293 -0.0053\nv -0.025943 0.033347 0.106525\nvn -0.5588 -0.8293 -0.0053\nv -0.026505 0.033759 0.101202\nvn -0.5588 -0.8293 -0.0053\nv -0.018732 0.029005 0.10674\nvn -0.8591 -0.509 0.0536\nv -0.018891 0.028563 0.1\nvn -0.8591 -0.509 0.0536\nv -0.01791 0.027674 0.107294\nvn -0.8591 -0.509 0.0536\nv -0.025355 0.032984 0.101164\nvn -0.486 -0.874 0.0057\nv -0.024607 0.032604 0.106519\nvn -0.486 -0.874 0.0057\nv -0.025943 0.033347 0.106525\nvn -0.486 -0.874 0.0057\nv -0.022908 0.031906 0.100523\nvn -0.4051 -0.9142 -0.0084\nv -0.024607 0.032604 0.106519\nvn -0.4051 -0.9142 -0.0084\nv -0.025355 0.032984 0.101164\nvn -0.4051 -0.9142 -0.0084\nv -0.017592 0.02673 0.107145\nvn -0.9393 -0.3303 0.0924\nv -0.01791 0.027674 0.107294\nvn -0.9393 -0.3303 0.0924\nv -0.018385 0.027304 0.101143\nvn -0.9393 -0.3303 0.0924\nv -0.018891 0.028563 0.1\nvn -0.9498 -0.2993 0.0913\nv -0.018385 0.027304 0.101143\nvn -0.9498 -0.2993 0.0913\nv -0.01791 0.027674 0.107294\nvn -0.9498 -0.2993 0.0913\nv -0.022908 0.031906 0.100523\nvn -0.3713 -0.9285 0.0029\nv -0.021549 0.031365 0.10121\nvn -0.3641 -0.9313 0.0076\nv -0.024607 0.032604 0.106519\nvn -0.3693 -0.9293 0.0042\nv -0.02165 0.031458 0.106976\nvn -0.3625 -0.9319 0.0087\nv -0.017592 0.02673 0.107145\nvn -0.9838 -0.1358 0.1169\nv -0.018385 0.027304 0.101143\nvn -0.9838 -0.1358 0.1169\nv -0.018236 0.026297 0.101221\nvn -0.9838 -0.1358 0.1169\nv -0.028578 0.040716 0.10652\nvn -1 -0.0047 0.0084\nv -0.028616 0.039374 0.101169\nvn -1 -0.0047 0.0084\nv -0.028566 0.038695 0.10671\nvn -1 -0.0047 0.0084\nv -0.023344 0.087912 0.081942\nvn -0.9861 0.1464 -0.0784\nv -0.021599 0.093477 0.070381\nvn -0.9861 0.146 -0.0798\nv -0.02211 0.090427 0.071121\nvn -0.9861 0.141 -0.0878\nv -0.021865 0.094935 0.078901\nvn -0.9759 0.2081 -0.0661\nv -0.021599 0.093477 0.070381\nvn -0.9759 0.2081 -0.0661\nv -0.022992 0.092815 0.088854\nvn -0.9759 0.2081 -0.0661\nv -0.023344 0.087912 0.081942\nvn -0.9841 0.1633 -0.0699\nv -0.024037 0.088177 0.092328\nvn -0.9836 0.1671 -0.0683\nv -0.021599 0.093477 0.070381\nvn -0.9835 0.167 -0.069\nv -0.024212 0.085712 0.08953\nvn -0.9873 0.1447 -0.0659\nv -0.024037 0.088177 0.092328\nvn -0.9869 0.1466 -0.0675\nv -0.023344 0.087912 0.081942\nvn -0.9864 0.149 -0.0697\nv -0.022992 0.092815 0.088854\nvn -0.9825 0.1764 -0.0603\nv -0.024504 0.08474 0.091792\nvn -0.9874 0.1441 -0.0653\nv -0.023658 0.091042 0.094685\nvn -0.9823 0.1779 -0.0582\nv -0.024504 0.08474 0.091792\nvn -0.9886 0.1427 -0.0489\nv -0.024328 0.088363 0.098807\nvn -0.9896 0.138 -0.0418\nv -0.024037 0.088177 0.092328\nvn -0.9887 0.1416 -0.0484\nv -0.024901 0.08293 0.094482\nvn -0.9891 0.14 -0.0448\nv -0.025273 0.08088 0.096696\nvn -0.9898 0.1364 -0.0402\nv -0.023658 0.091042 0.094685\nvn -0.9841 0.1705 -0.049\nv -0.024037 0.088177 0.092328\nvn -0.9841 0.1705 -0.049\nv -0.024328 0.088363 0.098807\nvn -0.9841 0.1705 -0.049\nv -0.025642 0.078519 0.098615\nvn -0.9918 0.1264 -0.0202\nv -0.024328 0.088363 0.098807\nvn -0.9908 0.1328 -0.0269\nv -0.025273 0.08088 0.096696\nvn -0.9908 0.1328 -0.0269\nv -0.025118 0.083484 0.104041\nvn -0.9921 0.1244 -0.0179\nv -0.01746 0.085539 0.039299\nvn -0.9684 -0.0024 -0.2494\nv -0.018009 0.089215 0.041395\nvn -0.9684 -0.0024 -0.2494\nv -0.017353 0.088368 0.038858\nvn -0.9684 -0.0024 -0.2494\nv -0.018874 0.089461 0.045458\nvn -0.978 -0.0283 -0.2065\nv -0.018009 0.089215 0.041395\nvn -0.978 -0.0283 -0.2065\nv -0.01746 0.085539 0.039299\nvn -0.978 -0.0283 -0.2065\nv -0.017353 0.088368 0.038858\nvn -0.9433 0.1107 -0.3128\nv -0.017692 0.091606 0.041026\nvn -0.9433 0.1107 -0.3128\nv -0.017086 0.090492 0.038804\nvn -0.9433 0.1107 -0.3128\nv -0.010244 0.094074 0.037186\nvn -0.0136 0.5967 -0.8024\nv 7.86333e-18 0.095347 0.037958\nvn -0.0136 0.5967 -0.8024\nv 8.04005e-18 0.093406 0.036515\nvn -0.0136 0.5967 -0.8024\nv -0.018009 0.089215 0.041395\nvn -0.9589 0.0853 -0.2708\nv -0.017692 0.091606 0.041026\nvn -0.9578 0.0845 -0.2749\nv -0.017353 0.088368 0.038858\nvn -0.9576 0.0843 -0.2755\nv -0.017086 0.090492 0.038804\nvn -0.8618 0.2661 -0.4318\nv -0.017097 0.091874 0.039678\nvn -0.8618 0.2661 -0.4318\nv -0.016401 0.091971 0.038347\nvn -0.8618 0.2661 -0.4318\nv -0.017086 0.090492 0.038804\nvn -0.9081 0.2185 -0.3572\nv -0.017692 0.091606 0.041026\nvn -0.9081 0.2185 -0.3572\nv -0.017097 0.091874 0.039678\nvn -0.9081 0.2185 -0.3572\nv -0.016401 0.091971 0.038347\nvn -0.6842 0.4995 -0.5313\nv -0.016466 0.093679 0.040037\nvn -0.6842 0.4995 -0.5313\nv -0.015417 0.092665 0.037733\nvn -0.6842 0.4995 -0.5313\nv -0.016466 0.093679 0.040037\nvn -0.6617 0.5271 -0.5332\nv -0.015662 0.094352 0.039705\nvn -0.6617 0.5271 -0.5332\nv -0.015417 0.092665 0.037733\nvn -0.6617 0.5271 -0.5332\nv -0.015417 0.092665 0.037733\nvn -0.5445 0.6028 -0.5833\nv -0.015662 0.094352 0.039705\nvn -0.5445 0.6028 -0.5833\nv -0.014653 0.093378 0.037757\nvn -0.5445 0.6028 -0.5833\nv -0.015662 0.094352 0.039705\nvn -0.4864 0.6543 -0.579\nv -0.014493 0.095496 0.040016\nvn -0.4864 0.6543 -0.579\nv -0.014653 0.093378 0.037757\nvn -0.4864 0.6543 -0.579\nv -0.012653 0.093692 0.037208\nvn -0.1188 0.7072 -0.6969\nv -0.011378 0.09566 0.038989\nvn -0.1188 0.7072 -0.6969\nv -0.010244 0.094074 0.037186\nvn -0.1188 0.7072 -0.6969\nv -0.014653 0.093378 0.037757\nvn -0.3626 0.6867 -0.6301\nv -0.013495 0.094779 0.038618\nvn -0.3626 0.6867 -0.6301\nv -0.013696 0.09364 0.037492\nvn -0.3626 0.6867 -0.6301\nv -0.014493 0.095496 0.040016\nvn -0.3735 0.6897 -0.6203\nv -0.013495 0.094779 0.038618\nvn -0.3735 0.6897 -0.6203\nv -0.014653 0.093378 0.037757\nvn -0.3735 0.6897 -0.6203\nv -0.012653 0.093692 0.037208\nvn -0.1838 0.7221 -0.6669\nv -0.013495 0.094779 0.038618\nvn -0.1838 0.7221 -0.6669\nv -0.011378 0.09566 0.038989\nvn -0.1838 0.7221 -0.6669\nv -0.013696 0.09364 0.037492\nvn -0.2182 0.7053 -0.6745\nv -0.013495 0.094779 0.038618\nvn -0.2182 0.7053 -0.6745\nv -0.012653 0.093692 0.037208\nvn -0.2182 0.7053 -0.6745\nv -0.006538 0.097992 0.040932\nvn -0.0459 0.7127 -0.7\nv 7.68552e-18 0.096919 0.03941\nvn -0.0459 0.7127 -0.7\nv -0.010244 0.094074 0.037186\nvn -0.0459 0.7127 -0.7\nv -0.006538 0.097992 0.040932\nvn -0.0744 0.725 -0.6847\nv -0.010244 0.094074 0.037186\nvn -0.0744 0.725 -0.6847\nv -0.011378 0.09566 0.038989\nvn -0.0744 0.725 -0.6847\nv -0.011378 0.09566 0.038989\nvn -0.2009 0.7485 -0.632\nv -0.013495 0.094779 0.038618\nvn -0.2009 0.7485 -0.632\nv -0.012752 0.097296 0.041363\nvn -0.2009 0.7485 -0.632\nv -0.012752 0.097296 0.041363\nvn -0.3045 0.7417 -0.5977\nv -0.013495 0.094779 0.038618\nvn -0.3045 0.7417 -0.5977\nv -0.014493 0.095496 0.040016\nvn -0.3045 0.7417 -0.5977\nv -0.018009 0.089215 0.041395\nvn -0.9772 0.0313 -0.21\nv -0.018874 0.089461 0.045458\nvn -0.9772 0.0313 -0.21\nv -0.018361 0.09154 0.043383\nvn -0.9772 0.0313 -0.21\nv -0.015662 0.094352 0.039705\nvn -0.5131 0.67 -0.5365\nv -0.015411 0.09688 0.042622\nvn -0.5131 0.67 -0.5365\nv -0.014493 0.095496 0.040016\nvn -0.5131 0.67 -0.5365\nv -0.015411 0.09688 0.042622\nvn -0.618 0.6199 -0.4835\nv -0.015662 0.094352 0.039705\nvn -0.618 0.6196 -0.4839\nv -0.016619 0.095944 0.042965\nvn -0.6192 0.6242 -0.4764\nv 7.68552e-18 0.096919 0.03941\nvn -0.0303 0.7507 -0.6599\nv -0.006538 0.097992 0.040932\nvn -0.0303 0.7507 -0.6599\nv 7.42626e-18 0.098779 0.041527\nvn -0.0303 0.7507 -0.6599\nv 7.42626e-18 0.098779 0.041527\nvn -0.0408 0.7955 -0.6045\nv -0.006538 0.097992 0.040932\nvn -0.0408 0.7955 -0.6045\nv -0.006979 0.099901 0.043473\nvn -0.0408 0.7955 -0.6045\nv -0.012752 0.097296 0.041363\nvn -0.1704 0.7826 -0.5988\nv -0.01085 0.099797 0.04409\nvn -0.1704 0.7826 -0.5988\nv -0.009526 0.098138 0.041545\nvn -0.1704 0.7826 -0.5988\nv -0.006538 0.097992 0.040932\nvn -0.0863 0.7894 -0.6078\nv -0.009526 0.098138 0.041545\nvn -0.0863 0.7894 -0.6078\nv -0.006979 0.099901 0.043473\nvn -0.0863 0.7894 -0.6078\nv -0.006979 0.099901 0.043473\nvn -0.1146 0.8039 -0.5837\nv -0.009526 0.098138 0.041545\nvn -0.1146 0.8039 -0.5837\nv -0.01085 0.099797 0.04409\nvn -0.1146 0.8039 -0.5837\nv -0.014493 0.095496 0.040016\nvn -0.3486 0.7538 -0.557\nv -0.014357 0.099647 0.045549\nvn -0.3486 0.7538 -0.557\nv -0.012752 0.097296 0.041363\nvn -0.3486 0.7538 -0.557\nv -0.026425 0.0715 0.101152\nvn -0.9958 0.0913 0.0012\nv -0.026355 0.072186 0.106887\nvn -0.9959 0.0909 0.0011\nv -0.026199 0.073974 0.100801\nvn -0.996 0.0889 0.0005\nv -0.015411 0.09688 0.042622\nvn -0.4241 0.7294 -0.5368\nv -0.014357 0.099647 0.045549\nvn -0.4241 0.7294 -0.5368\nv -0.014493 0.095496 0.040016\nvn -0.4241 0.7294 -0.5368\nv -0.026006 0.076112 0.106395\nvn -0.9961 0.0885 0.0004\nv -0.026199 0.073974 0.100801\nvn -0.994 0.1088 -0.0074\nv -0.026006 0.076112 0.106395\nvn -0.994 0.1092 -0.0074\nv -0.025962 0.076079 0.100008\nvn -0.9939 0.1097 -0.0074\nv -0.025505 0.080577 0.105361\nvn -0.9939 0.11 -0.0074\nv -0.01085 0.099797 0.04409\nvn -0.2277 0.7916 -0.567\nv -0.012752 0.097296 0.041363\nvn -0.2277 0.7916 -0.567\nv -0.012959 0.099759 0.044884\nvn -0.2277 0.7916 -0.567\nv -0.025962 0.076079 0.100008\nvn -0.9925 0.1208 -0.0167\nv -0.025505 0.080577 0.105361\nvn -0.9925 0.1208 -0.0167\nv -0.025642 0.078519 0.098615\nvn -0.9925 0.1208 -0.0167\nv -0.012752 0.097296 0.041363\nvn -0.3252 0.7658 -0.5547\nv -0.014357 0.099647 0.045549\nvn -0.3252 0.7658 -0.5547\nv -0.012959 0.099759 0.044884\nvn -0.3252 0.7658 -0.5547\nv -0.025505 0.080577 0.105361\nvn -0.9921 0.1239 -0.0176\nv -0.014357 0.099647 0.045549\nvn -0.4601 0.722 -0.5168\nv -0.015411 0.09688 0.042622\nvn -0.4601 0.722 -0.5168\nv -0.0159 0.099232 0.046343\nvn -0.4601 0.722 -0.5168\nv -0.010244 0.094074 0.037186\nvn -0.0288 0.6781 -0.7344\nv 7.68552e-18 0.096919 0.03941\nvn -0.0288 0.6781 -0.7344\nv 7.86333e-18 0.095347 0.037958\nvn -0.0288 0.6781 -0.7344\nv -0.018653 0.097527 0.050128\nvn -0.9224 0.2935 -0.2511\nv -0.018158 0.096483 0.04709\nvn -0.9224 0.2935 -0.2511\nv -0.018692 0.094976 0.047292\nvn -0.9224 0.2935 -0.2511\nv -0.019912 0.092878 0.05297\nvn -0.981 0.1147 -0.1564\nv -0.018945 0.092938 0.046946\nvn -0.9813 0.1126 -0.1561\nv -0.019328 0.09227 0.04886\nvn -0.981 0.1152 -0.1564\nv -0.019437 0.096016 0.052215\nvn -0.9818 0.1091 -0.1554\nv -0.020043 0.094888 0.055252\nvn -0.9812 0.1133 -0.1563\nv -0.017619 0.098187 0.047772\nvn -0.8709 0.3934 -0.2947\nv -0.018158 0.096483 0.04709\nvn -0.8709 0.3934 -0.2947\nv -0.018069 0.098343 0.049311\nvn -0.8709 0.3934 -0.2947\nv -0.018158 0.096483 0.04709\nvn -0.8905 0.3657 -0.2707\nv -0.018653 0.097527 0.050128\nvn -0.8905 0.3657 -0.2707\nv -0.018069 0.098343 0.049311\nvn -0.8905 0.3657 -0.2707\nv -0.018692 0.094976 0.047292\nvn -0.9542 0.229 -0.1927\nv -0.019437 0.096016 0.052215\nvn -0.9542 0.229 -0.1927\nv -0.018653 0.097527 0.050128\nvn -0.9542 0.229 -0.1927\nv -0.018653 0.097527 0.050128\nvn -0.9504 0.2622 -0.1673\nv -0.019437 0.096016 0.052215\nvn -0.9504 0.2622 -0.1673\nv -0.01919 0.097518 0.053169\nvn -0.9504 0.2622 -0.1673\nv -0.020721 0.092402 0.058877\nvn -0.9883 0.0817 -0.1287\nv -0.020043 0.094888 0.055252\nvn -0.9883 0.0817 -0.1287\nv -0.019912 0.092878 0.05297\nvn -0.9883 0.0817 -0.1287\nv -0.01919 0.097518 0.053169\nvn -0.9643 0.2353 -0.1213\nv -0.019437 0.096016 0.052215\nvn -0.9643 0.2353 -0.1213\nv -0.019661 0.09719 0.056272\nvn -0.9643 0.2353 -0.1213\nv -0.020043 0.094888 0.055252\nvn -0.9705 0.212 -0.1149\nv -0.019661 0.09719 0.056272\nvn -0.9705 0.212 -0.1149\nv -0.019437 0.096016 0.052215\nvn -0.9705 0.212 -0.1149\nv -0.021073 0.09606 0.071115\nvn -0.9727 0.2197 -0.0753\nv -0.021599 0.093477 0.070381\nvn -0.9736 0.2177 -0.0682\nv -0.021865 0.094935 0.078901\nvn -0.9737 0.2174 -0.0677\nv -0.011378 0.09566 0.038989\nvn -0.098 0.7492 -0.6551\nv -0.009526 0.098138 0.041545\nvn -0.098 0.7492 -0.6551\nv -0.006538 0.097992 0.040932\nvn -0.098 0.7492 -0.6551\nv -0.011378 0.09566 0.038989\nvn -0.1645 0.7652 -0.6224\nv -0.012752 0.097296 0.041363\nvn -0.1645 0.7652 -0.6224\nv -0.009526 0.098138 0.041545\nvn -0.1645 0.7652 -0.6224\nv -0.018361 0.09154 0.043383\nvn -0.9591 0.0854 -0.27\nv -0.017692 0.091606 0.041026\nvn -0.9448 0.1954 -0.2629\nv -0.018361 0.09154 0.043383\nvn -0.9476 0.1951 -0.2532\nv -0.017938 0.093876 0.043599\nvn -0.9454 0.1954 -0.261\nv -0.016466 0.093679 0.040037\nvn -0.6721 0.5683 -0.4747\nv -0.016619 0.095944 0.042965\nvn -0.6721 0.5683 -0.4747\nv -0.015662 0.094352 0.039705\nvn -0.6721 0.5683 -0.4747\nv -0.016619 0.095944 0.042965\nvn -0.7707 0.4839 -0.4145\nv -0.016466 0.093679 0.040037\nvn -0.7707 0.4839 -0.4145\nv -0.017271 0.094059 0.041979\nvn -0.7707 0.4839 -0.4145\nv -0.017692 0.091606 0.041026\nvn -0.8971 0.2849 -0.3376\nv -0.017938 0.093876 0.043599\nvn -0.8973 0.2848 -0.3373\nv -0.017271 0.094059 0.041979\nvn -0.8967 0.2852 -0.3385\nv -0.018692 0.094976 0.047292\nvn -0.9631 0.1564 -0.2191\nv -0.018361 0.09154 0.043383\nvn -0.9631 0.1564 -0.2191\nv -0.018945 0.092938 0.046946\nvn -0.9631 0.1564 -0.2191\nv -0.018692 0.094976 0.047292\nvn -0.948 0.1949 -0.2516\nv 7.1899e-18 0.100148 0.043457\nvn -0.0301 0.8155 -0.578\nv 7.42626e-18 0.098779 0.041527\nvn -0.0301 0.8155 -0.578\nv -0.006979 0.099901 0.043473\nvn -0.0301 0.8155 -0.578\nv -0.018874 0.089461 0.045458\nvn -0.9815 0.0609 -0.1814\nv -0.019328 0.09227 0.04886\nvn -0.9825 0.0491 -0.1799\nv -0.018361 0.09154 0.043383\nvn -0.9823 0.0512 -0.1802\nv -0.018945 0.092938 0.046946\nvn -0.9825 0.0486 -0.1799\nv -0.018158 0.096483 0.04709\nvn -0.8494 0.4044 -0.3391\nv -0.017619 0.098187 0.047772\nvn -0.8494 0.4044 -0.3391\nv -0.017271 0.094059 0.041979\nvn -0.8494 0.4044 -0.3391\nv -0.017271 0.094059 0.041979\nvn -0.779 0.4876 -0.3942\nv -0.017619 0.098187 0.047772\nvn -0.779 0.4876 -0.3942\nv -0.016963 0.098517 0.046884\nvn -0.779 0.4876 -0.3942\nv -0.018945 0.092938 0.046946\nvn -0.9723 0.1507 -0.1789\nv -0.019437 0.096016 0.052215\nvn -0.9723 0.1507 -0.1789\nv -0.018692 0.094976 0.047292\nvn -0.9723 0.1507 -0.1789\nv -0.016619 0.095944 0.042965\nvn -0.6446 0.6118 -0.4584\nv -0.016963 0.098517 0.046884\nvn -0.6446 0.6118 -0.4584\nv -0.0159 0.099232 0.046343\nvn -0.6446 0.6118 -0.4584\nv -0.017357 0.08129 0.039426\nvn -0.9829 -0.0292 -0.1818\nv -0.018272 0.082282 0.044217\nvn -0.9829 -0.0292 -0.1818\nv -0.01746 0.085539 0.039299\nvn -0.9829 -0.0292 -0.1818\nv -0.01746 0.085539 0.039299\nvn -0.9798 -0.0485 -0.1941\nv -0.018272 0.082282 0.044217\nvn -0.9798 -0.0485 -0.1941\nv -0.018874 0.089461 0.045458\nvn -0.9798 -0.0485 -0.1941\nv -0.017097 0.091874 0.039678\nvn -0.8965 0.2853 -0.3388\nv -0.016401 0.091971 0.038347\nvn -0.8352 0.3658 -0.4106\nv -0.017097 0.091874 0.039678\nvn -0.8352 0.3658 -0.4106\nv -0.017271 0.094059 0.041979\nvn -0.8352 0.3658 -0.4106\nv -0.017271 0.094059 0.041979\nvn -0.8252 0.381 -0.4169\nv -0.016466 0.093679 0.040037\nvn -0.8252 0.381 -0.4169\nv -0.016401 0.091971 0.038347\nvn -0.8252 0.381 -0.4169\nv -0.016619 0.095944 0.042965\nvn -0.7935 0.4744 -0.3813\nv -0.017271 0.094059 0.041979\nvn -0.7935 0.4744 -0.3813\nv -0.016963 0.098517 0.046884\nvn -0.7935 0.4744 -0.3813\nv -0.017271 0.094059 0.041979\nvn -0.8776 0.3561 -0.3211\nv -0.017938 0.093876 0.043599\nvn -0.8776 0.3561 -0.3211\nv -0.018158 0.096483 0.04709\nvn -0.8776 0.3561 -0.3211\nv -0.018158 0.096483 0.04709\nvn -0.9175 0.2888 -0.2734\nv -0.017938 0.093876 0.043599\nvn -0.9175 0.2888 -0.2734\nv -0.018692 0.094976 0.047292\nvn -0.9175 0.2888 -0.2734\nv -0.0159 0.099232 0.046343\nvn -0.6194 0.6243 -0.4759\nv -0.020043 0.094888 0.055252\nvn -0.9858 0.1432 -0.0881\nv -0.020721 0.092402 0.058877\nvn -0.9863 0.1382 -0.0896\nv -0.020043 0.094888 0.055252\nvn -0.9767 0.1984 -0.0819\nv -0.021599 0.093477 0.070381\nvn -0.9767 0.1984 -0.0819\nv -0.019661 0.09719 0.056272\nvn -0.9767 0.1984 -0.0819\nv -0.019661 0.09719 0.056272\nvn -0.9727 0.2195 -0.0758\nv -0.0226 0.07531 0.110022\nvn -0.0164 0.0961 0.9952\nv -1.03813e-18 0.072733 0.110644\nvn -0.0164 0.0961 0.9952\nv -9.95515e-19 0.076337 0.110296\nvn -0.0164 0.0961 0.9952\nv -3.27226e-19 0.088146 0.104839\nvn -0.017 0.7351 0.6777\nv -7.67854e-20 0.090032 0.102794\nvn -0.0165 0.7321 0.681\nv -0.020947 0.088134 0.104326\nvn -0.0168 0.734 0.6789\nv -1.03813e-18 0.072733 0.110644\nvn -0.0188 0.0754 0.997\nv -0.0226 0.07531 0.110022\nvn -0.0188 0.0754 0.997\nv -0.022654 0.072295 0.110249\nvn -0.0188 0.0754 0.997\nv -6.72821e-19 0.084253 0.107661\nvn -0.0181 0.4427 0.8965\nv -0.021442 0.084419 0.107139\nvn -0.0183 0.4448 0.8955\nv -0.021881 0.081979 0.108341\nvn -0.0177 0.4391 0.8983\nv 5.32232e-19 0.093135 0.097821\nvn -0.0169 0.8828 0.4695\nv -0.020636 0.091851 0.099492\nvn -0.0169 0.8828 0.4695\nv 2.65381e-19 0.091976 0.1\nvn -0.0169 0.8828 0.4695\nv -0.021094 0.08937 0.102998\nvn -0.0163 0.731 0.6822\nv 5.32232e-19 0.093135 0.097821\nvn -0.0186 0.8908 0.4539\nv -0.020359 0.093123 0.097008\nvn -0.0186 0.8908 0.4539\nv -0.020636 0.091851 0.099492\nvn -0.0186 0.8908 0.4539\nv -0.020923 0.090645 0.10136\nvn -0.0184 0.8412 0.5405\nv 2.65381e-19 0.091976 0.1\nvn -0.0184 0.8412 0.5405\nv -0.020636 0.091851 0.099492\nvn -0.0184 0.8412 0.5405\nv -7.67854e-20 0.090032 0.102794\nvn -0.0188 0.7901 0.6127\nv -0.020923 0.090645 0.10136\nvn -0.0188 0.7901 0.6127\nv -0.021094 0.08937 0.102998\nvn -0.0188 0.7901 0.6127\nv -0.021631 0.086561 0.105653\nvn -0.017 0.6304 0.7761\nv -5.21822e-19 0.086191 0.106428\nvn -0.017 0.6304 0.7761\nv -3.27226e-19 0.088146 0.104839\nvn -0.017 0.6304 0.7761\nv -8.12308e-19 0.081907 0.1088\nvn -0.0185 0.3167 0.9483\nv -0.021881 0.081979 0.108341\nvn -0.0188 0.3189 0.9476\nv -0.022227 0.078862 0.109384\nvn -0.0179 0.3128 0.9497\nv -3.27226e-19 0.088146 0.104839\nvn -0.019 0.6495 0.7601\nv -0.020947 0.088134 0.104326\nvn -0.019 0.6495 0.7601\nv -0.021631 0.086561 0.105653\nvn -0.019 0.6495 0.7601\nv 8.46476e-19 0.09422 0.095255\nvn -0.0161 0.9209 0.3895\nv -0.020359 0.093123 0.097008\nvn -0.0161 0.9209 0.3895\nv 5.32232e-19 0.093135 0.097821\nvn -0.0161 0.9209 0.3895\nv -0.020923 0.090645 0.10136\nvn -0.0151 0.8208 0.571\nv -7.67854e-20 0.090032 0.102794\nvn -0.0151 0.8208 0.571\nv 2.65381e-19 0.091976 0.1\nvn -0.0151 0.8208 0.571\nv -5.21822e-19 0.086191 0.106428\nvn -0.0197 0.5685 0.8224\nv -0.021631 0.086561 0.105653\nvn -0.0197 0.5685 0.8224\nv -0.021442 0.084419 0.107139\nvn -0.0197 0.5685 0.8224\nv -9.18853e-19 0.079245 0.10967\nvn -0.0176 0.3105 0.9504\nv -8.12308e-19 0.081907 0.1088\nvn -0.0174 0.4371 0.8993\nv -0.021442 0.084419 0.107139\nvn -0.0164 0.5367 0.8436\nv -6.72821e-19 0.084253 0.107661\nvn -0.0164 0.5367 0.8436\nv -5.21822e-19 0.086191 0.106428\nvn -0.0164 0.5367 0.8436\nv 1.15435e-18 0.095057 0.092741\nvn -0.0154 0.9696 0.2444\nv 1.57881e-18 0.095931 0.089275\nvn -0.0154 0.9696 0.2444\nv -0.019721 0.09507 0.09145\nvn -0.0154 0.9696 0.2444\nv -0.020359 0.093123 0.097008\nvn -0.0189 0.9314 0.3636\nv 8.46476e-19 0.09422 0.095255\nvn -0.0189 0.9314 0.3636\nv -0.020193 0.094068 0.094594\nvn -0.0189 0.9314 0.3636\nv 8.46476e-19 0.09422 0.095255\nvn -0.0175 0.9486 0.3159\nv 1.15435e-18 0.095057 0.092741\nvn -0.0175 0.9486 0.3159\nv -0.020193 0.094068 0.094594\nvn -0.0175 0.9486 0.3159\nv -0.020193 0.094068 0.094594\nvn -0.0191 0.9535 0.3007\nv 1.15435e-18 0.095057 0.092741\nvn -0.0191 0.9535 0.3007\nv -0.019721 0.09507 0.09145\nvn -0.0191 0.9535 0.3007\nv -0.022227 0.078862 0.109384\nvn -0.0162 0.2103 0.9775\nv -9.95515e-19 0.076337 0.110296\nvn -0.0162 0.2103 0.9775\nv -9.18853e-19 0.079245 0.10967\nvn -0.0162 0.2103 0.9775\nv -0.0226 0.07531 0.110022\nvn -0.02 0.179 0.9837\nv -9.95515e-19 0.076337 0.110296\nvn -0.02 0.179 0.9837\nv -0.022227 0.078862 0.109384\nvn -0.02 0.179 0.9837\nv -0.013379 0.100325 0.046924\nvn -0.014 0.9996 0.026\nv 7.03719e-18 0.10057 0.044704\nvn -0.014 0.9996 0.026\nv -0.008263 0.100437 0.045369\nvn -0.014 0.9996 0.026\nv -0.01772 0.098802 0.069492\nvn -0.0201 0.9947 0.1011\nv 3.9583e-18 0.099124 0.069845\nvn -0.019 0.9949 0.0987\nv -0.016884 0.099535 0.062447\nvn -0.0153 0.9958 0.0901\nv 2.62344e-18 0.097538 0.080745\nvn -0.0156 0.9895 0.144\nv 3.9583e-18 0.099124 0.069845\nvn -0.0197 0.9908 0.1336\nv -0.018486 0.097798 0.076956\nvn -0.0162 0.9897 0.1423\nv -0.01772 0.098802 0.069492\nvn -0.0206 0.9912 0.1311\nv -0.016884 0.099535 0.062447\nvn -0.0205 0.9977 0.0653\nv 5.39543e-18 0.100166 0.05811\nvn -0.0205 0.9977 0.0653\nv -0.016125 0.100076 0.054415\nvn -0.0205 0.9977 0.0653\nv -0.01918 0.096576 0.084147\nvn -0.0164 0.9826 0.1851\nv 1.57881e-18 0.095931 0.089275\nvn -0.0164 0.9826 0.1851\nv 2.62344e-18 0.097538 0.080745\nvn -0.0164 0.9826 0.1851\nv 5.39543e-18 0.100166 0.05811\nvn -0.0145 0.996 0.0884\nv -0.01918 0.096576 0.084147\nvn -0.0207 0.9795 0.2005\nv -0.019721 0.09507 0.09145\nvn -0.0207 0.9795 0.2005\nv 1.57881e-18 0.095931 0.089275\nvn -0.0207 0.9795 0.2005\nv -0.016125 0.100076 0.054415\nvn -0.0206 0.9995 0.0257\nv 6.39155e-18 0.100521 0.049976\nvn -0.0206 0.9995 0.0257\nv -0.013379 0.100325 0.046924\nvn -0.0206 0.9995 0.0257\nv -0.013379 0.100325 0.046924\nvn -0.0168 0.9998 0.0092\nv 6.39155e-18 0.100521 0.049976\nvn -0.0168 0.9998 0.0092\nv 7.03719e-18 0.10057 0.044704\nvn -0.0168 0.9998 0.0092\nv -0.016125 0.100076 0.054415\nvn -0.0156 0.9989 0.0437\nv 5.39543e-18 0.100166 0.05811\nvn -0.0156 0.9989 0.0437\nv 6.39155e-18 0.100521 0.049976\nvn -0.0156 0.9989 0.0437\nv -0.01918 0.096576 0.084147\nvn -0.0201 0.986 0.1657\nv 2.62344e-18 0.097538 0.080745\nvn -0.0201 0.986 0.1657\nv -0.018486 0.097798 0.076956\nvn -0.0201 0.986 0.1657\nv -0.017304 0.043313 0.039224\nvn -0.9823 -0.0001 -0.1875\nv -0.018272 0.082282 0.044217\nvn -0.9819 -0.0002 -0.1893\nv -0.017357 0.08129 0.039426\nvn -0.9822 -0.0004 -0.1876\nv -0.026425 0.0715 0.101152\nvn -0.9975 0.0703 0.0038\nv -0.027987 0.049338 0.101167\nvn -0.9975 0.0704 0.0034\nv -0.026355 0.072186 0.106887\nvn -0.9975 0.0703 0.0037\nv -0.028578 0.040716 0.10652\nvn -0.9975 0.0704 0.0034\nv -0.027987 0.049338 0.101167\nvn -0.998 0.063 -0.0086\nv -0.028616 0.039374 0.101169\nvn -0.998 0.063 -0.0086\nv -0.028578 0.040716 0.10652\nvn -0.998 0.063 -0.0086\nv -0.013838 -0.087584 0.106334\nvn -0.0192 -0.6007 0.7992\nv -0.004 -0.087946 0.106298\nvn -0.0192 -0.6007 0.7992\nv -0.004 -0.086449 0.107423\nvn -0.0192 -0.6007 0.7992\nv -0.013838 -0.087584 0.106334\nvn -0.0233 -0.5795 0.8147\nv -0.004 -0.086449 0.107423\nvn -0.0233 -0.5795 0.8147\nv -0.013606 -0.085754 0.107643\nvn -0.0233 -0.5795 0.8147\nv -0.014029 -0.094421 0.094401\nvn -0.0254 -0.9509 0.3085\nv -0.004 -0.094079 0.09628\nvn -0.0254 -0.9509 0.3085\nv -0.01392 -0.093389 0.09759\nvn -0.0254 -0.9509 0.3085\nv -0.014029 -0.094421 0.094401\nvn -0.0152 -0.9663 0.2568\nv -0.004 -0.095538 0.09079\nvn -0.0152 -0.9663 0.2568\nv -0.004 -0.094079 0.09628\nvn -0.0152 -0.9663 0.2568\nv -0.013524 -0.088858 0.105214\nvn -0.0164 -0.6895 0.7241\nv -0.004 -0.089372 0.10494\nvn -0.0164 -0.6895 0.7241\nv -0.004 -0.087946 0.106298\nvn -0.0164 -0.6895 0.7241\nv -0.013915 -0.082476 0.109071\nvn -0.0256 -0.2614 0.9649\nv -0.004 -0.081137 0.109697\nvn -0.0256 -0.2614 0.9649\nv -0.013628 -0.079769 0.109812\nvn -0.0256 -0.2614 0.9649\nv -0.013524 -0.088858 0.105214\nvn -0.0217 -0.6629 0.7484\nv -0.004 -0.087946 0.106298\nvn -0.0217 -0.6629 0.7484\nv -0.013838 -0.087584 0.106334\nvn -0.0217 -0.6629 0.7484\nv -0.014059 -0.095974 0.087768\nvn -0.0263 -0.9733 0.2281\nv -0.004 -0.095538 0.09079\nvn -0.0263 -0.9733 0.2281\nv -0.014029 -0.094421 0.094401\nvn -0.0263 -0.9733 0.2281\nv -0.013915 -0.082476 0.109071\nvn -0.0162 -0.3221 0.9466\nv -0.004 -0.084146 0.108673\nvn -0.0162 -0.3221 0.9466\nv -0.004 -0.081137 0.109697\nvn -0.0162 -0.3221 0.9466\nv -0.013828 -0.089984 0.103895\nvn -0.0221 -0.7579 0.652\nv -0.004 -0.089372 0.10494\nvn -0.0221 -0.7579 0.652\nv -0.013524 -0.088858 0.105214\nvn -0.0221 -0.7579 0.652\nv -0.01375 -0.083958 0.108522\nvn -0.0213 -0.3497 0.9366\nv -0.004 -0.084146 0.108673\nvn -0.0213 -0.3497 0.9366\nv -0.013915 -0.082476 0.109071\nvn -0.0213 -0.3497 0.9366\nv -0.013828 -0.089984 0.103895\nvn -0.0172 -0.7836 0.621\nv -0.004 -0.090898 0.103015\nvn -0.0172 -0.7836 0.621\nv -0.004 -0.089372 0.10494\nvn -0.0172 -0.7836 0.621\nv -0.01397 -0.076459 0.110223\nvn -0.018 -0.0529 0.9984\nv -0.004 -0.077347 0.110355\nvn -0.0179 -0.0531 0.9984\nv -0.004 -0.072999 0.110586\nvn -0.0183 -0.052 0.9985\nv -0.014007 -0.073637 0.110369\nvn -0.0183 -0.0518 0.9985\nv -0.013747 -0.091297 0.10205\nvn -0.0239 -0.815 0.5789\nv -0.004 -0.090898 0.103015\nvn -0.0239 -0.815 0.5789\nv -0.013828 -0.089984 0.103895\nvn -0.0239 -0.815 0.5789\nv -0.013606 -0.085754 0.107643\nvn -0.0224 -0.441 0.8972\nv -0.004 -0.084146 0.108673\nvn -0.0224 -0.441 0.8972\nv -0.01375 -0.083958 0.108522\nvn -0.0224 -0.441 0.8972\nv -0.013747 -0.091297 0.10205\nvn -0.0143 -0.8646 0.5023\nv -0.004 -0.092544 0.100181\nvn -0.0143 -0.8646 0.5023\nv -0.004 -0.090898 0.103015\nvn -0.0143 -0.8646 0.5023\nv -0.013606 -0.085754 0.107643\nvn -0.0144 -0.477 0.8788\nv -0.004 -0.086449 0.107423\nvn -0.0144 -0.477 0.8788\nv -0.004 -0.084146 0.108673\nvn -0.0144 -0.477 0.8788\nv -0.013591 -0.092562 0.099669\nvn -0.0233 -0.8835 0.4678\nv -0.004 -0.092544 0.100181\nvn -0.0233 -0.8835 0.4678\nv -0.013747 -0.091297 0.10205\nvn -0.0233 -0.8835 0.4678\nv -0.013628 -0.079769 0.109812\nvn -0.0243 -0.1256 0.9918\nv -0.004 -0.077347 0.110355\nvn -0.0243 -0.1256 0.9918\nv -0.01397 -0.076459 0.110223\nvn -0.0243 -0.1256 0.9918\nv -0.013628 -0.079769 0.109812\nvn -0.0125 -0.171 0.9852\nv -0.004 -0.081137 0.109697\nvn -0.0125 -0.171 0.9852\nv -0.004 -0.077347 0.110355\nvn -0.0125 -0.171 0.9852\nv -0.01392 -0.093389 0.09759\nvn -0.0167 -0.9299 0.3673\nv -0.004 -0.092544 0.100181\nvn -0.0177 -0.9286 0.3706\nv -0.013591 -0.092562 0.099669\nvn -0.0181 -0.928 0.3721\nv -0.004 -0.094079 0.09628\nvn -0.0164 -0.9304 0.3662\nv -0.004 -0.072999 0.110586\nvn -1 -0.0026 0.005\nv -0.003953 -0.045069 0.116064\nvn -1 0.0006 0.0057\nv -0.004 -0.04507 0.110597\nvn -1 0 0.0086\nv -0.003996 -0.101836 0.094545\nvn -1 -0.0021 -0.0022\nv -0.004 -0.092544 0.100181\nvn -1 -0.0007 0.0004\nv -0.004 -0.094079 0.09628\nvn -1 -0.0006 0.0002\nv -0.003989 -0.101938 0.110778\nvn -1 -0.0008 0.0003\nv -0.003997 -0.098624 0.115724\nvn -1 0.0005 0.0014\nv -0.004 -0.077347 0.110355\nvn -1 0 0.0006\nv -0.004 -0.090898 0.103015\nvn -1 -0.0007 0.0005\nv -0.004 -0.095538 0.09079\nvn -1 -0.0056 -0.007\nv -0.003966 -0.100627 0.090568\nvn -1 -0.0067 -0.0017\nv -0.004 -0.089372 0.10494\nvn -1 -0.0009 -0.0003\nv -0.003992 -0.096543 0.085821\nvn -1 -0.0067 -0.0004\nv -0.004 -0.081137 0.109697\nvn -1 -0.0001 0.0004\nv -0.004 -0.084146 0.108673\nvn -1 -0.0001 0.0003\nv -0.004 -0.086449 0.107423\nvn -1 -0.0001 0.0002\nv -0.004 -0.087946 0.106298\nvn -1 -0.0002 0.0002\nv -0.00396 -0.100551 0.114762\nvn -0.9995 -0.027 0.0166\nv -0.003997 -0.098624 0.115724\nvn -0.9995 -0.027 0.0166\nv -0.003989 -0.101938 0.110778\nvn -0.9995 -0.027 0.0166\nv -0.018195 0.026323 0.096409\nvn 0.5701 -0.8216 0.0003\nv -0.018067 0.026412 0.094368\nvn 0.5691 -0.8222 0.0003\nv -0.018236 0.026297 0.101221\nvn 0.5668 -0.8239 0.0002\nv -0.017592 0.02673 0.107145\nvn 0.5587 -0.8294 -0.0001\nv -0.018067 0.026412 0.094368\nvn 0.5539 -0.8326 0.0002\nv -0.017305 0.026919 0.094332\nvn 0.5493 -0.8356 6.72699e-17\nv -0.017592 0.02673 0.107145\nvn 0.5521 -0.8338 0.0001\nv -0.017304 0.026918 0.1082\nvn 0.5474 -0.8369 6.70372e-17\nv -0.017304 0.026918 0.1082\nvn 0.5712 -0.8208 -0.0001\nv -0.017305 0.026919 0.094332\nvn 0.5712 -0.8208 -0.0001\nv -0.016932 0.027177 0.108861\nvn 0.5712 -0.8208 -0.0001\nv -0.017305 0.026919 0.094332\nvn 0.5284 -0.849 0.0016\nv -0.016582 0.027368 0.09407\nvn 0.5284 -0.849 0.0016\nv -0.016932 0.027177 0.108861\nvn 0.5284 -0.849 0.0016\nv -0.015986 0.02772 0.092847\nvn 0.4948 -0.869 -0.0002\nv -0.015407 0.028048 0.099799\nvn 0.4948 -0.869 -0.0002\nv -0.016932 0.027177 0.108861\nvn 0.4948 -0.869 -0.0002\nv -0.016582 0.027368 0.09407\nvn 0.51 -0.8602 0.001\nv -0.015986 0.02772 0.092847\nvn 0.51 -0.8602 0.001\nv -0.016932 0.027177 0.108861\nvn 0.51 -0.8602 0.001\nv -0.016582 0.027368 0.09407\nvn -0.5134 0.8582 -0.0032\nv -0.016133 0.027636 0.093724\nvn -0.5134 0.8582 -0.0032\nv -0.015986 0.02772 0.092847\nvn -0.5134 0.8582 -0.0032\nv -0.015407 0.028048 0.099799\nvn 0.475 -0.88 -0.0046\nv -0.015187 0.02816 0.101165\nvn 0.4791 -0.8778 -0.0034\nv -0.016932 0.027177 0.108861\nvn 0.4766 -0.8791 -0.0042\nv -0.017865 0.023805 0.094367\nvn 0.0442 0.0032 0.999\nv -0.017305 0.026919 0.094332\nvn 0.0442 0.0032 0.999\nv -0.018067 0.026412 0.094368\nvn 0.0442 0.0032 0.999\nv -0.017856 -0.026555 0.09437\nvn 0.0568 0.0001 0.9984\nv -0.017375 0.01386 0.09434\nvn 0.0596 0.0002 0.9982\nv -0.017865 0.023805 0.094367\nvn 0.058 0.0001 0.9983\nv -0.001992 -0.031956 0.108137\nvn 0.0195 0.9998 0.0044\nv -0.001919 -0.031955 0.109147\nvn 0.0229 0.9997 -0.0022\nv -8.58232e-19 -0.031999 0.109175\nvn 0.0218 0.9998 -0.0001\nv -0.014781 -0.028382 0.107001\nvn 0.4582 0.8889 0.0001\nv -0.015744 -0.027859 0.101046\nvn 0.4677 0.8839 0.002\nv -0.015093 -0.028221 0.1089\nvn 0.4637 0.886 0.0014\nv -0.015744 -0.027859 0.101046\nvn 0.4957 0.8685 -0.0003\nv -0.016205 -0.027594 0.093851\nvn 0.4984 0.867 -0.0014\nv -0.016537 -0.027396 0.108876\nvn 0.5004 0.8658 -0.0005\nv -0.016537 -0.027396 0.108876\nvn 0.5216 0.8532 0.0003\nv -0.016205 -0.027594 0.093851\nvn 0.5215 0.8533 0.0003\nv -0.016896 -0.027176 0.108339\nvn 0.526 0.8505 0.0001\nv -0.017207 -0.026982 0.094308\nvn 0.5264 0.8503 0.0001\nv -0.017253 -0.026954 0.107432\nvn 0.5283 0.849 0.0001\nv -0.001992 -0.031956 0.108137\nvn 0.1081 0.9941 -0.0083\nv -0.004953 -0.031626 0.109088\nvn 0.1081 0.9941 -0.0083\nv -0.001919 -0.031955 0.109147\nvn 0.1081 0.9941 -0.0083\nv -0.001992 -0.031956 0.108137\nvn 0.1131 0.9936 0.0074\nv -0.004966 -0.031617 0.108085\nvn 0.1131 0.9936 0.0074\nv -0.004953 -0.031626 0.109088\nvn 0.1131 0.9936 0.0074\nv -0.004966 -0.031617 0.108085\nvn 0.1988 0.98 0.0062\nv -0.008072 -0.030986 0.108031\nvn 0.1988 0.98 0.0062\nv -0.004953 -0.031626 0.109088\nvn 0.1988 0.98 0.0062\nv -0.017207 -0.026982 0.094308\nvn 0.5493 0.8356 0.0002\nv -0.017856 -0.026555 0.09437\nvn 0.5562 0.831 -0.0003\nv -0.017253 -0.026954 0.107432\nvn 0.5507 0.8347 0.0001\nv -0.008072 -0.030986 0.108031\nvn 0.2034 0.9791 -0.008\nv -0.00811 -0.03097 0.109029\nvn 0.2034 0.9791 -0.008\nv -0.004953 -0.031626 0.109088\nvn 0.2034 0.9791 -0.008\nv -0.018249 -0.026286 0.101172\nvn 0.5587 0.8293 -0.0005\nv -0.015093 -0.028221 0.1089\nvn 0.4963 0.8681 -0.0011\nv -0.008072 -0.030986 0.108031\nvn 0.2974 0.9547 -0.0039\nv -0.010683 -0.030169 0.108983\nvn 0.2974 0.9547 -0.0039\nv -0.00811 -0.03097 0.109029\nvn 0.2974 0.9547 -0.0039\nv -0.008072 -0.030986 0.108031\nvn 0.308 0.951 0.0284\nv -0.011492 -0.029877 0.107971\nvn 0.308 0.951 0.0284\nv -0.010683 -0.030169 0.108983\nvn 0.308 0.951 0.0284\nv -0.011492 -0.029877 0.107971\nvn 0.3654 0.9306 -0.0234\nv -0.012848 -0.02932 0.108946\nvn 0.3654 0.9306 -0.0234\nv -0.010683 -0.030169 0.108983\nvn 0.3654 0.9306 -0.0234\nv -0.011492 -0.029877 0.107971\nvn 0.3977 0.9171 0.0293\nv -0.013811 -0.028869 0.107896\nvn 0.3977 0.9171 0.0293\nv -0.012848 -0.02932 0.108946\nvn 0.3977 0.9171 0.0293\nv -0.01527 -0.028122 0.09208\nvn 0.4867 0.8736 0.001\nv -0.015509 -0.02799 0.092988\nvn 0.4913 0.871 -0.0017\nv -0.015317 -0.028097 0.093425\nvn 0.4886 0.8725 0.0007\nv -0.014408 -0.028573 0.107528\nvn 0.4474 0.8943 -0.0057\nv -0.013811 -0.028869 0.107896\nvn 0.447 0.8945 -0.0059\nv -0.013811 -0.028869 0.107896\nvn 0.4398 0.8979 -0.0174\nv -0.015093 -0.028221 0.1089\nvn 0.4398 0.8979 -0.0174\nv -0.012848 -0.02932 0.108946\nvn 0.4398 0.8979 -0.0174\nv -0.019542 0.031971 0.109506\nvn -0.4488 -0.5017 0.7395\nv -0.019982 0.031574 0.108969\nvn -0.4488 -0.5017 0.7395\nv -0.018863 0.030693 0.109051\nvn -0.4488 -0.5017 0.7395\nv -0.017683 0.031544 0.110076\nvn -0.2372 -0.2491 0.939\nv -0.019526 0.034135 0.110298\nvn -0.2372 -0.2491 0.939\nv -0.019655 0.03298 0.109959\nvn -0.2372 -0.2491 0.939\nv -0.018043 0.030645 0.10956\nvn -0.4754 -0.5083 0.7181\nv -0.019542 0.031971 0.109506\nvn -0.4754 -0.5083 0.7181\nv -0.018863 0.030693 0.109051\nvn -0.4754 -0.5083 0.7181\nv -0.018043 0.030645 0.10956\nvn -0.3944 -0.4125 0.8212\nv -0.019655 0.03298 0.109959\nvn -0.3944 -0.4125 0.8212\nv -0.019542 0.031971 0.109506\nvn -0.3944 -0.4125 0.8212\nv -0.018043 0.030645 0.10956\nvn -0.4964 -0.4193 0.7601\nv -0.018863 0.030693 0.109051\nvn -0.4964 -0.4193 0.7601\nv -0.017909 0.029508 0.10902\nvn -0.4964 -0.4193 0.7601\nv -0.017657 0.028029 0.108272\nvn -0.804 -0.4684 0.3663\nv -0.018412 0.029318 0.108266\nvn -0.8041 -0.4697 0.3644\nv -0.018603 0.029081 0.10754\nvn -0.8037 -0.4627 0.3742\nv -0.017194 0.028402 0.109113\nvn -0.7082 -0.4097 0.575\nv -0.018412 0.029318 0.108266\nvn -0.7086 -0.4125 0.5725\nv -0.017657 0.028029 0.108272\nvn -0.7086 -0.4128 0.5723\nv -0.017909 0.029508 0.10902\nvn -0.7081 -0.4093 0.5754\nv -0.028566 0.038695 0.10671\nvn -0.9851 0.0107 0.1717\nv -0.028399 0.039625 0.107611\nvn -0.9851 0.0107 0.1717\nv -0.028578 0.040716 0.10652\nvn -0.9851 0.0107 0.1717\nv -0.017194 0.028402 0.109113\nvn -0.7826 -0.2821 0.555\nv -0.017657 0.028029 0.108272\nvn -0.7831 -0.2836 0.5536\nv -0.016932 0.027177 0.108861\nvn -0.7826 -0.2823 0.5549\nv -0.017304 0.026918 0.1082\nvn -0.7831 -0.2838 0.5533\nv -0.017194 0.028402 0.109113\nvn -0.6067 -0.2831 0.7428\nv -0.016932 0.027177 0.108861\nvn -0.6067 -0.2831 0.7428\nv -0.01642 0.028543 0.109799\nvn -0.6067 -0.2831 0.7428\nv -0.027657 0.035185 0.106657\nvn -0.7958 -0.5909 0.1325\nv -0.026806 0.034093 0.106899\nvn -0.7958 -0.5909 0.1325\nv -0.027315 0.034865 0.107282\nvn -0.7958 -0.5909 0.1325\nv -0.027657 0.035185 0.106657\nvn -0.7954 -0.5842 0.1612\nv -0.027206 0.03449 0.106361\nvn -0.7954 -0.5842 0.1612\nv -0.026806 0.034093 0.106899\nvn -0.7954 -0.5842 0.1612\nv -0.027598 0.039593 0.108934\nvn -0.8553 -0.0079 0.518\nv -0.027968 0.041088 0.108346\nvn -0.8553 -0.0079 0.518\nv -0.028399 0.039625 0.107611\nvn -0.8553 -0.0079 0.518\nv -0.027624 0.035735 0.10778\nvn -0.8806 -0.4149 0.2291\nv -0.028111 0.036237 0.106818\nvn -0.8806 -0.4149 0.2291\nv -0.027657 0.035185 0.106657\nvn -0.8806 -0.4149 0.2291\nv -0.027624 0.035735 0.10778\nvn -0.8618 -0.445 0.2433\nv -0.027657 0.035185 0.106657\nvn -0.8618 -0.445 0.2433\nv -0.027315 0.034865 0.107282\nvn -0.8618 -0.445 0.2433\nv -0.028153 0.037209 0.107599\nvn -0.966 -0.1377 0.219\nv -0.028566 0.038695 0.10671\nvn -0.966 -0.1377 0.219\nv -0.028351 0.037145 0.106686\nvn -0.966 -0.1377 0.219\nv -0.026806 0.034093 0.106899\nvn -0.7224 -0.6243 0.2974\nv -0.026634 0.034368 0.107894\nvn -0.7224 -0.6243 0.2974\nv -0.027315 0.034865 0.107282\nvn -0.7224 -0.6243 0.2974\nv -0.027624 0.035735 0.10778\nvn -0.7799 -0.4955 0.3823\nv -0.027315 0.034865 0.107282\nvn -0.7799 -0.4955 0.3823\nv -0.026804 0.034843 0.108295\nvn -0.7799 -0.4955 0.3823\nv -0.027315 0.034865 0.107282\nvn -0.7388 -0.5698 0.3599\nv -0.026634 0.034368 0.107894\nvn -0.7388 -0.5698 0.3599\nv -0.026804 0.034843 0.108295\nvn -0.7388 -0.5698 0.3599\nv -0.028111 0.036237 0.106818\nvn -0.9503 -0.219 0.2213\nv -0.028153 0.037209 0.107599\nvn -0.9503 -0.219 0.2213\nv -0.028351 0.037145 0.106686\nvn -0.9503 -0.219 0.2213\nv -0.026318 0.033775 0.107291\nvn -0.6791 -0.6689 0.3023\nv -0.026634 0.034368 0.107894\nvn -0.6791 -0.6689 0.3023\nv -0.026806 0.034093 0.106899\nvn -0.6791 -0.6689 0.3023\nv -0.027624 0.035735 0.10778\nvn -0.7959 -0.3037 0.5238\nv -0.027048 0.03601 0.108815\nvn -0.7959 -0.3037 0.5238\nv -0.027772 0.037166 0.108384\nvn -0.7959 -0.3037 0.5238\nv -0.027772 0.037166 0.108384\nvn -0.8546 -0.0554 0.5164\nv -0.027598 0.039593 0.108934\nvn -0.8546 -0.0554 0.5164\nv -0.028399 0.039625 0.107611\nvn -0.8546 -0.0554 0.5164\nv -0.026804 0.034843 0.108295\nvn -0.756 -0.3913 0.5248\nv -0.027048 0.03601 0.108815\nvn -0.756 -0.3913 0.5248\nv -0.027624 0.035735 0.10778\nvn -0.756 -0.3913 0.5248\nv -0.027467 0.037858 0.108905\nvn -0.8162 -0.0711 0.5734\nv -0.027598 0.039593 0.108934\nvn -0.8162 -0.0711 0.5734\nv -0.027772 0.037166 0.108384\nvn -0.8162 -0.0711 0.5734\nv -0.025803 0.033773 0.108077\nvn -0.571 -0.6401 0.514\nv -0.026804 0.034843 0.108295\nvn -0.571 -0.6401 0.514\nv -0.026634 0.034368 0.107894\nvn -0.571 -0.6401 0.514\nv -0.026965 0.037343 0.109319\nvn -0.6728 -0.063 0.7372\nv -0.027598 0.039593 0.108934\nvn -0.6728 -0.063 0.7372\nv -0.027467 0.037858 0.108905\nvn -0.6728 -0.063 0.7372\nv -0.024792 0.033724 0.108849\nvn -0.4344 -0.7343 0.5216\nv -0.025803 0.033773 0.108077\nvn -0.4344 -0.7343 0.5216\nv -0.024584 0.033102 0.108146\nvn -0.4344 -0.7343 0.5216\nv -0.026965 0.037343 0.109319\nvn -0.6143 -0.0379 0.7882\nv -0.026566 0.03985 0.109751\nvn -0.6143 -0.0379 0.7882\nv -0.027598 0.039593 0.108934\nvn -0.6143 -0.0379 0.7882\nv -0.026965 0.037343 0.109319\nvn -0.728 -0.1769 0.6624\nv -0.027467 0.037858 0.108905\nvn -0.728 -0.1769 0.6624\nv -0.027772 0.037166 0.108384\nvn -0.728 -0.1769 0.6624\nv -0.025008 0.032948 0.107362\nvn -0.3801 -0.9054 0.1892\nv -0.024607 0.032604 0.106519\nvn -0.3801 -0.9054 0.1892\nv -0.02165 0.031458 0.106976\nvn -0.3801 -0.9054 0.1892\nv -0.026096 0.037396 0.109866\nvn -0.5292 -0.0614 0.8463\nv -0.026566 0.03985 0.109751\nvn -0.5292 -0.0614 0.8463\nv -0.026965 0.037343 0.109319\nvn -0.5292 -0.0614 0.8463\nv -0.026426 0.036599 0.109552\nvn -0.4604 -0.2847 0.8408\nv -0.026258 0.035409 0.109241\nvn -0.4604 -0.2847 0.8408\nv -0.025493 0.036208 0.10993\nvn -0.4604 -0.2847 0.8408\nv -0.027048 0.03601 0.108815\nvn -0.721 -0.2054 0.6618\nv -0.026965 0.037343 0.109319\nvn -0.721 -0.2054 0.6618\nv -0.027772 0.037166 0.108384\nvn -0.721 -0.2054 0.6618\nv -0.024584 0.033102 0.108146\nvn -0.3605 -0.8592 0.3632\nv -0.025008 0.032948 0.107362\nvn -0.3605 -0.8592 0.3632\nv -0.021593 0.031736 0.107884\nvn -0.3605 -0.8592 0.3632\nv -0.026426 0.036599 0.109552\nvn -0.6415 -0.2361 0.7299\nv -0.026965 0.037343 0.109319\nvn -0.6415 -0.2361 0.7299\nv -0.027048 0.03601 0.108815\nvn -0.6415 -0.2361 0.7299\nv -0.025632 0.038394 0.110106\nvn -0.4012 -0.0337 0.9153\nv -0.026566 0.03985 0.109751\nvn -0.4012 -0.0337 0.9153\nv -0.026096 0.037396 0.109866\nvn -0.4012 -0.0337 0.9153\nv -0.026426 0.036599 0.109552\nvn -0.5243 -0.1154 0.8437\nv -0.026096 0.037396 0.109866\nvn -0.5243 -0.1154 0.8437\nv -0.026965 0.037343 0.109319\nvn -0.5243 -0.1154 0.8437\nv -0.025131 0.034999 0.10963\nvn -0.4136 -0.3346 0.8467\nv -0.025493 0.036208 0.10993\nvn -0.4136 -0.3346 0.8467\nv -0.026258 0.035409 0.109241\nvn -0.4136 -0.3346 0.8467\nv -0.024005 0.034202 0.109555\nvn -0.343 -0.5551 0.7578\nv -0.025131 0.034999 0.10963\nvn -0.343 -0.5551 0.7578\nv -0.024792 0.033724 0.108849\nvn -0.343 -0.5551 0.7578\nv -0.026096 0.037396 0.109866\nvn -0.431 -0.1708 0.8861\nv -0.026426 0.036599 0.109552\nvn -0.431 -0.1708 0.8861\nv -0.025493 0.036208 0.10993\nvn -0.431 -0.1708 0.8861\nv -0.021593 0.031736 0.107884\nvn -0.3593 -0.8857 0.294\nv -0.025008 0.032948 0.107362\nvn -0.3593 -0.8857 0.294\nv -0.02165 0.031458 0.106976\nvn -0.3593 -0.8857 0.294\nv -0.025493 0.036208 0.10993\nvn -0.271 -0.3081 0.912\nv -0.025131 0.034999 0.10963\nvn -0.271 -0.3081 0.912\nv -0.024113 0.035375 0.110059\nvn -0.271 -0.3081 0.912\nv -0.025493 0.036208 0.10993\nvn -0.2902 -0.095 0.9522\nv -0.025632 0.038394 0.110106\nvn -0.2984 -0.0953 0.9497\nv -0.026096 0.037396 0.109866\nvn -0.2889 -0.095 0.9526\nv -0.024783 0.036929 0.110226\nvn -0.2986 -0.0954 0.9496\nv -0.024113 0.035375 0.110059\nvn -0.2051 -0.1916 0.9598\nv -0.024783 0.036929 0.110226\nvn -0.2051 -0.1916 0.9598\nv -0.025493 0.036208 0.10993\nvn -0.2051 -0.1916 0.9598\nv -0.028399 0.039625 0.107611\nvn -0.9552 -0.0988 0.2791\nv -0.028566 0.038695 0.10671\nvn -0.9552 -0.0988 0.2791\nv -0.028153 0.037209 0.107599\nvn -0.9552 -0.0988 0.2791\nv -0.028399 0.039625 0.107611\nvn -0.898 -0.0937 0.4299\nv -0.028153 0.037209 0.107599\nvn -0.898 -0.0937 0.4299\nv -0.027772 0.037166 0.108384\nvn -0.898 -0.0937 0.4299\nv -0.020593 0.031108 0.107711\nvn -0.4062 -0.7781 0.4791\nv -0.021316 0.031992 0.108534\nvn -0.4062 -0.7781 0.4791\nv -0.021593 0.031736 0.107884\nvn -0.4062 -0.7781 0.4791\nv -0.024113 0.035375 0.110059\nvn -0.1958 -0.402 0.8945\nv -0.024005 0.034202 0.109555\nvn -0.1958 -0.402 0.8945\nv -0.019655 0.03298 0.109959\nvn -0.1958 -0.402 0.8945\nv -0.027624 0.035735 0.10778\nvn -0.9067 -0.2875 0.3087\nv -0.028153 0.037209 0.107599\nvn -0.9067 -0.2875 0.3087\nv -0.028111 0.036237 0.106818\nvn -0.9067 -0.2875 0.3087\nv -0.024783 0.036929 0.110226\nvn -0.0905 -0.1449 0.9853\nv -0.024113 0.035375 0.110059\nvn -0.0905 -0.1449 0.9853\nv -0.019526 0.034135 0.110298\nvn -0.0905 -0.1449 0.9853\nv -0.027624 0.035735 0.10778\nvn -0.8738 -0.2633 0.4089\nv -0.027772 0.037166 0.108384\nvn -0.8738 -0.2633 0.4089\nv -0.028153 0.037209 0.107599\nvn -0.8738 -0.2633 0.4089\nv -0.025008 0.032948 0.107362\nvn -0.5305 -0.8236 0.2006\nv -0.026318 0.033775 0.107291\nvn -0.5305 -0.8236 0.2006\nv -0.025943 0.033347 0.106525\nvn -0.5305 -0.8236 0.2006\nv -0.018412 0.029318 0.108266\nvn -0.703 -0.6008 0.3806\nv -0.019635 0.030186 0.107377\nvn -0.703 -0.6008 0.3806\nv -0.018603 0.029081 0.10754\nvn -0.703 -0.6008 0.3806\nv -0.019729 0.030734 0.108205\nvn -0.696 -0.6324 0.34\nv -0.019635 0.030186 0.107377\nvn -0.696 -0.6324 0.34\nv -0.018412 0.029318 0.108266\nvn -0.696 -0.6324 0.34\nv -0.018732 0.029005 0.10674\nvn -0.8684 -0.4601 0.1848\nv -0.01791 0.027674 0.107294\nvn -0.8684 -0.4601 0.1848\nv -0.018603 0.029081 0.10754\nvn -0.8684 -0.4601 0.1848\nv -0.017111 0.032556 0.110351\nvn -0.2125 -0.1429 0.9667\nv -0.017683 0.031544 0.110076\nvn -0.2125 -0.1429 0.9667\nv -0.016378 0.030211 0.110166\nvn -0.2125 -0.1429 0.9667\nv -0.01791 0.027674 0.107294\nvn -0.8037 -0.4616 0.3755\nv -0.016378 0.030211 0.110166\nvn -0.2415 -0.1513 0.9585\nv -0.015313 0.029765 0.110364\nvn -0.2415 -0.1513 0.9585\nv -0.017111 0.032556 0.110351\nvn -0.2415 -0.1513 0.9585\nv -0.016378 0.030211 0.110166\nvn -0.2597 -0.201 0.9445\nv -0.01642 0.028543 0.109799\nvn -0.2597 -0.201 0.9445\nv -0.015313 0.029765 0.110364\nvn -0.2597 -0.201 0.9445\nv -0.016378 0.030211 0.110166\nvn -0.394 -0.1878 0.8997\nv -0.016869 0.029718 0.109848\nvn -0.394 -0.1878 0.8997\nv -0.01642 0.028543 0.109799\nvn -0.394 -0.1878 0.8997\nv -0.017592 0.02673 0.107145\nvn -0.8876 -0.3461 0.304\nv -0.017304 0.026918 0.1082\nvn -0.8876 -0.3461 0.304\nv -0.01791 0.027674 0.107294\nvn -0.8876 -0.3461 0.304\nv -0.017657 0.028029 0.108272\nvn -0.8897 -0.3039 0.3406\nv -0.01791 0.027674 0.107294\nvn -0.8897 -0.3039 0.3406\nv -0.017304 0.026918 0.1082\nvn -0.8897 -0.3039 0.3406\nv -0.026634 0.034368 0.107894\nvn -0.5913 -0.7077 0.3866\nv -0.026318 0.033775 0.107291\nvn -0.5913 -0.7077 0.3866\nv -0.025803 0.033773 0.108077\nvn -0.5913 -0.7077 0.3866\nv -0.026258 0.035409 0.109241\nvn -0.6561 -0.4169 0.629\nv -0.027048 0.03601 0.108815\nvn -0.6561 -0.4169 0.629\nv -0.026804 0.034843 0.108295\nvn -0.6561 -0.4169 0.629\nv -0.025807 0.034422 0.108851\nvn -0.5725 -0.514 0.6388\nv -0.026258 0.035409 0.109241\nvn -0.5725 -0.514 0.6388\nv -0.026804 0.034843 0.108295\nvn -0.5725 -0.514 0.6388\nv -0.026258 0.035409 0.109241\nvn -0.6118 -0.2799 0.7399\nv -0.026426 0.036599 0.109552\nvn -0.6118 -0.2799 0.7399\nv -0.027048 0.03601 0.108815\nvn -0.6118 -0.2799 0.7399\nv -0.024792 0.033724 0.108849\nvn -0.4662 -0.6794 0.5667\nv -0.025807 0.034422 0.108851\nvn -0.4662 -0.6794 0.5667\nv -0.025803 0.033773 0.108077\nvn -0.4662 -0.6794 0.5667\nv -0.026318 0.033775 0.107291\nvn -0.6146 -0.7775 0.1336\nv -0.026806 0.034093 0.106899\nvn -0.6146 -0.7775 0.1336\nv -0.025943 0.033347 0.106525\nvn -0.6146 -0.7775 0.1336\nv -0.025807 0.034422 0.108851\nvn -0.4389 -0.4965 0.7489\nv -0.025131 0.034999 0.10963\nvn -0.4389 -0.4965 0.7489\nv -0.026258 0.035409 0.109241\nvn -0.4389 -0.4965 0.7489\nv -0.024584 0.033102 0.108146\nvn -0.3239 -0.7539 0.5715\nv -0.021316 0.031992 0.108534\nvn -0.3239 -0.7539 0.5715\nv -0.024792 0.033724 0.108849\nvn -0.3239 -0.7539 0.5715\nv -0.024607 0.032604 0.106519\nvn -0.4817 -0.8673 0.1253\nv -0.025008 0.032948 0.107362\nvn -0.4817 -0.8673 0.1253\nv -0.025943 0.033347 0.106525\nvn -0.4817 -0.8673 0.1253\nv -0.024584 0.033102 0.108146\nvn -0.3338 -0.8201 0.4648\nv -0.021593 0.031736 0.107884\nvn -0.3338 -0.8201 0.4648\nv -0.021316 0.031992 0.108534\nvn -0.3338 -0.8201 0.4648\nv -0.024113 0.035375 0.110059\nvn -0.226 -0.4018 0.8874\nv -0.025131 0.034999 0.10963\nvn -0.226 -0.4018 0.8874\nv -0.024005 0.034202 0.109555\nvn -0.226 -0.4018 0.8874\nv -0.02165 0.031458 0.106976\nvn -0.4742 -0.8329 0.2851\nv -0.020593 0.031108 0.107711\nvn -0.4742 -0.8329 0.2851\nv -0.021593 0.031736 0.107884\nvn -0.4742 -0.8329 0.2851\nv -0.025803 0.033773 0.108077\nvn -0.5154 -0.788 0.3367\nv -0.026318 0.033775 0.107291\nvn -0.5154 -0.788 0.3367\nv -0.025008 0.032948 0.107362\nvn -0.5154 -0.788 0.3367\nv -0.019729 0.030734 0.108205\nvn -0.5342 -0.7673 0.3549\nv -0.021316 0.031992 0.108534\nvn -0.5342 -0.7673 0.3549\nv -0.020593 0.031108 0.107711\nvn -0.5342 -0.7673 0.3549\nv -0.019635 0.030186 0.107377\nvn -0.6065 -0.7839 0.1329\nv -0.020628 0.030869 0.106872\nvn -0.6065 -0.7839 0.1329\nv -0.019692 0.030091 0.106555\nvn -0.6065 -0.7839 0.1329\nv -0.020593 0.031108 0.107711\nvn -0.5505 -0.7234 0.4167\nv -0.019635 0.030186 0.107377\nvn -0.5505 -0.7234 0.4167\nv -0.019729 0.030734 0.108205\nvn -0.5505 -0.7234 0.4167\nv -0.024584 0.033102 0.108146\nvn -0.4592 -0.7915 0.4033\nv -0.025803 0.033773 0.108077\nvn -0.4592 -0.7915 0.4033\nv -0.025008 0.032948 0.107362\nvn -0.4592 -0.7915 0.4033\nv -0.018603 0.029081 0.10754\nvn -0.7521 -0.6332 0.1826\nv -0.019692 0.030091 0.106555\nvn -0.7521 -0.6332 0.1826\nv -0.018732 0.029005 0.10674\nvn -0.7521 -0.6332 0.1826\nv -0.018603 0.029081 0.10754\nvn -0.734 -0.6669 0.1281\nv -0.019635 0.030186 0.107377\nvn -0.734 -0.6669 0.1281\nv -0.019692 0.030091 0.106555\nvn -0.734 -0.6669 0.1281\nv -0.018412 0.029318 0.108266\nvn -0.6033 -0.5353 0.5912\nv -0.018863 0.030693 0.109051\nvn -0.6033 -0.5353 0.5912\nv -0.019729 0.030734 0.108205\nvn -0.6033 -0.5353 0.5912\nv -0.019526 0.034135 0.110298\nvn -0.1421 -0.1843 0.9725\nv -0.017683 0.031544 0.110076\nvn -0.1421 -0.1843 0.9725\nv -0.017111 0.032556 0.110351\nvn -0.1421 -0.1843 0.9725\nv -0.017683 0.031544 0.110076\nvn -0.3219 -0.371 0.8711\nv -0.019655 0.03298 0.109959\nvn -0.3219 -0.371 0.8711\nv -0.018043 0.030645 0.10956\nvn -0.3219 -0.371 0.8711\nv -0.018412 0.029318 0.108266\nvn -0.6387 -0.5286 0.5592\nv -0.017909 0.029508 0.10902\nvn -0.6387 -0.5286 0.5592\nv -0.018863 0.030693 0.109051\nvn -0.6387 -0.5286 0.5592\nv -0.018043 0.030645 0.10956\nvn -0.4682 -0.3397 0.8157\nv -0.017194 0.028402 0.109113\nvn -0.4682 -0.3397 0.8157\nv -0.016869 0.029718 0.109848\nvn -0.4682 -0.3397 0.8157\nv -0.018043 0.030645 0.10956\nvn -0.6718 -0.3808 0.6353\nv -0.017909 0.029508 0.10902\nvn -0.6718 -0.3808 0.6353\nv -0.017194 0.028402 0.109113\nvn -0.6718 -0.3808 0.6353\nv -0.017683 0.031544 0.110076\nvn -0.3276 -0.2595 0.9085\nv -0.016869 0.029718 0.109848\nvn -0.3276 -0.2595 0.9085\nv -0.016378 0.030211 0.110166\nvn -0.3276 -0.2595 0.9085\nv -0.017683 0.031544 0.110076\nvn -0.4464 -0.3041 0.8416\nv -0.018043 0.030645 0.10956\nvn -0.4464 -0.3041 0.8416\nv -0.016869 0.029718 0.109848\nvn -0.4464 -0.3041 0.8416\nv -0.017194 0.028402 0.109113\nvn -0.6122 -0.2647 0.7451\nv -0.01642 0.028543 0.109799\nvn -0.6122 -0.2647 0.7451\nv -0.016869 0.029718 0.109848\nvn -0.6122 -0.2647 0.7451\nv -0.026804 0.034843 0.108295\nvn -0.5625 -0.6352 0.5292\nv -0.025803 0.033773 0.108077\nvn -0.5625 -0.6352 0.5292\nv -0.025807 0.034422 0.108851\nvn -0.5625 -0.6352 0.5292\nv -0.021316 0.031992 0.108534\nvn -0.2841 -0.691 0.6647\nv -0.021191 0.03272 0.109345\nvn -0.2841 -0.691 0.6647\nv -0.024792 0.033724 0.108849\nvn -0.2841 -0.691 0.6647\nv -0.025131 0.034999 0.10963\nvn -0.3799 -0.5544 0.7405\nv -0.025807 0.034422 0.108851\nvn -0.3799 -0.5544 0.7405\nv -0.024792 0.033724 0.108849\nvn -0.3799 -0.5544 0.7405\nv -0.024005 0.034202 0.109555\nvn -0.2749 -0.626 0.7298\nv -0.024792 0.033724 0.108849\nvn -0.2749 -0.626 0.7298\nv -0.021191 0.03272 0.109345\nvn -0.2749 -0.626 0.7298\nv -0.020593 0.031108 0.107711\nvn -0.4621 -0.8477 0.2606\nv -0.02165 0.031458 0.106976\nvn -0.4621 -0.8477 0.2606\nv -0.020628 0.030869 0.106872\nvn -0.4621 -0.8477 0.2606\nv -0.021191 0.03272 0.109345\nvn -0.2286 -0.5487 0.8042\nv -0.019655 0.03298 0.109959\nvn -0.2286 -0.5487 0.8042\nv -0.024005 0.034202 0.109555\nvn -0.2286 -0.5487 0.8042\nv -0.019982 0.031574 0.108969\nvn -0.4122 -0.6451 0.6433\nv -0.021191 0.03272 0.109345\nvn -0.4122 -0.6451 0.6433\nv -0.021316 0.031992 0.108534\nvn -0.4122 -0.6451 0.6433\nv -0.019635 0.030186 0.107377\nvn -0.6294 -0.7401 0.2368\nv -0.020593 0.031108 0.107711\nvn -0.6294 -0.7401 0.2368\nv -0.020628 0.030869 0.106872\nvn -0.6294 -0.7401 0.2368\nv -0.019729 0.030734 0.108205\nvn -0.4114 -0.6785 0.6086\nv -0.019982 0.031574 0.108969\nvn -0.4114 -0.6785 0.6086\nv -0.021316 0.031992 0.108534\nvn -0.4114 -0.6785 0.6086\nv -0.019542 0.031971 0.109506\nvn -0.3429 -0.5984 0.7241\nv -0.021191 0.03272 0.109345\nvn -0.3429 -0.5984 0.7241\nv -0.019982 0.031574 0.108969\nvn -0.3429 -0.5984 0.7241\nv -0.019526 0.034135 0.110298\nvn -0.1219 -0.267 0.956\nv -0.024113 0.035375 0.110059\nvn -0.1219 -0.267 0.956\nv -0.019655 0.03298 0.109959\nvn -0.1219 -0.267 0.956\nv -0.019542 0.031971 0.109506\nvn -0.2751 -0.4189 0.8654\nv -0.019655 0.03298 0.109959\nvn -0.2751 -0.4189 0.8654\nv -0.021191 0.03272 0.109345\nvn -0.2751 -0.4189 0.8654\nv -0.018863 0.030693 0.109051\nvn -0.5482 -0.6476 0.5293\nv -0.019982 0.031574 0.108969\nvn -0.5482 -0.6476 0.5293\nv -0.019729 0.030734 0.108205\nvn -0.5482 -0.6476 0.5293\nv -0.026355 0.072186 0.106887\nvn -0.9721 0.066 0.225\nv -0.028578 0.040716 0.10652\nvn -0.9721 0.066 0.225\nv -0.028399 0.039625 0.107611\nvn -0.9721 0.066 0.225\nv -0.02604 0.07215 0.107906\nvn -0.9525 0.0664 0.2972\nv -0.026355 0.072186 0.106887\nvn -0.9525 0.0664 0.2972\nv -0.028399 0.039625 0.107611\nvn -0.9525 0.0664 0.2972\nv -0.02604 0.07215 0.107906\nvn -0.9098 0.0623 0.4103\nv -0.028399 0.039625 0.107611\nvn -0.9098 0.0623 0.4103\nv -0.027968 0.041088 0.108346\nvn -0.9098 0.0623 0.4103\nv -0.025491 0.072417 0.108775\nvn -0.8523 0.0603 0.5196\nv -0.02604 0.07215 0.107906\nvn -0.8523 0.0603 0.5196\nv -0.027968 0.041088 0.108346\nvn -0.8523 0.0603 0.5196\nv -0.025491 0.072417 0.108775\nvn -0.7789 0.053 0.6249\nv -0.027968 0.041088 0.108346\nvn -0.7789 0.053 0.6249\nv -0.027598 0.039593 0.108934\nvn -0.7789 0.053 0.6249\nv -0.024755 0.07251 0.109469\nvn -0.6263 0.0414 0.7784\nv -0.027598 0.039593 0.108934\nvn -0.6263 0.0414 0.7784\nv -0.026566 0.03985 0.109751\nvn -0.6263 0.0414 0.7784\nv -0.024755 0.07251 0.109469\nvn -0.6884 0.0477 0.7237\nv -0.025491 0.072417 0.108775\nvn -0.6884 0.0477 0.7237\nv -0.027598 0.039593 0.108934\nvn -0.6884 0.0477 0.7237\nv -0.024053 0.072391 0.10989\nvn -0.5094 0.0357 0.8598\nv -0.024755 0.07251 0.109469\nvn -0.5094 0.0357 0.8598\nv -0.026566 0.03985 0.109751\nvn -0.5094 0.0357 0.8598\nv -0.024053 0.072391 0.10989\nvn -0.3295 0.0213 0.9439\nv -0.026566 0.03985 0.109751\nvn -0.3269 0.0212 0.9448\nv -0.025632 0.038394 0.110106\nvn -0.3335 0.0215 0.9425\nv -0.02338 0.072932 0.110117\nvn -0.3362 0.0216 0.9416\nv -0.02338 0.072932 0.110117\nvn -0.1262 0.0079 0.992\nv -0.025632 0.038394 0.110106\nvn -0.1262 0.0079 0.992\nv -0.024783 0.036929 0.110226\nvn -0.1262 0.0079 0.992\nv -0.022654 0.072295 0.110249\nvn -0.1703 0.0096 0.9854\nv -0.02338 0.072932 0.110117\nvn -0.1703 0.0096 0.9854\nv -0.024783 0.036929 0.110226\nvn -0.1703 0.0096 0.9854\nv -0.025865 0.074948 0.107583\nvn -0.967 0.1144 0.2275\nv -0.026006 0.076112 0.106395\nvn -0.967 0.1144 0.2275\nv -0.026355 0.072186 0.106887\nvn -0.967 0.1144 0.2275\nv -0.0226 0.07531 0.110022\nvn -0.1506 0.1902 0.9701\nv -0.022227 0.078862 0.109384\nvn -0.1506 0.1902 0.9701\nv -0.023246 0.076474 0.109694\nvn -0.1506 0.1902 0.9701\nv -0.02604 0.07215 0.107906\nvn -0.9501 0.0938 0.2974\nv -0.025865 0.074948 0.107583\nvn -0.9501 0.0938 0.2974\nv -0.026355 0.072186 0.106887\nvn -0.9501 0.0938 0.2974\nv -0.025491 0.072417 0.108775\nvn -0.8554 0.1118 0.5057\nv -0.025865 0.074948 0.107583\nvn -0.8554 0.1118 0.5057\nv -0.02604 0.07215 0.107906\nvn -0.8554 0.1118 0.5057\nv -0.025491 0.072417 0.108775\nvn -0.8687 0.1002 0.4852\nv -0.025415 0.075171 0.108342\nvn -0.8687 0.1002 0.4852\nv -0.025865 0.074948 0.107583\nvn -0.8687 0.1002 0.4852\nv -0.021887 0.094223 0.091055\nvn -0.6939 0.714 0.0936\nv -0.021596 0.094998 0.087299\nvn -0.6939 0.714 0.0936\nv -0.022481 0.093685 0.090757\nvn -0.6939 0.714 0.0936\nv -0.022777 0.093296 0.090202\nvn -0.924 0.3823 0.0106\nv -0.022992 0.092815 0.088854\nvn -0.924 0.3823 0.0106\nv -0.023658 0.091042 0.094685\nvn -0.924 0.3823 0.0106\nv -0.021093 0.094874 0.090452\nvn -0.5715 0.8113 0.1232\nv -0.021596 0.094998 0.087299\nvn -0.5715 0.8113 0.1232\nv -0.021887 0.094223 0.091055\nvn -0.5715 0.8113 0.1232\nv -0.022552 0.090159 0.101044\nvn -0.6308 0.6543 0.4172\nv -0.023158 0.090226 0.100023\nvn -0.6308 0.6543 0.4172\nv -0.023284 0.088471 0.102585\nvn -0.6308 0.6543 0.4172\nv -0.023507 0.085301 0.105664\nvn -0.6636 0.5263 0.5316\nv -0.023146 0.087417 0.10402\nvn -0.6636 0.5263 0.5316\nv -0.024004 0.086547 0.103809\nvn -0.6636 0.5263 0.5316\nv -0.023125 0.092146 0.094753\nvn -0.9005 0.433 0.0406\nv -0.022777 0.093296 0.090202\nvn -0.9005 0.433 0.0406\nv -0.023658 0.091042 0.094685\nvn -0.9005 0.433 0.0406\nv -0.020688 0.094566 0.092575\nvn -0.3105 0.9305 0.1943\nv -0.020073 0.095652 0.088354\nvn -0.3105 0.9305 0.1943\nv -0.021093 0.094874 0.090452\nvn -0.3105 0.9305 0.1943\nv -0.023694 0.082991 0.107099\nvn -0.6627 0.4333 0.6108\nv -0.023507 0.085301 0.105664\nvn -0.6627 0.4333 0.6108\nv -0.024338 0.083995 0.105689\nvn -0.6627 0.4333 0.6108\nv -0.019721 0.09507 0.09145\nvn -0.2523 0.9453 0.2066\nv -0.020073 0.095652 0.088354\nvn -0.2523 0.9453 0.2066\nv -0.020688 0.094566 0.092575\nvn -0.2523 0.9453 0.2066\nv -0.022169 0.093443 0.0937\nvn -0.7011 0.7008 0.1319\nv -0.021887 0.094223 0.091055\nvn -0.7011 0.7008 0.1319\nv -0.022481 0.093685 0.090757\nvn -0.7011 0.7008 0.1319\nv -0.023125 0.092146 0.094753\nvn -0.8402 0.5376 0.0717\nv -0.022481 0.093685 0.090757\nvn -0.8402 0.5376 0.0717\nv -0.022777 0.093296 0.090202\nvn -0.8402 0.5376 0.0717\nv -0.023712 0.080999 0.108105\nvn -0.6486 0.3475 0.6772\nv -0.023694 0.082991 0.107099\nvn -0.6486 0.3475 0.6772\nv -0.02464 0.081065 0.107181\nvn -0.6486 0.3475 0.6772\nv -0.023712 0.080999 0.108105\nvn -0.6607 0.304 0.6863\nv -0.02464 0.081065 0.107181\nvn -0.6607 0.304 0.6863\nv -0.024381 0.078915 0.108383\nvn -0.6607 0.304 0.6863\nv -0.021534 0.093877 0.093733\nvn -0.54 0.8228 0.1772\nv -0.021093 0.094874 0.090452\nvn -0.54 0.8228 0.1772\nv -0.021887 0.094223 0.091055\nvn -0.54 0.8228 0.1772\nv -0.021534 0.093877 0.093733\nvn -0.5622 0.8076 0.1781\nv -0.021887 0.094223 0.091055\nvn -0.5622 0.8076 0.1781\nv -0.022169 0.093443 0.0937\nvn -0.5622 0.8076 0.1781\nv -0.022169 0.093443 0.0937\nvn -0.7435 0.6555 0.1326\nv -0.022481 0.093685 0.090757\nvn -0.7435 0.6555 0.1326\nv -0.023125 0.092146 0.094753\nvn -0.7435 0.6555 0.1326\nv -0.024755 0.07251 0.109469\nvn -0.6893 0.0968 0.718\nv -0.024937 0.074862 0.108977\nvn -0.6893 0.0968 0.718\nv -0.025491 0.072417 0.108775\nvn -0.6893 0.0968 0.718\nv -0.020688 0.094566 0.092575\nvn -0.4285 0.879 0.2093\nv -0.021093 0.094874 0.090452\nvn -0.4285 0.879 0.2093\nv -0.021534 0.093877 0.093733\nvn -0.4285 0.879 0.2093\nv -0.022551 0.092235 0.096705\nvn -0.6946 0.6647 0.2752\nv -0.023139 0.091519 0.096951\nvn -0.6946 0.6647 0.2752\nv -0.023158 0.090226 0.100023\nvn -0.6946 0.6647 0.2752\nv -0.022551 0.092235 0.096705\nvn -0.6742 0.68 0.2882\nv -0.023158 0.090226 0.100023\nvn -0.6742 0.68 0.2882\nv -0.022436 0.091473 0.098773\nvn -0.6742 0.68 0.2882\nv -0.022436 0.091473 0.098773\nvn -0.5562 0.7692 0.3146\nv -0.02188 0.09267 0.096827\nvn -0.5562 0.7692 0.3146\nv -0.022551 0.092235 0.096705\nvn -0.5562 0.7692 0.3146\nv -0.023158 0.090226 0.100023\nvn -0.7671 0.5931 0.2447\nv -0.023139 0.091519 0.096951\nvn -0.7671 0.5931 0.2447\nv -0.023615 0.089694 0.099881\nvn -0.7671 0.5931 0.2447\nv -0.022551 0.092235 0.096705\nvn -0.7165 0.674 0.1798\nv -0.022169 0.093443 0.0937\nvn -0.7165 0.674 0.1798\nv -0.023125 0.092146 0.094753\nvn -0.7165 0.674 0.1798\nv -0.022551 0.092235 0.096705\nvn -0.7279 0.6606 0.1838\nv -0.023125 0.092146 0.094753\nvn -0.7279 0.6606 0.1838\nv -0.023139 0.091519 0.096951\nvn -0.7279 0.6606 0.1838\nv -0.021764 0.091085 0.100262\nvn -0.4338 0.8047 0.4053\nv -0.021333 0.092354 0.098203\nvn -0.4338 0.8047 0.4053\nv -0.022436 0.091473 0.098773\nvn -0.4338 0.8047 0.4053\nv -0.020193 0.094068 0.094594\nvn -0.1727 0.9457 0.2752\nv -0.019721 0.09507 0.09145\nvn -0.1727 0.9457 0.2752\nv -0.020688 0.094566 0.092575\nvn -0.1727 0.9457 0.2752\nv -0.020636 0.091851 0.099492\nvn -0.2551 0.846 0.4681\nv -0.021333 0.092354 0.098203\nvn -0.2551 0.846 0.4681\nv -0.021764 0.091085 0.100262\nvn -0.2551 0.846 0.4681\nv -0.022552 0.090159 0.101044\nvn -0.4182 0.7672 0.4863\nv -0.021898 0.090005 0.10185\nvn -0.4182 0.7672 0.4863\nv -0.021764 0.091085 0.100262\nvn -0.4182 0.7672 0.4863\nv -0.021093 0.093494 0.095579\nvn -0.3565 0.8942 0.2709\nv -0.020688 0.094566 0.092575\nvn -0.3565 0.8942 0.2709\nv -0.021534 0.093877 0.093733\nvn -0.3565 0.8942 0.2709\nv -0.020923 0.090645 0.10136\nvn -0.2649 0.8077 0.5267\nv -0.021764 0.091085 0.100262\nvn -0.2649 0.8077 0.5267\nv -0.021898 0.090005 0.10185\nvn -0.2649 0.8077 0.5267\nv -0.023972 0.08957 0.098543\nvn -0.8987 0.429 0.0906\nv -0.023125 0.092146 0.094753\nvn -0.8987 0.429 0.0906\nv -0.023658 0.091042 0.094685\nvn -0.8987 0.429 0.0906\nv -0.02188 0.09267 0.096827\nvn -0.5567 0.793 0.2474\nv -0.022169 0.093443 0.0937\nvn -0.5579 0.7922 0.2473\nv -0.022551 0.092235 0.096705\nvn -0.5586 0.7917 0.2473\nv -0.021534 0.093877 0.093733\nvn -0.5561 0.7934 0.2475\nv -0.023972 0.08957 0.098543\nvn -0.9568 0.289 0.0325\nv -0.023658 0.091042 0.094685\nvn -0.9568 0.289 0.0325\nv -0.024328 0.088363 0.098807\nvn -0.9568 0.289 0.0325\nv -0.023139 0.091519 0.096951\nvn -0.8684 0.4783 0.1309\nv -0.023125 0.092146 0.094753\nvn -0.8684 0.4783 0.1309\nv -0.023972 0.08957 0.098543\nvn -0.8684 0.4783 0.1309\nv -0.020193 0.094068 0.094594\nvn -0.267 0.9185 0.2916\nv -0.020688 0.094566 0.092575\nvn -0.267 0.9185 0.2916\nv -0.021093 0.093494 0.095579\nvn -0.267 0.9185 0.2916\nv -0.023507 0.085301 0.105664\nvn -0.5353 0.5733 0.6203\nv -0.022593 0.086669 0.105188\nvn -0.5353 0.5733 0.6203\nv -0.023146 0.087417 0.10402\nvn -0.5353 0.5733 0.6203\nv -0.024004 0.086547 0.103809\nvn -0.722 0.4689 0.5087\nv -0.024338 0.083995 0.105689\nvn -0.722 0.4689 0.5087\nv -0.023507 0.085301 0.105664\nvn -0.722 0.4689 0.5087\nv -0.021093 0.093494 0.095579\nvn -0.4428 0.8509 0.2826\nv -0.021534 0.093877 0.093733\nvn -0.4428 0.8509 0.2826\nv -0.02188 0.09267 0.096827\nvn -0.4428 0.8509 0.2826\nv -0.020359 0.093123 0.097008\nvn -0.2073 0.9156 0.3445\nv -0.020193 0.094068 0.094594\nvn -0.2073 0.9156 0.3445\nv -0.021093 0.093494 0.095579\nvn -0.2073 0.9156 0.3445\nv -0.023694 0.082991 0.107099\nvn -0.5167 0.4818 0.7078\nv -0.022831 0.084674 0.106585\nvn -0.5167 0.4818 0.7078\nv -0.023507 0.085301 0.105664\nvn -0.5167 0.4818 0.7078\nv -0.024338 0.083995 0.105689\nvn -0.7128 0.3754 0.5925\nv -0.02464 0.081065 0.107181\nvn -0.7128 0.3754 0.5925\nv -0.023694 0.082991 0.107099\nvn -0.7128 0.3754 0.5925\nv -0.021333 0.092354 0.098203\nvn -0.3628 0.8664 0.3432\nv -0.021093 0.093494 0.095579\nvn -0.3628 0.8664 0.3432\nv -0.02188 0.09267 0.096827\nvn -0.3628 0.8664 0.3432\nv -0.023615 0.089694 0.099881\nvn -0.8437 0.5064 0.1782\nv -0.023139 0.091519 0.096951\nvn -0.8437 0.5064 0.1782\nv -0.023972 0.08957 0.098543\nvn -0.8437 0.5064 0.1782\nv -0.025058 0.07865 0.107734\nvn -0.7192 0.2243 0.6576\nv -0.024673 0.07662 0.108847\nvn -0.7192 0.2243 0.6576\nv -0.024381 0.078915 0.108383\nvn -0.7192 0.2243 0.6576\nv -0.020359 0.093123 0.097008\nvn -0.258 0.8945 0.3651\nv -0.021093 0.093494 0.095579\nvn -0.258 0.8945 0.3651\nv -0.021333 0.092354 0.098203\nvn -0.258 0.8945 0.3651\nv -0.023514 0.078148 0.109225\nvn -0.5639 0.2318 0.7926\nv -0.024381 0.078915 0.108383\nvn -0.5639 0.2318 0.7926\nv -0.024673 0.07662 0.108847\nvn -0.5639 0.2318 0.7926\nv -0.024673 0.07662 0.108847\nvn -0.7741 0.1853 0.6054\nv -0.025058 0.07865 0.107734\nvn -0.7741 0.1853 0.6054\nv -0.025415 0.075171 0.108342\nvn -0.7741 0.1853 0.6054\nv -0.024937 0.074862 0.108977\nvn -0.7497 0.16 0.6421\nv -0.024673 0.07662 0.108847\nvn -0.7497 0.16 0.6421\nv -0.025415 0.075171 0.108342\nvn -0.7497 0.16 0.6421\nv -0.024937 0.074862 0.108977\nvn -0.7641 0.1207 0.6338\nv -0.025415 0.075171 0.108342\nvn -0.7641 0.1207 0.6338\nv -0.025491 0.072417 0.108775\nvn -0.7641 0.1207 0.6338\nv -0.024152 0.074952 0.109544\nvn -0.59 0.1474 0.7938\nv -0.024673 0.07662 0.108847\nvn -0.59 0.1474 0.7938\nv -0.024937 0.074862 0.108977\nvn -0.59 0.1474 0.7938\nv -0.024755 0.07251 0.109469\nvn -0.5901 0.1212 0.7982\nv -0.024152 0.074952 0.109544\nvn -0.5901 0.1212 0.7982\nv -0.024937 0.074862 0.108977\nvn -0.5901 0.1212 0.7982\nv -0.023966 0.088344 0.101399\nvn -0.875 0.4442 0.1924\nv -0.023615 0.089694 0.099881\nvn -0.875 0.4442 0.1924\nv -0.023972 0.08957 0.098543\nvn -0.875 0.4442 0.1924\nv -0.024539 0.086825 0.101688\nvn -0.9498 0.2996 0.0902\nv -0.023972 0.08957 0.098543\nvn -0.9498 0.2996 0.0902\nv -0.024328 0.088363 0.098807\nvn -0.9498 0.2996 0.0902\nv -0.021333 0.092354 0.098203\nvn -0.4572 0.8098 0.3678\nv -0.02188 0.09267 0.096827\nvn -0.4572 0.8098 0.3678\nv -0.022436 0.091473 0.098773\nvn -0.4572 0.8098 0.3678\nv -0.022552 0.090159 0.101044\nvn -0.5738 0.7214 0.3877\nv -0.022436 0.091473 0.098773\nvn -0.5738 0.7214 0.3877\nv -0.023158 0.090226 0.100023\nvn -0.5738 0.7214 0.3877\nv -0.022552 0.090159 0.101044\nvn -0.4854 0.7674 0.4188\nv -0.021764 0.091085 0.100262\nvn -0.4854 0.7674 0.4188\nv -0.022436 0.091473 0.098773\nvn -0.4854 0.7674 0.4188\nv -0.023966 0.088344 0.101399\nvn -0.9126 0.375 0.1628\nv -0.023972 0.08957 0.098543\nvn -0.9126 0.375 0.1628\nv -0.024539 0.086825 0.101688\nvn -0.9126 0.375 0.1628\nv -0.022831 0.084674 0.106585\nvn -0.452 0.5469 0.7047\nv -0.022593 0.086669 0.105188\nvn -0.452 0.5469 0.7047\nv -0.023507 0.085301 0.105664\nvn -0.452 0.5469 0.7047\nv -0.023712 0.080999 0.108105\nvn -0.422 0.4114 0.8079\nv -0.022424 0.083265 0.107624\nvn -0.422 0.4114 0.8079\nv -0.023694 0.082991 0.107099\nvn -0.422 0.4114 0.8079\nv -0.024539 0.086825 0.101688\nvn -0.9811 0.1911 0.03\nv -0.024328 0.088363 0.098807\nvn -0.9811 0.1911 0.03\nv -0.025118 0.083484 0.104041\nvn -0.9811 0.1911 0.03\nv -0.023966 0.088344 0.101399\nvn -0.7586 0.5641 0.3259\nv -0.023158 0.090226 0.100023\nvn -0.7586 0.5641 0.3259\nv -0.023615 0.089694 0.099881\nvn -0.7586 0.5641 0.3259\nv -0.020923 0.090645 0.10136\nvn -0.2222 0.8342 0.5047\nv -0.020636 0.091851 0.099492\nvn -0.2222 0.8342 0.5047\nv -0.021764 0.091085 0.100262\nvn -0.2222 0.8342 0.5047\nv -0.024152 0.074952 0.109544\nvn -0.5182 0.1868 0.8346\nv -0.023514 0.078148 0.109225\nvn -0.5182 0.1868 0.8346\nv -0.024673 0.07662 0.108847\nvn -0.5182 0.1868 0.8346\nv -0.024152 0.074952 0.109544\nvn -0.4413 0.176 0.8799\nv -0.023246 0.076474 0.109694\nvn -0.4413 0.176 0.8799\nv -0.023514 0.078148 0.109225\nvn -0.4413 0.176 0.8799\nv -0.023284 0.088471 0.102585\nvn -0.7326 0.5778 0.3598\nv -0.023158 0.090226 0.100023\nvn -0.7326 0.5778 0.3598\nv -0.023966 0.088344 0.101399\nvn -0.7326 0.5778 0.3598\nv -0.024536 0.085792 0.103476\nvn -0.8978 0.3806 0.2217\nv -0.023966 0.088344 0.101399\nvn -0.8978 0.3806 0.2217\nv -0.024539 0.086825 0.101688\nvn -0.8978 0.3806 0.2217\nv -0.024053 0.072391 0.10989\nvn -0.4996 0.0969 0.8608\nv -0.024152 0.074952 0.109544\nvn -0.4996 0.0969 0.8608\nv -0.024755 0.07251 0.109469\nvn -0.4996 0.0969 0.8608\nv -0.024053 0.072391 0.10989\nvn -0.3956 0.1079 0.9121\nv -0.02338 0.072932 0.110117\nvn -0.3956 0.1079 0.9121\nv -0.024152 0.074952 0.109544\nvn -0.3956 0.1079 0.9121\nv -0.0223 0.088908 0.103044\nvn -0.5347 0.6844 0.4957\nv -0.022552 0.090159 0.101044\nvn -0.5347 0.6844 0.4957\nv -0.023284 0.088471 0.102585\nvn -0.5347 0.6844 0.4957\nv -0.024004 0.086547 0.103809\nvn -0.8356 0.4466 0.3198\nv -0.023966 0.088344 0.101399\nvn -0.8356 0.4466 0.3198\nv -0.024536 0.085792 0.103476\nvn -0.8356 0.4466 0.3198\nv -0.0223 0.088908 0.103044\nvn -0.4597 0.7256 0.5121\nv -0.021898 0.090005 0.10185\nvn -0.4597 0.7256 0.5121\nv -0.022552 0.090159 0.101044\nvn -0.4597 0.7256 0.5121\nv -0.024536 0.085792 0.103476\nvn -0.9465 0.2787 0.1629\nv -0.024539 0.086825 0.101688\nvn -0.9465 0.2787 0.1629\nv -0.025118 0.083484 0.104041\nvn -0.9465 0.2787 0.1629\nv -0.023284 0.088471 0.102585\nvn -0.7598 0.5269 0.3809\nv -0.023966 0.088344 0.101399\nvn -0.7598 0.5269 0.3809\nv -0.024004 0.086547 0.103809\nvn -0.7598 0.5269 0.3809\nv -0.022831 0.084674 0.106585\nvn -0.3486 0.5649 0.7479\nv -0.022056 0.08533 0.10645\nvn -0.3486 0.5649 0.7479\nv -0.022593 0.086669 0.105188\nvn -0.3486 0.5649 0.7479\nv -0.022424 0.083265 0.107624\nvn -0.4216 0.4562 0.7836\nv -0.022831 0.084674 0.106585\nvn -0.4216 0.4562 0.7836\nv -0.023694 0.082991 0.107099\nvn -0.4216 0.4562 0.7836\nv -0.022888 0.081021 0.108501\nvn -0.4054 0.4045 0.8198\nv -0.022424 0.083265 0.107624\nvn -0.4054 0.4045 0.8198\nv -0.023712 0.080999 0.108105\nvn -0.4054 0.4045 0.8198\nv -0.021094 0.08937 0.102998\nvn -0.2657 0.7526 0.6025\nv -0.021898 0.090005 0.10185\nvn -0.2657 0.7526 0.6025\nv -0.0223 0.088908 0.103044\nvn -0.2657 0.7526 0.6025\nv -0.023146 0.087417 0.10402\nvn -0.5381 0.6536 0.5322\nv -0.0223 0.088908 0.103044\nvn -0.5381 0.6536 0.5322\nv -0.023284 0.088471 0.102585\nvn -0.5381 0.6536 0.5322\nv -0.023146 0.087417 0.10402\nvn -0.681 0.5572 0.475\nv -0.023284 0.088471 0.102585\nvn -0.681 0.5572 0.475\nv -0.024004 0.086547 0.103809\nvn -0.681 0.5572 0.475\nv -0.02338 0.072932 0.110117\nvn -0.3617 0.1242 0.924\nv -0.023246 0.076474 0.109694\nvn -0.3617 0.1242 0.924\nv -0.024152 0.074952 0.109544\nvn -0.3617 0.1242 0.924\nv -0.021731 0.087887 0.10442\nvn -0.2532 0.7239 0.6417\nv -0.021094 0.08937 0.102998\nvn -0.2532 0.7239 0.6417\nv -0.0223 0.088908 0.103044\nvn -0.2532 0.7239 0.6417\nv -0.021333 0.092354 0.098203\nvn -0.1651 0.8853 0.4348\nv -0.020636 0.091851 0.099492\nvn -0.1651 0.8853 0.4348\nv -0.020359 0.093123 0.097008\nvn -0.1651 0.8853 0.4348\nv -0.022593 0.086669 0.105188\nvn -0.4324 0.6526 0.6223\nv -0.0223 0.088908 0.103044\nvn -0.4324 0.6526 0.6223\nv -0.023146 0.087417 0.10402\nvn -0.4324 0.6526 0.6223\nv -0.021898 0.090005 0.10185\nvn -0.2182 0.7811 0.585\nv -0.021094 0.08937 0.102998\nvn -0.2182 0.7811 0.585\nv -0.020923 0.090645 0.10136\nvn -0.2182 0.7811 0.585\nv -0.021731 0.087887 0.10442\nvn -0.273 0.644 0.7146\nv -0.022593 0.086669 0.105188\nvn -0.273 0.644 0.7146\nv -0.021631 0.086561 0.105653\nvn -0.273 0.644 0.7146\nv -0.024338 0.083995 0.105689\nvn -0.8233 0.4023 0.4003\nv -0.024004 0.086547 0.103809\nvn -0.8233 0.4023 0.4003\nv -0.024536 0.085792 0.103476\nvn -0.8233 0.4023 0.4003\nv -0.022056 0.08533 0.10645\nvn -0.2971 0.589 0.7516\nv -0.021631 0.086561 0.105653\nvn -0.2971 0.589 0.7516\nv -0.022593 0.086669 0.105188\nvn -0.2971 0.589 0.7516\nv -0.022424 0.083265 0.107624\nvn -0.2928 0.5114 0.8079\nv -0.022056 0.08533 0.10645\nvn -0.2928 0.5114 0.8079\nv -0.022831 0.084674 0.106585\nvn -0.2928 0.5114 0.8079\nv -0.021731 0.087887 0.10442\nvn -0.367 0.668 0.6473\nv -0.0223 0.088908 0.103044\nvn -0.367 0.668 0.6473\nv -0.022593 0.086669 0.105188\nvn -0.367 0.668 0.6473\nv -0.022888 0.081021 0.108501\nvn -0.2359 0.3959 0.8875\nv -0.021881 0.081979 0.108341\nvn -0.2359 0.3959 0.8875\nv -0.022424 0.083265 0.107624\nvn -0.2359 0.3959 0.8875\nv -0.022888 0.081021 0.108501\nvn -0.1657 0.3292 0.9296\nv -0.022227 0.078862 0.109384\nvn -0.1657 0.3292 0.9296\nv -0.021881 0.081979 0.108341\nvn -0.1657 0.3292 0.9296\nv -0.020947 0.088134 0.104326\nvn -0.1441 0.7163 0.6827\nv -0.021094 0.08937 0.102998\nvn -0.1441 0.7163 0.6827\nv -0.021731 0.087887 0.10442\nvn -0.1441 0.7163 0.6827\nv -0.023246 0.076474 0.109694\nvn -0.2417 0.2257 0.9437\nv -0.022227 0.078862 0.109384\nvn -0.2417 0.2257 0.9437\nv -0.023514 0.078148 0.109225\nvn -0.2417 0.2257 0.9437\nv -0.02338 0.072932 0.110117\nvn -0.2625 0.1244 0.9569\nv -0.0226 0.07531 0.110022\nvn -0.2625 0.1244 0.9569\nv -0.023246 0.076474 0.109694\nvn -0.2625 0.1244 0.9569\nv -0.024338 0.083995 0.105689\nvn -0.868 0.3446 0.3575\nv -0.024536 0.085792 0.103476\nvn -0.868 0.3446 0.3575\nv -0.024987 0.082169 0.105871\nvn -0.868 0.3446 0.3575\nv -0.024987 0.082169 0.105871\nvn -0.9124 0.2988 0.2798\nv -0.024536 0.085792 0.103476\nvn -0.9124 0.2988 0.2798\nv -0.025118 0.083484 0.104041\nvn -0.9124 0.2988 0.2798\nv -0.021093 0.094874 0.090452\nvn -0.5474 0.8282 0.12\nv -0.020792 0.095736 0.08587\nvn -0.5474 0.8282 0.12\nv -0.021596 0.094998 0.087299\nvn -0.5474 0.8282 0.12\nv -0.021631 0.086561 0.105653\nvn -0.1239 0.6708 0.7312\nv -0.020947 0.088134 0.104326\nvn -0.1239 0.6708 0.7312\nv -0.021731 0.087887 0.10442\nvn -0.1239 0.6708 0.7312\nv -0.024987 0.082169 0.105871\nvn -0.9443 0.2317 0.2339\nv -0.025118 0.083484 0.104041\nvn -0.9443 0.2317 0.2339\nv -0.025505 0.080577 0.105361\nvn -0.9443 0.2317 0.2339\nv -0.022654 0.072295 0.110249\nvn -0.1125 0.0765 0.9907\nv -0.0226 0.07531 0.110022\nvn -0.1125 0.0765 0.9907\nv -0.02338 0.072932 0.110117\nvn -0.1125 0.0765 0.9907\nv -0.02464 0.081065 0.107181\nvn -0.8021 0.3348 0.4945\nv -0.024338 0.083995 0.105689\nvn -0.8021 0.3348 0.4945\nv -0.024987 0.082169 0.105871\nvn -0.8021 0.3348 0.4945\nv -0.021442 0.084419 0.107139\nvn -0.0879 0.5623 0.8222\nv -0.021631 0.086561 0.105653\nvn -0.0879 0.5623 0.8222\nv -0.022056 0.08533 0.10645\nvn -0.0879 0.5623 0.8222\nv -0.021442 0.084419 0.107139\nvn -0.1848 0.5103 0.8399\nv -0.022056 0.08533 0.10645\nvn -0.1848 0.5103 0.8399\nv -0.022424 0.083265 0.107624\nvn -0.1848 0.5103 0.8399\nv -0.025545 0.078202 0.107012\nvn -0.9351 0.2129 0.2833\nv -0.024987 0.082169 0.105871\nvn -0.9351 0.2129 0.2833\nv -0.025505 0.080577 0.105361\nvn -0.9351 0.2129 0.2833\nv -0.025058 0.07865 0.107734\nvn -0.8642 0.2487 0.4373\nv -0.024987 0.082169 0.105871\nvn -0.8669 0.2466 0.4333\nv -0.025545 0.078202 0.107012\nvn -0.8674 0.2462 0.4325\nv -0.02464 0.081065 0.107181\nvn -0.8632 0.2495 0.4388\nv -0.025545 0.078202 0.107012\nvn -0.9677 0.1549 0.199\nv -0.025505 0.080577 0.105361\nvn -0.9677 0.1549 0.199\nv -0.026006 0.076112 0.106395\nvn -0.9677 0.1549 0.199\nv -0.021881 0.081979 0.108341\nvn -0.0958 0.454 0.8858\nv -0.021442 0.084419 0.107139\nvn -0.0958 0.454 0.8858\nv -0.022424 0.083265 0.107624\nvn -0.0958 0.454 0.8858\nv -0.024381 0.078915 0.108383\nvn -0.7198 0.2706 0.6393\nv -0.02464 0.081065 0.107181\nvn -0.7198 0.2706 0.6393\nv -0.025058 0.07865 0.107734\nvn -0.7198 0.2706 0.6393\nv -0.023514 0.078148 0.109225\nvn -0.5311 0.2776 0.8005\nv -0.023712 0.080999 0.108105\nvn -0.5311 0.2776 0.8005\nv -0.024381 0.078915 0.108383\nvn -0.5311 0.2776 0.8005\nv -0.025865 0.074948 0.107583\nvn -0.9585 0.1379 0.2495\nv -0.025545 0.078202 0.107012\nvn -0.9585 0.1379 0.2495\nv -0.026006 0.076112 0.106395\nvn -0.9585 0.1379 0.2495\nv -0.023514 0.078148 0.109225\nvn -0.4195 0.3066 0.8544\nv -0.022888 0.081021 0.108501\nvn -0.4195 0.3066 0.8544\nv -0.023712 0.080999 0.108105\nvn -0.4195 0.3066 0.8544\nv -0.022227 0.078862 0.109384\nvn -0.2743 0.2906 0.9167\nv -0.022888 0.081021 0.108501\nvn -0.2743 0.2906 0.9167\nv -0.023514 0.078148 0.109225\nvn -0.2743 0.2906 0.9167\nv -0.025415 0.075171 0.108342\nvn -0.8642 0.1707 0.4733\nv -0.025058 0.07865 0.107734\nvn -0.8628 0.1717 0.4756\nv -0.025545 0.078202 0.107012\nvn -0.8675 0.1683 0.4681\nv -0.025865 0.074948 0.107583\nvn -0.869 0.1671 0.4657\nv -0.020588 0.096962 0.071887\nvn -0.7152 0.6981 0.0328\nv -0.020594 0.096587 0.079726\nvn -0.7152 0.6981 0.0328\nv -0.020016 0.097548 0.071886\nvn -0.7152 0.6981 0.0328\nv -0.021865 0.094935 0.078901\nvn -0.874 0.4856 -0.0188\nv -0.020588 0.096962 0.071887\nvn -0.871 0.4905 -0.0266\nv -0.021073 0.09606 0.071115\nvn -0.8736 0.4862 -0.02\nv -0.020594 0.096587 0.079726\nvn -0.4922 0.8668 0.0799\nv -0.019637 0.097175 0.079249\nvn -0.4922 0.8668 0.0799\nv -0.019085 0.09816 0.071959\nvn -0.4922 0.8668 0.0799\nv -0.019085 0.09816 0.071959\nvn -0.3043 0.9468 0.1049\nv -0.019637 0.097175 0.079249\nvn -0.3043 0.9468 0.1049\nv -0.018486 0.097798 0.076956\nvn -0.3043 0.9468 0.1049\nv -0.01772 0.098802 0.069492\nvn -0.2977 0.9511 0.0828\nv -0.018391 0.098899 0.065959\nvn -0.2977 0.9511 0.0828\nv -0.019085 0.09816 0.071959\nvn -0.2977 0.9511 0.0828\nv -0.015706 0.100121 0.049231\nvn -0.2859 0.9582 -0.0147\nv -0.017176 0.099765 0.054567\nvn -0.2859 0.9582 -0.0147\nv -0.016125 0.100076 0.054415\nvn -0.2859 0.9582 -0.0147\nv -0.019179 0.098468 0.064313\nvn -0.5494 0.8346 0.0404\nv -0.020016 0.097548 0.071886\nvn -0.5507 0.8337 0.0403\nv -0.019085 0.09816 0.071959\nvn -0.5458 0.8369 0.0404\nv -0.019179 0.098468 0.064313\nvn -0.7156 0.6985 0.0057\nv -0.020588 0.096962 0.071887\nvn -0.7156 0.6985 0.0057\nv -0.020016 0.097548 0.071886\nvn -0.7156 0.6985 0.0057\nv -0.015706 0.100121 0.049231\nvn -0.0853 0.9964 0.0018\nv -0.016125 0.100076 0.054415\nvn -0.0853 0.9964 0.0018\nv -0.013379 0.100325 0.046924\nvn -0.0853 0.9964 0.0018\nv -0.010813 0.100249 0.045054\nvn -0.0583 0.991 -0.1203\nv -0.013379 0.100325 0.046924\nvn -0.0583 0.991 -0.1203\nv -0.008263 0.100437 0.045369\nvn -0.0583 0.991 -0.1203\nv -0.018391 0.098899 0.065959\nvn -0.2396 0.9682 0.0723\nv -0.01772 0.098802 0.069492\nvn -0.2396 0.9682 0.0723\nv -0.016884 0.099535 0.062447\nvn -0.2396 0.9682 0.0723\nv -0.019179 0.098468 0.064313\nvn -0.7377 0.6751 -0.0031\nv -0.01948 0.098127 0.061907\nvn -0.7377 0.6751 -0.0031\nv -0.020588 0.096962 0.071887\nvn -0.7377 0.6751 -0.0031\nv -0.01918 0.096576 0.084147\nvn -0.094 0.9764 0.1944\nv -0.020073 0.095652 0.088354\nvn -0.094 0.9764 0.1944\nv -0.019721 0.09507 0.09145\nvn -0.094 0.9764 0.1944\nv -0.018391 0.098899 0.065959\nvn -0.5152 0.8568 0.0217\nv -0.017735 0.099449 0.05983\nvn -0.5152 0.8568 0.0217\nv -0.019179 0.098468 0.064313\nvn -0.5152 0.8568 0.0217\nv -0.018391 0.098899 0.065959\nvn -0.2717 0.9607 0.0571\nv -0.016884 0.099535 0.062447\nvn -0.2717 0.9607 0.0571\nv -0.017735 0.099449 0.05983\nvn -0.2717 0.9607 0.0571\nv -0.019661 0.09719 0.056272\nvn -0.9284 0.3667 -0.0604\nv -0.021073 0.09606 0.071115\nvn -0.9284 0.3667 -0.0604\nv -0.020245 0.097198 0.065292\nvn -0.9284 0.3667 -0.0604\nv -0.018177 0.099231 0.056792\nvn -0.5283 0.8489 0.0158\nv -0.019179 0.098468 0.064313\nvn -0.5283 0.8489 0.0158\nv -0.017735 0.099449 0.05983\nvn -0.5283 0.8489 0.0158\nv -0.01948 0.098127 0.061907\nvn -0.6848 0.7285 -0.0172\nv -0.019179 0.098468 0.064313\nvn -0.6847 0.7286 -0.0172\nv -0.018462 0.098907 0.054407\nvn -0.6846 0.7287 -0.0172\nv -0.019661 0.09719 0.056272\nvn -0.9017 0.4285 -0.0587\nv -0.020245 0.097198 0.065292\nvn -0.9017 0.4285 -0.0587\nv -0.019202 0.098046 0.055464\nvn -0.9017 0.4285 -0.0587\nv -0.019202 0.098046 0.055464\nvn -0.7825 0.6212 -0.0417\nv -0.01948 0.098127 0.061907\nvn -0.7825 0.6212 -0.0417\nv -0.018462 0.098907 0.054407\nvn -0.7825 0.6212 -0.0417\nv -0.018177 0.099231 0.056792\nvn -0.6846 0.7287 -0.0172\nv -0.012959 0.099759 0.044884\nvn -0.2603 0.8791 -0.3992\nv -0.014357 0.099647 0.045549\nvn -0.2603 0.8791 -0.3992\nv -0.013844 0.100038 0.046075\nvn -0.2603 0.8791 -0.3992\nv -0.012959 0.099759 0.044884\nvn -0.1819 0.9189 -0.3502\nv -0.013844 0.100038 0.046075\nvn -0.1819 0.9189 -0.3502\nv -0.010813 0.100249 0.045054\nvn -0.1819 0.9189 -0.3502\nv -0.01085 0.099797 0.04409\nvn -0.1714 0.8948 -0.4123\nv -0.012959 0.099759 0.044884\nvn -0.1714 0.8948 -0.4123\nv -0.010813 0.100249 0.045054\nvn -0.1714 0.8948 -0.4123\nv -0.018177 0.099231 0.056792\nvn -0.5243 0.8509 -0.0319\nv -0.017176 0.099765 0.054567\nvn -0.5243 0.8509 -0.0319\nv -0.017135 0.099669 0.051346\nvn -0.5243 0.8509 -0.0319\nv -0.017135 0.099669 0.051346\nvn -0.5708 0.82 -0.0432\nv -0.018462 0.098907 0.054407\nvn -0.5708 0.82 -0.0432\nv -0.018177 0.099231 0.056792\nvn -0.5708 0.82 -0.0432\nv -0.005185 0.100305 0.04416\nvn -0.0679 0.9271 -0.3686\nv -0.006979 0.099901 0.043473\nvn -0.0679 0.9271 -0.3686\nv -0.010813 0.100249 0.045054\nvn -0.0679 0.9271 -0.3686\nv -0.019202 0.098046 0.055464\nvn -0.8071 0.5836 -0.0895\nv -0.018462 0.098907 0.054407\nvn -0.8071 0.5836 -0.0895\nv -0.018637 0.098289 0.051957\nvn -0.8071 0.5836 -0.0895\nv -0.019661 0.09719 0.056272\nvn -0.912 0.3986 -0.0962\nv -0.019202 0.098046 0.055464\nvn -0.912 0.3986 -0.0962\nv -0.01919 0.097518 0.053169\nvn -0.912 0.3986 -0.0962\nv -0.017176 0.099765 0.054567\nvn -0.3444 0.9383 -0.0322\nv -0.015706 0.100121 0.049231\nvn -0.3444 0.9383 -0.0322\nv -0.017135 0.099669 0.051346\nvn -0.3444 0.9383 -0.0322\nv -0.018637 0.098289 0.051957\nvn -0.8812 0.4597 -0.1101\nv -0.01919 0.097518 0.053169\nvn -0.8812 0.4597 -0.1101\nv -0.019202 0.098046 0.055464\nvn -0.8812 0.4597 -0.1101\nv -0.021663 0.095344 0.081474\nvn -0.7671 0.6399 0.0468\nv -0.022481 0.093685 0.090757\nvn -0.7671 0.6399 0.0468\nv -0.021596 0.094998 0.087299\nvn -0.7671 0.6399 0.0468\nv -0.018637 0.098289 0.051957\nvn -0.7672 0.6232 -0.152\nv -0.017538 0.09919 0.050104\nvn -0.7672 0.6232 -0.152\nv -0.018069 0.098343 0.049311\nvn -0.7672 0.6232 -0.152\nv -0.018069 0.098343 0.049311\nvn -0.8762 0.4475 -0.1789\nv -0.018653 0.097527 0.050128\nvn -0.8762 0.4475 -0.1789\nv -0.018637 0.098289 0.051957\nvn -0.8762 0.4475 -0.1789\nv -0.0159 0.099232 0.046343\nvn -0.6413 0.6678 -0.3778\nv -0.016963 0.098517 0.046884\nvn -0.6413 0.6678 -0.3778\nv -0.01697 0.0991 0.047926\nvn -0.6413 0.6678 -0.3778\nv -0.020073 0.095652 0.088354\nvn -0.3944 0.9074 0.1449\nv -0.020792 0.095736 0.08587\nvn -0.3944 0.9074 0.1449\nv -0.021093 0.094874 0.090452\nvn -0.3944 0.9074 0.1449\nv -0.022992 0.092815 0.088854\nvn -0.8997 0.4363 -0.0125\nv -0.022777 0.093296 0.090202\nvn -0.8997 0.4363 -0.0125\nv -0.021663 0.095344 0.081474\nvn -0.8997 0.4363 -0.0125\nv -0.020792 0.095736 0.08587\nvn -0.364 0.9213 0.1366\nv -0.020073 0.095652 0.088354\nvn -0.364 0.9213 0.1366\nv -0.019637 0.097175 0.079249\nvn -0.364 0.9213 0.1366\nv -0.020594 0.096587 0.079726\nvn -0.5782 0.8105 0.0935\nv -0.021596 0.094998 0.087299\nvn -0.5782 0.8105 0.0935\nv -0.020792 0.095736 0.08587\nvn -0.5782 0.8105 0.0935\nv -0.018486 0.097798 0.076956\nvn -0.2418 0.9602 0.1399\nv -0.019637 0.097175 0.079249\nvn -0.2418 0.9602 0.1399\nv -0.01918 0.096576 0.084147\nvn -0.2418 0.9602 0.1399\nv -0.01772 0.098802 0.069492\nvn -0.2676 0.9582 0.1013\nv -0.019085 0.09816 0.071959\nvn -0.2676 0.9582 0.1013\nv -0.018486 0.097798 0.076956\nvn -0.2676 0.9582 0.1013\nv -0.020594 0.096587 0.079726\nvn -0.5513 0.8321 0.0614\nv -0.019085 0.09816 0.071959\nvn -0.5513 0.8321 0.0614\nv -0.020016 0.097548 0.071886\nvn -0.5513 0.8321 0.0614\nv -0.020245 0.097198 0.065292\nvn -0.8705 0.4914 -0.0278\nv -0.018391 0.098899 0.065959\nvn -0.544 0.8381 0.0404\nv -0.020245 0.097198 0.065292\nvn -0.8084 0.5882 -0.0211\nv -0.020588 0.096962 0.071887\nvn -0.8084 0.5882 -0.0211\nv -0.01948 0.098127 0.061907\nvn -0.8084 0.5882 -0.0211\nv -0.017735 0.099449 0.05983\nvn -0.2313 0.9719 0.0436\nv -0.016884 0.099535 0.062447\nvn -0.2313 0.9719 0.0436\nv -0.016125 0.100076 0.054415\nvn -0.2313 0.9719 0.0436\nv -0.01948 0.098127 0.061907\nvn -0.8431 0.536 -0.0432\nv -0.019202 0.098046 0.055464\nvn -0.8431 0.536 -0.0432\nv -0.020245 0.097198 0.065292\nvn -0.8431 0.536 -0.0432\nv -0.017176 0.099765 0.054567\nvn -0.2802 0.9596 0.0277\nv -0.017735 0.099449 0.05983\nvn -0.2802 0.9596 0.0277\nv -0.016125 0.100076 0.054415\nvn -0.2802 0.9596 0.0277\nv -0.017176 0.099765 0.054567\nvn -0.4638 0.8859 0.0038\nv -0.018177 0.099231 0.056792\nvn -0.4638 0.8859 0.0038\nv -0.017735 0.099449 0.05983\nvn -0.4638 0.8859 0.0038\nv -0.017538 0.09919 0.050104\nvn -0.6396 0.7637 -0.0871\nv -0.018462 0.098907 0.054407\nvn -0.6396 0.7637 -0.0871\nv -0.017135 0.099669 0.051346\nvn -0.6396 0.7637 -0.0871\nv -0.017538 0.09919 0.050104\nvn -0.7384 0.6645 -0.1148\nv -0.018637 0.098289 0.051957\nvn -0.7384 0.6645 -0.1148\nv -0.018462 0.098907 0.054407\nvn -0.7384 0.6645 -0.1148\nv -0.018637 0.098289 0.051957\nvn -0.903 0.3993 -0.1585\nv -0.018653 0.097527 0.050128\nvn -0.903 0.3993 -0.1585\nv -0.01919 0.097518 0.053169\nvn -0.903 0.3993 -0.1585\nv -0.015706 0.100121 0.049231\nvn -0.4621 0.878 -0.1246\nv -0.016417 0.099586 0.048099\nvn -0.4621 0.878 -0.1246\nv -0.017135 0.099669 0.051346\nvn -0.4621 0.878 -0.1246\nv -0.016417 0.099586 0.048099\nvn -0.5455 0.8261 -0.1417\nv -0.017538 0.09919 0.050104\nvn -0.5455 0.8261 -0.1417\nv -0.017135 0.099669 0.051346\nvn -0.5455 0.8261 -0.1417\nv -0.015706 0.100121 0.049231\nvn -0.4048 0.8984 -0.1703\nv -0.015167 0.099981 0.047213\nvn -0.4048 0.8984 -0.1703\nv -0.016417 0.099586 0.048099\nvn -0.4048 0.8984 -0.1703\nv -0.01697 0.0991 0.047926\nvn -0.7235 0.6557 -0.2159\nv -0.018069 0.098343 0.049311\nvn -0.7235 0.6557 -0.2159\nv -0.017538 0.09919 0.050104\nvn -0.7235 0.6557 -0.2159\nv -0.01697 0.0991 0.047926\nvn -0.6137 0.7659 -0.1918\nv -0.017538 0.09919 0.050104\nvn -0.6137 0.7659 -0.1918\nv -0.016417 0.099586 0.048099\nvn -0.6137 0.7659 -0.1918\nv -0.015167 0.099981 0.047213\nvn -0.2063 0.9708 -0.1224\nv -0.015706 0.100121 0.049231\nvn -0.2063 0.9708 -0.1224\nv -0.013379 0.100325 0.046924\nvn -0.2063 0.9708 -0.1224\nv -0.01697 0.0991 0.047926\nvn -0.759 0.5872 -0.2814\nv -0.017619 0.098187 0.047772\nvn -0.759 0.5872 -0.2814\nv -0.018069 0.098343 0.049311\nvn -0.759 0.5872 -0.2814\nv -0.013379 0.100325 0.046924\nvn -0.2164 0.9547 -0.2044\nv -0.013844 0.100038 0.046075\nvn -0.2164 0.9547 -0.2044\nv -0.015167 0.099981 0.047213\nvn -0.2164 0.9547 -0.2044\nv -0.0159 0.099232 0.046343\nvn -0.5673 0.7587 -0.3201\nv -0.01697 0.0991 0.047926\nvn -0.5673 0.7587 -0.3201\nv -0.016417 0.099586 0.048099\nvn -0.5673 0.7587 -0.3201\nv -0.015167 0.099981 0.047213\nvn -0.4777 0.8232 -0.3067\nv -0.0159 0.099232 0.046343\nvn -0.4777 0.8232 -0.3067\nv -0.016417 0.099586 0.048099\nvn -0.4777 0.8232 -0.3067\nv -0.01697 0.0991 0.047926\nvn -0.7417 0.5833 -0.3311\nv -0.016963 0.098517 0.046884\nvn -0.7417 0.5833 -0.3311\nv -0.017619 0.098187 0.047772\nvn -0.7417 0.5833 -0.3311\nv -0.014357 0.099647 0.045549\nvn -0.3272 0.8829 -0.3368\nv -0.015167 0.099981 0.047213\nvn -0.3272 0.8829 -0.3368\nv -0.013844 0.100038 0.046075\nvn -0.3272 0.8829 -0.3368\nv -0.013379 0.100325 0.046924\nvn -0.1485 0.9586 -0.2429\nv -0.010813 0.100249 0.045054\nvn -0.1485 0.9586 -0.2429\nv -0.013844 0.100038 0.046075\nvn -0.1485 0.9586 -0.2429\nv -0.014357 0.099647 0.045549\nvn -0.4136 0.8325 -0.3687\nv -0.0159 0.099232 0.046343\nvn -0.4136 0.8325 -0.3687\nv -0.015167 0.099981 0.047213\nvn -0.4136 0.8325 -0.3687\nv -0.006979 0.099901 0.043473\nvn -0.0911 0.9032 -0.4194\nv -0.01085 0.099797 0.04409\nvn -0.0911 0.9032 -0.4194\nv -0.010813 0.100249 0.045054\nvn -0.0911 0.9032 -0.4194\nv -0.005185 0.100305 0.04416\nvn -0.0448 0.9745 -0.2199\nv -0.010813 0.100249 0.045054\nvn -0.0448 0.9745 -0.2199\nv -0.008263 0.100437 0.045369\nvn -0.0448 0.9745 -0.2199\nv -0.005185 0.100305 0.04416\nvn -0.0307 0.9823 -0.1849\nv -0.008263 0.100437 0.045369\nvn -0.0307 0.9823 -0.1849\nv 7.03719e-18 0.10057 0.044704\nvn -0.0307 0.9823 -0.1849\nv -0.006979 0.099901 0.043473\nvn -0.0327 0.8962 -0.4425\nv -0.005185 0.100305 0.04416\nvn -0.0327 0.8962 -0.4425\nv 7.1899e-18 0.100148 0.043457\nvn -0.0327 0.8962 -0.4425\nv 7.1899e-18 0.100148 0.043457\nvn -0.0147 0.9471 -0.3207\nv -0.005185 0.100305 0.04416\nvn -0.0147 0.9471 -0.3207\nv 7.03719e-18 0.10057 0.044704\nvn -0.0147 0.9471 -0.3207\nv -0.022481 0.093685 0.090757\nvn -0.8162 0.577 0.0312\nv -0.021663 0.095344 0.081474\nvn -0.8162 0.577 0.0312\nv -0.022777 0.093296 0.090202\nvn -0.8162 0.577 0.0312\nv -0.019637 0.097175 0.079249\nvn -0.3006 0.9429 0.1432\nv -0.020073 0.095652 0.088354\nvn -0.3006 0.9429 0.1432\nv -0.01918 0.096576 0.084147\nvn -0.3006 0.9429 0.1432\nv -0.020594 0.096587 0.079726\nvn -0.4817 0.87 0.1049\nv -0.020792 0.095736 0.08587\nvn -0.4817 0.87 0.1049\nv -0.019637 0.097175 0.079249\nvn -0.4817 0.87 0.1049\nv -0.021865 0.094935 0.078901\nvn -0.8887 0.4584 -0.003\nv -0.022992 0.092815 0.088854\nvn -0.8887 0.4584 -0.003\nv -0.021663 0.095344 0.081474\nvn -0.8887 0.4584 -0.003\nv -0.021663 0.095344 0.081474\nvn -0.7221 0.69 0.0492\nv -0.021596 0.094998 0.087299\nvn -0.7221 0.69 0.0492\nv -0.020594 0.096587 0.079726\nvn -0.7221 0.69 0.0492\nv -0.021865 0.094935 0.078901\nvn -0.8642 0.503 -0.012\nv -0.021663 0.095344 0.081474\nvn -0.8642 0.503 -0.012\nv -0.020588 0.096962 0.071887\nvn -0.8642 0.503 -0.012\nv -0.020594 0.096587 0.079726\nvn -0.7354 0.6769 0.0318\nv -0.020588 0.096962 0.071887\nvn -0.7354 0.6769 0.0318\nv -0.021663 0.095344 0.081474\nvn -0.7354 0.6769 0.0318\nv -0.012874 0.092402 0.036587\nvn -0.175 0.4519 -0.8747\nv -0.014055 0.092492 0.036869\nvn -0.175 0.4519 -0.8747\nv -0.012653 0.093692 0.037208\nvn -0.175 0.4519 -0.8747\nv -0.010244 0.094074 0.037186\nvn -0.091 0.5233 -0.8473\nv -0.010332 0.093211 0.036662\nvn -0.091 0.5233 -0.8473\nv -0.012653 0.093692 0.037208\nvn -0.091 0.5233 -0.8473\nv -0.010332 0.093211 0.036662\nvn -0.116 0.4475 -0.8867\nv -0.012874 0.092402 0.036587\nvn -0.116 0.4475 -0.8867\nv -0.012653 0.093692 0.037208\nvn -0.116 0.4475 -0.8867\nv -0.010332 0.093211 0.036662\nvn -0.064 0.2904 -0.9548\nv -0.011324 0.09213 0.0364\nvn -0.064 0.2904 -0.9548\nv -0.012874 0.092402 0.036587\nvn -0.064 0.2904 -0.9548\nv -0.011324 0.09213 0.0364\nvn -0.0904 0.1599 -0.983\nv -0.013956 0.090931 0.036447\nvn -0.0904 0.1599 -0.983\nv -0.012874 0.092402 0.036587\nvn -0.0904 0.1599 -0.983\nv -0.01657 0.090888 0.038067\nvn -0.851 0.2522 -0.4606\nv -0.017086 0.090492 0.038804\nvn -0.851 0.2522 -0.4606\nv -0.016401 0.091971 0.038347\nvn -0.851 0.2522 -0.4606\nv -0.015911 0.081469 0.037215\nvn -0.4856 -0.02 -0.8739\nv -0.015663 0.087722 0.036934\nvn -0.4856 -0.02 -0.8739\nv -0.01505 0.082673 0.036709\nvn -0.4856 -0.02 -0.8739\nv -0.013956 0.090931 0.036447\nvn -0.3184 0.0649 -0.9457\nv -0.014712 0.088612 0.036542\nvn -0.3184 0.0649 -0.9457\nv -0.015325 0.089942 0.03684\nvn -0.3184 0.0649 -0.9457\nv -0.015055 0.091586 0.03696\nvn -0.4896 0.1432 -0.8601\nv -0.015325 0.089942 0.03684\nvn -0.4896 0.1432 -0.8601\nv -0.015894 0.090505 0.037258\nvn -0.4896 0.1432 -0.8601\nv -0.013956 0.090931 0.036447\nvn -0.3568 0.1261 -0.9256\nv -0.015325 0.089942 0.03684\nvn -0.3568 0.1261 -0.9256\nv -0.015055 0.091586 0.03696\nvn -0.3568 0.1261 -0.9256\nv -0.016399 0.087988 0.037475\nvn -0.7401 -0.0209 -0.6721\nv -0.016388 0.081938 0.037651\nvn -0.7401 -0.0209 -0.6721\nv -0.016925 0.085777 0.038122\nvn -0.7401 -0.0209 -0.6721\nv -0.017353 0.088368 0.038858\nvn -0.8972 -0.0349 -0.4403\nv -0.017357 0.08129 0.039426\nvn -0.8972 -0.0349 -0.4403\nv -0.01746 0.085539 0.039299\nvn -0.8972 -0.0349 -0.4403\nv -0.016401 0.091971 0.038347\nvn -0.6716 0.3997 -0.6239\nv -0.015417 0.092665 0.037733\nvn -0.6716 0.3997 -0.6239\nv -0.015871 0.091675 0.037588\nvn -0.6716 0.3997 -0.6239\nv -0.015871 0.091675 0.037588\nvn -0.5772 0.2326 -0.7828\nv -0.015055 0.091586 0.03696\nvn -0.5772 0.2326 -0.7828\nv -0.015894 0.090505 0.037258\nvn -0.5772 0.2326 -0.7828\nv -0.015417 0.092665 0.037733\nvn -0.4732 0.5305 -0.7033\nv -0.014653 0.093378 0.037757\nvn -0.4732 0.5305 -0.7033\nv -0.014669 0.092702 0.037258\nvn -0.4732 0.5305 -0.7033\nv -0.015417 0.092665 0.037733\nvn -0.5439 0.3606 -0.7577\nv -0.015055 0.091586 0.03696\nvn -0.5439 0.3606 -0.7577\nv -0.015871 0.091675 0.037588\nvn -0.5439 0.3606 -0.7577\nv -0.014669 0.092702 0.037258\nvn -0.5091 0.3821 -0.7713\nv -0.015055 0.091586 0.03696\nvn -0.5091 0.3821 -0.7713\nv -0.015417 0.092665 0.037733\nvn -0.5091 0.3821 -0.7713\nv -0.014055 0.092492 0.036869\nvn -0.3186 0.5271 -0.7878\nv -0.014669 0.092702 0.037258\nvn -0.3186 0.5271 -0.7878\nv -0.013696 0.09364 0.037492\nvn -0.3186 0.5271 -0.7878\nv -0.014055 0.092492 0.036869\nvn -0.4061 0.3643 -0.8381\nv -0.015055 0.091586 0.03696\nvn -0.4061 0.3643 -0.8381\nv -0.014669 0.092702 0.037258\nvn -0.4061 0.3643 -0.8381\nv -0.014055 0.092492 0.036869\nvn -0.2479 0.5207 -0.8169\nv -0.013696 0.09364 0.037492\nvn -0.2479 0.5207 -0.8169\nv -0.012653 0.093692 0.037208\nvn -0.2479 0.5207 -0.8169\nv -0.017353 0.088368 0.038858\nvn -0.8884 0.1003 -0.448\nv -0.017086 0.090492 0.038804\nvn -0.8884 0.1003 -0.448\nv -0.016864 0.089319 0.038102\nvn -0.8884 0.1003 -0.448\nv -0.014712 0.088612 0.036542\nvn -0.1357 0.0035 -0.9907\nv -0.013956 0.090931 0.036447\nvn -0.1357 0.0035 -0.9907\nv -0.014056 0.08162 0.036428\nvn -0.1357 0.0035 -0.9907\nv -0.013956 0.090931 0.036447\nvn -0.2943 0.2322 -0.9271\nv -0.015055 0.091586 0.03696\nvn -0.2943 0.2322 -0.9271\nv -0.014055 0.092492 0.036869\nvn -0.2943 0.2322 -0.9271\nv -0.014055 0.092492 0.036869\nvn -0.2082 0.2432 -0.9474\nv -0.012874 0.092402 0.036587\nvn -0.2082 0.2432 -0.9474\nv -0.013956 0.090931 0.036447\nvn -0.2082 0.2432 -0.9474\nv -0.016864 0.089319 0.038102\nvn -0.8456 0.1474 -0.5131\nv -0.017086 0.090492 0.038804\nvn -0.8456 0.1474 -0.5131\nv -0.01657 0.090888 0.038067\nvn -0.8456 0.1474 -0.5131\nv -0.015663 0.087722 0.036934\nvn -0.3982 0.0217 -0.917\nv -0.015325 0.089942 0.03684\nvn -0.3982 0.0217 -0.917\nv -0.014712 0.088612 0.036542\nvn -0.3982 0.0217 -0.917\nv -0.01657 0.090888 0.038067\nvn -0.7327 0.1228 -0.6694\nv -0.015894 0.090505 0.037258\nvn -0.7327 0.1228 -0.6694\nv -0.016864 0.089319 0.038102\nvn -0.7327 0.1228 -0.6694\nv -0.011324 0.09213 0.0364\nvn -0.0207 0.2536 -0.9671\nv -0.010332 0.093211 0.036662\nvn -0.0207 0.2536 -0.9671\nv 8.08022e-18 0.092243 0.036187\nvn -0.0207 0.2536 -0.9671\nv -0.01657 0.090888 0.038067\nvn -0.7009 0.2067 -0.6826\nv -0.015871 0.091675 0.037588\nvn -0.7009 0.2067 -0.6826\nv -0.015894 0.090505 0.037258\nvn -0.7009 0.2067 -0.6826\nv 8.04005e-18 0.093406 0.036515\nvn -0.0219 0.5202 -0.8537\nv -0.010332 0.093211 0.036662\nvn -0.0219 0.5202 -0.8537\nv -0.010244 0.094074 0.037186\nvn -0.0219 0.5202 -0.8537\nv -0.015871 0.091675 0.037588\nvn -0.735 0.2753 -0.6197\nv -0.01657 0.090888 0.038067\nvn -0.735 0.2753 -0.6197\nv -0.016401 0.091971 0.038347\nvn -0.735 0.2753 -0.6197\nv -0.014669 0.092702 0.037258\nvn -0.36 0.5598 -0.7464\nv -0.014653 0.093378 0.037757\nvn -0.36 0.5598 -0.7464\nv -0.013696 0.09364 0.037492\nvn -0.36 0.5598 -0.7464\nv -0.010332 0.093211 0.036662\nvn -0.0188 0.2718 -0.9622\nv 8.04005e-18 0.093406 0.036515\nvn -0.0188 0.2718 -0.9622\nv 8.08022e-18 0.092243 0.036187\nvn -0.0188 0.2718 -0.9622\nv -0.016399 0.087988 0.037475\nvn -0.7093 0.0819 -0.7001\nv -0.016864 0.089319 0.038102\nvn -0.7093 0.0819 -0.7001\nv -0.015894 0.090505 0.037258\nvn -0.7093 0.0819 -0.7001\nv -0.01699 0.08179 0.038447\nvn -0.931 -0.0287 -0.364\nv -0.017357 0.08129 0.039426\nvn -0.931 -0.0287 -0.364\nv -0.017353 0.088368 0.038858\nvn -0.931 -0.0287 -0.364\nv -0.017353 0.088368 0.038858\nvn -0.8954 -0.0217 -0.4448\nv -0.016925 0.085777 0.038122\nvn -0.8954 -0.0217 -0.4448\nv -0.01699 0.08179 0.038447\nvn -0.8954 -0.0217 -0.4448\nv -0.01699 0.08179 0.038447\nvn -0.7944 -0.0365 -0.6063\nv -0.016925 0.085777 0.038122\nvn -0.7944 -0.0365 -0.6063\nv -0.016388 0.081938 0.037651\nvn -0.7944 -0.0365 -0.6063\nv -0.015911 0.081469 0.037215\nvn -0.6863 -0.0224 -0.727\nv -0.016388 0.081938 0.037651\nvn -0.6863 -0.0224 -0.727\nv -0.016399 0.087988 0.037475\nvn -0.6863 -0.0224 -0.727\nv -0.016399 0.087988 0.037475\nvn -0.5951 -0.0125 -0.8036\nv -0.015663 0.087722 0.036934\nvn -0.5951 -0.0125 -0.8036\nv -0.015911 0.081469 0.037215\nvn -0.5951 -0.0125 -0.8036\nv -0.017353 0.088368 0.038858\nvn -0.8463 0.0114 -0.5326\nv -0.016864 0.089319 0.038102\nvn -0.8463 0.0114 -0.5326\nv -0.016925 0.085777 0.038122\nvn -0.8463 0.0114 -0.5326\nv -0.014056 0.08162 0.036428\nvn -0.2827 -0.0108 -0.9591\nv -0.01505 0.082673 0.036709\nvn -0.2827 -0.0108 -0.9591\nv -0.014712 0.088612 0.036542\nvn -0.2827 -0.0108 -0.9591\nv -0.016399 0.087988 0.037475\nvn -0.7928 0.01 -0.6094\nv -0.016925 0.085777 0.038122\nvn -0.7928 0.01 -0.6094\nv -0.016864 0.089319 0.038102\nvn -0.7928 0.01 -0.6094\nv -0.015663 0.087722 0.036934\nvn -0.3773 -0.0045 -0.9261\nv -0.014712 0.088612 0.036542\nvn -0.3773 -0.0045 -0.9261\nv -0.01505 0.082673 0.036709\nvn -0.3773 -0.0045 -0.9261\nv -0.015663 0.087722 0.036934\nvn -0.5806 0.0463 -0.8128\nv -0.016399 0.087988 0.037475\nvn -0.5806 0.0463 -0.8128\nv -0.015894 0.090505 0.037258\nvn -0.5806 0.0463 -0.8128\nv -0.015325 0.089942 0.03684\nvn -0.5584 0.0499 -0.828\nv -0.015663 0.087722 0.036934\nvn -0.5584 0.0499 -0.828\nv -0.015894 0.090505 0.037258\nvn -0.5584 0.0499 -0.828\nv -0.017315 -0.02 0.039285\nvn 0.6375 -0.0009 -0.7704\nv -0.017336 -0.08141 0.039336\nvn 0.6375 -0.0009 -0.7704\nv -0.017304 0.043313 0.039224\nvn 0.6375 -0.0009 -0.7704\nv -0.016963 -0.018127 0.03841\nvn -0.9276 -0.0001 -0.3736\nv -0.017336 -0.08141 0.039336\nvn -0.9277 0 -0.3734\nv -0.017315 -0.02 0.039285\nvn -0.9275 -0.0002 -0.3739\nv -0.017148 0.053555 0.0388\nvn -0.8809 -0.001 -0.4734\nv -0.01699 0.08179 0.038447\nvn -0.8809 -0.001 -0.4734\nv -0.016802 0.047281 0.03817\nvn -0.8809 -0.001 -0.4734\nv -0.015331 0.061962 0.036851\nvn -0.3754 -0.0009 -0.9269\nv -0.01505 0.082673 0.036709\nvn -0.3731 -0.0013 -0.9278\nv -0.014581 0.067124 0.036542\nvn -0.3792 -0.0003 -0.9253\nv -0.01651 -0.066272 0.037794\nvn -0.7869 0.0005 -0.617\nv -0.016963 -0.018127 0.03841\nvn -0.784 -0.0002 -0.6208\nv -0.01631 -0.03331 0.037565\nvn -0.7879 0.0004 -0.6158\nv -0.017304 0.043313 0.039224\nvn -0.9421 0.0005 -0.3352\nv -0.017357 0.08129 0.039426\nvn -0.9421 0.0005 -0.3352\nv -0.017148 0.053555 0.0388\nvn -0.9421 0.0005 -0.3352\nv -0.014675 0.043646 0.036577\nvn -0.3815 0.0001 -0.9244\nv -0.015503 0.042701 0.036947\nvn -0.4075 -0.0007 -0.9132\nv -0.015331 0.061962 0.036851\nvn -0.4072 -0.001 -0.9133\nv -0.014675 0.043646 0.036577\nvn -0.4078 -0.0001 -0.9131\nv -0.015853 -0.034746 0.037175\nvn -0.5044 0 -0.8635\nv -0.015128 -0.067015 0.036752\nvn -0.5059 0.0015 -0.8626\nv -0.015863 -0.068048 0.037181\nvn -0.5047 0.0004 -0.8633\nv -0.015503 0.042701 0.036947\nvn -0.5949 -0.0005 -0.8038\nv -0.016185 0.044497 0.037451\nvn -0.5941 0 -0.8044\nv -0.015911 0.081469 0.037215\nvn -0.5953 -0.0007 -0.8035\nv -0.014655 0.011121 0.036561\nvn -0.4008 0.0002 -0.9161\nv -0.01651 -0.066272 0.037794\nvn -0.7818 -0.0019 -0.6235\nv -0.016253 -0.080132 0.037513\nvn -0.7818 -0.0019 -0.6235\nv -0.016859 -0.075567 0.03826\nvn -0.7818 -0.0019 -0.6235\nv -0.017103 0.034845 0.038697\nvn -0.9092 0.0043 -0.4163\nv -0.017304 0.043313 0.039224\nvn -0.9092 0.0043 -0.4163\nv -0.016802 0.047281 0.03817\nvn -0.9092 0.0043 -0.4163\nv -0.016802 0.047281 0.03817\nvn -0.7568 0.0009 -0.6537\nv -0.016185 0.044497 0.037451\nvn -0.7588 -0.0001 -0.6514\nv -0.016661 0.029903 0.037968\nvn -0.7557 0.0015 -0.6549\nv -0.016802 0.047281 0.03817\nvn -0.7982 0.0005 -0.6023\nv -0.01699 0.08179 0.038447\nvn -0.7982 0.0005 -0.6023\nv -0.016388 0.081938 0.037651\nvn -0.7982 0.0005 -0.6023\nv -0.015324 -0.082066 0.036833\nvn -0.2897 0.008 -0.9571\nv -0.014138 -0.087286 0.03643\nvn -0.2897 0.008 -0.9571\nv -0.014949 -0.088676 0.036664\nvn -0.2897 0.008 -0.9571\nv -0.016661 0.029903 0.037968\nvn -0.7376 0.0001 -0.6753\nv -0.016185 0.044497 0.037451\nvn -0.7376 0.0001 -0.6753\nv -0.016297 -0.007437 0.037563\nvn -0.7376 0.0001 -0.6753\nv -0.014655 0.011121 0.036561\nvn -0.2112 -0.0001 -0.9774\nv -0.014581 0.067124 0.036542\nvn -0.2112 -0.0001 -0.9774\nv -0.014056 0.08162 0.036428\nvn -0.2112 -0.0001 -0.9774\nv -0.014581 0.067124 0.036542\nvn -0.3984 0.0002 -0.9172\nv -0.015789 -0.00754 0.037126\nvn -0.4704 -0.0004 -0.8825\nv -0.014955 -0.003743 0.036679\nvn -0.4745 0.0008 -0.8803\nv -0.015383 -0.024853 0.036877\nvn -0.4769 0.0015 -0.879\nv -0.017103 0.034845 0.038697\nvn -0.9352 -0.0002 -0.3541\nv -0.017315 -0.02 0.039285\nvn -0.9352 -0.0002 -0.3541\nv -0.017304 0.043313 0.039224\nvn -0.9352 -0.0002 -0.3541\nv -0.014583 -0.034303 0.036553\nvn -0.3831 -0.0009 -0.9237\nv -0.015383 -0.024853 0.036877\nvn -0.3831 -0.0009 -0.9237\nv -0.014955 -0.003743 0.036679\nvn -0.3831 -0.0009 -0.9237\nv -0.014655 0.011121 0.036561\nvn -0.2282 0.0001 -0.9736\nv -0.014056 0.08162 0.036428\nvn -0.2282 0.0001 -0.9736\nv -0.014138 -0.087286 0.03643\nvn -0.2282 0.0001 -0.9736\nv -0.016297 -0.007437 0.037563\nvn -0.652 0.0013 -0.7582\nv -0.015549 0.012329 0.036975\nvn -0.6519 0.0021 -0.7583\nv -0.015789 -0.00754 0.037126\nvn -0.652 0.0011 -0.7582\nv -0.015853 -0.034746 0.037175\nvn -0.6511 -0.0013 -0.7589\nv -0.01651 -0.066272 0.037794\nvn -0.6511 -0.0013 -0.7589\nv -0.01631 -0.03331 0.037565\nvn -0.6511 -0.0013 -0.7589\nv -0.016661 0.029903 0.037968\nvn -0.7811 -0.0008 -0.6245\nv -0.016297 -0.007437 0.037563\nvn -0.7862 0 -0.6179\nv -0.017103 0.034845 0.038697\nvn -0.9274 -0.0004 -0.3741\nv -0.01651 -0.066272 0.037794\nvn -0.6851 0.0015 -0.7285\nv -0.015853 -0.034746 0.037175\nvn -0.6872 0.0001 -0.7265\nv -0.015863 -0.068048 0.037181\nvn -0.6865 0.0005 -0.7271\nv -0.014955 -0.003743 0.036679\nvn -0.3498 -0.0004 -0.9368\nv -0.014655 0.011121 0.036561\nvn -0.3498 -0.0004 -0.9368\nv -0.014583 -0.034303 0.036553\nvn -0.3498 -0.0004 -0.9368\nv -0.016253 -0.080132 0.037513\nvn -0.749 0.003 -0.6626\nv -0.016703 -0.081514 0.038017\nvn -0.7529 0.0059 -0.6581\nv -0.016859 -0.075567 0.03826\nvn -0.7546 0.007 -0.6562\nv -0.016859 -0.075567 0.03826\nvn -0.8762 -0.0033 -0.482\nv -0.016703 -0.081514 0.038017\nvn -0.8762 -0.0033 -0.482\nv -0.017163 -0.080745 0.038847\nvn -0.8762 -0.0033 -0.482\nv -0.015324 -0.082066 0.036833\nvn -0.5064 0.0019 -0.8623\nv -0.014583 -0.034303 0.036553\nvn -0.3023 -0.0003 -0.9532\nv -0.014655 0.011121 0.036561\nvn -0.3023 -0.0003 -0.9532\nv -0.014138 -0.087286 0.03643\nvn -0.3023 -0.0003 -0.9532\nv -0.015128 -0.067015 0.036752\nvn -0.3229 -0.0008 -0.9464\nv -0.014138 -0.087286 0.03643\nvn -0.3191 -0.0006 -0.9477\nv -0.015324 -0.082066 0.036833\nvn -0.3251 -0.0009 -0.9457\nv -0.015383 -0.024853 0.036877\nvn -0.5842 -0.002 -0.8116\nv -0.01631 -0.03331 0.037565\nvn -0.5842 -0.002 -0.8116\nv -0.015789 -0.00754 0.037126\nvn -0.5842 -0.002 -0.8116\nv -0.015383 -0.024853 0.036877\nvn -0.6361 0.0069 -0.7716\nv -0.015853 -0.034746 0.037175\nvn -0.6361 0.0069 -0.7716\nv -0.01631 -0.03331 0.037565\nvn -0.6361 0.0069 -0.7716\nv -0.01505 0.082673 0.036709\nvn -0.27 0.0022 -0.9629\nv -0.014056 0.08162 0.036428\nvn -0.27 0.0022 -0.9629\nv -0.014581 0.067124 0.036542\nvn -0.27 0.0022 -0.9629\nv -0.01505 0.082673 0.036709\nvn -0.5076 0.001 -0.8616\nv -0.015331 0.061962 0.036851\nvn -0.5076 0.001 -0.8616\nv -0.015911 0.081469 0.037215\nvn -0.5076 0.001 -0.8616\nv -0.017148 0.053555 0.0388\nvn -0.9364 0.0009 -0.3509\nv -0.017357 0.08129 0.039426\nvn -0.9364 0.0009 -0.3509\nv -0.01699 0.08179 0.038447\nvn -0.9364 0.0009 -0.3509\nv -0.016388 0.081938 0.037651\nvn -0.7598 -0.0007 -0.6502\nv -0.016185 0.044497 0.037451\nvn -0.6744 0.0003 -0.7384\nv -0.016388 0.081938 0.037651\nvn -0.6744 0.0003 -0.7384\nv -0.015911 0.081469 0.037215\nvn -0.6744 0.0003 -0.7384\nv -0.015911 0.081469 0.037215\nvn -0.5223 0.0004 -0.8528\nv -0.015331 0.061962 0.036851\nvn -0.5223 0.0004 -0.8528\nv -0.015503 0.042701 0.036947\nvn -0.5223 0.0004 -0.8528\nv -0.016859 -0.075567 0.03826\nvn -0.8017 0.0001 -0.5977\nv -0.016963 -0.018127 0.03841\nvn -0.8017 0.0001 -0.5977\nv -0.01651 -0.066272 0.037794\nvn -0.8017 0.0001 -0.5977\nv -0.016253 -0.080132 0.037513\nvn -0.6844 0.002 -0.7291\nv -0.017163 -0.080745 0.038847\nvn -0.8868 -0.0004 -0.4621\nv -0.016963 -0.018127 0.03841\nvn -0.8868 -0.0004 -0.4621\nv -0.016859 -0.075567 0.03826\nvn -0.8868 -0.0004 -0.4621\nv -0.017163 -0.080745 0.038847\nvn -0.943 0.0007 -0.3328\nv -0.017336 -0.08141 0.039336\nvn -0.943 0.0007 -0.3328\nv -0.016963 -0.018127 0.03841\nvn -0.943 0.0007 -0.3328\nv -0.016125 -0.083674 0.037361\nvn -0.5498 -0.0004 -0.8353\nv -0.015863 -0.068048 0.037181\nvn -0.5498 -0.0004 -0.8353\nv -0.015324 -0.082066 0.036833\nvn -0.5498 -0.0004 -0.8353\nv -0.016125 -0.083674 0.037361\nvn -0.7188 0.0041 -0.6952\nv -0.016253 -0.080132 0.037513\nvn -0.7188 0.0041 -0.6952\nv -0.015863 -0.068048 0.037181\nvn -0.7188 0.0041 -0.6952\nv -0.016661 0.029903 0.037968\nvn -0.857 -0.0006 -0.5154\nv -0.016963 -0.018127 0.03841\nvn -0.8535 0.0006 -0.521\nv -0.017103 0.034845 0.038697\nvn -0.8549 0.0001 -0.5188\nv -0.016802 0.047281 0.03817\nvn -0.896 -0.0047 -0.4441\nv -0.017304 0.043313 0.039224\nvn -0.896 -0.0047 -0.4441\nv -0.017148 0.053555 0.0388\nvn -0.896 -0.0047 -0.4441\nv -0.016802 0.047281 0.03817\nvn -0.8583 -0.001 -0.5131\nv -0.01631 -0.03331 0.037565\nvn -0.6521 0.0003 -0.7581\nv -0.015503 0.042701 0.036947\nvn -0.4201 -0.0002 -0.9075\nv -0.014655 0.011121 0.036561\nvn -0.4198 0.0001 -0.9076\nv -0.015549 0.012329 0.036975\nvn -0.4188 0.001 -0.9081\nv -0.015549 0.012329 0.036975\nvn -0.5937 0.0002 -0.8047\nv -0.016185 0.044497 0.037451\nvn -0.6118 -0.0004 -0.791\nv -0.015549 0.012329 0.036975\nvn -0.6118 -0.0004 -0.791\nv -0.016297 -0.007437 0.037563\nvn -0.6118 -0.0004 -0.791\nv -0.014955 -0.003743 0.036679\nvn -0.4185 0.0012 -0.9082\nv -0.015549 0.012329 0.036975\nvn -0.468 -0.0011 -0.8837\nv -0.015128 -0.067015 0.036752\nvn -0.3691 0.0005 -0.9294\nv -0.015383 -0.024853 0.036877\nvn -0.3691 0.0005 -0.9294\nv -0.014583 -0.034303 0.036553\nvn -0.3691 0.0005 -0.9294\nv -0.015128 -0.067015 0.036752\nvn -0.5262 -0.0007 -0.8503\nv -0.015853 -0.034746 0.037175\nvn -0.5262 -0.0007 -0.8503\nv -0.015383 -0.024853 0.036877\nvn -0.5262 -0.0007 -0.8503\nv -0.014583 -0.034303 0.036553\nvn -0.3174 -0.0005 -0.9483\nv -0.017163 -0.080745 0.038847\nvn -0.8687 0.0152 -0.495\nv -0.016703 -0.081514 0.038017\nvn -0.8655 0.0136 -0.5008\nv -0.017318 -0.086124 0.038954\nvn -0.8676 0.0147 -0.497\nv -0.016125 -0.083674 0.037361\nvn -0.7474 0.0017 -0.6644\nv -0.016766 -0.086592 0.037992\nvn -0.8643 0.0131 -0.5027\nv -0.016766 -0.086592 0.037992\nvn -0.7296 0.0123 -0.6838\nv -0.016703 -0.081514 0.038017\nvn -0.7296 0.0123 -0.6838\nv -0.016125 -0.083674 0.037361\nvn -0.7296 0.0123 -0.6838\nv -0.017336 -0.08141 0.039336\nvn -0.9513 0.0214 -0.3076\nv -0.017163 -0.080745 0.038847\nvn -0.9513 0.0214 -0.3076\nv -0.017318 -0.086124 0.038954\nvn -0.9513 0.0214 -0.3076\nv -0.016125 -0.083674 0.037361\nvn -0.5712 0.0151 -0.8206\nv -0.015324 -0.082066 0.036833\nvn -0.5712 0.0151 -0.8206\nv -0.015753 -0.086839 0.037044\nvn -0.5712 0.0151 -0.8206\nv -0.016125 -0.083674 0.037361\nvn -0.6759 -0.0056 -0.737\nv -0.015753 -0.086839 0.037044\nvn -0.6759 -0.0056 -0.737\nv -0.016238 -0.088887 0.037504\nvn -0.6759 -0.0056 -0.737\nv -0.017318 -0.086124 0.038954\nvn -0.9079 -0.0439 -0.4169\nv -0.016908 -0.08884 0.038347\nvn -0.9079 -0.0439 -0.4169\nv -0.01732 -0.088409 0.039198\nvn -0.9079 -0.0439 -0.4169\nv -0.016766 -0.086592 0.037992\nvn -0.6903 -0.0049 -0.7235\nv -0.016125 -0.083674 0.037361\nvn -0.6903 -0.0049 -0.7235\nv -0.016238 -0.088887 0.037504\nvn -0.6903 -0.0049 -0.7235\nv -0.016238 -0.088887 0.037504\nvn -0.7831 -0.0482 -0.62\nv -0.016908 -0.08884 0.038347\nvn -0.7831 -0.0482 -0.62\nv -0.016766 -0.086592 0.037992\nvn -0.7831 -0.0482 -0.62\nv -0.014024 -0.090523 0.036463\nvn -0.1248 -0.1303 -0.9836\nv -0.012233 -0.091785 0.036403\nvn -0.1248 -0.1303 -0.9836\nv -0.013803 -0.091669 0.036587\nvn -0.1248 -0.1303 -0.9836\nv -0.012432 -0.09284 0.03672\nvn -0.1313 -0.2622 -0.956\nv -0.013803 -0.091669 0.036587\nvn -0.1313 -0.2622 -0.956\nv -0.012233 -0.091785 0.036403\nvn -0.1313 -0.2622 -0.956\nv -0.015081 -0.092269 0.037363\nvn -0.556 -0.2751 -0.7844\nv -0.015753 -0.091481 0.037563\nvn -0.556 -0.2751 -0.7844\nv -0.01485 -0.091385 0.03689\nvn -0.556 -0.2751 -0.7844\nv -0.012432 -0.09284 0.03672\nvn -0.2083 -0.3477 -0.9142\nv -0.014218 -0.09237 0.036948\nvn -0.2083 -0.3477 -0.9142\nv -0.013803 -0.091669 0.036587\nvn -0.2083 -0.3477 -0.9142\nv -0.016948 -0.090354 0.038779\nvn -0.9136 -0.0889 -0.3968\nv -0.01732 -0.088409 0.039198\nvn -0.9136 -0.0889 -0.3968\nv -0.016908 -0.08884 0.038347\nvn -0.9136 -0.0889 -0.3968\nv -0.015887 -0.092282 0.038103\nvn -0.739 -0.2873 -0.6094\nv -0.016455 -0.091492 0.03842\nvn -0.739 -0.2873 -0.6094\nv -0.015753 -0.091481 0.037563\nvn -0.739 -0.2873 -0.6094\nv -0.014218 -0.09237 0.036948\nvn -0.2313 -0.464 -0.8551\nv -0.012432 -0.09284 0.03672\nvn -0.2313 -0.464 -0.8551\nv -0.01339 -0.093555 0.037367\nvn -0.2313 -0.464 -0.8551\nv -0.014807 -0.093133 0.037732\nvn -0.4273 -0.4662 -0.7746\nv -0.015081 -0.092269 0.037363\nvn -0.4273 -0.4662 -0.7746\nv -0.014218 -0.09237 0.036948\nvn -0.4273 -0.4662 -0.7746\nv -0.009714 -0.092734 0.036495\nvn -0.0275 -0.4247 -0.9049\nv 8.03136e-18 -0.093558 0.036586\nvn -0.0275 -0.4247 -0.9049\nv -0.008705 -0.093863 0.036994\nvn -0.0275 -0.4247 -0.9049\nv 8.07973e-18 -0.092276 0.036191\nvn -0.0235 -0.1583 -0.9871\nv -0.009714 -0.092734 0.036495\nvn -0.0235 -0.1583 -0.9871\nv -0.012233 -0.091785 0.036403\nvn -0.0235 -0.1583 -0.9871\nv -0.008705 -0.093863 0.036994\nvn -0.0564 -0.4455 -0.8935\nv -0.012432 -0.09284 0.03672\nvn -0.0564 -0.4455 -0.8935\nv -0.009714 -0.092734 0.036495\nvn -0.0564 -0.4455 -0.8935\nv 8.03136e-18 -0.093558 0.036586\nvn -0.0161 -0.295 -0.9554\nv -0.009714 -0.092734 0.036495\nvn -0.0161 -0.295 -0.9554\nv 8.07973e-18 -0.092276 0.036191\nvn -0.0161 -0.295 -0.9554\nv -0.015753 -0.086839 0.037044\nvn -0.4296 -0.0013 -0.903\nv -0.015324 -0.082066 0.036833\nvn -0.4296 -0.0013 -0.903\nv -0.014949 -0.088676 0.036664\nvn -0.4296 -0.0013 -0.903\nv -0.014024 -0.090523 0.036463\nvn -0.2474 -0.0186 -0.9687\nv -0.014949 -0.088676 0.036664\nvn -0.2474 -0.0186 -0.9687\nv -0.014138 -0.087286 0.03643\nvn -0.2474 -0.0186 -0.9687\nv -0.013803 -0.091669 0.036587\nvn -0.3144 -0.1616 -0.9354\nv -0.01485 -0.091385 0.03689\nvn -0.3144 -0.1616 -0.9354\nv -0.014024 -0.090523 0.036463\nvn -0.3144 -0.1616 -0.9354\nv -0.014218 -0.09237 0.036948\nvn -0.334 -0.2679 -0.9037\nv -0.01485 -0.091385 0.03689\nvn -0.334 -0.2679 -0.9037\nv -0.013803 -0.091669 0.036587\nvn -0.334 -0.2679 -0.9037\nv -0.015753 -0.091481 0.037563\nvn -0.5714 -0.2038 -0.795\nv -0.01558 -0.090158 0.0371\nvn -0.5714 -0.2038 -0.795\nv -0.01485 -0.091385 0.03689\nvn -0.5714 -0.2038 -0.795\nv -0.015081 -0.092269 0.037363\nvn -0.4402 -0.332 -0.8343\nv -0.01485 -0.091385 0.03689\nvn -0.4402 -0.332 -0.8343\nv -0.014218 -0.09237 0.036948\nvn -0.4402 -0.332 -0.8343\nv -0.015081 -0.092269 0.037363\nvn -0.6277 -0.3602 -0.6901\nv -0.015887 -0.092282 0.038103\nvn -0.6277 -0.3602 -0.6901\nv -0.015753 -0.091481 0.037563\nvn -0.6277 -0.3602 -0.6901\nv -0.015887 -0.092282 0.038103\nvn -0.5935 -0.4679 -0.6548\nv -0.015081 -0.092269 0.037363\nvn -0.5935 -0.4679 -0.6548\nv -0.014807 -0.093133 0.037732\nvn -0.5935 -0.4679 -0.6548\nv -0.016766 -0.086592 0.037992\nvn -0.8716 -0.0221 -0.4898\nv -0.016908 -0.08884 0.038347\nvn -0.8716 -0.0221 -0.4898\nv -0.017318 -0.086124 0.038954\nvn -0.8716 -0.0221 -0.4898\nv -0.01558 -0.090158 0.0371\nvn -0.5014 -0.0407 -0.8643\nv -0.015753 -0.086839 0.037044\nvn -0.5014 -0.0407 -0.8643\nv -0.014949 -0.088676 0.036664\nvn -0.5014 -0.0407 -0.8643\nv -0.016238 -0.088887 0.037504\nvn -0.5835 -0.0441 -0.8109\nv -0.015753 -0.086839 0.037044\nvn -0.5835 -0.0441 -0.8109\nv -0.01558 -0.090158 0.0371\nvn -0.5835 -0.0441 -0.8109\nv -0.014949 -0.088676 0.036664\nvn -0.4131 -0.0906 -0.9062\nv -0.01485 -0.091385 0.03689\nvn -0.4131 -0.0906 -0.9062\nv -0.01558 -0.090158 0.0371\nvn -0.4131 -0.0906 -0.9062\nv -0.016429 -0.090078 0.037881\nvn -0.7827 -0.0703 -0.6185\nv -0.016908 -0.08884 0.038347\nvn -0.7827 -0.0703 -0.6185\nv -0.016238 -0.088887 0.037504\nvn -0.7827 -0.0703 -0.6185\nv -0.014024 -0.090523 0.036463\nvn -0.3806 -0.0906 -0.9203\nv -0.01485 -0.091385 0.03689\nvn -0.3806 -0.0906 -0.9203\nv -0.014949 -0.088676 0.036664\nvn -0.3806 -0.0906 -0.9203\nv -0.016429 -0.090078 0.037881\nvn -0.841 -0.1277 -0.5258\nv -0.016948 -0.090354 0.038779\nvn -0.841 -0.1277 -0.5258\nv -0.016908 -0.08884 0.038347\nvn -0.841 -0.1277 -0.5258\nv -0.016429 -0.090078 0.037881\nvn -0.6784 -0.1206 -0.7247\nv -0.016238 -0.088887 0.037504\nvn -0.6784 -0.1206 -0.7247\nv -0.01558 -0.090158 0.0371\nvn -0.6784 -0.1206 -0.7247\nv -0.016429 -0.090078 0.037881\nvn -0.8239 -0.1884 -0.5345\nv -0.016455 -0.091492 0.03842\nvn -0.8239 -0.1884 -0.5345\nv -0.016948 -0.090354 0.038779\nvn -0.8239 -0.1884 -0.5345\nv -0.015753 -0.091481 0.037563\nvn -0.6764 -0.1631 -0.7183\nv -0.016429 -0.090078 0.037881\nvn -0.6764 -0.1631 -0.7183\nv -0.01558 -0.090158 0.0371\nvn -0.6764 -0.1631 -0.7183\nv -0.015753 -0.091481 0.037563\nvn -0.7527 -0.2222 -0.6198\nv -0.016455 -0.091492 0.03842\nvn -0.7527 -0.2222 -0.6198\nv -0.016429 -0.090078 0.037881\nvn -0.7527 -0.2222 -0.6198\nv -0.01339 -0.093555 0.037367\nvn -0.3552 -0.5224 -0.7752\nv -0.014807 -0.093133 0.037732\nvn -0.3552 -0.5224 -0.7752\nv -0.014218 -0.09237 0.036948\nvn -0.3552 -0.5224 -0.7752\nv -0.012432 -0.09284 0.03672\nvn -0.0684 -0.2749 -0.959\nv -0.012233 -0.091785 0.036403\nvn -0.0684 -0.2749 -0.959\nv -0.009714 -0.092734 0.036495\nvn -0.0684 -0.2749 -0.959\nv -0.011378 -0.094067 0.037367\nvn -0.1409 -0.5539 -0.8206\nv -0.01339 -0.093555 0.037367\nvn -0.1409 -0.5539 -0.8206\nv -0.012432 -0.09284 0.03672\nvn -0.1409 -0.5539 -0.8206\nv -0.011378 -0.094067 0.037367\nvn -0.0792 -0.5174 -0.852\nv -0.012432 -0.09284 0.03672\nvn -0.0792 -0.5174 -0.852\nv -0.008705 -0.093863 0.036994\nvn -0.0792 -0.5174 -0.852\nv -0.016896 -0.027176 0.108339\nvn -0.8951 -0.0013 0.4458\nv -0.017151 -0.073644 0.10769\nvn -0.8951 -0.0013 0.4458\nv -0.01665 -0.073747 0.108696\nvn -0.8951 -0.0013 0.4458\nv -0.016896 -0.027176 0.108339\nvn -0.9305 0 0.3663\nv -0.017253 -0.026954 0.107432\nvn -0.9305 0 0.3663\nv -0.017151 -0.073644 0.10769\nvn -0.9305 0 0.3663\nv -0.016537 -0.027396 0.108876\nvn -0.8311 -0.0001 0.5562\nv -0.016896 -0.027176 0.108339\nvn -0.8311 -0.0001 0.5562\nv -0.01665 -0.073747 0.108696\nvn -0.8311 -0.0001 0.5562\nv -0.016 -0.028388 0.109468\nvn -0.7274 -0.0013 0.6863\nv -0.01665 -0.073747 0.108696\nvn -0.7274 -0.0013 0.6863\nv -0.015784 -0.073138 0.109615\nvn -0.7274 -0.0013 0.6863\nv -0.016 -0.028388 0.109468\nvn -0.7417 -0.0008 0.6707\nv -0.016537 -0.027396 0.108876\nvn -0.7417 -0.0008 0.6707\nv -0.01665 -0.073747 0.108696\nvn -0.7417 -0.0008 0.6707\nv -0.0149 -0.029725 0.110148\nvn -0.5257 0.0003 0.8506\nv -0.016 -0.028388 0.109468\nvn -0.5257 0.0003 0.8506\nv -0.015784 -0.073138 0.109615\nvn -0.5257 0.0003 0.8506\nv -0.0149 -0.029725 0.110148\nvn -0.4912 -0.0007 0.871\nv -0.015784 -0.073138 0.109615\nvn -0.4912 -0.0007 0.871\nv -0.014939 -0.073611 0.110091\nvn -0.4912 -0.0007 0.871\nv -0.0149 -0.029725 0.110148\nvn -0.2861 -0.001 0.9582\nv -0.014939 -0.073611 0.110091\nvn -0.2861 -0.001 0.9582\nv -0.014007 -0.073637 0.110369\nvn -0.2861 -0.001 0.9582\nv -0.013792 -0.030528 0.110418\nvn -0.2361 0.0001 0.9717\nv -0.0149 -0.029725 0.110148\nvn -0.2361 0.0001 0.9717\nv -0.014007 -0.073637 0.110369\nvn -0.2361 0.0001 0.9717\nv -0.014975 -0.076932 0.109832\nvn -0.3618 -0.1381 0.922\nv -0.015143 -0.079475 0.109386\nvn -0.3618 -0.1381 0.922\nv -0.014235 -0.079744 0.109702\nvn -0.3618 -0.1381 0.922\nv -0.014975 -0.076932 0.109832\nvn -0.3082 -0.1249 0.9431\nv -0.014235 -0.079744 0.109702\nvn -0.3082 -0.1249 0.9431\nv -0.01397 -0.076459 0.110223\nvn -0.3082 -0.1249 0.9431\nv -0.016707 -0.07841 0.107993\nvn -0.8275 -0.1467 0.5419\nv -0.016654 -0.081967 0.107111\nvn -0.8275 -0.1467 0.5419\nv -0.01601 -0.080086 0.108603\nvn -0.8275 -0.1467 0.5419\nv -0.015765 -0.076768 0.109366\nvn -0.5227 -0.114 0.8449\nv -0.015143 -0.079475 0.109386\nvn -0.5227 -0.114 0.8449\nv -0.014975 -0.076932 0.109832\nvn -0.5227 -0.114 0.8449\nv -0.01708 -0.078176 0.107155\nvn -0.9327 -0.109 0.3436\nv -0.016977 -0.082382 0.106101\nvn -0.9327 -0.109 0.3436\nv -0.016654 -0.081967 0.107111\nvn -0.9327 -0.109 0.3436\nv -0.01708 -0.078176 0.107155\nvn -0.9188 -0.1079 0.3798\nv -0.016654 -0.081967 0.107111\nvn -0.9188 -0.1079 0.3798\nv -0.016707 -0.07841 0.107993\nvn -0.9188 -0.1079 0.3798\nv -0.015765 -0.076768 0.109366\nvn -0.61 -0.1345 0.7809\nv -0.01601 -0.080086 0.108603\nvn -0.61 -0.1345 0.7809\nv -0.015143 -0.079475 0.109386\nvn -0.61 -0.1345 0.7809\nv -0.016368 -0.076861 0.108738\nvn -0.7093 -0.1078 0.6966\nv -0.01601 -0.080086 0.108603\nvn -0.7093 -0.1078 0.6966\nv -0.015765 -0.076768 0.109366\nvn -0.7093 -0.1078 0.6966\nv -0.016707 -0.07841 0.107993\nvn -0.7945 -0.113 0.5966\nv -0.01601 -0.080086 0.108603\nvn -0.7945 -0.113 0.5966\nv -0.016368 -0.076861 0.108738\nvn -0.7945 -0.113 0.5966\nv -0.014939 -0.073611 0.110091\nvn -0.287 -0.0532 0.9564\nv -0.01397 -0.076459 0.110223\nvn -0.287 -0.0532 0.9564\nv -0.014007 -0.073637 0.110369\nvn -0.287 -0.0532 0.9564\nv -0.014939 -0.073611 0.110091\nvn -0.3331 -0.0696 0.9403\nv -0.014975 -0.076932 0.109832\nvn -0.3331 -0.0696 0.9403\nv -0.01397 -0.076459 0.110223\nvn -0.3331 -0.0696 0.9403\nv -0.015784 -0.073138 0.109615\nvn -0.5167 -0.0612 0.854\nv -0.014975 -0.076932 0.109832\nvn -0.516 -0.061 0.8544\nv -0.014939 -0.073611 0.110091\nvn -0.5157 -0.0609 0.8546\nv -0.015765 -0.076768 0.109366\nvn -0.517 -0.0613 0.8538\nv -0.01665 -0.073747 0.108696\nvn -0.8456 -0.0695 0.5293\nv -0.016707 -0.07841 0.107993\nvn -0.8456 -0.0695 0.5293\nv -0.016368 -0.076861 0.108738\nvn -0.8456 -0.0695 0.5293\nv -0.01665 -0.073747 0.108696\nvn -0.7146 -0.0547 0.6974\nv -0.015765 -0.076768 0.109366\nvn -0.7108 -0.0526 0.7014\nv -0.015784 -0.073138 0.109615\nvn -0.7094 -0.0519 0.7029\nv -0.016368 -0.076861 0.108738\nvn -0.7163 -0.0555 0.6956\nv -0.017151 -0.073644 0.10769\nvn -0.896 -0.0555 0.4407\nv -0.016707 -0.07841 0.107993\nvn -0.896 -0.0555 0.4407\nv -0.01665 -0.073747 0.108696\nvn -0.896 -0.0555 0.4407\nv -0.017151 -0.073644 0.10769\nvn -0.9177 -0.0606 0.3925\nv -0.01708 -0.078176 0.107155\nvn -0.9177 -0.0606 0.3925\nv -0.016707 -0.07841 0.107993\nvn -0.9177 -0.0606 0.3925\nv -0.01496 -0.094289 0.093771\nvn -0.2814 -0.934 0.2201\nv -0.014059 -0.095974 0.087768\nvn -0.2814 -0.934 0.2201\nv -0.014029 -0.094421 0.094401\nvn -0.2814 -0.934 0.2201\nv -0.01496 -0.094289 0.093771\nvn -0.3349 -0.919 0.2078\nv -0.015386 -0.095308 0.088576\nvn -0.3349 -0.919 0.2078\nv -0.014059 -0.095974 0.087768\nvn -0.3349 -0.919 0.2078\nv -0.015396 -0.094352 0.092563\nvn -0.447 -0.8702 0.2074\nv -0.015386 -0.095308 0.088576\nvn -0.447 -0.8702 0.2074\nv -0.01496 -0.094289 0.093771\nvn -0.447 -0.8702 0.2074\nv -0.01632 -0.094466 0.089055\nvn -0.6044 -0.7751 0.1842\nv -0.015386 -0.095308 0.088576\nvn -0.6044 -0.7751 0.1842\nv -0.015396 -0.094352 0.092563\nvn -0.6044 -0.7751 0.1842\nv -0.015938 -0.093452 0.094345\nvn -0.6287 -0.7541 0.1899\nv -0.01632 -0.094466 0.089055\nvn -0.6287 -0.7541 0.1899\nv -0.015396 -0.094352 0.092563\nvn -0.6287 -0.7541 0.1899\nv -0.01672 -0.09273 0.093563\nvn -0.8481 -0.5154 0.1231\nv -0.017171 -0.093258 0.08825\nvn -0.8481 -0.5154 0.1231\nv -0.01632 -0.094466 0.089055\nvn -0.8481 -0.5154 0.1231\nv -0.01672 -0.09273 0.093563\nvn -0.7566 -0.6299 0.1754\nv -0.01632 -0.094466 0.089055\nvn -0.7566 -0.6299 0.1754\nv -0.015938 -0.093452 0.094345\nvn -0.7566 -0.6299 0.1754\nv -0.017096 -0.091758 0.093886\nvn -0.9127 -0.3917 0.1163\nv -0.017171 -0.093258 0.08825\nvn -0.9127 -0.3917 0.1163\nv -0.01672 -0.09273 0.093563\nvn -0.9127 -0.3917 0.1163\nv -0.014595 -0.089039 0.104648\nvn -0.2293 -0.7136 0.662\nv -0.013828 -0.089984 0.103895\nvn -0.2293 -0.7136 0.662\nv -0.013524 -0.088858 0.105214\nvn -0.2293 -0.7136 0.662\nv -0.014595 -0.089039 0.104648\nvn -0.2534 -0.673 0.6949\nv -0.013524 -0.088858 0.105214\nvn -0.2534 -0.673 0.6949\nv -0.013838 -0.087584 0.106334\nvn -0.2534 -0.673 0.6949\nv -0.01499 -0.087139 0.106152\nvn -0.3993 -0.6184 0.6769\nv -0.015187 -0.088003 0.105247\nvn -0.3993 -0.6184 0.6769\nv -0.014595 -0.089039 0.104648\nvn -0.3993 -0.6184 0.6769\nv -0.014903 -0.093226 0.097082\nvn -0.3061 -0.9027 0.3025\nv -0.014029 -0.094421 0.094401\nvn -0.3061 -0.9027 0.3025\nv -0.01392 -0.093389 0.09759\nvn -0.3061 -0.9027 0.3025\nv -0.014903 -0.093226 0.097082\nvn -0.3263 -0.8984 0.294\nv -0.01496 -0.094289 0.093771\nvn -0.3263 -0.8984 0.294\nv -0.014029 -0.094421 0.094401\nvn -0.3263 -0.8984 0.294\nv -0.015691 -0.092811 0.09685\nvn -0.5097 -0.8166 0.2709\nv -0.01496 -0.094289 0.093771\nvn -0.5097 -0.8166 0.2709\nv -0.014903 -0.093226 0.097082\nvn -0.5097 -0.8166 0.2709\nv -0.014531 -0.085924 0.107252\nvn -0.4904 -0.476 0.7301\nv -0.015326 -0.085161 0.107215\nvn -0.4904 -0.476 0.7301\nv -0.01499 -0.087139 0.106152\nvn -0.4904 -0.476 0.7301\nv -0.013606 -0.085754 0.107643\nvn -0.2793 -0.4404 0.8533\nv -0.01375 -0.083958 0.108522\nvn -0.279 -0.4402 0.8534\nv -0.014875 -0.08401 0.108127\nvn -0.2791 -0.4403 0.8534\nv -0.014531 -0.085924 0.107252\nvn -0.2794 -0.4405 0.8532\nv -0.015691 -0.092811 0.09685\nvn -0.5358 -0.8038 0.2585\nv -0.015938 -0.093452 0.094345\nvn -0.5358 -0.8038 0.2585\nv -0.01496 -0.094289 0.093771\nvn -0.5358 -0.8038 0.2585\nv -0.014875 -0.08401 0.108127\nvn -0.4548 -0.4367 0.7762\nv -0.015326 -0.085161 0.107215\nvn -0.4548 -0.4367 0.7762\nv -0.014531 -0.085924 0.107252\nvn -0.4548 -0.4367 0.7762\nv -0.015326 -0.085161 0.107215\nvn -0.569 -0.4624 0.68\nv -0.015837 -0.085951 0.10625\nvn -0.569 -0.4624 0.68\nv -0.01499 -0.087139 0.106152\nvn -0.569 -0.4624 0.68\nv -0.015837 -0.085951 0.10625\nvn -0.6962 -0.3427 0.6307\nv -0.015767 -0.083193 0.107827\nvn -0.6962 -0.3427 0.6307\nv -0.01632 -0.085108 0.106175\nvn -0.6962 -0.3427 0.6307\nv -0.015837 -0.085951 0.10625\nvn -0.6764 -0.3524 0.6468\nv -0.015326 -0.085161 0.107215\nvn -0.6764 -0.3524 0.6468\nv -0.015767 -0.083193 0.107827\nvn -0.6764 -0.3524 0.6468\nv -0.014875 -0.08401 0.108127\nvn -0.2938 -0.3608 0.8852\nv -0.01375 -0.083958 0.108522\nvn -0.2938 -0.3608 0.8852\nv -0.013915 -0.082476 0.109071\nvn -0.2938 -0.3608 0.8852\nv -0.014875 -0.08401 0.108127\nvn -0.5753 -0.3574 0.7357\nv -0.015767 -0.083193 0.107827\nvn -0.5753 -0.3574 0.7357\nv -0.015326 -0.085161 0.107215\nvn -0.5753 -0.3574 0.7357\nv -0.016068 -0.091963 0.09808\nvn -0.7095 -0.6627 0.2396\nv -0.015938 -0.093452 0.094345\nvn -0.7095 -0.6627 0.2396\nv -0.015691 -0.092811 0.09685\nvn -0.7095 -0.6627 0.2396\nv -0.016688 -0.084759 0.105613\nvn -0.9511 -0.1688 0.2585\nv -0.016977 -0.082382 0.106101\nvn -0.9511 -0.1688 0.2585\nv -0.016922 -0.086447 0.103651\nvn -0.9511 -0.1688 0.2585\nv -0.014875 -0.08401 0.108127\nvn -0.3581 -0.3164 0.8784\nv -0.013915 -0.082476 0.109071\nvn -0.3581 -0.3164 0.8784\nv -0.014892 -0.081632 0.108977\nvn -0.3581 -0.3164 0.8784\nv -0.016068 -0.091963 0.09808\nvn -0.7692 -0.6023 0.2134\nv -0.01672 -0.09273 0.093563\nvn -0.7692 -0.6023 0.2134\nv -0.015938 -0.093452 0.094345\nvn -0.7692 -0.6023 0.2134\nv -0.014531 -0.092413 0.099485\nvn -0.3257 -0.8791 0.348\nv -0.014903 -0.093226 0.097082\nvn -0.3257 -0.8791 0.348\nv -0.01392 -0.093389 0.09759\nvn -0.3257 -0.8791 0.348\nv -0.016627 -0.091143 0.098131\nvn -0.8016 -0.5595 0.2108\nv -0.01672 -0.09273 0.093563\nvn -0.8016 -0.5595 0.2108\nv -0.016068 -0.091963 0.09808\nvn -0.8016 -0.5595 0.2108\nv -0.014531 -0.092413 0.099485\nvn -0.2187 -0.8943 0.3904\nv -0.01392 -0.093389 0.09759\nvn -0.2187 -0.8943 0.3904\nv -0.013591 -0.092562 0.099669\nvn -0.2187 -0.8943 0.3904\nv -0.015247 -0.092262 0.098966\nvn -0.4277 -0.834 0.3485\nv -0.014903 -0.093226 0.097082\nvn -0.4277 -0.834 0.3485\nv -0.014531 -0.092413 0.099485\nvn -0.4277 -0.834 0.3485\nv -0.015247 -0.092262 0.098966\nvn -0.5131 -0.7985 0.3148\nv -0.015691 -0.092811 0.09685\nvn -0.5131 -0.7985 0.3148\nv -0.014903 -0.093226 0.097082\nvn -0.5131 -0.7985 0.3148\nv -0.017096 -0.091758 0.093886\nvn -0.9021 -0.4015 0.158\nv -0.01672 -0.09273 0.093563\nvn -0.9021 -0.4015 0.158\nv -0.016627 -0.091143 0.098131\nvn -0.9021 -0.4015 0.158\nv -0.016068 -0.091963 0.09808\nvn -0.6074 -0.7286 0.3164\nv -0.015691 -0.092811 0.09685\nvn -0.6074 -0.7286 0.3164\nv -0.015247 -0.092262 0.098966\nvn -0.6074 -0.7286 0.3164\nv -0.014531 -0.092413 0.099485\nvn -0.2251 -0.8665 0.4456\nv -0.013591 -0.092562 0.099669\nvn -0.2251 -0.8665 0.4456\nv -0.013747 -0.091297 0.10205\nvn -0.2251 -0.8665 0.4456\nv -0.014855 -0.091506 0.100971\nvn -0.283 -0.8449 0.4539\nv -0.014531 -0.092413 0.099485\nvn -0.283 -0.8449 0.4539\nv -0.013747 -0.091297 0.10205\nvn -0.283 -0.8449 0.4539\nv -0.014855 -0.091506 0.100971\nvn -0.3213 -0.8123 0.4868\nv -0.013747 -0.091297 0.10205\nvn -0.3213 -0.8123 0.4868\nv -0.014757 -0.090512 0.102693\nvn -0.3213 -0.8123 0.4868\nv -0.017021 -0.090129 0.098159\nvn -0.9194 -0.3619 0.1542\nv -0.017096 -0.091758 0.093886\nvn -0.9194 -0.3619 0.1542\nv -0.016627 -0.091143 0.098131\nvn -0.9194 -0.3619 0.1542\nv -0.013747 -0.091297 0.10205\nvn -0.2639 -0.7914 0.5515\nv -0.013828 -0.089984 0.103895\nvn -0.2639 -0.7914 0.5515\nv -0.014757 -0.090512 0.102693\nvn -0.2639 -0.7914 0.5515\nv -0.015619 -0.090691 0.101443\nvn -0.5502 -0.74 0.3869\nv -0.015247 -0.092262 0.098966\nvn -0.5502 -0.74 0.3869\nv -0.014855 -0.091506 0.100971\nvn -0.5502 -0.74 0.3869\nv -0.014595 -0.089039 0.104648\nvn -0.3363 -0.7386 0.5843\nv -0.014757 -0.090512 0.102693\nvn -0.3363 -0.7386 0.5843\nv -0.013828 -0.089984 0.103895\nvn -0.3363 -0.7386 0.5843\nv -0.015619 -0.090691 0.101443\nvn -0.6287 -0.6959 0.3471\nv -0.016068 -0.091963 0.09808\nvn -0.6287 -0.6959 0.3471\nv -0.015247 -0.092262 0.098966\nvn -0.6287 -0.6959 0.3471\nv -0.016137 -0.09032 0.101094\nvn -0.6876 -0.644 0.3354\nv -0.016068 -0.091963 0.09808\nvn -0.6876 -0.644 0.3354\nv -0.015619 -0.090691 0.101443\nvn -0.6876 -0.644 0.3354\nv -0.014875 -0.08401 0.108127\nvn -0.5322 -0.2882 0.796\nv -0.014892 -0.081632 0.108977\nvn -0.5322 -0.2882 0.796\nv -0.015767 -0.083193 0.107827\nvn -0.5322 -0.2882 0.796\nv -0.016627 -0.091143 0.098131\nvn -0.7842 -0.5521 0.2831\nv -0.016068 -0.091963 0.09808\nvn -0.7842 -0.5521 0.2831\nv -0.016137 -0.09032 0.101094\nvn -0.7842 -0.5521 0.2831\nv -0.015619 -0.090691 0.101443\nvn -0.5044 -0.7352 0.4528\nv -0.014855 -0.091506 0.100971\nvn -0.5044 -0.7352 0.4528\nv -0.014757 -0.090512 0.102693\nvn -0.5044 -0.7352 0.4528\nv -0.014059 -0.095974 0.087768\nvn -0.3452 -0.9189 0.1908\nv -0.015386 -0.095308 0.088576\nvn -0.3452 -0.9189 0.1908\nv -0.014996 -0.096385 0.084097\nvn -0.3452 -0.9189 0.1908\nv -0.016599 -0.089286 0.101478\nvn -0.8375 -0.4749 0.2704\nv -0.016627 -0.091143 0.098131\nvn -0.8375 -0.4749 0.2704\nv -0.016137 -0.09032 0.101094\nvn -0.8375 -0.4749 0.2704\nv -0.016957 -0.088455 0.101201\nvn -0.9227 -0.3337 0.1928\nv -0.016627 -0.091143 0.098131\nvn -0.9227 -0.3337 0.1928\nv -0.016599 -0.089286 0.101478\nvn -0.9227 -0.3337 0.1928\nv -0.016957 -0.088455 0.101201\nvn -0.9078 -0.3591 0.2166\nv -0.017021 -0.090129 0.098159\nvn -0.9078 -0.3591 0.2166\nv -0.016627 -0.091143 0.098131\nvn -0.9078 -0.3591 0.2166\nv -0.015542 -0.088951 0.103906\nvn -0.5681 -0.6637 0.4866\nv -0.015619 -0.090691 0.101443\nvn -0.5681 -0.6637 0.4866\nv -0.014757 -0.090512 0.102693\nvn -0.5681 -0.6637 0.4866\nv -0.016115 -0.088587 0.103505\nvn -0.68 -0.5886 0.4371\nv -0.015619 -0.090691 0.101443\nvn -0.68 -0.5886 0.4371\nv -0.015542 -0.088951 0.103906\nvn -0.68 -0.5886 0.4371\nv -0.016115 -0.088587 0.103505\nvn -0.6986 -0.578 0.4218\nv -0.016137 -0.09032 0.101094\nvn -0.6986 -0.578 0.4218\nv -0.015619 -0.090691 0.101443\nvn -0.6986 -0.578 0.4218\nv -0.015542 -0.088951 0.103906\nvn -0.4934 -0.6746 0.549\nv -0.014757 -0.090512 0.102693\nvn -0.4934 -0.6746 0.549\nv -0.014595 -0.089039 0.104648\nvn -0.4934 -0.6746 0.549\nv -0.015542 -0.088951 0.103906\nvn -0.5149 -0.6295 0.5819\nv -0.014595 -0.089039 0.104648\nvn -0.5149 -0.6295 0.5819\nv -0.015187 -0.088003 0.105247\nvn -0.5149 -0.6295 0.5819\nv -0.016599 -0.089286 0.101478\nvn -0.7953 -0.4888 0.3586\nv -0.016137 -0.09032 0.101094\nvn -0.7953 -0.4888 0.3586\nv -0.016115 -0.088587 0.103505\nvn -0.7953 -0.4888 0.3586\nv -0.014531 -0.092413 0.099485\nvn -0.4517 -0.802 0.3909\nv -0.014855 -0.091506 0.100971\nvn -0.4517 -0.802 0.3909\nv -0.015247 -0.092262 0.098966\nvn -0.4517 -0.802 0.3909\nv -0.01499 -0.087139 0.106152\nvn -0.3517 -0.6246 0.6973\nv -0.014595 -0.089039 0.104648\nvn -0.3517 -0.6246 0.6973\nv -0.013838 -0.087584 0.106334\nvn -0.3517 -0.6246 0.6973\nv -0.016609 -0.087131 0.104\nvn -0.8482 -0.4044 0.3421\nv -0.016599 -0.089286 0.101478\nvn -0.8482 -0.4044 0.3421\nv -0.016115 -0.088587 0.103505\nvn -0.8482 -0.4044 0.3421\nv -0.016028 -0.087468 0.104798\nvn -0.6367 -0.5398 0.5507\nv -0.015542 -0.088951 0.103906\nvn -0.6367 -0.5398 0.5507\nv -0.015187 -0.088003 0.105247\nvn -0.6367 -0.5398 0.5507\nv -0.016028 -0.087468 0.104798\nvn -0.686 -0.5267 0.5019\nv -0.016115 -0.088587 0.103505\nvn -0.686 -0.5267 0.5019\nv -0.015542 -0.088951 0.103906\nvn -0.686 -0.5267 0.5019\nv -0.016922 -0.086447 0.103651\nvn -0.9145 -0.3063 0.2643\nv -0.016957 -0.088455 0.101201\nvn -0.9145 -0.3063 0.2643\nv -0.016599 -0.089286 0.101478\nvn -0.9145 -0.3063 0.2643\nv -0.016922 -0.086447 0.103651\nvn -0.9228 -0.2949 0.2481\nv -0.016599 -0.089286 0.101478\nvn -0.9228 -0.2949 0.2481\nv -0.016609 -0.087131 0.104\nvn -0.9228 -0.2949 0.2481\nv -0.014531 -0.085924 0.107252\nvn -0.2395 -0.5444 0.8039\nv -0.013838 -0.087584 0.106334\nvn -0.2395 -0.5444 0.8039\nv -0.013606 -0.085754 0.107643\nvn -0.2395 -0.5444 0.8039\nv -0.014531 -0.085924 0.107252\nvn -0.336 -0.5593 0.7578\nv -0.01499 -0.087139 0.106152\nvn -0.336 -0.5593 0.7578\nv -0.013838 -0.087584 0.106334\nvn -0.336 -0.5593 0.7578\nv -0.016609 -0.087131 0.104\nvn -0.8095 -0.4159 0.4143\nv -0.016115 -0.088587 0.103505\nvn -0.8095 -0.4159 0.4143\nv -0.016028 -0.087468 0.104798\nvn -0.8095 -0.4159 0.4143\nv -0.015837 -0.085951 0.10625\nvn -0.6272 -0.4937 0.6024\nv -0.016028 -0.087468 0.104798\nvn -0.6321 -0.493 0.5978\nv -0.015187 -0.088003 0.105247\nvn -0.6236 -0.4941 0.6058\nv -0.01499 -0.087139 0.106152\nvn -0.6222 -0.4943 0.607\nv -0.01632 -0.085108 0.106175\nvn -0.7648 -0.3928 0.5107\nv -0.016028 -0.087468 0.104798\nvn -0.7648 -0.3928 0.5107\nv -0.015837 -0.085951 0.10625\nvn -0.7648 -0.3928 0.5107\nv -0.015938 -0.093452 0.094345\nvn -0.546 -0.8027 0.2397\nv -0.015396 -0.094352 0.092563\nvn -0.546 -0.8027 0.2397\nv -0.01496 -0.094289 0.093771\nvn -0.546 -0.8027 0.2397\nv -0.01632 -0.085108 0.106175\nvn -0.8196 -0.3611 0.4448\nv -0.016609 -0.087131 0.104\nvn -0.8196 -0.3611 0.4448\nv -0.016028 -0.087468 0.104798\nvn -0.8196 -0.3611 0.4448\nv -0.016688 -0.084759 0.105613\nvn -0.8731 -0.2936 0.3891\nv -0.016609 -0.087131 0.104\nvn -0.8731 -0.2936 0.3891\nv -0.01632 -0.085108 0.106175\nvn -0.8731 -0.2936 0.3891\nv -0.016922 -0.086447 0.103651\nvn -0.912 -0.2509 0.3244\nv -0.016609 -0.087131 0.104\nvn -0.912 -0.2509 0.3244\nv -0.016688 -0.084759 0.105613\nvn -0.912 -0.2509 0.3244\nv -0.014235 -0.079744 0.109702\nvn -0.1837 -0.2414 0.9529\nv -0.013915 -0.082476 0.109071\nvn -0.1837 -0.2414 0.9529\nv -0.013628 -0.079769 0.109812\nvn -0.1837 -0.2414 0.9529\nv -0.016269 -0.082344 0.107554\nvn -0.7718 -0.2725 0.5746\nv -0.01632 -0.085108 0.106175\nvn -0.7718 -0.2725 0.5746\nv -0.015767 -0.083193 0.107827\nvn -0.7718 -0.2725 0.5746\nv -0.016654 -0.081967 0.107111\nvn -0.8733 -0.2219 0.4337\nv -0.016688 -0.084759 0.105613\nvn -0.8733 -0.2219 0.4337\nv -0.01632 -0.085108 0.106175\nvn -0.8733 -0.2219 0.4337\nv -0.014235 -0.079744 0.109702\nvn -0.3029 -0.2479 0.9202\nv -0.014892 -0.081632 0.108977\nvn -0.3029 -0.2479 0.9202\nv -0.013915 -0.082476 0.109071\nvn -0.3029 -0.2479 0.9202\nv -0.016977 -0.082382 0.106101\nvn -0.9108 -0.1865 0.3684\nv -0.016688 -0.084759 0.105613\nvn -0.9108 -0.1865 0.3684\nv -0.016654 -0.081967 0.107111\nvn -0.9108 -0.1865 0.3684\nv -0.016654 -0.081967 0.107111\nvn -0.8251 -0.24 0.5115\nv -0.01632 -0.085108 0.106175\nvn -0.8251 -0.24 0.5115\nv -0.016269 -0.082344 0.107554\nvn -0.8251 -0.24 0.5115\nv -0.015143 -0.079475 0.109386\nvn -0.3772 -0.2146 0.9009\nv -0.014892 -0.081632 0.108977\nvn -0.3772 -0.2146 0.9009\nv -0.014235 -0.079744 0.109702\nvn -0.3772 -0.2146 0.9009\nv -0.01601 -0.080086 0.108603\nvn -0.5887 -0.2391 0.7722\nv -0.015767 -0.083193 0.107827\nvn -0.5887 -0.2391 0.7722\nv -0.014892 -0.081632 0.108977\nvn -0.5887 -0.2391 0.7722\nv -0.01601 -0.080086 0.108603\nvn -0.5655 -0.2166 0.7958\nv -0.014892 -0.081632 0.108977\nvn -0.5655 -0.2166 0.7958\nv -0.015143 -0.079475 0.109386\nvn -0.5655 -0.2166 0.7958\nv -0.01601 -0.080086 0.108603\nvn -0.7251 -0.2199 0.6526\nv -0.016269 -0.082344 0.107554\nvn -0.7251 -0.2199 0.6526\nv -0.015767 -0.083193 0.107827\nvn -0.7251 -0.2199 0.6526\nv -0.016654 -0.081967 0.107111\nvn -0.8108 -0.1675 0.5609\nv -0.016269 -0.082344 0.107554\nvn -0.8108 -0.1675 0.5609\nv -0.01601 -0.080086 0.108603\nvn -0.8108 -0.1675 0.5609\nv -0.01397 -0.076459 0.110223\nvn -0.1833 -0.1398 0.9731\nv -0.014235 -0.079744 0.109702\nvn -0.1833 -0.1398 0.9731\nv -0.013628 -0.079769 0.109812\nvn -0.1833 -0.1398 0.9731\nv -0.014716 -0.097609 0.077585\nvn -0.3158 -0.9349 0.1621\nv -0.014096 -0.097316 0.080477\nvn -0.3158 -0.9349 0.1621\nv -0.014996 -0.096385 0.084097\nvn -0.3158 -0.9349 0.1621\nv -0.015383 -0.097623 0.07571\nvn -0.4077 -0.9004 0.1517\nv -0.014716 -0.097609 0.077585\nvn -0.4077 -0.9004 0.1517\nv -0.014996 -0.096385 0.084097\nvn -0.4077 -0.9004 0.1517\nv -0.015905 -0.096399 0.081051\nvn -0.691 -0.7139 0.1135\nv -0.016566 -0.095812 0.08072\nvn -0.691 -0.7139 0.1135\nv -0.016169 -0.097588 0.07197\nvn -0.691 -0.7139 0.1135\nv -0.015383 -0.097623 0.07571\nvn -0.6076 -0.7851 0.1204\nv -0.015905 -0.096399 0.081051\nvn -0.6076 -0.7851 0.1204\nv -0.016169 -0.097588 0.07197\nvn -0.6076 -0.7851 0.1204\nv -0.016169 -0.097588 0.07197\nvn -0.7579 -0.6452 0.0965\nv -0.016566 -0.095812 0.08072\nvn -0.7579 -0.6452 0.0965\nv -0.016864 -0.09701 0.070375\nvn -0.7579 -0.6452 0.0965\nv -0.013864 -0.098293 0.074201\nvn -0.2098 -0.9673 0.1427\nv -0.014096 -0.097316 0.080477\nvn -0.2098 -0.9673 0.1427\nv -0.014716 -0.097609 0.077585\nvn -0.2098 -0.9673 0.1427\nv -0.015383 -0.097623 0.07571\nvn -0.3516 -0.9268 0.1319\nv -0.014726 -0.098573 0.070782\nvn -0.3516 -0.9268 0.1319\nv -0.014716 -0.097609 0.077585\nvn -0.3516 -0.9268 0.1319\nv -0.017388 -0.09758 0.049879\nvn -0.8979 -0.4391 -0.0297\nv -0.017128 -0.098321 0.052975\nvn -0.8979 -0.4391 -0.0297\nv -0.017501 -0.097528 0.052519\nvn -0.8979 -0.4391 -0.0297\nv -0.016744 -0.098728 0.049949\nvn -0.87 -0.491 -0.0444\nv -0.017128 -0.098321 0.052975\nvn -0.87 -0.491 -0.0444\nv -0.017388 -0.09758 0.049879\nvn -0.87 -0.491 -0.0444\nv -0.015383 -0.097623 0.07571\nvn -0.4221 -0.8989 0.1172\nv -0.01529 -0.098781 0.067156\nvn -0.4221 -0.8989 0.1172\nv -0.014726 -0.098573 0.070782\nvn -0.4221 -0.8989 0.1172\nv -0.015383 -0.097623 0.07571\nvn -0.5447 -0.8318 0.1067\nv -0.016169 -0.097588 0.07197\nvn -0.5447 -0.8318 0.1067\nv -0.01529 -0.098781 0.067156\nvn -0.5447 -0.8318 0.1067\nv -0.01529 -0.098781 0.067156\nvn -0.5764 -0.8115 0.0959\nv -0.016169 -0.097588 0.07197\nvn -0.5764 -0.8115 0.0959\nv -0.016395 -0.098159 0.065776\nvn -0.5764 -0.8115 0.0959\nv -0.016395 -0.098159 0.065776\nvn -0.8028 -0.5925 0.0663\nv -0.016864 -0.09701 0.070375\nvn -0.8028 -0.5925 0.0663\nv -0.017039 -0.097891 0.060379\nvn -0.8028 -0.5925 0.0663\nv -0.016395 -0.098159 0.065776\nvn -0.5662 -0.82 0.0839\nv -0.015621 -0.099239 0.06045\nvn -0.5662 -0.82 0.0839\nv -0.01529 -0.098781 0.067156\nvn -0.5662 -0.82 0.0839\nv -0.01529 -0.098781 0.067156\nvn -0.3725 -0.9245 0.0815\nv -0.015621 -0.099239 0.06045\nvn -0.3725 -0.9245 0.0815\nv -0.014527 -0.099703 0.060182\nvn -0.3725 -0.9245 0.0815\nv -0.015621 -0.099239 0.06045\nvn -0.6002 -0.7964 0.0742\nv -0.016395 -0.098159 0.065776\nvn -0.6002 -0.7964 0.0742\nv -0.016313 -0.098987 0.05756\nvn -0.6002 -0.7964 0.0742\nv -0.017039 -0.097891 0.060379\nvn -0.7572 -0.6507 0.0579\nv -0.016313 -0.098987 0.05756\nvn -0.7572 -0.6507 0.0579\nv -0.016395 -0.098159 0.065776\nvn -0.7572 -0.6507 0.0579\nv -0.016744 -0.098728 0.049949\nvn -0.8655 -0.4916 -0.0957\nv -0.017388 -0.09758 0.049879\nvn -0.8655 -0.4916 -0.0957\nv -0.016729 -0.098373 0.047983\nvn -0.8655 -0.4916 -0.0957\nv -0.017128 -0.098321 0.052975\nvn -0.7742 -0.6313 0.046\nv -0.016313 -0.098987 0.05756\nvn -0.7742 -0.6313 0.046\nv -0.017039 -0.097891 0.060379\nvn -0.7742 -0.6313 0.046\nv -0.016048 -0.098809 0.046846\nvn -0.7555 -0.6189 -0.2149\nv -0.016261 -0.099032 0.048239\nvn -0.7555 -0.6189 -0.2149\nv -0.016729 -0.098373 0.047983\nvn -0.7555 -0.6189 -0.2149\nv -0.015621 -0.099239 0.06045\nvn -0.3777 -0.924 0.0594\nv -0.015769 -0.099621 0.053566\nvn -0.3746 -0.9253 0.0588\nv -0.014527 -0.099703 0.060182\nvn -0.3689 -0.9277 0.0576\nv -0.015621 -0.099239 0.06045\nvn -0.547 -0.8351 0.0581\nv -0.016313 -0.098987 0.05756\nvn -0.547 -0.8351 0.0581\nv -0.015769 -0.099621 0.053566\nvn -0.547 -0.8351 0.0581\nv -0.017128 -0.098321 0.052975\nvn -0.9015 -0.4312 0.0359\nv -0.017039 -0.097891 0.060379\nvn -0.9015 -0.4312 0.0359\nv -0.017517 -0.097079 0.058126\nvn -0.9015 -0.4312 0.0359\nv -0.014021 -0.100206 0.052508\nvn -0.1928 -0.981 0.023\nv -0.014713 -0.10005 0.053345\nvn -0.1928 -0.981 0.023\nv -0.014517 -0.100175 0.049646\nvn -0.1928 -0.981 0.023\nv -0.013486 -0.100314 0.047548\nvn -0.1147 -0.9934 0.0093\nv -0.014021 -0.100206 0.052508\nvn -0.1147 -0.9934 0.0093\nv -0.014517 -0.100175 0.049646\nvn -0.1147 -0.9934 0.0093\nv -0.014713 -0.10005 0.053345\nvn -0.3658 -0.929 0.057\nv -0.009232 -0.100388 0.045148\nvn -0.1143 -0.9333 -0.3403\nv -0.012543 -0.100052 0.04534\nvn -0.1143 -0.9333 -0.3403\nv -0.009896 -0.099863 0.043932\nvn -0.1143 -0.9333 -0.3403\nv -0.009232 -0.100388 0.045148\nvn -0.1115 -0.9652 -0.2367\nv -0.012981 -0.100265 0.046416\nvn -0.1115 -0.9652 -0.2367\nv -0.012543 -0.100052 0.04534\nvn -0.1115 -0.9652 -0.2367\nv -0.009232 -0.100388 0.045148\nvn -0.0792 -0.9303 -0.3582\nv -0.009896 -0.099863 0.043932\nvn -0.0792 -0.9303 -0.3582\nv -0.005779 -0.100242 0.044006\nvn -0.0792 -0.9303 -0.3582\nv -0.015966 -0.099465 0.049296\nvn -0.6159 -0.7878 -0.0003\nv -0.015769 -0.099621 0.053566\nvn -0.6159 -0.7878 -0.0003\nv -0.016622 -0.098953 0.051933\nvn -0.6159 -0.7878 -0.0003\nv -0.014713 -0.10005 0.053345\nvn -0.3723 -0.9278 0.0236\nv -0.015769 -0.099621 0.053566\nvn -0.3723 -0.9278 0.0236\nv -0.015278 -0.099918 0.049621\nvn -0.3723 -0.9278 0.0236\nv -0.015278 -0.099918 0.049621\nvn -0.5481 -0.8364 -0.0052\nv -0.015769 -0.099621 0.053566\nvn -0.5481 -0.8364 -0.0052\nv -0.015966 -0.099465 0.049296\nvn -0.5481 -0.8364 -0.0052\nv -0.013862 -0.099412 0.045014\nvn -0.4041 -0.8136 -0.418\nv -0.013944 -0.099856 0.045959\nvn -0.4041 -0.8136 -0.418\nv -0.014954 -0.099321 0.045892\nvn -0.4041 -0.8136 -0.418\nv -0.013944 -0.099856 0.045959\nvn -0.4327 -0.8523 -0.2939\nv -0.014487 -0.100035 0.047275\nvn -0.4334 -0.8521 -0.2935\nv -0.014954 -0.099321 0.045892\nvn -0.4405 -0.8497 -0.2898\nv -0.014487 -0.100035 0.047275\nvn -0.2802 -0.9291 -0.2415\nv -0.013944 -0.099856 0.045959\nvn -0.2802 -0.9291 -0.2415\nv -0.012981 -0.100265 0.046416\nvn -0.2802 -0.9291 -0.2415\nv -0.014487 -0.100035 0.047275\nvn -0.2295 -0.9627 -0.1436\nv -0.012981 -0.100265 0.046416\nvn -0.2295 -0.9627 -0.1436\nv -0.013486 -0.100314 0.047548\nvn -0.2295 -0.9627 -0.1436\nv -0.016986 -0.095158 0.080539\nvn -0.9325 -0.3552 0.0652\nv -0.017171 -0.093258 0.08825\nvn -0.9325 -0.3552 0.0652\nv -0.017311 -0.095945 0.071617\nvn -0.9325 -0.3552 0.0652\nv -0.014096 -0.097316 0.080477\nvn -0.2733 -0.9458 0.1755\nv -0.014059 -0.095974 0.087768\nvn -0.2733 -0.9458 0.1755\nv -0.014996 -0.096385 0.084097\nvn -0.2733 -0.9458 0.1755\nv -0.016566 -0.095812 0.08072\nvn -0.8489 -0.5218 0.0848\nv -0.016986 -0.095158 0.080539\nvn -0.8489 -0.5218 0.0848\nv -0.016864 -0.09701 0.070375\nvn -0.8489 -0.5218 0.0848\nv -0.016864 -0.09701 0.070375\nvn -0.8868 -0.4563 0.0725\nv -0.016986 -0.095158 0.080539\nvn -0.8868 -0.4563 0.0725\nv -0.017311 -0.095945 0.071617\nvn -0.8868 -0.4563 0.0725\nv -0.016395 -0.098159 0.065776\nvn -0.7484 -0.6573 0.088\nv -0.016169 -0.097588 0.07197\nvn -0.7484 -0.6573 0.088\nv -0.016864 -0.09701 0.070375\nvn -0.7484 -0.6573 0.088\nv -0.017311 -0.095945 0.071617\nvn -0.9132 -0.4046 0.048\nv -0.017517 -0.097079 0.058126\nvn -0.9132 -0.4046 0.048\nv -0.017039 -0.097891 0.060379\nvn -0.9132 -0.4046 0.048\nv -0.014726 -0.098573 0.070782\nvn -0.2295 -0.9636 0.137\nv -0.013864 -0.098293 0.074201\nvn -0.2295 -0.9636 0.137\nv -0.014716 -0.097609 0.077585\nvn -0.2295 -0.9636 0.137\nv -0.017128 -0.098321 0.052975\nvn -0.7491 -0.6614 0.0372\nv -0.016622 -0.098953 0.051933\nvn -0.7491 -0.6614 0.0372\nv -0.016313 -0.098987 0.05756\nvn -0.7491 -0.6614 0.0372\nv -0.015769 -0.099621 0.053566\nvn -0.6525 -0.7571 0.0313\nv -0.016313 -0.098987 0.05756\nvn -0.6525 -0.7571 0.0313\nv -0.016622 -0.098953 0.051933\nvn -0.6525 -0.7571 0.0313\nv -0.016566 -0.095812 0.08072\nvn -0.8466 -0.5211 0.1088\nv -0.01632 -0.094466 0.089055\nvn -0.8455 -0.5227 0.1094\nv -0.017171 -0.093258 0.08825\nvn -0.8486 -0.518 0.1076\nv -0.014102 -0.09921 0.066487\nvn -0.1629 -0.9791 0.1214\nv -0.013864 -0.098293 0.074201\nvn -0.1629 -0.9791 0.1214\nv -0.014726 -0.098573 0.070782\nvn -0.1629 -0.9791 0.1214\nv -0.017039 -0.097891 0.060379\nvn -0.8966 -0.4394 0.0544\nv -0.016864 -0.09701 0.070375\nvn -0.8966 -0.4394 0.0544\nv -0.017311 -0.095945 0.071617\nvn -0.8966 -0.4394 0.0544\nv -0.014102 -0.09921 0.066487\nvn -0.2882 -0.9525 0.0985\nv -0.014726 -0.098573 0.070782\nvn -0.2878 -0.9525 0.0993\nv -0.01529 -0.098781 0.067156\nvn -0.2901 -0.9523 0.0949\nv -0.014527 -0.099703 0.060182\nvn -0.2906 -0.9522 0.0941\nv -0.017517 -0.097079 0.058126\nvn -0.9112 -0.4109 0.0303\nv -0.017501 -0.097528 0.052519\nvn -0.9112 -0.4109 0.0303\nv -0.017128 -0.098321 0.052975\nvn -0.9112 -0.4109 0.0303\nv -0.014713 -0.10005 0.053345\nvn -0.1562 -0.9862 0.0543\nv -0.014021 -0.100206 0.052508\nvn -0.1562 -0.9862 0.0543\nv -0.014527 -0.099703 0.060182\nvn -0.1562 -0.9862 0.0543\nv -0.016622 -0.098953 0.051933\nvn -0.7959 -0.6051 -0.0197\nv -0.017128 -0.098321 0.052975\nvn -0.7959 -0.6051 -0.0197\nv -0.016744 -0.098728 0.049949\nvn -0.7959 -0.6051 -0.0197\nv -0.016744 -0.098728 0.049949\nvn -0.7036 -0.7096 -0.0373\nv -0.015966 -0.099465 0.049296\nvn -0.7036 -0.7096 -0.0373\nv -0.016622 -0.098953 0.051933\nvn -0.7036 -0.7096 -0.0373\nv -0.014713 -0.10005 0.053345\nvn -0.3205 -0.9471 0.0151\nv -0.015278 -0.099918 0.049621\nvn -0.3205 -0.9471 0.0151\nv -0.014517 -0.100175 0.049646\nvn -0.3205 -0.9471 0.0151\nv -0.016261 -0.099032 0.048239\nvn -0.7205 -0.6888 -0.081\nv -0.015966 -0.099465 0.049296\nvn -0.7205 -0.6888 -0.081\nv -0.016744 -0.098728 0.049949\nvn -0.7205 -0.6888 -0.081\nv -0.016261 -0.099032 0.048239\nvn -0.7887 -0.6038 -0.1154\nv -0.016744 -0.098728 0.049949\nvn -0.7887 -0.6038 -0.1154\nv -0.016729 -0.098373 0.047983\nvn -0.7887 -0.6038 -0.1154\nv -0.014954 -0.099321 0.045892\nvn -0.6142 -0.7229 -0.3165\nv -0.015347 -0.099571 0.047227\nvn -0.6142 -0.7229 -0.3165\nv -0.016048 -0.098809 0.046846\nvn -0.6142 -0.7229 -0.3165\nv -0.015347 -0.099571 0.047227\nvn -0.6624 -0.7172 -0.2163\nv -0.016261 -0.099032 0.048239\nvn -0.6624 -0.7172 -0.2163\nv -0.016048 -0.098809 0.046846\nvn -0.6624 -0.7172 -0.2163\nv -0.015347 -0.099571 0.047227\nvn -0.6166 -0.7738 -0.1448\nv -0.015966 -0.099465 0.049296\nvn -0.6166 -0.7738 -0.1448\nv -0.016261 -0.099032 0.048239\nvn -0.6166 -0.7738 -0.1448\nv -0.015278 -0.099918 0.049621\nvn -0.4664 -0.8772 -0.1137\nv -0.015347 -0.099571 0.047227\nvn -0.4664 -0.8772 -0.1137\nv -0.014487 -0.100035 0.047275\nvn -0.4664 -0.8772 -0.1137\nv -0.015278 -0.099918 0.049621\nvn -0.5102 -0.8531 -0.1089\nv -0.015966 -0.099465 0.049296\nvn -0.5102 -0.8531 -0.1089\nv -0.015347 -0.099571 0.047227\nvn -0.5102 -0.8531 -0.1089\nv -0.014487 -0.100035 0.047275\nvn -0.3178 -0.9463 -0.0601\nv -0.014517 -0.100175 0.049646\nvn -0.3178 -0.9463 -0.0601\nv -0.015278 -0.099918 0.049621\nvn -0.3178 -0.9463 -0.0601\nv -0.015347 -0.099571 0.047227\nvn -0.4414 -0.8493 -0.2894\nv -0.012543 -0.100052 0.04534\nvn -0.3076 -0.8505 -0.4267\nv -0.013944 -0.099856 0.045959\nvn -0.3075 -0.8504 -0.4269\nv -0.013862 -0.099412 0.045014\nvn -0.31 -0.8525 -0.4208\nv -0.012985 -0.099458 0.04446\nvn -0.3103 -0.8527 -0.4202\nv -0.014487 -0.100035 0.047275\nvn -0.253 -0.9656 -0.0604\nv -0.013486 -0.100314 0.047548\nvn -0.253 -0.9656 -0.0604\nv -0.014517 -0.100175 0.049646\nvn -0.253 -0.9656 -0.0604\nv -0.012981 -0.100265 0.046416\nvn -0.256 -0.923 -0.2872\nv -0.013944 -0.099856 0.045959\nvn -0.256 -0.923 -0.2872\nv -0.012543 -0.100052 0.04534\nvn -0.256 -0.923 -0.2872\nv -0.009896 -0.099863 0.043932\nvn -0.1942 -0.8553 -0.4803\nv -0.012543 -0.100052 0.04534\nvn -0.1942 -0.8553 -0.4803\nv -0.012985 -0.099458 0.04446\nvn -0.1942 -0.8553 -0.4803\nv -0.009232 -0.100388 0.045148\nvn -0.0553 -0.9962 -0.0674\nv -0.013486 -0.100314 0.047548\nvn -0.0553 -0.9962 -0.0674\nv -0.012981 -0.100265 0.046416\nvn -0.0553 -0.9962 -0.0674\nv -0.005029 -0.099808 0.043149\nvn -0.0706 -0.8639 -0.4987\nv -0.005779 -0.100242 0.044006\nvn -0.0706 -0.8639 -0.4987\nv -0.009896 -0.099863 0.043932\nvn -0.0706 -0.8639 -0.4987\nv 7.17092e-18 -0.100231 0.043612\nvn -0.0306 -0.8809 -0.4723\nv -0.005779 -0.100242 0.044006\nvn -0.0306 -0.8809 -0.4723\nv -0.005029 -0.099808 0.043149\nvn -0.0306 -0.8809 -0.4723\nv -0.009232 -0.100388 0.045148\nvn -0.0268 -0.9782 -0.206\nv -0.005779 -0.100242 0.044006\nvn -0.0268 -0.9782 -0.206\nv 7.0247e-18 -0.100569 0.044806\nvn -0.0268 -0.9782 -0.206\nv 7.0247e-18 -0.100569 0.044806\nvn -0.0168 -0.9622 -0.2718\nv -0.005779 -0.100242 0.044006\nvn -0.0168 -0.9622 -0.2718\nv 7.17092e-18 -0.100231 0.043612\nvn -0.0168 -0.9622 -0.2718\nv -0.016986 -0.095158 0.080539\nvn -0.8498 -0.5162 0.1069\nv -0.01632 -0.094466 0.089055\nvn -0.6167 -0.7719 0.1545\nv -0.015905 -0.096399 0.081051\nvn -0.6167 -0.7719 0.1545\nv -0.015386 -0.095308 0.088576\nvn -0.6167 -0.7719 0.1545\nv -0.015905 -0.096399 0.081051\nvn -0.6949 -0.7064 0.1346\nv -0.01632 -0.094466 0.089055\nvn -0.6949 -0.7064 0.1346\nv -0.016566 -0.095812 0.08072\nvn -0.6949 -0.7064 0.1346\nv -0.015905 -0.096399 0.081051\nvn -0.5148 -0.8427 0.1577\nv -0.014996 -0.096385 0.084097\nvn -0.5148 -0.8427 0.1577\nv -0.015386 -0.095308 0.088576\nvn -0.5148 -0.8427 0.1577\nv -0.015905 -0.096399 0.081051\nvn -0.4869 -0.8606 0.1495\nv -0.015383 -0.097623 0.07571\nvn -0.4869 -0.8606 0.1495\nv -0.014996 -0.096385 0.084097\nvn -0.4869 -0.8606 0.1495\nv -0.017342 -0.071996 0.079401\nvn -0.0094 0.999 -0.0435\nv -0.017366 -0.071951 0.080436\nvn -0.0094 0.999 -0.0435\nv -0.015255 -0.071973 0.079478\nvn -0.0094 0.999 -0.0435\nv -0.015255 -0.071973 0.079478\nvn -0.0375 0.9937 -0.1053\nv -0.017366 -0.071951 0.080436\nvn -0.0375 0.9937 -0.1053\nv -0.015255 -0.071856 0.080581\nvn -0.0375 0.9937 -0.1053\nv -0.001991 -0.096371 0.0861\nvn 0.9994 0.0307 0.0142\nv -0.001996 -0.096317 0.08634\nvn 0.9994 0.0307 0.0142\nv -0.001977 -0.097359 0.087277\nvn 0.9994 0.0307 0.0142\nv -0.001979 -0.101453 0.094865\nvn 0.9083 -0.3926 -0.1446\nv -0.001975 -0.09983 0.090487\nvn 0.9083 -0.3926 -0.1446\nv -0.001833 -0.100325 0.092718\nvn 0.9083 -0.3926 -0.1446\nv -0.000593 -0.098635 0.091665\nvn 0.1214 -0.8452 -0.5205\nv -0.000518 -0.097652 0.090086\nvn 0.1214 -0.8452 -0.5205\nv 1.28649e-18 -0.098548 0.091662\nvn 0.1214 -0.8452 -0.5205\nv -0.000593 -0.098635 0.091665\nvn 0.4352 -0.7735 -0.4608\nv -0.001026 -0.09884 0.091601\nvn 0.429 -0.775 -0.4641\nv -0.000518 -0.097652 0.090086\nvn 0.4333 -0.7739 -0.4618\nv 1.28649e-18 -0.098548 0.091662\nvn 0.2055 -0.8202 -0.5339\nv -0.000518 -0.097652 0.090086\nvn 0.2055 -0.8202 -0.5339\nv 1.54171e-18 -0.097191 0.089578\nvn 0.2055 -0.8202 -0.5339\nv -0.001833 -0.100325 0.092718\nvn 0.8092 -0.5199 -0.2737\nv -0.001767 -0.09879 0.089999\nvn 0.8092 -0.5199 -0.2737\nv -0.001534 -0.099504 0.092045\nvn 0.8092 -0.5199 -0.2737\nv -0.001534 -0.099504 0.092045\nvn 0.5451 -0.7125 -0.4418\nv -0.001187 -0.09792 0.089918\nvn 0.5451 -0.7125 -0.4418\nv -0.001026 -0.09884 0.091601\nvn 0.5451 -0.7125 -0.4418\nv -0.001833 -0.100325 0.092718\nvn 0.9622 -0.2465 -0.1156\nv -0.001975 -0.09983 0.090487\nvn 0.9622 -0.2465 -0.1156\nv -0.001767 -0.09879 0.089999\nvn 0.9622 -0.2465 -0.1156\nv -0.001534 -0.099504 0.092045\nvn 0.7862 -0.5501 -0.2816\nv -0.001767 -0.09879 0.089999\nvn 0.7862 -0.5501 -0.2816\nv -0.001187 -0.09792 0.089918\nvn 0.7862 -0.5501 -0.2816\nv -0.001187 -0.09792 0.089918\nvn 0.4275 -0.7753 -0.4649\nv -0.000518 -0.097652 0.090086\nvn 0.0632 -0.7707 -0.634\nv 1.68083e-18 -0.096256 0.088442\nvn 0.0632 -0.7707 -0.634\nv 1.54171e-18 -0.097191 0.089578\nvn 0.0632 -0.7707 -0.634\nv -0.001036 -0.100263 0.096766\nvn 0.2204 -0.9669 -0.1284\nv -0.00102 -0.100054 0.095224\nvn 0.2204 -0.9669 -0.1284\nv 6.58248e-19 -0.10003 0.096792\nvn 0.2204 -0.9669 -0.1284\nv 6.58248e-19 -0.10003 0.096792\nvn 0.2192 -0.9673 -0.1276\nv -0.00102 -0.100054 0.095224\nvn 0.2192 -0.9673 -0.1276\nv 8.43659e-19 -0.09983 0.095278\nvn 0.2192 -0.9673 -0.1276\nv -0.001187 -0.09792 0.089918\nvn 0.4237 -0.6876 -0.5896\nv -0.000999 -0.09639 0.088268\nvn 0.4237 -0.6876 -0.5896\nv -0.000518 -0.097652 0.090086\nvn 0.4237 -0.6876 -0.5896\nv -0.000518 -0.097652 0.090086\nvn 0.2068 -0.7772 -0.5943\nv -0.000999 -0.09639 0.088268\nvn 0.2068 -0.7772 -0.5943\nv 1.68083e-18 -0.096256 0.088442\nvn 0.2068 -0.7772 -0.5943\nv -0.001036 -0.100263 0.096766\nvn 0.6701 -0.7365 -0.0927\nv -0.001463 -0.100564 0.096071\nvn 0.6701 -0.7365 -0.0927\nv -0.00102 -0.100054 0.095224\nvn 0.6701 -0.7365 -0.0927\nv -0.001187 -0.09792 0.089918\nvn 0.6083 -0.6153 -0.5014\nv -0.001453 -0.096548 0.087912\nvn 0.6083 -0.6153 -0.5014\nv -0.000999 -0.09639 0.088268\nvn 0.6083 -0.6153 -0.5014\nv -0.001767 -0.09879 0.089999\nvn 0.7217 -0.5231 -0.4534\nv -0.001453 -0.096548 0.087912\nvn 0.7217 -0.5231 -0.4534\nv -0.001187 -0.09792 0.089918\nvn 0.7217 -0.5231 -0.4534\nv 8.43659e-19 -0.09983 0.095278\nvn 0.0417 -0.9673 -0.2502\nv -0.000523 -0.099382 0.093457\nvn 0.0417 -0.9673 -0.2502\nv 9.50693e-19 -0.099604 0.094404\nvn 0.0417 -0.9673 -0.2502\nv -0.001767 -0.09879 0.089999\nvn 0.8131 -0.4536 -0.3649\nv -0.001777 -0.096847 0.087562\nvn 0.8131 -0.4536 -0.3649\nv -0.001453 -0.096548 0.087912\nvn 0.8131 -0.4536 -0.3649\nv -0.001767 -0.09879 0.089999\nvn 0.9445 -0.255 -0.2072\nv -0.001977 -0.097359 0.087277\nvn 0.9445 -0.255 -0.2072\nv -0.001777 -0.096847 0.087562\nvn 0.9445 -0.255 -0.2072\nv 8.43659e-19 -0.09983 0.095278\nvn 0.3661 -0.8737 -0.3204\nv -0.00102 -0.099675 0.09369\nvn 0.3661 -0.8737 -0.3204\nv -0.000523 -0.099382 0.093457\nvn 0.3661 -0.8737 -0.3204\nv -0.00102 -0.100054 0.095224\nvn 0.2204 -0.9469 -0.234\nv -0.00102 -0.099675 0.09369\nvn 0.2204 -0.9469 -0.234\nv 8.43659e-19 -0.09983 0.095278\nvn 0.2204 -0.9469 -0.234\nv -0.001975 -0.09983 0.090487\nvn 0.9298 -0.2913 -0.2251\nv -0.001977 -0.097359 0.087277\nvn 0.9298 -0.2913 -0.2251\nv -0.001767 -0.09879 0.089999\nvn 0.9298 -0.2913 -0.2251\nv -0.001463 -0.100564 0.096071\nvn 0.5802 -0.7954 -0.1751\nv -0.001451 -0.100043 0.093742\nvn 0.5802 -0.7954 -0.1751\nv -0.00102 -0.100054 0.095224\nvn 0.5802 -0.7954 -0.1751\nv -0.00102 -0.100054 0.095224\nvn 0.6239 -0.7587 -0.1875\nv -0.001451 -0.100043 0.093742\nvn 0.6239 -0.7587 -0.1875\nv -0.00102 -0.099675 0.09369\nvn 0.6239 -0.7587 -0.1875\nv 9.50693e-19 -0.099604 0.094404\nvn 0.246 -0.9045 -0.3484\nv -0.000523 -0.099382 0.093457\nvn 0.246 -0.9045 -0.3484\nv 1.28649e-18 -0.098548 0.091662\nvn 0.246 -0.9045 -0.3484\nv -0.001463 -0.100564 0.096071\nvn 0.7906 -0.5983 -0.13\nv -0.001833 -0.100325 0.092718\nvn 0.7906 -0.5983 -0.13\nv -0.001451 -0.100043 0.093742\nvn 0.7906 -0.5983 -0.13\nv -0.001777 -0.101003 0.09599\nvn 0.8181 -0.5601 -0.1303\nv -0.001833 -0.100325 0.092718\nvn 0.8181 -0.5601 -0.1303\nv -0.001463 -0.100564 0.096071\nvn 0.8181 -0.5601 -0.1303\nv -0.001777 -0.101003 0.09599\nvn 0.9636 -0.2581 -0.0701\nv -0.001979 -0.101453 0.094865\nvn 0.9636 -0.2581 -0.0701\nv -0.001833 -0.100325 0.092718\nvn 0.9636 -0.2581 -0.0701\nv -0.001451 -0.100043 0.093742\nvn 0.6061 -0.7492 -0.2672\nv -0.001534 -0.099504 0.092045\nvn 0.6061 -0.7492 -0.2672\nv -0.00102 -0.099675 0.09369\nvn 0.6061 -0.7492 -0.2672\nv -0.00102 -0.099675 0.09369\nvn 0.3503 -0.8694 -0.3485\nv -0.001026 -0.09884 0.091601\nvn 0.3503 -0.8694 -0.3485\nv -0.000523 -0.099382 0.093457\nvn 0.3503 -0.8694 -0.3485\nv -0.00102 -0.099675 0.09369\nvn 0.6633 -0.6943 -0.2793\nv -0.001534 -0.099504 0.092045\nvn 0.6633 -0.6943 -0.2793\nv -0.001026 -0.09884 0.091601\nvn 0.6633 -0.6943 -0.2793\nv -0.000523 -0.099382 0.093457\nvn 0.1319 -0.9131 -0.3857\nv -0.000593 -0.098635 0.091665\nvn 0.1319 -0.9131 -0.3857\nv 1.28649e-18 -0.098548 0.091662\nvn 0.1319 -0.9131 -0.3857\nv -0.000523 -0.099382 0.093457\nvn 0.4429 -0.8213 -0.3595\nv -0.001026 -0.09884 0.091601\nvn 0.4429 -0.8213 -0.3595\nv -0.000593 -0.098635 0.091665\nvn 0.4429 -0.8213 -0.3595\nv -0.001833 -0.100325 0.092718\nvn 0.8611 -0.4711 -0.1912\nv -0.001534 -0.099504 0.092045\nvn 0.8611 -0.4711 -0.1912\nv -0.001451 -0.100043 0.093742\nvn 0.8611 -0.4711 -0.1912\nv -0.001979 -0.101566 0.109499\nvn 0.9219 -0.3875 -0.0023\nv -0.001777 -0.101003 0.09599\nvn 0.9219 -0.3875 -0.0023\nv -0.001723 -0.10095 0.108504\nvn 0.9219 -0.3875 -0.0023\nv -0.001979 -0.101453 0.094865\nvn 0.9148 -0.4039 -0.0031\nv -0.001777 -0.101003 0.09599\nvn 0.9148 -0.4039 -0.0031\nv -0.001979 -0.101566 0.109499\nvn 0.9148 -0.4039 -0.0031\nv -0.001777 -0.101003 0.09599\nvn 0.8139 -0.581 -0.001\nv -0.001463 -0.100564 0.096071\nvn 0.8139 -0.581 -0.001\nv -0.001723 -0.10095 0.108504\nvn 0.8139 -0.581 -0.001\nv -0.001723 -0.10095 0.108504\nvn 0.7396 -0.6731 -0.0054\nv -0.001463 -0.100564 0.096071\nvn 0.7396 -0.6731 -0.0054\nv -0.001148 -0.100319 0.108527\nvn 0.7396 -0.6731 -0.0054\nv -0.001463 -0.100564 0.096071\nvn 0.5744 -0.8185 0.0016\nv -0.001036 -0.100263 0.096766\nvn 0.5744 -0.8185 0.0016\nv -0.001148 -0.100319 0.108527\nvn 0.5744 -0.8185 0.0016\nv -0.001036 -0.100263 0.096766\nvn 0.2192 -0.9757 -0.0025\nv 6.58248e-19 -0.10003 0.096792\nvn 0.2192 -0.9757 -0.0025\nv -0.001148 -0.100319 0.108527\nvn 0.2192 -0.9757 -0.0025\nv -0.001148 -0.100319 0.108527\nvn 0.2396 -0.9709 -0.0004\nv 6.58248e-19 -0.10003 0.096792\nvn 0.2396 -0.9709 -0.0004\nv -7.31849e-19 -0.100035 0.108143\nvn 0.2396 -0.9709 -0.0004\nv -0.016582 0.027368 0.09407\nvn 0.3407 0.0013 0.9402\nv -0.017305 0.026919 0.094332\nvn 0.3407 0.0013 0.9402\nv -0.016629 0.012795 0.094107\nvn 0.3407 0.0013 0.9402\nv -0.016093 0.018739 0.093747\nvn 0.6083 0.0048 0.7937\nv -0.016133 0.027636 0.093724\nvn 0.6083 0.0048 0.7937\nv -0.016582 0.027368 0.09407\nvn 0.6083 0.0048 0.7937\nv -0.01571 0.027878 0.093264\nvn 0.7354 0.005 0.6776\nv -0.016133 0.027636 0.093724\nvn 0.7354 0.005 0.6776\nv -0.016093 0.018739 0.093747\nvn 0.7354 0.005 0.6776\nv -0.016845 -0.003384 0.094196\nvn 0.3014 0.0013 0.9535\nv -0.016629 0.012795 0.094107\nvn 0.2977 -0.0005 0.9546\nv -0.017375 0.01386 0.09434\nvn 0.3018 0.0011 0.9534\nv -0.015311 0.021536 0.092493\nvn 0.9177 0.0096 0.3971\nv -0.015383 0.028059 0.092503\nvn 0.9177 0.0096 0.3971\nv -0.01571 0.027878 0.093264\nvn 0.9177 0.0096 0.3971\nv -0.016629 0.012795 0.094107\nvn 0.5849 0.0017 0.8111\nv -0.016142 -0.002994 0.093788\nvn 0.5849 0.0017 0.8111\nv -0.01604 0.006742 0.093694\nvn 0.5849 0.0017 0.8111\nv -0.015298 0.000291 0.092303\nvn 0.9268 -0.0028 0.3754\nv -0.015311 0.021536 0.092493\nvn 0.9268 -0.0028 0.3754\nv -0.015631 0.008166 0.093184\nvn 0.9268 -0.0028 0.3754\nv -0.015298 0.000291 0.092303\nvn 0.9441 0.0031 0.3297\nv -0.015631 0.008166 0.093184\nvn 0.9441 0.0031 0.3297\nv -0.015454 -0.010946 0.092857\nvn 0.9441 0.0031 0.3297\nv -0.0158 -0.017187 0.093424\nvn 0.7522 0.0012 0.6589\nv -0.015631 0.008166 0.093184\nvn 0.7522 0.0012 0.6589\nv -0.016142 -0.002994 0.093788\nvn 0.7522 0.0012 0.6589\nv -0.016982 -0.013187 0.094255\nvn 0.1454 -0.001 0.9894\nv -0.017375 0.01386 0.09434\nvn 0.1454 -0.001 0.9894\nv -0.017856 -0.026555 0.09437\nvn 0.1454 -0.001 0.9894\nv -0.016845 -0.003384 0.094196\nvn 0.5024 -0.0013 0.8646\nv -0.016142 -0.002994 0.093788\nvn 0.501 0.0022 0.8655\nv -0.016629 0.012795 0.094107\nvn 0.5026 -0.0019 0.8645\nv -0.016263 -0.021414 0.093873\nvn 0.6934 0.0007 0.7205\nv -0.0158 -0.017187 0.093424\nvn 0.6934 0.0007 0.7205\nv -0.016331 -0.013693 0.093931\nvn 0.6934 0.0007 0.7205\nv -0.017305 0.026919 0.094332\nvn 0.2971 -0.001 0.9549\nv -0.015631 0.008166 0.093184\nvn 0.8583 -0.0009 0.5132\nv -0.0158 -0.017187 0.093424\nvn 0.8583 -0.0009 0.5132\nv -0.015454 -0.010946 0.092857\nvn 0.8583 -0.0009 0.5132\nv -0.017305 0.026919 0.094332\nvn 0.0608 0.0003 0.9982\nv -0.0158 -0.017187 0.093424\nvn 0.7774 -0.0044 0.629\nv -0.016205 -0.027594 0.093851\nvn 0.7774 -0.0044 0.629\nv -0.015509 -0.02799 0.092988\nvn 0.7774 -0.0044 0.629\nv -0.0158 -0.017187 0.093424\nvn 0.6786 0.0038 0.7345\nv -0.016263 -0.021414 0.093873\nvn 0.6786 0.0038 0.7345\nv -0.016205 -0.027594 0.093851\nvn 0.6786 0.0038 0.7345\nv -0.016982 -0.013187 0.094255\nvn 0.4431 -0.0025 0.8965\nv -0.016263 -0.021414 0.093873\nvn 0.4428 -0.0029 0.8966\nv -0.016331 -0.013693 0.093931\nvn 0.4439 -0.0012 0.8961\nv -0.016982 -0.013187 0.094255\nvn 0.3045 0.0014 0.9525\nv -0.016093 0.018739 0.093747\nvn 0.779 0.0007 0.627\nv -0.015631 0.008166 0.093184\nvn 0.7816 -0.0019 0.6237\nv -0.01571 0.027878 0.093264\nvn 0.7784 0.0006 0.6277\nv -0.016845 -0.003384 0.094196\nvn 0.4441 -0.0009 0.896\nv -0.015454 -0.010946 0.092857\nvn 0.9672 -0.0011 0.2539\nv -0.01527 -0.028122 0.09208\nvn 0.9674 -0.0011 0.2532\nv -0.015298 0.000291 0.092303\nvn 0.9675 -0.0011 0.2527\nv -0.016331 -0.013693 0.093931\nvn 0.6833 -0.0023 0.7302\nv -0.0158 -0.017187 0.093424\nvn 0.6833 -0.0023 0.7302\nv -0.016142 -0.002994 0.093788\nvn 0.6833 -0.0023 0.7302\nv -0.016331 -0.013693 0.093931\nvn 0.5006 0.0027 0.8656\nv -0.017017 -0.022099 0.094272\nvn 0.1 0.0031 0.995\nv -0.016982 -0.013187 0.094255\nvn 0.1085 0.0015 0.9941\nv -0.017856 -0.026555 0.09437\nvn 0.1053 0.0021 0.9944\nv -0.016982 -0.013187 0.094255\nvn 0.4675 -0.0001 0.884\nv -0.017017 -0.022099 0.094272\nvn 0.4673 0.0001 0.8841\nv -0.016263 -0.021414 0.093873\nvn 0.4667 0.001 0.8844\nv -0.015454 -0.010946 0.092857\nvn 0.8471 0.0014 0.5314\nv -0.0158 -0.017187 0.093424\nvn 0.8471 0.0014 0.5314\nv -0.015509 -0.02799 0.092988\nvn 0.8471 0.0014 0.5314\nv -0.01604 0.006742 0.093694\nvn 0.7802 -0 0.6255\nv -0.016142 -0.002994 0.093788\nvn 0.7833 -0.0022 0.6217\nv -0.017207 -0.026982 0.094308\nvn 0.0967 0.0037 0.9953\nv -0.015509 -0.02799 0.092988\nvn 0.9671 -0.0011 0.2543\nv -0.016205 -0.027594 0.093851\nvn 0.4666 0.0012 0.8845\nv -0.016205 -0.027594 0.093851\nvn 0.4104 -0.0092 0.9119\nv -0.017017 -0.022099 0.094272\nvn 0.4104 -0.0092 0.9119\nv -0.017207 -0.026982 0.094308\nvn 0.4104 -0.0092 0.9119\nv -0.015631 0.008166 0.093184\nvn 0.8936 0.0018 0.4488\nv -0.015311 0.021536 0.092493\nvn 0.8936 0.0018 0.4488\nv -0.01571 0.027878 0.093264\nvn 0.8936 0.0018 0.4488\nv -0.01604 0.006742 0.093694\nvn 0.5657 -0.0011 0.8246\nv -0.016093 0.018739 0.093747\nvn 0.5627 -0.0007 0.8267\nv -0.016629 0.012795 0.094107\nvn 0.558 -0.0001 0.8299\nv -0.016582 0.027368 0.09407\nvn 0.5549 0.0003 0.8319\nv -0.008216 0.032482 0.110523\nvn 0.1293 -0.6976 0.7048\nv -0.007792 0.031042 0.109036\nvn 0.1327 -0.6929 0.7087\nv -0.005159 0.031592 0.109082\nvn 0.1322 -0.6936 0.7082\nv -1.04095e-18 0.033517 0.110667\nvn 0.0075 -0.701 0.7132\nv -0.002096 0.031942 0.109141\nvn 0.0075 -0.701 0.7132\nv -8.58232e-19 0.031999 0.109175\nvn 0.0075 -0.701 0.7132\nv -0.004749 0.033184 0.110584\nvn 0.1291 -0.698 0.7044\nv -0.011923 0.031363 0.110466\nvn 0.1931 -0.6771 0.7101\nv -0.007792 0.031042 0.109036\nvn 0.1923 -0.6794 0.7082\nv -0.008216 0.032482 0.110523\nvn 0.1932 -0.6768 0.7104\nv -0.010976 0.030077 0.108973\nvn 0.1921 -0.6798 0.7078\nv -0.016932 0.027177 0.108861\nvn 0.3239 -0.6185 0.7159\nv -0.014063 0.028749 0.10892\nvn 0.3239 -0.6185 0.7159\nv -0.015313 0.029765 0.110364\nvn 0.3239 -0.6185 0.7159\nv -0.004749 0.033184 0.110584\nvn 0.0384 -0.7212 0.6916\nv -0.002096 0.031942 0.109141\nvn 0.0384 -0.7212 0.6916\nv -1.04095e-18 0.033517 0.110667\nvn 0.0384 -0.7212 0.6916\nv -0.01642 0.028543 0.109799\nvn 0.3076 -0.6145 0.7264\nv -0.016932 0.027177 0.108861\nvn 0.3076 -0.6145 0.7264\nv -0.015313 0.029765 0.110364\nvn 0.3076 -0.6145 0.7264\nv -0.004749 0.033184 0.110584\nvn 0.0653 -0.6937 0.7173\nv -0.005159 0.031592 0.109082\nvn 0.0653 -0.6937 0.7173\nv -0.002096 0.031942 0.109141\nvn 0.0653 -0.6937 0.7173\nv -0.011923 0.031363 0.110466\nvn 0.2636 -0.6416 0.7203\nv -0.014063 0.028749 0.10892\nvn 0.2636 -0.6416 0.7203\nv -0.010976 0.030077 0.108973\nvn 0.2636 -0.6416 0.7203\nv -0.015313 0.029765 0.110364\nvn 0.2852 -0.6499 0.7045\nv -0.014063 0.028749 0.10892\nvn 0.2852 -0.6499 0.7045\nv -0.011923 0.031363 0.110466\nvn 0.2852 -0.6499 0.7045\nv -0.015093 -0.028221 0.1089\nvn 0.3369 0.6101 0.7171\nv -0.016537 -0.027396 0.108876\nvn 0.3369 0.6101 0.7171\nv -0.016 -0.028388 0.109468\nvn 0.3369 0.6101 0.7171\nv -0.0149 -0.029725 0.110148\nvn 0.3268 0.6281 0.7062\nv -0.015093 -0.028221 0.1089\nvn 0.3268 0.6281 0.7062\nv -0.016 -0.028388 0.109468\nvn 0.3268 0.6281 0.7062\nv -0.0149 -0.029725 0.110148\nvn 0.2905 0.6398 0.7115\nv -0.012848 -0.02932 0.108946\nvn 0.2907 0.6395 0.7117\nv -0.015093 -0.028221 0.1089\nvn 0.2948 0.6324 0.7163\nv -0.013792 -0.030528 0.110418\nvn 0.2904 0.64 0.7114\nv -0.010493 -0.031853 0.110485\nvn 0.2493 0.6615 0.7073\nv -0.012848 -0.02932 0.108946\nvn 0.2475 0.6606 0.7087\nv -0.013792 -0.030528 0.110418\nvn 0.2519 0.6626 0.7053\nv -0.010683 -0.030169 0.108983\nvn 0.2468 0.6603 0.7093\nv -0.010493 -0.031853 0.110485\nvn 0.1942 0.665 0.7212\nv -0.00811 -0.03097 0.109029\nvn 0.1942 0.665 0.7212\nv -0.010683 -0.030169 0.108983\nvn 0.1942 0.665 0.7212\nv -0.005809 -0.033013 0.110566\nvn 0.1622 0.7033 0.6921\nv -0.00811 -0.03097 0.109029\nvn 0.1622 0.7033 0.6921\nv -0.010493 -0.031853 0.110485\nvn 0.1622 0.7033 0.6921\nv -0.005809 -0.033013 0.110566\nvn 0.1287 0.6847 0.7174\nv -0.004953 -0.031626 0.109088\nvn 0.1287 0.6847 0.7174\nv -0.00811 -0.03097 0.109029\nvn 0.1287 0.6847 0.7174\nv -0.002183 -0.033436 0.110629\nvn 0.0693 0.706 0.7048\nv -0.001919 -0.031955 0.109147\nvn 0.0624 0.7005 0.711\nv -0.004953 -0.031626 0.109088\nvn 0.0635 0.7014 0.71\nv -0.005809 -0.033013 0.110566\nvn 0.0702 0.7066 0.7041\nv -0.002183 -0.033436 0.110629\nvn 0.0062 0.7066 0.7076\nv -8.58232e-19 -0.031999 0.109175\nvn -8.6656e-17 0.7066 0.7076\nv -0.001919 -0.031955 0.109147\nvn 0.0058 0.7069 0.7073\nv -1.04095e-18 -0.033494 0.110667\nvn -8.66927e-17 0.7064 0.7079\nv -0.017427 -0.069417 0.088831\nvn -0.0109 0.8456 -0.5337\nv -0.017437 -0.068815 0.089784\nvn -0.0109 0.8456 -0.5337\nv -0.015255 -0.069307 0.088961\nvn -0.0109 0.8456 -0.5337\nv -0.017437 -0.068815 0.089784\nvn -0.0493 0.7948 -0.6049\nv -0.015255 -0.068472 0.090058\nvn -0.0493 0.7948 -0.6049\nv -0.015255 -0.069307 0.088961\nvn -0.0493 0.7948 -0.6049\nv -0.017437 -0.068815 0.089784\nvn -0.0117 0.6671 -0.7448\nv -0.01739 -0.068049 0.090469\nvn -0.0117 0.6671 -0.7448\nv -0.015255 -0.068472 0.090058\nvn -0.0117 0.6671 -0.7448\nv -0.015255 -0.068472 0.090058\nvn -0.0441 0.5742 -0.8176\nv -0.01739 -0.068049 0.090469\nvn -0.0441 0.5742 -0.8176\nv -0.015255 -0.067587 0.090679\nvn -0.0441 0.5742 -0.8176\nv -0.01739 -0.068049 0.090469\nvn -0.0096 0.4494 -0.8933\nv -0.017443 -0.067 0.090998\nvn -0.0096 0.4494 -0.8933\nv -0.015255 -0.067587 0.090679\nvn -0.0096 0.4494 -0.8933\nv -0.017443 -0.067 0.090998\nvn -0.0496 0.3278 -0.9434\nv -0.015255 -0.066386 0.091097\nvn -0.0496 0.3278 -0.9434\nv -0.015255 -0.067587 0.090679\nvn -0.0496 0.3278 -0.9434\nv -0.017444 -0.065945 0.09119\nvn -0.006 0.1791 -0.9838\nv -0.015255 -0.066386 0.091097\nvn -0.006 0.1791 -0.9838\nv -0.017443 -0.067 0.090998\nvn -0.006 0.1791 -0.9838\nv -0.015255 -0.071856 0.080581\nvn -0.025 0.9632 -0.2677\nv -0.017366 -0.071951 0.080436\nvn -0.0299 0.9637 -0.2653\nv -0.015255 -0.070753 0.084549\nvn -0.026 0.9633 -0.2672\nv -0.017464 -0.070752 0.084811\nvn -0.0308 0.9638 -0.2649\nv -0.015255 -0.070753 0.084549\nvn -0.0363 0.9496 -0.3114\nv -0.017464 -0.070752 0.084811\nvn -0.0306 0.9489 -0.3142\nv -0.015255 -0.069307 0.088961\nvn -0.0352 0.9495 -0.3119\nv -0.017427 -0.069417 0.088831\nvn -0.0293 0.9487 -0.3148\nv -0.017388 -0.071522 0.07773\nvn -0.0065 0.9265 0.3762\nv -0.017455 -0.071909 0.078683\nvn -0.0065 0.9265 0.3762\nv -0.015255 -0.07159 0.077933\nvn -0.0065 0.9265 0.3762\nv -0.015255 -0.07159 0.077933\nvn -0.0589 0.9689 0.2405\nv -0.017455 -0.071909 0.078683\nvn -0.0589 0.9689 0.2405\nv -0.015255 -0.071973 0.079478\nvn -0.0589 0.9689 0.2405\nv -0.017455 -0.071909 0.078683\nvn -0.0154 0.9924 0.1219\nv -0.017342 -0.071996 0.079401\nvn -0.0154 0.9924 0.1219\nv -0.015255 -0.071973 0.079478\nvn -0.0154 0.9924 0.1219\nv -0.015255 -0.068463 0.075729\nvn -0.0249 0.251 0.9677\nv -0.01741 -0.068402 0.075658\nvn -0.0258 0.2497 0.968\nv -0.015255 -0.069627 0.076031\nvn -0.0298 0.243 0.9696\nv -0.017392 -0.069394 0.075906\nvn -0.0308 0.2413 0.97\nv -0.017392 -0.069394 0.075906\nvn -0.0051 0.4383 0.8988\nv -0.017472 -0.070313 0.076353\nvn -0.0051 0.4383 0.8988\nv -0.015255 -0.069627 0.076031\nvn -0.0051 0.4383 0.8988\nv -0.015255 -0.069627 0.076031\nvn -0.0581 0.5719 0.8182\nv -0.017472 -0.070313 0.076353\nvn -0.0581 0.5719 0.8182\nv -0.015255 -0.070789 0.076844\nvn -0.0581 0.5719 0.8182\nv -0.017472 -0.070313 0.076353\nvn -0.019 0.6749 0.7377\nv -0.017433 -0.070974 0.076959\nvn -0.0185 0.6749 0.7377\nv -0.015255 -0.070789 0.076844\nvn -0.0182 0.6749 0.7377\nv -0.015255 -0.070789 0.076844\nvn -0.037 0.8053 0.5917\nv -0.017433 -0.070974 0.076959\nvn -0.037 0.8053 0.5917\nv -0.015255 -0.07159 0.077933\nvn -0.037 0.8053 0.5917\nv -0.017433 -0.070974 0.076959\nvn -0.0295 0.814 0.5802\nv -0.017388 -0.071522 0.07773\nvn -0.0295 0.814 0.5802\nv -0.015255 -0.07159 0.077933\nvn -0.0295 0.814 0.5802\nv -0.017514 0.068079 0.075614\nvn -0.0496 0.0003 0.9988\nv -0.01741 -0.068402 0.075658\nvn -0.0496 0.0003 0.9988\nv -0.015255 0.068456 0.075726\nvn -0.0496 0.0003 0.9988\nv -0.01741 -0.068402 0.075658\nvn -0.033 0 0.9995\nv -0.015255 -0.068463 0.075729\nvn -0.033 0 0.9995\nv -0.015255 0.068456 0.075726\nvn -0.033 0 0.9995\nv -0.015255 0.07016 0.07634\nvn -0.0315 -0.436 0.8994\nv -0.017453 0.070205 0.076285\nvn -0.0315 -0.436 0.8994\nv -0.015255 0.069319 0.075932\nvn -0.0315 -0.436 0.8994\nv -0.017453 0.070205 0.076285\nvn -0.0165 -0.4048 0.9143\nv -0.017484 0.069002 0.075752\nvn -0.0165 -0.4048 0.9143\nv -0.015255 0.069319 0.075932\nvn -0.0165 -0.4048 0.9143\nv -0.015255 0.069319 0.075932\nvn -0.0456 -0.2323 0.9716\nv -0.017484 0.069002 0.075752\nvn -0.0456 -0.2323 0.9716\nv -0.015255 0.068456 0.075726\nvn -0.0456 -0.2323 0.9716\nv -0.017484 0.069002 0.075752\nvn -0.0245 -0.1472 0.9888\nv -0.017514 0.068079 0.075614\nvn -0.0245 -0.1472 0.9888\nv -0.015255 0.068456 0.075726\nvn -0.0245 -0.1472 0.9888\nv -0.017476 0.07196 0.080471\nvn -0.0169 -0.9958 -0.0898\nv -0.017461 0.07203 0.079681\nvn -0.0169 -0.9958 -0.0898\nv -0.015255 0.071962 0.080031\nvn -0.0169 -0.9958 -0.0898\nv -0.015255 0.071962 0.080031\nvn -0.0416 -0.9968 0.0686\nv -0.017487 0.071987 0.079052\nvn -0.0398 -0.9971 0.0646\nv -0.015255 0.071892 0.078933\nvn -0.0393 -0.9972 0.0635\nv -0.017461 0.07203 0.079681\nvn -0.0422 -0.9966 0.0701\nv -0.015255 0.071892 0.078933\nvn -0.0432 -0.9511 0.3058\nv -0.017452 0.071703 0.078036\nvn -0.0432 -0.9511 0.3058\nv -0.015255 0.071552 0.077876\nvn -0.0432 -0.9511 0.3058\nv -0.017487 0.071987 0.079052\nvn -0.0269 -0.9629 0.2685\nv -0.017452 0.071703 0.078036\nvn -0.0269 -0.9629 0.2685\nv -0.015255 0.071892 0.078933\nvn -0.0269 -0.9629 0.2685\nv -0.015255 0.071552 0.077876\nvn -0.0392 -0.8095 0.5859\nv -0.017457 0.071026 0.077002\nvn -0.0392 -0.8095 0.5859\nv -0.015255 0.070877 0.076943\nvn -0.0392 -0.8095 0.5859\nv -0.017452 0.071703 0.078036\nvn -0.0176 -0.8365 0.5477\nv -0.017457 0.071026 0.077002\nvn -0.0176 -0.8365 0.5477\nv -0.015255 0.071552 0.077876\nvn -0.0176 -0.8365 0.5477\nv -0.017457 0.071026 0.077002\nvn -0.0244 -0.658 0.7526\nv -0.017453 0.070205 0.076285\nvn -0.0244 -0.658 0.7526\nv -0.015255 0.070877 0.076943\nvn -0.0244 -0.658 0.7526\nv -0.015255 0.070877 0.076943\nvn -0.0325 -0.6435 0.7648\nv -0.017453 0.070205 0.076285\nvn -0.0325 -0.6435 0.7648\nv -0.015255 0.07016 0.07634\nvn -0.0325 -0.6435 0.7648\nv -0.015254 0.069385 0.088777\nvn -0.0422 -0.9512 -0.3058\nv -0.017495 0.070797 0.084693\nvn -0.0422 -0.9512 -0.3058\nv -0.015254 0.070934 0.083959\nvn -0.0422 -0.9512 -0.3058\nv -0.017492 0.069332 0.089058\nvn -0.0173 -0.9478 -0.3183\nv -0.017495 0.070797 0.084693\nvn -0.0173 -0.9478 -0.3183\nv -0.015254 0.069385 0.088777\nvn -0.0173 -0.9478 -0.3183\nv -0.017495 0.070797 0.084693\nvn -0.0282 -0.9637 -0.2654\nv -0.017476 0.07196 0.080471\nvn -0.0282 -0.9637 -0.2654\nv -0.015254 0.070934 0.083959\nvn -0.0282 -0.9637 -0.2654\nv -0.015254 0.070934 0.083959\nvn -0.0492 -0.9663 -0.2528\nv -0.017476 0.07196 0.080471\nvn -0.0492 -0.9663 -0.2528\nv -0.015255 0.071962 0.080031\nvn -0.0492 -0.9663 -0.2528\nv -0.017548 0.065986 0.091206\nvn -0.0195 -0.1678 -0.9856\nv -0.017516 0.06672 0.09108\nvn -0.0195 -0.1678 -0.9856\nv -0.015255 0.066307 0.091106\nvn -0.0195 -0.1678 -0.9856\nv -0.015255 0.066307 0.091106\nvn -0.0455 -0.3076 -0.9504\nv -0.017516 0.06672 0.09108\nvn -0.0455 -0.3076 -0.9504\nv -0.015254 0.067548 0.090704\nvn -0.0455 -0.3076 -0.9504\nv -0.017516 0.06672 0.09108\nvn -0.0354 -0.3318 -0.9427\nv -0.017523 0.067513 0.090801\nvn -0.0354 -0.3318 -0.9427\nv -0.015254 0.067548 0.090704\nvn -0.0354 -0.3318 -0.9427\nv -0.015254 0.067548 0.090704\nvn -0.0424 -0.5879 -0.8078\nv -0.017447 0.068459 0.090156\nvn -0.0424 -0.5879 -0.8078\nv -0.015255 0.068623 0.089922\nvn -0.0424 -0.5879 -0.8078\nv -0.017523 0.067513 0.090801\nvn -0.0268 -0.5618 -0.8269\nv -0.017447 0.068459 0.090156\nvn -0.0268 -0.5618 -0.8269\nv -0.015254 0.067548 0.090704\nvn -0.0268 -0.5618 -0.8269\nv -0.015255 0.068623 0.089922\nvn -0.0496 -0.8312 -0.5537\nv -0.017492 0.069332 0.089058\nvn -0.0496 -0.8312 -0.5537\nv -0.015254 0.069385 0.088777\nvn -0.0496 -0.8312 -0.5537\nv -0.017447 0.068459 0.090156\nvn -0.0079 -0.783 -0.6219\nv -0.017492 0.069332 0.089058\nvn -0.0079 -0.783 -0.6219\nv -0.015255 0.068623 0.089922\nvn -0.0079 -0.783 -0.6219\nv -0.015255 0.066307 0.091106\nvn -0.0471 0.0011 -0.9989\nv -0.017538 0.041109 0.091204\nvn -0.045 0.0002 -0.999\nv -0.017548 0.065986 0.091206\nvn -0.0436 0 -0.9991\nv -0.015255 -0.066386 0.091097\nvn -0.0408 0.0001 -0.9992\nv -0.017444 -0.065945 0.09119\nvn -0.0427 0 -0.9991\nv -0.017443 0.023103 0.09119\nvn -0.0454 0.0002 -0.999\nv -0.017603 -0.056093 0.075548\nvn -0.83 0 0.5578\nv -0.017715 0.068578 0.07539\nvn -0.83 0 0.5578\nv -0.01773 -0.068435 0.075359\nvn -0.83 0 0.5578\nv -0.017603 -0.056093 0.075548\nvn -0.5 -0.0001 0.866\nv -0.01741 -0.068402 0.075658\nvn -0.5 -0.0001 0.866\nv -0.017514 0.068079 0.075614\nvn -0.5 -0.0001 0.866\nv -0.017715 0.068578 0.07539\nvn -0.7433 0.0002 0.669\nv -0.017603 -0.056093 0.075548\nvn -0.7433 0.0002 0.669\nv -0.017514 0.068079 0.075614\nvn -0.7433 0.0002 0.669\nv -0.017603 -0.056093 0.075548\nvn -0.6833 -0.0042 0.7301\nv -0.01773 -0.068435 0.075359\nvn -0.6833 -0.0042 0.7301\nv -0.01741 -0.068402 0.075658\nvn -0.6833 -0.0042 0.7301\nv -0.017624 -0.069513 0.075783\nvn -0.6797 0.2102 0.7027\nv -0.01741 -0.068402 0.075658\nvn -0.6797 0.2102 0.7027\nv -0.01773 -0.068435 0.075359\nvn -0.6797 0.2102 0.7027\nv -0.01741 -0.068402 0.075658\nvn -0.5332 0.1955 0.8231\nv -0.017624 -0.069513 0.075783\nvn -0.5332 0.1955 0.8231\nv -0.017392 -0.069394 0.075906\nvn -0.5332 0.1955 0.8231\nv -0.017514 0.068079 0.075614\nvn -0.8064 -0.0611 0.5882\nv -0.017484 0.069002 0.075752\nvn -0.8064 -0.0611 0.5882\nv -0.017715 0.068578 0.07539\nvn -0.8064 -0.0611 0.5882\nv -0.017624 -0.069513 0.075783\nvn -0.8166 0.1404 0.5598\nv -0.01773 -0.068435 0.075359\nvn -0.8166 0.1404 0.5598\nv -0.017749 -0.070077 0.075743\nvn -0.8166 0.1404 0.5598\nv -0.017484 0.069002 0.075752\nvn -0.7727 -0.2405 0.5874\nv -0.017453 0.070205 0.076285\nvn -0.7727 -0.2405 0.5874\nv -0.017713 0.069903 0.075819\nvn -0.7727 -0.2405 0.5874\nv -0.017484 0.069002 0.075752\nvn -0.679 -0.2249 0.6988\nv -0.017713 0.069903 0.075819\nvn -0.679 -0.2249 0.6988\nv -0.017715 0.068578 0.07539\nvn -0.679 -0.2249 0.6988\nv -0.017472 -0.070313 0.076353\nvn -0.5804 0.3962 0.7115\nv -0.017392 -0.069394 0.075906\nvn -0.578 0.3975 0.7126\nv -0.017624 -0.069513 0.075783\nvn -0.5848 0.3937 0.7092\nv -0.017679 0.070839 0.076516\nvn -0.619 -0.4546 0.6404\nv -0.017713 0.069903 0.075819\nvn -0.619 -0.4546 0.6404\nv -0.017453 0.070205 0.076285\nvn -0.619 -0.4546 0.6404\nv -0.017731 -0.071007 0.076523\nvn -0.949 0.1919 0.25\nv -0.017624 -0.069513 0.075783\nvn -0.949 0.1919 0.25\nv -0.017749 -0.070077 0.075743\nvn -0.949 0.1919 0.25\nv -0.017731 -0.071007 0.076523\nvn -0.5871 0.3925 0.708\nv -0.017679 0.070839 0.076516\nvn -0.8046 -0.3358 0.4898\nv -0.017748 0.071349 0.076753\nvn -0.8046 -0.3358 0.4898\nv -0.017713 0.069903 0.075819\nvn -0.8046 -0.3358 0.4898\nv -0.017457 0.071026 0.077002\nvn -0.7355 -0.448 0.5082\nv -0.017679 0.070839 0.076516\nvn -0.7355 -0.448 0.5082\nv -0.017453 0.070205 0.076285\nvn -0.7355 -0.448 0.5082\nv -0.017472 -0.070313 0.076353\nvn -0.8489 0.4015 0.3437\nv -0.017731 -0.071007 0.076523\nvn -0.8489 0.4015 0.3437\nv -0.017598 -0.071534 0.077467\nvn -0.8489 0.4015 0.3437\nv -0.017598 -0.071534 0.077467\nvn -0.0194 0.6749 0.7377\nv -0.01771 0.071869 0.077805\nvn -0.973 -0.1912 0.1296\nv -0.017748 0.071349 0.076753\nvn -0.973 -0.1912 0.1296\nv -0.017679 0.070839 0.076516\nvn -0.973 -0.1912 0.1296\nv -0.017457 0.071026 0.077002\nvn -0.7175 -0.581 0.3841\nv -0.017452 0.071703 0.078036\nvn -0.7175 -0.581 0.3841\nv -0.01771 0.071869 0.077805\nvn -0.7175 -0.581 0.3841\nv -0.017457 0.071026 0.077002\nvn -0.563 -0.6521 0.5077\nv -0.01771 0.071869 0.077805\nvn -0.563 -0.6521 0.5077\nv -0.017679 0.070839 0.076516\nvn -0.563 -0.6521 0.5077\nv -0.017598 -0.071534 0.077467\nvn -0.7258 0.5521 0.4103\nv -0.017731 -0.071007 0.076523\nvn -0.7258 0.5521 0.4103\nv -0.01774 -0.071932 0.077753\nvn -0.7258 0.5521 0.4103\nv -0.017433 -0.070974 0.076959\nvn -0.6279 0.6164 0.4751\nv -0.017598 -0.071534 0.077467\nvn -0.6279 0.6164 0.4751\nv -0.017388 -0.071522 0.07773\nvn -0.6279 0.6164 0.4751\nv -0.01771 0.071869 0.077805\nvn -0.7966 -0.5716 0.1966\nv -0.017487 0.071987 0.079052\nvn -0.7966 -0.5716 0.1966\nv -0.017741 0.072335 0.079033\nvn -0.7966 -0.5716 0.1966\nv -0.017452 0.071703 0.078036\nvn -0.6434 -0.7427 0.1855\nv -0.017487 0.071987 0.079052\nvn -0.6434 -0.7427 0.1855\nv -0.01771 0.071869 0.077805\nvn -0.6434 -0.7427 0.1855\nv -0.017487 0.071987 0.079052\nvn -0.8059 -0.5912 -0.0299\nv -0.017718 0.07222 0.080671\nvn -0.8059 -0.5912 -0.0299\nv -0.017741 0.072335 0.079033\nvn -0.8059 -0.5912 -0.0299\nv -0.017461 0.07203 0.079681\nvn -0.3783 -0.9223 0.0788\nv -0.017718 0.07222 0.080671\nvn -0.3783 -0.9223 0.0788\nv -0.017487 0.071987 0.079052\nvn -0.3783 -0.9223 0.0788\nv -0.017476 0.07196 0.080471\nvn -0.7593 -0.6467 -0.0728\nv -0.017718 0.07222 0.080671\nvn -0.7593 -0.6467 -0.0728\nv -0.017461 0.07203 0.079681\nvn -0.7593 -0.6467 -0.0728\nv -0.017564 -0.072106 0.080069\nvn -0.8306 0.5532 0.0644\nv -0.017721 -0.072178 0.078662\nvn -0.8306 0.5532 0.0644\nv -0.017741 -0.072382 0.080162\nvn -0.8306 0.5532 0.0644\nv -0.017721 -0.072178 0.078662\nvn -0.9011 0.4135 0.1305\nv -0.017598 -0.071534 0.077467\nvn -0.9011 0.4135 0.1305\nv -0.01774 -0.071932 0.077753\nvn -0.9011 0.4135 0.1305\nv -0.017455 -0.071909 0.078683\nvn -0.6917 0.663 0.2864\nv -0.017598 -0.071534 0.077467\nvn -0.6917 0.663 0.2864\nv -0.017721 -0.072178 0.078662\nvn -0.6917 0.663 0.2864\nv -0.017342 -0.071996 0.079401\nvn -0.0898 0.987 0.133\nv -0.017455 -0.071909 0.078683\nvn -0.0898 0.987 0.133\nv -0.017564 -0.072106 0.080069\nvn -0.0898 0.987 0.133\nv -0.017455 -0.071909 0.078683\nvn -0.4371 0.8435 0.3121\nv -0.017388 -0.071522 0.07773\nvn -0.4371 0.8435 0.3121\nv -0.017598 -0.071534 0.077467\nvn -0.4371 0.8435 0.3121\nv -0.017366 -0.071951 0.080436\nvn -0.5585 0.828 -0.0491\nv -0.017342 -0.071996 0.079401\nvn -0.5585 0.828 -0.0491\nv -0.017564 -0.072106 0.080069\nvn -0.5585 0.828 -0.0491\nv -0.017455 -0.071909 0.078683\nvn -0.7116 0.7013 0.0436\nv -0.017721 -0.072178 0.078662\nvn -0.7116 0.7013 0.0436\nv -0.017564 -0.072106 0.080069\nvn -0.7116 0.7013 0.0436\nv -0.017476 0.07196 0.080471\nvn -0.7845 -0.5971 -0.1677\nv -0.017495 0.070797 0.084693\nvn -0.7845 -0.5971 -0.1677\nv -0.017718 0.07222 0.080671\nvn -0.7845 -0.5971 -0.1677\nv -0.017718 0.07222 0.080671\nvn -0.5728 -0.7822 -0.245\nv -0.017495 0.070797 0.084693\nvn -0.5728 -0.7822 -0.245\nv -0.01774 0.06959 0.089122\nvn -0.5728 -0.7822 -0.245\nv -0.01774 0.06959 0.089122\nvn -0.7302 -0.6479 -0.2171\nv -0.017495 0.070797 0.084693\nvn -0.7302 -0.6479 -0.2171\nv -0.017492 0.069332 0.089058\nvn -0.7302 -0.6479 -0.2171\nv -0.017464 -0.070752 0.084811\nvn -0.6324 0.7369 -0.2389\nv -0.017673 -0.069612 0.08888\nvn -0.6324 0.7369 -0.2389\nv -0.017427 -0.069417 0.088831\nvn -0.6324 0.7369 -0.2389\nv -0.017719 -0.070987 0.084956\nvn -0.7257 0.6519 -0.2199\nv -0.017673 -0.069612 0.08888\nvn -0.7257 0.6519 -0.2199\nv -0.017464 -0.070752 0.084811\nvn -0.7257 0.6519 -0.2199\nv -0.017673 -0.069612 0.08888\nvn -0.8872 0.4385 -0.1433\nv -0.017719 -0.070987 0.084956\nvn -0.8872 0.4385 -0.1433\nv -0.017751 -0.069602 0.089388\nvn -0.8872 0.4385 -0.1433\nv -0.017564 -0.072106 0.080069\nvn -0.8547 0.4995 -0.1415\nv -0.017741 -0.072382 0.080162\nvn -0.8547 0.4995 -0.1415\nv -0.017719 -0.070987 0.084956\nvn -0.8547 0.4995 -0.1415\nv -0.017464 -0.070752 0.084811\nvn -0.7194 0.6718 -0.1767\nv -0.017564 -0.072106 0.080069\nvn -0.7194 0.6718 -0.1767\nv -0.017719 -0.070987 0.084956\nvn -0.7194 0.6718 -0.1767\nv -0.017464 -0.070752 0.084811\nvn -0.2464 0.9333 -0.2613\nv -0.017366 -0.071951 0.080436\nvn -0.2464 0.9333 -0.2613\nv -0.017564 -0.072106 0.080069\nvn -0.2464 0.9333 -0.2613\nv -0.017719 -0.06869 0.09033\nvn -0.9702 0.1893 -0.1509\nv -0.017673 -0.069612 0.08888\nvn -0.9702 0.1893 -0.1509\nv -0.017751 -0.069602 0.089388\nvn -0.9702 0.1893 -0.1509\nv -0.017437 -0.068815 0.089784\nvn -0.572 0.6839 -0.4529\nv -0.017673 -0.069612 0.08888\nvn -0.572 0.6839 -0.4529\nv -0.017719 -0.06869 0.09033\nvn -0.572 0.6839 -0.4529\nv -0.017437 -0.068815 0.089784\nvn -0.6131 0.6654 -0.4258\nv -0.017427 -0.069417 0.088831\nvn -0.6131 0.6654 -0.4258\nv -0.017673 -0.069612 0.08888\nvn -0.6131 0.6654 -0.4258\nv -0.017443 -0.067 0.090998\nvn -0.702 0.3346 -0.6287\nv -0.017627 -0.067964 0.090691\nvn -0.702 0.3346 -0.6287\nv -0.017721 -0.067116 0.091247\nvn -0.702 0.3346 -0.6287\nv -0.017443 -0.067 0.090998\nvn -0.5699 0.3464 -0.7451\nv -0.01739 -0.068049 0.090469\nvn -0.5699 0.3464 -0.7451\nv -0.017627 -0.067964 0.090691\nvn -0.5699 0.3464 -0.7451\nv -0.017721 -0.067116 0.091247\nvn -0.5005 0.4354 -0.7483\nv -0.017627 -0.067964 0.090691\nvn -0.5005 0.4354 -0.7483\nv -0.017719 -0.06869 0.09033\nvn -0.5005 0.4354 -0.7483\nv -0.017627 -0.067964 0.090691\nvn -0.4 0.6246 -0.6707\nv -0.01739 -0.068049 0.090469\nvn -0.4 0.6246 -0.6707\nv -0.017437 -0.068815 0.089784\nvn -0.4 0.6246 -0.6707\nv -0.017719 -0.06869 0.09033\nvn -0.7983 0.3461 -0.4929\nv -0.017627 -0.067964 0.090691\nvn -0.7983 0.3461 -0.4929\nv -0.017437 -0.068815 0.089784\nvn -0.7983 0.3461 -0.4929\nv -0.017755 0.067268 0.091213\nvn -0.7942 -0.2083 -0.5709\nv -0.017523 0.067513 0.090801\nvn -0.7942 -0.2083 -0.5709\nv -0.017516 0.06672 0.09108\nvn -0.7942 -0.2083 -0.5709\nv -0.017755 0.067268 0.091213\nvn -0.7047 -0.3602 -0.6113\nv -0.017447 0.068459 0.090156\nvn -0.7047 -0.3602 -0.6113\nv -0.017523 0.067513 0.090801\nvn -0.7047 -0.3602 -0.6113\nv -0.017755 0.067268 0.091213\nvn -0.5855 -0.4481 -0.6756\nv -0.017721 0.068677 0.090248\nvn -0.5855 -0.4481 -0.6756\nv -0.017447 0.068459 0.090156\nvn -0.5855 -0.4481 -0.6756\nv -0.017721 0.068677 0.090248\nvn -0.6438 -0.6116 -0.4599\nv -0.017492 0.069332 0.089058\nvn -0.6438 -0.6116 -0.4599\nv -0.017447 0.068459 0.090156\nvn -0.6438 -0.6116 -0.4599\nv -0.017721 0.068677 0.090248\nvn -0.6987 -0.5617 -0.4431\nv -0.01774 0.06959 0.089122\nvn -0.6987 -0.5617 -0.4431\nv -0.017492 0.069332 0.089058\nvn -0.6987 -0.5617 -0.4431\nv -0.017715 -0.065856 0.091437\nvn -0.6881 0.1113 -0.717\nv -0.017443 -0.067 0.090998\nvn -0.6881 0.1113 -0.717\nv -0.017721 -0.067116 0.091247\nvn -0.6881 0.1113 -0.717\nv -0.017444 -0.065945 0.09119\nvn -0.6428 0.1363 -0.7538\nv -0.017443 -0.067 0.090998\nvn -0.6428 0.1363 -0.7538\nv -0.017715 -0.065856 0.091437\nvn -0.6428 0.1363 -0.7538\nv -0.017755 0.067268 0.091213\nvn -0.7377 -0.1154 -0.6652\nv -0.017548 0.065986 0.091206\nvn -0.7377 -0.1154 -0.6652\nv -0.01774 0.066021 0.091413\nvn -0.7377 -0.1154 -0.6652\nv -0.017516 0.06672 0.09108\nvn -0.6492 -0.1006 -0.7539\nv -0.017548 0.065986 0.091206\nvn -0.6492 -0.1006 -0.7539\nv -0.017755 0.067268 0.091213\nvn -0.6492 -0.1006 -0.7539\nv -0.017612 -0.015172 0.091302\nvn -0.554 0 -0.8325\nv -0.017443 0.023103 0.09119\nvn -0.554 0 -0.8325\nv -0.017444 -0.065945 0.09119\nvn -0.554 0 -0.8325\nv -0.017548 0.065986 0.091206\nvn -0.7327 -0.0003 -0.6806\nv -0.017538 0.041109 0.091204\nvn -0.7327 -0.0003 -0.6806\nv -0.01774 0.066021 0.091413\nvn -0.7327 -0.0003 -0.6806\nv -0.017612 -0.015172 0.091302\nvn -0.674 -0.0006 -0.7388\nv -0.017444 -0.065945 0.09119\nvn -0.674 -0.0006 -0.7388\nv -0.017715 -0.065856 0.091437\nvn -0.674 -0.0006 -0.7388\nv -0.017443 0.023103 0.09119\nvn -0.6637 0.0007 -0.748\nv -0.017612 -0.015172 0.091302\nvn -0.6637 0.0007 -0.748\nv -0.017717 0.021817 0.091432\nvn -0.6637 0.0007 -0.748\nv -0.017538 0.041109 0.091204\nvn -0.6992 0.0003 -0.7149\nv -0.017721 0.029188 0.091378\nvn -0.6992 0.0003 -0.7149\nv -0.01774 0.066021 0.091413\nvn -0.6992 0.0003 -0.7149\nv -0.017717 0.021817 0.091432\nvn -0.7837 -0.0001 -0.6212\nv -0.017612 -0.015172 0.091302\nvn -0.7837 -0.0001 -0.6212\nv -0.017715 -0.065856 0.091437\nvn -0.7837 -0.0001 -0.6212\nv -0.017721 0.029188 0.091378\nvn -0.6459 -0.006 -0.7634\nv -0.017443 0.023103 0.09119\nvn -0.6459 -0.006 -0.7634\nv -0.017717 0.021817 0.091432\nvn -0.6459 -0.006 -0.7634\nv -0.017721 0.029188 0.091378\nvn -0.597 -0.0025 -0.8022\nv -0.017538 0.041109 0.091204\nvn -0.597 -0.0025 -0.8022\nv -0.017443 0.023103 0.09119\nvn -0.597 -0.0025 -0.8022\nv -0.015744 -0.034948 0.101046\nvn 0.0174 0.9998 2.13089e-18\nv -0.01275 -0.035 0.095417\nvn 0.0174 0.9998 2.13089e-18\nv -0.015413 -0.034953 0.095371\nvn 0.0174 0.9998 2.13089e-18\nv -0.01275 -0.035 0.107949\nvn 0.0173 0.9999 0.0001\nv -0.014794 -0.034964 0.10695\nvn 0.0173 0.9999 2.11864e-18\nv -0.013649 -0.034984 0.107921\nvn 0.0174 0.9998 2.13089e-18\nv -0.014348 -0.034972 0.107606\nvn 0.0175 0.9998 -0.0001\nv -0.003617 -0.098799 0.116404\nvn -0.5221 -0.0008 0.8529\nv -0.003215 -0.098159 0.116651\nvn -0.5221 -0.0008 0.8529\nv -0.003291 -0.045057 0.116657\nvn -0.5221 -0.0008 0.8529\nv -0.003617 -0.098799 0.116404\nvn -0.6668 0.0005 0.7453\nv -0.003291 -0.045057 0.116657\nvn -0.6668 0.0005 0.7453\nv -0.003953 -0.045069 0.116064\nvn -0.6668 0.0005 0.7453\nv -0.0039 -0.0987 0.116067\nvn -0.7658 -0.0007 0.6431\nv -0.003617 -0.098799 0.116404\nvn -0.7658 -0.0007 0.6431\nv -0.003953 -0.045069 0.116064\nvn -0.7658 -0.0007 0.6431\nv -0.003997 -0.098624 0.115724\nvn -0.9628 -0.0009 0.2702\nv -0.0039 -0.0987 0.116067\nvn -0.9628 -0.0009 0.2702\nv -0.003953 -0.045069 0.116064\nvn -0.9628 -0.0009 0.2702\nv -0.003621 -0.100969 0.114977\nvn -0.2987 -0.7799 0.55\nv -0.003239 -0.101441 0.114516\nvn -0.2987 -0.7799 0.55\nv -0.003143 -0.100911 0.115318\nvn -0.2987 -0.7799 0.55\nv -0.003276 -0.100118 0.115981\nvn -0.402 -0.6253 0.6688\nv -0.003621 -0.100969 0.114977\nvn -0.402 -0.6253 0.6688\nv -0.003143 -0.100911 0.115318\nvn -0.402 -0.6253 0.6688\nv -0.003636 -0.099987 0.115842\nvn -0.466 -0.5891 0.6602\nv -0.003621 -0.100969 0.114977\nvn -0.466 -0.5891 0.6602\nv -0.003276 -0.100118 0.115981\nvn -0.466 -0.5891 0.6602\nv -0.003882 -0.099894 0.115548\nvn -0.7524 -0.442 0.4884\nv -0.003621 -0.100969 0.114977\nvn -0.7524 -0.442 0.4884\nv -0.003636 -0.099987 0.115842\nvn -0.7524 -0.442 0.4884\nv -0.003882 -0.099894 0.115548\nvn -0.7959 -0.4232 0.433\nv -0.00396 -0.100551 0.114762\nvn -0.7959 -0.4232 0.433\nv -0.003621 -0.100969 0.114977\nvn -0.7959 -0.4232 0.433\nv -0.003617 -0.098799 0.116404\nvn -0.4139 -0.3735 0.8302\nv -0.003276 -0.100118 0.115981\nvn -0.4139 -0.3735 0.8302\nv -0.003144 -0.099187 0.116465\nvn -0.4139 -0.3735 0.8302\nv -0.003617 -0.098799 0.116404\nvn -0.4473 -0.3761 0.8115\nv -0.003636 -0.099987 0.115842\nvn -0.4473 -0.3761 0.8115\nv -0.003276 -0.100118 0.115981\nvn -0.4473 -0.3761 0.8115\nv -0.00396 -0.100551 0.114762\nvn -0.9808 -0.0902 0.1732\nv -0.003882 -0.099894 0.115548\nvn -0.9808 -0.0902 0.1732\nv -0.0039 -0.0987 0.116067\nvn -0.9808 -0.0902 0.1732\nv -0.0039 -0.0987 0.116067\nvn -0.7791 -0.2592 0.5708\nv -0.003882 -0.099894 0.115548\nvn -0.7802 -0.2592 0.5693\nv -0.003636 -0.099987 0.115842\nvn -0.7766 -0.2593 0.5741\nv -0.003617 -0.098799 0.116404\nvn -0.7756 -0.2593 0.5755\nv -0.003997 -0.098624 0.115724\nvn -0.9612 -0.1375 0.2394\nv -0.00396 -0.100551 0.114762\nvn -0.9612 -0.1375 0.2394\nv -0.0039 -0.0987 0.116067\nvn -0.9612 -0.1375 0.2394\nv -0.003215 -0.098159 0.116651\nvn -0.2775 -0.189 0.942\nv -0.003617 -0.098799 0.116404\nvn -0.2775 -0.189 0.942\nv -0.003144 -0.099187 0.116465\nvn -0.2775 -0.189 0.942\nv -0.00396 -0.100551 0.114762\nvn -0.9689 -0.2313 0.0875\nv -0.003989 -0.101938 0.110778\nvn -0.9689 -0.2313 0.0875\nv -0.003884 -0.101493 0.113117\nvn -0.9689 -0.2313 0.0875\nv -0.003797 -0.102235 0.111186\nvn -0.5762 -0.7895 0.2114\nv -0.003307 -0.102561 0.111305\nvn -0.5762 -0.7895 0.2114\nv -0.003541 -0.101918 0.113069\nvn -0.5762 -0.7895 0.2114\nv -0.003541 -0.101918 0.113069\nvn -0.2938 -0.9099 0.2928\nv -0.003307 -0.102561 0.111305\nvn -0.2938 -0.9099 0.2928\nv -0.003127 -0.101995 0.113243\nvn -0.2938 -0.9099 0.2928\nv -0.003797 -0.102235 0.111186\nvn -0.7958 -0.6009 0.0743\nv -0.003934 -0.102378 0.108566\nvn -0.7958 -0.6009 0.0743\nv -0.003597 -0.102785 0.108877\nvn -0.7958 -0.6009 0.0743\nv -0.003989 -0.101938 0.110778\nvn -0.8797 -0.4701 0.0715\nv -0.003934 -0.102378 0.108566\nvn -0.8797 -0.4701 0.0715\nv -0.003797 -0.102235 0.111186\nvn -0.8797 -0.4701 0.0715\nv -0.003884 -0.101493 0.113117\nvn -0.7492 -0.6289 0.2079\nv -0.003797 -0.102235 0.111186\nvn -0.7492 -0.6289 0.2079\nv -0.003541 -0.101918 0.113069\nvn -0.7492 -0.6289 0.2079\nv -0.003541 -0.101918 0.113069\nvn -0.3146 -0.88 0.3558\nv -0.003127 -0.101995 0.113243\nvn -0.3146 -0.88 0.3558\nv -0.003239 -0.101441 0.114516\nvn -0.3146 -0.88 0.3558\nv -0.003307 -0.102561 0.111305\nvn -0.4007 -0.9067 0.1317\nv -0.003597 -0.102785 0.108877\nvn -0.4007 -0.9067 0.1317\nv -0.003201 -0.102957 0.108899\nvn -0.4007 -0.9067 0.1317\nv -0.003797 -0.102235 0.111186\nvn -0.5718 -0.8078 0.143\nv -0.003597 -0.102785 0.108877\nvn -0.5718 -0.8078 0.143\nv -0.003307 -0.102561 0.111305\nvn -0.5718 -0.8078 0.143\nv -0.003884 -0.101493 0.113117\nvn -0.9008 -0.4173 0.1198\nv -0.003989 -0.101938 0.110778\nvn -0.9008 -0.4173 0.1198\nv -0.003797 -0.102235 0.111186\nvn -0.9008 -0.4173 0.1198\nv -0.003541 -0.101918 0.113069\nvn -0.5175 -0.7747 0.3634\nv -0.003239 -0.101441 0.114516\nvn -0.5175 -0.7747 0.3634\nv -0.003621 -0.100969 0.114977\nvn -0.5175 -0.7747 0.3634\nv -0.003884 -0.101493 0.113117\nvn -0.8109 -0.5234 0.2619\nv -0.003621 -0.100969 0.114977\nvn -0.8109 -0.5234 0.2619\nv -0.00396 -0.100551 0.114762\nvn -0.8109 -0.5234 0.2619\nv -0.003884 -0.101493 0.113117\nvn -0.7314 -0.6224 0.2786\nv -0.003541 -0.101918 0.113069\nvn -0.7314 -0.6224 0.2786\nv -0.003621 -0.100969 0.114977\nvn -0.7314 -0.6224 0.2786\nv -0.003512 -0.102857 0.096764\nvn -0.3982 -0.9173 0.0026\nv -0.003201 -0.102957 0.108899\nvn -0.3982 -0.9173 0.0026\nv -0.003597 -0.102785 0.108877\nvn -0.3982 -0.9173 0.0026\nv -0.003512 -0.102857 0.096764\nvn -0.2555 -0.9668 -0.0015\nv -0.003161 -0.102948 0.096314\nvn -0.2555 -0.9668 -0.0015\nv -0.003201 -0.102957 0.108899\nvn -0.2555 -0.9668 -0.0015\nv -0.003899 -0.102404 0.096019\nvn -0.7705 -0.6374 -0.0008\nv -0.003597 -0.102785 0.108877\nvn -0.7705 -0.6374 -0.0008\nv -0.003934 -0.102378 0.108566\nvn -0.7705 -0.6374 -0.0008\nv -0.003899 -0.102404 0.096019\nvn -0.7585 -0.6516 -0.0015\nv -0.003512 -0.102857 0.096764\nvn -0.7585 -0.6516 -0.0015\nv -0.003597 -0.102785 0.108877\nvn -0.7585 -0.6516 -0.0015\nv -0.003996 -0.101836 0.094545\nvn -0.9924 -0.1229 -0.0004\nv -0.003934 -0.102378 0.108566\nvn -0.9924 -0.1229 -0.0004\nv -0.003989 -0.101938 0.110778\nvn -0.9924 -0.1229 -0.0004\nv -0.003996 -0.101836 0.094545\nvn -0.9846 -0.1749 -0.0024\nv -0.003899 -0.102404 0.096019\nvn -0.9846 -0.1749 -0.0024\nv -0.003934 -0.102378 0.108566\nvn -0.9846 -0.1749 -0.0024\nv -0.003589 -0.101162 0.090552\nvn -0.4057 -0.7826 -0.4722\nv -0.003581 -0.099972 0.088572\nvn -0.4057 -0.7826 -0.4722\nv -0.003133 -0.100727 0.089438\nvn -0.4057 -0.7826 -0.4722\nv -0.003292 -0.097728 0.085819\nvn 0.0075 -0.6542 -0.7563\nv -0.003142 -0.096726 0.084953\nvn 0.0075 -0.6542 -0.7563\nv -0.002632 -0.096684 0.084922\nvn 0.0075 -0.6542 -0.7563\nv -0.003966 -0.100627 0.090568\nvn -0.7639 -0.555 -0.3293\nv -0.003885 -0.099679 0.088783\nvn -0.7639 -0.555 -0.3293\nv -0.003581 -0.099972 0.088572\nvn -0.7639 -0.555 -0.3293\nv -0.003966 -0.100627 0.090568\nvn -0.778 -0.537 -0.3261\nv -0.003581 -0.099972 0.088572\nvn -0.778 -0.537 -0.3261\nv -0.003589 -0.101162 0.090552\nvn -0.778 -0.537 -0.3261\nv -0.00354 -0.102132 0.092884\nvn -0.312 -0.8906 -0.3308\nv -0.003209 -0.101592 0.091117\nvn -0.312 -0.8906 -0.3308\nv -0.003133 -0.10222 0.092736\nvn -0.312 -0.8906 -0.3308\nv -0.003292 -0.097728 0.085819\nvn -0.4295 -0.5526 -0.7142\nv -0.003682 -0.096662 0.085229\nvn -0.4295 -0.5526 -0.7142\nv -0.003142 -0.096726 0.084953\nvn -0.4295 -0.5526 -0.7142\nv -0.00354 -0.102132 0.092884\nvn -0.4397 -0.8326 -0.3369\nv -0.003589 -0.101162 0.090552\nvn -0.4397 -0.8326 -0.3369\nv -0.003209 -0.101592 0.091117\nvn -0.4397 -0.8326 -0.3369\nv -0.003767 -0.098154 0.086643\nvn -0.5702 -0.5477 -0.6123\nv -0.003682 -0.096662 0.085229\nvn -0.5702 -0.5477 -0.6123\nv -0.003292 -0.097728 0.085819\nvn -0.5702 -0.5477 -0.6123\nv -0.003885 -0.101806 0.09312\nvn -0.7993 -0.5548 -0.231\nv -0.003966 -0.100627 0.090568\nvn -0.7993 -0.5548 -0.231\nv -0.003589 -0.101162 0.090552\nvn -0.7993 -0.5548 -0.231\nv -0.003885 -0.101806 0.09312\nvn -0.7487 -0.6175 -0.2409\nv -0.003589 -0.101162 0.090552\nvn -0.7487 -0.6175 -0.2409\nv -0.00354 -0.102132 0.092884\nvn -0.7487 -0.6175 -0.2409\nv -0.003767 -0.098154 0.086643\nvn -0.8645 -0.3189 -0.3885\nv -0.003992 -0.096543 0.085821\nvn -0.8645 -0.3189 -0.3885\nv -0.003682 -0.096662 0.085229\nvn -0.8645 -0.3189 -0.3885\nv -0.00354 -0.102132 0.092884\nvn -0.2899 -0.9237 -0.2503\nv -0.003133 -0.10222 0.092736\nvn -0.2899 -0.9237 -0.2503\nv -0.003133 -0.102627 0.09424\nvn -0.2899 -0.9237 -0.2503\nv -0.003996 -0.101836 0.094545\nvn -0.9674 -0.2402 -0.0803\nv -0.003966 -0.100627 0.090568\nvn -0.9674 -0.2402 -0.0803\nv -0.003885 -0.101806 0.09312\nvn -0.9674 -0.2402 -0.0803\nv -0.00396 -0.098091 0.087094\nvn -0.8918 -0.2981 -0.3403\nv -0.003992 -0.096543 0.085821\nvn -0.8918 -0.2981 -0.3403\nv -0.003767 -0.098154 0.086643\nvn -0.8918 -0.2981 -0.3403\nv -0.003885 -0.101806 0.09312\nvn -0.7359 -0.6553 -0.1701\nv -0.00354 -0.102132 0.092884\nvn -0.7359 -0.6553 -0.1701\nv -0.003603 -0.102602 0.094965\nvn -0.7359 -0.6553 -0.1701\nv -0.003603 -0.102602 0.094965\nvn -0.38 -0.8997 -0.2145\nv -0.00354 -0.102132 0.092884\nvn -0.38 -0.8997 -0.2145\nv -0.003133 -0.102627 0.09424\nvn -0.38 -0.8997 -0.2145\nv -0.003899 -0.102404 0.096019\nvn -0.813 -0.5695 -0.1213\nv -0.003885 -0.101806 0.09312\nvn -0.813 -0.5695 -0.1213\nv -0.003603 -0.102602 0.094965\nvn -0.813 -0.5695 -0.1213\nv -0.003603 -0.102602 0.094965\nvn -0.2836 -0.9471 -0.1504\nv -0.003133 -0.102627 0.09424\nvn -0.2836 -0.9471 -0.1504\nv -0.003161 -0.102948 0.096314\nvn -0.2836 -0.9471 -0.1504\nv -0.003996 -0.101836 0.094545\nvn -0.9272 -0.3659 -0.0798\nv -0.003885 -0.101806 0.09312\nvn -0.9272 -0.3659 -0.0798\nv -0.003899 -0.102404 0.096019\nvn -0.9272 -0.3659 -0.0798\nv -0.003512 -0.102857 0.096764\nvn -0.3825 -0.9173 -0.1104\nv -0.003603 -0.102602 0.094965\nvn -0.3825 -0.9173 -0.1104\nv -0.003161 -0.102948 0.096314\nvn -0.3825 -0.9173 -0.1104\nv -0.003767 -0.098154 0.086643\nvn -0.4833 -0.6321 -0.6057\nv -0.003292 -0.097728 0.085819\nvn -0.4833 -0.6321 -0.6057\nv -0.003253 -0.099308 0.087437\nvn -0.4833 -0.6321 -0.6057\nv -0.003581 -0.099972 0.088572\nvn -0.5764 -0.6217 -0.5303\nv -0.003767 -0.098154 0.086643\nvn -0.5764 -0.6217 -0.5303\nv -0.003253 -0.099308 0.087437\nvn -0.5764 -0.6217 -0.5303\nv -0.003899 -0.102404 0.096019\nvn -0.7032 -0.7081 -0.0645\nv -0.003603 -0.102602 0.094965\nvn -0.7032 -0.7081 -0.0645\nv -0.003512 -0.102857 0.096764\nvn -0.7032 -0.7081 -0.0645\nv -0.00396 -0.098091 0.087094\nvn -0.9977 -0.0542 -0.0412\nv -0.003966 -0.100627 0.090568\nvn -0.9977 -0.0542 -0.0412\nv -0.003992 -0.096543 0.085821\nvn -0.9977 -0.0542 -0.0412\nv -0.003589 -0.101162 0.090552\nvn -0.2884 -0.8458 -0.4488\nv -0.003133 -0.100727 0.089438\nvn -0.2884 -0.8458 -0.4488\nv -0.003209 -0.101592 0.091117\nvn -0.2884 -0.8458 -0.4488\nv -0.003885 -0.099679 0.088783\nvn -0.7649 -0.504 -0.4012\nv -0.003767 -0.098154 0.086643\nvn -0.7649 -0.504 -0.4012\nv -0.003581 -0.099972 0.088572\nvn -0.7649 -0.504 -0.4012\nv -0.003581 -0.099972 0.088572\nvn -0.2813 -0.7907 -0.5437\nv -0.003253 -0.099308 0.087437\nvn -0.2813 -0.7907 -0.5437\nv -0.003133 -0.100727 0.089438\nvn -0.2813 -0.7907 -0.5437\nv -0.003885 -0.099679 0.088783\nvn -0.8682 -0.3803 -0.3187\nv -0.00396 -0.098091 0.087094\nvn -0.8682 -0.3803 -0.3187\nv -0.003767 -0.098154 0.086643\nvn -0.8682 -0.3803 -0.3187\nv -0.003966 -0.100627 0.090568\nvn -0.9645 -0.2124 -0.1566\nv -0.00396 -0.098091 0.087094\nvn -0.9645 -0.2124 -0.1566\nv -0.003885 -0.099679 0.088783\nvn -0.9645 -0.2124 -0.1566\nv -0.003215 -0.098159 0.116651\nvn 0.0118 -0.0001 0.9999\nv -0.001409 -0.096978 0.116629\nvn 0.0118 -0.0001 0.9999\nv -0.003291 -0.045057 0.116657\nvn 0.0118 -0.0001 0.9999\nv -0.001409 -0.096978 0.116629\nvn 0.0474 0.0012 0.9989\nv -0.000663 -0.096552 0.116593\nvn 0.0474 0.0012 0.9989\nv -0.003291 -0.045057 0.116657\nvn 0.0474 0.0012 0.9989\nv -0.003215 -0.098159 0.116651\nvn 0.0344 -0.0348 0.9988\nv -0.002283 -0.098648 0.116601\nvn 0.0344 -0.0348 0.9988\nv -0.001409 -0.096978 0.116629\nvn 0.0344 -0.0348 0.9988\nv -0.003291 -0.045057 0.116657\nvn 0.0053 -0.0009 1\nv -1.76655e-18 -0.096429 0.116592\nvn 0.0098 -0.0006 1\nv -1.76937e-18 -0.045 0.116615\nvn 0.0129 -0.0004 0.9999\nv -0.000663 -0.096552 0.116593\nvn 0.0022 -0.0011 1\nv -0.003292 -0.097728 0.085819\nvn 0.0173 -0.6577 -0.7531\nv -0.002632 -0.096684 0.084922\nvn 0.0173 -0.6577 -0.7531\nv -0.002213 -0.097242 0.08542\nvn 0.0173 -0.6577 -0.7531\nv -0.00225 -0.099011 0.087114\nvn 0.0445 -0.6916 -0.7209\nv -0.003292 -0.097728 0.085819\nvn 0.0445 -0.6916 -0.7209\nv -0.002213 -0.097242 0.08542\nvn 0.0445 -0.6916 -0.7209\nv -0.003253 -0.099308 0.087437\nvn -0.0126 -0.7155 -0.6985\nv -0.003292 -0.097728 0.085819\nvn -0.0126 -0.7155 -0.6985\nv -0.00225 -0.099011 0.087114\nvn -0.0126 -0.7155 -0.6985\nv -0.002225 -0.10087 0.089703\nvn 0.0509 -0.8114 -0.5822\nv -0.003253 -0.099308 0.087437\nvn 0.0438 -0.8133 -0.5803\nv -0.00225 -0.099011 0.087114\nvn 0.053 -0.8109 -0.5828\nv -0.003133 -0.100727 0.089438\nvn 0.041 -0.814 -0.5795\nv -0.003209 -0.101592 0.091117\nvn -0.0063 -0.8889 -0.4581\nv -0.003133 -0.100727 0.089438\nvn -0.0063 -0.8889 -0.4581\nv -0.002225 -0.10087 0.089703\nvn -0.0063 -0.8889 -0.4581\nv -0.002261 -0.102063 0.092311\nvn 0.0704 -0.9074 -0.4142\nv -0.003209 -0.101592 0.091117\nvn 0.0704 -0.9074 -0.4142\nv -0.002225 -0.10087 0.089703\nvn 0.0704 -0.9074 -0.4142\nv -0.003133 -0.10222 0.092736\nvn -0.0086 -0.9324 -0.3613\nv -0.003209 -0.101592 0.091117\nvn -0.0086 -0.9324 -0.3613\nv -0.002261 -0.102063 0.092311\nvn -0.0086 -0.9324 -0.3613\nv -0.002211 -0.102564 0.094114\nvn 0.0406 -0.9628 -0.2673\nv -0.003133 -0.10222 0.092736\nvn 0.0329 -0.9644 -0.2625\nv -0.002261 -0.102063 0.092311\nvn 0.0422 -0.9624 -0.2683\nv -0.003133 -0.102627 0.09424\nvn 0.031 -0.9647 -0.2613\nv -0.002241 -0.102841 0.095648\nvn 0.0437 -0.9832 -0.177\nv -0.003133 -0.102627 0.09424\nvn 0.0437 -0.9832 -0.177\nv -0.002211 -0.102564 0.094114\nvn 0.0437 -0.9832 -0.177\nv -0.003161 -0.102948 0.096314\nvn 0.0046 -0.9882 -0.1529\nv -0.003133 -0.102627 0.09424\nvn 0.0046 -0.9882 -0.1529\nv -0.002241 -0.102841 0.095648\nvn 0.0046 -0.9882 -0.1529\nv -0.002202 -0.102952 0.097221\nvn 0.064 -0.9954 -0.072\nv -0.003161 -0.102948 0.096314\nvn 0.064 -0.9954 -0.072\nv -0.002241 -0.102841 0.095648\nvn 0.064 -0.9954 -0.072\nv -0.002202 -0.102952 0.097221\nvn -0.0047 -1 -0.0008\nv -0.003201 -0.102957 0.108899\nvn -0.0039 -1 -0.0007\nv -0.003161 -0.102948 0.096314\nvn -0.0034 -1 -0.0007\nv -0.002248 -0.102962 0.108255\nvn -0.0052 -1 -0.0009\nv -0.003201 -0.102957 0.108899\nvn 0.0492 -0.9956 0.0797\nv -0.002248 -0.102962 0.108255\nvn 0.0492 -0.9956 0.0797\nv -0.002312 -0.102825 0.11\nvn 0.0492 -0.9956 0.0797\nv -0.003307 -0.102561 0.111305\nvn -0.052 -0.9857 0.1601\nv -0.003201 -0.102957 0.108899\nvn -0.052 -0.9857 0.1601\nv -0.002312 -0.102825 0.11\nvn -0.052 -0.9857 0.1601\nv -0.003307 -0.102561 0.111305\nvn 0.0366 -0.9737 0.2251\nv -0.002312 -0.102825 0.11\nvn 0.0366 -0.9737 0.2251\nv -0.002295 -0.102218 0.112625\nvn 0.0366 -0.9737 0.2251\nv -0.003127 -0.101995 0.113243\nvn -0.0451 -0.9579 0.2836\nv -0.003307 -0.102561 0.111305\nvn -0.0451 -0.9579 0.2836\nv -0.002295 -0.102218 0.112625\nvn -0.0451 -0.9579 0.2836\nv -0.003239 -0.101441 0.114516\nvn 0.0549 -0.9136 0.4028\nv -0.002295 -0.102218 0.112625\nvn 0.0545 -0.9137 0.4026\nv -0.002232 -0.101228 0.114864\nvn 0.0536 -0.914 0.4022\nv -0.003127 -0.101995 0.113243\nvn 0.0554 -0.9135 0.403\nv -0.003143 -0.100911 0.115318\nvn -0.0149 -0.8339 0.5517\nv -0.003239 -0.101441 0.114516\nvn -0.0149 -0.8339 0.5517\nv -0.002232 -0.101228 0.114864\nvn -0.0149 -0.8339 0.5517\nv -0.003143 -0.100911 0.115318\nvn 0.0795 -0.7357 0.6726\nv -0.002232 -0.101228 0.114864\nvn 0.0795 -0.7357 0.6726\nv -0.00225 -0.100399 0.115773\nvn 0.0795 -0.7357 0.6726\nv -0.003276 -0.100118 0.115981\nvn -0.0214 -0.6427 0.7658\nv -0.003143 -0.100911 0.115318\nvn -0.0214 -0.6427 0.7658\nv -0.00225 -0.100399 0.115773\nvn -0.0214 -0.6427 0.7658\nv -0.003276 -0.100118 0.115981\nvn 0.0325 -0.5138 0.8573\nv -0.00225 -0.100399 0.115773\nvn 0.0325 -0.5138 0.8573\nv -0.002197 -0.099622 0.116237\nvn 0.0325 -0.5138 0.8573\nv -0.003144 -0.099187 0.116465\nvn 0.0016 -0.4619 0.8869\nv -0.003276 -0.100118 0.115981\nvn 0.0016 -0.4619 0.8869\nv -0.002197 -0.099622 0.116237\nvn 0.0016 -0.4619 0.8869\nv -0.003144 -0.099187 0.116465\nvn 0.0675 -0.3444 0.9364\nv -0.002197 -0.099622 0.116237\nvn 0.0675 -0.3444 0.9364\nv -0.002283 -0.098648 0.116601\nvn 0.0675 -0.3444 0.9364\nv -0.003215 -0.098159 0.116651\nvn -0.0427 -0.1801 0.9827\nv -0.003144 -0.099187 0.116465\nvn -0.0427 -0.1801 0.9827\nv -0.002283 -0.098648 0.116601\nvn -0.0427 -0.1801 0.9827\nv -0.000663 -0.096552 0.116593\nvn 0.2538 -0.3688 0.8942\nv -0.001409 -0.096978 0.116629\nvn 0.2538 -0.3688 0.8942\nv -0.001466 -0.097376 0.116482\nvn 0.2538 -0.3688 0.8942\nv -0.002283 -0.098648 0.116601\nvn 0.4975 -0.2409 0.8333\nv -0.001874 -0.098216 0.116482\nvn 0.4975 -0.2409 0.8333\nv -0.001466 -0.097376 0.116482\nvn 0.4975 -0.2409 0.8333\nv -0.001409 -0.096978 0.116629\nvn 0.6404 -0.3465 0.6854\nv -0.002283 -0.098648 0.116601\nvn 0.6404 -0.3465 0.6854\nv -0.001466 -0.097376 0.116482\nvn 0.6404 -0.3465 0.6854\nv -0.002197 -0.099622 0.116237\nvn 0.5138 -0.2608 0.8173\nv -0.001874 -0.098216 0.116482\nvn 0.5138 -0.2608 0.8173\nv -0.002283 -0.098648 0.116601\nvn 0.5138 -0.2608 0.8173\nv -0.001974 -0.09888 0.11623\nvn 0.8982 -0.2676 0.3488\nv -0.001874 -0.098216 0.116482\nvn 0.8982 -0.2676 0.3488\nv -0.002197 -0.099622 0.116237\nvn 0.8982 -0.2676 0.3488\nv -0.001974 -0.09888 0.11623\nvn 0.835 -0.2472 0.4916\nv -0.002197 -0.099622 0.116237\nvn 0.835 -0.2472 0.4916\nv -0.002012 -0.100134 0.115665\nvn 0.835 -0.2472 0.4916\nv -0.00205 -0.100901 0.115045\nvn 0.7332 -0.449 0.5106\nv -0.002012 -0.100134 0.115665\nvn 0.7332 -0.449 0.5106\nv -0.00225 -0.100399 0.115773\nvn 0.7332 -0.449 0.5106\nv -0.002232 -0.101228 0.114864\nvn 0.5407 -0.6161 0.5728\nv -0.00205 -0.100901 0.115045\nvn 0.5407 -0.6161 0.5728\nv -0.00225 -0.100399 0.115773\nvn 0.5407 -0.6161 0.5728\nv -0.002012 -0.100134 0.115665\nvn 0.7083 -0.3965 0.5841\nv -0.002197 -0.099622 0.116237\nvn 0.7083 -0.3965 0.5841\nv -0.00225 -0.100399 0.115773\nvn 0.7083 -0.3965 0.5841\nv -0.002044 -0.102745 0.109144\nvn 0.9233 -0.3764 0.0767\nv -0.002025 -0.101992 0.112613\nvn 0.9233 -0.3764 0.0767\nv -0.00211 -0.102534 0.110978\nvn 0.9233 -0.3764 0.0767\nv -0.002248 -0.102962 0.108255\nvn 0.5244 -0.8472 0.0856\nv -0.002044 -0.102745 0.109144\nvn 0.5244 -0.8472 0.0856\nv -0.002312 -0.102825 0.11\nvn 0.5244 -0.8472 0.0856\nv -0.00211 -0.102534 0.110978\nvn 0.6319 -0.7449 0.2141\nv -0.002025 -0.101992 0.112613\nvn 0.6319 -0.7449 0.2141\nv -0.002295 -0.102218 0.112625\nvn 0.6319 -0.7449 0.2141\nv -0.00211 -0.102534 0.110978\nvn 0.3048 -0.9283 0.2128\nv -0.002295 -0.102218 0.112625\nvn 0.3048 -0.9283 0.2128\nv -0.002312 -0.102825 0.11\nvn 0.3048 -0.9283 0.2128\nv -0.002025 -0.101992 0.112613\nvn 0.7736 -0.5751 0.2662\nv -0.00205 -0.100901 0.115045\nvn 0.7736 -0.5751 0.2662\nv -0.002232 -0.101228 0.114864\nvn 0.7736 -0.5751 0.2662\nv -0.002025 -0.101992 0.112613\nvn 0.6189 -0.7248 0.3028\nv -0.002232 -0.101228 0.114864\nvn 0.6189 -0.7248 0.3028\nv -0.002295 -0.102218 0.112625\nvn 0.6189 -0.7248 0.3028\nv -0.002044 -0.102745 0.109144\nvn 0.5959 -0.7951 0.1129\nv -0.00211 -0.102534 0.110978\nvn 0.5959 -0.7951 0.1129\nv -0.002312 -0.102825 0.11\nvn 0.5959 -0.7951 0.1129\nv -0.002044 -0.102745 0.109144\nvn 0.7217 -0.6922 0.0024\nv -0.002248 -0.102962 0.108255\nvn 0.7217 -0.6922 0.0024\nv -0.002202 -0.102952 0.097221\nvn 0.7217 -0.6922 0.0024\nv -0.002044 -0.102745 0.109144\nvn 0.8628 -0.5056 -0.0027\nv -0.002202 -0.102952 0.097221\nvn 0.8628 -0.5056 -0.0027\nv -0.002021 -0.102634 0.095619\nvn 0.8628 -0.5056 -0.0027\nv -0.002211 -0.102564 0.094114\nvn 0.8536 -0.504 -0.1315\nv -0.002016 -0.101534 0.091439\nvn 0.8536 -0.504 -0.1315\nv -0.002021 -0.102634 0.095619\nvn 0.8536 -0.504 -0.1315\nv -0.002213 -0.097242 0.08542\nvn 0.6678 -0.5222 -0.5305\nv -0.002018 -0.098941 0.087337\nvn 0.6678 -0.5222 -0.5305\nv -0.00225 -0.099011 0.087114\nvn 0.6678 -0.5222 -0.5305\nv -0.002021 -0.102634 0.095619\nvn 0.679 -0.7309 -0.0683\nv -0.002202 -0.102952 0.097221\nvn 0.679 -0.7309 -0.0683\nv -0.002241 -0.102841 0.095648\nvn 0.679 -0.7309 -0.0683\nv -0.002127 -0.09662 0.085045\nvn 0.8414 -0.3591 -0.4038\nv -0.002213 -0.097242 0.08542\nvn 0.8414 -0.3591 -0.4038\nv -0.002162 -0.096635 0.084986\nvn 0.8414 -0.3591 -0.4038\nv -0.002002 -0.096551 0.085318\nvn 0.8956 -0.2906 -0.3369\nv -0.002018 -0.098941 0.087337\nvn 0.8956 -0.2906 -0.3369\nv -0.002127 -0.09662 0.085045\nvn 0.8956 -0.2906 -0.3369\nv -0.002211 -0.102564 0.094114\nvn 0.714 -0.6693 -0.2053\nv -0.002261 -0.102063 0.092311\nvn 0.714 -0.6693 -0.2053\nv -0.002016 -0.101534 0.091439\nvn 0.714 -0.6693 -0.2053\nv -0.002225 -0.10087 0.089703\nvn 0.453 -0.813 -0.3658\nv -0.002016 -0.101534 0.091439\nvn 0.453 -0.813 -0.3658\nv -0.002261 -0.102063 0.092311\nvn 0.453 -0.813 -0.3658\nv -0.002241 -0.102841 0.095648\nvn 0.6722 -0.7307 -0.1191\nv -0.002211 -0.102564 0.094114\nvn 0.6722 -0.7307 -0.1191\nv -0.002021 -0.102634 0.095619\nvn 0.6722 -0.7307 -0.1191\nv -0.002018 -0.098941 0.087337\nvn 0.8687 -0.4184 -0.2651\nv -0.002016 -0.101534 0.091439\nvn 0.8687 -0.4184 -0.2651\nv -0.002225 -0.10087 0.089703\nvn 0.8687 -0.4184 -0.2651\nv -0.002018 -0.098941 0.087337\nvn 0.6291 -0.6285 -0.4574\nv -0.002225 -0.10087 0.089703\nvn 0.6291 -0.6285 -0.4574\nv -0.00225 -0.099011 0.087114\nvn 0.6291 -0.6285 -0.4574\nv 0.0013 0.032023 0.109103\nvn 0.018 -0.9998 0.0001\nv 0.001287 0.032022 0.101167\nvn 0.0187 -0.9998 0.0001\nv 0.0013 0.032022 0.101167\nvn 0.0188 -0.9998 0.0001\nv -0.001992 -0.031956 0.108137\nvn 0.0203 0.9998 2.48603e-18\nv 0.0013 -0.032023 0.109103\nvn 0.0203 0.9998 2.48603e-18\nv 0.0013 -0.032023 0.108194\nvn 0.0203 0.9998 2.48603e-18\nv 0.0013 -0.032023 0.109103\nvn 0.0184 0.9998 0.0065\nv -0.001777 -0.096847 0.087562\nvn 0.8175 -0.3517 -0.456\nv -0.001552 -0.096061 0.087359\nvn 0.8175 -0.3517 -0.456\nv -0.001453 -0.096548 0.087912\nvn 0.8175 -0.3517 -0.456\nv -0.001777 -0.096847 0.087562\nvn 0.9528 -0.1867 -0.2396\nv -0.00186 -0.096218 0.08674\nvn 0.9528 -0.1867 -0.2396\nv -0.001774 -0.096148 0.087027\nvn 0.9528 -0.1867 -0.2396\nv -0.001453 -0.096548 0.087912\nvn 0.6388 -0.4821 -0.5996\nv -0.001133 -0.095945 0.087768\nvn 0.6388 -0.4821 -0.5996\nv -0.000999 -0.09639 0.088268\nvn 0.6388 -0.4821 -0.5996\nv -0.001453 -0.096548 0.087912\nvn 0.7722 -0.402 -0.4921\nv -0.001552 -0.096061 0.087359\nvn 0.7722 -0.402 -0.4921\nv -0.001439 -0.096022 0.087503\nvn 0.7722 -0.402 -0.4921\nv -0.000999 -0.09639 0.088268\nvn 0.5919 -0.5172 -0.6182\nv -0.001133 -0.095945 0.087768\nvn 0.5919 -0.5172 -0.6182\nv -0.000981 -0.09591 0.087885\nvn 0.5919 -0.5172 -0.6182\nv -0.000999 -0.09639 0.088268\nvn 0.2126 -0.5092 -0.834\nv -0.000627 -0.095857 0.088038\nvn 0.2126 -0.5092 -0.834\nv 1.68083e-18 -0.096256 0.088442\nvn 0.2126 -0.5092 -0.834\nv 1.68083e-18 -0.096256 0.088442\nvn 0.0814 -0.6424 -0.7621\nv -0.000627 -0.095857 0.088038\nvn 0.0814 -0.6424 -0.7621\nv 1.72418e-18 -0.095837 0.088088\nvn 0.0814 -0.6424 -0.7621\nv -0.002002 -0.096551 0.085318\nvn 0.9993 -0.027 -0.0239\nv -0.001992 -0.09647 0.085671\nvn 0.9994 -0.0269 -0.0238\nv -0.001977 -0.097359 0.087277\nvn 0.9388 -0.221 -0.2643\nv -0.00186 -0.096218 0.08674\nvn 0.9388 -0.221 -0.2643\nv -0.001777 -0.096847 0.087562\nvn 0.9388 -0.221 -0.2643\nv -0.002213 -0.097242 0.08542\nvn 0.1687 -0.5821 -0.7954\nv -0.002632 -0.096684 0.084922\nvn 0.1687 -0.5821 -0.7954\nv -0.002162 -0.096635 0.084986\nvn 0.1687 -0.5821 -0.7954\nv 0.01275 -0.035 0.107949\nvn -1 0 -1.22465e-16\nv 0.01275 -0.035 0.095417\nvn -1 0 -1.22465e-16\nv 0.01275 -0.036 0.096417\nvn -1 0 -1.22465e-16\nv 0.01275 -0.036 0.107949\nvn -1 0 -1.22465e-16\nv 0.008072 -0.030986 0.108031\nvn -0.0175 0 -0.9998\nv 0.011492 -0.029877 0.107971\nvn -0.0175 0 -0.9998\nv 0.01275 -0.035 0.107949\nvn -0.0175 0 -0.9998\nv 0.011492 -0.029877 0.107971\nvn -0.031 -0.0033 -0.9995\nv 0.013811 -0.028869 0.107896\nvn -0.031 -0.0033 -0.9995\nv 0.013649 -0.034984 0.107921\nvn -0.0312 -0.0034 -0.9995\nv 0.01275 -0.035 0.107949\nvn -0.0313 -0.0034 -0.9995\nv 0.01275 -0.036 0.107949\nvn -0.0175 0 -0.9998\nv 0.003953 -0.045069 0.116064\nvn 0.0175 0.9998 2.14313e-18\nv -1.76937e-18 -0.045 0.116615\nvn 0.0175 0.9998 2.14313e-18\nv 0.003291 -0.045057 0.116657\nvn 0.0175 0.9998 -0.0001\nv -1.04095e-18 -0.045 0.110667\nvn 0.0175 0.9998 2.14313e-18\nv 0.004 -0.04507 0.110597\nvn 0.0175 0.9998 2.14313e-18\nv 0.001867 -0.099775 0.11401\nvn -0.8034 -0.5026 0.3192\nv 0.001874 -0.098216 0.116482\nvn -0.8034 -0.5026 0.3192\nv 0.00146 -0.098678 0.114714\nvn -0.8034 -0.5026 0.3192\nv 0.000994 -0.100058 0.110001\nvn -0.605 -0.7711 0.1984\nv 0.001491 -0.100473 0.109906\nvn -0.605 -0.7711 0.1984\nv 0.001145 -0.099788 0.111511\nvn -0.605 -0.7711 0.1984\nv -8.21248e-19 -0.099962 0.108873\nvn -0.1816 -0.9678 0.1742\nv 0.000517 -0.099913 0.109689\nvn -0.1816 -0.9678 0.1742\nv -1.04781e-18 -0.09963 0.110723\nvn -0.1816 -0.9678 0.1742\nv 0.001491 -0.100473 0.109906\nvn -0.6429 -0.7448 0.179\nv 0.001556 -0.099937 0.112369\nvn -0.6429 -0.7448 0.179\nv 0.001145 -0.099788 0.111511\nvn -0.6429 -0.7448 0.179\nv 0.001072 -0.098921 0.113607\nvn -0.671 -0.6392 0.3757\nv 0.00146 -0.098678 0.114714\nvn -0.671 -0.6392 0.3757\nv 0.000979 -0.097748 0.115437\nvn -0.671 -0.6392 0.3757\nv -1.60196e-18 -0.097591 0.115248\nvn -1 0 -1.22465e-16\nv -1.29017e-18 -0.099008 0.112702\nvn -1 0 -1.22465e-16\nv -1.37418e-18 -0.098746 0.113388\nvn -1 0 -1.22465e-16\nv 0.000994 -0.100058 0.110001\nvn -0.4036 -0.8928 0.2001\nv 0.001145 -0.099788 0.111511\nvn -0.4038 -0.8927 0.2\nv 0.000501 -0.099522 0.111398\nvn -0.4038 -0.8927 0.2\nv 0.000517 -0.099913 0.109689\nvn -0.4035 -0.8928 0.2001\nv 0.001072 -0.098921 0.113607\nvn -0.2108 -0.8279 0.5198\nv 0.000979 -0.097748 0.115437\nvn -0.2108 -0.8279 0.5198\nv -1.61862e-18 -0.097532 0.115384\nvn -0.2108 -0.8279 0.5198\nv -1.37418e-18 -0.098746 0.113388\nvn -0.238 -0.8297 0.5048\nv 0.001072 -0.098921 0.113607\nvn -0.238 -0.8297 0.5048\nv -1.61862e-18 -0.097532 0.115384\nvn -0.238 -0.8297 0.5048\nv 0.00146 -0.098678 0.114714\nvn -0.8558 -0.4152 0.3086\nv 0.001874 -0.098216 0.116482\nvn -0.8558 -0.4152 0.3086\nv 0.001466 -0.097376 0.116482\nvn -0.8558 -0.4152 0.3086\nv 0.000517 -0.099913 0.109689\nvn -0.0898 -0.9711 0.221\nv 0.000501 -0.099522 0.111398\nvn -0.0898 -0.9711 0.221\nv -1.04781e-18 -0.09963 0.110723\nvn -0.0898 -0.9711 0.221\nv -1.61862e-18 -0.097532 0.115384\nvn -1 0 -1.22465e-16\nv 0.00146 -0.098678 0.114714\nvn -0.5515 -0.6708 0.4959\nv 0.001466 -0.097376 0.116482\nvn -0.5515 -0.6708 0.4959\nv 0.000979 -0.097748 0.115437\nvn -0.5515 -0.6708 0.4959\nv -1.29017e-18 -0.099008 0.112702\nvn -0.1952 -0.9358 0.2936\nv -1.04781e-18 -0.09963 0.110723\nvn -0.1952 -0.9358 0.2936\nv 0.000501 -0.099522 0.111398\nvn -0.1952 -0.9358 0.2936\nv 0.001148 -0.100319 0.108527\nvn -0.7333 -0.6714 0.1072\nv 0.001723 -0.10095 0.108504\nvn -0.7333 -0.6714 0.1072\nv 0.001491 -0.100473 0.109906\nvn -0.7333 -0.6714 0.1072\nv 0.001723 -0.10095 0.108504\nvn -0.9514 -0.3023 0.058\nv 0.001979 -0.101566 0.109499\nvn -0.9514 -0.3023 0.058\nv 0.001827 -0.100759 0.111208\nvn -0.9514 -0.3023 0.058\nv 0.001827 -0.100759 0.111208\nvn -0.9749 -0.2055 0.086\nv 0.001963 -0.100667 0.112974\nvn -0.9749 -0.2055 0.086\nv 0.001867 -0.099775 0.11401\nvn -0.9749 -0.2055 0.086\nv 0.001145 -0.099788 0.111511\nvn -0.7305 -0.6396 0.2392\nv 0.001556 -0.099937 0.112369\nvn -0.7305 -0.6396 0.2392\nv 0.001072 -0.098921 0.113607\nvn -0.7305 -0.6396 0.2392\nv 0.000979 -0.097748 0.115437\nvn -0.5853 -0.6383 0.5\nv 0.001466 -0.097376 0.116482\nvn -0.5853 -0.6383 0.5\nv 0.000663 -0.096552 0.116593\nvn -0.5853 -0.6383 0.5\nv 0.001827 -0.100759 0.111208\nvn -0.8038 -0.5577 0.2072\nv 0.001867 -0.099775 0.11401\nvn -0.8038 -0.5577 0.2072\nv 0.001556 -0.099937 0.112369\nvn -0.8038 -0.5577 0.2072\nv 0.001723 -0.10095 0.108504\nvn -0.7956 -0.6014 0.0731\nv 0.001827 -0.100759 0.111208\nvn -0.7956 -0.6014 0.0731\nv 0.001491 -0.100473 0.109906\nvn -0.7956 -0.6014 0.0731\nv 0.000979 -0.097748 0.115437\nvn -0.193 -0.7079 0.6794\nv 0.000663 -0.096552 0.116593\nvn -0.193 -0.7079 0.6794\nv -1.61862e-18 -0.097532 0.115384\nvn -0.193 -0.7079 0.6794\nv 0.001145 -0.099788 0.111511\nvn -0.2218 -0.9037 0.3662\nv 0.001072 -0.098921 0.113607\nvn -0.2218 -0.9037 0.3662\nv -1.37418e-18 -0.098746 0.113388\nvn -0.2218 -0.9037 0.3662\nv 0.000501 -0.099522 0.111398\nvn -0.4063 -0.8813 0.2413\nv 0.001145 -0.099788 0.111511\nvn -0.4063 -0.8813 0.2413\nv -1.37418e-18 -0.098746 0.113388\nvn -0.4063 -0.8813 0.2413\nv -1.60196e-18 -0.097591 0.115248\nvn -0.5372 0.7747 -0.3334\nv -1.61862e-18 -0.097532 0.115384\nvn -0.5372 0.7747 -0.3334\nv 0.000663 -0.096552 0.116593\nvn -0.5372 0.7747 -0.3334\nv -1.76655e-18 -0.096429 0.116592\nvn -0.1404 -0.7491 0.6474\nv -1.60196e-18 -0.097591 0.115248\nvn -0.1404 -0.7491 0.6474\nv 0.000663 -0.096552 0.116593\nvn -0.1404 -0.7491 0.6474\nv -7.31849e-19 -0.100035 0.108143\nvn -0.2898 -0.9416 0.1716\nv 0.001148 -0.100319 0.108527\nvn -0.2898 -0.9416 0.1716\nv 0.000517 -0.099913 0.109689\nvn -0.2898 -0.9416 0.1716\nv -1.29017e-18 -0.099008 0.112702\nvn -0.0283 -0.9337 0.3569\nv 0.000501 -0.099522 0.111398\nvn -0.0283 -0.9337 0.3569\nv -1.37418e-18 -0.098746 0.113388\nvn -0.0283 -0.9337 0.3569\nv 0.001963 -0.100667 0.112974\nvn -0.9988 -0.0423 0.0264\nv 0.002012 -0.100134 0.115665\nvn -0.9988 -0.0423 0.0264\nv 0.001974 -0.09888 0.11623\nvn -0.9988 -0.0423 0.0264\nv 0.001979 -0.101566 0.109499\nvn -0.9331 -0.3492 0.086\nv 0.002012 -0.100134 0.115665\nvn -0.9331 -0.3492 0.086\nv 0.001963 -0.100667 0.112974\nvn -0.9331 -0.3492 0.086\nv 0.001556 -0.099937 0.112369\nvn -0.8658 -0.4548 0.2087\nv 0.001867 -0.099775 0.11401\nvn -0.8658 -0.4548 0.2087\nv 0.00146 -0.098678 0.114714\nvn -0.8658 -0.4548 0.2087\nv 0.001148 -0.100319 0.108527\nvn -0.6308 -0.7727 0.0704\nv 0.001491 -0.100473 0.109906\nvn -0.6308 -0.7727 0.0704\nv 0.000994 -0.100058 0.110001\nvn -0.6308 -0.7727 0.0704\nv 0.001867 -0.099775 0.11401\nvn -0.9427 -0.2912 0.1628\nv 0.001963 -0.100667 0.112974\nvn -0.9427 -0.2912 0.1628\nv 0.001974 -0.09888 0.11623\nvn -0.9427 -0.2912 0.1628\nv -8.21248e-19 -0.099962 0.108873\nvn -0.0603 -0.9933 0.0988\nv -7.31849e-19 -0.100035 0.108143\nvn -0.0603 -0.9933 0.0988\nv 0.000517 -0.099913 0.109689\nvn -0.0603 -0.9933 0.0988\nv 0.001867 -0.099775 0.11401\nvn -0.973 -0.1941 0.1252\nv 0.001974 -0.09888 0.11623\nvn -0.973 -0.1941 0.1252\nv 0.001874 -0.098216 0.116482\nvn -0.973 -0.1941 0.1252\nv 0.001072 -0.098921 0.113607\nvn -0.5863 -0.7235 0.3645\nv 0.001556 -0.099937 0.112369\nvn -0.5863 -0.7235 0.3645\nv 0.00146 -0.098678 0.114714\nvn -0.5863 -0.7235 0.3645\nv 0.001148 -0.100319 0.108527\nvn -0.3636 -0.9231 0.125\nv 0.000994 -0.100058 0.110001\nvn -0.3636 -0.9231 0.125\nv 0.000517 -0.099913 0.109689\nvn -0.3636 -0.9231 0.125\nv 0.001979 -0.101566 0.109499\nvn -0.926 -0.3665 0.0906\nv 0.001963 -0.100667 0.112974\nvn -0.926 -0.3665 0.0906\nv 0.001827 -0.100759 0.111208\nvn -0.926 -0.3665 0.0906\nv 0.001491 -0.100473 0.109906\nvn -0.8769 -0.4643 0.1242\nv 0.001827 -0.100759 0.111208\nvn -0.8769 -0.4643 0.1242\nv 0.001556 -0.099937 0.112369\nvn -0.8769 -0.4643 0.1242\nv 0.001979 -0.101453 0.094865\nvn -0.9995 -0.0313 -0.0061\nv 0.002016 -0.101534 0.091439\nvn -0.9992 -0.0385 -0.0097\nv 0.002021 -0.102634 0.095619\nvn -0.9992 -0.0404 -0.0079\nv 0.001979 -0.101566 0.109499\nvn -0.9985 -0.055 0.0017\nv 0.002021 -0.102634 0.095619\nvn -0.9985 -0.0549 0.0012\nv 0.002044 -0.102745 0.109144\nvn -0.9984 -0.0564 0.0062\nv 0.001979 -0.101566 0.109499\nvn -0.9994 -0.0355 -0.0003\nv 0.002025 -0.101992 0.112613\nvn -0.9984 -0.0566 0.0069\nv 0.001991 -0.096371 0.0861\nvn -0.9999 0.0096 -0.0036\nv 0.001992 -0.09647 0.085671\nvn -0.9999 0.0096 -0.0036\nv 0.001977 -0.097359 0.087277\nvn -0.9999 0.0096 -0.0036\nv 0.001975 -0.09983 0.090487\nvn -0.9993 -0.0295 -0.0222\nv 0.002018 -0.098941 0.087337\nvn -0.9991 -0.0335 -0.0244\nv 0.002016 -0.101534 0.091439\nvn -0.999 -0.0378 -0.0246\nv 0.002012 -0.100134 0.115665\nvn -0.9996 -0.0253 0.0112\nv 0.001979 -0.101566 0.109499\nvn -0.9996 -0.0253 0.0112\nv 0.002025 -0.101992 0.112613\nvn -0.9996 -0.0253 0.0112\nv 0.001977 -0.097359 0.087277\nvn -0.9994 -0.0267 -0.0218\nv 0.00205 -0.100901 0.115045\nvn -0.9946 -0.0908 0.0511\nv 0.002012 -0.100134 0.115665\nvn -0.9946 -0.0908 0.0511\nv 0.002025 -0.101992 0.112613\nvn -0.9946 -0.0908 0.0511\nv 0.001975 -0.09983 0.090487\nvn -0.9995 -0.0296 -0.01\nv 0.001513 -0.09692 0.083299\nvn -0.1673 -0.7672 0.6192\nv 2.37973e-18 -0.097045 0.082735\nvn -0.1673 -0.7672 0.6192\nv 2.40435e-18 -0.097208 0.082534\nvn -0.1673 -0.7672 0.6192\nv 0.001896 -0.097087 0.083099\nvn -0.0997 -0.8504 0.5166\nv 0.001513 -0.09692 0.083299\nvn -0.0997 -0.8504 0.5166\nv 2.40435e-18 -0.097208 0.082534\nvn -0.0997 -0.8504 0.5166\nv 2.37973e-18 -0.097045 0.082735\nvn -1 0 -1.22465e-16\nv 2.38071e-18 -0.097039 0.082727\nvn -1 0 -1.22465e-16\nv 2.40435e-18 -0.097208 0.082534\nvn -1 0 -1.22465e-16\nv 2.39945e-18 -0.097074 0.082574\nvn -1 0 -1.22465e-16\nv 0.015298 0.000291 0.092303\nvn -0.9995 0.0012 -0.0314\nv 0.015255 -0.066386 0.091097\nvn -0.9995 0.0012 -0.0314\nv 0.01527 -0.028122 0.09208\nvn -0.9995 0.0012 -0.0314\nv 0.015744 -0.027859 0.101046\nvn -0.9983 0 0.0581\nv 0.015413 -0.034953 0.095371\nvn -0.9983 0 0.0581\nv 0.015744 -0.034948 0.101046\nvn -0.9983 0 0.0581\nv 0.015744 -0.027859 0.101046\nvn -0.9984 0.0018 0.0558\nv 0.015317 -0.028097 0.093425\nvn -0.9984 0.0018 0.0558\nv 0.015413 -0.034953 0.095371\nvn -0.9984 0.0018 0.0558\nv 0.015383 0.028059 0.092503\nvn -0.9897 0.0108 0.1428\nv 0.015258 0.030821 0.091429\nvn -0.9897 0.0108 0.1428\nv 0.015311 0.021536 0.092493\nvn -0.9897 0.0108 0.1428\nv 0.015311 0.021536 0.092493\nvn -0.9987 0.0002 0.0505\nv 0.015258 0.030821 0.091429\nvn -0.9991 -0.0001 0.0427\nv 0.015298 0.000291 0.092303\nvn -0.9989 0.0001 0.0477\nv 0.015255 -0.066386 0.091097\nvn -0.9992 -0.0001 0.0411\nv 0.015258 0.030821 0.091429\nvn -0.9999 0 0.0111\nv 0.015255 0.066307 0.091106\nvn -0.9999 0 0.0111\nv 0.015255 -0.066386 0.091097\nvn -0.9999 0 0.0111\nv 0.015744 -0.034948 0.101046\nvn -0.9873 -0.0004 -0.1592\nv 0.014794 -0.034964 0.10695\nvn -0.9873 -0.0007 -0.1588\nv 0.014781 -0.028382 0.107001\nvn -0.9872 -0.0003 -0.1592\nv 0.015744 -0.027859 0.101046\nvn -0.9872 0 -0.1595\nv 0.014794 -0.034964 0.10695\nvn -0.8267 0.0027 -0.5627\nv 0.014348 -0.034972 0.107606\nvn -0.8267 0.0027 -0.5627\nv 0.014781 -0.028382 0.107001\nvn -0.8267 0.0027 -0.5627\nv 0.014781 -0.028382 0.107001\nvn -0.8165 0.0007 -0.5774\nv 0.014348 -0.034972 0.107606\nvn -0.8165 0.0007 -0.5774\nv 0.014408 -0.028573 0.107528\nvn -0.8165 0.0007 -0.5774\nv 0.014408 -0.028573 0.107528\nvn -0.5227 -0.0054 -0.8525\nv 0.014348 -0.034972 0.107606\nvn -0.5227 -0.0054 -0.8525\nv 0.013811 -0.028869 0.107896\nvn -0.5227 -0.0054 -0.8525\nv 0.014348 -0.034972 0.107606\nvn -0.4111 0.0072 -0.9116\nv 0.013649 -0.034984 0.107921\nvn -0.4111 0.0072 -0.9116\nv 0.013811 -0.028869 0.107896\nvn -0.4111 0.0072 -0.9116\nv 8.08267e-18 -0.067 0.036167\nvn 0.0174 -0.0009 -0.9998\nv 0.01023 -0.066814 0.036346\nvn 0.0176 -0.0008 -0.9998\nv 0.014138 -0.087286 0.03643\nvn 0.02 -0.0004 -0.9998\nv 0.010831 -0.066594 0.036356\nvn 0.018 -0.0007 -0.9998\nv 0.011452 -0.065813 0.036367\nvn 0.0198 -0.0005 -0.9998\nv 0.011324 0.09213 0.0364\nvn 0.0188 0.0022 -0.9998\nv 0.013956 0.090931 0.036447\nvn 0.0189 0.0022 -0.9998\nv 0.014056 0.08162 0.036428\nvn 0.0211 0.0007 -0.9998\nv 8.07973e-18 -0.092276 0.036191\nvn 0.0173 -0.001 -0.9998\nv 0.012233 -0.091785 0.036403\nvn 0.0174 -0.0013 -0.9998\nv 8.08267e-18 0.067 0.036167\nvn 0.0176 0.0009 -0.9998\nv 8.08022e-18 0.092243 0.036187\nvn 0.0187 0.0021 -0.9998\nv 0.010558 0.066744 0.036351\nvn 0.0179 0.0009 -0.9998\nv 0.011283 0.066133 0.036364\nvn 0.0191 0.0007 -0.9998\nv 0.012233 -0.091785 0.036403\nvn 0.0418 -0.0117 -0.9991\nv 0.014138 -0.087286 0.03643\nvn 0.0418 -0.0117 -0.9991\nv 0.014024 -0.090523 0.036463\nvn 0.0418 -0.0117 -0.9991\nv 0.01149 0.065541 0.036368\nvn 0.0205 0.0005 -0.9998\nv -1.04095e-18 -0.045 0.110667\nvn 0.0175 0 0.9998\nv 0.002183 -0.033436 0.110629\nvn 0.0174 -0 0.9998\nv -1.04095e-18 -0.033494 0.110667\nvn 0.0175 0 0.9998\nv 0.004 -0.04507 0.110597\nvn 0.0209 -0.0005 0.9998\nv 0.005809 -0.033013 0.110566\nvn 0.0173 0 0.9999\nv 0.010493 -0.031853 0.110485\nvn 0.018 -0.0003 0.9998\nv 0.013792 -0.030528 0.110418\nvn 0.0205 -0.0015 0.9998\nv 0.014007 -0.073637 0.110369\nvn 0.0202 -0.0009 0.9998\nv 0.004 -0.072999 0.110586\nvn 0.0216 -0.0004 0.9998\nv 0.004749 0.033184 0.110584\nvn 0.0176 0.0007 0.9998\nv -1.03813e-18 0.072733 0.110644\nvn 0.0175 0.0005 0.9998\nv -1.04095e-18 0.033517 0.110667\nvn 0.0175 0.0006 0.9998\nv 0.024783 0.036929 0.110226\nvn 0.0177 0.0006 0.9998\nv 0.008216 0.032482 0.110523\nvn 0.0177 0.001 0.9998\nv 0.022654 0.072295 0.110249\nvn 0.0174 0.0004 0.9998\nv 0.017111 0.032556 0.110351\nvn 0.0193 0.0102 0.9998\nv 0.008216 0.032482 0.110523\nvn 0.0193 0.0057 0.9998\nv 0.011923 0.031363 0.110466\nvn 0.0192 0.0123 0.9997\nv 0.019526 0.034135 0.110298\nvn 0.0193 0.0044 0.9998\nv 0.019526 0.034135 0.110298\nvn 0.0223 -0.0164 0.9996\nv 0.024783 0.036929 0.110226\nvn 0.0223 -0.0164 0.9996\nv 0.008216 0.032482 0.110523\nvn 0.0223 -0.0164 0.9996\nv 0.015313 0.029765 0.110364\nvn 0.0247 -0.0115 0.9996\nv 0.017111 0.032556 0.110351\nvn 0.0247 -0.0115 0.9996\nv 0.011923 0.031363 0.110466\nvn 0.0247 -0.0115 0.9996\nv 6.46944e-18 -0.100547 0.04934\nvn 0.0199 -0.9996 0.0197\nv 0.013486 -0.100314 0.047548\nvn 0.0199 -0.9996 0.0197\nv 0.014021 -0.100206 0.052508\nvn 0.0199 -0.9996 0.0197\nv 4.23605e-18 -0.099354 0.067577\nvn 0.019 -0.9927 0.1194\nv 0.014102 -0.09921 0.066487\nvn 0.0193 -0.9928 0.1186\nv 0.013864 -0.098293 0.074201\nvn 0.0174 -0.9923 0.1226\nv 3.32577e-18 -0.09843 0.07501\nvn 0.017 -0.9922 0.1234\nv 6.46944e-18 -0.100547 0.04934\nvn 0.0178 -0.9998 0.001\nv 7.0247e-18 -0.100569 0.044806\nvn 0.0194 -0.9998 0.0048\nv 0.009232 -0.100388 0.045148\nvn 0.0189 -0.9998 0.0037\nv 5.31901e-18 -0.10013 0.058734\nvn 0.0143 -0.9989 0.0443\nv 6.46944e-18 -0.100547 0.04934\nvn 0.0143 -0.9989 0.0443\nv 0.014021 -0.100206 0.052508\nvn 0.0143 -0.9989 0.0443\nv 5.31901e-18 -0.10013 0.058734\nvn 0.023 -0.9977 0.0638\nv 0.014021 -0.100206 0.052508\nvn 0.023 -0.9977 0.0638\nv 0.014527 -0.099703 0.060182\nvn 0.023 -0.9977 0.0638\nv 2.40435e-18 -0.097208 0.082534\nvn 0.0156 -0.9871 0.1594\nv 3.32577e-18 -0.09843 0.07501\nvn 0.0182 -0.9878 0.1544\nv 0.014096 -0.097316 0.080477\nvn 0.0159 -0.9871 0.1592\nv 0.003682 -0.096662 0.085229\nvn 0.0193 -0.9821 0.1875\nv 0.003142 -0.096726 0.084953\nvn 0.0195 -0.9823 0.1861\nv 0.014059 -0.095974 0.087768\nvn 0.018 -0.9811 0.1927\nv 0.013864 -0.098293 0.074201\nvn 0.0187 -0.9881 0.153\nv 0.001896 -0.097087 0.083099\nvn 0.0156 -0.9871 0.1592\nv 0.003992 -0.096543 0.085821\nvn 0.0173 -0.9803 0.1969\nv 5.31901e-18 -0.10013 0.058734\nvn 0.0206 -0.9965 0.0809\nv 0.014527 -0.099703 0.060182\nvn 0.0214 -0.9966 0.0794\nv 0.014102 -0.09921 0.066487\nvn 0.0176 -0.9961 0.0863\nv 0.004 -0.095538 0.09079\nvn 0.0171 -0.98 0.1982\nv 4.23605e-18 -0.099354 0.067577\nvn 0.017 -0.996 0.0874\nv 0.001896 -0.097087 0.083099\nvn 0.0198 -0.9838 0.1783\nv 0.014096 -0.097316 0.080477\nvn 0.0201 -0.9836 0.179\nv 0.013486 -0.100314 0.047548\nvn 0.0173 -0.9999 2.11864e-18\nv 0.009895 -0.099863 0.043932\nvn 0.1254 -0.7822 -0.6102\nv 0.007416 -0.098601 0.041805\nvn 0.1254 -0.7822 -0.6102\nv 0.011278 -0.097824 0.041603\nvn 0.1254 -0.7822 -0.6102\nv 0.016044 -0.097265 0.044507\nvn 0.6999 -0.5677 -0.4334\nv 0.015501 -0.095852 0.041779\nvn 0.6999 -0.5677 -0.4334\nv 0.01631 -0.093853 0.040468\nvn 0.6999 -0.5677 -0.4334\nv 0.016044 -0.097265 0.044507\nvn 0.7952 -0.5054 -0.335\nv 0.016848 -0.096524 0.045296\nvn 0.7952 -0.5054 -0.335\nv 0.016048 -0.098809 0.046846\nvn 0.7952 -0.5054 -0.335\nv 0.017095 -0.09493 0.043853\nvn 0.8389 -0.4316 -0.3317\nv 0.016848 -0.096524 0.045296\nvn 0.8397 -0.4302 -0.3314\nv 0.01631 -0.093853 0.040468\nvn 0.8394 -0.4306 -0.3315\nv 0.016848 -0.096524 0.045296\nvn 0.7982 -0.4851 -0.3572\nv 0.016044 -0.097265 0.044507\nvn 0.7982 -0.4851 -0.3572\nv 0.01631 -0.093853 0.040468\nvn 0.7982 -0.4851 -0.3572\nv 0.016806 -0.092959 0.040559\nvn 0.8386 -0.432 -0.3318\nv 0.016048 -0.098809 0.046846\nvn 0.8177 -0.4905 -0.3014\nv 0.016848 -0.096524 0.045296\nvn 0.8177 -0.4905 -0.3014\nv 0.016729 -0.098373 0.047983\nvn 0.8177 -0.4905 -0.3014\nv 0.017319 -0.096559 0.047111\nvn 0.8843 -0.402 -0.2375\nv 0.016729 -0.098373 0.047983\nvn 0.8843 -0.402 -0.2375\nv 0.016848 -0.096524 0.045296\nvn 0.8843 -0.402 -0.2375\nv 0.017669 -0.093681 0.044624\nvn 0.9258 -0.2859 -0.2474\nv 0.017095 -0.09493 0.043853\nvn 0.9291 -0.2758 -0.2463\nv 0.016806 -0.092959 0.040559\nvn 0.9281 -0.2789 -0.2466\nv 0.016848 -0.096524 0.045296\nvn 0.9019 -0.3582 -0.2413\nv 0.017095 -0.09493 0.043853\nvn 0.9019 -0.3582 -0.2413\nv 0.017319 -0.096559 0.047111\nvn 0.9019 -0.3582 -0.2413\nv 0.017388 -0.09758 0.049879\nvn 0.9131 -0.3747 -0.1611\nv 0.016729 -0.098373 0.047983\nvn 0.9131 -0.3747 -0.1611\nv 0.017319 -0.096559 0.047111\nvn 0.9131 -0.3747 -0.1611\nv 0.017124 -0.091661 0.04023\nvn 0.9248 -0.2887 -0.2476\nv 0.017124 -0.091661 0.04023\nvn 0.9486 -0.1696 -0.2673\nv 0.016948 -0.090354 0.038779\nvn 0.9486 -0.1696 -0.2673\nv 0.01751 -0.09083 0.041073\nvn 0.9486 -0.1696 -0.2673\nv 0.018251 -0.092995 0.053421\nvn 0.9922 -0.1229 0.0185\nv 0.018251 -0.089872 0.074163\nvn 0.9919 -0.1257 0.0192\nv 0.01799 -0.095321 0.051964\nvn 0.9911 -0.1317 0.0206\nv 0.017517 -0.097079 0.058126\nvn 0.9844 -0.1738 0.0259\nv 0.01799 -0.095321 0.051964\nvn 0.9844 -0.1738 0.0259\nv 0.017885 -0.093073 0.071006\nvn 0.9844 -0.1738 0.0259\nv 0.017885 -0.093073 0.071006\nvn 0.9907 -0.1345 0.0213\nv 0.01731 -0.095945 0.071617\nvn 0.9826 -0.1819 0.0368\nv 0.017517 -0.097079 0.058126\nvn 0.9814 -0.1897 0.031\nv 0.017885 -0.093073 0.071006\nvn 0.9814 -0.1887 0.0356\nv 0.017669 -0.093681 0.044624\nvn 0.9507 -0.2196 -0.219\nv 0.017124 -0.091661 0.04023\nvn 0.9507 -0.2196 -0.219\nv 0.01751 -0.09083 0.041073\nvn 0.9507 -0.2196 -0.219\nv 0.017711 -0.090482 0.087362\nvn 0.9818 -0.1856 0.0394\nv 0.017171 -0.093258 0.08825\nvn 0.9831 -0.1795 0.0372\nv 0.017885 -0.093073 0.071006\nvn 0.9886 -0.1465 0.0337\nv 0.018251 -0.089872 0.074163\nvn 0.9886 -0.1465 0.0337\nv 0.017711 -0.090482 0.087362\nvn 0.9886 -0.1465 0.0337\nv 0.018251 -0.089872 0.074163\nvn 0.9921 -0.1208 0.035\nv 0.018248 -0.084549 0.092619\nvn 0.992 -0.1211 0.0353\nv 0.017711 -0.090482 0.087362\nvn 0.9912 -0.126 0.041\nv 0.017096 -0.091758 0.093886\nvn 0.9845 -0.1659 0.0572\nv 0.017171 -0.093258 0.08825\nvn 0.9844 -0.1663 0.0578\nv 0.017804 -0.088057 0.092432\nvn 0.9834 -0.1702 0.0627\nv 0.017711 -0.090482 0.087362\nvn 0.9832 -0.171 0.0638\nv 0.016948 -0.090354 0.038779\nvn 0.9571 -0.1266 -0.2605\nv 0.01732 -0.088409 0.039198\nvn 0.9571 -0.1266 -0.2605\nv 0.01751 -0.09083 0.041073\nvn 0.9571 -0.1266 -0.2605\nv 0.009895 -0.099863 0.043932\nvn 0.2022 -0.7933 -0.5743\nv 0.011278 -0.097824 0.041603\nvn 0.2022 -0.7933 -0.5743\nv 0.012985 -0.099458 0.04446\nvn 0.2022 -0.7933 -0.5743\nv 0.009692 -0.096629 0.039845\nvn 0.1576 -0.7387 -0.6554\nv 0.011378 -0.094067 0.037367\nvn 0.1573 -0.7381 -0.6561\nv 0.012472 -0.095624 0.039381\nvn 0.1597 -0.7424 -0.6506\nv 0.017804 -0.088057 0.092432\nvn 0.9909 -0.1277 0.0429\nv 0.017021 -0.090129 0.098159\nvn 0.9844 -0.1578 0.0775\nv 0.017096 -0.091758 0.093886\nvn 0.9844 -0.1578 0.0775\nv 0.017804 -0.088057 0.092432\nvn 0.9844 -0.1578 0.0775\nv 0.011278 -0.097824 0.041603\nvn 0.1601 -0.743 -0.6499\nv 0.017319 -0.096559 0.047111\nvn 0.9308 -0.2973 -0.2128\nv 0.017095 -0.09493 0.043853\nvn 0.9308 -0.2973 -0.2128\nv 0.017669 -0.093681 0.044624\nvn 0.9308 -0.2973 -0.2128\nv 0.01751 -0.09083 0.041073\nvn 0.9706 -0.0951 -0.2212\nv 0.01732 -0.088409 0.039198\nvn 0.9706 -0.0951 -0.2212\nv 0.017785 -0.088933 0.041467\nvn 0.9706 -0.0951 -0.2212\nv 0.017021 -0.090129 0.098159\nvn 0.9877 -0.1291 0.0887\nv 0.017804 -0.088057 0.092432\nvn 0.9876 -0.1297 0.0881\nv 0.018248 -0.084549 0.092619\nvn 0.9877 -0.1275 0.0903\nv 0.017669 -0.093681 0.044624\nvn 0.9703 -0.1654 -0.1764\nv 0.01751 -0.09083 0.041073\nvn 0.9703 -0.1654 -0.1764\nv 0.017929 -0.09212 0.044589\nvn 0.9703 -0.1654 -0.1764\nv 0.016957 -0.088455 0.101201\nvn 0.9877 -0.1271 0.0907\nv 0.011278 -0.097824 0.041603\nvn 0.2782 -0.7529 -0.5965\nv 0.012472 -0.095624 0.039381\nvn 0.2822 -0.7469 -0.6021\nv 0.013905 -0.095719 0.040171\nvn 0.2777 -0.7535 -0.596\nv 0.018248 -0.084549 0.092619\nvn 0.9893 -0.105 0.1011\nv 0.01825 -0.079155 0.098207\nvn 0.9893 -0.105 0.1011\nv 0.016957 -0.088455 0.101201\nvn 0.9893 -0.105 0.1011\nv 0.017319 -0.096559 0.047111\nvn 0.9628 -0.2341 -0.1351\nv 0.017669 -0.093681 0.044624\nvn 0.9628 -0.2341 -0.1351\nv 0.017912 -0.094586 0.047919\nvn 0.9628 -0.2341 -0.1351\nv 0.017388 -0.09758 0.049879\nvn 0.9633 -0.243 -0.1138\nv 0.017319 -0.096559 0.047111\nvn 0.9633 -0.243 -0.1138\nv 0.017912 -0.094586 0.047919\nvn 0.9633 -0.243 -0.1138\nv 0.012472 -0.095624 0.039381\nvn 0.1848 -0.7264 -0.662\nv 0.011378 -0.094067 0.037367\nvn 0.1848 -0.7264 -0.662\nv 0.01339 -0.093555 0.037367\nvn 0.1848 -0.7264 -0.662\nv 0.016957 -0.088455 0.101201\nvn 0.9869 -0.0952 0.1305\nv 0.01825 -0.079155 0.098207\nvn 0.9869 -0.0952 0.1305\nv 0.017566 -0.080193 0.102618\nvn 0.9869 -0.0952 0.1305\nv 0.012985 -0.099458 0.04446\nvn 0.2782 -0.7528 -0.5966\nv 0.012472 -0.095624 0.039381\nvn 0.2737 -0.7305 -0.6257\nv 0.01339 -0.093555 0.037367\nvn 0.2737 -0.7305 -0.6257\nv 0.013947 -0.094953 0.039243\nvn 0.2737 -0.7305 -0.6257\nv 0.01708 -0.078176 0.107155\nvn 0.9882 -0.0691 0.1367\nv 0.016977 -0.082382 0.106101\nvn 0.9897 -0.0572 0.1314\nv 0.017566 -0.080193 0.102618\nvn 0.9894 -0.0593 0.1323\nv 0.01825 -0.079155 0.098207\nvn 0.9882 -0.0691 0.1367\nv 0.01825 -0.073593 0.100985\nvn 0.9883 -0.0682 0.1366\nv 0.013947 -0.094953 0.039243\nvn 0.2828 -0.7459 -0.603\nv 0.016922 -0.086447 0.103651\nvn 0.9924 -0.088 0.0865\nv 0.016957 -0.088455 0.101201\nvn 0.9924 -0.088 0.0865\nv 0.017566 -0.080193 0.102618\nvn 0.9924 -0.088 0.0865\nv 0.016977 -0.082382 0.106101\nvn 0.9899 -0.083 0.1152\nv 0.016922 -0.086447 0.103651\nvn 0.9899 -0.083 0.1152\nv 0.017566 -0.080193 0.102618\nvn 0.9899 -0.083 0.1152\nv 0.01708 -0.078176 0.107155\nvn 0.9863 -0.0343 0.1614\nv 0.01825 -0.073593 0.100985\nvn 0.9863 -0.0343 0.1614\nv 0.017151 -0.073644 0.10769\nvn 0.9863 -0.0343 0.1614\nv 0.017929 -0.09212 0.044589\nvn 0.9814 -0.1099 -0.1574\nv 0.01751 -0.09083 0.041073\nvn 0.9814 -0.1099 -0.1574\nv 0.017785 -0.088933 0.041467\nvn 0.9814 -0.1099 -0.1574\nv 0.01339 -0.093555 0.037367\nvn 0.3664 -0.6906 -0.6235\nv 0.014807 -0.093133 0.037732\nvn 0.3664 -0.6906 -0.6235\nv 0.013947 -0.094953 0.039243\nvn 0.3664 -0.6906 -0.6235\nv 0.013905 -0.095719 0.040171\nvn 0.4104 -0.7122 -0.5695\nv 0.013947 -0.094953 0.039243\nvn 0.4104 -0.7122 -0.5695\nv 0.014668 -0.095506 0.040454\nvn 0.4104 -0.7122 -0.5695\nv 0.017388 -0.09758 0.049879\nvn 0.9765 -0.2078 -0.0565\nv 0.017912 -0.094586 0.047919\nvn 0.9765 -0.2078 -0.0565\nv 0.01799 -0.095321 0.051964\nvn 0.9765 -0.2078 -0.0565\nv 0.017669 -0.093681 0.044624\nvn 0.9824 -0.1655 -0.0864\nv 0.017929 -0.09212 0.044589\nvn 0.9824 -0.1655 -0.0864\nv 0.018241 -0.091887 0.04769\nvn 0.9824 -0.1655 -0.0864\nv 0.017912 -0.094586 0.047919\nvn 0.9857 -0.1295 -0.1081\nv 0.017669 -0.093681 0.044624\nvn 0.9857 -0.1295 -0.1081\nv 0.018241 -0.091887 0.04769\nvn 0.9857 -0.1295 -0.1081\nv 0.017501 -0.097528 0.052519\nvn 0.9737 -0.2249 -0.0372\nv 0.017388 -0.09758 0.049879\nvn 0.9737 -0.2249 -0.0372\nv 0.01799 -0.095321 0.051964\nvn 0.9737 -0.2249 -0.0372\nv 0.014668 -0.095506 0.040454\nvn 0.4578 -0.6738 -0.5801\nv 0.013947 -0.094953 0.039243\nvn 0.4578 -0.6738 -0.5801\nv 0.015332 -0.093991 0.039218\nvn 0.4578 -0.6738 -0.5801\nv 0.013947 -0.094953 0.039243\nvn 0.4659 -0.685 -0.5601\nv 0.014807 -0.093133 0.037732\nvn 0.4659 -0.685 -0.5601\nv 0.015332 -0.093991 0.039218\nvn 0.4659 -0.685 -0.5601\nv 0.01732 -0.088409 0.039198\nvn 0.9784 -0.0213 -0.2057\nv 0.017318 -0.086124 0.038954\nvn 0.9784 -0.0213 -0.2057\nv 0.017785 -0.088933 0.041467\nvn 0.9784 -0.0213 -0.2057\nv 0.017929 -0.09212 0.044589\nvn 0.989 -0.0785 -0.1257\nv 0.017785 -0.088933 0.041467\nvn 0.989 -0.0785 -0.1257\nv 0.018248 -0.089636 0.045543\nvn 0.989 -0.0785 -0.1257\nv 7.61338e-18 -0.097469 0.039999\nvn 0.0183 -0.6958 -0.718\nv 7.85219e-18 -0.095456 0.038049\nvn 0.0183 -0.6958 -0.718\nv 0.003704 -0.096909 0.039551\nvn 0.0183 -0.6958 -0.718\nv 7.17092e-18 -0.100231 0.043612\nvn 0.0162 -0.8196 -0.5728\nv 7.45528e-18 -0.098608 0.04129\nvn 0.0162 -0.8196 -0.5728\nv 0.005029 -0.099808 0.043149\nvn 0.0162 -0.8196 -0.5728\nv 7.45528e-18 -0.098608 0.04129\nvn 0.0332 -0.7492 -0.6615\nv 7.61338e-18 -0.097469 0.039999\nvn 0.0332 -0.7492 -0.6615\nv 0.003704 -0.096909 0.039551\nvn 0.0332 -0.7492 -0.6615\nv 0.014668 -0.095506 0.040454\nvn 0.5463 -0.66 -0.5157\nv 0.015332 -0.093991 0.039218\nvn 0.5463 -0.66 -0.5157\nv 0.015501 -0.095852 0.041779\nvn 0.5463 -0.66 -0.5157\nv 0.014807 -0.093133 0.037732\nvn 0.6266 -0.5584 -0.5437\nv 0.015887 -0.092282 0.038103\nvn 0.6266 -0.5584 -0.5437\nv 0.015332 -0.093991 0.039218\nvn 0.6266 -0.5584 -0.5437\nv 0.015501 -0.095852 0.041779\nvn 0.6731 -0.5765 -0.4633\nv 0.015332 -0.093991 0.039218\nvn 0.6731 -0.5765 -0.4633\nv 0.01631 -0.093853 0.040468\nvn 0.6731 -0.5765 -0.4633\nv 0.005029 -0.099808 0.043149\nvn 0.044 -0.7808 -0.6232\nv 7.45528e-18 -0.098608 0.04129\nvn 0.044 -0.7808 -0.6232\nv 0.007416 -0.098601 0.041805\nvn 0.044 -0.7808 -0.6232\nv 7.85219e-18 -0.095456 0.038049\nvn 0.0158 -0.6102 -0.7921\nv 8.03136e-18 -0.093558 0.036586\nvn 0.0158 -0.6102 -0.7921\nv 0.008705 -0.093863 0.036994\nvn 0.0158 -0.6102 -0.7921\nv 0.01799 -0.095321 0.051964\nvn 0.9913 -0.1246 -0.0417\nv 0.017912 -0.094586 0.047919\nvn 0.9913 -0.1246 -0.0417\nv 0.018241 -0.091887 0.04769\nvn 0.9913 -0.1246 -0.0417\nv 7.45528e-18 -0.098608 0.04129\nvn 0.0457 -0.7613 -0.6468\nv 0.003704 -0.096909 0.039551\nvn 0.0457 -0.7613 -0.6468\nv 0.007416 -0.098601 0.041805\nvn 0.0457 -0.7613 -0.6468\nv 0.003704 -0.096909 0.039551\nvn 0.0343 -0.6749 -0.7371\nv 7.85219e-18 -0.095456 0.038049\nvn 0.0343 -0.6749 -0.7371\nv 0.008705 -0.093863 0.036994\nvn 0.0343 -0.6749 -0.7371\nv 0.018241 -0.091887 0.04769\nvn 0.9915 -0.0915 -0.0929\nv 0.017929 -0.09212 0.044589\nvn 0.9915 -0.0915 -0.0929\nv 0.018248 -0.089636 0.045543\nvn 0.9915 -0.0915 -0.0929\nv 0.01631 -0.093853 0.040468\nvn 0.812 -0.4087 -0.4168\nv 0.015887 -0.092282 0.038103\nvn 0.8113 -0.4099 -0.4169\nv 0.016806 -0.092959 0.040559\nvn 0.8095 -0.4132 -0.4171\nv 0.017517 -0.097079 0.058126\nvn 0.977 -0.2127 0.0143\nv 0.017501 -0.097528 0.052519\nvn 0.977 -0.2127 0.0143\nv 0.01799 -0.095321 0.051964\nvn 0.977 -0.2127 0.0143\nv 0.016455 -0.091492 0.03842\nvn 0.8088 -0.4145 -0.4172\nv 0.01799 -0.095321 0.051964\nvn 0.9949 -0.0987 -0.0207\nv 0.018241 -0.091887 0.04769\nvn 0.9949 -0.0987 -0.0207\nv 0.018251 -0.092995 0.053421\nvn 0.9949 -0.0987 -0.0207\nv 0.003704 -0.096909 0.039551\nvn 0.0485 -0.6876 -0.7245\nv 0.008705 -0.093863 0.036994\nvn 0.0485 -0.6876 -0.7245\nv 0.011378 -0.094067 0.037367\nvn 0.0485 -0.6876 -0.7245\nv 0.003704 -0.096909 0.039551\nvn 0.0675 -0.7414 -0.6677\nv 0.009692 -0.096629 0.039845\nvn 0.0675 -0.7414 -0.6677\nv 0.007416 -0.098601 0.041805\nvn 0.0675 -0.7414 -0.6677\nv 0.018248 -0.089636 0.045543\nvn 0.9926 -0.0295 -0.1177\nv 0.017785 -0.088933 0.041467\nvn 0.9926 -0.0295 -0.1177\nv 0.01825 -0.084024 0.044154\nvn 0.9926 -0.0295 -0.1177\nv 0.017318 -0.086124 0.038954\nvn 0.9835 0.0108 -0.1806\nv 0.017336 -0.08141 0.039336\nvn 0.9835 0.011 -0.1807\nv 0.01825 -0.084024 0.044154\nvn 0.984 0.0047 -0.1782\nv 0.009895 -0.099863 0.043932\nvn 0.0841 -0.8109 -0.5791\nv 0.005029 -0.099808 0.043149\nvn 0.0841 -0.8109 -0.5791\nv 0.007416 -0.098601 0.041805\nvn 0.0841 -0.8109 -0.5791\nv 0.017785 -0.088933 0.041467\nvn 0.984 0.0043 -0.1781\nv 0.016806 -0.092959 0.040559\nvn 0.8835 -0.3057 -0.3548\nv 0.016455 -0.091492 0.03842\nvn 0.8835 -0.3057 -0.3548\nv 0.017124 -0.091661 0.04023\nvn 0.8835 -0.3057 -0.3548\nv 0.013905 -0.095719 0.040171\nvn 0.4076 -0.7299 -0.5488\nv 0.014668 -0.095506 0.040454\nvn 0.4076 -0.7299 -0.5488\nv 0.012985 -0.099458 0.04446\nvn 0.4076 -0.7299 -0.5488\nv 0.007416 -0.098601 0.041805\nvn 0.1211 -0.7665 -0.6307\nv 0.009692 -0.096629 0.039845\nvn 0.1211 -0.7665 -0.6307\nv 0.011278 -0.097824 0.041603\nvn 0.1211 -0.7665 -0.6307\nv 0.016455 -0.091492 0.03842\nvn 0.8933 -0.275 -0.3555\nv 0.016948 -0.090354 0.038779\nvn 0.8933 -0.275 -0.3555\nv 0.017124 -0.091661 0.04023\nvn 0.8933 -0.275 -0.3555\nv 0.012985 -0.099458 0.04446\nvn 0.391 -0.732 -0.5579\nv 0.014668 -0.095506 0.040454\nvn 0.391 -0.732 -0.5579\nv 0.013862 -0.099412 0.045014\nvn 0.391 -0.732 -0.5579\nv 0.003704 -0.096909 0.039551\nvn 0.0676 -0.7163 -0.6945\nv 0.011378 -0.094067 0.037367\nvn 0.0676 -0.7163 -0.6945\nv 0.009692 -0.096629 0.039845\nvn 0.0676 -0.7163 -0.6945\nv 0.013862 -0.099412 0.045014\nvn 0.4781 -0.707 -0.5211\nv 0.014668 -0.095506 0.040454\nvn 0.4781 -0.707 -0.5211\nv 0.014954 -0.099321 0.045892\nvn 0.4781 -0.707 -0.5211\nv 0.014954 -0.099321 0.045892\nvn 0.5234 -0.6844 -0.5076\nv 0.014668 -0.095506 0.040454\nvn 0.5234 -0.6844 -0.5076\nv 0.015501 -0.095852 0.041779\nvn 0.5234 -0.6844 -0.5076\nv 0.014954 -0.099321 0.045892\nvn 0.6237 -0.6364 -0.4538\nv 0.015501 -0.095852 0.041779\nvn 0.6237 -0.6364 -0.4538\nv 0.016044 -0.097265 0.044507\nvn 0.6237 -0.6364 -0.4538\nv 0.015332 -0.093991 0.039218\nvn 0.6912 -0.5388 -0.4816\nv 0.015887 -0.092282 0.038103\nvn 0.6912 -0.5388 -0.4816\nv 0.01631 -0.093853 0.040468\nvn 0.6912 -0.5388 -0.4816\nv 0.014954 -0.099321 0.045892\nvn 0.6569 -0.6287 -0.4162\nv 0.016044 -0.097265 0.044507\nvn 0.6569 -0.6287 -0.4162\nv 0.016048 -0.098809 0.046846\nvn 0.6569 -0.6287 -0.4162\nv 0.017857 0.076092 0.0766\nvn 0.9967 -0.0815 -0.0002\nv 0.01826 0.081061 0.0581\nvn 0.9969 -0.0788 0.0001\nv 0.018123 0.079346 0.07357\nvn 0.9972 -0.0742 0.0006\nv 0.018715 0.085133 0.064454\nvn 0.9525 -0.2848 -0.1082\nv 0.019175 0.0865 0.064905\nvn 0.9525 -0.2848 -0.1082\nv 0.018545 0.08113 0.073502\nvn 0.9525 -0.2848 -0.1082\nv 0.018874 0.089461 0.045458\nvn 0.9974 -0.0715 0.0009\nv 0.018123 0.079346 0.07357\nvn 0.9895 -0.142 -0.026\nv 0.018874 0.089461 0.045458\nvn 0.9907 -0.134 -0.0217\nv 0.019328 0.09227 0.04886\nvn 0.9898 -0.1404 -0.0252\nv 0.018715 0.085133 0.064454\nvn 0.9525 -0.2892 -0.0949\nv 0.019328 0.09227 0.04886\nvn 0.9529 -0.2882 -0.0945\nv 0.019175 0.0865 0.064905\nvn 0.9536 -0.2861 -0.0937\nv 0.017784 0.070986 0.070878\nvn 0.9999 -0.0008 0.0146\nv 0.01773 -0.068435 0.075359\nvn 0.9999 0.0001 0.0149\nv 0.017816 -0.076295 0.069239\nvn 0.9999 0.0053 0.0142\nv 0.017749 -0.070077 0.075743\nvn 0.9999 -0.0056 0.0157\nv 0.017731 -0.071007 0.076523\nvn 0.9999 -0.0056 0.0157\nv 0.017816 -0.076295 0.069239\nvn 0.9999 -0.0056 0.0157\nv 0.018272 0.082282 0.044217\nvn 0.9978 -0.0662 -0.0049\nv 0.018365 0.083243 0.050082\nvn 0.9978 -0.0662 -0.0049\nv 0.01826 0.081061 0.0581\nvn 0.9978 -0.0662 -0.0049\nv 0.01826 0.081061 0.0581\nvn 0.9987 -0.0518 -0.0037\nv 0.017784 0.070986 0.070878\nvn 0.9987 -0.0518 -0.0037\nv 0.018272 0.082282 0.044217\nvn 0.9987 -0.0518 -0.0037\nv 0.017857 0.076092 0.0766\nvn 0.9997 -0.0225 0.0129\nv 0.017718 0.07222 0.080671\nvn 0.9997 -0.0225 0.0129\nv 0.017742 0.072335 0.079033\nvn 0.9997 -0.0225 0.0129\nv 0.018272 0.082282 0.044217\nvn 0.9965 -0.0831 -0.0022\nv 0.018874 0.089461 0.045458\nvn 0.996 -0.0889 -0.0099\nv 0.018365 0.083243 0.050082\nvn 0.9964 -0.0842 -0.0036\nv 0.018241 -0.091887 0.04769\nvn 0.9999 0.0094 0.0129\nv 0.018248 -0.089636 0.045543\nvn 0.9999 0.0065 0.0145\nv 0.01774 0.06959 0.089122\nvn 0.9981 -0.0576 -0.0206\nv 0.017718 0.07222 0.080671\nvn 0.9981 -0.0576 -0.0206\nv 0.017857 0.076092 0.0766\nvn 0.9981 -0.0576 -0.0206\nv 0.017715 0.068578 0.07539\nvn 0.9999 -0.0024 0.014\nv 0.017857 0.076092 0.0766\nvn 0.9847 -0.1582 -0.0729\nv 0.017924 0.070428 0.089792\nvn 0.9847 -0.1582 -0.0729\nv 0.01774 0.06959 0.089122\nvn 0.9847 -0.1582 -0.0729\nv 0.020329 0.082721 0.079425\nvn 0.9077 -0.3715 -0.195\nv 0.020035 0.076416 0.090069\nvn 0.9077 -0.3715 -0.195\nv 0.019237 0.081046 0.077528\nvn 0.9077 -0.3715 -0.195\nv 0.017924 0.070428 0.089792\nvn 0.9877 -0.142 -0.066\nv 0.017857 0.076092 0.0766\nvn 0.9877 -0.142 -0.066\nv 0.018123 0.079346 0.07357\nvn 0.9877 -0.142 -0.066\nv 0.021236 0.078946 0.090419\nvn 0.8943 -0.3955 -0.2095\nv 0.020035 0.076416 0.090069\nvn 0.8943 -0.3955 -0.2095\nv 0.020329 0.082721 0.079425\nvn 0.8943 -0.3955 -0.2095\nv 0.01773 -0.068435 0.075359\nvn 0.9999 0.0114 -0.0006\nv 0.017749 -0.070077 0.075743\nvn 0.9999 0.0114 -0.0006\nv 0.017816 -0.076295 0.069239\nvn 0.9999 0.0114 -0.0006\nv 0.01826 0.081061 0.0581\nvn 0.9959 -0.09 -0.0114\nv 0.017857 0.076092 0.0766\nvn 0.9992 -0.0382 -0.0113\nv 0.017742 0.072335 0.079033\nvn 0.9992 -0.0382 -0.0113\nv 0.01771 0.071869 0.077805\nvn 0.9992 -0.0382 -0.0113\nv 0.017713 0.069903 0.075819\nvn 0.9995 -0.0292 0.0081\nv 0.017784 0.070986 0.070878\nvn 0.9996 -0.0263 0.0074\nv 0.017748 0.071349 0.076753\nvn 0.9996 -0.0285 0.008\nv 0.019237 0.081046 0.077528\nvn 0.9032 -0.3924 -0.1739\nv 0.019175 0.0865 0.064905\nvn 0.9027 -0.3934 -0.1742\nv 0.020329 0.082721 0.079425\nvn 0.9014 -0.3962 -0.1748\nv 0.019237 0.081046 0.077528\nvn 0.914 -0.3708 -0.1647\nv 0.018545 0.08113 0.073502\nvn 0.914 -0.3708 -0.1647\nv 0.019175 0.0865 0.064905\nvn 0.914 -0.3708 -0.1647\nv 0.020721 0.092402 0.058877\nvn 0.8982 -0.4063 -0.1675\nv 0.02211 0.090427 0.071121\nvn 0.8982 -0.4063 -0.1675\nv 0.019175 0.0865 0.064905\nvn 0.8982 -0.4063 -0.1675\nv 0.017857 0.076092 0.0766\nvn 0.9997 -0.0231 0.0079\nv 0.01826 0.081061 0.0581\nvn 0.9995 -0.0297 0.0138\nv 0.017731 -0.071007 0.076523\nvn 0.9999 0.0125 0.0026\nv 0.01774 -0.071932 0.077753\nvn 0.9999 0.0096 0.0041\nv 0.017816 -0.076295 0.069239\nvn 0.9999 0.0116 0.0035\nv 0.023344 0.087912 0.081942\nvn 0.8822 -0.416 -0.2207\nv 0.021236 0.078946 0.090419\nvn 0.8861 -0.411 -0.2145\nv 0.020329 0.082721 0.079425\nvn 0.8862 -0.4107 -0.2141\nv 0.024212 0.085712 0.08953\nvn 0.8815 -0.4168 -0.2218\nv 0.018715 0.085133 0.064454\nvn 0.9894 -0.143 -0.0265\nv 0.017713 0.069903 0.075819\nvn 0.9999 -0.0026 0.0139\nv 0.019912 0.092878 0.05297\nvn 0.9049 -0.3961 -0.1558\nv 0.020721 0.092402 0.058877\nvn 0.9049 -0.3961 -0.1558\nv 0.019175 0.0865 0.064905\nvn 0.9049 -0.3961 -0.1558\nv 0.02211 0.090427 0.071121\nvn 0.8863 -0.4185 -0.1983\nv 0.023344 0.087912 0.081942\nvn 0.8863 -0.4185 -0.1983\nv 0.020329 0.082721 0.079425\nvn 0.8863 -0.4185 -0.1983\nv 0.01825 -0.084024 0.044154\nvn 0.9998 0.0001 0.0179\nv 0.019912 0.092878 0.05297\nvn 0.954 -0.2849 -0.0933\nv 0.018545 0.08113 0.073502\nvn 0.9314 -0.3235 -0.1667\nv 0.019237 0.081046 0.077528\nvn 0.9314 -0.3235 -0.1667\nv 0.018572 0.072784 0.089854\nvn 0.9314 -0.3235 -0.1667\nv 0.018572 0.072784 0.089854\nvn 0.9145 -0.3571 -0.1901\nv 0.019237 0.081046 0.077528\nvn 0.9145 -0.3571 -0.1901\nv 0.020035 0.076416 0.090069\nvn 0.9145 -0.3571 -0.1901\nv 0.018123 0.079346 0.07357\nvn 0.9655 -0.233 -0.1163\nv 0.018545 0.08113 0.073502\nvn 0.9655 -0.233 -0.1163\nv 0.017924 0.070428 0.089792\nvn 0.9655 -0.233 -0.1163\nv 0.017748 0.071349 0.076753\nvn 0.9987 -0.0216 0.0467\nv 0.017857 0.076092 0.0766\nvn 0.9987 -0.0216 0.0467\nv 0.01771 0.071869 0.077805\nvn 0.9987 -0.0216 0.0467\nv 0.018272 0.082282 0.044217\nvn 0.9998 -0.0001 0.0182\nv 0.018545 0.08113 0.073502\nvn 0.9689 -0.2326 -0.0847\nv 0.018123 0.079346 0.07357\nvn 0.9689 -0.2326 -0.0847\nv 0.018715 0.085133 0.064454\nvn 0.9689 -0.2326 -0.0847\nv 0.02211 0.090427 0.071121\nvn 0.9011 -0.3967 -0.1749\nv 0.017924 0.070428 0.089792\nvn 0.9564 -0.2595 -0.134\nv 0.018545 0.08113 0.073502\nvn 0.9564 -0.2595 -0.134\nv 0.018572 0.072784 0.089854\nvn 0.9564 -0.2595 -0.134\nv 0.018249 -0.026286 0.101172\nvn 0.9876 -0.0006 0.1571\nv 0.017253 -0.026954 0.107432\nvn 0.987 -0.0011 0.1605\nv 0.01825 -0.073593 0.100985\nvn 0.9874 -0.0008 0.1584\nv 0.017151 -0.073644 0.10769\nvn 0.9868 -0.0013 0.1617\nv 0.017755 0.067268 0.091213\nvn 0.979 -0.0985 -0.1785\nv 0.017721 0.068677 0.090248\nvn 0.979 -0.0985 -0.1785\nv 0.017945 0.068543 0.091552\nvn 0.979 -0.0985 -0.1785\nv 0.018413 0.067219 0.093013\nvn 0.9038 -0.1304 -0.4077\nv 0.017945 0.068543 0.091552\nvn 0.9038 -0.1304 -0.4077\nv 0.0187 0.069023 0.093074\nvn 0.9038 -0.1304 -0.4077\nv 0.017721 0.068677 0.090248\nvn 0.9855 -0.1398 -0.0961\nv 0.01774 0.06959 0.089122\nvn 0.9855 -0.1398 -0.0961\nv 0.017924 0.070428 0.089792\nvn 0.9855 -0.1398 -0.0961\nv 0.021491 0.077532 0.092671\nvn 0.85 -0.3975 -0.3456\nv 0.021236 0.078946 0.090419\nvn 0.85 -0.3975 -0.3456\nv 0.024504 0.08474 0.091792\nvn 0.85 -0.3975 -0.3456\nv 0.025273 0.08088 0.096696\nvn 0.8065 -0.36 -0.4691\nv 0.022128 0.076171 0.094903\nvn 0.8065 -0.36 -0.4691\nv 0.024901 0.08293 0.094482\nvn 0.8065 -0.36 -0.4691\nv 0.01983 0.068763 0.094813\nvn 0.8171 -0.1586 -0.5542\nv 0.0187 0.069023 0.093074\nvn 0.8171 -0.1586 -0.5542\nv 0.019857 0.070642 0.094316\nvn 0.8171 -0.1586 -0.5542\nv 0.021491 0.077532 0.092671\nvn 0.8323 -0.3953 -0.3886\nv 0.024504 0.08474 0.091792\nvn 0.8323 -0.3953 -0.3886\nv 0.024901 0.08293 0.094482\nvn 0.8323 -0.3953 -0.3886\nv 0.019857 0.070642 0.094316\nvn 0.8448 -0.2344 -0.481\nv 0.0187 0.069023 0.093074\nvn 0.8448 -0.2344 -0.481\nv 0.01943 0.072192 0.09281\nvn 0.8448 -0.2344 -0.481\nv 0.017801 -0.077763 0.076118\nvn 0.9998 0.0209 0.0044\nv 0.021845 0.071923 0.096555\nvn 0.7831 -0.1698 -0.5983\nv 0.01983 0.068763 0.094813\nvn 0.7831 -0.1698 -0.5983\nv 0.019857 0.070642 0.094316\nvn 0.7831 -0.1698 -0.5983\nv 0.019857 0.070642 0.094316\nvn 0.825 -0.2601 -0.5018\nv 0.01943 0.072192 0.09281\nvn 0.825 -0.2601 -0.5018\nv 0.021052 0.073024 0.095045\nvn 0.825 -0.2601 -0.5018\nv 0.01943 0.072192 0.09281\nvn 0.8214 -0.3029 -0.4832\nv 0.022128 0.076171 0.094903\nvn 0.8214 -0.3029 -0.4832\nv 0.021052 0.073024 0.095045\nvn 0.8214 -0.3029 -0.4832\nv 0.018241 -0.091887 0.04769\nvn 0.9998 0.0201 0.0055\nv 0.022128 0.076171 0.094903\nvn 0.8334 -0.3331 -0.4411\nv 0.01943 0.072192 0.09281\nvn 0.8334 -0.3331 -0.4411\nv 0.021491 0.077532 0.092671\nvn 0.8334 -0.3331 -0.4411\nv 0.026425 0.0715 0.101152\nvn 0.6804 -0.0417 -0.7317\nv 0.022057 0.069565 0.097201\nvn 0.6804 -0.0417 -0.7317\nv 0.026199 0.073974 0.100801\nvn 0.6804 -0.0417 -0.7317\nv 0.026199 0.073974 0.100801\nvn 0.7278 -0.1686 -0.6647\nv 0.021845 0.071923 0.096555\nvn 0.7278 -0.1686 -0.6647\nv 0.025962 0.076079 0.100008\nvn 0.7278 -0.1686 -0.6647\nv 0.017915 0.066472 0.092017\nvn 0.9616 -0.073 -0.2644\nv 0.017755 0.067268 0.091213\nvn 0.9616 -0.073 -0.2644\nv 0.017945 0.068543 0.091552\nvn 0.9616 -0.073 -0.2644\nv 0.022128 0.076171 0.094903\nvn 0.8143 -0.3623 -0.4534\nv 0.021491 0.077532 0.092671\nvn 0.8143 -0.3623 -0.4534\nv 0.024901 0.08293 0.094482\nvn 0.8143 -0.3623 -0.4534\nv 0.017785 -0.069357 0.092633\nvn 0.9988 0.0221 -0.0443\nv 0.01825 -0.073593 0.100985\nvn 0.9988 0.0221 -0.0443\nv 0.01825 -0.079155 0.098207\nvn 0.9988 0.0221 -0.0443\nv 0.017856 -0.026555 0.09437\nvn 0.9984 0.0004 -0.0558\nv 0.017785 -0.069357 0.092633\nvn 0.9984 0.0006 -0.057\nv 0.017715 -0.065856 0.091437\nvn 0.9987 0.0002 -0.05\nv 0.017892 0.026935 0.092626\nvn 0.969 -0.1923 -0.1549\nv 0.018466 0.028205 0.094638\nvn 0.969 -0.1923 -0.1549\nv 0.018067 0.026412 0.094368\nvn 0.969 -0.1923 -0.1549\nv 0.018466 0.028205 0.094638\nvn 0.9414 -0.2063 -0.2669\nv 0.018066 0.028804 0.092763\nvn 0.9414 -0.2063 -0.2669\nv 0.018609 0.029842 0.093878\nvn 0.9414 -0.2063 -0.2669\nv 0.01872 0.03256 0.09345\nvn 0.8862 -0.1071 -0.4507\nv 0.018609 0.029842 0.093878\nvn 0.8862 -0.1071 -0.4507\nv 0.018025 0.031604 0.092311\nvn 0.8862 -0.1071 -0.4507\nv 0.01922 0.030219 0.095031\nvn 0.9335 -0.317 -0.1677\nv 0.018504 0.027727 0.095751\nvn 0.9335 -0.317 -0.1677\nv 0.018466 0.028205 0.094638\nvn 0.9335 -0.317 -0.1677\nv 0.018466 0.028205 0.094638\nvn 0.8861 -0.2566 -0.3859\nv 0.018609 0.029842 0.093878\nvn 0.8854 -0.2627 -0.3836\nv 0.01922 0.030219 0.095031\nvn 0.886 -0.2576 -0.3856\nv 0.018025 0.031604 0.092311\nvn 0.8566 -0.008 -0.5159\nv 0.018127 0.035878 0.092414\nvn 0.8566 -0.008 -0.5159\nv 0.01872 0.03256 0.09345\nvn 0.8566 -0.008 -0.5159\nv 0.018504 0.027727 0.095751\nvn 0.9393 -0.3359 -0.0695\nv 0.018786 0.028126 0.09764\nvn 0.9393 -0.3359 -0.0695\nv 0.018396 0.027046 0.097589\nvn 0.9393 -0.3359 -0.0695\nv 0.019537 0.031483 0.094892\nvn 0.8852 -0.2638 -0.3831\nv 0.017741 -0.072382 0.080162\nvn 0.9999 0.0101 0.0016\nv 0.017719 -0.070987 0.084956\nvn 0.9999 0.0101 0.0016\nv 0.017801 -0.077763 0.076118\nvn 0.9999 0.0101 0.0016\nv 0.019358 0.02996 0.095559\nvn 0.8462 -0.3576 -0.3949\nv 0.018504 0.027727 0.095751\nvn 0.8462 -0.3576 -0.3949\nv 0.01922 0.030219 0.095031\nvn 0.8462 -0.3576 -0.3949\nv 0.01872 0.03256 0.09345\nvn 0.8428 -0.0174 -0.5379\nv 0.018127 0.035878 0.092414\nvn 0.8428 -0.0174 -0.5379\nv 0.018655 0.036638 0.093217\nvn 0.8428 -0.0174 -0.5379\nv 0.019537 0.031483 0.094892\nvn 0.8508 -0.1749 -0.4955\nv 0.018609 0.029842 0.093878\nvn 0.8508 -0.1749 -0.4955\nv 0.019661 0.032655 0.094691\nvn 0.8508 -0.1749 -0.4955\nv 0.018609 0.029842 0.093878\nvn 0.7952 -0.1259 -0.5932\nv 0.01872 0.03256 0.09345\nvn 0.7952 -0.1259 -0.5932\nv 0.019661 0.032655 0.094691\nvn 0.7952 -0.1259 -0.5932\nv 0.018655 0.036638 0.093217\nvn 0.7352 -0.027 -0.6773\nv 0.019436 0.034695 0.094141\nvn 0.7352 -0.027 -0.6773\nv 0.01872 0.03256 0.09345\nvn 0.7352 -0.027 -0.6773\nv 0.019661 0.032655 0.094691\nvn 0.7975 -0.0733 -0.5989\nv 0.01872 0.03256 0.09345\nvn 0.7975 -0.0733 -0.5989\nv 0.019436 0.034695 0.094141\nvn 0.7975 -0.0733 -0.5989\nv 0.019358 0.02996 0.095559\nvn 0.8275 -0.4383 -0.3508\nv 0.020561 0.031679 0.09625\nvn 0.8275 -0.4383 -0.3508\nv 0.02032 0.030666 0.096946\nvn 0.8275 -0.4383 -0.3508\nv 0.019265 0.029318 0.096444\nvn 0.8014 -0.5896 -0.1007\nv 0.02032 0.030666 0.096946\nvn 0.8014 -0.5896 -0.1007\nv 0.019388 0.029206 0.09808\nvn 0.8014 -0.5896 -0.1007\nv 0.019358 0.02996 0.095559\nvn 0.8162 -0.4063 -0.4109\nv 0.01922 0.030219 0.095031\nvn 0.8162 -0.4063 -0.4109\nv 0.020561 0.031679 0.09625\nvn 0.8162 -0.4063 -0.4109\nv 0.020914 0.032681 0.096117\nvn 0.7732 -0.3428 -0.5336\nv 0.020561 0.031679 0.09625\nvn 0.7732 -0.3428 -0.5336\nv 0.019537 0.031483 0.094892\nvn 0.7732 -0.3428 -0.5336\nv 0.020561 0.031679 0.09625\nvn 0.7888 -0.2587 -0.5575\nv 0.01922 0.030219 0.095031\nvn 0.7888 -0.2587 -0.5575\nv 0.019537 0.031483 0.094892\nvn 0.7888 -0.2587 -0.5575\nv 0.018786 0.028126 0.09764\nvn 0.9398 -0.3407 0.0278\nv 0.018385 0.027304 0.101143\nvn 0.9398 -0.3407 0.0278\nv 0.018396 0.027046 0.097589\nvn 0.9398 -0.3407 0.0278\nv 0.018385 0.027304 0.101143\nvn 0.9894 -0.1447 0.0137\nv 0.018236 0.026297 0.101221\nvn 0.9894 -0.1447 0.0137\nv 0.018396 0.027046 0.097589\nvn 0.9894 -0.1447 0.0137\nv 0.019436 0.034695 0.094141\nvn 0.7408 -0.0973 -0.6646\nv 0.020374 0.035776 0.095029\nvn 0.7408 -0.0973 -0.6646\nv 0.019661 0.032655 0.094691\nvn 0.7408 -0.0973 -0.6646\nv 0.020374 0.035776 0.095029\nvn 0.6976 -0.0823 -0.7117\nv 0.021083 0.03382 0.09595\nvn 0.6976 -0.0823 -0.7117\nv 0.019661 0.032655 0.094691\nvn 0.6976 -0.0823 -0.7117\nv 0.02032 0.030666 0.096946\nvn 0.7282 -0.4975 -0.4713\nv 0.020561 0.031679 0.09625\nvn 0.7282 -0.4975 -0.4713\nv 0.021428 0.031577 0.097697\nvn 0.7282 -0.4975 -0.4713\nv 0.020561 0.031679 0.09625\nvn 0.6703 -0.5951 -0.4435\nv 0.02263 0.032558 0.098198\nvn 0.6703 -0.5951 -0.4435\nv 0.021428 0.031577 0.097697\nvn 0.6703 -0.5951 -0.4435\nv 0.02263 0.032558 0.098198\nvn 0.7148 -0.3757 -0.5898\nv 0.020561 0.031679 0.09625\nvn 0.7148 -0.3757 -0.5898\nv 0.022142 0.033118 0.097249\nvn 0.7148 -0.3757 -0.5898\nv 0.02263 0.032558 0.098198\nvn 0.6143 -0.6315 -0.4732\nv 0.023606 0.032641 0.099354\nvn 0.6143 -0.6315 -0.4732\nv 0.022164 0.031841 0.098549\nvn 0.6143 -0.6315 -0.4732\nv 0.019436 0.034695 0.094141\nvn 0.7666 0.0023 -0.6421\nv 0.018655 0.036638 0.093217\nvn 0.7654 0.0025 -0.6436\nv 0.019394 0.047238 0.094136\nvn 0.7661 0.0024 -0.6427\nv 0.020644 0.030803 0.101173\nvn 0.5225 -0.8484 0.0848\nv 0.020898 0.030799 0.09956\nvn 0.5225 -0.8484 0.0848\nv 0.021549 0.031365 0.10121\nvn 0.5225 -0.8484 0.0848\nv 0.024701 0.033799 0.099337\nvn 0.6264 -0.486 -0.6094\nv 0.02263 0.032558 0.098198\nvn 0.6264 -0.486 -0.6094\nv 0.022142 0.033118 0.097249\nvn 0.6264 -0.486 -0.6094\nv 0.02263 0.032558 0.098198\nvn 0.6302 -0.6033 -0.4887\nv 0.024701 0.033799 0.099337\nvn 0.6302 -0.6033 -0.4887\nv 0.023606 0.032641 0.099354\nvn 0.6302 -0.6033 -0.4887\nv 0.022142 0.033118 0.097249\nvn 0.6504 -0.2799 -0.7061\nv 0.023431 0.034298 0.097969\nvn 0.6504 -0.2799 -0.7061\nv 0.024701 0.033799 0.099337\nvn 0.6504 -0.2799 -0.7061\nv 0.01774 -0.071932 0.077753\nvn 0.9997 0.0043 0.0221\nv 0.017721 -0.072178 0.078662\nvn 0.9997 0.0043 0.0221\nv 0.017801 -0.077763 0.076118\nvn 0.9997 0.0043 0.0221\nv 0.018025 0.031604 0.092311\nvn 0.7691 -0.003 -0.6392\nv 0.017915 0.066472 0.092017\nvn 0.7691 -0.003 -0.6392\nv 0.018127 0.035878 0.092414\nvn 0.7691 -0.003 -0.6392\nv 0.019436 0.034695 0.094141\nvn 0.686 0.002 -0.7276\nv 0.019394 0.047238 0.094136\nvn 0.686 0.002 -0.7276\nv 0.020374 0.035776 0.095029\nvn 0.686 0.002 -0.7276\nv 0.022908 0.031906 0.100523\nvn 0.4295 -0.8925 -0.1378\nv 0.023344 0.032198 0.09999\nvn 0.4295 -0.8925 -0.1378\nv 0.025355 0.032984 0.101164\nvn 0.4295 -0.8925 -0.1378\nv 0.024701 0.033799 0.099337\nvn 0.6277 -0.3321 -0.7041\nv 0.023431 0.034298 0.097969\nvn 0.6277 -0.3321 -0.7041\nv 0.028277 0.036669 0.101171\nvn 0.6277 -0.3321 -0.7041\nv 0.023659 0.035498 0.097894\nvn 0.598 -0.1623 -0.7849\nv 0.028277 0.036669 0.101171\nvn 0.598 -0.1623 -0.7849\nv 0.023431 0.034298 0.097969\nvn 0.598 -0.1623 -0.7849\nv 0.027234 0.034524 0.101175\nvn 0.6115 -0.3893 -0.6889\nv 0.024701 0.033799 0.099337\nvn 0.6115 -0.3893 -0.6889\nv 0.027757 0.035338 0.10118\nvn 0.6115 -0.3893 -0.6889\nv 0.018673 0.059883 0.093331\nvn 0.7649 0.0026 -0.6442\nv 0.018251 -0.092995 0.053421\nvn 0.9997 0.0248 0.0032\nv 0.017719 -0.06869 0.09033\nvn 0.9996 0.0132 -0.0249\nv 0.017721 -0.067116 0.091247\nvn 0.9996 0.0126 -0.026\nv 0.017785 -0.069357 0.092633\nvn 0.9995 0.01 -0.03\nv 0.018127 0.035878 0.092414\nvn 0.814 0.0037 -0.5809\nv 0.018413 0.067219 0.093013\nvn 0.814 0.0037 -0.5809\nv 0.018673 0.059883 0.093331\nvn 0.814 0.0037 -0.5809\nv 0.01983 0.068763 0.094813\nvn 0.7452 -0.1132 -0.6571\nv 0.021845 0.071923 0.096555\nvn 0.7452 -0.1132 -0.6571\nv 0.022057 0.069565 0.097201\nvn 0.7452 -0.1132 -0.6571\nv 0.022729 0.05958 0.097441\nvn 0.6641 0.0267 -0.7472\nv 0.022057 0.069565 0.097201\nvn 0.6641 0.0267 -0.7472\nv 0.026425 0.0715 0.101152\nvn 0.6641 0.0267 -0.7472\nv 0.018445 0.071025 0.091384\nvn 0.8818 -0.3113 -0.3544\nv 0.019674 0.074495 0.091397\nvn 0.8818 -0.3113 -0.3544\nv 0.01943 0.072192 0.09281\nvn 0.8818 -0.3113 -0.3544\nv 0.018445 0.071025 0.091384\nvn 0.9021 -0.3187 -0.291\nv 0.018572 0.072784 0.089854\nvn 0.9021 -0.3187 -0.291\nv 0.019674 0.074495 0.091397\nvn 0.9021 -0.3187 -0.291\nv 0.026425 0.0715 0.101152\nvn 0.6171 0.043 -0.7857\nv 0.027987 0.049338 0.101167\nvn 0.6171 0.043 -0.7857\nv 0.025753 0.056312 0.099794\nvn 0.6171 0.043 -0.7857\nv 0.017801 -0.077763 0.076118\nvn 0.9994 0.0308 -0.015\nv 0.017719 -0.070987 0.084956\nvn 0.9992 0.0359 -0.0183\nv 0.01775 -0.069602 0.089388\nvn 0.9993 0.0335 -0.0168\nv 0.017785 -0.069357 0.092633\nvn 0.9995 0.0277 -0.0131\nv 0.019674 0.074495 0.091397\nvn 0.8641 -0.3765 -0.334\nv 0.021236 0.078946 0.090419\nvn 0.8641 -0.3765 -0.334\nv 0.021491 0.077532 0.092671\nvn 0.8641 -0.3765 -0.334\nv 0.021845 0.071923 0.096555\nvn 0.7567 -0.2464 -0.6056\nv 0.025642 0.078519 0.098615\nvn 0.7567 -0.2464 -0.6056\nv 0.025962 0.076079 0.100008\nvn 0.7567 -0.2464 -0.6056\nv 0.018251 -0.089872 0.074163\nvn 0.9992 0.0389 -0.0104\nv 0.018251 -0.092995 0.053421\nvn 0.9993 0.0381 -0.0058\nv 0.01775 -0.069602 0.089388\nvn 0.9987 0.0494 -0.0144\nv 0.017719 -0.06869 0.09033\nvn 0.9987 0.0494 -0.0144\nv 0.017785 -0.069357 0.092633\nvn 0.9987 0.0494 -0.0144\nv 0.017865 0.023805 0.094367\nvn 0.9987 -0.0002 -0.0501\nv 0.017717 0.021817 0.091432\nvn 0.9988 -0.0001 -0.0482\nv 0.02032 0.030666 0.096946\nvn 0.8029 -0.5194 -0.2925\nv 0.019265 0.029318 0.096444\nvn 0.8029 -0.5194 -0.2925\nv 0.019358 0.02996 0.095559\nvn 0.8029 -0.5194 -0.2925\nv 0.018127 0.035878 0.092414\nvn 0.8346 0.0021 -0.5508\nv 0.018673 0.059883 0.093331\nvn 0.8346 0.0021 -0.5508\nv 0.018655 0.036638 0.093217\nvn 0.8346 0.0021 -0.5508\nv 0.022142 0.033118 0.097249\nvn 0.7005 -0.3303 -0.6326\nv 0.020561 0.031679 0.09625\nvn 0.7005 -0.3303 -0.6326\nv 0.020914 0.032681 0.096117\nvn 0.7005 -0.3303 -0.6326\nv 0.018248 -0.084549 0.092619\nvn 0.9991 0.0305 -0.0297\nv 0.017785 -0.069357 0.092633\nvn 0.9991 0.0305 -0.0297\nv 0.01825 -0.079155 0.098207\nvn 0.9991 0.0305 -0.0297\nv 0.024701 0.033799 0.099337\nvn 0.5834 -0.5725 -0.5761\nv 0.027234 0.034524 0.101175\nvn 0.582 -0.5752 -0.5749\nv 0.026505 0.033759 0.101202\nvn 0.5863 -0.5668 -0.5788\nv 0.022128 0.076171 0.094903\nvn 0.7807 -0.3162 -0.539\nv 0.025273 0.08088 0.096696\nvn 0.7807 -0.3162 -0.539\nv 0.025642 0.078519 0.098615\nvn 0.7807 -0.3162 -0.539\nv 0.024504 0.08474 0.091792\nvn 0.8613 -0.417 -0.2903\nv 0.021236 0.078946 0.090419\nvn 0.8613 -0.417 -0.2903\nv 0.024212 0.085712 0.08953\nvn 0.8613 -0.417 -0.2903\nv 0.018249 -0.026286 0.101172\nvn 0.9984 0.0004 -0.0561\nv 0.024252 0.037458 0.098135\nvn 0.5909 -0.0757 -0.8032\nv 0.028277 0.036669 0.101171\nvn 0.5904 -0.0789 -0.8033\nv 0.023659 0.035498 0.097894\nvn 0.5902 -0.0802 -0.8033\nv 0.028616 0.039374 0.101169\nvn 0.5911 -0.0746 -0.8031\nv 0.01825 -0.073593 0.100985\nvn 0.9985 0.0002 -0.0554\nv 0.017717 0.021817 0.091432\nvn 0.9903 -0.0015 -0.139\nv 0.017721 0.029187 0.091378\nvn 0.9903 -0.0015 -0.139\nv 0.017892 0.026935 0.092626\nvn 0.9903 -0.0015 -0.139\nv 0.018025 0.031604 0.092311\nvn 0.9683 -0.0261 -0.2484\nv 0.018066 0.028804 0.092763\nvn 0.9683 -0.0261 -0.2484\nv 0.017721 0.029187 0.091378\nvn 0.9683 -0.0261 -0.2484\nv 0.017892 0.026935 0.092626\nvn 0.9703 -0.0731 -0.2306\nv 0.018066 0.028804 0.092763\nvn 0.9703 -0.0731 -0.2306\nv 0.018466 0.028205 0.094638\nvn 0.9703 -0.0731 -0.2306\nv 0.018066 0.028804 0.092763\nvn 0.9156 -0.0511 -0.3987\nv 0.018025 0.031604 0.092311\nvn 0.9156 -0.0511 -0.3987\nv 0.018609 0.029842 0.093878\nvn 0.9156 -0.0511 -0.3987\nv 0.018196 0.026323 0.096409\nvn 0.9667 -0.2458 -0.0715\nv 0.018067 0.026412 0.094368\nvn 0.9667 -0.2458 -0.0715\nv 0.018504 0.027727 0.095751\nvn 0.9667 -0.2458 -0.0715\nv 0.018504 0.027727 0.095751\nvn 0.9729 -0.1987 -0.1182\nv 0.018067 0.026412 0.094368\nvn 0.9729 -0.1987 -0.1182\nv 0.018466 0.028205 0.094638\nvn 0.9729 -0.1987 -0.1182\nv 0.018196 0.026323 0.096409\nvn 0.9737 -0.2264 -0.0269\nv 0.018504 0.027727 0.095751\nvn 0.9737 -0.2264 -0.0269\nv 0.018396 0.027046 0.097589\nvn 0.9737 -0.2264 -0.0269\nv 0.018786 0.028126 0.09764\nvn 0.9091 -0.4137 -0.0486\nv 0.018504 0.027727 0.095751\nvn 0.9091 -0.4137 -0.0486\nv 0.019265 0.029318 0.096444\nvn 0.9091 -0.4137 -0.0486\nv 0.018504 0.027727 0.095751\nvn 0.9158 -0.3648 -0.1683\nv 0.019358 0.02996 0.095559\nvn 0.9158 -0.3648 -0.1683\nv 0.019265 0.029318 0.096444\nvn 0.9158 -0.3648 -0.1683\nv 0.018236 0.026297 0.101221\nvn 0.9674 -0.2529 -0.0096\nv 0.018196 0.026323 0.096409\nvn 0.9674 -0.2529 -0.0096\nv 0.018396 0.027046 0.097589\nvn 0.9674 -0.2529 -0.0096\nv 0.01774 0.066021 0.091413\nvn 0.9687 -0.0502 -0.2433\nv 0.017755 0.067268 0.091213\nvn 0.9687 -0.0502 -0.2433\nv 0.017915 0.066472 0.092017\nvn 0.9687 -0.0502 -0.2433\nv 0.018786 0.028126 0.09764\nvn 0.8858 -0.4537 -0.0977\nv 0.019265 0.029318 0.096444\nvn 0.8858 -0.4537 -0.0977\nv 0.019388 0.029206 0.09808\nvn 0.8858 -0.4537 -0.0977\nv 0.019664 0.067465 0.094701\nvn 0.8057 -0.0513 -0.5901\nv 0.018413 0.067219 0.093013\nvn 0.8057 -0.0513 -0.5901\nv 0.01983 0.068763 0.094813\nvn 0.8057 -0.0513 -0.5901\nv 0.017865 0.023805 0.094367\nvn 0.9991 -0.0267 -0.0321\nv 0.017717 0.021817 0.091432\nvn 0.9991 -0.0267 -0.0321\nv 0.017892 0.026935 0.092626\nvn 0.9991 -0.0267 -0.0321\nv 0.018891 0.028563 0.1\nvn 0.9348 -0.3544 0.024\nv 0.018385 0.027304 0.101143\nvn 0.9348 -0.3544 0.024\nv 0.018786 0.028126 0.09764\nvn 0.9348 -0.3544 0.024\nv 0.018067 0.026412 0.094368\nvn 0.9895 -0.0768 -0.1222\nv 0.017865 0.023805 0.094367\nvn 0.9895 -0.0768 -0.1222\nv 0.017892 0.026935 0.092626\nvn 0.9895 -0.0768 -0.1222\nv 0.018066 0.028804 0.092763\nvn 0.9632 -0.0703 -0.2594\nv 0.017892 0.026935 0.092626\nvn 0.9632 -0.0703 -0.2594\nv 0.017721 0.029187 0.091378\nvn 0.9632 -0.0703 -0.2594\nv 0.02032 0.030666 0.096946\nvn 0.6653 -0.7183 -0.2038\nv 0.020765 0.030733 0.098165\nvn 0.6653 -0.7183 -0.2038\nv 0.020014 0.029997 0.098309\nvn 0.6653 -0.7183 -0.2038\nv 0.018891 0.028563 0.1\nvn 0.8627 -0.5028 0.0546\nv 0.018786 0.028126 0.09764\nvn 0.8627 -0.5028 0.0546\nv 0.019388 0.029206 0.09808\nvn 0.8627 -0.5028 0.0546\nv 0.019714 0.029904 0.100882\nvn 0.8409 -0.5399 0.0366\nv 0.018891 0.028563 0.1\nvn 0.8409 -0.5399 0.0366\nv 0.019388 0.029206 0.09808\nvn 0.8409 -0.5399 0.0366\nv 0.019537 0.031483 0.094892\nvn 0.7395 -0.189 -0.6461\nv 0.019661 0.032655 0.094691\nvn 0.7395 -0.189 -0.6461\nv 0.020914 0.032681 0.096117\nvn 0.7395 -0.189 -0.6461\nv 0.019661 0.032655 0.094691\nvn 0.7374 -0.2041 -0.6439\nv 0.021083 0.03382 0.09595\nvn 0.7374 -0.2041 -0.6439\nv 0.020914 0.032681 0.096117\nvn 0.7374 -0.2041 -0.6439\nv 0.019714 0.029904 0.100882\nvn 0.7725 -0.6314 0.0674\nv 0.019388 0.029206 0.09808\nvn 0.7725 -0.6314 0.0674\nv 0.020014 0.029997 0.098309\nvn 0.7725 -0.6314 0.0674\nv 0.020374 0.035776 0.095029\nvn 0.6684 -0.1046 -0.7364\nv 0.021757 0.035806 0.09628\nvn 0.6684 -0.1046 -0.7364\nv 0.021083 0.03382 0.09595\nvn 0.6684 -0.1046 -0.7364\nv 0.020898 0.030799 0.09956\nvn 0.6346 -0.7715 0.0462\nv 0.019714 0.029904 0.100882\nvn 0.6346 -0.7715 0.0462\nv 0.020014 0.029997 0.098309\nvn 0.6346 -0.7715 0.0462\nv 0.020898 0.030799 0.09956\nvn 0.6965 -0.7168 -0.0326\nv 0.020014 0.029997 0.098309\nvn 0.6965 -0.7168 -0.0326\nv 0.020765 0.030733 0.098165\nvn 0.6965 -0.7168 -0.0326\nv 0.020914 0.032681 0.096117\nvn 0.7017 -0.2045 -0.6825\nv 0.021083 0.03382 0.09595\nvn 0.7017 -0.2045 -0.6825\nv 0.022142 0.033118 0.097249\nvn 0.7017 -0.2045 -0.6825\nv 0.019388 0.029206 0.09808\nvn 0.7946 -0.5962 -0.1148\nv 0.02032 0.030666 0.096946\nvn 0.7946 -0.5962 -0.1148\nv 0.020014 0.029997 0.098309\nvn 0.7946 -0.5962 -0.1148\nv 0.020898 0.030799 0.09956\nvn 0.6734 -0.7313 0.1082\nv 0.020644 0.030803 0.101173\nvn 0.6734 -0.7313 0.1082\nv 0.019714 0.029904 0.100882\nvn 0.6734 -0.7313 0.1082\nv 0.022164 0.031841 0.098549\nvn 0.6743 -0.6286 -0.3876\nv 0.021428 0.031577 0.097697\nvn 0.6743 -0.6286 -0.3876\nv 0.02263 0.032558 0.098198\nvn 0.6743 -0.6286 -0.3876\nv 0.021083 0.03382 0.09595\nvn 0.6362 -0.0887 -0.7664\nv 0.021757 0.035806 0.09628\nvn 0.6351 -0.0963 -0.7664\nv 0.023659 0.035498 0.097894\nvn 0.636 -0.0904 -0.7664\nv 0.017721 -0.072178 0.078662\nvn 0.9998 0.0192 -0.0107\nv 0.017741 -0.072382 0.080162\nvn 0.9998 0.0192 -0.0107\nv 0.017801 -0.077763 0.076118\nvn 0.9998 0.0192 -0.0107\nv 0.022142 0.033118 0.097249\nvn 0.6569 -0.2941 -0.6943\nv 0.021083 0.03382 0.09595\nvn 0.6569 -0.2941 -0.6943\nv 0.023431 0.034298 0.097969\nvn 0.6569 -0.2941 -0.6943\nv 0.02032 0.030666 0.096946\nvn 0.704 -0.6751 -0.2202\nv 0.021428 0.031577 0.097697\nvn 0.704 -0.6751 -0.2202\nv 0.020765 0.030733 0.098165\nvn 0.704 -0.6751 -0.2202\nv 0.023431 0.034298 0.097969\nvn 0.6621 -0.171 -0.7296\nv 0.021083 0.03382 0.09595\nvn 0.6621 -0.171 -0.7296\nv 0.023659 0.035498 0.097894\nvn 0.6621 -0.171 -0.7296\nv 0.023344 0.032198 0.09999\nvn 0.567 -0.767 -0.3004\nv 0.021881 0.03147 0.099088\nvn 0.567 -0.767 -0.3004\nv 0.023606 0.032641 0.099354\nvn 0.567 -0.767 -0.3004\nv 0.022908 0.031906 0.100523\nvn 0.4839 -0.8713 -0.0816\nv 0.021881 0.03147 0.099088\nvn 0.4839 -0.8713 -0.0816\nv 0.023344 0.032198 0.09999\nvn 0.4839 -0.8713 -0.0816\nv 0.022743 0.039517 0.096986\nvn 0.5996 -0.007 -0.8003\nv 0.024252 0.037458 0.098135\nvn 0.5996 -0.007 -0.8003\nv 0.021757 0.035806 0.09628\nvn 0.5996 -0.007 -0.8003\nv 0.020898 0.030799 0.09956\nvn 0.5592 -0.8289 -0.0142\nv 0.020765 0.030733 0.098165\nvn 0.5592 -0.8289 -0.0142\nv 0.021881 0.03147 0.099088\nvn 0.5592 -0.8289 -0.0142\nv 0.023606 0.032641 0.099354\nvn 0.5084 -0.7907 -0.3411\nv 0.025355 0.032984 0.101164\nvn 0.5084 -0.7907 -0.3411\nv 0.023344 0.032198 0.09999\nvn 0.5084 -0.7907 -0.3411\nv 0.020765 0.030733 0.098165\nvn 0.6396 -0.6902 -0.3385\nv 0.021428 0.031577 0.097697\nvn 0.6396 -0.6902 -0.3385\nv 0.022164 0.031841 0.098549\nvn 0.6396 -0.6902 -0.3385\nv 0.021881 0.03147 0.099088\nvn 0.6406 -0.747 -0.1782\nv 0.020765 0.030733 0.098165\nvn 0.6406 -0.747 -0.1782\nv 0.022164 0.031841 0.098549\nvn 0.6406 -0.747 -0.1782\nv 0.017721 0.029187 0.091378\nvn 0.9605 -0.0002 -0.2782\nv 0.01774 0.066021 0.091413\nvn 0.9605 -0.0002 -0.2782\nv 0.017915 0.066472 0.092017\nvn 0.9605 -0.0002 -0.2782\nv 0.018025 0.031604 0.092311\nvn 0.9503 0.0004 -0.3112\nv 0.017721 0.029187 0.091378\nvn 0.9503 0.0004 -0.3112\nv 0.017915 0.066472 0.092017\nvn 0.9503 0.0004 -0.3112\nv 0.022743 0.039517 0.096986\nvn 0.6708 -0.0373 -0.7407\nv 0.021757 0.035806 0.09628\nvn 0.6708 -0.0373 -0.7407\nv 0.020374 0.035776 0.095029\nvn 0.6708 -0.0373 -0.7407\nv 0.023606 0.032641 0.099354\nvn 0.5703 -0.7852 -0.2414\nv 0.021881 0.03147 0.099088\nvn 0.5703 -0.7852 -0.2414\nv 0.022164 0.031841 0.098549\nvn 0.5703 -0.7852 -0.2414\nv 0.027757 0.035338 0.10118\nvn 0.5858 -0.2341 -0.7759\nv 0.024701 0.033799 0.099337\nvn 0.5858 -0.2341 -0.7759\nv 0.028277 0.036669 0.101171\nvn 0.5858 -0.2341 -0.7759\nv 0.020943 0.062748 0.095911\nvn 0.6688 0.0183 -0.7432\nv 0.022729 0.05958 0.097441\nvn 0.6688 0.0183 -0.7432\nv 0.019394 0.047238 0.094136\nvn 0.6688 0.0183 -0.7432\nv 0.022729 0.05958 0.097441\nvn 0.6969 0.0037 -0.7172\nv 0.020374 0.035776 0.095029\nvn 0.6969 0.0037 -0.7172\nv 0.019394 0.047238 0.094136\nvn 0.6969 0.0037 -0.7172\nv 0.017915 0.066472 0.092017\nvn 0.8946 0.0004 -0.4469\nv 0.018413 0.067219 0.093013\nvn 0.8946 0.0004 -0.4469\nv 0.018127 0.035878 0.092414\nvn 0.8946 0.0004 -0.4469\nv 0.019394 0.047238 0.094136\nvn 0.7073 0.0103 -0.7069\nv 0.019664 0.067465 0.094701\nvn 0.7093 0.0113 -0.7048\nv 0.020943 0.062748 0.095911\nvn 0.7141 0.0139 -0.6999\nv 0.020898 0.030799 0.09956\nvn 0.5214 -0.8453 -0.1163\nv 0.021881 0.03147 0.099088\nvn 0.5214 -0.8453 -0.1163\nv 0.022908 0.031906 0.100523\nvn 0.5214 -0.8453 -0.1163\nv 0.025753 0.056312 0.099794\nvn 0.6261 0.0181 -0.7795\nv 0.022743 0.039517 0.096986\nvn 0.6244 0.0181 -0.7809\nv 0.022729 0.05958 0.097441\nvn 0.6212 0.0182 -0.7834\nv 0.024252 0.037458 0.098135\nvn 0.6348 -0.0982 -0.7664\nv 0.019394 0.047238 0.094136\nvn 0.7929 0.0064 -0.6094\nv 0.018673 0.059883 0.093331\nvn 0.7929 0.0064 -0.6094\nv 0.019664 0.067465 0.094701\nvn 0.7929 0.0064 -0.6094\nv 0.021549 0.031365 0.10121\nvn 0.4262 -0.894 0.1384\nv 0.020898 0.030799 0.09956\nvn 0.4262 -0.894 0.1384\nv 0.022908 0.031906 0.100523\nvn 0.4262 -0.894 0.1384\nv 0.018248 -0.084549 0.092619\nvn 0.9992 0.0379 -0.0115\nv 0.017721 0.068677 0.090248\nvn 0.9698 -0.1607 -0.1833\nv 0.017924 0.070428 0.089792\nvn 0.9698 -0.1607 -0.1833\nv 0.017945 0.068543 0.091552\nvn 0.9698 -0.1607 -0.1833\nv 0.018413 0.067219 0.093013\nvn 0.8256 -0.1129 -0.5529\nv 0.0187 0.069023 0.093074\nvn 0.8256 -0.1129 -0.5529\nv 0.01983 0.068763 0.094813\nvn 0.8256 -0.1129 -0.5529\nv 0.025355 0.032984 0.101164\nvn 0.5284 -0.7666 -0.365\nv 0.023606 0.032641 0.099354\nvn 0.5284 -0.7666 -0.365\nv 0.026505 0.033759 0.101202\nvn 0.5284 -0.7666 -0.365\nv 0.022057 0.069565 0.097201\nvn 0.7161 0.015 -0.6978\nv 0.0187 0.069023 0.093074\nvn 0.9007 -0.2072 -0.3819\nv 0.017945 0.068543 0.091552\nvn 0.9007 -0.2072 -0.3819\nv 0.018445 0.071025 0.091384\nvn 0.9007 -0.2072 -0.3819\nv 0.018445 0.071025 0.091384\nvn 0.8791 -0.2367 -0.4136\nv 0.01943 0.072192 0.09281\nvn 0.8791 -0.2367 -0.4136\nv 0.0187 0.069023 0.093074\nvn 0.8791 -0.2367 -0.4136\nv 0.019664 0.067465 0.094701\nvn 0.7366 -0.0351 -0.6754\nv 0.01983 0.068763 0.094813\nvn 0.7366 -0.0351 -0.6754\nv 0.022057 0.069565 0.097201\nvn 0.7366 -0.0351 -0.6754\nv 0.017945 0.068543 0.091552\nvn 0.9502 -0.2071 -0.2327\nv 0.017924 0.070428 0.089792\nvn 0.9502 -0.2071 -0.2327\nv 0.018445 0.071025 0.091384\nvn 0.9502 -0.2071 -0.2327\nv 0.022729 0.05958 0.097441\nvn 0.6784 0.028 -0.7342\nv 0.020943 0.062748 0.095911\nvn 0.6784 0.028 -0.7342\nv 0.022057 0.069565 0.097201\nvn 0.6784 0.028 -0.7342\nv 0.023606 0.032641 0.099354\nvn 0.5875 -0.5642 -0.58\nv 0.018445 0.071025 0.091384\nvn 0.9435 -0.2539 -0.213\nv 0.017924 0.070428 0.089792\nvn 0.9435 -0.2539 -0.213\nv 0.018572 0.072784 0.089854\nvn 0.9435 -0.2539 -0.213\nv 0.017715 -0.065856 0.091437\nvn 0.9995 0.0093 -0.0313\nv 0.021845 0.071923 0.096555\nvn 0.7884 -0.2194 -0.5747\nv 0.019857 0.070642 0.094316\nvn 0.7884 -0.2194 -0.5747\nv 0.021052 0.073024 0.095045\nvn 0.7884 -0.2194 -0.5747\nv 0.025753 0.056312 0.099794\nvn 0.6404 0.0403 -0.767\nv 0.022729 0.05958 0.097441\nvn 0.6404 0.0403 -0.767\nv 0.026425 0.0715 0.101152\nvn 0.6404 0.0403 -0.767\nv 0.020374 0.035776 0.095029\nvn 0.6196 0.0182 -0.7847\nv 0.021845 0.071923 0.096555\nvn 0.7219 -0.1219 -0.6812\nv 0.026199 0.073974 0.100801\nvn 0.7219 -0.1219 -0.6812\nv 0.022057 0.069565 0.097201\nvn 0.7219 -0.1219 -0.6812\nv 0.018572 0.072784 0.089854\nvn 0.9013 -0.3478 -0.2582\nv 0.020035 0.076416 0.090069\nvn 0.9013 -0.3478 -0.2582\nv 0.019674 0.074495 0.091397\nvn 0.9013 -0.3478 -0.2582\nv 0.021491 0.077532 0.092671\nvn 0.8497 -0.3385 -0.4042\nv 0.01943 0.072192 0.09281\nvn 0.8497 -0.3385 -0.4042\nv 0.019674 0.074495 0.091397\nvn 0.8497 -0.3385 -0.4042\nv 0.028616 0.039374 0.101169\nvn 0.5794 -0.0297 -0.8145\nv 0.024252 0.037458 0.098135\nvn 0.5794 -0.0297 -0.8145\nv 0.022743 0.039517 0.096986\nvn 0.5794 -0.0297 -0.8145\nv 0.021052 0.073024 0.095045\nvn 0.7799 -0.2919 -0.5537\nv 0.022128 0.076171 0.094903\nvn 0.7799 -0.2919 -0.5537\nv 0.025642 0.078519 0.098615\nvn 0.7799 -0.2919 -0.5537\nv 0.027987 0.049338 0.101167\nvn 0.582 0.0351 -0.8124\nv 0.028616 0.039374 0.101169\nvn 0.5803 0.0365 -0.8136\nv 0.022743 0.039517 0.096986\nvn 0.5872 0.0308 -0.8089\nv 0.025753 0.056312 0.099794\nvn 0.5887 0.0295 -0.8078\nv 0.021236 0.078946 0.090419\nvn 0.8765 -0.3741 -0.303\nv 0.019674 0.074495 0.091397\nvn 0.8765 -0.3741 -0.303\nv 0.020035 0.076416 0.090069\nvn 0.8765 -0.3741 -0.303\nv 0.021845 0.071923 0.096555\nvn 0.7657 -0.2565 -0.5898\nv 0.021052 0.073024 0.095045\nvn 0.7657 -0.2565 -0.5898\nv 0.025642 0.078519 0.098615\nvn 0.7657 -0.2565 -0.5898\nv 0.018413 0.067219 0.093013\nvn 0.803 0.0026 -0.5959\nv 0.019664 0.067465 0.094701\nvn 0.803 0.0026 -0.5959\nv 0.018673 0.059883 0.093331\nvn 0.803 0.0026 -0.5959\nv 0.017915 0.066472 0.092017\nvn 0.918 -0.0992 -0.3839\nv 0.017945 0.068543 0.091552\nvn 0.918 -0.0992 -0.3839\nv 0.018413 0.067219 0.093013\nvn 0.918 -0.0992 -0.3839\nv 0.028277 0.036669 0.101171\nvn 0.9922 -0.1243 -0.0064\nv 0.028616 0.039374 0.101169\nvn 0.9922 -0.1243 -0.0064\nv 0.028566 0.038695 0.10671\nvn 0.9922 -0.1243 -0.0064\nv 0.020628 0.030869 0.106872\nvn 0.637 -0.7708 0.0106\nv 0.019692 0.030091 0.106555\nvn 0.637 -0.7708 0.0106\nv 0.020644 0.030803 0.101173\nvn 0.637 -0.7708 0.0106\nv 0.028111 0.036237 0.106818\nvn 0.9178 -0.397 0.0057\nv 0.027657 0.035185 0.106657\nvn 0.9178 -0.397 0.0057\nv 0.027757 0.035338 0.10118\nvn 0.9178 -0.397 0.0057\nv 0.028566 0.038695 0.10671\nvn 0.9905 -0.1377 -0.0014\nv 0.028351 0.037145 0.106686\nvn 0.9905 -0.1377 -0.0014\nv 0.028277 0.036669 0.101171\nvn 0.9905 -0.1377 -0.0014\nv 0.019714 0.029904 0.100882\nvn 0.8344 -0.5484 0.0556\nv 0.018732 0.029005 0.10674\nvn 0.8344 -0.5484 0.0556\nv 0.018891 0.028563 0.1\nvn 0.8344 -0.5484 0.0556\nv 0.020644 0.030803 0.101173\nvn 0.6907 -0.7227 0.0265\nv 0.019692 0.030091 0.106555\nvn 0.6907 -0.7227 0.0265\nv 0.019714 0.029904 0.100882\nvn 0.6907 -0.7227 0.0265\nv 0.028277 0.036669 0.101171\nvn 0.9671 -0.2542 0.009\nv 0.028351 0.037145 0.106686\nvn 0.9671 -0.2542 0.009\nv 0.028111 0.036237 0.106818\nvn 0.9671 -0.2542 0.009\nv 0.021549 0.031365 0.10121\nvn 0.5268 -0.85 0.0045\nv 0.02165 0.031458 0.106976\nvn 0.5268 -0.85 0.0045\nv 0.020644 0.030803 0.101173\nvn 0.5268 -0.85 0.0045\nv 0.02165 0.031458 0.106976\nvn 0.4986 -0.8668 0.0113\nv 0.020628 0.030869 0.106872\nvn 0.4986 -0.8668 0.0113\nv 0.020644 0.030803 0.101173\nvn 0.4986 -0.8668 0.0113\nv 0.027757 0.035338 0.10118\nvn 0.9315 -0.3637 -0.0004\nv 0.028277 0.036669 0.101171\nvn 0.9315 -0.3637 -0.0004\nv 0.028111 0.036237 0.106818\nvn 0.9315 -0.3637 -0.0004\nv 0.019692 0.030091 0.106555\nvn 0.7513 -0.6595 0.0246\nv 0.018732 0.029005 0.10674\nvn 0.7513 -0.6595 0.0246\nv 0.019714 0.029904 0.100882\nvn 0.7513 -0.6595 0.0246\nv 0.026806 0.034093 0.106899\nvn 0.6517 -0.7584 0.01\nv 0.025943 0.033347 0.106525\nvn 0.6517 -0.7584 0.01\nv 0.026505 0.033759 0.101202\nvn 0.6517 -0.7584 0.01\nv 0.027234 0.034524 0.101175\nvn 0.8411 -0.5409 0.0009\nv 0.027757 0.035338 0.10118\nvn 0.8396 -0.5431 0.0004\nv 0.027206 0.03449 0.106361\nvn 0.8406 -0.5417 0.0007\nv 0.027657 0.035185 0.106657\nvn 0.8391 -0.5439 0.0002\nv 0.026505 0.033759 0.101202\nvn 0.7238 -0.69 -0.0007\nv 0.027234 0.034524 0.101175\nvn 0.7238 -0.69 -0.0007\nv 0.027206 0.03449 0.106361\nvn 0.7238 -0.69 -0.0007\nv 0.027206 0.03449 0.106361\nvn 0.7066 -0.7076 0.0041\nv 0.026806 0.034093 0.106899\nvn 0.7066 -0.7076 0.0041\nv 0.026505 0.033759 0.101202\nvn 0.7066 -0.7076 0.0041\nv 0.025355 0.032984 0.101164\nvn 0.5588 -0.8293 -0.0053\nv 0.026505 0.033759 0.101202\nvn 0.5588 -0.8293 -0.0053\nv 0.025943 0.033347 0.106525\nvn 0.5588 -0.8293 -0.0053\nv 0.018732 0.029005 0.10674\nvn 0.8591 -0.509 0.0536\nv 0.01791 0.027674 0.107294\nvn 0.8591 -0.509 0.0536\nv 0.018891 0.028563 0.1\nvn 0.8591 -0.509 0.0536\nv 0.025355 0.032984 0.101164\nvn 0.486 -0.874 0.0057\nv 0.025943 0.033347 0.106525\nvn 0.486 -0.874 0.0057\nv 0.024607 0.032604 0.106519\nvn 0.486 -0.874 0.0057\nv 0.022908 0.031906 0.100523\nvn 0.4051 -0.9142 -0.0084\nv 0.025355 0.032984 0.101164\nvn 0.4051 -0.9142 -0.0084\nv 0.024607 0.032604 0.106519\nvn 0.4051 -0.9142 -0.0084\nv 0.017592 0.02673 0.107145\nvn 0.9393 -0.3303 0.0924\nv 0.018385 0.027304 0.101143\nvn 0.9393 -0.3303 0.0924\nv 0.01791 0.027674 0.107294\nvn 0.9393 -0.3303 0.0924\nv 0.018891 0.028563 0.1\nvn 0.9498 -0.2993 0.0913\nv 0.01791 0.027674 0.107294\nvn 0.9498 -0.2993 0.0913\nv 0.018385 0.027304 0.101143\nvn 0.9498 -0.2993 0.0913\nv 0.022908 0.031906 0.100523\nvn 0.3713 -0.9285 0.0029\nv 0.024607 0.032604 0.106519\nvn 0.3693 -0.9293 0.0042\nv 0.021549 0.031365 0.10121\nvn 0.3641 -0.9313 0.0076\nv 0.02165 0.031458 0.106976\nvn 0.3625 -0.9319 0.0087\nv 0.017592 0.02673 0.107145\nvn 0.9838 -0.1358 0.1169\nv 0.018236 0.026297 0.101221\nvn 0.9838 -0.1358 0.1169\nv 0.018385 0.027304 0.101143\nvn 0.9838 -0.1358 0.1169\nv 0.028578 0.040716 0.10652\nvn 1 -0.0047 0.0084\nv 0.028566 0.038695 0.10671\nvn 1 -0.0047 0.0084\nv 0.028616 0.039374 0.101169\nvn 1 -0.0047 0.0084\nv 0.023344 0.087912 0.081942\nvn 0.9861 0.1464 -0.0784\nv 0.02211 0.090427 0.071121\nvn 0.9861 0.141 -0.0878\nv 0.021599 0.093477 0.070381\nvn 0.9861 0.146 -0.0798\nv 0.021865 0.094935 0.078901\nvn 0.9743 0.215 -0.0673\nv 0.022992 0.092815 0.088854\nvn 0.9759 0.2081 -0.0661\nv 0.021599 0.093477 0.070381\nvn 0.9754 0.2103 -0.0665\nv 0.023344 0.087912 0.081942\nvn 0.9841 0.1634 -0.0699\nv 0.021599 0.093477 0.070381\nvn 0.9835 0.167 -0.069\nv 0.024037 0.088177 0.092328\nvn 0.9839 0.1646 -0.0696\nv 0.024212 0.085712 0.08953\nvn 0.9873 0.1447 -0.0659\nv 0.023344 0.087912 0.081942\nvn 0.9864 0.149 -0.0697\nv 0.024037 0.088177 0.092328\nvn 0.9869 0.1466 -0.0675\nv 0.022992 0.092815 0.088854\nvn 0.983 0.1707 -0.068\nv 0.024504 0.08474 0.091792\nvn 0.9874 0.1441 -0.0653\nv 0.022992 0.092815 0.088854\nvn 0.9823 0.1779 -0.0582\nv 0.023658 0.091042 0.094685\nvn 0.9825 0.1773 -0.0575\nv 0.024037 0.088177 0.092328\nvn 0.984 0.1712 -0.0499\nv 0.024504 0.08474 0.091792\nvn 0.9886 0.1427 -0.0489\nv 0.024037 0.088177 0.092328\nvn 0.9887 0.1416 -0.0484\nv 0.024328 0.088363 0.098807\nvn 0.9896 0.138 -0.0418\nv 0.024901 0.08293 0.094482\nvn 0.9891 0.14 -0.0448\nv 0.025273 0.08088 0.096696\nvn 0.9898 0.1364 -0.0402\nv 0.024328 0.088363 0.098807\nvn 0.9841 0.1705 -0.049\nv 0.025642 0.078519 0.098615\nvn 0.9908 0.1328 -0.0263\nv 0.025273 0.08088 0.096696\nvn 0.9908 0.1328 -0.0269\nv 0.024328 0.088363 0.098807\nvn 0.9908 0.1328 -0.0269\nv 0.025118 0.083484 0.104041\nvn 0.9908 0.1328 -0.0258\nv 0.01746 0.085539 0.039299\nvn 0.9684 -0.0024 -0.2494\nv 0.017353 0.088368 0.038858\nvn 0.9684 -0.0024 -0.2494\nv 0.018009 0.089215 0.041395\nvn 0.9684 -0.0024 -0.2494\nv 0.018874 0.089461 0.045458\nvn 0.978 -0.0283 -0.2065\nv 0.01746 0.085539 0.039299\nvn 0.978 -0.0283 -0.2065\nv 0.018009 0.089215 0.041395\nvn 0.978 -0.0283 -0.2065\nv 0.017353 0.088368 0.038858\nvn 0.9433 0.1107 -0.3128\nv 0.017086 0.090492 0.038804\nvn 0.9433 0.1107 -0.3128\nv 0.017692 0.091606 0.041026\nvn 0.9433 0.1107 -0.3128\nv 0.010244 0.094074 0.037186\nvn 0.0136 0.5967 -0.8024\nv 8.04005e-18 0.093406 0.036515\nvn 0.0136 0.5967 -0.8024\nv 7.86333e-18 0.095347 0.037958\nvn 0.0136 0.5967 -0.8024\nv 0.018009 0.089215 0.041395\nvn 0.9589 0.0853 -0.2708\nv 0.017353 0.088368 0.038858\nvn 0.9576 0.0843 -0.2755\nv 0.017692 0.091606 0.041026\nvn 0.9578 0.0845 -0.2749\nv 0.017086 0.090492 0.038804\nvn 0.8618 0.2661 -0.4318\nv 0.016401 0.091971 0.038347\nvn 0.8618 0.2661 -0.4318\nv 0.017097 0.091874 0.039678\nvn 0.8618 0.2661 -0.4318\nv 0.017086 0.090492 0.038804\nvn 0.9081 0.2185 -0.3572\nv 0.017097 0.091874 0.039678\nvn 0.9081 0.2185 -0.3572\nv 0.017692 0.091606 0.041026\nvn 0.9081 0.2185 -0.3572\nv 0.016401 0.091971 0.038347\nvn 0.6842 0.4995 -0.5313\nv 0.015417 0.092665 0.037733\nvn 0.6842 0.4995 -0.5313\nv 0.016466 0.093679 0.040037\nvn 0.6842 0.4995 -0.5313\nv 0.016466 0.093679 0.040037\nvn 0.6617 0.5271 -0.5332\nv 0.015417 0.092665 0.037733\nvn 0.6617 0.5271 -0.5332\nv 0.015662 0.094352 0.039705\nvn 0.6617 0.5271 -0.5332\nv 0.015417 0.092665 0.037733\nvn 0.5445 0.6028 -0.5833\nv 0.014653 0.093378 0.037757\nvn 0.5445 0.6028 -0.5833\nv 0.015662 0.094352 0.039705\nvn 0.5445 0.6028 -0.5833\nv 0.015662 0.094352 0.039705\nvn 0.4864 0.6543 -0.579\nv 0.014653 0.093378 0.037757\nvn 0.4864 0.6543 -0.579\nv 0.014493 0.095496 0.040016\nvn 0.4864 0.6543 -0.579\nv 0.012653 0.093692 0.037208\nvn 0.1188 0.7072 -0.6969\nv 0.010244 0.094074 0.037186\nvn 0.1188 0.7072 -0.6969\nv 0.011378 0.09566 0.038989\nvn 0.1188 0.7072 -0.6969\nv 0.014653 0.093378 0.037757\nvn 0.3626 0.6867 -0.6301\nv 0.013696 0.09364 0.037492\nvn 0.3626 0.6867 -0.6301\nv 0.013495 0.094779 0.038618\nvn 0.3626 0.6867 -0.6301\nv 0.014493 0.095496 0.040016\nvn 0.3735 0.6897 -0.6203\nv 0.014653 0.093378 0.037757\nvn 0.3735 0.6897 -0.6203\nv 0.013495 0.094779 0.038618\nvn 0.3735 0.6897 -0.6203\nv 0.012653 0.093692 0.037208\nvn 0.1838 0.7221 -0.6669\nv 0.011378 0.09566 0.038989\nvn 0.1838 0.7221 -0.6669\nv 0.013495 0.094779 0.038618\nvn 0.1838 0.7221 -0.6669\nv 0.013696 0.09364 0.037492\nvn 0.2182 0.7053 -0.6745\nv 0.012653 0.093692 0.037208\nvn 0.2182 0.7053 -0.6745\nv 0.013495 0.094779 0.038618\nvn 0.2182 0.7053 -0.6745\nv 0.006538 0.097992 0.040932\nvn 0.0459 0.7127 -0.7\nv 0.010244 0.094074 0.037186\nvn 0.0459 0.7127 -0.7\nv 7.68552e-18 0.096919 0.03941\nvn 0.0459 0.7127 -0.7\nv 0.006538 0.097992 0.040932\nvn 0.0744 0.725 -0.6847\nv 0.011378 0.09566 0.038989\nvn 0.0744 0.725 -0.6847\nv 0.010244 0.094074 0.037186\nvn 0.0744 0.725 -0.6847\nv 0.011378 0.09566 0.038989\nvn 0.2009 0.7485 -0.632\nv 0.012752 0.097296 0.041363\nvn 0.2009 0.7485 -0.632\nv 0.013495 0.094779 0.038618\nvn 0.2009 0.7485 -0.632\nv 0.012752 0.097296 0.041363\nvn 0.3045 0.7417 -0.5977\nv 0.014493 0.095496 0.040016\nvn 0.3045 0.7417 -0.5977\nv 0.013495 0.094779 0.038618\nvn 0.3045 0.7417 -0.5977\nv 0.018009 0.089215 0.041395\nvn 0.9772 0.0313 -0.21\nv 0.018361 0.09154 0.043383\nvn 0.9772 0.0313 -0.21\nv 0.018874 0.089461 0.045458\nvn 0.9772 0.0313 -0.21\nv 0.015662 0.094352 0.039705\nvn 0.5131 0.67 -0.5365\nv 0.014493 0.095496 0.040016\nvn 0.5131 0.67 -0.5365\nv 0.015411 0.09688 0.042622\nvn 0.5131 0.67 -0.5365\nv 0.015411 0.09688 0.042622\nvn 0.618 0.6199 -0.4835\nv 0.016619 0.095944 0.042965\nvn 0.6192 0.6242 -0.4764\nv 0.015662 0.094352 0.039705\nvn 0.618 0.6196 -0.4839\nv 7.68552e-18 0.096919 0.03941\nvn 0.0303 0.7507 -0.6599\nv 7.42626e-18 0.098779 0.041527\nvn 0.0303 0.7507 -0.6599\nv 0.006538 0.097992 0.040932\nvn 0.0303 0.7507 -0.6599\nv 7.42626e-18 0.098779 0.041527\nvn 0.0408 0.7955 -0.6046\nv 0.006979 0.099901 0.043473\nvn 0.0408 0.7955 -0.6046\nv 0.006538 0.097992 0.040932\nvn 0.0408 0.7955 -0.6046\nv 0.012752 0.097296 0.041363\nvn 0.1704 0.7826 -0.5988\nv 0.009526 0.098138 0.041545\nvn 0.1704 0.7826 -0.5988\nv 0.01085 0.099797 0.04409\nvn 0.1704 0.7826 -0.5988\nv 0.006538 0.097992 0.040932\nvn 0.0863 0.7894 -0.6078\nv 0.006979 0.099901 0.043473\nvn 0.0863 0.7894 -0.6078\nv 0.009526 0.098138 0.041545\nvn 0.0863 0.7894 -0.6078\nv 0.006979 0.099901 0.043473\nvn 0.1146 0.8039 -0.5837\nv 0.01085 0.099797 0.04409\nvn 0.1146 0.8039 -0.5837\nv 0.009526 0.098138 0.041545\nvn 0.1146 0.8039 -0.5837\nv 0.014493 0.095496 0.040016\nvn 0.3486 0.7538 -0.557\nv 0.012752 0.097296 0.041363\nvn 0.3486 0.7538 -0.557\nv 0.014357 0.099647 0.045549\nvn 0.3486 0.7538 -0.557\nv 0.026425 0.0715 0.101152\nvn 0.9958 0.0913 0.0012\nv 0.026199 0.073974 0.100801\nvn 0.996 0.0889 0.0005\nv 0.026355 0.072186 0.106887\nvn 0.9959 0.0909 0.0011\nv 0.015411 0.09688 0.042622\nvn 0.4241 0.7294 -0.5368\nv 0.014493 0.095496 0.040016\nvn 0.4241 0.7294 -0.5368\nv 0.014357 0.099647 0.045549\nvn 0.4241 0.7294 -0.5368\nv 0.026006 0.076112 0.106395\nvn 0.9961 0.0885 0.0004\nv 0.026199 0.073974 0.100801\nvn 0.994 0.1088 -0.0074\nv 0.025962 0.076079 0.100008\nvn 0.9939 0.1097 -0.0074\nv 0.026006 0.076112 0.106395\nvn 0.994 0.1092 -0.0074\nv 0.025505 0.080577 0.105361\nvn 0.9939 0.11 -0.0074\nv 0.01085 0.099797 0.04409\nvn 0.2277 0.7916 -0.567\nv 0.012959 0.099759 0.044884\nvn 0.2277 0.7916 -0.567\nv 0.012752 0.097296 0.041363\nvn 0.2277 0.7916 -0.567\nv 0.025962 0.076079 0.100008\nvn 0.9925 0.1208 -0.0167\nv 0.025642 0.078519 0.098615\nvn 0.9922 0.1234 -0.0175\nv 0.025505 0.080577 0.105361\nvn 0.9925 0.1214 -0.0169\nv 0.012752 0.097296 0.041363\nvn 0.3252 0.7658 -0.5547\nv 0.012959 0.099759 0.044884\nvn 0.3252 0.7658 -0.5547\nv 0.014357 0.099647 0.045549\nvn 0.3252 0.7658 -0.5547\nv 0.025118 0.083484 0.104041\nvn 0.9921 0.1239 -0.0176\nv 0.014357 0.099647 0.045549\nvn 0.4601 0.722 -0.5168\nv 0.0159 0.099232 0.046343\nvn 0.4601 0.722 -0.5168\nv 0.015411 0.09688 0.042622\nvn 0.4601 0.722 -0.5168\nv 0.010244 0.094074 0.037186\nvn 0.0288 0.6781 -0.7344\nv 7.86333e-18 0.095347 0.037958\nvn 0.0288 0.6781 -0.7344\nv 7.68552e-18 0.096919 0.03941\nvn 0.0288 0.6781 -0.7344\nv 0.018653 0.097527 0.050128\nvn 0.9224 0.2935 -0.2511\nv 0.018692 0.094976 0.047292\nvn 0.9224 0.2935 -0.2511\nv 0.018158 0.096483 0.04709\nvn 0.9224 0.2935 -0.2511\nv 0.019912 0.092878 0.05297\nvn 0.981 0.1147 -0.1564\nv 0.019328 0.09227 0.04886\nvn 0.981 0.1152 -0.1564\nv 0.018945 0.092938 0.046946\nvn 0.9813 0.1126 -0.1561\nv 0.019437 0.096016 0.052215\nvn 0.9818 0.1091 -0.1554\nv 0.020043 0.094888 0.055252\nvn 0.9812 0.1133 -0.1563\nv 0.017619 0.098187 0.047772\nvn 0.8709 0.3934 -0.2947\nv 0.018069 0.098343 0.049311\nvn 0.8709 0.3934 -0.2947\nv 0.018158 0.096483 0.04709\nvn 0.8709 0.3934 -0.2947\nv 0.018158 0.096483 0.04709\nvn 0.8905 0.3657 -0.2707\nv 0.018069 0.098343 0.049311\nvn 0.8905 0.3657 -0.2707\nv 0.018653 0.097527 0.050128\nvn 0.8905 0.3657 -0.2707\nv 0.018692 0.094976 0.047292\nvn 0.9542 0.229 -0.1927\nv 0.018653 0.097527 0.050128\nvn 0.9542 0.229 -0.1927\nv 0.019437 0.096016 0.052215\nvn 0.9542 0.229 -0.1927\nv 0.018653 0.097527 0.050128\nvn 0.9504 0.2622 -0.1673\nv 0.019191 0.097518 0.053169\nvn 0.9504 0.2622 -0.1673\nv 0.019437 0.096016 0.052215\nvn 0.9504 0.2622 -0.1673\nv 0.020721 0.092402 0.058877\nvn 0.9883 0.0817 -0.1287\nv 0.019912 0.092878 0.05297\nvn 0.9883 0.0817 -0.1287\nv 0.020043 0.094888 0.055252\nvn 0.9883 0.0817 -0.1287\nv 0.019191 0.097518 0.053169\nvn 0.9643 0.2353 -0.1213\nv 0.019661 0.09719 0.056272\nvn 0.9643 0.2353 -0.1213\nv 0.019437 0.096016 0.052215\nvn 0.9643 0.2353 -0.1213\nv 0.020043 0.094888 0.055252\nvn 0.9705 0.212 -0.1149\nv 0.019437 0.096016 0.052215\nvn 0.9705 0.212 -0.1149\nv 0.019661 0.09719 0.056272\nvn 0.9705 0.212 -0.1149\nv 0.021073 0.09606 0.071115\nvn 0.9737 0.2174 -0.0677\nv 0.011378 0.09566 0.038989\nvn 0.098 0.7492 -0.6551\nv 0.006538 0.097992 0.040932\nvn 0.098 0.7492 -0.6551\nv 0.009526 0.098138 0.041545\nvn 0.098 0.7492 -0.6551\nv 0.011378 0.09566 0.038989\nvn 0.1645 0.7652 -0.6224\nv 0.009526 0.098138 0.041545\nvn 0.1645 0.7652 -0.6224\nv 0.012752 0.097296 0.041363\nvn 0.1645 0.7652 -0.6224\nv 0.018361 0.09154 0.043383\nvn 0.9591 0.0854 -0.27\nv 0.017692 0.091606 0.041026\nvn 0.9448 0.1954 -0.2629\nv 0.017938 0.093876 0.043599\nvn 0.9453 0.1954 -0.261\nv 0.018361 0.09154 0.043383\nvn 0.9476 0.1951 -0.2532\nv 0.016466 0.093679 0.040037\nvn 0.6721 0.5683 -0.4747\nv 0.015662 0.094352 0.039705\nvn 0.6721 0.5683 -0.4747\nv 0.016619 0.095944 0.042965\nvn 0.6721 0.5683 -0.4747\nv 0.016619 0.095944 0.042965\nvn 0.7707 0.4839 -0.4145\nv 0.017271 0.094059 0.041979\nvn 0.7707 0.4839 -0.4145\nv 0.016466 0.093679 0.040037\nvn 0.7707 0.4839 -0.4145\nv 0.017692 0.091606 0.041026\nvn 0.8971 0.2849 -0.3376\nv 0.017271 0.094059 0.041979\nvn 0.8967 0.2852 -0.3385\nv 0.017938 0.093876 0.043599\nvn 0.8973 0.2848 -0.3373\nv 0.018692 0.094976 0.047292\nvn 0.9631 0.1564 -0.2191\nv 0.018945 0.092938 0.046946\nvn 0.9631 0.1564 -0.2191\nv 0.018361 0.09154 0.043383\nvn 0.9631 0.1564 -0.2191\nv 0.018692 0.094976 0.047292\nvn 0.948 0.1949 -0.2516\nv 7.1899e-18 0.100148 0.043457\nvn 0.0301 0.8155 -0.578\nv 0.006979 0.099901 0.043473\nvn 0.0301 0.8155 -0.578\nv 7.42626e-18 0.098779 0.041527\nvn 0.0301 0.8155 -0.578\nv 0.018874 0.089461 0.045458\nvn 0.9815 0.0609 -0.1814\nv 0.018361 0.09154 0.043383\nvn 0.9823 0.0512 -0.1802\nv 0.019328 0.09227 0.04886\nvn 0.9825 0.0491 -0.1799\nv 0.018945 0.092938 0.046946\nvn 0.9825 0.0486 -0.1799\nv 0.018158 0.096483 0.04709\nvn 0.8494 0.4044 -0.3391\nv 0.017271 0.094059 0.041979\nvn 0.8494 0.4044 -0.3391\nv 0.017619 0.098187 0.047772\nvn 0.8494 0.4044 -0.3391\nv 0.017271 0.094059 0.041979\nvn 0.779 0.4876 -0.3942\nv 0.016963 0.098517 0.046884\nvn 0.779 0.4876 -0.3942\nv 0.017619 0.098187 0.047772\nvn 0.779 0.4876 -0.3942\nv 0.018945 0.092938 0.046946\nvn 0.9723 0.1507 -0.1789\nv 0.018692 0.094976 0.047292\nvn 0.9723 0.1507 -0.1789\nv 0.019437 0.096016 0.052215\nvn 0.9723 0.1507 -0.1789\nv 0.016619 0.095944 0.042965\nvn 0.6446 0.6118 -0.4584\nv 0.0159 0.099232 0.046343\nvn 0.6446 0.6118 -0.4584\nv 0.016963 0.098517 0.046884\nvn 0.6446 0.6118 -0.4584\nv 0.017357 0.08129 0.039426\nvn 0.9829 -0.0292 -0.1818\nv 0.01746 0.085539 0.039299\nvn 0.9829 -0.0292 -0.1818\nv 0.018272 0.082282 0.044217\nvn 0.9829 -0.0292 -0.1818\nv 0.01746 0.085539 0.039299\nvn 0.9798 -0.0485 -0.1941\nv 0.018874 0.089461 0.045458\nvn 0.9798 -0.0485 -0.1941\nv 0.018272 0.082282 0.044217\nvn 0.9798 -0.0485 -0.1941\nv 0.017097 0.091874 0.039678\nvn 0.8965 0.2853 -0.3388\nv 0.016401 0.091971 0.038347\nvn 0.8352 0.3658 -0.4106\nv 0.017271 0.094059 0.041979\nvn 0.8352 0.3658 -0.4106\nv 0.017097 0.091874 0.039678\nvn 0.8352 0.3658 -0.4106\nv 0.017271 0.094059 0.041979\nvn 0.8252 0.381 -0.4169\nv 0.016401 0.091971 0.038347\nvn 0.8252 0.381 -0.4169\nv 0.016466 0.093679 0.040037\nvn 0.8252 0.381 -0.4169\nv 0.016619 0.095944 0.042965\nvn 0.7935 0.4744 -0.3813\nv 0.016963 0.098517 0.046884\nvn 0.7935 0.4744 -0.3813\nv 0.017271 0.094059 0.041979\nvn 0.7935 0.4744 -0.3813\nv 0.017271 0.094059 0.041979\nvn 0.8776 0.3561 -0.3211\nv 0.018158 0.096483 0.04709\nvn 0.8776 0.3561 -0.3211\nv 0.017938 0.093876 0.043599\nvn 0.8776 0.3561 -0.3211\nv 0.018158 0.096483 0.04709\nvn 0.9175 0.2888 -0.2734\nv 0.018692 0.094976 0.047292\nvn 0.9175 0.2888 -0.2734\nv 0.017938 0.093876 0.043599\nvn 0.9175 0.2888 -0.2734\nv 0.0159 0.099232 0.046343\nvn 0.6194 0.6243 -0.4759\nv 0.020721 0.092402 0.058877\nvn 0.9863 0.1382 -0.0896\nv 0.020043 0.094888 0.055252\nvn 0.9858 0.1432 -0.0881\nv 0.020043 0.094888 0.055252\nvn 0.9767 0.1984 -0.0819\nv 0.019661 0.09719 0.056272\nvn 0.9767 0.1984 -0.0819\nv 0.021599 0.093477 0.070381\nvn 0.9767 0.1984 -0.0819\nv 0.019661 0.09719 0.056272\nvn 0.9727 0.2195 -0.0758\nv 0.021073 0.09606 0.071115\nvn 0.9727 0.2195 -0.0758\nv 0.021599 0.093477 0.070381\nvn 0.9727 0.2195 -0.0758\nv 0.0226 0.07531 0.110022\nvn 0.0164 0.0961 0.9952\nv -9.95515e-19 0.076337 0.110296\nvn 0.0164 0.0961 0.9952\nv -1.03813e-18 0.072733 0.110644\nvn 0.0164 0.0961 0.9952\nv -3.27226e-19 0.088146 0.104839\nvn 0.017 0.7351 0.6777\nv 0.020947 0.088134 0.104326\nvn 0.0168 0.734 0.6789\nv -7.67854e-20 0.090032 0.102794\nvn 0.0165 0.7321 0.681\nv -1.03813e-18 0.072733 0.110644\nvn 0.0188 0.0754 0.997\nv 0.022654 0.072295 0.110249\nvn 0.0188 0.0754 0.997\nv 0.0226 0.07531 0.110022\nvn 0.0188 0.0754 0.997\nv -6.72821e-19 0.084253 0.107661\nvn 0.0181 0.4427 0.8965\nv 0.021881 0.081979 0.108341\nvn 0.0177 0.4391 0.8983\nv 0.021442 0.084419 0.107139\nvn 0.0183 0.4448 0.8955\nv 5.32232e-19 0.093135 0.097821\nvn 0.0169 0.8828 0.4695\nv 2.65381e-19 0.091976 0.1\nvn 0.0169 0.8828 0.4695\nv 0.020636 0.091851 0.099492\nvn 0.0169 0.8828 0.4695\nv 0.021094 0.08937 0.102998\nvn 0.0163 0.731 0.6822\nv 5.32232e-19 0.093135 0.097821\nvn 0.0186 0.8908 0.4539\nv 0.020636 0.091851 0.099492\nvn 0.0186 0.8908 0.4539\nv 0.020359 0.093123 0.097008\nvn 0.0186 0.8908 0.4539\nv 0.020923 0.090645 0.10136\nvn 0.0184 0.8412 0.5405\nv 0.020636 0.091851 0.099492\nvn 0.0184 0.8412 0.5405\nv 2.65381e-19 0.091976 0.1\nvn 0.0184 0.8412 0.5405\nv -7.67854e-20 0.090032 0.102794\nvn 0.0188 0.7901 0.6127\nv 0.021094 0.08937 0.102998\nvn 0.0188 0.7901 0.6127\nv 0.020923 0.090645 0.10136\nvn 0.0188 0.7901 0.6127\nv 0.021631 0.086561 0.105653\nvn 0.017 0.6304 0.7761\nv -3.27226e-19 0.088146 0.104839\nvn 0.017 0.6304 0.7761\nv -5.21822e-19 0.086191 0.106428\nvn 0.017 0.6304 0.7761\nv -8.12308e-19 0.081907 0.1088\nvn 0.0185 0.3167 0.9483\nv 0.022227 0.078862 0.109384\nvn 0.0179 0.3128 0.9497\nv 0.021881 0.081979 0.108341\nvn 0.0188 0.3189 0.9476\nv -3.27226e-19 0.088146 0.104839\nvn 0.019 0.6495 0.7601\nv 0.021631 0.086561 0.105653\nvn 0.019 0.6495 0.7601\nv 0.020947 0.088134 0.104326\nvn 0.019 0.6495 0.7601\nv 8.46476e-19 0.09422 0.095255\nvn 0.0161 0.9209 0.3895\nv 5.32232e-19 0.093135 0.097821\nvn 0.0161 0.9209 0.3895\nv 0.020359 0.093123 0.097008\nvn 0.0161 0.9209 0.3895\nv 0.020923 0.090645 0.10136\nvn 0.0151 0.8208 0.571\nv 2.65381e-19 0.091976 0.1\nvn 0.0151 0.8208 0.571\nv -7.67854e-20 0.090032 0.102794\nvn 0.0151 0.8208 0.571\nv -5.21822e-19 0.086191 0.106428\nvn 0.0197 0.5685 0.8224\nv 0.021442 0.084419 0.107139\nvn 0.0197 0.5685 0.8224\nv 0.021631 0.086561 0.105653\nvn 0.0197 0.5685 0.8224\nv -9.18853e-19 0.079245 0.10967\nvn 0.0176 0.3105 0.9504\nv -8.12308e-19 0.081907 0.1088\nvn 0.0174 0.4371 0.8993\nv 0.021442 0.084419 0.107139\nvn 0.0164 0.5367 0.8436\nv -5.21822e-19 0.086191 0.106428\nvn 0.0164 0.5367 0.8436\nv -6.72821e-19 0.084253 0.107661\nvn 0.0164 0.5367 0.8436\nv 1.15435e-18 0.095057 0.092741\nvn 0.0154 0.9696 0.2444\nv 0.019721 0.09507 0.09145\nvn 0.0154 0.9696 0.2444\nv 1.57881e-18 0.095931 0.089275\nvn 0.0154 0.9696 0.2444\nv 0.020359 0.093123 0.097008\nvn 0.0189 0.9314 0.3636\nv 0.020193 0.094068 0.094594\nvn 0.0189 0.9314 0.3636\nv 8.46476e-19 0.09422 0.095255\nvn 0.0189 0.9314 0.3636\nv 8.46476e-19 0.09422 0.095255\nvn 0.0175 0.9486 0.3159\nv 0.020193 0.094068 0.094594\nvn 0.0175 0.9486 0.3159\nv 1.15435e-18 0.095057 0.092741\nvn 0.0175 0.9486 0.3159\nv 0.020193 0.094068 0.094594\nvn 0.0191 0.9535 0.3007\nv 0.019721 0.09507 0.09145\nvn 0.0191 0.9535 0.3007\nv 1.15435e-18 0.095057 0.092741\nvn 0.0191 0.9535 0.3007\nv 0.022227 0.078862 0.109384\nvn 0.0162 0.2103 0.9775\nv -9.18853e-19 0.079245 0.10967\nvn 0.0162 0.2103 0.9775\nv -9.95515e-19 0.076337 0.110296\nvn 0.0162 0.2103 0.9775\nv 0.0226 0.07531 0.110022\nvn 0.02 0.179 0.9837\nv 0.022227 0.078862 0.109384\nvn 0.02 0.179 0.9837\nv -9.95515e-19 0.076337 0.110296\nvn 0.02 0.179 0.9837\nv 0.013379 0.100325 0.046924\nvn 0.014 0.9996 0.0259\nv 0.008263 0.100437 0.045369\nvn 0.014 0.9996 0.0259\nv 7.03719e-18 0.10057 0.044704\nvn 0.014 0.9996 0.0259\nv 0.01772 0.098802 0.069492\nvn 0.0201 0.9947 0.1011\nv 0.016884 0.099535 0.062447\nvn 0.0153 0.9958 0.0901\nv 3.9583e-18 0.099124 0.069845\nvn 0.019 0.9949 0.0987\nv 2.62344e-18 0.097538 0.080745\nvn 0.0156 0.9895 0.144\nv 0.018486 0.097798 0.076956\nvn 0.0162 0.9897 0.1423\nv 3.9583e-18 0.099124 0.069845\nvn 0.0197 0.9908 0.1336\nv 0.01772 0.098802 0.069492\nvn 0.0206 0.9912 0.1311\nv 0.016884 0.099535 0.062447\nvn 0.0205 0.9977 0.0653\nv 0.016125 0.100076 0.054415\nvn 0.0205 0.9977 0.0653\nv 5.39543e-18 0.100166 0.05811\nvn 0.0205 0.9977 0.0653\nv 0.01918 0.096576 0.084147\nvn 0.0164 0.9826 0.1851\nv 2.62344e-18 0.097538 0.080745\nvn 0.0164 0.9826 0.1851\nv 1.57881e-18 0.095931 0.089275\nvn 0.0164 0.9826 0.1851\nv 5.39543e-18 0.100166 0.05811\nvn 0.0145 0.996 0.0884\nv 0.01918 0.096576 0.084147\nvn 0.0207 0.9795 0.2005\nv 1.57881e-18 0.095931 0.089275\nvn 0.0207 0.9795 0.2005\nv 0.019721 0.09507 0.09145\nvn 0.0207 0.9795 0.2005\nv 0.016125 0.100076 0.054415\nvn 0.0206 0.9995 0.0257\nv 0.013379 0.100325 0.046924\nvn 0.0206 0.9995 0.0257\nv 6.39155e-18 0.100521 0.049976\nvn 0.0206 0.9995 0.0257\nv 0.013379 0.100325 0.046924\nvn 0.0168 0.9998 0.0092\nv 7.03719e-18 0.10057 0.044704\nvn 0.0168 0.9998 0.0092\nv 6.39155e-18 0.100521 0.049976\nvn 0.0168 0.9998 0.0092\nv 0.016125 0.100076 0.054415\nvn 0.0156 0.9989 0.0437\nv 6.39155e-18 0.100521 0.049976\nvn 0.0156 0.9989 0.0437\nv 5.39543e-18 0.100166 0.05811\nvn 0.0156 0.9989 0.0437\nv 0.01918 0.096576 0.084147\nvn 0.0201 0.986 0.1657\nv 0.018486 0.097798 0.076956\nvn 0.0201 0.986 0.1657\nv 2.62344e-18 0.097538 0.080745\nvn 0.0201 0.986 0.1657\nv 0.017304 0.043313 0.039224\nvn 0.9823 -0.0001 -0.1875\nv 0.017357 0.08129 0.039426\nvn 0.9822 -0.0004 -0.1876\nv 0.018272 0.082282 0.044217\nvn 0.9819 -0.0002 -0.1893\nv 0.017336 -0.08141 0.039336\nvn 0.9825 0.0001 -0.1864\nv 0.01825 -0.084024 0.044154\nvn 0.982 0 -0.189\nv 0.026425 0.0715 0.101152\nvn 0.9975 0.0703 0.0038\nv 0.026355 0.072186 0.106887\nvn 0.9975 0.0703 0.0038\nv 0.027987 0.049338 0.101167\nvn 0.9975 0.0703 0.0038\nv 0.027987 0.049338 0.101167\nvn 0.9979 0.0646 -0.006\nv 0.026355 0.072186 0.106887\nvn 0.9975 0.0704 0.0034\nv 0.028578 0.040716 0.10652\nvn 0.9976 0.0692 0.0015\nv 0.028616 0.039374 0.101169\nvn 0.998 0.063 -0.0086\nv 0.013838 -0.087584 0.106334\nvn 0.0192 -0.6007 0.7992\nv 0.004 -0.086449 0.107423\nvn 0.0192 -0.6007 0.7992\nv 0.004 -0.087946 0.106298\nvn 0.0192 -0.6007 0.7992\nv 0.013838 -0.087584 0.106334\nvn 0.0233 -0.5795 0.8147\nv 0.013606 -0.085754 0.107643\nvn 0.0233 -0.5795 0.8147\nv 0.004 -0.086449 0.107423\nvn 0.0233 -0.5795 0.8147\nv 0.014029 -0.094421 0.094401\nvn 0.0254 -0.9509 0.3085\nv 0.01392 -0.093389 0.09759\nvn 0.0254 -0.9509 0.3085\nv 0.004 -0.094079 0.09628\nvn 0.0254 -0.9509 0.3085\nv 0.014029 -0.094421 0.094401\nvn 0.0152 -0.9663 0.2568\nv 0.004 -0.094079 0.09628\nvn 0.0152 -0.9663 0.2568\nv 0.004 -0.095538 0.09079\nvn 0.0152 -0.9663 0.2568\nv 0.013524 -0.088858 0.105214\nvn 0.0164 -0.6895 0.7241\nv 0.004 -0.087946 0.106298\nvn 0.0164 -0.6895 0.7241\nv 0.004 -0.089372 0.10494\nvn 0.0164 -0.6895 0.7241\nv 0.013915 -0.082476 0.109071\nvn 0.0256 -0.2614 0.9649\nv 0.013628 -0.079769 0.109812\nvn 0.0256 -0.2614 0.9649\nv 0.004 -0.081137 0.109697\nvn 0.0256 -0.2614 0.9649\nv 0.013524 -0.088858 0.105214\nvn 0.0217 -0.6629 0.7484\nv 0.013838 -0.087584 0.106334\nvn 0.0217 -0.6629 0.7484\nv 0.004 -0.087946 0.106298\nvn 0.0217 -0.6629 0.7484\nv 0.014059 -0.095974 0.087768\nvn 0.0263 -0.9733 0.2281\nv 0.014029 -0.094421 0.094401\nvn 0.0263 -0.9733 0.2281\nv 0.004 -0.095538 0.09079\nvn 0.0263 -0.9733 0.2281\nv 0.013915 -0.082476 0.109071\nvn 0.0162 -0.3221 0.9466\nv 0.004 -0.081137 0.109697\nvn 0.0162 -0.3221 0.9466\nv 0.004 -0.084146 0.108673\nvn 0.0162 -0.3221 0.9466\nv 0.013828 -0.089984 0.103895\nvn 0.0221 -0.7579 0.652\nv 0.013524 -0.088858 0.105214\nvn 0.0221 -0.7579 0.652\nv 0.004 -0.089372 0.10494\nvn 0.0221 -0.7579 0.652\nv 0.01375 -0.083958 0.108522\nvn 0.0213 -0.3497 0.9366\nv 0.013915 -0.082476 0.109071\nvn 0.0213 -0.3497 0.9366\nv 0.004 -0.084146 0.108673\nvn 0.0213 -0.3497 0.9366\nv 0.013828 -0.089984 0.103895\nvn 0.0172 -0.7836 0.621\nv 0.004 -0.089372 0.10494\nvn 0.0172 -0.7836 0.621\nv 0.004 -0.090898 0.103015\nvn 0.0172 -0.7836 0.621\nv 0.01397 -0.076459 0.110223\nvn 0.018 -0.0529 0.9984\nv 0.004 -0.072999 0.110586\nvn 0.0183 -0.052 0.9985\nv 0.004 -0.077347 0.110355\nvn 0.0179 -0.0531 0.9984\nv 0.014007 -0.073637 0.110369\nvn 0.0183 -0.0518 0.9985\nv 0.013747 -0.091297 0.10205\nvn 0.0239 -0.815 0.5789\nv 0.013828 -0.089984 0.103895\nvn 0.0239 -0.815 0.5789\nv 0.004 -0.090898 0.103015\nvn 0.0239 -0.815 0.5789\nv 0.013606 -0.085754 0.107643\nvn 0.0224 -0.441 0.8972\nv 0.01375 -0.083958 0.108522\nvn 0.0224 -0.441 0.8972\nv 0.004 -0.084146 0.108673\nvn 0.0224 -0.441 0.8972\nv 0.013747 -0.091297 0.10205\nvn 0.0143 -0.8646 0.5023\nv 0.004 -0.090898 0.103015\nvn 0.0143 -0.8646 0.5023\nv 0.004 -0.092544 0.100181\nvn 0.0143 -0.8646 0.5023\nv 0.013606 -0.085754 0.107643\nvn 0.0144 -0.477 0.8788\nv 0.004 -0.084146 0.108673\nvn 0.0144 -0.477 0.8788\nv 0.004 -0.086449 0.107423\nvn 0.0144 -0.477 0.8788\nv 0.013591 -0.092562 0.099669\nvn 0.0233 -0.8835 0.4678\nv 0.013747 -0.091297 0.10205\nvn 0.0233 -0.8835 0.4678\nv 0.004 -0.092544 0.100181\nvn 0.0233 -0.8835 0.4678\nv 0.013628 -0.079769 0.109812\nvn 0.0243 -0.1256 0.9918\nv 0.01397 -0.076459 0.110223\nvn 0.0243 -0.1256 0.9918\nv 0.004 -0.077347 0.110355\nvn 0.0243 -0.1256 0.9918\nv 0.013628 -0.079769 0.109812\nvn 0.0125 -0.171 0.9852\nv 0.004 -0.077347 0.110355\nvn 0.0125 -0.171 0.9852\nv 0.004 -0.081137 0.109697\nvn 0.0125 -0.171 0.9852\nv 0.01392 -0.093389 0.09759\nvn 0.0167 -0.9299 0.3673\nv 0.013591 -0.092562 0.099669\nvn 0.0181 -0.928 0.3721\nv 0.004 -0.092544 0.100181\nvn 0.0177 -0.9286 0.3706\nv 0.004 -0.094079 0.09628\nvn 0.0164 -0.9304 0.3662\nv 0.004 -0.072999 0.110586\nvn 1 -0.0026 0.005\nv 0.004 -0.04507 0.110597\nvn 1 -0 0.0086\nv 0.003953 -0.045069 0.116064\nvn 1 0.0006 0.0057\nv 0.003996 -0.101836 0.094545\nvn 1 -0.0021 -0.0022\nv 0.004 -0.094079 0.09628\nvn 1 -0.0006 0.0002\nv 0.004 -0.092544 0.100181\nvn 1 -0.0007 0.0004\nv 0.003989 -0.101938 0.110778\nvn 1 -0.0008 0.0002\nv 0.003996 -0.098624 0.115724\nvn 1 0.0005 0.0014\nv 0.004 -0.077347 0.110355\nvn 1 -0 0.0006\nv 0.004 -0.090898 0.103015\nvn 1 -0.0007 0.0005\nv 0.003966 -0.100627 0.090568\nvn 1 -0.0067 -0.0017\nv 0.004 -0.095538 0.09079\nvn 1 -0.0056 -0.007\nv 0.004 -0.089372 0.10494\nvn 1 -0.0009 -0.0003\nv 0.003992 -0.096543 0.085821\nvn 1 -0.0067 -0.0004\nv 0.004 -0.081137 0.109697\nvn 1 -0.0001 0.0004\nv 0.004 -0.084146 0.108673\nvn 1 -0.0001 0.0003\nv 0.004 -0.086449 0.107423\nvn 1 -0.0001 0.0002\nv 0.004 -0.087946 0.106298\nvn 1 -0.0002 0.0002\nv 0.00396 -0.100551 0.114762\nvn 0.9995 -0.027 0.0166\nv 0.003989 -0.101938 0.110778\nvn 0.9995 -0.027 0.0166\nv 0.003996 -0.098624 0.115724\nvn 0.9995 -0.027 0.0166\nv 0.018196 0.026323 0.096409\nvn -0.5701 -0.8216 0.0003\nv 0.018236 0.026297 0.101221\nvn -0.5701 -0.8216 0.0003\nv 0.018067 0.026412 0.094368\nvn -0.5701 -0.8216 0.0003\nv 0.018236 0.026297 0.101221\nvn -0.5587 -0.8294 -0.0001\nv 0.017592 0.02673 0.107145\nvn -0.555 -0.8318 -6.79679e-17\nv 0.018067 0.026412 0.094368\nvn -0.5573 -0.8303 -6.82496e-17\nv 0.017305 0.026919 0.094332\nvn -0.5493 -0.8356 -6.72699e-17\nv 0.017304 0.026918 0.1082\nvn -0.5474 -0.8369 -6.70372e-17\nv 0.017304 0.026918 0.1082\nvn -0.5712 -0.8208 -0.0001\nv 0.016932 0.027177 0.108861\nvn -0.5712 -0.8208 -0.0001\nv 0.017305 0.026919 0.094332\nvn -0.5712 -0.8208 -0.0001\nv 0.017305 0.026919 0.094332\nvn -0.5284 -0.849 0.0016\nv 0.016932 0.027177 0.108861\nvn -0.5284 -0.849 0.0016\nv 0.016582 0.027368 0.09407\nvn -0.5284 -0.849 0.0016\nv 0.015986 0.02772 0.092847\nvn -0.4948 -0.869 -0.0002\nv 0.016932 0.027177 0.108861\nvn -0.4847 -0.8747 -0.0025\nv 0.015408 0.028048 0.099799\nvn -0.4851 -0.8744 -0.0024\nv 0.016582 0.027368 0.09407\nvn -0.51 -0.8602 0.001\nv 0.016932 0.027177 0.108861\nvn -0.51 -0.8602 0.001\nv 0.015986 0.02772 0.092847\nvn -0.51 -0.8602 0.001\nv 0.016582 0.027368 0.09407\nvn 0.5134 0.8582 -0.0032\nv 0.015986 0.02772 0.092847\nvn 0.5134 0.8582 -0.0032\nv 0.016133 0.027636 0.093724\nvn 0.5134 0.8582 -0.0032\nv 0.015262 0.028124 0.101167\nvn -0.4836 -0.8753 -0.0027\nv 0.017865 0.023805 0.094367\nvn -0.0442 0.0032 0.999\nv 0.018067 0.026412 0.094368\nvn -0.0442 0.0032 0.999\nv 0.017305 0.026919 0.094332\nvn -0.0442 0.0032 0.999\nv 0.017856 -0.026555 0.09437\nvn -0.0568 0.0001 0.9984\nv 0.017865 0.023805 0.094367\nvn -0.058 0.0001 0.9983\nv 0.017375 0.01386 0.09434\nvn -0.0596 0.0002 0.9982\nv 0.001992 -0.031956 0.108137\nvn -0.0229 0.9997 -0.0022\nv -8.58232e-19 -0.031999 0.109175\nvn -0.0229 0.9997 -0.0022\nv 0.001919 -0.031955 0.109147\nvn -0.0229 0.9997 -0.0022\nv 0.014781 -0.028382 0.107001\nvn -0.4582 0.8889 0.0001\nv 0.015093 -0.028221 0.1089\nvn -0.4671 0.8842 0.0022\nv 0.015744 -0.027859 0.101046\nvn -0.4677 0.8839 0.002\nv 0.015744 -0.027859 0.101046\nvn -0.4957 0.8685 -0.0003\nv 0.016537 -0.027396 0.108876\nvn -0.5004 0.8658 -0.0005\nv 0.016205 -0.027594 0.093851\nvn -0.4984 0.867 -0.0014\nv 0.016537 -0.027396 0.108876\nvn -0.5216 0.8532 0.0003\nv 0.016896 -0.027176 0.108339\nvn -0.526 0.8505 0.0001\nv 0.016205 -0.027594 0.093851\nvn -0.5215 0.8533 0.0003\nv 0.017253 -0.026954 0.107432\nvn -0.5283 0.849 0.0001\nv 0.017207 -0.026982 0.094308\nvn -0.5264 0.8503 0.0001\nv 0.001992 -0.031956 0.108137\nvn -0.1081 0.9941 -0.0083\nv 0.001919 -0.031955 0.109147\nvn -0.1081 0.9941 -0.0083\nv 0.004953 -0.031626 0.109088\nvn -0.1081 0.9941 -0.0083\nv 0.001992 -0.031956 0.108137\nvn -0.1131 0.9936 0.0074\nv 0.004953 -0.031626 0.109088\nvn -0.1131 0.9936 0.0074\nv 0.004966 -0.031617 0.108085\nvn -0.1131 0.9936 0.0074\nv 0.004966 -0.031617 0.108085\nvn -0.1988 0.98 0.0062\nv 0.004953 -0.031626 0.109088\nvn -0.1988 0.98 0.0062\nv 0.008072 -0.030986 0.108031\nvn -0.1988 0.98 0.0062\nv 0.017207 -0.026982 0.094308\nvn -0.5493 0.8356 0.0002\nv 0.017253 -0.026954 0.107432\nvn -0.5507 0.8347 0.0001\nv 0.017856 -0.026555 0.09437\nvn -0.5562 0.831 -0.0003\nv 0.008072 -0.030986 0.108031\nvn -0.2034 0.9791 -0.008\nv 0.004953 -0.031626 0.109088\nvn -0.2034 0.9791 -0.008\nv 0.00811 -0.03097 0.109029\nvn -0.2034 0.9791 -0.008\nv 0.018249 -0.026286 0.101172\nvn -0.5587 0.8293 -0.0005\nv 0.015093 -0.028221 0.1089\nvn -0.4963 0.8681 -0.0011\nv 0.008072 -0.030986 0.108031\nvn -0.2974 0.9547 -0.0039\nv 0.00811 -0.03097 0.109029\nvn -0.2974 0.9547 -0.0039\nv 0.010683 -0.030169 0.108983\nvn -0.2974 0.9547 -0.0039\nv 0.008072 -0.030986 0.108031\nvn -0.308 0.951 0.0284\nv 0.010683 -0.030169 0.108983\nvn -0.308 0.951 0.0284\nv 0.011492 -0.029877 0.107971\nvn -0.308 0.951 0.0284\nv 0.011492 -0.029877 0.107971\nvn -0.3654 0.9306 -0.0234\nv 0.010683 -0.030169 0.108983\nvn -0.3654 0.9306 -0.0234\nv 0.012848 -0.02932 0.108946\nvn -0.3654 0.9306 -0.0234\nv 0.011492 -0.029877 0.107971\nvn -0.3977 0.9171 0.0293\nv 0.012848 -0.02932 0.108946\nvn -0.3977 0.9171 0.0293\nv 0.013811 -0.028869 0.107896\nvn -0.3977 0.9171 0.0293\nv 0.01527 -0.028122 0.09208\nvn -0.4867 0.8736 0.001\nv 0.015317 -0.028097 0.093425\nvn -0.4867 0.8736 0.001\nv 0.015509 -0.02799 0.092988\nvn -0.4867 0.8736 0.001\nv 0.014408 -0.028573 0.107528\nvn -0.447 0.8945 -0.0059\nv 0.013811 -0.028869 0.107896\nvn -0.4462 0.8949 -0.007\nv 0.015093 -0.028221 0.1089\nvn -0.4463 0.8949 -0.0068\nv 0.012848 -0.02932 0.108946\nvn -0.4398 0.8979 -0.0174\nv 0.014408 -0.028573 0.107528\nvn -0.4557 0.8901 -0.0005\nv 0.015317 -0.028097 0.093425\nvn -0.4927 0.8702 0.0003\nv 0.015509 -0.02799 0.092988\nvn -0.4921 0.8706 -0.0022\nv 0.019542 0.031971 0.109506\nvn 0.4488 -0.5017 0.7395\nv 0.018863 0.030693 0.109051\nvn 0.4488 -0.5017 0.7395\nv 0.019982 0.031574 0.108969\nvn 0.4488 -0.5017 0.7395\nv 0.017683 0.031544 0.110076\nvn 0.2372 -0.2491 0.939\nv 0.019655 0.03298 0.109959\nvn 0.2372 -0.2491 0.939\nv 0.019526 0.034135 0.110298\nvn 0.2372 -0.2491 0.939\nv 0.018043 0.030645 0.10956\nvn 0.4754 -0.5083 0.7181\nv 0.018863 0.030693 0.109051\nvn 0.4754 -0.5083 0.7181\nv 0.019542 0.031971 0.109506\nvn 0.4754 -0.5083 0.7181\nv 0.018043 0.030645 0.10956\nvn 0.3944 -0.4125 0.8212\nv 0.019542 0.031971 0.109506\nvn 0.3944 -0.4125 0.8212\nv 0.019655 0.03298 0.109959\nvn 0.3944 -0.4125 0.8212\nv 0.018043 0.030645 0.10956\nvn 0.4964 -0.4193 0.7601\nv 0.017909 0.029508 0.10902\nvn 0.4964 -0.4193 0.7601\nv 0.018863 0.030693 0.109051\nvn 0.4964 -0.4193 0.7601\nv 0.017657 0.028029 0.108272\nvn 0.804 -0.4684 0.3663\nv 0.018603 0.029081 0.10754\nvn 0.8037 -0.4627 0.3742\nv 0.018412 0.029318 0.108266\nvn 0.8041 -0.4697 0.3644\nv 0.017195 0.028402 0.109113\nvn 0.7082 -0.4097 0.575\nv 0.017657 0.028029 0.108272\nvn 0.7086 -0.4128 0.5723\nv 0.018412 0.029318 0.108266\nvn 0.7086 -0.4125 0.5725\nv 0.017909 0.029508 0.10902\nvn 0.7081 -0.4093 0.5754\nv 0.028566 0.038695 0.10671\nvn 0.9851 0.0107 0.1717\nv 0.028578 0.040716 0.10652\nvn 0.9851 0.0107 0.1717\nv 0.028399 0.039625 0.107611\nvn 0.9851 0.0107 0.1717\nv 0.017195 0.028402 0.109113\nvn 0.7826 -0.2821 0.555\nv 0.016932 0.027177 0.108861\nvn 0.7826 -0.2823 0.5549\nv 0.017657 0.028029 0.108272\nvn 0.7831 -0.2836 0.5536\nv 0.017304 0.026918 0.1082\nvn 0.7831 -0.2838 0.5533\nv 0.017195 0.028402 0.109113\nvn 0.6067 -0.2831 0.7428\nv 0.01642 0.028543 0.109799\nvn 0.6067 -0.2831 0.7428\nv 0.016932 0.027177 0.108861\nvn 0.6067 -0.2831 0.7428\nv 0.027657 0.035185 0.106657\nvn 0.7958 -0.5909 0.1325\nv 0.027315 0.034865 0.107282\nvn 0.7958 -0.5909 0.1325\nv 0.026806 0.034093 0.106899\nvn 0.7958 -0.5909 0.1325\nv 0.027657 0.035185 0.106657\nvn 0.7954 -0.5842 0.1612\nv 0.026806 0.034093 0.106899\nvn 0.7954 -0.5842 0.1612\nv 0.027206 0.03449 0.106361\nvn 0.7954 -0.5842 0.1612\nv 0.027598 0.039593 0.108934\nvn 0.8553 -0.0079 0.518\nv 0.028399 0.039625 0.107611\nvn 0.8553 -0.0079 0.518\nv 0.027968 0.041088 0.108346\nvn 0.8553 -0.0079 0.518\nv 0.027624 0.035735 0.10778\nvn 0.8806 -0.4149 0.2291\nv 0.027657 0.035185 0.106657\nvn 0.8806 -0.4149 0.2291\nv 0.028111 0.036237 0.106818\nvn 0.8806 -0.4149 0.2291\nv 0.027624 0.035735 0.10778\nvn 0.8618 -0.445 0.2433\nv 0.027315 0.034865 0.107282\nvn 0.8618 -0.445 0.2433\nv 0.027657 0.035185 0.106657\nvn 0.8618 -0.445 0.2433\nv 0.028153 0.037209 0.107599\nvn 0.966 -0.1377 0.2189\nv 0.028351 0.037145 0.106686\nvn 0.966 -0.1377 0.2189\nv 0.028566 0.038695 0.10671\nvn 0.966 -0.1377 0.2189\nv 0.026806 0.034093 0.106899\nvn 0.7224 -0.6243 0.2974\nv 0.027315 0.034865 0.107282\nvn 0.7224 -0.6243 0.2974\nv 0.026634 0.034368 0.107894\nvn 0.7224 -0.6243 0.2974\nv 0.027624 0.035735 0.10778\nvn 0.7799 -0.4955 0.3823\nv 0.026804 0.034843 0.108295\nvn 0.7799 -0.4955 0.3823\nv 0.027315 0.034865 0.107282\nvn 0.7799 -0.4955 0.3823\nv 0.027315 0.034865 0.107282\nvn 0.7387 -0.5698 0.3599\nv 0.026804 0.034843 0.108295\nvn 0.7387 -0.5698 0.3599\nv 0.026634 0.034368 0.107894\nvn 0.7387 -0.5698 0.3599\nv 0.028111 0.036237 0.106818\nvn 0.9503 -0.219 0.2213\nv 0.028351 0.037145 0.106686\nvn 0.9503 -0.219 0.2213\nv 0.028153 0.037209 0.107599\nvn 0.9503 -0.219 0.2213\nv 0.026318 0.033775 0.107291\nvn 0.6791 -0.6689 0.3023\nv 0.026806 0.034093 0.106899\nvn 0.6791 -0.6689 0.3023\nv 0.026634 0.034368 0.107894\nvn 0.6791 -0.6689 0.3023\nv 0.027624 0.035735 0.10778\nvn 0.7959 -0.3037 0.5238\nv 0.027772 0.037166 0.108384\nvn 0.7959 -0.3037 0.5238\nv 0.027048 0.03601 0.108815\nvn 0.7959 -0.3037 0.5238\nv 0.027772 0.037166 0.108384\nvn 0.8546 -0.0554 0.5164\nv 0.028399 0.039625 0.107611\nvn 0.8546 -0.0554 0.5164\nv 0.027598 0.039593 0.108934\nvn 0.8546 -0.0554 0.5164\nv 0.026804 0.034843 0.108295\nvn 0.7559 -0.3913 0.5248\nv 0.027624 0.035735 0.10778\nvn 0.7559 -0.3913 0.5248\nv 0.027048 0.03601 0.108815\nvn 0.7559 -0.3913 0.5248\nv 0.027467 0.037858 0.108905\nvn 0.8162 -0.0711 0.5734\nv 0.027772 0.037166 0.108384\nvn 0.8162 -0.0711 0.5734\nv 0.027598 0.039593 0.108934\nvn 0.8162 -0.0711 0.5734\nv 0.025803 0.033773 0.108077\nvn 0.571 -0.6401 0.514\nv 0.026634 0.034368 0.107894\nvn 0.571 -0.6401 0.514\nv 0.026804 0.034843 0.108295\nvn 0.571 -0.6401 0.514\nv 0.026965 0.037343 0.109319\nvn 0.6728 -0.063 0.7372\nv 0.027467 0.037858 0.108905\nvn 0.6728 -0.063 0.7372\nv 0.027598 0.039593 0.108934\nvn 0.6728 -0.063 0.7372\nv 0.024792 0.033724 0.108849\nvn 0.4344 -0.7343 0.5216\nv 0.024584 0.033102 0.108146\nvn 0.4344 -0.7343 0.5216\nv 0.025803 0.033773 0.108077\nvn 0.4344 -0.7343 0.5216\nv 0.026965 0.037343 0.109319\nvn 0.6143 -0.0379 0.7882\nv 0.027598 0.039593 0.108934\nvn 0.6143 -0.0379 0.7882\nv 0.026566 0.03985 0.109751\nvn 0.6143 -0.0379 0.7882\nv 0.026965 0.037343 0.109319\nvn 0.728 -0.1769 0.6624\nv 0.027772 0.037166 0.108384\nvn 0.728 -0.1769 0.6624\nv 0.027467 0.037858 0.108905\nvn 0.728 -0.1769 0.6624\nv 0.025008 0.032948 0.107362\nvn 0.3801 -0.9054 0.1892\nv 0.02165 0.031458 0.106976\nvn 0.3801 -0.9054 0.1892\nv 0.024607 0.032604 0.106519\nvn 0.3801 -0.9054 0.1892\nv 0.026096 0.037396 0.109866\nvn 0.5292 -0.0614 0.8463\nv 0.026965 0.037343 0.109319\nvn 0.5292 -0.0614 0.8463\nv 0.026566 0.03985 0.109751\nvn 0.5292 -0.0614 0.8463\nv 0.026426 0.036599 0.109552\nvn 0.4604 -0.2847 0.8408\nv 0.025493 0.036208 0.10993\nvn 0.4604 -0.2847 0.8408\nv 0.026258 0.035409 0.109241\nvn 0.4604 -0.2847 0.8408\nv 0.027048 0.03601 0.108815\nvn 0.721 -0.2054 0.6618\nv 0.027772 0.037166 0.108384\nvn 0.721 -0.2054 0.6618\nv 0.026965 0.037343 0.109319\nvn 0.721 -0.2054 0.6618\nv 0.024584 0.033102 0.108146\nvn 0.3605 -0.8592 0.3632\nv 0.021593 0.031736 0.107884\nvn 0.3605 -0.8592 0.3632\nv 0.025008 0.032948 0.107362\nvn 0.3605 -0.8592 0.3632\nv 0.026426 0.036599 0.109552\nvn 0.6415 -0.2361 0.7299\nv 0.027048 0.03601 0.108815\nvn 0.6415 -0.2361 0.7299\nv 0.026965 0.037343 0.109319\nvn 0.6415 -0.2361 0.7299\nv 0.025632 0.038394 0.110106\nvn 0.4012 -0.0337 0.9153\nv 0.026096 0.037396 0.109866\nvn 0.4012 -0.0337 0.9153\nv 0.026566 0.03985 0.109751\nvn 0.4012 -0.0337 0.9153\nv 0.026426 0.036599 0.109552\nvn 0.5243 -0.1155 0.8437\nv 0.026965 0.037343 0.109319\nvn 0.5243 -0.1155 0.8437\nv 0.026096 0.037396 0.109866\nvn 0.5243 -0.1155 0.8437\nv 0.025131 0.034999 0.10963\nvn 0.4136 -0.3346 0.8467\nv 0.026258 0.035409 0.109241\nvn 0.4136 -0.3346 0.8467\nv 0.025493 0.036208 0.10993\nvn 0.4136 -0.3346 0.8467\nv 0.024005 0.034202 0.109555\nvn 0.343 -0.5551 0.7578\nv 0.024792 0.033724 0.108849\nvn 0.343 -0.5551 0.7578\nv 0.025131 0.034999 0.10963\nvn 0.343 -0.5551 0.7578\nv 0.026096 0.037396 0.109866\nvn 0.431 -0.1708 0.8861\nv 0.025493 0.036208 0.10993\nvn 0.431 -0.1708 0.8861\nv 0.026426 0.036599 0.109552\nvn 0.431 -0.1708 0.8861\nv 0.021593 0.031736 0.107884\nvn 0.3593 -0.8857 0.294\nv 0.02165 0.031458 0.106976\nvn 0.3593 -0.8857 0.294\nv 0.025008 0.032948 0.107362\nvn 0.3593 -0.8857 0.294\nv 0.025493 0.036208 0.10993\nvn 0.271 -0.3081 0.912\nv 0.024113 0.035375 0.110059\nvn 0.271 -0.3081 0.912\nv 0.025131 0.034999 0.10963\nvn 0.271 -0.3081 0.912\nv 0.025493 0.036208 0.10993\nvn 0.2902 -0.095 0.9522\nv 0.026096 0.037396 0.109866\nvn 0.2889 -0.095 0.9526\nv 0.025632 0.038394 0.110106\nvn 0.2984 -0.0953 0.9497\nv 0.024783 0.036929 0.110226\nvn 0.2986 -0.0954 0.9496\nv 0.024113 0.035375 0.110059\nvn 0.2051 -0.1916 0.9598\nv 0.025493 0.036208 0.10993\nvn 0.2051 -0.1916 0.9598\nv 0.024783 0.036929 0.110226\nvn 0.2051 -0.1916 0.9598\nv 0.028399 0.039625 0.107611\nvn 0.9552 -0.0988 0.2791\nv 0.028153 0.037209 0.107599\nvn 0.9552 -0.0988 0.2791\nv 0.028566 0.038695 0.10671\nvn 0.9552 -0.0988 0.2791\nv 0.028399 0.039625 0.107611\nvn 0.898 -0.0937 0.4299\nv 0.027772 0.037166 0.108384\nvn 0.898 -0.0937 0.4299\nv 0.028153 0.037209 0.107599\nvn 0.898 -0.0937 0.4299\nv 0.020593 0.031108 0.107711\nvn 0.4062 -0.7781 0.4791\nv 0.021593 0.031736 0.107884\nvn 0.4062 -0.7781 0.4791\nv 0.021316 0.031992 0.108534\nvn 0.4062 -0.7781 0.4791\nv 0.024113 0.035375 0.110059\nvn 0.1958 -0.402 0.8945\nv 0.019655 0.03298 0.109959\nvn 0.1958 -0.402 0.8945\nv 0.024005 0.034202 0.109555\nvn 0.1958 -0.402 0.8945\nv 0.027624 0.035735 0.10778\nvn 0.9067 -0.2874 0.3087\nv 0.028111 0.036237 0.106818\nvn 0.9067 -0.2874 0.3087\nv 0.028153 0.037209 0.107599\nvn 0.9067 -0.2874 0.3087\nv 0.024783 0.036929 0.110226\nvn 0.0905 -0.1449 0.9853\nv 0.019526 0.034135 0.110298\nvn 0.0905 -0.1449 0.9853\nv 0.024113 0.035375 0.110059\nvn 0.0905 -0.1449 0.9853\nv 0.027624 0.035735 0.10778\nvn 0.8738 -0.2633 0.4089\nv 0.028153 0.037209 0.107599\nvn 0.8738 -0.2633 0.4089\nv 0.027772 0.037166 0.108384\nvn 0.8738 -0.2633 0.4089\nv 0.025008 0.032948 0.107362\nvn 0.5305 -0.8236 0.2006\nv 0.025943 0.033347 0.106525\nvn 0.5305 -0.8236 0.2006\nv 0.026318 0.033775 0.107291\nvn 0.5305 -0.8236 0.2006\nv 0.018412 0.029318 0.108266\nvn 0.703 -0.6008 0.3806\nv 0.018603 0.029081 0.10754\nvn 0.703 -0.6008 0.3806\nv 0.019635 0.030186 0.107377\nvn 0.703 -0.6008 0.3806\nv 0.019729 0.030734 0.108205\nvn 0.696 -0.6324 0.34\nv 0.018412 0.029318 0.108266\nvn 0.696 -0.6324 0.34\nv 0.019635 0.030186 0.107377\nvn 0.696 -0.6324 0.34\nv 0.018732 0.029005 0.10674\nvn 0.8684 -0.4601 0.1848\nv 0.018603 0.029081 0.10754\nvn 0.8684 -0.4601 0.1848\nv 0.01791 0.027674 0.107294\nvn 0.8684 -0.4601 0.1848\nv 0.017111 0.032556 0.110351\nvn 0.2125 -0.1429 0.9667\nv 0.016378 0.030211 0.110166\nvn 0.2125 -0.1429 0.9667\nv 0.017683 0.031544 0.110076\nvn 0.2125 -0.1429 0.9667\nv 0.01791 0.027674 0.107294\nvn 0.8037 -0.4616 0.3755\nv 0.016378 0.030211 0.110166\nvn 0.2415 -0.1513 0.9585\nv 0.017111 0.032556 0.110351\nvn 0.2415 -0.1513 0.9585\nv 0.015313 0.029765 0.110364\nvn 0.2415 -0.1513 0.9585\nv 0.016378 0.030211 0.110166\nvn 0.2597 -0.201 0.9445\nv 0.015313 0.029765 0.110364\nvn 0.2597 -0.201 0.9445\nv 0.01642 0.028543 0.109799\nvn 0.2597 -0.201 0.9445\nv 0.016378 0.030211 0.110166\nvn 0.394 -0.1878 0.8997\nv 0.01642 0.028543 0.109799\nvn 0.394 -0.1878 0.8997\nv 0.016869 0.029718 0.109848\nvn 0.394 -0.1878 0.8997\nv 0.017592 0.02673 0.107145\nvn 0.8876 -0.3461 0.304\nv 0.01791 0.027674 0.107294\nvn 0.8876 -0.3461 0.304\nv 0.017304 0.026918 0.1082\nvn 0.8876 -0.3461 0.304\nv 0.017657 0.028029 0.108272\nvn 0.8897 -0.3039 0.3406\nv 0.017304 0.026918 0.1082\nvn 0.8897 -0.3039 0.3406\nv 0.01791 0.027674 0.107294\nvn 0.8897 -0.3039 0.3406\nv 0.026634 0.034368 0.107894\nvn 0.5913 -0.7077 0.3866\nv 0.025803 0.033773 0.108077\nvn 0.5913 -0.7077 0.3866\nv 0.026318 0.033775 0.107291\nvn 0.5913 -0.7077 0.3866\nv 0.026258 0.035409 0.109241\nvn 0.6561 -0.4169 0.629\nv 0.026804 0.034843 0.108295\nvn 0.6561 -0.4169 0.629\nv 0.027048 0.03601 0.108815\nvn 0.6561 -0.4169 0.629\nv 0.025807 0.034422 0.108851\nvn 0.5725 -0.514 0.6388\nv 0.026804 0.034843 0.108295\nvn 0.5725 -0.514 0.6388\nv 0.026258 0.035409 0.109241\nvn 0.5725 -0.514 0.6388\nv 0.026258 0.035409 0.109241\nvn 0.6118 -0.2799 0.7399\nv 0.027048 0.03601 0.108815\nvn 0.6118 -0.2799 0.7399\nv 0.026426 0.036599 0.109552\nvn 0.6118 -0.2799 0.7399\nv 0.024792 0.033724 0.108849\nvn 0.4662 -0.6794 0.5667\nv 0.025803 0.033773 0.108077\nvn 0.4662 -0.6794 0.5667\nv 0.025807 0.034422 0.108851\nvn 0.4662 -0.6794 0.5667\nv 0.026318 0.033775 0.107291\nvn 0.6146 -0.7775 0.1336\nv 0.025943 0.033347 0.106525\nvn 0.6146 -0.7775 0.1336\nv 0.026806 0.034093 0.106899\nvn 0.6146 -0.7775 0.1336\nv 0.025807 0.034422 0.108851\nvn 0.4389 -0.4965 0.7489\nv 0.026258 0.035409 0.109241\nvn 0.4389 -0.4965 0.7489\nv 0.025131 0.034999 0.10963\nvn 0.4389 -0.4965 0.7489\nv 0.024584 0.033102 0.108146\nvn 0.3239 -0.7539 0.5715\nv 0.024792 0.033724 0.108849\nvn 0.3239 -0.7539 0.5715\nv 0.021316 0.031992 0.108534\nvn 0.3239 -0.7539 0.5715\nv 0.024607 0.032604 0.106519\nvn 0.4817 -0.8673 0.1253\nv 0.025943 0.033347 0.106525\nvn 0.4817 -0.8673 0.1253\nv 0.025008 0.032948 0.107362\nvn 0.4817 -0.8673 0.1253\nv 0.024584 0.033102 0.108146\nvn 0.3338 -0.8201 0.4648\nv 0.021316 0.031992 0.108534\nvn 0.3338 -0.8201 0.4648\nv 0.021593 0.031736 0.107884\nvn 0.3338 -0.8201 0.4648\nv 0.024113 0.035375 0.110059\nvn 0.226 -0.4018 0.8874\nv 0.024005 0.034202 0.109555\nvn 0.226 -0.4018 0.8874\nv 0.025131 0.034999 0.10963\nvn 0.226 -0.4018 0.8874\nv 0.02165 0.031458 0.106976\nvn 0.4742 -0.8329 0.2851\nv 0.021593 0.031736 0.107884\nvn 0.4742 -0.8329 0.2851\nv 0.020593 0.031108 0.107711\nvn 0.4742 -0.8329 0.2851\nv 0.025803 0.033773 0.108077\nvn 0.5154 -0.788 0.3367\nv 0.025008 0.032948 0.107362\nvn 0.5154 -0.788 0.3367\nv 0.026318 0.033775 0.107291\nvn 0.5154 -0.788 0.3367\nv 0.019729 0.030734 0.108205\nvn 0.5342 -0.7673 0.3549\nv 0.020593 0.031108 0.107711\nvn 0.5342 -0.7673 0.3549\nv 0.021316 0.031992 0.108534\nvn 0.5342 -0.7673 0.3549\nv 0.019635 0.030186 0.107377\nvn 0.6065 -0.7839 0.1329\nv 0.019692 0.030091 0.106555\nvn 0.6065 -0.7839 0.1329\nv 0.020628 0.030869 0.106872\nvn 0.6065 -0.7839 0.1329\nv 0.020593 0.031108 0.107711\nvn 0.5505 -0.7234 0.4167\nv 0.019729 0.030734 0.108205\nvn 0.5505 -0.7234 0.4167\nv 0.019635 0.030186 0.107377\nvn 0.5505 -0.7234 0.4167\nv 0.024584 0.033102 0.108146\nvn 0.4592 -0.7915 0.4033\nv 0.025008 0.032948 0.107362\nvn 0.4592 -0.7915 0.4033\nv 0.025803 0.033773 0.108077\nvn 0.4592 -0.7915 0.4033\nv 0.018603 0.029081 0.10754\nvn 0.7521 -0.6332 0.1826\nv 0.018732 0.029005 0.10674\nvn 0.7521 -0.6332 0.1826\nv 0.019692 0.030091 0.106555\nvn 0.7521 -0.6332 0.1826\nv 0.018603 0.029081 0.10754\nvn 0.734 -0.6669 0.1281\nv 0.019692 0.030091 0.106555\nvn 0.734 -0.6669 0.1281\nv 0.019635 0.030186 0.107377\nvn 0.734 -0.6669 0.1281\nv 0.018412 0.029318 0.108266\nvn 0.6033 -0.5353 0.5912\nv 0.019729 0.030734 0.108205\nvn 0.6033 -0.5353 0.5912\nv 0.018863 0.030693 0.109051\nvn 0.6033 -0.5353 0.5912\nv 0.019526 0.034135 0.110298\nvn 0.1421 -0.1843 0.9725\nv 0.017111 0.032556 0.110351\nvn 0.1421 -0.1843 0.9725\nv 0.017683 0.031544 0.110076\nvn 0.1421 -0.1843 0.9725\nv 0.017683 0.031544 0.110076\nvn 0.3219 -0.371 0.8711\nv 0.018043 0.030645 0.10956\nvn 0.3219 -0.371 0.8711\nv 0.019655 0.03298 0.109959\nvn 0.3219 -0.371 0.8711\nv 0.018412 0.029318 0.108266\nvn 0.6387 -0.5286 0.5592\nv 0.018863 0.030693 0.109051\nvn 0.6387 -0.5286 0.5592\nv 0.017909 0.029508 0.10902\nvn 0.6387 -0.5286 0.5592\nv 0.018043 0.030645 0.10956\nvn 0.4682 -0.3397 0.8157\nv 0.016869 0.029718 0.109848\nvn 0.4682 -0.3397 0.8157\nv 0.017195 0.028402 0.109113\nvn 0.4682 -0.3397 0.8157\nv 0.018043 0.030645 0.10956\nvn 0.6718 -0.3808 0.6353\nv 0.017195 0.028402 0.109113\nvn 0.6718 -0.3808 0.6353\nv 0.017909 0.029508 0.10902\nvn 0.6718 -0.3808 0.6353\nv 0.017683 0.031544 0.110076\nvn 0.3276 -0.2595 0.9085\nv 0.016378 0.030211 0.110166\nvn 0.3276 -0.2595 0.9085\nv 0.016869 0.029718 0.109848\nvn 0.3276 -0.2595 0.9085\nv 0.017683 0.031544 0.110076\nvn 0.4464 -0.3041 0.8416\nv 0.016869 0.029718 0.109848\nvn 0.4464 -0.3041 0.8416\nv 0.018043 0.030645 0.10956\nvn 0.4464 -0.3041 0.8416\nv 0.017195 0.028402 0.109113\nvn 0.6122 -0.2647 0.7451\nv 0.016869 0.029718 0.109848\nvn 0.6122 -0.2647 0.7451\nv 0.01642 0.028543 0.109799\nvn 0.6122 -0.2647 0.7451\nv 0.026804 0.034843 0.108295\nvn 0.5625 -0.6352 0.5292\nv 0.025807 0.034422 0.108851\nvn 0.5625 -0.6352 0.5292\nv 0.025803 0.033773 0.108077\nvn 0.5625 -0.6352 0.5292\nv 0.021316 0.031992 0.108534\nvn 0.2841 -0.691 0.6647\nv 0.024792 0.033724 0.108849\nvn 0.2841 -0.691 0.6647\nv 0.021191 0.03272 0.109345\nvn 0.2841 -0.691 0.6647\nv 0.025131 0.034999 0.10963\nvn 0.3799 -0.5544 0.7405\nv 0.024792 0.033724 0.108849\nvn 0.3799 -0.5544 0.7405\nv 0.025807 0.034422 0.108851\nvn 0.3799 -0.5544 0.7405\nv 0.024005 0.034202 0.109555\nvn 0.2749 -0.626 0.7298\nv 0.021191 0.03272 0.109345\nvn 0.2749 -0.626 0.7298\nv 0.024792 0.033724 0.108849\nvn 0.2749 -0.626 0.7298\nv 0.020593 0.031108 0.107711\nvn 0.4621 -0.8477 0.2606\nv 0.020628 0.030869 0.106872\nvn 0.4621 -0.8477 0.2606\nv 0.02165 0.031458 0.106976\nvn 0.4621 -0.8477 0.2606\nv 0.021191 0.03272 0.109345\nvn 0.2286 -0.5486 0.8042\nv 0.024005 0.034202 0.109555\nvn 0.2286 -0.5486 0.8042\nv 0.019655 0.03298 0.109959\nvn 0.2286 -0.5486 0.8042\nv 0.019982 0.031574 0.108969\nvn 0.4122 -0.6451 0.6433\nv 0.021316 0.031992 0.108534\nvn 0.4122 -0.6451 0.6433\nv 0.021191 0.03272 0.109345\nvn 0.4122 -0.6451 0.6433\nv 0.019635 0.030186 0.107377\nvn 0.6294 -0.7401 0.2368\nv 0.020628 0.030869 0.106872\nvn 0.6294 -0.7401 0.2368\nv 0.020593 0.031108 0.107711\nvn 0.6294 -0.7401 0.2368\nv 0.019729 0.030734 0.108205\nvn 0.4114 -0.6785 0.6086\nv 0.021316 0.031992 0.108534\nvn 0.4114 -0.6785 0.6086\nv 0.019982 0.031574 0.108969\nvn 0.4114 -0.6785 0.6086\nv 0.019542 0.031971 0.109506\nvn 0.3428 -0.5984 0.7241\nv 0.019982 0.031574 0.108969\nvn 0.3428 -0.5984 0.7241\nv 0.021191 0.03272 0.109345\nvn 0.3428 -0.5984 0.7241\nv 0.019526 0.034135 0.110298\nvn 0.1219 -0.267 0.956\nv 0.019655 0.03298 0.109959\nvn 0.1219 -0.267 0.956\nv 0.024113 0.035375 0.110059\nvn 0.1219 -0.267 0.956\nv 0.019542 0.031971 0.109506\nvn 0.2751 -0.4189 0.8654\nv 0.021191 0.03272 0.109345\nvn 0.2751 -0.4189 0.8654\nv 0.019655 0.03298 0.109959\nvn 0.2751 -0.4189 0.8654\nv 0.018863 0.030693 0.109051\nvn 0.5482 -0.6476 0.5293\nv 0.019729 0.030734 0.108205\nvn 0.5482 -0.6476 0.5293\nv 0.019982 0.031574 0.108969\nvn 0.5482 -0.6476 0.5293\nv 0.026355 0.072186 0.106887\nvn 0.9721 0.066 0.225\nv 0.028399 0.039625 0.107611\nvn 0.9721 0.066 0.225\nv 0.028578 0.040716 0.10652\nvn 0.9721 0.066 0.225\nv 0.02604 0.07215 0.107906\nvn 0.9525 0.0664 0.2972\nv 0.028399 0.039625 0.107611\nvn 0.9525 0.0664 0.2972\nv 0.026355 0.072186 0.106887\nvn 0.9525 0.0664 0.2972\nv 0.02604 0.07215 0.107906\nvn 0.9098 0.0623 0.4103\nv 0.027968 0.041088 0.108346\nvn 0.9098 0.0623 0.4103\nv 0.028399 0.039625 0.107611\nvn 0.9098 0.0623 0.4103\nv 0.025491 0.072417 0.108775\nvn 0.8523 0.0603 0.5196\nv 0.027968 0.041088 0.108346\nvn 0.8523 0.0603 0.5196\nv 0.02604 0.07215 0.107906\nvn 0.8523 0.0603 0.5196\nv 0.025491 0.072417 0.108775\nvn 0.7789 0.053 0.6249\nv 0.027598 0.039593 0.108934\nvn 0.7789 0.053 0.6249\nv 0.027968 0.041088 0.108346\nvn 0.7789 0.053 0.6249\nv 0.024755 0.07251 0.109469\nvn 0.6263 0.0414 0.7784\nv 0.026566 0.03985 0.109751\nvn 0.6263 0.0414 0.7784\nv 0.027598 0.039593 0.108934\nvn 0.6263 0.0414 0.7784\nv 0.024755 0.07251 0.109469\nvn 0.6884 0.0477 0.7237\nv 0.027598 0.039593 0.108934\nvn 0.6884 0.0477 0.7237\nv 0.025491 0.072417 0.108775\nvn 0.6884 0.0477 0.7237\nv 0.024053 0.072391 0.10989\nvn 0.5094 0.0357 0.8598\nv 0.026566 0.03985 0.109751\nvn 0.5094 0.0357 0.8598\nv 0.024755 0.07251 0.109469\nvn 0.5094 0.0357 0.8598\nv 0.024053 0.072391 0.10989\nvn 0.3295 0.0213 0.9439\nv 0.025632 0.038394 0.110106\nvn 0.3335 0.0215 0.9425\nv 0.026566 0.03985 0.109751\nvn 0.3269 0.0212 0.9448\nv 0.02338 0.072932 0.110117\nvn 0.3362 0.0216 0.9416\nv 0.02338 0.072932 0.110117\nvn 0.1262 0.0079 0.992\nv 0.024783 0.036929 0.110226\nvn 0.1262 0.0079 0.992\nv 0.025632 0.038394 0.110106\nvn 0.1262 0.0079 0.992\nv 0.022654 0.072295 0.110249\nvn 0.1703 0.0096 0.9854\nv 0.024783 0.036929 0.110226\nvn 0.1703 0.0096 0.9854\nv 0.02338 0.072932 0.110117\nvn 0.1703 0.0096 0.9854\nv 0.025865 0.074948 0.107583\nvn 0.967 0.1144 0.2275\nv 0.026355 0.072186 0.106887\nvn 0.967 0.1144 0.2275\nv 0.026006 0.076112 0.106395\nvn 0.967 0.1144 0.2275\nv 0.0226 0.07531 0.110022\nvn 0.1506 0.1902 0.9701\nv 0.023246 0.076474 0.109694\nvn 0.1506 0.1902 0.9701\nv 0.022227 0.078862 0.109384\nvn 0.1506 0.1902 0.9701\nv 0.02604 0.07215 0.107906\nvn 0.9501 0.0938 0.2974\nv 0.026355 0.072186 0.106887\nvn 0.9501 0.0938 0.2974\nv 0.025865 0.074948 0.107583\nvn 0.9501 0.0938 0.2974\nv 0.025491 0.072417 0.108775\nvn 0.8554 0.1118 0.5057\nv 0.02604 0.07215 0.107906\nvn 0.8554 0.1118 0.5057\nv 0.025865 0.074948 0.107583\nvn 0.8554 0.1118 0.5057\nv 0.025491 0.072417 0.108775\nvn 0.8687 0.1002 0.4852\nv 0.025865 0.074948 0.107583\nvn 0.8687 0.1002 0.4852\nv 0.025415 0.075171 0.108342\nvn 0.8687 0.1002 0.4852\nv 0.021887 0.094223 0.091055\nvn 0.6939 0.714 0.0936\nv 0.022481 0.093685 0.090757\nvn 0.6939 0.714 0.0936\nv 0.021596 0.094998 0.087299\nvn 0.6939 0.714 0.0936\nv 0.022777 0.093296 0.090202\nvn 0.924 0.3823 0.0106\nv 0.023658 0.091042 0.094685\nvn 0.924 0.3823 0.0106\nv 0.022992 0.092815 0.088854\nvn 0.924 0.3823 0.0106\nv 0.021093 0.094874 0.090452\nvn 0.5715 0.8113 0.1232\nv 0.021887 0.094223 0.091055\nvn 0.5715 0.8113 0.1232\nv 0.021596 0.094998 0.087299\nvn 0.5715 0.8113 0.1232\nv 0.022552 0.090159 0.101044\nvn 0.6308 0.6543 0.4172\nv 0.023284 0.088471 0.102585\nvn 0.6308 0.6543 0.4172\nv 0.023158 0.090226 0.100023\nvn 0.6308 0.6543 0.4172\nv 0.023507 0.085301 0.105664\nvn 0.6636 0.5263 0.5316\nv 0.024004 0.086547 0.103809\nvn 0.6636 0.5263 0.5316\nv 0.023146 0.087417 0.10402\nvn 0.6636 0.5263 0.5316\nv 0.023125 0.092146 0.094753\nvn 0.9005 0.4329 0.0406\nv 0.023658 0.091042 0.094685\nvn 0.9005 0.4329 0.0406\nv 0.022777 0.093296 0.090202\nvn 0.9005 0.4329 0.0406\nv 0.020688 0.094566 0.092575\nvn 0.3105 0.9305 0.1943\nv 0.021093 0.094874 0.090452\nvn 0.3105 0.9305 0.1943\nv 0.020073 0.095652 0.088354\nvn 0.3105 0.9305 0.1943\nv 0.023694 0.082991 0.107099\nvn 0.6627 0.4333 0.6108\nv 0.024338 0.083995 0.105689\nvn 0.6627 0.4333 0.6108\nv 0.023507 0.085301 0.105664\nvn 0.6627 0.4333 0.6108\nv 0.019721 0.09507 0.09145\nvn 0.2523 0.9453 0.2066\nv 0.020688 0.094566 0.092575\nvn 0.2523 0.9453 0.2066\nv 0.020073 0.095652 0.088354\nvn 0.2523 0.9453 0.2066\nv 0.022169 0.093443 0.0937\nvn 0.7011 0.7008 0.1319\nv 0.022481 0.093685 0.090757\nvn 0.7011 0.7008 0.1319\nv 0.021887 0.094223 0.091055\nvn 0.7011 0.7008 0.1319\nv 0.023125 0.092146 0.094753\nvn 0.8402 0.5376 0.0717\nv 0.022777 0.093296 0.090202\nvn 0.8402 0.5376 0.0717\nv 0.022481 0.093685 0.090757\nvn 0.8402 0.5376 0.0717\nv 0.023712 0.080999 0.108105\nvn 0.6486 0.3475 0.6772\nv 0.024641 0.081065 0.107181\nvn 0.6486 0.3475 0.6772\nv 0.023694 0.082991 0.107099\nvn 0.6486 0.3475 0.6772\nv 0.023712 0.080999 0.108105\nvn 0.6607 0.304 0.6863\nv 0.024381 0.078915 0.108383\nvn 0.6607 0.304 0.6863\nv 0.024641 0.081065 0.107181\nvn 0.6607 0.304 0.6863\nv 0.021534 0.093877 0.093733\nvn 0.54 0.8228 0.1772\nv 0.021887 0.094223 0.091055\nvn 0.54 0.8228 0.1772\nv 0.021093 0.094874 0.090452\nvn 0.54 0.8228 0.1772\nv 0.021534 0.093877 0.093733\nvn 0.5622 0.8076 0.1781\nv 0.022169 0.093443 0.0937\nvn 0.5622 0.8076 0.1781\nv 0.021887 0.094223 0.091055\nvn 0.5622 0.8076 0.1781\nv 0.022169 0.093443 0.0937\nvn 0.7435 0.6555 0.1326\nv 0.023125 0.092146 0.094753\nvn 0.7435 0.6555 0.1326\nv 0.022481 0.093685 0.090757\nvn 0.7435 0.6555 0.1326\nv 0.024755 0.07251 0.109469\nvn 0.6893 0.0968 0.718\nv 0.025491 0.072417 0.108775\nvn 0.6893 0.0968 0.718\nv 0.024937 0.074862 0.108977\nvn 0.6893 0.0968 0.718\nv 0.020688 0.094566 0.092575\nvn 0.4285 0.879 0.2093\nv 0.021534 0.093877 0.093733\nvn 0.4285 0.879 0.2093\nv 0.021093 0.094874 0.090452\nvn 0.4285 0.879 0.2093\nv 0.022551 0.092235 0.096705\nvn 0.6946 0.6647 0.2753\nv 0.023158 0.090226 0.100023\nvn 0.6946 0.6647 0.2753\nv 0.023139 0.091519 0.096951\nvn 0.6946 0.6647 0.2753\nv 0.022551 0.092235 0.096705\nvn 0.6742 0.68 0.2882\nv 0.022436 0.091473 0.098773\nvn 0.6742 0.68 0.2882\nv 0.023158 0.090226 0.100023\nvn 0.6742 0.68 0.2882\nv 0.022436 0.091473 0.098773\nvn 0.5562 0.7692 0.3146\nv 0.022551 0.092235 0.096705\nvn 0.5562 0.7692 0.3146\nv 0.02188 0.09267 0.096827\nvn 0.5562 0.7692 0.3146\nv 0.023158 0.090226 0.100023\nvn 0.7671 0.5931 0.2446\nv 0.023615 0.089694 0.099881\nvn 0.7671 0.5931 0.2446\nv 0.023139 0.091519 0.096951\nvn 0.7671 0.5931 0.2446\nv 0.022551 0.092235 0.096705\nvn 0.7165 0.674 0.1798\nv 0.023125 0.092146 0.094753\nvn 0.7165 0.674 0.1798\nv 0.022169 0.093443 0.0937\nvn 0.7165 0.674 0.1798\nv 0.022551 0.092235 0.096705\nvn 0.7279 0.6606 0.1838\nv 0.023139 0.091519 0.096951\nvn 0.7279 0.6606 0.1838\nv 0.023125 0.092146 0.094753\nvn 0.7279 0.6606 0.1838\nv 0.021764 0.091085 0.100262\nvn 0.4338 0.8047 0.4053\nv 0.022436 0.091473 0.098773\nvn 0.4338 0.8047 0.4053\nv 0.021333 0.092354 0.098203\nvn 0.4338 0.8047 0.4053\nv 0.020193 0.094068 0.094594\nvn 0.1728 0.9457 0.2752\nv 0.020688 0.094566 0.092575\nvn 0.1728 0.9457 0.2752\nv 0.019721 0.09507 0.09145\nvn 0.1728 0.9457 0.2752\nv 0.020636 0.091851 0.099492\nvn 0.2551 0.846 0.4681\nv 0.021764 0.091085 0.100262\nvn 0.2551 0.846 0.4681\nv 0.021333 0.092354 0.098203\nvn 0.2551 0.846 0.4681\nv 0.022552 0.090159 0.101044\nvn 0.4182 0.7672 0.4863\nv 0.021764 0.091085 0.100262\nvn 0.4182 0.7672 0.4863\nv 0.021898 0.090005 0.10185\nvn 0.4182 0.7672 0.4863\nv 0.021093 0.093494 0.095579\nvn 0.3565 0.8942 0.2709\nv 0.021534 0.093877 0.093733\nvn 0.3565 0.8942 0.2709\nv 0.020688 0.094566 0.092575\nvn 0.3565 0.8942 0.2709\nv 0.020923 0.090645 0.10136\nvn 0.2649 0.8077 0.5267\nv 0.021898 0.090005 0.10185\nvn 0.2649 0.8077 0.5267\nv 0.021764 0.091085 0.100262\nvn 0.2649 0.8077 0.5267\nv 0.023972 0.08957 0.098543\nvn 0.8987 0.429 0.0906\nv 0.023658 0.091042 0.094685\nvn 0.8987 0.429 0.0906\nv 0.023125 0.092146 0.094753\nvn 0.8987 0.429 0.0906\nv 0.02188 0.09267 0.096827\nvn 0.5567 0.793 0.2474\nv 0.022551 0.092235 0.096705\nvn 0.5586 0.7917 0.2473\nv 0.022169 0.093443 0.0937\nvn 0.5579 0.7922 0.2473\nv 0.021534 0.093877 0.093733\nvn 0.5561 0.7934 0.2475\nv 0.023972 0.08957 0.098543\nvn 0.9568 0.289 0.0325\nv 0.024328 0.088363 0.098807\nvn 0.9568 0.289 0.0325\nv 0.023658 0.091042 0.094685\nvn 0.9568 0.289 0.0325\nv 0.023139 0.091519 0.096951\nvn 0.8684 0.4783 0.1309\nv 0.023972 0.08957 0.098543\nvn 0.8684 0.4783 0.1309\nv 0.023125 0.092146 0.094753\nvn 0.8684 0.4783 0.1309\nv 0.020193 0.094068 0.094594\nvn 0.267 0.9185 0.2916\nv 0.021093 0.093494 0.095579\nvn 0.267 0.9185 0.2916\nv 0.020688 0.094566 0.092575\nvn 0.267 0.9185 0.2916\nv 0.023507 0.085301 0.105664\nvn 0.5353 0.5733 0.6203\nv 0.023146 0.087417 0.10402\nvn 0.5353 0.5733 0.6203\nv 0.022593 0.086669 0.105188\nvn 0.5353 0.5733 0.6203\nv 0.024004 0.086547 0.103809\nvn 0.722 0.4689 0.5087\nv 0.023507 0.085301 0.105664\nvn 0.722 0.4689 0.5087\nv 0.024338 0.083995 0.105689\nvn 0.722 0.4689 0.5087\nv 0.021093 0.093494 0.095579\nvn 0.4428 0.8509 0.2826\nv 0.02188 0.09267 0.096827\nvn 0.4428 0.8509 0.2826\nv 0.021534 0.093877 0.093733\nvn 0.4428 0.8509 0.2826\nv 0.020359 0.093123 0.097008\nvn 0.2073 0.9156 0.3445\nv 0.021093 0.093494 0.095579\nvn 0.2073 0.9156 0.3445\nv 0.020193 0.094068 0.094594\nvn 0.2073 0.9156 0.3445\nv 0.023694 0.082991 0.107099\nvn 0.5167 0.4818 0.7078\nv 0.023507 0.085301 0.105664\nvn 0.5167 0.4818 0.7078\nv 0.022831 0.084674 0.106585\nvn 0.5167 0.4818 0.7078\nv 0.024338 0.083995 0.105689\nvn 0.7128 0.3754 0.5925\nv 0.023694 0.082991 0.107099\nvn 0.7128 0.3754 0.5925\nv 0.024641 0.081065 0.107181\nvn 0.7128 0.3754 0.5925\nv 0.021333 0.092354 0.098203\nvn 0.3628 0.8664 0.3432\nv 0.02188 0.09267 0.096827\nvn 0.3628 0.8664 0.3432\nv 0.021093 0.093494 0.095579\nvn 0.3628 0.8664 0.3432\nv 0.023615 0.089694 0.099881\nvn 0.8437 0.5064 0.1782\nv 0.023972 0.08957 0.098543\nvn 0.8437 0.5064 0.1782\nv 0.023139 0.091519 0.096951\nvn 0.8437 0.5064 0.1782\nv 0.025058 0.07865 0.107734\nvn 0.7192 0.2243 0.6576\nv 0.024381 0.078915 0.108383\nvn 0.7192 0.2243 0.6576\nv 0.024673 0.07662 0.108847\nvn 0.7192 0.2243 0.6576\nv 0.020359 0.093123 0.097008\nvn 0.258 0.8945 0.3651\nv 0.021333 0.092354 0.098203\nvn 0.258 0.8945 0.3651\nv 0.021093 0.093494 0.095579\nvn 0.258 0.8945 0.3651\nv 0.023514 0.078148 0.109225\nvn 0.5639 0.2318 0.7926\nv 0.024673 0.07662 0.108847\nvn 0.5639 0.2318 0.7926\nv 0.024381 0.078915 0.108383\nvn 0.5639 0.2318 0.7926\nv 0.024673 0.07662 0.108847\nvn 0.7741 0.1853 0.6054\nv 0.025415 0.075171 0.108342\nvn 0.7741 0.1853 0.6054\nv 0.025058 0.07865 0.107734\nvn 0.7741 0.1853 0.6054\nv 0.024937 0.074862 0.108977\nvn 0.7497 0.16 0.6421\nv 0.025415 0.075171 0.108342\nvn 0.7497 0.16 0.6421\nv 0.024673 0.07662 0.108847\nvn 0.7497 0.16 0.6421\nv 0.024937 0.074862 0.108977\nvn 0.7641 0.1207 0.6338\nv 0.025491 0.072417 0.108775\nvn 0.7641 0.1207 0.6338\nv 0.025415 0.075171 0.108342\nvn 0.7641 0.1207 0.6338\nv 0.024152 0.074952 0.109544\nvn 0.59 0.1474 0.7938\nv 0.024937 0.074862 0.108977\nvn 0.59 0.1474 0.7938\nv 0.024673 0.07662 0.108847\nvn 0.59 0.1474 0.7938\nv 0.024755 0.07251 0.109469\nvn 0.5901 0.1212 0.7982\nv 0.024937 0.074862 0.108977\nvn 0.5901 0.1212 0.7982\nv 0.024152 0.074952 0.109544\nvn 0.5901 0.1212 0.7982\nv 0.023966 0.088344 0.101399\nvn 0.875 0.4442 0.1924\nv 0.023972 0.08957 0.098543\nvn 0.875 0.4442 0.1924\nv 0.023615 0.089694 0.099881\nvn 0.875 0.4442 0.1924\nv 0.024539 0.086825 0.101688\nvn 0.9498 0.2996 0.0902\nv 0.024328 0.088363 0.098807\nvn 0.9498 0.2996 0.0902\nv 0.023972 0.08957 0.098543\nvn 0.9498 0.2996 0.0902\nv 0.021333 0.092354 0.098203\nvn 0.4572 0.8098 0.3678\nv 0.022436 0.091473 0.098773\nvn 0.4572 0.8098 0.3678\nv 0.02188 0.09267 0.096827\nvn 0.4572 0.8098 0.3678\nv 0.022552 0.090159 0.101044\nvn 0.5738 0.7214 0.3877\nv 0.023158 0.090226 0.100023\nvn 0.5738 0.7214 0.3877\nv 0.022436 0.091473 0.098773\nvn 0.5738 0.7214 0.3877\nv 0.022552 0.090159 0.101044\nvn 0.4854 0.7674 0.4188\nv 0.022436 0.091473 0.098773\nvn 0.4854 0.7674 0.4188\nv 0.021764 0.091085 0.100262\nvn 0.4854 0.7674 0.4188\nv 0.023966 0.088344 0.101399\nvn 0.9126 0.375 0.1628\nv 0.024539 0.086825 0.101688\nvn 0.9126 0.375 0.1628\nv 0.023972 0.08957 0.098543\nvn 0.9126 0.375 0.1628\nv 0.022831 0.084674 0.106585\nvn 0.452 0.5469 0.7047\nv 0.023507 0.085301 0.105664\nvn 0.452 0.5469 0.7047\nv 0.022593 0.086669 0.105188\nvn 0.452 0.5469 0.7047\nv 0.023712 0.080999 0.108105\nvn 0.422 0.4114 0.8079\nv 0.023694 0.082991 0.107099\nvn 0.422 0.4114 0.8079\nv 0.022424 0.083265 0.107624\nvn 0.422 0.4114 0.8079\nv 0.024539 0.086825 0.101688\nvn 0.9811 0.1911 0.03\nv 0.025118 0.083484 0.104041\nvn 0.9811 0.1911 0.03\nv 0.024328 0.088363 0.098807\nvn 0.9811 0.1911 0.03\nv 0.023966 0.088344 0.101399\nvn 0.7586 0.5641 0.3259\nv 0.023615 0.089694 0.099881\nvn 0.7586 0.5641 0.3259\nv 0.023158 0.090226 0.100023\nvn 0.7586 0.5641 0.3259\nv 0.020923 0.090645 0.10136\nvn 0.2222 0.8342 0.5047\nv 0.021764 0.091085 0.100262\nvn 0.2222 0.8342 0.5047\nv 0.020636 0.091851 0.099492\nvn 0.2222 0.8342 0.5047\nv 0.024152 0.074952 0.109544\nvn 0.5182 0.1868 0.8346\nv 0.024673 0.07662 0.108847\nvn 0.5182 0.1868 0.8346\nv 0.023514 0.078148 0.109225\nvn 0.5182 0.1868 0.8346\nv 0.024152 0.074952 0.109544\nvn 0.4413 0.176 0.8799\nv 0.023514 0.078148 0.109225\nvn 0.4413 0.176 0.8799\nv 0.023246 0.076474 0.109694\nvn 0.4413 0.176 0.8799\nv 0.023284 0.088471 0.102585\nvn 0.7326 0.5778 0.3598\nv 0.023966 0.088344 0.101399\nvn 0.7326 0.5778 0.3598\nv 0.023158 0.090226 0.100023\nvn 0.7326 0.5778 0.3598\nv 0.024536 0.085792 0.103476\nvn 0.8978 0.3806 0.2217\nv 0.024539 0.086825 0.101688\nvn 0.8978 0.3806 0.2217\nv 0.023966 0.088344 0.101399\nvn 0.8978 0.3806 0.2217\nv 0.024053 0.072391 0.10989\nvn 0.4996 0.0969 0.8608\nv 0.024755 0.07251 0.109469\nvn 0.4996 0.0969 0.8608\nv 0.024152 0.074952 0.109544\nvn 0.4996 0.0969 0.8608\nv 0.024053 0.072391 0.10989\nvn 0.3956 0.1079 0.9121\nv 0.024152 0.074952 0.109544\nvn 0.3956 0.1079 0.9121\nv 0.02338 0.072932 0.110117\nvn 0.3956 0.1079 0.9121\nv 0.0223 0.088908 0.103044\nvn 0.5347 0.6843 0.4957\nv 0.023284 0.088471 0.102585\nvn 0.5347 0.6843 0.4957\nv 0.022552 0.090159 0.101044\nvn 0.5347 0.6843 0.4957\nv 0.024004 0.086547 0.103809\nvn 0.8357 0.4466 0.3198\nv 0.024536 0.085792 0.103476\nvn 0.8357 0.4466 0.3198\nv 0.023966 0.088344 0.101399\nvn 0.8357 0.4466 0.3198\nv 0.0223 0.088908 0.103044\nvn 0.4597 0.7256 0.5121\nv 0.022552 0.090159 0.101044\nvn 0.4597 0.7256 0.5121\nv 0.021898 0.090005 0.10185\nvn 0.4597 0.7256 0.5121\nv 0.024536 0.085792 0.103476\nvn 0.9465 0.2787 0.1629\nv 0.025118 0.083484 0.104041\nvn 0.9465 0.2787 0.1629\nv 0.024539 0.086825 0.101688\nvn 0.9465 0.2787 0.1629\nv 0.023284 0.088471 0.102585\nvn 0.7598 0.5269 0.3809\nv 0.024004 0.086547 0.103809\nvn 0.7598 0.5269 0.3809\nv 0.023966 0.088344 0.101399\nvn 0.7598 0.5269 0.3809\nv 0.022831 0.084674 0.106585\nvn 0.3486 0.5649 0.7479\nv 0.022593 0.086669 0.105188\nvn 0.3486 0.5649 0.7479\nv 0.022056 0.08533 0.10645\nvn 0.3486 0.5649 0.7479\nv 0.022424 0.083265 0.107624\nvn 0.4216 0.4562 0.7836\nv 0.023694 0.082991 0.107099\nvn 0.4216 0.4562 0.7836\nv 0.022831 0.084674 0.106585\nvn 0.4216 0.4562 0.7836\nv 0.022888 0.081021 0.108501\nvn 0.4054 0.4045 0.8198\nv 0.023712 0.080999 0.108105\nvn 0.4054 0.4045 0.8198\nv 0.022424 0.083265 0.107624\nvn 0.4054 0.4045 0.8198\nv 0.021094 0.08937 0.102998\nvn 0.2657 0.7526 0.6025\nv 0.0223 0.088908 0.103044\nvn 0.2657 0.7526 0.6025\nv 0.021898 0.090005 0.10185\nvn 0.2657 0.7526 0.6025\nv 0.023146 0.087417 0.10402\nvn 0.5381 0.6536 0.5322\nv 0.023284 0.088471 0.102585\nvn 0.5381 0.6536 0.5322\nv 0.0223 0.088908 0.103044\nvn 0.5381 0.6536 0.5322\nv 0.023146 0.087417 0.10402\nvn 0.681 0.5572 0.475\nv 0.024004 0.086547 0.103809\nvn 0.681 0.5572 0.475\nv 0.023284 0.088471 0.102585\nvn 0.681 0.5572 0.475\nv 0.02338 0.072932 0.110117\nvn 0.3617 0.1242 0.924\nv 0.024152 0.074952 0.109544\nvn 0.3617 0.1242 0.924\nv 0.023246 0.076474 0.109694\nvn 0.3617 0.1242 0.924\nv 0.021731 0.087887 0.10442\nvn 0.2532 0.7239 0.6417\nv 0.0223 0.088908 0.103044\nvn 0.2532 0.7239 0.6417\nv 0.021094 0.08937 0.102998\nvn 0.2532 0.7239 0.6417\nv 0.021333 0.092354 0.098203\nvn 0.1651 0.8853 0.4348\nv 0.020359 0.093123 0.097008\nvn 0.1651 0.8853 0.4348\nv 0.020636 0.091851 0.099492\nvn 0.1651 0.8853 0.4348\nv 0.022593 0.086669 0.105188\nvn 0.4324 0.6526 0.6223\nv 0.023146 0.087417 0.10402\nvn 0.4324 0.6526 0.6223\nv 0.0223 0.088908 0.103044\nvn 0.4324 0.6526 0.6223\nv 0.021898 0.090005 0.10185\nvn 0.2182 0.7811 0.585\nv 0.020923 0.090645 0.10136\nvn 0.2182 0.7811 0.585\nv 0.021094 0.08937 0.102998\nvn 0.2182 0.7811 0.585\nv 0.021731 0.087887 0.10442\nvn 0.273 0.644 0.7146\nv 0.021631 0.086561 0.105653\nvn 0.273 0.644 0.7146\nv 0.022593 0.086669 0.105188\nvn 0.273 0.644 0.7146\nv 0.024338 0.083995 0.105689\nvn 0.8233 0.4023 0.4003\nv 0.024536 0.085792 0.103476\nvn 0.8233 0.4023 0.4003\nv 0.024004 0.086547 0.103809\nvn 0.8233 0.4023 0.4003\nv 0.022056 0.08533 0.10645\nvn 0.2971 0.589 0.7516\nv 0.022593 0.086669 0.105188\nvn 0.2971 0.589 0.7516\nv 0.021631 0.086561 0.105653\nvn 0.2971 0.589 0.7516\nv 0.022424 0.083265 0.107624\nvn 0.2928 0.5114 0.808\nv 0.022831 0.084674 0.106585\nvn 0.2928 0.5114 0.808\nv 0.022056 0.08533 0.10645\nvn 0.2928 0.5114 0.808\nv 0.021731 0.087887 0.10442\nvn 0.367 0.668 0.6473\nv 0.022593 0.086669 0.105188\nvn 0.367 0.668 0.6473\nv 0.0223 0.088908 0.103044\nvn 0.367 0.668 0.6473\nv 0.022888 0.081021 0.108501\nvn 0.2359 0.3959 0.8875\nv 0.022424 0.083265 0.107624\nvn 0.2359 0.3959 0.8875\nv 0.021881 0.081979 0.108341\nvn 0.2359 0.3959 0.8875\nv 0.022888 0.081021 0.108501\nvn 0.1657 0.3292 0.9296\nv 0.021881 0.081979 0.108341\nvn 0.1657 0.3292 0.9296\nv 0.022227 0.078862 0.109384\nvn 0.1657 0.3292 0.9296\nv 0.020947 0.088134 0.104326\nvn 0.1441 0.7163 0.6827\nv 0.021731 0.087887 0.10442\nvn 0.1441 0.7163 0.6827\nv 0.021094 0.08937 0.102998\nvn 0.1441 0.7163 0.6827\nv 0.023246 0.076474 0.109694\nvn 0.2417 0.2257 0.9437\nv 0.023514 0.078148 0.109225\nvn 0.2417 0.2257 0.9437\nv 0.022227 0.078862 0.109384\nvn 0.2417 0.2257 0.9437\nv 0.02338 0.072932 0.110117\nvn 0.2625 0.1244 0.9569\nv 0.023246 0.076474 0.109694\nvn 0.2625 0.1244 0.9569\nv 0.0226 0.07531 0.110022\nvn 0.2625 0.1244 0.9569\nv 0.024338 0.083995 0.105689\nvn 0.868 0.3446 0.3575\nv 0.024987 0.082169 0.105871\nvn 0.868 0.3446 0.3575\nv 0.024536 0.085792 0.103476\nvn 0.868 0.3446 0.3575\nv 0.024987 0.082169 0.105871\nvn 0.9124 0.2988 0.2798\nv 0.025118 0.083484 0.104041\nvn 0.9124 0.2988 0.2798\nv 0.024536 0.085792 0.103476\nvn 0.9124 0.2988 0.2798\nv 0.021093 0.094874 0.090452\nvn 0.5474 0.8282 0.12\nv 0.021596 0.094998 0.087299\nvn 0.5474 0.8282 0.12\nv 0.020792 0.095736 0.08587\nvn 0.5474 0.8282 0.12\nv 0.021631 0.086561 0.105653\nvn 0.1239 0.6708 0.7312\nv 0.021731 0.087887 0.10442\nvn 0.1239 0.6708 0.7312\nv 0.020947 0.088134 0.104326\nvn 0.1239 0.6708 0.7312\nv 0.024987 0.082169 0.105871\nvn 0.9443 0.2317 0.2339\nv 0.025505 0.080577 0.105361\nvn 0.9443 0.2317 0.2339\nv 0.025118 0.083484 0.104041\nvn 0.9443 0.2317 0.2339\nv 0.022654 0.072295 0.110249\nvn 0.1125 0.0765 0.9907\nv 0.02338 0.072932 0.110117\nvn 0.1125 0.0765 0.9907\nv 0.0226 0.07531 0.110022\nvn 0.1125 0.0765 0.9907\nv 0.024641 0.081065 0.107181\nvn 0.8021 0.3348 0.4945\nv 0.024987 0.082169 0.105871\nvn 0.8021 0.3348 0.4945\nv 0.024338 0.083995 0.105689\nvn 0.8021 0.3348 0.4945\nv 0.021442 0.084419 0.107139\nvn 0.0879 0.5623 0.8222\nv 0.022056 0.08533 0.10645\nvn 0.0879 0.5623 0.8222\nv 0.021631 0.086561 0.105653\nvn 0.0879 0.5623 0.8222\nv 0.021442 0.084419 0.107139\nvn 0.1848 0.5103 0.8399\nv 0.022424 0.083265 0.107624\nvn 0.1848 0.5103 0.8399\nv 0.022056 0.08533 0.10645\nvn 0.1848 0.5103 0.8399\nv 0.025545 0.078202 0.107012\nvn 0.9351 0.2129 0.2833\nv 0.025505 0.080577 0.105361\nvn 0.9351 0.2129 0.2833\nv 0.024987 0.082169 0.105871\nvn 0.9351 0.2129 0.2833\nv 0.025058 0.07865 0.107734\nvn 0.8642 0.2487 0.4373\nv 0.025545 0.078202 0.107012\nvn 0.8674 0.2462 0.4325\nv 0.024987 0.082169 0.105871\nvn 0.8669 0.2466 0.4333\nv 0.024641 0.081065 0.107181\nvn 0.8632 0.2495 0.4388\nv 0.025545 0.078202 0.107012\nvn 0.9677 0.1549 0.199\nv 0.026006 0.076112 0.106395\nvn 0.9677 0.1549 0.199\nv 0.025505 0.080577 0.105361\nvn 0.9677 0.1549 0.199\nv 0.021881 0.081979 0.108341\nvn 0.0958 0.454 0.8858\nv 0.022424 0.083265 0.107624\nvn 0.0958 0.454 0.8858\nv 0.021442 0.084419 0.107139\nvn 0.0958 0.454 0.8858\nv 0.024381 0.078915 0.108383\nvn 0.7198 0.2706 0.6393\nv 0.025058 0.07865 0.107734\nvn 0.7198 0.2706 0.6393\nv 0.024641 0.081065 0.107181\nvn 0.7198 0.2706 0.6393\nv 0.023514 0.078148 0.109225\nvn 0.5311 0.2776 0.8005\nv 0.024381 0.078915 0.108383\nvn 0.5311 0.2776 0.8005\nv 0.023712 0.080999 0.108105\nvn 0.5311 0.2776 0.8005\nv 0.025865 0.074948 0.107583\nvn 0.9585 0.1379 0.2495\nv 0.026006 0.076112 0.106395\nvn 0.9585 0.1379 0.2495\nv 0.025545 0.078202 0.107012\nvn 0.9585 0.1379 0.2495\nv 0.023514 0.078148 0.109225\nvn 0.4195 0.3066 0.8544\nv 0.023712 0.080999 0.108105\nvn 0.4195 0.3066 0.8544\nv 0.022888 0.081021 0.108501\nvn 0.4195 0.3066 0.8544\nv 0.022227 0.078862 0.109384\nvn 0.2743 0.2906 0.9167\nv 0.023514 0.078148 0.109225\nvn 0.2743 0.2906 0.9167\nv 0.022888 0.081021 0.108501\nvn 0.2743 0.2906 0.9167\nv 0.025415 0.075171 0.108342\nvn 0.8642 0.1707 0.4733\nv 0.025545 0.078202 0.107012\nvn 0.8675 0.1683 0.4681\nv 0.025058 0.07865 0.107734\nvn 0.8628 0.1717 0.4756\nv 0.025865 0.074948 0.107583\nvn 0.869 0.1671 0.4657\nv 0.020588 0.096962 0.071887\nvn 0.7152 0.6981 0.0328\nv 0.020016 0.097548 0.071886\nvn 0.7152 0.6981 0.0328\nv 0.020594 0.096587 0.079726\nvn 0.7152 0.6981 0.0328\nv 0.021865 0.094935 0.078901\nvn 0.874 0.4856 -0.0188\nv 0.021073 0.09606 0.071115\nvn 0.8736 0.4862 -0.02\nv 0.020588 0.096962 0.071887\nvn 0.871 0.4905 -0.0266\nv 0.020594 0.096587 0.079726\nvn 0.4922 0.8668 0.0799\nv 0.019085 0.09816 0.071959\nvn 0.4922 0.8668 0.0799\nv 0.019637 0.097175 0.079249\nvn 0.4922 0.8668 0.0799\nv 0.019085 0.09816 0.071959\nvn 0.3043 0.9468 0.1049\nv 0.018486 0.097798 0.076956\nvn 0.3043 0.9468 0.1049\nv 0.019637 0.097175 0.079249\nvn 0.3043 0.9468 0.1049\nv 0.01772 0.098802 0.069492\nvn 0.2977 0.9511 0.0828\nv 0.019085 0.09816 0.071959\nvn 0.2977 0.9511 0.0828\nv 0.018391 0.098899 0.065959\nvn 0.2977 0.9511 0.0828\nv 0.015706 0.100121 0.049231\nvn 0.2859 0.9582 -0.0147\nv 0.016125 0.100076 0.054415\nvn 0.2859 0.9582 -0.0147\nv 0.017176 0.099765 0.054567\nvn 0.2859 0.9582 -0.0147\nv 0.019179 0.098468 0.064313\nvn 0.5494 0.8346 0.0404\nv 0.019085 0.09816 0.071959\nvn 0.5458 0.8369 0.0404\nv 0.020016 0.097548 0.071886\nvn 0.5507 0.8337 0.0403\nv 0.019179 0.098468 0.064313\nvn 0.7156 0.6985 0.0057\nv 0.020016 0.097548 0.071886\nvn 0.7156 0.6985 0.0057\nv 0.020588 0.096962 0.071887\nvn 0.7156 0.6985 0.0057\nv 0.015706 0.100121 0.049231\nvn 0.0853 0.9964 0.0018\nv 0.013379 0.100325 0.046924\nvn 0.0853 0.9964 0.0018\nv 0.016125 0.100076 0.054415\nvn 0.0853 0.9964 0.0018\nv 0.010813 0.100249 0.045054\nvn 0.0583 0.991 -0.1203\nv 0.008263 0.100437 0.045369\nvn 0.0583 0.991 -0.1203\nv 0.013379 0.100325 0.046924\nvn 0.0583 0.991 -0.1203\nv 0.018391 0.098899 0.065959\nvn 0.2396 0.9682 0.0723\nv 0.016884 0.099535 0.062447\nvn 0.2396 0.9682 0.0723\nv 0.01772 0.098802 0.069492\nvn 0.2396 0.9682 0.0723\nv 0.019179 0.098468 0.064313\nvn 0.7377 0.6751 -0.0031\nv 0.020588 0.096962 0.071887\nvn 0.7377 0.6751 -0.0031\nv 0.01948 0.098127 0.061907\nvn 0.7377 0.6751 -0.0031\nv 0.01918 0.096576 0.084147\nvn 0.094 0.9764 0.1944\nv 0.019721 0.09507 0.09145\nvn 0.094 0.9764 0.1944\nv 0.020073 0.095652 0.088354\nvn 0.094 0.9764 0.1944\nv 0.018391 0.098899 0.065959\nvn 0.5152 0.8568 0.0217\nv 0.019179 0.098468 0.064313\nvn 0.5152 0.8568 0.0217\nv 0.017735 0.099449 0.05983\nvn 0.5152 0.8568 0.0217\nv 0.018391 0.098899 0.065959\nvn 0.2717 0.9607 0.0571\nv 0.017735 0.099449 0.05983\nvn 0.2717 0.9607 0.0571\nv 0.016884 0.099535 0.062447\nvn 0.2717 0.9607 0.0571\nv 0.019661 0.09719 0.056272\nvn 0.9284 0.3667 -0.0604\nv 0.020245 0.097198 0.065292\nvn 0.9284 0.3667 -0.0604\nv 0.021073 0.09606 0.071115\nvn 0.9284 0.3667 -0.0604\nv 0.018177 0.099231 0.056792\nvn 0.5283 0.8489 0.0158\nv 0.017735 0.099449 0.05983\nvn 0.5283 0.8489 0.0158\nv 0.019179 0.098468 0.064313\nvn 0.5283 0.8489 0.0158\nv 0.01948 0.098127 0.061907\nvn 0.6848 0.7285 -0.0172\nv 0.018462 0.098907 0.054407\nvn 0.6846 0.7287 -0.0172\nv 0.019179 0.098468 0.064313\nvn 0.6847 0.7286 -0.0172\nv 0.019661 0.09719 0.056272\nvn 0.9017 0.4285 -0.0587\nv 0.019202 0.098046 0.055464\nvn 0.9017 0.4285 -0.0587\nv 0.020245 0.097198 0.065292\nvn 0.9017 0.4285 -0.0587\nv 0.019202 0.098046 0.055464\nvn 0.7825 0.6212 -0.0417\nv 0.018462 0.098907 0.054407\nvn 0.7825 0.6212 -0.0417\nv 0.01948 0.098127 0.061907\nvn 0.7825 0.6212 -0.0417\nv 0.018177 0.099231 0.056792\nvn 0.6846 0.7287 -0.0172\nv 0.012959 0.099759 0.044884\nvn 0.2603 0.8791 -0.3992\nv 0.013844 0.100037 0.046075\nvn 0.2603 0.8791 -0.3992\nv 0.014357 0.099647 0.045549\nvn 0.2603 0.8791 -0.3992\nv 0.012959 0.099759 0.044884\nvn 0.1819 0.9189 -0.3502\nv 0.010813 0.100249 0.045054\nvn 0.1819 0.9189 -0.3502\nv 0.013844 0.100037 0.046075\nvn 0.1819 0.9189 -0.3502\nv 0.01085 0.099797 0.04409\nvn 0.1714 0.8948 -0.4123\nv 0.010813 0.100249 0.045054\nvn 0.1714 0.8948 -0.4123\nv 0.012959 0.099759 0.044884\nvn 0.1714 0.8948 -0.4123\nv 0.018177 0.099231 0.056792\nvn 0.5243 0.8509 -0.0319\nv 0.017135 0.099669 0.051346\nvn 0.5243 0.8509 -0.0319\nv 0.017176 0.099765 0.054567\nvn 0.5243 0.8509 -0.0319\nv 0.017135 0.099669 0.051346\nvn 0.5708 0.82 -0.0432\nv 0.018177 0.099231 0.056792\nvn 0.5708 0.82 -0.0432\nv 0.018462 0.098907 0.054407\nvn 0.5708 0.82 -0.0432\nv 0.005185 0.100305 0.04416\nvn 0.0679 0.9271 -0.3686\nv 0.010813 0.100249 0.045054\nvn 0.0679 0.9271 -0.3686\nv 0.006979 0.099901 0.043473\nvn 0.0679 0.9271 -0.3686\nv 0.019202 0.098046 0.055464\nvn 0.8071 0.5836 -0.0895\nv 0.018637 0.098289 0.051957\nvn 0.8071 0.5836 -0.0895\nv 0.018462 0.098907 0.054407\nvn 0.8071 0.5836 -0.0895\nv 0.019661 0.09719 0.056272\nvn 0.912 0.3986 -0.0962\nv 0.019191 0.097518 0.053169\nvn 0.912 0.3986 -0.0962\nv 0.019202 0.098046 0.055464\nvn 0.912 0.3986 -0.0962\nv 0.017176 0.099765 0.054567\nvn 0.3444 0.9383 -0.0322\nv 0.017135 0.099669 0.051346\nvn 0.3444 0.9383 -0.0322\nv 0.015706 0.100121 0.049231\nvn 0.3444 0.9383 -0.0322\nv 0.018637 0.098289 0.051957\nvn 0.8812 0.4597 -0.1101\nv 0.019202 0.098046 0.055464\nvn 0.8812 0.4597 -0.1101\nv 0.019191 0.097518 0.053169\nvn 0.8812 0.4597 -0.1101\nv 0.021663 0.095344 0.081474\nvn 0.7671 0.6399 0.0467\nv 0.021596 0.094998 0.087299\nvn 0.7671 0.6399 0.0467\nv 0.022481 0.093685 0.090757\nvn 0.7671 0.6399 0.0467\nv 0.018637 0.098289 0.051957\nvn 0.7672 0.6232 -0.152\nv 0.018069 0.098343 0.049311\nvn 0.7672 0.6232 -0.152\nv 0.017538 0.09919 0.050104\nvn 0.7672 0.6232 -0.152\nv 0.018069 0.098343 0.049311\nvn 0.8762 0.4475 -0.1789\nv 0.018637 0.098289 0.051957\nvn 0.8762 0.4475 -0.1789\nv 0.018653 0.097527 0.050128\nvn 0.8762 0.4475 -0.1789\nv 0.0159 0.099232 0.046343\nvn 0.6413 0.6678 -0.3778\nv 0.01697 0.0991 0.047926\nvn 0.6413 0.6678 -0.3778\nv 0.016963 0.098517 0.046884\nvn 0.6413 0.6678 -0.3778\nv 0.020073 0.095652 0.088354\nvn 0.3944 0.9074 0.1449\nv 0.021093 0.094874 0.090452\nvn 0.3944 0.9074 0.1449\nv 0.020792 0.095736 0.08587\nvn 0.3944 0.9074 0.1449\nv 0.022992 0.092815 0.088854\nvn 0.8997 0.4363 -0.0125\nv 0.021663 0.095344 0.081474\nvn 0.8997 0.4363 -0.0125\nv 0.022777 0.093296 0.090202\nvn 0.8997 0.4363 -0.0125\nv 0.020792 0.095736 0.08587\nvn 0.364 0.9213 0.1366\nv 0.019637 0.097175 0.079249\nvn 0.364 0.9213 0.1366\nv 0.020073 0.095652 0.088354\nvn 0.364 0.9213 0.1366\nv 0.020594 0.096587 0.079726\nvn 0.5782 0.8105 0.0935\nv 0.020792 0.095736 0.08587\nvn 0.5782 0.8105 0.0935\nv 0.021596 0.094998 0.087299\nvn 0.5782 0.8105 0.0935\nv 0.018486 0.097798 0.076956\nvn 0.2419 0.9602 0.1399\nv 0.01918 0.096576 0.084147\nvn 0.2419 0.9602 0.1399\nv 0.019637 0.097175 0.079249\nvn 0.2419 0.9602 0.1399\nv 0.01772 0.098802 0.069492\nvn 0.2676 0.9582 0.1013\nv 0.018486 0.097798 0.076956\nvn 0.2676 0.9582 0.1013\nv 0.019085 0.09816 0.071959\nvn 0.2676 0.9582 0.1013\nv 0.020594 0.096587 0.079726\nvn 0.5513 0.8321 0.0614\nv 0.020016 0.097548 0.071886\nvn 0.5513 0.8321 0.0614\nv 0.019085 0.09816 0.071959\nvn 0.5513 0.8321 0.0614\nv 0.020245 0.097198 0.065292\nvn 0.8705 0.4914 -0.0278\nv 0.018391 0.098899 0.065959\nvn 0.544 0.8381 0.0404\nv 0.020245 0.097198 0.065292\nvn 0.8084 0.5882 -0.0211\nv 0.01948 0.098127 0.061907\nvn 0.8084 0.5882 -0.0211\nv 0.020588 0.096962 0.071887\nvn 0.8084 0.5882 -0.0211\nv 0.017735 0.099449 0.05983\nvn 0.2313 0.9719 0.0436\nv 0.016125 0.100076 0.054415\nvn 0.2313 0.9719 0.0436\nv 0.016884 0.099535 0.062447\nvn 0.2313 0.9719 0.0436\nv 0.01948 0.098127 0.061907\nvn 0.8431 0.536 -0.0432\nv 0.020245 0.097198 0.065292\nvn 0.8431 0.536 -0.0432\nv 0.019202 0.098046 0.055464\nvn 0.8431 0.536 -0.0432\nv 0.017176 0.099765 0.054567\nvn 0.2802 0.9596 0.0277\nv 0.016125 0.100076 0.054415\nvn 0.2802 0.9596 0.0277\nv 0.017735 0.099449 0.05983\nvn 0.2802 0.9596 0.0277\nv 0.017176 0.099765 0.054567\nvn 0.4638 0.8859 0.0038\nv 0.017735 0.099449 0.05983\nvn 0.4638 0.8859 0.0038\nv 0.018177 0.099231 0.056792\nvn 0.4638 0.8859 0.0038\nv 0.017538 0.09919 0.050104\nvn 0.6396 0.7637 -0.0871\nv 0.017135 0.099669 0.051346\nvn 0.6396 0.7637 -0.0871\nv 0.018462 0.098907 0.054407\nvn 0.6396 0.7637 -0.0871\nv 0.017538 0.09919 0.050104\nvn 0.7384 0.6645 -0.1148\nv 0.018462 0.098907 0.054407\nvn 0.7384 0.6645 -0.1148\nv 0.018637 0.098289 0.051957\nvn 0.7384 0.6645 -0.1148\nv 0.018637 0.098289 0.051957\nvn 0.903 0.3993 -0.1585\nv 0.019191 0.097518 0.053169\nvn 0.903 0.3993 -0.1585\nv 0.018653 0.097527 0.050128\nvn 0.903 0.3993 -0.1585\nv 0.015706 0.100121 0.049231\nvn 0.4621 0.878 -0.1246\nv 0.017135 0.099669 0.051346\nvn 0.4621 0.878 -0.1246\nv 0.016417 0.099586 0.048099\nvn 0.4621 0.878 -0.1246\nv 0.016417 0.099586 0.048099\nvn 0.5455 0.8261 -0.1417\nv 0.017135 0.099669 0.051346\nvn 0.5455 0.8261 -0.1417\nv 0.017538 0.09919 0.050104\nvn 0.5455 0.8261 -0.1417\nv 0.015706 0.100121 0.049231\nvn 0.4048 0.8984 -0.1703\nv 0.016417 0.099586 0.048099\nvn 0.4048 0.8984 -0.1703\nv 0.015167 0.099981 0.047213\nvn 0.4048 0.8984 -0.1703\nv 0.01697 0.0991 0.047926\nvn 0.7235 0.6557 -0.2159\nv 0.017538 0.09919 0.050104\nvn 0.7235 0.6557 -0.2159\nv 0.018069 0.098343 0.049311\nvn 0.7235 0.6557 -0.2159\nv 0.01697 0.0991 0.047926\nvn 0.6137 0.7659 -0.1918\nv 0.016417 0.099586 0.048099\nvn 0.6137 0.7659 -0.1918\nv 0.017538 0.09919 0.050104\nvn 0.6137 0.7659 -0.1918\nv 0.015167 0.099981 0.047213\nvn 0.2063 0.9708 -0.1224\nv 0.013379 0.100325 0.046924\nvn 0.2063 0.9708 -0.1224\nv 0.015706 0.100121 0.049231\nvn 0.2063 0.9708 -0.1224\nv 0.01697 0.0991 0.047926\nvn 0.759 0.5872 -0.2814\nv 0.018069 0.098343 0.049311\nvn 0.759 0.5872 -0.2814\nv 0.017619 0.098187 0.047772\nvn 0.759 0.5872 -0.2814\nv 0.013379 0.100325 0.046924\nvn 0.2164 0.9547 -0.2044\nv 0.015167 0.099981 0.047213\nvn 0.2164 0.9547 -0.2044\nv 0.013844 0.100037 0.046075\nvn 0.2164 0.9547 -0.2044\nv 0.0159 0.099232 0.046343\nvn 0.5673 0.7587 -0.3201\nv 0.016417 0.099586 0.048099\nvn 0.5673 0.7587 -0.3201\nv 0.01697 0.0991 0.047926\nvn 0.5673 0.7587 -0.3201\nv 0.015167 0.099981 0.047213\nvn 0.4777 0.8232 -0.3067\nv 0.016417 0.099586 0.048099\nvn 0.4777 0.8232 -0.3067\nv 0.0159 0.099232 0.046343\nvn 0.4777 0.8232 -0.3067\nv 0.01697 0.0991 0.047926\nvn 0.7417 0.5833 -0.3311\nv 0.017619 0.098187 0.047772\nvn 0.7417 0.5833 -0.3311\nv 0.016963 0.098517 0.046884\nvn 0.7417 0.5833 -0.3311\nv 0.014357 0.099647 0.045549\nvn 0.3272 0.8829 -0.3368\nv 0.013844 0.100037 0.046075\nvn 0.3272 0.8829 -0.3368\nv 0.015167 0.099981 0.047213\nvn 0.3272 0.8829 -0.3368\nv 0.013379 0.100325 0.046924\nvn 0.1485 0.9586 -0.2429\nv 0.013844 0.100037 0.046075\nvn 0.1485 0.9586 -0.2429\nv 0.010813 0.100249 0.045054\nvn 0.1485 0.9586 -0.2429\nv 0.014357 0.099647 0.045549\nvn 0.4136 0.8325 -0.3687\nv 0.015167 0.099981 0.047213\nvn 0.4136 0.8325 -0.3687\nv 0.0159 0.099232 0.046343\nvn 0.4136 0.8325 -0.3687\nv 0.006979 0.099901 0.043473\nvn 0.0911 0.9032 -0.4194\nv 0.010813 0.100249 0.045054\nvn 0.0911 0.9032 -0.4194\nv 0.01085 0.099797 0.04409\nvn 0.0911 0.9032 -0.4194\nv 0.005185 0.100305 0.04416\nvn 0.0448 0.9745 -0.2199\nv 0.008263 0.100437 0.045369\nvn 0.0448 0.9745 -0.2199\nv 0.010813 0.100249 0.045054\nvn 0.0448 0.9745 -0.2199\nv 0.005185 0.100305 0.04416\nvn 0.0307 0.9823 -0.1849\nv 7.03719e-18 0.10057 0.044704\nvn 0.0307 0.9823 -0.1849\nv 0.008263 0.100437 0.045369\nvn 0.0307 0.9823 -0.1849\nv 0.006979 0.099901 0.043473\nvn 0.0327 0.8962 -0.4425\nv 7.1899e-18 0.100148 0.043457\nvn 0.0327 0.8962 -0.4425\nv 0.005185 0.100305 0.04416\nvn 0.0327 0.8962 -0.4425\nv 7.1899e-18 0.100148 0.043457\nvn 0.0147 0.9471 -0.3207\nv 7.03719e-18 0.10057 0.044704\nvn 0.0147 0.9471 -0.3207\nv 0.005185 0.100305 0.04416\nvn 0.0147 0.9471 -0.3207\nv 0.022481 0.093685 0.090757\nvn 0.8162 0.577 0.0312\nv 0.022777 0.093296 0.090202\nvn 0.8162 0.577 0.0312\nv 0.021663 0.095344 0.081474\nvn 0.8162 0.577 0.0312\nv 0.019637 0.097175 0.079249\nvn 0.3006 0.9429 0.1432\nv 0.01918 0.096576 0.084147\nvn 0.3006 0.9429 0.1432\nv 0.020073 0.095652 0.088354\nvn 0.3006 0.9429 0.1432\nv 0.020594 0.096587 0.079726\nvn 0.4817 0.87 0.1049\nv 0.019637 0.097175 0.079249\nvn 0.4817 0.87 0.1049\nv 0.020792 0.095736 0.08587\nvn 0.4817 0.87 0.1049\nv 0.021865 0.094935 0.078901\nvn 0.8887 0.4584 -0.003\nv 0.021663 0.095344 0.081474\nvn 0.8887 0.4584 -0.003\nv 0.022992 0.092815 0.088854\nvn 0.8887 0.4584 -0.003\nv 0.021663 0.095344 0.081474\nvn 0.7221 0.69 0.0492\nv 0.020594 0.096587 0.079726\nvn 0.7221 0.69 0.0492\nv 0.021596 0.094998 0.087299\nvn 0.7221 0.69 0.0492\nv 0.021865 0.094935 0.078901\nvn 0.8642 0.503 -0.012\nv 0.020588 0.096962 0.071887\nvn 0.8642 0.503 -0.012\nv 0.021663 0.095344 0.081474\nvn 0.8642 0.503 -0.012\nv 0.020594 0.096587 0.079726\nvn 0.7354 0.6769 0.0318\nv 0.021663 0.095344 0.081474\nvn 0.7354 0.6769 0.0318\nv 0.020588 0.096962 0.071887\nvn 0.7354 0.6769 0.0318\nv 0.012874 0.092402 0.036587\nvn 0.175 0.4519 -0.8747\nv 0.012653 0.093692 0.037208\nvn 0.175 0.4519 -0.8747\nv 0.014055 0.092492 0.036869\nvn 0.175 0.4519 -0.8747\nv 0.010244 0.094074 0.037186\nvn 0.091 0.5233 -0.8473\nv 0.012653 0.093692 0.037208\nvn 0.091 0.5233 -0.8473\nv 0.010332 0.093211 0.036662\nvn 0.091 0.5233 -0.8473\nv 0.010332 0.093211 0.036662\nvn 0.116 0.4475 -0.8867\nv 0.012653 0.093692 0.037208\nvn 0.116 0.4475 -0.8867\nv 0.012874 0.092402 0.036587\nvn 0.116 0.4475 -0.8867\nv 0.010332 0.093211 0.036662\nvn 0.064 0.2904 -0.9548\nv 0.012874 0.092402 0.036587\nvn 0.064 0.2904 -0.9548\nv 0.011324 0.09213 0.0364\nvn 0.064 0.2904 -0.9548\nv 0.011324 0.09213 0.0364\nvn 0.0904 0.1599 -0.983\nv 0.012874 0.092402 0.036587\nvn 0.0904 0.1599 -0.983\nv 0.013956 0.090931 0.036447\nvn 0.0904 0.1599 -0.983\nv 0.01657 0.090888 0.038067\nvn 0.851 0.2522 -0.4606\nv 0.016401 0.091971 0.038347\nvn 0.851 0.2522 -0.4606\nv 0.017086 0.090492 0.038804\nvn 0.851 0.2522 -0.4606\nv 0.015911 0.081469 0.037215\nvn 0.4856 -0.02 -0.8739\nv 0.01505 0.082673 0.036709\nvn 0.4856 -0.02 -0.8739\nv 0.015663 0.087722 0.036934\nvn 0.4856 -0.02 -0.8739\nv 0.013956 0.090931 0.036447\nvn 0.3184 0.0649 -0.9457\nv 0.015325 0.089942 0.03684\nvn 0.3184 0.0649 -0.9457\nv 0.014712 0.088612 0.036542\nvn 0.3184 0.0649 -0.9457\nv 0.015055 0.091586 0.03696\nvn 0.4896 0.1432 -0.8601\nv 0.015894 0.090505 0.037258\nvn 0.4896 0.1432 -0.8601\nv 0.015325 0.089942 0.03684\nvn 0.4896 0.1432 -0.8601\nv 0.013956 0.090931 0.036447\nvn 0.3568 0.1261 -0.9256\nv 0.015055 0.091586 0.03696\nvn 0.3568 0.1261 -0.9256\nv 0.015325 0.089942 0.03684\nvn 0.3568 0.1261 -0.9256\nv 0.016399 0.087988 0.037475\nvn 0.7401 -0.0209 -0.6721\nv 0.016925 0.085777 0.038122\nvn 0.7401 -0.0209 -0.6721\nv 0.016388 0.081938 0.037651\nvn 0.7401 -0.0209 -0.6721\nv 0.017353 0.088368 0.038858\nvn 0.8972 -0.0349 -0.4403\nv 0.01746 0.085539 0.039299\nvn 0.8972 -0.0349 -0.4403\nv 0.017357 0.08129 0.039426\nvn 0.8972 -0.0349 -0.4403\nv 0.016401 0.091971 0.038347\nvn 0.6716 0.3997 -0.6239\nv 0.015871 0.091675 0.037588\nvn 0.6716 0.3997 -0.6239\nv 0.015417 0.092665 0.037733\nvn 0.6716 0.3997 -0.6239\nv 0.015871 0.091675 0.037588\nvn 0.5772 0.2326 -0.7828\nv 0.015894 0.090505 0.037258\nvn 0.5772 0.2326 -0.7828\nv 0.015055 0.091586 0.03696\nvn 0.5772 0.2326 -0.7828\nv 0.015417 0.092665 0.037733\nvn 0.4732 0.5305 -0.7033\nv 0.014669 0.092702 0.037258\nvn 0.4732 0.5305 -0.7033\nv 0.014653 0.093378 0.037757\nvn 0.4732 0.5305 -0.7033\nv 0.015417 0.092665 0.037733\nvn 0.5439 0.3606 -0.7577\nv 0.015871 0.091675 0.037588\nvn 0.5439 0.3606 -0.7577\nv 0.015055 0.091586 0.03696\nvn 0.5439 0.3606 -0.7577\nv 0.014669 0.092702 0.037258\nvn 0.5091 0.3821 -0.7713\nv 0.015417 0.092665 0.037733\nvn 0.5091 0.3821 -0.7713\nv 0.015055 0.091586 0.03696\nvn 0.5091 0.3821 -0.7713\nv 0.014055 0.092492 0.036869\nvn 0.3186 0.5271 -0.7878\nv 0.013696 0.09364 0.037492\nvn 0.3186 0.5271 -0.7878\nv 0.014669 0.092702 0.037258\nvn 0.3186 0.5271 -0.7878\nv 0.014055 0.092492 0.036869\nvn 0.4061 0.3643 -0.8381\nv 0.014669 0.092702 0.037258\nvn 0.4061 0.3643 -0.8381\nv 0.015055 0.091586 0.03696\nvn 0.4061 0.3643 -0.8381\nv 0.014055 0.092492 0.036869\nvn 0.2479 0.5207 -0.817\nv 0.012653 0.093692 0.037208\nvn 0.2479 0.5207 -0.817\nv 0.013696 0.09364 0.037492\nvn 0.2479 0.5207 -0.817\nv 0.017353 0.088368 0.038858\nvn 0.8884 0.1003 -0.448\nv 0.016864 0.089319 0.038102\nvn 0.8884 0.1003 -0.448\nv 0.017086 0.090492 0.038804\nvn 0.8884 0.1003 -0.448\nv 0.014712 0.088612 0.036542\nvn 0.1357 0.0035 -0.9907\nv 0.014056 0.08162 0.036428\nvn 0.1357 0.0035 -0.9907\nv 0.013956 0.090931 0.036447\nvn 0.1357 0.0035 -0.9907\nv 0.013956 0.090931 0.036447\nvn 0.2943 0.2322 -0.9271\nv 0.014055 0.092492 0.036869\nvn 0.2943 0.2322 -0.9271\nv 0.015055 0.091586 0.03696\nvn 0.2943 0.2322 -0.9271\nv 0.014055 0.092492 0.036869\nvn 0.2082 0.2432 -0.9474\nv 0.013956 0.090931 0.036447\nvn 0.2082 0.2432 -0.9474\nv 0.012874 0.092402 0.036587\nvn 0.2082 0.2432 -0.9474\nv 0.016864 0.089319 0.038102\nvn 0.8456 0.1474 -0.5131\nv 0.01657 0.090888 0.038067\nvn 0.8456 0.1474 -0.5131\nv 0.017086 0.090492 0.038804\nvn 0.8456 0.1474 -0.5131\nv 0.015663 0.087722 0.036934\nvn 0.3982 0.0217 -0.917\nv 0.014712 0.088612 0.036542\nvn 0.3982 0.0217 -0.917\nv 0.015325 0.089942 0.03684\nvn 0.3982 0.0217 -0.917\nv 0.01657 0.090888 0.038067\nvn 0.7327 0.1228 -0.6694\nv 0.016864 0.089319 0.038102\nvn 0.7327 0.1228 -0.6694\nv 0.015894 0.090505 0.037258\nvn 0.7327 0.1228 -0.6694\nv 0.011324 0.09213 0.0364\nvn 0.0207 0.2536 -0.9671\nv 8.08022e-18 0.092243 0.036187\nvn 0.0207 0.2536 -0.9671\nv 0.010332 0.093211 0.036662\nvn 0.0207 0.2536 -0.9671\nv 0.01657 0.090888 0.038067\nvn 0.7009 0.2067 -0.6826\nv 0.015894 0.090505 0.037258\nvn 0.7009 0.2067 -0.6826\nv 0.015871 0.091675 0.037588\nvn 0.7009 0.2067 -0.6826\nv 8.04005e-18 0.093406 0.036515\nvn 0.0219 0.5202 -0.8537\nv 0.010244 0.094074 0.037186\nvn 0.0219 0.5202 -0.8537\nv 0.010332 0.093211 0.036662\nvn 0.0219 0.5202 -0.8537\nv 0.015871 0.091675 0.037588\nvn 0.735 0.2753 -0.6197\nv 0.016401 0.091971 0.038347\nvn 0.735 0.2753 -0.6197\nv 0.01657 0.090888 0.038067\nvn 0.735 0.2753 -0.6197\nv 0.014669 0.092702 0.037258\nvn 0.36 0.5598 -0.7464\nv 0.013696 0.09364 0.037492\nvn 0.36 0.5598 -0.7464\nv 0.014653 0.093378 0.037757\nvn 0.36 0.5598 -0.7464\nv 0.010332 0.093211 0.036662\nvn 0.0188 0.2717 -0.9622\nv 8.08022e-18 0.092243 0.036187\nvn 0.0188 0.2717 -0.9622\nv 8.04005e-18 0.093406 0.036515\nvn 0.0188 0.2717 -0.9622\nv 0.016399 0.087988 0.037475\nvn 0.7093 0.0819 -0.7001\nv 0.015894 0.090505 0.037258\nvn 0.7093 0.0819 -0.7001\nv 0.016864 0.089319 0.038102\nvn 0.7093 0.0819 -0.7001\nv 0.01699 0.08179 0.038447\nvn 0.931 -0.0287 -0.364\nv 0.017353 0.088368 0.038858\nvn 0.931 -0.0287 -0.364\nv 0.017357 0.08129 0.039426\nvn 0.931 -0.0287 -0.364\nv 0.017353 0.088368 0.038858\nvn 0.8954 -0.0217 -0.4448\nv 0.01699 0.08179 0.038447\nvn 0.8954 -0.0217 -0.4448\nv 0.016925 0.085777 0.038122\nvn 0.8954 -0.0217 -0.4448\nv 0.01699 0.08179 0.038447\nvn 0.7944 -0.0365 -0.6063\nv 0.016388 0.081938 0.037651\nvn 0.7944 -0.0365 -0.6063\nv 0.016925 0.085777 0.038122\nvn 0.7944 -0.0365 -0.6063\nv 0.015911 0.081469 0.037215\nvn 0.6863 -0.0224 -0.727\nv 0.016399 0.087988 0.037475\nvn 0.6863 -0.0224 -0.727\nv 0.016388 0.081938 0.037651\nvn 0.6863 -0.0224 -0.727\nv 0.016399 0.087988 0.037475\nvn 0.5951 -0.0125 -0.8036\nv 0.015911 0.081469 0.037215\nvn 0.5951 -0.0125 -0.8036\nv 0.015663 0.087722 0.036934\nvn 0.5951 -0.0125 -0.8036\nv 0.017353 0.088368 0.038858\nvn 0.8463 0.0114 -0.5326\nv 0.016925 0.085777 0.038122\nvn 0.8463 0.0114 -0.5326\nv 0.016864 0.089319 0.038102\nvn 0.8463 0.0114 -0.5326\nv 0.014056 0.08162 0.036428\nvn 0.2827 -0.0108 -0.9591\nv 0.014712 0.088612 0.036542\nvn 0.2827 -0.0108 -0.9591\nv 0.01505 0.082673 0.036709\nvn 0.2827 -0.0108 -0.9591\nv 0.016399 0.087988 0.037475\nvn 0.7928 0.01 -0.6094\nv 0.016864 0.089319 0.038102\nvn 0.7928 0.01 -0.6094\nv 0.016925 0.085777 0.038122\nvn 0.7928 0.01 -0.6094\nv 0.015663 0.087722 0.036934\nvn 0.3773 -0.0045 -0.9261\nv 0.01505 0.082673 0.036709\nvn 0.3773 -0.0045 -0.9261\nv 0.014712 0.088612 0.036542\nvn 0.3773 -0.0045 -0.9261\nv 0.015663 0.087722 0.036934\nvn 0.5806 0.0463 -0.8128\nv 0.015894 0.090505 0.037258\nvn 0.5806 0.0463 -0.8128\nv 0.016399 0.087988 0.037475\nvn 0.5806 0.0463 -0.8128\nv 0.015325 0.089942 0.03684\nvn 0.5584 0.0499 -0.828\nv 0.015894 0.090505 0.037258\nvn 0.5584 0.0499 -0.828\nv 0.015663 0.087722 0.036934\nvn 0.5584 0.0499 -0.828\nv 0.017315 -0.02 0.039285\nvn -0.6388 -0.0009 -0.7694\nv 0.017304 0.043313 0.039224\nvn -0.6388 -0.0009 -0.7694\nv 0.017336 -0.08141 0.039336\nvn -0.6388 -0.0009 -0.7694\nv 0.016963 -0.018127 0.03841\nvn 0.9276 -0.0001 -0.3736\nv 0.017315 -0.02 0.039285\nvn 0.9275 -0.0002 -0.3739\nv 0.017336 -0.08141 0.039336\nvn 0.9277 0 -0.3734\nv 0.017148 0.053555 0.0388\nvn 0.8809 -0.001 -0.4734\nv 0.016802 0.047281 0.03817\nvn 0.8809 -0.001 -0.4734\nv 0.01699 0.08179 0.038447\nvn 0.8809 -0.001 -0.4734\nv 0.015331 0.061962 0.036851\nvn 0.3754 -0.0009 -0.9269\nv 0.014581 0.067124 0.036542\nvn 0.3792 -0.0003 -0.9253\nv 0.01505 0.082673 0.036709\nvn 0.3731 -0.0013 -0.9278\nv 0.01651 -0.066272 0.037794\nvn 0.7869 0.0005 -0.617\nv 0.01631 -0.03331 0.037565\nvn 0.7879 0.0004 -0.6158\nv 0.016963 -0.018127 0.03841\nvn 0.784 -0.0002 -0.6208\nv 0.017304 0.043313 0.039224\nvn 0.9421 0.0005 -0.3352\nv 0.017148 0.053555 0.0388\nvn 0.9421 0.0005 -0.3352\nv 0.017357 0.08129 0.039426\nvn 0.9421 0.0005 -0.3352\nv 0.014675 0.043646 0.036577\nvn 0.3815 0.0001 -0.9244\nv 0.015503 0.042701 0.036947\nvn 0.4151 -0.0005 -0.9098\nv 0.014675 0.043646 0.036577\nvn 0.4081 -0.0001 -0.9129\nv 0.015331 0.061962 0.036851\nvn 0.4072 -0.001 -0.9133\nv 0.015853 -0.034746 0.037175\nvn 0.5044 0 -0.8635\nv 0.015863 -0.068048 0.037181\nvn 0.5047 0.0004 -0.8633\nv 0.015128 -0.067015 0.036752\nvn 0.5059 0.0015 -0.8626\nv 0.015503 0.042701 0.036947\nvn 0.5949 -0.0005 -0.8038\nv 0.015911 0.081469 0.037215\nvn 0.5953 -0.0007 -0.8035\nv 0.016185 0.044497 0.037451\nvn 0.5941 0 -0.8044\nv 0.014655 0.011121 0.036561\nvn 0.4127 -0.0001 -0.9109\nv 0.01651 -0.066272 0.037794\nvn 0.7818 -0.0019 -0.6235\nv 0.016859 -0.075567 0.03826\nvn 0.7818 -0.0019 -0.6235\nv 0.016253 -0.080132 0.037513\nvn 0.7818 -0.0019 -0.6235\nv 0.017103 0.034845 0.038697\nvn 0.9092 0.0043 -0.4163\nv 0.016802 0.047281 0.03817\nvn 0.9092 0.0043 -0.4163\nv 0.017304 0.043313 0.039224\nvn 0.9092 0.0043 -0.4163\nv 0.016802 0.047281 0.03817\nvn 0.7568 0.0009 -0.6537\nv 0.016661 0.029903 0.037968\nvn 0.7557 0.0015 -0.6549\nv 0.016185 0.044497 0.037451\nvn 0.7588 -0.0001 -0.6514\nv 0.016802 0.047281 0.03817\nvn 0.7982 0.0005 -0.6023\nv 0.016388 0.081938 0.037651\nvn 0.7982 0.0005 -0.6023\nv 0.01699 0.08179 0.038447\nvn 0.7982 0.0005 -0.6023\nv 0.015324 -0.082066 0.036833\nvn 0.2897 0.008 -0.9571\nv 0.014949 -0.088676 0.036664\nvn 0.2897 0.008 -0.9571\nv 0.014138 -0.087286 0.03643\nvn 0.2897 0.008 -0.9571\nv 0.016661 0.029903 0.037968\nvn 0.7376 0.0001 -0.6753\nv 0.016297 -0.007437 0.037563\nvn 0.7376 0.0001 -0.6753\nv 0.016185 0.044497 0.037451\nvn 0.7376 0.0001 -0.6753\nv 0.014655 0.011121 0.036561\nvn 0.2112 -0.0001 -0.9774\nv 0.014056 0.08162 0.036428\nvn 0.2112 -0.0001 -0.9774\nv 0.014581 0.067124 0.036542\nvn 0.2112 -0.0001 -0.9774\nv 0.014655 0.011121 0.036561\nvn 0.3984 0.0002 -0.9172\nv 0.014581 0.067124 0.036542\nvn 0.3984 0.0002 -0.9172\nv 0.014675 0.043646 0.036577\nvn 0.3984 0.0002 -0.9172\nv 0.015789 -0.00754 0.037126\nvn 0.4704 -0.0004 -0.8825\nv 0.015383 -0.024853 0.036877\nvn 0.4769 0.0015 -0.879\nv 0.014955 -0.003743 0.036679\nvn 0.4745 0.0008 -0.8803\nv 0.017103 0.034845 0.038697\nvn 0.9352 -0.0002 -0.3541\nv 0.017304 0.043313 0.039224\nvn 0.9352 -0.0002 -0.3541\nv 0.017315 -0.02 0.039285\nvn 0.9352 -0.0002 -0.3541\nv 0.014583 -0.034303 0.036553\nvn 0.3831 -0.0009 -0.9237\nv 0.014955 -0.003743 0.036679\nvn 0.3831 -0.0009 -0.9237\nv 0.015383 -0.024853 0.036877\nvn 0.3831 -0.0009 -0.9237\nv 0.014655 0.011121 0.036561\nvn 0.2282 0.0001 -0.9736\nv 0.014138 -0.087286 0.03643\nvn 0.2282 0.0001 -0.9736\nv 0.014056 0.08162 0.036428\nvn 0.2282 0.0001 -0.9736\nv 0.016297 -0.007437 0.037563\nvn 0.652 0.0013 -0.7582\nv 0.015789 -0.00754 0.037126\nvn 0.652 0.0011 -0.7582\nv 0.015549 0.012329 0.036975\nvn 0.6519 0.0021 -0.7583\nv 0.015853 -0.034746 0.037175\nvn 0.6511 -0.0013 -0.7589\nv 0.01631 -0.03331 0.037565\nvn 0.6511 -0.0013 -0.7589\nv 0.01651 -0.066272 0.037794\nvn 0.6511 -0.0013 -0.7589\nv 0.016297 -0.007437 0.037563\nvn 0.7862 0 -0.6179\nv 0.016661 0.029903 0.037968\nvn 0.7811 -0.0008 -0.6245\nv 0.017103 0.034845 0.038697\nvn 0.9274 -0.0004 -0.3741\nv 0.01651 -0.066272 0.037794\nvn 0.6851 0.0015 -0.7285\nv 0.015863 -0.068048 0.037181\nvn 0.6865 0.0005 -0.7271\nv 0.015853 -0.034746 0.037175\nvn 0.6872 0.0001 -0.7265\nv 0.014955 -0.003743 0.036679\nvn 0.3498 -0.0004 -0.9368\nv 0.014583 -0.034303 0.036553\nvn 0.3498 -0.0004 -0.9368\nv 0.014655 0.011121 0.036561\nvn 0.3498 -0.0004 -0.9368\nv 0.016253 -0.080132 0.037513\nvn 0.749 0.003 -0.6626\nv 0.016859 -0.075567 0.03826\nvn 0.7546 0.007 -0.6562\nv 0.016703 -0.081514 0.038017\nvn 0.7529 0.0059 -0.6581\nv 0.016859 -0.075567 0.03826\nvn 0.8762 -0.0033 -0.482\nv 0.017163 -0.080745 0.038847\nvn 0.8762 -0.0033 -0.482\nv 0.016703 -0.081514 0.038017\nvn 0.8762 -0.0033 -0.482\nv 0.015324 -0.082066 0.036833\nvn 0.5064 0.0019 -0.8623\nv 0.014583 -0.034303 0.036553\nvn 0.3023 -0.0003 -0.9532\nv 0.014138 -0.087286 0.03643\nvn 0.3023 -0.0003 -0.9532\nv 0.014655 0.011121 0.036561\nvn 0.3023 -0.0003 -0.9532\nv 0.015128 -0.067015 0.036752\nvn 0.3229 -0.0008 -0.9464\nv 0.015324 -0.082066 0.036833\nvn 0.3251 -0.0009 -0.9457\nv 0.014138 -0.087286 0.03643\nvn 0.3191 -0.0006 -0.9477\nv 0.015383 -0.024853 0.036877\nvn 0.5842 -0.002 -0.8116\nv 0.015789 -0.00754 0.037126\nvn 0.5842 -0.002 -0.8116\nv 0.01631 -0.03331 0.037565\nvn 0.5842 -0.002 -0.8116\nv 0.015383 -0.024853 0.036877\nvn 0.6361 0.0069 -0.7716\nv 0.01631 -0.03331 0.037565\nvn 0.6361 0.0069 -0.7716\nv 0.015853 -0.034746 0.037175\nvn 0.6361 0.0069 -0.7716\nv 0.01505 0.082673 0.036709\nvn 0.27 0.0022 -0.9629\nv 0.014581 0.067124 0.036542\nvn 0.27 0.0022 -0.9629\nv 0.014056 0.08162 0.036428\nvn 0.27 0.0022 -0.9629\nv 0.01505 0.082673 0.036709\nvn 0.5076 0.001 -0.8616\nv 0.015911 0.081469 0.037215\nvn 0.5076 0.001 -0.8616\nv 0.015331 0.061962 0.036851\nvn 0.5076 0.001 -0.8616\nv 0.017148 0.053555 0.0388\nvn 0.9364 0.0009 -0.3509\nv 0.01699 0.08179 0.038447\nvn 0.9364 0.0009 -0.3509\nv 0.017357 0.08129 0.039426\nvn 0.9364 0.0009 -0.3509\nv 0.016388 0.081938 0.037651\nvn 0.7598 -0.0007 -0.6502\nv 0.016185 0.044497 0.037451\nvn 0.6744 0.0003 -0.7384\nv 0.015911 0.081469 0.037215\nvn 0.6744 0.0003 -0.7384\nv 0.016388 0.081938 0.037651\nvn 0.6744 0.0003 -0.7384\nv 0.015911 0.081469 0.037215\nvn 0.5223 0.0004 -0.8528\nv 0.015503 0.042701 0.036947\nvn 0.5223 0.0004 -0.8528\nv 0.015331 0.061962 0.036851\nvn 0.5223 0.0004 -0.8528\nv 0.016859 -0.075567 0.03826\nvn 0.8017 0.0001 -0.5977\nv 0.01651 -0.066272 0.037794\nvn 0.8017 0.0001 -0.5977\nv 0.016963 -0.018127 0.03841\nvn 0.8017 0.0001 -0.5977\nv 0.016253 -0.080132 0.037513\nvn 0.6844 0.002 -0.7291\nv 0.017163 -0.080745 0.038847\nvn 0.8868 -0.0004 -0.4621\nv 0.016859 -0.075567 0.03826\nvn 0.8868 -0.0004 -0.4621\nv 0.016963 -0.018127 0.03841\nvn 0.8868 -0.0004 -0.4621\nv 0.017163 -0.080745 0.038847\nvn 0.943 0.0007 -0.3328\nv 0.016963 -0.018127 0.03841\nvn 0.943 0.0007 -0.3328\nv 0.017336 -0.08141 0.039336\nvn 0.943 0.0007 -0.3328\nv 0.016125 -0.083674 0.037361\nvn 0.5498 -0.0004 -0.8353\nv 0.015324 -0.082066 0.036833\nvn 0.5498 -0.0004 -0.8353\nv 0.015863 -0.068048 0.037181\nvn 0.5498 -0.0004 -0.8353\nv 0.016125 -0.083674 0.037361\nvn 0.7188 0.0041 -0.6952\nv 0.015863 -0.068048 0.037181\nvn 0.7188 0.0041 -0.6952\nv 0.016253 -0.080132 0.037513\nvn 0.7188 0.0041 -0.6952\nv 0.016661 0.029903 0.037968\nvn 0.857 -0.0006 -0.5154\nv 0.017103 0.034845 0.038697\nvn 0.8549 0.0001 -0.5188\nv 0.016963 -0.018127 0.03841\nvn 0.8535 0.0006 -0.521\nv 0.016802 0.047281 0.03817\nvn 0.896 -0.0047 -0.4441\nv 0.017148 0.053555 0.0388\nvn 0.896 -0.0047 -0.4441\nv 0.017304 0.043313 0.039224\nvn 0.896 -0.0047 -0.4441\nv 0.016802 0.047281 0.03817\nvn 0.8583 -0.001 -0.5131\nv 0.01631 -0.03331 0.037565\nvn 0.6521 0.0003 -0.7581\nv 0.015549 0.012329 0.036975\nvn 0.4188 0.001 -0.9081\nv 0.015549 0.012329 0.036975\nvn 0.5937 0.0002 -0.8047\nv 0.016185 0.044497 0.037451\nvn 0.6118 -0.0004 -0.791\nv 0.016297 -0.007437 0.037563\nvn 0.6118 -0.0004 -0.791\nv 0.015549 0.012329 0.036975\nvn 0.6118 -0.0004 -0.791\nv 0.014955 -0.003743 0.036679\nvn 0.4185 0.0012 -0.9082\nv 0.015549 0.012329 0.036975\nvn 0.468 -0.0011 -0.8837\nv 0.015128 -0.067015 0.036752\nvn 0.3691 0.0005 -0.9294\nv 0.014583 -0.034303 0.036553\nvn 0.3691 0.0005 -0.9294\nv 0.015383 -0.024853 0.036877\nvn 0.3691 0.0005 -0.9294\nv 0.015128 -0.067015 0.036752\nvn 0.5262 -0.0007 -0.8503\nv 0.015383 -0.024853 0.036877\nvn 0.5262 -0.0007 -0.8503\nv 0.015853 -0.034746 0.037175\nvn 0.5262 -0.0007 -0.8503\nv 0.014583 -0.034303 0.036553\nvn 0.3174 -0.0005 -0.9483\nv 0.017163 -0.080745 0.038847\nvn 0.8687 0.0152 -0.495\nv 0.017318 -0.086124 0.038954\nvn 0.8676 0.0147 -0.497\nv 0.016703 -0.081514 0.038017\nvn 0.8655 0.0136 -0.5008\nv 0.016125 -0.083674 0.037361\nvn 0.7474 0.0017 -0.6644\nv 0.016766 -0.086592 0.037992\nvn 0.8643 0.0131 -0.5027\nv 0.016766 -0.086592 0.037992\nvn 0.7296 0.0123 -0.6838\nv 0.016125 -0.083674 0.037361\nvn 0.7296 0.0123 -0.6838\nv 0.016703 -0.081514 0.038017\nvn 0.7296 0.0123 -0.6838\nv 0.017336 -0.08141 0.039336\nvn 0.9513 0.0214 -0.3076\nv 0.017318 -0.086124 0.038954\nvn 0.9513 0.0214 -0.3076\nv 0.017163 -0.080745 0.038847\nvn 0.9513 0.0214 -0.3076\nv 0.016125 -0.083674 0.037361\nvn 0.5712 0.0151 -0.8207\nv 0.015753 -0.086839 0.037044\nvn 0.5712 0.0151 -0.8207\nv 0.015324 -0.082066 0.036833\nvn 0.5712 0.0151 -0.8207\nv 0.016125 -0.083674 0.037361\nvn 0.6759 -0.0056 -0.737\nv 0.016238 -0.088887 0.037504\nvn 0.6759 -0.0056 -0.737\nv 0.015753 -0.086839 0.037044\nvn 0.6759 -0.0056 -0.737\nv 0.017318 -0.086124 0.038954\nvn 0.9079 -0.0439 -0.4169\nv 0.01732 -0.088409 0.039198\nvn 0.9079 -0.0439 -0.4169\nv 0.016908 -0.08884 0.038347\nvn 0.9079 -0.0439 -0.4169\nv 0.016766 -0.086592 0.037992\nvn 0.6903 -0.0049 -0.7235\nv 0.016238 -0.088887 0.037504\nvn 0.6903 -0.0049 -0.7235\nv 0.016125 -0.083674 0.037361\nvn 0.6903 -0.0049 -0.7235\nv 0.016238 -0.088887 0.037504\nvn 0.7831 -0.0482 -0.62\nv 0.016766 -0.086592 0.037992\nvn 0.7831 -0.0482 -0.62\nv 0.016908 -0.08884 0.038347\nvn 0.7831 -0.0482 -0.62\nv 0.014024 -0.090523 0.036463\nvn 0.1248 -0.1303 -0.9836\nv 0.013803 -0.091669 0.036587\nvn 0.1248 -0.1303 -0.9836\nv 0.012233 -0.091785 0.036403\nvn 0.1248 -0.1303 -0.9836\nv 0.012431 -0.09284 0.03672\nvn 0.1313 -0.2622 -0.956\nv 0.012233 -0.091785 0.036403\nvn 0.1313 -0.2622 -0.956\nv 0.013803 -0.091669 0.036587\nvn 0.1313 -0.2622 -0.956\nv 0.015081 -0.092269 0.037363\nvn 0.556 -0.2751 -0.7844\nv 0.01485 -0.091385 0.03689\nvn 0.556 -0.2751 -0.7844\nv 0.015753 -0.091481 0.037563\nvn 0.556 -0.2751 -0.7844\nv 0.012431 -0.09284 0.03672\nvn 0.2083 -0.3477 -0.9142\nv 0.013803 -0.091669 0.036587\nvn 0.2083 -0.3477 -0.9142\nv 0.014218 -0.09237 0.036948\nvn 0.2083 -0.3477 -0.9142\nv 0.016948 -0.090354 0.038779\nvn 0.9136 -0.0889 -0.3968\nv 0.016908 -0.08884 0.038347\nvn 0.9136 -0.0889 -0.3968\nv 0.01732 -0.088409 0.039198\nvn 0.9136 -0.0889 -0.3968\nv 0.015887 -0.092282 0.038103\nvn 0.739 -0.2873 -0.6094\nv 0.015753 -0.091481 0.037563\nvn 0.739 -0.2873 -0.6094\nv 0.016455 -0.091492 0.03842\nvn 0.739 -0.2873 -0.6094\nv 0.014218 -0.09237 0.036948\nvn 0.2313 -0.464 -0.8551\nv 0.01339 -0.093555 0.037367\nvn 0.2313 -0.464 -0.8551\nv 0.012431 -0.09284 0.03672\nvn 0.2313 -0.464 -0.8551\nv 0.014807 -0.093133 0.037732\nvn 0.4273 -0.4663 -0.7746\nv 0.014218 -0.09237 0.036948\nvn 0.4273 -0.4663 -0.7746\nv 0.015081 -0.092269 0.037363\nvn 0.4273 -0.4663 -0.7746\nv 0.009714 -0.092734 0.036495\nvn 0.0275 -0.4247 -0.9049\nv 0.008705 -0.093863 0.036994\nvn 0.0275 -0.4247 -0.9049\nv 8.03136e-18 -0.093558 0.036586\nvn 0.0275 -0.4247 -0.9049\nv 8.07973e-18 -0.092276 0.036191\nvn 0.0235 -0.1583 -0.9871\nv 0.012233 -0.091785 0.036403\nvn 0.0235 -0.1583 -0.9871\nv 0.009714 -0.092734 0.036495\nvn 0.0235 -0.1583 -0.9871\nv 0.008705 -0.093863 0.036994\nvn 0.0564 -0.4455 -0.8935\nv 0.009714 -0.092734 0.036495\nvn 0.0564 -0.4455 -0.8935\nv 0.012431 -0.09284 0.03672\nvn 0.0564 -0.4455 -0.8935\nv 8.03136e-18 -0.093558 0.036586\nvn 0.0161 -0.295 -0.9554\nv 8.07973e-18 -0.092276 0.036191\nvn 0.0161 -0.295 -0.9554\nv 0.009714 -0.092734 0.036495\nvn 0.0161 -0.295 -0.9554\nv 0.015753 -0.086839 0.037044\nvn 0.4296 -0.0013 -0.903\nv 0.014949 -0.088676 0.036664\nvn 0.4296 -0.0013 -0.903\nv 0.015324 -0.082066 0.036833\nvn 0.4296 -0.0013 -0.903\nv 0.014024 -0.090523 0.036463\nvn 0.2474 -0.0186 -0.9687\nv 0.014138 -0.087286 0.03643\nvn 0.2474 -0.0186 -0.9687\nv 0.014949 -0.088676 0.036664\nvn 0.2474 -0.0186 -0.9687\nv 0.013803 -0.091669 0.036587\nvn 0.3144 -0.1616 -0.9354\nv 0.014024 -0.090523 0.036463\nvn 0.3144 -0.1616 -0.9354\nv 0.01485 -0.091385 0.03689\nvn 0.3144 -0.1616 -0.9354\nv 0.014218 -0.09237 0.036948\nvn 0.334 -0.2679 -0.9037\nv 0.013803 -0.091669 0.036587\nvn 0.334 -0.2679 -0.9037\nv 0.01485 -0.091385 0.03689\nvn 0.334 -0.2679 -0.9037\nv 0.015753 -0.091481 0.037563\nvn 0.5714 -0.2038 -0.795\nv 0.01485 -0.091385 0.03689\nvn 0.5714 -0.2038 -0.795\nv 0.01558 -0.090158 0.0371\nvn 0.5714 -0.2038 -0.795\nv 0.015081 -0.092269 0.037363\nvn 0.4402 -0.332 -0.8343\nv 0.014218 -0.09237 0.036948\nvn 0.4402 -0.332 -0.8343\nv 0.01485 -0.091385 0.03689\nvn 0.4402 -0.332 -0.8343\nv 0.015081 -0.092269 0.037363\nvn 0.6277 -0.3602 -0.6901\nv 0.015753 -0.091481 0.037563\nvn 0.6277 -0.3602 -0.6901\nv 0.015887 -0.092282 0.038103\nvn 0.6277 -0.3602 -0.6901\nv 0.015887 -0.092282 0.038103\nvn 0.5935 -0.4679 -0.6548\nv 0.014807 -0.093133 0.037732\nvn 0.5935 -0.4679 -0.6548\nv 0.015081 -0.092269 0.037363\nvn 0.5935 -0.4679 -0.6548\nv 0.016766 -0.086592 0.037992\nvn 0.8716 -0.0221 -0.4898\nv 0.017318 -0.086124 0.038954\nvn 0.8716 -0.0221 -0.4898\nv 0.016908 -0.08884 0.038347\nvn 0.8716 -0.0221 -0.4898\nv 0.01558 -0.090158 0.0371\nvn 0.5014 -0.0407 -0.8643\nv 0.014949 -0.088676 0.036664\nvn 0.5014 -0.0407 -0.8643\nv 0.015753 -0.086839 0.037044\nvn 0.5014 -0.0407 -0.8643\nv 0.016238 -0.088887 0.037504\nvn 0.5835 -0.0441 -0.8109\nv 0.01558 -0.090158 0.0371\nvn 0.5835 -0.0441 -0.8109\nv 0.015753 -0.086839 0.037044\nvn 0.5835 -0.0441 -0.8109\nv 0.014949 -0.088676 0.036664\nvn 0.4131 -0.0906 -0.9062\nv 0.01558 -0.090158 0.0371\nvn 0.4131 -0.0906 -0.9062\nv 0.01485 -0.091385 0.03689\nvn 0.4131 -0.0906 -0.9062\nv 0.016429 -0.090078 0.037881\nvn 0.7827 -0.0703 -0.6185\nv 0.016238 -0.088887 0.037504\nvn 0.7827 -0.0703 -0.6185\nv 0.016908 -0.08884 0.038347\nvn 0.7827 -0.0703 -0.6185\nv 0.014024 -0.090523 0.036463\nvn 0.3806 -0.0906 -0.9203\nv 0.014949 -0.088676 0.036664\nvn 0.3806 -0.0906 -0.9203\nv 0.01485 -0.091385 0.03689\nvn 0.3806 -0.0906 -0.9203\nv 0.016429 -0.090078 0.037881\nvn 0.841 -0.1277 -0.5258\nv 0.016908 -0.08884 0.038347\nvn 0.841 -0.1277 -0.5258\nv 0.016948 -0.090354 0.038779\nvn 0.841 -0.1277 -0.5258\nv 0.016429 -0.090078 0.037881\nvn 0.6784 -0.1206 -0.7247\nv 0.01558 -0.090158 0.0371\nvn 0.6784 -0.1206 -0.7247\nv 0.016238 -0.088887 0.037504\nvn 0.6784 -0.1206 -0.7247\nv 0.016429 -0.090078 0.037881\nvn 0.8239 -0.1884 -0.5345\nv 0.016948 -0.090354 0.038779\nvn 0.8239 -0.1884 -0.5345\nv 0.016455 -0.091492 0.03842\nvn 0.8239 -0.1884 -0.5345\nv 0.015753 -0.091481 0.037563\nvn 0.6764 -0.1631 -0.7183\nv 0.01558 -0.090158 0.0371\nvn 0.6764 -0.1631 -0.7183\nv 0.016429 -0.090078 0.037881\nvn 0.6764 -0.1631 -0.7183\nv 0.015753 -0.091481 0.037563\nvn 0.7527 -0.2222 -0.6198\nv 0.016429 -0.090078 0.037881\nvn 0.7527 -0.2222 -0.6198\nv 0.016455 -0.091492 0.03842\nvn 0.7527 -0.2222 -0.6198\nv 0.01339 -0.093555 0.037367\nvn 0.3553 -0.5224 -0.7752\nv 0.014218 -0.09237 0.036948\nvn 0.3553 -0.5224 -0.7752\nv 0.014807 -0.093133 0.037732\nvn 0.3553 -0.5224 -0.7752\nv 0.012431 -0.09284 0.03672\nvn 0.0684 -0.2749 -0.959\nv 0.009714 -0.092734 0.036495\nvn 0.0684 -0.2749 -0.959\nv 0.012233 -0.091785 0.036403\nvn 0.0684 -0.2749 -0.959\nv 0.011378 -0.094067 0.037367\nvn 0.1409 -0.5539 -0.8206\nv 0.012431 -0.09284 0.03672\nvn 0.1409 -0.5539 -0.8206\nv 0.01339 -0.093555 0.037367\nvn 0.1409 -0.5539 -0.8206\nv 0.011378 -0.094067 0.037367\nvn 0.0792 -0.5174 -0.852\nv 0.008705 -0.093863 0.036994\nvn 0.0792 -0.5174 -0.852\nv 0.012431 -0.09284 0.03672\nvn 0.0792 -0.5174 -0.852\nv 0.016896 -0.027176 0.108339\nvn 0.8951 -0.0013 0.4458\nv 0.01665 -0.073747 0.108696\nvn 0.8951 -0.0013 0.4458\nv 0.017151 -0.073644 0.10769\nvn 0.8951 -0.0013 0.4458\nv 0.016896 -0.027176 0.108339\nvn 0.9305 -0 0.3663\nv 0.017151 -0.073644 0.10769\nvn 0.9305 -0 0.3663\nv 0.017253 -0.026954 0.107432\nvn 0.9305 -0 0.3663\nv 0.016537 -0.027396 0.108876\nvn 0.8311 -0.0001 0.5562\nv 0.01665 -0.073747 0.108696\nvn 0.8311 -0.0001 0.5562\nv 0.016896 -0.027176 0.108339\nvn 0.8311 -0.0001 0.5562\nv 0.016 -0.028388 0.109468\nvn 0.7274 -0.0013 0.6863\nv 0.015784 -0.073138 0.109615\nvn 0.7274 -0.0013 0.6863\nv 0.01665 -0.073747 0.108696\nvn 0.7274 -0.0013 0.6863\nv 0.016 -0.028388 0.109468\nvn 0.7417 -0.0008 0.6707\nv 0.01665 -0.073747 0.108696\nvn 0.7417 -0.0008 0.6707\nv 0.016537 -0.027396 0.108876\nvn 0.7417 -0.0008 0.6707\nv 0.0149 -0.029725 0.110148\nvn 0.5257 0.0003 0.8506\nv 0.015784 -0.073138 0.109615\nvn 0.5257 0.0003 0.8506\nv 0.016 -0.028388 0.109468\nvn 0.5257 0.0003 0.8506\nv 0.0149 -0.029725 0.110148\nvn 0.4912 -0.0007 0.871\nv 0.014939 -0.073611 0.110091\nvn 0.4912 -0.0007 0.871\nv 0.015784 -0.073138 0.109615\nvn 0.4912 -0.0007 0.871\nv 0.0149 -0.029725 0.110148\nvn 0.2861 -0.001 0.9582\nv 0.014007 -0.073637 0.110369\nvn 0.2861 -0.001 0.9582\nv 0.014939 -0.073611 0.110091\nvn 0.2861 -0.001 0.9582\nv 0.013792 -0.030528 0.110418\nvn 0.2361 0.0001 0.9717\nv 0.014007 -0.073637 0.110369\nvn 0.2361 0.0001 0.9717\nv 0.0149 -0.029725 0.110148\nvn 0.2361 0.0001 0.9717\nv 0.014975 -0.076932 0.109832\nvn 0.3618 -0.1381 0.922\nv 0.014235 -0.079744 0.109702\nvn 0.3618 -0.1381 0.922\nv 0.015143 -0.079475 0.109386\nvn 0.3618 -0.1381 0.922\nv 0.014975 -0.076932 0.109832\nvn 0.3082 -0.1249 0.9431\nv 0.01397 -0.076459 0.110223\nvn 0.3082 -0.1249 0.9431\nv 0.014235 -0.079744 0.109702\nvn 0.3082 -0.1249 0.9431\nv 0.016707 -0.07841 0.107993\nvn 0.8275 -0.1467 0.5419\nv 0.01601 -0.080086 0.108603\nvn 0.8275 -0.1467 0.5419\nv 0.016654 -0.081967 0.107111\nvn 0.8275 -0.1467 0.5419\nv 0.015765 -0.076768 0.109366\nvn 0.5227 -0.114 0.8449\nv 0.014975 -0.076932 0.109832\nvn 0.5227 -0.114 0.8449\nv 0.015143 -0.079475 0.109386\nvn 0.5227 -0.114 0.8449\nv 0.01708 -0.078176 0.107155\nvn 0.9327 -0.109 0.3436\nv 0.016654 -0.081967 0.107111\nvn 0.9327 -0.109 0.3436\nv 0.016977 -0.082382 0.106101\nvn 0.9327 -0.109 0.3436\nv 0.01708 -0.078176 0.107155\nvn 0.9188 -0.1079 0.3798\nv 0.016707 -0.07841 0.107993\nvn 0.9188 -0.1079 0.3798\nv 0.016654 -0.081967 0.107111\nvn 0.9188 -0.1079 0.3798\nv 0.015765 -0.076768 0.109366\nvn 0.61 -0.1345 0.7809\nv 0.015143 -0.079475 0.109386\nvn 0.61 -0.1345 0.7809\nv 0.01601 -0.080086 0.108603\nvn 0.61 -0.1345 0.7809\nv 0.016368 -0.076861 0.108738\nvn 0.7093 -0.1078 0.6966\nv 0.015765 -0.076768 0.109366\nvn 0.7093 -0.1078 0.6966\nv 0.01601 -0.080086 0.108603\nvn 0.7093 -0.1078 0.6966\nv 0.016707 -0.07841 0.107993\nvn 0.7945 -0.113 0.5966\nv 0.016368 -0.076861 0.108738\nvn 0.7945 -0.113 0.5966\nv 0.01601 -0.080086 0.108603\nvn 0.7945 -0.113 0.5966\nv 0.014939 -0.073611 0.110091\nvn 0.287 -0.0532 0.9564\nv 0.014007 -0.073637 0.110369\nvn 0.287 -0.0532 0.9564\nv 0.01397 -0.076459 0.110223\nvn 0.287 -0.0532 0.9564\nv 0.014939 -0.073611 0.110091\nvn 0.3331 -0.0696 0.9403\nv 0.01397 -0.076459 0.110223\nvn 0.3331 -0.0696 0.9403\nv 0.014975 -0.076932 0.109832\nvn 0.3331 -0.0696 0.9403\nv 0.015784 -0.073138 0.109615\nvn 0.5167 -0.0612 0.854\nv 0.014939 -0.073611 0.110091\nvn 0.5157 -0.0609 0.8546\nv 0.014975 -0.076932 0.109832\nvn 0.516 -0.061 0.8544\nv 0.015765 -0.076768 0.109366\nvn 0.517 -0.0613 0.8538\nv 0.01665 -0.073747 0.108696\nvn 0.8456 -0.0695 0.5293\nv 0.016368 -0.076861 0.108738\nvn 0.8456 -0.0695 0.5293\nv 0.016707 -0.07841 0.107993\nvn 0.8456 -0.0695 0.5293\nv 0.01665 -0.073747 0.108696\nvn 0.7146 -0.0547 0.6974\nv 0.015784 -0.073138 0.109615\nvn 0.7094 -0.0519 0.7029\nv 0.015765 -0.076768 0.109366\nvn 0.7108 -0.0526 0.7014\nv 0.016368 -0.076861 0.108738\nvn 0.7163 -0.0555 0.6956\nv 0.017151 -0.073644 0.10769\nvn 0.896 -0.0555 0.4407\nv 0.01665 -0.073747 0.108696\nvn 0.896 -0.0555 0.4407\nv 0.016707 -0.07841 0.107993\nvn 0.896 -0.0555 0.4407\nv 0.017151 -0.073644 0.10769\nvn 0.9177 -0.0606 0.3925\nv 0.016707 -0.07841 0.107993\nvn 0.9177 -0.0606 0.3925\nv 0.01708 -0.078176 0.107155\nvn 0.9177 -0.0606 0.3925\nv 0.01496 -0.094289 0.093771\nvn 0.2814 -0.934 0.2201\nv 0.014029 -0.094421 0.094401\nvn 0.2814 -0.934 0.2201\nv 0.014059 -0.095974 0.087768\nvn 0.2814 -0.934 0.2201\nv 0.01496 -0.094289 0.093771\nvn 0.3349 -0.919 0.2078\nv 0.014059 -0.095974 0.087768\nvn 0.3349 -0.919 0.2078\nv 0.015386 -0.095308 0.088576\nvn 0.3349 -0.919 0.2078\nv 0.015396 -0.094352 0.092563\nvn 0.447 -0.8701 0.2074\nv 0.01496 -0.094289 0.093771\nvn 0.447 -0.8701 0.2074\nv 0.015386 -0.095308 0.088576\nvn 0.447 -0.8701 0.2074\nv 0.01632 -0.094466 0.089055\nvn 0.6044 -0.7751 0.1842\nv 0.015396 -0.094352 0.092563\nvn 0.6044 -0.7751 0.1842\nv 0.015386 -0.095308 0.088576\nvn 0.6044 -0.7751 0.1842\nv 0.015938 -0.093452 0.094345\nvn 0.6287 -0.7541 0.1899\nv 0.015396 -0.094352 0.092563\nvn 0.6287 -0.7541 0.1899\nv 0.01632 -0.094466 0.089055\nvn 0.6287 -0.7541 0.1899\nv 0.01672 -0.09273 0.093563\nvn 0.8481 -0.5154 0.1231\nv 0.01632 -0.094466 0.089055\nvn 0.8481 -0.5154 0.1231\nv 0.017171 -0.093258 0.08825\nvn 0.8481 -0.5154 0.1231\nv 0.01672 -0.09273 0.093563\nvn 0.7566 -0.6299 0.1754\nv 0.015938 -0.093452 0.094345\nvn 0.7566 -0.6299 0.1754\nv 0.01632 -0.094466 0.089055\nvn 0.7566 -0.6299 0.1754\nv 0.017096 -0.091758 0.093886\nvn 0.9127 -0.3917 0.1163\nv 0.01672 -0.09273 0.093563\nvn 0.9127 -0.3917 0.1163\nv 0.017171 -0.093258 0.08825\nvn 0.9127 -0.3917 0.1163\nv 0.014595 -0.089039 0.104648\nvn 0.2292 -0.7136 0.662\nv 0.013524 -0.088858 0.105214\nvn 0.2292 -0.7136 0.662\nv 0.013828 -0.089984 0.103895\nvn 0.2292 -0.7136 0.662\nv 0.014595 -0.089039 0.104648\nvn 0.2534 -0.673 0.6949\nv 0.013838 -0.087584 0.106334\nvn 0.2534 -0.673 0.6949\nv 0.013524 -0.088858 0.105214\nvn 0.2534 -0.673 0.6949\nv 0.01499 -0.087139 0.106152\nvn 0.3993 -0.6184 0.6769\nv 0.014595 -0.089039 0.104648\nvn 0.3993 -0.6184 0.6769\nv 0.015187 -0.088003 0.105247\nvn 0.3993 -0.6184 0.6769\nv 0.014903 -0.093226 0.097082\nvn 0.3061 -0.9027 0.3025\nv 0.01392 -0.093389 0.09759\nvn 0.3061 -0.9027 0.3025\nv 0.014029 -0.094421 0.094401\nvn 0.3061 -0.9027 0.3025\nv 0.014903 -0.093226 0.097082\nvn 0.3263 -0.8984 0.294\nv 0.014029 -0.094421 0.094401\nvn 0.3263 -0.8984 0.294\nv 0.01496 -0.094289 0.093771\nvn 0.3263 -0.8984 0.294\nv 0.015691 -0.092811 0.09685\nvn 0.5097 -0.8166 0.2709\nv 0.014903 -0.093226 0.097082\nvn 0.5097 -0.8166 0.2709\nv 0.01496 -0.094289 0.093771\nvn 0.5097 -0.8166 0.2709\nv 0.014531 -0.085924 0.107252\nvn 0.4904 -0.476 0.7301\nv 0.01499 -0.087139 0.106152\nvn 0.4904 -0.476 0.7301\nv 0.015326 -0.085161 0.107215\nvn 0.4904 -0.476 0.7301\nv 0.013606 -0.085754 0.107643\nvn 0.2793 -0.4404 0.8533\nv 0.014875 -0.08401 0.108127\nvn 0.2791 -0.4403 0.8534\nv 0.01375 -0.083958 0.108522\nvn 0.279 -0.4402 0.8534\nv 0.014531 -0.085924 0.107252\nvn 0.2794 -0.4405 0.8532\nv 0.015691 -0.092811 0.09685\nvn 0.5358 -0.8038 0.2585\nv 0.01496 -0.094289 0.093771\nvn 0.5358 -0.8038 0.2585\nv 0.015938 -0.093452 0.094345\nvn 0.5358 -0.8038 0.2585\nv 0.014875 -0.08401 0.108127\nvn 0.4548 -0.4367 0.7762\nv 0.014531 -0.085924 0.107252\nvn 0.4548 -0.4367 0.7762\nv 0.015326 -0.085161 0.107215\nvn 0.4548 -0.4367 0.7762\nv 0.015326 -0.085161 0.107215\nvn 0.569 -0.4624 0.68\nv 0.01499 -0.087139 0.106152\nvn 0.569 -0.4624 0.68\nv 0.015837 -0.085951 0.10625\nvn 0.569 -0.4624 0.68\nv 0.015837 -0.085951 0.10625\nvn 0.6962 -0.3427 0.6307\nv 0.01632 -0.085108 0.106175\nvn 0.6962 -0.3427 0.6307\nv 0.015767 -0.083193 0.107827\nvn 0.6962 -0.3427 0.6307\nv 0.015837 -0.085951 0.10625\nvn 0.6764 -0.3524 0.6468\nv 0.015767 -0.083193 0.107827\nvn 0.6764 -0.3524 0.6468\nv 0.015326 -0.085161 0.107215\nvn 0.6764 -0.3524 0.6468\nv 0.014875 -0.08401 0.108127\nvn 0.2938 -0.3608 0.8852\nv 0.013915 -0.082476 0.109071\nvn 0.2938 -0.3608 0.8852\nv 0.01375 -0.083958 0.108522\nvn 0.2938 -0.3608 0.8852\nv 0.014875 -0.08401 0.108127\nvn 0.5753 -0.3574 0.7357\nv 0.015326 -0.085161 0.107215\nvn 0.5753 -0.3574 0.7357\nv 0.015767 -0.083193 0.107827\nvn 0.5753 -0.3574 0.7357\nv 0.016068 -0.091963 0.09808\nvn 0.7095 -0.6627 0.2396\nv 0.015691 -0.092811 0.09685\nvn 0.7095 -0.6627 0.2396\nv 0.015938 -0.093452 0.094345\nvn 0.7095 -0.6627 0.2396\nv 0.016688 -0.084759 0.105613\nvn 0.9511 -0.1688 0.2585\nv 0.016922 -0.086447 0.103651\nvn 0.9511 -0.1688 0.2585\nv 0.016977 -0.082382 0.106101\nvn 0.9511 -0.1688 0.2585\nv 0.014875 -0.08401 0.108127\nvn 0.3581 -0.3164 0.8784\nv 0.014892 -0.081632 0.108977\nvn 0.3581 -0.3164 0.8784\nv 0.013915 -0.082476 0.109071\nvn 0.3581 -0.3164 0.8784\nv 0.016068 -0.091963 0.09808\nvn 0.7692 -0.6023 0.2134\nv 0.015938 -0.093452 0.094345\nvn 0.7692 -0.6023 0.2134\nv 0.01672 -0.09273 0.093563\nvn 0.7692 -0.6023 0.2134\nv 0.014531 -0.092413 0.099485\nvn 0.3257 -0.8791 0.348\nv 0.01392 -0.093389 0.09759\nvn 0.3257 -0.8791 0.348\nv 0.014903 -0.093226 0.097082\nvn 0.3257 -0.8791 0.348\nv 0.016627 -0.091143 0.098131\nvn 0.8016 -0.5595 0.2108\nv 0.016068 -0.091963 0.09808\nvn 0.8016 -0.5595 0.2108\nv 0.01672 -0.09273 0.093563\nvn 0.8016 -0.5595 0.2108\nv 0.014531 -0.092413 0.099485\nvn 0.2187 -0.8943 0.3904\nv 0.013591 -0.092562 0.099669\nvn 0.2187 -0.8943 0.3904\nv 0.01392 -0.093389 0.09759\nvn 0.2187 -0.8943 0.3904\nv 0.015247 -0.092262 0.098966\nvn 0.4277 -0.834 0.3485\nv 0.014531 -0.092413 0.099485\nvn 0.4277 -0.834 0.3485\nv 0.014903 -0.093226 0.097082\nvn 0.4277 -0.834 0.3485\nv 0.015247 -0.092262 0.098966\nvn 0.5131 -0.7985 0.3148\nv 0.014903 -0.093226 0.097082\nvn 0.5131 -0.7985 0.3148\nv 0.015691 -0.092811 0.09685\nvn 0.5131 -0.7985 0.3148\nv 0.017096 -0.091758 0.093886\nvn 0.9021 -0.4015 0.158\nv 0.016627 -0.091143 0.098131\nvn 0.9021 -0.4015 0.158\nv 0.01672 -0.09273 0.093563\nvn 0.9021 -0.4015 0.158\nv 0.016068 -0.091963 0.09808\nvn 0.6074 -0.7286 0.3164\nv 0.015247 -0.092262 0.098966\nvn 0.6074 -0.7286 0.3164\nv 0.015691 -0.092811 0.09685\nvn 0.6074 -0.7286 0.3164\nv 0.014531 -0.092413 0.099485\nvn 0.2251 -0.8665 0.4456\nv 0.013747 -0.091297 0.10205\nvn 0.2251 -0.8665 0.4456\nv 0.013591 -0.092562 0.099669\nvn 0.2251 -0.8665 0.4456\nv 0.014855 -0.091506 0.100971\nvn 0.283 -0.8449 0.4539\nv 0.013747 -0.091297 0.10205\nvn 0.283 -0.8449 0.4539\nv 0.014531 -0.092413 0.099485\nvn 0.283 -0.8449 0.4539\nv 0.014855 -0.091506 0.100971\nvn 0.3213 -0.8123 0.4868\nv 0.014757 -0.090512 0.102693\nvn 0.3213 -0.8123 0.4868\nv 0.013747 -0.091297 0.10205\nvn 0.3213 -0.8123 0.4868\nv 0.017021 -0.090129 0.098159\nvn 0.9194 -0.3619 0.1542\nv 0.016627 -0.091143 0.098131\nvn 0.9194 -0.3619 0.1542\nv 0.017096 -0.091758 0.093886\nvn 0.9194 -0.3619 0.1542\nv 0.013747 -0.091297 0.10205\nvn 0.2639 -0.7914 0.5515\nv 0.014757 -0.090512 0.102693\nvn 0.2639 -0.7914 0.5515\nv 0.013828 -0.089984 0.103895\nvn 0.2639 -0.7914 0.5515\nv 0.015619 -0.090691 0.101443\nvn 0.5502 -0.74 0.3869\nv 0.014855 -0.091506 0.100971\nvn 0.5502 -0.74 0.3869\nv 0.015247 -0.092262 0.098966\nvn 0.5502 -0.74 0.3869\nv 0.014595 -0.089039 0.104648\nvn 0.3363 -0.7386 0.5843\nv 0.013828 -0.089984 0.103895\nvn 0.3363 -0.7386 0.5843\nv 0.014757 -0.090512 0.102693\nvn 0.3363 -0.7386 0.5843\nv 0.015619 -0.090691 0.101443\nvn 0.6287 -0.6959 0.3471\nv 0.015247 -0.092262 0.098966\nvn 0.6287 -0.6959 0.3471\nv 0.016068 -0.091963 0.09808\nvn 0.6287 -0.6959 0.3471\nv 0.016137 -0.09032 0.101094\nvn 0.6876 -0.644 0.3354\nv 0.015619 -0.090691 0.101443\nvn 0.6876 -0.644 0.3354\nv 0.016068 -0.091963 0.09808\nvn 0.6876 -0.644 0.3354\nv 0.014875 -0.08401 0.108127\nvn 0.5322 -0.2882 0.796\nv 0.015767 -0.083193 0.107827\nvn 0.5322 -0.2882 0.796\nv 0.014892 -0.081632 0.108977\nvn 0.5322 -0.2882 0.796\nv 0.016627 -0.091143 0.098131\nvn 0.7842 -0.5521 0.2831\nv 0.016137 -0.09032 0.101094\nvn 0.7842 -0.5521 0.2831\nv 0.016068 -0.091963 0.09808\nvn 0.7842 -0.5521 0.2831\nv 0.015619 -0.090691 0.101443\nvn 0.5044 -0.7352 0.4528\nv 0.014757 -0.090512 0.102693\nvn 0.5044 -0.7352 0.4528\nv 0.014855 -0.091506 0.100971\nvn 0.5044 -0.7352 0.4528\nv 0.014059 -0.095974 0.087768\nvn 0.3452 -0.9189 0.1908\nv 0.014996 -0.096385 0.084097\nvn 0.3452 -0.9189 0.1908\nv 0.015386 -0.095308 0.088576\nvn 0.3452 -0.9189 0.1908\nv 0.016599 -0.089286 0.101478\nvn 0.8375 -0.4749 0.2704\nv 0.016137 -0.09032 0.101094\nvn 0.8375 -0.4749 0.2704\nv 0.016627 -0.091143 0.098131\nvn 0.8375 -0.4749 0.2704\nv 0.016957 -0.088455 0.101201\nvn 0.9227 -0.3337 0.1928\nv 0.016599 -0.089286 0.101478\nvn 0.9227 -0.3337 0.1928\nv 0.016627 -0.091143 0.098131\nvn 0.9227 -0.3337 0.1928\nv 0.016957 -0.088455 0.101201\nvn 0.9078 -0.3591 0.2166\nv 0.016627 -0.091143 0.098131\nvn 0.9078 -0.3591 0.2166\nv 0.017021 -0.090129 0.098159\nvn 0.9078 -0.3591 0.2166\nv 0.015542 -0.088951 0.103906\nvn 0.5681 -0.6637 0.4866\nv 0.014757 -0.090512 0.102693\nvn 0.5681 -0.6637 0.4866\nv 0.015619 -0.090691 0.101443\nvn 0.5681 -0.6637 0.4866\nv 0.016115 -0.088587 0.103505\nvn 0.68 -0.5886 0.4371\nv 0.015542 -0.088951 0.103906\nvn 0.68 -0.5886 0.4371\nv 0.015619 -0.090691 0.101443\nvn 0.68 -0.5886 0.4371\nv 0.016115 -0.088587 0.103505\nvn 0.6986 -0.578 0.4218\nv 0.015619 -0.090691 0.101443\nvn 0.6986 -0.578 0.4218\nv 0.016137 -0.09032 0.101094\nvn 0.6986 -0.578 0.4218\nv 0.015542 -0.088951 0.103906\nvn 0.4934 -0.6746 0.549\nv 0.014595 -0.089039 0.104648\nvn 0.4934 -0.6746 0.549\nv 0.014757 -0.090512 0.102693\nvn 0.4934 -0.6746 0.549\nv 0.015542 -0.088951 0.103906\nvn 0.5149 -0.6295 0.5819\nv 0.015187 -0.088003 0.105247\nvn 0.5149 -0.6295 0.5819\nv 0.014595 -0.089039 0.104648\nvn 0.5149 -0.6295 0.5819\nv 0.016599 -0.089286 0.101478\nvn 0.7953 -0.4888 0.3586\nv 0.016115 -0.088587 0.103505\nvn 0.7953 -0.4888 0.3586\nv 0.016137 -0.09032 0.101094\nvn 0.7953 -0.4888 0.3586\nv 0.014531 -0.092413 0.099485\nvn 0.4517 -0.802 0.3909\nv 0.015247 -0.092262 0.098966\nvn 0.4517 -0.802 0.3909\nv 0.014855 -0.091506 0.100971\nvn 0.4517 -0.802 0.3909\nv 0.01499 -0.087139 0.106152\nvn 0.3517 -0.6246 0.6973\nv 0.013838 -0.087584 0.106334\nvn 0.3517 -0.6246 0.6973\nv 0.014595 -0.089039 0.104648\nvn 0.3517 -0.6246 0.6973\nv 0.016609 -0.087131 0.104\nvn 0.8482 -0.4044 0.3421\nv 0.016115 -0.088587 0.103505\nvn 0.8482 -0.4044 0.3421\nv 0.016599 -0.089286 0.101478\nvn 0.8482 -0.4044 0.3421\nv 0.016028 -0.087468 0.104798\nvn 0.6367 -0.5398 0.5507\nv 0.015187 -0.088003 0.105247\nvn 0.6367 -0.5398 0.5507\nv 0.015542 -0.088951 0.103906\nvn 0.6367 -0.5398 0.5507\nv 0.016028 -0.087468 0.104798\nvn 0.686 -0.5267 0.5019\nv 0.015542 -0.088951 0.103906\nvn 0.686 -0.5267 0.5019\nv 0.016115 -0.088587 0.103505\nvn 0.686 -0.5267 0.5019\nv 0.016922 -0.086447 0.103651\nvn 0.9145 -0.3063 0.2643\nv 0.016599 -0.089286 0.101478\nvn 0.9145 -0.3063 0.2643\nv 0.016957 -0.088455 0.101201\nvn 0.9145 -0.3063 0.2643\nv 0.016922 -0.086447 0.103651\nvn 0.9228 -0.2949 0.2481\nv 0.016609 -0.087131 0.104\nvn 0.9228 -0.2949 0.2481\nv 0.016599 -0.089286 0.101478\nvn 0.9228 -0.2949 0.2481\nv 0.014531 -0.085924 0.107252\nvn 0.2395 -0.5444 0.8039\nv 0.013606 -0.085754 0.107643\nvn 0.2395 -0.5444 0.8039\nv 0.013838 -0.087584 0.106334\nvn 0.2395 -0.5444 0.8039\nv 0.014531 -0.085924 0.107252\nvn 0.336 -0.5593 0.7578\nv 0.013838 -0.087584 0.106334\nvn 0.336 -0.5593 0.7578\nv 0.01499 -0.087139 0.106152\nvn 0.336 -0.5593 0.7578\nv 0.016609 -0.087131 0.104\nvn 0.8095 -0.4159 0.4143\nv 0.016028 -0.087468 0.104798\nvn 0.8095 -0.4159 0.4143\nv 0.016115 -0.088587 0.103505\nvn 0.8095 -0.4159 0.4143\nv 0.015837 -0.085951 0.10625\nvn 0.6272 -0.4937 0.6024\nv 0.015187 -0.088003 0.105247\nvn 0.6236 -0.4941 0.6058\nv 0.016028 -0.087468 0.104798\nvn 0.6321 -0.493 0.5978\nv 0.01499 -0.087139 0.106152\nvn 0.6222 -0.4943 0.607\nv 0.01632 -0.085108 0.106175\nvn 0.7648 -0.3928 0.5107\nv 0.015837 -0.085951 0.10625\nvn 0.7648 -0.3928 0.5107\nv 0.016028 -0.087468 0.104798\nvn 0.7648 -0.3928 0.5107\nv 0.015938 -0.093452 0.094345\nvn 0.546 -0.8027 0.2397\nv 0.01496 -0.094289 0.093771\nvn 0.546 -0.8027 0.2397\nv 0.015396 -0.094352 0.092563\nvn 0.546 -0.8027 0.2397\nv 0.01632 -0.085108 0.106175\nvn 0.8196 -0.3611 0.4448\nv 0.016028 -0.087468 0.104798\nvn 0.8196 -0.3611 0.4448\nv 0.016609 -0.087131 0.104\nvn 0.8196 -0.3611 0.4448\nv 0.016688 -0.084759 0.105613\nvn 0.8731 -0.2936 0.3891\nv 0.01632 -0.085108 0.106175\nvn 0.8731 -0.2936 0.3891\nv 0.016609 -0.087131 0.104\nvn 0.8731 -0.2936 0.3891\nv 0.016922 -0.086447 0.103651\nvn 0.912 -0.2509 0.3244\nv 0.016688 -0.084759 0.105613\nvn 0.912 -0.2509 0.3244\nv 0.016609 -0.087131 0.104\nvn 0.912 -0.2509 0.3244\nv 0.014235 -0.079744 0.109702\nvn 0.1837 -0.2414 0.9529\nv 0.013628 -0.079769 0.109812\nvn 0.1837 -0.2414 0.9529\nv 0.013915 -0.082476 0.109071\nvn 0.1837 -0.2414 0.9529\nv 0.016269 -0.082344 0.107554\nvn 0.7718 -0.2725 0.5746\nv 0.015767 -0.083193 0.107827\nvn 0.7718 -0.2725 0.5746\nv 0.01632 -0.085108 0.106175\nvn 0.7718 -0.2725 0.5746\nv 0.016654 -0.081967 0.107111\nvn 0.8733 -0.2219 0.4337\nv 0.01632 -0.085108 0.106175\nvn 0.8733 -0.2219 0.4337\nv 0.016688 -0.084759 0.105613\nvn 0.8733 -0.2219 0.4337\nv 0.014235 -0.079744 0.109702\nvn 0.3029 -0.2479 0.9202\nv 0.013915 -0.082476 0.109071\nvn 0.3029 -0.2479 0.9202\nv 0.014892 -0.081632 0.108977\nvn 0.3029 -0.2479 0.9202\nv 0.016977 -0.082382 0.106101\nvn 0.9108 -0.1865 0.3684\nv 0.016654 -0.081967 0.107111\nvn 0.9108 -0.1865 0.3684\nv 0.016688 -0.084759 0.105613\nvn 0.9108 -0.1865 0.3684\nv 0.016654 -0.081967 0.107111\nvn 0.8251 -0.24 0.5115\nv 0.016269 -0.082344 0.107554\nvn 0.8251 -0.24 0.5115\nv 0.01632 -0.085108 0.106175\nvn 0.8251 -0.24 0.5115\nv 0.015143 -0.079475 0.109386\nvn 0.3772 -0.2146 0.9009\nv 0.014235 -0.079744 0.109702\nvn 0.3772 -0.2146 0.9009\nv 0.014892 -0.081632 0.108977\nvn 0.3772 -0.2146 0.9009\nv 0.01601 -0.080086 0.108603\nvn 0.5887 -0.2391 0.7722\nv 0.014892 -0.081632 0.108977\nvn 0.5887 -0.2391 0.7722\nv 0.015767 -0.083193 0.107827\nvn 0.5887 -0.2391 0.7722\nv 0.01601 -0.080086 0.108603\nvn 0.5655 -0.2166 0.7958\nv 0.015143 -0.079475 0.109386\nvn 0.5655 -0.2166 0.7958\nv 0.014892 -0.081632 0.108977\nvn 0.5655 -0.2166 0.7958\nv 0.01601 -0.080086 0.108603\nvn 0.7251 -0.2199 0.6526\nv 0.015767 -0.083193 0.107827\nvn 0.7251 -0.2199 0.6526\nv 0.016269 -0.082344 0.107554\nvn 0.7251 -0.2199 0.6526\nv 0.016654 -0.081967 0.107111\nvn 0.8108 -0.1675 0.5609\nv 0.01601 -0.080086 0.108603\nvn 0.8108 -0.1675 0.5609\nv 0.016269 -0.082344 0.107554\nvn 0.8108 -0.1675 0.5609\nv 0.01397 -0.076459 0.110223\nvn 0.1833 -0.1398 0.9731\nv 0.013628 -0.079769 0.109812\nvn 0.1833 -0.1398 0.9731\nv 0.014235 -0.079744 0.109702\nvn 0.1833 -0.1398 0.9731\nv 0.014716 -0.097609 0.077585\nvn 0.3158 -0.9349 0.1621\nv 0.014996 -0.096385 0.084097\nvn 0.3158 -0.9349 0.1621\nv 0.014096 -0.097316 0.080477\nvn 0.3158 -0.9349 0.1621\nv 0.015383 -0.097623 0.07571\nvn 0.4077 -0.9004 0.1517\nv 0.014996 -0.096385 0.084097\nvn 0.4077 -0.9004 0.1517\nv 0.014716 -0.097609 0.077585\nvn 0.4077 -0.9004 0.1517\nv 0.015905 -0.096399 0.081051\nvn 0.691 -0.7139 0.1135\nv 0.016169 -0.097588 0.07197\nvn 0.691 -0.7139 0.1135\nv 0.016566 -0.095812 0.08072\nvn 0.691 -0.7139 0.1135\nv 0.015383 -0.097623 0.07571\nvn 0.6076 -0.7851 0.1204\nv 0.016169 -0.097588 0.07197\nvn 0.6076 -0.7851 0.1204\nv 0.015905 -0.096399 0.081051\nvn 0.6076 -0.7851 0.1204\nv 0.016169 -0.097588 0.07197\nvn 0.7579 -0.6452 0.0965\nv 0.016864 -0.09701 0.070375\nvn 0.7579 -0.6452 0.0965\nv 0.016566 -0.095812 0.08072\nvn 0.7579 -0.6452 0.0965\nv 0.013864 -0.098293 0.074201\nvn 0.2098 -0.9673 0.1427\nv 0.014716 -0.097609 0.077585\nvn 0.2098 -0.9673 0.1427\nv 0.014096 -0.097316 0.080477\nvn 0.2098 -0.9673 0.1427\nv 0.015383 -0.097623 0.07571\nvn 0.3516 -0.9268 0.1319\nv 0.014716 -0.097609 0.077585\nvn 0.3516 -0.9268 0.1319\nv 0.014726 -0.098573 0.070782\nvn 0.3516 -0.9268 0.1319\nv 0.017388 -0.09758 0.049879\nvn 0.8979 -0.4392 -0.0297\nv 0.017501 -0.097528 0.052519\nvn 0.8979 -0.4392 -0.0297\nv 0.017128 -0.098321 0.052975\nvn 0.8979 -0.4392 -0.0297\nv 0.016744 -0.098728 0.049949\nvn 0.87 -0.491 -0.0444\nv 0.017388 -0.09758 0.049879\nvn 0.87 -0.491 -0.0444\nv 0.017128 -0.098321 0.052975\nvn 0.87 -0.491 -0.0444\nv 0.015383 -0.097623 0.07571\nvn 0.4221 -0.8989 0.1172\nv 0.014726 -0.098573 0.070782\nvn 0.4221 -0.8989 0.1172\nv 0.01529 -0.098781 0.067156\nvn 0.4221 -0.8989 0.1172\nv 0.015383 -0.097623 0.07571\nvn 0.5447 -0.8318 0.1067\nv 0.01529 -0.098781 0.067156\nvn 0.5447 -0.8318 0.1067\nv 0.016169 -0.097588 0.07197\nvn 0.5447 -0.8318 0.1067\nv 0.01529 -0.098781 0.067156\nvn 0.5764 -0.8115 0.0959\nv 0.016395 -0.098159 0.065776\nvn 0.5764 -0.8115 0.0959\nv 0.016169 -0.097588 0.07197\nvn 0.5764 -0.8115 0.0959\nv 0.016395 -0.098159 0.065776\nvn 0.8028 -0.5925 0.0663\nv 0.017039 -0.097891 0.060379\nvn 0.8028 -0.5925 0.0663\nv 0.016864 -0.09701 0.070375\nvn 0.8028 -0.5925 0.0663\nv 0.016395 -0.098159 0.065776\nvn 0.5662 -0.82 0.0839\nv 0.01529 -0.098781 0.067156\nvn 0.5662 -0.82 0.0839\nv 0.015621 -0.099239 0.06045\nvn 0.5662 -0.82 0.0839\nv 0.01529 -0.098781 0.067156\nvn 0.3725 -0.9245 0.0815\nv 0.014527 -0.099703 0.060182\nvn 0.3725 -0.9245 0.0815\nv 0.015621 -0.099239 0.06045\nvn 0.3725 -0.9245 0.0815\nv 0.015621 -0.099239 0.06045\nvn 0.6002 -0.7964 0.0742\nv 0.016313 -0.098987 0.05756\nvn 0.6002 -0.7964 0.0742\nv 0.016395 -0.098159 0.065776\nvn 0.6002 -0.7964 0.0742\nv 0.017039 -0.097891 0.060379\nvn 0.7572 -0.6507 0.0579\nv 0.016395 -0.098159 0.065776\nvn 0.7572 -0.6507 0.0579\nv 0.016313 -0.098987 0.05756\nvn 0.7572 -0.6507 0.0579\nv 0.016744 -0.098728 0.049949\nvn 0.8655 -0.4916 -0.0957\nv 0.016729 -0.098373 0.047983\nvn 0.8655 -0.4916 -0.0957\nv 0.017388 -0.09758 0.049879\nvn 0.8655 -0.4916 -0.0957\nv 0.017128 -0.098321 0.052975\nvn 0.7742 -0.6313 0.046\nv 0.017039 -0.097891 0.060379\nvn 0.7742 -0.6313 0.046\nv 0.016313 -0.098987 0.05756\nvn 0.7742 -0.6313 0.046\nv 0.016048 -0.098809 0.046846\nvn 0.7555 -0.6189 -0.2149\nv 0.016729 -0.098373 0.047983\nvn 0.7555 -0.6189 -0.2149\nv 0.016261 -0.099032 0.048239\nvn 0.7555 -0.6189 -0.2149\nv 0.015621 -0.099239 0.06045\nvn 0.3777 -0.924 0.0594\nv 0.014527 -0.099703 0.060182\nvn 0.3689 -0.9277 0.0576\nv 0.015769 -0.099621 0.053566\nvn 0.3746 -0.9253 0.0588\nv 0.015621 -0.099239 0.06045\nvn 0.547 -0.8351 0.0581\nv 0.015769 -0.099621 0.053566\nvn 0.547 -0.8351 0.0581\nv 0.016313 -0.098987 0.05756\nvn 0.547 -0.8351 0.0581\nv 0.017128 -0.098321 0.052975\nvn 0.9015 -0.4312 0.0359\nv 0.017517 -0.097079 0.058126\nvn 0.9015 -0.4312 0.0359\nv 0.017039 -0.097891 0.060379\nvn 0.9015 -0.4312 0.0359\nv 0.014021 -0.100206 0.052508\nvn 0.1928 -0.981 0.023\nv 0.014517 -0.100175 0.049646\nvn 0.1928 -0.981 0.023\nv 0.014713 -0.10005 0.053345\nvn 0.1928 -0.981 0.023\nv 0.013486 -0.100314 0.047548\nvn 0.1147 -0.9934 0.0093\nv 0.014517 -0.100175 0.049646\nvn 0.1147 -0.9934 0.0093\nv 0.014021 -0.100206 0.052508\nvn 0.1147 -0.9934 0.0093\nv 0.014713 -0.10005 0.053345\nvn 0.3658 -0.929 0.0571\nv 0.009232 -0.100388 0.045148\nvn 0.1143 -0.9333 -0.3403\nv 0.009895 -0.099863 0.043932\nvn 0.1143 -0.9333 -0.3403\nv 0.012543 -0.100052 0.04534\nvn 0.1143 -0.9333 -0.3403\nv 0.009232 -0.100388 0.045148\nvn 0.1115 -0.9652 -0.2367\nv 0.012543 -0.100052 0.04534\nvn 0.1115 -0.9652 -0.2367\nv 0.012981 -0.100265 0.046416\nvn 0.1115 -0.9652 -0.2367\nv 0.009232 -0.100388 0.045148\nvn 0.0792 -0.9303 -0.3582\nv 0.005779 -0.100242 0.044006\nvn 0.0792 -0.9303 -0.3582\nv 0.009895 -0.099863 0.043932\nvn 0.0792 -0.9303 -0.3582\nv 0.015966 -0.099465 0.049296\nvn 0.6159 -0.7878 -0.0003\nv 0.016622 -0.098953 0.051933\nvn 0.6159 -0.7878 -0.0003\nv 0.015769 -0.099621 0.053566\nvn 0.6159 -0.7878 -0.0003\nv 0.014713 -0.10005 0.053345\nvn 0.3723 -0.9278 0.0236\nv 0.015278 -0.099918 0.049621\nvn 0.3723 -0.9278 0.0236\nv 0.015769 -0.099621 0.053566\nvn 0.3723 -0.9278 0.0236\nv 0.015278 -0.099918 0.049621\nvn 0.5481 -0.8364 -0.0052\nv 0.015966 -0.099465 0.049296\nvn 0.5481 -0.8364 -0.0052\nv 0.015769 -0.099621 0.053566\nvn 0.5481 -0.8364 -0.0052\nv 0.013862 -0.099412 0.045014\nvn 0.4041 -0.8136 -0.418\nv 0.014954 -0.099321 0.045892\nvn 0.4041 -0.8136 -0.418\nv 0.013944 -0.099856 0.045959\nvn 0.4041 -0.8136 -0.418\nv 0.013944 -0.099856 0.045959\nvn 0.4327 -0.8523 -0.2939\nv 0.014954 -0.099321 0.045892\nvn 0.4405 -0.8497 -0.2898\nv 0.014487 -0.100035 0.047275\nvn 0.4334 -0.8521 -0.2935\nv 0.014487 -0.100035 0.047275\nvn 0.2802 -0.9291 -0.2415\nv 0.012981 -0.100265 0.046416\nvn 0.2802 -0.9291 -0.2415\nv 0.013944 -0.099856 0.045959\nvn 0.2802 -0.9291 -0.2415\nv 0.014487 -0.100035 0.047275\nvn 0.2295 -0.9627 -0.1436\nv 0.013486 -0.100314 0.047548\nvn 0.2295 -0.9627 -0.1436\nv 0.012981 -0.100265 0.046416\nvn 0.2295 -0.9627 -0.1436\nv 0.016986 -0.095158 0.080539\nvn 0.9325 -0.3552 0.0652\nv 0.01731 -0.095945 0.071617\nvn 0.9325 -0.3552 0.0652\nv 0.017171 -0.093258 0.08825\nvn 0.9325 -0.3552 0.0652\nv 0.014096 -0.097316 0.080477\nvn 0.2733 -0.9458 0.1755\nv 0.014996 -0.096385 0.084097\nvn 0.2733 -0.9458 0.1755\nv 0.014059 -0.095974 0.087768\nvn 0.2733 -0.9458 0.1755\nv 0.016566 -0.095812 0.08072\nvn 0.8489 -0.5218 0.0848\nv 0.016864 -0.09701 0.070375\nvn 0.8489 -0.5218 0.0848\nv 0.016986 -0.095158 0.080539\nvn 0.8489 -0.5218 0.0848\nv 0.016864 -0.09701 0.070375\nvn 0.8868 -0.4563 0.0725\nv 0.01731 -0.095945 0.071617\nvn 0.8868 -0.4563 0.0725\nv 0.016986 -0.095158 0.080539\nvn 0.8868 -0.4563 0.0725\nv 0.016395 -0.098159 0.065776\nvn 0.7484 -0.6573 0.088\nv 0.016864 -0.09701 0.070375\nvn 0.7484 -0.6573 0.088\nv 0.016169 -0.097588 0.07197\nvn 0.7484 -0.6573 0.088\nv 0.01731 -0.095945 0.071617\nvn 0.9132 -0.4046 0.048\nv 0.017039 -0.097891 0.060379\nvn 0.9132 -0.4046 0.048\nv 0.017517 -0.097079 0.058126\nvn 0.9132 -0.4046 0.048\nv 0.014726 -0.098573 0.070782\nvn 0.2295 -0.9636 0.137\nv 0.014716 -0.097609 0.077585\nvn 0.2295 -0.9636 0.137\nv 0.013864 -0.098293 0.074201\nvn 0.2295 -0.9636 0.137\nv 0.017128 -0.098321 0.052975\nvn 0.7491 -0.6614 0.0372\nv 0.016313 -0.098987 0.05756\nvn 0.7491 -0.6614 0.0372\nv 0.016622 -0.098953 0.051933\nvn 0.7491 -0.6614 0.0372\nv 0.015769 -0.099621 0.053566\nvn 0.6525 -0.7571 0.0313\nv 0.016622 -0.098953 0.051933\nvn 0.6525 -0.7571 0.0313\nv 0.016313 -0.098987 0.05756\nvn 0.6525 -0.7571 0.0313\nv 0.016566 -0.095812 0.08072\nvn 0.8466 -0.5211 0.1088\nv 0.017171 -0.093258 0.08825\nvn 0.8486 -0.518 0.1076\nv 0.01632 -0.094466 0.089055\nvn 0.8455 -0.5227 0.1094\nv 0.014102 -0.09921 0.066487\nvn 0.1629 -0.9791 0.1214\nv 0.014726 -0.098573 0.070782\nvn 0.1629 -0.9791 0.1214\nv 0.013864 -0.098293 0.074201\nvn 0.1629 -0.9791 0.1214\nv 0.017039 -0.097891 0.060379\nvn 0.8966 -0.4394 0.0544\nv 0.01731 -0.095945 0.071617\nvn 0.8966 -0.4394 0.0544\nv 0.016864 -0.09701 0.070375\nvn 0.8966 -0.4394 0.0544\nv 0.014102 -0.09921 0.066487\nvn 0.2882 -0.9525 0.0985\nv 0.01529 -0.098781 0.067156\nvn 0.2901 -0.9523 0.0949\nv 0.014726 -0.098573 0.070782\nvn 0.2878 -0.9525 0.0993\nv 0.014527 -0.099703 0.060182\nvn 0.2906 -0.9522 0.0941\nv 0.017517 -0.097079 0.058126\nvn 0.9112 -0.4109 0.0303\nv 0.017128 -0.098321 0.052975\nvn 0.9112 -0.4109 0.0303\nv 0.017501 -0.097528 0.052519\nvn 0.9112 -0.4109 0.0303\nv 0.014713 -0.10005 0.053345\nvn 0.1562 -0.9862 0.0543\nv 0.014527 -0.099703 0.060182\nvn 0.1562 -0.9862 0.0543\nv 0.014021 -0.100206 0.052508\nvn 0.1562 -0.9862 0.0543\nv 0.016622 -0.098953 0.051933\nvn 0.7959 -0.6051 -0.0197\nv 0.016744 -0.098728 0.049949\nvn 0.7959 -0.6051 -0.0197\nv 0.017128 -0.098321 0.052975\nvn 0.7959 -0.6051 -0.0197\nv 0.016744 -0.098728 0.049949\nvn 0.7036 -0.7096 -0.0373\nv 0.016622 -0.098953 0.051933\nvn 0.7036 -0.7096 -0.0373\nv 0.015966 -0.099465 0.049296\nvn 0.7036 -0.7096 -0.0373\nv 0.014713 -0.10005 0.053345\nvn 0.3205 -0.9471 0.0151\nv 0.014517 -0.100175 0.049646\nvn 0.3205 -0.9471 0.0151\nv 0.015278 -0.099918 0.049621\nvn 0.3205 -0.9471 0.0151\nv 0.016261 -0.099032 0.048239\nvn 0.7204 -0.6888 -0.081\nv 0.016744 -0.098728 0.049949\nvn 0.7204 -0.6888 -0.081\nv 0.015966 -0.099465 0.049296\nvn 0.7204 -0.6888 -0.081\nv 0.016261 -0.099032 0.048239\nvn 0.7887 -0.6038 -0.1154\nv 0.016729 -0.098373 0.047983\nvn 0.7887 -0.6038 -0.1154\nv 0.016744 -0.098728 0.049949\nvn 0.7887 -0.6038 -0.1154\nv 0.014954 -0.099321 0.045892\nvn 0.6142 -0.7229 -0.3166\nv 0.016048 -0.098809 0.046846\nvn 0.6142 -0.7229 -0.3166\nv 0.015347 -0.099571 0.047227\nvn 0.6142 -0.7229 -0.3166\nv 0.015347 -0.099571 0.047227\nvn 0.6624 -0.7172 -0.2163\nv 0.016048 -0.098809 0.046846\nvn 0.6624 -0.7172 -0.2163\nv 0.016261 -0.099032 0.048239\nvn 0.6624 -0.7172 -0.2163\nv 0.015347 -0.099571 0.047227\nvn 0.6166 -0.7738 -0.1448\nv 0.016261 -0.099032 0.048239\nvn 0.6166 -0.7738 -0.1448\nv 0.015966 -0.099465 0.049296\nvn 0.6166 -0.7738 -0.1448\nv 0.015278 -0.099918 0.049621\nvn 0.4664 -0.8772 -0.1137\nv 0.014487 -0.100035 0.047275\nvn 0.4664 -0.8772 -0.1137\nv 0.015347 -0.099571 0.047227\nvn 0.4664 -0.8772 -0.1137\nv 0.015278 -0.099918 0.049621\nvn 0.5102 -0.8531 -0.1089\nv 0.015347 -0.099571 0.047227\nvn 0.5102 -0.8531 -0.1089\nv 0.015966 -0.099465 0.049296\nvn 0.5102 -0.8531 -0.1089\nv 0.014487 -0.100035 0.047275\nvn 0.3178 -0.9463 -0.0601\nv 0.015278 -0.099918 0.049621\nvn 0.3178 -0.9463 -0.0601\nv 0.014517 -0.100175 0.049646\nvn 0.3178 -0.9463 -0.0601\nv 0.015347 -0.099571 0.047227\nvn 0.4414 -0.8493 -0.2894\nv 0.012543 -0.100052 0.04534\nvn 0.3076 -0.8505 -0.4267\nv 0.013862 -0.099412 0.045014\nvn 0.31 -0.8525 -0.4209\nv 0.013944 -0.099856 0.045959\nvn 0.3075 -0.8504 -0.4269\nv 0.012985 -0.099458 0.04446\nvn 0.3103 -0.8527 -0.4202\nv 0.014487 -0.100035 0.047275\nvn 0.253 -0.9656 -0.0604\nv 0.014517 -0.100175 0.049646\nvn 0.253 -0.9656 -0.0604\nv 0.013486 -0.100314 0.047548\nvn 0.253 -0.9656 -0.0604\nv 0.012981 -0.100265 0.046416\nvn 0.256 -0.923 -0.2872\nv 0.012543 -0.100052 0.04534\nvn 0.256 -0.923 -0.2872\nv 0.013944 -0.099856 0.045959\nvn 0.256 -0.923 -0.2872\nv 0.009895 -0.099863 0.043932\nvn 0.1942 -0.8553 -0.4803\nv 0.012985 -0.099458 0.04446\nvn 0.1942 -0.8553 -0.4803\nv 0.012543 -0.100052 0.04534\nvn 0.1942 -0.8553 -0.4803\nv 0.009232 -0.100388 0.045148\nvn 0.0553 -0.9962 -0.0674\nv 0.012981 -0.100265 0.046416\nvn 0.0553 -0.9962 -0.0674\nv 0.013486 -0.100314 0.047548\nvn 0.0553 -0.9962 -0.0674\nv 0.005029 -0.099808 0.043149\nvn 0.0706 -0.8639 -0.4987\nv 0.009895 -0.099863 0.043932\nvn 0.0706 -0.8639 -0.4987\nv 0.005779 -0.100242 0.044006\nvn 0.0706 -0.8639 -0.4987\nv 7.17092e-18 -0.100231 0.043612\nvn 0.0306 -0.8809 -0.4723\nv 0.005029 -0.099808 0.043149\nvn 0.0306 -0.8809 -0.4723\nv 0.005779 -0.100242 0.044006\nvn 0.0306 -0.8809 -0.4723\nv 0.009232 -0.100388 0.045148\nvn 0.0268 -0.9782 -0.2061\nv 7.0247e-18 -0.100569 0.044806\nvn 0.0268 -0.9782 -0.2061\nv 0.005779 -0.100242 0.044006\nvn 0.0268 -0.9782 -0.2061\nv 7.0247e-18 -0.100569 0.044806\nvn 0.0168 -0.9622 -0.2718\nv 7.17092e-18 -0.100231 0.043612\nvn 0.0168 -0.9622 -0.2718\nv 0.005779 -0.100242 0.044006\nvn 0.0168 -0.9622 -0.2718\nv 0.016986 -0.095158 0.080539\nvn 0.8497 -0.5162 0.1069\nv 0.01632 -0.094466 0.089055\nvn 0.6167 -0.7719 0.1545\nv 0.015386 -0.095308 0.088576\nvn 0.6167 -0.7719 0.1545\nv 0.015905 -0.096399 0.081051\nvn 0.6167 -0.7719 0.1545\nv 0.015905 -0.096399 0.081051\nvn 0.6949 -0.7064 0.1346\nv 0.016566 -0.095812 0.08072\nvn 0.6949 -0.7064 0.1346\nv 0.01632 -0.094466 0.089055\nvn 0.6949 -0.7064 0.1346\nv 0.015905 -0.096399 0.081051\nvn 0.5148 -0.8427 0.1577\nv 0.015386 -0.095308 0.088576\nvn 0.5148 -0.8427 0.1577\nv 0.014996 -0.096385 0.084097\nvn 0.5148 -0.8427 0.1577\nv 0.015905 -0.096399 0.081051\nvn 0.4869 -0.8606 0.1495\nv 0.014996 -0.096385 0.084097\nvn 0.4869 -0.8606 0.1495\nv 0.015383 -0.097623 0.07571\nvn 0.4869 -0.8606 0.1495\nv 0.017342 -0.071996 0.079401\nvn 0.0094 0.999 -0.0435\nv 0.015255 -0.071973 0.079478\nvn 0.0094 0.999 -0.0435\nv 0.017366 -0.071951 0.080436\nvn 0.0094 0.999 -0.0435\nv 0.015255 -0.071973 0.079478\nvn 0.0375 0.9937 -0.1053\nv 0.015255 -0.071856 0.080581\nvn 0.0375 0.9937 -0.1053\nv 0.017366 -0.071951 0.080436\nvn 0.0375 0.9937 -0.1053\nv 0.001991 -0.096371 0.0861\nvn -0.9994 0.0308 0.0142\nv 0.001977 -0.097359 0.087277\nvn -0.9994 0.0308 0.0142\nv 0.001996 -0.096317 0.08634\nvn -0.9994 0.0308 0.0142\nv 0.001979 -0.101453 0.094865\nvn -0.9083 -0.3926 -0.1446\nv 0.001833 -0.100325 0.092718\nvn -0.9083 -0.3926 -0.1446\nv 0.001975 -0.09983 0.090487\nvn -0.9083 -0.3926 -0.1446\nv 0.000593 -0.098635 0.091665\nvn -0.1214 -0.8452 -0.5205\nv 1.28649e-18 -0.098548 0.091662\nvn -0.1214 -0.8452 -0.5205\nv 0.000518 -0.097652 0.090086\nvn -0.1214 -0.8452 -0.5205\nv 0.000593 -0.098635 0.091665\nvn -0.4352 -0.7735 -0.4608\nv 0.000518 -0.097652 0.090086\nvn -0.4334 -0.7739 -0.4618\nv 0.001026 -0.09884 0.091601\nvn -0.429 -0.775 -0.4641\nv 1.28649e-18 -0.098548 0.091662\nvn -0.2055 -0.8202 -0.5339\nv 1.54171e-18 -0.097191 0.089578\nvn -0.2055 -0.8202 -0.5339\nv 0.000518 -0.097652 0.090086\nvn -0.2055 -0.8202 -0.5339\nv 0.001833 -0.100325 0.092718\nvn -0.8092 -0.5199 -0.2737\nv 0.001533 -0.099504 0.092045\nvn -0.8092 -0.5199 -0.2737\nv 0.001767 -0.09879 0.089999\nvn -0.8092 -0.5199 -0.2737\nv 0.001533 -0.099504 0.092045\nvn -0.5451 -0.7125 -0.4418\nv 0.001026 -0.09884 0.091601\nvn -0.5451 -0.7125 -0.4418\nv 0.001187 -0.09792 0.089918\nvn -0.5451 -0.7125 -0.4418\nv 0.001833 -0.100325 0.092718\nvn -0.9622 -0.2465 -0.1156\nv 0.001767 -0.09879 0.089999\nvn -0.9622 -0.2465 -0.1156\nv 0.001975 -0.09983 0.090487\nvn -0.9622 -0.2465 -0.1156\nv 0.001533 -0.099504 0.092045\nvn -0.7862 -0.5501 -0.2816\nv 0.001187 -0.09792 0.089918\nvn -0.7862 -0.5501 -0.2816\nv 0.001767 -0.09879 0.089999\nvn -0.7862 -0.5501 -0.2816\nv 0.001187 -0.09792 0.089918\nvn -0.4275 -0.7753 -0.4649\nv 0.000518 -0.097652 0.090086\nvn -0.0632 -0.7707 -0.634\nv 1.54171e-18 -0.097191 0.089578\nvn -0.0632 -0.7707 -0.634\nv 1.68083e-18 -0.096256 0.088442\nvn -0.0632 -0.7707 -0.634\nv 6.56166e-19 -0.099983 0.096809\nvn -1 0 -1.22465e-16\nv 9.50693e-19 -0.099604 0.094404\nvn -1 0 -1.22465e-16\nv 8.43659e-19 -0.09983 0.095278\nvn -1 0 -1.22465e-16\nv 6.58248e-19 -0.10003 0.096792\nvn -1 0 -1.22465e-16\nv 0.001036 -0.100263 0.096766\nvn -0.2204 -0.9669 -0.1284\nv 6.58248e-19 -0.10003 0.096792\nvn -0.2193 -0.9673 -0.1277\nv 0.00102 -0.100054 0.095224\nvn -0.2203 -0.9669 -0.1284\nv 8.43659e-19 -0.09983 0.095278\nvn -0.2192 -0.9673 -0.1276\nv 0.001187 -0.09792 0.089918\nvn -0.4237 -0.6876 -0.5896\nv 0.000518 -0.097652 0.090086\nvn -0.4237 -0.6876 -0.5896\nv 0.000999 -0.09639 0.088268\nvn -0.4237 -0.6876 -0.5896\nv 0.000518 -0.097652 0.090086\nvn -0.2068 -0.7772 -0.5943\nv 1.68083e-18 -0.096256 0.088442\nvn -0.2068 -0.7772 -0.5943\nv 0.000999 -0.09639 0.088268\nvn -0.2068 -0.7772 -0.5943\nv 1.54171e-18 -0.097191 0.089578\nvn -1 0 -1.22465e-16\nv 1.69883e-18 -0.096016 0.088295\nvn -1 0 -1.22465e-16\nv 1.68083e-18 -0.096256 0.088442\nvn -1 0 -1.22465e-16\nv 0.001036 -0.100263 0.096766\nvn -0.6701 -0.7365 -0.0927\nv 0.00102 -0.100054 0.095224\nvn -0.6701 -0.7365 -0.0927\nv 0.001463 -0.100564 0.096071\nvn -0.6701 -0.7365 -0.0927\nv 0.001187 -0.09792 0.089918\nvn -0.6083 -0.6153 -0.5014\nv 0.000999 -0.09639 0.088268\nvn -0.6083 -0.6153 -0.5014\nv 0.001453 -0.096548 0.087912\nvn -0.6083 -0.6153 -0.5014\nv 0.001767 -0.09879 0.089999\nvn -0.7217 -0.5231 -0.4534\nv 0.001187 -0.09792 0.089918\nvn -0.7217 -0.5231 -0.4534\nv 0.001453 -0.096548 0.087912\nvn -0.7217 -0.5231 -0.4534\nv 8.43659e-19 -0.09983 0.095278\nvn -0.0417 -0.9673 -0.2502\nv 9.50693e-19 -0.099604 0.094404\nvn -0.0417 -0.9673 -0.2502\nv 0.000523 -0.099382 0.093457\nvn -0.0417 -0.9673 -0.2502\nv 0.001767 -0.09879 0.089999\nvn -0.8131 -0.4536 -0.3649\nv 0.001453 -0.096548 0.087912\nvn -0.8131 -0.4536 -0.3649\nv 0.001777 -0.096847 0.087562\nvn -0.8131 -0.4536 -0.3649\nv 0.001767 -0.09879 0.089999\nvn -0.9445 -0.255 -0.2072\nv 0.001777 -0.096847 0.087562\nvn -0.9445 -0.255 -0.2072\nv 0.001977 -0.097359 0.087277\nvn -0.9445 -0.255 -0.2072\nv 8.43659e-19 -0.09983 0.095278\nvn -0.3661 -0.8737 -0.3204\nv 0.000523 -0.099382 0.093457\nvn -0.3661 -0.8737 -0.3204\nv 0.00102 -0.099675 0.09369\nvn -0.3661 -0.8737 -0.3204\nv 0.00102 -0.100054 0.095224\nvn -0.2204 -0.9469 -0.234\nv 8.43659e-19 -0.09983 0.095278\nvn -0.2204 -0.9469 -0.234\nv 0.00102 -0.099675 0.09369\nvn -0.2204 -0.9469 -0.234\nv 0.001975 -0.09983 0.090487\nvn -0.9298 -0.2913 -0.2251\nv 0.001767 -0.09879 0.089999\nvn -0.9298 -0.2913 -0.2251\nv 0.001977 -0.097359 0.087277\nvn -0.9298 -0.2913 -0.2251\nv 0.001463 -0.100564 0.096071\nvn -0.5802 -0.7954 -0.1751\nv 0.00102 -0.100054 0.095224\nvn -0.5802 -0.7954 -0.1751\nv 0.001451 -0.100043 0.093742\nvn -0.5802 -0.7954 -0.1751\nv 0.00102 -0.100054 0.095224\nvn -0.6239 -0.7587 -0.1875\nv 0.00102 -0.099675 0.09369\nvn -0.6239 -0.7587 -0.1875\nv 0.001451 -0.100043 0.093742\nvn -0.6239 -0.7587 -0.1875\nv 9.50693e-19 -0.099604 0.094404\nvn -0.246 -0.9045 -0.3484\nv 1.28649e-18 -0.098548 0.091662\nvn -0.246 -0.9045 -0.3484\nv 0.000523 -0.099382 0.093457\nvn -0.246 -0.9045 -0.3484\nv 0.001463 -0.100564 0.096071\nvn -0.7906 -0.5983 -0.13\nv 0.001451 -0.100043 0.093742\nvn -0.7906 -0.5983 -0.13\nv 0.001833 -0.100325 0.092718\nvn -0.7906 -0.5983 -0.13\nv 0.001777 -0.101003 0.09599\nvn -0.8181 -0.5601 -0.1303\nv 0.001463 -0.100564 0.096071\nvn -0.8181 -0.5601 -0.1303\nv 0.001833 -0.100325 0.092718\nvn -0.8181 -0.5601 -0.1303\nv 0.001777 -0.101003 0.09599\nvn -0.9636 -0.2581 -0.0701\nv 0.001833 -0.100325 0.092718\nvn -0.9636 -0.2581 -0.0701\nv 0.001979 -0.101453 0.094865\nvn -0.9636 -0.2581 -0.0701\nv 0.001451 -0.100043 0.093742\nvn -0.6061 -0.7492 -0.2672\nv 0.00102 -0.099675 0.09369\nvn -0.6061 -0.7492 -0.2672\nv 0.001533 -0.099504 0.092045\nvn -0.6061 -0.7492 -0.2672\nv 0.00102 -0.099675 0.09369\nvn -0.3503 -0.8694 -0.3485\nv 0.000523 -0.099382 0.093457\nvn -0.3503 -0.8694 -0.3485\nv 0.001026 -0.09884 0.091601\nvn -0.3503 -0.8694 -0.3485\nv 0.00102 -0.099675 0.09369\nvn -0.6633 -0.6943 -0.2793\nv 0.001026 -0.09884 0.091601\nvn -0.6633 -0.6943 -0.2793\nv 0.001533 -0.099504 0.092045\nvn -0.6633 -0.6943 -0.2793\nv 0.000523 -0.099382 0.093457\nvn -0.1319 -0.9131 -0.3857\nv 1.28649e-18 -0.098548 0.091662\nvn -0.1319 -0.9131 -0.3857\nv 0.000593 -0.098635 0.091665\nvn -0.1319 -0.9131 -0.3857\nv 0.000523 -0.099382 0.093457\nvn -0.4429 -0.8213 -0.3595\nv 0.000593 -0.098635 0.091665\nvn -0.4429 -0.8213 -0.3595\nv 0.001026 -0.09884 0.091601\nvn -0.4429 -0.8213 -0.3595\nv 0.001833 -0.100325 0.092718\nvn -0.8611 -0.4711 -0.1912\nv 0.001451 -0.100043 0.093742\nvn -0.8611 -0.4711 -0.1912\nv 0.001533 -0.099504 0.092045\nvn -0.8611 -0.4711 -0.1912\nv 0.001979 -0.101566 0.109499\nvn -0.9219 -0.3875 -0.0023\nv 0.001723 -0.10095 0.108504\nvn -0.9219 -0.3875 -0.0023\nv 0.001777 -0.101003 0.09599\nvn -0.9219 -0.3875 -0.0023\nv 0.001979 -0.101453 0.094865\nvn -0.9148 -0.4039 -0.0031\nv 0.001979 -0.101566 0.109499\nvn -0.9148 -0.4039 -0.0031\nv 0.001777 -0.101003 0.09599\nvn -0.9148 -0.4039 -0.0031\nv 0.001777 -0.101003 0.09599\nvn -0.8139 -0.581 -0.001\nv 0.001723 -0.10095 0.108504\nvn -0.8139 -0.581 -0.001\nv 0.001463 -0.100564 0.096071\nvn -0.8139 -0.581 -0.001\nv 0.001723 -0.10095 0.108504\nvn -0.7396 -0.6731 -0.0054\nv 0.001148 -0.100319 0.108527\nvn -0.7396 -0.6731 -0.0054\nv 0.001463 -0.100564 0.096071\nvn -0.7396 -0.6731 -0.0054\nv 0.001463 -0.100564 0.096071\nvn -0.5744 -0.8185 0.0016\nv 0.001148 -0.100319 0.108527\nvn -0.5744 -0.8185 0.0016\nv 0.001036 -0.100263 0.096766\nvn -0.5744 -0.8185 0.0016\nv 0.001036 -0.100263 0.096766\nvn -0.2192 -0.9757 -0.0025\nv 0.001148 -0.100319 0.108527\nvn -0.2192 -0.9757 -0.0025\nv 6.58248e-19 -0.10003 0.096792\nvn -0.2192 -0.9757 -0.0025\nv 0.001148 -0.100319 0.108527\nvn -0.2396 -0.9709 -0.0004\nv -7.31849e-19 -0.100035 0.108143\nvn -0.2396 -0.9709 -0.0004\nv 6.58248e-19 -0.10003 0.096792\nvn -0.2396 -0.9709 -0.0004\nv -7.31849e-19 -0.100035 0.108143\nvn -1 0 -1.22465e-16\nv -8.21248e-19 -0.099962 0.108873\nvn -1 0 -1.22465e-16\nv 0.016582 0.027368 0.09407\nvn -0.3407 0.0013 0.9402\nv 0.016629 0.012795 0.094107\nvn -0.3407 0.0013 0.9402\nv 0.017305 0.026919 0.094332\nvn -0.3407 0.0013 0.9402\nv 0.016093 0.018739 0.093747\nvn -0.6083 0.0048 0.7937\nv 0.016582 0.027368 0.09407\nvn -0.6083 0.0048 0.7937\nv 0.016133 0.027636 0.093724\nvn -0.6083 0.0048 0.7937\nv 0.01571 0.027878 0.093264\nvn -0.7354 0.005 0.6776\nv 0.016093 0.018739 0.093747\nvn -0.7354 0.005 0.6776\nv 0.016133 0.027636 0.093724\nvn -0.7354 0.005 0.6776\nv 0.016845 -0.003384 0.094196\nvn -0.3014 0.0013 0.9535\nv 0.017375 0.01386 0.09434\nvn -0.3018 0.0011 0.9534\nv 0.016629 0.012795 0.094107\nvn -0.2977 -0.0005 0.9546\nv 0.015311 0.021536 0.092493\nvn -0.9177 0.0096 0.3971\nv 0.01571 0.027878 0.093264\nvn -0.9177 0.0096 0.3971\nv 0.015383 0.028059 0.092503\nvn -0.9177 0.0096 0.3971\nv 0.016629 0.012795 0.094107\nvn -0.5849 0.0017 0.8111\nv 0.01604 0.006742 0.093694\nvn -0.5849 0.0017 0.8111\nv 0.016142 -0.002994 0.093788\nvn -0.5849 0.0017 0.8111\nv 0.015298 0.000291 0.092303\nvn -0.9268 -0.0028 0.3754\nv 0.015631 0.008166 0.093184\nvn -0.9268 -0.0028 0.3754\nv 0.015311 0.021536 0.092493\nvn -0.9268 -0.0028 0.3754\nv 0.015298 0.000291 0.092303\nvn -0.9441 0.0031 0.3297\nv 0.015454 -0.010946 0.092857\nvn -0.9441 0.0031 0.3297\nv 0.015631 0.008166 0.093184\nvn -0.9441 0.0031 0.3297\nv 0.0158 -0.017187 0.093424\nvn -0.7522 0.0012 0.6589\nv 0.016142 -0.002994 0.093788\nvn -0.7522 0.0012 0.6589\nv 0.015631 0.008166 0.093184\nvn -0.7522 0.0012 0.6589\nv 0.016982 -0.013187 0.094255\nvn -0.1454 -0.001 0.9894\nv 0.017856 -0.026555 0.09437\nvn -0.1454 -0.001 0.9894\nv 0.017375 0.01386 0.09434\nvn -0.1454 -0.001 0.9894\nv 0.016845 -0.003384 0.094196\nvn -0.5024 -0.0013 0.8646\nv 0.016629 0.012795 0.094107\nvn -0.5026 -0.0019 0.8645\nv 0.016142 -0.002994 0.093788\nvn -0.501 0.0022 0.8655\nv 0.016263 -0.021414 0.093873\nvn -0.6934 0.0007 0.7205\nv 0.016331 -0.013693 0.093931\nvn -0.6934 0.0007 0.7205\nv 0.0158 -0.017187 0.093424\nvn -0.6934 0.0007 0.7205\nv 0.017305 0.026919 0.094332\nvn -0.2971 -0.001 0.9549\nv 0.015631 0.008166 0.093184\nvn -0.8583 -0.0009 0.5132\nv 0.015454 -0.010946 0.092857\nvn -0.8583 -0.0009 0.5132\nv 0.0158 -0.017187 0.093424\nvn -0.8583 -0.0009 0.5132\nv 0.017305 0.026919 0.094332\nvn -0.0608 0.0003 0.9982\nv 0.0158 -0.017187 0.093424\nvn -0.7774 -0.0044 0.629\nv 0.015509 -0.02799 0.092988\nvn -0.7774 -0.0044 0.629\nv 0.016205 -0.027594 0.093851\nvn -0.7774 -0.0044 0.629\nv 0.0158 -0.017187 0.093424\nvn -0.6786 0.0038 0.7345\nv 0.016205 -0.027594 0.093851\nvn -0.6786 0.0038 0.7345\nv 0.016263 -0.021414 0.093873\nvn -0.6786 0.0038 0.7345\nv 0.016982 -0.013187 0.094255\nvn -0.4431 -0.0025 0.8965\nv 0.016331 -0.013693 0.093931\nvn -0.4439 -0.0012 0.8961\nv 0.016263 -0.021414 0.093873\nvn -0.4428 -0.0029 0.8966\nv 0.016982 -0.013187 0.094255\nvn -0.3045 0.0014 0.9525\nv 0.016093 0.018739 0.093747\nvn -0.779 0.0007 0.627\nv 0.01571 0.027878 0.093264\nvn -0.7784 0.0006 0.6277\nv 0.015631 0.008166 0.093184\nvn -0.7816 -0.0019 0.6237\nv 0.016845 -0.003384 0.094196\nvn -0.4441 -0.0009 0.896\nv 0.015454 -0.010946 0.092857\nvn -0.9672 -0.0011 0.2539\nv 0.015298 0.000291 0.092303\nvn -0.9675 -0.0011 0.2527\nv 0.01527 -0.028122 0.09208\nvn -0.9674 -0.0011 0.2532\nv 0.016331 -0.013693 0.093931\nvn -0.6833 -0.0023 0.7302\nv 0.016142 -0.002994 0.093788\nvn -0.6833 -0.0023 0.7302\nv 0.0158 -0.017187 0.093424\nvn -0.6833 -0.0023 0.7302\nv 0.016331 -0.013693 0.093931\nvn -0.5006 0.0027 0.8656\nv 0.017017 -0.022099 0.094272\nvn -0.1 0.0031 0.995\nv 0.017856 -0.026555 0.09437\nvn -0.1053 0.0021 0.9944\nv 0.016982 -0.013187 0.094255\nvn -0.1085 0.0015 0.9941\nv 0.016982 -0.013187 0.094255\nvn -0.4675 -0.0001 0.884\nv 0.016263 -0.021414 0.093873\nvn -0.4667 0.001 0.8844\nv 0.017017 -0.022099 0.094272\nvn -0.4673 0.0001 0.8841\nv 0.015454 -0.010946 0.092857\nvn -0.8471 0.0014 0.5314\nv 0.015509 -0.02799 0.092988\nvn -0.8471 0.0014 0.5314\nv 0.0158 -0.017187 0.093424\nvn -0.8471 0.0014 0.5314\nv 0.01604 0.006742 0.093694\nvn -0.7802 0 0.6255\nv 0.016142 -0.002994 0.093788\nvn -0.7833 -0.0022 0.6217\nv 0.017207 -0.026982 0.094308\nvn -0.0967 0.0037 0.9953\nv 0.015509 -0.02799 0.092988\nvn -0.9671 -0.0011 0.2543\nv 0.016205 -0.027594 0.093851\nvn -0.4666 0.0012 0.8845\nv 0.016205 -0.027594 0.093851\nvn -0.4104 -0.0092 0.9119\nv 0.017207 -0.026982 0.094308\nvn -0.4104 -0.0092 0.9119\nv 0.017017 -0.022099 0.094272\nvn -0.4104 -0.0092 0.9119\nv 0.015631 0.008166 0.093184\nvn -0.8936 0.0018 0.4488\nv 0.01571 0.027878 0.093264\nvn -0.8936 0.0018 0.4488\nv 0.015311 0.021536 0.092493\nvn -0.8936 0.0018 0.4488\nv 0.01604 0.006742 0.093694\nvn -0.5657 -0.0011 0.8246\nv 0.016629 0.012795 0.094107\nvn -0.558 -0.0001 0.8299\nv 0.016093 0.018739 0.093747\nvn -0.5627 -0.0007 0.8267\nv 0.016582 0.027368 0.09407\nvn -0.5549 0.0003 0.8319\nv 0.008216 0.032482 0.110523\nvn -0.1293 -0.6976 0.7048\nv 0.005159 0.031592 0.109082\nvn -0.1322 -0.6936 0.7082\nv 0.007792 0.031042 0.109036\nvn -0.1327 -0.6929 0.7087\nv -1.04095e-18 0.033517 0.110667\nvn -0.0075 -0.701 0.7132\nv -8.58232e-19 0.031999 0.109175\nvn -0.0075 -0.701 0.7132\nv 0.002096 0.031942 0.109141\nvn -0.0075 -0.701 0.7132\nv 0.004749 0.033184 0.110584\nvn -0.1291 -0.698 0.7044\nv 0.011923 0.031363 0.110466\nvn -0.1931 -0.6771 0.7101\nv 0.008216 0.032482 0.110523\nvn -0.1932 -0.6768 0.7104\nv 0.007792 0.031042 0.109036\nvn -0.1923 -0.6794 0.7082\nv 0.010976 0.030077 0.108973\nvn -0.1921 -0.6798 0.7078\nv 0.016932 0.027177 0.108861\nvn -0.3239 -0.6185 0.7159\nv 0.015313 0.029765 0.110364\nvn -0.3239 -0.6185 0.7159\nv 0.014063 0.028749 0.10892\nvn -0.3239 -0.6185 0.7159\nv 0.004749 0.033184 0.110584\nvn -0.0384 -0.7212 0.6916\nv -1.04095e-18 0.033517 0.110667\nvn -0.0384 -0.7212 0.6916\nv 0.002096 0.031942 0.109141\nvn -0.0384 -0.7212 0.6916\nv 0.01642 0.028543 0.109799\nvn -0.3076 -0.6145 0.7264\nv 0.015313 0.029765 0.110364\nvn -0.3076 -0.6145 0.7264\nv 0.016932 0.027177 0.108861\nvn -0.3076 -0.6145 0.7264\nv 0.004749 0.033184 0.110584\nvn -0.0653 -0.6937 0.7173\nv 0.002096 0.031942 0.109141\nvn -0.0653 -0.6937 0.7173\nv 0.005159 0.031592 0.109082\nvn -0.0653 -0.6937 0.7173\nv 0.011923 0.031363 0.110466\nvn -0.2636 -0.6416 0.7203\nv 0.010976 0.030077 0.108973\nvn -0.2636 -0.6416 0.7203\nv 0.014063 0.028749 0.10892\nvn -0.2636 -0.6416 0.7203\nv 0.015313 0.029765 0.110364\nvn -0.2852 -0.6499 0.7045\nv 0.011923 0.031363 0.110466\nvn -0.2852 -0.6499 0.7045\nv 0.014063 0.028749 0.10892\nvn -0.2852 -0.6499 0.7045\nv 0.015093 -0.028221 0.1089\nvn -0.3369 0.6101 0.7171\nv 0.016 -0.028388 0.109468\nvn -0.3369 0.6101 0.7171\nv 0.016537 -0.027396 0.108876\nvn -0.3369 0.6101 0.7171\nv 0.0149 -0.029725 0.110148\nvn -0.3268 0.6281 0.7062\nv 0.016 -0.028388 0.109468\nvn -0.3268 0.6281 0.7062\nv 0.015093 -0.028221 0.1089\nvn -0.3268 0.6281 0.7062\nv 0.0149 -0.029725 0.110148\nvn -0.2905 0.6398 0.7115\nv 0.015093 -0.028221 0.1089\nvn -0.2948 0.6324 0.7163\nv 0.012848 -0.02932 0.108946\nvn -0.2907 0.6395 0.7117\nv 0.013792 -0.030528 0.110418\nvn -0.2904 0.64 0.7114\nv 0.010493 -0.031853 0.110485\nvn -0.2493 0.6615 0.7073\nv 0.013792 -0.030528 0.110418\nvn -0.2519 0.6626 0.7053\nv 0.012848 -0.02932 0.108946\nvn -0.2475 0.6606 0.7087\nv 0.010683 -0.030169 0.108983\nvn -0.2468 0.6603 0.7093\nv 0.010493 -0.031853 0.110485\nvn -0.1942 0.665 0.7212\nv 0.010683 -0.030169 0.108983\nvn -0.1942 0.665 0.7212\nv 0.00811 -0.03097 0.109029\nvn -0.1942 0.665 0.7212\nv 0.005809 -0.033013 0.110566\nvn -0.1622 0.7033 0.6921\nv 0.010493 -0.031853 0.110485\nvn -0.1622 0.7033 0.6921\nv 0.00811 -0.03097 0.109029\nvn -0.1622 0.7033 0.6921\nv 0.005809 -0.033013 0.110566\nvn -0.1287 0.6847 0.7174\nv 0.00811 -0.03097 0.109029\nvn -0.1287 0.6847 0.7174\nv 0.004953 -0.031626 0.109088\nvn -0.1287 0.6847 0.7174\nv 0.002183 -0.033436 0.110629\nvn -0.0693 0.706 0.7048\nv 0.004953 -0.031626 0.109088\nvn -0.0635 0.7014 0.71\nv 0.001919 -0.031955 0.109147\nvn -0.0624 0.7005 0.711\nv 0.005809 -0.033013 0.110566\nvn -0.0702 0.7066 0.7041\nv 0.002183 -0.033436 0.110629\nvn -0.0062 0.7066 0.7076\nv 0.001919 -0.031955 0.109147\nvn -0.0058 0.7069 0.7073\nv 0.017427 -0.069417 0.088831\nvn 0.0109 0.8456 -0.5337\nv 0.015255 -0.069307 0.088961\nvn 0.0109 0.8456 -0.5337\nv 0.017436 -0.068815 0.089784\nvn 0.0109 0.8456 -0.5337\nv 0.017436 -0.068815 0.089784\nvn 0.0493 0.7948 -0.6049\nv 0.015255 -0.069307 0.088961\nvn 0.0493 0.7948 -0.6049\nv 0.015255 -0.068472 0.090058\nvn 0.0493 0.7948 -0.6049\nv 0.017436 -0.068815 0.089784\nvn 0.0117 0.6671 -0.7448\nv 0.015255 -0.068472 0.090058\nvn 0.0117 0.6671 -0.7448\nv 0.01739 -0.068049 0.090469\nvn 0.0117 0.6671 -0.7448\nv 0.015255 -0.068472 0.090058\nvn 0.0441 0.5742 -0.8176\nv 0.015255 -0.067587 0.090679\nvn 0.0441 0.5742 -0.8176\nv 0.01739 -0.068049 0.090469\nvn 0.0441 0.5742 -0.8176\nv 0.01739 -0.068049 0.090469\nvn 0.0096 0.4494 -0.8933\nv 0.015255 -0.067587 0.090679\nvn 0.0096 0.4494 -0.8933\nv 0.017443 -0.067 0.090998\nvn 0.0096 0.4494 -0.8933\nv 0.017443 -0.067 0.090998\nvn 0.0496 0.3278 -0.9434\nv 0.015255 -0.067587 0.090679\nvn 0.0496 0.3278 -0.9434\nv 0.015255 -0.066386 0.091097\nvn 0.0496 0.3278 -0.9434\nv 0.017444 -0.065945 0.09119\nvn 0.006 0.1791 -0.9838\nv 0.017443 -0.067 0.090998\nvn 0.006 0.1791 -0.9838\nv 0.015255 -0.066386 0.091097\nvn 0.006 0.1791 -0.9838\nv 0.015255 -0.071856 0.080581\nvn 0.025 0.9632 -0.2677\nv 0.015255 -0.070753 0.084549\nvn 0.026 0.9633 -0.2672\nv 0.017366 -0.071951 0.080436\nvn 0.0299 0.9637 -0.2653\nv 0.017464 -0.070752 0.084811\nvn 0.0308 0.9638 -0.2649\nv 0.015255 -0.070753 0.084549\nvn 0.0363 0.9496 -0.3114\nv 0.015255 -0.069307 0.088961\nvn 0.0352 0.9495 -0.3119\nv 0.017464 -0.070752 0.084811\nvn 0.0306 0.9489 -0.3142\nv 0.017427 -0.069417 0.088831\nvn 0.0293 0.9487 -0.3148\nv 0.017388 -0.071522 0.07773\nvn 0.0065 0.9265 0.3762\nv 0.015255 -0.07159 0.077933\nvn 0.0065 0.9265 0.3762\nv 0.017455 -0.071909 0.078683\nvn 0.0065 0.9265 0.3762\nv 0.015255 -0.07159 0.077933\nvn 0.0589 0.9689 0.2405\nv 0.015255 -0.071973 0.079478\nvn 0.0589 0.9689 0.2405\nv 0.017455 -0.071909 0.078683\nvn 0.0589 0.9689 0.2405\nv 0.017455 -0.071909 0.078683\nvn 0.0154 0.9924 0.1219\nv 0.015255 -0.071973 0.079478\nvn 0.0154 0.9924 0.1219\nv 0.017342 -0.071996 0.079401\nvn 0.0154 0.9924 0.1219\nv 0.015255 -0.068463 0.075729\nvn 0.0249 0.251 0.9677\nv 0.015255 -0.069627 0.076031\nvn 0.0298 0.243 0.9696\nv 0.01741 -0.068402 0.075658\nvn 0.0258 0.2497 0.968\nv 0.017392 -0.069394 0.075906\nvn 0.0308 0.2413 0.97\nv 0.017392 -0.069394 0.075906\nvn 0.0051 0.4384 0.8988\nv 0.015255 -0.069627 0.076031\nvn 0.0051 0.4384 0.8988\nv 0.017472 -0.070313 0.076353\nvn 0.0051 0.4384 0.8988\nv 0.015255 -0.069627 0.076031\nvn 0.0581 0.5719 0.8182\nv 0.015255 -0.070789 0.076844\nvn 0.0581 0.5719 0.8182\nv 0.017472 -0.070313 0.076353\nvn 0.0581 0.5719 0.8182\nv 0.017472 -0.070313 0.076353\nvn 0.019 0.6749 0.7377\nv 0.015255 -0.070789 0.076844\nvn 0.0182 0.6749 0.7377\nv 0.017433 -0.070974 0.076959\nvn 0.0185 0.6749 0.7377\nv 0.015255 -0.070789 0.076844\nvn 0.037 0.8053 0.5917\nv 0.015255 -0.07159 0.077933\nvn 0.037 0.8053 0.5917\nv 0.017433 -0.070974 0.076959\nvn 0.037 0.8053 0.5917\nv 0.017433 -0.070974 0.076959\nvn 0.0295 0.814 0.5802\nv 0.015255 -0.07159 0.077933\nvn 0.0295 0.814 0.5802\nv 0.017388 -0.071522 0.07773\nvn 0.0295 0.814 0.5802\nv 0.017514 0.068079 0.075614\nvn 0.0496 0.0003 0.9988\nv 0.015256 0.068456 0.075726\nvn 0.0496 0.0003 0.9988\nv 0.01741 -0.068402 0.075658\nvn 0.0496 0.0003 0.9988\nv 0.01741 -0.068402 0.075658\nvn 0.033 0 0.9995\nv 0.015256 0.068456 0.075726\nvn 0.033 0 0.9995\nv 0.015255 -0.068463 0.075729\nvn 0.033 0 0.9995\nv 0.015255 0.07016 0.07634\nvn 0.0315 -0.436 0.8994\nv 0.015255 0.069319 0.075932\nvn 0.0315 -0.436 0.8994\nv 0.017453 0.070205 0.076285\nvn 0.0315 -0.436 0.8994\nv 0.017453 0.070205 0.076285\nvn 0.0165 -0.4048 0.9143\nv 0.015255 0.069319 0.075932\nvn 0.0165 -0.4048 0.9143\nv 0.017484 0.069002 0.075752\nvn 0.0165 -0.4048 0.9143\nv 0.015255 0.069319 0.075932\nvn 0.0456 -0.2323 0.9716\nv 0.015256 0.068456 0.075726\nvn 0.0456 -0.2323 0.9716\nv 0.017484 0.069002 0.075752\nvn 0.0456 -0.2323 0.9716\nv 0.017484 0.069002 0.075752\nvn 0.0245 -0.1472 0.9888\nv 0.015256 0.068456 0.075726\nvn 0.0245 -0.1472 0.9888\nv 0.017514 0.068079 0.075614\nvn 0.0245 -0.1472 0.9888\nv 0.017477 0.07196 0.080471\nvn 0.0169 -0.9958 -0.0898\nv 0.015255 0.071962 0.080031\nvn 0.0169 -0.9958 -0.0898\nv 0.017461 0.07203 0.079681\nvn 0.0169 -0.9958 -0.0898\nv 0.015255 0.071962 0.080031\nvn 0.0416 -0.9968 0.0686\nv 0.015255 0.071892 0.078933\nvn 0.0393 -0.9972 0.0635\nv 0.017487 0.071987 0.079052\nvn 0.0398 -0.9971 0.0646\nv 0.017461 0.07203 0.079681\nvn 0.0422 -0.9966 0.0701\nv 0.015255 0.071892 0.078933\nvn 0.0432 -0.9511 0.3058\nv 0.015255 0.071552 0.077876\nvn 0.0432 -0.9511 0.3058\nv 0.017452 0.071703 0.078036\nvn 0.0432 -0.9511 0.3058\nv 0.017487 0.071987 0.079052\nvn 0.0269 -0.9629 0.2685\nv 0.015255 0.071892 0.078933\nvn 0.0269 -0.9629 0.2685\nv 0.017452 0.071703 0.078036\nvn 0.0269 -0.9629 0.2685\nv 0.015255 0.071552 0.077876\nvn 0.0392 -0.8095 0.5858\nv 0.015255 0.070877 0.076943\nvn 0.0392 -0.8095 0.5858\nv 0.017457 0.071026 0.077002\nvn 0.0392 -0.8095 0.5858\nv 0.017452 0.071703 0.078036\nvn 0.0176 -0.8365 0.5477\nv 0.015255 0.071552 0.077876\nvn 0.0176 -0.8365 0.5477\nv 0.017457 0.071026 0.077002\nvn 0.0176 -0.8365 0.5477\nv 0.017457 0.071026 0.077002\nvn 0.0244 -0.658 0.7526\nv 0.015255 0.070877 0.076943\nvn 0.0244 -0.658 0.7526\nv 0.017453 0.070205 0.076285\nvn 0.0244 -0.658 0.7526\nv 0.015255 0.070877 0.076943\nvn 0.0325 -0.6435 0.7648\nv 0.015255 0.07016 0.07634\nvn 0.0325 -0.6435 0.7648\nv 0.017453 0.070205 0.076285\nvn 0.0325 -0.6435 0.7648\nv 0.015254 0.069385 0.088777\nvn 0.0422 -0.9512 -0.3058\nv 0.015254 0.070934 0.083959\nvn 0.0422 -0.9512 -0.3058\nv 0.017495 0.070797 0.084693\nvn 0.0422 -0.9512 -0.3058\nv 0.017492 0.069332 0.089058\nvn 0.0173 -0.9478 -0.3183\nv 0.015254 0.069385 0.088777\nvn 0.0173 -0.9478 -0.3183\nv 0.017495 0.070797 0.084693\nvn 0.0173 -0.9478 -0.3183\nv 0.017495 0.070797 0.084693\nvn 0.0282 -0.9637 -0.2654\nv 0.015254 0.070934 0.083959\nvn 0.0282 -0.9637 -0.2654\nv 0.017477 0.07196 0.080471\nvn 0.0282 -0.9637 -0.2654\nv 0.015254 0.070934 0.083959\nvn 0.0492 -0.9663 -0.2528\nv 0.015255 0.071962 0.080031\nvn 0.0492 -0.9663 -0.2528\nv 0.017477 0.07196 0.080471\nvn 0.0492 -0.9663 -0.2528\nv 0.017548 0.065986 0.091206\nvn 0.0195 -0.1678 -0.9856\nv 0.015255 0.066307 0.091106\nvn 0.0195 -0.1678 -0.9856\nv 0.017516 0.06672 0.09108\nvn 0.0195 -0.1678 -0.9856\nv 0.015255 0.066307 0.091106\nvn 0.0455 -0.3076 -0.9504\nv 0.015254 0.067548 0.090704\nvn 0.0455 -0.3076 -0.9504\nv 0.017516 0.06672 0.09108\nvn 0.0455 -0.3076 -0.9504\nv 0.017516 0.06672 0.09108\nvn 0.0354 -0.3318 -0.9427\nv 0.015254 0.067548 0.090704\nvn 0.0354 -0.3318 -0.9427\nv 0.017523 0.067513 0.090801\nvn 0.0354 -0.3318 -0.9427\nv 0.015254 0.067548 0.090704\nvn 0.0424 -0.5879 -0.8078\nv 0.015255 0.068623 0.089922\nvn 0.0424 -0.5879 -0.8078\nv 0.017447 0.068459 0.090156\nvn 0.0424 -0.5879 -0.8078\nv 0.017523 0.067513 0.090801\nvn 0.0268 -0.5618 -0.8269\nv 0.015254 0.067548 0.090704\nvn 0.0268 -0.5618 -0.8269\nv 0.017447 0.068459 0.090156\nvn 0.0268 -0.5618 -0.8269\nv 0.015255 0.068623 0.089922\nvn 0.0496 -0.8312 -0.5537\nv 0.015254 0.069385 0.088777\nvn 0.0496 -0.8312 -0.5537\nv 0.017492 0.069332 0.089058\nvn 0.0496 -0.8312 -0.5537\nv 0.017447 0.068459 0.090156\nvn 0.0079 -0.783 -0.6219\nv 0.015255 0.068623 0.089922\nvn 0.0079 -0.783 -0.6219\nv 0.017492 0.069332 0.089058\nvn 0.0079 -0.783 -0.6219\nv 0.015255 0.066307 0.091106\nvn 0.0471 0.0011 -0.9989\nv 0.017548 0.065986 0.091206\nvn 0.0436 0 -0.9991\nv 0.017538 0.041109 0.091204\nvn 0.045 0.0002 -0.999\nv 0.015255 -0.066386 0.091097\nvn 0.0408 0.0001 -0.9992\nv 0.017443 0.023103 0.09119\nvn 0.0454 0.0002 -0.999\nv 0.017444 -0.065945 0.09119\nvn 0.0427 0 -0.9991\nv 0.017603 -0.056093 0.075548\nvn 0.83 -0 0.5578\nv 0.01773 -0.068435 0.075359\nvn 0.83 -0 0.5578\nv 0.017715 0.068578 0.07539\nvn 0.83 -0 0.5578\nv 0.017603 -0.056093 0.075548\nvn 0.5 -0.0001 0.866\nv 0.017514 0.068079 0.075614\nvn 0.5 -0.0001 0.866\nv 0.01741 -0.068402 0.075658\nvn 0.5 -0.0001 0.866\nv 0.017715 0.068578 0.07539\nvn 0.7433 0.0002 0.669\nv 0.017514 0.068079 0.075614\nvn 0.7433 0.0002 0.669\nv 0.017603 -0.056093 0.075548\nvn 0.7433 0.0002 0.669\nv 0.017603 -0.056093 0.075548\nvn 0.6833 -0.0042 0.7301\nv 0.01741 -0.068402 0.075658\nvn 0.6833 -0.0042 0.7301\nv 0.01773 -0.068435 0.075359\nvn 0.6833 -0.0042 0.7301\nv 0.017624 -0.069513 0.075783\nvn 0.6797 0.2102 0.7027\nv 0.01773 -0.068435 0.075359\nvn 0.6797 0.2102 0.7027\nv 0.01741 -0.068402 0.075658\nvn 0.6797 0.2102 0.7027\nv 0.01741 -0.068402 0.075658\nvn 0.5332 0.1955 0.8231\nv 0.017392 -0.069394 0.075906\nvn 0.5332 0.1955 0.8231\nv 0.017624 -0.069513 0.075783\nvn 0.5332 0.1955 0.8231\nv 0.017514 0.068079 0.075614\nvn 0.8064 -0.0611 0.5882\nv 0.017715 0.068578 0.07539\nvn 0.8064 -0.0611 0.5882\nv 0.017484 0.069002 0.075752\nvn 0.8064 -0.0611 0.5882\nv 0.017624 -0.069513 0.075783\nvn 0.8166 0.1404 0.5598\nv 0.017749 -0.070077 0.075743\nvn 0.8166 0.1404 0.5598\nv 0.01773 -0.068435 0.075359\nvn 0.8166 0.1404 0.5598\nv 0.017484 0.069002 0.075752\nvn 0.7727 -0.2405 0.5874\nv 0.017713 0.069903 0.075819\nvn 0.7727 -0.2405 0.5874\nv 0.017453 0.070205 0.076285\nvn 0.7727 -0.2405 0.5874\nv 0.017484 0.069002 0.075752\nvn 0.679 -0.2249 0.6988\nv 0.017715 0.068578 0.07539\nvn 0.679 -0.2249 0.6988\nv 0.017713 0.069903 0.075819\nvn 0.679 -0.2249 0.6988\nv 0.017472 -0.070313 0.076353\nvn 0.5804 0.3962 0.7115\nv 0.017624 -0.069513 0.075783\nvn 0.5848 0.3937 0.7092\nv 0.017392 -0.069394 0.075906\nvn 0.578 0.3975 0.7126\nv 0.017679 0.070839 0.076516\nvn 0.619 -0.4547 0.6404\nv 0.017453 0.070205 0.076285\nvn 0.619 -0.4547 0.6404\nv 0.017713 0.069903 0.075819\nvn 0.619 -0.4547 0.6404\nv 0.017731 -0.071007 0.076523\nvn 0.949 0.1919 0.25\nv 0.017749 -0.070077 0.075743\nvn 0.949 0.1919 0.25\nv 0.017624 -0.069513 0.075783\nvn 0.949 0.1919 0.25\nv 0.017731 -0.071007 0.076523\nvn 0.5871 0.3925 0.708\nv 0.017679 0.070839 0.076516\nvn 0.8046 -0.3357 0.4898\nv 0.017713 0.069903 0.075819\nvn 0.8046 -0.3357 0.4898\nv 0.017748 0.071349 0.076753\nvn 0.8046 -0.3357 0.4898\nv 0.017457 0.071026 0.077002\nvn 0.7355 -0.448 0.5082\nv 0.017453 0.070205 0.076285\nvn 0.7355 -0.448 0.5082\nv 0.017679 0.070839 0.076516\nvn 0.7355 -0.448 0.5082\nv 0.017472 -0.070313 0.076353\nvn 0.8489 0.4015 0.3437\nv 0.017598 -0.071534 0.077467\nvn 0.8489 0.4015 0.3437\nv 0.017731 -0.071007 0.076523\nvn 0.8489 0.4015 0.3437\nv 0.017598 -0.071534 0.077467\nvn 0.0194 0.6749 0.7377\nv 0.01771 0.071869 0.077805\nvn 0.973 -0.1912 0.1296\nv 0.017679 0.070839 0.076516\nvn 0.973 -0.1912 0.1296\nv 0.017748 0.071349 0.076753\nvn 0.973 -0.1912 0.1296\nv 0.017457 0.071026 0.077002\nvn 0.7175 -0.581 0.3841\nv 0.01771 0.071869 0.077805\nvn 0.7175 -0.581 0.3841\nv 0.017452 0.071703 0.078036\nvn 0.7175 -0.581 0.3841\nv 0.017457 0.071026 0.077002\nvn 0.563 -0.6521 0.5077\nv 0.017679 0.070839 0.076516\nvn 0.563 -0.6521 0.5077\nv 0.01771 0.071869 0.077805\nvn 0.563 -0.6521 0.5077\nv 0.017598 -0.071534 0.077467\nvn 0.7258 0.5521 0.4103\nv 0.01774 -0.071932 0.077753\nvn 0.7258 0.5521 0.4103\nv 0.017731 -0.071007 0.076523\nvn 0.7258 0.5521 0.4103\nv 0.017433 -0.070974 0.076959\nvn 0.6279 0.6164 0.4751\nv 0.017388 -0.071522 0.07773\nvn 0.6279 0.6164 0.4751\nv 0.017598 -0.071534 0.077467\nvn 0.6279 0.6164 0.4751\nv 0.01771 0.071869 0.077805\nvn 0.7966 -0.5716 0.1966\nv 0.017742 0.072335 0.079033\nvn 0.7966 -0.5716 0.1966\nv 0.017487 0.071987 0.079052\nvn 0.7966 -0.5716 0.1966\nv 0.017452 0.071703 0.078036\nvn 0.6434 -0.7428 0.1855\nv 0.01771 0.071869 0.077805\nvn 0.6434 -0.7428 0.1855\nv 0.017487 0.071987 0.079052\nvn 0.6434 -0.7428 0.1855\nv 0.017487 0.071987 0.079052\nvn 0.8059 -0.5912 -0.0299\nv 0.017742 0.072335 0.079033\nvn 0.8059 -0.5912 -0.0299\nv 0.017718 0.07222 0.080671\nvn 0.8059 -0.5912 -0.0299\nv 0.017461 0.07203 0.079681\nvn 0.3783 -0.9223 0.0788\nv 0.017487 0.071987 0.079052\nvn 0.3783 -0.9223 0.0788\nv 0.017718 0.07222 0.080671\nvn 0.3783 -0.9223 0.0788\nv 0.017477 0.07196 0.080471\nvn 0.7593 -0.6467 -0.0728\nv 0.017461 0.07203 0.079681\nvn 0.7593 -0.6467 -0.0728\nv 0.017718 0.07222 0.080671\nvn 0.7593 -0.6467 -0.0728\nv 0.017564 -0.072106 0.080069\nvn 0.8306 0.5532 0.0644\nv 0.017741 -0.072382 0.080162\nvn 0.8306 0.5532 0.0644\nv 0.017721 -0.072178 0.078662\nvn 0.8306 0.5532 0.0644\nv 0.017721 -0.072178 0.078662\nvn 0.9011 0.4135 0.1305\nv 0.01774 -0.071932 0.077753\nvn 0.9011 0.4135 0.1305\nv 0.017598 -0.071534 0.077467\nvn 0.9011 0.4135 0.1305\nv 0.017455 -0.071909 0.078683\nvn 0.6917 0.663 0.2864\nv 0.017721 -0.072178 0.078662\nvn 0.6917 0.663 0.2864\nv 0.017598 -0.071534 0.077467\nvn 0.6917 0.663 0.2864\nv 0.017342 -0.071996 0.079401\nvn 0.0898 0.987 0.133\nv 0.017564 -0.072106 0.080069\nvn 0.0898 0.987 0.133\nv 0.017455 -0.071909 0.078683\nvn 0.0898 0.987 0.133\nv 0.017455 -0.071909 0.078683\nvn 0.4371 0.8435 0.3121\nv 0.017598 -0.071534 0.077467\nvn 0.4371 0.8435 0.3121\nv 0.017388 -0.071522 0.07773\nvn 0.4371 0.8435 0.3121\nv 0.017366 -0.071951 0.080436\nvn 0.5585 0.828 -0.0491\nv 0.017564 -0.072106 0.080069\nvn 0.5585 0.828 -0.0491\nv 0.017342 -0.071996 0.079401\nvn 0.5585 0.828 -0.0491\nv 0.017455 -0.071909 0.078683\nvn 0.7116 0.7013 0.0436\nv 0.017564 -0.072106 0.080069\nvn 0.7116 0.7013 0.0436\nv 0.017721 -0.072178 0.078662\nvn 0.7116 0.7013 0.0436\nv 0.017477 0.07196 0.080471\nvn 0.7845 -0.5971 -0.1677\nv 0.017718 0.07222 0.080671\nvn 0.7845 -0.5971 -0.1677\nv 0.017495 0.070797 0.084693\nvn 0.7845 -0.5971 -0.1677\nv 0.017718 0.07222 0.080671\nvn 0.5728 -0.7822 -0.245\nv 0.01774 0.06959 0.089122\nvn 0.5728 -0.7822 -0.245\nv 0.017495 0.070797 0.084693\nvn 0.5728 -0.7822 -0.245\nv 0.01774 0.06959 0.089122\nvn 0.7302 -0.6479 -0.2171\nv 0.017492 0.069332 0.089058\nvn 0.7302 -0.6479 -0.2171\nv 0.017495 0.070797 0.084693\nvn 0.7302 -0.6479 -0.2171\nv 0.017464 -0.070752 0.084811\nvn 0.6324 0.7369 -0.2389\nv 0.017427 -0.069417 0.088831\nvn 0.6324 0.7369 -0.2389\nv 0.017673 -0.069612 0.08888\nvn 0.6324 0.7369 -0.2389\nv 0.017719 -0.070987 0.084956\nvn 0.7257 0.6519 -0.2199\nv 0.017464 -0.070752 0.084811\nvn 0.7257 0.6519 -0.2199\nv 0.017673 -0.069612 0.08888\nvn 0.7257 0.6519 -0.2199\nv 0.017673 -0.069612 0.08888\nvn 0.8872 0.4385 -0.1433\nv 0.01775 -0.069602 0.089388\nvn 0.8872 0.4385 -0.1433\nv 0.017719 -0.070987 0.084956\nvn 0.8872 0.4385 -0.1433\nv 0.017564 -0.072106 0.080069\nvn 0.8547 0.4995 -0.1415\nv 0.017719 -0.070987 0.084956\nvn 0.8547 0.4995 -0.1415\nv 0.017741 -0.072382 0.080162\nvn 0.8547 0.4995 -0.1415\nv 0.017464 -0.070752 0.084811\nvn 0.7193 0.6718 -0.1767\nv 0.017719 -0.070987 0.084956\nvn 0.7193 0.6718 -0.1767\nv 0.017564 -0.072106 0.080069\nvn 0.7193 0.6718 -0.1767\nv 0.017464 -0.070752 0.084811\nvn 0.2464 0.9333 -0.2613\nv 0.017564 -0.072106 0.080069\nvn 0.2464 0.9333 -0.2613\nv 0.017366 -0.071951 0.080436\nvn 0.2464 0.9333 -0.2613\nv 0.017719 -0.06869 0.09033\nvn 0.9702 0.1893 -0.1509\nv 0.01775 -0.069602 0.089388\nvn 0.9702 0.1893 -0.1509\nv 0.017673 -0.069612 0.08888\nvn 0.9702 0.1893 -0.1509\nv 0.017436 -0.068815 0.089784\nvn 0.572 0.6839 -0.4529\nv 0.017719 -0.06869 0.09033\nvn 0.572 0.6839 -0.4529\nv 0.017673 -0.069612 0.08888\nvn 0.572 0.6839 -0.4529\nv 0.017436 -0.068815 0.089784\nvn 0.6131 0.6654 -0.4258\nv 0.017673 -0.069612 0.08888\nvn 0.6131 0.6654 -0.4258\nv 0.017427 -0.069417 0.088831\nvn 0.6131 0.6654 -0.4258\nv 0.017443 -0.067 0.090998\nvn 0.702 0.3346 -0.6287\nv 0.017721 -0.067116 0.091247\nvn 0.702 0.3346 -0.6287\nv 0.017627 -0.067964 0.090691\nvn 0.702 0.3346 -0.6287\nv 0.017443 -0.067 0.090998\nvn 0.5699 0.3464 -0.7451\nv 0.017627 -0.067964 0.090691\nvn 0.5699 0.3464 -0.7451\nv 0.01739 -0.068049 0.090469\nvn 0.5699 0.3464 -0.7451\nv 0.017721 -0.067116 0.091247\nvn 0.5005 0.4354 -0.7483\nv 0.017719 -0.06869 0.09033\nvn 0.5005 0.4354 -0.7483\nv 0.017627 -0.067964 0.090691\nvn 0.5005 0.4354 -0.7483\nv 0.017627 -0.067964 0.090691\nvn 0.4 0.6246 -0.6707\nv 0.017436 -0.068815 0.089784\nvn 0.4 0.6246 -0.6707\nv 0.01739 -0.068049 0.090469\nvn 0.4 0.6246 -0.6707\nv 0.017719 -0.06869 0.09033\nvn 0.7983 0.3461 -0.4929\nv 0.017436 -0.068815 0.089784\nvn 0.7983 0.3461 -0.4929\nv 0.017627 -0.067964 0.090691\nvn 0.7983 0.3461 -0.4929\nv 0.017755 0.067268 0.091213\nvn 0.7942 -0.2083 -0.5709\nv 0.017516 0.06672 0.09108\nvn 0.7942 -0.2083 -0.5709\nv 0.017523 0.067513 0.090801\nvn 0.7942 -0.2083 -0.5709\nv 0.017755 0.067268 0.091213\nvn 0.7047 -0.3602 -0.6113\nv 0.017523 0.067513 0.090801\nvn 0.7047 -0.3602 -0.6113\nv 0.017447 0.068459 0.090156\nvn 0.7047 -0.3602 -0.6113\nv 0.017755 0.067268 0.091213\nvn 0.5855 -0.4481 -0.6756\nv 0.017447 0.068459 0.090156\nvn 0.5855 -0.4481 -0.6756\nv 0.017721 0.068677 0.090248\nvn 0.5855 -0.4481 -0.6756\nv 0.017721 0.068677 0.090248\nvn 0.6438 -0.6116 -0.4599\nv 0.017447 0.068459 0.090156\nvn 0.6438 -0.6116 -0.4599\nv 0.017492 0.069332 0.089058\nvn 0.6438 -0.6116 -0.4599\nv 0.017721 0.068677 0.090248\nvn 0.6987 -0.5617 -0.4431\nv 0.017492 0.069332 0.089058\nvn 0.6987 -0.5617 -0.4431\nv 0.01774 0.06959 0.089122\nvn 0.6987 -0.5617 -0.4431\nv 0.017715 -0.065856 0.091437\nvn 0.6881 0.1113 -0.717\nv 0.017721 -0.067116 0.091247\nvn 0.6881 0.1113 -0.717\nv 0.017443 -0.067 0.090998\nvn 0.6881 0.1113 -0.717\nv 0.017444 -0.065945 0.09119\nvn 0.6428 0.1363 -0.7538\nv 0.017715 -0.065856 0.091437\nvn 0.6428 0.1363 -0.7538\nv 0.017443 -0.067 0.090998\nvn 0.6428 0.1363 -0.7538\nv 0.017755 0.067268 0.091213\nvn 0.7377 -0.1154 -0.6652\nv 0.01774 0.066021 0.091413\nvn 0.7377 -0.1154 -0.6652\nv 0.017548 0.065986 0.091206\nvn 0.7377 -0.1154 -0.6652\nv 0.017516 0.06672 0.09108\nvn 0.6492 -0.1006 -0.7539\nv 0.017755 0.067268 0.091213\nvn 0.6492 -0.1006 -0.7539\nv 0.017548 0.065986 0.091206\nvn 0.6492 -0.1006 -0.7539\nv 0.017611 -0.015172 0.091302\nvn 0.554 0 -0.8325\nv 0.017444 -0.065945 0.09119\nvn 0.554 0 -0.8325\nv 0.017443 0.023103 0.09119\nvn 0.554 0 -0.8325\nv 0.017548 0.065986 0.091206\nvn 0.7327 -0.0003 -0.6806\nv 0.01774 0.066021 0.091413\nvn 0.7327 -0.0003 -0.6806\nv 0.017538 0.041109 0.091204\nvn 0.7327 -0.0003 -0.6806\nv 0.017611 -0.015172 0.091302\nvn 0.674 -0.0006 -0.7388\nv 0.017715 -0.065856 0.091437\nvn 0.674 -0.0006 -0.7388\nv 0.017444 -0.065945 0.09119\nvn 0.674 -0.0006 -0.7388\nv 0.017443 0.023103 0.09119\nvn 0.6637 0.0007 -0.748\nv 0.017717 0.021817 0.091432\nvn 0.6637 0.0007 -0.748\nv 0.017611 -0.015172 0.091302\nvn 0.6637 0.0007 -0.748\nv 0.017538 0.041109 0.091204\nvn 0.6992 0.0003 -0.7149\nv 0.01774 0.066021 0.091413\nvn 0.6992 0.0003 -0.7149\nv 0.017721 0.029187 0.091378\nvn 0.6992 0.0003 -0.7149\nv 0.017717 0.021817 0.091432\nvn 0.7837 -0.0001 -0.6212\nv 0.017715 -0.065856 0.091437\nvn 0.7837 -0.0001 -0.6212\nv 0.017611 -0.015172 0.091302\nvn 0.7837 -0.0001 -0.6212\nv 0.017721 0.029187 0.091378\nvn 0.6459 -0.006 -0.7634\nv 0.017717 0.021817 0.091432\nvn 0.6459 -0.006 -0.7634\nv 0.017443 0.023103 0.09119\nvn 0.6459 -0.006 -0.7634\nv 0.017721 0.029187 0.091378\nvn 0.597 -0.0025 -0.8022\nv 0.017443 0.023103 0.09119\nvn 0.597 -0.0025 -0.8022\nv 0.017538 0.041109 0.091204\nvn 0.597 -0.0025 -0.8022\nv 0.015744 -0.034948 0.101046\nvn -0.0174 0.9998 -2.13089e-18\nv 0.015413 -0.034953 0.095371\nvn -0.0174 0.9998 -2.13089e-18\nv 0.01275 -0.035 0.095417\nvn -0.0174 0.9998 -2.13089e-18\nv 0.01275 -0.035 0.107949\nvn -0.0173 0.9999 0.0001\nv 0.014794 -0.034964 0.10695\nvn -0.0173 0.9999 -2.11864e-18\nv 0.013649 -0.034984 0.107921\nvn -0.0174 0.9998 -2.13089e-18\nv 0.014348 -0.034972 0.107606\nvn -0.0175 0.9998 -0.0001\nv 0.003617 -0.098799 0.116404\nvn 0.5221 -0.0008 0.8529\nv 0.003291 -0.045057 0.116657\nvn 0.5221 -0.0008 0.8529\nv 0.003215 -0.098159 0.116651\nvn 0.5221 -0.0008 0.8529\nv 0.003617 -0.098799 0.116404\nvn 0.6668 0.0005 0.7453\nv 0.003953 -0.045069 0.116064\nvn 0.6668 0.0005 0.7453\nv 0.003291 -0.045057 0.116657\nvn 0.6668 0.0005 0.7453\nv 0.0039 -0.0987 0.116067\nvn 0.7658 -0.0007 0.6431\nv 0.003953 -0.045069 0.116064\nvn 0.7658 -0.0007 0.6431\nv 0.003617 -0.098799 0.116404\nvn 0.7658 -0.0007 0.6431\nv 0.003996 -0.098624 0.115724\nvn 0.9628 -0.0009 0.2702\nv 0.003953 -0.045069 0.116064\nvn 0.9628 -0.0009 0.2702\nv 0.0039 -0.0987 0.116067\nvn 0.9628 -0.0009 0.2702\nv 0.003621 -0.100969 0.114977\nvn 0.2987 -0.7799 0.55\nv 0.003143 -0.100911 0.115318\nvn 0.2987 -0.7799 0.55\nv 0.003239 -0.101441 0.114516\nvn 0.2987 -0.7799 0.55\nv 0.003276 -0.100118 0.115981\nvn 0.402 -0.6253 0.6688\nv 0.003143 -0.100911 0.115318\nvn 0.402 -0.6253 0.6688\nv 0.003621 -0.100969 0.114977\nvn 0.402 -0.6253 0.6688\nv 0.003636 -0.099987 0.115842\nvn 0.466 -0.5891 0.6602\nv 0.003276 -0.100118 0.115981\nvn 0.466 -0.5891 0.6602\nv 0.003621 -0.100969 0.114977\nvn 0.466 -0.5891 0.6602\nv 0.003882 -0.099894 0.115548\nvn 0.7524 -0.442 0.4884\nv 0.003636 -0.099987 0.115842\nvn 0.7524 -0.442 0.4884\nv 0.003621 -0.100969 0.114977\nvn 0.7524 -0.442 0.4884\nv 0.003882 -0.099894 0.115548\nvn 0.7958 -0.4232 0.433\nv 0.003621 -0.100969 0.114977\nvn 0.7958 -0.4232 0.433\nv 0.00396 -0.100551 0.114762\nvn 0.7958 -0.4232 0.433\nv 0.003617 -0.098799 0.116404\nvn 0.414 -0.3735 0.8302\nv 0.003144 -0.099187 0.116465\nvn 0.414 -0.3735 0.8302\nv 0.003276 -0.100118 0.115981\nvn 0.414 -0.3735 0.8302\nv 0.003617 -0.098799 0.116404\nvn 0.4472 -0.3761 0.8115\nv 0.003276 -0.100118 0.115981\nvn 0.4472 -0.3761 0.8115\nv 0.003636 -0.099987 0.115842\nvn 0.4472 -0.3761 0.8115\nv 0.00396 -0.100551 0.114762\nvn 0.9808 -0.0902 0.1732\nv 0.0039 -0.0987 0.116067\nvn 0.9808 -0.0902 0.1732\nv 0.003882 -0.099894 0.115548\nvn 0.9808 -0.0902 0.1732\nv 0.0039 -0.0987 0.116067\nvn 0.7791 -0.2592 0.5708\nv 0.003636 -0.099987 0.115842\nvn 0.7766 -0.2593 0.5741\nv 0.003882 -0.099894 0.115548\nvn 0.7802 -0.2592 0.5693\nv 0.003617 -0.098799 0.116404\nvn 0.7756 -0.2593 0.5755\nv 0.003996 -0.098624 0.115724\nvn 0.9612 -0.1375 0.2394\nv 0.0039 -0.0987 0.116067\nvn 0.9612 -0.1375 0.2394\nv 0.00396 -0.100551 0.114762\nvn 0.9612 -0.1375 0.2394\nv 0.003215 -0.098159 0.116651\nvn 0.2775 -0.189 0.942\nv 0.003144 -0.099187 0.116465\nvn 0.2775 -0.189 0.942\nv 0.003617 -0.098799 0.116404\nvn 0.2775 -0.189 0.942\nv 0.00396 -0.100551 0.114762\nvn 0.9689 -0.2313 0.0875\nv 0.003884 -0.101493 0.113117\nvn 0.9689 -0.2313 0.0875\nv 0.003989 -0.101938 0.110778\nvn 0.9689 -0.2313 0.0875\nv 0.003797 -0.102235 0.111186\nvn 0.5762 -0.7895 0.2114\nv 0.003541 -0.101918 0.113069\nvn 0.5762 -0.7895 0.2114\nv 0.003307 -0.102561 0.111305\nvn 0.5762 -0.7895 0.2114\nv 0.003541 -0.101918 0.113069\nvn 0.2938 -0.9099 0.2928\nv 0.003127 -0.101995 0.113243\nvn 0.2938 -0.9099 0.2928\nv 0.003307 -0.102561 0.111305\nvn 0.2938 -0.9099 0.2928\nv 0.003797 -0.102235 0.111186\nvn 0.7958 -0.6009 0.0743\nv 0.003597 -0.102785 0.108877\nvn 0.7958 -0.6009 0.0743\nv 0.003934 -0.102378 0.108566\nvn 0.7958 -0.6009 0.0743\nv 0.003989 -0.101938 0.110778\nvn 0.8797 -0.4701 0.0715\nv 0.003797 -0.102235 0.111186\nvn 0.8797 -0.4701 0.0715\nv 0.003934 -0.102378 0.108566\nvn 0.8797 -0.4701 0.0715\nv 0.003884 -0.101493 0.113117\nvn 0.7492 -0.6289 0.2079\nv 0.003541 -0.101918 0.113069\nvn 0.7492 -0.6289 0.2079\nv 0.003797 -0.102235 0.111186\nvn 0.7492 -0.6289 0.2079\nv 0.003541 -0.101918 0.113069\nvn 0.3146 -0.88 0.3558\nv 0.003239 -0.101441 0.114516\nvn 0.3146 -0.88 0.3558\nv 0.003127 -0.101995 0.113243\nvn 0.3146 -0.88 0.3558\nv 0.003307 -0.102561 0.111305\nvn 0.4007 -0.9067 0.1317\nv 0.003201 -0.102957 0.108899\nvn 0.4007 -0.9067 0.1317\nv 0.003597 -0.102785 0.108877\nvn 0.4007 -0.9067 0.1317\nv 0.003797 -0.102235 0.111186\nvn 0.5718 -0.8078 0.143\nv 0.003307 -0.102561 0.111305\nvn 0.5718 -0.8078 0.143\nv 0.003597 -0.102785 0.108877\nvn 0.5718 -0.8078 0.143\nv 0.003884 -0.101493 0.113117\nvn 0.9008 -0.4173 0.1198\nv 0.003797 -0.102235 0.111186\nvn 0.9008 -0.4173 0.1198\nv 0.003989 -0.101938 0.110778\nvn 0.9008 -0.4173 0.1198\nv 0.003541 -0.101918 0.113069\nvn 0.5175 -0.7747 0.3634\nv 0.003621 -0.100969 0.114977\nvn 0.5175 -0.7747 0.3634\nv 0.003239 -0.101441 0.114516\nvn 0.5175 -0.7747 0.3634\nv 0.003884 -0.101493 0.113117\nvn 0.8109 -0.5234 0.2619\nv 0.00396 -0.100551 0.114762\nvn 0.8109 -0.5234 0.2619\nv 0.003621 -0.100969 0.114977\nvn 0.8109 -0.5234 0.2619\nv 0.003884 -0.101493 0.113117\nvn 0.7314 -0.6224 0.2786\nv 0.003621 -0.100969 0.114977\nvn 0.7314 -0.6224 0.2786\nv 0.003541 -0.101918 0.113069\nvn 0.7314 -0.6224 0.2786\nv 0.003511 -0.102857 0.096764\nvn 0.3982 -0.9173 0.0026\nv 0.003597 -0.102785 0.108877\nvn 0.3982 -0.9173 0.0026\nv 0.003201 -0.102957 0.108899\nvn 0.3982 -0.9173 0.0026\nv 0.003511 -0.102857 0.096764\nvn 0.2555 -0.9668 -0.0015\nv 0.003201 -0.102957 0.108899\nvn 0.2555 -0.9668 -0.0015\nv 0.003161 -0.102948 0.096314\nvn 0.2555 -0.9668 -0.0015\nv 0.003899 -0.102404 0.096019\nvn 0.7705 -0.6374 -0.0008\nv 0.003934 -0.102378 0.108566\nvn 0.7705 -0.6374 -0.0008\nv 0.003597 -0.102785 0.108877\nvn 0.7705 -0.6374 -0.0008\nv 0.003899 -0.102404 0.096019\nvn 0.7585 -0.6517 -0.0015\nv 0.003597 -0.102785 0.108877\nvn 0.7585 -0.6517 -0.0015\nv 0.003511 -0.102857 0.096764\nvn 0.7585 -0.6517 -0.0015\nv 0.003996 -0.101836 0.094545\nvn 0.9924 -0.1229 -0.0004\nv 0.003989 -0.101938 0.110778\nvn 0.9924 -0.1229 -0.0004\nv 0.003934 -0.102378 0.108566\nvn 0.9924 -0.1229 -0.0004\nv 0.003996 -0.101836 0.094545\nvn 0.9846 -0.1749 -0.0024\nv 0.003934 -0.102378 0.108566\nvn 0.9846 -0.1749 -0.0024\nv 0.003899 -0.102404 0.096019\nvn 0.9846 -0.1749 -0.0024\nv 0.003589 -0.101162 0.090552\nvn 0.4057 -0.7826 -0.4722\nv 0.003133 -0.100727 0.089438\nvn 0.4057 -0.7826 -0.4722\nv 0.003581 -0.099972 0.088572\nvn 0.4057 -0.7826 -0.4722\nv 0.003292 -0.097728 0.085819\nvn -0.0087 -0.6547 -0.7559\nv 0.002632 -0.096684 0.084922\nvn -0.017 -0.6577 -0.7531\nv 0.003142 -0.096726 0.084953\nvn -0.0075 -0.6542 -0.7563\nv 0.003966 -0.100627 0.090568\nvn 0.7639 -0.555 -0.3293\nv 0.003581 -0.099972 0.088572\nvn 0.7639 -0.555 -0.3293\nv 0.003885 -0.099679 0.088783\nvn 0.7639 -0.555 -0.3293\nv 0.003966 -0.100627 0.090568\nvn 0.778 -0.537 -0.3261\nv 0.003589 -0.101162 0.090552\nvn 0.778 -0.537 -0.3261\nv 0.003581 -0.099972 0.088572\nvn 0.778 -0.537 -0.3261\nv 0.00354 -0.102132 0.092884\nvn 0.312 -0.8906 -0.3308\nv 0.003133 -0.10222 0.092736\nvn 0.312 -0.8906 -0.3308\nv 0.003209 -0.101592 0.091117\nvn 0.312 -0.8906 -0.3308\nv 0.003292 -0.097728 0.085819\nvn 0.4295 -0.5526 -0.7142\nv 0.003142 -0.096726 0.084953\nvn 0.4295 -0.5526 -0.7142\nv 0.003682 -0.096662 0.085229\nvn 0.4295 -0.5526 -0.7142\nv 0.00354 -0.102132 0.092884\nvn 0.4397 -0.8326 -0.3369\nv 0.003209 -0.101592 0.091117\nvn 0.4397 -0.8326 -0.3369\nv 0.003589 -0.101162 0.090552\nvn 0.4397 -0.8326 -0.3369\nv 0.003767 -0.098154 0.086643\nvn 0.5702 -0.5477 -0.6123\nv 0.003292 -0.097728 0.085819\nvn 0.5702 -0.5477 -0.6123\nv 0.003682 -0.096662 0.085229\nvn 0.5702 -0.5477 -0.6123\nv 0.003885 -0.101806 0.09312\nvn 0.7993 -0.5548 -0.231\nv 0.003589 -0.101162 0.090552\nvn 0.7993 -0.5548 -0.231\nv 0.003966 -0.100627 0.090568\nvn 0.7993 -0.5548 -0.231\nv 0.003885 -0.101806 0.09312\nvn 0.7487 -0.6175 -0.2409\nv 0.00354 -0.102132 0.092884\nvn 0.7487 -0.6175 -0.2409\nv 0.003589 -0.101162 0.090552\nvn 0.7487 -0.6175 -0.2409\nv 0.003767 -0.098154 0.086643\nvn 0.8645 -0.3189 -0.3885\nv 0.003682 -0.096662 0.085229\nvn 0.8645 -0.3189 -0.3885\nv 0.003992 -0.096543 0.085821\nvn 0.8645 -0.3189 -0.3885\nv 0.00354 -0.102132 0.092884\nvn 0.2899 -0.9237 -0.2503\nv 0.003133 -0.102627 0.09424\nvn 0.2899 -0.9237 -0.2503\nv 0.003133 -0.10222 0.092736\nvn 0.2899 -0.9237 -0.2503\nv 0.003996 -0.101836 0.094545\nvn 0.9674 -0.2402 -0.0803\nv 0.003885 -0.101806 0.09312\nvn 0.9674 -0.2402 -0.0803\nv 0.003966 -0.100627 0.090568\nvn 0.9674 -0.2402 -0.0803\nv 0.00396 -0.098091 0.087094\nvn 0.8918 -0.2981 -0.3403\nv 0.003767 -0.098154 0.086643\nvn 0.8918 -0.2981 -0.3403\nv 0.003992 -0.096543 0.085821\nvn 0.8918 -0.2981 -0.3403\nv 0.003885 -0.101806 0.09312\nvn 0.7359 -0.6553 -0.1701\nv 0.003603 -0.102602 0.094965\nvn 0.7359 -0.6553 -0.1701\nv 0.00354 -0.102132 0.092884\nvn 0.7359 -0.6553 -0.1701\nv 0.003603 -0.102602 0.094965\nvn 0.38 -0.8997 -0.2145\nv 0.003133 -0.102627 0.09424\nvn 0.38 -0.8997 -0.2145\nv 0.00354 -0.102132 0.092884\nvn 0.38 -0.8997 -0.2145\nv 0.003899 -0.102404 0.096019\nvn 0.813 -0.5695 -0.1213\nv 0.003603 -0.102602 0.094965\nvn 0.813 -0.5695 -0.1213\nv 0.003885 -0.101806 0.09312\nvn 0.813 -0.5695 -0.1213\nv 0.003603 -0.102602 0.094965\nvn 0.2836 -0.9471 -0.1504\nv 0.003161 -0.102948 0.096314\nvn 0.2836 -0.9471 -0.1504\nv 0.003133 -0.102627 0.09424\nvn 0.2836 -0.9471 -0.1504\nv 0.003996 -0.101836 0.094545\nvn 0.9272 -0.3659 -0.0798\nv 0.003899 -0.102404 0.096019\nvn 0.9272 -0.3659 -0.0798\nv 0.003885 -0.101806 0.09312\nvn 0.9272 -0.3659 -0.0798\nv 0.003511 -0.102857 0.096764\nvn 0.3825 -0.9173 -0.1104\nv 0.003161 -0.102948 0.096314\nvn 0.3825 -0.9173 -0.1104\nv 0.003603 -0.102602 0.094965\nvn 0.3825 -0.9173 -0.1104\nv 0.003767 -0.098154 0.086643\nvn 0.4833 -0.6321 -0.6057\nv 0.003252 -0.099308 0.087437\nvn 0.4833 -0.6321 -0.6057\nv 0.003292 -0.097728 0.085819\nvn 0.4833 -0.6321 -0.6057\nv 0.003581 -0.099972 0.088572\nvn 0.5764 -0.6217 -0.5303\nv 0.003252 -0.099308 0.087437\nvn 0.5764 -0.6217 -0.5303\nv 0.003767 -0.098154 0.086643\nvn 0.5764 -0.6217 -0.5303\nv 0.003899 -0.102404 0.096019\nvn 0.7032 -0.7081 -0.0645\nv 0.003511 -0.102857 0.096764\nvn 0.7032 -0.7081 -0.0645\nv 0.003603 -0.102602 0.094965\nvn 0.7032 -0.7081 -0.0645\nv 0.00396 -0.098091 0.087094\nvn 0.9977 -0.0542 -0.0412\nv 0.003992 -0.096543 0.085821\nvn 0.9977 -0.0542 -0.0412\nv 0.003966 -0.100627 0.090568\nvn 0.9977 -0.0542 -0.0412\nv 0.003589 -0.101162 0.090552\nvn 0.2884 -0.8458 -0.4488\nv 0.003209 -0.101592 0.091117\nvn 0.2884 -0.8458 -0.4488\nv 0.003133 -0.100727 0.089438\nvn 0.2884 -0.8458 -0.4488\nv 0.003885 -0.099679 0.088783\nvn 0.7649 -0.504 -0.4012\nv 0.003581 -0.099972 0.088572\nvn 0.7649 -0.504 -0.4012\nv 0.003767 -0.098154 0.086643\nvn 0.7649 -0.504 -0.4012\nv 0.003581 -0.099972 0.088572\nvn 0.2813 -0.7907 -0.5437\nv 0.003133 -0.100727 0.089438\nvn 0.2813 -0.7907 -0.5437\nv 0.003252 -0.099308 0.087437\nvn 0.2813 -0.7907 -0.5437\nv 0.003885 -0.099679 0.088783\nvn 0.8682 -0.3803 -0.3187\nv 0.003767 -0.098154 0.086643\nvn 0.8682 -0.3803 -0.3187\nv 0.00396 -0.098091 0.087094\nvn 0.8682 -0.3803 -0.3187\nv 0.003966 -0.100627 0.090568\nvn 0.9645 -0.2124 -0.1566\nv 0.003885 -0.099679 0.088783\nvn 0.9645 -0.2124 -0.1566\nv 0.00396 -0.098091 0.087094\nvn 0.9645 -0.2124 -0.1566\nv 0.003215 -0.098159 0.116651\nvn -0.0118 -0.0001 0.9999\nv 0.003291 -0.045057 0.116657\nvn -0.0118 -0.0001 0.9999\nv 0.001409 -0.096978 0.116629\nvn -0.0118 -0.0001 0.9999\nv 0.001409 -0.096978 0.116629\nvn -0.0474 0.0012 0.9989\nv 0.003291 -0.045057 0.116657\nvn -0.0474 0.0012 0.9989\nv 0.000663 -0.096552 0.116593\nvn -0.0474 0.0012 0.9989\nv 0.003215 -0.098159 0.116651\nvn -0.0344 -0.0348 0.9988\nv 0.001409 -0.096978 0.116629\nvn -0.0344 -0.0348 0.9988\nv 0.002283 -0.098648 0.116601\nvn -0.0344 -0.0348 0.9988\nv 0.003291 -0.045057 0.116657\nvn -0.0053 -0.0009 1\nv -1.76937e-18 -0.045 0.116615\nvn -0.0129 -0.0004 0.9999\nv -1.76655e-18 -0.096429 0.116592\nvn -0.0098 -0.0006 1\nv 0.000663 -0.096552 0.116593\nvn -0.0022 -0.0011 1\nv 0.002213 -0.097242 0.08542\nvn -0.0173 -0.6577 -0.7531\nv 0.00225 -0.099011 0.087114\nvn -0.0445 -0.6916 -0.7209\nv 0.002213 -0.097242 0.08542\nvn -0.0445 -0.6916 -0.7209\nv 0.003292 -0.097728 0.085819\nvn -0.0445 -0.6916 -0.7209\nv 0.003252 -0.099308 0.087437\nvn 0.0126 -0.7155 -0.6985\nv 0.00225 -0.099011 0.087114\nvn 0.0126 -0.7155 -0.6985\nv 0.003292 -0.097728 0.085819\nvn 0.0126 -0.7155 -0.6985\nv 0.002225 -0.10087 0.089703\nvn -0.0509 -0.8114 -0.5822\nv 0.00225 -0.099011 0.087114\nvn -0.053 -0.8109 -0.5828\nv 0.003252 -0.099308 0.087437\nvn -0.0438 -0.8133 -0.5803\nv 0.003133 -0.100727 0.089438\nvn -0.041 -0.814 -0.5795\nv 0.003209 -0.101592 0.091117\nvn 0.0063 -0.8889 -0.4581\nv 0.002225 -0.10087 0.089703\nvn 0.0063 -0.8889 -0.4581\nv 0.003133 -0.100727 0.089438\nvn 0.0063 -0.8889 -0.4581\nv 0.002261 -0.102063 0.092311\nvn -0.0704 -0.9074 -0.4142\nv 0.002225 -0.10087 0.089703\nvn -0.0704 -0.9074 -0.4142\nv 0.003209 -0.101592 0.091117\nvn -0.0704 -0.9074 -0.4142\nv 0.003133 -0.10222 0.092736\nvn 0.0086 -0.9324 -0.3613\nv 0.002261 -0.102063 0.092311\nvn 0.0086 -0.9324 -0.3613\nv 0.003209 -0.101592 0.091117\nvn 0.0086 -0.9324 -0.3613\nv 0.002211 -0.102564 0.094114\nvn -0.0406 -0.9628 -0.2673\nv 0.002261 -0.102063 0.092311\nvn -0.0422 -0.9624 -0.2683\nv 0.003133 -0.10222 0.092736\nvn -0.0329 -0.9644 -0.2625\nv 0.003133 -0.102627 0.09424\nvn -0.031 -0.9647 -0.2613\nv 0.002241 -0.102841 0.095648\nvn -0.0437 -0.9832 -0.177\nv 0.002211 -0.102564 0.094114\nvn -0.0437 -0.9832 -0.177\nv 0.003133 -0.102627 0.09424\nvn -0.0437 -0.9832 -0.177\nv 0.003161 -0.102948 0.096314\nvn -0.0046 -0.9882 -0.1529\nv 0.002241 -0.102841 0.095648\nvn -0.0046 -0.9882 -0.1529\nv 0.003133 -0.102627 0.09424\nvn -0.0046 -0.9882 -0.1529\nv 0.002202 -0.102952 0.097221\nvn -0.064 -0.9954 -0.072\nv 0.002241 -0.102841 0.095648\nvn -0.064 -0.9954 -0.072\nv 0.003161 -0.102948 0.096314\nvn -0.064 -0.9954 -0.072\nv 0.002202 -0.102952 0.097221\nvn 0.0047 -1 -0.0008\nv 0.003161 -0.102948 0.096314\nvn 0.0034 -1 -0.0007\nv 0.003201 -0.102957 0.108899\nvn 0.0039 -1 -0.0007\nv 0.002248 -0.102962 0.108255\nvn 0.0052 -1 -0.0009\nv 0.003201 -0.102957 0.108899\nvn -0.0492 -0.9956 0.0797\nv 0.002312 -0.102825 0.11\nvn -0.0492 -0.9956 0.0797\nv 0.002248 -0.102962 0.108255\nvn -0.0492 -0.9956 0.0797\nv 0.003307 -0.102561 0.111305\nvn 0.052 -0.9857 0.1601\nv 0.002312 -0.102825 0.11\nvn 0.052 -0.9857 0.1601\nv 0.003201 -0.102957 0.108899\nvn 0.052 -0.9857 0.1601\nv 0.003307 -0.102561 0.111305\nvn -0.0366 -0.9737 0.2251\nv 0.002295 -0.102218 0.112625\nvn -0.0366 -0.9737 0.2251\nv 0.002312 -0.102825 0.11\nvn -0.0366 -0.9737 0.2251\nv 0.003127 -0.101995 0.113243\nvn 0.0451 -0.9579 0.2836\nv 0.002295 -0.102218 0.112625\nvn 0.0451 -0.9579 0.2836\nv 0.003307 -0.102561 0.111305\nvn 0.0451 -0.9579 0.2836\nv 0.003239 -0.101441 0.114516\nvn -0.0549 -0.9136 0.4028\nv 0.002232 -0.101228 0.114864\nvn -0.0536 -0.914 0.4022\nv 0.002295 -0.102218 0.112625\nvn -0.0545 -0.9137 0.4026\nv 0.003127 -0.101995 0.113243\nvn -0.0554 -0.9135 0.403\nv 0.003143 -0.100911 0.115318\nvn 0.0149 -0.8339 0.5517\nv 0.002232 -0.101228 0.114864\nvn 0.0149 -0.8339 0.5517\nv 0.003239 -0.101441 0.114516\nvn 0.0149 -0.8339 0.5517\nv 0.003143 -0.100911 0.115318\nvn -0.0795 -0.7357 0.6726\nv 0.00225 -0.100399 0.115773\nvn -0.0795 -0.7357 0.6726\nv 0.002232 -0.101228 0.114864\nvn -0.0795 -0.7357 0.6726\nv 0.003276 -0.100118 0.115981\nvn 0.0214 -0.6427 0.7658\nv 0.00225 -0.100399 0.115773\nvn 0.0214 -0.6427 0.7658\nv 0.003143 -0.100911 0.115318\nvn 0.0214 -0.6427 0.7658\nv 0.003276 -0.100118 0.115981\nvn -0.0325 -0.5138 0.8573\nv 0.002197 -0.099622 0.116237\nvn -0.0325 -0.5138 0.8573\nv 0.00225 -0.100399 0.115773\nvn -0.0325 -0.5138 0.8573\nv 0.003144 -0.099187 0.116465\nvn -0.0016 -0.4619 0.8869\nv 0.002197 -0.099622 0.116237\nvn -0.0016 -0.4619 0.8869\nv 0.003276 -0.100118 0.115981\nvn -0.0016 -0.4619 0.8869\nv 0.003144 -0.099187 0.116465\nvn -0.0675 -0.3444 0.9364\nv 0.002283 -0.098648 0.116601\nvn -0.0675 -0.3444 0.9364\nv 0.002197 -0.099622 0.116237\nvn -0.0675 -0.3444 0.9364\nv 0.003215 -0.098159 0.116651\nvn 0.0427 -0.1801 0.9827\nv 0.002283 -0.098648 0.116601\nvn 0.0427 -0.1801 0.9827\nv 0.003144 -0.099187 0.116465\nvn 0.0427 -0.1801 0.9827\nv 0.000663 -0.096552 0.116593\nvn -0.2538 -0.3687 0.8942\nv 0.001466 -0.097376 0.116482\nvn -0.2538 -0.3687 0.8942\nv 0.001409 -0.096978 0.116629\nvn -0.2538 -0.3687 0.8942\nv 0.002283 -0.098648 0.116601\nvn -0.4975 -0.2409 0.8333\nv 0.001466 -0.097376 0.116482\nvn -0.4975 -0.2409 0.8333\nv 0.001874 -0.098216 0.116482\nvn -0.4975 -0.2409 0.8333\nv 0.001409 -0.096978 0.116629\nvn -0.6404 -0.3465 0.6854\nv 0.001466 -0.097376 0.116482\nvn -0.6404 -0.3465 0.6854\nv 0.002283 -0.098648 0.116601\nvn -0.6404 -0.3465 0.6854\nv 0.002197 -0.099622 0.116237\nvn -0.5138 -0.2608 0.8173\nv 0.002283 -0.098648 0.116601\nvn -0.5138 -0.2608 0.8173\nv 0.001874 -0.098216 0.116482\nvn -0.5138 -0.2608 0.8173\nv 0.001974 -0.09888 0.11623\nvn -0.8982 -0.2676 0.3488\nv 0.002197 -0.099622 0.116237\nvn -0.8982 -0.2676 0.3488\nv 0.001874 -0.098216 0.116482\nvn -0.8982 -0.2676 0.3488\nv 0.001974 -0.09888 0.11623\nvn -0.835 -0.2472 0.4916\nv 0.002012 -0.100134 0.115665\nvn -0.835 -0.2472 0.4916\nv 0.002197 -0.099622 0.116237\nvn -0.835 -0.2472 0.4916\nv 0.00205 -0.100901 0.115045\nvn -0.7332 -0.449 0.5106\nv 0.00225 -0.100399 0.115773\nvn -0.7332 -0.449 0.5106\nv 0.002012 -0.100134 0.115665\nvn -0.7332 -0.449 0.5106\nv 0.002232 -0.101228 0.114864\nvn -0.5407 -0.6161 0.5728\nv 0.00225 -0.100399 0.115773\nvn -0.5407 -0.6161 0.5728\nv 0.00205 -0.100901 0.115045\nvn -0.5407 -0.6161 0.5728\nv 0.002012 -0.100134 0.115665\nvn -0.7083 -0.3965 0.5841\nv 0.00225 -0.100399 0.115773\nvn -0.7083 -0.3965 0.5841\nv 0.002197 -0.099622 0.116237\nvn -0.7083 -0.3965 0.5841\nv 0.002044 -0.102745 0.109144\nvn -0.9233 -0.3764 0.0767\nv 0.00211 -0.102534 0.110978\nvn -0.9233 -0.3764 0.0767\nv 0.002025 -0.101992 0.112613\nvn -0.9233 -0.3764 0.0767\nv 0.002248 -0.102962 0.108255\nvn -0.5244 -0.8472 0.0856\nv 0.002312 -0.102825 0.11\nvn -0.5244 -0.8472 0.0856\nv 0.002044 -0.102745 0.109144\nvn -0.5244 -0.8472 0.0856\nv 0.00211 -0.102534 0.110978\nvn -0.6319 -0.7449 0.2141\nv 0.002295 -0.102218 0.112625\nvn -0.6319 -0.7449 0.2141\nv 0.002025 -0.101992 0.112613\nvn -0.6319 -0.7449 0.2141\nv 0.00211 -0.102534 0.110978\nvn -0.3048 -0.9283 0.2128\nv 0.002312 -0.102825 0.11\nvn -0.3048 -0.9283 0.2128\nv 0.002295 -0.102218 0.112625\nvn -0.3048 -0.9283 0.2128\nv 0.002025 -0.101992 0.112613\nvn -0.7736 -0.5751 0.2662\nv 0.002232 -0.101228 0.114864\nvn -0.7736 -0.5751 0.2662\nv 0.00205 -0.100901 0.115045\nvn -0.7736 -0.5751 0.2662\nv 0.002025 -0.101992 0.112613\nvn -0.6189 -0.7248 0.3028\nv 0.002295 -0.102218 0.112625\nvn -0.6189 -0.7248 0.3028\nv 0.002232 -0.101228 0.114864\nvn -0.6189 -0.7248 0.3028\nv 0.002044 -0.102745 0.109144\nvn -0.5959 -0.7951 0.1129\nv 0.002312 -0.102825 0.11\nvn -0.5959 -0.7951 0.1129\nv 0.00211 -0.102534 0.110978\nvn -0.5959 -0.7951 0.1129\nv 0.002044 -0.102745 0.109144\nvn -0.7217 -0.6922 0.0024\nv 0.002202 -0.102952 0.097221\nvn -0.7217 -0.6922 0.0024\nv 0.002248 -0.102962 0.108255\nvn -0.7217 -0.6922 0.0024\nv 0.002044 -0.102745 0.109144\nvn -0.8628 -0.5056 -0.0027\nv 0.002021 -0.102634 0.095619\nvn -0.8628 -0.5056 -0.0027\nv 0.002202 -0.102952 0.097221\nvn -0.8628 -0.5056 -0.0027\nv 0.002211 -0.102564 0.094114\nvn -0.8536 -0.504 -0.1315\nv 0.002021 -0.102634 0.095619\nvn -0.8536 -0.504 -0.1315\nv 0.002016 -0.101534 0.091439\nvn -0.8536 -0.504 -0.1315\nv 0.002213 -0.097242 0.08542\nvn -0.6678 -0.5222 -0.5305\nv 0.00225 -0.099011 0.087114\nvn -0.6678 -0.5222 -0.5305\nv 0.002018 -0.098941 0.087337\nvn -0.6678 -0.5222 -0.5305\nv 0.002021 -0.102634 0.095619\nvn -0.679 -0.7309 -0.0683\nv 0.002241 -0.102841 0.095648\nvn -0.679 -0.7309 -0.0683\nv 0.002202 -0.102952 0.097221\nvn -0.679 -0.7309 -0.0683\nv 0.002127 -0.09662 0.085045\nvn -0.8415 -0.359 -0.4037\nv 0.002213 -0.097242 0.08542\nvn -0.8415 -0.3591 -0.4037\nv 0.002018 -0.098941 0.087337\nvn -0.8415 -0.359 -0.4037\nv 0.002002 -0.096551 0.085318\nvn -0.8956 -0.2906 -0.3369\nv 0.002127 -0.09662 0.085045\nvn -0.8956 -0.2906 -0.3369\nv 0.002018 -0.098941 0.087337\nvn -0.8956 -0.2906 -0.3369\nv 0.002211 -0.102564 0.094114\nvn -0.714 -0.6693 -0.2054\nv 0.002016 -0.101534 0.091439\nvn -0.714 -0.6693 -0.2054\nv 0.002261 -0.102063 0.092311\nvn -0.714 -0.6693 -0.2054\nv 0.002225 -0.10087 0.089703\nvn -0.453 -0.813 -0.3658\nv 0.002261 -0.102063 0.092311\nvn -0.453 -0.813 -0.3658\nv 0.002016 -0.101534 0.091439\nvn -0.453 -0.813 -0.3658\nv 0.002241 -0.102841 0.095648\nvn -0.6722 -0.7307 -0.1191\nv 0.002021 -0.102634 0.095619\nvn -0.6722 -0.7307 -0.1191\nv 0.002211 -0.102564 0.094114\nvn -0.6722 -0.7307 -0.1191\nv 0.002018 -0.098941 0.087337\nvn -0.8687 -0.4184 -0.2651\nv 0.002225 -0.10087 0.089703\nvn -0.8687 -0.4184 -0.2651\nv 0.002016 -0.101534 0.091439\nvn -0.8687 -0.4184 -0.2651\nv 0.002018 -0.098941 0.087337\nvn -0.6291 -0.6285 -0.4574\nv 0.00225 -0.099011 0.087114\nvn -0.6291 -0.6285 -0.4574\nv 0.002225 -0.10087 0.089703\nvn -0.6291 -0.6285 -0.4574\nv -0.0013 0.032023 0.109103\nvn -0.018 -0.9998 0.0001\nv -0.001287 0.032022 0.101166\nvn -0.0178 -0.9998 0.0001\nv -8.58232e-19 0.031999 0.109175\nvn -0.0177 -0.9998 0.0001\nv 0.001992 -0.031956 0.108137\nvn -0.0185 0.9998 0.0059\nv -0.0013 -0.032023 0.108194\nvn -0.0203 0.9998 -2.48603e-18\nv -0.0013 -0.032023 0.109103\nvn -0.0188 0.9998 0.005\nv -8.58232e-19 -0.031999 0.109175\nvn -0.0184 0.9998 0.0065\nv 0.001777 -0.096847 0.087562\nvn -0.8175 -0.3517 -0.456\nv 0.001552 -0.096061 0.087359\nvn -0.8175 -0.3517 -0.4561\nv 0.001774 -0.096148 0.087027\nvn -0.8175 -0.3517 -0.4561\nv 0.001777 -0.096847 0.087562\nvn -0.9528 -0.1867 -0.2396\nv 0.001774 -0.096148 0.087027\nvn -0.9528 -0.1867 -0.2396\nv 0.00186 -0.096218 0.08674\nvn -0.9528 -0.1867 -0.2396\nv 0.001133 -0.095945 0.087768\nvn -0.6389 -0.4821 -0.5995\nv 0.001453 -0.096548 0.087912\nvn -0.6388 -0.4821 -0.5995\nv 0.000999 -0.09639 0.088268\nvn -0.6388 -0.4821 -0.5996\nv 0.001453 -0.096548 0.087912\nvn -0.7722 -0.402 -0.4921\nv 0.001439 -0.096022 0.087503\nvn -0.7722 -0.402 -0.4921\nv 0.001552 -0.096061 0.087359\nvn -0.7722 -0.402 -0.4921\nv 0.000999 -0.09639 0.088268\nvn -0.5919 -0.5172 -0.6182\nv 0.000981 -0.09591 0.087885\nvn -0.5919 -0.5172 -0.6182\nv 0.001133 -0.095945 0.087768\nvn -0.5919 -0.5172 -0.6182\nv 0.000999 -0.09639 0.088268\nvn -0.395 -0.583 -0.71\nv 0.000627 -0.095857 0.088038\nvn -0.395 -0.583 -0.71\nv 0.000981 -0.09591 0.087885\nvn -0.395 -0.583 -0.71\nv 1.68083e-18 -0.096256 0.088442\nvn -0.0814 -0.6424 -0.7621\nv 1.72418e-18 -0.095837 0.088088\nvn -0.0814 -0.6424 -0.7621\nv 0.000627 -0.095857 0.088038\nvn -0.0814 -0.6424 -0.7621\nv 0.002002 -0.096551 0.085318\nvn -0.9994 -0.0268 -0.0238\nv 0.001977 -0.097359 0.087277\nvn -0.9388 -0.221 -0.2643\nv 0.00186 -0.096218 0.08674\nvn -0.9387 -0.221 -0.2644\nv 0.001996 -0.096317 0.08634\nvn -0.9387 -0.221 -0.2645\nv 1.72026e-18 -0.095806 0.08812\nvn -1 0 -1.22465e-16\nv 1.72136e-18 -0.095812 0.088111\nvn -1 0 -1.22465e-16\nv 1.72418e-18 -0.095837 0.088088\nvn -1 0 -1.22465e-16\nv 0.002213 -0.097242 0.08542\nvn -0.1687 -0.5821 -0.7954\nv 0.002162 -0.096635 0.084986\nvn -0.1687 -0.5821 -0.7954\nv 0.002632 -0.096684 0.084922\nvn -0.1687 -0.5821 -0.7954\nv -0.002127 -0.09662 0.085045\nvn 0.8415 -0.359 -0.4037\nv -0.002018 -0.098941 0.087337\nvn 0.8415 -0.359 -0.4037\nv -0.002213 -0.097242 0.08542\nvn 0.8415 -0.359 -0.4037\nv -0.001777 -0.096847 0.087562\nvn 0.8175 -0.3517 -0.4561\nv -0.001774 -0.096148 0.087027\nvn 0.8175 -0.3517 -0.4561\nv -0.001552 -0.096061 0.087359\nvn 0.8175 -0.3517 -0.4561\nv -0.001453 -0.096548 0.087912\nvn 0.6389 -0.4821 -0.5994\nv -0.001439 -0.096022 0.087503\nvn 0.6389 -0.4821 -0.5994\nv -0.001133 -0.095945 0.087768\nvn 0.6389 -0.4821 -0.5994\nv -0.000999 -0.09639 0.088268\nvn 0.395 -0.583 -0.71\nv -0.000981 -0.09591 0.087885\nvn 0.395 -0.583 -0.71\nv -0.000627 -0.095857 0.088038\nvn 0.395 -0.583 -0.71\nv -0.001977 -0.097359 0.087277\nvn 0.9387 -0.221 -0.2645\nv -0.001996 -0.096317 0.08634\nvn 0.9387 -0.221 -0.2645\nv -0.00186 -0.096218 0.08674\nvn 0.9387 -0.221 -0.2645\nv 0.002162 -0.096635 0.084986\nvn -0.8414 -0.3591 -0.4038\nv 0.001453 -0.096548 0.087912\nvn -0.8175 -0.3517 -0.456\nv 0.001439 -0.096022 0.087503\nvn -0.6389 -0.4821 -0.5994\nv 0.000999 -0.09639 0.088268\nvn -0.2126 -0.5092 -0.834\nv 1.68083e-18 -0.096256 0.088442\nvn -0.2126 -0.5092 -0.834\nv 0.000627 -0.095857 0.088038\nvn -0.2126 -0.5092 -0.834\nv 0.001977 -0.097359 0.087277\nvn -0.9994 -0.0269 -0.0238\nv 0.001992 -0.09647 0.085671\nvn -0.9994 -0.0269 -0.0238\nv 0.002002 -0.096551 0.085318\nvn -0.9994 -0.0269 -0.0238\nv 0.001777 -0.096847 0.087562\nvn -0.9388 -0.221 -0.2643\nv 0.011452 -0.065813 0.036367\nvn -0.7823 0.6229 -9.58041e-17\nv 0.010831 -0.066594 0.043756\nvn -0.7823 0.6229 -9.58041e-17\nv 0.011452 -0.065813 0.043767\nvn -0.7823 0.6229 -9.58041e-17\nv 0.01149 0.065541 0.043768\nvn 1.22465e-16 0 -1\nv -0.011453 -0.065813 0.043767\nvn 1.22465e-16 0 -1\nv -0.01149 0.065541 0.043768\nvn 1.22465e-16 0 -1\nv -0.01149 0.065541 0.036368\nvn 0.9439 -0.3302 1.15594e-16\nv -0.011283 0.066133 0.043764\nvn 0.9439 -0.3302 1.15594e-16\nv -0.01149 0.065541 0.043768\nvn 0.9439 -0.3302 1.15594e-16\nv 0.010558 0.066744 0.036351\nvn -0.0243 -0.9997 -2.97589e-18\nv 7.17643e-18 0.067 0.043567\nvn -0.0243 -0.9997 -2.97589e-18\nv 8.08267e-18 0.067 0.036167\nvn -0.0243 -0.9997 -2.97589e-18\nv 0.010831 -0.066594 0.036356\nvn -0.3441 0.9389 -4.21401e-17\nv 0.01023 -0.066814 0.043746\nvn -0.3441 0.9389 -4.21401e-17\nv 0.010831 -0.066594 0.043756\nvn -0.3441 0.9389 -4.21401e-17\nv -0.010831 -0.066594 0.036356\nvn 0.3441 0.9389 4.21401e-17\nv -0.01023 -0.066814 0.043746\nvn 0.3441 0.9389 4.21401e-17\nv -0.01023 -0.066814 0.036346\nvn 0.3441 0.9389 4.21401e-17\nv 0.01023 -0.066814 0.036346\nvn -0.0182 0.9998 -2.22886e-18\nv 7.17643e-18 -0.067 0.043567\nvn -0.0182 0.9998 -2.22886e-18\nv 0.01023 -0.066814 0.043746\nvn -0.0182 0.9998 -2.22886e-18\nv 0.01149 0.065541 0.036368\nvn -1 0.0003 -1.22465e-16\nv 0.011452 -0.065813 0.043767\nvn -1 0.0003 -1.22465e-16\nv 0.01149 0.065541 0.043768\nvn -1 0.0003 -1.22465e-16\nv -0.010558 0.066744 0.036351\nvn 0.0243 -0.9997 2.97589e-18\nv 7.17643e-18 0.067 0.043567\nvn 0.0243 -0.9997 2.97589e-18\nv -0.010558 0.066744 0.043751\nvn 0.0243 -0.9997 2.97589e-18\nv 0.011283 0.066133 0.036364\nvn -0.6442 -0.7649 -7.88918e-17\nv 0.010558 0.066744 0.043751\nvn -0.6442 -0.7649 -7.88918e-17\nv 0.010558 0.066744 0.036351\nvn -0.6442 -0.7649 -7.88918e-17\nv 0.01149 0.065541 0.036368\nvn -0.9439 -0.3302 -1.15594e-16\nv 0.011283 0.066133 0.043764\nvn -0.9439 -0.3302 -1.15594e-16\nv 0.011283 0.066133 0.036364\nvn -0.9439 -0.3302 -1.15594e-16\nv -0.011283 0.066133 0.036364\nvn 0.6442 -0.7649 7.88918e-17\nv -0.010558 0.066744 0.043751\nvn 0.6442 -0.7649 7.88918e-17\nv -0.011283 0.066133 0.043764\nvn 0.6442 -0.7649 7.88918e-17\nv -0.01023 -0.066814 0.036346\nvn 0.0182 0.9998 2.22886e-18\nv 7.17643e-18 -0.067 0.043567\nvn 0.0182 0.9998 2.22886e-18\nv 8.08267e-18 -0.067 0.036167\nvn 0.0182 0.9998 2.22886e-18\nv -0.011453 -0.065813 0.036367\nvn 0.7823 0.6229 9.58041e-17\nv -0.010831 -0.066594 0.043756\nvn 0.7823 0.6229 9.58041e-17\nv -0.010831 -0.066594 0.036356\nvn 0.7823 0.6229 9.58041e-17\nv -0.01149 0.065541 0.036368\nvn 1 0.0003 1.22465e-16\nv -0.011453 -0.065813 0.043767\nvn 1 0.0003 1.22465e-16\nv -0.011453 -0.065813 0.036367\nvn 1 0.0003 1.22465e-16\nv 0.010831 -0.066594 0.036356\nvn -0.7823 0.6229 -9.58041e-17\nv -0.010558 0.066744 0.043751\nvn -0.0175 -0.0001 -0.9998\nv 7.17643e-18 0.067 0.043567\nvn -0.0174 -0.0001 -0.9998\nv -0.01149 0.065541 0.043768\nvn -0.0175 -0.0001 -0.9998\nv 0.010558 0.066744 0.043751\nvn 0.0175 -0.0001 -0.9998\nv 0.011283 0.066133 0.043764\nvn 0.0176 0 -0.9998\nv 0.01149 0.065541 0.043768\nvn 0.0175 -0.0001 -0.9998\nv 0.011452 -0.065813 0.043767\nvn 1.22465e-16 0 -1\nv 0.010831 -0.066594 0.043756\nvn 0.0176 -0.0002 -0.9998\nv 0.01023 -0.066814 0.043746\nvn 0.0175 -0.0001 -0.9998\nv 0.011452 -0.065813 0.043767\nvn 0.0175 -0.0002 -0.9998\nv 7.17643e-18 -0.067 0.043567\nvn -0.0175 -0.0001 -0.9998\nv -0.01023 -0.066814 0.043746\nvn -0.0175 -0.0001 -0.9998\nv -0.011453 -0.065813 0.043767\nvn -0.0175 -0.0002 -0.9998\nv -0.010831 -0.066594 0.043756\nvn -0.0176 -0.0002 -0.9998\nv -0.011283 0.066133 0.043764\nvn -0.0176 0 -0.9998\nv 7.17643e-18 0.067 0.043567\nvn 0.0174 -0.0001 -0.9998\nv 7.17643e-18 -0.067 0.043567\nvn 0.0175 -0.0001 -0.9998\nv 7.17643e-18 -0.067 0.043567\nvn 1.20762e-16 0.166 -0.9861\nv -0.011453 -0.065813 0.043767\nvn 1.20762e-16 0.166 -0.9861\nv 0.011452 -0.065813 0.043767\nvn 1.20762e-16 0.166 -0.9861\nv -0.01149 0.065541 0.043768\nvn 1.21326e-16 -0.1362 -0.9907\nv 7.17643e-18 0.067 0.043567\nvn 1.21326e-16 -0.1362 -0.9907\nv 0.01149 0.065541 0.043768\nvn 1.21326e-16 -0.1362 -0.9907\nv -0.011283 0.066133 0.036364\nvn 0.9439 -0.3302 1.15594e-16\nv 0.010558 0.066744 0.043751\nvn -0.0243 -0.9997 -2.97589e-18\nv 0.01023 -0.066814 0.036346\nvn -0.3441 0.9389 -4.21401e-17\nv -0.010831 -0.066594 0.043756\nvn 0.3441 0.9389 4.21401e-17\nv 8.08267e-18 -0.067 0.036167\nvn -0.0182 0.9998 -2.22886e-18\nv 0.011452 -0.065813 0.036367\nvn -1 0.0003 -1.22465e-16\nv 8.08267e-18 0.067 0.036167\nvn 0.0243 -0.9997 2.97589e-18\nv 0.011283 0.066133 0.043764\nvn -0.6442 -0.7649 -7.88918e-17\nv 0.01149 0.065541 0.043768\nvn -0.9439 -0.3302 -1.15594e-16\nv -0.010558 0.066744 0.036351\nvn 0.6442 -0.7649 7.88918e-17\nv -0.01023 -0.066814 0.043746\nvn 0.0182 0.9998 2.22886e-18\nv -0.011453 -0.065813 0.043767\nvn 0.7823 0.6229 9.58041e-17\nv -0.01149 0.065541 0.043768\nvn 1 0.0003 1.22465e-16\nv -0.004966 -0.031617 0.108085\nvn 0.1103 0.904 -0.4131\nv -0.008394 -0.034362 0.101163\nvn 0.1103 0.904 -0.4132\nv -0.009584 -0.034217 0.101163\nvn 0.1103 0.904 -0.4132\nv 0.01275 -0.036 0.107949\nvn 0.7311 0.6823 8.95339e-17\nv 0.010838 -0.033951 0.101163\nvn 0.7311 0.6823 8.95339e-17\nv 0.008072 -0.030986 0.108031\nvn 0.7311 0.6823 8.95339e-17\nv 0.01275 -0.036 0.096417\nvn 3.99725e-17 0.9452 -0.3264\nv 0.012598 -0.036 0.096417\nvn 3.99112e-17 0.9454 -0.3259\nv 0.0126 -0.035959 0.096537\nvn 0.0001 0.9453 -0.3263\nv 0.008072 -0.030986 0.108031\nvn -0.185 0.8729 -0.4514\nv 0.009585 -0.034217 0.101162\nvn -0.185 0.8729 -0.4514\nv 0.004966 -0.031617 0.108085\nvn -0.185 0.8729 -0.4514\nv 0.004966 -0.031617 0.108085\nvn -0.1103 0.904 -0.4131\nv 0.008395 -0.034363 0.101161\nvn -0.1103 0.904 -0.4131\nv 0.001992 -0.031956 0.108137\nvn -0.1103 0.904 -0.4131\nv -0.01275 -0.036 0.107949\nvn -0.7311 0.6823 -8.95339e-17\nv -0.012564 -0.035801 0.10116\nvn -0.7309 0.6825 -8.95094e-17\nv -0.012567 -0.035804 0.10077\nvn -0.7312 0.6822 -8.95462e-17\nv -0.01275 -0.036 0.096417\nvn 0.185 0.8729 -0.4514\nv -0.012589 -0.035828 0.096816\nvn 0.185 0.8729 -0.4514\nv -0.01259 -0.03591 0.096657\nvn 0.185 0.8729 -0.4514\nv 0.001992 -0.031956 0.108137\nvn 3.9948e-17 0.9453 -0.3262\nv 0.006783 -0.034363 0.101161\nvn 3.9948e-17 0.9453 -0.3262\nv -0.001992 -0.031956 0.108137\nvn 3.9948e-17 0.9453 -0.3262\nv 0.015191 0.028163 0.101167\nvn -0.4805 -0.877 -0.0037\nv 0.014063 0.028749 0.10892\nvn -0.4804 -0.877 -0.0037\nv 0.014935 0.028304 0.101167\nvn -0.4805 -0.877 -0.0037\nv -0.009584 -0.034217 0.101163\nvn 0.185 0.8729 -0.4514\nv -0.008072 -0.030986 0.108031\nvn 0.185 0.8729 -0.4514\nv -0.004966 -0.031617 0.108085\nvn 0.185 0.8729 -0.4514\nv 0.0056 0.031474 0.101167\nvn -0.2002 -0.9797 0.0035\nv 0.005159 0.031592 0.109082\nvn -0.2007 -0.9796 0.0033\nv 0.004458 0.031707 0.101167\nvn -0.2002 -0.9797 0.0035\nv -0.001384 0.031974 0.101166\nvn 0.0277 -0.9996 -0.0015\nv -0.002096 0.031942 0.109141\nvn 0.0273 -0.9996 -0.0016\nv -0.001417 0.031973 0.101166\nvn 0.0276 -0.9996 -0.0016\nv 0.008538 0.030863 0.101167\nvn -0.29 -0.957 -0.0058\nv 0.007792 0.031042 0.109036\nvn -0.29 -0.957 -0.0058\nv 0.008439 0.030893 0.101167\nvn -0.29 -0.957 -0.0058\nv -0.012306 0.029548 0.101167\nvn 0.3952 -0.9186 -0.0052\nv -0.010976 0.030077 0.108973\nvn 0.3952 -0.9186 -0.0052\nv -0.014063 0.028749 0.10892\nvn 0.3952 -0.9186 -0.0052\nv 0.008358 0.03091 0.101167\nvn -0.205 -0.9788 0.0011\nv 0.007792 0.031042 0.109036\nvn -0.2047 -0.9788 0.0016\nv -0.008358 0.03091 0.101167\nvn 0.2053 -0.9787 0.001\nv -0.004459 0.031698 0.101167\nvn 0.1981 -0.9802 0.0044\nv -0.005159 0.031592 0.109082\nvn 0.1992 -0.98 0.0039\nv -0.014063 0.028749 0.10892\nvn 0.4804 -0.877 -0.003\nv -0.011866 0.029711 0.101167\nvn 0.3271 -0.9449 0.007\nv -0.009392 0.030567 0.101167\nvn 0.3272 -0.9449 0.007\nv -0.010976 0.030077 0.108973\nvn 0.3272 -0.9449 0.007\nv 0.012392 0.029509 0.101167\nvn -0.4204 -0.9073 0.0017\nv 0.013062 0.029198 0.101167\nvn -0.4206 -0.9072 0.0018\nv 0.014063 0.028749 0.10892\nvn -0.4206 -0.9072 0.0018\nv -0.00439 0.031715 0.101167\nvn 0.239 -0.971 0.0082\nv -0.005159 0.031592 0.109082\nvn 0.239 -0.971 0.0082\nv -0.004459 0.031698 0.101167\nvn 0.239 -0.971 0.0082\nv 0.015432 0.027803 0.094605\nvn -0.0004 -0.9989 0.0471\nv 0.015452 0.027774 0.093987\nvn -0.0005 -0.9989 0.0471\nv 0.015986 0.02772 0.092847\nvn 0.0001 -0.9989 0.0471\nv -0.015201 0.028068 0.096517\nvn 0.343 -0.9392 0.0157\nv -0.015407 0.028048 0.099799\nvn 0.343 -0.9392 0.0157\nv -0.015986 0.02772 0.092847\nvn 0.343 -0.9392 0.0157\nv 0.0126 -0.035944 0.09658\nvn 0.0001 0.9453 -0.3263\nv 0.014457 0.028551 0.101167\nvn -0.4598 -0.888 -0.0007\nv 0.014935 0.028304 0.101167\nvn -0.4598 -0.888 -0.0007\nv 0.014063 0.028749 0.10892\nvn -0.4598 -0.888 -0.0007\nv 0.001835 0.031937 0.101167\nvn -0.0865 -0.9962 0.0035\nv 0.002096 0.031942 0.109141\nvn -0.0864 -0.9963 0.0035\nv 0.001417 0.031973 0.101167\nvn -0.0865 -0.9962 0.0035\nv 0.001384 0.031974 0.101167\nvn -0.0276 -0.9996 -0.0015\nv 0.002096 0.031942 0.109141\nvn -0.0273 -0.9996 -0.0016\nv 0.00439 0.031715 0.101167\nvn -0.1139 -0.9935 -0.0043\nv 0.005159 0.031592 0.109082\nvn -0.1135 -0.9935 -0.0044\nv 0.002096 0.031942 0.109141\nvn -0.1135 -0.9935 -0.0044\nv 0.001287 0.032022 0.101167\nvn 0.0179 -0.9998 0.0001\nv -8.58232e-19 0.031999 0.109175\nvn 0.02 -0.9998 -0.0003\nv -0.014935 0.028304 0.101165\nvn 0.4599 -0.888 -0.0007\nv -0.014457 0.028551 0.101165\nvn 0.4599 -0.888 -0.0007\nv -0.014063 0.028749 0.10892\nvn 0.4599 -0.888 -0.0007\nv -0.007792 0.031042 0.109036\nvn 0.2047 -0.9788 0.0016\nv -0.008439 0.030893 0.101167\nvn 0.2049 -0.9788 0.0016\nv 0.008538 0.030863 0.101167\nvn -0.3272 -0.9449 0.007\nv 0.012185 0.0296 0.101167\nvn -0.3272 -0.9449 0.007\nv 0.010976 0.030077 0.108973\nvn -0.3272 -0.9449 0.007\nv 0.012601 -0.035916 0.09664\nvn -0.1845 0.8731 -0.4512\nv 0.012603 -0.035842 0.096782\nvn -0.1845 0.8731 -0.4512\nv 0.01275 -0.036 0.096417\nvn -0.1845 0.8731 -0.4512\nv -0.002006 0.031922 0.101166\nvn 0.0864 -0.9963 0.0035\nv -0.001417 0.031973 0.101166\nvn 0.0864 -0.9963 0.0035\nv -0.002096 0.031942 0.109141\nvn 0.0864 -0.9963 0.0035\nv 0.0126 -0.035944 0.09658\nvn -0.1107 0.9039 -0.4131\nv 0.012601 -0.035916 0.09664\nvn -0.1107 0.9039 -0.4131\nv 0.01275 -0.036 0.096417\nvn -0.1107 0.9039 -0.4131\nv 0.012306 0.029548 0.101167\nvn -0.3954 -0.9185 -0.0052\nv 0.010976 0.030077 0.108973\nvn -0.3954 -0.9185 -0.0052\nv 0.012185 0.0296 0.101167\nvn -0.3954 -0.9185 -0.0052\nv -0.008538 0.030863 0.101167\nvn 0.2901 -0.957 -0.0058\nv -0.007792 0.031042 0.109036\nvn 0.2901 -0.957 -0.0058\nv -0.010976 0.030077 0.108973\nvn 0.2901 -0.957 -0.0058\nv -0.01259 -0.03591 0.096657\nvn 0.1102 0.904 -0.4132\nv -0.01259 -0.03594 0.096592\nvn 0.1102 0.904 -0.4132\nv -0.01275 -0.036 0.096417\nvn 0.1102 0.904 -0.4132\nv 0.00122 -0.034363 0.10116\nvn 3.9948e-17 0.9453 -0.3262\nv -0.008394 -0.034362 0.101163\nvn 3.9948e-17 0.9453 -0.3262\nv -0.01259 -0.03594 0.096592\nvn 3.99725e-17 0.9452 -0.3264\nv -0.012591 -0.036 0.096417\nvn 3.99725e-17 0.9452 -0.3264\nv -0.01275 -0.036 0.096417\nvn 3.99725e-17 0.9452 -0.3264\nv -0.014457 0.028551 0.101165\nvn 0.4206 -0.9072 0.0018\nv -0.012306 0.029548 0.101167\nvn 0.4206 -0.9072 0.0018\nv -0.014063 0.028749 0.10892\nvn 0.4206 -0.9072 0.0018\nv -8.58232e-19 0.031999 0.109175\nvn 0.018 -0.9998 0.0001\nv -0.015407 0.028048 0.099799\nvn 0.4896 -0.8719 -0.0076\nv -0.015143 0.028193 0.100216\nvn 0.4896 -0.8719 -0.0076\nv -0.015187 0.02816 0.101165\nvn 0.4896 -0.8719 -0.0076\nv 0.015208 0.028157 0.100113\nvn -0.4836 -0.8753 -0.0027\nv 0.015191 0.028163 0.101167\nvn -0.4834 -0.8754 -0.0028\nv -0.0013 0.032022 0.101166\nvn -0.0177 -0.9998 0.0001\nv -0.001992 -0.031956 0.108137\nvn 0.1103 0.904 -0.4131\nv 0.01275 -0.036 0.096417\nvn 0.7312 0.6822 8.95462e-17\nv 0.01265 -0.035892 0.101158\nvn 0.7313 0.6821 8.95584e-17\nv 0.012603 -0.035842 0.096782\nvn 0.7312 0.6822 8.95462e-17\nv 0.010838 -0.033951 0.101163\nvn -0.185 0.8729 -0.4514\nv 0.004966 -0.031617 0.108085\nvn -0.1103 0.904 -0.4132\nv 0.009585 -0.034217 0.101162\nvn -0.1103 0.904 -0.4132\nv 0.008395 -0.034363 0.101161\nvn -0.1103 0.904 -0.4132\nv -0.012589 -0.035828 0.096816\nvn -0.7312 0.6821 -8.95462e-17\nv -0.01275 -0.036 0.096417\nvn -0.7312 0.6821 -8.95462e-17\nv -0.008072 -0.030986 0.108031\nvn -0.7311 0.6823 -8.95339e-17\nv -0.010838 -0.033951 0.101165\nvn -0.7311 0.6823 -8.95339e-17\nv 0.008395 -0.034363 0.101161\nvn 3.9948e-17 0.9453 -0.3262\nv 0.016932 0.027177 0.108861\nvn -0.4804 -0.877 -0.0037\nv -0.010838 -0.033951 0.101165\nvn 0.185 0.8729 -0.4514\nv 0.008538 0.030863 0.101167\nvn -0.2901 -0.957 -0.0058\nv 0.010976 0.030077 0.108973\nvn -0.2901 -0.957 -0.0058\nv 0.007792 0.031042 0.109036\nvn -0.2901 -0.957 -0.0058\nv -0.012185 0.0296 0.101167\nvn 0.3952 -0.9186 -0.0052\nv 0.008439 0.030893 0.101167\nvn -0.2049 -0.9788 0.0016\nv -0.015187 0.02816 0.101165\nvn 0.4956 -0.8685 -0.0058\nv -0.014935 0.028304 0.101165\nvn 0.4956 -0.8685 -0.0058\nv -0.014063 0.028749 0.10892\nvn 0.4956 -0.8685 -0.0058\nv -0.012185 0.0296 0.101167\nvn 0.3271 -0.945 0.007\nv -0.008538 0.030863 0.101167\nvn 0.3272 -0.9449 0.007\nv 0.012306 0.029548 0.101167\nvn -0.4202 -0.9074 0.0016\nv 0.014457 0.028551 0.101167\nvn -0.4206 -0.9072 0.0018\nv -0.00439 0.031715 0.101167\nvn 0.1135 -0.9935 -0.0044\nv -0.002096 0.031942 0.109141\nvn 0.1135 -0.9935 -0.0044\nv -0.005159 0.031592 0.109082\nvn 0.1135 -0.9935 -0.0044\nv 0.015408 0.028048 0.099799\nvn -0.4301 -0.9019 0.0405\nv 0.015208 0.028157 0.100113\nvn -0.4301 -0.9019 0.0405\nv 0.015432 0.027803 0.094605\nvn -0.4301 -0.9019 0.0405\nv 0.015444 0.027784 0.094206\nvn -0.002 -0.9989 0.0471\nv 0.015452 0.027774 0.093987\nvn -5.75584e-18 -0.9989 0.047\nv 0.015161 0.027722 0.092893\nvn 0.0005 -0.9989 0.0472\nv 0.015156 0.02772 0.092847\nvn -5.76809e-18 -0.9989 0.0471\nv 0.015408 0.028048 0.099799\nvn 0.0001 -0.9989 0.0471\nv 0.015986 0.02772 0.092847\nvn -5.76809e-18 -0.9989 0.0471\nv -0.015986 0.02772 0.092847\nvn -0.0094 -0.9227 0.3855\nv -0.015161 0.027716 0.092858\nvn -0.0094 -0.9227 0.3855\nv -0.01518 0.027845 0.093166\nvn -0.0094 -0.9227 0.3855\nv -0.015302 0.027933 0.093577\nvn 0.2626 -0.9643 0.0353\nv -0.015241 0.028 0.094942\nvn 0.2625 -0.9643 0.0353\nv -0.015986 0.02772 0.092847\nvn 0.2626 -0.9643 0.0353\nv -0.015986 0.02772 0.092847\nvn 0.0609 -0.9721 0.2267\nv -0.01518 0.027845 0.093166\nvn 0.0609 -0.9721 0.2267\nv -0.015302 0.027933 0.093577\nvn 0.0609 -0.9721 0.2267\nv -0.015143 0.028193 0.100216\nvn 0.4522 -0.8916 0.0229\nv -0.015407 0.028048 0.099799\nvn 0.4522 -0.8916 0.0229\nv -0.015201 0.028068 0.096517\nvn 0.4522 -0.8916 0.0229\nv -0.015201 0.028068 0.096517\nvn 0.2625 -0.9643 0.0353\nv 0.00439 0.031715 0.101167\nvn -0.0864 -0.9963 0.0035\nv 0.001417 0.031973 0.101167\nvn -0.027 -0.9996 -0.0016\nv 0.004458 0.031707 0.101167\nvn -0.1136 -0.9935 -0.0044\nv -0.00439 0.031715 0.101167\nvn 0.0864 -0.9963 0.0035\nv -0.002256 0.0319 0.101166\nvn 0.0864 -0.9963 0.0035\nv 0.012306 0.029548 0.101167\nvn -0.3952 -0.9186 -0.0051\nv 0.014063 0.028749 0.10892\nvn -0.3952 -0.9186 -0.0051\nv 0.010976 0.030077 0.108973\nvn -0.3952 -0.9186 -0.0051\nv -0.008439 0.030893 0.101167\nvn 0.29 -0.957 -0.0058\nv 0.002815 -0.034363 0.10116\nvn 3.9948e-17 0.9453 -0.3262\nv 0.002068 -0.088079 0.118096\nvn 0.322 -0.5397 -0.7778\nv 0.002143 -0.088459 0.118391\nvn 0.322 -0.5397 -0.7778\nv 0.00123 -0.088258 0.117874\nvn 0.322 -0.5397 -0.7778\nv -0.003787 -0.088583 0.124583\nvn -0.5317 -0.8291 0.1727\nv -0.004328 -0.088588 0.12289\nvn -0.5317 -0.8291 0.1727\nv -0.003852 -0.08877 0.123485\nvn -0.5317 -0.8291 0.1727\nv -0.004446 -0.088271 0.123714\nvn -0.6235 -0.7553 0.2018\nv -0.004328 -0.088588 0.12289\nvn -0.6235 -0.7553 0.2018\nv -0.003787 -0.088583 0.124583\nvn -0.6235 -0.7553 0.2018\nv -0.004446 -0.088271 0.123714\nvn -0.8277 -0.5531 0.0947\nv -0.004617 -0.088295 0.122085\nvn -0.8277 -0.5531 0.0947\nv -0.004328 -0.088588 0.12289\nvn -0.8277 -0.5531 0.0947\nv -0.00437 -0.088339 0.120886\nvn -0.6978 -0.7066 -0.1176\nv -0.004156 -0.088709 0.121842\nvn -0.6978 -0.7066 -0.1176\nv -0.004617 -0.088295 0.122085\nvn -0.6978 -0.7066 -0.1176\nv -0.003366 -0.088635 0.119614\nvn -0.5751 -0.785 -0.2301\nv -0.003545 -0.088781 0.12056\nvn -0.5751 -0.785 -0.2301\nv -0.004156 -0.088709 0.121842\nvn -0.5751 -0.785 -0.2301\nv -0.00437 -0.088339 0.120886\nvn -0.5107 -0.834 -0.2089\nv -0.003366 -0.088635 0.119614\nvn -0.5107 -0.834 -0.2089\nv -0.004156 -0.088709 0.121842\nvn -0.5107 -0.834 -0.2089\nv -0.004328 -0.088588 0.12289\nvn -0.6763 -0.7362 -0.0262\nv -0.004617 -0.088295 0.122085\nvn -0.6763 -0.7362 -0.0262\nv -0.004156 -0.088709 0.121842\nvn -0.6763 -0.7362 -0.0262\nv -0.003825 -0.088201 0.119653\nvn -0.6556 -0.6619 -0.3634\nv -0.003366 -0.088635 0.119614\nvn -0.6556 -0.6619 -0.3634\nv -0.00437 -0.088339 0.120886\nvn -0.6556 -0.6619 -0.3634\nv -0.003366 -0.088635 0.119614\nvn -0.2367 -0.9525 -0.1916\nv -0.002372 -0.088779 0.1191\nvn -0.2367 -0.9525 -0.1916\nv -0.003545 -0.088781 0.12056\nvn -0.2367 -0.9525 -0.1916\nv -0.00319 -0.088303 0.119004\nvn -0.6142 -0.6055 -0.5061\nv -0.003366 -0.088635 0.119614\nvn -0.6142 -0.6055 -0.5061\nv -0.003825 -0.088201 0.119653\nvn -0.6142 -0.6055 -0.5061\nv -0.002202 -0.088392 0.118312\nvn -0.3606 -0.8042 -0.4725\nv -0.002372 -0.088779 0.1191\nvn -0.3606 -0.8042 -0.4725\nv -0.003366 -0.088635 0.119614\nvn -0.3606 -0.8042 -0.4725\nv -0.00319 -0.088303 0.119004\nvn -0.4325 -0.734 -0.5236\nv -0.002202 -0.088392 0.118312\nvn -0.4325 -0.734 -0.5236\nv -0.003366 -0.088635 0.119614\nvn -0.4325 -0.734 -0.5236\nv -0.002913 -0.088775 0.125123\nvn -0.2665 -0.8908 0.3681\nv -0.001856 -0.088761 0.125921\nvn -0.2665 -0.8908 0.3681\nv -0.0026 -0.088533 0.125935\nvn -0.2665 -0.8908 0.3681\nv -0.004156 -0.088709 0.121842\nvn -0.3993 -0.9159 0.0401\nv -0.003852 -0.08877 0.123485\nvn -0.3993 -0.9159 0.0401\nv -0.004328 -0.088588 0.12289\nvn -0.3993 -0.9159 0.0401\nv -0.003419 -0.088032 0.125621\nvn -0.5532 -0.4777 0.6825\nv -0.0026 -0.088533 0.125935\nvn -0.5532 -0.4777 0.6825\nv -0.002324 -0.088274 0.126339\nvn -0.5532 -0.4777 0.6825\nv -0.000535 -0.088777 0.118325\nvn -0.196 -0.8629 -0.4659\nv -0.002372 -0.088779 0.1191\nvn -0.196 -0.8629 -0.4659\nv -0.002202 -0.088392 0.118312\nvn -0.196 -0.8629 -0.4659\nv -0.003787 -0.088583 0.124583\nvn -0.4278 -0.8078 0.4056\nv -0.002913 -0.088775 0.125123\nvn -0.4278 -0.8078 0.4056\nv -0.0026 -0.088533 0.125935\nvn -0.4278 -0.8078 0.4056\nv -0.001096 -0.088346 0.117876\nvn -0.1839 -0.8133 -0.552\nv -0.000535 -0.088777 0.118325\nvn -0.1839 -0.8133 -0.552\nv -0.002202 -0.088392 0.118312\nvn -0.1839 -0.8133 -0.552\nv -0.003419 -0.088032 0.125621\nvn -0.5804 -0.6161 0.5326\nv -0.003787 -0.088583 0.124583\nvn -0.5804 -0.6161 0.5326\nv -0.0026 -0.088533 0.125935\nvn -0.5804 -0.6161 0.5326\nv -0.003946 -0.088093 0.124898\nvn -0.6532 -0.5482 0.5223\nv -0.003787 -0.088583 0.124583\nvn -0.6532 -0.5482 0.5223\nv -0.003419 -0.088032 0.125621\nvn -0.6532 -0.5482 0.5223\nv 6.4e-05 -0.088301 0.117697\nvn -0.0699 -0.7614 -0.6445\nv -0.000535 -0.088777 0.118325\nvn -0.0699 -0.7614 -0.6445\nv -0.001096 -0.088346 0.117876\nvn -0.0699 -0.7614 -0.6445\nv -0.003787 -0.088583 0.124583\nvn -0.3142 -0.9326 0.1774\nv -0.003852 -0.08877 0.123485\nvn -0.3142 -0.9326 0.1774\nv -0.002913 -0.088775 0.125123\nvn -0.3142 -0.9326 0.1774\nv 6.4e-05 -0.088301 0.117697\nvn -0.0526 -0.7707 -0.635\nv 0.000617 -0.088602 0.118016\nvn -0.0526 -0.7707 -0.635\nv -0.000535 -0.088777 0.118325\nvn -0.0526 -0.7707 -0.635\nv -0.004446 -0.088271 0.123714\nvn -0.7651 -0.5054 0.3991\nv -0.003787 -0.088583 0.124583\nvn -0.7651 -0.5054 0.3991\nv -0.003946 -0.088093 0.124898\nvn -0.7651 -0.5054 0.3991\nv 0.001939 -0.088748 0.118743\nvn 0.063 -0.9501 -0.3054\nv -0.000535 -0.088777 0.118325\nvn 0.063 -0.9501 -0.3054\nv 0.000617 -0.088602 0.118016\nvn 0.063 -0.9501 -0.3054\nv 0.00123 -0.088258 0.117874\nvn 0.1426 -0.5851 -0.7983\nv 0.000617 -0.088602 0.118016\nvn 0.1426 -0.5851 -0.7983\nv 6.4e-05 -0.088301 0.117697\nvn 0.1426 -0.5851 -0.7983\nv -0.004156 -0.088709 0.121842\nvn -0.1386 -0.9903 -0.0108\nv -0.003545 -0.088781 0.12056\nvn -0.1386 -0.9903 -0.0108\nv -0.003852 -0.08877 0.123485\nvn -0.1386 -0.9903 -0.0108\nv 0.002143 -0.088459 0.118391\nvn 0.2097 -0.8123 -0.5443\nv 0.001939 -0.088748 0.118743\nvn 0.2097 -0.8123 -0.5443\nv 0.000617 -0.088602 0.118016\nvn 0.2097 -0.8123 -0.5443\nv 0.002143 -0.088459 0.118391\nvn 0.2321 -0.6957 -0.6798\nv 0.000617 -0.088602 0.118016\nvn 0.2321 -0.6957 -0.6798\nv 0.00123 -0.088258 0.117874\nvn 0.2321 -0.6957 -0.6798\nv -0.003652 -0.077046 0.118112\nvn -0.5677 0.1116 -0.8157\nv -0.002921 -0.076902 0.117622\nvn -0.5677 0.1116 -0.8157\nv -0.003234 -0.078158 0.117669\nvn -0.5677 0.1116 -0.8157\nv -0.002681 -0.082564 0.117357\nvn -0.4467 -0.108 -0.8881\nv -0.002447 -0.084988 0.117534\nvn -0.4463 -0.1082 -0.8883\nv -0.002859 -0.083736 0.117589\nvn -0.4461 -0.108 -0.8885\nv -0.002921 -0.076902 0.117622\nvn -0.5686 0.1256 -0.8129\nv -0.003652 -0.077046 0.118112\nvn -0.5686 0.1256 -0.8129\nv -0.002912 -0.07583 0.117782\nvn -0.5686 0.1256 -0.8129\nv 0.005019 -0.08245 0.119685\nvn 0.9144 -0.1101 -0.3894\nv 0.005443 -0.083182 0.120888\nvn 0.9144 -0.1101 -0.3894\nv 0.004763 -0.084827 0.119757\nvn 0.9144 -0.1101 -0.3894\nv -0.002645 -0.081206 0.117252\nvn -0.4254 -0.0586 -0.9031\nv -0.002048 -0.082954 0.117084\nvn -0.4254 -0.0586 -0.9031\nv -0.002681 -0.082564 0.117357\nvn -0.4254 -0.0586 -0.9031\nv 0.004181 -0.088116 0.120151\nvn 0.9166 -0.2466 -0.3146\nv 0.004962 -0.086356 0.121047\nvn 0.9166 -0.2466 -0.3146\nv 0.004309 -0.088292 0.120663\nvn 0.9166 -0.2466 -0.3146\nv 0.004181 -0.088116 0.120151\nvn 0.9011 -0.2053 -0.382\nv 0.004763 -0.084827 0.119757\nvn 0.9011 -0.2053 -0.382\nv 0.004962 -0.086356 0.121047\nvn 0.9011 -0.2053 -0.382\nv 0.004406 -0.075837 0.119204\nvn 0.9312 0.2129 -0.2958\nv 0.004907 -0.077437 0.119628\nvn 0.9312 0.2129 -0.2958\nv 0.004719 -0.076901 0.119421\nvn 0.9312 0.2129 -0.2958\nv 0.004908 -0.075825 0.120052\nvn 0.852 0.1322 -0.5066\nv 0.004907 -0.077437 0.119628\nvn 0.852 0.1322 -0.5066\nv 0.004406 -0.075837 0.119204\nvn 0.852 0.1322 -0.5066\nv -0.002048 -0.082954 0.117084\nvn -0.4489 -0.1081 -0.887\nv 0.005061 -0.079057 0.119683\nvn 0.7876 0.024 -0.6158\nv 0.005058 -0.078215 0.119712\nvn 0.7876 0.024 -0.6158\nv 0.005106 -0.08013 0.1197\nvn 0.7876 0.024 -0.6158\nv -0.002921 -0.076902 0.117622\nvn -0.4455 0.1354 -0.885\nv -0.002912 -0.07583 0.117782\nvn -0.4455 0.1354 -0.885\nv -0.002713 -0.077449 0.117434\nvn -0.4455 0.1354 -0.885\nv 0.005106 -0.08013 0.1197\nvn 0.9152 -0.0318 -0.4018\nv 0.005508 -0.080134 0.120614\nvn 0.9152 -0.0318 -0.4018\nv 0.005019 -0.08245 0.119685\nvn 0.9152 -0.0318 -0.4018\nv 0.004763 -0.084827 0.119757\nvn 0.9307 -0.1576 -0.3301\nv 0.005443 -0.083182 0.120888\nvn 0.9307 -0.1576 -0.3301\nv 0.004962 -0.086356 0.121047\nvn 0.9307 -0.1576 -0.3301\nv -0.002202 -0.088392 0.118312\nvn -0.3397 -0.2947 -0.8932\nv -0.001987 -0.086821 0.117712\nvn -0.3397 -0.2947 -0.8932\nv -0.001096 -0.088346 0.117876\nvn -0.3397 -0.2947 -0.8932\nv 0.005106 -0.08013 0.1197\nvn 0.9154 0.0258 -0.4017\nv 0.005058 -0.078215 0.119712\nvn 0.9154 0.0258 -0.4017\nv 0.005508 -0.080134 0.120614\nvn 0.9154 0.0258 -0.4017\nv -0.002645 -0.081206 0.117252\nvn -0.4024 -0.0111 -0.9154\nv -0.002641 -0.079967 0.117235\nvn -0.4024 -0.0111 -0.9154\nv -0.001656 -0.080533 0.116809\nvn -0.4024 -0.0111 -0.9154\nv -0.002645 -0.081206 0.117252\nvn -0.3841 -0.0427 -0.9223\nv -0.001656 -0.080533 0.116809\nvn -0.3841 -0.0427 -0.9223\nv -0.002048 -0.082954 0.117084\nvn -0.3841 -0.0427 -0.9223\nv 0.004907 -0.077437 0.119628\nvn 0.8783 0.1206 -0.4626\nv 0.004908 -0.075825 0.120052\nvn 0.8783 0.1206 -0.4626\nv 0.005058 -0.078215 0.119712\nvn 0.8783 0.1206 -0.4626\nv -0.002713 -0.077449 0.117434\nvn -0.4499 0.0915 -0.8884\nv -0.002025 -0.077982 0.117031\nvn -0.4499 0.0915 -0.8884\nv -0.002654 -0.078348 0.117312\nvn -0.4499 0.0915 -0.8884\nv -0.002652 -0.079055 0.117275\nvn -0.4136 0.0346 -0.9098\nv -0.002025 -0.077982 0.117031\nvn -0.4136 0.0346 -0.9098\nv -0.002641 -0.079967 0.117235\nvn -0.4136 0.0346 -0.9098\nv 0.005019 -0.08245 0.119685\nvn 0.9315 -0.052 -0.36\nv 0.005508 -0.080134 0.120614\nvn 0.9315 -0.052 -0.36\nv 0.005443 -0.083182 0.120888\nvn 0.9315 -0.052 -0.36\nv -0.002912 -0.07583 0.117782\nvn -0.4166 0.1417 -0.898\nv -0.002025 -0.077982 0.117031\nvn -0.4166 0.1417 -0.898\nv -0.002713 -0.077449 0.117434\nvn -0.4166 0.1417 -0.898\nv -0.002654 -0.078348 0.117312\nvn -0.4293 0.0456 -0.902\nv -0.002025 -0.077982 0.117031\nvn -0.4293 0.0456 -0.902\nv -0.002652 -0.079055 0.117275\nvn -0.4293 0.0456 -0.902\nv 0.004309 -0.088292 0.120663\nvn 0.9384 -0.2747 -0.2097\nv 0.004962 -0.086356 0.121047\nvn 0.9384 -0.2747 -0.2097\nv 0.004518 -0.088419 0.121764\nvn 0.9384 -0.2747 -0.2097\nv -0.002447 -0.084988 0.117534\nvn -0.2957 -0.1645 -0.941\nv -0.000793 -0.085947 0.117182\nvn -0.2925 -0.1576 -0.9432\nv -0.001987 -0.086821 0.117712\nvn -0.2961 -0.1655 -0.9407\nv -0.002447 -0.084988 0.117534\nvn -0.3052 -0.1482 -0.9407\nv -0.002048 -0.082954 0.117084\nvn -0.3052 -0.1482 -0.9407\nv -0.001193 -0.083002 0.116815\nvn -0.3052 -0.1482 -0.9407\nv -0.001966 -0.075809 0.117326\nvn -0.4326 0.1329 -0.8918\nv -0.002025 -0.077982 0.117031\nvn -0.4326 0.1329 -0.8918\nv -0.002912 -0.07583 0.117782\nvn -0.4326 0.1329 -0.8918\nv -0.002641 -0.079967 0.117235\nvn -0.3851 0.0245 -0.9226\nv -0.002025 -0.077982 0.117031\nvn -0.3851 0.0245 -0.9226\nv -0.001656 -0.080533 0.116809\nvn -0.3851 0.0245 -0.9226\nv -0.001193 -0.083002 0.116815\nvn -0.292 -0.1575 -0.9434\nv -0.001987 -0.086821 0.117712\nvn -0.2402 -0.2416 -0.9402\nv -0.000793 -0.085947 0.117182\nvn -0.2402 -0.2416 -0.9402\nv -0.001096 -0.088346 0.117876\nvn -0.2402 -0.2416 -0.9402\nv 0.005443 -0.083182 0.120888\nvn 0.9607 -0.1571 -0.2286\nv 0.005399 -0.084663 0.121721\nvn 0.9607 -0.1571 -0.2286\nv 0.004962 -0.086356 0.121047\nvn 0.9607 -0.1571 -0.2286\nv -0.002048 -0.082954 0.117084\nvn -0.3035 -0.059 -0.951\nv -0.001656 -0.080533 0.116809\nvn -0.3035 -0.059 -0.951\nv -0.001193 -0.083002 0.116815\nvn -0.3035 -0.059 -0.951\nv 0.004962 -0.086356 0.121047\nvn 0.9565 -0.255 -0.1418\nv 0.005053 -0.086732 0.122339\nvn 0.9565 -0.255 -0.1418\nv 0.004518 -0.088419 0.121764\nvn 0.9565 -0.255 -0.1418\nv 0.005058 -0.078215 0.119712\nvn 0.9392 0.0613 -0.338\nv 0.005459 -0.077501 0.120956\nvn 0.9392 0.0613 -0.338\nv 0.005508 -0.080134 0.120614\nvn 0.9392 0.0613 -0.338\nv 0.005058 -0.078215 0.119712\nvn 0.9261 0.1092 -0.3612\nv 0.004908 -0.075825 0.120052\nvn 0.9261 0.1092 -0.3612\nv 0.005459 -0.077501 0.120956\nvn 0.9261 0.1092 -0.3612\nv 0.005508 -0.080134 0.120614\nvn 0.9762 -0.0397 -0.2132\nv 0.00572 -0.081352 0.121813\nvn 0.9762 -0.0397 -0.2132\nv 0.005443 -0.083182 0.120888\nvn 0.9762 -0.0397 -0.2132\nv -0.001096 -0.088346 0.117876\nvn -0.1378 -0.2591 -0.956\nv -0.000793 -0.085947 0.117182\nvn -0.1378 -0.2591 -0.956\nv 6.4e-05 -0.088301 0.117697\nvn -0.1378 -0.2591 -0.956\nv -0.002025 -0.077982 0.117031\nvn -0.2526 0.0474 -0.9664\nv -0.000923 -0.077909 0.116746\nvn -0.2526 0.0474 -0.9664\nv -0.001656 -0.080533 0.116809\nvn -0.2526 0.0474 -0.9664\nv 0.004518 -0.088419 0.121764\nvn 0.9575 -0.2795 -0.0709\nv 0.005053 -0.086732 0.122339\nvn 0.9575 -0.2795 -0.0709\nv 0.004616 -0.088295 0.122594\nvn 0.9575 -0.2795 -0.0709\nv 0.004962 -0.086356 0.121047\nvn 0.9715 -0.2003 -0.127\nv 0.005399 -0.084663 0.121721\nvn 0.9715 -0.2003 -0.127\nv 0.005053 -0.086732 0.122339\nvn 0.9715 -0.2003 -0.127\nv 0.005235 -0.075811 0.121021\nvn 0.9381 0.1362 -0.3184\nv 0.005459 -0.077501 0.120956\nvn 0.9381 0.1362 -0.3184\nv 0.004908 -0.075825 0.120052\nvn 0.9381 0.1362 -0.3184\nv -0.001966 -0.075809 0.117326\nvn -0.2962 0.1365 -0.9453\nv -0.00108 -0.075823 0.117047\nvn -0.2962 0.1365 -0.9453\nv -0.002025 -0.077982 0.117031\nvn -0.2962 0.1365 -0.9453\nv 0.005508 -0.080134 0.120614\nvn 0.9782 0.0445 -0.203\nv 0.005459 -0.077501 0.120956\nvn 0.9782 0.0445 -0.203\nv 0.005711 -0.079049 0.121831\nvn 0.9782 0.0445 -0.203\nv 0.005508 -0.080134 0.120614\nvn 0.9856 0.0052 -0.1692\nv 0.005711 -0.079049 0.121831\nvn 0.9856 0.0052 -0.1692\nv 0.00572 -0.081352 0.121813\nvn 0.9856 0.0052 -0.1692\nv 0.005544 -0.083737 0.122186\nvn 0.9891 -0.0915 -0.1157\nv 0.005443 -0.083182 0.120888\nvn 0.9886 -0.0946 -0.117\nv 0.00572 -0.081352 0.121813\nvn 0.9891 -0.0911 -0.1155\nv 0.005399 -0.084663 0.121721\nvn 0.9885 -0.0953 -0.1172\nv -0.002025 -0.077982 0.117031\nvn -0.2555 0.1188 -0.9595\nv -0.00108 -0.075823 0.117047\nvn -0.2555 0.1188 -0.9595\nv -0.000923 -0.077909 0.116746\nvn -0.2555 0.1188 -0.9595\nv -0.000212 -0.08371 0.116796\nvn -0.0558 -0.0519 -0.9971\nv -0.001193 -0.083002 0.116815\nvn -0.0558 -0.0519 -0.9971\nv -0.000526 -0.079729 0.116607\nvn -0.0558 -0.0519 -0.9971\nv -0.000793 -0.085947 0.117182\nvn -0.0297 -0.2237 -0.9742\nv -5e-05 -0.085313 0.117014\nvn -0.0297 -0.2237 -0.9742\nv 6.4e-05 -0.088301 0.117697\nvn -0.0297 -0.2237 -0.9742\nv -0.000923 -0.077909 0.116746\nvn -0.1981 0.0319 -0.9797\nv -0.000526 -0.079729 0.116607\nvn -0.1981 0.0319 -0.9797\nv -0.001656 -0.080533 0.116809\nvn -0.1981 0.0319 -0.9797\nv -0.001656 -0.080533 0.116809\nvn -0.1546 -0.0311 -0.9875\nv -0.000526 -0.079729 0.116607\nvn -0.1546 -0.0311 -0.9875\nv -0.001193 -0.083002 0.116815\nvn -0.1546 -0.0311 -0.9875\nv -0.000793 -0.085947 0.117182\nvn -0.1003 -0.1438 -0.9845\nv -0.000212 -0.08371 0.116796\nvn -0.1003 -0.1438 -0.9845\nv -5e-05 -0.085313 0.117014\nvn -0.1003 -0.1438 -0.9845\nv -0.001193 -0.083002 0.116815\nvn -0.1184 -0.1389 -0.9832\nv -0.000212 -0.08371 0.116796\nvn -0.1184 -0.1389 -0.9832\nv -0.000793 -0.085947 0.117182\nvn -0.1184 -0.1389 -0.9832\nv 0.005235 -0.075811 0.121021\nvn 0.9804 0.1352 -0.1436\nv 0.00554 -0.076802 0.122169\nvn 0.9804 0.1352 -0.1436\nv 0.005459 -0.077501 0.120956\nvn 0.9804 0.1352 -0.1436\nv 0.005401 -0.075821 0.122365\nvn 0.9794 0.1627 -0.1196\nv 0.00554 -0.076802 0.122169\nvn 0.9794 0.1627 -0.1196\nv 0.005235 -0.075811 0.121021\nvn 0.9794 0.1627 -0.1196\nv 0.005544 -0.083737 0.122186\nvn 0.9897 -0.1401 -0.0284\nv 0.005425 -0.08466 0.122604\nvn 0.9897 -0.1401 -0.0284\nv 0.005399 -0.084663 0.121721\nvn 0.9897 -0.1401 -0.0284\nv 0.005399 -0.084663 0.121721\nvn 0.9845 -0.173 -0.0282\nv 0.005425 -0.08466 0.122604\nvn 0.9845 -0.173 -0.0282\nv 0.005053 -0.086732 0.122339\nvn 0.9845 -0.173 -0.0282\nv 0.005459 -0.077501 0.120956\nvn 0.9884 0.0931 -0.1198\nv 0.00554 -0.076802 0.122169\nvn 0.9884 0.0931 -0.1198\nv 0.005711 -0.079049 0.121831\nvn 0.9884 0.0931 -0.1198\nv 0.005544 -0.083737 0.122186\nvn 0.9927 -0.1192 0.0187\nv 0.005602 -0.083208 0.122446\nvn 0.9927 -0.1192 0.0187\nv 0.005425 -0.08466 0.122604\nvn 0.9927 -0.1192 0.0187\nv 0.005602 -0.083208 0.122446\nvn 0.9841 -0.1046 0.1438\nv 0.005654 -0.08264 0.122503\nvn 0.9841 -0.1046 0.1438\nv 0.005425 -0.08466 0.122604\nvn 0.9841 -0.1046 0.1438\nv 1.3e-05 -0.075817 0.116943\nvn -0.0946 0.1348 -0.9863\nv -0.000923 -0.077909 0.116746\nvn -0.0946 0.1348 -0.9863\nv -0.00108 -0.075823 0.117047\nvn -0.0946 0.1348 -0.9863\nv -5e-05 -0.085313 0.117014\nvn 0.0519 -0.2206 -0.974\nv 0.00099 -0.085886 0.117199\nvn 0.0519 -0.2206 -0.974\nv 6.4e-05 -0.088301 0.117697\nvn 0.0519 -0.2206 -0.974\nv -0.000923 -0.077909 0.116746\nvn -0.0295 0.07 -0.9971\nv -0.000167 -0.076837 0.116799\nvn -0.0295 0.07 -0.9971\nv -0.000526 -0.079729 0.116607\nvn -0.0295 0.07 -0.9971\nv -0.000212 -0.08371 0.116796\nvn 0.0066 -0.1338 -0.991\nv 0.000126 -0.083216 0.116732\nvn 0.0066 -0.1338 -0.991\nv -5e-05 -0.085313 0.117014\nvn 0.0066 -0.1338 -0.991\nv -0.000167 -0.076837 0.116799\nvn -0.1676 0.166 -0.9718\nv -0.000923 -0.077909 0.116746\nvn -0.1676 0.166 -0.9718\nv 1.3e-05 -0.075817 0.116943\nvn -0.1676 0.166 -0.9718\nv 0.005425 -0.08466 0.122604\nvn 0.9756 -0.1892 0.1112\nv 0.005006 -0.086279 0.12353\nvn 0.9756 -0.1892 0.1112\nv 0.005053 -0.086732 0.122339\nvn 0.9756 -0.1892 0.1112\nv -5e-05 -0.085313 0.117014\nvn 0.098 -0.1407 -0.9852\nv 0.000126 -0.083216 0.116732\nvn 0.098 -0.1407 -0.9852\nv 0.00099 -0.085886 0.117199\nvn 0.098 -0.1407 -0.9852\nv 0.005053 -0.086732 0.122339\nvn 0.9599 -0.247 0.1325\nv 0.005006 -0.086279 0.12353\nvn 0.9599 -0.247 0.1325\nv 0.004616 -0.088295 0.122594\nvn 0.9599 -0.247 0.1325\nv 0.004616 -0.088295 0.122594\nvn 0.9421 -0.2727 0.1953\nv 0.005006 -0.086279 0.12353\nvn 0.9421 -0.2727 0.1953\nv 0.004327 -0.088359 0.123897\nvn 0.9421 -0.2727 0.1953\nv 0.00016 -0.082636 0.116687\nvn 0.0926 -0.0825 -0.9923\nv 0.001103 -0.082726 0.116782\nvn 0.0926 -0.0825 -0.9923\nv 0.000126 -0.083216 0.116732\nvn 0.0926 -0.0825 -0.9923\nv 0.005715 -0.081279 0.122561\nvn 0.997 -0.0473 0.0614\nv 0.005641 -0.081815 0.123354\nvn 0.997 -0.0473 0.0614\nv 0.005654 -0.08264 0.122503\nvn 0.997 -0.0473 0.0614\nv 0.005654 -0.08264 0.122503\nvn 0.9873 -0.1062 0.1184\nv 0.005641 -0.081815 0.123354\nvn 0.9867 -0.1071 0.1221\nv 0.005425 -0.08466 0.122604\nvn 0.9871 -0.1064 0.1195\nv 0.005384 -0.083576 0.123854\nvn 0.9861 -0.1081 0.126\nv 0.005425 -0.08466 0.122604\nvn 0.9734 -0.1564 0.1675\nv 0.005384 -0.083576 0.123854\nvn 0.9734 -0.1564 0.1675\nv 0.005006 -0.086279 0.12353\nvn 0.9734 -0.1564 0.1675\nv 0.005627 -0.077689 0.122474\nvn 0.9962 0.0714 0.0489\nv 0.005581 -0.077396 0.122974\nvn 0.9962 0.0714 0.0489\nv 0.00574 -0.079367 0.12261\nvn 0.9962 0.0714 0.0489\nv 0.00554 -0.076802 0.122169\nvn 0.9939 0.1068 0.028\nv 0.005581 -0.077396 0.122974\nvn 0.9939 0.1068 0.028\nv 0.005627 -0.077689 0.122474\nvn 0.9939 0.1068 0.028\nv 0.005736 -0.0804 0.122591\nvn 0.9968 -0.0258 0.0759\nv 0.005641 -0.081815 0.123354\nvn 0.9968 -0.0258 0.0759\nv 0.005715 -0.081279 0.122561\nvn 0.9968 -0.0258 0.0759\nv 0.005736 -0.0804 0.122591\nvn 0.9937 -0.0064 0.1115\nv 0.00574 -0.079367 0.12261\nvn 0.9937 -0.0064 0.1115\nv 0.005641 -0.081815 0.123354\nvn 0.9937 -0.0064 0.1115\nv 6.4e-05 -0.088301 0.117697\nvn 0.1544 -0.2558 -0.9543\nv 0.00099 -0.085886 0.117199\nvn 0.1544 -0.2558 -0.9543\nv 0.00123 -0.088258 0.117874\nvn 0.1544 -0.2558 -0.9543\nv 0.000126 -0.083216 0.116732\nvn 0.118 -0.134 -0.9839\nv 0.001103 -0.082726 0.116782\nvn 0.118 -0.134 -0.9839\nv 0.00099 -0.085886 0.117199\nvn 0.118 -0.134 -0.9839\nv 1.3e-05 -0.075817 0.116943\nvn 0.0431 0.1314 -0.9904\nv 0.000791 -0.076981 0.116822\nvn 0.043 0.1311 -0.9904\nv -0.000167 -0.076837 0.116799\nvn 0.0416 0.1217 -0.9917\nv 0.000138 -0.077629 0.116716\nvn 0.0415 0.1209 -0.9918\nv 0.00016 -0.082636 0.116687\nvn 0.095 -0.0586 -0.9937\nv 0.000241 -0.081278 0.116615\nvn 0.095 -0.0586 -0.9937\nv 0.001103 -0.082726 0.116782\nvn 0.095 -0.0586 -0.9937\nv 0.005401 -0.075821 0.122365\nvn 0.9903 0.1311 0.046\nv 0.005581 -0.077396 0.122974\nvn 0.9903 0.1311 0.046\nv 0.00554 -0.076802 0.122169\nvn 0.9903 0.1311 0.046\nv 0.000211 -0.078951 0.116636\nvn 0.0769 0.0645 -0.995\nv 0.000138 -0.077629 0.116716\nvn 0.0769 0.0645 -0.995\nv 0.000959 -0.079238 0.116675\nvn 0.0769 0.0645 -0.995\nv 0.000211 -0.078951 0.116636\nvn 0.0626 0.0269 -0.9977\nv 0.000959 -0.079238 0.116675\nvn 0.0626 0.0269 -0.9977\nv 0.00026 -0.080405 0.116599\nvn 0.0626 0.0269 -0.9977\nv 0.00026 -0.080405 0.116599\nvn 0.1402 -0.0201 -0.9899\nv 0.000959 -0.079238 0.116675\nvn 0.1417 -0.0206 -0.9897\nv 0.000241 -0.081278 0.116615\nvn 0.1431 -0.0211 -0.9895\nv 0.005263 -0.075811 0.123492\nvn 0.9804 0.1578 0.1182\nv 0.005581 -0.077396 0.122974\nvn 0.9804 0.1578 0.1182\nv 0.005401 -0.075821 0.122365\nvn 0.9804 0.1578 0.1182\nv 0.000138 -0.077629 0.116716\nvn 0.0907 0.0715 -0.9933\nv 0.000791 -0.076981 0.116822\nvn 0.0907 0.0715 -0.9933\nv 0.000959 -0.079238 0.116675\nvn 0.0907 0.0715 -0.9933\nv 0.001103 -0.082726 0.116782\nvn 0.1518 -0.0242 -0.9881\nv 0.005263 -0.075811 0.123492\nvn 0.9725 0.1322 0.1915\nv 0.005419 -0.077595 0.123933\nvn 0.9725 0.1322 0.1915\nv 0.005581 -0.077396 0.122974\nvn 0.9725 0.1322 0.1915\nv 0.00574 -0.079367 0.12261\nvn 0.9863 0.0101 0.1648\nv 0.005521 -0.080522 0.123997\nvn 0.9863 0.0101 0.1648\nv 0.005641 -0.081815 0.123354\nvn 0.9863 0.0101 0.1648\nv 0.00099 -0.085886 0.117199\nvn 0.2957 -0.2335 -0.9263\nv 0.002068 -0.088079 0.118096\nvn 0.2957 -0.2335 -0.9263\nv 0.00123 -0.088258 0.117874\nvn 0.2957 -0.2335 -0.9263\nv 0.001405 -0.075818 0.117127\nvn 0.1292 0.1872 -0.9738\nv 0.000791 -0.076981 0.116822\nvn 0.1292 0.1872 -0.9738\nv 1.3e-05 -0.075817 0.116943\nvn 0.1292 0.1872 -0.9738\nv 0.00574 -0.079367 0.12261\nvn 0.9816 0.038 0.1873\nv 0.005419 -0.077595 0.123933\nvn 0.9816 0.038 0.1873\nv 0.005521 -0.080522 0.123997\nvn 0.9816 0.038 0.1873\nv 0.005006 -0.086279 0.12353\nvn 0.9093 -0.236 0.3427\nv 0.004745 -0.085596 0.124691\nvn 0.9093 -0.236 0.3427\nv 0.004327 -0.088359 0.123897\nvn 0.9093 -0.236 0.3427\nv 0.005581 -0.077396 0.122974\nvn 0.9833 0.047 0.1756\nv 0.005419 -0.077595 0.123933\nvn 0.9833 0.047 0.1756\nv 0.00574 -0.079367 0.12261\nvn 0.9833 0.047 0.1756\nv 0.005641 -0.081815 0.123354\nvn 0.9547 -0.0562 0.2922\nv 0.005521 -0.080522 0.123997\nvn 0.9547 -0.0562 0.2922\nv 0.005384 -0.083576 0.123854\nvn 0.9547 -0.0562 0.2922\nv 0.000959 -0.079238 0.116675\nvn 0.1666 -0.0235 -0.9857\nv 0.001765 -0.0806 0.116843\nvn 0.1666 -0.0235 -0.9857\nv 0.001103 -0.082726 0.116782\nvn 0.1666 -0.0235 -0.9857\nv 0.005006 -0.086279 0.12353\nvn 0.9361 -0.1682 0.3088\nv 0.005384 -0.083576 0.123854\nvn 0.9361 -0.1682 0.3088\nv 0.004745 -0.085596 0.124691\nvn 0.9361 -0.1682 0.3088\nv 0.00099 -0.085886 0.117199\nvn 0.2338 -0.1354 -0.9628\nv 0.001103 -0.082726 0.116782\nvn 0.2338 -0.1354 -0.9628\nv 0.001957 -0.084307 0.117212\nvn 0.2338 -0.1354 -0.9628\nv 0.001103 -0.082726 0.116782\nvn 0.3319 -0.0763 -0.9402\nv 0.001765 -0.0806 0.116843\nvn 0.3319 -0.0763 -0.9402\nv 0.001957 -0.084307 0.117212\nvn 0.3319 -0.0763 -0.9402\nv 0.00099 -0.085886 0.117199\nvn 0.346 -0.2045 -0.9157\nv 0.001957 -0.084307 0.117212\nvn 0.346 -0.2045 -0.9157\nv 0.002068 -0.088079 0.118096\nvn 0.346 -0.2045 -0.9157\nv 0.000959 -0.079238 0.116675\nvn 0.2749 0.0437 -0.9605\nv 0.001896 -0.077872 0.117005\nvn 0.2749 0.0437 -0.9605\nv 0.001765 -0.0806 0.116843\nvn 0.2749 0.0437 -0.9605\nv 0.004327 -0.088359 0.123897\nvn 0.8771 -0.2504 0.4099\nv 0.004745 -0.085596 0.124691\nvn 0.8771 -0.2504 0.4099\nv 0.003906 -0.08813 0.12494\nvn 0.8771 -0.2504 0.4099\nv 0.000959 -0.079238 0.116675\nvn 0.2255 0.0801 -0.9709\nv 0.000791 -0.076981 0.116822\nvn 0.2255 0.0801 -0.9709\nv 0.001896 -0.077872 0.117005\nvn 0.2255 0.0801 -0.9709\nv 0.005419 -0.077595 0.123933\nvn 0.9481 0.0396 0.3155\nv 0.005234 -0.079371 0.124713\nvn 0.9481 0.0396 0.3155\nv 0.005521 -0.080522 0.123997\nvn 0.9481 0.0396 0.3155\nv 0.001405 -0.075818 0.117127\nvn 0.254 0.1177 -0.96\nv 0.001896 -0.077872 0.117005\nvn 0.254 0.1177 -0.96\nv 0.000791 -0.076981 0.116822\nvn 0.254 0.1177 -0.96\nv 0.004994 -0.075823 0.124386\nvn 0.9454 0.1535 0.2873\nv 0.005419 -0.077595 0.123933\nvn 0.9454 0.1535 0.2873\nv 0.005263 -0.075811 0.123492\nvn 0.9454 0.1535 0.2873\nv 0.005384 -0.083576 0.123854\nvn 0.9307 -0.0684 0.3594\nv 0.005175 -0.081554 0.12478\nvn 0.9307 -0.0684 0.3594\nv 0.005074 -0.082778 0.124808\nvn 0.9307 -0.0684 0.3594\nv 0.005521 -0.080522 0.123997\nvn 0.9394 -0.0577 0.338\nv 0.005175 -0.081554 0.12478\nvn 0.9394 -0.0577 0.338\nv 0.005384 -0.083576 0.123854\nvn 0.9394 -0.0577 0.338\nv 0.001957 -0.084307 0.117212\nvn 0.3635 -0.2024 -0.9093\nv 0.002707 -0.085867 0.117859\nvn 0.3635 -0.2024 -0.9093\nv 0.002068 -0.088079 0.118096\nvn 0.3635 -0.2024 -0.9093\nv 0.001957 -0.084307 0.117212\nvn 0.4302 -0.1148 -0.8954\nv 0.002429 -0.082581 0.117218\nvn 0.4302 -0.1148 -0.8954\nv 0.002638 -0.083702 0.117462\nvn 0.4302 -0.1148 -0.8954\nv 0.001765 -0.0806 0.116843\nvn 0.3002 -0.079 -0.9506\nv 0.002429 -0.082581 0.117218\nvn 0.3002 -0.079 -0.9506\nv 0.001957 -0.084307 0.117212\nvn 0.3002 -0.079 -0.9506\nv 0.005384 -0.083576 0.123854\nvn 0.9092 -0.1228 0.3979\nv 0.005074 -0.082778 0.124808\nvn 0.9122 -0.1228 0.3909\nv 0.004745 -0.085596 0.124691\nvn 0.9122 -0.1228 0.3909\nv 0.004857 -0.083727 0.12502\nvn 0.9129 -0.1228 0.3891\nv 0.001765 -0.0806 0.116843\nvn 0.4156 -0.0324 -0.909\nv 0.002419 -0.080087 0.117124\nvn 0.4156 -0.0324 -0.909\nv 0.002429 -0.082581 0.117218\nvn 0.4156 -0.0324 -0.909\nv 0.005521 -0.080522 0.123997\nvn 0.9211 -0.0129 0.389\nv 0.005234 -0.079371 0.124713\nvn 0.9211 -0.0129 0.389\nv 0.005175 -0.081554 0.12478\nvn 0.9211 -0.0129 0.389\nv 0.004994 -0.075823 0.124386\nvn 0.9173 0.1234 0.3786\nv 0.005014 -0.077385 0.124845\nvn 0.9173 0.1234 0.3786\nv 0.005419 -0.077595 0.123933\nvn 0.9173 0.1234 0.3786\nv 0.005141 -0.078914 0.124797\nvn 0.9303 0.0426 0.3642\nv 0.005419 -0.077595 0.123933\nvn 0.9303 0.0426 0.3642\nv 0.005112 -0.078215 0.124791\nvn 0.9303 0.0426 0.3642\nv 0.005234 -0.079371 0.124713\nvn 0.8925 0.1001 0.4398\nv 0.005419 -0.077595 0.123933\nvn 0.8925 0.1001 0.4398\nv 0.005141 -0.078914 0.124797\nvn 0.8925 0.1001 0.4398\nv 0.005419 -0.077595 0.123933\nvn 0.9179 0.0822 0.3883\nv 0.005014 -0.077385 0.124845\nvn 0.9179 0.0822 0.3883\nv 0.005112 -0.078215 0.124791\nvn 0.9179 0.0822 0.3883\nv 0.004875 -0.076853 0.124987\nvn 0.963 0.207 0.1728\nv 0.005014 -0.077385 0.124845\nvn 0.963 0.207 0.1728\nv 0.004628 -0.075815 0.125118\nvn 0.963 0.207 0.1728\nv 0.004628 -0.075815 0.125118\nvn 0.8863 0.1414 0.4411\nv 0.005014 -0.077385 0.124845\nvn 0.8863 0.1414 0.4411\nv 0.004994 -0.075823 0.124386\nvn 0.8863 0.1414 0.4411\nv 0.002638 -0.083702 0.117462\nvn 0.453 -0.147 -0.8793\nv 0.002707 -0.085867 0.117859\nvn 0.453 -0.147 -0.8793\nv 0.001957 -0.084307 0.117212\nvn 0.453 -0.147 -0.8793\nv 0.001765 -0.0806 0.116843\nvn 0.3694 0.0373 -0.9285\nv 0.001896 -0.077872 0.117005\nvn 0.3694 0.0373 -0.9285\nv 0.002419 -0.080087 0.117124\nvn 0.3694 0.0373 -0.9285\nv 0.002419 -0.080087 0.117124\nvn 0.3891 0.0424 -0.9202\nv 0.001896 -0.077872 0.117005\nvn 0.3891 0.0424 -0.9202\nv 0.002447 -0.078705 0.1172\nvn 0.3891 0.0424 -0.9202\nv 0.001405 -0.075818 0.117127\nvn 0.3446 0.1374 -0.9286\nv 0.002354 -0.075821 0.117478\nvn 0.3446 0.1374 -0.9286\nv 0.001896 -0.077872 0.117005\nvn 0.3446 0.1374 -0.9286\nv 0.001896 -0.077872 0.117005\nvn 0.4386 0.081 -0.895\nv 0.002625 -0.076866 0.117454\nvn 0.4386 0.081 -0.895\nv 0.002447 -0.078705 0.1172\nvn 0.4386 0.081 -0.895\nv 0.002638 -0.083702 0.117462\nvn 0.5299 -0.1367 -0.837\nv 0.002899 -0.083144 0.117536\nvn 0.5299 -0.1367 -0.837\nv 0.002707 -0.085867 0.117859\nvn 0.5299 -0.1367 -0.837\nv 0.001896 -0.077872 0.117005\nvn 0.3908 0.1233 -0.9122\nv 0.002354 -0.075821 0.117478\nvn 0.3908 0.1233 -0.9122\nv 0.002625 -0.076866 0.117454\nvn 0.3908 0.1233 -0.9122\nv 0.002068 -0.088079 0.118096\nvn 0.5526 -0.245 -0.7966\nv 0.002707 -0.085867 0.117859\nvn 0.5526 -0.245 -0.7966\nv 0.003271 -0.088116 0.118942\nvn 0.5526 -0.245 -0.7966\nv 0.002899 -0.083144 0.117536\nvn 0.5141 -0.1368 -0.8468\nv 0.003326 -0.084618 0.118033\nvn 0.5141 -0.1368 -0.8468\nv 0.002707 -0.085867 0.117859\nvn 0.5141 -0.1368 -0.8468\nv -0.004892 -0.083663 0.119719\nvn -0.8334 -0.1369 -0.5354\nv -0.004812 -0.083041 0.119435\nvn -0.834 -0.1368 -0.5345\nv -0.004635 -0.085768 0.119856\nvn -0.8352 -0.1366 -0.5328\nv -0.004162 -0.084979 0.118895\nvn -0.8402 -0.1357 -0.525\nv -0.004635 -0.085768 0.119856\nvn -0.7936 -0.2167 -0.5686\nv -0.004162 -0.084979 0.118895\nvn -0.7936 -0.2167 -0.5686\nv -0.003825 -0.088201 0.119653\nvn -0.7936 -0.2167 -0.5686\nv 0.003049 -0.081277 0.117499\nvn 0.5693 -0.0384 -0.8213\nv 0.003756 -0.081243 0.117987\nvn 0.5693 -0.0384 -0.8213\nv 0.003013 -0.082193 0.117517\nvn 0.5693 -0.0384 -0.8213\nv 0.003158 -0.080429 0.117509\nvn 0.5693 -0.0638 -0.8196\nv 0.003756 -0.081243 0.117987\nvn 0.5693 -0.0638 -0.8196\nv 0.003049 -0.081277 0.117499\nvn 0.5693 -0.0638 -0.8196\nv 0.002899 -0.083144 0.117536\nvn 0.6038 -0.0918 -0.7918\nv 0.003971 -0.083478 0.118392\nvn 0.6065 -0.0859 -0.7904\nv 0.003326 -0.084618 0.118033\nvn 0.6037 -0.0922 -0.7919\nv 0.003013 -0.082193 0.117517\nvn 0.605 -0.0879 -0.7913\nv 0.002707 -0.085867 0.117859\nvn 0.626 -0.2053 -0.7524\nv 0.003326 -0.084618 0.118033\nvn 0.626 -0.2053 -0.7524\nv 0.003271 -0.088116 0.118942\nvn 0.626 -0.2053 -0.7524\nv 0.002354 -0.075821 0.117478\nvn 0.622 0.18 -0.762\nv 0.002929 -0.077554 0.117539\nvn 0.622 0.18 -0.762\nv 0.002625 -0.076866 0.117454\nvn 0.622 0.18 -0.762\nv 0.00321 -0.075817 0.118008\nvn 0.5198 0.1432 -0.8422\nv 0.002929 -0.077554 0.117539\nvn 0.5198 0.1432 -0.8422\nv 0.002354 -0.075821 0.117478\nvn 0.5198 0.1432 -0.8422\nv -0.004806 -0.075819 0.119883\nvn -0.8501 0.1416 -0.5073\nv -0.00447 -0.075812 0.11932\nvn -0.8501 0.1416 -0.5073\nv -0.00492 -0.076957 0.119756\nvn -0.8501 0.1416 -0.5073\nv -0.00492 -0.076957 0.119756\nvn -0.8338 0.1234 -0.5381\nv -0.00447 -0.075812 0.11932\nvn -0.8338 0.1234 -0.5381\nv -0.004809 -0.077452 0.11947\nvn -0.8338 0.1234 -0.5381\nv 0.003756 -0.081243 0.117987\nvn 0.608 -0.0845 -0.7894\nv -0.004835 -0.081345 0.119276\nvn -0.8093 -0.0659 -0.5837\nv -0.004175 -0.081672 0.118397\nvn -0.8093 -0.0659 -0.5837\nv -0.004812 -0.083041 0.119435\nvn -0.8093 -0.0659 -0.5837\nv -0.004809 -0.077452 0.11947\nvn -0.833 0.1006 -0.5441\nv -0.004527 -0.078382 0.118865\nvn -0.833 0.1006 -0.5441\nv -0.004825 -0.078323 0.119334\nvn -0.833 0.1006 -0.5441\nv -0.004835 -0.081345 0.119276\nvn -0.8031 -0.022 -0.5954\nv -0.004841 -0.08024 0.119242\nvn -0.8031 -0.022 -0.5954\nv -0.004175 -0.081672 0.118397\nvn -0.8031 -0.022 -0.5954\nv -0.004809 -0.077452 0.11947\nvn -0.8177 0.1178 -0.5634\nv -0.00447 -0.075812 0.11932\nvn -0.8177 0.1178 -0.5634\nv -0.004527 -0.078382 0.118865\nvn -0.8177 0.1178 -0.5634\nv -0.004834 -0.079283 0.119265\nvn -0.8137 0.0199 -0.5809\nv -0.004527 -0.078382 0.118865\nvn -0.8137 0.0199 -0.5809\nv -0.004841 -0.08024 0.119242\nvn -0.8137 0.0199 -0.5809\nv -0.004812 -0.083041 0.119435\nvn -0.7877 -0.0948 -0.6087\nv -0.004175 -0.081672 0.118397\nvn -0.7877 -0.0948 -0.6087\nv -0.004162 -0.084979 0.118895\nvn -0.7877 -0.0948 -0.6087\nv -0.004834 -0.079283 0.119265\nvn -0.8395 0.0462 -0.5414\nv -0.004825 -0.078323 0.119334\nvn -0.8395 0.0462 -0.5414\nv -0.004527 -0.078382 0.118865\nvn -0.8395 0.0462 -0.5414\nv -0.003825 -0.088201 0.119653\nvn -0.7124 -0.2402 -0.6594\nv -0.003215 -0.086643 0.118427\nvn -0.7124 -0.2402 -0.6594\nv -0.00319 -0.088303 0.119004\nvn -0.7124 -0.2402 -0.6594\nv -0.003825 -0.088201 0.119653\nvn -0.7241 -0.2287 -0.6506\nv -0.004162 -0.084979 0.118895\nvn -0.7241 -0.2287 -0.6506\nv -0.003215 -0.086643 0.118427\nvn -0.7241 -0.2287 -0.6506\nv 0.003326 -0.084618 0.118033\nvn 0.6675 -0.1971 -0.718\nv 0.004055 -0.086306 0.119174\nvn 0.6675 -0.1971 -0.718\nv 0.003271 -0.088116 0.118942\nvn 0.6675 -0.1971 -0.718\nv 0.003028 -0.07849 0.117521\nvn 0.5799 0.0775 -0.811\nv 0.002929 -0.077554 0.117539\nvn 0.5799 0.0775 -0.811\nv 0.003832 -0.07809 0.118134\nvn 0.5799 0.0775 -0.811\nv 0.003326 -0.084618 0.118033\nvn 0.6941 -0.1726 -0.6989\nv 0.003971 -0.083478 0.118392\nvn 0.6941 -0.1726 -0.6989\nv 0.004055 -0.086306 0.119174\nvn 0.6941 -0.1726 -0.6989\nv -0.004841 -0.08024 0.119242\nvn -0.7809 0.0055 -0.6246\nv -0.004527 -0.078382 0.118865\nvn -0.7809 0.0055 -0.6246\nv -0.004175 -0.081672 0.118397\nvn -0.7809 0.0055 -0.6246\nv 0.00321 -0.075817 0.118008\nvn 0.5942 0.1186 -0.7956\nv 0.003832 -0.07809 0.118134\nvn 0.5942 0.1186 -0.7956\nv 0.002929 -0.077554 0.117539\nvn 0.5942 0.1186 -0.7956\nv 0.003028 -0.07849 0.117521\nvn 0.5917 0.0445 -0.8049\nv 0.003832 -0.07809 0.118134\nvn 0.5917 0.0445 -0.8049\nv 0.003158 -0.080429 0.117509\nvn 0.5917 0.0445 -0.8049\nv 0.003158 -0.080429 0.117509\nvn 0.6414 0.0201 -0.7669\nv 0.003832 -0.07809 0.118134\nvn 0.6414 0.0201 -0.7669\nv 0.003756 -0.081243 0.117987\nvn 0.6414 0.0201 -0.7669\nv -0.00447 -0.075812 0.11932\nvn -0.7822 0.1253 -0.6103\nv -0.003946 -0.075818 0.118648\nvn -0.7822 0.1253 -0.6103\nv -0.004527 -0.078382 0.118865\nvn -0.7822 0.1253 -0.6103\nv -0.004175 -0.081672 0.118397\nvn -0.7281 -0.1049 -0.6774\nv -0.003619 -0.083693 0.118112\nvn -0.7281 -0.1049 -0.6774\nv -0.004162 -0.084979 0.118895\nvn -0.7281 -0.1049 -0.6774\nv -0.004527 -0.078382 0.118865\nvn -0.7642 0.0102 -0.6449\nv -0.003911 -0.07976 0.118115\nvn -0.7642 0.0102 -0.6449\nv -0.004175 -0.081672 0.118397\nvn -0.7642 0.0102 -0.6449\nv 0.003271 -0.088116 0.118942\nvn 0.7715 -0.2596 -0.5809\nv 0.004055 -0.086306 0.119174\nvn 0.7715 -0.2596 -0.5809\nv 0.004181 -0.088116 0.120151\nvn 0.7715 -0.2596 -0.5809\nv 0.003893 -0.075818 0.118605\nvn 0.6519 0.1372 -0.7458\nv 0.003832 -0.07809 0.118134\nvn 0.6519 0.1372 -0.7458\nv 0.00321 -0.075817 0.118008\nvn 0.6519 0.1372 -0.7458\nv -0.00319 -0.088303 0.119004\nvn -0.5676 -0.2781 -0.7749\nv -0.003215 -0.086643 0.118427\nvn -0.5676 -0.2781 -0.7749\nv -0.002202 -0.088392 0.118312\nvn -0.5676 -0.2781 -0.7749\nv 0.003756 -0.081243 0.117987\nvn 0.739 -0.0506 -0.6718\nv 0.004673 -0.081906 0.119046\nvn 0.739 -0.0506 -0.6718\nv 0.003971 -0.083478 0.118392\nvn 0.739 -0.0506 -0.6718\nv -0.003946 -0.075818 0.118648\nvn -0.741 0.1116 -0.6621\nv -0.003652 -0.077046 0.118112\nvn -0.741 0.1116 -0.6621\nv -0.004527 -0.078382 0.118865\nvn -0.741 0.1116 -0.6621\nv 0.003756 -0.081243 0.117987\nvn 0.7483 -0.0237 -0.663\nv 0.004689 -0.079868 0.118991\nvn 0.7483 -0.0237 -0.663\nv 0.004673 -0.081906 0.119046\nvn 0.7483 -0.0237 -0.663\nv 0.003832 -0.07809 0.118134\nvn 0.7224 0.0146 -0.6914\nv 0.004689 -0.079868 0.118991\nvn 0.7224 0.0146 -0.6914\nv 0.003756 -0.081243 0.117987\nvn 0.7224 0.0146 -0.6914\nv -0.004527 -0.078382 0.118865\nvn -0.708 0.0669 -0.703\nv -0.003652 -0.077046 0.118112\nvn -0.708 0.0669 -0.703\nv -0.003911 -0.07976 0.118115\nvn -0.708 0.0669 -0.703\nv 0.003971 -0.083478 0.118392\nvn 0.7884 -0.1423 -0.5985\nv 0.004763 -0.084827 0.119757\nvn 0.7907 -0.1418 -0.5955\nv 0.004055 -0.086306 0.119174\nvn 0.7885 -0.1421 -0.5984\nv -0.004162 -0.084979 0.118895\nvn -0.6587 -0.1683 -0.7334\nv -0.003619 -0.083693 0.118112\nvn -0.6587 -0.1683 -0.7334\nv -0.003215 -0.086643 0.118427\nvn -0.6587 -0.1683 -0.7334\nv -0.004175 -0.081672 0.118397\nvn -0.633 -0.0654 -0.7714\nv -0.003202 -0.082444 0.117664\nvn -0.633 -0.0654 -0.7714\nv -0.003619 -0.083693 0.118112\nvn -0.633 -0.0654 -0.7714\nv 0.004672 -0.083072 0.119218\nvn 0.7912 -0.1415 -0.595\nv 0.004752 -0.083742 0.119484\nvn 0.7922 -0.1411 -0.5937\nv 0.003893 -0.075818 0.118605\nvn 0.7558 0.1137 -0.6448\nv 0.004672 -0.078246 0.119089\nvn 0.7563 0.114 -0.6443\nv 0.003832 -0.07809 0.118134\nvn 0.7556 0.1136 -0.6451\nv -0.003619 -0.083693 0.118112\nvn -0.5762 -0.1641 -0.8007\nv -0.002447 -0.084988 0.117534\nvn -0.5762 -0.1641 -0.8007\nv -0.003215 -0.086643 0.118427\nvn -0.5762 -0.1641 -0.8007\nv 0.003971 -0.083478 0.118392\nvn 0.7808 -0.0916 -0.618\nv 0.004673 -0.081906 0.119046\nvn 0.7808 -0.0916 -0.618\nv 0.004672 -0.083072 0.119218\nvn 0.7808 -0.0916 -0.618\nv -0.003215 -0.086643 0.118427\nvn -0.5138 -0.2438 -0.8225\nv -0.001987 -0.086821 0.117712\nvn -0.5138 -0.2438 -0.8225\nv -0.002202 -0.088392 0.118312\nvn -0.5138 -0.2438 -0.8225\nv 0.003832 -0.07809 0.118134\nvn 0.7543 0.0476 -0.6548\nv 0.004672 -0.078246 0.119089\nvn 0.7543 0.0476 -0.6548\nv 0.004689 -0.079868 0.118991\nvn 0.7543 0.0476 -0.6548\nv -0.003215 -0.086643 0.118427\nvn -0.5142 -0.2096 -0.8317\nv -0.002447 -0.084988 0.117534\nvn -0.5142 -0.2096 -0.8317\nv -0.001987 -0.086821 0.117712\nvn -0.5142 -0.2096 -0.8317\nv -0.003652 -0.077046 0.118112\nvn -0.6453 0.0609 -0.7615\nv -0.003234 -0.078158 0.117669\nvn -0.6453 0.0609 -0.7615\nv -0.003911 -0.07976 0.118115\nvn -0.6453 0.0609 -0.7615\nv -0.004175 -0.081672 0.118397\nvn -0.6253 -0.0487 -0.7788\nv -0.003303 -0.080807 0.117643\nvn -0.6253 -0.0487 -0.7788\nv -0.003202 -0.082444 0.117664\nvn -0.6253 -0.0487 -0.7788\nv -0.003619 -0.083693 0.118112\nvn -0.5903 -0.0907 -0.8021\nv -0.003202 -0.082444 0.117664\nvn -0.5903 -0.0907 -0.8021\nv -0.003089 -0.083191 0.117665\nvn -0.5903 -0.0907 -0.8021\nv 0.004406 -0.075837 0.119204\nvn 0.7566 0.1141 -0.6439\nv -0.003911 -0.07976 0.118115\nvn -0.6394 -0.0253 -0.7684\nv -0.003303 -0.080807 0.117643\nvn -0.6394 -0.0253 -0.7684\nv -0.004175 -0.081672 0.118397\nvn -0.6394 -0.0253 -0.7684\nv -0.003619 -0.083693 0.118112\nvn -0.5577 -0.1396 -0.8182\nv -0.003089 -0.083191 0.117665\nvn -0.5577 -0.1396 -0.8182\nv -0.002447 -0.084988 0.117534\nvn -0.5577 -0.1396 -0.8182\nv -0.002447 -0.084988 0.117534\nvn -0.7024 -0.2012 -0.6828\nv -0.003089 -0.083191 0.117665\nvn -0.7024 -0.2012 -0.6828\nv -0.002859 -0.083736 0.117589\nvn -0.7024 -0.2012 -0.6828\nv -0.002912 -0.07583 0.117782\nvn -0.6304 0.1788 -0.7554\nv -0.003652 -0.077046 0.118112\nvn -0.6304 0.1788 -0.7554\nv -0.003946 -0.075818 0.118648\nvn -0.6304 0.1788 -0.7554\nv 0.004055 -0.086306 0.119174\nvn 0.843 -0.2087 -0.4957\nv 0.004763 -0.084827 0.119757\nvn 0.843 -0.2087 -0.4957\nv 0.004181 -0.088116 0.120151\nvn 0.843 -0.2087 -0.4957\nv -0.003911 -0.07976 0.118115\nvn -0.6002 0.0116 -0.7998\nv -0.003274 -0.079225 0.117644\nvn -0.6002 0.0116 -0.7998\nv -0.003303 -0.080807 0.117643\nvn -0.6002 0.0116 -0.7998\nv -0.003911 -0.07976 0.118115\nvn -0.6156 0.0412 -0.7869\nv -0.003234 -0.078158 0.117669\nvn -0.6156 0.0412 -0.7869\nv -0.003274 -0.079225 0.117644\nvn -0.6156 0.0412 -0.7869\nv 0.004406 -0.075837 0.119204\nvn 0.803 0.1164 -0.5845\nv 0.004719 -0.076901 0.119421\nvn 0.803 0.1164 -0.5845\nv 0.004672 -0.078246 0.119089\nvn 0.803 0.1164 -0.5845\nv 0.004752 -0.083742 0.119484\nvn 0.8773 -0.1085 -0.4674\nv 0.005019 -0.08245 0.119685\nvn 0.8773 -0.1085 -0.4674\nv 0.004763 -0.084827 0.119757\nvn 0.8773 -0.1085 -0.4674\nv -0.002912 -0.07583 0.117782\nvn -0.0693 0.9929 -0.0968\nv -0.003946 -0.075818 0.118648\nvn -0.0693 0.9929 -0.0968\nv -0.001966 -0.075809 0.117326\nvn -0.0693 0.9929 -0.0968\nv -0.005349 -0.075842 0.121455\nvn -0.2241 0.974 -0.0316\nv -0.005398 -0.075818 0.122529\nvn -0.2241 0.974 -0.0316\nv -0.005087 -0.07581 0.120575\nvn -0.2241 0.974 -0.0316\nv -0.004277 -0.075826 0.125632\nvn -0.1294 0.9866 0.099\nv -0.003834 -0.075819 0.126141\nvn -0.1294 0.9866 0.099\nv -0.004644 -0.075821 0.125098\nvn -0.1294 0.9866 0.099\nv -0.004834 -0.079283 0.119265\nvn -0.9997 0.007 0.0241\nv -0.004841 -0.08024 0.119242\nvn -0.9997 0.007 0.0241\nv -0.004825 -0.078323 0.119334\nvn -0.9997 0.007 0.0241\nv -0.002652 -0.079055 0.117275\nvn -0.7484 -0.0374 0.6622\nv -0.002641 -0.079967 0.117235\nvn -0.7484 -0.0374 0.6622\nv -0.002654 -0.078348 0.117312\nvn -0.7484 -0.0374 0.6622\nv 0.002857 -0.083737 0.127094\nvn 0.5458 -0.1562 0.8233\nv 0.002408 -0.085927 0.126976\nvn 0.5487 -0.1569 0.8212\nv 0.003143 -0.083234 0.127\nvn 0.5507 -0.1575 0.8197\nv -0.00411 -0.079179 0.126352\nvn -0.7807 0.0297 0.6242\nv -0.004668 -0.078201 0.125607\nvn -0.7807 0.0297 0.6242\nv -0.0047 -0.080258 0.125666\nvn -0.7807 0.0297 0.6242\nv -0.003834 -0.075819 0.126141\nvn -0.7507 0.1172 0.6502\nv -0.004277 -0.075826 0.125632\nvn -0.7507 0.1172 0.6502\nv -0.004668 -0.078201 0.125607\nvn -0.7507 0.1172 0.6502\nv 0.002683 -0.08255 0.127324\nvn 0.4515 -0.1053 0.8861\nv 0.002056 -0.08429 0.127436\nvn 0.4515 -0.1053 0.8861\nv 0.002857 -0.083737 0.127094\nvn 0.4515 -0.1053 0.8861\nv -0.004738 -0.083812 0.125217\nvn -0.8633 -0.1542 0.4806\nv -0.005044 -0.083998 0.124607\nvn -0.8633 -0.1542 0.4806\nv -0.004396 -0.085809 0.125191\nvn -0.8633 -0.1542 0.4806\nv 0.002857 -0.083737 0.127094\nvn 0.471 -0.1434 0.8704\nv 0.002056 -0.08429 0.127436\nvn 0.471 -0.1434 0.8704\nv 0.002408 -0.085927 0.126976\nvn 0.471 -0.1434 0.8704\nv 0.00334 -0.075812 0.126578\nvn 0.5676 0.1274 0.8134\nv 0.002686 -0.07585 0.12704\nvn 0.5676 0.1274 0.8134\nv 0.003257 -0.078216 0.127012\nvn 0.5676 0.1274 0.8134\nv 0.003257 -0.078216 0.127012\nvn 0.8165 0.1906 0.545\nv 0.002686 -0.07585 0.12704\nvn 0.8165 0.1906 0.545\nv 0.002916 -0.076898 0.127061\nvn 0.8165 0.1906 0.545\nv -0.003946 -0.088093 0.124898\nvn -0.8779 -0.2501 0.4085\nv -0.004873 -0.08642 0.123929\nvn -0.8779 -0.2501 0.4085\nv -0.004446 -0.088271 0.123714\nvn -0.8779 -0.2501 0.4085\nv -0.003946 -0.088093 0.124898\nvn -0.8691 -0.2274 0.4392\nv -0.004396 -0.085809 0.125191\nvn -0.8691 -0.2274 0.4392\nv -0.004873 -0.08642 0.123929\nvn -0.8691 -0.2274 0.4392\nv 0.002408 -0.085927 0.126976\nvn 0.3521 -0.2239 0.9088\nv 0.001306 -0.085936 0.127401\nvn 0.3521 -0.2239 0.9088\nv 0.001491 -0.088188 0.126774\nvn 0.3521 -0.2239 0.9088\nv 0.002683 -0.08255 0.127324\nvn 0.4005 -0.0853 0.9123\nv 0.001954 -0.081566 0.127736\nvn 0.4005 -0.0853 0.9123\nv 0.002056 -0.08429 0.127436\nvn 0.4005 -0.0853 0.9123\nv -0.005003 -0.082468 0.125005\nvn -0.8768 -0.0989 0.4706\nv -0.005044 -0.083998 0.124607\nvn -0.8768 -0.0989 0.4706\nv -0.004738 -0.083812 0.125217\nvn -0.8768 -0.0989 0.4706\nv -0.004277 -0.075826 0.125632\nvn -0.816 0.1288 0.5635\nv -0.004644 -0.075821 0.125098\nvn -0.816 0.1288 0.5635\nv -0.004668 -0.078201 0.125607\nvn -0.816 0.1288 0.5635\nv -0.004668 -0.078201 0.125607\nvn -0.7737 0.14 0.6179\nv -0.004644 -0.075821 0.125098\nvn -0.7737 0.14 0.6179\nv -0.004744 -0.076876 0.125213\nvn -0.7737 0.14 0.6179\nv 0.00262 -0.081019 0.127461\nvn 0.425 -0.0632 0.903\nv 0.001954 -0.081566 0.127736\nvn 0.425 -0.0632 0.903\nv 0.002683 -0.08255 0.127324\nvn 0.425 -0.0632 0.903\nv -0.004396 -0.085809 0.125191\nvn -0.8875 -0.1812 0.4238\nv -0.005044 -0.083998 0.124607\nvn -0.8875 -0.1812 0.4238\nv -0.004873 -0.08642 0.123929\nvn -0.8875 -0.1812 0.4238\nv -0.005003 -0.082468 0.125005\nvn -0.9237 -0.0731 0.3761\nv -0.005432 -0.080623 0.12431\nvn -0.9238 -0.0731 0.3758\nv -0.005044 -0.083998 0.124607\nvn -0.9238 -0.0731 0.3758\nv 0.002916 -0.076898 0.127061\nvn 0.4764 0.1227 0.8706\nv 0.002686 -0.07585 0.12704\nvn 0.4764 0.1227 0.8706\nv 0.00271 -0.077441 0.127251\nvn 0.4764 0.1227 0.8706\nv 0.00271 -0.077441 0.127251\nvn 0.4616 0.0814 0.8833\nv 0.002137 -0.077982 0.127601\nvn 0.4616 0.0814 0.8833\nv 0.002681 -0.078197 0.127336\nvn 0.4616 0.0814 0.8833\nv -0.00508 -0.081189 0.124995\nvn -0.9049 -0.0513 0.4225\nv -0.005432 -0.080623 0.12431\nvn -0.9049 -0.0513 0.4225\nv -0.005003 -0.082468 0.125005\nvn -0.9049 -0.0513 0.4225\nv 0.002648 -0.079987 0.127436\nvn -0.4191 0.0326 0.9074\nv 0.002655 -0.079051 0.127406\nvn -0.4191 0.0326 0.9074\nv 0.00262 -0.081019 0.127461\nvn -0.4191 0.0326 0.9074\nv -0.005091 -0.079471 0.124987\nvn -0.8905 -0.0031 0.4549\nv -0.005432 -0.080623 0.12431\nvn -0.8905 -0.0031 0.4549\nv -0.00508 -0.081189 0.124995\nvn -0.8905 -0.0031 0.4549\nv 0.002408 -0.085927 0.126976\nvn 0.355 -0.1814 0.9171\nv 0.002056 -0.08429 0.127436\nvn 0.355 -0.1814 0.9171\nv 0.001306 -0.085936 0.127401\nvn 0.355 -0.1814 0.9171\nv 0.002681 -0.078197 0.127336\nvn 0.4552 0.059 0.8884\nv 0.002137 -0.077982 0.127601\nvn 0.4552 0.059 0.8884\nv 0.002655 -0.079051 0.127406\nvn 0.4552 0.059 0.8884\nv 0.002655 -0.079051 0.127406\nvn 0.3851 0.0188 0.9227\nv 0.002137 -0.077982 0.127601\nvn 0.3851 0.0188 0.9227\nv 0.00262 -0.081019 0.127461\nvn 0.3851 0.0188 0.9227\nv 0.002686 -0.07585 0.12704\nvn 0.4276 0.1252 0.8953\nv 0.002137 -0.077982 0.127601\nvn 0.4276 0.1252 0.8953\nv 0.00271 -0.077441 0.127251\nvn 0.4276 0.1252 0.8953\nv 0.001774 -0.075817 0.127446\nvn 0.4072 0.1327 0.9036\nv 0.002137 -0.077982 0.127601\nvn 0.4072 0.1327 0.9036\nv 0.002686 -0.07585 0.12704\nvn 0.4072 0.1327 0.9036\nv -0.004961 -0.078003 0.125045\nvn -0.8836 0.1024 0.4569\nv -0.004744 -0.076876 0.125213\nvn -0.8836 0.1024 0.4569\nv -0.005265 -0.07747 0.124338\nvn -0.8836 0.1024 0.4569\nv -0.004961 -0.078003 0.125045\nvn -0.8991 0.0622 0.4333\nv -0.005265 -0.07747 0.124338\nvn -0.8991 0.0622 0.4333\nv -0.005091 -0.079471 0.124987\nvn -0.8991 0.0622 0.4333\nv 0.001954 -0.081566 0.127736\nvn 0.3202 -0.0916 0.9429\nv 0.001204 -0.082279 0.127921\nvn 0.3202 -0.0916 0.9429\nv 0.002056 -0.08429 0.127436\nvn 0.3202 -0.0916 0.9429\nv -0.005093 -0.075822 0.124157\nvn -0.8938 0.1398 0.4262\nv -0.005265 -0.07747 0.124338\nvn -0.8938 0.1398 0.4262\nv -0.004644 -0.075821 0.125098\nvn -0.8938 0.1398 0.4262\nv -0.004644 -0.075821 0.125098\nvn -0.8883 0.1315 0.44\nv -0.005265 -0.07747 0.124338\nvn -0.8883 0.1315 0.44\nv -0.004744 -0.076876 0.125213\nvn -0.8883 0.1315 0.44\nv -0.005091 -0.079471 0.124987\nvn -0.9208 0.0455 0.3874\nv -0.005265 -0.07747 0.124338\nvn -0.9208 0.0455 0.3874\nv -0.005432 -0.080623 0.12431\nvn -0.9208 0.0455 0.3874\nv -0.005044 -0.083998 0.124607\nvn -0.9411 -0.1511 0.3026\nv -0.005404 -0.084296 0.123338\nvn -0.9411 -0.1511 0.3026\nv -0.004873 -0.08642 0.123929\nvn -0.9411 -0.1511 0.3026\nv 0.00262 -0.081019 0.127461\nvn 0.3688 0.0162 0.9294\nv 0.002137 -0.077982 0.127601\nvn 0.3686 0.0158 0.9295\nv 0.001363 -0.07977 0.127938\nvn 0.3694 0.0169 0.9291\nv 0.001306 -0.085936 0.127401\nvn 0.1862 -0.2492 0.9504\nv 0.000561 -0.086319 0.127447\nvn 0.1862 -0.2492 0.9504\nv 0.001491 -0.088188 0.126774\nvn 0.1862 -0.2492 0.9504\nv -0.005477 -0.082727 0.123783\nvn -0.9251 -0.0736 0.3725\nv 0.002056 -0.08429 0.127436\nvn 0.2403 -0.1301 0.9619\nv 0.001204 -0.082279 0.127921\nvn 0.2403 -0.1301 0.9619\nv 0.001306 -0.085936 0.127401\nvn 0.2403 -0.1301 0.9619\nv 0.001954 -0.081566 0.127736\nvn 0.3698 0.0172 0.929\nv -0.005044 -0.083998 0.124607\nvn -0.9457 -0.1284 0.2986\nv -0.005477 -0.082727 0.123783\nvn -0.9457 -0.1284 0.2986\nv -0.005404 -0.084296 0.123338\nvn -0.9457 -0.1284 0.2986\nv 0.001491 -0.088188 0.126774\nvn 0.1331 -0.2762 0.9518\nv 0.000561 -0.086319 0.127447\nvn 0.1331 -0.2762 0.9518\nv -0.000301 -0.088084 0.127055\nvn 0.1331 -0.2762 0.9518\nv 0.001774 -0.075817 0.127446\nvn 0.2942 0.117 0.9486\nv 0.001076 -0.077522 0.127873\nvn 0.2942 0.117 0.9486\nv 0.002137 -0.077982 0.127601\nvn 0.2942 0.117 0.9486\nv -0.004873 -0.08642 0.123929\nvn -0.957 -0.2399 0.1634\nv -0.005097 -0.086499 0.122502\nvn -0.957 -0.2399 0.1634\nv -0.004446 -0.088271 0.123714\nvn -0.957 -0.2399 0.1634\nv 0.002137 -0.077982 0.127601\nvn 0.2735 0.0627 0.9598\nv 0.001076 -0.077522 0.127873\nvn 0.2735 0.0627 0.9598\nv 0.001363 -0.07977 0.127938\nvn 0.2735 0.0627 0.9598\nv 0.001954 -0.081566 0.127736\nvn 0.2603 -0.0229 0.9653\nv 0.001363 -0.07977 0.127938\nvn 0.2603 -0.0229 0.9653\nv 0.001204 -0.082279 0.127921\nvn 0.2603 -0.0229 0.9653\nv -0.005432 -0.080623 0.12431\nvn -0.9765 -0.0325 0.2129\nv -0.005713 -0.081641 0.122866\nvn -0.9765 -0.0325 0.2129\nv -0.005477 -0.082727 0.123783\nvn -0.9765 -0.0325 0.2129\nv -0.005477 -0.082727 0.123783\nvn -0.9849 -0.0879 0.1494\nv -0.005713 -0.081641 0.122866\nvn -0.9849 -0.0879 0.1494\nv -0.005404 -0.084296 0.123338\nvn -0.9849 -0.0879 0.1494\nv 0.001204 -0.082279 0.127921\nvn 0.1535 -0.1349 0.9789\nv 0.000402 -0.082872 0.127965\nvn 0.1576 -0.1336 0.9784\nv 0.001306 -0.085936 0.127401\nvn 0.1584 -0.1333 0.9783\nv -0.004873 -0.08642 0.123929\nvn -0.9669 -0.1965 0.1626\nv -0.005404 -0.084296 0.123338\nvn -0.9669 -0.1965 0.1626\nv -0.005097 -0.086499 0.122502\nvn -0.9669 -0.1965 0.1626\nv 0.00012 -0.083795 0.127885\nvn 0.1587 -0.1332 0.9783\nv -0.005265 -0.07747 0.124338\nvn -0.9623 0.0487 0.2677\nv -0.005559 -0.077706 0.123325\nvn -0.9623 0.0487 0.2677\nv -0.005432 -0.080623 0.12431\nvn -0.9623 0.0487 0.2677\nv -0.005432 -0.080623 0.12431\nvn -0.9806 -0.0069 0.1957\nv -0.005727 -0.079397 0.122875\nvn -0.9806 -0.0069 0.1957\nv -0.005713 -0.081641 0.122866\nvn -0.9806 -0.0069 0.1957\nv 0.001306 -0.085936 0.127401\nvn 0.1353 -0.1466 0.9799\nv 0.00012 -0.083795 0.127885\nvn 0.1353 -0.1466 0.9799\nv 0.000561 -0.086319 0.127447\nvn 0.1353 -0.1466 0.9799\nv -0.004446 -0.088271 0.123714\nvn -0.9545 -0.2796 0.1039\nv -0.005097 -0.086499 0.122502\nvn -0.9545 -0.2796 0.1039\nv -0.004617 -0.088295 0.122085\nvn -0.9545 -0.2796 0.1039\nv -0.005432 -0.080623 0.12431\nvn -0.9725 0.0356 0.2303\nv -0.005559 -0.077706 0.123325\nvn -0.9725 0.0356 0.2303\nv -0.005727 -0.079397 0.122875\nvn -0.9725 0.0356 0.2303\nv 0.000498 -0.081084 0.128055\nvn 0.1834 -0.0019 0.983\nv 0.001204 -0.082279 0.127921\nvn 0.1834 -0.0019 0.983\nv 0.000499 -0.0799 0.128057\nvn 0.1834 -0.0019 0.983\nv -0.005093 -0.075822 0.124157\nvn -0.9601 0.1273 0.2489\nv -0.005559 -0.077706 0.123325\nvn -0.9601 0.1273 0.2489\nv -0.005265 -0.07747 0.124338\nvn -0.9601 0.1273 0.2489\nv 0.001204 -0.082279 0.127921\nvn 0.1396 -0.0153 0.9901\nv 0.001363 -0.07977 0.127938\nvn 0.1396 -0.0153 0.9901\nv 0.000499 -0.0799 0.128057\nvn 0.1396 -0.0153 0.9901\nv 0.001204 -0.082279 0.127921\nvn 0.0954 -0.0552 0.9939\nv 0.000498 -0.081084 0.128055\nvn 0.0954 -0.0552 0.9939\nv 0.000402 -0.082872 0.127965\nvn 0.0954 -0.0552 0.9939\nv 0.001774 -0.075817 0.127446\nvn 0.2076 0.1567 0.9656\nv 0.000487 -0.075815 0.127722\nvn 0.2076 0.1567 0.9656\nv 0.001076 -0.077522 0.127873\nvn 0.2076 0.1567 0.9656\nv -0.005404 -0.084296 0.123338\nvn -0.9847 -0.1618 0.0646\nv -0.005541 -0.083811 0.12247\nvn -0.9847 -0.1618 0.0646\nv -0.005097 -0.086499 0.122502\nvn -0.9847 -0.1618 0.0646\nv 0.001363 -0.07977 0.127938\nvn 0.1322 0.0339 0.9906\nv 0.00046 -0.07864 0.128019\nvn 0.1322 0.0339 0.9906\nv 0.000499 -0.0799 0.128057\nvn 0.1322 0.0339 0.9906\nv 0.001363 -0.07977 0.127938\nvn 0.149 0.0476 0.9877\nv 0.001076 -0.077522 0.127873\nvn 0.149 0.0476 0.9877\nv 0.00046 -0.07864 0.128019\nvn 0.149 0.0476 0.9877\nv 0.000561 -0.086319 0.127447\nvn -0.0098 -0.2121 0.9772\nv -0.000604 -0.085912 0.127523\nvn -0.0098 -0.2121 0.9772\nv -0.000301 -0.088084 0.127055\nvn -0.0098 -0.2121 0.9772\nv -0.005713 -0.081641 0.122866\nvn -0.9901 -0.097 0.1016\nv -0.005541 -0.083811 0.12247\nvn -0.9901 -0.097 0.1016\nv -0.005404 -0.084296 0.123338\nvn -0.9901 -0.097 0.1016\nv -0.005093 -0.075822 0.124157\nvn -0.9639 0.1374 0.2282\nv -0.005317 -0.07581 0.123206\nvn -0.9639 0.1374 0.2282\nv -0.005559 -0.077706 0.123325\nvn -0.9639 0.1374 0.2282\nv 0.000561 -0.086319 0.127447\nvn 0.0053 -0.1702 0.9854\nv 0.00012 -0.083795 0.127885\nvn 0.0053 -0.1702 0.9854\nv -0.000604 -0.085912 0.127523\nvn 0.0053 -0.1702 0.9854\nv 0.00046 -0.07864 0.128019\nvn 0.0986 0.0759 0.9922\nv 0.001076 -0.077522 0.127873\nvn 0.0986 0.0759 0.9922\nv 0.000373 -0.077746 0.12796\nvn 0.0986 0.0759 0.9922\nv 0.001076 -0.077522 0.127873\nvn 0.0891 0.1049 0.9905\nv 0.000189 -0.07696 0.127893\nvn 0.0891 0.1049 0.9905\nv 0.000373 -0.077746 0.12796\nvn 0.0891 0.1049 0.9905\nv 0.000487 -0.075815 0.127722\nvn 0.0995 0.1213 0.9876\nv 0.000189 -0.07696 0.127893\nvn 0.0995 0.1213 0.9876\nv 0.001076 -0.077522 0.127873\nvn 0.0995 0.1213 0.9876\nv -0.000158 -0.082651 0.127993\nvn -0.0191 0.0888 -0.9959\nv 0.00012 -0.083795 0.127885\nvn -0.0191 0.0888 -0.9959\nv -8.5e-05 -0.083212 0.127941\nvn -0.0191 0.0888 -0.9959\nv -0.005317 -0.07581 0.123206\nvn -0.9832 0.1338 0.1241\nv -0.005541 -0.076815 0.122512\nvn -0.9834 0.138 0.1181\nv -0.005559 -0.077706 0.123325\nvn -0.9832 0.1334 0.1248\nv -0.005727 -0.079397 0.122875\nvn -0.9944 0.0811 0.0673\nv -0.005559 -0.077706 0.123325\nvn -0.9944 0.0811 0.0673\nv -0.005541 -0.076815 0.122512\nvn -0.9944 0.0811 0.0673\nv 0.00012 -0.083795 0.127885\nvn -0.0696 -0.11 0.9915\nv -0.000158 -0.082651 0.127993\nvn -0.0696 -0.11 0.9915\nv -0.001041 -0.083532 0.127833\nvn -0.0696 -0.11 0.9915\nv -0.005398 -0.075818 0.122529\nvn -0.9834 0.1392 0.1164\nv 0.00012 -0.083795 0.127885\nvn -0.0767 -0.1424 0.9868\nv -0.001041 -0.083532 0.127833\nvn -0.0767 -0.1424 0.9868\nv -0.000604 -0.085912 0.127523\nvn -0.0767 -0.1424 0.9868\nv -0.005097 -0.086499 0.122502\nvn -0.967 -0.2369 -0.0942\nv -0.005126 -0.085896 0.121285\nvn -0.967 -0.2369 -0.0942\nv -0.004617 -0.088295 0.122085\nvn -0.967 -0.2369 -0.0942\nv -0.005659 -0.082643 0.122169\nvn 0.9904 0.1181 0.0713\nv -0.005541 -0.083811 0.12247\nvn 0.9904 0.1181 0.0713\nv -0.0056 -0.083195 0.122266\nvn 0.9904 0.1181 0.0713\nv -0.000149 -0.077688 0.127974\nvn -0.1787 0.1904 0.9653\nv 0.000189 -0.07696 0.127893\nvn -0.1787 0.1904 0.9653\nv 0.000487 -0.075815 0.127722\nvn -0.1787 0.1904 0.9653\nv -0.005097 -0.086499 0.122502\nvn -0.9849 -0.1633 -0.0573\nv -0.005541 -0.083811 0.12247\nvn -0.9849 -0.1633 -0.0573\nv -0.005126 -0.085896 0.121285\nvn -0.9849 -0.1633 -0.0573\nv -0.000158 -0.082651 0.127993\nvn -0.1151 -0.0632 0.9913\nv -0.001487 -0.082146 0.127871\nvn -0.1151 -0.0632 0.9913\nv -0.001041 -0.083532 0.127833\nvn -0.1154 -0.0641 0.9913\nv -0.005659 -0.082643 0.122169\nvn -0.9886 -0.1222 -0.0881\nv -0.005611 -0.082445 0.121363\nvn -0.9886 -0.1222 -0.0881\nv -0.005541 -0.083811 0.12247\nvn -0.9886 -0.1222 -0.0881\nv -0.000233 -0.080367 0.128073\nvn -0.1018 -0.0035 0.9948\nv -0.001369 -0.079874 0.127959\nvn -0.1018 -0.0035 0.9948\nv -0.000244 -0.081274 0.128069\nvn -0.1018 -0.0035 0.9948\nv -0.000244 -0.081274 0.128069\nvn -0.1147 -0.0623 0.9914\nv -0.005541 -0.083811 0.12247\nvn -0.9851 -0.136 -0.1053\nv -0.005611 -0.082445 0.121363\nvn -0.9851 -0.136 -0.1053\nv -0.005126 -0.085896 0.121285\nvn -0.9851 -0.136 -0.1053\nv -0.000149 -0.077688 0.127974\nvn -0.0842 0.04 0.9956\nv -0.001369 -0.079874 0.127959\nvn -0.0867 0.0414 0.9954\nv -0.000233 -0.080367 0.128073\nvn -0.0833 0.0395 0.9957\nv 0.000487 -0.075815 0.127722\nvn -0.0391 0.146 0.9885\nv -0.00076 -0.077408 0.127908\nvn -0.0373 0.1448 0.9888\nv -0.000149 -0.077688 0.127974\nvn -0.0396 0.1464 0.9884\nv -0.005713 -0.081279 0.122127\nvn -0.9992 -0.0399 -0.0036\nv -0.005747 -0.08041 0.122071\nvn -0.9992 -0.0399 -0.0036\nv -0.005659 -0.082643 0.122169\nvn -0.9992 -0.0399 -0.0036\nv -0.004617 -0.088295 0.122085\nvn -0.9469 -0.263 -0.1852\nv -0.005126 -0.085896 0.121285\nvn -0.9469 -0.263 -0.1852\nv -0.00437 -0.088339 0.120886\nvn -0.9469 -0.263 -0.1852\nv -0.005717 -0.079486 0.122124\nvn -0.9968 0.0373 -0.0709\nv -0.005615 -0.078376 0.121279\nvn -0.9968 0.0373 -0.0709\nv -0.005747 -0.08041 0.122071\nvn -0.9968 0.0373 -0.0709\nv -0.005631 -0.077699 0.122202\nvn -0.9973 0.0501 -0.0542\nv -0.005615 -0.078376 0.121279\nvn -0.9973 0.0501 -0.0542\nv -0.005717 -0.079486 0.122124\nvn -0.9973 0.0501 -0.0542\nv -0.005541 -0.076815 0.122512\nvn -0.9901 0.1239 -0.0656\nv -0.005349 -0.075842 0.121455\nvn -0.9901 0.1239 -0.0656\nv -0.005631 -0.077699 0.122202\nvn -0.9901 0.1239 -0.0656\nv -0.005398 -0.075818 0.122529\nvn -0.9886 0.1427 -0.0481\nv -0.005349 -0.075842 0.121455\nvn -0.9886 0.1427 -0.0481\nv -0.005541 -0.076815 0.122512\nvn -0.9886 0.1427 -0.0481\nv -0.000887 -0.075819 0.127671\nvn -0.0371 0.1444 0.9888\nv -0.000604 -0.085912 0.127523\nvn -0.1967 -0.2328 0.9524\nv -0.001624 -0.086396 0.127195\nvn -0.1967 -0.2328 0.9524\nv -0.000301 -0.088084 0.127055\nvn -0.1967 -0.2328 0.9524\nv -0.000301 -0.088084 0.127055\nvn -0.2346 -0.2612 0.9363\nv -0.001624 -0.086396 0.127195\nvn -0.2346 -0.2612 0.9363\nv -0.001447 -0.088412 0.126677\nvn -0.2346 -0.2612 0.9363\nv -0.005659 -0.082643 0.122169\nvn -0.9967 -0.0426 -0.0689\nv -0.005747 -0.08041 0.122071\nvn -0.9967 -0.0426 -0.0689\nv -0.005611 -0.082445 0.121363\nvn -0.9967 -0.0426 -0.0689\nv -0.005631 -0.077699 0.122202\nvn -0.989 0.1105 -0.0984\nv -0.005349 -0.075842 0.121455\nvn -0.989 0.1105 -0.0984\nv -0.005615 -0.078376 0.121279\nvn -0.989 0.1105 -0.0984\nv -0.00076 -0.077408 0.127908\nvn -0.088 0.0421 0.9952\nv -0.000244 -0.081274 0.128069\nvn -0.1362 -0.0314 0.9902\nv -0.001369 -0.079874 0.127959\nvn -0.1362 -0.0314 0.9902\nv -0.001487 -0.082146 0.127871\nvn -0.1362 -0.0314 0.9902\nv -0.000604 -0.085912 0.127523\nvn -0.2301 -0.1669 0.9588\nv -0.001041 -0.083532 0.127833\nvn -0.2301 -0.1669 0.9588\nv -0.001624 -0.086396 0.127195\nvn -0.2301 -0.1669 0.9588\nv -0.005126 -0.085896 0.121285\nvn -0.9332 -0.2463 -0.2617\nv -0.004775 -0.086358 0.120467\nvn -0.9332 -0.2463 -0.2617\nv -0.00437 -0.088339 0.120886\nvn -0.9332 -0.2463 -0.2617\nv -0.005747 -0.08041 0.122071\nvn -0.9844 -0.0045 -0.1761\nv -0.005615 -0.078376 0.121279\nvn -0.9844 -0.0045 -0.1761\nv -0.005611 -0.082445 0.121363\nvn -0.9844 -0.0045 -0.1761\nv -0.001041 -0.083532 0.127833\nvn -0.2587 -0.1597 0.9527\nv -0.002112 -0.084609 0.127361\nvn -0.2587 -0.1597 0.9527\nv -0.001624 -0.086396 0.127195\nvn -0.2587 -0.1597 0.9527\nv -0.005611 -0.082445 0.121363\nvn -0.971 -0.1319 -0.1996\nv -0.005272 -0.083775 0.120593\nvn -0.971 -0.1319 -0.1996\nv -0.005126 -0.085896 0.121285\nvn -0.971 -0.1319 -0.1996\nv -0.00076 -0.077408 0.127908\nvn -0.2206 0.0744 0.9725\nv -0.001802 -0.077518 0.12768\nvn -0.2206 0.0744 0.9725\nv -0.001369 -0.079874 0.127959\nvn -0.2206 0.0744 0.9725\nv -0.001041 -0.083532 0.127833\nvn -0.2956 -0.1208 0.9476\nv -0.001487 -0.082146 0.127871\nvn -0.2956 -0.1208 0.9476\nv -0.002112 -0.084609 0.127361\nvn -0.2956 -0.1208 0.9476\nv -0.005615 -0.078376 0.121279\nvn -0.987 -0.0042 -0.1606\nv -0.005494 -0.080162 0.120579\nvn -0.987 -0.0042 -0.1606\nv -0.005611 -0.082445 0.121363\nvn -0.987 -0.0042 -0.1606\nv -0.00076 -0.077408 0.127908\nvn -0.2247 0.1261 0.9662\nv -0.000887 -0.075819 0.127671\nvn -0.2247 0.1261 0.9662\nv -0.001802 -0.077518 0.12768\nvn -0.2247 0.1261 0.9662\nv -0.005126 -0.085896 0.121285\nvn -0.9366 -0.1652 -0.3089\nv -0.005272 -0.083775 0.120593\nvn -0.9366 -0.1652 -0.3089\nv -0.004775 -0.086358 0.120467\nvn -0.9366 -0.1652 -0.3089\nv -0.005611 -0.082445 0.121363\nvn -0.9495 -0.0636 -0.3073\nv -0.005136 -0.082533 0.119912\nvn -0.9494 -0.064 -0.3074\nv -0.005272 -0.083775 0.120593\nvn -0.9495 -0.0641 -0.3072\nv -0.001447 -0.088412 0.126677\nvn -0.3807 -0.2335 0.8947\nv -0.002884 -0.086104 0.126667\nvn -0.3807 -0.2335 0.8947\nv -0.002324 -0.088274 0.126339\nvn -0.3807 -0.2335 0.8947\nv -0.001624 -0.086396 0.127195\nvn -0.4234 -0.2602 0.8678\nv -0.002884 -0.086104 0.126667\nvn -0.4234 -0.2602 0.8678\nv -0.001447 -0.088412 0.126677\nvn -0.4234 -0.2602 0.8678\nv -0.001624 -0.086396 0.127195\nvn -0.417 -0.1968 0.8874\nv -0.002112 -0.084609 0.127361\nvn -0.417 -0.1968 0.8874\nv -0.002884 -0.086104 0.126667\nvn -0.417 -0.1968 0.8874\nv -0.005615 -0.078376 0.121279\nvn -0.9534 0.0517 -0.2974\nv -0.005355 -0.07764 0.120572\nvn -0.9534 0.0517 -0.2974\nv -0.005494 -0.080162 0.120579\nvn -0.9534 0.0517 -0.2974\nv -0.005494 -0.080162 0.120579\nvn -0.9498 -0.0566 -0.3077\nv -0.001755 -0.075819 0.127438\nvn -0.2574 0.1436 0.9556\nv -0.001802 -0.077518 0.12768\nvn -0.2574 0.1436 0.9556\nv -0.000887 -0.075819 0.127671\nvn -0.2574 0.1436 0.9556\nv -0.00437 -0.088339 0.120886\nvn -0.8733 -0.2561 -0.4144\nv -0.004635 -0.085768 0.119856\nvn -0.8733 -0.2561 -0.4144\nv -0.003825 -0.088201 0.119653\nvn -0.8733 -0.2561 -0.4144\nv -0.004775 -0.086358 0.120467\nvn -0.8485 -0.2699 -0.4552\nv -0.004635 -0.085768 0.119856\nvn -0.8485 -0.2699 -0.4552\nv -0.00437 -0.088339 0.120886\nvn -0.8485 -0.2699 -0.4552\nv -0.002112 -0.084609 0.127361\nvn -0.3723 -0.0963 0.9231\nv -0.001487 -0.082146 0.127871\nvn -0.3729 -0.0956 0.923\nv -0.002493 -0.083027 0.127373\nvn -0.379 -0.0876 0.9212\nv -0.005272 -0.083775 0.120593\nvn -0.9177 -0.1589 -0.364\nv -0.004635 -0.085768 0.119856\nvn -0.9177 -0.1589 -0.364\nv -0.004775 -0.086358 0.120467\nvn -0.9177 -0.1589 -0.364\nv -0.002686 -0.083717 0.127195\nvn -0.4325 -0.1106 0.8948\nv -0.002112 -0.084609 0.127361\nvn -0.4325 -0.1106 0.8948\nv -0.002493 -0.083027 0.127373\nvn -0.4325 -0.1106 0.8948\nv -0.005087 -0.07581 0.120575\nvn -0.9504 0.1394 -0.2781\nv -0.005355 -0.07764 0.120572\nvn -0.9504 0.1394 -0.2781\nv -0.005349 -0.075842 0.121455\nvn -0.9504 0.1394 -0.2781\nv -0.005349 -0.075842 0.121455\nvn -0.9653 0.1174 -0.2333\nv -0.005355 -0.07764 0.120572\nvn -0.9653 0.1174 -0.2333\nv -0.005615 -0.078376 0.121279\nvn -0.9653 0.1174 -0.2333\nv -0.005272 -0.083775 0.120593\nvn -0.9039 -0.1256 -0.4088\nv -0.004892 -0.083663 0.119719\nvn -0.903 -0.131 -0.4091\nv -0.004635 -0.085768 0.119856\nvn -0.902 -0.1371 -0.4094\nv -0.005136 -0.082533 0.119912\nvn -0.904 -0.1249 -0.4088\nv -0.002439 -0.082 0.127491\nvn -0.3804 -0.0858 0.9209\nv -0.001369 -0.079874 0.127959\nvn -0.3499 -0.0183 0.9366\nv -0.002419 -0.080681 0.127551\nvn -0.3499 -0.0183 0.9366\nv -0.001487 -0.082146 0.127871\nvn -0.3499 -0.0183 0.9366\nv -0.001487 -0.082146 0.127871\nvn -0.375 -0.0365 0.9263\nv -0.002419 -0.080681 0.127551\nvn -0.375 -0.0365 0.9263\nv -0.002439 -0.082 0.127491\nvn -0.375 -0.0365 0.9263\nv 0.004745 -0.085596 0.124691\nvn 0.708 -0.163 0.6871\nv 0.004857 -0.083727 0.12502\nvn 0.708 -0.163 0.6871\nv 0.004801 -0.08282 0.125292\nvn 0.708 -0.163 0.6871\nv -0.001369 -0.079874 0.127959\nvn -0.374 0.0318 0.9269\nv -0.002452 -0.079269 0.127501\nvn -0.3773 0.0251 0.9258\nv -0.002419 -0.080681 0.127551\nvn -0.3779 0.0237 0.9255\nv -0.002382 -0.07582 0.127187\nvn -0.3673 0.1414 0.9193\nv -0.001802 -0.077518 0.12768\nvn -0.3673 0.1414 0.9193\nv -0.001755 -0.075819 0.127438\nvn -0.3673 0.1414 0.9193\nv -0.005087 -0.07581 0.120575\nvn -0.9172 0.1346 -0.3751\nv -0.00492 -0.076957 0.119756\nvn -0.9178 0.1337 -0.374\nv -0.005355 -0.07764 0.120572\nvn -0.9171 0.1347 -0.3752\nv -0.002455 -0.078646 0.127477\nvn -0.373 0.0339 0.9272\nv -0.005494 -0.080162 0.120579\nvn -0.9111 -0.0215 -0.4116\nv -0.005209 -0.079673 0.119923\nvn -0.9111 -0.0215 -0.4116\nv -0.005136 -0.082533 0.119912\nvn -0.9111 -0.0215 -0.4116\nv 0.004745 -0.085596 0.124691\nvn 0.8067 -0.2132 0.5512\nv 0.003891 -0.085715 0.125895\nvn 0.8067 -0.2132 0.5512\nv 0.003906 -0.08813 0.12494\nvn 0.8067 -0.2132 0.5512\nv -0.001802 -0.077518 0.12768\nvn -0.364 0.0431 0.9304\nv -0.002455 -0.078646 0.127477\nvn -0.364 0.0431 0.9304\nv -0.001369 -0.079874 0.127959\nvn -0.364 0.0431 0.9304\nv -0.002686 -0.083717 0.127195\nvn -0.4845 -0.1501 0.8618\nv -0.002884 -0.086104 0.126667\nvn -0.4845 -0.1501 0.8618\nv -0.002112 -0.084609 0.127361\nvn -0.4845 -0.1501 0.8618\nv -0.004806 -0.075819 0.119883\nvn -0.9179 0.1335 -0.3737\nv -0.005494 -0.080162 0.120579\nvn -0.932 0.0502 -0.3591\nv -0.005153 -0.07867 0.119904\nvn -0.929 0.0458 -0.3672\nv -0.005209 -0.079673 0.119923\nvn -0.9281 0.0444 -0.3698\nv -0.002945 -0.082805 0.127151\nvn -0.5845 -0.1284 0.8011\nv -0.002884 -0.086104 0.126667\nvn -0.5845 -0.1284 0.8011\nv -0.002686 -0.083717 0.127195\nvn -0.5845 -0.1284 0.8011\nv -0.005355 -0.07764 0.120572\nvn -0.9321 0.0503 -0.3587\nv -0.001802 -0.077518 0.12768\nvn -0.4063 0.0712 0.911\nv -0.002492 -0.077847 0.127398\nvn -0.4063 0.0712 0.911\nv -0.002455 -0.078646 0.127477\nvn -0.4063 0.0712 0.911\nv -0.005355 -0.07764 0.120572\nvn -0.9081 0.0879 -0.4095\nv -0.00492 -0.076957 0.119756\nvn -0.9081 0.0879 -0.4095\nv -0.005153 -0.07867 0.119904\nvn -0.9081 0.0879 -0.4095\nv 0.004838 -0.081479 0.125404\nvn 0.8425 -0.068 0.5343\nv 0.004475 -0.082188 0.125887\nvn 0.8425 -0.068 0.5343\nv 0.004801 -0.08282 0.125292\nvn 0.8425 -0.068 0.5343\nv -0.002492 -0.077847 0.127398\nvn -0.4169 0.0999 0.9034\nv -0.001802 -0.077518 0.12768\nvn -0.4169 0.0999 0.9034\nv -0.002632 -0.076881 0.127227\nvn -0.4169 0.0999 0.9034\nv 0.004745 -0.085596 0.124691\nvn 0.8142 -0.1385 0.5639\nv 0.004801 -0.08282 0.125292\nvn 0.8142 -0.1385 0.5639\nv 0.003891 -0.085715 0.125895\nvn 0.8142 -0.1385 0.5639\nv -0.002382 -0.07582 0.127187\nvn -0.3983 0.1277 0.9083\nv -0.002632 -0.076881 0.127227\nvn -0.3983 0.1277 0.9083\nv -0.001802 -0.077518 0.12768\nvn -0.3983 0.1277 0.9083\nv -0.002324 -0.088274 0.126339\nvn -0.569 -0.2646 0.7786\nv -0.002884 -0.086104 0.126667\nvn -0.569 -0.2646 0.7786\nv -0.003419 -0.088032 0.125621\nvn -0.569 -0.2646 0.7786\nv -0.002945 -0.082805 0.127151\nvn -0.5669 -0.1299 0.8135\nv -0.003495 -0.082284 0.126851\nvn -0.5669 -0.1299 0.8135\nv -0.002884 -0.086104 0.126667\nvn -0.5669 -0.1299 0.8135\nv 0.004801 -0.08282 0.125292\nvn 0.8035 -0.1317 0.5805\nv 0.004475 -0.082188 0.125887\nvn 0.8035 -0.1317 0.5805\nv 0.003891 -0.085715 0.125895\nvn 0.8035 -0.1317 0.5805\nv -0.003012 -0.081906 0.127171\nvn -0.5199 -0.0566 0.8523\nv -0.003495 -0.082284 0.126851\nvn -0.5217 -0.0535 0.8515\nv -0.002945 -0.082805 0.127151\nvn -0.5195 -0.0573 0.8526\nv -0.003057 -0.081313 0.12718\nvn -0.5222 -0.0526 0.8512\nv 0.004832 -0.079751 0.125473\nvn 0.813 -0.0204 0.582\nv 0.004475 -0.082188 0.125887\nvn 0.813 -0.0204 0.582\nv 0.004838 -0.081479 0.125404\nvn 0.813 -0.0204 0.582\nv -0.002632 -0.076881 0.127227\nvn -0.622 0.1752 0.7632\nv -0.002382 -0.07582 0.127187\nvn -0.622 0.1752 0.7632\nv -0.002899 -0.077456 0.127142\nvn -0.622 0.1752 0.7632\nv 0.003906 -0.08813 0.12494\nvn 0.7145 -0.2537 0.652\nv 0.003891 -0.085715 0.125895\nvn 0.7145 -0.2537 0.652\nv 0.002932 -0.08818 0.125987\nvn 0.7145 -0.2537 0.652\nv 0.004812 -0.078123 0.125333\nvn 0.8115 0.0601 0.5813\nv 0.004283 -0.077565 0.126014\nvn 0.8115 0.0601 0.5813\nv 0.004832 -0.079751 0.125473\nvn 0.8115 0.0601 0.5813\nv 0.004812 -0.078123 0.125333\nvn 0.8264 0.1095 0.5524\nv 0.004875 -0.076853 0.124987\nvn 0.8264 0.1095 0.5524\nv 0.004283 -0.077565 0.126014\nvn 0.8264 0.1095 0.5524\nv -0.003057 -0.081313 0.12718\nvn -0.58 -0.0141 0.8145\nv -0.003117 -0.079384 0.127171\nvn -0.58 -0.0141 0.8145\nv -0.003495 -0.082284 0.126851\nvn -0.58 -0.0141 0.8145\nv -0.003218 -0.075818 0.126673\nvn -0.5183 0.1402 0.8436\nv -0.002899 -0.077456 0.127142\nvn -0.5183 0.1402 0.8436\nv -0.002382 -0.07582 0.127187\nvn -0.5183 0.1402 0.8436\nv -0.002899 -0.077456 0.127142\nvn -0.5582 0.0757 0.8263\nv -0.003621 -0.077516 0.126659\nvn -0.5582 0.0757 0.8263\nv -0.003117 -0.079384 0.127171\nvn -0.5582 0.0757 0.8263\nv 0.004628 -0.075815 0.125118\nvn 0.8199 0.1243 0.5589\nv 0.004283 -0.077565 0.126014\nvn 0.8199 0.1243 0.5589\nv 0.004875 -0.076853 0.124987\nvn 0.8199 0.1243 0.5589\nv 0.004475 -0.082188 0.125887\nvn 0.7456 -0.1219 0.6551\nv 0.003969 -0.082345 0.126433\nvn 0.7456 -0.1219 0.6551\nv 0.003891 -0.085715 0.125895\nvn 0.7456 -0.1219 0.6551\nv -0.002884 -0.086104 0.126667\nvn -0.6019 -0.1342 0.7872\nv -0.003495 -0.082284 0.126851\nvn -0.6019 -0.1342 0.7872\nv -0.003972 -0.084188 0.126162\nvn -0.6019 -0.1342 0.7872\nv 0.004832 -0.079751 0.125473\nvn 0.7803 0.0417 0.624\nv 0.004283 -0.077565 0.126014\nvn 0.7803 0.0417 0.624\nv 0.004045 -0.07917 0.126418\nvn 0.7803 0.0417 0.624\nv -0.003218 -0.075818 0.126673\nvn -0.5582 0.1257 0.8201\nv -0.003621 -0.077516 0.126659\nvn -0.5582 0.1257 0.8201\nv -0.002899 -0.077456 0.127142\nvn -0.5582 0.1257 0.8201\nv 0.004628 -0.075815 0.125118\nvn 0.8087 0.1337 0.5729\nv 0.004112 -0.075832 0.12585\nvn 0.8087 0.1337 0.5729\nv 0.004283 -0.077565 0.126014\nvn 0.8087 0.1337 0.5729\nv 0.003891 -0.085715 0.125895\nvn 0.667 -0.2331 0.7077\nv 0.003127 -0.086361 0.126403\nvn 0.667 -0.2331 0.7077\nv 0.002932 -0.08818 0.125987\nvn 0.667 -0.2331 0.7077\nv -0.002884 -0.086104 0.126667\nvn -0.6767 -0.1971 0.7094\nv -0.003972 -0.084188 0.126162\nvn -0.6767 -0.1971 0.7094\nv -0.003419 -0.088032 0.125621\nvn -0.6767 -0.1971 0.7094\nv -0.003495 -0.082284 0.126851\nvn -0.6953 -0.0843 0.7138\nv -0.004189 -0.081605 0.126256\nvn -0.6953 -0.0843 0.7138\nv -0.003972 -0.084188 0.126162\nvn -0.6953 -0.0843 0.7138\nv 0.004475 -0.082188 0.125887\nvn 0.7359 -0.0144 0.6769\nv 0.004045 -0.07917 0.126418\nvn 0.7359 -0.0144 0.6769\nv 0.003969 -0.082345 0.126433\nvn 0.7359 -0.0144 0.6769\nv 0.004832 -0.079751 0.125473\nvn 0.7674 -0.0036 0.6411\nv 0.004045 -0.07917 0.126418\nvn 0.7674 -0.0036 0.6411\nv 0.004475 -0.082188 0.125887\nvn 0.7674 -0.0036 0.6411\nv -0.003117 -0.079384 0.127171\nvn -0.6303 0.0423 0.7752\nv -0.003621 -0.077516 0.126659\nvn -0.6303 0.0423 0.7752\nv -0.00411 -0.079179 0.126352\nvn -0.6303 0.0423 0.7752\nv -0.003117 -0.079384 0.127171\nvn -0.6363 -0.002 0.7714\nv -0.00411 -0.079179 0.126352\nvn -0.6363 -0.002 0.7714\nv -0.003495 -0.082284 0.126851\nvn -0.6363 -0.002 0.7714\nv -0.003495 -0.082284 0.126851\nvn -0.6562 -0.0087 0.7545\nv -0.00411 -0.079179 0.126352\nvn -0.6562 -0.0087 0.7545\nv -0.004189 -0.081605 0.126256\nvn -0.6562 -0.0087 0.7545\nv 0.003969 -0.082345 0.126433\nvn 0.6544 -0.134 0.7442\nv 0.003143 -0.083234 0.127\nvn 0.6544 -0.134 0.7442\nv 0.003891 -0.085715 0.125895\nvn 0.6544 -0.134 0.7442\nv -0.003972 -0.084188 0.126162\nvn -0.7344 -0.197 0.6495\nv -0.004396 -0.085809 0.125191\nvn -0.7344 -0.197 0.6495\nv -0.003419 -0.088032 0.125621\nvn -0.7344 -0.197 0.6495\nv -0.003218 -0.075818 0.126673\nvn -0.6466 0.1473 0.7485\nv -0.003834 -0.075819 0.126141\nvn -0.6466 0.1473 0.7485\nv -0.003621 -0.077516 0.126659\nvn -0.6466 0.1473 0.7485\nv 0.003891 -0.085715 0.125895\nvn 0.6312 -0.1486 0.7612\nv 0.003143 -0.083234 0.127\nvn 0.6312 -0.1486 0.7612\nv 0.003127 -0.086361 0.126403\nvn 0.6312 -0.1486 0.7612\nv -0.003419 -0.088032 0.125621\nvn -0.7776 -0.2283 0.5859\nv -0.004396 -0.085809 0.125191\nvn -0.7776 -0.2283 0.5859\nv -0.003946 -0.088093 0.124898\nvn -0.7776 -0.2283 0.5859\nv -0.00411 -0.079179 0.126352\nvn -0.7573 -0.0014 0.653\nv -0.0047 -0.080258 0.125666\nvn -0.7573 -0.0014 0.653\nv -0.004189 -0.081605 0.126256\nvn -0.7573 -0.0014 0.653\nv 0.004045 -0.07917 0.126418\nvn 0.6606 -0.0122 0.7507\nv 0.003327 -0.080036 0.127036\nvn 0.6606 -0.0122 0.7507\nv 0.003969 -0.082345 0.126433\nvn 0.6606 -0.0122 0.7507\nv 0.004112 -0.075832 0.12585\nvn 0.6811 0.135 0.7196\nv 0.00334 -0.075812 0.126578\nvn 0.6811 0.135 0.7196\nv 0.004283 -0.077565 0.126014\nvn 0.6811 0.135 0.7196\nv -0.003972 -0.084188 0.126162\nvn -0.796 -0.144 0.588\nv -0.004738 -0.083812 0.125217\nvn -0.796 -0.144 0.588\nv -0.004396 -0.085809 0.125191\nvn -0.796 -0.144 0.588\nv -0.003621 -0.077516 0.126659\nvn -0.7349 0.0921 0.6719\nv -0.004668 -0.078201 0.125607\nvn -0.7349 0.0921 0.6719\nv -0.00411 -0.079179 0.126352\nvn -0.7349 0.0921 0.6719\nv 0.003969 -0.082345 0.126433\nvn 0.6156 -0.0343 0.7873\nv 0.003327 -0.080036 0.127036\nvn 0.6156 -0.0343 0.7873\nv 0.003218 -0.082325 0.127022\nvn 0.6156 -0.0343 0.7873\nv 0.003969 -0.082345 0.126433\nvn 0.6139 -0.0696 0.7863\nv 0.003218 -0.082325 0.127022\nvn 0.6139 -0.0696 0.7863\nv 0.003143 -0.083234 0.127\nvn 0.6139 -0.0696 0.7863\nv 0.00334 -0.075812 0.126578\nvn 0.6554 0.1124 0.7469\nv 0.003257 -0.078216 0.127012\nvn 0.6554 0.1124 0.7469\nv 0.004283 -0.077565 0.126014\nvn 0.6554 0.1124 0.7469\nv 0.003127 -0.086361 0.126403\nvn 0.5111 -0.2431 0.8244\nv 0.002408 -0.085927 0.126976\nvn 0.5111 -0.2431 0.8244\nv 0.002932 -0.08818 0.125987\nvn 0.5111 -0.2431 0.8244\nv -0.003972 -0.084188 0.126162\nvn -0.7935 -0.1151 0.5975\nv -0.004676 -0.082831 0.125488\nvn -0.7935 -0.1151 0.5975\nv -0.004738 -0.083812 0.125217\nvn -0.7935 -0.1151 0.5975\nv 0.003127 -0.086361 0.126403\nvn 0.5554 -0.1587 0.8163\nv 0.004283 -0.077565 0.126014\nvn 0.6653 0.0882 0.7413\nv 0.003257 -0.078216 0.127012\nvn 0.6653 0.0882 0.7413\nv 0.004045 -0.07917 0.126418\nvn 0.6653 0.0882 0.7413\nv -0.003972 -0.084188 0.126162\nvn -0.7685 -0.0835 0.6344\nv -0.004685 -0.081959 0.125591\nvn -0.7693 -0.084 0.6333\nv -0.004676 -0.082831 0.125488\nvn -0.7678 -0.0831 0.6352\nv -0.004189 -0.081605 0.126256\nvn -0.7751 -0.0878 0.6258\nv -0.003834 -0.075819 0.126141\nvn -0.7392 0.11 0.6645\nv -0.004668 -0.078201 0.125607\nvn -0.7392 0.11 0.6645\nv -0.003621 -0.077516 0.126659\nvn -0.7392 0.11 0.6645\nv 0.002932 -0.08818 0.125987\nvn 0.4638 -0.2636 0.8458\nv 0.002408 -0.085927 0.126976\nvn 0.4638 -0.2636 0.8458\nv 0.001491 -0.088188 0.126774\nvn 0.4638 -0.2636 0.8458\nv 0.004045 -0.07917 0.126418\nvn 0.6276 0.0344 0.7778\nv 0.003257 -0.078216 0.127012\nvn 0.6276 0.0344 0.7778\nv 0.003327 -0.080036 0.127036\nvn 0.6276 0.0344 0.7778\nv -0.004189 -0.081605 0.126256\nvn -0.792 -0.0336 0.6096\nv -0.0047 -0.080258 0.125666\nvn -0.792 -0.0336 0.6096\nv -0.004685 -0.081959 0.125591\nvn -0.792 -0.0336 0.6096\nv 0.00262 -0.081019 0.127461\nvn 0.8562 -0.0109 0.5166\nv 0.002683 -0.08255 0.127324\nvn 0.8562 -0.0109 0.5166\nv 0.002648 -0.079987 0.127436\nvn 0.8562 -0.0109 0.5166\nv -0.002632 -0.076881 0.127227\nvn -0.7663 0.0029 0.6425\nv -0.002686 -0.083717 0.127195\nvn -0.7663 0.0029 0.6425\nv -0.002492 -0.077847 0.127398\nvn -0.7663 0.0029 0.6425\nv -0.002686 -0.083717 0.127195\nvn -0.6729 -0.0035 0.7397\nv -0.002493 -0.083027 0.127373\nvn -0.6729 -0.0035 0.7397\nv -0.002492 -0.077847 0.127398\nvn -0.6729 -0.0035 0.7397\nv -0.002492 -0.077847 0.127398\nvn -0.9154 -0.0027 0.4025\nv -0.002439 -0.082 0.127491\nvn -0.9154 -0.0027 0.4025\nv -0.002455 -0.078646 0.127477\nvn -0.9154 -0.0027 0.4025\nv -0.002493 -0.083027 0.127373\nvn -0.903 -0.002 0.4296\nv -0.002439 -0.082 0.127491\nvn -0.903 -0.002 0.4296\nv -0.002492 -0.077847 0.127398\nvn -0.903 -0.002 0.4296\nv -0.002455 -0.078646 0.127477\nvn -0.9999 -0.0048 -0.0105\nv -0.002439 -0.082 0.127491\nvn -0.9999 -0.0048 -0.0105\nv -0.002452 -0.079269 0.127501\nvn -0.9999 -0.0048 -0.0105\nv -0.002452 -0.079269 0.127501\nvn -0.9023 -0.006 0.431\nv -0.002439 -0.082 0.127491\nvn -0.9023 -0.006 0.431\nv -0.002419 -0.080681 0.127551\nvn -0.9023 -0.006 0.431\nv -0.004961 -0.078003 0.125045\nvn -0.6068 -0.0014 0.7949\nv -0.005003 -0.082468 0.125005\nvn -0.6068 -0.0014 0.7949\nv -0.004744 -0.076876 0.125213\nvn -0.6068 -0.0014 0.7949\nv -0.004738 -0.083812 0.125217\nvn -0.9745 -0.0007 0.2246\nv -0.004676 -0.082831 0.125488\nvn -0.9745 -0.0007 0.2246\nv -0.004744 -0.076876 0.125213\nvn -0.9745 -0.0007 0.2246\nv -0.004744 -0.076876 0.125213\nvn -0.984 -0.003 0.1779\nv -0.004676 -0.082831 0.125488\nvn -0.984 -0.003 0.1779\nv -0.004668 -0.078201 0.125607\nvn -0.984 -0.003 0.1779\nv -0.004676 -0.082831 0.125488\nvn -0.9909 0.0051 -0.1348\nv -0.004685 -0.081959 0.125591\nvn -0.9909 0.0051 -0.1348\nv -0.004668 -0.078201 0.125607\nvn -0.9909 0.0051 -0.1348\nv -0.004685 -0.081959 0.125591\nvn -0.9502 0.0057 -0.3115\nv -0.0047 -0.080258 0.125666\nvn -0.9502 0.0057 -0.3115\nv -0.004668 -0.078201 0.125607\nvn -0.9502 0.0057 -0.3115\nv -0.005003 -0.082468 0.125005\nvn -0.6247 0 0.7809\nv -0.004738 -0.083812 0.125217\nvn -0.6247 0 0.7809\nv -0.004744 -0.076876 0.125213\nvn -0.6247 0 0.7809\nv 0.00393 -0.088613 0.120539\nvn 0.5944 -0.7879 -0.161\nv 0.004518 -0.088419 0.121764\nvn 0.5944 -0.7879 -0.161\nv 0.003936 -0.088742 0.121193\nvn 0.5944 -0.7879 -0.161\nv 0.004309 -0.088292 0.120663\nvn 0.6702 -0.712 -0.2094\nv 0.004518 -0.088419 0.121764\nvn 0.6702 -0.712 -0.2094\nv 0.00393 -0.088613 0.120539\nvn 0.6702 -0.712 -0.2094\nv -0.002324 -0.088274 0.126339\nvn -0.3583 -0.6565 0.6638\nv -0.0026 -0.088533 0.125935\nvn -0.3583 -0.6565 0.6638\nv -0.001447 -0.088412 0.126677\nvn -0.3583 -0.6565 0.6638\nv 0.004327 -0.088359 0.123897\nvn 0.7006 -0.7033 0.1207\nv 0.004229 -0.088673 0.122636\nvn 0.7006 -0.7033 0.1207\nv 0.004616 -0.088295 0.122594\nvn 0.7006 -0.7033 0.1207\nv 0.004327 -0.088359 0.123897\nvn 0.5645 -0.8102 0.158\nv 0.003733 -0.088786 0.12383\nvn 0.5645 -0.8102 0.158\nv 0.004229 -0.088673 0.122636\nvn 0.5645 -0.8102 0.158\nv 0.004327 -0.088359 0.123897\nvn 0.5366 -0.7922 0.2905\nv 0.003233 -0.088559 0.125371\nvn 0.5366 -0.7922 0.2905\nv 0.003733 -0.088786 0.12383\nvn 0.5366 -0.7922 0.2905\nv 0.004518 -0.088419 0.121764\nvn 0.7002 -0.7135 0.0243\nv 0.004616 -0.088295 0.122594\nvn 0.7002 -0.7135 0.0243\nv 0.004229 -0.088673 0.122636\nvn 0.7002 -0.7135 0.0243\nv -0.001856 -0.088761 0.125921\nvn -0.2432 -0.8236 0.5123\nv -0.001447 -0.088412 0.126677\nvn -0.2432 -0.8236 0.5123\nv -0.0026 -0.088533 0.125935\nvn -0.2432 -0.8236 0.5123\nv 0.003906 -0.08813 0.12494\nvn 0.6626 -0.6291 0.4063\nv 0.003233 -0.088559 0.125371\nvn 0.6626 -0.6291 0.4063\nv 0.004327 -0.088359 0.123897\nvn 0.6626 -0.6291 0.4063\nv 0.003233 -0.088559 0.125371\nvn 0.2893 -0.9291 0.2305\nv 0.002449 -0.088782 0.125457\nvn 0.2893 -0.9291 0.2305\nv 0.003733 -0.088786 0.12383\nvn 0.2893 -0.9291 0.2305\nv 0.004229 -0.088673 0.122636\nvn 0.5341 -0.8427 -0.0684\nv 0.003936 -0.088742 0.121193\nvn 0.5341 -0.8427 -0.0684\nv 0.004518 -0.088419 0.121764\nvn 0.5341 -0.8427 -0.0684\nv 0.002932 -0.08818 0.125987\nvn 0.6672 -0.4428 0.599\nv 0.003233 -0.088559 0.125371\nvn 0.6672 -0.4428 0.599\nv 0.003906 -0.08813 0.12494\nvn 0.6672 -0.4428 0.599\nv 0.001645 -0.088612 0.126388\nvn 0.2906 -0.8649 0.4092\nv 0.002449 -0.088782 0.125457\nvn 0.2906 -0.8649 0.4092\nv 0.003233 -0.088559 0.125371\nvn 0.2906 -0.8649 0.4092\nv 0.004229 -0.088673 0.122636\nvn 0.224 -0.9746 0.0009\nv 0.003733 -0.088786 0.12383\nvn 0.224 -0.9746 0.0009\nv 0.003936 -0.088742 0.121193\nvn 0.224 -0.9746 0.0009\nv 0.003254 -0.088559 0.119367\nvn 0.2898 -0.8945 -0.3403\nv 0.002931 -0.088783 0.119679\nvn 0.2898 -0.8945 -0.3403\nv 0.001939 -0.088748 0.118743\nvn 0.2898 -0.8945 -0.3403\nv 0.003254 -0.088559 0.119367\nvn 0.3399 -0.8143 -0.4705\nv 0.001939 -0.088748 0.118743\nvn 0.3399 -0.8143 -0.4705\nv 0.002143 -0.088459 0.118391\nvn 0.3399 -0.8143 -0.4705\nv 0.003271 -0.088116 0.118942\nvn 0.4894 -0.6129 -0.6203\nv 0.003254 -0.088559 0.119367\nvn 0.4894 -0.6129 -0.6203\nv 0.002143 -0.088459 0.118391\nvn 0.4894 -0.6129 -0.6203\nv 0.001645 -0.088612 0.126388\nvn 0.0978 -0.9606 0.2603\nv 3.8e-05 -0.088775 0.126391\nvn 0.0978 -0.9606 0.2603\nv 0.002449 -0.088782 0.125457\nvn 0.0978 -0.9606 0.2603\nv 0.002932 -0.08818 0.125987\nvn 0.4164 -0.6688 0.6159\nv 0.001645 -0.088612 0.126388\nvn 0.4164 -0.6688 0.6159\nv 0.003233 -0.088559 0.125371\nvn 0.4164 -0.6688 0.6159\nv 0.003271 -0.088116 0.118942\nvn 0.4987 -0.4679 -0.7297\nv 0.002143 -0.088459 0.118391\nvn 0.4987 -0.4679 -0.7297\nv 0.002068 -0.088079 0.118096\nvn 0.4987 -0.4679 -0.7297\nv 0.001491 -0.088188 0.126774\nvn 0.4092 -0.5295 0.7431\nv 0.001645 -0.088612 0.126388\nvn 0.4092 -0.5295 0.7431\nv 0.002932 -0.08818 0.125987\nvn 0.4092 -0.5295 0.7431\nv 0.00393 -0.088613 0.120539\nvn 0.3184 -0.9295 -0.1863\nv 0.003936 -0.088742 0.121193\nvn 0.3184 -0.9295 -0.1863\nv 0.002931 -0.088783 0.119679\nvn 0.3184 -0.9295 -0.1863\nv 0.000118 -0.088471 0.126838\nvn 0.0852 -0.8312 0.5494\nv 3.8e-05 -0.088775 0.126391\nvn 0.0852 -0.8312 0.5494\nv 0.001645 -0.088612 0.126388\nvn 0.0852 -0.8312 0.5494\nv 0.00393 -0.088613 0.120539\nvn 0.3712 -0.8929 -0.2549\nv 0.002931 -0.088783 0.119679\nvn 0.3712 -0.8929 -0.2549\nv 0.003254 -0.088559 0.119367\nvn 0.3712 -0.8929 -0.2549\nv 0.004181 -0.088116 0.120151\nvn 0.6831 -0.5185 -0.5143\nv 0.003254 -0.088559 0.119367\nvn 0.6831 -0.5185 -0.5143\nv 0.003271 -0.088116 0.118942\nvn 0.6831 -0.5185 -0.5143\nv 0.004181 -0.088116 0.120151\nvn 0.6496 -0.6442 -0.4038\nv 0.00393 -0.088613 0.120539\nvn 0.6496 -0.6442 -0.4038\nv 0.003254 -0.088559 0.119367\nvn 0.6496 -0.6442 -0.4038\nv 0.001491 -0.088188 0.126774\nvn 0.165 -0.6315 0.7576\nv 0.000118 -0.088471 0.126838\nvn 0.165 -0.6315 0.7576\nv 0.001645 -0.088612 0.126388\nvn 0.165 -0.6315 0.7576\nv -0.000301 -0.088084 0.127055\nvn 0.1212 -0.3831 0.9157\nv 0.000118 -0.088471 0.126838\nvn 0.1212 -0.3831 0.9157\nv 0.001491 -0.088188 0.126774\nvn 0.1212 -0.3831 0.9157\nv 0.004309 -0.088292 0.120663\nvn 0.6654 -0.6386 -0.3864\nv 0.00393 -0.088613 0.120539\nvn 0.6654 -0.6386 -0.3864\nv 0.004181 -0.088116 0.120151\nvn 0.6654 -0.6386 -0.3864\nv 0.003936 -0.088742 0.121193\nvn 0.059 -0.9982 -0.0122\nv 0.003733 -0.088786 0.12383\nvn 0.059 -0.9982 -0.0122\nv 0.002931 -0.088783 0.119679\nvn 0.059 -0.9982 -0.0122\nv -0.001447 -0.088412 0.126677\nvn -0.0896 -0.8162 0.5708\nv 3.8e-05 -0.088775 0.126391\nvn -0.0896 -0.8162 0.5708\nv 0.000118 -0.088471 0.126838\nvn -0.0896 -0.8162 0.5708\nv -0.001447 -0.088412 0.126677\nvn -0.123 -0.8738 0.4704\nv -0.001856 -0.088761 0.125921\nvn -0.123 -0.8738 0.4704\nv 3.8e-05 -0.088775 0.126391\nvn -0.123 -0.8738 0.4704\nv -0.001447 -0.088412 0.126677\nvn -0.1054 -0.5713 0.8139\nv 0.000118 -0.088471 0.126838\nvn -0.1054 -0.5713 0.8139\nv -0.000301 -0.088084 0.127055\nvn -0.1054 -0.5713 0.8139\nv 0.00334 -0.075812 0.126578\nvn 0.1796 0.9271 0.3289\nv 0.001774 -0.075817 0.127446\nvn 0.1796 0.9271 0.3289\nv 0.002686 -0.07585 0.12704\nvn 0.1796 0.9271 0.3289\nv 0.004112 -0.075832 0.12585\nvn 0.1349 0.984 0.1168\nv 0.004628 -0.075815 0.125118\nvn 0.1349 0.984 0.1168\nv 0.00334 -0.075812 0.126578\nvn 0.1349 0.984 0.1168\nv 0.004994 -0.075823 0.124386\nvn 0.1217 0.9913 0.0505\nv 0.005263 -0.075811 0.123492\nvn 0.1217 0.9913 0.0505\nv 0.004628 -0.075815 0.125118\nvn 0.1217 0.9913 0.0505\nv 0.004406 -0.075837 0.119204\nvn 0.1673 0.9794 -0.1129\nv 0.003893 -0.075818 0.118605\nvn 0.1673 0.9794 -0.1129\nv 0.004908 -0.075825 0.120052\nvn 0.1673 0.9794 -0.1129\nv 0.005234 -0.079371 0.124713\nvn 0.6818 0.004 0.7315\nv 0.005141 -0.078914 0.124797\nvn 0.6818 0.004 0.7315\nv 0.005175 -0.081554 0.12478\nvn 0.6818 0.004 0.7315\nv 0.000373 -0.077746 0.12796\nvn -0.5846 -0.0024 0.8113\nv 0.000402 -0.082872 0.127965\nvn -0.5846 -0.0024 0.8113\nv 0.00046 -0.07864 0.128019\nvn -0.5846 -0.0024 0.8113\nv 0.00046 -0.07864 0.128019\nvn -0.6929 0.0003 0.721\nv 0.000402 -0.082872 0.127965\nvn -0.6929 0.0003 0.721\nv 0.000499 -0.0799 0.128057\nvn -0.6929 0.0003 0.721\nv 0.000499 -0.0799 0.128057\nvn -0.6729 -0.001 0.7397\nv 0.000402 -0.082872 0.127965\nvn -0.6729 -0.001 0.7397\nv 0.000498 -0.081084 0.128055\nvn -0.6729 -0.001 0.7397\nv 0.004673 -0.081906 0.119046\nvn 0.9984 -0.0092 -0.0563\nv 0.004689 -0.079868 0.118991\nvn 0.9984 -0.0092 -0.0563\nv 0.004672 -0.083072 0.119218\nvn 0.9984 -0.0092 -0.0563\nv 0.003733 -0.088786 0.12383\nvn -0.002 -1 0.0025\nv 0.002449 -0.088782 0.125457\nvn 0.0003 -1 -0.0001\nv -0.003852 -0.08877 0.123485\nvn -0.0018 -1 -0.001\nv 0.002931 -0.088783 0.119679\nvn -0.0004 -1 -0.0021\nv -0.003545 -0.088781 0.12056\nvn -0.0004 -1 -0.0012\nv -0.002372 -0.088779 0.1191\nvn -0.0004 -1 -0.0026\nv -0.000535 -0.088777 0.118325\nvn -0.0004 -1 -0.0029\nv 3.8e-05 -0.088775 0.126391\nvn -0.0017 -1 0.0038\nv -0.002913 -0.088775 0.125123\nvn -0.0016 -1 0.0023\nv 3.8e-05 -0.088775 0.126391\nvn -0.0169 -0.9991 0.0393\nv -0.001856 -0.088761 0.125921\nvn -0.0169 -0.9991 0.0393\nv -0.002913 -0.088775 0.125123\nvn -0.0169 -0.9991 0.0393\nv 0.002931 -0.088783 0.119679\nvn 0.0222 -0.9979 -0.0607\nv -0.000535 -0.088777 0.118325\nvn 0.0222 -0.9979 -0.0607\nv 0.001939 -0.088748 0.118743\nvn 0.0222 -0.9979 -0.0607\nv -0.00046 -0.075794 0.117558\nvn -0.0029 0.9986 -0.0534\nv -0.00108 -0.075823 0.117047\nvn -0.0085 0.9989 -0.0465\nv -0.001966 -0.075809 0.117326\nvn -0.0012 0.9985 -0.0554\nv -0.002469 -0.075794 0.118256\nvn -0.0067 0.9998 -0.0194\nv -0.00046 -0.075794 0.117558\nvn -0.0067 0.9998 -0.0194\nv -0.001966 -0.075809 0.117326\nvn -0.0067 0.9998 -0.0194\nv 1.3e-05 -0.075817 0.116943\nvn -0.0102 0.999 -0.0446\nv -0.002469 -0.075794 0.118256\nvn -0.0231 0.9994 -0.0259\nv -0.001966 -0.075809 0.117326\nvn -0.0238 0.9993 -0.0287\nv -0.003946 -0.075818 0.118648\nvn -0.023 0.9994 -0.0275\nv -0.00046 -0.075794 0.117558\nvn 0.0057 0.9995 -0.0306\nv 0.001405 -0.075818 0.117127\nvn 0.0054 0.9995 -0.0321\nv 1.3e-05 -0.075817 0.116943\nvn 0.0052 0.9995 -0.0327\nv -0.003889 -0.075794 0.119549\nvn -0.0223 0.9994 -0.0252\nv -0.00447 -0.075812 0.11932\nvn -0.0218 0.9994 -0.0252\nv 0.002259 -0.075794 0.118077\nvn 0.0058 0.9995 -0.0304\nv 0.002259 -0.075794 0.118077\nvn 0.0203 0.9989 -0.0427\nv 0.002354 -0.075821 0.117478\nvn 0.0204 0.9989 -0.0427\nv 0.001405 -0.075818 0.117127\nvn 0.0197 0.9989 -0.0428\nv -0.003889 -0.075794 0.119549\nvn -0.0293 0.9996 -0.0062\nv -0.00447 -0.075812 0.11932\nvn -0.0294 0.9996 -0.0059\nv -0.004806 -0.075819 0.119883\nvn -0.0299 0.9995 -0.0074\nv 0.00321 -0.075817 0.118008\nvn 0.0207 0.9989 -0.0427\nv -0.004659 -0.075794 0.121302\nvn -0.0324 0.9994 -0.0142\nv -0.004659 -0.075794 0.121302\nvn -0.0099 0.9998 -0.0166\nv -0.004806 -0.075819 0.119883\nvn -0.0099 0.9998 -0.0166\nv -0.005087 -0.07581 0.120575\nvn -0.0099 0.9998 -0.0166\nv 0.002259 -0.075794 0.118077\nvn 0.0222 0.9995 -0.0222\nv 0.003893 -0.075818 0.118605\nvn 0.0221 0.9995 -0.0221\nv 0.00321 -0.075817 0.118008\nvn 0.0222 0.9995 -0.0225\nv -0.005398 -0.075818 0.122529\nvn -0.0313 0.9995 -0.0076\nv -0.004659 -0.075794 0.121302\nvn -0.0356 0.9994 -0.0014\nv -0.005087 -0.07581 0.120575\nvn -0.0356 0.9994 -0.0014\nv 0.004217 -0.075794 0.120038\nvn 0.0221 0.9995 -0.0221\nv 0.004217 -0.075794 0.120038\nvn 0.0455 0.9985 -0.0295\nv 0.004908 -0.075825 0.120052\nvn 0.0455 0.9986 -0.0276\nv 0.003893 -0.075818 0.118605\nvn 0.0455 0.9986 -0.0273\nv -0.004727 -0.075794 0.123005\nvn -0.0304 0.9995 -0.0096\nv -0.005317 -0.07581 0.123206\nvn -0.0299 0.9995 -0.0094\nv 0.005235 -0.075811 0.121021\nvn 0.0455 0.9985 -0.0299\nv -0.004193 -0.075794 0.124624\nvn -0.024 0.9997 0.0079\nv -0.004727 -0.075794 0.123005\nvn -0.024 0.9997 0.0079\nv -0.005317 -0.07581 0.123206\nvn -0.024 0.9997 0.0079\nv -0.005093 -0.075822 0.124157\nvn -0.0414 0.999 0.0189\nv -0.004193 -0.075794 0.124624\nvn -0.0432 0.9988 0.0225\nv -0.005317 -0.07581 0.123206\nvn -0.0438 0.9988 0.0236\nv 0.004808 -0.075794 0.122743\nvn 0.0211 0.9998 -0.0046\nv 0.005235 -0.075811 0.121021\nvn 0.0211 0.9998 -0.0046\nv 0.004217 -0.075794 0.120038\nvn 0.0211 0.9998 -0.0046\nv -0.004644 -0.075821 0.125098\nvn -0.0407 0.999 0.0177\nv 0.005401 -0.075821 0.122365\nvn 0.0437 0.999 -0.003\nv 0.005235 -0.075811 0.121021\nvn 0.0467 0.9989 0.0017\nv 0.004808 -0.075794 0.122743\nvn 0.0462 0.9989 0.0009\nv -0.003834 -0.075819 0.126141\nvn -0.0315 0.9991 0.0281\nv -0.002801 -0.075794 0.126246\nvn -0.0266 0.9994 0.0231\nv -0.004193 -0.075794 0.124624\nvn -0.0276 0.9994 0.023\nv -0.004644 -0.075821 0.125098\nvn -0.0336 0.9991 0.0245\nv 0.005263 -0.075811 0.123492\nvn 0.0432 0.9991 -0.0039\nv -0.003218 -0.075818 0.126673\nvn -0.0274 0.9992 0.0308\nv 0.004628 -0.075815 0.125118\nvn 0.0194 0.9998 0.0106\nv 0.005263 -0.075811 0.123492\nvn 0.0194 0.9998 0.0106\nv 0.004808 -0.075794 0.122743\nvn 0.0194 0.9998 0.0106\nv 0.004628 -0.075815 0.125118\nvn 0.0283 0.9994 0.022\nv 0.004808 -0.075794 0.122743\nvn 0.0312 0.9994 0.0115\nv 0.003996 -0.075794 0.124951\nvn 0.021 0.9996 0.0178\nv -0.002382 -0.07582 0.127187\nvn -0.0192 0.9992 0.0361\nv -0.002801 -0.075794 0.126246\nvn -0.0122 0.9994 0.033\nv -0.003218 -0.075818 0.126673\nvn -0.0211 0.9991 0.0369\nv -0.000186 -0.075794 0.127163\nvn -0.0114 0.9994 0.0326\nv -0.001755 -0.075819 0.127438\nvn -0.0115 0.9996 0.0239\nv -0.000186 -0.075794 0.127163\nvn -0.0115 0.9996 0.0239\nv -0.002382 -0.07582 0.127187\nvn -0.0115 0.9996 0.0239\nv -0.000887 -0.075819 0.127671\nvn -0.0057 0.9991 0.0416\nv -0.000186 -0.075794 0.127163\nvn -0.0083 0.9992 0.0379\nv -0.001755 -0.075819 0.127438\nvn -0.0093 0.9993 0.0366\nv 0.00334 -0.075812 0.126578\nvn 0.026 0.9994 0.0218\nv 0.002489 -0.075794 0.126451\nvn 0.0188 0.9996 0.0189\nv 0.000487 -0.075815 0.127722\nvn -0.0048 0.9991 0.0429\nv 0.001774 -0.075817 0.127446\nvn 0.0144 0.9993 0.0336\nv 0.00334 -0.075812 0.126578\nvn 0.0163 0.9993 0.035\nv 0.002489 -0.075794 0.126451\nvn 0.0088 0.9995 0.0294\nv 0.000487 -0.075815 0.127722\nvn 0.008 0.9996 0.0289\nv -0.000186 -0.075794 0.127163\nvn 0.0075 0.9996 0.0282\nv 0.002489 -0.075794 0.126451\nvn 0.7052 -0.026 0.7086\nv 0.003996 -0.075794 0.124951\nvn 0.7052 -0.026 0.7086\nv 0.003232 -0.071499 0.12587\nvn 0.7052 -0.026 0.7086\nv 0.002259 -0.075794 0.118077\nvn 0.5705 0.0247 -0.8209\nv 0.002 -0.071497 0.118027\nvn 0.5705 0.0247 -0.8209\nv 0.003377 -0.071504 0.118983\nvn 0.5705 0.0247 -0.8209\nv 0.002489 -0.075794 0.126451\nvn 0.5064 0.0291 0.8618\nv 0.003232 -0.071499 0.12587\nvn 0.5064 0.0291 0.8618\nv 0.001698 -0.071506 0.126771\nvn 0.5064 0.0291 0.8618\nv 0.004217 -0.075794 0.120038\nvn 0.7073 -0.0352 -0.706\nv 0.002259 -0.075794 0.118077\nvn 0.7073 -0.0352 -0.706\nv 0.003377 -0.071504 0.118983\nvn 0.7073 -0.0352 -0.706\nv 0.004217 -0.075794 0.120038\nvn 0.8216 0.0208 -0.5696\nv 0.003377 -0.071504 0.118983\nvn 0.8216 0.0208 -0.5696\nv 0.004329 -0.071505 0.120356\nvn 0.8216 0.0208 -0.5696\nv -0.000186 -0.075794 0.127163\nvn 0.2248 -0.0097 0.9744\nv 0.001698 -0.071506 0.126771\nvn 0.2248 -0.0097 0.9744\nv 0.000374 -0.071502 0.127077\nvn 0.2248 -0.0097 0.9744\nv -0.000186 -0.075794 0.127163\nvn 0.2572 -0.0247 0.966\nv 0.002489 -0.075794 0.126451\nvn 0.2572 -0.0247 0.966\nv 0.001698 -0.071506 0.126771\nvn 0.2572 -0.0247 0.966\nv 0.004808 -0.075794 0.122743\nvn 0.9788 -0.0046 -0.205\nv 0.004217 -0.075794 0.120038\nvn 0.9769 -0.0096 -0.2136\nv 0.004329 -0.071505 0.120356\nvn 0.9771 -0.0089 -0.2124\nv 0.004756 -0.071502 0.122414\nvn 0.9791 -0.0036 -0.2033\nv -0.000186 -0.075794 0.127163\nvn -0.1 0.0331 0.9944\nv 0.000374 -0.071502 0.127077\nvn -0.1 0.0331 0.9944\nv -0.001302 -0.071513 0.126909\nvn -0.1 0.0331 0.9944\nv -0.002801 -0.075794 0.126246\nvn -0.331 -0.0301 0.9432\nv -0.000186 -0.075794 0.127163\nvn -0.331 -0.0301 0.9432\nv -0.001302 -0.071513 0.126909\nvn -0.331 -0.0301 0.9432\nv -0.002801 -0.075794 0.126246\nvn -0.4568 0.0223 0.8893\nv -0.001302 -0.071513 0.126909\nvn -0.4568 0.0223 0.8893\nv -0.003192 -0.071505 0.125938\nvn -0.4568 0.0223 0.8893\nv 0.004808 -0.075794 0.122743\nvn 0.9769 0.0282 0.2117\nv 0.004756 -0.071502 0.122414\nvn 0.9769 0.0282 0.2117\nv 0.004346 -0.071501 0.124306\nvn 0.9769 0.0282 0.2117\nv 0.003996 -0.075794 0.124951\nvn 0.9382 -0.0246 0.3452\nv 0.004808 -0.075794 0.122743\nvn 0.9382 -0.0246 0.3452\nv 0.004346 -0.071501 0.124306\nvn 0.9382 -0.0246 0.3452\nv 0.003996 -0.075794 0.124951\nvn 0.8142 0.0208 0.5802\nv 0.004346 -0.071501 0.124306\nvn 0.8142 0.0208 0.5802\nv 0.003232 -0.071499 0.12587\nvn 0.8142 0.0208 0.5802\nv 0.00448 -0.070679 0.120676\nvn 0.5396 -0.771 -0.3382\nv 0.00372 -0.070941 0.12006\nvn 0.5396 -0.771 -0.3382\nv 0.003512 -0.070682 0.119138\nvn 0.5396 -0.771 -0.3382\nv 0.002982 -0.070946 0.119148\nvn 0.7708 0.1305 -0.6236\nv 0.003814 -0.071325 0.120097\nvn 0.7709 0.131 -0.6233\nv 0.002953 -0.071325 0.119032\nvn 0.7708 0.1311 -0.6234\nv 0.00372 -0.070941 0.12006\nvn 0.7708 0.1303 -0.6237\nv -0.002825 -0.071407 0.125868\nvn -0.3981 0.3025 0.866\nv -0.001309 -0.071216 0.126499\nvn -0.3981 0.3025 0.866\nv -0.002403 -0.071124 0.125963\nvn -0.3981 0.3025 0.866\nv 0.002892 -0.071327 0.125704\nvn 0.351 0.7767 0.5231\nv 0.001657 -0.071215 0.126367\nvn 0.351 0.7767 0.5231\nv 0.001698 -0.071506 0.126771\nvn 0.351 0.7767 0.5231\nv -0.002825 -0.071407 0.125868\nvn -0.328 0.7624 0.5578\nv -0.001302 -0.071513 0.126909\nvn -0.328 0.7624 0.5578\nv -0.001309 -0.071216 0.126499\nvn -0.328 0.7624 0.5578\nv 0.003814 -0.071325 0.120097\nvn 0.4718 0.7947 -0.382\nv 0.004329 -0.071505 0.120356\nvn 0.4718 0.7947 -0.382\nv 0.002953 -0.071325 0.119032\nvn 0.4718 0.7947 -0.382\nv 0.003584 -0.0714 0.12509\nvn 0.0926 0.9818 0.1658\nv 0.001698 -0.071506 0.126771\nvn 0.0926 0.9818 0.1658\nv 0.003232 -0.071499 0.12587\nvn 0.0926 0.9818 0.1658\nv 0.004635 -0.070681 0.123444\nvn 0.5404 -0.8013 0.2569\nv 0.003597 -0.070936 0.124833\nvn 0.5404 -0.8013 0.2569\nv 0.004211 -0.070986 0.123388\nvn 0.5404 -0.8013 0.2569\nv 0.001509 -0.070869 0.126505\nvn 0.3051 -0.2352 0.9228\nv 0.000856 -0.071251 0.126623\nvn 0.3051 -0.2352 0.9228\nv 0.001657 -0.071215 0.126367\nvn 0.3051 -0.2352 0.9228\nv 0.003597 -0.070936 0.124833\nvn 0.8164 0.4734 0.3307\nv 0.003889 -0.071068 0.124299\nvn 0.8164 0.4734 0.3307\nv 0.004211 -0.070986 0.123388\nvn 0.8164 0.4734 0.3307\nv 0.00448 -0.070679 0.120676\nvn 0.4236 -0.8946 -0.1423\nv 0.004334 -0.070862 0.121395\nvn 0.4236 -0.8946 -0.1423\nv 0.00372 -0.070941 0.12006\nvn 0.4236 -0.8946 -0.1423\nv 0.004145 -0.071227 0.121003\nvn 0.9152 0.1918 -0.3544\nv 0.003814 -0.071325 0.120097\nvn 0.9152 0.1918 -0.3544\nv 0.00372 -0.070941 0.12006\nvn 0.9152 0.1918 -0.3544\nv 0.004099 -0.070682 0.12473\nvn 0.4745 -0.8579 0.1972\nv 0.003597 -0.070936 0.124833\nvn 0.4745 -0.8579 0.1972\nv 0.004635 -0.070681 0.123444\nvn 0.4745 -0.8579 0.1972\nv 4.9e-05 -0.071061 0.126711\nvn 0.1278 0.0838 0.9883\nv 0.000856 -0.071251 0.126623\nvn 0.1264 0.0775 0.9889\nv 0.001509 -0.070869 0.126505\nvn 0.1284 0.0869 0.9879\nv 0.00372 -0.070941 0.12006\nvn 0.9086 -0.0239 -0.417\nv 0.004334 -0.070862 0.121395\nvn 0.9086 -0.0239 -0.417\nv 0.004145 -0.071227 0.121003\nvn 0.9086 -0.0239 -0.417\nv 0.001657 -0.071215 0.126367\nvn 0.1338 0.8107 0.57\nv 0.000374 -0.071502 0.127077\nvn 0.1338 0.8107 0.57\nv 0.001698 -0.071506 0.126771\nvn 0.1338 0.8107 0.57\nv 0.001599 -0.070685 0.126829\nvn 0.0463 -0.8746 0.4826\nv -0.000272 -0.070756 0.126879\nvn 0.0463 -0.8746 0.4826\nv 0.001509 -0.070869 0.126505\nvn 0.0463 -0.8746 0.4826\nv 0.004398 -0.071362 0.123145\nvn 0.5688 0.8132 0.1232\nv 0.004346 -0.071501 0.124306\nvn 0.5688 0.8132 0.1232\nv 0.004756 -0.071502 0.122414\nvn 0.5688 0.8132 0.1232\nv 0.004732 -0.070682 0.122039\nvn 0.5434 -0.8332 -0.1023\nv 0.004334 -0.070862 0.121395\nvn 0.5434 -0.8332 -0.1023\nv 0.00448 -0.070679 0.120676\nvn 0.5434 -0.8332 -0.1023\nv -0.000272 -0.070756 0.126879\nvn 0.1746 -0.3278 0.9285\nv 4.9e-05 -0.071061 0.126711\nvn 0.1746 -0.3278 0.9285\nv 0.001509 -0.070869 0.126505\nvn 0.1746 -0.3278 0.9285\nv 0.004211 -0.070986 0.123388\nvn 0.9017 0.2036 0.3814\nv 0.003584 -0.0714 0.12509\nvn 0.9017 0.2036 0.3814\nv 0.004398 -0.071362 0.123145\nvn 0.9017 0.2036 0.3814\nv 0.001657 -0.071215 0.126367\nvn 0.1572 0.7834 0.6013\nv 0.000856 -0.071251 0.126623\nvn 0.1572 0.7834 0.6013\nv 0.000374 -0.071502 0.127077\nvn 0.1572 0.7834 0.6013\nv 0.003584 -0.0714 0.12509\nvn 0.2576 0.9579 0.1264\nv 0.004346 -0.071501 0.124306\nvn 0.2576 0.9579 0.1264\nv 0.004398 -0.071362 0.123145\nvn 0.2576 0.9579 0.1264\nv 0.003889 -0.071068 0.124299\nvn 0.9415 -0.0935 0.3237\nv 0.003584 -0.0714 0.12509\nvn 0.9415 -0.0935 0.3237\nv 0.004211 -0.070986 0.123388\nvn 0.9415 -0.0935 0.3237\nv 0.004145 -0.071227 0.121003\nvn 0.431 0.8669 -0.2505\nv 0.004329 -0.071505 0.120356\nvn 0.431 0.8669 -0.2505\nv 0.003814 -0.071325 0.120097\nvn 0.431 0.8669 -0.2505\nv 0.000187 -0.070694 0.127098\nvn 0.0424 -0.981 0.1892\nv -0.000272 -0.070756 0.126879\nvn 0.0424 -0.981 0.1892\nv 0.001599 -0.070685 0.126829\nvn 0.0424 -0.981 0.1892\nv -0.002825 -0.071407 0.125868\nvn -0.1776 0.9184 0.3536\nv -0.003192 -0.071505 0.125938\nvn -0.1776 0.9184 0.3536\nv -0.001302 -0.071513 0.126909\nvn -0.1776 0.9184 0.3536\nv 0.004334 -0.070862 0.121395\nvn 0.9407 -0.2738 -0.2001\nv 0.004298 -0.071168 0.121645\nvn 0.9407 -0.2738 -0.2001\nv 0.004145 -0.071227 0.121003\nvn 0.9407 -0.2738 -0.2001\nv 0.002644 -0.070695 0.118385\nvn -0.0357 -0.9977 0.0576\nv 0.003512 -0.070682 0.119138\nvn -0.0357 -0.9977 0.0576\nv 0.001313 -0.070683 0.117757\nvn -0.0357 -0.9977 0.0576\nv -0.000204 -0.071326 0.126763\nvn 0.1256 0.0745 0.9893\nv 0.001313 -0.070683 0.117757\nvn 0.4567 -0.5958 -0.6606\nv 0.002982 -0.070946 0.119148\nvn 0.4567 -0.5958 -0.6606\nv 0.001909 -0.070944 0.118404\nvn 0.4567 -0.5958 -0.6606\nv 0.003512 -0.070682 0.119138\nvn 0.3585 -0.7394 -0.5699\nv 0.002982 -0.070946 0.119148\nvn 0.3585 -0.7394 -0.5699\nv 0.001313 -0.070683 0.117757\nvn 0.3585 -0.7394 -0.5699\nv 0.004145 -0.071227 0.121003\nvn 0.6506 0.747 -0.1365\nv 0.004756 -0.071502 0.122414\nvn 0.6506 0.747 -0.1365\nv 0.004329 -0.071505 0.120356\nvn 0.6506 0.747 -0.1365\nv -0.001313 -0.070683 0.126926\nvn -0.0487 -0.9294 0.3659\nv -0.000272 -0.070756 0.126879\nvn -0.0487 -0.9294 0.3659\nv 0.000187 -0.070694 0.127098\nvn -0.0487 -0.9294 0.3659\nv -0.000204 -0.071326 0.126763\nvn 0.0021 0.8736 0.4866\nv 0.000374 -0.071502 0.127077\nvn 0.0021 0.8736 0.4866\nv 0.000856 -0.071251 0.126623\nvn 0.0021 0.8736 0.4866\nv 0.003597 -0.070936 0.124833\nvn 0.8029 -0.302 0.5139\nv 0.002892 -0.071327 0.125704\nvn 0.8029 -0.302 0.5139\nv 0.003889 -0.071068 0.124299\nvn 0.8029 -0.302 0.5139\nv 0.001909 -0.070944 0.118404\nvn 0.5307 0.0607 -0.8454\nv 0.002953 -0.071325 0.119032\nvn 0.5307 0.0607 -0.8454\nv 0.001763 -0.071318 0.118286\nvn 0.5307 0.0607 -0.8454\nv 0.004099 -0.070682 0.12473\nvn 0.4755 -0.7591 0.4447\nv 0.002694 -0.07095 0.125776\nvn 0.4755 -0.7591 0.4447\nv 0.003597 -0.070936 0.124833\nvn 0.4755 -0.7591 0.4447\nv 0.003584 -0.0714 0.12509\nvn 0.4213 0.8564 0.2986\nv 0.003232 -0.071499 0.12587\nvn 0.4213 0.8564 0.2986\nv 0.004346 -0.071501 0.124306\nvn 0.4213 0.8564 0.2986\nv 0.004732 -0.070682 0.122039\nvn 0.5008 -0.8629 -0.0677\nv 0.004354 -0.070943 0.122564\nvn 0.5008 -0.8629 -0.0677\nv 0.004334 -0.070862 0.121395\nvn 0.5008 -0.8629 -0.0677\nv 0.003889 -0.071068 0.124299\nvn 0.5115 0.7039 0.4928\nv 0.002892 -0.071327 0.125704\nvn 0.5115 0.7039 0.4928\nv 0.003584 -0.0714 0.12509\nvn 0.5115 0.7039 0.4928\nv 0.002953 -0.071325 0.119032\nvn 0.2973 0.8331 -0.4664\nv 0.003377 -0.071504 0.118983\nvn 0.2973 0.8331 -0.4664\nv 0.001763 -0.071318 0.118286\nvn 0.2973 0.8331 -0.4664\nv 0.00312 -0.070676 0.125944\nvn 0.4112 -0.8475 0.3357\nv 0.002694 -0.07095 0.125776\nvn 0.4112 -0.8475 0.3357\nv 0.004099 -0.070682 0.12473\nvn 0.4112 -0.8475 0.3357\nv 0.002694 -0.07095 0.125776\nvn 0.6993 0.2398 0.6733\nv 0.002892 -0.071327 0.125704\nvn 0.6993 0.2398 0.6733\nv 0.003597 -0.070936 0.124833\nvn 0.6993 0.2398 0.6733\nv 0.002982 -0.070946 0.119148\nvn 0.558 0.2029 -0.8046\nv 0.002953 -0.071325 0.119032\nvn 0.558 0.2029 -0.8046\nv 0.001909 -0.070944 0.118404\nvn 0.558 0.2029 -0.8046\nv 4.9e-05 -0.071061 0.126711\nvn -0.184 0.3555 0.9164\nv -0.001309 -0.071216 0.126499\nvn -0.184 0.3555 0.9164\nv -0.000204 -0.071326 0.126763\nvn -0.184 0.3555 0.9164\nv 0.004334 -0.070862 0.121395\nvn 0.9902 -0.1369 -0.0258\nv 0.004354 -0.070943 0.122564\nvn 0.9902 -0.1369 -0.0258\nv 0.004298 -0.071168 0.121645\nvn 0.9902 -0.1369 -0.0258\nv 0.004298 -0.071168 0.121645\nvn 0.8037 0.5435 -0.2423\nv 0.004756 -0.071502 0.122414\nvn 0.8037 0.5435 -0.2423\nv 0.004145 -0.071227 0.121003\nvn 0.8037 0.5435 -0.2423\nv -0.000272 -0.070756 0.126879\nvn -0.0701 -0.5375 0.8403\nv -0.001309 -0.071216 0.126499\nvn -0.0701 -0.5375 0.8403\nv 4.9e-05 -0.071061 0.126711\nvn -0.0701 -0.5375 0.8403\nv 0.004354 -0.070943 0.122564\nvn 0.9978 0.018 -0.0642\nv 0.004398 -0.071362 0.123145\nvn 0.9978 0.018 -0.0642\nv 0.004298 -0.071168 0.121645\nvn 0.9978 0.018 -0.0642\nv 0.001599 -0.070685 0.126829\nvn 0.3069 -0.7974 0.5196\nv 0.002694 -0.07095 0.125776\nvn 0.3069 -0.7974 0.5196\nv 0.00312 -0.070676 0.125944\nvn 0.3069 -0.7974 0.5196\nv -0.000204 -0.071326 0.126763\nvn -0.0628 0.8164 0.5741\nv -0.001302 -0.071513 0.126909\nvn -0.0628 0.8164 0.5741\nv 0.000374 -0.071502 0.127077\nvn -0.0628 0.8164 0.5741\nv 0.004298 -0.071168 0.121645\nvn 0.4976 0.8638 0.0787\nv 0.004398 -0.071362 0.123145\nvn 0.4976 0.8638 0.0787\nv 0.004756 -0.071502 0.122414\nvn 0.4976 0.8638 0.0787\nv -0.001313 -0.070683 0.126926\nvn -0.0533 -0.9528 0.299\nv -0.002137 -0.070845 0.126264\nvn -0.0533 -0.9528 0.299\nv -0.000272 -0.070756 0.126879\nvn -0.0533 -0.9528 0.299\nv 0.004635 -0.070681 0.123444\nvn 0.5787 -0.8145 0.0404\nv 0.004211 -0.070986 0.123388\nvn 0.5787 -0.8145 0.0404\nv 0.004732 -0.070682 0.122039\nvn 0.5787 -0.8145 0.0404\nv 0.004732 -0.070682 0.122039\nvn 0.6292 -0.7742 0.0689\nv 0.004211 -0.070986 0.123388\nvn 0.6292 -0.7742 0.0689\nv 0.004354 -0.070943 0.122564\nvn 0.6292 -0.7742 0.0689\nv -0.000272 -0.070756 0.126879\nvn -0.3081 -0.0895 0.9471\nv -0.002137 -0.070845 0.126264\nvn -0.3081 -0.0895 0.9471\nv -0.001309 -0.071216 0.126499\nvn -0.3081 -0.0895 0.9471\nv 0.001599 -0.070685 0.126829\nvn 0.209 -0.8747 0.4372\nv 0.001509 -0.070869 0.126505\nvn 0.209 -0.8747 0.4372\nv 0.002694 -0.07095 0.125776\nvn 0.209 -0.8747 0.4372\nv -0.001309 -0.071216 0.126499\nvn -0.0598 0.8079 0.5863\nv -0.001302 -0.071513 0.126909\nvn -0.0598 0.8079 0.5863\nv -0.000204 -0.071326 0.126763\nvn -0.0598 0.8079 0.5863\nv 0.003512 -0.070682 0.119138\nvn 0.4164 -0.8466 -0.3316\nv 0.00372 -0.070941 0.12006\nvn 0.4164 -0.8466 -0.3316\nv 0.002982 -0.070946 0.119148\nvn 0.4164 -0.8466 -0.3316\nv 0.001509 -0.070869 0.126505\nvn 0.5144 -0.117 0.8495\nv 0.001657 -0.071215 0.126367\nvn 0.5144 -0.117 0.8495\nv 0.002694 -0.07095 0.125776\nvn 0.5144 -0.117 0.8495\nv 0.004211 -0.070986 0.123388\nvn 0.9217 0.3448 0.1777\nv 0.004398 -0.071362 0.123145\nvn 0.9217 0.3448 0.1777\nv 0.004354 -0.070943 0.122564\nvn 0.9217 0.3448 0.1777\nv 0.002953 -0.071325 0.119032\nvn 0.3529 0.9034 -0.2436\nv 0.004329 -0.071505 0.120356\nvn 0.3529 0.9034 -0.2436\nv 0.003377 -0.071504 0.118983\nvn 0.3529 0.9034 -0.2436\nv 0.002892 -0.071327 0.125704\nvn 0.6646 0.0195 0.7469\nv 0.001698 -0.071506 0.126771\nvn 0.6646 0.0195 0.7469\nv 0.003584 -0.0714 0.12509\nvn 0.6646 0.0195 0.7469\nv 0.002694 -0.07095 0.125776\nvn 0.4772 0.0844 0.8747\nv 0.001657 -0.071215 0.126367\nvn 0.4772 0.0844 0.8747\nv 0.002892 -0.071327 0.125704\nvn 0.4772 0.0844 0.8747\nv -0.002403 -0.071124 0.125963\nvn -0.423 -0.4461 0.7887\nv -0.001309 -0.071216 0.126499\nvn -0.423 -0.4461 0.7887\nv -0.002137 -0.070845 0.126264\nvn -0.423 -0.4461 0.7887\nv -0.002083 -0.068808 0.126696\nvn -0.2165 0.0308 0.9758\nv -0.001313 -0.070683 0.126926\nvn -0.2165 0.0308 0.9758\nv 0.000121 -0.068799 0.127185\nvn -0.2165 0.0308 0.9758\nv 0.004714 -0.068801 0.123238\nvn 0.9991 -0.04 0.0168\nv 0.004635 -0.070681 0.123444\nvn 0.9991 -0.04 0.0168\nv 0.004745 -0.068813 0.12134\nvn 0.9991 -0.04 0.0168\nv 0.004745 -0.068813 0.12134\nvn 0.9975 0.0186 0.0688\nv 0.004635 -0.070681 0.123444\nvn 0.9975 0.0186 0.0688\nv 0.004732 -0.070682 0.122039\nvn 0.9975 0.0186 0.0688\nv -0.002767 -0.07069 0.126211\nvn -0.4397 -0.0706 0.8954\nv -0.001313 -0.070683 0.126926\nvn -0.4397 -0.0706 0.8954\nv -0.002083 -0.068808 0.126696\nvn -0.4397 -0.0706 0.8954\nv 0.004151 -0.068806 0.124776\nvn 0.939 -0.0017 0.3439\nv 0.004635 -0.070681 0.123444\nvn 0.939 -0.0017 0.3439\nv 0.004714 -0.068801 0.123238\nvn 0.939 -0.0017 0.3439\nv 0.004151 -0.068806 0.124776\nvn 0.9225 -0.0348 0.3845\nv 0.004099 -0.070682 0.12473\nvn 0.9225 -0.0348 0.3845\nv 0.004635 -0.070681 0.123444\nvn 0.9225 -0.0348 0.3845\nv 0.004151 -0.068806 0.124776\nvn 0.7777 -0.0367 0.6275\nv 0.00312 -0.070676 0.125944\nvn 0.7777 -0.0367 0.6275\nv 0.004099 -0.070682 0.12473\nvn 0.7777 -0.0367 0.6275\nv 0.002969 -0.068803 0.126114\nvn 0.7496 0.0003 0.6619\nv 0.00312 -0.070676 0.125944\nvn 0.7496 0.0003 0.6619\nv 0.004151 -0.068806 0.124776\nvn 0.7496 0.0003 0.6619\nv 0.002627 -0.068804 0.118289\nvn 0.6554 -0.0327 -0.7546\nv 0.003512 -0.070682 0.119138\nvn 0.6554 -0.0327 -0.7546\nv 0.002644 -0.070695 0.118385\nvn 0.6554 -0.0327 -0.7546\nv 0.003948 -0.068796 0.119617\nvn 0.709 0.0149 -0.705\nv 0.003512 -0.070682 0.119138\nvn 0.709 0.0149 -0.705\nv 0.002627 -0.068804 0.118289\nvn 0.709 0.0149 -0.705\nv 0.001787 -0.068798 0.126815\nvn 0.5096 -0.0446 0.8593\nv 0.001599 -0.070685 0.126829\nvn 0.509 -0.044 0.8596\nv 0.002969 -0.068803 0.126114\nvn 0.5029 -0.0381 0.8635\nv 0.00312 -0.070676 0.125944\nvn 0.5027 -0.038 0.8636\nv 0.003948 -0.068796 0.119617\nvn 0.8447 -0.0605 -0.5318\nv 0.00448 -0.070679 0.120676\nvn 0.8447 -0.0605 -0.5318\nv 0.003512 -0.070682 0.119138\nvn 0.8447 -0.0605 -0.5318\nv 0.004745 -0.068813 0.12134\nvn 0.9074 0.0203 -0.4197\nv 0.00448 -0.070679 0.120676\nvn 0.9074 0.0203 -0.4197\nv 0.003948 -0.068796 0.119617\nvn 0.9074 0.0203 -0.4197\nv 0.000121 -0.068799 0.127185\nvn 0.2165 -0.0146 0.9762\nv 0.001599 -0.070685 0.126829\nvn 0.2165 -0.0146 0.9762\nv 0.001787 -0.068798 0.126815\nvn 0.2165 -0.0146 0.9762\nv 0.000121 -0.068799 0.127185\nvn 0.1871 -0.0386 0.9816\nv 0.000187 -0.070694 0.127098\nvn 0.1871 -0.0386 0.9816\nv 0.001599 -0.070685 0.126829\nvn 0.1871 -0.0386 0.9816\nv 0.000121 -0.068799 0.127185\nvn -0.1139 -0.0495 0.9923\nv -0.001313 -0.070683 0.126926\nvn -0.1139 -0.0495 0.9923\nv 0.000187 -0.070694 0.127098\nvn -0.1139 -0.0495 0.9923\nv 0.004745 -0.068813 0.12134\nvn 0.9805 -0.0749 -0.1817\nv 0.004732 -0.070682 0.122039\nvn 0.9805 -0.0749 -0.1817\nv 0.00448 -0.070679 0.120676\nvn 0.9805 -0.0749 -0.1817\nv 0.004268 -0.068545 0.123574\nvn 0.9207 0.3295 0.209\nv 0.00453 -0.068641 0.12257\nvn 0.9207 0.3295 0.209\nv 0.004414 -0.068318 0.122571\nvn 0.9207 0.3295 0.209\nv -0.002463 -0.06853 0.12604\nvn -0.4751 -0.0233 0.8796\nv -0.001053 -0.068697 0.126797\nvn -0.4751 -0.0233 0.8796\nv -0.001753 -0.068266 0.12643\nvn -0.4751 -0.0233 0.8796\nv 0.001653 -0.067991 0.126906\nvn 0.1406 -0.9495 0.2805\nv 0.001134 -0.068116 0.126743\nvn 0.1406 -0.9495 0.2805\nv 0.002836 -0.067993 0.126308\nvn 0.1406 -0.9495 0.2805\nv -0.002463 -0.06853 0.12604\nvn -0.1393 0.8804 0.4533\nv -0.002083 -0.068808 0.126696\nvn -0.1393 0.8804 0.4533\nv -0.001053 -0.068697 0.126797\nvn -0.1393 0.8804 0.4533\nv 0.003673 -0.068512 0.119845\nvn 0.4577 0.7829 -0.4213\nv 0.003948 -0.068796 0.119617\nvn 0.4577 0.7829 -0.4213\nv 0.002749 -0.068512 0.118842\nvn 0.4577 0.7829 -0.4213\nv 0.004317 -0.067995 0.120073\nvn 0.2479 -0.9659 -0.075\nv 0.004837 -0.06799 0.121727\nvn 0.2479 -0.9659 -0.075\nv 0.004054 -0.068072 0.1202\nvn 0.2479 -0.9659 -0.075\nv 0.004268 -0.068545 0.123574\nvn 0.528 0.8473 0.0567\nv 0.004714 -0.068801 0.123238\nvn 0.528 0.8473 0.0567\nv 0.00453 -0.068641 0.12257\nvn 0.528 0.8473 0.0567\nv 0.004054 -0.068072 0.1202\nvn 0.8247 -0.3621 -0.4345\nv 0.004274 -0.068584 0.121045\nvn 0.8247 -0.3621 -0.4345\nv 0.003673 -0.068512 0.119845\nvn 0.8247 -0.3621 -0.4345\nv 0.001969 -0.068256 0.126329\nvn 0.4134 -0.0012 0.9106\nv 0.000791 -0.068711 0.126863\nvn 0.4134 -0.0012 0.9106\nv 0.002502 -0.068582 0.126087\nvn 0.4134 -0.0012 0.9106\nv 0.001134 -0.068116 0.126743\nvn 0.3021 -0.5324 0.7907\nv 0.000656 -0.068414 0.126725\nvn 0.3021 -0.5324 0.7907\nv 0.001969 -0.068256 0.126329\nvn 0.3021 -0.5324 0.7907\nv 0.004036 -0.067982 0.125061\nvn 0.3918 -0.8973 0.2032\nv 0.003358 -0.068226 0.125292\nvn 0.3918 -0.8973 0.2032\nv 0.004277 -0.068163 0.1238\nvn 0.3918 -0.8973 0.2032\nv 0.002502 -0.068582 0.126087\nvn 0.27 0.6573 0.7036\nv 0.000791 -0.068711 0.126863\nvn 0.27 0.6573 0.7036\nv 0.002969 -0.068803 0.126114\nvn 0.27 0.6573 0.7036\nv 0.004277 -0.068163 0.1238\nvn 0.9026 -0.235 0.3607\nv 0.003743 -0.068604 0.124847\nvn 0.9026 -0.235 0.3607\nv 0.004268 -0.068545 0.123574\nvn 0.9026 -0.235 0.3607\nv 0.004837 -0.06799 0.121727\nvn 0.3367 -0.9336 -0.1223\nv 0.004506 -0.068104 0.121685\nvn 0.3367 -0.9336 -0.1223\nv 0.004054 -0.068072 0.1202\nvn 0.3367 -0.9336 -0.1223\nv 0.001653 -0.067991 0.126906\nvn 0.0566 -0.8716 0.4869\nv 9.4e-05 -0.068103 0.126887\nvn 0.0566 -0.8716 0.4869\nv 0.001134 -0.068116 0.126743\nvn 0.0566 -0.8716 0.4869\nv 0.000791 -0.068711 0.126863\nvn 0.0939 0.984 0.1514\nv 0.001787 -0.068798 0.126815\nvn 0.0939 0.984 0.1514\nv 0.002969 -0.068803 0.126114\nvn 0.0939 0.984 0.1514\nv 0.000656 -0.068414 0.126725\nvn 0.1976 0.4877 0.8504\nv 0.000791 -0.068711 0.126863\nvn 0.1976 0.4877 0.8504\nv 0.001969 -0.068256 0.126329\nvn 0.1976 0.4877 0.8504\nv 0.003116 -0.068059 0.125711\nvn 0.4416 -0.7164 0.5401\nv 0.003358 -0.068226 0.125292\nvn 0.4416 -0.7164 0.5401\nv 0.004036 -0.067982 0.125061\nvn 0.4416 -0.7164 0.5401\nv 0.000408 -0.067995 0.127201\nvn -0.0017 -0.9998 -0.0202\nv -0.000869 -0.067991 0.127119\nvn -0.0017 -0.9998 -0.0202\nv 0.001653 -0.067991 0.126906\nvn -0.0017 -0.9998 -0.0202\nv -0.000869 -0.067991 0.127119\nvn 0.0502 -0.8017 0.5956\nv 9.4e-05 -0.068103 0.126887\nvn 0.0502 -0.8017 0.5956\nv 0.001653 -0.067991 0.126906\nvn 0.0502 -0.8017 0.5956\nv 0.003743 -0.068604 0.124847\nvn 0.4639 0.8552 0.231\nv 0.004151 -0.068806 0.124776\nvn 0.4639 0.8552 0.231\nv 0.004268 -0.068545 0.123574\nvn 0.4639 0.8552 0.231\nv 0.004054 -0.068072 0.1202\nvn 0.9756 0.0888 -0.2009\nv 0.004374 -0.068416 0.121602\nvn 0.9756 0.0888 -0.2009\nv 0.004274 -0.068584 0.121045\nvn 0.9756 0.0888 -0.2009\nv 0.004506 -0.068104 0.121685\nvn 0.9078 -0.3094 -0.2832\nv 0.004374 -0.068416 0.121602\nvn 0.9078 -0.3094 -0.2832\nv 0.004054 -0.068072 0.1202\nvn 0.9078 -0.3094 -0.2832\nv 0.004268 -0.068545 0.123574\nvn 0.6059 0.7631 0.2247\nv 0.004151 -0.068806 0.124776\nvn 0.6059 0.7631 0.2247\nv 0.004714 -0.068801 0.123238\nvn 0.6059 0.7631 0.2247\nv 0.003673 -0.068512 0.119845\nvn 0.5874 0.7702 -0.2484\nv 0.004274 -0.068584 0.121045\nvn 0.5874 0.7702 -0.2484\nv 0.003948 -0.068796 0.119617\nvn 0.5874 0.7702 -0.2484\nv 9.4e-05 -0.068103 0.126887\nvn 0.1173 -0.4503 0.8851\nv -0.000484 -0.068505 0.126759\nvn 0.1173 -0.4503 0.8851\nv 0.001134 -0.068116 0.126743\nvn 0.1173 -0.4503 0.8851\nv 0.001134 -0.068116 0.126743\nvn 0.04 -0.1237 0.9915\nv -0.000484 -0.068505 0.126759\nvn 0.04 -0.1237 0.9915\nv 0.000656 -0.068414 0.126725\nvn 0.04 -0.1237 0.9915\nv 0.002836 -0.067993 0.126308\nvn 0.2307 -0.9492 0.214\nv 0.003116 -0.068059 0.125711\nvn 0.2307 -0.9492 0.214\nv 0.004036 -0.067982 0.125061\nvn 0.2307 -0.9492 0.214\nv 0.001787 -0.068798 0.126815\nvn 0.0998 0.8874 0.4501\nv 0.000791 -0.068711 0.126863\nvn 0.0998 0.8874 0.4501\nv 0.000121 -0.068799 0.127185\nvn 0.0998 0.8874 0.4501\nv 0.003358 -0.068226 0.125292\nvn 0.8241 0.2312 0.5172\nv 0.003743 -0.068604 0.124847\nvn 0.8241 0.2312 0.5172\nv 0.004277 -0.068163 0.1238\nvn 0.8241 0.2312 0.5172\nv 0.003253 -0.067983 0.118711\nvn 0.2161 -0.9014 -0.3752\nv 0.002908 -0.068112 0.118823\nvn 0.2161 -0.9014 -0.3752\nv 0.001734 -0.068111 0.118146\nvn 0.2161 -0.9014 -0.3752\nv 0.004274 -0.068584 0.121045\nvn 0.5435 0.8034 -0.2433\nv 0.004745 -0.068813 0.12134\nvn 0.5435 0.8034 -0.2433\nv 0.003948 -0.068796 0.119617\nvn 0.5435 0.8034 -0.2433\nv 0.002908 -0.068112 0.118823\nvn 0.4812 -0.2321 -0.8453\nv 0.002749 -0.068512 0.118842\nvn 0.4812 -0.2321 -0.8453\nv 0.001691 -0.068518 0.118241\nvn 0.4812 -0.2321 -0.8453\nv -0.000869 -0.067991 0.127119\nvn -0.0371 -0.9513 0.3059\nv -0.001161 -0.068098 0.126752\nvn -0.0371 -0.9513 0.3059\nv 9.4e-05 -0.068103 0.126887\nvn -0.0371 -0.9513 0.3059\nv 0.004745 -0.06799 0.123462\nvn 0.3235 -0.9461 0.0171\nv 0.004506 -0.068104 0.121685\nvn 0.3235 -0.9461 0.0171\nv 0.004837 -0.06799 0.121727\nvn 0.3235 -0.9461 0.0171\nv 0.000656 -0.068414 0.126725\nvn -0.0059 0.4212 0.907\nv -0.000484 -0.068505 0.126759\nvn -0.0059 0.4212 0.907\nv 0.000791 -0.068711 0.126863\nvn -0.0059 0.4212 0.907\nv 0.002749 -0.068512 0.118842\nvn 0.2763 0.8232 -0.496\nv 0.002627 -0.068804 0.118289\nvn 0.2763 0.8232 -0.496\nv 0.001691 -0.068518 0.118241\nvn 0.2763 0.8232 -0.496\nv -0.000484 -0.068505 0.126759\nvn -0.0323 0.2841 0.9582\nv -0.001053 -0.068697 0.126797\nvn -0.0323 0.2841 0.9582\nv 0.000791 -0.068711 0.126863\nvn -0.0323 0.2841 0.9582\nv -0.001161 -0.068098 0.126752\nvn -0.1064 -0.1589 0.9815\nv -0.000484 -0.068505 0.126759\nvn -0.1064 -0.1589 0.9815\nv 9.4e-05 -0.068103 0.126887\nvn -0.1064 -0.1589 0.9815\nv -0.001053 -0.068697 0.126797\nvn -0.002 0.9657 0.2598\nv 0.000121 -0.068799 0.127185\nvn -0.002 0.9657 0.2598\nv 0.000791 -0.068711 0.126863\nvn -0.002 0.9657 0.2598\nv 0.004374 -0.068416 0.121602\nvn 0.9855 -0.032 -0.1664\nv 0.00453 -0.068641 0.12257\nvn 0.9855 -0.032 -0.1664\nv 0.004274 -0.068584 0.121045\nvn 0.9855 -0.032 -0.1664\nv 0.003358 -0.068226 0.125292\nvn 0.7009 -0.114 0.7041\nv 0.002502 -0.068582 0.126087\nvn 0.7009 -0.114 0.7041\nv 0.003743 -0.068604 0.124847\nvn 0.7009 -0.114 0.7041\nv 0.004745 -0.06799 0.123462\nvn 0.3541 -0.9351 0.0123\nv 0.004277 -0.068163 0.1238\nvn 0.3541 -0.9351 0.0123\nv 0.004506 -0.068104 0.121685\nvn 0.3541 -0.9351 0.0123\nv 0.004506 -0.068104 0.121685\nvn 0.9205 -0.3908 0.0016\nv 0.004414 -0.068318 0.122571\nvn 0.9205 -0.3908 0.0016\nv 0.004374 -0.068416 0.121602\nvn 0.9205 -0.3908 0.0016\nv 0.00453 -0.068641 0.12257\nvn 0.4593 0.8872 -0.0437\nv 0.004745 -0.068813 0.12134\nvn 0.4593 0.8872 -0.0437\nv 0.004274 -0.068584 0.121045\nvn 0.4593 0.8872 -0.0437\nv 0.004277 -0.068163 0.1238\nvn 0.9939 0.0199 0.1085\nv 0.004414 -0.068318 0.122571\nvn 0.9939 0.0199 0.1085\nv 0.004506 -0.068104 0.121685\nvn 0.9939 0.0199 0.1085\nv 0.003743 -0.068604 0.124847\nvn 0.4617 0.7886 0.406\nv 0.002969 -0.068803 0.126114\nvn 0.4617 0.7886 0.406\nv 0.004151 -0.068806 0.124776\nvn 0.4617 0.7886 0.406\nv 0.002502 -0.068582 0.126087\nvn 0.3802 0.8495 0.3658\nv 0.002969 -0.068803 0.126114\nvn 0.3802 0.8495 0.3658\nv 0.003743 -0.068604 0.124847\nvn 0.3802 0.8495 0.3658\nv 0.004414 -0.068318 0.122571\nvn 0.9388 0.3367 -0.0733\nv 0.00453 -0.068641 0.12257\nvn 0.9388 0.3367 -0.0733\nv 0.004374 -0.068416 0.121602\nvn 0.9388 0.3367 -0.0733\nv -0.002351 -0.067989 0.126625\nvn -0.1235 -0.9224 0.366\nv -0.001161 -0.068098 0.126752\nvn -0.1235 -0.9224 0.366\nv -0.000869 -0.067991 0.127119\nvn -0.1235 -0.9224 0.366\nv 0.002836 -0.067993 0.126308\nvn 0.1126 -0.9803 0.1622\nv 0.001134 -0.068116 0.126743\nvn 0.1126 -0.9803 0.1622\nv 0.003116 -0.068059 0.125711\nvn 0.1126 -0.9803 0.1622\nv 0.00453 -0.068641 0.12257\nvn 0.643 0.7659 0.0055\nv 0.004714 -0.068801 0.123238\nvn 0.643 0.7659 0.0055\nv 0.004745 -0.068813 0.12134\nvn 0.643 0.7659 0.0055\nv 0.003116 -0.068059 0.125711\nvn 0.414 -0.7381 0.5328\nv 0.001969 -0.068256 0.126329\nvn 0.414 -0.7381 0.5328\nv 0.003358 -0.068226 0.125292\nvn 0.414 -0.7381 0.5328\nv 0.002749 -0.068512 0.118842\nvn 0.4876 0.723 -0.4895\nv 0.003948 -0.068796 0.119617\nvn 0.4876 0.723 -0.4895\nv 0.002627 -0.068804 0.118289\nvn 0.4876 0.723 -0.4895\nv 0.001134 -0.068116 0.126743\nvn 0.4559 0.1142 0.8827\nv 0.001969 -0.068256 0.126329\nvn 0.4559 0.1142 0.8827\nv 0.003116 -0.068059 0.125711\nvn 0.4559 0.1142 0.8827\nv 0.002908 -0.068112 0.118823\nvn 0.6992 -0.3092 -0.6445\nv 0.003673 -0.068512 0.119845\nvn 0.6992 -0.3092 -0.6445\nv 0.002749 -0.068512 0.118842\nvn 0.6992 -0.3092 -0.6445\nv -0.001161 -0.068098 0.126752\nvn -0.304 -0.4908 0.8165\nv -0.001753 -0.068266 0.12643\nvn -0.304 -0.4908 0.8165\nv -0.000484 -0.068505 0.126759\nvn -0.304 -0.4908 0.8165\nv 0.000121 -0.068799 0.127185\nvn -0.144 0.7585 0.6355\nv -0.001053 -0.068697 0.126797\nvn -0.144 0.7585 0.6355\nv -0.002083 -0.068808 0.126696\nvn -0.144 0.7585 0.6355\nv 0.003253 -0.067983 0.118711\nvn 0.283 -0.9362 -0.2085\nv 0.004054 -0.068072 0.1202\nvn 0.283 -0.9362 -0.2085\nv 0.002908 -0.068112 0.118823\nvn 0.283 -0.9362 -0.2085\nv 0.001969 -0.068256 0.126329\nvn 0.5561 0.3474 0.755\nv 0.002502 -0.068582 0.126087\nvn 0.5561 0.3474 0.755\nv 0.003358 -0.068226 0.125292\nvn 0.5561 0.3474 0.755\nv 0.004745 -0.06799 0.123462\nvn 0.4694 -0.8571 0.2122\nv 0.004036 -0.067982 0.125061\nvn 0.4694 -0.8571 0.2122\nv 0.004277 -0.068163 0.1238\nvn 0.4694 -0.8571 0.2122\nv 0.004277 -0.068163 0.1238\nvn 0.9878 -0.0959 0.1224\nv 0.004268 -0.068545 0.123574\nvn 0.9878 -0.0959 0.1224\nv 0.004414 -0.068318 0.122571\nvn 0.9878 -0.0959 0.1224\nv -0.001753 -0.068266 0.12643\nvn -0.1204 0.5228 0.8439\nv -0.001053 -0.068697 0.126797\nvn -0.1204 0.5228 0.8439\nv -0.000484 -0.068505 0.126759\nvn -0.1204 0.5228 0.8439\nv -0.003145 -0.068021 0.125864\nvn -0.1063 -0.9826 0.1522\nv -0.001161 -0.068098 0.126752\nvn -0.1063 -0.9826 0.1522\nv -0.002351 -0.067989 0.126625\nvn -0.1063 -0.9826 0.1522\nv 0.004317 -0.067995 0.120073\nvn 0.2029 -0.9648 -0.1671\nv 0.004054 -0.068072 0.1202\nvn 0.2029 -0.9648 -0.1671\nv 0.003253 -0.067983 0.118711\nvn 0.2029 -0.9648 -0.1671\nv -0.003145 -0.068021 0.125864\nvn -0.4029 -0.2595 0.8777\nv -0.001753 -0.068266 0.12643\nvn -0.4029 -0.2595 0.8777\nv -0.001161 -0.068098 0.126752\nvn -0.4029 -0.2595 0.8777\nv 0.004054 -0.068072 0.1202\nvn 0.7623 -0.1505 -0.6295\nv 0.003673 -0.068512 0.119845\nvn 0.7623 -0.1505 -0.6295\nv 0.002908 -0.068112 0.118823\nvn 0.7623 -0.1505 -0.6295\nv 0.004568 -0.066102 0.124461\nvn 0.9633 -0.0492 0.2639\nv 0.004745 -0.06799 0.123462\nvn 0.9633 -0.0492 0.2639\nv 0.005012 -0.066097 0.122841\nvn 0.9633 -0.0492 0.2639\nv 0.004568 -0.066102 0.124461\nvn 0.9063 -0.128 0.4028\nv 0.004036 -0.067982 0.125061\nvn 0.9063 -0.128 0.4028\nv 0.004745 -0.06799 0.123462\nvn 0.9063 -0.128 0.4028\nv 0.003561 -0.066101 0.125902\nvn 0.8188 -0.0492 0.572\nv 0.004036 -0.067982 0.125061\nvn 0.8188 -0.0492 0.572\nv 0.004568 -0.066102 0.124461\nvn 0.8188 -0.0492 0.572\nv 0.003561 -0.066101 0.125902\nvn 0.7154 -0.1268 0.6871\nv 0.002836 -0.067993 0.126308\nvn 0.7154 -0.1268 0.6871\nv 0.004036 -0.067982 0.125061\nvn 0.7154 -0.1268 0.6871\nv 0.00361 -0.066107 0.118832\nvn 0.5674 -0.0552 -0.8216\nv 0.003253 -0.067983 0.118711\nvn 0.5674 -0.0552 -0.8216\nv 0.001849 -0.066099 0.117615\nvn 0.5674 -0.0552 -0.8216\nv 0.001849 -0.066099 0.117615\nvn 0.5333 -0.0918 -0.8409\nv 0.003253 -0.067983 0.118711\nvn 0.5333 -0.0918 -0.8409\nv 0.001947 -0.067988 0.117883\nvn 0.5333 -0.0918 -0.8409\nv 0.002322 -0.066089 0.126794\nvn 0.5831 -0.0495 0.8109\nv 0.002836 -0.067993 0.126308\nvn 0.5831 -0.0495 0.8109\nv 0.003561 -0.066101 0.125902\nvn 0.5831 -0.0495 0.8109\nv 0.001171 -0.066098 0.127255\nvn 0.3713 -0.076 0.9254\nv 0.001653 -0.067991 0.126906\nvn 0.3713 -0.076 0.9254\nv 0.002322 -0.066089 0.126794\nvn 0.3713 -0.076 0.9254\nv 0.002322 -0.066089 0.126794\nvn 0.4486 -0.1054 0.8875\nv 0.001653 -0.067991 0.126906\nvn 0.4486 -0.1054 0.8875\nv 0.002836 -0.067993 0.126308\nvn 0.4486 -0.1054 0.8875\nv 0.00361 -0.066107 0.118832\nvn 0.7827 -0.1097 -0.6127\nv 0.004317 -0.067995 0.120073\nvn 0.7827 -0.1097 -0.6127\nv 0.003253 -0.067983 0.118711\nvn 0.7827 -0.1097 -0.6127\nv 0.004437 -0.066094 0.120035\nvn 0.8227 -0.0634 -0.565\nv 0.004317 -0.067995 0.120073\nvn 0.8227 -0.0634 -0.565\nv 0.00361 -0.066107 0.118832\nvn 0.8227 -0.0634 -0.565\nv 0.001171 -0.066098 0.127255\nvn 0.2291 -0.1197 0.966\nv 0.000408 -0.067995 0.127201\nvn 0.2291 -0.1197 0.966\nv 0.001653 -0.067991 0.126906\nvn 0.2291 -0.1197 0.966\nv 0.00491 -0.06611 0.121252\nvn 0.9298 -0.0661 -0.3621\nv 0.004317 -0.067995 0.120073\nvn 0.9298 -0.0661 -0.3621\nv 0.004437 -0.066094 0.120035\nvn 0.9298 -0.0661 -0.3621\nv -0.000568 -0.066096 0.127359\nvn 0.0597 -0.0524 0.9968\nv 0.000408 -0.067995 0.127201\nvn 0.0597 -0.0524 0.9968\nv 0.001171 -0.066098 0.127255\nvn 0.0597 -0.0524 0.9968\nv 0.00491 -0.06611 0.121252\nvn 0.948 -0.112 -0.2978\nv 0.004837 -0.06799 0.121727\nvn 0.948 -0.112 -0.2978\nv 0.004317 -0.067995 0.120073\nvn 0.948 -0.112 -0.2978\nv -0.000568 -0.066096 0.127359\nvn -0.0638 -0.1154 0.9913\nv -0.000869 -0.067991 0.127119\nvn -0.0638 -0.1154 0.9913\nv 0.000408 -0.067995 0.127201\nvn -0.0638 -0.1154 0.9913\nv 0.005012 -0.066097 0.122841\nvn 0.9965 -0.0547 -0.0636\nv 0.004837 -0.06799 0.121727\nvn 0.9965 -0.0547 -0.0636\nv 0.00491 -0.06611 0.121252\nvn 0.9965 -0.0547 -0.0636\nv -0.002581 -0.066106 0.126691\nvn -0.3141 -0.0713 0.9467\nv -0.002351 -0.067989 0.126625\nvn -0.3149 -0.0705 0.9465\nv -0.000568 -0.066096 0.127359\nvn -0.3155 -0.0696 0.9464\nv -0.000869 -0.067991 0.127119\nvn -0.3158 -0.0696 0.9463\nv 0.005012 -0.066097 0.122841\nvn 0.9911 -0.1225 0.0524\nv 0.004745 -0.06799 0.123462\nvn 0.9911 -0.1225 0.0524\nv 0.004837 -0.06799 0.121727\nvn 0.9911 -0.1225 0.0524\nv -0.001949 -0.06555 0.126616\nvn -0.3651 -0.107 0.9248\nv -0.001289 -0.065795 0.126848\nvn -0.3651 -0.107 0.9248\nv -0.000801 -0.065381 0.127089\nvn -0.3651 -0.107 0.9248\nv 0.003137 -0.065801 0.12581\nvn 0.3761 0.7128 0.592\nv 0.002601 -0.065931 0.126306\nvn 0.3761 0.7128 0.592\nv 0.003561 -0.066101 0.125902\nvn 0.3761 0.7128 0.592\nv 0.004844 -0.065279 0.120599\nvn 0.1541 -0.9853 -0.0733\nv 0.003844 -0.065337 0.119282\nvn 0.1541 -0.9853 -0.0733\nv 0.004152 -0.065291 0.119305\nvn 0.1541 -0.9853 -0.0733\nv 0.001994 -0.065568 0.126612\nvn 0.5829 0.367 0.725\nv 0.002601 -0.065931 0.126306\nvn 0.5829 0.367 0.725\nv 0.003137 -0.065801 0.12581\nvn 0.5829 0.367 0.725\nv 0.002601 -0.065931 0.126306\nvn 0.3399 0.82 0.4606\nv 0.002322 -0.066089 0.126794\nvn 0.3399 0.82 0.4606\nv 0.003561 -0.066101 0.125902\nvn 0.3399 0.82 0.4606\nv 0.002399 -0.065296 0.126898\nvn -0.0112 -0.9995 0.0282\nv 0.001215 -0.065272 0.1273\nvn -0.0112 -0.9995 0.0282\nv 0.002902 -0.065316 0.126419\nvn -0.0112 -0.9995 0.0282\nv 0.003844 -0.065337 0.119282\nvn 0.5307 -0.763 -0.3692\nv 0.004195 -0.065549 0.120223\nvn 0.5307 -0.763 -0.3692\nv 0.003432 -0.065543 0.119115\nvn 0.5307 -0.763 -0.3692\nv 0.003545 -0.065881 0.119215\nvn 0.5205 0.7715 -0.366\nv 0.004437 -0.066094 0.120035\nvn 0.5205 0.7715 -0.366\nv 0.00361 -0.066107 0.118832\nvn 0.5205 0.7715 -0.366\nv -0.001289 -0.065795 0.126848\nvn -0.1716 0.2266 0.9587\nv -0.002581 -0.066106 0.126691\nvn -0.1716 0.2266 0.9587\nv -5.9e-05 -0.065943 0.127104\nvn -0.1716 0.2266 0.9587\nv 0.001994 -0.065568 0.126612\nvn 0.4414 -0.0153 0.8972\nv 0.001538 -0.065899 0.12683\nvn 0.4414 -0.0153 0.8972\nv 0.002601 -0.065931 0.126306\nvn 0.4414 -0.0153 0.8972\nv -5.9e-05 -0.065943 0.127104\nvn -0.1147 0.9366 0.331\nv -0.002581 -0.066106 0.126691\nvn -0.1147 0.9366 0.331\nv -0.000568 -0.066096 0.127359\nvn -0.1147 0.9366 0.331\nv 0.004844 -0.065279 0.120599\nvn 0.344 -0.9127 -0.2207\nv 0.004576 -0.065531 0.121226\nvn 0.344 -0.9127 -0.2207\nv 0.003844 -0.065337 0.119282\nvn 0.344 -0.9127 -0.2207\nv 0.004432 -0.065395 0.12426\nvn 0.9316 -0.3003 0.2045\nv 0.004352 -0.065795 0.124037\nvn 0.9316 -0.3003 0.2045\nv 0.004605 -0.065547 0.123253\nvn 0.9316 -0.3003 0.2045\nv 0.003432 -0.065543 0.119115\nvn 0.8248 0.1111 -0.5545\nv 0.004233 -0.065881 0.120239\nvn 0.8248 0.1111 -0.5545\nv 0.003545 -0.065881 0.119215\nvn 0.8248 0.1111 -0.5545\nv 0.004195 -0.065549 0.120223\nvn 0.8221 0.0691 -0.5652\nv 0.004233 -0.065881 0.120239\nvn 0.8221 0.0691 -0.5652\nv 0.003432 -0.065543 0.119115\nvn 0.8221 0.0691 -0.5652\nv -0.0028 -0.06588 0.126162\nvn -0.3943 -0.2154 0.8934\nv -0.001289 -0.065795 0.126848\nvn -0.3943 -0.2154 0.8934\nv -0.001949 -0.06555 0.126616\nvn -0.3943 -0.2154 0.8934\nv 0.004576 -0.065531 0.121226\nvn 0.9345 -0.0289 -0.3549\nv 0.004195 -0.065549 0.120223\nvn 0.9345 -0.0296 -0.3548\nv 0.003844 -0.065337 0.119282\nvn 0.9345 -0.0283 -0.3549\nv -0.0028 -0.06588 0.126162\nvn -0.2602 0.8441 0.4688\nv -0.002581 -0.066106 0.126691\nvn -0.2602 0.8441 0.4688\nv -0.001289 -0.065795 0.126848\nvn -0.2602 0.8441 0.4688\nv 0.004605 -0.065547 0.123253\nvn 0.9547 -0.1384 0.2633\nv 0.004352 -0.065795 0.124037\nvn 0.9547 -0.1384 0.2633\nv 0.004673 -0.065836 0.122853\nvn 0.9547 -0.1384 0.2633\nv 0.003545 -0.065881 0.119215\nvn 0.4989 0.7991 -0.3354\nv 0.004233 -0.065881 0.120239\nvn 0.4989 0.7991 -0.3354\nv 0.004437 -0.066094 0.120035\nvn 0.4989 0.7991 -0.3354\nv 0.004673 -0.065836 0.122853\nvn 0.6052 0.7782 0.1678\nv 0.004568 -0.066102 0.124461\nvn 0.6052 0.7782 0.1678\nv 0.005012 -0.066097 0.122841\nvn 0.6052 0.7782 0.1678\nv 0.001215 -0.065272 0.1273\nvn 0.3282 -0.6743 0.6615\nv 0.001994 -0.065568 0.126612\nvn 0.3282 -0.6743 0.6615\nv 0.002902 -0.065316 0.126419\nvn 0.3282 -0.6743 0.6615\nv 0.003833 -0.065287 0.125785\nvn 0.2745 -0.9456 0.1748\nv 0.004432 -0.065395 0.12426\nvn 0.2745 -0.9456 0.1748\nv 0.004744 -0.065292 0.124327\nvn 0.2745 -0.9456 0.1748\nv 0.004352 -0.065795 0.124037\nvn 0.6871 0.7083 0.1616\nv 0.004568 -0.066102 0.124461\nvn 0.6871 0.7083 0.1616\nv 0.004673 -0.065836 0.122853\nvn 0.6871 0.7083 0.1616\nv 0.001538 -0.065899 0.12683\nvn 0.2316 0.8787 0.4175\nv 0.002322 -0.066089 0.126794\nvn 0.2316 0.8787 0.4175\nv 0.002601 -0.065931 0.126306\nvn 0.2316 0.8787 0.4175\nv 0.001215 -0.065272 0.1273\nvn 0.1175 -0.8569 0.502\nv 0.000306 -0.065547 0.127043\nvn 0.1175 -0.8569 0.502\nv 0.001994 -0.065568 0.126612\nvn 0.1175 -0.8569 0.502\nv 0.004844 -0.065279 0.120599\nvn 0.6248 -0.7793 -0.0471\nv 0.00481 -0.065388 0.121951\nvn 0.6248 -0.7793 -0.0471\nv 0.004576 -0.065531 0.121226\nvn 0.6248 -0.7793 -0.0471\nv 0.004432 -0.065395 0.12426\nvn 0.8207 -0.3941 0.4136\nv 0.003902 -0.065801 0.124925\nvn 0.8207 -0.3941 0.4136\nv 0.004352 -0.065795 0.124037\nvn 0.8207 -0.3941 0.4136\nv 0.000306 -0.065547 0.127043\nvn 0.241 0.2817 0.9288\nv 0.001538 -0.065899 0.12683\nvn 0.241 0.2817 0.9288\nv 0.001994 -0.065568 0.126612\nvn 0.241 0.2817 0.9288\nv 0.004233 -0.065881 0.120239\nvn 0.5913 0.7761 -0.2193\nv 0.00491 -0.06611 0.121252\nvn 0.5913 0.7761 -0.2193\nv 0.004437 -0.066094 0.120035\nvn 0.5913 0.7761 -0.2193\nv 0.003833 -0.065287 0.125785\nvn 0.1066 -0.988 0.1118\nv 0.002902 -0.065316 0.126419\nvn 0.1066 -0.988 0.1118\nv 0.004432 -0.065395 0.12426\nvn 0.1066 -0.988 0.1118\nv 0.004195 -0.065549 0.120223\nvn 0.9418 0.0942 -0.3226\nv 0.004633 -0.065881 0.121406\nvn 0.9418 0.0942 -0.3226\nv 0.004233 -0.065881 0.120239\nvn 0.9418 0.0942 -0.3226\nv 0.004633 -0.065881 0.121406\nvn 0.9344 -0.03 -0.3549\nv 0.003902 -0.065801 0.124925\nvn 0.5519 0.7837 0.2851\nv 0.004568 -0.066102 0.124461\nvn 0.5519 0.7837 0.2851\nv 0.004352 -0.065795 0.124037\nvn 0.5519 0.7837 0.2851\nv 0.002902 -0.065316 0.126419\nvn 0.7648 -0.3286 0.5542\nv 0.003427 -0.065547 0.125557\nvn 0.7648 -0.3286 0.5542\nv 0.004432 -0.065395 0.12426\nvn 0.7648 -0.3286 0.5542\nv 0.005159 -0.065288 0.122339\nvn 0.3416 -0.9374 -0.0671\nv 0.00481 -0.065388 0.121951\nvn 0.3416 -0.9374 -0.0671\nv 0.004844 -0.065279 0.120599\nvn 0.3416 -0.9374 -0.0671\nv 0.001538 -0.065899 0.12683\nvn 0.2187 0.7982 0.5613\nv 0.001171 -0.066098 0.127255\nvn 0.2187 0.7982 0.5613\nv 0.002322 -0.066089 0.126794\nvn 0.2187 0.7982 0.5613\nv 0.004233 -0.065881 0.120239\nvn 0.5603 0.8057 -0.1919\nv 0.004633 -0.065881 0.121406\nvn 0.5603 0.8057 -0.1919\nv 0.00491 -0.06611 0.121252\nvn 0.5603 0.8057 -0.1919\nv 0.000306 -0.065547 0.127043\nvn 0.1691 -0.0043 0.9856\nv -5.9e-05 -0.065943 0.127104\nvn 0.1691 -0.0043 0.9856\nv 0.001538 -0.065899 0.12683\nvn 0.1691 -0.0043 0.9856\nv 0.004432 -0.065395 0.12426\nvn 0.7919 -0.0357 0.6096\nv 0.003427 -0.065547 0.125557\nvn 0.7919 -0.0357 0.6096\nv 0.003902 -0.065801 0.124925\nvn 0.7919 -0.0357 0.6096\nv 0.003902 -0.065801 0.124925\nvn 0.5994 0.6823 0.4186\nv 0.003561 -0.066101 0.125902\nvn 0.5994 0.6823 0.4186\nv 0.004568 -0.066102 0.124461\nvn 0.5994 0.6823 0.4186\nv -5.9e-05 -0.065943 0.127104\nvn 0.0875 0.7687 0.6336\nv -0.000568 -0.066096 0.127359\nvn 0.0875 0.7687 0.6336\nv 0.001538 -0.065899 0.12683\nvn 0.0875 0.7687 0.6336\nv -0.00036 -0.065291 0.12747\nvn 0.0329 -0.9803 0.195\nv -0.000801 -0.065381 0.127089\nvn 0.0329 -0.9803 0.195\nv 0.001215 -0.065272 0.1273\nvn 0.0329 -0.9803 0.195\nv -0.000568 -0.066096 0.127359\nvn 0.0275 0.8965 0.4422\nv 0.001171 -0.066098 0.127255\nvn 0.0275 0.8965 0.4422\nv 0.001538 -0.065899 0.12683\nvn 0.0275 0.8965 0.4422\nv -0.000801 -0.065381 0.127089\nvn -0.0534 -0.5821 0.8114\nv 0.000306 -0.065547 0.127043\nvn -0.0534 -0.5821 0.8114\nv 0.001215 -0.065272 0.1273\nvn -0.0534 -0.5821 0.8114\nv 0.002657 -0.06538 0.118318\nvn 0.6207 -0.3857 -0.6826\nv 0.003432 -0.065543 0.119115\nvn 0.6207 -0.3857 -0.6826\nv 0.002565 -0.065747 0.118442\nvn 0.6207 -0.3857 -0.6826\nv 0.003097 -0.065297 0.118245\nvn -0.0144 -0.9997 0.0199\nv 0.004152 -0.065291 0.119305\nvn -0.0144 -0.9997 0.0199\nv 0.00194 -0.065294 0.11757\nvn -0.0144 -0.9997 0.0199\nv 0.003427 -0.065547 0.125557\nvn 0.74 -0.2074 0.6398\nv 0.003137 -0.065801 0.12581\nvn 0.74 -0.2074 0.6398\nv 0.003902 -0.065801 0.124925\nvn 0.74 -0.2074 0.6398\nv 0.004152 -0.065291 0.119305\nvn 0.1609 -0.9658 -0.2035\nv 0.003844 -0.065337 0.119282\nvn 0.1609 -0.9658 -0.2035\nv 0.00194 -0.065294 0.11757\nvn 0.1609 -0.9658 -0.2035\nv 0.00194 -0.065294 0.11757\nvn 0.4362 -0.7455 -0.5039\nv 0.003844 -0.065337 0.119282\nvn 0.4362 -0.7455 -0.5039\nv 0.002657 -0.06538 0.118318\nvn 0.4362 -0.7455 -0.5039\nv 0.002399 -0.065296 0.126898\nvn 0.1935 -0.951 0.2411\nv 0.002902 -0.065316 0.126419\nvn 0.1935 -0.951 0.2411\nv 0.003833 -0.065287 0.125785\nvn 0.1935 -0.951 0.2411\nv 0.00481 -0.065388 0.121951\nvn 0.8165 -0.5568 -0.1528\nv 0.004673 -0.065836 0.122853\nvn 0.8165 -0.5568 -0.1528\nv 0.004576 -0.065531 0.121226\nvn 0.8165 -0.5568 -0.1528\nv 0.003844 -0.065337 0.119282\nvn 0.5357 -0.5568 -0.6348\nv 0.003432 -0.065543 0.119115\nvn 0.5357 -0.5568 -0.6348\nv 0.002657 -0.06538 0.118318\nvn 0.5357 -0.5568 -0.6348\nv 0.004633 -0.065881 0.121406\nvn 0.6218 0.7818 -0.0464\nv 0.005012 -0.066097 0.122841\nvn 0.6218 0.7818 -0.0464\nv 0.00491 -0.06611 0.121252\nvn 0.6218 0.7818 -0.0464\nv 0.002565 -0.065747 0.118442\nvn 0.4415 0.4259 -0.7897\nv 0.00361 -0.066107 0.118832\nvn 0.4415 0.4259 -0.7897\nv 0.002016 -0.065925 0.118039\nvn 0.4415 0.4259 -0.7897\nv -0.000801 -0.065381 0.127089\nvn -0.034 -0.4718 0.8811\nv -0.001289 -0.065795 0.126848\nvn -0.034 -0.4718 0.8811\nv 0.000306 -0.065547 0.127043\nvn -0.034 -0.4718 0.8811\nv 0.004576 -0.065531 0.121226\nvn 0.989 0.1449 -0.0315\nv 0.004673 -0.065836 0.122853\nvn 0.989 0.1449 -0.0315\nv 0.004633 -0.065881 0.121406\nvn 0.989 0.1449 -0.0315\nv 0.002016 -0.065925 0.118039\nvn 0.325 0.8237 -0.4647\nv 0.00361 -0.066107 0.118832\nvn 0.325 0.8237 -0.4647\nv 0.001849 -0.066099 0.117615\nvn 0.325 0.8237 -0.4647\nv 0.003137 -0.065801 0.12581\nvn 0.4686 0.7853 0.4047\nv 0.003561 -0.066101 0.125902\nvn 0.4686 0.7853 0.4047\nv 0.003902 -0.065801 0.124925\nvn 0.4686 0.7853 0.4047\nv 0.002902 -0.065316 0.126419\nvn 0.3254 -0.8447 0.4249\nv 0.001994 -0.065568 0.126612\nvn 0.3254 -0.8447 0.4249\nv 0.003427 -0.065547 0.125557\nvn 0.3254 -0.8447 0.4249\nv 0.004744 -0.065292 0.124327\nvn 0.3009 -0.9517 0.0612\nv 0.004432 -0.065395 0.12426\nvn 0.3009 -0.9517 0.0612\nv 0.005159 -0.065288 0.122339\nvn 0.3009 -0.9517 0.0612\nv 0.005159 -0.065288 0.122339\nvn 0.237 -0.9708 0.036\nv 0.004432 -0.065395 0.12426\nvn 0.237 -0.9708 0.036\nv 0.00481 -0.065388 0.121951\nvn 0.237 -0.9708 0.036\nv 0.003432 -0.065543 0.119115\nvn 0.6168 -0.0261 -0.7867\nv 0.003545 -0.065881 0.119215\nvn 0.6168 -0.0261 -0.7867\nv 0.002565 -0.065747 0.118442\nvn 0.6168 -0.0261 -0.7867\nv 0.000306 -0.065547 0.127043\nvn -0.1605 0.2925 0.9427\nv -0.001289 -0.065795 0.126848\nvn -0.1605 0.2925 0.9427\nv -5.9e-05 -0.065943 0.127104\nvn -0.1605 0.2925 0.9427\nv 0.004633 -0.065881 0.121406\nvn 0.6085 0.7924 -0.0413\nv 0.004673 -0.065836 0.122853\nvn 0.6085 0.7924 -0.0413\nv 0.005012 -0.066097 0.122841\nvn 0.6085 0.7924 -0.0413\nv 0.001994 -0.065568 0.126612\nvn 0.5866 0.1264 0.7999\nv 0.003137 -0.065801 0.12581\nvn 0.5866 0.1264 0.7999\nv 0.003427 -0.065547 0.125557\nvn 0.5866 0.1264 0.7999\nv 0.004432 -0.065395 0.12426\nvn 0.9857 0.0485 0.1612\nv 0.004605 -0.065547 0.123253\nvn 0.9857 0.0485 0.1612\nv 0.00481 -0.065388 0.121951\nvn 0.9857 0.0485 0.1612\nv 0.003545 -0.065881 0.119215\nvn 0.4289 0.8083 -0.4034\nv 0.00361 -0.066107 0.118832\nvn 0.4289 0.8083 -0.4034\nv 0.002565 -0.065747 0.118442\nvn 0.4289 0.8083 -0.4034\nv -0.00036 -0.065291 0.12747\nvn -0.1155 -0.928 0.3543\nv -0.002114 -0.06536 0.126718\nvn -0.1155 -0.928 0.3543\nv -0.000801 -0.065381 0.127089\nvn -0.1155 -0.928 0.3543\nv -0.002055 -0.065293 0.127055\nvn -0.0486 -0.978 0.2029\nv -0.002114 -0.06536 0.126718\nvn -0.0486 -0.978 0.2029\nv -0.00036 -0.065291 0.12747\nvn -0.0486 -0.978 0.2029\nv 0.00481 -0.065388 0.121951\nvn 0.9874 0.0153 0.1574\nv 0.004605 -0.065547 0.123253\nvn 0.9874 0.0153 0.1574\nv 0.004673 -0.065836 0.122853\nvn 0.9874 0.0153 0.1574\nv -0.002114 -0.06536 0.126718\nvn -0.2261 -0.6037 0.7645\nv -0.001949 -0.06555 0.126616\nvn -0.2261 -0.6037 0.7645\nv -0.000801 -0.065381 0.127089\nvn -0.2261 -0.6037 0.7645\nv 0.003922 -0.063393 0.118645\nvn 0.7004 -0.1573 -0.6962\nv 0.004152 -0.065291 0.119305\nvn 0.7004 -0.1573 -0.6962\nv 0.003097 -0.065297 0.118245\nvn 0.7004 -0.1573 -0.6962\nv 0.000393 -0.063397 0.127709\nvn 0.1484 -0.1481 0.9778\nv 0.001215 -0.065272 0.1273\nvn 0.1484 -0.1481 0.9778\nv 0.001291 -0.063393 0.127573\nvn 0.1484 -0.1481 0.9778\nv 0.000393 -0.063397 0.127709\nvn 0.1078 -0.1664 0.9802\nv -0.00036 -0.065291 0.12747\nvn 0.1078 -0.1664 0.9802\nv 0.001215 -0.065272 0.1273\nvn 0.1078 -0.1664 0.9802\nv -0.001116 -0.063391 0.127617\nvn -0.2347 -0.1674 0.9575\nv -0.002055 -0.065293 0.127055\nvn -0.2347 -0.1674 0.9575\nv -0.00036 -0.065291 0.12747\nvn -0.2347 -0.1674 0.9575\nv 0.005173 -0.063402 0.123875\nvn 0.9646 -0.1707 0.2012\nv 0.004744 -0.065292 0.124327\nvn 0.9646 -0.1707 0.2012\nv 0.005159 -0.065288 0.122339\nvn 0.9646 -0.1707 0.2012\nv 0.001324 -0.063391 0.11711\nvn 0.0727 -0.09 -0.9933\nv -9.1e-05 -0.065293 0.117179\nvn 0.0727 -0.09 -0.9933\nv -0.00059 -0.0634 0.116971\nvn 0.0727 -0.09 -0.9933\nv 0.005173 -0.063402 0.123875\nvn 0.9843 -0.1157 0.1336\nv 0.005159 -0.065288 0.122339\nvn 0.9843 -0.1157 0.1336\nv 0.005381 -0.063391 0.122348\nvn 0.9843 -0.1157 0.1336\nv -9.1e-05 -0.065293 0.117179\nvn 0.186 -0.1733 -0.9671\nv 0.001324 -0.063391 0.11711\nvn 0.186 -0.1733 -0.9671\nv 0.00194 -0.065294 0.11757\nvn 0.186 -0.1733 -0.9671\nv 0.001324 -0.063391 0.11711\nvn 0.3839 -0.0974 -0.9182\nv 0.002785 -0.063392 0.117721\nvn 0.3839 -0.0974 -0.9182\nv 0.00194 -0.065294 0.11757\nvn 0.3839 -0.0974 -0.9182\nv 0.005173 -0.063402 0.123875\nvn 0.911 -0.1118 0.397\nv 0.004681 -0.063392 0.125007\nvn 0.911 -0.1118 0.397\nv 0.004744 -0.065292 0.124327\nvn 0.911 -0.1118 0.397\nv 0.00194 -0.065294 0.11757\nvn 0.4981 -0.1533 -0.8534\nv 0.002785 -0.063392 0.117721\nvn 0.4981 -0.1533 -0.8534\nv 0.003097 -0.065297 0.118245\nvn 0.4981 -0.1533 -0.8534\nv -0.004699 -0.065289 0.120256\nvn -0.8499 -0.1473 -0.5059\nv -0.004559 -0.063407 0.119472\nvn -0.8499 -0.1473 -0.5059\nv -0.004093 -0.065292 0.119239\nvn -0.8499 -0.1473 -0.5059\nv 0.002785 -0.063392 0.117721\nvn 0.6268 -0.1096 -0.7714\nv 0.003922 -0.063393 0.118645\nvn 0.6268 -0.1096 -0.7714\nv 0.003097 -0.065297 0.118245\nvn 0.6268 -0.1096 -0.7714\nv -0.004559 -0.063407 0.119472\nvn -0.7566 -0.107 -0.645\nv -0.003504 -0.063398 0.118233\nvn -0.7566 -0.107 -0.645\nv -0.004093 -0.065292 0.119239\nvn -0.7566 -0.107 -0.645\nv 0.004754 -0.063392 0.11981\nvn 0.8095 -0.1029 -0.578\nv 0.004152 -0.065291 0.119305\nvn 0.8095 -0.1029 -0.578\nv 0.003922 -0.063393 0.118645\nvn 0.8095 -0.1029 -0.578\nv 0.004152 -0.065291 0.119305\nvn 0.872 -0.1528 -0.465\nv 0.004754 -0.063392 0.11981\nvn 0.872 -0.1528 -0.465\nv 0.004844 -0.065279 0.120599\nvn 0.872 -0.1528 -0.465\nv -0.003504 -0.063398 0.118233\nvn -0.5204 -0.104 -0.8475\nv -0.002133 -0.063393 0.117391\nvn -0.5204 -0.104 -0.8475\nv -0.002989 -0.06529 0.11815\nvn -0.5204 -0.104 -0.8475\nv -0.002989 -0.06529 0.11815\nvn -0.4624 -0.1413 -0.8753\nv -0.002133 -0.063393 0.117391\nvn -0.4624 -0.1413 -0.8753\nv -0.001829 -0.065294 0.117537\nvn -0.4624 -0.1413 -0.8753\nv 0.005234 -0.063391 0.121084\nvn 0.9308 -0.1023 -0.351\nv 0.004844 -0.065279 0.120599\nvn 0.9308 -0.1023 -0.351\nv 0.004754 -0.063392 0.11981\nvn 0.9308 -0.1023 -0.351\nv -0.002133 -0.063393 0.117391\nvn -0.2611 -0.1154 -0.9584\nv -0.00059 -0.0634 0.116971\nvn -0.2611 -0.1154 -0.9584\nv -0.001829 -0.065294 0.117537\nvn -0.2611 -0.1154 -0.9584\nv -0.001829 -0.065294 0.117537\nvn -0.199 -0.1587 -0.9671\nv -0.00059 -0.0634 0.116971\nvn -0.199 -0.1587 -0.9671\nv -9.1e-05 -0.065293 0.117179\nvn -0.199 -0.1587 -0.9671\nv 0.005234 -0.063391 0.121084\nvn 0.9718 -0.1554 -0.1771\nv 0.005159 -0.065288 0.122339\nvn 0.9718 -0.1554 -0.1771\nv 0.004844 -0.065279 0.120599\nvn 0.9718 -0.1554 -0.1771\nv 0.005381 -0.063391 0.122348\nvn 0.9867 -0.1148 -0.1149\nv 0.005159 -0.065288 0.122339\nvn 0.9867 -0.1148 -0.1149\nv 0.005234 -0.063391 0.121084\nvn 0.9867 -0.1148 -0.1149\nv 0.004989 -0.063096 0.12166\nvn 0.8667 0.4986 0.0145\nv 0.005082 -0.063313 0.123513\nvn 0.8667 0.4986 0.0145\nv 0.005128 -0.063332 0.121407\nvn 0.8667 0.4986 0.0145\nv 0.005013 -0.062993 0.122398\nvn 0.9968 0.0675 -0.0424\nv 0.005082 -0.063313 0.123513\nvn 0.9968 0.0675 -0.0424\nv 0.004989 -0.063096 0.12166\nvn 0.9968 0.0675 -0.0424\nv -0.000808 -0.062727 0.127382\nvn -0.0321 -0.1134 0.993\nv -0.000613 -0.063084 0.127347\nvn -0.0321 -0.1134 0.993\nv 0.000262 -0.062764 0.127412\nvn -0.0321 -0.1134 0.993\nv -0.00092 -0.062588 0.127747\nvn 0.0139 -0.9333 0.3588\nv -0.000808 -0.062727 0.127382\nvn 0.0139 -0.9333 0.3588\nv 0.001342 -0.062586 0.127665\nvn 0.0139 -0.9333 0.3588\nv 0.005146 -0.062596 0.120431\nvn 0.4207 -0.8501 -0.3166\nv 0.004424 -0.062718 0.119801\nvn 0.4207 -0.8501 -0.3166\nv 0.003633 -0.062663 0.118603\nvn 0.4207 -0.8501 -0.3166\nv 0.002964 -0.063331 0.126643\nvn 0.1985 0.9431 0.2668\nv 0.003372 -0.063388 0.126542\nvn 0.1985 0.9431 0.2668\nv 0.004217 -0.063172 0.12515\nvn 0.1985 0.9431 0.2668\nv 0.005128 -0.063332 0.121407\nvn 0.239 0.971 -0.0036\nv 0.005082 -0.063313 0.123513\nvn 0.239 0.971 -0.0036\nv 0.005381 -0.063391 0.122348\nvn 0.239 0.971 -0.0036\nv 0.003633 -0.062663 0.118603\nvn 0.758 -0.3959 -0.5183\nv 0.004424 -0.062718 0.119801\nvn 0.758 -0.3959 -0.5183\nv 0.003732 -0.063 0.119004\nvn 0.758 -0.3959 -0.5183\nv 0.005148 -0.062677 0.123202\nvn 0.7694 -0.628 0.1171\nv 0.004799 -0.063 0.12377\nvn 0.7694 -0.628 0.1171\nv 0.005013 -0.062993 0.122398\nvn 0.7694 -0.628 0.1171\nv 0.002638 -0.062584 0.127169\nvn 0.1833 -0.951 0.2491\nv 0.00235 -0.062718 0.126869\nvn 0.1833 -0.951 0.2491\nv 0.003486 -0.062574 0.126584\nvn 0.1833 -0.951 0.2491\nv 0.003393 -0.062764 0.126143\nvn 0.5336 -0.0973 0.8401\nv 0.002023 -0.063103 0.126973\nvn 0.5336 -0.0973 0.8401\nv 0.0032 -0.063095 0.126227\nvn 0.5336 -0.0973 0.8401\nv 0.003486 -0.062574 0.126584\nvn 0.2041 -0.914 0.3506\nv 0.00235 -0.062718 0.126869\nvn 0.2041 -0.914 0.3506\nv 0.003393 -0.062764 0.126143\nvn 0.2041 -0.914 0.3506\nv 0.004298 -0.063318 0.119362\nvn 0.4544 0.8293 -0.3254\nv 0.004754 -0.063392 0.11981\nvn 0.4544 0.8293 -0.3254\nv 0.003922 -0.063393 0.118645\nvn 0.4544 0.8293 -0.3254\nv 0.004424 -0.062718 0.119801\nvn 0.7695 -0.3093 -0.5588\nv 0.00458 -0.063096 0.120224\nvn 0.7695 -0.3093 -0.5588\nv 0.003732 -0.063 0.119004\nvn 0.7695 -0.3093 -0.5588\nv 0.005381 -0.063391 0.122348\nvn 0.5224 0.8491 0.0775\nv 0.005082 -0.063313 0.123513\nvn 0.5224 0.8491 0.0775\nv 0.005173 -0.063402 0.123875\nvn 0.5224 0.8491 0.0775\nv -0.000613 -0.063084 0.127347\nvn -0.0555 0.1631 0.9851\nv -0.001489 -0.063333 0.127339\nvn -0.0555 0.1631 0.9851\nv 0.000228 -0.06321 0.127416\nvn -0.0555 0.1631 0.9851\nv 0.00458 -0.063096 0.120224\nvn 0.6247 0.6822 -0.38\nv 0.004298 -0.063318 0.119362\nvn 0.6247 0.6822 -0.38\nv 0.003732 -0.063 0.119004\nvn 0.6247 0.6822 -0.38\nv 0.000393 -0.063397 0.127709\nvn -0.0098 0.9757 0.2189\nv -0.001489 -0.063333 0.127339\nvn -0.0098 0.9757 0.2189\nv -0.001116 -0.063391 0.127617\nvn -0.0098 0.9757 0.2189\nv 0.000228 -0.06321 0.127416\nvn -0.0836 0.8194 0.5671\nv -0.001489 -0.063333 0.127339\nvn -0.0836 0.8194 0.5671\nv 0.000393 -0.063397 0.127709\nvn -0.0836 0.8194 0.5671\nv 0.004799 -0.063 0.12377\nvn 0.7847 0.6071 0.1255\nv 0.005082 -0.063313 0.123513\nvn 0.7847 0.6071 0.1255\nv 0.005013 -0.062993 0.122398\nvn 0.7847 0.6071 0.1255\nv 0.004303 -0.062593 0.12574\nvn 0.2095 -0.9725 0.1018\nv 0.005148 -0.062677 0.123202\nvn 0.2095 -0.9725 0.1018\nv 0.005277 -0.062581 0.123859\nvn 0.2095 -0.9725 0.1018\nv 0.00235 -0.062718 0.126869\nvn 0.5465 -0.2479 0.8\nv 0.002023 -0.063103 0.126973\nvn 0.5465 -0.2479 0.8\nv 0.003393 -0.062764 0.126143\nvn 0.5465 -0.2479 0.8\nv -0.00092 -0.062588 0.127747\nvn -0.1191 -0.9398 0.3204\nv -0.002108 -0.062662 0.127087\nvn -0.1191 -0.9398 0.3204\nv -0.000808 -0.062727 0.127382\nvn -0.1191 -0.9398 0.3204\nv -0.002223 -0.062589 0.127339\nvn -0.0767 -0.966 0.247\nv -0.002108 -0.062662 0.127087\nvn -0.0767 -0.966 0.247\nv -0.00092 -0.062588 0.127747\nvn -0.0767 -0.966 0.247\nv 0.005146 -0.062596 0.120431\nvn 0.1924 -0.9809 -0.0293\nv 0.005095 -0.062623 0.121003\nvn 0.1924 -0.9809 -0.0293\nv 0.004424 -0.062718 0.119801\nvn 0.1924 -0.9809 -0.0293\nv 0.002023 -0.063103 0.126973\nvn 0.3827 0.6932 0.6107\nv 0.002964 -0.063331 0.126643\nvn 0.3827 0.6932 0.6107\nv 0.0032 -0.063095 0.126227\nvn 0.3827 0.6932 0.6107\nv -0.002108 -0.062662 0.127087\nvn -0.2196 -0.4304 0.8755\nv -0.001828 -0.062993 0.126995\nvn -0.2196 -0.4304 0.8755\nv -0.000808 -0.062727 0.127382\nvn -0.2196 -0.4304 0.8755\nv 0.005095 -0.062623 0.121003\nvn 0.6867 -0.6468 -0.3319\nv 0.004835 -0.062812 0.120832\nvn 0.6867 -0.6468 -0.3319\nv 0.004424 -0.062718 0.119801\nvn 0.6867 -0.6468 -0.3319\nv 0.005417 -0.062595 0.121485\nvn 0.1369 -0.99 -0.0347\nv 0.005095 -0.062623 0.121003\nvn 0.1369 -0.99 -0.0347\nv 0.005146 -0.062596 0.120431\nvn 0.1369 -0.99 -0.0347\nv 0.002638 -0.062584 0.127169\nvn 0.1336 -0.9462 0.2948\nv 0.00131 -0.062741 0.127267\nvn 0.1336 -0.9462 0.2948\nv 0.00235 -0.062718 0.126869\nvn 0.1336 -0.9462 0.2948\nv -0.000808 -0.062727 0.127382\nvn -0.287 -0.2455 0.9259\nv -0.001828 -0.062993 0.126995\nvn -0.287 -0.2455 0.9259\nv -0.000613 -0.063084 0.127347\nvn -0.287 -0.2455 0.9259\nv 0.004303 -0.062593 0.12574\nvn 0.5164 -0.8328 0.1994\nv 0.004369 -0.062742 0.12495\nvn 0.5164 -0.8328 0.1994\nv 0.005148 -0.062677 0.123202\nvn 0.5164 -0.8328 0.1994\nv 0.003372 -0.063388 0.126542\nvn 0.2148 0.9113 0.3513\nv 0.002964 -0.063331 0.126643\nvn 0.2148 0.9113 0.3513\nv 0.002327 -0.063392 0.12719\nvn 0.2148 0.9113 0.3513\nv 0.004835 -0.062812 0.120832\nvn 0.9275 -0.0353 -0.3723\nv 0.00458 -0.063096 0.120224\nvn 0.9275 -0.0353 -0.3723\nv 0.004424 -0.062718 0.119801\nvn 0.9275 -0.0353 -0.3723\nv -0.001828 -0.062993 0.126995\nvn -0.1792 0.6062 0.7748\nv -0.001489 -0.063333 0.127339\nvn -0.1792 0.6062 0.7748\nv -0.000613 -0.063084 0.127347\nvn -0.1792 0.6062 0.7748\nv 0.005148 -0.062677 0.123202\nvn 0.8803 -0.2814 0.3819\nv 0.004369 -0.062742 0.12495\nvn 0.8803 -0.2814 0.3819\nv 0.004799 -0.063 0.12377\nvn 0.8803 -0.2814 0.3819\nv -0.002771 -0.063003 0.126512\nvn -0.3812 -0.5336 0.755\nv -0.001828 -0.062993 0.126995\nvn -0.3812 -0.5336 0.755\nv -0.002108 -0.062662 0.127087\nvn -0.3812 -0.5336 0.755\nv 0.002638 -0.062584 0.127169\nvn 0.1354 -0.9265 0.3511\nv 0.001342 -0.062586 0.127665\nvn 0.1354 -0.9265 0.3511\nv 0.00131 -0.062741 0.127267\nvn 0.1354 -0.9265 0.3511\nv 0.00131 -0.062741 0.127267\nvn 0.3577 -0.0517 0.9324\nv 0.002023 -0.063103 0.126973\nvn 0.3577 -0.0517 0.9324\nv 0.00235 -0.062718 0.126869\nvn 0.3577 -0.0517 0.9324\nv 0.004369 -0.062742 0.12495\nvn 0.9173 -0.1533 0.3675\nv 0.004217 -0.063172 0.12515\nvn 0.9173 -0.1533 0.3675\nv 0.004799 -0.063 0.12377\nvn 0.9173 -0.1533 0.3675\nv 0.004754 -0.063392 0.11981\nvn 0.2492 0.9638 -0.0947\nv 0.004298 -0.063318 0.119362\nvn 0.2494 0.9638 -0.0948\nv 0.005234 -0.063391 0.121084\nvn 0.2494 0.9637 -0.0949\nv 0.005173 -0.063402 0.123875\nvn 0.3435 0.9284 0.1417\nv 0.005082 -0.063313 0.123513\nvn 0.3435 0.9284 0.1417\nv 0.004681 -0.063392 0.125007\nvn 0.3435 0.9284 0.1417\nv -0.002771 -0.063003 0.126512\nvn -0.4216 0.4005 0.8135\nv -0.001489 -0.063333 0.127339\nvn -0.4249 0.3931 0.8155\nv -0.001828 -0.062993 0.126995\nvn -0.4203 0.4037 0.8126\nv -0.003281 -0.063325 0.126401\nvn -0.4256 0.3914 0.8159\nv 0.002023 -0.063103 0.126973\nvn 0.3791 0.2884 0.8793\nv 0.001306 -0.063316 0.127353\nvn 0.3791 0.2884 0.8793\nv 0.002964 -0.063331 0.126643\nvn 0.3791 0.2884 0.8793\nv 0.002406 -0.062587 0.117417\nvn 0.1444 -0.9666 -0.2115\nv 0.003633 -0.062663 0.118603\nvn 0.1444 -0.9666 -0.2115\nv 0.002107 -0.062677 0.117623\nvn 0.1444 -0.9666 -0.2115\nv -0.002595 -0.063393 0.127061\nvn -0.1057 0.972 0.21\nv -0.001489 -0.063333 0.127339\nvn -0.1057 0.972 0.21\nv -0.003281 -0.063325 0.126401\nvn -0.1057 0.972 0.21\nv 0.003672 -0.062587 0.118249\nvn 0.1282 -0.9724 -0.1951\nv 0.003633 -0.062663 0.118603\nvn 0.1282 -0.9724 -0.1951\nv 0.002406 -0.062587 0.117417\nvn 0.1282 -0.9724 -0.1951\nv -0.001116 -0.063391 0.127617\nvn -0.1475 0.9091 0.3896\nv -0.001489 -0.063333 0.127339\nvn -0.1475 0.9091 0.3896\nv -0.002595 -0.063393 0.127061\nvn -0.1475 0.9091 0.3896\nv 0.00458 -0.063096 0.120224\nvn 0.8933 0.2679 -0.3608\nv 0.005128 -0.063332 0.121407\nvn 0.8933 0.2679 -0.3608\nv 0.004298 -0.063318 0.119362\nvn 0.8933 0.2679 -0.3608\nv 0.004799 -0.063 0.12377\nvn 0.8195 0.4424 0.3644\nv 0.004106 -0.063405 0.125819\nvn 0.8195 0.4424 0.3644\nv 0.005082 -0.063313 0.123513\nvn 0.8195 0.4424 0.3644\nv 0.004217 -0.063172 0.12515\nvn 0.6161 0.7067 0.348\nv 0.004106 -0.063405 0.125819\nvn 0.6161 0.7067 0.348\nv 0.004799 -0.063 0.12377\nvn 0.6161 0.7067 0.348\nv 0.003633 -0.062663 0.118603\nvn 0.5113 -0.334 -0.7919\nv 0.002685 -0.062942 0.118108\nvn 0.5113 -0.334 -0.7919\nv 0.002107 -0.062677 0.117623\nvn 0.5113 -0.334 -0.7919\nv 0.004303 -0.062593 0.12574\nvn 0.1798 -0.964 0.1961\nv 0.003486 -0.062574 0.126584\nvn 0.1798 -0.964 0.1961\nv 0.004369 -0.062742 0.12495\nvn 0.1798 -0.964 0.1961\nv 0.002327 -0.063392 0.12719\nvn 0.1221 0.9345 0.3342\nv 0.001306 -0.063316 0.127353\nvn 0.1221 0.9345 0.3342\nv 0.001291 -0.063393 0.127573\nvn 0.1221 0.9345 0.3342\nv 0.002964 -0.063331 0.126643\nvn 0.1085 0.9662 0.2338\nv 0.001306 -0.063316 0.127353\nvn 0.1085 0.9662 0.2338\nv 0.002327 -0.063392 0.12719\nvn 0.1085 0.9662 0.2338\nv 0.004835 -0.062812 0.120832\nvn 0.9269 -0.2669 -0.264\nv 0.004989 -0.063096 0.12166\nvn 0.9269 -0.2669 -0.264\nv 0.00458 -0.063096 0.120224\nvn 0.9269 -0.2669 -0.264\nv 0.005128 -0.063332 0.121407\nvn 0.2497 0.9637 -0.095\nv 0.005095 -0.062623 0.121003\nvn 0.6463 -0.7461 -0.1598\nv 0.005013 -0.062993 0.122398\nvn 0.6463 -0.7461 -0.1598\nv 0.004835 -0.062812 0.120832\nvn 0.6463 -0.7461 -0.1598\nv 0.004989 -0.063096 0.12166\nvn 0.7276 0.654 -0.207\nv 0.005128 -0.063332 0.121407\nvn 0.7276 0.654 -0.207\nv 0.00458 -0.063096 0.120224\nvn 0.7276 0.654 -0.207\nv 0.00131 -0.062741 0.127267\nvn 0.2455 -0.2716 0.9306\nv 0.000228 -0.06321 0.127416\nvn 0.2455 -0.2716 0.9306\nv 0.002023 -0.063103 0.126973\nvn 0.2455 -0.2716 0.9306\nv 0.003486 -0.062574 0.126584\nvn 0.3821 -0.8753 0.2964\nv 0.003393 -0.062764 0.126143\nvn 0.3821 -0.8753 0.2964\nv 0.004369 -0.062742 0.12495\nvn 0.3821 -0.8753 0.2964\nv 0.005013 -0.062993 0.122398\nvn 0.9508 0.3008 -0.0736\nv 0.004989 -0.063096 0.12166\nvn 0.9508 0.3008 -0.0736\nv 0.004835 -0.062812 0.120832\nvn 0.9508 0.3008 -0.0736\nv 0.001342 -0.062586 0.127665\nvn 0.0694 -0.931 0.3583\nv 0.000262 -0.062764 0.127412\nvn 0.0694 -0.931 0.3583\nv 0.00131 -0.062741 0.127267\nvn 0.0694 -0.931 0.3583\nv 0.005082 -0.063313 0.123513\nvn 0.0844 0.9936 0.0756\nv 0.004106 -0.063405 0.125819\nvn 0.0844 0.9936 0.0756\nv 0.004681 -0.063392 0.125007\nvn 0.0844 0.9936 0.0756\nv 0.000228 -0.06321 0.127416\nvn 0.1122 0.76 0.6401\nv 0.001306 -0.063316 0.127353\nvn 0.1122 0.76 0.6401\nv 0.002023 -0.063103 0.126973\nvn 0.1122 0.76 0.6401\nv 0.005417 -0.062595 0.121485\nvn 0.0704 -0.9975 0.0101\nv 0.005277 -0.062581 0.123859\nvn 0.0704 -0.9975 0.0101\nv 0.005095 -0.062623 0.121003\nvn 0.0704 -0.9975 0.0101\nv 0.005464 -0.062595 0.122769\nvn -0.0603 -0.9982 0.0024\nv 0.005277 -0.062581 0.123859\nvn -0.0603 -0.9982 0.0024\nv 0.005417 -0.062595 0.121485\nvn -0.0603 -0.9982 0.0024\nv 0.005148 -0.062677 0.123202\nvn 0.9447 -0.3264 -0.0308\nv 0.005013 -0.062993 0.122398\nvn 0.9447 -0.3264 -0.0308\nv 0.005095 -0.062623 0.121003\nvn 0.9447 -0.3264 -0.0308\nv 0.003633 -0.062663 0.118603\nvn 0.5017 -0.5982 -0.6248\nv 0.003732 -0.063 0.119004\nvn 0.5017 -0.5982 -0.6248\nv 0.002685 -0.062942 0.118108\nvn 0.5017 -0.5982 -0.6248\nv 0.000262 -0.062764 0.127412\nvn 0.1372 -0.0028 0.9905\nv 0.000228 -0.06321 0.127416\nvn 0.1372 -0.0028 0.9905\nv 0.00131 -0.062741 0.127267\nvn 0.1372 -0.0028 0.9905\nv 0.002785 -0.063392 0.117721\nvn 0.2355 0.9279 -0.2889\nv 0.00282 -0.06331 0.118015\nvn 0.2355 0.9279 -0.2889\nv 0.003922 -0.063393 0.118645\nvn 0.2355 0.9279 -0.2889\nv 0.001306 -0.063316 0.127353\nvn 0.0467 0.9422 0.3317\nv 0.000393 -0.063397 0.127709\nvn 0.0467 0.9422 0.3317\nv 0.001291 -0.063393 0.127573\nvn 0.0467 0.9422 0.3317\nv 0.005277 -0.062581 0.123859\nvn 0.707 -0.7064 -0.0346\nv 0.005148 -0.062677 0.123202\nvn 0.707 -0.7064 -0.0346\nv 0.005095 -0.062623 0.121003\nvn 0.707 -0.7064 -0.0346\nv 0.005234 -0.063391 0.121084\nvn 0.3808 0.9236 -0.0447\nv 0.005128 -0.063332 0.121407\nvn 0.3808 0.9236 -0.0447\nv 0.005381 -0.063391 0.122348\nvn 0.3808 0.9236 -0.0447\nv 0.002685 -0.062942 0.118108\nvn 0.6094 0.3965 -0.6866\nv 0.003732 -0.063 0.119004\nvn 0.6094 0.3965 -0.6866\nv 0.00282 -0.06331 0.118015\nvn 0.6094 0.3965 -0.6866\nv 0.003732 -0.063 0.119004\nvn 0.633 0.346 -0.6925\nv 0.004298 -0.063318 0.119362\nvn 0.633 0.346 -0.6925\nv 0.00282 -0.06331 0.118015\nvn 0.633 0.346 -0.6925\nv 0.000228 -0.06321 0.127416\nvn 0.1137 0.8664 0.4862\nv 0.000393 -0.063397 0.127709\nvn 0.1137 0.8664 0.4862\nv 0.001306 -0.063316 0.127353\nvn 0.1137 0.8664 0.4862\nv 0.00282 -0.06331 0.118015\nvn 0.1864 0.9622 -0.1985\nv 0.004298 -0.063318 0.119362\nvn 0.1864 0.9622 -0.1985\nv 0.003922 -0.063393 0.118645\nvn 0.1864 0.9622 -0.1985\nv 0.000262 -0.062764 0.127412\nvn -0.0787 0.0132 0.9968\nv -0.000613 -0.063084 0.127347\nvn -0.0787 0.0132 0.9968\nv 0.000228 -0.06321 0.127416\nvn -0.0787 0.0132 0.9968\nv 0.003393 -0.062764 0.126143\nvn 0.7454 -0.2802 0.6048\nv 0.0032 -0.063095 0.126227\nvn 0.7454 -0.2802 0.6048\nv 0.004369 -0.062742 0.12495\nvn 0.7454 -0.2802 0.6048\nv 0.004369 -0.062742 0.12495\nvn 0.728 0.06 0.6829\nv 0.0032 -0.063095 0.126227\nvn 0.728 0.06 0.6829\nv 0.004217 -0.063172 0.12515\nvn 0.728 0.06 0.6829\nv 0.001342 -0.062586 0.127665\nvn -0.0445 -0.7177 0.6949\nv -0.000808 -0.062727 0.127382\nvn -0.0445 -0.7177 0.6949\nv 0.000262 -0.062764 0.127412\nvn -0.0445 -0.7177 0.6949\nv 0.005146 -0.062596 0.120431\nvn 0.2561 -0.9504 -0.1766\nv 0.003633 -0.062663 0.118603\nvn 0.2561 -0.9504 -0.1766\nv 0.003672 -0.062587 0.118249\nvn 0.2561 -0.9504 -0.1766\nv 0.004217 -0.063172 0.12515\nvn 0.3739 0.8549 0.3596\nv 0.003372 -0.063388 0.126542\nvn 0.3739 0.8549 0.3596\nv 0.004106 -0.063405 0.125819\nvn 0.3739 0.8549 0.3596\nv 0.0032 -0.063095 0.126227\nvn 0.6806 0.3999 0.6139\nv 0.002964 -0.063331 0.126643\nvn 0.6806 0.3999 0.6139\nv 0.004217 -0.063172 0.12515\nvn 0.6806 0.3999 0.6139\nv 0.005277 -0.062581 0.123859\nvn 0.8756 -0.1709 0.4519\nv 0.004963 -0.061496 0.124878\nvn 0.8756 -0.1709 0.4519\nv 0.004303 -0.062593 0.12574\nvn 0.8756 -0.1709 0.4519\nv 0.004719 -0.062162 0.119475\nvn 0.7631 -0.3875 -0.5172\nv 0.005146 -0.062596 0.120431\nvn 0.7631 -0.3875 -0.5172\nv 0.003672 -0.062587 0.118249\nvn 0.7631 -0.3875 -0.5172\nv 0.004963 -0.061496 0.124878\nvn 0.8348 -0.0727 0.5457\nv 0.004958 -0.058968 0.125222\nvn 0.8348 -0.0727 0.5457\nv 0.004303 -0.062593 0.12574\nvn 0.8348 -0.0727 0.5457\nv 0.004958 -0.058968 0.125222\nvn 0.7878 -0.0545 0.6135\nv 0.004029 -0.058856 0.126425\nvn 0.7878 -0.0545 0.6135\nv 0.004303 -0.062593 0.12574\nvn 0.7878 -0.0545 0.6135\nv 0.004303 -0.062593 0.12574\nvn 0.7151 -0.0747 0.695\nv 0.004029 -0.058856 0.126425\nvn 0.7151 -0.0747 0.695\nv 0.003486 -0.062574 0.126584\nvn 0.7151 -0.0747 0.695\nv 0.000123 -0.062162 0.127866\nvn 0.0342 -0.3452 0.9379\nv -0.00092 -0.062588 0.127747\nvn 0.0342 -0.3452 0.9379\nv 0.001342 -0.062586 0.127665\nvn 0.0342 -0.3452 0.9379\nv 0.004029 -0.058856 0.126425\nvn 0.6057 -0.0545 0.7938\nv 0.002965 -0.058447 0.127264\nvn 0.6057 -0.0545 0.7938\nv 0.003486 -0.062574 0.126584\nvn 0.6057 -0.0545 0.7938\nv 0.002965 -0.058447 0.127264\nvn 0.5675 -0.0638 0.8209\nv 0.002638 -0.062584 0.127169\nvn 0.5675 -0.0638 0.8209\nv 0.003486 -0.062574 0.126584\nvn 0.5675 -0.0638 0.8209\nv 0.005171 -0.060618 0.1201\nvn 0.8946 -0.0843 -0.4389\nv 0.004941 -0.060618 0.119633\nvn 0.895 -0.0712 -0.4404\nv 0.005219 -0.0597 0.120052\nvn 0.8951 -0.0698 -0.4404\nv 0.005219 -0.0597 0.120052\nvn 0.8848 -0.0566 -0.4626\nv 0.004941 -0.060618 0.119633\nvn 0.8848 -0.0566 -0.4626\nv 0.004985 -0.05972 0.119606\nvn 0.8848 -0.0566 -0.4626\nv 0.004719 -0.062162 0.119475\nvn 0.8943 -0.0839 -0.4395\nv 0.005146 -0.062596 0.120431\nvn 0.8947 -0.0845 -0.4385\nv 0.004685 -0.060618 0.119205\nvn 0.7957 -0.0514 -0.6035\nv 0.004371 -0.060617 0.118791\nvn 0.7957 -0.0514 -0.6035\nv 0.004725 -0.05972 0.11918\nvn 0.7957 -0.0514 -0.6035\nv 0.004425 -0.059708 0.118764\nvn 0.8085 -0.0645 -0.5849\nv 0.004725 -0.05972 0.11918\nvn 0.8085 -0.0645 -0.5849\nv 0.004371 -0.060617 0.118791\nvn 0.8085 -0.0645 -0.5849\nv -0.000644 -0.060619 0.127939\nvn -0.0755 -0.0844 0.9936\nv -0.000125 -0.060618 0.127976\nvn -0.071 -0.0776 0.9945\nv -0.000683 -0.059717 0.128006\nvn -0.0706 -0.077 0.9945\nv -0.000683 -0.059717 0.128006\nvn -0.0341 -0.0544 0.9979\nv -0.000125 -0.060618 0.127976\nvn -0.0341 -0.0544 0.9979\nv -0.000125 -0.05972 0.128025\nvn -0.0341 -0.0544 0.9979\nv 0.000123 -0.062162 0.127866\nvn -0.0724 -0.0832 0.9939\nv -0.00092 -0.062588 0.127747\nvn -0.0782 -0.086 0.9932\nv 0.001017 -0.059747 0.127944\nvn 0.1078 -0.0624 0.9922\nv 0.000374 -0.05972 0.128015\nvn 0.1162 -0.0575 0.9916\nv 0.00089 -0.060617 0.127903\nvn 0.1087 -0.0618 0.9921\nv 0.000373 -0.060618 0.127964\nvn 0.1175 -0.0567 0.9915\nv 0.002406 -0.062587 0.117417\nvn 0.5476 -0.0771 -0.8332\nv 0.002992 -0.058633 0.117436\nvn 0.5476 -0.0771 -0.8332\nv 0.003672 -0.062587 0.118249\nvn 0.5476 -0.0771 -0.8332\nv 0.002965 -0.058447 0.127264\nvn 0.4237 -0.0544 0.9041\nv 0.001852 -0.058837 0.127763\nvn 0.4237 -0.0544 0.9041\nv 0.002638 -0.062584 0.127169\nvn 0.4237 -0.0544 0.9041\nv 0.002638 -0.062584 0.127169\nvn 0.3567 -0.0727 0.9314\nv 0.001852 -0.058837 0.127763\nvn 0.3567 -0.0727 0.9314\nv 0.001342 -0.062586 0.127665\nvn 0.3567 -0.0727 0.9314\nv 0.002992 -0.058633 0.117436\nvn 0.6133 -0.0564 -0.7878\nv 0.003992 -0.058807 0.118228\nvn 0.6133 -0.0564 -0.7878\nv 0.003672 -0.062587 0.118249\nvn 0.6133 -0.0564 -0.7878\nv 0.001852 -0.058837 0.127763\nvn 0.2759 -0.0625 0.9592\nv 0.001017 -0.059747 0.127944\nvn 0.2759 -0.0625 0.9592\nv 0.001342 -0.062586 0.127665\nvn 0.2759 -0.0625 0.9592\nv 0.001342 -0.062586 0.127665\nvn 0.1917 -0.074 0.9787\nv 0.001017 -0.059747 0.127944\nvn 0.1917 -0.074 0.9787\nv 0.00089 -0.060617 0.127903\nvn 0.1917 -0.074 0.9787\nv 0.00081 -0.05964 0.128006\nvn 0.2639 -0.0506 0.9632\nv 0.001017 -0.059747 0.127944\nvn 0.2639 -0.0506 0.9632\nv 0.001852 -0.058837 0.127763\nvn 0.2639 -0.0506 0.9632\nv 0.003992 -0.058807 0.118228\nvn 0.7207 -0.065 -0.6902\nv 0.004425 -0.059708 0.118764\nvn 0.7163 -0.063 -0.6949\nv 0.003672 -0.062587 0.118249\nvn 0.7157 -0.0628 -0.6956\nv 0.00089 -0.060617 0.127903\nvn 0.1315 -0.0889 0.9873\nv 0.000123 -0.062162 0.127866\nvn 0.1315 -0.0889 0.9873\nv 0.001342 -0.062586 0.127665\nvn 0.1315 -0.0889 0.9873\nv 0.004371 -0.060617 0.118791\nvn 0.7149 -0.0624 -0.6965\nv 0.004914 -0.058169 0.119353\nvn 0.7748 -0.0046 -0.6321\nv 0.004425 -0.059708 0.118764\nvn 0.7748 -0.0045 -0.6321\nv 0.003992 -0.058807 0.118228\nvn 0.7749 -0.0047 -0.6321\nv 0.004371 -0.060617 0.118791\nvn 0.7737 -0.1029 -0.6251\nv 0.004719 -0.062162 0.119475\nvn 0.7737 -0.1029 -0.6251\nv 0.003672 -0.062587 0.118249\nvn 0.7737 -0.1029 -0.6251\nv -0.000644 -0.060619 0.127939\nvn -0.1248 -0.0789 0.989\nv -0.000683 -0.059717 0.128006\nvn -0.1248 -0.0789 0.989\nv -0.00092 -0.062588 0.127747\nvn -0.1248 -0.0789 0.989\nv 0.005171 -0.060618 0.1201\nvn 0.9429 -0.0663 -0.3263\nv 0.005219 -0.0597 0.120052\nvn 0.9429 -0.0663 -0.3263\nv 0.005146 -0.062596 0.120431\nvn 0.9429 -0.0663 -0.3263\nv -0.000683 -0.059717 0.128006\nvn -0.2334 -0.0683 0.97\nv -0.00191 -0.059615 0.127718\nvn -0.2334 -0.0683 0.97\nv -0.00092 -0.062588 0.127747\nvn -0.2334 -0.0683 0.97\nv 0.005219 -0.0597 0.120052\nvn 0.9516 -0.0632 -0.3007\nv 0.005555 -0.058944 0.120958\nvn 0.9516 -0.0632 -0.3007\nv 0.005146 -0.062596 0.120431\nvn 0.9516 -0.0632 -0.3007\nv -0.00092 -0.062588 0.127747\nvn -0.2973 -0.0898 0.9506\nv -0.00191 -0.059615 0.127718\nvn -0.2973 -0.0898 0.9506\nv -0.002223 -0.062589 0.127339\nvn -0.2973 -0.0898 0.9506\nv 0.005146 -0.062596 0.120431\nvn 0.9661 -0.0724 -0.2479\nv 0.005555 -0.058944 0.120958\nvn 0.9661 -0.0724 -0.2479\nv 0.005417 -0.062595 0.121485\nvn 0.9661 -0.0724 -0.2479\nv 0.005555 -0.058944 0.120958\nvn 0.9882 -0.0579 -0.1416\nv 0.005735 -0.058876 0.122187\nvn 0.9882 -0.0579 -0.1416\nv 0.005417 -0.062595 0.121485\nvn 0.9882 -0.0579 -0.1416\nv -0.00191 -0.059615 0.127718\nvn -0.411 -0.0725 0.9088\nv -0.002734 -0.05965 0.127343\nvn -0.411 -0.0725 0.9088\nv -0.002223 -0.062589 0.127339\nvn -0.411 -0.0725 0.9088\nv 0.005417 -0.062595 0.121485\nvn 0.9963 -0.0784 -0.0364\nv 0.005735 -0.058876 0.122187\nvn 0.9963 -0.0784 -0.0364\nv 0.005464 -0.062595 0.122769\nvn 0.9963 -0.0784 -0.0364\nv 0.005735 -0.058876 0.122187\nvn 0.9949 -0.0599 0.0813\nv 0.005655 -0.05874 0.123264\nvn 0.9949 -0.0599 0.0813\nv 0.005464 -0.062595 0.122769\nvn 0.9949 -0.0599 0.0813\nv 0.005464 -0.062595 0.122769\nvn 0.983 -0.0706 0.1696\nv 0.005655 -0.05874 0.123264\nvn 0.983 -0.0706 0.1696\nv 0.005277 -0.062581 0.123859\nvn 0.983 -0.0706 0.1696\nv 0.005655 -0.05874 0.123264\nvn 0.9728 -0.0613 0.2236\nv 0.00548 -0.058768 0.124022\nvn 0.9728 -0.0613 0.2236\nv 0.005277 -0.062581 0.123859\nvn 0.9728 -0.0613 0.2236\nv 0.005277 -0.062581 0.123859\nvn 0.9321 -0.0648 0.3563\nv 0.00548 -0.058768 0.124022\nvn 0.9321 -0.0648 0.3563\nv 0.004963 -0.061496 0.124878\nvn 0.9321 -0.0648 0.3563\nv 0.00548 -0.058768 0.124022\nvn 0.919 -0.0515 0.3908\nv 0.004958 -0.058968 0.125222\nvn 0.919 -0.0515 0.3908\nv 0.004963 -0.061496 0.124878\nvn 0.919 -0.0515 0.3908\nv 0.004824 -0.045494 0.119141\nvn 0.775 -0.005 -0.632\nv -0.001514 -0.045494 0.127926\nvn -0.4292 -0.0002 0.9032\nv -0.00326 -0.045494 0.127097\nvn -0.4292 -0.0002 0.9032\nv -0.002734 -0.05965 0.127343\nvn -0.4292 -0.0002 0.9032\nv -0.001514 -0.045494 0.127926\nvn -0.4146 -0.0018 0.91\nv -0.002734 -0.05965 0.127343\nvn -0.4146 -0.0018 0.91\nv -0.00191 -0.059615 0.127718\nvn -0.4146 -0.0018 0.91\nv 0.003505 -0.045494 0.117766\nvn 0.6198 -0.0045 -0.7847\nv 0.003992 -0.058807 0.118228\nvn 0.6198 -0.0045 -0.7847\nv 0.002992 -0.058633 0.117436\nvn 0.6198 -0.0045 -0.7847\nv 0.003505 -0.045494 0.117766\nvn 0.722 0.0024 -0.6919\nv 0.004824 -0.045494 0.119141\nvn 0.722 0.0024 -0.6919\nv 0.003992 -0.058807 0.118228\nvn 0.722 0.0024 -0.6919\nv 0.003026 -0.052003 0.117457\nvn 0.5431 -0.0002 -0.8397\nv 0.003505 -0.045494 0.117766\nvn 0.5431 -0.0002 -0.8397\nv 0.002992 -0.058633 0.117436\nvn 0.5431 -0.0002 -0.8397\nv -0.001514 -0.045494 0.127926\nvn -0.1434 -0.0028 0.9897\nv -0.000683 -0.059717 0.128006\nvn -0.1434 -0.0028 0.9897\nv -0.001248 -0.04944 0.127953\nvn -0.1434 -0.0028 0.9897\nv -0.001514 -0.045494 0.127926\nvn -0.2292 -0.0079 0.9733\nv -0.00191 -0.059615 0.127718\nvn -0.2292 -0.0079 0.9733\nv -0.000683 -0.059717 0.128006\nvn -0.2292 -0.0079 0.9733\nv -0.001277 -0.045994 0.127948\nvn -0.0889 0.0009 0.996\nv -0.001514 -0.045494 0.127926\nvn -0.0889 0.0009 0.996\nv -0.001248 -0.04944 0.127953\nvn -0.0889 0.0009 0.996\nv 0.002803 -0.052229 0.117331\nvn 0.4939 0.0002 -0.8695\nv 0.003026 -0.052003 0.117457\nvn 0.4939 0.0002 -0.8695\nv 0.002992 -0.058633 0.117436\nvn 0.4939 0.0002 -0.8695\nv -0.000691 -0.049955 0.128053\nvn -0.1804 -0.0049 0.9836\nv -0.001248 -0.04944 0.127953\nvn -0.1804 -0.0049 0.9836\nv -0.000683 -0.059717 0.128006\nvn -0.1804 -0.0049 0.9836\nv 0.003505 -0.045494 0.117766\nvn 0.526 0.0016 -0.8505\nv 0.003026 -0.052003 0.117457\nvn 0.526 0.0016 -0.8505\nv 0.002983 -0.047119 0.11744\nvn 0.526 0.0016 -0.8505\nv -0.000691 -0.049955 0.128053\nvn -0.1013 -0.0048 0.9948\nv -0.000683 -0.059717 0.128006\nvn -0.1013 -0.0048 0.9948\nv 0.000123 -0.058175 0.128096\nvn -0.1013 -0.0048 0.9948\nv 0.001972 -0.045494 0.11689\nvn 0.496 0.0148 -0.8682\nv 0.003505 -0.045494 0.117766\nvn 0.496 0.0148 -0.8682\nv 0.002983 -0.047119 0.11744\nvn 0.496 0.0148 -0.8682\nv -1.1e-05 -0.049483 0.128091\nvn -0.0561 -0.0004 0.9984\nv -0.000691 -0.049955 0.128053\nvn -0.0561 -0.0004 0.9984\nv 0.000123 -0.058175 0.128096\nvn -0.0561 -0.0004 0.9984\nv -0.001277 -0.045994 0.127948\nvn -0.1258 -0.0167 0.9919\nv 2.5e-05 -0.045994 0.128113\nvn -0.1258 -0.0167 0.9919\nv -0.001514 -0.045494 0.127926\nvn -0.1258 -0.0167 0.9919\nv 0.003033 -0.04678 0.127218\nvn 0.6232 -0.0295 0.7815\nv 0.004033 -0.046746 0.126422\nvn 0.6232 -0.0295 0.7815\nv 0.004057 -0.045494 0.12645\nvn 0.6232 -0.0295 0.7815\nv 0.004033 -0.046746 0.126422\nvn 0.7843 -0.0289 0.6197\nv 0.004736 -0.046785 0.125529\nvn 0.7843 -0.0289 0.6197\nv 0.004057 -0.045494 0.12645\nvn 0.7843 -0.0289 0.6197\nv 0.004736 -0.046785 0.125529\nvn 0.8574 -0.0427 0.5128\nv 0.005088 -0.046792 0.124941\nvn 0.8574 -0.0427 0.5128\nv 0.005192 -0.045494 0.124876\nvn 0.8574 -0.0427 0.5128\nv 0.005088 -0.046792 0.124941\nvn 0.9293 -0.0559 0.365\nv 0.005512 -0.046831 0.123855\nvn 0.9293 -0.0559 0.365\nv 0.005192 -0.045494 0.124876\nvn 0.9293 -0.0559 0.365\nv 0.00537 -0.047383 0.124379\nvn 0.8631 0.0061 0.5051\nv 0.004381 -0.047394 0.126069\nvn 0.8631 0.0061 0.5051\nv 0.004958 -0.058968 0.125222\nvn 0.8631 0.0061 0.5051\nv 0.004381 -0.047394 0.126069\nvn 0.6852 0.0016 0.7284\nv 0.003548 -0.047386 0.126853\nvn 0.6852 0.0016 0.7284\nv 0.004029 -0.058856 0.126425\nvn 0.6852 0.0016 0.7284\nv -1.1e-05 -0.049483 0.128091\nvn 0.1349 0.0026 0.9909\nv 0.000123 -0.058175 0.128096\nvn 0.1349 0.0026 0.9909\nv 0.00081 -0.05964 0.128006\nvn 0.1349 0.0026 0.9909\nv 0.000636 -0.045494 0.128078\nvn -0.0698 0.1532 0.9857\nv -0.001514 -0.045494 0.127926\nvn -0.0698 0.1532 0.9857\nv 2.5e-05 -0.045994 0.128113\nvn -0.0698 0.1532 0.9857\nv 0.000636 -0.045494 0.128078\nvn 0.0618 -0.0068 0.9981\nv 2.5e-05 -0.045994 0.128113\nvn 0.0618 -0.0068 0.9981\nv -1.1e-05 -0.049483 0.128091\nvn 0.0618 -0.0068 0.9981\nv 0.000636 -0.045494 0.128078\nvn 0.0479 -0.0045 0.9988\nv -1.1e-05 -0.049483 0.128091\nvn 0.0479 -0.0045 0.9988\nv 0.00081 -0.05964 0.128006\nvn 0.0479 -0.0045 0.9988\nv 0.000636 -0.045494 0.128078\nvn 0.2288 -0.0022 0.9735\nv 0.00081 -0.05964 0.128006\nvn 0.2288 -0.0022 0.9735\nv 0.001852 -0.058837 0.127763\nvn 0.2288 -0.0022 0.9735\nv 0.002531 -0.045494 0.127532\nvn 0.2771 0.0025 0.9608\nv 0.000636 -0.045494 0.128078\nvn 0.2771 0.0025 0.9608\nv 0.001852 -0.058837 0.127763\nvn 0.2771 0.0025 0.9608\nv 0.002531 -0.045494 0.127532\nvn 0.41 -0.0051 0.9121\nv 0.001852 -0.058837 0.127763\nvn 0.41 -0.0051 0.9121\nv 0.002965 -0.058447 0.127264\nvn 0.41 -0.0051 0.9121\nv 0.002744 -0.052032 0.127378\nvn 0.9501 0.0382 -0.3094\nv 0.002531 -0.045494 0.127532\nvn 0.9501 0.0382 -0.3094\nv 0.002965 -0.058447 0.127264\nvn 0.9501 0.0382 -0.3094\nv 0.003009 -0.052226 0.127231\nvn 0.4877 0.0013 0.873\nv 0.002744 -0.052032 0.127378\nvn 0.4877 0.0013 0.873\nv 0.002965 -0.058447 0.127264\nvn 0.4877 0.0013 0.873\nv 0.002774 -0.047157 0.12735\nvn 0.6039 0.001 0.7971\nv 0.002531 -0.045494 0.127532\nvn 0.6039 0.001 0.7971\nv 0.002744 -0.052032 0.127378\nvn 0.6039 0.001 0.7971\nv 0.003033 -0.04678 0.127218\nvn 0.4835 -0.0252 0.875\nv 0.002531 -0.045494 0.127532\nvn 0.4835 -0.0252 0.875\nv 0.002774 -0.047157 0.12735\nvn 0.4835 -0.0252 0.875\nv 0.003233 -0.052043 0.127066\nvn 0.5928 0.0002 0.8053\nv 0.003009 -0.052226 0.127231\nvn 0.5928 0.0002 0.8053\nv 0.002965 -0.058447 0.127264\nvn 0.5928 0.0002 0.8053\nv 0.003548 -0.047386 0.126853\nvn 0.6188 -0.0033 0.7855\nv 0.002965 -0.058447 0.127264\nvn 0.6188 -0.0033 0.7855\nv 0.004029 -0.058856 0.126425\nvn 0.6188 -0.0033 0.7855\nv 0.003548 -0.047386 0.126853\nvn 0.4983 0.0061 0.867\nv 0.003233 -0.052043 0.127066\nvn 0.4983 0.0061 0.867\nv 0.002965 -0.058447 0.127264\nvn 0.4983 0.0061 0.867\nv 0.004057 -0.045494 0.12645\nvn 0.5784 0.0264 0.8154\nv 0.002531 -0.045494 0.127532\nvn 0.5784 0.0264 0.8154\nv 0.003033 -0.04678 0.127218\nvn 0.5784 0.0264 0.8154\nv 0.004381 -0.047394 0.126069\nvn 0.7912 -0.0053 0.6116\nv 0.004029 -0.058856 0.126425\nvn 0.7912 -0.0053 0.6116\nv 0.004958 -0.058968 0.125222\nvn 0.7912 -0.0053 0.6116\nv 0.005192 -0.045494 0.124876\nvn 0.8111 0.0101 0.5848\nv 0.004057 -0.045494 0.12645\nvn 0.8111 0.0101 0.5848\nv 0.004736 -0.046785 0.125529\nvn 0.8111 0.0101 0.5848\nv 0.005473 -0.052037 0.124016\nvn 0.9171 0.0012 0.3987\nv 0.004958 -0.058968 0.125222\nvn 0.9171 0.0012 0.3987\nv 0.00548 -0.058768 0.124022\nvn 0.9171 0.0012 0.3987\nv 0.00537 -0.047383 0.124379\nvn 0.9337 -0.0071 0.3579\nv 0.004958 -0.058968 0.125222\nvn 0.9337 -0.0071 0.3579\nv 0.005473 -0.052037 0.124016\nvn 0.9337 -0.0071 0.3579\nv 0.005511 -0.05214 0.123764\nvn 0.989 0.001 0.1478\nv 0.005473 -0.052037 0.124016\nvn 0.989 0.001 0.1478\nv 0.00548 -0.058768 0.124022\nvn 0.989 0.001 0.1478\nv 0.005625 -0.052063 0.123468\nvn 0.9325 0.0096 0.361\nv 0.005511 -0.05214 0.123764\nvn 0.9325 0.0096 0.361\nv 0.00548 -0.058768 0.124022\nvn 0.9325 0.0096 0.361\nv 0.005625 -0.052063 0.123468\nvn 0.9743 -0.0024 0.2253\nv 0.00548 -0.058768 0.124022\nvn 0.9741 -0.0024 0.226\nv 0.005655 -0.05874 0.123264\nvn 0.9745 -0.0024 0.2244\nv 0.005679 -0.045494 0.123299\nvn 0.9553 0.0033 0.2956\nv 0.005192 -0.045494 0.124876\nvn 0.9553 0.0033 0.2956\nv 0.005512 -0.046831 0.123855\nvn 0.9553 0.0033 0.2956\nv 0.005679 -0.045494 0.123299\nvn 0.9612 -0.0057 0.2759\nv 0.005512 -0.046831 0.123855\nvn 0.9612 -0.0057 0.2759\nv 0.005626 -0.047205 0.123449\nvn 0.9612 -0.0057 0.2759\nv 0.005679 -0.045494 0.123299\nvn 0.9972 -0.002 0.0742\nv 0.005655 -0.05874 0.123264\nvn 0.9972 -0.002 0.0742\nv 0.005735 -0.058876 0.122187\nvn 0.9972 -0.002 0.0742\nv 0.005679 -0.045494 0.123299\nvn 0.9747 -0.0024 0.2235\nv 0.005679 -0.045494 0.123299\nvn 0.9389 0.001 0.3442\nv 0.005626 -0.047205 0.123449\nvn 0.9389 0.001 0.3442\nv 0.005625 -0.052063 0.123468\nvn 0.9389 0.001 0.3442\nv 0.005703 -0.045494 0.121349\nvn 0.9999 0.0032 0.0118\nv 0.005679 -0.045494 0.123299\nvn 0.9999 0.0032 0.0118\nv 0.005735 -0.058876 0.122187\nvn 0.9999 0.0032 0.0118\nv 0.005703 -0.045494 0.121349\nvn 0.9895 -0.0066 -0.1446\nv 0.005735 -0.058876 0.122187\nvn 0.9895 -0.0066 -0.1446\nv 0.005555 -0.058944 0.120958\nvn 0.9895 -0.0066 -0.1446\nv 0.005703 -0.045494 0.121349\nvn 0.9375 -0.0001 -0.3481\nv 0.005555 -0.058944 0.120958\nvn 0.9375 -0.0001 -0.3481\nv 0.005219 -0.0597 0.120052\nvn 0.9375 -0.0001 -0.3481\nv 0.004824 -0.045494 0.119141\nvn 0.9291 0.0021 -0.3699\nv 0.005703 -0.045494 0.121349\nvn 0.9291 0.0021 -0.3699\nv 0.005219 -0.0597 0.120052\nvn 0.9291 0.0021 -0.3699\nv 0.004824 -0.045494 0.119141\nvn 0.9166 -0.0001 -0.3999\nv 0.005219 -0.0597 0.120052\nvn 0.9166 -0.0001 -0.3999\nv 0.004914 -0.058169 0.119353\nvn 0.9166 -0.0001 -0.3999\nv -0.003117 -0.079384 0.127171\nvn 0.0717 0.007 0.9974\nv -0.003057 -0.081313 0.12718\nvn 0.0717 0.007 0.9974\nv -0.002899 -0.077456 0.127142\nvn 0.0717 0.007 0.9974\nv -0.003057 -0.081313 0.12718\nvn 0.22 0.0008 0.9755\nv -0.003012 -0.081906 0.127171\nvn 0.22 0.0008 0.9755\nv -0.002899 -0.077456 0.127142\nvn 0.22 0.0008 0.9755\nv -0.003012 -0.081906 0.127171\nvn 0.2687 -0.0006 0.9632\nv -0.002945 -0.082805 0.127151\nvn 0.2687 -0.0006 0.9632\nv -0.002899 -0.077456 0.127142\nvn 0.2687 -0.0006 0.9632\nv -0.002945 -0.082805 0.127151\nvn -0.1533 0.0031 0.9882\nv -0.002686 -0.083717 0.127195\nvn -0.1533 0.0031 0.9882\nv -0.002899 -0.077456 0.127142\nvn -0.1533 0.0031 0.9882\nv -0.002899 -0.077456 0.127142\nvn -0.3002 -0.0022 0.9539\nv -0.002686 -0.083717 0.127195\nvn -0.3002 -0.0022 0.9539\nv -0.002632 -0.076881 0.127227\nvn -0.3002 -0.0022 0.9539\nv 0.004832 -0.079751 0.125473\nvn 0.9976 0.0062 -0.0695\nv 0.004838 -0.081479 0.125404\nvn 0.9976 0.0062 -0.0695\nv 0.004812 -0.078123 0.125333\nvn 0.9976 0.0062 -0.0695\nv 0.004838 -0.081479 0.125404\nvn 0.9479 0.0006 -0.3184\nv 0.004801 -0.08282 0.125292\nvn 0.9479 0.0006 -0.3184\nv 0.004812 -0.078123 0.125333\nvn 0.9479 0.0006 -0.3184\nv 0.004812 -0.078123 0.125333\nvn 0.9863 -0.0037 0.1647\nv 0.004801 -0.08282 0.125292\nvn 0.9863 -0.0037 0.1647\nv 0.004875 -0.076853 0.124987\nvn 0.9863 -0.0037 0.1647\nv 0.004875 -0.076853 0.124987\nvn 0.7192 0.0032 0.6947\nv 0.005074 -0.082778 0.124808\nvn 0.7192 0.0032 0.6947\nv 0.005014 -0.077385 0.124845\nvn 0.7192 0.0032 0.6947\nv 0.004857 -0.083727 0.12502\nvn 0.6927 0.0016 0.7212\nv 0.005074 -0.082778 0.124808\nvn 0.6927 0.0016 0.7212\nv 0.004875 -0.076853 0.124987\nvn 0.6927 0.0016 0.7212\nv 0.005014 -0.077385 0.124845\nvn 0.4798 -0.0007 0.8774\nv 0.005074 -0.082778 0.124808\nvn 0.4798 -0.0007 0.8774\nv 0.005112 -0.078215 0.124791\nvn 0.4798 -0.0007 0.8774\nv 0.005112 -0.078215 0.124791\nvn -0.0878 0.0044 0.9961\nv 0.005074 -0.082778 0.124808\nvn -0.0878 0.0044 0.9961\nv 0.005141 -0.078914 0.124797\nvn -0.0878 0.0044 0.9961\nv 0.005074 -0.082778 0.124808\nvn 0.2986 -0.0024 0.9544\nv 0.005175 -0.081554 0.12478\nvn 0.2986 -0.0024 0.9544\nv 0.005141 -0.078914 0.124797\nvn 0.2986 -0.0024 0.9544\nv 0.004801 -0.08282 0.125292\nvn 0.9789 -0.0016 0.2045\nv 0.004857 -0.083727 0.12502\nvn 0.9789 -0.0016 0.2045\nv 0.004875 -0.076853 0.124987\nvn 0.9789 -0.0016 0.2045\nv -0.004841 -0.08024 0.119242\nvn -0.9856 0 0.1692\nv -0.004835 -0.081345 0.119276\nvn -0.9856 0 0.1692\nv -0.004825 -0.078323 0.119334\nvn -0.9856 0 0.1692\nv -0.004825 -0.078323 0.119334\nvn -0.9937 0.0011 0.1122\nv -0.004835 -0.081345 0.119276\nvn -0.9937 0.0011 0.1122\nv -0.004809 -0.077452 0.11947\nvn -0.9937 0.0011 0.1122\nv -0.004835 -0.081345 0.119276\nvn -0.9901 -0.0003 0.1401\nv -0.004812 -0.083041 0.119435\nvn -0.9901 -0.0003 0.1401\nv -0.004809 -0.077452 0.11947\nvn -0.9901 -0.0003 0.1401\nv -0.004809 -0.077452 0.11947\nvn -0.9303 0.0028 -0.3668\nv -0.004812 -0.083041 0.119435\nvn -0.9303 0.0028 -0.3668\nv -0.00492 -0.076957 0.119756\nvn -0.9303 0.0028 -0.3668\nv -0.00492 -0.076957 0.119756\nvn -0.5165 -0.004 -0.8563\nv -0.005136 -0.082533 0.119912\nvn -0.5165 -0.004 -0.8563\nv -0.005153 -0.07867 0.119904\nvn -0.5165 -0.004 -0.8563\nv -0.004892 -0.083663 0.119719\nvn -0.6162 0.0018 -0.7876\nv -0.005136 -0.082533 0.119912\nvn -0.6162 0.0018 -0.7876\nv -0.00492 -0.076957 0.119756\nvn -0.6162 0.0018 -0.7876\nv -0.005153 -0.07867 0.119904\nvn -0.2775 -0.0031 -0.9607\nv -0.005136 -0.082533 0.119912\nvn -0.2775 -0.0031 -0.9607\nv -0.005209 -0.079673 0.119923\nvn -0.2775 -0.0031 -0.9607\nv -0.004812 -0.083041 0.119435\nvn -0.9609 -0.0025 -0.2768\nv -0.004892 -0.083663 0.119719\nvn -0.9609 -0.0025 -0.2768\nv -0.00492 -0.076957 0.119756\nvn -0.9609 -0.0025 -0.2768\nv -0.005091 -0.079471 0.124987\nvn -0.429 0.002 0.9033\nv -0.00508 -0.081189 0.124995\nvn -0.429 0.002 0.9033\nv -0.004961 -0.078003 0.125045\nvn -0.429 0.002 0.9033\nv -0.00508 -0.081189 0.124995\nvn -0.2279 -0.0066 0.9737\nv -0.005003 -0.082468 0.125005\nvn -0.2279 -0.0066 0.9737\nv -0.004961 -0.078003 0.125045\nvn -0.2279 -0.0066 0.9737\nv -0.000233 -0.080367 0.128073\nvn 0.746 0.001 0.666\nv -0.000158 -0.082651 0.127993\nvn 0.746 0.001 0.666\nv -0.000149 -0.077688 0.127974\nvn 0.746 0.001 0.666\nv -0.000244 -0.081274 0.128069\nvn 0.5686 -0.0104 0.8226\nv -0.000158 -0.082651 0.127993\nvn 0.5686 -0.0104 0.8226\nv -0.000233 -0.080367 0.128073\nvn 0.5686 -0.0104 0.8226\nv 0.00012 -0.083795 0.127885\nvn -0.2786 0.0017 0.9604\nv 0.000402 -0.082872 0.127965\nvn -0.2786 0.0017 0.9604\nv 0.000189 -0.07696 0.127893\nvn -0.2786 0.0017 0.9604\nv 0.000189 -0.07696 0.127893\nvn -0.3426 -0.0009 0.9395\nv 0.000402 -0.082872 0.127965\nvn -0.3426 -0.0009 0.9395\nv 0.000373 -0.077746 0.12796\nvn -0.3426 -0.0009 0.9395\nv -0.000158 -0.082651 0.127993\nvn 0.5837 0.0019 0.812\nv -8.5e-05 -0.083212 0.127941\nvn 0.5837 0.0019 0.812\nv -0.000149 -0.077688 0.127974\nvn 0.5837 0.0019 0.812\nv -0.000149 -0.077688 0.127974\nvn 0.2413 -0.0035 0.9704\nv 0.00012 -0.083795 0.127885\nvn 0.2413 -0.0035 0.9704\nv 0.000189 -0.07696 0.127893\nvn 0.2413 -0.0035 0.9704\nv -8.5e-05 -0.083212 0.127941\nvn 0.2556 -0.0028 0.9668\nv 0.00012 -0.083795 0.127885\nvn 0.2556 -0.0028 0.9668\nv -0.000149 -0.077688 0.127974\nvn 0.2556 -0.0028 0.9668\nv 0.00026 -0.080405 0.116599\nvn -0.612 -0.0007 -0.7909\nv 0.000241 -0.081278 0.116615\nvn -0.612 -0.0007 -0.7909\nv 0.000211 -0.078951 0.116636\nvn -0.612 -0.0007 -0.7909\nv 0.000241 -0.081278 0.116615\nvn -0.6522 -0.0015 -0.7581\nv 0.00016 -0.082636 0.116687\nvn -0.6522 -0.0015 -0.7581\nv 0.000211 -0.078951 0.116636\nvn -0.6522 -0.0015 -0.7581\nv 0.000211 -0.078951 0.116636\nvn -0.7311 0.0006 -0.6823\nv 0.00016 -0.082636 0.116687\nvn -0.7311 0.0006 -0.6823\nv 0.000138 -0.077629 0.116716\nvn -0.7311 0.0006 -0.6823\nv 0.00016 -0.082636 0.116687\nvn -0.798 -0.0001 -0.6026\nv 0.000126 -0.083216 0.116732\nvn -0.798 -0.0001 -0.6026\nv 0.000138 -0.077629 0.116716\nvn -0.798 -0.0001 -0.6026\nv -0.000167 -0.076837 0.116799\nvn 0.4905 -0.0028 -0.8714\nv -0.000212 -0.08371 0.116796\nvn 0.4905 -0.0028 -0.8714\nv -0.000526 -0.079729 0.116607\nvn 0.4905 -0.0028 -0.8714\nv 0.000138 -0.077629 0.116716\nvn -0.2596 0.0021 -0.9657\nv -0.000212 -0.08371 0.116796\nvn -0.2596 0.0021 -0.9657\nv -0.000167 -0.076837 0.116799\nvn -0.2596 0.0021 -0.9657\nv 0.000126 -0.083216 0.116732\nvn -0.1836 -0.0025 -0.983\nv -0.000212 -0.08371 0.116796\nvn -0.1836 -0.0025 -0.983\nv 0.000138 -0.077629 0.116716\nvn -0.1836 -0.0025 -0.983\nv 0.003158 -0.080429 0.117509\nvn 0.0271 0.0079 -0.9996\nv 0.003049 -0.081277 0.117499\nvn 0.0271 0.0079 -0.9996\nv 0.003028 -0.07849 0.117521\nvn 0.0271 0.0079 -0.9996\nv 0.003028 -0.07849 0.117521\nvn -0.1677 0.0018 -0.9858\nv 0.003013 -0.082193 0.117517\nvn -0.171 0.0017 -0.9853\nv 0.002929 -0.077554 0.117539\nvn -0.1758 0.0016 -0.9844\nv 0.003049 -0.081277 0.117499\nvn -0.4934 0.0031 -0.8698\nv 0.003013 -0.082193 0.117517\nvn -0.4934 0.0031 -0.8698\nv 0.003028 -0.07849 0.117521\nvn -0.4934 0.0031 -0.8698\nv 0.002899 -0.083144 0.117536\nvn -0.1783 0.0016 -0.984\nv 0.002929 -0.077554 0.117539\nvn 0.2734 -0.0008 -0.9619\nv 0.002638 -0.083702 0.117462\nvn 0.271 -0.0007 -0.9626\nv 0.002625 -0.076866 0.117454\nvn 0.2695 -0.0006 -0.963\nv 0.002625 -0.076866 0.117454\nvn 0.8385 -0.0063 -0.5449\nv 0.002429 -0.082581 0.117218\nvn 0.8385 -0.0063 -0.5449\nv 0.002447 -0.078705 0.1172\nvn 0.8385 -0.0063 -0.5449\nv 0.002638 -0.083702 0.117462\nvn 0.7618 0.0006 -0.6478\nv 0.002429 -0.082581 0.117218\nvn 0.7618 0.0006 -0.6478\nv 0.002625 -0.076866 0.117454\nvn 0.7618 0.0006 -0.6478\nv 0.002899 -0.083144 0.117536\nvn 0.275 -0.0009 -0.9614\nv 0.002429 -0.082581 0.117218\nvn 0.966 -0.0055 -0.2584\nv 0.002419 -0.080087 0.117124\nvn 0.966 -0.0055 -0.2584\nv 0.002447 -0.078705 0.1172\nvn 0.966 -0.0055 -0.2584\nv -0.005747 -0.08041 0.122071\nvn -0.8548 -0.0007 0.519\nv -0.005713 -0.081279 0.122127\nvn -0.8548 -0.0007 0.519\nv -0.005717 -0.079486 0.122124\nvn -0.8548 -0.0007 0.519\nv -0.005717 -0.079486 0.122124\nvn -0.6604 -0.0014 0.7509\nv -0.005659 -0.082643 0.122169\nvn -0.6604 -0.0014 0.7509\nv -0.005631 -0.077699 0.122202\nvn -0.6604 -0.0014 0.7509\nv -0.005713 -0.081279 0.122127\nvn -0.5996 0.0004 0.8003\nv -0.005659 -0.082643 0.122169\nvn -0.5996 0.0004 0.8003\nv -0.005717 -0.079486 0.122124\nvn -0.5996 0.0004 0.8003\nv -0.005541 -0.083811 0.12247\nvn -0.9121 0.0025 -0.4099\nv -0.005713 -0.081641 0.122866\nvn -0.9121 0.0025 -0.4099\nv -0.005541 -0.076815 0.122512\nvn -0.9121 0.0025 -0.4099\nv -0.005659 -0.082643 0.122169\nvn -0.8539 0.0012 0.5204\nv -0.0056 -0.083195 0.122266\nvn -0.8539 0.0012 0.5204\nv -0.005631 -0.077699 0.122202\nvn -0.8539 0.0012 0.5204\nv -0.005541 -0.076815 0.122512\nvn -0.8794 -0.0036 -0.4761\nv -0.005713 -0.081641 0.122866\nvn -0.8794 -0.0036 -0.4761\nv -0.005727 -0.079397 0.122875\nvn -0.8794 -0.0036 -0.4761\nv -0.005631 -0.077699 0.122202\nvn -0.9617 -0.0021 0.2741\nv -0.005541 -0.083811 0.12247\nvn -0.9599 -0.0018 0.2802\nv -0.005541 -0.076815 0.122512\nvn -0.9591 -0.0017 0.2832\nv -0.0056 -0.083195 0.122266\nvn -0.9627 -0.0023 0.2704\nv 0.002648 -0.079987 0.127436\nvn 0.9638 0.0015 0.2668\nv 0.002683 -0.08255 0.127324\nvn 0.9638 0.0015 0.2668\nv 0.002655 -0.079051 0.127406\nvn 0.9638 0.0015 0.2668\nv 0.002655 -0.079051 0.127406\nvn 0.9383 -0.0005 0.3459\nv 0.002683 -0.08255 0.127324\nvn 0.9383 -0.0005 0.3459\nv 0.002681 -0.078197 0.127336\nvn 0.9383 -0.0005 0.3459\nv 0.002681 -0.078197 0.127336\nvn 0.9468 -0.0005 0.3218\nv 0.002683 -0.08255 0.127324\nvn 0.9468 -0.0005 0.3218\nv 0.00271 -0.077441 0.127251\nvn 0.9468 -0.0005 0.3218\nv 0.002857 -0.083737 0.127094\nvn 0.31 0.0018 0.9507\nv 0.003143 -0.083234 0.127\nvn 0.31 0.0018 0.9507\nv 0.002916 -0.076898 0.127061\nvn 0.31 0.0018 0.9507\nv 0.002916 -0.076898 0.127061\nvn 0.1481 0.001 0.989\nv 0.003218 -0.082325 0.127022\nvn 0.1481 0.001 0.989\nv 0.003257 -0.078216 0.127012\nvn 0.1481 0.001 0.989\nv 0.003143 -0.083234 0.127\nvn -0.1198 -0.0139 0.9927\nv 0.003218 -0.082325 0.127022\nvn -0.1198 -0.0139 0.9927\nv 0.002916 -0.076898 0.127061\nvn -0.1198 -0.0139 0.9927\nv 0.00271 -0.077441 0.127251\nvn 0.68 -0.0024 0.7332\nv 0.002857 -0.083737 0.127094\nvn 0.68 -0.0024 0.7332\nv 0.002916 -0.076898 0.127061\nvn 0.68 -0.0024 0.7332\nv 0.003257 -0.078216 0.127012\nvn -0.2263 0.0045 0.974\nv 0.003218 -0.082325 0.127022\nvn -0.2263 0.0045 0.974\nv 0.003327 -0.080036 0.127036\nvn -0.2263 0.0045 0.974\nv 0.002683 -0.08255 0.127324\nvn 0.8076 0.0041 0.5897\nv 0.002857 -0.083737 0.127094\nvn 0.8076 0.0041 0.5897\nv 0.00271 -0.077441 0.127251\nvn 0.8076 0.0041 0.5897\nv 0.005736 -0.0804 0.122591\nvn 0.6294 0.0115 -0.777\nv 0.005715 -0.081279 0.122561\nvn 0.6294 0.0115 -0.777\nv 0.00574 -0.079367 0.12261\nvn 0.6294 0.0115 -0.777\nv 0.00574 -0.079367 0.12261\nvn 0.7702 0.0005 -0.6378\nv 0.005654 -0.08264 0.122503\nvn 0.7702 0.0005 -0.6378\nv 0.005627 -0.077689 0.122474\nvn 0.7702 0.0005 -0.6378\nv 0.005715 -0.081279 0.122561\nvn 0.4789 0.016 -0.8777\nv 0.005654 -0.08264 0.122503\nvn 0.4789 0.016 -0.8777\nv 0.00574 -0.079367 0.12261\nvn 0.4789 0.016 -0.8777\nv 0.005544 -0.083737 0.122186\nvn 0.9004 0.0016 0.435\nv 0.00572 -0.081352 0.121813\nvn 0.9004 0.0016 0.435\nv 0.00554 -0.076802 0.122169\nvn 0.9004 0.0016 0.435\nv 0.005654 -0.08264 0.122503\nvn 0.7388 0.0001 -0.674\nv 0.005602 -0.083208 0.122446\nvn 0.7388 0.0001 -0.674\nv 0.005627 -0.077689 0.122474\nvn 0.7388 0.0001 -0.674\nv 0.00554 -0.076802 0.122169\nvn 0.8929 0.0001 0.4502\nv 0.00572 -0.081352 0.121813\nvn 0.8929 0.0001 0.4502\nv 0.005711 -0.079049 0.121831\nvn 0.8929 0.0001 0.4502\nv 0.005627 -0.077689 0.122474\nvn 0.9598 -0.0028 -0.2807\nv 0.005602 -0.083208 0.122446\nvn 0.9598 -0.0028 -0.2807\nv 0.00554 -0.076802 0.122169\nvn 0.9598 -0.0028 -0.2807\nv 0.005602 -0.083208 0.122446\nvn 0.9755 0 -0.22\nv 0.005544 -0.083737 0.122186\nvn 0.9755 0 -0.22\nv 0.00554 -0.076802 0.122169\nvn 0.9755 0 -0.22\nv 0.005106 -0.08013 0.1197\nvn 0.2588 -0.0037 -0.9659\nv 0.005019 -0.08245 0.119685\nvn 0.2588 -0.0037 -0.9659\nv 0.005061 -0.079057 0.119683\nvn 0.2588 -0.0037 -0.9659\nv 0.005061 -0.079057 0.119683\nvn -0.9123 0.0109 -0.4094\nv 0.005019 -0.08245 0.119685\nvn -0.9123 0.0109 -0.4094\nv 0.005058 -0.078215 0.119712\nvn -0.9123 0.0109 -0.4094\nv 0.005058 -0.078215 0.119712\nvn 0.4904 0.0011 -0.8715\nv 0.005019 -0.08245 0.119685\nvn 0.4904 0.0011 -0.8715\nv 0.004907 -0.077437 0.119628\nvn 0.4904 0.0011 -0.8715\nv 0.004752 -0.083742 0.119484\nvn 0.9592 0.0021 -0.2827\nv 0.004672 -0.083072 0.119218\nvn 0.9592 0.0021 -0.2827\nv 0.004719 -0.076901 0.119421\nvn 0.9592 0.0021 -0.2827\nv 0.004719 -0.076901 0.119421\nvn 0.992 -0.0033 -0.1264\nv 0.004672 -0.083072 0.119218\nvn 0.992 -0.0033 -0.1264\nv 0.004672 -0.078246 0.119089\nvn 0.992 -0.0033 -0.1264\nv 0.004907 -0.077437 0.119628\nvn 0.7367 -0.0025 -0.6762\nv 0.004752 -0.083742 0.119484\nvn 0.7367 -0.0025 -0.6762\nv 0.004719 -0.076901 0.119421\nvn 0.7367 -0.0025 -0.6762\nv 0.004672 -0.078246 0.119089\nvn 0.9929 0.0033 0.119\nv 0.004672 -0.083072 0.119218\nvn 0.9929 0.0033 0.119\nv 0.004689 -0.079868 0.118991\nvn 0.9929 0.0033 0.119\nv 0.005019 -0.08245 0.119685\nvn 0.5897 0.0041 -0.8076\nv 0.004752 -0.083742 0.119484\nvn 0.5897 0.0041 -0.8076\nv 0.004907 -0.077437 0.119628\nvn 0.5897 0.0041 -0.8076\nv -0.002641 -0.079967 0.117235\nvn -0.9831 0.0006 -0.1828\nv -0.002645 -0.081206 0.117252\nvn -0.9831 0.0006 -0.1828\nv -0.002654 -0.078348 0.117312\nvn -0.9831 0.0006 -0.1828\nv -0.002645 -0.081206 0.117252\nvn -0.957 0.003 -0.29\nv -0.002681 -0.082564 0.117357\nvn -0.957 0.003 -0.29\nv -0.002654 -0.078348 0.117312\nvn -0.957 0.003 -0.29\nv -0.002654 -0.078348 0.117312\nvn -0.8979 0.001 -0.4402\nv -0.002681 -0.082564 0.117357\nvn -0.8979 0.001 -0.4402\nv -0.002713 -0.077449 0.117434\nvn -0.8979 0.001 -0.4402\nv -0.002859 -0.083736 0.117589\nvn -0.3111 0.0018 -0.9504\nv -0.003089 -0.083191 0.117665\nvn -0.3111 0.0018 -0.9504\nv -0.002921 -0.076902 0.117622\nvn -0.3111 0.0018 -0.9504\nv -0.002921 -0.076902 0.117622\nvn -0.1465 0 -0.9892\nv -0.003202 -0.082444 0.117664\nvn -0.1465 0 -0.9892\nv -0.003234 -0.078158 0.117669\nvn -0.1465 0 -0.9892\nv -0.003089 -0.083191 0.117665\nvn -0.0271 -0.0061 -0.9996\nv -0.003202 -0.082444 0.117664\nvn -0.0271 -0.0061 -0.9996\nv -0.002921 -0.076902 0.117622\nvn -0.0271 -0.0061 -0.9996\nv -0.003234 -0.078158 0.117669\nvn 0.4384 0.0044 -0.8988\nv -0.003202 -0.082444 0.117664\nvn 0.4384 0.0044 -0.8988\nv -0.003274 -0.079225 0.117644\nvn 0.4384 0.0044 -0.8988\nv -0.002713 -0.077449 0.117434\nvn -0.6756 -0.0025 -0.7373\nv -0.002859 -0.083736 0.117589\nvn -0.6756 -0.0025 -0.7373\nv -0.002921 -0.076902 0.117622\nvn -0.6756 -0.0025 -0.7373\nv -0.003202 -0.082444 0.117664\nvn 0.1708 -0.0022 -0.9853\nv -0.003303 -0.080807 0.117643\nvn 0.1708 -0.0022 -0.9853\nv -0.003274 -0.079225 0.117644\nvn 0.1708 -0.0022 -0.9853\nv -0.002681 -0.082564 0.117357\nvn -0.8031 0.0039 -0.5959\nv -0.002859 -0.083736 0.117589\nvn -0.8031 0.0039 -0.5959\nv -0.002713 -0.077449 0.117434\nvn -0.8031 0.0039 -0.5959\nv -0.003889 -0.075794 0.119549\nvn -0.7312 0.0066 -0.6821\nv -0.003753 -0.071505 0.119444\nvn -0.7312 0.0066 -0.6821\nv -0.002905 -0.071494 0.118535\nvn -0.7312 0.0066 -0.6821\nv -0.002469 -0.075794 0.118256\nvn -0.6731 -0.0202 -0.7393\nv -0.003889 -0.075794 0.119549\nvn -0.6731 -0.0202 -0.7393\nv -0.002905 -0.071494 0.118535\nvn -0.6731 -0.0202 -0.7393\nv -0.002469 -0.075794 0.118256\nvn -0.4136 0.0172 -0.9103\nv -0.002905 -0.071494 0.118535\nvn -0.4136 0.0172 -0.9103\nv -0.000887 -0.071491 0.117618\nvn -0.4136 0.0172 -0.9103\nv -0.004193 -0.075794 0.124624\nvn -0.7588 -0.0223 0.651\nv -0.002801 -0.075794 0.126246\nvn -0.7588 -0.0223 0.651\nv -0.003192 -0.071505 0.125938\nvn -0.7588 -0.0223 0.651\nv -0.00046 -0.075794 0.117558\nvn -0.328 -0.0193 -0.9445\nv -0.002469 -0.075794 0.118256\nvn -0.328 -0.0193 -0.9445\nv -0.000887 -0.071491 0.117618\nvn -0.328 -0.0193 -0.9445\nv -0.004193 -0.075794 0.124624\nvn -0.826 0.0202 0.5634\nv -0.003192 -0.071505 0.125938\nvn -0.826 0.0202 0.5634\nv -0.004383 -0.071505 0.124191\nvn -0.826 0.0202 0.5634\nv -0.004727 -0.075794 0.123005\nvn -0.9495 -0.0105 0.3136\nv -0.004193 -0.075794 0.124624\nvn -0.9495 -0.0105 0.3136\nv -0.004383 -0.071505 0.124191\nvn -0.9495 -0.0105 0.3136\nv -0.004727 -0.075794 0.123005\nvn -0.9741 0.0158 0.2257\nv -0.004383 -0.071505 0.124191\nvn -0.9741 0.0158 0.2257\nv -0.004726 -0.071503 0.122709\nvn -0.9741 0.0158 0.2257\nv -0.00046 -0.075794 0.117558\nvn 0.0377 0.0177 -0.9991\nv -0.000887 -0.071491 0.117618\nvn 0.0377 0.0177 -0.9991\nv 0.001023 -0.071495 0.11769\nvn 0.0377 0.0177 -0.9991\nv 0.002259 -0.075794 0.118077\nvn 0.1873 -0.0345 -0.9817\nv -0.00046 -0.075794 0.117558\nvn 0.1873 -0.0345 -0.9817\nv 0.001023 -0.071495 0.11769\nvn 0.1873 -0.0345 -0.9817\nv -0.004659 -0.075794 0.121302\nvn -0.9967 0.0106 -0.0799\nv -0.004726 -0.071503 0.122709\nvn -0.9967 0.0106 -0.0799\nv -0.004599 -0.071506 0.121125\nvn -0.9967 0.0106 -0.0799\nv -0.004659 -0.075794 0.121302\nvn -0.9992 -0.0025 -0.04\nv -0.004727 -0.075794 0.123005\nvn -0.9992 -0.0025 -0.04\nv -0.004726 -0.071503 0.122709\nvn -0.9992 -0.0025 -0.04\nv 0.002259 -0.075794 0.118077\nvn 0.3254 0.0085 -0.9455\nv 0.001023 -0.071495 0.11769\nvn 0.3254 0.0085 -0.9455\nv 0.002 -0.071497 0.118027\nvn 0.3254 0.0085 -0.9455\nv -0.003889 -0.075794 0.119549\nvn -0.893 0.0174 -0.4497\nv -0.004599 -0.071506 0.121125\nvn -0.893 0.0174 -0.4497\nv -0.003753 -0.071505 0.119444\nvn -0.893 0.0174 -0.4497\nv -0.003889 -0.075794 0.119549\nvn -0.9156 -0.0038 -0.4022\nv -0.004659 -0.075794 0.121302\nvn -0.9156 -0.0038 -0.4022\nv -0.004599 -0.071506 0.121125\nvn -0.9156 -0.0038 -0.4022\nv -0.001669 -0.071045 0.118317\nvn -0.4069 0.2586 -0.8761\nv -0.002259 -0.071365 0.118496\nvn -0.4069 0.2586 -0.8761\nv -0.002385 -0.070938 0.118681\nvn -0.4069 0.2586 -0.8761\nv -0.002259 -0.071365 0.118496\nvn -0.5373 0.0223 -0.8431\nv -0.000887 -0.071491 0.117618\nvn -0.5373 0.0223 -0.8431\nv -0.003753 -0.071505 0.119444\nvn -0.5373 0.0223 -0.8431\nv -0.003753 -0.071505 0.119444\nvn 0.0072 0.9998 0.019\nv -0.000887 -0.071491 0.117618\nvn 0.0072 0.9998 0.019\nv -0.002905 -0.071494 0.118535\nvn 0.0072 0.9998 0.019\nv -0.004372 -0.070681 0.120442\nvn -0.5686 -0.8097 -0.1451\nv -0.004075 -0.07095 0.120774\nvn -0.5686 -0.8097 -0.1451\nv -0.004319 -0.070945 0.121706\nvn -0.5686 -0.8097 -0.1451\nv -0.003393 -0.071103 0.125097\nvn -0.7961 0.0413 0.6037\nv -0.00392 -0.071324 0.124419\nvn -0.7961 0.0413 0.6037\nv -0.002825 -0.071407 0.125868\nvn -0.7961 0.0413 0.6037\nv -0.001208 -0.070777 0.118005\nvn -0.4674 -0.1967 -0.8619\nv -0.001669 -0.071045 0.118317\nvn -0.4674 -0.1967 -0.8619\nv -0.002385 -0.070938 0.118681\nvn -0.4674 -0.1967 -0.8619\nv 0.003377 -0.071504 0.118983\nvn 0.2637 0.8894 -0.3735\nv 0.002 -0.071497 0.118027\nvn 0.2637 0.8894 -0.3735\nv 0.001763 -0.071318 0.118286\nvn 0.2637 0.8894 -0.3735\nv -0.004075 -0.07095 0.120774\nvn -0.9517 0.1773 -0.2508\nv -0.004426 -0.071345 0.121828\nvn -0.9517 0.1773 -0.2508\nv -0.004319 -0.070945 0.121706\nvn -0.9517 0.1773 -0.2508\nv -0.004065 -0.070944 0.123953\nvn -0.8335 -0.3297 0.4434\nv -0.003393 -0.071103 0.125097\nvn -0.8335 -0.3297 0.4434\nv -0.003506 -0.070831 0.125089\nvn -0.8335 -0.3297 0.4434\nv -0.00392 -0.071324 0.124419\nvn -0.5028 0.7538 0.423\nv -0.004383 -0.071505 0.124191\nvn -0.5028 0.7538 0.423\nv -0.002825 -0.071407 0.125868\nvn -0.5028 0.7538 0.423\nv -0.004616 -0.070681 0.123578\nvn -0.5911 -0.7203 0.3629\nv -0.004065 -0.070944 0.123953\nvn -0.5911 -0.7203 0.3629\nv -0.003506 -0.070831 0.125089\nvn -0.5911 -0.7203 0.3629\nv -0.002825 -0.071407 0.125868\nvn -0.2267 0.9617 0.1543\nv -0.004383 -0.071505 0.124191\nvn -0.2267 0.9617 0.1543\nv -0.003192 -0.071505 0.125938\nvn -0.2267 0.9617 0.1543\nv -0.003628 -0.07068 0.11927\nvn -0.4474 -0.8479 -0.2846\nv -0.004075 -0.07095 0.120774\nvn -0.4474 -0.8479 -0.2846\nv -0.004372 -0.070681 0.120442\nvn -0.4474 -0.8479 -0.2846\nv -0.004075 -0.07095 0.120774\nvn -0.9544 0.089 -0.2848\nv -0.004049 -0.071325 0.120572\nvn -0.9544 0.089 -0.2848\nv -0.004426 -0.071345 0.121828\nvn -0.9544 0.089 -0.2848\nv -0.001669 -0.071045 0.118317\nvn -0.3613 0.1498 -0.9203\nv -0.001022 -0.07137 0.11801\nvn -0.3613 0.1498 -0.9203\nv -0.002259 -0.071365 0.118496\nvn -0.3613 0.1498 -0.9203\nv -0.004065 -0.070944 0.123953\nvn -0.7961 0.3227 0.512\nv -0.00392 -0.071324 0.124419\nvn -0.7961 0.3227 0.512\nv -0.003393 -0.071103 0.125097\nvn -0.7961 0.3227 0.512\nv -0.003628 -0.07068 0.11927\nvn -0.4296 -0.8581 -0.2811\nv -0.003443 -0.070862 0.119542\nvn -0.4296 -0.8581 -0.2811\nv -0.004075 -0.07095 0.120774\nvn -0.4296 -0.8581 -0.2811\nv -0.001208 -0.070777 0.118005\nvn -0.2751 -0.4882 -0.8282\nv -0.000334 -0.071235 0.117985\nvn -0.2751 -0.4882 -0.8282\nv -0.001669 -0.071045 0.118317\nvn -0.2751 -0.4882 -0.8282\nv -0.004049 -0.071325 0.120572\nvn -0.4072 0.907 -0.1075\nv -0.004599 -0.071506 0.121125\nvn -0.4072 0.907 -0.1075\nv -0.004426 -0.071345 0.121828\nvn -0.4072 0.907 -0.1075\nv -0.001022 -0.07137 0.11801\nvn -0.1274 0.9342 -0.3333\nv -0.000887 -0.071491 0.117618\nvn -0.1274 0.9342 -0.3333\nv -0.002259 -0.071365 0.118496\nvn -0.1274 0.9342 -0.3333\nv -0.000334 -0.071235 0.117985\nvn -0.1335 0.527 -0.8393\nv -0.001022 -0.07137 0.11801\nvn -0.1335 0.527 -0.8393\nv -0.001669 -0.071045 0.118317\nvn -0.1335 0.527 -0.8393\nv -0.003443 -0.070862 0.119542\nvn -0.875 -0.1526 -0.4595\nv -0.003402 -0.071238 0.119589\nvn -0.875 -0.1526 -0.4595\nv -0.004075 -0.07095 0.120774\nvn -0.875 -0.1526 -0.4595\nv -0.004075 -0.07095 0.120774\nvn -0.8226 0.2257 -0.5219\nv -0.003402 -0.071238 0.119589\nvn -0.8226 0.2257 -0.5219\nv -0.004049 -0.071325 0.120572\nvn -0.8226 0.2257 -0.5219\nv -0.001587 -0.070701 0.11784\nvn -0.0636 -0.955 -0.2896\nv 0.000439 -0.070862 0.117926\nvn -0.0636 -0.955 -0.2896\nv -0.001208 -0.070777 0.118005\nvn -0.0636 -0.955 -0.2896\nv -0.004616 -0.070681 0.123578\nvn -0.4916 -0.863 0.1168\nv -0.004349 -0.07095 0.122713\nvn -0.4916 -0.863 0.1168\nv -0.004065 -0.070944 0.123953\nvn -0.4916 -0.863 0.1168\nv -0.003402 -0.071238 0.119589\nvn -0.5118 0.8172 -0.2651\nv -0.003753 -0.071505 0.119444\nvn -0.5118 0.8172 -0.2651\nv -0.004049 -0.071325 0.120572\nvn -0.5118 0.8172 -0.2651\nv -0.004065 -0.070944 0.123953\nvn -0.9468 0.0305 0.3203\nv -0.004357 -0.071326 0.123127\nvn -0.9468 0.0305 0.3203\nv -0.00392 -0.071324 0.124419\nvn -0.9468 0.0305 0.3203\nv 0.000439 -0.070862 0.117926\nvn -0.0506 -0.0524 -0.9973\nv -0.000334 -0.071235 0.117985\nvn -0.0506 -0.0524 -0.9973\nv -0.001208 -0.070777 0.118005\nvn -0.0506 -0.0524 -0.9973\nv -0.004049 -0.071325 0.120572\nvn -0.5343 0.8015 -0.2685\nv -0.003753 -0.071505 0.119444\nvn -0.5343 0.8015 -0.2685\nv -0.004599 -0.071506 0.121125\nvn -0.5343 0.8015 -0.2685\nv -0.000103 -0.070691 0.117584\nvn -0.0578 -0.926 -0.3732\nv 0.000439 -0.070862 0.117926\nvn -0.0578 -0.926 -0.3732\nv -0.001587 -0.070701 0.11784\nvn -0.0578 -0.926 -0.3732\nv -0.002767 -0.07069 0.126211\nvn -0.2452 -0.8263 0.5071\nv -0.002137 -0.070845 0.126264\nvn -0.2452 -0.8263 0.5071\nv -0.001313 -0.070683 0.126926\nvn -0.2452 -0.8263 0.5071\nv -0.004357 -0.071326 0.123127\nvn -0.5984 0.7756 0.2009\nv -0.004726 -0.071503 0.122709\nvn -0.5984 0.7756 0.2009\nv -0.00392 -0.071324 0.124419\nvn -0.5984 0.7756 0.2009\nv -0.00392 -0.071324 0.124419\nvn -0.4028 0.9104 0.0945\nv -0.004726 -0.071503 0.122709\nvn -0.4028 0.9104 0.0945\nv -0.004383 -0.071505 0.124191\nvn -0.4028 0.9104 0.0945\nv -0.004349 -0.07095 0.122713\nvn -0.9428 0.2548 0.2151\nv -0.004357 -0.071326 0.123127\nvn -0.9428 0.2548 0.2151\nv -0.004065 -0.070944 0.123953\nvn -0.9428 0.2548 0.2151\nv -0.000334 -0.071235 0.117985\nvn -0.1148 0.4204 -0.9001\nv 0.001023 -0.071495 0.11769\nvn -0.1148 0.4204 -0.9001\nv -0.001022 -0.07137 0.11801\nvn -0.1148 0.4204 -0.9001\nv 0.001023 -0.071495 0.11769\nvn 0.0129 0.9564 -0.2917\nv -0.000887 -0.071491 0.117618\nvn 0.0129 0.9564 -0.2917\nv -0.001022 -0.07137 0.11801\nvn 0.0129 0.9564 -0.2917\nv -0.004616 -0.070681 0.123578\nvn -0.7496 -0.6614 -0.0255\nv -0.004319 -0.070945 0.121706\nvn -0.7496 -0.6614 -0.0255\nv -0.004349 -0.07095 0.122713\nvn -0.7496 -0.6614 -0.0255\nv -0.002776 -0.070678 0.118494\nvn -0.3655 -0.8385 -0.4041\nv -0.002385 -0.070938 0.118681\nvn -0.3655 -0.8385 -0.4041\nv -0.003628 -0.07068 0.11927\nvn -0.3655 -0.8385 -0.4041\nv -0.002137 -0.070845 0.126264\nvn -0.6502 -0.1763 0.739\nv -0.003393 -0.071103 0.125097\nvn -0.6502 -0.1763 0.739\nv -0.002403 -0.071124 0.125963\nvn -0.6502 -0.1763 0.739\nv -0.003628 -0.07068 0.11927\nvn -0.3455 -0.8718 -0.3473\nv -0.002385 -0.070938 0.118681\nvn -0.3455 -0.8718 -0.3473\nv -0.003443 -0.070862 0.119542\nvn -0.3455 -0.8718 -0.3473\nv -0.004349 -0.07095 0.122713\nvn -0.9957 0.0765 0.0519\nv -0.004426 -0.071345 0.121828\nvn -0.9957 0.0765 0.0519\nv -0.004357 -0.071326 0.123127\nvn -0.9957 0.0765 0.0519\nv 0.000439 -0.070862 0.117926\nvn 0.07 -0.2956 -0.9528\nv 0.000666 -0.071168 0.118038\nvn 0.07 -0.2956 -0.9528\nv -0.000334 -0.071235 0.117985\nvn 0.07 -0.2956 -0.9528\nv -0.002767 -0.07069 0.126211\nvn -0.2508 -0.9264 0.2809\nv -0.003506 -0.070831 0.125089\nvn -0.2508 -0.9264 0.2809\nv -0.002137 -0.070845 0.126264\nvn -0.2508 -0.9264 0.2809\nv -0.004738 -0.070676 0.121929\nvn -0.5269 -0.8492 0.0363\nv -0.004319 -0.070945 0.121706\nvn -0.5269 -0.8492 0.0363\nv -0.004616 -0.070681 0.123578\nvn -0.5269 -0.8492 0.0363\nv 0.000666 -0.071168 0.118038\nvn 0.039 0.1909 -0.9808\nv 0.002 -0.071497 0.118027\nvn 0.039 0.1909 -0.9808\nv -0.000334 -0.071235 0.117985\nvn 0.039 0.1909 -0.9808\nv -0.003443 -0.070862 0.119542\nvn -0.6301 -0.1632 -0.7591\nv -0.002385 -0.070938 0.118681\nvn -0.6301 -0.1632 -0.7591\nv -0.003402 -0.071238 0.119589\nvn -0.6301 -0.1632 -0.7591\nv -0.003506 -0.070831 0.125089\nvn -0.6343 -0.238 0.7355\nv -0.003393 -0.071103 0.125097\nvn -0.6343 -0.238 0.7355\nv -0.002137 -0.070845 0.126264\nvn -0.6343 -0.238 0.7355\nv -0.000334 -0.071235 0.117985\nvn 0.1116 0.9418 -0.3171\nv 0.002 -0.071497 0.118027\nvn 0.1116 0.9418 -0.3171\nv 0.001023 -0.071495 0.11769\nvn 0.1116 0.9418 -0.3171\nv -0.002385 -0.070938 0.118681\nvn -0.6803 0.1122 -0.7243\nv -0.002259 -0.071365 0.118496\nvn -0.6803 0.1122 -0.7243\nv -0.003402 -0.071238 0.119589\nvn -0.6803 0.1122 -0.7243\nv -0.003393 -0.071103 0.125097\nvn -0.5289 0.5802 0.6194\nv -0.002825 -0.071407 0.125868\nvn -0.5289 0.5802 0.6194\nv -0.002403 -0.071124 0.125963\nvn -0.5289 0.5802 0.6194\nv 0.001313 -0.070683 0.117757\nvn 0.0556 -0.9072 -0.4169\nv 0.001909 -0.070944 0.118404\nvn 0.0556 -0.9072 -0.4169\nv -0.000103 -0.070691 0.117584\nvn 0.0556 -0.9072 -0.4169\nv -0.000103 -0.070691 0.117584\nvn 0.1662 -0.7504 -0.6398\nv 0.001909 -0.070944 0.118404\nvn 0.1662 -0.7504 -0.6398\nv 0.000439 -0.070862 0.117926\nvn 0.1662 -0.7504 -0.6398\nv -0.004426 -0.071345 0.121828\nvn -0.4415 0.8972 0.0106\nv -0.004726 -0.071503 0.122709\nvn -0.4415 0.8972 0.0106\nv -0.004357 -0.071326 0.123127\nvn -0.4415 0.8972 0.0106\nv -0.004319 -0.070945 0.121706\nvn -0.9679 0.2496 -0.0278\nv -0.004426 -0.071345 0.121828\nvn -0.9679 0.2496 -0.0278\nv -0.004349 -0.07095 0.122713\nvn -0.9679 0.2496 -0.0278\nv 0.000439 -0.070862 0.117926\nvn 0.3008 -0.1217 -0.9459\nv 0.001909 -0.070944 0.118404\nvn 0.3008 -0.1217 -0.9459\nv 0.000666 -0.071168 0.118038\nvn 0.3008 -0.1217 -0.9459\nv -0.002259 -0.071365 0.118496\nvn -0.3871 0.7779 -0.495\nv -0.003753 -0.071505 0.119444\nvn -0.3871 0.7779 -0.495\nv -0.003402 -0.071238 0.119589\nvn -0.3871 0.7779 -0.495\nv -0.001587 -0.070701 0.11784\nvn -0.1168 -0.9771 -0.1779\nv -0.001208 -0.070777 0.118005\nvn -0.1168 -0.9771 -0.1779\nv -0.002776 -0.070678 0.118494\nvn -0.1168 -0.9771 -0.1779\nv -0.004372 -0.070681 0.120442\nvn -0.5879 -0.7965 -0.1416\nv -0.004319 -0.070945 0.121706\nvn -0.5879 -0.7965 -0.1416\nv -0.004738 -0.070676 0.121929\nvn -0.5879 -0.7965 -0.1416\nv 0.001909 -0.070944 0.118404\nvn 0.2425 0.2055 -0.9481\nv 0.001763 -0.071318 0.118286\nvn 0.2425 0.2055 -0.9481\nv 0.000666 -0.071168 0.118038\nvn 0.2425 0.2055 -0.9481\nv -0.004426 -0.071345 0.121828\nvn -0.5705 0.8199 -0.0472\nv -0.004599 -0.071506 0.121125\nvn -0.5705 0.8199 -0.0472\nv -0.004726 -0.071503 0.122709\nvn -0.5705 0.8199 -0.0472\nv -0.003744 -0.070694 0.125299\nvn 0.0219 -0.9996 -0.019\nv -0.004616 -0.070681 0.123578\nvn 0.0219 -0.9996 -0.019\nv -0.002767 -0.07069 0.126211\nvn 0.0219 -0.9996 -0.019\nv -0.002776 -0.070678 0.118494\nvn -0.2328 -0.7726 -0.5907\nv -0.001208 -0.070777 0.118005\nvn -0.2328 -0.7726 -0.5907\nv -0.002385 -0.070938 0.118681\nvn -0.2328 -0.7726 -0.5907\nv 0.000666 -0.071168 0.118038\nvn 0.2149 0.8843 -0.4147\nv 0.001763 -0.071318 0.118286\nvn 0.2149 0.8843 -0.4147\nv 0.002 -0.071497 0.118027\nvn 0.2149 0.8843 -0.4147\nv -0.004616 -0.070681 0.123578\nvn -0.788 -0.272 0.5523\nv -0.003506 -0.070831 0.125089\nvn -0.788 -0.272 0.5523\nv -0.002767 -0.07069 0.126211\nvn -0.788 -0.272 0.5523\nv -0.003776 -0.068803 0.119356\nvn -0.8845 0.0111 -0.4664\nv -0.004372 -0.070681 0.120442\nvn -0.8845 0.0111 -0.4664\nv -0.004633 -0.06881 0.120981\nvn -0.8845 0.0111 -0.4664\nv -0.003776 -0.068803 0.119356\nvn -0.8435 -0.0419 -0.5354\nv -0.003628 -0.07068 0.11927\nvn -0.8435 -0.0419 -0.5354\nv -0.004372 -0.070681 0.120442\nvn -0.8435 -0.0419 -0.5354\nv -0.003535 -0.068802 0.125594\nvn -0.6045 0.0148 0.7965\nv -0.002767 -0.07069 0.126211\nvn -0.6045 0.0148 0.7965\nv -0.002083 -0.068808 0.126696\nvn -0.6045 0.0148 0.7965\nv -0.002034 -0.068801 0.117926\nvn -0.6345 0.0168 -0.7727\nv -0.002776 -0.070678 0.118494\nvn -0.6345 0.0168 -0.7727\nv -0.003776 -0.068803 0.119356\nvn -0.6345 0.0168 -0.7727\nv -0.003776 -0.068803 0.119356\nvn -0.6729 -0.019 -0.7395\nv -0.002776 -0.070678 0.118494\nvn -0.6729 -0.019 -0.7395\nv -0.003628 -0.07068 0.11927\nvn -0.6729 -0.019 -0.7395\nv -0.003535 -0.068802 0.125594\nvn -0.682 -0.0384 0.7303\nv -0.003744 -0.070694 0.125299\nvn -0.682 -0.0384 0.7303\nv -0.002767 -0.07069 0.126211\nvn -0.682 -0.0384 0.7303\nv -0.002034 -0.068801 0.117926\nvn -0.482 -0.0738 -0.873\nv -0.001587 -0.070701 0.11784\nvn -0.482 -0.0738 -0.873\nv -0.002776 -0.070678 0.118494\nvn -0.482 -0.0738 -0.873\nv -0.004378 -0.0688 0.124358\nvn -0.8261 0.0035 0.5635\nv -0.003744 -0.070694 0.125299\nvn -0.8261 0.0035 0.5635\nv -0.003535 -0.068802 0.125594\nvn -0.8261 0.0035 0.5635\nv -0.004378 -0.0688 0.124358\nvn -0.8898 -0.074 0.4503\nv -0.004616 -0.070681 0.123578\nvn -0.8898 -0.074 0.4503\nv -0.003744 -0.070694 0.125299\nvn -0.8898 -0.074 0.4503\nv -0.000345 -0.068801 0.117564\nvn -0.2097 -0.0375 -0.977\nv -0.000103 -0.070691 0.117584\nvn -0.2097 -0.0375 -0.977\nv -0.002034 -0.068801 0.117926\nvn -0.2097 -0.0375 -0.977\nv -0.002034 -0.068801 0.117926\nvn -0.1698 0.0048 -0.9855\nv -0.000103 -0.070691 0.117584\nvn -0.1698 0.0048 -0.9855\nv -0.001587 -0.070701 0.11784\nvn -0.1698 0.0048 -0.9855\nv -0.004784 -0.068808 0.122927\nvn -0.9621 0.0089 0.2727\nv -0.004616 -0.070681 0.123578\nvn -0.9621 0.0089 0.2727\nv -0.004378 -0.0688 0.124358\nvn -0.9621 0.0089 0.2727\nv 0.001079 -0.068812 0.117653\nvn 0.0628 -0.0028 -0.998\nv -0.000103 -0.070691 0.117584\nvn 0.0628 -0.0028 -0.998\nv -0.000345 -0.068801 0.117564\nvn 0.0628 -0.0028 -0.998\nv 0.001079 -0.068812 0.117653\nvn 0.1211 -0.0397 -0.9918\nv 0.001313 -0.070683 0.117757\nvn 0.1211 -0.0397 -0.9918\nv -0.000103 -0.070691 0.117584\nvn 0.1211 -0.0397 -0.9918\nv -0.004784 -0.068808 0.122927\nvn -0.9953 -0.0636 0.0731\nv -0.004738 -0.070676 0.121929\nvn -0.9953 -0.0636 0.0731\nv -0.004616 -0.070681 0.123578\nvn -0.9953 -0.0636 0.0731\nv -0.004633 -0.06881 0.120981\nvn -0.9969 0.0167 -0.0773\nv -0.004738 -0.070676 0.121929\nvn -0.9969 0.0167 -0.0773\nv -0.004784 -0.068808 0.122927\nvn -0.9969 0.0167 -0.0773\nv 0.002644 -0.070695 0.118385\nvn 0.4263 -0.0424 -0.9036\nv 0.001313 -0.070683 0.117757\nvn 0.4263 -0.0424 -0.9036\nv 0.002627 -0.068804 0.118289\nvn 0.4263 -0.0424 -0.9036\nv 0.002627 -0.068804 0.118289\nvn 0.3797 -0.0037 -0.9251\nv 0.001313 -0.070683 0.117757\nvn 0.3797 -0.0037 -0.9251\nv 0.001079 -0.068812 0.117653\nvn 0.3797 -0.0037 -0.9251\nv -0.004633 -0.06881 0.120981\nvn -0.969 -0.0665 -0.238\nv -0.004372 -0.070681 0.120442\nvn -0.969 -0.0665 -0.238\nv -0.004738 -0.070676 0.121929\nvn -0.969 -0.0665 -0.238\nv -0.003 -0.068295 0.125627\nvn -0.7717 0.2828 0.5696\nv -0.003981 -0.068604 0.12445\nvn -0.7717 0.2828 0.5696\nv -0.003268 -0.068605 0.125416\nvn -0.7717 0.2828 0.5696\nv -0.0035 -0.068253 0.125108\nvn -0.7039 -0.2681 0.6577\nv -0.003981 -0.068604 0.12445\nvn -0.7039 -0.2681 0.6577\nv -0.003 -0.068295 0.125627\nvn -0.7039 -0.2681 0.6577\nv -0.001269 -0.067995 0.117632\nvn -0.0379 -0.9962 -0.079\nv -0.000698 -0.068023 0.117707\nvn -0.0379 -0.9962 -0.079\nv -0.002851 -0.067994 0.118386\nvn -0.0379 -0.9962 -0.079\nv -0.003145 -0.068021 0.125864\nvn -0.8017 -0.3501 0.4844\nv -0.004026 -0.068272 0.124224\nvn -0.8017 -0.3501 0.4844\nv -0.0035 -0.068253 0.125108\nvn -0.8017 -0.3501 0.4844\nv -0.004404 -0.068112 0.123554\nvn -0.8752 -0.0617 0.4798\nv -0.004026 -0.068272 0.124224\nvn -0.8752 -0.0617 0.4798\nv -0.003145 -0.068021 0.125864\nvn -0.8752 -0.0617 0.4798\nv -0.000698 -0.068023 0.117707\nvn -0.2059 -0.755 -0.6225\nv -0.002064 -0.068097 0.11825\nvn -0.2059 -0.755 -0.6225\nv -0.002851 -0.067994 0.118386\nvn -0.2059 -0.755 -0.6225\nv -0.004271 -0.068272 0.12111\nvn -0.9372 0.311 -0.1578\nv -0.004451 -0.068615 0.121504\nvn -0.9372 0.311 -0.1578\nv -0.004423 -0.068292 0.121975\nvn -0.9372 0.311 -0.1578\nv -0.003981 -0.068604 0.12445\nvn -0.4213 0.8517 0.3117\nv -0.003535 -0.068802 0.125594\nvn -0.4213 0.8517 0.3117\nv -0.003268 -0.068605 0.125416\nvn -0.4213 0.8517 0.3117\nv -0.002262 -0.068263 0.118504\nvn -0.4228 -0.0429 -0.9052\nv -0.001368 -0.06858 0.118101\nvn -0.4228 -0.0429 -0.9052\nv -0.002805 -0.068642 0.118775\nvn -0.4228 -0.0429 -0.9052\nv -0.004608 -0.067988 0.120806\nvn -0.1638 -0.9821 -0.0932\nv -0.004065 -0.06797 0.119661\nvn -0.1638 -0.9821 -0.0932\nv -0.004547 -0.068047 0.121315\nvn -0.1638 -0.9821 -0.0932\nv -0.004065 -0.06797 0.119661\nvn -0.5077 -0.841 -0.187\nv -0.00377 -0.068216 0.119967\nvn -0.5077 -0.841 -0.187\nv -0.004547 -0.068047 0.121315\nvn -0.5077 -0.841 -0.187\nv -0.002064 -0.068097 0.11825\nvn -0.4969 -0.4959 -0.7122\nv -0.001368 -0.06858 0.118101\nvn -0.4969 -0.4959 -0.7122\nv -0.002262 -0.068263 0.118504\nvn -0.4969 -0.4959 -0.7122\nv -0.000698 -0.068023 0.117707\nvn -0.2211 -0.7215 -0.6561\nv -0.000547 -0.068272 0.117931\nvn -0.2211 -0.7215 -0.6561\nv -0.002064 -0.068097 0.11825\nvn -0.2211 -0.7215 -0.6561\nv -0.001368 -0.06858 0.118101\nvn -0.2071 0.9103 -0.3584\nv -0.002034 -0.068801 0.117926\nvn -0.2071 0.9103 -0.3584\nv -0.002805 -0.068642 0.118775\nvn -0.2071 0.9103 -0.3584\nv -0.004547 -0.068047 0.121315\nvn -0.7339 -0.5822 -0.3498\nv -0.00377 -0.068216 0.119967\nvn -0.7339 -0.5822 -0.3498\nv -0.004271 -0.068272 0.12111\nvn -0.7339 -0.5822 -0.3498\nv -0.004026 -0.068272 0.124224\nvn -0.84 0.223 0.4947\nv -0.003981 -0.068604 0.12445\nvn -0.84 0.223 0.4947\nv -0.0035 -0.068253 0.125108\nvn -0.84 0.223 0.4947\nv -0.000547 -0.068272 0.117931\nvn -0.2054 0.0065 -0.9787\nv -0.001368 -0.06858 0.118101\nvn -0.2054 0.0065 -0.9787\nv -0.002064 -0.068097 0.11825\nvn -0.2054 0.0065 -0.9787\nv -0.004271 -0.068272 0.12111\nvn -0.925 0.0543 -0.376\nv -0.003843 -0.068605 0.120009\nvn -0.925 0.0543 -0.376\nv -0.004451 -0.068615 0.121504\nvn -0.925 0.0543 -0.376\nv -0.00377 -0.068216 0.119967\nvn -0.9109 0.1273 -0.3926\nv -0.003843 -0.068605 0.120009\nvn -0.9109 0.1273 -0.3926\nv -0.004271 -0.068272 0.12111\nvn -0.9109 0.1273 -0.3926\nv -0.003981 -0.068604 0.12445\nvn -0.4781 0.815 0.3275\nv -0.004378 -0.0688 0.124358\nvn -0.4781 0.815 0.3275\nv -0.003535 -0.068802 0.125594\nvn -0.4781 0.815 0.3275\nv 0.000464 -0.067995 0.117486\nvn -0.0192 -0.9747 -0.2229\nv -0.000698 -0.068023 0.117707\nvn -0.0204 -0.9732 -0.2291\nv -0.001269 -0.067995 0.117632\nvn -0.0185 -0.9755 -0.2192\nv -0.003843 -0.068605 0.120009\nvn -0.6868 0.6729 -0.2747\nv -0.003776 -0.068803 0.119356\nvn -0.6868 0.6729 -0.2747\nv -0.004451 -0.068615 0.121504\nvn -0.6868 0.6729 -0.2747\nv -0.004451 -0.068615 0.121504\nvn -0.3863 0.9004 -0.2001\nv -0.003776 -0.068803 0.119356\nvn -0.3863 0.9004 -0.2001\nv -0.004633 -0.06881 0.120981\nvn -0.3863 0.9004 -0.2001\nv -0.001368 -0.06858 0.118101\nvn -0.1213 0.8156 -0.5658\nv -0.000345 -0.068801 0.117564\nvn -0.1213 0.8156 -0.5658\nv -0.002034 -0.068801 0.117926\nvn -0.1213 0.8156 -0.5658\nv -0.004404 -0.068112 0.123554\nvn -0.8179 -0.4537 0.3538\nv -0.004375 -0.06852 0.123099\nvn -0.8179 -0.4537 0.3538\nv -0.004026 -0.068272 0.124224\nvn -0.8179 -0.4537 0.3538\nv -0.000547 -0.068272 0.117931\nvn -0.1649 -0.1028 -0.9809\nv 0.000229 -0.068591 0.117834\nvn -0.1649 -0.1028 -0.9809\nv -0.001368 -0.06858 0.118101\nvn -0.1649 -0.1028 -0.9809\nv -0.000698 -0.068023 0.117707\nvn 0.0149 -0.662 -0.7494\nv 0.000551 -0.068064 0.117769\nvn 0.0149 -0.662 -0.7494\nv -0.000547 -0.068272 0.117931\nvn 0.0149 -0.662 -0.7494\nv -0.004026 -0.068272 0.124224\nvn -0.957 0.0628 0.2831\nv -0.004375 -0.06852 0.123099\nvn -0.957 0.0628 0.2831\nv -0.003981 -0.068604 0.12445\nvn -0.957 0.0628 0.2831\nv -0.004065 -0.06797 0.119661\nvn -0.4176 -0.861 -0.2902\nv -0.003079 -0.06827 0.119133\nvn -0.4176 -0.861 -0.2902\nv -0.00377 -0.068216 0.119967\nvn -0.4176 -0.861 -0.2902\nv 0.000229 -0.068591 0.117834\nvn -0.0779 0.8614 -0.502\nv -0.000345 -0.068801 0.117564\nvn -0.0779 0.8614 -0.502\nv -0.001368 -0.06858 0.118101\nvn -0.0779 0.8614 -0.502\nv -0.004375 -0.06852 0.123099\nvn -0.4694 0.8622 0.1907\nv -0.004378 -0.0688 0.124358\nvn -0.4694 0.8622 0.1907\nv -0.003981 -0.068604 0.12445\nvn -0.4694 0.8622 0.1907\nv -0.003145 -0.068021 0.125864\nvn -0.3687 -0.7116 0.598\nv -0.003 -0.068295 0.125627\nvn -0.3687 -0.7116 0.598\nv -0.001753 -0.068266 0.12643\nvn -0.3687 -0.7116 0.598\nv 0.000551 -0.068064 0.117769\nvn 0.0087 -0.6424 -0.7664\nv 0.000662 -0.068272 0.117944\nvn 0.0087 -0.6424 -0.7664\nv -0.000547 -0.068272 0.117931\nvn 0.0087 -0.6424 -0.7664\nv -0.003 -0.068295 0.125627\nvn -0.532 0.2224 0.8171\nv -0.002463 -0.06853 0.12604\nvn -0.532 0.2224 0.8171\nv -0.001753 -0.068266 0.12643\nvn -0.532 0.2224 0.8171\nv -0.00487 -0.067995 0.12208\nvn -0.1196 -0.9927 0.0172\nv -0.004547 -0.068047 0.121315\nvn -0.1196 -0.9927 0.0172\nv -0.004653 -0.067991 0.123801\nvn -0.1196 -0.9927 0.0172\nv 0.000551 -0.068064 0.117769\nvn -0.0211 -0.9723 -0.2326\nv -0.003079 -0.06827 0.119133\nvn -0.767 0.0517 -0.6396\nv -0.002805 -0.068642 0.118775\nvn -0.767 0.0517 -0.6396\nv -0.00377 -0.068216 0.119967\nvn -0.767 0.0517 -0.6396\nv -0.00377 -0.068216 0.119967\nvn -0.7624 0.0721 -0.6431\nv -0.002805 -0.068642 0.118775\nvn -0.7624 0.0721 -0.6431\nv -0.003843 -0.068605 0.120009\nvn -0.7624 0.0721 -0.6431\nv -0.004653 -0.067991 0.123801\nvn -0.436 -0.9 0.0016\nv -0.004547 -0.068047 0.121315\nvn -0.436 -0.9 0.0016\nv -0.004404 -0.068112 0.123554\nvn -0.436 -0.9 0.0016\nv 0.000662 -0.068272 0.117944\nvn 0.0109 0.3142 -0.9493\nv 0.000229 -0.068591 0.117834\nvn 0.0109 0.3142 -0.9493\nv -0.000547 -0.068272 0.117931\nvn 0.0109 0.3142 -0.9493\nv -0.002851 -0.067994 0.118386\nvn -0.1499 -0.9809 -0.1241\nv -0.002064 -0.068097 0.11825\nvn -0.1499 -0.9809 -0.1241\nv -0.004065 -0.06797 0.119661\nvn -0.1499 -0.9809 -0.1241\nv -0.004547 -0.068047 0.121315\nvn -0.9389 -0.3407 0.0499\nv -0.004423 -0.068292 0.121975\nvn -0.9389 -0.3407 0.0499\nv -0.004404 -0.068112 0.123554\nvn -0.9389 -0.3407 0.0499\nv 0.000229 -0.068591 0.117834\nvn 0.048 0.7375 -0.6736\nv 0.001079 -0.068812 0.117653\nvn 0.048 0.7375 -0.6736\nv -0.000345 -0.068801 0.117564\nvn 0.048 0.7375 -0.6736\nv -0.002805 -0.068642 0.118775\nvn -0.3311 0.8929 -0.305\nv -0.003776 -0.068803 0.119356\nvn -0.3311 0.8929 -0.305\nv -0.003843 -0.068605 0.120009\nvn -0.3311 0.8929 -0.305\nv -0.003844 -0.067995 0.125343\nvn -0.2774 -0.9033 0.3274\nv -0.003145 -0.068021 0.125864\nvn -0.2774 -0.9033 0.3274\nv -0.002351 -0.067989 0.126625\nvn -0.2774 -0.9033 0.3274\nv -0.002064 -0.068097 0.11825\nvn -0.5228 -0.4909 -0.6969\nv -0.003079 -0.06827 0.119133\nvn -0.5228 -0.4909 -0.6969\nv -0.004065 -0.06797 0.119661\nvn -0.5228 -0.4909 -0.6969\nv -0.004404 -0.068112 0.123554\nvn -0.9951 -0.0966 0.0227\nv -0.004423 -0.068292 0.121975\nvn -0.9951 -0.0966 0.0227\nv -0.004375 -0.06852 0.123099\nvn -0.9951 -0.0966 0.0227\nv -0.003145 -0.068021 0.125864\nvn -0.5455 -0.6942 0.4695\nv -0.0035 -0.068253 0.125108\nvn -0.5455 -0.6942 0.4695\nv -0.003 -0.068295 0.125627\nvn -0.5455 -0.6942 0.4695\nv -0.004375 -0.06852 0.123099\nvn -0.6154 0.7697 0.1698\nv -0.004784 -0.068808 0.122927\nvn -0.6154 0.7697 0.1698\nv -0.004378 -0.0688 0.124358\nvn -0.6154 0.7697 0.1698\nv -0.004423 -0.068292 0.121975\nvn -0.9987 0.0194 0.0464\nv -0.004451 -0.068615 0.121504\nvn -0.9987 0.0194 0.0464\nv -0.004375 -0.06852 0.123099\nvn -0.9987 0.0194 0.0464\nv -0.00487 -0.067995 0.12208\nvn -0.3192 -0.9451 -0.0705\nv -0.004608 -0.067988 0.120806\nvn -0.3192 -0.9451 -0.0705\nv -0.004547 -0.068047 0.121315\nvn -0.3192 -0.9451 -0.0705\nv 0.000464 -0.067995 0.117486\nvn 0.0741 -0.9628 -0.2597\nv 0.001947 -0.067988 0.117883\nvn 0.0741 -0.9628 -0.2597\nv 0.000551 -0.068064 0.117769\nvn 0.0741 -0.9628 -0.2597\nv -0.002064 -0.068097 0.11825\nvn -0.5462 -0.4387 -0.7136\nv -0.002262 -0.068263 0.118504\nvn -0.5462 -0.4387 -0.7136\nv -0.003079 -0.06827 0.119133\nvn -0.5462 -0.4387 -0.7136\nv -0.002262 -0.068263 0.118504\nvn -0.585 0.297 -0.7547\nv -0.002805 -0.068642 0.118775\nvn -0.585 0.297 -0.7547\nv -0.003079 -0.06827 0.119133\nvn -0.585 0.297 -0.7547\nv -0.003 -0.068295 0.125627\nvn -0.6118 -0.0063 0.791\nv -0.003268 -0.068605 0.125416\nvn -0.6118 -0.0063 0.791\nv -0.002463 -0.06853 0.12604\nvn -0.6118 -0.0063 0.791\nv 0.000551 -0.068064 0.117769\nvn 0.2328 -0.5518 -0.8009\nv 0.001734 -0.068111 0.118146\nvn 0.2328 -0.5518 -0.8009\nv 0.000662 -0.068272 0.117944\nvn 0.2328 -0.5518 -0.8009\nv -0.004451 -0.068615 0.121504\nvn -0.5706 0.8209 -0.022\nv -0.004784 -0.068808 0.122927\nvn -0.5706 0.8209 -0.022\nv -0.004375 -0.06852 0.123099\nvn -0.5706 0.8209 -0.022\nv -0.004547 -0.068047 0.121315\nvn -0.6848 -0.7157 -0.1373\nv -0.004271 -0.068272 0.12111\nvn -0.6848 -0.7157 -0.1373\nv -0.004423 -0.068292 0.121975\nvn -0.6848 -0.7157 -0.1373\nv -0.002463 -0.06853 0.12604\nvn -0.4127 0.728 0.5474\nv -0.003535 -0.068802 0.125594\nvn -0.4127 0.728 0.5474\nv -0.002083 -0.068808 0.126696\nvn -0.4127 0.728 0.5474\nv -0.003268 -0.068605 0.125416\nvn -0.3729 0.847 0.379\nv -0.003535 -0.068802 0.125594\nvn -0.3729 0.847 0.379\nv -0.002463 -0.06853 0.12604\nvn -0.3729 0.847 0.379\nv 0.001734 -0.068111 0.118146\nvn 0.214 -0.246 -0.9453\nv 0.001691 -0.068518 0.118241\nvn 0.214 -0.246 -0.9453\nv 0.000662 -0.068272 0.117944\nvn 0.214 -0.246 -0.9453\nv -0.002805 -0.068642 0.118775\nvn -0.4401 0.7214 -0.5347\nv -0.002034 -0.068801 0.117926\nvn -0.4401 0.7214 -0.5347\nv -0.003776 -0.068803 0.119356\nvn -0.4401 0.7214 -0.5347\nv 0.000662 -0.068272 0.117944\nvn 0.27 -0.0323 -0.9623\nv 0.001691 -0.068518 0.118241\nvn 0.27 -0.0323 -0.9623\nv 0.000229 -0.068591 0.117834\nvn 0.27 -0.0323 -0.9623\nv 0.003253 -0.067983 0.118711\nvn 0.1875 -0.9385 -0.29\nv 0.001734 -0.068111 0.118146\nvn 0.1875 -0.9385 -0.29\nv 0.001947 -0.067988 0.117883\nvn 0.1875 -0.9385 -0.29\nv 0.001947 -0.067988 0.117883\nvn 0.081 -0.9255 -0.37\nv 0.001734 -0.068111 0.118146\nvn 0.081 -0.9255 -0.37\nv 0.000551 -0.068064 0.117769\nvn 0.081 -0.9255 -0.37\nv -0.004451 -0.068615 0.121504\nvn -0.6567 0.7524 -0.0513\nv -0.004633 -0.06881 0.120981\nvn -0.6567 0.7524 -0.0513\nv -0.004784 -0.068808 0.122927\nvn -0.6567 0.7524 -0.0513\nv -0.003844 -0.067995 0.125343\nvn -0.0579 -0.9979 0.028\nv -0.004653 -0.067991 0.123801\nvn -0.0579 -0.9979 0.028\nv -0.003145 -0.068021 0.125864\nvn -0.0579 -0.9979 0.028\nv 0.000229 -0.068591 0.117834\nvn 0.1538 0.9099 -0.3853\nv 0.002627 -0.068804 0.118289\nvn 0.1538 0.9099 -0.3853\nv 0.001079 -0.068812 0.117653\nvn 0.1538 0.9099 -0.3853\nv 0.001691 -0.068518 0.118241\nvn 0.2032 0.5298 -0.8234\nv 0.002627 -0.068804 0.118289\nvn 0.2032 0.5298 -0.8234\nv 0.000229 -0.068591 0.117834\nvn 0.2032 0.5298 -0.8234\nv -0.004653 -0.067991 0.123801\nvn -0.2738 -0.9435 0.1866\nv -0.004404 -0.068112 0.123554\nvn -0.2738 -0.9435 0.1866\nv -0.003145 -0.068021 0.125864\nvn -0.2738 -0.9435 0.1866\nv 0.001691 -0.068518 0.118241\nvn 0.4839 -0.2496 -0.8388\nv 0.001734 -0.068111 0.118146\nvn 0.4839 -0.2496 -0.8388\nv 0.002908 -0.068112 0.118823\nvn 0.4839 -0.2496 -0.8388\nv -0.005013 -0.066103 0.121858\nvn -0.9747 -0.0974 -0.2013\nv -0.004608 -0.067988 0.120806\nvn -0.9747 -0.0974 -0.2013\nv -0.00487 -0.067995 0.12208\nvn -0.9747 -0.0974 -0.2013\nv -0.0044 -0.066097 0.119874\nvn -0.9546 -0.0406 -0.2952\nv -0.004608 -0.067988 0.120806\nvn -0.9546 -0.0406 -0.2952\nv -0.005013 -0.066103 0.121858\nvn -0.9546 -0.0406 -0.2952\nv -0.0044 -0.066097 0.119874\nvn -0.897 -0.1122 -0.4276\nv -0.004065 -0.06797 0.119661\nvn -0.897 -0.1122 -0.4276\nv -0.004608 -0.067988 0.120806\nvn -0.897 -0.1122 -0.4276\nv -0.003485 -0.066091 0.11868\nvn -0.7915 -0.073 -0.6068\nv -0.004065 -0.06797 0.119661\nvn -0.7915 -0.073 -0.6068\nv -0.0044 -0.066097 0.119874\nvn -0.7915 -0.073 -0.6068\nv -0.003485 -0.066091 0.11868\nvn -0.7194 -0.1343 -0.6815\nv -0.002851 -0.067994 0.118386\nvn -0.7194 -0.1343 -0.6815\nv -0.004065 -0.06797 0.119661\nvn -0.7194 -0.1343 -0.6815\nv -0.00195 -0.0661 0.117694\nvn -0.5397 -0.0499 -0.8404\nv -0.002851 -0.067994 0.118386\nvn -0.5397 -0.0499 -0.8404\nv -0.003485 -0.066091 0.11868\nvn -0.5397 -0.0499 -0.8404\nv -0.002581 -0.066106 0.126691\nvn -0.6476 -0.1054 0.7547\nv -0.003844 -0.067995 0.125343\nvn -0.6476 -0.1054 0.7547\nv -0.002351 -0.067989 0.126625\nvn -0.6476 -0.1054 0.7547\nv -0.004179 -0.066091 0.125185\nvn -0.6848 -0.0602 0.7262\nv -0.003844 -0.067995 0.125343\nvn -0.6848 -0.0602 0.7262\nv -0.002581 -0.066106 0.126691\nvn -0.6848 -0.0602 0.7262\nv -0.00195 -0.0661 0.117694\nvn -0.4265 -0.124 -0.8959\nv -0.001269 -0.067995 0.117632\nvn -0.4265 -0.124 -0.8959\nv -0.002851 -0.067994 0.118386\nvn -0.4265 -0.124 -0.8959\nv -0.000281 -0.066099 0.117298\nvn -0.2307 -0.0512 -0.9717\nv -0.001269 -0.067995 0.117632\nvn -0.2307 -0.0512 -0.9717\nv -0.00195 -0.0661 0.117694\nvn -0.2307 -0.0512 -0.9717\nv -0.004903 -0.066095 0.123562\nvn -0.9111 -0.069 0.4064\nv -0.004653 -0.067991 0.123801\nvn -0.9111 -0.069 0.4064\nv -0.004179 -0.066091 0.125185\nvn -0.9111 -0.069 0.4064\nv -0.004179 -0.066091 0.125185\nvn -0.8797 -0.1166 0.461\nv -0.004653 -0.067991 0.123801\nvn -0.8797 -0.1166 0.461\nv -0.003844 -0.067995 0.125343\nvn -0.8797 -0.1166 0.461\nv -0.000281 -0.066099 0.117298\nvn -0.0832 -0.1309 -0.9879\nv 0.000464 -0.067995 0.117486\nvn -0.0832 -0.1309 -0.9879\nv -0.001269 -0.067995 0.117632\nvn -0.0832 -0.1309 -0.9879\nv 0.001849 -0.066099 0.117615\nvn 0.1473 -0.0404 -0.9883\nv 0.000464 -0.067995 0.117486\nvn 0.1473 -0.0404 -0.9883\nv -0.000281 -0.066099 0.117298\nvn 0.1473 -0.0404 -0.9883\nv -0.005013 -0.066103 0.121858\nvn -0.9956 -0.0678 0.0647\nv -0.00487 -0.067995 0.12208\nvn -0.9956 -0.0678 0.0647\nv -0.004903 -0.066095 0.123562\nvn -0.9956 -0.0678 0.0647\nv -0.004903 -0.066095 0.123562\nvn -0.9856 -0.1144 0.1246\nv -0.00487 -0.067995 0.12208\nvn -0.9856 -0.1144 0.1246\nv -0.004653 -0.067991 0.123801\nvn -0.9856 -0.1144 0.1246\nv 0.001849 -0.066099 0.117615\nvn 0.2573 -0.1228 -0.9585\nv 0.001947 -0.067988 0.117883\nvn 0.2573 -0.1228 -0.9585\nv 0.000464 -0.067995 0.117486\nvn 0.2573 -0.1228 -0.9585\nv -0.002581 -0.066106 0.126691\nvn -0.3455 0.8601 0.3752\nv -0.003667 -0.066005 0.125459\nvn -0.3455 0.8601 0.3752\nv -0.004179 -0.066091 0.125185\nvn -0.3455 0.8601 0.3752\nv -0.004624 -0.065738 0.121611\nvn -0.9778 0.205 -0.0425\nv -0.004655 -0.066026 0.120945\nvn -0.9778 0.205 -0.0425\nv -0.004709 -0.065873 0.122915\nvn -0.9778 0.205 -0.0425\nv -0.004699 -0.065289 0.120256\nvn -0.2469 -0.9628 -0.1101\nv -0.004206 -0.065386 0.120002\nvn -0.2469 -0.9628 -0.1101\nv -0.004665 -0.065398 0.121134\nvn -0.2469 -0.9628 -0.1101\nv 0.001317 -0.065548 0.117818\nvn 0.2799 -0.0442 -0.959\nv 0.002016 -0.065925 0.118039\nvn 0.2799 -0.0442 -0.959\nv 0.00034 -0.065972 0.117552\nvn 0.2799 -0.0442 -0.959\nv -0.004665 -0.065398 0.121134\nvn -0.8639 -0.4423 -0.2409\nv -0.004426 -0.065692 0.120818\nvn -0.8639 -0.4423 -0.2409\nv -0.004624 -0.065738 0.121611\nvn -0.8639 -0.4423 -0.2409\nv 0.002657 -0.06538 0.118318\nvn 0.0648 -0.9823 -0.1757\nv 0.001275 -0.065344 0.117604\nvn 0.0648 -0.9823 -0.1757\nv 0.00194 -0.065294 0.11757\nvn 0.0648 -0.9823 -0.1757\nv -0.002938 -0.065694 0.118683\nvn -0.6218 0.2954 -0.7253\nv -0.002633 -0.066008 0.118294\nvn -0.6218 0.2954 -0.7253\nv -0.003304 -0.065921 0.118905\nvn -0.6218 0.2954 -0.7253\nv -0.002989 -0.06529 0.11815\nvn -0.1402 -0.9064 -0.3986\nv -0.000605 -0.065392 0.117543\nvn -0.1402 -0.9064 -0.3986\nv -0.002463 -0.065391 0.118193\nvn -0.1402 -0.9064 -0.3986\nv -0.001829 -0.065294 0.117537\nvn -0.0788 -0.9864 -0.1442\nv -0.000605 -0.065392 0.117543\nvn -0.0788 -0.9864 -0.1442\nv -0.002989 -0.06529 0.11815\nvn -0.0788 -0.9864 -0.1442\nv -0.002463 -0.065391 0.118193\nvn -0.4449 -0.5022 -0.7416\nv -0.001593 -0.065788 0.11794\nvn -0.4449 -0.5022 -0.7416\nv -0.002938 -0.065694 0.118683\nvn -0.4449 -0.5022 -0.7416\nv -0.004655 -0.066026 0.120945\nvn -0.4049 0.9107 -0.0818\nv -0.005013 -0.066103 0.121858\nvn -0.4049 0.9107 -0.0818\nv -0.004709 -0.065873 0.122915\nvn -0.4049 0.9107 -0.0818\nv -0.004005 -0.065379 0.125039\nvn -0.7049 -0.585 0.4011\nv -0.004217 -0.065547 0.124421\nvn -0.7049 -0.585 0.4011\nv -0.003532 -0.065692 0.125413\nvn -0.7049 -0.585 0.4011\nv 0.002657 -0.06538 0.118318\nvn 0.3364 -0.6476 -0.6836\nv 0.001317 -0.065548 0.117818\nvn 0.3364 -0.6476 -0.6836\nv 0.001275 -0.065344 0.117604\nvn 0.3364 -0.6476 -0.6836\nv -0.004869 -0.06529 0.124021\nvn -0.2707 -0.9515 0.1465\nv -0.004005 -0.065379 0.125039\nvn -0.2707 -0.9515 0.1465\nv -0.00409 -0.06529 0.125457\nvn -0.2707 -0.9515 0.1465\nv 0.002565 -0.065747 0.118442\nvn 0.3652 -0.3781 -0.8507\nv 0.001317 -0.065548 0.117818\nvn 0.3652 -0.3781 -0.8507\nv 0.002657 -0.06538 0.118318\nvn 0.3652 -0.3781 -0.8507\nv 0.002016 -0.065925 0.118039\nvn 0.0931 0.9084 -0.4076\nv 0.001849 -0.066099 0.117615\nvn 0.0931 0.9084 -0.4076\nv 0.00034 -0.065972 0.117552\nvn 0.0931 0.9084 -0.4076\nv -0.003485 -0.066091 0.11868\nvn -0.2906 0.8388 -0.4604\nv -0.002633 -0.066008 0.118294\nvn -0.2906 0.8388 -0.4604\nv -0.00195 -0.0661 0.117694\nvn -0.2906 0.8388 -0.4604\nv -0.004217 -0.065547 0.124421\nvn -0.8163 0.0694 0.5735\nv -0.004389 -0.065959 0.124226\nvn -0.8163 0.0694 0.5735\nv -0.003532 -0.065692 0.125413\nvn -0.8163 0.0694 0.5735\nv -0.001593 -0.065788 0.11794\nvn -0.3708 0.5591 -0.7415\nv -0.002633 -0.066008 0.118294\nvn -0.3708 0.5591 -0.7415\nv -0.002938 -0.065694 0.118683\nvn -0.3708 0.5591 -0.7415\nv 0.002565 -0.065747 0.118442\nvn 0.4614 0.3858 -0.799\nv 0.002016 -0.065925 0.118039\nvn 0.4614 0.3858 -0.799\nv 0.001317 -0.065548 0.117818\nvn 0.4614 0.3858 -0.799\nv -0.003532 -0.065692 0.125413\nvn -0.7819 0.4061 0.473\nv -0.004389 -0.065959 0.124226\nvn -0.7819 0.4061 0.473\nv -0.003667 -0.066005 0.125459\nvn -0.7819 0.4061 0.473\nv -0.004869 -0.06529 0.124021\nvn -0.2554 -0.9576 0.133\nv -0.004599 -0.065439 0.123461\nvn -0.2554 -0.9576 0.133\nv -0.004005 -0.065379 0.125039\nvn -0.2554 -0.9576 0.133\nv -0.003667 -0.066005 0.125459\nvn -0.2595 0.9474 0.1874\nv -0.004389 -0.065959 0.124226\nvn -0.2595 0.9474 0.1874\nv -0.004179 -0.066091 0.125185\nvn -0.2595 0.9474 0.1874\nv -0.004599 -0.065439 0.123461\nvn -0.926 -0.1321 0.3538\nv -0.004217 -0.065547 0.124421\nvn -0.926 -0.1321 0.3538\nv -0.004005 -0.065379 0.125039\nvn -0.926 -0.1321 0.3538\nv -0.000605 -0.065392 0.117543\nvn -0.3279 -0.1216 -0.9368\nv -0.001593 -0.065788 0.11794\nvn -0.3279 -0.1216 -0.9368\nv -0.002463 -0.065391 0.118193\nvn -0.3279 -0.1216 -0.9368\nv -0.001593 -0.065788 0.11794\nvn -0.3408 0.7897 -0.5102\nv -0.00195 -0.0661 0.117694\nvn -0.3408 0.7897 -0.5102\nv -0.002633 -0.066008 0.118294\nvn -0.3408 0.7897 -0.5102\nv -0.005013 -0.066103 0.121858\nvn -0.6848 0.698 -0.2096\nv -0.004655 -0.066026 0.120945\nvn -0.6848 0.698 -0.2096\nv -0.0044 -0.066097 0.119874\nvn -0.6848 0.698 -0.2096\nv -0.004426 -0.065692 0.120818\nvn -0.5528 -0.8125 -0.1852\nv -0.003957 -0.065788 0.11984\nvn -0.5528 -0.8125 -0.1852\nv -0.004624 -0.065738 0.121611\nvn -0.5528 -0.8125 -0.1852\nv -0.004093 -0.065292 0.119239\nvn -0.2075 -0.9707 -0.121\nv -0.003497 -0.065395 0.119046\nvn -0.2075 -0.9707 -0.121\nv -0.004699 -0.065289 0.120256\nvn -0.2075 -0.9707 -0.121\nv -0.004699 -0.065289 0.120256\nvn -0.2913 -0.9338 -0.2075\nv -0.003497 -0.065395 0.119046\nvn -0.2913 -0.9338 -0.2075\nv -0.004206 -0.065386 0.120002\nvn -0.2913 -0.9338 -0.2075\nv -0.004665 -0.065398 0.121134\nvn -0.8739 -0.2889 -0.3909\nv -0.003957 -0.065788 0.11984\nvn -0.8739 -0.2889 -0.3909\nv -0.004426 -0.065692 0.120818\nvn -0.8739 -0.2889 -0.3909\nv -0.004206 -0.065386 0.120002\nvn -0.8531 -0.3872 -0.3498\nv -0.003957 -0.065788 0.11984\nvn -0.8531 -0.3872 -0.3498\nv -0.004665 -0.065398 0.121134\nvn -0.8531 -0.3872 -0.3498\nv -0.000605 -0.065392 0.117543\nvn -0.1645 -0.4634 -0.8707\nv -0.000297 -0.065725 0.117662\nvn -0.1645 -0.4634 -0.8707\nv -0.001593 -0.065788 0.11794\nvn -0.1645 -0.4634 -0.8707\nv -0.003957 -0.065788 0.11984\nvn -0.6647 0.6966 -0.2699\nv -0.004655 -0.066026 0.120945\nvn -0.6647 0.6966 -0.2699\nv -0.004624 -0.065738 0.121611\nvn -0.6647 0.6966 -0.2699\nv -0.004389 -0.065959 0.124226\nvn -0.5127 0.8282 0.2264\nv -0.004903 -0.066095 0.123562\nvn -0.5127 0.8282 0.2264\nv -0.004179 -0.066091 0.125185\nvn -0.5127 0.8282 0.2264\nv -0.004599 -0.065439 0.123461\nvn -0.9178 -0.2002 0.3429\nv -0.004709 -0.065873 0.122915\nvn -0.9178 -0.2002 0.3429\nv -0.004217 -0.065547 0.124421\nvn -0.9178 -0.2002 0.3429\nv -0.004217 -0.065547 0.124421\nvn -0.9305 0.2726 0.2447\nv -0.004709 -0.065873 0.122915\nvn -0.9305 0.2726 0.2447\nv -0.004389 -0.065959 0.124226\nvn -0.9305 0.2726 0.2447\nv -0.003957 -0.065788 0.11984\nvn -0.5719 0.7982 -0.1894\nv -0.0044 -0.066097 0.119874\nvn -0.5719 0.7982 -0.1894\nv -0.004655 -0.066026 0.120945\nvn -0.5719 0.7982 -0.1894\nv -0.005119 -0.065296 0.12275\nvn 0.0266 -0.9996 3.25756e-18\nv -0.005051 -0.065294 0.121335\nvn 0.0266 -0.9996 3.25756e-18\nv -0.004869 -0.06529 0.124021\nvn 0.0266 -0.9996 3.25756e-18\nv -9.1e-05 -0.065293 0.117179\nvn -0.0733 -0.9307 -0.3583\nv -0.000605 -0.065392 0.117543\nvn -0.0733 -0.9307 -0.3583\nv -0.001829 -0.065294 0.117537\nvn -0.0733 -0.9307 -0.3583\nv -0.005051 -0.065294 0.121335\nvn -0.4347 -0.9 0.0311\nv -0.004599 -0.065439 0.123461\nvn -0.4347 -0.9 0.0311\nv -0.004869 -0.06529 0.124021\nvn -0.4347 -0.9 0.0311\nv -0.002055 -0.065293 0.127055\nvn -0.1005 -0.9723 0.2109\nv -0.003146 -0.065431 0.125897\nvn -0.1005 -0.9723 0.2109\nv -0.002114 -0.06536 0.126718\nvn -0.1005 -0.9723 0.2109\nv -0.004093 -0.065292 0.119239\nvn -0.262 -0.9098 -0.3218\nv -0.002463 -0.065391 0.118193\nvn -0.262 -0.9098 -0.3218\nv -0.003497 -0.065395 0.119046\nvn -0.262 -0.9098 -0.3218\nv -0.003497 -0.065395 0.119046\nvn -0.7788 -0.2507 -0.575\nv -0.003957 -0.065788 0.11984\nvn -0.7788 -0.2507 -0.575\nv -0.004206 -0.065386 0.120002\nvn -0.7788 -0.2507 -0.575\nv -0.000297 -0.065725 0.117662\nvn -0.2044 -0.0948 -0.9743\nv 0.00034 -0.065972 0.117552\nvn -0.2044 -0.0948 -0.9743\nv -0.001593 -0.065788 0.11794\nvn -0.2044 -0.0948 -0.9743\nv -0.002114 -0.06536 0.126718\nvn -0.4247 -0.6841 0.593\nv -0.003146 -0.065431 0.125897\nvn -0.4247 -0.6841 0.593\nv -0.001949 -0.06555 0.126616\nvn -0.4247 -0.6841 0.593\nv -0.001593 -0.065788 0.11794\nvn -0.0832 0.6727 -0.7352\nv 0.00034 -0.065972 0.117552\nvn -0.0832 0.6727 -0.7352\nv -0.00195 -0.0661 0.117694\nvn -0.0832 0.6727 -0.7352\nv -9.1e-05 -0.065293 0.117179\nvn 0.0324 -0.9748 -0.2208\nv 0.001275 -0.065344 0.117604\nvn 0.0324 -0.9748 -0.2208\nv -0.000605 -0.065392 0.117543\nvn 0.0324 -0.9748 -0.2208\nv -0.003146 -0.065431 0.125897\nvn -0.5032 0.1169 0.8562\nv -0.0028 -0.06588 0.126162\nvn -0.5032 0.1169 0.8562\nv -0.001949 -0.06555 0.126616\nvn -0.5032 0.1169 0.8562\nv -0.005051 -0.065294 0.121335\nvn -0.2637 -0.9646 -0.0096\nv -0.004665 -0.065398 0.121134\nvn -0.2637 -0.9646 -0.0096\nv -0.004599 -0.065439 0.123461\nvn -0.2637 -0.9646 -0.0096\nv 0.00034 -0.065972 0.117552\nvn -0.0718 0.9513 -0.2998\nv -0.000281 -0.066099 0.117298\nvn -0.0718 0.9513 -0.2998\nv -0.00195 -0.0661 0.117694\nvn -0.0718 0.9513 -0.2998\nv -0.004665 -0.065398 0.121134\nvn -0.7559 0.6539 0.033\nv -0.004708 -0.065515 0.122476\nvn -0.7559 0.6539 0.033\nv -0.004599 -0.065439 0.123461\nvn -0.7559 0.6539 0.033\nv -0.003497 -0.065395 0.119046\nvn -0.6432 -0.4696 -0.6048\nv -0.002938 -0.065694 0.118683\nvn -0.6432 -0.4696 -0.6048\nv -0.003957 -0.065788 0.11984\nvn -0.6432 -0.4696 -0.6048\nv -0.004708 -0.065515 0.122476\nvn -0.9873 0.1242 0.0995\nv -0.004709 -0.065873 0.122915\nvn -0.9873 0.1242 0.0995\nv -0.004599 -0.065439 0.123461\nvn -0.9873 0.1242 0.0995\nv -0.002986 -0.065297 0.126516\nvn 0.02 -0.9994 -0.027\nv -0.00409 -0.06529 0.125457\nvn 0.02 -0.9994 -0.027\nv -0.002055 -0.065293 0.127055\nvn 0.02 -0.9994 -0.027\nv -0.003304 -0.065921 0.118905\nvn -0.529 0.7067 -0.4698\nv -0.0044 -0.066097 0.119874\nvn -0.529 0.7067 -0.4698\nv -0.003957 -0.065788 0.11984\nvn -0.529 0.7067 -0.4698\nv -0.00409 -0.06529 0.125457\nvn -0.3147 -0.8611 0.3993\nv -0.003146 -0.065431 0.125897\nvn -0.3147 -0.8611 0.3993\nv -0.002055 -0.065293 0.127055\nvn -0.3147 -0.8611 0.3993\nv -0.002938 -0.065694 0.118683\nvn -0.6548 0.5356 -0.5332\nv -0.003304 -0.065921 0.118905\nvn -0.6548 0.5356 -0.5332\nv -0.003957 -0.065788 0.11984\nvn -0.6548 0.5356 -0.5332\nv 0.001275 -0.065344 0.117604\nvn 0.0411 -0.7187 -0.6941\nv 0.001317 -0.065548 0.117818\nvn 0.0411 -0.7187 -0.6941\nv -0.000605 -0.065392 0.117543\nvn 0.0411 -0.7187 -0.6941\nv -0.002989 -0.06529 0.11815\nvn -0.1708 -0.9698 -0.174\nv -0.002463 -0.065391 0.118193\nvn -0.1708 -0.9698 -0.174\nv -0.004093 -0.065292 0.119239\nvn -0.1708 -0.9698 -0.174\nv -0.004709 -0.065873 0.122915\nvn -0.9582 0.1504 0.2434\nv -0.005013 -0.066103 0.121858\nvn -0.9582 0.1504 0.2434\nv -0.004389 -0.065959 0.124226\nvn -0.9582 0.1504 0.2434\nv -0.000605 -0.065392 0.117543\nvn 0.1189 -0.235 -0.9647\nv 0.001317 -0.065548 0.117818\nvn 0.1189 -0.235 -0.9647\nv -0.000297 -0.065725 0.117662\nvn 0.1189 -0.235 -0.9647\nv -0.003532 -0.065692 0.125413\nvn -0.7253 -0.1652 0.6683\nv -0.0028 -0.06588 0.126162\nvn -0.7253 -0.1652 0.6683\nv -0.003146 -0.065431 0.125897\nvn -0.7253 -0.1652 0.6683\nv 0.001317 -0.065548 0.117818\nvn 0.0325 0.4752 -0.8793\nv 0.00034 -0.065972 0.117552\nvn 0.0325 0.4752 -0.8793\nv -0.000297 -0.065725 0.117662\nvn 0.0325 0.4752 -0.8793\nv -0.002463 -0.065391 0.118193\nvn -0.6162 -0.2449 -0.7485\nv -0.002938 -0.065694 0.118683\nvn -0.6162 -0.2449 -0.7485\nv -0.003497 -0.065395 0.119046\nvn -0.6162 -0.2449 -0.7485\nv -0.0028 -0.06588 0.126162\nvn -0.5118 0.6927 0.5082\nv -0.003667 -0.066005 0.125459\nvn -0.5118 0.6927 0.5082\nv -0.002581 -0.066106 0.126691\nvn -0.5118 0.6927 0.5082\nv -0.004708 -0.065515 0.122476\nvn -0.9933 -0.0884 -0.0738\nv -0.004624 -0.065738 0.121611\nvn -0.9933 -0.0884 -0.0738\nv -0.004709 -0.065873 0.122915\nvn -0.9933 -0.0884 -0.0738\nv -0.004005 -0.065379 0.125039\nvn -0.694 -0.2346 0.6807\nv -0.003532 -0.065692 0.125413\nvn -0.694 -0.2346 0.6807\nv -0.003146 -0.065431 0.125897\nvn -0.694 -0.2346 0.6807\nv -0.004389 -0.065959 0.124226\nvn -0.2729 0.962 0.0132\nv -0.005013 -0.066103 0.121858\nvn -0.2729 0.962 0.0132\nv -0.004903 -0.066095 0.123562\nvn -0.2729 0.962 0.0132\nv -0.000281 -0.066099 0.117298\nvn 0.0913 0.7835 -0.6146\nv 0.00034 -0.065972 0.117552\nvn 0.0913 0.7835 -0.6146\nv 0.001849 -0.066099 0.117615\nvn 0.0913 0.7835 -0.6146\nv -0.003304 -0.065921 0.118905\nvn -0.6669 0.0655 -0.7423\nv -0.002633 -0.066008 0.118294\nvn -0.6669 0.0655 -0.7423\nv -0.0044 -0.066097 0.119874\nvn -0.6669 0.0655 -0.7423\nv -0.00409 -0.06529 0.125457\nvn -0.218 -0.9628 0.1596\nv -0.004005 -0.065379 0.125039\nvn -0.218 -0.9628 0.1596\nv -0.003146 -0.065431 0.125897\nvn -0.218 -0.9628 0.1596\nv -0.0044 -0.066097 0.119874\nvn -0.1441 0.9839 -0.1054\nv -0.002633 -0.066008 0.118294\nvn -0.1441 0.9839 -0.1054\nv -0.003485 -0.066091 0.11868\nvn -0.1441 0.9839 -0.1054\nv -0.004699 -0.065289 0.120256\nvn -0.3084 -0.9454 -0.1056\nv -0.004665 -0.065398 0.121134\nvn -0.3084 -0.9454 -0.1056\nv -0.005051 -0.065294 0.121335\nvn -0.3084 -0.9454 -0.1056\nv 0.00194 -0.065294 0.11757\nvn 0.0565 -0.9536 -0.2958\nv 0.001275 -0.065344 0.117604\nvn 0.0565 -0.9536 -0.2958\nv -9.1e-05 -0.065293 0.117179\nvn 0.0565 -0.9536 -0.2958\nv -0.004665 -0.065398 0.121134\nvn -0.9815 -0.1857 -0.0476\nv -0.004624 -0.065738 0.121611\nvn -0.9815 -0.1857 -0.0476\nv -0.004708 -0.065515 0.122476\nvn -0.9815 -0.1857 -0.0476\nv -0.003532 -0.065692 0.125413\nvn -0.6167 0.368 0.6958\nv -0.003667 -0.066005 0.125459\nvn -0.6167 0.368 0.6958\nv -0.0028 -0.06588 0.126162\nvn -0.6167 0.368 0.6958\nv -0.003504 -0.063398 0.118233\nvn -0.6935 -0.1575 -0.703\nv -0.002989 -0.06529 0.11815\nvn -0.6935 -0.1575 -0.703\nv -0.004093 -0.065292 0.119239\nvn -0.6935 -0.1575 -0.703\nv -0.003563 -0.063394 0.126381\nvn -0.6842 -0.1572 0.7122\nv -0.00409 -0.06529 0.125457\nvn -0.6842 -0.1572 0.7122\nv -0.002986 -0.065297 0.126516\nvn -0.6842 -0.1572 0.7122\nv -0.001116 -0.063391 0.127617\nvn -0.0609 -0.1009 0.993\nv -0.00036 -0.065291 0.12747\nvn -0.0609 -0.1009 0.993\nv 0.000393 -0.063397 0.127709\nvn -0.0609 -0.1009 0.993\nv -0.005382 -0.063399 0.12223\nvn -0.9866 -0.1205 -0.1096\nv -0.005267 -0.063397 0.121195\nvn -0.9866 -0.1205 -0.1096\nv -0.005051 -0.065294 0.121335\nvn -0.9866 -0.1205 -0.1096\nv -0.005267 -0.063397 0.121195\nvn -0.9424 -0.1301 -0.3082\nv -0.004699 -0.065289 0.120256\nvn -0.9424 -0.1301 -0.3082\nv -0.005051 -0.065294 0.121335\nvn -0.9424 -0.1301 -0.3082\nv -0.004559 -0.063407 0.119472\nvn -0.9214 -0.0889 -0.3784\nv -0.004699 -0.065289 0.120256\nvn -0.9214 -0.0889 -0.3784\nv -0.005267 -0.063397 0.121195\nvn -0.9214 -0.0889 -0.3784\nv -0.002595 -0.063393 0.127061\nvn -0.3502 -0.1024 0.931\nv -0.002055 -0.065293 0.127055\nvn -0.3502 -0.1024 0.931\nv -0.001116 -0.063391 0.127617\nvn -0.3502 -0.1024 0.931\nv -0.002055 -0.065293 0.127055\nvn -0.4953 -0.1434 0.8568\nv -0.002595 -0.063393 0.127061\nvn -0.4953 -0.1434 0.8568\nv -0.002986 -0.065297 0.126516\nvn -0.4953 -0.1434 0.8568\nv 0.004744 -0.065292 0.124327\nvn 0.8369 -0.1596 0.5236\nv 0.004681 -0.063392 0.125007\nvn 0.8369 -0.1596 0.5236\nv 0.003833 -0.065287 0.125785\nvn 0.8369 -0.1596 0.5236\nv -0.002595 -0.063393 0.127061\nvn -0.5705 -0.1155 0.8131\nv -0.003563 -0.063394 0.126381\nvn -0.5705 -0.1155 0.8131\nv -0.002986 -0.065297 0.126516\nvn -0.5705 -0.1155 0.8131\nv 0.004681 -0.063392 0.125007\nvn 0.8106 -0.1282 0.5714\nv 0.004106 -0.063405 0.125819\nvn 0.8106 -0.1282 0.5714\nv 0.003833 -0.065287 0.125785\nvn 0.8106 -0.1282 0.5714\nv -0.003563 -0.063394 0.126381\nvn -0.7347 -0.1213 0.6675\nv -0.004448 -0.063393 0.125407\nvn -0.7347 -0.1213 0.6675\nv -0.00409 -0.06529 0.125457\nvn -0.7347 -0.1213 0.6675\nv 0.004106 -0.063405 0.125819\nvn 0.6957 -0.114 0.7092\nv 0.003372 -0.063388 0.126542\nvn 0.6957 -0.114 0.7092\nv 0.003833 -0.065287 0.125785\nvn 0.6957 -0.114 0.7092\nv 0.003833 -0.065287 0.125785\nvn 0.6056 -0.1636 0.7788\nv 0.003372 -0.063388 0.126542\nvn 0.6056 -0.1636 0.7788\nv 0.002399 -0.065296 0.126898\nvn 0.6056 -0.1636 0.7788\nv -0.00409 -0.06529 0.125457\nvn -0.8689 -0.1518 0.4712\nv -0.004448 -0.063393 0.125407\nvn -0.8689 -0.1518 0.4712\nv -0.004869 -0.06529 0.124021\nvn -0.8689 -0.1518 0.4712\nv 0.002327 -0.063392 0.12719\nvn 0.5243 -0.11 0.8444\nv 0.002399 -0.065296 0.126898\nvn 0.5243 -0.11 0.8444\nv 0.003372 -0.063388 0.126542\nvn 0.5243 -0.11 0.8444\nv -0.004448 -0.063393 0.125407\nvn -0.9016 -0.1066 0.4192\nv -0.005195 -0.063399 0.1238\nvn -0.9016 -0.1066 0.4192\nv -0.004869 -0.06529 0.124021\nvn -0.9016 -0.1066 0.4192\nv 0.001291 -0.063393 0.127573\nvn 0.344 -0.1299 0.93\nv 0.002399 -0.065296 0.126898\nvn 0.344 -0.1299 0.93\nv 0.002327 -0.063392 0.12719\nvn 0.344 -0.1299 0.93\nv 0.002399 -0.065296 0.126898\nvn 0.3156 -0.1489 0.9371\nv 0.001291 -0.063393 0.127573\nvn 0.3156 -0.1489 0.9371\nv 0.001215 -0.065272 0.1273\nvn 0.3156 -0.1489 0.9371\nv -0.005195 -0.063399 0.1238\nvn -0.9706 -0.145 0.1923\nv -0.005119 -0.065296 0.12275\nvn -0.9706 -0.145 0.1923\nv -0.004869 -0.06529 0.124021\nvn -0.9706 -0.145 0.1923\nv -0.005382 -0.063399 0.12223\nvn -0.9875 -0.1044 0.1177\nv -0.005119 -0.065296 0.12275\nvn -0.9875 -0.1044 0.1177\nv -0.005195 -0.063399 0.1238\nvn -0.9875 -0.1044 0.1177\nv -0.005119 -0.065296 0.12275\nvn -0.9876 -0.1498 -0.0478\nv -0.005382 -0.063399 0.12223\nvn -0.9876 -0.1498 -0.0478\nv -0.005051 -0.065294 0.121335\nvn -0.9876 -0.1498 -0.0478\nv -0.005074 -0.062588 0.124437\nvn -0.2517 -0.9578 0.139\nv -0.004634 -0.062663 0.124719\nvn -0.2517 -0.9578 0.139\nv -0.004474 -0.062589 0.125514\nvn -0.2517 -0.9578 0.139\nv -0.003402 -0.063188 0.118586\nvn -0.4347 0.8236 -0.3642\nv -0.003504 -0.063398 0.118233\nvn -0.4347 0.8236 -0.3642\nv -0.004559 -0.063407 0.119472\nvn -0.4347 0.8236 -0.3642\nv -0.00502 -0.063188 0.121739\nvn -0.4893 0.872 0.0139\nv -0.005382 -0.063399 0.12223\nvn -0.4893 0.872 0.0139\nv -0.004989 -0.063195 0.123239\nvn -0.4893 0.872 0.0139\nv -0.003888 -0.063106 0.125563\nvn -0.7252 0.3206 0.6093\nv -0.004524 -0.063329 0.124923\nvn -0.7252 0.3206 0.6093\nv -0.003281 -0.063325 0.126401\nvn -0.7252 0.3206 0.6093\nv 0.000217 -0.063288 0.117148\nvn 0.0454 0.7383 -0.673\nv 0.001324 -0.063391 0.11711\nvn 0.0454 0.7383 -0.673\nv -0.00059 -0.0634 0.116971\nvn 0.0454 0.7383 -0.673\nv -0.004896 -0.062602 0.119816\nvn -0.1782 -0.9836 -0.0282\nv -0.004765 -0.062636 0.120173\nvn -0.1782 -0.9836 -0.0282\nv -0.005472 -0.062579 0.122631\nvn -0.1782 -0.9836 -0.0282\nv -0.005472 -0.062579 0.122631\nvn -0.6454 -0.7451 -0.1682\nv -0.004765 -0.062636 0.120173\nvn -0.6454 -0.7451 -0.1682\nv -0.005082 -0.06277 0.121983\nvn -0.6454 -0.7451 -0.1682\nv -0.00502 -0.063188 0.121739\nvn -0.5623 0.8247 -0.0604\nv -0.005267 -0.063397 0.121195\nvn -0.5623 0.8247 -0.0604\nv -0.005382 -0.063399 0.12223\nvn -0.5623 0.8247 -0.0604\nv -0.004765 -0.062636 0.120173\nvn -0.7963 -0.5768 -0.1821\nv -0.00461 -0.062887 0.120291\nvn -0.7963 -0.5768 -0.1821\nv -0.005082 -0.06277 0.121983\nvn -0.7963 -0.5768 -0.1821\nv -0.002401 -0.062638 0.117682\nvn -0.4836 -0.5841 -0.6519\nv -0.002164 -0.062998 0.117829\nvn -0.4836 -0.5841 -0.6519\nv -0.003222 -0.06277 0.11841\nvn -0.4836 -0.5841 -0.6519\nv -0.004634 -0.062663 0.124719\nvn -0.6773 -0.5745 0.4596\nv -0.00454 -0.063 0.124436\nvn -0.6773 -0.5745 0.4596\nv -0.003906 -0.062857 0.125549\nvn -0.6773 -0.5745 0.4596\nv 0.000724 -0.062823 0.117306\nvn 0.1575 -0.2981 -0.9414\nv 0.001724 -0.063193 0.11759\nvn 0.1575 -0.2981 -0.9414\nv 0.000149 -0.063101 0.117298\nvn 0.1575 -0.2981 -0.9414\nv 0.001322 -0.062592 0.11701\nvn -0.0093 -0.9994 0.0347\nv 0.002406 -0.062587 0.117417\nvn -0.0093 -0.9994 0.0347\nv -5e-05 -0.062583 0.116884\nvn -0.0093 -0.9994 0.0347\nv -0.003222 -0.06277 0.11841\nvn -0.4999 -0.1441 -0.854\nv -0.002164 -0.062998 0.117829\nvn -0.4999 -0.1441 -0.854\nv -0.003402 -0.063188 0.118586\nvn -0.4999 -0.1441 -0.854\nv -0.003281 -0.063325 0.126401\nvn -0.1908 0.9689 0.1574\nv -0.004524 -0.063329 0.124923\nvn -0.1908 0.9689 0.1574\nv -0.004448 -0.063393 0.125407\nvn -0.1908 0.9689 0.1574\nv 0.001724 -0.063193 0.11759\nvn 0.1753 0.6516 -0.738\nv 0.000217 -0.063288 0.117148\nvn 0.1753 0.6516 -0.738\nv 0.000149 -0.063101 0.117298\nvn 0.1753 0.6516 -0.738\nv -0.005082 -0.06277 0.121983\nvn -0.9629 0.0139 -0.2694\nv -0.00461 -0.062887 0.120291\nvn -0.9629 0.0139 -0.2694\nv -0.00502 -0.063188 0.121739\nvn -0.9629 0.0139 -0.2694\nv 0.002406 -0.062587 0.117417\nvn 0.0667 -0.9467 -0.3151\nv 0.002107 -0.062677 0.117623\nvn 0.0667 -0.9467 -0.3151\nv -5e-05 -0.062583 0.116884\nvn 0.0667 -0.9467 -0.3151\nv -0.00461 -0.062887 0.120291\nvn -0.911 0.3707 -0.1807\nv -0.004853 -0.063226 0.120819\nvn -0.911 0.3707 -0.1807\nv -0.00502 -0.063188 0.121739\nvn -0.911 0.3707 -0.1807\nv -0.003906 -0.062857 0.125549\nvn -0.8665 -0.0343 0.4981\nv -0.00454 -0.063 0.124436\nvn -0.8665 -0.0343 0.4981\nv -0.003888 -0.063106 0.125563\nvn -0.8665 -0.0343 0.4981\nv -0.004853 -0.063226 0.120819\nvn -0.4705 0.874 -0.1213\nv -0.005267 -0.063397 0.121195\nvn -0.4705 0.874 -0.1213\nv -0.00502 -0.063188 0.121739\nvn -0.4705 0.874 -0.1213\nv -5e-05 -0.062583 0.116884\nvn 0.2392 -0.5876 -0.773\nv 0.002107 -0.062677 0.117623\nvn 0.2392 -0.5876 -0.773\nv 0.000724 -0.062823 0.117306\nvn 0.2392 -0.5876 -0.773\nv -0.002164 -0.062998 0.117829\nvn -0.5212 0.4073 -0.75\nv -0.001985 -0.063329 0.117525\nvn -0.5212 0.4073 -0.75\nv -0.003402 -0.063188 0.118586\nvn -0.5212 0.4073 -0.75\nv -0.00454 -0.063 0.124436\nvn -0.6559 0.6151 0.4376\nv -0.004524 -0.063329 0.124923\nvn -0.6559 0.6151 0.4376\nv -0.003888 -0.063106 0.125563\nvn -0.6559 0.6151 0.4376\nv -0.001488 -0.0626 0.117068\nvn -0.0952 -0.9747 -0.2021\nv -0.002401 -0.062638 0.117682\nvn -0.0952 -0.9747 -0.2021\nv -0.002859 -0.062589 0.117665\nvn -0.0952 -0.9747 -0.2021\nv -0.001985 -0.063329 0.117525\nvn -0.2454 0.8627 -0.4422\nv -0.003504 -0.063398 0.118233\nvn -0.2454 0.8627 -0.4422\nv -0.003402 -0.063188 0.118586\nvn -0.2454 0.8627 -0.4422\nv -0.005074 -0.062588 0.124437\nvn -0.1904 -0.981 0.037\nv -0.005472 -0.062579 0.122631\nvn -0.1904 -0.981 0.037\nv -0.004634 -0.062663 0.124719\nvn -0.1904 -0.981 0.037\nv -0.004448 -0.063393 0.125407\nvn -0.3955 0.9005 0.1806\nv -0.004524 -0.063329 0.124923\nvn -0.3964 0.9 0.1812\nv -0.005195 -0.063399 0.1238\nvn -0.3959 0.9003 0.1809\nv -0.004634 -0.062663 0.124719\nvn -0.8516 -0.4553 0.2599\nv -0.004946 -0.062812 0.123435\nvn -0.8516 -0.4553 0.2599\nv -0.00454 -0.063 0.124436\nvn -0.8516 -0.4553 0.2599\nv -0.003504 -0.063398 0.118233\nvn -0.1668 0.9496 -0.2653\nv -0.001985 -0.063329 0.117525\nvn -0.1668 0.9496 -0.2653\nv -0.002133 -0.063393 0.117391\nvn -0.1668 0.9496 -0.2653\nv 0.002107 -0.062677 0.117623\nvn 0.2271 -0.715 -0.6612\nv 0.002685 -0.062942 0.118108\nvn 0.2271 -0.715 -0.6612\nv 0.000724 -0.062823 0.117306\nvn 0.2271 -0.715 -0.6612\nv -0.004946 -0.062812 0.123435\nvn -0.9289 -0.0809 0.3614\nv -0.004989 -0.063195 0.123239\nvn -0.9289 -0.0809 0.3614\nv -0.00454 -0.063 0.124436\nvn -0.9289 -0.0809 0.3614\nv 0.002685 -0.062942 0.118108\nvn 0.3723 0.3473 -0.8607\nv 0.001724 -0.063193 0.11759\nvn 0.3709 0.3508 -0.8598\nv 0.000724 -0.062823 0.117306\nvn 0.3729 0.3459 -0.861\nv -0.00461 -0.062887 0.120291\nvn -0.8906 -0.0646 -0.4502\nv -0.004213 -0.063143 0.119541\nvn -0.8906 -0.0646 -0.4502\nv -0.004853 -0.063226 0.120819\nvn -0.8906 -0.0646 -0.4502\nv -0.004559 -0.063407 0.119472\nvn -0.5403 0.8102 -0.2272\nv -0.005267 -0.063397 0.121195\nvn -0.5403 0.8102 -0.2272\nv -0.004853 -0.063226 0.120819\nvn -0.5403 0.8102 -0.2272\nv 0.00282 -0.06331 0.118015\nvn 0.3703 0.3525 -0.8594\nv -0.00131 -0.063096 0.117479\nvn -0.252 0.5771 -0.7768\nv -0.001985 -0.063329 0.117525\nvn -0.252 0.5771 -0.7768\nv -0.002164 -0.062998 0.117829\nvn -0.252 0.5771 -0.7768\nv -0.003535 -0.062594 0.126541\nvn -0.0823 -0.9864 0.1421\nv -0.00343 -0.062639 0.126292\nvn -0.0823 -0.9864 0.1421\nv -0.002223 -0.062589 0.127339\nvn -0.0823 -0.9864 0.1421\nv -0.002401 -0.062638 0.117682\nvn -0.2311 -0.4942 -0.838\nv -0.000844 -0.06272 0.117302\nvn -0.2311 -0.4942 -0.838\nv -0.002164 -0.062998 0.117829\nvn -0.2311 -0.4942 -0.838\nv -0.005472 -0.062579 0.122631\nvn -0.6809 -0.6899 0.2457\nv -0.004946 -0.062812 0.123435\nvn -0.6809 -0.6899 0.2457\nv -0.004634 -0.062663 0.124719\nvn -0.6809 -0.6899 0.2457\nv 0.001324 -0.063391 0.11711\nvn 0.1185 0.9522 -0.2815\nv 0.00282 -0.06331 0.118015\nvn 0.1185 0.9522 -0.2815\nv 0.002785 -0.063392 0.117721\nvn 0.1185 0.9522 -0.2815\nv -0.002223 -0.062589 0.127339\nvn -0.1464 -0.9656 0.215\nv -0.00343 -0.062639 0.126292\nvn -0.1464 -0.9656 0.215\nv -0.002108 -0.062662 0.127087\nvn -0.1464 -0.9656 0.215\nv 0.001724 -0.063193 0.11759\nvn 0.2761 -0.4653 -0.841\nv 0.00282 -0.06331 0.118015\nvn 0.2761 -0.4653 -0.841\nv 0.000217 -0.063288 0.117148\nvn 0.2761 -0.4653 -0.841\nv 0.000217 -0.063288 0.117148\nvn 0.0824 0.9712 -0.2235\nv 0.00282 -0.06331 0.118015\nvn 0.0824 0.9712 -0.2235\nv 0.001324 -0.063391 0.11711\nvn 0.0824 0.9712 -0.2235\nv -0.00454 -0.063 0.124436\nvn -0.8903 0.3634 0.2746\nv -0.004989 -0.063195 0.123239\nvn -0.8903 0.3634 0.2746\nv -0.004524 -0.063329 0.124923\nvn -0.8903 0.3634 0.2746\nv -0.000844 -0.06272 0.117302\nvn -0.3763 0.0281 -0.9261\nv -0.00131 -0.063096 0.117479\nvn -0.3763 0.0281 -0.9261\nv -0.002164 -0.062998 0.117829\nvn -0.3763 0.0281 -0.9261\nv -0.00343 -0.062639 0.126292\nvn -0.4791 -0.3931 0.7848\nv -0.002771 -0.063003 0.126512\nvn -0.4791 -0.3931 0.7848\nv -0.002108 -0.062662 0.127087\nvn -0.4791 -0.3931 0.7848\nv -0.004213 -0.063143 0.119541\nvn -0.5622 0.7944 -0.2298\nv -0.004559 -0.063407 0.119472\nvn -0.5622 0.7944 -0.2298\nv -0.004853 -0.063226 0.120819\nvn -0.5622 0.7944 -0.2298\nv -0.004989 -0.063195 0.123239\nvn -0.3968 0.8998 0.1815\nv -0.004765 -0.062636 0.120173\nvn -0.6512 -0.6127 -0.4478\nv -0.004007 -0.062718 0.119183\nvn -0.6512 -0.6127 -0.4478\nv -0.00461 -0.062887 0.120291\nvn -0.6512 -0.6127 -0.4478\nv -0.005082 -0.06277 0.121983\nvn -0.4226 -0.9062 0.0137\nv -0.004946 -0.062812 0.123435\nvn -0.4226 -0.9062 0.0137\nv -0.005472 -0.062579 0.122631\nvn -0.4226 -0.9062 0.0137\nv -0.002595 -0.063393 0.127061\nvn -0.2478 0.9031 0.3507\nv -0.003281 -0.063325 0.126401\nvn -0.2478 0.9031 0.3507\nv -0.003563 -0.063394 0.126381\nvn -0.2478 0.9031 0.3507\nv -0.004896 -0.062602 0.119816\nvn -0.1554 -0.9872 -0.0369\nv -0.004007 -0.062718 0.119183\nvn -0.1554 -0.9872 -0.0369\nv -0.004765 -0.062636 0.120173\nvn -0.1554 -0.9872 -0.0369\nv -0.001488 -0.0626 0.117068\nvn -0.1037 -0.9712 -0.2145\nv -0.000844 -0.06272 0.117302\nvn -0.1037 -0.9712 -0.2145\nv -0.002401 -0.062638 0.117682\nvn -0.1037 -0.9712 -0.2145\nv -0.004007 -0.062718 0.119183\nvn -0.8797 0.0251 -0.4749\nv -0.004213 -0.063143 0.119541\nvn -0.8797 0.0251 -0.4749\nv -0.00461 -0.062887 0.120291\nvn -0.8797 0.0251 -0.4749\nv -0.001985 -0.063329 0.117525\nvn -0.0891 0.9348 -0.3439\nv -0.00059 -0.0634 0.116971\nvn -0.0891 0.9348 -0.3439\nv -0.002133 -0.063393 0.117391\nvn -0.0891 0.9348 -0.3439\nv -0.003535 -0.062594 0.126541\nvn -0.1355 -0.9836 0.1192\nv -0.004474 -0.062589 0.125514\nvn -0.1353 -0.9837 0.1188\nv -0.00343 -0.062639 0.126292\nvn -0.1348 -0.9838 0.1182\nv -0.00131 -0.063096 0.117479\nvn -0.1664 0.2969 -0.9403\nv 0.000217 -0.063288 0.117148\nvn -0.1664 0.2969 -0.9403\nv -0.001985 -0.063329 0.117525\nvn -0.1664 0.2969 -0.9403\nv -0.00343 -0.062639 0.126292\nvn -0.5383 -0.6508 0.5355\nv -0.003906 -0.062857 0.125549\nvn -0.5383 -0.6508 0.5355\nv -0.002771 -0.063003 0.126512\nvn -0.5383 -0.6508 0.5355\nv -0.000844 -0.06272 0.117302\nvn -0.1188 -0.3 -0.9465\nv 0.000149 -0.063101 0.117298\nvn -0.1188 -0.3 -0.9465\nv -0.00131 -0.063096 0.117479\nvn -0.1188 -0.3 -0.9465\nv -0.003402 -0.063188 0.118586\nvn -0.4854 0.7505 -0.4484\nv -0.004559 -0.063407 0.119472\nvn -0.4854 0.7505 -0.4484\nv -0.004213 -0.063143 0.119541\nvn -0.4854 0.7505 -0.4484\nv 0.000217 -0.063288 0.117148\nvn -0.0679 0.9537 -0.293\nv -0.00059 -0.0634 0.116971\nvn -0.0679 0.9537 -0.293\nv -0.001985 -0.063329 0.117525\nvn -0.0679 0.9537 -0.293\nv -0.003906 -0.062857 0.125549\nvn -0.6474 -0.0027 0.7622\nv -0.003888 -0.063106 0.125563\nvn -0.6474 -0.0027 0.7622\nv -0.002771 -0.063003 0.126512\nvn -0.6474 -0.0027 0.7622\nv -0.004896 -0.062602 0.119816\nvn -0.2812 -0.9333 -0.2234\nv -0.003222 -0.06277 0.11841\nvn -0.2812 -0.9333 -0.2234\nv -0.004007 -0.062718 0.119183\nvn -0.2812 -0.9333 -0.2234\nv -0.005082 -0.06277 0.121983\nvn -0.9935 0.0629 0.0949\nv -0.004989 -0.063195 0.123239\nvn -0.9935 0.0629 0.0949\nv -0.004946 -0.062812 0.123435\nvn -0.9935 0.0629 0.0949\nv 0.000149 -0.063101 0.117298\nvn -0.0971 0.5982 -0.7955\nv 0.000217 -0.063288 0.117148\nvn -0.0971 0.5982 -0.7955\nv -0.00131 -0.063096 0.117479\nvn -0.0971 0.5982 -0.7955\nv -0.003741 -0.062595 0.118339\nvn -0.0557 -0.9973 -0.0486\nv -0.002401 -0.062638 0.117682\nvn -0.0557 -0.9973 -0.0486\nv -0.004896 -0.062602 0.119816\nvn -0.0557 -0.9973 -0.0486\nv -0.003888 -0.063106 0.125563\nvn -0.5284 0.6456 0.5514\nv -0.003281 -0.063325 0.126401\nvn -0.5284 0.6456 0.5514\nv -0.002771 -0.063003 0.126512\nvn -0.5284 0.6456 0.5514\nv -0.003563 -0.063394 0.126381\nvn -0.2487 0.9415 0.2274\nv -0.003281 -0.063325 0.126401\nvn -0.2487 0.9415 0.2274\nv -0.004448 -0.063393 0.125407\nvn -0.2487 0.9415 0.2274\nv 0.000724 -0.062823 0.117306\nvn 0.0042 0.0208 -0.9998\nv 0.000149 -0.063101 0.117298\nvn 0.0042 0.0208 -0.9998\nv -0.000844 -0.06272 0.117302\nvn 0.0042 0.0208 -0.9998\nv -0.001488 -0.0626 0.117068\nvn -0.0375 -0.9265 -0.3745\nv -5e-05 -0.062583 0.116884\nvn -0.0375 -0.9265 -0.3745\nv -0.000844 -0.06272 0.117302\nvn -0.0375 -0.9265 -0.3745\nv -0.003222 -0.06277 0.11841\nvn -0.7013 0.0014 -0.7128\nv -0.003402 -0.063188 0.118586\nvn -0.7013 0.0014 -0.7128\nv -0.004007 -0.062718 0.119183\nvn -0.7013 0.0014 -0.7128\nv -0.004007 -0.062718 0.119183\nvn -0.7552 -0.1689 -0.6333\nv -0.003402 -0.063188 0.118586\nvn -0.7552 -0.1689 -0.6333\nv -0.004213 -0.063143 0.119541\nvn -0.7552 -0.1689 -0.6333\nv -0.002401 -0.062638 0.117682\nvn -0.6451 -0.1341 -0.7523\nv -0.003222 -0.06277 0.11841\nvn -0.6451 -0.1341 -0.7523\nv -0.004896 -0.062602 0.119816\nvn -0.6451 -0.1341 -0.7523\nv -0.005082 -0.06277 0.121983\nvn -0.9872 -0.1585 0.0197\nv -0.00502 -0.063188 0.121739\nvn -0.9872 -0.1585 0.0197\nv -0.004989 -0.063195 0.123239\nvn -0.9872 -0.1585 0.0197\nv -0.004634 -0.062663 0.124719\nvn -0.1346 -0.9839 0.1178\nv -0.004989 -0.063195 0.123239\nvn -0.5975 0.7987 0.0709\nv -0.005382 -0.063399 0.12223\nvn -0.5975 0.7987 0.0709\nv -0.005195 -0.063399 0.1238\nvn -0.5975 0.7987 0.0709\nv -5e-05 -0.062583 0.116884\nvn -0.0588 -0.9103 -0.4098\nv 0.000724 -0.062823 0.117306\nvn -0.0588 -0.9103 -0.4098\nv -0.000844 -0.06272 0.117302\nvn -0.0588 -0.9103 -0.4098\nv -0.002859 -0.062589 0.117665\nvn -0.0989 -0.9856 -0.1375\nv -0.002401 -0.062638 0.117682\nvn -0.0989 -0.9856 -0.1375\nv -0.003741 -0.062595 0.118339\nvn -0.0989 -0.9856 -0.1375\nv -0.004634 -0.062663 0.124719\nvn -0.7459 -0.3346 0.576\nv -0.003906 -0.062857 0.125549\nvn -0.7459 -0.3346 0.576\nv -0.00343 -0.062639 0.126292\nvn -0.7459 -0.3346 0.576\nv -0.005435 -0.062594 0.121644\nvn 0.0464 -0.9988 0.0179\nv -0.004896 -0.062602 0.119816\nvn 0.0464 -0.9988 0.0179\nv -0.005472 -0.062579 0.122631\nvn 0.0464 -0.9988 0.0179\nv -0.005287 -0.060609 0.12036\nvn -0.871 -0.0368 -0.4898\nv -0.004842 -0.062162 0.119687\nvn -0.871 -0.0368 -0.4898\nv -0.004896 -0.062602 0.119816\nvn -0.871 -0.0368 -0.4898\nv -0.004896 -0.062602 0.119816\nvn -0.7821 -0.1171 -0.612\nv -0.004524 -0.060598 0.118957\nvn -0.7821 -0.1171 -0.612\nv -0.003741 -0.062595 0.118339\nvn -0.7821 -0.1171 -0.612\nv -0.004594 -0.059702 0.118966\nvn -0.7206 -0.0489 -0.6916\nv -0.003604 -0.058699 0.117864\nvn -0.7206 -0.0489 -0.6916\nv -0.004524 -0.060598 0.118957\nvn -0.7206 -0.0489 -0.6916\nv -0.004524 -0.060598 0.118957\nvn -0.7093 -0.0606 -0.7023\nv -0.003604 -0.058699 0.117864\nvn -0.7093 -0.0606 -0.7023\nv -0.003741 -0.062595 0.118339\nvn -0.7093 -0.0606 -0.7023\nv -0.003741 -0.062595 0.118339\nvn -0.6049 -0.0752 -0.7928\nv -0.003604 -0.058699 0.117864\nvn -0.6049 -0.0752 -0.7928\nv -0.002859 -0.062589 0.117665\nvn -0.6049 -0.0752 -0.7928\nv -0.003604 -0.058699 0.117864\nvn -0.5333 -0.0589 -0.8439\nv -0.002427 -0.059549 0.11718\nvn -0.5333 -0.0589 -0.8439\nv -0.002859 -0.062589 0.117665\nvn -0.5333 -0.0589 -0.8439\nv -0.004524 -0.060598 0.118957\nvn -0.8404 -0.0596 -0.5386\nv -0.004817 -0.060618 0.119416\nvn -0.8433 -0.0569 -0.5344\nv -0.004594 -0.059702 0.118966\nvn -0.8409 -0.0593 -0.538\nv -0.004861 -0.05972 0.119391\nvn -0.8438 -0.0564 -0.5337\nv -0.004842 -0.062162 0.119687\nvn -0.9063 -0.0128 -0.4224\nv -0.004524 -0.060598 0.118957\nvn -0.9063 -0.0128 -0.4224\nv -0.004896 -0.062602 0.119816\nvn -0.9063 -0.0128 -0.4224\nv -0.005059 -0.060618 0.119851\nvn -0.9122 -0.0515 -0.4064\nv -0.005287 -0.060609 0.12036\nvn -0.9122 -0.0515 -0.4064\nv -0.0051 -0.05972 0.119829\nvn -0.9122 -0.0515 -0.4064\nv -0.005317 -0.059702 0.120284\nvn -0.9021 -0.0656 -0.4265\nv -0.0051 -0.05972 0.119829\nvn -0.9021 -0.0656 -0.4265\nv -0.005287 -0.060609 0.12036\nvn -0.9021 -0.0656 -0.4265\nv -0.002223 -0.062589 0.127339\nvn -0.5173 -0.0909 0.8509\nv -0.002734 -0.05965 0.127343\nvn -0.5173 -0.0909 0.8509\nv -0.003535 -0.062594 0.126541\nvn -0.5173 -0.0909 0.8509\nv -0.002859 -0.062589 0.117665\nvn -0.398 -0.0891 -0.9131\nv -0.002427 -0.059549 0.11718\nvn -0.398 -0.0891 -0.9131\nv -0.001488 -0.0626 0.117068\nvn -0.398 -0.0891 -0.9131\nv -0.002427 -0.059549 0.11718\nvn -0.3264 -0.066 -0.9429\nv -0.001628 -0.058713 0.116845\nvn -0.3264 -0.066 -0.9429\nv -0.001488 -0.0626 0.117068\nvn -0.3264 -0.066 -0.9429\nv -0.002734 -0.05965 0.127343\nvn -0.5703 -0.0677 0.8186\nv -0.003477 -0.058791 0.126896\nvn -0.5703 -0.0677 0.8186\nv -0.003535 -0.062594 0.126541\nvn -0.5703 -0.0677 0.8186\nv -0.003477 -0.058791 0.126896\nvn -0.6701 -0.0589 0.7399\nv -0.004176 -0.058577 0.12628\nvn -0.6701 -0.0589 0.7399\nv -0.003535 -0.062594 0.126541\nvn -0.6701 -0.0589 0.7399\nv -0.001488 -0.0626 0.117068\nvn -0.2406 -0.0644 -0.9685\nv -0.001628 -0.058713 0.116845\nvn -0.2406 -0.0644 -0.9685\nv -0.000747 -0.059628 0.116687\nvn -0.2406 -0.0644 -0.9685\nv -0.003535 -0.062594 0.126541\nvn -0.7362 -0.0738 0.6728\nv -0.004176 -0.058577 0.12628\nvn -0.7362 -0.0738 0.6728\nv -0.004474 -0.062589 0.125514\nvn -0.7362 -0.0738 0.6728\nv -0.001488 -0.0626 0.117068\nvn -0.1256 -0.0955 -0.9875\nv -0.000747 -0.059628 0.116687\nvn -0.1256 -0.0955 -0.9875\nv -5e-05 -0.062583 0.116884\nvn -0.1256 -0.0955 -0.9875\nv -0.004176 -0.058577 0.12628\nvn -0.7822 -0.0603 0.6202\nv -0.004853 -0.059103 0.125375\nvn -0.7822 -0.0603 0.6202\nv -0.004474 -0.062589 0.125514\nvn -0.7822 -0.0603 0.6202\nv -0.000747 -0.059628 0.116687\nvn -0.042 -0.0763 -0.9962\nv 0.000188 -0.059524 0.11664\nvn -0.042 -0.0763 -0.9962\nv -5e-05 -0.062583 0.116884\nvn -0.042 -0.0763 -0.9962\nv -0.004474 -0.062589 0.125514\nvn -0.871 -0.0754 0.4855\nv -0.004853 -0.059103 0.125375\nvn -0.871 -0.0754 0.4855\nv -0.005074 -0.062588 0.124437\nvn -0.871 -0.0754 0.4855\nv 0.000188 -0.059524 0.11664\nvn 0.0905 -0.0863 -0.9921\nv 0.001322 -0.062592 0.11701\nvn 0.0905 -0.0863 -0.9921\nv -5e-05 -0.062583 0.116884\nvn 0.0905 -0.0863 -0.9921\nv 0.000188 -0.059524 0.11664\nvn 0.1271 -0.0724 -0.9892\nv 0.00098 -0.059104 0.116711\nvn 0.1271 -0.0724 -0.9892\nv 0.001322 -0.062592 0.11701\nvn 0.1271 -0.0724 -0.9892\nv -0.004853 -0.059103 0.125375\nvn -0.903 -0.0573 0.4258\nv -0.005414 -0.058688 0.124242\nvn -0.903 -0.0573 0.4258\nv -0.005074 -0.062588 0.124437\nvn -0.903 -0.0573 0.4258\nv -0.005414 -0.058688 0.124242\nvn -0.9446 -0.0661 0.3215\nv -0.005487 -0.060486 0.123656\nvn -0.9446 -0.0661 0.3215\nv -0.005074 -0.062588 0.124437\nvn -0.9446 -0.0661 0.3215\nv 0.00098 -0.059104 0.116711\nvn 0.2519 -0.0582 -0.966\nv 0.001904 -0.05893 0.116941\nvn 0.2519 -0.0582 -0.966\nv 0.001322 -0.062592 0.11701\nvn 0.2519 -0.0582 -0.966\nv -0.005074 -0.062588 0.124437\nvn -0.9706 -0.1114 0.2135\nv -0.005487 -0.060486 0.123656\nvn -0.9706 -0.1114 0.2135\nv -0.005472 -0.062579 0.122631\nvn -0.9706 -0.1114 0.2135\nv -0.005414 -0.058688 0.124242\nvn -0.98 -0.0243 0.1974\nv -0.00574 -0.058608 0.122631\nvn -0.98 -0.0243 0.1974\nv -0.005487 -0.060486 0.123656\nvn -0.98 -0.0243 0.1974\nv 0.001322 -0.062592 0.11701\nvn 0.3509 -0.0733 -0.9335\nv 0.001904 -0.05893 0.116941\nvn 0.3509 -0.0733 -0.9335\nv 0.002406 -0.062587 0.117417\nvn 0.3509 -0.0733 -0.9335\nv -0.005487 -0.060486 0.123656\nvn -0.9903 -0.0668 0.1221\nv -0.00574 -0.058608 0.122631\nvn -0.9903 -0.0668 0.1221\nv -0.005472 -0.062579 0.122631\nvn -0.9903 -0.0668 0.1221\nv 0.001904 -0.05893 0.116941\nvn 0.4269 -0.0588 -0.9024\nv 0.002992 -0.058633 0.117436\nvn 0.4269 -0.0588 -0.9024\nv 0.002406 -0.062587 0.117417\nvn 0.4269 -0.0588 -0.9024\nv -0.005472 -0.062579 0.122631\nvn -0.9971 -0.0673 -0.037\nv -0.00574 -0.058608 0.122631\nvn -0.9971 -0.0673 -0.037\nv -0.005435 -0.062594 0.121644\nvn -0.9971 -0.0673 -0.037\nv -0.00574 -0.058608 0.122631\nvn -0.9962 -0.0608 -0.0629\nv -0.005646 -0.05885 0.12137\nvn -0.9962 -0.0608 -0.0629\nv -0.005435 -0.062594 0.121644\nvn -0.9962 -0.0608 -0.0629\nv -0.005646 -0.05885 0.12137\nvn -0.9724 -0.0711 -0.2221\nv -0.005287 -0.060609 0.12036\nvn -0.9724 -0.0711 -0.2221\nv -0.005435 -0.062594 0.121644\nvn -0.9724 -0.0711 -0.2221\nv -0.005435 -0.062594 0.121644\nvn -0.9535 -0.1102 -0.2805\nv -0.005287 -0.060609 0.12036\nvn -0.9535 -0.1102 -0.2805\nv -0.004896 -0.062602 0.119816\nvn -0.9535 -0.1102 -0.2805\nv -0.005646 -0.05885 0.12137\nvn -0.9664 -0.053 -0.2515\nv -0.005317 -0.059702 0.120284\nvn -0.9664 -0.053 -0.2515\nv -0.005287 -0.060609 0.12036\nvn -0.9664 -0.053 -0.2515\nv -0.004958 -0.047389 0.125241\nvn -0.8967 -0.0029 0.4425\nv -0.005414 -0.058688 0.124242\nvn -0.8967 -0.0029 0.4425\nv -0.004853 -0.059103 0.125375\nvn -0.8967 -0.0029 0.4425\nv 0.002475 -0.052043 0.117178\nvn 0.4163 -0.0028 -0.9092\nv 0.002803 -0.052229 0.117331\nvn 0.419 -0.0027 -0.908\nv 0.002992 -0.058633 0.117436\nvn 0.4179 -0.0028 -0.9085\nv -0.004958 -0.047389 0.125241\nvn -0.8019 -0.0005 0.5974\nv -0.004853 -0.059103 0.125375\nvn -0.8007 -0.0003 0.5991\nv -0.004176 -0.058577 0.12628\nvn -0.804 -0.0009 0.5947\nv 0.002562 -0.046743 0.117199\nvn 0.5164 0.0317 -0.8558\nv 0.001972 -0.045494 0.11689\nvn 0.5164 0.0317 -0.8558\nv 0.002983 -0.047119 0.11744\nvn 0.5164 0.0317 -0.8558\nv -0.004346 -0.047417 0.126072\nvn -0.6966 0.0028 0.7175\nv -0.004176 -0.058577 0.12628\nvn -0.6966 0.0028 0.7175\nv -0.004187 -0.052037 0.126244\nvn -0.6966 0.0028 0.7175\nv 0.001904 -0.05893 0.116941\nvn 0.417 -0.0032 -0.9089\nv 0.002133 -0.047383 0.117004\nvn 0.4178 -0.0033 -0.9085\nv -0.004043 -0.052128 0.12636\nvn -0.6271 0.0033 0.7789\nv -0.004187 -0.052037 0.126244\nvn -0.6271 0.0033 0.7789\nv -0.004176 -0.058577 0.12628\nvn -0.6271 0.0033 0.7789\nv -0.003789 -0.052063 0.126649\nvn -0.7516 0.0073 0.6596\nv -0.004043 -0.052128 0.12636\nvn -0.7516 0.0073 0.6596\nv -0.004176 -0.058577 0.12628\nvn -0.7516 0.0073 0.6596\nv 0.002133 -0.047383 0.117004\nvn 0.2419 0.0005 -0.9703\nv 0.001904 -0.05893 0.116941\nvn 0.2419 0.0005 -0.9703\nv 0.00098 -0.059104 0.116711\nvn 0.2419 0.0005 -0.9703\nv 0.000195 -0.047383 0.116595\nvn 0.0913 -0.0037 -0.9958\nv 0.00098 -0.059104 0.116711\nvn 0.0913 -0.0037 -0.9958\nv 0.000188 -0.059524 0.11664\nvn 0.0913 -0.0037 -0.9958\nv -0.000231 -0.045494 0.116572\nvn 0.1427 0.0451 -0.9887\nv 0.001972 -0.045494 0.11689\nvn 0.1427 0.0451 -0.9887\nv 0.001074 -0.046742 0.116703\nvn 0.1427 0.0451 -0.9887\nv 0.000195 -0.047383 0.116595\nvn -0.0502 -0.0036 -0.9987\nv 0.000188 -0.059524 0.11664\nvn -0.0502 -0.0036 -0.9987\nv -0.000747 -0.059628 0.116687\nvn -0.0502 -0.0036 -0.9987\nv -0.003789 -0.052063 0.126649\nvn -0.6617 -0.0031 0.7498\nv -0.004176 -0.058577 0.12628\nvn -0.6617 -0.0031 0.7498\nv -0.003477 -0.058791 0.126896\nvn -0.6617 -0.0031 0.7498\nv -0.001058 -0.047417 0.116713\nvn -0.1197 -0.001 -0.9928\nv -0.000747 -0.059628 0.116687\nvn -0.1197 -0.001 -0.9928\nv -0.001305 -0.052249 0.116747\nvn -0.1197 -0.001 -0.9928\nv -0.001305 -0.052249 0.116747\nvn -0.1824 -0.0058 -0.9832\nv -0.000747 -0.059628 0.116687\nvn -0.1824 -0.0058 -0.9832\nv -0.001628 -0.058713 0.116845\nvn -0.1824 -0.0058 -0.9832\nv -0.00326 -0.045494 0.127097\nvn -0.6369 -0.0012 0.7709\nv -0.003789 -0.052063 0.126649\nvn -0.6369 -0.0012 0.7709\nv -0.003477 -0.058791 0.126896\nvn -0.6369 -0.0012 0.7709\nv -0.00326 -0.045494 0.127097\nvn -0.6605 0.0072 0.7508\nv -0.004427 -0.045494 0.126055\nvn -0.6658 0.0129 0.746\nv -0.004036 -0.046783 0.126426\nvn -0.6651 0.0121 0.7466\nv -0.003774 -0.047204 0.126659\nvn -0.6592 0.0058 0.7519\nv -0.00326 -0.045494 0.127097\nvn -0.6489 0.0004 0.7608\nv -0.003774 -0.047204 0.126659\nvn -0.6489 0.0004 0.7608\nv -0.003789 -0.052063 0.126649\nvn -0.6489 0.0004 0.7608\nv -0.00326 -0.045494 0.127097\nvn -0.5188 -0.0044 0.8549\nv -0.003477 -0.058791 0.126896\nvn -0.5188 -0.0044 0.8549\nv -0.002734 -0.05965 0.127343\nvn -0.5188 -0.0044 0.8549\nv 0.002562 -0.046743 0.117199\nvn 0.3151 -0.0854 -0.9452\nv 0.001074 -0.046742 0.116703\nvn 0.3151 -0.0854 -0.9452\nv 0.001972 -0.045494 0.11689\nvn 0.3151 -0.0854 -0.9452\nv 0.001074 -0.046742 0.116703\nvn 0.0888 -0.0121 -0.996\nv -0.000155 -0.046717 0.116594\nvn 0.0888 -0.0121 -0.996\nv -0.000231 -0.045494 0.116572\nvn 0.0888 -0.0121 -0.996\nv -0.000155 -0.046717 0.116594\nvn -0.1524 -0.027 -0.9879\nv -0.001536 -0.046787 0.116809\nvn -0.1524 -0.027 -0.9879\nv -0.000231 -0.045494 0.116572\nvn -0.1524 -0.027 -0.9879\nv -0.001058 -0.047417 0.116713\nvn -0.0933 -0.0003 -0.9956\nv 0.000195 -0.047383 0.116595\nvn -0.0933 -0.0003 -0.9956\nv -0.000747 -0.059628 0.116687\nvn -0.0933 -0.0003 -0.9956\nv 0.000195 -0.047383 0.116595\nvn 0.2066 0.0042 -0.9784\nv 0.002133 -0.047383 0.117004\nvn 0.2066 0.0042 -0.9784\nv 0.00098 -0.059104 0.116711\nvn 0.2066 0.0042 -0.9784\nv -0.005686 -0.046829 0.122686\nvn -0.9907 -0.0517 0.1258\nv -0.00555 -0.046747 0.123793\nvn -0.9907 -0.0517 0.1258\nv -0.005605 -0.045494 0.123873\nvn -0.9907 -0.0517 0.1258\nv -0.00555 -0.046747 0.123793\nvn -0.9303 -0.0641 0.3611\nv -0.005294 -0.046802 0.124443\nvn -0.9303 -0.0641 0.3611\nv -0.005605 -0.045494 0.123873\nvn -0.9303 -0.0641 0.3611\nv -0.005294 -0.046802 0.124443\nvn -0.9146 -0.0425 0.4021\nv -0.0049 -0.04672 0.125347\nvn -0.9146 -0.0425 0.4021\nv -0.005605 -0.045494 0.123873\nvn -0.9146 -0.0425 0.4021\nv -0.0049 -0.04672 0.125347\nvn -0.878 0.0652 0.4742\nv -0.004427 -0.045494 0.126055\nvn -0.878 0.0652 0.4742\nv -0.005605 -0.045494 0.123873\nvn -0.878 0.0652 0.4742\nv -0.0049 -0.04672 0.125347\nvn -0.7808 -0.0577 0.6221\nv -0.004036 -0.046783 0.126426\nvn -0.7808 -0.0577 0.6221\nv -0.004427 -0.045494 0.126055\nvn -0.7808 -0.0577 0.6221\nv -0.004346 -0.047417 0.126072\nvn -0.8052 -0.0012 0.593\nv -0.004958 -0.047389 0.125241\nvn -0.9112 0.0003 0.4119\nv -0.005456 -0.047382 0.124138\nvn -0.9112 0.0003 0.4119\nv -0.005414 -0.058688 0.124242\nvn -0.9112 0.0003 0.4119\nv -0.005456 -0.047382 0.124138\nvn -0.9746 -0.0054 0.2239\nv -0.005681 -0.047386 0.123158\nvn -0.9746 -0.0054 0.2239\nv -0.00574 -0.058608 0.122631\nvn -0.9746 -0.0054 0.2239\nv -0.001827 -0.05206 0.116907\nvn -0.2935 0.0002 -0.956\nv -0.001305 -0.052249 0.116747\nvn -0.2935 0.0002 -0.956\nv -0.001628 -0.058713 0.116845\nvn -0.2935 0.0002 -0.956\nv -0.002755 -0.045494 0.117201\nvn -0.2412 0.0662 -0.9682\nv -0.000231 -0.045494 0.116572\nvn -0.2412 0.0662 -0.9682\nv -0.001536 -0.046787 0.116809\nvn -0.2412 0.0662 -0.9682\nv -0.002427 -0.059549 0.11718\nvn -0.3841 -0.0029 -0.9233\nv -0.001827 -0.05206 0.116907\nvn -0.3841 -0.0029 -0.9233\nv -0.001628 -0.058713 0.116845\nvn -0.3841 -0.0029 -0.9233\nv -0.002755 -0.045494 0.117201\nvn -0.3197 -0.0143 -0.9474\nv -0.001536 -0.046787 0.116809\nvn -0.3197 -0.0143 -0.9474\nv -0.001825 -0.047167 0.116912\nvn -0.3197 -0.0143 -0.9474\nv -0.002755 -0.045494 0.117201\nvn -0.3441 -0.0067 -0.9389\nv -0.001827 -0.05206 0.116907\nvn -0.3441 -0.0067 -0.9389\nv -0.002427 -0.059549 0.11718\nvn -0.3441 -0.0067 -0.9389\nv -0.002755 -0.045494 0.117201\nvn -0.2948 0.0011 -0.9556\nv -0.001825 -0.047167 0.116912\nvn -0.2948 0.0011 -0.9556\nv -0.001827 -0.05206 0.116907\nvn -0.2948 0.0011 -0.9556\nv -0.002755 -0.045494 0.117201\nvn -0.5084 -0.0106 -0.8611\nv -0.002427 -0.059549 0.11718\nvn -0.5084 -0.0106 -0.8611\nv -0.003604 -0.058699 0.117864\nvn -0.5084 -0.0106 -0.8611\nv -0.004825 -0.045494 0.119151\nvn -0.7425 -0.0033 -0.6698\nv -0.003604 -0.058699 0.117864\nvn -0.7425 -0.0033 -0.6698\nv -0.004594 -0.059702 0.118966\nvn -0.7425 -0.0033 -0.6698\nv -0.004825 -0.045494 0.119151\nvn -0.686 0.0075 -0.7276\nv -0.002755 -0.045494 0.117201\nvn -0.686 0.0075 -0.7276\nv -0.003604 -0.058699 0.117864\nvn -0.686 0.0075 -0.7276\nv -0.004825 -0.045494 0.119151\nvn -0.8153 -0.0057 -0.5789\nv -0.004594 -0.059702 0.118966\nvn -0.8153 -0.0057 -0.5789\nv -0.00504 -0.058172 0.11958\nvn -0.8153 -0.0057 -0.5789\nv -0.004825 -0.045494 0.119151\nvn -0.932 0.0034 -0.3623\nv -0.00504 -0.058172 0.11958\nvn -0.9335 0.0037 -0.3587\nv -0.005317 -0.059702 0.120284\nvn -0.9292 0.0027 -0.3696\nv -0.005714 -0.045494 0.121373\nvn -0.9284 0.0025 -0.3716\nv -0.005714 -0.045494 0.121373\nvn -0.958 -0.0048 -0.2867\nv -0.005317 -0.059702 0.120284\nvn -0.958 -0.0048 -0.2867\nv -0.005646 -0.05885 0.12137\nvn -0.958 -0.0048 -0.2867\nv -0.00574 -0.052226 0.122503\nvn -0.9991 -0.0007 -0.0423\nv -0.005728 -0.052042 0.122228\nvn -0.9991 -0.0007 -0.0423\nv -0.00574 -0.058608 0.122631\nvn -0.9991 -0.0007 -0.0423\nv -0.005714 -0.045494 0.121373\nvn -0.9973 -0.0051 -0.0737\nv -0.005646 -0.05885 0.12137\nvn -0.9973 -0.0051 -0.0737\nv -0.00574 -0.058608 0.122631\nvn -0.9973 -0.0051 -0.0737\nv -0.005714 -0.045494 0.121373\nvn -1 0.0016 -0.0038\nv -0.00574 -0.058608 0.122631\nvn -1 0.0016 -0.0038\nv -0.005728 -0.052042 0.122228\nvn -1 0.0016 -0.0038\nv -0.005734 -0.047043 0.12225\nvn -0.9997 -0.001 -0.0242\nv -0.005714 -0.045494 0.121373\nvn -0.9997 -0.001 -0.0242\nv -0.005728 -0.052042 0.122228\nvn -0.9997 -0.001 -0.0242\nv -0.005709 -0.052043 0.122779\nvn -0.9941 0.0023 0.1087\nv -0.00574 -0.052226 0.122503\nvn -0.9941 0.0023 0.1087\nv -0.00574 -0.058608 0.122631\nvn -0.9941 0.0023 0.1087\nv -0.005605 -0.045494 0.123873\nvn -0.9984 0.0372 0.0435\nv -0.005714 -0.045494 0.121373\nvn -0.9984 0.0372 0.0435\nv -0.005734 -0.047043 0.12225\nvn -0.9984 0.0372 0.0435\nv -0.005605 -0.045494 0.123873\nvn -0.9883 -0.0636 0.1389\nv -0.005734 -0.047043 0.12225\nvn -0.9883 -0.0636 0.1389\nv -0.005686 -0.046829 0.122686\nvn -0.9883 -0.0636 0.1389\nv -0.005681 -0.047386 0.123158\nvn -0.9998 0.0044 0.0189\nv -0.005709 -0.052043 0.122779\nvn -0.9998 0.0044 0.0189\nv -0.00574 -0.058608 0.122631\nvn -0.9998 0.0044 0.0189\nv -0.005456 -0.047382 0.124138\nvn -0.9801 -0.0019 0.1986\nv -0.00574 -0.058608 0.122631\nvn -0.9801 -0.0019 0.1986\nv -0.005414 -0.058688 0.124242\nvn -0.9801 -0.0019 0.1986\nv 0.001017 -0.059747 0.127944\nvn 0.0872 -0.3706 0.9247\nv 0.00081 -0.05964 0.128006\nvn 0.0872 -0.3706 0.9247\nv 0.000374 -0.05972 0.128015\nvn 0.0872 -0.3706 0.9247\nv 0.002769 -0.051984 0.127183\nvn 0.997 0.0016 -0.0777\nv 0.00276 -0.047214 0.127164\nvn 0.997 0.0016 -0.0777\nv 0.002774 -0.047157 0.12735\nvn 0.997 0.0016 -0.0777\nv 0.002744 -0.052032 0.127378\nvn 0.9919 -0.0054 0.1266\nv 0.002769 -0.051984 0.127183\nvn 0.9919 -0.0054 0.1266\nv 0.002774 -0.047157 0.12735\nvn 0.9919 -0.0054 0.1266\nv 0.002744 -0.052032 0.127378\nvn 0.6659 0.6833 0.2995\nv 0.003009 -0.052226 0.127231\nvn 0.6659 0.6833 0.2995\nv 0.00293 -0.052108 0.127138\nvn 0.6659 0.6833 0.2995\nv 0.002744 -0.052032 0.127378\nvn 0.6341 0.728 0.2609\nv 0.00293 -0.052108 0.127138\nvn 0.6341 0.728 0.2609\nv 0.002769 -0.051984 0.127183\nvn 0.6341 0.728 0.2609\nv 0.003009 -0.052226 0.127231\nvn 0.0432 0.6388 0.7682\nv 0.003233 -0.052043 0.127066\nvn 0.0432 0.6388 0.7682\nv 0.00293 -0.052108 0.127138\nvn 0.0432 0.6388 0.7682\nv 0.003363 -0.04747 0.126932\nvn 0.3889 0.0159 0.9211\nv 0.003233 -0.052043 0.127066\nvn 0.3889 0.0159 0.9211\nv 0.003548 -0.047386 0.126853\nvn 0.3889 0.0159 0.9211\nv 0.005473 -0.052037 0.124016\nvn 0.9952 0.0146 0.0964\nv 0.005393 -0.047535 0.124162\nvn 0.9952 0.0146 0.0964\nv 0.00537 -0.047383 0.124379\nvn 0.9952 0.0146 0.0964\nv 0.005625 -0.052063 0.123468\nvn 0.4294 0.8199 0.3787\nv 0.005436 -0.051994 0.123534\nvn 0.4294 0.8199 0.3787\nv 0.005511 -0.05214 0.123764\nvn 0.4294 0.8199 0.3787\nv 0.005625 -0.052063 0.123468\nvn 0.427 0.0034 0.9042\nv 0.005626 -0.047205 0.123449\nvn 0.427 0.0034 0.9042\nv 0.005445 -0.047228 0.123535\nvn 0.427 0.0034 0.9042\nv 0.005436 -0.051994 0.123534\nvn 0.3316 -0.0007 0.9434\nv 0.005625 -0.052063 0.123468\nvn 0.3316 -0.0007 0.9434\nv 0.005445 -0.047228 0.123535\nvn 0.3316 -0.0007 0.9434\nv 0.005456 -0.04698 0.123693\nvn -0.0031 -0.7363 0.6766\nv 0.005626 -0.047205 0.123449\nvn -0.0031 -0.7363 0.6766\nv 0.005512 -0.046831 0.123855\nvn -0.0031 -0.7363 0.6766\nv 0.005456 -0.04698 0.123693\nvn 0.4217 -0.5005 0.7561\nv 0.005445 -0.047228 0.123535\nvn 0.4217 -0.5005 0.7561\nv 0.005626 -0.047205 0.123449\nvn 0.4217 -0.5005 0.7561\nv 0.004033 -0.046746 0.126422\nvn 0.4285 -0.7489 0.5056\nv 0.003033 -0.04678 0.127218\nvn 0.4289 -0.748 0.5064\nv 0.003045 -0.046872 0.127071\nvn 0.4277 -0.7502 0.5042\nv 0.004059 -0.046828 0.126276\nvn 0.4272 -0.7511 0.5033\nv 0.004059 -0.046828 0.126276\nvn 0.5724 -0.6642 0.4808\nv 0.004736 -0.046785 0.125529\nvn 0.5724 -0.6642 0.4808\nv 0.004033 -0.046746 0.126422\nvn 0.5724 -0.6642 0.4808\nv 0.002774 -0.047157 0.12735\nvn 0.8257 -0.4443 0.3476\nv 0.003045 -0.046872 0.127071\nvn 0.8257 -0.4443 0.3476\nv 0.003033 -0.04678 0.127218\nvn 0.8257 -0.4443 0.3476\nv 0.00276 -0.047214 0.127164\nvn 0.7789 -0.6138 0.1288\nv 0.003045 -0.046872 0.127071\nvn 0.7789 -0.6138 0.1288\nv 0.002774 -0.047157 0.12735\nvn 0.7789 -0.6138 0.1288\nv -0.00574 -0.052226 0.122503\nvn -0.6862 0.6391 -0.3473\nv -0.005709 -0.052043 0.122779\nvn -0.6862 0.6391 -0.3473\nv -0.005619 -0.052108 0.122481\nvn -0.6862 0.6391 -0.3473\nv -0.005658 -0.04747 0.122959\nvn -0.9921 0.016 -0.1246\nv -0.005709 -0.052043 0.122779\nvn -0.9921 0.016 -0.1246\nv -0.005681 -0.047386 0.123158\nvn -0.9921 0.016 -0.1246\nv -0.004043 -0.052128 0.12636\nvn -0.3439 0.9346 0.0912\nv -0.003789 -0.052063 0.126649\nvn -0.3439 0.9346 0.0912\nv -0.003776 -0.052039 0.12645\nvn -0.3439 0.9346 0.0912\nv -0.003789 -0.052063 0.126649\nvn -0.9964 0.0033 -0.0853\nv -0.003774 -0.047204 0.126659\nvn -0.9964 0.0033 -0.0853\nv -0.003757 -0.047228 0.12646\nvn -0.9964 0.0033 -0.0853\nv -0.003776 -0.052039 0.12645\nvn -0.998 0.0041 -0.0637\nv -0.003789 -0.052063 0.126649\nvn -0.998 0.0041 -0.0637\nv -0.003757 -0.047228 0.12646\nvn -0.998 0.0041 -0.0637\nv -0.003957 -0.046895 0.12633\nvn -0.8352 -0.5477 -0.0493\nv -0.003774 -0.047204 0.126659\nvn -0.8352 -0.5477 -0.0493\nv -0.004036 -0.046783 0.126426\nvn -0.8352 -0.5477 -0.0493\nv -0.003957 -0.046895 0.12633\nvn -0.8548 -0.5189 -0.0114\nv -0.003757 -0.047228 0.12646\nvn -0.8548 -0.5189 -0.0114\nv -0.003774 -0.047204 0.126659\nvn -0.8548 -0.5189 -0.0114\nv -0.004036 -0.046783 0.126426\nvn -0.5838 -0.6906 0.427\nv -0.0049 -0.04672 0.125347\nvn -0.5838 -0.6906 0.427\nv -0.004905 -0.046822 0.125175\nvn -0.5838 -0.6906 0.427\nv -0.004905 -0.046822 0.125175\nvn -0.5472 -0.7336 0.403\nv -0.003957 -0.046895 0.12633\nvn -0.5472 -0.7336 0.403\nv -0.004036 -0.046783 0.126426\nvn -0.5472 -0.7336 0.403\nv -0.00551 -0.046827 0.123602\nvn -0.7116 -0.6888 0.1387\nv -0.00555 -0.046747 0.123793\nvn -0.7116 -0.6888 0.1387\nv -0.005686 -0.046829 0.122686\nvn -0.7116 -0.6888 0.1387\nv -0.00551 -0.046827 0.123602\nvn -0.6283 -0.7559 0.1838\nv -0.005294 -0.046802 0.124443\nvn -0.6283 -0.7559 0.1838\nv -0.00555 -0.046747 0.123793\nvn -0.6283 -0.7559 0.1838\nv -0.004905 -0.046822 0.125175\nvn -0.7227 -0.5851 0.368\nv -0.0049 -0.04672 0.125347\nvn -0.7227 -0.5851 0.368\nv -0.005294 -0.046802 0.124443\nvn -0.7227 -0.5851 0.368\nv -0.005734 -0.047043 0.12225\nvn -0.4644 -0.7743 0.4299\nv -0.00557 -0.04708 0.12236\nvn -0.4644 -0.7743 0.4299\nv -0.005686 -0.046829 0.122686\nvn -0.4644 -0.7743 0.4299\nv -0.005728 -0.052042 0.122228\nvn -0.4415 -0.0098 0.8972\nv -0.005555 -0.051973 0.122314\nvn -0.4415 -0.0098 0.8972\nv -0.00557 -0.04708 0.12236\nvn -0.4415 -0.0098 0.8972\nv -0.005728 -0.052042 0.122228\nvn -0.5577 -0.0043 0.8301\nv -0.00557 -0.04708 0.12236\nvn -0.5577 -0.0043 0.8301\nv -0.005734 -0.047043 0.12225\nvn -0.5577 -0.0043 0.8301\nv -0.005728 -0.052042 0.122228\nvn -0.5062 0.7559 0.4152\nv -0.005619 -0.052108 0.122481\nvn -0.5062 0.7559 0.4152\nv -0.005555 -0.051973 0.122314\nvn -0.5062 0.7559 0.4152\nv -0.005728 -0.052042 0.122228\nvn -0.5892 0.683 0.4317\nv -0.00574 -0.052226 0.122503\nvn -0.5892 0.683 0.4317\nv -0.005619 -0.052108 0.122481\nvn -0.5892 0.683 0.4317\nv 0.002803 -0.052229 0.117331\nvn 0.554 0.806 -0.2084\nv 0.002475 -0.052043 0.117178\nvn 0.554 0.806 -0.2084\nv 0.002641 -0.052106 0.117375\nvn 0.554 0.806 -0.2084\nv 0.002303 -0.047516 0.117132\nvn 0.6058 0.0147 -0.7955\nv 0.002475 -0.052043 0.117178\nvn 0.6058 0.0147 -0.7955\nv 0.002133 -0.047383 0.117004\nvn 0.6058 0.0147 -0.7955\nv -0.001322 -0.052064 0.116812\nvn -0.9299 0.045 -0.365\nv -0.001058 -0.047417 0.116713\nvn -0.9299 0.045 -0.365\nv -0.001305 -0.052249 0.116747\nvn -0.9299 0.045 -0.365\nv -0.001322 -0.052064 0.116812\nvn -0.4963 0.2474 -0.8321\nv -0.001305 -0.052249 0.116747\nvn -0.4963 0.2474 -0.8321\nv -0.001658 -0.052058 0.117014\nvn -0.4963 0.2474 -0.8321\nv -0.001305 -0.052249 0.116747\nvn 0.2166 0.9068 -0.3616\nv -0.001827 -0.05206 0.116907\nvn 0.2166 0.9068 -0.3616\nv -0.001658 -0.052058 0.117014\nvn 0.2166 0.9068 -0.3616\nv -0.001827 -0.05206 0.116907\nvn 0.7109 0.0003 -0.7033\nv -0.001825 -0.047167 0.116912\nvn 0.7109 0.0003 -0.7033\nv -0.001688 -0.04724 0.11705\nvn 0.7109 0.0003 -0.7033\nv -0.001658 -0.052058 0.117014\nvn 0.5345 0.0096 -0.8451\nv -0.001827 -0.05206 0.116907\nvn 0.5345 0.0096 -0.8451\nv -0.001688 -0.04724 0.11705\nvn 0.5345 0.0096 -0.8451\nv -0.001467 -0.046896 0.116936\nvn 0.457 -0.5382 -0.7081\nv -0.001825 -0.047167 0.116912\nvn 0.457 -0.5382 -0.7081\nv -0.001536 -0.046787 0.116809\nvn 0.457 -0.5382 -0.7081\nv -0.001467 -0.046896 0.116936\nvn 0.4495 -0.5272 -0.7211\nv -0.001688 -0.04724 0.11705\nvn 0.4495 -0.5272 -0.7211\nv -0.001825 -0.047167 0.116912\nvn 0.4495 -0.5272 -0.7211\nv -0.001536 -0.046787 0.116809\nvn -0.0777 -0.6874 -0.7222\nv -0.000155 -0.046717 0.116594\nvn -0.0777 -0.6874 -0.7222\nv -2e-06 -0.046822 0.116677\nvn -0.0777 -0.6874 -0.7222\nv -2e-06 -0.046822 0.116677\nvn -0.0715 -0.7769 -0.6255\nv -0.001467 -0.046896 0.116936\nvn -0.0715 -0.7769 -0.6255\nv -0.001536 -0.046787 0.116809\nvn -0.0715 -0.7769 -0.6255\nv 0.001556 -0.046821 0.116887\nvn 0.2269 -0.8184 -0.528\nv 0.002562 -0.046743 0.117199\nvn 0.2269 -0.8184 -0.528\nv 0.00248 -0.046855 0.117338\nvn 0.2269 -0.8184 -0.528\nv 0.001556 -0.046821 0.116887\nvn 0.3044 -0.2701 -0.9134\nv 0.001074 -0.046742 0.116703\nvn 0.3044 -0.2701 -0.9134\nv 0.002562 -0.046743 0.117199\nvn 0.3044 -0.2701 -0.9134\nv 0.001074 -0.046742 0.116703\nvn 0.0751 -0.8309 -0.5513\nv 0.001556 -0.046821 0.116887\nvn 0.0751 -0.8309 -0.5513\nv -2e-06 -0.046822 0.116677\nvn 0.0751 -0.8309 -0.5513\nv -2e-06 -0.046822 0.116677\nvn 0.0621 -0.5642 -0.8233\nv -0.000155 -0.046717 0.116594\nvn 0.0621 -0.5642 -0.8233\nv 0.001074 -0.046742 0.116703\nvn 0.0621 -0.5642 -0.8233\nv 0.002786 -0.047141 0.117518\nvn -0.2037 -0.679 -0.7053\nv 0.002562 -0.046743 0.117199\nvn -0.2037 -0.679 -0.7053\nv 0.002983 -0.047119 0.11744\nvn -0.2037 -0.679 -0.7053\nv 0.002786 -0.047141 0.117518\nvn -0.2335 -0.6842 -0.6909\nv 0.00248 -0.046855 0.117338\nvn -0.2335 -0.6842 -0.6909\nv 0.002562 -0.046743 0.117199\nvn -0.2335 -0.6842 -0.6909\nv 0.002806 -0.052009 0.11751\nvn -0.3701 0 -0.929\nv 0.002786 -0.047141 0.117518\nvn -0.3701 0 -0.929\nv 0.002983 -0.047119 0.11744\nvn -0.3701 0 -0.929\nv 0.003026 -0.052003 0.117457\nvn -0.2324 -0.0056 -0.9726\nv 0.002806 -0.052009 0.11751\nvn -0.2324 -0.0056 -0.9726\nv 0.002983 -0.047119 0.11744\nvn -0.2324 -0.0056 -0.9726\nv 0.002803 -0.052229 0.117331\nvn 0.2543 0.6086 -0.7516\nv 0.002641 -0.052106 0.117375\nvn 0.2543 0.6086 -0.7516\nv 0.002806 -0.052009 0.11751\nvn 0.2543 0.6086 -0.7516\nv 0.003026 -0.052003 0.117457\nvn -0.1966 0.6201 -0.7595\nv 0.002803 -0.052229 0.117331\nvn -0.1966 0.6201 -0.7595\nv 0.002806 -0.052009 0.11751\nvn -0.1966 0.6201 -0.7595\nv 0.000431 -0.04554 0.127341\nvn -0.0042 0.9978 0.0667\nv 0.000382 -0.045494 0.126647\nvn -0.0042 0.9978 0.0667\nv -0.001329 -0.04549 0.126479\nvn -0.0042 0.9978 0.0667\nv -0.001514 -0.045494 0.127926\nvn -0.4671 0.8824 -0.0573\nv -0.001329 -0.04549 0.126479\nvn -0.4671 0.8824 -0.0573\nv -0.001509 -0.045544 0.12712\nvn -0.4671 0.8824 -0.0573\nv -0.001514 -0.045494 0.127926\nvn 0.0256 0.9997 0.0061\nv 0.000431 -0.04554 0.127341\nvn 0.0256 0.9997 0.0061\nv -0.001329 -0.04549 0.126479\nvn 0.0256 0.9997 0.0061\nv -0.000502 -0.045529 0.117304\nvn 0.0133 0.9986 0.0504\nv -0.000231 -0.045494 0.116572\nvn 0.0131 0.9985 0.0526\nv -0.002755 -0.045494 0.117201\nvn 0.0133 0.9985 0.0525\nv 0.000636 -0.045494 0.128078\nvn 0.0045 0.998 -0.0637\nv 0.000431 -0.04554 0.127341\nvn 0.0045 0.998 -0.0637\nv -0.001514 -0.045494 0.127926\nvn 0.0045 0.998 -0.0637\nv 0.002531 -0.045494 0.127532\nvn -0.0277 0.9988 -0.0398\nv 0.003382 -0.045527 0.126102\nvn -0.025 0.999 -0.0382\nv 0.001878 -0.045528 0.127032\nvn -0.0241 0.999 -0.0376\nv -0.001798 -0.045529 0.117651\nvn 0.0133 0.9987 0.0496\nv 0.004057 -0.045494 0.12645\nvn -0.0285 0.9988 -0.0402\nv 0.000636 -0.045494 0.128078\nvn -0.0155 0.9986 -0.0514\nv 0.001878 -0.045528 0.127032\nvn -0.0189 0.9983 -0.0555\nv 0.000431 -0.04554 0.127341\nvn -0.0201 0.9982 -0.0569\nv -0.002985 -0.045511 0.118283\nvn 0.0266 0.9994 0.0212\nv -0.001798 -0.045529 0.117651\nvn 0.0266 0.9994 0.0212\nv -0.002755 -0.045494 0.117201\nvn 0.0266 0.9994 0.0212\nv 0.002531 -0.045494 0.127532\nvn -0.0145 0.9986 -0.0502\nv 0.001032 -0.045524 0.117391\nvn -0.0087 0.9992 0.0403\nv -0.000231 -0.045494 0.116572\nvn -0.0065 0.9989 0.0471\nv -0.000502 -0.045529 0.117304\nvn -0.0057 0.9989 0.0457\nv -0.003784 -0.045518 0.118977\nvn 0.0047 0.9999 0.0166\nv -0.002985 -0.045511 0.118283\nvn 0.0047 0.9999 0.0166\nv -0.002755 -0.045494 0.117201\nvn 0.0047 0.9999 0.0166\nv 0.001972 -0.045494 0.11689\nvn -0.0078 0.9989 0.046\nv -0.003784 -0.045518 0.118977\nvn 0.0283 0.9992 0.0274\nv -0.002755 -0.045494 0.117201\nvn 0.0287 0.9991 0.0304\nv -0.004825 -0.045494 0.119151\nvn 0.0287 0.9991 0.0298\nv -0.001885 -0.045533 0.118478\nvn 0.0188 0.9998 0.0065\nv -0.001798 -0.045529 0.117651\nvn 0.0188 0.9998 0.0065\nv -0.002985 -0.045511 0.118283\nvn 0.0188 0.9998 0.0065\nv -0.00227 -0.045571 0.118685\nvn -0.0094 0.9863 0.1646\nv -0.001885 -0.045533 0.118478\nvn -0.0094 0.9863 0.1646\nv -0.002985 -0.045511 0.118283\nvn -0.0094 0.9863 0.1646\nv 0.002757 -0.045532 0.11812\nvn -0.0117 0.9992 0.0385\nv -0.004529 -0.045527 0.120065\nvn 0.0281 0.9992 0.0268\nv 0.002757 -0.045532 0.11812\nvn -0.0279 0.9984 0.0488\nv 0.003505 -0.045494 0.117766\nvn -0.0279 0.9984 0.0488\nv 0.001972 -0.045494 0.11689\nvn -0.0279 0.9984 0.0488\nv -0.004529 -0.045527 0.120065\nvn 0.0509 0.9985 0.0211\nv -0.004825 -0.045494 0.119151\nvn 0.0495 0.9986 0.0198\nv -0.005714 -0.045494 0.121373\nvn 0.05 0.9985 0.0202\nv -0.005022 -0.045537 0.121728\nvn 0.0514 0.9984 0.0215\nv 0.003811 -0.04551 0.119027\nvn -0.0186 0.9996 0.0197\nv 0.004824 -0.045494 0.119141\nvn -0.0183 0.9997 0.0179\nv 0.003505 -0.045494 0.117766\nvn -0.0183 0.9997 0.0175\nv 0.003811 -0.04551 0.119027\nvn -0.0222 0.9998 0.0019\nv 0.002757 -0.045532 0.11812\nvn -0.0222 0.9998 0.0019\nv 0.002676 -0.045536 0.118976\nvn -0.0222 0.9998 0.0019\nv 0.003811 -0.04551 0.119027\nvn -0.0402 0.9989 0.0228\nv 0.003505 -0.045494 0.117766\nvn -0.0402 0.9989 0.0228\nv 0.002757 -0.045532 0.11812\nvn -0.0402 0.9989 0.0228\nv 0.003811 -0.04551 0.119027\nvn -0.0283 0.9891 0.1448\nv 0.002676 -0.045536 0.118976\nvn -0.0283 0.9891 0.1448\nv 0.003009 -0.045568 0.119265\nvn -0.0283 0.9891 0.1448\nv 0.004441 -0.045516 0.119897\nvn -0.0186 0.9996 0.0202\nv -0.005605 -0.045494 0.123873\nvn 0.0638 0.998 -0.0028\nv -0.005022 -0.045537 0.121728\nvn 0.0638 0.998 -0.0028\nv -0.005714 -0.045494 0.121373\nvn 0.0638 0.998 -0.0028\nv -0.004868 -0.045527 0.123724\nvn 0.0432 0.999 -0.0087\nv -0.005022 -0.045537 0.121728\nvn 0.043 0.999 -0.0084\nv -0.005605 -0.045494 0.123873\nvn 0.0409 0.999 -0.0194\nv 0.005703 -0.045494 0.121349\nvn -0.0327 0.9994 0.013\nv 0.004824 -0.045494 0.119141\nvn -0.0327 0.9994 0.013\nv 0.004441 -0.045516 0.119897\nvn -0.0327 0.9994 0.013\nv 0.004906 -0.045527 0.121062\nvn -0.0523 0.9982 0.0301\nv 0.005703 -0.045494 0.121349\nvn -0.0523 0.9982 0.0301\nv 0.004441 -0.045516 0.119897\nvn -0.0523 0.9982 0.0301\nv -0.004102 -0.045527 0.125304\nvn 0.0407 0.999 -0.0197\nv -0.004427 -0.045494 0.126055\nvn 0.0452 0.9987 -0.0244\nv -0.004102 -0.045527 0.125304\nvn 0.0452 0.9987 -0.0244\nv -0.005605 -0.045494 0.123873\nvn 0.0452 0.9987 -0.0244\nv 0.00504 -0.045536 0.122803\nvn -0.0445 0.999 0.0084\nv 0.005703 -0.045494 0.121349\nvn -0.0445 0.999 0.0084\nv 0.004906 -0.045527 0.121062\nvn -0.0445 0.999 0.0084\nv 0.005679 -0.045494 0.123299\nvn -0.0645 0.9979 -0.0008\nv 0.005703 -0.045494 0.121349\nvn -0.0645 0.9979 -0.0008\nv 0.00504 -0.045536 0.122803\nvn -0.0645 0.9979 -0.0008\nv -0.004427 -0.045494 0.126055\nvn 0.033 0.9988 -0.0361\nv -0.002686 -0.04553 0.126644\nvn 0.0315 0.999 -0.0316\nv -0.004102 -0.045527 0.125304\nvn 0.0311 0.9991 -0.0305\nv 0.005192 -0.045494 0.124876\nvn -0.0525 0.9985 -0.0162\nv 0.005679 -0.045494 0.123299\nvn -0.0525 0.9985 -0.0162\nv 0.00504 -0.045536 0.122803\nvn -0.0525 0.9985 -0.0162\nv 0.005192 -0.045494 0.124876\nvn -0.0398 0.9988 -0.0282\nv 0.00504 -0.045536 0.122803\nvn -0.042 0.999 -0.017\nv 0.004461 -0.045527 0.124726\nvn -0.0351 0.999 -0.0271\nv -0.00326 -0.045494 0.127097\nvn 0.0335 0.9987 -0.0376\nv -0.001514 -0.045494 0.127926\nvn 0.0238 0.9985 -0.05\nv -0.002686 -0.04553 0.126644\nvn 0.0238 0.9985 -0.05\nv -0.00326 -0.045494 0.127097\nvn 0.0238 0.9985 -0.05\nv -0.001514 -0.045494 0.127926\nvn 0.0361 0.9975 -0.0613\nv -0.001509 -0.045544 0.12712\nvn 0.0361 0.9975 -0.0613\nv -0.002686 -0.04553 0.126644\nvn 0.0361 0.9975 -0.0613\nv 0.004057 -0.045494 0.12645\nvn -0.0386 0.9989 -0.0283\nv 0.003382 -0.045527 0.126102\nvn -0.0351 0.999 -0.0275\nv -1.1e-05 -0.049483 0.128091\nvn -0.5979 0.0012 0.8016\nv 2.5e-05 -0.045994 0.128113\nvn -0.5979 0.0012 0.8016\nv -0.000436 -0.049329 0.127774\nvn -0.5979 0.0012 0.8016\nv 2.5e-05 -0.045994 0.128113\nvn -0.5242 -0.014 0.8515\nv -0.000632 -0.045994 0.127708\nvn -0.5242 -0.014 0.8515\nv -0.000436 -0.049329 0.127774\nvn -0.5242 -0.014 0.8515\nv -0.000632 -0.045994 0.127708\nvn -0.0001 -1 -0.0002\nv 2.5e-05 -0.045994 0.128113\nvn -0.0001 -1 -0.0002\nv -0.001277 -0.045994 0.127948\nvn -0.0001 -1 -0.0002\nv -0.000721 -0.049362 0.127738\nvn 0.3789 -0.0019 0.9254\nv -0.000632 -0.045994 0.127708\nvn 0.3789 -0.0019 0.9254\nv -0.001248 -0.04944 0.127953\nvn 0.3789 -0.0019 0.9254\nv -0.000632 -0.045994 0.127708\nvn 0.3479 0.0045 0.9375\nv -0.001277 -0.045994 0.127948\nvn 0.3479 0.0045 0.9375\nv -0.001248 -0.04944 0.127953\nvn 0.3479 0.0045 0.9375\nv -0.000691 -0.049955 0.128053\nvn 0.2766 0.4614 0.843\nv -0.000721 -0.049362 0.127738\nvn 0.2766 0.4614 0.843\nv -0.001248 -0.04944 0.127953\nvn 0.2766 0.4614 0.843\nv -0.000691 -0.049955 0.128053\nvn -0.1637 0.4562 0.8747\nv -0.000436 -0.049329 0.127774\nvn -0.1637 0.4562 0.8747\nv -0.000721 -0.049362 0.127738\nvn -0.1637 0.4562 0.8747\nv -1.1e-05 -0.049483 0.128091\nvn -0.3931 0.5031 0.7697\nv -0.000436 -0.049329 0.127774\nvn -0.3931 0.5031 0.7697\nv -0.000691 -0.049955 0.128053\nvn -0.3931 0.5031 0.7697\nv -0.00504 -0.058172 0.11958\nvn -0.9031 -0.0338 -0.4282\nv -0.0051 -0.05972 0.119829\nvn -0.9031 -0.0338 -0.4282\nv -0.005317 -0.059702 0.120284\nvn -0.9031 -0.0338 -0.4282\nv -0.00504 -0.058172 0.11958\nvn -0.877 -0.0429 -0.4786\nv -0.004861 -0.05972 0.119391\nvn -0.8766 -0.0511 -0.4784\nv -0.0051 -0.05972 0.119829\nvn -0.877 -0.0432 -0.4786\nv -0.005059 -0.060618 0.119851\nvn -0.8766 -0.0516 -0.4784\nv -0.00504 -0.058172 0.11958\nvn -0.8451 -0.0326 -0.5336\nv -0.004594 -0.059702 0.118966\nvn -0.8451 -0.0326 -0.5336\nv -0.004861 -0.05972 0.119391\nvn -0.8451 -0.0326 -0.5336\nv -0.004861 -0.05972 0.119391\nvn -0.8721 -0.0565 -0.486\nv -0.004817 -0.060618 0.119416\nvn -0.8721 -0.0565 -0.486\nv -0.005059 -0.060618 0.119851\nvn -0.8721 -0.0565 -0.486\nv -0.004524 -0.060598 0.118957\nvn -0.8387 -0.0807 -0.5385\nv -0.004842 -0.062162 0.119687\nvn -0.8387 -0.0807 -0.5385\nv -0.004817 -0.060618 0.119416\nvn -0.8387 -0.0807 -0.5385\nv -0.005059 -0.060618 0.119851\nvn -0.9104 -0.0849 -0.405\nv -0.004842 -0.062162 0.119687\nvn -0.9104 -0.0849 -0.405\nv -0.005287 -0.060609 0.12036\nvn -0.9104 -0.0849 -0.405\nv -0.004817 -0.060618 0.119416\nvn -0.8713 -0.0708 -0.4855\nv -0.004842 -0.062162 0.119687\nvn -0.8713 -0.0708 -0.4855\nv -0.005059 -0.060618 0.119851\nvn -0.8713 -0.0708 -0.4855\nv 0.00089 -0.060617 0.127903\nvn 0.1173 -0.0819 0.9897\nv 0.000373 -0.060618 0.127964\nvn 0.1173 -0.0819 0.9897\nv 0.000123 -0.062162 0.127866\nvn 0.1173 -0.0819 0.9897\nv 0.000373 -0.060618 0.127964\nvn 0.026 -0.0667 0.9974\nv -0.000125 -0.060618 0.127976\nvn 0.0214 -0.0555 0.9982\nv 0.000123 -0.062162 0.127866\nvn 0.0242 -0.0673 0.9974\nv 0.000374 -0.05972 0.128015\nvn 0.0225 -0.0563 0.9982\nv -0.000125 -0.05972 0.128025\nvn 0.0199 -0.049 0.9986\nv -0.000125 -0.05972 0.128025\nvn -0.0341 -0.0402 0.9986\nv 0.000123 -0.058175 0.128096\nvn -0.0341 -0.0402 0.9986\nv -0.000683 -0.059717 0.128006\nvn -0.0341 -0.0402 0.9986\nv 0.00081 -0.05964 0.128006\nvn 0.0299 -0.0472 0.9984\nv 0.000123 -0.058175 0.128096\nvn 0.0295 -0.0473 0.9984\nv 0.004371 -0.060617 0.118791\nvn 0.7936 -0.0882 -0.602\nv 0.004685 -0.060618 0.119205\nvn 0.7936 -0.0882 -0.602\nv 0.004719 -0.062162 0.119475\nvn 0.7936 -0.0882 -0.602\nv 0.004685 -0.060618 0.119205\nvn 0.8563 -0.071 -0.5116\nv 0.004941 -0.060618 0.119633\nvn 0.8563 -0.071 -0.5116\nv 0.004719 -0.062162 0.119475\nvn 0.8563 -0.071 -0.5116\nv 0.004725 -0.05972 0.11918\nvn 0.8529 -0.0464 -0.52\nv 0.004985 -0.05972 0.119606\nvn 0.8556 -0.0546 -0.5148\nv 0.004685 -0.060618 0.119205\nvn 0.8533 -0.0524 -0.5188\nv 0.004941 -0.060618 0.119633\nvn 0.8571 -0.0567 -0.5121\nv 0.004985 -0.05972 0.119606\nvn 0.8852 -0.0355 -0.4638\nv 0.004914 -0.058169 0.119353\nvn 0.8852 -0.0355 -0.4638\nv 0.005219 -0.0597 0.120052\nvn 0.8852 -0.0355 -0.4638\nv 0.004425 -0.059708 0.118764\nvn 0.8101 -0.0337 -0.5853\nv 0.004914 -0.058169 0.119353\nvn 0.8101 -0.0337 -0.5853\nv 0.004725 -0.05972 0.11918\nvn 0.8101 -0.0337 -0.5853\nv 0.004914 -0.058169 0.119353\nvn 0.8529 -0.0462 -0.5201\nv 0.002379 -0.046949 0.126746\nvn 0.7313 -0.0232 -0.6816\nv 0.00276 -0.047214 0.127164\nvn 0.7313 -0.0232 -0.6816\nv 0.002256 -0.052002 0.126786\nvn 0.7313 -0.0232 -0.6816\nv 0.002256 -0.052002 0.126786\nvn 0.6114 -0.0019 -0.7913\nv 0.00276 -0.047214 0.127164\nvn 0.6114 -0.0019 -0.7913\nv 0.002769 -0.051984 0.127183\nvn 0.6114 -0.0019 -0.7913\nv 0.002546 -0.052054 0.126597\nvn 0.1651 0.9861 -0.0191\nv 0.002256 -0.052002 0.126786\nvn 0.1651 0.9861 -0.0191\nv 0.00293 -0.052108 0.127138\nvn 0.1651 0.9861 -0.0191\nv 0.00293 -0.052108 0.127138\nvn 0.4037 0.727 -0.5555\nv 0.002256 -0.052002 0.126786\nvn 0.4037 0.727 -0.5555\nv 0.002769 -0.051984 0.127183\nvn 0.4037 0.727 -0.5555\nv 0.003233 -0.052043 0.127066\nvn -0.1597 0.9647 0.2094\nv 0.002546 -0.052054 0.126597\nvn -0.1597 0.9647 0.2094\nv 0.00293 -0.052108 0.127138\nvn -0.1597 0.9647 0.2094\nv 0.003233 -0.052043 0.127066\nvn -0.5664 0.0404 0.8232\nv 0.002709 -0.048549 0.126534\nvn -0.5651 0.0407 0.824\nv 0.002546 -0.052054 0.126597\nvn -0.5644 0.0409 0.8245\nv 0.003363 -0.04747 0.126932\nvn -0.567 0.0402 0.8227\nv 0.002709 -0.048549 0.126534\nvn -0.5483 0.0802 0.8324\nv 0.002829 -0.047142 0.126478\nvn -0.5483 0.0802 0.8324\nv 0.002219 -0.047842 0.126144\nvn -0.5483 0.0802 0.8324\nv 0.003363 -0.04747 0.126932\nvn -0.6155 0.0841 0.7836\nv 0.002829 -0.047142 0.126478\nvn -0.6155 0.0841 0.7836\nv 0.002709 -0.048549 0.126534\nvn -0.6155 0.0841 0.7836\nv 0.002829 -0.047142 0.126478\nvn -0.0734 0.7653 0.6395\nv 0.003363 -0.04747 0.126932\nvn -0.0734 0.7653 0.6395\nv 0.003548 -0.047386 0.126853\nvn -0.0734 0.7653 0.6395\nv 0.00537 -0.047383 0.124379\nvn 0.279 0.9536 0.1136\nv 0.004797 -0.047146 0.1238\nvn 0.279 0.9536 0.1136\nv 0.004133 -0.047127 0.125269\nvn 0.279 0.9536 0.1136\nv 0.004381 -0.047394 0.126069\nvn 0.3364 0.9196 0.2031\nv 0.00537 -0.047383 0.124379\nvn 0.3364 0.9196 0.2031\nv 0.004133 -0.047127 0.125269\nvn 0.3364 0.9196 0.2031\nv 0.003548 -0.047386 0.126853\nvn 0.2033 0.9515 0.2309\nv 0.004133 -0.047127 0.125269\nvn 0.2033 0.9515 0.2309\nv 0.002829 -0.047142 0.126478\nvn 0.2033 0.9515 0.2309\nv 0.003548 -0.047386 0.126853\nvn 0.2362 0.9413 0.2414\nv 0.004381 -0.047394 0.126069\nvn 0.2362 0.9413 0.2414\nv 0.004133 -0.047127 0.125269\nvn 0.2362 0.9413 0.2414\nv 0.004797 -0.047146 0.1238\nvn 0.6566 0.6489 -0.3844\nv 0.00537 -0.047383 0.124379\nvn 0.6566 0.6489 -0.3844\nv 0.005393 -0.047535 0.124162\nvn 0.6566 0.6489 -0.3844\nv 0.004814 -0.052048 0.123496\nvn 0.6187 0.0398 -0.7846\nv 0.004809 -0.048548 0.123669\nvn 0.6187 0.0398 -0.7846\nv 0.005473 -0.052037 0.124016\nvn 0.6187 0.0398 -0.7846\nv 0.004298 -0.047864 0.123325\nvn 0.6266 0.0774 -0.7755\nv 0.004797 -0.047146 0.1238\nvn 0.6266 0.0774 -0.7755\nv 0.004809 -0.048548 0.123669\nvn 0.6266 0.0774 -0.7755\nv 0.004809 -0.048548 0.123669\nvn 0.6062 0.0365 -0.7944\nv 0.005393 -0.047535 0.124162\nvn 0.6062 0.0365 -0.7944\nv 0.005473 -0.052037 0.124016\nvn 0.6062 0.0365 -0.7944\nv 0.004797 -0.047146 0.1238\nvn 0.5557 0.0817 -0.8274\nv 0.005393 -0.047535 0.124162\nvn 0.5557 0.0817 -0.8274\nv 0.004809 -0.048548 0.123669\nvn 0.5557 0.0817 -0.8274\nv 0.004889 -0.052053 0.123174\nvn 0.126 0.9919 0.0126\nv 0.004814 -0.052048 0.123496\nvn 0.126 0.9919 0.0126\nv 0.005511 -0.05214 0.123764\nvn 0.126 0.9919 0.0126\nv 0.005511 -0.05214 0.123764\nvn 0.2478 0.91 -0.3325\nv 0.004814 -0.052048 0.123496\nvn 0.2478 0.91 -0.3325\nv 0.005473 -0.052037 0.124016\nvn 0.2478 0.91 -0.3325\nv 0.005436 -0.051994 0.123534\nvn -0.453 0.679 0.5778\nv 0.004889 -0.052053 0.123174\nvn -0.453 0.679 0.5778\nv 0.005511 -0.05214 0.123764\nvn -0.453 0.679 0.5778\nv 0.005436 -0.051994 0.123534\nvn -0.5495 0.0009 0.8355\nv 0.005445 -0.047228 0.123535\nvn -0.5495 0.0009 0.8355\nv 0.004889 -0.052053 0.123174\nvn -0.5495 0.0009 0.8355\nv 0.005445 -0.047228 0.123535\nvn -0.4382 -0.0166 0.8987\nv 0.004917 -0.046956 0.123282\nvn -0.4382 -0.0166 0.8987\nv 0.004889 -0.052053 0.123174\nvn -0.4382 -0.0166 0.8987\nv 0.005445 -0.047228 0.123535\nvn -0.56 -0.4275 0.7097\nv 0.005456 -0.04698 0.123693\nvn -0.56 -0.4275 0.7097\nv 0.004917 -0.046956 0.123282\nvn -0.56 -0.4275 0.7097\nv 0.005456 -0.04698 0.123693\nvn -0.5305 -0.5255 0.6651\nv 0.005512 -0.046831 0.123855\nvn -0.5305 -0.5255 0.6651\nv 0.004917 -0.046956 0.123282\nvn -0.5305 -0.5255 0.6651\nv 0.004917 -0.046956 0.123282\nvn 0.1125 -0.9888 0.0985\nv 0.005512 -0.046831 0.123855\nvn 0.1125 -0.9888 0.0985\nv 0.004079 -0.046844 0.125366\nvn 0.1125 -0.9888 0.0985\nv 0.005512 -0.046831 0.123855\nvn 0.0788 -0.9947 0.0664\nv 0.005088 -0.046792 0.124941\nvn 0.0754 -0.9954 0.0584\nv 0.004079 -0.046844 0.125366\nvn 0.0783 -0.9948 0.0654\nv 0.004736 -0.046785 0.125529\nvn 0.0744 -0.9956 0.0561\nv 0.004736 -0.046785 0.125529\nvn 0.0838 -0.9963 0.0184\nv 0.004059 -0.046828 0.126276\nvn 0.0838 -0.9963 0.0184\nv 0.004079 -0.046844 0.125366\nvn 0.0838 -0.9963 0.0184\nv 0.004079 -0.046844 0.125366\nvn 0.0949 -0.9946 0.0409\nv 0.003045 -0.046872 0.127071\nvn 0.0949 -0.9946 0.0409\nv 0.002379 -0.046949 0.126746\nvn 0.0949 -0.9946 0.0409\nv 0.004059 -0.046828 0.126276\nvn 0.0572 -0.9982 0.0179\nv 0.003045 -0.046872 0.127071\nvn 0.0572 -0.9982 0.0179\nv 0.004079 -0.046844 0.125366\nvn 0.0572 -0.9982 0.0179\nv 0.003045 -0.046872 0.127071\nvn 0.4182 -0.5453 -0.7265\nv 0.00276 -0.047214 0.127164\nvn 0.4182 -0.5453 -0.7265\nv 0.002379 -0.046949 0.126746\nvn 0.4182 -0.5453 -0.7265\nv -0.005709 -0.052043 0.122779\nvn -0.1517 0.9547 -0.256\nv -0.004971 -0.052017 0.122437\nvn -0.1517 0.9547 -0.256\nv -0.005619 -0.052108 0.122481\nvn -0.1517 0.9547 -0.256\nv -0.004971 -0.052017 0.122437\nvn -0.1476 0.9779 -0.1482\nv -0.00493 -0.052064 0.122087\nvn -0.1476 0.9779 -0.1482\nv -0.005619 -0.052108 0.122481\nvn -0.1476 0.9779 -0.1482\nv -0.005709 -0.052043 0.122779\nvn -0.4273 0.0398 -0.9032\nv -0.004986 -0.048549 0.122591\nvn -0.4236 0.0389 -0.905\nv -0.004971 -0.052017 0.122437\nvn -0.4215 0.0384 -0.906\nv -0.005658 -0.04747 0.122959\nvn -0.4293 0.0402 -0.9023\nv -0.004986 -0.048549 0.122591\nvn -0.4464 0.0803 -0.8912\nv -0.004998 -0.047142 0.122724\nvn -0.4464 0.0803 -0.8912\nv -0.004403 -0.047842 0.122363\nvn -0.4464 0.0803 -0.8912\nv -0.005658 -0.04747 0.122959\nvn -0.3711 0.0841 -0.9248\nv -0.004998 -0.047142 0.122724\nvn -0.3711 0.0841 -0.9248\nv -0.004986 -0.048549 0.122591\nvn -0.3711 0.0841 -0.9248\nv -0.004998 -0.047142 0.122724\nvn -0.5174 0.7641 -0.3852\nv -0.005658 -0.04747 0.122959\nvn -0.5174 0.7641 -0.3852\nv -0.005681 -0.047386 0.123158\nvn -0.5174 0.7641 -0.3852\nv -0.004346 -0.047417 0.126072\nvn -0.2768 0.9371 0.2125\nv -0.003663 -0.047146 0.125767\nvn -0.2768 0.9371 0.2125\nv -0.004603 -0.047127 0.124457\nvn -0.2768 0.9371 0.2125\nv -0.004958 -0.047389 0.125241\nvn -0.2392 0.9483 0.2085\nv -0.004346 -0.047417 0.126072\nvn -0.2392 0.9483 0.2085\nv -0.004603 -0.047127 0.124457\nvn -0.2392 0.9483 0.2085\nv -0.005456 -0.047382 0.124138\nvn -0.3364 0.9284 0.1578\nv -0.004958 -0.047389 0.125241\nvn -0.3364 0.9284 0.1578\nv -0.004603 -0.047127 0.124457\nvn -0.3364 0.9284 0.1578\nv -0.005681 -0.047386 0.123158\nvn -0.3073 0.9493 0.0661\nv -0.004603 -0.047127 0.124457\nvn -0.3007 0.9517 0.0616\nv -0.004998 -0.047142 0.122724\nvn -0.3012 0.9516 0.0605\nv -0.005456 -0.047382 0.124138\nvn -0.3087 0.9488 0.0673\nv -0.003459 -0.051975 0.125935\nvn 0.388 0.0357 0.921\nv -0.003555 -0.048548 0.125842\nvn 0.388 0.0357 0.921\nv -0.004187 -0.052037 0.126244\nvn 0.388 0.0357 0.921\nv -0.003002 -0.047864 0.125572\nvn 0.3586 0.0775 0.9303\nv -0.003663 -0.047146 0.125767\nvn 0.3586 0.0775 0.9303\nv -0.003555 -0.048548 0.125842\nvn 0.3586 0.0775 0.9303\nv -0.003555 -0.048548 0.125842\nvn 0.3394 0.0467 0.9395\nv -0.004346 -0.047417 0.126072\nvn 0.3394 0.0467 0.9395\nv -0.004187 -0.052037 0.126244\nvn 0.3394 0.0467 0.9395\nv -0.003663 -0.047146 0.125767\nvn 0.3801 0.0787 0.9216\nv -0.004346 -0.047417 0.126072\nvn 0.3801 0.0787 0.9216\nv -0.003555 -0.048548 0.125842\nvn 0.3801 0.0787 0.9216\nv -0.004043 -0.052128 0.12636\nvn 0.1656 0.867 0.47\nv -0.003211 -0.052092 0.126002\nvn 0.1656 0.867 0.47\nv -0.004187 -0.052037 0.126244\nvn 0.1656 0.867 0.47\nv -0.003211 -0.052092 0.126002\nvn 0.1958 0.7634 0.6155\nv -0.003459 -0.051975 0.125935\nvn 0.1958 0.7634 0.6155\nv -0.004187 -0.052037 0.126244\nvn 0.1958 0.7634 0.6155\nv -0.003183 -0.051963 0.126202\nvn -0.3072 0.8184 -0.4856\nv -0.003211 -0.052092 0.126002\nvn -0.3072 0.8184 -0.4856\nv -0.003776 -0.052039 0.12645\nvn -0.3072 0.8184 -0.4856\nv -0.003776 -0.052039 0.12645\nvn -0.19 0.9175 -0.3496\nv -0.003211 -0.052092 0.126002\nvn -0.19 0.9175 -0.3496\nv -0.004043 -0.052128 0.12636\nvn -0.19 0.9175 -0.3496\nv -0.003776 -0.052039 0.12645\nvn -0.3868 0.0036 -0.9222\nv -0.003757 -0.047228 0.12646\nvn -0.3868 0.0036 -0.9222\nv -0.003183 -0.051963 0.126202\nvn -0.3868 0.0036 -0.9222\nv -0.003757 -0.047228 0.12646\nvn -0.5568 -0.0221 -0.8303\nv -0.003273 -0.046956 0.126129\nvn -0.5568 -0.0221 -0.8303\nv -0.003183 -0.051963 0.126202\nvn -0.5568 -0.0221 -0.8303\nv -0.003757 -0.047228 0.12646\nvn -0.2851 -0.4938 -0.8215\nv -0.003957 -0.046895 0.12633\nvn -0.2851 -0.4938 -0.8215\nv -0.003273 -0.046956 0.126129\nvn -0.2851 -0.4938 -0.8215\nv -0.005004 -0.046949 0.1222\nvn -0.1254 -0.9898 0.0682\nv -0.004647 -0.046844 0.124389\nvn -0.1254 -0.9898 0.0682\nv -0.005686 -0.046829 0.122686\nvn -0.1254 -0.9898 0.0682\nv -0.004647 -0.046844 0.124389\nvn -0.0269 -0.9996 0.0079\nv -0.00551 -0.046827 0.123602\nvn -0.0269 -0.9996 0.0079\nv -0.005686 -0.046829 0.122686\nvn -0.0269 -0.9996 0.0079\nv -0.004647 -0.046844 0.124389\nvn -0.0604 -0.9972 0.0448\nv -0.005294 -0.046802 0.124443\nvn -0.0604 -0.9972 0.0448\nv -0.00551 -0.046827 0.123602\nvn -0.0604 -0.9972 0.0448\nv -0.004647 -0.046844 0.124389\nvn -0.0637 -0.9979 0.0064\nv -0.004905 -0.046822 0.125175\nvn -0.0637 -0.9979 0.0064\nv -0.005294 -0.046802 0.124443\nvn -0.0637 -0.9979 0.0064\nv -0.003273 -0.046956 0.126129\nvn -0.0879 -0.9961 0.0051\nv -0.003957 -0.046895 0.12633\nvn -0.0804 -0.9968 0.0025\nv -0.004647 -0.046844 0.124389\nvn -0.0865 -0.9962 0.0046\nv -0.004905 -0.046822 0.125175\nvn -0.0781 -0.9969 0.0016\nv -0.005686 -0.046829 0.122686\nvn 0.3411 -0.6822 0.6467\nv -0.00557 -0.04708 0.12236\nvn 0.3411 -0.6822 0.6467\nv -0.005004 -0.046949 0.1222\nvn 0.3411 -0.6822 0.6467\nv -0.005004 -0.046949 0.1222\nvn 0.2763 -0.0171 0.9609\nv -0.00557 -0.04708 0.12236\nvn 0.2763 -0.0171 0.9609\nv -0.00493 -0.052064 0.122087\nvn 0.2763 -0.0171 0.9609\nv -0.00493 -0.052064 0.122087\nvn 0.3404 -0.0077 0.9402\nv -0.00557 -0.04708 0.12236\nvn 0.3404 -0.0077 0.9402\nv -0.005555 -0.051973 0.122314\nvn 0.3404 -0.0077 0.9402\nv -0.005619 -0.052108 0.122481\nvn 0.3389 0.6634 0.6672\nv -0.00493 -0.052064 0.122087\nvn 0.3389 0.6634 0.6672\nv -0.005555 -0.051973 0.122314\nvn 0.3389 0.6634 0.6672\nv 0.002475 -0.052043 0.117178\nvn 0.3163 0.9479 0.0384\nv 0.002406 -0.052054 0.118018\nvn 0.3163 0.9479 0.0384\nv 0.002641 -0.052106 0.117375\nvn 0.3163 0.9479 0.0384\nv 0.002406 -0.052054 0.118018\nvn 0.0534 0.9967 -0.0617\nv 0.002716 -0.05206 0.118188\nvn 0.0534 0.9967 -0.0617\nv 0.002641 -0.052106 0.117375\nvn 0.0534 0.9967 -0.0617\nv 0.002475 -0.052043 0.117178\nvn 0.9955 0.0388 0.0859\nv 0.002276 -0.048549 0.117899\nvn 0.9958 0.0394 0.0832\nv 0.002406 -0.052054 0.118018\nvn 0.9959 0.0397 0.0816\nv 0.002303 -0.047516 0.117132\nvn 0.9954 0.0385 0.0874\nv 0.002303 -0.047516 0.117132\nvn 0.994 0.0471 0.0989\nv 0.002188 -0.047937 0.118496\nvn 0.994 0.0471 0.0989\nv 0.002276 -0.048549 0.117899\nvn 0.994 0.0471 0.0989\nv 0.002303 -0.047516 0.117132\nvn 0.985 0.1224 0.1214\nv 0.002171 -0.047147 0.117835\nvn 0.985 0.1224 0.1214\nv 0.002188 -0.047937 0.118496\nvn 0.985 0.1224 0.1214\nv 0.002171 -0.047147 0.117835\nvn 0.9998 0.0175 -0.0045\nv 0.002183 -0.047698 0.118445\nvn 0.9998 0.0175 -0.0045\nv 0.002188 -0.047937 0.118496\nvn 0.9998 0.0175 -0.0045\nv 0.002171 -0.047147 0.117835\nvn 0.6981 0.6798 -0.2247\nv 0.002303 -0.047516 0.117132\nvn 0.6981 0.6798 -0.2247\nv 0.002133 -0.047383 0.117004\nvn 0.6981 0.6798 -0.2247\nv 0.000195 -0.047383 0.116595\nvn -0.0587 0.9321 -0.3575\nv -0.001058 -0.047417 0.116713\nvn -0.0587 0.9321 -0.3575\nv -0.001128 -0.047141 0.117445\nvn -0.0587 0.9321 -0.3575\nv 0.000195 -0.047383 0.116595\nvn -0.0201 0.9527 -0.3033\nv -0.001128 -0.047141 0.117445\nvn -0.0201 0.9527 -0.3033\nv 0.000857 -0.047127 0.117356\nvn -0.0201 0.9527 -0.3033\nv 0.002133 -0.047383 0.117004\nvn 0.0801 0.9215 -0.3799\nv 0.000195 -0.047383 0.116595\nvn 0.0801 0.9215 -0.3799\nv 0.000857 -0.047127 0.117356\nvn 0.0801 0.9215 -0.3799\nv 0.002133 -0.047383 0.117004\nvn 0.1153 0.9542 -0.276\nv 0.000857 -0.047127 0.117356\nvn 0.1153 0.9542 -0.276\nv 0.002171 -0.047147 0.117835\nvn 0.1153 0.9542 -0.276\nv -0.001407 -0.052047 0.117593\nvn -0.9932 0.0407 -0.1093\nv -0.001255 -0.048548 0.117513\nvn -0.9932 0.0407 -0.1093\nv -0.001322 -0.052064 0.116812\nvn -0.9932 0.0407 -0.1093\nv -0.001299 -0.047859 0.118133\nvn -0.9839 0.0807 -0.1597\nv -0.001128 -0.047141 0.117445\nvn -0.9839 0.0807 -0.1597\nv -0.001255 -0.048548 0.117513\nvn -0.9839 0.0807 -0.1597\nv -0.001255 -0.048548 0.117513\nvn -0.9844 0.0523 -0.1681\nv -0.001058 -0.047417 0.116713\nvn -0.9844 0.0523 -0.1681\nv -0.001322 -0.052064 0.116812\nvn -0.9844 0.0523 -0.1681\nv -0.001128 -0.047141 0.117445\nvn -0.9886 0.0827 -0.1262\nv -0.001058 -0.047417 0.116713\nvn -0.9886 0.0827 -0.1262\nv -0.001255 -0.048548 0.117513\nvn -0.9886 0.0827 -0.1262\nv -0.001658 -0.052058 0.117014\nvn 0.0157 0.9999 -0.0046\nv -0.00175 -0.052054 0.117692\nvn 0.0157 0.9999 -0.0046\nv -0.001322 -0.052064 0.116812\nvn 0.0157 0.9999 -0.0046\nv -0.00175 -0.052054 0.117692\nvn -0.0265 0.9993 -0.0251\nv -0.001407 -0.052047 0.117593\nvn -0.0265 0.9993 -0.0251\nv -0.001322 -0.052064 0.116812\nvn -0.0265 0.9993 -0.0251\nv -0.001658 -0.052058 0.117014\nvn 0.9909 0.0051 0.1348\nv -0.001688 -0.04724 0.11705\nvn 0.9909 0.0051 0.1348\nv -0.00175 -0.052054 0.117692\nvn 0.9909 0.0051 0.1348\nv -0.001688 -0.04724 0.11705\nvn 0.9976 -0.0218 -0.0662\nv -0.001644 -0.046956 0.117613\nvn 0.9976 -0.0218 -0.0662\nv -0.00175 -0.052054 0.117692\nvn 0.9976 -0.0218 -0.0662\nv -0.001688 -0.04724 0.11705\nvn 0.8541 -0.488 0.18\nv -0.001467 -0.046896 0.116936\nvn 0.8541 -0.488 0.18\nv -0.001644 -0.046956 0.117613\nvn 0.8541 -0.488 0.18\nv -2e-06 -0.046822 0.116677\nvn 0.0377 -0.9969 -0.0691\nv 0.000562 -0.046844 0.117295\nvn 0.039 -0.9963 -0.0771\nv -0.001467 -0.046896 0.116936\nvn 0.038 -0.9967 -0.0713\nv -0.001644 -0.046956 0.117613\nvn 0.0394 -0.9961 -0.0785\nv 0.001556 -0.046821 0.116887\nvn 0.0064 -0.9992 -0.0406\nv 0.000562 -0.046844 0.117295\nvn 0.0064 -0.9992 -0.0406\nv -2e-06 -0.046822 0.116677\nvn 0.0064 -0.9992 -0.0406\nv 0.00248 -0.046855 0.117338\nvn -0.0046 -0.9977 -0.0673\nv 0.000562 -0.046844 0.117295\nvn -0.0046 -0.9977 -0.0673\nv 0.001556 -0.046821 0.116887\nvn -0.0046 -0.9977 -0.0673\nv 0.00248 -0.046855 0.117338\nvn -0.0034 -0.9932 -0.1167\nv 0.002622 -0.046943 0.118078\nvn -0.0034 -0.9932 -0.1167\nv 0.000562 -0.046844 0.117295\nvn -0.0034 -0.9932 -0.1167\nv 0.00248 -0.046855 0.117338\nvn -0.697 -0.7154 0.0496\nv 0.002786 -0.047141 0.117518\nvn -0.697 -0.7154 0.0496\nv 0.002622 -0.046943 0.118078\nvn -0.697 -0.7154 0.0496\nv 0.002716 -0.05206 0.118188\nvn -0.4095 0.0121 0.9122\nv 0.002757 -0.045532 0.11812\nvn -0.4095 0.0121 0.9122\nv 0.002622 -0.046943 0.118078\nvn -0.4095 0.0121 0.9122\nv 0.002622 -0.046943 0.118078\nvn -0.9617 -0.0235 -0.2729\nv 0.002786 -0.047141 0.117518\nvn -0.9617 -0.0235 -0.2729\nv 0.002716 -0.05206 0.118188\nvn -0.9617 -0.0235 -0.2729\nv 0.002716 -0.05206 0.118188\nvn -0.9914 -0.0037 -0.1312\nv 0.002786 -0.047141 0.117518\nvn -0.9914 -0.0037 -0.1312\nv 0.002806 -0.052009 0.11751\nvn -0.9914 -0.0037 -0.1312\nv 0.002641 -0.052106 0.117375\nvn -0.5084 0.8611 -0.002\nv 0.002716 -0.05206 0.118188\nvn -0.5084 0.8611 -0.002\nv 0.002806 -0.052009 0.11751\nvn -0.5084 0.8611 -0.002\nv -0.001329 -0.04549 0.126479\nvn -0.6846 0.7168 -0.1323\nv -0.001436 -0.045599 0.126441\nvn -0.6846 0.7168 -0.1323\nv -0.001509 -0.045544 0.12712\nvn -0.6846 0.7168 -0.1323\nv 0.000506 -0.0456 0.126651\nvn 0.6505 0.7595 0.0046\nv 0.000382 -0.045494 0.126647\nvn 0.6505 0.7595 0.0046\nv 0.000431 -0.04554 0.127341\nvn 0.6505 0.7595 0.0046\nv -0.000632 -0.045994 0.127708\nvn -0.1281 0.0121 0.9917\nv -0.000721 -0.049362 0.127738\nvn -0.1281 0.0121 0.9917\nv -0.000436 -0.049329 0.127774\nvn -0.1281 0.0121 0.9917\nv 0.003811 -0.04551 0.119027\nvn -0.8099 0.0167 0.5863\nv 0.003728 -0.052061 0.1191\nvn -0.8099 0.0167 0.5863\nv 0.004441 -0.045516 0.119897\nvn -0.8099 0.0167 0.5863\nv 0.003728 -0.052061 0.1191\nvn -0.7556 0.0025 0.655\nv 0.004208 -0.051971 0.119652\nvn -0.7556 0.0025 0.655\nv 0.004441 -0.045516 0.119897\nvn -0.7556 0.0025 0.655\nv 0.004079 -0.046844 0.125366\nvn -0.6307 0.0968 -0.77\nv 0.002379 -0.046949 0.126746\nvn -0.6307 0.0968 -0.77\nv 0.003382 -0.045527 0.126102\nvn -0.6307 0.0968 -0.77\nv 0.002379 -0.046949 0.126746\nvn -0.5259 -0.0136 -0.8504\nv 0.001878 -0.045528 0.127032\nvn -0.5259 -0.0136 -0.8504\nv 0.003382 -0.045527 0.126102\nvn -0.5259 -0.0136 -0.8504\nv 0.004441 -0.045516 0.119897\nvn -0.9285 0.0194 0.3709\nv 0.004208 -0.051971 0.119652\nvn -0.9285 0.0194 0.3709\nv 0.004906 -0.045527 0.121062\nvn -0.9285 0.0194 0.3709\nv 0.004208 -0.051971 0.119652\nvn -0.8946 -0.0008 0.4468\nv 0.004609 -0.052004 0.120455\nvn -0.8946 -0.0008 0.4468\nv 0.004906 -0.045527 0.121062\nvn -0.8946 -0.0008 0.4468\nv 0.004609 -0.052004 0.120455\nvn -0.9452 0.0128 0.3262\nv 0.004855 -0.05196 0.121168\nvn -0.9452 0.0128 0.3262\nv 0.004906 -0.045527 0.121062\nvn -0.9452 0.0128 0.3262\nv 0.004906 -0.045527 0.121062\nvn -0.997 0.0091 0.0767\nv 0.004855 -0.05196 0.121168\nvn -0.997 0.0091 0.0767\nv 0.00504 -0.045536 0.122803\nvn -0.997 0.0091 0.0767\nv 0.004855 -0.05196 0.121168\nvn -0.9955 0.0044 0.0949\nv 0.00492 -0.052054 0.121848\nvn -0.9955 0.0044 0.0949\nv 0.00504 -0.045536 0.122803\nvn -0.9955 0.0044 0.0949\nv 0.00492 -0.052054 0.121848\nvn -0.9986 0.0107 0.052\nv 0.004951 -0.05205 0.12244\nvn -0.9986 0.0107 0.052\nv 0.00504 -0.045536 0.122803\nvn -0.9986 0.0107 0.052\nv 0.00504 -0.045536 0.122803\nvn -0.9755 0.01 -0.2196\nv 0.004889 -0.052053 0.123174\nvn -0.9755 0.01 -0.2196\nv 0.004917 -0.046956 0.123282\nvn -0.9755 0.01 -0.2196\nv 0.004951 -0.05205 0.12244\nvn -0.9963 0.0183 -0.0835\nv 0.004889 -0.052053 0.123174\nvn -0.9963 0.0183 -0.0835\nv 0.00504 -0.045536 0.122803\nvn -0.9963 0.0183 -0.0835\nv 0.002379 -0.046949 0.126746\nvn -0.4871 0.0047 -0.8733\nv 0.002256 -0.052002 0.126786\nvn -0.4871 0.0047 -0.8733\nv 0.001878 -0.045528 0.127032\nvn -0.4871 0.0047 -0.8733\nv 0.002256 -0.052002 0.126786\nvn -0.3539 0.0148 -0.9352\nv 0.001193 -0.051986 0.127189\nvn -0.3539 0.0148 -0.9352\nv 0.001878 -0.045528 0.127032\nvn -0.3539 0.0148 -0.9352\nv 0.001878 -0.045528 0.127032\nvn -0.2084 -0.0017 -0.9781\nv 0.001193 -0.051986 0.127189\nvn -0.2084 -0.0017 -0.9781\nv 0.000431 -0.04554 0.127341\nvn -0.2084 -0.0017 -0.9781\nv 0.004917 -0.046956 0.123282\nvn -0.9575 -0.0146 -0.2879\nv 0.004461 -0.045527 0.124726\nvn -0.9575 -0.0146 -0.2879\nv 0.00504 -0.045536 0.122803\nvn -0.9575 -0.0146 -0.2879\nv 0.004917 -0.046956 0.123282\nvn -0.9228 0.0853 -0.3758\nv 0.004079 -0.046844 0.125366\nvn -0.9228 0.0853 -0.3758\nv 0.004461 -0.045527 0.124726\nvn -0.9228 0.0853 -0.3758\nv 0.001193 -0.051986 0.127189\nvn -0.1155 0.0097 -0.9933\nv 0.000463 -0.052043 0.127274\nvn -0.1155 0.0097 -0.9933\nv 0.000431 -0.04554 0.127341\nvn -0.1155 0.0097 -0.9933\nv 0.004079 -0.046844 0.125366\nvn -0.785 -0.0713 -0.6154\nv 0.003382 -0.045527 0.126102\nvn -0.785 -0.0713 -0.6154\nv 0.004461 -0.045527 0.124726\nvn -0.785 -0.0713 -0.6154\nv 0.002546 -0.052054 0.126597\nvn -0.6161 0.0192 -0.7874\nv 0.003232 -0.048546 0.126145\nvn -0.6161 0.0192 -0.7874\nv 0.003523 -0.052051 0.125832\nvn -0.6161 0.0192 -0.7874\nv 0.002709 -0.048549 0.126534\nvn -0.5959 0.0133 -0.803\nv 0.003232 -0.048546 0.126145\nvn -0.5959 0.0133 -0.803\nv 0.002546 -0.052054 0.126597\nvn -0.5959 0.0133 -0.803\nv 0.003523 -0.052051 0.125832\nvn -0.7442 0.0099 -0.6679\nv 0.003628 -0.048548 0.125767\nvn -0.7442 0.0099 -0.6679\nv 0.004099 -0.051979 0.125191\nvn -0.7442 0.0099 -0.6679\nv 0.003232 -0.048546 0.126145\nvn -0.6909 0.0072 -0.7229\nv 0.003628 -0.048548 0.125767\nvn -0.6909 0.0072 -0.7229\nv 0.003523 -0.052051 0.125832\nvn -0.6909 0.0072 -0.7229\nv 0.003628 -0.048548 0.125767\nvn -0.7817 -0.0027 -0.6236\nv 0.004267 -0.048548 0.124967\nvn -0.7817 -0.0027 -0.6236\nv 0.004099 -0.051979 0.125191\nvn -0.7817 -0.0027 -0.6236\nv 0.004099 -0.051979 0.125191\nvn -0.8822 0.0122 -0.4708\nv 0.004267 -0.048548 0.124967\nvn -0.8822 0.0122 -0.4708\nv 0.004411 -0.052046 0.124606\nvn -0.8822 0.0122 -0.4708\nv 0.004411 -0.052046 0.124606\nvn -0.9225 0.0122 -0.3859\nv 0.004685 -0.048551 0.124062\nvn -0.9225 0.0122 -0.3859\nv 0.004686 -0.05204 0.123949\nvn -0.9225 0.0122 -0.3859\nv 0.004267 -0.048548 0.124967\nvn -0.9078 0.0058 -0.4194\nv 0.004685 -0.048551 0.124062\nvn -0.9078 0.0058 -0.4194\nv 0.004411 -0.052046 0.124606\nvn -0.9078 0.0058 -0.4194\nv 0.004686 -0.05204 0.123949\nvn -0.962 0.012 -0.2729\nv 0.004809 -0.048548 0.123669\nvn -0.962 0.012 -0.2729\nv 0.004814 -0.052048 0.123496\nvn -0.962 0.012 -0.2729\nv 0.004685 -0.048551 0.124062\nvn -0.9535 0.0094 -0.3011\nv 0.004809 -0.048548 0.123669\nvn -0.9535 0.0094 -0.3011\nv 0.004686 -0.05204 0.123949\nvn -0.9535 0.0094 -0.3011\nv -0.004971 -0.052017 0.122437\nvn 0.9984 0.0067 -0.0557\nv -0.004986 -0.048549 0.122591\nvn 0.9984 0.0067 -0.0557\nv -0.004929 -0.051964 0.123195\nvn 0.9984 0.0067 -0.0557\nv -0.004986 -0.048549 0.122591\nvn 0.9934 -0.0038 -0.1145\nv -0.004911 -0.048546 0.123239\nvn 0.9934 -0.0038 -0.1145\nv -0.004929 -0.051964 0.123195\nvn 0.9934 -0.0038 -0.1145\nv -0.004929 -0.051964 0.123195\nvn 0.9516 0.0106 -0.3072\nv -0.004781 -0.048548 0.123771\nvn 0.9516 0.0106 -0.3072\nv -0.004519 -0.051979 0.124467\nvn 0.9516 0.0106 -0.3072\nv -0.004911 -0.048546 0.123239\nvn 0.9715 -0.0021 -0.237\nv -0.004781 -0.048548 0.123771\nvn 0.9715 -0.0021 -0.237\nv -0.004929 -0.051964 0.123195\nvn 0.9715 -0.0021 -0.237\nv -0.004781 -0.048548 0.123771\nvn 0.931 -0.0027 -0.3651\nv -0.004408 -0.048548 0.124724\nvn 0.931 -0.0027 -0.3651\nv -0.004519 -0.051979 0.124467\nvn 0.931 -0.0027 -0.3651\nv -0.004519 -0.051979 0.124467\nvn 0.8488 0.0122 -0.5286\nv -0.004408 -0.048548 0.124724\nvn 0.8488 0.0122 -0.5286\nv -0.004168 -0.052046 0.125029\nvn 0.8488 0.0122 -0.5286\nv -0.004168 -0.052046 0.125029\nvn 0.7962 0.012 -0.6049\nv -0.003833 -0.048551 0.125538\nvn 0.7962 0.012 -0.6049\nv -0.003736 -0.052038 0.125597\nvn 0.7962 0.012 -0.6049\nv -0.004408 -0.048548 0.124724\nvn 0.8172 0.0059 -0.5764\nv -0.003833 -0.048551 0.125538\nvn 0.8172 0.0059 -0.5764\nv -0.004168 -0.052046 0.125029\nvn 0.8172 0.0059 -0.5764\nv -0.003736 -0.052038 0.125597\nvn 0.7725 0.0046 -0.635\nv -0.003555 -0.048548 0.125842\nvn 0.7725 0.0046 -0.635\nv -0.003459 -0.051975 0.125935\nvn 0.7725 0.0046 -0.635\nv -0.003833 -0.048551 0.125538\nvn 0.7375 0.0092 -0.6753\nv -0.003555 -0.048548 0.125842\nvn 0.7375 0.0092 -0.6753\nv -0.003736 -0.052038 0.125597\nvn 0.7375 0.0092 -0.6753\nv -0.004647 -0.046844 0.124389\nvn 0.983 0.0816 -0.1643\nv -0.005004 -0.046949 0.1222\nvn 0.983 0.0816 -0.1643\nv -0.004868 -0.045527 0.123724\nvn 0.983 0.0816 -0.1643\nv -0.005004 -0.046949 0.1222\nvn 0.997 -0.0136 -0.0768\nv -0.005022 -0.045537 0.121728\nvn 0.997 -0.0136 -0.0768\nv -0.004868 -0.045527 0.123724\nvn 0.997 -0.0136 -0.0768\nv -0.001509 -0.045544 0.12712\nvn 0.3748 0.0049 -0.9271\nv -0.001534 -0.052023 0.127076\nvn 0.3748 0.0049 -0.9271\nv -0.002686 -0.04553 0.126644\nvn 0.3748 0.0049 -0.9271\nv -0.001534 -0.052023 0.127076\nvn 0.416 0.0134 -0.9092\nv -0.002335 -0.052051 0.126709\nvn 0.416 0.0134 -0.9092\nv -0.002686 -0.04553 0.126644\nvn 0.416 0.0134 -0.9092\nv -0.00493 -0.052064 0.122087\nvn 0.9999 0.0147 -0.0077\nv -0.004936 -0.05195 0.121529\nvn 0.9999 0.0137 0.0004\nv -0.005004 -0.046949 0.1222\nvn 0.9999 0.0143 -0.0046\nv -0.002335 -0.052051 0.126709\nvn 0.5147 0.0192 -0.8571\nv -0.003183 -0.051963 0.126202\nvn 0.5147 0.0192 -0.8571\nv -0.002686 -0.04553 0.126644\nvn 0.5147 0.0192 -0.8571\nv -0.002686 -0.04553 0.126644\nvn 0.6576 0.001 -0.7533\nv -0.003183 -0.051963 0.126202\nvn 0.6576 0.001 -0.7533\nv -0.003273 -0.046956 0.126129\nvn 0.6576 0.001 -0.7533\nv -0.005022 -0.045537 0.121728\nvn 0.9999 0.0133 0.0034\nv -0.004936 -0.05195 0.121529\nvn 0.9691 0.0053 0.2466\nv -0.004743 -0.051966 0.120773\nvn 0.9691 0.0053 0.2466\nv -0.005022 -0.045537 0.121728\nvn 0.9691 0.0053 0.2466\nv -0.005022 -0.045537 0.121728\nvn 0.9588 -0.0007 0.284\nv -0.004743 -0.051966 0.120773\nvn 0.9588 -0.0007 0.284\nv -0.004529 -0.045527 0.120065\nvn 0.9588 -0.0007 0.284\nv -0.004743 -0.051966 0.120773\nvn 0.9181 0.013 0.396\nv -0.004416 -0.051976 0.120015\nvn 0.9181 0.013 0.396\nv -0.004529 -0.045527 0.120065\nvn 0.9181 0.013 0.396\nv -0.003273 -0.046956 0.126129\nvn 0.6872 -0.0209 -0.7262\nv -0.004102 -0.045527 0.125304\nvn 0.6872 -0.0209 -0.7262\nv -0.002686 -0.04553 0.126644\nvn 0.6872 -0.0209 -0.7262\nv -0.003273 -0.046956 0.126129\nvn 0.7841 0.1009 -0.6124\nv -0.004647 -0.046844 0.124389\nvn 0.7841 0.1009 -0.6124\nv -0.004102 -0.045527 0.125304\nvn 0.7841 0.1009 -0.6124\nv -0.004416 -0.051976 0.120015\nvn 0.8459 0.0107 0.5333\nv -0.004028 -0.051984 0.119399\nvn 0.8459 0.0107 0.5333\nv -0.004529 -0.045527 0.120065\nvn 0.8459 0.0107 0.5333\nv -0.004529 -0.045527 0.120065\nvn 0.825 0.0058 0.5652\nv -0.004028 -0.051984 0.119399\nvn 0.825 0.0058 0.5652\nv -0.003784 -0.045518 0.118977\nvn 0.825 0.0058 0.5652\nv -0.004028 -0.051984 0.119399\nvn 0.7264 0.0175 0.6871\nv -0.003428 -0.052049 0.118767\nvn 0.7264 0.0175 0.6871\nv -0.003784 -0.045518 0.118977\nvn 0.7264 0.0175 0.6871\nv -0.003784 -0.045518 0.118977\nvn 0.6553 0.0114 0.7553\nv -0.003428 -0.052049 0.118767\nvn 0.6553 0.0114 0.7553\nv -0.002985 -0.045511 0.118283\nvn 0.6553 0.0114 0.7553\nv -0.004647 -0.046844 0.124389\nvn 0.8977 -0.0695 -0.4352\nv -0.004868 -0.045527 0.123724\nvn 0.8977 -0.0695 -0.4352\nv -0.004102 -0.045527 0.125304\nvn 0.8977 -0.0695 -0.4352\nv -0.003428 -0.052049 0.118767\nvn 0.6424 0.0131 0.7663\nv -0.002943 -0.052058 0.118361\nvn 0.6424 0.0131 0.7663\nv -0.002985 -0.045511 0.118283\nvn 0.6424 0.0131 0.7663\nv -0.004725 -0.052075 0.121006\nvn 0.81 0.5533 0.1944\nv -0.004743 -0.051966 0.120773\nvn 0.81 0.5533 0.1944\nv -0.004936 -0.05195 0.121529\nvn 0.81 0.5533 0.1944\nv -0.004028 -0.051984 0.119399\nvn 0.503 0.767 0.3983\nv -0.004122 -0.052079 0.119702\nvn 0.503 0.767 0.3983\nv -0.003428 -0.052049 0.118767\nvn 0.503 0.767 0.3983\nv -0.004122 -0.052079 0.119702\nvn 0.597 0.7373 0.3162\nv -0.004416 -0.051976 0.120015\nvn 0.597 0.7373 0.3162\nv -0.004532 -0.052073 0.120461\nvn 0.597 0.7373 0.3162\nv -0.004743 -0.051966 0.120773\nvn 0.7599 0.5654 0.3208\nv -0.004532 -0.052073 0.120461\nvn 0.7599 0.5654 0.3208\nv -0.004416 -0.051976 0.120015\nvn 0.7599 0.5654 0.3208\nv -0.004725 -0.052075 0.121006\nvn 0.7071 0.6605 0.2525\nv -0.004532 -0.052073 0.120461\nvn 0.7071 0.6605 0.2525\nv -0.004743 -0.051966 0.120773\nvn 0.7071 0.6605 0.2525\nv -0.00493 -0.052064 0.122087\nvn 0.7243 0.677 0.1305\nv -0.004725 -0.052075 0.121006\nvn 0.7243 0.677 0.1305\nv -0.004936 -0.05195 0.121529\nvn 0.7243 0.677 0.1305\nv -0.004122 -0.052079 0.119702\nvn 0.6566 0.6362 0.4052\nv -0.004028 -0.051984 0.119399\nvn 0.6566 0.6362 0.4052\nv -0.004416 -0.051976 0.120015\nvn 0.6566 0.6362 0.4052\nv 0.002406 -0.052054 0.118018\nvn -0.4783 0.0121 0.8781\nv 0.002276 -0.048549 0.117899\nvn -0.4783 0.0121 0.8781\nv 0.001725 -0.051964 0.117646\nvn -0.4783 0.0121 0.8781\nv 0.002276 -0.048549 0.117899\nvn -0.3974 -0.0039 0.9176\nv 0.001677 -0.048546 0.117639\nvn -0.3974 -0.0039 0.9176\nv 0.001725 -0.051964 0.117646\nvn -0.3974 -0.0039 0.9176\nv 0.001725 -0.051964 0.117646\nvn -0.2099 0.0105 0.9777\nv 0.001152 -0.048548 0.117486\nvn -0.2099 0.0105 0.9777\nv 0.000418 -0.051979 0.117365\nvn -0.2099 0.0105 0.9777\nv 0.001677 -0.048546 0.117639\nvn -0.2804 -0.0021 0.9599\nv 0.001152 -0.048548 0.117486\nvn -0.2804 -0.0021 0.9599\nv 0.001725 -0.051964 0.117646\nvn -0.2804 -0.0021 0.9599\nv 0.001152 -0.048548 0.117486\nvn -0.1492 -0.0028 0.9888\nv 0.00014 -0.048548 0.117333\nvn -0.1492 -0.0028 0.9888\nv 0.000418 -0.051979 0.117365\nvn -0.1492 -0.0028 0.9888\nv 0.000418 -0.051979 0.117365\nvn -0.0252 0.0073 0.9997\nv 0.00014 -0.048548 0.117333\nvn -0.0252 0.0073 0.9997\nv -0.000197 -0.051967 0.11735\nvn -0.0252 0.0073 0.9997\nv -0.000197 -0.051967 0.11735\nvn 0.1719 0.0117 0.985\nv -0.000852 -0.048551 0.117423\nvn 0.1719 0.0117 0.985\nv -0.000827 -0.05205 0.117461\nvn 0.1719 0.0117 0.985\nv 0.00014 -0.048548 0.117333\nvn 0.0906 -0.0041 0.9959\nv -0.000852 -0.048551 0.117423\nvn 0.0906 -0.0041 0.9959\nv -0.000197 -0.051967 0.11735\nvn 0.0906 -0.0041 0.9959\nv -0.000827 -0.05205 0.117461\nvn 0.2178 0.0122 0.9759\nv -0.001255 -0.048548 0.117513\nvn 0.2206 0.0126 0.9753\nv -0.001407 -0.052047 0.117593\nvn 0.2223 0.0127 0.9749\nv -0.000852 -0.048551 0.117423\nvn 0.2161 0.012 0.9763\nv -0.001798 -0.045529 0.117651\nvn 0.3099 0.0083 0.9507\nv -0.00175 -0.052054 0.117692\nvn 0.3099 0.0083 0.9507\nv -0.001644 -0.046956 0.117613\nvn 0.3099 0.0083 0.9507\nv -0.001644 -0.046956 0.117613\nvn 0.2586 0.0024 0.966\nv -0.000502 -0.045529 0.117304\nvn 0.2586 0.0024 0.966\nv -0.001798 -0.045529 0.117651\nvn 0.2586 0.0024 0.966\nv -0.001644 -0.046956 0.117613\nvn 0.1369 0.1039 0.9851\nv 0.000562 -0.046844 0.117295\nvn 0.1369 0.1039 0.9851\nv -0.000502 -0.045529 0.117304\nvn 0.1369 0.1039 0.9851\nv 0.000562 -0.046844 0.117295\nvn -0.0564 -0.0527 0.997\nv 0.001032 -0.045524 0.117391\nvn -0.0564 -0.0527 0.997\nv -0.000502 -0.045529 0.117304\nvn -0.0564 -0.0527 0.997\nv 0.000562 -0.046844 0.117295\nvn -0.3881 0.0713 0.9189\nv 0.002757 -0.045532 0.11812\nvn -0.3881 0.0713 0.9189\nv 0.001032 -0.045524 0.117391\nvn -0.3881 0.0713 0.9189\nv 0.000562 -0.046844 0.117295\nvn -0.3552 0.0062 0.9348\nv 0.002622 -0.046943 0.118078\nvn -0.3552 0.0062 0.9348\nv 0.002757 -0.045532 0.11812\nvn -0.3552 0.0062 0.9348\nv 0.000506 -0.0456 0.126651\nvn 0.9941 0.0037 0.1083\nv 0.000431 -0.04554 0.127341\nvn 0.9941 0.0037 0.1083\nv 0.000463 -0.052043 0.127274\nvn 0.9941 0.0037 0.1083\nv 0.000506 -0.0456 0.126651\nvn 0.9976 -0 0.0697\nv 0.000463 -0.052043 0.127274\nvn 0.9976 -0 0.0697\nv 0.000507 -0.052087 0.126631\nvn 0.9976 -0 0.0697\nv 0.003811 -0.04551 0.119027\nvn 0.2841 0.0071 0.9588\nv 0.003009 -0.045568 0.119265\nvn 0.2841 0.0071 0.9588\nv 0.003728 -0.052061 0.1191\nvn 0.2841 0.0071 0.9588\nv 0.003728 -0.052061 0.1191\nvn 0.2418 0.0022 0.9703\nv 0.003009 -0.045568 0.119265\nvn 0.2418 0.0022 0.9703\nv 0.003 -0.052091 0.119281\nvn 0.2418 0.0022 0.9703\nv 0.004208 -0.051971 0.119652\nvn -0.6899 0.6222 0.37\nv 0.004164 -0.052074 0.119744\nvn -0.6899 0.6222 0.37\nv 0.004609 -0.052004 0.120455\nvn -0.6899 0.6222 0.37\nv 0.004609 -0.052004 0.120455\nvn -0.7558 0.6154 0.2236\nv 0.004683 -0.052079 0.120912\nvn -0.7558 0.6154 0.2236\nv 0.004855 -0.05196 0.121168\nvn -0.7558 0.6154 0.2236\nv 0.004609 -0.052004 0.120455\nvn -0.4826 0.8483 0.2179\nv 0.004164 -0.052074 0.119744\nvn -0.4826 0.8483 0.2179\nv 0.004683 -0.052079 0.120912\nvn -0.4826 0.8483 0.2179\nv 0.003728 -0.052061 0.1191\nvn -0.623 0.6505 0.4344\nv 0.004164 -0.052074 0.119744\nvn -0.623 0.6505 0.4344\nv 0.004208 -0.051971 0.119652\nvn -0.623 0.6505 0.4344\nv 0.004855 -0.05196 0.121168\nvn -0.7115 0.6838 0.1618\nv 0.004683 -0.052079 0.120912\nvn -0.7115 0.6838 0.1618\nv 0.00492 -0.052054 0.121848\nvn -0.7115 0.6838 0.1618\nv 0.002256 -0.052002 0.126786\nvn -0.263 0.7492 -0.6079\nv 0.002546 -0.052054 0.126597\nvn -0.263 0.7492 -0.6079\nv 0.001856 -0.052073 0.126873\nvn -0.263 0.7492 -0.6079\nv 0.001193 -0.051986 0.127189\nvn -0.1338 0.7391 -0.6602\nv 0.001126 -0.052081 0.127096\nvn -0.1338 0.7391 -0.6602\nv 0.000463 -0.052043 0.127274\nvn -0.1338 0.7391 -0.6602\nv 0.001193 -0.051986 0.127189\nvn -0.2002 0.7532 -0.6266\nv 0.001856 -0.052073 0.126873\nvn -0.2002 0.7532 -0.6266\nv 0.001126 -0.052081 0.127096\nvn -0.2002 0.7532 -0.6266\nv 0.002256 -0.052002 0.126786\nvn -0.2682 0.624 -0.734\nv 0.001856 -0.052073 0.126873\nvn -0.2682 0.624 -0.734\nv 0.001193 -0.051986 0.127189\nvn -0.2682 0.624 -0.734\nv 0.003523 -0.052051 0.125832\nvn -0.5617 0.4149 -0.7158\nv 0.003137 -0.052072 0.126123\nvn -0.5617 0.4149 -0.7158\nv 0.002546 -0.052054 0.126597\nvn -0.5617 0.4149 -0.7158\nv 0.004099 -0.051979 0.125191\nvn -0.4898 0.7979 -0.3514\nv 0.004411 -0.052046 0.124606\nvn -0.4898 0.7979 -0.3514\nv 0.003523 -0.052051 0.125832\nvn -0.4898 0.7979 -0.3514\nv 0.002219 -0.047842 0.126144\nvn -0.4591 0.6756 -0.5769\nv 0.002829 -0.047142 0.126478\nvn -0.4591 0.6756 -0.5769\nv 0.002787 -0.047772 0.125774\nvn -0.4591 0.6756 -0.5769\nv 0.002787 -0.047772 0.125774\nvn -0.5195 0.6622 -0.54\nv 0.004133 -0.047127 0.125269\nvn -0.5195 0.6622 -0.54\nv 0.003356 -0.047764 0.125236\nvn -0.5195 0.6622 -0.54\nv 0.002829 -0.047142 0.126478\nvn -0.5192 0.6522 -0.5523\nv 0.004133 -0.047127 0.125269\nvn -0.5192 0.6522 -0.5523\nv 0.002787 -0.047772 0.125774\nvn -0.5192 0.6522 -0.5523\nv 0.003356 -0.047764 0.125236\nvn -0.5858 0.7331 -0.3456\nv 0.004133 -0.047127 0.125269\nvn -0.5858 0.7331 -0.3456\nv 0.004167 -0.047745 0.123902\nvn -0.5858 0.7331 -0.3456\nv 0.004133 -0.047127 0.125269\nvn -0.6797 0.6621 -0.3158\nv 0.004797 -0.047146 0.1238\nvn -0.6797 0.6621 -0.3158\nv 0.004167 -0.047745 0.123902\nvn -0.6797 0.6621 -0.3158\nv 0.004167 -0.047745 0.123902\nvn -0.6827 0.6689 -0.2941\nv 0.004797 -0.047146 0.1238\nvn -0.6827 0.6689 -0.2941\nv 0.004298 -0.047864 0.123325\nvn -0.6827 0.6689 -0.2941\nv -0.004929 -0.051964 0.123195\nvn 0.7682 0.6343 -0.0867\nv -0.004844 -0.052072 0.123168\nvn 0.7682 0.6343 -0.0867\nv -0.004971 -0.052017 0.122437\nvn 0.7682 0.6343 -0.0867\nv -0.004971 -0.052017 0.122437\nvn 0.5798 0.8138 -0.0404\nv -0.004844 -0.052072 0.123168\nvn 0.5798 0.8138 -0.0404\nv -0.00493 -0.052064 0.122087\nvn 0.5798 0.8138 -0.0404\nv -0.004929 -0.051964 0.123195\nvn 0.7426 0.6415 -0.1924\nv -0.004646 -0.052073 0.123926\nvn 0.7426 0.6415 -0.1924\nv -0.004844 -0.052072 0.123168\nvn 0.7426 0.6415 -0.1924\nv -0.004519 -0.051979 0.124467\nvn 0.5783 0.7699 -0.2699\nv -0.004168 -0.052046 0.125029\nvn 0.5783 0.7699 -0.2699\nv -0.004646 -0.052073 0.123926\nvn 0.5783 0.7699 -0.2699\nv -0.003211 -0.052092 0.126002\nvn 0.4765 0.7061 -0.5238\nv -0.003736 -0.052038 0.125597\nvn 0.4765 0.7061 -0.5238\nv -0.003459 -0.051975 0.125935\nvn 0.4765 0.7061 -0.5238\nv -0.004929 -0.051964 0.123195\nvn 0.8699 0.4087 -0.2762\nv -0.004519 -0.051979 0.124467\nvn 0.8699 0.4087 -0.2762\nv -0.004646 -0.052073 0.123926\nvn 0.8699 0.4087 -0.2762\nv -0.004403 -0.047842 0.122363\nvn 0.7292 0.6755 -0.1093\nv -0.004998 -0.047142 0.122724\nvn 0.7292 0.6755 -0.1093\nv -0.004367 -0.047772 0.123039\nvn 0.7292 0.6755 -0.1093\nv -0.004367 -0.047772 0.123039\nvn 0.7274 0.6622 -0.1798\nv -0.004603 -0.047127 0.124457\nvn 0.7274 0.6622 -0.1798\nv -0.004185 -0.047764 0.1238\nvn 0.7274 0.6622 -0.1798\nv -0.004998 -0.047142 0.122724\nvn 0.7379 0.6522 -0.1735\nv -0.004603 -0.047127 0.124457\nvn 0.7379 0.6522 -0.1735\nv -0.004367 -0.047772 0.123039\nvn 0.7379 0.6522 -0.1735\nv -0.004185 -0.047764 0.1238\nvn 0.5922 0.7331 -0.3346\nv -0.004603 -0.047127 0.124457\nvn 0.5922 0.7331 -0.3346\nv -0.003436 -0.047745 0.12517\nvn 0.5922 0.7331 -0.3346\nv -0.004603 -0.047127 0.124457\nvn 0.6133 0.6621 -0.4307\nv -0.003663 -0.047146 0.125767\nvn 0.6133 0.6621 -0.4307\nv -0.003436 -0.047745 0.12517\nvn 0.6133 0.6621 -0.4307\nv -0.003436 -0.047745 0.12517\nvn 0.596 0.669 -0.4441\nv -0.003663 -0.047146 0.125767\nvn 0.596 0.669 -0.4441\nv -0.003002 -0.047864 0.125572\nvn 0.596 0.669 -0.4441\nv -0.002265 -0.05209 0.11869\nvn -0.4374 0.0005 0.8992\nv -0.00227 -0.045571 0.118685\nvn -0.4374 0.0005 0.8992\nv -0.002943 -0.052058 0.118361\nvn -0.4374 0.0005 0.8992\nv -0.00227 -0.045571 0.118685\nvn -0.4891 0.0072 0.8722\nv -0.002985 -0.045511 0.118283\nvn -0.4891 0.0072 0.8722\nv -0.002943 -0.052058 0.118361\nvn -0.4891 0.0072 0.8722\nv -0.001436 -0.045599 0.126441\nvn -0.9874 -0.0006 -0.1585\nv -0.00143 -0.052093 0.126427\nvn -0.9874 -0.0006 -0.1585\nv -0.001534 -0.052023 0.127076\nvn -0.9874 -0.0006 -0.1585\nv -0.001509 -0.045544 0.12712\nvn -0.9942 0.0045 -0.1076\nv -0.001436 -0.045599 0.126441\nvn -0.9942 0.0045 -0.1076\nv -0.001534 -0.052023 0.127076\nvn -0.9942 0.0045 -0.1076\nv -0.002335 -0.052051 0.126709\nvn 0.4796 0.5118 -0.7128\nv -0.0028 -0.052067 0.126385\nvn 0.4796 0.5118 -0.7128\nv -0.003183 -0.051963 0.126202\nvn 0.4796 0.5118 -0.7128\nv -0.003183 -0.051963 0.126202\nvn 0.4477 0.7218 -0.5278\nv -0.0028 -0.052067 0.126385\nvn 0.4477 0.7218 -0.5278\nv -0.003211 -0.052092 0.126002\nvn 0.4477 0.7218 -0.5278\nv -0.000197 -0.051967 0.11735\nvn 0.0005 0.7999 0.6002\nv -0.000827 -0.05205 0.117461\nvn 0.0005 0.7999 0.6002\nv 0.000418 -0.051979 0.117365\nvn 0.0005 0.7999 0.6002\nv 0.000418 -0.051979 0.117365\nvn -0.0139 0.8812 0.4726\nv -0.000827 -0.05205 0.117461\nvn -0.0139 0.8812 0.4726\nv 0.001158 -0.052078 0.117571\nvn -0.0139 0.8812 0.4726\nv 0.001725 -0.051964 0.117646\nvn -0.232 0.7599 0.6072\nv 0.001158 -0.052078 0.117571\nvn -0.232 0.7599 0.6072\nv 0.002406 -0.052054 0.118018\nvn -0.232 0.7599 0.6072\nv 0.001725 -0.051964 0.117646\nvn -0.1971 0.3931 0.8981\nv 0.000418 -0.051979 0.117365\nvn -0.1971 0.3931 0.8981\nv 0.001158 -0.052078 0.117571\nvn -0.1971 0.3931 0.8981\nv 0.002183 -0.047698 0.118445\nvn -0.3943 0.6784 0.62\nv 0.002171 -0.047147 0.117835\nvn -0.3943 0.6784 0.62\nv 0.001455 -0.047875 0.118176\nvn -0.3943 0.6784 0.62\nv 0.001455 -0.047875 0.118176\nvn -0.1431 0.6769 0.722\nv 0.000857 -0.047127 0.117356\nvn -0.1431 0.6769 0.722\nv 0.000788 -0.047839 0.118011\nvn -0.1431 0.6769 0.722\nv 0.002171 -0.047147 0.117835\nvn -0.2632 0.6093 0.748\nv 0.000857 -0.047127 0.117356\nvn -0.2632 0.6093 0.748\nv 0.001455 -0.047875 0.118176\nvn -0.2632 0.6093 0.748\nv 0.000788 -0.047839 0.118011\nvn -0.0324 0.6778 0.7345\nv 0.000857 -0.047127 0.117356\nvn -0.0324 0.6778 0.7345\nv 9.9e-05 -0.047767 0.117914\nvn -0.0324 0.6778 0.7345\nv 9.9e-05 -0.047767 0.117914\nvn 0.0537 0.6632 0.7466\nv -0.001128 -0.047141 0.117445\nvn 0.0537 0.6632 0.7466\nv -0.000704 -0.047765 0.117969\nvn 0.0537 0.6632 0.7466\nv 0.000857 -0.047127 0.117356\nvn 0.0302 0.6357 0.7713\nv -0.001128 -0.047141 0.117445\nvn 0.0302 0.6357 0.7713\nv 9.9e-05 -0.047767 0.117914\nvn 0.0302 0.6357 0.7713\nv -0.000704 -0.047765 0.117969\nvn 0.0933 0.6766 0.7304\nv -0.001128 -0.047141 0.117445\nvn 0.0933 0.6766 0.7304\nv -0.001299 -0.047859 0.118133\nvn 0.0933 0.6766 0.7304\nv 0.002652 -0.052094 0.118947\nvn -0.9964 0.004 -0.0841\nv 0.002676 -0.045536 0.118976\nvn -0.9962 0.0043 -0.0869\nv 0.002716 -0.05206 0.118188\nvn -0.9958 0.0049 -0.0918\nv 0.002757 -0.045532 0.11812\nvn -0.9955 0.0052 -0.0945\nv -0.001798 -0.045529 0.117651\nvn 0.9945 0.0079 0.1046\nv -0.001885 -0.045533 0.118478\nvn 0.9945 0.0079 0.1046\nv -0.00175 -0.052054 0.117692\nvn 0.9945 0.0079 0.1046\nv -0.00175 -0.052054 0.117692\nvn 0.9914 0.0046 0.1311\nv -0.001885 -0.045533 0.118478\nvn 0.9914 0.0046 0.1311\nv -0.00185 -0.052094 0.118451\nvn 0.9914 0.0046 0.1311\nv 0.001856 -0.052073 0.126873\nvn -0.0516 0.9966 -0.0636\nv 0.002546 -0.052054 0.126597\nvn -0.0516 0.9966 -0.0636\nv 0.001553 -0.052131 0.126195\nvn -0.0516 0.9966 -0.0636\nv 0.001126 -0.052081 0.127096\nvn 0.0398 0.997 -0.0657\nv 0.000507 -0.052087 0.126631\nvn 0.0398 0.997 -0.0657\nv 0.000463 -0.052043 0.127274\nvn 0.0398 0.997 -0.0657\nv 0.001126 -0.052081 0.127096\nvn -0.0332 0.9969 -0.0718\nv 0.001856 -0.052073 0.126873\nvn -0.0332 0.9969 -0.0718\nv 0.001553 -0.052131 0.126195\nvn -0.0332 0.9969 -0.0718\nv 0.001126 -0.052081 0.127096\nvn 0.0241 0.9987 -0.0448\nv 0.001553 -0.052131 0.126195\nvn 0.0241 0.9987 -0.0448\nv 0.000507 -0.052087 0.126631\nvn 0.0241 0.9987 -0.0448\nv 0.004411 -0.052046 0.124606\nvn -0.0802 0.9965 -0.0241\nv 0.004686 -0.05204 0.123949\nvn -0.0802 0.9965 -0.0241\nv 0.003664 -0.052109 0.124485\nvn -0.0802 0.9965 -0.0241\nv 0.003523 -0.052051 0.125832\nvn -0.0758 0.9958 -0.0509\nv 0.004411 -0.052046 0.124606\nvn -0.0758 0.9958 -0.0509\nv 0.003664 -0.052109 0.124485\nvn -0.0758 0.9958 -0.0509\nv 0.003523 -0.052051 0.125832\nvn -0.0906 0.9945 -0.0524\nv 0.003664 -0.052109 0.124485\nvn -0.0897 0.9946 -0.0523\nv 0.002855 -0.052135 0.125369\nvn -0.0914 0.9946 -0.0501\nv 0.004164 -0.052074 0.119744\nvn -0.031 0.9987 0.0415\nv 0.003728 -0.052061 0.1191\nvn -0.031 0.9987 0.0415\nv 0.003 -0.052091 0.119281\nvn -0.031 0.9987 0.0415\nv 0.003629 -0.052144 0.120316\nvn -0.0455 0.9959 0.0781\nv 0.004164 -0.052074 0.119744\nvn -0.0455 0.9959 0.0781\nv 0.003 -0.052091 0.119281\nvn -0.0455 0.9959 0.0781\nv 0.004683 -0.052079 0.120912\nvn -0.0845 0.9956 0.0416\nv 0.004164 -0.052074 0.119744\nvn -0.0845 0.9956 0.0416\nv 0.003629 -0.052144 0.120316\nvn -0.0845 0.9956 0.0416\nv 0.00417 -0.052112 0.121701\nvn -0.062 0.9981 0.0017\nv 0.004683 -0.052079 0.120912\nvn -0.062 0.9981 0.0017\nv 0.003629 -0.052144 0.120316\nvn -0.062 0.9981 0.0017\nv 0.00492 -0.052054 0.121848\nvn -0.0843 0.9964 0.0038\nv 0.004683 -0.052079 0.120912\nvn -0.0761 0.9971 -0.0075\nv 0.00417 -0.052112 0.121701\nvn -0.0749 0.9972 -0.0067\nv 0.004202 -0.052115 0.122509\nvn -0.0866 0.9962 -0.0036\nv 0.003137 -0.052072 0.126123\nvn -0.0916 0.9946 -0.0495\nv 0.004951 -0.05205 0.12244\nvn -0.0859 0.9963 -0.0025\nv 0.004889 -0.052053 0.123174\nvn -0.1021 0.9947 0.0136\nv 0.004202 -0.052115 0.122509\nvn -0.1021 0.9947 0.0136\nv 0.004086 -0.052135 0.123109\nvn -0.1021 0.9947 0.0136\nv 0.004889 -0.052053 0.123174\nvn -0.086 0.9963 -0.0032\nv 0.004814 -0.052048 0.123496\nvn -0.0904 0.9949 -0.0446\nv 0.004086 -0.052135 0.123109\nvn -0.0968 0.9945 -0.041\nv 0.003664 -0.052109 0.124485\nvn -0.0911 0.9948 -0.0448\nv 0.004889 -0.052053 0.123174\nvn -0.0977 0.9944 -0.0395\nv 0.003137 -0.052072 0.126123\nvn -0.0407 0.9968 -0.0687\nv 0.002855 -0.052135 0.125369\nvn -0.0407 0.9968 -0.0687\nv 0.001553 -0.052131 0.126195\nvn -0.0407 0.9968 -0.0687\nv 0.002546 -0.052054 0.126597\nvn -0.0416 0.9952 -0.0882\nv 0.003137 -0.052072 0.126123\nvn -0.0416 0.9952 -0.0882\nv 0.001553 -0.052131 0.126195\nvn -0.0416 0.9952 -0.0882\nv 0.004686 -0.05204 0.123949\nvn -0.0905 0.9949 -0.044\nv -0.00028 -0.052141 0.118188\nvn -0.1038 -0.4841 0.8689\nv 0.000551 -0.052199 0.118255\nvn -0.1038 -0.4841 0.8689\nv 0.001277 -0.052129 0.118381\nvn -0.1038 -0.4841 0.8689\nv -0.002636 -0.052201 0.119161\nvn 0.5606 0.2092 0.8012\nv -0.002152 -0.052189 0.118819\nvn 0.5606 0.2092 0.8012\nv -0.003033 -0.052113 0.119416\nvn 0.5606 0.2092 0.8012\nv -0.001526 -0.052139 0.118473\nvn 0.1235 0.9723 0.1985\nv -0.00185 -0.052094 0.118451\nvn 0.1235 0.9723 0.1985\nv -0.002265 -0.05209 0.11869\nvn 0.1235 0.9723 0.1985\nv -0.002265 -0.05209 0.11869\nvn 0.1993 0.8525 0.4833\nv -0.002152 -0.052189 0.118819\nvn 0.1993 0.8525 0.4833\nv -0.001526 -0.052139 0.118473\nvn 0.1993 0.8525 0.4833\nv -0.002636 -0.052201 0.119161\nvn 0.4597 0.7628 0.4548\nv -0.003033 -0.052113 0.119416\nvn 0.4597 0.7628 0.4548\nv -0.003287 -0.052228 0.119864\nvn 0.4597 0.7628 0.4548\nv -0.003287 -0.052228 0.119864\nvn 0.5999 0.7164 0.3561\nv -0.00354 -0.052114 0.120062\nvn 0.5999 0.7164 0.3561\nv -0.00372 -0.052213 0.120564\nvn 0.5999 0.7164 0.3561\nv 0.003629 -0.052144 0.120316\nvn -0.6012 0.6913 0.4008\nv 0.003 -0.052091 0.119281\nvn -0.6012 0.6913 0.4008\nv 0.003077 -0.052204 0.119593\nvn -0.6012 0.6913 0.4008\nv 0.00417 -0.052112 0.121701\nvn -0.6146 0.7721 0.1616\nv 0.003848 -0.052189 0.120842\nvn -0.6146 0.7721 0.1616\nv 0.004091 -0.052201 0.121828\nvn -0.6146 0.7721 0.1616\nv -0.002265 -0.05209 0.11869\nvn 0.3303 0.8649 0.3779\nv -0.003033 -0.052113 0.119416\nvn 0.3303 0.8649 0.3779\nv -0.002152 -0.052189 0.118819\nvn 0.3303 0.8649 0.3779\nv -0.003033 -0.052113 0.119416\nvn 0.6511 0.5608 0.5115\nv -0.00354 -0.052114 0.120062\nvn 0.6511 0.5608 0.5115\nv -0.003287 -0.052228 0.119864\nvn 0.6511 0.5608 0.5115\nv -0.00354 -0.052114 0.120062\nvn 0.6994 0.6111 0.3707\nv -0.003873 -0.052116 0.120693\nvn 0.6994 0.6111 0.3707\nv -0.00372 -0.052213 0.120564\nvn 0.6994 0.6111 0.3707\nv -0.003873 -0.052116 0.120693\nvn 0.6255 0.7618 0.1683\nv -0.004051 -0.052131 0.121419\nvn 0.6255 0.7618 0.1683\nv -0.00372 -0.052213 0.120564\nvn 0.6255 0.7618 0.1683\nv 0.004091 -0.052201 0.121828\nvn -0.7274 0.6855 0.0309\nv 0.004202 -0.052115 0.122509\nvn -0.7274 0.6855 0.0309\nv 0.00417 -0.052112 0.121701\nvn -0.7274 0.6855 0.0309\nv 0.004091 -0.052201 0.121828\nvn -0.6548 0.7557 0.0102\nv 0.004124 -0.052184 0.122636\nvn -0.6548 0.7557 0.0102\nv 0.004202 -0.052115 0.122509\nvn -0.6548 0.7557 0.0102\nv 0.002466 -0.052154 0.119012\nvn -0.2994 0.8705 0.3906\nv 0.003077 -0.052204 0.119593\nvn -0.2994 0.8705 0.3906\nv 0.003 -0.052091 0.119281\nvn -0.2994 0.8705 0.3906\nv 0.003848 -0.052189 0.120842\nvn -0.9083 -0.2148 0.359\nv 0.00417 -0.052112 0.121701\nvn -0.9083 -0.2148 0.359\nv 0.003629 -0.052144 0.120316\nvn -0.9083 -0.2148 0.359\nv 0.002466 -0.052154 0.119012\nvn -0.2263 0.947 0.2279\nv 0.003 -0.052091 0.119281\nvn -0.2263 0.947 0.2279\nv 0.002652 -0.052094 0.118947\nvn -0.2263 0.947 0.2279\nv 0.001989 -0.052129 0.118681\nvn -0.1824 0.9251 0.3331\nv 0.002466 -0.052154 0.119012\nvn -0.1824 0.9251 0.3331\nv 0.002652 -0.052094 0.118947\nvn -0.1824 0.9251 0.3331\nv -0.003233 -0.054796 0.119865\nvn 0.6895 0.0376 0.7233\nv -0.002457 -0.054808 0.119126\nvn 0.6895 0.0376 0.7233\nv -0.002636 -0.052201 0.119161\nvn 0.6895 0.0376 0.7233\nv -0.002152 -0.052189 0.118819\nvn 0.4817 0.0338 0.8757\nv -0.001586 -0.054801 0.118609\nvn 0.4817 0.0338 0.8757\nv -0.001526 -0.052139 0.118473\nvn 0.4817 0.0338 0.8757\nv -0.002457 -0.054808 0.119126\nvn 0.5095 0.0412 0.8595\nv -0.001586 -0.054801 0.118609\nvn 0.5095 0.0412 0.8595\nv -0.002152 -0.052189 0.118819\nvn 0.5095 0.0412 0.8595\nv -0.001735 -0.054782 0.126018\nvn 0.4868 0.0341 -0.8728\nv -0.002453 -0.054728 0.12562\nvn 0.4868 0.0341 -0.8728\nv -0.002228 -0.052132 0.125846\nvn 0.4868 0.0341 -0.8728\nv -0.002228 -0.052132 0.125846\nvn 0.6001 0.0179 -0.7997\nv -0.002453 -0.054728 0.12562\nvn 0.6001 0.0179 -0.7997\nv -0.002835 -0.052138 0.125391\nvn 0.6001 0.0179 -0.7997\nv -0.001526 -0.052139 0.118473\nvn 0.2229 0.0079 0.9748\nv -0.000644 -0.054725 0.118293\nvn 0.2229 0.0079 0.9748\nv -0.00028 -0.052141 0.118188\nvn 0.2229 0.0079 0.9748\nv -0.001586 -0.054801 0.118609\nvn 0.3153 0.0413 0.9481\nv -0.000644 -0.054725 0.118293\nvn 0.3153 0.0413 0.9481\nv -0.001526 -0.052139 0.118473\nvn 0.3153 0.0413 0.9481\nv -0.002453 -0.054728 0.12562\nvn 0.698 0.0399 -0.7149\nv -0.003196 -0.054745 0.124893\nvn 0.698 0.0399 -0.7149\nv -0.002835 -0.052138 0.125391\nvn 0.698 0.0399 -0.7149\nv -0.002835 -0.052138 0.125391\nvn 0.7657 0.0167 -0.643\nv -0.003196 -0.054745 0.124893\nvn 0.7657 0.0167 -0.643\nv -0.003452 -0.052144 0.124656\nvn 0.7657 0.0167 -0.643\nv -0.00028 -0.052141 0.118188\nvn -0.0798 0.0106 0.9968\nv 0.000387 -0.05473 0.118269\nvn -0.0798 0.0106 0.9968\nv 0.000551 -0.052199 0.118255\nvn -0.0798 0.0106 0.9968\nv -0.000644 -0.054725 0.118293\nvn 0.0228 0.0371 0.9991\nv 0.000387 -0.05473 0.118269\nvn 0.0228 0.0371 0.9991\nv -0.00028 -0.052141 0.118188\nvn 0.0228 0.0371 0.9991\nv -0.003452 -0.052144 0.124656\nvn 0.8782 0.0361 -0.477\nv -0.003535 -0.054804 0.124302\nvn 0.8782 0.0361 -0.477\nv -0.003815 -0.052144 0.123988\nvn 0.8782 0.0361 -0.477\nv -0.003196 -0.054745 0.124893\nvn 0.8652 0.0395 -0.4999\nv -0.003535 -0.054804 0.124302\nvn 0.8652 0.0395 -0.4999\nv -0.003452 -0.052144 0.124656\nvn 0.8652 0.0395 -0.4999\nv 0.000551 -0.052199 0.118255\nvn -0.1735 0.0316 0.9843\nv 0.001383 -0.054727 0.118483\nvn -0.1735 0.0316 0.9843\nv 0.001277 -0.052129 0.118381\nvn -0.1735 0.0316 0.9843\nv -0.003535 -0.054804 0.124302\nvn 0.8973 0.0425 -0.4393\nv -0.003922 -0.054736 0.123518\nvn 0.8973 0.0425 -0.4393\nv -0.003815 -0.052144 0.123988\nvn 0.8973 0.0425 -0.4393\nv 0.000387 -0.05473 0.118269\nvn -0.2102 0.0189 0.9775\nv 0.001383 -0.054727 0.118483\nvn -0.2102 0.0189 0.9775\nv 0.000551 -0.052199 0.118255\nvn -0.2102 0.0189 0.9775\nv -0.003815 -0.052144 0.123988\nvn 0.9485 0.0181 -0.3163\nv -0.003922 -0.054736 0.123518\nvn 0.9485 0.0181 -0.3163\nv -0.004056 -0.052138 0.123266\nvn 0.9485 0.0181 -0.3163\nv 0.001277 -0.052129 0.118381\nvn -0.388 0.0203 0.9215\nv 0.001383 -0.054727 0.118483\nvn -0.388 0.0203 0.9215\nv 0.001989 -0.052129 0.118681\nvn -0.388 0.0203 0.9215\nv 0.001383 -0.054727 0.118483\nvn -0.467 0.0416 0.8833\nv 0.002406 -0.054723 0.119024\nvn -0.467 0.0416 0.8833\nv 0.001989 -0.052129 0.118681\nvn -0.467 0.0416 0.8833\nv -0.003922 -0.054736 0.123518\nvn 0.9891 0.037 -0.1426\nv -0.004038 -0.054785 0.122701\nvn 0.9891 0.037 -0.1426\nv -0.004056 -0.052138 0.123266\nvn 0.9891 0.037 -0.1426\nv -0.004056 -0.052138 0.123266\nvn 0.995 0.0271 -0.0959\nv -0.004038 -0.054785 0.122701\nvn 0.995 0.0271 -0.0959\nv -0.004155 -0.052147 0.122234\nvn 0.995 0.0271 -0.0959\nv -0.004038 -0.054785 0.122701\nvn 0.999 0.0421 -0.012\nv -0.004043 -0.054799 0.122229\nvn 0.999 0.0421 -0.012\nv -0.004155 -0.052147 0.122234\nvn 0.999 0.0421 -0.012\nv -0.004155 -0.052147 0.122234\nvn 0.9914 0.0313 0.1272\nv -0.004002 -0.054798 0.121695\nvn 0.9914 0.0313 0.1272\nv -0.004051 -0.052131 0.121419\nvn 0.9914 0.0313 0.1272\nv -0.004043 -0.054799 0.122229\nvn 0.9962 0.0418 0.0767\nv -0.004002 -0.054798 0.121695\nvn 0.9962 0.0418 0.0767\nv -0.004155 -0.052147 0.122234\nvn 0.9962 0.0418 0.0767\nv -0.004051 -0.052131 0.121419\nvn 0.9331 0.023 0.359\nv -0.003835 -0.054794 0.12103\nvn 0.9331 0.023 0.359\nv -0.00372 -0.052213 0.120564\nvn 0.9331 0.023 0.359\nv -0.004002 -0.054798 0.121695\nvn 0.9691 0.0429 0.243\nv -0.003835 -0.054794 0.12103\nvn 0.9691 0.0429 0.243\nv -0.004051 -0.052131 0.121419\nvn 0.9691 0.0429 0.243\nv -0.00372 -0.052213 0.120564\nvn 0.8506 0.0179 0.5255\nv -0.003233 -0.054796 0.119865\nvn 0.8506 0.0179 0.5255\nv -0.003287 -0.052228 0.119864\nvn 0.8506 0.0179 0.5255\nv -0.003835 -0.054794 0.12103\nvn 0.8875 0.043 0.4587\nv -0.003233 -0.054796 0.119865\nvn 0.8875 0.043 0.4587\nv -0.00372 -0.052213 0.120564\nvn 0.8875 0.043 0.4587\nv -0.003287 -0.052228 0.119864\nvn 0.7336 0.0155 0.6794\nv -0.003233 -0.054796 0.119865\nvn 0.7336 0.0155 0.6794\nv -0.002636 -0.052201 0.119161\nvn 0.7336 0.0155 0.6794\nv -0.002636 -0.052201 0.119161\nvn 0.5758 0.0285 0.8171\nv -0.002457 -0.054808 0.119126\nvn 0.5758 0.0285 0.8171\nv -0.002152 -0.052189 0.118819\nvn 0.5758 0.0285 0.8171\nv 0.00139 -0.054724 0.126206\nvn -0.1459 0.7614 -0.6317\nv 0.001485 -0.054828 0.126058\nvn -0.1459 0.7614 -0.6317\nv 0.00022 -0.054825 0.126354\nvn -0.1459 0.7614 -0.6317\nv 0.00139 -0.054724 0.126206\nvn -0.1516 0.5553 -0.8177\nv 0.00022 -0.054825 0.126354\nvn -0.1516 0.5553 -0.8177\nv 0.000151 -0.05473 0.126431\nvn -0.1516 0.5553 -0.8177\nv 0.000151 -0.05473 0.126431\nvn 0.0486 0.6515 -0.7571\nv 0.00022 -0.054825 0.126354\nvn 0.0486 0.6515 -0.7571\nv -0.000873 -0.054793 0.126311\nvn 0.0486 0.6515 -0.7571\nv -0.001735 -0.054782 0.126018\nvn 0.3624 0.7527 -0.5497\nv -0.002609 -0.054832 0.125374\nvn 0.3624 0.7527 -0.5497\nv -0.002453 -0.054728 0.12562\nvn 0.3624 0.7527 -0.5497\nv -0.002453 -0.054728 0.12562\nvn 0.5742 0.5566 -0.6004\nv -0.002609 -0.054832 0.125374\nvn 0.5742 0.5566 -0.6004\nv -0.003196 -0.054745 0.124893\nvn 0.5742 0.5566 -0.6004\nv -0.003535 -0.054804 0.124302\nvn 0.3796 0.8734 -0.305\nv -0.003196 -0.054745 0.124893\nvn 0.3796 0.8734 -0.305\nv -0.002609 -0.054832 0.125374\nvn 0.3796 0.8734 -0.305\nv 0.001485 -0.054828 0.126058\nvn -0.3688 0.6307 -0.6828\nv 0.00139 -0.054724 0.126206\nvn -0.3688 0.6307 -0.6828\nv 0.002477 -0.05481 0.125539\nvn -0.3688 0.6307 -0.6828\nv -0.004043 -0.054799 0.122229\nvn 0.3351 0.9416 -0.0316\nv -0.004038 -0.054785 0.122701\nvn 0.3351 0.9416 -0.0316\nv -0.003838 -0.054832 0.123417\nvn 0.3351 0.9416 -0.0316\nv -0.004038 -0.054785 0.122701\nvn 0.6698 0.7294 -0.139\nv -0.003922 -0.054736 0.123518\nvn 0.6698 0.7294 -0.139\nv -0.003838 -0.054832 0.123417\nvn 0.6698 0.7294 -0.139\nv -0.003838 -0.054832 0.123417\nvn 0.6009 0.7654 -0.2304\nv -0.003922 -0.054736 0.123518\nvn 0.6009 0.7654 -0.2304\nv -0.003535 -0.054804 0.124302\nvn 0.6009 0.7654 -0.2304\nv 0.004298 -0.047864 0.123325\nvn -0.6728 -0.6831 -0.284\nv 0.004685 -0.048551 0.124062\nvn -0.6728 -0.6831 -0.284\nv 0.003866 -0.047942 0.124536\nvn -0.6728 -0.6831 -0.284\nv 0.004809 -0.048548 0.123669\nvn -0.7202 -0.6539 -0.2319\nv 0.004685 -0.048551 0.124062\nvn -0.7202 -0.6539 -0.2319\nv 0.004298 -0.047864 0.123325\nvn -0.7202 -0.6539 -0.2319\nv 0.004685 -0.048551 0.124062\nvn -0.6766 -0.6678 -0.3102\nv 0.004267 -0.048548 0.124967\nvn -0.6766 -0.6678 -0.3102\nv 0.003866 -0.047942 0.124536\nvn -0.6766 -0.6678 -0.3102\nv 0.003866 -0.047942 0.124536\nvn -0.5383 -0.7102 -0.4537\nv 0.003628 -0.048548 0.125767\nvn -0.5383 -0.7102 -0.4537\nv 0.002942 -0.047983 0.125698\nvn -0.5383 -0.7102 -0.4537\nv 0.004267 -0.048548 0.124967\nvn -0.5639 -0.6925 -0.45\nv 0.003628 -0.048548 0.125767\nvn -0.5639 -0.6925 -0.45\nv 0.003866 -0.047942 0.124536\nvn -0.5639 -0.6925 -0.45\nv 0.003628 -0.048548 0.125767\nvn -0.5076 -0.6817 -0.5269\nv 0.003232 -0.048546 0.126145\nvn -0.5076 -0.6817 -0.5269\nv 0.002942 -0.047983 0.125698\nvn -0.5076 -0.6817 -0.5269\nv 0.002942 -0.047983 0.125698\nvn -0.4855 -0.6551 -0.5789\nv 0.002709 -0.048549 0.126534\nvn -0.4855 -0.6551 -0.5789\nv 0.002219 -0.047842 0.126144\nvn -0.4855 -0.6551 -0.5789\nv 0.003232 -0.048546 0.126145\nvn -0.4293 -0.6878 -0.5853\nv 0.002709 -0.048549 0.126534\nvn -0.4293 -0.6878 -0.5853\nv 0.002942 -0.047983 0.125698\nvn -0.4293 -0.6878 -0.5853\nv 0.003356 -0.047764 0.125236\nvn -0.7952 -0.3588 -0.4889\nv 0.004167 -0.047745 0.123902\nvn -0.7952 -0.3588 -0.4889\nv 0.003866 -0.047942 0.124536\nvn -0.7952 -0.3588 -0.4889\nv -0.003002 -0.047864 0.125572\nvn 0.5823 -0.6832 -0.4407\nv -0.003833 -0.048551 0.125538\nvn 0.5823 -0.6832 -0.4407\nv -0.003834 -0.047942 0.124592\nvn 0.5823 -0.6832 -0.4407\nv -0.003555 -0.048548 0.125842\nvn 0.5609 -0.6539 -0.5077\nv -0.003833 -0.048551 0.125538\nvn 0.5609 -0.6539 -0.5077\nv -0.003002 -0.047864 0.125572\nvn 0.5609 -0.6539 -0.5077\nv -0.003833 -0.048551 0.125538\nvn 0.6071 -0.6678 -0.4308\nv -0.004408 -0.048548 0.124724\nvn 0.6071 -0.6678 -0.4308\nv -0.003834 -0.047942 0.124592\nvn 0.6071 -0.6678 -0.4308\nv -0.003834 -0.047942 0.124592\nvn 0.6621 -0.7101 -0.2393\nv -0.004781 -0.048548 0.123771\nvn 0.6621 -0.7101 -0.2393\nv -0.004378 -0.047983 0.123211\nvn 0.6621 -0.7101 -0.2393\nv -0.004408 -0.048548 0.124724\nvn 0.6716 -0.6925 -0.2633\nv -0.004781 -0.048548 0.123771\nvn 0.6716 -0.6925 -0.2633\nv -0.003834 -0.047942 0.124592\nvn 0.6716 -0.6925 -0.2633\nv -0.004781 -0.048548 0.123771\nvn 0.7101 -0.6817 -0.1762\nv -0.004911 -0.048546 0.123239\nvn 0.7101 -0.6817 -0.1762\nv -0.004378 -0.047983 0.123211\nvn 0.7101 -0.6817 -0.1762\nv -0.004378 -0.047983 0.123211\nvn 0.7441 -0.6551 -0.1311\nv -0.004986 -0.048549 0.122591\nvn 0.7441 -0.6551 -0.1311\nv -0.004403 -0.047842 0.122363\nvn 0.7441 -0.6551 -0.1311\nv -0.004911 -0.048546 0.123239\nvn 0.7215 -0.6878 -0.0791\nv -0.004986 -0.048549 0.122591\nvn 0.7215 -0.6878 -0.0791\nv -0.004378 -0.047983 0.123211\nvn 0.7215 -0.6878 -0.0791\nv -0.004056 -0.052138 0.123266\nvn 0.0869 0.996 -0.0217\nv -0.004155 -0.052147 0.122234\nvn 0.0862 0.9961 -0.0163\nv -0.004844 -0.052072 0.123168\nvn 0.0862 0.9961 -0.0164\nv -0.004646 -0.052073 0.123926\nvn 0.0869 0.996 -0.0213\nv -0.001534 -0.052023 0.127076\nvn 0.0131 0.9944 -0.1048\nv -0.00143 -0.052093 0.126427\nvn 0.0131 0.9944 -0.1048\nv -0.002335 -0.052051 0.126709\nvn 0.0131 0.9944 -0.1048\nv -0.003815 -0.052144 0.123988\nvn 0.0869 0.996 -0.0212\nv -0.002265 -0.05209 0.11869\nvn 0.0364 0.9991 0.0228\nv -0.002943 -0.052058 0.118361\nvn 0.0364 0.9991 0.0228\nv -0.003428 -0.052049 0.118767\nvn 0.0364 0.9991 0.0228\nv -0.003033 -0.052113 0.119416\nvn 0.0492 0.9964 0.0689\nv -0.002265 -0.05209 0.11869\nvn 0.0397 0.9964 0.0746\nv -0.003428 -0.052049 0.118767\nvn 0.04 0.9964 0.0745\nv -0.003452 -0.052144 0.124656\nvn 0.0888 0.9949 -0.048\nv -0.003815 -0.052144 0.123988\nvn 0.0888 0.9949 -0.048\nv -0.004646 -0.052073 0.123926\nvn 0.0888 0.9949 -0.048\nv -0.004168 -0.052046 0.125029\nvn 0.101 0.9926 -0.0681\nv -0.003452 -0.052144 0.124656\nvn 0.101 0.9926 -0.0681\nv -0.004646 -0.052073 0.123926\nvn 0.101 0.9926 -0.0681\nv -0.004122 -0.052079 0.119702\nvn 0.0494 0.9964 0.0687\nv -0.00354 -0.052114 0.120062\nvn 0.0398 0.9987 0.032\nv -0.003033 -0.052113 0.119416\nvn 0.0398 0.9987 0.032\nv -0.004122 -0.052079 0.119702\nvn 0.0398 0.9987 0.032\nv -0.002835 -0.052138 0.125391\nvn 0.0916 0.9922 -0.0843\nv -0.003452 -0.052144 0.124656\nvn 0.0919 0.9921 -0.0854\nv -0.004168 -0.052046 0.125029\nvn 0.0916 0.9922 -0.0843\nv -0.003736 -0.052038 0.125597\nvn 0.0913 0.9924 -0.083\nv -0.003211 -0.052092 0.126002\nvn 0.1087 0.994 -0.0077\nv -0.002835 -0.052138 0.125391\nvn 0.1087 0.994 -0.0077\nv -0.003736 -0.052038 0.125597\nvn 0.1087 0.994 -0.0077\nv -0.00354 -0.052114 0.120062\nvn 0.0483 0.9987 0.0181\nv -0.004122 -0.052079 0.119702\nvn 0.0483 0.9987 0.0181\nv -0.004532 -0.052073 0.120461\nvn 0.0483 0.9987 0.0181\nv -0.003873 -0.052116 0.120693\nvn 0.0604 0.9978 0.026\nv -0.00354 -0.052114 0.120062\nvn 0.0539 0.998 0.0321\nv -0.004532 -0.052073 0.120461\nvn 0.0544 0.9981 0.0306\nv -0.003211 -0.052092 0.126002\nvn 0.032 0.998 -0.0551\nv -0.002228 -0.052132 0.125846\nvn 0.032 0.998 -0.0551\nv -0.002835 -0.052138 0.125391\nvn 0.032 0.998 -0.0551\nv -0.004725 -0.052075 0.121006\nvn 0.0593 0.9978 0.0289\nv -0.004051 -0.052131 0.121419\nvn 0.0615 0.9975 0.0347\nv -0.0028 -0.052067 0.126385\nvn 0.0292 0.9954 -0.0908\nv -0.002228 -0.052132 0.125846\nvn 0.0281 0.9954 -0.0919\nv -0.003211 -0.052092 0.126002\nvn 0.0259 0.9953 -0.093\nv -0.002335 -0.052051 0.126709\nvn 0.0286 0.9954 -0.0919\nv -0.00143 -0.052093 0.126427\nvn 0.0174 0.9957 -0.0914\nv -0.004051 -0.052131 0.121419\nvn 0.0795 0.9968 0.0052\nv -0.004725 -0.052075 0.121006\nvn 0.0795 0.9968 0.0052\nv -0.00493 -0.052064 0.122087\nvn 0.0795 0.9968 0.0052\nv -0.004155 -0.052147 0.122234\nvn 0.1 0.9945 0.0324\nv -0.004051 -0.052131 0.121419\nvn 0.1 0.9945 0.0324\nv -0.00493 -0.052064 0.122087\nvn 0.1 0.9945 0.0324\nv -0.004844 -0.052072 0.123168\nvn 0.1064 0.9943 -0.0013\nv -0.004155 -0.052147 0.122234\nvn 0.1064 0.9943 -0.0013\nv -0.00493 -0.052064 0.122087\nvn 0.1064 0.9943 -0.0013\nv -0.004185 -0.047764 0.1238\nvn 0.8212 -0.3581 -0.4443\nv -0.003436 -0.047745 0.12517\nvn 0.8212 -0.3581 -0.4443\nv -0.003834 -0.047942 0.124592\nvn 0.8212 -0.3581 -0.4443\nv -0.001299 -0.047859 0.118133\nvn 0.1155 -0.6605 0.7419\nv -0.001255 -0.048548 0.117513\nvn 0.1155 -0.6605 0.7419\nv -0.000373 -0.047953 0.117905\nvn 0.1155 -0.6605 0.7419\nv -0.001255 -0.048548 0.117513\nvn 0.1518 -0.691 0.7067\nv -0.000852 -0.048551 0.117423\nvn 0.1518 -0.691 0.7067\nv -0.000373 -0.047953 0.117905\nvn 0.1518 -0.691 0.7067\nv -0.000852 -0.048551 0.117423\nvn 0.0702 -0.6593 0.7486\nv 0.00014 -0.048548 0.117333\nvn 0.0702 -0.6593 0.7486\nv -0.000373 -0.047953 0.117905\nvn 0.0702 -0.6593 0.7486\nv -0.000373 -0.047953 0.117905\nvn 0.0024 -0.6921 0.7218\nv 0.00014 -0.048548 0.117333\nvn 0.0024 -0.6921 0.7218\nv 0.000788 -0.047839 0.118011\nvn 0.0024 -0.6921 0.7218\nv 0.000788 -0.047839 0.118011\nvn -0.2159 -0.65 0.7286\nv 0.001152 -0.048548 0.117486\nvn -0.2154 -0.6503 0.7285\nv 0.001455 -0.047875 0.118176\nvn -0.2108 -0.6521 0.7283\nv 0.00014 -0.048548 0.117333\nvn -0.1162 -0.6287 0.7689\nv 0.001152 -0.048548 0.117486\nvn -0.1162 -0.6287 0.7689\nv 0.000788 -0.047839 0.118011\nvn -0.1162 -0.6287 0.7689\nv 0.001677 -0.048546 0.117639\nvn -0.2099 -0.6523 0.7283\nv 0.001455 -0.047875 0.118176\nvn -0.3409 -0.6813 0.6478\nv 0.002276 -0.048549 0.117899\nvn -0.3409 -0.6813 0.6478\nv 0.002188 -0.047937 0.118496\nvn -0.3409 -0.6813 0.6478\nv 0.001677 -0.048546 0.117639\nvn -0.3039 -0.6545 0.6923\nv 0.002276 -0.048549 0.117899\nvn -0.3039 -0.6545 0.6923\nv 0.001455 -0.047875 0.118176\nvn -0.3039 -0.6545 0.6923\nv 0.001989 -0.052129 0.118681\nvn -0.0314 0.9952 0.0928\nv 0.002716 -0.05206 0.118188\nvn -0.0314 0.9952 0.0928\nv 0.002406 -0.052054 0.118018\nvn -0.0314 0.9952 0.0928\nv 0.002652 -0.052094 0.118947\nvn -0.0682 0.9969 0.0387\nv 0.002716 -0.05206 0.118188\nvn -0.0682 0.9969 0.0387\nv 0.001989 -0.052129 0.118681\nvn -0.0682 0.9969 0.0387\nv -0.001526 -0.052139 0.118473\nvn 0.0293 0.9937 0.1079\nv -0.000827 -0.05205 0.117461\nvn 0.0293 0.9937 0.1079\nv -0.001407 -0.052047 0.117593\nvn 0.0298 0.9937 0.1083\nv -0.001526 -0.052139 0.118473\nvn 0.0114 0.9943 0.1059\nv -0.001407 -0.052047 0.117593\nvn 0.0114 0.9943 0.1059\nv -0.00175 -0.052054 0.117692\nvn 0.0114 0.9943 0.1059\nv -0.001526 -0.052139 0.118473\nvn 0.1347 0.9884 0.0698\nv -0.00175 -0.052054 0.117692\nvn 0.1347 0.9884 0.0698\nv -0.00185 -0.052094 0.118451\nvn 0.1347 0.9884 0.0698\nv -0.00028 -0.052141 0.118188\nvn 0.0073 0.9929 0.1188\nv 0.001158 -0.052078 0.117571\nvn 0.0073 0.9929 0.1188\nv -0.000827 -0.05205 0.117461\nvn 0.0073 0.9929 0.1188\nv -0.00028 -0.052141 0.118188\nvn 0.0255 0.9941 0.1053\nv 0.001277 -0.052129 0.118381\nvn -0.0172 0.9977 0.0651\nv 0.001158 -0.052078 0.117571\nvn -0.0258 0.9975 0.0665\nv -0.00028 -0.052141 0.118188\nvn -0.0159 0.9977 0.0652\nv 0.001989 -0.052129 0.118681\nvn -0.0484 0.9954 0.0822\nv 0.002406 -0.052054 0.118018\nvn -0.0484 0.9954 0.0822\nv 0.001158 -0.052078 0.117571\nvn -0.0484 0.9954 0.0822\nv 0.001989 -0.052129 0.118681\nvn -0.0279 0.9974 0.0669\nv 9.9e-05 -0.047767 0.117914\nvn 0.0669 -0.2145 0.9744\nv -0.000704 -0.047765 0.117969\nvn 0.0669 -0.2145 0.9744\nv -0.000373 -0.047953 0.117905\nvn 0.0669 -0.2145 0.9744\nv 0.002188 -0.047937 0.118496\nvn -0.38 0.1844 0.9064\nv 0.002183 -0.047698 0.118445\nvn -0.38 0.1844 0.9064\nv 0.001455 -0.047875 0.118176\nvn -0.38 0.1844 0.9064\nv -0.000704 -0.047765 0.117969\nvn 0.2475 0.1079 0.9629\nv -0.001299 -0.047859 0.118133\nvn 0.2475 0.1079 0.9629\nv -0.000373 -0.047953 0.117905\nvn 0.2475 0.1079 0.9629\nv -0.001436 -0.045599 0.126441\nvn 0.3325 0.0023 -0.9431\nv -0.001329 -0.04549 0.126479\nvn 0.3325 0.0023 -0.9431\nv -0.00143 -0.052093 0.126427\nvn 0.3325 0.0023 -0.9431\nv -0.00143 -0.052093 0.126427\nvn 0.1496 0.0055 -0.9887\nv -0.001329 -0.04549 0.126479\nvn 0.1496 0.0055 -0.9887\nv -0.000749 -0.052097 0.12653\nvn 0.1496 0.0055 -0.9887\nv -0.000749 -0.052097 0.12653\nvn 0.08 -0.0007 -0.9968\nv -0.001329 -0.04549 0.126479\nvn 0.08 -0.0007 -0.9968\nv 0.000507 -0.052087 0.126631\nvn 0.08 -0.0007 -0.9968\nv -0.001329 -0.04549 0.126479\nvn 0.0981 0.0044 -0.9952\nv 0.000382 -0.045494 0.126647\nvn 0.0981 0.0044 -0.9952\nv 0.000507 -0.052087 0.126631\nvn 0.0981 0.0044 -0.9952\nv 0.000382 -0.045494 0.126647\nvn 0.0353 0.0032 -0.9994\nv 0.000506 -0.0456 0.126651\nvn 0.0353 0.0032 -0.9994\nv 0.000507 -0.052087 0.126631\nvn 0.0353 0.0032 -0.9994\nv 0.003 -0.052091 0.119281\nvn -0.6934 0.0028 0.7205\nv 0.003009 -0.045568 0.119265\nvn -0.6934 0.0028 0.7205\nv 0.002652 -0.052094 0.118947\nvn -0.6934 0.0028 0.7205\nv 0.003009 -0.045568 0.119265\nvn -0.655 -0.001 0.7556\nv 0.002676 -0.045536 0.118976\nvn -0.655 -0.001 0.7556\nv 0.002652 -0.052094 0.118947\nvn -0.655 -0.001 0.7556\nv 0.003664 -0.052109 0.124485\nvn -0.657 0.4734 -0.5867\nv 0.0033 -0.052201 0.124818\nvn -0.657 0.4734 -0.5867\nv 0.002855 -0.052135 0.125369\nvn -0.657 0.4734 -0.5867\nv -0.001438 -0.052158 0.126236\nvn 0.1889 0.9275 -0.3227\nv -0.002228 -0.052132 0.125846\nvn 0.1889 0.9275 -0.3227\nv -0.00143 -0.052093 0.126427\nvn 0.1889 0.9275 -0.3227\nv 1.4e-05 -0.052146 0.126492\nvn 0.0321 0.8724 -0.4877\nv -0.000749 -0.052097 0.12653\nvn 0.0321 0.8724 -0.4877\nv 0.000507 -0.052087 0.126631\nvn 0.0321 0.8724 -0.4877\nv 0.001553 -0.052131 0.126195\nvn -0.1499 0.8802 -0.4503\nv 0.00056 -0.052172 0.126447\nvn -0.1499 0.8802 -0.4503\nv 0.000507 -0.052087 0.126631\nvn -0.1499 0.8802 -0.4503\nv 0.002855 -0.052135 0.125369\nvn -0.3483 -0.7622 -0.5457\nv 0.002178 -0.052171 0.125852\nvn -0.3483 -0.7622 -0.5457\nv 0.001553 -0.052131 0.126195\nvn -0.3483 -0.7622 -0.5457\nv -0.000656 -0.052205 0.126411\nvn 0.0146 0.7428 -0.6694\nv -0.000749 -0.052097 0.12653\nvn 0.0146 0.7428 -0.6694\nv 1.4e-05 -0.052146 0.126492\nvn 0.0146 0.7428 -0.6694\nv 0.004086 -0.052135 0.123109\nvn -0.9174 0.2761 -0.2866\nv 0.003798 -0.05219 0.123978\nvn -0.9174 0.2761 -0.2866\nv 0.003664 -0.052109 0.124485\nvn -0.9174 0.2761 -0.2866\nv 0.0033 -0.052201 0.124818\nvn -0.4508 0.855 -0.2566\nv 0.003664 -0.052109 0.124485\nvn -0.4508 0.855 -0.2566\nv 0.003798 -0.05219 0.123978\nvn -0.4508 0.855 -0.2566\nv 0.004124 -0.052184 0.122636\nvn -0.7663 0.6299 -0.1264\nv 0.004086 -0.052135 0.123109\nvn -0.7663 0.6299 -0.1264\nv 0.004202 -0.052115 0.122509\nvn -0.7663 0.6299 -0.1264\nv -0.000749 -0.052097 0.12653\nvn 0.0541 0.945 -0.3227\nv -0.001438 -0.052158 0.126236\nvn 0.0541 0.945 -0.3227\nv -0.00143 -0.052093 0.126427\nvn 0.0541 0.945 -0.3227\nv -0.000656 -0.052205 0.126411\nvn 0.1796 0.7912 -0.5845\nv -0.001438 -0.052158 0.126236\nvn 0.1796 0.7912 -0.5845\nv -0.000749 -0.052097 0.12653\nvn 0.1796 0.7912 -0.5845\nv 1.4e-05 -0.052146 0.126492\nvn 0.0081 0.9085 -0.4179\nv 0.000507 -0.052087 0.126631\nvn 0.0081 0.9085 -0.4179\nv 0.00056 -0.052172 0.126447\nvn 0.0081 0.9085 -0.4179\nv 0.003356 -0.047764 0.125236\nvn -0.7733 0.177 -0.6088\nv 0.003866 -0.047942 0.124536\nvn -0.7733 0.177 -0.6088\nv 0.002942 -0.047983 0.125698\nvn -0.7733 0.177 -0.6088\nv 0.004298 -0.047864 0.123325\nvn -0.8661 0.4123 -0.2828\nv 0.003866 -0.047942 0.124536\nvn -0.8661 0.4123 -0.2828\nv 0.004167 -0.047745 0.123902\nvn -0.8661 0.4123 -0.2828\nv 0.002787 -0.047772 0.125774\nvn -0.5357 -0.0903 -0.8396\nv 0.002942 -0.047983 0.125698\nvn -0.5357 -0.0903 -0.8396\nv 0.002219 -0.047842 0.126144\nvn -0.5357 -0.0903 -0.8396\nv 0.002942 -0.047983 0.125698\nvn -0.6664 -0.2337 -0.708\nv 0.002787 -0.047772 0.125774\nvn -0.6664 -0.2337 -0.708\nv 0.003356 -0.047764 0.125236\nvn -0.6664 -0.2337 -0.708\nv -0.004185 -0.047764 0.1238\nvn 0.9138 0.1773 -0.3653\nv -0.003834 -0.047942 0.124592\nvn 0.9138 0.1773 -0.3653\nv -0.004378 -0.047983 0.123211\nvn 0.9138 0.1773 -0.3653\nv -0.003002 -0.047864 0.125572\nvn 0.6777 0.413 -0.6084\nv -0.003834 -0.047942 0.124592\nvn 0.6777 0.413 -0.6084\nv -0.003436 -0.047745 0.12517\nvn 0.6777 0.413 -0.6084\nv -0.004367 -0.047772 0.123039\nvn 0.9949 -0.0908 -0.0443\nv -0.004378 -0.047983 0.123211\nvn 0.9949 -0.0908 -0.0443\nv -0.004403 -0.047842 0.122363\nvn 0.9949 -0.0908 -0.0443\nv -0.004378 -0.047983 0.123211\nvn 0.9464 -0.2339 -0.2229\nv -0.004367 -0.047772 0.123039\nvn 0.9464 -0.2339 -0.2229\nv -0.004185 -0.047764 0.1238\nvn 0.9464 -0.2339 -0.2229\nv -0.00185 -0.052094 0.118451\nvn 0.5004 -0.001 0.8658\nv -0.001885 -0.045533 0.118478\nvn 0.5004 -0.001 0.8658\nv -0.002265 -0.05209 0.11869\nvn 0.5004 -0.001 0.8658\nv -0.001885 -0.045533 0.118478\nvn 0.4724 0.0011 0.8814\nv -0.00227 -0.045571 0.118685\nvn 0.4724 0.0011 0.8814\nv -0.002265 -0.05209 0.11869\nvn 0.4724 0.0011 0.8814\nv 9.9e-05 -0.047767 0.117914\nvn -0.1108 0.2376 0.965\nv -0.000373 -0.047953 0.117905\nvn -0.1108 0.2376 0.965\nv 0.000788 -0.047839 0.118011\nvn -0.1108 0.2376 0.965\nv 0.002855 -0.052135 0.125369\nvn -0.5812 0.0305 -0.8132\nv 0.002477 -0.05481 0.125539\nvn -0.5812 0.0305 -0.8132\nv 0.002178 -0.052171 0.125852\nvn -0.5812 0.0305 -0.8132\nv 0.002178 -0.052171 0.125852\nvn -0.48 0.0266 -0.8768\nv 0.00139 -0.054724 0.126206\nvn -0.48 0.0266 -0.8768\nv 0.001553 -0.052131 0.126195\nvn -0.48 0.0266 -0.8768\nv 0.002477 -0.05481 0.125539\nvn -0.5198 0.0422 -0.8533\nv 0.00139 -0.054724 0.126206\nvn -0.5198 0.0422 -0.8533\nv 0.002178 -0.052171 0.125852\nvn -0.5198 0.0422 -0.8533\nv 0.001989 -0.052129 0.118681\nvn -0.5694 0.0171 0.8219\nv 0.002406 -0.054723 0.119024\nvn -0.5694 0.0171 0.8219\nv 0.002466 -0.052154 0.119012\nvn -0.5694 0.0171 0.8219\nv 0.002466 -0.052154 0.119012\nvn -0.6812 0.0184 0.7319\nv 0.003096 -0.05472 0.119663\nvn -0.6862 0.016 0.7272\nv 0.003077 -0.052204 0.119593\nvn -0.6881 0.0151 0.7254\nv 0.002406 -0.054723 0.119024\nvn -0.6794 0.0193 0.7335\nv 0.001553 -0.052131 0.126195\nvn -0.2463 0.0116 -0.9691\nv 0.00139 -0.054724 0.126206\nvn -0.2463 0.0116 -0.9691\nv 0.00056 -0.052172 0.126447\nvn -0.2463 0.0116 -0.9691\nv 0.00139 -0.054724 0.126206\nvn -0.1791 0.0348 -0.9832\nv 0.000151 -0.05473 0.126431\nvn -0.1791 0.0348 -0.9832\nv 0.00056 -0.052172 0.126447\nvn -0.1791 0.0348 -0.9832\nv 0.003077 -0.052204 0.119593\nvn -0.7958 0.0423 0.604\nv 0.003682 -0.054758 0.120569\nvn -0.7958 0.0423 0.604\nv 0.003629 -0.052144 0.120316\nvn -0.7958 0.0423 0.604\nv 0.003096 -0.05472 0.119663\nvn -0.8393 0.0089 0.5436\nv 0.003682 -0.054758 0.120569\nvn -0.8393 0.0089 0.5436\nv 0.003077 -0.052204 0.119593\nvn -0.8393 0.0089 0.5436\nv 0.00056 -0.052172 0.126447\nvn -0.0802 0.019 -0.9966\nv 0.000151 -0.05473 0.126431\nvn -0.0802 0.019 -0.9966\nv 1.4e-05 -0.052146 0.126492\nvn -0.0802 0.019 -0.9966\nv 0.003629 -0.052144 0.120316\nvn -0.9227 0.0185 0.385\nv 0.003682 -0.054758 0.120569\nvn -0.9227 0.0185 0.385\nv 0.003848 -0.052189 0.120842\nvn -0.9227 0.0185 0.385\nv 1.4e-05 -0.052146 0.126492\nvn 0.115 0.0292 -0.9929\nv -0.000873 -0.054793 0.126311\nvn 0.1159 0.0289 -0.9928\nv -0.000656 -0.052205 0.126411\nvn 0.1166 0.0286 -0.9928\nv 0.000151 -0.05473 0.126431\nvn 0.1146 0.0293 -0.993\nv -0.000656 -0.052205 0.126411\nvn 0.2204 0.0193 -0.9752\nv -0.000873 -0.054793 0.126311\nvn 0.2204 0.0193 -0.9752\nv -0.001438 -0.052158 0.126236\nvn 0.2204 0.0193 -0.9752\nv 0.003682 -0.054758 0.120569\nvn -0.9466 0.0268 0.3213\nv 0.003916 -0.054794 0.121261\nvn -0.9466 0.0268 0.3213\nv 0.003848 -0.052189 0.120842\nvn -0.9466 0.0268 0.3213\nv 0.003848 -0.052189 0.120842\nvn -0.9707 0.0131 0.2399\nv 0.003916 -0.054794 0.121261\nvn -0.9707 0.0131 0.2399\nv 0.004091 -0.052201 0.121828\nvn -0.9707 0.0131 0.2399\nv -0.000873 -0.054793 0.126311\nvn 0.3225 0.042 -0.9457\nv -0.001735 -0.054782 0.126018\nvn 0.3225 0.042 -0.9457\nv -0.001438 -0.052158 0.126236\nvn 0.3225 0.042 -0.9457\nv 0.003916 -0.054794 0.121261\nvn -0.9869 0.0321 0.1579\nv 0.004086 -0.054751 0.12231\nvn -0.9869 0.0321 0.1579\nv 0.004091 -0.052201 0.121828\nvn -0.9869 0.0321 0.1579\nv -0.001438 -0.052158 0.126236\nvn 0.4424 0.0243 -0.8965\nv -0.001735 -0.054782 0.126018\nvn 0.4424 0.0243 -0.8965\nv -0.002228 -0.052132 0.125846\nvn 0.4424 0.0243 -0.8965\nv 0.004091 -0.052201 0.121828\nvn -0.9991 0.0099 0.0404\nv 0.004086 -0.054751 0.12231\nvn -0.9991 0.0099 0.0404\nv 0.004124 -0.052184 0.122636\nvn -0.9991 0.0099 0.0404\nv 0.004086 -0.054751 0.12231\nvn -0.9918 0.0306 -0.1243\nv 0.003998 -0.054799 0.122994\nvn -0.9918 0.0306 -0.1243\nv 0.004124 -0.052184 0.122636\nvn -0.9918 0.0306 -0.1243\nv 0.004124 -0.052184 0.122636\nvn -0.9958 0.0364 -0.0834\nv 0.003998 -0.054799 0.122994\nvn -0.9958 0.0364 -0.0834\nv 0.004086 -0.052135 0.123109\nvn -0.9958 0.0364 -0.0834\nv 0.004086 -0.052135 0.123109\nvn -0.9491 0.0447 -0.3119\nv 0.003998 -0.054799 0.122994\nvn -0.9491 0.0447 -0.3119\nv 0.003798 -0.05219 0.123978\nvn -0.9491 0.0447 -0.3119\nv 0.003998 -0.054799 0.122994\nvn -0.9698 0.0173 -0.2433\nv 0.003833 -0.054796 0.123652\nvn -0.9698 0.0173 -0.2433\nv 0.003798 -0.05219 0.123978\nvn -0.9698 0.0173 -0.2433\nv 0.003833 -0.054796 0.123652\nvn -0.8884 0.0451 -0.4568\nv 0.00324 -0.054797 0.124805\nvn -0.8884 0.0451 -0.4568\nv 0.003798 -0.05219 0.123978\nvn -0.8884 0.0451 -0.4568\nv 0.003798 -0.05219 0.123978\nvn -0.8603 0.0224 -0.5092\nv 0.00324 -0.054797 0.124805\nvn -0.8603 0.0224 -0.5092\nv 0.0033 -0.052201 0.124818\nvn -0.8603 0.0224 -0.5092\nv 0.0033 -0.052201 0.124818\nvn -0.7766 0.0211 -0.6296\nv 0.00324 -0.054797 0.124805\nvn -0.7766 0.0211 -0.6296\nv 0.002855 -0.052135 0.125369\nvn -0.7766 0.0211 -0.6296\nv 0.00324 -0.054797 0.124805\nvn -0.6927 0.0522 -0.7193\nv 0.002477 -0.05481 0.125539\nvn -0.6927 0.0522 -0.7193\nv 0.002855 -0.052135 0.125369\nvn -0.6927 0.0522 -0.7193\nv 0.003916 -0.054794 0.121261\nvn -0.7764 0.6223 0.0995\nv 0.004001 -0.054823 0.122101\nvn -0.7764 0.6223 0.0995\nv 0.004086 -0.054751 0.12231\nvn -0.7764 0.6223 0.0995\nv 0.004001 -0.054823 0.122101\nvn -0.6153 0.788 -0.0229\nv 0.003998 -0.054799 0.122994\nvn -0.6153 0.788 -0.0229\nv 0.004086 -0.054751 0.12231\nvn -0.6153 0.788 -0.0229\nv -0.000644 -0.054725 0.118293\nvn 0.1366 0.7917 0.5954\nv -0.001586 -0.054801 0.118609\nvn 0.1366 0.7917 0.5954\nv -0.00022 -0.054826 0.118329\nvn 0.1366 0.7917 0.5954\nv -0.000644 -0.054725 0.118293\nvn 0.0225 0.4228 0.9059\nv -0.00022 -0.054826 0.118329\nvn 0.0225 0.4228 0.9059\nv 0.000387 -0.05473 0.118269\nvn 0.0225 0.4228 0.9059\nv 0.000387 -0.05473 0.118269\nvn -0.0799 0.8411 0.5349\nv -0.00022 -0.054826 0.118329\nvn -0.0799 0.8411 0.5349\nv 0.001399 -0.054828 0.118574\nvn -0.0799 0.8411 0.5349\nv 0.000387 -0.05473 0.118269\nvn -0.1625 0.6459 0.7459\nv 0.001399 -0.054828 0.118574\nvn -0.1625 0.6459 0.7459\nv 0.001383 -0.054727 0.118483\nvn -0.1625 0.6459 0.7459\nv 0.001383 -0.054727 0.118483\nvn -0.3807 0.5849 0.7162\nv 0.001399 -0.054828 0.118574\nvn -0.3807 0.5849 0.7162\nv 0.002406 -0.054723 0.119024\nvn -0.3807 0.5849 0.7162\nv 0.001399 -0.054828 0.118574\nvn -0.3305 0.7574 0.5632\nv 0.002502 -0.054828 0.119221\nvn -0.3305 0.7574 0.5632\nv 0.002406 -0.054723 0.119024\nvn -0.3305 0.7574 0.5632\nv 0.002406 -0.054723 0.119024\nvn -0.5438 0.6022 0.5845\nv 0.002502 -0.054828 0.119221\nvn -0.5438 0.6022 0.5845\nv 0.003096 -0.05472 0.119663\nvn -0.5438 0.6022 0.5845\nv 0.002502 -0.054828 0.119221\nvn -0.486 0.7338 0.4747\nv 0.003199 -0.054828 0.119934\nvn -0.486 0.7338 0.4747\nv 0.003096 -0.05472 0.119663\nvn -0.486 0.7338 0.4747\nv 0.003916 -0.054794 0.121261\nvn -0.3541 0.9199 0.1684\nv 0.003682 -0.054758 0.120569\nvn -0.3541 0.9199 0.1684\nv 0.003199 -0.054828 0.119934\nvn -0.3541 0.9199 0.1684\nv 0.003096 -0.05472 0.119663\nvn -0.7011 0.531 0.4759\nv 0.003199 -0.054828 0.119934\nvn -0.7011 0.531 0.4759\nv 0.003682 -0.054758 0.120569\nvn -0.7011 0.531 0.4759\nv 0.002477 -0.05481 0.125539\nvn -0.0227 0.9997 -0.0078\nv 0.001509 -0.054844 0.123952\nvn -0.0227 0.9997 -0.0078\nv 0.001485 -0.054828 0.126058\nvn -0.0227 0.9997 -0.0078\nv 0.001485 -0.054828 0.126058\nvn -0.0064 1 -0.0076\nv 0.001509 -0.054844 0.123952\nvn -0.0049 1 -0.0059\nv 0.000194 -0.054844 0.125053\nvn -0.0008 1 -0.001\nv 0.000438 -0.054844 0.123307\nvn 0 1 0\nv 0.001296 -0.054844 0.123385\nvn 0 1 0\nv 0.00111 -0.054844 0.122439\nvn 0 1 0\nv 0.002477 -0.05481 0.125539\nvn -0.0053 0.9998 -0.0184\nv 0.002092 -0.054844 0.123783\nvn -0.0053 0.9998 -0.0184\nv 0.001509 -0.054844 0.123952\nvn -0.0053 0.9998 -0.0184\nv -0.003535 -0.054804 0.124302\nvn -0.0019 0.9995 -0.0315\nv -0.00231 -0.054844 0.122961\nvn -0.0019 0.9995 -0.0315\nv -0.003838 -0.054832 0.123417\nvn -0.0019 0.9995 -0.0315\nv -0.003535 -0.054804 0.124302\nvn 0.0254 0.9997 -0.0056\nv -0.002131 -0.054844 0.123541\nvn 0.0284 0.9996 3.478e-18\nv -0.00231 -0.054844 0.122961\nvn 0.0244 0.9997 -0.0075\nv 0.001878 -0.054844 0.123216\nvn 0 1 0\nv -0.003838 -0.054832 0.123417\nvn 0.015 0.9996 0.0252\nv -0.00231 -0.054844 0.122961\nvn 0.015 0.9996 0.0252\nv -0.004043 -0.054799 0.122229\nvn 0.015 0.9996 0.0252\nv -0.002609 -0.054832 0.125374\nvn 0.0292 0.9996 0.0013\nv 0.000498 -0.054844 0.119942\nvn -0.0092 0.9999 0.0059\nv 0.001399 -0.054828 0.118574\nvn -0.0003 0.9999 0.0113\nv -0.000106 -0.054844 0.119958\nvn -1.3961e-18 0.9999 0.0114\nv -0.00022 -0.054826 0.118329\nvn -0.0003 0.9999 0.0111\nv -0.004043 -0.054799 0.122229\nvn 0.0235 0.9997 0.0052\nv -0.00231 -0.054844 0.122961\nvn 0.0246 0.9997 0.0037\nv -0.004002 -0.054798 0.121695\nvn 0.0262 0.9997 0.0016\nv 0.002477 -0.05481 0.125539\nvn -0.0288 0.9995 -0.0132\nv 0.00324 -0.054797 0.124805\nvn -0.0286 0.9995 -0.0134\nv 0.002092 -0.054844 0.123783\nvn -0.0284 0.9995 -0.0122\nv -0.002609 -0.054832 0.125374\nvn 7.10295e-19 1 -0.0058\nv -0.001539 -0.054844 0.123411\nvn 6.36816e-19 1 -0.0052\nv -0.002131 -0.054844 0.123541\nvn -0.0015 1 -0.0067\nv 0.000679 -0.054844 0.121457\nvn 0 1 0\nv 0.002255 -0.054844 0.120813\nvn -0.005 1 0.0019\nv 0.000565 -0.054844 0.120549\nvn -0.0005 1 0.0065\nv -0.002446 -0.054844 0.121154\nvn 0.029 0.9996 -0.0022\nv -0.003835 -0.054794 0.12103\nvn 0.0341 0.9993 0.016\nv -0.002446 -0.054844 0.121154\nvn 0.0341 0.9993 0.0143\nv -0.003233 -0.054796 0.119865\nvn 0.0284 0.9994 0.0198\nv -0.004002 -0.054798 0.121695\nvn 0.0344 0.9993 0.0133\nv 0.002635 -0.054844 0.121729\nvn 0 1 0\nv 0.002502 -0.054828 0.119221\nvn -0.0066 1 0.0036\nv 0.003833 -0.054796 0.123652\nvn -0.0283 0.9995 -0.0132\nv 0.003998 -0.054799 0.122994\nvn -0.0283 0.9995 -0.0116\nv 0.002092 -0.054844 0.123783\nvn -0.0204 0.9998 0.0077\nv 0.003998 -0.054799 0.122994\nvn -0.0204 0.9998 0.0077\nv 0.001878 -0.054844 0.123216\nvn -0.0204 0.9998 0.0077\nv 0.003199 -0.054828 0.119934\nvn -0.0091 0.9999 0.0089\nv 0.001878 -0.054844 0.123216\nvn -0.0224 0.9997 -0.0114\nv 0.003998 -0.054799 0.122994\nvn -0.0224 0.9997 -0.0114\nv 0.002635 -0.054844 0.121729\nvn -0.0224 0.9997 -0.0114\nv 0.003998 -0.054799 0.122994\nvn -0.0078 0.9996 -0.027\nv 0.004001 -0.054823 0.122101\nvn -0.0078 0.9996 -0.027\nv 0.002635 -0.054844 0.121729\nvn -0.0078 0.9996 -0.027\nv -0.000788 -0.054844 0.124934\nvn 0.0009 1 -0.0005\nv -0.001735 -0.054782 0.126018\nvn -0.0093 0.9979 -0.0647\nv -0.000788 -0.054844 0.124934\nvn -0.0093 0.9979 -0.0647\nv -0.002609 -0.054832 0.125374\nvn -0.0093 0.9979 -0.0647\nv -0.000873 -0.054793 0.126311\nvn 0.0243 0.9991 -0.0354\nv -0.000788 -0.054844 0.124934\nvn 0.0243 0.9991 -0.0354\nv -0.001735 -0.054782 0.126018\nvn 0.0243 0.9991 -0.0354\nv 0.002635 -0.054844 0.121729\nvn -0.0337 0.9993 0.014\nv 0.003916 -0.054794 0.121261\nvn -0.0337 0.9993 0.014\nv 0.002255 -0.054844 0.120813\nvn -0.0337 0.9993 0.014\nv 0.002255 -0.054844 0.120813\nvn -0.0271 0.9996 -0.0105\nv 0.003916 -0.054794 0.121261\nvn -0.0271 0.9996 -0.0105\nv 0.003199 -0.054828 0.119934\nvn -0.0271 0.9996 -0.0105\nv -0.001853 -0.054844 0.120364\nvn 0.0292 0.9995 0.0152\nv -0.002457 -0.054808 0.119126\nvn 0.0294 0.9995 0.0146\nv 0.002635 -0.054844 0.121729\nvn -0.0252 0.999 0.037\nv 0.004001 -0.054823 0.122101\nvn -0.0252 0.999 0.037\nv 0.003916 -0.054794 0.121261\nvn -0.0252 0.999 0.037\nv -0.00231 -0.054844 0.122961\nvn 0 1 0\nv -0.001055 -0.054844 0.122238\nvn 0 1 0\nv -0.002446 -0.054844 0.121154\nvn 0 1 0\nv -0.001718 -0.054844 0.12283\nvn 0 1 0\nv -0.000873 -0.054793 0.126311\nvn 0.0045 0.9993 -0.0366\nv 0.000194 -0.054844 0.125053\nvn 0.0045 0.9993 -0.0366\nv -0.000788 -0.054844 0.124934\nvn 0.0045 0.9993 -0.0366\nv 0.00022 -0.054825 0.126354\nvn 0.0299 0.9994 -0.0151\nv 0.000194 -0.054844 0.125053\nvn 0.0299 0.9994 -0.0151\nv -0.000873 -0.054793 0.126311\nvn 0.0299 0.9994 -0.0151\nv -0.00064 -0.054844 0.123254\nvn 0 1 0\nv -0.001853 -0.054844 0.120364\nvn 0.0062 0.9997 0.0256\nv -0.001586 -0.054801 0.118609\nvn 0.0063 0.9997 0.0256\nv -0.002457 -0.054808 0.119126\nvn 0.0067 0.9996 0.0256\nv 0.00022 -0.054825 0.126354\nvn -0.001 0.9999 -0.0145\nv 0.001485 -0.054828 0.126058\nvn -0.001 0.9999 -0.0145\nv 0.000194 -0.054844 0.125053\nvn -0.001 0.9999 -0.0145\nv -0.000438 -0.054844 0.121359\nvn 0 1 0\nv -0.000106 -0.054844 0.119958\nvn 0 1 0\nv -0.001853 -0.054844 0.120364\nvn 0 1 0\nv -3.9e-05 -0.054844 0.120566\nvn 0 1 0\nv -0.000106 -0.054844 0.119958\nvn 0.0059 0.9997 0.0255\nv -0.001586 -0.054801 0.118609\nvn 0.0204 0.9997 0.0097\nv -0.000106 -0.054844 0.119958\nvn 0.0204 0.9997 0.0097\nv -0.00022 -0.054826 0.118329\nvn 0.0204 0.9997 0.0097\nv 0.000498 -0.054844 0.119942\nvn 0.8508 0.013 -0.5254\nv 0.000418 -0.050759 0.119913\nvn 0.8508 0.013 -0.5254\nv 0.000614 -0.050709 0.120231\nvn 0.8508 0.013 -0.5254\nv 0.000565 -0.054844 0.120549\nvn 0.9939 -0.0201 -0.1086\nv 0.000498 -0.054844 0.119942\nvn 0.9939 -0.0201 -0.1086\nv 0.000614 -0.050709 0.120231\nvn 0.9939 -0.0201 -0.1086\nv 0.000565 -0.054844 0.120549\nvn 0.894 0.0239 0.4475\nv 0.000614 -0.050709 0.120231\nvn 0.894 0.0239 0.4475\nv 0.000433 -0.050783 0.120596\nvn 0.894 0.0239 0.4475\nv 0.000565 -0.054844 0.120549\nvn -0.0044 -0.0117 0.9999\nv 0.000433 -0.050783 0.120596\nvn -0.0044 -0.0117 0.9999\nv 4.1e-05 -0.050759 0.120595\nvn -0.0044 -0.0117 0.9999\nv -3.9e-05 -0.054844 0.120566\nvn 0.028 -0.0075 0.9996\nv 0.000565 -0.054844 0.120549\nvn 0.028 -0.0075 0.9996\nv 4.1e-05 -0.050759 0.120595\nvn 0.028 -0.0075 0.9996\nv 0.000418 -0.050759 0.119913\nvn 0.0789 0.6296 -0.7729\nv 5.8e-05 -0.05072 0.119908\nvn 0.0789 0.6296 -0.7729\nv 0.000163 -0.050517 0.120084\nvn 0.0789 0.6296 -0.7729\nv 0.000418 -0.050759 0.119913\nvn 0.3253 0.7503 -0.5755\nv 0.000163 -0.050517 0.120084\nvn 0.3253 0.7503 -0.5755\nv 0.000383 -0.050514 0.120213\nvn 0.3253 0.7503 -0.5755\nv 0.000614 -0.050709 0.120231\nvn 0.5919 0.6568 -0.4673\nv 0.000418 -0.050759 0.119913\nvn 0.5919 0.6568 -0.4673\nv 0.000383 -0.050514 0.120213\nvn 0.5919 0.6568 -0.4673\nv 0.000614 -0.050709 0.120231\nvn 0.5984 0.7366 0.3151\nv 0.000383 -0.050514 0.120213\nvn 0.5984 0.7366 0.3151\nv 0.0003 -0.050577 0.120518\nvn 0.5984 0.7366 0.3151\nv 0.0003 -0.050577 0.120518\nvn 0.6628 0.5992 0.4491\nv 0.000433 -0.050783 0.120596\nvn 0.6628 0.5992 0.4491\nv 0.000614 -0.050709 0.120231\nvn 0.6628 0.5992 0.4491\nv 0.000433 -0.050783 0.120596\nvn 0.0188 0.3656 0.9306\nv 0.0003 -0.050577 0.120518\nvn 0.0188 0.3656 0.9306\nv 4.1e-05 -0.050759 0.120595\nvn 0.0188 0.3656 0.9306\nv 0.0003 -0.050577 0.120518\nvn 0.1469 0.9599 0.2389\nv 0.000383 -0.050514 0.120213\nvn 0.1469 0.9599 0.2389\nv 0.000123 -0.050495 0.120298\nvn 0.1469 0.9599 0.2389\nv 0.000123 -0.050495 0.120298\nvn 0.0399 0.9947 -0.095\nv 0.000383 -0.050514 0.120213\nvn 0.0399 0.9947 -0.095\nv 0.000163 -0.050517 0.120084\nvn 0.0399 0.9947 -0.095\nv 0.002092 -0.054844 0.123783\nvn 0.887 -0.0219 -0.4613\nv 0.001933 -0.050731 0.123283\nvn 0.887 -0.0219 -0.4613\nv 0.002054 -0.050698 0.123515\nvn 0.887 -0.0219 -0.4613\nv 0.002092 -0.054844 0.123783\nvn 0.936 -0.0067 -0.352\nv 0.001878 -0.054844 0.123216\nvn 0.936 -0.0067 -0.352\nv 0.001933 -0.050731 0.123283\nvn 0.936 -0.0067 -0.352\nv 0.002092 -0.054844 0.123783\nvn 0.9868 0.0193 0.1606\nv 0.002054 -0.050698 0.123515\nvn 0.9868 0.0193 0.1606\nv 0.002017 -0.050658 0.123741\nvn 0.9868 0.0193 0.1606\nv 0.002092 -0.054844 0.123783\nvn 0.7197 0.02 0.694\nv 0.002017 -0.050658 0.123741\nvn 0.7197 0.02 0.694\nv 0.001809 -0.050758 0.123958\nvn 0.7197 0.02 0.694\nv 0.001509 -0.054844 0.123952\nvn 0.2782 -0.0219 0.9603\nv 0.002092 -0.054844 0.123783\nvn 0.2782 -0.0219 0.9603\nv 0.001809 -0.050758 0.123958\nvn 0.2782 -0.0219 0.9603\nv 0.001509 -0.054844 0.123952\nvn -0.2003 0.0132 0.9796\nv 0.001809 -0.050758 0.123958\nvn -0.2003 0.0132 0.9796\nv 0.001454 -0.050731 0.123886\nvn -0.2003 0.0132 0.9796\nv 0.001809 -0.050758 0.123958\nvn 0.3226 0.7049 0.6317\nv 0.002017 -0.050658 0.123741\nvn 0.3226 0.7049 0.6317\nv 0.001666 -0.050533 0.12378\nvn 0.3226 0.7049 0.6317\nv 0.001666 -0.050533 0.12378\nvn -0.1247 0.5647 0.8158\nv 0.001454 -0.050731 0.123886\nvn -0.1247 0.5647 0.8158\nv 0.001809 -0.050758 0.123958\nvn -0.1247 0.5647 0.8158\nv 0.001666 -0.050533 0.12378\nvn 0.3496 0.9078 0.2316\nv 0.002017 -0.050658 0.123741\nvn 0.3496 0.9078 0.2316\nv 0.001765 -0.050493 0.123474\nvn 0.3496 0.9078 0.2316\nv 0.001666 -0.050533 0.12378\nvn -0.5594 0.7645 0.3203\nv 0.00131 -0.050705 0.123569\nvn -0.5594 0.7645 0.3203\nv 0.001454 -0.050731 0.123886\nvn -0.5594 0.7645 0.3203\nv 0.001514 -0.050525 0.123486\nvn -0.5552 0.7733 0.3062\nv 0.00131 -0.050705 0.123569\nvn -0.5552 0.7733 0.3062\nv 0.001666 -0.050533 0.12378\nvn -0.5552 0.7733 0.3062\nv 0.001765 -0.050493 0.123474\nvn -0.1223 0.9885 0.0884\nv 0.001514 -0.050525 0.123486\nvn -0.1223 0.9885 0.0884\nv 0.001666 -0.050533 0.12378\nvn -0.1223 0.9885 0.0884\nv -0.001718 -0.054844 0.12283\nvn 0.4594 0.0179 -0.888\nv -0.001931 -0.050721 0.122803\nvn 0.4594 0.0179 -0.888\nv -0.001604 -0.050754 0.122972\nvn 0.4594 0.0179 -0.888\nv -0.001539 -0.054844 0.123411\nvn 0.977 -0.0073 -0.2131\nv -0.001604 -0.050754 0.122972\nvn 0.977 -0.0073 -0.2131\nv -0.001558 -0.050696 0.123181\nvn 0.977 -0.0073 -0.2131\nv -0.001539 -0.054844 0.123411\nvn 0.9555 -0.0164 -0.2945\nv -0.001718 -0.054844 0.12283\nvn 0.9555 -0.0164 -0.2945\nv -0.001604 -0.050754 0.122972\nvn 0.9555 -0.0164 -0.2945\nv -0.001539 -0.054844 0.123411\nvn 0.9592 0.02 0.282\nv -0.001558 -0.050696 0.123181\nvn 0.9592 0.02 0.282\nv -0.001632 -0.050754 0.123439\nvn 0.9592 0.02 0.282\nv -0.001539 -0.054844 0.123411\nvn 0.4133 0.0031 0.9106\nv -0.001632 -0.050754 0.123439\nvn 0.4133 0.0031 0.9106\nv -0.001917 -0.050721 0.123568\nvn 0.4133 0.0031 0.9106\nv -0.002131 -0.054844 0.123541\nvn 0.2148 -0.0177 0.9765\nv -0.001539 -0.054844 0.123411\nvn 0.2148 -0.0177 0.9765\nv -0.001917 -0.050721 0.123568\nvn 0.2148 -0.0177 0.9765\nv -0.002216 -0.050754 0.122932\nvn -0.5389 0.7754 -0.3291\nv -0.002291 -0.050696 0.12319\nvn -0.5389 0.7754 -0.3291\nv -0.002044 -0.05049 0.12327\nvn -0.5389 0.7754 -0.3291\nv -0.002216 -0.050754 0.122932\nvn -0.313 0.8201 -0.4791\nv -0.002044 -0.05049 0.12327\nvn -0.313 0.8201 -0.4791\nv -0.001931 -0.050721 0.122803\nvn -0.313 0.8201 -0.4791\nv -0.001802 -0.05049 0.1231\nvn -0.3374 0.8098 -0.48\nv -0.001931 -0.050721 0.122803\nvn -0.3374 0.8098 -0.48\nv -0.002044 -0.05049 0.12327\nvn -0.3374 0.8098 -0.48\nv -0.001802 -0.05049 0.1231\nvn 0.6699 0.6645 -0.3312\nv -0.001558 -0.050696 0.123181\nvn 0.6699 0.6645 -0.3312\nv -0.001604 -0.050754 0.122972\nvn 0.6699 0.6645 -0.3312\nv -0.001931 -0.050721 0.122803\nvn 0.4062 0.6286 -0.6633\nv -0.001802 -0.05049 0.1231\nvn 0.4062 0.6286 -0.6633\nv -0.001604 -0.050754 0.122972\nvn 0.4062 0.6286 -0.6633\nv 0.00111 -0.054844 0.122439\nvn -0.4219 0.0127 -0.9066\nv 0.002635 -0.054844 0.121729\nvn -0.4212 0.011 -0.9069\nv 0.001158 -0.055644 0.122405\nvn -0.4182 0.0042 -0.9084\nv 0.002638 -0.055644 0.121726\nvn -0.4173 0.0024 -0.9088\nv 0.00111 -0.054844 0.122439\nvn -0.7701 -0.0193 -0.6376\nv 0.001158 -0.055644 0.122405\nvn -0.7701 -0.0193 -0.6376\nv 0.00046 -0.055644 0.123247\nvn -0.7701 -0.0193 -0.6376\nv 0.000438 -0.054844 0.123307\nvn -0.7904 0.023 -0.6122\nv 0.00111 -0.054844 0.122439\nvn -0.7904 0.023 -0.6122\nv 0.00046 -0.055644 0.123247\nvn -0.7904 0.023 -0.6122\nv 0.000196 -0.055644 0.125059\nvn -0.9893 -0.0174 -0.1446\nv 0.000438 -0.054844 0.123307\nvn -0.9893 -0.0174 -0.1446\nv 0.00046 -0.055644 0.123247\nvn -0.9893 -0.0174 -0.1446\nv 0.000194 -0.054844 0.125053\nvn -0.9904 -0.0032 -0.1383\nv 0.000438 -0.054844 0.123307\nvn -0.9904 -0.0032 -0.1383\nv 0.000196 -0.055644 0.125059\nvn -0.9904 -0.0032 -0.1383\nv -0.000787 -0.055644 0.12493\nvn 0.1303 0.0043 -0.9915\nv -0.000788 -0.054844 0.124934\nvn 0.1303 0.0043 -0.9915\nv 0.000196 -0.055644 0.125059\nvn 0.1303 0.0043 -0.9915\nv -0.000788 -0.054844 0.124934\nvn 0.1207 -0.0077 -0.9927\nv 0.000194 -0.054844 0.125053\nvn 0.1207 -0.0077 -0.9927\nv 0.000196 -0.055644 0.125059\nvn 0.1207 -0.0077 -0.9927\nv -0.00064 -0.054844 0.123254\nvn 0.9962 -0.0048 0.0875\nv -0.000788 -0.054844 0.124934\nvn 0.9962 -0.0038 0.0871\nv -0.000638 -0.055644 0.123188\nvn 0.9963 -0.0004 0.0855\nv -0.000787 -0.055644 0.12493\nvn 0.9964 0.0005 0.0851\nv -0.001055 -0.054844 0.122238\nvn 0.9044 -0.0335 -0.4254\nv -0.000638 -0.055644 0.123188\nvn 0.9044 -0.0335 -0.4254\nv -0.001105 -0.055644 0.122195\nvn 0.9044 -0.0335 -0.4254\nv -0.001055 -0.054844 0.122238\nvn 0.9251 0.0336 -0.3781\nv -0.00064 -0.054844 0.123254\nvn 0.9251 0.0336 -0.3781\nv -0.000638 -0.055644 0.123188\nvn 0.9251 0.0336 -0.3781\nv -0.002442 -0.055644 0.121167\nvn 0.6095 0.0048 -0.7928\nv -0.001055 -0.054844 0.122238\nvn 0.6095 0.0048 -0.7928\nv -0.001105 -0.055644 0.122195\nvn 0.6095 0.0048 -0.7928\nv -0.002446 -0.054844 0.121154\nvn 0.6149 -0.0103 -0.7885\nv -0.001055 -0.054844 0.122238\nvn 0.6149 -0.0103 -0.7885\nv -0.002442 -0.055644 0.121167\nvn 0.6149 -0.0103 -0.7885\nv -0.001863 -0.055644 0.12036\nvn 0.8125 0.014 0.5827\nv -0.002446 -0.054844 0.121154\nvn 0.8125 0.014 0.5827\nv -0.002442 -0.055644 0.121167\nvn 0.8125 0.014 0.5827\nv -0.001853 -0.054844 0.120364\nvn 0.7993 -0.0135 0.6007\nv -0.002446 -0.054844 0.121154\nvn 0.7993 -0.0135 0.6007\nv -0.001863 -0.055644 0.12036\nvn 0.7993 -0.0135 0.6007\nv -0.000438 -0.054844 0.121359\nvn -0.5755 0.0034 0.8178\nv -0.001863 -0.055644 0.12036\nvn -0.5764 0.0058 0.8172\nv -0.000501 -0.055644 0.121321\nvn -0.5766 0.0064 0.817\nv -0.001853 -0.054844 0.120364\nvn -0.5752 0.0027 0.818\nv -0.000438 -0.054844 0.121359\nvn -0.14 -0.0362 0.9895\nv -0.000501 -0.055644 0.121321\nvn -0.14 -0.0362 0.9895\nv 0.000617 -0.055644 0.121479\nvn -0.14 -0.0362 0.9895\nv 0.000679 -0.054844 0.121457\nvn -0.0875 0.034 0.9956\nv -0.000438 -0.054844 0.121359\nvn -0.0875 0.034 0.9956\nv 0.000617 -0.055644 0.121479\nvn -0.0875 0.034 0.9956\nv 0.002255 -0.054844 0.120813\nvn 0.378 -0.0029 0.9258\nv 0.000617 -0.055644 0.121479\nvn 0.376 0.0019 0.9266\nv 0.002251 -0.055644 0.120817\nvn 0.3755 0.0031 0.9268\nv 0.000679 -0.054844 0.121457\nvn 0.3785 -0.0042 0.9256\nv 0.002638 -0.055644 0.121726\nvn -0.92 0.0074 0.3918\nv 0.002255 -0.054844 0.120813\nvn -0.92 0.0074 0.3918\nv 0.002251 -0.055644 0.120817\nvn -0.92 0.0074 0.3918\nv 0.002635 -0.054844 0.121729\nvn -0.9238 -0.0048 0.3827\nv 0.002255 -0.054844 0.120813\nvn -0.9238 -0.0048 0.3827\nv 0.002638 -0.055644 0.121726\nvn -0.9238 -0.0048 0.3827\nv -3.9e-05 -0.054844 0.120566\nvn -0.8508 0.013 0.5254\nv 4.1e-05 -0.050759 0.120595\nvn -0.8508 0.013 0.5254\nv -0.000154 -0.050709 0.120277\nvn -0.8508 0.013 0.5254\nv -0.000106 -0.054844 0.119958\nvn -0.9939 -0.0201 0.1086\nv -3.9e-05 -0.054844 0.120566\nvn -0.9939 -0.0201 0.1086\nv -0.000154 -0.050709 0.120277\nvn -0.9939 -0.0201 0.1086\nv -0.000106 -0.054844 0.119958\nvn -0.8664 0.0282 -0.4986\nv -0.000154 -0.050709 0.120277\nvn -0.8664 0.0282 -0.4986\nv 5.8e-05 -0.05072 0.119908\nvn -0.8664 0.0282 -0.4986\nv -0.000106 -0.054844 0.119958\nvn 0.0125 -0.0127 -0.9998\nv 5.8e-05 -0.05072 0.119908\nvn 0.0125 -0.0127 -0.9998\nv 0.000418 -0.050759 0.119913\nvn 0.0125 -0.0127 -0.9998\nv 0.000498 -0.054844 0.119942\nvn -0.028 -0.0075 -0.9996\nv -0.000106 -0.054844 0.119958\nvn -0.028 -0.0075 -0.9996\nv 0.000418 -0.050759 0.119913\nvn -0.028 -0.0075 -0.9996\nv 0.001296 -0.054844 0.123385\nvn -0.9096 -0.0154 0.4151\nv 0.001454 -0.050731 0.123886\nvn -0.9096 -0.0154 0.4151\nv 0.00131 -0.050705 0.123569\nvn -0.9096 -0.0154 0.4151\nv 0.001296 -0.054844 0.123385\nvn -0.936 -0.0067 0.3519\nv 0.001509 -0.054844 0.123952\nvn -0.936 -0.0067 0.3519\nv 0.001454 -0.050731 0.123886\nvn -0.936 -0.0067 0.3519\nv 0.001296 -0.054844 0.123385\nvn -0.7987 0.0294 -0.6011\nv 0.00131 -0.050705 0.123569\nvn -0.7987 0.0294 -0.6011\nv 0.001578 -0.050758 0.12321\nvn -0.7987 0.0294 -0.6011\nv 0.001878 -0.054844 0.123216\nvn -0.2782 -0.022 -0.9603\nv 0.001296 -0.054844 0.123385\nvn -0.2782 -0.022 -0.9603\nv 0.001578 -0.050758 0.12321\nvn -0.2782 -0.022 -0.9603\nv 0.001878 -0.054844 0.123216\nvn 0.2003 0.0132 -0.9796\nv 0.001578 -0.050758 0.12321\nvn 0.2003 0.0132 -0.9796\nv 0.001933 -0.050731 0.123283\nvn 0.2003 0.0132 -0.9796\nv -0.002131 -0.054844 0.123541\nvn -0.4595 0.0179 0.888\nv -0.001917 -0.050721 0.123568\nvn -0.4595 0.0179 0.888\nv -0.002245 -0.050754 0.1234\nvn -0.4595 0.0179 0.888\nv -0.00231 -0.054844 0.122961\nvn -0.977 -0.0073 0.2133\nv -0.002245 -0.050754 0.1234\nvn -0.977 -0.0073 0.2133\nv -0.002291 -0.050696 0.12319\nvn -0.977 -0.0073 0.2133\nv -0.00231 -0.054844 0.122961\nvn -0.9555 -0.0164 0.2947\nv -0.002131 -0.054844 0.123541\nvn -0.9555 -0.0164 0.2947\nv -0.002245 -0.050754 0.1234\nvn -0.9555 -0.0164 0.2947\nv -0.00231 -0.054844 0.122961\nvn -0.9592 0.02 -0.2819\nv -0.002291 -0.050696 0.12319\nvn -0.9592 0.02 -0.2819\nv -0.002216 -0.050754 0.122932\nvn -0.9592 0.02 -0.2819\nv -0.00231 -0.054844 0.122961\nvn -0.4133 0.0031 -0.9106\nv -0.002216 -0.050754 0.122932\nvn -0.4133 0.0031 -0.9106\nv -0.001931 -0.050721 0.122803\nvn -0.4133 0.0031 -0.9106\nv -0.001718 -0.054844 0.12283\nvn -0.2152 -0.0176 -0.9764\nv -0.00231 -0.054844 0.122961\nvn -0.2152 -0.0176 -0.9764\nv -0.001931 -0.050721 0.122803\nvn -0.2152 -0.0176 -0.9764\nv -0.000638 -0.055644 0.123188\nvn 0 1 0\nv -0.000534 -0.055644 0.122616\nvn 0 1 0\nv -0.001105 -0.055644 0.122195\nvn 0 1 0\nv 0.001158 -0.055644 0.122405\nvn 0 1 0\nv 0.002251 -0.055644 0.120817\nvn 0 1 0\nv 0.000617 -0.055644 0.121479\nvn 0 1 0\nv 0.002638 -0.055644 0.121726\nvn 0 1 0\nv 0.001158 -0.055644 0.122405\nvn 0.0823 0.9954 -0.048\nv 0.000617 -0.055644 0.121479\nvn 0.0823 0.9954 -0.048\nv 0.000514 -0.055607 0.122056\nvn 0.0823 0.9954 -0.048\nv -0.001863 -0.055644 0.12036\nvn 0 1 0\nv -0.002442 -0.055644 0.121167\nvn 0 1 0\nv -0.000501 -0.055644 0.121321\nvn 0 1 0\nv -0.000182 -0.05561 0.121617\nvn 0.0186 0.9911 -0.1316\nv 0.000617 -0.055644 0.121479\nvn 0.0186 0.9911 -0.1316\nv -0.000501 -0.055644 0.121321\nvn 0.0186 0.9911 -0.1316\nv -0.000182 -0.05561 0.121617\nvn 0.0906 0.9741 -0.2071\nv -0.000501 -0.055644 0.121321\nvn 0.0906 0.9741 -0.2071\nv -0.000421 -0.055594 0.121591\nvn 0.0906 0.9741 -0.2071\nv 0.000422 -0.055569 0.122891\nvn -0.0741 0.9972 -0.0135\nv -0.000534 -0.055644 0.122616\nvn -0.0741 0.9972 -0.0135\nv -0.000638 -0.055644 0.123188\nvn -0.0741 0.9972 -0.0135\nv 0.00046 -0.055644 0.123247\nvn -0.0111 0.9784 0.2063\nv 0.000422 -0.055569 0.122891\nvn -0.0111 0.9784 0.2063\nv -0.000638 -0.055644 0.123188\nvn -0.0111 0.9784 0.2063\nv -0.001105 -0.055644 0.122195\nvn -0.1826 0.975 -0.1263\nv -0.000421 -0.055594 0.121591\nvn -0.1826 0.975 -0.1263\nv -0.000501 -0.055644 0.121321\nvn -0.1826 0.975 -0.1263\nv -0.000209 -0.055644 0.122194\nvn 0.0519 0.9968 0.0601\nv 0.000617 -0.055644 0.121479\nvn 0.0519 0.9968 0.0601\nv -0.000182 -0.05561 0.121617\nvn 0.0519 0.9968 0.0601\nv 0.000196 -0.055644 0.125059\nvn 0 1 0\nv 0.00046 -0.055644 0.123247\nvn 0 1 0\nv -0.000787 -0.055644 0.12493\nvn 0 1 0\nv -0.000534 -0.055644 0.122616\nvn -0.0332 0.9984 0.045\nv -0.000421 -0.055594 0.121591\nvn -0.0332 0.9984 0.045\nv -0.001105 -0.055644 0.122195\nvn -0.0332 0.9984 0.045\nv 0.000514 -0.055607 0.122056\nvn 0.7596 0.6481 0.0539\nv 0.000422 -0.055569 0.122891\nvn 0.7596 0.6481 0.0539\nv 0.00046 -0.055644 0.123247\nvn 0.7596 0.6481 0.0539\nv 0.000514 -0.055607 0.122056\nvn 0.0389 0.9987 0.0322\nv 0.00046 -0.055644 0.123247\nvn 0.0389 0.9987 0.0322\nv 0.001158 -0.055644 0.122405\nvn 0.0389 0.9987 0.0322\nv 0.000514 -0.055607 0.122056\nvn -0.0642 0.9952 -0.0742\nv 0.000617 -0.055644 0.121479\nvn -0.0642 0.9952 -0.0742\nv -0.000209 -0.055644 0.122194\nvn -0.0642 0.9952 -0.0742\nv 4.1e-05 -0.050759 0.120595\nvn -0.3563 0.7451 0.5637\nv 0.0003 -0.050577 0.120518\nvn -0.3563 0.7451 0.5637\nv 0.000123 -0.050495 0.120298\nvn -0.3563 0.7451 0.5637\nv -0.000154 -0.050709 0.120277\nvn -0.565 0.6879 0.4556\nv 4.1e-05 -0.050759 0.120595\nvn -0.565 0.6879 0.4556\nv 0.000123 -0.050495 0.120298\nvn -0.565 0.6879 0.4556\nv -0.000154 -0.050709 0.120277\nvn -0.5904 0.7834 -0.1943\nv 0.000123 -0.050495 0.120298\nvn -0.5904 0.7834 -0.1943\nv 0.000163 -0.050517 0.120084\nvn -0.5904 0.7834 -0.1943\nv 0.000163 -0.050517 0.120084\nvn -0.6368 0.6675 -0.3859\nv 5.8e-05 -0.05072 0.119908\nvn -0.6368 0.6675 -0.3859\nv -0.000154 -0.050709 0.120277\nvn -0.6368 0.6675 -0.3859\nv 0.001514 -0.050525 0.123486\nvn -0.6618 0.49 -0.5674\nv 0.001578 -0.050758 0.12321\nvn -0.6618 0.49 -0.5674\nv 0.00131 -0.050705 0.123569\nvn -0.6618 0.49 -0.5674\nv 0.001578 -0.050758 0.12321\nvn -0.126 0.7433 -0.657\nv 0.001514 -0.050525 0.123486\nvn -0.126 0.7433 -0.657\nv 0.001765 -0.050493 0.123474\nvn -0.126 0.7433 -0.657\nv 0.001765 -0.050493 0.123474\nvn 0.1015 0.6651 -0.7398\nv 0.001933 -0.050731 0.123283\nvn 0.1015 0.6651 -0.7398\nv 0.001578 -0.050758 0.12321\nvn 0.1015 0.6651 -0.7398\nv 0.001765 -0.050493 0.123474\nvn 0.5662 0.72 -0.4012\nv 0.002054 -0.050698 0.123515\nvn 0.5662 0.72 -0.4012\nv 0.001933 -0.050731 0.123283\nvn 0.5662 0.72 -0.4012\nv 0.002054 -0.050698 0.123515\nvn 0.5819 0.8119 -0.0471\nv 0.001765 -0.050493 0.123474\nvn 0.5819 0.8119 -0.0471\nv 0.002017 -0.050658 0.123741\nvn 0.5819 0.8119 -0.0471\nv -0.001632 -0.050754 0.123439\nvn 0.3134 0.8192 0.4802\nv -0.001802 -0.05049 0.1231\nvn 0.3134 0.8192 0.4802\nv -0.001917 -0.050721 0.123568\nvn 0.3134 0.8192 0.4802\nv -0.001632 -0.050754 0.123439\nvn 0.5425 0.7727 0.3296\nv -0.001558 -0.050696 0.123181\nvn 0.5425 0.7727 0.3296\nv -0.001802 -0.05049 0.1231\nvn 0.5425 0.7727 0.3296\nv -0.002044 -0.05049 0.12327\nvn 0.3383 0.8087 0.4812\nv -0.001917 -0.050721 0.123568\nvn 0.3383 0.8087 0.4812\nv -0.001802 -0.05049 0.1231\nvn 0.3383 0.8087 0.4812\nv -0.002044 -0.05049 0.12327\nvn -0.6649 0.6693 0.3315\nv -0.002291 -0.050696 0.12319\nvn -0.6649 0.6693 0.3315\nv -0.002245 -0.050754 0.1234\nvn -0.6649 0.6693 0.3315\nv -0.001917 -0.050721 0.123568\nvn -0.4051 0.6325 0.6602\nv -0.002044 -0.05049 0.12327\nvn -0.4051 0.6325 0.6602\nv -0.002245 -0.050754 0.1234\nvn -0.4051 0.6325 0.6602\nv -0.000427 -0.055444 0.122375\nvn -0.9162 0.3924 -0.0819\nv -0.000421 -0.055594 0.121591\nvn -0.9162 0.3924 -0.0819\nv -0.000534 -0.055644 0.122616\nvn -0.9162 0.3924 -0.0819\nv 0.000169 -0.055594 0.122585\nvn -0.0274 0.7763 0.6298\nv -0.000427 -0.055444 0.122375\nvn -0.0274 0.7763 0.6298\nv -0.000534 -0.055644 0.122616\nvn -0.0274 0.7763 0.6298\nv -0.000427 -0.055444 0.122375\nvn 0.1312 0.7407 -0.6589\nv 0.000208 -0.055615 0.122309\nvn 0.1312 0.7407 -0.6589\nv -0.000209 -0.055644 0.122194\nvn 0.1312 0.7407 -0.6589\nv -0.000182 -0.05561 0.121617\nvn 0.7079 0.7024 0.0741\nv -0.000427 -0.055444 0.122375\nvn 0.7079 0.7024 0.0741\nv -0.000209 -0.055644 0.122194\nvn 0.7079 0.7024 0.0741\nv 0.000422 -0.055569 0.122891\nvn -0.2728 -0.0405 0.9612\nv -0.000535 -0.055444 0.122625\nvn -0.2728 -0.0405 0.9612\nv -0.000534 -0.055644 0.122616\nvn -0.2728 -0.0405 0.9612\nv -0.000171 -0.055444 0.122061\nvn -0.1329 -0.53 -0.8375\nv 0.000514 -0.055607 0.122056\nvn -0.1329 -0.53 -0.8375\nv -0.000209 -0.055644 0.122194\nvn -0.1329 -0.53 -0.8375\nv 0.000236 -0.055444 0.122387\nvn -0.5273 0.5385 0.6572\nv -0.000171 -0.055444 0.122061\nvn -0.5273 0.5385 0.6572\nv -0.000209 -0.055644 0.122194\nvn -0.5273 0.5385 0.6572\nv 0.000236 -0.055444 0.122387\nvn -0.2222 -0.3767 0.8993\nv -0.000209 -0.055644 0.122194\nvn -0.2222 -0.3767 0.8993\nv 0.000208 -0.055615 0.122309\nvn -0.2222 -0.3767 0.8993\nv 0.000236 -0.055444 0.122387\nvn -0.9618 0.2259 -0.1548\nv 0.000208 -0.055615 0.122309\nvn -0.9618 0.2259 -0.1548\nv 0.000169 -0.055594 0.122585\nvn -0.9618 0.2259 -0.1548\nv -0.000535 -0.055444 0.122625\nvn -0.1948 -0.7496 -0.6326\nv 0.000236 -0.055444 0.122387\nvn -0.1948 -0.7496 -0.6326\nv 0.000169 -0.055594 0.122585\nvn -0.1948 -0.7496 -0.6326\nv -0.000535 -0.055444 0.122625\nvn -0.0469 0.0406 -0.9981\nv 0.000169 -0.055594 0.122585\nvn -0.0469 0.0406 -0.9981\nv -0.000534 -0.055644 0.122616\nvn -0.0469 0.0406 -0.9981\nv -0.000427 -0.055444 0.122375\nvn 0.0886 0.9785 -0.1863\nv -0.000182 -0.05561 0.121617\nvn 0.0886 0.9785 -0.1863\nv -0.000421 -0.055594 0.121591\nvn 0.0886 0.9785 -0.1863\nv 0.000169 -0.055594 0.122585\nvn 0.2564 0.9658 -0.0381\nv 0.000208 -0.055615 0.122309\nvn 0.2564 0.9658 -0.0381\nv -0.000427 -0.055444 0.122375\nvn 0.2564 0.9658 -0.0381\nv -0.000535 -0.055444 0.122625\nvn 0.0668 0.9739 0.217\nv 0.000422 -0.055569 0.122891\nvn 0.0668 0.9739 0.217\nv 0.000236 -0.055444 0.122387\nvn 0.0668 0.9739 0.217\nv 0.000236 -0.055444 0.122387\nvn 0.2211 0.9355 -0.2756\nv 0.000514 -0.055607 0.122056\nvn 0.2211 0.9355 -0.2756\nv -0.000171 -0.055444 0.122061\nvn 0.2211 0.9355 -0.2756\nv 0.000422 -0.055569 0.122891\nvn 0.5228 0.8522 0.0184\nv 0.000514 -0.055607 0.122056\nvn 0.5228 0.8522 0.0184\nv 0.000236 -0.055444 0.122387\nvn 0.5228 0.8522 0.0184\nv -0.001418 -0.093994 0.122234\nvn -0.476 -0.3357 0.8129\nv -0.000865 -0.09508 0.12211\nvn -0.476 -0.3357 0.8129\nv -0.000405 -0.093987 0.12283\nvn -0.476 -0.3357 0.8129\nv -0.001943 -0.096337 0.119796\nvn -0.9237 -0.2668 0.2749\nv -0.001942 -0.099056 0.117162\nvn -0.9237 -0.2668 0.2749\nv -0.001683 -0.099203 0.117888\nvn -0.9237 -0.2668 0.2749\nv -0.001184 -0.096991 0.116235\nvn -0.3545 0.7653 -0.5372\nv -0.000431 -0.098325 0.113837\nvn -0.3545 0.7653 -0.5372\nv -0.000959 -0.098486 0.113957\nvn -0.3545 0.7653 -0.5372\nv -0.001123 -0.096737 0.120899\nvn -0.3565 -0.5991 0.7169\nv -0.000983 -0.09901 0.119069\nvn -0.3565 -0.5991 0.7169\nv -4e-05 -0.097982 0.120397\nvn -0.3565 -0.5991 0.7169\nv -0.00014 -0.097306 0.115253\nvn -0.2542 0.809 -0.53\nv -0.000431 -0.098325 0.113837\nvn -0.2542 0.809 -0.53\nv -0.001184 -0.096991 0.116235\nvn -0.2542 0.809 -0.53\nv -0.001998 -0.097345 0.118151\nvn -0.9935 -0.0794 0.0814\nv -0.001942 -0.099056 0.117162\nvn -0.9935 -0.0794 0.0814\nv -0.001943 -0.096337 0.119796\nvn -0.9935 -0.0794 0.0814\nv -0.001123 -0.096737 0.120899\nvn -0.6475 -0.5017 0.5736\nv -0.001647 -0.096985 0.12009\nvn -0.6475 -0.5017 0.5736\nv -0.000983 -0.09901 0.119069\nvn -0.6475 -0.5017 0.5736\nv -0.001123 -0.096737 0.120899\nvn -0.313 -0.5765 0.7547\nv -4e-05 -0.097982 0.120397\nvn -0.313 -0.5765 0.7547\nv -0.000201 -0.096509 0.121455\nvn -0.313 -0.5765 0.7547\nv -0.001184 -0.096991 0.116235\nvn -0.8299 0.4696 -0.3012\nv -0.001506 -0.098209 0.115224\nvn -0.8299 0.4696 -0.3012\nv -0.001794 -0.098573 0.115449\nvn -0.8299 0.4696 -0.3012\nv -0.001184 -0.096991 0.116235\nvn -0.8087 0.4804 -0.3394\nv -0.001794 -0.098573 0.115449\nvn -0.8087 0.4804 -0.3394\nv -0.001883 -0.097691 0.11691\nvn -0.8087 0.4804 -0.3394\nv -0.000865 -0.09508 0.12211\nvn -0.3443 -0.5184 0.7827\nv -0.001123 -0.096737 0.120899\nvn -0.3443 -0.5184 0.7827\nv -0.000201 -0.096509 0.121455\nvn -0.3443 -0.5184 0.7827\nv -7.1e-05 -0.096028 0.116685\nvn -0.3618 0.7042 -0.6109\nv -0.00014 -0.097306 0.115253\nvn -0.3618 0.7042 -0.6109\nv -0.001184 -0.096991 0.116235\nvn -0.3618 0.7042 -0.6109\nv -0.001953 -0.100835 0.111907\nvn -0.9527 0.2842 -0.1077\nv -0.001767 -0.099747 0.113131\nvn -0.9527 0.2842 -0.1077\nv -0.001746 -0.10065 0.110557\nvn -0.9527 0.2842 -0.1077\nv -0.000561 -0.103908 0.108787\nvn -0.0297 -0.9891 0.1444\nv 0.000465 -0.103905 0.109017\nvn -0.0297 -0.9891 0.1444\nv -0.000117 -0.103545 0.111364\nvn -0.0297 -0.9891 0.1444\nv -0.000865 -0.09508 0.12211\nvn -0.1944 -0.4817 0.8545\nv -0.000201 -0.096509 0.121455\nvn -0.1944 -0.4817 0.8545\nv -0.000405 -0.093987 0.12283\nvn -0.1944 -0.4817 0.8545\nv -0.001418 -0.093994 0.122234\nvn -0.6242 -0.3953 0.6739\nv -0.001123 -0.096737 0.120899\nvn -0.6242 -0.3953 0.6739\nv -0.000865 -0.09508 0.12211\nvn -0.6242 -0.3953 0.6739\nv -0.001684 -0.094623 0.118971\nvn -0.9793 0.1529 -0.1328\nv -0.001883 -0.097691 0.11691\nvn -0.9793 0.1529 -0.1328\nv -0.001998 -0.097345 0.118151\nvn -0.9793 0.1529 -0.1328\nv -0.001418 -0.093994 0.122234\nvn -0.7277 -0.3619 0.5826\nv -0.001647 -0.096985 0.12009\nvn -0.7277 -0.3619 0.5826\nv -0.001123 -0.096737 0.120899\nvn -0.7277 -0.3619 0.5826\nv -0.000959 -0.095211 0.117745\nvn -0.2657 0.6432 -0.7181\nv -7.1e-05 -0.096028 0.116685\nvn -0.2657 0.6432 -0.7181\nv -0.001184 -0.096991 0.116235\nvn -0.2657 0.6432 -0.7181\nv -0.000765 -0.103179 0.112191\nvn -0.296 -0.9375 0.1829\nv -0.000561 -0.103908 0.108787\nvn -0.296 -0.9375 0.1829\nv -0.000117 -0.103545 0.111364\nvn -0.296 -0.9375 0.1829\nv -0.001684 -0.094623 0.118971\nvn -0.8093 0.3629 -0.4619\nv -0.001184 -0.096991 0.116235\nvn -0.8093 0.3629 -0.4619\nv -0.001883 -0.097691 0.11691\nvn -0.8093 0.3629 -0.4619\nv -0.001345 -0.103466 0.108766\nvn -0.4877 -0.8592 0.1547\nv -0.000561 -0.103908 0.108787\nvn -0.4877 -0.8592 0.1547\nv -0.000765 -0.103179 0.112191\nvn -0.4877 -0.8592 0.1547\nv -0.000959 -0.095211 0.117745\nvn -0.5473 0.5808 -0.6026\nv -0.001184 -0.096991 0.116235\nvn -0.5473 0.5808 -0.6026\nv -0.001684 -0.094623 0.118971\nvn -0.5473 0.5808 -0.6026\nv -0.001256 -0.10283 0.112309\nvn -0.5457 -0.8223 0.1614\nv -0.001345 -0.103466 0.108766\nvn -0.5457 -0.8223 0.1614\nv -0.000765 -0.103179 0.112191\nvn -0.5457 -0.8223 0.1614\nv -0.001909 -0.093707 0.121493\nvn -0.8479 -0.2645 0.4595\nv -0.001647 -0.096985 0.12009\nvn -0.8479 -0.2645 0.4595\nv -0.001418 -0.093994 0.122234\nvn -0.8479 -0.2645 0.4595\nv -0.002003 -0.093183 0.12108\nvn -0.9973 -0.0431 0.0593\nv -0.001998 -0.097345 0.118151\nvn -0.9973 -0.0431 0.0593\nv -0.001943 -0.096337 0.119796\nvn -0.9973 -0.0431 0.0593\nv -0.001909 -0.093707 0.121493\nvn -0.8938 -0.235 0.382\nv -0.001943 -0.096337 0.119796\nvn -0.8938 -0.235 0.382\nv -0.001647 -0.096985 0.12009\nvn -0.8938 -0.235 0.382\nv -0.001746 -0.102891 0.109449\nvn -0.7271 -0.6723 0.139\nv -0.001345 -0.103466 0.108766\nvn -0.7271 -0.6723 0.139\nv -0.001256 -0.10283 0.112309\nvn -0.7271 -0.6723 0.139\nv -0.002018 -0.101996 0.109743\nvn -0.9468 -0.3129 0.0753\nv -0.001746 -0.102891 0.109449\nvn -0.9468 -0.3129 0.0753\nv -0.001735 -0.102129 0.112746\nvn -0.9468 -0.3129 0.0753\nv -0.000531 -0.094612 0.117965\nvn -0.3845 0.5472 -0.7435\nv -7.1e-05 -0.096028 0.116685\nvn -0.3845 0.5472 -0.7435\nv -0.000959 -0.095211 0.117745\nvn -0.3845 0.5472 -0.7435\nv -0.000531 -0.094612 0.117965\nvn -0.0265 0.6656 -0.7458\nv 0.000439 -0.094626 0.117918\nvn -0.0265 0.6656 -0.7458\nv -7.1e-05 -0.096028 0.116685\nvn -0.0265 0.6656 -0.7458\nv -0.000765 -0.103179 0.112191\nvn -0.1313 -0.9406 0.3132\nv -0.000117 -0.103545 0.111364\nvn -0.1313 -0.9406 0.3132\nv -8.2e-05 -0.102669 0.114007\nvn -0.1313 -0.9406 0.3132\nv -0.002003 -0.093183 0.12108\nvn -0.9885 -0.0727 0.1325\nv -0.001943 -0.096337 0.119796\nvn -0.9885 -0.0727 0.1325\nv -0.001909 -0.093707 0.121493\nvn -0.9885 -0.0727 0.1325\nv -0.001898 -0.092969 0.120353\nvn -0.9894 0.0827 -0.1195\nv -0.001998 -0.097345 0.118151\nvn -0.9894 0.0827 -0.1195\nv -0.002003 -0.093183 0.12108\nvn -0.9894 0.0827 -0.1195\nv -0.001735 -0.102129 0.112746\nvn -0.7718 -0.619 0.1455\nv -0.001746 -0.102891 0.109449\nvn -0.7718 -0.619 0.1455\nv -0.001256 -0.10283 0.112309\nvn -0.7718 -0.619 0.1455\nv -0.001134 -0.091212 0.123496\nvn -0.3446 -0.3035 0.8883\nv -0.000405 -0.093987 0.12283\nvn -0.3446 -0.3035 0.8883\nv -0.000166 -0.091784 0.123676\nvn -0.3446 -0.3035 0.8883\nv -0.000531 -0.094612 0.117965\nvn -0.0345 0.5053 -0.8622\nv -0.000134 -0.092805 0.119008\nvn -0.0345 0.5053 -0.8622\nv 0.000439 -0.094626 0.117918\nvn -0.0345 0.5053 -0.8622\nv -0.001134 -0.091212 0.123496\nvn -0.4786 -0.3216 0.8171\nv -0.001418 -0.093994 0.122234\nvn -0.4786 -0.3216 0.8171\nv -0.000405 -0.093987 0.12283\nvn -0.4786 -0.3216 0.8171\nv -0.001684 -0.094623 0.118971\nvn -0.8862 0.2242 -0.4054\nv -0.001998 -0.097345 0.118151\nvn -0.8862 0.2242 -0.4054\nv -0.001898 -0.092969 0.120353\nvn -0.8862 0.2242 -0.4054\nv -0.001953 -0.100835 0.111907\nvn -0.9873 0.1503 -0.0509\nv -0.001815 -0.101078 0.108505\nvn -0.9873 0.1503 -0.0509\nv -0.002018 -0.101996 0.109743\nvn -0.9873 0.1503 -0.0509\nv -0.000894 -0.09345 0.118848\nvn -0.6905 0.4019 -0.6014\nv -0.000959 -0.095211 0.117745\nvn -0.6905 0.4019 -0.6014\nv -0.001684 -0.094623 0.118971\nvn -0.6905 0.4019 -0.6014\nv -0.001126 -0.100281 0.108624\nvn -0.7434 0.6594 -0.1122\nv -0.001815 -0.101078 0.108505\nvn -0.7434 0.6594 -0.1122\nv -0.001746 -0.10065 0.110557\nvn -0.7434 0.6594 -0.1122\nv -0.001746 -0.10065 0.110557\nvn -0.8763 0.4767 -0.0697\nv -0.001815 -0.101078 0.108505\nvn -0.8763 0.4767 -0.0697\nv -0.001953 -0.100835 0.111907\nvn -0.8763 0.4767 -0.0697\nv -0.000265 -0.099822 0.109598\nvn -0.2999 0.9375 -0.1764\nv 5.9e-05 -0.099942 0.108408\nvn -0.2999 0.9375 -0.1764\nv -0.001126 -0.100281 0.108624\nvn -0.2999 0.9375 -0.1764\nv -0.000894 -0.09345 0.118848\nvn -0.307 0.5132 -0.8015\nv -0.000531 -0.094612 0.117965\nvn -0.307 0.5132 -0.8015\nv -0.000959 -0.095211 0.117745\nvn -0.307 0.5132 -0.8015\nv -0.001667 -0.091212 0.122913\nvn -0.7187 -0.2248 0.6579\nv -0.001418 -0.093994 0.122234\nvn -0.7187 -0.2248 0.6579\nv -0.001134 -0.091212 0.123496\nvn -0.7187 -0.2248 0.6579\nv -0.001667 -0.091212 0.122913\nvn -0.8507 -0.1951 0.4881\nv -0.001909 -0.093707 0.121493\nvn -0.8507 -0.1951 0.4881\nv -0.001418 -0.093994 0.122234\nvn -0.8507 -0.1951 0.4881\nv -0.001318 -0.099995 0.11097\nvn -0.7875 0.6008 -0.1376\nv -0.001126 -0.100281 0.108624\nvn -0.7875 0.6008 -0.1376\nv -0.001746 -0.10065 0.110557\nvn -0.7875 0.6008 -0.1376\nv -0.000134 -0.092805 0.119008\nvn -0.2762 0.5253 -0.8048\nv -0.000531 -0.094612 0.117965\nvn -0.2762 0.5253 -0.8048\nv -0.000894 -0.09345 0.118848\nvn -0.2762 0.5253 -0.8048\nv -0.001943 -0.091105 0.122328\nvn -0.905 -0.1405 0.4014\nv -0.001909 -0.093707 0.121493\nvn -0.905 -0.1405 0.4014\nv -0.001667 -0.091212 0.122913\nvn -0.905 -0.1405 0.4014\nv -0.000557 -0.101738 0.115765\nvn -0.3343 -0.8672 0.369\nv -0.000765 -0.103179 0.112191\nvn -0.3343 -0.8672 0.369\nv -8.2e-05 -0.102669 0.114007\nvn -0.3343 -0.8672 0.369\nv -0.001953 -0.100835 0.111907\nvn -0.9958 0.0899 -0.0182\nv -0.002018 -0.101996 0.109743\nvn -0.9958 0.0899 -0.0182\nv -0.002003 -0.10123 0.112698\nvn -0.9958 0.0899 -0.0182\nv -0.000481 -0.089778 0.124089\nvn -0.312 -0.2384 0.9197\nv -0.001134 -0.091212 0.123496\nvn -0.312 -0.2384 0.9197\nv -0.000166 -0.091784 0.123676\nvn -0.312 -0.2384 0.9197\nv -0.002003 -0.10123 0.112698\nvn -0.9566 -0.281 0.0777\nv -0.002018 -0.101996 0.109743\nvn -0.9566 -0.281 0.0777\nv -0.001735 -0.102129 0.112746\nvn -0.9566 -0.281 0.0777\nv -0.000557 -0.101738 0.115765\nvn -0.4851 -0.8009 0.351\nv -0.001256 -0.10283 0.112309\nvn -0.4851 -0.8009 0.351\nv -0.000765 -0.103179 0.112191\nvn -0.4851 -0.8009 0.351\nv -0.001943 -0.091105 0.122328\nvn -0.9872 -0.0603 0.1479\nv -0.002003 -0.093183 0.12108\nvn -0.9872 -0.0603 0.1479\nv -0.001909 -0.093707 0.121493\nvn -0.9872 -0.0603 0.1479\nv -0.000972 -0.091934 0.119622\nvn -0.7855 0.334 -0.521\nv -0.001684 -0.094623 0.118971\nvn -0.7855 0.334 -0.521\nv -0.001898 -0.092969 0.120353\nvn -0.7855 0.334 -0.521\nv -0.001541 -0.101232 0.115363\nvn -0.5379 -0.7666 0.3508\nv -0.001256 -0.10283 0.112309\nvn -0.5379 -0.7666 0.3508\nv -0.000557 -0.101738 0.115765\nvn -0.5379 -0.7666 0.3508\nv -0.00057 -0.099463 0.111322\nvn -0.5276 0.837 -0.145\nv -0.001126 -0.100281 0.108624\nvn -0.5276 0.837 -0.145\nv -0.001318 -0.099995 0.11097\nvn -0.5276 0.837 -0.145\nv -0.000972 -0.091934 0.119622\nvn -0.6096 0.3352 -0.7184\nv -0.000894 -0.09345 0.118848\nvn -0.6096 0.3352 -0.7184\nv -0.001684 -0.094623 0.118971\nvn -0.6096 0.3352 -0.7184\nv -0.001541 -0.101232 0.115363\nvn -0.7039 -0.6543 0.2766\nv -0.001735 -0.102129 0.112746\nvn -0.7039 -0.6543 0.2766\nv -0.001256 -0.10283 0.112309\nvn -0.7039 -0.6543 0.2766\nv -0.000265 -0.099822 0.109598\nvn -0.2336 0.9429 -0.2376\nv -0.001126 -0.100281 0.108624\nvn -0.2336 0.9429 -0.2376\nv -0.00057 -0.099463 0.111322\nvn -0.2336 0.9429 -0.2376\nv -0.001943 -0.089884 0.121578\nvn -0.9904 0.0382 -0.1328\nv -0.001898 -0.092969 0.120353\nvn -0.9904 0.0382 -0.1328\nv -0.002003 -0.093183 0.12108\nvn -0.9904 0.0382 -0.1328\nv -0.001591 -0.090884 0.120579\nvn -0.7255 0.1789 -0.6645\nv -0.000972 -0.091934 0.119622\nvn -0.7255 0.1789 -0.6645\nv -0.001898 -0.092969 0.120353\nvn -0.7255 0.1789 -0.6645\nv -0.000134 -0.092805 0.119008\nvn -0.1872 0.4387 -0.8789\nv -0.000894 -0.09345 0.118848\nvn -0.1872 0.4387 -0.8789\nv -0.000972 -0.091934 0.119622\nvn -0.1872 0.4387 -0.8789\nv -0.001959 -0.100607 0.114748\nvn -0.9545 -0.2789 0.1054\nv -0.002003 -0.10123 0.112698\nvn -0.9545 -0.2789 0.1054\nv -0.001735 -0.102129 0.112746\nvn -0.9545 -0.2789 0.1054\nv -0.00057 -0.099463 0.111322\nvn -0.0104 0.9786 -0.2055\nv 0.00029 -0.099582 0.110711\nvn -0.0104 0.9786 -0.2055\nv -0.000265 -0.099822 0.109598\nvn -0.0104 0.9786 -0.2055\nv -0.001767 -0.099747 0.113131\nvn -0.7443 0.6281 -0.227\nv -0.001318 -0.099995 0.11097\nvn -0.7453 0.6269 -0.2271\nv -0.001746 -0.10065 0.110557\nvn -0.7438 0.6286 -0.227\nv -0.0015 -0.088403 0.123655\nvn -0.7311 -0.1332 0.6692\nv -0.001667 -0.091212 0.122913\nvn -0.7311 -0.1332 0.6692\nv -0.001134 -0.091212 0.123496\nvn -0.7311 -0.1332 0.6692\nv -0.001767 -0.099747 0.113131\nvn -0.9881 0.1533 0.014\nv -0.001953 -0.100835 0.111907\nvn -0.9881 0.1533 0.014\nv -0.002003 -0.10123 0.112698\nvn -0.9881 0.1533 0.014\nv -0.001007 -0.10056 0.117182\nvn -0.5455 -0.7212 0.4268\nv -0.001541 -0.101232 0.115363\nvn -0.5455 -0.7212 0.4268\nv -0.000557 -0.101738 0.115765\nvn -0.5455 -0.7212 0.4268\nv -0.001591 -0.090884 0.120579\nvn -0.858 0.1786 -0.4816\nv -0.001898 -0.092969 0.120353\nvn -0.858 0.1786 -0.4816\nv -0.001943 -0.089884 0.121578\nvn -0.858 0.1786 -0.4816\nv -0.000791 -0.087817 0.124186\nvn -0.5068 -0.1223 0.8534\nv -0.001134 -0.091212 0.123496\nvn -0.5068 -0.1223 0.8534\nv -0.000481 -0.089778 0.124089\nvn -0.5068 -0.1223 0.8534\nv -0.001959 -0.100607 0.114748\nvn -0.8945 -0.3983 0.2029\nv -0.001735 -0.102129 0.112746\nvn -0.8945 -0.3983 0.2029\nv -0.001541 -0.101232 0.115363\nvn -0.8945 -0.3983 0.2029\nv -0.0015 -0.088403 0.123655\nvn -0.5318 -0.1168 0.8388\nv -0.001134 -0.091212 0.123496\nvn -0.5318 -0.1168 0.8388\nv -0.000791 -0.087817 0.124186\nvn -0.5318 -0.1168 0.8388\nv -0.001932 -0.087733 0.122928\nvn -0.907 -0.0709 0.4151\nv -0.001943 -0.091105 0.122328\nvn -0.907 -0.0709 0.4151\nv -0.001667 -0.091212 0.122913\nvn -0.907 -0.0709 0.4151\nv -0.001932 -0.087733 0.122928\nvn -0.8844 -0.0694 0.4616\nv -0.001667 -0.091212 0.122913\nvn -0.8844 -0.0694 0.4616\nv -0.0015 -0.088403 0.123655\nvn -0.8844 -0.0694 0.4616\nv -0.000791 -0.087817 0.124186\nvn -0.204 -0.0804 0.9757\nv -0.000481 -0.089778 0.124089\nvn -0.204 -0.0804 0.9757\nv -4.2e-05 -0.087863 0.124339\nvn -0.204 -0.0804 0.9757\nv -0.001007 -0.10056 0.117182\nvn -0.2645 -0.781 0.5658\nv -0.000557 -0.101738 0.115765\nvn -0.2645 -0.781 0.5658\nv -0.000196 -0.100077 0.118227\nvn -0.2645 -0.781 0.5658\nv -0.00107 -0.089191 0.120506\nvn -0.716 0.1909 -0.6715\nv -0.000972 -0.091934 0.119622\nvn -0.716 0.1909 -0.6715\nv -0.001591 -0.090884 0.120579\nvn -0.716 0.1909 -0.6715\nv -0.001942 -0.099056 0.117162\nvn -0.8989 -0.3653 0.2417\nv -0.001959 -0.100607 0.114748\nvn -0.8995 -0.3646 0.2406\nv -0.001541 -0.101232 0.115363\nvn -0.8977 -0.3669 0.2439\nv -0.000959 -0.098486 0.113957\nvn -0.7457 0.6264 -0.2271\nv -0.00057 -0.099463 0.111322\nvn -0.1588 0.9028 -0.3997\nv -0.000431 -0.098325 0.113837\nvn -0.1588 0.9028 -0.3997\nv 0.00029 -0.099582 0.110711\nvn -0.1588 0.9028 -0.3997\nv -0.001994 -0.087722 0.122047\nvn -0.8405 0.0959 -0.5333\nv -0.001943 -0.089884 0.121578\nvn -0.8405 0.0959 -0.5333\nv -0.002003 -0.093183 0.12108\nvn -0.8405 0.0959 -0.5333\nv -0.001994 -0.087722 0.122047\nvn -0.9977 -0.0096 0.0665\nv -0.002003 -0.093183 0.12108\nvn -0.9979 -0.0097 0.0642\nv -0.001943 -0.091105 0.122328\nvn -0.9976 -0.0093 0.0685\nv -0.001932 -0.087733 0.122928\nvn -0.9975 -0.0096 0.0701\nv -0.000532 -0.090127 0.120031\nvn -0.3113 0.2815 -0.9077\nv -0.000972 -0.091934 0.119622\nvn -0.3113 0.2815 -0.9077\nv -0.00107 -0.089191 0.120506\nvn -0.3113 0.2815 -0.9077\nv -0.001683 -0.099203 0.117888\nvn -0.7069 -0.5703 0.4184\nv -0.001541 -0.101232 0.115363\nvn -0.7069 -0.5703 0.4184\nv -0.001007 -0.10056 0.117182\nvn -0.7069 -0.5703 0.4184\nv -0.000983 -0.09901 0.119069\nvn -0.3411 -0.7244 0.5991\nv -0.001007 -0.10056 0.117182\nvn -0.3411 -0.7244 0.5991\nv -0.000196 -0.100077 0.118227\nvn -0.3411 -0.7244 0.5991\nv -0.000959 -0.098486 0.113957\nvn -0.4171 0.8303 -0.3696\nv -0.00057 -0.099463 0.111322\nvn -0.4171 0.8303 -0.3696\nv -0.001318 -0.099995 0.11097\nvn -0.4171 0.8303 -0.3696\nv -0.001591 -0.090884 0.120579\nvn -0.9235 0.0538 -0.3797\nv -0.001943 -0.089884 0.121578\nvn -0.9235 0.0538 -0.3797\nv -0.001688 -0.088135 0.121206\nvn -0.9235 0.0538 -0.3797\nv -0.000532 -0.090127 0.120031\nvn -0.3527 0.2876 -0.8904\nv -0.000134 -0.092805 0.119008\nvn -0.3527 0.2876 -0.8904\nv -0.000972 -0.091934 0.119622\nvn -0.3527 0.2876 -0.8904\nv -0.000532 -0.090127 0.120031\nvn -0.0557 0.349 -0.9355\nv 0.000417 -0.089937 0.120045\nvn -0.0557 0.349 -0.9355\nv -0.000134 -0.092805 0.119008\nvn -0.0557 0.349 -0.9355\nv -0.000431 -0.098325 0.113837\nvn -0.3461 0.8618 -0.3708\nv -0.00057 -0.099463 0.111322\nvn -0.3461 0.8618 -0.3708\nv -0.000959 -0.098486 0.113957\nvn -0.3461 0.8618 -0.3708\nv -0.001506 -0.098209 0.115224\nvn -0.8293 0.4946 -0.2601\nv -0.001767 -0.099747 0.113131\nvn -0.8293 0.4946 -0.2601\nv -0.001794 -0.098573 0.115449\nvn -0.8293 0.4946 -0.2601\nv -0.001883 -0.097691 0.11691\nvn -0.9715 0.1943 -0.1356\nv -0.001767 -0.099747 0.113131\nvn -0.9715 0.1943 -0.1356\nv -0.002003 -0.10123 0.112698\nvn -0.9715 0.1943 -0.1356\nv -0.001683 -0.099203 0.117888\nvn -0.8971 -0.3677 0.245\nv -0.001794 -0.098573 0.115449\nvn 0.8704 0.4433 -0.2143\nv -0.001767 -0.099747 0.113131\nvn 0.8704 0.4433 -0.2143\nv -0.001883 -0.097691 0.11691\nvn 0.8704 0.4433 -0.2143\nv -0.001683 -0.099203 0.117888\nvn -0.6561 -0.5791 0.4839\nv -0.001007 -0.10056 0.117182\nvn -0.6561 -0.5791 0.4839\nv -0.000983 -0.09901 0.119069\nvn -0.6561 -0.5791 0.4839\nv -0.000959 -0.098486 0.113957\nvn -0.6194 0.6675 -0.4133\nv -0.001767 -0.099747 0.113131\nvn -0.6194 0.6675 -0.4133\nv -0.001506 -0.098209 0.115224\nvn -0.6194 0.6675 -0.4133\nv -0.00107 -0.089191 0.120506\nvn -0.6133 0.1548 -0.7746\nv -0.001591 -0.090884 0.120579\nvn -0.6133 0.1548 -0.7746\nv -0.001688 -0.088135 0.121206\nvn -0.6133 0.1548 -0.7746\nv -0.001998 -0.097345 0.118151\nvn -0.998 -0.0512 0.0378\nv -0.002003 -0.10123 0.112698\nvn -0.9981 -0.0501 0.0367\nv -0.001959 -0.100607 0.114748\nvn -0.9975 -0.056 0.0424\nv -0.000601 -0.088207 0.120379\nvn -0.513 0.1351 -0.8477\nv -0.000532 -0.090127 0.120031\nvn -0.513 0.1351 -0.8477\nv -0.00107 -0.089191 0.120506\nvn -0.513 0.1351 -0.8477\nv -0.000983 -0.09901 0.119069\nvn -0.2086 -0.6961 0.687\nv -0.000196 -0.100077 0.118227\nvn -0.2086 -0.6961 0.687\nv -4e-05 -0.097982 0.120397\nvn -0.2086 -0.6961 0.687\nv -0.001688 -0.088135 0.121206\nvn -0.9289 0.0575 -0.3659\nv -0.001943 -0.089884 0.121578\nvn -0.9289 0.0575 -0.3659\nv -0.001994 -0.087722 0.122047\nvn -0.9289 0.0575 -0.3659\nv -0.000601 -0.088207 0.120379\nvn -0.0207 0.1775 -0.9839\nv 0.000417 -0.089937 0.120045\nvn -0.0207 0.1775 -0.9839\nv -0.000532 -0.090127 0.120031\nvn -0.0207 0.1775 -0.9839\nv -0.001883 -0.097691 0.11691\nvn -0.9671 0.2078 -0.147\nv -0.002003 -0.10123 0.112698\nvn -0.9671 0.2078 -0.147\nv -0.001998 -0.097345 0.118151\nvn -0.9671 0.2078 -0.147\nv -0.000601 -0.088207 0.120379\nvn -0.0642 0.1524 -0.9862\nv 0.000404 -0.088094 0.120331\nvn -0.0642 0.1524 -0.9862\nv 0.000417 -0.089937 0.120045\nvn -0.0642 0.1524 -0.9862\nv -0.001942 -0.099056 0.117162\nvn -0.9973 -0.0582 0.0446\nv -0.001647 -0.096985 0.12009\nvn -0.7134 -0.4878 0.5031\nv -0.001683 -0.099203 0.117888\nvn -0.7134 -0.4878 0.5031\nv -0.000983 -0.09901 0.119069\nvn -0.7134 -0.4878 0.5031\nv -0.001184 -0.096991 0.116235\nvn -0.7186 0.5468 -0.4297\nv -0.000959 -0.098486 0.113957\nvn -0.7186 0.5468 -0.4297\nv -0.001506 -0.098209 0.115224\nvn -0.7186 0.5468 -0.4297\nv -0.001943 -0.096337 0.119796\nvn -0.9121 -0.2813 0.2981\nv -0.001683 -0.099203 0.117888\nvn -0.9121 -0.2813 0.2981\nv -0.001647 -0.096985 0.12009\nvn -0.9121 -0.2813 0.2981\nv 0.002 -0.098298 0.087137\nvn 0.9415 -0.2417 -0.2348\nv 0.001921 -0.096569 0.085041\nvn 0.9415 -0.2416 -0.2348\nv 0.001949 -0.096551 0.085132\nvn 0.9415 -0.2416 -0.2347\nv 0.001123 -0.096737 0.083784\nvn 0.3616 -0.5981 -0.7152\nv 0.000982 -0.09901 0.085614\nvn 0.3616 -0.5981 -0.7152\nv 6.2e-05 -0.097779 0.084119\nvn 0.3616 -0.5981 -0.7152\nv 0.000744 -0.097747 0.089766\nvn 0.0811 0.8838 0.4607\nv -0.000422 -0.097678 0.089839\nvn 0.0793 0.8833 0.4621\nv 0.000321 -0.098109 0.090536\nvn 0.0724 0.8848 0.4603\nv 0.001123 -0.096737 0.083784\nvn 0.6474 -0.5018 -0.5737\nv 0.001647 -0.096986 0.084593\nvn 0.6474 -0.5018 -0.5737\nv 0.000982 -0.09901 0.085614\nvn 0.6474 -0.5018 -0.5737\nv 0.001123 -0.096737 0.083784\nvn 0.3177 -0.5676 -0.7595\nv 6.2e-05 -0.097779 0.084119\nvn 0.3177 -0.5676 -0.7595\nv 0.000161 -0.096857 0.083472\nvn 0.3177 -0.5676 -0.7595\nv 0.001166 -0.096247 0.087702\nvn 0.7993 0.4777 0.3646\nv 0.001572 -0.098265 0.089456\nvn 0.7993 0.4777 0.3646\nv 0.001802 -0.09721 0.087567\nvn 0.7993 0.4777 0.3646\nv 0.001166 -0.096247 0.087702\nvn 0.5807 0.5975 0.5529\nv 0.000744 -0.097747 0.089766\nvn 0.5807 0.5975 0.5529\nv 0.001572 -0.098265 0.089456\nvn 0.5807 0.5975 0.5529\nv -0.001526 -0.096664 0.084251\nvn 0.0193 0.9792 -0.2018\nv -0.001815 -0.096558 0.084735\nvn 0.02 0.9793 -0.2015\nv -0.001869 -0.096516 0.084933\nvn 0.0193 0.9792 -0.2018\nv 0.002001 -0.096396 0.085886\nvn 0.9974 -0.0401 -0.0606\nv 0.002 -0.098298 0.087137\nvn 0.9974 -0.0401 -0.0606\nv 0.001949 -0.096551 0.085132\nvn 0.9974 -0.0401 -0.0606\nv 0.000141 -0.096051 0.088023\nvn 0.3276 0.7313 0.5983\nv 0.000744 -0.097747 0.089766\nvn 0.3276 0.7313 0.5983\nv 0.001166 -0.096247 0.087702\nvn 0.3276 0.7313 0.5983\nv 0.000141 -0.096051 0.088023\nvn 0.0857 0.7287 0.6794\nv -0.000422 -0.097678 0.089839\nvn 0.0857 0.7287 0.6794\nv 0.000744 -0.097747 0.089766\nvn 0.0857 0.7287 0.6794\nv 0.001975 -0.100732 0.0924\nvn 0.8784 0.4672 0.1007\nv 0.001409 -0.099677 0.092444\nvn 0.8784 0.4672 0.1007\nv 0.001656 -0.100719 0.095123\nvn 0.8784 0.4672 0.1007\nv 0.000279 -0.103946 0.095852\nvn -0.0407 -0.9873 -0.1534\nv -0.000529 -0.10391 0.095832\nvn -0.0407 -0.9873 -0.1534\nv 0.000109 -0.103546 0.093321\nvn -0.0407 -0.9873 -0.1534\nv 0.001322 -0.10336 0.09507\nvn 0.6696 -0.7421 -0.0297\nv 0.001699 -0.103068 0.096261\nvn 0.6696 -0.7421 -0.0297\nv 0.000911 -0.103772 0.096087\nvn 0.6696 -0.7421 -0.0297\nv 0.001634 -0.096696 0.084396\nvn 0.7259 -0.3656 -0.5826\nv 0.001647 -0.096986 0.084593\nvn 0.7259 -0.3656 -0.5826\nv 0.001123 -0.096737 0.083784\nvn 0.7259 -0.3656 -0.5826\nv 0.001062 -0.103082 0.092671\nvn 0.3355 -0.9267 -0.1691\nv 0.000279 -0.103946 0.095852\nvn 0.3355 -0.9267 -0.1691\nv 0.000109 -0.103546 0.093321\nvn 0.3355 -0.9267 -0.1691\nv 0.001062 -0.103082 0.092671\nvn 0.3224 -0.9306 -0.1734\nv 0.000911 -0.103772 0.096087\nvn 0.3224 -0.9306 -0.1734\nv 0.000279 -0.103946 0.095852\nvn 0.3224 -0.9306 -0.1734\nv 0.001681 -0.096172 0.086942\nvn 0.946 0.2415 0.2162\nv 0.001949 -0.09708 0.086782\nvn 0.946 0.2415 0.2162\nv 0.001808 -0.096268 0.086491\nvn 0.946 0.2415 0.2162\nv 0.001322 -0.10336 0.09507\nvn 0.4853 -0.861 -0.1522\nv 0.000911 -0.103772 0.096087\nvn 0.4853 -0.861 -0.1522\nv 0.001062 -0.103082 0.092671\nvn 0.4853 -0.861 -0.1522\nv 0.001166 -0.096247 0.087702\nvn 0.7354 0.4111 0.5386\nv 0.001681 -0.096172 0.086942\nvn 0.7354 0.4111 0.5386\nv 0.001194 -0.096046 0.08751\nvn 0.7354 0.4111 0.5387\nv 0.001832 -0.102501 0.093988\nvn 0.9429 -0.3319 -0.0273\nv 0.001997 -0.102176 0.095726\nvn 0.9429 -0.3319 -0.0273\nv 0.001699 -0.103068 0.096261\nvn 0.9429 -0.3319 -0.0273\nv 0.001832 -0.102501 0.093988\nvn 0.7923 -0.6013 -0.1032\nv 0.001699 -0.103068 0.096261\nvn 0.7923 -0.6013 -0.1032\nv 0.001322 -0.10336 0.09507\nvn 0.7923 -0.6013 -0.1032\nv 0.001116 -0.096033 0.087563\nvn 0.5256 0.547 0.6516\nv 0.001166 -0.096247 0.087702\nvn 0.5256 0.547 0.6516\nv 0.001194 -0.096046 0.08751\nvn 0.5256 0.547 0.6516\nv 0.001657 -0.096687 0.084443\nvn 0.8971 -0.2217 -0.3821\nv 0.001647 -0.096986 0.084593\nvn 0.8971 -0.2217 -0.3821\nv 0.001634 -0.096696 0.084396\nvn 0.8971 -0.2217 -0.3821\nv 0.001832 -0.102501 0.093988\nvn 0.7556 -0.6347 -0.1618\nv 0.001322 -0.10336 0.09507\nvn 0.7506 -0.6423 -0.1555\nv 0.001062 -0.103082 0.092671\nvn 0.7517 -0.6406 -0.1568\nv 0.001657 -0.096687 0.084443\nvn 0.8905 -0.2277 -0.3939\nv 0.001811 -0.096625 0.084756\nvn 0.8905 -0.2277 -0.3939\nv 0.001647 -0.096986 0.084593\nvn 0.8905 -0.2277 -0.3939\nv 0.000175 -0.09594 0.087924\nvn 0.3433 0.5673 0.7485\nv 0.001166 -0.096247 0.087702\nvn 0.3433 0.5672 0.7486\nv 0.001116 -0.096033 0.087563\nvn 0.3433 0.5672 0.7486\nv 0.000175 -0.09594 0.087924\nvn 0.042 0.6605 0.7497\nv 0.000102 -0.095938 0.087926\nvn 0.042 0.6605 0.7497\nv 0.000141 -0.096051 0.088023\nvn 0.042 0.6605 0.7497\nv 0.00192 -0.096298 0.086352\nvn 0.9637 0.1548 0.2174\nv 0.001949 -0.09708 0.086782\nvn 0.9637 0.1548 0.2174\nv 0.001959 -0.09633 0.086204\nvn 0.9637 0.1548 0.2174\nv 0.000421 -0.102897 0.091366\nvn 0.27 -0.9258 -0.2646\nv 0.001062 -0.103082 0.092671\nvn 0.27 -0.9258 -0.2646\nv 0.000109 -0.103546 0.093321\nvn 0.27 -0.9258 -0.2646\nv 0.00192 -0.096298 0.086352\nvn 0.7679 0.3298 0.5492\nv 0.001808 -0.096268 0.086491\nvn 0.7679 0.3298 0.5492\nv 0.001949 -0.09708 0.086782\nvn 0.7679 0.3298 0.5492\nv 0.001694 -0.10204 0.091557\nvn 0.7567 -0.6331 -0.163\nv 0.000161 -0.096857 0.083472\nvn 0.0005 0.9322 -0.3618\nv -0.000246 -0.09684 0.083515\nvn 0.0005 0.9322 -0.3618\nv 0.001123 -0.096737 0.083784\nvn 0.0005 0.9322 -0.3618\nv 0.000811 -0.101978 0.089612\nvn 0.1636 -0.8884 -0.4289\nv 0.000421 -0.102897 0.091366\nvn 0.1636 -0.8884 -0.4289\nv -0.000216 -0.102633 0.090576\nvn 0.1636 -0.8884 -0.4289\nv 0.001975 -0.100732 0.0924\nvn 0.9962 0.0818 0.029\nv 0.00195 -0.101396 0.095135\nvn 0.9962 0.0818 0.029\nv 0.001997 -0.102176 0.095726\nvn 0.9962 0.0818 0.029\nv 0.00098 -0.099704 0.093506\nvn 0.7597 0.6444 0.0866\nv 0.001231 -0.100358 0.096168\nvn 0.7597 0.6444 0.0866\nv 0.001656 -0.100719 0.095123\nvn 0.7597 0.6444 0.0866\nv 0.001996 -0.101038 0.091222\nvn 0.9402 -0.3209 -0.1143\nv 0.001832 -0.102501 0.093988\nvn 0.9402 -0.3209 -0.1143\nv 0.001694 -0.10204 0.091557\nvn 0.9402 -0.3209 -0.1143\nv 0.001996 -0.101038 0.091222\nvn 0.9763 -0.2097 -0.0533\nv 0.001997 -0.102176 0.095726\nvn 0.9763 -0.2097 -0.0533\nv 0.001832 -0.102501 0.093988\nvn 0.9763 -0.2097 -0.0533\nv 0.000811 -0.101978 0.089612\nvn 0.4438 -0.8306 -0.3364\nv 0.001062 -0.103082 0.092671\nvn 0.4438 -0.8306 -0.3364\nv 0.000421 -0.102897 0.091366\nvn 0.4438 -0.8306 -0.3364\nv 0.000449 -0.099667 0.094183\nvn 0.3168 0.9276 0.198\nv 0.001231 -0.100358 0.096168\nvn 0.3168 0.9276 0.198\nv 0.00098 -0.099704 0.093506\nvn 0.3168 0.9276 0.198\nv 0.001656 -0.100719 0.095123\nvn 0.9116 0.3975 0.1049\nv 0.00195 -0.101396 0.095135\nvn 0.9116 0.3975 0.1049\nv 0.001975 -0.100732 0.0924\nvn 0.9116 0.3975 0.1049\nv 0.001975 -0.100732 0.0924\nvn 0.9994 0.0344 0.0083\nv 0.001997 -0.102176 0.095726\nvn 0.9994 0.0343 0.0083\nv 0.001996 -0.101038 0.091222\nvn 0.9994 0.0347 0.0082\nv 0.00154 -0.101232 0.08932\nvn 0.6151 -0.7241 -0.3121\nv 0.001062 -0.103082 0.092671\nvn 0.6151 -0.7241 -0.3121\nv 0.000811 -0.101978 0.089612\nvn 0.6151 -0.7241 -0.3121\nv 0.000449 -0.099667 0.094183\nvn 0.402 0.9023 0.1556\nv 0.000353 -0.099985 0.096272\nvn 0.402 0.9023 0.1556\nv 0.001231 -0.100358 0.096168\nvn 0.402 0.9023 0.1556\nv 0.00154 -0.101232 0.08932\nvn 0.6391 -0.7082 -0.2999\nv 0.001694 -0.10204 0.091557\nvn 0.6391 -0.7082 -0.2999\nv 0.001062 -0.103082 0.092671\nvn 0.6391 -0.7082 -0.2999\nv 0.001409 -0.099677 0.092444\nvn 0.5716 0.7811 0.2511\nv 0.00098 -0.099704 0.093506\nvn 0.5716 0.7811 0.2511\nv 0.001656 -0.100719 0.095123\nvn 0.5716 0.7811 0.2511\nv 2.1e-05 -0.101264 0.088003\nvn 0.1328 -0.88 -0.4559\nv 0.000811 -0.101978 0.089612\nvn 0.1328 -0.88 -0.4559\nv -0.000216 -0.102633 0.090576\nvn 0.1328 -0.88 -0.4559\nv 0.001898 -0.10039 0.089164\nvn 0.9323 -0.3298 -0.1482\nv 0.001996 -0.101038 0.091222\nvn 0.9323 -0.3298 -0.1482\nv 0.001694 -0.10204 0.091557\nvn 0.9323 -0.3298 -0.1482\nv 0.001007 -0.10056 0.087501\nvn 0.3131 -0.8015 -0.5095\nv 0.000811 -0.101978 0.089612\nvn 0.3131 -0.8015 -0.5095\nv 2.1e-05 -0.101264 0.088003\nvn 0.3131 -0.8015 -0.5095\nv 0.001951 -0.099393 0.089704\nvn 0.9994 0.0349 0.0082\nv 0.001007 -0.10056 0.087501\nvn 0.5572 -0.7123 -0.4269\nv 0.00154 -0.101232 0.08932\nvn 0.5572 -0.7123 -0.4269\nv 0.000811 -0.101978 0.089612\nvn 0.5572 -0.7123 -0.4269\nv 0.001898 -0.10039 0.089164\nvn 0.8852 -0.4148 -0.2108\nv 0.001694 -0.10204 0.091557\nvn 0.8852 -0.4148 -0.2108\nv 0.00154 -0.101232 0.08932\nvn 0.8852 -0.4148 -0.2108\nv 0.001007 -0.10056 0.087501\nvn 0.2678 -0.7791 -0.5669\nv 2.1e-05 -0.101264 0.088003\nvn 0.2678 -0.7791 -0.5669\nv 0.000198 -0.100079 0.086459\nvn 0.2678 -0.7791 -0.5669\nv -0.000118 -0.098862 0.092048\nvn 0.0078 0.9363 0.3511\nv -0.000289 -0.099582 0.093972\nvn 0.0078 0.9363 0.3511\nv 0.000449 -0.099667 0.094183\nvn 0.0078 0.9363 0.3511\nv -0.000118 -0.098862 0.092048\nvn 0.3692 0.8977 0.2406\nv 0.000449 -0.099667 0.094183\nvn 0.3692 0.8977 0.2406\nv 0.00098 -0.099704 0.093506\nvn 0.3692 0.8977 0.2406\nv 0.000321 -0.098109 0.090536\nvn 0.6097 0.7468 0.2656\nv 0.00098 -0.099704 0.093506\nvn 0.6097 0.7468 0.2656\nv 0.001409 -0.099677 0.092444\nvn 0.6097 0.7468 0.2656\nv 0.001682 -0.099203 0.086794\nvn 0.707 -0.5702 -0.4184\nv 0.00154 -0.101232 0.08932\nvn 0.707 -0.5702 -0.4184\nv 0.001007 -0.10056 0.087501\nvn 0.707 -0.5702 -0.4184\nv 0.000982 -0.09901 0.085614\nvn 0.3418 -0.7242 -0.599\nv 0.001007 -0.10056 0.087501\nvn 0.3418 -0.7242 -0.599\nv 0.000198 -0.100079 0.086459\nvn 0.3418 -0.7242 -0.599\nv 0.001572 -0.098265 0.089456\nvn 0.9236 0.3465 0.1637\nv 0.001975 -0.100732 0.0924\nvn 0.9236 0.3465 0.1637\nv 0.001951 -0.099393 0.089704\nvn 0.9236 0.3465 0.1637\nv 0.001572 -0.098265 0.089456\nvn 0.8557 0.4484 0.2584\nv 0.001409 -0.099677 0.092444\nvn 0.8557 0.4484 0.2584\nv 0.001975 -0.100732 0.0924\nvn 0.8557 0.4484 0.2584\nv 0.001898 -0.10039 0.089164\nvn 0.8611 -0.4189 -0.2881\nv 0.00154 -0.101232 0.08932\nvn 0.8611 -0.4189 -0.2881\nv 0.001682 -0.099203 0.086794\nvn 0.8611 -0.4189 -0.2881\nv 0.001682 -0.099203 0.086794\nvn 0.6561 -0.5791 -0.484\nv 0.001007 -0.10056 0.087501\nvn 0.6561 -0.5791 -0.484\nv 0.000982 -0.09901 0.085614\nvn 0.6561 -0.5791 -0.484\nv -0.000118 -0.098862 0.092048\nvn 0.0765 0.8837 0.4618\nv 0.00098 -0.099704 0.093506\nvn 0.0681 0.8852 0.4601\nv 0.000744 -0.097747 0.089766\nvn 0.5884 0.7183 0.3714\nv 0.001409 -0.099677 0.092444\nvn 0.5884 0.7183 0.3714\nv 0.001572 -0.098265 0.089456\nvn 0.5884 0.7183 0.3714\nv 0.000744 -0.097747 0.089766\nvn 0.2546 0.8135 0.5229\nv 0.000321 -0.098109 0.090536\nvn 0.2546 0.8135 0.5229\nv 0.001409 -0.099677 0.092444\nvn 0.2546 0.8135 0.5229\nv 0.000982 -0.09901 0.085614\nvn 0.1981 -0.6932 -0.693\nv 0.000198 -0.100079 0.086459\nvn 0.1981 -0.6932 -0.693\nv 6.2e-05 -0.097779 0.084119\nvn 0.1981 -0.6932 -0.693\nv 0.001949 -0.09708 0.086782\nvn 0.9979 0.0527 0.0365\nv 0.001996 -0.101038 0.091222\nvn 0.9979 0.0527 0.0365\nv 0.002 -0.098298 0.087137\nvn 0.9979 0.0527 0.0365\nv 0.001949 -0.09708 0.086782\nvn 0.9922 0.0983 0.0771\nv 0.001951 -0.099393 0.089704\nvn 0.9922 0.0983 0.0771\nv 0.001996 -0.101038 0.091222\nvn 0.9922 0.0983 0.0771\nv 0.002 -0.098298 0.087137\nvn 0.9444 -0.2514 -0.2118\nv 0.001898 -0.10039 0.089164\nvn 0.9444 -0.2514 -0.2118\nv 0.001682 -0.099203 0.086794\nvn 0.9444 -0.2514 -0.2118\nv 0.002 -0.098298 0.087137\nvn 0.9868 -0.1349 -0.0894\nv 0.001996 -0.101038 0.091222\nvn 0.9868 -0.1349 -0.0894\nv 0.001898 -0.10039 0.089164\nvn 0.9868 -0.1349 -0.0894\nv 0.001572 -0.098265 0.089456\nvn 0.8783 0.3635 0.3105\nv 0.001951 -0.099393 0.089704\nvn 0.8783 0.3635 0.3105\nv 0.001802 -0.09721 0.087567\nvn 0.8783 0.3635 0.3105\nv 0.001647 -0.096986 0.084593\nvn 0.7134 -0.4879 -0.5031\nv 0.001682 -0.099203 0.086794\nvn 0.7134 -0.4879 -0.5031\nv 0.000982 -0.09901 0.085614\nvn 0.7134 -0.4879 -0.5031\nv 0.001802 -0.09721 0.087567\nvn 0.9347 0.2791 0.2203\nv 0.001951 -0.099393 0.089704\nvn 0.9347 0.2791 0.2203\nv 0.001949 -0.09708 0.086782\nvn 0.9347 0.2791 0.2203\nv 0.001921 -0.096569 0.085041\nvn 0.9123 -0.2809 -0.298\nv 0.001647 -0.096986 0.084593\nvn 0.9123 -0.281 -0.2979\nv 0.001811 -0.096625 0.084756\nvn 0.9123 -0.2807 -0.2982\nv -0.001932 -0.087733 0.122928\nvn -0.947 0.0127 0.3208\nv -0.001639 -0.081 0.123526\nvn -0.947 0.0127 0.3208\nv -0.002041 -0.081 0.122341\nvn -0.947 0.0127 0.3208\nv -0.002041 -0.081 0.122341\nvn -0.9975 -0.01 0.0701\nv 0.00176 -0.088835 0.123254\nvn 0.9504 -0.0104 0.3108\nv 0.001999 -0.08736 0.122572\nvn 0.9504 -0.0104 0.3108\nv 0.001967 -0.081 0.122883\nvn 0.9504 -0.0104 0.3108\nv 0.001467 -0.088051 0.123698\nvn 0.8275 0.0063 0.5614\nv 0.001967 -0.081 0.122883\nvn 0.8275 0.0063 0.5614\nv 0.001263 -0.081 0.12392\nvn 0.8275 0.0063 0.5614\nv 0.001467 -0.088051 0.123698\nvn 0.8384 0.0036 0.545\nv 0.00176 -0.088835 0.123254\nvn 0.8384 0.0036 0.545\nv 0.001967 -0.081 0.122883\nvn 0.8384 0.0036 0.545\nv 0.000679 -0.08849 0.124203\nvn 0.5435 -0.0107 0.8393\nv 0.001467 -0.088051 0.123698\nvn 0.5435 -0.0107 0.8393\nv 0.001263 -0.081 0.12392\nvn 0.5435 -0.0107 0.8393\nv 0.000679 -0.08849 0.124203\nvn 0.3056 0.0121 0.9521\nv 0.001263 -0.081 0.12392\nvn 0.3056 0.0121 0.9521\nv -0.000282 -0.081 0.124416\nvn 0.3056 0.0121 0.9521\nv -4.2e-05 -0.087863 0.124339\nvn 0.1808 -0.0048 0.9835\nv 0.000679 -0.08849 0.124203\nvn 0.1808 -0.0048 0.9835\nv -0.000282 -0.081 0.124416\nvn 0.1808 -0.0048 0.9835\nv -0.000791 -0.087817 0.124186\nvn -0.201 -0.0181 0.9794\nv -4.2e-05 -0.087863 0.124339\nvn -0.201 -0.0181 0.9794\nv -0.000282 -0.081 0.124416\nvn -0.201 -0.0181 0.9794\nv -0.0015 -0.088403 0.123655\nvn -0.5486 0.0043 0.8361\nv -0.000282 -0.081 0.124416\nvn -0.5486 0.0043 0.8361\nv -0.001639 -0.081 0.123526\nvn -0.5486 0.0043 0.8361\nv -0.0015 -0.088403 0.123655\nvn -0.6093 0.0187 0.7927\nv -0.000791 -0.087817 0.124186\nvn -0.6093 0.0187 0.7927\nv -0.000282 -0.081 0.124416\nvn -0.6093 0.0187 0.7927\nv -0.001932 -0.087733 0.122928\nvn -0.8626 -0.0074 0.5059\nv -0.0015 -0.088403 0.123655\nvn -0.8626 -0.0074 0.5059\nv -0.001639 -0.081 0.123526\nvn -0.8626 -0.0074 0.5059\nv -0.001443 -0.103376 0.09586\nvn -0.8189 -0.574 0.0022\nv -0.001345 -0.103466 0.108766\nvn -0.8189 -0.574 0.0022\nv -0.001746 -0.102891 0.109449\nvn -0.8189 -0.574 0.0022\nv -0.001944 -0.102453 0.09543\nvn -0.8784 -0.4779 -0.0025\nv -0.001443 -0.103376 0.09586\nvn -0.8784 -0.4779 -0.0025\nv -0.001746 -0.102891 0.109449\nvn -0.8784 -0.4779 -0.0025\nv -0.001944 -0.102453 0.09543\nvn -0.9563 -0.2925 0.0044\nv -0.001746 -0.102891 0.109449\nvn -0.9563 -0.2925 0.0044\nv -0.002018 -0.101996 0.109743\nvn -0.9563 -0.2925 0.0044\nv 0.001997 -0.102176 0.095726\nvn 0.9883 -0.1524 0.0037\nv 0.002011 -0.10176 0.109329\nvn 0.9883 -0.1524 0.0037\nv 0.001865 -0.102728 0.10851\nvn 0.9883 -0.1524 0.0037\nv 0.001699 -0.103068 0.096261\nvn 0.9476 -0.3194 -0.004\nv 0.001997 -0.102176 0.095726\nvn 0.9476 -0.3194 -0.004\nv 0.001865 -0.102728 0.10851\nvn 0.9476 -0.3194 -0.004\nv -0.002005 -0.101371 0.093136\nvn -0.998 -0.0628 -0.0032\nv -0.001944 -0.102453 0.09543\nvn -0.998 -0.0628 -0.0032\nv -0.002018 -0.101996 0.109743\nvn -0.998 -0.0628 -0.0032\nv 0.001699 -0.103068 0.096261\nvn 0.8159 -0.5782 0.005\nv 0.001865 -0.102728 0.10851\nvn 0.8159 -0.5782 0.005\nv 0.001329 -0.103481 0.1088\nvn 0.8159 -0.5782 0.005\nv 0.000911 -0.103772 0.096087\nvn 0.6669 -0.7451 -0.0049\nv 0.001699 -0.103068 0.096261\nvn 0.6669 -0.7451 -0.0049\nv 0.001329 -0.103481 0.1088\nvn 0.6669 -0.7451 -0.0049\nv 0.000911 -0.103772 0.096087\nvn 0.4414 -0.8973 0.006\nv 0.001329 -0.103481 0.1088\nvn 0.4414 -0.8973 0.006\nv 0.000465 -0.103905 0.109017\nvn 0.4414 -0.8973 0.006\nv 0.000279 -0.103946 0.095852\nvn 0.2671 -0.9637 -0.0007\nv 0.000911 -0.103772 0.096087\nvn 0.2671 -0.9637 -0.0007\nv 0.000465 -0.103905 0.109017\nvn 0.2671 -0.9637 -0.0007\nv 0.000279 -0.103946 0.095852\nvn 0.002 -1 0.0031\nv 0.000465 -0.103905 0.109017\nvn 0.002 -1 0.0031\nv -0.000561 -0.103908 0.108787\nvn 0.002 -1 0.0031\nv -0.000529 -0.10391 0.095832\nvn -0.0451 -0.999 0.0001\nv 0.000279 -0.103946 0.095852\nvn -0.0451 -0.999 0.0001\nv -0.000561 -0.103908 0.108787\nvn -0.0451 -0.999 0.0001\nv -0.000529 -0.10391 0.095832\nvn -0.4905 -0.8714 -0.001\nv -0.000561 -0.103908 0.108787\nvn -0.4905 -0.8714 -0.001\nv -0.001345 -0.103466 0.108766\nvn -0.4905 -0.8714 -0.001\nv -0.001443 -0.103376 0.09586\nvn -0.5049 -0.8632 -0.0022\nv -0.000529 -0.10391 0.095832\nvn -0.5049 -0.8632 -0.0022\nv -0.001345 -0.103466 0.108766\nvn -0.5049 -0.8632 -0.0022\nv -0.000812 -0.095967 0.087699\nvn -0.4511 0.5866 0.6726\nv -0.000758 -0.096087 0.087839\nvn -0.4496 0.5875 0.6729\nv -0.000732 -0.095959 0.087746\nvn -0.452 0.5858 0.6727\nv -0.000417 -0.099631 0.085985\nvn -0.2793 -0.7752 -0.5666\nv 2.1e-05 -0.101264 0.088003\nvn -0.2793 -0.7752 -0.5666\nv -0.000981 -0.101212 0.088427\nvn -0.2793 -0.7752 -0.5666\nv -0.000417 -0.099631 0.085985\nvn -0.3678 -0.7395 -0.5638\nv -0.000981 -0.101212 0.088427\nvn -0.3678 -0.7395 -0.5638\nv -0.001076 -0.09941 0.086126\nvn -0.3678 -0.7395 -0.5638\nv -0.001266 -0.096012 0.087438\nvn -0.4438 0.5911 0.6736\nv -0.000417 -0.099631 0.085985\nvn -0.0993 -0.784 -0.6128\nv 0.000198 -0.100079 0.086459\nvn -0.0993 -0.784 -0.6128\nv 2.1e-05 -0.101264 0.088003\nvn -0.0993 -0.784 -0.6128\nv -0.001506 -0.096082 0.087074\nvn -0.8048 0.3793 0.4565\nv -0.00123 -0.096878 0.088222\nvn -0.8048 0.3793 0.4565\nv -0.001266 -0.096012 0.087438\nvn -0.8048 0.3793 0.4565\nv -0.001815 -0.096558 0.084735\nvn -0.9572 -0.1841 -0.2234\nv -0.002008 -0.09741 0.086266\nvn -0.9572 -0.1841 -0.2234\nv -0.001869 -0.096516 0.084933\nvn -0.9572 -0.1841 -0.2233\nv -0.000647 -0.100052 0.096175\nvn -0.0809 0.9859 0.1462\nv 0.000353 -0.099985 0.096272\nvn -0.0809 0.9859 0.1462\nv 0.000449 -0.099667 0.094183\nvn -0.0809 0.9859 0.1462\nv -0.001948 -0.096232 0.086304\nvn -0.8191 0.3228 0.4742\nv -0.001954 -0.097299 0.087019\nvn -0.8191 0.3228 0.4742\nv -0.001828 -0.096197 0.086487\nvn -0.8191 0.3228 0.4742\nv -0.001526 -0.096664 0.084251\nvn -0.8291 -0.377 -0.4129\nv -0.001891 -0.098507 0.086666\nvn -0.8291 -0.377 -0.4129\nv -0.001815 -0.096558 0.084735\nvn -0.8291 -0.377 -0.4129\nv -0.001488 -0.096678 0.084183\nvn -0.8481 -0.3516 -0.3964\nv -0.001891 -0.098507 0.086666\nvn -0.848 -0.3517 -0.3965\nv -0.001526 -0.096664 0.084251\nvn -0.8481 -0.3516 -0.3964\nv -0.000289 -0.099582 0.093972\nvn 0.0507 0.975 0.2165\nv -0.000647 -0.100052 0.096175\nvn 0.0507 0.975 0.2165\nv 0.000449 -0.099667 0.094183\nvn 0.0507 0.975 0.2165\nv -0.001306 -0.100439 0.096063\nvn -0.5196 0.841 0.1508\nv -0.000647 -0.100052 0.096175\nvn -0.5196 0.841 0.1508\nv -0.000862 -0.099828 0.094186\nvn -0.5196 0.841 0.1508\nv -0.000862 -0.099828 0.094186\nvn -0.3459 0.9275 0.1419\nv -0.000647 -0.100052 0.096175\nvn -0.3459 0.9275 0.1419\nv -0.000289 -0.099582 0.093972\nvn -0.3459 0.9275 0.1419\nv -0.00103 -0.09718 0.084047\nvn -0.7245 -0.4617 -0.5117\nv -0.001076 -0.09941 0.086126\nvn -0.7245 -0.4617 -0.5117\nv -0.001631 -0.09947 0.086964\nvn -0.7245 -0.4617 -0.5117\nv 0.001194 -0.096046 0.08751\nvn 0.0193 0.9793 -0.2017\nv 0.001808 -0.096268 0.086491\nvn 0.0193 0.9792 -0.2018\nv -0.000812 -0.095967 0.087699\nvn 0.0193 0.9792 -0.2018\nv -0.001336 -0.09993 0.093355\nvn -0.4782 0.8621 0.1675\nv -0.001306 -0.100439 0.096063\nvn -0.4782 0.8621 0.1675\nv -0.000862 -0.099828 0.094186\nvn -0.4782 0.8621 0.1675\nv 6.2e-05 -0.097779 0.084119\nvn -0.3562 -0.6158 -0.7028\nv -0.000417 -0.099631 0.085985\nvn -0.3562 -0.6158 -0.7028\nv -0.001076 -0.09941 0.086126\nvn -0.3562 -0.6158 -0.7028\nv 6.2e-05 -0.097779 0.084119\nvn -0.3078 -0.6452 -0.6992\nv -0.001076 -0.09941 0.086126\nvn -0.3078 -0.6452 -0.6992\nv -0.00103 -0.09718 0.084047\nvn -0.3078 -0.6452 -0.6992\nv -0.001506 -0.096082 0.087074\nvn 0.0193 0.9792 -0.2018\nv -0.001657 -0.100759 0.09521\nvn -0.8092 0.5757 0.1173\nv -0.001306 -0.100439 0.096063\nvn -0.8092 0.5757 0.1173\nv -0.001336 -0.09993 0.093355\nvn -0.8092 0.5757 0.1173\nv 0.001921 -0.096569 0.085041\nvn 0.0193 0.9793 -0.2014\nv 0.001811 -0.096625 0.084756\nvn 0.0193 0.9792 -0.2018\nv -0.001966 -0.096423 0.085378\nvn 0.0192 0.9792 -0.2018\nv -0.001966 -0.096423 0.085378\nvn -0.974 -0.1273 -0.1876\nv -0.001869 -0.096516 0.084933\nvn -0.9743 -0.1262 -0.1864\nv -0.002008 -0.09741 0.086266\nvn -0.974 -0.1273 -0.1876\nv -0.002007 -0.096384 0.085564\nvn -0.9949 0.0579 0.083\nv -0.002008 -0.09741 0.086266\nvn -0.9949 0.0579 0.083\nv -0.001988 -0.096343 0.085762\nvn -0.9949 0.0579 0.083\nv -0.000246 -0.09684 0.083515\nvn -0.2688 -0.5822 -0.7673\nv -0.00103 -0.09718 0.084047\nvn -0.2688 -0.5822 -0.7674\nv -0.000863 -0.096791 0.083694\nvn -0.2689 -0.5821 -0.7674\nv -0.002007 -0.096384 0.085564\nvn -0.9739 -0.1275 -0.1879\nv -0.000246 -0.09684 0.083515\nvn -0.1104 -0.5633 -0.8188\nv 0.000161 -0.096857 0.083472\nvn -0.1104 -0.5633 -0.8188\nv 6.2e-05 -0.097779 0.084119\nvn -0.1104 -0.5633 -0.8188\nv -0.001037 -0.096767 0.083797\nvn -0.5474 -0.4403 -0.7117\nv -0.00103 -0.09718 0.084047\nvn -0.5474 -0.4403 -0.7117\nv -0.001288 -0.096727 0.083966\nvn -0.5474 -0.4403 -0.7117\nv -0.000958 -0.099052 0.091846\nvn -0.2757 0.9088 0.3131\nv -0.000862 -0.099828 0.094186\nvn -0.2741 0.9094 0.3128\nv -0.000289 -0.099582 0.093972\nvn -0.2796 0.9073 0.314\nv -0.000118 -0.098862 0.092048\nvn -0.2812 0.9067 0.3143\nv -0.00181 -0.100261 0.092474\nvn -0.7468 0.6457 0.1595\nv -0.001657 -0.100759 0.09521\nvn -0.7468 0.6457 0.1595\nv -0.001336 -0.09993 0.093355\nvn -0.7468 0.6457 0.1595\nv -0.001639 -0.102713 0.093487\nvn -0.8631 -0.5004 -0.0685\nv -0.001443 -0.103376 0.09586\nvn -0.8631 -0.5004 -0.0685\nv -0.001944 -0.102453 0.09543\nvn -0.8631 -0.5004 -0.0685\nv -0.000958 -0.099052 0.091846\nvn -0.6269 0.7315 0.2683\nv -0.001336 -0.09993 0.093355\nvn -0.6269 0.7315 0.2683\nv -0.000862 -0.099828 0.094186\nvn -0.6269 0.7315 0.2683\nv -0.00181 -0.100261 0.092474\nvn -0.893 0.4313 0.1285\nv -0.001896 -0.101231 0.095136\nvn -0.893 0.4313 0.1285\nv -0.001657 -0.100759 0.09521\nvn -0.893 0.4313 0.1285\nv 0.001657 -0.096687 0.084443\nvn 0.0193 0.9793 -0.2017\nv -0.000927 -0.103317 0.093305\nvn -0.6615 -0.7346 -0.1506\nv -0.001443 -0.103376 0.09586\nvn -0.6615 -0.7346 -0.1506\nv -0.001639 -0.102713 0.093487\nvn -0.6615 -0.7346 -0.1506\nv -0.000927 -0.103317 0.093305\nvn -0.5039 -0.8551 -0.1215\nv -0.000529 -0.10391 0.095832\nvn -0.5039 -0.8551 -0.1215\nv -0.001443 -0.103376 0.09586\nvn -0.5039 -0.8551 -0.1215\nv -0.001896 -0.10173 0.091979\nvn -0.9191 -0.3829 -0.0931\nv -0.001639 -0.102713 0.093487\nvn -0.9191 -0.3829 -0.0931\nv -0.001944 -0.102453 0.09543\nvn -0.9191 -0.3829 -0.0931\nv -0.002005 -0.101371 0.093136\nvn -0.9799 0.1954 0.0398\nv -0.001896 -0.101231 0.095136\nvn -0.9799 0.1954 0.0398\nv -0.00181 -0.100261 0.092474\nvn -0.9799 0.1954 0.0398\nv -0.001224 -0.098614 0.090597\nvn -0.4116 0.8289 0.3789\nv -0.001336 -0.09993 0.093355\nvn -0.4116 0.8289 0.3789\nv -0.000958 -0.099052 0.091846\nvn -0.4116 0.8289 0.3789\nv -0.001896 -0.10173 0.091979\nvn -0.9876 -0.1497 -0.0466\nv -0.001944 -0.102453 0.09543\nvn -0.9872 -0.1525 -0.0457\nv -0.002005 -0.101371 0.093136\nvn -0.9885 -0.143 -0.0488\nv -0.001665 -0.098875 0.090068\nvn -0.8201 0.5158 0.2477\nv -0.00181 -0.100261 0.092474\nvn -0.8201 0.5158 0.2477\nv -0.001336 -0.09993 0.093355\nvn -0.8201 0.5158 0.2477\nv -0.001665 -0.098875 0.090068\nvn -0.7137 0.643 0.2779\nv -0.001336 -0.09993 0.093355\nvn -0.7137 0.643 0.2779\nv -0.001224 -0.098614 0.090597\nvn -0.7137 0.643 0.2779\nv 0.000109 -0.103546 0.093321\nvn -0.2093 -0.9588 -0.1921\nv -0.000529 -0.10391 0.095832\nvn -0.2093 -0.9588 -0.1921\nv -0.000927 -0.103317 0.093305\nvn -0.2093 -0.9588 -0.1921\nv -0.001979 -0.099486 0.089705\nvn -0.9136 0.3737 0.1603\nv -0.00181 -0.100261 0.092474\nvn -0.9136 0.3737 0.1603\nv -0.001665 -0.098875 0.090068\nvn -0.9136 0.3737 0.1603\nv -0.000422 -0.097678 0.089839\nvn -0.3023 0.8222 0.4822\nv -0.000958 -0.099052 0.091846\nvn -0.3023 0.8222 0.4822\nv -0.000118 -0.098862 0.092048\nvn -0.3023 0.8222 0.4822\nv -0.001581 -0.101804 0.09056\nvn -0.8617 -0.4796 -0.1659\nv -0.001639 -0.102713 0.093487\nvn -0.8617 -0.4796 -0.1659\nv -0.001896 -0.10173 0.091979\nvn -0.8617 -0.4796 -0.1659\nv -0.001979 -0.099486 0.089705\nvn -0.9614 0.2442 0.1269\nv -0.002005 -0.101371 0.093136\nvn -0.9614 0.2442 0.1269\nv -0.00181 -0.100261 0.092474\nvn -0.9614 0.2442 0.1269\nv -0.001224 -0.098614 0.090597\nvn -0.5278 0.7599 0.3794\nv -0.000958 -0.099052 0.091846\nvn -0.5278 0.7599 0.3794\nv -0.000422 -0.097678 0.089839\nvn -0.5278 0.7599 0.3794\nv -0.001073 -0.102411 0.090832\nvn -0.6631 -0.7148 -0.2224\nv -0.000927 -0.103317 0.093305\nvn -0.6631 -0.7148 -0.2224\nv -0.001639 -0.102713 0.093487\nvn -0.6631 -0.7148 -0.2224\nv -0.001073 -0.102411 0.090832\nvn -0.695 -0.6826 -0.2256\nv -0.001639 -0.102713 0.093487\nvn -0.695 -0.6826 -0.2256\nv -0.001581 -0.101804 0.09056\nvn -0.695 -0.6826 -0.2256\nv -0.001942 -0.100624 0.089789\nvn -0.9991 -0.034 -0.0262\nv -0.002005 -0.101371 0.093136\nvn -0.9991 -0.034 -0.0262\nv -0.001979 -0.099486 0.089705\nvn -0.9991 -0.034 -0.0262\nv -0.001942 -0.100624 0.089789\nvn -0.9889 -0.1402 -0.0497\nv -0.000216 -0.102633 0.090576\nvn -0.323 -0.8947 -0.3086\nv -0.000927 -0.103317 0.093305\nvn -0.323 -0.8947 -0.3086\nv -0.001073 -0.102411 0.090832\nvn -0.323 -0.8947 -0.3086\nv -0.000216 -0.102633 0.090576\nvn -0.0019 -0.9489 -0.3156\nv 0.000421 -0.102897 0.091366\nvn -0.0019 -0.9489 -0.3156\nv 0.000109 -0.103546 0.093321\nvn -0.0019 -0.9489 -0.3156\nv -0.000216 -0.102633 0.090576\nvn -0.2027 -0.936 -0.2876\nv 0.000109 -0.103546 0.093321\nvn -0.2027 -0.936 -0.2876\nv -0.000927 -0.103317 0.093305\nvn -0.2027 -0.936 -0.2876\nv -0.001581 -0.101804 0.09056\nvn -0.9018 -0.3932 -0.1793\nv -0.001896 -0.10173 0.091979\nvn -0.9018 -0.3932 -0.1793\nv -0.001942 -0.100624 0.089789\nvn -0.9018 -0.3932 -0.1793\nv -0.00123 -0.096878 0.088222\nvn -0.3575 0.7536 0.5516\nv -0.001224 -0.098614 0.090597\nvn -0.3575 0.7536 0.5516\nv -0.000422 -0.097678 0.089839\nvn -0.3575 0.7536 0.5516\nv -0.001665 -0.098875 0.090068\nvn -0.7691 0.5161 0.377\nv -0.001224 -0.098614 0.090597\nvn -0.7647 0.5193 0.3815\nv -0.00123 -0.096878 0.088222\nvn -0.766 0.5184 0.3801\nv -0.000758 -0.096087 0.087839\nvn -0.1593 0.7593 0.6309\nv -0.000422 -0.097678 0.089839\nvn -0.1593 0.7593 0.6309\nv 0.000141 -0.096051 0.088023\nvn -0.1593 0.7593 0.6309\nv -0.000981 -0.101212 0.088427\nvn -0.6258 -0.6881 -0.3671\nv -0.001073 -0.102411 0.090832\nvn -0.6258 -0.6881 -0.3671\nv -0.001581 -0.101804 0.09056\nvn -0.6258 -0.6881 -0.3671\nv -0.001825 -0.097495 0.087848\nvn -0.7703 0.5152 0.3757\nv -0.00123 -0.096878 0.088222\nvn -0.5496 0.6064 0.5747\nv -0.000422 -0.097678 0.089839\nvn -0.5496 0.6064 0.5747\nv -0.000758 -0.096087 0.087839\nvn -0.5496 0.6064 0.5747\nv -0.001631 -0.09947 0.086964\nvn -0.8546 -0.4408 -0.2744\nv -0.001581 -0.101804 0.09056\nvn -0.8546 -0.4408 -0.2744\nv -0.001942 -0.100624 0.089789\nvn -0.8546 -0.4408 -0.2744\nv -0.001825 -0.097495 0.087848\nvn -0.913 0.3137 0.2608\nv -0.001979 -0.099486 0.089705\nvn -0.913 0.3137 0.2608\nv -0.001665 -0.098875 0.090068\nvn -0.913 0.3137 0.2608\nv -0.001942 -0.100624 0.089789\nvn -0.9994 -0.0329 -0.0114\nv -0.001979 -0.099486 0.089705\nvn -0.9994 -0.0329 -0.0114\nv -0.002008 -0.09741 0.086266\nvn -0.9994 -0.0329 -0.0114\nv -0.000981 -0.101212 0.088427\nvn -0.3437 -0.8351 -0.4295\nv -0.000216 -0.102633 0.090576\nvn -0.3437 -0.8351 -0.4295\nv -0.001073 -0.102411 0.090832\nvn -0.3437 -0.8351 -0.4295\nv -0.000981 -0.101212 0.088427\nvn -0.7288 -0.5788 -0.3658\nv -0.001581 -0.101804 0.09056\nvn -0.7288 -0.5788 -0.3658\nv -0.001631 -0.09947 0.086964\nvn -0.7288 -0.5788 -0.3658\nv 2.1e-05 -0.101264 0.088003\nvn -0.2434 -0.8468 -0.4729\nv -0.000216 -0.102633 0.090576\nvn -0.2434 -0.8468 -0.4729\nv -0.000981 -0.101212 0.088427\nvn -0.2434 -0.8468 -0.4729\nv -0.001891 -0.098507 0.086666\nvn -0.9186 -0.3199 -0.2321\nv -0.001631 -0.09947 0.086964\nvn -0.9186 -0.3199 -0.2321\nv -0.001942 -0.100624 0.089789\nvn -0.9186 -0.3199 -0.2321\nv -0.001954 -0.097299 0.087019\nvn -0.9403 0.2681 0.2096\nv -0.001979 -0.099486 0.089705\nvn -0.9403 0.2681 0.2096\nv -0.001825 -0.097495 0.087848\nvn -0.9403 0.2681 0.2096\nv -0.002008 -0.09741 0.086266\nvn -0.9948 0.0834 0.0587\nv -0.001979 -0.099486 0.089705\nvn -0.9948 0.0834 0.0587\nv -0.001954 -0.097299 0.087019\nvn -0.9948 0.0834 0.0587\nv -0.001891 -0.098507 0.086666\nvn -0.9822 -0.1477 -0.1164\nv -0.001942 -0.100624 0.089789\nvn -0.9822 -0.1477 -0.1164\nv -0.002008 -0.09741 0.086266\nvn -0.9822 -0.1477 -0.1164\nv 0.000175 -0.09594 0.087924\nvn 0.0192 0.9794 -0.2012\nv -0.001825 -0.097495 0.087848\nvn -0.7577 0.4368 0.4849\nv -0.001506 -0.096082 0.087074\nvn -0.7578 0.4367 0.4848\nv -0.001769 -0.096149 0.086723\nvn -0.7578 0.4367 0.4848\nv -0.001076 -0.09941 0.086126\nvn -0.6316 -0.6229 -0.4616\nv -0.000981 -0.101212 0.088427\nvn -0.6316 -0.6229 -0.4616\nv -0.001631 -0.09947 0.086964\nvn -0.6316 -0.6229 -0.4616\nv -0.000758 -0.096087 0.087839\nvn -0.1828 0.6048 0.7751\nv 0.000102 -0.095938 0.087926\nvn -0.1828 0.6045 0.7753\nv -0.000732 -0.095959 0.087746\nvn -0.1828 0.6048 0.7751\nv -0.000417 -0.099631 0.085985\nvn 0.0214 -0.7123 -0.7015\nv 6.2e-05 -0.097779 0.084119\nvn 0.0214 -0.7123 -0.7015\nv 0.000198 -0.100079 0.086459\nvn 0.0214 -0.7123 -0.7015\nv 0.001656 -0.100719 0.095123\nvn 0.6587 0.7524 0.0083\nv 0.001231 -0.100358 0.096168\nvn 0.6587 0.7524 0.0083\nv 0.001795 -0.100998 0.109492\nvn 0.6587 0.7524 0.0083\nv 0.001656 -0.100719 0.095123\nvn 0.962 0.2731 -0.004\nv 0.001795 -0.100998 0.109492\nvn 0.962 0.2731 -0.004\nv 0.002011 -0.10176 0.109329\nvn 0.962 0.2731 -0.004\nv 0.00195 -0.101396 0.095135\nvn 0.9173 0.3982 0.0063\nv 0.001656 -0.100719 0.095123\nvn 0.9173 0.3982 0.0063\nv 0.002011 -0.10176 0.109329\nvn 0.9173 0.3982 0.0063\nv -0.001896 -0.101231 0.095136\nvn -0.9753 0.2208 0.0034\nv -0.002018 -0.101996 0.109743\nvn -0.9753 0.2208 0.0034\nv -0.001815 -0.101078 0.108505\nvn -0.9753 0.2208 0.0034\nv 0.001997 -0.102176 0.095726\nvn 0.9983 0.0579 -0.0028\nv 0.00195 -0.101396 0.095135\nvn 0.9983 0.0579 -0.0028\nv 0.002011 -0.10176 0.109329\nvn 0.9983 0.0579 -0.0028\nv -0.001896 -0.101231 0.095136\nvn -0.8889 0.4579 0.0165\nv -0.002005 -0.101371 0.093136\nvn -0.8889 0.4579 0.0165\nv -0.002018 -0.101996 0.109743\nvn -0.8889 0.4579 0.0165\nv -0.001657 -0.100759 0.09521\nvn -0.8924 0.4512 0.0002\nv -0.001896 -0.101231 0.095136\nvn -0.8924 0.4512 0.0002\nv -0.001815 -0.101078 0.108505\nvn -0.8924 0.4512 0.0002\nv -0.001306 -0.100439 0.096063\nvn -0.7567 0.6538 0.0026\nv -0.001815 -0.101078 0.108505\nvn -0.7567 0.6538 0.0026\nv -0.001126 -0.100281 0.108624\nvn -0.7567 0.6538 0.0026\nv -0.001306 -0.100439 0.096063\nvn -0.6858 0.7277 0.0093\nv -0.001657 -0.100759 0.09521\nvn -0.6858 0.7277 0.0093\nv -0.001815 -0.101078 0.108505\nvn -0.6858 0.7277 0.0093\nv -0.000647 -0.100052 0.096175\nvn -0.5059 0.8626 -0.0036\nv -0.001306 -0.100439 0.096063\nvn -0.5059 0.8626 -0.0036\nv -0.001126 -0.100281 0.108624\nvn -0.5059 0.8626 -0.0036\nv -0.000647 -0.100052 0.096175\nvn -0.2734 0.9619 0.0071\nv -0.001126 -0.100281 0.108624\nvn -0.2734 0.9619 0.0071\nv 5.9e-05 -0.099942 0.108408\nvn -0.2734 0.9619 0.0071\nv 0.000353 -0.099985 0.096272\nvn -0.067 0.9977 -0.0051\nv -0.000647 -0.100052 0.096175\nvn -0.067 0.9977 -0.0051\nv 5.9e-05 -0.099942 0.108408\nvn -0.067 0.9977 -0.0051\nv 0.000353 -0.099985 0.096272\nvn 0.3442 0.9389 0.005\nv 5.9e-05 -0.099942 0.108408\nvn 0.3442 0.9389 0.005\nv 0.001293 -0.100396 0.108641\nvn 0.3442 0.9389 0.005\nv 0.001231 -0.100358 0.096168\nvn 0.3913 0.9203 0.0008\nv 0.000353 -0.099985 0.096272\nvn 0.3913 0.9203 0.0008\nv 0.001293 -0.100396 0.108641\nvn 0.3913 0.9203 0.0008\nv 0.001231 -0.100358 0.096168\nvn 0.7696 0.6385 -0.0019\nv 0.001293 -0.100396 0.108641\nvn 0.7696 0.6385 -0.0019\nv 0.001795 -0.100998 0.109492\nvn 0.7696 0.6385 -0.0019\nv 0.000533 -0.099905 0.118336\nvn 0.4767 -0.6996 0.5323\nv 0.000654 -0.101289 0.116408\nvn 0.4767 -0.6996 0.5323\nv 0.001339 -0.099498 0.118148\nvn 0.4767 -0.6996 0.5323\nv 0.001337 -0.094486 0.118583\nvn 0.6104 0.4984 -0.6156\nv 0.001332 -0.096335 0.117081\nvn 0.6104 0.4984 -0.6156\nv 0.000858 -0.096671 0.116339\nvn 0.6104 0.4984 -0.6156\nv 0.001337 -0.094486 0.118583\nvn 0.4083 0.6089 -0.6801\nv 0.000858 -0.096671 0.116339\nvn 0.4083 0.6089 -0.6801\nv 0.000439 -0.094626 0.117918\nvn 0.4083 0.6089 -0.6801\nv 0.002004 -0.093524 0.121112\nvn 0.9314 0.2421 -0.2719\nv 0.001995 -0.098057 0.117044\nvn 0.9314 0.2421 -0.2719\nv 0.001941 -0.095665 0.118991\nvn 0.9314 0.2421 -0.2719\nv 0.000533 -0.099905 0.118336\nvn 0.1027 -0.8049 0.5844\nv -0.000196 -0.100077 0.118227\nvn 0.1027 -0.8049 0.5844\nv 0.000654 -0.101289 0.116408\nvn 0.1027 -0.8049 0.5844\nv 0.001977 -0.098451 0.117572\nvn 0.9996 -0.0218 0.0175\nv 0.001995 -0.098057 0.117044\nvn 0.9996 -0.0195 0.0192\nv 0.002004 -0.093524 0.121112\nvn 0.9996 -0.0193 0.0193\nv 0.001901 -0.094151 0.119814\nvn 0.9035 0.2226 -0.3662\nv 0.001941 -0.095665 0.118991\nvn 0.9035 0.2226 -0.3662\nv 0.001332 -0.096335 0.117081\nvn 0.9035 0.2226 -0.3662\nv 0.001901 -0.094151 0.119814\nvn 0.7977 0.3789 -0.4691\nv 0.001332 -0.096335 0.117081\nvn 0.7977 0.3789 -0.4691\nv 0.001337 -0.094486 0.118583\nvn 0.7977 0.3789 -0.4691\nv 0.001843 -0.096817 0.119805\nvn 0.9425 -0.2402 0.2323\nv 0.001759 -0.099121 0.117764\nvn 0.9425 -0.2402 0.2323\nv 0.001977 -0.098451 0.117572\nvn 0.9425 -0.2402 0.2323\nv 0.000894 -0.093439 0.118854\nvn 0.2194 0.551 -0.8051\nv 0.000439 -0.094626 0.117918\nvn 0.2194 0.551 -0.8051\nv -0.000134 -0.092805 0.119008\nvn 0.2194 0.551 -0.8051\nv 0.001843 -0.096817 0.119805\nvn 0.7874 -0.4243 0.4471\nv 0.001339 -0.099498 0.118148\nvn 0.783 -0.4268 0.4525\nv 0.001759 -0.099121 0.117764\nvn 0.7889 -0.4234 0.4453\nv 0.001167 -0.097962 0.119891\nvn 0.7815 -0.4276 0.4544\nv 0.000981 -0.100065 0.109608\nvn 0.3703 0.909 -0.1916\nv 0.001293 -0.100396 0.108641\nvn 0.3703 0.909 -0.1916\nv 5.9e-05 -0.099942 0.108408\nvn 0.3703 0.909 -0.1916\nv 0.000894 -0.093439 0.118854\nvn 0.5005 0.4098 -0.7626\nv 0.001337 -0.094486 0.118583\nvn 0.5005 0.4098 -0.7626\nv 0.000439 -0.094626 0.117918\nvn 0.5005 0.4098 -0.7626\nv 0.001843 -0.096817 0.119805\nvn 0.986 -0.1009 0.133\nv 0.001977 -0.098451 0.117572\nvn 0.986 -0.1009 0.133\nv 0.002004 -0.093524 0.121112\nvn 0.986 -0.1009 0.133\nv 0.001995 -0.098057 0.117044\nvn 0.9891 0.1059 -0.1028\nv 0.001911 -0.098988 0.115277\nvn 0.9891 0.1059 -0.1028\nv 0.001941 -0.095665 0.118991\nvn 0.9891 0.1059 -0.1028\nv 0.000894 -0.093439 0.118854\nvn 0.1223 0.4167 -0.9008\nv -0.000134 -0.092805 0.119008\nvn 0.1223 0.4167 -0.9008\nv 0.000836 -0.091867 0.119574\nvn 0.1223 0.4167 -0.9008\nv 0.00029 -0.099582 0.110711\nvn -0.1451 0.9797 -0.1386\nv 5.9e-05 -0.099942 0.108408\nvn -0.1451 0.9797 -0.1386\nv -0.000265 -0.099822 0.109598\nvn -0.1451 0.9797 -0.1386\nv 0.001167 -0.097962 0.119891\nvn 0.4653 -0.6406 0.6108\nv 0.000533 -0.099905 0.118336\nvn 0.4653 -0.6406 0.6108\nv 0.001339 -0.099498 0.118148\nvn 0.4653 -0.6406 0.6108\nv 0.000981 -0.100065 0.109608\nvn 0.3552 0.9175 -0.1791\nv 5.9e-05 -0.099942 0.108408\nvn 0.3552 0.9175 -0.1791\nv 0.00029 -0.099582 0.110711\nvn 0.3552 0.9175 -0.1791\nv -4e-05 -0.097982 0.120397\nvn 0.3018 -0.6537 0.6939\nv 0.000533 -0.099905 0.118336\nvn 0.3018 -0.6537 0.6939\nv 0.001167 -0.097962 0.119891\nvn 0.3018 -0.6537 0.6939\nv -4e-05 -0.097982 0.120397\nvn 0.0668 -0.7202 0.6906\nv -0.000196 -0.100077 0.118227\nvn 0.0668 -0.7202 0.6906\nv 0.000533 -0.099905 0.118336\nvn 0.0668 -0.7202 0.6906\nv 0.001452 -0.099918 0.111828\nvn 0.4533 0.878 -0.1541\nv 0.001293 -0.100396 0.108641\nvn 0.4533 0.878 -0.1541\nv 0.000981 -0.100065 0.109608\nvn 0.4533 0.878 -0.1541\nv 0.001795 -0.100998 0.109492\nvn 0.84 0.5288 -0.121\nv 0.001293 -0.100396 0.108641\nvn 0.84 0.5288 -0.121\nv 0.001452 -0.099918 0.111828\nvn 0.84 0.5288 -0.121\nv 0.000999 -0.09957 0.111583\nvn 0.2747 0.9321 -0.2359\nv 0.000981 -0.100065 0.109608\nvn 0.2747 0.9321 -0.2359\nv 0.00029 -0.099582 0.110711\nvn 0.2747 0.9321 -0.2359\nv 0.001519 -0.095801 0.121112\nvn 0.7583 -0.41 0.5068\nv 0.001167 -0.097962 0.119891\nvn 0.7583 -0.41 0.5068\nv 0.001843 -0.096817 0.119805\nvn 0.7583 -0.41 0.5068\nv 0.001605 -0.092185 0.120127\nvn 0.5504 0.4202 -0.7215\nv 0.001337 -0.094486 0.118583\nvn 0.5504 0.4202 -0.7215\nv 0.000894 -0.093439 0.118854\nvn 0.5504 0.4202 -0.7215\nv 0.001605 -0.092185 0.120127\nvn 0.6382 0.3395 -0.691\nv 0.000894 -0.093439 0.118854\nvn 0.6382 0.3395 -0.691\nv 0.000836 -0.091867 0.119574\nvn 0.6382 0.3395 -0.691\nv -4e-05 -0.097982 0.120397\nvn 0.3141 -0.6133 0.7247\nv 0.001167 -0.097962 0.119891\nvn 0.3141 -0.6133 0.7247\nv 0.000664 -0.096492 0.121353\nvn 0.3141 -0.6133 0.7247\nv 0.000664 -0.096492 0.121353\nvn 0.5707 -0.4726 0.6715\nv 0.001167 -0.097962 0.119891\nvn 0.5707 -0.4726 0.6715\nv 0.001519 -0.095801 0.121112\nvn 0.5707 -0.4726 0.6715\nv 0.001452 -0.099918 0.111828\nvn 0.6601 0.7272 -0.1881\nv 0.000981 -0.100065 0.109608\nvn 0.6601 0.7272 -0.1881\nv 0.000999 -0.09957 0.111583\nvn 0.6601 0.7272 -0.1881\nv 0.001605 -0.092185 0.120127\nvn 0.8677 0.2034 -0.4535\nv 0.001901 -0.094151 0.119814\nvn 0.8677 0.2034 -0.4535\nv 0.001337 -0.094486 0.118583\nvn 0.8677 0.2034 -0.4535\nv 0.002004 -0.093524 0.121112\nvn 0.9882 0.0923 -0.1223\nv 0.001941 -0.095665 0.118991\nvn 0.9882 0.0923 -0.1223\nv 0.001901 -0.094151 0.119814\nvn 0.9882 0.0923 -0.1223\nv 0.000664 -0.096492 0.121353\nvn 0.1074 -0.5723 0.813\nv -0.000201 -0.096509 0.121455\nvn 0.1074 -0.5723 0.813\nv -4e-05 -0.097982 0.120397\nvn 0.1074 -0.5723 0.813\nv 0.001329 -0.103481 0.1088\nvn 0.8246 -0.5622 0.0625\nv 0.001865 -0.102728 0.10851\nvn 0.8246 -0.5622 0.0625\nv 0.001633 -0.102813 0.11079\nvn 0.8246 -0.5622 0.0625\nv 0.00064 -0.098892 0.112818\nvn 0.1739 0.9269 -0.3326\nv 0.00029 -0.099582 0.110711\nvn 0.1739 0.9269 -0.3326\nv -0.000431 -0.098325 0.113837\nvn 0.1739 0.9269 -0.3326\nv 0.001873 -0.10199 0.112192\nvn 0.9809 -0.1917 0.0318\nv 0.002011 -0.10176 0.109329\nvn 0.9809 -0.1917 0.0318\nv 0.001998 -0.101253 0.112777\nvn 0.9809 -0.1917 0.0318\nv 0.001873 -0.10199 0.112192\nvn 0.9837 -0.1766 0.0331\nv 0.001865 -0.102728 0.10851\nvn 0.9837 -0.1766 0.0331\nv 0.002011 -0.10176 0.109329\nvn 0.9837 -0.1766 0.0331\nv 0.00176 -0.093691 0.121858\nvn 0.9488 -0.1555 0.2751\nv 0.001843 -0.096817 0.119805\nvn 0.9488 -0.1555 0.2751\nv 0.002004 -0.093524 0.121112\nvn 0.9488 -0.1555 0.2751\nv 0.000417 -0.089937 0.120045\nvn 0.2645 0.2826 -0.9221\nv 0.000836 -0.091867 0.119574\nvn 0.2645 0.2826 -0.9221\nv -0.000134 -0.092805 0.119008\nvn 0.2645 0.2826 -0.9221\nv 0.00176 -0.093691 0.121858\nvn 0.8795 -0.2447 0.4082\nv 0.001519 -0.095801 0.121112\nvn 0.8795 -0.2447 0.4082\nv 0.001843 -0.096817 0.119805\nvn 0.8795 -0.2447 0.4082\nv 0.001855 -0.090128 0.121263\nvn 0.803 0.2102 -0.5577\nv 0.001901 -0.094151 0.119814\nvn 0.803 0.2102 -0.5577\nv 0.001605 -0.092185 0.120127\nvn 0.803 0.2102 -0.5577\nv 0.000906 -0.09442 0.122431\nvn 0.5516 -0.4347 0.7119\nv 0.000664 -0.096492 0.121353\nvn 0.5516 -0.4347 0.7119\nv 0.001519 -0.095801 0.121112\nvn 0.5516 -0.4347 0.7119\nv 0.000999 -0.09957 0.111583\nvn 0.4103 0.8443 -0.3448\nv 0.00029 -0.099582 0.110711\nvn 0.4103 0.8443 -0.3448\nv 0.00064 -0.098892 0.112818\nvn 0.4103 0.8443 -0.3448\nv 0.001633 -0.102813 0.11079\nvn 0.914 -0.3981 0.0777\nv 0.001865 -0.102728 0.10851\nvn 0.914 -0.3981 0.0777\nv 0.001873 -0.10199 0.112192\nvn 0.914 -0.3981 0.0777\nv 0.001332 -0.090226 0.120439\nvn 0.4559 0.3033 -0.8367\nv 0.000836 -0.091867 0.119574\nvn 0.4559 0.3033 -0.8367\nv 0.000417 -0.089937 0.120045\nvn 0.4559 0.3033 -0.8367\nv 0.001912 -0.100406 0.112541\nvn 0.8145 0.5628 -0.1405\nv 0.001795 -0.100998 0.109492\nvn 0.8145 0.5628 -0.1405\nv 0.001452 -0.099918 0.111828\nvn 0.8145 0.5628 -0.1405\nv 0.001401 -0.093041 0.122675\nvn 0.7709 -0.2887 0.5677\nv 0.001519 -0.095801 0.121112\nvn 0.7709 -0.2887 0.5677\nv 0.00176 -0.093691 0.121858\nvn 0.7709 -0.2887 0.5677\nv 0.00113 -0.102988 0.112132\nvn 0.6539 -0.7418 0.1489\nv 0.001329 -0.103481 0.1088\nvn 0.6539 -0.7418 0.1489\nv 0.001633 -0.102813 0.11079\nvn 0.6539 -0.7418 0.1489\nv 0.001332 -0.090226 0.120439\nvn 0.6266 0.2067 -0.7514\nv 0.001605 -0.092185 0.120127\nvn 0.6266 0.2067 -0.7514\nv 0.000836 -0.091867 0.119574\nvn 0.6266 0.2067 -0.7514\nv 0.001912 -0.100406 0.112541\nvn 0.9527 0.2895 -0.0927\nv 0.002011 -0.10176 0.109329\nvn 0.9527 0.2895 -0.0927\nv 0.001795 -0.100998 0.109492\nvn 0.9527 0.2895 -0.0927\nv 0.000906 -0.09442 0.122431\nvn 0.6504 -0.3532 0.6725\nv 0.001519 -0.095801 0.121112\nvn 0.6504 -0.3532 0.6725\nv 0.001401 -0.093041 0.122675\nvn 0.6504 -0.3532 0.6725\nv 0.000465 -0.103905 0.109017\nvn 0.4663 -0.8706 0.1567\nv 0.001329 -0.103481 0.1088\nvn 0.4663 -0.8706 0.1567\nv 0.00113 -0.102988 0.112132\nvn 0.4663 -0.8706 0.1567\nv 0.001998 -0.101253 0.112777\nvn 0.9951 0.098 -0.0108\nv 0.002011 -0.10176 0.109329\nvn 0.9951 0.098 -0.0108\nv 0.001912 -0.100406 0.112541\nvn 0.9951 0.098 -0.0108\nv 0.002004 -0.093524 0.121112\nvn 0.9937 0.048 -0.1014\nv 0.001901 -0.094151 0.119814\nvn 0.9937 0.048 -0.1014\nv 0.001855 -0.090128 0.121263\nvn 0.9937 0.048 -0.1014\nv 0.001452 -0.099918 0.111828\nvn 0.6631 0.7204 -0.2033\nv 0.000999 -0.09957 0.111583\nvn 0.6631 0.7204 -0.2033\nv 0.00064 -0.098892 0.112818\nvn 0.6631 0.7204 -0.2033\nv 0.001855 -0.090128 0.121263\nvn 0.8165 0.1997 -0.5416\nv 0.001605 -0.092185 0.120127\nvn 0.8165 0.1997 -0.5416\nv 0.001332 -0.090226 0.120439\nvn 0.8165 0.1997 -0.5416\nv 0.000385 -0.093883 0.122871\nvn 0.235 -0.47 0.8508\nv 0.000664 -0.096492 0.121353\nvn 0.235 -0.47 0.8508\nv 0.000906 -0.09442 0.122431\nvn 0.235 -0.47 0.8508\nv 0.000578 -0.103217 0.112274\nvn 0.415 -0.893 0.1743\nv 0.000465 -0.103905 0.109017\nvn 0.415 -0.893 0.1743\nv 0.00113 -0.102988 0.112132\nvn 0.415 -0.893 0.1743\nv 0.000385 -0.093883 0.122871\nvn 0.0179 -0.4776 0.8784\nv -0.000405 -0.093987 0.12283\nvn 0.0179 -0.4776 0.8784\nv -0.000201 -0.096509 0.121455\nvn 0.0179 -0.4776 0.8784\nv 0.000385 -0.093883 0.122871\nvn 0.1117 -0.4909 0.864\nv -0.000201 -0.096509 0.121455\nvn 0.1117 -0.4909 0.864\nv 0.000664 -0.096492 0.121353\nvn 0.1117 -0.4909 0.864\nv 0.00053 -0.098015 0.114376\nvn -0.0061 0.8712 -0.4909\nv 0.00064 -0.098892 0.112818\nvn -0.0061 0.8712 -0.4909\nv -0.000431 -0.098325 0.113837\nvn -0.0061 0.8712 -0.4909\nv 0.00113 -0.102988 0.112132\nvn 0.7338 -0.6521 0.1906\nv 0.001633 -0.102813 0.11079\nvn 0.7338 -0.6521 0.1906\nv 0.00151 -0.102151 0.113532\nvn 0.7338 -0.6521 0.1906\nv -0.000117 -0.103545 0.111364\nvn 0.1963 -0.9607 0.1962\nv 0.000465 -0.103905 0.109017\nvn 0.1963 -0.9607 0.1962\nv 0.000578 -0.103217 0.112274\nvn 0.1963 -0.9607 0.1962\nv 0.001873 -0.10199 0.112192\nvn 0.8368 -0.5225 0.1639\nv 0.00151 -0.102151 0.113532\nvn 0.8368 -0.5225 0.1639\nv 0.001633 -0.102813 0.11079\nvn 0.8368 -0.5225 0.1639\nv 0.001878 -0.09069 0.122654\nvn 0.9517 -0.1131 0.2855\nv 0.00176 -0.093691 0.121858\nvn 0.9517 -0.1131 0.2855\nv 0.002004 -0.093524 0.121112\nvn 0.9517 -0.1131 0.2855\nv 0.001337 -0.098122 0.115003\nvn 0.4325 0.7984 -0.419\nv 0.00064 -0.098892 0.112818\nvn 0.4325 0.7984 -0.419\nv 0.00053 -0.098015 0.114376\nvn 0.4325 0.7984 -0.419\nv 0.001391 -0.088261 0.120825\nvn 0.4623 0.1391 -0.8758\nv 0.000417 -0.089937 0.120045\nvn 0.4623 0.1391 -0.8758\nv 0.000404 -0.088094 0.120331\nvn 0.4623 0.1391 -0.8758\nv 0.001391 -0.088261 0.120825\nvn 0.4327 0.1614 -0.887\nv 0.001332 -0.090226 0.120439\nvn 0.4327 0.1614 -0.887\nv 0.000417 -0.089937 0.120045\nvn 0.4327 0.1614 -0.887\nv 0.00053 -0.098015 0.114376\nvn 0.0731 0.8023 -0.5924\nv -0.000431 -0.098325 0.113837\nvn 0.0731 0.8023 -0.5924\nv -0.00014 -0.097306 0.115253\nvn 0.0731 0.8023 -0.5924\nv 0.001337 -0.098122 0.115003\nvn 0.4671 0.7768 -0.4224\nv 0.001452 -0.099918 0.111828\nvn 0.4671 0.7768 -0.4224\nv 0.00064 -0.098892 0.112818\nvn 0.4671 0.7768 -0.4224\nv 0.001998 -0.101253 0.112777\nvn 0.9951 0.0883 -0.0452\nv 0.001912 -0.100406 0.112541\nvn 0.9951 0.0883 -0.0452\nv 0.001911 -0.098988 0.115277\nvn 0.9951 0.0883 -0.0452\nv 0.001401 -0.093041 0.122675\nvn 0.8471 -0.1671 0.5045\nv 0.00176 -0.093691 0.121858\nvn 0.8471 -0.1671 0.5045\nv 0.001878 -0.09069 0.122654\nvn 0.8471 -0.1671 0.5045\nv 0.001911 -0.098988 0.115277\nvn 0.8422 0.4818 -0.2419\nv 0.001452 -0.099918 0.111828\nvn 0.8422 0.4818 -0.2419\nv 0.001337 -0.098122 0.115003\nvn 0.8422 0.4818 -0.2419\nv 0.001911 -0.098988 0.115277\nvn 0.8557 0.4596 -0.2378\nv 0.001912 -0.100406 0.112541\nvn 0.8557 0.4596 -0.2378\nv 0.001452 -0.099918 0.111828\nvn 0.8557 0.4596 -0.2378\nv 0.001899 -0.100348 0.115582\nvn 0.9598 -0.2554 0.1165\nv 0.001873 -0.10199 0.112192\nvn 0.9598 -0.2554 0.1165\nv 0.001998 -0.101253 0.112777\nvn 0.9598 -0.2554 0.1165\nv 0.001855 -0.090128 0.121263\nvn 0.8373 0.0813 -0.5407\nv 0.001332 -0.090226 0.120439\nvn 0.8373 0.0813 -0.5407\nv 0.001391 -0.088261 0.120825\nvn 0.8373 0.0813 -0.5407\nv 0.000578 -0.103217 0.112274\nvn 0.0368 -0.9488 0.3137\nv -8.2e-05 -0.102669 0.114007\nvn 0.0368 -0.9488 0.3137\nv -0.000117 -0.103545 0.111364\nvn 0.0368 -0.9488 0.3137\nv 0.00151 -0.102151 0.113532\nvn 0.8913 -0.4106 0.1922\nv 0.001873 -0.10199 0.112192\nvn 0.8913 -0.4106 0.1922\nv 0.001899 -0.100348 0.115582\nvn 0.8913 -0.4106 0.1922\nv 0.00071 -0.09125 0.123703\nvn 0.4461 -0.3095 0.8398\nv 0.000906 -0.09442 0.122431\nvn 0.4461 -0.3095 0.8398\nv 0.001401 -0.093041 0.122675\nvn 0.4461 -0.3095 0.8398\nv 0.000858 -0.096671 0.116339\nvn 0.1078 0.8119 -0.5738\nv 0.00053 -0.098015 0.114376\nvn 0.1078 0.8119 -0.5738\nv -0.00014 -0.097306 0.115253\nvn 0.1078 0.8119 -0.5738\nv 0.000385 -0.093883 0.122871\nvn 0.3972 -0.3206 0.8599\nv 0.000906 -0.09442 0.122431\nvn 0.3972 -0.3206 0.8599\nv 0.00071 -0.09125 0.123703\nvn 0.3972 -0.3206 0.8599\nv 0.000858 -0.096671 0.116339\nvn 0.5107 0.6674 -0.542\nv 0.001337 -0.098122 0.115003\nvn 0.5107 0.6674 -0.542\nv 0.00053 -0.098015 0.114376\nvn 0.5107 0.6674 -0.542\nv 0.001949 -0.087607 0.121863\nvn 0.9206 0.0575 -0.3862\nv 0.002004 -0.093524 0.121112\nvn 0.9206 0.0575 -0.3862\nv 0.001855 -0.090128 0.121263\nvn 0.9206 0.0575 -0.3862\nv 0.000385 -0.093883 0.122871\nvn -0.0008 -0.3582 0.9336\nv -0.000166 -0.091784 0.123676\nvn -0.0008 -0.3582 0.9336\nv -0.000405 -0.093987 0.12283\nvn -0.0008 -0.3582 0.9336\nv 0.00065 -0.102261 0.114644\nvn 0.5241 -0.7861 0.3275\nv 0.00113 -0.102988 0.112132\nvn 0.5241 -0.7861 0.3275\nv 0.00151 -0.102151 0.113532\nvn 0.5241 -0.7861 0.3275\nv 0.00176 -0.088835 0.123254\nvn 0.7716 -0.1507 0.618\nv 0.001401 -0.093041 0.122675\nvn 0.7716 -0.1507 0.618\nv 0.001878 -0.09069 0.122654\nvn 0.7716 -0.1507 0.618\nv 0.001999 -0.08736 0.122572\nvn 0.997 0.0174 -0.0757\nv 0.002004 -0.093524 0.121112\nvn 0.9969 0.0189 -0.0762\nv 0.001949 -0.087607 0.121863\nvn 0.9973 0.0099 -0.0731\nv 0.001878 -0.09069 0.122654\nvn 0.9896 -0.0324 0.1402\nv 0.002004 -0.093524 0.121112\nvn 0.9896 -0.0324 0.1402\nv 0.001999 -0.08736 0.122572\nvn 0.9896 -0.0324 0.1402\nv 0.00065 -0.102261 0.114644\nvn 0.4325 -0.8407 0.3258\nv 0.000578 -0.103217 0.112274\nvn 0.4325 -0.8407 0.3258\nv 0.00113 -0.102988 0.112132\nvn 0.4325 -0.8407 0.3258\nv 0.001262 -0.089784 0.123685\nvn 0.7937 -0.1488 0.5898\nv 0.001401 -0.093041 0.122675\nvn 0.7937 -0.1488 0.5898\nv 0.00176 -0.088835 0.123254\nvn 0.7937 -0.1488 0.5898\nv 0.001519 -0.100761 0.116159\nvn 0.8581 -0.4552 0.2378\nv 0.00151 -0.102151 0.113532\nvn 0.8581 -0.4552 0.2378\nv 0.001899 -0.100348 0.115582\nvn 0.8581 -0.4552 0.2378\nv 0.00065 -0.102261 0.114644\nvn 0.1934 -0.912 0.3618\nv -8.2e-05 -0.102669 0.114007\nvn 0.1934 -0.912 0.3618\nv 0.000578 -0.103217 0.112274\nvn 0.1934 -0.912 0.3618\nv -0.000166 -0.091784 0.123676\nvn 0.164 -0.3154 0.9347\nv 0.000385 -0.093883 0.122871\nvn 0.164 -0.3154 0.9347\nv 0.00071 -0.09125 0.123703\nvn 0.164 -0.3154 0.9347\nv 0.00071 -0.09125 0.123703\nvn 0.5951 -0.2145 0.7745\nv 0.001401 -0.093041 0.122675\nvn 0.5951 -0.2145 0.7745\nv 0.001262 -0.089784 0.123685\nvn 0.5951 -0.2145 0.7745\nv 0.001899 -0.100348 0.115582\nvn 0.9903 -0.1177 0.0732\nv 0.001998 -0.101253 0.112777\nvn 0.9903 -0.1177 0.0732\nv 0.001977 -0.098451 0.117572\nvn 0.9903 -0.1177 0.0732\nv 0.000858 -0.096671 0.116339\nvn 0.2528 0.7159 -0.6509\nv -0.00014 -0.097306 0.115253\nvn 0.2528 0.7159 -0.6509\nv -7.1e-05 -0.096028 0.116685\nvn 0.2528 0.7159 -0.6509\nv 0.001949 -0.087607 0.121863\nvn 0.852 0.0909 -0.5155\nv 0.001855 -0.090128 0.121263\nvn 0.852 0.0909 -0.5155\nv 0.001391 -0.088261 0.120825\nvn 0.852 0.0909 -0.5155\nv 0.001467 -0.088051 0.123698\nvn 0.7476 -0.0939 0.6575\nv 0.001262 -0.089784 0.123685\nvn 0.7476 -0.0939 0.6575\nv 0.00176 -0.088835 0.123254\nvn 0.7476 -0.0939 0.6575\nv 0.000654 -0.101289 0.116408\nvn 0.5593 -0.7335 0.3863\nv 0.00151 -0.102151 0.113532\nvn 0.5593 -0.7335 0.3863\nv 0.001519 -0.100761 0.116159\nvn 0.5593 -0.7335 0.3863\nv 0.000654 -0.101289 0.116408\nvn 0.592 -0.7065 0.3879\nv 0.00065 -0.102261 0.114644\nvn 0.592 -0.7065 0.3879\nv 0.00151 -0.102151 0.113532\nvn 0.592 -0.7065 0.3879\nv 0.001995 -0.098057 0.117044\nvn 0.965 0.2102 -0.1567\nv 0.001998 -0.101253 0.112777\nvn 0.965 0.2102 -0.1567\nv 0.001911 -0.098988 0.115277\nvn 0.965 0.2102 -0.1567\nv 0.00071 -0.09125 0.123703\nvn 0.085 -0.188 0.9785\nv -0.000481 -0.089778 0.124089\nvn 0.085 -0.188 0.9785\nv -0.000166 -0.091784 0.123676\nvn 0.085 -0.188 0.9785\nv 0.001998 -0.101253 0.112777\nvn 0.9996 -0.022 0.0173\nv 0.000679 -0.08849 0.124203\nvn 0.4414 -0.1553 0.8838\nv 0.00071 -0.09125 0.123703\nvn 0.4414 -0.1553 0.8838\nv 0.001262 -0.089784 0.123685\nvn 0.4414 -0.1553 0.8838\nv 0.001332 -0.096335 0.117081\nvn 0.4345 0.6834 -0.5867\nv 0.001337 -0.098122 0.115003\nvn 0.4345 0.6834 -0.5867\nv 0.000858 -0.096671 0.116339\nvn 0.4345 0.6834 -0.5867\nv 0.00176 -0.088835 0.123254\nvn 0.9607 -0.028 0.2763\nv 0.001878 -0.09069 0.122654\nvn 0.9607 -0.028 0.2763\nv 0.001999 -0.08736 0.122572\nvn 0.9607 -0.028 0.2763\nv 0.000679 -0.08849 0.124203\nvn 0.0994 -0.1766 0.9793\nv -0.000481 -0.089778 0.124089\nvn 0.0994 -0.1766 0.9793\nv 0.00071 -0.09125 0.123703\nvn 0.0994 -0.1766 0.9793\nv 0.000654 -0.101289 0.116408\nvn 0.0683 -0.8739 0.4813\nv -0.000557 -0.101738 0.115765\nvn 0.0685 -0.8739 0.4813\nv -8.2e-05 -0.102669 0.114007\nvn 0.0682 -0.8739 0.4814\nv 0.00065 -0.102261 0.114644\nvn 0.0679 -0.8738 0.4814\nv 0.001941 -0.095665 0.118991\nvn 0.7692 0.4853 -0.4157\nv 0.001337 -0.098122 0.115003\nvn 0.7692 0.4853 -0.4157\nv 0.001332 -0.096335 0.117081\nvn 0.7692 0.4853 -0.4157\nv 0.001941 -0.095665 0.118991\nvn 0.8208 0.4223 -0.3846\nv 0.001911 -0.098988 0.115277\nvn 0.8208 0.4223 -0.3846\nv 0.001337 -0.098122 0.115003\nvn 0.8208 0.4223 -0.3846\nv 0.000679 -0.08849 0.124203\nvn 0.0612 -0.1429 0.9878\nv -4.2e-05 -0.087863 0.124339\nvn 0.0612 -0.1429 0.9878\nv -0.000481 -0.089778 0.124089\nvn 0.0612 -0.1429 0.9878\nv 0.000679 -0.08849 0.124203\nvn 0.5666 -0.0736 0.8207\nv 0.001262 -0.089784 0.123685\nvn 0.5666 -0.0736 0.8207\nv 0.001467 -0.088051 0.123698\nvn 0.5666 -0.0736 0.8207\nv 0.001759 -0.099121 0.117764\nvn 0.8702 -0.4037 0.2826\nv 0.001519 -0.100761 0.116159\nvn 0.8702 -0.4037 0.2826\nv 0.001899 -0.100348 0.115582\nvn 0.8702 -0.4037 0.2826\nv 0.001339 -0.099498 0.118148\nvn 0.7864 -0.4869 0.3802\nv 0.001519 -0.100761 0.116159\nvn 0.7864 -0.4869 0.3802\nv 0.001759 -0.099121 0.117764\nvn 0.7864 -0.4869 0.3802\nv 0.001759 -0.099121 0.117764\nvn 0.9469 -0.2505 0.2014\nv 0.001899 -0.100348 0.115582\nvn 0.9469 -0.2505 0.2014\nv 0.001977 -0.098451 0.117572\nvn 0.9469 -0.2505 0.2014\nv 0.000439 -0.094626 0.117918\nvn 0.145 0.6232 -0.7685\nv 0.000858 -0.096671 0.116339\nvn 0.145 0.6232 -0.7685\nv -7.1e-05 -0.096028 0.116685\nvn 0.145 0.6232 -0.7685\nv 0.000654 -0.101289 0.116408\nvn 0.0112 -0.8297 0.5582\nv -0.000196 -0.100077 0.118227\nvn 0.0112 -0.8297 0.5582\nv -0.000557 -0.101738 0.115765\nvn 0.0112 -0.8297 0.5582\nv 0.001339 -0.099498 0.118148\nvn 0.5537 -0.6795 0.4814\nv 0.000654 -0.101289 0.116408\nvn 0.5537 -0.6795 0.4814\nv 0.001519 -0.100761 0.116159\nvn 0.5537 -0.6795 0.4814\nv 0.001949 -0.087607 0.121863\nvn 0.8854 -0.0187 -0.4645\nv 0.001391 -0.088261 0.120825\nvn 0.8854 -0.0187 -0.4645\nv 0.001695 -0.081 0.121113\nvn 0.8854 -0.0187 -0.4645\nv 0.001949 -0.087607 0.121863\nvn 0.9882 0.0208 -0.1517\nv 0.001695 -0.081 0.121113\nvn 0.9882 0.0208 -0.1517\nv 0.001967 -0.081 0.122883\nvn 0.9882 0.0208 -0.1517\nv 0.001967 -0.081 0.122883\nvn 0.9973 0.0086 -0.0727\nv -0.001994 -0.087722 0.122047\nvn -0.9471 0.0074 -0.3208\nv -0.002041 -0.081 0.122341\nvn -0.9471 0.0074 -0.3208\nv -0.001639 -0.081 0.121157\nvn -0.9471 0.0074 -0.3208\nv -0.001688 -0.088135 0.121206\nvn -0.9392 0.004 -0.3434\nv -0.001994 -0.087722 0.122047\nvn -0.9392 0.004 -0.3434\nv -0.001639 -0.081 0.121157\nvn -0.9392 0.004 -0.3434\nv -0.00107 -0.089191 0.120506\nvn -0.7495 0.0005 -0.662\nv -0.001688 -0.088135 0.121206\nvn -0.7495 0.0005 -0.662\nv -0.001639 -0.081 0.121157\nvn -0.7495 0.0005 -0.662\nv -0.00107 -0.089191 0.120506\nvn -0.5483 0.0283 -0.8358\nv -0.001639 -0.081 0.121157\nvn -0.5483 0.0283 -0.8358\nv -0.000282 -0.081 0.120266\nvn -0.5483 0.0283 -0.8358\nv -0.000601 -0.088207 0.120379\nvn -0.254 -0.0039 -0.9672\nv -0.00107 -0.089191 0.120506\nvn -0.254 -0.0039 -0.9672\nv -0.000282 -0.081 0.120266\nvn -0.254 -0.0039 -0.9672\nv 0.000404 -0.088094 0.120331\nvn -0.0462 -0.0136 -0.9988\nv -0.000601 -0.088207 0.120379\nvn -0.0462 -0.0136 -0.9988\nv -0.000282 -0.081 0.120266\nvn -0.0462 -0.0136 -0.9988\nv 0.000404 -0.088094 0.120331\nvn 0.3936 0.0297 -0.9188\nv -0.000282 -0.081 0.120266\nvn 0.3936 0.0297 -0.9188\nv 0.001695 -0.081 0.121113\nvn 0.3936 0.0297 -0.9188\nv 0.001391 -0.088261 0.120825\nvn 0.4501 0.0165 -0.8928\nv 0.000404 -0.088094 0.120331\nvn 0.4501 0.0165 -0.8928\nv 0.001695 -0.081 0.121113\nvn 0.4501 0.0165 -0.8928\nv -0.001639 -0.081 0.123526\nvn 0 1 0\nv -0.000282 -0.081 0.124416\nvn 0 1 0\nv 0.001263 -0.081 0.12392\nvn 0 1 0\nv 0.001967 -0.081 0.122883\nvn 0 1 0\nv -0.002041 -0.081 0.122341\nvn 0 1 0\nv -0.001639 -0.081 0.121157\nvn 0 1 0\nv 0.001695 -0.081 0.121113\nvn 0 1 0\nv -0.000282 -0.081 0.120266\nvn 0 1 0\nv -0.000863 -0.096791 0.083694\nvn -0.5013 -0.4544 -0.7363\nv -0.00103 -0.09718 0.084047\nvn -0.5013 -0.4544 -0.7363\nv -0.001037 -0.096767 0.083797\nvn -0.5013 -0.4544 -0.7363\nv -0.001948 -0.096232 0.086304\nvn 0.0197 0.9792 -0.2018\nv -0.001828 -0.096197 0.086487\nvn 0.0198 0.9792 -0.202\nv -0.002007 -0.096384 0.085564\nvn 0.0177 0.9792 -0.2019\nv -0.001988 -0.096343 0.085762\nvn 0.0187 0.9792 -0.2018\nv 0.001634 -0.096696 0.084396\nvn 0.0193 0.9794 -0.2011\nv -0.000246 -0.09684 0.083515\nvn 0.0193 0.9792 -0.2017\nv -0.000863 -0.096791 0.083694\nvn 0.0178 0.9787 -0.2046\nv -0.000732 -0.095959 0.087746\nvn 0.0193 0.9794 -0.2009\nv 0.000102 -0.095938 0.087926\nvn 0.0191 0.9791 -0.2027\nv -0.002008 -0.09741 0.086266\nvn -0.9968 0.0489 0.0639\nv -0.001948 -0.096232 0.086304\nvn -0.9968 0.0489 0.0639\nv -0.001988 -0.096343 0.085762\nvn -0.9968 0.0489 0.064\nv 0.001959 -0.09633 0.086204\nvn 0.0193 0.9792 -0.2018\nv 0.002001 -0.096396 0.085886\nvn 0.0193 0.9792 -0.2018\nv 0.001949 -0.096551 0.085132\nvn 0.0193 0.9792 -0.2018\nv 0.001949 -0.09708 0.086782\nvn 0.9905 0.0753 0.1149\nv 0.002001 -0.096396 0.085886\nvn 0.9905 0.0754 0.1149\nv 0.001959 -0.09633 0.086204\nvn 0.9905 0.0755 0.115\nv 0.001681 -0.096172 0.086942\nvn 0.0195 0.9792 -0.2018\nv -0.001288 -0.096727 0.083966\nvn 0.0175 0.9785 -0.2053\nv -0.001488 -0.096678 0.084183\nvn 0.0197 0.9791 -0.2022\nv -0.001769 -0.096149 0.086723\nvn 0.0199 0.9792 -0.2021\nv 0.001634 -0.096696 0.084396\nvn -0.0748 0.9972 -0.0039\nv 0.001123 -0.096737 0.083784\nvn -0.0748 0.9972 -0.0039\nv -0.000246 -0.09684 0.083515\nvn -0.0748 0.9972 -0.0039\nv -0.001266 -0.096012 0.087438\nvn 0.0195 0.9792 -0.2021\nv -0.001954 -0.097299 0.087019\nvn -0.9586 0.2051 0.1976\nv -0.001769 -0.096149 0.086723\nvn -0.9586 0.2051 0.1976\nv -0.001828 -0.096197 0.086487\nvn -0.9586 0.2051 0.1976\nv -0.001037 -0.096767 0.083797\nvn 0.017 0.978 -0.2077\nv 0.001116 -0.096033 0.087563\nvn 0.0193 0.9796 -0.1998\nv 0.00192 -0.096298 0.086352\nvn 0.0195 0.9793 -0.2017\nv -0.00103 -0.09718 0.084047\nvn -0.6932 -0.4906 -0.528\nv -0.001488 -0.096678 0.084183\nvn -0.6932 -0.4906 -0.528\nv -0.001288 -0.096727 0.083966\nvn -0.6932 -0.4906 -0.5279\nv 0.001682 -0.099203 0.086794\nvn 0.9415 -0.2417 -0.2348\nv 0.001802 -0.09721 0.087567\nvn 0.946 0.2415 0.2162\nv 0.001802 -0.09721 0.087567\nvn 0.7354 0.4111 0.5386\nv 0.000141 -0.096051 0.088023\nvn 0.3433 0.5673 0.7485\nv 0.001682 -0.099203 0.086794\nvn 0.9123 -0.281 -0.2979\nv -0.00123 -0.096878 0.088222\nvn -0.4437 0.5911 0.6736\nv -0.001891 -0.098507 0.086666\nvn -0.9572 -0.1841 -0.2234\nv -0.001631 -0.09947 0.086964\nvn -0.848 -0.3517 -0.3965\nv 6.2e-05 -0.097779 0.084119\nvn -0.2688 -0.5822 -0.7673\nv -0.00123 -0.096878 0.088222\nvn -0.7577 0.4368 0.4849\nv 0.000141 -0.096051 0.088023\nvn -0.1828 0.6048 0.7751\nv -0.001954 -0.097299 0.087019\nvn -0.9968 0.0489 0.0639\nv 0.002 -0.098298 0.087137\nvn 0.9905 0.0753 0.1148\nv -0.001825 -0.097495 0.087848\nvn -0.9586 0.2051 0.1976\nv -0.001631 -0.09947 0.086964\nvn -0.6932 -0.4906 -0.528\nv -0.015255 0.066307 0.091106\nvn -1 0.0002 0.0001\nv -0.015255 0.068456 0.075726\nvn -1 0.0001 -1.22465e-16\nv -0.015255 -0.068463 0.075729\nvn -1 0 -1.22465e-16\nv 0.015256 0.068456 0.075726\nvn 1 0.0001 1.22465e-16\nv 0.015255 0.066307 0.091106\nvn 1 0.0002 0.0001\nv 0.015255 -0.068463 0.075729\nvn 1 0 1.22465e-16\nv -0.015255 0.069319 0.075932\nvn -1 0.0002 -0.0001\nv -0.015255 0.071962 0.080031\nvn -1 0.0002 -0.0001\nv -0.015255 -0.069627 0.076031\nvn -1 -0.0001 -1.22465e-16\nv -0.015255 -0.070789 0.076844\nvn -1 -0.0001 -0.0001\nv -0.015255 -0.07159 0.077933\nvn -1 -0.0004 -0.0003\nv -0.015255 -0.071973 0.079478\nvn -1 -0.0002 -0.0002\nv -0.015255 -0.071856 0.080581\nvn -1 0 -1.22465e-16\nv -0.015255 -0.070753 0.084549\nvn -1 0.0001 -1.22465e-16\nv -0.015255 -0.069307 0.088961\nvn -1 -0.0003 0.0003\nv -0.015255 -0.066386 0.091097\nvn -1 0.0001 -1.22465e-16\nv -0.015255 -0.068472 0.090058\nvn -1 -0.0006 0.0007\nv -0.015255 -0.067587 0.090679\nvn -1 -0.0002 0.0003\nv -0.015254 0.067548 0.090704\nvn -1 -0.0011 -0.0011\nv -0.015255 0.068623 0.089922\nvn -1 -0.002 -0.0019\nv -0.015254 0.069385 0.088777\nvn -1 -0.0011 -0.001\nv -0.015255 0.071892 0.078933\nvn -1 0 0.0001\nv -0.015255 0.071552 0.077876\nvn -1 0.0002 -0.0001\nv -0.015255 0.070877 0.076943\nvn -1 0 -1.22465e-16\nv -0.015255 0.07016 0.07634\nvn -1 0 -1.22465e-16\nv -0.015254 0.070934 0.083959\nvn -1 0.0002 0.0001\nv 0.015255 -0.067587 0.090679\nvn 1 -0.0002 0.0003\nv 0.015255 -0.068472 0.090058\nvn 1 -0.0006 0.0007\nv 0.015255 -0.069307 0.088961\nvn 1 -0.0003 0.0003\nv 0.015255 -0.070753 0.084549\nvn 1 0.0001 1.22465e-16\nv 0.015255 -0.066386 0.091097\nvn 1 0.0001 1.22465e-16\nv 0.015255 -0.071856 0.080581\nvn 1 0 1.22465e-16\nv 0.015255 -0.071973 0.079478\nvn 1 -0.0002 -0.0002\nv 0.015255 -0.070789 0.076844\nvn 1 -0.0001 -0.0001\nv 0.015255 -0.07159 0.077933\nvn 1 -0.0004 -0.0003\nv 0.015255 -0.069627 0.076031\nvn 1 -0.0001 1.22465e-16\nv 0.015255 0.069319 0.075932\nvn 1 0.0002 -0.0002\nv 0.015255 0.071892 0.078933\nvn 1 0 1.22465e-16\nv 0.015255 0.07016 0.07634\nvn 1 0 1.22465e-16\nv 0.015255 0.070877 0.076943\nvn 1 0 1.22465e-16\nv 0.015255 0.071552 0.077876\nvn 1 0.0002 -0.0001\nv 0.015255 0.071962 0.080031\nvn 1 -0.0002 0.0002\nv 0.015254 0.069385 0.088777\nvn 1 -0.0011 -0.001\nv 0.015255 0.068623 0.089922\nvn 1 -0.002 -0.0019\nv 0.015254 0.067548 0.090704\nvn 1 -0.0011 -0.0011\nv 0.015254 0.070934 0.083959\nvn 1 0.0002 0.0001\nf 1//1 2//2 3//3\nf 4//4 5//5 6//6\nf 7//7 8//8 9//9\nf 10//10 11//11 12//12\nf 13//13 14//14 15//15\nf 16//16 17//17 18//18\nf 19//19 20//20 21//21\nf 22//22 23//23 24//24\nf 25//25 26//26 27//27\nf 28//28 29//29 30//30\nf 31//31 32//32 33//33\nf 34//34 35//35 36//36\nf 37//37 38//38 39//39\nf 40//40 41//41 42//42\nf 43//43 44//44 45//45\nf 46//46 47//47 48//48\nf 49//49 50//50 51//51\nf 52//52 53//53 54//54\nf 55//55 56//56 57//57\nf 58//58 59//59 60//60\nf 61//61 62//62 63//63\nf 64//64 65//65 66//66\nf 67//67 68//68 69//69\nf 70//70 71//71 72//72\nf 70//70 73//73 71//71\nf 74//74 73//73 70//70\nf 75//75 74//74 70//70\nf 76//76 77//77 78//78\nf 76//76 78//78 79//79\nf 80//80 81//81 82//82\nf 83//83 84//84 85//85\nf 86//86 87//87 88//88\nf 89//89 90//90 91//91\nf 92//92 93//93 94//94\nf 92//92 94//94 95//95\nf 96//96 97//97 98//98\nf 99//99 100//100 101//101\nf 102//102 103//103 104//104\nf 105//105 106//106 107//107\nf 108//108 106//106 105//105\nf 109//109 110//110 111//111\nf 112//112 113//113 114//114\nf 115//115 116//116 117//117\nf 115//115 118//118 116//116\nf 115//115 117//117 119//119\nf 120//120 121//121 122//122\nf 123//123 120//120 122//122\nf 124//124 125//125 126//126\nf 124//124 126//126 127//127\nf 128//128 129//129 130//130\nf 128//128 130//130 131//131\nf 132//132 133//133 134//134\nf 135//135 132//132 134//134\nf 136//136 137//137 138//138\nf 139//139 137//137 136//136\nf 140//140 141//141 142//142\nf 140//140 143//143 141//141\nf 140//140 142//142 144//144\nf 145//145 146//146 147//147\nf 148//148 149//149 150//150\nf 151//151 152//152 153//153\nf 154//154 155//155 156//156\nf 154//154 157//157 155//155\nf 158//158 159//159 160//160\nf 158//158 161//161 159//159\nf 162//162 163//163 164//164\nf 165//165 166//166 167//167\nf 168//168 169//169 170//170\nf 171//171 172//172 173//173\nf 168//168 174//174 169//169\nf 175//175 176//176 177//177\nf 178//178 176//176 175//175\nf 172//172 179//179 173//173\nf 173//173 179//179 180//180\nf 181//181 182//182 183//183\nf 184//184 185//185 186//186\nf 187//187 188//188 189//189\nf 190//190 191//191 192//192\nf 193//193 194//194 195//195\nf 188//188 196//196 189//189\nf 197//197 198//198 199//199\nf 200//200 201//201 202//202\nf 203//203 204//204 205//205\nf 206//206 207//207 208//208\nf 209//209 210//210 211//211\nf 212//212 213//213 214//214\nf 215//215 216//216 217//217\nf 218//218 184//184 186//186\nf 213//213 219//219 214//214\nf 220//220 221//221 222//222\nf 223//223 224//224 225//225\nf 225//225 224//224 226//226\nf 227//227 228//228 229//229\nf 215//215 230//230 216//216\nf 231//231 232//232 233//233\nf 234//234 235//235 236//236\nf 229//229 228//228 237//237\nf 238//238 239//239 240//240\nf 241//241 242//242 243//243\nf 244//244 180//180 179//179\nf 245//245 246//246 247//247\nf 248//248 249//249 250//250\nf 162//162 164//164 251//251\nf 252//252 253//253 254//254\nf 255//255 256//256 257//257\nf 230//230 195//195 216//216\nf 258//258 259//259 260//260\nf 261//261 262//262 263//263\nf 231//231 264//264 232//232\nf 263//263 262//262 265//265\nf 235//235 266//266 236//236\nf 257//257 256//256 267//267\nf 268//268 269//269 270//270\nf 246//246 271//271 247//247\nf 272//272 273//273 274//274\nf 193//193 195//195 230//230\nf 165//165 167//167 275//275\nf 276//276 277//277 278//278\nf 279//279 280//280 281//281\nf 282//282 283//283 284//284\nf 285//285 286//286 287//287\nf 288//288 289//289 290//290\nf 291//291 292//292 293//293\nf 294//294 295//295 296//296\nf 297//297 294//294 296//296\nf 298//298 299//299 300//300\nf 301//301 299//299 298//298\nf 302//302 303//303 304//304\nf 305//305 306//306 307//307\nf 308//308 309//309 310//310\nf 311//311 312//312 313//313\nf 314//314 315//315 316//316\nf 317//317 318//318 319//319\nf 320//320 321//321 322//322\nf 323//323 324//324 325//325\nf 323//323 326//326 324//324\nf 327//327 328//328 329//329\nf 329//329 328//328 330//330\nf 331//331 332//332 333//333\nf 334//334 332//332 331//331\nf 335//335 331//331 336//336\nf 335//335 334//334 331//331\nf 337//337 338//338 339//339\nf 340//340 338//338 337//337\nf 341//341 342//342 343//343\nf 344//344 342//342 341//341\nf 345//345 346//346 347//347\nf 348//348 349//349 350//350\nf 351//351 352//352 353//353\nf 354//354 355//355 356//356\nf 357//357 358//358 359//359\nf 357//357 360//360 358//358\nf 361//361 362//362 363//363\nf 361//361 364//364 362//362\nf 365//365 366//366 367//367\nf 368//368 369//369 370//370\nf 371//371 366//366 365//365\nf 372//372 368//368 370//370\nf 373//373 374//374 375//375\nf 376//376 377//377 378//378\nf 379//379 380//380 381//381\nf 379//379 382//382 380//380\nf 383//383 384//384 385//385\nf 386//386 387//387 388//388\nf 389//389 390//390 391//391\nf 392//392 393//393 394//394\nf 395//395 396//396 397//397\nf 398//398 399//399 400//400\nf 401//401 402//402 403//403\nf 404//404 405//405 406//406\nf 404//404 407//407 405//405\nf 408//408 409//409 410//410\nf 411//411 409//409 408//408\nf 412//412 413//413 414//414\nf 415//415 412//412 414//414\nf 416//416 415//415 414//414\nf 416//416 417//417 415//415\nf 418//418 417//417 416//416\nf 419//419 420//420 421//421\nf 422//422 423//423 424//424\nf 425//425 426//426 427//427\nf 428//428 429//429 430//430\nf 431//431 432//432 433//433\nf 434//434 435//435 436//436\nf 437//437 438//438 439//439\nf 440//440 441//441 442//442\nf 443//443 444//444 445//445\nf 446//446 447//447 448//448\nf 449//449 450//450 451//451\nf 452//452 453//453 454//454\nf 455//455 456//456 457//457\nf 455//455 458//458 456//456\nf 459//459 460//460 461//461\nf 462//462 463//463 464//464\nf 465//465 466//466 467//467\nf 465//465 467//467 468//468\nf 469//469 470//470 471//471\nf 469//469 472//472 470//470\nf 473//473 469//469 471//471\nf 474//474 466//466 465//465\nf 475//475 476//476 477//477\nf 477//477 476//476 478//478\nf 479//479 480//480 481//481\nf 482//482 477//477 478//478\nf 479//479 483//483 480//480\nf 484//484 485//485 486//486\nf 487//487 488//488 489//489\nf 490//490 491//491 492//492\nf 493//493 494//494 495//495\nf 496//496 487//487 489//489\nf 497//497 493//493 495//495\nf 498//498 499//499 500//500\nf 501//501 502//502 503//503\nf 504//504 505//505 506//506\nf 507//507 508//508 509//509\nf 510//510 511//511 512//512\nf 513//513 514//514 515//515\nf 516//516 517//517 518//518\nf 519//519 520//520 521//521\nf 522//522 523//523 524//524\nf 525//525 526//526 527//527\nf 528//528 529//529 530//530\nf 531//531 532//532 533//533\nf 534//534 535//535 536//536\nf 537//537 538//538 539//539\nf 540//540 541//541 542//542\nf 543//543 544//544 545//545\nf 546//546 547//547 548//548\nf 549//549 550//550 551//551\nf 552//552 553//553 554//554\nf 555//555 556//556 557//557\nf 558//558 559//559 560//560\nf 561//561 562//562 563//563\nf 564//564 565//565 566//566\nf 567//567 568//568 569//569\nf 570//570 571//571 572//572\nf 573//573 574//574 575//575\nf 576//576 577//577 578//578\nf 579//579 580//580 581//581\nf 582//582 583//583 584//584\nf 585//585 586//586 587//587\nf 588//588 589//589 590//590\nf 591//591 592//592 593//593\nf 594//594 595//595 596//596\nf 597//597 598//598 599//599\nf 588//588 600//600 589//589\nf 601//601 602//602 603//603\nf 604//604 605//605 606//606\nf 607//607 608//608 609//609\nf 610//610 611//611 612//612\nf 613//613 614//614 615//615\nf 616//616 617//617 618//618\nf 619//619 620//620 621//621\nf 619//619 621//621 622//622\nf 623//623 624//624 625//625\nf 623//623 625//625 626//626\nf 627//627 628//628 629//629\nf 630//630 627//627 629//629\nf 631//631 632//632 633//633\nf 631//631 633//633 634//634\nf 635//635 636//636 637//637\nf 638//638 635//635 637//637\nf 639//639 640//640 641//641\nf 642//642 643//643 644//644\nf 645//645 646//646 647//647\nf 648//648 649//649 650//650\nf 651//651 652//652 653//653\nf 654//654 655//655 656//656\nf 657//657 658//658 659//659\nf 660//660 661//661 662//662\nf 663//663 664//664 665//665\nf 666//666 667//667 668//668\nf 669//669 670//670 671//671\nf 672//672 673//673 674//674\nf 675//675 676//676 677//677\nf 678//678 679//679 680//680\nf 681//681 682//682 683//683\nf 684//684 685//685 686//686\nf 687//687 688//688 689//689\nf 690//690 691//691 692//692\nf 693//693 694//694 695//695\nf 696//696 697//697 698//698\nf 699//699 700//700 701//701\nf 701//701 700//700 702//702\nf 703//703 704//704 705//705\nf 706//706 707//707 708//708\nf 709//709 710//710 711//711\nf 711//711 710//710 712//712\nf 713//713 714//714 715//715\nf 716//716 717//717 718//718\nf 719//719 720//720 721//721\nf 722//722 723//723 724//724\nf 725//725 726//726 727//727\nf 728//728 729//729 730//730\nf 731//731 732//732 733//733\nf 734//734 735//735 736//736\nf 737//737 738//738 739//739\nf 740//740 741//741 742//742\nf 740//740 742//742 743//743\nf 744//744 745//745 746//746\nf 747//747 748//748 749//749\nf 750//750 751//751 752//752\nf 753//753 754//754 755//755\nf 756//756 757//757 758//758\nf 752//752 759//759 750//750\nf 760//760 761//761 762//762\nf 763//763 764//764 765//765\nf 766//766 767//767 768//768\nf 766//766 769//769 767//767\nf 770//770 771//771 772//772\nf 771//771 773//773 772//772\nf 774//774 775//775 776//776\nf 777//777 778//778 779//779\nf 780//780 781//781 782//782\nf 783//783 784//784 785//785\nf 783//783 785//785 786//786\nf 787//787 788//788 789//789\nf 790//790 791//791 792//792\nf 793//793 794//794 795//795\nf 796//796 797//797 798//798\nf 796//796 799//799 797//797\nf 800//800 801//801 802//802\nf 803//803 804//804 805//805\nf 806//806 807//807 808//808\nf 809//809 810//810 811//811\nf 812//812 813//813 814//814\nf 815//815 816//816 817//817\nf 818//818 819//819 820//820\nf 821//821 822//822 823//823\nf 824//824 825//825 826//826\nf 827//827 828//828 829//829\nf 830//830 831//831 832//832\nf 833//833 834//834 835//835\nf 836//836 837//837 838//838\nf 839//839 840//840 841//841\nf 842//842 843//843 844//844\nf 845//845 846//846 847//847\nf 848//848 849//849 850//850\nf 851//851 852//852 853//853\nf 854//854 855//855 856//856\nf 857//857 858//858 859//859\nf 860//860 861//861 862//862\nf 863//863 864//864 865//865\nf 866//866 867//867 868//868\nf 869//869 870//870 871//871\nf 872//872 873//873 874//874\nf 875//875 876//876 877//877\nf 878//878 879//879 880//880\nf 881//881 882//882 883//883\nf 884//884 885//885 886//886\nf 887//887 888//888 889//889\nf 890//890 891//891 892//892\nf 893//893 894//894 895//895\nf 893//893 895//895 896//896\nf 897//897 898//898 899//899\nf 900//900 901//901 902//902\nf 903//903 904//904 905//905\nf 906//906 907//907 908//908\nf 909//909 910//910 911//911\nf 912//912 913//913 914//914\nf 915//915 916//916 917//917\nf 918//918 919//919 920//920\nf 921//921 922//922 923//923\nf 924//924 925//925 926//926\nf 927//927 928//928 929//929\nf 930//930 931//931 932//932\nf 933//933 934//934 935//935\nf 936//936 937//937 938//938\nf 937//937 939//939 938//938\nf 940//940 941//941 942//942\nf 943//943 944//944 945//945\nf 946//946 947//947 948//948\nf 949//949 950//950 951//951\nf 952//952 953//953 954//954\nf 955//955 956//956 957//957\nf 958//958 959//959 960//960\nf 961//961 962//962 963//963\nf 964//964 965//965 966//966\nf 967//967 968//968 969//969\nf 970//970 971//971 972//972\nf 973//973 974//974 975//975\nf 976//976 977//977 978//978\nf 979//979 980//980 981//981\nf 982//982 983//983 984//984\nf 985//985 986//986 987//987\nf 988//988 989//989 990//990\nf 991//991 992//992 993//993\nf 994//994 995//995 996//996\nf 997//997 998//998 999//999\nf 1000//1000 1001//1001 1002//1002\nf 1003//1003 1004//1004 1005//1005\nf 1006//1006 1007//1007 1008//1008\nf 1009//1009 1010//1010 1011//1011\nf 1012//1012 1013//1013 1014//1014\nf 1015//1015 1016//1016 1017//1017\nf 1018//1018 1019//1019 1020//1020\nf 1021//1021 1022//1022 1023//1023\nf 1024//1024 1025//1025 1026//1026\nf 1027//1027 1028//1028 1029//1029\nf 1030//1030 1031//1031 1032//1032\nf 1033//1033 1034//1034 1035//1035\nf 1036//1036 1037//1037 1038//1038\nf 1039//1039 1040//1040 1041//1041\nf 1042//1042 1043//1043 1044//1044\nf 1043//1043 1045//1045 1044//1044\nf 1046//1046 1047//1047 1048//1048\nf 1049//1049 1047//1047 1046//1046\nf 1050//1050 1051//1051 1052//1052\nf 1053//1053 1054//1054 1055//1055\nf 1056//1056 1054//1054 1053//1053\nf 1057//1057 1058//1058 1059//1059\nf 1059//1059 1058//1058 1060//1060\nf 1061//1061 1062//1062 1063//1063\nf 1064//1064 1065//1065 1066//1066\nf 1067//1067 1068//1068 1069//1069\nf 1070//1070 1071//1071 1072//1072\nf 1073//1073 1074//1074 1075//1075\nf 1074//1074 1076//1076 1075//1075\nf 1077//1077 1078//1078 1079//1079\nf 1075//1075 1076//1076 1080//1080\nf 1077//1077 1081//1081 1078//1078\nf 1081//1081 1082//1082 1078//1078\nf 1076//1076 1083//1083 1080//1080\nf 1083//1083 1084//1084 1080//1080\nf 1081//1081 1085//1085 1082//1082\nf 1086//1086 1087//1087 1088//1088\nf 1089//1089 1090//1090 1091//1091\nf 1081//1081 1092//1092 1085//1085\nf 1093//1093 1090//1090 1089//1089\nf 1094//1094 1095//1095 1096//1096\nf 1097//1097 1095//1095 1094//1094\nf 1093//1093 1098//1098 1090//1090\nf 1092//1092 1095//1095 1097//1097\nf 1081//1081 1095//1095 1092//1092\nf 1099//1099 1100//1100 1101//1101\nf 1102//1102 1103//1103 1104//1104\nf 1105//1105 1106//1106 1107//1107\nf 1108//1108 1106//1106 1105//1105\nf 1109//1109 1110//1110 1111//1111\nf 1110//1110 1112//1112 1111//1111\nf 1113//1113 1114//1114 1115//1115\nf 1116//1116 1117//1117 1118//1118\nf 1119//1119 1120//1120 1121//1121\nf 1120//1120 1122//1122 1121//1121\nf 1123//1123 1124//1124 1125//1125\nf 1126//1126 1127//1127 1128//1128\nf 1129//1129 1130//1130 1131//1131\nf 1132//1132 1133//1133 1134//1134\nf 1135//1135 1136//1136 1137//1137\nf 1138//1138 1139//1139 1140//1140\nf 1141//1141 1142//1142 1143//1143\nf 1144//1144 1145//1145 1146//1146\nf 1147//1147 1148//1148 1149//1149\nf 1141//1141 1150//1150 1142//1142\nf 1151//1151 1152//1152 1153//1153\nf 1154//1154 1155//1155 1156//1156\nf 1157//1157 1158//1158 1159//1159\nf 1160//1160 1161//1161 1162//1162\nf 1163//1163 1164//1164 1165//1165\nf 1166//1166 1167//1167 1168//1168\nf 1169//1169 1170//1170 1171//1171\nf 1172//1172 1173//1173 1174//1174\nf 1175//1175 1176//1176 1177//1177\nf 1178//1178 1179//1179 1180//1180\nf 1181//1181 1182//1182 1183//1183\nf 1184//1184 1185//1185 1186//1186\nf 1187//1187 1188//1188 1189//1189\nf 1190//1190 1191//1191 1192//1192\nf 1193//1193 1194//1194 1195//1195\nf 1196//1196 1197//1197 1198//1198\nf 1199//1199 1200//1200 1201//1201\nf 1197//1197 1202//1202 1198//1198\nf 1203//1203 1204//1204 1205//1205\nf 1206//1206 1207//1207 1208//1208\nf 1209//1209 1210//1210 1211//1211\nf 1212//1212 1213//1213 1214//1214\nf 1215//1215 1216//1216 1217//1217\nf 1218//1218 1219//1219 1220//1220\nf 1221//1221 1222//1222 1223//1223\nf 1224//1224 1225//1225 1226//1226\nf 1227//1227 1228//1228 1229//1229\nf 1230//1230 1231//1231 1232//1232\nf 1233//1233 1234//1234 1235//1235\nf 1236//1236 1237//1237 1238//1238\nf 1239//1239 1240//1240 1241//1241\nf 1242//1242 1243//1243 1244//1244\nf 1245//1245 1246//1246 1247//1247\nf 1248//1248 1249//1249 1250//1250\nf 1251//1251 1252//1252 1253//1253\nf 1254//1254 1255//1255 1256//1256\nf 1257//1257 1258//1258 1259//1259\nf 1260//1260 1261//1261 1262//1262\nf 1263//1263 1264//1264 1265//1265\nf 1266//1266 1267//1267 1268//1268\nf 1269//1269 1270//1270 1271//1271\nf 1272//1272 1273//1273 1274//1274\nf 1275//1275 1276//1276 1277//1277\nf 1278//1278 1279//1279 1280//1280\nf 1281//1281 1282//1282 1283//1283\nf 1284//1284 1285//1285 1286//1286\nf 1287//1287 1288//1288 1289//1289\nf 1290//1290 1291//1291 1292//1292\nf 1293//1293 1294//1294 1295//1295\nf 1296//1296 1297//1297 1298//1298\nf 1299//1299 1300//1300 1301//1301\nf 1302//1302 1303//1303 1304//1304\nf 1305//1305 1306//1306 1307//1307\nf 1308//1308 1309//1309 1310//1310\nf 1311//1311 1312//1312 1313//1313\nf 1314//1314 1315//1315 1316//1316\nf 1317//1317 1318//1318 1319//1319\nf 1320//1320 1321//1321 1322//1322\nf 1323//1323 1324//1324 1325//1325\nf 1326//1326 1327//1327 1328//1328\nf 1329//1329 1330//1330 1331//1331\nf 1332//1332 1333//1333 1334//1334\nf 1335//1335 1336//1336 1337//1337\nf 1338//1338 1339//1339 1340//1340\nf 1341//1341 1342//1342 1343//1343\nf 1344//1344 1345//1345 1346//1346\nf 1347//1347 1348//1348 1349//1349\nf 1350//1350 1351//1351 1352//1352\nf 1353//1353 1354//1354 1355//1355\nf 1356//1356 1357//1357 1358//1358\nf 1359//1359 1360//1360 1361//1361\nf 1362//1362 1363//1363 1364//1364\nf 1365//1365 1366//1366 1367//1367\nf 1368//1368 1369//1369 1370//1370\nf 1371//1371 1372//1372 1373//1373\nf 1374//1374 1375//1375 1376//1376\nf 1377//1377 1378//1378 1379//1379\nf 1380//1380 1381//1381 1382//1382\nf 1383//1383 1384//1384 1385//1385\nf 1386//1386 1387//1387 1388//1388\nf 1389//1389 1390//1390 1391//1391\nf 1392//1392 1393//1393 1394//1394\nf 1395//1395 1396//1396 1397//1397\nf 1398//1398 1399//1399 1400//1400\nf 1401//1401 1402//1402 1403//1403\nf 1404//1404 1405//1405 1406//1406\nf 1406//1406 1405//1405 1407//1407\nf 1408//1408 1405//1405 1404//1404\nf 1407//1407 1405//1405 1409//1409\nf 1410//1410 1411//1411 1412//1412\nf 1413//1413 1414//1414 1415//1415\nf 1415//1415 1414//1414 1416//1416\nf 1417//1417 1418//1418 1419//1419\nf 1420//1420 1421//1421 1422//1422\nf 1423//1423 1424//1424 1425//1425\nf 1426//1426 1427//1427 1428//1428\nf 1429//1429 1430//1430 1431//1431\nf 1432//1432 1433//1433 1434//1434\nf 1435//1435 1436//1436 1437//1437\nf 1438//1438 1439//1439 1440//1440\nf 1441//1441 1442//1442 1443//1443\nf 1444//1444 1445//1445 1446//1446\nf 1447//1447 1448//1448 1449//1449\nf 1450//1450 1451//1451 1452//1452\nf 1453//1453 1454//1454 1455//1455\nf 1456//1456 1457//1457 1458//1458\nf 1459//1459 1460//1460 1461//1461\nf 1462//1462 1463//1463 1464//1464\nf 1465//1465 1466//1466 1467//1467\nf 1468//1468 1469//1469 1470//1470\nf 1471//1471 1472//1472 1473//1473\nf 1474//1474 1475//1475 1476//1476\nf 1474//1474 1476//1476 1477//1477\nf 1474//1474 1477//1477 1478//1478\nf 1479//1479 1474//1474 1478//1478\nf 1479//1479 1478//1478 1480//1480\nf 1479//1479 1481//1481 1474//1474\nf 1479//1479 1480//1480 1482//1482\nf 1483//1483 1484//1484 1485//1485\nf 1486//1486 1487//1487 1488//1488\nf 1489//1489 1490//1490 1491//1491\nf 1492//1492 1493//1493 1494//1494\nf 1495//1495 1496//1496 1497//1497\nf 1498//1498 1499//1499 1500//1500\nf 1501//1501 1502//1502 1503//1503\nf 1504//1504 1505//1505 1506//1506\nf 1507//1507 1508//1508 1509//1509\nf 1510//1510 1511//1511 1512//1512\nf 1513//1513 1514//1514 1515//1515\nf 1516//1516 1517//1517 1518//1518\nf 1519//1519 1520//1520 1521//1521\nf 1522//1522 1523//1523 1524//1524\nf 1525//1525 1526//1526 1527//1527\nf 1528//1528 1529//1529 1530//1530\nf 1531//1531 1532//1532 1533//1533\nf 1534//1534 1535//1535 1536//1536\nf 1537//1537 1538//1538 1539//1539\nf 1540//1540 1541//1541 1542//1542\nf 1543//1543 1541//1541 1540//1540\nf 1544//1544 1545//1545 1546//1546\nf 1547//1547 1548//1548 1549//1549\nf 1550//1550 1551//1551 1552//1552\nf 1552//1552 1543//1543 1540//1540\nf 1551//1551 1543//1543 1552//1552\nf 1553//1553 1554//1554 1555//1555\nf 1556//1556 1557//1557 1558//1558\nf 1559//1559 1560//1560 1561//1561\nf 1562//1562 1563//1563 1564//1564\nf 1565//1565 1566//1566 1567//1567\nf 1568//1568 1569//1569 1570//1570\nf 1571//1571 1572//1572 1573//1573\nf 1574//1574 1575//1575 1576//1576\nf 1577//1577 1578//1578 1579//1579\nf 1580//1580 1581//1581 1582//1582\nf 1583//1583 1584//1584 1585//1585\nf 1586//1586 1587//1587 1588//1588\nf 1589//1589 1590//1590 1591//1591\nf 1592//1592 1593//1593 1594//1594\nf 1595//1595 1596//1596 1597//1597\nf 1598//1598 1599//1599 1600//1600\nf 1601//1601 1602//1602 1603//1603\nf 1604//1604 1605//1605 1606//1606\nf 1607//1607 1608//1608 1609//1609\nf 1610//1610 1611//1611 1612//1612\nf 1613//1613 1614//1614 1615//1615\nf 1613//1613 1616//1616 1614//1614\nf 1613//1613 1617//1617 1616//1616\nf 1613//1613 1615//1615 1618//1618\nf 1618//1618 1615//1615 1611//1611\nf 1618//1618 1611//1611 1610//1610\nf 1619//1619 1620//1620 1621//1621\nf 1622//1622 1623//1623 1624//1624\nf 1625//1625 1626//1626 1627//1627\nf 1628//1628 1629//1629 1630//1630\nf 1631//1631 1632//1632 1633//1633\nf 1634//1634 1635//1635 1636//1636\nf 1637//1637 1638//1638 1639//1639\nf 1640//1640 1641//1641 1642//1642\nf 1643//1643 1644//1644 1645//1645\nf 1646//1646 1647//1647 1648//1648\nf 1649//1649 1650//1650 1651//1651\nf 1652//1652 1653//1653 1654//1654\nf 1655//1655 1656//1656 1657//1657\nf 1658//1658 1659//1659 1660//1660\nf 1661//1661 1662//1662 1663//1663\nf 1664//1664 1665//1665 1666//1666\nf 1667//1667 1668//1668 1669//1669\nf 1670//1670 1671//1671 1672//1672\nf 1673//1673 1674//1674 1675//1675\nf 1676//1676 1677//1677 1678//1678\nf 1679//1679 1680//1680 1681//1681\nf 1682//1682 1683//1683 1684//1684\nf 1685//1685 1686//1686 1687//1687\nf 1688//1688 1689//1689 1690//1690\nf 1688//1688 1691//1691 1689//1689\nf 1692//1692 1691//1691 1688//1688\nf 1693//1693 1692//1692 1688//1688\nf 1694//1694 1695//1695 1696//1696\nf 1694//1694 1696//1696 1697//1697\nf 1698//1698 1699//1699 1700//1700\nf 1701//1701 1702//1702 1703//1703\nf 1704//1704 1705//1705 1706//1706\nf 1707//1707 1708//1708 1709//1709\nf 1710//1710 1711//1711 1712//1712\nf 1710//1710 1712//1712 1713//1713\nf 1714//1714 1715//1715 1716//1716\nf 1717//1717 1718//1718 1719//1719\nf 1720//1720 1721//1721 1722//1722\nf 1723//1723 1724//1724 1725//1725\nf 1726//1726 1724//1724 1723//1723\nf 1727//1727 1728//1728 1729//1729\nf 1730//1730 1731//1731 1732//1732\nf 1733//1733 1734//1734 1735//1735\nf 1733//1733 1736//1736 1734//1734\nf 1733//1733 1735//1735 1737//1737\nf 1738//1738 1739//1739 1740//1740\nf 1741//1741 1738//1738 1740//1740\nf 1742//1742 1743//1743 1744//1744\nf 1742//1742 1744//1744 1745//1745\nf 1746//1746 1747//1747 1748//1748\nf 1746//1746 1748//1748 1749//1749\nf 1750//1750 1751//1751 1752//1752\nf 1753//1753 1750//1750 1752//1752\nf 1754//1754 1755//1755 1756//1756\nf 1757//1757 1755//1755 1754//1754\nf 1758//1758 1759//1759 1760//1760\nf 1758//1758 1761//1761 1759//1759\nf 1758//1758 1760//1760 1762//1762\nf 1763//1763 1764//1764 1765//1765\nf 1766//1766 1767//1767 1768//1768\nf 1769//1769 1770//1770 1771//1771\nf 1772//1772 1773//1773 1774//1774\nf 1772//1772 1775//1775 1773//1773\nf 1776//1776 1777//1777 1778//1778\nf 1776//1776 1779//1779 1777//1777\nf 1780//1780 1781//1781 1782//1782\nf 1783//1783 1784//1784 1785//1785\nf 1786//1786 1787//1787 1788//1788\nf 1789//1789 1790//1790 1791//1791\nf 1786//1786 1792//1792 1787//1787\nf 1793//1793 1794//1794 1795//1795\nf 1796//1796 1794//1794 1793//1793\nf 1790//1790 1797//1797 1791//1791\nf 1791//1791 1797//1797 1798//1798\nf 1799//1799 1800//1800 1801//1801\nf 1802//1802 1803//1803 1804//1804\nf 1805//1805 1806//1806 1807//1807\nf 1808//1808 1809//1809 1810//1810\nf 1811//1811 1812//1812 1813//1813\nf 1806//1806 1814//1814 1807//1807\nf 1815//1815 1816//1816 1817//1817\nf 1818//1818 1819//1819 1820//1820\nf 1821//1821 1822//1822 1823//1823\nf 1824//1824 1825//1825 1826//1826\nf 1827//1827 1828//1828 1829//1829\nf 1830//1830 1831//1831 1832//1832\nf 1833//1833 1834//1834 1835//1835\nf 1836//1836 1802//1802 1804//1804\nf 1831//1831 1837//1837 1832//1832\nf 1838//1838 1839//1839 1840//1840\nf 1841//1841 1842//1842 1843//1843\nf 1843//1843 1842//1842 1844//1844\nf 1845//1845 1846//1846 1847//1847\nf 1833//1833 1848//1848 1834//1834\nf 1849//1849 1850//1850 1851//1851\nf 1852//1852 1853//1853 1854//1854\nf 1847//1847 1846//1846 1855//1855\nf 1856//1856 1857//1857 1858//1858\nf 1859//1859 1860//1860 1861//1861\nf 1862//1862 1798//1798 1797//1797\nf 1863//1863 1864//1864 1865//1865\nf 1866//1866 1867//1867 1868//1868\nf 1780//1780 1782//1782 1869//1869\nf 1870//1870 1871//1871 1872//1872\nf 1873//1873 1874//1874 1875//1875\nf 1848//1848 1813//1813 1834//1834\nf 1876//1876 1877//1877 1878//1878\nf 1879//1879 1880//1880 1881//1881\nf 1849//1849 1882//1882 1850//1850\nf 1881//1881 1880//1880 1883//1883\nf 1853//1853 1884//1884 1854//1854\nf 1875//1875 1874//1874 1885//1885\nf 1886//1886 1887//1887 1888//1888\nf 1864//1864 1889//1889 1865//1865\nf 1890//1890 1891//1891 1892//1892\nf 1811//1811 1813//1813 1848//1848\nf 1783//1783 1785//1785 1893//1893\nf 1894//1894 1895//1895 1896//1896\nf 1897//1897 1898//1898 1899//1899\nf 1900//1900 1901//1901 1902//1902\nf 1903//1903 1904//1904 1905//1905\nf 1906//1906 1907//1907 1908//1908\nf 1909//1909 1910//1910 1911//1911\nf 1912//1912 1913//1913 1914//1914\nf 1915//1915 1912//1912 1914//1914\nf 1916//1916 1917//1917 1918//1918\nf 1919//1919 1917//1917 1916//1916\nf 1920//1920 1921//1921 1922//1922\nf 1923//1923 1924//1924 1925//1925\nf 1926//1926 1927//1927 1928//1928\nf 1929//1929 1930//1930 1931//1931\nf 1932//1932 1933//1933 1934//1934\nf 1935//1935 1936//1936 1937//1937\nf 1938//1938 1939//1939 1940//1940\nf 1941//1941 1942//1942 1943//1943\nf 1941//1941 1944//1944 1942//1942\nf 1945//1945 1946//1946 1947//1947\nf 1947//1947 1946//1946 1948//1948\nf 1949//1949 1950//1950 1951//1951\nf 1952//1952 1950//1950 1949//1949\nf 1953//1953 1949//1949 1954//1954\nf 1953//1953 1952//1952 1949//1949\nf 1955//1955 1956//1956 1957//1957\nf 1958//1958 1956//1956 1955//1955\nf 1959//1959 1960//1960 1961//1961\nf 1962//1962 1960//1960 1959//1959\nf 1963//1963 1964//1964 1965//1965\nf 1966//1966 1967//1967 1968//1968\nf 1969//1969 1970//1970 1971//1971\nf 1972//1972 1973//1973 1974//1974\nf 1975//1975 1976//1976 1977//1977\nf 1975//1975 1978//1978 1976//1976\nf 1979//1979 1980//1980 1981//1981\nf 1979//1979 1982//1982 1980//1980\nf 1983//1983 1984//1984 1985//1985\nf 1986//1986 1987//1987 1988//1988\nf 1989//1989 1984//1984 1983//1983\nf 1990//1990 1986//1986 1988//1988\nf 1991//1991 1992//1992 1993//1993\nf 1994//1994 1995//1995 1996//1996\nf 1997//1997 1998//1998 1999//1999\nf 1997//1997 2000//2000 1998//1998\nf 2001//2001 2002//2002 2003//2003\nf 2004//2004 2005//2005 2006//2006\nf 2007//2007 2008//2008 2009//2009\nf 2010//2010 2011//2011 2012//2012\nf 2013//2013 2014//2014 2015//2015\nf 2016//2016 2017//2017 2018//2018\nf 2019//2019 2020//2020 2021//2021\nf 2022//2022 2023//2023 2024//2024\nf 2022//2022 2025//2025 2023//2023\nf 2026//2026 2027//2027 2028//2028\nf 2029//2029 2027//2027 2026//2026\nf 2030//2030 2031//2031 2032//2032\nf 2033//2033 2030//2030 2032//2032\nf 2034//2034 2033//2033 2032//2032\nf 2034//2034 2035//2035 2033//2033\nf 2036//2036 2035//2035 2034//2034\nf 2037//2037 2038//2038 2039//2039\nf 2040//2040 2041//2041 2042//2042\nf 2043//2043 2044//2044 2045//2045\nf 2046//2046 2047//2047 2048//2048\nf 2049//2049 2050//2050 2051//2051\nf 2052//2052 2053//2053 2054//2054\nf 2055//2055 2056//2056 2057//2057\nf 2058//2058 2059//2059 2060//2060\nf 2061//2061 2062//2062 2063//2063\nf 2064//2064 2065//2065 2066//2066\nf 2067//2067 2068//2068 2069//2069\nf 2070//2070 2071//2071 2072//2072\nf 2073//2073 2074//2074 2075//2075\nf 2073//2073 2076//2076 2074//2074\nf 2077//2077 2078//2078 2079//2079\nf 2080//2080 2081//2081 2082//2082\nf 2083//2083 2084//2084 2085//2085\nf 2083//2083 2085//2085 2086//2086\nf 2087//2087 2088//2088 2089//2089\nf 2087//2087 2090//2090 2088//2088\nf 2091//2091 2087//2087 2089//2089\nf 2092//2092 2084//2084 2083//2083\nf 2093//2093 2094//2094 2095//2095\nf 2095//2095 2094//2094 2096//2096\nf 2097//2097 2098//2098 2099//2099\nf 2100//2100 2095//2095 2096//2096\nf 2097//2097 2101//2101 2098//2098\nf 2102//2102 2103//2103 2104//2104\nf 2105//2105 2106//2106 2107//2107\nf 2108//2108 2109//2109 2110//2110\nf 2111//2111 2112//2112 2113//2113\nf 2114//2114 2105//2105 2107//2107\nf 2115//2115 2111//2111 2113//2113\nf 2116//2116 2117//2117 2118//2118\nf 2119//2119 2120//2120 2121//2121\nf 2122//2122 2123//2123 2124//2124\nf 2125//2125 2126//2126 2127//2127\nf 2128//2128 2129//2129 2130//2130\nf 2131//2131 2132//2132 2133//2133\nf 2134//2134 2135//2135 2136//2136\nf 2137//2137 2138//2138 2139//2139\nf 2140//2140 2141//2141 2142//2142\nf 2143//2143 2144//2144 2145//2145\nf 2146//2146 2147//2147 2148//2148\nf 2149//2149 2150//2150 2151//2151\nf 2152//2152 2153//2153 2154//2154\nf 2155//2155 2156//2156 2157//2157\nf 2158//2158 2159//2159 2160//2160\nf 2161//2161 2162//2162 2163//2163\nf 2164//2164 2165//2165 2166//2166\nf 2167//2167 2168//2168 2169//2169\nf 2170//2170 2171//2171 2172//2172\nf 2173//2173 2174//2174 2175//2175\nf 2176//2176 2177//2177 2178//2178\nf 2179//2179 2180//2180 2181//2181\nf 2182//2182 2183//2183 2184//2184\nf 2185//2185 2186//2186 2187//2187\nf 2188//2188 2189//2189 2190//2190\nf 2191//2191 2192//2192 2193//2193\nf 2194//2194 2195//2195 2196//2196\nf 2197//2197 2198//2198 2199//2199\nf 2200//2200 2201//2201 2202//2202\nf 2203//2203 2204//2204 2205//2205\nf 2206//2206 2207//2207 2208//2208\nf 2209//2209 2210//2210 2211//2211\nf 2212//2212 2213//2213 2214//2214\nf 2215//2215 2216//2216 2217//2217\nf 2206//2206 2218//2218 2207//2207\nf 2219//2219 2220//2220 2221//2221\nf 2222//2222 2223//2223 2224//2224\nf 2225//2225 2226//2226 2227//2227\nf 2228//2228 2229//2229 2230//2230\nf 2231//2231 2232//2232 2233//2233\nf 2234//2234 2235//2235 2236//2236\nf 2237//2237 2238//2238 2239//2239\nf 2237//2237 2239//2239 2240//2240\nf 2241//2241 2242//2242 2243//2243\nf 2241//2241 2243//2243 2244//2244\nf 2245//2245 2246//2246 2247//2247\nf 2248//2248 2245//2245 2247//2247\nf 2249//2249 2250//2250 2251//2251\nf 2249//2249 2251//2251 2252//2252\nf 2253//2253 2254//2254 2255//2255\nf 2256//2256 2253//2253 2255//2255\nf 2257//2257 2258//2258 2259//2259\nf 2260//2260 2261//2261 2262//2262\nf 2263//2263 2264//2264 2265//2265\nf 2266//2266 2267//2267 2268//2268\nf 2269//2269 2270//2270 2271//2271\nf 2272//2272 2273//2273 2274//2274\nf 2275//2275 2276//2276 2277//2277\nf 2278//2278 2279//2279 2280//2280\nf 2281//2281 2282//2282 2283//2283\nf 2284//2284 2285//2285 2286//2286\nf 2287//2287 2288//2288 2289//2289\nf 2290//2290 2291//2291 2292//2292\nf 2293//2293 2294//2294 2295//2295\nf 2296//2296 2297//2297 2298//2298\nf 2299//2299 2300//2300 2301//2301\nf 2302//2302 2303//2303 2304//2304\nf 2305//2305 2306//2306 2307//2307\nf 2308//2308 2309//2309 2310//2310\nf 2311//2311 2312//2312 2313//2313\nf 2314//2314 2315//2315 2316//2316\nf 2317//2317 2318//2318 2319//2319\nf 2319//2319 2318//2318 2320//2320\nf 2321//2321 2322//2322 2323//2323\nf 2324//2324 2325//2325 2326//2326\nf 2327//2327 2328//2328 2329//2329\nf 2329//2329 2328//2328 2330//2330\nf 2331//2331 2332//2332 2333//2333\nf 2334//2334 2335//2335 2336//2336\nf 2337//2337 2338//2338 2339//2339\nf 2340//2340 2341//2341 2342//2342\nf 2343//2343 2344//2344 2345//2345\nf 2346//2346 2347//2347 2348//2348\nf 2349//2349 2350//2350 2351//2351\nf 2352//2352 2353//2353 2354//2354\nf 2355//2355 2356//2356 2357//2357\nf 2358//2358 2359//2359 2360//2360\nf 2358//2358 2360//2360 2361//2361\nf 2362//2362 2363//2363 2364//2364\nf 2365//2365 2366//2366 2367//2367\nf 2368//2368 2369//2369 2370//2370\nf 2371//2371 2372//2372 2373//2373\nf 2374//2374 2375//2375 2376//2376\nf 2370//2370 2377//2377 2368//2368\nf 2378//2378 2379//2379 2380//2380\nf 2381//2381 2382//2382 2383//2383\nf 2384//2384 2385//2385 2386//2386\nf 2384//2384 2387//2387 2385//2385\nf 2388//2388 2389//2389 2390//2390\nf 2389//2389 2391//2391 2390//2390\nf 2392//2392 2393//2393 2394//2394\nf 2395//2395 2396//2396 2397//2397\nf 2398//2398 2399//2399 2400//2400\nf 2401//2401 2402//2402 2403//2403\nf 2401//2401 2403//2403 2404//2404\nf 2405//2405 2406//2406 2407//2407\nf 2408//2408 2409//2409 2410//2410\nf 2411//2411 2412//2412 2413//2413\nf 2414//2414 2415//2415 2416//2416\nf 2414//2414 2417//2417 2415//2415\nf 2418//2418 2419//2419 2420//2420\nf 2421//2421 2422//2422 2423//2423\nf 2424//2424 2425//2425 2426//2426\nf 2427//2427 2428//2428 2429//2429\nf 2430//2430 2431//2431 2432//2432\nf 2433//2433 2434//2434 2435//2435\nf 2436//2436 2437//2437 2438//2438\nf 2439//2439 2440//2440 2441//2441\nf 2442//2442 2443//2443 2444//2444\nf 2445//2445 2446//2446 2447//2447\nf 2448//2448 2449//2449 2450//2450\nf 2451//2451 2452//2452 2453//2453\nf 2454//2454 2455//2455 2456//2456\nf 2457//2457 2458//2458 2459//2459\nf 2460//2460 2461//2461 2462//2462\nf 2463//2463 2464//2464 2465//2465\nf 2466//2466 2467//2467 2468//2468\nf 2469//2469 2470//2470 2471//2471\nf 2472//2472 2473//2473 2474//2474\nf 2475//2475 2476//2476 2477//2477\nf 2478//2478 2479//2479 2480//2480\nf 2481//2481 2482//2482 2483//2483\nf 2484//2484 2485//2485 2486//2486\nf 2487//2487 2488//2488 2489//2489\nf 2490//2490 2491//2491 2492//2492\nf 2493//2493 2494//2494 2495//2495\nf 2496//2496 2497//2497 2498//2498\nf 2499//2499 2500//2500 2501//2501\nf 2502//2502 2503//2503 2504//2504\nf 2505//2505 2506//2506 2507//2507\nf 2508//2508 2509//2509 2510//2510\nf 2511//2511 2512//2512 2513//2513\nf 2511//2511 2513//2513 2514//2514\nf 2515//2515 2516//2516 2517//2517\nf 2518//2518 2519//2519 2520//2520\nf 2521//2521 2522//2522 2523//2523\nf 2524//2524 2525//2525 2526//2526\nf 2527//2527 2528//2528 2529//2529\nf 2530//2530 2531//2531 2532//2532\nf 2533//2533 2534//2534 2535//2535\nf 2536//2536 2537//2537 2538//2538\nf 2539//2539 2540//2540 2541//2541\nf 2542//2542 2543//2543 2544//2544\nf 2545//2545 2546//2546 2547//2547\nf 2548//2548 2549//2549 2550//2550\nf 2551//2551 2552//2552 2553//2553\nf 2554//2554 2555//2555 2556//2556\nf 2555//2555 2557//2557 2556//2556\nf 2558//2558 2559//2559 2560//2560\nf 2561//2561 2562//2562 2563//2563\nf 2564//2564 2565//2565 2566//2566\nf 2567//2567 2568//2568 2569//2569\nf 2570//2570 2571//2571 2572//2572\nf 2573//2573 2574//2574 2575//2575\nf 2576//2576 2577//2577 2578//2578\nf 2579//2579 2580//2580 2581//2581\nf 2582//2582 2583//2583 2584//2584\nf 2585//2585 2586//2586 2587//2587\nf 2588//2588 2589//2589 2590//2590\nf 2591//2591 2592//2592 2593//2593\nf 2594//2594 2595//2595 2596//2596\nf 2597//2597 2598//2598 2599//2599\nf 2600//2600 2601//2601 2602//2602\nf 2603//2603 2604//2604 2605//2605\nf 2606//2606 2607//2607 2608//2608\nf 2609//2609 2610//2610 2611//2611\nf 2612//2612 2613//2613 2614//2614\nf 2615//2615 2616//2616 2617//2617\nf 2618//2618 2619//2619 2620//2620\nf 2621//2621 2622//2622 2623//2623\nf 2624//2624 2625//2625 2626//2626\nf 2627//2627 2628//2628 2629//2629\nf 2630//2630 2631//2631 2632//2632\nf 2633//2633 2634//2634 2635//2635\nf 2636//2636 2637//2637 2638//2638\nf 2639//2639 2640//2640 2641//2641\nf 2642//2642 2643//2643 2644//2644\nf 2645//2645 2646//2646 2647//2647\nf 2648//2648 2649//2649 2650//2650\nf 2651//2651 2652//2652 2653//2653\nf 2654//2654 2655//2655 2656//2656\nf 2657//2657 2658//2658 2659//2659\nf 2660//2660 2661//2661 2662//2662\nf 2661//2661 2663//2663 2662//2662\nf 2664//2664 2665//2665 2666//2666\nf 2667//2667 2665//2665 2664//2664\nf 2668//2668 2669//2669 2670//2670\nf 2671//2671 2672//2672 2673//2673\nf 2674//2674 2672//2672 2671//2671\nf 2675//2675 2676//2676 2677//2677\nf 2677//2677 2676//2676 2678//2678\nf 2679//2679 2680//2680 2681//2681\nf 2682//2682 2683//2683 2684//2684\nf 2685//2685 2686//2686 2687//2687\nf 2688//2688 2689//2689 2690//2690\nf 2691//2691 2692//2692 2693//2693\nf 2692//2692 2694//2694 2693//2693\nf 2695//2695 2696//2696 2697//2697\nf 2693//2693 2694//2694 2698//2698\nf 2695//2695 2699//2699 2696//2696\nf 2699//2699 2700//2700 2696//2696\nf 2694//2694 2701//2701 2698//2698\nf 2701//2701 2702//2702 2698//2698\nf 2699//2699 2703//2703 2700//2700\nf 2704//2704 2705//2705 2706//2706\nf 2707//2707 2708//2708 2709//2709\nf 2699//2699 2710//2710 2703//2703\nf 2711//2711 2708//2708 2707//2707\nf 2712//2712 2713//2713 2714//2714\nf 2715//2715 2713//2713 2712//2712\nf 2711//2711 2716//2716 2708//2708\nf 2710//2710 2713//2713 2715//2715\nf 2699//2699 2713//2713 2710//2710\nf 2717//2717 2718//2718 2719//2719\nf 2720//2720 2721//2721 2722//2722\nf 2723//2723 2724//2724 2725//2725\nf 2726//2726 2724//2724 2723//2723\nf 2727//2727 2728//2728 2729//2729\nf 2728//2728 2730//2730 2729//2729\nf 2731//2731 2732//2732 2733//2733\nf 2734//2734 2735//2735 2736//2736\nf 2737//2737 2738//2738 2739//2739\nf 2738//2738 2740//2740 2739//2739\nf 2741//2741 2742//2742 2743//2743\nf 2744//2744 2745//2745 2746//2746\nf 2747//2747 2748//2748 2749//2749\nf 2750//2750 2751//2751 2752//2752\nf 2753//2753 2754//2754 2755//2755\nf 2756//2756 2757//2757 2758//2758\nf 2759//2759 2760//2760 2761//2761\nf 2762//2762 2763//2763 2764//2764\nf 2765//2765 2766//2766 2767//2767\nf 2759//2759 2768//2768 2760//2760\nf 2769//2769 2770//2770 2771//2771\nf 2772//2772 2773//2773 2774//2774\nf 2775//2775 2776//2776 2777//2777\nf 2778//2778 2779//2779 2780//2780\nf 2781//2781 2782//2782 2783//2783\nf 2784//2784 2785//2785 2786//2786\nf 2787//2787 2788//2788 2789//2789\nf 2790//2790 2791//2791 2792//2792\nf 2793//2793 2794//2794 2795//2795\nf 2796//2796 2797//2797 2798//2798\nf 2799//2799 2800//2800 2801//2801\nf 2802//2802 2803//2803 2804//2804\nf 2805//2805 2806//2806 2807//2807\nf 2808//2808 2809//2809 2810//2810\nf 2811//2811 2812//2812 2813//2813\nf 2814//2814 2815//2815 2816//2816\nf 2817//2817 2818//2818 2819//2819\nf 2815//2815 2820//2820 2816//2816\nf 2821//2821 2822//2822 2823//2823\nf 2824//2824 2825//2825 2826//2826\nf 2827//2827 2828//2828 2829//2829\nf 2830//2830 2831//2831 2832//2832\nf 2833//2833 2834//2834 2835//2835\nf 2836//2836 2837//2837 2838//2838\nf 2839//2839 2840//2840 2841//2841\nf 2842//2842 2843//2843 2844//2844\nf 2845//2845 2846//2846 2847//2847\nf 2848//2848 2849//2849 2850//2850\nf 2851//2851 2852//2852 2853//2853\nf 2854//2854 2855//2855 2856//2856\nf 2857//2857 2858//2858 2859//2859\nf 2860//2860 2861//2861 2862//2862\nf 2863//2863 2864//2864 2865//2865\nf 2866//2866 2867//2867 2868//2868\nf 2869//2869 2870//2870 2871//2871\nf 2872//2872 2873//2873 2874//2874\nf 2875//2875 2876//2876 2877//2877\nf 2878//2878 2879//2879 2880//2880\nf 2881//2881 2882//2882 2883//2883\nf 2884//2884 2885//2885 2886//2886\nf 2887//2887 2888//2888 2889//2889\nf 2890//2890 2891//2891 2892//2892\nf 2893//2893 2894//2894 2895//2895\nf 2896//2896 2897//2897 2898//2898\nf 2899//2899 2900//2900 2901//2901\nf 2902//2902 2903//2903 2904//2904\nf 2905//2905 2906//2906 2907//2907\nf 2908//2908 2909//2909 2910//2910\nf 2911//2911 2912//2912 2913//2913\nf 2914//2914 2915//2915 2916//2916\nf 2917//2917 2918//2918 2919//2919\nf 2920//2920 2921//2921 2922//2922\nf 2923//2923 2924//2924 2925//2925\nf 2926//2926 2927//2927 2928//2928\nf 2929//2929 2930//2930 2931//2931\nf 2932//2932 2933//2933 2934//2934\nf 2935//2935 2936//2936 2937//2937\nf 2938//2938 2939//2939 2940//2940\nf 2941//2941 2942//2942 2943//2943\nf 2944//2944 2945//2945 2946//2946\nf 2947//2947 2948//2948 2949//2949\nf 2950//2950 2951//2951 2952//2952\nf 2953//2953 2954//2954 2955//2955\nf 2956//2956 2957//2957 2958//2958\nf 2959//2959 2960//2960 2961//2961\nf 2962//2962 2963//2963 2964//2964\nf 2965//2965 2966//2966 2967//2967\nf 2968//2968 2969//2969 2970//2970\nf 2971//2971 2972//2972 2973//2973\nf 2974//2974 2975//2975 2976//2976\nf 2977//2977 2978//2978 2979//2979\nf 2980//2980 2981//2981 2982//2982\nf 2983//2983 2984//2984 2985//2985\nf 2986//2986 2987//2987 2988//2988\nf 2989//2989 2990//2990 2991//2991\nf 2992//2992 2993//2993 2994//2994\nf 2995//2995 2996//2996 2997//2997\nf 2998//2998 2999//2999 3000//3000\nf 3001//3001 3002//3002 3003//3003\nf 3004//3004 3005//3005 3006//3006\nf 3007//3007 3008//3008 3009//3009\nf 3010//3010 3011//3011 3012//3012\nf 3013//3013 3014//3014 3015//3015\nf 3016//3016 3017//3017 3018//3018\nf 3019//3019 3020//3020 3021//3021\nf 3022//3022 3023//3023 3024//3024\nf 3024//3024 3023//3023 3025//3025\nf 3026//3026 3023//3023 3022//3022\nf 3025//3025 3023//3023 3027//3027\nf 3028//3028 3029//3029 3030//3030\nf 3031//3031 3032//3032 3033//3033\nf 3033//3033 3032//3032 3034//3034\nf 3035//3035 3036//3036 3037//3037\nf 3038//3038 3039//3039 3040//3040\nf 3041//3041 3042//3042 3043//3043\nf 3044//3044 3045//3045 3046//3046\nf 3047//3047 3048//3048 3049//3049\nf 3050//3050 3051//3051 3052//3052\nf 3053//3053 3054//3054 3055//3055\nf 3056//3056 3057//3057 3058//3058\nf 3059//3059 3060//3060 3061//3061\nf 3062//3062 3063//3063 3064//3064\nf 3065//3065 3066//3066 3067//3067\nf 3068//3068 3069//3069 3070//3070\nf 3071//3071 3072//3072 3073//3073\nf 3074//3074 3075//3075 3076//3076\nf 3077//3077 3078//3078 3079//3079\nf 3080//3080 3081//3081 3082//3082\nf 3083//3083 3084//3084 3085//3085\nf 3086//3086 3087//3087 3088//3088\nf 3089//3089 3090//3090 3091//3091\nf 3092//3092 3093//3093 3094//3094\nf 3092//3092 3094//3094 3095//3095\nf 3092//3092 3095//3095 3096//3096\nf 3097//3097 3092//3092 3096//3096\nf 3097//3097 3096//3096 3098//3098\nf 3097//3097 3099//3099 3092//3092\nf 3097//3097 3098//3098 3100//3100\nf 3101//3101 3102//3102 3103//3103\nf 3104//3104 3105//3105 3106//3106\nf 3107//3107 3108//3108 3109//3109\nf 3110//3110 3111//3111 3112//3112\nf 3113//3113 3114//3114 3115//3115\nf 3116//3116 3117//3117 3118//3118\nf 3119//3119 3120//3120 3121//3121\nf 3122//3122 3123//3123 3124//3124\nf 3125//3125 3126//3126 3127//3127\nf 3128//3128 3129//3129 3130//3130\nf 3131//3131 3132//3132 3133//3133\nf 3134//3134 3135//3135 3136//3136\nf 3137//3137 3138//3138 3139//3139\nf 3140//3140 3141//3141 3142//3142\nf 3143//3143 3144//3144 3145//3145\nf 3146//3146 3147//3147 3148//3148\nf 3149//3149 3150//3150 3151//3151\nf 3152//3152 3153//3153 3154//3154\nf 3155//3155 3156//3156 3157//3157\nf 3158//3158 3159//3159 3160//3160\nf 3161//3161 3159//3159 3158//3158\nf 3162//3162 3163//3163 3164//3164\nf 3165//3165 3166//3166 3167//3167\nf 3168//3168 3169//3169 3170//3170\nf 3170//3170 3161//3161 3158//3158\nf 3169//3169 3161//3161 3170//3170\nf 3171//3171 3172//3172 3173//3173\nf 3174//3174 3175//3175 3176//3176\nf 3177//3177 3178//3178 3179//3179\nf 3180//3180 3181//3181 3182//3182\nf 3183//3183 3184//3184 3185//3185\nf 3186//3186 3187//3187 3188//3188\nf 3189//3189 3190//3190 3191//3191\nf 3192//3192 3193//3193 3194//3194\nf 3195//3195 3196//3196 3197//3197\nf 3198//3198 3199//3199 3200//3200\nf 3201//3201 3202//3202 3203//3203\nf 3204//3204 3205//3205 3206//3206\nf 3207//3207 3208//3208 3209//3209\nf 3210//3210 3211//3211 3212//3212\nf 3213//3213 3214//3214 3215//3215\nf 3216//3216 3217//3217 3218//3218\nf 3219//3219 3220//3220 3221//3221\nf 3222//3222 3223//3223 3224//3224\nf 3225//3225 3226//3226 3227//3227\nf 3228//3228 3229//3229 3230//3230\nf 3231//3231 3232//3232 3233//3233\nf 3231//3231 3234//3234 3232//3232\nf 3231//3231 3235//3235 3234//3234\nf 3231//3231 3233//3233 3236//3236\nf 3236//3236 3233//3233 3229//3229\nf 3236//3236 3229//3229 3228//3228\nf 3237//3237 3238//3238 3239//3239\nf 3240//3240 3241//3241 3242//3242\nf 3243//3243 3244//3244 3245//3245\nf 3246//3246 3247//3247 3248//3248\nf 3249//3249 3250//3250 3251//3251\nf 3252//3252 3253//3253 3254//3254\nf 3255//3255 3256//3256 3257//3257\nf 3258//3258 3259//3259 3260//3260\nf 3261//3261 3262//3262 3263//3263\nf 3264//3264 3265//3265 3266//3266\nf 3267//3267 3268//3268 3269//3269\nf 3270//3270 3271//3271 3272//3272\nf 3273//3273 3274//3274 3275//3275\nf 3276//3276 3277//3277 3278//3278\nf 3279//3279 3280//3280 3281//3281\nf 3282//3282 3283//3283 3284//3284\nf 3285//3285 3286//3286 3287//3287\nf 3288//3288 3289//3289 3290//3290\nf 3291//3291 3292//3292 3293//3293\nf 3294//3294 3295//3295 3296//3296\nf 3297//3297 3298//3298 3299//3299\nf 3300//3300 3301//3301 3302//3302\nf 3303//3303 3304//3304 3305//3305\nf 3306//3306 3307//3307 3308//3308\nf 3309//3309 3310//3310 3311//3311\nf 3312//3312 3313//3313 3314//3314\nf 3315//3315 3316//3316 3317//3317\nf 3318//3318 3319//3319 3320//3320\nf 3321//3321 3322//3322 3323//3323\nf 3324//3324 3325//3325 3326//3326\nf 3327//3327 3328//3328 3329//3329\nf 3330//3330 3331//3331 3332//3332\nf 3333//3333 3334//3334 3335//3335\nf 3336//3336 3337//3337 3338//3338\nf 3339//3339 3340//3340 3341//3341\nf 3342//3342 3343//3343 3344//3344\nf 3345//3345 3346//3346 3347//3347\nf 3348//3348 3349//3349 3350//3350\nf 3351//3351 3348//3348 3350//3350\nf 3352//3352 3353//3353 3354//3354\nf 3355//3355 3356//3356 3357//3357\nf 3358//3358 3359//3359 3360//3360\nf 3361//3361 3362//3362 3363//3363\nf 3364//3364 3365//3365 3366//3366\nf 3367//3367 3368//3368 3369//3369\nf 3370//3370 3371//3371 3372//3372\nf 3373//3373 3374//3374 3375//3375\nf 3376//3376 3377//3377 3378//3378\nf 3379//3379 3380//3380 3381//3381\nf 3382//3382 3383//3383 3384//3384\nf 3385//3385 3386//3386 3387//3387\nf 3388//3388 3389//3389 3390//3390\nf 3391//3391 3392//3392 3393//3393\nf 3394//3394 3395//3395 3396//3396\nf 3397//3397 3398//3398 3399//3399\nf 3400//3400 3401//3401 3402//3402\nf 3403//3403 3404//3404 3405//3405\nf 3406//3406 3407//3407 3408//3408\nf 3409//3409 3410//3410 3411//3411\nf 3412//3412 3413//3413 3414//3414\nf 3415//3415 3416//3416 3417//3417\nf 3418//3418 3419//3419 3420//3420\nf 3421//3421 3422//3422 3423//3423\nf 3424//3424 3425//3425 3426//3426\nf 3427//3427 3428//3428 3429//3429\nf 3430//3430 3431//3431 3432//3432\nf 3433//3433 3434//3434 3435//3435\nf 3436//3436 3437//3437 3438//3438\nf 3439//3439 3440//3440 3441//3441\nf 3442//3442 3443//3443 3444//3444\nf 3445//3445 3446//3446 3447//3447\nf 3448//3448 3449//3449 3450//3450\nf 3451//3451 3452//3452 3453//3453\nf 3454//3454 3455//3455 3456//3456\nf 3457//3457 3458//3458 3459//3459\nf 3460//3460 3461//3461 3462//3462\nf 3463//3463 3464//3464 3465//3465\nf 3466//3466 3467//3467 3468//3468\nf 3469//3469 3470//3470 3471//3471\nf 3472//3472 3473//3473 3474//3474\nf 3475//3475 3476//3476 3477//3477\nf 3478//3478 3479//3479 3480//3480\nf 3481//3481 3482//3482 3483//3483\nf 3484//3484 3485//3485 3486//3486\nf 3487//3487 3488//3488 3489//3489\nf 3490//3490 3491//3491 3492//3492\nf 3493//3493 3494//3494 3495//3495\nf 3496//3496 3497//3497 3498//3498\nf 3499//3499 3500//3500 3501//3501\nf 3502//3502 3503//3503 3504//3504\nf 3505//3505 3506//3506 3507//3507\nf 3508//3508 3509//3509 3510//3510\nf 3511//3511 3512//3512 3513//3513\nf 3514//3514 3515//3515 3516//3516\nf 3517//3517 3518//3518 3519//3519\nf 3520//3520 3521//3521 3522//3522\nf 3523//3523 3524//3524 3525//3525\nf 3526//3526 3527//3527 3528//3528\nf 3529//3529 3530//3530 3531//3531\nf 3532//3532 3533//3533 3534//3534\nf 3535//3535 3536//3536 3537//3537\nf 3537//3537 3536//3536 3538//3538\nf 3539//3539 3540//3540 3541//3541\nf 3542//3542 3543//3543 3544//3544\nf 3545//3545 3546//3546 3547//3547\nf 3548//3548 3549//3549 3550//3550\nf 3551//3551 3552//3552 3553//3553\nf 3554//3554 3555//3555 3556//3556\nf 3557//3557 3558//3558 3559//3559\nf 3560//3560 3561//3561 3562//3562\nf 3563//3563 3564//3564 3565//3565\nf 3566//3566 3567//3567 3568//3568\nf 3569//3569 3570//3570 3571//3571\nf 3572//3572 3573//3573 3574//3574\nf 3575//3575 3576//3576 3577//3577\nf 3578//3578 3579//3579 3580//3580\nf 3581//3581 3582//3582 3583//3583\nf 3584//3584 3585//3585 3586//3586\nf 3587//3587 3588//3588 3589//3589\nf 3590//3590 3591//3591 3592//3592\nf 3593//3593 3594//3594 3595//3595\nf 3596//3596 3597//3597 3598//3598\nf 3599//3599 3600//3600 3601//3601\nf 3602//3602 3603//3603 3604//3604\nf 3605//3605 3606//3606 3607//3607\nf 3608//3608 3609//3609 3610//3610\nf 3611//3611 3612//3612 3613//3613\nf 3614//3614 3615//3615 3616//3616\nf 3617//3617 3618//3618 3619//3619\nf 3620//3620 3621//3621 3622//3622\nf 3623//3623 3624//3624 3625//3625\nf 3626//3626 3627//3627 3628//3628\nf 3629//3629 3630//3630 3631//3631\nf 3632//3632 3633//3633 3634//3634\nf 3635//3635 3636//3636 3637//3637\nf 3638//3638 3639//3639 3640//3640\nf 3641//3641 3642//3642 3643//3643\nf 3644//3644 3645//3645 3646//3646\nf 3647//3647 3648//3648 3649//3649\nf 3650//3650 3651//3651 3652//3652\nf 3653//3653 3654//3654 3655//3655\nf 3656//3656 3657//3657 3658//3658\nf 3659//3659 3660//3660 3661//3661\nf 3662//3662 3663//3663 3664//3664\nf 3665//3665 3662//3662 3664//3664\nf 3666//3666 3667//3667 3668//3668\nf 3669//3669 3670//3670 3671//3671\nf 3672//3672 3673//3673 3674//3674\nf 3675//3675 3676//3676 3677//3677\nf 3678//3678 3679//3679 3680//3680\nf 3681//3681 3682//3682 3683//3683\nf 3684//3684 3685//3685 3686//3686\nf 3687//3687 3688//3688 3689//3689\nf 3690//3690 3691//3691 3692//3692\nf 3693//3693 3694//3694 3695//3695\nf 3696//3696 3697//3697 3698//3698\nf 3699//3699 3700//3700 3701//3701\nf 3702//3702 3703//3703 3704//3704\nf 3705//3705 3706//3706 3707//3707\nf 3708//3708 3709//3709 3710//3710\nf 3711//3711 3712//3712 3713//3713\nf 3714//3714 3715//3715 3716//3716\nf 3717//3717 3718//3718 3719//3719\nf 3720//3720 3721//3721 3722//3722\nf 3723//3723 3724//3724 3725//3725\nf 3726//3726 3727//3727 3728//3728\nf 3729//3729 3730//3730 3731//3731\nf 3732//3732 3733//3733 3734//3734\nf 3735//3735 3736//3736 3737//3737\nf 3738//3738 3739//3739 3740//3740\nf 3741//3741 3742//3742 3743//3743\nf 3744//3744 3745//3745 3746//3746\nf 3747//3747 3748//3748 3749//3749\nf 3750//3750 3751//3751 3752//3752\nf 3752//3752 3751//3751 3753//3753\nf 3754//3754 3755//3755 3756//3756\nf 3757//3757 3758//3758 3759//3759\nf 3760//3760 3758//3758 3757//3757\nf 3761//3761 3762//3762 3763//3763\nf 3756//3756 3755//3755 3764//3764\nf 3763//3763 3762//3762 3756//3756\nf 3755//3755 3765//3765 3764//3764\nf 3745//3745 3766//3766 3746//3746\nf 3760//3760 3767//3767 3758//3758\nf 3764//3764 3767//3767 3760//3760\nf 3768//3768 3769//3769 3770//3770\nf 3764//3764 3765//3765 3767//3767\nf 3771//3771 3772//3772 3773//3773\nf 3749//3749 3748//3748 3774//3774\nf 3775//3775 3776//3776 3777//3777\nf 3748//3748 3778//3778 3774//3774\nf 3762//3762 3754//3754 3756//3756\nf 3751//3751 3779//3779 3753//3753\nf 3768//3768 3780//3780 3769//3769\nf 3781//3781 3782//3782 3783//3783\nf 3771//3771 3784//3784 3772//3772\nf 3785//3785 3780//3780 3768//3768\nf 3786//3786 3787//3787 3788//3788\nf 3789//3789 3790//3790 3791//3791\nf 3782//3782 3792//3792 3783//3783\nf 3777//3777 3776//3776 3793//3793\nf 3785//3785 3794//3794 3780//3780\nf 3795//3795 3796//3796 3752//3752\nf 3778//3778 3797//3797 3774//3774\nf 3774//3774 3797//3797 3779//3779\nf 3771//3771 3788//3788 3784//3784\nf 3798//3798 3787//3787 3786//3786\nf 3799//3799 3795//3795 3752//3752\nf 3800//3800 3794//3794 3785//3785\nf 3781//3781 3801//3801 3782//3782\nf 3746//3746 3788//3788 3771//3771\nf 3791//3791 3802//3802 3803//3803\nf 3790//3790 3802//3802 3791//3791\nf 3804//3804 3801//3801 3781//3781\nf 3766//3766 3788//3788 3746//3746\nf 3805//3805 3806//3806 3807//3807\nf 3779//3779 3808//3808 3753//3753\nf 3799//3799 3809//3809 3795//3795\nf 3753//3753 3808//3808 3810//3810\nf 3797//3797 3808//3808 3779//3779\nf 3783//3783 3792//3792 3799//3799\nf 3803//3803 3802//3802 3811//3811\nf 3812//3812 3813//3813 3814//3814\nf 3796//3796 3750//3750 3752//3752\nf 3815//3815 3816//3816 3817//3817\nf 3799//3799 3818//3818 3809//3809\nf 3819//3819 3820//3820 3821//3821\nf 3792//3792 3818//3818 3799//3799\nf 3800//3800 3822//3822 3794//3794\nf 3775//3775 3822//3822 3800//3800\nf 3786//3786 3788//3788 3766//3766\nf 3823//3823 3824//3824 3825//3825\nf 3793//3793 3826//3826 3763//3763\nf 3811//3811 3802//3802 3827//3827\nf 3793//3793 3828//3828 3826//3826\nf 3776//3776 3828//3828 3793//3793\nf 3829//3829 3830//3830 3831//3831\nf 3798//3798 3759//3759 3787//3787\nf 3809//3809 3818//3818 3747//3747\nf 3826//3826 3761//3761 3763//3763\nf 3832//3832 3833//3833 3834//3834\nf 3790//3790 3828//3828 3776//3776\nf 3835//3835 3745//3745 3744//3744\nf 3802//3802 3755//3755 3827//3827\nf 3827//3827 3755//3755 3836//3836\nf 3770//3770 3801//3801 3804//3804\nf 3837//3837 3838//3838 3839//3839\nf 3757//3757 3759//3759 3798//3798\nf 3790//3790 3789//3789 3828//3828\nf 3770//3770 3769//3769 3801//3801\nf 3822//3822 3775//3775 3777//3777\nf 3836//3836 3755//3755 3754//3754\nf 3818//3818 3748//3748 3747//3747\nf 3840//3840 3841//3841 3842//3842\nf 3843//3843 3844//3844 3845//3845\nf 3846//3846 3847//3847 3848//3848\nf 3849//3849 3850//3850 3851//3851\nf 3852//3852 3853//3853 3854//3854\nf 3855//3855 3856//3856 3857//3857\nf 3858//3858 3859//3859 3860//3860\nf 3861//3861 3862//3862 3863//3863\nf 3864//3864 3865//3865 3866//3866\nf 3867//3867 3868//3868 3869//3869\nf 3870//3870 3871//3871 3872//3872\nf 3873//3873 3874//3874 3875//3875\nf 3876//3876 3877//3877 3878//3878\nf 3879//3879 3880//3880 3881//3881\nf 3882//3882 3883//3883 3884//3884\nf 3885//3885 3886//3886 3887//3887\nf 3888//3888 3889//3889 3890//3890\nf 3891//3891 3892//3892 3893//3893\nf 3894//3894 3895//3895 3896//3896\nf 3897//3897 3898//3898 3899//3899\nf 3897//3897 3900//3900 3898//3898\nf 3901//3901 3902//3902 3903//3903\nf 3901//3901 3904//3904 3905//3905\nf 3901//3901 3905//3905 3902//3902\nf 3906//3906 3907//3907 3908//3908\nf 3909//3909 3910//3910 3911//3911\nf 3912//3912 3913//3913 3914//3914\nf 3915//3915 3916//3916 3917//3917\nf 3918//3918 3919//3919 3920//3920\nf 3921//3921 3919//3919 3918//3918\nf 3922//3922 3919//3919 3921//3921\nf 3922//3922 3923//3923 3919//3919\nf 3922//3922 3924//3924 3923//3923\nf 3925//3925 3924//3924 3922//3922\nf 3926//3926 3927//3927 3928//3928\nf 3929//3929 3930//3930 3931//3931\nf 3928//3928 3927//3927 3932//3932\nf 3933//3933 3934//3934 3935//3935\nf 3933//3933 3936//3936 3934//3934\nf 3935//3935 3937//3937 3933//3933\nf 3938//3938 3936//3936 3933//3933\nf 3938//3938 3939//3939 3936//3936\nf 3938//3938 3940//3940 3939//3939\nf 3941//3941 3940//3940 3938//3938\nf 3942//3942 3920//3920 3943//3943\nf 3929//3929 3940//3940 3941//3941\nf 3929//3929 3931//3931 3940//3940\nf 3942//3942 3944//3944 3920//3920\nf 3944//3944 3918//3918 3920//3920\nf 3945//3945 3946//3946 3947//3947\nf 3948//3948 3949//3949 3950//3950\nf 3951//3951 3952//3952 3953//3953\nf 3954//3954 3955//3955 3956//3956\nf 3957//3957 3958//3958 3959//3959\nf 3960//3960 3961//3961 3962//3962\nf 3963//3963 3964//3964 3965//3965\nf 3966//3966 3967//3967 3968//3968\nf 3969//3969 3970//3970 3971//3971\nf 3972//3972 3973//3973 3974//3974\nf 3975//3975 3976//3976 3977//3977\nf 3978//3978 3979//3979 3980//3980\nf 3981//3981 3982//3982 3983//3983\nf 3984//3984 3985//3985 3986//3986\nf 3987//3987 3988//3988 3989//3989\nf 3990//3990 3991//3991 3992//3992\nf 3993//3993 3994//3994 3995//3995\nf 3996//3996 3997//3997 3998//3998\nf 3999//3999 4000//4000 4001//4001\nf 4002//4002 4003//4003 4004//4004\nf 4005//4005 4006//4006 4007//4007\nf 4008//4008 4009//4009 4010//4010\nf 4011//4011 4012//4012 4013//4013\nf 4014//4014 4015//4015 4016//4016\nf 4017//4017 4018//4018 4019//4019\nf 4020//4020 4021//4021 4022//4022\nf 4023//4023 4024//4024 4025//4025\nf 4026//4026 4027//4027 4028//4028\nf 4027//4027 4029//4029 4028//4028\nf 4030//4030 4027//4027 4026//4026\nf 4030//4030 4031//4031 4027//4027\nf 4032//4032 4033//4033 4034//4034\nf 4030//4030 4035//4035 4031//4031\nf 4036//4036 4035//4035 4030//4030\nf 4036//4036 4037//4037 4035//4035\nf 4036//4036 4038//4038 4037//4037\nf 4036//4036 4039//4039 4038//4038\nf 4040//4040 4041//4041 4042//4042\nf 4041//4041 4040//4040 4043//4043\nf 4043//4043 4040//4040 4044//4044\nf 4040//4040 4045//4045 4044//4044\nf 4044//4044 4045//4045 4046//4046\nf 4046//4046 4045//4045 4047//4047\nf 4045//4045 4048//4048 4047//4047\nf 4033//4033 4049//4049 4034//4034\nf 4047//4047 4050//4050 4051//4051\nf 4051//4051 4050//4050 4052//4052\nf 4047//4047 4048//4048 4050//4050\nf 4053//4053 4054//4054 4055//4055\nf 3897//3897 4056//4056 4057//4057\nf 4057//4057 4058//4058 3900//3900\nf 4057//4057 3900//3900 3897//3897\nf 4059//4059 4054//4054 4053//4053\nf 4055//4055 4060//4060 4061//4061\nf 4056//4056 4062//4062 4063//4063\nf 4061//4061 4064//4064 4055//4055\nf 4056//4056 4063//4063 4065//4065\nf 4053//4053 4055//4055 4064//4064\nf 4066//4066 4067//4067 4068//4068\nf 4069//4069 4070//4070 3902//3902\nf 4071//4071 4072//4072 4073//4073\nf 4074//4074 4066//4066 4068//4068\nf 4075//4075 4072//4072 4071//4071\nf 4069//4069 4072//4072 4075//4075\nf 4068//4068 3905//3905 4074//4074\nf 4076//4076 4077//4077 4078//4078\nf 4079//4079 4080//4080 4081//4081\nf 4082//4082 4080//4080 4079//4079\nf 4083//4083 4079//4079 4081//4081\nf 4083//4083 4081//4081 4084//4084\nf 4085//4085 4083//4083 4084//4084\nf 4082//4082 4086//4086 4080//4080\nf 4087//4087 4086//4086 4082//4082\nf 4085//4085 4084//4084 4088//4088\nf 4087//4087 4089//4089 4086//4086\nf 4090//4090 4089//4089 4087//4087\nf 4091//4091 4085//4085 4088//4088\nf 4092//4092 4089//4089 4090//4090\nf 4092//4092 4090//4090 4093//4093\nf 4094//4094 4091//4091 4088//4088\nf 4094//4094 4095//4095 4091//4091\nf 4096//4096 4092//4092 4093//4093\nf 4097//4097 4095//4095 4094//4094\nf 4098//4098 4093//4093 4077//4077\nf 4098//4098 4096//4096 4093//4093\nf 4078//4078 4095//4095 4097//4097\nf 4076//4076 4098//4098 4077//4077\nf 4078//4078 4077//4077 4095//4095\nf 4099//4099 4100//4100 4101//4101\nf 4102//4102 4103//4103 4104//4104\nf 4104//4104 4103//4103 4105//4105\nf 4106//4106 4107//4107 4108//4108\nf 4109//4109 4110//4110 4111//4111\nf 4112//4112 4113//4113 4114//4114\nf 4115//4115 4113//4113 4112//4112\nf 4116//4116 4117//4117 4118//4118\nf 4119//4119 4120//4120 4121//4121\nf 4122//4122 4123//4123 4124//4124\nf 4125//4125 4126//4126 4127//4127\nf 4128//4128 4129//4129 4130//4130\nf 4131//4131 4132//4132 4133//4133\nf 4134//4134 4135//4135 4136//4136\nf 4137//4137 4138//4138 4139//4139\nf 4140//4140 4141//4141 4142//4142\nf 4143//4143 4144//4144 4145//4145\nf 4146//4146 4147//4147 4148//4148\nf 4149//4149 4150//4150 4151//4151\nf 4152//4152 4149//4149 4151//4151\nf 4153//4153 4154//4154 4150//4150\nf 4153//4153 4150//4150 4149//4149\nf 4152//4152 4151//4151 4155//4155\nf 4156//4156 4152//4152 4155//4155\nf 4157//4157 4154//4154 4153//4153\nf 4157//4157 4158//4158 4154//4154\nf 4156//4156 4155//4155 4159//4159\nf 4160//4160 4156//4156 4159//4159\nf 4157//4157 4161//4161 4158//4158\nf 4160//4160 4159//4159 4162//4162\nf 4163//4163 4161//4161 4157//4157\nf 4162//4162 4164//4164 4160//4160\nf 4165//4165 4164//4164 4162//4162\nf 4166//4166 4161//4161 4163//4163\nf 4166//4166 4163//4163 4167//4167\nf 4148//4148 4164//4164 4165//4165\nf 4148//4148 4147//4147 4164//4164\nf 4146//4146 4166//4166 4167//4167\nf 4146//4146 4167//4167 4147//4147\nf 4168//4168 4169//4169 4170//4170\nf 4171//4171 4172//4172 4173//4173\nf 4174//4174 4175//4175 4176//4176\nf 4177//4177 4178//4178 4179//4179\nf 4180//4180 4181//4181 4182//4182\nf 4183//4183 4184//4184 4185//4185\nf 4186//4186 4187//4187 4188//4188\nf 4189//4189 4190//4190 4191//4191\nf 4192//4192 4193//4193 4194//4194\nf 4195//4195 4196//4196 4197//4197\nf 4198//4198 4199//4199 4200//4200\nf 4201//4201 4202//4202 4203//4203\nf 4204//4204 4205//4205 4206//4206\nf 4207//4207 4208//4208 4209//4209\nf 4210//4210 4211//4211 4212//4212\nf 4213//4213 4214//4214 4215//4215\nf 4216//4216 4217//4217 4218//4218\nf 4219//4219 4220//4220 4221//4221\nf 4222//4222 4223//4223 4224//4224\nf 4225//4225 4226//4226 4227//4227\nf 4228//4228 4229//4229 4230//4230\nf 4231//4231 4232//4232 4233//4233\nf 4234//4234 4235//4235 4236//4236\nf 4237//4237 4238//4238 4239//4239\nf 4240//4240 4241//4241 4242//4242\nf 4243//4243 4244//4244 4245//4245\nf 4246//4246 4247//4247 4248//4248\nf 4249//4249 4250//4250 4251//4251\nf 4252//4252 4253//4253 4254//4254\nf 4252//4252 4254//4254 4255//4255\nf 4256//4256 4257//4257 4258//4258\nf 4256//4256 4258//4258 4259//4259\nf 4260//4260 4261//4261 4262//4262\nf 4263//4263 4264//4264 4265//4265\nf 4266//4266 4267//4267 4268//4268\nf 4269//4269 4270//4270 4271//4271\nf 4272//4272 4273//4273 4274//4274\nf 4272//4272 4275//4275 4273//4273\nf 4276//4276 4277//4277 4275//4275\nf 4276//4276 4275//4275 4272//4272\nf 4278//4278 4277//4277 4276//4276\nf 4279//4279 4278//4278 4276//4276\nf 4280//4280 4281//4281 4278//4278\nf 4280//4280 4282//4282 4281//4281\nf 4283//4283 4278//4278 4279//4279\nf 4283//4283 4279//4279 4284//4284\nf 4285//4285 4283//4283 4286//4286\nf 4287//4287 4288//4288 4289//4289\nf 4287//4287 4280//4280 4278//4278\nf 4287//4287 4289//4289 4280//4280\nf 4287//4287 4285//4285 4290//4290\nf 4287//4287 4278//4278 4283//4283\nf 4287//4287 4283//4283 4285//4285\nf 4291//4291 4287//4287 4290//4290\nf 4292//4292 4293//4293 4294//4294\nf 4295//4295 4296//4296 4297//4297\nf 4298//4298 4299//4299 4300//4300\nf 4301//4301 4302//4302 4303//4303\nf 4304//4304 4305//4305 4306//4306\nf 4307//4307 4308//4308 4309//4309\nf 4310//4310 4311//4311 4312//4312\nf 4313//4313 4314//4314 4315//4315\nf 4316//4316 4317//4317 4318//4318\nf 4319//4319 4320//4320 4321//4321\nf 4322//4322 4323//4323 4324//4324\nf 4325//4325 4326//4326 4327//4327\nf 4328//4328 4329//4329 4330//4330\nf 4331//4331 4332//4332 4333//4333\nf 4334//4334 4335//4335 4336//4336\nf 4337//4337 4338//4338 4339//4339\nf 4340//4340 4341//4341 4342//4342\nf 4343//4343 4344//4344 4345//4345\nf 4346//4346 4347//4347 4348//4348\nf 4349//4349 4347//4347 4346//4346\nf 4350//4350 4351//4351 4352//4352\nf 4353//4353 4354//4354 4355//4355\nf 4356//4356 4357//4357 4358//4358\nf 4357//4357 4359//4359 4358//4358\nf 4360//4360 4023//4023 4025//4025\nf 3947//3947 3946//3946 4361//4361\nf 4362//4362 4363//4363 4364//4364\nf 4365//4365 4366//4366 4367//4367\nf 4366//4366 4368//4368 4367//4367\nf 4369//4369 4370//4370 4371//4371\nf 4372//4372 4373//4373 4374//4374\nf 4375//4375 4376//4376 4377//4377\nf 4378//4378 4379//4379 4380//4380\nf 4381//4381 4379//4379 4378//4378\nf 4382//4382 4383//4383 4384//4384\nf 4385//4385 4386//4386 4387//4387\nf 4388//4388 4389//4389 4390//4390\nf 4389//4389 4391//4391 4390//4390\nf 4392//4392 3741//3741 3743//3743\nf 4393//4393 4394//4394 4395//4395\nf 4396//4396 4397//4397 4398//4398\nf 4399//4399 4400//4400 4401//4401\nf 4400//4400 4402//4402 4401//4401\nf 4403//4403 4404//4404 4405//4405\nf 4406//4406 4407//4407 4408//4408\nf 4409//4409 4410//4410 4411//4411\nf 4412//4412 4413//4413 4414//4414\nf 4415//4415 4416//4416 4417//4417\nf 4418//4418 4419//4419 4420//4420\nf 4421//4421 4422//4422 4423//4423\nf 4424//4424 4425//4425 4426//4426\nf 4427//4427 4425//4425 4424//4424\nf 4428//4428 4429//4429 4430//4430\nf 4431//4431 4432//4432 4433//4433\nf 4434//4434 4435//4435 4436//4436\nf 4437//4437 4438//4438 4439//4439\nf 4440//4440 4441//4441 4442//4442\nf 4443//4443 4444//4444 4445//4445\nf 4443//4443 4446//4446 4447//4447\nf 4443//4443 4445//4445 4446//4446\nf 4448//4448 4443//4443 4447//4447\nf 4448//4448 4449//4449 4450//4450\nf 4448//4448 4450//4450 4451//4451\nf 4448//4448 4452//4452 4443//4443\nf 4448//4448 4447//4447 4449//4449\nf 4453//4453 4454//4454 4455//4455\nf 4456//4456 4457//4457 4458//4458\nf 4459//4459 4460//4460 4461//4461\nf 4462//4462 4463//4463 4464//4464\nf 4465//4465 4466//4466 4467//4467\nf 4468//4468 4469//4469 4470//4470\nf 4471//4471 4472//4472 4473//4473\nf 4474//4474 4475//4475 4476//4476\nf 4477//4477 4478//4478 4479//4479\nf 4480//4480 4481//4481 4482//4482\nf 4483//4483 4484//4484 4485//4485\nf 4486//4486 4487//4487 4488//4488\nf 4489//4489 4490//4490 4491//4491\nf 4492//4492 4493//4493 4494//4494\nf 4495//4495 4496//4496 4497//4497\nf 4498//4498 4499//4499 4500//4500\nf 4501//4501 4502//4502 4503//4503\nf 4504//4504 4505//4505 4506//4506\nf 4507//4507 4508//4508 4509//4509\nf 4510//4510 4511//4511 4512//4512\nf 4513//4513 4514//4514 4515//4515\nf 4516//4516 4517//4517 4518//4518\nf 4519//4519 4520//4520 4521//4521\nf 4522//4522 4523//4523 4524//4524\nf 4525//4525 4526//4526 4527//4527\nf 4528//4528 4529//4529 4530//4530\nf 4531//4531 4532//4532 4533//4533\nf 4534//4534 4535//4535 4536//4536\nf 4537//4537 4538//4538 4539//4539\nf 4540//4540 4541//4541 4542//4542\nf 4543//4543 4544//4544 4545//4545\nf 4546//4546 4547//4547 4548//4548\nf 4549//4549 4550//4550 4551//4551\nf 4552//4552 4553//4553 4554//4554\nf 4555//4555 4556//4556 4557//4557\nf 4558//4558 4559//4559 4560//4560\nf 4558//4558 4561//4561 4559//4559\nf 4562//4562 4563//4563 4564//4564\nf 4565//4565 4566//4566 4567//4567\nf 4568//4568 4569//4569 4570//4570\nf 4571//4571 4572//4572 4573//4573\nf 4574//4574 4575//4575 4576//4576\nf 4577//4577 4578//4578 4579//4579\nf 4580//4580 4581//4581 4582//4582\nf 4583//4583 4584//4584 4585//4585\nf 4586//4586 4587//4587 4588//4588\nf 4589//4589 4590//4590 4591//4591\nf 4592//4592 4593//4593 4594//4594\nf 4595//4595 4596//4596 4597//4597\nf 4598//4598 4599//4599 4600//4600\nf 4601//4601 4602//4602 4603//4603\nf 4604//4604 4605//4605 4606//4606\nf 4607//4607 4608//4608 4609//4609\nf 4610//4610 4611//4611 4612//4612\nf 4613//4613 4614//4614 4615//4615\nf 4616//4616 4617//4617 4618//4618\nf 4619//4619 4620//4620 4621//4621\nf 4622//4622 4623//4623 4624//4624\nf 4625//4625 4626//4626 4627//4627\nf 4628//4628 4629//4629 4630//4630\nf 4631//4631 4632//4632 4633//4633\nf 4634//4634 4635//4635 4636//4636\nf 4637//4637 4638//4638 4639//4639\nf 4640//4640 4641//4641 4642//4642\nf 4643//4643 4644//4644 4645//4645\nf 4646//4646 4647//4647 4648//4648\nf 4649//4649 4650//4650 4651//4651\nf 4652//4652 4653//4653 4654//4654\nf 4655//4655 4656//4656 4657//4657\nf 4658//4658 4659//4659 4660//4660\nf 4661//4661 4662//4662 4663//4663\nf 4664//4664 4665//4665 4666//4666\nf 4667//4667 4668//4668 4669//4669\nf 4670//4670 4671//4671 4672//4672\nf 4673//4673 4674//4674 4675//4675\nf 4676//4676 4677//4677 4678//4678\nf 4679//4679 4680//4680 4681//4681\nf 4682//4682 4683//4683 4684//4684\nf 4685//4685 4686//4686 4687//4687\nf 4688//4688 4689//4689 4690//4690\nf 4691//4691 4692//4692 4693//4693\nf 4694//4694 4695//4695 4696//4696\nf 4697//4697 4698//4698 4699//4699\nf 4700//4700 4701//4701 4702//4702\nf 4703//4703 4704//4704 4705//4705\nf 4706//4706 4707//4707 4708//4708\nf 4709//4709 4710//4710 4711//4711\nf 4712//4712 4713//4713 4714//4714\nf 4715//4715 4716//4716 4717//4717\nf 4718//4718 4719//4719 4720//4720\nf 4721//4721 4722//4722 4723//4723\nf 4724//4724 4725//4725 4726//4726\nf 4727//4727 4728//4728 4729//4729\nf 4730//4730 4731//4731 4732//4732\nf 4733//4733 4734//4734 4735//4735\nf 4736//4736 4737//4737 4738//4738\nf 4739//4739 4740//4740 4741//4741\nf 4742//4742 4743//4743 4744//4744\nf 4745//4745 4746//4746 4747//4747\nf 4748//4748 4749//4749 4750//4750\nf 4751//4751 4752//4752 4753//4753\nf 4754//4754 4755//4755 4756//4756\nf 4757//4757 4758//4758 4759//4759\nf 4760//4760 4761//4761 4762//4762\nf 4763//4763 4764//4764 4765//4765\nf 4766//4766 4767//4767 4768//4768\nf 4769//4769 4770//4770 4771//4771\nf 4772//4772 4773//4773 4774//4774\nf 4775//4775 4776//4776 4777//4777\nf 4778//4778 4779//4779 4780//4780\nf 4781//4781 4782//4782 4783//4783\nf 4784//4784 4785//4785 4786//4786\nf 4787//4787 4788//4788 4789//4789\nf 4790//4790 4791//4791 4792//4792\nf 4793//4793 4794//4794 4795//4795\nf 4796//4796 4797//4797 4798//4798\nf 4799//4799 4800//4800 4801//4801\nf 4802//4802 4803//4803 4804//4804\nf 4805//4805 4806//4806 4807//4807\nf 4808//4808 4809//4809 4810//4810\nf 4811//4811 4812//4812 4813//4813\nf 4814//4814 4815//4815 4816//4816\nf 4817//4817 4818//4818 4819//4819\nf 4820//4820 4821//4821 4822//4822\nf 4823//4823 4824//4824 4825//4825\nf 4826//4826 4827//4827 4828//4828\nf 4829//4829 4830//4830 4831//4831\nf 4832//4832 4833//4833 4834//4834\nf 4835//4835 4836//4836 4837//4837\nf 4838//4838 4839//4839 4840//4840\nf 4841//4841 4842//4842 4843//4843\nf 4844//4844 4845//4845 4846//4846\nf 4061//4061 4060//4060 4058//4058\nf 4847//4847 3903//3903 4070//4070\nf 3904//3904 4848//4848 3905//3905\nf 3903//3903 3902//3902 4070//4070\nf 4847//4847 4070//4070 4075//4075\nf 4061//4061 4058//4058 4057//4057\nf 3897//3897 4062//4062 4056//4056\nf 4061//4061 4057//4057 4064//4064\nf 4069//4069 4075//4075 4070//4070\nf 4068//4068 3902//3902 3905//3905\nf 4849//4849 4850//4850 4851//4851\nf 4849//4849 4852//4852 4850//4850\nf 4853//4853 4854//4854 4855//4855\nf 4856//4856 4857//4857 4858//4858\nf 4859//4859 4857//4857 4856//4856\nf 4853//4853 4860//4860 4854//4854\nf 4861//4861 4862//4862 4863//4863\nf 4861//4861 4863//4863 4864//4864\nf 4861//4861 4864//4864 4865//4865\nf 4866//4866 4867//4867 4868//4868\nf 4869//4869 4870//4870 4871//4871\nf 4872//4872 4873//4873 4874//4874\nf 4875//4875 4876//4876 4877//4877\nf 4878//4878 4879//4879 4880//4880\nf 4881//4881 4882//4882 4883//4883\nf 4884//4884 4882//4882 4881//4881\nf 4885//4885 4886//4886 4887//4887\nf 4888//4888 4889//4889 4890//4890\nf 4891//4891 4892//4892 4893//4893\nf 4894//4894 4895//4895 4896//4896\nf 4897//4897 4898//4898 4899//4899\nf 4900//4900 4901//4901 4902//4902\nf 4903//4903 4904//4904 4905//4905\nf 4906//4906 4907//4907 4908//4908\nf 4909//4909 4910//4910 4911//4911\nf 4912//4912 4913//4913 4914//4914\nf 4915//4915 4916//4916 4917//4917\nf 4918//4918 4919//4919 4920//4920\nf 4921//4921 4922//4922 4923//4923\nf 4924//4924 4925//4925 4926//4926\nf 4927//4927 4928//4928 4929//4929\nf 4930//4930 4931//4931 4932//4932\nf 4933//4933 4934//4934 4935//4935\nf 4936//4936 4937//4937 4938//4938\nf 4939//4939 4940//4940 4941//4941\nf 4942//4942 4943//4943 4944//4944\nf 4945//4945 4946//4946 4947//4947\nf 4948//4948 4949//4949 4950//4950\nf 4951//4951 4952//4952 4953//4953\nf 4954//4954 4955//4955 4956//4956\nf 4957//4957 4958//4958 4959//4959\nf 4960//4960 4961//4961 4962//4962\nf 4963//4963 4964//4964 4965//4965\nf 4966//4966 4967//4967 4968//4968\nf 4969//4969 4970//4970 4971//4971\nf 4972//4972 4973//4973 4974//4974\nf 4975//4975 4976//4976 4977//4977\nf 4978//4978 4979//4979 4980//4980\nf 4981//4981 4982//4982 4983//4983\nf 4984//4984 4979//4979 4978//4978\nf 4985//4985 4982//4982 4981//4981\nf 4986//4986 4987//4987 4988//4988\nf 4989//4989 4990//4990 4991//4991\nf 4992//4992 4993//4993 4994//4994\nf 4989//4989 4991//4991 4995//4995\nf 4996//4996 4997//4997 4998//4998\nf 4978//4978 4980//4980 4999//4999\nf 5000//5000 5001//5001 5002//5002\nf 5003//5003 5004//5004 5005//5005\nf 5006//5006 5007//5007 5008//5008\nf 5009//5009 5010//5010 5011//5011\nf 5009//5009 5011//5011 5012//5012\nf 5013//5013 5014//5014 5015//5015\nf 5016//5016 5017//5017 5018//5018\nf 5018//5018 5017//5017 5019//5019\nf 5020//5020 5021//5021 5022//5022\nf 5023//5023 5024//5024 5025//5025\nf 5023//5023 5026//5026 5024//5024\nf 5027//5027 5028//5028 5029//5029\nf 5030//5030 5031//5031 5032//5032\nf 5033//5033 5034//5034 5035//5035\nf 5036//5036 5037//5037 5038//5038\nf 5039//5039 5040//5040 5041//5041\nf 5042//5042 5040//5040 5043//5043\nf 5041//5041 5040//5040 5042//5042\nf 5044//5044 5045//5045 5046//5046\nf 5047//5047 5040//5040 5039//5039\nf 5047//5047 5048//5048 5040//5040\nf 5049//5049 5045//5045 5050//5050\nf 5050//5050 5045//5045 5044//5044\nf 5049//5049 5051//5051 5045//5045\nf 5051//5051 5052//5052 5045//5045\nf 5053//5053 5054//5054 5055//5055\nf 5052//5052 5056//5056 5045//5045\nf 5040//5040 5045//5045 5043//5043\nf 5043//5043 5045//5045 5056//5056\nf 5057//5057 5058//5058 5059//5059\nf 5060//5060 5059//5059 5061//5061\nf 5060//5060 5061//5061 5062//5062\nf 5060//5060 5062//5062 5063//5063\nf 5060//5060 5057//5057 5059//5059\nf 5064//5064 5065//5065 5060//5060\nf 5064//5064 5060//5060 5063//5063\nf 5066//5066 5067//5067 5068//5068\nf 5069//5069 5070//5070 5066//5066\nf 5069//5069 5068//5068 5071//5071\nf 5069//5069 5066//5066 5068//5068\nf 5072//5072 5073//5073 5074//5074\nf 5075//5075 5072//5072 5074//5074\nf 5076//5076 5077//5077 5078//5078\nf 5079//5079 5080//5080 5081//5081\nf 5082//5082 5083//5083 5084//5084\nf 5085//5085 5086//5086 5087//5087\nf 5088//5088 5086//5086 5085//5085\nf 5089//5089 5090//5090 5091//5091\nf 5092//5092 5093//5093 5094//5094\nf 5095//5095 5096//5096 5097//5097\nf 5098//5098 5099//5099 5100//5100\nf 5101//5101 5102//5102 5103//5103\nf 5100//5100 5099//5099 5104//5104\nf 5098//5098 5105//5105 5099//5099\nf 5106//5106 5102//5102 5101//5101\nf 5107//5107 5108//5108 5109//5109\nf 5110//5110 5102//5102 5106//5106\nf 5111//5111 5108//5108 5107//5107\nf 5112//5112 5113//5113 5114//5114\nf 5089//5089 5115//5115 5090//5090\nf 5116//5116 5117//5117 5118//5118\nf 5119//5119 5120//5120 5121//5121\nf 5122//5122 5123//5123 5124//5124\nf 5125//5125 5126//5126 5127//5127\nf 5128//5128 5129//5129 5130//5130\nf 5131//5131 5132//5132 5133//5133\nf 5128//5128 5134//5134 5129//5129\nf 5135//5135 5136//5136 5137//5137\nf 5138//5138 5139//5139 5140//5140\nf 5141//5141 5142//5142 5143//5143\nf 5144//5144 5145//5145 5146//5146\nf 5147//5147 5148//5148 5149//5149\nf 5142//5142 5141//5141 5150//5150\nf 5151//5151 5152//5152 5153//5153\nf 5154//5154 5155//5155 5156//5156\nf 5157//5157 5158//5158 5159//5159\nf 5155//5155 5160//5160 5156//5156\nf 5161//5161 5162//5162 5163//5163\nf 5164//5164 5165//5165 5166//5166\nf 5161//5161 5167//5167 5162//5162\nf 5168//5168 5167//5167 5161//5161\nf 5169//5169 5170//5170 5171//5171\nf 5172//5172 5173//5173 5174//5174\nf 5175//5175 5176//5176 5177//5177\nf 5177//5177 5176//5176 5178//5178\nf 5179//5179 5180//5180 5181//5181\nf 5182//5182 5183//5183 5184//5184\nf 5185//5185 5186//5186 5187//5187\nf 5173//5173 5188//5188 5174//5174\nf 5189//5189 5190//5190 5191//5191\nf 5192//5192 5186//5186 5185//5185\nf 5193//5193 5194//5194 5195//5195\nf 5196//5196 5197//5197 5198//5198\nf 5199//5199 5200//5200 5201//5201\nf 5202//5202 5203//5203 5204//5204\nf 5199//5199 5205//5205 5200//5200\nf 5206//5206 5207//5207 5208//5208\nf 5209//5209 5210//5210 5211//5211\nf 5212//5212 5213//5213 5214//5214\nf 5215//5215 5216//5216 5217//5217\nf 5218//5218 5219//5219 5220//5220\nf 5221//5221 5222//5222 5223//5223\nf 5206//5206 5224//5224 5207//5207\nf 5225//5225 5226//5226 5227//5227\nf 5228//5228 5229//5229 5230//5230\nf 5231//5231 5228//5228 5232//5232\nf 5229//5229 5228//5228 5231//5231\nf 5208//5208 5207//5207 5233//5233\nf 5234//5234 5235//5235 5236//5236\nf 5237//5237 5238//5238 5239//5239\nf 5240//5240 5241//5241 5242//5242\nf 5243//5243 5244//5244 5245//5245\nf 5246//5246 5247//5247 5248//5248\nf 5249//5249 5250//5250 5251//5251\nf 5252//5252 5253//5253 5254//5254\nf 5255//5255 5256//5256 5257//5257\nf 5258//5258 5259//5259 5260//5260\nf 5261//5261 5262//5262 5263//5263\nf 5264//5264 5265//5265 5266//5266\nf 5267//5267 5268//5268 5269//5269\nf 5270//5270 5271//5271 5272//5272\nf 5273//5273 5274//5274 5275//5275\nf 5276//5276 5277//5277 5278//5278\nf 5279//5279 5280//5280 5281//5281\nf 5282//5282 5283//5283 5284//5284\nf 5285//5285 5286//5286 5287//5287\nf 5288//5288 5289//5289 5290//5290\nf 5291//5291 5292//5292 5293//5293\nf 5294//5294 5295//5295 5296//5296\nf 5297//5297 5298//5298 5299//5299\nf 5300//5300 5301//5301 5302//5302\nf 5303//5303 5304//5304 5305//5305\nf 5306//5306 5307//5307 5308//5308\nf 5309//5309 5310//5310 5311//5311\nf 5312//5312 5313//5313 5314//5314\nf 5315//5315 5316//5316 5317//5317\nf 5314//5314 5313//5313 5318//5318\nf 5319//5319 5320//5320 5321//5321\nf 5322//5322 5323//5323 5324//5324\nf 5325//5325 5326//5326 5327//5327\nf 5328//5328 5329//5329 5330//5330\nf 5331//5331 5332//5332 5333//5333\nf 5334//5334 5335//5335 5336//5336\nf 5337//5337 5332//5332 5331//5331\nf 5338//5338 5339//5339 5340//5340\nf 5341//5341 5342//5342 5343//5343\nf 5344//5344 5345//5345 5346//5346\nf 5347//5347 5348//5348 5349//5349\nf 5350//5350 5351//5351 5352//5352\nf 5353//5353 5354//5354 5355//5355\nf 5356//5356 5357//5357 5358//5358\nf 5359//5359 5360//5360 5361//5361\nf 5362//5362 5363//5363 5364//5364\nf 5365//5365 5366//5366 5367//5367\nf 5368//5368 5369//5369 5370//5370\nf 5371//5371 5372//5372 5373//5373\nf 5374//5374 5375//5375 5376//5376\nf 5372//5372 5377//5377 5373//5373\nf 5378//5378 5379//5379 5380//5380\nf 5374//5374 5376//5376 5381//5381\nf 5382//5382 5383//5383 5384//5384\nf 5385//5385 5386//5386 5387//5387\nf 5388//5388 5389//5389 5390//5390\nf 5391//5391 5392//5392 5393//5393\nf 5394//5394 5395//5395 5396//5396\nf 5397//5397 5398//5398 5399//5399\nf 5400//5400 5401//5401 5402//5402\nf 5403//5403 5404//5404 5405//5405\nf 5406//5406 5382//5382 5384//5384\nf 5407//5407 5408//5408 5409//5409\nf 5410//5410 5411//5411 5412//5412\nf 5413//5413 5414//5414 5415//5415\nf 5416//5416 5417//5417 5418//5418\nf 5419//5419 5420//5420 5421//5421\nf 5422//5422 5399//5399 5398//5398\nf 5423//5423 5424//5424 5425//5425\nf 5426//5426 5427//5427 5428//5428\nf 5429//5429 5430//5430 5431//5431\nf 5432//5432 5433//5433 5434//5434\nf 5435//5435 5436//5436 5437//5437\nf 5438//5438 5439//5439 5428//5428\nf 5440//5440 5441//5441 5442//5442\nf 5443//5443 5444//5444 5445//5445\nf 5443//5443 5445//5445 5446//5446\nf 5378//5378 5447//5447 5379//5379\nf 5448//5448 5382//5382 5406//5406\nf 5449//5449 5450//5450 5451//5451\nf 5452//5452 5453//5453 5454//5454\nf 5383//5383 5382//5382 5455//5455\nf 5456//5456 5381//5381 5376//5376\nf 5457//5457 5383//5383 5455//5455\nf 5458//5458 5459//5459 5460//5460\nf 5461//5461 5462//5462 5463//5463\nf 5464//5464 5465//5465 5466//5466\nf 5467//5467 5468//5468 5469//5469\nf 5455//5455 5382//5382 5470//5470\nf 5438//5438 5428//5428 5427//5427\nf 5471//5471 5472//5472 5473//5473\nf 5474//5474 5437//5437 5436//5436\nf 5475//5475 5476//5476 5477//5477\nf 5478//5478 5479//5479 5480//5480\nf 5479//5479 5481//5481 5480//5480\nf 5482//5482 5483//5483 5484//5484\nf 5485//5485 5486//5486 5487//5487\nf 5488//5488 5489//5489 5490//5490\nf 5491//5491 5492//5492 5493//5493\nf 5494//5494 5495//5495 5496//5496\nf 5497//5497 5498//5498 5499//5499\nf 5500//5500 5501//5501 5502//5502\nf 5503//5503 5504//5504 5505//5505\nf 5441//5441 5506//5506 5442//5442\nf 5507//5507 5508//5508 5509//5509\nf 5510//5510 5511//5511 5512//5512\nf 5513//5513 5514//5514 5515//5515\nf 5516//5516 5400//5400 5402//5402\nf 5517//5517 5518//5518 5519//5519\nf 5520//5520 5521//5521 5522//5522\nf 5523//5523 5524//5524 5525//5525\nf 5526//5526 5527//5527 5528//5528\nf 5529//5529 5530//5530 5531//5531\nf 5532//5532 5533//5533 5534//5534\nf 5535//5535 5536//5536 5537//5537\nf 5538//5538 5539//5539 5540//5540\nf 5541//5541 5542//5542 5543//5543\nf 5544//5544 5545//5545 5546//5546\nf 5547//5547 5548//5548 5549//5549\nf 5550//5550 5551//5551 5552//5552\nf 5553//5553 5554//5554 5555//5555\nf 5556//5556 5557//5557 5558//5558\nf 5552//5552 5551//5551 5559//5559\nf 5560//5560 5561//5561 5562//5562\nf 5563//5563 5564//5564 5565//5565\nf 5566//5566 5567//5567 5568//5568\nf 5569//5569 5570//5570 5571//5571\nf 5572//5572 5573//5573 5574//5574\nf 5575//5575 5576//5576 5577//5577\nf 5578//5578 5579//5579 5580//5580\nf 5581//5581 5582//5582 5583//5583\nf 5584//5584 5585//5585 5586//5586\nf 5587//5587 5588//5588 5589//5589\nf 5590//5590 5591//5591 5592//5592\nf 5593//5593 5594//5594 5595//5595\nf 5596//5596 5597//5597 5598//5598\nf 5599//5599 5600//5600 5601//5601\nf 5602//5602 5603//5603 5604//5604\nf 5605//5605 5606//5606 5607//5607\nf 5608//5608 5609//5609 5610//5610\nf 5611//5611 5612//5612 5613//5613\nf 5614//5614 5615//5615 5616//5616\nf 5617//5617 5618//5618 5619//5619\nf 5620//5620 5621//5621 5622//5622\nf 5623//5623 5624//5624 5625//5625\nf 5626//5626 5627//5627 5628//5628\nf 5629//5629 5630//5630 5631//5631\nf 5632//5632 5633//5633 5634//5634\nf 5635//5635 5636//5636 5637//5637\nf 5638//5638 5639//5639 5640//5640\nf 5641//5641 5642//5642 5643//5643\nf 5644//5644 5645//5645 5646//5646\nf 5647//5647 5648//5648 5649//5649\nf 5650//5650 5651//5651 5652//5652\nf 5653//5653 5654//5654 5655//5655\nf 5622//5622 5621//5621 5656//5656\nf 5657//5657 5658//5658 5659//5659\nf 5660//5660 5661//5661 5662//5662\nf 5663//5663 5664//5664 5665//5665\nf 5666//5666 5667//5667 5668//5668\nf 5669//5669 5670//5670 5671//5671\nf 5672//5672 5673//5673 5674//5674\nf 5675//5675 5676//5676 5677//5677\nf 5678//5678 5679//5679 5680//5680\nf 5681//5681 5682//5682 5683//5683\nf 5684//5684 5682//5682 5681//5681\nf 5685//5685 5686//5686 5687//5687\nf 5688//5688 5689//5689 5690//5690\nf 5691//5691 5681//5681 5692//5692\nf 5693//5693 5694//5694 5695//5695\nf 5696//5696 5697//5697 5535//5535\nf 5698//5698 5699//5699 5700//5700\nf 5701//5701 5702//5702 5703//5703\nf 5704//5704 5705//5705 5706//5706\nf 5707//5707 5708//5708 5709//5709\nf 5710//5710 5711//5711 5712//5712\nf 5713//5713 5714//5714 5715//5715\nf 5716//5716 5717//5717 5718//5718\nf 5719//5719 5535//5535 5537//5537\nf 5720//5720 5721//5721 5722//5722\nf 5722//5722 5723//5723 5720//5720\nf 5719//5719 5537//5537 5724//5724\nf 5536//5536 5535//5535 5697//5697\nf 5725//5725 5726//5726 5727//5727\nf 5728//5728 5729//5729 5730//5730\nf 5731//5731 5732//5732 5733//5733\nf 5734//5734 5735//5735 5736//5736\nf 5737//5737 5738//5738 5739//5739\nf 5740//5740 5741//5741 5742//5742\nf 5743//5743 5744//5744 5745//5745\nf 5746//5746 5747//5747 5748//5748\nf 5749//5749 5750//5750 5751//5751\nf 5752//5752 5753//5753 5754//5754\nf 5755//5755 5756//5756 5757//5757\nf 5758//5758 5759//5759 5760//5760\nf 5761//5761 5762//5762 5763//5763\nf 5764//5764 5765//5765 5766//5766\nf 5767//5767 5768//5768 5769//5769\nf 5770//5770 5771//5771 5772//5772\nf 5773//5773 5774//5774 5775//5775\nf 5776//5776 5777//5777 5778//5778\nf 5779//5779 5780//5780 5781//5781\nf 5782//5782 5783//5783 5784//5784\nf 5785//5785 5786//5786 5787//5787\nf 5788//5788 5789//5789 5790//5790\nf 5791//5791 5792//5792 5793//5793\nf 5794//5794 5795//5795 5796//5796\nf 5797//5797 5798//5798 5799//5799\nf 5800//5800 5801//5801 5802//5802\nf 5803//5803 5804//5804 5805//5805\nf 5806//5806 5807//5807 5808//5808\nf 5809//5809 5810//5810 5811//5811\nf 5812//5812 5813//5813 5814//5814\nf 5815//5815 5816//5816 5817//5817\nf 5818//5818 5819//5819 5820//5820\nf 5821//5821 5822//5822 5823//5823\nf 5824//5824 5825//5825 5826//5826\nf 5827//5827 5828//5828 5829//5829\nf 5830//5830 5831//5831 5832//5832\nf 5833//5833 5834//5834 5835//5835\nf 5836//5836 5837//5837 5838//5838\nf 5839//5839 5840//5840 5841//5841\nf 5842//5842 5843//5843 5844//5844\nf 5845//5845 5846//5846 5847//5847\nf 5848//5848 5849//5849 5850//5850\nf 5851//5851 5852//5852 5853//5853\nf 5854//5854 5855//5855 5856//5856\nf 5857//5857 5858//5858 5859//5859\nf 5860//5860 5861//5861 5862//5862\nf 5863//5863 5864//5864 5865//5865\nf 5866//5866 5867//5867 5868//5868\nf 5869//5869 5870//5870 5871//5871\nf 5872//5872 5873//5873 5874//5874\nf 5875//5875 5876//5876 5877//5877\nf 5878//5878 5879//5879 5880//5880\nf 5881//5881 5882//5882 5883//5883\nf 5884//5884 5817//5817 5816//5816\nf 5885//5885 5886//5886 5887//5887\nf 5888//5888 5889//5889 5890//5890\nf 5691//5691 5891//5891 5681//5681\nf 5681//5681 5891//5891 5684//5684\nf 5892//5892 5893//5893 5894//5894\nf 5895//5895 5896//5896 5897//5897\nf 5898//5898 5899//5899 5900//5900\nf 5876//5876 5901//5901 5877//5877\nf 5902//5902 5903//5903 5904//5904\nf 5905//5905 5906//5906 5907//5907\nf 5908//5908 5909//5909 5910//5910\nf 5911//5911 5912//5912 5913//5913\nf 5914//5914 5915//5915 5916//5916\nf 5711//5711 5710//5710 5917//5917\nf 5918//5918 5919//5919 5920//5920\nf 5662//5662 5661//5661 5921//5921\nf 5922//5922 5923//5923 5924//5924\nf 5925//5925 5926//5926 5927//5927\nf 5928//5928 5883//5883 5882//5882\nf 5929//5929 5930//5930 5931//5931\nf 5932//5932 5933//5933 5934//5934\nf 5935//5935 5936//5936 5937//5937\nf 5938//5938 5939//5939 5940//5940\nf 5941//5941 5942//5942 5943//5943\nf 5944//5944 5945//5945 5946//5946\nf 5944//5944 5947//5947 5945//5945\nf 5948//5948 5949//5949 5950//5950\nf 5951//5951 5952//5952 5953//5953\nf 5954//5954 5955//5955 5956//5956\nf 5957//5957 5958//5958 5959//5959\nf 5960//5960 5961//5961 5962//5962\nf 5963//5963 5964//5964 5965//5965\nf 5966//5966 5967//5967 5968//5968\nf 5969//5969 5970//5970 5971//5971\nf 5972//5972 5973//5973 5974//5974\nf 5975//5975 5976//5976 5977//5977\nf 5978//5978 5979//5979 5980//5980\nf 5981//5981 5982//5982 5983//5983\nf 5984//5984 5985//5985 5986//5986\nf 5987//5987 5988//5988 5989//5989\nf 5990//5990 5991//5991 5992//5992\nf 5993//5993 5994//5994 5995//5995\nf 5996//5996 5997//5997 5998//5998\nf 5998//5998 5997//5997 5999//5999\nf 6000//6000 6001//6001 6002//6002\nf 6003//6003 6004//6004 6005//6005\nf 6006//6006 6007//6007 6008//6008\nf 6009//6009 6010//6010 6011//6011\nf 6012//6012 6013//6013 6014//6014\nf 6015//6015 6016//6016 6017//6017\nf 6018//6018 6019//6019 6020//6020\nf 6021//6021 6022//6022 6023//6023\nf 6024//6024 6025//6025 6026//6026\nf 6026//6026 6025//6025 6027//6027\nf 6028//6028 6029//6029 6030//6030\nf 6031//6031 6032//6032 6033//6033\nf 6034//6034 6035//6035 6036//6036\nf 6037//6037 6038//6038 6039//6039\nf 6040//6040 6041//6041 6042//6042\nf 6043//6043 6044//6044 6045//6045\nf 6042//6042 6041//6041 6046//6046\nf 6047//6047 6044//6044 6043//6043\nf 6046//6046 6041//6041 6048//6048\nf 6049//6049 6050//6050 6051//6051\nf 6052//6052 6050//6050 6049//6049\nf 6053//6053 6050//6050 6052//6052\nf 6054//6054 6055//6055 6056//6056\nf 6057//6057 6058//6058 6059//6059\nf 6060//6060 6058//6058 6057//6057\nf 6061//6061 6062//6062 6063//6063\nf 6064//6064 6065//6065 6066//6066\nf 6067//6067 6068//6068 6069//6069\nf 6070//6070 6071//6071 6072//6072\nf 6073//6073 6074//6074 6075//6075\nf 6076//6076 6077//6077 6078//6078\nf 6079//6079 6080//6080 6081//6081\nf 6082//6082 6083//6083 6084//6084\nf 6085//6085 6086//6086 6087//6087\nf 6088//6088 6089//6089 6090//6090\nf 6091//6091 6092//6092 6093//6093\nf 6094//6094 6095//6095 6096//6096\nf 6097//6097 6098//6098 6099//6099\nf 6100//6100 6101//6101 6102//6102\nf 6103//6103 6104//6104 6105//6105\nf 6106//6106 6107//6107 6108//6108\nf 6109//6109 6110//6110 6111//6111\nf 6112//6112 6113//6113 6114//6114\nf 6115//6115 6116//6116 6117//6117\nf 6118//6118 6119//6119 6120//6120\nf 6121//6121 6122//6122 6123//6123\nf 6124//6124 6125//6125 6126//6126\nf 6127//6127 6128//6128 6129//6129\nf 6130//6130 6131//6131 6132//6132\nf 6133//6133 6134//6134 6135//6135\nf 6136//6136 6137//6137 6138//6138\nf 6139//6139 6140//6140 6141//6141\nf 6142//6142 6143//6143 6144//6144\nf 6145//6145 6146//6146 6147//6147\nf 6148//6148 6149//6149 6150//6150\nf 6151//6151 6152//6152 6153//6153\nf 6149//6149 6154//6154 6150//6150\nf 6155//6155 6156//6156 6157//6157\nf 6156//6156 6158//6158 6157//6157\nf 6159//6159 6160//6160 6161//6161\nf 6162//6162 6163//6163 6164//6164\nf 6165//6165 6166//6166 6167//6167\nf 6168//6168 6060//6060 6057//6057\nf 6169//6169 6170//6170 6171//6171\nf 6172//6172 6173//6173 6174//6174\nf 6175//6175 6176//6176 6177//6177\nf 6178//6178 6179//6179 6180//6180\nf 6181//6181 6179//6179 6182//6182\nf 6183//6183 6184//6184 6185//6185\nf 6186//6186 6187//6187 6188//6188\nf 6182//6182 6179//6179 6178//6178\nf 6189//6189 6190//6190 6191//6191\nf 6192//6192 6193//6193 6194//6194\nf 6195//6195 6196//6196 6197//6197\nf 6198//6198 6199//6199 6200//6200\nf 6201//6201 6202//6202 6203//6203\nf 6204//6204 6205//6205 6206//6206\nf 6207//6207 6208//6208 6209//6209\nf 6210//6210 6211//6211 6212//6212\nf 6073//6073 6213//6213 6074//6074\nf 6214//6214 6215//6215 6216//6216\nf 6217//6217 6218//6218 6219//6219\nf 6220//6220 6221//6221 6222//6222\nf 6223//6223 6224//6224 6225//6225\nf 6226//6226 6227//6227 6228//6228\nf 6229//6229 6216//6216 6215//6215\nf 6230//6230 6231//6231 6232//6232\nf 6233//6233 6234//6234 6235//6235\nf 6235//6235 6234//6234 6236//6236\nf 6237//6237 6238//6238 6239//6239\nf 6240//6240 6241//6241 6242//6242\nf 6243//6243 6244//6244 6245//6245\nf 6246//6246 6247//6247 6248//6248\nf 6249//6249 6250//6250 6251//6251\nf 6252//6252 6253//6253 6254//6254\nf 6225//6225 6255//6255 6223//6223\nf 6256//6256 6257//6257 6258//6258\nf 6259//6259 6260//6260 6261//6261\nf 6262//6262 6263//6263 6264//6264\nf 6265//6265 6266//6266 6267//6267\nf 6268//6268 6269//6269 6270//6270\nf 6127//6127 6129//6129 6271//6271\nf 6036//6036 6272//6272 6273//6273\nf 6274//6274 6275//6275 6276//6276\nf 6277//6277 6205//6205 6204//6204\nf 6036//6036 6035//6035 6272//6272\nf 6278//6278 6279//6279 6280//6280\nf 6281//6281 6282//6282 6283//6283\nf 6284//6284 6285//6285 6286//6286\nf 6287//6287 6288//6288 6289//6289\nf 6290//6290 6291//6291 6292//6292\nf 6283//6283 6282//6282 6293//6293\nf 6294//6294 6295//6295 6296//6296\nf 6297//6297 6298//6298 6299//6299\nf 6300//6300 6301//6301 6302//6302\nf 6303//6303 6304//6304 6305//6305\nf 6306//6306 6307//6307 6308//6308\nf 6309//6309 6310//6310 6311//6311\nf 6312//6312 6313//6313 6314//6314\nf 6315//6315 6316//6316 6317//6317\nf 6318//6318 6319//6319 6320//6320\nf 6321//6321 6306//6306 6308//6308\nf 6322//6322 6287//6287 6289//6289\nf 6323//6323 6324//6324 6325//6325\nf 6326//6326 6327//6327 6328//6328\nf 6329//6329 6330//6330 6331//6331\nf 6332//6332 6333//6333 6334//6334\nf 6335//6335 6336//6336 6337//6337\nf 6338//6338 6339//6339 6340//6340\nf 6341//6341 6342//6342 6343//6343\nf 6344//6344 6345//6345 6346//6346\nf 6347//6347 6348//6348 6349//6349\nf 6350//6350 6351//6351 6352//6352\nf 6352//6352 6351//6351 6353//6353\nf 6354//6354 6355//6355 6356//6356\nf 6357//6357 6358//6358 6359//6359\nf 6348//6348 6360//6360 6349//6349\nf 6361//6361 6362//6362 6363//6363\nf 6364//6364 6365//6365 6366//6366\nf 6367//6367 6368//6368 6369//6369\nf 6370//6370 6371//6371 6372//6372\nf 6373//6373 6374//6374 6375//6375\nf 6376//6376 6377//6377 6378//6378\nf 5333//5333 5332//5332 6376//6376\nf 5332//5332 6377//6377 6376//6376\nf 6379//6379 6380//6380 6381//6381\nf 6380//6380 6382//6382 6381//6381\nf 6383//6383 6384//6384 6385//6385\nf 6386//6386 6387//6387 6388//6388\nf 6389//6389 6390//6390 6391//6391\nf 6392//6392 6393//6393 6394//6394\nf 6395//6395 6396//6396 6397//6397\nf 6398//6398 6399//6399 6400//6400\nf 6401//6401 6402//6402 6403//6403\nf 6404//6404 6405//6405 6406//6406\nf 6407//6407 6408//6408 6409//6409\nf 6410//6410 6411//6411 6412//6412\nf 6413//6413 6414//6414 6415//6415\nf 6416//6416 6417//6417 6418//6418\nf 6419//6419 6420//6420 6421//6421\nf 6422//6422 6423//6423 6424//6424\nf 6422//6422 6424//6424 6425//6425\nf 6426//6426 6427//6427 6428//6428\nf 6429//6429 6430//6430 6431//6431\nf 6432//6432 6433//6433 6434//6434\nf 6435//6435 6436//6436 6437//6437\nf 6438//6438 6439//6439 6440//6440\nf 6441//6441 6442//6442 6443//6443\nf 6444//6444 6445//6445 6446//6446\nf 6447//6447 6448//6448 6449//6449\nf 6447//6447 6450//6450 6448//6448\nf 6451//6451 6452//6452 6453//6453\nf 6454//6454 6455//6455 6456//6456\nf 6457//6457 6455//6455 6454//6454\nf 6458//6458 6452//6452 6451//6451\nf 6458//6458 6451//6451 6459//6459\nf 6457//6457 6460//6460 6455//6455\nf 6454//6454 6461//6461 6462//6462\nf 6457//6457 6463//6463 6460//6460\nf 6462//6462 6461//6461 6464//6464\nf 6454//6454 6456//6456 6461//6461\nf 6458//6458 6459//6459 6465//6465\nf 6458//6458 6465//6465 6466//6466\nf 6458//6458 6466//6466 6467//6467\nf 6458//6458 6467//6467 6468//6468\nf 6458//6458 6468//6468 6463//6463\nf 6458//6458 6463//6463 6457//6457\nf 6469//6469 6470//6470 6471//6471\nf 6472//6472 6473//6473 6474//6474\nf 6474//6474 6473//6473 6475//6475\nf 6476//6476 6477//6477 6478//6478\nf 6478//6478 6477//6477 6479//6479\nf 6480//6480 6481//6481 6482//6482\nf 6483//6483 6484//6484 6485//6485\nf 6486//6486 6487//6487 6488//6488\nf 6489//6489 6490//6490 6491//6491\nf 6492//6492 6493//6493 6494//6494\nf 6495//6495 6496//6496 6497//6497\nf 6498//6498 6499//6499 6500//6500\nf 6501//6501 6502//6502 6503//6503\nf 6504//6504 6505//6505 6506//6506\nf 6507//6507 6508//6508 6509//6509\nf 6510//6510 6511//6511 6512//6512\nf 6513//6513 6514//6514 6515//6515\nf 6515//6515 6516//6516 6517//6517\nf 6518//6518 6519//6519 6520//6520\nf 6514//6514 6516//6516 6515//6515\nf 6521//6521 6522//6522 6523//6523\nf 6524//6524 6525//6525 6526//6526\nf 6527//6527 6528//6528 6529//6529\nf 6530//6530 6531//6531 6532//6532\nf 6529//6529 6528//6528 6533//6533\nf 6510//6510 6512//6512 6534//6534\nf 6535//6535 6536//6536 6537//6537\nf 6538//6538 6539//6539 6540//6540\nf 6541//6541 6542//6542 6543//6543\nf 6544//6544 6545//6545 6546//6546\nf 6547//6547 6548//6548 6549//6549\nf 6550//6550 6509//6509 6551//6551\nf 6552//6552 6553//6553 6554//6554\nf 6550//6550 6507//6507 6509//6509\nf 6549//6549 6511//6511 6510//6510\nf 6548//6548 6511//6511 6549//6549\nf 6555//6555 6556//6556 6557//6557\nf 6558//6558 6559//6559 6560//6560\nf 6561//6561 6562//6562 6563//6563\nf 6564//6564 6565//6565 6566//6566\nf 6567//6567 6568//6568 6569//6569\nf 6570//6570 6571//6571 6572//6572\nf 6573//6573 6574//6574 6575//6575\nf 6576//6576 6574//6574 6573//6573\nf 6577//6577 6578//6578 6579//6579\nf 6580//6580 6581//6581 6582//6582\nf 6583//6583 6582//6582 6581//6581\nf 6584//6584 6585//6585 6586//6586\nf 6587//6587 6588//6588 6589//6589\nf 6590//6590 6591//6591 6592//6592\nf 6593//6593 6594//6594 6595//6595\nf 6596//6596 6597//6597 6598//6598\nf 6599//6599 6600//6600 6601//6601\nf 6602//6602 6603//6603 6604//6604\nf 6605//6605 6606//6606 6607//6607\nf 6608//6608 6609//6609 6610//6610\nf 6611//6611 6612//6612 6613//6613\nf 6614//6614 6615//6615 6616//6616\nf 6617//6617 6618//6618 6619//6619\nf 6620//6620 6621//6621 6622//6622\nf 6623//6623 6624//6624 6625//6625\nf 6626//6626 6627//6627 6628//6628\nf 6629//6629 6630//6630 6631//6631\nf 6632//6632 6633//6633 6634//6634\nf 6635//6635 6636//6636 6637//6637\nf 6638//6638 6639//6639 6640//6640\nf 6641//6641 6642//6642 6643//6643\nf 6644//6644 6645//6645 6646//6646\nf 6647//6647 6648//6648 6649//6649\nf 6650//6650 6651//6651 6652//6652\nf 6653//6653 6654//6654 6655//6655\nf 6656//6656 6657//6657 6658//6658\nf 6659//6659 6660//6660 6661//6661\nf 6662//6662 6663//6663 6664//6664\nf 6665//6665 6666//6666 6667//6667\nf 6668//6668 6669//6669 6670//6670\nf 6671//6671 6672//6672 6673//6673\nf 6674//6674 6675//6675 6676//6676\nf 6677//6677 6678//6678 6679//6679\nf 6680//6680 6681//6681 6682//6682\nf 6683//6683 6684//6684 6685//6685\nf 6686//6686 6687//6687 6688//6688\nf 6689//6689 6687//6687 6686//6686\nf 6690//6690 6691//6691 6692//6692\nf 6693//6693 6694//6694 6695//6695\nf 6696//6696 6697//6697 6698//6698\nf 6699//6699 6700//6700 6701//6701\nf 6702//6702 6703//6703 6704//6704\nf 6705//6705 6706//6706 6707//6707\nf 6708//6708 6709//6709 6710//6710\nf 6711//6711 6712//6712 6713//6713\nf 6714//6714 6715//6715 6716//6716\nf 6717//6717 6718//6718 6719//6719\nf 6720//6720 6721//6721 6722//6722\nf 6723//6723 6724//6724 6725//6725\nf 6726//6726 6727//6727 6728//6728\nf 6570//6570 6572//6572 6729//6729\nf 6730//6730 6731//6731 6732//6732\nf 6733//6733 6734//6734 6735//6735\nf 6736//6736 6737//6737 6738//6738\nf 6739//6739 6740//6740 6741//6741\nf 6742//6742 6743//6743 6744//6744\nf 6745//6745 6746//6746 6747//6747\nf 6748//6748 6749//6749 6750//6750\nf 6751//6751 6752//6752 6753//6753\nf 6754//6754 6755//6755 6756//6756\nf 6757//6757 6758//6758 6759//6759\nf 6760//6760 6761//6761 6762//6762\nf 6763//6763 6764//6764 6765//6765\nf 6766//6766 6767//6767 6768//6768\nf 6769//6769 6770//6770 6771//6771\nf 6772//6772 6773//6773 6774//6774\nf 6775//6775 6776//6776 6777//6777\nf 6778//6778 6779//6779 6780//6780\nf 6781//6781 6782//6782 6783//6783\nf 6784//6784 6785//6785 6786//6786\nf 6787//6787 6788//6788 6789//6789\nf 6790//6790 6791//6791 6792//6792\nf 6793//6793 6794//6794 6795//6795\nf 6796//6796 6797//6797 6798//6798\nf 6799//6799 6800//6800 6801//6801\nf 6802//6802 6803//6803 6804//6804\nf 6805//6805 6806//6806 6807//6807\nf 6808//6808 6809//6809 6810//6810\nf 6811//6811 6812//6812 6813//6813\nf 6814//6814 6815//6815 6816//6816\nf 6817//6817 6818//6818 6819//6819\nf 6820//6820 6821//6821 6822//6822\nf 6823//6823 6824//6824 6825//6825\nf 6826//6826 6827//6827 6828//6828\nf 6829//6829 6830//6830 6831//6831\nf 6832//6832 6833//6833 6834//6834\nf 6835//6835 6836//6836 6837//6837\nf 6838//6838 6839//6839 6840//6840\nf 6841//6841 6842//6842 6843//6843\nf 6844//6844 6845//6845 6846//6846\nf 6847//6847 6848//6848 6849//6849\nf 6850//6850 6851//6851 6852//6852\nf 6853//6853 6854//6854 6855//6855\nf 6856//6856 6857//6857 6858//6858\nf 6859//6859 6860//6860 6861//6861\nf 6862//6862 6863//6863 6864//6864\nf 6865//6865 6866//6866 6867//6867\nf 6868//6868 6869//6869 6870//6870\nf 6871//6871 6872//6872 6873//6873\nf 6874//6874 6875//6875 6876//6876\nf 6877//6877 6878//6878 6879//6879\nf 6880//6880 6881//6881 6882//6882\nf 6883//6883 6884//6884 6885//6885\nf 6886//6886 6887//6887 6888//6888\nf 6889//6889 6890//6890 6891//6891\nf 6892//6892 6893//6893 6894//6894\nf 6895//6895 6892//6892 6894//6894\nf 6896//6896 6897//6897 6898//6898\nf 6899//6899 6900//6900 6901//6901\nf 6902//6902 6903//6903 6904//6904\nf 6905//6905 6906//6906 6907//6907\nf 6908//6908 6909//6909 6910//6910\nf 6911//6911 6912//6912 6913//6913\nf 6914//6914 6915//6915 6916//6916\nf 6917//6917 6918//6918 6919//6919\nf 6920//6920 6921//6921 6922//6922\nf 6923//6923 6924//6924 6925//6925\nf 6926//6926 6927//6927 6928//6928\nf 6929//6929 6930//6930 6931//6931\nf 6932//6932 6933//6933 6934//6934\nf 6935//6935 6936//6936 6937//6937\nf 6938//6938 6939//6939 6940//6940\nf 6941//6941 6942//6942 6943//6943\nf 6944//6944 6945//6945 6946//6946\nf 6947//6947 6948//6948 6949//6949\nf 6950//6950 6951//6951 6952//6952\nf 6953//6953 6954//6954 6955//6955\nf 6956//6956 6957//6957 6958//6958\nf 6959//6959 6960//6960 6961//6961\nf 6962//6962 6963//6963 6964//6964\nf 6965//6965 6966//6966 6967//6967\nf 6968//6968 6969//6969 6970//6970\nf 6971//6971 6972//6972 6973//6973\nf 6974//6974 6975//6975 6976//6976\nf 6977//6977 6978//6978 6979//6979\nf 6980//6980 6981//6981 6982//6982\nf 6983//6983 6984//6984 6985//6985\nf 6986//6986 6987//6987 6988//6988\nf 6989//6989 6990//6990 6991//6991\nf 6992//6992 6993//6993 6994//6994\nf 6995//6995 6996//6996 6997//6997\nf 6998//6998 6999//6999 7000//7000\nf 7001//7001 7002//7002 7003//7003\nf 7004//7004 7005//7005 7006//7006\nf 7007//7007 7008//7008 7009//7009\nf 7010//7010 7011//7011 7012//7012\nf 7010//7010 7013//7013 7011//7011\nf 7014//7014 7015//7015 7016//7016\nf 7017//7017 7018//7018 7019//7019\nf 7020//7020 7021//7021 7022//7022\nf 7023//7023 7024//7024 7025//7025\nf 7026//7026 7027//7027 7028//7028\nf 7029//7029 7030//7030 7031//7031\nf 7032//7032 7033//7033 7034//7034\nf 7035//7035 7036//7036 7037//7037\nf 7038//7038 7039//7039 7040//7040\nf 7041//7041 7042//7042 7043//7043\nf 7044//7044 7045//7045 7046//7046\nf 7047//7047 7048//7048 7049//7049\nf 7050//7050 7051//7051 7052//7052\nf 7053//7053 7054//7054 7055//7055\nf 7056//7056 7057//7057 7058//7058\nf 7059//7059 7060//7060 7061//7061\nf 7062//7062 7063//7063 7064//7064\nf 7065//7065 7066//7066 7067//7067\nf 7068//7068 7069//7069 7070//7070\nf 7071//7071 7072//7072 7073//7073\nf 7074//7074 7075//7075 7076//7076\nf 7077//7077 7078//7078 7079//7079\nf 7080//7080 7081//7081 7082//7082\nf 7083//7083 7084//7084 7085//7085\nf 7086//7086 7087//7087 7088//7088\nf 7089//7089 7090//7090 7091//7091\nf 7092//7092 7093//7093 7094//7094\nf 7095//7095 7096//7096 7097//7097\nf 7098//7098 7099//7099 7100//7100\nf 7101//7101 7102//7102 7103//7103\nf 7104//7104 7105//7105 7106//7106\nf 7107//7107 7108//7108 7109//7109\nf 7110//7110 7111//7111 7112//7112\nf 7113//7113 7114//7114 7115//7115\nf 7116//7116 7117//7117 7118//7118\nf 7119//7119 7120//7120 7121//7121\nf 7122//7122 7123//7123 7124//7124\nf 7125//7125 7126//7126 7127//7127\nf 7128//7128 7129//7129 7130//7130\nf 7131//7131 7132//7132 7133//7133\nf 7134//7134 7135//7135 7136//7136\nf 7137//7137 7138//7138 7139//7139\nf 7140//7140 7141//7141 7142//7142\nf 7143//7143 7144//7144 7145//7145\nf 7146//7146 7147//7147 7148//7148\nf 7149//7149 7150//7150 7151//7151\nf 7152//7152 7153//7153 7154//7154\nf 7155//7155 7156//7156 7157//7157\nf 7158//7158 7159//7159 7160//7160\nf 7161//7161 7162//7162 7163//7163\nf 7164//7164 7165//7165 7166//7166\nf 7167//7167 7168//7168 7169//7169\nf 7170//7170 7171//7171 7172//7172\nf 7173//7173 7174//7174 7175//7175\nf 7176//7176 7177//7177 7178//7178\nf 7179//7179 7180//7180 7181//7181\nf 7182//7182 7183//7183 7184//7184\nf 7185//7185 7186//7186 7187//7187\nf 7188//7188 7189//7189 7190//7190\nf 7191//7191 7192//7192 7193//7193\nf 7194//7194 7195//7195 7196//7196\nf 7197//7197 7198//7198 7199//7199\nf 7200//7200 7201//7201 7202//7202\nf 7203//7203 7204//7204 7205//7205\nf 7206//7206 7207//7207 7208//7208\nf 7209//7209 7210//7210 7211//7211\nf 7212//7212 7213//7213 7214//7214\nf 7215//7215 7216//7216 7217//7217\nf 7218//7218 7219//7219 7220//7220\nf 7221//7221 7222//7222 7223//7223\nf 7224//7224 7225//7225 7226//7226\nf 7227//7227 7228//7228 7229//7229\nf 7230//7230 7231//7231 7232//7232\nf 7230//7230 7233//7233 7231//7231\nf 7234//7234 7235//7235 7236//7236\nf 7237//7237 7238//7238 7239//7239\nf 7240//7240 7241//7241 7242//7242\nf 7243//7243 7244//7244 7245//7245\nf 7246//7246 7247//7247 7248//7248\nf 7249//7249 7250//7250 7251//7251\nf 7252//7252 7253//7253 7254//7254\nf 7255//7255 7256//7256 7257//7257\nf 7255//7255 7257//7257 7258//7258\nf 7259//7259 7260//7260 7261//7261\nf 7262//7262 7263//7263 7264//7264\nf 7265//7265 7266//7266 7267//7267\nf 7268//7268 7269//7269 7270//7270\nf 7271//7271 7272//7272 7273//7273\nf 7274//7274 7275//7275 7276//7276\nf 7277//7277 7278//7278 7279//7279\nf 7280//7280 7281//7281 7282//7282\nf 7283//7283 7284//7284 7285//7285\nf 7286//7286 7287//7287 7288//7288\nf 7289//7289 7290//7290 7291//7291\nf 7292//7292 7293//7293 7294//7294\nf 7295//7295 7296//7296 7297//7297\nf 7298//7298 7299//7299 7300//7300\nf 7301//7301 7302//7302 7303//7303\nf 7304//7304 7305//7305 7306//7306\nf 7307//7307 7308//7308 7309//7309\nf 7310//7310 7311//7311 7312//7312\nf 7313//7313 7314//7314 7315//7315\nf 7316//7316 7317//7317 7318//7318\nf 7319//7319 7312//7312 7311//7311\nf 7320//7320 7321//7321 7322//7322\nf 7323//7323 7324//7324 7325//7325\nf 7326//7326 7327//7327 7328//7328\nf 7329//7329 7330//7330 7331//7331\nf 7332//7332 7333//7333 7334//7334\nf 7335//7335 7336//7336 7337//7337\nf 7338//7338 7339//7339 7340//7340\nf 7341//7341 7342//7342 7343//7343\nf 7344//7344 7345//7345 7346//7346\nf 7347//7347 7348//7348 7349//7349\nf 7350//7350 7351//7351 7352//7352\nf 7353//7353 7354//7354 7355//7355\nf 7356//7356 7357//7357 7358//7358\nf 7359//7359 7360//7360 7361//7361\nf 7362//7362 7363//7363 7364//7364\nf 7365//7365 7366//7366 7367//7367\nf 7368//7368 7369//7369 7370//7370\nf 7371//7371 7372//7372 7373//7373\nf 7374//7374 7375//7375 7376//7376\nf 7377//7377 7378//7378 7379//7379\nf 7380//7380 7381//7381 7382//7382\nf 7263//7263 7383//7383 7264//7264\nf 7277//7277 7279//7279 7384//7384\nf 7385//7385 7386//7386 7387//7387\nf 7388//7388 7389//7389 7390//7390\nf 7391//7391 7392//7392 7393//7393\nf 7394//7394 7395//7395 7396//7396\nf 7397//7397 7398//7398 7399//7399\nf 7400//7400 7401//7401 7402//7402\nf 7403//7403 7404//7404 7405//7405\nf 7406//7406 7407//7407 7408//7408\nf 7409//7409 7410//7410 7411//7411\nf 7412//7412 7413//7413 7414//7414\nf 7415//7415 7416//7416 7417//7417\nf 7418//7418 7419//7419 7420//7420\nf 7421//7421 7422//7422 7423//7423\nf 7424//7424 7425//7425 7426//7426\nf 7427//7427 7428//7428 7429//7429\nf 7430//7430 7431//7431 7432//7432\nf 7433//7433 7434//7434 7435//7435\nf 7436//7436 7437//7437 7438//7438\nf 7439//7439 7440//7440 7441//7441\nf 7442//7442 7443//7443 7444//7444\nf 7445//7445 7446//7446 7447//7447\nf 7448//7448 7449//7449 7450//7450\nf 7451//7451 7452//7452 7453//7453\nf 7454//7454 7455//7455 7456//7456\nf 7457//7457 7458//7458 7459//7459\nf 7460//7460 7461//7461 7462//7462\nf 7463//7463 7464//7464 7465//7465\nf 7466//7466 7467//7467 7468//7468\nf 7469//7469 7470//7470 7471//7471\nf 7472//7472 7473//7473 7474//7474\nf 7475//7475 7476//7476 7477//7477\nf 7478//7478 7479//7479 7480//7480\nf 7481//7481 7482//7482 7483//7483\nf 7484//7484 7485//7485 7486//7486\nf 7487//7487 7488//7488 7489//7489\nf 7490//7490 7491//7491 7492//7492\nf 7493//7493 7494//7494 7495//7495\nf 7496//7496 7497//7497 7498//7498\nf 7499//7499 7500//7500 7501//7501\nf 7502//7502 7503//7503 7504//7504\nf 7505//7505 7506//7506 7507//7507\nf 7508//7508 7509//7509 7510//7510\nf 7511//7511 7512//7512 7513//7513\nf 7514//7514 7515//7515 7516//7516\nf 7517//7517 7518//7518 7519//7519\nf 7520//7520 7521//7521 7522//7522\nf 7523//7523 7524//7524 7525//7525\nf 7526//7526 7527//7527 7528//7528\nf 7529//7529 7530//7530 7531//7531\nf 7532//7532 7533//7533 7534//7534\nf 7535//7535 7536//7536 7537//7537\nf 7538//7538 7539//7539 7540//7540\nf 7541//7541 7542//7542 7543//7543\nf 7544//7544 7545//7545 7546//7546\nf 7547//7547 7548//7548 7549//7549\nf 7550//7550 7551//7551 7552//7552\nf 7553//7553 7554//7554 7555//7555\nf 7556//7556 7557//7557 7558//7558\nf 7559//7559 7560//7560 7561//7561\nf 7562//7562 7563//7563 7564//7564\nf 7565//7565 7566//7566 7567//7567\nf 7568//7568 7569//7569 7570//7570\nf 7571//7571 7572//7572 7573//7573\nf 7574//7574 7575//7575 7576//7576\nf 7577//7577 7578//7578 7579//7579\nf 7580//7580 7581//7581 7582//7582\nf 7583//7583 7584//7584 7585//7585\nf 7586//7586 7587//7587 7588//7588\nf 7589//7589 7590//7590 7591//7591\nf 7592//7592 7593//7593 7594//7594\nf 7595//7595 7596//7596 7597//7597\nf 7598//7598 7599//7599 7600//7600\nf 7601//7601 7602//7602 7603//7603\nf 7604//7604 7605//7605 7606//7606\nf 7607//7607 7608//7608 7609//7609\nf 7610//7610 7611//7611 7612//7612\nf 7613//7613 7614//7614 7615//7615\nf 7616//7616 7617//7617 7618//7618\nf 7619//7619 7620//7620 7621//7621\nf 7622//7622 7623//7623 7624//7624\nf 7625//7625 7626//7626 7627//7627\nf 7628//7628 7629//7629 7630//7630\nf 7631//7631 7632//7632 7633//7633\nf 7634//7634 7635//7635 7636//7636\nf 7637//7637 7638//7638 7639//7639\nf 7631//7631 7633//7633 7640//7640\nf 7641//7641 7642//7642 7643//7643\nf 7644//7644 7645//7645 7646//7646\nf 7647//7647 7648//7648 7649//7649\nf 7641//7641 7643//7643 7650//7650\nf 7651//7651 7652//7652 7653//7653\nf 7654//7654 7655//7655 7656//7656\nf 7657//7657 7658//7658 7659//7659\nf 7660//7660 7661//7661 7662//7662\nf 7663//7663 7664//7664 7665//7665\nf 7666//7666 7667//7667 7668//7668\nf 7669//7669 7670//7670 7671//7671\nf 7650//7650 7643//7643 7672//7672\nf 7673//7673 7674//7674 7675//7675\nf 7676//7676 7677//7677 7678//7678\nf 7679//7679 7680//7680 7681//7681\nf 7682//7682 7683//7683 7684//7684\nf 7685//7685 7686//7686 7687//7687\nf 7688//7688 7689//7689 7690//7690\nf 7635//7635 7691//7691 7692//7692\nf 7625//7625 7627//7627 7693//7693\nf 7694//7694 7695//7695 7696//7696\nf 7697//7697 7698//7698 7699//7699\nf 7700//7700 7701//7701 7702//7702\nf 7703//7703 7704//7704 7705//7705\nf 7706//7706 7646//7646 7645//7645\nf 7707//7707 7708//7708 7709//7709\nf 7710//7710 7711//7711 7712//7712\nf 7635//7635 7692//7692 7636//7636\nf 7713//7713 7714//7714 7715//7715\nf 7716//7716 7717//7717 7718//7718\nf 7719//7719 7720//7720 7721//7721\nf 7722//7722 7723//7723 7724//7724\nf 7725//7725 7726//7726 7727//7727\nf 7658//7658 7657//7657 7728//7728\nf 7729//7729 7730//7730 7731//7731\nf 7732//7732 7733//7733 7734//7734\nf 7735//7735 7736//7736 7737//7737\nf 7694//7694 7696//7696 7738//7738\nf 7739//7739 7740//7740 7741//7741\nf 7742//7742 7743//7743 7744//7744\nf 7745//7745 7746//7746 7747//7747\nf 7748//7748 7749//7749 7750//7750\nf 7751//7751 7752//7752 7753//7753\nf 7754//7754 7755//7755 7756//7756\nf 7757//7757 7751//7751 7753//7753\nf 7685//7685 7687//7687 7758//7758\nf 7759//7759 7760//7760 7761//7761\nf 7762//7762 7648//7648 7647//7647\nf 7763//7763 7764//7764 7765//7765\nf 7761//7761 7760//7760 7766//7766\nf 7673//7673 7767//7767 7674//7674\nf 7768//7768 7769//7769 7770//7770\nf 7771//7771 7772//7772 7773//7773\nf 7710//7710 7774//7774 7711//7711\nf 7775//7775 7776//7776 7777//7777\nf 7778//7778 7701//7701 7700//7700\nf 7779//7779 7777//7777 7776//7776\nf 7780//7780 7781//7781 7782//7782\nf 7783//7783 7784//7784 7785//7785\nf 7786//7786 7787//7787 7788//7788\nf 7789//7789 7790//7790 7791//7791\nf 7792//7792 7793//7793 7794//7794\nf 7795//7795 7796//7796 7797//7797\nf 7798//7798 7799//7799 7800//7800\nf 7801//7801 7802//7802 7803//7803\nf 7804//7804 7805//7805 7806//7806\nf 7807//7807 7808//7808 7809//7809\nf 7810//7810 7811//7811 7812//7812\nf 7813//7813 7814//7814 7815//7815\nf 7816//7816 7817//7817 7818//7818\nf 7819//7819 7820//7820 7821//7821\nf 7822//7822 7823//7823 7824//7824\nf 7825//7825 7826//7826 7827//7827\nf 7828//7828 7829//7829 7830//7830\nf 7831//7831 7832//7832 7833//7833\nf 7834//7834 7835//7835 7836//7836\nf 7837//7837 7838//7838 7839//7839\nf 7840//7840 7841//7841 7842//7842\nf 7843//7843 7844//7844 7845//7845\nf 7846//7846 7847//7847 7848//7848\nf 7849//7849 7850//7850 7851//7851\nf 7852//7852 7853//7853 7854//7854\nf 7855//7855 7856//7856 7857//7857\nf 7858//7858 7859//7859 7860//7860\nf 7861//7861 7862//7862 7863//7863\nf 7864//7864 7865//7865 7866//7866\nf 7867//7867 7868//7868 7869//7869\nf 7870//7870 7871//7871 7872//7872\nf 7873//7873 7874//7874 7875//7875\nf 7876//7876 7877//7877 7878//7878\nf 7879//7879 7880//7880 7881//7881\nf 7882//7882 7883//7883 7884//7884\nf 7885//7885 7886//7886 7887//7887\nf 7888//7888 7889//7889 7890//7890\nf 7891//7891 7892//7892 7893//7893\nf 7894//7894 7895//7895 7896//7896\nf 7897//7897 7898//7898 7899//7899\nf 7900//7900 7901//7901 7902//7902\nf 7903//7903 7904//7904 7905//7905\nf 7906//7906 7907//7907 7908//7908\nf 7909//7909 7910//7910 7911//7911\nf 7912//7912 7913//7913 7914//7914\nf 7915//7915 7916//7916 7917//7917\nf 7918//7918 7919//7919 7920//7920\nf 7921//7921 7922//7922 7923//7923\nf 7924//7924 7925//7925 7926//7926\nf 7927//7927 7928//7928 7929//7929\nf 7930//7930 7931//7931 7932//7932\nf 7933//7933 7934//7934 7935//7935\nf 7936//7936 7937//7937 7938//7938\nf 7939//7939 7940//7940 7941//7941\nf 7942//7942 7943//7943 7944//7944\nf 7945//7945 7946//7946 7947//7947\nf 7948//7948 7949//7949 7950//7950\nf 7951//7951 7952//7952 7953//7953\nf 7954//7954 7955//7955 7956//7956\nf 7957//7957 7958//7958 7959//7959\nf 7960//7960 7961//7961 7962//7962\nf 7963//7963 7964//7964 7965//7965\nf 7966//7966 7967//7967 7968//7968\nf 7966//7966 7969//7969 7967//7967\nf 7970//7970 7971//7971 7972//7972\nf 7973//7973 7974//7974 7975//7975\nf 7973//7973 7976//7976 7974//7974\nf 7977//7977 7978//7978 7979//7979\nf 7980//7980 7981//7981 7982//7982\nf 7983//7983 7984//7984 7985//7985\nf 7986//7986 7987//7987 7988//7988\nf 7989//7989 7990//7990 7991//7991\nf 7992//7992 7993//7993 7994//7994\nf 7995//7995 7996//7996 7997//7997\nf 7998//7998 7999//7999 8000//8000\nf 8001//8001 8002//8002 8003//8003\nf 8004//8004 8005//8005 8006//8006\nf 8007//8007 8008//8008 8009//8009\nf 8010//8010 8011//8011 8012//8012\nf 8013//8013 8014//8014 8015//8015\nf 8016//8016 8017//8017 8018//8018\nf 8019//8019 8020//8020 8021//8021\nf 8022//8022 8023//8023 8024//8024\nf 8025//8025 8026//8026 8027//8027\nf 8028//8028 8029//8029 8030//8030\nf 8031//8031 8028//8028 8030//8030\nf 8032//8032 8033//8033 8034//8034\nf 8035//8035 8036//8036 8037//8037\nf 8038//8038 8039//8039 8040//8040\nf 8041//8041 8042//8042 8043//8043\nf 8044//8044 8045//8045 8046//8046\nf 8047//8047 8048//8048 8049//8049\nf 8050//8050 8051//8051 8052//8052\nf 8053//8053 8054//8054 8055//8055\nf 8056//8056 8057//8057 8058//8058\nf 8059//8059 8060//8060 8061//8061\nf 8062//8062 8063//8063 8064//8064\nf 8065//8065 8066//8066 8067//8067\nf 8068//8068 8069//8069 8070//8070\nf 8071//8071 8072//8072 8073//8073\nf 8074//8074 8075//8075 8076//8076\nf 8077//8077 8078//8078 8079//8079\nf 8080//8080 8081//8081 8082//8082\nf 8083//8083 8084//8084 8085//8085\nf 8086//8086 8087//8087 8088//8088\nf 8089//8089 8090//8090 8091//8091\nf 8092//8092 8093//8093 8094//8094\nf 8095//8095 8096//8096 8097//8097\nf 8098//8098 8099//8099 8100//8100\nf 8101//8101 8102//8102 8103//8103\nf 8104//8104 8105//8105 8106//8106\nf 8107//8107 8108//8108 8109//8109\nf 8110//8110 8111//8111 8112//8112\nf 8113//8113 8114//8114 8115//8115\nf 8116//8116 8117//8117 8118//8118\nf 8119//8119 8120//8120 8121//8121\nf 8122//8122 8123//8123 8124//8124\nf 8125//8125 8126//8126 8127//8127\nf 8128//8128 8129//8129 8130//8130\nf 8131//8131 8132//8132 8133//8133\nf 8134//8134 8135//8135 8136//8136\nf 8137//8137 8138//8138 8139//8139\nf 8140//8140 8141//8141 8142//8142\nf 8143//8143 8144//8144 8145//8145\nf 8146//8146 8147//8147 8148//8148\nf 8149//8149 8150//8150 8151//8151\nf 8152//8152 8153//8153 8154//8154\nf 8155//8155 8156//8156 8157//8157\nf 8158//8158 8159//8159 8160//8160\nf 8161//8161 8162//8162 8163//8163\nf 8164//8164 8165//8165 8166//8166\nf 8167//8167 8168//8168 8169//8169\nf 8170//8170 8171//8171 8172//8172\nf 8173//8173 8174//8174 8175//8175\nf 8176//8176 8177//8177 8178//8178\nf 8179//8179 8180//8180 8181//8181\nf 8182//8182 8183//8183 8184//8184\nf 8182//8182 8184//8184 8185//8185\nf 8186//8186 8187//8187 8188//8188\nf 8189//8189 8190//8190 8191//8191\nf 8192//8192 8193//8193 8194//8194\nf 8195//8195 8196//8196 8197//8197\nf 8198//8198 8199//8199 8200//8200\nf 8201//8201 8202//8202 8203//8203\nf 8204//8204 8205//8205 8206//8206\nf 8207//8207 8208//8208 8209//8209\nf 8210//8210 8211//8211 8212//8212\nf 8213//8213 8214//8214 8215//8215\nf 8216//8216 8217//8217 8218//8218\nf 8219//8219 8220//8220 8221//8221\nf 8222//8222 8223//8223 8224//8224\nf 8225//8225 8226//8226 8227//8227\nf 8228//8228 8229//8229 8230//8230\nf 8231//8231 8232//8232 8233//8233\nf 8234//8234 8235//8235 8236//8236\nf 8237//8237 8238//8238 8239//8239\nf 8240//8240 8241//8241 8242//8242\nf 8243//8243 8244//8244 8245//8245\nf 8246//8246 8247//8247 8248//8248\nf 8249//8249 8250//8250 8251//8251\nf 8252//8252 8253//8253 8254//8254\nf 8255//8255 8256//8256 8257//8257\nf 8258//8258 8259//8259 8260//8260\nf 8261//8261 8262//8262 8263//8263\nf 8264//8264 8265//8265 8266//8266\nf 8267//8267 8268//8268 8269//8269\nf 8270//8270 8271//8271 8272//8272\nf 8273//8273 8274//8274 8275//8275\nf 8276//8276 8277//8277 8278//8278\nf 8279//8279 8280//8280 8281//8281\nf 8282//8282 8283//8283 8284//8284\nf 8285//8285 8286//8286 8287//8287\nf 8288//8288 8289//8289 8290//8290\nf 8291//8291 8292//8292 8293//8293\nf 8294//8294 8295//8295 8296//8296\nf 8297//8297 8298//8298 8299//8299\nf 8300//8300 8301//8301 8302//8302\nf 8303//8303 8304//8304 8305//8305\nf 8306//8306 8307//8307 8308//8308\nf 8309//8309 8310//8310 8311//8311\nf 8298//8298 8312//8312 8299//8299\nf 8313//8313 8314//8314 8315//8315\nf 8316//8316 8317//8317 8318//8318\nf 8319//8319 8320//8320 8321//8321\nf 8322//8322 8323//8323 8324//8324\nf 8325//8325 8326//8326 8327//8327\nf 8328//8328 8329//8329 8330//8330\nf 8331//8331 8332//8332 8333//8333\nf 8334//8334 8335//8335 8336//8336\nf 8337//8337 8338//8338 8339//8339\nf 8340//8340 8341//8341 8342//8342\nf 8343//8343 8344//8344 8345//8345\nf 8346//8346 8347//8347 8348//8348\nf 8349//8349 8350//8350 8351//8351\nf 8352//8352 8353//8353 8354//8354\nf 8355//8355 8356//8356 8357//8357\nf 8358//8358 8359//8359 8360//8360\nf 8361//8361 8362//8362 8363//8363\nf 8364//8364 8365//8365 8366//8366\nf 8367//8367 8368//8368 8369//8369\nf 8370//8370 8371//8371 8372//8372\nf 8373//8373 8374//8374 8375//8375\nf 8376//8376 8377//8377 8378//8378\nf 8379//8379 8380//8380 8381//8381\nf 8379//8379 8381//8381 8382//8382\nf 8383//8383 8384//8384 8385//8385\nf 8386//8386 8387//8387 8388//8388\nf 8389//8389 8390//8390 8391//8391\nf 8392//8392 8393//8393 8394//8394\nf 8395//8395 8396//8396 8397//8397\nf 8398//8398 8399//8399 8400//8400\nf 8401//8401 8402//8402 8403//8403\nf 8404//8404 8405//8405 8406//8406\nf 8407//8407 8408//8408 8409//8409\nf 8410//8410 8411//8411 8412//8412\nf 8413//8413 8414//8414 8415//8415\nf 8416//8416 8417//8417 8418//8418\nf 8419//8419 8420//8420 8421//8421\nf 8335//8335 8422//8422 8336//8336\nf 8423//8423 8424//8424 8425//8425\nf 8423//8423 8425//8425 8426//8426\nf 8427//8427 8428//8428 8429//8429\nf 8430//8430 8431//8431 8432//8432\nf 8433//8433 8434//8434 8435//8435\nf 8436//8436 8437//8437 8438//8438\nf 8439//8439 8440//8440 8441//8441\nf 8442//8442 8443//8443 8444//8444\nf 8445//8445 8446//8446 8447//8447\nf 8448//8448 8449//8449 8450//8450\nf 8370//8370 8372//8372 8451//8451\nf 8452//8452 8453//8453 8454//8454\nf 8455//8455 8456//8456 8457//8457\nf 8458//8458 8459//8459 8460//8460\nf 8461//8461 8462//8462 8463//8463\nf 8464//8464 8465//8465 8466//8466\nf 8467//8467 8468//8468 8469//8469\nf 8470//8470 8471//8471 8472//8472\nf 8473//8473 8474//8474 8475//8475\nf 8476//8476 8477//8477 8478//8478\nf 8479//8479 8480//8480 8481//8481\nf 8482//8482 8483//8483 8484//8484\nf 8485//8485 8486//8486 8487//8487\nf 8488//8488 8489//8489 8490//8490\nf 8491//8491 8492//8492 8493//8493\nf 8494//8494 8495//8495 8496//8496\nf 8480//8480 8497//8497 8481//8481\nf 8498//8498 8499//8499 8500//8500\nf 8501//8501 8502//8502 8503//8503\nf 8504//8504 8505//8505 8506//8506\nf 8507//8507 8508//8508 8509//8509\nf 8510//8510 8511//8511 8512//8512\nf 8513//8513 8514//8514 8515//8515\nf 8516//8516 8517//8517 8518//8518\nf 8519//8519 8520//8520 8521//8521\nf 8522//8522 8523//8523 8524//8524\nf 8525//8525 8526//8526 8527//8527\nf 8528//8528 8529//8529 8530//8530\nf 8531//8531 8532//8532 8533//8533\nf 8534//8534 8535//8535 8536//8536\nf 8537//8537 8538//8538 8539//8539\nf 8540//8540 8541//8541 8542//8542\nf 8543//8543 8544//8544 8545//8545\nf 8546//8546 8547//8547 8548//8548\nf 8549//8549 8550//8550 8551//8551\nf 8552//8552 8553//8553 8554//8554\nf 8555//8555 8556//8556 8557//8557\nf 8558//8558 8559//8559 8560//8560\nf 8561//8561 8562//8562 8563//8563\nf 8564//8564 8565//8565 8566//8566\nf 8567//8567 8568//8568 8569//8569\nf 8570//8570 8571//8571 8572//8572\nf 8573//8573 8574//8574 8575//8575\nf 8576//8576 8577//8577 8578//8578\nf 8579//8579 8580//8580 8581//8581\nf 8582//8582 8583//8583 8584//8584\nf 8585//8585 8586//8586 8587//8587\nf 8588//8588 8589//8589 8590//8590\nf 8591//8591 8592//8592 8593//8593\nf 8594//8594 8595//8595 8596//8596\nf 8597//8597 8598//8598 8599//8599\nf 8600//8600 8601//8601 8602//8602\nf 8603//8603 8604//8604 8605//8605\nf 8606//8606 8607//8607 8608//8608\nf 8609//8609 8610//8610 8611//8611\nf 8612//8612 8613//8613 8614//8614\nf 8615//8615 8616//8616 8617//8617\nf 8618//8618 8619//8619 8620//8620\nf 8621//8621 8622//8622 8623//8623\nf 8624//8624 8625//8625 8626//8626\nf 8627//8627 8628//8628 8629//8629\nf 8630//8630 8631//8631 8632//8632\nf 8607//8607 8633//8633 8608//8608\nf 8634//8634 8635//8635 8636//8636\nf 6502//6502 8637//8637 6503//6503\nf 8638//8638 8639//8639 8640//8640\nf 8641//8641 8642//8642 8643//8643\nf 8644//8644 8645//8645 8646//8646\nf 8606//8606 8608//8608 8647//8647\nf 8648//8648 8649//8649 8650//8650\nf 8646//8646 8651//8651 8644//8644\nf 8652//8652 8653//8653 8654//8654\nf 8655//8655 8656//8656 8657//8657\nf 8658//8658 8628//8628 8627//8627\nf 8659//8659 8660//8660 8661//8661\nf 8662//8662 8663//8663 8664//8664\nf 8665//8665 8666//8666 8667//8667\nf 8668//8668 8669//8669 8649//8649\nf 8670//8670 8659//8659 8661//8661\nf 8671//8671 8653//8653 8652//8652\nf 8672//8672 8664//8664 8663//8663\nf 8673//8673 8674//8674 8675//8675\nf 8676//8676 8677//8677 8678//8678\nf 8679//8679 8680//8680 8681//8681\nf 8649//8649 8648//8648 8668//8668\nf 8680//8680 8682//8682 8681//8681\nf 8683//8683 8684//8684 8685//8685\nf 8686//8686 8687//8687 8688//8688\nf 8683//8683 8685//8685 8689//8689\nf 8690//8690 8691//8691 8692//8692\nf 8690//8690 8693//8693 8691//8691\nf 8694//8694 8695//8695 8696//8696\nf 8697//8697 8698//8698 8699//8699\nf 8700//8700 8701//8701 8702//8702\nf 8703//8703 8704//8704 8705//8705\nf 8706//8706 8707//8707 8708//8708\nf 8709//8709 8710//8710 8711//8711\nf 8712//8712 8713//8713 8714//8714\nf 8715//8715 8716//8716 8717//8717\nf 8718//8718 8719//8719 8720//8720\nf 8721//8721 8719//8719 8718//8718\nf 8722//8722 8723//8723 8724//8724\nf 8722//8722 8725//8725 8723//8723\nf 8726//8726 8727//8727 8728//8728\nf 8729//8729 8730//8730 8731//8731\nf 8732//8732 8733//8733 8734//8734\nf 8735//8735 8736//8736 8737//8737\nf 8735//8735 8737//8737 8738//8738\nf 8739//8739 8740//8740 8741//8741\nf 8739//8739 8742//8742 8740//8740\nf 8743//8743 8744//8744 8745//8745\nf 8746//8746 8747//8747 8748//8748\nf 8749//8749 8750//8750 8751//8751\nf 8752//8752 8753//8753 8754//8754\nf 8755//8755 8756//8756 8757//8757\nf 8758//8758 8759//8759 8760//8760\nf 8761//8761 8762//8762 8763//8763\nf 8764//8764 8765//8765 8766//8766\nf 8765//8765 8767//8767 8766//8766\nf 8768//8768 8769//8769 8770//8770\nf 8769//8769 8771//8771 8770//8770\nf 8772//8772 8773//8773 8774//8774\nf 8775//8775 8776//8776 8777//8777\nf 8778//8778 8779//8779 8780//8780\nf 8781//8781 8782//8782 8783//8783\nf 8782//8782 8784//8784 8783//8783\nf 8785//8785 8786//8786 8787//8787\nf 8788//8788 8789//8789 8790//8790\nf 8791//8791 8792//8792 8793//8793\nf 8794//8794 8795//8795 8796//8796\nf 8797//8797 8798//8798 8799//8799\nf 8800//8800 8801//8801 8802//8802\nf 8803//8803 8804//8804 8805//8805\nf 8806//8806 8807//8807 8808//8808\nf 8809//8809 8810//8810 8811//8811\nf 8812//8812 8813//8813 8814//8814\nf 8815//8815 8816//8816 8817//8817\nf 8818//8818 8819//8819 8820//8820\nf 8821//8821 8822//8822 8823//8823\nf 8824//8824 8822//8822 8821//8821\nf 8825//8825 8826//8826 8827//8827\nf 8828//8828 8829//8829 8830//8830\nf 8831//8831 8832//8832 8833//8833\nf 8834//8834 8835//8835 8836//8836\nf 8837//8837 8838//8838 8839//8839\nf 8840//8840 8841//8841 8842//8842\nf 8843//8843 8844//8844 8845//8845\nf 8846//8846 8847//8847 8848//8848\nf 8849//8849 8850//8850 8851//8851\nf 8852//8852 8853//8853 8854//8854\nf 8855//8855 8856//8856 8857//8857\nf 8858//8858 8859//8859 8860//8860\nf 8861//8861 8862//8862 8863//8863\nf 8864//8864 8865//8865 8866//8866\nf 8867//8867 8868//8868 8869//8869\nf 8870//8870 8871//8871 8872//8872\nf 8873//8873 8874//8874 8875//8875\nf 8876//8876 8877//8877 8878//8878\nf 8879//8879 8880//8880 8881//8881\nf 8876//8876 8879//8879 8881//8881\nf 8876//8876 8881//8881 8877//8877\nf 8882//8882 8883//8883 8884//8884\nf 8885//8885 8886//8886 8887//8887\nf 8888//8888 8889//8889 8890//8890\nf 8891//8891 8892//8892 8893//8893\nf 8894//8894 8895//8895 8896//8896\nf 8897//8897 8898//8898 8899//8899\nf 8900//8900 8901//8901 8902//8902\nf 8903//8903 8904//8904 8905//8905\nf 8906//8906 8907//8907 8908//8908\nf 8909//8909 8910//8910 8911//8911\nf 8912//8912 8913//8913 8914//8914\nf 8915//8915 8916//8916 8917//8917\nf 8918//8918 8919//8919 8920//8920\nf 8921//8921 8912//8912 8914//8914\nf 8922//8922 8923//8923 8924//8924\nf 8925//8925 8926//8926 8927//8927\nf 8928//8928 8929//8929 8930//8930\nf 8792//8792 8791//8791 8931//8931\nf 8932//8932 8933//8933 8934//8934\nf 8935//8935 8936//8936 8937//8937\nf 8938//8938 8939//8939 8940//8940\nf 8941//8941 8942//8942 8943//8943\nf 8944//8944 8945//8945 8946//8946\nf 8947//8947 8948//8948 8949//8949\nf 8950//8950 8951//8951 8952//8952\nf 8953//8953 8954//8954 8955//8955\nf 8956//8956 8957//8957 8958//8958\nf 8959//8959 8960//8960 8961//8961\nf 8962//8962 8963//8963 8964//8964\nf 8965//8965 8966//8966 8967//8967\nf 8968//8968 8969//8969 8970//8970\nf 8971//8971 8972//8972 8973//8973\nf 8974//8974 8975//8975 8976//8976\nf 8977//8977 8978//8978 8979//8979\nf 8980//8980 8981//8981 8982//8982\nf 8983//8983 8984//8984 8985//8985\nf 8986//8986 8987//8987 8988//8988\nf 8989//8989 8990//8990 8991//8991\nf 8992//8992 8993//8993 8994//8994\nf 8995//8995 8996//8996 8997//8997\nf 8998//8998 8999//8999 9000//9000\nf 9001//9001 9002//9002 9003//9003\nf 9004//9004 9005//9005 9006//9006\nf 9007//9007 9008//9008 9009//9009\nf 9010//9010 9011//9011 9012//9012\nf 9013//9013 9014//9014 9015//9015\nf 9016//9016 9017//9017 9018//9018\nf 9019//9019 9020//9020 9021//9021\nf 9022//9022 9023//9023 9024//9024\nf 9025//9025 9026//9026 9027//9027\nf 9028//9028 9029//9029 9030//9030\nf 9031//9031 9032//9032 9033//9033\nf 9034//9034 9035//9035 9036//9036\nf 9037//9037 9038//9038 9039//9039\nf 9040//9040 9041//9041 9042//9042\nf 9043//9043 9044//9044 9045//9045\nf 9046//9046 9047//9047 9048//9048\nf 9049//9049 9050//9050 9051//9051\nf 9052//9052 9053//9053 9054//9054\nf 9055//9055 9056//9056 9057//9057\nf 9058//9058 9059//9059 9060//9060\nf 9061//9061 9062//9062 9063//9063\nf 9064//9064 9065//9065 9066//9066\nf 9067//9067 9068//9068 9069//9069\nf 9070//9070 9071//9071 9072//9072\nf 9073//9073 9074//9074 9075//9075\nf 9076//9076 9077//9077 9078//9078\nf 9079//9079 9080//9080 9081//9081\nf 9082//9082 9083//9083 9084//9084\nf 9085//9085 9086//9086 9087//9087\nf 9088//9088 9086//9086 9085//9085\nf 9089//9089 9090//9090 9088//9088\nf 9089//9089 9088//9088 9085//9085\nf 9091//9091 9090//9090 9089//9089\nf 9092//9092 9093//9093 9094//9094\nf 9095//9095 9096//9096 9097//9097\nf 9098//9098 9099//9099 9100//9100\nf 9101//9101 9102//9102 9103//9103\nf 9104//9104 9105//9105 9106//9106\nf 9107//9107 9108//9108 9109//9109\nf 9110//9110 9111//9111 9112//9112\nf 9113//9113 9114//9114 9115//9115\nf 9116//9116 9117//9117 9118//9118\nf 9119//9119 9120//9120 9121//9121\nf 9122//9122 9123//9123 9124//9124\nf 9125//9125 9126//9126 9127//9127\nf 9128//9128 9129//9129 9130//9130\nf 9128//9128 9130//9130 9131//9131\nf 9132//9132 9133//9133 9134//9134\nf 9135//9135 9136//9136 9137//9137\nf 9138//9138 9139//9139 9140//9140\nf 9141//9141 9142//9142 9143//9143\nf 9144//9144 9145//9145 9146//9146\nf 9147//9147 9148//9148 9149//9149\nf 9150//9150 9151//9151 9152//9152\nf 9153//9153 9154//9154 9155//9155\nf 9156//9156 9157//9157 9158//9158\nf 9159//9159 9160//9160 9161//9161\nf 9162//9162 9163//9163 9164//9164\nf 9165//9165 9166//9166 9167//9167\nf 9168//9168 9169//9169 9170//9170\nf 9171//9171 9172//9172 9173//9173\nf 9174//9174 9175//9175 9176//9176\nf 9177//9177 9178//9178 9179//9179\nf 9180//9180 9181//9181 9182//9182\nf 9183//9183 9184//9184 9185//9185\nf 9186//9186 9187//9187 9188//9188\nf 9189//9189 9190//9190 9191//9191\nf 9192//9192 9193//9193 9194//9194\nf 9195//9195 9196//9196 9197//9197\nf 9198//9198 9199//9199 9200//9200\nf 9201//9201 9202//9202 9203//9203\nf 9204//9204 9205//9205 9206//9206\nf 9207//9207 9208//9208 9209//9209\nf 9210//9210 9211//9211 9212//9212\nf 9213//9213 9214//9214 9215//9215\nf 9216//9216 9217//9217 9218//9218\nf 9219//9219 9220//9220 9221//9221\nf 9222//9222 9223//9223 9224//9224\nf 9225//9225 9226//9226 9227//9227\nf 9228//9228 9229//9229 9230//9230\nf 9231//9231 9232//9232 9233//9233\nf 9234//9234 9235//9235 9236//9236\nf 9237//9237 9238//9238 9239//9239\nf 9240//9240 9241//9241 9242//9242\nf 9243//9243 9244//9244 9245//9245\nf 9246//9246 9247//9247 9248//9248\nf 9249//9249 9250//9250 9251//9251\nf 9252//9252 9253//9253 9254//9254\nf 9255//9255 9256//9256 9257//9257\nf 9258//9258 9259//9259 9260//9260\nf 9261//9261 9262//9262 9263//9263\nf 9264//9264 9265//9265 9266//9266\nf 9267//9267 9268//9268 9269//9269\nf 9270//9270 9271//9271 9272//9272\nf 9273//9273 9274//9274 9275//9275\nf 9276//9276 9277//9277 9278//9278\nf 9279//9279 9280//9280 9281//9281\nf 9282//9282 9283//9283 9284//9284\nf 9285//9285 9286//9286 9287//9287\nf 9288//9288 9289//9289 9290//9290\nf 9291//9291 9292//9292 9293//9293\nf 9294//9294 9292//9292 9291//9291\nf 9295//9295 9296//9296 9297//9297\nf 9298//9298 9299//9299 9300//9300\nf 9301//9301 9302//9302 9303//9303\nf 9304//9304 9305//9305 9306//9306\nf 9307//9307 9305//9305 9304//9304\nf 9308//9308 9309//9309 9310//9310\nf 9311//9311 9312//9312 9313//9313\nf 9314//9314 9315//9315 9316//9316\nf 9317//9317 9318//9318 9319//9319\nf 9320//9320 9318//9318 9317//9317\nf 9321//9321 9322//9322 9323//9323\nf 9324//9324 9325//9325 9326//9326\nf 9327//9327 9328//9328 9329//9329\nf 9330//9330 9331//9331 9332//9332\nf 9333//9333 9331//9331 9330//9330\nf 9334//9334 9335//9335 9336//9336\nf 9337//9337 9338//9338 9339//9339\nf 9340//9340 9341//9341 9342//9342\nf 9343//9343 9344//9344 9345//9345\nf 9346//9346 9347//9347 9348//9348\nf 9346//9346 9349//9349 9347//9347\nf 9350//9350 9351//9351 9352//9352\nf 9353//9353 9354//9354 9355//9355\nf 9356//9356 9357//9357 9358//9358\nf 9359//9359 9360//9360 9361//9361\nf 9362//9362 9363//9363 9364//9364\nf 9365//9365 9366//9366 9367//9367\nf 9368//9368 9369//9369 9370//9370\nf 9371//9371 9372//9372 9373//9373\nf 9374//9374 9375//9375 9376//9376\nf 9377//9377 9378//9378 9379//9379\nf 9380//9380 9381//9381 9382//9382\nf 9383//9383 9384//9384 9385//9385\nf 9386//9386 9387//9387 9388//9388\nf 9389//9389 9390//9390 9391//9391\nf 9392//9392 9393//9393 9394//9394\nf 9395//9395 9396//9396 9397//9397\nf 9398//9398 9399//9399 9400//9400\nf 9401//9401 9402//9402 9403//9403\nf 9404//9404 9405//9405 9406//9406\nf 9407//9407 9408//9408 9409//9409\nf 9410//9410 9411//9411 9412//9412\nf 9413//9413 9414//9414 9415//9415\nf 9416//9416 9417//9417 9418//9418\nf 9419//9419 9420//9420 9421//9421\nf 9422//9422 9423//9423 9424//9424\nf 9425//9425 9426//9426 9427//9427\nf 9428//9428 9429//9429 9430//9430\nf 9431//9431 9432//9432 9433//9433\nf 9434//9434 9435//9435 9436//9436\nf 9437//9437 9438//9438 9439//9439\nf 9440//9440 9441//9441 9442//9442\nf 9443//9443 9444//9444 9445//9445\nf 9446//9446 9447//9447 9448//9448\nf 9449//9449 9450//9450 9451//9451\nf 9452//9452 9453//9453 9454//9454\nf 9455//9455 9456//9456 9457//9457\nf 9458//9458 9459//9459 9460//9460\nf 6506//6506 9461//9461 6504//6504\nf 9462//9462 9463//9463 9464//9464\nf 9465//9465 9466//9466 9467//9467\nf 9468//9468 9469//9469 9470//9470\nf 9471//9471 9472//9472 9473//9473\nf 9474//9474 9475//9475 9476//9476\nf 9477//9477 9478//9478 9479//9479\nf 9480//9480 9481//9481 9482//9482\nf 4995//4995 9483//9483 9484//9484\nf 9485//9485 9486//9486 9487//9487\nf 9488//9488 9489//9489 9490//9490\nf 9491//9491 9492//9492 9493//9493\nf 9491//9491 9493//9493 9494//9494\nf 9495//9495 9496//9496 9497//9497\nf 9498//9498 9499//9499 9500//9500\nf 9501//9501 9498//9498 9500//9500\nf 9495//9495 9497//9497 9502//9502\nf 9503//9503 9504//9504 9505//9505\nf 9503//9503 9506//9506 9504//9504\nf 9503//9503 9507//9507 9506//9506\nf 9508//9508 9509//9509 9510//9510\nf 9511//9511 9512//9512 9513//9513\nf 9514//9514 9515//9515 9516//9516\nf 9517//9517 9518//9518 9519//9519\nf 9520//9520 9521//9521 9522//9522\nf 9523//9523 9524//9524 9525//9525\nf 9526//9526 9527//9527 9528//9528\nf 9529//9529 9526//9526 9528//9528\nf 9530//9530 9531//9531 9532//9532\nf 9533//9533 9534//9534 9535//9535\nf 9536//9536 9537//9537 9538//9538\nf 9539//9539 9540//9540 9541//9541\nf 9523//9523 9525//9525 9542//9542\nf 9543//9543 9544//9544 9545//9545\nf 9546//9546 9547//9547 9548//9548\nf 9549//9549 9550//9550 9551//9551\nf 9552//9552 9553//9553 9554//9554\nf 9555//9555 9556//9556 9557//9557\nf 9558//9558 9559//9559 9560//9560\nf 9561//9561 9562//9562 9563//9563\nf 9564//9564 9565//9565 9566//9566\nf 9567//9567 9568//9568 9569//9569\nf 9570//9570 9571//9571 9572//9572\nf 9573//9573 9574//9574 9575//9575\nf 9576//9576 9577//9577 9578//9578\nf 9579//9579 9580//9580 9581//9581\nf 9582//9582 9583//9583 9584//9584\nf 9585//9585 9586//9586 9587//9587\nf 9588//9588 9589//9589 9590//9590\nf 9591//9591 9592//9592 9593//9593\nf 9594//9594 9595//9595 9596//9596\nf 9597//9597 9598//9598 9599//9599\nf 9600//9600 9601//9601 9602//9602\nf 9603//9603 9604//9604 9605//9605\nf 9606//9606 9607//9607 9608//9608\nf 9609//9609 9610//9610 9611//9611\nf 9612//9612 9613//9613 9614//9614\nf 9615//9615 9616//9616 9617//9617\nf 9618//9618 9619//9619 9620//9620\nf 9621//9621 9622//9622 9623//9623\nf 9624//9624 9625//9625 9626//9626\nf 9627//9627 9628//9628 9629//9629\nf 9630//9630 9624//9624 9626//9626\nf 9631//9631 9627//9627 9629//9629\nf 9632//9632 9633//9633 9634//9634\nf 9635//9635 9636//9636 9637//9637\nf 9638//9638 9639//9639 9640//9640\nf 9635//9635 9641//9641 9636//9636\nf 9642//9642 9643//9643 9644//9644\nf 9624//9624 9645//9645 9625//9625\nf 9646//9646 9647//9647 9648//9648\nf 9649//9649 9650//9650 9651//9651\nf 9652//9652 9653//9653 9654//9654\nf 9655//9655 9654//9654 9653//9653\nf 9656//9656 9657//9657 9658//9658\nf 9659//9659 9660//9660 9661//9661\nf 9662//9662 9663//9663 9664//9664\nf 9665//9665 9666//9666 9667//9667\nf 9668//9668 9669//9669 9670//9670\nf 9669//9669 9671//9671 9670//9670\nf 9672//9672 9673//9673 9674//9674\nf 9675//9675 9676//9676 9677//9677\nf 9675//9675 9677//9677 9678//9678\nf 9679//9679 9680//9680 9681//9681\nf 9682//9682 9683//9683 9684//9684\nf 9685//9685 9686//9686 9687//9687\nf 9688//9688 9689//9689 9690//9690\nf 9691//9691 9692//9692 9693//9693\nf 9694//9694 9695//9695 9693//9693\nf 9692//9692 9694//9694 9693//9693\nf 9696//9696 9697//9697 9698//9698\nf 9699//9699 9691//9691 9693//9693\nf 9699//9699 9693//9693 9700//9700\nf 9701//9701 9702//9702 9698//9698\nf 9702//9702 9696//9696 9698//9698\nf 9701//9701 9698//9698 9703//9703\nf 9703//9703 9698//9698 9704//9704\nf 9705//9705 9706//9706 9707//9707\nf 9704//9704 9698//9698 9708//9708\nf 9693//9693 9695//9695 9698//9698\nf 9695//9695 9708//9708 9698//9698\nf 9709//9709 9710//9710 9711//9711\nf 9712//9712 9713//9713 9710//9710\nf 9712//9712 9714//9714 9713//9713\nf 9712//9712 9715//9715 9714//9714\nf 9712//9712 9710//9710 9709//9709\nf 9716//9716 9712//9712 9717//9717\nf 9716//9716 9715//9715 9712//9712\nf 9718//9718 9719//9719 9720//9720\nf 9721//9721 9718//9718 9722//9722\nf 9721//9721 9723//9723 9719//9719\nf 9721//9721 9719//9719 9718//9718\nf 9724//9724 9725//9725 9726//9726\nf 9727//9727 9725//9725 9724//9724\nf 9728//9728 9729//9729 9730//9730\nf 9731//9731 9732//9732 9733//9733\nf 9734//9734 9735//9735 9736//9736\nf 9737//9737 9738//9738 9739//9739\nf 9740//9740 9737//9737 9739//9739\nf 9741//9741 9742//9742 9743//9743\nf 9744//9744 9745//9745 9746//9746\nf 9747//9747 9748//9748 9749//9749\nf 9750//9750 9751//9751 9752//9752\nf 9753//9753 9754//9754 9755//9755\nf 9751//9751 9756//9756 9752//9752\nf 9750//9750 9752//9752 9757//9757\nf 9758//9758 9753//9753 9755//9755\nf 9759//9759 9760//9760 9761//9761\nf 9762//9762 9758//9758 9755//9755\nf 9763//9763 9759//9759 9761//9761\nf 9764//9764 9765//9765 9754//9754\nf 9741//9741 9743//9743 9766//9766\nf 9754//9754 9765//9765 9755//9755\nf 9767//9767 9768//9768 9769//9769\nf 9770//9770 9771//9771 9772//9772\nf 9773//9773 9774//9774 9775//9775\nf 9776//9776 9777//9777 9778//9778\nf 9779//9779 9780//9780 9781//9781\nf 9776//9776 9778//9778 9782//9782\nf 9783//9783 9784//9784 9785//9785\nf 9786//9786 9787//9787 9788//9788\nf 9789//9789 9790//9790 9791//9791\nf 9792//9792 9793//9793 9794//9794\nf 9795//9795 9796//9796 9797//9797\nf 9791//9791 9798//9798 9789//9789\nf 9799//9799 9800//9800 9801//9801\nf 9802//9802 9803//9803 9804//9804\nf 9805//9805 9806//9806 9807//9807\nf 9804//9804 9803//9803 9808//9808\nf 9809//9809 9810//9810 9811//9811\nf 9812//9812 9813//9813 9814//9814\nf 9809//9809 9811//9811 9815//9815\nf 9816//9816 9809//9809 9815//9815\nf 9817//9817 9818//9818 9819//9819\nf 9820//9820 9821//9821 9822//9822\nf 9823//9823 9824//9824 9825//9825\nf 9824//9824 9826//9826 9825//9825\nf 9827//9827 9828//9828 9829//9829\nf 9830//9830 9831//9831 9832//9832\nf 9833//9833 9834//9834 9835//9835\nf 9822//9822 9821//9821 9836//9836\nf 9837//9837 9838//9838 9839//9839\nf 9840//9840 9833//9833 9835//9835\nf 9841//9841 9842//9842 9843//9843\nf 9844//9844 9845//9845 9846//9846\nf 9847//9847 9848//9848 9849//9849\nf 9850//9850 9851//9851 9852//9852\nf 9847//9847 9849//9849 9853//9853\nf 9854//9854 9855//9855 9856//9856\nf 9857//9857 9858//9858 9859//9859\nf 9860//9860 9861//9861 9862//9862\nf 9863//9863 9864//9864 9865//9865\nf 9866//9866 9867//9867 9868//9868\nf 9869//9869 9870//9870 9871//9871\nf 9854//9854 9856//9856 9872//9872\nf 9873//9873 9874//9874 9875//9875\nf 9876//9876 9877//9877 9878//9878\nf 9879//9879 9880//9880 9876//9876\nf 9878//9878 9879//9879 9876//9876\nf 9855//9855 9881//9881 9856//9856\nf 9882//9882 9883//9883 9884//9884\nf 9885//9885 9886//9886 9887//9887\nf 9888//9888 9889//9889 9890//9890\nf 9891//9891 9892//9892 9893//9893\nf 9894//9894 9895//9895 9896//9896\nf 9897//9897 9898//9898 9899//9899\nf 9900//9900 9901//9901 9902//9902\nf 9903//9903 9904//9904 9905//9905\nf 9906//9906 9907//9907 9908//9908\nf 9909//9909 9910//9910 9911//9911\nf 9912//9912 9913//9913 9914//9914\nf 9915//9915 9916//9916 9917//9917\nf 9918//9918 9919//9919 9920//9920\nf 9921//9921 9922//9922 9923//9923\nf 9924//9924 9925//9925 9926//9926\nf 9927//9927 9928//9928 9929//9929\nf 9930//9930 9931//9931 9932//9932\nf 9933//9933 9934//9934 9935//9935\nf 9936//9936 9937//9937 9938//9938\nf 9939//9939 9940//9940 9941//9941\nf 9942//9942 9943//9943 9944//9944\nf 9945//9945 9946//9946 9947//9947\nf 9948//9948 9949//9949 9950//9950\nf 9951//9951 9952//9952 9953//9953\nf 9954//9954 9955//9955 9956//9956\nf 9957//9957 9958//9958 9959//9959\nf 9960//9960 9961//9961 9962//9962\nf 9963//9963 9964//9964 9965//9965\nf 9961//9961 9966//9966 9962//9962\nf 9967//9967 9968//9968 9969//9969\nf 9970//9970 9971//9971 9972//9972\nf 9973//9973 9974//9974 9975//9975\nf 9976//9976 9977//9977 9978//9978\nf 9979//9979 9980//9980 9981//9981\nf 9982//9982 9983//9983 9984//9984\nf 9985//9985 9979//9979 9981//9981\nf 9986//9986 9987//9987 9988//9988\nf 9989//9989 9990//9990 9991//9991\nf 9992//9992 9993//9993 9994//9994\nf 9995//9995 9996//9996 9997//9997\nf 9998//9998 9999//9999 10000//10000\nf 10001//10001 10002//10002 10003//10003\nf 10004//10004 10005//10005 10006//10006\nf 10007//10007 10008//10008 10009//10009\nf 10010//10010 10011//10011 10012//10012\nf 10013//10013 10014//10014 10015//10015\nf 10016//10016 10017//10017 10018//10018\nf 10019//10019 10020//10020 10021//10021\nf 10022//10022 10023//10023 10024//10024\nf 10021//10021 10020//10020 10025//10025\nf 10026//10026 10027//10027 10028//10028\nf 10029//10029 10030//10030 10031//10031\nf 10032//10032 10033//10033 10034//10034\nf 10035//10035 10036//10036 10037//10037\nf 10038//10038 10039//10039 10040//10040\nf 10041//10041 10042//10042 10043//10043\nf 10044//10044 10045//10045 10046//10046\nf 10047//10047 10048//10048 10049//10049\nf 10034//10034 10050//10050 10051//10051\nf 10052//10052 10053//10053 10054//10054\nf 10055//10055 10033//10033 10032//10032\nf 10056//10056 10057//10057 10058//10058\nf 10059//10059 10060//10060 10061//10061\nf 10062//10062 10063//10063 10064//10064\nf 10065//10065 10066//10066 10067//10067\nf 10068//10068 10069//10069 10070//10070\nf 10071//10071 10049//10049 10048//10048\nf 10072//10072 10073//10073 10074//10074\nf 10075//10075 10076//10076 10077//10077\nf 10078//10078 10079//10079 10080//10080\nf 10081//10081 10082//10082 10083//10083\nf 10084//10084 10085//10085 10086//10086\nf 10087//10087 10076//10076 10088//10088\nf 10089//10089 10090//10090 10091//10091\nf 10092//10092 10093//10093 10094//10094\nf 10092//10092 10095//10095 10093//10093\nf 10026//10026 10028//10028 10096//10096\nf 10097//10097 10055//10055 10032//10032\nf 10098//10098 10099//10099 10100//10100\nf 10101//10101 10102//10102 10103//10103\nf 10034//10034 10104//10104 10032//10032\nf 10105//10105 10031//10031 10030//10030\nf 10051//10051 10104//10104 10034//10034\nf 10106//10106 10107//10107 10108//10108\nf 10109//10109 10110//10110 10111//10111\nf 10112//10112 10113//10113 10114//10114\nf 10115//10115 10116//10116 10117//10117\nf 10104//10104 10118//10118 10032//10032\nf 10087//10087 10077//10077 10076//10076\nf 10119//10119 10120//10120 10121//10121\nf 10080//10080 10079//10079 10122//10122\nf 10123//10123 10124//10124 10125//10125\nf 10126//10126 10127//10127 10128//10128\nf 10128//10128 10127//10127 10129//10129\nf 10130//10130 10131//10131 10132//10132\nf 10133//10133 10134//10134 10135//10135\nf 10136//10136 10137//10137 10138//10138\nf 10139//10139 10140//10140 10141//10141\nf 10142//10142 10143//10143 10144//10144\nf 10145//10145 10146//10146 10147//10147\nf 10148//10148 10149//10149 10150//10150\nf 10151//10151 10152//10152 10153//10153\nf 10091//10091 10090//10090 10154//10154\nf 10155//10155 10156//10156 10157//10157\nf 10158//10158 10159//10159 10160//10160\nf 10161//10161 10162//10162 10163//10163\nf 10154//10154 10164//10164 10091//10091\nf 10165//10165 10166//10166 10167//10167\nf 10168//10168 10169//10169 10170//10170\nf 10171//10171 10172//10172 10173//10173\nf 10174//10174 10175//10175 10176//10176\nf 10177//10177 10178//10178 10179//10179\nf 10180//10180 10181//10181 10182//10182\nf 10183//10183 10184//10184 10185//10185\nf 10186//10186 10187//10187 10188//10188\nf 10189//10189 10190//10190 10191//10191\nf 10192//10192 10193//10193 10194//10194\nf 10195//10195 10196//10196 10197//10197\nf 10198//10198 10199//10199 10200//10200\nf 10201//10201 10202//10202 10203//10203\nf 10204//10204 10205//10205 10206//10206\nf 10199//10199 10207//10207 10200//10200\nf 10208//10208 10209//10209 10210//10210\nf 10211//10211 10212//10212 10213//10213\nf 10214//10214 10215//10215 10216//10216\nf 10217//10217 10218//10218 10219//10219\nf 10220//10220 10221//10221 10222//10222\nf 10223//10223 10224//10224 10225//10225\nf 10226//10226 10227//10227 10228//10228\nf 10229//10229 10230//10230 10231//10231\nf 10232//10232 10233//10233 10234//10234\nf 10235//10235 10236//10236 10237//10237\nf 10238//10238 10239//10239 10240//10240\nf 10241//10241 10242//10242 10243//10243\nf 10244//10244 10245//10245 10246//10246\nf 10247//10247 10248//10248 10249//10249\nf 10250//10250 10251//10251 10252//10252\nf 10253//10253 10254//10254 10255//10255\nf 10256//10256 10257//10257 10258//10258\nf 10259//10259 10260//10260 10261//10261\nf 10262//10262 10263//10263 10264//10264\nf 10265//10265 10266//10266 10267//10267\nf 10268//10268 10269//10269 10270//10270\nf 10271//10271 10272//10272 10273//10273\nf 10274//10274 10275//10275 10276//10276\nf 10277//10277 10278//10278 10279//10279\nf 10280//10280 10281//10281 10282//10282\nf 10283//10283 10284//10284 10285//10285\nf 10286//10286 10287//10287 10288//10288\nf 10289//10289 10290//10290 10291//10291\nf 10292//10292 10293//10293 10294//10294\nf 10295//10295 10296//10296 10297//10297\nf 10298//10298 10299//10299 10300//10300\nf 10301//10301 10302//10302 10303//10303\nf 10269//10269 10304//10304 10270//10270\nf 10305//10305 10164//10164 10154//10154\nf 10306//10306 10307//10307 10308//10308\nf 10309//10309 10310//10310 10311//10311\nf 10312//10312 10313//10313 10314//10314\nf 10315//10315 10316//10316 10317//10317\nf 10318//10318 10319//10319 10320//10320\nf 10321//10321 10322//10322 10323//10323\nf 10324//10324 10325//10325 10326//10326\nf 10327//10327 10328//10328 10329//10329\nf 10330//10330 10327//10327 10329//10329\nf 10331//10331 10332//10332 10333//10333\nf 10334//10334 10335//10335 10336//10336\nf 10337//10337 10338//10338 10327//10327\nf 10339//10339 10340//10340 10341//10341\nf 10342//10342 10183//10183 10343//10343\nf 10344//10344 10345//10345 10346//10346\nf 10347//10347 10348//10348 10349//10349\nf 10350//10350 10351//10351 10352//10352\nf 10353//10353 10354//10354 10355//10355\nf 10356//10356 10357//10357 10358//10358\nf 10359//10359 10360//10360 10361//10361\nf 10362//10362 10363//10363 10364//10364\nf 10365//10365 10184//10184 10183//10183\nf 10366//10366 10367//10367 10368//10368\nf 10367//10367 10366//10366 10369//10369\nf 10365//10365 10370//10370 10184//10184\nf 10185//10185 10343//10343 10183//10183\nf 10371//10371 10372//10372 10373//10373\nf 10374//10374 10375//10375 10376//10376\nf 10377//10377 10378//10378 10379//10379\nf 10380//10380 10381//10381 10382//10382\nf 10383//10383 10384//10384 10385//10385\nf 10386//10386 10387//10387 10388//10388\nf 10389//10389 10390//10390 10391//10391\nf 10392//10392 10393//10393 10394//10394\nf 10395//10395 10396//10396 10397//10397\nf 10398//10398 10399//10399 10400//10400\nf 10401//10401 10402//10402 10403//10403\nf 10404//10404 10405//10405 10406//10406\nf 10407//10407 10408//10408 10409//10409\nf 10410//10410 10411//10411 10412//10412\nf 10413//10413 10414//10414 10415//10415\nf 10416//10416 10417//10417 10418//10418\nf 10419//10419 10420//10420 10421//10421\nf 10422//10422 10423//10423 10424//10424\nf 10425//10425 10426//10426 10427//10427\nf 10428//10428 10429//10429 10430//10430\nf 10431//10431 10432//10432 10433//10433\nf 10434//10434 10435//10435 10436//10436\nf 10437//10437 10438//10438 10439//10439\nf 10440//10440 10441//10441 10442//10442\nf 10443//10443 10444//10444 10445//10445\nf 10446//10446 10447//10447 10448//10448\nf 10449//10449 10450//10450 10451//10451\nf 10452//10452 10453//10453 10454//10454\nf 10455//10455 10456//10456 10457//10457\nf 10458//10458 10459//10459 10460//10460\nf 10461//10461 10462//10462 10463//10463\nf 10464//10464 10465//10465 10466//10466\nf 10467//10467 10468//10468 10469//10469\nf 10470//10470 10471//10471 10472//10472\nf 10473//10473 10474//10474 10475//10475\nf 10476//10476 10477//10477 10478//10478\nf 10479//10479 10480//10480 10481//10481\nf 10482//10482 10483//10483 10484//10484\nf 10485//10485 10486//10486 10487//10487\nf 10488//10488 10489//10489 10490//10490\nf 10491//10491 10492//10492 10493//10493\nf 10494//10494 10495//10495 10496//10496\nf 10497//10497 10498//10498 10499//10499\nf 10500//10500 10501//10501 10502//10502\nf 10503//10503 10504//10504 10505//10505\nf 10506//10506 10507//10507 10508//10508\nf 10509//10509 10510//10510 10511//10511\nf 10512//10512 10513//10513 10514//10514\nf 10515//10515 10516//10516 10517//10517\nf 10518//10518 10519//10519 10520//10520\nf 10521//10521 10522//10522 10523//10523\nf 10524//10524 10525//10525 10526//10526\nf 10527//10527 10528//10528 10529//10529\nf 10530//10530 10463//10463 10462//10462\nf 10531//10531 10532//10532 10533//10533\nf 10534//10534 10535//10535 10536//10536\nf 10337//10337 10327//10327 10537//10537\nf 10327//10327 10330//10330 10537//10537\nf 10538//10538 10539//10539 10540//10540\nf 10541//10541 10542//10542 10543//10543\nf 10544//10544 10545//10545 10546//10546\nf 10523//10523 10522//10522 10547//10547\nf 10548//10548 10549//10549 10550//10550\nf 10551//10551 10552//10552 10553//10553\nf 10554//10554 10555//10555 10556//10556\nf 10557//10557 10558//10558 10559//10559\nf 10560//10560 10561//10561 10562//10562\nf 10358//10358 10563//10563 10356//10356\nf 10564//10564 10565//10565 10566//10566\nf 10307//10307 10567//10567 10308//10308\nf 10568//10568 10569//10569 10570//10570\nf 10571//10571 10572//10572 10573//10573\nf 10574//10574 10529//10529 10528//10528\nf 10575//10575 10576//10576 10577//10577\nf 10578//10578 10579//10579 10580//10580\nf 10581//10581 10582//10582 10583//10583\nf 10584//10584 10585//10585 10586//10586\nf 10587//10587 10588//10588 10589//10589\nf 10590//10590 10591//10591 10592//10592\nf 10590//10590 10592//10592 10593//10593\nf 10594//10594 10595//10595 10596//10596\nf 10597//10597 10598//10598 10599//10599\nf 10600//10600 10601//10601 10602//10602\nf 10603//10603 10604//10604 10605//10605\nf 10606//10606 10607//10607 10608//10608\nf 10609//10609 10610//10610 10611//10611\nf 10612//10612 10613//10613 10614//10614\nf 10615//10615 10616//10616 10617//10617\nf 10618//10618 10619//10619 10620//10620\nf 10621//10621 10622//10622 10623//10623\nf 10624//10624 10625//10625 10626//10626\nf 10627//10627 10628//10628 10629//10629\nf 10630//10630 10631//10631 10632//10632\nf 10633//10633 10634//10634 10635//10635\nf 10636//10636 10637//10637 10638//10638\nf 10639//10639 10640//10640 10641//10641\nf 10642//10642 10643//10643 10644//10644\nf 10643//10643 10645//10645 10644//10644\nf 10646//10646 10647//10647 10648//10648\nf 10649//10649 10650//10650 10651//10651\nf 10652//10652 10653//10653 10654//10654\nf 10655//10655 10656//10656 10657//10657\nf 10658//10658 10659//10659 10660//10660\nf 10661//10661 10662//10662 10663//10663\nf 10664//10664 10665//10665 10666//10666\nf 10667//10667 10668//10668 10669//10669\nf 10670//10670 10671//10671 10672//10672\nf 10671//10671 10673//10673 10672//10672\nf 10674//10674 10675//10675 10676//10676\nf 10677//10677 10678//10678 10679//10679\nf 10680//10680 10681//10681 10682//10682\nf 10683//10683 10684//10684 10685//10685\nf 10686//10686 10687//10687 10688//10688\nf 10689//10689 10690//10690 10691//10691\nf 10687//10687 10692//10692 10688//10688\nf 10693//10693 10689//10689 10691//10691\nf 10694//10694 10695//10695 10696//10696\nf 10697//10697 10698//10698 10699//10699\nf 10700//10700 10697//10697 10699//10699\nf 10701//10701 10700//10700 10699//10699\nf 10695//10695 10702//10702 10696//10696\nf 10703//10703 10704//10704 10705//10705\nf 10706//10706 10703//10703 10705//10705\nf 10707//10707 10708//10708 10709//10709\nf 10710//10710 10711//10711 10712//10712\nf 10713//10713 10714//10714 10715//10715\nf 10716//10716 10717//10717 10718//10718\nf 10719//10719 10720//10720 10721//10721\nf 10722//10722 10723//10723 10724//10724\nf 10725//10725 10726//10726 10727//10727\nf 10728//10728 10729//10729 10730//10730\nf 10731//10731 10732//10732 10733//10733\nf 10734//10734 10735//10735 10736//10736\nf 10737//10737 10738//10738 10739//10739\nf 10740//10740 10741//10741 10742//10742\nf 10743//10743 10744//10744 10745//10745\nf 10746//10746 10747//10747 10748//10748\nf 10749//10749 10750//10750 10751//10751\nf 10752//10752 10753//10753 10754//10754\nf 10755//10755 10756//10756 10757//10757\nf 10758//10758 10759//10759 10760//10760\nf 10761//10761 10762//10762 10763//10763\nf 10764//10764 10765//10765 10766//10766\nf 10767//10767 10768//10768 10769//10769\nf 10770//10770 10771//10771 10772//10772\nf 10773//10773 10774//10774 10775//10775\nf 10776//10776 10777//10777 10778//10778\nf 10779//10779 10780//10780 10781//10781\nf 10782//10782 10783//10783 10784//10784\nf 10785//10785 10786//10786 10787//10787\nf 10788//10788 10789//10789 10790//10790\nf 10791//10791 10792//10792 10793//10793\nf 10794//10794 10795//10795 10796//10796\nf 10797//10797 10798//10798 10799//10799\nf 10796//10796 10795//10795 10800//10800\nf 10801//10801 10802//10802 10803//10803\nf 10803//10803 10802//10802 10804//10804\nf 10805//10805 10806//10806 10807//10807\nf 10808//10808 10809//10809 10810//10810\nf 10811//10811 10812//10812 10813//10813\nf 10810//10810 10809//10809 10814//10814\nf 10815//10815 10816//10816 10817//10817\nf 10818//10818 10819//10819 10820//10820\nf 10821//10821 10822//10822 10823//10823\nf 10824//10824 10825//10825 10826//10826\nf 10827//10827 10828//10828 10826//10826\nf 10829//10829 10830//10830 10831//10831\nf 10832//10832 10833//10833 10834//10834\nf 10828//10828 10824//10824 10826//10826\nf 10835//10835 10836//10836 10837//10837\nf 10838//10838 10839//10839 10840//10840\nf 10841//10841 10842//10842 10843//10843\nf 10844//10844 10845//10845 10846//10846\nf 10847//10847 10848//10848 10849//10849\nf 10850//10850 10683//10683 10685//10685\nf 10851//10851 10852//10852 10853//10853\nf 10854//10854 10855//10855 10856//10856\nf 10719//10719 10721//10721 10857//10857\nf 10858//10858 10859//10859 10860//10860\nf 10861//10861 10862//10862 10863//10863\nf 10864//10864 10865//10865 10866//10866\nf 10867//10867 10868//10868 10869//10869\nf 10870//10870 10871//10871 10872//10872\nf 10873//10873 10860//10860 10859//10859\nf 10874//10874 10875//10875 10876//10876\nf 10877//10877 10878//10878 10879//10879\nf 10878//10878 10880//10880 10879//10879\nf 10881//10881 10882//10882 10883//10883\nf 10884//10884 10885//10885 10886//10886\nf 10887//10887 10888//10888 10889//10889\nf 10890//10890 10891//10891 10892//10892\nf 10893//10893 10894//10894 10895//10895\nf 10896//10896 10897//10897 10898//10898\nf 10868//10868 10867//10867 10899//10899\nf 10900//10900 10901//10901 10902//10902\nf 10903//10903 10904//10904 10905//10905\nf 10906//10906 10907//10907 10908//10908\nf 10909//10909 10910//10910 10911//10911\nf 10912//10912 10913//10913 10914//10914\nf 10773//10773 10915//10915 10774//10774\nf 10681//10681 10916//10916 10917//10917\nf 10918//10918 10919//10919 10920//10920\nf 10921//10921 10922//10922 10923//10923\nf 10681//10681 10917//10917 10682//10682\nf 10924//10924 10925//10925 10926//10926\nf 10927//10927 10928//10928 10929//10929\nf 10930//10930 10931//10931 10932//10932\nf 10933//10933 10934//10934 10935//10935\nf 10936//10936 10937//10937 10938//10938\nf 10928//10928 10939//10939 10929//10929\nf 10940//10940 10941//10941 10942//10942\nf 10943//10943 10944//10944 10945//10945\nf 10946//10946 10947//10947 10948//10948\nf 10949//10949 10950//10950 10951//10951\nf 10952//10952 10953//10953 10954//10954\nf 10955//10955 10956//10956 10957//10957\nf 10958//10958 10959//10959 10960//10960\nf 10961//10961 10962//10962 10963//10963\nf 10964//10964 10965//10965 10966//10966\nf 10967//10967 10953//10953 10952//10952\nf 10968//10968 10934//10934 10933//10933\nf 10969//10969 10970//10970 10971//10971\nf 10972//10972 10973//10973 10974//10974\nf 10975//10975 10976//10976 10977//10977\nf 10978//10978 10979//10979 10980//10980\nf 10981//10981 10982//10982 10983//10983\nf 10984//10984 10985//10985 10986//10986\nf 10987//10987 10988//10988 10989//10989\nf 10990//10990 10991//10991 10992//10992\nf 10993//10993 10994//10994 10995//10995\nf 10996//10996 10997//10997 10998//10998\nf 10997//10997 10999//10999 10998//10998\nf 11000//11000 11001//11001 11002//11002\nf 11003//11003 11004//11004 11005//11005\nf 10995//10995 10994//10994 11006//11006\nf 11007//11007 11008//11008 11009//11009\nf 11010//11010 11011//11011 11012//11012\nf 11013//11013 11014//11014 11015//11015\nf 11016//11016 11017//11017 11018//11018\nf 11019//11019 11020//11020 11021//11021\nf 11022//11022 11023//11023 11024//11024\nf 11025//11025 11022//11022 11026//11026\nf 11026//11026 11022//11022 11024//11024\nf 11027//11027 11028//11028 11029//11029\nf 11030//11030 11031//11031 11032//11032\nf 11030//11030 11032//11032 11033//11033\nf 11034//11034 11035//11035 11036//11036\nf 11037//11037 11038//11038 11039//11039\nf 11040//11040 11041//11041 11042//11042\nf 11043//11043 11044//11044 11045//11045\nf 11046//11046 11047//11047 11048//11048\nf 11049//11049 11050//11050 11051//11051\nf 11052//11052 11053//11053 11054//11054\nf 11055//11055 11056//11056 11057//11057\nf 11058//11058 11059//11059 11060//11060\nf 11061//11061 11062//11062 11063//11063\nf 11064//11064 11065//11065 11066//11066\nf 11067//11067 11068//11068 11069//11069\nf 11070//11070 11071//11071 11072//11072\nf 11070//11070 11073//11073 11071//11071\nf 11074//11074 11075//11075 11076//11076\nf 11077//11077 11078//11078 11079//11079\nf 11080//11080 11081//11081 11082//11082\nf 11083//11083 11084//11084 11085//11085\nf 11086//11086 11087//11087 11088//11088\nf 11089//11089 11090//11090 11091//11091\nf 11092//11092 11093//11093 11094//11094\nf 11095//11095 11096//11096 11097//11097\nf 11095//11095 11097//11097 11098//11098\nf 11099//11099 11100//11100 11101//11101\nf 11102//11102 11103//11103 11104//11104\nf 11105//11105 11102//11102 11104//11104\nf 11106//11106 11099//11099 11101//11101\nf 11106//11106 11107//11107 11099//11099\nf 11105//11105 11104//11104 11108//11108\nf 11102//11102 11109//11109 11110//11110\nf 11105//11105 11108//11108 11111//11111\nf 11109//11109 11112//11112 11110//11110\nf 11102//11102 11110//11110 11103//11103\nf 11106//11106 11113//11113 11107//11107\nf 11106//11106 11114//11114 11113//11113\nf 11106//11106 11115//11115 11114//11114\nf 11106//11106 11116//11116 11115//11115\nf 11106//11106 11111//11111 11116//11116\nf 11106//11106 11105//11105 11111//11111\nf 11117//11117 11118//11118 11119//11119\nf 11120//11120 11121//11121 11122//11122\nf 11123//11123 11124//11124 11125//11125\nf 11125//11125 11124//11124 11126//11126\nf 11124//11124 11127//11127 11126//11126\nf 11128//11128 11129//11129 11130//11130\nf 11131//11131 11132//11132 11133//11133\nf 11134//11134 11135//11135 11136//11136\nf 11137//11137 11138//11138 11139//11139\nf 11140//11140 11141//11141 11142//11142\nf 11135//11135 11143//11143 11136//11136\nf 11144//11144 11145//11145 11146//11146\nf 11147//11147 11148//11148 11149//11149\nf 11150//11150 11151//11151 11152//11152\nf 11153//11153 11154//11154 11155//11155\nf 11156//11156 11157//11157 11158//11158\nf 11159//11159 11160//11160 11161//11161\nf 11160//11160 11162//11162 11163//11163\nf 11164//11164 11165//11165 11166//11166\nf 11161//11161 11160//11160 11163//11163\nf 11167//11167 11168//11168 11169//11169\nf 11170//11170 11171//11171 11172//11172\nf 11173//11173 11174//11174 11175//11175\nf 11176//11176 11177//11177 11178//11178\nf 11174//11174 11179//11179 11175//11175\nf 11156//11156 11180//11180 11157//11157\nf 11181//11181 11182//11182 11183//11183\nf 11184//11184 11185//11185 11186//11186\nf 11187//11187 11188//11188 11189//11189\nf 11190//11190 11191//11191 11192//11192\nf 11193//11193 11194//11194 11195//11195\nf 11196//11196 11197//11197 11198//11198\nf 11197//11197 11199//11199 11198//11198\nf 11200//11200 11154//11154 11153//11153\nf 11201//11201 11156//11156 11158//11158\nf 11202//11202 11201//11201 11158//11158\nf 11203//11203 11204//11204 11205//11205\nf 11206//11206 11207//11207 11208//11208\nf 11209//11209 11210//11210 11211//11211\nf 11212//11212 11213//11213 11214//11214\nf 11215//11215 11216//11216 11217//11217\nf 11218//11218 11219//11219 11220//11220\nf 11221//11221 11222//11222 11223//11223\nf 11224//11224 11221//11221 11223//11223\nf 11225//11225 11226//11226 11227//11227\nf 11228//11228 11229//11229 11230//11230\nf 11231//11231 11230//11230 11229//11229\nf 11232//11232 11233//11233 11234//11234\nf 11235//11235 11236//11236 11237//11237\nf 11238//11238 11239//11239 11240//11240\nf 11241//11241 11242//11242 11243//11243\nf 11244//11244 11245//11245 11246//11246\nf 11247//11247 11248//11248 11249//11249\nf 11250//11250 11251//11251 11252//11252\nf 11253//11253 11254//11254 11255//11255\nf 11256//11256 11257//11257 11258//11258\nf 11259//11259 11260//11260 11261//11261\nf 11262//11262 11263//11263 11264//11264\nf 11265//11265 11266//11266 11267//11267\nf 11268//11268 11269//11269 11270//11270\nf 11271//11271 11272//11272 11273//11273\nf 11274//11274 11275//11275 11276//11276\nf 11277//11277 11278//11278 11279//11279\nf 11280//11280 11281//11281 11282//11282\nf 11283//11283 11284//11284 11285//11285\nf 11286//11286 11287//11287 11288//11288\nf 11289//11289 11290//11290 11291//11291\nf 11292//11292 11293//11293 11294//11294\nf 11295//11295 11296//11296 11297//11297\nf 11298//11298 11299//11299 11300//11300\nf 11301//11301 11302//11302 11303//11303\nf 11304//11304 11305//11305 11306//11306\nf 11307//11307 11308//11308 11309//11309\nf 11310//11310 11311//11311 11312//11312\nf 11313//11313 11314//11314 11315//11315\nf 11316//11316 11317//11317 11318//11318\nf 11319//11319 11320//11320 11321//11321\nf 11322//11322 11323//11323 11324//11324\nf 11325//11325 11326//11326 11327//11327\nf 11328//11328 11329//11329 11330//11330\nf 11331//11331 11332//11332 11333//11333\nf 11334//11334 11335//11335 11336//11336\nf 11337//11337 11334//11334 11336//11336\nf 11338//11338 11339//11339 11340//11340\nf 11341//11341 11342//11342 11343//11343\nf 11344//11344 11345//11345 11346//11346\nf 11347//11347 11348//11348 11349//11349\nf 11350//11350 11351//11351 11352//11352\nf 11353//11353 11354//11354 11355//11355\nf 11356//11356 11357//11357 11358//11358\nf 11359//11359 11360//11360 11361//11361\nf 11362//11362 11363//11363 11364//11364\nf 11365//11365 11366//11366 11367//11367\nf 11368//11368 11369//11369 11370//11370\nf 11371//11371 11372//11372 11373//11373\nf 11374//11374 11375//11375 11376//11376\nf 11218//11218 11377//11377 11219//11219\nf 11378//11378 11379//11379 11380//11380\nf 11381//11381 11382//11382 11383//11383\nf 11384//11384 11385//11385 11386//11386\nf 11387//11387 11388//11388 11389//11389\nf 11390//11390 11391//11391 11392//11392\nf 11393//11393 11394//11394 11395//11395\nf 11396//11396 11397//11397 11398//11398\nf 11399//11399 11400//11400 11401//11401\nf 11402//11402 11403//11403 11404//11404\nf 11405//11405 11406//11406 11407//11407\nf 11408//11408 11409//11409 11410//11410\nf 11411//11411 11412//11412 11413//11413\nf 11414//11414 11415//11415 11416//11416\nf 11417//11417 11418//11418 11419//11419\nf 11420//11420 11421//11421 11422//11422\nf 11423//11423 11424//11424 11425//11425\nf 11426//11426 11427//11427 11428//11428\nf 11429//11429 11430//11430 11431//11431\nf 11432//11432 11433//11433 11434//11434\nf 11435//11435 11436//11436 11437//11437\nf 11438//11438 11439//11439 11440//11440\nf 11441//11441 11442//11442 11443//11443\nf 11444//11444 11445//11445 11446//11446\nf 11447//11447 11448//11448 11449//11449\nf 11450//11450 11451//11451 11452//11452\nf 11453//11453 11454//11454 11455//11455\nf 11456//11456 11457//11457 11458//11458\nf 11459//11459 11460//11460 11461//11461\nf 11462//11462 11463//11463 11464//11464\nf 11465//11465 11466//11466 11467//11467\nf 11468//11468 11469//11469 11470//11470\nf 11471//11471 11472//11472 11473//11473\nf 11474//11474 11475//11475 11476//11476\nf 11477//11477 11478//11478 11479//11479\nf 11480//11480 11481//11481 11482//11482\nf 11483//11483 11484//11484 11485//11485\nf 11486//11486 11487//11487 11488//11488\nf 11489//11489 11490//11490 11491//11491\nf 11492//11492 11493//11493 11494//11494\nf 11495//11495 11496//11496 11497//11497\nf 11498//11498 11499//11499 11500//11500\nf 11501//11501 11502//11502 11503//11503\nf 11504//11504 11505//11505 11506//11506\nf 11507//11507 11508//11508 11509//11509\nf 11510//11510 11511//11511 11512//11512\nf 11513//11513 11514//11514 11515//11515\nf 11516//11516 11517//11517 11518//11518\nf 11519//11519 11520//11520 11521//11521\nf 11522//11522 11523//11523 11524//11524\nf 11525//11525 11526//11526 11527//11527\nf 11528//11528 11529//11529 11530//11530\nf 11531//11531 11532//11532 11533//11533\nf 11534//11534 11535//11535 11536//11536\nf 11537//11537 11538//11538 11539//11539\nf 11540//11540 11541//11541 11542//11542\nf 11543//11543 11541//11541 11540//11540\nf 11544//11544 11545//11545 11546//11546\nf 11547//11547 11548//11548 11549//11549\nf 11550//11550 11551//11551 11552//11552\nf 11553//11553 11554//11554 11555//11555\nf 11556//11556 11557//11557 11558//11558\nf 11559//11559 11560//11560 11561//11561\nf 11562//11562 11563//11563 11564//11564\nf 11565//11565 11566//11566 11567//11567\nf 11568//11568 11569//11569 11570//11570\nf 11571//11571 11572//11572 11573//11573\nf 11574//11574 11575//11575 11576//11576\nf 11577//11577 11578//11578 11579//11579\nf 11580//11580 11581//11581 11582//11582\nf 11583//11583 11584//11584 11585//11585\nf 11586//11586 11587//11587 11588//11588\nf 11589//11589 11590//11590 11591//11591\nf 11592//11592 11593//11593 11594//11594\nf 11595//11595 11596//11596 11597//11597\nf 11598//11598 11599//11599 11600//11600\nf 11601//11601 11602//11602 11603//11603\nf 11604//11604 11605//11605 11606//11606\nf 11607//11607 11608//11608 11609//11609\nf 11610//11610 11611//11611 11612//11612\nf 11613//11613 11614//11614 11615//11615\nf 11616//11616 11617//11617 11618//11618\nf 11619//11619 11620//11620 11621//11621\nf 11622//11622 11623//11623 11624//11624\nf 11625//11625 11626//11626 11627//11627\nf 11628//11628 11629//11629 11630//11630\nf 11631//11631 11632//11632 11633//11633\nf 11634//11634 11635//11635 11636//11636\nf 11637//11637 11638//11638 11639//11639\nf 11640//11640 11641//11641 11642//11642\nf 11643//11643 11644//11644 11645//11645\nf 11646//11646 11647//11647 11648//11648\nf 11649//11649 11650//11650 11651//11651\nf 11652//11652 11653//11653 11654//11654\nf 11655//11655 11656//11656 11657//11657\nf 11658//11658 11659//11659 11660//11660\nf 11658//11658 11660//11660 11661//11661\nf 11662//11662 11663//11663 11664//11664\nf 11665//11665 11666//11666 11667//11667\nf 11668//11668 11669//11669 11670//11670\nf 11671//11671 11672//11672 11673//11673\nf 11674//11674 11675//11675 11676//11676\nf 11677//11677 11678//11678 11679//11679\nf 11680//11680 11681//11681 11682//11682\nf 11683//11683 11684//11684 11685//11685\nf 11686//11686 11687//11687 11688//11688\nf 11689//11689 11690//11690 11691//11691\nf 11692//11692 11693//11693 11694//11694\nf 11695//11695 11696//11696 11697//11697\nf 11698//11698 11699//11699 11700//11700\nf 11701//11701 11702//11702 11703//11703\nf 11704//11704 11705//11705 11706//11706\nf 11707//11707 11708//11708 11709//11709\nf 11710//11710 11711//11711 11712//11712\nf 11713//11713 11714//11714 11715//11715\nf 11716//11716 11717//11717 11718//11718\nf 11719//11719 11720//11720 11721//11721\nf 11722//11722 11723//11723 11724//11724\nf 11725//11725 11726//11726 11727//11727\nf 11728//11728 11729//11729 11730//11730\nf 11731//11731 11732//11732 11733//11733\nf 11734//11734 11735//11735 11736//11736\nf 11737//11737 11738//11738 11739//11739\nf 11740//11740 11741//11741 11742//11742\nf 11743//11743 11744//11744 11745//11745\nf 11746//11746 11747//11747 11748//11748\nf 11749//11749 11750//11750 11751//11751\nf 11752//11752 11753//11753 11754//11754\nf 11755//11755 11756//11756 11757//11757\nf 11758//11758 11759//11759 11760//11760\nf 11761//11761 11762//11762 11763//11763\nf 11764//11764 11765//11765 11766//11766\nf 11767//11767 11768//11768 11769//11769\nf 11770//11770 11771//11771 11772//11772\nf 11773//11773 11774//11774 11775//11775\nf 11776//11776 11777//11777 11778//11778\nf 11779//11779 11780//11780 11781//11781\nf 11782//11782 11783//11783 11784//11784\nf 11785//11785 11786//11786 11787//11787\nf 11788//11788 11789//11789 11790//11790\nf 11791//11791 11792//11792 11793//11793\nf 11794//11794 11795//11795 11796//11796\nf 11797//11797 11798//11798 11799//11799\nf 11800//11800 11801//11801 11802//11802\nf 11803//11803 11804//11804 11805//11805\nf 11806//11806 11807//11807 11808//11808\nf 11809//11809 11810//11810 11811//11811\nf 11812//11812 11813//11813 11814//11814\nf 11815//11815 11816//11816 11817//11817\nf 11818//11818 11819//11819 11820//11820\nf 11821//11821 11822//11822 11823//11823\nf 11824//11824 11825//11825 11826//11826\nf 11827//11827 11828//11828 11829//11829\nf 11830//11830 11831//11831 11832//11832\nf 11833//11833 11834//11834 11835//11835\nf 11836//11836 11837//11837 11838//11838\nf 11839//11839 11840//11840 11841//11841\nf 11842//11842 11843//11843 11844//11844\nf 11845//11845 11846//11846 11847//11847\nf 11848//11848 11849//11849 11850//11850\nf 11851//11851 11852//11852 11853//11853\nf 11854//11854 11855//11855 11856//11856\nf 11857//11857 11858//11858 11859//11859\nf 11860//11860 11861//11861 11862//11862\nf 11863//11863 11864//11864 11865//11865\nf 11866//11866 11867//11867 11868//11868\nf 11869//11869 11870//11870 11871//11871\nf 11872//11872 11873//11873 11874//11874\nf 11875//11875 11876//11876 11877//11877\nf 11878//11878 11879//11879 11880//11880\nf 11878//11878 11880//11880 11881//11881\nf 11882//11882 11883//11883 11884//11884\nf 11885//11885 11886//11886 11887//11887\nf 11888//11888 11889//11889 11890//11890\nf 11891//11891 11892//11892 11893//11893\nf 11894//11894 11895//11895 11896//11896\nf 11897//11897 11898//11898 11899//11899\nf 11900//11900 11901//11901 11902//11902\nf 11903//11903 11904//11904 11905//11905\nf 11903//11903 11906//11906 11904//11904\nf 11907//11907 11908//11908 11909//11909\nf 11910//11910 11911//11911 11912//11912\nf 11913//11913 11914//11914 11915//11915\nf 11916//11916 11917//11917 11918//11918\nf 11919//11919 11920//11920 11921//11921\nf 11922//11922 11923//11923 11924//11924\nf 11925//11925 11926//11926 11927//11927\nf 11928//11928 11929//11929 11930//11930\nf 11931//11931 11932//11932 11933//11933\nf 11934//11934 11935//11935 11936//11936\nf 11937//11937 11938//11938 11939//11939\nf 11940//11940 11941//11941 11942//11942\nf 11943//11943 11944//11944 11945//11945\nf 11946//11946 11947//11947 11948//11948\nf 11949//11949 11950//11950 11951//11951\nf 11952//11952 11953//11953 11954//11954\nf 11955//11955 11956//11956 11957//11957\nf 11958//11958 11959//11959 11960//11960\nf 11961//11961 11962//11962 11963//11963\nf 11964//11964 11965//11965 11966//11966\nf 11967//11967 11960//11960 11959//11959\nf 11968//11968 11969//11969 11970//11970\nf 11971//11971 11972//11972 11973//11973\nf 11974//11974 11975//11975 11976//11976\nf 11977//11977 11978//11978 11979//11979\nf 11980//11980 11981//11981 11982//11982\nf 11983//11983 11984//11984 11985//11985\nf 11986//11986 11987//11987 11988//11988\nf 11989//11989 11990//11990 11991//11991\nf 11992//11992 11993//11993 11994//11994\nf 11995//11995 11996//11996 11997//11997\nf 11998//11998 11999//11999 12000//12000\nf 12001//12001 12002//12002 12003//12003\nf 12004//12004 12005//12005 12006//12006\nf 12007//12007 12008//12008 12009//12009\nf 12010//12010 12011//12011 12012//12012\nf 12013//12013 12014//12014 12015//12015\nf 12016//12016 12017//12017 12018//12018\nf 12019//12019 12020//12020 12021//12021\nf 12022//12022 12023//12023 12024//12024\nf 12025//12025 12026//12026 12027//12027\nf 12028//12028 12029//12029 12030//12030\nf 11912//11912 11911//11911 12031//12031\nf 11925//11925 12032//12032 11926//11926\nf 12033//12033 12034//12034 12035//12035\nf 12036//12036 12037//12037 12038//12038\nf 12039//12039 12040//12040 12041//12041\nf 12042//12042 12043//12043 12044//12044\nf 12045//12045 12046//12046 12047//12047\nf 12048//12048 12049//12049 12050//12050\nf 12051//12051 12052//12052 12053//12053\nf 12054//12054 12055//12055 12056//12056\nf 12057//12057 12058//12058 12059//12059\nf 12060//12060 12061//12061 12062//12062\nf 12063//12063 12064//12064 12065//12065\nf 12066//12066 12067//12067 12068//12068\nf 12069//12069 12070//12070 12071//12071\nf 12072//12072 12073//12073 12074//12074\nf 12075//12075 12076//12076 12077//12077\nf 12078//12078 12079//12079 12080//12080\nf 12081//12081 12082//12082 12083//12083\nf 12084//12084 12085//12085 12086//12086\nf 12087//12087 12088//12088 12089//12089\nf 12090//12090 12091//12091 12092//12092\nf 12093//12093 12094//12094 12095//12095\nf 12096//12096 12097//12097 12098//12098\nf 12099//12099 12100//12100 12101//12101\nf 12102//12102 12103//12103 12104//12104\nf 12105//12105 12106//12106 12107//12107\nf 12108//12108 12109//12109 12110//12110\nf 12111//12111 12112//12112 12113//12113\nf 12114//12114 12115//12115 12116//12116\nf 12117//12117 12118//12118 12119//12119\nf 12120//12120 12121//12121 12122//12122\nf 12123//12123 12124//12124 12125//12125\nf 12126//12126 12127//12127 12128//12128\nf 12129//12129 12130//12130 12131//12131\nf 12132//12132 12133//12133 12134//12134\nf 12135//12135 12136//12136 12137//12137\nf 12138//12138 12139//12139 12140//12140\nf 12141//12141 12142//12142 12143//12143\nf 12144//12144 12145//12145 12146//12146\nf 12147//12147 12148//12148 12149//12149\nf 12150//12150 12151//12151 12152//12152\nf 12153//12153 12154//12154 12155//12155\nf 12156//12156 12157//12157 12158//12158\nf 12159//12159 12160//12160 12161//12161\nf 12162//12162 12163//12163 12164//12164\nf 12165//12165 12166//12166 12167//12167\nf 12168//12168 12169//12169 12170//12170\nf 12171//12171 12172//12172 12173//12173\nf 12174//12174 12175//12175 12176//12176\nf 12177//12177 12178//12178 12179//12179\nf 12180//12180 12181//12181 12182//12182\nf 12183//12183 12184//12184 12185//12185\nf 12186//12186 12187//12187 12188//12188\nf 12189//12189 12190//12190 12191//12191\nf 12192//12192 12193//12193 12194//12194\nf 12195//12195 12196//12196 12197//12197\nf 12198//12198 12199//12199 12200//12200\nf 12201//12201 12202//12202 12203//12203\nf 12204//12204 12205//12205 12206//12206\nf 12207//12207 12208//12208 12209//12209\nf 12210//12210 12211//12211 12212//12212\nf 12213//12213 12214//12214 12215//12215\nf 12216//12216 12217//12217 12218//12218\nf 12219//12219 12220//12220 12221//12221\nf 12222//12222 12223//12223 12224//12224\nf 12225//12225 12226//12226 12227//12227\nf 12228//12228 12229//12229 12230//12230\nf 12231//12231 12232//12232 12233//12233\nf 12234//12234 12235//12235 12236//12236\nf 12237//12237 12238//12238 12239//12239\nf 12240//12240 12241//12241 12242//12242\nf 12243//12243 12244//12244 12245//12245\nf 12246//12246 12247//12247 12248//12248\nf 12249//12249 12250//12250 12251//12251\nf 12252//12252 12253//12253 12254//12254\nf 12255//12255 12256//12256 12257//12257\nf 12258//12258 12259//12259 12260//12260\nf 12261//12261 12262//12262 12263//12263\nf 12264//12264 12265//12265 12266//12266\nf 12267//12267 12268//12268 12269//12269\nf 12270//12270 12271//12271 12272//12272\nf 12273//12273 12274//12274 12275//12275\nf 12276//12276 12277//12277 12278//12278\nf 12279//12279 12280//12280 12281//12281\nf 12282//12282 12283//12283 12284//12284\nf 12285//12285 12286//12286 12287//12287\nf 12279//12279 12288//12288 12280//12280\nf 12289//12289 12290//12290 12291//12291\nf 12292//12292 12293//12293 12294//12294\nf 12295//12295 12296//12296 12297//12297\nf 12289//12289 12298//12298 12290//12290\nf 12299//12299 12300//12300 12301//12301\nf 12302//12302 12303//12303 12304//12304\nf 12305//12305 12306//12306 12307//12307\nf 12308//12308 12309//12309 12310//12310\nf 12311//12311 12312//12312 12313//12313\nf 12314//12314 12315//12315 12316//12316\nf 12317//12317 12318//12318 12319//12319\nf 12320//12320 12321//12321 12322//12322\nf 12323//12323 12324//12324 12325//12325\nf 12326//12326 12327//12327 12328//12328\nf 12329//12329 12330//12330 12331//12331\nf 12332//12332 12333//12333 12334//12334\nf 12335//12335 12336//12336 12337//12337\nf 12338//12338 12339//12339 12340//12340\nf 12284//12284 12341//12341 12342//12342\nf 12273//12273 12343//12343 12274//12274\nf 12344//12344 12345//12345 12346//12346\nf 12347//12347 12348//12348 12349//12349\nf 12350//12350 12351//12351 12352//12352\nf 12353//12353 12354//12354 12355//12355\nf 12356//12356 12294//12294 12293//12293\nf 12357//12357 12358//12358 12359//12359\nf 12360//12360 12361//12361 12362//12362\nf 12284//12284 12283//12283 12341//12341\nf 12363//12363 12364//12364 12365//12365\nf 12366//12366 12367//12367 12368//12368\nf 12369//12369 12370//12370 12371//12371\nf 12372//12372 12373//12373 12374//12374\nf 12375//12375 12376//12376 12377//12377\nf 12307//12307 12378//12378 12305//12305\nf 12379//12379 12380//12380 12381//12381\nf 12382//12382 12383//12383 12384//12384\nf 12385//12385 12386//12386 12387//12387\nf 12344//12344 12388//12388 12345//12345\nf 12389//12389 12390//12390 12391//12391\nf 12392//12392 12393//12393 12394//12394\nf 12395//12395 12396//12396 12397//12397\nf 12398//12398 12399//12399 12400//12400\nf 12401//12401 12402//12402 12403//12403\nf 12404//12404 12405//12405 12406//12406\nf 12407//12407 12402//12402 12401//12401\nf 12335//12335 12408//12408 12336//12336\nf 12289//12289 12409//12409 12298//12298\nf 12410//12410 12295//12295 12297//12297\nf 12411//12411 12412//12412 12413//12413\nf 12409//12409 12414//12414 12298//12298\nf 12323//12323 12325//12325 12415//12415\nf 12416//12416 12417//12417 12418//12418\nf 12419//12419 12420//12420 12421//12421\nf 12360//12360 12362//12362 12422//12422\nf 12423//12423 12424//12424 12425//12425\nf 12426//12426 12350//12350 12352//12352\nf 12427//12427 12425//12425 12424//12424\nf 12428//12428 12429//12429 12430//12430\nf 12431//12431 12432//12432 12433//12433\nf 12434//12434 12435//12435 12436//12436\nf 12437//12437 12438//12438 12439//12439\nf 12440//12440 12441//12441 12442//12442\nf 12443//12443 12444//12444 12445//12445\nf 12446//12446 12447//12447 12448//12448\nf 12449//12449 12450//12450 12451//12451\nf 12452//12452 12453//12453 12454//12454\nf 12455//12455 12456//12456 12457//12457\nf 12458//12458 12459//12459 12460//12460\nf 12461//12461 12462//12462 12463//12463\nf 12464//12464 12465//12465 12466//12466\nf 12467//12467 12468//12468 12469//12469\nf 12470//12470 12471//12471 12472//12472\nf 12473//12473 12474//12474 12475//12475\nf 12476//12476 12477//12477 12478//12478\nf 12479//12479 12480//12480 12481//12481\nf 12482//12482 12483//12483 12484//12484\nf 12485//12485 12486//12486 12487//12487\nf 12488//12488 12489//12489 12490//12490\nf 12491//12491 12492//12492 12493//12493\nf 12494//12494 12495//12495 12496//12496\nf 12497//12497 12498//12498 12499//12499\nf 12500//12500 12501//12501 12502//12502\nf 12503//12503 12504//12504 12505//12505\nf 12506//12506 12507//12507 12508//12508\nf 12509//12509 12510//12510 12511//12511\nf 12512//12512 12513//12513 12514//12514\nf 12515//12515 12516//12516 12517//12517\nf 12518//12518 12519//12519 12520//12520\nf 12521//12521 12522//12522 12523//12523\nf 12524//12524 12525//12525 12526//12526\nf 12527//12527 12528//12528 12529//12529\nf 12530//12530 12531//12531 12532//12532\nf 12533//12533 12534//12534 12535//12535\nf 12536//12536 12537//12537 12538//12538\nf 12539//12539 12540//12540 12541//12541\nf 12542//12542 12543//12543 12544//12544\nf 12545//12545 12546//12546 12547//12547\nf 12548//12548 12549//12549 12550//12550\nf 12551//12551 12552//12552 12553//12553\nf 12554//12554 12555//12555 12556//12556\nf 12557//12557 12558//12558 12559//12559\nf 12560//12560 12561//12561 12562//12562\nf 12563//12563 12564//12564 12565//12565\nf 12566//12566 12567//12567 12568//12568\nf 12569//12569 12570//12570 12571//12571\nf 12572//12572 12573//12573 12574//12574\nf 12575//12575 12576//12576 12577//12577\nf 12578//12578 12579//12579 12580//12580\nf 12581//12581 12582//12582 12583//12583\nf 12584//12584 12585//12585 12586//12586\nf 12587//12587 12588//12588 12589//12589\nf 12590//12590 12591//12591 12592//12592\nf 12593//12593 12594//12594 12595//12595\nf 12596//12596 12597//12597 12598//12598\nf 12599//12599 12600//12600 12601//12601\nf 12602//12602 12603//12603 12604//12604\nf 12605//12605 12606//12606 12607//12607\nf 12608//12608 12609//12609 12610//12610\nf 12611//12611 12612//12612 12613//12613\nf 12614//12614 12615//12615 12616//12616\nf 12614//12614 12616//12616 12617//12617\nf 12618//12618 12619//12619 12620//12620\nf 12621//12621 12622//12622 12623//12623\nf 12621//12621 12623//12623 12624//12624\nf 12625//12625 12626//12626 12627//12627\nf 12628//12628 12629//12629 12630//12630\nf 12631//12631 12632//12632 12633//12633\nf 12634//12634 12635//12635 12636//12636\nf 12637//12637 12638//12638 12639//12639\nf 12640//12640 12641//12641 12642//12642\nf 12643//12643 12644//12644 12645//12645\nf 12646//12646 12647//12647 12648//12648\nf 12649//12649 12650//12650 12651//12651\nf 12652//12652 12653//12653 12654//12654\nf 12655//12655 12656//12656 12657//12657\nf 12658//12658 12659//12659 12660//12660\nf 12661//12661 12662//12662 12663//12663\nf 12664//12664 12665//12665 12666//12666\nf 12667//12667 12668//12668 12669//12669\nf 12670//12670 12671//12671 12672//12672\nf 12673//12673 12674//12674 12675//12675\nf 12676//12676 12677//12677 12678//12678\nf 12679//12679 12677//12677 12676//12676\nf 12680//12680 12681//12681 12682//12682\nf 12683//12683 12684//12684 12685//12685\nf 12686//12686 12687//12687 12688//12688\nf 12689//12689 12690//12690 12691//12691\nf 12692//12692 12693//12693 12694//12694\nf 12695//12695 12696//12696 12697//12697\nf 12698//12698 12699//12699 12700//12700\nf 12701//12701 12702//12702 12703//12703\nf 12704//12704 12705//12705 12706//12706\nf 12707//12707 12708//12708 12709//12709\nf 12710//12710 12711//12711 12712//12712\nf 12713//12713 12714//12714 12715//12715\nf 12716//12716 12717//12717 12718//12718\nf 12719//12719 12720//12720 12721//12721\nf 12722//12722 12723//12723 12724//12724\nf 12725//12725 12726//12726 12727//12727\nf 12728//12728 12729//12729 12730//12730\nf 12731//12731 12732//12732 12733//12733\nf 12734//12734 12735//12735 12736//12736\nf 12737//12737 12738//12738 12739//12739\nf 12740//12740 12741//12741 12742//12742\nf 12743//12743 12744//12744 12745//12745\nf 12746//12746 12747//12747 12748//12748\nf 12749//12749 12750//12750 12751//12751\nf 12752//12752 12753//12753 12754//12754\nf 12755//12755 12756//12756 12757//12757\nf 12758//12758 12759//12759 12760//12760\nf 12761//12761 12762//12762 12763//12763\nf 12764//12764 12765//12765 12766//12766\nf 12767//12767 12768//12768 12769//12769\nf 12770//12770 12771//12771 12772//12772\nf 12773//12773 12774//12774 12775//12775\nf 12776//12776 12777//12777 12778//12778\nf 12779//12779 12780//12780 12781//12781\nf 12782//12782 12783//12783 12784//12784\nf 12785//12785 12786//12786 12787//12787\nf 12788//12788 12789//12789 12790//12790\nf 12791//12791 12792//12792 12793//12793\nf 12794//12794 12795//12795 12796//12796\nf 12797//12797 12798//12798 12799//12799\nf 12800//12800 12801//12801 12802//12802\nf 12803//12803 12804//12804 12805//12805\nf 12806//12806 12807//12807 12808//12808\nf 12809//12809 12810//12810 12811//12811\nf 12812//12812 12813//12813 12814//12814\nf 12815//12815 12816//12816 12817//12817\nf 12818//12818 12819//12819 12820//12820\nf 12821//12821 12822//12822 12823//12823\nf 12824//12824 12825//12825 12826//12826\nf 12827//12827 12828//12828 12829//12829\nf 12830//12830 12831//12831 12832//12832\nf 12830//12830 12833//12833 12831//12831\nf 12834//12834 12835//12835 12836//12836\nf 12837//12837 12838//12838 12839//12839\nf 12840//12840 12841//12841 12842//12842\nf 12843//12843 12844//12844 12845//12845\nf 12846//12846 12847//12847 12848//12848\nf 12849//12849 12850//12850 12851//12851\nf 12852//12852 12853//12853 12854//12854\nf 12855//12855 12856//12856 12857//12857\nf 12858//12858 12859//12859 12860//12860\nf 12861//12861 12862//12862 12863//12863\nf 12864//12864 12865//12865 12866//12866\nf 12867//12867 12868//12868 12869//12869\nf 12870//12870 12871//12871 12872//12872\nf 12873//12873 12874//12874 12875//12875\nf 12876//12876 12877//12877 12878//12878\nf 12879//12879 12880//12880 12881//12881\nf 12882//12882 12883//12883 12884//12884\nf 12885//12885 12886//12886 12887//12887\nf 12888//12888 12889//12889 12890//12890\nf 12891//12891 12892//12892 12893//12893\nf 12894//12894 12895//12895 12896//12896\nf 12897//12897 12898//12898 12899//12899\nf 12900//12900 12901//12901 12902//12902\nf 12903//12903 12904//12904 12905//12905\nf 12906//12906 12907//12907 12908//12908\nf 12909//12909 12910//12910 12911//12911\nf 12912//12912 12913//12913 12914//12914\nf 12915//12915 12916//12916 12917//12917\nf 12918//12918 12919//12919 12920//12920\nf 12921//12921 12922//12922 12923//12923\nf 12924//12924 12925//12925 12926//12926\nf 12927//12927 12928//12928 12929//12929\nf 12930//12930 12931//12931 12932//12932\nf 12933//12933 12934//12934 12935//12935\nf 12936//12936 12937//12937 12938//12938\nf 12939//12939 12940//12940 12941//12941\nf 12942//12942 12943//12943 12944//12944\nf 12945//12945 12946//12946 12947//12947\nf 12948//12948 12949//12949 12950//12950\nf 12951//12951 12952//12952 12953//12953\nf 12954//12954 12955//12955 12956//12956\nf 12957//12957 12958//12958 12959//12959\nf 12947//12947 12946//12946 12960//12960\nf 12961//12961 12962//12962 12963//12963\nf 12964//12964 12965//12965 12966//12966\nf 12967//12967 12968//12968 12969//12969\nf 12970//12970 12971//12971 12972//12972\nf 12973//12973 12974//12974 12975//12975\nf 12976//12976 12977//12977 12978//12978\nf 12979//12979 12980//12980 12981//12981\nf 12982//12982 12983//12983 12984//12984\nf 12985//12985 12986//12986 12987//12987\nf 12988//12988 12989//12989 12990//12990\nf 12991//12991 12992//12992 12993//12993\nf 12994//12994 12995//12995 12996//12996\nf 12997//12997 12998//12998 12999//12999\nf 13000//13000 13001//13001 13002//13002\nf 13003//13003 13004//13004 13005//13005\nf 13006//13006 13007//13007 13008//13008\nf 13009//13009 13010//13010 13011//13011\nf 13012//13012 13013//13013 13014//13014\nf 13015//13015 13016//13016 13017//13017\nf 13018//13018 13019//13019 13020//13020\nf 13021//13021 13022//13022 13023//13023\nf 13024//13024 13025//13025 13026//13026\nf 13027//13027 13028//13028 13029//13029\nf 13027//13027 13030//13030 13028//13028\nf 13031//13031 13032//13032 13033//13033\nf 13034//13034 13035//13035 13036//13036\nf 13037//13037 13038//13038 13039//13039\nf 13040//13040 13041//13041 13042//13042\nf 13043//13043 13044//13044 13045//13045\nf 13046//13046 13047//13047 13048//13048\nf 13049//13049 13050//13050 13051//13051\nf 13052//13052 13053//13053 13054//13054\nf 13055//13055 13056//13056 13057//13057\nf 13058//13058 13059//13059 13060//13060\nf 13061//13061 13062//13062 13063//13063\nf 13064//13064 13065//13065 13066//13066\nf 13067//13067 13068//13068 13069//13069\nf 12984//12984 12983//12983 13070//13070\nf 13071//13071 13072//13072 13073//13073\nf 13071//13071 13074//13074 13072//13072\nf 13075//13075 13076//13076 13077//13077\nf 13078//13078 13079//13079 13080//13080\nf 13081//13081 13082//13082 13083//13083\nf 13084//13084 13085//13085 13086//13086\nf 13087//13087 13088//13088 13089//13089\nf 13090//13090 13091//13091 13092//13092\nf 13093//13093 13094//13094 13095//13095\nf 13096//13096 13097//13097 13098//13098\nf 13018//13018 13099//13099 13019//13019\nf 13100//13100 13101//13101 13102//13102\nf 13103//13103 13104//13104 13105//13105\nf 13106//13106 13107//13107 13108//13108\nf 13109//13109 13110//13110 13111//13111\nf 13112//13112 13113//13113 13114//13114\nf 13115//13115 13116//13116 13117//13117\nf 13118//13118 13119//13119 13120//13120\nf 13121//13121 13122//13122 13123//13123\nf 13124//13124 13125//13125 13126//13126\nf 13127//13127 13128//13128 13129//13129\nf 13130//13130 13131//13131 13132//13132\nf 13133//13133 13134//13134 13135//13135\nf 13136//13136 13137//13137 13138//13138\nf 13139//13139 13140//13140 13141//13141\nf 13142//13142 13143//13143 13144//13144\nf 13129//13129 13128//13128 13145//13145\nf 13146//13146 13147//13147 13148//13148\nf 13149//13149 13150//13150 13151//13151\nf 13152//13152 13149//13149 13151//13151\nf 13153//13153 13154//13154 13155//13155\nf 13154//13154 13156//13156 13155//13155\nf 13157//13157 13158//13158 13159//13159\nf 13160//13160 13161//13161 13162//13162\nf 13163//13163 13164//13164 13165//13165\nf 13166//13166 13167//13167 13168//13168\nf 13169//13169 13170//13170 13171//13171\nf 13172//13172 13173//13173 13174//13174\nf 13175//13175 13176//13176 13177//13177\nf 13178//13178 13179//13179 13180//13180\nf 13181//13181 13182//13182 13183//13183\nf 13184//13184 13185//13185 13186//13186\nf 13187//13187 13188//13188 13189//13189\nf 13190//13190 13191//13191 13192//13192\nf 13193//13193 13194//13194 13195//13195\nf 13196//13196 13197//13197 13198//13198\nf 13199//13199 13200//13200 13201//13201\nf 13202//13202 13203//13203 13204//13204\nf 13205//13205 13206//13206 13207//13207\nf 13208//13208 13209//13209 13210//13210\nf 13211//13211 13212//13212 13213//13213\nf 13214//13214 13215//13215 13216//13216\nf 13217//13217 13218//13218 13219//13219\nf 13220//13220 13221//13221 13222//13222\nf 13223//13223 13224//13224 13225//13225\nf 13226//13226 13227//13227 13228//13228\nf 13229//13229 13230//13230 13231//13231\nf 13232//13232 13233//13233 13234//13234\nf 13235//13235 13236//13236 13237//13237\nf 13238//13238 13239//13239 13240//13240\nf 13241//13241 13242//13242 13243//13243\nf 13244//13244 13245//13245 13246//13246\nf 13247//13247 13248//13248 13249//13249\nf 13250//13250 13251//13251 13149//13149\nf 13152//13152 13250//13250 13149//13149\nf 13252//13252 13253//13253 13254//13254\nf 13255//13255 13256//13256 13257//13257\nf 13258//13258 13259//13259 13260//13260\nf 13261//13261 13262//13262 13263//13263\nf 13264//13264 13265//13265 13266//13266\nf 13267//13267 13268//13268 13269//13269\nf 13270//13270 13271//13271 13272//13272\nf 13273//13273 13274//13274 13275//13275\nf 13276//13276 13277//13277 13278//13278\nf 13279//13279 13280//13280 13281//13281\nf 13282//13282 13283//13283 13284//13284\nf 13285//13285 13286//13286 13287//13287\nf 13263//13263 13262//13262 13288//13288\nf 13289//13289 13290//13290 13291//13291\nf 11149//11149 11148//11148 13292//13292\nf 13293//13293 13294//13294 13295//13295\nf 13296//13296 13297//13297 13298//13298\nf 13299//13299 13300//13300 13301//13301\nf 13261//13261 13302//13302 13262//13262\nf 13303//13303 13304//13304 13305//13305\nf 13300//13300 13299//13299 13306//13306\nf 13307//13307 13308//13308 13309//13309\nf 13310//13310 13311//13311 13312//13312\nf 13313//13313 13282//13282 13284//13284\nf 13314//13314 13315//13315 13316//13316\nf 13317//13317 13318//13318 13319//13319\nf 13320//13320 13321//13321 13322//13322\nf 13323//13323 13305//13305 13324//13324\nf 13325//13325 13315//13315 13314//13314\nf 13326//13326 13307//13307 13309//13309\nf 13327//13327 13319//13319 13318//13318\nf 13328//13328 13329//13329 13330//13330\nf 13331//13331 13332//13332 13333//13333\nf 13334//13334 13335//13335 13336//13336\nf 13305//13305 13323//13323 13303//13303\nf 13336//13336 13335//13335 13337//13337\nf 13338//13338 13339//13339 13340//13340\nf 13341//13341 13342//13342 13343//13343\nf 13338//13338 13344//13344 13339//13339\nf 13345//13345 13346//13346 13347//13347\nf 13345//13345 13347//13347 13348//13348\nf 13349//13349 13350//13350 13351//13351\nf 13352//13352 13353//13353 13354//13354\nf 13355//13355 13356//13356 13357//13357\nf 13358//13358 13359//13359 13360//13360\nf 13361//13361 13362//13362 13363//13363\nf 13364//13364 13365//13365 13366//13366\nf 13367//13367 13368//13368 13369//13369\nf 13370//13370 13371//13371 13372//13372\nf 13373//13373 13374//13374 13375//13375\nf 13376//13376 13373//13373 13375//13375\nf 13377//13377 13378//13378 13379//13379\nf 13377//13377 13379//13379 13380//13380\nf 13381//13381 13382//13382 13383//13383\nf 13384//13384 13385//13385 13386//13386\nf 13387//13387 13388//13388 13389//13389\nf 13390//13390 13391//13391 13392//13392\nf 13390//13390 13393//13393 13391//13391\nf 13394//13394 13395//13395 8740//8740\nf 13394//13394 8740//8740 8742//8742\nf 13396//13396 13397//13397 13398//13398\nf 13399//13399 13400//13400 13401//13401\nf 13402//13402 13403//13403 13404//13404\nf 13405//13405 13406//13406 13407//13407\nf 13408//13408 13409//13409 13410//13410\nf 13411//13411 13412//13412 13413//13413\nf 13414//13414 13415//13415 13416//13416\nf 13417//13417 13418//13418 13419//13419\nf 13419//13419 13418//13418 13420//13420\nf 13421//13421 13422//13422 13423//13423\nf 13423//13423 13422//13422 13424//13424\nf 13425//13425 13426//13426 13427//13427\nf 13428//13428 13429//13429 13430//13430\nf 13431//13431 13432//13432 13433//13433\nf 13434//13434 13435//13435 13436//13436\nf 13436//13436 13435//13435 13437//13437\nf 13438//13438 13439//13439 13440//13440\nf 13441//13441 13442//13442 13443//13443\nf 13444//13444 13445//13445 13446//13446\nf 13447//13447 13448//13448 13449//13449\nf 13450//13450 13451//13451 13452//13452\nf 13453//13453 13454//13454 13455//13455\nf 13456//13456 13457//13457 13458//13458\nf 13459//13459 13460//13460 13461//13461\nf 13462//13462 13463//13463 13464//13464\nf 13465//13465 13466//13466 13467//13467\nf 13468//13468 13469//13469 13470//13470\nf 13471//13471 13472//13472 13473//13473\nf 13474//13474 13475//13475 13476//13476\nf 13477//13477 13474//13474 13476//13476\nf 13478//13478 13479//13479 13480//13480\nf 13481//13481 13482//13482 13483//13483\nf 13484//13484 13485//13485 13486//13486\nf 13487//13487 13488//13488 13489//13489\nf 13490//13490 13491//13491 13492//13492\nf 13493//13493 13494//13494 13495//13495\nf 13496//13496 13497//13497 13498//13498\nf 13499//13499 13500//13500 13501//13501\nf 13502//13502 13503//13503 13504//13504\nf 13505//13505 13506//13506 13507//13507\nf 13508//13508 13509//13509 13510//13510\nf 13511//13511 13512//13512 13513//13513\nf 13514//13514 13515//13515 13516//13516\nf 13517//13517 13518//13518 13519//13519\nf 13520//13520 13521//13521 13522//13522\nf 13523//13523 13524//13524 13525//13525\nf 13526//13526 13527//13527 13528//13528\nf 13529//13529 13530//13530 13531//13531\nf 13532//13532 13533//13533 13534//13534\nf 13529//13529 13533//13533 13532//13532\nf 13529//13529 13531//13531 13533//13533\nf 13535//13535 13536//13536 13537//13537\nf 13538//13538 13539//13539 13540//13540\nf 13541//13541 13542//13542 13543//13543\nf 13544//13544 13545//13545 13546//13546\nf 13547//13547 13548//13548 13549//13549\nf 13550//13550 13551//13551 13552//13552\nf 13553//13553 13554//13554 13555//13555\nf 13556//13556 13557//13557 13558//13558\nf 13559//13559 13560//13560 13561//13561\nf 13562//13562 13563//13563 13564//13564\nf 13565//13565 13566//13566 13567//13567\nf 13568//13568 13569//13569 13570//13570\nf 13571//13571 13572//13572 13573//13573\nf 13574//13574 13566//13566 13565//13565\nf 13575//13575 13576//13576 13577//13577\nf 13578//13578 13579//13579 13580//13580\nf 13581//13581 13582//13582 13583//13583\nf 13446//13446 13584//13584 13444//13444\nf 13585//13585 13586//13586 13587//13587\nf 13588//13588 13589//13589 13590//13590\nf 13591//13591 13592//13592 13593//13593\nf 13594//13594 13595//13595 13596//13596\nf 13597//13597 13598//13598 13599//13599\nf 13600//13600 13601//13601 13602//13602\nf 13603//13603 13604//13604 13605//13605\nf 13606//13606 13607//13607 13608//13608\nf 13609//13609 13610//13610 13611//13611\nf 13612//13612 13613//13613 13614//13614\nf 13615//13615 13616//13616 13617//13617\nf 13618//13618 13619//13619 13620//13620\nf 13621//13621 13622//13622 13623//13623\nf 13624//13624 13625//13625 13626//13626\nf 13627//13627 13628//13628 13629//13629\nf 13630//13630 13631//13631 13632//13632\nf 13633//13633 13634//13634 13635//13635\nf 13636//13636 13637//13637 13638//13638\nf 13639//13639 13640//13640 13641//13641\nf 13642//13642 13643//13643 13644//13644\nf 13645//13645 13646//13646 13647//13647\nf 13648//13648 13649//13649 13650//13650\nf 13651//13651 13652//13652 13653//13653\nf 13654//13654 13655//13655 13656//13656\nf 13657//13657 13658//13658 13659//13659\nf 13660//13660 13661//13661 13662//13662\nf 13663//13663 13664//13664 13665//13665\nf 13666//13666 13667//13667 13668//13668\nf 13669//13669 13670//13670 13671//13671\nf 13672//13672 13673//13673 13674//13674\nf 13675//13675 13676//13676 13677//13677\nf 13678//13678 13679//13679 13680//13680\nf 13681//13681 13682//13682 13683//13683\nf 13684//13684 13685//13685 13686//13686\nf 13687//13687 13688//13688 13689//13689\nf 13690//13690 13691//13691 13692//13692\nf 13693//13693 13694//13694 13695//13695\nf 13696//13696 13697//13697 13698//13698\nf 13699//13699 13700//13700 13701//13701\nf 13702//13702 13703//13703 13704//13704\nf 13705//13705 13706//13706 13707//13707\nf 13708//13708 13709//13709 13710//13710\nf 13711//13711 13712//13712 13713//13713\nf 13714//13714 13715//13715 13716//13716\nf 13717//13717 13718//13718 13719//13719\nf 13720//13720 13721//13721 13722//13722\nf 13723//13723 13724//13724 13725//13725\nf 13726//13726 13727//13727 13728//13728\nf 13729//13729 13730//13730 13731//13731\nf 13732//13732 13733//13733 13734//13734\nf 13735//13735 13736//13736 13737//13737\nf 13738//13738 13739//13739 13740//13740\nf 13741//13741 13738//13738 13740//13740\nf 13742//13742 13741//13741 13743//13743\nf 13742//13742 13738//13738 13741//13741\nf 13744//13744 13742//13742 13743//13743\nf 13745//13745 13746//13746 13747//13747\nf 13748//13748 13749//13749 13750//13750\nf 13751//13751 13752//13752 13753//13753\nf 13754//13754 13755//13755 13756//13756\nf 13757//13757 13758//13758 13759//13759\nf 13760//13760 13761//13761 13762//13762\nf 13763//13763 13764//13764 13765//13765\nf 13766//13766 13767//13767 13768//13768\nf 13769//13769 13770//13770 13771//13771\nf 13772//13772 13773//13773 13774//13774\nf 13775//13775 13776//13776 13777//13777\nf 13778//13778 13779//13779 13780//13780\nf 13781//13781 13782//13782 13783//13783\nf 13781//13781 13784//13784 13782//13782\nf 13785//13785 13786//13786 13787//13787\nf 13788//13788 13789//13789 13790//13790\nf 13791//13791 13792//13792 13793//13793\nf 13794//13794 13795//13795 13796//13796\nf 13797//13797 13798//13798 13799//13799\nf 13800//13800 13801//13801 13802//13802\nf 13803//13803 13804//13804 13805//13805\nf 13806//13806 13807//13807 13808//13808\nf 13809//13809 13810//13810 13811//13811\nf 13812//13812 13813//13813 13814//13814\nf 13815//13815 13816//13816 13817//13817\nf 13818//13818 13819//13819 13820//13820\nf 13821//13821 13822//13822 13823//13823\nf 13824//13824 13825//13825 13826//13826\nf 13827//13827 13828//13828 13829//13829\nf 13830//13830 13831//13831 13832//13832\nf 13833//13833 13834//13834 13835//13835\nf 13836//13836 13837//13837 13838//13838\nf 13839//13839 13840//13840 13841//13841\nf 13842//13842 13843//13843 13844//13844\nf 13845//13845 13846//13846 13847//13847\nf 13848//13848 13849//13849 13850//13850\nf 13851//13851 13852//13852 13853//13853\nf 13854//13854 13855//13855 13856//13856\nf 13857//13857 13858//13858 13859//13859\nf 13860//13860 13861//13861 13862//13862\nf 13863//13863 13864//13864 13865//13865\nf 13866//13866 13867//13867 13868//13868\nf 13869//13869 13870//13870 13871//13871\nf 13872//13872 13873//13873 13874//13874\nf 13875//13875 13876//13876 13877//13877\nf 13878//13878 13879//13879 13880//13880\nf 13881//13881 13882//13882 13883//13883\nf 13884//13884 13885//13885 13886//13886\nf 13887//13887 13888//13888 13889//13889\nf 13890//13890 13891//13891 13892//13892\nf 13893//13893 13894//13894 13895//13895\nf 13896//13896 13897//13897 13898//13898\nf 13899//13899 13900//13900 13901//13901\nf 13902//13902 13903//13903 13904//13904\nf 13905//13905 13906//13906 13907//13907\nf 13908//13908 13909//13909 13910//13910\nf 13911//13911 13912//13912 13913//13913\nf 13914//13914 13915//13915 13916//13916\nf 13917//13917 13918//13918 13919//13919\nf 13920//13920 13921//13921 13922//13922\nf 13923//13923 13924//13924 13925//13925\nf 13926//13926 13927//13927 13928//13928\nf 13929//13929 13930//13930 13931//13931\nf 13932//13932 13933//13933 13934//13934\nf 13935//13935 13936//13936 13937//13937\nf 13938//13938 13939//13939 13940//13940\nf 13941//13941 13942//13942 13943//13943\nf 13944//13944 13945//13945 13946//13946\nf 13947//13947 13944//13944 13946//13946\nf 13851//13851 13948//13948 13852//13852\nf 13949//13949 13950//13950 13951//13951\nf 13952//13952 13953//13953 13954//13954\nf 13955//13955 13956//13956 13957//13957\nf 13958//13958 13955//13955 13957//13957\nf 13959//13959 13960//13960 13961//13961\nf 13962//13962 13963//13963 13964//13964\nf 13965//13965 13966//13966 13967//13967\nf 13968//13968 13969//13969 13970//13970\nf 13971//13971 13968//13968 13970//13970\nf 13972//13972 13973//13973 13974//13974\nf 13975//13975 13976//13976 13977//13977\nf 13978//13978 13979//13979 13980//13980\nf 13981//13981 13982//13982 13983//13983\nf 13984//13984 13981//13981 13983//13983\nf 13985//13985 13986//13986 13987//13987\nf 13988//13988 13989//13989 13990//13990\nf 13991//13991 13992//13992 13993//13993\nf 13994//13994 13995//13995 13996//13996\nf 13997//13997 13998//13998 13999//13999\nf 13997//13997 13999//13999 14000//14000\nf 14001//14001 14002//14002 14003//14003\nf 14004//14004 14005//14005 14006//14006\nf 14007//14007 14008//14008 14009//14009\nf 14010//14010 14011//14011 14012//14012\nf 14013//14013 14014//14014 14015//14015\nf 14016//14016 14017//14017 14018//14018\nf 14019//14019 14020//14020 14021//14021\nf 14022//14022 14023//14023 14024//14024\nf 14025//14025 14026//14026 14027//14027\nf 14028//14028 14029//14029 14030//14030\nf 14031//14031 14032//14032 14033//14033\nf 14034//14034 14035//14035 14036//14036\nf 14037//14037 14038//14038 14039//14039\nf 14040//14040 14041//14041 14042//14042\nf 14043//14043 14044//14044 14045//14045\nf 14046//14046 14047//14047 14048//14048\nf 14049//14049 14050//14050 14051//14051\nf 14052//14052 14053//14053 14054//14054\nf 14055//14055 14056//14056 14057//14057\nf 14058//14058 14059//14059 14060//14060\nf 14061//14061 14062//14062 14063//14063\nf 14064//14064 14065//14065 14066//14066\nf 14067//14067 14068//14068 14069//14069\nf 14070//14070 14071//14071 14072//14072\nf 14073//14073 14074//14074 14075//14075\nf 14076//14076 14077//14077 14078//14078\nf 14079//14079 14080//14080 14081//14081\nf 14082//14082 14083//14083 14084//14084\nf 14085//14085 14086//14086 14087//14087\nf 14088//14088 14089//14089 14090//14090\nf 14091//14091 14092//14092 14093//14093\nf 14094//14094 14095//14095 14096//14096\nf 14097//14097 14098//14098 14099//14099\nf 14100//14100 14101//14101 14102//14102\nf 14103//14103 14104//14104 14105//14105\nf 14106//14106 14107//14107 14108//14108\nf 14109//14109 14110//14110 14111//14111\nf 14112//14112 14109//14109 14111//14111\nf 14113//14113 14114//14114 14115//14115\nf 14116//14116 14117//14117 14118//14118\nf 14119//14119 14120//14120 14121//14121\nf 14122//14122 14123//14123 14124//14124\nf 14125//14125 14126//14126 14127//14127\nf 14128//14128 14129//14129 14130//14130\nf 14131//14131 14132//14132 14133//14133\nf 9641//9641 14134//14134 9636//9636\nf 14135//14135 14136//14136 14137//14137\nf 13164//13164 14138//14138 14139//14139\nf 13164//13164 14140//14140 13165//13165\nf 14141//14141 14142//14142 14143//14143\nf 14144//14144 14145//14145 14146//14146\nf 14147//14147 14148//14148 14149//14149\nf 14150//14150 14151//14151 14152//14152\nf 14153//14153 14154//14154 14155//14155\nf 4995//4995 4991//4991 9483//9483\nf 14156//14156 14157//14157 14158//14158\nf 14085//14085 14159//14159 14086//14086\nf 14113//14113 14160//14160 14114//14114\nf 14119//14119 14161//14161 14120//14120\nf 14162//14162 14163//14163 14164//14164\nf 14165//14165 14166//14166 14167//14167\nf 14135//14135 14168//14168 14136//14136\nf 13164//13164 14139//14139 14140//14140\nf 14169//14169 14170//14170 14171//14171\nf 14172//14172 14173//14173 14174//14174\nf 14175//14175 14176//14176 14177//14177\nf 14178//14178 14179//14179 14180//14180\nf 14181//14181 14182//14182 14183//14183\nf 14184//14184 14185//14185 14186//14186\nf 14187//14187 14188//14188 14189//14189\nf 14190//14190 14191//14191 14192//14192\nf 14193//14193 14194//14194 14195//14195\nf 14196//14196 14197//14197 14198//14198\nf 14199//14199 14200//14200 14201//14201\nf 14202//14202 14203//14203 14204//14204\nf 14205//14205 14206//14206 14207//14207\nf 14208//14208 14209//14209 14210//14210\nf 14211//14211 14212//14212 14213//14213\nf 14169//14169 14214//14214 14170//14170\nf 14215//14215 14216//14216 14217//14217\nf 14218//14218 14219//14219 14220//14220\nf 14172//14172 14221//14221 14173//14173\nf 14222//14222 14223//14223 14224//14224\nf 14225//14225 14226//14226 14227//14227\nf 14228//14228 14227//14227 14226//14226\nf 14217//14217 14229//14229 14215//14215\nf 14230//14230 14218//14218 14220//14220\nf 14224//14224 14223//14223 14231//14231\nf 14232//14232 14233//14233 14234//14234\nf 14235//14235 14236//14236 14237//14237\nf 14175//14175 14238//14238 14176//14176\nf 14178//14178 14239//14239 14179//14179\nf 14181//14181 14240//14240 14182//14182\nf 14184//14184 14241//14241 14185//14185\nf 14187//14187 14242//14242 14188//14188\nf 14190//14190 14243//14243 14191//14191\nf 14193//14193 14244//14244 14194//14194\nf 14196//14196 14245//14245 14197//14197\nf 14199//14199 14246//14246 14200//14200\nf 14202//14202 14247//14247 14203//14203\nf 14205//14205 14248//14248 14206//14206\nf 14208//14208 14249//14249 14209//14209\nf 14211//14211 14250//14250 14212//14212\nf 14251//14251 14252//14252 14253//14253\nf 14254//14254 14255//14255 14256//14256\nf 14257//14257 14258//14258 14259//14259\nf 14260//14260 14261//14261 14262//14262\nf 14263//14263 14264//14264 14265//14265\nf 14266//14266 14267//14267 14268//14268\nf 14269//14269 14270//14270 14271//14271\nf 14272//14272 14273//14273 14274//14274\nf 14275//14275 14276//14276 14277//14277\nf 14278//14278 14279//14279 14280//14280\nf 14281//14281 14282//14282 14283//14283\nf 14284//14284 14285//14285 14286//14286\nf 14287//14287 14288//14288 14289//14289\nf 14290//14290 14291//14291 14292//14292\nf 14293//14293 14294//14294 14282//14282\nf 14295//14295 14296//14296 14297//14297\nf 6496//6496 14298//14298 6497//6497\nf 14299//14299 14300//14300 14301//14301\nf 14302//14302 14303//14303 14304//14304\nf 14305//14305 14306//14306 14307//14307\nf 14308//14308 14309//14309 14310//14310\nf 14311//14311 14312//14312 14313//14313\nf 14259//14259 14314//14314 14257//14257\nf 14315//14315 14316//14316 14317//14317\nf 14318//14318 14319//14319 14320//14320\nf 14321//14321 14322//14322 14108//14108\nf 14323//14323 14324//14324 14325//14325\nf 14284//14284 14326//14326 14327//14327\nf 14328//14328 14329//14329 14330//14330\nf 14295//14295 14331//14331 14332//14332\nf 14333//14333 14334//14334 14335//14335\nf 14107//14107 14321//14321 14108//14108\nf 14336//14336 14337//14337 14338//14338\nf 14339//14339 14340//14340 14341//14341\nf 14342//14342 14343//14343 14344//14344\nf 14345//14345 14346//14346 14347//14347\nf 14348//14348 14349//14349 14350//14350\nf 14351//14351 14352//14352 14353//14353\nf 14354//14354 14355//14355 14274//14274\nf 14356//14356 14357//14357 14358//14358\nf 14359//14359 14360//14360 14361//14361\nf 9455//9455 14362//14362 9456//9456\nf 14363//14363 14364//14364 14365//14365\nf 14366//14366 11136//11136 11143//11143\nf 11135//11135 14367//14367 11143//11143\nf 14106//14106 14368//14368 14107//14107\nf 14251//14251 14369//14369 14252//14252\nf 14254//14254 14370//14370 14371//14371\nf 14371//14371 14255//14255 14254//14254\nf 14370//14370 14372//14372 14371//14371\nf 14260//14260 14373//14373 14261//14261\nf 14374//14374 14375//14375 14376//14376\nf 14377//14377 14378//14378 14268//14268\nf 14266//14266 14379//14379 14380//14380\nf 14266//14266 14380//14380 14267//14267\nf 14268//14268 14378//14378 14266//14266\nf 14272//14272 14381//14381 14273//14273\nf 14275//14275 14382//14382 14276//14276\nf 14278//14278 14383//14383 14279//14279\nf 14281//14281 14293//14293 14282//14282\nf 14284//14284 14327//14327 14285//14285\nf 14384//14384 14385//14385 14386//14386\nf 14290//14290 14387//14387 14291//14291\nf 14293//14293 14388//14388 14294//14294\nf 14389//14389 14390//14390 14391//14391\nf 14301//14301 14392//14392 14299//14299\nf 14300//14300 14393//14393 14301//14301\nf 14304//14304 14394//14394 14302//14302\nf 14303//14303 14395//14395 14304//14304\nf 14396//14396 14397//14397 14398//14398\nf 14399//14399 14400//14400 14401//14401\nf 14308//14308 14402//14402 14309//14309\nf 14403//14403 14404//14404 14405//14405\nf 14310//14310 14406//14406 14308//14308\nf 14403//14403 14405//14405 14407//14407\nf 14408//14408 14409//14409 14410//14410\nf 14411//14411 14412//14412 14413//14413\nf 14414//14414 14415//14415 14416//14416\nf 14417//14417 14418//14418 14419//14419\nf 14412//14412 14420//14420 14413//14413\nf 14318//14318 14421//14421 14319//14319\nf 14321//14321 14422//14422 14322//14322\nf 14323//14323 14423//14423 14324//14324\nf 14295//14295 14297//14297 14331//14331\nf 14341//14341 14424//14424 14425//14425\nf 14425//14425 14339//14339 14341//14341\nf 14426//14426 14427//14427 14428//14428\nf 14348//14348 14429//14429 14349//14349\nf 14274//14274 14273//14273 14430//14430\nf 14430//14430 14354//14354 14274//14274\nf 14431//14431 14432//14432 14433//14433\nf 14434//14434 14435//14435 14436//14436\nf 14437//14437 14438//14438 14439//14439\nf 14440//14440 14441//14441 14442//14442\nf 14443//14443 14444//14444 14445//14445\nf 14446//14446 14447//14447 14448//14448\nf 14449//14449 14450//14450 14451//14451\nf 14452//14452 14453//14453 14454//14454\nf 14455//14455 14456//14456 14457//14457\nf 14458//14458 14459//14459 14460//14460\nf 14461//14461 14462//14462 14463//14463\nf 14464//14464 14465//14465 14466//14466\nf 14467//14467 14468//14468 14469//14469\nf 14470//14470 14471//14471 14472//14472\nf 14473//14473 14474//14474 14475//14475\nf 14476//14476 14477//14477 14478//14478\nf 14479//14479 14480//14480 14481//14481\nf 14482//14482 14483//14483 14484//14484\nf 14485//14485 14486//14486 14487//14487\nf 14488//14488 14489//14489 14490//14490\nf 14491//14491 14492//14492 14493//14493\nf 14494//14494 14495//14495 14496//14496\nf 14497//14497 14498//14498 14499//14499\nf 14500//14500 14501//14501 14502//14502\nf 14503//14503 14504//14504 14505//14505\nf 14506//14506 14507//14507 14508//14508\nf 14509//14509 14510//14510 14511//14511\nf 14512//14512 14513//14513 14514//14514\nf 14515//14515 14516//14516 14517//14517\nf 14518//14518 14519//14519 14520//14520\nf 14521//14521 14522//14522 14523//14523\nf 14524//14524 14525//14525 14526//14526\nf 14527//14527 14528//14528 14529//14529\nf 14530//14530 14531//14531 14532//14532\nf 14533//14533 14534//14534 14535//14535\nf 14536//14536 14537//14537 14538//14538\nf 14539//14539 14540//14540 14541//14541\nf 14542//14542 14543//14543 14544//14544\nf 14545//14545 14546//14546 14547//14547\nf 14524//14524 14548//14548 14525//14525\nf 14549//14549 14550//14550 14551//14551\nf 14552//14552 14553//14553 14554//14554\nf 14555//14555 14556//14556 14557//14557\nf 14558//14558 14559//14559 14560//14560\nf 14561//14561 14562//14562 14563//14563\nf 14564//14564 14565//14565 14566//14566\nf 14567//14567 14568//14568 14569//14569\nf 14570//14570 14571//14571 14572//14572\nf 14573//14573 14574//14574 14575//14575\nf 14576//14576 14577//14577 14578//14578\nf 14579//14579 14580//14580 14581//14581\nf 14582//14582 14583//14583 14584//14584\nf 14585//14585 14586//14586 14587//14587\nf 14588//14588 14589//14589 14590//14590\nf 14591//14591 14592//14592 14593//14593\nf 14594//14594 14595//14595 14596//14596\nf 14597//14597 14598//14598 14599//14599\nf 14600//14600 14601//14601 14602//14602\nf 14603//14603 14604//14604 14605//14605\nf 14594//14594 14606//14606 14595//14595\nf 14607//14607 14608//14608 14609//14609\nf 14610//14610 14611//14611 14612//14612\nf 14613//14613 14614//14614 14615//14615\nf 14616//14616 14617//14617 14618//14618\nf 14619//14619 14620//14620 14621//14621\nf 14622//14622 14623//14623 14624//14624\nf 14625//14625 14626//14626 14627//14627\nf 14628//14628 14629//14629 14630//14630\nf 14631//14631 14632//14632 14633//14633\nf 14634//14634 14635//14635 14636//14636\nf 14637//14637 14638//14638 14639//14639\nf 14640//14640 14641//14641 14642//14642\nf 14643//14643 14644//14644 14645//14645\nf 14646//14646 14647//14647 14648//14648\nf 14649//14649 14650//14650 14651//14651\nf 14652//14652 14653//14653 14654//14654\nf 14655//14655 14653//14653 14652//14652\nf 14656//14656 14657//14657 14658//14658\nf 14659//14659 14660//14660 14661//14661\nf 14662//14662 14663//14663 14664//14664\nf 14665//14665 14666//14666 14667//14667\nf 14668//14668 14669//14669 14670//14670\nf 14671//14671 14672//14672 14673//14673\nf 14674//14674 14675//14675 14676//14676\nf 14677//14677 14678//14678 14679//14679\nf 14680//14680 14681//14681 14682//14682\nf 14683//14683 14684//14684 14685//14685\nf 14686//14686 14687//14687 14688//14688\nf 14689//14689 14690//14690 14691//14691\nf 14692//14692 14693//14693 14694//14694\nf 14695//14695 14696//14696 14697//14697\nf 14698//14698 14699//14699 14700//14700\nf 14701//14701 14702//14702 14703//14703\nf 14704//14704 14705//14705 14706//14706\nf 14707//14707 14708//14708 14709//14709\nf 14710//14710 14711//14711 14712//14712\nf 14713//14713 14714//14714 14715//14715\nf 14716//14716 14717//14717 14718//14718\nf 14719//14719 14720//14720 14721//14721\nf 14722//14722 14723//14723 14724//14724\nf 14725//14725 14726//14726 14727//14727\nf 14728//14728 14729//14729 14730//14730\nf 14731//14731 14732//14732 14733//14733\nf 14733//14733 14732//14732 14734//14734\nf 14735//14735 14736//14736 14737//14737\nf 14738//14738 14739//14739 14740//14740\nf 14741//14741 14742//14742 14743//14743\nf 14744//14744 14745//14745 14746//14746\nf 14747//14747 14748//14748 14749//14749\nf 14750//14750 14751//14751 14752//14752\nf 14753//14753 14754//14754 14755//14755\nf 14756//14756 14757//14757 14758//14758\nf 14758//14758 14757//14757 14759//14759\nf 14760//14760 14761//14761 14762//14762\nf 14763//14763 14764//14764 14765//14765\nf 14766//14766 14767//14767 14768//14768\nf 14769//14769 14770//14770 14771//14771\nf 14772//14772 14773//14773 14774//14774\nf 14775//14775 14776//14776 14777//14777\nf 14778//14778 14779//14779 14780//14780\nf 14774//14774 14773//14773 14781//14781\nf 14782//14782 14783//14783 14784//14784\nf 14785//14785 14786//14786 14787//14787\nf 14788//14788 14789//14789 14790//14790\nf 14791//14791 14792//14792 14793//14793\nf 14794//14794 14795//14795 14796//14796\nf 14797//14797 14798//14798 14799//14799\nf 14800//14800 14801//14801 14802//14802\nf 14803//14803 14804//14804 14805//14805\nf 14806//14806 14807//14807 14808//14808\nf 14809//14809 14810//14810 14811//14811\nf 14812//14812 14813//14813 14814//14814\nf 14815//14815 14816//14816 14817//14817\nf 14818//14818 14819//14819 14820//14820\nf 14821//14821 14822//14822 14823//14823\nf 14824//14824 14825//14825 14826//14826\nf 14827//14827 14828//14828 14829//14829\nf 14830//14830 14831//14831 14832//14832\nf 14833//14833 14834//14834 14835//14835\nf 14836//14836 14837//14837 14838//14838\nf 14839//14839 14840//14840 14841//14841\nf 14842//14842 14843//14843 14844//14844\nf 14845//14845 14846//14846 14847//14847\nf 14848//14848 14849//14849 14850//14850\nf 14851//14851 14852//14852 14853//14853\nf 14854//14854 14855//14855 14856//14856\nf 14856//14856 14855//14855 14857//14857\nf 14858//14858 14859//14859 14860//14860\nf 14861//14861 14862//14862 14863//14863\nf 14864//14864 14865//14865 14866//14866\nf 14867//14867 14868//14868 14869//14869\nf 14870//14870 14871//14871 14872//14872\nf 14873//14873 14874//14874 14875//14875\nf 14876//14876 14877//14877 14878//14878\nf 14879//14879 14880//14880 14881//14881\nf 14882//14882 14883//14883 14884//14884\nf 14885//14885 14886//14886 14887//14887\nf 14888//14888 14889//14889 14890//14890\nf 14891//14891 14892//14892 14893//14893\nf 14894//14894 14895//14895 14896//14896\nf 14897//14897 14898//14898 14899//14899\nf 14900//14900 14901//14901 14902//14902\nf 14903//14903 14904//14904 14905//14905\nf 14906//14906 14907//14907 14908//14908\nf 14909//14909 14910//14910 14911//14911\nf 14910//14910 14912//14912 14911//14911\nf 14913//14913 14914//14914 14915//14915\nf 14916//14916 14917//14917 14918//14918\nf 14919//14919 14920//14920 14921//14921\nf 14922//14922 14923//14923 14924//14924\nf 14922//14922 14925//14925 14923//14923\nf 14926//14926 14927//14927 14928//14928\nf 14929//14929 14930//14930 14931//14931\nf 14932//14932 14933//14933 14934//14934\nf 14935//14935 14936//14936 14937//14937\nf 14938//14938 14939//14939 14940//14940\nf 14925//14925 14941//14941 14923//14923\nf 14942//14942 14943//14943 14944//14944\nf 14945//14945 14946//14946 14947//14947\nf 14948//14948 14949//14949 14950//14950\nf 14951//14951 14952//14952 14953//14953\nf 14954//14954 14955//14955 14956//14956\nf 14957//14957 14958//14958 14959//14959\nf 14960//14960 14961//14961 14962//14962\nf 14963//14963 14964//14964 14965//14965\nf 14966//14966 14967//14967 14968//14968\nf 14969//14969 14970//14970 14971//14971\nf 14972//14972 14973//14973 14974//14974\nf 14975//14975 14976//14976 14977//14977\nf 14978//14978 14979//14979 14980//14980\nf 14981//14981 14982//14982 14983//14983\nf 14984//14984 14985//14985 14986//14986\nf 14987//14987 14988//14988 14989//14989\nf 14990//14990 14991//14991 14992//14992\nf 14993//14993 14994//14994 14995//14995\nf 14996//14996 14997//14997 14998//14998\nf 14999//14999 15000//15000 15001//15001\nf 15002//15002 15003//15003 15004//15004\nf 15005//15005 15006//15006 15007//15007\nf 15008//15008 15009//15009 15010//15010\nf 15011//15011 15012//15012 15013//15013\nf 15014//15014 15015//15015 15016//15016\nf 15017//15017 15018//15018 15019//15019\nf 15020//15020 15021//15021 15022//15022\nf 15023//15023 15024//15024 15025//15025\nf 15026//15026 15027//15027 15028//15028\nf 15029//15029 15030//15030 15031//15031\nf 15023//15023 15032//15032 15024//15024\nf 15033//15033 15024//15024 15032//15032\nf 15034//15034 15035//15035 15036//15036\nf 15037//15037 15038//15038 15039//15039\nf 15040//15040 15041//15041 15042//15042\nf 15043//15043 15044//15044 15045//15045\nf 15046//15046 15047//15047 15048//15048\nf 15049//15049 15050//15050 15051//15051\nf 15052//15052 15053//15053 15054//15054\nf 15055//15055 15056//15056 15057//15057\nf 15058//15058 15059//15059 15060//15060\nf 15061//15061 15035//15035 15034//15034\nf 15062//15062 15063//15063 15064//15064\nf 15065//15065 15066//15066 15067//15067\nf 15068//15068 15069//15069 15070//15070\nf 15071//15071 15072//15072 15073//15073\nf 15074//15074 15075//15075 15076//15076\nf 15077//15077 15078//15078 15079//15079\nf 15080//15080 15081//15081 15082//15082\nf 15083//15083 15084//15084 15085//15085\nf 15086//15086 15087//15087 15088//15088\nf 15089//15089 15090//15090 15091//15091\nf 15092//15092 15093//15093 15094//15094\nf 15095//15095 15096//15096 15097//15097\nf 15098//15098 15099//15099 15100//15100\nf 15101//15101 15102//15102 15103//15103\nf 15104//15104 15105//15105 15106//15106\nf 15107//15107 15108//15108 15109//15109\nf 15110//15110 15111//15111 15112//15112\nf 15113//15113 15114//15114 15115//15115\nf 15116//15116 15117//15117 15118//15118\nf 15119//15119 15120//15120 15121//15121\nf 15122//15122 15123//15123 15124//15124\nf 15125//15125 15126//15126 15127//15127\nf 15128//15128 15129//15129 15130//15130\nf 15131//15131 15132//15132 15133//15133\nf 15134//15134 15135//15135 15136//15136\nf 15137//15137 15138//15138 15139//15139\nf 15140//15140 15141//15141 15142//15142\nf 15143//15143 15144//15144 15145//15145\nf 15146//15146 15147//15147 15148//15148\nf 15149//15149 15150//15150 15151//15151\nf 15152//15152 15153//15153 15154//15154\nf 15155//15155 15156//15156 15157//15157\nf 15158//15158 15159//15159 15160//15160\nf 15161//15161 15162//15162 15163//15163\nf 15164//15164 15165//15165 15166//15166\nf 15167//15167 15168//15168 15169//15169\nf 15170//15170 15171//15171 15172//15172\nf 15173//15173 15174//15174 15175//15175\nf 15176//15176 15177//15177 15178//15178\nf 15179//15179 15180//15180 15181//15181\nf 15182//15182 15183//15183 15184//15184\nf 15185//15185 15186//15186 15187//15187\nf 15188//15188 15189//15189 15190//15190\nf 15191//15191 15192//15192 15193//15193\nf 15194//15194 15195//15195 15196//15196\nf 15197//15197 15198//15198 15199//15199\nf 15200//15200 15201//15201 15202//15202\nf 15203//15203 15204//15204 15205//15205\nf 15206//15206 15207//15207 15208//15208\nf 15209//15209 15210//15210 15211//15211\nf 15212//15212 15213//15213 15214//15214\nf 15157//15157 15156//15156 15215//15215\nf 15216//15216 15217//15217 15218//15218\nf 15209//15209 15211//15211 15219//15219\nf 15220//15220 15221//15221 15222//15222\nf 15223//15223 15224//15224 15225//15225\nf 15226//15226 15227//15227 15228//15228\nf 15229//15229 15230//15230 15231//15231\nf 15232//15232 15233//15233 15234//15234\nf 15235//15235 15236//15236 15237//15237\nf 15238//15238 15239//15239 15240//15240\nf 15241//15241 15242//15242 15243//15243\nf 15244//15244 15245//15245 15246//15246\nf 15247//15247 15248//15248 15249//15249\nf 15246//15246 15245//15245 15250//15250\nf 15251//15251 15252//15252 15253//15253\nf 15254//15254 15255//15255 15256//15256\nf 15257//15257 15258//15258 15259//15259\nf 15260//15260 15261//15261 15262//15262\nf 15263//15263 15264//15264 15265//15265\nf 15266//15266 15267//15267 15268//15268\nf 15269//15269 15270//15270 15271//15271\nf 15272//15272 15273//15273 15274//15274\nf 15275//15275 15276//15276 15277//15277\nf 15278//15278 15279//15279 15280//15280\nf 15281//15281 15282//15282 15283//15283\nf 15284//15284 15285//15285 15286//15286\nf 15287//15287 15288//15288 15289//15289\nf 15290//15290 15291//15291 15292//15292\nf 15293//15293 15294//15294 15295//15295\nf 15296//15296 15297//15297 15298//15298\nf 15299//15299 15300//15300 15301//15301\nf 15302//15302 15303//15303 15304//15304\nf 15305//15305 15306//15306 15307//15307\nf 15308//15308 15309//15309 15310//15310\nf 15311//15311 15312//15312 15313//15313\nf 15314//15314 15315//15315 15316//15316\nf 15317//15317 15318//15318 15319//15319\nf 15320//15320 15321//15321 15322//15322\nf 15314//15314 15323//15323 15315//15315\nf 15324//15324 15325//15325 15326//15326\nf 15327//15327 15328//15328 15329//15329\nf 15330//15330 15331//15331 15332//15332\nf 15333//15333 15334//15334 15335//15335\nf 15336//15336 15337//15337 15338//15338\nf 15339//15339 15340//15340 15341//15341\nf 15342//15342 15343//15343 15344//15344\nf 15345//15345 15346//15346 15347//15347\nf 15339//15339 15348//15348 15340//15340\nf 15349//15349 15350//15350 15351//15351\nf 15352//15352 15353//15353 15354//15354\nf 15355//15355 15356//15356 15357//15357\nf 15358//15358 15359//15359 15360//15360\nf 15361//15361 15362//15362 15363//15363\nf 15364//15364 15365//15365 15366//15366\nf 15367//15367 15368//15368 15369//15369\nf 15370//15370 15371//15371 15372//15372\nf 15373//15373 15374//15374 15375//15375\nf 15355//15355 15376//15376 15356//15356\nf 15377//15377 15378//15378 15379//15379\nf 15380//15380 15381//15381 15382//15382\nf 15383//15383 15384//15384 15385//15385\nf 15386//15386 15387//15387 15388//15388\nf 15352//15352 15389//15389 15353//15353\nf 15390//15390 15391//15391 15392//15392\nf 15393//15393 15394//15394 15395//15395\nf 15396//15396 15397//15397 15398//15398\nf 15399//15399 15400//15400 15401//15401\nf 15402//15402 15403//15403 15404//15404\nf 15405//15405 15406//15406 15407//15407\nf 15408//15408 15409//15409 15410//15410\nf 15411//15411 15412//15412 15413//15413\nf 15414//15414 15415//15415 15416//15416\nf 15417//15417 15418//15418 15419//15419\nf 15420//15420 15421//15421 15422//15422\nf 15423//15423 15424//15424 15425//15425\nf 15426//15426 15427//15427 15428//15428\nf 15429//15429 15430//15430 15431//15431\nf 15432//15432 15433//15433 15434//15434\nf 15435//15435 15436//15436 15437//15437\nf 15423//15423 15438//15438 15424//15424\nf 15439//15439 15440//15440 15441//15441\nf 15442//15442 15443//15443 15444//15444\nf 15445//15445 15446//15446 15447//15447\nf 15448//15448 15449//15449 15450//15450\nf 15451//15451 15452//15452 15453//15453\nf 15454//15454 15455//15455 15456//15456\nf 15457//15457 15458//15458 15459//15459\nf 15460//15460 15461//15461 15462//15462\nf 15463//15463 15464//15464 15465//15465\nf 15463//15463 15466//15466 15464//15464\nf 15467//15467 15450//15450 15449//15449\nf 15468//15468 15469//15469 15470//15470\nf 15471//15471 15472//15472 15473//15473\nf 15474//15474 15475//15475 15476//15476\nf 15477//15477 15478//15478 15479//15479\nf 15480//15480 15481//15481 15482//15482\nf 15483//15483 15484//15484 15485//15485\nf 15477//15477 15486//15486 15478//15478\nf 15487//15487 15488//15488 15489//15489\nf 15490//15490 15491//15491 15492//15492\nf 15493//15493 15494//15494 15495//15495\nf 15496//15496 15497//15497 15498//15498\nf 15499//15499 15484//15484 15483//15483\nf 15500//15500 15501//15501 15502//15502\nf 15503//15503 15504//15504 15505//15505\nf 15506//15506 15501//15501 15500//15500\nf 15507//15507 15508//15508 15509//15509\nf 15510//15510 15511//15511 15512//15512\nf 15513//15513 15514//15514 15515//15515\nf 15516//15516 15517//15517 15518//15518\nf 15519//15519 15520//15520 15521//15521\nf 15522//15522 15523//15523 15524//15524\nf 15525//15525 15526//15526 15527//15527\nf 15528//15528 15529//15529 15530//15530\nf 15531//15531 15532//15532 15533//15533\nf 15534//15534 15535//15535 15536//15536\nf 15534//15534 15537//15537 15535//15535\nf 15538//15538 15539//15539 15540//15540\nf 15541//15541 15542//15542 15543//15543\nf 15544//15544 15545//15545 15546//15546\nf 15547//15547 15548//15548 15549//15549\nf 15550//15550 15551//15551 15552//15552\nf 15553//15553 15554//15554 15555//15555\nf 15556//15556 15557//15557 15558//15558\nf 15559//15559 15560//15560 15561//15561\nf 15562//15562 15563//15563 15564//15564\nf 15565//15565 15566//15566 15567//15567\nf 15568//15568 15569//15569 15570//15570\nf 15571//15571 15572//15572 15573//15573\nf 15574//15574 15575//15575 15576//15576\nf 15577//15577 15578//15578 15579//15579\nf 15580//15580 15581//15581 15582//15582\nf 15583//15583 15584//15584 15585//15585\nf 15586//15586 15587//15587 15588//15588\nf 15589//15589 15590//15590 15591//15591\nf 15592//15592 15593//15593 15594//15594\nf 15595//15595 15596//15596 15597//15597\nf 15598//15598 15599//15599 15600//15600\nf 15601//15601 15602//15602 15603//15603\nf 15604//15604 15605//15605 15606//15606\nf 15607//15607 15608//15608 15609//15609\nf 15610//15610 15611//15611 15612//15612\nf 15613//15613 15614//15614 15615//15615\nf 15616//15616 15617//15617 15618//15618\nf 15619//15619 15620//15620 15621//15621\nf 15622//15622 15623//15623 15624//15624\nf 15625//15625 15626//15626 15627//15627\nf 15628//15628 15629//15629 15630//15630\nf 15631//15631 15632//15632 15633//15633\nf 15634//15634 15635//15635 15636//15636\nf 15637//15637 15638//15638 15639//15639\nf 15640//15640 15641//15641 15642//15642\nf 15643//15643 15644//15644 15645//15645\nf 15646//15646 15647//15647 15648//15648\nf 15649//15649 15106//15106 15105//15105\nf 15650//15650 15651//15651 15652//15652\nf 15653//15653 15654//15654 15655//15655\nf 15656//15656 15654//15654 15653//15653\nf 15657//15657 15658//15658 15659//15659\nf 15660//15660 15661//15661 15662//15662\nf 15663//15663 15664//15664 15665//15665\nf 15666//15666 15667//15667 15668//15668\nf 15669//15669 15670//15670 15671//15671\nf 15672//15672 15673//15673 15674//15674\nf 15675//15675 15676//15676 15677//15677\nf 15678//15678 15679//15679 15680//15680\nf 15681//15681 15682//15682 15683//15683\nf 15684//15684 15685//15685 15686//15686\nf 15687//15687 15688//15688 15689//15689\nf 15690//15690 15691//15691 15692//15692\nf 15693//15693 15694//15694 15695//15695\nf 15696//15696 15697//15697 15698//15698\nf 15699//15699 15700//15700 15701//15701\nf 15702//15702 15703//15703 15704//15704\nf 15705//15705 15706//15706 15707//15707\nf 15708//15708 15709//15709 15710//15710\nf 15711//15711 15712//15712 15713//15713\nf 15714//15714 15715//15715 15716//15716\nf 15717//15717 15718//15718 15719//15719\nf 15720//15720 15721//15721 15722//15722\nf 15723//15723 15724//15724 15725//15725\nf 15726//15726 15727//15727 15728//15728\nf 15729//15729 15730//15730 15731//15731\nf 15732//15732 15733//15733 15734//15734\nf 15735//15735 15736//15736 15737//15737\nf 15738//15738 15739//15739 15740//15740\nf 15741//15741 15742//15742 15743//15743\nf 15744//15744 15745//15745 15746//15746\nf 15747//15747 15748//15748 15749//15749\nf 15750//15750 15751//15751 15752//15752\nf 15753//15753 15754//15754 15755//15755\nf 15756//15756 15757//15757 15758//15758\nf 15759//15759 15760//15760 15761//15761\nf 15762//15762 15763//15763 15764//15764\nf 15765//15765 15766//15766 15767//15767\nf 15768//15768 15769//15769 15770//15770\nf 15771//15771 15772//15772 15773//15773\nf 15774//15774 15775//15775 15776//15776\nf 15777//15777 15778//15778 15779//15779\nf 15780//15780 15781//15781 15782//15782\nf 15783//15783 15784//15784 15785//15785\nf 15786//15786 15787//15787 15788//15788\nf 15789//15789 15790//15790 15791//15791\nf 15792//15792 15793//15793 15794//15794\nf 15795//15795 15796//15796 15797//15797\nf 15798//15798 15799//15799 15800//15800\nf 15801//15801 15802//15802 15803//15803\nf 15804//15804 15805//15805 15806//15806\nf 15807//15807 15808//15808 15809//15809\nf 15810//15810 15811//15811 15812//15812\nf 15813//15813 15814//15814 15815//15815\nf 15816//15816 15817//15817 15818//15818\nf 15819//15819 15820//15820 15821//15821\nf 15822//15822 15823//15823 15824//15824\nf 15825//15825 15826//15826 15827//15827\nf 15828//15828 15829//15829 15830//15830\nf 15831//15831 15832//15832 15833//15833\nf 15834//15834 15835//15835 15836//15836\nf 15837//15837 15838//15838 15839//15839\nf 15837//15837 15839//15839 15840//15840\nf 15834//15834 15836//15836 15838//15838\nf 15835//15835 15841//15841 15842//15842\nf 15835//15835 15842//15842 15836//15836\nf 15834//15834 15838//15838 15837//15837\nf 15843//15843 15844//15844 15845//15845\nf 15846//15846 15847//15847 15848//15848\nf 15849//15849 15850//15850 15851//15851\nf 15852//15852 15853//15853 15854//15854\nf 15849//15849 15855//15855 15850//15850\nf 15856//15856 15857//15857 15858//15858\nf 15859//15859 15860//15860 15861//15861\nf 15862//15862 15858//15858 15863//15863\nf 15862//15862 15856//15856 15858//15858\nf 15864//15864 15860//15860 15859//15859\nf 15865//15865 15866//15866 15867//15867\nf 15868//15868 15869//15869 15870//15870\nf 15865//15865 15871//15871 15866//15866\nf 15872//15872 15868//15868 15870//15870\nf 15873//15873 15874//15874 15875//15875\nf 15876//15876 15877//15877 15878//15878\nf 15879//15879 15880//15880 15881//15881\nf 15882//15882 15877//15877 15876//15876\nf 15883//15883 15884//15884 15885//15885\nf 15886//15886 15880//15880 15879//15879\nf 15887//15887 15886//15886 15879//15879\nf 15883//15883 15888//15888 15884//15884\nf 15889//15889 15890//15890 15891//15891\nf 15892//15892 15893//15893 15894//15894\nf 15895//15895 15896//15896 15897//15897\nf 15898//15898 15893//15893 15892//15892\nf 15899//15899 15900//15900 15901//15901\nf 15902//15902 15903//15903 15904//15904\nf 15902//15902 15904//15904 15905//15905\nf 15906//15906 15899//15899 15901//15901\nf 15907//15907 15903//15903 15902//15902\nf 15908//15908 15909//15909 15910//15910\nf 15911//15911 15912//15912 15913//15913\nf 15914//15914 15915//15915 15916//15916\nf 15914//15914 15917//15917 15915//15915\nf 15918//15918 15919//15919 15920//15920\nf 15921//15921 15922//15922 15923//15923\nf 15924//15924 15911//15911 15913//15913\nf 15924//15924 15913//15913 15925//15925\nf 15926//15926 15922//15922 15921//15921\nf 15927//15927 15928//15928 15929//15929\nf 15930//15930 15929//15929 15931//15931\nf 15930//15930 15927//15927 15929//15929\nf 15932//15932 15933//15933 15934//15934\nf 15935//15935 15936//15936 15937//15937\nf 15938//15938 15939//15939 15940//15940\nf 15941//15941 15942//15942 15943//15943\nf 15944//15944 15945//15945 15946//15946\nf 15947//15947 15948//15948 15949//15949\nf 15950//15950 15951//15951 15952//15952\nf 15953//15953 15954//15954 15955//15955\nf 15953//15953 15955//15955 15956//15956\nf 15957//15957 15958//15958 15959//15959\nf 15960//15960 15961//15961 15962//15962\nf 15963//15963 15964//15964 15965//15965\nf 15966//15966 15967//15967 15968//15968\nf 15969//15969 15970//15970 15971//15971\nf 15972//15972 15973//15973 15974//15974\nf 15975//15975 15976//15976 15977//15977\nf 15978//15978 15979//15979 15980//15980\nf 15981//15981 15979//15979 15978//15978\nf 15982//15982 15983//15983 15984//15984\nf 15985//15985 15986//15986 15987//15987\nf 15988//15988 15989//15989 15990//15990\nf 15991//15991 15992//15992 15993//15993\nf 15994//15994 15995//15995 15996//15996\nf 15997//15997 15998//15998 15999//15999\nf 16000//16000 16001//16001 16002//16002\nf 16003//16003 16004//16004 16005//16005\nf 16006//16006 16007//16007 16008//16008\nf 16009//16009 16010//16010 16011//16011\nf 16012//16012 16013//16013 16014//16014\nf 16015//16015 16016//16016 16017//16017\nf 16018//16018 16019//16019 16020//16020\nf 16021//16021 16022//16022 16023//16023\nf 16024//16024 16025//16025 16026//16026\nf 16027//16027 16028//16028 16029//16029\nf 16030//16030 16031//16031 16032//16032\nf 16033//16033 16034//16034 16035//16035\nf 16036//16036 16037//16037 16038//16038\nf 16039//16039 16040//16040 16041//16041\nf 16042//16042 16043//16043 16044//16044\nf 16045//16045 16046//16046 16047//16047\nf 16048//16048 16049//16049 16050//16050\nf 16051//16051 16052//16052 16053//16053\nf 16054//16054 16055//16055 16056//16056\nf 16057//16057 16058//16058 16059//16059\nf 16060//16060 16061//16061 16062//16062\nf 16015//16015 16063//16063 16016//16016\nf 16064//16064 16065//16065 16066//16066\nf 16067//16067 16068//16068 16069//16069\nf 16070//16070 16071//16071 16072//16072\nf 16073//16073 16074//16074 16075//16075\nf 16076//16076 16077//16077 16078//16078\nf 16079//16079 16080//16080 16081//16081\nf 16082//16082 16083//16083 16084//16084\nf 16085//16085 16086//16086 16087//16087\nf 16088//16088 16089//16089 16090//16090\nf 16091//16091 16092//16092 16093//16093\nf 16094//16094 16095//16095 16096//16096\nf 16097//16097 16098//16098 16099//16099\nf 16100//16100 16101//16101 16102//16102\nf 16103//16103 16104//16104 16105//16105\nf 16106//16106 16107//16107 16108//16108\nf 16109//16109 16110//16110 16111//16111\nf 16112//16112 16113//16113 16114//16114\nf 16115//16115 16116//16116 16117//16117\nf 16118//16118 16119//16119 16120//16120\nf 16121//16121 16122//16122 16123//16123\nf 16124//16124 16125//16125 16126//16126\nf 16127//16127 16128//16128 16129//16129\nf 16130//16130 16131//16131 16132//16132\nf 16133//16133 16134//16134 16135//16135\nf 16136//16136 16137//16137 16138//16138\nf 16139//16139 16140//16140 16141//16141\nf 16142//16142 16143//16143 16144//16144\nf 16145//16145 16146//16146 16147//16147\nf 16148//16148 16149//16149 16150//16150\nf 16151//16151 16152//16152 16153//16153\nf 16154//16154 16155//16155 16156//16156\nf 16157//16157 16158//16158 16159//16159\nf 16160//16160 16161//16161 16162//16162\nf 16163//16163 16164//16164 16165//16165\nf 16166//16166 16167//16167 16168//16168\nf 16169//16169 16170//16170 16171//16171\nf 16172//16172 16173//16173 16174//16174\nf 16175//16175 16176//16176 16177//16177\nf 16178//16178 16179//16179 16180//16180\nf 16181//16181 16182//16182 16183//16183\nf 16184//16184 16185//16185 16186//16186\nf 16187//16187 16188//16188 16189//16189\nf 16190//16190 16191//16191 16192//16192\nf 16193//16193 16194//16194 16195//16195\nf 16196//16196 16197//16197 16198//16198\nf 16199//16199 16200//16200 16201//16201\nf 16202//16202 16203//16203 16204//16204\nf 16204//16204 16203//16203 16205//16205\nf 16206//16206 16207//16207 16208//16208\nf 16209//16209 16210//16210 16211//16211\nf 16212//16212 16213//16213 16214//16214\nf 16215//16215 16216//16216 16217//16217\nf 16218//16218 16219//16219 16220//16220\nf 16221//16221 16222//16222 16223//16223\nf 16224//16224 16225//16225 16226//16226\nf 16227//16227 16228//16228 16229//16229\nf 16230//16230 16231//16231 16232//16232\nf 16233//16233 16234//16234 16235//16235\nf 16236//16236 16237//16237 16238//16238\nf 16239//16239 16240//16240 16241//16241\nf 16242//16242 16243//16243 16244//16244\nf 16245//16245 16246//16246 16247//16247\nf 16248//16248 16249//16249 16250//16250\nf 16251//16251 16252//16252 16253//16253\nf 16254//16254 16255//16255 16256//16256\nf 16257//16257 16258//16258 16259//16259\nf 16260//16260 16261//16261 16262//16262\nf 16263//16263 16264//16264 16265//16265\nf 16266//16266 16267//16267 16268//16268\nf 16269//16269 16270//16270 16271//16271\nf 16272//16272 16273//16273 16274//16274\nf 16275//16275 16276//16276 16277//16277\nf 16278//16278 16279//16279 16280//16280\nf 16281//16281 16282//16282 16283//16283\nf 16284//16284 16285//16285 16286//16286\nf 16287//16287 16288//16288 16289//16289\nf 16290//16290 16291//16291 16292//16292\nf 16293//16293 16294//16294 16295//16295\nf 16296//16296 16297//16297 16298//16298\nf 16299//16299 16300//16300 16301//16301\nf 16302//16302 16303//16303 16304//16304\nf 16305//16305 16306//16306 16307//16307\nf 16308//16308 16309//16309 16310//16310\nf 16311//16311 16312//16312 16313//16313\nf 16314//16314 16315//16315 16316//16316\nf 16317//16317 16318//16318 16319//16319\nf 16320//16320 16321//16321 16322//16322\nf 16323//16323 16324//16324 16325//16325\nf 16326//16326 16327//16327 16328//16328\nf 16329//16329 16330//16330 16331//16331\nf 16332//16332 16333//16333 16334//16334\nf 16335//16335 16336//16336 16337//16337\nf 16338//16338 16339//16339 16340//16340\nf 16341//16341 16342//16342 16343//16343\nf 16344//16344 16345//16345 16346//16346\nf 16347//16347 16348//16348 16349//16349\nf 16350//16350 16351//16351 16352//16352\nf 16353//16353 16354//16354 16355//16355\nf 16356//16356 16357//16357 16358//16358\nf 16359//16359 16360//16360 16361//16361\nf 16362//16362 16363//16363 16364//16364\nf 16365//16365 16366//16366 16367//16367\nf 16368//16368 16369//16369 16370//16370\nf 16371//16371 16372//16372 16373//16373\nf 16374//16374 16375//16375 16376//16376\nf 16377//16377 16378//16378 16379//16379\nf 16380//16380 16381//16381 16382//16382\nf 16383//16383 16384//16384 16385//16385\nf 16386//16386 16387//16387 16388//16388\nf 16389//16389 16390//16390 16391//16391\nf 16392//16392 16393//16393 16394//16394\nf 16395//16395 16396//16396 16397//16397\nf 16398//16398 16399//16399 16400//16400\nf 16401//16401 16402//16402 16403//16403\nf 16404//16404 16405//16405 16406//16406\nf 16407//16407 16408//16408 16409//16409\nf 16410//16410 16411//16411 16412//16412\nf 16413//16413 16414//16414 16415//16415\nf 16416//16416 16417//16417 16418//16418\nf 16419//16419 16420//16420 16421//16421\nf 16422//16422 16423//16423 16424//16424\nf 16425//16425 16426//16426 16427//16427\nf 16428//16428 16429//16429 16430//16430\nf 16431//16431 16432//16432 16433//16433\nf 16434//16434 16435//16435 16436//16436\nf 16437//16437 16438//16438 16439//16439\nf 16440//16440 16441//16441 16442//16442\nf 16443//16443 16444//16444 16445//16445\nf 16446//16446 16447//16447 16448//16448\nf 16449//16449 16450//16450 16451//16451\nf 16452//16452 16453//16453 16454//16454\nf 16455//16455 16456//16456 16457//16457\nf 16458//16458 16459//16459 16460//16460\nf 16461//16461 16462//16462 16463//16463\nf 16464//16464 16465//16465 16466//16466\nf 16467//16467 16468//16468 16469//16469\nf 16470//16470 16471//16471 16472//16472\nf 16473//16473 16474//16474 16475//16475\nf 16476//16476 16477//16477 16478//16478\nf 16478//16478 16477//16477 16479//16479\nf 16480//16480 16481//16481 16482//16482\nf 16483//16483 16484//16484 16485//16485\nf 16486//16486 16487//16487 16488//16488\nf 16489//16489 16490//16490 16491//16491\nf 16492//16492 16493//16493 16494//16494\nf 16495//16495 16496//16496 16497//16497\nf 16498//16498 16499//16499 16500//16500\nf 16501//16501 16502//16502 16503//16503\nf 16504//16504 16505//16505 16506//16506\nf 16507//16507 16508//16508 16509//16509\nf 16510//16510 16511//16511 16512//16512\nf 16513//16513 16514//16514 16515//16515\nf 16516//16516 16517//16517 16518//16518\nf 16519//16519 16520//16520 16521//16521\nf 16522//16522 16523//16523 16524//16524\nf 16525//16525 16526//16526 16527//16527\nf 16528//16528 16529//16529 16530//16530\nf 16531//16531 16532//16532 16533//16533\nf 16534//16534 16535//16535 16536//16536\nf 16537//16537 16538//16538 16539//16539\nf 16540//16540 16541//16541 16542//16542\nf 16543//16543 16544//16544 16545//16545\nf 16546//16546 16547//16547 16548//16548\nf 16549//16549 16550//16550 16551//16551\nf 16552//16552 16553//16553 16554//16554\nf 16555//16555 16556//16556 16557//16557\nf 16558//16558 16559//16559 16560//16560\nf 16561//16561 16562//16562 16563//16563\nf 16564//16564 16565//16565 16566//16566\nf 16567//16567 16568//16568 16569//16569\nf 16570//16570 16571//16571 16572//16572\nf 16573//16573 16574//16574 16575//16575\nf 16576//16576 16577//16577 16578//16578\nf 16531//16531 16579//16579 16532//16532\nf 16580//16580 16581//16581 16582//16582\nf 16583//16583 16584//16584 16585//16585\nf 16586//16586 16587//16587 16588//16588\nf 16589//16589 16590//16590 16591//16591\nf 16592//16592 16593//16593 16594//16594\nf 16595//16595 16596//16596 16597//16597\nf 16598//16598 16599//16599 16600//16600\nf 16601//16601 16602//16602 16603//16603\nf 16604//16604 16605//16605 16606//16606\nf 16607//16607 16608//16608 16609//16609\nf 16610//16610 16611//16611 16612//16612\nf 16613//16613 16614//16614 16615//16615\nf 16616//16616 16617//16617 16618//16618\nf 16619//16619 16620//16620 16621//16621\nf 16622//16622 16623//16623 16624//16624\nf 16625//16625 16626//16626 16627//16627\nf 16628//16628 16629//16629 16630//16630\nf 16631//16631 16632//16632 16633//16633\nf 16634//16634 16635//16635 16636//16636\nf 16637//16637 16638//16638 16639//16639\nf 16640//16640 16641//16641 16642//16642\nf 16643//16643 16644//16644 16645//16645\nf 16646//16646 16647//16647 16648//16648\nf 16649//16649 16650//16650 16651//16651\nf 16652//16652 16653//16653 16654//16654\nf 16655//16655 16656//16656 16657//16657\nf 16658//16658 16659//16659 16660//16660\nf 16661//16661 16662//16662 16663//16663\nf 16664//16664 16665//16665 16666//16666\nf 16667//16667 16668//16668 16669//16669\nf 16670//16670 16671//16671 16672//16672\nf 16673//16673 16674//16674 16675//16675\nf 16676//16676 16677//16677 16678//16678\nf 16679//16679 16680//16680 16681//16681\nf 16682//16682 16683//16683 16684//16684\nf 16685//16685 16686//16686 16687//16687\nf 16688//16688 16689//16689 16690//16690\nf 16691//16691 16692//16692 16693//16693\nf 16694//16694 16695//16695 16696//16696\nf 16697//16697 16698//16698 16699//16699\nf 16700//16700 16701//16701 16702//16702\nf 16703//16703 16704//16704 16705//16705\nf 16706//16706 16707//16707 16708//16708\nf 16709//16709 16710//16710 16711//16711\nf 16712//16712 16713//16713 16714//16714\nf 16715//16715 16716//16716 16717//16717\nf 16718//16718 16719//16719 16720//16720\nf 16721//16721 16722//16722 16723//16723\nf 16724//16724 16725//16725 16726//16726\nf 16727//16727 16728//16728 16729//16729\nf 16730//16730 16731//16731 16732//16732\nf 16733//16733 16734//16734 16735//16735\nf 16736//16736 16737//16737 16738//16738\nf 16739//16739 16740//16740 16741//16741\nf 16742//16742 16743//16743 16744//16744\nf 16745//16745 16746//16746 16747//16747\nf 16748//16748 16749//16749 16750//16750\nf 16751//16751 16752//16752 16753//16753\nf 16754//16754 16755//16755 16756//16756\nf 16757//16757 16758//16758 16759//16759\nf 16760//16760 16761//16761 16762//16762\nf 16763//16763 16764//16764 16765//16765\nf 16766//16766 16767//16767 16768//16768\nf 16769//16769 16770//16770 16771//16771\nf 16772//16772 16773//16773 16774//16774\nf 16775//16775 16776//16776 16777//16777\nf 16778//16778 16779//16779 16780//16780\nf 16781//16781 16782//16782 16783//16783\nf 16784//16784 16785//16785 16786//16786\nf 16787//16787 16788//16788 16789//16789\nf 16790//16790 16791//16791 16792//16792\nf 16793//16793 16794//16794 16795//16795\nf 16796//16796 16797//16797 16798//16798\nf 16799//16799 16800//16800 16801//16801\nf 16802//16802 16803//16803 16804//16804\nf 16805//16805 16806//16806 16807//16807\nf 16808//16808 16809//16809 16810//16810\nf 16811//16811 16812//16812 16813//16813\nf 16814//16814 16815//16815 16816//16816\nf 16817//16817 16818//16818 16819//16819\nf 16820//16820 16821//16821 16822//16822\nf 16823//16823 16824//16824 16825//16825\nf 16826//16826 16827//16827 16828//16828\nf 16829//16829 16830//16830 16831//16831\nf 16832//16832 16833//16833 16834//16834\nf 16835//16835 16836//16836 16837//16837\nf 16838//16838 16839//16839 16840//16840\nf 16841//16841 16842//16842 16843//16843\nf 16844//16844 16845//16845 16846//16846\nf 16847//16847 16848//16848 16849//16849\nf 16850//16850 16851//16851 16852//16852\nf 16853//16853 16854//16854 16855//16855\nf 16856//16856 16857//16857 16858//16858\nf 16859//16859 16860//16860 16861//16861\nf 16862//16862 16863//16863 16864//16864\nf 16865//16865 16866//16866 16867//16867\nf 16868//16868 16869//16869 16870//16870\nf 16871//16871 16872//16872 16873//16873\nf 16874//16874 16875//16875 16876//16876\nf 16877//16877 16878//16878 16879//16879\nf 16880//16880 16881//16881 16882//16882\nf 16883//16883 16884//16884 16885//16885\nf 16886//16886 16887//16887 16888//16888\nf 16889//16889 16890//16890 16891//16891\nf 16892//16892 16893//16893 16894//16894\nf 16895//16895 16893//16893 16892//16892\nf 16896//16896 16897//16897 16898//16898\nf 16899//16899 16900//16900 16901//16901\nf 16902//16902 16903//16903 16904//16904\nf 16905//16905 16906//16906 16907//16907\nf 16908//16908 16909//16909 16910//16910\nf 16911//16911 16912//16912 16913//16913\nf 16914//16914 16915//16915 16916//16916\nf 16917//16917 16918//16918 16919//16919\nf 16920//16920 16921//16921 16922//16922\nf 16923//16923 16924//16924 16925//16925\nf 16926//16926 16927//16927 16928//16928\nf 16929//16929 16930//16930 16931//16931\nf 16932//16932 16933//16933 16934//16934\nf 16887//16887 16935//16935 16888//16888\nf 16936//16936 16937//16937 16938//16938\nf 16939//16939 16940//16940 16941//16941\nf 16942//16942 16943//16943 16944//16944\nf 16945//16945 16946//16946 16947//16947\nf 16948//16948 16949//16949 16950//16950\nf 16951//16951 16952//16952 16953//16953\nf 16954//16954 16955//16955 16956//16956\nf 16957//16957 16958//16958 16959//16959\nf 16960//16960 16961//16961 16962//16962\nf 16963//16963 16964//16964 16965//16965\nf 16966//16966 16967//16967 16968//16968\nf 16969//16969 16970//16970 16971//16971\nf 16972//16972 16973//16973 16974//16974\nf 16975//16975 16976//16976 16977//16977\nf 16978//16978 16979//16979 16980//16980\nf 16981//16981 16982//16982 16983//16983\nf 16984//16984 16985//16985 16986//16986\nf 16987//16987 16988//16988 16989//16989\nf 16990//16990 16991//16991 16992//16992\nf 16993//16993 16994//16994 16995//16995\nf 16996//16996 16997//16997 16998//16998\nf 16999//16999 17000//17000 17001//17001\nf 17002//17002 17003//17003 17004//17004\nf 17005//17005 17006//17006 17007//17007\nf 17008//17008 17009//17009 17010//17010\nf 17011//17011 17012//17012 17013//17013\nf 17014//17014 17015//17015 17016//17016\nf 17017//17017 17018//17018 17019//17019\nf 17020//17020 17021//17021 17022//17022\nf 17023//17023 17024//17024 17025//17025\nf 17026//17026 17027//17027 17028//17028\nf 17029//17029 17030//17030 17031//17031\nf 17032//17032 17033//17033 17034//17034\nf 17035//17035 17036//17036 17037//17037\nf 17038//17038 17039//17039 17040//17040\nf 17041//17041 17042//17042 17043//17043\nf 17044//17044 17045//17045 17046//17046\nf 17047//17047 17048//17048 17049//17049\nf 17050//17050 17044//17044 17051//17051\nf 17052//17052 17053//17053 17054//17054\nf 17055//17055 17056//17056 17057//17057\nf 17058//17058 17059//17059 17060//17060\nf 17061//17061 17062//17062 17063//17063\nf 17064//17064 17058//17058 17065//17065\nf 17066//17066 17067//17067 17068//17068\nf 17068//17068 17067//17067 17069//17069\nf 17070//17070 17071//17071 17072//17072\nf 17073//17073 17074//17074 17075//17075\nf 17076//17076 17077//17077 17078//17078\nf 17079//17079 17080//17080 17081//17081\nf 17082//17082 17083//17083 17084//17084\nf 17085//17085 17086//17086 17087//17087\nf 17088//17088 17089//17089 17090//17090\nf 17091//17091 17092//17092 17093//17093\nf 17094//17094 17095//17095 17096//17096\nf 17093//17093 17092//17092 17097//17097\nf 17098//17098 17099//17099 17100//17100\nf 17101//17101 17102//17102 17103//17103\nf 17104//17104 17105//17105 17106//17106\nf 17107//17107 17108//17108 17109//17109\nf 17110//17110 17111//17111 17112//17112\nf 17113//17113 17114//17114 17115//17115\nf 17116//17116 17117//17117 17118//17118\nf 17119//17119 17120//17120 17121//17121\nf 17122//17122 17123//17123 17124//17124\nf 17125//17125 17126//17126 17127//17127\nf 17128//17128 17129//17129 17130//17130\nf 17131//17131 17132//17132 17133//17133\nf 17134//17134 17135//17135 17136//17136\nf 17137//17137 17138//17138 17139//17139\nf 17140//17140 17141//17141 17142//17142\nf 17143//17143 17144//17144 17145//17145\nf 17146//17146 17098//17098 17100//17100\nf 17147//17147 17148//17148 17149//17149\nf 17150//17150 17151//17151 17152//17152\nf 17153//17153 17154//17154 17155//17155\nf 17156//17156 17157//17157 17158//17158\nf 17159//17159 17160//17160 17161//17161\nf 17162//17162 17163//17163 17164//17164\nf 17165//17165 17166//17166 17167//17167\nf 17168//17168 17169//17169 17170//17170\nf 17171//17171 17172//17172 17173//17173\nf 17174//17174 17175//17175 17176//17176\nf 17177//17177 17178//17178 17179//17179\nf 17180//17180 17181//17181 17182//17182\nf 17183//17183 17184//17184 17185//17185\nf 17186//17186 17187//17187 17188//17188\nf 17189//17189 17190//17190 17191//17191\nf 17192//17192 17193//17193 17194//17194\nf 17195//17195 17196//17196 17197//17197\nf 17198//17198 17199//17199 17200//17200\nf 17201//17201 17202//17202 17203//17203\nf 17204//17204 17205//17205 17206//17206\nf 17207//17207 17208//17208 17209//17209\nf 17210//17210 17211//17211 17212//17212\nf 17213//17213 17214//17214 17215//17215\nf 17216//17216 17217//17217 17218//17218\nf 17219//17219 17220//17220 17221//17221\nf 17222//17222 17223//17223 17224//17224\nf 17225//17225 17226//17226 17227//17227\nf 17228//17228 17229//17229 17230//17230\nf 17231//17231 17232//17232 17233//17233\nf 17234//17234 17235//17235 17236//17236\nf 17237//17237 17238//17238 17239//17239\nf 17240//17240 17241//17241 17242//17242\nf 17243//17243 17244//17244 17245//17245\nf 17246//17246 17247//17247 17248//17248\nf 17249//17249 17250//17250 17251//17251\nf 17252//17252 17253//17253 17254//17254\nf 17255//17255 17256//17256 17257//17257\nf 17258//17258 17259//17259 17260//17260\nf 17261//17261 17262//17262 17263//17263\nf 17264//17264 17265//17265 17266//17266\nf 17267//17267 17268//17268 17269//17269\nf 17270//17270 17271//17271 17272//17272\nf 17273//17273 17274//17274 17275//17275\nf 17276//17276 17277//17277 17278//17278\nf 17279//17279 17280//17280 17281//17281\nf 17282//17282 17283//17283 17284//17284\nf 17285//17285 17273//17273 17275//17275\nf 17286//17286 17287//17287 17288//17288\nf 17289//17289 17290//17290 17291//17291\nf 17292//17292 17293//17293 17294//17294\nf 17295//17295 17296//17296 17297//17297\nf 17298//17298 17299//17299 17300//17300\nf 17301//17301 17302//17302 17303//17303\nf 17304//17304 17305//17305 17306//17306\nf 17307//17307 17308//17308 17309//17309\nf 17310//17310 17311//17311 17312//17312\nf 17313//17313 17314//17314 17315//17315\nf 17316//17316 17317//17317 17318//17318\nf 17319//17319 17320//17320 17321//17321\nf 17322//17322 17323//17323 17324//17324\nf 17325//17325 17326//17326 17327//17327\nf 17328//17328 17329//17329 17330//17330\nf 17331//17331 17332//17332 17333//17333\nf 17334//17334 17335//17335 17336//17336\nf 17337//17337 17338//17338 17339//17339\nf 17340//17340 17341//17341 17342//17342\nf 17343//17343 17344//17344 17345//17345\nf 17346//17346 17347//17347 17348//17348\nf 17349//17349 17350//17350 17351//17351\nf 17352//17352 17353//17353 17354//17354\nf 17355//17355 17356//17356 17357//17357\nf 17358//17358 17359//17359 17360//17360\nf 17361//17361 17362//17362 17363//17363\nf 17364//17364 17365//17365 17366//17366\nf 17367//17367 17368//17368 17369//17369\nf 17370//17370 17371//17371 17372//17372\nf 17373//17373 17374//17374 17375//17375\nf 17376//17376 17377//17377 17378//17378\nf 17379//17379 17380//17380 17381//17381\nf 17382//17382 17383//17383 17384//17384\nf 17385//17385 17386//17386 17387//17387\nf 17388//17388 17389//17389 17390//17390\nf 17391//17391 17392//17392 17393//17393\nf 17394//17394 17395//17395 17396//17396\nf 17397//17397 17398//17398 17399//17399\nf 17400//17400 17401//17401 17402//17402\nf 17403//17403 17404//17404 17405//17405\nf 17406//17406 17407//17407 17408//17408\nf 17409//17409 17410//17410 17411//17411\nf 17412//17412 17413//17413 17414//17414\nf 17415//17415 17416//17416 17417//17417\nf 17418//17418 17419//17419 17420//17420\nf 17421//17421 17422//17422 17423//17423\nf 17424//17424 17425//17425 17426//17426\nf 17422//17422 17427//17427 17423//17423\nf 17428//17428 17429//17429 17430//17430\nf 17431//17431 17432//17432 17433//17433\nf 17434//17434 17435//17435 17436//17436\nf 17437//17437 17429//17429 17428//17428\nf 17438//17438 17439//17439 17440//17440\nf 17441//17441 17442//17442 17443//17443\nf 17444//17444 17445//17445 17446//17446\nf 17447//17447 17448//17448 17449//17449\nf 17450//17450 17451//17451 17452//17452\nf 17453//17453 17454//17454 17455//17455\nf 17456//17456 17457//17457 17458//17458\nf 17459//17459 17460//17460 17461//17461\nf 17462//17462 17460//17460 17459//17459\nf 17463//17463 17464//17464 17465//17465\nf 17466//17466 17467//17467 17468//17468\nf 17469//17469 17470//17470 17471//17471\nf 17472//17472 17473//17473 17474//17474\nf 17475//17475 17476//17476 17477//17477\nf 17478//17478 17479//17479 17480//17480\nf 17481//17481 17482//17482 17483//17483\nf 17484//17484 17485//17485 17486//17486\nf 17487//17487 17488//17488 17489//17489\nf 17490//17490 17491//17491 17492//17492\nf 17493//17493 17494//17494 17495//17495\nf 17496//17496 17497//17497 17498//17498\nf 17499//17499 17500//17500 17501//17501\nf 17502//17502 17503//17503 17504//17504\nf 17505//17505 17506//17506 17507//17507\nf 17508//17508 17509//17509 17510//17510\nf 17511//17511 17512//17512 17513//17513\nf 17514//17514 17515//17515 17516//17516\nf 17517//17517 17518//17518 17519//17519\nf 17520//17520 17521//17521 17522//17522\nf 17523//17523 17524//17524 17525//17525\nf 17526//17526 17527//17527 17528//17528\nf 17529//17529 17530//17530 17531//17531\nf 17532//17532 17533//17533 17534//17534\nf 17535//17535 17536//17536 17537//17537\nf 17538//17538 17539//17539 17540//17540\nf 17541//17541 17542//17542 17543//17543\nf 17544//17544 17545//17545 17546//17546\nf 17547//17547 17548//17548 17549//17549\nf 17550//17550 17551//17551 17552//17552\nf 17553//17553 17554//17554 17555//17555\nf 17556//17556 17557//17557 17558//17558\nf 17559//17559 17560//17560 17561//17561\nf 17562//17562 17563//17563 17564//17564\nf 17565//17565 17566//17566 17567//17567\nf 17568//17568 17569//17569 17570//17570\nf 17571//17571 17572//17572 17573//17573\nf 17574//17574 17575//17575 17576//17576\nf 17577//17577 17578//17578 17579//17579\nf 17580//17580 17581//17581 17582//17582\nf 17583//17583 17584//17584 17585//17585\nf 17586//17586 17587//17587 17588//17588\nf 17589//17589 17590//17590 17591//17591\nf 17592//17592 17593//17593 17594//17594\nf 17595//17595 17596//17596 17597//17597\nf 17598//17598 17599//17599 17600//17600\nf 17601//17601 17602//17602 17603//17603\nf 17604//17604 17605//17605 17606//17606\nf 17607//17607 17608//17608 17609//17609\nf 17610//17610 17611//17611 17612//17612\nf 17613//17613 17614//17614 17615//17615\nf 17616//17616 17617//17617 17618//17618\nf 17619//17619 17620//17620 17621//17621\nf 17622//17622 17623//17623 17624//17624\nf 17625//17625 17626//17626 17627//17627\nf 17628//17628 17629//17629 17630//17630\nf 17631//17631 17632//17632 17633//17633\nf 17634//17634 17635//17635 17636//17636\nf 17637//17637 17638//17638 17639//17639\nf 17640//17640 17641//17641 17642//17642\nf 17643//17643 17644//17644 17645//17645\nf 17646//17646 17647//17647 17648//17648\nf 17649//17649 17650//17650 17651//17651\nf 17652//17652 17653//17653 17654//17654\nf 17655//17655 17656//17656 17657//17657\nf 17658//17658 17659//17659 17660//17660\nf 17661//17661 17662//17662 17663//17663\nf 17664//17664 17665//17665 17666//17666\nf 17667//17667 17668//17668 17669//17669\nf 17670//17670 17671//17671 17672//17672\nf 17673//17673 17674//17674 17675//17675\nf 17676//17676 17677//17677 17678//17678\nf 17679//17679 17680//17680 17681//17681\nf 17682//17682 17683//17683 17684//17684\nf 17685//17685 17686//17686 17687//17687\nf 17688//17688 17689//17689 17690//17690\nf 17691//17691 17692//17692 17693//17693\nf 17694//17694 17695//17695 17696//17696\nf 17697//17697 17698//17698 17699//17699\nf 17700//17700 17701//17701 17702//17702\nf 17703//17703 17704//17704 17705//17705\nf 17706//17706 17707//17707 17708//17708\nf 17709//17709 17710//17710 17711//17711\nf 17712//17712 17713//17713 17714//17714\nf 17715//17715 17716//17716 17717//17717\nf 17718//17718 17719//17719 17720//17720\nf 17721//17721 17722//17722 17723//17723\nf 17724//17724 17725//17725 17726//17726\nf 17727//17727 17728//17728 17729//17729\nf 17730//17730 17731//17731 17732//17732\nf 17733//17733 17734//17734 17735//17735\nf 17736//17736 17737//17737 17738//17738\nf 17739//17739 17740//17740 17741//17741\nf 17742//17742 17743//17743 17744//17744\nf 17745//17745 17746//17746 17747//17747\nf 17748//17748 17749//17749 17750//17750\nf 17751//17751 17752//17752 17753//17753\nf 17754//17754 17755//17755 17756//17756\nf 17757//17757 17758//17758 17759//17759\nf 17760//17760 17761//17761 17762//17762\nf 17763//17763 17764//17764 17765//17765\nf 17766//17766 17767//17767 17768//17768\nf 17769//17769 17770//17770 17771//17771\nf 17772//17772 17773//17773 17774//17774\nf 17775//17775 17776//17776 17777//17777\nf 17778//17778 17779//17779 17780//17780\nf 17781//17781 17782//17782 17783//17783\nf 17784//17784 17785//17785 17786//17786\nf 17787//17787 17788//17788 17789//17789\nf 17790//17790 17791//17791 17792//17792\nf 17793//17793 17794//17794 17795//17795\nf 17796//17796 17797//17797 17798//17798\nf 17799//17799 17800//17800 17801//17801\nf 17802//17802 17803//17803 17804//17804\nf 17805//17805 17806//17806 17807//17807\nf 17808//17808 17809//17809 17810//17810\nf 17811//17811 17812//17812 17813//17813\nf 17814//17814 17815//17815 17816//17816\nf 17817//17817 17818//17818 17819//17819\nf 17820//17820 17821//17821 17822//17822\nf 17823//17823 17824//17824 17825//17825\nf 17826//17826 17827//17827 17828//17828\nf 17829//17829 17830//17830 17831//17831\nf 17832//17832 17833//17833 17834//17834\nf 17835//17835 17836//17836 17837//17837\nf 17838//17838 17839//17839 17840//17840\nf 17841//17841 17842//17842 17843//17843\nf 17844//17844 17845//17845 17846//17846\nf 17847//17847 17848//17848 17849//17849\nf 17850//17850 17851//17851 17852//17852\nf 17853//17853 17854//17854 17855//17855\nf 17856//17856 17857//17857 17858//17858\nf 17859//17859 17860//17860 17861//17861\nf 17862//17862 17863//17863 17864//17864\nf 17865//17865 17866//17866 17867//17867\nf 17868//17868 17869//17869 17870//17870\nf 17871//17871 17872//17872 17873//17873\nf 17874//17874 17875//17875 17876//17876\nf 17877//17877 17878//17878 17879//17879\nf 17880//17880 17881//17881 17882//17882\nf 17883//17883 17884//17884 17885//17885\nf 17886//17886 17887//17887 17888//17888\nf 17889//17889 17890//17890 17891//17891\nf 17892//17892 17893//17893 17894//17894\nf 17895//17895 17896//17896 17897//17897\nf 17898//17898 17899//17899 17900//17900\nf 17901//17901 17902//17902 17903//17903\nf 17904//17904 17905//17905 17906//17906\nf 17907//17907 17908//17908 17909//17909\nf 17910//17910 17911//17911 17912//17912\nf 17913//17913 17914//17914 17915//17915\nf 17916//17916 17917//17917 17918//17918\nf 17919//17919 17920//17920 17921//17921\nf 17922//17922 17923//17923 17924//17924\nf 17925//17925 17926//17926 17927//17927\nf 17928//17928 17929//17929 17930//17930\nf 17931//17931 17932//17932 17933//17933\nf 17934//17934 17935//17935 17936//17936\nf 17937//17937 17938//17938 17939//17939\nf 17940//17940 17941//17941 17942//17942\nf 17943//17943 17944//17944 17945//17945\nf 17946//17946 17947//17947 17948//17948\nf 17949//17949 17950//17950 17951//17951\nf 17952//17952 17953//17953 17954//17954\nf 17955//17955 17956//17956 17957//17957\nf 17958//17958 17959//17959 17960//17960\nf 17961//17961 17962//17962 17963//17963\nf 17964//17964 17965//17965 17966//17966\nf 17922//17922 17967//17967 17923//17923\nf 17968//17968 17969//17969 17970//17970\nf 17971//17971 17972//17972 17973//17973\nf 17974//17974 17975//17975 17976//17976\nf 17977//17977 17978//17978 17979//17979\nf 17980//17980 17981//17981 17982//17982\nf 17983//17983 17984//17984 17985//17985\nf 17986//17986 17987//17987 17988//17988\nf 17989//17989 17990//17990 17991//17991\nf 17992//17992 17993//17993 17994//17994\nf 17995//17995 17996//17996 17997//17997\nf 17998//17998 17999//17999 18000//18000\nf 18001//18001 18002//18002 18003//18003\nf 18004//18004 18005//18005 18006//18006\nf 18007//18007 18008//18008 18009//18009\nf 18010//18010 18011//18011 18012//18012\nf 18013//18013 18014//18014 18015//18015\nf 18016//18016 18017//18017 18018//18018\nf 18019//18019 18020//18020 18021//18021\nf 18022//18022 18023//18023 18024//18024\nf 18025//18025 18026//18026 18027//18027\nf 18028//18028 18029//18029 18030//18030\nf 18031//18031 18032//18032 18033//18033\nf 18034//18034 18035//18035 18036//18036\nf 18037//18037 18038//18038 18039//18039\nf 18040//18040 18041//18041 18042//18042\nf 18043//18043 18044//18044 18045//18045\nf 18046//18046 18047//18047 18048//18048\nf 18049//18049 18050//18050 18051//18051\nf 18052//18052 18053//18053 18054//18054\nf 18055//18055 18056//18056 18057//18057\nf 18058//18058 18059//18059 18060//18060\nf 18061//18061 18062//18062 18063//18063\nf 18064//18064 18065//18065 18066//18066\nf 18067//18067 18068//18068 18069//18069\nf 18070//18070 18071//18071 18072//18072\nf 18073//18073 18074//18074 18075//18075\nf 18076//18076 18077//18077 18078//18078\nf 18079//18079 18080//18080 18081//18081\nf 18082//18082 18083//18083 18084//18084\nf 18085//18085 18086//18086 18087//18087\nf 18088//18088 18089//18089 18090//18090\nf 18091//18091 18092//18092 18093//18093\nf 18094//18094 18095//18095 18096//18096\nf 18097//18097 18098//18098 18099//18099\nf 18100//18100 18101//18101 18102//18102\nf 18103//18103 18104//18104 18105//18105\nf 18106//18106 18107//18107 18108//18108\nf 18109//18109 18110//18110 18111//18111\nf 18112//18112 18113//18113 18114//18114\nf 18115//18115 18116//18116 18117//18117\nf 18118//18118 18119//18119 18120//18120\nf 18121//18121 18122//18122 18123//18123\nf 18124//18124 18125//18125 18126//18126\nf 18127//18127 18128//18128 18129//18129\nf 18130//18130 18131//18131 18132//18132\nf 18133//18133 18134//18134 18135//18135\nf 18136//18136 18137//18137 18138//18138\nf 18139//18139 18140//18140 18141//18141\nf 18142//18142 18143//18143 18144//18144\nf 18145//18145 18146//18146 18147//18147\nf 18148//18148 18149//18149 18150//18150\nf 18151//18151 18152//18152 18153//18153\nf 18154//18154 18155//18155 18156//18156\nf 18157//18157 18158//18158 18159//18159\nf 18160//18160 18161//18161 18162//18162\nf 18163//18163 18164//18164 18165//18165\nf 18166//18166 18167//18167 18168//18168\nf 18169//18169 18170//18170 18171//18171\nf 18172//18172 18173//18173 18174//18174\nf 18175//18175 18176//18176 18177//18177\nf 18178//18178 18179//18179 18180//18180\nf 18181//18181 18182//18182 18183//18183\nf 18184//18184 18185//18185 18186//18186\nf 18187//18187 18188//18188 18189//18189\nf 18190//18190 18191//18191 18192//18192\nf 18193//18193 18194//18194 18195//18195\nf 18196//18196 18197//18197 18198//18198\nf 18199//18199 18200//18200 18201//18201\nf 18202//18202 18203//18203 18204//18204\nf 18205//18205 18206//18206 18207//18207\nf 18208//18208 18209//18209 18210//18210\nf 18211//18211 18212//18212 18213//18213\nf 18214//18214 18215//18215 18216//18216\nf 18217//18217 18218//18218 18219//18219\nf 18220//18220 18221//18221 18222//18222\nf 18223//18223 18224//18224 18225//18225\nf 18226//18226 18227//18227 18228//18228\nf 18229//18229 18230//18230 18231//18231\nf 18232//18232 18233//18233 18234//18234\nf 18235//18235 18236//18236 18237//18237\nf 18238//18238 18239//18239 18240//18240\nf 18241//18241 18242//18242 18243//18243\nf 18244//18244 18245//18245 18246//18246\nf 18247//18247 18248//18248 18249//18249\nf 18250//18250 18251//18251 18252//18252\nf 18253//18253 18254//18254 18255//18255\nf 18256//18256 18257//18257 18258//18258\nf 18259//18259 18260//18260 18261//18261\nf 18262//18262 18263//18263 18264//18264\nf 18265//18265 18266//18266 18267//18267\nf 18268//18268 18269//18269 18270//18270\nf 18271//18271 18272//18272 18273//18273\nf 18274//18274 18275//18275 18276//18276\nf 18277//18277 18278//18278 18279//18279\nf 18280//18280 18281//18281 18282//18282\nf 18283//18283 18284//18284 18285//18285\nf 18286//18286 18287//18287 18288//18288\nf 18289//18289 18290//18290 18291//18291\nf 18292//18292 18293//18293 18294//18294\nf 18295//18295 18296//18296 18297//18297\nf 18298//18298 18299//18299 18300//18300\nf 18301//18301 18302//18302 18303//18303\nf 18304//18304 18305//18305 18306//18306\nf 18307//18307 18308//18308 18309//18309\nf 18310//18310 18311//18311 18312//18312\nf 18313//18313 18314//18314 18315//18315\nf 18316//18316 18317//18317 18318//18318\nf 18319//18319 18320//18320 18321//18321\nf 18322//18322 18323//18323 18324//18324\nf 18325//18325 18326//18326 18327//18327\nf 18328//18328 18329//18329 18330//18330\nf 18331//18331 18332//18332 18333//18333\nf 18334//18334 18335//18335 18336//18336\nf 18337//18337 18338//18338 18339//18339\nf 18340//18340 18341//18341 18342//18342\nf 18343//18343 18344//18344 18345//18345\nf 18346//18346 18347//18347 18348//18348\nf 18349//18349 18350//18350 18351//18351\nf 18352//18352 18353//18353 18354//18354\nf 18355//18355 18356//18356 18357//18357\nf 18358//18358 18359//18359 18360//18360\nf 18361//18361 18362//18362 18363//18363\nf 18364//18364 18365//18365 18366//18366\nf 18367//18367 18368//18368 18369//18369\nf 18370//18370 18371//18371 18372//18372\nf 18373//18373 18374//18374 18375//18375\nf 18376//18376 18377//18377 18378//18378\nf 18379//18379 18380//18380 18381//18381\nf 18382//18382 18383//18383 18384//18384\nf 18385//18385 18386//18386 18387//18387\nf 18388//18388 18389//18389 18390//18390\nf 18391//18391 18392//18392 18393//18393\nf 18394//18394 18395//18395 18396//18396\nf 18397//18397 18398//18398 18399//18399\nf 18400//18400 18401//18401 18402//18402\nf 18403//18403 18404//18404 18405//18405\nf 18406//18406 18407//18407 18408//18408\nf 18409//18409 18410//18410 18411//18411\nf 18412//18412 18413//18413 18414//18414\nf 18415//18415 18416//18416 18417//18417\nf 18418//18418 18419//18419 18420//18420\nf 18421//18421 18422//18422 18423//18423\nf 18424//18424 18425//18425 18426//18426\nf 18427//18427 18428//18428 18429//18429\nf 18430//18430 18431//18431 18432//18432\nf 18433//18433 18434//18434 18435//18435\nf 18436//18436 18437//18437 18438//18438\nf 18439//18439 18440//18440 18441//18441\nf 18442//18442 18443//18443 18444//18444\nf 18445//18445 18446//18446 18447//18447\nf 18448//18448 18449//18449 18450//18450\nf 18451//18451 18452//18452 18453//18453\nf 18454//18454 18455//18455 18456//18456\nf 18457//18457 18458//18458 18459//18459\nf 18460//18460 18461//18461 18462//18462\nf 18463//18463 18464//18464 18465//18465\nf 18466//18466 18467//18467 18468//18468\nf 18469//18469 18470//18470 18471//18471\nf 18472//18472 18473//18473 18474//18474\nf 18475//18475 18476//18476 18477//18477\nf 18478//18478 18479//18479 18480//18480\nf 18481//18481 18482//18482 18483//18483\nf 18484//18484 18485//18485 18486//18486\nf 18487//18487 18488//18488 18489//18489\nf 18490//18490 18491//18491 18492//18492\nf 18493//18493 18494//18494 18495//18495\nf 18496//18496 18497//18497 18498//18498\nf 18499//18499 18500//18500 18501//18501\nf 18502//18502 18503//18503 18504//18504\nf 18505//18505 18506//18506 18507//18507\nf 18508//18508 18509//18509 18510//18510\nf 18511//18511 18512//18512 18513//18513\nf 18514//18514 18515//18515 18516//18516\nf 18517//18517 18518//18518 18519//18519\nf 18520//18520 18521//18521 18522//18522\nf 18523//18523 18524//18524 18525//18525\nf 18526//18526 18518//18518 18517//18517\nf 18527//18527 18528//18528 18529//18529\nf 18530//18530 18531//18531 18532//18532\nf 18533//18533 18534//18534 18535//18535\nf 18536//18536 18537//18537 18538//18538\nf 18539//18539 18540//18540 18541//18541\nf 18542//18542 18543//18543 18544//18544\nf 18545//18545 18546//18546 18547//18547\nf 18548//18548 18549//18549 18550//18550\nf 18551//18551 18552//18552 18553//18553\nf 18554//18554 18555//18555 18556//18556\nf 18557//18557 18558//18558 18559//18559\nf 18560//18560 18561//18561 18562//18562\nf 18563//18563 18504//18504 18503//18503\nf 18564//18564 18565//18565 18566//18566\nf 18567//18567 18568//18568 18569//18569\nf 18570//18570 18571//18571 18572//18572\nf 18573//18573 18574//18574 18575//18575\nf 18576//18576 18577//18577 18578//18578\nf 18579//18579 18580//18580 18581//18581\nf 18582//18582 18583//18583 18584//18584\nf 18585//18585 18586//18586 18587//18587\nf 18588//18588 18589//18589 18590//18590\nf 18591//18591 18592//18592 18593//18593\nf 18594//18594 18595//18595 18596//18596\nf 18597//18597 18598//18598 18599//18599\nf 18600//18600 18601//18601 18602//18602\nf 18603//18603 18604//18604 18605//18605\nf 18606//18606 18607//18607 18608//18608\nf 18609//18609 18610//18610 18611//18611\nf 18612//18612 18613//18613 18614//18614\nf 18615//18615 18616//18616 18617//18617\nf 18618//18618 18619//18619 18620//18620\nf 18621//18621 18622//18622 18623//18623\nf 18624//18624 18625//18625 18626//18626\nf 18627//18627 18628//18628 18629//18629\nf 18630//18630 18631//18631 18632//18632\nf 18633//18633 18634//18634 18635//18635\nf 18636//18636 18637//18637 18638//18638\nf 18639//18639 18640//18640 18641//18641\nf 18586//18586 18642//18642 18587//18587\nf 18643//18643 18644//18644 18645//18645\nf 18646//18646 18647//18647 18648//18648\nf 18649//18649 18650//18650 18651//18651\nf 18652//18652 18653//18653 18654//18654\nf 18655//18655 18656//18656 18657//18657\nf 18658//18658 18659//18659 18660//18660\nf 18661//18661 18662//18662 18663//18663\nf 18664//18664 18665//18665 18666//18666\nf 18667//18667 18668//18668 18669//18669\nf 18670//18670 18671//18671 18672//18672\nf 18673//18673 18674//18674 18675//18675\nf 18676//18676 18677//18677 18678//18678\nf 18678//18678 18677//18677 18679//18679\nf 18680//18680 18681//18681 18682//18682\nf 18683//18683 18684//18684 18685//18685\nf 18686//18686 18687//18687 18688//18688\nf 18689//18689 18690//18690 18691//18691\nf 18692//18692 18693//18693 18694//18694\nf 18695//18695 18696//18696 18697//18697\nf 18698//18698 18699//18699 18700//18700\nf 18701//18701 18702//18702 18703//18703\nf 18704//18704 18705//18705 18706//18706\nf 18707//18707 18708//18708 18709//18709\nf 18710//18710 18711//18711 18712//18712\nf 18713//18713 18714//18714 18715//18715\nf 18716//18716 18717//18717 18718//18718\nf 18719//18719 18720//18720 18721//18721\nf 18722//18722 18723//18723 18724//18724\nf 18725//18725 18726//18726 18727//18727\nf 18728//18728 18729//18729 18730//18730\nf 18731//18731 18732//18732 18733//18733\nf 18734//18734 18735//18735 18736//18736\nf 18737//18737 18738//18738 18739//18739\nf 18740//18740 18741//18741 18742//18742\nf 18743//18743 18744//18744 18745//18745\nf 18746//18746 18747//18747 18748//18748\nf 18749//18749 18750//18750 18751//18751\nf 18752//18752 18753//18753 18754//18754\nf 18755//18755 18756//18756 18757//18757\nf 18758//18758 18759//18759 18760//18760\nf 18761//18761 18762//18762 18763//18763\nf 18764//18764 18765//18765 18766//18766\nf 18767//18767 18768//18768 18769//18769\nf 18770//18770 18771//18771 18772//18772\nf 18773//18773 18774//18774 18775//18775\nf 18776//18776 18777//18777 18778//18778\nf 18779//18779 18780//18780 18781//18781\nf 18782//18782 18770//18770 18772//18772\nf 18783//18783 18770//18770 18782//18782\nf 18784//18784 18785//18785 18786//18786\nf 18787//18787 18788//18788 18789//18789\nf 18790//18790 18791//18791 18792//18792\nf 18793//18793 18794//18794 18795//18795\nf 18796//18796 18797//18797 18798//18798\nf 18799//18799 18800//18800 18801//18801\nf 18802//18802 18803//18803 18804//18804\nf 18805//18805 18806//18806 18807//18807\nf 18808//18808 18809//18809 18810//18810\nf 18811//18811 18812//18812 18813//18813\nf 18814//18814 18815//18815 18816//18816\nf 18814//18814 18816//18816 18817//18817\nf 18818//18818 18819//18819 18820//18820\nf 18821//18821 18822//18822 18823//18823\nf 18824//18824 18825//18825 18826//18826\nf 18827//18827 18828//18828 18829//18829\nf 18830//18830 18831//18831 18832//18832\nf 18833//18833 18834//18834 18835//18835\nf 18836//18836 18837//18837 18838//18838\nf 18839//18839 18840//18840 18841//18841\nf 18842//18842 18843//18843 18844//18844\nf 18845//18845 18846//18846 18847//18847\nf 18848//18848 18849//18849 18850//18850\nf 18851//18851 18852//18852 18853//18853\nf 18854//18854 18773//18773 18775//18775\nf 18855//18855 18856//18856 18857//18857\nf 18858//18858 18859//18859 18860//18860\nf 18861//18861 18862//18862 18863//18863\nf 18864//18864 18865//18865 18866//18866\nf 18867//18867 18868//18868 18869//18869\nf 18870//18870 18871//18871 18872//18872\nf 18873//18873 18874//18874 18875//18875\nf 18876//18876 18877//18877 18878//18878\nf 18879//18879 18880//18880 18881//18881\nf 18882//18882 18883//18883 18884//18884\nf 18885//18885 18886//18886 18887//18887\nf 18888//18888 18889//18889 18890//18890\nf 18891//18891 18892//18892 18893//18893\nf 18894//18894 18891//18891 18893//18893\nf 18895//18895 18896//18896 18897//18897\nf 18898//18898 18899//18899 18900//18900\nf 18901//18901 18902//18902 18903//18903\nf 18904//18904 18905//18905 18906//18906\nf 18907//18907 18908//18908 18909//18909\nf 18910//18910 18911//18911 18912//18912\nf 18913//18913 18914//18914 18915//18915\nf 18916//18916 18917//18917 18918//18918\nf 18919//18919 18920//18920 18921//18921\nf 18922//18922 18923//18923 18924//18924\nf 18925//18925 18926//18926 18927//18927\nf 18928//18928 18929//18929 18930//18930\nf 18931//18931 18932//18932 18933//18933\nf 18934//18934 18935//18935 18936//18936\nf 18937//18937 18938//18938 18939//18939\nf 18940//18940 18941//18941 18942//18942\nf 18943//18943 18944//18944 18945//18945\nf 18946//18946 18947//18947 18948//18948\nf 18949//18949 18950//18950 18951//18951\nf 18952//18952 18953//18953 18954//18954\nf 18955//18955 18956//18956 18957//18957\nf 18958//18958 18959//18959 18960//18960\nf 18961//18961 18962//18962 18963//18963\nf 18964//18964 18965//18965 18966//18966\nf 18967//18967 18964//18964 18966//18966\nf 18968//18968 18969//18969 18970//18970\nf 18971//18971 18972//18972 18973//18973\nf 18974//18974 18975//18975 18976//18976\nf 18977//18977 18978//18978 18979//18979\nf 18980//18980 18981//18981 18982//18982\nf 18983//18983 18984//18984 18985//18985\nf 18986//18986 18987//18987 18988//18988\nf 18989//18989 18990//18990 18991//18991\nf 18992//18992 18993//18993 18994//18994\nf 18995//18995 18996//18996 18997//18997\nf 18998//18998 18999//18999 19000//19000\nf 19001//19001 19002//19002 19003//19003\nf 19004//19004 19005//19005 19006//19006\nf 19007//19007 19008//19008 19009//19009\nf 19010//19010 19011//19011 19012//19012\nf 19013//19013 19014//19014 19015//19015\nf 19016//19016 19017//19017 19018//19018\nf 19019//19019 19020//19020 19021//19021\nf 19022//19022 19023//19023 19024//19024\nf 19025//19025 19026//19026 19027//19027\nf 19028//19028 19029//19029 19030//19030\nf 19031//19031 19032//19032 19033//19033\nf 19034//19034 19035//19035 19036//19036\nf 19037//19037 19038//19038 19039//19039\nf 19040//19040 19041//19041 19042//19042\nf 19043//19043 19044//19044 19045//19045\nf 19046//19046 19047//19047 19048//19048\nf 19049//19049 19050//19050 19051//19051\nf 19052//19052 19053//19053 19054//19054\nf 19055//19055 19056//19056 19057//19057\nf 19058//19058 19059//19059 19060//19060\nf 19061//19061 19062//19062 19063//19063\nf 19064//19064 19065//19065 19066//19066\nf 19067//19067 19068//19068 19069//19069\nf 19070//19070 19071//19071 19072//19072\nf 19073//19073 19074//19074 19075//19075\nf 19076//19076 19077//19077 19078//19078\nf 19079//19079 19080//19080 19081//19081\nf 19082//19082 19083//19083 19084//19084\nf 19085//19085 19086//19086 19087//19087\nf 19088//19088 19089//19089 19090//19090\nf 19091//19091 19092//19092 19093//19093\nf 19094//19094 19095//19095 19096//19096\nf 19097//19097 19098//19098 19099//19099\nf 19100//19100 19101//19101 19102//19102\nf 19103//19103 19104//19104 19105//19105\nf 19106//19106 19107//19107 19108//19108\nf 19109//19109 19100//19100 19102//19102\nf 19106//19106 19110//19110 19107//19107\nf 19111//19111 19112//19112 19113//19113\nf 19114//19114 19115//19115 19116//19116\nf 19111//19111 19117//19117 19112//19112\nf 19118//19118 19119//19119 19120//19120\nf 19121//19121 19122//19122 19123//19123\nf 19118//19118 19124//19124 19119//19119\nf 19125//19125 19126//19126 19127//19127\nf 19128//19128 19129//19129 19130//19130\nf 19131//19131 19132//19132 19133//19133\nf 19134//19134 19124//19124 19118//19118\nf 19135//19135 19125//19125 19127//19127\nf 19136//19136 19137//19137 19138//19138\nf 19139//19139 19140//19140 19141//19141\nf 19142//19142 19139//19139 19141//19141\nf 19143//19143 19144//19144 19145//19145\nf 19146//19146 19147//19147 19148//19148\nf 19149//19149 19150//19150 19151//19151\nf 19152//19152 19153//19153 19154//19154\nf 19155//19155 19144//19144 19143//19143\nf 19156//19156 19157//19157 19158//19158\nf 19159//19159 19160//19160 19161//19161\nf 19162//19162 19163//19163 19164//19164\nf 19165//19165 19166//19166 19167//19167\nf 19168//19168 19159//19159 19161//19161\nf 19169//19169 19170//19170 19171//19171\nf 19172//19172 19173//19173 19174//19174\nf 19175//19175 19176//19176 19177//19177\nf 19178//19178 19179//19179 19180//19180\nf 19181//19181 19182//19182 19183//19183\nf 19184//19184 19185//19185 19186//19186\nf 19187//19187 19179//19179 19178//19178\nf 19188//19188 19189//19189 19190//19190\nf 19191//19191 19192//19192 19193//19193\nf 19194//19194 19184//19184 19186//19186\nf 19194//19194 19186//19186 19195//19195\nf 19196//19196 19197//19197 19198//19198\nf 19199//19199 19200//19200 19201//19201\nf 19202//19202 19203//19203 19204//19204\nf 19205//19205 19206//19206 19207//19207\nf 19208//19208 19209//19209 19210//19210\nf 19211//19211 19212//19212 19213//19213\nf 19214//19214 19215//19215 19216//19216\nf 19217//19217 19218//19218 19219//19219\nf 19220//19220 19221//19221 19222//19222\nf 19223//19223 19224//19224 19225//19225\nf 19224//19224 19226//19226 19225//19225\nf 19227//19227 19228//19228 19229//19229\nf 19230//19230 19231//19231 19232//19232\nf 19233//19233 19234//19234 19235//19235\nf 19236//19236 19237//19237 19238//19238\nf 19239//19239 19240//19240 19241//19241\nf 19242//19242 19243//19243 19244//19244\nf 19245//19245 19246//19246 19247//19247\nf 19245//19245 19248//19248 19246//19246\nf 17059//17059 17058//17058 17064//17064\nf 19248//19248 19249//19249 19246//19246\nf 19250//19250 19251//19251 19252//19252\nf 19253//19253 19254//19254 19248//19248\nf 19248//19248 19254//19254 19249//19249\nf 19255//19255 19256//19256 19257//19257\nf 19258//19258 19259//19259 19260//19260\nf 17045//17045 17044//17044 17050//17050\nf 19261//19261 19262//19262 19263//19263\nf 19263//19263 19262//19262 19264//19264\nf 19265//19265 19266//19266 19267//19267\nf 19268//19268 19269//19269 19270//19270\nf 19261//19261 19271//19271 19262//19262\nf 19272//19272 19273//19273 19274//19274\nf 19275//19275 19276//19276 19277//19277\nf 19278//19278 19279//19279 19280//19280\nf 19281//19281 19282//19282 19283//19283\nf 19284//19284 19285//19285 19286//19286\nf 19287//19287 19288//19288 19289//19289\nf 19287//19287 19290//19290 19288//19288\nf 19291//19291 19292//19292 19293//19293\nf 19294//19294 19295//19295 19296//19296\nf 19297//19297 19298//19298 19299//19299\nf 19300//19300 19301//19301 19302//19302\nf 19303//19303 19304//19304 19305//19305\nf 19306//19306 19307//19307 19308//19308\nf 19309//19309 19310//19310 19311//19311\nf 19312//19312 19313//19313 19314//19314\nf 19315//19315 19316//19316 19317//19317\nf 19318//19318 19319//19319 19320//19320\nf 19321//19321 19322//19322 19323//19323\nf 19324//19324 19325//19325 19326//19326\nf 19327//19327 19328//19328 19329//19329\nf 19330//19330 19331//19331 19332//19332\nf 19333//19333 19334//19334 19335//19335\nf 19336//19336 19337//19337 19338//19338\nf 19339//19339 19340//19340 19341//19341\nf 19342//19342 19343//19343 19344//19344\nf 19345//19345 19346//19346 19347//19347\nf 19348//19348 19349//19349 19350//19350\nf 19351//19351 19352//19352 19353//19353\nf 19352//19352 19354//19354 19353//19353\nf 19355//19355 19356//19356 19357//19357\nf 19358//19358 19359//19359 19360//19360\nf 19361//19361 19362//19362 19363//19363\nf 19364//19364 19365//19365 19366//19366\nf 19367//19367 19368//19368 19369//19369\nf 19370//19370 19371//19371 19372//19372\nf 19373//19373 19374//19374 19375//19375\nf 19373//19373 19376//19376 19374//19374\nf 19377//19377 19378//19378 19379//19379\nf 19380//19380 19381//19381 19382//19382\nf 19383//19383 19384//19384 19385//19385\nf 19386//19386 19387//19387 19388//19388\nf 19389//19389 19390//19390 19391//19391\nf 19392//19392 19393//19393 19394//19394\nf 19395//19395 19396//19396 19397//19397\nf 19395//19395 19398//19398 19396//19396\nf 19399//19399 19400//19400 19401//19401\nf 19402//19402 19403//19403 19404//19404\nf 19405//19405 19406//19406 19407//19407\nf 19408//19408 19409//19409 19410//19410\nf 19411//19411 19412//19412 19413//19413\nf 19414//19414 19415//19415 19416//19416\nf 19417//19417 19418//19418 19419//19419\nf 19420//19420 19421//19421 19422//19422\nf 19423//19423 19424//19424 19425//19425\nf 19426//19426 19427//19427 19428//19428\nf 19429//19429 19430//19430 19431//19431\nf 19432//19432 19433//19433 19434//19434\nf 19435//19435 19436//19436 19437//19437\nf 19438//19438 19439//19439 19440//19440\nf 19441//19441 19442//19442 19443//19443\nf 19444//19444 19445//19445 19446//19446\nf 19446//19446 19445//19445 19447//19447\nf 19448//19448 19449//19449 19450//19450\nf 19451//19451 19452//19452 19453//19453\nf 19454//19454 19455//19455 19456//19456\nf 19457//19457 19458//19458 19459//19459\nf 19460//19460 19461//19461 19462//19462\nf 19463//19463 19464//19464 19465//19465\nf 19466//19466 19467//19467 19468//19468\nf 19466//19466 19469//19469 19467//19467\nf 19470//19470 19471//19471 19472//19472\nf 19473//19473 19474//19474 19475//19475\nf 19476//19476 19477//19477 19478//19478\nf 19479//19479 19480//19480 19481//19481\nf 19482//19482 19483//19483 19484//19484\nf 19485//19485 19486//19486 19487//19487\nf 19488//19488 19489//19489 19490//19490\nf 19491//19491 19492//19492 19493//19493\nf 19494//19494 19495//19495 19496//19496\nf 19497//19497 19498//19498 19499//19499\nf 19500//19500 19501//19501 19502//19502\nf 19503//19503 19504//19504 19505//19505\nf 19506//19506 19507//19507 19508//19508\nf 19509//19509 19510//19510 19511//19511\nf 19512//19512 19513//19513 19514//19514\nf 19515//19515 19516//19516 19517//19517\nf 19518//19518 19519//19519 19520//19520\nf 19521//19521 19522//19522 19523//19523\nf 19523//19523 19522//19522 19524//19524\nf 19525//19525 19526//19526 19527//19527\nf 19528//19528 19529//19529 19530//19530\nf 19531//19531 19532//19532 19533//19533\nf 19534//19534 19535//19535 19536//19536\nf 19537//19537 19538//19538 19539//19539\nf 19540//19540 19541//19541 19542//19542\nf 19543//19543 19544//19544 19545//19545\nf 19546//19546 19547//19547 19548//19548\nf 19549//19549 19550//19550 19551//19551\nf 19552//19552 19553//19553 19554//19554\nf 19555//19555 19556//19556 19557//19557\nf 19558//19558 19559//19559 19560//19560\nf 19561//19561 19562//19562 19563//19563\nf 19564//19564 19565//19565 19566//19566\nf 19567//19567 19568//19568 19569//19569\nf 19570//19570 19571//19571 19572//19572\nf 19573//19573 19574//19574 19575//19575\nf 19576//19576 19577//19577 19578//19578\nf 19579//19579 19580//19580 19581//19581\nf 19582//19582 19583//19583 19584//19584\nf 19585//19585 19586//19586 19587//19587\nf 19588//19588 19589//19589 19590//19590\nf 19591//19591 19592//19592 19593//19593\nf 19594//19594 19595//19595 19596//19596\nf 19597//19597 19598//19598 19599//19599\nf 19600//19600 19601//19601 19602//19602\nf 19603//19603 19604//19604 19605//19605\nf 19606//19606 19607//19607 19608//19608\nf 19609//19609 19610//19610 19611//19611\nf 19612//19612 19613//19613 19614//19614\nf 19615//19615 19616//19616 19617//19617\nf 19618//19618 19619//19619 19620//19620\nf 19621//19621 19622//19622 19623//19623\nf 19624//19624 19625//19625 19626//19626\nf 19627//19627 19628//19628 19629//19629\nf 19630//19630 19631//19631 19632//19632\nf 19633//19633 19634//19634 19635//19635\nf 19636//19636 19637//19637 19638//19638\nf 19639//19639 19640//19640 19641//19641\nf 19642//19642 19643//19643 19644//19644\nf 19645//19645 19646//19646 19647//19647\nf 19648//19648 19649//19649 19650//19650\nf 19651//19651 19652//19652 19653//19653\nf 19654//19654 19655//19655 19656//19656\nf 19657//19657 19658//19658 19659//19659\nf 19660//19660 19661//19661 19662//19662\nf 19663//19663 19664//19664 19665//19665\nf 19666//19666 19667//19667 19668//19668\nf 19669//19669 19670//19670 19671//19671\nf 19672//19672 19673//19673 19674//19674\nf 19675//19675 19676//19676 19677//19677\nf 19678//19678 19679//19679 19680//19680\nf 19681//19681 19682//19682 19683//19683\nf 19684//19684 19685//19685 19686//19686\nf 19687//19687 19688//19688 19689//19689\nf 19690//19690 19691//19691 19692//19692\nf 19693//19693 19694//19694 19695//19695\nf 19689//19689 19688//19688 19696//19696\nf 19697//19697 19698//19698 19699//19699\nf 19700//19700 19701//19701 19702//19702\nf 19703//19703 19704//19704 19705//19705\nf 19706//19706 19707//19707 19708//19708\nf 19709//19709 19710//19710 19711//19711\nf 19712//19712 19713//19713 19714//19714\nf 19715//19715 19716//19716 19717//19717\nf 19718//19718 19719//19719 19720//19720\nf 19721//19721 19722//19722 19723//19723\nf 19724//19724 19725//19725 19726//19726\nf 19727//19727 19728//19728 19729//19729\nf 19730//19730 19731//19731 19732//19732\nf 19733//19733 19734//19734 19735//19735\nf 19736//19736 19737//19737 19738//19738\nf 19739//19739 19740//19740 19741//19741\nf 19742//19742 19743//19743 19744//19744\nf 19745//19745 19746//19746 19747//19747\nf 19748//19748 19749//19749 19750//19750\nf 19751//19751 19752//19752 19753//19753\nf 19754//19754 19755//19755 19756//19756\nf 19757//19757 19758//19758 19759//19759\nf 19760//19760 19761//19761 19762//19762\nf 19763//19763 19764//19764 19765//19765\nf 19766//19766 19767//19767 19768//19768\nf 19769//19769 19770//19770 19771//19771\nf 19772//19772 19773//19773 19774//19774\nf 19775//19775 19776//19776 19777//19777\nf 19778//19778 19776//19776 19775//19775\nf 19779//19779 19780//19780 19781//19781\nf 19782//19782 19783//19783 19784//19784\nf 19785//19785 19786//19786 19787//19787\nf 19788//19788 19789//19789 19790//19790\nf 19791//19791 19792//19792 19793//19793\nf 19794//19794 19795//19795 19796//19796\nf 19797//19797 19798//19798 19799//19799\nf 19800//19800 19801//19801 19802//19802\nf 19803//19803 19804//19804 19805//19805\nf 19806//19806 19807//19807 19808//19808\nf 19809//19809 19810//19810 19811//19811\nf 19812//19812 19813//19813 19814//19814\nf 19815//19815 19816//19816 19817//19817\nf 19818//19818 19819//19819 19820//19820\nf 19821//19821 19822//19822 19823//19823\nf 19824//19824 19825//19825 19826//19826\nf 19827//19827 19828//19828 19829//19829\nf 19830//19830 19831//19831 19832//19832\nf 19833//19833 19834//19834 19835//19835\nf 19836//19836 19837//19837 19838//19838\nf 19839//19839 19840//19840 19841//19841\nf 19842//19842 19843//19843 19844//19844\nf 19845//19845 19846//19846 19847//19847\nf 19848//19848 19849//19849 19850//19850\nf 19851//19851 19852//19852 19853//19853\nf 19854//19854 19855//19855 19856//19856\nf 19857//19857 19858//19858 19859//19859\nf 19860//19860 19861//19861 19862//19862\nf 19863//19863 19864//19864 19865//19865\nf 19866//19866 19867//19867 19868//19868\nf 19869//19869 19870//19870 19871//19871\nf 19872//19872 19873//19873 19874//19874\nf 19875//19875 19876//19876 19877//19877\nf 19878//19878 19879//19879 19880//19880\nf 19881//19881 19882//19882 19883//19883\nf 19884//19884 19885//19885 19886//19886\nf 19887//19887 19888//19888 19889//19889\nf 19890//19890 19891//19891 19892//19892\nf 19893//19893 19894//19894 19895//19895\nf 19896//19896 19897//19897 19898//19898\nf 19899//19899 19900//19900 19901//19901\nf 19902//19902 19903//19903 19904//19904\nf 19905//19905 19906//19906 19907//19907\nf 19908//19908 19909//19909 19910//19910\nf 19911//19911 19912//19912 19913//19913\nf 19914//19914 19915//19915 19916//19916\nf 19917//19917 19918//19918 19919//19919\nf 19920//19920 19921//19921 19922//19922\nf 19923//19923 19924//19924 19925//19925\nf 19926//19926 19927//19927 19928//19928\nf 19929//19929 19930//19930 19931//19931\nf 19932//19932 19933//19933 19934//19934\nf 19935//19935 19936//19936 19937//19937\nf 19938//19938 19939//19939 19940//19940\nf 19941//19941 19942//19942 19943//19943\nf 19944//19944 19945//19945 19946//19946\nf 19947//19947 19948//19948 19949//19949\nf 19948//19948 19950//19950 19949//19949\nf 19951//19951 19952//19952 19953//19953\nf 19954//19954 19955//19955 19956//19956\nf 19957//19957 19958//19958 19959//19959\nf 19960//19960 19961//19961 19962//19962\nf 19963//19963 19964//19964 19965//19965\nf 19966//19966 19967//19967 19968//19968\nf 19969//19969 19970//19970 19971//19971\nf 19972//19972 19973//19973 19974//19974\nf 19975//19975 19976//19976 19977//19977\nf 19978//19978 19979//19979 19980//19980\nf 19981//19981 19982//19982 19983//19983\nf 19984//19984 19985//19985 19986//19986\nf 19987//19987 19988//19988 19989//19989\nf 19990//19990 19991//19991 19992//19992\nf 19993//19993 19990//19990 19992//19992\nf 19994//19994 19975//19975 19977//19977\nf 19995//19995 19990//19990 19993//19993\nf 19996//19996 19997//19997 19998//19998\nf 19999//19999 19995//19995 19993//19993\nf 20000//20000 20001//20001 20002//20002\nf 20000//20000 20003//20003 20001//20001\nf 20004//20004 20005//20005 20006//20006\nf 20007//20007 20008//20008 20009//20009\nf 20010//20010 20000//20000 20002//20002\nf 20011//20011 20012//20012 20013//20013\nf 20014//20014 20015//20015 20016//20016\nf 20017//20017 20018//20018 20019//20019\nf 20020//20020 20021//20021 20022//20022\nf 20023//20023 20024//20024 20025//20025\nf 20026//20026 20027//20027 20028//20028\nf 20029//20029 20030//20030 20031//20031\nf 20032//20032 20033//20033 20034//20034\nf 20035//20035 20036//20036 20037//20037\nf 20038//20038 20039//20039 20040//20040\nf 20041//20041 20042//20042 20043//20043\nf 20044//20044 20045//20045 20046//20046\nf 20047//20047 20048//20048 20049//20049\nf 20050//20050 20051//20051 20052//20052\nf 20053//20053 20054//20054 20055//20055\nf 20056//20056 20057//20057 20058//20058\nf 20059//20059 20060//20060 20061//20061\nf 20062//20062 20063//20063 20064//20064\nf 20065//20065 20066//20066 20067//20067\nf 20068//20068 20069//20069 20070//20070\nf 20071//20071 20072//20072 20073//20073\nf 20074//20074 20075//20075 20076//20076\nf 20077//20077 20078//20078 20079//20079\nf 20080//20080 20081//20081 20082//20082\nf 20083//20083 20084//20084 20085//20085\nf 20086//20086 20087//20087 20088//20088\nf 20089//20089 20090//20090 20091//20091\nf 20092//20092 20093//20093 20094//20094\nf 20095//20095 20096//20096 20097//20097\nf 20098//20098 20099//20099 20100//20100\nf 20101//20101 20102//20102 20103//20103\nf 20104//20104 20105//20105 20106//20106\nf 20107//20107 20108//20108 20109//20109\nf 20110//20110 20111//20111 20112//20112\nf 20113//20113 20114//20114 20115//20115\nf 20116//20116 20117//20117 20118//20118\nf 20119//20119 20120//20120 20121//20121\nf 20122//20122 20123//20123 20124//20124\nf 20125//20125 20126//20126 20127//20127\nf 20128//20128 20129//20129 20130//20130\nf 20131//20131 20132//20132 20133//20133\nf 20134//20134 20135//20135 20136//20136\nf 20137//20137 20138//20138 20139//20139\nf 20140//20140 20141//20141 20142//20142\nf 20143//20143 20144//20144 20145//20145\nf 20146//20146 20147//20147 20148//20148\nf 20149//20149 20150//20150 20151//20151\nf 20152//20152 20153//20153 20154//20154\nf 20155//20155 20156//20156 20157//20157\nf 20158//20158 20159//20159 20160//20160\nf 20161//20161 20162//20162 20163//20163\nf 20164//20164 20165//20165 20166//20166\nf 20167//20167 20168//20168 20169//20169\nf 20170//20170 20171//20171 20172//20172\nf 20173//20173 20174//20174 20175//20175\nf 20176//20176 20177//20177 20178//20178\nf 20179//20179 20180//20180 20181//20181\nf 20182//20182 20183//20183 20184//20184\nf 20185//20185 20186//20186 20187//20187\nf 20188//20188 20189//20189 20190//20190\nf 20191//20191 20192//20192 20193//20193\nf 20194//20194 20195//20195 20196//20196\nf 20197//20197 20198//20198 20199//20199\nf 20200//20200 20201//20201 20202//20202\nf 20203//20203 20204//20204 20205//20205\nf 20206//20206 20207//20207 20208//20208\nf 20209//20209 20210//20210 20211//20211\nf 20212//20212 20213//20213 20214//20214\nf 20215//20215 20216//20216 20217//20217\nf 20218//20218 20219//20219 20220//20220\nf 20221//20221 20222//20222 20223//20223\nf 20224//20224 20225//20225 20226//20226\nf 20227//20227 20228//20228 20229//20229\nf 20230//20230 20231//20231 20232//20232\nf 20233//20233 20234//20234 20235//20235\nf 20236//20236 20237//20237 20238//20238\nf 20239//20239 20236//20236 20238//20238\nf 20240//20240 20241//20241 20242//20242\nf 20243//20243 20236//20236 20239//20239\nf 20244//20244 20245//20245 20246//20246\nf 20247//20247 20248//20248 20249//20249\nf 20250//20250 20251//20251 20252//20252\nf 20253//20253 20254//20254 20255//20255\nf 20247//20247 20249//20249 20256//20256\nf 20257//20257 20258//20258 20259//20259\nf 20260//20260 20261//20261 20262//20262\nf 20263//20263 20260//20260 20262//20262\nf 20264//20264 20265//20265 20266//20266\nf 20267//20267 20268//20268 20269//20269\nf 20270//20270 20271//20271 20272//20272\nf 20273//20273 20274//20274 20275//20275\nf 20276//20276 20270//20270 20272//20272\nf 20277//20277 20270//20270 20276//20276\nf 20278//20278 20279//20279 20280//20280\nf 20281//20281 20279//20279 20278//20278\nf 20282//20282 20279//20279 20281//20281\nf 20283//20283 20284//20284 20285//20285\nf 20286//20286 20287//20287 20288//20288\nf 20289//20289 20290//20290 20291//20291\nf 20292//20292 20293//20293 20294//20294\nf 20295//20295 20296//20296 20297//20297\nf 20298//20298 20299//20299 20300//20300\nf 20301//20301 20302//20302 20303//20303\nf 20304//20304 20305//20305 20306//20306\nf 20307//20307 20308//20308 20309//20309\nf 20310//20310 20311//20311 20312//20312\nf 20308//20308 20313//20313 20309//20309\nf 20314//20314 20315//20315 20316//20316\nf 20317//20317 20318//20318 20319//20319\nf 20320//20320 20321//20321 20322//20322\nf 20323//20323 20324//20324 20325//20325\nf 20326//20326 20327//20327 20328//20328\nf 20329//20329 20330//20330 20331//20331\nf 20332//20332 20333//20333 20334//20334\nf 20335//20335 20336//20336 20337//20337\nf 20338//20338 20327//20327 20326//20326\nf 20339//20339 20340//20340 20341//20341\nf 20342//20342 20343//20343 20344//20344\nf 20345//20345 20340//20340 20339//20339\nf 20346//20346 20347//20347 20348//20348\nf 20349//20349 20350//20350 20351//20351\nf 20352//20352 20353//20353 20354//20354\nf 20355//20355 20356//20356 20357//20357\nf 20358//20358 20359//20359 20360//20360\nf 20361//20361 20362//20362 20363//20363\nf 20364//20364 20365//20365 20366//20366\nf 20367//20367 20368//20368 20369//20369\nf 20370//20370 20371//20371 20372//20372\nf 20373//20373 20374//20374 20375//20375\nf 20376//20376 20377//20377 20378//20378\nf 20379//20379 20380//20380 20381//20381\nf 20382//20382 20383//20383 20384//20384\nf 20385//20385 20386//20386 20387//20387\nf 20388//20388 20389//20389 20390//20390\nf 20391//20391 20392//20392 20393//20393\nf 20394//20394 20395//20395 20396//20396\nf 20397//20397 20398//20398 20399//20399\nf 20400//20400 20401//20401 20402//20402\nf 20403//20403 20404//20404 20405//20405\nf 20406//20406 20407//20407 20408//20408\nf 20409//20409 20410//20410 20411//20411\nf 20412//20412 20413//20413 20414//20414\nf 20415//20415 20416//20416 20417//20417\nf 20418//20418 20419//20419 20420//20420\nf 20421//20421 20422//20422 20423//20423\nf 20424//20424 20425//20425 20426//20426\nf 20427//20427 20428//20428 20429//20429\nf 20430//20430 20431//20431 20432//20432\nf 20433//20433 20434//20434 20435//20435\nf 20436//20436 20437//20437 20438//20438\nf 20439//20439 20440//20440 20441//20441\nf 20442//20442 20443//20443 20444//20444\nf 20445//20445 20446//20446 20447//20447\nf 20448//20448 20449//20449 20450//20450\nf 20451//20451 20452//20452 20453//20453\nf 20454//20454 20455//20455 20456//20456\nf 20457//20457 20458//20458 20459//20459\nf 20460//20460 20458//20458 20457//20457\nf 20461//20461 20462//20462 20463//20463\nf 20464//20464 20465//20465 20466//20466\nf 20467//20467 20468//20468 20469//20469\nf 20470//20470 20471//20471 20472//20472\nf 20473//20473 20474//20474 20475//20475\nf 20476//20476 20477//20477 20478//20478\nf 20479//20479 20480//20480 20481//20481\nf 20482//20482 20480//20480 20479//20479\nf 20483//20483 20484//20484 20485//20485\nf 20486//20486 20487//20487 20488//20488\nf 20489//20489 20490//20490 20491//20491\nf 20492//20492 20493//20493 20494//20494\nf 20495//20495 20496//20496 20497//20497\nf 20498//20498 20499//20499 20500//20500\nf 20501//20501 20502//20502 20503//20503\nf 20504//20504 20505//20505 20506//20506\nf 20507//20507 20508//20508 20509//20509\nf 20510//20510 20511//20511 20512//20512\nf 20513//20513 20514//20514 20515//20515\nf 20516//20516 20517//20517 20518//20518\nf 20519//20519 20520//20520 20521//20521\nf 20522//20522 20523//20523 20524//20524\nf 20525//20525 20526//20526 20527//20527\nf 20528//20528 20529//20529 20530//20530\nf 20531//20531 20532//20532 20533//20533\nf 20534//20534 20535//20535 20536//20536\nf 20537//20537 20538//20538 20539//20539\nf 20540//20540 20541//20541 20542//20542\nf 20543//20543 20544//20544 20545//20545\nf 20546//20546 20547//20547 20548//20548\nf 20549//20549 20550//20550 20551//20551\nf 20552//20552 20553//20553 20554//20554\nf 20555//20555 20556//20556 20557//20557\nf 20558//20558 20559//20559 20560//20560\nf 20561//20561 20562//20562 20563//20563\nf 20564//20564 20565//20565 20566//20566\nf 20567//20567 20568//20568 20569//20569\nf 20570//20570 20571//20571 20572//20572\nf 20573//20573 20574//20574 20575//20575\nf 20576//20576 20577//20577 20578//20578\nf 20579//20579 20580//20580 20581//20581\nf 20571//20571 20582//20582 20572//20572\nf 20583//20583 20584//20584 20585//20585\nf 20586//20586 20580//20580 20579//20579\nf 20587//20587 20588//20588 20589//20589\nf 20589//20589 20588//20588 20590//20590\nf 20591//20591 20592//20592 20593//20593\nf 20594//20594 20595//20595 20596//20596\nf 20597//20597 20598//20598 20599//20599\nf 20600//20600 20601//20601 20602//20602\nf 20592//20592 20603//20603 20593//20593\nf 20604//20604 20605//20605 20606//20606\nf 20607//20607 20605//20605 20604//20604\nf 20582//20582 20608//20608 20572//20572\nf 20587//20587 20609//20609 20588//20588\nf 20595//20595 20610//20610 20596//20596\nf 20601//20601 20609//20609 20602//20602\nf 20602//20602 20609//20609 20587//20587\nf 20610//20610 20611//20611 20596//20596\nf 20612//20612 20613//20613 20614//20614\nf 20601//20601 20615//20615 20609//20609\nf 20616//20616 20617//20617 20618//20618\nf 20619//20619 20620//20620 20621//20621\nf 20597//20597 20622//20622 20598//20598\nf 20623//20623 20624//20624 20625//20625\nf 20626//20626 20627//20627 20628//20628\nf 20629//20629 20630//20630 20631//20631\nf 20632//20632 20633//20633 20634//20634\nf 20606//20606 20635//20635 20636//20636\nf 20605//20605 20635//20635 20606//20606\nf 20637//20637 20638//20638 20639//20639\nf 20640//20640 20641//20641 20642//20642\nf 20643//20643 20641//20641 20640//20640\nf 20644//20644 20645//20645 20646//20646\nf 20647//20647 20648//20648 20649//20649\nf 20622//20622 20650//20650 20598//20598\nf 20598//20598 20641//20641 20643//20643\nf 20598//20598 20650//20650 20641//20641\nf 20651//20651 20652//20652 20653//20653\nf 20654//20654 20655//20655 20656//20656\nf 20657//20657 20658//20658 20659//20659\nf 20660//20660 20658//20658 20657//20657\nf 20651//20651 20661//20661 20652//20652\nf 20662//20662 20663//20663 20664//20664\nf 20657//20657 20602//20602 20660//20660\nf 20600//20600 20602//20602 20657//20657\nf 20570//20570 20568//20568 20571//20571\nf 20569//20569 20568//20568 20570//20570\nf 20665//20665 20666//20666 20667//20667\nf 20668//20668 20669//20669 20670//20670\nf 20671//20671 20672//20672 20673//20673\nf 20674//20674 20675//20675 20676//20676\nf 20677//20677 20678//20678 20679//20679\nf 20680//20680 20681//20681 20682//20682\nf 20683//20683 20684//20684 20685//20685\nf 20686//20686 20687//20687 20688//20688\nf 20689//20689 20690//20690 20691//20691\nf 20692//20692 20693//20693 20694//20694\nf 20695//20695 20696//20696 20697//20697\nf 20698//20698 20699//20699 20700//20700\nf 20701//20701 20702//20702 20703//20703\nf 20704//20704 20705//20705 20706//20706\nf 20707//20707 20708//20708 20709//20709\nf 20710//20710 20711//20711 20712//20712\nf 20713//20713 20714//20714 20715//20715\nf 20716//20716 20717//20717 20718//20718\nf 20719//20719 20720//20720 20721//20721\nf 20722//20722 20723//20723 20724//20724\nf 20725//20725 20726//20726 20727//20727\nf 20728//20728 20729//20729 20730//20730\nf 20731//20731 20732//20732 20733//20733\nf 20734//20734 20735//20735 20736//20736\nf 20737//20737 20738//20738 20739//20739\nf 20740//20740 20741//20741 20742//20742\nf 20743//20743 20744//20744 20745//20745\nf 20746//20746 20747//20747 20748//20748\nf 20749//20749 20750//20750 20751//20751\nf 20752//20752 20753//20753 20754//20754\nf 20755//20755 20756//20756 20757//20757\nf 20758//20758 20759//20759 20760//20760\nf 20761//20761 20762//20762 20763//20763\nf 20764//20764 20765//20765 20766//20766\nf 20767//20767 20768//20768 20769//20769\nf 20770//20770 20771//20771 20772//20772\nf 20773//20773 20774//20774 20775//20775\nf 20775//20775 20774//20774 20776//20776\nf 20777//20777 20778//20778 20779//20779\nf 20780//20780 20781//20781 20782//20782\nf 20783//20783 20784//20784 20785//20785\nf 20786//20786 20787//20787 20788//20788\nf 20789//20789 20790//20790 20791//20791\nf 20792//20792 20793//20793 20794//20794\nf 20795//20795 20796//20796 20797//20797\nf 20797//20797 20796//20796 20798//20798\nf 20799//20799 20800//20800 20801//20801\nf 20802//20802 20803//20803 20804//20804\nf 20805//20805 20806//20806 20807//20807\nf 20808//20808 20809//20809 20810//20810\nf 20811//20811 20812//20812 20813//20813\nf 20814//20814 20815//20815 20816//20816\nf 20817//20817 20818//20818 20819//20819\nf 20817//20817 20820//20820 20818//20818\nf 20821//20821 20822//20822 20823//20823\nf 20824//20824 20825//20825 20826//20826\nf 20827//20827 20828//20828 20829//20829\nf 20827//20827 20830//20830 20828//20828\nf 20831//20831 20832//20832 20833//20833\nf 20834//20834 20835//20835 20836//20836\nf 20837//20837 20838//20838 20839//20839\nf 20840//20840 20841//20841 20842//20842\nf 20843//20843 20844//20844 20845//20845\nf 20846//20846 20847//20847 20848//20848\nf 20849//20849 20850//20850 20851//20851\nf 20852//20852 20853//20853 20854//20854\nf 20855//20855 20856//20856 20857//20857\nf 20858//20858 20859//20859 20860//20860\nf 20861//20861 20862//20862 20863//20863\nf 20864//20864 20865//20865 20866//20866\nf 20867//20867 20868//20868 20869//20869\nf 20870//20870 20871//20871 20872//20872\nf 20873//20873 20874//20874 20875//20875\nf 20876//20876 20877//20877 20878//20878\nf 20879//20879 20880//20880 20881//20881\nf 20882//20882 20883//20883 20884//20884\nf 20885//20885 20886//20886 20887//20887\nf 20888//20888 20889//20889 20890//20890\nf 20888//20888 20891//20891 20889//20889\nf 20892//20892 20893//20893 20894//20894\nf 20887//20887 20895//20895 20896//20896\nf 20887//20887 20897//20897 20895//20895\nf 20898//20898 20899//20899 20900//20900\nf 20901//20901 20902//20902 20903//20903\nf 20904//20904 20905//20905 20906//20906\nf 20907//20907 20908//20908 20909//20909\nf 20910//20910 20911//20911 20912//20912\nf 20913//20913 20914//20914 20915//20915\nf 20916//20916 20917//20917 20885//20885\nf 20916//20916 20885//20885 20918//20918\nf 20919//20919 20920//20920 20921//20921\nf 20922//20922 20923//20923 20924//20924\nf 20925//20925 20926//20926 20927//20927\nf 20928//20928 20929//20929 20930//20930\nf 20931//20931 20932//20932 20933//20933\nf 20934//20934 20935//20935 20936//20936\nf 20937//20937 20938//20938 20939//20939\nf 20940//20940 20941//20941 20942//20942\nf 20943//20943 20944//20944 20945//20945\nf 20946//20946 20947//20947 20948//20948\nf 20949//20949 20950//20950 20951//20951\nf 20952//20952 20953//20953 20954//20954\nf 20955//20955 20956//20956 20957//20957\nf 20958//20958 20959//20959 20960//20960\nf 20961//20961 20962//20962 20963//20963\nf 20964//20964 20965//20965 20966//20966\nf 20967//20967 20968//20968 20969//20969\nf 20970//20970 20971//20971 20972//20972\nf 20973//20973 20974//20974 20975//20975\nf 20976//20976 20977//20977 20978//20978\nf 20979//20979 20980//20980 20981//20981\nf 20982//20982 20983//20983 20984//20984\nf 20985//20985 20986//20986 20987//20987\nf 20988//20988 20989//20989 20990//20990\nf 20991//20991 20992//20992 20993//20993\nf 20994//20994 20995//20995 20996//20996\nf 20997//20997 20998//20998 20999//20999\nf 21000//21000 21001//21001 21002//21002\nf 21003//21003 21004//21004 21005//21005\nf 21006//21006 21007//21007 21008//21008\nf 21009//21009 21010//21010 21011//21011\nf 21012//21012 21013//21013 21014//21014\nf 21015//21015 21016//21016 21017//21017\nf 21018//21018 21019//21019 21020//21020\nf 21021//21021 21022//21022 21023//21023\nf 21024//21024 21025//21025 21026//21026\nf 21027//21027 21028//21028 21029//21029\nf 21030//21030 21031//21031 21032//21032\nf 21033//21033 21034//21034 21035//21035\nf 21036//21036 21037//21037 21038//21038\nf 21039//21039 21040//21040 21041//21041\nf 21042//21042 21043//21043 21044//21044\nf 21045//21045 21046//21046 21047//21047\nf 21048//21048 21049//21049 21050//21050\nf 21051//21051 21052//21052 21053//21053\nf 21054//21054 21055//21055 21056//21056\nf 21057//21057 21058//21058 21059//21059\nf 21060//21060 21061//21061 21062//21062\nf 21063//21063 21064//21064 21065//21065\nf 21066//21066 21067//21067 21068//21068\nf 21069//21069 21070//21070 21071//21071\nf 21072//21072 21073//21073 21074//21074\nf 21075//21075 21076//21076 21077//21077\nf 21078//21078 21079//21079 21080//21080\nf 21081//21081 21082//21082 21083//21083\nf 21084//21084 21085//21085 21086//21086\nf 21087//21087 21088//21088 21089//21089\nf 21090//21090 21091//21091 21092//21092\nf 21093//21093 21094//21094 21095//21095\nf 21096//21096 21097//21097 21098//21098\nf 21099//21099 21100//21100 21101//21101\nf 21102//21102 21103//21103 21104//21104\nf 21105//21105 21106//21106 21107//21107\nf 21108//21108 21109//21109 21110//21110\nf 21111//21111 21112//21112 21113//21113\nf 21114//21114 21115//21115 21116//21116\nf 21117//21117 21118//21118 21119//21119\nf 21120//21120 21121//21121 21122//21122\nf 21123//21123 21124//21124 21125//21125\nf 21126//21126 21127//21127 21128//21128\nf 21129//21129 21130//21130 21131//21131\nf 21132//21132 21133//21133 21134//21134\nf 21135//21135 21136//21136 21137//21137\nf 21138//21138 21139//21139 21140//21140\nf 21141//21141 21142//21142 21143//21143\nf 21144//21144 21145//21145 21146//21146\nf 21147//21147 21148//21148 21149//21149\nf 21150//21150 21151//21151 21152//21152\nf 21153//21153 21154//21154 21155//21155\nf 21156//21156 21157//21157 21158//21158\nf 21159//21159 21160//21160 21161//21161\nf 21162//21162 21163//21163 21164//21164\nf 21165//21165 21166//21166 21167//21167\nf 21168//21168 21169//21169 21170//21170\nf 21171//21171 21172//21172 21173//21173\nf 21174//21174 21175//21175 21176//21176\nf 21177//21177 21178//21178 21179//21179\nf 21180//21180 21181//21181 21182//21182\nf 21183//21183 21184//21184 21185//21185\nf 21186//21186 21187//21187 21188//21188\nf 21189//21189 21190//21190 21191//21191\nf 21192//21192 21193//21193 21194//21194\nf 21195//21195 21196//21196 21197//21197\nf 21198//21198 21199//21199 21200//21200\nf 21201//21201 21202//21202 21203//21203\nf 21204//21204 21205//21205 21206//21206\nf 21207//21207 21208//21208 21209//21209\nf 21210//21210 21211//21211 21212//21212\nf 21213//21213 21214//21214 21215//21215\nf 21216//21216 21217//21217 21218//21218\nf 21219//21219 21220//21220 21221//21221\nf 21222//21222 21223//21223 21224//21224\nf 21225//21225 21226//21226 21227//21227\nf 21228//21228 21229//21229 21230//21230\nf 21231//21231 21232//21232 21233//21233\nf 21234//21234 21235//21235 21236//21236\nf 21237//21237 21238//21238 21239//21239\nf 21240//21240 21241//21241 21242//21242\nf 21243//21243 21244//21244 21245//21245\nf 21246//21246 21247//21247 21248//21248\nf 21249//21249 21250//21250 21251//21251\nf 21252//21252 21253//21253 21254//21254\nf 21255//21255 21256//21256 21257//21257\nf 21258//21258 21259//21259 21260//21260\nf 21261//21261 21262//21262 21263//21263\nf 21264//21264 21223//21223 21222//21222\nf 21265//21265 21266//21266 21267//21267\nf 21268//21268 21269//21269 21270//21270\nf 21271//21271 21272//21272 21273//21273\nf 21271//21271 21273//21273 21274//21274\nf 21275//21275 21276//21276 21277//21277\nf 21278//21278 21279//21279 21280//21280\nf 21281//21281 21282//21282 21283//21283\nf 21284//21284 21285//21285 21286//21286\nf 21287//21287 21288//21288 21289//21289\nf 21290//21290 21291//21291 21292//21292\nf 21293//21293 21294//21294 21295//21295\nf 21296//21296 21297//21297 21298//21298\nf 21299//21299 21300//21300 21301//21301\nf 21302//21302 21303//21303 21304//21304\nf 21261//21261 21263//21263 21305//21305\nf 21306//21306 21307//21307 21308//21308\nf 21309//21309 21310//21310 21311//21311\nf 21312//21312 21313//21313 21314//21314\nf 21315//21315 21316//21316 21317//21317\nf 21318//21318 21319//21319 21320//21320\nf 21321//21321 21322//21322 21323//21323\nf 21324//21324 21325//21325 21326//21326\nf 21327//21327 21328//21328 21329//21329\nf 21330//21330 21331//21331 21332//21332\nf 21333//21333 21334//21334 21335//21335\nf 21336//21336 21337//21337 21338//21338\nf 21318//21318 21320//21320 21339//21339\nf 21340//21340 21341//21341 21342//21342\nf 21343//21343 21344//21344 21345//21345\nf 21346//21346 21347//21347 21348//21348\nf 21349//21349 21350//21350 21351//21351\nf 21352//21352 21353//21353 21354//21354\nf 21355//21355 21356//21356 21357//21357\nf 21358//21358 21359//21359 21360//21360\nf 21361//21361 21362//21362 21363//21363\nf 21364//21364 21365//21365 21366//21366\nf 21367//21367 21368//21368 21369//21369\nf 21370//21370 21371//21371 21372//21372\nf 21373//21373 21374//21374 21375//21375\nf 21376//21376 21377//21377 21378//21378\nf 21379//21379 21380//21380 21381//21381\nf 21382//21382 21383//21383 21384//21384\nf 21385//21385 21386//21386 21387//21387\nf 21388//21388 21389//21389 21390//21390\nf 21391//21391 21392//21392 21393//21393\nf 21394//21394 21395//21395 21396//21396\nf 21397//21397 21398//21398 21399//21399\nf 21400//21400 21401//21401 21402//21402\nf 21403//21403 21404//21404 21405//21405\nf 21406//21406 21407//21407 21408//21408\nf 21409//21409 21410//21410 21411//21411\nf 21412//21412 21413//21413 21414//21414\nf 21415//21415 21416//21416 21417//21417\nf 21418//21418 21419//21419 21420//21420\nf 21421//21421 21422//21422 21423//21423\nf 21424//21424 21425//21425 21426//21426\nf 21427//21427 21428//21428 21429//21429\nf 21430//21430 21431//21431 21432//21432\nf 21433//21433 21434//21434 21435//21435\nf 21436//21436 21437//21437 21438//21438\nf 21439//21439 21440//21440 21441//21441\nf 21442//21442 21421//21421 21423//21423\nf 21443//21443 21444//21444 21445//21445\nf 21446//21446 21447//21447 21448//21448\nf 21449//21449 21450//21450 21451//21451\nf 21452//21452 21453//21453 21454//21454\nf 21455//21455 21456//21456 21457//21457\nf 21458//21458 21459//21459 21460//21460\nf 21461//21461 21462//21462 21463//21463\nf 21464//21464 21465//21465 21466//21466\nf 21467//21467 21468//21468 21469//21469\nf 21470//21470 21471//21471 21472//21472\nf 21473//21473 21474//21474 21475//21475\nf 21476//21476 21477//21477 21478//21478\nf 21479//21479 21480//21480 21481//21481\nf 21482//21482 21483//21483 21484//21484\nf 21485//21485 21486//21486 21487//21487\nf 21488//21488 21489//21489 21490//21490\nf 21491//21491 21492//21492 21493//21493\nf 21494//21494 21470//21470 21472//21472\nf 21495//21495 21496//21496 21497//21497\nf 21498//21498 21499//21499 21500//21500\nf 21501//21501 21502//21502 21503//21503\nf 21504//21504 21505//21505 21506//21506\nf 21507//21507 21508//21508 21509//21509\nf 21510//21510 21511//21511 21512//21512\nf 21513//21513 21514//21514 21515//21515\nf 21516//21516 21517//21517 21518//21518\nf 21519//21519 21520//21520 21521//21521\nf 21522//21522 21523//21523 21524//21524\nf 21525//21525 21526//21526 21527//21527\nf 21528//21528 21529//21529 21530//21530\nf 21357//21357 21531//21531 21532//21532\nf 21533//21533 21534//21534 21535//21535\nf 21536//21536 21537//21537 21538//21538\nf 21539//21539 21540//21540 21541//21541\nf 21542//21542 21543//21543 21544//21544\nf 21545//21545 21546//21546 21547//21547\nf 21548//21548 21549//21549 21550//21550\nf 21551//21551 21552//21552 21553//21553\nf 21554//21554 21555//21555 21556//21556\nf 21557//21557 21558//21558 21559//21559\nf 21560//21560 21561//21561 21562//21562\nf 21563//21563 21564//21564 21565//21565\nf 21566//21566 21567//21567 21568//21568\nf 21271//21271 21274//21274 21569//21569\nf 21570//21570 21571//21571 21572//21572\nf 21573//21573 21574//21574 21575//21575\nf 21576//21576 21577//21577 21578//21578\nf 21579//21579 21580//21580 21581//21581\nf 21582//21582 21583//21583 21584//21584\nf 21585//21585 21586//21586 21587//21587\nf 21588//21588 21589//21589 21590//21590\nf 21591//21591 21592//21592 21593//21593\nf 21594//21594 21595//21595 21596//21596\nf 21597//21597 21598//21598 21599//21599\nf 21600//21600 21601//21601 21602//21602\nf 21603//21603 21604//21604 21605//21605\nf 21606//21606 21607//21607 21608//21608\nf 21609//21609 21610//21610 21611//21611\nf 21612//21612 21613//21613 21614//21614\nf 21615//21615 21616//21616 21617//21617\nf 21618//21618 21619//21619 21620//21620\nf 21621//21621 21622//21622 21623//21623\nf 21624//21624 21625//21625 21626//21626\nf 21627//21627 21628//21628 21629//21629\nf 21630//21630 21631//21631 21632//21632\nf 21633//21633 21634//21634 21635//21635\nf 21636//21636 21637//21637 21638//21638\nf 21639//21639 21640//21640 21641//21641\nf 21642//21642 21643//21643 21644//21644\nf 21645//21645 21646//21646 21647//21647\nf 21648//21648 21649//21649 21650//21650\nf 21651//21651 21643//21643 21642//21642\nf 21652//21652 21653//21653 21654//21654\nf 21655//21655 21656//21656 21657//21657\nf 21658//21658 21659//21659 21660//21660\nf 21661//21661 21662//21662 21663//21663\nf 21664//21664 21665//21665 21666//21666\nf 21667//21667 21668//21668 21669//21669\nf 21670//21670 21671//21671 21672//21672\nf 21673//21673 21674//21674 21675//21675\nf 21676//21676 21677//21677 21678//21678\nf 21679//21679 21680//21680 21681//21681\nf 21682//21682 21683//21683 21684//21684\nf 21685//21685 21686//21686 21687//21687\nf 21688//21688 21689//21689 21690//21690\nf 21691//21691 21692//21692 21693//21693\nf 21694//21694 21695//21695 21696//21696\nf 21697//21697 21687//21687 21686//21686\nf 21698//21698 21699//21699 21700//21700\nf 21701//21701 21702//21702 21703//21703\nf 21704//21704 21705//21705 21706//21706\nf 21707//21707 21708//21708 21709//21709\nf 21710//21710 21711//21711 21712//21712\nf 21704//21704 21706//21706 21713//21713\nf 21714//21714 21715//21715 21716//21716\nf 21717//21717 21718//21718 21719//21719\nf 21720//21720 21721//21721 21722//21722\nf 21720//21720 21722//21722 21723//21723\nf 21724//21724 21725//21725 21726//21726\nf 21727//21727 21728//21728 21729//21729\nf 21730//21730 21731//21731 21732//21732\nf 21733//21733 21734//21734 21735//21735\nf 21736//21736 21372//21372 21702//21702\nf 21737//21737 21738//21738 21739//21739\nf 21740//21740 21741//21741 21742//21742\nf 21743//21743 21744//21744 21745//21745\nf 21746//21746 21747//21747 21748//21748\nf 21749//21749 21750//21750 21751//21751\nf 21752//21752 21753//21753 21754//21754\nf 21755//21755 21756//21756 21757//21757\nf 21758//21758 21759//21759 21760//21760\nf 21356//21356 21531//21531 21357//21357\nf 21761//21761 21762//21762 21763//21763\nf 21764//21764 21765//21765 21766//21766\nf 21767//21767 21768//21768 21769//21769\nf 21770//21770 21771//21771 21772//21772\nf 21773//21773 21774//21774 21775//21775\nf 21776//21776 21777//21777 21778//21778\nf 21779//21779 21780//21780 21781//21781\nf 21782//21782 21783//21783 21784//21784\nf 21785//21785 21786//21786 21787//21787\nf 21788//21788 21752//21752 21754//21754\nf 21789//21789 21790//21790 21791//21791\nf 21792//21792 21793//21793 21794//21794\nf 21795//21795 21796//21796 21797//21797\nf 21798//21798 21799//21799 21800//21800\nf 21801//21801 21802//21802 21803//21803\nf 21804//21804 21805//21805 21806//21806\nf 21807//21807 21808//21808 21809//21809\nf 21810//21810 21811//21811 21812//21812\nf 21813//21813 21804//21804 21806//21806\nf 21814//21814 21815//21815 21816//21816\nf 21817//21817 21818//21818 21819//21819\nf 21820//21820 21821//21821 21822//21822\nf 21823//21823 21824//21824 21825//21825\nf 21826//21826 21827//21827 21828//21828\nf 21829//21829 21830//21830 21831//21831\nf 21832//21832 21833//21833 21834//21834\nf 21835//21835 21836//21836 21837//21837\nf 21838//21838 21839//21839 21840//21840\nf 21841//21841 21842//21842 21843//21843\nf 21844//21844 21845//21845 21846//21846\nf 21847//21847 21685//21685 21687//21687\nf 21848//21848 21849//21849 21850//21850\nf 21851//21851 21852//21852 21853//21853\nf 21854//21854 21855//21855 21856//21856\nf 21857//21857 21858//21858 21859//21859\nf 21860//21860 21861//21861 21862//21862\nf 21863//21863 21864//21864 21865//21865\nf 21866//21866 21867//21867 21868//21868\nf 21869//21869 21870//21870 21871//21871\nf 21872//21872 21873//21873 21874//21874\nf 21875//21875 21876//21876 21877//21877\nf 21878//21878 21879//21879 21880//21880\nf 21881//21881 21882//21882 21883//21883\nf 21884//21884 21885//21885 21886//21886\nf 21887//21887 21888//21888 21889//21889\nf 21890//21890 21891//21891 21892//21892\nf 21893//21893 21894//21894 21895//21895\nf 21896//21896 21897//21897 21898//21898\nf 21899//21899 21900//21900 21901//21901\nf 21902//21902 21903//21903 21904//21904\nf 21905//21905 21906//21906 21907//21907\nf 21908//21908 21909//21909 21910//21910\nf 21911//21911 21912//21912 21913//21913\nf 21914//21914 21915//21915 21916//21916\nf 21917//21917 21918//21918 21919//21919\nf 21920//21920 21921//21921 21922//21922\nf 21923//21923 21924//21924 21925//21925\nf 21926//21926 21927//21927 21928//21928\nf 21929//21929 21930//21930 21931//21931\nf 21932//21932 21933//21933 21934//21934\nf 21935//21935 21936//21936 21937//21937\nf 21938//21938 21936//21936 21935//21935\nf 21939//21939 21940//21940 21941//21941\nf 21942//21942 21943//21943 21944//21944\nf 21945//21945 21946//21946 21947//21947\nf 21948//21948 21949//21949 21950//21950\nf 21951//21951 21952//21952 21953//21953\nf 21954//21954 21955//21955 21956//21956\nf 21957//21957 21958//21958 21959//21959\nf 21960//21960 21961//21961 21962//21962\nf 21963//21963 21964//21964 21965//21965\nf 21966//21966 21967//21967 21968//21968\nf 21969//21969 21970//21970 21971//21971\nf 21972//21972 21973//21973 21974//21974\nf 21975//21975 21976//21976 21977//21977\nf 21978//21978 21979//21979 21980//21980\nf 21981//21981 21982//21982 21983//21983\nf 21984//21984 21985//21985 21986//21986\nf 21987//21987 21988//21988 21989//21989\nf 21990//21990 21991//21991 21992//21992\nf 21993//21993 21994//21994 21995//21995\nf 21996//21996 21997//21997 21998//21998\nf 21999//21999 22000//22000 22001//22001\nf 22002//22002 22003//22003 22004//22004\nf 22005//22005 22006//22006 22007//22007\nf 22008//22008 22009//22009 22010//22010\nf 22011//22011 22012//22012 22013//22013\nf 22014//22014 22015//22015 22016//22016\nf 22017//22017 22018//22018 22019//22019\nf 22020//22020 22021//22021 22022//22022\nf 22023//22023 22024//22024 22025//22025\nf 22026//22026 22027//22027 22028//22028\nf 22029//22029 22030//22030 22031//22031\nf 22032//22032 22033//22033 22034//22034\nf 22035//22035 22036//22036 22037//22037\nf 22038//22038 22039//22039 22040//22040\nf 22041//22041 22042//22042 22043//22043\nf 22044//22044 22045//22045 22046//22046\nf 22047//22047 22048//22048 22049//22049\nf 22050//22050 22051//22051 22052//22052\nf 22053//22053 22054//22054 22055//22055\nf 22056//22056 22057//22057 22058//22058\nf 22059//22059 22060//22060 22061//22061\nf 22062//22062 22063//22063 22064//22064\nf 22065//22065 22066//22066 22067//22067\nf 22068//22068 22069//22069 22070//22070\nf 22071//22071 22072//22072 22073//22073\nf 22074//22074 22075//22075 22076//22076\nf 22077//22077 22078//22078 22079//22079\nf 22080//22080 22081//22081 22082//22082\nf 22083//22083 22084//22084 22085//22085\nf 22086//22086 22087//22087 22088//22088\nf 22089//22089 22090//22090 22091//22091\nf 22092//22092 22093//22093 22094//22094\nf 22095//22095 22096//22096 22097//22097\nf 22098//22098 22099//22099 22100//22100\nf 22101//22101 22102//22102 22103//22103\nf 22104//22104 22105//22105 22106//22106\nf 22107//22107 22108//22108 22109//22109\nf 22110//22110 22111//22111 22112//22112\nf 22113//22113 22114//22114 22115//22115\nf 22116//22116 22117//22117 22118//22118\nf 22119//22119 22120//22120 22121//22121\nf 22122//22122 22123//22123 22124//22124\nf 22125//22125 22126//22126 22127//22127\nf 22128//22128 22129//22129 22130//22130\nf 22131//22131 22132//22132 22133//22133\nf 22134//22134 22135//22135 22136//22136\nf 22137//22137 22138//22138 22139//22139\nf 22140//22140 22141//22141 22142//22142\nf 22143//22143 22144//22144 22145//22145\nf 22146//22146 22147//22147 22148//22148\nf 22149//22149 22150//22150 22151//22151\nf 22152//22152 22153//22153 22154//22154\nf 22155//22155 22156//22156 22157//22157\nf 22158//22158 22159//22159 22160//22160\nf 22161//22161 22162//22162 22163//22163\nf 22164//22164 22165//22165 22166//22166\nf 22167//22167 22168//22168 22169//22169\nf 22170//22170 22171//22171 22172//22172\nf 22173//22173 22174//22174 22175//22175\nf 22176//22176 22177//22177 22178//22178\nf 22179//22179 22180//22180 22181//22181\nf 22182//22182 22183//22183 22184//22184\nf 22185//22185 22186//22186 22187//22187\nf 22188//22188 22189//22189 22190//22190\nf 22191//22191 22192//22192 22193//22193\nf 22194//22194 22195//22195 22196//22196\nf 22197//22197 22198//22198 22199//22199\nf 22200//22200 22201//22201 22202//22202\nf 22203//22203 22204//22204 22205//22205\nf 22206//22206 22207//22207 22208//22208\nf 22209//22209 22210//22210 22211//22211\nf 21921//21921 21920//21920 22212//22212\nf 22213//22213 22214//22214 22215//22215\nf 22216//22216 22217//22217 22218//22218\nf 22219//22219 22220//22220 22221//22221\nf 22222//22222 22223//22223 22224//22224\nf 22225//22225 22226//22226 22227//22227\nf 22225//22225 22227//22227 22228//22228\nf 22229//22229 22230//22230 22231//22231\nf 22232//22232 22233//22233 22234//22234\nf 22235//22235 22236//22236 22237//22237\nf 22238//22238 22239//22239 22240//22240\nf 22241//22241 22242//22242 22243//22243\nf 22244//22244 22245//22245 22246//22246\nf 22247//22247 22248//22248 22249//22249\nf 22250//22250 22251//22251 22252//22252\nf 22253//22253 22254//22254 22255//22255\nf 22256//22256 22257//22257 22258//22258\nf 22259//22259 22260//22260 22261//22261\nf 22262//22262 22263//22263 22264//22264\nf 22164//22164 22166//22166 22265//22265\nf 22266//22266 22267//22267 22268//22268\nf 22269//22269 22270//22270 22271//22271\nf 22272//22272 22273//22273 22274//22274\nf 22275//22275 22276//22276 22277//22277\nf 22278//22278 22279//22279 22280//22280\nf 22281//22281 22282//22282 22283//22283\nf 22284//22284 22285//22285 22286//22286\nf 22287//22287 22288//22288 22289//22289\nf 22290//22290 22291//22291 22292//22292\nf 22290//22290 22293//22293 22294//22294\nf 22290//22290 22292//22292 22293//22293\nf 22295//22295 22296//22296 22297//22297\nf 22294//22294 22296//22296 22295//22295\nf 22294//22294 22293//22293 22296//22296\nf 22298//22298 22299//22299 22300//22300\nf 21703//21703 22301//22301 22302//22302\nf 21703//21703 22303//22303 22304//22304\nf 21703//21703 22304//22304 22301//22301\nf 22305//22305 22306//22306 22307//22307\nf 22308//22308 22309//22309 21847//21847\nf 22310//22310 22311//22311 22312//22312\nf 22313//22313 22314//22314 22315//22315\nf 22316//22316 22317//22317 22318//22318\nf 21685//21685 22319//22319 21686//21686\nf 22315//22315 21701//21701 21703//21703\nf 22320//22320 22321//22321 21370//21370\nf 21736//21736 22305//22305 22307//22307\nf 22302//22302 22322//22322 21697//21697\nf 21687//21687 22308//22308 21847//21847\nf 22323//22323 22324//22324 22325//22325\nf 21697//21697 21686//21686 22302//22302\nf 22307//22307 22320//22320 21370//21370\nf 21686//21686 22313//22313 22315//22315\nf 21697//21697 22326//22326 21687//21687\nf 22327//22327 22328//22328 22329//22329\nf 21702//21702 21372//21372 21703//21703\nf 22315//22315 21703//21703 21686//21686\nf 21370//21370 21372//21372 21736//21736\nf 22307//22307 22330//22330 22320//22320\nf 21703//21703 22302//22302 21686//21686\nf 22307//22307 21370//21370 21736//21736\nf 21847//21847 22331//22331 21685//21685\nf 21686//21686 22332//22332 22313//22313\nf 22333//22333 22334//22334 22335//22335\nf 21349//21349 22336//22336 21350//21350\nf 21400//21400 22337//22337 21401//21401\nf 21406//21406 22338//22338 21407//21407\nf 21427//21427 22339//22339 21428//21428\nf 21563//21563 22340//22340 21564//21564\nf 21651//21651 22341//22341 21643//21643\nf 21658//21658 22342//22342 21659//21659\nf 21670//21670 22343//22343 21671//21671\nf 21710//21710 22344//22344 21711//21711\nf 21848//21848 22345//22345 21849//21849\nf 21854//21854 22346//22346 21855//21855\nf 22310//22310 22347//22347 22311//22311\nf 22316//22316 22348//22348 22317//22317\nf 22327//22327 22349//22349 22328//22328\nf 22333//22333 22350//22350 22334//22334\nf 22351//22351 22352//22352 22353//22353\nf 22354//22354 22355//22355 22356//22356\nf 22357//22357 22352//22352 22358//22358\nf 22353//22353 22359//22359 22360//22360\nf 22360//22360 22361//22361 22362//22362\nf 22362//22362 22363//22363 22360//22360\nf 22364//22364 22365//22365 22366//22366\nf 22367//22367 22368//22368 22365//22365\nf 22366//22366 22351//22351 22353//22353\nf 22369//22369 22370//22370 22371//22371\nf 22371//22371 22351//22351 22369//22369\nf 22358//22358 22372//22372 22357//22357\nf 22373//22373 22374//22374 22372//22372\nf 22375//22375 22357//22357 22374//22374\nf 22353//22353 22360//22360 22363//22363\nf 22363//22363 22364//22364 22353//22353\nf 22368//22368 22366//22366 22365//22365\nf 22371//22371 22376//22376 22351//22351\nf 22372//22372 22374//22374 22357//22357\nf 22352//22352 22351//22351 22376//22376\nf 22364//22364 22366//22366 22353//22353\nf 22376//22376 22358//22358 22352//22352\nf 22377//22377 22378//22378 22379//22379\nf 22379//22379 22380//22380 22381//22381\nf 22382//22382 22383//22383 22384//22384\nf 22385//22385 22384//22384 22383//22383\nf 22386//22386 22356//22356 22384//22384\nf 22354//22354 22387//22387 22388//22388\nf 22389//22389 22390//22390 22387//22387\nf 22391//22391 22388//22388 22390//22390\nf 22392//22392 22354//22354 22388//22388\nf 22393//22393 22394//22394 22395//22395\nf 22395//22395 22355//22355 22393//22393\nf 22381//22381 22377//22377 22379//22379\nf 22380//22380 22382//22382 22356//22356\nf 22384//22384 22356//22356 22382//22382\nf 22387//22387 22390//22390 22388//22388\nf 22392//22392 22396//22396 22354//22354\nf 22393//22393 22355//22355 22396//22396\nf 22381//22381 22380//22380 22356//22356\nf 22356//22356 22355//22355 22381//22381\nf 22396//22396 22355//22355 22354//22354\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/collision.py",
    "content": "from functools import lru_cache\nfrom typing import Tuple\n\nimport numpy as np\nimport open3d as o3d\nimport torch\nfrom jaxtyping import Bool, Float\nfrom nerfstudio.fields.base_field import Field\nfrom params_proto import PrefixProto, Proto\nfrom pytorch3d.transforms import Transform3d\n\nfrom f3rm_robot.assets import get_panda_gripper_mesh\nfrom f3rm_robot.field_adapter import (\n    FeatureFieldAdapter,\n    get_alpha,\n    ray_samples_from_coords,\n)\n\n\nclass CollisionArgs(PrefixProto, cli_parse=False):\n    \"\"\"Arguments for collision checking a proposed grasp. The default values work well for the default Panda gripper.\"\"\"\n\n    alpha_threshold: float = Proto(0.2, help=\"Alpha threshold for a point to be considered to be occupied.\")\n    voxel_size: float = Proto(\n        0.0075,\n        help=\"Voxel size to voxelize the Panda gripper. You may need to adjust alpha if you change this.\",\n    )\n    overlap_num: int = Proto(10, help=\"Number of overlapping points to be considered a collision.\")\n\n    allow_finger_collisions: bool = Proto(\n        False,\n        help=\"Whether to allow collisions between the fingers, and hence use the gripper model without the fingers.\",\n    )\n    ray_samples_per_batch: int = Proto(\n        2**22,\n        help=\"Number of ray samples to use per batch for collision checking, decrease if running out of memory.\",\n    )\n\n\n@lru_cache(maxsize=1)\ndef get_gripper_points() -> torch.Tensor:\n    \"\"\"\n    Get the points (i.e., voxels) that the Panda gripper occupies. The mesh we load only includes the surface of the\n    gripper, but this should be sufficient for coarse collision checking. You should do more sophisticated collision\n    checking in your downstream motion planner.\n\n    We cache this method as creating the voxel grid is a bit slow, and we can reuse the same points for all grasps.\n    \"\"\"\n    # Load mesh and convert to voxel grid\n    mesh = get_panda_gripper_mesh()\n    voxel_grid = o3d.geometry.VoxelGrid.create_from_triangle_mesh(mesh, voxel_size=CollisionArgs.voxel_size)\n\n    # Get (x, y, z) coordinates of the voxels\n    voxel_grid_indices = [v.grid_index for v in voxel_grid.get_voxels()]\n    voxel_points = np.array([voxel_grid.get_voxel_center_coordinate(idx) for idx in voxel_grid_indices])\n\n    if not CollisionArgs.allow_finger_collisions:\n        # Remove points with z < 0.035 (i.e., points that are in the fingers)\n        voxel_points = voxel_points[voxel_points[:, 2] >= 0.035]\n\n    # Convert to tensor\n    device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n    voxel_points = torch.tensor(voxel_points).float().to(device)\n    return voxel_points\n\n\ndef get_collision_info(\n    field: Field, grasps_to_nerf: Transform3d\n) -> Tuple[Bool[torch.Tensor, \"num_grasps\"], Float[torch.Tensor, \"num_grasps num_points 3\"]]:\n    \"\"\"\n    Check if the gripper has a collision with the scene for the given grasps. Call this with torch.no_grad unless you\n    need the gradients, otherwise it is much slower.\n\n    Args:\n        field: the NeRF field.\n        grasps_to_nerf: the grasp transforms that take points in the gripper frame to NeRF coordinate frame.\n\n    Returns:\n        collision_detected: a boolean tensor of shape (N,) indicating whether a collision was detected for each grasp.\n        gripper_points: the transformed gripper points in the NeRF coordinate frame for vis purposes.\n    \"\"\"\n    # Transform gripper points by the grasps into the NeRF coordinate system\n    og_gripper_points = get_gripper_points()\n    gripper_points = grasps_to_nerf.transform_points(og_gripper_points)\n    if gripper_points.ndim == 2:\n        gripper_points = gripper_points.unsqueeze(0)\n    gripper_points_flat = gripper_points.view(-1, 3)\n    ray_samples = ray_samples_from_coords(gripper_points_flat)\n\n    # Query the NeRF in batches to get density and compute alphas\n    batch_size = CollisionArgs.ray_samples_per_batch\n    density = []\n    for i in range(0, len(ray_samples), batch_size):\n        batch_ray_samples = ray_samples[i : i + batch_size]\n        batch_density, _ = field.get_density(batch_ray_samples)\n        density.append(batch_density)\n    density = torch.cat(density, dim=0)\n\n    # Compute alpha and check if overlap exceeds threshold to be considered a collision\n    alpha_flat = get_alpha(density, CollisionArgs.voxel_size)\n    alpha = alpha_flat.view(gripper_points.shape[:2])\n    assert gripper_points.shape[:2] == alpha.shape[:2], \"You messed up the shapes!\"\n    overlap_num = (alpha >= CollisionArgs.alpha_threshold).sum(dim=1)\n    collision_detected = (overlap_num >= CollisionArgs.overlap_num).squeeze()\n    return collision_detected, gripper_points\n\n\ndef has_collision(feature_field: FeatureFieldAdapter, grasps_to_world: Transform3d) -> Bool[torch.Tensor, \"num_grasps\"]:\n    \"\"\"\n    Check if the gripper has a collision with the scene for the given grasps. Call this with torch.no_grad unless you\n    need the gradients, otherwise it is much slower.\n\n    Returns a boolean tensor for whether a collision was detected for each grasp\n    \"\"\"\n    grasps_to_nerf = grasps_to_world.compose(feature_field.world_to_nerf)\n    return get_collision_info(field=feature_field.rgb_field, grasps_to_nerf=grasps_to_nerf)[0]\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/examples/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/f3rm/f3rm_robot/examples/generate_task.py",
    "content": "\"\"\"\nExample script for generating a Task, which contains the query points and demo embeddings, given a feature field and\na set of demonstrations. We:\n\n1. Load the feature field and demos\n2. Sample a set of query points\n3. Transform the query points by each demo pose\n4. Sample the feature field for the density and feature at each transformed query point\n5. Save it into a Task object\n\nThis script also supports visualization of the query points along with the demo gripper poses. Note that we save the\ndensity not the alphas, as the voxel size can vary at optimization time.\n\"\"\"\n\nimport json\nfrom pathlib import Path\nfrom typing import Dict, List, Tuple\n\nimport numpy as np\nimport open3d as o3d\nimport torch\nfrom jaxtyping import Float\nfrom pytorch3d.transforms import Transform3d\nfrom scipy.spatial.transform import Rotation\n\nfrom f3rm_robot.assets import get_panda_gripper_mesh\nfrom f3rm_robot.load import LoadState, load_nerfstudio_outputs\nfrom f3rm_robot.task import Task, sample_query_points\nfrom f3rm_robot.visualizer import BaseVisualizer, ViserVisualizer\n\n\ndef load_demos(demo_path: Path) -> Tuple[Dict, Transform3d]:\n    \"\"\"Load the demos from the given demo JSON file.\"\"\"\n    if not demo_path.exists():\n        raise FileNotFoundError(f\"Could not find demo file at {demo_path}.\")\n    with open(demo_path, \"r\") as f:\n        demo_dict = json.load(f)\n\n    if len(demo_dict[\"demo_labels\"]) != len(demo_dict[\"demo_poses\"]):\n        raise ValueError(\"demo_labels and demo_poses must have the same length.\")\n\n    # Load demo poses\n    transforms = []\n    for label, pose in zip(demo_dict[\"demo_labels\"], demo_dict[\"demo_poses\"]):\n        transform = np.eye(4)\n        transform[:3, :3] = Rotation.from_quat(pose[\"quat_xyzw\"]).as_matrix()\n        transform[:3, 3] = pose[\"translation\"]\n        transform = torch.from_numpy(transform).float()\n\n        # Need to take transpose as Transform3d uses row instead of column vectors\n        transform = Transform3d(matrix=transform.T)\n        transforms.append(transform)\n\n    transforms = Transform3d.stack(*transforms)\n    return demo_dict, transforms\n\n\ndef visualize_demos(\n    visualizer: BaseVisualizer,\n    load_state: LoadState,\n    demo_labels: List[str],\n    demo_poses: Transform3d,\n    demo_qps: Float[torch.Tensor, \"d n 3\"],\n):\n    # We use helpers from the main optimization scripts for visualization\n    from f3rm_robot.optimize import get_scene_pcd\n\n    # Show point cloud of the scene\n    scene_pcd = get_scene_pcd(load_state, num_points=100_000, voxel_size=0.005)\n    visualizer.add_o3d_point_cloud(\"scene_pcd\", scene_pcd, point_size=0.005 + 0.001)\n\n    # Show query points, coordinate frame, and gripper mesh for each demo\n    base_gripper_mesh = get_panda_gripper_mesh()\n    base_gripper_mesh.compute_vertex_normals()\n\n    for label, qps, pose in zip(demo_labels, demo_qps, demo_poses):\n        # Transformation matrix, need to transpose Transform3d matrix as it uses row vectors\n        transform = pose.get_matrix()[0].T\n\n        # Transformed query points\n        qp_pcd = o3d.geometry.PointCloud()\n        qp_pcd.points = o3d.utility.Vector3dVector(qps.cpu().numpy())\n        qp_pcd.paint_uniform_color([1, 0, 0])\n        visualizer.add_o3d_point_cloud(f\"{label}/query_points\", qp_pcd, point_size=0.005)\n\n        # Coordinate frame for gripper pose\n        pose_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(size=0.03)\n        pose_frame.transform(transform)\n        visualizer.add_o3d_mesh(f\"{label}/pose_frame\", pose_frame)\n\n        # Gripper mesh\n        gripper_mesh = o3d.geometry.TriangleMesh(base_gripper_mesh)\n        gripper_mesh.transform(transform)\n        visualizer.add_o3d_mesh(f\"{label}/gripper_mesh\", gripper_mesh)\n\n\ndef generate_task(\n    scene: str,\n    demo_fname: str,\n    num_query_points: int,\n    qp_std_dev: float,\n    save: bool,\n    disable_visualize: bool,\n    viser_host: str,\n    viser_port: int,\n):\n    \"\"\"Generate Task for the given scene and demos.\"\"\"\n    # Load the feature field\n    load_state = load_nerfstudio_outputs(scene)\n    device = load_state.pipeline.device\n\n    # Load the demos for this scene\n    dataset = load_state.pipeline.datamanager.get_datapath()\n    demo_dict, demo_poses = load_demos(dataset / demo_fname)\n\n    # Sample query points and transform by demo poses. The optimization can be noisy depending on the sampling of the\n    # query points, so you might want to try multiple different samples.\n    query_points = sample_query_points(num_query_points, std_dev=qp_std_dev)\n    qp_transformed = demo_poses.transform_points(query_points)\n    qp_transformed = qp_transformed.to(device)\n\n    # Get features and density for each demo from feature field\n    feature_field = load_state.feature_field_adapter()\n    with torch.no_grad():\n        outputs = feature_field(qp_transformed)\n\n    # Create task and save\n    task = Task(\n        name=demo_dict[\"task\"],\n        query_points=query_points,\n        demo_features=outputs[\"feature\"],\n        demo_density=outputs[\"density\"],\n    )\n    print(f\"Created task '{task.name}' with {task.num_demos} demos and {task.num_query_points} query points.\")\n    if save:\n        save_path = f\"{task.name}.pt\"\n        torch.save(task, save_path)\n        print(f\"Saved task to {save_path}\")\n\n    # Visualize the scene and demos if required\n    if not disable_visualize:\n        visualizer = ViserVisualizer(host=viser_host, port=viser_port)\n        visualize_demos(\n            visualizer, load_state, demo_labels=demo_dict[\"demo_labels\"], demo_poses=demo_poses, demo_qps=qp_transformed\n        )\n        try:\n            input(\"Press Enter or Ctrl+C to exit.\")\n        except KeyboardInterrupt:\n            print()\n            pass\n        print(\"Exiting...\")\n\n\nif __name__ == \"__main__\":\n    import argparse\n\n    parser = argparse.ArgumentParser(\n        description=\"Example script to generate a Task for a feature field and demos.\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n    parser.add_argument(\n        \"--scene\", type=str, required=True, help=\"Path to Nerfstudio scene config.yml file for the f3rm training run.\"\n    )\n    parser.add_argument(\"--demo_fname\", type=str, default=\"scene_demo.json\", help=\"Name of the demo file.\")\n    parser.add_argument(\"--num_query_points\", type=int, default=100, help=\"Number of query points to sample.\")\n    parser.add_argument(\"--qp_std_dev\", type=float, default=0.0075, help=\"Standard deviation of query points.\")\n    parser.add_argument(\"--save\", action=\"store_true\", help=\"Save the task to disk under the task name.\")\n    parser.add_argument(\"--disable_visualize\", action=\"store_true\", help=\"Disable visualization of the task.\")\n    parser.add_argument(\"--viser_host\", type=str, default=\"localhost\", help=\"Host for Viser Visualizer.\")\n    parser.add_argument(\"--viser_port\", type=int, default=8012, help=\"Port for Viser Visualizer.\")\n\n    args = parser.parse_args()\n    generate_task(**vars(args))\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/field_adapter.py",
    "content": "from typing import Dict\n\nimport torch\nimport torch.nn as nn\nfrom jaxtyping import Float\nfrom nerfstudio.cameras.rays import Frustums, RaySamples\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom pytorch3d.transforms import Transform3d\n\nfrom f3rm.feature_field import FeatureFieldHeadNames\nfrom f3rm.model import FeatureFieldModel\n\n\ndef get_alpha(density: Float[torch.Tensor, \"*b n 1\"], delta: float) -> Float[torch.Tensor, \"*b n 1\"]:\n    \"\"\"Get alpha from density using alpha compositing equation. Delta is the distance between samples.\"\"\"\n    delta_density = density * delta\n    alpha = 1 - torch.exp(-delta_density)\n    return alpha\n\n\ndef ray_samples_from_coords(coords: Float[torch.Tensor, \"*b n 3\"]) -> RaySamples:\n    return RaySamples(\n        frustums=Frustums(origins=coords, directions=torch.zeros_like(coords), starts=0, ends=0, pixel_area=None),\n        camera_indices=torch.ones(1),\n    )\n\n\nclass FeatureFieldAdapter(nn.Module):\n    \"\"\"\n    Field adapter from which we can query by (x, y, z) positions to get density and features.\n    We assume that the positions input are in the world frame, and convert them to the NeRF frame on the fly.\n    \"\"\"\n\n    def __init__(self, model: FeatureFieldModel, world_to_nerf: Transform3d):\n        super().__init__()\n        self.rgb_field = model.field\n        self.feature_field = model.feature_field\n        # Transformation that takes points from world frame to NeRF frame\n        self.world_to_nerf = world_to_nerf\n\n    def get_ray_samples(self, world_points: Float[torch.Tensor, \"*b n 3\"]) -> RaySamples:\n        \"\"\"Get ray samples from world points by transforming into NeRF frame.\"\"\"\n        nerf_points = self.world_to_nerf.transform_points(world_points)\n        return ray_samples_from_coords(nerf_points)\n\n    def get_density(self, world_points: Float[torch.Tensor, \"*b n 3\"]) -> Float[torch.Tensor, \"*b n 1\"]:\n        \"\"\"Get density from NeRF. Use this method when you don't need RGB or feature outputs and care about speed.\"\"\"\n        ray_samples = self.get_ray_samples(world_points)\n        density, _ = self.rgb_field.get_density(ray_samples)\n        return density\n\n    def get_alpha(self, world_points: Float[torch.Tensor, \"*b n 3\"], delta: float) -> Float[torch.Tensor, \"*b n 1\"]:\n        \"\"\"Get alpha from NeRF.\"\"\"\n        return get_alpha(self.get_density(world_points), delta)\n\n    def get_rgb(self, world_points: Float[torch.Tensor, \"*b n 3\"]) -> Float[torch.Tensor, \"*b n 3\"]:\n        \"\"\"Get RGB only from NeRF\"\"\"\n        ray_samples = self.get_ray_samples(world_points)\n        density, density_embedding = self.rgb_field.get_density(ray_samples)\n        field_outputs = self.rgb_field.get_outputs(ray_samples, density_embedding)\n        rgb = field_outputs[FieldHeadNames.RGB]\n        return rgb\n\n    def forward(self, world_points: Float[torch.Tensor, \"*b n 3\"]) -> Dict[str, Float[torch.Tensor, \"*b n c\"]]:\n        \"\"\"Get density and features from the feature field.\"\"\"\n        ray_samples = self.get_ray_samples(world_points)\n        density, density_embedding = self.rgb_field.get_density(ray_samples)\n        # Forward through the feature field\n        ff_outputs = self.feature_field(ray_samples)\n        feature = ff_outputs[FeatureFieldHeadNames.FEATURE]\n        outputs = {\"density\": density, \"feature\": feature}\n        return outputs\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/initial_proposals.py",
    "content": "\"\"\"\nUtilities for generating initial proposals.\n\"\"\"\nfrom typing import Tuple\n\nimport numpy as np\nimport torch\nfrom jaxtyping import Float\nfrom pytorch3d.ops import knn_points\n\n\nclass NoProposalsError(Exception):\n    \"\"\"Error raised when there are no proposals due to the masking.\"\"\"\n\n    pass\n\n\ndef dense_voxel_grid(\n    min_bounds: Tuple[float, float, float], max_bounds: Tuple[float, float, float], voxel_size: float\n) -> Float[torch.Tensor, \"n_x n_y n_z 3\"]:\n    \"\"\"Create a dense voxel grid between min and max bounds with given voxel size.\"\"\"\n    voxel_grid = torch.meshgrid(\n        *(torch.arange(min_bound, max_bound, voxel_size) for min_bound, max_bound in zip(min_bounds, max_bounds)),\n        indexing=\"ij\",\n    )\n    voxel_grid = torch.stack(voxel_grid, dim=-1)\n    return voxel_grid\n\n\ndef otsu_mask(voxel_sims: Float[torch.Tensor, \"n\"], num_bins: int = 100) -> Tuple[Float[torch.Tensor, \"n\"], float]:\n    \"\"\"\n    Compute mask based on Otsu's method - i.e., maximize between-class variance.\n    Returns the mask and threshold value.\n    \"\"\"\n    # Normalize the similarities\n    sim_min, sim_max = voxel_sims.min(), voxel_sims.max()\n    voxel_sims_norm = (voxel_sims - sim_min) / (sim_max - sim_min)\n\n    # Compute the histogram of the similarities\n    threshold_vals = torch.linspace(0, 1, num_bins).to(voxel_sims.device)\n    hist = torch.histc(voxel_sims_norm, bins=num_bins, min=0, max=1)\n    probs = hist / torch.sum(hist)\n\n    # Compute cumulative sum and mean\n    cum_sum = torch.cumsum(probs, dim=0)\n    cum_mean = torch.cumsum(probs * threshold_vals, dim=0)\n\n    # Calculate the between-class variance for all possible threshold values\n    variance = ((cum_mean[-1] * cum_sum - cum_mean) ** 2) / (cum_sum * (1 - cum_sum) + 1e-9)\n\n    # Find threshold that maximizes the between-class variance\n    threshold = threshold_vals[torch.argmax(variance)]\n    mask = (voxel_sims_norm >= threshold).squeeze()\n    return mask, threshold\n\n\ndef marching_cubes_mask(\n    alpha: Float[torch.Tensor, \"n_x n_y n_z\"],\n    iso_value: float,\n    min_bounds: Tuple[float, float, float],\n    max_bounds: Tuple[float, float, float],\n) -> Float[torch.Tensor, \"n 3\"]:\n    \"\"\"\n    Use marching cubes, so we only extract the surface of a voxel grid to reduce the number of proposals.\n    Expects alpha to be a 3D tensor, not flattened.\n\n    Returns:\n        alpha_voxel_grid: the vertices of the mesh, **flattened** as a (n, 3) tensor.\n    \"\"\"\n    from mcubes import marching_cubes\n    from trimesh import Trimesh\n\n    assert alpha.dim() == 3, f\"alpha should be 3D, not {alpha.shape}\"\n\n    # We use mcubes as it's sufficiently fast (<0.02s). pytorch3d and kaolin are painful to deal with.\n    verts, faces = marching_cubes(alpha.cpu().numpy(), iso_value)\n\n    # Create a Trimesh, then scale and translate back to the original world coordinates\n    mesh = Trimesh(verts, faces)\n    diff_bounds = np.array(max_bounds) - np.array(min_bounds)\n    scale = diff_bounds / np.array(alpha.shape)\n    assert (scale > 0).all(), f\"scale should be all positive, not {scale}\"\n    mesh.apply_scale(scale)\n    mesh.apply_translation(min_bounds)\n\n    # Use the vertices of the mesh as the new voxel grid\n    alpha_voxel_grid = torch.from_numpy(mesh.vertices).float()\n    alpha_voxel_grid = alpha_voxel_grid.to(alpha.device)\n    return alpha_voxel_grid\n\n\ndef voxel_downsample(voxel_grid: Float[torch.Tensor, \"n 3\"], voxel_size: float) -> Float[torch.Tensor, \"n 3\"]:\n    \"\"\"Downsample a voxel grid by taking mean position of each voxel.\"\"\"\n    # Based on https://github.com/isl-org/Open3D/blob/master/cpp/open3d/geometry/PointCloud.cpp#L354\n    voxel_min_bound = voxel_grid.amin(dim=0) - voxel_size * 0.5\n    ref_coords = (voxel_grid - voxel_min_bound) / voxel_size\n    voxel_indices = torch.floor(ref_coords).long()\n    voxel_indices, voxel_indices_inverse = torch.unique(voxel_indices, dim=0, return_inverse=True)\n\n    # Tensor to hold sum and counts\n    voxel_sum = torch.zeros(\n        (voxel_indices.shape[0], voxel_grid.shape[1]), dtype=voxel_grid.dtype, device=voxel_grid.device\n    )\n    voxel_count = torch.zeros((voxel_indices.shape[0],), dtype=torch.int64, device=voxel_grid.device)\n\n    # Add the voxel values to the voxel_sum tensor and increment the voxel_count tensor\n    voxel_sum.scatter_add_(0, voxel_indices_inverse.unsqueeze(1).repeat(1, voxel_grid.shape[1]), voxel_grid)\n    voxel_count.scatter_add_(0, voxel_indices_inverse, torch.ones_like(voxel_indices_inverse))\n\n    # Compute the mean of each voxel and fill the output tensor\n    voxel_grid_downsampled = voxel_sum / voxel_count.unsqueeze(1)\n    return voxel_grid_downsampled\n\n\ndef remove_statistical_outliers(\n    voxel_grid: torch.Tensor, num_points: int, std_ratio: float\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"Remove outliers from a voxel grid using pytorch3d knn points.\"\"\"\n    [nn_dists], _, _ = knn_points(voxel_grid[None, ...], voxel_grid[None, ...], K=num_points)\n    avg_dists = nn_dists.mean(dim=-1)\n    avg_dist = avg_dists.mean()\n    std_dist = avg_dists.std()\n\n    # Calculate threshold\n    dist_threshold = avg_dist + std_ratio * std_dist\n    nn_mask = avg_dists < dist_threshold\n    nn_voxel_grid = voxel_grid[nn_mask]\n    return nn_voxel_grid, nn_mask\n\n\ndef density_threshold_mask(\n    alpha: Float[torch.Tensor, \"n_x n_y n_z\"],\n    threshold: float,\n    min_bounds: Tuple[float, float, float],\n    max_bounds: Tuple[float, float, float],\n) -> Float[torch.Tensor, \"n 3\"]:\n    \"\"\"\n    Apply a simple density threshold to keep voxels above the threshold.\n    This keeps both surface and interior points.\n    \n    Args:\n        alpha: Density values in a 3D grid\n        threshold: Density threshold value\n        min_bounds: Minimum bounds of the voxel grid\n        max_bounds: Maximum bounds of the voxel grid\n        \n    Returns:\n        Points corresponding to voxels above the threshold\n    \"\"\"\n    # Create mask for voxels above threshold\n    mask = alpha > threshold\n    \n    if not torch.any(mask):\n        print(f\"No voxels found above threshold {threshold}. Max alpha: {alpha.max().item()}\")\n        # Return a small number of points with highest alpha to avoid empty tensor\n        if alpha.max() > 0:\n            top_k = min(100, alpha.numel())\n            flat_indices = torch.topk(alpha.flatten(), k=top_k)[1]\n            indices = torch.stack(torch.where(alpha.flatten()[flat_indices[0]] == alpha)).squeeze()\n        else:\n            print(\"WARNING: All alpha values are zero!\")\n            return torch.zeros((0, 3), device=alpha.device)\n    else:\n        # Get indices of voxels above threshold\n        indices = torch.stack(torch.where(mask)).transpose(0, 1)\n    \n    # Convert indices to world coordinates\n    grid_shape = torch.tensor(alpha.shape, device=alpha.device)\n    min_bounds_tensor = torch.tensor(min_bounds, device=alpha.device)\n    max_bounds_tensor = torch.tensor(max_bounds, device=alpha.device)\n    \n    # Scale indices to world coordinates\n    voxel_size = (max_bounds_tensor - min_bounds_tensor) / grid_shape\n    points = indices.float() * voxel_size + min_bounds_tensor\n    \n    print(f\"Density threshold found {len(points)} voxels above threshold {threshold}\")\n    return points\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/load.py",
    "content": "import json\nfrom dataclasses import dataclass\nfrom pathlib import Path\nimport numpy as np\nimport torch\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom pytorch3d.transforms import Transform3d, matrix_to_quaternion, quaternion_to_matrix\n\nfrom f3rm_robot.field_adapter import FeatureFieldAdapter\n\n\ndef load_nerf_to_world(dataset: Path) -> Transform3d:\n    \"\"\"\n    Load the nerf_to_world transformation from the given dataset. i.e., the transformation that takes a point from\n    the NeRF coordinate system to the world coordinate system. This includes scale+rotation+translation.\n    \"\"\"\n    n2w_path = dataset / \"nerf_to_world.json\"\n    if not n2w_path.exists():\n        # raise ValueError(f\"Could not find nerf_to_world.json in {dataset}\")\n        ## assume identity transform\n        nerf_to_world = torch.eye(4)\n        nerf_to_world = Transform3d(matrix=nerf_to_world.T)\n        return nerf_to_world\n\n    with n2w_path.open(\"r\") as f:\n        nerf_to_world_dict = json.load(f)\n\n    nerf_to_world = nerf_to_world_dict[\"nerf_to_world\"]\n    nerf_to_world = torch.tensor(nerf_to_world).float()\n    assert nerf_to_world.shape == (4, 4), f\"Expected nerf_to_world to be 4x4, but got {nerf_to_world.shape}\"\n\n    # Note that Transform3D uses row vector representation (i.e., it expects the last **column** to be [0, 0, 0, 1]),\n    # so we need to transpose the matrix.\n    nerf_to_world = Transform3d(matrix=nerf_to_world.T)\n    return nerf_to_world\n\n\ndef load_nerf_to_offset(camera_optimizer: CameraOptimizer) -> Transform3d:\n    \"\"\"\n    We re-use the camera poses from a calibration run for training the feature field. However, there are might be errors\n    depending on how the selfie stick is grasped. To tackle this, we optimize the camera poses during training, so we\n    need to \"undo\" the offset in rotation and translation to account for these potential errors.\n\n    We approximate this offset with the mean translation and rotation of the camera pose adjustments.\n    \"\"\"\n    from nerfstudio.cameras.lie_groups import exp_map_SO3xR3\n\n    mode = camera_optimizer.config.mode\n    if mode == \"off\":\n        # No camera pose optimization, so just return identity\n        return torch.eye(4).float()\n\n    # We only support SO3xR3 optimization mode\n    if mode != \"SO3xR3\":\n        raise NotImplementedError(f\"Unsupported camera optimizer mode: {camera_optimizer.config.mode}\")\n    \n    # Remove the check for pose_noise since it no longer exists in the newer version\n    # assert camera_optimizer.pose_noise is None, \"pose_noise should be None\"\n\n    # Get the camera pose adjustments, which should be a (n, 3, 4) tensor\n    with torch.no_grad():\n        pose_adjustments = exp_map_SO3xR3(camera_optimizer.pose_adjustment)\n    assert pose_adjustments.shape[1:] == (3, 4)\n\n    # Translation offset is just the mean translation\n    translations = pose_adjustments[:, :, 3]\n    translation_offset = translations.mean(dim=0)\n\n    # Rotation offset is the mean quaternion (we can't just average rotation matrices)\n    rot_matrices = pose_adjustments[:, :, :3]\n    quats = matrix_to_quaternion(rot_matrices)\n\n    # See this for details: https://stackoverflow.com/a/27410865\n    accumulator = quats.T @ quats\n    accumulator /= len(quats)\n    eig_vals, eig_vecs = torch.linalg.eigh(accumulator)\n    eig_vecs = eig_vecs[:, eig_vals.argsort(descending=True)]\n\n    # Mean quaternion is the eigenvector corresponding to the largest eigenvalue\n    mean_quat = eig_vecs[:, 0]\n    mean_rot = quaternion_to_matrix(mean_quat)\n\n    # Form the transform\n    nerf_to_offset = torch.eye(4)\n    nerf_to_offset[:3, :3] = mean_rot\n    nerf_to_offset[:3, 3] = translation_offset\n\n    # Transform3d uses row vector convention instead of column vector, so we need to transpose the matrix\n    nerf_to_offset = Transform3d(matrix=nerf_to_offset.T)\n    return nerf_to_offset\n\n\n@dataclass(frozen=True)\nclass LoadState:\n    pipeline: Pipeline\n    nerf_to_world: Transform3d\n\n    def feature_field_adapter(self) -> FeatureFieldAdapter:\n        return FeatureFieldAdapter(model=self.pipeline.model, world_to_nerf=self.nerf_to_world.inverse())\n\n\ndef load_nerfstudio_outputs(exp_config_path: str) -> LoadState:\n    \"\"\"Load a Nerfstudio output for pose optimization.\"\"\"\n    from nerfstudio.utils.eval_utils import eval_setup\n\n    config, pipeline, checkpoint_path, step = eval_setup(Path(exp_config_path))\n\n    # Load nerf to world transformation\n    nerf_to_world = load_nerf_to_world(dataset=config.data)\n    nerf_to_world = nerf_to_world.to(pipeline.device)\n\n    # Load and apply the camera optimizer offset. It's slightly confusing, as the final Nerfstudio model actually\n    # lives in the 'offset' coordinate system, but we will call it nerf_to_world for simplicity.\n    # nerf_to_offset = load_nerf_to_offset(camera_optimizer=pipeline.datamanager.train_camera_optimizer)\n    nerf_to_offset = load_nerf_to_offset(camera_optimizer=pipeline.model.camera_optimizer)\n    nerf_to_offset = nerf_to_offset.to(pipeline.device)\n    offset_to_nerf = nerf_to_offset.inverse()\n\n    # Compose nerf_to_world on top of offset_to_nerf to get the *actual* nerf_to_world transformation after\n    # camera pose optimization.\n    offset_to_world = offset_to_nerf.compose(nerf_to_world)\n    nerf_to_world = offset_to_world\n    return LoadState(pipeline, nerf_to_world)\n\n\n@dataclass(frozen=True)\nclass ObjaverseLoadState:\n    pipeline: any\n    nerf_to_world: Transform3d\n    \n    def feature_field_adapter(self) -> FeatureFieldAdapter:\n        return FeatureFieldAdapter(model=self.pipeline.model, world_to_nerf=self.nerf_to_world.inverse())\n\n\ndef load_nerfstudio_objaverse_outputs(exp_config_path: str) -> ObjaverseLoadState:\n    \"\"\"\n    Load a Nerfstudio output for Objaverse synthetic data.\n    \n    Args:\n        exp_config_path: Path to the experiment config file\n        \n    Returns:\n        ObjaverseLoadState containing the pipeline and nerf_to_world transform\n    \"\"\"\n    from nerfstudio.utils.eval_utils import eval_setup\n    \n    # Load the model using nerfstudio's eval_setup\n    config, pipeline, checkpoint_path, step = eval_setup(Path(exp_config_path))\n    \n    # For Objaverse data, use identity transform since objects are already\n    # centered and scaled nicely within a unit cube\n    device = pipeline.device\n    nerf_to_world_matrix = torch.eye(4, device=device)\n    \n    # Create the Transform3d object\n    # Note: Transform3d uses row vector convention, so we transpose the matrix\n    nerf_to_world = Transform3d(matrix=nerf_to_world_matrix.T)\n    \n    # Save the transform for future reference\n    output_dir = Path(exp_config_path).parent\n    with open(output_dir / \"nerf_to_world.json\", \"w\") as f:\n        json.dump({\n            \"nerf_to_world\": nerf_to_world_matrix.cpu().tolist(),\n            \"info\": \"Identity transform for pre-centered Objaverse data\"\n        }, f, indent=2)\n    print(f\"Saved nerf_to_world.json to {output_dir / 'nerf_to_world.json'}\")\n    \n    return ObjaverseLoadState(pipeline, nerf_to_world)\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/optimize.py",
    "content": "import torch._dynamo\ntorch._dynamo.config.suppress_errors = True\n\nimport json\nfrom datetime import datetime\nfrom functools import reduce\nfrom pathlib import Path\nfrom typing import Any, Dict, Optional, Tuple\n\nimport open3d as o3d\nimport torch\nfrom jaxtyping import Float\nfrom params_proto import ARGS\nfrom pytorch3d.transforms import Transform3d, quaternion_to_matrix, random_quaternions\nfrom slugify import slugify\nfrom tqdm import tqdm\nimport numpy as np\n\nfrom f3rm.features.clip import clip, tokenize\nfrom f3rm.features.clip.model import CLIP\nfrom f3rm.features.clip_extract import CLIPArgs\nfrom f3rm_robot.args import OptimizationArgs, validate_args\nfrom f3rm_robot.collision import has_collision\nfrom f3rm_robot.field_adapter import FeatureFieldAdapter, get_alpha\nfrom f3rm_robot.initial_proposals import (\n    NoProposalsError,\n    dense_voxel_grid,\n    marching_cubes_mask,\n    otsu_mask,\n    remove_statistical_outliers,\n    voxel_downsample,\n    density_threshold_mask,\n)\nfrom f3rm_robot.load import LoadState, load_nerfstudio_outputs\nfrom f3rm_robot.task import Task, get_tasks\nfrom f3rm_robot.utils import get_gripper_meshes, get_heatmap, sample_point_cloud\nfrom f3rm_robot.visualizer import BaseVisualizer, ViserVisualizer\nfrom f3rm.pca_colormap import apply_pca_colormap\n\nargs = OptimizationArgs\nvisualizer: Optional[BaseVisualizer] = None\n\n\ndef remove_floating_clusters(pcd: o3d.geometry.PointCloud, min_points: int = 10, eps: float = 0.02) -> o3d.geometry.PointCloud:\n    \"\"\"\n    Remove small disconnected clusters from a point cloud using DBSCAN clustering.\n    \n    Args:\n        pcd: Open3D point cloud\n        min_points: Minimum number of points for a cluster to be kept\n        eps: Maximum distance between two points for them to be considered in the same cluster\n        \n    Returns:\n        Filtered point cloud with small clusters removed\n    \"\"\"\n    if len(pcd.points) == 0:\n        return pcd\n    \n    # Run DBSCAN clustering\n    print(f\"Running DBSCAN clustering with eps={eps}, min_points={min_points} on {len(pcd.points)} points\")\n    labels = np.array(pcd.cluster_dbscan(eps=eps, min_points=min_points, print_progress=True))\n    \n    # Check if clustering was successful\n    if len(labels) == 0:\n        print(\"DBSCAN clustering failed. Returning original point cloud.\")\n        return pcd\n    \n    # Find the maximum label (excluding noise points labeled as -1)\n    max_label = labels.max()\n    print(f\"DBSCAN found {max_label + 1} clusters\")\n    \n    # If no clusters were found (all points are noise)\n    if max_label < 0:\n        print(\"No clusters found. All points classified as noise. Try increasing eps or decreasing min_points.\")\n        return pcd\n    \n    # Count points in each cluster\n    unique_labels = np.arange(max_label + 1)  # 0 to max_label\n    counts = np.array([np.sum(labels == i) for i in unique_labels])\n    \n    # Find the largest cluster\n    largest_cluster_idx = np.argmax(counts)\n    largest_cluster_count = counts[largest_cluster_idx]\n    \n    print(f\"Largest cluster (label {largest_cluster_idx}) has {largest_cluster_count} points\")\n    print(f\"Other cluster sizes: {[(i, c) for i, c in enumerate(counts) if i != largest_cluster_idx]}\")\n    \n    # Keep only points in the largest cluster\n    largest_cluster_mask = labels == largest_cluster_idx\n    noise_points = np.sum(labels == -1)\n    \n    print(f\"Removed {len(labels) - largest_cluster_count - noise_points} points from {max_label} smaller clusters\")\n    print(f\"Removed {noise_points} noise points\")\n    \n    # Create new point cloud with only the largest cluster\n    filtered_pcd = o3d.geometry.PointCloud()\n    filtered_pcd.points = o3d.utility.Vector3dVector(np.asarray(pcd.points)[largest_cluster_mask])\n    if pcd.has_colors():\n        filtered_pcd.colors = o3d.utility.Vector3dVector(np.asarray(pcd.colors)[largest_cluster_mask])\n    \n    return filtered_pcd\n\n\ndef get_filtered_scene_pcd(load_state: LoadState, device: torch.device, voxel_size: float = 0.01, \n                          query: Optional[str] = None) -> o3d.geometry.PointCloud:\n    \"\"\"\n    Get a filtered scene point cloud using the same techniques as in optimization.\n    \n    Args:\n        load_state: Loaded scene state\n        device: Device to use for computation\n        voxel_size: Size of voxels for sampling\n        query: Optional text query to visualize query-specific features\n        \n    Returns:\n        Filtered point cloud with PCA-colored features\n    \"\"\"\n    feature_field = load_state.feature_field_adapter()\n    \n    # Create dense voxel grid\n    voxel_grid = dense_voxel_grid(args.min_bounds, args.max_bounds, voxel_size).to(device)\n    og_voxel_grid_shape = voxel_grid.shape\n    voxel_grid = voxel_grid.reshape(-1, 3)\n    \n    # Apply density thresholding\n    with torch.no_grad():\n        alpha = feature_field.get_alpha(voxel_grid, voxel_size)\n    alpha_vg = alpha.reshape(og_voxel_grid_shape[:-1])\n    voxel_grid = density_threshold_mask(alpha_vg, args.alpha_threshold * 0.1, args.min_bounds, args.max_bounds)\n    \n    # Apply gray background filtering\n    # voxel_grid = filter_gray_background(voxel_grid, feature_field, gray_threshold=0.05, device=device)\n    \n    # Downsample and remove outliers\n    # voxel_grid = voxel_downsample(voxel_grid, voxel_size)\n    # voxel_grid, _ = remove_statistical_outliers(voxel_grid, num_points=50, std_ratio=4.0)\n    \n    # Get features for visualization\n    with torch.no_grad():\n        outputs = feature_field(voxel_grid)\n\n    voxel_feats = get_qp_feats(outputs)\n    \n    # If query is provided, compute query-specific features\n    if query is not None:\n        # Load CLIP model if not already loaded\n        clip_model, _ = clip.load(CLIPArgs.model_name, device=device)\n        \n        # Encode query using CLIP\n        with torch.no_grad():\n            tokens = tokenize(query).to(device)\n            query_emb = clip_model.encode_text(tokens).float()  # Ensure float32 type\n            query_emb /= query_emb.norm(dim=-1, keepdim=True)\n        \n        # Normalize voxel features for cosine similarity\n        voxel_feats = voxel_feats.float()  # Ensure float32 type\n        voxel_feats_norm = voxel_feats / voxel_feats.norm(dim=-1, keepdim=True)\n        \n        # Compute similarity between voxel features and query\n        voxel_sims = voxel_feats_norm @ query_emb.T\n        \n        # Apply colormap to query-specific similarities\n        print(f\"Visualizing heatmap for query: '{query}'\")\n        clip_pca_colors = get_heatmap(\n            voxel_sims.squeeze(), \n            cmap_name=\"Reds\",\n            colormap_min=-1.0,\n            colormap_max=1.0,\n        )\n        clip_pca_colors = torch.from_numpy(clip_pca_colors).to(device)\n    else:\n        # Apply PCA to general CLIP features\n        print(\"Visualizing PCA on general CLIP features (no query)\")\n        # clip_pca_colors = apply_pca_colormap(voxel_feats)\n        with torch.no_grad():\n            rgb = feature_field.get_rgb(voxel_grid)\n        clip_pca_colors = rgb\n    \n    # Convert to Open3D point cloud\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(voxel_grid.cpu().numpy())\n    pcd.colors = o3d.utility.Vector3dVector(clip_pca_colors.cpu().numpy())\n    \n    # Remove floating clusters\n    # pcd = remove_floating_clusters(pcd, min_points=10, eps=voxel_size*2)\n    \n    return pcd\n\n\n\n\ndef get_scene_pcd(load_state: LoadState, num_points: int, voxel_size: float) -> o3d.geometry.PointCloud:\n    # Set z to -0.01, so we can show the table as well in the point cloud\n    scene_min_bounds = (args.min_bounds[0], args.min_bounds[1], -0.01)\n    pcd = sample_point_cloud(load_state, num_points, scene_min_bounds, args.max_bounds)\n\n    # Downsample and remove outliers (floaters)\n    pcd = pcd.voxel_down_sample(voxel_size=voxel_size)\n    pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=1.0)\n    return pcd\n\n\ndef visualize_scene(load_state: LoadState, device: torch.device, query: Optional[str] = None, \n                   num_points: int = 200_000, voxel_size: float = 0.005):\n    \"\"\"\n    Visualize the scene by sampling a point cloud from the NeRF and adding it to the visualizer.\n    \n    Args:\n        load_state: Loaded scene state\n        device: Device to use for computation\n        query: Optional text query to visualize query-specific features\n        num_points: Number of points to sample\n        voxel_size: Size of voxels for sampling\n    \"\"\"\n    pcd = get_filtered_scene_pcd(load_state, device, voxel_size=voxel_size, query=query)\n    \n    # Use a different name for query-specific visualization\n    pcd_name = f\"scene_pcd_{slugify(query)}\" if query else \"scene_pcd\"\n    visualizer.add_o3d_point_cloud(pcd_name, pcd, point_size=voxel_size + 0.001)\n    \n    return pcd\n\n\ndef get_qp_feats(outputs: Dict[str, torch.Tensor]) -> Float[torch.Tensor, \"n c\"]:\n    \"\"\"Get the alpha-weighted features for the given outputs from the feature field.\"\"\"\n    alpha = get_alpha(outputs[\"density\"], delta=args.voxel_size)\n    features = outputs[\"feature\"]\n    return alpha * features\n\n\ndef compute_task_embedding(task: Task) -> Float[torch.Tensor, \"num_qps num_channels\"]:\n    \"\"\"Compute the Task Embedding which is the mean of the alpha-weighted features for the given task.\"\"\"\n    qp_feats = get_qp_feats({\"density\": task.demo_density, \"feature\": task.demo_features})\n    assert qp_feats.shape == (task.num_demos, task.num_query_points, task.num_channels)\n    task_emb = qp_feats.mean(dim=0)\n    return task_emb\n\n\ndef retrieve_task(\n    query: str, clip_model: CLIP, device: torch.device\n) -> Tuple[Task, Float[torch.Tensor, \"num_qps num_channels\"], Float[torch.Tensor, \"1 num_channels\"]]:\n    \"\"\"\n    Retrieve the most relevant task for a given query. Returns the Task, task embedding, and query embedding.\n    \"\"\"\n    # Retrieve relevant demonstrations by encoding query using CLIP and comparing it to the task embeddings.\n    with torch.no_grad():\n        tokens = tokenize(query).to(device)\n        query_emb = clip_model.encode_text(tokens)\n        query_emb /= query_emb.norm(dim=-1, keepdim=True)\n\n    # Compute mean embedding for each task, and compare to the query\n    tasks = get_tasks()\n    task_embs = torch.stack([compute_task_embedding(t) for t in tasks]).to(device)\n    mean_task_embs = task_embs.mean(dim=1)\n    task_sims = torch.cosine_similarity(query_emb, mean_task_embs)\n\n    # Select task with the highest similarity to the query\n    task_idx = torch.argmax(task_sims)\n    task_emb = task_embs[task_idx]\n    return tasks[task_idx], task_emb, query_emb\n\n\n\ndef filter_gray_background(voxel_grid: torch.Tensor, feature_field: FeatureFieldAdapter, \n                          gray_threshold: float = 0.05, device: torch.device = None,\n                          return_mask: bool = False) -> torch.Tensor:\n    \"\"\"\n    Filter out voxels that have black/gray color (likely background).\n    \n    Args:\n        voxel_grid: Tensor of shape (num_voxels, 3) containing voxel coordinates\n        feature_field: Feature field adapter to query RGB values\n        gray_threshold: Threshold for detecting background (based on RGB values)\n        device: Device to use for computation\n        return_mask: If True, return the boolean mask instead of filtered voxel grid\n        \n    Returns:\n        If return_mask is False: Filtered voxel grid without background voxels\n        If return_mask is True: Boolean mask where True indicates non-background voxels\n    \"\"\"\n    if len(voxel_grid) == 0:\n        return torch.zeros(0, dtype=torch.bool, device=device) if return_mask else voxel_grid\n        \n    # Query RGB values for each voxel\n    with torch.no_grad():\n        rgb = feature_field.get_rgb(voxel_grid)\n    \n    # For black background (BlenderNeRF), pixels have very low RGB values\n    # Calculate mean intensity across RGB channels for each voxel\n    rgb_mean = rgb.mean(dim=-1)\n    \n    # Non-background voxels have higher intensity\n    non_bg_mask = rgb_mean > gray_threshold\n    \n    print(f\"Removed {(~non_bg_mask).sum().item()} black background voxels out of {len(voxel_grid)}\")\n    \n    if return_mask:\n        return non_bg_mask\n    else:\n        return voxel_grid[non_bg_mask]\n\n\n\ndef get_initial_voxel_grid(\n    feature_field: FeatureFieldAdapter, query: str, clip_model: CLIP, device: torch.device\n) -> Tuple[Float[torch.Tensor, \"num_voxels 3\"], Float[torch.Tensor, \"num_voxels\"], Dict[str, int]]:\n    \"\"\"\n    Get the initial masked voxel grid based on density (alpha) and language (CLIP features). These correspond to the\n    coarse (x, y, z) proposals.\n\n    Returns voxel grid as a tensor of shape (num_voxels, 3), voxel similarities with language, and a dict with mettrics.\n    \"\"\"\n    # Firstly, we sample a dense voxel grid over the workspace and use marching cubes to only get the surface.\n    voxel_size = args.voxel_size\n    print(\">> min_bounds: \", args.min_bounds, \"max_bounds: \", args.max_bounds, \"voxel_size: \", voxel_size)\n    voxel_grid = dense_voxel_grid(args.min_bounds, args.max_bounds, voxel_size).to(device)\n    print(\">> Dense voxel grid shape: \", voxel_grid.shape) ## torch.Size([W, H, D, 3])\n    # exit(0)\n    og_voxel_grid_shape = voxel_grid.shape\n    voxel_grid = voxel_grid.reshape(-1, 3)\n    metrics = {\"initial\": len(voxel_grid)}\n\n    # Initial alpha masking (i.e., density). Use marching cubes to only get surface.\n    with torch.no_grad():\n        alpha = feature_field.get_alpha(voxel_grid, voxel_size)\n\n    print(f\"Alpha stats: min={alpha.min().item()}, max={alpha.max().item()}, mean={alpha.mean().item()}\")\n    print(f\"Alpha > 0.1: {(alpha > 0.1).sum().item()} voxels\")\n    print(f\"Alpha > 0.01: {(alpha > 0.01).sum().item()} voxels\")\n    print(f\"Alpha > 0.001: {(alpha > 0.001).sum().item()} voxels\")\n\n    alpha_vg = alpha.reshape(og_voxel_grid_shape[:-1])\n    # voxel_grid = marching_cubes_mask(alpha_vg, args.alpha_threshold, args.min_bounds, args.max_bounds)\n    voxel_grid = density_threshold_mask(alpha_vg, args.alpha_threshold, args.min_bounds, args.max_bounds)\n    ## after marching cubes, voxel_grid is a sparse representation of the voxel grid.\n    print(\">> Voxel grid shape after marching cubes: \", voxel_grid.shape)\n    metrics[\"mcubes_masked\"] = len(voxel_grid)\n\n    # Add gray background filtering\n    # voxel_grid = filter_gray_background(voxel_grid, feature_field, gray_threshold=0.05, device=device)\n    # metrics[\"gray_filtered\"] = len(voxel_grid)\n    \n\n    # Down sample and remove outliers to get rid of floaters.\n    # voxel_grid = voxel_downsample(voxel_grid, voxel_size)\n    # voxel_grid, _ = remove_statistical_outliers(voxel_grid, num_points=50, std_ratio=4.0)\n\n\n    ## NOTE: voxel_grid is a sparse representation of the voxel grid. Instead of storing a full dense\n    ### WxHxDxF grid, we only store a the coordinates of the voxels that are occupied.\n\n    metrics[\"downsampled_remove_outliers\"] = len(voxel_grid)\n\n    print(f\"Number of voxels after masking using NeRF density: {len(voxel_grid)}\")\n    print(\">> Metrics: \", metrics)\n\n    # exit(0)\n    if args.visualize:\n        with torch.no_grad():\n            rgb = feature_field.get_rgb(voxel_grid)\n        visualizer.add_point_cloud(\n            \"initial_proposals/alpha_masked\",\n            voxel_grid.cpu().numpy(),\n            rgb.cpu().numpy(),\n            point_size=voxel_size,\n            visible=False,\n        )\n\n    # Feature masking by comparing each voxel's feature with the user query and negatives\n    queries = [query, \"object\", \"things\", \"stuff\", \"texture\"]  # we use the negatives from LERF\n    with torch.no_grad():\n        tokens = tokenize(queries).to(device)\n        query_embs = clip_model.encode_text(tokens).float()\n        query_embs /= query_embs.norm(dim=-1, keepdim=True)\n\n    ## NOTE: query feature field at the voxel_grid points\n    with torch.no_grad():\n        outputs = feature_field(voxel_grid)\n    voxel_feats = get_qp_feats(outputs)\n    voxel_feats /= voxel_feats.norm(dim=-1, keepdim=True)\n\n    # Compute softmax over similarities between voxel features and query embeddings\n    voxel_sims = voxel_feats @ query_embs.T\n    probs = voxel_sims / args.softmax_temperature\n    probs = probs.softmax(dim=-1)\n    probs = torch.nan_to_num_(probs, nan=1e-7)\n\n    # Sample from the distribution, 0-index is the positive query\n    labels = torch.multinomial(probs, num_samples=1)\n    softmax_mask = (labels == 0).squeeze()\n    voxel_grid = voxel_grid[softmax_mask]\n    voxel_sims = voxel_sims[:, 0][softmax_mask]\n\n    # If no voxel sims, then the query didn't match to anything so raise error\n    if len(voxel_grid) == 0:\n        raise NoProposalsError(\n            f'No proposals found for query \"{query}\" after language masking. Try use a different query.'\n        )\n\n    metrics[\"language_masked\"] = len(voxel_grid)\n    print(f\"Number of voxels after language masking using CLIP features: {len(voxel_grid)}\")\n    if args.visualize:\n        visualizer.add_point_cloud(\n            \"initial_proposals/lang_probs\",\n            voxel_grid.cpu().numpy(),\n            get_heatmap(voxel_sims),\n            point_size=voxel_size,\n            visible=False,\n        )\n    return voxel_grid, voxel_sims, metrics\n\n\ndef get_language_guidance_fn(voxel_sims: Float[torch.Tensor, \"num_voxels\"], query_emb: Float[torch.Tensor, \"1 c\"]):\n    \"\"\"\n    Get the function for computing the language guidance given query point features and the embedded user query.\n    This works well in our experiments, but you may need to tune it for your environment and use case.\n    \"\"\"\n    lang_loss_fn = torch.nn.CosineSimilarity()\n    feat_mask, _ = otsu_mask(voxel_sims)\n    remaining_voxel_sims = voxel_sims[feat_mask]\n    sim_min = remaining_voxel_sims.min()\n    sim_max = remaining_voxel_sims.max()\n\n    def language_guidance(qp_feats):\n        qp_mean_feats = qp_feats.mean(dim=1)\n        lang_losses = lang_loss_fn(qp_mean_feats, query_emb)\n        lang_losses = (lang_losses - sim_min) / (sim_max - sim_min)\n\n        # We consider the guidance as a multiplier. Since pose loss is negative cosine similarity, we want the\n        # multiplier to be higher when the proposal matches the language query.\n        lang_multiplier = 1 + lang_losses\n        # Don't let multiplier go below 0 as positive pose loss with negative multiplier can mess things up\n        lang_multiplier = torch.clamp(lang_multiplier, min=0)\n        return lang_multiplier\n\n    return language_guidance\n\n\ndef language_pose_optimization(\n    feature_field: FeatureFieldAdapter, clip_model: CLIP, query: str, device: torch.device\n) -> Dict[str, Any]:\n    \"\"\"\n    Optimize 6-DOF poses for the given language query. We return the ranked grasps after optimization and the metrics.\n    \"\"\"\n    metrics = {\"query\": query}\n\n    # Retrieve the relevant task for the query, and compute the task embedding\n    task, task_emb, query_emb = retrieve_task(query, clip_model, device)\n    task_emb = task_emb.reshape(-1)  # [num_qps * num_channels]\n    query_points = task.query_points.to(device)\n    print(f'Matched \"{query}\" to task {task.name}.')\n    metrics[\"retrieved_task\"] = task.name\n\n    # Get coarse voxel grid proposals using alpha and language-masking.\n    voxel_grid, voxel_sims, metrics[\"num_voxels\"] = get_initial_voxel_grid(feature_field, query, clip_model, device)\n\n    # Sample rotations for each voxel to get the initial 6-DOF proposals. We parametrize rotations as quaternions and\n    # multiply by a scale factor so the scale is more reasonable for optimization. You can tune this to your liking.\n    translations = voxel_grid.repeat_interleave(args.num_rots_per_voxel, dim=0)\n    rotations = random_quaternions(len(translations), device=device)\n    rot_scale = 0.1\n    rotations = rotations * rot_scale\n    metrics[\"num_proposals\"] = {\"initial\": len(translations)}\n\n    def get_rotation_mats(rotations_):\n        \"\"\"Convert quaternions back into rotation matrices.\"\"\"\n        # Normalize the quaternions so they're unit and valid rotations\n        rotations_ = rotations_ / rotations_.norm(dim=-1, keepdim=True)\n        return quaternion_to_matrix(rotations_ * (1 / rot_scale))\n\n    def get_grasps_to_world(translations_, rotations_):\n        \"\"\"Convert translations and rotations into Transform3d.\"\"\"\n        rotation_mats_ = get_rotation_mats(rotations_)\n        # We need to transpose because Transform3d uses row vector rather than column vector convention\n        return Transform3d(device=device).rotate(rotation_mats_.transpose(1, 2)).translate(translations_)\n\n    # Remove initial grasps in collision. We did not optimize our collision checking, so it is a bit slow.\n    grasps_to_world = get_grasps_to_world(translations, rotations)\n    with torch.no_grad():\n        collision_detected = has_collision(feature_field, grasps_to_world)\n    translations = translations[~collision_detected]\n    rotations = rotations[~collision_detected]\n    metrics[\"num_proposals\"][\"initial_cfree\"] = len(translations)\n    print(f\"Number of 6-DOF proposals: {len(translations)}.\")\n\n    # Shuffle the remaining proposals\n    permutation = torch.randperm(len(translations), device=device)\n    translations = translations[permutation]\n    rotations = rotations[permutation]\n\n    # Setup optimizer\n    translations.requires_grad_()\n    rotations.requires_grad_()\n    optimizer = torch.optim.Adam([translations, rotations], lr=args.lr)\n    pose_loss_fn = torch.nn.CosineSimilarity()\n    language_guidance_fn = get_language_guidance_fn(voxel_sims, query_emb)\n    batch_size = args.ray_samples_per_batch // len(query_points)\n    step_losses = None\n\n    # Now we can optimize!\n    for step in tqdm(range(args.num_steps), desc=f'Optimizing poses for \"{query}\"'):\n        optimizer.zero_grad()\n        all_grasps_to_world = []\n        step_losses = []\n        num_proposals = len(translations)\n\n        for i in range(0, num_proposals, batch_size):\n            batch_translations = translations[i : i + batch_size]\n            batch_rotations = rotations[i : i + batch_size]\n\n            # Transform query points by the proposals, and forward through the feature field\n            grasps_to_world = get_grasps_to_world(batch_translations, batch_rotations)\n            all_grasps_to_world.append(grasps_to_world)\n            qps = grasps_to_world.transform_points(query_points)\n            outputs = feature_field(qps)\n            qp_feats = get_qp_feats(outputs)\n\n            # Compute pose loss and language guidance\n            pose_loss = -pose_loss_fn(qp_feats.flatten(1, 2), task_emb)\n            lang_guidance = language_guidance_fn(qp_feats)\n            batch_losses = lang_guidance * pose_loss\n            loss = batch_losses.mean()\n            loss.backward()\n            step_losses.append(batch_losses.detach())\n\n        # Optimizer step\n        optimizer.step()\n        step_losses = torch.cat(step_losses)\n\n        # Visualize top poses. Note this does not take into account collisions.\n        if args.visualize:\n            sorted_losses, sorted_indices = step_losses.sort(descending=False)\n            best_losses, best_indices = (\n                sorted_losses[: args.num_poses_to_visualize],\n                sorted_indices[: args.num_poses_to_visualize],\n            )\n            all_grasps_to_world = Transform3d.stack(*all_grasps_to_world)\n            best_grasps_to_world = all_grasps_to_world[best_indices]\n            # We use jet cmap as viser lighting is a bit messed up for turbo\n            heatmap = torch.from_numpy(get_heatmap(best_losses, invert=True, cmap_name=\"jet\")).to(device)\n            for idx, (verts, faces) in enumerate(zip(*get_gripper_meshes(best_grasps_to_world))):\n                visualizer.add_mesh(f\"grasps/grasp_{idx + 1}\", verts, faces, heatmap[idx])\n\n        # Prune proposals\n        if args.keep_proportion < 1.0 and num_proposals > args.min_proposals and step > args.prune_after:\n            new_num_proposals = max(int(args.keep_proportion * num_proposals), args.min_proposals)\n            losses, best_indices = torch.topk(step_losses, k=new_num_proposals, largest=False)\n            translations = translations[best_indices].detach().clone()\n            rotations = rotations[best_indices].detach().clone()\n            # Need to set up optimizer again\n            translations.requires_grad_()\n            rotations.requires_grad_()\n            optimizer = torch.optim.Adam([translations, rotations], lr=args.lr)\n            metrics[\"num_proposals\"][f\"pruned_step_{step:04d}\"] = new_num_proposals\n\n    # Optimization finished, check remaining grasps for collisions\n    grasps_to_world = get_grasps_to_world(translations, rotations)\n    with torch.no_grad():\n        collision_detected = has_collision(feature_field, grasps_to_world)\n    print(f\"Removed {collision_detected.sum()} of {len(grasps_to_world)} optimized proposals in collision\")\n    grasps_to_world = grasps_to_world[~collision_detected]\n    print(f'Final number of 6-DOF proposals for \"{query}\": {len(grasps_to_world)}')\n    metrics[\"num_proposals\"][\"final_cfree\"] = len(grasps_to_world)\n\n    # Sort the grasps by their losses before returning\n    masked_losses = step_losses[~collision_detected]\n    sorted_losses, sorted_indices = masked_losses.sort(descending=False)\n    grasps_to_world = grasps_to_world[sorted_indices]\n    results = {\"grasps_to_world\": grasps_to_world, \"metrics\": metrics}\n\n    # Show the best grasps without collisions\n    if args.visualize:\n        best_losses = sorted_losses[: args.num_poses_to_visualize]\n        best_grasps_to_world = grasps_to_world[: args.num_poses_to_visualize]\n        all_verts, all_faces = get_gripper_meshes(best_grasps_to_world)\n        # We use jet cmap as viser lighting is a bit messed up for turbo\n        heatmap = torch.from_numpy(get_heatmap(best_losses, invert=True, cmap_name=\"jet\")).to(device)\n        gripper_meshes = []\n        for idx, (verts, faces) in enumerate(zip(all_verts, all_faces)):\n            visualizer.add_mesh(f\"grasps/grasp_{idx + 1}\", verts, faces, heatmap[idx])\n            gripper_mesh = o3d.geometry.TriangleMesh()\n            gripper_mesh.vertices = o3d.utility.Vector3dVector(verts)\n            gripper_mesh.triangles = o3d.utility.Vector3iVector(faces)\n            gripper_mesh.paint_uniform_color(heatmap[idx].cpu().numpy())\n            gripper_meshes.append(gripper_mesh)\n        # Single mesh with all the grippers\n        gripper_mesh = reduce(lambda a, b: a + b, gripper_meshes)\n        results[\"gripper_mesh\"] = gripper_mesh\n\n    return results\n\n\ndef entrypoint():\n    ARGS.parse_args()\n    validate_args()\n\n    # Load feature field\n    print(f\"Loading feature field from {args.scene}...\")\n    load_state = load_nerfstudio_outputs(args.scene)\n    device = load_state.pipeline.device\n    feature_field = load_state.feature_field_adapter()\n\n    # Setup output directory and save args\n    output_dir = Path(args.scene).parent / \"language_visualization\" / datetime.now().strftime(\"%Y-%m-%d_%H%M%S\")\n    output_dir.mkdir(parents=True, exist_ok=True)\n    with open(output_dir / \"args.json\", \"w\") as f:\n        json.dump(vars(args), f, indent=4)\n\n    # Visualize scene with general PCA features\n    global visualizer\n    if args.visualize:\n        visualizer = ViserVisualizer(args.viser_host, args.viser_port)\n        # Set background color to black\n        scene_pcd = visualize_scene(load_state, device, voxel_size=args.voxel_size)\n        # o3d.io.write_point_cloud(str(output_dir / \"scene.ply\"), scene_pcd)\n        # print(f\"Saved scene point cloud to {output_dir / 'scene.ply'}\")\n\n    # Ask for query from user and visualize. If we're using the ViserVisualizer, we can use a textbox in the GUI\n    if isinstance(visualizer, ViserVisualizer):\n        input_fn, enable_gui = visualizer.add_query_gui()\n        print(f\"Enter query in the visualizer at: {visualizer.url}\")\n    else:\n        input_fn = lambda: input(\"Enter query (empty to exit): \")\n        enable_gui = lambda: None\n\n    queries = []\n    while True:\n        enable_gui()\n        try:\n            query = input_fn().strip()\n        except KeyboardInterrupt:\n            print()\n            break\n        if query == \"\":\n            break\n\n        # Visualize the query-specific PCA\n        try:\n            query_pcd = visualize_scene(load_state, device, query=query, voxel_size=args.voxel_size)\n            queries.append(query)\n            \n            # Save the query-specific point cloud\n            query_dir = output_dir / slugify(query)\n            query_dir.mkdir(parents=True, exist_ok=True)\n            # o3d.io.write_point_cloud(str(query_dir / \"query_pcd.ply\"), query_pcd)\n            # print(f\"Saved query-specific point cloud to {query_dir / 'query_pcd.ply'}\")\n            \n        except Exception as e:\n            print(f\"Error visualizing query '{query}': {e}\")\n            continue\n\n        # Write queries to file. Save inside loop so we get partial results if we crash\n        with open(output_dir / \"queries.json\", \"w\") as f:\n            json.dump(queries, f, indent=4)\n\n    print(f\"Results saved to {output_dir}\")\n    print(\"Exiting...\")\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/optimize_nerfacto.py",
    "content": "import torch._dynamo\ntorch._dynamo.config.suppress_errors = True\n\nimport json\nfrom datetime import datetime\nfrom functools import reduce\nfrom pathlib import Path\nfrom typing import Any, Dict, Optional, Tuple\n\nimport open3d as o3d\nimport torch\nfrom jaxtyping import Float\nfrom params_proto import ARGS\nfrom pytorch3d.transforms import Transform3d, quaternion_to_matrix, random_quaternions\nfrom slugify import slugify\nfrom tqdm import tqdm\n\nfrom f3rm.features.clip import clip, tokenize\nfrom f3rm.features.clip.model import CLIP\nfrom f3rm.features.clip_extract import CLIPArgs\nfrom f3rm_robot.args import OptimizationArgs, validate_args\nfrom f3rm_robot.collision import has_collision\nfrom f3rm_robot.field_adapter import FeatureFieldAdapter, get_alpha\nfrom f3rm_robot.initial_proposals import (\n    NoProposalsError,\n    dense_voxel_grid,\n    marching_cubes_mask,\n    otsu_mask,\n    remove_statistical_outliers,\n    voxel_downsample,\n    density_threshold_mask,\n)\nfrom f3rm_robot.load import LoadState, load_nerfstudio_outputs\nfrom f3rm_robot.task import Task, get_tasks\nfrom f3rm_robot.utils import get_gripper_meshes, get_heatmap, sample_point_cloud\nfrom f3rm_robot.visualizer import BaseVisualizer, ViserVisualizer\n\nargs = OptimizationArgs\nvisualizer: Optional[BaseVisualizer] = None\n\nfrom nerfstudio.cameras.rays import Frustums, RaySamples\ndef ray_samples_from_coords(coords: Float[torch.Tensor, \"*b n 3\"]) -> RaySamples:\n    return RaySamples(\n        frustums=Frustums(origins=coords, directions=torch.zeros_like(coords), starts=0, ends=0, pixel_area=None),\n        camera_indices=torch.ones(1),\n    )\n\n\n\nclass SimpleFieldAdapter:\n    \"\"\"\n    A simplified field adapter that only provides RGB and density functionality\n    for standard NerfactoModel.\n    \"\"\"\n    def __init__(self, model, world_to_nerf):\n        self.model = model\n        self.field = model.field\n        self.world_to_nerf = world_to_nerf\n        \n    def get_ray_samples(self, world_points):\n        \"\"\"Get ray samples from world points by transforming into NeRF frame.\"\"\"\n        nerf_points = self.world_to_nerf.transform_points(world_points)\n        return ray_samples_from_coords(nerf_points)\n        \n    def get_density(self, world_points):\n        \"\"\"Get density from NeRF.\"\"\"\n        ray_samples = self.get_ray_samples(world_points)\n        density, _ = self.field.get_density(ray_samples)\n        return density\n        \n    def get_alpha(self, world_points, delta):\n        \"\"\"Get alpha from NeRF.\"\"\"\n        from f3rm_robot.field_adapter import get_alpha\n        return get_alpha(self.get_density(world_points), delta)\n        \n    def get_rgb(self, world_points):\n        \"\"\"Get RGB only from NeRF\"\"\"\n        ray_samples = self.get_ray_samples(world_points)\n        density, density_embedding = self.field.get_density(ray_samples)\n        from nerfstudio.field_components.field_heads import FieldHeadNames\n        field_outputs = self.field.get_outputs(ray_samples, density_embedding)\n        rgb = field_outputs[FieldHeadNames.RGB]\n        return rgb\n\ndef get_filtered_scene_pcd(load_state, device, voxel_size=0.01):\n    \"\"\"Get a filtered scene point cloud using density thresholding.\"\"\"\n    # Create a simplified adapter for the NerfactoModel\n    feature_field = SimpleFieldAdapter(\n        model=load_state.pipeline.model, \n        world_to_nerf=load_state.nerf_to_world.inverse()\n    )\n    \n    # Create dense voxel grid\n    voxel_grid = dense_voxel_grid(args.min_bounds, args.max_bounds, voxel_size).to(device)\n    og_voxel_grid_shape = voxel_grid.shape\n    voxel_grid = voxel_grid.reshape(-1, 3)\n    \n    # Apply density thresholding\n    with torch.no_grad():\n        alpha = feature_field.get_alpha(voxel_grid, voxel_size)\n    \n    alpha_vg = alpha.reshape(og_voxel_grid_shape[:-1])\n    \n    # Create mask for voxels with alpha above threshold\n    mask = alpha.squeeze(-1) > args.alpha_threshold * 0.1\n    voxel_grid = voxel_grid[mask]\n    \n    if len(voxel_grid) == 0:\n        print(\"No voxels above threshold found!\")\n        return o3d.geometry.PointCloud()\n    \n    # Apply gray background filtering\n    voxel_grid = filter_gray_background(voxel_grid, feature_field, gray_threshold=0.05, device=device)\n    \n    # Downsample and remove outliers\n    voxel_grid = voxel_downsample(voxel_grid, voxel_size)\n    voxel_grid, _ = remove_statistical_outliers(voxel_grid, num_points=50, std_ratio=4.0)\n    \n    # Get colors for visualization\n    with torch.no_grad():\n        rgb = feature_field.get_rgb(voxel_grid)\n    \n    # Convert to Open3D point cloud\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(voxel_grid.cpu().numpy())\n    pcd.colors = o3d.utility.Vector3dVector(rgb.cpu().numpy())\n    \n    return pcd\n\ndef filter_gray_background(voxel_grid, feature_field, gray_threshold=0.05, device=None):\n    \"\"\"\n    Filter out voxels that have gray color (likely background).\n    \"\"\"\n    if len(voxel_grid) == 0:\n        return voxel_grid\n        \n    # Query RGB values for each voxel\n    with torch.no_grad():\n        rgb = feature_field.get_rgb(voxel_grid)\n    \n    # Gray pixels have similar R, G, B values\n    # Calculate standard deviation across RGB channels for each voxel\n    rgb_std = rgb.std(dim=-1)\n    \n    # Non-gray voxels have higher standard deviation\n    non_gray_mask = rgb_std > gray_threshold\n    \n    print(f\"Removed {(~non_gray_mask).sum().item()} gray background voxels out of {len(voxel_grid)}\")\n    \n    return voxel_grid[non_gray_mask]\n\ndef visualize_scene(load_state, device, num_points=200_000, voxel_size=0.005):\n    \"\"\"Visualize the scene by sampling a point cloud from the NeRF and adding it to the visualizer.\"\"\"\n    pcd = get_filtered_scene_pcd(load_state, device, voxel_size=voxel_size)\n    visualizer.add_o3d_point_cloud(\"scene_pcd\", pcd, point_size=voxel_size + 0.001)\n    return pcd\n\ndef get_scene_pcd(load_state: LoadState, num_points: int, voxel_size: float) -> o3d.geometry.PointCloud:\n    # Set z to -0.01, so we can show the table as well in the point cloud\n    scene_min_bounds = (args.min_bounds[0], args.min_bounds[1], -0.01)\n    pcd = sample_point_cloud(load_state, num_points, scene_min_bounds, args.max_bounds)\n\n    # Downsample and remove outliers (floaters)\n    pcd = pcd.voxel_down_sample(voxel_size=voxel_size)\n    pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=1.0)\n    return pcd\n\ndef get_qp_feats(outputs: Dict[str, torch.Tensor]) -> Float[torch.Tensor, \"n c\"]:\n    \"\"\"Get the alpha-weighted features for the given outputs from the feature field.\"\"\"\n    alpha = get_alpha(outputs[\"density\"], delta=args.voxel_size)\n    features = outputs[\"feature\"]\n    return alpha * features\n\ndef compute_task_embedding(task: Task) -> Float[torch.Tensor, \"num_qps num_channels\"]:\n    \"\"\"Compute the Task Embedding which is the mean of the alpha-weighted features for the given task.\"\"\"\n    qp_feats = get_qp_feats({\"density\": task.demo_density, \"feature\": task.demo_features})\n    assert qp_feats.shape == (task.num_demos, task.num_query_points, task.num_channels)\n    task_emb = qp_feats.mean(dim=0)\n    return task_emb\n\ndef retrieve_task(\n    query: str, clip_model: CLIP, device: torch.device\n) -> Tuple[Task, Float[torch.Tensor, \"num_qps num_channels\"], Float[torch.Tensor, \"1 num_channels\"]]:\n    \"\"\"\n    Retrieve the most relevant task for a given query. Returns the Task, task embedding, and query embedding.\n    \"\"\"\n    # Retrieve relevant demonstrations by encoding query using CLIP and comparing it to the task embeddings.\n    with torch.no_grad():\n        tokens = tokenize(query).to(device)\n        query_emb = clip_model.encode_text(tokens)\n        query_emb /= query_emb.norm(dim=-1, keepdim=True)\n\n    # Compute mean embedding for each task, and compare to the query\n    tasks = get_tasks()\n    task_embs = torch.stack([compute_task_embedding(t) for t in tasks]).to(device)\n    mean_task_embs = task_embs.mean(dim=1)\n    task_sims = torch.cosine_similarity(query_emb, mean_task_embs)\n\n    # Select task with the highest similarity to the query\n    task_idx = torch.argmax(task_sims)\n    task_emb = task_embs[task_idx]\n    return tasks[task_idx], task_emb, query_emb\n\ndef get_initial_voxel_grid(\n    feature_field: FeatureFieldAdapter, query: str, clip_model: CLIP, device: torch.device\n) -> Tuple[Float[torch.Tensor, \"num_voxels 3\"], Float[torch.Tensor, \"num_voxels\"], Dict[str, int]]:\n    \"\"\"\n    Get the initial masked voxel grid based on density (alpha) and language (CLIP features). These correspond to the\n    coarse (x, y, z) proposals.\n\n    Returns voxel grid as a tensor of shape (num_voxels, 3), voxel similarities with language, and a dict with mettrics.\n    \"\"\"\n    # Firstly, we sample a dense voxel grid over the workspace and use marching cubes to only get the surface.\n    voxel_size = args.voxel_size\n    print(\">> min_bounds: \", args.min_bounds, \"max_bounds: \", args.max_bounds, \"voxel_size: \", voxel_size)\n    voxel_grid = dense_voxel_grid(args.min_bounds, args.max_bounds, voxel_size).to(device)\n    print(\">> Dense voxel grid shape: \", voxel_grid.shape) ## torch.Size([W, H, D, 3])\n    og_voxel_grid_shape = voxel_grid.shape\n    voxel_grid = voxel_grid.reshape(-1, 3)\n    metrics = {\"initial\": len(voxel_grid)}\n\n    # Initial alpha masking (i.e., density). Use marching cubes to only get surface.\n    with torch.no_grad():\n        alpha = feature_field.get_alpha(voxel_grid, voxel_size)\n\n    print(f\"Alpha stats: min={alpha.min().item()}, max={alpha.max().item()}, mean={alpha.mean().item()}\")\n    print(f\"Alpha > 0.1: {(alpha > 0.1).sum().item()} voxels\")\n    print(f\"Alpha > 0.01: {(alpha > 0.01).sum().item()} voxels\")\n    print(f\"Alpha > 0.001: {(alpha > 0.001).sum().item()} voxels\")\n\n    alpha_vg = alpha.reshape(og_voxel_grid_shape[:-1])\n    # voxel_grid = marching_cubes_mask(alpha_vg, args.alpha_threshold, args.min_bounds, args.max_bounds)\n    voxel_grid = density_threshold_mask(alpha_vg, args.alpha_threshold, args.min_bounds, args.max_bounds)\n    ## after marching cubes, voxel_grid is a sparse representation of the voxel grid.\n    print(\">> Voxel grid shape after marching cubes: \", voxel_grid.shape)\n    metrics[\"mcubes_masked\"] = len(voxel_grid)\n\n    # Add gray background filtering\n    voxel_grid = filter_gray_background(voxel_grid, feature_field, gray_threshold=0.05, device=device)\n    metrics[\"gray_filtered\"] = len(voxel_grid)\n    \n\n    # Down sample and remove outliers to get rid of floaters.\n    voxel_grid = voxel_downsample(voxel_grid, voxel_size)\n    voxel_grid, _ = remove_statistical_outliers(voxel_grid, num_points=50, std_ratio=4.0)\n\n\n    ## NOTE: voxel_grid is a sparse representation of the voxel grid. Instead of storing a full dense\n    ### WxHxDxF grid, we only store a the coordinates of the voxels that are occupied.\n\n    metrics[\"downsampled_remove_outliers\"] = len(voxel_grid)\n\n    print(f\"Number of voxels after masking using NeRF density: {len(voxel_grid)}\")\n    print(\">> Metrics: \", metrics)\n\n    if args.visualize:\n        with torch.no_grad():\n            rgb = feature_field.get_rgb(voxel_grid)\n        visualizer.add_point_cloud(\n            \"initial_proposals/alpha_masked\",\n            voxel_grid.cpu().numpy(),\n            rgb.cpu().numpy(),\n            point_size=voxel_size,\n            visible=False,\n        )\n\n    # Feature masking by comparing each voxel's feature with the user query and negatives\n    queries = [query, \"object\", \"things\", \"stuff\", \"texture\"]  # we use the negatives from LERF\n    with torch.no_grad():\n        tokens = tokenize(queries).to(device)\n        query_embs = clip_model.encode_text(tokens).float()\n        query_embs /= query_embs.norm(dim=-1, keepdim=True)\n\n    ## NOTE: query feature field at the voxel_grid points\n    with torch.no_grad():\n        outputs = feature_field(voxel_grid)\n    voxel_feats = get_qp_feats(outputs)\n    voxel_feats /= voxel_feats.norm(dim=-1, keepdim=True)\n\n    # Compute softmax over similarities between voxel features and query embeddings\n    voxel_sims = voxel_feats @ query_embs.T\n    probs = voxel_sims / args.softmax_temperature\n    probs = probs.softmax(dim=-1)\n    probs = torch.nan_to_num_(probs, nan=1e-7)\n\n    # Sample from the distribution, 0-index is the positive query\n    labels = torch.multinomial(probs, num_samples=1)\n    softmax_mask = (labels == 0).squeeze()\n    voxel_grid = voxel_grid[softmax_mask]\n    voxel_sims = voxel_sims[:, 0][softmax_mask]\n\n    # If no voxel sims, then the query didn't match to anything so raise error\n    if len(voxel_grid) == 0:\n        raise NoProposalsError(\n            f'No proposals found for query \"{query}\" after language masking. Try use a different query.'\n        )\n\n    metrics[\"language_masked\"] = len(voxel_grid)\n    print(f\"Number of voxels after language masking using CLIP features: {len(voxel_grid)}\")\n    if args.visualize:\n        visualizer.add_point_cloud(\n            \"initial_proposals/lang_probs\",\n            voxel_grid.cpu().numpy(),\n            get_heatmap(voxel_sims),\n            point_size=voxel_size,\n            visible=False,\n        )\n    return voxel_grid, voxel_sims, metrics\n\ndef get_language_guidance_fn(voxel_sims: Float[torch.Tensor, \"num_voxels\"], query_emb: Float[torch.Tensor, \"1 c\"]):\n    \"\"\"\n    Get the function for computing the language guidance given query point features and the embedded user query.\n    This works well in our experiments, but you may need to tune it for your environment and use case.\n    \"\"\"\n    lang_loss_fn = torch.nn.CosineSimilarity()\n    feat_mask, _ = otsu_mask(voxel_sims)\n    remaining_voxel_sims = voxel_sims[feat_mask]\n    sim_min = remaining_voxel_sims.min()\n    sim_max = remaining_voxel_sims.max()\n\n    def language_guidance(qp_feats):\n        qp_mean_feats = qp_feats.mean(dim=1)\n        lang_losses = lang_loss_fn(qp_mean_feats, query_emb)\n        lang_losses = (lang_losses - sim_min) / (sim_max - sim_min)\n\n        # We consider the guidance as a multiplier. Since pose loss is negative cosine similarity, we want the\n        # multiplier to be higher when the proposal matches the language query.\n        lang_multiplier = 1 + lang_losses\n        # Don't let multiplier go below 0 as positive pose loss with negative multiplier can mess things up\n        lang_multiplier = torch.clamp(lang_multiplier, min=0)\n        return lang_multiplier\n\n    return language_guidance\n\ndef language_pose_optimization(\n    feature_field: FeatureFieldAdapter, clip_model: CLIP, query: str, device: torch.device\n) -> Dict[str, Any]:\n    \"\"\"\n    Optimize 6-DOF poses for the given language query. We return the ranked grasps after optimization and the metrics.\n    \"\"\"\n    metrics = {\"query\": query}\n\n    # Retrieve the relevant task for the query, and compute the task embedding\n    task, task_emb, query_emb = retrieve_task(query, clip_model, device)\n    task_emb = task_emb.reshape(-1)  # [num_qps * num_channels]\n    query_points = task.query_points.to(device)\n    print(f'Matched \"{query}\" to task {task.name}.')\n    metrics[\"retrieved_task\"] = task.name\n\n    # Get coarse voxel grid proposals using alpha and language-masking.\n    voxel_grid, voxel_sims, metrics[\"num_voxels\"] = get_initial_voxel_grid(feature_field, query, clip_model, device)\n\n    # Sample rotations for each voxel to get the initial 6-DOF proposals. We parametrize rotations as quaternions and\n    # multiply by a scale factor so the scale is more reasonable for optimization. You can tune this to your liking.\n    translations = voxel_grid.repeat_interleave(args.num_rots_per_voxel, dim=0)\n    rotations = random_quaternions(len(translations), device=device)\n    rot_scale = 0.1\n    rotations = rotations * rot_scale\n    metrics[\"num_proposals\"] = {\"initial\": len(translations)}\n\n    def get_rotation_mats(rotations_):\n        \"\"\"Convert quaternions back into rotation matrices.\"\"\"\n        # Normalize the quaternions so they're unit and valid rotations\n        rotations_ = rotations_ / rotations_.norm(dim=-1, keepdim=True)\n        return quaternion_to_matrix(rotations_ * (1 / rot_scale))\n\n    def get_grasps_to_world(translations_, rotations_):\n        \"\"\"Convert translations and rotations into Transform3d.\"\"\"\n        rotation_mats_ = get_rotation_mats(rotations_)\n        # We need to transpose because Transform3d uses row vector rather than column vector convention\n        return Transform3d(device=device).rotate(rotation_mats_.transpose(1, 2)).translate(translations_)\n\n    # Remove initial grasps in collision. We did not optimize our collision checking, so it is a bit slow.\n    grasps_to_world = get_grasps_to_world(translations, rotations)\n    with torch.no_grad():\n        collision_detected = has_collision(feature_field, grasps_to_world)\n    translations = translations[~collision_detected]\n    rotations = rotations[~collision_detected]\n    metrics[\"num_proposals\"][\"initial_cfree\"] = len(translations)\n    print(f\"Number of 6-DOF proposals: {len(translations)}.\")\n\n    # Shuffle the remaining proposals\n    permutation = torch.randperm(len(translations), device=device)\n    translations = translations[permutation]\n    rotations = rotations[permutation]\n\n    # Setup optimizer\n    translations.requires_grad_()\n    rotations.requires_grad_()\n    optimizer = torch.optim.Adam([translations, rotations], lr=args.lr)\n    pose_loss_fn = torch.nn.CosineSimilarity()\n    language_guidance_fn = get_language_guidance_fn(voxel_sims, query_emb)\n    batch_size = args.ray_samples_per_batch // len(query_points)\n    step_losses = None\n\n    # Now we can optimize!\n    for step in tqdm(range(args.num_steps), desc=f'Optimizing poses for \"{query}\"'):\n        optimizer.zero_grad()\n        all_grasps_to_world = []\n        step_losses = []\n        num_proposals = len(translations)\n\n        for i in range(0, num_proposals, batch_size):\n            batch_translations = translations[i : i + batch_size]\n            batch_rotations = rotations[i : i + batch_size]\n\n            # Transform query points by the proposals, and forward through the feature field\n            grasps_to_world = get_grasps_to_world(batch_translations, batch_rotations)\n            all_grasps_to_world.append(grasps_to_world)\n            qps = grasps_to_world.transform_points(query_points)\n            outputs = feature_field(qps)\n            qp_feats = get_qp_feats(outputs)\n\n            # Compute pose loss and language guidance\n            pose_loss = -pose_loss_fn(qp_feats.flatten(1, 2), task_emb)\n            lang_guidance = language_guidance_fn(qp_feats)\n            batch_losses = lang_guidance * pose_loss\n            loss = batch_losses.mean()\n            loss.backward()\n            step_losses.append(batch_losses.detach())\n\n        # Optimizer step\n        optimizer.step()\n        step_losses = torch.cat(step_losses)\n\n        # Visualize top poses. Note this does not take into account collisions.\n        if args.visualize:\n            sorted_losses, sorted_indices = step_losses.sort(descending=False)\n            best_losses, best_indices = (\n                sorted_losses[: args.num_poses_to_visualize],\n                sorted_indices[: args.num_poses_to_visualize],\n            )\n            all_grasps_to_world = Transform3d.stack(*all_grasps_to_world)\n            best_grasps_to_world = all_grasps_to_world[best_indices]\n            # We use jet cmap as viser lighting is a bit messed up for turbo\n            heatmap = torch.from_numpy(get_heatmap(best_losses, invert=True, cmap_name=\"jet\")).to(device)\n            for idx, (verts, faces) in enumerate(zip(*get_gripper_meshes(best_grasps_to_world))):\n                visualizer.add_mesh(f\"grasps/grasp_{idx + 1}\", verts, faces, heatmap[idx])\n\n        # Prune proposals\n        if args.keep_proportion < 1.0 and num_proposals > args.min_proposals and step > args.prune_after:\n            new_num_proposals = max(int(args.keep_proportion * num_proposals), args.min_proposals)\n            losses, best_indices = torch.topk(step_losses, k=new_num_proposals, largest=False)\n            translations = translations[best_indices].detach().clone()\n            rotations = rotations[best_indices].detach().clone()\n            # Need to set up optimizer again\n            translations.requires_grad_()\n            rotations.requires_grad_()\n            optimizer = torch.optim.Adam([translations, rotations], lr=args.lr)\n            metrics[\"num_proposals\"][f\"pruned_step_{step:04d}\"] = new_num_proposals\n\n    # Optimization finished, check remaining grasps for collisions\n    grasps_to_world = get_grasps_to_world(translations, rotations)\n    with torch.no_grad():\n        collision_detected = has_collision(feature_field, grasps_to_world)\n    print(f\"Removed {collision_detected.sum()} of {len(grasps_to_world)} optimized proposals in collision\")\n    grasps_to_world = grasps_to_world[~collision_detected]\n    print(f'Final number of 6-DOF proposals for \"{query}\": {len(grasps_to_world)}')\n    metrics[\"num_proposals\"][\"final_cfree\"] = len(grasps_to_world)\n\n    # Sort the grasps by their losses before returning\n    masked_losses = step_losses[~collision_detected]\n    sorted_losses, sorted_indices = masked_losses.sort(descending=False)\n    grasps_to_world = grasps_to_world[sorted_indices]\n    results = {\"grasps_to_world\": grasps_to_world, \"metrics\": metrics}\n\n    # Show the best grasps without collisions\n    if args.visualize:\n        best_losses = sorted_losses[: args.num_poses_to_visualize]\n        best_grasps_to_world = grasps_to_world[: args.num_poses_to_visualize]\n        all_verts, all_faces = get_gripper_meshes(best_grasps_to_world)\n        # We use jet cmap as viser lighting is a bit messed up for turbo\n        heatmap = torch.from_numpy(get_heatmap(best_losses, invert=True, cmap_name=\"jet\")).to(device)\n        gripper_meshes = []\n        for idx, (verts, faces) in enumerate(zip(all_verts, all_faces)):\n            visualizer.add_mesh(f\"grasps/grasp_{idx + 1}\", verts, faces, heatmap[idx])\n            gripper_mesh = o3d.geometry.TriangleMesh()\n            gripper_mesh.vertices = o3d.utility.Vector3dVector(verts)\n            gripper_mesh.triangles = o3d.utility.Vector3iVector(faces)\n            gripper_mesh.paint_uniform_color(heatmap[idx].cpu().numpy())\n            gripper_meshes.append(gripper_mesh)\n        # Single mesh with all the grippers\n        gripper_mesh = reduce(lambda a, b: a + b, gripper_meshes)\n        results[\"gripper_mesh\"] = gripper_mesh\n\n    return results\n\ndef entrypoint():\n    ARGS.parse_args()\n    validate_args()\n\n    # Load feature field\n    print(f\"Loading NeRF model from {args.scene}...\")\n    load_state = load_nerfstudio_outputs(args.scene)\n    device = load_state.pipeline.device\n    \n    # Setup output directory and save args\n    output_dir = Path(args.scene).parent / \"scene_visualization\" / datetime.now().strftime(\"%Y-%m-%d_%H%M%S\")\n    output_dir.mkdir(parents=True, exist_ok=True)\n    with open(output_dir / \"args.json\", \"w\") as f:\n        json.dump(vars(args), f, indent=4)\n\n    # Visualize scene\n    global visualizer\n    if args.visualize:\n        visualizer = ViserVisualizer(args.viser_host, args.viser_port)\n        scene_pcd = visualize_scene(load_state, device, voxel_size=args.voxel_size)\n        o3d.io.write_point_cloud(str(output_dir / \"scene.ply\"), scene_pcd)\n        print(f\"Saved scene point cloud to {output_dir / 'scene.ply'}\")\n        \n        # Keep the visualizer running until user presses Ctrl+C\n        print(\"Visualization running. Press Ctrl+C to exit.\")\n        try:\n            while True:\n                pass\n        except KeyboardInterrupt:\n            print(\"\\nExiting...\")\n    \n    return 0\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/task.py",
    "content": "from dataclasses import dataclass\nfrom typing import List, Tuple\n\nimport torch\nfrom jaxtyping import Float\n\nfrom f3rm_robot.assets import get_asset_path\n\n\ndef sample_query_points(\n    num_samples: int, mean: Tuple[float, float, float] = (0, 0, 0), std_dev: float = 0.0075\n) -> Float[torch.Tensor, \"num_qps 3\"]:\n    \"\"\"\n    Sample query points from a 3D gaussian with specified mean and standard deviation.\n    We use the same standard deviation for the 3 dimensions. Use this to generate query points for a new Task.\n    \"\"\"\n    assert std_dev > 0, \"std_dev must be positive.\"\n\n    mean = torch.tensor(mean).float()\n    variance = std_dev**2\n    gaussian = torch.distributions.MultivariateNormal(loc=mean, covariance_matrix=torch.eye(3) * variance)\n    query_points = gaussian.sample(torch.Size([num_samples]))\n    return query_points\n\n\n@dataclass(frozen=True)\nclass Task:\n    \"\"\"\n    A Task which is defined by the query points, and demo embeddings. We store the demo query point features and\n    density, as to get the alpha-weighted features we need the voxel size which may vary.\n\n    The averaging of the alpha-weighted features is done upstream in the optimization script.\n    \"\"\"\n\n    name: str\n    query_points: Float[torch.Tensor, \"num_qps 3\"]\n\n    # Features and density for each demo\n    demo_features: Float[torch.Tensor, \"num_demos num_qps num_channels\"]\n    demo_density: Float[torch.Tensor, \"num_demos num_qps 1\"]\n\n    def __post_init__(self):\n        assert len(self.query_points) > 0, f\"Query points cannot be empty for task {self.name}\"\n        assert len(self.demo_features) > 0, f\"Must have at least one demo for task {self.name}\"\n        assert (\n            self.demo_features.shape[:2] == self.demo_density.shape[:2]\n        ), f\"Features and density must have same number of demos and query points.\"\n        assert self.demo_density.ndim == 3 and self.demo_density.shape[-1] == 1, \"Density must be 3D with 1 channel.\"\n        assert self.demo_features.ndim == 3, \"Features must be 3D.\"\n\n    @property\n    def num_demos(self) -> int:\n        return len(self.demo_features)\n\n    @property\n    def num_query_points(self) -> int:\n        return len(self.query_points)\n\n    @property\n    def num_channels(self) -> int:\n        return self.demo_features.shape[-1]\n\n\ndef get_tasks() -> List[Task]:\n    \"\"\"Load all tasks from cache. Note these are for ClIP ViT-L/14@336px.\"\"\"\n    task_names = [\"caterpillar_ear\", \"mug_handle\", \"mug_lip\", \"rack_place\", \"screwdriver_handle\"]\n    task_paths = [get_asset_path(f\"tasks/{task_name}.pt\") for task_name in task_names]\n    tasks = [torch.load(task_path) for task_path in task_paths]\n    return tasks\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/utils.py",
    "content": "from functools import lru_cache\nfrom typing import Tuple, Union\n\nimport numpy as np\nimport open3d as o3d\nimport torch\nfrom jaxtyping import Float\nfrom matplotlib import colormaps\nfrom pytorch3d.transforms import Transform3d\nfrom tqdm import tqdm\n\nfrom f3rm_robot.load import LoadState\n\n\ndef get_heatmap(\n    values: Float[Union[torch.Tensor, np.ndarray], \"n\"], cmap_name: str = \"turbo\", invert: bool = False,\n    colormap_min=0.0, colormap_max=1.0,\n) -> Float[np.ndarray, \"n 3\"]:\n    \"\"\"\n    Get the RGB heatmap for a given set of values. We normalize the values to [0, 1] and then use the given\n    colormap. We optionally invert the values before normalizing.\n\n    Args:\n        values: Values to convert to a heatmap.\n        cmap_name: Name of the colormap to use.\n        invert: Whether to invert the values before normalizing.\n    Returns:\n        RGB heatmap as a numpy array.\n    \"\"\"\n    if invert:\n        values = -values\n    values = (values - values.min()) / (values.max() - values.min())\n    values = values * (colormap_max - colormap_min) + colormap_min\n    if isinstance(values, torch.Tensor):\n        values = values.detach().cpu().numpy()\n    rgb = colormaps[cmap_name](values)[..., :3]  # don't need alpha channel\n    return rgb\n\n\ndef sample_point_cloud(\n    load_state: LoadState,\n    num_points: int,\n    bbox_min: Tuple[float, float, float] = (-1.0, -1.0, -1.0),\n    bbox_max: Tuple[float, float, float] = (1.0, 1.0, 1.0),\n    use_bbox: bool = True,\n) -> o3d.geometry.PointCloud:\n    \"\"\"\n    Sample a point cloud given the load state. We sample points until we have at least `num_points` points\n    in the point cloud. We optionally use a bounding box to filter the points which is specified in the\n    world frame (the load state contains the NeRF to world transform).\n\n    Modified from: https://github.com/nerfstudio-project/nerfstudio/blob/main/nerfstudio/exporter/exporter_utils.py\n    \"\"\"\n    pipeline = load_state.pipeline\n\n    # Setup bounding box min and max\n    comp_l = torch.tensor(bbox_min, device=pipeline.device)\n    comp_m = torch.tensor(bbox_max, device=pipeline.device)\n    assert torch.all(comp_l < comp_m), f\"Bounding box min {bbox_min} must be smaller than max {bbox_max}\"\n\n    pbar = tqdm(total=num_points, desc=\"Sampling point cloud for visualization\")\n    points = []\n    rgbs = []\n\n    while pbar.n < num_points:\n        with torch.no_grad():\n            ray_bundle, _ = pipeline.datamanager.next_train(0)\n            output = pipeline.model(ray_bundle)\n        rgb = output[\"rgb\"]\n\n        # Convert depth to NeRF then world coordinates\n        depth = output[\"depth\"]\n        nerf_points = ray_bundle.origins + ray_bundle.directions * depth\n        world_points = load_state.nerf_to_world.transform_points(nerf_points)\n\n        # Only keep points within the bounding box\n        if use_bbox:\n            mask = torch.all(torch.concat([world_points > comp_l, world_points < comp_m], dim=-1), dim=-1)\n            world_points = world_points[mask]\n            rgb = rgb[mask]\n\n        points.append(world_points)\n        rgbs.append(rgb)\n        pbar.update(len(world_points))\n\n    # Concat all points and rgbs and create a point cloud\n    points = torch.cat(points, dim=0)\n    rgbs = torch.cat(rgbs, dim=0)\n\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(points.cpu().numpy())\n    pcd.colors = o3d.utility.Vector3dVector(rgbs.cpu().numpy())\n    return pcd\n\n\n@lru_cache(maxsize=1)\ndef get_gripper_mesh(include_sphere: bool = True, radius: float = 0.003) -> o3d.geometry.TriangleMesh:\n    \"\"\"Get a skeleton gripper mesh.\"\"\"\n    # Create left and right fingers\n    left_finger = o3d.geometry.TriangleMesh.create_cylinder(radius=radius, height=0.075)\n    right_finger = o3d.geometry.TriangleMesh.create_cylinder(radius=radius, height=0.075)\n\n    # Offset between bottom of fingers and the center of the grasp\n    left_finger.translate((0, 0.04, 0.075 / 2 - 0.01))\n    right_finger.translate((0, -0.04, 0.075 / 2 - 0.01))\n\n    # Bar connecting the fingers, rotate so it's horizontal\n    bar = o3d.geometry.TriangleMesh.create_cylinder(radius=radius, height=0.084)\n    bar.rotate(np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]), center=(0, 0, 0))\n    bar.translate((0, 0, 0.065))\n\n    # Top extension of the gripper\n    top_ext = o3d.geometry.TriangleMesh.create_cylinder(radius=radius, height=0.08)\n    top_ext.translate((0, 0, 0.105))\n\n    if include_sphere:\n        sphere = o3d.geometry.TriangleMesh.create_sphere(radius=radius)\n        gripper_mesh = left_finger + right_finger + top_ext + bar + sphere\n    else:\n        gripper_mesh = left_finger + right_finger + top_ext + bar\n    return gripper_mesh\n\n\ndef get_gripper_meshes(gripper_poses: Transform3d) -> Tuple[Float[np.ndarray, \"n v 3\"], Float[np.ndarray, \"n f 3\"]]:\n    \"\"\"\n    Get vertices and faces for given gripper poses. Used for visualization purposes and returns the vertices and faces\n    for each gripper pose.\n    \"\"\"\n    # Get the gripper mesh and transform the vertices by each gripper pose\n    gripper_mesh = get_gripper_mesh()\n    vertices = np.asarray(gripper_mesh.vertices)\n    vertices = torch.from_numpy(vertices).float().to(gripper_poses.device)\n    with torch.no_grad():\n        all_vertices = gripper_poses.transform_points(vertices)\n\n    # Get the faces\n    faces = np.asarray(gripper_mesh.triangles)\n    faces = torch.from_numpy(faces).to(gripper_poses.device)\n    all_faces = faces.repeat(len(gripper_poses), 1, 1)\n\n    # Convert to numpy\n    all_vertices = all_vertices.cpu().numpy()\n    all_faces = all_faces.cpu().numpy()\n    return all_vertices, all_faces\n"
  },
  {
    "path": "third_party/f3rm/f3rm_robot/visualizer.py",
    "content": "import tempfile\nfrom abc import ABC, abstractmethod\nfrom typing import Callable, Tuple\n\nimport numpy as np\nimport open3d as o3d\n\n\nclass BaseVisualizer(ABC):\n    @abstractmethod\n    def add_point_cloud(self, key: str, points: np.ndarray, colors: np.ndarray, **kwargs):\n        raise NotImplementedError\n\n    def add_o3d_point_cloud(self, key: str, point_cloud: o3d.geometry.PointCloud, **kwargs):\n        points = np.asarray(point_cloud.points)\n        colors = np.asarray(point_cloud.colors)\n        return self.add_point_cloud(key, points, colors, **kwargs)\n\n    @abstractmethod\n    def add_mesh(self, key: str, vertices: np.ndarray, faces: np.ndarray, colors: np.ndarray, **kwargs):\n        raise NotImplementedError\n\n    def add_o3d_mesh(self, key: str, mesh: o3d.geometry.TriangleMesh, **kwargs):\n        vertices = np.asarray(mesh.vertices)\n        faces = np.asarray(mesh.triangles)\n        colors = np.asarray(mesh.vertex_colors)\n        return self.add_mesh(key, vertices, faces, colors, **kwargs)\n\n\nclass ViserVisualizer(BaseVisualizer):\n    \"\"\"Viser visualizer: https://github.com/nerfstudio-project/viser\"\"\"\n\n    def __init__(self, host: str, port: int):\n        from viser import ViserServer\n        from viser.theme import TitlebarButton, TitlebarConfig, TitlebarImage\n\n        self.server = ViserServer(host=host, port=port)\n        self.host = host\n        # Port may have changed...\n        # self.port = self.server._server._port\n        self.port = self.server.get_port()\n\n        # Configure the theme following: https://viser.studio/examples/13_theming/\n        buttons = (\n            TitlebarButton(text=\"GitHub\", icon=\"GitHub\", href=\"https://github.com/f3rm/f3rm\"),\n            TitlebarButton(\n                text=\"Visualizer Guide\",\n                icon=\"Description\",\n                href=\"https://github.com/f3rm/f3rm/tree/main/f3rm_robot#using-the-visualizer\",\n            ),\n        )\n\n        image_url = \"https://raw.githubusercontent.com/f3rm/f3rm/main/assets/images/ff_icon.png\"\n        image = TitlebarImage(\n            image_url_light=image_url,\n            image_url_dark=image_url,\n            image_alt=\"F3RM Icon\",\n        )\n        titlebar_theme = TitlebarConfig(buttons=buttons, image=image)\n        self.server.configure_theme(titlebar_content=titlebar_theme)\n\n    @property\n    def url(self) -> str:\n        return f\"http://{self.host}:{self.port}\"\n\n    def add_query_gui(self) -> Tuple[Callable[[], str], Callable[[], None]]:\n        \"\"\"\n        Add the GUI for accepting user queries for language-guided manipulation. Returns two callables:\n            1. wait_for_input: block until the user submits a query, then returns the query\n            2. enable_gui: enable the GUI, so we can accept another query\n\n        This is a bit hacky and uses threading.Event to block the main thread until the user submits a query.\n        \"\"\"\n        from threading import Event\n\n        with self.server.add_gui_folder(\"Language Query\"):\n            gui_text = self.server.add_gui_text(\n                label=\"Query\", initial_value=\"\", hint=\"Enter the object you want to grasp.\"\n            )\n            gui_submit = self.server.add_gui_button(\"Submit\")\n\n        click_event = Event()\n\n        def click_handler(*_):\n            # Set the event to unblock the main thread, and disable the GUI\n            click_event.set()\n            gui_text.disabled = True\n            gui_submit.disabled = True\n\n        gui_submit.on_click(lambda _: click_handler())\n\n        def wait_for_input():\n            \"\"\"Wait for user to submit a query using the button.\"\"\"\n            # Block until event is set and clear it\n            click_event.wait()\n            click_event.clear()\n            return gui_text.value\n\n        def enable_gui():\n            # Enable the GUI, so we can accept another query and clear the text\n            gui_text.disabled = False\n            gui_text.value = \"\"\n            gui_submit.disabled = False\n\n        return wait_for_input, enable_gui\n\n    def add_point_cloud(self, key: str, points: np.ndarray, colors: np.ndarray, **kwargs):\n        return self.server.add_point_cloud(key, points, colors, **kwargs)\n\n    def add_mesh(self, key: str, vertices: np.ndarray, faces: np.ndarray, colors: np.ndarray, **kwargs):\n        return self.server.add_mesh_simple(key, vertices, faces, colors, **kwargs)\n\n    def add_o3d_mesh(self, key: str, mesh: o3d.geometry.TriangleMesh, **kwargs):\n        # Viser only supports single RGB colors for meshes, so we write it to a GLB file. Viser does this for\n        # trimesh. Since we write and read it isn't optimal, but it suffices for now.\n        with tempfile.NamedTemporaryFile(suffix=\".glb\") as tmp_file:\n            o3d.io.write_triangle_mesh(tmp_file.name, mesh)\n            with open(tmp_file.name, \"rb\") as f:\n                glb_data = f.read()\n            self.server.add_glb(key, glb_data, **kwargs)\n"
  },
  {
    "path": "third_party/f3rm/install.sh",
    "content": "pip install torch torchvision \npip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch\npip install nerfstudio==0.3.0\npip install viser==0.1.12  \npip install tyro==0.6.6\n"
  },
  {
    "path": "third_party/f3rm/pyproject.toml",
    "content": "[project]\nname = \"f3rm\"\nversion = \"0.0.6\"\ndescription = \"F3RM: Feature Fields for Robotic Manipulation\"\nreadme = \"README.md\"\nrequires-python = \">=3.8\"\nlicense = { file = \"LICENSE\" }\nkeywords = [\"nerf\", \"feature-fields\", \"robotics\"]\nauthors = [\n    { name = \"William Shen\", email = \"willshen@csail.mit.edu\" },\n    { name = \"Ge Yang\", email = \"geyang@csail.mit.edu\" },\n]\nclassifiers = [\n    \"License :: OSI Approved :: MIT License\",\n    \"Programming Language :: Python :: 3\",\n]\n\ndependencies = [\n    \"einops\",\n    \"ftfy\",\n    \"gdown\",\n    \"matplotlib\",\n    # Last release before v1.0.0 which breaks things\n    #\"nerfstudio==0.3.4\",\n    \"numpy\",\n    \"pillow\",\n    \"regex\",\n    \"torchtyping\",\n    \"tqdm\",\n]\n\n[project.optional-dependencies]\ndev = [\n    \"black\",\n    \"isort\",\n]\nrobot = [\n    \"open3d\",\n    \"params-proto\",\n    \"PyMCubes\",\n    \"python-slugify\",\n    \"viser\",\n]\n\n[tool.black]\nline-length = 120\n\n[project.urls]\n\"Homepage\" = \"https://f3rm.csail.mit.edu\"\n\"Source\" = \"https://github.com/f3rm/f3rm\"\n\n[project.entry-points.\"nerfstudio.method_configs\"]\nf3rm = \"f3rm.f3rm_config:f3rm_method\"\n\n[project.scripts]\nf3rm-download-data = \"f3rm.scripts.download_datasets:main\"\nf3rm-optimize = \"f3rm_robot.optimize:entrypoint\"\n\n[tool.setuptools.packages]\nfind = { include = [\"f3rm\", \"f3rm.*\", \"f3rm_robot\", \"f3rm_robot.*\"] }\n\n[tool.setuptools.package-data]\n\"f3rm.scripts.images\" = [\"*.png\"]  # images for demo CLIP and DINO features\n\"f3rm.features.clip\" = [\"bpe_simple_vocab_16e6.txt.gz\", \"README.md\"]  # CLIP assets\n\"f3rm_robot\" = [\"README.md\"]\n\"f3rm_robot.assets\" = [\"panda_gripper_visual.obj\", \"tasks/*.pt\"]\n\n[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\""
  },
  {
    "path": "third_party/f3rm/saved_renderers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCollection of renderers\n\nExample:\n\n.. code-block:: python\n\n    field_outputs = field(ray_sampler)\n    weights = ray_sampler.get_weights(field_outputs[FieldHeadNames.DENSITY])\n\n    rgb_renderer = RGBRenderer()\n    rgb = rgb_renderer(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n\n\"\"\"\n\nimport contextlib\nimport math\nfrom typing import Generator, Literal, Optional, Tuple, Union\n\nimport nerfacc\nimport torch\nfrom jaxtyping import Float, Int\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.utils import colors\nfrom nerfstudio.utils.math import components_from_spherical_harmonics, safe_normalize\n\nBackgroundColor = Union[Literal[\"random\", \"last_sample\", \"black\", \"white\"], Float[Tensor, \"3\"], Float[Tensor, \"*bs 3\"]]\nBACKGROUND_COLOR_OVERRIDE: Optional[Float[Tensor, \"3\"]] = None\n\n\n@contextlib.contextmanager\ndef background_color_override_context(mode: Float[Tensor, \"3\"]) -> Generator[None, None, None]:\n    \"\"\"Context manager for setting background mode.\"\"\"\n    global BACKGROUND_COLOR_OVERRIDE\n    old_background_color = BACKGROUND_COLOR_OVERRIDE\n    try:\n        BACKGROUND_COLOR_OVERRIDE = mode\n        yield\n    finally:\n        BACKGROUND_COLOR_OVERRIDE = old_background_color\n\n\nclass RGBRenderer(nn.Module):\n    \"\"\"Standard volumetric rendering.\n\n    Args:\n        background_color: Background color as RGB. Uses random colors if None.\n    \"\"\"\n\n    def __init__(self, background_color: BackgroundColor = \"random\") -> None:\n        super().__init__()\n        self.background_color: BackgroundColor = background_color\n\n    @classmethod\n    def combine_rgb(\n        cls,\n        rgb: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        background_color: BackgroundColor = \"random\",\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Composite samples along ray and render color image.\n        If background color is random, no BG color is added - as if the background was black!\n\n        Args:\n            rgb: RGB for each sample\n            weights: Weights for each sample\n            background_color: Background color as RGB.\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs rgb values.\n        \"\"\"\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            if background_color == \"last_sample\":\n                raise NotImplementedError(\"Background color 'last_sample' not implemented for packed samples.\")\n            comp_rgb = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=rgb, ray_indices=ray_indices, n_rays=num_rays\n            )\n            accumulated_weight = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            comp_rgb = torch.sum(weights * rgb, dim=-2)\n            accumulated_weight = torch.sum(weights, dim=-2)\n        if BACKGROUND_COLOR_OVERRIDE is not None:\n            background_color = BACKGROUND_COLOR_OVERRIDE\n        if background_color == \"random\":\n            # If background color is random, the predicted color is returned without blending,\n            # as if the background color was black.\n            return comp_rgb\n        elif background_color == \"last_sample\":\n            # Note, this is only supported for non-packed samples.\n            background_color = rgb[..., -1, :]\n        background_color = cls.get_background_color(background_color, shape=comp_rgb.shape, device=comp_rgb.device)\n\n        assert isinstance(background_color, torch.Tensor)\n        comp_rgb = comp_rgb + background_color * (1.0 - accumulated_weight)\n        return comp_rgb\n\n    @classmethod\n    def get_background_color(\n        cls, background_color: BackgroundColor, shape: Tuple[int, ...], device: torch.device\n    ) -> Union[Float[Tensor, \"3\"], Float[Tensor, \"*bs 3\"]]:\n        \"\"\"Returns the RGB background color for a specified background color.\n        Note:\n            This function CANNOT be called for background_color being either \"last_sample\" or \"random\".\n\n        Args:\n            background_color: The background color specification. If a string is provided, it must be a valid color name.\n            shape: Shape of the output tensor.\n            device: Device on which to create the tensor.\n\n        Returns:\n            Background color as RGB.\n        \"\"\"\n        assert background_color not in {\"last_sample\", \"random\"}\n        assert shape[-1] == 3, \"Background color must be RGB.\"\n        if BACKGROUND_COLOR_OVERRIDE is not None:\n            background_color = BACKGROUND_COLOR_OVERRIDE\n        if isinstance(background_color, str) and background_color in colors.COLORS_DICT:\n            background_color = colors.COLORS_DICT[background_color]\n        assert isinstance(background_color, Tensor)\n\n        # Ensure correct shape\n        return background_color.expand(shape).to(device)\n\n    def blend_background(\n        self,\n        image: Tensor,\n        background_color: Optional[BackgroundColor] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Blends the background color into the image if image is RGBA.\n        Otherwise no blending is performed (we assume opacity of 1).\n\n        Args:\n            image: RGB/RGBA per pixel.\n            opacity: Alpha opacity per pixel.\n            background_color: Background color.\n\n        Returns:\n            Blended RGB.\n        \"\"\"\n        if image.size(-1) < 4:\n            return image\n\n        rgb, opacity = image[..., :3], image[..., 3:]\n        if background_color is None:\n            background_color = self.background_color\n            if background_color in {\"last_sample\", \"random\"}:\n                background_color = \"black\"\n        background_color = self.get_background_color(background_color, shape=rgb.shape, device=rgb.device)\n        assert isinstance(background_color, torch.Tensor)\n        return rgb * opacity + background_color.to(rgb.device) * (1 - opacity)\n\n    def blend_background_for_loss_computation(\n        self,\n        pred_image: Tensor,\n        pred_accumulation: Tensor,\n        gt_image: Tensor,\n    ) -> Tuple[Tensor, Tensor]:\n        \"\"\"Blends a background color into the ground truth and predicted image for\n        loss computation.\n\n        Args:\n            gt_image: The ground truth image.\n            pred_image: The predicted RGB values (without background blending).\n            pred_accumulation: The predicted opacity/ accumulation.\n        Returns:\n            A tuple of the predicted and ground truth RGB values.\n        \"\"\"\n        background_color = self.background_color\n        if background_color == \"last_sample\":\n            background_color = \"black\"  # No background blending for GT\n        elif background_color == \"random\":\n            background_color = torch.rand_like(pred_image)\n            pred_image = pred_image + background_color * (1.0 - pred_accumulation)\n        gt_image = self.blend_background(gt_image, background_color=background_color)\n        return pred_image, gt_image\n\n    def forward(\n        self,\n        rgb: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n        background_color: Optional[BackgroundColor] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Composite samples along ray and render color image\n\n        Args:\n            rgb: RGB for each sample\n            weights: Weights for each sample\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n            background_color: The background color to use for rendering.\n\n        Returns:\n            Outputs of rgb values.\n        \"\"\"\n\n        if background_color is None:\n            background_color = self.background_color\n\n        if not self.training:\n            rgb = torch.nan_to_num(rgb)\n        rgb = self.combine_rgb(\n            rgb, weights, background_color=background_color, ray_indices=ray_indices, num_rays=num_rays\n        )\n        if not self.training:\n            torch.clamp_(rgb, min=0.0, max=1.0)\n        return rgb\n\n\nclass SHRenderer(nn.Module):\n    \"\"\"Render RGB value from spherical harmonics.\n\n    Args:\n        background_color: Background color as RGB. Uses random colors if None\n        activation: Output activation.\n    \"\"\"\n\n    def __init__(\n        self,\n        background_color: BackgroundColor = \"random\",\n        activation: Optional[nn.Module] = nn.Sigmoid(),\n    ) -> None:\n        super().__init__()\n        self.background_color: BackgroundColor = background_color\n        self.activation = activation\n\n    def forward(\n        self,\n        sh: Float[Tensor, \"*batch num_samples coeffs\"],\n        directions: Float[Tensor, \"*batch num_samples 3\"],\n        weights: Float[Tensor, \"*batch num_samples 1\"],\n    ) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"Composite samples along ray and render color image\n\n        Args:\n            sh: Spherical harmonics coefficients for each sample\n            directions: Sample direction\n            weights: Weights for each sample\n\n        Returns:\n            Outputs of rgb values.\n        \"\"\"\n\n        sh = sh.view(*sh.shape[:-1], 3, sh.shape[-1] // 3)\n\n        levels = int(math.sqrt(sh.shape[-1]))\n        components = components_from_spherical_harmonics(levels=levels, directions=directions)\n\n        rgb = sh * components[..., None, :]  # [..., num_samples, 3, sh_components]\n        rgb = torch.sum(rgb, dim=-1)  # [..., num_samples, 3]\n\n        if self.activation is not None:\n            rgb = self.activation(rgb)\n\n        if not self.training:\n            rgb = torch.nan_to_num(rgb)\n        rgb = RGBRenderer.combine_rgb(rgb, weights, background_color=self.background_color)\n        if not self.training:\n            torch.clamp_(rgb, min=0.0, max=1.0)\n\n        return rgb\n\n\nclass AccumulationRenderer(nn.Module):\n    \"\"\"Accumulated value along a ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs 1\"]:\n        \"\"\"Composite samples along ray and calculate accumulation.\n\n        Args:\n            weights: Weights for each sample\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs of accumulated values.\n        \"\"\"\n\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            accumulation = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            accumulation = torch.sum(weights, dim=-2)\n        return accumulation\n\n\nclass DepthRenderer(nn.Module):\n    \"\"\"Calculate depth along ray.\n\n    Depth Method:\n        - median: Depth is set to the distance where the accumulated weight reaches 0.5.\n        - expected: Expected depth along ray. Same procedure as rendering rgb, but with depth.\n\n    Args:\n        method: Depth calculation method.\n    \"\"\"\n\n    def __init__(self, method: Literal[\"median\", \"expected\"] = \"median\") -> None:\n        super().__init__()\n        self.method = method\n\n    def forward(\n        self,\n        weights: Float[Tensor, \"*batch num_samples 1\"],\n        ray_samples: RaySamples,\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*batch 1\"]:\n        \"\"\"Composite samples along ray and calculate depths.\n\n        Args:\n            weights: Weights for each sample.\n            ray_samples: Set of ray samples.\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs of depth values.\n        \"\"\"\n\n        if self.method == \"median\":\n            steps = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n\n            if ray_indices is not None and num_rays is not None:\n                raise NotImplementedError(\"Median depth calculation is not implemented for packed samples.\")\n            cumulative_weights = torch.cumsum(weights[..., 0], dim=-1)  # [..., num_samples]\n            split = torch.ones((*weights.shape[:-2], 1), device=weights.device) * 0.5  # [..., 1]\n            median_index = torch.searchsorted(cumulative_weights, split, side=\"left\")  # [..., 1]\n            median_index = torch.clamp(median_index, 0, steps.shape[-2] - 1)  # [..., 1]\n            median_depth = torch.gather(steps[..., 0], dim=-1, index=median_index)  # [..., 1]\n            return median_depth\n        if self.method == \"expected\":\n            eps = 1e-10\n            steps = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n\n            if ray_indices is not None and num_rays is not None:\n                # Necessary for packed samples from volumetric ray sampler\n                depth = nerfacc.accumulate_along_rays(\n                    weights[..., 0], values=steps, ray_indices=ray_indices, n_rays=num_rays\n                )\n                accumulation = nerfacc.accumulate_along_rays(\n                    weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n                )\n                depth = depth / (accumulation + eps)\n            else:\n                depth = torch.sum(weights * steps, dim=-2) / (torch.sum(weights, -2) + eps)\n\n            depth = torch.clip(depth, steps.min(), steps.max())\n\n            return depth\n\n        raise NotImplementedError(f\"Method {self.method} not implemented\")\n\n\nclass UncertaintyRenderer(nn.Module):\n    \"\"\"Calculate uncertainty along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls, betas: Float[Tensor, \"*bs num_samples 1\"], weights: Float[Tensor, \"*bs num_samples 1\"]\n    ) -> Float[Tensor, \"*bs 1\"]:\n        \"\"\"Calculate uncertainty along the ray.\n\n        Args:\n            betas: Uncertainty betas for each sample.\n            weights: Weights of each sample.\n\n        Returns:\n            Rendering of uncertainty.\n        \"\"\"\n        uncertainty = torch.sum(weights * betas, dim=-2)\n        return uncertainty\n\n\nclass SemanticRenderer(nn.Module):\n    \"\"\"Calculate semantics along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        semantics: Float[Tensor, \"*bs num_samples num_classes\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs num_classes\"]:\n        \"\"\"Calculate semantics along the ray.\"\"\"\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            return nerfacc.accumulate_along_rays(\n                weights[..., 0], values=semantics, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            return torch.sum(weights * semantics, dim=-2)\n\n\nclass NormalsRenderer(nn.Module):\n    \"\"\"Calculate normals along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        normals: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        normalize: bool = True,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Calculate normals along the ray.\n\n        Args:\n            normals: Normals for each sample.\n            weights: Weights of each sample.\n            normalize: Normalize normals.\n        \"\"\"\n        n = torch.sum(weights * normals, dim=-2)\n        if normalize:\n            n = safe_normalize(n)\n        return n\n"
  },
  {
    "path": "third_party/f3rm/setup.py",
    "content": "from setuptools import setup\n\nsetup()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/camera_optimizers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nPose and Intrinsics Optimizers\n\"\"\"\n\nfrom __future__ import annotations\n\nimport functools\nfrom dataclasses import dataclass, field\nfrom typing import Literal, Optional, Type, Union\n\nimport numpy\nimport torch\nimport tyro\nfrom jaxtyping import Float, Int\nfrom torch import Tensor, nn\nfrom typing_extensions import assert_never\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.lie_groups import exp_map_SE3, exp_map_SO3xR3\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.engine.optimizers import OptimizerConfig\nfrom nerfstudio.engine.schedulers import SchedulerConfig\nfrom nerfstudio.utils import poses as pose_utils\n\n\n@dataclass\nclass CameraOptimizerConfig(InstantiateConfig):\n    \"\"\"Configuration of optimization for camera poses.\"\"\"\n\n    _target: Type = field(default_factory=lambda: CameraOptimizer)\n\n    mode: Literal[\"off\", \"SO3xR3\", \"SE3\"] = \"off\"\n    \"\"\"Pose optimization strategy to use. If enabled, we recommend SO3xR3.\"\"\"\n\n    trans_l2_penalty: float = 1e-2\n    \"\"\"L2 penalty on translation parameters.\"\"\"\n\n    rot_l2_penalty: float = 1e-3\n    \"\"\"L2 penalty on rotation parameters.\"\"\"\n\n    # tyro.conf.Suppress prevents us from creating CLI arguments for these fields.\n    optimizer: tyro.conf.Suppress[Optional[OptimizerConfig]] = field(default=None)\n    \"\"\"Deprecated, now specified inside the optimizers dict\"\"\"\n\n    scheduler: tyro.conf.Suppress[Optional[SchedulerConfig]] = field(default=None)\n    \"\"\"Deprecated, now specified inside the optimizers dict\"\"\"\n\n    def __post_init__(self):\n        if self.optimizer is not None:\n            import warnings\n\n            from nerfstudio.utils.rich_utils import CONSOLE\n\n            CONSOLE.print(\n                \"\\noptimizer is no longer specified in the CameraOptimizerConfig, it is now defined with the rest of the param groups inside the config file under the name 'camera_opt'\\n\",\n                style=\"bold yellow\",\n            )\n            warnings.warn(\"above message coming from\", FutureWarning, stacklevel=3)\n\n        if self.scheduler is not None:\n            import warnings\n\n            from nerfstudio.utils.rich_utils import CONSOLE\n\n            CONSOLE.print(\n                \"\\nscheduler is no longer specified in the CameraOptimizerConfig, it is now defined with the rest of the param groups inside the config file under the name 'camera_opt'\\n\",\n                style=\"bold yellow\",\n            )\n            warnings.warn(\"above message coming from\", FutureWarning, stacklevel=3)\n\n\nclass CameraOptimizer(nn.Module):\n    \"\"\"Layer that modifies camera poses to be optimized as well as the field during training.\"\"\"\n\n    config: CameraOptimizerConfig\n\n    def __init__(\n        self,\n        config: CameraOptimizerConfig,\n        num_cameras: int,\n        device: Union[torch.device, str],\n        non_trainable_camera_indices: Optional[Int[Tensor, \"num_non_trainable_cameras\"]] = None,\n        **kwargs,\n    ) -> None:\n        super().__init__()\n        self.config = config\n        self.num_cameras = num_cameras\n        self.device = device\n        self.non_trainable_camera_indices = non_trainable_camera_indices\n\n        # Initialize learnable parameters.\n        if self.config.mode == \"off\":\n            pass\n        elif self.config.mode in (\"SO3xR3\", \"SE3\"):\n            self.pose_adjustment = torch.nn.Parameter(torch.zeros((num_cameras, 6), device=device))\n        else:\n            assert_never(self.config.mode)\n\n    def forward(\n        self,\n        indices: Int[Tensor, \"camera_indices\"],\n    ) -> Float[Tensor, \"camera_indices 3 4\"]:\n        \"\"\"Indexing into camera adjustments.\n        Args:\n            indices: indices of Cameras to optimize.\n        Returns:\n            Transformation matrices from optimized camera coordinates\n            to given camera coordinates.\n        \"\"\"\n        outputs = []\n\n        # Apply learned transformation delta.\n        if self.config.mode == \"off\":\n            pass\n        elif self.config.mode == \"SO3xR3\":\n            outputs.append(exp_map_SO3xR3(self.pose_adjustment[indices, :]))\n        elif self.config.mode == \"SE3\":\n            outputs.append(exp_map_SE3(self.pose_adjustment[indices, :]))\n        else:\n            assert_never(self.config.mode)\n        # Detach non-trainable indices by setting to identity transform\n        if self.non_trainable_camera_indices is not None:\n            if self.non_trainable_camera_indices.device != self.pose_adjustment.device:\n                self.non_trainable_camera_indices = self.non_trainable_camera_indices.to(self.pose_adjustment.device)\n            outputs[0][self.non_trainable_camera_indices] = torch.eye(4, device=self.pose_adjustment.device)[:3, :4]\n\n        # Return: identity if no transforms are needed, otherwise multiply transforms together.\n        if len(outputs) == 0:\n            # Note that using repeat() instead of tile() here would result in unnecessary copies.\n            return torch.eye(4, device=self.device)[None, :3, :4].tile(indices.shape[0], 1, 1)\n        return functools.reduce(pose_utils.multiply, outputs)\n\n    def apply_to_raybundle(self, raybundle: RayBundle) -> None:\n        \"\"\"Apply the pose correction to the raybundle\"\"\"\n        if self.config.mode != \"off\":\n            correction_matrices = self(raybundle.camera_indices.squeeze())  # type: ignore\n            raybundle.origins = raybundle.origins + correction_matrices[:, :3, 3]\n            raybundle.directions = torch.bmm(correction_matrices[:, :3, :3], raybundle.directions[..., None]).squeeze()\n\n    def apply_to_camera(self, camera: Cameras) -> torch.Tensor:\n        \"\"\"Apply the pose correction to the world-to-camera matrix in a Camera object\"\"\"\n        if self.config.mode == \"off\":\n            return camera.camera_to_worlds\n\n        if camera.metadata is None or \"cam_idx\" not in camera.metadata:\n            # Viser cameras\n            return camera.camera_to_worlds\n\n        camera_idx = camera.metadata[\"cam_idx\"]\n        adj = self(torch.tensor([camera_idx], dtype=torch.long)).to(camera.device)  # type: ignore\n\n        return torch.cat(\n            [\n                # Apply rotation to directions in world coordinates, without touching the origin.\n                # Equivalent to: directions -> correction[:3,:3] @ directions\n                torch.bmm(adj[..., :3, :3], camera.camera_to_worlds[..., :3, :3]),\n                # Apply translation in world coordinate, independently of rotation.\n                # Equivalent to: origins -> origins + correction[:3,3]\n                camera.camera_to_worlds[..., :3, 3:] + adj[..., :3, 3:],\n            ],\n            dim=-1,\n        )\n\n    def get_loss_dict(self, loss_dict: dict) -> None:\n        \"\"\"Add regularization\"\"\"\n        if self.config.mode != \"off\":\n            loss_dict[\"camera_opt_regularizer\"] = (\n                self.pose_adjustment[:, :3].norm(dim=-1).mean() * self.config.trans_l2_penalty\n                + self.pose_adjustment[:, 3:].norm(dim=-1).mean() * self.config.rot_l2_penalty\n            )\n\n    def get_correction_matrices(self):\n        \"\"\"Get optimized pose correction matrices\"\"\"\n        return self(torch.arange(0, self.num_cameras).long())\n\n    def get_metrics_dict(self, metrics_dict: dict) -> None:\n        \"\"\"Get camera optimizer metrics\"\"\"\n        if self.config.mode != \"off\":\n            trans = self.pose_adjustment[:, :3].detach().norm(dim=-1)\n            rot = self.pose_adjustment[:, 3:].detach().norm(dim=-1)\n            metrics_dict[\"camera_opt_translation_max\"] = trans.max()\n            metrics_dict[\"camera_opt_translation_mean\"] = trans.mean()\n            metrics_dict[\"camera_opt_rotation_mean\"] = numpy.rad2deg(rot.mean().cpu())\n            metrics_dict[\"camera_opt_rotation_max\"] = numpy.rad2deg(rot.max().cpu())\n\n    def get_param_groups(self, param_groups: dict) -> None:\n        \"\"\"Get camera optimizer parameters\"\"\"\n        camera_opt_params = list(self.parameters())\n        if self.config.mode != \"off\":\n            assert len(camera_opt_params) > 0\n            param_groups[\"camera_opt\"] = camera_opt_params\n        else:\n            assert len(camera_opt_params) == 0\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/camera_paths.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode for camera paths.\n\"\"\"\n\nfrom typing import Any, Dict, Optional, Tuple\n\nimport torch\n\nimport nerfstudio.utils.poses as pose_utils\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.camera_utils import get_interpolated_poses_many\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.viewer_legacy.server.utils import three_js_perspective_camera_focal_length\n\n\ndef get_interpolated_camera_path(cameras: Cameras, steps: int, order_poses: bool) -> Cameras:\n    \"\"\"Generate a camera path between two cameras. Uses the camera type of the first camera\n\n    Args:\n        cameras: Cameras object containing intrinsics of all cameras.\n        steps: The number of steps to interpolate between the two cameras.\n\n    Returns:\n        A new set of cameras along a path.\n    \"\"\"\n    Ks = cameras.get_intrinsics_matrices()\n    poses = cameras.camera_to_worlds\n    poses, Ks = get_interpolated_poses_many(poses, Ks, steps_per_transition=steps, order_poses=order_poses)\n\n    cameras = Cameras(\n        fx=Ks[:, 0, 0],\n        fy=Ks[:, 1, 1],\n        cx=Ks[0, 0, 2],\n        cy=Ks[0, 1, 2],\n        camera_type=cameras.camera_type[0],\n        camera_to_worlds=poses,\n    )\n    return cameras\n\n\ndef get_spiral_path(\n    camera: Cameras,\n    steps: int = 30,\n    radius: Optional[float] = None,\n    radiuses: Optional[Tuple[float]] = None,\n    rots: int = 2,\n    zrate: float = 0.5,\n) -> Cameras:\n    \"\"\"\n    Returns a list of camera in a spiral trajectory.\n\n    Args:\n        camera: The camera to start the spiral from.\n        steps: The number of cameras in the generated path.\n        radius: The radius of the spiral for all xyz directions.\n        radiuses: The list of radii for the spiral in xyz directions.\n        rots: The number of rotations to apply to the camera.\n        zrate: How much to change the z position of the camera.\n\n    Returns:\n        A spiral camera path.\n    \"\"\"\n\n    assert radius is not None or radiuses is not None, \"Either radius or radiuses must be specified.\"\n    assert camera.ndim == 1, \"We assume only one batch dim here\"\n    if radius is not None and radiuses is None:\n        rad = torch.tensor([radius] * 3, device=camera.device)\n    elif radiuses is not None and radius is None:\n        rad = torch.tensor(radiuses, device=camera.device)\n    else:\n        raise ValueError(\"Only one of radius or radiuses must be specified.\")\n\n    up = camera.camera_to_worlds[0, :3, 2]  # scene is z up\n    focal = torch.min(camera.fx[0], camera.fy[0])\n    target = torch.tensor([0, 0, -focal], device=camera.device)  # camera looking in -z direction\n\n    c2w = camera.camera_to_worlds[0]\n    c2wh_global = pose_utils.to4x4(c2w)\n\n    local_c2whs = []\n    for theta in torch.linspace(0.0, 2.0 * torch.pi * rots, steps + 1)[:-1]:\n        center = (\n            torch.tensor([torch.cos(theta), -torch.sin(theta), -torch.sin(theta * zrate)], device=camera.device) * rad\n        )\n        lookat = center - target\n        c2w = camera_utils.viewmatrix(lookat, up, center)\n        c2wh = pose_utils.to4x4(c2w)\n        local_c2whs.append(c2wh)\n\n    new_c2ws = []\n    for local_c2wh in local_c2whs:\n        c2wh = torch.matmul(c2wh_global, local_c2wh)\n        new_c2ws.append(c2wh[:3, :4])\n    new_c2ws = torch.stack(new_c2ws, dim=0)\n\n    times = None\n    if camera.times is not None:\n        times = torch.linspace(0, 1, steps)[:, None]\n    return Cameras(\n        fx=camera.fx[0],\n        fy=camera.fy[0],\n        cx=camera.cx[0],\n        cy=camera.cy[0],\n        camera_to_worlds=new_c2ws,\n        times=times,\n    )\n\n\ndef get_path_from_json(camera_path: Dict[str, Any]) -> Cameras:\n    \"\"\"Takes a camera path dictionary and returns a trajectory as a Camera instance.\n\n    Args:\n        camera_path: A dictionary of the camera path information coming from the viewer.\n\n    Returns:\n        A Cameras instance with the camera path.\n    \"\"\"\n\n    image_height = camera_path[\"render_height\"]\n    image_width = camera_path[\"render_width\"]\n\n    if \"camera_type\" not in camera_path:\n        camera_type = CameraType.PERSPECTIVE\n    elif camera_path[\"camera_type\"] == \"fisheye\":\n        camera_type = CameraType.FISHEYE\n    elif camera_path[\"camera_type\"] == \"equirectangular\":\n        camera_type = CameraType.EQUIRECTANGULAR\n    elif camera_path[\"camera_type\"].lower() == \"omnidirectional\":\n        camera_type = CameraType.OMNIDIRECTIONALSTEREO_L\n    elif camera_path[\"camera_type\"].lower() == \"vr180\":\n        camera_type = CameraType.VR180_L\n    else:\n        camera_type = CameraType.PERSPECTIVE\n\n    c2ws = []\n    fxs = []\n    fys = []\n    for camera in camera_path[\"camera_path\"]:\n        # pose\n        c2w = torch.tensor(camera[\"camera_to_world\"]).view(4, 4)[:3]\n        c2ws.append(c2w)\n        if camera_type in [\n            CameraType.EQUIRECTANGULAR,\n            CameraType.OMNIDIRECTIONALSTEREO_L,\n            CameraType.OMNIDIRECTIONALSTEREO_R,\n            CameraType.VR180_L,\n            CameraType.VR180_R,\n        ]:\n            fxs.append(image_width / 2)\n            fys.append(image_height)\n        else:\n            # field of view\n            fov = camera[\"fov\"]\n            focal_length = three_js_perspective_camera_focal_length(fov, image_height)\n            fxs.append(focal_length)\n            fys.append(focal_length)\n\n    # Iff ALL cameras in the path have a \"time\" value, construct Cameras with times\n    if all(\"render_time\" in camera for camera in camera_path[\"camera_path\"]):\n        times = torch.tensor([camera[\"render_time\"] for camera in camera_path[\"camera_path\"]])\n    else:\n        times = None\n\n    camera_to_worlds = torch.stack(c2ws, dim=0)\n    fx = torch.tensor(fxs)\n    fy = torch.tensor(fys)\n    return Cameras(\n        fx=fx,\n        fy=fy,\n        cx=image_width / 2,\n        cy=image_height / 2,\n        camera_to_worlds=camera_to_worlds,\n        camera_type=camera_type,\n        times=times,\n    )\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/camera_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCamera transformation helper code.\n\"\"\"\n\nimport math\nfrom typing import List, Literal, Optional, Tuple\n\nimport numpy as np\nimport torch\nfrom jaxtyping import Float\nfrom numpy.typing import NDArray\nfrom torch import Tensor\n\n_EPS = np.finfo(float).eps * 4.0\n\n\ndef unit_vector(data: NDArray, axis: Optional[int] = None) -> np.ndarray:\n    \"\"\"Return ndarray normalized by length, i.e. Euclidean norm, along axis.\n\n    Args:\n        axis: the axis along which to normalize into unit vector\n        out: where to write out the data to. If None, returns a new np ndarray\n    \"\"\"\n    data = np.array(data, dtype=np.float64, copy=True)\n    if data.ndim == 1:\n        data /= math.sqrt(np.dot(data, data))\n        return data\n    length = np.atleast_1d(np.sum(data * data, axis))\n    np.sqrt(length, length)\n    if axis is not None:\n        length = np.expand_dims(length, axis)\n    data /= length\n    return data\n\n\ndef quaternion_from_matrix(matrix: NDArray, isprecise: bool = False) -> np.ndarray:\n    \"\"\"Return quaternion from rotation matrix.\n\n    Args:\n        matrix: rotation matrix to obtain quaternion\n        isprecise: if True, input matrix is assumed to be precise rotation matrix and a faster algorithm is used.\n    \"\"\"\n    M = np.array(matrix, dtype=np.float64, copy=True)[:4, :4]\n    if isprecise:\n        q = np.empty((4,))\n        t = np.trace(M)\n        if t > M[3, 3]:\n            q[0] = t\n            q[3] = M[1, 0] - M[0, 1]\n            q[2] = M[0, 2] - M[2, 0]\n            q[1] = M[2, 1] - M[1, 2]\n        else:\n            i, j, k = 1, 2, 3\n            if M[1, 1] > M[0, 0]:\n                i, j, k = 2, 3, 1\n            if M[2, 2] > M[i, i]:\n                i, j, k = 3, 1, 2\n            t = M[i, i] - (M[j, j] + M[k, k]) + M[3, 3]\n            q[i] = t\n            q[j] = M[i, j] + M[j, i]\n            q[k] = M[k, i] + M[i, k]\n            q[3] = M[k, j] - M[j, k]\n        q *= 0.5 / math.sqrt(t * M[3, 3])\n    else:\n        m00 = M[0, 0]\n        m01 = M[0, 1]\n        m02 = M[0, 2]\n        m10 = M[1, 0]\n        m11 = M[1, 1]\n        m12 = M[1, 2]\n        m20 = M[2, 0]\n        m21 = M[2, 1]\n        m22 = M[2, 2]\n        # symmetric matrix K\n        K = [\n            [m00 - m11 - m22, 0.0, 0.0, 0.0],\n            [m01 + m10, m11 - m00 - m22, 0.0, 0.0],\n            [m02 + m20, m12 + m21, m22 - m00 - m11, 0.0],\n            [m21 - m12, m02 - m20, m10 - m01, m00 + m11 + m22],\n        ]\n        K = np.array(K)\n        K /= 3.0\n        # quaternion is eigenvector of K that corresponds to largest eigenvalue\n        w, V = np.linalg.eigh(K)\n        q = V[np.array([3, 0, 1, 2]), np.argmax(w)]\n    if q[0] < 0.0:\n        np.negative(q, q)\n    return q\n\n\ndef quaternion_slerp(\n    quat0: NDArray, quat1: NDArray, fraction: float, spin: int = 0, shortestpath: bool = True\n) -> np.ndarray:\n    \"\"\"Return spherical linear interpolation between two quaternions.\n    Args:\n        quat0: first quaternion\n        quat1: second quaternion\n        fraction: how much to interpolate between quat0 vs quat1 (if 0, closer to quat0; if 1, closer to quat1)\n        spin: how much of an additional spin to place on the interpolation\n        shortestpath: whether to return the short or long path to rotation\n    \"\"\"\n    q0 = unit_vector(quat0[:4])\n    q1 = unit_vector(quat1[:4])\n    if q0 is None or q1 is None:\n        raise ValueError(\"Input quaternions invalid.\")\n    if fraction == 0.0:\n        return q0\n    if fraction == 1.0:\n        return q1\n    d = np.dot(q0, q1)\n    if abs(abs(d) - 1.0) < _EPS:\n        return q0\n    if shortestpath and d < 0.0:\n        # invert rotation\n        d = -d\n        np.negative(q1, q1)\n    angle = math.acos(d) + spin * math.pi\n    if abs(angle) < _EPS:\n        return q0\n    isin = 1.0 / math.sin(angle)\n    q0 *= math.sin((1.0 - fraction) * angle) * isin\n    q1 *= math.sin(fraction * angle) * isin\n    q0 += q1\n    return q0\n\n\ndef quaternion_matrix(quaternion: NDArray) -> np.ndarray:\n    \"\"\"Return homogeneous rotation matrix from quaternion.\n\n    Args:\n        quaternion: value to convert to matrix\n    \"\"\"\n    q = np.array(quaternion, dtype=np.float64, copy=True)\n    n = np.dot(q, q)\n    if n < _EPS:\n        return np.identity(4)\n    q *= math.sqrt(2.0 / n)\n    q = np.outer(q, q)\n    return np.array(\n        [\n            [1.0 - q[2, 2] - q[3, 3], q[1, 2] - q[3, 0], q[1, 3] + q[2, 0], 0.0],\n            [q[1, 2] + q[3, 0], 1.0 - q[1, 1] - q[3, 3], q[2, 3] - q[1, 0], 0.0],\n            [q[1, 3] - q[2, 0], q[2, 3] + q[1, 0], 1.0 - q[1, 1] - q[2, 2], 0.0],\n            [0.0, 0.0, 0.0, 1.0],\n        ]\n    )\n\n\ndef get_interpolated_poses(pose_a: NDArray, pose_b: NDArray, steps: int = 10) -> List[float]:\n    \"\"\"Return interpolation of poses with specified number of steps.\n    Args:\n        pose_a: first pose\n        pose_b: second pose\n        steps: number of steps the interpolated pose path should contain\n    \"\"\"\n\n    quat_a = quaternion_from_matrix(pose_a[:3, :3])\n    quat_b = quaternion_from_matrix(pose_b[:3, :3])\n\n    ts = np.linspace(0, 1, steps)\n    quats = [quaternion_slerp(quat_a, quat_b, t) for t in ts]\n    trans = [(1 - t) * pose_a[:3, 3] + t * pose_b[:3, 3] for t in ts]\n\n    poses_ab = []\n    for quat, tran in zip(quats, trans):\n        pose = np.identity(4)\n        pose[:3, :3] = quaternion_matrix(quat)[:3, :3]\n        pose[:3, 3] = tran\n        poses_ab.append(pose[:3])\n    return poses_ab\n\n\ndef get_interpolated_k(\n    k_a: Float[Tensor, \"3 3\"], k_b: Float[Tensor, \"3 3\"], steps: int = 10\n) -> List[Float[Tensor, \"3 4\"]]:\n    \"\"\"\n    Returns interpolated path between two camera poses with specified number of steps.\n\n    Args:\n        k_a: camera matrix 1\n        k_b: camera matrix 2\n        steps: number of steps the interpolated pose path should contain\n\n    Returns:\n        List of interpolated camera poses\n    \"\"\"\n    Ks: List[Float[Tensor, \"3 3\"]] = []\n    ts = np.linspace(0, 1, steps)\n    for t in ts:\n        new_k = k_a * (1.0 - t) + k_b * t\n        Ks.append(new_k)\n    return Ks\n\n\ndef get_ordered_poses_and_k(\n    poses: Float[Tensor, \"num_poses 3 4\"],\n    Ks: Float[Tensor, \"num_poses 3 3\"],\n) -> Tuple[Float[Tensor, \"num_poses 3 4\"], Float[Tensor, \"num_poses 3 3\"]]:\n    \"\"\"\n    Returns ordered poses and intrinsics by euclidian distance between poses.\n\n    Args:\n        poses: list of camera poses\n        Ks: list of camera intrinsics\n\n    Returns:\n        tuple of ordered poses and intrinsics\n\n    \"\"\"\n\n    poses_num = len(poses)\n\n    ordered_poses = torch.unsqueeze(poses[0], 0)\n    ordered_ks = torch.unsqueeze(Ks[0], 0)\n\n    # remove the first pose from poses\n    poses = poses[1:]\n    Ks = Ks[1:]\n\n    for _ in range(poses_num - 1):\n        distances = torch.norm(ordered_poses[-1][:, 3] - poses[:, :, 3], dim=1)\n        idx = torch.argmin(distances)\n        ordered_poses = torch.cat((ordered_poses, torch.unsqueeze(poses[idx], 0)), dim=0)\n        ordered_ks = torch.cat((ordered_ks, torch.unsqueeze(Ks[idx], 0)), dim=0)\n        poses = torch.cat((poses[0:idx], poses[idx + 1 :]), dim=0)\n        Ks = torch.cat((Ks[0:idx], Ks[idx + 1 :]), dim=0)\n\n    return ordered_poses, ordered_ks\n\n\ndef get_interpolated_poses_many(\n    poses: Float[Tensor, \"num_poses 3 4\"],\n    Ks: Float[Tensor, \"num_poses 3 3\"],\n    steps_per_transition: int = 10,\n    order_poses: bool = False,\n) -> Tuple[Float[Tensor, \"num_poses 3 4\"], Float[Tensor, \"num_poses 3 3\"]]:\n    \"\"\"Return interpolated poses for many camera poses.\n\n    Args:\n        poses: list of camera poses\n        Ks: list of camera intrinsics\n        steps_per_transition: number of steps per transition\n        order_poses: whether to order poses by euclidian distance\n\n    Returns:\n        tuple of new poses and intrinsics\n    \"\"\"\n    traj = []\n    k_interp = []\n\n    if order_poses:\n        poses, Ks = get_ordered_poses_and_k(poses, Ks)\n\n    for idx in range(poses.shape[0] - 1):\n        pose_a = poses[idx].cpu().numpy()\n        pose_b = poses[idx + 1].cpu().numpy()\n        poses_ab = get_interpolated_poses(pose_a, pose_b, steps=steps_per_transition)\n        traj += poses_ab\n        k_interp += get_interpolated_k(Ks[idx], Ks[idx + 1], steps=steps_per_transition)\n\n    traj = np.stack(traj, axis=0)\n    k_interp = torch.stack(k_interp, dim=0)\n\n    return torch.tensor(traj, dtype=torch.float32), torch.tensor(k_interp, dtype=torch.float32)\n\n\ndef normalize(x: torch.Tensor) -> Float[Tensor, \"*batch\"]:\n    \"\"\"Returns a normalized vector.\"\"\"\n    return x / torch.linalg.norm(x)\n\n\ndef normalize_with_norm(x: torch.Tensor, dim: int) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"Normalize tensor along axis and return normalized value with norms.\n\n    Args:\n        x: tensor to normalize.\n        dim: axis along which to normalize.\n\n    Returns:\n        Tuple of normalized tensor and corresponding norm.\n    \"\"\"\n\n    norm = torch.maximum(torch.linalg.vector_norm(x, dim=dim, keepdims=True), torch.tensor([_EPS]).to(x))\n    return x / norm, norm\n\n\ndef viewmatrix(lookat: torch.Tensor, up: torch.Tensor, pos: torch.Tensor) -> Float[Tensor, \"*batch\"]:\n    \"\"\"Returns a camera transformation matrix.\n\n    Args:\n        lookat: The direction the camera is looking.\n        up: The upward direction of the camera.\n        pos: The position of the camera.\n\n    Returns:\n        A camera transformation matrix.\n    \"\"\"\n    vec2 = normalize(lookat)\n    vec1_avg = normalize(up)\n    vec0 = normalize(torch.cross(vec1_avg, vec2))\n    vec1 = normalize(torch.cross(vec2, vec0))\n    m = torch.stack([vec0, vec1, vec2, pos], 1)\n    return m\n\n\ndef get_distortion_params(\n    k1: float = 0.0,\n    k2: float = 0.0,\n    k3: float = 0.0,\n    k4: float = 0.0,\n    p1: float = 0.0,\n    p2: float = 0.0,\n) -> Float[Tensor, \"*batch\"]:\n    \"\"\"Returns a distortion parameters matrix.\n\n    Args:\n        k1: The first radial distortion parameter.\n        k2: The second radial distortion parameter.\n        k3: The third radial distortion parameter.\n        k4: The fourth radial distortion parameter.\n        p1: The first tangential distortion parameter.\n        p2: The second tangential distortion parameter.\n    Returns:\n        torch.Tensor: A distortion parameters matrix.\n    \"\"\"\n    return torch.Tensor([k1, k2, k3, k4, p1, p2])\n\n\ndef _compute_residual_and_jacobian(\n    x: torch.Tensor,\n    y: torch.Tensor,\n    xd: torch.Tensor,\n    yd: torch.Tensor,\n    distortion_params: torch.Tensor,\n) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n    \"\"\"Auxiliary function of radial_and_tangential_undistort() that computes residuals and jacobians.\n    Adapted from MultiNeRF:\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/camera_utils.py#L427-L474\n\n    Args:\n        x: The updated x coordinates.\n        y: The updated y coordinates.\n        xd: The distorted x coordinates.\n        yd: The distorted y coordinates.\n        distortion_params: The distortion parameters [k1, k2, k3, k4, p1, p2].\n\n    Returns:\n        The residuals (fx, fy) and jacobians (fx_x, fx_y, fy_x, fy_y).\n    \"\"\"\n\n    k1 = distortion_params[..., 0]\n    k2 = distortion_params[..., 1]\n    k3 = distortion_params[..., 2]\n    k4 = distortion_params[..., 3]\n    p1 = distortion_params[..., 4]\n    p2 = distortion_params[..., 5]\n\n    # let r(x, y) = x^2 + y^2;\n    #     d(x, y) = 1 + k1 * r(x, y) + k2 * r(x, y) ^2 + k3 * r(x, y)^3 +\n    #                   k4 * r(x, y)^4;\n    r = x * x + y * y\n    d = 1.0 + r * (k1 + r * (k2 + r * (k3 + r * k4)))\n\n    # The perfect projection is:\n    # xd = x * d(x, y) + 2 * p1 * x * y + p2 * (r(x, y) + 2 * x^2);\n    # yd = y * d(x, y) + 2 * p2 * x * y + p1 * (r(x, y) + 2 * y^2);\n    #\n    # Let's define\n    #\n    # fx(x, y) = x * d(x, y) + 2 * p1 * x * y + p2 * (r(x, y) + 2 * x^2) - xd;\n    # fy(x, y) = y * d(x, y) + 2 * p2 * x * y + p1 * (r(x, y) + 2 * y^2) - yd;\n    #\n    # We are looking for a solution that satisfies\n    # fx(x, y) = fy(x, y) = 0;\n    fx = d * x + 2 * p1 * x * y + p2 * (r + 2 * x * x) - xd\n    fy = d * y + 2 * p2 * x * y + p1 * (r + 2 * y * y) - yd\n\n    # Compute derivative of d over [x, y]\n    d_r = k1 + r * (2.0 * k2 + r * (3.0 * k3 + r * 4.0 * k4))\n    d_x = 2.0 * x * d_r\n    d_y = 2.0 * y * d_r\n\n    # Compute derivative of fx over x and y.\n    fx_x = d + d_x * x + 2.0 * p1 * y + 6.0 * p2 * x\n    fx_y = d_y * x + 2.0 * p1 * x + 2.0 * p2 * y\n\n    # Compute derivative of fy over x and y.\n    fy_x = d_x * y + 2.0 * p2 * y + 2.0 * p1 * x\n    fy_y = d + d_y * y + 2.0 * p2 * x + 6.0 * p1 * y\n\n    return fx, fy, fx_x, fx_y, fy_x, fy_y\n\n\n# @torch_compile(dynamic=True, mode=\"reduce-overhead\", backend=\"eager\")\ndef radial_and_tangential_undistort(\n    coords: torch.Tensor,\n    distortion_params: torch.Tensor,\n    eps: float = 1e-3,\n    max_iterations: int = 10,\n) -> torch.Tensor:\n    \"\"\"Computes undistorted coords given opencv distortion parameters.\n    Adapted from MultiNeRF\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/camera_utils.py#L477-L509\n\n    Args:\n        coords: The distorted coordinates.\n        distortion_params: The distortion parameters [k1, k2, k3, k4, p1, p2].\n        eps: The epsilon for the convergence.\n        max_iterations: The maximum number of iterations to perform.\n\n    Returns:\n        The undistorted coordinates.\n    \"\"\"\n\n    # Initialize from the distorted point.\n    x = coords[..., 0]\n    y = coords[..., 1]\n\n    for _ in range(max_iterations):\n        fx, fy, fx_x, fx_y, fy_x, fy_y = _compute_residual_and_jacobian(\n            x=x, y=y, xd=coords[..., 0], yd=coords[..., 1], distortion_params=distortion_params\n        )\n        denominator = fy_x * fx_y - fx_x * fy_y\n        x_numerator = fx * fy_y - fy * fx_y\n        y_numerator = fy * fx_x - fx * fy_x\n        step_x = torch.where(torch.abs(denominator) > eps, x_numerator / denominator, torch.zeros_like(denominator))\n        step_y = torch.where(torch.abs(denominator) > eps, y_numerator / denominator, torch.zeros_like(denominator))\n\n        x = x + step_x\n        y = y + step_y\n\n    return torch.stack([x, y], dim=-1)\n\n\ndef rotation_matrix_between(a: Float[Tensor, \"3\"], b: Float[Tensor, \"3\"]) -> Float[Tensor, \"3 3\"]:\n    \"\"\"Compute the rotation matrix that rotates vector a to vector b.\n\n    Args:\n        a: The vector to rotate.\n        b: The vector to rotate to.\n    Returns:\n        The rotation matrix.\n    \"\"\"\n    a = a / torch.linalg.norm(a)\n    b = b / torch.linalg.norm(b)\n    v = torch.linalg.cross(a, b)  # Axis of rotation.\n\n    # Handle cases where `a` and `b` are parallel.\n    eps = 1e-6\n    if torch.sum(torch.abs(v)) < eps:\n        x = torch.tensor([1.0, 0, 0]) if abs(a[0]) < eps else torch.tensor([0, 1.0, 0])\n        v = torch.linalg.cross(a, x)\n\n    v = v / torch.linalg.norm(v)\n    skew_sym_mat = torch.Tensor(\n        [\n            [0, -v[2], v[1]],\n            [v[2], 0, -v[0]],\n            [-v[1], v[0], 0],\n        ]\n    )\n    theta = torch.acos(torch.clip(torch.dot(a, b), -1, 1))\n\n    # Rodrigues rotation formula. https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula\n    return torch.eye(3) + torch.sin(theta) * skew_sym_mat + (1 - torch.cos(theta)) * (skew_sym_mat @ skew_sym_mat)\n\n\ndef focus_of_attention(poses: Float[Tensor, \"*num_poses 4 4\"], initial_focus: Float[Tensor, \"3\"]) -> Float[Tensor, \"3\"]:\n    \"\"\"Compute the focus of attention of a set of cameras. Only cameras\n    that have the focus of attention in front of them are considered.\n\n     Args:\n        poses: The poses to orient.\n        initial_focus: The 3D point views to decide which cameras are initially activated.\n\n    Returns:\n        The 3D position of the focus of attention.\n    \"\"\"\n    # References to the same method in third-party code:\n    # https://github.com/google-research/multinerf/blob/1c8b1c552133cdb2de1c1f3c871b2813f6662265/internal/camera_utils.py#L145\n    # https://github.com/bmild/nerf/blob/18b8aebda6700ed659cb27a0c348b737a5f6ab60/load_llff.py#L197\n    active_directions = -poses[:, :3, 2:3]\n    active_origins = poses[:, :3, 3:4]\n    # initial value for testing if the focus_pt is in front or behind\n    focus_pt = initial_focus\n    # Prune cameras which have the current have the focus_pt behind them.\n    active = torch.sum(active_directions.squeeze(-1) * (focus_pt - active_origins.squeeze(-1)), dim=-1) > 0\n    done = False\n    # We need at least two active cameras, else fallback on the previous solution.\n    # This may be the \"poses\" solution if no cameras are active on first iteration, e.g.\n    # they are in an outward-looking configuration.\n    while torch.sum(active.int()) > 1 and not done:\n        active_directions = active_directions[active]\n        active_origins = active_origins[active]\n        # https://en.wikipedia.org/wiki/Line–line_intersection#In_more_than_two_dimensions\n        m = torch.eye(3) - active_directions * torch.transpose(active_directions, -2, -1)\n        mt_m = torch.transpose(m, -2, -1) @ m\n        focus_pt = torch.linalg.inv(mt_m.mean(0)) @ (mt_m @ active_origins).mean(0)[:, 0]\n        active = torch.sum(active_directions.squeeze(-1) * (focus_pt - active_origins.squeeze(-1)), dim=-1) > 0\n        if active.all():\n            # the set of active cameras did not change, so we're done.\n            done = True\n    return focus_pt\n\n\ndef auto_orient_and_center_poses(\n    poses: Float[Tensor, \"*num_poses 4 4\"],\n    method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"up\",\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\",\n) -> Tuple[Float[Tensor, \"*num_poses 3 4\"], Float[Tensor, \"3 4\"]]:\n    \"\"\"Orients and centers the poses.\n\n    We provide three methods for orientation:\n\n    - pca: Orient the poses so that the principal directions of the camera centers are aligned\n        with the axes, Z corresponding to the smallest principal component.\n        This method works well when all of the cameras are in the same plane, for example when\n        images are taken using a mobile robot.\n    - up: Orient the poses so that the average up vector is aligned with the z axis.\n        This method works well when images are not at arbitrary angles.\n    - vertical: Orient the poses so that the Z 3D direction projects close to the\n        y axis in images. This method works better if cameras are not all\n        looking in the same 3D direction, which may happen in camera arrays or in LLFF.\n\n    There are two centering methods:\n\n    - poses: The poses are centered around the origin.\n    - focus: The origin is set to the focus of attention of all cameras (the\n        closest point to cameras optical axes). Recommended for inward-looking\n        camera configurations.\n\n    Args:\n        poses: The poses to orient.\n        method: The method to use for orientation.\n        center_method: The method to use to center the poses.\n\n    Returns:\n        Tuple of the oriented poses and the transform matrix.\n    \"\"\"\n\n    origins = poses[..., :3, 3]\n\n    mean_origin = torch.mean(origins, dim=0)\n    translation_diff = origins - mean_origin\n\n    if center_method == \"poses\":\n        translation = mean_origin\n    elif center_method == \"focus\":\n        translation = focus_of_attention(poses, mean_origin)\n    elif center_method == \"none\":\n        translation = torch.zeros_like(mean_origin)\n    else:\n        raise ValueError(f\"Unknown value for center_method: {center_method}\")\n\n    if method == \"pca\":\n        _, eigvec = torch.linalg.eigh(translation_diff.T @ translation_diff)\n        eigvec = torch.flip(eigvec, dims=(-1,))\n\n        if torch.linalg.det(eigvec) < 0:\n            eigvec[:, 2] = -eigvec[:, 2]\n\n        transform = torch.cat([eigvec, eigvec @ -translation[..., None]], dim=-1)\n        oriented_poses = transform @ poses\n\n        if oriented_poses.mean(dim=0)[2, 1] < 0:\n            oriented_poses[1:3, :] = -1 * oriented_poses[1:3, :]\n            transform[1:3, :] = -1 * transform[1:3, :]\n    elif method in (\"up\", \"vertical\"):\n        up = torch.mean(poses[:, :3, 1], dim=0)\n        up = up / torch.linalg.norm(up)\n        if method == \"vertical\":\n            # If cameras are not all parallel (e.g. not in an LLFF configuration),\n            # we can find the 3D direction that most projects vertically in all\n            # cameras by minimizing ||Xu|| s.t. ||u||=1. This total least squares\n            # problem is solved by SVD.\n            x_axis_matrix = poses[:, :3, 0]\n            _, S, Vh = torch.linalg.svd(x_axis_matrix, full_matrices=False)\n            # Singular values are S_i=||Xv_i|| for each right singular vector v_i.\n            # ||S|| = sqrt(n) because lines of X are all unit vectors and the v_i\n            # are an orthonormal basis.\n            # ||Xv_i|| = sqrt(sum(dot(x_axis_j,v_i)^2)), thus S_i/sqrt(n) is the\n            # RMS of cosines between x axes and v_i. If the second smallest singular\n            # value corresponds to an angle error less than 10° (cos(80°)=0.17),\n            # this is probably a degenerate camera configuration (typical values\n            # are around 5° average error for the true vertical). In this case,\n            # rather than taking the vector corresponding to the smallest singular\n            # value, we project the \"up\" vector on the plane spanned by the two\n            # best singular vectors. We could also just fallback to the \"up\"\n            # solution.\n            if S[1] > 0.17 * math.sqrt(poses.shape[0]):\n                # regular non-degenerate configuration\n                up_vertical = Vh[2, :]\n                # It may be pointing up or down. Use \"up\" to disambiguate the sign.\n                up = up_vertical if torch.dot(up_vertical, up) > 0 else -up_vertical\n            else:\n                # Degenerate configuration: project \"up\" on the plane spanned by\n                # the last two right singular vectors (which are orthogonal to the\n                # first). v_0 is a unit vector, no need to divide by its norm when\n                # projecting.\n                up = up - Vh[0, :] * torch.dot(up, Vh[0, :])\n                # re-normalize\n                up = up / torch.linalg.norm(up)\n\n        rotation = rotation_matrix_between(up, torch.Tensor([0, 0, 1]))\n        transform = torch.cat([rotation, rotation @ -translation[..., None]], dim=-1)\n        oriented_poses = transform @ poses\n    elif method == \"none\":\n        transform = torch.eye(4)\n        transform[:3, 3] = -translation\n        transform = transform[:3, :]\n        oriented_poses = transform @ poses\n    else:\n        raise ValueError(f\"Unknown value for method: {method}\")\n\n    return oriented_poses, transform\n\n\n@torch.jit.script\ndef fisheye624_project(xyz, params):\n    \"\"\"\n    Batched implementation of the FisheyeRadTanThinPrism (aka Fisheye624) camera\n    model project() function.\n    Inputs:\n        xyz: BxNx3 tensor of 3D points to be projected\n        params: Bx16 tensor of Fisheye624 parameters formatted like this:\n                [f_u f_v c_u c_v {k_0 ... k_5} {p_0 p_1} {s_0 s_1 s_2 s_3}]\n                or Bx15 tensor of Fisheye624 parameters formatted like this:\n                [f c_u c_v {k_0 ... k_5} {p_0 p_1} {s_0 s_1 s_2 s_3}]\n    Outputs:\n        uv: BxNx2 tensor of 2D projections of xyz in image plane\n    Model for fisheye cameras with radial, tangential, and thin-prism distortion.\n    This model allows fu != fv.\n    Specifically, the model is:\n    uvDistorted = [x_r]  + tangentialDistortion  + thinPrismDistortion\n                  [y_r]\n    proj = diag(fu,fv) * uvDistorted + [cu;cv];\n    where:\n      a = x/z, b = y/z, r = (a^2+b^2)^(1/2)\n      th = atan(r)\n      cosPhi = a/r, sinPhi = b/r\n      [x_r]  = (th+ k0 * th^3 + k1* th^5 + ...) [cosPhi]\n      [y_r]                                     [sinPhi]\n      the number of terms in the series is determined by the template parameter numK.\n      tangentialDistortion = [(2 x_r^2 + rd^2)*p_0 + 2*x_r*y_r*p_1]\n                             [(2 y_r^2 + rd^2)*p_1 + 2*x_r*y_r*p_0]\n      where rd^2 = x_r^2 + y_r^2\n      thinPrismDistortion = [s0 * rd^2 + s1 rd^4]\n                            [s2 * rd^2 + s3 rd^4]\n    Author: Daniel DeTone (ddetone@meta.com)\n    \"\"\"\n\n    assert xyz.ndim == 3\n    assert params.ndim == 2\n    assert params.shape[-1] == 16 or params.shape[-1] == 15, \"This model allows fx != fy\"\n    eps = 1e-9\n    B, N = xyz.shape[0], xyz.shape[1]\n\n    # Radial correction.\n    z = xyz[:, :, 2].reshape(B, N, 1)\n    z = torch.where(torch.abs(z) < eps, eps * torch.sign(z), z)\n    ab = xyz[:, :, :2] / z\n    r = torch.norm(ab, dim=-1, p=2, keepdim=True)\n    th = torch.atan(r)\n    th_divr = torch.where(r < eps, torch.ones_like(ab), ab / r)\n    th_k = th.reshape(B, N, 1).clone()\n    for i in range(6):\n        th_k = th_k + params[:, -12 + i].reshape(B, 1, 1) * torch.pow(th, 3 + i * 2)\n    xr_yr = th_k * th_divr\n    uv_dist = xr_yr\n\n    # Tangential correction.\n    p0 = params[:, -6].reshape(B, 1)\n    p1 = params[:, -5].reshape(B, 1)\n    xr = xr_yr[:, :, 0].reshape(B, N)\n    yr = xr_yr[:, :, 1].reshape(B, N)\n    xr_yr_sq = torch.square(xr_yr)\n    xr_sq = xr_yr_sq[:, :, 0].reshape(B, N)\n    yr_sq = xr_yr_sq[:, :, 1].reshape(B, N)\n    rd_sq = xr_sq + yr_sq\n    uv_dist_tu = uv_dist[:, :, 0] + ((2.0 * xr_sq + rd_sq) * p0 + 2.0 * xr * yr * p1)\n    uv_dist_tv = uv_dist[:, :, 1] + ((2.0 * yr_sq + rd_sq) * p1 + 2.0 * xr * yr * p0)\n    uv_dist = torch.stack([uv_dist_tu, uv_dist_tv], dim=-1)  # Avoids in-place complaint.\n\n    # Thin Prism correction.\n    s0 = params[:, -4].reshape(B, 1)\n    s1 = params[:, -3].reshape(B, 1)\n    s2 = params[:, -2].reshape(B, 1)\n    s3 = params[:, -1].reshape(B, 1)\n    rd_4 = torch.square(rd_sq)\n    uv_dist[:, :, 0] = uv_dist[:, :, 0] + (s0 * rd_sq + s1 * rd_4)\n    uv_dist[:, :, 1] = uv_dist[:, :, 1] + (s2 * rd_sq + s3 * rd_4)\n\n    # Finally, apply standard terms: focal length and camera centers.\n    if params.shape[-1] == 15:\n        fx_fy = params[:, 0].reshape(B, 1, 1)\n        cx_cy = params[:, 1:3].reshape(B, 1, 2)\n    else:\n        fx_fy = params[:, 0:2].reshape(B, 1, 2)\n        cx_cy = params[:, 2:4].reshape(B, 1, 2)\n    result = uv_dist * fx_fy + cx_cy\n\n    return result\n\n\n# Core implementation of fisheye 624 unprojection. More details are documented here:\n# https://facebookresearch.github.io/projectaria_tools/docs/tech_insights/camera_intrinsic_models#the-fisheye62-model\n@torch.jit.script\ndef fisheye624_unproject_helper(uv, params, max_iters: int = 5):\n    \"\"\"\n    Batched implementation of the FisheyeRadTanThinPrism (aka Fisheye624) camera\n    model. There is no analytical solution for the inverse of the project()\n    function so this solves an optimization problem using Newton's method to get\n    the inverse.\n    Inputs:\n        uv: BxNx2 tensor of 2D pixels to be unprojected\n        params: Bx16 tensor of Fisheye624 parameters formatted like this:\n                [f_u f_v c_u c_v {k_0 ... k_5} {p_0 p_1} {s_0 s_1 s_2 s_3}]\n                or Bx15 tensor of Fisheye624 parameters formatted like this:\n                [f c_u c_v {k_0 ... k_5} {p_0 p_1} {s_0 s_1 s_2 s_3}]\n    Outputs:\n        xyz: BxNx3 tensor of 3D rays of uv points with z = 1.\n    Model for fisheye cameras with radial, tangential, and thin-prism distortion.\n    This model assumes fu=fv. This unproject function holds that:\n    X = unproject(project(X))     [for X=(x,y,z) in R^3, z>0]\n    and\n    x = project(unproject(s*x))   [for s!=0 and x=(u,v) in R^2]\n    Author: Daniel DeTone (ddetone@meta.com)\n    \"\"\"\n\n    assert uv.ndim == 3, \"Expected batched input shaped BxNx3\"\n    assert params.ndim == 2\n    assert params.shape[-1] == 16 or params.shape[-1] == 15, \"This model allows fx != fy\"\n    eps = 1e-6\n    B, N = uv.shape[0], uv.shape[1]\n\n    if params.shape[-1] == 15:\n        fx_fy = params[:, 0].reshape(B, 1, 1)\n        cx_cy = params[:, 1:3].reshape(B, 1, 2)\n    else:\n        fx_fy = params[:, 0:2].reshape(B, 1, 2)\n        cx_cy = params[:, 2:4].reshape(B, 1, 2)\n\n    uv_dist = (uv - cx_cy) / fx_fy\n\n    # Compute xr_yr using Newton's method.\n    xr_yr = uv_dist.clone()  # Initial guess.\n    for _ in range(max_iters):\n        uv_dist_est = xr_yr.clone()\n        # Tangential terms.\n        p0 = params[:, -6].reshape(B, 1)\n        p1 = params[:, -5].reshape(B, 1)\n        xr = xr_yr[:, :, 0].reshape(B, N)\n        yr = xr_yr[:, :, 1].reshape(B, N)\n        xr_yr_sq = torch.square(xr_yr)\n        xr_sq = xr_yr_sq[:, :, 0].reshape(B, N)\n        yr_sq = xr_yr_sq[:, :, 1].reshape(B, N)\n        rd_sq = xr_sq + yr_sq\n        uv_dist_est[:, :, 0] = uv_dist_est[:, :, 0] + ((2.0 * xr_sq + rd_sq) * p0 + 2.0 * xr * yr * p1)\n        uv_dist_est[:, :, 1] = uv_dist_est[:, :, 1] + ((2.0 * yr_sq + rd_sq) * p1 + 2.0 * xr * yr * p0)\n        # Thin Prism terms.\n        s0 = params[:, -4].reshape(B, 1)\n        s1 = params[:, -3].reshape(B, 1)\n        s2 = params[:, -2].reshape(B, 1)\n        s3 = params[:, -1].reshape(B, 1)\n        rd_4 = torch.square(rd_sq)\n        uv_dist_est[:, :, 0] = uv_dist_est[:, :, 0] + (s0 * rd_sq + s1 * rd_4)\n        uv_dist_est[:, :, 1] = uv_dist_est[:, :, 1] + (s2 * rd_sq + s3 * rd_4)\n        # Compute the derivative of uv_dist w.r.t. xr_yr.\n        duv_dist_dxr_yr = uv.new_ones(B, N, 2, 2)\n        duv_dist_dxr_yr[:, :, 0, 0] = 1.0 + 6.0 * xr_yr[:, :, 0] * p0 + 2.0 * xr_yr[:, :, 1] * p1\n        offdiag = 2.0 * (xr_yr[:, :, 0] * p1 + xr_yr[:, :, 1] * p0)\n        duv_dist_dxr_yr[:, :, 0, 1] = offdiag\n        duv_dist_dxr_yr[:, :, 1, 0] = offdiag\n        duv_dist_dxr_yr[:, :, 1, 1] = 1.0 + 6.0 * xr_yr[:, :, 1] * p1 + 2.0 * xr_yr[:, :, 0] * p0\n        xr_yr_sq_norm = xr_yr_sq[:, :, 0] + xr_yr_sq[:, :, 1]\n        temp1 = 2.0 * (s0 + 2.0 * s1 * xr_yr_sq_norm)\n        duv_dist_dxr_yr[:, :, 0, 0] = duv_dist_dxr_yr[:, :, 0, 0] + (xr_yr[:, :, 0] * temp1)\n        duv_dist_dxr_yr[:, :, 0, 1] = duv_dist_dxr_yr[:, :, 0, 1] + (xr_yr[:, :, 1] * temp1)\n        temp2 = 2.0 * (s2 + 2.0 * s3 * xr_yr_sq_norm)\n        duv_dist_dxr_yr[:, :, 1, 0] = duv_dist_dxr_yr[:, :, 1, 0] + (xr_yr[:, :, 0] * temp2)\n        duv_dist_dxr_yr[:, :, 1, 1] = duv_dist_dxr_yr[:, :, 1, 1] + (xr_yr[:, :, 1] * temp2)\n        # Compute 2x2 inverse manually here since torch.inverse() is very slow.\n        # Because this is slow: inv = duv_dist_dxr_yr.inverse()\n        # About a 10x reduction in speed with above line.\n        mat = duv_dist_dxr_yr.reshape(-1, 2, 2)\n        a = mat[:, 0, 0].reshape(-1, 1, 1)\n        b = mat[:, 0, 1].reshape(-1, 1, 1)\n        c = mat[:, 1, 0].reshape(-1, 1, 1)\n        d = mat[:, 1, 1].reshape(-1, 1, 1)\n        det = 1.0 / ((a * d) - (b * c))\n        top = torch.cat([d, -b], dim=2)\n        bot = torch.cat([-c, a], dim=2)\n        inv = det * torch.cat([top, bot], dim=1)\n        inv = inv.reshape(B, N, 2, 2)\n        # Manually compute 2x2 @ 2x1 matrix multiply.\n        # Because this is slow: step = (inv @ (uv_dist - uv_dist_est)[..., None])[..., 0]\n        diff = uv_dist - uv_dist_est\n        a = inv[:, :, 0, 0]\n        b = inv[:, :, 0, 1]\n        c = inv[:, :, 1, 0]\n        d = inv[:, :, 1, 1]\n        e = diff[:, :, 0]\n        f = diff[:, :, 1]\n        step = torch.stack([a * e + b * f, c * e + d * f], dim=-1)\n        # Newton step.\n        xr_yr = xr_yr + step\n\n    # Compute theta using Newton's method.\n    xr_yr_norm = xr_yr.norm(p=2, dim=2).reshape(B, N, 1)\n    th = xr_yr_norm.clone()\n    for _ in range(max_iters):\n        th_radial = uv.new_ones(B, N, 1)\n        dthd_th = uv.new_ones(B, N, 1)\n        for k in range(6):\n            r_k = params[:, -12 + k].reshape(B, 1, 1)\n            th_radial = th_radial + (r_k * torch.pow(th, 2 + k * 2))\n            dthd_th = dthd_th + ((3.0 + 2.0 * k) * r_k * torch.pow(th, 2 + k * 2))\n        th_radial = th_radial * th\n        step = (xr_yr_norm - th_radial) / dthd_th\n        # handle dthd_th close to 0.\n        step = torch.where(dthd_th.abs() > eps, step, torch.sign(step) * eps * 10.0)\n        th = th + step\n    # Compute the ray direction using theta and xr_yr.\n    close_to_zero = torch.logical_and(th.abs() < eps, xr_yr_norm.abs() < eps)\n    ray_dir = torch.where(close_to_zero, xr_yr, torch.tan(th) / xr_yr_norm * xr_yr)\n    ray = torch.cat([ray_dir, uv.new_ones(B, N, 1)], dim=2)\n    return ray\n\n\n# unproject 2D point to 3D with fisheye624 model\ndef fisheye624_unproject(coords: torch.Tensor, distortion_params: torch.Tensor) -> torch.Tensor:\n    dirs = fisheye624_unproject_helper(coords.unsqueeze(0), distortion_params[0].unsqueeze(0))\n    # correct for camera space differences:\n    dirs[..., 1] = -dirs[..., 1]\n    dirs[..., 2] = -dirs[..., 2]\n    return dirs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/cameras.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCamera Models\n\"\"\"\n\nimport base64\nimport math\nfrom dataclasses import dataclass\nfrom enum import Enum, auto\nfrom typing import Dict, List, Literal, Optional, Tuple, Union\n\nimport cv2\nimport torch\nfrom jaxtyping import Float, Int, Shaped\nfrom torch import Tensor\nfrom torch.nn import Parameter\n\nimport nerfstudio.utils.math\nimport nerfstudio.utils.poses as pose_utils\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.scene_box import OrientedBox, SceneBox\nfrom nerfstudio.utils.tensor_dataclass import TensorDataclass\n\nTORCH_DEVICE = Union[torch.device, str]\n\n\nclass CameraType(Enum):\n    \"\"\"Supported camera types.\"\"\"\n\n    PERSPECTIVE = auto()\n    FISHEYE = auto()\n    EQUIRECTANGULAR = auto()\n    OMNIDIRECTIONALSTEREO_L = auto()\n    OMNIDIRECTIONALSTEREO_R = auto()\n    VR180_L = auto()\n    VR180_R = auto()\n    ORTHOPHOTO = auto()\n    FISHEYE624 = auto()\n\n\nCAMERA_MODEL_TO_TYPE = {\n    \"SIMPLE_PINHOLE\": CameraType.PERSPECTIVE,\n    \"PINHOLE\": CameraType.PERSPECTIVE,\n    \"SIMPLE_RADIAL\": CameraType.PERSPECTIVE,\n    \"RADIAL\": CameraType.PERSPECTIVE,\n    \"OPENCV\": CameraType.PERSPECTIVE,\n    \"OPENCV_FISHEYE\": CameraType.FISHEYE,\n    \"EQUIRECTANGULAR\": CameraType.EQUIRECTANGULAR,\n    \"OMNIDIRECTIONALSTEREO_L\": CameraType.OMNIDIRECTIONALSTEREO_L,\n    \"OMNIDIRECTIONALSTEREO_R\": CameraType.OMNIDIRECTIONALSTEREO_R,\n    \"VR180_L\": CameraType.VR180_L,\n    \"VR180_R\": CameraType.VR180_R,\n    \"ORTHOPHOTO\": CameraType.ORTHOPHOTO,\n    \"FISHEYE624\": CameraType.FISHEYE624,\n}\n\n\n@dataclass(init=False)\nclass Cameras(TensorDataclass):\n    \"\"\"Dataparser outputs for the image dataset and the ray generator.\n\n    If a single value is provided, it is broadcasted to all cameras.\n\n    Args:\n        camera_to_worlds: Camera to world matrices. Tensor of per-image c2w matrices, in [R | t] format\n        fx: Focal length x\n        fy: Focal length y\n        cx: Principal point x\n        cy: Principal point y\n        width: Image width\n        height: Image height\n        distortion_params: distortion coefficients (OpenCV 6 radial or 6-2-4 radial, tangential, thin-prism for Fisheye624)\n        camera_type: Type of camera model. This will be an int corresponding to the CameraType enum.\n        times: Timestamps for each camera\n        metadata: Additional metadata or data needed for interpolation, will mimic shape of the cameras\n            and will be broadcasted to the rays generated from any derivative RaySamples we create with this\n    \"\"\"\n\n    camera_to_worlds: Float[Tensor, \"*num_cameras 3 4\"]\n    fx: Float[Tensor, \"*num_cameras 1\"]\n    fy: Float[Tensor, \"*num_cameras 1\"]\n    cx: Float[Tensor, \"*num_cameras 1\"]\n    cy: Float[Tensor, \"*num_cameras 1\"]\n    width: Shaped[Tensor, \"*num_cameras 1\"]\n    height: Shaped[Tensor, \"*num_cameras 1\"]\n    distortion_params: Optional[Float[Tensor, \"*num_cameras 6\"]]\n    camera_type: Int[Tensor, \"*num_cameras 1\"]\n    times: Optional[Float[Tensor, \"num_cameras 1\"]]\n    metadata: Optional[Dict]\n\n    def __init__(\n        self,\n        camera_to_worlds: Float[Tensor, \"*batch_c2ws 3 4\"],\n        fx: Union[Float[Tensor, \"*batch_fxs 1\"], float],\n        fy: Union[Float[Tensor, \"*batch_fys 1\"], float],\n        cx: Union[Float[Tensor, \"*batch_cxs 1\"], float],\n        cy: Union[Float[Tensor, \"*batch_cys 1\"], float],\n        width: Optional[Union[Shaped[Tensor, \"*batch_ws 1\"], int]] = None,\n        height: Optional[Union[Shaped[Tensor, \"*batch_hs 1\"], int]] = None,\n        distortion_params: Optional[Float[Tensor, \"*batch_dist_params 6\"]] = None,\n        camera_type: Union[\n            Int[Tensor, \"*batch_cam_types 1\"],\n            int,\n            List[CameraType],\n            CameraType,\n        ] = CameraType.PERSPECTIVE,\n        times: Optional[Float[Tensor, \"num_cameras\"]] = None,\n        metadata: Optional[Dict] = None,\n    ) -> None:\n        \"\"\"Initializes the Cameras object.\n\n        Note on Input Tensor Dimensions: All of these tensors have items of dimensions Shaped[Tensor, \"3 4\"]\n        (in the case of the c2w matrices), Shaped[Tensor, \"6\"] (in the case of distortion params), or\n        Shaped[Tensor, \"1\"] (in the case of the rest of the elements). The dimensions before that are\n        considered the batch dimension of that tensor (batch_c2ws, batch_fxs, etc.). We will broadcast\n        all the tensors to be the same batch dimension. This means you can use any combination of the\n        input types in the function signature and it won't break. Your batch size for all tensors\n        must be broadcastable to the same size, and the resulting number of batch dimensions will be\n        the batch dimension with the largest number of dimensions.\n        \"\"\"\n\n        # This will notify the tensordataclass that we have a field with more than 1 dimension\n        self._field_custom_dimensions = {\"camera_to_worlds\": 2}\n\n        self.camera_to_worlds = camera_to_worlds\n\n        # fx fy calculation\n        self.fx = self._init_get_fc_xy(fx, \"fx\")  # @dataclass's post_init will take care of broadcasting\n        self.fy = self._init_get_fc_xy(fy, \"fy\")  # @dataclass's post_init will take care of broadcasting\n\n        # cx cy calculation\n        self.cx = self._init_get_fc_xy(cx, \"cx\")  # @dataclass's post_init will take care of broadcasting\n        self.cy = self._init_get_fc_xy(cy, \"cy\")  # @dataclass's post_init will take care of broadcasting\n\n        # Distortion Params Calculation:\n        self.distortion_params = distortion_params  # @dataclass's post_init will take care of broadcasting\n\n        # @dataclass's post_init will take care of broadcasting\n        self.height = self._init_get_height_width(height, self.cy)\n        self.width = self._init_get_height_width(width, self.cx)\n        self.camera_type = self._init_get_camera_type(camera_type)\n        self.times = self._init_get_times(times)\n\n        self.metadata = metadata\n\n        self.__post_init__()  # This will do the dataclass post_init and broadcast all the tensors\n\n    def _init_get_fc_xy(self, fc_xy: Union[float, torch.Tensor], name: str) -> torch.Tensor:\n        \"\"\"\n        Parses the input focal length / principle point x or y and returns a tensor of the correct shape\n\n        Only needs to make sure that we a 1 in the last dimension if it is a tensor. If it is a float, we\n        just need to make it into a tensor and it will be broadcasted later in the __post_init__ function.\n\n        Args:\n            fc_xy: The focal length / principle point x or y\n            name: The name of the variable. Used for error messages\n        \"\"\"\n        if isinstance(fc_xy, float):\n            fc_xy = torch.tensor([fc_xy], device=self.device)\n        elif isinstance(fc_xy, torch.Tensor):\n            if fc_xy.ndim == 0 or fc_xy.shape[-1] != 1:\n                fc_xy = fc_xy.unsqueeze(-1)\n            fc_xy = fc_xy.to(self.device)\n        else:\n            raise ValueError(f\"{name} must be a float or tensor, got {type(fc_xy)}\")\n        return fc_xy\n\n    def _init_get_camera_type(\n        self,\n        camera_type: Union[\n            Int[Tensor, \"*batch_cam_types 1\"], Int[Tensor, \"*batch_cam_types\"], int, List[CameraType], CameraType\n        ],\n    ) -> Int[Tensor, \"*num_cameras 1\"]:\n        \"\"\"\n        Parses the __init__() argument camera_type\n\n        Camera Type Calculation:\n        If CameraType, convert to int and then to tensor, then broadcast to all cameras\n        If List of CameraTypes, convert to ints and then to tensor, then broadcast to all cameras\n        If int, first go to tensor and then broadcast to all cameras\n        If tensor, broadcast to all cameras\n\n        Args:\n            camera_type: camera_type argument from __init__()\n        \"\"\"\n        if isinstance(camera_type, CameraType):\n            camera_type = torch.tensor([camera_type.value], device=self.device)\n        elif isinstance(camera_type, List) and isinstance(camera_type[0], CameraType):\n            camera_type = torch.tensor([[c.value] for c in camera_type], device=self.device)\n        elif isinstance(camera_type, int):\n            camera_type = torch.tensor([camera_type], device=self.device)\n        elif isinstance(camera_type, torch.Tensor):\n            assert not torch.is_floating_point(\n                camera_type\n            ), f\"camera_type tensor must be of type int, not: {camera_type.dtype}\"\n            camera_type = camera_type.to(self.device)\n            if camera_type.ndim == 0 or camera_type.shape[-1] != 1:\n                camera_type = camera_type.unsqueeze(-1)\n            # assert torch.all(\n            #     camera_type.view(-1)[0] == camera_type\n            # ), \"Batched cameras of different camera_types will be allowed in the future.\"\n        else:\n            raise ValueError(\n                'Invalid camera_type. Must be CameraType, List[CameraType], int, or torch.Tensor[\"num_cameras\"]. \\\n                    Received: '\n                + str(type(camera_type))\n            )\n        return camera_type\n\n    def _init_get_height_width(\n        self,\n        h_w: Union[Shaped[Tensor, \"*batch_hws 1\"], Shaped[Tensor, \"*batch_hws\"], int, None],\n        c_x_y: Shaped[Tensor, \"*batch_cxys\"],\n    ) -> Shaped[Tensor, \"*num_cameras 1\"]:\n        \"\"\"\n        Parses the __init__() argument for height or width\n\n        Height/Width Calculation:\n        If int, first go to tensor and then broadcast to all cameras\n        If tensor, broadcast to all cameras\n        If none, use cx or cy * 2\n        Else raise error\n\n        Args:\n            h_w: height or width argument from __init__()\n            c_x_y: cx or cy for when h_w == None\n        \"\"\"\n        if isinstance(h_w, int):\n            h_w = torch.as_tensor([h_w]).to(torch.int64).to(self.device)\n        elif isinstance(h_w, torch.Tensor):\n            assert not torch.is_floating_point(h_w), f\"height and width tensor must be of type int, not: {h_w.dtype}\"\n            h_w = h_w.to(torch.int64).to(self.device)\n            if h_w.ndim == 0 or h_w.shape[-1] != 1:\n                h_w = h_w.unsqueeze(-1)\n        # assert torch.all(h_w == h_w.view(-1)[0]), \"Batched cameras of different h, w will be allowed in the future.\"\n        elif h_w is None:\n            h_w = torch.as_tensor((c_x_y * 2)).to(torch.int64).to(self.device)\n        else:\n            raise ValueError(\"Height must be an int, tensor, or None, received: \" + str(type(h_w)))\n        return h_w\n\n    def _init_get_times(self, times: Union[None, torch.Tensor]) -> Union[None, torch.Tensor]:\n        if times is None:\n            times = None\n        elif isinstance(times, torch.Tensor):\n            if times.ndim == 0 or times.shape[-1] != 1:\n                times = times.unsqueeze(-1).to(self.device)\n        else:\n            raise ValueError(f\"times must be None or a tensor, got {type(times)}\")\n\n        return times\n\n    @property\n    def device(self) -> TORCH_DEVICE:\n        \"\"\"Returns the device that the camera is on.\"\"\"\n        return self.camera_to_worlds.device\n\n    @property\n    def image_height(self) -> Shaped[Tensor, \"*num_cameras 1\"]:\n        \"\"\"Returns the height of the images.\"\"\"\n        return self.height\n\n    @property\n    def image_width(self) -> Shaped[Tensor, \"*num_cameras 1\"]:\n        \"\"\"Returns the height of the images.\"\"\"\n        return self.width\n\n    @property\n    def is_jagged(self) -> bool:\n        \"\"\"\n        Returns whether or not the cameras are \"jagged\" (i.e. the height and widths are different, meaning that\n        you cannot concatenate the image coordinate maps together)\n        \"\"\"\n        h_jagged = not torch.all(self.height == self.height.view(-1)[0])\n        w_jagged = not torch.all(self.width == self.width.view(-1)[0])\n        return h_jagged or w_jagged\n\n    def get_image_coords(\n        self, pixel_offset: float = 0.5, index: Optional[Tuple] = None\n    ) -> Float[Tensor, \"height width 2\"]:\n        \"\"\"This gets the image coordinates of one of the cameras in this object.\n\n        If no index is specified, it will return the maximum possible sized height / width image coordinate map,\n        by looking at the maximum height and width of all the cameras in this object.\n\n        Args:\n            pixel_offset: Offset for each pixel. Defaults to center of pixel (0.5)\n            index: Tuple of indices into the batch dimensions of the camera. Defaults to None, which returns the 0th\n                flattened camera\n\n        Returns:\n            Grid of image coordinates.\n        \"\"\"\n        if index is None:\n            image_height = torch.max(self.image_height.view(-1)).item()\n            image_width = torch.max(self.image_width.view(-1)).item()\n            image_coords = torch.meshgrid(torch.arange(image_height), torch.arange(image_width), indexing=\"ij\")\n            image_coords = torch.stack(image_coords, dim=-1) + pixel_offset  # stored as (y, x) coordinates\n        else:\n            image_height = self.image_height[index].item()\n            image_width = self.image_width[index].item()\n            image_coords = torch.meshgrid(torch.arange(image_height), torch.arange(image_width), indexing=\"ij\")\n            image_coords = torch.stack(image_coords, dim=-1) + pixel_offset  # stored as (y, x) coordinates\n        return image_coords\n\n    def generate_rays(\n        self,\n        camera_indices: Union[Int[Tensor, \"*num_rays num_cameras_batch_dims\"], int],\n        coords: Optional[Float[Tensor, \"*num_rays 2\"]] = None,\n        camera_opt_to_camera: Optional[Float[Tensor, \"*num_rays 3 4\"]] = None,\n        distortion_params_delta: Optional[Float[Tensor, \"*num_rays 6\"]] = None,\n        keep_shape: Optional[bool] = None,\n        disable_distortion: bool = False,\n        aabb_box: Optional[SceneBox] = None,\n        obb_box: Optional[OrientedBox] = None,\n    ) -> RayBundle:\n        \"\"\"Generates rays for the given camera indices.\n\n        This function will standardize the input arguments and then call the _generate_rays_from_coords function\n        to generate the rays. Our goal is to parse the arguments and then get them into the right shape:\n\n        - camera_indices: (num_rays:..., num_cameras_batch_dims)\n        - coords: (num_rays:..., 2)\n        - camera_opt_to_camera: (num_rays:..., 3, 4) or None\n        - distortion_params_delta: (num_rays:..., 6) or None\n\n        Read the docstring for _generate_rays_from_coords for more information on how we generate the rays\n        after we have standardized the arguments.\n\n        We are only concerned about different combinations of camera_indices and coords matrices, and the following\n        are the 4 cases we have to deal with:\n\n        1. isinstance(camera_indices, int) and coords == None\n            - In this case we broadcast our camera_indices / coords shape (h, w, 1 / 2 respectively)\n        2. isinstance(camera_indices, int) and coords != None\n            - In this case, we broadcast camera_indices to the same batch dim as coords\n        3. not isinstance(camera_indices, int) and coords == None\n            - In this case, we will need to set coords so that it is of shape (h, w, num_rays, 2), and broadcast\n                all our other args to match the new definition of num_rays := (h, w) + num_rays\n        4. not isinstance(camera_indices, int) and coords != None\n            - In this case, we have nothing to do, only check that the arguments are of the correct shape\n\n        There is one more edge case we need to be careful with: when we have \"jagged cameras\" (ie: different heights\n        and widths for each camera). This isn't problematic when we specify coords, since coords is already a tensor.\n        When coords == None (ie: when we render out the whole image associated with this camera), we run into problems\n        since there's no way to stack each coordinate map as all coordinate maps are all different shapes. In this case,\n        we will need to flatten each individual coordinate map and concatenate them, giving us only one batch dimension,\n        regardless of the number of prepended extra batch dimensions in the camera_indices tensor.\n\n\n        Args:\n            camera_indices: Camera indices of the flattened cameras object to generate rays for.\n            coords: Coordinates of the pixels to generate rays for. If None, the full image will be rendered.\n            camera_opt_to_camera: Optional transform for the camera to world matrices.\n            distortion_params_delta: Optional delta for the distortion parameters.\n            keep_shape: If None, then we default to the regular behavior of flattening if cameras is jagged, otherwise\n                keeping dimensions. If False, we flatten at the end. If True, then we keep the shape of the\n                camera_indices and coords tensors (if we can).\n            disable_distortion: If True, disables distortion.\n            aabb_box: if not None will calculate nears and fars of the ray according to aabb box intersection\n\n        Returns:\n            Rays for the given camera indices and coords.\n        \"\"\"\n        # Check the argument types to make sure they're valid and all shaped correctly\n        assert isinstance(camera_indices, (torch.Tensor, int)), \"camera_indices must be a tensor or int\"\n        assert coords is None or isinstance(coords, torch.Tensor), \"coords must be a tensor or None\"\n        assert camera_opt_to_camera is None or isinstance(camera_opt_to_camera, torch.Tensor)\n        assert distortion_params_delta is None or isinstance(distortion_params_delta, torch.Tensor)\n        if isinstance(camera_indices, torch.Tensor) and isinstance(coords, torch.Tensor):\n            num_rays_shape = camera_indices.shape[:-1]\n            errormsg = \"Batch dims of inputs must match when inputs are all tensors\"\n            assert coords.shape[:-1] == num_rays_shape, errormsg\n            assert camera_opt_to_camera is None or camera_opt_to_camera.shape[:-2] == num_rays_shape, errormsg\n            assert distortion_params_delta is None or distortion_params_delta.shape[:-1] == num_rays_shape, errormsg\n\n        # If zero dimensional, we need to unsqueeze to get a batch dimension and then squeeze later\n        if not self.shape:\n            cameras = self.reshape((1,))\n            assert torch.all(\n                torch.tensor(camera_indices == 0) if isinstance(camera_indices, int) else camera_indices == 0\n            ), \"Can only index into single camera with no batch dimensions if index is zero\"\n        else:\n            cameras = self\n\n        # If the camera indices are an int, then we need to make sure that the camera batch is 1D\n        if isinstance(camera_indices, int):\n            assert (\n                len(cameras.shape) == 1\n            ), \"camera_indices must be a tensor if cameras are batched with more than 1 batch dimension\"\n            camera_indices = torch.tensor([camera_indices], device=cameras.device)\n\n        assert camera_indices.shape[-1] == len(\n            cameras.shape\n        ), \"camera_indices must have shape (num_rays:..., num_cameras_batch_dims)\"\n\n        # If keep_shape is True, then we need to make sure that the camera indices in question\n        # are all the same height and width and can actually be batched while maintaining the image\n        # shape\n        if keep_shape is True:\n            assert torch.all(cameras.height[camera_indices] == cameras.height[camera_indices[0]]) and torch.all(\n                cameras.width[camera_indices] == cameras.width[camera_indices[0]]\n            ), \"Can only keep shape if all cameras have the same height and width\"\n\n        # If the cameras don't all have same height / width, if coords is not none, we will need to generate\n        # a flat list of coords for each camera and then concatenate otherwise our rays will be jagged.\n        # Camera indices, camera_opt, and distortion will also need to be broadcasted accordingly which is non-trivial\n        if cameras.is_jagged and coords is None and (keep_shape is None or keep_shape is False):\n            index_dim = camera_indices.shape[-1]\n            camera_indices = camera_indices.reshape(-1, index_dim)\n            _coords = [cameras.get_image_coords(index=tuple(index)).reshape(-1, 2) for index in camera_indices]\n            camera_indices = torch.cat(\n                [index.unsqueeze(0).repeat(coords.shape[0], 1) for index, coords in zip(camera_indices, _coords)],\n            )\n            coords = torch.cat(_coords, dim=0)\n            assert coords.shape[0] == camera_indices.shape[0]\n            # Need to get the coords of each indexed camera and flatten all coordinate maps and concatenate them\n\n        # The case where we aren't jagged && keep_shape (since otherwise coords is already set) and coords\n        # is None. In this case we append (h, w) to the num_rays dimensions for all tensors. In this case,\n        # each image in camera_indices has to have the same shape since otherwise we would have error'd when\n        # we checked keep_shape is valid or we aren't jagged.\n        if coords is None:\n            index_dim = camera_indices.shape[-1]\n            index = camera_indices.reshape(-1, index_dim)[0]\n            coords = cameras.get_image_coords(index=tuple(index))  # (h, w, 2)\n            coords = coords.reshape(coords.shape[:2] + (1,) * len(camera_indices.shape[:-1]) + (2,))  # (h, w, 1..., 2)\n            coords = coords.expand(coords.shape[:2] + camera_indices.shape[:-1] + (2,))  # (h, w, num_rays, 2)\n            camera_opt_to_camera = (  # (h, w, num_rays, 3, 4) or None\n                camera_opt_to_camera.broadcast_to(coords.shape[:-1] + (3, 4))\n                if camera_opt_to_camera is not None\n                else None\n            )\n            distortion_params_delta = (  # (h, w, num_rays, 6) or None\n                distortion_params_delta.broadcast_to(coords.shape[:-1] + (6,))\n                if distortion_params_delta is not None\n                else None\n            )\n\n        # If camera indices was an int or coords was none, we need to broadcast our indices along batch dims\n        camera_indices = camera_indices.broadcast_to(coords.shape[:-1] + (len(cameras.shape),)).to(torch.long)\n\n        # Checking our tensors have been standardized\n        assert isinstance(coords, torch.Tensor) and isinstance(camera_indices, torch.Tensor)\n        assert camera_indices.shape[-1] == len(cameras.shape)\n        assert camera_opt_to_camera is None or camera_opt_to_camera.shape[:-2] == coords.shape[:-1]\n        assert distortion_params_delta is None or distortion_params_delta.shape[:-1] == coords.shape[:-1]\n\n        # This will do the actual work of generating the rays now that we have standardized the inputs\n        # raybundle.shape == (num_rays) when done\n\n        raybundle = cameras._generate_rays_from_coords(\n            camera_indices, coords, camera_opt_to_camera, distortion_params_delta, disable_distortion=disable_distortion\n        )\n\n        # If we have mandated that we don't keep the shape, then we flatten\n        if keep_shape is False:\n            raybundle = raybundle.flatten()\n\n        if aabb_box is not None or obb_box is not None:\n            with torch.no_grad():\n                rays_o = raybundle.origins.contiguous()\n                rays_d = raybundle.directions.contiguous()\n\n                shape = rays_o.shape\n\n                rays_o = rays_o.reshape((-1, 3))\n                rays_d = rays_d.reshape((-1, 3))\n\n                if aabb_box is not None:\n                    tensor_aabb = Parameter(aabb_box.aabb.flatten(), requires_grad=False)\n                    tensor_aabb = tensor_aabb.to(rays_o.device)\n                    t_min, t_max = nerfstudio.utils.math.intersect_aabb(rays_o, rays_d, tensor_aabb)\n                elif obb_box is not None:\n                    t_min, t_max = nerfstudio.utils.math.intersect_obb(rays_o, rays_d, obb_box)\n                else:\n                    assert False\n\n                t_min = t_min.reshape([shape[0], shape[1], 1])\n                t_max = t_max.reshape([shape[0], shape[1], 1])\n\n                raybundle.nears = t_min\n                raybundle.fars = t_max\n\n        # TODO: We should have to squeeze the last dimension here if we started with zero batch dims, but never have to,\n        # so there might be a rogue squeeze happening somewhere, and this may cause some unintended behaviour\n        # that we haven't caught yet with tests\n        return raybundle\n\n    def _generate_rays_from_coords(\n        self,\n        camera_indices: Int[Tensor, \"*num_rays num_cameras_batch_dims\"],\n        coords: Float[Tensor, \"*num_rays 2\"],\n        camera_opt_to_camera: Optional[Float[Tensor, \"*num_rays 3 4\"]] = None,\n        distortion_params_delta: Optional[Float[Tensor, \"*num_rays 6\"]] = None,\n        disable_distortion: bool = False,\n    ) -> RayBundle:\n        \"\"\"Generates rays for the given camera indices and coords where self isn't jagged\n\n        This is a fairly complex function, so let's break this down slowly.\n\n        Shapes involved:\n            - num_rays: This is your output raybundle shape. It dictates the number and shape of the rays generated\n            - num_cameras_batch_dims: This is the number of dimensions of our camera\n\n        Args:\n            camera_indices: Camera indices of the flattened cameras object to generate rays for.\n                The shape of this is such that indexing into camera_indices[\"num_rays\":...] will return the\n                index into each batch dimension of the camera in order to get the correct camera specified by\n                \"num_rays\".\n\n                Example:\n                    >>> cameras = Cameras(...)\n                    >>> cameras.shape\n                        (2, 3, 4)\n\n                    >>> camera_indices = torch.tensor([0, 0, 0]) # We need an axis of length 3 since cameras.ndim == 3\n                    >>> camera_indices.shape\n                        (3,)\n                    >>> coords = torch.tensor([1,1])\n                    >>> coords.shape\n                        (2,)\n                    >>> out_rays = cameras.generate_rays(camera_indices=camera_indices, coords = coords)\n                        # This will generate a RayBundle with a single ray for the\n                        # camera at cameras[0,0,0] at image coordinates (1,1), so out_rays.shape == ()\n                    >>> out_rays.shape\n                        ()\n\n                    >>> camera_indices = torch.tensor([[0,0,0]])\n                    >>> camera_indices.shape\n                        (1, 3)\n                    >>> coords = torch.tensor([[1,1]])\n                    >>> coords.shape\n                        (1, 2)\n                    >>> out_rays = cameras.generate_rays(camera_indices=camera_indices, coords = coords)\n                        # This will generate a RayBundle with a single ray for the\n                        # camera at cameras[0,0,0] at point (1,1), so out_rays.shape == (1,)\n                        # since we added an extra dimension in front of camera_indices\n                    >>> out_rays.shape\n                        (1,)\n\n                If you want more examples, check tests/cameras/test_cameras and the function check_generate_rays_shape\n\n                The bottom line is that for camera_indices: (num_rays:..., num_cameras_batch_dims), num_rays is the\n                output shape and if you index into the output RayBundle with some indices [i:...], if you index into\n                camera_indices with camera_indices[i:...] as well, you will get a 1D tensor containing the batch\n                indices into the original cameras object corresponding to that ray (ie: you will get the camera\n                from our batched cameras corresponding to the ray at RayBundle[i:...]).\n\n            coords: Coordinates of the pixels to generate rays for. If None, the full image will be rendered, meaning\n                height and width get prepended to the num_rays dimensions. Indexing into coords with [i:...] will\n                get you the image coordinates [x, y] of that specific ray located at output RayBundle[i:...].\n\n            camera_opt_to_camera: Optional transform for the camera to world matrices.\n                In terms of shape, it follows the same rules as coords, but indexing into it with [i:...] gets you\n                the 2D camera to world transform matrix for the camera optimization at RayBundle[i:...].\n\n            distortion_params_delta: Optional delta for the distortion parameters.\n                In terms of shape, it follows the same rules as coords, but indexing into it with [i:...] gets you\n                the 1D tensor with the 6 distortion parameters for the camera optimization at RayBundle[i:...].\n\n            disable_distortion: If True, disables distortion.\n\n        Returns:\n            Rays for the given camera indices and coords. RayBundle.shape == num_rays\n        \"\"\"\n        # Make sure we're on the right devices\n        camera_indices = camera_indices.to(self.device)\n        coords = coords.to(self.device)\n\n        # Checking to make sure everything is of the right shape and type\n        num_rays_shape = camera_indices.shape[:-1]\n        assert camera_indices.shape == num_rays_shape + (self.ndim,)\n        assert coords.shape == num_rays_shape + (2,)\n        assert coords.shape[-1] == 2\n        assert camera_opt_to_camera is None or camera_opt_to_camera.shape == num_rays_shape + (3, 4)\n        assert distortion_params_delta is None or distortion_params_delta.shape == num_rays_shape + (6,)\n\n        # Here, we've broken our indices down along the num_cameras_batch_dims dimension allowing us to index by all\n        # of our output rays at each dimension of our cameras object\n        true_indices = [camera_indices[..., i] for i in range(camera_indices.shape[-1])]\n\n        # Get all our focal lengths, principal points and make sure they are the right shapes\n        y = coords[..., 0]  # (num_rays,) get rid of the last dimension\n        x = coords[..., 1]  # (num_rays,) get rid of the last dimension\n        fx, fy = self.fx[true_indices].squeeze(-1), self.fy[true_indices].squeeze(-1)  # (num_rays,)\n        cx, cy = self.cx[true_indices].squeeze(-1), self.cy[true_indices].squeeze(-1)  # (num_rays,)\n        assert (\n            y.shape == num_rays_shape\n            and x.shape == num_rays_shape\n            and fx.shape == num_rays_shape\n            and fy.shape == num_rays_shape\n            and cx.shape == num_rays_shape\n            and cy.shape == num_rays_shape\n        ), (\n            str(num_rays_shape)\n            + str(y.shape)\n            + str(x.shape)\n            + str(fx.shape)\n            + str(fy.shape)\n            + str(cx.shape)\n            + str(cy.shape)\n        )\n\n        # Get our image coordinates and image coordinates offset by 1 (offsets used for dx, dy calculations)\n        # Also make sure the shapes are correct\n        coord = torch.stack([(x - cx) / fx, (y - cy) / fy], -1)  # (num_rays, 2)\n        coord_x_offset = torch.stack([(x - cx + 1) / fx, (y - cy) / fy], -1)  # (num_rays, 2)\n        coord_y_offset = torch.stack([(x - cx) / fx, (y - cy + 1) / fy], -1)  # (num_rays, 2)\n        assert (\n            coord.shape == num_rays_shape + (2,)\n            and coord_x_offset.shape == num_rays_shape + (2,)\n            and coord_y_offset.shape == num_rays_shape + (2,)\n        )\n\n        # Stack image coordinates and image coordinates offset by 1, check shapes too\n        coord_stack = torch.stack([coord, coord_x_offset, coord_y_offset], dim=0)  # (3, num_rays, 2)\n        assert coord_stack.shape == (3,) + num_rays_shape + (2,)\n\n        # Undistorts our images according to our distortion parameters\n        distortion_params = None\n        if not disable_distortion:\n            if self.distortion_params is not None:\n                distortion_params = self.distortion_params[true_indices]\n                if distortion_params_delta is not None:\n                    distortion_params = distortion_params + distortion_params_delta\n            elif distortion_params_delta is not None:\n                distortion_params = distortion_params_delta\n\n            # Do not apply distortion for equirectangular images\n            if distortion_params is not None:\n                mask = (self.camera_type[true_indices] != CameraType.EQUIRECTANGULAR.value).squeeze(-1)  # (num_rays)\n                coord_mask = torch.stack([mask, mask, mask], dim=0)\n                if mask.any() and (distortion_params != 0).any():\n                    coord_stack[coord_mask, :] = camera_utils.radial_and_tangential_undistort(\n                        coord_stack[coord_mask, :].reshape(3, -1, 2),\n                        distortion_params[mask, :],\n                    ).reshape(-1, 2)\n\n        # Switch from OpenCV to OpenGL\n        coord_stack[..., 1] *= -1\n\n        # Make sure after we have undistorted our images, the shapes are still correct\n        assert coord_stack.shape == (3,) + num_rays_shape + (2,)\n\n        # Gets our directions for all our rays in camera coordinates and checks shapes at the end\n        # Here, directions_stack is of shape (3, num_rays, 3)\n        # directions_stack[0] is the direction for ray in camera coordinates\n        # directions_stack[1] is the direction for ray in camera coordinates offset by 1 in x\n        # directions_stack[2] is the direction for ray in camera coordinates offset by 1 in y\n        cam_types = torch.unique(self.camera_type, sorted=False)\n        directions_stack = torch.empty((3,) + num_rays_shape + (3,), device=self.device)\n\n        c2w = self.camera_to_worlds[true_indices]\n        assert c2w.shape == num_rays_shape + (3, 4)\n\n        def _compute_rays_for_omnidirectional_stereo(\n            eye: Literal[\"left\", \"right\"],\n        ) -> Tuple[Float[Tensor, \"num_rays_shape 3\"], Float[Tensor, \"3 num_rays_shape 3\"]]:\n            \"\"\"Compute the rays for an omnidirectional stereo camera\n\n            Args:\n                eye: Which eye to compute rays for.\n\n            Returns:\n                A tuple containing the origins and the directions of the rays.\n            \"\"\"\n            # Directions calculated similarly to equirectangular\n            ods_cam_type = (\n                CameraType.OMNIDIRECTIONALSTEREO_R.value if eye == \"right\" else CameraType.OMNIDIRECTIONALSTEREO_L.value\n            )\n            mask = (self.camera_type[true_indices] == ods_cam_type).squeeze(-1)\n            mask = torch.stack([mask, mask, mask], dim=0)\n            theta = -torch.pi * coord_stack[..., 0]\n            phi = torch.pi * (0.5 - coord_stack[..., 1])\n\n            directions_stack[..., 0][mask] = torch.masked_select(-torch.sin(theta) * torch.sin(phi), mask).float()\n            directions_stack[..., 1][mask] = torch.masked_select(torch.cos(phi), mask).float()\n            directions_stack[..., 2][mask] = torch.masked_select(-torch.cos(theta) * torch.sin(phi), mask).float()\n\n            vr_ipd = 0.064  # IPD in meters (note: scale of NeRF must be true to life and can be adjusted with the Blender add-on)\n            isRightEye = 1 if eye == \"right\" else -1\n\n            # find ODS camera position\n            c2w = self.camera_to_worlds[true_indices]\n            assert c2w.shape == num_rays_shape + (3, 4)\n            transposedC2W = c2w[0][0].t()\n            ods_cam_position = transposedC2W[3].repeat(c2w.shape[1], 1)\n\n            rotation = c2w[..., :3, :3]\n\n            ods_theta = -torch.pi * ((x - cx) / fx)[0]\n\n            # local axes of ODS camera\n            ods_x_axis = torch.tensor([1, 0, 0], device=c2w.device)\n            ods_z_axis = torch.tensor([0, 0, -1], device=c2w.device)\n\n            # circle of ODS ray origins\n            ods_origins_circle = (\n                isRightEye * (vr_ipd / 2.0) * (ods_x_axis.repeat(c2w.shape[1], 1)) * (torch.cos(ods_theta))[:, None]\n                + isRightEye * (vr_ipd / 2.0) * (ods_z_axis.repeat(c2w.shape[1], 1)) * (torch.sin(ods_theta))[:, None]\n            )\n\n            # rotate origins to match the camera rotation\n            for i in range(ods_origins_circle.shape[0]):\n                ods_origins_circle[i] = rotation[0][0] @ ods_origins_circle[i] + ods_cam_position[0]\n            ods_origins_circle = ods_origins_circle.unsqueeze(0).repeat(c2w.shape[0], 1, 1)\n\n            # assign final camera origins\n            c2w[..., :3, 3] = ods_origins_circle\n\n            return ods_origins_circle, directions_stack\n\n        def _compute_rays_for_vr180(\n            eye: Literal[\"left\", \"right\"],\n        ) -> Tuple[Float[Tensor, \"num_rays_shape 3\"], Float[Tensor, \"3 num_rays_shape 3\"]]:\n            \"\"\"Compute the rays for a VR180 camera\n\n            Args:\n                eye: Which eye to compute rays for.\n\n            Returns:\n                A tuple containing the origins and the directions of the rays.\n            \"\"\"\n            # Directions calculated similarly to equirectangular\n            vr180_cam_type = CameraType.VR180_R.value if eye == \"right\" else CameraType.VR180_L.value\n            mask = (self.camera_type[true_indices] == vr180_cam_type).squeeze(-1)\n            mask = torch.stack([mask, mask, mask], dim=0)\n\n            # adjusting theta range to +/-90 deg\n            theta = -torch.pi * ((x - cx) / (fx * 2))[0]\n            phi = torch.pi * (0.5 - coord_stack[..., 1])\n\n            directions_stack[..., 0][mask] = torch.masked_select(-torch.sin(theta) * torch.sin(phi), mask).float()\n            directions_stack[..., 1][mask] = torch.masked_select(torch.cos(phi), mask).float()\n            directions_stack[..., 2][mask] = torch.masked_select(-torch.cos(theta) * torch.sin(phi), mask).float()\n\n            vr_ipd = 0.064  # IPD in meters (note: scale of NeRF must be true to life and can be adjusted with the Blender add-on)\n            isRightEye = 1 if eye == \"right\" else -1\n\n            # find VR180 camera position\n            c2w = self.camera_to_worlds[true_indices]\n            assert c2w.shape == num_rays_shape + (3, 4)\n            transposedC2W = c2w[0][0].t()\n            vr180_cam_position = transposedC2W[3].repeat(c2w.shape[1], 1)\n\n            rotation = c2w[..., :3, :3]\n\n            # interocular axis of the VR180 camera\n            vr180_x_axis = torch.tensor([1, 0, 0], device=c2w.device)\n\n            # VR180 ray origins of horizontal offset\n            vr180_origins = isRightEye * (vr_ipd / 2.0) * (vr180_x_axis.repeat(c2w.shape[1], 1))\n\n            # rotate origins to match the camera rotation\n            for i in range(vr180_origins.shape[0]):\n                vr180_origins[i] = rotation[0][0] @ vr180_origins[i] + vr180_cam_position[0]\n\n            vr180_origins = vr180_origins.unsqueeze(0).repeat(c2w.shape[0], 1, 1)\n\n            # assign final camera origins\n            c2w[..., :3, 3] = vr180_origins\n\n            return vr180_origins, directions_stack\n\n        for cam_type in cam_types:\n            if CameraType.PERSPECTIVE.value == cam_type:\n                mask = (self.camera_type[true_indices] == CameraType.PERSPECTIVE.value).squeeze(-1)  # (num_rays)\n                mask = torch.stack([mask, mask, mask], dim=0)\n                directions_stack[..., 0][mask] = torch.masked_select(coord_stack[..., 0], mask).float()\n                directions_stack[..., 1][mask] = torch.masked_select(coord_stack[..., 1], mask).float()\n                directions_stack[..., 2][mask] = -1.0\n\n            elif CameraType.FISHEYE.value == cam_type:\n                mask = (self.camera_type[true_indices] == CameraType.FISHEYE.value).squeeze(-1)  # (num_rays)\n                mask = torch.stack([mask, mask, mask], dim=0)\n\n                theta = torch.sqrt(torch.sum(coord_stack**2, dim=-1))\n                theta = torch.clip(theta, 0.0, math.pi)\n\n                sin_theta = torch.sin(theta)\n\n                directions_stack[..., 0][mask] = torch.masked_select(\n                    coord_stack[..., 0] * sin_theta / theta, mask\n                ).float()\n                directions_stack[..., 1][mask] = torch.masked_select(\n                    coord_stack[..., 1] * sin_theta / theta, mask\n                ).float()\n                directions_stack[..., 2][mask] = -torch.masked_select(torch.cos(theta), mask).float()\n\n            elif CameraType.EQUIRECTANGULAR.value == cam_type:\n                mask = (self.camera_type[true_indices] == CameraType.EQUIRECTANGULAR.value).squeeze(-1)  # (num_rays)\n                mask = torch.stack([mask, mask, mask], dim=0)\n\n                # For equirect, fx = fy = height = width/2\n                # Then coord[..., 0] goes from -1 to 1 and coord[..., 1] goes from -1/2 to 1/2\n                theta = -torch.pi * coord_stack[..., 0]  # minus sign for right-handed\n                phi = torch.pi * (0.5 - coord_stack[..., 1])\n                # use spherical in local camera coordinates (+y up, x=0 and z<0 is theta=0)\n                directions_stack[..., 0][mask] = torch.masked_select(-torch.sin(theta) * torch.sin(phi), mask).float()\n                directions_stack[..., 1][mask] = torch.masked_select(torch.cos(phi), mask).float()\n                directions_stack[..., 2][mask] = torch.masked_select(-torch.cos(theta) * torch.sin(phi), mask).float()\n\n            elif CameraType.OMNIDIRECTIONALSTEREO_L.value == cam_type:\n                ods_origins_circle, directions_stack = _compute_rays_for_omnidirectional_stereo(\"left\")\n                # assign final camera origins\n                c2w[..., :3, 3] = ods_origins_circle\n\n            elif CameraType.OMNIDIRECTIONALSTEREO_R.value == cam_type:\n                ods_origins_circle, directions_stack = _compute_rays_for_omnidirectional_stereo(\"right\")\n                # assign final camera origins\n                c2w[..., :3, 3] = ods_origins_circle\n\n            elif CameraType.VR180_L.value == cam_type:\n                vr180_origins, directions_stack = _compute_rays_for_vr180(\"left\")\n                # assign final camera origins\n                c2w[..., :3, 3] = vr180_origins\n\n            elif CameraType.VR180_R.value == cam_type:\n                vr180_origins, directions_stack = _compute_rays_for_vr180(\"right\")\n                # assign final camera origins\n                c2w[..., :3, 3] = vr180_origins\n\n            elif CameraType.ORTHOPHOTO.value in cam_types:\n                # here the focal length determine the imaging area, the smaller fx, the bigger imaging area.\n                mask = (self.camera_type[true_indices] == CameraType.ORTHOPHOTO.value).squeeze(-1)\n                dir_mask = torch.stack([mask, mask, mask], dim=0)\n                # in orthophoto cam, all rays have same direction, dir = R @ [0, 0, 1], R will be applied following.\n                directions_stack[dir_mask] = torch.tensor(\n                    [0.0, 0.0, -1.0], dtype=directions_stack.dtype, device=directions_stack.device\n                )\n                # in orthophoto cam, ray origins are grids, then transform grids with c2w, c2w @ P.\n                grids = coord[mask]\n                grids[..., 1] *= -1.0  # convert to left-hand system.\n                grids = torch.cat([grids, torch.zeros_like(grids[..., -1:]), torch.ones_like(grids[..., -1:])], dim=-1)\n                grids = torch.matmul(c2w[mask], grids[..., None]).squeeze(-1)\n                c2w[..., :3, 3][mask] = grids\n\n            elif CameraType.FISHEYE624.value in cam_types:\n                mask = (self.camera_type[true_indices] == CameraType.FISHEYE624.value).squeeze(-1)  # (num_rays)\n                coord_mask = torch.stack([mask, mask, mask], dim=0)\n\n                # fisheye624 requires pixel coordinates to unproject, so we need to recomput the offsets in pixel coords.\n                pcoord = torch.stack([x, y], -1)  # (num_rays, 2)\n                pcoord_x_offset = torch.stack([x + 1, y], -1)  # (num_rays, 2)\n                pcoord_y_offset = torch.stack([x, y + 1], -1)  # (num_rays, 2)\n\n                # Stack image coordinates and image coordinates offset by 1, check shapes too\n                pcoord_stack = torch.stack([pcoord, pcoord_x_offset, pcoord_y_offset], dim=0)  # (3, num_rays, 2)\n\n                assert distortion_params is not None\n                masked_coords = pcoord_stack[coord_mask, :]\n                # The fisheye unprojection does not rely on planar/pinhole unprojection, thus the method needs\n                # to access the focal length and principle points directly.\n                camera_params = torch.cat(\n                    [\n                        fx[mask].unsqueeze(1),\n                        fy[mask].unsqueeze(1),\n                        cx[mask].unsqueeze(1),\n                        cy[mask].unsqueeze(1),\n                        distortion_params[mask, :],\n                    ],\n                    dim=1,\n                )\n                directions_stack[coord_mask] = camera_utils.fisheye624_unproject(masked_coords, camera_params)\n\n            else:\n                raise ValueError(f\"Camera type {cam_type} not supported.\")\n\n        assert directions_stack.shape == (3,) + num_rays_shape + (3,)\n\n        if camera_opt_to_camera is not None:\n            c2w = pose_utils.multiply(c2w, camera_opt_to_camera)\n        rotation = c2w[..., :3, :3]  # (..., 3, 3)\n        assert rotation.shape == num_rays_shape + (3, 3)\n\n        directions_stack = torch.sum(\n            directions_stack[..., None, :] * rotation, dim=-1\n        )  # (..., 1, 3) * (..., 3, 3) -> (..., 3)\n        directions_stack, directions_norm = camera_utils.normalize_with_norm(directions_stack, -1)\n        assert directions_stack.shape == (3,) + num_rays_shape + (3,)\n\n        origins = c2w[..., :3, 3]  # (..., 3)\n        assert origins.shape == num_rays_shape + (3,)\n\n        directions = directions_stack[0]\n        assert directions.shape == num_rays_shape + (3,)\n\n        # norms of the vector going between adjacent coords, giving us dx and dy per output ray\n        dx = torch.sqrt(torch.sum((directions - directions_stack[1]) ** 2, dim=-1))  # (\"num_rays\":...,)\n        dy = torch.sqrt(torch.sum((directions - directions_stack[2]) ** 2, dim=-1))  # (\"num_rays\":...,)\n        assert dx.shape == num_rays_shape and dy.shape == num_rays_shape\n\n        pixel_area = (dx * dy)[..., None]  # (\"num_rays\":..., 1)\n        assert pixel_area.shape == num_rays_shape + (1,)\n\n        times = self.times[camera_indices, 0] if self.times is not None else None\n\n        metadata = (\n            self._apply_fn_to_dict(self.metadata, lambda x: x[true_indices]) if self.metadata is not None else None\n        )\n        if metadata is not None:\n            metadata[\"directions_norm\"] = directions_norm[0].detach()\n        else:\n            metadata = {\"directions_norm\": directions_norm[0].detach()}\n\n        return RayBundle(\n            origins=origins,\n            directions=directions,\n            pixel_area=pixel_area,\n            camera_indices=camera_indices,\n            times=times,\n            metadata=metadata,\n        )\n\n    def to_json(\n        self, camera_idx: int, image: Optional[Float[Tensor, \"height width 2\"]] = None, max_size: Optional[int] = None\n    ) -> Dict:\n        \"\"\"Convert a camera to a json dictionary.\n\n        Args:\n            camera_idx: Index of the camera to convert.\n            image: An image in range [0, 1] that is encoded to a base64 string.\n            max_size: Max size to resize the image to if present.\n\n        Returns:\n            A JSON representation of the camera\n        \"\"\"\n        flattened = self.flatten()\n        times = flattened[camera_idx].times\n        if times is not None:\n            times = times.item()\n        json_ = {\n            \"type\": \"PinholeCamera\",\n            \"cx\": flattened[camera_idx].cx.item(),\n            \"cy\": flattened[camera_idx].cy.item(),\n            \"fx\": flattened[camera_idx].fx.item(),\n            \"fy\": flattened[camera_idx].fy.item(),\n            \"camera_to_world\": self.camera_to_worlds[camera_idx].tolist(),\n            \"camera_index\": camera_idx,\n            \"times\": times,\n        }\n        if image is not None:\n            image_uint8 = (image * 255).detach().type(torch.uint8)\n            if max_size is not None:\n                image_uint8 = image_uint8.permute(2, 0, 1)\n\n                # torchvision can be slow to import, so we do it lazily.\n                import torchvision.transforms.functional as TF\n\n                image_uint8 = TF.resize(image_uint8, max_size, antialias=None)  # type: ignore\n                image_uint8 = image_uint8.permute(1, 2, 0)\n            image_uint8 = image_uint8.cpu().numpy()\n            data = cv2.imencode(\".jpg\", image_uint8)[1].tobytes()  # type: ignore\n            json_[\"image\"] = str(\"data:image/jpeg;base64,\" + base64.b64encode(data).decode(\"ascii\"))\n        return json_\n\n    def get_intrinsics_matrices(self) -> Float[Tensor, \"*num_cameras 3 3\"]:\n        \"\"\"Returns the intrinsic matrices for each camera.\n\n        Returns:\n            Pinhole camera intrinsics matrices\n        \"\"\"\n        K = torch.zeros((*self.shape, 3, 3), dtype=torch.float32)\n        K[..., 0, 0] = self.fx.squeeze(-1)\n        K[..., 1, 1] = self.fy.squeeze(-1)\n        K[..., 0, 2] = self.cx.squeeze(-1)\n        K[..., 1, 2] = self.cy.squeeze(-1)\n        K[..., 2, 2] = 1.0\n        return K\n\n    def rescale_output_resolution(\n        self,\n        scaling_factor: Union[Shaped[Tensor, \"*num_cameras\"], Shaped[Tensor, \"*num_cameras 1\"], float, int],\n        scale_rounding_mode: str = \"floor\",\n    ) -> None:\n        \"\"\"Rescale the output resolution of the cameras.\n\n        Args:\n            scaling_factor: Scaling factor to apply to the output resolution.\n            scale_rounding_mode: round down or round up when calculating the scaled image height and width\n        \"\"\"\n        if isinstance(scaling_factor, (float, int)):\n            scaling_factor = torch.tensor([scaling_factor]).to(self.device).broadcast_to((self.cx.shape))\n        elif isinstance(scaling_factor, torch.Tensor) and scaling_factor.shape == self.shape:\n            scaling_factor = scaling_factor.unsqueeze(-1)\n        elif isinstance(scaling_factor, torch.Tensor) and scaling_factor.shape == (*self.shape, 1):\n            pass\n        else:\n            raise ValueError(\n                f\"Scaling factor must be a float, int, or a tensor of shape {self.shape} or {(*self.shape, 1)}.\"\n            )\n\n        self.fx = self.fx * scaling_factor\n        self.fy = self.fy * scaling_factor\n        self.cx = self.cx * scaling_factor\n        self.cy = self.cy * scaling_factor\n        if scale_rounding_mode == \"floor\":\n            self.height = (self.height * scaling_factor).to(torch.int64)\n            self.width = (self.width * scaling_factor).to(torch.int64)\n        elif scale_rounding_mode == \"round\":\n            self.height = torch.floor(0.5 + (self.height * scaling_factor)).to(torch.int64)\n            self.width = torch.floor(0.5 + (self.width * scaling_factor)).to(torch.int64)\n        elif scale_rounding_mode == \"ceil\":\n            self.height = torch.ceil(self.height * scaling_factor).to(torch.int64)\n            self.width = torch.ceil(self.width * scaling_factor).to(torch.int64)\n        else:\n            raise ValueError(\"Scale rounding mode must be 'floor', 'round' or 'ceil'.\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/lie_groups.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nHelper for Lie group operations. Currently only used for pose optimization.\n\"\"\"\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\n\n# We make an exception on snake case conventions because SO3 != so3.\ndef exp_map_SO3xR3(tangent_vector: Float[Tensor, \"b 6\"]) -> Float[Tensor, \"b 3 4\"]:\n    \"\"\"Compute the exponential map of the direct product group `SO(3) x R^3`.\n\n    This can be used for learning pose deltas on SE(3), and is generally faster than `exp_map_SE3`.\n\n    Args:\n        tangent_vector: Tangent vector; length-3 translations, followed by an `so(3)` tangent vector.\n    Returns:\n        [R|t] transformation matrices.\n    \"\"\"\n    # code for SO3 map grabbed from pytorch3d and stripped down to bare-bones\n    log_rot = tangent_vector[:, 3:]\n    nrms = (log_rot * log_rot).sum(1)\n    rot_angles = torch.clamp(nrms, 1e-4).sqrt()\n    rot_angles_inv = 1.0 / rot_angles\n    fac1 = rot_angles_inv * rot_angles.sin()\n    fac2 = rot_angles_inv * rot_angles_inv * (1.0 - rot_angles.cos())\n    skews = torch.zeros((log_rot.shape[0], 3, 3), dtype=log_rot.dtype, device=log_rot.device)\n    skews[:, 0, 1] = -log_rot[:, 2]\n    skews[:, 0, 2] = log_rot[:, 1]\n    skews[:, 1, 0] = log_rot[:, 2]\n    skews[:, 1, 2] = -log_rot[:, 0]\n    skews[:, 2, 0] = -log_rot[:, 1]\n    skews[:, 2, 1] = log_rot[:, 0]\n    skews_square = torch.bmm(skews, skews)\n\n    ret = torch.zeros(tangent_vector.shape[0], 3, 4, dtype=tangent_vector.dtype, device=tangent_vector.device)\n    ret[:, :3, :3] = (\n        fac1[:, None, None] * skews\n        + fac2[:, None, None] * skews_square\n        + torch.eye(3, dtype=log_rot.dtype, device=log_rot.device)[None]\n    )\n\n    # Compute the translation\n    ret[:, :3, 3] = tangent_vector[:, :3]\n    return ret\n\n\ndef exp_map_SE3(tangent_vector: Float[Tensor, \"b 6\"]) -> Float[Tensor, \"b 3 4\"]:\n    \"\"\"Compute the exponential map `se(3) -> SE(3)`.\n\n    This can be used for learning pose deltas on `SE(3)`.\n\n    Args:\n        tangent_vector: A tangent vector from `se(3)`.\n\n    Returns:\n        [R|t] transformation matrices.\n    \"\"\"\n\n    tangent_vector_lin = tangent_vector[:, :3].view(-1, 3, 1)\n    tangent_vector_ang = tangent_vector[:, 3:].view(-1, 3, 1)\n\n    theta = torch.linalg.norm(tangent_vector_ang, dim=1).unsqueeze(1)\n    theta2 = theta**2\n    theta3 = theta**3\n\n    near_zero = theta < 1e-2\n    non_zero = torch.ones(1, dtype=tangent_vector.dtype, device=tangent_vector.device)\n    theta_nz = torch.where(near_zero, non_zero, theta)\n    theta2_nz = torch.where(near_zero, non_zero, theta2)\n    theta3_nz = torch.where(near_zero, non_zero, theta3)\n\n    # Compute the rotation\n    sine = theta.sin()\n    cosine = torch.where(near_zero, 8 / (4 + theta2) - 1, theta.cos())\n    sine_by_theta = torch.where(near_zero, 0.5 * cosine + 0.5, sine / theta_nz)\n    one_minus_cosine_by_theta2 = torch.where(near_zero, 0.5 * sine_by_theta, (1 - cosine) / theta2_nz)\n    ret = torch.zeros(tangent_vector.shape[0], 3, 4).to(dtype=tangent_vector.dtype, device=tangent_vector.device)\n    ret[:, :3, :3] = one_minus_cosine_by_theta2 * tangent_vector_ang @ tangent_vector_ang.transpose(1, 2)\n\n    ret[:, 0, 0] += cosine.view(-1)\n    ret[:, 1, 1] += cosine.view(-1)\n    ret[:, 2, 2] += cosine.view(-1)\n    temp = sine_by_theta.view(-1, 1) * tangent_vector_ang.view(-1, 3)\n    ret[:, 0, 1] -= temp[:, 2]\n    ret[:, 1, 0] += temp[:, 2]\n    ret[:, 0, 2] += temp[:, 1]\n    ret[:, 2, 0] -= temp[:, 1]\n    ret[:, 1, 2] -= temp[:, 0]\n    ret[:, 2, 1] += temp[:, 0]\n\n    # Compute the translation\n    sine_by_theta = torch.where(near_zero, 1 - theta2 / 6, sine_by_theta)\n    one_minus_cosine_by_theta2 = torch.where(near_zero, 0.5 - theta2 / 24, one_minus_cosine_by_theta2)\n    theta_minus_sine_by_theta3_t = torch.where(near_zero, 1.0 / 6 - theta2 / 120, (theta - sine) / theta3_nz)\n\n    ret[:, :, 3:] = sine_by_theta * tangent_vector_lin\n    ret[:, :, 3:] += one_minus_cosine_by_theta2 * torch.cross(tangent_vector_ang, tangent_vector_lin, dim=1)\n    ret[:, :, 3:] += theta_minus_sine_by_theta3_t * (\n        tangent_vector_ang @ (tangent_vector_ang.transpose(1, 2) @ tangent_vector_lin)\n    )\n    return ret\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/cameras/rays.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSome ray datastructures.\n\"\"\"\n\nimport random\nfrom dataclasses import dataclass, field\nfrom typing import Callable, Dict, Literal, Optional, Tuple, Union, overload\n\nimport torch\nfrom jaxtyping import Float, Int, Shaped\nfrom torch import Tensor\n\nfrom nerfstudio.utils.math import Gaussians, conical_frustum_to_gaussian\nfrom nerfstudio.utils.tensor_dataclass import TensorDataclass\n\nTORCH_DEVICE = Union[str, torch.device]\n\n\n@dataclass\nclass Frustums(TensorDataclass):\n    \"\"\"Describes region of space as a frustum.\"\"\"\n\n    origins: Float[Tensor, \"*bs 3\"]\n    \"\"\"xyz coordinate for ray origin.\"\"\"\n    directions: Float[Tensor, \"*bs 3\"]\n    \"\"\"Direction of ray.\"\"\"\n    starts: Float[Tensor, \"*bs 1\"]\n    \"\"\"Where the frustum starts along a ray.\"\"\"\n    ends: Float[Tensor, \"*bs 1\"]\n    \"\"\"Where the frustum ends along a ray.\"\"\"\n    pixel_area: Float[Tensor, \"*bs 1\"]\n    \"\"\"Projected area of pixel a distance 1 away from origin.\"\"\"\n    offsets: Optional[Float[Tensor, \"*bs 3\"]] = None\n    \"\"\"Offsets for each sample position\"\"\"\n\n    def get_positions(self) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"Calculates \"center\" position of frustum. Not weighted by mass.\n\n        Returns:\n            xyz positions.\n        \"\"\"\n        pos = self.origins + self.directions * (self.starts + self.ends) / 2\n        if self.offsets is not None:\n            pos = pos + self.offsets\n        return pos\n\n    def get_start_positions(self) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"Calculates \"start\" position of frustum.\n\n        Returns:\n            xyz positions.\n        \"\"\"\n        return self.origins + self.directions * self.starts\n\n    def set_offsets(self, offsets):\n        \"\"\"Sets offsets for this frustum for computing positions\"\"\"\n        self.offsets = offsets\n\n    def get_gaussian_blob(self) -> Gaussians:\n        \"\"\"Calculates guassian approximation of conical frustum.\n\n        Returns:\n            Conical frustums approximated by gaussian distribution.\n        \"\"\"\n        # Cone radius is set such that the square pixel_area matches the cone area.\n        cone_radius = torch.sqrt(self.pixel_area) / 1.7724538509055159  # r = sqrt(pixel_area / pi)\n        if self.offsets is not None:\n            raise NotImplementedError()\n        return conical_frustum_to_gaussian(\n            origins=self.origins,\n            directions=self.directions,\n            starts=self.starts,\n            ends=self.ends,\n            radius=cone_radius,\n        )\n\n    @classmethod\n    def get_mock_frustum(cls, device: Optional[TORCH_DEVICE] = \"cpu\") -> \"Frustums\":\n        \"\"\"Helper function to generate a placeholder frustum.\n\n        Returns:\n            A size 1 frustum with meaningless values.\n        \"\"\"\n        return Frustums(\n            origins=torch.ones((1, 3)).to(device),\n            directions=torch.ones((1, 3)).to(device),\n            starts=torch.ones((1, 1)).to(device),\n            ends=torch.ones((1, 1)).to(device),\n            pixel_area=torch.ones((1, 1)).to(device),\n        )\n\n\n@dataclass\nclass RaySamples(TensorDataclass):\n    \"\"\"Samples along a ray\"\"\"\n\n    frustums: Frustums\n    \"\"\"Frustums along ray.\"\"\"\n    camera_indices: Optional[Int[Tensor, \"*bs 1\"]] = None\n    \"\"\"Camera index.\"\"\"\n    deltas: Optional[Float[Tensor, \"*bs 1\"]] = None\n    \"\"\"\"width\" of each sample.\"\"\"\n    spacing_starts: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None\n    \"\"\"Start of normalized bin edges along ray [0,1], before warping is applied, ie. linear in disparity sampling.\"\"\"\n    spacing_ends: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None\n    \"\"\"Start of normalized bin edges along ray [0,1], before warping is applied, ie. linear in disparity sampling.\"\"\"\n    spacing_to_euclidean_fn: Optional[Callable] = None\n    \"\"\"Function to convert bins to euclidean distance.\"\"\"\n    metadata: Optional[Dict[str, Shaped[Tensor, \"*bs latent_dims\"]]] = None\n    \"\"\"additional information relevant to generating ray samples\"\"\"\n\n    times: Optional[Float[Tensor, \"*batch 1\"]] = None\n    \"\"\"Times at which rays are sampled\"\"\"\n\n    def get_weights(self, densities: Float[Tensor, \"*batch num_samples 1\"]) -> Float[Tensor, \"*batch num_samples 1\"]:\n        \"\"\"Return weights based on predicted densities\n\n        Args:\n            densities: Predicted densities for samples along ray\n\n        Returns:\n            Weights for each sample\n        \"\"\"\n\n        delta_density = self.deltas * densities\n        alphas = 1 - torch.exp(-delta_density)\n\n        transmittance = torch.cumsum(delta_density[..., :-1, :], dim=-2)\n        transmittance = torch.cat(\n            [torch.zeros((*transmittance.shape[:1], 1, 1), device=densities.device), transmittance], dim=-2\n        )\n        transmittance = torch.exp(-transmittance)  # [..., \"num_samples\"]\n\n        weights = alphas * transmittance  # [..., \"num_samples\"]\n        weights = torch.nan_to_num(weights)\n\n        return weights\n\n    @overload\n    @staticmethod\n    def get_weights_and_transmittance_from_alphas(\n        alphas: Float[Tensor, \"*batch num_samples 1\"], weights_only: Literal[True]\n    ) -> Float[Tensor, \"*batch num_samples 1\"]: ...\n\n    @overload\n    @staticmethod\n    def get_weights_and_transmittance_from_alphas(\n        alphas: Float[Tensor, \"*batch num_samples 1\"], weights_only: Literal[False] = False\n    ) -> Tuple[Float[Tensor, \"*batch num_samples 1\"], Float[Tensor, \"*batch num_samples 1\"]]: ...\n\n    @staticmethod\n    def get_weights_and_transmittance_from_alphas(\n        alphas: Float[Tensor, \"*batch num_samples 1\"], weights_only: bool = False\n    ) -> Union[\n        Float[Tensor, \"*batch num_samples 1\"],\n        Tuple[Float[Tensor, \"*batch num_samples 1\"], Float[Tensor, \"*batch num_samples 1\"]],\n    ]:\n        \"\"\"Return weights based on predicted alphas\n        Args:\n            alphas: Predicted alphas (maybe from sdf) for samples along ray\n            weights_only: If function should return only weights\n        Returns:\n            Tuple of weights and transmittance for each sample\n        \"\"\"\n\n        transmittance = torch.cumprod(\n            torch.cat([torch.ones((*alphas.shape[:1], 1, 1), device=alphas.device), 1.0 - alphas + 1e-7], 1), 1\n        )\n\n        weights = alphas * transmittance[:, :-1, :]\n        if weights_only:\n            return weights\n        return weights, transmittance\n\n\n@dataclass\nclass RayBundle(TensorDataclass):\n    \"\"\"A bundle of ray parameters.\"\"\"\n\n    # TODO(ethan): make sure the sizes with ... are correct\n    origins: Float[Tensor, \"*batch 3\"]\n    \"\"\"Ray origins (XYZ)\"\"\"\n    directions: Float[Tensor, \"*batch 3\"]\n    \"\"\"Unit ray direction vector\"\"\"\n    pixel_area: Float[Tensor, \"*batch 1\"]\n    \"\"\"Projected area of pixel a distance 1 away from origin\"\"\"\n    camera_indices: Optional[Int[Tensor, \"*batch 1\"]] = None\n    \"\"\"Camera indices\"\"\"\n    nears: Optional[Float[Tensor, \"*batch 1\"]] = None\n    \"\"\"Distance along ray to start sampling\"\"\"\n    fars: Optional[Float[Tensor, \"*batch 1\"]] = None\n    \"\"\"Rays Distance along ray to stop sampling\"\"\"\n    metadata: Dict[str, Shaped[Tensor, \"num_rays latent_dims\"]] = field(default_factory=dict)\n    \"\"\"Additional metadata or data needed for interpolation, will mimic shape of rays\"\"\"\n    times: Optional[Float[Tensor, \"*batch 1\"]] = None\n    \"\"\"Times at which rays are sampled\"\"\"\n\n    def set_camera_indices(self, camera_index: int) -> None:\n        \"\"\"Sets all the camera indices to a specific camera index.\n\n        Args:\n            camera_index: Camera index.\n        \"\"\"\n        self.camera_indices = torch.ones_like(self.origins[..., 0:1]).long() * camera_index\n\n    def __len__(self) -> int:\n        num_rays = torch.numel(self.origins) // self.origins.shape[-1]\n        return num_rays\n\n    def sample(self, num_rays: int) -> \"RayBundle\":\n        \"\"\"Returns a RayBundle as a subset of rays.\n\n        Args:\n            num_rays: Number of rays in output RayBundle\n\n        Returns:\n            RayBundle with subset of rays.\n        \"\"\"\n        assert num_rays <= len(self)\n        indices = random.sample(range(len(self)), k=num_rays)\n        return self[indices]\n\n    def get_row_major_sliced_ray_bundle(self, start_idx: int, end_idx: int) -> \"RayBundle\":\n        \"\"\"Flattens RayBundle and extracts chunk given start and end indices.\n\n        Args:\n            start_idx: Start index of RayBundle chunk.\n            end_idx: End index of RayBundle chunk.\n\n        Returns:\n            Flattened RayBundle with end_idx-start_idx rays.\n\n        \"\"\"\n        return self.flatten()[start_idx:end_idx]\n\n    def get_ray_samples(\n        self,\n        bin_starts: Float[Tensor, \"*bs num_samples 1\"],\n        bin_ends: Float[Tensor, \"*bs num_samples 1\"],\n        spacing_starts: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None,\n        spacing_ends: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None,\n        spacing_to_euclidean_fn: Optional[Callable] = None,\n    ) -> RaySamples:\n        \"\"\"Produces samples for each ray by projection points along the ray direction. Currently samples uniformly.\n\n        Args:\n            bin_starts: Distance from origin to start of bin.\n            bin_ends: Distance from origin to end of bin.\n\n        Returns:\n            Samples projected along ray.\n        \"\"\"\n        deltas = bin_ends - bin_starts\n        if self.camera_indices is not None:\n            camera_indices = self.camera_indices[..., None]\n        else:\n            camera_indices = None\n\n        shaped_raybundle_fields = self[..., None]\n\n        frustums = Frustums(\n            origins=shaped_raybundle_fields.origins,  # [..., 1, 3]\n            directions=shaped_raybundle_fields.directions,  # [..., 1, 3]\n            starts=bin_starts,  # [..., num_samples, 1]\n            ends=bin_ends,  # [..., num_samples, 1]\n            pixel_area=shaped_raybundle_fields.pixel_area,  # [..., 1, 1]\n        )\n\n        ray_samples = RaySamples(\n            frustums=frustums,\n            camera_indices=camera_indices,  # [..., 1, 1]\n            deltas=deltas,  # [..., num_samples, 1]\n            spacing_starts=spacing_starts,  # [..., num_samples, 1]\n            spacing_ends=spacing_ends,  # [..., num_samples, 1]\n            spacing_to_euclidean_fn=spacing_to_euclidean_fn,\n            metadata=shaped_raybundle_fields.metadata,\n            times=None if self.times is None else self.times[..., None],  # [..., 1, 1]\n        )\n\n        return ray_samples\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/base_config.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Base Configs\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any, List, Literal, Optional, Tuple, Type\n\n# model instances\nfrom nerfstudio.utils import writer\n\n\n# Pretty printing class\nclass PrintableConfig:\n    \"\"\"Printable Config defining str function\"\"\"\n\n    def __str__(self):\n        lines = [self.__class__.__name__ + \":\"]\n        for key, val in vars(self).items():\n            if isinstance(val, Tuple):\n                flattened_val = \"[\"\n                for item in val:\n                    flattened_val += str(item) + \"\\n\"\n                flattened_val = flattened_val.rstrip(\"\\n\")\n                val = flattened_val + \"]\"\n            lines += f\"{key}: {str(val)}\".split(\"\\n\")\n        return \"\\n    \".join(lines)\n\n\n# Base instantiate configs\n@dataclass\nclass InstantiateConfig(PrintableConfig):\n    \"\"\"Config class for instantiating an the class specified in the _target attribute.\"\"\"\n\n    _target: Type\n\n    def setup(self, **kwargs) -> Any:\n        \"\"\"Returns the instantiated object using the config.\"\"\"\n        return self._target(self, **kwargs)\n\n\n# Machine related configs\n@dataclass\nclass MachineConfig(PrintableConfig):\n    \"\"\"Configuration of machine setup\"\"\"\n\n    seed: int = 42\n    \"\"\"random seed initialization\"\"\"\n    num_devices: int = 1\n    \"\"\"total number of devices (e.g., gpus) available for train/eval\"\"\"\n    num_machines: int = 1\n    \"\"\"total number of distributed machines available (for DDP)\"\"\"\n    machine_rank: int = 0\n    \"\"\"current machine's rank (for DDP)\"\"\"\n    dist_url: str = \"auto\"\n    \"\"\"distributed connection point (for DDP)\"\"\"\n    device_type: Literal[\"cpu\", \"cuda\", \"mps\"] = \"cuda\"\n    \"\"\"device type to use for training\"\"\"\n\n\n@dataclass\nclass LocalWriterConfig(InstantiateConfig):\n    \"\"\"Local Writer config\"\"\"\n\n    _target: Type = writer.LocalWriter\n    \"\"\"target class to instantiate\"\"\"\n    enable: bool = False\n    \"\"\"if True enables local logging, else disables\"\"\"\n    stats_to_track: Tuple[writer.EventName, ...] = (\n        writer.EventName.ITER_TRAIN_TIME,\n        writer.EventName.TRAIN_RAYS_PER_SEC,\n        writer.EventName.CURR_TEST_PSNR,\n        writer.EventName.VIS_RAYS_PER_SEC,\n        writer.EventName.TEST_RAYS_PER_SEC,\n        writer.EventName.ETA,\n    )\n    \"\"\"specifies which stats will be logged/printed to terminal\"\"\"\n    max_log_size: int = 10\n    \"\"\"maximum number of rows to print before wrapping. if 0, will print everything.\"\"\"\n\n    def setup(self, banner_messages: Optional[List[str]] = None, **kwargs) -> Any:\n        \"\"\"Instantiate local writer\n\n        Args:\n            banner_messages: List of strings that always print at the bottom of screen.\n        \"\"\"\n        return self._target(self, banner_messages=banner_messages, **kwargs)\n\n\n@dataclass\nclass LoggingConfig(PrintableConfig):\n    \"\"\"Configuration of loggers and profilers\"\"\"\n\n    relative_log_dir: Path = Path(\"./\")\n    \"\"\"relative path to save all logged events\"\"\"\n    steps_per_log: int = 10\n    \"\"\"number of steps between logging stats\"\"\"\n    max_buffer_size: int = 20\n    \"\"\"maximum history size to keep for computing running averages of stats.\n     e.g. if 20, averages will be computed over past 20 occurrences.\"\"\"\n    local_writer: LocalWriterConfig = field(default_factory=lambda: LocalWriterConfig(enable=True))\n    \"\"\"if provided, will print stats locally. if None, will disable printing\"\"\"\n    profiler: Literal[\"none\", \"basic\", \"pytorch\"] = \"basic\"\n    \"\"\"how to profile the code;\n        \"basic\" - prints speed of all decorated functions at the end of a program.\n        \"pytorch\" - same as basic, but it also traces few training steps.\n    \"\"\"\n\n\n# Viewer related configs\n@dataclass\nclass ViewerConfig(PrintableConfig):\n    \"\"\"Configuration for viewer instantiation\"\"\"\n\n    relative_log_filename: str = \"viewer_log_filename.txt\"\n    \"\"\"Filename to use for the log file.\"\"\"\n    websocket_port: Optional[int] = None\n    \"\"\"The websocket port to connect to. If None, find an available port.\"\"\"\n    websocket_port_default: int = 7007\n    \"\"\"The default websocket port to connect to if websocket_port is not specified\"\"\"\n    websocket_host: str = \"0.0.0.0\"\n    \"\"\"The host address to bind the websocket server to.\"\"\"\n    num_rays_per_chunk: int = 32768\n    \"\"\"number of rays per chunk to render with viewer\"\"\"\n    max_num_display_images: int = 512\n    \"\"\"Maximum number of training images to display in the viewer, to avoid lag. This does not change which images are\n    actually used in training/evaluation. If -1, display all.\"\"\"\n    quit_on_train_completion: bool = False\n    \"\"\"Whether to kill the training job when it has completed. Note this will stop rendering in the viewer.\"\"\"\n    image_format: Literal[\"jpeg\", \"png\"] = \"jpeg\"\n    \"\"\"Image format viewer should use; jpeg is lossy compression, while png is lossless.\"\"\"\n    jpeg_quality: int = 75\n    \"\"\"Quality tradeoff to use for jpeg compression.\"\"\"\n    make_share_url: bool = False\n    \"\"\"Viewer beta feature: print a shareable URL. This flag is ignored in the legacy version of the viewer.\"\"\"\n    camera_frustum_scale: float = 0.1\n    \"\"\"Scale for the camera frustums in the viewer.\"\"\"\n    default_composite_depth: bool = True\n    \"\"\"The default value for compositing depth. Turn off if you want to see the camera frustums without occlusions.\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/config_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSome utility code for configs.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import field\nfrom typing import Any, Dict\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n# cannot use mutable types directly within dataclass; abstracting default factory calls\ndef to_immutable_dict(d: Dict[str, Any]):\n    \"\"\"Method to convert mutable dict to default factory dict\n\n    Args:\n        d: dictionary to convert into default factory dict for dataclass\n    \"\"\"\n    return field(default_factory=lambda: dict(d))\n\n\ndef convert_markup_to_ansi(markup_string: str) -> str:\n    \"\"\"Convert rich-style markup to ANSI sequences for command-line formatting.\n\n    Args:\n        markup_string: Text with rich-style markup.\n\n    Returns:\n        Text formatted via ANSI sequences.\n    \"\"\"\n    with CONSOLE.capture() as out:\n        CONSOLE.print(markup_string, soft_wrap=True)\n    return out.get()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/dataparser_configs.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nAggregate all the dataparser configs in one location.\n\"\"\"\n\nfrom typing import TYPE_CHECKING\n\nimport tyro\n\nfrom nerfstudio.data.dataparsers.arkitscenes_dataparser import ARKitScenesDataParserConfig\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParserConfig\nfrom nerfstudio.data.dataparsers.blender_dataparser import BlenderDataParserConfig\nfrom nerfstudio.data.dataparsers.colmap_dataparser import ColmapDataParserConfig\nfrom nerfstudio.data.dataparsers.dnerf_dataparser import DNeRFDataParserConfig\nfrom nerfstudio.data.dataparsers.dycheck_dataparser import DycheckDataParserConfig\nfrom nerfstudio.data.dataparsers.instant_ngp_dataparser import InstantNGPDataParserConfig\nfrom nerfstudio.data.dataparsers.minimal_dataparser import MinimalDataParserConfig\nfrom nerfstudio.data.dataparsers.nerfosr_dataparser import NeRFOSRDataParserConfig\nfrom nerfstudio.data.dataparsers.nerfstudio_dataparser import NerfstudioDataParserConfig\nfrom nerfstudio.data.dataparsers.nuscenes_dataparser import NuScenesDataParserConfig\nfrom nerfstudio.data.dataparsers.phototourism_dataparser import PhototourismDataParserConfig\nfrom nerfstudio.data.dataparsers.scannet_dataparser import ScanNetDataParserConfig\nfrom nerfstudio.data.dataparsers.scannetpp_dataparser import ScanNetppDataParserConfig\nfrom nerfstudio.data.dataparsers.sdfstudio_dataparser import SDFStudioDataParserConfig\nfrom nerfstudio.data.dataparsers.sitcoms3d_dataparser import Sitcoms3DDataParserConfig\nfrom nerfstudio.plugins.registry_dataparser import discover_dataparsers\n\ndataparsers = {\n    \"nerfstudio-data\": NerfstudioDataParserConfig(),\n    \"minimal-parser\": MinimalDataParserConfig(),\n    \"arkit-data\": ARKitScenesDataParserConfig(),\n    \"blender-data\": BlenderDataParserConfig(),\n    \"instant-ngp-data\": InstantNGPDataParserConfig(),\n    \"nuscenes-data\": NuScenesDataParserConfig(),\n    \"dnerf-data\": DNeRFDataParserConfig(),\n    \"phototourism-data\": PhototourismDataParserConfig(),\n    \"dycheck-data\": DycheckDataParserConfig(),\n    \"scannet-data\": ScanNetDataParserConfig(),\n    \"sdfstudio-data\": SDFStudioDataParserConfig(),\n    \"nerfosr-data\": NeRFOSRDataParserConfig(),\n    \"sitcoms3d-data\": Sitcoms3DDataParserConfig(),\n    \"scannetpp-data\": ScanNetppDataParserConfig(),\n    \"colmap\": ColmapDataParserConfig(),\n}\n\nexternal_dataparsers, _ = discover_dataparsers()\nall_dataparsers = {**dataparsers, **external_dataparsers}\n\nif TYPE_CHECKING:\n    # For static analysis (tab completion, type checking, etc), just use the base\n    # dataparser config.\n    DataParserUnion = DataParserConfig\nelse:\n    # At runtime, populate a Union type dynamically. This is used by `tyro` to generate\n    # subcommands in the CLI.\n    DataParserUnion = tyro.extras.subcommand_type_from_defaults(\n        all_dataparsers,\n        prefix_names=False,  # Omit prefixes in subcommands themselves.\n    )\n\nAnnotatedDataParserUnion = tyro.conf.OmitSubcommandPrefixes[DataParserUnion]  # Omit prefixes of flags in subcommands.\n\"\"\"Union over possible dataparser types, annotated with metadata for tyro. This is\nthe same as the vanilla union, but results in shorter subcommand names.\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/experiment_config.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Config used for running an experiment\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing import Any, Dict, Literal, Optional\n\nimport yaml\n\nfrom nerfstudio.configs.base_config import InstantiateConfig, LoggingConfig, MachineConfig, ViewerConfig\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.engine.optimizers import OptimizerConfig\nfrom nerfstudio.engine.schedulers import SchedulerConfig\nfrom nerfstudio.pipelines.base_pipeline import VanillaPipelineConfig\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ExperimentConfig(InstantiateConfig):\n    \"\"\"Full config contents for running an experiment. Any experiment types (like training) will be\n    subclassed from this, and must have their _target field defined accordingly.\"\"\"\n\n    output_dir: Path = Path(\"outputs\")\n    \"\"\"relative or absolute output directory to save all checkpoints and logging\"\"\"\n    method_name: Optional[str] = None\n    \"\"\"Method name. Required to set in python or via cli\"\"\"\n    experiment_name: Optional[str] = None\n    \"\"\"Experiment name. If None, will automatically be set to dataset name\"\"\"\n    project_name: Optional[str] = \"nerfstudio-project\"\n    \"\"\"Project name.\"\"\"\n    timestamp: str = \"{timestamp}\"\n    \"\"\"Experiment timestamp.\"\"\"\n    machine: MachineConfig = field(default_factory=MachineConfig)\n    \"\"\"Machine configuration\"\"\"\n    logging: LoggingConfig = field(default_factory=LoggingConfig)\n    \"\"\"Logging configuration\"\"\"\n    viewer: ViewerConfig = field(default_factory=ViewerConfig)\n    \"\"\"Viewer configuration\"\"\"\n    pipeline: VanillaPipelineConfig = field(default_factory=VanillaPipelineConfig)\n    \"\"\"Pipeline configuration\"\"\"\n    optimizers: Dict[str, Any] = to_immutable_dict(\n        {\n            \"fields\": {\n                \"optimizer\": OptimizerConfig(),\n                \"scheduler\": SchedulerConfig(),\n            }\n        }\n    )\n    \"\"\"Dictionary of optimizer groups and their schedulers\"\"\"\n    vis: Literal[\n        \"viewer\", \"wandb\", \"tensorboard\", \"comet\", \"viewer+wandb\", \"viewer+tensorboard\", \"viewer+comet\", \"viewer_legacy\"\n    ] = \"wandb\"\n    \"\"\"Which visualizer to use.\"\"\"\n    data: Optional[Path] = None\n    \"\"\"Alias for --pipeline.datamanager.data\"\"\"\n    prompt: Optional[str] = None\n    \"\"\"Alias for --pipeline.model.prompt\"\"\"\n    relative_model_dir: Path = Path(\"nerfstudio_models/\")\n    \"\"\"Relative path to save all checkpoints.\"\"\"\n    load_scheduler: bool = True\n    \"\"\"Whether to load the scheduler state_dict to resume training, if it exists.\"\"\"\n\n    def is_viewer_legacy_enabled(self) -> bool:\n        \"\"\"Checks if the legacy viewer is enabled.\"\"\"\n        return \"viewer_legacy\" == self.vis\n\n    def is_viewer_enabled(self) -> bool:\n        \"\"\"Checks if the viewer is enabled.\"\"\"\n        return self.vis in (\"viewer\", \"viewer+wandb\", \"viewer+tensorboard\", \"viewer+comet\")\n\n    def is_wandb_enabled(self) -> bool:\n        \"\"\"Checks if wandb is enabled.\"\"\"\n        return (\"wandb\" == self.vis) | (\"viewer+wandb\" == self.vis)\n\n    def is_tensorboard_enabled(self) -> bool:\n        \"\"\"Checks if tensorboard is enabled.\"\"\"\n        return (\"tensorboard\" == self.vis) | (\"viewer+tensorboard\" == self.vis)\n\n    def is_comet_enabled(self) -> bool:\n        return (\"comet\" == self.vis) | (\"viewer+comet\" == self.vis)\n\n    def set_timestamp(self) -> None:\n        \"\"\"Dynamically set the experiment timestamp\"\"\"\n        if self.timestamp == \"{timestamp}\":\n            self.timestamp = datetime.now().strftime(\"%Y-%m-%d_%H%M%S\")\n\n    def set_experiment_name(self) -> None:\n        \"\"\"Dynamically set the experiment name\"\"\"\n        if self.experiment_name is None:\n            datapath = self.pipeline.datamanager.data\n            if datapath is not None:\n                datapath = datapath.parent if datapath.is_file() else datapath\n                self.experiment_name = str(datapath.stem)\n            else:\n                self.experiment_name = \"unnamed\"\n\n    def get_base_dir(self) -> Path:\n        \"\"\"Retrieve the base directory to set relative paths\"\"\"\n        # check the experiment and method names\n        assert self.method_name is not None, \"Please set method name in config or via the cli\"\n        self.set_experiment_name()\n        return Path(f\"{self.output_dir}/{self.experiment_name}/{self.method_name}/{self.timestamp}\")\n\n    def get_checkpoint_dir(self) -> Path:\n        \"\"\"Retrieve the checkpoint directory\"\"\"\n        return Path(self.get_base_dir() / self.relative_model_dir)\n\n    def print_to_terminal(self) -> None:\n        \"\"\"Helper to pretty print config to terminal\"\"\"\n        CONSOLE.rule(\"Config\")\n        CONSOLE.print(self)\n        CONSOLE.rule(\"\")\n\n    def save_config(self) -> None:\n        \"\"\"Save config to base directory\"\"\"\n        base_dir = self.get_base_dir()\n        assert base_dir is not None\n        base_dir.mkdir(parents=True, exist_ok=True)\n        config_yaml_path = base_dir / \"config.yml\"\n        CONSOLE.log(f\"Saving config to: {config_yaml_path}\")\n        config_yaml_path.write_text(yaml.dump(self), \"utf8\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/external_methods.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"This file contains the configuration for external methods which are not included in this repository.\"\"\"\n\nimport inspect\nimport subprocess\nimport sys\nfrom dataclasses import dataclass\nfrom typing import Dict, List, Optional, Tuple\n\nimport tyro\nfrom rich.prompt import Confirm\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ExternalMethod:\n    \"\"\"External method class. Represents a link to a nerfstudio-compatible method not included in this repository.\"\"\"\n\n    instructions: str\n    \"\"\"Instructions for installing the method. This will be printed to\n    the console when the user tries to use the method.\"\"\"\n    configurations: List[Tuple[str, str]]\n    \"\"\"List of configurations for the method. Each configuration is a tuple of (registered slug, description)\n    as it will be printed in --help.\"\"\"\n    pip_package: Optional[str] = None\n    \"\"\"Specifies a pip package if the method can be installed by running `pip install <pip_package>`.\"\"\"\n\n\nexternal_methods = []\n\n# Instruct-NeRF2NeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Instruct-NeRF2NeRF[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/in2n.html\n\nTo enable Instruct-NeRF2NeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerf[/grey]\"\"\",\n        configurations=[\n            (\"in2n\", \"Instruct-NeRF2NeRF. Full model, used in paper\"),\n            (\"in2n-small\", \"Instruct-NeRF2NeRF. Half precision model\"),\n            (\"in2n-tiny\", \"Instruct-NeRF2NeRF. Half prevision with no LPIPS\"),\n        ],\n        pip_package=\"git+https://github.com/ayaanzhaque/instruct-nerf2nerf\",\n    )\n)\n\n# K-Planes\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]K-Planes[/bold yellow]\nFor more information visit https://docs.nerf.studio/nerfology/methods/kplanes.html\n\nTo enable K-Planes, you must install it first by running:\n  [grey]pip install kplanes-nerfstudio[/grey]\"\"\",\n        configurations=[\n            (\"kplanes\", \"K-Planes model tuned to static blender scenes\"),\n            (\"kplanes-dynamic\", \"K-Planes model tuned to dynamic DNeRF scenes\"),\n        ],\n        pip_package=\"kplanes-nerfstudio\",\n    )\n)\n\n# LERF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]LERF[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/lerf.html\n\nTo enable LERF, you must install it first by running:\n  [grey]pip install git+https://github.com/kerrj/lerf[/grey]\"\"\",\n        configurations=[\n            (\"lerf-big\", \"LERF with OpenCLIP ViT-L/14\"),\n            (\"lerf\", \"LERF with OpenCLIP ViT-B/16, used in paper\"),\n            (\"lerf-lite\", \"LERF with smaller network and less LERF samples\"),\n        ],\n        pip_package=\"git+https://github.com/kerrj/lerf\",\n    )\n)\n\n# Tetra-NeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Tetra-NeRF[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/tetranerf.html\n\nTo enable Tetra-NeRF, you must install it first. Please follow the instructions here:\n  https://github.com/jkulhanek/tetra-nerf/blob/master/README.md#installation\"\"\",\n        configurations=[\n            (\"tetra-nerf-original\", \"Tetra-NeRF. Official implementation from the paper\"),\n            (\"tetra-nerf\", \"Tetra-NeRF. Different sampler - faster and better\"),\n        ],\n    )\n)\n\n# NeRFPlayer\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]NeRFPlayer[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/nerfplayer.html\n\nTo enable NeRFPlayer, you must install it first by running:\n  [grey]pip install git+https://github.com/lsongx/nerfplayer-nerfstudio[/grey]\"\"\",\n        configurations=[\n            (\"nerfplayer-nerfacto\", \"NeRFPlayer with nerfacto backbone\"),\n            (\"nerfplayer-ngp\", \"NeRFPlayer with instang-ngp-bounded backbone\"),\n        ],\n    )\n)\n\n# Volinga\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Volinga[/bold yellow]\nFor more information visit: https://docs.nerf.studio/extensions/unreal_engine.html\n\nTo enable Volinga, you must install it first by running:\n  [grey]pip install git+https://github.com/Volinga/volinga-model[/grey]\"\"\",\n        configurations=[\n            (\n                \"volinga\",\n                \"Real-time rendering model from Volinga. Directly exportable to NVOL format at https://volinga.ai/\",\n            ),\n        ],\n        pip_package=\"git+https://github.com/Volinga/volinga-model\",\n    )\n)\n\n# BioNeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]BioNeRF[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/bionerf.html\n\nTo enable BioNeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/Leandropassosjr/ns_bionerf[/grey]\"\"\",\n        configurations=[(\"BioNeRF\", \"BioNeRF. Nerfstudio implementation\")],\n        pip_package=\"git+https://github.com/Leandropassosjr/ns_bionerf\",\n    )\n)\n\n# Instruct-GS2GS\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Instruct-GS2GS[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/igs2gs.html\n\nTo enable Instruct-GS2GS, you must install it first by running:\n  [grey]pip install git+https://github.com/cvachha/instruct-gs2gs[/grey]\"\"\",\n        configurations=[(\"igs2gs\", \"Instruct-GS2GS. Full model, used in paper\")],\n        pip_package=\"git+https://github.com/cvachha/instruct-gs2gs\",\n    )\n)\n\n# PyNeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]PyNeRF[/bold yellow]\nFor more information visit https://docs.nerf.studio/nerfology/methods/pynerf.html\n\nTo enable PyNeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/hturki/pynerf[/grey]\"\"\",\n        configurations=[\n            (\"pynerf\", \"PyNeRF with proposal network. The default parameters are suited for outdoor scenes.\"),\n            (\n                \"pynerf-synthetic\",\n                \"PyNeRF with proposal network. The default parameters are suited for synthetic scenes.\",\n            ),\n            (\n                \"pynerf-occupancy-grid\",\n                \"PyNeRF with occupancy grid. The default parameters are suited for synthetic scenes.\",\n            ),\n        ],\n        pip_package=\"git+https://github.com/hturki/pynerf\",\n    )\n)\n\n# SeaThru-NeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Seathru-NeRF[/bold yellow]\nFor more information visit https://docs.nerf.studio/nerfology/methods/seathru_nerf.html\n\nTo enable Seathru-NeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/AkerBP/seathru_nerf[/grey]\"\"\",\n        configurations=[\n            (\"seathru-nerf\", \"SeaThru-NeRF for underwater scenes.\"),\n            (\"seathru-nerf-lite\", \"SeaThru-NeRF for underwater scenes (smaller networks and batches).\"),\n        ],\n        pip_package=\"git+https://github.com/AkerBP/seathru_nerf\",\n    )\n)\n\n# Zip-NeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Zip-NeRF[/bold yellow]\nFor more information visit https://docs.nerf.studio/nerfology/methods/zipnerf.html\n\nTo enable Zip-NeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch#subdirectory=extensions/cuda \n  and pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch[/grey]\"\"\",\n        configurations=[\n            (\"zipnerf\", \"A pytorch implementation of 'Zip-NeRF: Anti-Aliased Grid-Based Neural Radiance Fields'\")\n        ],\n        pip_package=\"pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch\",\n    )\n)\n\n# SIGNeRF\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]SIGNeRF[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/signerf.html\n\nTo enable SIGNeRF, you must install it first by running:\n  [grey]pip install git+https://github.com/cgtuebingen/SIGNeRF[/grey] and install Stable Diffusion Web UI see [grey]https://github.com/cgtuebingen/SIGNeRF?tab=readme-ov-file#installation[/grey]\"\"\",\n        configurations=[\n            (\"signerf\", \"SIGNeRF method (high quality) used in paper\"),\n            (\"signerf_nerfacto\", \"SIGNeRF method combined with Nerfacto (faster training less quality)\"),\n        ],\n        pip_package=\"git+https://github.com/cgtuebingen/SIGNeRF\",\n    )\n)\n\n# NeRF-SH\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]NeRF-SH[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/nerf2gs2nerf.html\n\nTo enable NeRF-SH, you must install it first by running:\n  [grey]pip install git+https://github.com/grasp-lyrl/NeRFtoGSandBack.git#subdirectory=nerfsh[/grey]\"\"\",\n        configurations=[\n            (\"nerfsh\", \"NeRF-SH, used in paper\"),\n        ],\n        pip_package=\"git+https://github.com/grasp-lyrl/NeRFtoGSandBack.git#subdirectory=nerfsh\",\n    )\n)\n\n# NeRFGS\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]NeRFGS[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/nerf2gs2nerf.html\n\nTo enable NeRFGS, you must install it first by running:\n  [grey]pip install git+https://github.com/grasp-lyrl/NeRFtoGSandBack.git#subdirectory=nerfgs[/grey]\"\"\",\n        configurations=[\n            (\"nerfgs\", \"NeRFGS, used in paper\"),\n        ],\n        pip_package=\"git+https://github.com/grasp-lyrl/NeRFtoGSandBack.git#subdirectory=nerfgs\",\n    )\n)\n\n# Splatfacto-W\nexternal_methods.append(\n    ExternalMethod(\n        \"\"\"[bold yellow]Splatfacto-W[/bold yellow]\nFor more information visit: https://docs.nerf.studio/nerfology/methods/splatw.html\n\nTo enable Splatfacto-W, you must install it first by running:\n  [grey]pip install git+https://github.com/KevinXu02/splatfacto-w\"[/grey]\"\"\",\n        configurations=[\n            (\"splatfacto-w\", \"Splatfacto in the wild\"),\n        ],\n        pip_package=\"git+https://github.com/KevinXu02/splatfacto-w\",\n    )\n)\n\n\n@dataclass\nclass ExternalMethodDummyTrainerConfig:\n    \"\"\"Dummy trainer config for external methods (a) which do not have an\n    implementation in this repository, and (b) are not yet installed. When this\n    config is instantiated, we give the user the option to install the method.\n    \"\"\"\n\n    # tyro.conf.Suppress will prevent these fields from appearing as CLI arguments.\n    method_name: tyro.conf.Suppress[str]\n    method: tyro.conf.Suppress[ExternalMethod]\n\n    def __post_init__(self):\n        \"\"\"Offer to install an external method.\"\"\"\n\n        # Don't trigger install message from get_external_methods() below; only\n        # if this dummy object is instantiated from the CLI.\n        if inspect.stack()[2].function == \"get_external_methods\":\n            return\n\n        CONSOLE.print(self.method.instructions)\n        if self.method.pip_package and Confirm.ask(\n            \"\\nWould you like to run the install it now?\", default=False, console=CONSOLE\n        ):\n            # Install the method\n            install_command = f\"{sys.executable} -m pip install {self.method.pip_package}\"\n            CONSOLE.print(f\"Running: [cyan]{install_command}[/cyan]\")\n            result = subprocess.run(install_command, shell=True, check=False)\n            if result.returncode != 0:\n                CONSOLE.print(\"[bold red]Error installing method.[/bold red]\")\n                sys.exit(1)\n\n        sys.exit(0)\n\n\ndef get_external_methods() -> Tuple[Dict[str, ExternalMethodDummyTrainerConfig], Dict[str, str]]:\n    \"\"\"Returns the external methods trainer configs and the descriptions.\"\"\"\n    method_configs: Dict[str, ExternalMethodDummyTrainerConfig] = {}\n    descriptions: Dict[str, str] = {}\n    for external_method in external_methods:\n        for config_slug, config_description in external_method.configurations:\n            method_configs[config_slug] = ExternalMethodDummyTrainerConfig(\n                method_name=config_slug, method=external_method\n            )\n            descriptions[config_slug] = f\"\"\"[External, run 'ns-train {config_slug}' to install] {config_description}\"\"\"\n    return method_configs, descriptions\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/configs/method_configs.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nPut all the method implementations in one location.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import OrderedDict\nfrom typing import Dict, Union\n\nimport tyro\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizerConfig\nfrom nerfstudio.configs.base_config import ViewerConfig\nfrom nerfstudio.configs.external_methods import ExternalMethodDummyTrainerConfig, get_external_methods\nfrom nerfstudio.data.datamanagers.base_datamanager import VanillaDataManager, VanillaDataManagerConfig\nfrom nerfstudio.data.datamanagers.full_images_datamanager import FullImageDatamanagerConfig\nfrom nerfstudio.data.datamanagers.parallel_datamanager import ParallelDataManagerConfig\nfrom nerfstudio.data.datamanagers.random_cameras_datamanager import RandomCamerasDataManagerConfig\nfrom nerfstudio.data.dataparsers.blender_dataparser import BlenderDataParserConfig\nfrom nerfstudio.data.dataparsers.dnerf_dataparser import DNeRFDataParserConfig\nfrom nerfstudio.data.dataparsers.instant_ngp_dataparser import InstantNGPDataParserConfig\nfrom nerfstudio.data.dataparsers.nerfstudio_dataparser import NerfstudioDataParserConfig\nfrom nerfstudio.data.dataparsers.phototourism_dataparser import PhototourismDataParserConfig\nfrom nerfstudio.data.dataparsers.sdfstudio_dataparser import SDFStudioDataParserConfig\nfrom nerfstudio.data.dataparsers.sitcoms3d_dataparser import Sitcoms3DDataParserConfig\nfrom nerfstudio.data.datasets.depth_dataset import DepthDataset\nfrom nerfstudio.data.datasets.sdf_dataset import SDFDataset\nfrom nerfstudio.data.datasets.semantic_dataset import SemanticDataset\nfrom nerfstudio.engine.optimizers import AdamOptimizerConfig, RAdamOptimizerConfig\nfrom nerfstudio.engine.schedulers import (\n    CosineDecaySchedulerConfig,\n    ExponentialDecaySchedulerConfig,\n    MultiStepSchedulerConfig,\n)\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.field_components.temporal_distortions import TemporalDistortionKind\nfrom nerfstudio.fields.sdf_field import SDFFieldConfig\nfrom nerfstudio.models.depth_nerfacto import DepthNerfactoModelConfig\nfrom nerfstudio.models.generfacto import GenerfactoModelConfig\nfrom nerfstudio.models.instant_ngp import InstantNGPModelConfig\nfrom nerfstudio.models.mipnerf import MipNerfModel\nfrom nerfstudio.models.nerfacto import NerfactoModelConfig\nfrom nerfstudio.models.neus import NeuSModelConfig\nfrom nerfstudio.models.neus_facto import NeuSFactoModelConfig\nfrom nerfstudio.models.semantic_nerfw import SemanticNerfWModelConfig\nfrom nerfstudio.models.splatfacto import SplatfactoModelConfig\nfrom nerfstudio.models.tensorf import TensoRFModelConfig\nfrom nerfstudio.models.vanilla_nerf import NeRFModel, VanillaModelConfig\nfrom nerfstudio.pipelines.base_pipeline import VanillaPipelineConfig\nfrom nerfstudio.pipelines.dynamic_batch import DynamicBatchPipelineConfig\nfrom nerfstudio.plugins.registry import discover_methods\n\nmethod_configs: Dict[str, Union[TrainerConfig, ExternalMethodDummyTrainerConfig]] = {}\ndescriptions = {\n    \"nerfacto\": \"Recommended real-time model tuned for real captures. This model will be continually updated.\",\n    \"nerfacto-huge\": \"Larger version of Nerfacto with higher quality.\",\n    \"depth-nerfacto\": \"Nerfacto with depth supervision.\",\n    \"instant-ngp\": \"Implementation of Instant-NGP. Recommended real-time model for unbounded scenes.\",\n    \"instant-ngp-bounded\": \"Implementation of Instant-NGP. Recommended for bounded real and synthetic scenes\",\n    \"mipnerf\": \"High quality model for bounded scenes. (slow)\",\n    \"semantic-nerfw\": \"Predicts semantic segmentations and filters out transient objects.\",\n    \"vanilla-nerf\": \"Original NeRF model. (slow)\",\n    \"tensorf\": \"tensorf\",\n    \"dnerf\": \"Dynamic-NeRF model. (slow)\",\n    \"phototourism\": \"Uses the Phototourism data.\",\n    \"generfacto\": \"Generative Text to NeRF model\",\n    \"neus\": \"Implementation of NeuS. (slow)\",\n    \"neus-facto\": \"Implementation of NeuS-Facto. (slow)\",\n    \"splatfacto\": \"Gaussian Splatting model\",\n    \"splatfacto-big\": \"Larger version of Splatfacto with higher quality.\",\n}\n\nmethod_configs[\"nerfacto\"] = TrainerConfig(\n    method_name=\"nerfacto\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=ParallelDataManagerConfig(\n            dataparser=NerfstudioDataParserConfig(),\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=NerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            average_init_density=0.01,\n            camera_optimizer=CameraOptimizerConfig(mode=\"SO3xR3\"),\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"nerfacto-big\"] = TrainerConfig(\n    method_name=\"nerfacto\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=100000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=ParallelDataManagerConfig(\n            dataparser=NerfstudioDataParserConfig(),\n            train_num_rays_per_batch=8192,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=NerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            num_nerf_samples_per_ray=128,\n            num_proposal_samples_per_ray=(512, 256),\n            hidden_dim=128,\n            hidden_dim_color=128,\n            appearance_embed_dim=128,\n            max_res=4096,\n            proposal_weights_anneal_max_num_iters=5000,\n            log2_hashmap_size=21,\n            average_init_density=0.01,\n            camera_optimizer=CameraOptimizerConfig(mode=\"SO3xR3\"),\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=50000),\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"nerfacto-huge\"] = TrainerConfig(\n    method_name=\"nerfacto\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=100000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=ParallelDataManagerConfig(\n            dataparser=NerfstudioDataParserConfig(),\n            train_num_rays_per_batch=16384,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=NerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            num_nerf_samples_per_ray=64,\n            num_proposal_samples_per_ray=(512, 512),\n            proposal_net_args_list=[\n                {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 512, \"use_linear\": False},\n                {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 7, \"max_res\": 2048, \"use_linear\": False},\n            ],\n            hidden_dim=256,\n            hidden_dim_color=256,\n            appearance_embed_dim=32,\n            max_res=8192,\n            proposal_weights_anneal_max_num_iters=5000,\n            log2_hashmap_size=21,\n            average_init_density=0.01,\n            camera_optimizer=CameraOptimizerConfig(mode=\"SO3xR3\"),\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=50000),\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"depth-nerfacto\"] = TrainerConfig(\n    method_name=\"depth-nerfacto\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            _target=VanillaDataManager[DepthDataset],\n            dataparser=NerfstudioDataParserConfig(),\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=DepthNerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            camera_optimizer=CameraOptimizerConfig(mode=\"SO3xR3\"),\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"instant-ngp\"] = TrainerConfig(\n    method_name=\"instant-ngp\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=DynamicBatchPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            dataparser=NerfstudioDataParserConfig(),\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=InstantNGPModelConfig(eval_num_rays_per_chunk=8192),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n        }\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 12),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"instant-ngp-bounded\"] = TrainerConfig(\n    method_name=\"instant-ngp-bounded\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=DynamicBatchPipelineConfig(\n        datamanager=VanillaDataManagerConfig(dataparser=InstantNGPDataParserConfig(), train_num_rays_per_batch=8192),\n        model=InstantNGPModelConfig(\n            eval_num_rays_per_chunk=8192,\n            grid_levels=1,\n            alpha_thre=0.0,\n            cone_angle=0.0,\n            disable_scene_contraction=True,\n            near_plane=0.01,\n            background_color=\"black\",\n        ),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=200000),\n        }\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 12),\n    vis=\"viewer\",\n)\nmethod_configs[\"mipnerf\"] = TrainerConfig(\n    method_name=\"mipnerf\",\n    pipeline=VanillaPipelineConfig(\n        datamanager=ParallelDataManagerConfig(dataparser=NerfstudioDataParserConfig(), train_num_rays_per_batch=1024),\n        model=VanillaModelConfig(\n            _target=MipNerfModel,\n            loss_coefficients={\"rgb_loss_coarse\": 0.1, \"rgb_loss_fine\": 1.0},\n            num_coarse_samples=128,\n            num_importance_samples=128,\n            eval_num_rays_per_chunk=1024,\n        ),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),\n            \"scheduler\": None,\n        }\n    },\n)\n\nmethod_configs[\"semantic-nerfw\"] = TrainerConfig(\n    method_name=\"semantic-nerfw\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            _target=VanillaDataManager[SemanticDataset],\n            dataparser=Sitcoms3DDataParserConfig(),\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=8192,\n        ),\n        model=SemanticNerfWModelConfig(eval_num_rays_per_chunk=1 << 16),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 16),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"vanilla-nerf\"] = TrainerConfig(\n    method_name=\"vanilla-nerf\",\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            dataparser=BlenderDataParserConfig(),\n        ),\n        model=VanillaModelConfig(_target=NeRFModel),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),\n            \"scheduler\": None,\n        },\n        \"temporal_distortion\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),\n            \"scheduler\": None,\n        },\n    },\n)\n\nmethod_configs[\"tensorf\"] = TrainerConfig(\n    method_name=\"tensorf\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=False,\n    pipeline=VanillaPipelineConfig(\n        datamanager=ParallelDataManagerConfig(\n            dataparser=BlenderDataParserConfig(),\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=4096,\n        ),\n        model=TensoRFModelConfig(\n            regularization=\"tv\",\n            camera_optimizer=CameraOptimizerConfig(mode=\"off\"),\n        ),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.001),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.0001, max_steps=30000),\n        },\n        \"encodings\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.02),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=0.002, max_steps=30000),\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-4, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-5, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"dnerf\"] = TrainerConfig(\n    method_name=\"dnerf\",\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(dataparser=DNeRFDataParserConfig()),\n        model=VanillaModelConfig(\n            _target=NeRFModel,\n            enable_temporal_distortion=True,\n            temporal_distortion_params={\"kind\": TemporalDistortionKind.DNERF},\n        ),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),\n            \"scheduler\": None,\n        },\n        \"temporal_distortion\": {\n            \"optimizer\": RAdamOptimizerConfig(lr=5e-4, eps=1e-08),\n            \"scheduler\": None,\n        },\n    },\n)\n\nmethod_configs[\"phototourism\"] = TrainerConfig(\n    method_name=\"phototourism\",\n    steps_per_eval_batch=500,\n    steps_per_save=2000,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            dataparser=PhototourismDataParserConfig(),  # NOTE: one of the only differences with nerfacto\n            train_num_rays_per_batch=4096,\n            eval_num_rays_per_batch=4096,\n            # Large dataset, so using prior values from VariableResDataManager.\n            train_num_images_to_sample_from=40,\n            train_num_times_to_repeat_images=100,\n            eval_num_images_to_sample_from=40,\n            eval_num_times_to_repeat_images=100,\n        ),\n        model=NerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            camera_optimizer=CameraOptimizerConfig(mode=\"SO3xR3\"),\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=5000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"generfacto\"] = TrainerConfig(\n    method_name=\"generfacto\",\n    experiment_name=\"\",\n    steps_per_eval_batch=50,\n    steps_per_eval_image=50,\n    steps_per_save=200,\n    max_num_iterations=30000,\n    mixed_precision=True,\n    pipeline=VanillaPipelineConfig(\n        datamanager=RandomCamerasDataManagerConfig(\n            horizontal_rotation_warmup=3000,\n        ),\n        model=GenerfactoModelConfig(\n            eval_num_rays_per_chunk=1 << 15,\n            distortion_loss_mult=1.0,\n            interlevel_loss_mult=100.0,\n            max_res=256,\n            sphere_collider=True,\n            initialize_density=True,\n            taper_range=(0, 2000),\n            random_background=True,\n            proposal_warmup=2000,\n            proposal_update_every=0,\n            proposal_weights_anneal_max_num_iters=2000,\n            start_lambertian_training=500,\n            start_normals_training=2000,\n            opacity_loss_mult=0.001,\n            positional_prompting=\"discrete\",\n            guidance_scale=25,\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-4, eps=1e-15),\n            \"scheduler\": None,\n        },\n    },\n    viewer=ViewerConfig(),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"neus\"] = TrainerConfig(\n    method_name=\"neus\",\n    steps_per_eval_image=500,\n    steps_per_eval_batch=5000,\n    steps_per_save=20000,\n    steps_per_eval_all_images=1000000,  # set to a very large number so we don't eval with all images\n    max_num_iterations=100000,\n    mixed_precision=False,\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            _target=VanillaDataManager[SDFDataset],\n            dataparser=SDFStudioDataParserConfig(),\n            train_num_rays_per_batch=1024,\n            eval_num_rays_per_batch=1024,\n        ),\n        model=NeuSModelConfig(eval_num_rays_per_chunk=1024),\n    ),\n    optimizers={\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-4, eps=1e-15),\n            \"scheduler\": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),\n        },\n        \"field_background\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-4, eps=1e-15),\n            \"scheduler\": CosineDecaySchedulerConfig(warm_up_end=5000, learning_rate_alpha=0.05, max_steps=300000),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"neus-facto\"] = TrainerConfig(\n    method_name=\"neus-facto\",\n    steps_per_eval_image=5000,\n    steps_per_eval_batch=5000,\n    steps_per_save=2000,\n    steps_per_eval_all_images=1000000,  # set to a very large model so we don't eval with all images\n    max_num_iterations=20001,\n    mixed_precision=False,\n    pipeline=VanillaPipelineConfig(\n        datamanager=VanillaDataManagerConfig(\n            _target=VanillaDataManager[SDFDataset],\n            dataparser=SDFStudioDataParserConfig(),\n            train_num_rays_per_batch=2048,\n            eval_num_rays_per_batch=2048,\n        ),\n        model=NeuSFactoModelConfig(\n            # proposal network allows for significantly smaller sdf/color network\n            sdf_field=SDFFieldConfig(\n                use_grid_feature=True,\n                num_layers=2,\n                num_layers_color=2,\n                hidden_dim=256,\n                bias=0.5,\n                beta_init=0.8,\n                use_appearance_embedding=False,\n            ),\n            background_model=\"none\",\n            eval_num_rays_per_chunk=2048,\n        ),\n    ),\n    optimizers={\n        \"proposal_networks\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-2, eps=1e-15),\n            \"scheduler\": MultiStepSchedulerConfig(max_steps=20001, milestones=(10000, 1500, 18000)),\n        },\n        \"fields\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-4, eps=1e-15),\n            \"scheduler\": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),\n        },\n        \"field_background\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-4, eps=1e-15),\n            \"scheduler\": CosineDecaySchedulerConfig(warm_up_end=500, learning_rate_alpha=0.05, max_steps=20001),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"splatfacto\"] = TrainerConfig(\n    method_name=\"splatfacto\",\n    steps_per_eval_image=100,\n    steps_per_eval_batch=0,\n    steps_per_save=2000,\n    steps_per_eval_all_images=1000,\n    max_num_iterations=30000,\n    mixed_precision=False,\n    pipeline=VanillaPipelineConfig(\n        datamanager=FullImageDatamanagerConfig(\n            dataparser=NerfstudioDataParserConfig(load_3D_points=True),\n            cache_images_type=\"uint8\",\n        ),\n        model=SplatfactoModelConfig(),\n    ),\n    optimizers={\n        \"means\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1.6e-4, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=1.6e-6,\n                max_steps=30000,\n            ),\n        },\n        \"features_dc\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.0025, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"features_rest\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.0025 / 20, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"opacities\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.05, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"scales\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.005, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"quats\": {\"optimizer\": AdamOptimizerConfig(lr=0.001, eps=1e-15), \"scheduler\": None},\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-4, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=5e-7, max_steps=30000, warmup_steps=1000, lr_pre_warmup=0\n            ),\n        },\n        \"bilateral_grid\": {\n            \"optimizer\": AdamOptimizerConfig(lr=2e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=1e-4, max_steps=30000, warmup_steps=1000, lr_pre_warmup=0\n            ),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\nmethod_configs[\"splatfacto-big\"] = TrainerConfig(\n    method_name=\"splatfacto\",\n    steps_per_eval_image=100,\n    steps_per_eval_batch=0,\n    steps_per_save=2000,\n    steps_per_eval_all_images=1000,\n    max_num_iterations=30000,\n    mixed_precision=False,\n    pipeline=VanillaPipelineConfig(\n        datamanager=FullImageDatamanagerConfig(\n            dataparser=NerfstudioDataParserConfig(load_3D_points=True),\n            cache_images_type=\"uint8\",\n        ),\n        model=SplatfactoModelConfig(\n            cull_alpha_thresh=0.005,\n            densify_grad_thresh=0.0005,\n        ),\n    ),\n    optimizers={\n        \"means\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1.6e-4, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=1.6e-6,\n                max_steps=30000,\n            ),\n        },\n        \"features_dc\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.0025, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"features_rest\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.0025 / 20, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"opacities\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.05, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"scales\": {\n            \"optimizer\": AdamOptimizerConfig(lr=0.005, eps=1e-15),\n            \"scheduler\": None,\n        },\n        \"quats\": {\"optimizer\": AdamOptimizerConfig(lr=0.001, eps=1e-15), \"scheduler\": None},\n        \"camera_opt\": {\n            \"optimizer\": AdamOptimizerConfig(lr=1e-4, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=5e-7, max_steps=30000, warmup_steps=1000, lr_pre_warmup=0\n            ),\n        },\n        \"bilateral_grid\": {\n            \"optimizer\": AdamOptimizerConfig(lr=5e-3, eps=1e-15),\n            \"scheduler\": ExponentialDecaySchedulerConfig(\n                lr_final=1e-4, max_steps=30000, warmup_steps=1000, lr_pre_warmup=0\n            ),\n        },\n    },\n    viewer=ViewerConfig(num_rays_per_chunk=1 << 15),\n    vis=\"viewer\",\n)\n\n\ndef merge_methods(methods, method_descriptions, new_methods, new_descriptions, overwrite=True):\n    \"\"\"Merge new methods and descriptions into existing methods and descriptions.\n    Args:\n        methods: Existing methods.\n        method_descriptions: Existing descriptions.\n        new_methods: New methods to merge in.\n        new_descriptions: New descriptions to merge in.\n    Returns:\n        Merged methods and descriptions.\n    \"\"\"\n    methods = OrderedDict(**methods)\n    method_descriptions = OrderedDict(**method_descriptions)\n    for k, v in new_methods.items():\n        if overwrite or k not in methods:\n            methods[k] = v\n            method_descriptions[k] = new_descriptions.get(k, \"\")\n    return methods, method_descriptions\n\n\ndef sort_methods(methods, method_descriptions):\n    \"\"\"Sort methods and descriptions by method name.\"\"\"\n    methods = OrderedDict(sorted(methods.items(), key=lambda x: x[0]))\n    method_descriptions = OrderedDict(sorted(method_descriptions.items(), key=lambda x: x[0]))\n    return methods, method_descriptions\n\n\nall_methods, all_descriptions = method_configs, descriptions\n# Add discovered external methods\nall_methods, all_descriptions = merge_methods(all_methods, all_descriptions, *discover_methods())\nall_methods, all_descriptions = sort_methods(all_methods, all_descriptions)\n\n# Register all possible external methods which can be installed with Nerfstudio\nall_methods, all_descriptions = merge_methods(\n    all_methods, all_descriptions, *sort_methods(*get_external_methods()), overwrite=False\n)\n\nAnnotatedBaseConfigUnion = tyro.conf.SuppressFixed[  # Don't show unparseable (fixed) arguments in helptext.\n    tyro.conf.FlagConversionOff[\n        tyro.extras.subcommand_type_from_defaults(defaults=all_methods, descriptions=all_descriptions)\n    ]\n]\n\"\"\"Union[] type over config types, annotated with default instances for use with\ntyro.cli(). Allows the user to pick between one of several base configurations, and\nthen override values in it.\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datamanagers/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datamanagers/base_datamanager.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nDatamanager.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom abc import abstractmethod\nfrom collections import defaultdict\nfrom dataclasses import dataclass, field\nfrom functools import cached_property\nfrom pathlib import Path\nfrom typing import (\n    Any,\n    Callable,\n    Dict,\n    ForwardRef,\n    Generic,\n    List,\n    Literal,\n    Optional,\n    Tuple,\n    Type,\n    Union,\n    cast,\n    get_args,\n    get_origin,\n)\n\nimport torch\nimport tyro\nfrom torch import nn\nfrom torch.nn import Parameter\nfrom torch.utils.data.distributed import DistributedSampler\nfrom typing_extensions import TypeVar\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizerConfig\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.configs.dataparser_configs import AnnotatedDataParserUnion\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.dataparsers.blender_dataparser import BlenderDataParserConfig\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.pixel_samplers import PatchPixelSamplerConfig, PixelSampler, PixelSamplerConfig\nfrom nerfstudio.data.utils.dataloaders import CacheDataloader, FixedIndicesEvalDataloader, RandIndicesEvalDataloader\nfrom nerfstudio.data.utils.nerfstudio_collate import nerfstudio_collate\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes\nfrom nerfstudio.model_components.ray_generators import RayGenerator\nfrom nerfstudio.utils.misc import IterableWrapper, get_orig_class\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef variable_res_collate(batch: List[Dict]) -> Dict:\n    \"\"\"Default collate function for the cached dataloader.\n    Args:\n        batch: Batch of samples from the dataset.\n    Returns:\n        Collated batch.\n    \"\"\"\n    images = []\n    imgdata_lists = defaultdict(list)\n    for data in batch:\n        image = data.pop(\"image\")\n        images.append(image)\n        topop = []\n        for key, val in data.items():\n            if isinstance(val, torch.Tensor):\n                # if the value has same height and width as the image, assume that it should be collated accordingly.\n                if len(val.shape) >= 2 and val.shape[:2] == image.shape[:2]:\n                    imgdata_lists[key].append(val)\n                    topop.append(key)\n        # now that iteration is complete, the image data items can be removed from the batch\n        for key in topop:\n            del data[key]\n\n    new_batch = nerfstudio_collate(batch)\n    new_batch[\"image\"] = images\n    new_batch.update(imgdata_lists)\n\n    return new_batch\n\n\n@dataclass\nclass DataManagerConfig(InstantiateConfig):\n    \"\"\"Configuration for data manager instantiation; DataManager is in charge of keeping the train/eval dataparsers;\n    After instantiation, data manager holds both train/eval datasets and is in charge of returning unpacked\n    train/eval data at each iteration\n    \"\"\"\n\n    _target: Type = field(default_factory=lambda: DataManager)\n    \"\"\"Target class to instantiate.\"\"\"\n    data: Optional[Path] = None\n    \"\"\"Source of data, may not be used by all models.\"\"\"\n    masks_on_gpu: bool = False\n    \"\"\"Process masks on GPU for speed at the expense of memory, if True.\"\"\"\n    images_on_gpu: bool = False\n    \"\"\"Process images on GPU for speed at the expense of memory, if True.\"\"\"\n\n\nclass DataManager(nn.Module):\n    \"\"\"Generic data manager's abstract class\n\n    This version of the data manager is designed be a monolithic way to load data and latents,\n    especially since this may contain learnable parameters which need to be shared across the train\n    and test data managers. The idea is that we have setup methods for train and eval separately and\n    this can be a combined train/eval if you want.\n\n    Usage:\n    To get data, use the next_train and next_eval functions.\n    This data manager's next_train and next_eval methods will return 2 things:\n\n    1. 'rays': This will contain the rays or camera we are sampling, with latents and\n        conditionals attached (everything needed at inference)\n    2. A \"batch\" of auxiliary information: This will contain the mask, the ground truth\n        pixels, etc needed to actually train, score, etc the model\n\n    Rationale:\n    Because of this abstraction we've added, we can support more NeRF paradigms beyond the\n    vanilla nerf paradigm of single-scene, fixed-images, no-learnt-latents.\n    We can now support variable scenes, variable number of images, and arbitrary latents.\n\n\n    Train Methods:\n        setup_train: sets up for being used as train\n        iter_train: will be called on __iter__() for the train iterator\n        next_train: will be called on __next__() for the training iterator\n        get_train_iterable: utility that gets a clean pythonic iterator for your training data\n\n    Eval Methods:\n        setup_eval: sets up for being used as eval\n        iter_eval: will be called on __iter__() for the eval iterator\n        next_eval: will be called on __next__() for the eval iterator\n        get_eval_iterable: utility that gets a clean pythonic iterator for your eval data\n\n\n    Attributes:\n        train_count (int): the step number of our train iteration, needs to be incremented manually\n        eval_count (int): the step number of our eval iteration, needs to be incremented manually\n        train_dataset (Dataset): the dataset for the train dataset\n        eval_dataset (Dataset): the dataset for the eval dataset\n        includes_time (bool): whether the dataset includes time information\n\n        Additional attributes specific to each subclass are defined in the setup_train and setup_eval\n        functions.\n\n    \"\"\"\n\n    train_dataset: Optional[InputDataset] = None\n    eval_dataset: Optional[InputDataset] = None\n    train_sampler: Optional[DistributedSampler] = None\n    eval_sampler: Optional[DistributedSampler] = None\n    includes_time: bool = False\n\n    def __init__(self):\n        \"\"\"Constructor for the DataManager class.\n\n        Subclassed DataManagers will likely need to override this constructor.\n\n        If you aren't manually calling the setup_train and setup_eval functions from an overriden\n        constructor, that you call super().__init__() BEFORE you initialize any\n        nn.Modules or nn.Parameters, but AFTER you've already set all the attributes you need\n        for the setup functions.\"\"\"\n        super().__init__()\n        self.train_count = 0\n        self.eval_count = 0\n        if self.train_dataset and self.test_mode != \"inference\":\n            self.setup_train()\n        if self.eval_dataset and self.test_mode != \"inference\":\n            self.setup_eval()\n\n    def forward(self):\n        \"\"\"Blank forward method\n\n        This is an nn.Module, and so requires a forward() method normally, although in our case\n        we do not need a forward() method\"\"\"\n        raise NotImplementedError\n\n    def iter_train(self):\n        \"\"\"The __iter__ function for the train iterator.\n\n        This only exists to assist the get_train_iterable function, since we need to pass\n        in an __iter__ function for our trivial iterable that we are making.\"\"\"\n        self.train_count = 0\n\n    def iter_eval(self):\n        \"\"\"The __iter__ function for the eval iterator.\n\n        This only exists to assist the get_eval_iterable function, since we need to pass\n        in an __iter__ function for our trivial iterable that we are making.\"\"\"\n        self.eval_count = 0\n\n    def get_train_iterable(self, length=-1) -> IterableWrapper:\n        \"\"\"Gets a trivial pythonic iterator that will use the iter_train and next_train functions\n        as __iter__ and __next__ methods respectively.\n\n        This basically is just a little utility if you want to do something like:\n        |    for ray_bundle, batch in datamanager.get_train_iterable():\n        |        <eval code here>\n        since the returned IterableWrapper is just an iterator with the __iter__ and __next__\n        methods (methods bound to our DataManager instance in this case) specified in the constructor.\n        \"\"\"\n        return IterableWrapper(self.iter_train, self.next_train, length)\n\n    def get_eval_iterable(self, length=-1) -> IterableWrapper:\n        \"\"\"Gets a trivial pythonic iterator that will use the iter_eval and next_eval functions\n        as __iter__ and __next__ methods respectively.\n\n        This basically is just a little utility if you want to do something like:\n        |    for ray_bundle, batch in datamanager.get_eval_iterable():\n        |        <eval code here>\n        since the returned IterableWrapper is just an iterator with the __iter__ and __next__\n        methods (methods bound to our DataManager instance in this case) specified in the constructor.\n        \"\"\"\n        return IterableWrapper(self.iter_eval, self.next_eval, length)\n\n    @abstractmethod\n    def setup_train(self):\n        \"\"\"Sets up the data manager for training.\n\n        Here you will define any subclass specific object attributes from the attribute\"\"\"\n\n    @abstractmethod\n    def setup_eval(self):\n        \"\"\"Sets up the data manager for evaluation\"\"\"\n\n    @abstractmethod\n    def next_train(self, step: int) -> Tuple[Union[RayBundle, Cameras], Dict]:\n        \"\"\"Returns the next batch of data from the train data manager.\n\n        Args:\n            step: the step number of the eval image to retrieve\n        Returns:\n            A tuple of the ray bundle for the image, and a dictionary of additional batch information\n            such as the groundtruth image.\n        \"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def next_eval(self, step: int) -> Tuple[Union[RayBundle, Cameras], Dict]:\n        \"\"\"Returns the next batch of data from the eval data manager.\n\n        Args:\n            step: the step number of the eval image to retrieve\n        Returns:\n            A tuple of the ray/camera for the image, and a dictionary of additional batch information\n            such as the groundtruth image.\n        \"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def next_eval_image(self, step: int) -> Tuple[Cameras, Dict]:\n        \"\"\"Retrieve the next eval image.\n\n        Args:\n            step: the step number of the eval image to retrieve\n        Returns:\n            A tuple of the step number, the ray/camera for the image, and a dictionary of\n            additional batch information such as the groundtruth image.\n        \"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def get_train_rays_per_batch(self) -> int:\n        \"\"\"Returns the number of rays per batch for training.\"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def get_eval_rays_per_batch(self) -> int:\n        \"\"\"Returns the number of rays per batch for evaluation.\"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def get_datapath(self) -> Path:\n        \"\"\"Returns the path to the data. This is used to determine where to save camera paths.\"\"\"\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        \"\"\"Returns a list of callbacks to be used during training.\"\"\"\n        return []\n\n    @abstractmethod\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the data manager.\n\n        Returns:\n            A list of dictionaries containing the data manager's param groups.\n        \"\"\"\n        return {}\n\n\n@dataclass\nclass VanillaDataManagerConfig(DataManagerConfig):\n    \"\"\"A basic data manager for a ray-based model\"\"\"\n\n    _target: Type = field(default_factory=lambda: VanillaDataManager)\n    \"\"\"Target class to instantiate.\"\"\"\n    dataparser: AnnotatedDataParserUnion = field(default_factory=BlenderDataParserConfig)\n    \"\"\"Specifies the dataparser used to unpack the data.\"\"\"\n    train_num_rays_per_batch: int = 1024\n    \"\"\"Number of rays per batch to use per training iteration.\"\"\"\n    train_num_images_to_sample_from: int = -1\n    \"\"\"Number of images to sample during training iteration.\"\"\"\n    train_num_times_to_repeat_images: int = -1\n    \"\"\"When not training on all images, number of iterations before picking new\n    images. If -1, never pick new images.\"\"\"\n    eval_num_rays_per_batch: int = 1024\n    \"\"\"Number of rays per batch to use per eval iteration.\"\"\"\n    eval_num_images_to_sample_from: int = -1\n    \"\"\"Number of images to sample during eval iteration.\"\"\"\n    eval_num_times_to_repeat_images: int = -1\n    \"\"\"When not evaluating on all images, number of iterations before picking\n    new images. If -1, never pick new images.\"\"\"\n    eval_image_indices: Optional[Tuple[int, ...]] = (0,)\n    \"\"\"Specifies the image indices to use during eval; if None, uses all.\"\"\"\n    collate_fn: Callable[[Any], Any] = cast(Any, staticmethod(nerfstudio_collate))\n    \"\"\"Specifies the collate function to use for the train and eval dataloaders.\"\"\"\n    camera_res_scale_factor: float = 1.0\n    \"\"\"The scale factor for scaling spatial data such as images, mask, semantics\n    along with relevant information about camera intrinsics\n    \"\"\"\n    patch_size: int = 1\n    \"\"\"Size of patch to sample from. If > 1, patch-based sampling will be used.\"\"\"\n\n    # tyro.conf.Suppress prevents us from creating CLI arguments for this field.\n    camera_optimizer: tyro.conf.Suppress[Optional[CameraOptimizerConfig]] = field(default=None)\n    \"\"\"Deprecated, has been moved to the model config.\"\"\"\n    pixel_sampler: PixelSamplerConfig = field(default_factory=PixelSamplerConfig)\n    \"\"\"Specifies the pixel sampler used to sample pixels from images.\"\"\"\n\n    def __post_init__(self):\n        \"\"\"Warn user of camera optimizer change.\"\"\"\n        if self.camera_optimizer is not None:\n            import warnings\n\n            CONSOLE.print(\n                \"\\nCameraOptimizerConfig has been moved from the DataManager to the Model.\\n\", style=\"bold yellow\"\n            )\n            warnings.warn(\"above message coming from\", FutureWarning, stacklevel=3)\n\n\nTDataset = TypeVar(\"TDataset\", bound=InputDataset, default=InputDataset)\n\n\nclass VanillaDataManager(DataManager, Generic[TDataset]):\n    \"\"\"Basic stored data manager implementation.\n\n    This is pretty much a port over from our old dataloading utilities, and is a little jank\n    under the hood. We may clean this up a little bit under the hood with more standard dataloading\n    components that can be strung together, but it can be just used as a black box for now since\n    only the constructor is likely to change in the future, or maybe passing in step number to the\n    next_train and next_eval functions.\n\n    Args:\n        config: the DataManagerConfig used to instantiate class\n    \"\"\"\n\n    config: VanillaDataManagerConfig\n    train_dataset: TDataset\n    eval_dataset: TDataset\n    train_dataparser_outputs: DataparserOutputs\n    train_pixel_sampler: Optional[PixelSampler] = None\n    eval_pixel_sampler: Optional[PixelSampler] = None\n\n    def __init__(\n        self,\n        config: VanillaDataManagerConfig,\n        device: Union[torch.device, str] = \"cpu\",\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        **kwargs,\n    ):\n        self.config = config\n        self.device = device\n        self.world_size = world_size\n        self.local_rank = local_rank\n        self.sampler = None\n        self.test_mode = test_mode\n        self.test_split = \"test\" if test_mode in [\"test\", \"inference\"] else \"val\"\n        self.dataparser_config = self.config.dataparser\n        if self.config.data is not None:\n            self.config.dataparser.data = Path(self.config.data)\n        else:\n            self.config.data = self.config.dataparser.data\n        self.dataparser = self.dataparser_config.setup()\n        if test_mode == \"inference\":\n            self.dataparser.downscale_factor = 1  # Avoid opening images\n        self.includes_time = self.dataparser.includes_time\n        self.train_dataparser_outputs: DataparserOutputs = self.dataparser.get_dataparser_outputs(split=\"train\")\n\n        self.train_dataset = self.create_train_dataset()\n        self.eval_dataset = self.create_eval_dataset()\n        self.exclude_batch_keys_from_device = self.train_dataset.exclude_batch_keys_from_device\n        if self.config.masks_on_gpu is True and \"mask\" in self.exclude_batch_keys_from_device:\n            self.exclude_batch_keys_from_device.remove(\"mask\")\n        if self.config.images_on_gpu is True and \"image\" in self.exclude_batch_keys_from_device:\n            self.exclude_batch_keys_from_device.remove(\"image\")\n\n        if self.train_dataparser_outputs is not None:\n            cameras = self.train_dataparser_outputs.cameras\n            if len(cameras) > 1:\n                for i in range(1, len(cameras)):\n                    if cameras[0].width != cameras[i].width or cameras[0].height != cameras[i].height:\n                        CONSOLE.print(\"Variable resolution, using variable_res_collate\")\n                        self.config.collate_fn = variable_res_collate\n                        break\n        super().__init__()\n\n    @cached_property\n    def dataset_type(self) -> Type[TDataset]:\n        \"\"\"Returns the dataset type passed as the generic argument\"\"\"\n        default: Type[TDataset] = cast(TDataset, TDataset.__default__)  # type: ignore\n        orig_class: Type[VanillaDataManager] = get_orig_class(self, default=None)  # type: ignore\n        if type(self) is VanillaDataManager and orig_class is None:\n            return default\n        if orig_class is not None and get_origin(orig_class) is VanillaDataManager:\n            return get_args(orig_class)[0]\n\n        # For inherited classes, we need to find the correct type to instantiate\n        for base in getattr(self, \"__orig_bases__\", []):\n            if get_origin(base) is VanillaDataManager:\n                for value in get_args(base):\n                    if isinstance(value, ForwardRef):\n                        if value.__forward_evaluated__:\n                            value = value.__forward_value__\n                        elif value.__forward_module__ is None:\n                            value.__forward_module__ = type(self).__module__\n                            value = getattr(value, \"_evaluate\")(None, None, set())\n                    assert isinstance(value, type)\n                    if issubclass(value, InputDataset):\n                        return cast(Type[TDataset], value)\n        return default\n\n    def create_train_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for training\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.train_dataparser_outputs,\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    def create_eval_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for evaluation\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.dataparser.get_dataparser_outputs(split=self.test_split),\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    def _get_pixel_sampler(self, dataset: TDataset, num_rays_per_batch: int) -> PixelSampler:\n        \"\"\"Infer pixel sampler to use.\"\"\"\n        if self.config.patch_size > 1 and type(self.config.pixel_sampler) is PixelSamplerConfig:\n            return PatchPixelSamplerConfig().setup(\n                patch_size=self.config.patch_size, num_rays_per_batch=num_rays_per_batch\n            )\n        is_equirectangular = (dataset.cameras.camera_type == CameraType.EQUIRECTANGULAR.value).all()\n        if is_equirectangular.any():\n            CONSOLE.print(\"[bold yellow]Warning: Some cameras are equirectangular, but using default pixel sampler.\")\n\n        fisheye_crop_radius = None\n        if dataset.cameras.metadata is not None:\n            fisheye_crop_radius = dataset.cameras.metadata.get(\"fisheye_crop_radius\")\n\n        return self.config.pixel_sampler.setup(\n            is_equirectangular=is_equirectangular,\n            num_rays_per_batch=num_rays_per_batch,\n            fisheye_crop_radius=fisheye_crop_radius,\n        )\n\n    def setup_train(self):\n        \"\"\"Sets up the data loaders for training\"\"\"\n        assert self.train_dataset is not None\n        CONSOLE.print(\"Setting up training dataset...\")\n        self.train_image_dataloader = CacheDataloader(\n            self.train_dataset,\n            num_images_to_sample_from=self.config.train_num_images_to_sample_from,\n            num_times_to_repeat_images=self.config.train_num_times_to_repeat_images,\n            device=self.device,\n            num_workers=self.world_size * 4,\n            pin_memory=True,\n            collate_fn=self.config.collate_fn,\n            exclude_batch_keys_from_device=self.exclude_batch_keys_from_device,\n        )\n        self.iter_train_image_dataloader = iter(self.train_image_dataloader)\n        self.train_pixel_sampler = self._get_pixel_sampler(self.train_dataset, self.config.train_num_rays_per_batch)\n        self.train_ray_generator = RayGenerator(self.train_dataset.cameras.to(self.device))\n\n    def setup_eval(self):\n        \"\"\"Sets up the data loader for evaluation\"\"\"\n        assert self.eval_dataset is not None\n        CONSOLE.print(\"Setting up evaluation dataset...\")\n        self.eval_image_dataloader = CacheDataloader(\n            self.eval_dataset,\n            num_images_to_sample_from=self.config.eval_num_images_to_sample_from,\n            num_times_to_repeat_images=self.config.eval_num_times_to_repeat_images,\n            device=self.device,\n            num_workers=self.world_size * 4,\n            pin_memory=True,\n            collate_fn=self.config.collate_fn,\n            exclude_batch_keys_from_device=self.exclude_batch_keys_from_device,\n        )\n        self.iter_eval_image_dataloader = iter(self.eval_image_dataloader)\n        self.eval_pixel_sampler = self._get_pixel_sampler(self.eval_dataset, self.config.eval_num_rays_per_batch)\n        self.eval_ray_generator = RayGenerator(self.eval_dataset.cameras.to(self.device))\n        # for loading full images\n        self.fixed_indices_eval_dataloader = FixedIndicesEvalDataloader(\n            input_dataset=self.eval_dataset,\n            device=self.device,\n            num_workers=self.world_size * 4,\n        )\n        self.eval_dataloader = RandIndicesEvalDataloader(\n            input_dataset=self.eval_dataset,\n            device=self.device,\n            num_workers=self.world_size * 4,\n        )\n\n    def next_train(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the train dataloader.\"\"\"\n        self.train_count += 1\n        image_batch = next(self.iter_train_image_dataloader)\n        assert self.train_pixel_sampler is not None\n        assert isinstance(image_batch, dict)\n        batch = self.train_pixel_sampler.sample(image_batch)\n        ray_indices = batch[\"indices\"]\n        ray_bundle = self.train_ray_generator(ray_indices)\n        return ray_bundle, batch\n\n    def next_eval(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the eval dataloader.\"\"\"\n        self.eval_count += 1\n        image_batch = next(self.iter_eval_image_dataloader)\n        assert self.eval_pixel_sampler is not None\n        assert isinstance(image_batch, dict)\n        batch = self.eval_pixel_sampler.sample(image_batch)\n        ray_indices = batch[\"indices\"]\n        ray_bundle = self.eval_ray_generator(ray_indices)\n        return ray_bundle, batch\n\n    def next_eval_image(self, step: int) -> Tuple[Cameras, Dict]:\n        for camera, batch in self.eval_dataloader:\n            assert camera.shape[0] == 1\n            return camera, batch\n        raise ValueError(\"No more eval images\")\n\n    def get_train_rays_per_batch(self) -> int:\n        if self.train_pixel_sampler is not None:\n            return self.train_pixel_sampler.num_rays_per_batch\n        return self.config.train_num_rays_per_batch\n\n    def get_eval_rays_per_batch(self) -> int:\n        if self.eval_pixel_sampler is not None:\n            return self.eval_pixel_sampler.num_rays_per_batch\n        return self.config.eval_num_rays_per_batch\n\n    def get_datapath(self) -> Path:\n        return self.config.dataparser.data\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the data manager.\n        Returns:\n            A list of dictionaries containing the data manager's param groups.\n        \"\"\"\n        return {}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datamanagers/full_images_datamanager.py",
    "content": "# Copyright 2022 The Nerfstudio Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nData manager that outputs cameras / images instead of raybundles\n\nGood for things like gaussian splatting which require full cameras instead of the standard ray\nparadigm\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\nfrom concurrent.futures import ThreadPoolExecutor\nfrom copy import deepcopy\nfrom dataclasses import dataclass, field\nfrom functools import cached_property\nfrom pathlib import Path\nfrom typing import Dict, ForwardRef, Generic, List, Literal, Optional, Tuple, Type, Union, cast, get_args, get_origin\n\nimport cv2\nimport fpsample\nimport numpy as np\nimport torch\nfrom rich.progress import track\nfrom torch.nn import Parameter\nfrom typing_extensions import assert_never\n\nfrom nerfstudio.cameras.camera_utils import fisheye624_project, fisheye624_unproject_helper\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.configs.dataparser_configs import AnnotatedDataParserUnion\nfrom nerfstudio.data.datamanagers.base_datamanager import DataManager, DataManagerConfig, TDataset\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.dataparsers.nerfstudio_dataparser import NerfstudioDataParserConfig\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.utils.misc import get_orig_class\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass FullImageDatamanagerConfig(DataManagerConfig):\n    _target: Type = field(default_factory=lambda: FullImageDatamanager)\n    dataparser: AnnotatedDataParserUnion = field(default_factory=NerfstudioDataParserConfig)\n    camera_res_scale_factor: float = 1.0\n    \"\"\"The scale factor for scaling spatial data such as images, mask, semantics\n    along with relevant information about camera intrinsics\n    \"\"\"\n    eval_num_images_to_sample_from: int = -1\n    \"\"\"Number of images to sample during eval iteration.\"\"\"\n    eval_num_times_to_repeat_images: int = -1\n    \"\"\"When not evaluating on all images, number of iterations before picking\n    new images. If -1, never pick new images.\"\"\"\n    eval_image_indices: Optional[Tuple[int, ...]] = (0,)\n    \"\"\"Specifies the image indices to use during eval; if None, uses all.\"\"\"\n    cache_images: Literal[\"cpu\", \"gpu\"] = \"gpu\"\n    \"\"\"Whether to cache images in memory. If \"cpu\", caches on cpu. If \"gpu\", caches on device.\"\"\"\n    cache_images_type: Literal[\"uint8\", \"float32\"] = \"float32\"\n    \"\"\"The image type returned from manager, caching images in uint8 saves memory\"\"\"\n    max_thread_workers: Optional[int] = None\n    \"\"\"The maximum number of threads to use for caching images. If None, uses all available threads.\"\"\"\n    train_cameras_sampling_strategy: Literal[\"random\", \"fps\"] = \"random\"\n    \"\"\"Specifies which sampling strategy is used to generate train cameras, 'random' means sampling \n    uniformly random without replacement, 'fps' means farthest point sampling which is helpful to reduce the artifacts \n    due to oversampling subsets of cameras that are very close to each other.\"\"\"\n    train_cameras_sampling_seed: int = 42\n    \"\"\"Random seed for sampling train cameras. Fixing seed may help reduce variance of trained models across \n    different runs.\"\"\"\n    fps_reset_every: int = 100\n    \"\"\"The number of iterations before one resets fps sampler repeatly, which is essentially drawing fps_reset_every\n    samples from the pool of all training cameras without replacement before a new round of sampling starts.\"\"\"\n\n\nclass FullImageDatamanager(DataManager, Generic[TDataset]):\n    \"\"\"\n    A datamanager that outputs full images and cameras instead of raybundles. This makes the\n    datamanager more lightweight since we don't have to do generate rays. Useful for full-image\n    training e.g. rasterization pipelines\n    \"\"\"\n\n    config: FullImageDatamanagerConfig\n    train_dataset: TDataset\n    eval_dataset: TDataset\n\n    def __init__(\n        self,\n        config: FullImageDatamanagerConfig,\n        device: Union[torch.device, str] = \"cpu\",\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        **kwargs,\n    ):\n        self.config = config\n        self.device = device\n        self.world_size = world_size\n        self.local_rank = local_rank\n        self.sampler = None\n        self.test_mode = test_mode\n        self.test_split = \"test\" if test_mode in [\"test\", \"inference\"] else \"val\"\n        self.dataparser_config = self.config.dataparser\n        if self.config.data is not None:\n            self.config.dataparser.data = Path(self.config.data)\n        else:\n            self.config.data = self.config.dataparser.data\n        self.dataparser = self.dataparser_config.setup()\n        if test_mode == \"inference\":\n            self.dataparser.downscale_factor = 1  # Avoid opening images\n        self.includes_time = self.dataparser.includes_time\n\n        self.train_dataparser_outputs: DataparserOutputs = self.dataparser.get_dataparser_outputs(split=\"train\")\n        self.train_dataset = self.create_train_dataset()\n        self.eval_dataset = self.create_eval_dataset()\n        if len(self.train_dataset) > 500 and self.config.cache_images == \"gpu\":\n            CONSOLE.print(\n                \"Train dataset has over 500 images, overriding cache_images to cpu\",\n                style=\"bold yellow\",\n            )\n            self.config.cache_images = \"cpu\"\n        self.exclude_batch_keys_from_device = self.train_dataset.exclude_batch_keys_from_device\n        if self.config.masks_on_gpu is True:\n            self.exclude_batch_keys_from_device.remove(\"mask\")\n        if self.config.images_on_gpu is True:\n            self.exclude_batch_keys_from_device.remove(\"image\")\n\n        # Some logic to make sure we sample every camera in equal amounts\n        self.train_unseen_cameras = self.sample_train_cameras()\n        self.eval_unseen_cameras = [i for i in range(len(self.eval_dataset))]\n        assert len(self.train_unseen_cameras) > 0, \"No data found in dataset\"\n\n        super().__init__()\n\n    def sample_train_cameras(self):\n        \"\"\"Return a list of camera indices sampled using the strategy specified by\n        self.config.train_cameras_sampling_strategy\"\"\"\n        num_train_cameras = len(self.train_dataset)\n        if self.config.train_cameras_sampling_strategy == \"random\":\n            if not hasattr(self, \"random_generator\"):\n                self.random_generator = random.Random(self.config.train_cameras_sampling_seed)\n            indices = list(range(num_train_cameras))\n            self.random_generator.shuffle(indices)\n            return indices\n        elif self.config.train_cameras_sampling_strategy == \"fps\":\n            if not hasattr(self, \"train_unsampled_epoch_count\"):\n                np.random.seed(self.config.train_cameras_sampling_seed)  # fix random seed of fpsample\n                self.train_unsampled_epoch_count = np.zeros(num_train_cameras)\n            camera_origins = self.train_dataset.cameras.camera_to_worlds[..., 3].numpy()\n            # We concatenate camera origins with weighted train_unsampled_epoch_count because we want to\n            # increase the chance to sample camera that hasn't been sampled in consecutive epochs previously.\n            # We assume the camera origins are also rescaled, so the weight 0.1 is relative to the scale of scene\n            data = np.concatenate(\n                (camera_origins, 0.1 * np.expand_dims(self.train_unsampled_epoch_count, axis=-1)), axis=-1\n            )\n            n = self.config.fps_reset_every\n            if num_train_cameras < n:\n                CONSOLE.log(\n                    f\"num_train_cameras={num_train_cameras} is smaller than fps_reset_ever={n}, the behavior of \"\n                    \"camera sampler will be very similar to sampling random without replacement (default setting).\"\n                )\n                n = num_train_cameras\n            kdline_fps_samples_idx = fpsample.bucket_fps_kdline_sampling(data, n, h=3)\n\n            self.train_unsampled_epoch_count += 1\n            self.train_unsampled_epoch_count[kdline_fps_samples_idx] = 0\n            return kdline_fps_samples_idx.tolist()\n        else:\n            raise ValueError(f\"Unknown train camera sampling strategy: {self.config.train_cameras_sampling_strategy}\")\n\n    @cached_property\n    def cached_train(self) -> List[Dict[str, torch.Tensor]]:\n        \"\"\"Get the training images. Will load and undistort the images the\n        first time this (cached) property is accessed.\"\"\"\n        return self._load_images(\"train\", cache_images_device=self.config.cache_images)\n\n    @cached_property\n    def cached_eval(self) -> List[Dict[str, torch.Tensor]]:\n        \"\"\"Get the eval images. Will load and undistort the images the\n        first time this (cached) property is accessed.\"\"\"\n        return self._load_images(\"eval\", cache_images_device=self.config.cache_images)\n\n    def _load_images(\n        self, split: Literal[\"train\", \"eval\"], cache_images_device: Literal[\"cpu\", \"gpu\"]\n    ) -> List[Dict[str, torch.Tensor]]:\n        undistorted_images: List[Dict[str, torch.Tensor]] = []\n\n        # Which dataset?\n        if split == \"train\":\n            dataset = self.train_dataset\n        elif split == \"eval\":\n            dataset = self.eval_dataset\n        else:\n            assert_never(split)\n\n        def undistort_idx(idx: int) -> Dict[str, torch.Tensor]:\n            data = dataset.get_data(idx, image_type=self.config.cache_images_type)\n            camera = dataset.cameras[idx].reshape(())\n            assert data[\"image\"].shape[1] == camera.width.item() and data[\"image\"].shape[0] == camera.height.item(), (\n                f'The size of image ({data[\"image\"].shape[1]}, {data[\"image\"].shape[0]}) loaded '\n                f'does not match the camera parameters ({camera.width.item(), camera.height.item()})'\n            )\n            if camera.distortion_params is None or torch.all(camera.distortion_params == 0):\n                return data\n            K = camera.get_intrinsics_matrices().numpy()\n            distortion_params = camera.distortion_params.numpy()\n            image = data[\"image\"].numpy()\n\n            K, image, mask = _undistort_image(camera, distortion_params, data, image, K)\n            data[\"image\"] = torch.from_numpy(image)\n            if mask is not None:\n                data[\"mask\"] = mask\n\n            dataset.cameras.fx[idx] = float(K[0, 0])\n            dataset.cameras.fy[idx] = float(K[1, 1])\n            dataset.cameras.cx[idx] = float(K[0, 2])\n            dataset.cameras.cy[idx] = float(K[1, 2])\n            dataset.cameras.width[idx] = image.shape[1]\n            dataset.cameras.height[idx] = image.shape[0]\n            return data\n\n        CONSOLE.log(f\"Caching / undistorting {split} images\")\n        with ThreadPoolExecutor(max_workers=2) as executor:\n            undistorted_images = list(\n                track(\n                    executor.map(\n                        undistort_idx,\n                        range(len(dataset)),\n                    ),\n                    description=f\"Caching / undistorting {split} images\",\n                    transient=True,\n                    total=len(dataset),\n                )\n            )\n\n        # Move to device.\n        if cache_images_device == \"gpu\":\n            for cache in undistorted_images:\n                cache[\"image\"] = cache[\"image\"].to(self.device)\n                if \"mask\" in cache:\n                    cache[\"mask\"] = cache[\"mask\"].to(self.device)\n                if \"depth\" in cache:\n                    cache[\"depth\"] = cache[\"depth\"].to(self.device)\n                self.train_cameras = self.train_dataset.cameras.to(self.device)\n        elif cache_images_device == \"cpu\":\n            for cache in undistorted_images:\n                cache[\"image\"] = cache[\"image\"].pin_memory()\n                if \"mask\" in cache:\n                    cache[\"mask\"] = cache[\"mask\"].pin_memory()\n                self.train_cameras = self.train_dataset.cameras\n        else:\n            assert_never(cache_images_device)\n\n        return undistorted_images\n\n    def create_train_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for training\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.train_dataparser_outputs,\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    def create_eval_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for evaluation\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.dataparser.get_dataparser_outputs(split=self.test_split),\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    @cached_property\n    def dataset_type(self) -> Type[TDataset]:\n        \"\"\"Returns the dataset type passed as the generic argument\"\"\"\n        default: Type[TDataset] = cast(TDataset, TDataset.__default__)  # type: ignore\n        orig_class: Type[FullImageDatamanager] = get_orig_class(self, default=None)  # type: ignore\n        if type(self) is FullImageDatamanager and orig_class is None:\n            return default\n        if orig_class is not None and get_origin(orig_class) is FullImageDatamanager:\n            return get_args(orig_class)[0]\n\n        # For inherited classes, we need to find the correct type to instantiate\n        for base in getattr(self, \"__orig_bases__\", []):\n            if get_origin(base) is FullImageDatamanager:\n                for value in get_args(base):\n                    if isinstance(value, ForwardRef):\n                        if value.__forward_evaluated__:\n                            value = value.__forward_value__\n                        elif value.__forward_module__ is None:\n                            value.__forward_module__ = type(self).__module__\n                            value = getattr(value, \"_evaluate\")(None, None, set())\n                    assert isinstance(value, type)\n                    if issubclass(value, InputDataset):\n                        return cast(Type[TDataset], value)\n        return default\n\n    def get_datapath(self) -> Path:\n        return self.config.dataparser.data\n\n    def setup_train(self):\n        \"\"\"Sets up the data loaders for training\"\"\"\n\n    def setup_eval(self):\n        \"\"\"Sets up the data loader for evaluation\"\"\"\n\n    @property\n    def fixed_indices_eval_dataloader(self) -> List[Tuple[Cameras, Dict]]:\n        \"\"\"\n        Pretends to be the dataloader for evaluation, it returns a list of (camera, data) tuples\n        \"\"\"\n        image_indices = [i for i in range(len(self.eval_dataset))]\n        data = [d.copy() for d in self.cached_eval]\n        _cameras = deepcopy(self.eval_dataset.cameras).to(self.device)\n        cameras = []\n        for i in image_indices:\n            data[i][\"image\"] = data[i][\"image\"].to(self.device)\n            cameras.append(_cameras[i : i + 1])\n        assert len(self.eval_dataset.cameras.shape) == 1, \"Assumes single batch dimension\"\n        return list(zip(cameras, data))\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the data manager.\n        Returns:\n            A list of dictionaries containing the data manager's param groups.\n        \"\"\"\n        return {}\n\n    def get_train_rays_per_batch(self):\n        \"\"\"Returns resolution of the image returned from datamanager.\"\"\"\n        if len(self.cached_train) != 0:\n            h = self.cached_train[0][\"image\"].shape[0]\n            w = self.cached_train[0][\"image\"].shape[1]\n            return h * w\n        else:\n            return 800 * 800\n\n    def next_train(self, step: int) -> Tuple[Cameras, Dict]:\n        \"\"\"Returns the next training batch\n\n        Returns a Camera instead of raybundle\"\"\"\n        image_idx = self.train_unseen_cameras.pop(0)\n        # Make sure to re-populate the unseen cameras list if we have exhausted it\n        if len(self.train_unseen_cameras) == 0:\n            self.train_unseen_cameras = self.sample_train_cameras()\n\n        data = self.cached_train[image_idx]\n        # We're going to copy to make sure we don't mutate the cached dictionary.\n        # This can cause a memory leak: https://github.com/nerfstudio-project/nerfstudio/issues/3335\n        data = data.copy()\n        data[\"image\"] = data[\"image\"].to(self.device)\n\n        assert len(self.train_cameras.shape) == 1, \"Assumes single batch dimension\"\n        camera = self.train_cameras[image_idx : image_idx + 1].to(self.device)\n        if camera.metadata is None:\n            camera.metadata = {}\n        camera.metadata[\"cam_idx\"] = image_idx\n        return camera, data\n\n    def next_eval(self, step: int) -> Tuple[Cameras, Dict]:\n        \"\"\"Returns the next evaluation batch\n\n        Returns a Camera instead of raybundle\"\"\"\n        return self.next_eval_image(step=step)\n\n    def next_eval_image(self, step: int) -> Tuple[Cameras, Dict]:\n        \"\"\"Returns the next evaluation batch\n\n        Returns a Camera instead of raybundle\n\n        TODO: Make sure this logic is consistent with the vanilladatamanager\"\"\"\n        image_idx = self.eval_unseen_cameras.pop(random.randint(0, len(self.eval_unseen_cameras) - 1))\n        # Make sure to re-populate the unseen cameras list if we have exhausted it\n        if len(self.eval_unseen_cameras) == 0:\n            self.eval_unseen_cameras = [i for i in range(len(self.eval_dataset))]\n        data = self.cached_eval[image_idx]\n        data = data.copy()\n        data[\"image\"] = data[\"image\"].to(self.device)\n        assert len(self.eval_dataset.cameras.shape) == 1, \"Assumes single batch dimension\"\n        camera = self.eval_dataset.cameras[image_idx : image_idx + 1].to(self.device)\n        return camera, data\n\n\ndef _undistort_image(\n    camera: Cameras, distortion_params: np.ndarray, data: dict, image: np.ndarray, K: np.ndarray\n) -> Tuple[np.ndarray, np.ndarray, Optional[torch.Tensor]]:\n    mask = None\n    if camera.camera_type.item() == CameraType.PERSPECTIVE.value:\n        assert distortion_params[3] == 0, (\n            \"We doesn't support the 4th Brown parameter for image undistortion, \"\n            \"Only k1, k2, k3, p1, p2 can be non-zero.\"\n        )\n        # because OpenCV expects the order of distortion parameters to be (k1, k2, p1, p2, k3), we need to reorder them\n        # see https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html\n        distortion_params = np.array(\n            [\n                distortion_params[0],\n                distortion_params[1],\n                distortion_params[4],\n                distortion_params[5],\n                distortion_params[2],\n                distortion_params[3],\n                0,\n                0,\n            ]\n        )\n        # because OpenCV expects the pixel coord to be top-left, we need to shift the principal point by 0.5\n        # see https://github.com/nerfstudio-project/nerfstudio/issues/3048\n        K[0, 2] = K[0, 2] - 0.5\n        K[1, 2] = K[1, 2] - 0.5\n        if np.any(distortion_params):\n            newK, roi = cv2.getOptimalNewCameraMatrix(K, distortion_params, (image.shape[1], image.shape[0]), 0)\n            image = cv2.undistort(image, K, distortion_params, None, newK)  # type: ignore\n        else:\n            newK = K\n            roi = 0, 0, image.shape[1], image.shape[0]\n        # crop the image and update the intrinsics accordingly\n        x, y, w, h = roi\n        image = image[y : y + h, x : x + w]\n        # update the principal point based on our cropped region of interest (ROI)\n        newK[0, 2] -= x\n        newK[1, 2] -= y\n        if \"depth_image\" in data:\n            data[\"depth_image\"] = data[\"depth_image\"][y : y + h, x : x + w]\n        if \"mask\" in data:\n            mask = data[\"mask\"].numpy()\n            mask = mask.astype(np.uint8) * 255\n            if np.any(distortion_params):\n                mask = cv2.undistort(mask, K, distortion_params, None, newK)  # type: ignore\n            mask = mask[y : y + h, x : x + w]\n            mask = torch.from_numpy(mask).bool()\n            if len(mask.shape) == 2:\n                mask = mask[:, :, None]\n        newK[0, 2] = newK[0, 2] + 0.5\n        newK[1, 2] = newK[1, 2] + 0.5\n        K = newK\n\n    elif camera.camera_type.item() == CameraType.FISHEYE.value:\n        K[0, 2] = K[0, 2] - 0.5\n        K[1, 2] = K[1, 2] - 0.5\n        distortion_params = np.array(\n            [distortion_params[0], distortion_params[1], distortion_params[2], distortion_params[3]]\n        )\n        newK = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(\n            K, distortion_params, (image.shape[1], image.shape[0]), np.eye(3), balance=0\n        )\n        map1, map2 = cv2.fisheye.initUndistortRectifyMap(\n            K, distortion_params, np.eye(3), newK, (image.shape[1], image.shape[0]), cv2.CV_32FC1\n        )\n        # and then remap:\n        image = cv2.remap(image, map1, map2, interpolation=cv2.INTER_LINEAR)\n        if \"mask\" in data:\n            mask = data[\"mask\"].numpy()\n            mask = mask.astype(np.uint8) * 255\n            mask = cv2.fisheye.undistortImage(mask, K, distortion_params, None, newK)\n            mask = torch.from_numpy(mask).bool()\n            if len(mask.shape) == 2:\n                mask = mask[:, :, None]\n        newK[0, 2] = newK[0, 2] + 0.5\n        newK[1, 2] = newK[1, 2] + 0.5\n        K = newK\n    elif camera.camera_type.item() == CameraType.FISHEYE624.value:\n        fisheye624_params = torch.cat(\n            [camera.fx, camera.fy, camera.cx, camera.cy, torch.from_numpy(distortion_params)], dim=0\n        )\n        assert fisheye624_params.shape == (16,)\n        assert (\n            \"mask\" not in data\n            and camera.metadata is not None\n            and \"fisheye_crop_radius\" in camera.metadata\n            and isinstance(camera.metadata[\"fisheye_crop_radius\"], float)\n        )\n        fisheye_crop_radius = camera.metadata[\"fisheye_crop_radius\"]\n\n        # Approximate the FOV of the unmasked region of the camera.\n        upper, lower, left, right = fisheye624_unproject_helper(\n            torch.tensor(\n                [\n                    [camera.cx, camera.cy - fisheye_crop_radius],\n                    [camera.cx, camera.cy + fisheye_crop_radius],\n                    [camera.cx - fisheye_crop_radius, camera.cy],\n                    [camera.cx + fisheye_crop_radius, camera.cy],\n                ],\n                dtype=torch.float32,\n            )[None],\n            params=fisheye624_params[None],\n        ).squeeze(dim=0)\n        fov_radians = torch.max(\n            torch.acos(torch.sum(upper * lower / torch.linalg.norm(upper) / torch.linalg.norm(lower))),\n            torch.acos(torch.sum(left * right / torch.linalg.norm(left) / torch.linalg.norm(right))),\n        )\n\n        # Heuristics to determine parameters of an undistorted image.\n        undist_h = int(fisheye_crop_radius * 2)\n        undist_w = int(fisheye_crop_radius * 2)\n        undistort_focal = undist_h / (2 * torch.tan(fov_radians / 2.0))\n        undist_K = torch.eye(3)\n        undist_K[0, 0] = undistort_focal  # fx\n        undist_K[1, 1] = undistort_focal  # fy\n        undist_K[0, 2] = (undist_w - 1) / 2.0  # cx; for a 1x1 image, center should be at (0, 0).\n        undist_K[1, 2] = (undist_h - 1) / 2.0  # cy\n\n        # Undistorted 2D coordinates -> rays -> reproject to distorted UV coordinates.\n        undist_uv_homog = torch.stack(\n            [\n                *torch.meshgrid(\n                    torch.arange(undist_w, dtype=torch.float32),\n                    torch.arange(undist_h, dtype=torch.float32),\n                ),\n                torch.ones((undist_w, undist_h), dtype=torch.float32),\n            ],\n            dim=-1,\n        )\n        assert undist_uv_homog.shape == (undist_w, undist_h, 3)\n        dist_uv = (\n            fisheye624_project(\n                xyz=(\n                    torch.einsum(\n                        \"ij,bj->bi\",\n                        torch.linalg.inv(undist_K),\n                        undist_uv_homog.reshape((undist_w * undist_h, 3)),\n                    )[None]\n                ),\n                params=fisheye624_params[None, :],\n            )\n            .reshape((undist_w, undist_h, 2))\n            .numpy()\n        )\n        map1 = dist_uv[..., 1]\n        map2 = dist_uv[..., 0]\n\n        # Use correspondence to undistort image.\n        image = cv2.remap(image, map1, map2, interpolation=cv2.INTER_LINEAR)\n\n        # Compute undistorted mask as well.\n        dist_h = camera.height.item()\n        dist_w = camera.width.item()\n        mask = np.mgrid[:dist_h, :dist_w]\n        mask[0, ...] -= dist_h // 2\n        mask[1, ...] -= dist_w // 2\n        mask = np.linalg.norm(mask, axis=0) < fisheye_crop_radius\n        mask = torch.from_numpy(\n            cv2.remap(\n                mask.astype(np.uint8) * 255,\n                map1,\n                map2,\n                interpolation=cv2.INTER_LINEAR,\n                borderMode=cv2.BORDER_CONSTANT,\n                borderValue=0,\n            )\n            / 255.0\n        ).bool()[..., None]\n        if len(mask.shape) == 2:\n            mask = mask[:, :, None]\n        assert mask.shape == (undist_h, undist_w, 1)\n        K = undist_K.numpy()\n    else:\n        raise NotImplementedError(\"Only perspective and fisheye cameras are supported\")\n\n    return K, image, mask\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datamanagers/parallel_datamanager.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nParallel data manager that generates training data in multiple python processes.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport concurrent.futures\nimport queue\nimport time\nfrom dataclasses import dataclass, field\nfrom functools import cached_property\nfrom pathlib import Path\nfrom typing import Dict, ForwardRef, Generic, List, Literal, Optional, Tuple, Type, Union, cast, get_args, get_origin\n\nimport torch\nfrom pathos.helpers import mp\nfrom rich.progress import track\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.datamanagers.base_datamanager import (\n    DataManager,\n    TDataset,\n    VanillaDataManagerConfig,\n    variable_res_collate,\n)\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.pixel_samplers import PatchPixelSamplerConfig, PixelSampler, PixelSamplerConfig\nfrom nerfstudio.data.utils.dataloaders import CacheDataloader, FixedIndicesEvalDataloader, RandIndicesEvalDataloader\nfrom nerfstudio.model_components.ray_generators import RayGenerator\nfrom nerfstudio.utils.misc import get_orig_class\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ParallelDataManagerConfig(VanillaDataManagerConfig):\n    \"\"\"Config for a `ParallelDataManager` which reads data in multiple processes\"\"\"\n\n    _target: Type = field(default_factory=lambda: ParallelDataManager)\n    \"\"\"Target class to instantiate.\"\"\"\n    num_processes: int = 1\n    \"\"\"Number of processes to use for train data loading. More than 1 doesn't result in that much better performance\"\"\"\n    queue_size: int = 2\n    \"\"\"Size of shared data queue containing generated ray bundles and batches.\n    If queue_size <= 0, the queue size is infinite.\"\"\"\n    max_thread_workers: Optional[int] = None\n    \"\"\"Maximum number of threads to use in thread pool executor. If None, use ThreadPool default.\"\"\"\n\n\nclass DataProcessor(mp.Process):  # type: ignore\n    \"\"\"Parallel dataset batch processor.\n\n    This class is responsible for generating ray bundles from an input dataset\n    in parallel python processes.\n\n    Args:\n        out_queue: the output queue for storing the processed data\n        config: configuration object for the parallel data manager\n        dataparser_outputs: outputs from the dataparser\n        dataset: input dataset\n        pixel_sampler: The pixel sampler for sampling rays\n    \"\"\"\n\n    def __init__(\n        self,\n        out_queue: mp.Queue,  # type: ignore\n        config: ParallelDataManagerConfig,\n        dataparser_outputs: DataparserOutputs,\n        dataset: TDataset,\n        pixel_sampler: PixelSampler,\n    ):\n        super().__init__()\n        self.daemon = True\n        self.out_queue = out_queue\n        self.config = config\n        self.dataparser_outputs = dataparser_outputs\n        self.dataset = dataset\n        self.exclude_batch_keys_from_device = self.dataset.exclude_batch_keys_from_device\n        self.pixel_sampler = pixel_sampler\n        self.ray_generator = RayGenerator(self.dataset.cameras)\n\n    def run(self):\n        \"\"\"Append out queue in parallel with ray bundles and batches.\"\"\"\n        self.cache_images()\n        while True:\n            batch = self.pixel_sampler.sample(self.img_data)\n            ray_indices = batch[\"indices\"]\n            ray_bundle: RayBundle = self.ray_generator(ray_indices)\n            # check that GPUs are available\n            if torch.cuda.is_available():\n                ray_bundle = ray_bundle.pin_memory()\n            while True:\n                try:\n                    self.out_queue.put((ray_bundle, batch))\n                    break\n                except queue.Full:\n                    time.sleep(0.0001)\n                except Exception:\n                    CONSOLE.print_exception()\n                    CONSOLE.print(\"[bold red]Error: Error occurred in parallel datamanager queue.\")\n\n    def cache_images(self):\n        \"\"\"Caches all input images into a NxHxWx3 tensor.\"\"\"\n        indices = range(len(self.dataset))\n        batch_list = []\n        results = []\n        with concurrent.futures.ThreadPoolExecutor(max_workers=self.config.max_thread_workers) as executor:\n            for idx in indices:\n                res = executor.submit(self.dataset.__getitem__, idx)\n                results.append(res)\n            for res in track(results, description=\"Loading data batch\", transient=False):\n                batch_list.append(res.result())\n        self.img_data = self.config.collate_fn(batch_list)\n\n\nclass ParallelDataManager(DataManager, Generic[TDataset]):\n    \"\"\"Data manager implementation for parallel dataloading.\n\n    Args:\n        config: the DataManagerConfig used to instantiate class\n    \"\"\"\n\n    def __init__(\n        self,\n        config: ParallelDataManagerConfig,\n        device: Union[torch.device, str] = \"cpu\",\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        **kwargs,\n    ):\n        self.config = config\n        self.device = device\n        self.world_size = world_size\n        self.local_rank = local_rank\n        self.test_mode = test_mode\n        self.test_split = \"test\" if test_mode in [\"test\", \"inference\"] else \"val\"\n        self.dataparser_config = self.config.dataparser\n        if self.config.data is not None:\n            self.config.dataparser.data = Path(self.config.data)\n        else:\n            self.config.data = self.config.dataparser.data\n        self.dataparser = self.dataparser_config.setup()\n        if test_mode == \"inference\":\n            self.dataparser.downscale_factor = 1  # Avoid opening images\n        self.includes_time = self.dataparser.includes_time\n        self.train_dataparser_outputs: DataparserOutputs = self.dataparser.get_dataparser_outputs(split=\"train\")\n        self.eval_dataparser_outputs: DataparserOutputs = self.dataparser.get_dataparser_outputs(split=self.test_split)\n        cameras = self.train_dataparser_outputs.cameras\n        if len(cameras) > 1:\n            for i in range(1, len(cameras)):\n                if cameras[0].width != cameras[i].width or cameras[0].height != cameras[i].height:\n                    CONSOLE.print(\"Variable resolution, using variable_res_collate\")\n                    self.config.collate_fn = variable_res_collate\n                    break\n        self.train_dataset = self.create_train_dataset()\n        self.eval_dataset = self.create_eval_dataset()\n        self.exclude_batch_keys_from_device = self.train_dataset.exclude_batch_keys_from_device\n        # Spawn is critical for not freezing the program (PyTorch compatability issue)\n        # check if spawn is already set\n        if mp.get_start_method(allow_none=True) is None:  # type: ignore\n            mp.set_start_method(\"spawn\")  # type: ignore\n        super().__init__()\n\n    @cached_property\n    def dataset_type(self) -> Type[TDataset]:\n        \"\"\"Returns the dataset type passed as the generic argument\"\"\"\n        default: Type[TDataset] = cast(TDataset, TDataset.__default__)  # type: ignore\n        orig_class: Type[ParallelDataManager] = get_orig_class(self, default=None)  # type: ignore\n        if type(self) is ParallelDataManager and orig_class is None:\n            return default\n        if orig_class is not None and get_origin(orig_class) is ParallelDataManager:\n            return get_args(orig_class)[0]\n\n        # For inherited classes, we need to find the correct type to instantiate\n        for base in getattr(self, \"__orig_bases__\", []):\n            if get_origin(base) is ParallelDataManager:\n                for value in get_args(base):\n                    if isinstance(value, ForwardRef):\n                        if value.__forward_evaluated__:\n                            value = value.__forward_value__\n                        elif value.__forward_module__ is None:\n                            value.__forward_module__ = type(self).__module__\n                            value = getattr(value, \"_evaluate\")(None, None, set())\n                    assert isinstance(value, type)\n                    if issubclass(value, InputDataset):\n                        return cast(Type[TDataset], value)\n        return default\n\n    def create_train_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for training.\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.train_dataparser_outputs,\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    def create_eval_dataset(self) -> TDataset:\n        \"\"\"Sets up the data loaders for evaluation.\"\"\"\n        return self.dataset_type(\n            dataparser_outputs=self.dataparser.get_dataparser_outputs(split=self.test_split),\n            scale_factor=self.config.camera_res_scale_factor,\n        )\n\n    def _get_pixel_sampler(self, dataset: TDataset, num_rays_per_batch: int) -> PixelSampler:\n        \"\"\"Infer pixel sampler to use.\"\"\"\n        if self.config.patch_size > 1 and type(self.config.pixel_sampler) is PixelSamplerConfig:\n            return PatchPixelSamplerConfig().setup(\n                patch_size=self.config.patch_size, num_rays_per_batch=num_rays_per_batch\n            )\n        is_equirectangular = (dataset.cameras.camera_type == CameraType.EQUIRECTANGULAR.value).all()\n        if is_equirectangular.any():\n            CONSOLE.print(\"[bold yellow]Warning: Some cameras are equirectangular, but using default pixel sampler.\")\n\n        fisheye_crop_radius = None\n        if dataset.cameras.metadata is not None:\n            fisheye_crop_radius = dataset.cameras.metadata.get(\"fisheye_crop_radius\")\n\n        return self.config.pixel_sampler.setup(\n            is_equirectangular=is_equirectangular,\n            num_rays_per_batch=num_rays_per_batch,\n            fisheye_crop_radius=fisheye_crop_radius,\n        )\n\n    def setup_train(self):\n        \"\"\"Sets up parallel python data processes for training.\"\"\"\n        assert self.train_dataset is not None\n        self.train_pixel_sampler = self._get_pixel_sampler(self.train_dataset, self.config.train_num_rays_per_batch)  # type: ignore\n        self.data_queue = mp.Queue(maxsize=self.config.queue_size)  # type: ignore\n        self.data_procs = [\n            DataProcessor(\n                out_queue=self.data_queue,  # type: ignore\n                config=self.config,\n                dataparser_outputs=self.train_dataparser_outputs,\n                dataset=self.train_dataset,\n                pixel_sampler=self.train_pixel_sampler,\n            )\n            for i in range(self.config.num_processes)\n        ]\n        for proc in self.data_procs:\n            proc.start()\n        print(\"Started threads\")\n\n    def setup_eval(self):\n        \"\"\"Sets up the data loader for evaluation.\"\"\"\n        assert self.eval_dataset is not None\n        CONSOLE.print(\"Setting up evaluation dataset...\")\n        self.eval_image_dataloader = CacheDataloader(\n            self.eval_dataset,\n            num_images_to_sample_from=self.config.eval_num_images_to_sample_from,\n            num_times_to_repeat_images=self.config.eval_num_times_to_repeat_images,\n            device=self.device,\n            num_workers=self.world_size * 4,\n            pin_memory=True,\n            collate_fn=self.config.collate_fn,\n            exclude_batch_keys_from_device=self.exclude_batch_keys_from_device,\n        )\n        self.iter_eval_image_dataloader = iter(self.eval_image_dataloader)\n        self.eval_pixel_sampler = self._get_pixel_sampler(self.eval_dataset, self.config.eval_num_rays_per_batch)  # type: ignore\n        self.eval_ray_generator = RayGenerator(self.eval_dataset.cameras.to(self.device))\n        # for loading full images\n        self.fixed_indices_eval_dataloader = FixedIndicesEvalDataloader(\n            input_dataset=self.eval_dataset,\n            device=self.device,\n            num_workers=self.world_size * 4,\n        )\n        self.eval_dataloader = RandIndicesEvalDataloader(\n            input_dataset=self.eval_dataset,\n            device=self.device,\n            num_workers=self.world_size * 4,\n        )\n\n    def next_train(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the parallel training processes.\"\"\"\n        self.train_count += 1\n        bundle, batch = self.data_queue.get()\n        ray_bundle = bundle.to(self.device)\n        return ray_bundle, batch\n\n    def next_eval(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the eval dataloader.\"\"\"\n        self.eval_count += 1\n        image_batch = next(self.iter_eval_image_dataloader)\n        assert self.eval_pixel_sampler is not None\n        assert isinstance(image_batch, dict)\n        batch = self.eval_pixel_sampler.sample(image_batch)\n        ray_indices = batch[\"indices\"]\n        ray_bundle = self.eval_ray_generator(ray_indices)\n        return ray_bundle, batch\n\n    def next_eval_image(self, step: int) -> Tuple[Cameras, Dict]:\n        \"\"\"Retrieve the next eval image.\"\"\"\n        for camera, batch in self.eval_dataloader:\n            assert camera.shape[0] == 1\n            return camera, batch\n        raise ValueError(\"No more eval images\")\n\n    def get_train_rays_per_batch(self) -> int:\n        \"\"\"Returns the number of rays per batch for training.\"\"\"\n        if self.train_pixel_sampler is not None:\n            return self.train_pixel_sampler.num_rays_per_batch\n        return self.config.train_num_rays_per_batch\n\n    def get_eval_rays_per_batch(self) -> int:\n        \"\"\"Returns the number of rays per batch for evaluation.\"\"\"\n        if self.eval_pixel_sampler is not None:\n            return self.eval_pixel_sampler.num_rays_per_batch\n        return self.config.eval_num_rays_per_batch\n\n    def get_datapath(self) -> Path:\n        \"\"\"Returns the path to the data. This is used to determine where to save camera paths.\"\"\"\n        return self.config.dataparser.data\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the data manager.\n        Returns:\n            A list of dictionaries containing the data manager's param groups.\n        \"\"\"\n        return {}\n\n    def __del__(self):\n        \"\"\"Clean up the parallel data processes.\"\"\"\n        if hasattr(self, \"data_procs\"):\n            for proc in self.data_procs:\n                proc.terminate()\n                proc.join()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datamanagers/random_cameras_datamanager.py",
    "content": "# Copyright 2022 The Nerfstudio Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nData manager without input images, only random camera poses\n\"\"\"\n\nfrom __future__ import annotations\n\nimport sys\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Tuple, Type, Union\n\nimport torch\nfrom rich.progress import Console\nfrom torch import Tensor\nfrom torch.nn import Parameter\nfrom typing_extensions import Literal\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.data.datamanagers.base_datamanager import DataManager, DataManagerConfig\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.data.utils.dataloaders import RandIndicesEvalDataloader\n\nCONSOLE = Console(width=120)\n\n\nclass TrivialDataset(InputDataset):\n    \"\"\"A trivial dataset with blank images for the viewer\"\"\"\n\n    # pylint: disable=super-init-not-called\n    def __init__(self, cameras: Cameras):\n        self.size = cameras.size\n        self.cameras = cameras\n        self.alpha_color = None\n        self.scene_box = SceneBox(torch.Tensor([[-1, -1, -1], [1, 1, 1]]))\n        self.mask_filenames = None\n        self.metadata = to_immutable_dict({})\n\n    def __len__(self):\n        return self.size\n\n    def __getitem__(self, index: int) -> Dict:\n        return {\n            \"image\": torch.cat([torch.ones(128, 256, 3), torch.zeros(128, 256, 3)], dim=0),\n            \"image_idx\": index,\n        }\n\n\ndef random_train_pose(\n    size: int,\n    resolution: int,\n    device: Union[torch.device, str],\n    radius_mean: float = 1.0,\n    radius_std: float = 0.1,\n    central_rotation_range: Tuple[float, float] = (0, 360),\n    vertical_rotation_range: Tuple[float, float] = (-90, 0),\n    focal_range: Tuple[float, float] = (0.75, 1.35),\n    jitter_std: float = 0.01,\n    center: Tuple[float, float, float] = (0, 0, 0),\n) -> Tuple[Cameras, Tensor, Tensor]:\n    \"\"\"generate random poses from an orbit camera\n    Args:\n        size: batch size of generated poses.\n        device: where to allocate the output.\n        radius_mean: mean radius of the orbit camera.\n        radius_std: standard deviation of the radius of the orbit camera.\n        central_rotation_range: amount that we rotate around the center of the object\n        vertical_rotation_range: amount that we allow the cameras to pan up and down from horizontal\n        focal_range: focal length range\n        jitter_std: standard deviation of the jitter added to the camera position\n        center: center of the object\n    Return:\n        poses: [size, 4, 4]\n    \"\"\"\n\n    vertical_rotation_range = (\n        vertical_rotation_range[0] + 90,\n        vertical_rotation_range[1] + 90,\n    )\n    # This is the uniform sample on the part of the sphere we care about where 0 = 0 degrees and 1 = 360 degrees\n    sampled_uniform = (\n        torch.rand(size) * (vertical_rotation_range[1] - vertical_rotation_range[0]) + vertical_rotation_range[0]\n    ) / 180\n    vertical_rotation = torch.arccos(1 - 2 * sampled_uniform)\n    central_rotation = torch.deg2rad(\n        torch.rand(size) * (central_rotation_range[1] - central_rotation_range[0]) + central_rotation_range[0]\n    )\n\n    c_cos = torch.cos(central_rotation)\n    c_sin = torch.sin(central_rotation)\n    v_cos = torch.cos(vertical_rotation)\n    v_sin = torch.sin(vertical_rotation)\n    zeros = torch.zeros_like(central_rotation)\n    ones = torch.ones_like(central_rotation)\n\n    rot_z = torch.stack(\n        [\n            torch.stack([c_cos, -c_sin, zeros], dim=-1),\n            torch.stack([c_sin, c_cos, zeros], dim=-1),\n            torch.stack([zeros, zeros, ones], dim=-1),\n        ],\n        dim=-2,\n    )\n\n    rot_x = torch.stack(\n        [\n            torch.stack([ones, zeros, zeros], dim=-1),\n            torch.stack([zeros, v_cos, -v_sin], dim=-1),\n            torch.stack([zeros, v_sin, v_cos], dim=-1),\n        ],\n        dim=-2,\n    )\n\n    # Default directions are facing in the -z direction, so origins should face opposite way\n    origins = torch.stack([torch.tensor([0, 0, 1])] * size, dim=0)\n    origins = (origins * radius_mean) + (origins * (torch.randn((origins.shape)) * radius_std))\n    R = torch.bmm(rot_z, rot_x)  # Want to have Rx @ Ry @ origin\n    t = (\n        torch.bmm(R, origins.unsqueeze(-1))\n        + torch.randn((size, 3, 1)) * jitter_std\n        + torch.tensor(center)[None, :, None]\n    )\n    camera_to_worlds = torch.cat([R, t], dim=-1)\n\n    focals = torch.rand(size) * (focal_range[1] - focal_range[0]) + focal_range[0]\n\n    cameras = Cameras(\n        camera_to_worlds=camera_to_worlds,\n        fx=focals * resolution,\n        fy=focals * resolution,\n        cx=resolution / 2,\n        cy=resolution / 2,\n    ).to(device)\n\n    return cameras, torch.rad2deg(vertical_rotation), torch.rad2deg(central_rotation)\n\n\n@dataclass\nclass RandomCamerasDataManagerConfig(DataManagerConfig):\n    \"\"\"Configuration for data manager that does not load from a dataset. Instead, it generates random poses.\"\"\"\n\n    _target: Type = field(default_factory=lambda: RandomCamerasDataManager)\n    train_resolution: int = 64\n    \"\"\"Training resolution\"\"\"\n    eval_resolution: int = 64\n    \"\"\"Evaluation resolution\"\"\"\n    num_eval_angles: int = 256\n    \"\"\"Number of evaluation angles\"\"\"\n    train_images_per_batch: int = 1\n    \"\"\"Number of images per batch for training\"\"\"\n    eval_images_per_batch: int = 1\n    \"\"\"Number of images per batch for evaluation\"\"\"\n    radius_mean: float = 2.5\n    \"\"\"Mean radius of camera orbit\"\"\"\n    radius_std: float = 0.1\n    \"\"\"Std of radius of camera orbit\"\"\"\n    focal_range: Tuple[float, float] = (0.7, 1.35)\n    \"\"\"Range of focal length\"\"\"\n    vertical_rotation_range: Tuple[float, float] = (-90, 0)\n    \"\"\"Range of vertical rotation\"\"\"\n    jitter_std: float = 0.05\n    \"\"\"Std of camera direction jitter, so we don't just point the cameras towards the center every time\"\"\"\n    center: Tuple[float, float, float] = (0, 0, 0)\n    \"\"\"Center coordinate of the camera sphere\"\"\"\n    horizontal_rotation_warmup: int = 0\n    \"\"\"How many steps until the full horizontal rotation range is used\"\"\"\n\n\nclass RandomCamerasDataManager(DataManager):  # pylint: disable=abstract-method\n    \"\"\"Basic stored data manager implementation.\n\n    This is pretty much a port over from our old dataloading utilities, and is a little jank\n    under the hood. We may clean this up a little bit under the hood with more standard dataloading\n    components that can be strung together, but it can be just used as a black box for now since\n    only the constructor is likely to change in the future, or maybe passing in step number to the\n    next_train and next_eval functions.\n\n    Args:\n        config: the DataManagerConfig used to instantiate class\n    \"\"\"\n\n    config: RandomCamerasDataManagerConfig\n\n    # pylint: disable=super-init-not-called\n    def __init__(\n        self,\n        config: RandomCamerasDataManagerConfig,\n        device: Union[torch.device, str] = \"cpu\",\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        **kwargs,  # pylint: disable=unused-argument\n    ):\n        self.config = config\n        self.device = device\n        self.world_size = world_size\n        self.local_rank = local_rank\n        self.sampler = None\n        self.test_mode = test_mode\n        self.test_split = \"test\" if test_mode in [\"test\", \"inference\"] else \"val\"\n\n        if self.config.data is not None:\n            CONSOLE.print(\"[red] --data should not be used with the RandomCamerasDataManager[/red]\")\n            sys.exit(1)\n\n        cameras, _, _ = random_train_pose(\n            self.config.num_eval_angles,\n            self.config.eval_resolution,\n            device=self.device,\n            radius_mean=self.config.radius_mean,\n            radius_std=self.config.radius_std,\n            focal_range=self.config.focal_range,\n            central_rotation_range=(-180, 180),\n            vertical_rotation_range=self.config.vertical_rotation_range,\n            jitter_std=self.config.jitter_std,\n            center=self.config.center,\n        )\n\n        self.train_dataset = TrivialDataset(cameras)\n        self.eval_dataset = TrivialDataset(cameras)\n\n        self.eval_dataloader = RandIndicesEvalDataloader(\n            input_dataset=self.eval_dataset,\n            device=self.device,\n            num_workers=self.world_size * 4,\n        )\n\n        # pylint: disable=non-parent-init-called\n        DataManager.__init__(self)\n\n    def next_train(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the train dataloader.\"\"\"\n\n        self.train_count += 1\n        horizontal_range = min((step / max(1, self.config.horizontal_rotation_warmup)), 1) * 180\n\n        cameras, vertical_rotation, central_rotation = random_train_pose(\n            self.config.train_images_per_batch,\n            self.config.train_resolution,\n            device=self.device,\n            radius_mean=self.config.radius_mean,\n            radius_std=self.config.radius_std,\n            focal_range=self.config.focal_range,\n            vertical_rotation_range=self.config.vertical_rotation_range,\n            jitter_std=self.config.jitter_std,\n            center=self.config.center,\n            central_rotation_range=(-horizontal_range, horizontal_range),\n        )\n        ray_bundle = cameras.generate_rays(torch.tensor(list(range(self.config.train_images_per_batch)))).flatten()\n\n        return ray_bundle, {\n            \"vertical\": vertical_rotation,\n            \"central\": central_rotation,\n            \"initialization\": True,\n        }\n\n    def next_eval(self, step: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data from the eval dataloader.\"\"\"\n        self.eval_count += 1\n\n        cameras, vertical_rotation, central_rotation = random_train_pose(\n            self.config.eval_images_per_batch,\n            self.config.eval_resolution,\n            device=self.device,\n            radius_mean=self.config.radius_mean,\n            radius_std=self.config.radius_std,\n            focal_range=self.config.focal_range,\n            vertical_rotation_range=self.config.vertical_rotation_range,\n            jitter_std=self.config.jitter_std,\n            center=self.config.center,\n        )\n        ray_bundle = cameras.generate_rays(\n            torch.tensor([[i] for i in range(self.config.train_images_per_batch)])\n        ).flatten()\n\n        return ray_bundle, {\"vertical\": vertical_rotation, \"central\": central_rotation}\n\n    def next_eval_image(self, step: int) -> Tuple[Cameras, Dict]:\n        for camera, batch in self.eval_dataloader:\n            assert camera.shape[0] == 1\n            return camera, batch\n        raise ValueError(\"No more eval images\")\n\n    def get_train_rays_per_batch(self) -> int:\n        return self.config.train_resolution**2\n\n    def get_eval_rays_per_batch(self) -> int:\n        return self.config.eval_resolution**2\n\n    def get_param_groups(\n        self,\n    ) -> Dict[str, List[Parameter]]:  # pylint: disable=no-self-use\n        \"\"\"Get the param groups for the data manager.\n        Returns:\n            A list of dictionaries containing the data manager's param groups.\n        \"\"\"\n        param_groups = {}\n\n        return param_groups\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/arkitscenes_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for ARKitScenes dataset\"\"\"\n\nimport math\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Type\n\nimport cv2\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\n\n\n# Taken from https://github.com/apple/ARKitScenes/blob/main/threedod/benchmark_scripts/utils/tenFpsDataLoader.py\ndef traj_string_to_matrix(traj_string: str):\n    \"\"\"convert traj_string into translation and rotation matrices\n    Args:\n        traj_string: A space-delimited file where each line represents a camera position at a particular timestamp.\n        The file has seven columns:\n        * Column 1: timestamp\n        * Columns 2-4: rotation (axis-angle representation in radians)\n        * Columns 5-7: translation (usually in meters)\n    Returns:\n        ts: translation matrix\n        Rt: rotation matrix\n    \"\"\"\n    tokens = traj_string.split()\n    assert len(tokens) == 7\n    ts = tokens[0]\n    # Rotation in angle axis\n    angle_axis = [float(tokens[1]), float(tokens[2]), float(tokens[3])]\n    r_w_to_p, _ = cv2.Rodrigues(np.asarray(angle_axis))  # type: ignore\n    # Translation\n    t_w_to_p = np.asarray([float(tokens[4]), float(tokens[5]), float(tokens[6])])\n    extrinsics = np.eye(4, 4)\n    extrinsics[:3, :3] = r_w_to_p\n    extrinsics[:3, -1] = t_w_to_p\n    Rt = np.linalg.inv(extrinsics)\n    return (ts, Rt)\n\n\n@dataclass\nclass ARKitScenesDataParserConfig(DataParserConfig):\n    \"\"\"ARKitScenes dataset config.\n    ARKitScenes dataset (http://github.com/apple/ARKitScenes) is a large-scale 3D dataset of indoor scenes.\n    This dataparser uses 3D detection subset of the ARKitScenes dataset.\n    \"\"\"\n\n    _target: Type = field(default_factory=lambda: ARKitScenes)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/ARKitScenes/3dod/Validation/41069021\")\n    \"\"\"Path to ARKitScenes folder with densely extracted scenes.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    scene_scale: float = 1.0\n    \"\"\"How much to scale the region of interest by.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n    \"\"\"The method to use to center the poses.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n    train_split_fraction: float = 0.9\n    \"\"\"The fraction of images to use for training. The remaining images are for eval.\"\"\"\n    depth_unit_scale_factor: float = 1e-3\n    \"\"\"Scales the depth values to meters. Default value is 0.001 for a millimeter to meter conversion.\"\"\"\n\n\n@dataclass\nclass ARKitScenes(DataParser):\n    \"\"\"ARKitScenes DatasetParser\"\"\"\n\n    config: ARKitScenesDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        video_id = self.config.data.name\n\n        image_dir = self.config.data / f\"{video_id}_frames\" / \"lowres_wide\"\n        depth_dir = self.config.data / f\"{video_id}_frames\" / \"lowres_depth\"\n        intrinsics_dir = self.config.data / f\"{video_id}_frames\" / \"lowres_wide_intrinsics\"\n        pose_file = self.config.data / f\"{video_id}_frames\" / \"lowres_wide.traj\"\n\n        frame_ids = [x.name for x in sorted(depth_dir.iterdir())]\n        frame_ids = [x.split(\".png\")[0].split(\"_\")[1] for x in frame_ids]\n        frame_ids.sort()\n\n        poses_from_traj = {}\n        with open(pose_file, \"r\", encoding=\"utf-8\") as f:\n            traj = f.readlines()\n\n        for line in traj:\n            poses_from_traj[f\"{round(float(line.split(' ')[0]), 3):.3f}\"] = np.array(\n                traj_string_to_matrix(line)[1].tolist()\n            )\n\n        image_filenames, depth_filenames, intrinsics, poses = [], [], [], []\n        w, h, _, _, _, _ = np.loadtxt(list(sorted(intrinsics_dir.iterdir()))[0])  # Get image size from first intrinsic\n\n        for frame_id in frame_ids:\n            intrinsic = self._get_intrinsic(intrinsics_dir, frame_id, video_id)\n            frame_pose = self._get_pose(frame_id, poses_from_traj)\n\n            intrinsics.append(intrinsic)\n            image_filenames.append(image_dir / f\"{video_id}_{frame_id}.png\")\n            depth_filenames.append(depth_dir / f\"{video_id}_{frame_id}.png\")\n            poses.append(frame_pose)\n\n        # filter image_filenames and poses based on train/eval split percentage\n        num_images = len(image_filenames)\n        num_train_images = math.ceil(num_images * self.config.train_split_fraction)\n        num_eval_images = num_images - num_train_images\n        i_all = np.arange(num_images)\n        i_train = np.linspace(\n            0, num_images - 1, num_train_images, dtype=int\n        )  # equally spaced training images starting and ending at 0 and num_images-1\n        i_eval = np.setdiff1d(i_all, i_train)  # eval images are the remaining images\n        assert len(i_eval) == num_eval_images\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n\n        poses = torch.from_numpy(np.stack(poses).astype(np.float32))\n        intrinsics = torch.from_numpy(np.stack(intrinsics).astype(np.float32))\n\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses,\n            method=\"none\",\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n\n        poses[:, :3, 3] *= scale_factor\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        depth_filenames = [depth_filenames[i] for i in indices] if len(depth_filenames) > 0 else []\n        intrinsics = intrinsics[indices.tolist()]\n        poses = poses[indices.tolist()]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        cameras = Cameras(\n            fx=intrinsics[:, 0, 0],\n            fy=intrinsics[:, 1, 1],\n            cx=intrinsics[:, 0, 2],\n            cy=intrinsics[:, 1, 2],\n            height=int(h),\n            width=int(w),\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            dataparser_scale=scale_factor,\n            dataparser_transform=transform_matrix,\n            metadata={\n                \"depth_filenames\": depth_filenames if len(depth_filenames) > 0 else None,\n                \"depth_unit_scale_factor\": self.config.depth_unit_scale_factor,\n            },\n        )\n        return dataparser_outputs\n\n    @staticmethod\n    def _get_intrinsic(intrinsics_dir: Path, frame_id: str, video_id: str):\n        intrinsic_fn = intrinsics_dir / f\"{video_id}_{frame_id}.pincam\"\n\n        if not intrinsic_fn.exists():\n            intrinsic_fn = intrinsics_dir / f\"{video_id}_{float(frame_id) - 0.001:.3f}.pincam\"\n\n        if not intrinsic_fn.exists():\n            intrinsic_fn = intrinsics_dir / f\"{video_id}_{float(frame_id) + 0.001:.3f}.pincam\"\n\n        _, _, fx, fy, hw, hh = np.loadtxt(intrinsic_fn)\n        intrinsic = np.asarray([[fx, 0, hw], [0, fy, hh], [0, 0, 1]])\n        return intrinsic\n\n    @staticmethod\n    def _get_pose(frame_id: str, poses_from_traj: dict):\n        frame_pose = None\n        if str(frame_id) in poses_from_traj:\n            frame_pose = np.array(poses_from_traj[str(frame_id)])\n        else:\n            for my_key in poses_from_traj:\n                if abs(float(frame_id) - float(my_key)) < 0.005:\n                    frame_pose = np.array(poses_from_traj[str(my_key)])\n\n        assert frame_pose is not None\n        frame_pose[0:3, 1:3] *= -1\n        frame_pose = frame_pose[np.array([1, 0, 2, 3]), :]\n        frame_pose[2, :] *= -1\n        return frame_pose\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/base_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"A set of standard datasets.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nfrom abc import abstractmethod\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any, Dict, List, Literal, Optional, Type\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\nimport nerfstudio.configs.base_config as cfg\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.data.scene_box import SceneBox\n\n\n@dataclass\nclass Semantics:\n    \"\"\"Dataclass for semantic labels.\"\"\"\n\n    filenames: List[Path]\n    \"\"\"filenames to load semantic data\"\"\"\n    classes: List[str]\n    \"\"\"class labels for data\"\"\"\n    colors: Tensor\n    \"\"\"color mapping for classes\"\"\"\n    mask_classes: List[str] = field(default_factory=lambda: [])\n    \"\"\"classes to mask out from training for all modalities\"\"\"\n\n\n@dataclass\nclass DataparserOutputs:\n    \"\"\"Dataparser outputs for the which will be used by the DataManager\n    for creating RayBundle and RayGT objects.\"\"\"\n\n    image_filenames: List[Path]\n    \"\"\"Filenames for the images.\"\"\"\n    cameras: Cameras\n    \"\"\"Camera object storing collection of camera information in dataset.\"\"\"\n    alpha_color: Optional[Float[Tensor, \"3\"]] = None\n    \"\"\"Color of dataset background.\"\"\"\n    scene_box: SceneBox = field(default_factory=lambda: SceneBox(aabb=torch.tensor([[-1, -1, -1], [1, 1, 1]])))\n    \"\"\"Scene box of dataset. Used to bound the scene or provide the scene scale depending on model.\"\"\"\n    mask_filenames: Optional[List[Path]] = None\n    \"\"\"Filenames for any masks that are required\"\"\"\n    metadata: Dict[str, Any] = to_immutable_dict({})\n    \"\"\"Dictionary of any metadata that be required for the given experiment.\n    Will be processed by the InputDataset to create any additional tensors that may be required.\n    \"\"\"\n    dataparser_transform: Float[Tensor, \"3 4\"] = torch.eye(4)[:3, :]\n    \"\"\"Transform applied by the dataparser.\"\"\"\n    dataparser_scale: float = 1.0\n    \"\"\"Scale applied by the dataparser.\"\"\"\n\n    def as_dict(self) -> dict:\n        \"\"\"Returns the dataclass as a dictionary.\"\"\"\n        return vars(self)\n\n    def save_dataparser_transform(self, path: Path):\n        \"\"\"Save dataparser transform to json file. Some dataparsers will apply a transform to the poses,\n        this method allows the transform to be saved so that it can be used in other applications.\n\n        Args:\n            path: path to save transform to\n        \"\"\"\n        data = {\n            \"transform\": self.dataparser_transform.tolist(),\n            \"scale\": float(self.dataparser_scale),\n        }\n        if not path.parent.exists():\n            path.parent.mkdir(parents=True)\n        with open(path, \"w\", encoding=\"UTF-8\") as file:\n            json.dump(data, file, indent=4)\n\n    def transform_poses_to_original_space(\n        self,\n        poses: Float[Tensor, \"num_poses 3 4\"],\n        camera_convention: Literal[\"opengl\", \"opencv\"] = \"opencv\",\n    ) -> Float[Tensor, \"num_poses 3 4\"]:\n        \"\"\"\n        Transforms the poses in the transformed space back to the original world coordinate system.\n        Args:\n            poses: Poses in the transformed space\n            camera_convention: Camera system convention used for the transformed poses\n        Returns:\n            Original poses\n        \"\"\"\n        return transform_poses_to_original_space(\n            poses,\n            self.dataparser_transform,\n            self.dataparser_scale,\n            camera_convention=camera_convention,\n        )\n\n\n@dataclass\nclass DataParserConfig(cfg.InstantiateConfig):\n    \"\"\"Basic dataset config\"\"\"\n\n    _target: Type = field(default_factory=lambda: DataParser)\n    \"\"\"_target: target class to instantiate\"\"\"\n    data: Path = Path()\n    \"\"\"Directory specifying location of data.\"\"\"\n\n\n@dataclass\nclass DataParser:\n    \"\"\"A dataset.\n\n    Args:\n        config: datasetparser config containing all information needed to instantiate dataset\n\n    Attributes:\n        config: datasetparser config containing all information needed to instantiate dataset\n        includes_time: Does the dataset include time information in the camera poses.\n    \"\"\"\n\n    config: DataParserConfig\n    includes_time: bool = False\n\n    def __init__(self, config: DataParserConfig):\n        super().__init__()\n        self.config = config\n\n    @abstractmethod\n    def _generate_dataparser_outputs(self, split: str = \"train\", **kwargs: Optional[Dict]) -> DataparserOutputs:\n        \"\"\"Abstract method that returns the dataparser outputs for the given split.\n\n        Args:\n            split: Which dataset split to generate (train/test).\n            kwargs: kwargs for generating dataparser outputs.\n\n        Returns:\n            DataparserOutputs containing data for the specified dataset and split\n        \"\"\"\n\n    def get_dataparser_outputs(self, split: str = \"train\", **kwargs: Optional[Dict]) -> DataparserOutputs:\n        \"\"\"Returns the dataparser outputs for the given split.\n\n        Args:\n            split: Which dataset split to generate (train/test).\n            kwargs: kwargs for generating dataparser outputs.\n\n        Returns:\n            DataparserOutputs containing data for the specified dataset and split\n        \"\"\"\n        dataparser_outputs = self._generate_dataparser_outputs(split, **kwargs)\n        return dataparser_outputs\n\n\ndef transform_poses_to_original_space(\n    poses: Float[Tensor, \"num_poses 3 4\"],\n    applied_transform: Float[Tensor, \"3 4\"],\n    applied_scale: float,\n    camera_convention: Literal[\"opengl\", \"opencv\"] = \"opencv\",\n) -> Float[Tensor, \"num_poses 3 4\"]:\n    \"\"\"\n    Transforms the poses in the transformed space back to the original world coordinate system.\n    Args:\n        poses: Poses in the transformed space\n        applied_transform: Transform matrix applied in the data processing step\n        applied_scale: Scale used in the data processing step\n        camera_convention: Camera system convention used for the transformed poses\n    Returns:\n        Original poses\n    \"\"\"\n    output_poses = torch.cat(\n        (\n            poses,\n            torch.tensor([[[0, 0, 0, 1]]], dtype=poses.dtype, device=poses.device).repeat_interleave(len(poses), 0),\n        ),\n        1,\n    )\n    output_poses[..., :3, 3] /= applied_scale\n    inv_transform = torch.linalg.inv(\n        torch.cat(\n            (\n                applied_transform,\n                torch.tensor([[0, 0, 0, 1]], dtype=applied_transform.dtype, device=applied_transform.device),\n            ),\n            0,\n        )\n    )\n    output_poses = torch.einsum(\"ij,bjk->bik\", inv_transform, output_poses)\n    if camera_convention == \"opencv\":\n        output_poses[..., 0:3, 1:3] *= -1\n    elif camera_convention == \"opengl\":\n        pass\n    else:\n        raise ValueError(f\"Camera convention {camera_convention} is not supported.\")\n    return output_poses[:, :3]\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/blender_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for blender dataset\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Optional, Type\n\nimport imageio\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.colors import get_color\nfrom nerfstudio.utils.io import load_from_json\n\n\n@dataclass\nclass BlenderDataParserConfig(DataParserConfig):\n    \"\"\"Blender dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: Blender)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/blender/lego\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    alpha_color: Optional[str] = \"white\"\n    \"\"\"alpha color of background, when set to None, InputDataset that consumes DataparserOutputs will not attempt \n    to blend with alpha_colors using image's alpha channel data. Thus rgba image will be directly used in training. \"\"\"\n    ply_path: Optional[Path] = None\n    \"\"\"Path to PLY file to load 3D points from, defined relative to the dataset directory. This is helpful for\n    Gaussian splatting and generally unused otherwise. If `None`, points are initialized randomly.\"\"\"\n\n\n@dataclass\nclass Blender(DataParser):\n    \"\"\"Blender Dataset\n    Some of this code comes from https://github.com/yenchenlin/nerf-pytorch/blob/master/load_blender.py#L37.\n    \"\"\"\n\n    config: BlenderDataParserConfig\n\n    def __init__(self, config: BlenderDataParserConfig):\n        super().__init__(config=config)\n        self.data: Path = config.data\n        self.scale_factor: float = config.scale_factor\n        self.alpha_color = config.alpha_color\n        if self.alpha_color is not None:\n            self.alpha_color_tensor = get_color(self.alpha_color)\n        else:\n            self.alpha_color_tensor = None\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        meta = load_from_json(self.data / f\"transforms_{split}.json\")\n        image_filenames = []\n        poses = []\n        for frame in meta[\"frames\"]:\n            fname = self.data / Path(frame[\"file_path\"].replace(\"./\", \"\") + \".png\")\n            image_filenames.append(fname)\n            poses.append(np.array(frame[\"transform_matrix\"]))\n        poses = np.array(poses).astype(np.float32)\n\n        img_0 = imageio.v2.imread(image_filenames[0])\n        image_height, image_width = img_0.shape[:2]\n        camera_angle_x = float(meta[\"camera_angle_x\"])\n        focal_length = 0.5 * image_width / np.tan(0.5 * camera_angle_x)\n\n        cx = image_width / 2.0\n        cy = image_height / 2.0\n        camera_to_world = torch.from_numpy(poses[:, :3])  # camera to world transform\n\n        # in x,y,z order\n        camera_to_world[..., 3] *= self.scale_factor\n        scene_box = SceneBox(aabb=torch.tensor([[-1.5, -1.5, -1.5], [1.5, 1.5, 1.5]], dtype=torch.float32))\n\n        cameras = Cameras(\n            camera_to_worlds=camera_to_world,\n            fx=focal_length,\n            fy=focal_length,\n            cx=cx,\n            cy=cy,\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        metadata = {}\n        if self.config.ply_path is not None:\n            metadata.update(self._load_3D_points(self.config.data / self.config.ply_path))\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            alpha_color=self.alpha_color_tensor,\n            scene_box=scene_box,\n            dataparser_scale=self.scale_factor,\n            metadata=metadata,\n        )\n\n        return dataparser_outputs\n\n    def _load_3D_points(self, ply_file_path: Path):\n        import open3d as o3d  # Importing open3d is slow, so we only do it if we need it.\n\n        pcd = o3d.io.read_point_cloud(str(ply_file_path))\n\n        points3D = torch.from_numpy(np.asarray(pcd.points, dtype=np.float32) * self.config.scale_factor)\n        points3D_rgb = torch.from_numpy((np.asarray(pcd.colors) * 255).astype(np.uint8))\n\n        out = {\n            \"points3D_xyz\": points3D,\n            \"points3D_rgb\": points3D_rgb,\n        }\n        return out\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/colmap_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data parser for nerfstudio datasets.\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nimport sys\nfrom dataclasses import dataclass, field\nfrom functools import partial\nfrom pathlib import Path\nfrom typing import List, Literal, Optional, Type\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom rich.prompt import Confirm\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import CAMERA_MODEL_TO_TYPE, Cameras\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.data.utils import colmap_parsing_utils as colmap_utils\nfrom nerfstudio.data.utils.dataparsers_utils import (\n    get_train_eval_split_all,\n    get_train_eval_split_filename,\n    get_train_eval_split_fraction,\n    get_train_eval_split_interval,\n)\nfrom nerfstudio.process_data.colmap_utils import parse_colmap_camera_params\nfrom nerfstudio.utils.rich_utils import CONSOLE, status\nfrom nerfstudio.utils.scripts import run_command\n\nMAX_AUTO_RESOLUTION = 1600\n\n\n@dataclass\nclass ColmapDataParserConfig(DataParserConfig):\n    \"\"\"Nerfstudio dataset config\"\"\"\n\n    _target: Type = field(default_factory=lambda: ColmapDataParser)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path()\n    \"\"\"Directory or explicit json file path specifying location of data.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    downscale_factor: Optional[int] = None\n    \"\"\"How much to downscale images. If not set, images are chosen such that the max dimension is <1600px.\"\"\"\n    downscale_rounding_mode: Literal[\"floor\", \"round\", \"ceil\"] = \"floor\"\n    \"\"\"How to round downscale image height and Image width.\"\"\"\n    scene_scale: float = 1.0\n    \"\"\"How much to scale the region of interest by.\"\"\"\n    orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"up\"\n    \"\"\"The method to use for orientation.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n    \"\"\"The method to use to center the poses.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n    assume_colmap_world_coordinate_convention: bool = True\n    \"\"\"Colmap optimized world often have y direction of the first camera pointing towards down direction,\n    while nerfstudio world set z direction to be up direction for viewer. Therefore, we usually need to apply an extra\n    transform when orientation_method=none. This parameter has no effects if orientation_method is set other than none.\n    When this parameter is set to False, no extra transform is applied when reading data from colmap.\n    \"\"\"\n    eval_mode: Literal[\"fraction\", \"filename\", \"interval\", \"all\"] = \"interval\"\n    \"\"\"\n    The method to use for splitting the dataset into train and eval.\n    Fraction splits based on a percentage for train and the remaining for eval.\n    Filename splits based on filenames containing train/eval.\n    Interval uses every nth frame for eval (used by most academic papers, e.g. MipNerf360, GSplat).\n    All uses all the images for any split.\n    \"\"\"\n    train_split_fraction: float = 0.9\n    \"\"\"The fraction of images to use for training. The remaining images are for eval.\"\"\"\n    eval_interval: int = 8\n    \"\"\"The interval between frames to use for eval. Only used when eval_mode is eval-interval.\"\"\"\n    depth_unit_scale_factor: float = 1e-3\n    \"\"\"Scales the depth values to meters. Default value is 0.001 for a millimeter to meter conversion.\"\"\"\n\n    images_path: Path = Path(\"images\")\n    \"\"\"Path to images directory relative to the data path.\"\"\"\n    masks_path: Optional[Path] = None\n    \"\"\"Path to masks directory. If not set, masks are not loaded.\"\"\"\n    depths_path: Optional[Path] = None\n    \"\"\"Path to depth maps directory. If not set, depths are not loaded.\"\"\"\n    colmap_path: Path = Path(\"colmap/sparse/0\")\n    \"\"\"Path to the colmap reconstruction directory relative to the data path.\"\"\"\n    load_3D_points: bool = True\n    \"\"\"Whether to load the 3D points from the colmap reconstruction. This is helpful for Gaussian splatting and\n    generally unused otherwise, but it's typically harmless so we default to True.\"\"\"\n    max_2D_matches_per_3D_point: int = 0\n    \"\"\"Maximum number of 2D matches per 3D point. If set to -1, all 2D matches are loaded. If set to 0, no 2D matches are loaded.\"\"\"\n\n\nclass ColmapDataParser(DataParser):\n    \"\"\"COLMAP DatasetParser.\n    Expects a folder with the following structure:\n        images/ # folder containing images used to create the COLMAP model\n        sparse/0 # folder containing the COLMAP reconstruction (either TEXT or BINARY format)\n        masks/ # (OPTIONAL) folder containing masks for each image\n        depths/ # (OPTIONAL) folder containing depth maps for each image\n    The paths can be different and can be specified in the config. (e.g., sparse/0 -> sparse)\n    Currently, most COLMAP camera models are supported except for the FULL_OPENCV and THIN_PRISM_FISHEYE models.\n\n    The dataparser loads the downscaled images from folders with `_{downscale_factor}` suffix.\n    If these folders do not exist, the user can choose to automatically downscale the images and\n    create these folders.\n\n    The loader is compatible with the datasets processed using the ns-process-data script and\n    can be used as a drop-in replacement. It further supports datasets like Mip-NeRF 360 (although\n    in the case of Mip-NeRF 360 the downsampled images may have a different resolution because they\n    use different rounding when computing the image resolution).\n    \"\"\"\n\n    config: ColmapDataParserConfig\n\n    def __init__(self, config: ColmapDataParserConfig):\n        super().__init__(config)\n        self.config = config\n        self._downscale_factor = None\n\n    def _get_all_images_and_cameras(self, recon_dir: Path):\n        if (recon_dir / \"cameras.txt\").exists():\n            cam_id_to_camera = colmap_utils.read_cameras_text(recon_dir / \"cameras.txt\")\n            im_id_to_image = colmap_utils.read_images_text(recon_dir / \"images.txt\")\n        elif (recon_dir / \"cameras.bin\").exists():\n            cam_id_to_camera = colmap_utils.read_cameras_binary(recon_dir / \"cameras.bin\")\n            im_id_to_image = colmap_utils.read_images_binary(recon_dir / \"images.bin\")\n        else:\n            raise ValueError(f\"Could not find cameras.txt or cameras.bin in {recon_dir}\")\n\n        cameras = {}\n        frames = []\n        camera_model = None\n\n        # Parse cameras\n        for cam_id, cam_data in cam_id_to_camera.items():\n            cameras[cam_id] = parse_colmap_camera_params(cam_data)\n\n        # Parse frames\n        # we want to sort all images based on im_id\n        ordered_im_id = sorted(im_id_to_image.keys())\n        for im_id in ordered_im_id:\n            im_data = im_id_to_image[im_id]\n            # NB: COLMAP uses Eigen / scalar-first quaternions\n            # * https://colmap.github.io/format.html\n            # * https://github.com/colmap/colmap/blob/bf3e19140f491c3042bfd85b7192ef7d249808ec/src/base/pose.cc#L75\n            # the `rotation_matrix()` handles that format for us.\n            rotation = colmap_utils.qvec2rotmat(im_data.qvec)\n            translation = im_data.tvec.reshape(3, 1)\n            w2c = np.concatenate([rotation, translation], 1)\n            w2c = np.concatenate([w2c, np.array([[0, 0, 0, 1]])], 0)\n            c2w = np.linalg.inv(w2c)\n            # Convert from COLMAP's camera coordinate system (OpenCV) to ours (OpenGL)\n            c2w[0:3, 1:3] *= -1\n            if self.config.assume_colmap_world_coordinate_convention:\n                # world coordinate transform: map colmap gravity guess (-y) to nerfstudio convention (+z)\n                c2w = c2w[np.array([0, 2, 1, 3]), :]\n                c2w[2, :] *= -1\n\n            frame = {\n                \"file_path\": (self.config.data / self.config.images_path / im_data.name).as_posix(),\n                \"transform_matrix\": c2w,\n                \"colmap_im_id\": im_id,\n            }\n            frame.update(cameras[im_data.camera_id])\n            if self.config.masks_path is not None:\n                frame[\"mask_path\"] = (\n                    (self.config.data / self.config.masks_path / im_data.name).with_suffix(\".png\").as_posix()\n                )\n            if self.config.depths_path is not None:\n                frame[\"depth_path\"] = (\n                    (self.config.data / self.config.depths_path / im_data.name).with_suffix(\".png\").as_posix()\n                )\n            frames.append(frame)\n            if camera_model is not None:\n                assert camera_model == frame[\"camera_model\"], \"Multiple camera models are not supported\"\n            else:\n                camera_model = frame[\"camera_model\"]\n\n        out = {}\n        out[\"frames\"] = frames\n        if self.config.assume_colmap_world_coordinate_convention:\n            # world coordinate transform: map colmap gravity guess (-y) to nerfstudio convention (+z)\n            applied_transform = np.eye(4)[:3, :]\n            applied_transform = applied_transform[np.array([0, 2, 1]), :]\n            applied_transform[2, :] *= -1\n            out[\"applied_transform\"] = applied_transform.tolist()\n        out[\"camera_model\"] = camera_model\n        assert len(frames) > 0, \"No images found in the colmap model\"\n        return out\n\n    def _get_image_indices(self, image_filenames, split):\n        has_split_files_spec = (\n            (self.config.data / \"train_list.txt\").exists()\n            or (self.config.data / \"test_list.txt\").exists()\n            or (self.config.data / \"validation_list.txt\").exists()\n        )\n        if (self.config.data / f\"{split}_list.txt\").exists():\n            CONSOLE.log(f\"Using {split}_list.txt to get indices for split {split}.\")\n            with (self.config.data / f\"{split}_list.txt\").open(\"r\", encoding=\"utf8\") as f:\n                filenames = f.read().splitlines()\n            # Validate split first\n            split_filenames = set(self.config.data / self.config.images_path / x for x in filenames)\n            unmatched_filenames = split_filenames.difference(image_filenames)\n            if unmatched_filenames:\n                raise RuntimeError(\n                    f\"Some filenames for split {split} were not found: {set(map(str, unmatched_filenames))}.\"\n                )\n\n            indices = [i for i, path in enumerate(image_filenames) if path in split_filenames]\n            CONSOLE.log(f\"[yellow] Dataset is overriding {split}_indices to {indices}\")\n            indices = np.array(indices, dtype=np.int32)\n        elif has_split_files_spec:\n            raise RuntimeError(f\"The dataset's list of filenames for split {split} is missing.\")\n        else:\n            # find train and eval indices based on the eval_mode specified\n            if self.config.eval_mode == \"fraction\":\n                i_train, i_eval = get_train_eval_split_fraction(image_filenames, self.config.train_split_fraction)\n            elif self.config.eval_mode == \"filename\":\n                i_train, i_eval = get_train_eval_split_filename(image_filenames)\n            elif self.config.eval_mode == \"interval\":\n                i_train, i_eval = get_train_eval_split_interval(image_filenames, self.config.eval_interval)\n            elif self.config.eval_mode == \"all\":\n                CONSOLE.log(\n                    \"[yellow] Be careful with '--eval-mode=all'. If using camera optimization, the cameras may diverge in the current implementation, giving unpredictable results.\"\n                )\n                i_train, i_eval = get_train_eval_split_all(image_filenames)\n            else:\n                raise ValueError(f\"Unknown eval mode {self.config.eval_mode}\")\n\n            if split == \"train\":\n                indices = i_train\n            elif split in [\"val\", \"test\"]:\n                indices = i_eval\n            else:\n                raise ValueError(f\"Unknown dataparser split {split}\")\n        return indices\n\n    def _generate_dataparser_outputs(self, split: str = \"train\", **kwargs):\n        assert self.config.data.exists(), f\"Data directory {self.config.data} does not exist.\"\n        colmap_path = self.config.data / self.config.colmap_path\n        assert colmap_path.exists(), f\"Colmap path {colmap_path} does not exist.\"\n\n        meta = self._get_all_images_and_cameras(colmap_path)\n        camera_type = CAMERA_MODEL_TO_TYPE[meta[\"camera_model\"]]\n\n        image_filenames = []\n        mask_filenames = []\n        depth_filenames = []\n        poses = []\n\n        fx = []\n        fy = []\n        cx = []\n        cy = []\n        height = []\n        width = []\n        distort = []\n\n        for frame in meta[\"frames\"]:\n            fx.append(float(frame[\"fl_x\"]))\n            fy.append(float(frame[\"fl_y\"]))\n            cx.append(float(frame[\"cx\"]))\n            cy.append(float(frame[\"cy\"]))\n            height.append(int(frame[\"h\"]))\n            width.append(int(frame[\"w\"]))\n            if any([k in frame and float(frame[k]) != 0.0 for k in [\"k4\", \"k5\", \"k6\"]]):\n                raise ValueError(\n                    \"K4/K5/K6 is non-zero! Note that Nerfstudio camera model's K4 has different meaning than colmap \"\n                    \"OPENCV camera model K4. Nerfstudio's K4 is the 4-th order of radial distortion coefficient, while \"\n                    \"colmap/OPENCV's K4 is 4-th coefficient in fractional radial distortion model.\"\n                )\n            distort.append(\n                camera_utils.get_distortion_params(\n                    k1=float(frame[\"k1\"]) if \"k1\" in frame else 0.0,\n                    k2=float(frame[\"k2\"]) if \"k2\" in frame else 0.0,\n                    k3=float(frame[\"k3\"]) if \"k3\" in frame else 0.0,\n                    k4=float(frame[\"k4\"]) if \"k4\" in frame else 0.0,\n                    p1=float(frame[\"p1\"]) if \"p1\" in frame else 0.0,\n                    p2=float(frame[\"p2\"]) if \"p2\" in frame else 0.0,\n                )\n            )\n\n            image_filenames.append(Path(frame[\"file_path\"]))\n            poses.append(frame[\"transform_matrix\"])\n            if \"mask_path\" in frame:\n                mask_filenames.append(Path(frame[\"mask_path\"]))\n            if \"depth_path\" in frame:\n                depth_filenames.append(Path(frame[\"depth_path\"]))\n\n        assert len(mask_filenames) == 0 or (len(mask_filenames) == len(image_filenames)), \"\"\"\n        Different number of image and mask filenames.\n        You should check that mask_path is specified for every frame (or zero frames) in transforms.json.\n        \"\"\"\n        assert len(depth_filenames) == 0 or (len(depth_filenames) == len(image_filenames)), \"\"\"\n        Different number of image and depth filenames.\n        You should check that depth_file_path is specified for every frame (or zero frames) in transforms.json.\n        \"\"\"\n        poses = torch.from_numpy(np.array(poses).astype(np.float32))\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses,\n            method=self.config.orientation_method,\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n        poses[:, :3, 3] *= scale_factor\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        indices = self._get_image_indices(image_filenames, split)\n        image_filenames, mask_filenames, depth_filenames, downscale_factor = self._setup_downscale_factor(\n            image_filenames, mask_filenames, depth_filenames\n        )\n\n        image_filenames = [image_filenames[i] for i in indices]\n        mask_filenames = [mask_filenames[i] for i in indices] if len(mask_filenames) > 0 else []\n        depth_filenames = [depth_filenames[i] for i in indices] if len(depth_filenames) > 0 else []\n\n        idx_tensor = torch.tensor(indices, dtype=torch.long)\n        poses = poses[idx_tensor]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        fx = torch.tensor(fx, dtype=torch.float32)[idx_tensor]\n        fy = torch.tensor(fy, dtype=torch.float32)[idx_tensor]\n        cx = torch.tensor(cx, dtype=torch.float32)[idx_tensor]\n        cy = torch.tensor(cy, dtype=torch.float32)[idx_tensor]\n        height = torch.tensor(height, dtype=torch.int32)[idx_tensor]\n        width = torch.tensor(width, dtype=torch.int32)[idx_tensor]\n        distortion_params = torch.stack(distort, dim=0)[idx_tensor]\n\n        cameras = Cameras(\n            fx=fx,\n            fy=fy,\n            cx=cx,\n            cy=cy,\n            distortion_params=distortion_params,\n            height=height,\n            width=width,\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=camera_type,\n        )\n\n        cameras.rescale_output_resolution(\n            scaling_factor=1.0 / downscale_factor, scale_rounding_mode=self.config.downscale_rounding_mode\n        )\n\n        if \"applied_transform\" in meta:\n            applied_transform = torch.tensor(meta[\"applied_transform\"], dtype=transform_matrix.dtype)\n            transform_matrix = transform_matrix @ torch.cat(\n                [applied_transform, torch.tensor([[0, 0, 0, 1]], dtype=transform_matrix.dtype)], 0\n            )\n        if \"applied_scale\" in meta:\n            applied_scale = float(meta[\"applied_scale\"])\n            scale_factor *= applied_scale\n\n        metadata = {}\n        if self.config.load_3D_points:\n            # Load 3D points\n            metadata.update(self._load_3D_points(colmap_path, transform_matrix, scale_factor))\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if len(mask_filenames) > 0 else None,\n            dataparser_scale=scale_factor,\n            dataparser_transform=transform_matrix,\n            metadata={\n                \"depth_filenames\": depth_filenames if len(depth_filenames) > 0 else None,\n                \"depth_unit_scale_factor\": self.config.depth_unit_scale_factor,\n                **metadata,\n            },\n        )\n        return dataparser_outputs\n\n    def _load_3D_points(self, colmap_path: Path, transform_matrix: torch.Tensor, scale_factor: float):\n        if (colmap_path / \"points3D.bin\").exists():\n            colmap_points = colmap_utils.read_points3D_binary(colmap_path / \"points3D.bin\")\n        elif (colmap_path / \"points3D.txt\").exists():\n            colmap_points = colmap_utils.read_points3D_text(colmap_path / \"points3D.txt\")\n        else:\n            raise ValueError(f\"Could not find points3D.txt or points3D.bin in {colmap_path}\")\n        points3D = torch.from_numpy(np.array([p.xyz for p in colmap_points.values()], dtype=np.float32))\n        points3D = (\n            torch.cat(\n                (\n                    points3D,\n                    torch.ones_like(points3D[..., :1]),\n                ),\n                -1,\n            )\n            @ transform_matrix.T\n        )\n        points3D *= scale_factor\n\n        # Load point colours\n        points3D_rgb = torch.from_numpy(np.array([p.rgb for p in colmap_points.values()], dtype=np.uint8))\n        points3D_num_points = torch.tensor([len(p.image_ids) for p in colmap_points.values()], dtype=torch.int64)\n        out = {\n            \"points3D_xyz\": points3D,\n            \"points3D_rgb\": points3D_rgb,\n            \"points3D_error\": torch.from_numpy(np.array([p.error for p in colmap_points.values()], dtype=np.float32)),\n            \"points3D_num_points2D\": points3D_num_points,\n        }\n        if self.config.max_2D_matches_per_3D_point != 0:\n            if (colmap_path / \"images.txt\").exists():\n                im_id_to_image = colmap_utils.read_images_text(colmap_path / \"images.txt\")\n            elif (colmap_path / \"images.bin\").exists():\n                im_id_to_image = colmap_utils.read_images_binary(colmap_path / \"images.bin\")\n            else:\n                raise ValueError(f\"Could not find images.txt or images.bin in {colmap_path}\")\n            downscale_factor = self._downscale_factor\n            max_num_points = int(torch.max(points3D_num_points).item())\n            if self.config.max_2D_matches_per_3D_point > 0:\n                max_num_points = min(max_num_points, self.config.max_2D_matches_per_3D_point)\n            points3D_image_ids = []\n            points3D_image_xy = []\n            for p in colmap_points.values():\n                nids = np.array(p.image_ids, dtype=np.int64)\n                nxy_ids = np.array(p.point2D_idxs, dtype=np.int32)\n                if self.config.max_2D_matches_per_3D_point != -1:\n                    # Randomly sample 2D matches\n                    idxs = np.argsort(p.error)[: self.config.max_2D_matches_per_3D_point]\n                    nids = nids[idxs]\n                    nxy_ids = nxy_ids[idxs]\n                nxy = [im_id_to_image[im_id].xys[pt_idx] for im_id, pt_idx in zip(nids, nxy_ids)]\n                nxy = torch.from_numpy(np.stack(nxy).astype(np.float32))\n                nids = torch.from_numpy(nids)\n                assert len(nids.shape) == 1\n                assert len(nxy.shape) == 2\n                points3D_image_ids.append(\n                    torch.cat((nids, torch.full((max_num_points - len(nids),), -1, dtype=torch.int64)))\n                )\n                points3D_image_xy.append(\n                    torch.cat((nxy, torch.full((max_num_points - len(nxy), nxy.shape[-1]), 0, dtype=torch.float32)))\n                    / downscale_factor\n                )\n            out[\"points3D_image_ids\"] = torch.stack(points3D_image_ids, dim=0)\n            out[\"points3D_points2D_xy\"] = torch.stack(points3D_image_xy, dim=0)\n        return out\n\n    def _downscale_images(\n        self,\n        paths,\n        get_fname,\n        downscale_factor: int,\n        downscale_rounding_mode: str = \"floor\",\n        nearest_neighbor: bool = False,\n    ):\n        def calculate_scaled_size(original_width, original_height, downscale_factor, mode=\"floor\"):\n            if mode == \"floor\":\n                return math.floor(original_width / downscale_factor), math.floor(original_height / downscale_factor)\n            elif mode == \"round\":\n                return round(original_width / downscale_factor), round(original_height / downscale_factor)\n            elif mode == \"ceil\":\n                return math.ceil(original_width / downscale_factor), math.ceil(original_height / downscale_factor)\n            else:\n                raise ValueError(\"Invalid mode. Choose from 'floor', 'round', or 'ceil'.\")\n\n        with status(msg=\"[bold yellow]Downscaling images...\", spinner=\"growVertical\"):\n            assert downscale_factor > 1\n            assert isinstance(downscale_factor, int)\n            # Using %05d ffmpeg commands appears to be unreliable (skips images).\n            for path in paths:\n                # Compute image-wise rescaled width/height.\n                img = Image.open(path)\n                w, h = img.size\n                w_scaled, h_scaled = calculate_scaled_size(w, h, downscale_factor, downscale_rounding_mode)\n                # Downscale images using ffmpeg.\n                nn_flag = \"\" if not nearest_neighbor else \":flags=neighbor\"\n                path_out = get_fname(path)\n                path_out.parent.mkdir(parents=True, exist_ok=True)\n                ffmpeg_cmd = [\n                    f'ffmpeg -y -noautorotate -i \"{path}\" ',\n                    f\"-q:v 2 -vf scale={w_scaled}:{h_scaled}{nn_flag} \",\n                    f'\"{path_out}\"',\n                ]\n                ffmpeg_cmd = \" \".join(ffmpeg_cmd)\n                run_command(ffmpeg_cmd)\n\n        CONSOLE.log(\"[bold green]:tada: Done downscaling images.\")\n\n    def _setup_downscale_factor(\n        self, image_filenames: List[Path], mask_filenames: List[Path], depth_filenames: List[Path]\n    ):\n        \"\"\"\n        Setup the downscale factor for the dataset. This is used to downscale the images and cameras.\n        \"\"\"\n\n        def get_fname(parent: Path, filepath: Path) -> Path:\n            \"\"\"Returns transformed file name when downscale factor is applied\"\"\"\n            rel_part = filepath.relative_to(parent)\n            base_part = parent.parent / (str(parent.name) + f\"_{self._downscale_factor}\")\n            return base_part / rel_part\n\n        filepath = next(iter(image_filenames))\n        if self._downscale_factor is None:\n            if self.config.downscale_factor is None:\n                test_img = Image.open(filepath)\n                w, h = test_img.size\n                max_res = max(h, w)\n                df = 0\n                while True:\n                    if (max_res / 2 ** (df)) <= MAX_AUTO_RESOLUTION:\n                        break\n                    df += 1\n\n                self._downscale_factor = 2**df\n                CONSOLE.log(f\"Using image downscale factor of {self._downscale_factor}\")\n            else:\n                self._downscale_factor = self.config.downscale_factor\n            if self._downscale_factor > 1 and not all(\n                get_fname(self.config.data / self.config.images_path, fp).parent.exists() for fp in image_filenames\n            ):\n                # Downscaled images not found\n                # Ask if user wants to downscale the images automatically here\n                CONSOLE.print(\n                    f\"[bold red]Downscaled images do not exist for factor of {self._downscale_factor}.[/bold red]\"\n                )\n                if Confirm.ask(\n                    f\"\\nWould you like to downscale the images using '{self.config.downscale_rounding_mode}' rounding mode now?\",\n                    default=False,\n                    console=CONSOLE,\n                ):\n                    # Install the method\n                    self._downscale_images(\n                        image_filenames,\n                        partial(get_fname, self.config.data / self.config.images_path),\n                        self._downscale_factor,\n                        self.config.downscale_rounding_mode,\n                        nearest_neighbor=False,\n                    )\n                    if len(mask_filenames) > 0:\n                        assert self.config.masks_path is not None\n                        self._downscale_images(\n                            mask_filenames,\n                            partial(get_fname, self.config.data / self.config.masks_path),\n                            self._downscale_factor,\n                            self.config.downscale_rounding_mode,\n                            nearest_neighbor=True,\n                        )\n                    if len(depth_filenames) > 0:\n                        assert self.config.depths_path is not None\n                        self._downscale_images(\n                            depth_filenames,\n                            partial(get_fname, self.config.data / self.config.depths_path),\n                            self._downscale_factor,\n                            self.config.downscale_rounding_mode,\n                            nearest_neighbor=True,\n                        )\n                else:\n                    sys.exit(1)\n\n        # Return transformed filenames\n        if self._downscale_factor > 1:\n            image_filenames = [get_fname(self.config.data / self.config.images_path, fp) for fp in image_filenames]\n            if len(mask_filenames) > 0:\n                assert self.config.masks_path is not None\n                mask_filenames = [get_fname(self.config.data / self.config.masks_path, fp) for fp in mask_filenames]\n            if len(depth_filenames) > 0:\n                assert self.config.depths_path is not None\n                depth_filenames = [get_fname(self.config.data / self.config.depths_path, fp) for fp in depth_filenames]\n        assert isinstance(self._downscale_factor, int)\n        return image_filenames, mask_filenames, depth_filenames, self._downscale_factor\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/dnerf_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for blender dataset\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Type\n\nimport imageio\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.colors import get_color\nfrom nerfstudio.utils.io import load_from_json\n\n\n@dataclass\nclass DNeRFDataParserConfig(DataParserConfig):\n    \"\"\"D-NeRF dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: DNeRF)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/dnerf/lego\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    alpha_color: str = \"white\"\n    \"\"\"alpha color of background\"\"\"\n\n\n@dataclass\nclass DNeRF(DataParser):\n    \"\"\"DNeRF Dataset\"\"\"\n\n    config: DNeRFDataParserConfig\n    includes_time: bool = True\n\n    def __init__(self, config: DNeRFDataParserConfig):\n        super().__init__(config=config)\n        self.data: Path = config.data\n        self.scale_factor: float = config.scale_factor\n        self.alpha_color = config.alpha_color\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        if self.alpha_color is not None:\n            alpha_color_tensor = get_color(self.alpha_color)\n        else:\n            alpha_color_tensor = None\n\n        meta = load_from_json(self.data / f\"transforms_{split}.json\")\n        image_filenames = []\n        poses = []\n        times = []\n        for frame in meta[\"frames\"]:\n            fname = self.data / Path(frame[\"file_path\"].replace(\"./\", \"\") + \".png\")\n            image_filenames.append(fname)\n            poses.append(np.array(frame[\"transform_matrix\"]))\n            times.append(frame[\"time\"])\n        poses = np.array(poses).astype(np.float32)\n        times = torch.tensor(times, dtype=torch.float32)\n\n        img_0 = imageio.imread(image_filenames[0])\n        image_height, image_width = img_0.shape[:2]\n        camera_angle_x = float(meta[\"camera_angle_x\"])\n        focal_length = 0.5 * image_width / np.tan(0.5 * camera_angle_x)\n\n        cx = image_width / 2.0\n        cy = image_height / 2.0\n        camera_to_world = torch.from_numpy(poses[:, :3])  # camera to world transform\n\n        # in x,y,z order\n        camera_to_world[..., 3] *= self.scale_factor\n        scene_box = SceneBox(aabb=torch.tensor([[-1.5, -1.5, -1.5], [1.5, 1.5, 1.5]], dtype=torch.float32))\n\n        cameras = Cameras(\n            camera_to_worlds=camera_to_world,\n            fx=focal_length,\n            fy=focal_length,\n            cx=cx,\n            cy=cy,\n            camera_type=CameraType.PERSPECTIVE,\n            times=times,\n        )\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            alpha_color=alpha_color_tensor,\n            scene_box=scene_box,\n            dataparser_scale=self.scale_factor,\n        )\n\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/dycheck_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for DyCheck (https://arxiv.org/abs/2210.13445) dataset of `iphone` subset\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Dict, List, Tuple, Type\n\nimport cv2\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.colors import get_color\nfrom nerfstudio.utils.io import load_from_json\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef downscale(img, scale: int) -> np.ndarray:\n    \"\"\"Function from DyCheck's repo. Downscale an image.\n\n    Args:\n        img: Input image\n        scale: Factor of the scale\n\n    Returns:\n        New image\n    \"\"\"\n    if scale == 1:\n        return img\n    height, width = img.shape[:2]\n    if height % scale > 0 or width % scale > 0:\n        raise ValueError(f\"Image shape ({height},{width}) must be divisible by the\" f\" scale ({scale}).\")\n    out_height, out_width = height // scale, width // scale\n    resized = cv2.resize(img, (out_width, out_height), cv2.INTER_AREA)  # type: ignore\n    return resized\n\n\ndef upscale(img, scale: int) -> np.ndarray:\n    \"\"\"Function from DyCheck's repo. Upscale an image.\n\n    Args:\n        img: Input image\n        scale: Factor of the scale\n\n    Returns:\n        New image\n    \"\"\"\n    if scale == 1:\n        return img\n    height, width = img.shape[:2]\n    out_height, out_width = height * scale, width * scale\n    resized = cv2.resize(img, (out_width, out_height), cv2.INTER_AREA)  # type: ignore\n    return resized\n\n\ndef rescale(img, scale_factor: float, interpolation: int = cv2.INTER_AREA) -> np.ndarray:\n    \"\"\"Function from DyCheck's repo. Rescale an image.\n\n    Args:\n        img: Input image\n        scale: Factor of the scale\n        interpolation: Interpolation method in opencv\n\n    Returns:\n        New image\n    \"\"\"\n    scale_factor = float(scale_factor)\n    if scale_factor <= 0.0:\n        raise ValueError(\"scale_factor must be a non-negative number.\")\n    if scale_factor == 1.0:\n        return img\n\n    height, width = img.shape[:2]\n    if scale_factor.is_integer():\n        return upscale(img, int(scale_factor))\n\n    inv_scale = 1.0 / scale_factor\n    if inv_scale.is_integer() and (scale_factor * height).is_integer() and (scale_factor * width).is_integer():\n        return downscale(img, int(inv_scale))\n\n    print(f\"Resizing image by non-integer factor {scale_factor}, this may lead to artifacts.\")\n    height, width = img.shape[:2]\n    out_height = math.ceil(height * scale_factor)\n    out_height -= out_height % 2\n    out_width = math.ceil(width * scale_factor)\n    out_width -= out_width % 2\n\n    return cv2.resize(img, (out_width, out_height), interpolation)  # type: ignore\n\n\ndef _load_scene_info(data_dir: Path) -> Tuple[np.ndarray, float, float, float]:\n    \"\"\"Function from DyCheck's repo. Load scene info from json.\n\n    Args:\n        data_dir: data path\n\n    Returns:\n        A tuple of scene info: center, scale, near, far\n    \"\"\"\n    scene_dict = load_from_json(data_dir / \"scene.json\")\n    center = np.array(scene_dict[\"center\"], dtype=np.float32)\n    scale = scene_dict[\"scale\"]\n    near = scene_dict[\"near\"]\n    far = scene_dict[\"far\"]\n    return center, scale, near, far\n\n\ndef _load_metadata_info(data_dir: Path) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:\n    \"\"\"Function from DyCheck's repo. Load scene metadata from json.\n\n    Args:\n        data_dir: data path\n\n    Returns:\n        A tuple of scene info: frame_names_map, time_ids, camera_ids\n    \"\"\"\n    dataset_dict = load_from_json(data_dir / \"dataset.json\")\n    _frame_names = np.array(dataset_dict[\"ids\"])\n\n    metadata_dict = load_from_json(data_dir / \"metadata.json\")\n    time_ids = np.array([metadata_dict[k][\"warp_id\"] for k in _frame_names], dtype=np.uint32)\n    camera_ids = np.array([metadata_dict[k][\"camera_id\"] for k in _frame_names], dtype=np.uint32)\n\n    frame_names_map = np.zeros((time_ids.max() + 1, camera_ids.max() + 1), _frame_names.dtype)\n    for i, (t, c) in enumerate(zip(time_ids, camera_ids)):\n        frame_names_map[t, c] = _frame_names[i]\n\n    return frame_names_map, time_ids, camera_ids\n\n\ndef _rescale_depth(depth_raw: np.ndarray, cam: Dict) -> np.ndarray:\n    \"\"\"Depth rescale function from DyCheck.\n\n    Args:\n        depth: A numpy ndarray of the raw depth\n        cam: Dict of the camera\n\n    Returns:\n        A numpy ndarray of the processed depth\n    \"\"\"\n    xx, yy = np.meshgrid(np.arange(cam[\"width\"], dtype=np.float32), np.arange(cam[\"height\"], dtype=np.float32))\n    pixels = np.stack([xx, yy], axis=-1)\n    batch_shape = pixels.shape[:-1]\n    pixels = np.reshape(pixels, (-1, 2))\n    y = (pixels[..., 1] - cam[\"cy\"]) / cam[\"fy\"]\n    x = (pixels[..., 0] - cam[\"cx\"]) / cam[\"fx\"]\n    # x = (pixels[..., 0] - self.principal_point_x - y * self.skew) / self.scale_factor_x\n    # assume skew = 0\n    viewdirs = np.stack([x, y, np.ones_like(x)], axis=-1)\n    local_viewdirs = viewdirs / np.linalg.norm(viewdirs, axis=-1, keepdims=True)\n    viewdirs = (cam[\"camera_to_worlds\"][:3, :3] @ local_viewdirs[..., None])[..., 0]\n    viewdirs /= np.linalg.norm(viewdirs, axis=-1, keepdims=True)\n    viewdirs = viewdirs.reshape((*batch_shape, 3))\n    cosa = viewdirs @ (cam[\"camera_to_worlds\"][:, 2])\n    if depth_raw.ndim == cosa.ndim:\n        depth = depth_raw[..., None] / cosa[..., None]\n    else:\n        depth = depth_raw / cosa[..., None]\n    return depth\n\n\n@dataclass\nclass DycheckDataParserConfig(DataParserConfig):\n    \"\"\"Dycheck (https://arxiv.org/abs/2210.13445) dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: Dycheck)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/iphone/mochi-high-five\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    scale_factor: float = 5.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    alpha_color: str = \"white\"\n    \"\"\"alpha color of background\"\"\"\n    downscale_factor: int = 1\n    \"\"\"How much to downscale images.\"\"\"\n    scene_box_bound: float = 1.5\n    \"\"\"Boundary of scene box.\"\"\"\n\n\n@dataclass\nclass Dycheck(DataParser):\n    \"\"\"Dycheck (https://arxiv.org/abs/2210.13445) Dataset `iphone` subset\"\"\"\n\n    config: DycheckDataParserConfig\n    includes_time: bool = True\n\n    def __init__(self, config: DycheckDataParserConfig):\n        super().__init__(config=config)\n        self.data: Path = config.data\n        self.scale_factor: float = config.scale_factor\n        self.alpha_color = config.alpha_color\n        # load extra info from \"extra.json\"\n        extra_path = self.data / \"extra.json\"\n        extra_dict = load_from_json(extra_path)\n        self._factor = extra_dict[\"factor\"]\n        self._fps = extra_dict[\"fps\"]\n        self._bbox = np.array(extra_dict[\"bbox\"], dtype=np.float32)\n        self._lookat = np.array(extra_dict[\"lookat\"], dtype=np.float32)\n        self._up = np.array(extra_dict[\"up\"], dtype=np.float32)\n        self._center, self._scale, self._near, self._far = _load_scene_info(self.data)\n        self._frame_names_map, self._time_ids, self._camera_ids = _load_metadata_info(self.data)\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        if self.alpha_color is not None:\n            alpha_color_tensor = get_color(self.alpha_color)\n        else:\n            alpha_color_tensor = None\n        splits_dir = self.data / \"splits\"\n\n        # scale the scene to fill the aabb bbox\n        sf = self.config.scene_box_bound / 4 / (self._scale * self._far)\n        # CONSOLE.print(f\"scale factor changed from {self.config.scale_factor} to {sf}\")\n        self.config.scale_factor = sf\n\n        if not (splits_dir / f\"{split}.json\").exists():\n            CONSOLE.print(f\"split {split} not found, using split train\")\n            split = \"train\"\n        split_dict = load_from_json(splits_dir / f\"{split}.json\")\n        frame_names = np.array(split_dict[\"frame_names\"])\n        time_ids = np.array(split_dict[\"time_ids\"])\n        if split != \"train\":\n            CONSOLE.print(f\"split {split} is empty, using the 1st training image\")\n            split_dict = load_from_json(splits_dir / \"train.json\")\n            frame_names = np.array(split_dict[\"frame_names\"])[[0]]\n            time_ids = np.array(split_dict[\"time_ids\"])[[0]]\n\n        image_filenames, depth_filenames, cams = self.process_frames(frame_names.tolist(), time_ids)\n\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-self.config.scene_box_bound] * 3, [self.config.scene_box_bound] * 3], dtype=torch.float32\n            )\n        )\n        cam_dict = {}\n        for k in cams[0].keys():\n            cam_dict[k] = torch.stack([torch.as_tensor(c[k]) for c in cams], dim=0)\n        cameras = Cameras(camera_type=CameraType.PERSPECTIVE, **cam_dict)\n\n        scale = self._scale * self.config.scale_factor\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            alpha_color=alpha_color_tensor,\n            scene_box=scene_box,\n            metadata={\n                \"depth_filenames\": depth_filenames,\n                \"depth_unit_scale_factor\": scale,\n                \"scale\": scale,\n                \"near\": self._near * scale,\n                \"far\": self._far * scale,\n            },\n        )\n\n        return dataparser_outputs\n\n    def process_frames(self, frame_names: List[str], time_ids: np.ndarray) -> Tuple[List, List, List]:\n        \"\"\"Read cameras and filenames from the name list.\n\n        Args:\n            frame_names: list of file names.\n            time_ids: time id of each frame.\n\n        Returns:\n            A list of camera, each entry is a dict of the camera.\n        \"\"\"\n        image_filenames, depth_filenames = [], []\n        cams = []\n        for idx, frame in enumerate(frame_names):\n            image_filenames.append(self.data / f\"rgb/{self.config.downscale_factor}x/{frame}.png\")\n            depth_filenames.append(self.data / f\"processed_depth/{self.config.downscale_factor}x/{frame}.npy\")\n            cam_json = load_from_json(self.data / f\"camera/{frame}.json\")\n            c2w = torch.as_tensor(cam_json[\"orientation\"]).T\n            position = torch.as_tensor(cam_json[\"position\"])\n            position -= self._center  # some scenes look weird (wheel)\n            position *= self._scale * self.config.scale_factor\n            pose = torch.zeros([3, 4])\n            pose[:3, :3] = c2w\n            pose[:3, 3] = position\n            # from opencv coord to opengl coord (used by nerfstudio)\n            pose[0:3, 1:3] *= -1  # switch cam coord x,y\n            pose = pose[[1, 0, 2], :]  # switch world x,y\n            pose[2, :] *= -1  # invert world z\n            # for aabb bbox usage\n            pose = pose[[1, 2, 0], :]  # switch world xyz to zxy\n            cams.append(\n                {\n                    \"camera_to_worlds\": pose,\n                    \"fx\": cam_json[\"focal_length\"] / self.config.downscale_factor,\n                    \"fy\": cam_json[\"focal_length\"] * cam_json[\"pixel_aspect_ratio\"] / self.config.downscale_factor,\n                    \"cx\": cam_json[\"principal_point\"][0] / self.config.downscale_factor,\n                    \"cy\": cam_json[\"principal_point\"][1] / self.config.downscale_factor,\n                    \"height\": cam_json[\"image_size\"][1] // self.config.downscale_factor,\n                    \"width\": cam_json[\"image_size\"][0] // self.config.downscale_factor,\n                    \"times\": torch.as_tensor(time_ids[idx] / self._time_ids.max()).float(),\n                }\n            )\n\n        d = self.config.downscale_factor\n        if not image_filenames[0].exists():\n            CONSOLE.print(f\"downscale factor {d}x not exist, converting\")\n            ori_h, ori_w = cv2.imread(str(self.data / f\"rgb/1x/{frame_names[0]}.png\")).shape[:2]\n            (self.data / f\"rgb/{d}x\").mkdir(exist_ok=True)\n            h, w = ori_h // d, ori_w // d\n            for frame in frame_names:\n                cv2.imwrite(\n                    str(self.data / f\"rgb/{d}x/{frame}.png\"),\n                    cv2.resize(cv2.imread(str(self.data / f\"rgb/1x/{frame}.png\")), (w, h)),\n                )\n            CONSOLE.print(\"finished\")\n\n        if not depth_filenames[0].exists():\n            CONSOLE.print(f\"processed depth downscale factor {d}x not exist, converting\")\n            (self.data / f\"processed_depth/{d}x\").mkdir(exist_ok=True, parents=True)\n            for idx, frame in enumerate(frame_names):\n                depth = np.load(self.data / f\"depth/1x/{frame}.npy\")\n                mask = rescale((depth != 0).astype(np.uint8) * 255, 1 / d, cv2.INTER_AREA)\n                depth = rescale(depth, 1 / d, cv2.INTER_AREA)\n                depth[mask != 255] = 0\n                depth = _rescale_depth(depth, cams[idx])\n                np.save(str(self.data / f\"processed_depth/{d}x/{frame}.npy\"), depth)\n            CONSOLE.print(\"finished\")\n\n        return image_filenames, depth_filenames, cams\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/instant_ngp_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for instant ngp data\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Dict, Literal, Tuple, Type\n\nimport imageio\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.data.utils.dataparsers_utils import (\n    get_train_eval_split_all,\n    get_train_eval_split_filename,\n    get_train_eval_split_fraction,\n    get_train_eval_split_interval,\n)\nfrom nerfstudio.utils.io import load_from_json\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass InstantNGPDataParserConfig(DataParserConfig):\n    \"\"\"Instant-NGP dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: InstantNGP)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/ours/posterv2\")\n    \"\"\"Directory or explicit json file path specifying location of data.\"\"\"\n    scene_scale: float = 0.3333\n    \"\"\"How much to scale the scene.\"\"\"\n    eval_mode: Literal[\"fraction\", \"filename\", \"interval\", \"all\"] = \"fraction\"\n    \"\"\"\n    The method to use for splitting the dataset into train and eval.\n    Fraction splits based on a percentage for train and the remaining for eval.\n    Filename splits based on filenames containing train/eval.\n    Interval uses every nth frame for eval.\n    All uses all the images for any split.\n    \"\"\"\n    train_split_fraction: float = 0.9\n    \"\"\"The percentage of the dataset to use for training. Only used when eval_mode is train-split-fraction.\"\"\"\n    eval_interval: int = 8\n    \"\"\"The interval between frames to use for eval. Only used when eval_mode is eval-interval.\"\"\"\n\n\n@dataclass\nclass InstantNGP(DataParser):\n    \"\"\"Instant NGP Dataset\"\"\"\n\n    config: InstantNGPDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        if self.config.data.suffix == \".json\":\n            meta = load_from_json(self.config.data)\n            data_dir = self.config.data.parent\n        else:\n            meta = load_from_json(self.config.data / \"transforms.json\")\n            data_dir = self.config.data\n\n        image_filenames = []\n        mask_filenames = []\n        poses = []\n        num_skipped_image_filenames = 0\n        for frame in meta[\"frames\"]:\n            fname = data_dir / Path(frame[\"file_path\"])\n            # search for png file\n            if not fname.exists():\n                fname = data_dir / Path(frame[\"file_path\"] + \".png\")\n            if not fname.exists():\n                CONSOLE.log(f\"couldn't find {fname} image\")\n                num_skipped_image_filenames += 1\n            else:\n                if \"w\" not in meta:\n                    img_0 = imageio.imread(fname)\n                    h, w = img_0.shape[:2]\n                    meta[\"w\"] = w\n                    if \"h\" in meta:\n                        meta_h = meta[\"h\"]\n                        assert meta_h == h, f\"height of image dont not correspond metadata {h} != {meta_h}\"\n                    else:\n                        meta[\"h\"] = h\n                image_filenames.append(fname)\n                poses.append(np.array(frame[\"transform_matrix\"]))\n                if \"mask_path\" in frame:\n                    mask_fname = data_dir / Path(frame[\"mask_path\"])\n                    mask_filenames.append(mask_fname)\n        if num_skipped_image_filenames >= 0:\n            CONSOLE.print(f\"Skipping {num_skipped_image_filenames} files in dataset split {split}.\")\n        assert len(image_filenames) != 0, \"\"\"\n        No image files found.\n        You should check the file_paths in the transforms.json file to make sure they are correct.\n        \"\"\"\n        poses = np.array(poses).astype(np.float32)\n        poses[:, :3, 3] *= self.config.scene_scale\n\n        # find train and eval indices based on the eval_mode specified\n        if self.config.eval_mode == \"fraction\":\n            i_train, i_eval = get_train_eval_split_fraction(image_filenames, self.config.train_split_fraction)\n        elif self.config.eval_mode == \"filename\":\n            i_train, i_eval = get_train_eval_split_filename(image_filenames)\n        elif self.config.eval_mode == \"interval\":\n            i_train, i_eval = get_train_eval_split_interval(image_filenames, self.config.eval_interval)\n        elif self.config.eval_mode == \"all\":\n            CONSOLE.log(\n                \"[yellow] Be careful with '--eval-mode=all'. If using camera optimization, the cameras may diverge in the current implementation, giving unpredictable results.\"\n            )\n            i_train, i_eval = get_train_eval_split_all(image_filenames)\n        else:\n            raise ValueError(f\"Unknown eval mode {self.config.eval_mode}\")\n\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        mask_filenames = [mask_filenames[i] for i in indices] if len(mask_filenames) > 0 else []\n\n        idx_tensor = torch.tensor(indices, dtype=torch.long)\n        poses = poses[idx_tensor]\n\n        camera_to_world = torch.from_numpy(poses[:, :3])  # camera to world transform\n\n        distortion_params = camera_utils.get_distortion_params(\n            k1=float(meta.get(\"k1\", 0)),\n            k2=float(meta.get(\"k2\", 0)),\n            k3=float(meta.get(\"k3\", 0)),\n            k4=float(meta.get(\"k4\", 0)),\n            p1=float(meta.get(\"p1\", 0)),\n            p2=float(meta.get(\"p2\", 0)),\n        )\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = 0.5 * meta.get(\"aabb_scale\", 1)\n\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        fl_x, fl_y = InstantNGP.get_focal_lengths(meta)\n\n        w, h = meta[\"w\"], meta[\"h\"]\n\n        camera_type = CameraType.PERSPECTIVE\n        if meta.get(\"is_fisheye\", False):\n            camera_type = CameraType.FISHEYE\n\n        cameras = Cameras(\n            fx=float(fl_x),\n            fy=float(fl_y),\n            cx=float(meta.get(\"cx\", 0.5 * w)),\n            cy=float(meta.get(\"cy\", 0.5 * h)),\n            distortion_params=distortion_params,\n            height=int(h),\n            width=int(w),\n            camera_to_worlds=camera_to_world,\n            camera_type=camera_type,\n        )\n\n        # TODO(ethan): add alpha background color\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if len(mask_filenames) > 0 else None,\n            dataparser_scale=self.config.scene_scale,\n        )\n\n        return dataparser_outputs\n\n    @classmethod\n    def get_focal_lengths(cls, meta: Dict) -> Tuple[float, float]:\n        \"\"\"Reads or computes the focal length from transforms dict.\n        Args:\n            meta: metadata from transforms.json file.\n        Returns:\n            Focal lengths in the x and y directions. Error is raised if these cannot be calculated.\n        \"\"\"\n        fl_x, fl_y = 0, 0\n\n        def fov_to_focal_length(rad, res):\n            return 0.5 * res / np.tan(0.5 * rad)\n\n        if \"fl_x\" in meta:\n            fl_x = meta[\"fl_x\"]\n        elif \"x_fov\" in meta:\n            fl_x = fov_to_focal_length(np.deg2rad(meta[\"x_fov\"]), meta[\"w\"])\n        elif \"camera_angle_x\" in meta:\n            fl_x = fov_to_focal_length(meta[\"camera_angle_x\"], meta[\"w\"])\n\n        if \"camera_angle_y\" not in meta or \"y_fov\" not in meta:\n            fl_y = fl_x\n        else:\n            if \"fl_y\" in meta:\n                fl_y = meta[\"fl_y\"]\n            elif \"y_fov\" in meta:\n                fl_y = fov_to_focal_length(np.deg2rad(meta[\"y_fov\"]), meta[\"h\"])\n            elif \"camera_angle_y\" in meta:\n                fl_y = fov_to_focal_length(meta[\"camera_angle_y\"], meta[\"h\"])\n\n        if fl_x == 0 or fl_y == 0:\n            raise AttributeError(\"Focal length cannot be calculated from transforms.json (missing fields).\")\n\n        return (fl_x, fl_y)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/minimal_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nData parser for pre-prepared datasets for all cameras, with no additional processing needed\nOptional fields - semantics, mask_filenames, cameras.distortion_params, cameras.times\n\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Type\n\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs, Semantics\nfrom nerfstudio.data.scene_box import SceneBox\n\n\n@dataclass\nclass MinimalDataParserConfig(DataParserConfig):\n    \"\"\"Minimal dataset config\"\"\"\n\n    _target: Type = field(default_factory=lambda: MinimalDataParser)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"/home/nikhil/nerfstudio-main/tests/data/lego_test/minimal_parser\")\n\n\n@dataclass\nclass MinimalDataParser(DataParser):\n    \"\"\"Minimal DatasetParser\"\"\"\n\n    config: MinimalDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        filepath = self.config.data / f\"{split}.npz\"\n        data = np.load(filepath, allow_pickle=True)\n\n        image_filenames = [filepath.parent / path for path in data[\"image_filenames\"].tolist()]\n        mask_filenames = None\n        if \"mask_filenames\" in data.keys():\n            mask_filenames = [filepath.parent / path for path in data[\"mask_filenames\"].tolist()]\n\n        if \"semantics\" in data.keys():\n            semantics = data[\"semantics\"].item()\n            metadata = {\n                \"semantics\": Semantics(\n                    filenames=[filepath.parent / path for path in semantics[\"filenames\"].tolist()],\n                    classes=semantics[\"classes\"].tolist(),\n                    colors=torch.from_numpy(semantics[\"colors\"]),\n                    mask_classes=semantics[\"mask_classes\"].tolist(),\n                )\n            }\n        else:\n            metadata = {}\n\n        scene_box_aabb = torch.from_numpy(data[\"scene_box\"])\n        scene_box = SceneBox(aabb=scene_box_aabb)\n\n        camera_np = data[\"cameras\"].item()\n        distortion_params = None\n        if \"distortion_params\" in camera_np.keys():\n            distortion_params = torch.from_numpy(camera_np[\"distortion_params\"])\n        cameras = Cameras(\n            fx=torch.from_numpy(camera_np[\"fx\"]),\n            fy=torch.from_numpy(camera_np[\"fy\"]),\n            cx=torch.from_numpy(camera_np[\"cx\"]),\n            cy=torch.from_numpy(camera_np[\"cy\"]),\n            distortion_params=distortion_params,\n            height=torch.from_numpy(camera_np[\"height\"]),\n            width=torch.from_numpy(camera_np[\"width\"]),\n            camera_to_worlds=torch.from_numpy(camera_np[\"camera_to_worlds\"])[:, :3, :4],\n            camera_type=torch.from_numpy(camera_np[\"camera_type\"]),\n            times=torch.from_numpy(camera_np[\"times\"]) if \"times\" in camera_np.keys() else None,\n        )\n\n        applied_scale = 1.0\n        applied_transform = torch.eye(4, dtype=torch.float32)[:3, :]\n        if \"applied_scale\" in data.keys():\n            applied_scale = float(data[\"applied_scale\"])\n        if \"applied_transform\" in data.keys():\n            applied_transform = data[\"applied_transform\"].astype(np.float32)\n            assert applied_transform.shape == (3, 4)\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames,\n            dataparser_transform=applied_transform,\n            dataparser_scale=applied_scale,\n            metadata=metadata,\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/nerfosr_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data parser for NeRF-OSR datasets\n\nPresented in the paper: https://4dqv.mpi-inf.mpg.de/NeRF-OSR/\n\n\"\"\"\n\nfrom __future__ import annotations\n\nimport glob\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import List, Literal, Tuple, Type\n\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\n\n\ndef _find_files(directory: str, exts: List[str]):\n    \"\"\"Find all files in a directory that have a certain file extension.\n\n    Args:\n        directory : The directory to search for files.\n        exts :  A list of file extensions to search for. Each file extension should be in the form '*.ext'.\n\n    Returns:\n        A list of file paths for all the files that were found. The list is sorted alphabetically.\n    \"\"\"\n    if os.path.isdir(directory):\n        # types should be ['*.png', '*.jpg', '*.JPG', '*.PNG']\n        files_grabbed = []\n        for ext in exts:\n            files_grabbed.extend(glob.glob(os.path.join(directory, ext)))\n        if len(files_grabbed) > 0:\n            files_grabbed = sorted(files_grabbed)\n        return files_grabbed\n    return []\n\n\ndef _parse_osm_txt(filename: str):\n    \"\"\"Parse a text file containing numbers and return a 4x4 numpy array of float32 values.\n\n    Args:\n        filename : a file containing numbers in a 4x4 matrix.\n\n    Returns:\n        A numpy array of shape [4, 4] containing the numbers from the file.\n    \"\"\"\n    assert os.path.isfile(filename)\n    with open(filename, encoding=\"UTF-8\") as f:\n        nums = f.read().split()\n    return np.array([float(x) for x in nums]).reshape([4, 4]).astype(np.float32)\n\n\ndef get_camera_params(\n    scene_dir: str, split: Literal[\"train\", \"validation\", \"test\"]\n) -> Tuple[torch.Tensor, torch.Tensor, int]:\n    \"\"\"Load camera intrinsic and extrinsic parameters for a given scene split.\n\n    Args\"\n      scene_dir : The directory containing the scene data.\n      split : The split for which to load the camera parameters.\n\n    Returns\n        A tuple containing the intrinsic parameters (as a torch.Tensor of shape [N, 4, 4]),\n        the camera-to-world matrices (as a torch.Tensor of shape [N, 4, 4]), and the number of cameras (N).\n    \"\"\"\n    split_dir = f\"{scene_dir}/{split}\"\n\n    # camera parameters files\n    intrinsics_files = _find_files(f\"{split_dir}/intrinsics\", exts=[\"*.txt\"])\n    pose_files = _find_files(f\"{split_dir}/pose\", exts=[\"*.txt\"])\n\n    num_cams = len(pose_files)\n\n    intrinsics = []\n    camera_to_worlds = []\n    for i in range(num_cams):\n        intrinsics.append(_parse_osm_txt(intrinsics_files[i]))\n\n        pose = _parse_osm_txt(pose_files[i])\n\n        # convert from COLMAP/OpenCV to nerfstudio camera (OpenGL/Blender)\n        pose[0:3, 1:3] *= -1\n\n        camera_to_worlds.append(pose)\n\n    intrinsics = torch.from_numpy(np.stack(intrinsics).astype(np.float32))  # [N, 4, 4]\n    camera_to_worlds = torch.from_numpy(np.stack(camera_to_worlds).astype(np.float32))  # [N, 4, 4]\n\n    return intrinsics, camera_to_worlds, num_cams\n\n\n@dataclass\nclass NeRFOSRDataParserConfig(DataParserConfig):\n    \"\"\"Nerfstudio dataset config\"\"\"\n\n    _target: Type = field(default_factory=lambda: NeRFOSR)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/NeRF-OSR/Data/\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    scene: str = \"stjacob\"\n    \"\"\"Which scene to load\"\"\"\n    scene_scale: float = 1.0\n    \"\"\"How much to scale the region of interest by.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    use_masks: bool = False\n    \"\"\"Whether to use masks.\"\"\"\n    orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"vertical\"\n    \"\"\"The method to use for orientation.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"focus\"\n    \"\"\"The method to use for centering.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n\n\n@dataclass\nclass NeRFOSR(DataParser):\n    \"\"\"NeRFOSR Dataparser\n    Presented in the paper: https://4dqv.mpi-inf.mpg.de/NeRF-OSR/\n\n    Some of this code comes from https://github.com/r00tman/NeRF-OSR/blob/main/data_loader_split.py\n\n    Source data convention is:\n      camera coordinate system: x-->right, y-->down, z-->scene (opencv/colmap convention)\n      poses is camera-to-world\n      masks are 0 for dynamic content, 255 for static content\n    \"\"\"\n\n    config: NeRFOSRDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        data = self.config.data\n        scene = self.config.scene\n        split = \"validation\" if split == \"val\" else split\n\n        if scene == \"trevi\":\n            scene_dir = f\"{data}/{scene}/final_clean\"\n            split_dir = f\"{data}/{scene}/final_clean/{split}\"\n        else:\n            scene_dir = f\"{data}/{scene}/final\"\n            split_dir = f\"{data}/{scene}/final/{split}\"\n\n        # get all split cam params\n        intrinsics_train, camera_to_worlds_train, n_train = get_camera_params(scene_dir, \"train\")\n        intrinsics_val, camera_to_worlds_val, n_val = get_camera_params(scene_dir, \"validation\")\n        intrinsics_test, camera_to_worlds_test, _ = get_camera_params(scene_dir, \"test\")\n\n        # combine all cam params\n        intrinsics = torch.cat([intrinsics_train, intrinsics_val, intrinsics_test], dim=0)\n        camera_to_worlds = torch.cat([camera_to_worlds_train, camera_to_worlds_val, camera_to_worlds_test], dim=0)\n\n        camera_to_worlds, _ = camera_utils.auto_orient_and_center_poses(\n            camera_to_worlds,\n            method=self.config.orientation_method,\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= torch.max(torch.abs(camera_to_worlds[:, :3, 3]))\n\n        camera_to_worlds[:, :3, 3] *= scale_factor * self.config.scale_factor\n\n        if split == \"train\":\n            camera_to_worlds = camera_to_worlds[:n_train]\n            intrinsics = intrinsics[:n_train]\n        elif split == \"validation\":\n            camera_to_worlds = camera_to_worlds[n_train : n_train + n_val]\n            intrinsics = intrinsics[n_train : n_train + n_val]\n        elif split == \"test\":\n            camera_to_worlds = camera_to_worlds[n_train + n_val :]\n            intrinsics = intrinsics[n_train + n_val :]\n\n        cameras = Cameras(\n            camera_to_worlds=camera_to_worlds[:, :3, :4],\n            fx=intrinsics[:, 0, 0],\n            fy=intrinsics[:, 1, 1],\n            cx=intrinsics[:, 0, 2],\n            cy=intrinsics[:, 1, 2],\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        # --- images ---\n        image_filenames = _find_files(f\"{split_dir}/rgb\", exts=[\"*.png\", \"*.jpg\", \"*.JPG\", \"*.PNG\"])\n\n        # --- masks ---\n        mask_filenames = []\n        if self.config.use_masks:\n            mask_filenames = _find_files(f\"{split_dir}/mask\", exts=[\"*.png\", \"*.jpg\", \"*.JPG\", \"*.PNG\"])\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if len(mask_filenames) > 0 else None,\n            dataparser_scale=self.config.scale_factor,\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/nerfstudio_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data parser for nerfstudio datasets.\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Optional, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom PIL import Image\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import CAMERA_MODEL_TO_TYPE, Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.data.utils.dataparsers_utils import (\n    get_train_eval_split_all,\n    get_train_eval_split_filename,\n    get_train_eval_split_fraction,\n    get_train_eval_split_interval,\n)\nfrom nerfstudio.utils.io import load_from_json\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nMAX_AUTO_RESOLUTION = 1600\n\n\n#### THEIR DEFAULT VALUES....\n# @dataclass\n# class NerfstudioDataParserConfig(DataParserConfig):\n#     \"\"\"Nerfstudio dataset config\"\"\"\n\n#     _target: Type = field(default_factory=lambda: Nerfstudio)\n#     \"\"\"target class to instantiate\"\"\"\n#     data: Path = Path()\n#     \"\"\"Directory or explicit json file path specifying location of data.\"\"\"\n#     scale_factor: float = 1.0\n#     \"\"\"How much to scale the camera origins by.\"\"\"\n#     downscale_factor: Optional[int] = None\n#     \"\"\"How much to downscale images. If not set, images are chosen such that the max dimension is <1600px.\"\"\"\n#     scene_scale: float = 1.0\n#     \"\"\"How much to scale the region of interest by.\"\"\"\n#     orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"up\"\n#     \"\"\"The method to use for orientation.\"\"\"\n#     center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n#     \"\"\"The method to use to center the poses.\"\"\"\n#     auto_scale_poses: bool = True\n#     \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n#     eval_mode: Literal[\"fraction\", \"filename\", \"interval\", \"all\"] = \"fraction\"\n#     \"\"\"\n#     The method to use for splitting the dataset into train and eval.\n#     Fraction splits based on a percentage for train and the remaining for eval.\n#     Filename splits based on filenames containing train/eval.\n#     Interval uses every nth frame for eval.\n#     All uses all the images for any split.\n#     \"\"\"\n#     train_split_fraction: float = 0.9\n#     \"\"\"The percentage of the dataset to use for training. Only used when eval_mode is train-split-fraction.\"\"\"\n#     eval_interval: int = 8\n#     \"\"\"The interval between frames to use for eval. Only used when eval_mode is eval-interval.\"\"\"\n#     depth_unit_scale_factor: float = 1e-3\n#     \"\"\"Scales the depth values to meters. Default value is 0.001 for a millimeter to meter conversion.\"\"\"\n#     mask_color: Optional[Tuple[float, float, float]] = None\n#     \"\"\"Replace the unknown pixels with this color. Relevant if you have a mask but still sample everywhere.\"\"\"\n#     load_3D_points: bool = False\n#     \"\"\"Whether to load the 3D points from the colmap reconstruction.\"\"\"\n\n\n@dataclass\nclass NerfstudioDataParserConfig(DataParserConfig):\n    _target: Type = field(default_factory=lambda: Nerfstudio)\n    data: Path = Path()  # Keep as is - you'll specify this at runtime\n    \n    # Camera scaling parameters\n    scale_factor: float = 1.0  # Keep at 1.0 since your data is already properly scaled\n    auto_scale_poses: bool = False  # Disable auto-scaling to preserve your camera positions\n    \n    # Scene parameters\n    scene_scale: float = 2.0  # Increase to 2.0 to ensure cameras at radius 1.8 are within the scene box\n    \n    # Orientation and centering\n    orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"none\"  # Disable orientation to preserve your setup\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"none\"  # Disable centering since your data is already centered\n    \n    # Evaluation settings\n    eval_mode: Literal[\"fraction\", \"filename\", \"interval\", \"all\"] = \"interval\"  # \"interval\" is common for synthetic data\n    eval_interval: int = 8  # Every 8th frame for evaluation\n    \n    # Other parameters\n    downscale_factor: Optional[int] = None  # Keep as is or set explicitly if needed\n    train_split_fraction: float = 0.9  # Only relevant if using \"fraction\" eval_mode\n    ### depth doesn't matter because we wont' have depth_filenames\n    depth_unit_scale_factor: float = 1.0  # Set to 1.0 if your depth values are already in the desired units\n    mask_color: Optional[Tuple[float, float, float]] = None  # Keep as is\n    load_3D_points: bool = False  # Keep as is unless you have COLMAP points\n\n\n\n@dataclass\nclass Nerfstudio(DataParser):\n    \"\"\"Nerfstudio DatasetParser\"\"\"\n\n    config: NerfstudioDataParserConfig\n    downscale_factor: Optional[int] = None\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n\n        assert self.config.data.exists(), f\"Data directory {self.config.data} does not exist.\"\n\n        if self.config.data.suffix == \".json\":\n            meta = load_from_json(self.config.data)\n            data_dir = self.config.data.parent\n        else:\n            meta = load_from_json(self.config.data / \"transforms.json\")\n            data_dir = self.config.data\n\n        image_filenames = []\n        mask_filenames = []\n        depth_filenames = []\n        poses = []\n\n        fx_fixed = \"fl_x\" in meta\n        fy_fixed = \"fl_y\" in meta\n        cx_fixed = \"cx\" in meta\n        cy_fixed = \"cy\" in meta\n        height_fixed = \"h\" in meta\n        width_fixed = \"w\" in meta\n        distort_fixed = False\n        for distort_key in [\"k1\", \"k2\", \"k3\", \"p1\", \"p2\", \"distortion_params\"]:\n            if distort_key in meta:\n                distort_fixed = True\n                break\n        fisheye_crop_radius = meta.get(\"fisheye_crop_radius\", None)\n        fx = []\n        fy = []\n        cx = []\n        cy = []\n        height = []\n        width = []\n        distort = []\n\n        # sort the frames by fname\n        fnames = []\n        for frame in meta[\"frames\"]:\n            filepath = Path(frame[\"file_path\"])\n            fname = self._get_fname(filepath, data_dir)\n            fnames.append(fname)\n        inds = np.argsort(fnames)\n        frames = [meta[\"frames\"][ind] for ind in inds]\n\n        for frame in frames:\n            filepath = Path(frame[\"file_path\"])\n            fname = self._get_fname(filepath, data_dir)\n\n            if not fx_fixed:\n                assert \"fl_x\" in frame, \"fx not specified in frame\"\n                fx.append(float(frame[\"fl_x\"]))\n            if not fy_fixed:\n                assert \"fl_y\" in frame, \"fy not specified in frame\"\n                fy.append(float(frame[\"fl_y\"]))\n            if not cx_fixed:\n                assert \"cx\" in frame, \"cx not specified in frame\"\n                cx.append(float(frame[\"cx\"]))\n            if not cy_fixed:\n                assert \"cy\" in frame, \"cy not specified in frame\"\n                cy.append(float(frame[\"cy\"]))\n            if not height_fixed:\n                assert \"h\" in frame, \"height not specified in frame\"\n                height.append(int(frame[\"h\"]))\n            if not width_fixed:\n                assert \"w\" in frame, \"width not specified in frame\"\n                width.append(int(frame[\"w\"]))\n            if not distort_fixed:\n                distort.append(\n                    torch.tensor(frame[\"distortion_params\"], dtype=torch.float32)\n                    if \"distortion_params\" in frame\n                    else camera_utils.get_distortion_params(\n                        k1=float(frame[\"k1\"]) if \"k1\" in frame else 0.0,\n                        k2=float(frame[\"k2\"]) if \"k2\" in frame else 0.0,\n                        k3=float(frame[\"k3\"]) if \"k3\" in frame else 0.0,\n                        k4=float(frame[\"k4\"]) if \"k4\" in frame else 0.0,\n                        p1=float(frame[\"p1\"]) if \"p1\" in frame else 0.0,\n                        p2=float(frame[\"p2\"]) if \"p2\" in frame else 0.0,\n                    )\n                )\n\n            image_filenames.append(fname)\n            poses.append(np.array(frame[\"transform_matrix\"]))\n            if \"mask_path\" in frame:\n                mask_filepath = Path(frame[\"mask_path\"])\n                mask_fname = self._get_fname(\n                    mask_filepath,\n                    data_dir,\n                    downsample_folder_prefix=\"masks_\",\n                )\n                mask_filenames.append(mask_fname)\n\n            if \"depth_file_path\" in frame:\n                depth_filepath = Path(frame[\"depth_file_path\"])\n                depth_fname = self._get_fname(depth_filepath, data_dir, downsample_folder_prefix=\"depths_\")\n                depth_filenames.append(depth_fname)\n\n        assert len(mask_filenames) == 0 or (len(mask_filenames) == len(image_filenames)), \"\"\"\n        Different number of image and mask filenames.\n        You should check that mask_path is specified for every frame (or zero frames) in transforms.json.\n        \"\"\"\n        assert len(depth_filenames) == 0 or (len(depth_filenames) == len(image_filenames)), \"\"\"\n        Different number of image and depth filenames.\n        You should check that depth_file_path is specified for every frame (or zero frames) in transforms.json.\n        \"\"\"\n\n        has_split_files_spec = any(f\"{split}_filenames\" in meta for split in (\"train\", \"val\", \"test\"))\n        if f\"{split}_filenames\" in meta:\n            # Validate split first\n            split_filenames = set(self._get_fname(Path(x), data_dir) for x in meta[f\"{split}_filenames\"])\n            unmatched_filenames = split_filenames.difference(image_filenames)\n            if unmatched_filenames:\n                raise RuntimeError(f\"Some filenames for split {split} were not found: {unmatched_filenames}.\")\n\n            indices = [i for i, path in enumerate(image_filenames) if path in split_filenames]\n            CONSOLE.log(f\"[yellow] Dataset is overriding {split}_indices to {indices}\")\n            indices = np.array(indices, dtype=np.int32)\n        elif has_split_files_spec:\n            raise RuntimeError(f\"The dataset's list of filenames for split {split} is missing.\")\n        else:\n            # find train and eval indices based on the eval_mode specified\n            if self.config.eval_mode == \"fraction\":\n                i_train, i_eval = get_train_eval_split_fraction(image_filenames, self.config.train_split_fraction)\n            elif self.config.eval_mode == \"filename\":\n                i_train, i_eval = get_train_eval_split_filename(image_filenames)\n            elif self.config.eval_mode == \"interval\":\n                i_train, i_eval = get_train_eval_split_interval(image_filenames, self.config.eval_interval)\n            elif self.config.eval_mode == \"all\":\n                CONSOLE.log(\n                    \"[yellow] Be careful with '--eval-mode=all'. If using camera optimization, the cameras may diverge in the current implementation, giving unpredictable results.\"\n                )\n                i_train, i_eval = get_train_eval_split_all(image_filenames)\n            else:\n                raise ValueError(f\"Unknown eval mode {self.config.eval_mode}\")\n\n            if split == \"train\":\n                indices = i_train\n            elif split in [\"val\", \"test\"]:\n                indices = i_eval\n            else:\n                raise ValueError(f\"Unknown dataparser split {split}\")\n\n        if \"orientation_override\" in meta:\n            orientation_method = meta[\"orientation_override\"]\n            CONSOLE.log(f\"[yellow] Dataset is overriding orientation method to {orientation_method}\")\n        else:\n            orientation_method = self.config.orientation_method\n\n        poses = torch.from_numpy(np.array(poses).astype(np.float32))\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses,\n            method=orientation_method,\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n\n        poses[:, :3, 3] *= scale_factor\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        mask_filenames = [mask_filenames[i] for i in indices] if len(mask_filenames) > 0 else []\n        depth_filenames = [depth_filenames[i] for i in indices] if len(depth_filenames) > 0 else []\n\n        idx_tensor = torch.tensor(indices, dtype=torch.long)\n        poses = poses[idx_tensor]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        if \"camera_model\" in meta:\n            camera_type = CAMERA_MODEL_TO_TYPE[meta[\"camera_model\"]]\n        else:\n            camera_type = CameraType.PERSPECTIVE\n\n        fx = float(meta[\"fl_x\"]) if fx_fixed else torch.tensor(fx, dtype=torch.float32)[idx_tensor]\n        fy = float(meta[\"fl_y\"]) if fy_fixed else torch.tensor(fy, dtype=torch.float32)[idx_tensor]\n        cx = float(meta[\"cx\"]) if cx_fixed else torch.tensor(cx, dtype=torch.float32)[idx_tensor]\n        cy = float(meta[\"cy\"]) if cy_fixed else torch.tensor(cy, dtype=torch.float32)[idx_tensor]\n        height = int(meta[\"h\"]) if height_fixed else torch.tensor(height, dtype=torch.int32)[idx_tensor]\n        width = int(meta[\"w\"]) if width_fixed else torch.tensor(width, dtype=torch.int32)[idx_tensor]\n        if distort_fixed:\n            distortion_params = (\n                torch.tensor(meta[\"distortion_params\"], dtype=torch.float32)\n                if \"distortion_params\" in meta\n                else camera_utils.get_distortion_params(\n                    k1=float(meta[\"k1\"]) if \"k1\" in meta else 0.0,\n                    k2=float(meta[\"k2\"]) if \"k2\" in meta else 0.0,\n                    k3=float(meta[\"k3\"]) if \"k3\" in meta else 0.0,\n                    k4=float(meta[\"k4\"]) if \"k4\" in meta else 0.0,\n                    p1=float(meta[\"p1\"]) if \"p1\" in meta else 0.0,\n                    p2=float(meta[\"p2\"]) if \"p2\" in meta else 0.0,\n                )\n            )\n        else:\n            distortion_params = torch.stack(distort, dim=0)[idx_tensor]\n\n        # Only add fisheye crop radius parameter if the images are actually fisheye, to allow the same config to be used\n        # for both fisheye and non-fisheye datasets.\n        metadata = {}\n        if (camera_type in [CameraType.FISHEYE, CameraType.FISHEYE624]) and (fisheye_crop_radius is not None):\n            metadata[\"fisheye_crop_radius\"] = fisheye_crop_radius\n\n        cameras = Cameras(\n            fx=fx,\n            fy=fy,\n            cx=cx,\n            cy=cy,\n            distortion_params=distortion_params,\n            height=height,\n            width=width,\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=camera_type,\n            metadata=metadata,\n        )\n\n        assert self.downscale_factor is not None\n        cameras.rescale_output_resolution(scaling_factor=1.0 / self.downscale_factor)\n\n        # The naming is somewhat confusing, but:\n        # - transform_matrix contains the transformation to dataparser output coordinates from saved coordinates.\n        # - dataparser_transform_matrix contains the transformation to dataparser output coordinates from original data coordinates.\n        # - applied_transform contains the transformation to saved coordinates from original data coordinates.\n        applied_transform = None\n        colmap_path = self.config.data / \"colmap/sparse/0\"\n        if \"applied_transform\" in meta:\n            applied_transform = torch.tensor(meta[\"applied_transform\"], dtype=transform_matrix.dtype)\n        elif colmap_path.exists():\n            # For converting from colmap, this was the effective value of applied_transform that was being\n            # used before we added the applied_transform field to the output dataformat.\n            meta[\"applied_transform\"] = [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, -1, 0]]\n            applied_transform = torch.tensor(meta[\"applied_transform\"], dtype=transform_matrix.dtype)\n\n        if applied_transform is not None:\n            dataparser_transform_matrix = transform_matrix @ torch.cat(\n                [applied_transform, torch.tensor([[0, 0, 0, 1]], dtype=transform_matrix.dtype)], 0\n            )\n        else:\n            dataparser_transform_matrix = transform_matrix\n\n        if \"applied_scale\" in meta:\n            applied_scale = float(meta[\"applied_scale\"])\n            scale_factor *= applied_scale\n\n        # reinitialize metadata for dataparser_outputs\n        metadata = {}\n\n        # _generate_dataparser_outputs might be called more than once so we check if we already loaded the point cloud\n        try:\n            self.prompted_user\n        except AttributeError:\n            self.prompted_user = False\n\n        # Load 3D points\n        if self.config.load_3D_points:\n            if \"ply_file_path\" in meta:\n                ply_file_path = data_dir / meta[\"ply_file_path\"]\n\n            elif colmap_path.exists():\n                from rich.prompt import Confirm\n\n                # check if user wants to make a point cloud from colmap points\n                if not self.prompted_user:\n                    self.create_pc = Confirm.ask(\n                        \"load_3D_points is true, but the dataset was processed with an outdated ns-process-data that didn't convert colmap points to .ply! Update the colmap dataset automatically?\"\n                    )\n\n                if self.create_pc:\n                    import json\n\n                    from nerfstudio.process_data.colmap_utils import create_ply_from_colmap\n\n                    with open(self.config.data / \"transforms.json\") as f:\n                        transforms = json.load(f)\n\n                    # Update dataset if missing the applied_transform field.\n                    if \"applied_transform\" not in transforms:\n                        transforms[\"applied_transform\"] = meta[\"applied_transform\"]\n\n                    ply_filename = \"sparse_pc.ply\"\n                    create_ply_from_colmap(\n                        filename=ply_filename,\n                        recon_dir=colmap_path,\n                        output_dir=self.config.data,\n                        applied_transform=applied_transform,\n                    )\n                    ply_file_path = data_dir / ply_filename\n                    transforms[\"ply_file_path\"] = ply_filename\n\n                    # This was the applied_transform value\n\n                    with open(self.config.data / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n                        json.dump(transforms, f, indent=4)\n                else:\n                    ply_file_path = None\n            else:\n                if not self.prompted_user:\n                    CONSOLE.print(\n                        \"[bold yellow]Warning: load_3D_points set to true but no point cloud found. splatfacto will use random point cloud initialization.\"\n                    )\n                ply_file_path = None\n\n            if ply_file_path:\n                sparse_points = self._load_3D_points(ply_file_path, transform_matrix, scale_factor)\n                if sparse_points is not None:\n                    metadata.update(sparse_points)\n            self.prompted_user = True\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if len(mask_filenames) > 0 else None,\n            dataparser_scale=scale_factor,\n            dataparser_transform=dataparser_transform_matrix,\n            metadata={\n                \"depth_filenames\": depth_filenames if len(depth_filenames) > 0 else None,\n                \"depth_unit_scale_factor\": self.config.depth_unit_scale_factor,\n                \"mask_color\": self.config.mask_color,\n                **metadata,\n            },\n        )\n        return dataparser_outputs\n\n    def _load_3D_points(self, ply_file_path: Path, transform_matrix: torch.Tensor, scale_factor: float):\n        \"\"\"Loads point clouds positions and colors from .ply\n\n        Args:\n            ply_file_path: Path to .ply file\n            transform_matrix: Matrix to transform world coordinates\n            scale_factor: How much to scale the camera origins by.\n\n        Returns:\n            A dictionary of points: points3D_xyz and colors: points3D_rgb\n        \"\"\"\n        import open3d as o3d  # Importing open3d is slow, so we only do it if we need it.\n\n        pcd = o3d.io.read_point_cloud(str(ply_file_path))\n\n        # if no points found don't read in an initial point cloud\n        if len(pcd.points) == 0:\n            return None\n\n        points3D = torch.from_numpy(np.asarray(pcd.points, dtype=np.float32))\n        points3D = (\n            torch.cat(\n                (\n                    points3D,\n                    torch.ones_like(points3D[..., :1]),\n                ),\n                -1,\n            )\n            @ transform_matrix.T\n        )\n        points3D *= scale_factor\n        points3D_rgb = torch.from_numpy((np.asarray(pcd.colors) * 255).astype(np.uint8))\n\n        out = {\n            \"points3D_xyz\": points3D,\n            \"points3D_rgb\": points3D_rgb,\n        }\n        return out\n\n    def _get_fname(self, filepath: Path, data_dir: Path, downsample_folder_prefix=\"images_\") -> Path:\n        \"\"\"Get the filename of the image file.\n        downsample_folder_prefix can be used to point to auxiliary image data, e.g. masks\n\n        filepath: the base file name of the transformations.\n        data_dir: the directory of the data that contains the transform file\n        downsample_folder_prefix: prefix of the newly generated downsampled images\n        \"\"\"\n\n        if self.downscale_factor is None:\n            if self.config.downscale_factor is None:\n                test_img = Image.open(data_dir / filepath)\n                h, w = test_img.size\n                max_res = max(h, w)\n                df = 0\n                while True:\n                    if (max_res / 2 ** (df)) <= MAX_AUTO_RESOLUTION:\n                        break\n                    if not (data_dir / f\"{downsample_folder_prefix}{2**(df+1)}\" / filepath.name).exists():\n                        break\n                    df += 1\n\n                self.downscale_factor = 2**df\n                CONSOLE.log(f\"Auto image downscale factor of {self.downscale_factor}\")\n            else:\n                self.downscale_factor = self.config.downscale_factor\n\n        if self.downscale_factor > 1:\n            return data_dir / f\"{downsample_folder_prefix}{self.downscale_factor}\" / filepath.name\n        return data_dir / filepath\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/nuscenes_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for NuScenes dataset\"\"\"\n\nimport math\nimport os\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Optional, Tuple, Type\n\nimport numpy as np\nimport pyquaternion\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\n\n\ndef rotation_translation_to_pose(r_quat, t_vec):\n    \"\"\"Convert quaternion rotation and translation vectors to 4x4 matrix\"\"\"\n\n    pose = np.eye(4)\n\n    # NB: Nuscenes recommends pyquaternion, which uses scalar-first format (w x y z)\n    # https://github.com/nutonomy/nuscenes-devkit/issues/545#issuecomment-766509242\n    # https://github.com/KieranWynn/pyquaternion/blob/99025c17bab1c55265d61add13375433b35251af/pyquaternion/quaternion.py#L299\n    # https://fzheng.me/2017/11/12/quaternion_conventions_en/\n    pose[:3, :3] = pyquaternion.Quaternion(r_quat).rotation_matrix\n\n    pose[:3, 3] = t_vec\n    return pose\n\n\n@dataclass\nclass NuScenesDataParserConfig(DataParserConfig):\n    \"\"\"NuScenes dataset config.\n    NuScenes (https://www.nuscenes.org/nuscenes) is an autonomous driving dataset containing 1000 20s clips.\n    Each clip was recorded with a suite of sensors including 6 surround cameras.\n    It also includes 3D cuboid annotations around objects.\n    We optionally use these cuboids to mask dynamic objects by specifying the mask_dir flag.\n    To create these masks use nerfstudio/scripts/datasets/process_nuscenes_masks.py.\n    \"\"\"\n\n    _target: Type = field(default_factory=lambda: NuScenes)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"scene-0103\")  # TODO: rename to scene but keep checkpoint saving name?\n    \"\"\"Name of the scene.\"\"\"\n    data_dir: Path = Path(\"/mnt/local/NuScenes\")\n    \"\"\"Path to NuScenes dataset.\"\"\"\n    version: Literal[\"v1.0-mini\", \"v1.0-trainval\"] = \"v1.0-mini\"\n    \"\"\"Dataset version.\"\"\"\n    cameras: Tuple[Literal[\"FRONT\", \"FRONT_LEFT\", \"FRONT_RIGHT\", \"BACK\", \"BACK_LEFT\", \"BACK_RIGHT\"], ...] = (\"FRONT\",)\n    \"\"\"Which cameras to use.\"\"\"\n    mask_dir: Optional[Path] = None\n    \"\"\"Path to masks of dynamic objects.\"\"\"\n\n    train_split_fraction: float = 0.9\n    \"\"\"The percent of images to use for training. The remaining images are for eval.\"\"\"\n\n    verbose: bool = False\n    \"\"\"Load dataset with verbose messaging\"\"\"\n\n\n@dataclass\nclass NuScenes(DataParser):\n    \"\"\"NuScenes DatasetParser\"\"\"\n\n    config: NuScenesDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        # nuscenes is slow to import, so we only do it if we need it.\n        from nuscenes.nuscenes import NuScenes as NuScenesDatabase\n\n        nusc = NuScenesDatabase(\n            version=self.config.version,\n            dataroot=str(self.config.data_dir.absolute()),\n            verbose=self.config.verbose,\n        )\n        cameras = [\"CAM_\" + camera for camera in self.config.cameras]\n\n        assert (\n            len(cameras) == 1\n        ), \"waiting on multiple camera support\"  # TODO: remove once multiple cameras are supported\n\n        # get samples for scene\n        samples = [\n            samp for samp in nusc.sample if nusc.get(\"scene\", samp[\"scene_token\"])[\"name\"] == str(self.config.data)\n        ]\n\n        # sort by timestamp (only to make chronological viz easier)\n        samples.sort(key=lambda x: (x[\"scene_token\"], x[\"timestamp\"]))\n\n        transform1 = np.array(\n            [\n                [0, -1, 0, 0],\n                [0, 0, -1, 0],\n                [1, 0, 0, 0],\n                [0, 0, 0, 1],\n            ]\n        )\n        transform2 = np.array(\n            [\n                [0, 0, 1, 0],\n                [0, 1, 0, 0],\n                [-1, 0, 0, 0],\n                [0, 0, 0, 1],\n            ]\n        )\n\n        # get image filenames and camera data\n        image_filenames = []\n        mask_filenames = []\n        mask_dir = self.config.mask_dir if self.config.mask_dir is not None else Path(\"\")\n        intrinsics = []\n        poses = []\n        for sample in samples:\n            for camera in cameras:\n                camera_data = nusc.get(\"sample_data\", sample[\"data\"][camera])\n                calibrated_sensor_data = nusc.get(\"calibrated_sensor\", camera_data[\"calibrated_sensor_token\"])\n                ego_pose_data = nusc.get(\"ego_pose\", camera_data[\"ego_pose_token\"])\n\n                ego_pose = rotation_translation_to_pose(ego_pose_data[\"rotation\"], ego_pose_data[\"translation\"])\n                cam_pose = rotation_translation_to_pose(\n                    calibrated_sensor_data[\"rotation\"], calibrated_sensor_data[\"translation\"]\n                )\n                pose = ego_pose @ cam_pose\n\n                # rotate to opencv frame\n                pose = transform1 @ pose\n\n                # convert from opencv camera to nerfstudio camera\n                pose[0:3, 1:3] *= -1\n                pose = pose[np.array([1, 0, 2, 3]), :]\n                pose[2, :] *= -1\n\n                # rotate to z-up in viewer\n                pose = transform2 @ pose\n\n                image_filenames.append(self.config.data_dir / camera_data[\"filename\"])\n                mask_filenames.append(\n                    mask_dir / \"masks\" / camera / os.path.split(camera_data[\"filename\"])[1].replace(\"jpg\", \"png\")\n                )\n                intrinsics.append(calibrated_sensor_data[\"camera_intrinsic\"])\n                poses.append(pose)\n        poses = torch.from_numpy(np.stack(poses).astype(np.float32))\n        intrinsics = torch.from_numpy(np.array(intrinsics).astype(np.float32))\n\n        # center poses\n        poses[:, :3, 3] -= poses[:, :3, 3].mean(dim=0)\n\n        # scale poses\n        poses[:, :3, 3] /= poses[:, :3, 3].abs().max()\n\n        # filter image_filenames and poses based on train/eval split percentage\n        num_snapshots = len(samples)\n        num_train_snapshots = math.ceil(num_snapshots * self.config.train_split_fraction)\n        num_eval_snapshots = num_snapshots - num_train_snapshots\n        i_all = np.arange(num_snapshots)\n        i_train = np.linspace(\n            0, num_snapshots - 1, num_train_snapshots, dtype=int\n        )  # equally spaced training snapshots starting and ending at 0 and num_images-1\n        i_eval = np.setdiff1d(i_all, i_train)  # eval images are the remaining images\n        assert len(i_eval) == num_eval_snapshots\n        i_train = (i_train[None, :] * len(cameras) + np.arange(len(cameras))[:, None]).ravel()\n        i_eval = (i_eval[None, :] * len(cameras) + np.arange(len(cameras))[:, None]).ravel()\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        mask_filenames = [mask_filenames[i] for i in indices]\n        intrinsics = intrinsics[indices]\n        poses = poses[indices]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = 1.0\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        cameras = Cameras(\n            fx=intrinsics[:, 0, 0].detach().clone(),\n            fy=intrinsics[:, 1, 1].detach().clone(),\n            cx=intrinsics[:, 0, 2].detach().clone(),\n            cy=intrinsics[:, 1, 2].detach().clone(),\n            height=900,\n            width=1600,\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if self.config.mask_dir is not None else None,\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/phototourism_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Phototourism dataset parser. Datasets and documentation here: http://phototour.cs.washington.edu/datasets/\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Type\n\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\n\n# TODO(1480) use pycolmap instead of colmap_parsing_utils\n# import pycolmap\nfrom nerfstudio.data.utils.colmap_parsing_utils import read_cameras_binary, read_images_binary\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass PhototourismDataParserConfig(DataParserConfig):\n    \"\"\"Phototourism dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: Phototourism)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/phototourism/brandenburg-gate\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    scale_factor: float = 3.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    alpha_color: str = \"white\"\n    \"\"\"alpha color of background\"\"\"\n    train_split_fraction: float = 0.9\n    \"\"\"The fraction of images to use for training. The remaining images are for eval.\"\"\"\n    scene_scale: float = 1.0\n    \"\"\"How much to scale the region of interest by.\"\"\"\n    orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"up\"\n    \"\"\"The method to use for orientation.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n    \"\"\"The method to use to center the poses.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n\n\n@dataclass\nclass Phototourism(DataParser):\n    \"\"\"Phototourism dataset. This is based on https://github.com/kwea123/nerf_pl/blob/nerfw/datasets/phototourism.py\n    and uses colmap's utils file to read the poses.\n    \"\"\"\n\n    config: PhototourismDataParserConfig\n\n    def __init__(self, config: PhototourismDataParserConfig):\n        super().__init__(config=config)\n        self.data: Path = config.data\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        image_filenames = []\n        poses = []\n\n        with CONSOLE.status(f\"[bold green]Reading phototourism images and poses for {split} split...\") as _:\n            # TODO(1480) use pycolmap\n            # recon = pycolmap.Reconstruction(self.data / \"dense\" / \"sparse\")\n            # cams = recon.cameras\n            # imgs = recon.images\n            cams = read_cameras_binary(self.data / \"dense/sparse/cameras.bin\")\n            imgs = read_images_binary(self.data / \"dense/sparse/images.bin\")\n\n        poses = []\n        fxs = []\n        fys = []\n        cxs = []\n        cys = []\n        image_filenames = []\n\n        flip = torch.eye(3)\n        flip[0, 0] = -1.0\n        flip = flip.double()\n\n        for _id, cam in cams.items():\n            img = imgs[_id]\n\n            assert cam.model == \"PINHOLE\", \"Only pinhole (perspective) camera model is supported at the moment\"\n\n            pose = torch.cat([torch.tensor(img.qvec2rotmat()), torch.tensor(img.tvec.reshape(3, 1))], dim=1)\n            pose = torch.cat([pose, torch.tensor([[0.0, 0.0, 0.0, 1.0]])], dim=0)\n            poses.append(torch.linalg.inv(pose))\n            fxs.append(torch.tensor(cam.params[0]))\n            fys.append(torch.tensor(cam.params[1]))\n            cxs.append(torch.tensor(cam.params[2]))\n            cys.append(torch.tensor(cam.params[3]))\n\n            image_filenames.append(self.data / \"dense/images\" / img.name)\n\n        poses = torch.stack(poses).float()\n        poses[..., 1:3] *= -1\n        fxs = torch.stack(fxs).float()\n        fys = torch.stack(fys).float()\n        cxs = torch.stack(cxs).float()\n        cys = torch.stack(cys).float()\n\n        # filter image_filenames and poses based on train/eval split percentage\n        num_images = len(image_filenames)\n        num_train_images = math.ceil(num_images * self.config.train_split_fraction)\n        num_eval_images = num_images - num_train_images\n        i_all = np.arange(num_images)\n        i_train = np.linspace(\n            0, num_images - 1, num_train_images, dtype=int\n        )  # equally spaced training images starting and ending at 0 and num_images-1\n        i_eval = np.setdiff1d(i_all, i_train)  # eval images are the remaining images\n        i_all = torch.tensor(i_all)\n        i_train = torch.tensor(i_train, dtype=torch.long)\n        i_eval = torch.tensor(i_eval, dtype=torch.long)\n        assert len(i_eval) == num_eval_images\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses, method=self.config.orientation_method, center_method=self.config.center_method\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n\n        poses[:, :3, 3] *= scale_factor\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        cameras = Cameras(\n            camera_to_worlds=poses[:, :3, :4],\n            fx=fxs,\n            fy=fys,\n            cx=cxs,\n            cy=cys,\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        cameras = cameras[indices]\n        image_filenames = [image_filenames[i] for i in indices]\n\n        assert len(cameras) == len(image_filenames)\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            dataparser_scale=scale_factor,\n            dataparser_transform=transform_matrix,\n        )\n\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/scannet_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for ScanNet dataset\"\"\"\n\nimport math\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Type\n\nimport cv2\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\n\n\n@dataclass\nclass ScanNetDataParserConfig(DataParserConfig):\n    \"\"\"ScanNet dataset config.\n    ScanNet dataset (https://www.scan-net.org/) is a large-scale 3D dataset of indoor scenes.\n    This dataparser assumes that the dense stream was extracted from .sens files.\n    Expected structure of scene directory:\n\n    .. code-block:: text\n\n        root/\n        ├── color/\n        ├── depth/\n        ├── intrinsic/\n        ├── pose/\n        |── ply/\n    \"\"\"\n\n    _target: Type = field(default_factory=lambda: ScanNet)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"./nvsmask3d/data/scene_example\")\n    \"\"\"Path to ScanNet folder with densely extracted scenes.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    scene_scale: float = 1.0\n    \"\"\"How much to scale the region of interest by.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n    \"\"\"The method to use to center the poses.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n    train_split_fraction: float = 0.9\n    \"\"\"The fraction of images to use for training. The remaining images are for eval.\"\"\"\n    depth_unit_scale_factor: float = 1e-3\n    \"\"\"Scales the depth values to meters. Default value is 0.001 for a millimeter to meter conversion.\"\"\"\n    load_3D_points: bool = True\n    \"\"\"Whether to load the 3D points from the .ply\"\"\"\n    point_cloud_color: bool = True\n    \"\"\"read point cloud colors from .ply files or not \"\"\"\n    ply_file_path: Path = data / (data.name + \".ply\")\n    \"\"\"path to the .ply file containing the 3D points\"\"\"\n\n\n@dataclass\nclass ScanNet(DataParser):\n    \"\"\"ScanNet DatasetParser\"\"\"\n\n    config: ScanNetDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        image_dir = self.config.data / \"color\"\n        depth_dir = self.config.data / \"depth\"\n        pose_dir = self.config.data / \"pose\"\n\n        img_dir_sorted = list(sorted(image_dir.iterdir(), key=lambda x: int(x.name.split(\".\")[0])))\n        depth_dir_sorted = list(sorted(depth_dir.iterdir(), key=lambda x: int(x.name.split(\".\")[0])))\n        pose_dir_sorted = list(sorted(pose_dir.iterdir(), key=lambda x: int(x.name.split(\".\")[0])))\n\n        first_img = cv2.imread(str(img_dir_sorted[0].absolute()))  # type: ignore\n        h, w, _ = first_img.shape\n\n        image_filenames, depth_filenames, intrinsics, poses = [], [], [], []\n\n        K = np.loadtxt(self.config.data / \"intrinsic\" / \"intrinsic_color.txt\")\n        for img, depth, pose in zip(img_dir_sorted, depth_dir_sorted, pose_dir_sorted):\n            pose = np.loadtxt(pose)\n            pose = np.array(pose).reshape(4, 4)\n            pose[:3, 1] *= -1\n            pose[:3, 2] *= -1\n            pose = torch.from_numpy(pose).float()\n            # We cannot accept files directly, as some of the poses are invalid\n            if np.isinf(pose).any():\n                continue\n\n            poses.append(pose)\n            intrinsics.append(K)\n            image_filenames.append(img)\n            depth_filenames.append(depth)\n\n        # filter image_filenames and poses based on train/eval split percentage\n        num_images = len(image_filenames)\n        num_train_images = math.ceil(num_images * self.config.train_split_fraction)\n        num_eval_images = num_images - num_train_images\n        i_all = np.arange(num_images)\n        i_train = np.linspace(\n            0, num_images - 1, num_train_images, dtype=int\n        )  # equally spaced training images starting and ending at 0 and num_images-1\n        i_eval = np.setdiff1d(i_all, i_train)  # eval images are the remaining images\n        assert len(i_eval) == num_eval_images\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n\n        poses = torch.from_numpy(np.stack(poses).astype(np.float32))\n        intrinsics = torch.from_numpy(np.stack(intrinsics).astype(np.float32))\n\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses,\n            method=\"none\",\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n\n        poses[:, :3, 3] *= scale_factor\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        depth_filenames = [depth_filenames[i] for i in indices] if len(depth_filenames) > 0 else []\n        intrinsics = intrinsics[indices.tolist()]\n        poses = poses[indices.tolist()]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        cameras = Cameras(\n            fx=intrinsics[:, 0, 0],\n            fy=intrinsics[:, 1, 1],\n            cx=intrinsics[:, 0, 2],\n            cy=intrinsics[:, 1, 2],\n            height=h,\n            width=w,\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        metadata = {\n            \"depth_filenames\": depth_filenames if len(depth_filenames) > 0 else None,\n            \"depth_unit_scale_factor\": self.config.depth_unit_scale_factor,\n        }\n\n        if self.config.load_3D_points:\n            point_color = self.config.point_cloud_color\n            ply_file_path = self.config.ply_file_path\n            point_cloud_data = self._load_3D_points(ply_file_path, transform_matrix, scale_factor, point_color)\n            if point_cloud_data is not None:\n                metadata.update(point_cloud_data)\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            dataparser_scale=scale_factor,\n            dataparser_transform=transform_matrix,\n            metadata=metadata,\n        )\n        return dataparser_outputs\n\n    def _load_3D_points(\n        self, ply_file_path: Path, transform_matrix: torch.Tensor, scale_factor: float, points_color: bool\n    ) -> dict:\n        \"\"\"Loads point clouds positions and colors from .ply\n\n        Args:\n            ply_file_path: Path to .ply file\n            transform_matrix: Matrix to transform world coordinates\n            scale_factor: How much to scale the camera origins by.\n            points_color: Whether to load the point cloud colors or not\n\n        Returns:\n            A dictionary of points: points3D_xyz and colors: points3D_rgb\n            or\n            A dictionary of points: points3D_xyz if points_color is False\n        \"\"\"\n        import open3d as o3d  # Importing open3d is slow, so we only do it if we need it.\n\n        pcd = o3d.io.read_point_cloud(str(ply_file_path))\n\n        # if no points found don't read in an initial point cloud\n        if len(pcd.points) == 0:\n            return {}\n\n        points3D = torch.from_numpy(np.asarray(pcd.points, dtype=np.float32))\n        points3D = (\n            torch.cat(\n                (\n                    points3D,\n                    torch.ones_like(points3D[..., :1]),\n                ),\n                -1,\n            )\n            @ transform_matrix.T\n        )\n        points3D *= scale_factor\n        out = {\n            \"points3D_xyz\": points3D,\n        }\n\n        if points_color:\n            points3D_rgb = torch.from_numpy((np.asarray(pcd.colors) * 255).astype(np.uint8))\n            out[\"points3D_rgb\"] = points3D_rgb\n\n        return out\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/scannetpp_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data parser for ScanNet++ datasets.\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Literal, Type\n\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import CAMERA_MODEL_TO_TYPE, Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.io import load_from_json\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ScanNetppDataParserConfig(DataParserConfig):\n    \"\"\"ScanNet++ dataset config.\n    ScanNet++ dataset (https://kaldir.vc.in.tum.de/scannetpp/) is a real-world 3D indoor dataset for semantics understanding and novel view synthesis.\n    This dataparser follow the file structure of the dataset.\n    Expected structure of the directory:\n\n    .. code-block:: text\n\n        root/\n        ├── SCENE_ID0\n            ├── dslr\n                ├── resized_images\n                ├── resized_anon_masks\n                ├── nerfstudio/transforms.json\n        ├── SCENE_ID1/\n        ...\n    \"\"\"\n\n    _target: Type = field(default_factory=lambda: ScanNetpp)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"scannetpp/410c470782\")\n    \"\"\"Directory to the root of the data.\"\"\"\n    scale_factor: float = 1.0\n    \"\"\"How much to scale the camera origins by.\"\"\"\n    scene_scale: float = 1.5\n    \"\"\"How much to scale the region of interest by. Default is 1.5 since the cameras are inside the rooms.\"\"\"\n    orientation_method: Literal[\"pca\", \"up\", \"vertical\", \"none\"] = \"up\"\n    \"\"\"The method to use for orientation.\"\"\"\n    center_method: Literal[\"poses\", \"focus\", \"none\"] = \"poses\"\n    \"\"\"The method to use to center the poses.\"\"\"\n    auto_scale_poses: bool = True\n    \"\"\"Whether to automatically scale the poses to fit in +/- 1 bounding box.\"\"\"\n    images_dir: Path = Path(\"dslr/resized_images\")\n    \"\"\"Relative path to the images directory (default: resized_images)\"\"\"\n    masks_dir: Path = Path(\"dslr/resized_anon_masks\")\n    \"\"\"Relative path to the masks directory (default: resized_anon_masks)\"\"\"\n    transforms_path: Path = Path(\"dslr/nerfstudio/transforms.json\")\n    \"\"\"Relative path to the transforms.json file\"\"\"\n\n\n@dataclass\nclass ScanNetpp(DataParser):\n    \"\"\"ScanNet++ DatasetParser\"\"\"\n\n    config: ScanNetppDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        assert self.config.data.exists(), f\"Data directory {self.config.data} does not exist.\"\n        meta = load_from_json(self.config.data / self.config.transforms_path)\n        data_dir = self.config.data / self.config.images_dir\n        mask_dir = self.config.data / self.config.masks_dir\n\n        image_filenames = []\n        mask_filenames = []\n        poses = []\n        i_train = []\n        i_eval = []\n        # sort the frames by fname\n        frames = meta[\"frames\"] + meta[\"test_frames\"]\n        test_frames = [f[\"file_path\"] for f in meta[\"test_frames\"]]\n        frames.sort(key=lambda x: x[\"file_path\"])\n\n        for idx, frame in enumerate(frames):\n            filepath = Path(frame[\"file_path\"])\n            fname = data_dir / filepath\n\n            image_filenames.append(fname)\n            poses.append(np.array(frame[\"transform_matrix\"]))\n            if meta.get(\"has_mask\", True) and \"mask_path\" in frame:\n                mask_filepath = Path(frame[\"mask_path\"])\n                mask_fname = mask_dir / mask_filepath\n                mask_filenames.append(mask_fname)\n\n            if frame[\"file_path\"] in test_frames:\n                i_eval.append(idx)\n            else:\n                i_train.append(idx)\n\n        assert len(mask_filenames) == 0 or (len(mask_filenames) == len(image_filenames)), \"\"\"\n        Different number of image and mask filenames.\n        You should check that mask_path is specified for every frame (or zero frames) in transforms.json.\n        \"\"\"\n\n        if split == \"train\":\n            indices = i_train\n        elif split in [\"val\", \"test\"]:\n            indices = i_eval\n        else:\n            raise ValueError(f\"Unknown dataparser split {split}\")\n\n        if \"orientation_override\" in meta:\n            orientation_method = meta[\"orientation_override\"]\n            CONSOLE.log(f\"[yellow] Dataset is overriding orientation method to {orientation_method}\")\n        else:\n            orientation_method = self.config.orientation_method\n\n        poses = torch.from_numpy(np.array(poses).astype(np.float32))\n        poses, transform_matrix = camera_utils.auto_orient_and_center_poses(\n            poses,\n            method=orientation_method,\n            center_method=self.config.center_method,\n        )\n\n        # Scale poses\n        scale_factor = 1.0\n        if self.config.auto_scale_poses:\n            scale_factor /= float(torch.max(torch.abs(poses[:, :3, 3])))\n        scale_factor *= self.config.scale_factor\n\n        poses[:, :3, 3] *= scale_factor\n\n        # Choose image_filenames and poses based on split, but after auto orient and scaling the poses.\n        image_filenames = [image_filenames[i] for i in indices]\n        mask_filenames = [mask_filenames[i] for i in indices] if len(mask_filenames) > 0 else []\n\n        idx_tensor = torch.tensor(indices, dtype=torch.long)\n        poses = poses[idx_tensor]\n\n        # in x,y,z order\n        # assumes that the scene is centered at the origin\n        if not self.config.auto_scale_poses:\n            # Set aabb_scale to scene_scale * the max of the absolute values of the poses\n            aabb_scale = self.config.scene_scale * float(torch.max(torch.abs(poses[:, :3, 3])))\n        else:\n            aabb_scale = self.config.scene_scale\n        scene_box = SceneBox(\n            aabb=torch.tensor(\n                [[-aabb_scale, -aabb_scale, -aabb_scale], [aabb_scale, aabb_scale, aabb_scale]], dtype=torch.float32\n            )\n        )\n\n        if \"camera_model\" in meta:\n            camera_type = CAMERA_MODEL_TO_TYPE[meta[\"camera_model\"]]\n        else:\n            camera_type = CameraType.PERSPECTIVE\n\n        fx = float(meta[\"fl_x\"])\n        fy = float(meta[\"fl_y\"])\n        cx = float(meta[\"cx\"])\n        cy = float(meta[\"cy\"])\n        height = int(meta[\"h\"])\n        width = int(meta[\"w\"])\n        distortion_params = camera_utils.get_distortion_params(\n            k1=float(meta[\"k1\"]) if \"k1\" in meta else 0.0,\n            k2=float(meta[\"k2\"]) if \"k2\" in meta else 0.0,\n            k3=float(meta[\"k3\"]) if \"k3\" in meta else 0.0,\n            k4=float(meta[\"k4\"]) if \"k4\" in meta else 0.0,\n            p1=float(meta[\"p1\"]) if \"p1\" in meta else 0.0,\n            p2=float(meta[\"p2\"]) if \"p2\" in meta else 0.0,\n        )\n\n        cameras = Cameras(\n            fx=fx,\n            fy=fy,\n            cx=cx,\n            cy=cy,\n            distortion_params=distortion_params,\n            height=height,\n            width=width,\n            camera_to_worlds=poses[:, :3, :4],\n            camera_type=camera_type,\n        )\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            mask_filenames=mask_filenames if len(mask_filenames) > 0 else None,\n            dataparser_scale=scale_factor,\n            dataparser_transform=transform_matrix,\n            metadata={},\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/sdfstudio_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Datapaser for sdfstudio formatted data\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Type\n\nimport torch\n\nfrom nerfstudio.cameras import camera_utils\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.io import load_from_json\n\n\n@dataclass\nclass SDFStudioDataParserConfig(DataParserConfig):\n    \"\"\"Scene dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: SDFStudio)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/DTU/scan65\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    include_mono_prior: bool = False\n    \"\"\"whether or not to load monocular depth and normal \"\"\"\n    depth_unit_scale_factor: float = 1e-3\n    \"\"\"Scales the depth values to meters. Default value is 0.001 for a millimeter to meter conversion.\"\"\"\n    include_foreground_mask: bool = False\n    \"\"\"whether or not to load foreground mask\"\"\"\n    downscale_factor: int = 1\n    scene_scale: float = 2.0\n    \"\"\"\n    Sets the bounding cube to have edge length of this size.\n    The longest dimension of the axis-aligned bbox will be scaled to this value.\n    \"\"\"\n    skip_every_for_val_split: int = 1\n    \"\"\"sub sampling validation images\"\"\"\n    auto_orient: bool = True\n\n\n@dataclass\nclass SDFStudio(DataParser):\n    \"\"\"SDFStudio Dataset\"\"\"\n\n    config: SDFStudioDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        # load meta data\n        meta = load_from_json(self.config.data / \"meta_data.json\")\n\n        indices = list(range(len(meta[\"frames\"])))\n        # subsample to avoid out-of-memory for validation set\n        if split != \"train\" and self.config.skip_every_for_val_split >= 1:\n            indices = indices[:: self.config.skip_every_for_val_split]\n\n        image_filenames = []\n        depth_filenames = []\n        normal_filenames = []\n        transform = None\n        fx = []\n        fy = []\n        cx = []\n        cy = []\n        camera_to_worlds = []\n        for i, frame in enumerate(meta[\"frames\"]):\n            if i not in indices:\n                continue\n\n            image_filename = self.config.data / frame[\"rgb_path\"]\n            depth_filename = frame.get(\"mono_depth_path\")\n            normal_filename = frame.get(\"mono_normal_path\")\n\n            intrinsics = torch.tensor(frame[\"intrinsics\"])\n            camtoworld = torch.tensor(frame[\"camtoworld\"])\n\n            # append data\n            image_filenames.append(image_filename)\n            if depth_filename is not None and normal_filename is not None:\n                depth_filenames.append(self.config.data / depth_filename)\n                normal_filenames.append(self.config.data / normal_filename)\n            fx.append(intrinsics[0, 0])\n            fy.append(intrinsics[1, 1])\n            cx.append(intrinsics[0, 2])\n            cy.append(intrinsics[1, 2])\n            camera_to_worlds.append(camtoworld)\n\n        fx = torch.stack(fx)\n        fy = torch.stack(fy)\n        cx = torch.stack(cx)\n        cy = torch.stack(cy)\n        c2w_colmap = torch.stack(camera_to_worlds)\n        camera_to_worlds = torch.stack(camera_to_worlds)\n\n        # Convert from COLMAP's/OPENCV's camera coordinate system to nerfstudio\n        camera_to_worlds[:, 0:3, 1:3] *= -1\n\n        if self.config.auto_orient:\n            camera_to_worlds, transform = camera_utils.auto_orient_and_center_poses(\n                camera_to_worlds,\n                method=\"up\",\n                center_method=\"none\",\n            )\n\n        # scene box from meta data\n        meta_scene_box = meta[\"scene_box\"]\n        aabb = torch.tensor(meta_scene_box[\"aabb\"], dtype=torch.float32)\n        scene_box = SceneBox(\n            aabb=aabb,\n        )\n\n        height, width = meta[\"height\"], meta[\"width\"]\n        cameras = Cameras(\n            fx=fx,\n            fy=fy,\n            cx=cx,\n            cy=cy,\n            height=height,\n            width=width,\n            camera_to_worlds=camera_to_worlds[:, :3, :4],\n            camera_type=CameraType.PERSPECTIVE,\n        )\n\n        # TODO supports downsample\n        # cameras.rescale_output_resolution(scaling_factor=1.0 / self.config.downscale_factor)\n        if self.config.include_mono_prior:\n            assert meta[\"has_mono_prior\"], f\"no mono prior in {self.config.data}\"\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            metadata={\n                \"depth_filenames\": depth_filenames if len(depth_filenames) > 0 else None,\n                \"normal_filenames\": normal_filenames if len(normal_filenames) > 0 else None,\n                \"transform\": transform,\n                # required for normal maps, these are in colmap format so they require c2w before conversion\n                \"camera_to_worlds\": c2w_colmap if len(c2w_colmap) > 0 else None,\n                \"include_mono_prior\": self.config.include_mono_prior,\n                \"depth_unit_scale_factor\": self.config.depth_unit_scale_factor,\n            },\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/dataparsers/sitcoms3d_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Data parser for sitcoms3D dataset.\n\nThe dataset is from the paper [\"The One Where They Reconstructed 3D Humans and\nEnvironments in TV Shows\"](https://ethanweber.me/sitcoms3D/)\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Type\n\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParser, DataParserConfig, DataparserOutputs, Semantics\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.utils.io import load_from_json\n\n\n@dataclass\nclass Sitcoms3DDataParserConfig(DataParserConfig):\n    \"\"\"sitcoms3D dataset parser config\"\"\"\n\n    _target: Type = field(default_factory=lambda: Sitcoms3D)\n    \"\"\"target class to instantiate\"\"\"\n    data: Path = Path(\"data/sitcoms3d/TBBT-big_living_room\")\n    \"\"\"Directory specifying location of data.\"\"\"\n    include_semantics: bool = True\n    \"\"\"whether or not to include loading of semantics data\"\"\"\n    downscale_factor: int = 4\n    scene_scale: float = 2.0\n    \"\"\"\n    Sets the bounding cube to have edge length of this size.\n    The longest dimension of the Sitcoms3D axis-aligned bbox will be scaled to this value.\n    \"\"\"\n\n\n@dataclass\nclass Sitcoms3D(DataParser):\n    \"\"\"Sitcoms3D Dataset\"\"\"\n\n    config: Sitcoms3DDataParserConfig\n\n    def _generate_dataparser_outputs(self, split=\"train\"):\n        cameras_json = load_from_json(self.config.data / \"cameras.json\")\n        frames = cameras_json[\"frames\"]\n        bbox = torch.tensor(cameras_json[\"bbox\"])\n\n        downscale_suffix = f\"_{self.config.downscale_factor}\" if self.config.downscale_factor != 1 else \"\"\n        images_folder = f\"images{downscale_suffix}\"\n        segmentations_folder = f\"segmentations{downscale_suffix}\"\n\n        image_filenames = []\n        fx = []\n        fy = []\n        cx = []\n        cy = []\n        camera_to_worlds = []\n        for frame in frames:\n            # unpack data\n            image_filename = self.config.data / images_folder / frame[\"image_name\"]\n            intrinsics = torch.tensor(frame[\"intrinsics\"])\n            camtoworld = torch.tensor(frame[\"camtoworld\"])[:3]\n            # append data\n            image_filenames.append(image_filename)\n            fx.append(intrinsics[0, 0])\n            fy.append(intrinsics[1, 1])\n            cx.append(intrinsics[0, 2])\n            cy.append(intrinsics[1, 2])\n            camera_to_worlds.append(camtoworld)\n        fx = torch.stack(fx)\n        fy = torch.stack(fy)\n        cx = torch.stack(cx)\n        cy = torch.stack(cy)\n        camera_to_worlds = torch.stack(camera_to_worlds)\n\n        # rotate the cameras and box 90 degrees about the x axis to put the z axis up\n        rotation = torch.tensor([[1, 0, 0], [0, 0, -1], [0, 1, 0]], dtype=torch.float32)\n        camera_to_worlds[:, :3] = rotation @ camera_to_worlds[:, :3]\n        bbox = (rotation @ bbox.T).T\n\n        scene_scale = self.config.scene_scale\n\n        # -- set the scene box ---\n        scene_box = SceneBox(aabb=bbox)\n        # center the box and adjust the cameras too\n        center = scene_box.get_center()\n        scene_box.aabb -= center\n        camera_to_worlds[..., 3] -= center\n        # scale the longest dimension to match the cube size\n        lengths = scene_box.aabb[1] - scene_box.aabb[0]\n        longest_dim = torch.argmax(lengths)\n        longest_length = lengths[longest_dim]\n        scale = scene_scale / longest_length.item()\n        scene_box.aabb = scene_box.aabb * scale  # box\n        camera_to_worlds[..., 3] *= scale  # cameras\n\n        # --- semantics ---\n        semantics = None\n        if self.config.include_semantics:\n            empty_path = Path()\n            replace_this_path = str(empty_path / images_folder / empty_path)\n            with_this_path = str(empty_path / segmentations_folder / \"thing\" / empty_path)\n            filenames = [\n                Path(str(image_filename).replace(replace_this_path, with_this_path).replace(\".jpg\", \".png\"))\n                for image_filename in image_filenames\n            ]\n            panoptic_classes = load_from_json(self.config.data / \"panoptic_classes.json\")\n            classes = panoptic_classes[\"thing\"]\n            colors = torch.tensor(panoptic_classes[\"thing_colors\"], dtype=torch.float32) / 255.0\n            semantics = Semantics(filenames=filenames, classes=classes, colors=colors, mask_classes=[\"person\"])\n\n        assert torch.all(cx[0] == cx), \"Not all cameras have the same cx. Our Cameras class does not support this.\"\n        assert torch.all(cy[0] == cy), \"Not all cameras have the same cy. Our Cameras class does not support this.\"\n\n        cameras = Cameras(\n            fx=fx,\n            fy=fy,\n            cx=float(cx[0]),\n            cy=float(cy[0]),\n            camera_to_worlds=camera_to_worlds,\n            camera_type=CameraType.PERSPECTIVE,\n        )\n        cameras.rescale_output_resolution(scaling_factor=1.0 / self.config.downscale_factor)\n\n        dataparser_outputs = DataparserOutputs(\n            image_filenames=image_filenames,\n            cameras=cameras,\n            scene_box=scene_box,\n            metadata={\"semantics\": semantics} if self.config.include_semantics else {},\n            dataparser_scale=scale,\n        )\n        return dataparser_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datasets/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datasets/base_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nDataset.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom copy import deepcopy\nfrom pathlib import Path\nfrom typing import Dict, List, Literal\n\nimport numpy as np\nimport numpy.typing as npt\nimport torch\nfrom jaxtyping import Float, UInt8\nfrom PIL import Image\nfrom torch import Tensor\nfrom torch.utils.data import Dataset\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.utils.data_utils import get_image_mask_tensor_from_path\n\n\nclass InputDataset(Dataset):\n    \"\"\"Dataset that returns images.\n\n    Args:\n        dataparser_outputs: description of where and how to read input images.\n        scale_factor: The scaling factor for the dataparser outputs\n    \"\"\"\n\n    exclude_batch_keys_from_device: List[str] = [\"image\", \"mask\"]\n    cameras: Cameras\n\n    def __init__(self, dataparser_outputs: DataparserOutputs, scale_factor: float = 1.0):\n        super().__init__()\n        self._dataparser_outputs = dataparser_outputs\n        self.scale_factor = scale_factor\n        self.scene_box = deepcopy(dataparser_outputs.scene_box)\n        self.metadata = deepcopy(dataparser_outputs.metadata)\n        self.cameras = deepcopy(dataparser_outputs.cameras)\n        self.cameras.rescale_output_resolution(scaling_factor=scale_factor)\n        self.mask_color = dataparser_outputs.metadata.get(\"mask_color\", None)\n\n    def __len__(self):\n        return len(self._dataparser_outputs.image_filenames)\n\n    def get_numpy_image(self, image_idx: int) -> npt.NDArray[np.uint8]:\n        \"\"\"Returns the image of shape (H, W, 3 or 4).\n\n        Args:\n            image_idx: The image index in the dataset.\n        \"\"\"\n        image_filename = self._dataparser_outputs.image_filenames[image_idx]\n        pil_image = Image.open(image_filename)\n        if self.scale_factor != 1.0:\n            width, height = pil_image.size\n            newsize = (int(width * self.scale_factor), int(height * self.scale_factor))\n            pil_image = pil_image.resize(newsize, resample=Image.Resampling.BILINEAR)\n        image = np.array(pil_image, dtype=\"uint8\")  # shape is (h, w) or (h, w, 3 or 4)\n        if len(image.shape) == 2:\n            image = image[:, :, None].repeat(3, axis=2)\n        assert len(image.shape) == 3\n        assert image.dtype == np.uint8\n        assert image.shape[2] in [3, 4], f\"Image shape of {image.shape} is in correct.\"\n        return image\n\n    def get_image_float32(self, image_idx: int) -> Float[Tensor, \"image_height image_width num_channels\"]:\n        \"\"\"Returns a 3 channel image in float32 torch.Tensor.\n\n        Args:\n            image_idx: The image index in the dataset.\n        \"\"\"\n        image = torch.from_numpy(self.get_numpy_image(image_idx).astype(\"float32\") / 255.0)\n        if self._dataparser_outputs.alpha_color is not None and image.shape[-1] == 4:\n            assert (self._dataparser_outputs.alpha_color >= 0).all() and (\n                self._dataparser_outputs.alpha_color <= 1\n            ).all(), \"alpha color given is out of range between [0, 1].\"\n            image = image[:, :, :3] * image[:, :, -1:] + self._dataparser_outputs.alpha_color * (1.0 - image[:, :, -1:])\n        return image\n\n    def get_image_uint8(self, image_idx: int) -> UInt8[Tensor, \"image_height image_width num_channels\"]:\n        \"\"\"Returns a 3 channel image in uint8 torch.Tensor.\n\n        Args:\n            image_idx: The image index in the dataset.\n        \"\"\"\n        image = torch.from_numpy(self.get_numpy_image(image_idx))\n        if self._dataparser_outputs.alpha_color is not None and image.shape[-1] == 4:\n            assert (self._dataparser_outputs.alpha_color >= 0).all() and (\n                self._dataparser_outputs.alpha_color <= 1\n            ).all(), \"alpha color given is out of range between [0, 1].\"\n            image = image[:, :, :3] * (image[:, :, -1:] / 255.0) + 255.0 * self._dataparser_outputs.alpha_color * (\n                1.0 - image[:, :, -1:] / 255.0\n            )\n            image = torch.clamp(image, min=0, max=255).to(torch.uint8)\n        return image\n\n    def get_data(self, image_idx: int, image_type: Literal[\"uint8\", \"float32\"] = \"float32\") -> Dict:\n        \"\"\"Returns the ImageDataset data as a dictionary.\n\n        Args:\n            image_idx: The image index in the dataset.\n            image_type: the type of images returned\n        \"\"\"\n        if image_type == \"float32\":\n            image = self.get_image_float32(image_idx)\n        elif image_type == \"uint8\":\n            image = self.get_image_uint8(image_idx)\n        else:\n            raise NotImplementedError(f\"image_type (={image_type}) getter was not implemented, use uint8 or float32\")\n\n        data = {\"image_idx\": image_idx, \"image\": image}\n        if self._dataparser_outputs.mask_filenames is not None:\n            mask_filepath = self._dataparser_outputs.mask_filenames[image_idx]\n            data[\"mask\"] = get_image_mask_tensor_from_path(filepath=mask_filepath, scale_factor=self.scale_factor)\n            assert (\n                data[\"mask\"].shape[:2] == data[\"image\"].shape[:2]\n            ), f\"Mask and image have different shapes. Got {data['mask'].shape[:2]} and {data['image'].shape[:2]}\"\n        if self.mask_color:\n            data[\"image\"] = torch.where(\n                data[\"mask\"] == 1.0, data[\"image\"], torch.ones_like(data[\"image\"]) * torch.tensor(self.mask_color)\n            )\n        metadata = self.get_metadata(data)\n        data.update(metadata)\n        return data\n\n    def get_metadata(self, data: Dict) -> Dict:\n        \"\"\"Method that can be used to process any additional metadata that may be part of the model inputs.\n\n        Args:\n            image_idx: The image index in the dataset.\n        \"\"\"\n        del data\n        return {}\n\n    def __getitem__(self, image_idx: int) -> Dict:\n        data = self.get_data(image_idx)\n        return data\n\n    @property\n    def image_filenames(self) -> List[Path]:\n        \"\"\"\n        Returns image filenames for this dataset.\n        The order of filenames is the same as in the Cameras object for easy mapping.\n        \"\"\"\n\n        return self._dataparser_outputs.image_filenames\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datasets/depth_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nDepth dataset.\n\"\"\"\n\nimport json\nfrom pathlib import Path\nfrom typing import Dict, Union\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom rich.progress import track\n\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.utils.data_utils import get_depth_image_from_path\nfrom nerfstudio.model_components import losses\nfrom nerfstudio.utils.misc import torch_compile\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\nclass DepthDataset(InputDataset):\n    \"\"\"Dataset that returns images and depths. If no depths are found, then we generate them with Zoe Depth.\n\n    Args:\n        dataparser_outputs: description of where and how to read input images.\n        scale_factor: The scaling factor for the dataparser outputs.\n    \"\"\"\n\n    exclude_batch_keys_from_device = InputDataset.exclude_batch_keys_from_device + [\"depth_image\"]\n\n    def __init__(self, dataparser_outputs: DataparserOutputs, scale_factor: float = 1.0):\n        super().__init__(dataparser_outputs, scale_factor)\n        # if there are no depth images than we want to generate them all with zoe depth\n\n        if len(dataparser_outputs.image_filenames) > 0 and (\n            \"depth_filenames\" not in dataparser_outputs.metadata.keys()\n            or dataparser_outputs.metadata[\"depth_filenames\"] is None\n        ):\n            device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n            CONSOLE.print(\"[bold yellow] No depth data found! Generating pseudodepth...\")\n            losses.FORCE_PSEUDODEPTH_LOSS = True\n            CONSOLE.print(\"[bold red] Using psueodepth: forcing depth loss to be ranking loss.\")\n            cache = dataparser_outputs.image_filenames[0].parent / \"depths.npy\"\n            # Note: this should probably be saved to disk as images, and then loaded with the dataparser.\n            #  That will allow multi-gpu training.\n            if cache.exists():\n                CONSOLE.print(\"[bold yellow] Loading pseudodata depth from cache!\")\n                # load all the depths\n                self.depths = np.load(cache)\n                self.depths = torch.from_numpy(self.depths).to(device)\n            else:\n                depth_tensors = []\n                transforms = self._find_transform(dataparser_outputs.image_filenames[0])\n                data = dataparser_outputs.image_filenames[0].parent\n                if transforms is not None:\n                    meta = json.load(open(transforms, \"r\"))\n                    frames = meta[\"frames\"]\n                    filenames = [data / frames[j][\"file_path\"].split(\"/\")[-1] for j in range(len(frames))]\n                else:\n                    meta = None\n                    frames = None\n                    filenames = dataparser_outputs.image_filenames\n\n                repo = \"isl-org/ZoeDepth\"\n                self.zoe = torch_compile(torch.hub.load(repo, \"ZoeD_NK\", pretrained=True).to(device))\n\n                for i in track(range(len(filenames)), description=\"Generating depth images\"):\n                    image_filename = filenames[i]\n                    pil_image = Image.open(image_filename)\n                    image = np.array(pil_image, dtype=\"uint8\")  # shape is (h, w) or (h, w, 3 or 4)\n                    if len(image.shape) == 2:\n                        image = image[:, :, None].repeat(3, axis=2)\n                    image = torch.from_numpy(image.astype(\"float32\") / 255.0)\n\n                    with torch.no_grad():\n                        image = torch.permute(image, (2, 0, 1)).unsqueeze(0).to(device)\n                        if image.shape[1] == 4:\n                            image = image[:, :3, :, :]\n                        depth_tensor = self.zoe.infer(image).squeeze().unsqueeze(-1)\n\n                    depth_tensors.append(depth_tensor)\n\n                self.depths = torch.stack(depth_tensors)\n                np.save(cache, self.depths.cpu().numpy())\n            dataparser_outputs.metadata[\"depth_filenames\"] = None\n            dataparser_outputs.metadata[\"depth_unit_scale_factor\"] = 1.0\n            self.metadata[\"depth_filenames\"] = None\n            self.metadata[\"depth_unit_scale_factor\"] = 1.0\n\n        self.depth_filenames = self.metadata[\"depth_filenames\"]\n        self.depth_unit_scale_factor = self.metadata[\"depth_unit_scale_factor\"]\n\n    def get_metadata(self, data: Dict) -> Dict:\n        if self.depth_filenames is None:\n            return {\"depth_image\": self.depths[data[\"image_idx\"]]}\n\n        filepath = self.depth_filenames[data[\"image_idx\"]]\n        height = int(self._dataparser_outputs.cameras.height[data[\"image_idx\"]])\n        width = int(self._dataparser_outputs.cameras.width[data[\"image_idx\"]])\n\n        # Scale depth images to meter units and also by scaling applied to cameras\n        scale_factor = self.depth_unit_scale_factor * self._dataparser_outputs.dataparser_scale\n        depth_image = get_depth_image_from_path(\n            filepath=filepath, height=height, width=width, scale_factor=scale_factor\n        )\n\n        return {\"depth_image\": depth_image}\n\n    def _find_transform(self, image_path: Path) -> Union[Path, None]:\n        while image_path.parent != image_path:\n            transform_path = image_path.parent / \"transforms.json\"\n            if transform_path.exists():\n                return transform_path\n            image_path = image_path.parent\n        return None\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datasets/sdf_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSDFStudio dataset.\n\"\"\"\n\nfrom pathlib import Path\nfrom typing import Dict\n\nimport numpy as np\nimport torch\nfrom torch import Tensor\n\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\n\n\nclass SDFDataset(InputDataset):\n    \"\"\"Dataset that returns images and depths.\n\n    Args:\n        dataparser_outputs: description of where and how to read input images.\n        scale_factor: The scaling factor for the dataparser outputs.\n    \"\"\"\n\n    exclude_batch_keys_from_device = InputDataset.exclude_batch_keys_from_device + [\"depth\", \"normal\"]\n\n    def __init__(self, dataparser_outputs: DataparserOutputs, scale_factor: float = 1.0):\n        super().__init__(dataparser_outputs, scale_factor)\n\n        # can be none if monoprior not included\n        self.depth_filenames = self.metadata[\"depth_filenames\"]\n        self.normal_filenames = self.metadata[\"normal_filenames\"]\n        self.camera_to_worlds = self.metadata[\"camera_to_worlds\"]\n        # can be none if auto orient not enabled in dataparser\n        self.transform = self.metadata[\"transform\"]\n        self.include_mono_prior = self.metadata[\"include_mono_prior\"]\n\n    def get_metadata(self, data: Dict) -> Dict:\n        # TODO supports foreground_masks\n        metadata = {}\n        if self.include_mono_prior:\n            depth_filepath = self.depth_filenames[data[\"image_idx\"]]\n            normal_filepath = self.normal_filenames[data[\"image_idx\"]]\n            camtoworld = self.camera_to_worlds[data[\"image_idx\"]]\n\n            # Scale depth images to meter units and also by scaling applied to cameras\n            depth_image, normal_image = self.get_depths_and_normals(\n                depth_filepath=depth_filepath, normal_filename=normal_filepath, camtoworld=camtoworld\n            )\n            metadata[\"depth\"] = depth_image\n            metadata[\"normal\"] = normal_image\n\n        return metadata\n\n    def get_depths_and_normals(self, depth_filepath: Path, normal_filename: Path, camtoworld: Tensor):\n        \"\"\"function to process additional depths and normal information\n        Args:\n            depth_filepath: path to depth file\n            normal_filename: path to normal file\n            camtoworld: camera to world transformation matrix\n        \"\"\"\n\n        # load mono depth\n        depth = np.load(depth_filepath)\n        depth = torch.from_numpy(depth).float()\n\n        # load mono normal\n        normal = np.load(normal_filename)\n\n        # transform normal to world coordinate system\n        normal = normal * 2.0 - 1.0  # omnidata output is normalized so we convert it back to normal here\n        normal = torch.from_numpy(normal).float()\n\n        rot = camtoworld[:3, :3]\n\n        normal_map = normal.reshape(3, -1)\n        normal_map = torch.nn.functional.normalize(normal_map, p=2, dim=0)\n\n        normal_map = rot @ normal_map\n        normal = normal_map.permute(1, 0).reshape(*normal.shape[1:], 3)\n\n        if self.transform is not None:\n            h, w, _ = normal.shape\n            normal = self.transform[:3, :3] @ normal.reshape(-1, 3).permute(1, 0)\n            normal = normal.permute(1, 0).reshape(h, w, 3)\n\n        return depth, normal\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/datasets/semantic_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSemantic dataset.\n\"\"\"\n\nfrom typing import Dict\n\nimport torch\n\nfrom nerfstudio.data.dataparsers.base_dataparser import DataparserOutputs, Semantics\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.utils.data_utils import get_semantics_and_mask_tensors_from_path\n\n\nclass SemanticDataset(InputDataset):\n    \"\"\"Dataset that returns images and semantics and masks.\n\n    Args:\n        dataparser_outputs: description of where and how to read input images.\n    \"\"\"\n\n    exclude_batch_keys_from_device = InputDataset.exclude_batch_keys_from_device + [\"mask\", \"semantics\"]\n\n    def __init__(self, dataparser_outputs: DataparserOutputs, scale_factor: float = 1.0):\n        super().__init__(dataparser_outputs, scale_factor)\n        assert \"semantics\" in dataparser_outputs.metadata.keys() and isinstance(self.metadata[\"semantics\"], Semantics)\n        self.semantics = self.metadata[\"semantics\"]\n        self.mask_indices = torch.tensor(\n            [self.semantics.classes.index(mask_class) for mask_class in self.semantics.mask_classes]\n        ).view(1, 1, -1)\n\n    def get_metadata(self, data: Dict) -> Dict:\n        # handle mask\n        filepath = self.semantics.filenames[data[\"image_idx\"]]\n        semantic_label, mask = get_semantics_and_mask_tensors_from_path(\n            filepath=filepath, mask_indices=self.mask_indices, scale_factor=self.scale_factor\n        )\n        if \"mask\" in data.keys():\n            mask = mask & data[\"mask\"]\n        return {\"mask\": mask, \"semantics\": semantic_label}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/pixel_samplers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode for sampling pixels.\n\"\"\"\n\nimport random\nimport warnings\nfrom dataclasses import dataclass, field\nfrom typing import Dict, Optional, Type, Union\n\nimport torch\nfrom jaxtyping import Int\nfrom torch import Tensor\n\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.data.utils.pixel_sampling_utils import divide_rays_per_image, erode_mask\n\n\n@dataclass\nclass PixelSamplerConfig(InstantiateConfig):\n    \"\"\"Configuration for pixel sampler instantiation.\"\"\"\n\n    _target: Type = field(default_factory=lambda: PixelSampler)\n    \"\"\"Target class to instantiate.\"\"\"\n    num_rays_per_batch: int = 4096\n    \"\"\"Number of rays to sample per batch.\"\"\"\n    keep_full_image: bool = False\n    \"\"\"Whether or not to include a reference to the full image in returned batch.\"\"\"\n    is_equirectangular: bool = False\n    \"\"\"List of whether or not camera i is equirectangular.\"\"\"\n    ignore_mask: bool = False\n    \"\"\"Whether to ignore the masks when sampling.\"\"\"\n    fisheye_crop_radius: Optional[float] = None\n    \"\"\"Set to the radius (in pixels) for fisheye cameras.\"\"\"\n    rejection_sample_mask: bool = True\n    \"\"\"Whether or not to use rejection sampling when sampling images with masks\"\"\"\n    max_num_iterations: int = 100\n    \"\"\"If rejection sampling masks, the maximum number of times to sample\"\"\"\n\n\nclass PixelSampler:\n    \"\"\"Samples 'pixel_batch's from 'image_batch's.\n\n    Args:\n        config: the DataManagerConfig used to instantiate class\n    \"\"\"\n\n    config: PixelSamplerConfig\n\n    def __init__(self, config: PixelSamplerConfig, **kwargs) -> None:\n        self.kwargs = kwargs\n        self.config = config\n        # Possibly override some values if they are present in the kwargs dictionary\n        self.config.num_rays_per_batch = self.kwargs.get(\"num_rays_per_batch\", self.config.num_rays_per_batch)\n        self.config.keep_full_image = self.kwargs.get(\"keep_full_image\", self.config.keep_full_image)\n        self.config.is_equirectangular = self.kwargs.get(\"is_equirectangular\", self.config.is_equirectangular)\n        self.config.fisheye_crop_radius = self.kwargs.get(\"fisheye_crop_radius\", self.config.fisheye_crop_radius)\n        self.set_num_rays_per_batch(self.config.num_rays_per_batch)\n\n    def set_num_rays_per_batch(self, num_rays_per_batch: int):\n        \"\"\"Set the number of rays to sample per batch.\n\n        Args:\n            num_rays_per_batch: number of rays to sample per batch\n        \"\"\"\n        self.num_rays_per_batch = num_rays_per_batch\n\n    def rejection_sample_mask(\n        self,\n        mask: Tensor,\n        num_samples: int,\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        device: Union[torch.device, str],\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        \"\"\"\n        Samples pixels within a mask using rejection sampling.\n\n        Args:\n            mask: mask of possible pixels in an image to sample from.\n            num_samples: number of samples.\n            num_images: number of images to sample over.\n            image_height: the height of the image.\n            image_width: the width of the image.\n            device: device that the samples should be on.\n        \"\"\"\n        indices = (\n            torch.rand((num_samples, 3), device=device)\n            * torch.tensor([num_images, image_height, image_width], device=device)\n        ).long()\n\n        num_valid = 0\n        for _ in range(self.config.max_num_iterations):\n            c, y, x = (i.flatten() for i in torch.split(indices, 1, dim=-1))\n            chosen_indices_validity = mask.squeeze()[c, y, x].bool()\n            num_valid = int(torch.sum(chosen_indices_validity).item())\n            if num_valid == num_samples:\n                break\n            else:\n                replacement_indices = (\n                    torch.rand((num_samples - num_valid, 3), device=device)\n                    * torch.tensor([num_images, image_height, image_width], device=device)\n                ).long()\n                indices[~chosen_indices_validity] = replacement_indices\n\n        if num_valid != num_samples:\n            warnings.warn(\n                \"\"\"\n                Masked sampling failed, mask is either empty or mostly empty.\n                Reverting behavior to non-rejection sampling. Consider setting\n                pipeline.datamanager.pixel-sampler.rejection-sample-mask to False\n                or increasing pipeline.datamanager.pixel-sampler.max-num-iterations\n                \"\"\"\n            )\n            self.config.rejection_sample_mask = False\n            nonzero_indices = torch.nonzero(mask.squeeze(), as_tuple=False).to(device)\n            chosen_indices = random.sample(range(len(nonzero_indices)), k=num_samples)\n            indices = nonzero_indices[chosen_indices]\n\n        return indices\n\n    def sample_method(\n        self,\n        batch_size: int,\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        mask: Optional[Tensor] = None,\n        device: Union[torch.device, str] = \"cpu\",\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        \"\"\"\n        Naive pixel sampler, uniformly samples across all possible pixels of all possible images.\n\n        Args:\n            batch_size: number of samples in a batch\n            num_images: number of images to sample over\n            mask: mask of possible pixels in an image to sample from.\n        \"\"\"\n        if isinstance(mask, torch.Tensor) and not self.config.ignore_mask:\n            if self.config.rejection_sample_mask:\n                indices = self.rejection_sample_mask(\n                    mask=mask,\n                    num_samples=batch_size,\n                    num_images=num_images,\n                    image_height=image_height,\n                    image_width=image_width,\n                    device=device,\n                )\n            else:\n                nonzero_indices = torch.nonzero(mask[..., 0], as_tuple=False)\n                chosen_indices = random.sample(range(len(nonzero_indices)), k=batch_size)\n                indices = nonzero_indices[chosen_indices]\n        else:\n            indices = (\n                torch.rand((batch_size, 3), device=device)\n                * torch.tensor([num_images, image_height, image_width], device=device)\n            ).long()\n\n        return indices\n\n    def sample_method_equirectangular(\n        self,\n        batch_size: int,\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        mask: Optional[Tensor] = None,\n        device: Union[torch.device, str] = \"cpu\",\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        if isinstance(mask, torch.Tensor) and not self.config.ignore_mask:\n            # Note: if there is a mask, sampling reduces back to uniform sampling, which gives more\n            # sampling weight to the poles of the image than the equators.\n            # TODO(kevinddchen): implement the correct mask-sampling method.\n\n            indices = self.sample_method(batch_size, num_images, image_height, image_width, mask=mask, device=device)\n        else:\n            # We sample theta uniformly in [0, 2*pi]\n            # We sample phi in [0, pi] according to the PDF f(phi) = sin(phi) / 2.\n            # This is done by inverse transform sampling.\n            # http://corysimon.github.io/articles/uniformdistn-on-sphere/\n            num_images_rand = torch.rand(batch_size, device=device)\n            phi_rand = torch.acos(1 - 2 * torch.rand(batch_size, device=device)) / torch.pi\n            theta_rand = torch.rand(batch_size, device=device)\n            indices = torch.floor(\n                torch.stack((num_images_rand, phi_rand, theta_rand), dim=-1)\n                * torch.tensor([num_images, image_height, image_width], device=device)\n            ).long()\n\n        return indices\n\n    def sample_method_fisheye(\n        self,\n        batch_size: int,\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        mask: Optional[Tensor] = None,\n        device: Union[torch.device, str] = \"cpu\",\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        if isinstance(mask, torch.Tensor) and not self.config.ignore_mask:\n            indices = self.sample_method(batch_size, num_images, image_height, image_width, mask=mask, device=device)\n        else:\n            # Rejection sampling.\n            valid: Optional[torch.Tensor] = None\n            indices = None\n            while True:\n                samples_needed = batch_size if valid is None else int(batch_size - torch.sum(valid).item())\n\n                # Check if done!\n                if samples_needed == 0:\n                    break\n\n                rand_samples = torch.rand((samples_needed, 2), device=device)\n                # Convert random samples to radius and theta.\n                radii = self.config.fisheye_crop_radius * torch.sqrt(rand_samples[:, 0])\n                theta = 2.0 * torch.pi * rand_samples[:, 1]\n\n                # Convert radius and theta to x and y.\n                x = (radii * torch.cos(theta) + image_width // 2).long()\n                y = (radii * torch.sin(theta) + image_height // 2).long()\n                sampled_indices = torch.stack(\n                    [torch.randint(0, num_images, size=(samples_needed,), device=device), y, x], dim=-1\n                )\n\n                # Update indices.\n                if valid is None:\n                    indices = sampled_indices\n                    valid = (\n                        (sampled_indices[:, 1] >= 0)\n                        & (sampled_indices[:, 1] < image_height)\n                        & (sampled_indices[:, 2] >= 0)\n                        & (sampled_indices[:, 2] < image_width)\n                    )\n                else:\n                    assert indices is not None\n                    not_valid = ~valid\n                    indices[not_valid, :] = sampled_indices\n                    valid[not_valid] = (\n                        (sampled_indices[:, 1] >= 0)\n                        & (sampled_indices[:, 1] < image_height)\n                        & (sampled_indices[:, 2] >= 0)\n                        & (sampled_indices[:, 2] < image_width)\n                    )\n            assert indices is not None\n\n        assert indices.shape == (batch_size, 3)\n        return indices\n\n    def collate_image_dataset_batch(self, batch: Dict, num_rays_per_batch: int, keep_full_image: bool = False):\n        \"\"\"\n        Operates on a batch of images and samples pixels to use for generating rays.\n        Returns a collated batch which is input to the Graph.\n        It will sample only within the valid 'mask' if it's specified.\n\n        Args:\n            batch: batch of images to sample from\n            num_rays_per_batch: number of rays to sample per batch\n            keep_full_image: whether or not to include a reference to the full image in returned batch\n        \"\"\"\n\n        device = batch[\"image\"].device\n        num_images, image_height, image_width, _ = batch[\"image\"].shape\n\n        if \"mask\" in batch:\n            if self.config.is_equirectangular:\n                indices = self.sample_method_equirectangular(\n                    num_rays_per_batch, num_images, image_height, image_width, mask=batch[\"mask\"], device=device\n                )\n            elif self.config.fisheye_crop_radius is not None:\n                indices = self.sample_method_fisheye(\n                    num_rays_per_batch, num_images, image_height, image_width, mask=batch[\"mask\"], device=device\n                )\n            else:\n                indices = self.sample_method(\n                    num_rays_per_batch, num_images, image_height, image_width, mask=batch[\"mask\"], device=device\n                )\n        else:\n            if self.config.is_equirectangular:\n                indices = self.sample_method_equirectangular(\n                    num_rays_per_batch, num_images, image_height, image_width, device=device\n                )\n            elif self.config.fisheye_crop_radius is not None:\n                indices = self.sample_method_fisheye(\n                    num_rays_per_batch, num_images, image_height, image_width, device=device\n                )\n            else:\n                indices = self.sample_method(num_rays_per_batch, num_images, image_height, image_width, device=device)\n\n        c, y, x = (i.flatten() for i in torch.split(indices, 1, dim=-1))\n        c, y, x = c.cpu(), y.cpu(), x.cpu()\n        collated_batch = {\n            key: value[c, y, x] for key, value in batch.items() if key != \"image_idx\" and value is not None\n        }\n        assert collated_batch[\"image\"].shape[0] == num_rays_per_batch\n\n        # Needed to correct the random indices to their actual camera idx locations.\n        indices[:, 0] = batch[\"image_idx\"][c]\n        collated_batch[\"indices\"] = indices  # with the abs camera indices\n        if keep_full_image:\n            collated_batch[\"full_image\"] = batch[\"image\"]\n\n        return collated_batch\n\n    def collate_image_dataset_batch_list(self, batch: Dict, num_rays_per_batch: int, keep_full_image: bool = False):\n        \"\"\"\n        Does the same as collate_image_dataset_batch, except it will operate over a list of images / masks inside\n        a list.\n\n        We will use this with the intent of DEPRECIATING it as soon as we find a viable alternative.\n        The intention will be to replace this with a more efficient implementation that doesn't require a for loop, but\n        since pytorch's ragged tensors are still in beta (this would allow for some vectorization), this will do.\n\n        Args:\n            batch: batch of images to sample from\n            num_rays_per_batch: number of rays to sample per batch\n            keep_full_image: whether or not to include a reference to the full image in returned batch\n        \"\"\"\n\n        device = batch[\"image\"][0].device\n        num_images = len(batch[\"image\"])\n\n        # only sample within the mask, if the mask is in the batch\n        all_indices = []\n        all_images = []\n        all_depth_images = []\n\n        assert num_rays_per_batch % 2 == 0, \"num_rays_per_batch must be divisible by 2\"\n        num_rays_per_image = divide_rays_per_image(num_rays_per_batch, num_images)\n\n        if \"mask\" in batch:\n            for i, num_rays in enumerate(num_rays_per_image):\n                image_height, image_width, _ = batch[\"image\"][i].shape\n\n                indices = self.sample_method(\n                    num_rays, 1, image_height, image_width, mask=batch[\"mask\"][i].unsqueeze(0), device=device\n                )\n                indices[:, 0] = i\n                all_indices.append(indices)\n                all_images.append(batch[\"image\"][i][indices[:, 1], indices[:, 2]])\n                if \"depth_image\" in batch:\n                    all_depth_images.append(batch[\"depth_image\"][i][indices[:, 1], indices[:, 2]])\n\n        else:\n            for i, num_rays in enumerate(num_rays_per_image):\n                image_height, image_width, _ = batch[\"image\"][i].shape\n                if self.config.is_equirectangular:\n                    indices = self.sample_method_equirectangular(num_rays, 1, image_height, image_width, device=device)\n                else:\n                    indices = self.sample_method(num_rays, 1, image_height, image_width, device=device)\n                indices[:, 0] = i\n                all_indices.append(indices)\n                all_images.append(batch[\"image\"][i][indices[:, 1], indices[:, 2]])\n                if \"depth_image\" in batch:\n                    all_depth_images.append(batch[\"depth_image\"][i][indices[:, 1], indices[:, 2]])\n\n        indices = torch.cat(all_indices, dim=0)\n\n        c, y, x = (i.flatten() for i in torch.split(indices, 1, dim=-1))\n        collated_batch = {\n            key: value[c, y, x]\n            for key, value in batch.items()\n            if key not in (\"image_idx\", \"image\", \"mask\", \"depth_image\") and value is not None\n        }\n\n        collated_batch[\"image\"] = torch.cat(all_images, dim=0)\n        if \"depth_image\" in batch:\n            collated_batch[\"depth_image\"] = torch.cat(all_depth_images, dim=0)\n\n        assert collated_batch[\"image\"].shape[0] == num_rays_per_batch\n\n        # Needed to correct the random indices to their actual camera idx locations.\n        indices[:, 0] = batch[\"image_idx\"][c]\n        collated_batch[\"indices\"] = indices  # with the abs camera indices\n\n        if keep_full_image:\n            collated_batch[\"full_image\"] = batch[\"image\"]\n\n        return collated_batch\n\n    def sample(self, image_batch: Dict):\n        \"\"\"Sample an image batch and return a pixel batch.\n\n        Args:\n            image_batch: batch of images to sample from\n        \"\"\"\n        if isinstance(image_batch[\"image\"], list):\n            image_batch = dict(image_batch.items())  # copy the dictionary so we don't modify the original\n            pixel_batch = self.collate_image_dataset_batch_list(\n                image_batch, self.num_rays_per_batch, keep_full_image=self.config.keep_full_image\n            )\n        elif isinstance(image_batch[\"image\"], torch.Tensor):\n            pixel_batch = self.collate_image_dataset_batch(\n                image_batch, self.num_rays_per_batch, keep_full_image=self.config.keep_full_image\n            )\n        else:\n            raise ValueError(\"image_batch['image'] must be a list or torch.Tensor\")\n        return pixel_batch\n\n\n@dataclass\nclass PatchPixelSamplerConfig(PixelSamplerConfig):\n    \"\"\"Config dataclass for PatchPixelSampler.\"\"\"\n\n    _target: Type = field(default_factory=lambda: PatchPixelSampler)\n    \"\"\"Target class to instantiate.\"\"\"\n    patch_size: int = 32\n    \"\"\"Side length of patch. This must be consistent in the method\n    config in order for samples to be reshaped into patches correctly.\"\"\"\n    rejection_sample_mask: bool = True\n    \"\"\"Whether or not to use rejection sampling when sampling images with masks\"\"\"\n    max_num_iterations: int = 100\n    \"\"\"If rejection sampling masks, the maximum number of times to sample\"\"\"\n\n\nclass PatchPixelSampler(PixelSampler):\n    \"\"\"Samples 'pixel_batch's from 'image_batch's. Samples square patches\n    from the images randomly. Useful for patch-based losses.\n\n    Args:\n        config: the PatchPixelSamplerConfig used to instantiate class\n    \"\"\"\n\n    config: PatchPixelSamplerConfig\n\n    def __init__(self, config: PatchPixelSamplerConfig, **kwargs) -> None:\n        super().__init__(config, **kwargs)\n        self.config.patch_size = self.kwargs.get(\"patch_size\", self.config.patch_size)\n\n    def set_num_rays_per_batch(self, num_rays_per_batch: int):\n        \"\"\"Set the number of rays to sample per batch. Overridden to deal with patch-based sampling.\n\n        Args:\n            num_rays_per_batch: number of rays to sample per batch\n        \"\"\"\n        self.num_rays_per_batch = (num_rays_per_batch // (self.config.patch_size**2)) * (self.config.patch_size**2)\n\n    # overrides base method\n    def sample_method(\n        self,\n        batch_size: int,\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        mask: Optional[Tensor] = None,\n        device: Union[torch.device, str] = \"cpu\",\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        if isinstance(mask, Tensor) and not self.config.ignore_mask:\n            sub_bs = batch_size // (self.config.patch_size**2)\n            half_patch_size = int(self.config.patch_size / 2)\n            m = erode_mask(mask.permute(0, 3, 1, 2).float(), pixel_radius=half_patch_size)\n\n            if self.config.rejection_sample_mask:\n                indices = self.rejection_sample_mask(\n                    mask=m,\n                    num_samples=sub_bs,\n                    num_images=num_images,\n                    image_height=image_height,\n                    image_width=image_width,\n                    device=device,\n                )\n            else:\n                nonzero_indices = torch.nonzero(m[:, 0], as_tuple=False).to(device)\n                chosen_indices = random.sample(range(len(nonzero_indices)), k=sub_bs)\n                indices = nonzero_indices[chosen_indices]\n\n            indices = (\n                indices.view(sub_bs, 1, 1, 3)\n                .broadcast_to(sub_bs, self.config.patch_size, self.config.patch_size, 3)\n                .clone()\n            )\n\n            yys, xxs = torch.meshgrid(\n                torch.arange(self.config.patch_size, device=device), torch.arange(self.config.patch_size, device=device)\n            )\n            indices[:, ..., 1] += yys - half_patch_size\n            indices[:, ..., 2] += xxs - half_patch_size\n\n            indices = torch.floor(indices).long()\n            indices = indices.flatten(0, 2)\n        else:\n            sub_bs = batch_size // (self.config.patch_size**2)\n            indices = torch.rand((sub_bs, 3), device=device) * torch.tensor(\n                [num_images, image_height - self.config.patch_size, image_width - self.config.patch_size],\n                device=device,\n            )\n\n            indices = (\n                indices.view(sub_bs, 1, 1, 3)\n                .broadcast_to(sub_bs, self.config.patch_size, self.config.patch_size, 3)\n                .clone()\n            )\n\n            yys, xxs = torch.meshgrid(\n                torch.arange(self.config.patch_size, device=device), torch.arange(self.config.patch_size, device=device)\n            )\n            indices[:, ..., 1] += yys\n            indices[:, ..., 2] += xxs\n\n            indices = torch.floor(indices).long()\n            indices = indices.flatten(0, 2)\n\n        return indices\n\n\n@dataclass\nclass PairPixelSamplerConfig(PixelSamplerConfig):\n    \"\"\"Config dataclass for PairPixelSampler.\"\"\"\n\n    _target: Type = field(default_factory=lambda: PairPixelSampler)\n    \"\"\"Target class to instantiate.\"\"\"\n    radius: int = 2\n    \"\"\"max distance between pairs of pixels.\"\"\"\n    rejection_sample_mask: bool = True\n    \"\"\"Whether or not to use rejection sampling when sampling images with masks\"\"\"\n    max_num_iterations: int = 100\n    \"\"\"If rejection sampling masks, the maximum number of times to sample\"\"\"\n\n\nclass PairPixelSampler(PixelSampler):  # pylint: disable=too-few-public-methods\n    \"\"\"Samples pair of pixels from 'image_batch's. Samples pairs of pixels from\n        from the images randomly within a 'radius' distance apart. Useful for pair-based losses.\n\n    Args:\n        config: the PairPixelSamplerConfig used to instantiate class\n    \"\"\"\n\n    def __init__(self, config: PairPixelSamplerConfig, **kwargs) -> None:\n        self.config = config\n        self.radius = self.config.radius\n        super().__init__(self.config, **kwargs)\n        self.rays_to_sample = self.config.num_rays_per_batch // 2\n\n    # overrides base method\n    def sample_method(  # pylint: disable=no-self-use\n        self,\n        batch_size: Optional[int],\n        num_images: int,\n        image_height: int,\n        image_width: int,\n        mask: Optional[Tensor] = None,\n        device: Union[torch.device, str] = \"cpu\",\n    ) -> Int[Tensor, \"batch_size 3\"]:\n        rays_to_sample = self.rays_to_sample\n        if batch_size is not None:\n            assert (\n                int(batch_size) % 2 == 0\n            ), f\"PairPixelSampler can only return batch sizes in multiples of two (got {batch_size})\"\n            rays_to_sample = batch_size // 2\n\n        if isinstance(mask, Tensor) and not self.config.ignore_mask:\n            m = erode_mask(mask.permute(0, 3, 1, 2).float(), pixel_radius=self.radius)\n\n            if self.config.rejection_sample_mask:\n                indices = self.rejection_sample_mask(\n                    mask=m,\n                    num_samples=rays_to_sample,\n                    num_images=num_images,\n                    image_height=image_height,\n                    image_width=image_width,\n                    device=device,\n                )\n            else:\n                nonzero_indices = torch.nonzero(m[:, 0], as_tuple=False).to(device)\n                chosen_indices = random.sample(range(len(nonzero_indices)), k=rays_to_sample)\n                indices = nonzero_indices[chosen_indices]\n        else:\n            s = (rays_to_sample, 1)\n            ns = torch.randint(0, num_images, s, dtype=torch.long, device=device)\n            hs = torch.randint(self.radius, image_height - self.radius, s, dtype=torch.long, device=device)\n            ws = torch.randint(self.radius, image_width - self.radius, s, dtype=torch.long, device=device)\n            indices = torch.concat((ns, hs, ws), dim=1)\n\n        pair_indices = torch.hstack(\n            (\n                torch.zeros(rays_to_sample, 1, device=device, dtype=torch.long),\n                torch.randint(-self.radius, self.radius, (rays_to_sample, 2), device=device, dtype=torch.long),\n            )\n        )\n        pair_indices += indices\n        indices = torch.hstack((indices, pair_indices)).view(rays_to_sample * 2, 3)\n        return indices\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/scene_box.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nDataset input structures.\n\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Tuple, Union\n\nimport torch\nimport viser.transforms as vtf\nfrom jaxtyping import Float\nfrom torch import Tensor\n\n\n@dataclass\nclass SceneBox:\n    \"\"\"Data to represent the scene box.\"\"\"\n\n    aabb: Float[Tensor, \"2 3\"]\n    \"\"\"aabb: axis-aligned bounding box.\n    aabb[0] is the minimum (x,y,z) point.\n    aabb[1] is the maximum (x,y,z) point.\"\"\"\n\n    def within(self, pts: Float[Tensor, \"n 3\"]):\n        \"\"\"Returns a boolean mask indicating whether each point is within the box.\"\"\"\n        return torch.all(pts > self.aabb[0], dim=-1) & torch.all(pts < self.aabb[1], dim=-1)\n\n    def get_diagonal_length(self):\n        \"\"\"Returns the longest diagonal length.\"\"\"\n        diff = self.aabb[1] - self.aabb[0]\n        length = torch.sqrt((diff**2).sum() + 1e-20)\n        return length\n\n    def get_center(self):\n        \"\"\"Returns the center of the box.\"\"\"\n        diff = self.aabb[1] - self.aabb[0]\n        return self.aabb[0] + diff / 2.0\n\n    def get_centered_and_scaled_scene_box(self, scale_factor: Union[float, torch.Tensor] = 1.0):\n        \"\"\"Returns a new box that has been shifted and rescaled to be centered\n        about the origin.\n\n        Args:\n            scale_factor: How much to scale the camera origins by.\n        \"\"\"\n        return SceneBox(aabb=(self.aabb - self.get_center()) * scale_factor)\n\n    @staticmethod\n    def get_normalized_positions(positions: Float[Tensor, \"*batch 3\"], aabb: Float[Tensor, \"2 3\"]):\n        \"\"\"Return normalized positions in range [0, 1] based on the aabb axis-aligned bounding box.\n\n        Args:\n            positions: the xyz positions\n            aabb: the axis-aligned bounding box\n        \"\"\"\n        aabb_lengths = aabb[1] - aabb[0]\n        normalized_positions = (positions - aabb[0]) / aabb_lengths\n        return normalized_positions\n\n    @staticmethod\n    def from_camera_poses(poses: Float[Tensor, \"*batch 3 4\"], scale_factor: float) -> \"SceneBox\":\n        \"\"\"Returns the instance of SceneBox that fully envelopes a set of poses\n\n        Args:\n            poses: tensor of camera pose matrices\n            scale_factor: How much to scale the camera origins by.\n        \"\"\"\n        xyzs = poses[..., :3, -1]\n        aabb = torch.stack([torch.min(xyzs, dim=0)[0], torch.max(xyzs, dim=0)[0]])\n        return SceneBox(aabb=aabb * scale_factor)\n\n\n@dataclass\nclass OrientedBox:\n    R: Float[Tensor, \"3 3\"]\n    \"\"\"R: rotation matrix.\"\"\"\n    T: Float[Tensor, \"3\"]\n    \"\"\"T: translation vector.\"\"\"\n    S: Float[Tensor, \"3\"]\n    \"\"\"S: scale vector.\"\"\"\n\n    def within(self, pts: Float[Tensor, \"n 3\"]):\n        \"\"\"Returns a boolean mask indicating whether each point is within the box.\"\"\"\n        R, T, S = self.R, self.T, self.S.to(pts)\n        H = torch.eye(4, device=pts.device, dtype=pts.dtype)\n        H[:3, :3] = R\n        H[:3, 3] = T\n        H_world2bbox = torch.inverse(H)\n        pts = torch.cat((pts, torch.ones_like(pts[..., :1])), dim=-1)\n        pts = torch.matmul(H_world2bbox, pts.T).T[..., :3]\n\n        comp_l = torch.tensor(-S / 2)\n        comp_m = torch.tensor(S / 2)\n        mask = torch.all(torch.concat([pts > comp_l, pts < comp_m], dim=-1), dim=-1)\n        return mask\n\n    @staticmethod\n    def from_params(\n        pos: Tuple[float, float, float], rpy: Tuple[float, float, float], scale: Tuple[float, float, float]\n    ):\n        \"\"\"Construct a box from position, rotation, and scale parameters.\"\"\"\n        R = torch.tensor(vtf.SO3.from_rpy_radians(rpy[0], rpy[1], rpy[2]).as_matrix())\n        T = torch.tensor(pos)\n        S = torch.tensor(scale)\n        return OrientedBox(R=R, T=T, S=S)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/colmap_parsing_utils.py",
    "content": "\"\"\"\nThis file copied with small modifications from:\n * https://github.com/colmap/colmap/blob/1a4d0bad2e90aa65ce997c9d1779518eaed998d5/scripts/python/read_write_model.py\n\nTODO(1480) Delete this file when moving to pycolmap.\n\n\n\"\"\"\n\n# Copyright (c) 2023, ETH Zurich and UNC Chapel Hill.\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are met:\n#\n#     * Redistributions of source code must retain the above copyright\n#       notice, this list of conditions and the following disclaimer.\n#\n#     * Redistributions in binary form must reproduce the above copyright\n#       notice, this list of conditions and the following disclaimer in the\n#       documentation and/or other materials provided with the distribution.\n#\n#     * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of\n#       its contributors may be used to endorse or promote products derived\n#       from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n#\n# Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)\n\nimport collections\nimport os\nimport struct\n\nimport numpy as np\n\nCameraModel = collections.namedtuple(\"CameraModel\", [\"model_id\", \"model_name\", \"num_params\"])\nCamera = collections.namedtuple(\"Camera\", [\"id\", \"model\", \"width\", \"height\", \"params\"])\nBaseImage = collections.namedtuple(\"Image\", [\"id\", \"qvec\", \"tvec\", \"camera_id\", \"name\", \"xys\", \"point3D_ids\"])\nPoint3D = collections.namedtuple(\"Point3D\", [\"id\", \"xyz\", \"rgb\", \"error\", \"image_ids\", \"point2D_idxs\"])\n\n\nclass Image(BaseImage):\n    def qvec2rotmat(self):\n        return qvec2rotmat(self.qvec)\n\n\nCAMERA_MODELS = {\n    CameraModel(model_id=0, model_name=\"SIMPLE_PINHOLE\", num_params=3),\n    CameraModel(model_id=1, model_name=\"PINHOLE\", num_params=4),\n    CameraModel(model_id=2, model_name=\"SIMPLE_RADIAL\", num_params=4),\n    CameraModel(model_id=3, model_name=\"RADIAL\", num_params=5),\n    CameraModel(model_id=4, model_name=\"OPENCV\", num_params=8),\n    CameraModel(model_id=5, model_name=\"OPENCV_FISHEYE\", num_params=8),\n    CameraModel(model_id=6, model_name=\"FULL_OPENCV\", num_params=12),\n    CameraModel(model_id=7, model_name=\"FOV\", num_params=5),\n    CameraModel(model_id=8, model_name=\"SIMPLE_RADIAL_FISHEYE\", num_params=4),\n    CameraModel(model_id=9, model_name=\"RADIAL_FISHEYE\", num_params=5),\n    CameraModel(model_id=10, model_name=\"THIN_PRISM_FISHEYE\", num_params=12),\n}\nCAMERA_MODEL_IDS = dict([(camera_model.model_id, camera_model) for camera_model in CAMERA_MODELS])\nCAMERA_MODEL_NAMES = dict([(camera_model.model_name, camera_model) for camera_model in CAMERA_MODELS])\n\n\ndef read_next_bytes(fid, num_bytes, format_char_sequence, endian_character=\"<\"):\n    \"\"\"Read and unpack the next bytes from a binary file.\n    :param fid:\n    :param num_bytes: Sum of combination of {2, 4, 8}, e.g. 2, 6, 16, 30, etc.\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    :param endian_character: Any of {@, =, <, >, !}\n    :return: Tuple of read and unpacked values.\n    \"\"\"\n    data = fid.read(num_bytes)\n    return struct.unpack(endian_character + format_char_sequence, data)\n\n\ndef write_next_bytes(fid, data, format_char_sequence, endian_character=\"<\"):\n    \"\"\"pack and write to a binary file.\n    :param fid:\n    :param data: data to send, if multiple elements are sent at the same time,\n    they should be encapsuled either in a list or a tuple\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    should be the same length as the data list or tuple\n    :param endian_character: Any of {@, =, <, >, !}\n    \"\"\"\n    if isinstance(data, (list, tuple)):\n        bytes = struct.pack(endian_character + format_char_sequence, *data)\n    else:\n        bytes = struct.pack(endian_character + format_char_sequence, data)\n    fid.write(bytes)\n\n\ndef read_cameras_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasText(const std::string& path)\n        void Reconstruction::ReadCamerasText(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                camera_id = int(elems[0])\n                model = elems[1]\n                width = int(elems[2])\n                height = int(elems[3])\n                params = np.array(tuple(map(float, elems[4:])))\n                cameras[camera_id] = Camera(id=camera_id, model=model, width=width, height=height, params=params)\n    return cameras\n\n\ndef read_cameras_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_cameras = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_cameras):\n            camera_properties = read_next_bytes(fid, num_bytes=24, format_char_sequence=\"iiQQ\")\n            camera_id = camera_properties[0]\n            model_id = camera_properties[1]\n            model_name = CAMERA_MODEL_IDS[camera_properties[1]].model_name\n            width = camera_properties[2]\n            height = camera_properties[3]\n            num_params = CAMERA_MODEL_IDS[model_id].num_params\n            params = read_next_bytes(fid, num_bytes=8 * num_params, format_char_sequence=\"d\" * num_params)\n            cameras[camera_id] = Camera(\n                id=camera_id, model=model_name, width=width, height=height, params=np.array(params)\n            )\n        assert len(cameras) == num_cameras\n    return cameras\n\n\ndef write_cameras_text(cameras, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasText(const std::string& path)\n        void Reconstruction::ReadCamerasText(const std::string& path)\n    \"\"\"\n    HEADER = (\n        \"# Camera list with one line of data per camera:\\n\"\n        + \"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\\n\"\n        + \"# Number of cameras: {}\\n\".format(len(cameras))\n    )\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, cam in cameras.items():\n            to_write = [cam.id, cam.model, cam.width, cam.height, *cam.params]\n            line = \" \".join([str(elem) for elem in to_write])\n            fid.write(line + \"\\n\")\n\n\ndef write_cameras_binary(cameras, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(cameras), \"Q\")\n        for _, cam in cameras.items():\n            model_id = CAMERA_MODEL_NAMES[cam.model].model_id\n            camera_properties = [cam.id, model_id, cam.width, cam.height]\n            write_next_bytes(fid, camera_properties, \"iiQQ\")\n            for p in cam.params:\n                write_next_bytes(fid, float(p), \"d\")\n    return cameras\n\n\ndef read_images_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesText(const std::string& path)\n        void Reconstruction::WriteImagesText(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                image_id = int(elems[0])\n                qvec = np.array(tuple(map(float, elems[1:5])))\n                tvec = np.array(tuple(map(float, elems[5:8])))\n                camera_id = int(elems[8])\n                image_name = elems[9]\n                elems = fid.readline().split()\n                xys = np.column_stack([tuple(map(float, elems[0::3])), tuple(map(float, elems[1::3]))])\n                point3D_ids = np.array(tuple(map(int, elems[2::3])))\n                images[image_id] = Image(\n                    id=image_id,\n                    qvec=qvec,\n                    tvec=tvec,\n                    camera_id=camera_id,\n                    name=image_name,\n                    xys=xys,\n                    point3D_ids=point3D_ids,\n                )\n    return images\n\n\ndef read_images_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_reg_images = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_reg_images):\n            binary_image_properties = read_next_bytes(fid, num_bytes=64, format_char_sequence=\"idddddddi\")\n            image_id = binary_image_properties[0]\n            qvec = np.array(binary_image_properties[1:5])\n            tvec = np.array(binary_image_properties[5:8])\n            camera_id = binary_image_properties[8]\n            image_name = b\"\"\n            current_char = read_next_bytes(fid, 1, \"c\")[0]\n            while current_char != b\"\\x00\":  # look for the ASCII 0 entry\n                image_name += current_char\n                current_char = read_next_bytes(fid, 1, \"c\")[0]\n            image_name = image_name.decode(\"utf-8\")\n            num_points2D = read_next_bytes(fid, num_bytes=8, format_char_sequence=\"Q\")[0]\n            x_y_id_s = read_next_bytes(fid, num_bytes=24 * num_points2D, format_char_sequence=\"ddq\" * num_points2D)\n            xys = np.column_stack([tuple(map(float, x_y_id_s[0::3])), tuple(map(float, x_y_id_s[1::3]))])\n            point3D_ids = np.array(tuple(map(int, x_y_id_s[2::3])))\n            images[image_id] = Image(\n                id=image_id,\n                qvec=qvec,\n                tvec=tvec,\n                camera_id=camera_id,\n                name=image_name,\n                xys=xys,\n                point3D_ids=point3D_ids,\n            )\n    return images\n\n\ndef write_images_text(images, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesText(const std::string& path)\n        void Reconstruction::WriteImagesText(const std::string& path)\n    \"\"\"\n    if len(images) == 0:\n        mean_observations = 0\n    else:\n        mean_observations = sum((len(img.point3D_ids) for _, img in images.items())) / len(images)\n    HEADER = (\n        \"# Image list with two lines of data per image:\\n\"\n        + \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\\n\"\n        + \"#   POINTS2D[] as (X, Y, POINT3D_ID)\\n\"\n        + \"# Number of images: {}, mean observations per image: {}\\n\".format(len(images), mean_observations)\n    )\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, img in images.items():\n            image_header = [img.id, *img.qvec, *img.tvec, img.camera_id, img.name]\n            first_line = \" \".join(map(str, image_header))\n            fid.write(first_line + \"\\n\")\n\n            points_strings = []\n            for xy, point3D_id in zip(img.xys, img.point3D_ids):\n                points_strings.append(\" \".join(map(str, [*xy, point3D_id])))\n            fid.write(\" \".join(points_strings) + \"\\n\")\n\n\ndef write_images_binary(images, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(images), \"Q\")\n        for _, img in images.items():\n            write_next_bytes(fid, img.id, \"i\")\n            write_next_bytes(fid, img.qvec.tolist(), \"dddd\")\n            write_next_bytes(fid, img.tvec.tolist(), \"ddd\")\n            write_next_bytes(fid, img.camera_id, \"i\")\n            for char in img.name:\n                write_next_bytes(fid, char.encode(\"utf-8\"), \"c\")\n            write_next_bytes(fid, b\"\\x00\", \"c\")\n            write_next_bytes(fid, len(img.point3D_ids), \"Q\")\n            for xy, p3d_id in zip(img.xys, img.point3D_ids):\n                write_next_bytes(fid, [*xy, p3d_id], \"ddq\")\n\n\ndef read_points3D_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    points3D = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                point3D_id = int(elems[0])\n                xyz = np.array(tuple(map(float, elems[1:4])))\n                rgb = np.array(tuple(map(int, elems[4:7])))\n                error = float(elems[7])\n                image_ids = np.array(tuple(map(int, elems[8::2])))\n                point2D_idxs = np.array(tuple(map(int, elems[9::2])))\n                points3D[point3D_id] = Point3D(\n                    id=point3D_id, xyz=xyz, rgb=rgb, error=error, image_ids=image_ids, point2D_idxs=point2D_idxs\n                )\n    return points3D\n\n\ndef read_points3D_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n    points3D = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_points = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_points):\n            binary_point_line_properties = read_next_bytes(fid, num_bytes=43, format_char_sequence=\"QdddBBBd\")\n            point3D_id = binary_point_line_properties[0]\n            xyz = np.array(binary_point_line_properties[1:4])\n            rgb = np.array(binary_point_line_properties[4:7])\n            error = np.array(binary_point_line_properties[7])\n            track_length = read_next_bytes(fid, num_bytes=8, format_char_sequence=\"Q\")[0]\n            track_elems = read_next_bytes(fid, num_bytes=8 * track_length, format_char_sequence=\"ii\" * track_length)\n            image_ids = np.array(tuple(map(int, track_elems[0::2])))\n            point2D_idxs = np.array(tuple(map(int, track_elems[1::2])))\n            points3D[point3D_id] = Point3D(\n                id=point3D_id, xyz=xyz, rgb=rgb, error=error, image_ids=image_ids, point2D_idxs=point2D_idxs\n            )\n    return points3D\n\n\ndef write_points3D_text(points3D, path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    if len(points3D) == 0:\n        mean_track_length = 0\n    else:\n        mean_track_length = sum((len(pt.image_ids) for _, pt in points3D.items())) / len(points3D)\n    HEADER = (\n        \"# 3D point list with one line of data per point:\\n\"\n        + \"#   POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)\\n\"\n        + \"# Number of points: {}, mean track length: {}\\n\".format(len(points3D), mean_track_length)\n    )\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, pt in points3D.items():\n            point_header = [pt.id, *pt.xyz, *pt.rgb, pt.error]\n            fid.write(\" \".join(map(str, point_header)) + \" \")\n            track_strings = []\n            for image_id, point2D in zip(pt.image_ids, pt.point2D_idxs):\n                track_strings.append(\" \".join(map(str, [image_id, point2D])))\n            fid.write(\" \".join(track_strings) + \"\\n\")\n\n\ndef write_points3D_binary(points3D, path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(points3D), \"Q\")\n        for _, pt in points3D.items():\n            write_next_bytes(fid, pt.id, \"Q\")\n            write_next_bytes(fid, pt.xyz.tolist(), \"ddd\")\n            write_next_bytes(fid, pt.rgb.tolist(), \"BBB\")\n            write_next_bytes(fid, pt.error, \"d\")\n            track_length = pt.image_ids.shape[0]\n            write_next_bytes(fid, track_length, \"Q\")\n            for image_id, point2D_id in zip(pt.image_ids, pt.point2D_idxs):\n                write_next_bytes(fid, [image_id, point2D_id], \"ii\")\n\n\ndef detect_model_format(path, ext):\n    if (\n        os.path.isfile(os.path.join(path, \"cameras\" + ext))\n        and os.path.isfile(os.path.join(path, \"images\" + ext))\n        and os.path.isfile(os.path.join(path, \"points3D\" + ext))\n    ):\n        print(\"Detected model format: '\" + ext + \"'\")\n        return True\n\n    return False\n\n\ndef read_model(path, ext=\"\"):\n    # try to detect the extension automatically\n    if ext == \"\":\n        if detect_model_format(path, \".bin\"):\n            ext = \".bin\"\n        elif detect_model_format(path, \".txt\"):\n            ext = \".txt\"\n        else:\n            print(\"Provide model format: '.bin' or '.txt'\")\n            return\n\n    if ext == \".txt\":\n        cameras = read_cameras_text(os.path.join(path, \"cameras\" + ext))\n        images = read_images_text(os.path.join(path, \"images\" + ext))\n        points3D = read_points3D_text(os.path.join(path, \"points3D\") + ext)\n    else:\n        cameras = read_cameras_binary(os.path.join(path, \"cameras\" + ext))\n        images = read_images_binary(os.path.join(path, \"images\" + ext))\n        points3D = read_points3D_binary(os.path.join(path, \"points3D\") + ext)\n    return cameras, images, points3D\n\n\ndef write_model(cameras, images, points3D, path, ext=\".bin\"):\n    if ext == \".txt\":\n        write_cameras_text(cameras, os.path.join(path, \"cameras\" + ext))\n        write_images_text(images, os.path.join(path, \"images\" + ext))\n        write_points3D_text(points3D, os.path.join(path, \"points3D\") + ext)\n    else:\n        write_cameras_binary(cameras, os.path.join(path, \"cameras\" + ext))\n        write_images_binary(images, os.path.join(path, \"images\" + ext))\n        write_points3D_binary(points3D, os.path.join(path, \"points3D\") + ext)\n    return cameras, images, points3D\n\n\ndef qvec2rotmat(qvec):\n    return np.array(\n        [\n            [\n                1 - 2 * qvec[2] ** 2 - 2 * qvec[3] ** 2,\n                2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],\n                2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2],\n            ],\n            [\n                2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],\n                1 - 2 * qvec[1] ** 2 - 2 * qvec[3] ** 2,\n                2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1],\n            ],\n            [\n                2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],\n                2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],\n                1 - 2 * qvec[1] ** 2 - 2 * qvec[2] ** 2,\n            ],\n        ]\n    )\n\n\ndef rotmat2qvec(R):\n    Rxx, Ryx, Rzx, Rxy, Ryy, Rzy, Rxz, Ryz, Rzz = R.flat\n    K = (\n        np.array(\n            [  # type: ignore\n                [Rxx - Ryy - Rzz, 0, 0, 0],\n                [Ryx + Rxy, Ryy - Rxx - Rzz, 0, 0],\n                [Rzx + Rxz, Rzy + Ryz, Rzz - Rxx - Ryy, 0],\n                [Ryz - Rzy, Rzx - Rxz, Rxy - Ryx, Rxx + Ryy + Rzz],\n            ]\n        )\n        / 3.0\n    )\n    eigvals, eigvecs = np.linalg.eigh(K)\n    qvec = eigvecs[[3, 0, 1, 2], np.argmax(eigvals)]\n    if qvec[0] < 0:\n        qvec *= -1\n    return qvec\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/data_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Utility functions to allow easy re-use of common operations across dataloaders\"\"\"\n\nfrom pathlib import Path\nfrom typing import List, Tuple, Union\n\nimport cv2\nimport numpy as np\nimport torch\nfrom PIL import Image\n\n\ndef get_image_mask_tensor_from_path(filepath: Path, scale_factor: float = 1.0) -> torch.Tensor:\n    \"\"\"\n    Utility function to read a mask image from the given path and return a boolean tensor\n    \"\"\"\n    pil_mask = Image.open(filepath)\n    if scale_factor != 1.0:\n        width, height = pil_mask.size\n        newsize = (int(width * scale_factor), int(height * scale_factor))\n        pil_mask = pil_mask.resize(newsize, resample=Image.Resampling.NEAREST)\n    mask_tensor = torch.from_numpy(np.array(pil_mask)).unsqueeze(-1).bool()\n    if len(mask_tensor.shape) != 3:\n        raise ValueError(\"The mask image should have 1 channel\")\n    return mask_tensor\n\n\ndef get_semantics_and_mask_tensors_from_path(\n    filepath: Path, mask_indices: Union[List, torch.Tensor], scale_factor: float = 1.0\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"\n    Utility function to read segmentation from the given filepath\n    If no mask is required - use mask_indices = []\n    \"\"\"\n    if isinstance(mask_indices, List):\n        mask_indices = torch.tensor(mask_indices, dtype=torch.int64).view(1, 1, -1)\n    pil_image = Image.open(filepath)\n    if scale_factor != 1.0:\n        width, height = pil_image.size\n        newsize = (int(width * scale_factor), int(height * scale_factor))\n        pil_image = pil_image.resize(newsize, resample=Image.Resampling.NEAREST)\n    semantics = torch.from_numpy(np.array(pil_image, dtype=\"int64\"))[..., None]\n    mask = torch.sum(semantics == mask_indices, dim=-1, keepdim=True) == 0\n    return semantics, mask\n\n\ndef get_depth_image_from_path(\n    filepath: Path,\n    height: int,\n    width: int,\n    scale_factor: float,\n    interpolation: int = cv2.INTER_NEAREST,\n) -> torch.Tensor:\n    \"\"\"Loads, rescales and resizes depth images.\n    Filepath points to a 16-bit or 32-bit depth image, or a numpy array `*.npy`.\n\n    Args:\n        filepath: Path to depth image.\n        height: Target depth image height.\n        width: Target depth image width.\n        scale_factor: Factor by which to scale depth image.\n        interpolation: Depth value interpolation for resizing.\n\n    Returns:\n        Depth image torch tensor with shape [height, width, 1].\n    \"\"\"\n    if filepath.suffix == \".npy\":\n        image = np.load(filepath).astype(np.float32) * scale_factor\n        image = cv2.resize(image, (width, height), interpolation=interpolation)\n    else:\n        image = cv2.imread(str(filepath.absolute()), cv2.IMREAD_ANYDEPTH)\n        image = image.astype(np.float32) * scale_factor\n        image = cv2.resize(image, (width, height), interpolation=interpolation)\n    return torch.from_numpy(image[:, :, np.newaxis])\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/dataloaders.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode for sampling images from a dataset of images.\n\"\"\"\n\n# for multithreading\nimport concurrent.futures\nimport multiprocessing\nimport random\nfrom abc import abstractmethod\nfrom typing import Any, Callable, Dict, List, Optional, Sized, Tuple, Union\n\nimport torch\nfrom rich.progress import track\nfrom torch.utils.data import Dataset\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.utils.nerfstudio_collate import nerfstudio_collate\nfrom nerfstudio.utils.misc import get_dict_to_torch\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\nclass CacheDataloader(DataLoader):\n    \"\"\"Collated image dataset that implements caching of default-pytorch-collatable data.\n    Creates batches of the InputDataset return type.\n\n    Args:\n        dataset: Dataset to sample from.\n        num_samples_to_collate: How many images to sample rays for each batch. -1 for all images.\n        num_times_to_repeat_images: How often to collate new images. -1 to never pick new images.\n        device: Device to perform computation.\n        collate_fn: The function we will use to collate our training data\n    \"\"\"\n\n    def __init__(\n        self,\n        dataset: Dataset,\n        num_images_to_sample_from: int = -1,\n        num_times_to_repeat_images: int = -1,\n        device: Union[torch.device, str] = \"cpu\",\n        collate_fn: Callable[[Any], Any] = nerfstudio_collate,\n        exclude_batch_keys_from_device: Optional[List[str]] = None,\n        **kwargs,\n    ):\n        if exclude_batch_keys_from_device is None:\n            exclude_batch_keys_from_device = [\"image\"]\n        self.dataset = dataset\n        assert isinstance(self.dataset, Sized)\n\n        super().__init__(dataset=dataset, **kwargs)  # This will set self.dataset\n        self.num_times_to_repeat_images = num_times_to_repeat_images\n        self.cache_all_images = (num_images_to_sample_from == -1) or (num_images_to_sample_from >= len(self.dataset))\n        self.num_images_to_sample_from = len(self.dataset) if self.cache_all_images else num_images_to_sample_from\n        self.device = device\n        self.collate_fn = collate_fn\n        self.num_workers = kwargs.get(\"num_workers\", 0)\n        self.exclude_batch_keys_from_device = exclude_batch_keys_from_device\n\n        self.num_repeated = self.num_times_to_repeat_images  # starting value\n        self.first_time = True\n\n        self.cached_collated_batch = None\n        if self.cache_all_images:\n            CONSOLE.print(f\"Caching all {len(self.dataset)} images.\")\n            if len(self.dataset) > 500:\n                CONSOLE.print(\n                    \"[bold yellow]Warning: If you run out of memory, try reducing the number of images to sample from.\"\n                )\n            self.cached_collated_batch = self._get_collated_batch()\n        elif self.num_times_to_repeat_images == -1:\n            CONSOLE.print(\n                f\"Caching {self.num_images_to_sample_from} out of {len(self.dataset)} images, without resampling.\"\n            )\n        else:\n            CONSOLE.print(\n                f\"Caching {self.num_images_to_sample_from} out of {len(self.dataset)} images, \"\n                f\"resampling every {self.num_times_to_repeat_images} iters.\"\n            )\n\n    def __getitem__(self, idx):\n        return self.dataset.__getitem__(idx)\n\n    def _get_batch_list(self):\n        \"\"\"Returns a list of batches from the dataset attribute.\"\"\"\n\n        assert isinstance(self.dataset, Sized)\n        indices = random.sample(range(len(self.dataset)), k=self.num_images_to_sample_from)\n        batch_list = []\n        results = []\n\n        num_threads = int(self.num_workers) * 4\n        num_threads = min(num_threads, multiprocessing.cpu_count() - 1)\n        num_threads = max(num_threads, 1)\n\n        with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:\n            for idx in indices:\n                res = executor.submit(self.dataset.__getitem__, idx)\n                results.append(res)\n\n            for res in track(results, description=\"Loading data batch\", transient=True):\n                batch_list.append(res.result())\n\n        return batch_list\n\n    def _get_collated_batch(self):\n        \"\"\"Returns a collated batch.\"\"\"\n        batch_list = self._get_batch_list()\n        collated_batch = self.collate_fn(batch_list)\n        collated_batch = get_dict_to_torch(\n            collated_batch, device=self.device, exclude=self.exclude_batch_keys_from_device\n        )\n        return collated_batch\n\n    def __iter__(self):\n        while True:\n            if self.cache_all_images:\n                collated_batch = self.cached_collated_batch\n            elif self.first_time or (\n                self.num_times_to_repeat_images != -1 and self.num_repeated >= self.num_times_to_repeat_images\n            ):\n                # trigger a reset\n                self.num_repeated = 0\n                collated_batch = self._get_collated_batch()\n                # possibly save a cached item\n                self.cached_collated_batch = collated_batch if self.num_times_to_repeat_images != 0 else None\n                self.first_time = False\n            else:\n                collated_batch = self.cached_collated_batch\n                self.num_repeated += 1\n            yield collated_batch\n\n\nclass EvalDataloader(DataLoader):\n    \"\"\"Evaluation dataloader base class\n\n    Args:\n        input_dataset: InputDataset to load data from\n        device: Device to load data to\n    \"\"\"\n\n    def __init__(\n        self,\n        input_dataset: InputDataset,\n        device: Union[torch.device, str] = \"cpu\",\n        **kwargs,\n    ):\n        self.input_dataset = input_dataset\n        self.cameras = input_dataset.cameras.to(device)\n        self.device = device\n        self.kwargs = kwargs\n        super().__init__(dataset=input_dataset)\n\n    @abstractmethod\n    def __iter__(self):\n        \"\"\"Iterates over the dataset\"\"\"\n        return self\n\n    @abstractmethod\n    def __next__(self) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the next batch of data\"\"\"\n\n    def get_camera(self, image_idx: int = 0) -> Tuple[Cameras, Dict]:\n        \"\"\"Get camera for the given image index\n\n        Args:\n            image_idx: Camera image index\n        \"\"\"\n        camera = self.cameras[image_idx : image_idx + 1]\n        batch = self.input_dataset[image_idx]\n        batch = get_dict_to_torch(batch, device=self.device, exclude=[\"image\"])\n        assert isinstance(batch, dict)\n        return camera, batch\n\n    def get_data_from_image_idx(self, image_idx: int) -> Tuple[RayBundle, Dict]:\n        \"\"\"Returns the data for a specific image index.\n\n        Args:\n            image_idx: Camera image index\n        \"\"\"\n        ray_bundle = self.cameras.generate_rays(camera_indices=image_idx, keep_shape=True)\n        batch = self.input_dataset[image_idx]\n        batch = get_dict_to_torch(batch, device=self.device, exclude=[\"image\"])\n        assert isinstance(batch, dict)\n        return ray_bundle, batch\n\n\nclass FixedIndicesEvalDataloader(EvalDataloader):\n    \"\"\"Dataloader that returns a fixed set of indices.\n\n    Args:\n        input_dataset: InputDataset to load data from\n        image_indices: List of image indices to load data from. If None, then use all images.\n        device: Device to load data to\n    \"\"\"\n\n    def __init__(\n        self,\n        input_dataset: InputDataset,\n        image_indices: Optional[Tuple[int]] = None,\n        device: Union[torch.device, str] = \"cpu\",\n        **kwargs,\n    ):\n        super().__init__(input_dataset, device, **kwargs)\n        if image_indices is None:\n            self.image_indices = list(range(len(input_dataset)))\n        else:\n            self.image_indices = image_indices\n        self.count = 0\n\n    def __iter__(self):\n        self.count = 0\n        return self\n\n    def __next__(self):\n        if self.count < len(self.image_indices):\n            image_idx = self.image_indices[self.count]\n            camera, batch = self.get_camera(image_idx)\n            self.count += 1\n            return camera, batch\n        raise StopIteration\n\n\nclass RandIndicesEvalDataloader(EvalDataloader):\n    \"\"\"Dataloader that returns random images.\n    Args:\n        input_dataset: InputDataset to load data from\n        device: Device to load data to\n    \"\"\"\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        # choose a random image index\n        image_idx = random.randint(0, len(self.cameras) - 1)\n        camera, batch = self.get_camera(image_idx)\n        return camera, batch\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/dataparsers_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data parser utils for nerfstudio datasets.\"\"\"\n\nimport math\nimport os\nfrom typing import List, Tuple\n\nimport numpy as np\n\n\ndef get_train_eval_split_fraction(image_filenames: List, train_split_fraction: float) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Get the train/eval split fraction based on the number of images and the train split fraction.\n\n    Args:\n        image_filenames: list of image filenames\n        train_split_fraction: fraction of images to use for training\n    \"\"\"\n\n    # filter image_filenames and poses based on train/eval split percentage\n    num_images = len(image_filenames)\n    num_train_images = math.ceil(num_images * train_split_fraction)\n    num_eval_images = num_images - num_train_images\n    i_all = np.arange(num_images)\n    i_train = np.linspace(\n        0, num_images - 1, num_train_images, dtype=int\n    )  # equally spaced training images starting and ending at 0 and num_images-1\n    i_eval = np.setdiff1d(i_all, i_train)  # eval images are the remaining images\n    assert len(i_eval) == num_eval_images\n\n    return i_train, i_eval\n\n\ndef get_train_eval_split_filename(image_filenames: List) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Get the train/eval split based on the filename of the images.\n\n    Args:\n        image_filenames: list of image filenames\n    \"\"\"\n\n    num_images = len(image_filenames)\n    basenames = [os.path.basename(image_filename) for image_filename in image_filenames]\n    i_all = np.arange(num_images)\n    i_train = []\n    i_eval = []\n    for idx, basename in zip(i_all, basenames):\n        # check the frame index\n        if \"train\" in basename:\n            i_train.append(idx)\n        elif \"eval\" in basename:\n            i_eval.append(idx)\n        else:\n            raise ValueError(\"frame should contain train/eval in its name to use this eval-frame-index eval mode\")\n\n    return np.array(i_train), np.array(i_eval)\n\n\ndef get_train_eval_split_interval(image_filenames: List, eval_interval: float) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Get the train/eval split based on the interval of the images.\n\n    Args:\n        image_filenames: list of image filenames\n        eval_interval: interval of images to use for eval\n    \"\"\"\n\n    num_images = len(image_filenames)\n    all_indices = np.arange(num_images)\n    train_indices = all_indices[all_indices % eval_interval != 0]\n    eval_indices = all_indices[all_indices % eval_interval == 0]\n    i_train = train_indices\n    i_eval = eval_indices\n\n    return i_train, i_eval\n\n\ndef get_train_eval_split_all(image_filenames: List) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Get the train/eval split where all indices are used for both train and eval.\n\n    Args:\n        image_filenames: list of image filenames\n    \"\"\"\n    num_images = len(image_filenames)\n    i_all = np.arange(num_images)\n    i_train = i_all\n    i_eval = i_all\n    return i_train, i_eval\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/nerfstudio_collate.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCustom collate function that includes cases for nerfstudio types.\n\"\"\"\n\nimport collections\nimport collections.abc\nimport re\nfrom typing import Any, Callable, Dict, Union\n\nimport torch\nimport torch.utils.data\n\nfrom nerfstudio.cameras.cameras import Cameras\n\nNERFSTUDIO_COLLATE_ERR_MSG_FORMAT = (\n    \"default_collate: batch must contain tensors, numpy arrays, numbers, \" \"dicts, lists or anything in {}; found {}\"\n)\nnp_str_obj_array_pattern = re.compile(r\"[SaUO]\")\n\n\ndef nerfstudio_collate(batch: Any, extra_mappings: Union[Dict[type, Callable], None] = None) -> Any:\n    r\"\"\"\n    This is the default pytorch collate function, but with support for nerfstudio types. All documentation\n    below is copied straight over from pytorch's default_collate function, python version 3.8.13,\n    pytorch version '1.12.1+cu113'. Custom nerfstudio types are accounted for at the end, and extra\n    mappings can be passed in to handle custom types. These mappings are from types: callable (types\n    being like int or float or the return value of type(3.), etc). The only code before we parse for custom types that\n    was changed from default pytorch was the addition of the extra_mappings argument, a find and replace operation\n    from default_collate to nerfstudio_collate, and the addition of the nerfstudio_collate_err_msg_format variable.\n\n\n    Function that takes in a batch of data and puts the elements within the batch\n    into a tensor with an additional outer dimension - batch size. The exact output type can be\n    a :class:`torch.Tensor`, a `Sequence` of :class:`torch.Tensor`, a\n    Collection of :class:`torch.Tensor`, or left unchanged, depending on the input type.\n    This is used as the default function for collation when\n    `batch_size` or `batch_sampler` is defined in :class:`~torch.utils.data.DataLoader`.\n\n    Here is the general input type (based on the type of the element within the batch) to output type mapping:\n\n        * :class:`torch.Tensor` -> :class:`torch.Tensor` (with an added outer dimension batch size)\n        * NumPy Arrays -> :class:`torch.Tensor`\n        * `float` -> :class:`torch.Tensor`\n        * `int` -> :class:`torch.Tensor`\n        * `str` -> `str` (unchanged)\n        * `bytes` -> `bytes` (unchanged)\n        * `Mapping[K, V_i]` -> `Mapping[K, nerfstudio_collate([V_1, V_2, ...])]`\n        * `NamedTuple[V1_i, V2_i, ...]` -> `NamedTuple[nerfstudio_collate([V1_1, V1_2, ...]),\n          nerfstudio_collate([V2_1, V2_2, ...]), ...]`\n        * `Sequence[V1_i, V2_i, ...]` -> `Sequence[nerfstudio_collate([V1_1, V1_2, ...]),\n          nerfstudio_collate([V2_1, V2_2, ...]), ...]`\n\n    Args:\n        batch: a single batch to be collated\n\n    Examples:\n        >>> # Example with a batch of `int`s:\n        >>> nerfstudio_collate([0, 1, 2, 3])\n        tensor([0, 1, 2, 3])\n        >>> # Example with a batch of `str`s:\n        >>> nerfstudio_collate(['a', 'b', 'c'])\n        ['a', 'b', 'c']\n        >>> # Example with `Map` inside the batch:\n        >>> nerfstudio_collate([{'A': 0, 'B': 1}, {'A': 100, 'B': 100}])\n        {'A': tensor([  0, 100]), 'B': tensor([  1, 100])}\n        >>> # Example with `NamedTuple` inside the batch:\n        >>> Point = namedtuple('Point', ['x', 'y'])\n        >>> nerfstudio_collate([Point(0, 0), Point(1, 1)])\n        Point(x=tensor([0, 1]), y=tensor([0, 1]))\n        >>> # Example with `Tuple` inside the batch:\n        >>> nerfstudio_collate([(0, 1), (2, 3)])\n        [tensor([0, 2]), tensor([1, 3])]\n        >>> # Example with `List` inside the batch:\n        >>> nerfstudio_collate([[0, 1], [2, 3]])\n        [tensor([0, 2]), tensor([1, 3])]\n    \"\"\"\n    if extra_mappings is None:\n        extra_mappings = {}\n    elem = batch[0]\n    elem_type = type(elem)\n    if isinstance(elem, torch.Tensor):\n        out = None\n        if torch.utils.data.get_worker_info() is not None:\n            # If we're in a background process, concatenate directly into a\n            # shared memory tensor to avoid an extra copy\n            numel = sum(x.numel() for x in batch)\n            storage = elem.storage()._new_shared(numel, device=elem.device)\n            out = elem.new(storage).resize_(len(batch), *list(elem.size()))\n        return torch.stack(batch, 0, out=out)\n    elif elem_type.__module__ == \"numpy\" and elem_type.__name__ not in (\"str_\", \"string_\"):\n        if elem_type.__name__ in (\"ndarray\", \"memmap\"):\n            # array of string classes and object\n            if np_str_obj_array_pattern.search(elem.dtype.str) is not None:\n                raise TypeError(NERFSTUDIO_COLLATE_ERR_MSG_FORMAT.format(elem.dtype))\n\n            return nerfstudio_collate([torch.as_tensor(b) for b in batch], extra_mappings=extra_mappings)\n        elif elem.shape == ():  # scalars\n            return torch.as_tensor(batch)\n    elif isinstance(elem, float):\n        return torch.tensor(batch, dtype=torch.float64)\n    elif isinstance(elem, int):\n        return torch.tensor(batch)\n    elif isinstance(elem, (str, bytes)):\n        return batch\n    elif isinstance(elem, collections.abc.Mapping):\n        try:\n            return elem_type(\n                {key: nerfstudio_collate([d[key] for d in batch], extra_mappings=extra_mappings) for key in elem}\n            )\n        except TypeError:\n            # The mapping type may not support `__init__(iterable)`.\n            return {key: nerfstudio_collate([d[key] for d in batch], extra_mappings=extra_mappings) for key in elem}\n    elif isinstance(elem, tuple) and hasattr(elem, \"_fields\"):  # namedtuple\n        return elem_type(*(nerfstudio_collate(samples, extra_mappings=extra_mappings) for samples in zip(*batch)))\n    elif isinstance(elem, collections.abc.Sequence):\n        # check to make sure that the elements in batch have consistent size\n        it = iter(batch)\n        elem_size = len(next(it))\n        if not all(len(elem) == elem_size for elem in it):\n            raise RuntimeError(\"each element in list of batch should be of equal size\")\n        transposed = list(zip(*batch))  # It may be accessed twice, so we use a list.\n\n        if isinstance(elem, tuple):\n            return [\n                nerfstudio_collate(samples, extra_mappings=extra_mappings) for samples in transposed\n            ]  # Backwards compatibility.\n        else:\n            try:\n                return elem_type([nerfstudio_collate(samples, extra_mappings=extra_mappings) for samples in transposed])\n            except TypeError:\n                # The sequence type may not support `__init__(iterable)` (e.g., `range`).\n                return [nerfstudio_collate(samples, extra_mappings=extra_mappings) for samples in transposed]\n\n    # NerfStudio types supported below\n\n    elif isinstance(elem, Cameras):\n        # If a camera, just concatenate along the batch dimension. In the future, this may change to stacking\n        assert all((isinstance(cam, Cameras) for cam in batch))\n        assert all((cam.distortion_params is None for cam in batch)) or all(\n            (cam.distortion_params is not None for cam in batch)\n        ), \"All cameras must have distortion parameters or none of them should have distortion parameters.\\\n            Generalized batching will be supported in the future.\"\n\n        if batch[0].metadata is not None:\n            metadata_keys = batch[0].metadata.keys()\n            assert all(\n                (cam.metadata.keys() == metadata_keys for cam in batch)\n            ), \"All cameras must have the same metadata keys.\"\n        else:\n            assert all((cam.metadata is None for cam in batch)), \"All cameras must have the same metadata keys.\"\n\n        if batch[0].times is not None:\n            assert all((cam.times is not None for cam in batch)), \"All cameras must have times present or absent.\"\n        else:\n            assert all((cam.times is None for cam in batch)), \"All cameras must have times present or absent.\"\n\n        # If no batch dimension exists, then we need to stack everything and create a batch dimension on 0th dim\n        if elem.shape == ():\n            op = torch.stack\n        # If batch dimension exists, then we need to concatenate along the 0th dimension\n        else:\n            op = torch.cat\n\n        # Create metadata dictionary\n        if batch[0].metadata is not None:\n            metadata = {key: op([cam.metadata[key] for cam in batch], dim=0) for key in batch[0].metadata.keys()}\n        else:\n            metadata = None\n\n        if batch[0].distortion_params is not None:\n            distortion_params = op(\n                [cameras.distortion_params for cameras in batch],\n                dim=0,\n            )\n        else:\n            distortion_params = None\n\n        if batch[0].times is not None:\n            times = torch.stack([cameras.times for cameras in batch], dim=0)\n        else:\n            times = None\n\n        return Cameras(\n            op([cameras.camera_to_worlds for cameras in batch], dim=0),\n            op([cameras.fx for cameras in batch], dim=0),\n            op([cameras.fy for cameras in batch], dim=0),\n            op([cameras.cx for cameras in batch], dim=0),\n            op([cameras.cy for cameras in batch], dim=0),\n            height=op([cameras.height for cameras in batch], dim=0),\n            width=op([cameras.width for cameras in batch], dim=0),\n            distortion_params=distortion_params,\n            camera_type=op([cameras.camera_type for cameras in batch], dim=0),\n            times=times,\n            metadata=metadata,\n        )\n\n    for type_key in extra_mappings:\n        if isinstance(elem, type_key):\n            return extra_mappings[type_key](batch)\n\n    raise TypeError(NERFSTUDIO_COLLATE_ERR_MSG_FORMAT.format(elem_type))\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/data/utils/pixel_sampling_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Pixel sampling utils such as eroding of valid masks that we sample from.\"\"\"\n\nimport math\nfrom typing import List\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\n\ndef dilate(tensor: Float[Tensor, \"bs 1 H W\"], kernel_size=3) -> Float[Tensor, \"bs 1 H W\"]:\n    \"\"\"Dilate a tensor with 0s and 1s. 0s will be be expanded based on the kernel size.\n\n    Args:\n        kernel_size: Size of the pooling region. Dilates/contracts 1 pixel if kernel_size is 3.\n    \"\"\"\n    if not (tensor.dtype == torch.float32 and torch.all((tensor == 0) | (tensor == 1))):\n        raise ValueError(\"Input tensor should contain only values 0 and 1, and should have dtype torch.float32.\")\n\n    return torch.nn.functional.max_pool2d(tensor, kernel_size=kernel_size, stride=1, padding=(kernel_size - 1) // 2)\n\n\ndef erode(tensor: Float[Tensor, \"bs 1 H W\"], kernel_size=3) -> Float[Tensor, \"bs 1 H W\"]:\n    \"\"\"Erode a tensor with 0s and 1s. 1s will be expanded based on the kernel size.\n\n    Args:\n        kernel_size: Size of the pooling region. Erodes/expands 1 pixel if kernel_size is 3.\n    \"\"\"\n    if not (tensor.dtype == torch.float32 and torch.all((tensor == 0) | (tensor == 1))):\n        raise ValueError(\"Input tensor should contain only values 0 and 1, and should have dtype torch.float32.\")\n\n    # Invert the tensor, dilate, and re-invert\n    eroded = 1 - dilate(1 - tensor, kernel_size=kernel_size)\n\n    # Use padding to control edge effects (set edge pixels to 0)\n    p = (kernel_size - 1) // 2\n    return torch.nn.functional.pad(eroded[:, :, p:-p, p:-p], pad=(p, p, p, p), mode=\"constant\", value=0)\n\n\ndef erode_mask(tensor: Float[Tensor, \"bs 1 H W\"], pixel_radius: int = 1) -> Float[Tensor, \"bs 1 H W\"]:\n    \"\"\"Erode a mask. Expands 1 values to nearby pixels with a max pooling operation.\n    A pixel radius of 1 will also extend the 1s along the diagonal.\n\n    Args:\n        pixel_radius: The number of pixels away from valid pixels (1s) that we may sample.\n    \"\"\"\n    kernel_size = 1 + 2 * pixel_radius\n    return erode(tensor, kernel_size=kernel_size)\n\n\ndef divide_rays_per_image(num_rays_per_batch: int, num_images: int) -> List[int]:\n    \"\"\"Divide the batch of rays per image. Finds the optimal number of rays per image such that\n    it's still divisible by 2 and sums to the total number of rays.\n\n    Args:\n        num_rays_per_batch: Number of rays in the batch.\n        num_images: Number of images in the batch.\n\n    Returns:\n        num_rays_per_image: A list of the number of rays per image.\n    \"\"\"\n    num_rays_per_image = num_rays_per_batch / num_images\n    residual = num_rays_per_image % 2\n    num_rays_per_image_under = int(num_rays_per_image - residual)\n    num_rays_per_image_over = int(num_rays_per_image_under + 2)\n    num_images_under = math.ceil(num_images * (1 - residual / 2))\n    num_images_over = num_images - num_images_under\n    num_rays_per_image = num_images_under * [num_rays_per_image_under] + num_images_over * [num_rays_per_image_over]\n    num_rays_per_image[-1] += num_rays_per_batch - sum(num_rays_per_image)\n    return num_rays_per_image\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/engine/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/engine/callbacks.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCallback code used for training iterations\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom enum import Enum, auto\nfrom inspect import signature\nfrom typing import TYPE_CHECKING, Callable, Dict, List, Optional, Tuple\n\nfrom torch.cuda.amp.grad_scaler import GradScaler\n\nfrom nerfstudio.engine.optimizers import Optimizers\n\nif TYPE_CHECKING:\n    from nerfstudio.engine.trainer import Trainer\n    from nerfstudio.pipelines.base_pipeline import Pipeline\n\n\n@dataclass\nclass TrainingCallbackAttributes:\n    \"\"\"Attributes that can be used to configure training callbacks.\n    The callbacks can be specified in the Dataloader or Model implementations.\n    Instead of providing access to the entire Trainer object, we only provide these attributes.\n    This should be least prone to errors and fairly clean from a user perspective.\"\"\"\n\n    optimizers: Optional[Optimizers]\n    \"\"\"optimizers for training\"\"\"\n    grad_scaler: Optional[GradScaler]\n    \"\"\"gradient scalers\"\"\"\n    pipeline: Optional[\"Pipeline\"]  # Prevent circular import.\n    \"\"\"reference to training pipeline\"\"\"\n    trainer: Optional[\"Trainer\"]  # Prevent circular import.\n    \"\"\"reference to trainer\"\"\"\n\n\nclass TrainingCallbackLocation(Enum):\n    \"\"\"Enum for specifying where the training callback should be run.\"\"\"\n\n    BEFORE_TRAIN_ITERATION = auto()\n    AFTER_TRAIN_ITERATION = auto()\n    AFTER_TRAIN = auto()\n\n\nclass TrainingCallback:\n    \"\"\"Callback class used during training.\n    The function 'func' with 'args' and 'kwargs' will be called every 'update_every_num_iters' training iterations,\n    including at iteration 0. The function is called after the training iteration.\n\n    Args:\n        where_to_run: List of locations for when to run callback (before/after iteration)\n        func: The function that will be called.\n        update_every_num_iters: How often to call the function `func`.\n        iters: Tuple of iteration steps to perform callback\n        args: args for the function 'func'.\n        kwargs: kwargs for the function 'func'.\n    \"\"\"\n\n    def __init__(\n        self,\n        where_to_run: List[TrainingCallbackLocation],\n        func: Callable,\n        update_every_num_iters: Optional[int] = None,\n        iters: Optional[Tuple[int, ...]] = None,\n        args: Optional[List] = None,\n        kwargs: Optional[Dict] = None,\n    ):\n        assert (\n            \"step\" in signature(func).parameters.keys()\n        ), f\"'step: int' must be an argument in the callback function 'func': {func.__name__}\"\n        self.where_to_run = where_to_run\n        self.update_every_num_iters = update_every_num_iters\n        self.iters = iters\n        self.func = func\n        self.args = args if args is not None else []\n        self.kwargs = kwargs if kwargs is not None else {}\n\n    def run_callback(self, step: int) -> None:\n        \"\"\"Callback to run after training step\n\n        Args:\n            step: current iteration step\n        \"\"\"\n        if self.update_every_num_iters is not None:\n            if step % self.update_every_num_iters == 0:\n                self.func(*self.args, **self.kwargs, step=step)\n        elif self.iters is not None:\n            if step in self.iters:\n                self.func(*self.args, **self.kwargs, step=step)\n        else:\n            self.func(*self.args, **self.kwargs, step=step)\n\n    def run_callback_at_location(self, step: int, location: TrainingCallbackLocation) -> None:\n        \"\"\"Runs the callback if it's supposed to be run at the given location.\n\n        Args:\n            step: current iteration step\n            location: when to run callback (before/after iteration)\n        \"\"\"\n        if location in self.where_to_run:\n            self.run_callback(step=step)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/engine/optimizers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nOptimizers class.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom typing import Any, Dict, List, Optional, Type\n\nimport torch\nfrom torch.cuda.amp.grad_scaler import GradScaler\nfrom torch.nn.parameter import Parameter\n\nfrom nerfstudio.configs import base_config\nfrom nerfstudio.utils import writer\n\n\n# Optimizer related configs\n@dataclass\nclass OptimizerConfig(base_config.PrintableConfig):\n    \"\"\"Basic optimizer config with RAdam\"\"\"\n\n    _target: Type = torch.optim.Adam\n    \"\"\"The optimizer class to use.\"\"\"\n    lr: float = 0.0005\n    \"\"\"The learning rate to use.\"\"\"\n    eps: float = 1e-08\n    \"\"\"The epsilon value to use.\"\"\"\n    max_norm: Optional[float] = None\n    \"\"\"The max norm to use for gradient clipping.\"\"\"\n\n    # TODO: somehow make this more generic. i dont like the idea of overriding the setup function\n    # but also not sure how to go about passing things into predefined torch objects.\n    def setup(self, params) -> torch.optim.Optimizer:\n        \"\"\"Returns the instantiated object using the config.\"\"\"\n        kwargs = vars(self).copy()\n        kwargs.pop(\"_target\")\n        kwargs.pop(\"max_norm\")\n        return self._target(params, **kwargs)\n\n\n@dataclass\nclass AdamOptimizerConfig(OptimizerConfig):\n    \"\"\"Basic optimizer config with Adam\"\"\"\n\n    _target: Type = torch.optim.Adam\n    weight_decay: float = 0\n    \"\"\"The weight decay to use.\"\"\"\n\n\n@dataclass\nclass RAdamOptimizerConfig(OptimizerConfig):\n    \"\"\"Basic optimizer config with RAdam\"\"\"\n\n    _target: Type = torch.optim.RAdam\n    weight_decay: float = 0\n    \"\"\"The weight decay to use.\"\"\"\n\n\nclass Optimizers:\n    \"\"\"A set of optimizers.\n\n    Args:\n        config: The optimizer configuration object.\n        param_groups: A dictionary of parameter groups to optimize.\n    \"\"\"\n\n    def __init__(self, config: Dict[str, Any], param_groups: Dict[str, List[Parameter]]) -> None:\n        self.config = config\n        self.optimizers = {}\n        self.schedulers = {}\n        self.parameters = {}\n        for param_group_name, params in param_groups.items():\n            # For deprecation, catch the camera_opt param group and fix it nicely\n            if param_group_name == \"camera_opt\" and \"camera_opt\" not in config:\n                from nerfstudio.engine.schedulers import ExponentialDecaySchedulerConfig\n                from nerfstudio.utils.rich_utils import CONSOLE\n\n                CONSOLE.print(\n                    \"\\nThe 'camera_opt' param group should be assigned an optimizer in the config. Assigning default optimizers for now. This will be removed in a future release.\\n\",\n                    style=\"bold yellow\",\n                )\n\n                config[\"camera_opt\"] = {\n                    \"optimizer\": AdamOptimizerConfig(lr=1e-3, eps=1e-15),\n                    \"scheduler\": ExponentialDecaySchedulerConfig(lr_final=1e-4, max_steps=30000),\n                }\n            # Print some nice warning messages if the user forgot to specify an optimizer\n            if param_group_name not in config:\n                raise RuntimeError(\n                    f\"\"\"Optimizer config for '{param_group_name}' not found in config file. Make sure you specify an optimizer for each parameter group. Provided configs were: {config.keys()}\"\"\"\n                )\n            lr_init = config[param_group_name][\"optimizer\"].lr\n            self.optimizers[param_group_name] = config[param_group_name][\"optimizer\"].setup(params=params)\n            self.parameters[param_group_name] = params\n            if config[param_group_name][\"scheduler\"]:\n                self.schedulers[param_group_name] = (\n                    config[param_group_name][\"scheduler\"]\n                    .setup()\n                    .get_scheduler(optimizer=self.optimizers[param_group_name], lr_init=lr_init)\n                )\n\n    def optimizer_step(self, param_group_name: str) -> None:\n        \"\"\"Fetch and step corresponding optimizer.\n\n        Args:\n            param_group_name: name of optimizer to step forward\n        \"\"\"\n        self.optimizers[param_group_name].step()\n\n    def scheduler_step(self, param_group_name: str) -> None:\n        \"\"\"Fetch and step corresponding scheduler.\n\n        Args:\n            param_group_name: name of scheduler to step forward\n        \"\"\"\n        if \"scheduler\" in self.config[param_group_name]:\n            self.schedulers[param_group_name].step()\n\n    def zero_grad_all(self) -> None:\n        \"\"\"Zero the gradients for all optimizer parameters.\"\"\"\n        for _, optimizer in self.optimizers.items():\n            optimizer.zero_grad()\n\n    def zero_grad_some(self, param_groups: List[str]) -> None:\n        \"\"\"Zero the gradients for the given parameter groups.\"\"\"\n        for param_group in param_groups:\n            optimizer = self.optimizers[param_group]\n            optimizer.zero_grad()\n\n    def optimizer_scaler_step_all(self, grad_scaler: GradScaler) -> None:\n        \"\"\"Take an optimizer step using a grad scaler.\n\n        Args:\n            grad_scaler: GradScaler to use\n        \"\"\"\n        for param_group, optimizer in self.optimizers.items():\n            max_norm = self.config[param_group][\"optimizer\"].max_norm\n            if max_norm is not None:\n                grad_scaler.unscale_(optimizer)\n                torch.nn.utils.clip_grad_norm_(self.parameters[param_group], max_norm)\n            if any(any(p.grad is not None for p in g[\"params\"]) for g in optimizer.param_groups):\n                grad_scaler.step(optimizer)\n\n    def optimizer_scaler_step_some(self, grad_scaler: GradScaler, param_groups: List[str]) -> None:\n        \"\"\"Take an optimizer step using a grad scaler ONLY on the specified param groups.\n\n        Args:\n            grad_scaler: GradScaler to use\n        \"\"\"\n        for param_group in param_groups:\n            optimizer = self.optimizers[param_group]\n            max_norm = self.config[param_group][\"optimizer\"].max_norm\n            if max_norm is not None:\n                grad_scaler.unscale_(optimizer)\n                torch.nn.utils.clip_grad_norm_(self.parameters[param_group], max_norm)\n            if any(any(p.grad is not None for p in g[\"params\"]) for g in optimizer.param_groups):\n                grad_scaler.step(optimizer)\n\n    def optimizer_step_all(self) -> None:\n        \"\"\"Run step for all optimizers.\"\"\"\n        for param_group, optimizer in self.optimizers.items():\n            # note that they key is the parameter name\n            max_norm = self.config[param_group][\"optimizer\"].max_norm\n            if max_norm is not None:\n                torch.nn.utils.clip_grad_norm_(self.parameters[param_group], max_norm)\n            optimizer.step()\n\n    def scheduler_step_all(self, step: int) -> None:\n        \"\"\"Run step for all schedulers.\n\n        Args:\n            step: the current step\n        \"\"\"\n        for param_group_name, scheduler in self.schedulers.items():\n            scheduler.step()\n            # TODO(ethan): clean this up. why is there indexing into a list?\n            lr = scheduler.get_last_lr()[0]\n            writer.put_scalar(name=f\"learning_rate/{param_group_name}\", scalar=lr, step=step)\n\n    def load_optimizers(self, loaded_state: Dict[str, Any]) -> None:\n        \"\"\"Helper to load the optimizer state from previous checkpoint\n\n        Args:\n            loaded_state: the state from the previous checkpoint\n        \"\"\"\n        for k, v in loaded_state.items():\n            self.optimizers[k].load_state_dict(v)\n\n    def load_schedulers(self, loaded_state: Dict[str, Any]) -> None:\n        \"\"\"Helper to load the scheduler state from previous checkpoint\n\n        Args:\n            loaded_state: the state from the previous checkpoint\n        \"\"\"\n        for k, v in loaded_state.items():\n            self.schedulers[k].load_state_dict(v)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/engine/schedulers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"Scheduler Classes\"\"\"\n\nfrom abc import abstractmethod\nfrom dataclasses import dataclass, field\nfrom typing import Literal, Optional, Tuple, Type\n\nimport numpy as np\nfrom torch.optim import Optimizer, lr_scheduler\n\ntry:\n    from torch.optim.lr_scheduler import LRScheduler\nexcept ImportError:\n    # Backwards compatibility for PyTorch 1.x\n    from torch.optim.lr_scheduler import _LRScheduler as LRScheduler\n\nfrom nerfstudio.configs.base_config import InstantiateConfig\n\n\n@dataclass\nclass SchedulerConfig(InstantiateConfig):\n    \"\"\"Basic scheduler config\"\"\"\n\n    _target: Type = field(default_factory=lambda: Scheduler)\n    \"\"\"target class to instantiate\"\"\"\n\n\nclass Scheduler:\n    \"\"\"Base scheduler\"\"\"\n\n    config: SchedulerConfig\n\n    def __init__(self, config: SchedulerConfig) -> None:\n        super().__init__()\n        self.config = config\n\n    @abstractmethod\n    def get_scheduler(self, optimizer: Optimizer, lr_init: float) -> LRScheduler:\n        \"\"\"Abstract method that returns a scheduler object.\n\n        Args:\n            optimizer: The optimizer to use.\n            lr_init: The initial learning rate.\n        Returns:\n            The scheduler object.\n        \"\"\"\n\n\n@dataclass\nclass MultiStepSchedulerConfig(SchedulerConfig):\n    \"\"\"Config for multi step scheduler where lr decays by gamma every milestone\"\"\"\n\n    _target: Type = field(default_factory=lambda: MultiStepScheduler)\n    \"\"\"target class to instantiate\"\"\"\n    max_steps: int = 1000000\n    \"\"\"The maximum number of steps.\"\"\"\n    gamma: float = 0.33\n    \"\"\"The learning rate decay factor.\"\"\"\n    milestones: Tuple[int, ...] = (500000, 750000, 900000)\n    \"\"\"The milestone steps at which to decay the learning rate.\"\"\"\n\n\nclass MultiStepScheduler(Scheduler):\n    \"\"\"Multi step scheduler where lr decays by gamma every milestone\"\"\"\n\n    config: MultiStepSchedulerConfig\n\n    def get_scheduler(self, optimizer: Optimizer, lr_init: float) -> LRScheduler:\n        scheduler = lr_scheduler.MultiStepLR(\n            optimizer=optimizer,\n            milestones=self.config.milestones,\n            gamma=self.config.gamma,\n        )\n        return scheduler\n\n\n@dataclass\nclass ExponentialDecaySchedulerConfig(SchedulerConfig):\n    \"\"\"Config for exponential decay scheduler with warmup\"\"\"\n\n    _target: Type = field(default_factory=lambda: ExponentialDecayScheduler)\n    \"\"\"target class to instantiate\"\"\"\n    lr_pre_warmup: float = 1e-8\n    \"\"\"Learning rate before warmup.\"\"\"\n    lr_final: Optional[float] = None\n    \"\"\"Final learning rate. If not provided, it will be set to the optimizers learning rate.\"\"\"\n    warmup_steps: int = 0\n    \"\"\"Number of warmup steps.\"\"\"\n    max_steps: int = 100000\n    \"\"\"The maximum number of steps.\"\"\"\n    ramp: Literal[\"linear\", \"cosine\"] = \"cosine\"\n    \"\"\"The ramp function to use during the warmup.\"\"\"\n\n\nclass ExponentialDecayScheduler(Scheduler):\n    \"\"\"Exponential decay scheduler with linear warmup. Scheduler first ramps up to `lr_init` in `warmup_steps`\n    steps, then exponentially decays to `lr_final` in `max_steps` steps.\n    \"\"\"\n\n    config: ExponentialDecaySchedulerConfig\n\n    def get_scheduler(self, optimizer: Optimizer, lr_init: float) -> LRScheduler:\n        if self.config.lr_final is None:\n            lr_final = lr_init\n        else:\n            lr_final = self.config.lr_final\n\n        def func(step):\n            if step < self.config.warmup_steps:\n                if self.config.ramp == \"cosine\":\n                    lr = self.config.lr_pre_warmup + (lr_init - self.config.lr_pre_warmup) * np.sin(\n                        0.5 * np.pi * np.clip(step / self.config.warmup_steps, 0, 1)\n                    )\n                else:\n                    lr = (\n                        self.config.lr_pre_warmup\n                        + (lr_init - self.config.lr_pre_warmup) * step / self.config.warmup_steps\n                    )\n            else:\n                t = np.clip(\n                    (step - self.config.warmup_steps) / (self.config.max_steps - self.config.warmup_steps), 0, 1\n                )\n                lr = np.exp(np.log(lr_init) * (1 - t) + np.log(lr_final) * t)\n            return lr / lr_init  # divided by lr_init because the multiplier is with the initial learning rate\n\n        scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=func)\n        return scheduler\n\n\n@dataclass\nclass CosineDecaySchedulerConfig(SchedulerConfig):\n    \"\"\"Config for cosine decay schedule\"\"\"\n\n    _target: Type = field(default_factory=lambda: CosineDecayScheduler)\n    \"\"\"target class to instantiate\"\"\"\n    warm_up_end: int = 5000\n    \"\"\"Iteration number where warmp ends\"\"\"\n    learning_rate_alpha: float = 0.05\n    \"\"\"Learning rate alpha value\"\"\"\n    max_steps: int = 300000\n    \"\"\"The maximum number of steps.\"\"\"\n\n\nclass CosineDecayScheduler(Scheduler):\n    \"\"\"Cosine decay scheduler with linear warmup\"\"\"\n\n    config: CosineDecaySchedulerConfig\n\n    def get_scheduler(self, optimizer: Optimizer, lr_init: float) -> LRScheduler:\n        def func(step):\n            if step < self.config.warm_up_end:\n                learning_factor = step / self.config.warm_up_end\n            else:\n                alpha = self.config.learning_rate_alpha\n                progress = (step - self.config.warm_up_end) / (self.config.max_steps - self.config.warm_up_end)\n                learning_factor = (np.cos(np.pi * progress) + 1.0) * 0.5 * (1 - alpha) + alpha\n            return learning_factor\n\n        scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=func)\n        return scheduler\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/engine/trainer.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode to train model.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport dataclasses\nimport functools\nimport os\nimport time\nfrom collections import defaultdict\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom threading import Lock\nfrom typing import DefaultDict, Dict, List, Literal, Optional, Tuple, Type, cast\n\nimport torch\nimport viser\nfrom rich import box, style\nfrom rich.panel import Panel\nfrom rich.table import Table\nfrom torch.cuda.amp.grad_scaler import GradScaler\n\nfrom nerfstudio.configs.experiment_config import ExperimentConfig\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.engine.optimizers import Optimizers\nfrom nerfstudio.pipelines.base_pipeline import VanillaPipeline\nfrom nerfstudio.utils import profiler, writer\nfrom nerfstudio.utils.decorators import check_eval_enabled, check_main_thread, check_viewer_enabled\nfrom nerfstudio.utils.misc import step_check\nfrom nerfstudio.utils.rich_utils import CONSOLE\nfrom nerfstudio.utils.writer import EventName, TimeWriter\nfrom nerfstudio.viewer.viewer import Viewer as ViewerState\nfrom nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState\n\nTRAIN_INTERATION_OUTPUT = Tuple[torch.Tensor, Dict[str, torch.Tensor], Dict[str, torch.Tensor]]\nTORCH_DEVICE = str\n\n\n@dataclass\nclass TrainerConfig(ExperimentConfig):\n    \"\"\"Configuration for training regimen\"\"\"\n\n    _target: Type = field(default_factory=lambda: Trainer)\n    \"\"\"target class to instantiate\"\"\"\n    steps_per_save: int = 1000\n    \"\"\"Number of steps between saves.\"\"\"\n    steps_per_eval_batch: int = 500\n    \"\"\"Number of steps between randomly sampled batches of rays.\"\"\"\n    steps_per_eval_image: int = 500\n    \"\"\"Number of steps between single eval images.\"\"\"\n    steps_per_eval_all_images: int = 25000\n    \"\"\"Number of steps between eval all images.\"\"\"\n    max_num_iterations: int = 1000000\n    \"\"\"Maximum number of iterations to run.\"\"\"\n    mixed_precision: bool = False\n    \"\"\"Whether or not to use mixed precision for training.\"\"\"\n    use_grad_scaler: bool = False\n    \"\"\"Use gradient scaler even if the automatic mixed precision is disabled.\"\"\"\n    save_only_latest_checkpoint: bool = True\n    \"\"\"Whether to only save the latest checkpoint or all checkpoints.\"\"\"\n    # optional parameters if we want to resume training\n    load_dir: Optional[Path] = None\n    \"\"\"Optionally specify a pre-trained model directory to load from.\"\"\"\n    load_step: Optional[int] = None\n    \"\"\"Optionally specify model step to load from; if none, will find most recent model in load_dir.\"\"\"\n    load_config: Optional[Path] = None\n    \"\"\"Path to config YAML file.\"\"\"\n    load_checkpoint: Optional[Path] = None\n    \"\"\"Path to checkpoint file.\"\"\"\n    log_gradients: bool = False\n    \"\"\"Optionally log gradients during training\"\"\"\n    gradient_accumulation_steps: Dict[str, int] = field(default_factory=lambda: {})\n    \"\"\"Number of steps to accumulate gradients over. Contains a mapping of {param_group:num}\"\"\"\n    start_paused: bool = False\n    \"\"\"Whether to start the training in a paused state.\"\"\"\n\n\nclass Trainer:\n    \"\"\"Trainer class\n\n    Args:\n        config: The configuration object.\n        local_rank: Local rank of the process.\n        world_size: World size of the process.\n\n    Attributes:\n        config: The configuration object.\n        local_rank: Local rank of the process.\n        world_size: World size of the process.\n        device: The device to run the training on.\n        pipeline: The pipeline object.\n        optimizers: The optimizers object.\n        callbacks: The callbacks object.\n        training_state: Current model training state.\n    \"\"\"\n\n    pipeline: VanillaPipeline\n    optimizers: Optimizers\n    callbacks: List[TrainingCallback]\n\n    def __init__(self, config: TrainerConfig, local_rank: int = 0, world_size: int = 1) -> None:\n        self.train_lock = Lock()\n        self.config = config\n        self.local_rank = local_rank\n        self.world_size = world_size\n        self.device: TORCH_DEVICE = config.machine.device_type\n        if self.device == \"cuda\":\n            self.device += f\":{local_rank}\"\n        self.mixed_precision: bool = self.config.mixed_precision\n        self.use_grad_scaler: bool = self.mixed_precision or self.config.use_grad_scaler\n        self.training_state: Literal[\"training\", \"paused\", \"completed\"] = (\n            \"paused\" if self.config.start_paused else \"training\"\n        )\n        self.gradient_accumulation_steps: DefaultDict = defaultdict(lambda: 1)\n        self.gradient_accumulation_steps.update(self.config.gradient_accumulation_steps)\n\n        if self.device == \"cpu\":\n            self.mixed_precision = False\n            CONSOLE.print(\"Mixed precision is disabled for CPU training.\")\n        self._start_step: int = 0\n        # optimizers\n        self.grad_scaler = GradScaler(enabled=self.use_grad_scaler)\n\n        self.base_dir: Path = config.get_base_dir()\n        # directory to save checkpoints\n        self.checkpoint_dir: Path = config.get_checkpoint_dir()\n        CONSOLE.log(f\"Saving checkpoints to: {self.checkpoint_dir}\")\n\n        self.viewer_state = None\n\n        # used to keep track of the current step\n        self.step = 0\n\n    def setup(self, test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\") -> None:\n        \"\"\"Setup the Trainer by calling other setup functions.\n\n        Args:\n            test_mode:\n                'val': loads train/val datasets into memory\n                'test': loads train/test datasets into memory\n                'inference': does not load any dataset into memory\n        \"\"\"\n        self.pipeline = self.config.pipeline.setup(\n            device=self.device,\n            test_mode=test_mode,\n            world_size=self.world_size,\n            local_rank=self.local_rank,\n            grad_scaler=self.grad_scaler,\n        )\n        self.optimizers = self.setup_optimizers()\n\n        # set up viewer if enabled\n        viewer_log_path = self.base_dir / self.config.viewer.relative_log_filename\n        self.viewer_state, banner_messages = None, None\n        if self.config.is_viewer_legacy_enabled() and self.local_rank == 0:\n            datapath = self.config.data\n            if datapath is None:\n                datapath = self.base_dir\n            self.viewer_state = ViewerLegacyState(\n                self.config.viewer,\n                log_filename=viewer_log_path,\n                datapath=datapath,\n                pipeline=self.pipeline,\n                trainer=self,\n                train_lock=self.train_lock,\n            )\n            banner_messages = [f\"Legacy viewer at: {self.viewer_state.viewer_url}\"]\n        if self.config.is_viewer_enabled() and self.local_rank == 0:\n            datapath = self.config.data\n            if datapath is None:\n                datapath = self.base_dir\n            self.viewer_state = ViewerState(\n                self.config.viewer,\n                log_filename=viewer_log_path,\n                datapath=datapath,\n                pipeline=self.pipeline,\n                trainer=self,\n                train_lock=self.train_lock,\n                share=self.config.viewer.make_share_url,\n            )\n            banner_messages = self.viewer_state.viewer_info\n        self._check_viewer_warnings()\n\n        self._load_checkpoint()\n\n        self.callbacks = self.pipeline.get_training_callbacks(\n            TrainingCallbackAttributes(\n                optimizers=self.optimizers, grad_scaler=self.grad_scaler, pipeline=self.pipeline, trainer=self\n            )\n        )\n\n        # set up writers/profilers if enabled\n        writer_log_path = self.base_dir / self.config.logging.relative_log_dir\n        writer.setup_event_writer(\n            self.config.is_wandb_enabled(),\n            self.config.is_tensorboard_enabled(),\n            self.config.is_comet_enabled(),\n            log_dir=writer_log_path,\n            experiment_name=self.config.experiment_name,\n            project_name=self.config.project_name,\n        )\n        writer.setup_local_writer(\n            self.config.logging, max_iter=self.config.max_num_iterations, banner_messages=banner_messages\n        )\n        writer.put_config(name=\"config\", config_dict=dataclasses.asdict(self.config), step=0)\n        profiler.setup_profiler(self.config.logging, writer_log_path)\n\n    def setup_optimizers(self) -> Optimizers:\n        \"\"\"Helper to set up the optimizers\n\n        Returns:\n            The optimizers object given the trainer config.\n        \"\"\"\n        optimizer_config = self.config.optimizers.copy()\n        param_groups = self.pipeline.get_param_groups()\n        return Optimizers(optimizer_config, param_groups)\n\n    def train(self) -> None:\n        \"\"\"Train the model.\"\"\"\n        assert self.pipeline.datamanager.train_dataset is not None, \"Missing DatsetInputs\"\n        if hasattr(self.pipeline.datamanager, \"train_dataparser_outputs\"):\n            self.pipeline.datamanager.train_dataparser_outputs.save_dataparser_transform(\n                self.base_dir / \"dataparser_transforms.json\"\n            )\n\n        self._init_viewer_state()\n        with TimeWriter(writer, EventName.TOTAL_TRAIN_TIME):\n            num_iterations = self.config.max_num_iterations\n            step = 0\n            self.stop_training = False\n            for step in range(self._start_step, self._start_step + num_iterations):\n                self.step = step\n                if self.stop_training:\n                    break\n                while self.training_state == \"paused\":\n                    if self.stop_training:\n                        self._after_train()\n                        return\n                    time.sleep(0.01)\n                with self.train_lock:\n                    with TimeWriter(writer, EventName.ITER_TRAIN_TIME, step=step) as train_t:\n                        self.pipeline.train()\n\n                        # training callbacks before the training iteration\n                        for callback in self.callbacks:\n                            callback.run_callback_at_location(\n                                step, location=TrainingCallbackLocation.BEFORE_TRAIN_ITERATION\n                            )\n\n                        # time the forward pass\n                        loss, loss_dict, metrics_dict = self.train_iteration(step)\n\n                        # training callbacks after the training iteration\n                        for callback in self.callbacks:\n                            callback.run_callback_at_location(\n                                step, location=TrainingCallbackLocation.AFTER_TRAIN_ITERATION\n                            )\n\n                # Skip the first two steps to avoid skewed timings that break the viewer rendering speed estimate.\n                if step > 1:\n                    writer.put_time(\n                        name=EventName.TRAIN_RAYS_PER_SEC,\n                        duration=self.world_size\n                        * self.pipeline.datamanager.get_train_rays_per_batch()\n                        / max(0.001, train_t.duration),\n                        step=step,\n                        avg_over_steps=True,\n                    )\n\n                self._update_viewer_state(step)\n\n                # a batch of train rays\n                if step_check(step, self.config.logging.steps_per_log, run_at_zero=True):\n                    writer.put_scalar(name=\"Train Loss\", scalar=loss, step=step)\n                    writer.put_dict(name=\"Train Loss Dict\", scalar_dict=loss_dict, step=step)\n                    writer.put_dict(name=\"Train Metrics Dict\", scalar_dict=metrics_dict, step=step)\n                    # The actual memory allocated by Pytorch. This is likely less than the amount\n                    # shown in nvidia-smi since some unused memory can be held by the caching\n                    # allocator and some context needs to be created on GPU. See Memory management\n                    # (https://pytorch.org/docs/stable/notes/cuda.html#cuda-memory-management)\n                    # for more details about GPU memory management.\n                    writer.put_scalar(\n                        name=\"GPU Memory (MB)\", scalar=torch.cuda.max_memory_allocated() / (1024**2), step=step\n                    )\n\n                # Do not perform evaluation if there are no validation images\n                if self.pipeline.datamanager.eval_dataset:\n                    with self.train_lock:\n                        self.eval_iteration(step)\n\n                if step_check(step, self.config.steps_per_save):\n                    self.save_checkpoint(step)\n\n                writer.write_out_storage()\n\n        # save checkpoint at the end of training, and write out any remaining events\n        self._after_train()\n\n    def shutdown(self) -> None:\n        \"\"\"Stop the trainer and stop all associated threads/processes (such as the viewer).\"\"\"\n        self.stop_training = True  # tell the training loop to stop\n        if self.viewer_state is not None:\n            # stop the viewer\n            # this condition excludes the case where `viser_server` is either `None` or an\n            # instance of `viewer_legacy`'s `ViserServer` instead of the upstream one.\n            if isinstance(self.viewer_state.viser_server, viser.ViserServer):\n                self.viewer_state.viser_server.stop()\n\n    def _after_train(self) -> None:\n        \"\"\"Function to run after training is complete\"\"\"\n        self.training_state = \"completed\"  # used to update the webui state\n        # save checkpoint at the end of training\n        self.save_checkpoint(self.step)\n        # write out any remaining events (e.g., total train time)\n        writer.write_out_storage()\n        table = Table(\n            title=None,\n            show_header=False,\n            box=box.MINIMAL,\n            title_style=style.Style(bold=True),\n        )\n        table.add_row(\"Config File\", str(self.config.get_base_dir() / \"config.yml\"))\n        table.add_row(\"Checkpoint Directory\", str(self.checkpoint_dir))\n        CONSOLE.print(Panel(table, title=\"[bold][green]:tada: Training Finished :tada:[/bold]\", expand=False))\n\n        # after train end callbacks\n        for callback in self.callbacks:\n            callback.run_callback_at_location(step=self.step, location=TrainingCallbackLocation.AFTER_TRAIN)\n\n        if not self.config.viewer.quit_on_train_completion:\n            self._train_complete_viewer()\n\n    @check_main_thread\n    def _check_viewer_warnings(self) -> None:\n        \"\"\"Helper to print out any warnings regarding the way the viewer/loggers are enabled\"\"\"\n        if (\n            (self.config.is_viewer_legacy_enabled() or self.config.is_viewer_enabled())\n            and not self.config.is_tensorboard_enabled()\n            and not self.config.is_wandb_enabled()\n            and not self.config.is_comet_enabled()\n        ):\n            string: str = (\n                \"[NOTE] Not running eval iterations since only viewer is enabled.\\n\"\n                \"Use [yellow]--vis {wandb, tensorboard, viewer+wandb, viewer+tensorboard}[/yellow] to run with eval.\"\n            )\n            CONSOLE.print(f\"{string}\")\n\n    @check_viewer_enabled\n    def _init_viewer_state(self) -> None:\n        \"\"\"Initializes viewer scene with given train dataset\"\"\"\n        assert self.viewer_state and self.pipeline.datamanager.train_dataset\n        self.viewer_state.init_scene(\n            train_dataset=self.pipeline.datamanager.train_dataset,\n            train_state=self.training_state,\n            eval_dataset=self.pipeline.datamanager.eval_dataset,\n        )\n\n    @check_viewer_enabled\n    def _update_viewer_state(self, step: int) -> None:\n        \"\"\"Updates the viewer state by rendering out scene with current pipeline\n        Returns the time taken to render scene.\n\n        Args:\n            step: current train step\n        \"\"\"\n        assert self.viewer_state is not None\n        num_rays_per_batch: int = self.pipeline.datamanager.get_train_rays_per_batch()\n        try:\n            self.viewer_state.update_scene(step, num_rays_per_batch)\n        except RuntimeError:\n            time.sleep(0.03)  # sleep to allow buffer to reset\n            CONSOLE.log(\"Viewer failed. Continuing training.\")\n\n    @check_viewer_enabled\n    def _train_complete_viewer(self) -> None:\n        \"\"\"Let the viewer know that the training is complete\"\"\"\n        assert self.viewer_state is not None\n        self.training_state = \"completed\"\n        try:\n            self.viewer_state.training_complete()\n        except RuntimeError:\n            time.sleep(0.03)  # sleep to allow buffer to reset\n            CONSOLE.log(\"Viewer failed. Continuing training.\")\n        CONSOLE.print(\"Use ctrl+c to quit\", justify=\"center\")\n        while True:\n            time.sleep(0.01)\n\n    @check_viewer_enabled\n    def _update_viewer_rays_per_sec(self, train_t: TimeWriter, vis_t: TimeWriter, step: int) -> None:\n        \"\"\"Performs update on rays/sec calculation for training\n\n        Args:\n            train_t: timer object carrying time to execute total training iteration\n            vis_t: timer object carrying time to execute visualization step\n            step: current step\n        \"\"\"\n        train_num_rays_per_batch: int = self.pipeline.datamanager.get_train_rays_per_batch()\n        writer.put_time(\n            name=EventName.TRAIN_RAYS_PER_SEC,\n            duration=self.world_size * train_num_rays_per_batch / (train_t.duration - vis_t.duration),\n            step=step,\n            avg_over_steps=True,\n        )\n\n    def _load_checkpoint(self) -> None:\n        \"\"\"Helper function to load pipeline and optimizer from prespecified checkpoint\"\"\"\n        load_dir = self.config.load_dir\n        load_checkpoint = self.config.load_checkpoint\n        if load_dir is not None:\n            load_step = self.config.load_step\n            if load_step is None:\n                print(\"Loading latest Nerfstudio checkpoint from load_dir...\")\n                # NOTE: this is specific to the checkpoint name format\n                load_step = sorted(int(x[x.find(\"-\") + 1 : x.find(\".\")]) for x in os.listdir(load_dir))[-1]\n            load_path: Path = load_dir / f\"step-{load_step:09d}.ckpt\"\n            assert load_path.exists(), f\"Checkpoint {load_path} does not exist\"\n            loaded_state = torch.load(load_path, map_location=\"cpu\")\n            self._start_step = loaded_state[\"step\"] + 1\n            # load the checkpoints for pipeline, optimizers, and gradient scalar\n            self.pipeline.load_pipeline(loaded_state[\"pipeline\"], loaded_state[\"step\"])\n            self.optimizers.load_optimizers(loaded_state[\"optimizers\"])\n            if \"schedulers\" in loaded_state and self.config.load_scheduler:\n                self.optimizers.load_schedulers(loaded_state[\"schedulers\"])\n            self.grad_scaler.load_state_dict(loaded_state[\"scalers\"])\n            CONSOLE.print(f\"Done loading Nerfstudio checkpoint from {load_path}\")\n        elif load_checkpoint is not None:\n            assert load_checkpoint.exists(), f\"Checkpoint {load_checkpoint} does not exist\"\n            loaded_state = torch.load(load_checkpoint, map_location=\"cpu\")\n            self._start_step = loaded_state[\"step\"] + 1\n            # load the checkpoints for pipeline, optimizers, and gradient scalar\n            self.pipeline.load_pipeline(loaded_state[\"pipeline\"], loaded_state[\"step\"])\n            self.optimizers.load_optimizers(loaded_state[\"optimizers\"])\n            if \"schedulers\" in loaded_state and self.config.load_scheduler:\n                self.optimizers.load_schedulers(loaded_state[\"schedulers\"])\n            self.grad_scaler.load_state_dict(loaded_state[\"scalers\"])\n            CONSOLE.print(f\"Done loading Nerfstudio checkpoint from {load_checkpoint}\")\n        else:\n            CONSOLE.print(\"No Nerfstudio checkpoint to load, so training from scratch.\")\n\n    @check_main_thread\n    def save_checkpoint(self, step: int) -> None:\n        \"\"\"Save the model and optimizers\n\n        Args:\n            step: number of steps in training for given checkpoint\n        \"\"\"\n        # possibly make the checkpoint directory\n        if not self.checkpoint_dir.exists():\n            self.checkpoint_dir.mkdir(parents=True, exist_ok=True)\n        # save the checkpoint\n        ckpt_path: Path = self.checkpoint_dir / f\"step-{step:09d}.ckpt\"\n        torch.save(\n            {\n                \"step\": step,\n                \"pipeline\": self.pipeline.module.state_dict()  # type: ignore\n                if hasattr(self.pipeline, \"module\")\n                else self.pipeline.state_dict(),\n                \"optimizers\": {k: v.state_dict() for (k, v) in self.optimizers.optimizers.items()},\n                \"schedulers\": {k: v.state_dict() for (k, v) in self.optimizers.schedulers.items()},\n                \"scalers\": self.grad_scaler.state_dict(),\n            },\n            ckpt_path,\n        )\n        # possibly delete old checkpoints\n        if self.config.save_only_latest_checkpoint:\n            # delete every other checkpoint in the checkpoint folder\n            for f in self.checkpoint_dir.glob(\"*.ckpt\"):\n                if f != ckpt_path:\n                    f.unlink()\n\n    @profiler.time_function\n    def train_iteration(self, step: int) -> TRAIN_INTERATION_OUTPUT:\n        \"\"\"Run one iteration with a batch of inputs. Returns dictionary of model losses.\n\n        Args:\n            step: Current training step.\n        \"\"\"\n\n        needs_zero = [\n            group for group in self.optimizers.parameters.keys() if step % self.gradient_accumulation_steps[group] == 0\n        ]\n        self.optimizers.zero_grad_some(needs_zero)\n        cpu_or_cuda_str: str = self.device.split(\":\")[0]\n        cpu_or_cuda_str = \"cpu\" if cpu_or_cuda_str == \"mps\" else cpu_or_cuda_str\n\n        with torch.autocast(device_type=cpu_or_cuda_str, enabled=self.mixed_precision):\n            _, loss_dict, metrics_dict = self.pipeline.get_train_loss_dict(step=step)\n            loss = functools.reduce(torch.add, loss_dict.values())\n        self.grad_scaler.scale(loss).backward()  # type: ignore\n        needs_step = [\n            group\n            for group in self.optimizers.parameters.keys()\n            if step % self.gradient_accumulation_steps[group] == self.gradient_accumulation_steps[group] - 1\n        ]\n        self.optimizers.optimizer_scaler_step_some(self.grad_scaler, needs_step)\n\n        if self.config.log_gradients:\n            total_grad = 0\n            for tag, value in self.pipeline.model.named_parameters():\n                assert tag != \"Total\"\n                if value.grad is not None:\n                    grad = value.grad.norm()\n                    metrics_dict[f\"Gradients/{tag}\"] = grad  # type: ignore\n                    total_grad += grad\n\n            metrics_dict[\"Gradients/Total\"] = cast(torch.Tensor, total_grad)  # type: ignore\n\n        scale = self.grad_scaler.get_scale()\n        self.grad_scaler.update()\n        # If the gradient scaler is decreased, no optimization step is performed so we should not step the scheduler.\n        if scale <= self.grad_scaler.get_scale():\n            self.optimizers.scheduler_step_all(step)\n\n        # Merging loss and metrics dict into a single output.\n        return loss, loss_dict, metrics_dict  # type: ignore\n\n    @check_eval_enabled\n    @profiler.time_function\n    def eval_iteration(self, step: int) -> None:\n        \"\"\"Run one iteration with different batch/image/all image evaluations depending on step size.\n\n        Args:\n            step: Current training step.\n        \"\"\"\n        # a batch of eval rays\n        if step_check(step, self.config.steps_per_eval_batch):\n            _, eval_loss_dict, eval_metrics_dict = self.pipeline.get_eval_loss_dict(step=step)\n            eval_loss = functools.reduce(torch.add, eval_loss_dict.values())\n            writer.put_scalar(name=\"Eval Loss\", scalar=eval_loss, step=step)\n            writer.put_dict(name=\"Eval Loss Dict\", scalar_dict=eval_loss_dict, step=step)\n            writer.put_dict(name=\"Eval Metrics Dict\", scalar_dict=eval_metrics_dict, step=step)\n\n        # one eval image\n        if step_check(step, self.config.steps_per_eval_image):\n            with TimeWriter(writer, EventName.TEST_RAYS_PER_SEC, write=False) as test_t:\n                metrics_dict, images_dict = self.pipeline.get_eval_image_metrics_and_images(step=step)\n            writer.put_time(\n                name=EventName.TEST_RAYS_PER_SEC,\n                duration=metrics_dict[\"num_rays\"] / test_t.duration,\n                step=step,\n                avg_over_steps=True,\n            )\n            writer.put_dict(name=\"Eval Images Metrics\", scalar_dict=metrics_dict, step=step)\n            group = \"Eval Images\"\n            for image_name, image in images_dict.items():\n                writer.put_image(name=group + \"/\" + image_name, image=image, step=step)\n\n        # all eval images\n        if step_check(step, self.config.steps_per_eval_all_images):\n            metrics_dict = self.pipeline.get_average_eval_image_metrics(step=step)\n            writer.put_dict(name=\"Eval Images Metrics Dict (all images)\", scalar_dict=metrics_dict, step=step)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/exporter/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/exporter/exporter_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nExport utils such as structs, point cloud generation, and rendering code.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport sys\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple\n\nimport numpy as np\nimport pymeshlab\nimport torch\nfrom jaxtyping import Float\nfrom rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeRemainingColumn\nfrom torch import Tensor\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.pipelines.base_pipeline import Pipeline, VanillaPipeline\nfrom nerfstudio.utils.rich_utils import CONSOLE, ItersPerSecColumn\n\nif TYPE_CHECKING:\n    # Importing open3d can take ~1 second, so only do it below if we actually\n    # need it.\n    import open3d as o3d\n\n\n@dataclass\nclass Mesh:\n    \"\"\"Class for a mesh.\"\"\"\n\n    vertices: Float[Tensor, \"num_verts 3\"]\n    \"\"\"Vertices of the mesh.\"\"\"\n    faces: Float[Tensor, \"num_faces 3\"]\n    \"\"\"Faces of the mesh.\"\"\"\n    normals: Float[Tensor, \"num_verts 3\"]\n    \"\"\"Normals of the mesh.\"\"\"\n    colors: Optional[Float[Tensor, \"num_verts 3\"]] = None\n    \"\"\"Colors of the mesh.\"\"\"\n\n\ndef get_mesh_from_pymeshlab_mesh(mesh: pymeshlab.Mesh) -> Mesh:  # type: ignore\n    \"\"\"Get a Mesh from a pymeshlab mesh.\n    See https://pymeshlab.readthedocs.io/en/0.1.5/classes/mesh.html for details.\n    \"\"\"\n    return Mesh(\n        vertices=torch.from_numpy(mesh.vertex_matrix()).float(),\n        faces=torch.from_numpy(mesh.face_matrix()).long(),\n        normals=torch.from_numpy(np.copy(mesh.vertex_normal_matrix())).float(),\n        colors=torch.from_numpy(mesh.vertex_color_matrix()).float(),\n    )\n\n\ndef get_mesh_from_filename(filename: str, target_num_faces: Optional[int] = None) -> Mesh:\n    \"\"\"Get a Mesh from a filename.\"\"\"\n    ms = pymeshlab.MeshSet()  # type: ignore\n    ms.load_new_mesh(filename)\n    if target_num_faces is not None:\n        CONSOLE.print(\"Running meshing decimation with quadric edge collapse\")\n        ms.meshing_decimation_quadric_edge_collapse(targetfacenum=target_num_faces)\n    mesh = ms.current_mesh()\n    return get_mesh_from_pymeshlab_mesh(mesh)\n\n\ndef generate_point_cloud(\n    pipeline: Pipeline,\n    num_points: int = 1000000,\n    remove_outliers: bool = True,\n    estimate_normals: bool = False,\n    reorient_normals: bool = False,\n    rgb_output_name: str = \"rgb\",\n    depth_output_name: str = \"depth\",\n    normal_output_name: Optional[str] = None,\n    crop_obb: Optional[OrientedBox] = None,\n    std_ratio: float = 10.0,\n) -> o3d.geometry.PointCloud:\n    \"\"\"Generate a point cloud from a nerf.\n\n    Args:\n        pipeline: Pipeline to evaluate with.\n        num_points: Number of points to generate. May result in less if outlier removal is used.\n        remove_outliers: Whether to remove outliers.\n        reorient_normals: Whether to re-orient the normals based on the view direction.\n        estimate_normals: Whether to estimate normals.\n        rgb_output_name: Name of the RGB output.\n        depth_output_name: Name of the depth output.\n        normal_output_name: Name of the normal output.\n        std_ratio: Threshold based on STD of the average distances across the point cloud to remove outliers.\n\n    Returns:\n        Point cloud.\n    \"\"\"\n\n    progress = Progress(\n        TextColumn(\":cloud: Computing Point Cloud :cloud:\"),\n        BarColumn(),\n        TaskProgressColumn(show_speed=True),\n        TimeRemainingColumn(elapsed_when_finished=True, compact=True),\n        console=CONSOLE,\n    )\n    points = []\n    rgbs = []\n    normals = []\n    view_directions = []\n    with progress as progress_bar:\n        task = progress_bar.add_task(\"Generating Point Cloud\", total=num_points)\n        while not progress_bar.finished:\n            normal = None\n\n            with torch.no_grad():\n                ray_bundle, _ = pipeline.datamanager.next_train(0)\n                assert isinstance(ray_bundle, RayBundle)\n                outputs = pipeline.model(ray_bundle)\n            if rgb_output_name not in outputs:\n                CONSOLE.rule(\"Error\", style=\"red\")\n                CONSOLE.print(f\"Could not find {rgb_output_name} in the model outputs\", justify=\"center\")\n                CONSOLE.print(f\"Please set --rgb_output_name to one of: {outputs.keys()}\", justify=\"center\")\n                sys.exit(1)\n            if depth_output_name not in outputs:\n                CONSOLE.rule(\"Error\", style=\"red\")\n                CONSOLE.print(f\"Could not find {depth_output_name} in the model outputs\", justify=\"center\")\n                CONSOLE.print(f\"Please set --depth_output_name to one of: {outputs.keys()}\", justify=\"center\")\n                sys.exit(1)\n            rgba = pipeline.model.get_rgba_image(outputs, rgb_output_name)\n            depth = outputs[depth_output_name]\n            if normal_output_name is not None:\n                if normal_output_name not in outputs:\n                    CONSOLE.rule(\"Error\", style=\"red\")\n                    CONSOLE.print(f\"Could not find {normal_output_name} in the model outputs\", justify=\"center\")\n                    CONSOLE.print(f\"Please set --normal_output_name to one of: {outputs.keys()}\", justify=\"center\")\n                    sys.exit(1)\n                normal = outputs[normal_output_name]\n                assert (\n                    torch.min(normal) >= 0.0 and torch.max(normal) <= 1.0\n                ), \"Normal values from method output must be in [0, 1]\"\n                normal = (normal * 2.0) - 1.0\n            point = ray_bundle.origins + ray_bundle.directions * depth\n            view_direction = ray_bundle.directions\n\n            # Filter points with opacity lower than 0.5\n            mask = rgba[..., -1] > 0.5\n            point = point[mask]\n            view_direction = view_direction[mask]\n            rgb = rgba[mask][..., :3]\n            if normal is not None:\n                normal = normal[mask]\n\n            if crop_obb is not None:\n                mask = crop_obb.within(point)\n                point = point[mask]\n                rgb = rgb[mask]\n                view_direction = view_direction[mask]\n                if normal is not None:\n                    normal = normal[mask]\n\n            points.append(point)\n            rgbs.append(rgb)\n            view_directions.append(view_direction)\n            if normal is not None:\n                normals.append(normal)\n            progress.advance(task, point.shape[0])\n    points = torch.cat(points, dim=0)\n    rgbs = torch.cat(rgbs, dim=0)\n    view_directions = torch.cat(view_directions, dim=0).cpu()\n\n    import open3d as o3d\n\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(points.double().cpu().numpy())\n    pcd.colors = o3d.utility.Vector3dVector(rgbs.double().cpu().numpy())\n\n    ind = None\n    if remove_outliers:\n        CONSOLE.print(\"Cleaning Point Cloud\")\n        pcd, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=std_ratio)\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Cleaning Point Cloud\")\n        if ind is not None:\n            view_directions = view_directions[ind]\n\n    # either estimate_normals or normal_output_name, not both\n    if estimate_normals:\n        if normal_output_name is not None:\n            CONSOLE.rule(\"Error\", style=\"red\")\n            CONSOLE.print(\"Cannot estimate normals and use normal_output_name at the same time\", justify=\"center\")\n            sys.exit(1)\n        CONSOLE.print(\"Estimating Point Cloud Normals\")\n        pcd.estimate_normals()\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Estimating Point Cloud Normals\")\n    elif normal_output_name is not None:\n        normals = torch.cat(normals, dim=0)\n        if ind is not None:\n            # mask out normals for points that were removed with remove_outliers\n            normals = normals[ind]\n        pcd.normals = o3d.utility.Vector3dVector(normals.double().cpu().numpy())\n\n    # re-orient the normals\n    if reorient_normals:\n        normals = torch.from_numpy(np.array(pcd.normals)).float()\n        mask = torch.sum(view_directions * normals, dim=-1) > 0\n        normals[mask] *= -1\n        pcd.normals = o3d.utility.Vector3dVector(normals.double().cpu().numpy())\n\n    return pcd\n\n\ndef render_trajectory(\n    pipeline: Pipeline,\n    cameras: Cameras,\n    rgb_output_name: str,\n    depth_output_name: str,\n    rendered_resolution_scaling_factor: float = 1.0,\n    disable_distortion: bool = False,\n    return_rgba_images: bool = False,\n) -> Tuple[List[np.ndarray], List[np.ndarray]]:\n    \"\"\"Helper function to create a video of a trajectory.\n\n    Args:\n        pipeline: Pipeline to evaluate with.\n        cameras: Cameras to render.\n        rgb_output_name: Name of the RGB output.\n        depth_output_name: Name of the depth output.\n        rendered_resolution_scaling_factor: Scaling factor to apply to the camera image resolution.\n        disable_distortion: Whether to disable distortion.\n        return_rgba_images: Whether to return RGBA images (default RGB).\n\n    Returns:\n        List of rgb images, list of depth images.\n    \"\"\"\n    images = []\n    depths = []\n    cameras.rescale_output_resolution(rendered_resolution_scaling_factor)\n\n    progress = Progress(\n        TextColumn(\":cloud: Computing rgb and depth images :cloud:\"),\n        BarColumn(),\n        TaskProgressColumn(show_speed=True),\n        ItersPerSecColumn(suffix=\"fps\"),\n        TimeRemainingColumn(elapsed_when_finished=True, compact=True),\n    )\n    with progress:\n        for camera_idx in progress.track(range(cameras.size), description=\"\"):\n            camera_ray_bundle = cameras.generate_rays(\n                camera_indices=camera_idx, disable_distortion=disable_distortion\n            ).to(pipeline.device)\n            with torch.no_grad():\n                outputs = pipeline.model.get_outputs_for_camera_ray_bundle(camera_ray_bundle)\n            if rgb_output_name not in outputs:\n                CONSOLE.rule(\"Error\", style=\"red\")\n                CONSOLE.print(f\"Could not find {rgb_output_name} in the model outputs\", justify=\"center\")\n                CONSOLE.print(f\"Please set --rgb_output_name to one of: {outputs.keys()}\", justify=\"center\")\n                sys.exit(1)\n            if depth_output_name not in outputs:\n                CONSOLE.rule(\"Error\", style=\"red\")\n                CONSOLE.print(f\"Could not find {depth_output_name} in the model outputs\", justify=\"center\")\n                CONSOLE.print(f\"Please set --depth_output_name to one of: {outputs.keys()}\", justify=\"center\")\n                sys.exit(1)\n            if return_rgba_images:\n                image = pipeline.model.get_rgba_image(outputs, rgb_output_name)\n            else:\n                image = outputs[rgb_output_name]\n            images.append(image.cpu().numpy())\n            depths.append(outputs[depth_output_name].cpu().numpy())\n    return images, depths\n\n\ndef collect_camera_poses_for_dataset(\n    dataset: Optional[InputDataset], camera_optimizer: Optional[CameraOptimizer] = None\n) -> List[Dict[str, Any]]:\n    \"\"\"Collects rescaled, translated and optimised camera poses for a dataset.\n\n    Args:\n        dataset: Dataset to collect camera poses for.\n        camera_optimizer: Camera optimizer that has been used for adjusting the poses\n\n    Returns:\n        List of dicts containing camera poses.\n    \"\"\"\n\n    if dataset is None:\n        return []\n\n    cameras = dataset.cameras\n    image_filenames = dataset.image_filenames\n\n    frames: List[Dict[str, Any]] = []\n\n    # new cameras are in cameras, whereas image paths are stored in a private member of the dataset\n    for idx in range(len(cameras)):\n        image_filename = image_filenames[idx]\n        if camera_optimizer is None:\n            transform = cameras.camera_to_worlds[idx].tolist()\n        else:\n            # print('exporting optimized camera pose for camera %d' % idx)\n            camera = cameras[idx : idx + 1]\n            assert camera.metadata is not None\n            camera.metadata[\"cam_idx\"] = idx\n            transform = camera_optimizer.apply_to_camera(camera).tolist()[0]\n\n        frames.append(\n            {\n                \"file_path\": str(image_filename),\n                \"transform\": transform,\n            }\n        )\n\n    return frames\n\n\ndef collect_camera_poses(pipeline: VanillaPipeline) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]:\n    \"\"\"Collects camera poses for train and eval datasets.\n\n    Args:\n        pipeline: Pipeline to evaluate with.\n\n    Returns:\n        List of train camera poses, list of eval camera poses.\n    \"\"\"\n\n    train_dataset = pipeline.datamanager.train_dataset\n    assert isinstance(train_dataset, InputDataset)\n\n    eval_dataset = pipeline.datamanager.eval_dataset\n    assert isinstance(eval_dataset, InputDataset)\n\n    camera_optimizer = None\n    if hasattr(pipeline.model, \"camera_optimizer\"):\n        camera_optimizer = pipeline.model.camera_optimizer\n\n    train_frames = collect_camera_poses_for_dataset(train_dataset, camera_optimizer)\n    # Note: returning original poses, even if --eval-mode=all\n    eval_frames = collect_camera_poses_for_dataset(eval_dataset)\n\n    return train_frames, eval_frames\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/exporter/marching_cubes.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nThis module implements the Marching Cubes algorithm for extracting\nisosurfaces\n\"\"\"\n\nfrom typing import Callable, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport trimesh\nfrom jaxtyping import Bool, Float\nfrom skimage import measure\nfrom torch import Tensor\n\navg_pool_3d = torch.nn.AvgPool3d(2, stride=2)\nupsample = torch.nn.Upsample(scale_factor=2, mode=\"nearest\")\n\n\ndef create_point_pyramid(points: Float[Tensor, \"3 height width depth\"]) -> List[Float[Tensor, \"3 height width depth\"]]:\n    \"\"\"\n    Create a point pyramid for multi-resolution evaluation.\n\n    Args:\n        points: A torch tensor containing 3D points.\n\n    Returns:\n        A list of torch tensors representing points at different resolutions.\n    \"\"\"\n    points_pyramid = [points]\n    for _ in range(3):\n        points = avg_pool_3d(points[None])[0]\n        points_pyramid.append(points)\n    points_pyramid = points_pyramid[::-1]\n    return points_pyramid\n\n\ndef evaluate_sdf(sdf: Callable[[Tensor], Tensor], points: Float[Tensor, \"batch 3\"]) -> Float[Tensor, \"batch\"]:\n    \"\"\"\n    Evaluate a signed distance function (SDF) for a batch of points.\n\n    Args:\n        sdf: A callable function that takes a tensor of size (N, 3) containing\n            3D points and returns a tensor of size (N,) with the SDF values.\n        points: A torch tensor containing 3D points.\n\n    Returns:\n        A torch tensor with the SDF values evaluated at the given points.\n    \"\"\"\n    z: List[Tensor] = []\n    for _, pnts in enumerate(torch.split(points, 100000, dim=0)):\n        z.append(sdf(pnts))\n    return torch.cat(z, dim=0)\n\n\ndef evaluate_multiresolution_sdf(\n    evaluate: Callable,\n    points_pyramid: List[Float[Tensor, \"3 height width depth\"]],\n    coarse_mask: Union[Bool[Tensor, \"1 1 height width depth\"], None],\n    x_max: float,\n    x_min: float,\n    crop_n: int,\n) -> Float[Tensor, \"batch\"]:\n    \"\"\"\n    Evaluate SDF values using a multi-resolution approach with a given point pyramid.\n\n    Args:\n        evaluate: A callable function to evaluate SDF values at given points.\n        points_pyramid: A list of torch tensors representing points at different resolutions.\n        coarse_mask: A binary mask tensor indicating regions of the bounding box where the SDF\n            is expected to have a zero-crossing.\n        x_max: The maximum x-coordinate of the bounding box.\n        x_min: The minimum x-coordinate of the bounding box.\n        crop_n: The resolution of the grid used to sample the SDF.\n\n    Returns:\n        A torch tensor with the SDF values evaluated at the given points.\n    \"\"\"\n    mask = None\n    pts_sdf: Optional[Tensor] = None\n    threshold = 2 * (x_max - x_min) / crop_n * 8\n    for pid, pts in enumerate(points_pyramid):\n        coarse_n = pts.shape[-1]\n        pts = pts.reshape(3, -1).permute(1, 0).contiguous()\n\n        if mask is None:\n            # Only evaluate SDF\n            if coarse_mask is not None:\n                pts_sdf = torch.ones_like(pts[:, 1])\n                valid_mask = torch.nn.functional.grid_sample(coarse_mask, pts[None, None, None])[0, 0, 0, 0] > 0\n                if valid_mask.any():\n                    pts_sdf[valid_mask] = evaluate(pts[valid_mask].contiguous())\n            else:\n                pts_sdf = evaluate(pts)\n        else:\n            mask = mask.reshape(-1)\n            pts_to_eval = pts[mask]\n\n            if pts_to_eval.shape[0] > 0:\n                pts_sdf_eval = evaluate(pts_to_eval.contiguous())\n                assert pts_sdf is not None\n                pts_sdf[mask] = pts_sdf_eval\n\n        if pid < 3:\n            # Update mask\n            assert pts_sdf is not None\n            mask = torch.abs(pts_sdf) < threshold\n            mask = mask.reshape(coarse_n, coarse_n, coarse_n)[None, None]\n            mask = upsample(mask.float()).bool()\n\n            pts_sdf = pts_sdf.reshape(coarse_n, coarse_n, coarse_n)[None, None]\n            pts_sdf = upsample(pts_sdf)\n            assert pts_sdf is not None\n            pts_sdf = pts_sdf.reshape(-1)\n\n        threshold /= 2.0\n\n    assert pts_sdf is not None\n    return pts_sdf\n\n\n@torch.no_grad()\ndef generate_mesh_with_multires_marching_cubes(\n    geometry_callable_field: Callable,\n    resolution: int = 512,\n    bounding_box_min: Tuple[float, float, float] = (-1.0, -1.0, -1.0),\n    bounding_box_max: Tuple[float, float, float] = (1.0, 1.0, 1.0),\n    isosurface_threshold: float = 0.0,\n    coarse_mask: Union[None, Bool[Tensor, \"height width depth\"]] = None,\n) -> trimesh.Trimesh:\n    \"\"\"\n    Computes the isosurface of a signed distance function (SDF) defined by the\n    callable `sdf` in a given bounding box with a specified resolution. The SDF\n    is sampled at a set of points within a regular grid, and the marching cubes\n    algorithm is used to generate a mesh that approximates the isosurface at a\n    specified isovalue `level`.\n\n    Args:\n        sdf: A callable function that takes as input a tensor of size\n            (N, 3) containing 3D points, and returns a tensor of size (N,) containing\n            the signed distance function evaluated at those points.\n        output_path: The output directory where the resulting mesh will be saved.\n        resolution: The resolution of the grid used to sample the SDF.\n        bounding_box_min: The minimum coordinates of the bounding box in which the SDF\n            will be evaluated.\n        bounding_box_max: The maximum coordinates of the bounding box in which the SDF\n            will be evaluated.\n        isosurface_threshold: The isovalue at which to approximate the isosurface.\n        coarse_mask: A binary mask tensor of size (\"height\", \"width\", \"depth\") that indicates the regions\n            of the bounding box where the SDF is expected to have a zero-crossing. If\n            provided, the algorithm first evaluates the SDF at the coarse voxels where\n            the mask is True, and then refines the evaluation within these voxels using\n            a multi-scale approach. If None, evaluates the SDF at all points in the\n            bounding box.\n    Returns:\n        A torch tensor with the SDF values evaluated at the given points.\n    \"\"\"\n    # Check if resolution is divisible by 512\n    assert resolution % 512 == 0, f\"\"\"resolution must be divisible by 512, got {resolution}.\n       This is important because the algorithm uses a multi-resolution approach\n       to evaluate the SDF where the mimimum resolution is 512.\"\"\"\n    # Prepare coarse mask if provided\n    if coarse_mask is not None:\n        coarse_mask = coarse_mask.permute(2, 1, 0)[None, None].cuda().float()\n\n    # Initialize variables\n    crop_n = 512\n    N = resolution // crop_n\n    grid_min = bounding_box_min\n    grid_max = bounding_box_max\n    xs = np.linspace(grid_min[0], grid_max[0], N + 1)\n    ys = np.linspace(grid_min[1], grid_max[1], N + 1)\n    zs = np.linspace(grid_min[2], grid_max[2], N + 1)\n\n    # Initialize meshes list\n    meshes = []\n\n    # Iterate over the grid\n    for i in range(N):\n        for j in range(N):\n            for k in range(N):\n                # Calculate grid cell boundaries\n                x_min, x_max = xs[i], xs[i + 1]\n                y_min, y_max = ys[j], ys[j + 1]\n                z_min, z_max = zs[k], zs[k + 1]\n\n                # Create point grid\n                x = np.linspace(x_min, x_max, crop_n)\n                y = np.linspace(y_min, y_max, crop_n)\n                z = np.linspace(z_min, z_max, crop_n)\n                xx, yy, zz = np.meshgrid(x, y, z, indexing=\"ij\")\n                points = torch.tensor(np.vstack([xx.ravel(), yy.ravel(), zz.ravel()]).T, dtype=torch.float).cuda()\n\n                # Function to evaluate SDF for a batch of points\n                def evaluate(points: torch.Tensor) -> torch.Tensor:\n                    return evaluate_sdf(geometry_callable_field, points)\n\n                # Construct point pyramids\n                points = points.reshape(crop_n, crop_n, crop_n, 3).permute(3, 0, 1, 2)\n                if coarse_mask is not None:\n                    points_tmp = points.permute(1, 2, 3, 0)[None].cuda()\n                    current_mask = torch.nn.functional.grid_sample(coarse_mask, points_tmp)\n                    current_mask = (current_mask > 0.0).cpu().numpy()[0, 0]\n                else:\n                    current_mask = None\n\n                # Create point pyramid for multi-resolution evaluation\n                points_pyramid = create_point_pyramid(points)\n\n                # Evaluate SDF using multi-resolution approach and mask\n                pts_sdf = evaluate_multiresolution_sdf(evaluate, points_pyramid, coarse_mask, x_max, x_min, crop_n)\n\n                z = pts_sdf.detach().cpu().numpy()\n\n                # Skip if no surface found\n                if current_mask is not None:\n                    valid_z = z.reshape(crop_n, crop_n, crop_n)[current_mask]\n                    if valid_z.shape[0] <= 0 or (\n                        np.min(valid_z) > isosurface_threshold or np.max(valid_z) < isosurface_threshold\n                    ):\n                        continue\n\n                if not (np.min(z) > isosurface_threshold or np.max(z) < isosurface_threshold):\n                    z = z.astype(np.float32)\n                    verts, faces, normals, _ = measure.marching_cubes(  # type: ignore\n                        volume=z.reshape(crop_n, crop_n, crop_n),\n                        level=isosurface_threshold,\n                        spacing=(\n                            (x_max - x_min) / (crop_n - 1),\n                            (y_max - y_min) / (crop_n - 1),\n                            (z_max - z_min) / (crop_n - 1),\n                        ),\n                        mask=current_mask,\n                    )\n                    verts = verts + np.array([x_min, y_min, z_min])\n\n                    meshcrop = trimesh.Trimesh(verts, faces, normals)  # type: ignore\n                    meshes.append(meshcrop)\n\n    combined_mesh: trimesh.Trimesh = trimesh.util.concatenate(meshes)  # type: ignore\n    return combined_mesh\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/exporter/texture_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nTexture utils.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom pathlib import Path\nfrom typing import Literal, Optional, Tuple, Union\n\nimport mediapy as media\nimport numpy as np\nimport torch\nimport xatlas\nfrom jaxtyping import Float\nfrom torch import Tensor\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.exporter.exporter_utils import Mesh\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils.rich_utils import CONSOLE, get_progress\n\nTORCH_DEVICE = Union[torch.device, str]\n\n\ndef get_parallelogram_area(\n    p: Float[Tensor, \"*bs 2\"], v0: Float[Tensor, \"*bs 2\"], v1: Float[Tensor, \"*bs 2\"]\n) -> Float[Tensor, \"*bs\"]:\n    \"\"\"Given three 2D points, return the area defined by the parallelogram. I.e., 2x the triangle area.\n\n    Args:\n        p: The origin of the parallelogram.\n        v0: The first vector of the parallelogram.\n        v1: The second vector of the parallelogram.\n\n    Returns:\n        The area of the parallelogram.\n    \"\"\"\n    return (p[..., 0] - v0[..., 0]) * (v1[..., 1] - v0[..., 1]) - (p[..., 1] - v0[..., 1]) * (v1[..., 0] - v0[..., 0])\n\n\ndef get_texture_image(\n    num_pixels_w: int, num_pixels_h: int, device: TORCH_DEVICE\n) -> Tuple[Float[Tensor, \"num_pixels_h num_pixels_w 2\"], Float[Tensor, \"num_pixels_h num_pixels_w 2\"]]:\n    \"\"\"Get a texture image.\"\"\"\n    px_w = 1.0 / num_pixels_w\n    px_h = 1.0 / num_pixels_h\n    uv_indices = torch.stack(\n        torch.meshgrid(\n            torch.arange(num_pixels_w, device=device), torch.arange(num_pixels_h, device=device), indexing=\"xy\"\n        ),\n        dim=-1,\n    )\n    linspace_h = torch.linspace(px_h / 2, 1 - px_h / 2, num_pixels_h, device=device)\n    linspace_w = torch.linspace(px_w / 2, 1 - px_w / 2, num_pixels_w, device=device)\n    uv_coords = torch.stack(\n        torch.meshgrid(linspace_w, linspace_h, indexing=\"xy\"), dim=-1\n    )  # (num_pixels_h, num_pixels_w, 2)\n\n    return uv_coords, uv_indices\n\n\ndef unwrap_mesh_per_uv_triangle(\n    vertices: Float[Tensor, \"num_verts 3\"],\n    faces: Float[Tensor, \"num_faces 3\"],\n    vertex_normals: Float[Tensor, \"num_verts 3\"],\n    px_per_uv_triangle: int,\n) -> Tuple[\n    Float[Tensor, \"num_faces 3 2\"],\n    Float[Tensor, \"num_pixels num_pixels 3\"],\n    Float[Tensor, \"num_pixels num_pixels num_pixels\"],\n]:\n    \"\"\"Unwrap a mesh to a UV texture. This is done by making a grid of rectangles in the UV texture map\n    and then having two triangles per rectangle. Then the texture image is rasterized and uses barycentric\n    interpolation to get the origins and directions, per pixel, that are needed to render the NeRF with.\n\n    Args:\n        vertices: The vertices of the mesh.\n        faces: The faces of the mesh.\n        vertex_normals: The vertex normals of the mesh.\n        px_per_uv_triangle: The number of pixels per UV triangle.\n    \"\"\"\n\n    assert len(vertices) == len(vertex_normals), \"Number of vertices and vertex normals must be equal\"\n    device = vertices.device\n\n    # calculate the number of rectangles needed\n    triangle_padding = 3\n    num_squares = math.ceil(len(faces) / 2)\n    squares_per_side_w = math.ceil(math.sqrt(num_squares))\n    squares_per_side_h = math.ceil(num_squares / squares_per_side_w)\n    px_per_square_w = px_per_uv_triangle + triangle_padding\n    px_per_square_h = px_per_uv_triangle\n    num_pixels_w = squares_per_side_w * px_per_square_w\n    num_pixels_h = squares_per_side_h * px_per_square_h\n\n    # Construct what one square would look like\n    # The height is equal to px_per_uv_triangle pixels.\n    # The width is equal to px_per_uv_triangle + 3 pixels.\n    # v0---------------v1------------------------v2\n    # --Triangle 1---------------------------------\n    # -----------------3px gap---------------------\n    # --------------------------------Triangle 2---\n    # v2-----------------------v1----------------v0\n\n    lr_w = (px_per_uv_triangle + triangle_padding) / num_pixels_w\n    lr_h = (px_per_uv_triangle) / num_pixels_h\n    lr = torch.tensor([lr_w, lr_h], device=device)\n    px_w = 1.0 / num_pixels_w\n    px_h = 1.0 / num_pixels_h\n    px = torch.tensor([px_w, px_h], device=device)\n    edge_len_w = px_per_uv_triangle / num_pixels_w\n    edge_len_h = px_per_uv_triangle / num_pixels_h\n    scalar = (px_per_uv_triangle - 1) / px_per_uv_triangle\n    # uv coords (upper left and lower right)\n    uv_coords_upper_left = torch.tensor([[0, 0], [edge_len_w, 0], [0, edge_len_h]], device=device)\n    # scale for bilinear interpolation reasons\n    uv_coords_upper_left = uv_coords_upper_left * scalar + px / 2\n    lower_right = [lr_w, lr_h]\n    uv_coords_lower_right = torch.tensor(\n        [\n            lower_right,  # lower right\n            [3 * px_w, lr_h],  # lower left\n            [lr_w, 0],  # upper right\n        ],\n        device=device,\n    )\n    # scale for bilinear interpolation reasons\n    uv_coords_lower_right = (\n        (uv_coords_lower_right - torch.tensor(lower_right, device=device)) * scalar\n        + torch.tensor(lower_right, device=device)\n        - px / 2\n    )\n\n    # Tile this pattern across the entire texture\n    uv_coords_square = torch.stack([uv_coords_upper_left, uv_coords_lower_right], dim=0)  # (2, 3, 2)\n    uv_coords_square = uv_coords_square.reshape(1, 1, 6, 2)  # (6, 2)\n    square_offsets = (\n        torch.stack(\n            torch.meshgrid(\n                torch.arange(squares_per_side_w, device=device),\n                torch.arange(squares_per_side_h, device=device),\n                indexing=\"xy\",\n            ),\n            dim=-1,\n        )\n        * lr\n    )\n    uv_coords_square = uv_coords_square + square_offsets.view(\n        squares_per_side_h, squares_per_side_w, 1, 2\n    )  # (num_squares_h, num_squares_w, 6, 2)\n    texture_coordinates = uv_coords_square.view(-1, 3, 2)[: len(faces)]  # (num_faces, 3, 2)\n\n    # Now find the triangle indices for every pixel and the barycentric coordinates\n    # which can be used to interpolate the XYZ and normal values to then query with NeRF\n    uv_coords, uv_indices = get_texture_image(num_pixels_w, num_pixels_h, device)\n\n    u_index = torch.div(uv_indices[..., 0], px_per_square_w, rounding_mode=\"floor\")\n    v_index = torch.div(uv_indices[..., 1], px_per_square_h, rounding_mode=\"floor\")\n    square_index = v_index * squares_per_side_w + u_index\n    u_offset = uv_indices[..., 0] % px_per_square_w\n    v_offset = uv_indices[..., 1] % px_per_square_h\n    lower_right = (u_offset + v_offset) >= (px_per_square_w - 2)\n    triangle_index = square_index * 2 + lower_right\n    triangle_index = torch.clamp(triangle_index, min=0, max=len(faces) - 1)\n\n    nearby_uv_coords = texture_coordinates[triangle_index]  # (num_pixels_h, num_pixels_w, 3, 2)\n    nearby_vertices = vertices[faces[triangle_index]]  # (num_pixels_h, num_pixels_w, 3, 3)\n    nearby_normals = vertex_normals[faces[triangle_index]]  # (num_pixels_h, num_pixels_w, 3, 3)\n\n    # compute barycentric coordinates\n    v0 = nearby_uv_coords[..., 0, :]  # (num_pixels, num_pixels, 2)\n    v1 = nearby_uv_coords[..., 1, :]  # (num_pixels, num_pixels, 2)\n    v2 = nearby_uv_coords[..., 2, :]  # (num_pixels, num_pixels, 2)\n    p = uv_coords  # (num_pixels, num_pixels, 2)\n    area = get_parallelogram_area(v2, v0, v1)  # 2x face area.\n    w0 = get_parallelogram_area(p, v1, v2) / area\n    w1 = get_parallelogram_area(p, v2, v0) / area\n    w2 = get_parallelogram_area(p, v0, v1) / area\n\n    origins = (\n        nearby_vertices[..., 0, :] * w0[..., None]\n        + nearby_vertices[..., 1, :] * w1[..., None]\n        + nearby_vertices[..., 2, :] * w2[..., None]\n    ).float()\n    directions = -(\n        nearby_normals[..., 0, :] * w0[..., None]\n        + nearby_normals[..., 1, :] * w1[..., None]\n        + nearby_normals[..., 2, :] * w2[..., None]\n    ).float()\n    # normalize the direction vector to make it a unit vector\n    directions = torch.nn.functional.normalize(directions, dim=-1)\n\n    return texture_coordinates, origins, directions\n\n\ndef unwrap_mesh_with_xatlas(\n    vertices: Float[Tensor, \"num_verts 3\"],\n    faces: Float[Tensor, \"num_faces 3 torch.long\"],\n    vertex_normals: Float[Tensor, \"num_verts 3\"],\n    num_pixels_per_side=1024,\n    num_faces_per_barycentric_chunk=10,\n) -> Tuple[\n    Float[Tensor, \"num_faces 3 2\"],\n    Float[Tensor, \"num_pixels num_pixels 3\"],\n    Float[Tensor, \"num_pixels num_pixels num_pixels\"],\n]:\n    \"\"\"Unwrap a mesh using xatlas. We use xatlas to unwrap the mesh with UV coordinates.\n    Then we rasterize the mesh with a square pattern. We interpolate the XYZ and normal\n    values for every pixel in the texture image. We return the texture coordinates, the\n    origins, and the directions for every pixel.\n\n    Args:\n        vertices: Tensor of mesh vertices.\n        faces: Tensor of mesh faces.\n        vertex_normals: Tensor of mesh vertex normals.\n        num_pixels_per_side: Number of pixels per side of the texture image. We use a square.\n        num_faces_per_barycentric_chunk: Number of faces to use for barycentric chunk computation.\n\n    Returns:\n        texture_coordinates: Tensor of texture coordinates for every face.\n        origins: Tensor of origins for every pixel.\n        directions: Tensor of directions for every pixel.\n    \"\"\"\n\n    device = vertices.device\n\n    # unwrap the mesh\n    vertices_np = vertices.cpu().numpy()\n    faces_np = faces.cpu().numpy()\n    vertex_normals_np = vertex_normals.cpu().cpu().numpy()\n    vmapping, indices, uvs = xatlas.parametrize(vertices_np, faces_np, vertex_normals_np)\n\n    # vertices texture coordinates\n    vertices_tc = torch.from_numpy(uvs.astype(np.float32)).to(device)\n\n    # render uv maps\n    vertices_tc = vertices_tc * 2.0 - 1.0  # uvs to range [-1, 1]\n    vertices_tc = torch.cat(\n        (vertices_tc, torch.zeros_like(vertices_tc[..., :1]), torch.ones_like(vertices_tc[..., :1])), dim=-1\n    )  # [num_verts, 4]\n\n    texture_coordinates = torch.from_numpy(uvs[indices]).to(device)  # (num_faces, 3, 2)\n\n    # Now find the triangle indices for every pixel and the barycentric coordinates\n    # which can be used to interpolate the XYZ and normal values to then query with NeRF\n    uv_coords, _ = get_texture_image(num_pixels_per_side, num_pixels_per_side, device)\n    uv_coords_shape = uv_coords.shape\n    p = uv_coords.reshape(1, -1, 2)  # (1, N, 2)\n    num_vertices = p.shape[1]\n    num_faces = texture_coordinates.shape[0]\n    triangle_distances = torch.ones_like(p[..., 0]) * torch.finfo(torch.float32).max  # (1, N)\n    triangle_indices = torch.zeros_like(p[..., 0]).long()  # (1, N)\n    triangle_w0 = torch.zeros_like(p[..., 0])  # (1, N)\n    triangle_w1 = torch.zeros_like(p[..., 0])  # (1, N)\n    triangle_w2 = torch.zeros_like(p[..., 0])  # (1, N)\n    arange_list = torch.arange(num_vertices, device=device)\n    progress = get_progress(\"Chunking faces for rasterization\")\n    with progress:\n        for i in progress.track(range(num_faces // num_faces_per_barycentric_chunk)):\n            s = i * num_faces_per_barycentric_chunk\n            e = min((i + 1) * num_faces_per_barycentric_chunk, num_faces)\n            v0 = texture_coordinates[s:e, 0:1, :]  # (F, 1, 2)\n            v1 = texture_coordinates[s:e, 1:2, :]  # (F, 1, 2)\n            v2 = texture_coordinates[s:e, 2:3, :]  # (F, 1, 2)\n            # NOTE: could try clockwise vs counter clockwise\n            area = get_parallelogram_area(v2, v0, v1)  # 2x face area.\n            w0 = get_parallelogram_area(p, v1, v2) / area  # (num_faces_per_barycentric_chunk, N)\n            w1 = get_parallelogram_area(p, v2, v0) / area\n            w2 = get_parallelogram_area(p, v0, v1) / area\n            # get distance from center of triangle\n            dist_to_center = torch.abs(w0) + torch.abs(w1) + torch.abs(w2)\n            d_values, d_indices = torch.min(dist_to_center, dim=0, keepdim=True)\n            d_indices_with_offset = d_indices + s  # add offset\n            condition = d_values < triangle_distances\n            triangle_distances = torch.where(condition, d_values, triangle_distances)\n            triangle_indices = torch.where(condition, d_indices_with_offset, triangle_indices)\n            w0_selected = w0[d_indices[0], arange_list].unsqueeze(0)  # (1, N)\n            w1_selected = w1[d_indices[0], arange_list].unsqueeze(0)  # (1, N)\n            w2_selected = w2[d_indices[0], arange_list].unsqueeze(0)  # (1, N)\n            triangle_w0 = torch.where(condition, w0_selected, triangle_w0)\n            triangle_w1 = torch.where(condition, w1_selected, triangle_w1)\n            triangle_w2 = torch.where(condition, w2_selected, triangle_w2)\n\n    nearby_vertices = vertices[faces[triangle_indices[0]]]  # (N, 3, 3)\n    nearby_normals = vertex_normals[faces[triangle_indices[0]]]  # (N, 3, 3)\n\n    origins = (\n        nearby_vertices[..., 0, :] * triangle_w0[0, :, None]\n        + nearby_vertices[..., 1, :] * triangle_w1[0, :, None]\n        + nearby_vertices[..., 2, :] * triangle_w2[0, :, None]\n    ).float()\n    directions = -(\n        nearby_normals[..., 0, :] * triangle_w0[0, :, None]\n        + nearby_normals[..., 1, :] * triangle_w1[0, :, None]\n        + nearby_normals[..., 2, :] * triangle_w2[0, :, None]\n    ).float()\n\n    origins = origins.reshape(uv_coords_shape[0], uv_coords_shape[1], 3)\n    directions = directions.reshape(uv_coords_shape[0], uv_coords_shape[1], 3)\n\n    # normalize the direction vector to make it a unit vector\n    directions = torch.nn.functional.normalize(directions, dim=-1)\n\n    return texture_coordinates, origins, directions\n\n\ndef export_textured_mesh(\n    mesh: Mesh,\n    pipeline: Pipeline,\n    output_dir: Path,\n    px_per_uv_triangle: Optional[int],\n    unwrap_method: Literal[\"xatlas\", \"custom\"] = \"xatlas\",\n    raylen_method: Literal[\"edge\", \"none\"] = \"edge\",\n    num_pixels_per_side=1024,\n) -> None:\n    \"\"\"Textures a mesh using the radiance field from the Pipeline.\n    The mesh is written to an OBJ file in the output directory,\n    along with the corresponding material and texture files.\n    Operations will occur on the same device as the Pipeline.\n\n    Args:\n        mesh: The mesh to texture.\n        pipeline: The pipeline to use for texturing.\n        output_dir: The directory to write the textured mesh to.\n        px_per_uv_triangle: The number of pixels per side of UV triangle. Required for \"custom\" unwrapping.\n        unwrap_method: The method to use for unwrapping the mesh.\n        offset_method: The method to use for computing the ray length to render.\n        num_pixels_per_side: The number of pixels per side of the texture image.\n    \"\"\"\n\n    device = pipeline.device\n\n    vertices = mesh.vertices.to(device)\n    faces = mesh.faces.to(device)\n    vertex_normals = mesh.normals.to(device)\n\n    summary_log = []\n    summary_log.append(f\"Unwrapped mesh using {unwrap_method} method.\")\n    summary_log.append(f\"Mesh has {len(vertices)} vertices and {len(faces)} faces.\")\n\n    if unwrap_method == \"xatlas\":\n        CONSOLE.print(\"Unwrapping mesh with xatlas method... this may take a while.\")\n        texture_coordinates, origins, directions = unwrap_mesh_with_xatlas(\n            vertices, faces, vertex_normals, num_pixels_per_side=num_pixels_per_side\n        )\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Unwrapped mesh with xatlas method\")\n    elif unwrap_method == \"custom\":\n        CONSOLE.print(\"Unwrapping mesh with custom method...\")\n        assert px_per_uv_triangle is not None\n        texture_coordinates, origins, directions = unwrap_mesh_per_uv_triangle(\n            vertices, faces, vertex_normals, px_per_uv_triangle\n        )\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Unwrapped mesh with custom method\")\n    else:\n        raise ValueError(f\"Unwrap method {unwrap_method} not supported.\")\n\n    if raylen_method == \"edge\":\n        face_vertices = vertices[faces]\n        # compute the length of the rays we want to render\n        # we make a reasonable approximation by using the mean length of one edge per face\n        raylen = 2.0 * torch.mean(torch.norm(face_vertices[:, 1, :] - face_vertices[:, 0, :], dim=-1)).float()\n    elif raylen_method == \"none\":\n        raylen = 0.0\n    else:\n        raise ValueError(f\"Ray length method {raylen_method} not supported.\")\n\n    summary_log.append(f\"Length of rendered rays to compute texture values: {raylen}\")\n\n    origins = origins - 0.5 * raylen * directions\n    pixel_area = torch.ones_like(origins[..., 0:1])\n    camera_indices = torch.zeros_like(origins[..., 0:1])\n    nears = torch.zeros_like(origins[..., 0:1])\n    fars = torch.ones_like(origins[..., 0:1]) * raylen\n    directions_norm = torch.ones_like(origins[..., 0:1])  # for surface model\n    camera_ray_bundle = RayBundle(\n        origins=origins,\n        directions=directions,\n        pixel_area=pixel_area,\n        camera_indices=camera_indices,\n        nears=nears,\n        fars=fars,\n        metadata={\"directions_norm\": directions_norm},\n    )\n\n    CONSOLE.print(\"Creating texture image by rendering with NeRF...\")\n    with torch.no_grad():\n        outputs = pipeline.model.get_outputs_for_camera_ray_bundle(camera_ray_bundle)\n    # TODO: this can be done better by using the alpha channel\n    rgb = pipeline.model.get_rgba_image(outputs, \"rgb\")[..., :3]\n\n    # save the texture image\n    texture_image = rgb.cpu().numpy()\n    media.write_image(str(output_dir / \"material_0.png\"), texture_image)\n\n    CONSOLE.print(\"Writing relevant OBJ information to files...\")\n    # create the .mtl file\n    lines_mtl = [\n        \"# Generated with nerfstudio\",\n        \"newmtl material_0\",\n        \"Ka 1.000 1.000 1.000\",\n        \"Kd 1.000 1.000 1.000\",\n        \"Ks 0.000 0.000 0.000\",\n        \"d 1.0\",\n        \"illum 2\",\n        \"Ns 1.00000000\",\n        \"map_Kd material_0.png\",\n    ]\n    lines_mtl = [line + \"\\n\" for line in lines_mtl]\n    file_mtl = open(output_dir / \"material_0.mtl\", \"w\", encoding=\"utf-8\")\n    file_mtl.writelines(lines_mtl)\n    file_mtl.close()\n\n    # create the .obj file\n    lines_obj = [\"# Generated with nerfstudio\", \"mtllib material_0.mtl\", \"usemtl material_0\"]\n    lines_obj = [line + \"\\n\" for line in lines_obj]\n    file_obj = open(output_dir / \"mesh.obj\", \"w\", encoding=\"utf-8\")\n    file_obj.writelines(lines_obj)\n\n    # write the geometric vertices\n    vertices = vertices.cpu().numpy()\n    progress = get_progress(\"Writing vertices to file\", suffix=\"lines-per-sec\")\n    with progress:\n        for i in progress.track(range(len(vertices))):\n            vertex = vertices[i]\n            line = f\"v {vertex[0]} {vertex[1]} {vertex[2]}\\n\"\n            file_obj.write(line)\n\n    # write the texture coordinates\n    texture_coordinates = texture_coordinates.cpu().numpy()\n    with progress:\n        progress = get_progress(\"Writing texture coordinates to file\", suffix=\"lines-per-sec\")\n        for i in progress.track(range(len(faces))):\n            for uv in texture_coordinates[i]:\n                line = f\"vt {uv[0]} {1.0 - uv[1]}\\n\"\n                file_obj.write(line)\n\n    # write the vertex normals\n    vertex_normals = vertex_normals.cpu().numpy()\n    progress = get_progress(\"Writing vertex normals to file\", suffix=\"lines-per-sec\")\n    with progress:\n        for i in progress.track(range(len(vertex_normals))):\n            normal = vertex_normals[i]\n            line = f\"vn {normal[0]} {normal[1]} {normal[2]}\\n\"\n            file_obj.write(line)\n\n    # write the faces\n    faces = faces.cpu().numpy()\n    progress = get_progress(\"Writing faces to file\", suffix=\"lines-per-sec\")\n    with progress:\n        for i in progress.track(range(len(faces))):\n            face = faces[i]\n            v1 = face[0] + 1\n            v2 = face[1] + 1\n            v3 = face[2] + 1\n            vt1 = i * 3 + 1\n            vt2 = i * 3 + 2\n            vt3 = i * 3 + 3\n            vn1 = v1\n            vn2 = v2\n            vn3 = v3\n            line = f\"f {v1}/{vt1}/{vn1} {v2}/{vt2}/{vn2} {v3}/{vt3}/{vn3}\\n\"\n            file_obj.write(line)\n\n    file_obj.close()\n\n    summary_log.append(f\"OBJ file saved to {output_dir / 'mesh.obj'}\")\n    summary_log.append(f\"MTL file saved to {output_dir / 'material_0.mtl'}\")\n    summary_log.append(\n        f\"Texture image saved to {output_dir / 'material_0.png'} \"\n        f\"with resolution {texture_image.shape[1]}x{texture_image.shape[0]} (WxH)\"\n    )\n\n    CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n    for summary in summary_log:\n        CONSOLE.print(summary, justify=\"center\")\n    CONSOLE.rule()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/exporter/tsdf_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nTSDF utils.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import List, Optional, Tuple, Union\n\nimport numpy as np\nimport pymeshlab\nimport torch\nimport torch.nn.functional as F\nfrom jaxtyping import Bool, Float\nfrom skimage import measure\nfrom torch import Tensor\n\nfrom nerfstudio.exporter.exporter_utils import Mesh, render_trajectory\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nTORCH_DEVICE = Union[torch.device, str]\n\n\n@dataclass\nclass TSDF:\n    \"\"\"\n    Class for creating TSDFs.\n    \"\"\"\n\n    voxel_coords: Float[Tensor, \"3 xdim ydim zdim\"]\n    \"\"\"Coordinates of each voxel in the TSDF.\"\"\"\n    values: Float[Tensor, \"xdim ydim zdim\"]\n    \"\"\"TSDF values for each voxel.\"\"\"\n    weights: Float[Tensor, \"xdim ydim zdim\"]\n    \"\"\"TSDF weights for each voxel.\"\"\"\n    colors: Float[Tensor, \"xdim ydim zdim 3\"]\n    \"\"\"TSDF colors for each voxel.\"\"\"\n    voxel_size: Float[Tensor, \"3\"]\n    \"\"\"Size of each voxel in the TSDF. [x, y, z] size.\"\"\"\n    origin: Float[Tensor, \"3\"]\n    \"\"\"Origin of the TSDF [xmin, ymin, zmin].\"\"\"\n    truncation_margin: float = 5.0\n    \"\"\"Margin for truncation.\"\"\"\n\n    def to(self, device: TORCH_DEVICE):\n        \"\"\"Move the tensors to the specified device.\n\n        Args:\n            device: The device to move the tensors to. E.g., \"cuda:0\" or \"cpu\".\n        \"\"\"\n        self.voxel_coords = self.voxel_coords.to(device)\n        self.values = self.values.to(device)\n        self.weights = self.weights.to(device)\n        self.colors = self.colors.to(device)\n        self.voxel_size = self.voxel_size.to(device)\n        self.origin = self.origin.to(device)\n        return self\n\n    @property\n    def device(self) -> TORCH_DEVICE:\n        \"\"\"Returns the device that voxel_coords is on.\"\"\"\n        return self.voxel_coords.device\n\n    @property\n    def truncation(self) -> float:\n        \"\"\"Returns the truncation distance.\"\"\"\n        # TODO: clean this up\n        truncation = self.voxel_size[0].item() * self.truncation_margin\n        return truncation\n\n    @staticmethod\n    def from_aabb(aabb: Float[Tensor, \"2 3\"], volume_dims: Float[Tensor, \"3\"]):\n        \"\"\"Returns an instance of TSDF from an axis-aligned bounding box and volume dimensions.\n\n        Args:\n            aabb: The axis-aligned bounding box with shape [[xmin, ymin, zmin], [xmax, ymax, zmax]].\n            volume_dims: The volume dimensions with shape [xdim, ydim, zdim].\n        \"\"\"\n\n        origin = aabb[0]\n        voxel_size = (aabb[1] - aabb[0]) / volume_dims\n\n        # create the voxel coordinates\n        xdim = torch.arange(volume_dims[0].item())\n        ydim = torch.arange(volume_dims[1].item())\n        zdim = torch.arange(volume_dims[2].item())\n        grid = torch.stack(torch.meshgrid([xdim, ydim, zdim], indexing=\"ij\"), dim=0)\n        voxel_coords = origin.view(3, 1, 1, 1) + grid * voxel_size.view(3, 1, 1, 1)\n\n        # initialize the values and weights\n        values = -torch.ones(volume_dims.tolist())\n        weights = torch.zeros(volume_dims.tolist())\n        colors = torch.zeros(volume_dims.tolist() + [3])\n\n        # TODO: move to device\n\n        return TSDF(voxel_coords, values, weights, colors, voxel_size, origin)\n\n    def get_mesh(self) -> Mesh:\n        \"\"\"Extracts a mesh using marching cubes.\"\"\"\n\n        device = self.values.device\n\n        # run marching cubes on CPU\n        tsdf_values_np = self.values.clamp(-1, 1).cpu().numpy()\n        vertices, faces, normals, _ = measure.marching_cubes(  # type: ignore\n            tsdf_values_np,\n            level=0,\n            allow_degenerate=False,\n        )\n\n        vertices_indices = np.round(vertices).astype(int)\n        colors = self.colors[vertices_indices[:, 0], vertices_indices[:, 1], vertices_indices[:, 2]]\n\n        # move back to original device\n        vertices = torch.from_numpy(vertices.copy()).to(device)\n        faces = torch.from_numpy(faces.copy()).to(device)\n        normals = torch.from_numpy(normals.copy()).to(device)\n\n        # move vertices back to world space\n        vertices = self.origin.view(1, 3) + vertices * self.voxel_size.view(1, 3)\n\n        return Mesh(vertices=vertices, faces=faces, normals=normals, colors=colors)\n\n    @classmethod\n    def export_mesh(cls, mesh: Mesh, filename: str) -> None:\n        \"\"\"Exports the mesh to a file.\n        We use pymeshlab to export the mesh as a PLY file.\n\n        Args:\n            mesh: The mesh to export.\n            filename: The filename to export the mesh to.\n        \"\"\"\n        assert mesh.colors is not None\n        vertex_matrix = mesh.vertices.cpu().numpy().astype(\"float64\")\n        face_matrix = mesh.faces.cpu().numpy().astype(\"int32\")\n        v_normals_matrix = mesh.normals.cpu().numpy().astype(\"float64\")\n        v_color_matrix = mesh.colors.cpu().numpy().astype(\"float64\")\n        # colors need an alpha channel\n        v_color_matrix = np.concatenate([v_color_matrix, np.ones((v_color_matrix.shape[0], 1))], axis=-1)\n\n        # create a new Mesh\n        m = pymeshlab.Mesh(  # type: ignore\n            vertex_matrix=vertex_matrix,\n            face_matrix=face_matrix,\n            v_normals_matrix=v_normals_matrix,\n            v_color_matrix=v_color_matrix,\n        )\n        # create a new MeshSet\n        ms = pymeshlab.MeshSet()  # type: ignore\n        # add the mesh to the MeshSet\n        ms.add_mesh(m, \"mesh\")\n        # save the current mesh\n        ms.save_current_mesh(filename)\n\n    def integrate_tsdf(\n        self,\n        c2w: Float[Tensor, \"batch 4 4\"],\n        K: Float[Tensor, \"batch 3 3\"],\n        depth_images: Float[Tensor, \"batch 1 height width\"],\n        color_images: Optional[Float[Tensor, \"batch 3 height width\"]] = None,\n        mask_images: Optional[Bool[Tensor, \"batch 1 height width\"]] = None,\n    ) -> None:\n        \"\"\"Integrates a batch of depth images into the TSDF.\n\n        Args:\n            c2w: The camera extrinsics.\n            K: The camera intrinsics.\n            depth_images: The depth images to integrate.\n            color_images: The color images to integrate.\n            mask_images: The mask images to integrate.\n        \"\"\"\n\n        if mask_images is not None:\n            raise NotImplementedError(\"Mask images are not supported yet.\")\n\n        batch_size = c2w.shape[0]\n        shape = self.voxel_coords.shape[1:]\n\n        # Project voxel_coords into image space...\n\n        image_size = torch.tensor(\n            [depth_images.shape[-1], depth_images.shape[-2]], device=self.device\n        )  # [width, height]\n\n        # make voxel_coords homogeneous\n        voxel_world_coords = self.voxel_coords.view(3, -1)\n        voxel_world_coords = torch.cat(\n            [voxel_world_coords, torch.ones(1, voxel_world_coords.shape[1], device=self.device)], dim=0\n        )\n        voxel_world_coords = voxel_world_coords.unsqueeze(0)  # [1, 4, N]\n        voxel_world_coords = voxel_world_coords.expand(batch_size, *voxel_world_coords.shape[1:])  # [batch, 4, N]\n\n        voxel_cam_coords = torch.bmm(torch.inverse(c2w), voxel_world_coords)  # [batch, 4, N]\n\n        # flip the z axis\n        voxel_cam_coords[:, 2, :] = -voxel_cam_coords[:, 2, :]\n        # flip the y axis\n        voxel_cam_coords[:, 1, :] = -voxel_cam_coords[:, 1, :]\n\n        # we need the distance of the point to the camera, not the z coordinate\n        voxel_depth = torch.sqrt(torch.sum(voxel_cam_coords[:, :3, :] ** 2, dim=-2, keepdim=True))  # [batch, 1, N]\n\n        voxel_cam_coords_z = voxel_cam_coords[:, 2:3, :]\n        voxel_cam_points = torch.bmm(K, voxel_cam_coords[:, 0:3, :] / voxel_cam_coords_z)  # [batch, 3, N]\n        voxel_pixel_coords = voxel_cam_points[:, :2, :]  # [batch, 2, N]\n\n        # Sample the depth images with grid sample...\n\n        grid = voxel_pixel_coords.permute(0, 2, 1)  # [batch, N, 2]\n        # normalize grid to [-1, 1]\n        grid = 2.0 * grid / image_size.view(1, 1, 2) - 1.0  # [batch, N, 2]\n        grid = grid[:, None]  # [batch, 1, N, 2]\n        # depth\n        sampled_depth = F.grid_sample(\n            input=depth_images, grid=grid, mode=\"nearest\", padding_mode=\"zeros\", align_corners=False\n        )  # [batch, N, 1]\n        sampled_depth = sampled_depth.squeeze(2)  # [batch, 1, N]\n        # colors\n        sampled_colors = None\n        if color_images is not None:\n            sampled_colors = F.grid_sample(\n                input=color_images, grid=grid, mode=\"nearest\", padding_mode=\"zeros\", align_corners=False\n            )  # [batch, N, 3]\n            sampled_colors = sampled_colors.squeeze(2)  # [batch, 3, N]\n\n        dist = sampled_depth - voxel_depth  # [batch, 1, N]\n        tsdf_values = torch.clamp(dist / self.truncation, min=-1.0, max=1.0)  # [batch, 1, N]\n        valid_points = (voxel_depth > 0) & (sampled_depth > 0) & (dist > -self.truncation)  # [batch, 1, N]\n\n        # Sequentially update the TSDF...\n\n        for i in range(batch_size):\n            valid_points_i = valid_points[i]\n            valid_points_i_shape = valid_points_i.view(*shape)  # [xdim, ydim, zdim]\n\n            # the old values\n            old_tsdf_values_i = self.values[valid_points_i_shape]\n            old_weights_i = self.weights[valid_points_i_shape]\n\n            # the new values\n            # TODO: let the new weight be configurable\n            new_tsdf_values_i = tsdf_values[i][valid_points_i]\n            new_weights_i = 1.0\n\n            total_weights = old_weights_i + new_weights_i\n\n            self.values[valid_points_i_shape] = (\n                old_tsdf_values_i * old_weights_i + new_tsdf_values_i * new_weights_i\n            ) / total_weights\n            self.weights[valid_points_i_shape] = torch.clamp(total_weights, max=1.0)\n\n            if sampled_colors is not None:\n                old_colors_i = self.colors[valid_points_i_shape]  # [M, 3]\n                new_colors_i = sampled_colors[i][:, valid_points_i.squeeze(0)].permute(1, 0)  # [M, 3]\n                self.colors[valid_points_i_shape] = (\n                    old_colors_i * old_weights_i[:, None] + new_colors_i * new_weights_i\n                ) / total_weights[:, None]\n\n\ndef export_tsdf_mesh(\n    pipeline: Pipeline,\n    output_dir: Path,\n    downscale_factor: int = 2,\n    depth_output_name: str = \"depth\",\n    rgb_output_name: str = \"rgb\",\n    resolution: Union[int, List[int]] = field(default_factory=lambda: [256, 256, 256]),\n    batch_size: int = 10,\n    use_bounding_box: bool = True,\n    bounding_box_min: Tuple[float, float, float] = (-1.0, -1.0, -1.0),\n    bounding_box_max: Tuple[float, float, float] = (1.0, 1.0, 1.0),\n    refine_mesh_using_initial_aabb_estimate: bool = False,\n    refinement_epsilon: float = 1e-2,\n) -> None:\n    \"\"\"Export a TSDF mesh from a pipeline.\n\n    Args:\n        pipeline: The pipeline to export the mesh from.\n        output_dir: The directory to save the mesh to.\n        downscale_factor: Downscale factor for the images.\n        depth_output_name: Name of the depth output.\n        rgb_output_name: Name of the RGB output.\n        resolution: Resolution of the TSDF volume or [x, y, z] resolutions individually.\n        batch_size: How many depth images to integrate per batch.\n        use_bounding_box: Whether to use a bounding box for the TSDF volume.\n        bounding_box_min: Minimum coordinates of the bounding box.\n        bounding_box_max: Maximum coordinates of the bounding box.\n        refine_mesh_using_initial_aabb_estimate: Whether to refine the TSDF using the initial AABB estimate.\n        refinement_epsilon: Epsilon for refining the TSDF. This is the distance in meters that the refined AABB/OBB will\n            be expanded by in each direction.\n    \"\"\"\n\n    device = pipeline.device\n\n    assert pipeline.datamanager.train_dataset is not None\n    dataparser_outputs = pipeline.datamanager.train_dataset._dataparser_outputs\n\n    # initialize the TSDF volume\n    if not use_bounding_box:\n        aabb = dataparser_outputs.scene_box.aabb\n    else:\n        aabb = torch.tensor([bounding_box_min, bounding_box_max])\n    if isinstance(resolution, int):\n        volume_dims = torch.tensor([resolution] * 3)\n    elif isinstance(resolution, List):\n        volume_dims = torch.tensor(resolution)\n    else:\n        raise ValueError(\"Resolution must be an int or a list.\")\n    tsdf = TSDF.from_aabb(aabb, volume_dims=volume_dims)\n    # move TSDF to device\n    tsdf.to(device)\n\n    cameras = dataparser_outputs.cameras\n    # we turn off distortion when populating the TSDF\n    color_images, depth_images = render_trajectory(\n        pipeline,\n        cameras,\n        rgb_output_name=rgb_output_name,\n        depth_output_name=depth_output_name,\n        rendered_resolution_scaling_factor=1.0 / downscale_factor,\n        disable_distortion=True,\n        return_rgba_images=True,\n    )\n\n    # TODO: this can be done better by removing transparent points from the TSDF\n    color_images = [x[..., :3] for x in color_images]\n\n    # camera extrinsics and intrinsics\n    c2w: Float[Tensor, \"N 3 4\"] = cameras.camera_to_worlds.to(device)\n    # make c2w homogeneous\n    c2w = torch.cat([c2w, torch.zeros(c2w.shape[0], 1, 4, device=device)], dim=1)\n    c2w[:, 3, 3] = 1\n    K: Float[Tensor, \"N 3 3\"] = cameras.get_intrinsics_matrices().to(device)\n    color_images = torch.tensor(np.array(color_images), device=device).permute(0, 3, 1, 2)  # shape (N, 3, H, W)\n    depth_images = torch.tensor(np.array(depth_images), device=device).permute(0, 3, 1, 2)  # shape (N, 1, H, W)\n\n    CONSOLE.print(\"Integrating the TSDF\")\n    for i in range(0, len(c2w), batch_size):\n        tsdf.integrate_tsdf(\n            c2w[i : i + batch_size],\n            K[i : i + batch_size],\n            depth_images[i : i + batch_size],\n            color_images=color_images[i : i + batch_size],\n        )\n\n    CONSOLE.print(\"Computing Mesh\")\n    mesh = tsdf.get_mesh()\n\n    if refine_mesh_using_initial_aabb_estimate:\n        CONSOLE.print(\"Refining the TSDF based on the Mesh AABB\")\n\n        # Compute the AABB of the mesh and use it to initialize a new TSDF\n        vertices_min = torch.min(mesh.vertices, dim=0).values - refinement_epsilon\n        vertices_max = torch.max(mesh.vertices, dim=0).values + refinement_epsilon\n        aabb = torch.stack([vertices_min, vertices_max]).cpu()\n        tsdf = TSDF.from_aabb(aabb, volume_dims=volume_dims)\n        # move TSDF to device\n        tsdf.to(device)\n\n        CONSOLE.print(\"Integrating the updated TSDF\")\n        for i in range(0, len(c2w), batch_size):\n            tsdf.integrate_tsdf(\n                c2w[i : i + batch_size],\n                K[i : i + batch_size],\n                depth_images[i : i + batch_size],\n                color_images=color_images[i : i + batch_size],\n            )\n\n        CONSOLE.print(\"Computing the updated Mesh\")\n        mesh = tsdf.get_mesh()\n\n    CONSOLE.print(\"Saving TSDF Mesh\")\n    tsdf.export_mesh(mesh, filename=str(output_dir / \"tsdf_mesh.ply\"))\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"init field modules\"\"\"\n\nfrom .base_field_component import FieldComponent as FieldComponent\nfrom .encodings import Encoding as Encoding, ScalingAndOffset as ScalingAndOffset\nfrom .mlp import MLP as MLP\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/activations.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSpecial activation functions.\n\"\"\"\n\nfrom typing import TYPE_CHECKING\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\nfrom torch.autograd import Function\nfrom torch.cuda.amp import custom_bwd, custom_fwd\n\n\nclass _TruncExp(Function):\n    # Implementation from torch-ngp:\n    # https://github.com/ashawkey/torch-ngp/blob/93b08a0d4ec1cc6e69d85df7f0acdfb99603b628/activation.py\n    @staticmethod\n    @custom_fwd(cast_inputs=torch.float32)\n    def forward(ctx, x):\n        ctx.save_for_backward(x)\n        return torch.exp(x)\n\n    @staticmethod\n    @custom_bwd\n    def backward(ctx, g):\n        x = ctx.saved_tensors[0]\n        return g * torch.exp(x.clamp(-15, 15))\n\n\nif TYPE_CHECKING:\n\n    def trunc_exp(_: Float[Tensor, \"*bs\"], /) -> Float[Tensor, \"*bs\"]:\n        \"\"\"Same as torch.exp, but with the backward pass clipped to prevent vanishing/exploding\n        gradients.\"\"\"\n        raise NotImplementedError()\n\nelse:\n    trunc_exp = _TruncExp.apply\n    \"\"\"Same as torch.exp, but with the backward pass clipped to prevent vanishing/exploding\n    gradients.\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/base_field_component.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nThe field module baseclass.\n\"\"\"\n\nfrom abc import abstractmethod\nfrom typing import Optional\n\nfrom jaxtyping import Shaped\nfrom torch import Tensor, nn\n\n\nclass FieldComponent(nn.Module):\n    \"\"\"Field modules that can be combined to store and compute the fields.\n\n    Args:\n        in_dim: Input dimension to module.\n        out_dim: Output dimension to module.\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, out_dim: Optional[int] = None) -> None:\n        super().__init__()\n        self.in_dim = in_dim\n        self.out_dim = out_dim\n\n    def build_nn_modules(self) -> None:\n        \"\"\"Function instantiates any torch.nn members within the module.\n        If none exist, do nothing.\"\"\"\n\n    def set_in_dim(self, in_dim: int) -> None:\n        \"\"\"Sets input dimension of encoding\n\n        Args:\n            in_dim: input dimension\n        \"\"\"\n        if in_dim <= 0:\n            raise ValueError(\"Input dimension should be greater than zero\")\n        self.in_dim = in_dim\n\n    def get_out_dim(self) -> int:\n        \"\"\"Calculates output dimension of encoding.\"\"\"\n        if self.out_dim is None:\n            raise ValueError(\"Output dimension has not been set\")\n        return self.out_dim\n\n    @abstractmethod\n    def forward(self, in_tensor: Shaped[Tensor, \"*bs input_dim\"]) -> Shaped[Tensor, \"*bs output_dim\"]:\n        \"\"\"\n        Returns processed tensor\n\n        Args:\n            in_tensor: Input tensor to process\n        \"\"\"\n        raise NotImplementedError\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/embedding.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode for embeddings.\n\"\"\"\n\nimport torch\nfrom jaxtyping import Shaped\nfrom torch import Tensor\n\nfrom nerfstudio.field_components.base_field_component import FieldComponent\n\n\nclass Embedding(FieldComponent):\n    \"\"\"Index into embeddings.\n    # TODO: add different types of initializations\n\n    Args:\n        in_dim: Number of embeddings\n        out_dim: Dimension of the embedding vectors\n    \"\"\"\n\n    def __init__(self, in_dim: int, out_dim: int) -> None:\n        super().__init__()\n        self.in_dim = in_dim\n        self.out_dim = out_dim\n        self.build_nn_modules()\n\n    def build_nn_modules(self) -> None:\n        self.embedding = torch.nn.Embedding(self.in_dim, self.out_dim)\n\n    def mean(self, dim=0):\n        \"\"\"Return the mean of the embedding weights along a dim.\"\"\"\n        return self.embedding.weight.mean(dim)\n\n    def forward(self, in_tensor: Shaped[Tensor, \"*batch input_dim\"]) -> Shaped[Tensor, \"*batch output_dim\"]:\n        \"\"\"Call forward\n\n        Args:\n            in_tensor: input tensor to process\n        \"\"\"\n        return self.embedding(in_tensor)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/encodings.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nEncoding functions\n\"\"\"\n\nimport itertools\nfrom abc import abstractmethod\nfrom typing import Literal, Optional, Sequence\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom jaxtyping import Float, Int, Shaped\nfrom torch import Tensor, nn\n\nfrom nerfstudio.field_components.base_field_component import FieldComponent\nfrom nerfstudio.utils.external import TCNN_EXISTS, tcnn\nfrom nerfstudio.utils.math import components_from_spherical_harmonics, expected_sin, generate_polyhedron_basis\nfrom nerfstudio.utils.printing import print_tcnn_speed_warning\n\n\nclass Encoding(FieldComponent):\n    \"\"\"Encode an input tensor. Intended to be subclassed\n\n    Args:\n        in_dim: Input dimension of tensor\n    \"\"\"\n\n    def __init__(self, in_dim: int) -> None:\n        if in_dim <= 0:\n            raise ValueError(\"Input dimension should be greater than zero\")\n        super().__init__(in_dim=in_dim)\n\n    @classmethod\n    def get_tcnn_encoding_config(cls) -> dict:\n        \"\"\"Get the encoding configuration for tcnn if implemented\"\"\"\n        raise NotImplementedError(\"Encoding does not have a TCNN implementation\")\n\n    @abstractmethod\n    def forward(self, in_tensor: Shaped[Tensor, \"*bs input_dim\"]) -> Shaped[Tensor, \"*bs output_dim\"]:\n        \"\"\"Call forward and returns and processed tensor\n\n        Args:\n            in_tensor: the input tensor to process\n        \"\"\"\n        raise NotImplementedError\n\n\nclass Identity(Encoding):\n    \"\"\"Identity encoding (Does not modify input)\"\"\"\n\n    def get_out_dim(self) -> int:\n        if self.in_dim is None:\n            raise ValueError(\"Input dimension has not been set\")\n        return self.in_dim\n\n    def forward(self, in_tensor: Shaped[Tensor, \"*bs input_dim\"]) -> Shaped[Tensor, \"*bs output_dim\"]:\n        return in_tensor\n\n\nclass ScalingAndOffset(Encoding):\n    \"\"\"Simple scaling and offset to input\n\n    Args:\n        in_dim: Input dimension of tensor\n        scaling: Scaling applied to tensor.\n        offset: Offset applied to tensor.\n    \"\"\"\n\n    def __init__(self, in_dim: int, scaling: float = 1.0, offset: float = 0.0) -> None:\n        super().__init__(in_dim)\n\n        self.scaling = scaling\n        self.offset = offset\n\n    def get_out_dim(self) -> int:\n        if self.in_dim is None:\n            raise ValueError(\"Input dimension has not been set\")\n        return self.in_dim\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        return self.scaling * in_tensor + self.offset\n\n\nclass NeRFEncoding(Encoding):\n    \"\"\"Multi-scale sinusoidal encodings. Support ``integrated positional encodings`` if covariances are provided.\n    Each axis is encoded with frequencies ranging from 2^min_freq_exp to 2^max_freq_exp.\n\n    Args:\n        in_dim: Input dimension of tensor\n        num_frequencies: Number of encoded frequencies per axis\n        min_freq_exp: Minimum frequency exponent\n        max_freq_exp: Maximum frequency exponent\n        include_input: Append the input coordinate to the encoding\n    \"\"\"\n\n    def __init__(\n        self,\n        in_dim: int,\n        num_frequencies: int,\n        min_freq_exp: float,\n        max_freq_exp: float,\n        include_input: bool = False,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"torch\",\n    ) -> None:\n        super().__init__(in_dim)\n\n        self.num_frequencies = num_frequencies\n        self.min_freq = min_freq_exp\n        self.max_freq = max_freq_exp\n        self.include_input = include_input\n\n        self.tcnn_encoding = None\n        if implementation == \"tcnn\" and not TCNN_EXISTS:\n            print_tcnn_speed_warning(\"NeRFEncoding\")\n        elif implementation == \"tcnn\":\n            assert min_freq_exp == 0, \"tcnn only supports min_freq_exp = 0\"\n            assert max_freq_exp == num_frequencies - 1, \"tcnn only supports max_freq_exp = num_frequencies - 1\"\n            encoding_config = self.get_tcnn_encoding_config(num_frequencies=self.num_frequencies)\n            self.tcnn_encoding = tcnn.Encoding(\n                n_input_dims=in_dim,\n                encoding_config=encoding_config,\n            )\n\n    @classmethod\n    def get_tcnn_encoding_config(cls, num_frequencies) -> dict:\n        \"\"\"Get the encoding configuration for tcnn if implemented\"\"\"\n        encoding_config = {\"otype\": \"Frequency\", \"n_frequencies\": num_frequencies}\n        return encoding_config\n\n    def get_out_dim(self) -> int:\n        if self.in_dim is None:\n            raise ValueError(\"Input dimension has not been set\")\n        out_dim = self.in_dim * self.num_frequencies * 2\n        if self.include_input:\n            out_dim += self.in_dim\n        return out_dim\n\n    def pytorch_fwd(\n        self,\n        in_tensor: Float[Tensor, \"*bs input_dim\"],\n        covs: Optional[Float[Tensor, \"*bs input_dim input_dim\"]] = None,\n    ) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Calculates NeRF encoding. If covariances are provided the encodings will be integrated as proposed\n            in mip-NeRF.\n\n        Args:\n            in_tensor: For best performance, the input tensor should be between 0 and 1.\n            covs: Covariances of input points.\n        Returns:\n            Output values will be between -1 and 1\n        \"\"\"\n        scaled_in_tensor = 2 * torch.pi * in_tensor  # scale to [0, 2pi]\n        freqs = 2 ** torch.linspace(self.min_freq, self.max_freq, self.num_frequencies, device=in_tensor.device)\n        scaled_inputs = scaled_in_tensor[..., None] * freqs  # [..., \"input_dim\", \"num_scales\"]\n        scaled_inputs = scaled_inputs.view(*scaled_inputs.shape[:-2], -1)  # [..., \"input_dim\" * \"num_scales\"]\n\n        if covs is None:\n            encoded_inputs = torch.sin(torch.cat([scaled_inputs, scaled_inputs + torch.pi / 2.0], dim=-1))\n        else:\n            input_var = torch.diagonal(covs, dim1=-2, dim2=-1)[..., :, None] * freqs[None, :] ** 2\n            input_var = input_var.reshape((*input_var.shape[:-2], -1))\n            encoded_inputs = expected_sin(\n                torch.cat([scaled_inputs, scaled_inputs + torch.pi / 2.0], dim=-1), torch.cat(2 * [input_var], dim=-1)\n            )\n        return encoded_inputs\n\n    def forward(\n        self, in_tensor: Float[Tensor, \"*bs input_dim\"], covs: Optional[Float[Tensor, \"*bs input_dim input_dim\"]] = None\n    ) -> Float[Tensor, \"*bs output_dim\"]:\n        if self.tcnn_encoding is not None:\n            encoded_inputs = self.tcnn_encoding(in_tensor)\n        else:\n            encoded_inputs = self.pytorch_fwd(in_tensor, covs)\n        if self.include_input:\n            encoded_inputs = torch.cat([encoded_inputs, in_tensor], dim=-1)\n        return encoded_inputs\n\n\nclass FFEncoding(Encoding):\n    \"\"\"Fourier Feature encoding. Supports integrated encodings.\n\n    Args:\n        in_dim: Input dimension of tensor\n        basis: Basis matrix from which to construct the Fourier features.\n        num_frequencies: Number of encoded frequencies per axis\n        min_freq_exp: Minimum frequency exponent\n        max_freq_exp: Maximum frequency exponent\n        include_input: Append the input coordinate to the encoding\n    \"\"\"\n\n    def __init__(\n        self,\n        in_dim: int,\n        basis: Float[Tensor, \"M N\"],\n        num_frequencies: int,\n        min_freq_exp: float,\n        max_freq_exp: float,\n        include_input: bool = False,\n    ) -> None:\n        super().__init__(in_dim)\n        self.num_frequencies = num_frequencies\n        self.min_freq = min_freq_exp\n        self.max_freq = max_freq_exp\n        self.register_buffer(name=\"b_matrix\", tensor=basis)\n        self.include_input = include_input\n\n    def get_out_dim(self) -> int:\n        if self.in_dim is None:\n            raise ValueError(\"Input dimension has not been set\")\n        assert isinstance(self.b_matrix, Tensor)\n        out_dim = self.b_matrix.shape[1] * self.num_frequencies * 2\n        if self.include_input:\n            out_dim += self.in_dim\n        return out_dim\n\n    def forward(\n        self,\n        in_tensor: Float[Tensor, \"*bs input_dim\"],\n        covs: Optional[Float[Tensor, \"*bs input_dim input_dim\"]] = None,\n    ) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Calculates FF encoding. If covariances are provided the encodings will be integrated as proposed\n            in mip-NeRF.\n\n        Args:\n            in_tensor: For best performance, the input tensor should be between 0 and 1.\n            covs: Covariances of input points.\n\n        Returns:\n            Output values will be between -1 and 1\n        \"\"\"\n        scaled_in_tensor = 2 * torch.pi * in_tensor  # scale to [0, 2pi]\n        scaled_inputs = scaled_in_tensor @ self.b_matrix  # [..., \"num_frequencies\"]\n        freqs = 2 ** torch.linspace(self.min_freq, self.max_freq, self.num_frequencies, device=in_tensor.device)\n        scaled_inputs = scaled_inputs[..., None] * freqs  # [..., \"input_dim\", \"num_scales\"]\n        scaled_inputs = scaled_inputs.view(*scaled_inputs.shape[:-2], -1)  # [..., \"input_dim\" * \"num_scales\"]\n\n        if covs is None:\n            encoded_inputs = torch.sin(torch.cat([scaled_inputs, scaled_inputs + torch.pi / 2.0], dim=-1))\n        else:\n            input_var = torch.sum((covs @ self.b_matrix) * self.b_matrix, -2)\n            input_var = input_var[..., :, None] * freqs[None, :] ** 2\n            input_var = input_var.reshape((*input_var.shape[:-2], -1))\n            encoded_inputs = expected_sin(\n                torch.cat([scaled_inputs, scaled_inputs + torch.pi / 2.0], dim=-1), torch.cat(2 * [input_var], dim=-1)\n            )\n\n        if self.include_input:\n            encoded_inputs = torch.cat([encoded_inputs, in_tensor], dim=-1)\n\n        return encoded_inputs\n\n\nclass RFFEncoding(FFEncoding):\n    \"\"\"Random Fourier Feature encoding. Supports integrated encodings.\n\n    Args:\n        in_dim: Input dimension of tensor\n        num_frequencies: Number of encoding frequencies\n        scale: Std of Gaussian to sample frequencies. Must be greater than zero\n        include_input: Append the input coordinate to the encoding\n    \"\"\"\n\n    def __init__(self, in_dim: int, num_frequencies: int, scale: float, include_input: bool = False) -> None:\n        if not scale > 0:\n            raise ValueError(\"RFF encoding scale should be greater than zero\")\n\n        b_matrix = torch.normal(mean=0, std=scale, size=(in_dim, num_frequencies))\n        super().__init__(in_dim, b_matrix, 1, 0.0, 0.0, include_input)\n\n\nclass PolyhedronFFEncoding(FFEncoding):\n    \"\"\"Fourier Feature encoding using polyhedron basis as proposed by mip-NeRF360. Supports integrated encodings.\n\n    Args:\n        num_frequencies: Number of encoded frequencies per axis\n        min_freq_exp: Minimum frequency exponent\n        max_freq_exp: Maximum frequency exponent\n        basis_shape: Shape of polyhedron basis. Either \"octahedron\" or \"icosahedron\"\n        basis_subdivisions: Number of times to tesselate the polyhedron.\n        include_input: Append the input coordinate to the encoding\n    \"\"\"\n\n    def __init__(\n        self,\n        num_frequencies: int,\n        min_freq_exp: float,\n        max_freq_exp: float,\n        basis_shape: Literal[\"octahedron\", \"icosahedron\"] = \"octahedron\",\n        basis_subdivisions: int = 1,\n        include_input: bool = False,\n    ) -> None:\n        basis_t = generate_polyhedron_basis(basis_shape, basis_subdivisions).T\n        super().__init__(3, basis_t, num_frequencies, min_freq_exp, max_freq_exp, include_input)\n\n\nclass HashEncoding(Encoding):\n    \"\"\"Hash encoding\n\n    Args:\n        num_levels: Number of feature grids.\n        min_res: Resolution of smallest feature grid.\n        max_res: Resolution of largest feature grid.\n        log2_hashmap_size: Size of hash map is 2^log2_hashmap_size.\n        features_per_level: Number of features per level.\n        hash_init_scale: Value to initialize hash grid.\n        implementation: Implementation of hash encoding. Fallback to torch if tcnn not available.\n        interpolation: Interpolation override for tcnn hashgrid. Not supported for torch unless linear.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_levels: int = 16,\n        min_res: int = 16,\n        max_res: int = 1024,\n        log2_hashmap_size: int = 19,\n        features_per_level: int = 2,\n        hash_init_scale: float = 0.001,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\",\n        interpolation: Optional[Literal[\"Nearest\", \"Linear\", \"Smoothstep\"]] = None,\n    ) -> None:\n        super().__init__(in_dim=3)\n        self.num_levels = num_levels\n        self.min_res = min_res\n        self.features_per_level = features_per_level\n        self.hash_init_scale = hash_init_scale\n        self.log2_hashmap_size = log2_hashmap_size\n        self.hash_table_size = 2**log2_hashmap_size\n\n        levels = torch.arange(num_levels)\n        self.growth_factor = np.exp((np.log(max_res) - np.log(min_res)) / (num_levels - 1)) if num_levels > 1 else 1\n        self.scalings = torch.floor(min_res * self.growth_factor**levels)\n\n        self.hash_offset = levels * self.hash_table_size\n\n        self.tcnn_encoding = None\n        self.hash_table = torch.empty(0)\n        if implementation == \"torch\":\n            self.build_nn_modules()\n        elif implementation == \"tcnn\" and not TCNN_EXISTS:\n            print_tcnn_speed_warning(\"HashEncoding\")\n            self.build_nn_modules()\n        elif implementation == \"tcnn\":\n            encoding_config = self.get_tcnn_encoding_config(\n                num_levels=self.num_levels,\n                features_per_level=self.features_per_level,\n                log2_hashmap_size=self.log2_hashmap_size,\n                min_res=self.min_res,\n                growth_factor=self.growth_factor,\n                interpolation=interpolation,\n            )\n            self.tcnn_encoding = tcnn.Encoding(\n                n_input_dims=3,\n                encoding_config=encoding_config,\n            )\n\n        if self.tcnn_encoding is None:\n            assert (\n                interpolation is None or interpolation == \"Linear\"\n            ), f\"interpolation '{interpolation}' is not supported for torch encoding backend\"\n\n    def build_nn_modules(self) -> None:\n        \"\"\"Initialize the torch version of the hash encoding.\"\"\"\n        self.hash_table = torch.rand(size=(self.hash_table_size * self.num_levels, self.features_per_level)) * 2 - 1\n        self.hash_table *= self.hash_init_scale\n        self.hash_table = nn.Parameter(self.hash_table)\n\n    @classmethod\n    def get_tcnn_encoding_config(\n        cls, num_levels, features_per_level, log2_hashmap_size, min_res, growth_factor, interpolation=None\n    ) -> dict:\n        \"\"\"Get the encoding configuration for tcnn if implemented\"\"\"\n        encoding_config = {\n            \"otype\": \"HashGrid\",\n            \"n_levels\": num_levels,\n            \"n_features_per_level\": features_per_level,\n            \"log2_hashmap_size\": log2_hashmap_size,\n            \"base_resolution\": min_res,\n            \"per_level_scale\": growth_factor,\n        }\n        if interpolation is not None:\n            encoding_config[\"interpolation\"] = interpolation\n        return encoding_config\n\n    def get_out_dim(self) -> int:\n        return self.num_levels * self.features_per_level\n\n    def hash_fn(self, in_tensor: Int[Tensor, \"*bs num_levels 3\"]) -> Shaped[Tensor, \"*bs num_levels\"]:\n        \"\"\"Returns hash tensor using method described in Instant-NGP\n\n        Args:\n            in_tensor: Tensor to be hashed\n        \"\"\"\n\n        # min_val = torch.min(in_tensor)\n        # max_val = torch.max(in_tensor)\n        # assert min_val >= 0.0\n        # assert max_val <= 1.0\n\n        in_tensor = in_tensor * torch.tensor([1, 2654435761, 805459861]).to(in_tensor.device)\n        x = torch.bitwise_xor(in_tensor[..., 0], in_tensor[..., 1])\n        x = torch.bitwise_xor(x, in_tensor[..., 2])\n        x %= self.hash_table_size\n        x += self.hash_offset.to(x.device)\n        return x\n\n    def pytorch_fwd(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Forward pass using pytorch. Significantly slower than TCNN implementation.\"\"\"\n\n        assert in_tensor.shape[-1] == 3\n        in_tensor = in_tensor[..., None, :]  # [..., 1, 3]\n        scaled = in_tensor * self.scalings.view(-1, 1).to(in_tensor.device)  # [..., L, 3]\n        scaled_c = torch.ceil(scaled).type(torch.int32)\n        scaled_f = torch.floor(scaled).type(torch.int32)\n\n        offset = scaled - scaled_f\n\n        hashed_0 = self.hash_fn(scaled_c)  # [..., num_levels]\n        hashed_1 = self.hash_fn(torch.cat([scaled_c[..., 0:1], scaled_f[..., 1:2], scaled_c[..., 2:3]], dim=-1))\n        hashed_2 = self.hash_fn(torch.cat([scaled_f[..., 0:1], scaled_f[..., 1:2], scaled_c[..., 2:3]], dim=-1))\n        hashed_3 = self.hash_fn(torch.cat([scaled_f[..., 0:1], scaled_c[..., 1:2], scaled_c[..., 2:3]], dim=-1))\n        hashed_4 = self.hash_fn(torch.cat([scaled_c[..., 0:1], scaled_c[..., 1:2], scaled_f[..., 2:3]], dim=-1))\n        hashed_5 = self.hash_fn(torch.cat([scaled_c[..., 0:1], scaled_f[..., 1:2], scaled_f[..., 2:3]], dim=-1))\n        hashed_6 = self.hash_fn(scaled_f)\n        hashed_7 = self.hash_fn(torch.cat([scaled_f[..., 0:1], scaled_c[..., 1:2], scaled_f[..., 2:3]], dim=-1))\n\n        f_0 = self.hash_table[hashed_0]  # [..., num_levels, features_per_level]\n        f_1 = self.hash_table[hashed_1]\n        f_2 = self.hash_table[hashed_2]\n        f_3 = self.hash_table[hashed_3]\n        f_4 = self.hash_table[hashed_4]\n        f_5 = self.hash_table[hashed_5]\n        f_6 = self.hash_table[hashed_6]\n        f_7 = self.hash_table[hashed_7]\n\n        f_03 = f_0 * offset[..., 0:1] + f_3 * (1 - offset[..., 0:1])\n        f_12 = f_1 * offset[..., 0:1] + f_2 * (1 - offset[..., 0:1])\n        f_56 = f_5 * offset[..., 0:1] + f_6 * (1 - offset[..., 0:1])\n        f_47 = f_4 * offset[..., 0:1] + f_7 * (1 - offset[..., 0:1])\n\n        f0312 = f_03 * offset[..., 1:2] + f_12 * (1 - offset[..., 1:2])\n        f4756 = f_47 * offset[..., 1:2] + f_56 * (1 - offset[..., 1:2])\n\n        encoded_value = f0312 * offset[..., 2:3] + f4756 * (\n            1 - offset[..., 2:3]\n        )  # [..., num_levels, features_per_level]\n\n        return torch.flatten(encoded_value, start_dim=-2, end_dim=-1)  # [..., num_levels * features_per_level]\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        if self.tcnn_encoding is not None:\n            return self.tcnn_encoding(in_tensor)\n        return self.pytorch_fwd(in_tensor)\n\n\nclass TensorCPEncoding(Encoding):\n    \"\"\"Learned CANDECOMP/PARFAC (CP) decomposition encoding used in TensoRF\n\n    Args:\n        resolution: Resolution of grid.\n        num_components: Number of components per dimension.\n        init_scale: Initialization scale.\n    \"\"\"\n\n    def __init__(self, resolution: int = 256, num_components: int = 24, init_scale: float = 0.1) -> None:\n        super().__init__(in_dim=3)\n\n        self.resolution = resolution\n        self.num_components = num_components\n\n        # TODO Learning rates should be different for these\n        self.line_coef = nn.Parameter(init_scale * torch.randn((3, num_components, resolution, 1)))\n\n    def get_out_dim(self) -> int:\n        return self.num_components\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        line_coord = torch.stack([in_tensor[..., 2], in_tensor[..., 1], in_tensor[..., 0]])  # [3, ...]\n        line_coord = torch.stack([torch.zeros_like(line_coord), line_coord], dim=-1)  # [3, ...., 2]\n\n        # Stop gradients from going to sampler\n        line_coord = line_coord.view(3, -1, 1, 2).detach()\n\n        line_features = F.grid_sample(self.line_coef, line_coord, align_corners=True)  # [3, Components, -1, 1]\n\n        features = torch.prod(line_features, dim=0)\n        features = torch.moveaxis(features.view(self.num_components, *in_tensor.shape[:-1]), 0, -1)\n\n        return features  # [..., Components]\n\n    @torch.no_grad()\n    def upsample_grid(self, resolution: int) -> None:\n        \"\"\"Upsamples underyling feature grid\n\n        Args:\n            resolution: Target resolution.\n        \"\"\"\n\n        line_coef = F.interpolate(self.line_coef.data, size=(resolution, 1), mode=\"bilinear\", align_corners=True)\n        self.line_coef = torch.nn.Parameter(line_coef)\n\n        self.resolution = resolution\n\n\nclass TensorVMEncoding(Encoding):\n    \"\"\"Learned vector-matrix encoding proposed by TensoRF\n\n    Args:\n        resolution: Resolution of grid.\n        num_components: Number of components per dimension.\n        init_scale: Initialization scale.\n    \"\"\"\n\n    plane_coef: Float[Tensor, \"3 num_components resolution resolution\"]\n    line_coef: Float[Tensor, \"3 num_components resolution 1\"]\n\n    def __init__(\n        self,\n        resolution: int = 128,\n        num_components: int = 24,\n        init_scale: float = 0.1,\n    ) -> None:\n        super().__init__(in_dim=3)\n\n        self.resolution = resolution\n        self.num_components = num_components\n\n        self.plane_coef = nn.Parameter(init_scale * torch.randn((3, num_components, resolution, resolution)))\n        self.line_coef = nn.Parameter(init_scale * torch.randn((3, num_components, resolution, 1)))\n\n    def get_out_dim(self) -> int:\n        return self.num_components * 3\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Compute encoding for each position in in_positions\n\n        Args:\n            in_tensor: position inside bounds in range [-1,1],\n\n        Returns: Encoded position\n        \"\"\"\n        plane_coord = torch.stack([in_tensor[..., [0, 1]], in_tensor[..., [0, 2]], in_tensor[..., [1, 2]]])  # [3,...,2]\n        line_coord = torch.stack([in_tensor[..., 2], in_tensor[..., 1], in_tensor[..., 0]])  # [3, ...]\n        line_coord = torch.stack([torch.zeros_like(line_coord), line_coord], dim=-1)  # [3, ...., 2]\n\n        # Stop gradients from going to sampler\n        plane_coord = plane_coord.view(3, -1, 1, 2).detach()\n        line_coord = line_coord.view(3, -1, 1, 2).detach()\n\n        plane_features = F.grid_sample(self.plane_coef, plane_coord, align_corners=True)  # [3, Components, -1, 1]\n        line_features = F.grid_sample(self.line_coef, line_coord, align_corners=True)  # [3, Components, -1, 1]\n\n        features = plane_features * line_features  # [3, Components, -1, 1]\n        features = torch.moveaxis(features.view(3 * self.num_components, *in_tensor.shape[:-1]), 0, -1)\n\n        return features  # [..., 3 * Components]\n\n    @torch.no_grad()\n    def upsample_grid(self, resolution: int) -> None:\n        \"\"\"Upsamples underlying feature grid\n\n        Args:\n            resolution: Target resolution.\n        \"\"\"\n        plane_coef = F.interpolate(\n            self.plane_coef.data, size=(resolution, resolution), mode=\"bilinear\", align_corners=True\n        )\n        line_coef = F.interpolate(self.line_coef.data, size=(resolution, 1), mode=\"bilinear\", align_corners=True)\n\n        self.plane_coef, self.line_coef = torch.nn.Parameter(plane_coef), torch.nn.Parameter(line_coef)\n        self.resolution = resolution\n\n\nclass TriplaneEncoding(Encoding):\n    \"\"\"Learned triplane encoding\n\n    The encoding at [i,j,k] is an n dimensional vector corresponding to the element-wise product of the\n    three n dimensional vectors at plane_coeff[i,j], plane_coeff[i,k], and plane_coeff[j,k].\n\n    This allows for marginally more expressivity than the TensorVMEncoding, and each component is self standing\n    and symmetrical, unlike with VM decomposition where we needed one component with a vector along all the x, y, z\n    directions for symmetry.\n\n    This can be thought of as 3 planes of features perpendicular to the x, y, and z axes, respectively and intersecting\n    at the origin, and the encoding being the element-wise product of the element at the projection of [i, j, k] on\n    these planes.\n\n    The use for this is in representing a tensor decomp of a 4D embedding tensor: (x, y, z, feature_size)\n\n    This will return a tensor of shape (bs:..., num_components)\n\n    Args:\n        resolution: Resolution of grid.\n        num_components: The number of scalar triplanes to use (ie: output feature size)\n        init_scale: The scale of the initial values of the planes\n        product: Whether to use the element-wise product of the planes or the sum\n    \"\"\"\n\n    plane_coef: Float[Tensor, \"3 num_components resolution resolution\"]\n\n    def __init__(\n        self,\n        resolution: int = 32,\n        num_components: int = 64,\n        init_scale: float = 0.1,\n        reduce: Literal[\"sum\", \"product\"] = \"sum\",\n    ) -> None:\n        super().__init__(in_dim=3)\n\n        self.resolution = resolution\n        self.num_components = num_components\n        self.init_scale = init_scale\n        self.reduce = reduce\n\n        self.plane_coef = nn.Parameter(\n            self.init_scale * torch.randn((3, self.num_components, self.resolution, self.resolution))\n        )\n\n    def get_out_dim(self) -> int:\n        return self.num_components\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs 3\"]) -> Float[Tensor, \"*bs num_components featuresize\"]:\n        \"\"\"Sample features from this encoder. Expects in_tensor to be in range [0, resolution]\"\"\"\n\n        original_shape = in_tensor.shape\n        in_tensor = in_tensor.reshape(-1, 3)\n\n        plane_coord = torch.stack([in_tensor[..., [0, 1]], in_tensor[..., [0, 2]], in_tensor[..., [1, 2]]], dim=0)\n\n        # Stop gradients from going to sampler\n        plane_coord = plane_coord.detach().view(3, -1, 1, 2)\n        plane_features = F.grid_sample(\n            self.plane_coef, plane_coord, align_corners=True\n        )  # [3, num_components, flattened_bs, 1]\n\n        if self.reduce == \"product\":\n            plane_features = plane_features.prod(0).squeeze(-1).T  # [flattened_bs, num_components]\n        else:\n            plane_features = plane_features.sum(0).squeeze(-1).T\n\n        return plane_features.reshape(*original_shape[:-1], self.num_components)\n\n    @torch.no_grad()\n    def upsample_grid(self, resolution: int) -> None:\n        \"\"\"Upsamples underlying feature grid\n\n        Args:\n            resolution: Target resolution.\n        \"\"\"\n        plane_coef = F.interpolate(\n            self.plane_coef.data, size=(resolution, resolution), mode=\"bilinear\", align_corners=True\n        )\n\n        self.plane_coef = torch.nn.Parameter(plane_coef)\n        self.resolution = resolution\n\n\nclass KPlanesEncoding(Encoding):\n    \"\"\"Learned K-Planes encoding\n\n    A plane encoding supporting both 3D and 4D coordinates. With 3D coordinates this is similar to\n    :class:`TriplaneEncoding`. With 4D coordinates, the encoding at point ``[i,j,k,q]`` is\n    a n-dimensional vector computed as the elementwise product of 6 n-dimensional vectors at\n    ``planes[i,j]``, ``planes[i,k]``, ``planes[i,q]``, ``planes[j,k]``, ``planes[j,q]``,\n    ``planes[k,q]``.\n\n    Unlike :class:`TriplaneEncoding` this class supports different resolution along each axis.\n\n    This will return a tensor of shape (bs:..., num_components)\n\n    Args:\n        resolution: Resolution of the grid. Can be a sequence of 3 or 4 integers.\n        num_components: The number of scalar planes to use (ie: output feature size)\n        init_a: The lower-bound of the uniform distribution used to initialize the spatial planes\n        init_b: The upper-bound of the uniform distribution used to initialize the spatial planes\n        reduce: Whether to use the element-wise product of the planes or the sum\n    \"\"\"\n\n    def __init__(\n        self,\n        resolution: Sequence[int] = (128, 128, 128),\n        num_components: int = 64,\n        init_a: float = 0.1,\n        init_b: float = 0.5,\n        reduce: Literal[\"sum\", \"product\"] = \"product\",\n    ) -> None:\n        super().__init__(in_dim=len(resolution))\n\n        self.resolution = resolution\n        self.num_components = num_components\n        self.reduce = reduce\n        if self.in_dim not in {3, 4}:\n            raise ValueError(\n                f\"The dimension of coordinates must be either 3 (static scenes) \"\n                f\"or 4 (dynamic scenes). Found resolution with {self.in_dim} dimensions.\"\n            )\n        has_time_planes = self.in_dim == 4\n\n        self.coo_combs = list(itertools.combinations(range(self.in_dim), 2))\n        # Unlike the Triplane encoding, we use a parameter list instead of batching all planes\n        # together to support uneven resolutions (especially useful for time).\n        # Dynamic models (in_dim == 4) will have 6 planes:\n        # (y, x), (z, x), (t, x), (z, y), (t, y), (t, z)\n        # static models (in_dim == 3) will only have the 1st, 2nd and 4th planes.\n        self.plane_coefs = nn.ParameterList()\n        for coo_comb in self.coo_combs:\n            new_plane_coef = nn.Parameter(\n                torch.empty([self.num_components] + [self.resolution[cc] for cc in coo_comb[::-1]])\n            )\n            if has_time_planes and 3 in coo_comb:  # Time planes initialized to 1\n                nn.init.ones_(new_plane_coef)\n            else:\n                nn.init.uniform_(new_plane_coef, a=init_a, b=init_b)\n            self.plane_coefs.append(new_plane_coef)\n\n    def get_out_dim(self) -> int:\n        return self.num_components\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Sample features from this encoder. Expects ``in_tensor`` to be in range [-1, 1]\"\"\"\n        original_shape = in_tensor.shape\n\n        assert any(self.coo_combs)\n        output = 1.0 if self.reduce == \"product\" else 0.0  # identity for corresponding op\n        for ci, coo_comb in enumerate(self.coo_combs):\n            grid = self.plane_coefs[ci].unsqueeze(0)  # [1, feature_dim, reso1, reso2]\n            coords = in_tensor[..., coo_comb].view(1, 1, -1, 2)  # [1, 1, flattened_bs, 2]\n            interp = F.grid_sample(\n                grid, coords, align_corners=True, padding_mode=\"border\"\n            )  # [1, output_dim, 1, flattened_bs]\n            interp = interp.view(self.num_components, -1).T  # [flattened_bs, output_dim]\n            if self.reduce == \"product\":\n                output = output * interp\n            else:\n                output = output + interp\n\n        # Typing: output gets converted to a tensor after the first iteration of the loop\n        assert isinstance(output, Tensor)\n        return output.reshape(*original_shape[:-1], self.num_components)\n\n\nclass SHEncoding(Encoding):\n    \"\"\"Spherical harmonic encoding\n\n    Args:\n        levels: Number of spherical harmonic levels to encode.\n    \"\"\"\n\n    def __init__(self, levels: int = 4, implementation: Literal[\"tcnn\", \"torch\"] = \"torch\") -> None:\n        super().__init__(in_dim=3)\n\n        if levels <= 0 or levels > 4:\n            raise ValueError(f\"Spherical harmonic encoding only supports 1 to 4 levels, requested {levels}\")\n\n        self.levels = levels\n\n        self.tcnn_encoding = None\n        if implementation == \"tcnn\" and not TCNN_EXISTS:\n            print_tcnn_speed_warning(\"SHEncoding\")\n        elif implementation == \"tcnn\":\n            encoding_config = self.get_tcnn_encoding_config(levels=self.levels)\n            self.tcnn_encoding = tcnn.Encoding(\n                n_input_dims=3,\n                encoding_config=encoding_config,\n            )\n\n    @classmethod\n    def get_tcnn_encoding_config(cls, levels) -> dict:\n        \"\"\"Get the encoding configuration for tcnn if implemented\"\"\"\n        encoding_config = {\n            \"otype\": \"SphericalHarmonics\",\n            \"degree\": levels,\n        }\n        return encoding_config\n\n    def get_out_dim(self) -> int:\n        return self.levels**2\n\n    @torch.no_grad()\n    def pytorch_fwd(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        \"\"\"Forward pass using pytorch. Significantly slower than TCNN implementation.\"\"\"\n        return components_from_spherical_harmonics(levels=self.levels, directions=in_tensor)\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs input_dim\"]) -> Float[Tensor, \"*bs output_dim\"]:\n        if self.tcnn_encoding is not None:\n            return self.tcnn_encoding(in_tensor)\n        return self.pytorch_fwd(in_tensor)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/field_heads.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCollection of render heads\n\"\"\"\n\nfrom enum import Enum\nfrom typing import Callable, Optional, Union\n\nimport torch\nfrom jaxtyping import Float, Shaped\nfrom torch import Tensor, nn\n\nfrom nerfstudio.field_components.base_field_component import FieldComponent\n\n\nclass FieldHeadNames(Enum):\n    \"\"\"Possible field outputs\"\"\"\n\n    RGB = \"rgb\"\n    SH = \"sh\"\n    DENSITY = \"density\"\n    NORMALS = \"normals\"\n    PRED_NORMALS = \"pred_normals\"\n    UNCERTAINTY = \"uncertainty\"\n    BACKGROUND_RGB = \"background_rgb\"\n    TRANSIENT_RGB = \"transient_rgb\"\n    TRANSIENT_DENSITY = \"transient_density\"\n    SEMANTICS = \"semantics\"\n    SDF = \"sdf\"\n    ALPHA = \"alpha\"\n    GRADIENT = \"gradient\"\n\n\nclass FieldHead(FieldComponent):\n    \"\"\"Base field output\n\n    Args:\n        out_dim: output dimension for renderer\n        field_head_name: Field type\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(\n        self,\n        out_dim: int,\n        field_head_name: FieldHeadNames,\n        in_dim: Optional[int] = None,\n        activation: Optional[Union[nn.Module, Callable]] = None,\n    ) -> None:\n        super().__init__()\n        self.out_dim = out_dim\n        self.activation = activation\n        self.field_head_name = field_head_name\n        self.net = None\n        if in_dim is not None:\n            self.in_dim = in_dim\n            self._construct_net()\n\n    def set_in_dim(self, in_dim: int) -> None:\n        \"\"\"Set input dimension of Field Head\"\"\"\n        self.in_dim = in_dim\n        self._construct_net()\n\n    def _construct_net(self):\n        self.net = nn.Linear(self.in_dim, self.out_dim)\n\n    def forward(self, in_tensor: Shaped[Tensor, \"*bs in_dim\"]) -> Shaped[Tensor, \"*bs out_dim\"]:\n        \"\"\"Process network output for renderer\n\n        Args:\n            in_tensor: Network input\n\n        Returns:\n            Render head output\n        \"\"\"\n        if not self.net:\n            raise SystemError(\"in_dim not set. Must be provided to constructor, or set_in_dim() should be called.\")\n        out_tensor = self.net(in_tensor)\n        if self.activation:\n            out_tensor = self.activation(out_tensor)\n        return out_tensor\n\n\nclass DensityFieldHead(FieldHead):\n    \"\"\"Density output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Softplus()) -> None:\n        super().__init__(in_dim=in_dim, out_dim=1, field_head_name=FieldHeadNames.DENSITY, activation=activation)\n\n\nclass RGBFieldHead(FieldHead):\n    \"\"\"RGB output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Sigmoid()) -> None:\n        super().__init__(in_dim=in_dim, out_dim=3, field_head_name=FieldHeadNames.RGB, activation=activation)\n\n\nclass SHFieldHead(FieldHead):\n    \"\"\"Spherical harmonics output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        levels: Number of spherical harmonics layers.\n        channels: Number of channels. Defaults to 3 (ie RGB).\n        activation: Output activation.\n    \"\"\"\n\n    def __init__(\n        self, in_dim: Optional[int] = None, levels: int = 3, channels: int = 3, activation: Optional[nn.Module] = None\n    ) -> None:\n        out_dim = channels * levels**2\n        super().__init__(in_dim=in_dim, out_dim=out_dim, field_head_name=FieldHeadNames.SH, activation=activation)\n\n\nclass UncertaintyFieldHead(FieldHead):\n    \"\"\"Uncertainty output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Softplus()) -> None:\n        super().__init__(in_dim=in_dim, out_dim=1, field_head_name=FieldHeadNames.UNCERTAINTY, activation=activation)\n\n\nclass TransientRGBFieldHead(FieldHead):\n    \"\"\"Transient RGB output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Sigmoid()) -> None:\n        super().__init__(in_dim=in_dim, out_dim=3, field_head_name=FieldHeadNames.TRANSIENT_RGB, activation=activation)\n\n\nclass TransientDensityFieldHead(FieldHead):\n    \"\"\"Transient density output\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Softplus()) -> None:\n        super().__init__(\n            in_dim=in_dim, out_dim=1, field_head_name=FieldHeadNames.TRANSIENT_DENSITY, activation=activation\n        )\n\n\nclass SemanticFieldHead(FieldHead):\n    \"\"\"Semantic output\n\n    Args:\n        num_classes: Number of semantic classes\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, num_classes: int, in_dim: Optional[int] = None) -> None:\n        super().__init__(in_dim=in_dim, out_dim=num_classes, field_head_name=FieldHeadNames.SEMANTICS, activation=None)\n\n\nclass PredNormalsFieldHead(FieldHead):\n    \"\"\"Predicted normals output.\n\n    Args:\n        in_dim: input dimension. If not defined in constructor, it must be set later.\n        activation: output head activation\n    \"\"\"\n\n    def __init__(self, in_dim: Optional[int] = None, activation: Optional[nn.Module] = nn.Tanh()) -> None:\n        super().__init__(in_dim=in_dim, out_dim=3, field_head_name=FieldHeadNames.PRED_NORMALS, activation=activation)\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs in_dim\"]) -> Float[Tensor, \"*bs out_dim\"]:\n        \"\"\"Needed to normalize the output into valid normals.\"\"\"\n        out_tensor = super().forward(in_tensor)\n        out_tensor = torch.nn.functional.normalize(out_tensor, dim=-1)\n        return out_tensor\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/mlp.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nMulti Layer Perceptron\n\"\"\"\n\nfrom typing import Literal, Optional, Set, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.field_components.base_field_component import FieldComponent\nfrom nerfstudio.field_components.encodings import HashEncoding\nfrom nerfstudio.utils.external import TCNN_EXISTS, tcnn\nfrom nerfstudio.utils.printing import print_tcnn_speed_warning\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef activation_to_tcnn_string(activation: Union[nn.Module, None]) -> str:\n    \"\"\"Converts a torch.nn activation function to a string that can be used to\n    initialize a TCNN activation function.\n\n    Args:\n        activation: torch.nn activation function\n    Returns:\n        str: TCNN activation function string\n    \"\"\"\n\n    if isinstance(activation, nn.ReLU):\n        return \"ReLU\"\n    if isinstance(activation, nn.LeakyReLU):\n        return \"Leaky ReLU\"\n    if isinstance(activation, nn.Sigmoid):\n        return \"Sigmoid\"\n    if isinstance(activation, nn.Softplus):\n        return \"Softplus\"\n    if isinstance(activation, nn.Tanh):\n        return \"Tanh\"\n    if isinstance(activation, type(None)):\n        return \"None\"\n    tcnn_documentation_url = \"https://github.com/NVlabs/tiny-cuda-nn/blob/master/DOCUMENTATION.md#activation-functions\"\n    raise ValueError(\n        f\"TCNN activation {activation} not supported for now.\\nSee {tcnn_documentation_url} for TCNN documentation.\"\n    )\n\n\nclass MLP(FieldComponent):\n    \"\"\"Multilayer perceptron\n\n    Args:\n        in_dim: Input layer dimension\n        num_layers: Number of network layers\n        layer_width: Width of each MLP layer\n        out_dim: Output layer dimension. Uses layer_width if None.\n        activation: intermediate layer activation function.\n        out_activation: output activation function.\n        implementation: Implementation of hash encoding. Fallback to torch if tcnn not available.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_dim: int,\n        num_layers: int,\n        layer_width: int,\n        out_dim: Optional[int] = None,\n        skip_connections: Optional[Tuple[int]] = None,\n        activation: Optional[nn.Module] = nn.ReLU(),\n        out_activation: Optional[nn.Module] = None,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"torch\",\n    ) -> None:\n        super().__init__()\n        self.in_dim = in_dim\n        assert self.in_dim > 0\n        self.out_dim = out_dim if out_dim is not None else layer_width\n        self.num_layers = num_layers\n        self.layer_width = layer_width\n        self.skip_connections = skip_connections\n        self._skip_connections: Set[int] = set(skip_connections) if skip_connections else set()\n        self.activation = activation\n        self.out_activation = out_activation\n        self.net = None\n\n        self.tcnn_encoding = None\n        if implementation == \"torch\":\n            self.build_nn_modules()\n        elif implementation == \"tcnn\" and not TCNN_EXISTS:\n            print_tcnn_speed_warning(\"MLP\")\n            self.build_nn_modules()\n        elif implementation == \"tcnn\":\n            network_config = self.get_tcnn_network_config(\n                activation=self.activation,\n                out_activation=self.out_activation,\n                layer_width=self.layer_width,\n                num_layers=self.num_layers,\n            )\n            self.tcnn_encoding = tcnn.Network(\n                n_input_dims=in_dim,\n                n_output_dims=self.out_dim,\n                network_config=network_config,\n            )\n\n    @classmethod\n    def get_tcnn_network_config(cls, activation, out_activation, layer_width, num_layers) -> dict:\n        \"\"\"Get the network configuration for tcnn if implemented\"\"\"\n        activation_str = activation_to_tcnn_string(activation)\n        output_activation_str = activation_to_tcnn_string(out_activation)\n        if layer_width in [16, 32, 64, 128]:\n            network_config = {\n                \"otype\": \"FullyFusedMLP\",\n                \"activation\": activation_str,\n                \"output_activation\": output_activation_str,\n                \"n_neurons\": layer_width,\n                \"n_hidden_layers\": num_layers - 1,\n            }\n        else:\n            CONSOLE.line()\n            CONSOLE.print(\"[bold yellow]WARNING: Using slower TCNN CutlassMLP instead of TCNN FullyFusedMLP\")\n            CONSOLE.print(\"[bold yellow]Use layer width of 16, 32, 64, or 128 to use the faster TCNN FullyFusedMLP.\")\n            CONSOLE.line()\n            network_config = {\n                \"otype\": \"CutlassMLP\",\n                \"activation\": activation_str,\n                \"output_activation\": output_activation_str,\n                \"n_neurons\": layer_width,\n                \"n_hidden_layers\": num_layers - 1,\n            }\n        return network_config\n\n    def build_nn_modules(self) -> None:\n        \"\"\"Initialize the torch version of the multi-layer perceptron.\"\"\"\n        layers = []\n        if self.num_layers == 1:\n            layers.append(nn.Linear(self.in_dim, self.out_dim))\n        else:\n            for i in range(self.num_layers - 1):\n                if i == 0:\n                    assert i not in self._skip_connections, \"Skip connection at layer 0 doesn't make sense.\"\n                    layers.append(nn.Linear(self.in_dim, self.layer_width))\n                elif i in self._skip_connections:\n                    layers.append(nn.Linear(self.layer_width + self.in_dim, self.layer_width))\n                else:\n                    layers.append(nn.Linear(self.layer_width, self.layer_width))\n            layers.append(nn.Linear(self.layer_width, self.out_dim))\n        self.layers = nn.ModuleList(layers)\n\n    def pytorch_fwd(self, in_tensor: Float[Tensor, \"*bs in_dim\"]) -> Float[Tensor, \"*bs out_dim\"]:\n        \"\"\"Process input with a multilayer perceptron.\n\n        Args:\n            in_tensor: Network input\n\n        Returns:\n            MLP network output\n        \"\"\"\n        x = in_tensor\n        for i, layer in enumerate(self.layers):\n            # as checked in `build_nn_modules`, 0 should not be in `_skip_connections`\n            if i in self._skip_connections:\n                x = torch.cat([in_tensor, x], -1)\n            x = layer(x)\n            if self.activation is not None and i < len(self.layers) - 1:\n                x = self.activation(x)\n        if self.out_activation is not None:\n            x = self.out_activation(x)\n        return x\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs in_dim\"]) -> Float[Tensor, \"*bs out_dim\"]:\n        if self.tcnn_encoding is not None:\n            return self.tcnn_encoding(in_tensor)\n        return self.pytorch_fwd(in_tensor)\n\n\nclass MLPWithHashEncoding(FieldComponent):\n    \"\"\"Multilayer perceptron with hash encoding\n\n    Args:\n        num_levels: Number of feature grids.\n        min_res: Resolution of smallest feature grid.\n        max_res: Resolution of largest feature grid.\n        log2_hashmap_size: Size of hash map is 2^log2_hashmap_size.\n        features_per_level: Number of features per level.\n        hash_init_scale: Value to initialize hash grid.\n        interpolation: Interpolation override for tcnn hashgrid. Not supported for torch unless linear.\n        num_layers: Number of network layers\n        layer_width: Width of each MLP layer\n        out_dim: Output layer dimension. Uses layer_width if None.\n        activation: intermediate layer activation function.\n        out_activation: output activation function.\n        implementation: Implementation of hash encoding. Fallback to torch if tcnn not available.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_levels: int = 16,\n        min_res: int = 16,\n        max_res: int = 1024,\n        log2_hashmap_size: int = 19,\n        features_per_level: int = 2,\n        hash_init_scale: float = 0.001,\n        interpolation: Optional[Literal[\"Nearest\", \"Linear\", \"Smoothstep\"]] = None,\n        num_layers: int = 2,\n        layer_width: int = 64,\n        out_dim: Optional[int] = None,\n        skip_connections: Optional[Tuple[int]] = None,\n        activation: Optional[nn.Module] = nn.ReLU(),\n        out_activation: Optional[nn.Module] = None,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"torch\",\n    ) -> None:\n        super().__init__()\n        self.in_dim = 3\n\n        self.num_levels = num_levels\n        self.min_res = min_res\n        self.max_res = max_res\n        self.features_per_level = features_per_level\n        self.hash_init_scale = hash_init_scale\n        self.log2_hashmap_size = log2_hashmap_size\n        self.hash_table_size = 2**log2_hashmap_size\n\n        self.growth_factor = np.exp((np.log(max_res) - np.log(min_res)) / (num_levels - 1)) if num_levels > 1 else 1\n\n        self.out_dim = out_dim if out_dim is not None else layer_width\n        self.num_layers = num_layers\n        self.layer_width = layer_width\n        self.skip_connections = skip_connections\n        self._skip_connections: Set[int] = set(skip_connections) if skip_connections else set()\n        self.activation = activation\n        self.out_activation = out_activation\n        self.net = None\n\n        self.tcnn_encoding = None\n        if implementation == \"torch\":\n            self.build_nn_modules()\n        elif implementation == \"tcnn\" and not TCNN_EXISTS:\n            print_tcnn_speed_warning(\"MLPWithHashEncoding\")\n            self.build_nn_modules()\n        elif implementation == \"tcnn\":\n            self.model = tcnn.NetworkWithInputEncoding(\n                n_input_dims=self.in_dim,\n                n_output_dims=self.out_dim,\n                encoding_config=HashEncoding.get_tcnn_encoding_config(\n                    num_levels=self.num_levels,\n                    features_per_level=self.features_per_level,\n                    log2_hashmap_size=self.log2_hashmap_size,\n                    min_res=self.min_res,\n                    growth_factor=self.growth_factor,\n                    interpolation=interpolation,\n                ),\n                network_config=MLP.get_tcnn_network_config(\n                    activation=self.activation,\n                    out_activation=self.out_activation,\n                    layer_width=self.layer_width,\n                    num_layers=self.num_layers,\n                ),\n            )\n\n    def build_nn_modules(self) -> None:\n        \"\"\"Initialize the torch version of the MLP with hash encoding.\"\"\"\n        encoder = HashEncoding(\n            num_levels=self.num_levels,\n            min_res=self.min_res,\n            max_res=self.max_res,\n            log2_hashmap_size=self.log2_hashmap_size,\n            features_per_level=self.features_per_level,\n            hash_init_scale=self.hash_init_scale,\n            implementation=\"torch\",\n        )\n        mlp = MLP(\n            in_dim=encoder.get_out_dim(),\n            num_layers=self.num_layers,\n            layer_width=self.layer_width,\n            out_dim=self.out_dim,\n            skip_connections=self.skip_connections,\n            activation=self.activation,\n            out_activation=self.out_activation,\n            implementation=\"torch\",\n        )\n        self.model = torch.nn.Sequential(encoder, mlp)\n\n    def forward(self, in_tensor: Float[Tensor, \"*bs in_dim\"]) -> Float[Tensor, \"*bs out_dim\"]:\n        return self.model(in_tensor)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/spatial_distortions.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Space distortions.\"\"\"\n\nimport abc\nfrom typing import Optional, Union\n\nimport torch\nfrom functorch import jacrev, vmap\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.utils.math import Gaussians\n\n\nclass SpatialDistortion(nn.Module):\n    \"\"\"Apply spatial distortions\"\"\"\n\n    @abc.abstractmethod\n    def forward(self, positions: Union[Float[Tensor, \"*bs 3\"], Gaussians]) -> Union[Float[Tensor, \"*bs 3\"], Gaussians]:\n        \"\"\"\n        Args:\n            positions: Sample to distort\n\n        Returns:\n            Union: distorted sample\n        \"\"\"\n\n\nclass SceneContraction(SpatialDistortion):\n    \"\"\"Contract unbounded space using the contraction was proposed in MipNeRF-360.\n        We use the following contraction equation:\n\n        .. math::\n\n            f(x) = \\\\begin{cases}\n                x & ||x|| \\\\leq 1 \\\\\\\\\n                (2 - \\\\frac{1}{||x||})(\\\\frac{x}{||x||}) & ||x|| > 1\n            \\\\end{cases}\n\n        If the order is not specified, we use the Frobenius norm, this will contract the space to a sphere of\n        radius 2. If the order is L_inf (order=float(\"inf\")), we will contract the space to a cube of side length 4.\n        If using voxel based encodings such as the Hash encoder, we recommend using the L_inf norm.\n\n        Args:\n            order: Order of the norm. Default to the Frobenius norm. Must be set to None for Gaussians.\n\n    \"\"\"\n\n    def __init__(self, order: Optional[Union[float, int]] = None) -> None:\n        super().__init__()\n        self.order = order\n\n    def forward(self, positions):\n        def contract(x):\n            mag = torch.linalg.norm(x, ord=self.order, dim=-1)[..., None]\n            return torch.where(mag < 1, x, (2 - (1 / mag)) * (x / mag))\n\n        if isinstance(positions, Gaussians):\n            means = contract(positions.mean.clone())\n\n            def contract_gauss(x):\n                return (2 - 1 / torch.linalg.norm(x, ord=self.order, dim=-1, keepdim=True)) * (\n                    x / torch.linalg.norm(x, ord=self.order, dim=-1, keepdim=True)\n                )\n\n            jc_means = vmap(jacrev(contract_gauss))(positions.mean.view(-1, positions.mean.shape[-1]))\n            jc_means = jc_means.view(list(positions.mean.shape) + [positions.mean.shape[-1]])\n\n            # Only update covariances on positions outside the unit sphere\n            mag = positions.mean.norm(dim=-1)\n            mask = mag >= 1\n            cov = positions.cov.clone()\n            cov[mask] = jc_means[mask] @ positions.cov[mask] @ torch.transpose(jc_means[mask], -2, -1)\n\n            return Gaussians(mean=means, cov=cov)\n\n        return contract(positions)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/field_components/temporal_distortions.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Space distortions which occur as a function of time.\"\"\"\n\nimport abc\nfrom enum import Enum\nfrom typing import Any, Dict, Tuple\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.field_components.encodings import Encoding, NeRFEncoding\nfrom nerfstudio.field_components.mlp import MLP\n\n\nclass TemporalDistortion(nn.Module):\n    \"\"\"Apply spatial distortions as a function of time\"\"\"\n\n    @abc.abstractmethod\n    def forward(self, positions: Float[Tensor, \"*bs 3\"], times: Float[Tensor, \"*bs 1\"]) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"\n        Args:\n            positions: Samples to translate as a function of time\n            times: times for each sample\n\n        Returns:\n            Translated positions.\n        \"\"\"\n\n\nclass TemporalDistortionKind(Enum):\n    \"\"\"Possible temporal distortion names\"\"\"\n\n    DNERF = \"dnerf\"\n\n    def to_temporal_distortion(self, config: Dict[str, Any]) -> TemporalDistortion:\n        \"\"\"Converts this kind to a temporal distortion\"\"\"\n        if self == TemporalDistortionKind.DNERF:\n            return DNeRFDistortion(**config)\n        raise NotImplementedError(f\"Unknown temporal distortion kind {self}\")\n\n\nclass DNeRFDistortion(TemporalDistortion):\n    \"\"\"Optimizable temporal deformation using an MLP.\n    Args:\n        position_encoding: An encoding for the XYZ of distortion\n        temporal_encoding: An encoding for the time of distortion\n        mlp_num_layers: Number of layers in distortion MLP\n        mlp_layer_width: Size of hidden layer for the MLP\n        skip_connections: Number of layers for skip connections in the MLP\n    \"\"\"\n\n    def __init__(\n        self,\n        position_encoding: Encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=10, min_freq_exp=0.0, max_freq_exp=8.0, include_input=True\n        ),\n        temporal_encoding: Encoding = NeRFEncoding(\n            in_dim=1, num_frequencies=10, min_freq_exp=0.0, max_freq_exp=8.0, include_input=True\n        ),\n        mlp_num_layers: int = 4,\n        mlp_layer_width: int = 256,\n        skip_connections: Tuple[int] = (4,),\n    ) -> None:\n        super().__init__()\n        self.position_encoding = position_encoding\n        self.temporal_encoding = temporal_encoding\n        self.mlp_deform = MLP(\n            in_dim=self.position_encoding.get_out_dim() + self.temporal_encoding.get_out_dim(),\n            out_dim=3,\n            num_layers=mlp_num_layers,\n            layer_width=mlp_layer_width,\n            skip_connections=skip_connections,\n        )\n\n    def forward(self, positions: Float[Tensor, \"*bs 3\"], times: Float[Tensor, \"*bs 1\"]) -> Float[Tensor, \"*bs 3\"]:\n        p = self.position_encoding(positions)\n        t = self.temporal_encoding(times)\n        return self.mlp_deform(torch.cat([p, t], dim=-1))\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/base_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nBase class for the graphs.\n\"\"\"\n\nfrom abc import abstractmethod\nfrom dataclasses import dataclass, field\nfrom typing import Dict, Optional, Tuple, Type\n\nimport torch\nfrom jaxtyping import Float, Shaped\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import Frustums, RaySamples\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\n\n\n@dataclass\nclass FieldConfig(InstantiateConfig):\n    \"\"\"Configuration for field instantiation\"\"\"\n\n    _target: Type = field(default_factory=lambda: Field)\n    \"\"\"target class to instantiate\"\"\"\n\n\nclass Field(nn.Module):\n    \"\"\"Base class for fields.\"\"\"\n\n    def __init__(self) -> None:\n        super().__init__()\n        self._sample_locations = None\n        self._density_before_activation = None\n\n    def density_fn(\n        self, positions: Shaped[Tensor, \"*bs 3\"], times: Optional[Shaped[Tensor, \"*bs 1\"]] = None\n    ) -> Shaped[Tensor, \"*bs 1\"]:\n        \"\"\"Returns only the density. Used primarily with the density grid.\n\n        Args:\n            positions: the origin of the samples/frustums\n        \"\"\"\n        del times\n        # Need to figure out a better way to describe positions with a ray.\n        ray_samples = RaySamples(\n            frustums=Frustums(\n                origins=positions,\n                directions=torch.ones_like(positions),\n                starts=torch.zeros_like(positions[..., :1]),\n                ends=torch.zeros_like(positions[..., :1]),\n                pixel_area=torch.ones_like(positions[..., :1]),\n            )\n        )\n        density, _ = self.get_density(ray_samples)\n        return density\n\n    @abstractmethod\n    def get_density(\n        self, ray_samples: RaySamples\n    ) -> Tuple[Shaped[Tensor, \"*batch 1\"], Float[Tensor, \"*batch num_features\"]]:\n        \"\"\"Computes and returns the densities. Returns a tensor of densities and a tensor of features.\n\n        Args:\n            ray_samples: Samples locations to compute density.\n        \"\"\"\n\n    def get_normals(self) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"Computes and returns a tensor of normals.\n\n        Args:\n            density: Tensor of densities.\n        \"\"\"\n        assert self._sample_locations is not None, \"Sample locations must be set before calling get_normals.\"\n        assert self._density_before_activation is not None, \"Density must be set before calling get_normals.\"\n        assert (\n            self._sample_locations.shape[:-1] == self._density_before_activation.shape[:-1]\n        ), \"Sample locations and density must have the same shape besides the last dimension.\"\n\n        normals = torch.autograd.grad(\n            self._density_before_activation,\n            self._sample_locations,\n            grad_outputs=torch.ones_like(self._density_before_activation),\n            retain_graph=True,\n        )[0]\n\n        normals = -torch.nn.functional.normalize(normals, dim=-1)\n\n        return normals\n\n    @abstractmethod\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        \"\"\"Computes and returns the colors. Returns output field values.\n\n        Args:\n            ray_samples: Samples locations to compute outputs.\n            density_embedding: Density embeddings to condition on.\n        \"\"\"\n\n    def forward(self, ray_samples: RaySamples, compute_normals: bool = False) -> Dict[FieldHeadNames, Tensor]:\n        \"\"\"Evaluates the field at points along the ray.\n\n        Args:\n            ray_samples: Samples to evaluate field on.\n        \"\"\"\n        if compute_normals:\n            with torch.enable_grad():\n                density, density_embedding = self.get_density(ray_samples)\n        else:\n            density, density_embedding = self.get_density(ray_samples)\n\n        field_outputs = self.get_outputs(ray_samples, density_embedding=density_embedding)\n        field_outputs[FieldHeadNames.DENSITY] = density  # type: ignore\n\n        if compute_normals:\n            with torch.enable_grad():\n                normals = self.get_normals()\n            field_outputs[FieldHeadNames.NORMALS] = normals  # type: ignore\n        return field_outputs\n\n\ndef get_normalized_directions(directions: Float[Tensor, \"*bs 3\"]) -> Float[Tensor, \"*bs 3\"]:\n    \"\"\"SH encoding must be in the range [0, 1]\n\n    Args:\n        directions: batch of directions\n    \"\"\"\n    return (directions + 1.0) / 2.0\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/density_fields.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nProposal network field.\n\"\"\"\n\nfrom typing import Literal, Optional, Tuple\n\nimport torch\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.field_components.activations import trunc_exp\nfrom nerfstudio.field_components.encodings import HashEncoding\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.field_components.spatial_distortions import SpatialDistortion\nfrom nerfstudio.fields.base_field import Field\n\n\nclass HashMLPDensityField(Field):\n    \"\"\"A lightweight density field module.\n\n    Args:\n        aabb: parameters of scene aabb bounds\n        num_layers: number of hidden layers\n        hidden_dim: dimension of hidden layers\n        spatial_distortion: spatial distortion module\n        use_linear: whether to skip the MLP and use a single linear layer instead\n    \"\"\"\n\n    aabb: Tensor\n\n    def __init__(\n        self,\n        aabb: Tensor,\n        num_layers: int = 2,\n        hidden_dim: int = 64,\n        spatial_distortion: Optional[SpatialDistortion] = None,\n        use_linear: bool = False,\n        num_levels: int = 8,\n        max_res: int = 1024,\n        base_res: int = 16,\n        log2_hashmap_size: int = 18,\n        features_per_level: int = 2,\n        average_init_density: float = 1.0,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\",\n    ) -> None:\n        super().__init__()\n        self.register_buffer(\"aabb\", aabb)\n        self.spatial_distortion = spatial_distortion\n        self.use_linear = use_linear\n        self.average_init_density = average_init_density\n\n        self.register_buffer(\"max_res\", torch.tensor(max_res))\n        self.register_buffer(\"num_levels\", torch.tensor(num_levels))\n        self.register_buffer(\"log2_hashmap_size\", torch.tensor(log2_hashmap_size))\n\n        self.encoding = HashEncoding(\n            num_levels=num_levels,\n            min_res=base_res,\n            max_res=max_res,\n            log2_hashmap_size=log2_hashmap_size,\n            features_per_level=features_per_level,\n            implementation=implementation,\n        )\n\n        if not self.use_linear:\n            network = MLP(\n                in_dim=self.encoding.get_out_dim(),\n                num_layers=num_layers,\n                layer_width=hidden_dim,\n                out_dim=1,\n                activation=nn.ReLU(),\n                out_activation=None,\n                implementation=implementation,\n            )\n            self.mlp_base = torch.nn.Sequential(self.encoding, network)\n        else:\n            self.linear = torch.nn.Linear(self.encoding.get_out_dim(), 1)\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, None]:\n        if self.spatial_distortion is not None:\n            positions = self.spatial_distortion(ray_samples.frustums.get_positions())\n            positions = (positions + 2.0) / 4.0\n        else:\n            positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n        # Make sure the tcnn gets inputs between 0 and 1.\n        selector = ((positions > 0.0) & (positions < 1.0)).all(dim=-1)\n        positions = positions * selector[..., None]\n        positions_flat = positions.view(-1, 3)\n        if not self.use_linear:\n            density_before_activation = (\n                self.mlp_base(positions_flat).view(*ray_samples.frustums.shape, -1).to(positions)\n            )\n        else:\n            x = self.encoding(positions_flat).to(positions)\n            density_before_activation = self.linear(x).view(*ray_samples.frustums.shape, -1)\n\n        # Rectifying the density with an exponential is much more stable than a ReLU or\n        # softplus, because it enables high post-activation (float32) density outputs\n        # from smaller internal (float16) parameters.\n        density = self.average_init_density * trunc_exp(density_before_activation)\n        density = density * selector[..., None]\n        return density, None\n\n    def get_outputs(self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None) -> dict:\n        return {}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/generfacto_field.py",
    "content": "# Copyright 2022 The Nerfstudio Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nField for Generfacto model\n\"\"\"\n\nfrom typing import Dict, Literal, Optional, Tuple\n\nimport numpy as np\nimport torch\nfrom torch import Tensor, nn\nfrom torch.nn.parameter import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle, RaySamples\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.field_components.activations import trunc_exp\nfrom nerfstudio.field_components.encodings import HashEncoding, SHEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.fields.base_field import Field, get_normalized_directions\n\n\nclass GenerfactoField(Field):\n    \"\"\"Generfacto Field that uses TCNN\n\n    Args:\n        aabb: parameters of scene aabb bounds\n        num_layers: number of hidden layers\n        hidden_dim: dimension of hidden layers\n        geo_feat_dim: output geo feat dimensions\n        num_levels: number of levels of the hashmap for the base mlp\n        max_res: maximum resolution of the hashmap for the base mlp\n        log2_hashmap_size: size of the hashmap for the base mlp\n        num_layers_color: number of hidden layers for color network\n        hidden_dim_color: dimension of hidden layers for color network\n    \"\"\"\n\n    def __init__(\n        self,\n        aabb: Tensor,\n        num_layers: int = 2,\n        hidden_dim: int = 64,\n        geo_feat_dim: int = 15,\n        num_levels: int = 16,\n        max_res: int = 256,\n        log2_hashmap_size: int = 19,\n        num_layers_color: int = 3,\n        hidden_dim_color: int = 64,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\",\n    ) -> None:\n        super().__init__()\n\n        self.aabb = Parameter(aabb, requires_grad=False)\n        self.geo_feat_dim = geo_feat_dim\n\n        base_res = 16\n        features_per_level = 2\n        np.exp((np.log(max_res) - np.log(base_res)) / (num_levels - 1))\n\n        self.direction_encoding = SHEncoding(\n            levels=4,\n            implementation=implementation,\n        )\n\n        encoder = HashEncoding(\n            num_levels=num_levels,\n            min_res=base_res,\n            max_res=max_res,\n            log2_hashmap_size=log2_hashmap_size,\n            features_per_level=features_per_level,\n            implementation=implementation,\n        )\n        network = MLP(\n            in_dim=encoder.get_out_dim(),\n            num_layers=num_layers,\n            layer_width=hidden_dim,\n            out_dim=1 + self.geo_feat_dim,\n            activation=nn.ReLU(),\n            out_activation=None,\n            implementation=implementation,\n        )\n        self.mlp_base = torch.nn.Sequential(encoder, network)\n\n        self.mlp_background_color = MLP(\n            in_dim=self.direction_encoding.get_out_dim(),\n            num_layers=2,\n            layer_width=32,\n            out_dim=3,\n            activation=nn.ReLU(),\n            out_activation=nn.Sigmoid(),\n            implementation=implementation,\n        )\n\n        self.mlp_head = MLP(\n            in_dim=self.geo_feat_dim,\n            num_layers=num_layers_color,\n            layer_width=hidden_dim_color,\n            out_dim=3,\n            activation=nn.ReLU(),\n            out_activation=nn.Sigmoid(),\n            implementation=implementation,\n        )\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, Tensor]:\n        \"\"\"Computes and returns the densities.\"\"\"\n        positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n        self._sample_locations = positions\n        if not self._sample_locations.requires_grad:\n            self._sample_locations.requires_grad = True\n        positions_flat = positions.view(-1, 3)\n        h = self.mlp_base(positions_flat).view(*ray_samples.frustums.shape, -1)\n        density_before_activation, base_mlp_out = torch.split(h, [1, self.geo_feat_dim], dim=-1)\n        self._density_before_activation = density_before_activation\n\n        # Rectifying the density with an exponential is much more stable than a ReLU or\n        # softplus, because it enables high post-activation (float32) density outputs\n        # from smaller internal (float16) parameters.\n        density = trunc_exp(density_before_activation.to(positions))\n        return density, base_mlp_out\n\n    def get_background_rgb(self, ray_bundle: RayBundle) -> Tensor:\n        \"\"\"Predicts background colors at infinity.\"\"\"\n        directions = get_normalized_directions(ray_bundle.directions)\n\n        outputs_shape = ray_bundle.directions.shape[:-1]\n        directions_flat = self.direction_encoding(directions.view(-1, 3))\n        background_rgb = self.mlp_background_color(directions_flat).view(*outputs_shape, -1).to(directions)\n\n        return background_rgb\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        assert density_embedding is not None\n        outputs = {}\n\n        directions = get_normalized_directions(ray_samples.frustums.directions)\n\n        outputs_shape = ray_samples.frustums.directions.shape[:-1]\n\n        h = density_embedding.view(-1, self.geo_feat_dim)\n\n        rgb = self.mlp_head(h).view(*outputs_shape, -1).to(directions)\n        outputs.update({FieldHeadNames.RGB: rgb})\n\n        return outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/nerfacto_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nField for compound nerf model, adds scene contraction and image embeddings to instant ngp\n\"\"\"\n\nfrom typing import Dict, Literal, Optional, Tuple\n\nimport torch\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.field_components.activations import trunc_exp\nfrom nerfstudio.field_components.embedding import Embedding\nfrom nerfstudio.field_components.encodings import NeRFEncoding, SHEncoding\nfrom nerfstudio.field_components.field_heads import (\n    FieldHeadNames,\n    PredNormalsFieldHead,\n    SemanticFieldHead,\n    TransientDensityFieldHead,\n    TransientRGBFieldHead,\n    UncertaintyFieldHead,\n)\nfrom nerfstudio.field_components.mlp import MLP, MLPWithHashEncoding\nfrom nerfstudio.field_components.spatial_distortions import SpatialDistortion\nfrom nerfstudio.fields.base_field import Field, get_normalized_directions\n\n\nclass NerfactoField(Field):\n    \"\"\"Compound Field\n\n    Args:\n        aabb: parameters of scene aabb bounds\n        num_images: number of images in the dataset\n        num_layers: number of hidden layers\n        hidden_dim: dimension of hidden layers\n        geo_feat_dim: output geo feat dimensions\n        num_levels: number of levels of the hashmap for the base mlp\n        base_res: base resolution of the hashmap for the base mlp\n        max_res: maximum resolution of the hashmap for the base mlp\n        log2_hashmap_size: size of the hashmap for the base mlp\n        num_layers_color: number of hidden layers for color network\n        num_layers_transient: number of hidden layers for transient network\n        features_per_level: number of features per level for the hashgrid\n        hidden_dim_color: dimension of hidden layers for color network\n        hidden_dim_transient: dimension of hidden layers for transient network\n        appearance_embedding_dim: dimension of appearance embedding\n        transient_embedding_dim: dimension of transient embedding\n        use_transient_embedding: whether to use transient embedding\n        use_semantics: whether to use semantic segmentation\n        num_semantic_classes: number of semantic classes\n        use_pred_normals: whether to use predicted normals\n        use_average_appearance_embedding: whether to use average appearance embedding or zeros for inference\n        spatial_distortion: spatial distortion to apply to the scene\n    \"\"\"\n\n    aabb: Tensor\n\n    def __init__(\n        self,\n        aabb: Tensor,\n        num_images: int,\n        num_layers: int = 2,\n        hidden_dim: int = 64,\n        geo_feat_dim: int = 15,\n        num_levels: int = 16,\n        base_res: int = 16,\n        max_res: int = 2048,\n        log2_hashmap_size: int = 19,\n        num_layers_color: int = 3,\n        num_layers_transient: int = 2,\n        features_per_level: int = 2,\n        hidden_dim_color: int = 64,\n        hidden_dim_transient: int = 64,\n        appearance_embedding_dim: int = 32,\n        transient_embedding_dim: int = 16,\n        use_transient_embedding: bool = False,\n        use_semantics: bool = False,\n        num_semantic_classes: int = 100,\n        pass_semantic_gradients: bool = False,\n        use_pred_normals: bool = False,\n        use_average_appearance_embedding: bool = False,\n        spatial_distortion: Optional[SpatialDistortion] = None,\n        average_init_density: float = 1.0,\n        implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\",\n    ) -> None:\n        super().__init__()\n\n        self.register_buffer(\"aabb\", aabb)\n        self.geo_feat_dim = geo_feat_dim\n\n        self.register_buffer(\"max_res\", torch.tensor(max_res))\n        self.register_buffer(\"num_levels\", torch.tensor(num_levels))\n        self.register_buffer(\"log2_hashmap_size\", torch.tensor(log2_hashmap_size))\n\n        self.spatial_distortion = spatial_distortion\n        self.num_images = num_images\n        self.appearance_embedding_dim = appearance_embedding_dim\n        if self.appearance_embedding_dim > 0:\n            self.embedding_appearance = Embedding(self.num_images, self.appearance_embedding_dim)\n        else:\n            self.embedding_appearance = None\n        self.use_average_appearance_embedding = use_average_appearance_embedding\n        self.use_transient_embedding = use_transient_embedding\n        self.use_semantics = use_semantics\n        self.use_pred_normals = use_pred_normals\n        self.pass_semantic_gradients = pass_semantic_gradients\n        self.base_res = base_res\n        self.average_init_density = average_init_density\n        self.step = 0\n\n        self.direction_encoding = SHEncoding(\n            levels=4,\n            implementation=implementation,\n        )\n\n        self.position_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=2, min_freq_exp=0, max_freq_exp=2 - 1, implementation=implementation\n        )\n\n        self.mlp_base = MLPWithHashEncoding(\n            num_levels=num_levels,\n            min_res=base_res,\n            max_res=max_res,\n            log2_hashmap_size=log2_hashmap_size,\n            features_per_level=features_per_level,\n            num_layers=num_layers,\n            layer_width=hidden_dim,\n            out_dim=1 + self.geo_feat_dim,\n            activation=nn.ReLU(),\n            out_activation=None,\n            implementation=implementation,\n        )\n\n        # transients\n        if self.use_transient_embedding:\n            self.transient_embedding_dim = transient_embedding_dim\n            self.embedding_transient = Embedding(self.num_images, self.transient_embedding_dim)\n            self.mlp_transient = MLP(\n                in_dim=self.geo_feat_dim + self.transient_embedding_dim,\n                num_layers=num_layers_transient,\n                layer_width=hidden_dim_transient,\n                out_dim=hidden_dim_transient,\n                activation=nn.ReLU(),\n                out_activation=None,\n                implementation=implementation,\n            )\n            self.field_head_transient_uncertainty = UncertaintyFieldHead(in_dim=self.mlp_transient.get_out_dim())\n            self.field_head_transient_rgb = TransientRGBFieldHead(in_dim=self.mlp_transient.get_out_dim())\n            self.field_head_transient_density = TransientDensityFieldHead(in_dim=self.mlp_transient.get_out_dim())\n\n        # semantics\n        if self.use_semantics:\n            self.mlp_semantics = MLP(\n                in_dim=self.geo_feat_dim,\n                num_layers=2,\n                layer_width=64,\n                out_dim=hidden_dim_transient,\n                activation=nn.ReLU(),\n                out_activation=None,\n                implementation=implementation,\n            )\n            self.field_head_semantics = SemanticFieldHead(\n                in_dim=self.mlp_semantics.get_out_dim(), num_classes=num_semantic_classes\n            )\n\n        # predicted normals\n        if self.use_pred_normals:\n            self.mlp_pred_normals = MLP(\n                in_dim=self.geo_feat_dim + self.position_encoding.get_out_dim(),\n                num_layers=3,\n                layer_width=64,\n                out_dim=hidden_dim_transient,\n                activation=nn.ReLU(),\n                out_activation=None,\n                implementation=implementation,\n            )\n            self.field_head_pred_normals = PredNormalsFieldHead(in_dim=self.mlp_pred_normals.get_out_dim())\n\n        self.mlp_head = MLP(\n            in_dim=self.direction_encoding.get_out_dim() + self.geo_feat_dim + self.appearance_embedding_dim,\n            num_layers=num_layers_color,\n            layer_width=hidden_dim_color,\n            out_dim=3,\n            activation=nn.ReLU(),\n            out_activation=nn.Sigmoid(),\n            implementation=implementation,\n        )\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, Tensor]:\n        \"\"\"Computes and returns the densities.\"\"\"\n        if self.spatial_distortion is not None:\n            positions = ray_samples.frustums.get_positions()\n            positions = self.spatial_distortion(positions)\n            positions = (positions + 2.0) / 4.0\n        else:\n            positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n        # Make sure the tcnn gets inputs between 0 and 1.\n        selector = ((positions > 0.0) & (positions < 1.0)).all(dim=-1)\n        positions = positions * selector[..., None]\n\n        assert positions.numel() > 0, \"positions is empty.\"\n\n        self._sample_locations = positions\n        if not self._sample_locations.requires_grad:\n            self._sample_locations.requires_grad = True\n        positions_flat = positions.view(-1, 3)\n\n        assert positions_flat.numel() > 0, \"positions_flat is empty.\"\n        h = self.mlp_base(positions_flat).view(*ray_samples.frustums.shape, -1)\n        density_before_activation, base_mlp_out = torch.split(h, [1, self.geo_feat_dim], dim=-1)\n        self._density_before_activation = density_before_activation\n\n        # Rectifying the density with an exponential is much more stable than a ReLU or\n        # softplus, because it enables high post-activation (float32) density outputs\n        # from smaller internal (float16) parameters.\n        density = self.average_init_density * trunc_exp(density_before_activation.to(positions))\n        density = density * selector[..., None]\n        return density, base_mlp_out\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        assert density_embedding is not None\n        outputs = {}\n        if ray_samples.camera_indices is None:\n            raise AttributeError(\"Camera indices are not provided.\")\n        camera_indices = ray_samples.camera_indices.squeeze()\n        directions = get_normalized_directions(ray_samples.frustums.directions)\n        directions_flat = directions.view(-1, 3)\n        d = self.direction_encoding(directions_flat)\n\n        outputs_shape = ray_samples.frustums.directions.shape[:-1]\n\n        # appearance\n        embedded_appearance = None\n        if self.embedding_appearance is not None:\n            if self.training:\n                embedded_appearance = self.embedding_appearance(camera_indices)\n            else:\n                if self.use_average_appearance_embedding:\n                    embedded_appearance = torch.ones(\n                        (*directions.shape[:-1], self.appearance_embedding_dim), device=directions.device\n                    ) * self.embedding_appearance.mean(dim=0)\n                else:\n                    embedded_appearance = torch.zeros(\n                        (*directions.shape[:-1], self.appearance_embedding_dim), device=directions.device\n                    )\n\n        # transients\n        if self.use_transient_embedding and self.training:\n            embedded_transient = self.embedding_transient(camera_indices)\n            transient_input = torch.cat(\n                [\n                    density_embedding.view(-1, self.geo_feat_dim),\n                    embedded_transient.view(-1, self.transient_embedding_dim),\n                ],\n                dim=-1,\n            )\n            x = self.mlp_transient(transient_input).view(*outputs_shape, -1).to(directions)\n            outputs[FieldHeadNames.UNCERTAINTY] = self.field_head_transient_uncertainty(x)\n            outputs[FieldHeadNames.TRANSIENT_RGB] = self.field_head_transient_rgb(x)\n            outputs[FieldHeadNames.TRANSIENT_DENSITY] = self.field_head_transient_density(x)\n\n        # semantics\n        if self.use_semantics:\n            semantics_input = density_embedding.view(-1, self.geo_feat_dim)\n            if not self.pass_semantic_gradients:\n                semantics_input = semantics_input.detach()\n\n            x = self.mlp_semantics(semantics_input).view(*outputs_shape, -1).to(directions)\n            outputs[FieldHeadNames.SEMANTICS] = self.field_head_semantics(x)\n\n        # predicted normals\n        if self.use_pred_normals:\n            positions = ray_samples.frustums.get_positions()\n\n            positions_flat = self.position_encoding(positions.view(-1, 3))\n            pred_normals_inp = torch.cat([positions_flat, density_embedding.view(-1, self.geo_feat_dim)], dim=-1)\n\n            x = self.mlp_pred_normals(pred_normals_inp).view(*outputs_shape, -1).to(directions)\n            outputs[FieldHeadNames.PRED_NORMALS] = self.field_head_pred_normals(x)\n\n        h = torch.cat(\n            [\n                d,\n                density_embedding.view(-1, self.geo_feat_dim),\n            ]\n            + (\n                [embedded_appearance.view(-1, self.appearance_embedding_dim)] if embedded_appearance is not None else []\n            ),\n            dim=-1,\n        )\n        rgb = self.mlp_head(h).view(*outputs_shape, -1).to(directions)\n        outputs.update({FieldHeadNames.RGB: rgb})\n\n        return outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/nerfw_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Fields for nerf-w\"\"\"\n\nfrom typing import Dict, Optional, Tuple\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.embedding import Embedding\nfrom nerfstudio.field_components.encodings import Encoding, Identity\nfrom nerfstudio.field_components.field_heads import (\n    DensityFieldHead,\n    FieldHeadNames,\n    RGBFieldHead,\n    TransientDensityFieldHead,\n    TransientRGBFieldHead,\n    UncertaintyFieldHead,\n)\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.fields.base_field import Field\n\n\nclass VanillaNerfWField(Field):\n    \"\"\"The NeRF-W field which has appearance and transient conditioning.\n\n    Args:\n        num_images: How many images exist in the dataset.\n        position_encoding: Position encoder.\n        direction_encoding: Direction encoder.\n        base_mlp_num_layers: Number of layers for base MLP.\n        base_mlp_layer_width: Width of base MLP layers.\n        head_mlp_num_layers: Number of layer for output head MLP.\n        head_mlp_layer_width: Width of output head MLP layers.\n        appearance_embedding_dim:: Dimension of appearance embedding.\n        transient_embedding_dim:: Dimension of transient embedding.\n        skip_connections: Where to add skip connection in base MLP.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_images: int,\n        position_encoding: Encoding = Identity(in_dim=3),\n        direction_encoding: Encoding = Identity(in_dim=3),\n        base_mlp_num_layers: int = 8,\n        base_mlp_layer_width: int = 256,\n        head_mlp_num_layers: int = 2,\n        head_mlp_layer_width: int = 128,\n        appearance_embedding_dim: int = 48,\n        transient_embedding_dim: int = 16,\n        skip_connections: Tuple[int] = (4,),\n    ) -> None:\n        super().__init__()\n        self.num_images = num_images\n        self.position_encoding = position_encoding\n        self.direction_encoding = direction_encoding\n        self.base_mlp_num_layers = base_mlp_num_layers\n        self.base_mlp_layer_width = base_mlp_layer_width\n        self.head_mlp_num_layers = head_mlp_num_layers\n        self.head_mlp_layer_width = head_mlp_layer_width\n        self.appearance_embedding_dim = appearance_embedding_dim\n        self.transient_embedding_dim = transient_embedding_dim\n\n        if self.appearance_embedding_dim > 0:\n            self.embedding_appearance = Embedding(self.num_images, self.appearance_embedding_dim)\n        else:\n            self.embedding_appearance = None\n        self.embedding_transient = Embedding(self.num_images, self.transient_embedding_dim)\n\n        self.mlp_base = MLP(\n            in_dim=self.position_encoding.get_out_dim(),\n            num_layers=base_mlp_num_layers,\n            layer_width=base_mlp_layer_width,\n            skip_connections=skip_connections,\n            out_activation=nn.ReLU(),\n        )\n        self.mlp_transient = MLP(\n            in_dim=self.mlp_base.get_out_dim() + self.embedding_transient.get_out_dim(),\n            out_dim=base_mlp_layer_width // 2,\n            num_layers=4,\n            layer_width=base_mlp_layer_width,\n            activation=nn.ReLU(),\n            out_activation=nn.ReLU(),\n        )\n        self.mlp_head = MLP(\n            in_dim=self.mlp_base.get_out_dim()\n            + self.direction_encoding.get_out_dim()\n            + (self.embedding_appearance.get_out_dim() if self.embedding_appearance is not None else 0),\n            num_layers=head_mlp_num_layers,\n            layer_width=head_mlp_layer_width,\n            out_activation=nn.ReLU(),\n        )\n\n        self.field_head_density = DensityFieldHead(in_dim=self.mlp_base.get_out_dim())\n        self.field_head_rgb = RGBFieldHead(in_dim=self.mlp_head.get_out_dim())\n\n        self.field_head_transient_uncertainty = UncertaintyFieldHead(in_dim=self.mlp_transient.get_out_dim())\n        self.field_head_transient_rgb = TransientRGBFieldHead(in_dim=self.mlp_transient.get_out_dim())\n        self.field_head_transient_density = TransientDensityFieldHead(in_dim=self.mlp_transient.get_out_dim())\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, Tensor]:\n        \"\"\"Computes and returns the densities.\"\"\"\n        encoded_xyz = self.position_encoding(ray_samples.frustums.get_positions())\n        encoded_xyz = self.position_encoding(ray_samples.frustums.get_positions())\n        base_mlp_out = self.mlp_base(encoded_xyz)\n        density = self.field_head_density(base_mlp_out)\n        return density, base_mlp_out\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Float[Tensor, \"*batch embedding_size\"]] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        \"\"\"Returns the outputs of the NeRF-W field.\n\n        Args:\n            ray_samples: Ray samples.\n            density_embedding: Density embedding.\n\n        Returns:\n            Outputs of the NeRF-W field.\n        \"\"\"\n        outputs = {}\n        encoded_dir = self.direction_encoding(ray_samples.frustums.directions)\n        if ray_samples.camera_indices is None:\n            raise AttributeError(\"Camera indices are not provided.\")\n        camera_indices = ray_samples.camera_indices.squeeze().to(ray_samples.frustums.origins.device)\n        mlp_in = [density_embedding, encoded_dir]\n        if self.embedding_appearance is not None:\n            embedded_appearance = self.embedding_appearance(camera_indices)\n            mlp_in.append(embedded_appearance)\n        mlp_head_out = self.mlp_head(torch.cat(mlp_in, dim=-1))\n        outputs[self.field_head_rgb.field_head_name] = self.field_head_rgb(mlp_head_out)  # static rgb\n        embedded_transient = self.embedding_transient(camera_indices)\n        transient_mlp_in = torch.cat([density_embedding, embedded_transient], dim=-1)  # type: ignore\n        transient_mlp_out = self.mlp_transient(transient_mlp_in)\n        outputs[self.field_head_transient_uncertainty.field_head_name] = self.field_head_transient_uncertainty(\n            transient_mlp_out\n        )  # uncertainty\n        outputs[self.field_head_transient_rgb.field_head_name] = self.field_head_transient_rgb(\n            transient_mlp_out\n        )  # transient rgb\n        outputs[self.field_head_transient_density.field_head_name] = self.field_head_transient_density(\n            transient_mlp_out\n        )  # transient density\n        return outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/sdf_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nField for SDF based model, rather then estimating density to generate a surface,\na signed distance function (SDF) for surface representation is used to help with extracting high fidelity surfaces\n\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, Literal, Optional, Type\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\nfrom torch.nn.parameter import Parameter\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.embedding import Embedding\nfrom nerfstudio.field_components.encodings import NeRFEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SpatialDistortion\nfrom nerfstudio.fields.base_field import Field, FieldConfig\nfrom nerfstudio.utils.external import tcnn\n\n\nclass LearnedVariance(nn.Module):\n    \"\"\"Variance network in NeuS\n\n    Args:\n        init_val: initial value in NeuS variance network\n    \"\"\"\n\n    variance: Tensor\n\n    def __init__(self, init_val):\n        super().__init__()\n        self.register_parameter(\"variance\", nn.Parameter(init_val * torch.ones(1), requires_grad=True))\n\n    def forward(self, x: Float[Tensor, \"1\"]) -> Float[Tensor, \"1\"]:\n        \"\"\"Returns current variance value\"\"\"\n        return torch.ones([len(x), 1], device=x.device) * torch.exp(self.variance * 10.0)\n\n    def get_variance(self) -> Float[Tensor, \"1\"]:\n        \"\"\"return current variance value\"\"\"\n        return torch.exp(self.variance * 10.0).clip(1e-6, 1e6)\n\n\n@dataclass\nclass SDFFieldConfig(FieldConfig):\n    \"\"\"SDF Field Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: SDFField)\n    num_layers: int = 8\n    \"\"\"Number of layers for geometric network\"\"\"\n    hidden_dim: int = 256\n    \"\"\"Number of hidden dimension of geometric network\"\"\"\n    geo_feat_dim: int = 256\n    \"\"\"Dimension of geometric feature\"\"\"\n    num_layers_color: int = 4\n    \"\"\"Number of layers for color network\"\"\"\n    hidden_dim_color: int = 256\n    \"\"\"Number of hidden dimension of color network\"\"\"\n    appearance_embedding_dim: int = 32\n    \"\"\"Dimension of appearance embedding\"\"\"\n    use_appearance_embedding: bool = False\n    \"\"\"Whether to use appearance embedding\"\"\"\n    bias: float = 0.8\n    \"\"\"Sphere size of geometric initialization\"\"\"\n    geometric_init: bool = True\n    \"\"\"Whether to use geometric initialization\"\"\"\n    inside_outside: bool = True\n    \"\"\"Whether to revert signed distance value, set to True for indoor scene\"\"\"\n    weight_norm: bool = True\n    \"\"\"Whether to use weight norm for linear layer\"\"\"\n    use_grid_feature: bool = False\n    \"\"\"Whether to use multi-resolution feature grids\"\"\"\n    divide_factor: float = 2.0\n    \"\"\"Normalization factor for multi-resolution grids\"\"\"\n    beta_init: float = 0.1\n    \"\"\"Init learnable beta value for transformation of sdf to density\"\"\"\n    encoding_type: Literal[\"hash\", \"periodic\", \"tensorf_vm\"] = \"hash\"\n    num_levels: int = 16\n    \"\"\"Number of encoding levels\"\"\"\n    max_res: int = 2048\n    \"\"\"Maximum resolution of the encoding\"\"\"\n    base_res: int = 16\n    \"\"\"Base resolution of the encoding\"\"\"\n    log2_hashmap_size: int = 19\n    \"\"\"Size of the hash map\"\"\"\n    features_per_level: int = 2\n    \"\"\"Number of features per encoding level\"\"\"\n    use_hash: bool = True\n    \"\"\"Whether to use hash encoding\"\"\"\n    smoothstep: bool = True\n    \"\"\"Whether to use the smoothstep function\"\"\"\n\n\nclass SDFField(Field):\n    \"\"\"\n    A field for Signed Distance Functions (SDF).\n\n    Args:\n        config: The configuration for the SDF field.\n        aabb: An axis-aligned bounding box for the SDF field.\n        num_images: The number of images for embedding appearance.\n        use_average_appearance_embedding: Whether to use average appearance embedding. Defaults to False.\n        spatial_distortion: The spatial distortion. Defaults to None.\n    \"\"\"\n\n    config: SDFFieldConfig\n\n    def __init__(\n        self,\n        config: SDFFieldConfig,\n        aabb: Float[Tensor, \"2 3\"],\n        num_images: int,\n        use_average_appearance_embedding: bool = False,\n        spatial_distortion: Optional[SpatialDistortion] = None,\n    ) -> None:\n        super().__init__()\n        self.config = config\n\n        self.aabb = Parameter(aabb, requires_grad=False)\n\n        self.spatial_distortion = spatial_distortion\n        self.num_images = num_images\n\n        self.embedding_appearance = Embedding(self.num_images, self.config.appearance_embedding_dim)\n        self.use_average_appearance_embedding = use_average_appearance_embedding\n        self.use_grid_feature = self.config.use_grid_feature\n        self.divide_factor = self.config.divide_factor\n\n        growth_factor = np.exp((np.log(config.max_res) - np.log(config.base_res)) / (config.num_levels - 1))\n\n        if self.config.encoding_type == \"hash\":\n            # feature encoding\n            self.encoding = tcnn.Encoding(\n                n_input_dims=3,\n                encoding_config={\n                    \"otype\": \"HashGrid\" if config.use_hash else \"DenseGrid\",\n                    \"n_levels\": config.num_levels,\n                    \"n_features_per_level\": config.features_per_level,\n                    \"log2_hashmap_size\": config.log2_hashmap_size,\n                    \"base_resolution\": config.base_res,\n                    \"per_level_scale\": growth_factor,\n                    \"interpolation\": \"Smoothstep\" if config.smoothstep else \"Linear\",\n                },\n            )\n\n        # we concat inputs position ourselves\n        self.position_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=6, min_freq_exp=0.0, max_freq_exp=5.0, include_input=False\n        )\n\n        self.direction_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=4, min_freq_exp=0.0, max_freq_exp=3.0, include_input=True\n        )\n\n        # initialize geometric network\n        self.initialize_geo_layers()\n\n        # deviation_network to compute alpha from sdf from NeuS\n        self.deviation_network = LearnedVariance(init_val=self.config.beta_init)\n\n        # color network\n        dims = [self.config.hidden_dim_color for _ in range(self.config.num_layers_color)]\n        # point, view_direction, normal, feature, embedding\n        in_dim = (\n            3\n            + self.direction_encoding.get_out_dim()\n            + 3\n            + self.config.geo_feat_dim\n            + self.embedding_appearance.get_out_dim()\n        )\n        dims = [in_dim] + dims + [3]\n        self.num_layers_color = len(dims)\n\n        for layer in range(0, self.num_layers_color - 1):\n            out_dim = dims[layer + 1]\n            lin = nn.Linear(dims[layer], out_dim)\n\n            if self.config.weight_norm:\n                lin = nn.utils.weight_norm(lin)\n            setattr(self, \"clin\" + str(layer), lin)\n\n        self.softplus = nn.Softplus(beta=100)\n        self.relu = nn.ReLU()\n        self.sigmoid = torch.nn.Sigmoid()\n\n        self._cos_anneal_ratio = 1.0\n\n        if self.use_grid_feature:\n            assert self.spatial_distortion is not None, \"spatial distortion must be provided when using grid feature\"\n\n    def initialize_geo_layers(self) -> None:\n        \"\"\"\n        Initialize layers for geometric network (sdf)\n        \"\"\"\n        # MLP with geometric initialization\n        dims = [self.config.hidden_dim for _ in range(self.config.num_layers)]\n        in_dim = 3 + self.position_encoding.get_out_dim() + self.encoding.n_output_dims\n        dims = [in_dim] + dims + [1 + self.config.geo_feat_dim]\n        self.num_layers = len(dims)\n        self.skip_in = [4]\n\n        for layer in range(0, self.num_layers - 1):\n            if layer + 1 in self.skip_in:\n                out_dim = dims[layer + 1] - dims[0]\n            else:\n                out_dim = dims[layer + 1]\n\n            lin = nn.Linear(dims[layer], out_dim)\n\n            if self.config.geometric_init:\n                if layer == self.num_layers - 2:\n                    if not self.config.inside_outside:\n                        torch.nn.init.normal_(lin.weight, mean=np.sqrt(np.pi) / np.sqrt(dims[layer]), std=0.0001)\n                        torch.nn.init.constant_(lin.bias, -self.config.bias)\n                    else:\n                        torch.nn.init.normal_(lin.weight, mean=-np.sqrt(np.pi) / np.sqrt(dims[layer]), std=0.0001)\n                        torch.nn.init.constant_(lin.bias, self.config.bias)\n                elif layer == 0:\n                    torch.nn.init.constant_(lin.bias, 0.0)\n                    torch.nn.init.constant_(lin.weight[:, 3:], 0.0)\n                    torch.nn.init.normal_(lin.weight[:, :3], 0.0, np.sqrt(2) / np.sqrt(out_dim))\n                elif layer in self.skip_in:\n                    torch.nn.init.constant_(lin.bias, 0.0)\n                    torch.nn.init.normal_(lin.weight, 0.0, np.sqrt(2) / np.sqrt(out_dim))\n                    torch.nn.init.constant_(lin.weight[:, -(dims[0] - 3) :], 0.0)\n                else:\n                    torch.nn.init.constant_(lin.bias, 0.0)\n                    torch.nn.init.normal_(lin.weight, 0.0, np.sqrt(2) / np.sqrt(out_dim))\n\n            if self.config.weight_norm:\n                lin = nn.utils.weight_norm(lin)\n            setattr(self, \"glin\" + str(layer), lin)\n\n    def set_cos_anneal_ratio(self, anneal: float) -> None:\n        \"\"\"Set the anneal value for the proposal network.\"\"\"\n        self._cos_anneal_ratio = anneal\n\n    def forward_geonetwork(self, inputs: Float[Tensor, \"*batch 3\"]) -> Float[Tensor, \"*batch geo_features+1\"]:\n        \"\"\"forward the geonetwork\"\"\"\n        if self.use_grid_feature:\n            assert self.spatial_distortion is not None, \"spatial distortion must be provided when using grid feature\"\n            positions = self.spatial_distortion(inputs)\n            # map range [-2, 2] to [0, 1]\n            positions = (positions + 2.0) / 4.0\n            feature = self.encoding(positions)\n        else:\n            feature = torch.zeros_like(inputs[:, :1].repeat(1, self.encoding.n_output_dims))\n\n        pe = self.position_encoding(inputs)\n\n        inputs = torch.cat((inputs, pe, feature), dim=-1)\n\n        # Pass through layers\n        outputs = inputs\n\n        for layer in range(0, self.num_layers - 1):\n            lin = getattr(self, \"glin\" + str(layer))\n\n            if layer in self.skip_in:\n                outputs = torch.cat([outputs, inputs], 1) / np.sqrt(2)\n\n            outputs = lin(outputs)\n\n            if layer < self.num_layers - 2:\n                outputs = self.softplus(outputs)\n        return outputs\n\n    # TODO: fix ... in shape annotations.\n    def get_sdf(self, ray_samples: RaySamples) -> Float[Tensor, \"num_samples ... 1\"]:\n        \"\"\"predict the sdf value for ray samples\"\"\"\n        positions = ray_samples.frustums.get_start_positions()\n        positions_flat = positions.view(-1, 3)\n        hidden_output = self.forward_geonetwork(positions_flat).view(*ray_samples.frustums.shape, -1)\n        sdf, _ = torch.split(hidden_output, [1, self.config.geo_feat_dim], dim=-1)\n        return sdf\n\n    def get_alpha(\n        self,\n        ray_samples: RaySamples,\n        sdf: Optional[Float[Tensor, \"num_samples ... 1\"]] = None,\n        gradients: Optional[Float[Tensor, \"num_samples ... 1\"]] = None,\n    ) -> Float[Tensor, \"num_samples ... 1\"]:\n        \"\"\"compute alpha from sdf as in NeuS\"\"\"\n        if sdf is None or gradients is None:\n            inputs = ray_samples.frustums.get_start_positions()\n            inputs.requires_grad_(True)\n            with torch.enable_grad():\n                hidden_output = self.forward_geonetwork(inputs)\n                sdf, _ = torch.split(hidden_output, [1, self.config.geo_feat_dim], dim=-1)\n            d_output = torch.ones_like(sdf, requires_grad=False, device=sdf.device)\n            gradients = torch.autograd.grad(\n                outputs=sdf,\n                inputs=inputs,\n                grad_outputs=d_output,\n                create_graph=True,\n                retain_graph=True,\n                only_inputs=True,\n            )[0]\n\n        inv_s = self.deviation_network.get_variance()  # Single parameter\n\n        true_cos = (ray_samples.frustums.directions * gradients).sum(-1, keepdim=True)\n\n        # anneal as NeuS\n        cos_anneal_ratio = self._cos_anneal_ratio\n\n        # \"cos_anneal_ratio\" grows from 0 to 1 in the beginning training iterations. The anneal strategy below makes\n        # the cos value \"not dead\" at the beginning training iterations, for better convergence.\n        iter_cos = -(\n            F.relu(-true_cos * 0.5 + 0.5) * (1.0 - cos_anneal_ratio) + F.relu(-true_cos) * cos_anneal_ratio\n        )  # always non-positive\n\n        # Estimate signed distances at section points\n        estimated_next_sdf = sdf + iter_cos * ray_samples.deltas * 0.5\n        estimated_prev_sdf = sdf - iter_cos * ray_samples.deltas * 0.5\n\n        prev_cdf = torch.sigmoid(estimated_prev_sdf * inv_s)\n        next_cdf = torch.sigmoid(estimated_next_sdf * inv_s)\n\n        p = prev_cdf - next_cdf\n        c = prev_cdf\n\n        alpha = ((p + 1e-5) / (c + 1e-5)).clip(0.0, 1.0)\n\n        return alpha\n\n    def get_density(self, ray_samples: RaySamples):\n        raise NotImplementedError\n\n    def get_colors(\n        self,\n        points: Float[Tensor, \"*batch 3\"],\n        directions: Float[Tensor, \"*batch 3\"],\n        normals: Float[Tensor, \"*batch 3\"],\n        geo_features: Float[Tensor, \"*batch geo_feat_dim\"],\n        camera_indices: Tensor,\n    ) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"compute colors\"\"\"\n        d = self.direction_encoding(directions)\n\n        # appearance\n        if self.training:\n            embedded_appearance = self.embedding_appearance(camera_indices)\n            # set it to zero if don't use it\n            if not self.config.use_appearance_embedding:\n                embedded_appearance = torch.zeros_like(embedded_appearance)\n        else:\n            if self.use_average_appearance_embedding:\n                embedded_appearance = torch.ones(\n                    (*directions.shape[:-1], self.config.appearance_embedding_dim), device=directions.device\n                ) * self.embedding_appearance.mean(dim=0)\n            else:\n                embedded_appearance = torch.zeros(\n                    (*directions.shape[:-1], self.config.appearance_embedding_dim), device=directions.device\n                )\n\n        hidden_input = torch.cat(\n            [\n                points,\n                d,\n                normals,\n                geo_features.view(-1, self.config.geo_feat_dim),\n                embedded_appearance.view(-1, self.config.appearance_embedding_dim),\n            ],\n            dim=-1,\n        )\n\n        for layer in range(0, self.num_layers_color - 1):\n            lin = getattr(self, \"clin\" + str(layer))\n\n            hidden_input = lin(hidden_input)\n\n            if layer < self.num_layers_color - 2:\n                hidden_input = self.relu(hidden_input)\n\n        rgb = self.sigmoid(hidden_input)\n\n        return rgb\n\n    def get_outputs(\n        self,\n        ray_samples: RaySamples,\n        density_embedding: Optional[Tensor] = None,\n        return_alphas: bool = False,\n    ) -> Dict[FieldHeadNames, Tensor]:\n        \"\"\"compute output of ray samples\"\"\"\n        if ray_samples.camera_indices is None:\n            raise AttributeError(\"Camera indices are not provided.\")\n\n        outputs = {}\n\n        camera_indices = ray_samples.camera_indices.squeeze()\n\n        inputs = ray_samples.frustums.get_start_positions()\n        inputs = inputs.view(-1, 3)\n\n        directions = ray_samples.frustums.directions\n        directions_flat = directions.reshape(-1, 3)\n\n        inputs.requires_grad_(True)\n        with torch.enable_grad():\n            hidden_output = self.forward_geonetwork(inputs)\n            sdf, geo_feature = torch.split(hidden_output, [1, self.config.geo_feat_dim], dim=-1)\n        d_output = torch.ones_like(sdf, requires_grad=False, device=sdf.device)\n        gradients = torch.autograd.grad(\n            outputs=sdf, inputs=inputs, grad_outputs=d_output, create_graph=True, retain_graph=True, only_inputs=True\n        )[0]\n\n        rgb = self.get_colors(inputs, directions_flat, gradients, geo_feature, camera_indices)\n\n        rgb = rgb.view(*ray_samples.frustums.directions.shape[:-1], -1)\n        sdf = sdf.view(*ray_samples.frustums.directions.shape[:-1], -1)\n        gradients = gradients.view(*ray_samples.frustums.directions.shape[:-1], -1)\n        normals = torch.nn.functional.normalize(gradients, p=2, dim=-1)\n\n        outputs.update(\n            {\n                FieldHeadNames.RGB: rgb,\n                FieldHeadNames.SDF: sdf,\n                FieldHeadNames.NORMALS: normals,\n                FieldHeadNames.GRADIENT: gradients,\n            }\n        )\n\n        if return_alphas:\n            alphas = self.get_alpha(ray_samples, sdf, gradients)\n            outputs.update({FieldHeadNames.ALPHA: alphas})\n\n        return outputs\n\n    def forward(\n        self, ray_samples: RaySamples, compute_normals: bool = False, return_alphas: bool = False\n    ) -> Dict[FieldHeadNames, Tensor]:\n        \"\"\"Evaluates the field at points along the ray.\n\n        Args:\n            ray_samples: Samples to evaluate field on.\n            compute normals: not currently used in this implementation.\n            return_alphas: Whether to return alpha values\n        \"\"\"\n        field_outputs = self.get_outputs(ray_samples, return_alphas=return_alphas)\n        return field_outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/semantic_nerf_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSemantic NeRF field implementation.\n\"\"\"\n\nfrom typing import Dict, Optional, Tuple\n\nimport torch\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.encodings import Encoding, Identity\nfrom nerfstudio.field_components.field_heads import DensityFieldHead, FieldHeadNames, RGBFieldHead, SemanticFieldHead\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.fields.base_field import Field\n\n\nclass SemanticNerfField(Field):\n    \"\"\"Semantic-NeRF field\n\n    Args:\n        num_semantic_classes: Number of distinct semantic classes.\n        position_encoding: Position encoder.\n        direction_encoding: Direction encoder.\n        base_mlp_num_layers: Number of layers for base MLP.\n        base_mlp_layer_width: Width of base MLP layers.\n        head_mlp_num_layers: Number of layer for output head MLP.\n        head_mlp_layer_width: Width of output head MLP layers.\n        skip_connections: Where to add skip connection in base MLP.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_semantic_classes: int,\n        position_encoding: Encoding = Identity(in_dim=3),\n        direction_encoding: Encoding = Identity(in_dim=3),\n        base_mlp_num_layers: int = 8,\n        base_mlp_layer_width: int = 256,\n        head_mlp_num_layers: int = 2,\n        head_mlp_layer_width: int = 128,\n        skip_connections: Tuple[int] = (4,),\n    ) -> None:\n        super().__init__()\n        self.num_semantic_classes = num_semantic_classes\n        self.position_encoding = position_encoding\n        self.direction_encoding = direction_encoding\n        self.mlp_base = MLP(\n            in_dim=self.position_encoding.get_out_dim(),\n            num_layers=base_mlp_num_layers,\n            layer_width=base_mlp_layer_width,\n            skip_connections=skip_connections,\n            out_activation=nn.ReLU(),\n        )\n        self.mlp_head = MLP(\n            in_dim=self.mlp_base.get_out_dim() + self.direction_encoding.get_out_dim(),\n            num_layers=head_mlp_num_layers,\n            layer_width=head_mlp_layer_width,\n            out_activation=nn.ReLU(),\n        )\n        self.mlp_semantic = MLP(\n            in_dim=self.mlp_head.get_out_dim(),\n            layer_width=self.mlp_head.layer_width // 2,\n            num_layers=1,\n            activation=nn.ReLU(),\n            out_activation=nn.ReLU(),\n        )\n        self.field_head_density = DensityFieldHead(in_dim=self.mlp_base.get_out_dim())\n        self.field_head_rgb = RGBFieldHead(in_dim=self.mlp_head.get_out_dim())\n        self.field_head_semantic = SemanticFieldHead(\n            in_dim=self.mlp_semantic.get_out_dim(), num_classes=self.num_semantic_classes\n        )\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, Tensor]:\n        encoded_xyz = self.position_encoding(ray_samples.frustums.get_positions())\n        base_mlp_out = self.mlp_base(encoded_xyz)\n        density = self.field_head_density(base_mlp_out)\n        return density, base_mlp_out\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        encoded_dir = self.direction_encoding(ray_samples.frustums.directions)\n        mlp_out = self.mlp_head(torch.cat([encoded_dir, density_embedding], dim=-1))  # type: ignore\n        outputs = {}\n        # rgb\n        outputs[self.field_head_rgb.field_head_name] = self.field_head_rgb(mlp_out)\n        # semantic\n        mlp_out_sem = self.mlp_semantic(mlp_out)\n        outputs[self.field_head_semantic.field_head_name] = self.field_head_semantic(mlp_out_sem)\n        return outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/tensorf_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"TensoRF Field\"\"\"\n\nfrom typing import Dict, Optional\n\nimport torch\nfrom torch import Tensor, nn\nfrom torch.nn.parameter import Parameter\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.field_components.encodings import Encoding, Identity, SHEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames, RGBFieldHead\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.fields.base_field import Field\n\n\nclass TensoRFField(Field):\n    \"\"\"TensoRF Field\"\"\"\n\n    def __init__(\n        self,\n        aabb: Tensor,\n        # the aabb bounding box of the dataset\n        feature_encoding: Encoding = Identity(in_dim=3),\n        # the encoding method used for appearance encoding outputs\n        direction_encoding: Encoding = Identity(in_dim=3),\n        # the encoding method used for ray direction\n        density_encoding: Encoding = Identity(in_dim=3),\n        # the tensor encoding method used for scene density\n        color_encoding: Encoding = Identity(in_dim=3),\n        # the tensor encoding method used for scene color\n        appearance_dim: int = 27,\n        # the number of dimensions for the appearance embedding\n        head_mlp_num_layers: int = 2,\n        # number of layers for the MLP\n        head_mlp_layer_width: int = 128,\n        # layer width for the MLP\n        use_sh: bool = False,\n        # whether to use spherical harmonics as the feature decoding function\n        sh_levels: int = 2,\n        # number of levels to use for spherical harmonics\n    ) -> None:\n        super().__init__()\n        self.aabb = Parameter(aabb, requires_grad=False)\n        self.feature_encoding = feature_encoding\n        self.direction_encoding = direction_encoding\n        self.density_encoding = density_encoding\n        self.color_encoding = color_encoding\n\n        self.mlp_head = MLP(\n            in_dim=appearance_dim + 3 + self.direction_encoding.get_out_dim() + self.feature_encoding.get_out_dim(),\n            num_layers=head_mlp_num_layers,\n            layer_width=head_mlp_layer_width,\n            activation=nn.ReLU(),\n            out_activation=nn.ReLU(),\n        )\n\n        self.use_sh = use_sh\n\n        if self.use_sh:\n            self.sh = SHEncoding(sh_levels)\n            self.B = nn.Linear(\n                in_features=self.color_encoding.get_out_dim(), out_features=3 * self.sh.get_out_dim(), bias=False\n            )\n        else:\n            self.B = nn.Linear(in_features=self.color_encoding.get_out_dim(), out_features=appearance_dim, bias=False)\n\n        self.field_output_rgb = RGBFieldHead(in_dim=self.mlp_head.get_out_dim(), activation=nn.Sigmoid())\n\n    def get_density(self, ray_samples: RaySamples) -> Tensor:\n        positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n        positions = positions * 2 - 1\n        density = self.density_encoding(positions)\n        density_enc = torch.sum(density, dim=-1)[:, :, None]\n        relu = torch.nn.ReLU()\n        density_enc = relu(density_enc)\n        return density_enc\n\n    def get_outputs(self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None) -> Tensor:\n        d = ray_samples.frustums.directions\n        positions = SceneBox.get_normalized_positions(ray_samples.frustums.get_positions(), self.aabb)\n        positions = positions * 2 - 1\n        rgb_features = self.color_encoding(positions)\n        rgb_features = self.B(rgb_features)\n\n        if self.use_sh:\n            sh_mult = self.sh(d)[:, :, None]\n            rgb_sh = rgb_features.view(sh_mult.shape[0], sh_mult.shape[1], 3, sh_mult.shape[-1])\n            rgb = torch.relu(torch.sum(sh_mult * rgb_sh, dim=-1) + 0.5)\n        else:\n            d_encoded = self.direction_encoding(d)\n            rgb_features_encoded = self.feature_encoding(rgb_features)\n\n            out = self.mlp_head(torch.cat([rgb_features, d, rgb_features_encoded, d_encoded], dim=-1))  # type: ignore\n            rgb = self.field_output_rgb(out)\n\n        return rgb\n\n    def forward(\n        self,\n        ray_samples: RaySamples,\n        compute_normals: bool = False,\n        mask: Optional[Tensor] = None,\n        bg_color: Optional[Tensor] = None,\n    ) -> Dict[FieldHeadNames, Tensor]:\n        if compute_normals is True:\n            raise ValueError(\"Surface normals are not currently supported with TensoRF\")\n        if mask is not None and bg_color is not None:\n            base_density = torch.zeros(ray_samples.shape)[:, :, None].to(mask.device)\n            base_rgb = bg_color.repeat(ray_samples[:, :, None].shape)\n            if mask.any():\n                input_rays = ray_samples[mask, :]\n                density = self.get_density(input_rays)\n                rgb = self.get_outputs(input_rays, None)\n\n                base_density[mask] = density\n                base_rgb[mask] = rgb\n\n                base_density.requires_grad_()\n                base_rgb.requires_grad_()\n\n            density = base_density\n            rgb = base_rgb\n        else:\n            density = self.get_density(ray_samples)\n            rgb = self.get_outputs(ray_samples, None)\n\n        return {FieldHeadNames.DENSITY: density, FieldHeadNames.RGB: rgb}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/fields/vanilla_nerf_field.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Classic NeRF field\"\"\"\n\nfrom typing import Dict, Optional, Tuple, Type\n\nimport torch\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.encodings import Encoding, Identity\nfrom nerfstudio.field_components.field_heads import DensityFieldHead, FieldHead, FieldHeadNames, RGBFieldHead\nfrom nerfstudio.field_components.mlp import MLP\nfrom nerfstudio.field_components.spatial_distortions import SpatialDistortion\nfrom nerfstudio.fields.base_field import Field\n\n\nclass NeRFField(Field):\n    \"\"\"NeRF Field\n\n    Args:\n        position_encoding: Position encoder.\n        direction_encoding: Direction encoder.\n        base_mlp_num_layers: Number of layers for base MLP.\n        base_mlp_layer_width: Width of base MLP layers.\n        head_mlp_num_layers: Number of layer for output head MLP.\n        head_mlp_layer_width: Width of output head MLP layers.\n        skip_connections: Where to add skip connection in base MLP.\n        use_integrated_encoding: Used integrated samples as encoding input.\n        spatial_distortion: Spatial distortion.\n    \"\"\"\n\n    def __init__(\n        self,\n        position_encoding: Encoding = Identity(in_dim=3),\n        direction_encoding: Encoding = Identity(in_dim=3),\n        base_mlp_num_layers: int = 8,\n        base_mlp_layer_width: int = 256,\n        head_mlp_num_layers: int = 2,\n        head_mlp_layer_width: int = 128,\n        skip_connections: Tuple[int] = (4,),\n        field_heads: Optional[Tuple[Type[FieldHead]]] = (RGBFieldHead,),\n        use_integrated_encoding: bool = False,\n        spatial_distortion: Optional[SpatialDistortion] = None,\n    ) -> None:\n        super().__init__()\n        self.position_encoding = position_encoding\n        self.direction_encoding = direction_encoding\n        self.use_integrated_encoding = use_integrated_encoding\n        self.spatial_distortion = spatial_distortion\n\n        self.mlp_base = MLP(\n            in_dim=self.position_encoding.get_out_dim(),\n            num_layers=base_mlp_num_layers,\n            layer_width=base_mlp_layer_width,\n            skip_connections=skip_connections,\n            out_activation=nn.ReLU(),\n        )\n        self.field_output_density = DensityFieldHead(in_dim=self.mlp_base.get_out_dim())\n\n        if field_heads:\n            self.mlp_head = MLP(\n                in_dim=self.mlp_base.get_out_dim() + self.direction_encoding.get_out_dim(),\n                num_layers=head_mlp_num_layers,\n                layer_width=head_mlp_layer_width,\n                out_activation=nn.ReLU(),\n            )\n        self.field_heads = nn.ModuleList([field_head() for field_head in field_heads] if field_heads else [])  # type: ignore\n        for field_head in self.field_heads:\n            field_head.set_in_dim(self.mlp_head.get_out_dim())  # type: ignore\n\n    def get_density(self, ray_samples: RaySamples) -> Tuple[Tensor, Tensor]:\n        if self.use_integrated_encoding:\n            gaussian_samples = ray_samples.frustums.get_gaussian_blob()\n            if self.spatial_distortion is not None:\n                gaussian_samples = self.spatial_distortion(gaussian_samples)\n            encoded_xyz = self.position_encoding(gaussian_samples.mean, covs=gaussian_samples.cov)\n        else:\n            positions = ray_samples.frustums.get_positions()\n            if self.spatial_distortion is not None:\n                positions = self.spatial_distortion(positions)\n            encoded_xyz = self.position_encoding(positions)\n        base_mlp_out = self.mlp_base(encoded_xyz)\n        density = self.field_output_density(base_mlp_out)\n        return density, base_mlp_out\n\n    def get_outputs(\n        self, ray_samples: RaySamples, density_embedding: Optional[Tensor] = None\n    ) -> Dict[FieldHeadNames, Tensor]:\n        outputs = {}\n        for field_head in self.field_heads:\n            encoded_dir = self.direction_encoding(ray_samples.frustums.directions)\n            mlp_out = self.mlp_head(torch.cat([encoded_dir, density_embedding], dim=-1))  # type: ignore\n            outputs[field_head.field_head_name] = field_head(mlp_out)\n        return outputs\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/generative/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/generative/deepfloyd.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport gc\nimport sys\nfrom pathlib import Path\nfrom typing import List, Optional, Union\n\nimport torch\nimport torch.nn.functional as F\nimport tyro\nfrom jaxtyping import Float\nfrom PIL import Image\nfrom torch import Generator, Tensor, nn\nfrom torch.cuda.amp.grad_scaler import GradScaler\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nIMG_DIM = 64\n\n\nclass DeepFloyd(nn.Module):\n    \"\"\"DeepFloyd diffusion model\n    Args:\n        device: device to use\n    \"\"\"\n\n    def __init__(self, device: Union[torch.device, str]):\n        super().__init__()\n        self.device = device\n\n        try:\n            from diffusers import DiffusionPipeline, IFPipeline\n            from transformers import T5EncoderModel\n\n        except ImportError:\n            CONSOLE.print(\"[bold red]Missing Stable Diffusion packages.\")\n            CONSOLE.print(r\"Install using [yellow]pip install nerfstudio\\[gen][/yellow]\")\n            CONSOLE.print(r\"or [yellow]pip install -e .\\[gen][/yellow] if installing from source.\")\n            sys.exit(1)\n\n        self.text_encoder = T5EncoderModel.from_pretrained(\n            \"DeepFloyd/IF-I-L-v1.0\",\n            subfolder=\"text_encoder\",\n            load_in_8bit=True,\n            variant=\"8bit\",\n            device_map=\"auto\",\n        )\n\n        self.pipe = IFPipeline.from_pretrained(\n            \"DeepFloyd/IF-I-L-v1.0\",\n            text_encoder=self.text_encoder,\n            safety_checker=None,\n            watermarker=None,\n            feature_extractor=None,\n            requires_safety_checker=False,\n            variant=\"fp16\",\n            torch_dtype=torch.float16,\n        )\n        assert isinstance(self.pipe, DiffusionPipeline)\n        self.pipe = self.pipe.to(self.device)\n\n        self.pipe.enable_attention_slicing(1)\n\n        self.unet = self.pipe.unet\n        self.unet.to(memory_format=torch.channels_last)  # type: ignore\n        for p in self.unet.parameters():\n            p.requires_grad_(False)\n\n        self.scheduler = self.pipe.scheduler\n\n        self.num_train_timesteps = self.scheduler.config[\"num_train_timesteps\"]\n        self.min_step = int(self.num_train_timesteps * 0.02)\n        self.max_step = int(self.num_train_timesteps * 0.98)\n\n        self.alphas: Float[Tensor, \"...\"] = self.scheduler.alphas_cumprod.to(self.device)\n\n    def delete_text_encoder(self):\n        \"\"\"Delete text encoder from pipeline. T5 text encoder uses a lot of memory.\"\"\"\n        del self.text_encoder\n        del self.pipe\n        gc.collect()\n        torch.cuda.empty_cache()\n\n        from diffusers import DiffusionPipeline, IFPipeline\n\n        self.pipe = IFPipeline.from_pretrained(\n            \"DeepFloyd/IF-I-L-v1.0\",\n            text_encoder=None,\n            safety_checker=None,\n            watermarker=None,\n            feature_extractor=None,\n            requires_safety_checker=False,\n            variant=\"fp16\",\n            torch_dtype=torch.float16,\n        )\n        assert isinstance(self.pipe, DiffusionPipeline)\n        self.pipe = self.pipe.to(self.device)\n\n        self.pipe.enable_attention_slicing(1)\n\n        self.unet = self.pipe.unet\n        self.unet.to(memory_format=torch.channels_last)  # type: ignore\n\n        for p in self.unet.parameters():\n            p.requires_grad_(False)\n\n        self.scheduler = self.pipe.scheduler\n\n    def get_text_embeds(\n        self, prompt: Union[str, List[str]], negative_prompt: Union[str, List[str]]\n    ) -> Float[Tensor, \"2 max_length embed_dim\"]:\n        \"\"\"Get text embeddings for prompt and negative prompt\n        Args:\n            prompt: Prompt text\n            negative_prompt: Negative prompt text\n        Returns:\n            Text embeddings\n        \"\"\"\n        prompt = [prompt] if isinstance(prompt, str) else prompt\n        negative_prompt = [negative_prompt] if isinstance(negative_prompt, str) else negative_prompt\n\n        from diffusers import DiffusionPipeline\n\n        assert isinstance(self.pipe, DiffusionPipeline)\n        with torch.no_grad():\n            prompt_embeds, negative_embeds = self.pipe.encode_prompt(prompt, negative_prompt=negative_prompt)\n\n        assert isinstance(negative_embeds, Tensor)\n        assert isinstance(prompt_embeds, Tensor)\n        return torch.cat([negative_embeds, prompt_embeds])\n\n    def sds_loss(\n        self,\n        text_embeddings: Float[Tensor, \"N max_length embed_dim\"],\n        image: Float[Tensor, \"BS 3 H W\"],\n        guidance_scale: float = 100.0,\n        grad_scaler: Optional[GradScaler] = None,\n    ) -> torch.Tensor:\n        \"\"\"Score Distilation Sampling loss proposed in DreamFusion paper (https://dreamfusion3d.github.io/)\n        Args:\n            text_embeddings: Text embeddings\n            image: Rendered image\n            guidance_scale: How much to weigh the guidance\n            grad_scaler: Grad scaler\n        Returns:\n            The loss\n        \"\"\"\n        image = F.interpolate(image.half(), (IMG_DIM, IMG_DIM), mode=\"bilinear\", align_corners=False)\n        t = torch.randint(self.min_step, self.max_step + 1, [1], dtype=torch.long, device=self.device)\n\n        # predict the noise residual with unet, NO grad!\n        with torch.no_grad():\n            # add noise\n            noise = torch.randn_like(image)\n            image_noisy = self.scheduler.add_noise(image, noise, t)  # type: ignore\n            # pred noise\n            image_model_input = torch.cat((image_noisy,) * 2)\n            noise_pred = self.unet(image_model_input, t, encoder_hidden_states=text_embeddings).sample\n\n        # perform guidance\n        noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n        noise_pred_text, predicted_variance = noise_pred_text.split(3, dim=1)\n        noise_pred_uncond, _ = noise_pred_uncond.split(3, dim=1)\n\n        noise_pred = noise_pred_text + guidance_scale * (noise_pred_text - noise_pred_uncond)\n\n        # w(t), sigma_t^2\n        w = 1 - self.alphas[t]\n\n        grad = w * (noise_pred - noise)\n        grad = torch.nan_to_num(grad)\n\n        target = (image - grad).detach()\n        loss = 0.5 * F.mse_loss(image, target, reduction=\"sum\") / image.shape[0]\n\n        return loss\n\n    def prompt_to_image(\n        self,\n        prompts: Union[str, List[str]],\n        negative_prompts: Union[str, List[str]] = \"\",\n        generator: Optional[Generator] = None,\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n    ) -> Image.Image:\n        \"\"\"Generate an image from a prompt.\n        Args:\n            prompts: The prompt to generate an image from.\n            negative_prompts: The negative prompt to generate an image from.\n            generator: Random seed.\n            num_inference_steps: The number of inference steps to perform.\n            guidance_scale: The scale of the guidance.\n            latents: The latents to start from, defaults to random.\n        Returns:\n            The generated image.\n        \"\"\"\n\n        from diffusers import DiffusionPipeline, IFPipeline as IFOrig\n        from diffusers.pipelines.deepfloyd_if import IFPipelineOutput as IFOutputOrig\n\n        prompts = [prompts] if isinstance(prompts, str) else prompts\n        negative_prompts = [negative_prompts] if isinstance(negative_prompts, str) else negative_prompts\n        assert isinstance(self.pipe, DiffusionPipeline)\n        prompt_embeds, negative_embeds = self.pipe.encode_prompt(prompts, negative_prompt=negative_prompts)\n\n        assert isinstance(self.pipe, IFOrig)\n        model_output = self.pipe(\n            prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator\n        )\n        assert isinstance(model_output, IFOutputOrig)\n        output_image = model_output.images[0]\n\n        return output_image\n\n\ndef generate_image(\n    prompt: str, negative: str = \"\", seed: int = 0, steps: int = 50, save_path: Path = Path(\"test_deepfloyd.png\")\n):\n    \"\"\"Generate an image from a prompt using DeepFloyd IF.\n    Args:\n        prompt: The prompt to use.\n        negative: The negative prompt to use.\n        seed: The random seed to use.\n        steps: The number of steps to use.\n        save_path: The path to save the image to.\n    \"\"\"\n    generator = torch.manual_seed(seed)\n    cuda_device = torch.device(\"cuda\")\n    with torch.no_grad():\n        df = DeepFloyd(cuda_device)\n        img = df.prompt_to_image(prompt, negative, generator, steps)\n        img.save(save_path)\n\n\nif __name__ == \"__main__\":\n    tyro.cli(generate_image)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/generative/positional_text_embeddings.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Utility helper functions for generative 3D models\"\"\"\n\nfrom typing import Union\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\nfrom typing_extensions import Literal\n\nfrom nerfstudio.generative.deepfloyd import DeepFloyd\nfrom nerfstudio.generative.stable_diffusion import StableDiffusion\n\n\nclass PositionalTextEmbeddings:\n    \"\"\"Postional Prompts. Currently the following location based text embeddings are supported:\n        - discrete: Choose the embedding closest to the camera position\n        - interpolated: Interpolate between the embeddings based on the camera position\n        - off: Don't modify the text embedding based on the camera position\n\n    Args:\n        base_prompt: Prompt for base view\n        top_prompt: Prompt for top view\n        side_prompt: Prompt for side view\n        back_prompt: Prompt for back view\n        front_prompt: Prompt for front view\n        diffusion_model: Instance of StableDiffusion\n        positional_prompting: how to incorporate position into prompt.\n    \"\"\"\n\n    def __init__(\n        self,\n        base_prompt: str,\n        top_prompt: str,\n        side_prompt: str,\n        back_prompt: str,\n        front_prompt: str,\n        diffusion_model: Union[StableDiffusion, DeepFloyd],\n        positional_prompting: Literal[\"discrete\", \"interpolated\", \"off\"] = \"discrete\",\n    ):\n        self.positional_prompting = positional_prompting\n        self.diffusion_device = diffusion_model.device\n        self.diffusion = diffusion_model\n        self.update_prompt(base_prompt, top_prompt, side_prompt, back_prompt, front_prompt)\n\n    def update_prompt(self, base_prompt: str, top_prompt: str, side_prompt: str, back_prompt: str, front_prompt: str):\n        \"\"\"Update the text embeddings based on the new prompts.\n\n        Args:\n            base_prompt: Prompt for base view\n            top_prompt: Prompt for top view\n            side_prompt: Prompt for side view\n            back_prompt: Prompt for back view\n            front_prompt: Prompt for front view\n        \"\"\"\n        self.base_embed = self.diffusion.get_text_embeds(base_prompt, \"\")\n        self.top_embed = self.diffusion.get_text_embeds(top_prompt, \"\")\n        self.side_embed = self.diffusion.get_text_embeds(side_prompt, \"\")\n        self.back_embed = self.diffusion.get_text_embeds(back_prompt, \"\")\n        self.front_embed = self.diffusion.get_text_embeds(front_prompt, \"\")\n\n        if isinstance(self.diffusion, DeepFloyd):\n            self.diffusion.delete_text_encoder()\n\n    def get_text_embedding(\n        self, vertical_angle: Float[Tensor, \"1\"], horizontal_angle: Float[Tensor, \"1\"]\n    ) -> Float[Tensor, \"2 max_length embed_dim\"]:\n        \"\"\"Get text embedding based on the position of the camera relative to the scene.\n        This trick is used in Dreamfusion (https://dreamfusion3d.github.io/).\n\n        Args:\n            vertical_angle: vertical angle of the camera\n            horizonal_angle: horizonal angle of the camera\n        \"\"\"\n        # set horizontal_angle between 0, 360\n        horizontal_angle = torch.fmod(horizontal_angle, 360)\n        horizontal_angle = torch.where(horizontal_angle < 0, horizontal_angle + 360, horizontal_angle)\n\n        if self.positional_prompting == \"discrete\":\n            if vertical_angle < 40:\n                text_embedding = self.top_embed\n            elif 315 < horizontal_angle or horizontal_angle <= 45:\n                text_embedding = self.front_embed\n            elif 45 < horizontal_angle <= 135:\n                text_embedding = self.side_embed\n            elif 135 < horizontal_angle <= 225:\n                text_embedding = self.back_embed\n            else:  # horizontal_angle > 225 and horizontal_angle <= 315:\n                text_embedding = self.side_embed\n        elif self.positional_prompting == \"interpolated\":\n            horiz = horizontal_angle.detach().numpy()[0]\n            vert = max(vertical_angle.detach().numpy()[0], 0)\n\n            if 0 < horizontal_angle <= 90:\n                text_embedding = (horiz) * self.side_embed + (90 - horiz) * self.front_embed\n            elif 90 < horizontal_angle <= 180:\n                text_embedding = (horiz - 90) * self.back_embed + (180 - horiz) * self.side_embed\n            elif 180 < horizontal_angle <= 270:\n                text_embedding = (horiz - 180) * self.side_embed + (270 - horiz) * self.back_embed\n            else:  # 270 < horizontal_angle <= 360:\n                text_embedding = (horiz - 270) * self.front_embed + (360 - horiz) * self.side_embed\n\n            text_embedding = text_embedding / 90.0\n            text_embedding = (vert * text_embedding + (90 - vert) * self.top_embed) / 90.0\n        else:\n            text_embedding = self.base_embed\n\n        return text_embedding\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/generative/stable_diffusion.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Stable Diffusion helpers\"\"\"\n\n# Modified from https://github.com/ashawkey/stable-dreamfusion/blob/main/nerf/sd.py\n\nimport sys\nfrom pathlib import Path\nfrom typing import List, Optional, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nimport tyro\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\nfrom torch.cuda.amp.grad_scaler import GradScaler\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nIMG_DIM = 512\nCONST_SCALE = 0.18215\nSD_IDENTIFIERS = {\n    \"1-5\": \"runwayml/stable-diffusion-v1-5\",\n    \"2-0\": \"stabilityai/stable-diffusion-2-base\",\n    \"2-1\": \"stabilityai/stable-diffusion-2-1-base\",\n}\n\n\nclass StableDiffusion(nn.Module):\n    \"\"\"Stable Diffusion implementation\n    Args:\n        device: device to use\n        num_train_timesteps: number of training timesteps\n    \"\"\"\n\n    def __init__(self, device: Union[torch.device, str], num_train_timesteps: int = 1000, version=\"1-5\") -> None:\n        super().__init__()\n\n        try:\n            from diffusers import DiffusionPipeline, PNDMScheduler, StableDiffusionPipeline\n\n        except ImportError:\n            CONSOLE.print(\"[bold red]Missing Stable Diffusion packages.\")\n            CONSOLE.print(r\"Install using [yellow]pip install nerfstudio\\[gen][/yellow]\")\n            CONSOLE.print(r\"or [yellow]pip install -e .\\[gen][/yellow] if installing from source.\")\n            sys.exit(1)\n\n        self.device = device\n        self.num_train_timesteps = num_train_timesteps\n\n        self.min_step = int(self.num_train_timesteps * 0.02)\n        self.max_step = int(self.num_train_timesteps * 0.98)\n\n        self.scheduler = PNDMScheduler(\n            beta_start=0.00085,\n            beta_end=0.012,\n            beta_schedule=\"scaled_linear\",\n            num_train_timesteps=self.num_train_timesteps,\n        )\n        self.alphas = self.scheduler.alphas_cumprod.to(self.device)  # type: ignore\n\n        sd_id = SD_IDENTIFIERS[version]\n        pipe = StableDiffusionPipeline.from_pretrained(sd_id, torch_dtype=torch.float16)\n\n        assert isinstance(pipe, DiffusionPipeline)  # and hasattr(pipe, \"to\")\n        pipe = pipe.to(self.device)\n\n        pipe.enable_attention_slicing()\n\n        self.unet = pipe.unet\n        self.unet.to(memory_format=torch.channels_last)\n\n        self.tokenizer = pipe.tokenizer\n        self.text_encoder = pipe.text_encoder\n        self.auto_encoder = pipe.vae\n\n        CONSOLE.print(\"Stable Diffusion loaded!\")\n\n    def get_text_embeds(\n        self, prompt: Union[str, List[str]], negative_prompt: Union[str, List[str]]\n    ) -> Float[Tensor, \"2 max_length embed_dim\"]:\n        \"\"\"Get text embeddings for prompt and negative prompt\n        Args:\n            prompt: Prompt text\n            negative_prompt: Negative prompt text\n        Returns:\n            Text embeddings\n        \"\"\"\n\n        # Tokenize text and get embeddings\n        text_input = self.tokenizer(\n            prompt,\n            padding=\"max_length\",\n            max_length=self.tokenizer.model_max_length,\n            truncation=True,\n            return_tensors=\"pt\",\n        )\n\n        with torch.no_grad():\n            text_embeddings = self.text_encoder(text_input.input_ids.to(self.device))[0]\n\n        # Do the same for unconditional embeddings\n        uncond_input = self.tokenizer(\n            negative_prompt, padding=\"max_length\", max_length=self.tokenizer.model_max_length, return_tensors=\"pt\"\n        )\n\n        with torch.no_grad():\n            uncond_embeddings = self.text_encoder(uncond_input.input_ids.to(self.device))[0]\n\n        # Cat for final embeddings\n        text_embeddings = torch.cat([uncond_embeddings, text_embeddings])\n\n        return text_embeddings\n\n    def sds_loss(\n        self,\n        text_embeddings: Float[Tensor, \"N max_length embed_dim\"],\n        image: Float[Tensor, \"BS 3 H W\"],\n        guidance_scale: float = 100.0,\n        grad_scaler: Optional[GradScaler] = None,\n    ) -> torch.Tensor:\n        \"\"\"Score Distilation Sampling loss proposed in DreamFusion paper (https://dreamfusion3d.github.io/)\n        Args:\n            text_embeddings: Text embeddings\n            image: Rendered image\n            guidance_scale: How much to weigh the guidance\n            grad_scaler: Grad scaler\n        Returns:\n            The loss\n        \"\"\"\n        image = F.interpolate(image, (IMG_DIM, IMG_DIM), mode=\"bilinear\").to(torch.float16)\n        t = torch.randint(self.min_step, self.max_step + 1, [1], dtype=torch.long, device=self.device)\n        latents = self.imgs_to_latent(image)\n\n        # predict the noise residual with unet, NO grad!\n        with torch.no_grad():\n            # add noise\n            noise = torch.randn_like(latents)\n            latents_noisy = self.scheduler.add_noise(latents, noise, t)  # type: ignore\n            # pred noise\n            latent_model_input = torch.cat((latents_noisy,) * 2)\n            noise_pred = self.unet(latent_model_input, t, encoder_hidden_states=text_embeddings).sample\n\n        # perform guidance\n        noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n        noise_pred = noise_pred_text + guidance_scale * (noise_pred_text - noise_pred_uncond)\n\n        # w(t), sigma_t^2\n        w = 1 - self.alphas[t]\n\n        grad = w * (noise_pred - noise)\n        grad = torch.nan_to_num(grad)\n\n        target = (latents - grad).detach()\n        loss = 0.5 * F.mse_loss(latents, target, reduction=\"sum\") / latents.shape[0]\n\n        return loss\n\n    def produce_latents(\n        self,\n        text_embeddings: Float[Tensor, \"N max_length embed_dim\"],\n        height: int = IMG_DIM,\n        width: int = IMG_DIM,\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n        latents: Optional[Float[Tensor, \"BS 4 H W\"]] = None,\n    ) -> Float[Tensor, \"BS 4 H W\"]:\n        \"\"\"Produce latents for a given text embedding\n        Args:\n            text_embeddings: Text embeddings\n            height: Height of the image\n            width: Width of the image\n            num_inference_steps: Number of inference steps\n            guidance_scale: How much to weigh the guidance\n            latents: Latents to start with\n        Returns:\n            Latents\n        \"\"\"\n\n        if latents is None:\n            latents = torch.randn(\n                (text_embeddings.shape[0] // 2, self.unet.config.in_channels, height // 8, width // 8),\n                device=self.device,\n            )\n\n        self.scheduler.set_timesteps(num_inference_steps)  # type: ignore\n\n        with torch.autocast(\"cuda\"):\n            for t in self.scheduler.timesteps:  # type: ignore\n                assert latents is not None\n                # expand the latents if we are doing classifier-free guidance to avoid doing two forward passes.\n                latent_model_input = torch.cat([latents] * 2)\n\n                # predict the noise residual\n                with torch.no_grad():\n                    noise_pred = self.unet(\n                        latent_model_input, t.to(self.device), encoder_hidden_states=text_embeddings\n                    ).sample\n\n                # perform guidance\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_text + guidance_scale * (noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.scheduler.step(noise_pred, t, latents)[\"prev_sample\"]  # type: ignore\n        assert isinstance(latents, Tensor)\n        return latents\n\n    def latents_to_img(self, latents: Float[Tensor, \"BS 4 H W\"]) -> Float[Tensor, \"BS 3 H W\"]:\n        \"\"\"Convert latents to images\n        Args:\n            latents: Latents to convert\n        Returns:\n            Images\n        \"\"\"\n\n        latents = 1 / CONST_SCALE * latents\n\n        with torch.no_grad():\n            imgs = self.auto_encoder.decode(latents).sample\n\n        imgs = (imgs / 2 + 0.5).clamp(0, 1)\n\n        return imgs\n\n    def imgs_to_latent(self, imgs: Float[Tensor, \"BS 3 H W\"]) -> Float[Tensor, \"BS 4 H W\"]:\n        \"\"\"Convert images to latents\n        Args:\n            imgs: Images to convert\n        Returns:\n            Latents\n        \"\"\"\n        imgs = 2 * imgs - 1\n\n        posterior = self.auto_encoder.encode(imgs).latent_dist\n        latents = posterior.sample() * CONST_SCALE\n\n        return latents\n\n    def prompt_to_img(\n        self,\n        prompts: Union[str, List[str]],\n        negative_prompts: Union[str, List[str]] = \"\",\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n        latents=None,\n    ) -> np.ndarray:\n        \"\"\"Generate an images from a prompts.\n        Args:\n            prompts: The prompt to generate an image from.\n            negative_prompts: The negative prompt to generate an image from.\n            num_inference_steps: The number of inference steps to perform.\n            guidance_scale: The scale of the guidance.\n            latents: The latents to start from, defaults to random.\n        Returns:\n            The generated image.\n        \"\"\"\n\n        prompts = [prompts] if isinstance(prompts, str) else prompts\n        negative_prompts = [negative_prompts] if isinstance(negative_prompts, str) else negative_prompts\n        text_embeddings = self.get_text_embeds(prompts, negative_prompts)\n        latents = self.produce_latents(\n            text_embeddings,\n            height=IMG_DIM,\n            width=IMG_DIM,\n            latents=latents,\n            num_inference_steps=num_inference_steps,\n            guidance_scale=guidance_scale,\n        )  # [1, 4, resolution, resolution]\n\n        diffused_img = self.latents_to_img(latents.half())\n        diffused_img = diffused_img.detach().cpu().permute(0, 2, 3, 1).numpy()\n        diffused_img = (diffused_img * 255).round().astype(\"uint8\")\n\n        return diffused_img\n\n    def forward(\n        self, prompts, negative_prompts=\"\", num_inference_steps=50, guidance_scale=7.5, latents=None\n    ) -> np.ndarray:\n        \"\"\"Generate an image from a prompt.\n        Args:\n            prompts: The prompt to generate an image from.\n            negative_prompts: The negative prompt to generate an image from.\n            num_inference_steps: The number of inference steps to perform.\n            guidance_scale: The scale of the guidance.\n            latents: The latents to start from, defaults to random.\n        Returns:\n            The generated image.\n        \"\"\"\n        return self.prompt_to_img(prompts, negative_prompts, num_inference_steps, guidance_scale, latents)\n\n\ndef generate_image(\n    prompt: str, negative: str = \"\", seed: int = 0, steps: int = 50, save_path: Path = Path(\"test_sd.png\")\n):\n    \"\"\"Generate an image from a prompt using Stable Diffusion.\n    Args:\n        prompt: The prompt to use.\n        negative: The negative prompt to use.\n        seed: The random seed to use.\n        steps: The number of steps to use.\n        save_path: The path to save the image to.\n    \"\"\"\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    cuda_device = torch.device(\"cuda\")\n    with torch.no_grad():\n        sd = StableDiffusion(cuda_device)\n        imgs = sd.prompt_to_img(prompt, negative, steps)\n\n        import mediapy  # Slow to import, so we do it lazily.\n\n        mediapy.write_image(str(save_path), imgs[0])\n\n\nif __name__ == \"__main__\":\n    tyro.cli(generate_image)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/lib_bilagrid.py",
    "content": "# # Copyright 2024 Yuehao Wang (https://github.com/yuehaowang). This part of code is borrowed form [\"Bilateral Guided Radiance Field Processing\"](https://bilarfpro.github.io/).\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nThis is a standalone PyTorch implementation of 3D bilateral grid and CP-decomposed 4D bilateral grid.\nTo use this module, you can download the \"lib_bilagrid.py\" file and simply put it in your project directory.\n\nFor the details, please check our research project: [\"Bilateral Guided Radiance Field Processing\"](https://bilarfpro.github.io/).\n\n#### Dependencies\n\nIn addition to PyTorch and Numpy, please install [tensorly](https://github.com/tensorly/tensorly).\nWe have tested this module on Python 3.9.18, PyTorch 2.0.1 (CUDA 11), tensorly 0.8.1, and Numpy 1.25.2.\n\n#### Overview\n\n- For bilateral guided training, you need to construct a `BilateralGrid` instance, which can hold multiple bilateral grids\n  for input views. Then, use `slice` function to obtain transformed RGB output and the corresponding affine transformations.\n\n- For bilateral guided finishing, you need to instantiate a `BilateralGridCP4D` object and use `slice4d`.\n\n#### Examples\n\n- Bilateral grid for approximating ISP:\n    <a target=\"_blank\" href=\"https://colab.research.google.com/drive/1tx2qKtsHH9deDDnParMWrChcsa9i7Prr?usp=sharing\">\n    <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n\n- Low-rank 4D bilateral grid for MR enhancement:\n    <a target=\"_blank\" href=\"https://colab.research.google.com/drive/17YOjQqgWFT3QI1vysOIH494rMYtt_mHL?usp=sharing\">\n    <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n\n\nBelow is the API reference.\n\n\"\"\"\n\nimport tensorly as tl\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn\n\ntl.set_backend(\"pytorch\")\n\n\ndef color_correct(img: torch.Tensor, ref: torch.Tensor, num_iters: int = 5, eps: float = 0.5 / 255) -> torch.Tensor:\n    \"\"\"\n    Warp `img` to match the colors in `ref_img` using iterative color matching.\n\n    This function performs color correction by warping the colors of the input image\n    to match those of a reference image. It uses a least squares method to find a\n    transformation that maps the input image's colors to the reference image's colors.\n\n    The algorithm iteratively solves a system of linear equations, updating the set of\n    unsaturated pixels in each iteration. This approach helps handle non-linear color\n    transformations and reduces the impact of clipping.\n\n    Args:\n        img (torch.Tensor): Input image to be color corrected. Shape: [..., num_channels]\n        ref (torch.Tensor): Reference image to match colors. Shape: [..., num_channels]\n        num_iters (int, optional): Number of iterations for the color matching process.\n                                   Default is 5.\n        eps (float, optional): Small value to determine the range of unclipped pixels.\n                               Default is 0.5 / 255.\n\n    Returns:\n        torch.Tensor: Color corrected image with the same shape as the input image.\n\n    Note:\n        - Both input and reference images should be in the range [0, 1].\n        - The function works with any number of channels, but typically used with 3 (RGB).\n    \"\"\"\n    if img.shape[-1] != ref.shape[-1]:\n        raise ValueError(f\"img's {img.shape[-1]} and ref's {ref.shape[-1]} channels must match\")\n    num_channels = img.shape[-1]\n    img_mat = img.reshape([-1, num_channels])\n    ref_mat = ref.reshape([-1, num_channels])\n\n    def is_unclipped(z):\n        return (z >= eps) & (z <= 1 - eps)  # z \\in [eps, 1-eps].\n\n    mask0 = is_unclipped(img_mat)\n    # Because the set of saturated pixels may change after solving for a\n    # transformation, we repeatedly solve a system `num_iters` times and update\n    # our estimate of which pixels are saturated.\n    for _ in range(num_iters):\n        # Construct the left hand side of a linear system that contains a quadratic\n        # expansion of each pixel of `img`.\n        a_mat = []\n        for c in range(num_channels):\n            a_mat.append(img_mat[:, c : (c + 1)] * img_mat[:, c:])  # Quadratic term.\n        a_mat.append(img_mat)  # Linear term.\n        a_mat.append(torch.ones_like(img_mat[:, :1]))  # Bias term.\n        a_mat = torch.cat(a_mat, dim=-1)\n        warp = []\n        for c in range(num_channels):\n            # Construct the right hand side of a linear system containing each color\n            # of `ref`.\n            b = ref_mat[:, c]\n            # Ignore rows of the linear system that were saturated in the input or are\n            # saturated in the current corrected color estimate.\n            mask = mask0[:, c] & is_unclipped(img_mat[:, c]) & is_unclipped(b)\n            ma_mat = torch.where(mask[:, None], a_mat, torch.zeros_like(a_mat))\n            mb = torch.where(mask, b, torch.zeros_like(b))\n            w = torch.linalg.lstsq(ma_mat, mb, rcond=-1)[0]\n            assert torch.all(torch.isfinite(w))\n            warp.append(w)\n        warp = torch.stack(warp, dim=-1)\n        # Apply the warp to update img_mat.\n        img_mat = torch.clip(torch.matmul(a_mat, warp), 0, 1)\n    corrected_img = torch.reshape(img_mat, img.shape)\n    return corrected_img\n\n\ndef bilateral_grid_tv_loss(model, config):\n    \"\"\"Computes total variations of bilateral grids.\"\"\"\n    total_loss = 0.0\n\n    for bil_grids in model.bil_grids:\n        total_loss += config.bilgrid_tv_loss_mult * total_variation_loss(bil_grids.grids)\n\n    return total_loss\n\n\ndef color_affine_transform(affine_mats, rgb):\n    \"\"\"Applies color affine transformations.\n\n    Args:\n        affine_mats (torch.Tensor): Affine transformation matrices. Supported shape: $(..., 3, 4)$.\n        rgb  (torch.Tensor): Input RGB values. Supported shape: $(..., 3)$.\n\n    Returns:\n        Output transformed colors of shape $(..., 3)$.\n    \"\"\"\n    return torch.matmul(affine_mats[..., :3], rgb.unsqueeze(-1)).squeeze(-1) + affine_mats[..., 3]\n\n\ndef _num_tensor_elems(t):\n    return max(torch.prod(torch.tensor(t.size()[1:]).float()).item(), 1.0)\n\n\ndef total_variation_loss(x):  # noqa: F811\n    \"\"\"Returns total variation on multi-dimensional tensors.\n\n    Args:\n        x (torch.Tensor): The input tensor with shape $(B, C, ...)$, where $B$ is the batch size and $C$ is the channel size.\n    \"\"\"\n    batch_size = x.shape[0]\n    tv = 0\n    for i in range(2, len(x.shape)):\n        n_res = x.shape[i]\n        idx1 = torch.arange(1, n_res, device=x.device)\n        idx2 = torch.arange(0, n_res - 1, device=x.device)\n        x1 = x.index_select(i, idx1)\n        x2 = x.index_select(i, idx2)\n        count = _num_tensor_elems(x1)\n        tv += torch.pow((x1 - x2), 2).sum() / count\n    return tv / batch_size\n\n\ndef slice(bil_grids, xy, rgb, grid_idx):\n    \"\"\"Slices a batch of 3D bilateral grids by pixel coordinates `xy` and gray-scale guidances of pixel colors `rgb`.\n\n    Supports 2-D, 3-D, and 4-D input shapes. The first dimension of the input is the batch size\n    and the last dimension is 2 for `xy`, 3 for `rgb`, and 1 for `grid_idx`.\n\n    The return value is a dictionary containing the affine transformations `affine_mats` sliced from bilateral grids and\n    the output color `rgb_out` after applying the afffine transformations.\n\n    In the 2-D input case, `xy` is a $(N, 2)$ tensor, `rgb` is  a $(N, 3)$ tensor, and `grid_idx` is a $(N, 1)$ tensor.\n    Then `affine_mats[i]` can be obtained via slicing the bilateral grid indexed at `grid_idx[i]` by `xy[i, :]` and `rgb2gray(rgb[i, :])`.\n    For 3-D and 4-D input cases, the behavior of indexing bilateral grids and coordinates is the same with the 2-D case.\n\n    .. note::\n        This function can be regarded as a wrapper of `color_affine_transform` and `BilateralGrid` with a slight performance improvement.\n        When `grid_idx` contains a unique index, only a single bilateral grid will used during the slicing. In this case, this function will not\n        perform tensor indexing to avoid data copy and extra memory\n        (see [this](https://discuss.pytorch.org/t/does-indexing-a-tensor-return-a-copy-of-it/164905)).\n\n    Args:\n        bil_grids (`BilateralGrid`): An instance of $N$ bilateral grids.\n        xy (torch.Tensor): The x-y coordinates of shape $(..., 2)$ in the range of $[0,1]$.\n        rgb (torch.Tensor): The RGB values of shape $(..., 3)$ for computing the guidance coordinates, ranging in $[0,1]$.\n        grid_idx (torch.Tensor): The indices of bilateral grids for each slicing. Shape: $(..., 1)$.\n\n    Returns:\n        A dictionary with keys and values as follows:\n        ```\n        {\n            \"rgb\": Transformed RGB colors. Shape: (..., 3),\n            \"rgb_affine_mats\": The sliced affine transformation matrices from bilateral grids. Shape: (..., 3, 4)\n        }\n        ```\n    \"\"\"\n\n    sh_ = rgb.shape\n\n    grid_idx_unique = torch.unique(grid_idx)\n    if len(grid_idx_unique) == 1:\n        # All pixels are from a single view.\n        grid_idx = grid_idx_unique  # (1,)\n        xy = xy.unsqueeze(0)  # (1, ..., 2)\n        rgb = rgb.unsqueeze(0)  # (1, ..., 3)\n    else:\n        # Pixels are randomly sampled from different views.\n        if len(grid_idx.shape) == 4:\n            grid_idx = grid_idx[:, 0, 0, 0]  # (chunk_size,)\n        elif len(grid_idx.shape) == 3:\n            grid_idx = grid_idx[:, 0, 0]  # (chunk_size,)\n        elif len(grid_idx.shape) == 2:\n            grid_idx = grid_idx[:, 0]  # (chunk_size,)\n        else:\n            raise ValueError(\"The input to bilateral grid slicing is not supported yet.\")\n\n    affine_mats = bil_grids(xy, rgb, grid_idx)\n    rgb = color_affine_transform(affine_mats, rgb)\n\n    return {\n        \"rgb\": rgb.reshape(*sh_),\n        \"rgb_affine_mats\": affine_mats.reshape(*sh_[:-1], affine_mats.shape[-2], affine_mats.shape[-1]),\n    }\n\n\nclass BilateralGrid(nn.Module):\n    \"\"\"Class for 3D bilateral grids.\n\n    Holds one or more than one bilateral grids.\n    \"\"\"\n\n    def __init__(self, num, grid_X=16, grid_Y=16, grid_W=8):\n        \"\"\"\n        Args:\n            num (int): The number of bilateral grids (i.e., the number of views).\n            grid_X (int): Defines grid width $W$.\n            grid_Y (int): Defines grid height $H$.\n            grid_W (int): Defines grid guidance dimension $L$.\n        \"\"\"\n        super(BilateralGrid, self).__init__()\n\n        self.grid_width = grid_X\n        \"\"\"Grid width. Type: int.\"\"\"\n        self.grid_height = grid_Y\n        \"\"\"Grid height. Type: int.\"\"\"\n        self.grid_guidance = grid_W\n        \"\"\"Grid guidance dimension. Type: int.\"\"\"\n\n        # Initialize grids.\n        grid = self._init_identity_grid()\n        self.grids = nn.Parameter(grid.tile(num, 1, 1, 1, 1))  # (N, 12, L, H, W)\n        \"\"\" A 5-D tensor of shape $(N, 12, L, H, W)$.\"\"\"\n\n        # Weights of BT601 RGB-to-gray.\n        self.register_buffer(\"rgb2gray_weight\", torch.Tensor([[0.299, 0.587, 0.114]]))\n        self.rgb2gray = lambda rgb: (rgb @ self.rgb2gray_weight.T) * 2.0 - 1.0\n        \"\"\" A function that converts RGB to gray-scale guidance in $[-1, 1]$.\"\"\"\n\n    def _init_identity_grid(self):\n        grid = torch.tensor(\n            [\n                1.0,\n                0,\n                0,\n                0,\n                0,\n                1.0,\n                0,\n                0,\n                0,\n                0,\n                1.0,\n                0,\n            ]\n        ).float()\n        grid = grid.repeat([self.grid_guidance * self.grid_height * self.grid_width, 1])  # (L * H * W, 12)\n        grid = grid.reshape(1, self.grid_guidance, self.grid_height, self.grid_width, -1)  # (1, L, H, W, 12)\n        grid = grid.permute(0, 4, 1, 2, 3)  # (1, 12, L, H, W)\n        return grid\n\n    def tv_loss(self):\n        \"\"\"Computes and returns total variation loss on the bilateral grids.\"\"\"\n        return total_variation_loss(self.grids)\n\n    def forward(self, grid_xy, rgb, idx=None):\n        \"\"\"Bilateral grid slicing. Supports 2-D, 3-D, 4-D, and 5-D input.\n        For the 2-D, 3-D, and 4-D cases, please refer to `slice`.\n        For the 5-D cases, `idx` will be unused and the first dimension of `xy` should be\n        equal to the number of bilateral grids. Then this function becomes PyTorch's\n        [`F.grid_sample`](https://pytorch.org/docs/stable/generated/torch.nn.functional.grid_sample.html).\n\n        Args:\n            grid_xy (torch.Tensor): The x-y coordinates in the range of $[0,1]$.\n            rgb (torch.Tensor): The RGB values in the range of $[0,1]$.\n            idx (torch.Tensor): The bilateral grid indices.\n\n        Returns:\n            Sliced affine matrices of shape $(..., 3, 4)$.\n        \"\"\"\n\n        grids = self.grids\n        input_ndims = len(grid_xy.shape)\n        assert len(rgb.shape) == input_ndims\n\n        if input_ndims > 1 and input_ndims < 5:\n            # Convert input into 5D\n            for i in range(5 - input_ndims):\n                grid_xy = grid_xy.unsqueeze(1)\n                rgb = rgb.unsqueeze(1)\n            assert idx is not None\n        elif input_ndims != 5:\n            raise ValueError(\"Bilateral grid slicing only takes either 2D, 3D, 4D and 5D inputs\")\n\n        grids = self.grids\n        if idx is not None:\n            grids = grids[idx]\n        assert grids.shape[0] == grid_xy.shape[0]\n\n        # Generate slicing coordinates.\n        grid_xy = (grid_xy - 0.5) * 2  # Rescale to [-1, 1].\n        grid_z = self.rgb2gray(rgb)\n\n        # print(grid_xy.shape, grid_z.shape)\n        # exit()\n        grid_xyz = torch.cat([grid_xy, grid_z], dim=-1)  # (N, m, h, w, 3)\n\n        affine_mats = F.grid_sample(\n            grids, grid_xyz, mode=\"bilinear\", align_corners=True, padding_mode=\"border\"\n        )  # (N, 12, m, h, w)\n        affine_mats = affine_mats.permute(0, 2, 3, 4, 1)  # (N, m, h, w, 12)\n        affine_mats = affine_mats.reshape(*affine_mats.shape[:-1], 3, 4)  # (N, m, h, w, 3, 4)\n\n        for _ in range(5 - input_ndims):\n            affine_mats = affine_mats.squeeze(1)\n\n        return affine_mats\n\n\ndef slice4d(bil_grid4d, xyz, rgb):\n    \"\"\"Slices a 4D bilateral grid by point coordinates `xyz` and gray-scale guidances of radiance colors `rgb`.\n\n    Args:\n        bil_grid4d (`BilateralGridCP4D`): The input 4D bilateral grid.\n        xyz (torch.Tensor): The xyz coordinates with shape $(..., 3)$.\n        rgb (torch.Tensor): The RGB values with shape $(..., 3)$.\n\n    Returns:\n        A dictionary with keys and values as follows:\n        ```\n        {\n            \"rgb\": Transformed radiance RGB colors. Shape: (..., 3),\n            \"rgb_affine_mats\": The sliced affine transformation matrices from the 4D bilateral grid. Shape: (..., 3, 4)\n        }\n        ```\n    \"\"\"\n\n    affine_mats = bil_grid4d(xyz, rgb)\n    rgb = color_affine_transform(affine_mats, rgb)\n\n    return {\"rgb\": rgb, \"rgb_affine_mats\": affine_mats}\n\n\nclass _ScaledTanh(nn.Module):\n    def __init__(self, s=2.0):\n        super().__init__()\n        self.scaler = s\n\n    def forward(self, x):\n        return torch.tanh(self.scaler * x)\n\n\nclass BilateralGridCP4D(nn.Module):\n    \"\"\"Class for low-rank 4D bilateral grids.\"\"\"\n\n    def __init__(\n        self,\n        grid_X=16,\n        grid_Y=16,\n        grid_Z=16,\n        grid_W=8,\n        rank=5,\n        learn_gray=True,\n        gray_mlp_width=8,\n        gray_mlp_depth=2,\n        init_noise_scale=1e-6,\n        bound=2.0,\n    ):\n        \"\"\"\n        Args:\n            grid_X (int): Defines grid width.\n            grid_Y (int): Defines grid height.\n            grid_Z (int): Defines grid depth.\n            grid_W (int): Defines grid guidance dimension.\n            rank (int): Rank of the 4D bilateral grid.\n            learn_gray (bool): If True, an MLP will be learned to convert RGB colors to gray-scale guidances.\n            gray_mlp_width (int): The MLP width for learnable guidance.\n            gray_mlp_depth (int): The number of MLP layers for learnable guidance.\n            init_noise_scale (float): The noise scale of the initialized factors.\n            bound (float): The bound of the xyz coordinates.\n        \"\"\"\n        super(BilateralGridCP4D, self).__init__()\n\n        self.grid_X = grid_X\n        \"\"\"Grid width. Type: int.\"\"\"\n        self.grid_Y = grid_Y\n        \"\"\"Grid height. Type: int.\"\"\"\n        self.grid_Z = grid_Z\n        \"\"\"Grid depth. Type: int.\"\"\"\n        self.grid_W = grid_W\n        \"\"\"Grid guidance dimension. Type: int.\"\"\"\n        self.rank = rank\n        \"\"\"Rank of the 4D bilateral grid. Type: int.\"\"\"\n        self.learn_gray = learn_gray\n        \"\"\"Flags of learnable guidance is used. Type: bool.\"\"\"\n        self.gray_mlp_width = gray_mlp_width\n        \"\"\"The MLP width for learnable guidance. Type: int.\"\"\"\n        self.gray_mlp_depth = gray_mlp_depth\n        \"\"\"The MLP depth for learnable guidance. Type: int.\"\"\"\n        self.init_noise_scale = init_noise_scale\n        \"\"\"The noise scale of the initialized factors. Type: float.\"\"\"\n        self.bound = bound\n        \"\"\"The bound of the xyz coordinates. Type: float.\"\"\"\n\n        self._init_cp_factors_parafac()\n\n        self.rgb2gray = None\n        \"\"\" A function that converts RGB to gray-scale guidances in $[-1, 1]$.\n        If `learn_gray` is True, this will be an MLP network.\"\"\"\n\n        if self.learn_gray:\n\n            def rgb2gray_mlp_linear(layer):\n                return nn.Linear(self.gray_mlp_width, self.gray_mlp_width if layer < self.gray_mlp_depth - 1 else 1)\n\n            def rgb2gray_mlp_actfn(_):\n                return nn.ReLU(inplace=True)\n\n            self.rgb2gray = nn.Sequential(\n                *(\n                    [nn.Linear(3, self.gray_mlp_width)]\n                    + [\n                        nn_module(layer)\n                        for layer in range(1, self.gray_mlp_depth)\n                        for nn_module in [rgb2gray_mlp_actfn, rgb2gray_mlp_linear]\n                    ]\n                    + [_ScaledTanh(2.0)]\n                )\n            )\n        else:\n            # Weights of BT601/BT470 RGB-to-gray.\n            self.register_buffer(\"rgb2gray_weight\", torch.Tensor([[0.299, 0.587, 0.114]]))\n            self.rgb2gray = lambda rgb: (rgb @ self.rgb2gray_weight.T) * 2.0 - 1.0\n\n    def _init_identity_grid(self):\n        grid = torch.tensor(\n            [\n                1.0,\n                0,\n                0,\n                0,\n                0,\n                1.0,\n                0,\n                0,\n                0,\n                0,\n                1.0,\n                0,\n            ]\n        ).float()\n        grid = grid.repeat([self.grid_W * self.grid_Z * self.grid_Y * self.grid_X, 1])\n        grid = grid.reshape(self.grid_W, self.grid_Z, self.grid_Y, self.grid_X, -1)\n        grid = grid.permute(4, 0, 1, 2, 3)  # (12, grid_W, grid_Z, grid_Y, grid_X)\n        return grid\n\n    def _init_cp_factors_parafac(self):\n        # Initialize identity grids.\n        init_grids = self._init_identity_grid()\n        # Random noises are added to avoid singularity.\n        init_grids = torch.randn_like(init_grids) * self.init_noise_scale + init_grids\n        from tensorly.decomposition import parafac\n\n        # Initialize grid CP factors\n        _, facs = parafac(init_grids.clone().detach(), rank=self.rank)\n\n        self.num_facs = len(facs)\n\n        self.fac_0 = nn.Linear(facs[0].shape[0], facs[0].shape[1], bias=False)\n        self.fac_0.weight = nn.Parameter(facs[0])  # (12, rank)\n\n        for i in range(1, self.num_facs):\n            fac = facs[i].T  # (rank, grid_size)\n            fac = fac.view(1, fac.shape[0], fac.shape[1], 1)  # (1, rank, grid_size, 1)\n            self.register_buffer(f\"fac_{i}_init\", fac)\n\n            fac_resid = torch.zeros_like(fac)\n            self.register_parameter(f\"fac_{i}\", nn.Parameter(fac_resid))\n\n    def tv_loss(self):\n        \"\"\"Computes and returns total variation loss on the factors of the low-rank 4D bilateral grids.\"\"\"\n\n        total_loss = 0\n        for i in range(1, self.num_facs):\n            fac = self.get_parameter(f\"fac_{i}\")\n            total_loss += total_variation_loss(fac)\n\n        return total_loss\n\n    def forward(self, xyz, rgb):\n        \"\"\"Low-rank 4D bilateral grid slicing.\n\n        Args:\n            xyz (torch.Tensor): The xyz coordinates with shape $(..., 3)$.\n            rgb (torch.Tensor): The corresponding RGB values with shape $(..., 3)$.\n\n        Returns:\n            Sliced affine matrices with shape $(..., 3, 4)$.\n        \"\"\"\n        sh_ = xyz.shape\n        xyz = xyz.reshape(-1, 3)  # flatten (N, 3)\n        rgb = rgb.reshape(-1, 3)  # flatten (N, 3)\n\n        xyz = xyz / self.bound\n        assert self.rgb2gray is not None\n        gray = self.rgb2gray(rgb)\n        xyzw = torch.cat([xyz, gray], dim=-1)  # (N, 4)\n        xyzw = xyzw.transpose(0, 1)  # (4, N)\n        coords = torch.stack([torch.zeros_like(xyzw), xyzw], dim=-1)  # (4, N, 2)\n        coords = coords.unsqueeze(1)  # (4, 1, N, 2)\n\n        coef = 1.0\n        for i in range(1, self.num_facs):\n            fac = self.get_parameter(f\"fac_{i}\") + self.get_buffer(f\"fac_{i}_init\")\n            coef = coef * F.grid_sample(\n                fac, coords[[i - 1]], align_corners=True, padding_mode=\"border\"\n            )  # [1, rank, 1, N]\n        coef = coef.squeeze([0, 2]).transpose(0, 1)  # (N, rank) #type: ignore\n        mat = self.fac_0(coef)\n        return mat.reshape(*sh_[:-1], 3, 4)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/losses.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCollection of Losses.\n\"\"\"\n\nfrom enum import Enum\nfrom typing import Dict, Literal, Optional, Tuple, cast\n\nimport torch\nfrom jaxtyping import Bool, Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.utils.math import masked_reduction, normalized_depth_scale_and_shift\n\nL1Loss = nn.L1Loss\nMSELoss = nn.MSELoss\n\nLOSSES = {\"L1\": L1Loss, \"MSE\": MSELoss}\n\nEPS = 1.0e-7\n\n# Sigma scale factor from Urban Radiance Fields (Rematas et al., 2022)\nURF_SIGMA_SCALE_FACTOR = 3.0\n\n\nclass DepthLossType(Enum):\n    \"\"\"Types of depth losses for depth supervision.\"\"\"\n\n    DS_NERF = 1\n    URF = 2\n    SPARSENERF_RANKING = 3\n\n\nFORCE_PSEUDODEPTH_LOSS = False\nPSEUDODEPTH_COMPATIBLE_LOSSES = (DepthLossType.SPARSENERF_RANKING,)\n\n\ndef outer(\n    t0_starts: Float[Tensor, \"*batch num_samples_0\"],\n    t0_ends: Float[Tensor, \"*batch num_samples_0\"],\n    t1_starts: Float[Tensor, \"*batch num_samples_1\"],\n    t1_ends: Float[Tensor, \"*batch num_samples_1\"],\n    y1: Float[Tensor, \"*batch num_samples_1\"],\n) -> Float[Tensor, \"*batch num_samples_0\"]:\n    \"\"\"Faster version of\n\n    https://github.com/kakaobrain/NeRF-Factory/blob/f61bb8744a5cb4820a4d968fb3bfbed777550f4a/src/model/mipnerf360/helper.py#L117\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/stepfun.py#L64\n\n    Args:\n        t0_starts: start of the interval edges\n        t0_ends: end of the interval edges\n        t1_starts: start of the interval edges\n        t1_ends: end of the interval edges\n        y1: weights\n    \"\"\"\n    cy1 = torch.cat([torch.zeros_like(y1[..., :1]), torch.cumsum(y1, dim=-1)], dim=-1)\n\n    idx_lo = torch.searchsorted(t1_starts.contiguous(), t0_starts.contiguous(), side=\"right\") - 1\n    idx_lo = torch.clamp(idx_lo, min=0, max=y1.shape[-1] - 1)\n    idx_hi = torch.searchsorted(t1_ends.contiguous(), t0_ends.contiguous(), side=\"right\")\n    idx_hi = torch.clamp(idx_hi, min=0, max=y1.shape[-1] - 1)\n    cy1_lo = torch.take_along_dim(cy1[..., :-1], idx_lo, dim=-1)\n    cy1_hi = torch.take_along_dim(cy1[..., 1:], idx_hi, dim=-1)\n    y0_outer = cy1_hi - cy1_lo\n\n    return y0_outer\n\n\ndef lossfun_outer(\n    t: Float[Tensor, \"*batch num_samples_1\"],\n    w: Float[Tensor, \"*batch num_samples\"],\n    t_env: Float[Tensor, \"*batch num_samples_1\"],\n    w_env: Float[Tensor, \"*batch num_samples\"],\n):\n    \"\"\"\n    https://github.com/kakaobrain/NeRF-Factory/blob/f61bb8744a5cb4820a4d968fb3bfbed777550f4a/src/model/mipnerf360/helper.py#L136\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/stepfun.py#L80\n\n    Args:\n        t: interval edges\n        w: weights\n        t_env: interval edges of the upper bound enveloping histogram\n        w_env: weights that should upper bound the inner (t,w) histogram\n    \"\"\"\n    w_outer = outer(t[..., :-1], t[..., 1:], t_env[..., :-1], t_env[..., 1:], w_env)\n    return torch.clip(w - w_outer, min=0) ** 2 / (w + EPS)\n\n\ndef ray_samples_to_sdist(ray_samples):\n    \"\"\"Convert ray samples to s space\"\"\"\n    starts = ray_samples.spacing_starts\n    ends = ray_samples.spacing_ends\n    sdist = torch.cat([starts[..., 0], ends[..., -1:, 0]], dim=-1)  # (num_rays, num_samples + 1)\n    return sdist\n\n\ndef interlevel_loss(weights_list, ray_samples_list) -> torch.Tensor:\n    \"\"\"Calculates the proposal loss in the MipNeRF-360 paper.\n\n    https://github.com/kakaobrain/NeRF-Factory/blob/f61bb8744a5cb4820a4d968fb3bfbed777550f4a/src/model/mipnerf360/model.py#L515\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/train_utils.py#L133\n    \"\"\"\n    c = ray_samples_to_sdist(ray_samples_list[-1]).detach()\n    w = weights_list[-1][..., 0].detach()\n    assert len(ray_samples_list) > 0\n\n    loss_interlevel = 0.0\n    for ray_samples, weights in zip(ray_samples_list[:-1], weights_list[:-1]):\n        sdist = ray_samples_to_sdist(ray_samples)\n        cp = sdist  # (num_rays, num_samples + 1)\n        wp = weights[..., 0]  # (num_rays, num_samples)\n        loss_interlevel += torch.mean(lossfun_outer(c, w, cp, wp))\n\n    assert isinstance(loss_interlevel, Tensor)\n    return loss_interlevel\n\n\n# Verified\ndef lossfun_distortion(t, w):\n    \"\"\"\n    https://github.com/kakaobrain/NeRF-Factory/blob/f61bb8744a5cb4820a4d968fb3bfbed777550f4a/src/model/mipnerf360/helper.py#L142\n    https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/stepfun.py#L266\n    \"\"\"\n    ut = (t[..., 1:] + t[..., :-1]) / 2\n    dut = torch.abs(ut[..., :, None] - ut[..., None, :])\n    loss_inter = torch.sum(w * torch.sum(w[..., None, :] * dut, dim=-1), dim=-1)\n\n    loss_intra = torch.sum(w**2 * (t[..., 1:] - t[..., :-1]), dim=-1) / 3\n\n    return loss_inter + loss_intra\n\n\ndef distortion_loss(weights_list, ray_samples_list):\n    \"\"\"From mipnerf360\"\"\"\n    c = ray_samples_to_sdist(ray_samples_list[-1])\n    w = weights_list[-1][..., 0]\n    loss = torch.mean(lossfun_distortion(c, w))\n    return loss\n\n\ndef nerfstudio_distortion_loss(\n    ray_samples: RaySamples,\n    densities: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None,\n    weights: Optional[Float[Tensor, \"*bs num_samples 1\"]] = None,\n) -> Float[Tensor, \"*bs 1\"]:\n    \"\"\"Ray based distortion loss proposed in MipNeRF-360. Returns distortion Loss.\n\n    .. math::\n\n        \\\\mathcal{L}(\\\\mathbf{s}, \\\\mathbf{w}) =\\\\iint\\\\limits_{-\\\\infty}^{\\\\,\\\\,\\\\,\\\\infty}\n        \\\\mathbf{w}_\\\\mathbf{s}(u)\\\\mathbf{w}_\\\\mathbf{s}(v)|u - v|\\\\,d_{u}\\\\,d_{v}\n\n    where :math:`\\\\mathbf{w}_\\\\mathbf{s}(u)=\\\\sum_i w_i \\\\mathbb{1}_{[\\\\mathbf{s}_i, \\\\mathbf{s}_{i+1})}(u)`\n    is the weight at location :math:`u` between bin locations :math:`s_i` and :math:`s_{i+1}`.\n\n    Args:\n        ray_samples: Ray samples to compute loss over\n        densities: Predicted sample densities\n        weights: Predicted weights from densities and sample locations\n    \"\"\"\n    if torch.is_tensor(densities):\n        assert not torch.is_tensor(weights), \"Cannot use both densities and weights\"\n        assert densities is not None\n        # Compute the weight at each sample location\n        weights = ray_samples.get_weights(densities)\n    if torch.is_tensor(weights):\n        assert not torch.is_tensor(densities), \"Cannot use both densities and weights\"\n    assert weights is not None\n\n    starts = ray_samples.spacing_starts\n    ends = ray_samples.spacing_ends\n\n    assert starts is not None and ends is not None, \"Ray samples must have spacing starts and ends\"\n    midpoints = (starts + ends) / 2.0  # (..., num_samples, 1)\n\n    loss = (\n        weights * weights[..., None, :, 0] * torch.abs(midpoints - midpoints[..., None, :, 0])\n    )  # (..., num_samples, num_samples)\n    loss = torch.sum(loss, dim=(-1, -2))[..., None]  # (..., num_samples)\n    loss = loss + 1 / 3.0 * torch.sum(weights**2 * (ends - starts), dim=-2)\n\n    return loss\n\n\ndef orientation_loss(\n    weights: Float[Tensor, \"*bs num_samples 1\"],\n    normals: Float[Tensor, \"*bs num_samples 3\"],\n    viewdirs: Float[Tensor, \"*bs 3\"],\n):\n    \"\"\"Orientation loss proposed in Ref-NeRF.\n    Loss that encourages that all visible normals are facing towards the camera.\n    \"\"\"\n    w = weights\n    n = normals\n    v = viewdirs * -1\n    n_dot_v = (n * v[..., None, :]).sum(dim=-1)\n    return (w[..., 0] * torch.fmin(torch.zeros_like(n_dot_v), n_dot_v) ** 2).sum(dim=-1)\n\n\ndef pred_normal_loss(\n    weights: Float[Tensor, \"*bs num_samples 1\"],\n    normals: Float[Tensor, \"*bs num_samples 3\"],\n    pred_normals: Float[Tensor, \"*bs num_samples 3\"],\n):\n    \"\"\"Loss between normals calculated from density and normals from prediction network.\"\"\"\n    return (weights[..., 0] * (1.0 - torch.sum(normals * pred_normals, dim=-1))).sum(dim=-1)\n\n\ndef ds_nerf_depth_loss(\n    weights: Float[Tensor, \"*batch num_samples 1\"],\n    termination_depth: Float[Tensor, \"*batch 1\"],\n    steps: Float[Tensor, \"*batch num_samples 1\"],\n    lengths: Float[Tensor, \"*batch num_samples 1\"],\n    sigma: Float[Tensor, \"0\"],\n) -> Float[Tensor, \"*batch 1\"]:\n    \"\"\"Depth loss from Depth-supervised NeRF (Deng et al., 2022).\n\n    Args:\n        weights: Weights predicted for each sample.\n        termination_depth: Ground truth depth of rays.\n        steps: Sampling distances along rays.\n        lengths: Distances between steps.\n        sigma: Uncertainty around depth values.\n    Returns:\n        Depth loss scalar.\n    \"\"\"\n    depth_mask = termination_depth > 0\n\n    loss = -torch.log(weights + EPS) * torch.exp(-((steps - termination_depth[:, None]) ** 2) / (2 * sigma)) * lengths\n    loss = loss.sum(-2) * depth_mask\n    return torch.mean(loss)\n\n\ndef urban_radiance_field_depth_loss(\n    weights: Float[Tensor, \"*batch num_samples 1\"],\n    termination_depth: Float[Tensor, \"*batch 1\"],\n    predicted_depth: Float[Tensor, \"*batch 1\"],\n    steps: Float[Tensor, \"*batch num_samples 1\"],\n    sigma: Float[Tensor, \"0\"],\n) -> Float[Tensor, \"*batch 1\"]:\n    \"\"\"Lidar losses from Urban Radiance Fields (Rematas et al., 2022).\n\n    Args:\n        weights: Weights predicted for each sample.\n        termination_depth: Ground truth depth of rays.\n        predicted_depth: Depth prediction from the network.\n        steps: Sampling distances along rays.\n        sigma: Uncertainty around depth values.\n    Returns:\n        Depth loss scalar.\n    \"\"\"\n    depth_mask = termination_depth > 0\n\n    # Expected depth loss\n    expected_depth_loss = (termination_depth - predicted_depth) ** 2\n\n    # Line of sight losses\n    target_distribution = torch.distributions.normal.Normal(0.0, sigma / URF_SIGMA_SCALE_FACTOR)\n    termination_depth = termination_depth[:, None]\n    line_of_sight_loss_near_mask = torch.logical_and(\n        steps <= termination_depth + sigma, steps >= termination_depth - sigma\n    )\n    line_of_sight_loss_near = (weights - torch.exp(target_distribution.log_prob(steps - termination_depth))) ** 2\n    line_of_sight_loss_near = (line_of_sight_loss_near_mask * line_of_sight_loss_near).sum(-2)\n    line_of_sight_loss_empty_mask = steps < termination_depth - sigma\n    line_of_sight_loss_empty = (line_of_sight_loss_empty_mask * weights**2).sum(-2)\n    line_of_sight_loss = line_of_sight_loss_near + line_of_sight_loss_empty\n\n    loss = (expected_depth_loss + line_of_sight_loss) * depth_mask\n    return torch.mean(loss)\n\n\ndef depth_loss(\n    weights: Float[Tensor, \"*batch num_samples 1\"],\n    ray_samples: RaySamples,\n    termination_depth: Float[Tensor, \"*batch 1\"],\n    predicted_depth: Float[Tensor, \"*batch 1\"],\n    sigma: Float[Tensor, \"0\"],\n    directions_norm: Float[Tensor, \"*batch 1\"],\n    is_euclidean: bool,\n    depth_loss_type: DepthLossType,\n) -> Float[Tensor, \"0\"]:\n    \"\"\"Implementation of depth losses.\n\n    Args:\n        weights: Weights predicted for each sample.\n        ray_samples: Samples along rays corresponding to weights.\n        termination_depth: Ground truth depth of rays.\n        predicted_depth: Depth prediction from the network.\n        sigma: Uncertainty around depth value.\n        directions_norm: Norms of ray direction vectors in the camera frame.\n        is_euclidean: Whether ground truth depths corresponds to normalized direction vectors.\n        depth_loss_type: Type of depth loss to apply.\n\n    Returns:\n        Depth loss scalar.\n    \"\"\"\n    if not is_euclidean:\n        termination_depth = termination_depth * directions_norm\n    steps = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n\n    if depth_loss_type == DepthLossType.DS_NERF:\n        lengths = ray_samples.frustums.ends - ray_samples.frustums.starts\n        return ds_nerf_depth_loss(weights, termination_depth, steps, lengths, sigma)\n\n    if depth_loss_type == DepthLossType.URF:\n        return urban_radiance_field_depth_loss(weights, termination_depth, predicted_depth, steps, sigma)\n\n    raise NotImplementedError(\"Provided depth loss type not implemented.\")\n\n\ndef monosdf_normal_loss(\n    normal_pred: Float[Tensor, \"num_samples 3\"], normal_gt: Float[Tensor, \"num_samples 3\"]\n) -> Float[Tensor, \"0\"]:\n    \"\"\"\n    Normal consistency loss proposed in monosdf - https://niujinshuchong.github.io/monosdf/\n    Enforces consistency between the volume rendered normal and the predicted monocular normal.\n    With both angluar and L1 loss. Eq 14 https://arxiv.org/pdf/2206.00665.pdf\n    Args:\n        normal_pred: volume rendered normal\n        normal_gt: monocular normal\n    \"\"\"\n    normal_gt = torch.nn.functional.normalize(normal_gt, p=2, dim=-1)\n    normal_pred = torch.nn.functional.normalize(normal_pred, p=2, dim=-1)\n    l1 = torch.abs(normal_pred - normal_gt).sum(dim=-1).mean()\n    cos = (1.0 - torch.sum(normal_pred * normal_gt, dim=-1)).mean()\n    return l1 + cos\n\n\nclass MiDaSMSELoss(nn.Module):\n    \"\"\"\n    data term from MiDaS paper\n    \"\"\"\n\n    def __init__(self, reduction_type: Literal[\"image\", \"batch\"] = \"batch\"):\n        super().__init__()\n\n        self.reduction_type: Literal[\"image\", \"batch\"] = reduction_type\n        # reduction here is different from the image/batch-based reduction. This is either \"mean\" or \"sum\"\n        self.mse_loss = MSELoss(reduction=\"none\")\n\n    def forward(\n        self,\n        prediction: Float[Tensor, \"1 32 mult\"],\n        target: Float[Tensor, \"1 32 mult\"],\n        mask: Bool[Tensor, \"1 32 mult\"],\n    ) -> Float[Tensor, \"0\"]:\n        \"\"\"\n        Args:\n            prediction: predicted depth map\n            target: ground truth depth map\n            mask: mask of valid pixels\n        Returns:\n            mse loss based on reduction function\n        \"\"\"\n        summed_mask = torch.sum(mask, (1, 2))\n        image_loss = torch.sum(self.mse_loss(prediction, target) * mask, (1, 2))\n        # multiply by 2 magic number?\n        image_loss = masked_reduction(image_loss, 2 * summed_mask, self.reduction_type)\n\n        return image_loss\n\n\n# losses based on https://github.com/autonomousvision/monosdf/blob/main/code/model/loss.py\nclass GradientLoss(nn.Module):\n    \"\"\"\n    multiscale, scale-invariant gradient matching term to the disparity space.\n    This term biases discontinuities to be sharp and to coincide with discontinuities in the ground truth\n    More info here https://arxiv.org/pdf/1907.01341.pdf Equation 11\n    \"\"\"\n\n    def __init__(self, scales: int = 4, reduction_type: Literal[\"image\", \"batch\"] = \"batch\"):\n        \"\"\"\n        Args:\n            scales: number of scales to use\n            reduction_type: either \"batch\" or \"image\"\n        \"\"\"\n        super().__init__()\n        self.reduction_type: Literal[\"image\", \"batch\"] = reduction_type\n        self.__scales = scales\n\n    def forward(\n        self,\n        prediction: Float[Tensor, \"1 32 mult\"],\n        target: Float[Tensor, \"1 32 mult\"],\n        mask: Bool[Tensor, \"1 32 mult\"],\n    ) -> Float[Tensor, \"0\"]:\n        \"\"\"\n        Args:\n            prediction: predicted depth map\n            target: ground truth depth map\n            mask: mask of valid pixels\n        Returns:\n            gradient loss based on reduction function\n        \"\"\"\n        assert self.__scales >= 1\n        total = 0.0\n\n        for scale in range(self.__scales):\n            step = pow(2, scale)\n\n            grad_loss = self.gradient_loss(\n                prediction[:, ::step, ::step],\n                target[:, ::step, ::step],\n                mask[:, ::step, ::step],\n            )\n            total += grad_loss\n\n        assert isinstance(total, Tensor)\n        return total\n\n    def gradient_loss(\n        self,\n        prediction: Float[Tensor, \"1 32 mult\"],\n        target: Float[Tensor, \"1 32 mult\"],\n        mask: Bool[Tensor, \"1 32 mult\"],\n    ) -> Float[Tensor, \"0\"]:\n        \"\"\"\n        multiscale, scale-invariant gradient matching term to the disparity space.\n        This term biases discontinuities to be sharp and to coincide with discontinuities in the ground truth\n        More info here https://arxiv.org/pdf/1907.01341.pdf Equation 11\n        Args:\n            prediction: predicted depth map\n            target: ground truth depth map\n            reduction: reduction function, either reduction_batch_based or reduction_image_based\n        Returns:\n            gradient loss based on reduction function\n        \"\"\"\n        summed_mask = torch.sum(mask, (1, 2))\n        diff = prediction - target\n        diff = torch.mul(mask, diff)\n\n        grad_x = torch.abs(diff[:, :, 1:] - diff[:, :, :-1])\n        mask_x = torch.mul(mask[:, :, 1:], mask[:, :, :-1])\n        grad_x = torch.mul(mask_x, grad_x)\n\n        grad_y = torch.abs(diff[:, 1:, :] - diff[:, :-1, :])\n        mask_y = torch.mul(mask[:, 1:, :], mask[:, :-1, :])\n        grad_y = torch.mul(mask_y, grad_y)\n\n        image_loss = torch.sum(grad_x, (1, 2)) + torch.sum(grad_y, (1, 2))\n        image_loss = masked_reduction(image_loss, summed_mask, self.reduction_type)\n\n        return image_loss\n\n\nclass ScaleAndShiftInvariantLoss(nn.Module):\n    \"\"\"\n    Scale and shift invariant loss as described in\n    \"Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer\"\n    https://arxiv.org/pdf/1907.01341.pdf\n    \"\"\"\n\n    def __init__(self, alpha: float = 0.5, scales: int = 4, reduction_type: Literal[\"image\", \"batch\"] = \"batch\"):\n        \"\"\"\n        Args:\n            alpha: weight of the regularization term\n            scales: number of scales to use\n            reduction_type: either \"batch\" or \"image\"\n        \"\"\"\n        super().__init__()\n        self.__data_loss = MiDaSMSELoss(reduction_type=reduction_type)\n        self.__regularization_loss = GradientLoss(scales=scales, reduction_type=reduction_type)\n        self.__alpha = alpha\n\n        self.__prediction_ssi = None\n\n    def forward(\n        self,\n        prediction: Float[Tensor, \"1 32 mult\"],\n        target: Float[Tensor, \"1 32 mult\"],\n        mask: Bool[Tensor, \"1 32 mult\"],\n    ) -> Float[Tensor, \"0\"]:\n        \"\"\"\n        Args:\n            prediction: predicted depth map (unnormalized)\n            target: ground truth depth map (normalized)\n            mask: mask of valid pixels\n        Returns:\n            scale and shift invariant loss\n        \"\"\"\n        scale, shift = normalized_depth_scale_and_shift(prediction, target, mask)\n        self.__prediction_ssi = scale.view(-1, 1, 1) * prediction + shift.view(-1, 1, 1)\n\n        total = self.__data_loss(self.__prediction_ssi, target, mask)\n        if self.__alpha > 0:\n            total += self.__alpha * self.__regularization_loss(self.__prediction_ssi, target, mask)\n\n        return total\n\n    def __get_prediction_ssi(self):\n        \"\"\"\n        scale and shift invariant prediction\n        from https://arxiv.org/pdf/1907.01341.pdf equation 1\n        \"\"\"\n        return self.__prediction_ssi\n\n    prediction_ssi = property(__get_prediction_ssi)\n\n\ndef tv_loss(grids: Float[Tensor, \"grids feature_dim row column\"]) -> Float[Tensor, \"\"]:\n    \"\"\"\n    https://github.com/apchenstu/TensoRF/blob/4ec894dc1341a2201fe13ae428631b58458f105d/utils.py#L139\n\n    Args:\n        grids: stacks of explicit feature grids (stacked at dim 0)\n    Returns:\n        average total variation loss for neighbor rows and columns.\n    \"\"\"\n    number_of_grids = grids.shape[0]\n    h_tv_count = grids[:, :, 1:, :].shape[1] * grids[:, :, 1:, :].shape[2] * grids[:, :, 1:, :].shape[3]\n    w_tv_count = grids[:, :, :, 1:].shape[1] * grids[:, :, :, 1:].shape[2] * grids[:, :, :, 1:].shape[3]\n    h_tv = torch.pow((grids[:, :, 1:, :] - grids[:, :, :-1, :]), 2).sum()\n    w_tv = torch.pow((grids[:, :, :, 1:] - grids[:, :, :, :-1]), 2).sum()\n    return 2 * (h_tv / h_tv_count + w_tv / w_tv_count) / number_of_grids\n\n\nclass _GradientScaler(torch.autograd.Function):  # typing: ignore\n    \"\"\"\n    Scale gradients by a constant factor.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, value, scaling):\n        ctx.save_for_backward(scaling)\n        return value, scaling\n\n    @staticmethod\n    def backward(ctx, output_grad, grad_scaling):\n        (scaling,) = ctx.saved_tensors\n        return output_grad * scaling, grad_scaling\n\n\ndef scale_gradients_by_distance_squared(\n    field_outputs: Dict[FieldHeadNames, torch.Tensor],\n    ray_samples: RaySamples,\n) -> Dict[FieldHeadNames, torch.Tensor]:\n    \"\"\"\n    Scale gradients by the ray distance to the pixel\n    as suggested in `Radiance Field Gradient Scaling for Unbiased Near-Camera Training` paper\n\n    Note: The scaling is applied on the interval of [0, 1] along the ray!\n\n    Example:\n        GradientLoss should be called right after obtaining the densities and colors from the field. ::\n            >>> field_outputs = scale_gradient_by_distance_squared(field_outputs, ray_samples)\n    \"\"\"\n    out = {}\n    ray_dist = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n    scaling = torch.square(ray_dist).clamp(0, 1)\n    for key, value in field_outputs.items():\n        out[key], _ = cast(Tuple[Tensor, Tensor], _GradientScaler.apply(value, scaling))\n    return out\n\n\ndef depth_ranking_loss(rendered_depth, gt_depth):\n    \"\"\"\n    Depth ranking loss as described in the SparseNeRF paper\n    Assumes that the layout of the batch comes from a PairPixelSampler, so that adjacent samples in the gt_depth\n    and rendered_depth are from pixels with a radius of each other\n    \"\"\"\n    m = 1e-4\n    if rendered_depth.shape[0] % 2 != 0:\n        # chop off one index\n        rendered_depth = rendered_depth[:-1, :]\n        gt_depth = gt_depth[:-1, :]\n    dpt_diff = gt_depth[::2, :] - gt_depth[1::2, :]\n    out_diff = rendered_depth[::2, :] - rendered_depth[1::2, :] + m\n    differing_signs = torch.sign(dpt_diff) != torch.sign(out_diff)\n    return torch.nanmean((out_diff[differing_signs] * torch.sign(out_diff[differing_signs])))\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/ray_generators.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nRay generator.\n\"\"\"\n\nfrom jaxtyping import Int\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import RayBundle\n\n\nclass RayGenerator(nn.Module):\n    \"\"\"torch.nn Module for generating rays.\n    This class is the interface between the scene's cameras/camera optimizer and the ray sampler.\n\n    Args:\n        cameras: Camera objects containing camera info.\n    \"\"\"\n\n    image_coords: Tensor\n\n    def __init__(self, cameras: Cameras) -> None:\n        super().__init__()\n        self.cameras = cameras\n        self.register_buffer(\"image_coords\", cameras.get_image_coords(), persistent=False)\n\n    def forward(self, ray_indices: Int[Tensor, \"num_rays 3\"]) -> RayBundle:\n        \"\"\"Index into the cameras to generate the rays.\n\n        Args:\n            ray_indices: Contains camera, row, and col indices for target rays.\n        \"\"\"\n        c = ray_indices[:, 0]  # camera indices\n        y = ray_indices[:, 1]  # row indices\n        x = ray_indices[:, 2]  # col indices\n        coords = self.image_coords[y, x]\n\n        ray_bundle = self.cameras.generate_rays(\n            camera_indices=c.unsqueeze(-1),\n            coords=coords,\n        )\n        return ray_bundle\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/ray_samplers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCollection of sampling strategies\n\"\"\"\n\nfrom abc import abstractmethod\nfrom typing import Any, Callable, List, Optional, Protocol, Tuple, Union\n\nimport torch\nfrom jaxtyping import Float\nfrom nerfacc import OccGridEstimator\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import Frustums, RayBundle, RaySamples\n\n\nclass Sampler(nn.Module):\n    \"\"\"Generate Samples\n\n    Args:\n        num_samples: number of samples to take\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n    ) -> None:\n        super().__init__()\n        self.num_samples = num_samples\n\n    @abstractmethod\n    def generate_ray_samples(self) -> Any:\n        \"\"\"Generate Ray Samples\"\"\"\n\n    def forward(self, *args, **kwargs) -> Any:\n        \"\"\"Generate ray samples\"\"\"\n        return self.generate_ray_samples(*args, **kwargs)\n\n\nclass SpacedSampler(Sampler):\n    \"\"\"Sample points according to a function.\n\n    Args:\n        num_samples: Number of samples per ray\n        spacing_fn: Function that dictates sample spacing (ie `lambda x : x` is uniform).\n        spacing_fn_inv: The inverse of spacing_fn.\n        train_stratified: Use stratified sampling during training. Defaults to True\n        single_jitter: Use a same random jitter for all samples along a ray. Defaults to False\n    \"\"\"\n\n    def __init__(\n        self,\n        spacing_fn: Callable,\n        spacing_fn_inv: Callable,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(num_samples=num_samples)\n        self.train_stratified = train_stratified\n        self.single_jitter = single_jitter\n        self.spacing_fn = spacing_fn\n        self.spacing_fn_inv = spacing_fn_inv\n\n    def generate_ray_samples(\n        self,\n        ray_bundle: Optional[RayBundle] = None,\n        num_samples: Optional[int] = None,\n    ) -> RaySamples:\n        \"\"\"Generates position samples according to spacing function.\n\n        Args:\n            ray_bundle: Rays to generate samples for\n            num_samples: Number of samples per ray\n\n        Returns:\n            Positions and deltas for samples along a ray\n        \"\"\"\n        assert ray_bundle is not None\n        assert ray_bundle.nears is not None\n        assert ray_bundle.fars is not None\n\n        num_samples = num_samples or self.num_samples\n        assert num_samples is not None\n        num_rays = ray_bundle.origins.shape[0]\n\n        bins = torch.linspace(0.0, 1.0, num_samples + 1).to(ray_bundle.origins.device)[None, ...]  # [1, num_samples+1]\n\n        # TODO More complicated than it needs to be.\n        if self.train_stratified and self.training:\n            if self.single_jitter:\n                t_rand = torch.rand((num_rays, 1), dtype=bins.dtype, device=bins.device)\n            else:\n                t_rand = torch.rand((num_rays, num_samples + 1), dtype=bins.dtype, device=bins.device)\n            bin_centers = (bins[..., 1:] + bins[..., :-1]) / 2.0\n            bin_upper = torch.cat([bin_centers, bins[..., -1:]], -1)\n            bin_lower = torch.cat([bins[..., :1], bin_centers], -1)\n            bins = bin_lower + (bin_upper - bin_lower) * t_rand\n\n        s_near, s_far = (self.spacing_fn(x) for x in (ray_bundle.nears, ray_bundle.fars))\n\n        def spacing_to_euclidean_fn(x):\n            return self.spacing_fn_inv(x * s_far + (1 - x) * s_near)\n\n        euclidean_bins = spacing_to_euclidean_fn(bins)  # [num_rays, num_samples+1]\n\n        ray_samples = ray_bundle.get_ray_samples(\n            bin_starts=euclidean_bins[..., :-1, None],\n            bin_ends=euclidean_bins[..., 1:, None],\n            spacing_starts=bins[..., :-1, None],\n            spacing_ends=bins[..., 1:, None],\n            spacing_to_euclidean_fn=spacing_to_euclidean_fn,\n        )\n\n        return ray_samples\n\n\nclass UniformSampler(SpacedSampler):\n    \"\"\"Sample uniformly along a ray\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Use stratified sampling during training. Defaults to True\n        single_jitter: Use a same random jitter for all samples along a ray. Defaults to False\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(\n            num_samples=num_samples,\n            spacing_fn=lambda x: x,\n            spacing_fn_inv=lambda x: x,\n            train_stratified=train_stratified,\n            single_jitter=single_jitter,\n        )\n\n\nclass LinearDisparitySampler(SpacedSampler):\n    \"\"\"Sample linearly in disparity along a ray\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Use stratified sampling during training. Defaults to True\n        single_jitter: Use a same random jitter for all samples along a ray. Defaults to False\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(\n            num_samples=num_samples,\n            spacing_fn=lambda x: 1 / x,\n            spacing_fn_inv=lambda x: 1 / x,\n            train_stratified=train_stratified,\n            single_jitter=single_jitter,\n        )\n\n\nclass SqrtSampler(SpacedSampler):\n    \"\"\"Square root sampler along a ray\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Use stratified sampling during training. Defaults to True\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(\n            num_samples=num_samples,\n            spacing_fn=torch.sqrt,\n            spacing_fn_inv=lambda x: x**2,\n            train_stratified=train_stratified,\n            single_jitter=single_jitter,\n        )\n\n\nclass LogSampler(SpacedSampler):\n    \"\"\"Log sampler along a ray\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Use stratified sampling during training. Defaults to True\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(\n            num_samples=num_samples,\n            spacing_fn=torch.log,\n            spacing_fn_inv=torch.exp,\n            train_stratified=train_stratified,\n            single_jitter=single_jitter,\n        )\n\n\nclass UniformLinDispPiecewiseSampler(SpacedSampler):\n    \"\"\"Piecewise sampler along a ray that allocates the first half of the samples uniformly and the second half\n    using linearly in disparity spacing.\n\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Use stratified sampling during training. Defaults to True\n        single_jitter: Use a same random jitter for all samples along a ray. Defaults to False\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified=True,\n        single_jitter=False,\n    ) -> None:\n        super().__init__(\n            num_samples=num_samples,\n            spacing_fn=lambda x: torch.where(x < 1, x / 2, 1 - 1 / (2 * x)),\n            spacing_fn_inv=lambda x: torch.where(x < 0.5, 2 * x, 1 / (2 - 2 * x)),\n            train_stratified=train_stratified,\n            single_jitter=single_jitter,\n        )\n\n\nclass PDFSampler(Sampler):\n    \"\"\"Sample based on probability distribution\n\n    Args:\n        num_samples: Number of samples per ray\n        train_stratified: Randomize location within each bin during training.\n        single_jitter: Use a same random jitter for all samples along a ray. Defaults to False\n        include_original: Add original samples to ray.\n        histogram_padding: Amount to weights prior to computing PDF.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_samples: Optional[int] = None,\n        train_stratified: bool = True,\n        single_jitter: bool = False,\n        include_original: bool = True,\n        histogram_padding: float = 0.01,\n    ) -> None:\n        super().__init__(num_samples=num_samples)\n        self.train_stratified = train_stratified\n        self.include_original = include_original\n        self.histogram_padding = histogram_padding\n        self.single_jitter = single_jitter\n\n    def generate_ray_samples(\n        self,\n        ray_bundle: Optional[RayBundle] = None,\n        ray_samples: Optional[RaySamples] = None,\n        weights: Optional[Float[Tensor, \"*batch num_samples 1\"]] = None,\n        num_samples: Optional[int] = None,\n        eps: float = 1e-5,\n    ) -> RaySamples:\n        \"\"\"Generates position samples given a distribution.\n\n        Args:\n            ray_bundle: Rays to generate samples for\n            ray_samples: Existing ray samples\n            weights: Weights for each bin\n            num_samples: Number of samples per ray\n            eps: Small value to prevent numerical issues.\n\n        Returns:\n            Positions and deltas for samples along a ray\n        \"\"\"\n\n        if ray_samples is None or ray_bundle is None:\n            raise ValueError(\"ray_samples and ray_bundle must be provided\")\n        assert weights is not None, \"weights must be provided\"\n\n        num_samples = num_samples or self.num_samples\n        assert num_samples is not None\n        num_bins = num_samples + 1\n\n        weights = weights[..., 0] + self.histogram_padding\n\n        # Add small offset to rays with zero weight to prevent NaNs\n        weights_sum = torch.sum(weights, dim=-1, keepdim=True)\n        padding = torch.relu(eps - weights_sum)\n        weights = weights + padding / weights.shape[-1]\n        weights_sum += padding\n\n        pdf = weights / weights_sum\n        cdf = torch.min(torch.ones_like(pdf), torch.cumsum(pdf, dim=-1))\n        cdf = torch.cat([torch.zeros_like(cdf[..., :1]), cdf], dim=-1)\n\n        if self.train_stratified and self.training:\n            # Stratified samples between 0 and 1\n            u = torch.linspace(0.0, 1.0 - (1.0 / num_bins), steps=num_bins, device=cdf.device)\n            u = u.expand(size=(*cdf.shape[:-1], num_bins))\n            if self.single_jitter:\n                rand = torch.rand((*cdf.shape[:-1], 1), device=cdf.device) / num_bins\n            else:\n                rand = torch.rand((*cdf.shape[:-1], num_samples + 1), device=cdf.device) / num_bins\n            u = u + rand\n        else:\n            # Uniform samples between 0 and 1\n            u = torch.linspace(0.0, 1.0 - (1.0 / num_bins), steps=num_bins, device=cdf.device)\n            u = u + 1.0 / (2 * num_bins)\n            u = u.expand(size=(*cdf.shape[:-1], num_bins))\n        u = u.contiguous()\n\n        assert (\n            ray_samples.spacing_starts is not None and ray_samples.spacing_ends is not None\n        ), \"ray_sample spacing_starts and spacing_ends must be provided\"\n        assert ray_samples.spacing_to_euclidean_fn is not None, \"ray_samples.spacing_to_euclidean_fn must be provided\"\n        existing_bins = torch.cat(\n            [\n                ray_samples.spacing_starts[..., 0],\n                ray_samples.spacing_ends[..., -1:, 0],\n            ],\n            dim=-1,\n        )\n\n        inds = torch.searchsorted(cdf, u, side=\"right\")\n        below = torch.clamp(inds - 1, 0, existing_bins.shape[-1] - 1)\n        above = torch.clamp(inds, 0, existing_bins.shape[-1] - 1)\n        cdf_g0 = torch.gather(cdf, -1, below)\n        bins_g0 = torch.gather(existing_bins, -1, below)\n        cdf_g1 = torch.gather(cdf, -1, above)\n        bins_g1 = torch.gather(existing_bins, -1, above)\n\n        t = torch.clip(torch.nan_to_num((u - cdf_g0) / (cdf_g1 - cdf_g0), 0), 0, 1)\n        bins = bins_g0 + t * (bins_g1 - bins_g0)\n\n        if self.include_original:\n            bins, _ = torch.sort(torch.cat([existing_bins, bins], -1), -1)\n\n        # Stop gradients\n        bins = bins.detach()\n\n        euclidean_bins = ray_samples.spacing_to_euclidean_fn(bins)\n\n        ray_samples = ray_bundle.get_ray_samples(\n            bin_starts=euclidean_bins[..., :-1, None],\n            bin_ends=euclidean_bins[..., 1:, None],\n            spacing_starts=bins[..., :-1, None],\n            spacing_ends=bins[..., 1:, None],\n            spacing_to_euclidean_fn=ray_samples.spacing_to_euclidean_fn,\n        )\n\n        return ray_samples\n\n\nclass DensityFn(Protocol):\n    \"\"\"\n    Function that evaluates density at a given point.\n    \"\"\"\n\n    def __call__(\n        self, positions: Float[Tensor, \"*batch 3\"], times: Optional[Float[Tensor, \"*batch 1\"]] = None\n    ) -> Float[Tensor, \"*batch 1\"]: ...\n\n\nclass VolumetricSampler(Sampler):\n    \"\"\"Sampler inspired by the one proposed in the Instant-NGP paper.\n    Generates samples along a ray by sampling the occupancy field.\n    Optionally removes occluded samples if the density_fn is provided.\n\n    Args:\n    occupancy_grid: Occupancy grid to sample from.\n    density_fn: Function that evaluates density at a given point.\n    scene_aabb: Axis-aligned bounding box of the scene, should be set to None if the scene is unbounded.\n    \"\"\"\n\n    def __init__(\n        self,\n        occupancy_grid: OccGridEstimator,\n        density_fn: Optional[DensityFn] = None,\n    ):\n        super().__init__()\n        assert occupancy_grid is not None\n        self.density_fn = density_fn\n        self.occupancy_grid = occupancy_grid\n\n    def get_sigma_fn(self, origins, directions, times=None) -> Optional[Callable]:\n        \"\"\"Returns a function that returns the density of a point.\n\n        Args:\n            origins: Origins of rays\n            directions: Directions of rays\n            times: Times at which rays are sampled\n        Returns:\n            Function that returns the density of a point or None if a density function is not provided.\n        \"\"\"\n\n        if self.density_fn is None or not self.training:\n            return None\n\n        density_fn = self.density_fn\n\n        def sigma_fn(t_starts, t_ends, ray_indices):\n            t_origins = origins[ray_indices]\n            t_dirs = directions[ray_indices]\n            positions = t_origins + t_dirs * (t_starts + t_ends)[:, None] / 2.0\n            if times is None:\n                return density_fn(positions).squeeze(-1)\n            return density_fn(positions, times[ray_indices]).squeeze(-1)\n\n        return sigma_fn\n\n    def generate_ray_samples(self) -> RaySamples:\n        raise RuntimeError(\n            \"The VolumetricSampler fuses sample generation and density check together. Please call forward() directly.\"\n        )\n\n    def forward(\n        self,\n        ray_bundle: RayBundle,\n        render_step_size: float,\n        near_plane: float = 0.0,\n        far_plane: Optional[float] = None,\n        alpha_thre: float = 0.01,\n        cone_angle: float = 0.0,\n    ) -> Tuple[RaySamples, Float[Tensor, \"total_samples \"]]:\n        \"\"\"Generate ray samples in a bounding box.\n\n        Args:\n            ray_bundle: Rays to generate samples for\n            render_step_size: Minimum step size to use for rendering\n            near_plane: Near plane for raymarching\n            far_plane: Far plane for raymarching\n            alpha_thre: Opacity threshold skipping samples.\n            cone_angle: Cone angle for raymarching, set to 0 for uniform marching.\n\n        Returns:\n            a tuple of (ray_samples, packed_info, ray_indices)\n            The ray_samples are packed, only storing the valid samples.\n            The ray_indices contains the indices of the rays that each sample belongs to.\n        \"\"\"\n\n        rays_o = ray_bundle.origins.contiguous()\n        rays_d = ray_bundle.directions.contiguous()\n        times = ray_bundle.times\n\n        if ray_bundle.nears is not None and ray_bundle.fars is not None:\n            t_min = ray_bundle.nears.contiguous().reshape(-1)\n            t_max = ray_bundle.fars.contiguous().reshape(-1)\n\n        else:\n            t_min = None\n            t_max = None\n\n        if far_plane is None:\n            far_plane = 1e10\n\n        if ray_bundle.camera_indices is not None:\n            camera_indices = ray_bundle.camera_indices.contiguous()\n        else:\n            camera_indices = None\n        ray_indices, starts, ends = self.occupancy_grid.sampling(\n            rays_o=rays_o,\n            rays_d=rays_d,\n            t_min=t_min,\n            t_max=t_max,\n            sigma_fn=self.get_sigma_fn(rays_o, rays_d, times),\n            render_step_size=render_step_size,\n            near_plane=near_plane,\n            far_plane=far_plane,\n            stratified=self.training,\n            cone_angle=cone_angle,\n            alpha_thre=alpha_thre,\n        )\n        num_samples = starts.shape[0]\n        if num_samples == 0:\n            # create a single fake sample and update packed_info accordingly\n            # this says the last ray in packed_info has 1 sample, which starts and ends at 1\n            ray_indices = torch.zeros((1,), dtype=torch.long, device=rays_o.device)\n            starts = torch.ones((1,), dtype=starts.dtype, device=rays_o.device)\n            ends = torch.ones((1,), dtype=ends.dtype, device=rays_o.device)\n\n        origins = rays_o[ray_indices]\n        dirs = rays_d[ray_indices]\n        if camera_indices is not None:\n            camera_indices = camera_indices[ray_indices]\n\n        ray_samples = RaySamples(\n            frustums=Frustums(\n                origins=origins,\n                directions=dirs,\n                starts=starts[..., None],\n                ends=ends[..., None],\n                pixel_area=ray_bundle[ray_indices].pixel_area,\n            ),\n            camera_indices=camera_indices,\n        )\n        if ray_bundle.times is not None:\n            ray_samples.times = ray_bundle.times[ray_indices]\n        return ray_samples, ray_indices\n\n\nclass ProposalNetworkSampler(Sampler):\n    \"\"\"Sampler that uses a proposal network to generate samples.\n\n    Args:\n        num_proposal_samples_per_ray: Number of samples to generate per ray for each proposal step.\n        num_nerf_samples_per_ray: Number of samples to generate per ray for the NERF model.\n        num_proposal_network_iterations: Number of proposal network iterations to run.\n        single_jitter: Use a same random jitter for all samples along a ray.\n        update_sched: A function that takes the iteration number of steps between updates.\n        initial_sampler: Sampler to use for the first iteration. Uses UniformLinDispPiecewise if not set.\n        pdf_sampler: PDFSampler to use after the first iteration. Uses PDFSampler if not set.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_proposal_samples_per_ray: Tuple[int, ...] = (64,),\n        num_nerf_samples_per_ray: int = 32,\n        num_proposal_network_iterations: int = 2,\n        single_jitter: bool = False,\n        update_sched: Callable = lambda x: 1,\n        initial_sampler: Optional[Sampler] = None,\n        pdf_sampler: Optional[PDFSampler] = None,\n    ) -> None:\n        super().__init__()\n        self.num_proposal_samples_per_ray = num_proposal_samples_per_ray\n        self.num_nerf_samples_per_ray = num_nerf_samples_per_ray\n        self.num_proposal_network_iterations = num_proposal_network_iterations\n        self.update_sched = update_sched\n        if self.num_proposal_network_iterations < 1:\n            raise ValueError(\"num_proposal_network_iterations must be >= 1\")\n\n        # samplers\n        if initial_sampler is None:\n            self.initial_sampler = UniformLinDispPiecewiseSampler(single_jitter=single_jitter)\n        else:\n            self.initial_sampler = initial_sampler\n        if pdf_sampler is None:\n            self.pdf_sampler = PDFSampler(include_original=False, single_jitter=single_jitter)\n        else:\n            self.pdf_sampler = pdf_sampler\n\n        self._anneal = 1.0\n        self._steps_since_update = 0\n        self._step = 0\n\n    def set_anneal(self, anneal: float) -> None:\n        \"\"\"Set the anneal value for the proposal network.\"\"\"\n        self._anneal = anneal\n\n    def step_cb(self, step):\n        \"\"\"Callback to register a training step has passed. This is used to keep track of the sampling schedule\"\"\"\n        self._step = step\n        self._steps_since_update += 1\n\n    def generate_ray_samples(\n        self,\n        ray_bundle: Optional[RayBundle] = None,\n        density_fns: Optional[List[Callable]] = None,\n    ) -> Tuple[RaySamples, List, List]:\n        assert ray_bundle is not None\n        assert density_fns is not None\n\n        weights_list = []\n        ray_samples_list = []\n\n        n = self.num_proposal_network_iterations\n        weights = None\n        ray_samples = None\n        updated = self._steps_since_update > self.update_sched(self._step) or self._step < 10\n        for i_level in range(n + 1):\n            is_prop = i_level < n\n            num_samples = self.num_proposal_samples_per_ray[i_level] if is_prop else self.num_nerf_samples_per_ray\n            if i_level == 0:\n                # Uniform sampling because we need to start with some samples\n                ray_samples = self.initial_sampler(ray_bundle, num_samples=num_samples)\n            else:\n                # PDF sampling based on the last samples and their weights\n                # Perform annealing to the weights. This will be a no-op if self._anneal is 1.0.\n                assert weights is not None\n                annealed_weights = torch.pow(weights, self._anneal)\n                ray_samples = self.pdf_sampler(ray_bundle, ray_samples, annealed_weights, num_samples=num_samples)\n            if is_prop:\n                if updated:\n                    # always update on the first step or the inf check in grad scaling crashes\n                    density = density_fns[i_level](ray_samples.frustums.get_positions())\n                else:\n                    with torch.no_grad():\n                        density = density_fns[i_level](ray_samples.frustums.get_positions())\n                weights = ray_samples.get_weights(density)\n                weights_list.append(weights)  # (num_rays, num_samples)\n                ray_samples_list.append(ray_samples)\n        if updated:\n            self._steps_since_update = 0\n\n        assert ray_samples is not None\n        return ray_samples, weights_list, ray_samples_list\n\n\nclass NeuSSampler(Sampler):\n    \"\"\"NeuS sampler that uses a sdf network to generate samples with fixed variance value in each iterations.\"\"\"\n\n    def __init__(\n        self,\n        num_samples: int = 64,\n        num_samples_importance: int = 64,\n        num_samples_outside: int = 32,\n        num_upsample_steps: int = 4,\n        base_variance: float = 64,\n        single_jitter: bool = True,\n    ) -> None:\n        super().__init__()\n        self.num_samples = num_samples\n        self.num_samples_importance = num_samples_importance\n        self.num_samples_outside = num_samples_outside\n        self.num_upsample_steps = num_upsample_steps\n        self.base_variance = base_variance\n        self.single_jitter = single_jitter\n\n        # samplers\n        self.uniform_sampler = UniformSampler(single_jitter=single_jitter)\n        self.pdf_sampler = PDFSampler(\n            include_original=False,\n            single_jitter=single_jitter,\n            histogram_padding=1e-5,\n        )\n        self.outside_sampler = LinearDisparitySampler()\n\n    def generate_ray_samples(\n        self,\n        ray_bundle: Optional[RayBundle] = None,\n        sdf_fn: Optional[Callable[[RaySamples], torch.Tensor]] = None,\n        ray_samples: Optional[RaySamples] = None,\n    ) -> Union[Tuple[RaySamples, torch.Tensor], RaySamples]:\n        assert ray_bundle is not None\n        assert sdf_fn is not None\n\n        # Start with uniform sampling\n        if ray_samples is None:\n            ray_samples = self.uniform_sampler(ray_bundle, num_samples=self.num_samples)\n        assert ray_samples is not None\n\n        total_iters = 0\n        sorted_index = None\n        sdf: Optional[torch.Tensor] = None\n        new_samples = ray_samples\n\n        base_variance = self.base_variance\n\n        while total_iters < self.num_upsample_steps:\n            with torch.no_grad():\n                new_sdf = sdf_fn(new_samples)\n\n            # merge sdf predictions\n            if sorted_index is not None:\n                assert sdf is not None\n                sdf_merge = torch.cat([sdf.squeeze(-1), new_sdf.squeeze(-1)], -1)\n                sdf = torch.gather(sdf_merge, 1, sorted_index).unsqueeze(-1)\n            else:\n                sdf = new_sdf\n\n            # compute with fix variances\n            alphas = self.rendering_sdf_with_fixed_inv_s(\n                ray_samples, sdf.reshape(ray_samples.shape), inv_s=base_variance * 2**total_iters\n            )\n\n            weights = ray_samples.get_weights_and_transmittance_from_alphas(alphas[..., None], weights_only=True)\n            weights = torch.cat((weights, torch.zeros_like(weights[:, :1])), dim=1)\n\n            new_samples = self.pdf_sampler(\n                ray_bundle,\n                ray_samples,\n                weights,\n                num_samples=self.num_samples_importance // self.num_upsample_steps,\n            )\n\n            ray_samples, sorted_index = self.merge_ray_samples(ray_bundle, ray_samples, new_samples)\n\n            total_iters += 1\n\n        return ray_samples\n\n    @staticmethod\n    def rendering_sdf_with_fixed_inv_s(\n        ray_samples: RaySamples, sdf: Float[Tensor, \"num_samples 1\"], inv_s: int\n    ) -> Float[Tensor, \"num_samples 1\"]:\n        \"\"\"\n        rendering given a fixed inv_s as NeuS\n\n        Args:\n            ray_samples: samples along ray\n            sdf: sdf values along ray\n            inv_s: fixed variance value\n        Returns:\n            alpha value\n        \"\"\"\n        batch_size = ray_samples.shape[0]\n        prev_sdf, next_sdf = sdf[:, :-1], sdf[:, 1:]\n        assert ray_samples.deltas is not None\n        deltas = ray_samples.deltas[:, :-1, 0]\n        mid_sdf = (prev_sdf + next_sdf) * 0.5\n        cos_val = (next_sdf - prev_sdf) / (deltas + 1e-5)\n\n        # ----------------------------------------------------------------------------------------------------------\n        # Use min value of [ cos, prev_cos ]\n        # Though it makes the sampling (not rendering) a little bit biased, this strategy can make the sampling more\n        # robust when meeting situations like below:\n        #\n        # SDF\n        # ^\n        # |\\          -----x----...\n        # | \\        /\n        # |  x      x\n        # |---\\----/-------------> 0 level\n        # |    \\  /\n        # |     \\/\n        # |\n        # ----------------------------------------------------------------------------------------------------------\n        prev_cos_val = torch.cat([torch.zeros([batch_size, 1], device=sdf.device), cos_val[:, :-1]], dim=-1)\n        cos_val = torch.stack([prev_cos_val, cos_val], dim=-1)\n        cos_val, _ = torch.min(cos_val, dim=-1, keepdim=False)\n        cos_val = cos_val.clip(-1e3, 0.0)\n\n        dist = deltas\n        prev_esti_sdf = mid_sdf - cos_val * dist * 0.5\n        next_esti_sdf = mid_sdf + cos_val * dist * 0.5\n        prev_cdf = torch.sigmoid(prev_esti_sdf * inv_s)\n        next_cdf = torch.sigmoid(next_esti_sdf * inv_s)\n        alpha = (prev_cdf - next_cdf + 1e-5) / (prev_cdf + 1e-5)\n\n        return alpha\n\n    @staticmethod\n    def merge_ray_samples(ray_bundle: RayBundle, ray_samples_1: RaySamples, ray_samples_2: RaySamples):\n        \"\"\"Merge two set of ray samples and return sorted index which can be used to merge sdf values\n        Args:\n            ray_samples_1 : ray_samples to merge\n            ray_samples_2 : ray_samples to merge\n        \"\"\"\n\n        assert ray_samples_1.spacing_starts is not None and ray_samples_2.spacing_starts is not None\n        assert ray_samples_1.spacing_ends is not None and ray_samples_2.spacing_ends is not None\n        assert ray_samples_1.spacing_to_euclidean_fn is not None\n        starts_1 = ray_samples_1.spacing_starts[..., 0]\n        starts_2 = ray_samples_2.spacing_starts[..., 0]\n\n        ends = torch.maximum(ray_samples_1.spacing_ends[..., -1:, 0], ray_samples_2.spacing_ends[..., -1:, 0])\n\n        bins, sorted_index = torch.sort(torch.cat([starts_1, starts_2], -1), -1)\n\n        bins = torch.cat([bins, ends], dim=-1)\n\n        # Stop gradients\n        bins = bins.detach()\n\n        euclidean_bins = ray_samples_1.spacing_to_euclidean_fn(bins)\n\n        ray_samples = ray_bundle.get_ray_samples(\n            bin_starts=euclidean_bins[..., :-1, None],\n            bin_ends=euclidean_bins[..., 1:, None],\n            spacing_starts=bins[..., :-1, None],\n            spacing_ends=bins[..., 1:, None],\n            spacing_to_euclidean_fn=ray_samples_1.spacing_to_euclidean_fn,\n        )\n\n        return ray_samples, sorted_index\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/renderers.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCollection of renderers\n\nExample:\n\n.. code-block:: python\n\n    field_outputs = field(ray_sampler)\n    weights = ray_sampler.get_weights(field_outputs[FieldHeadNames.DENSITY])\n\n    rgb_renderer = RGBRenderer()\n    rgb = rgb_renderer(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n\n\"\"\"\n\nimport contextlib\nimport math\nfrom typing import Generator, Literal, Optional, Tuple, Union\n\nimport nerfacc\nimport torch\nfrom jaxtyping import Float, Int\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RaySamples\nfrom nerfstudio.utils import colors\nfrom nerfstudio.utils.math import components_from_spherical_harmonics, safe_normalize\n\nBackgroundColor = Union[Literal[\"random\", \"last_sample\", \"black\", \"white\"], Float[Tensor, \"3\"], Float[Tensor, \"*bs 3\"]]\nBACKGROUND_COLOR_OVERRIDE: Optional[Float[Tensor, \"3\"]] = None\n\n\n@contextlib.contextmanager\ndef background_color_override_context(mode: Float[Tensor, \"3\"]) -> Generator[None, None, None]:\n    \"\"\"Context manager for setting background mode.\"\"\"\n    global BACKGROUND_COLOR_OVERRIDE\n    old_background_color = BACKGROUND_COLOR_OVERRIDE\n    try:\n        BACKGROUND_COLOR_OVERRIDE = mode\n        yield\n    finally:\n        BACKGROUND_COLOR_OVERRIDE = old_background_color\n\n\nclass RGBRenderer(nn.Module):\n    \"\"\"Standard volumetric rendering.\n\n    Args:\n        background_color: Background color as RGB. Uses random colors if None.\n    \"\"\"\n\n    def __init__(self, background_color: BackgroundColor = \"random\") -> None:\n        super().__init__()\n        self.background_color: BackgroundColor = background_color\n\n    @classmethod\n    def combine_rgb(\n        cls,\n        rgb: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        background_color: BackgroundColor = \"random\",\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Composite samples along ray and render color image.\n        If background color is random, no BG color is added - as if the background was black!\n\n        Args:\n            rgb: RGB for each sample\n            weights: Weights for each sample\n            background_color: Background color as RGB.\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs rgb values.\n        \"\"\"\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            if background_color == \"last_sample\":\n                raise NotImplementedError(\"Background color 'last_sample' not implemented for packed samples.\")\n            comp_rgb = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=rgb, ray_indices=ray_indices, n_rays=num_rays\n            )\n            accumulated_weight = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            comp_rgb = torch.sum(weights * rgb, dim=-2)\n            accumulated_weight = torch.sum(weights, dim=-2)\n        if BACKGROUND_COLOR_OVERRIDE is not None:\n            background_color = BACKGROUND_COLOR_OVERRIDE\n        if background_color == \"random\":\n            # If background color is random, the predicted color is returned without blending,\n            # as if the background color was black.\n            return comp_rgb\n        elif background_color == \"last_sample\":\n            # Note, this is only supported for non-packed samples.\n            background_color = rgb[..., -1, :]\n        background_color = cls.get_background_color(background_color, shape=comp_rgb.shape, device=comp_rgb.device)\n\n        assert isinstance(background_color, torch.Tensor)\n        comp_rgb = comp_rgb + background_color * (1.0 - accumulated_weight)\n        return comp_rgb\n\n    @classmethod\n    def get_background_color(\n        cls, background_color: BackgroundColor, shape: Tuple[int, ...], device: torch.device\n    ) -> Union[Float[Tensor, \"3\"], Float[Tensor, \"*bs 3\"]]:\n        \"\"\"Returns the RGB background color for a specified background color.\n        Note:\n            This function CANNOT be called for background_color being either \"last_sample\" or \"random\".\n\n        Args:\n            background_color: The background color specification. If a string is provided, it must be a valid color name.\n            shape: Shape of the output tensor.\n            device: Device on which to create the tensor.\n\n        Returns:\n            Background color as RGB.\n        \"\"\"\n        assert background_color not in {\"last_sample\", \"random\"}\n        assert shape[-1] == 3, \"Background color must be RGB.\"\n        if BACKGROUND_COLOR_OVERRIDE is not None:\n            background_color = BACKGROUND_COLOR_OVERRIDE\n        if isinstance(background_color, str) and background_color in colors.COLORS_DICT:\n            background_color = colors.COLORS_DICT[background_color]\n        assert isinstance(background_color, Tensor)\n\n        # Ensure correct shape\n        return background_color.expand(shape).to(device)\n\n    def blend_background(\n        self,\n        image: Tensor,\n        background_color: Optional[BackgroundColor] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Blends the background color into the image if image is RGBA.\n        Otherwise no blending is performed (we assume opacity of 1).\n\n        Args:\n            image: RGB/RGBA per pixel.\n            opacity: Alpha opacity per pixel.\n            background_color: Background color.\n\n        Returns:\n            Blended RGB.\n        \"\"\"\n        if image.size(-1) < 4:\n            return image\n\n        rgb, opacity = image[..., :3], image[..., 3:]\n        if background_color is None:\n            background_color = self.background_color\n            if background_color in {\"last_sample\", \"random\"}:\n                background_color = \"black\"\n        background_color = self.get_background_color(background_color, shape=rgb.shape, device=rgb.device)\n        assert isinstance(background_color, torch.Tensor)\n        return rgb * opacity + background_color.to(rgb.device) * (1 - opacity)\n\n    def blend_background_for_loss_computation(\n        self,\n        pred_image: Tensor,\n        pred_accumulation: Tensor,\n        gt_image: Tensor,\n    ) -> Tuple[Tensor, Tensor]:\n        \"\"\"Blends a background color into the ground truth and predicted image for\n        loss computation.\n\n        Args:\n            gt_image: The ground truth image.\n            pred_image: The predicted RGB values (without background blending).\n            pred_accumulation: The predicted opacity/ accumulation.\n        Returns:\n            A tuple of the predicted and ground truth RGB values.\n        \"\"\"\n        background_color = self.background_color\n        if background_color == \"last_sample\":\n            background_color = \"black\"  # No background blending for GT\n        elif background_color == \"random\":\n            background_color = torch.rand_like(pred_image)\n            pred_image = pred_image + background_color * (1.0 - pred_accumulation)\n        gt_image = self.blend_background(gt_image, background_color=background_color)\n        return pred_image, gt_image\n\n    def forward(\n        self,\n        rgb: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n        background_color: Optional[BackgroundColor] = None,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Composite samples along ray and render color image\n\n        Args:\n            rgb: RGB for each sample\n            weights: Weights for each sample\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n            background_color: The background color to use for rendering.\n\n        Returns:\n            Outputs of rgb values.\n        \"\"\"\n\n        if background_color is None:\n            background_color = self.background_color\n\n        if not self.training:\n            rgb = torch.nan_to_num(rgb)\n        rgb = self.combine_rgb(\n            rgb, weights, background_color=background_color, ray_indices=ray_indices, num_rays=num_rays\n        )\n        if not self.training:\n            torch.clamp_(rgb, min=0.0, max=1.0)\n        return rgb\n\n\nclass SHRenderer(nn.Module):\n    \"\"\"Render RGB value from spherical harmonics.\n\n    Args:\n        background_color: Background color as RGB. Uses random colors if None\n        activation: Output activation.\n    \"\"\"\n\n    def __init__(\n        self,\n        background_color: BackgroundColor = \"random\",\n        activation: Optional[nn.Module] = nn.Sigmoid(),\n    ) -> None:\n        super().__init__()\n        self.background_color: BackgroundColor = background_color\n        self.activation = activation\n\n    def forward(\n        self,\n        sh: Float[Tensor, \"*batch num_samples coeffs\"],\n        directions: Float[Tensor, \"*batch num_samples 3\"],\n        weights: Float[Tensor, \"*batch num_samples 1\"],\n    ) -> Float[Tensor, \"*batch 3\"]:\n        \"\"\"Composite samples along ray and render color image\n\n        Args:\n            sh: Spherical harmonics coefficients for each sample\n            directions: Sample direction\n            weights: Weights for each sample\n\n        Returns:\n            Outputs of rgb values.\n        \"\"\"\n\n        sh = sh.view(*sh.shape[:-1], 3, sh.shape[-1] // 3)\n\n        levels = int(math.sqrt(sh.shape[-1]))\n        components = components_from_spherical_harmonics(levels=levels, directions=directions)\n\n        rgb = sh * components[..., None, :]  # [..., num_samples, 3, sh_components]\n        rgb = torch.sum(rgb, dim=-1)  # [..., num_samples, 3]\n\n        if self.activation is not None:\n            rgb = self.activation(rgb)\n\n        if not self.training:\n            rgb = torch.nan_to_num(rgb)\n        rgb = RGBRenderer.combine_rgb(rgb, weights, background_color=self.background_color)\n        if not self.training:\n            torch.clamp_(rgb, min=0.0, max=1.0)\n\n        return rgb\n\n\nclass AccumulationRenderer(nn.Module):\n    \"\"\"Accumulated value along a ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs 1\"]:\n        \"\"\"Composite samples along ray and calculate accumulation.\n\n        Args:\n            weights: Weights for each sample\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs of accumulated values.\n        \"\"\"\n\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            accumulation = nerfacc.accumulate_along_rays(\n                weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            accumulation = torch.sum(weights, dim=-2)\n        return accumulation\n\n\nclass DepthRenderer(nn.Module):\n    \"\"\"Calculate depth along ray.\n\n    Depth Method:\n        - median: Depth is set to the distance where the accumulated weight reaches 0.5.\n        - expected: Expected depth along ray. Same procedure as rendering rgb, but with depth.\n\n    Args:\n        method: Depth calculation method.\n    \"\"\"\n\n    def __init__(self, method: Literal[\"median\", \"expected\"] = \"median\") -> None:\n        super().__init__()\n        self.method = method\n\n    def forward(\n        self,\n        weights: Float[Tensor, \"*batch num_samples 1\"],\n        ray_samples: RaySamples,\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*batch 1\"]:\n        \"\"\"Composite samples along ray and calculate depths.\n\n        Args:\n            weights: Weights for each sample.\n            ray_samples: Set of ray samples.\n            ray_indices: Ray index for each sample, used when samples are packed.\n            num_rays: Number of rays, used when samples are packed.\n\n        Returns:\n            Outputs of depth values.\n        \"\"\"\n\n        if self.method == \"median\":\n            steps = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n\n            if ray_indices is not None and num_rays is not None:\n                raise NotImplementedError(\"Median depth calculation is not implemented for packed samples.\")\n            cumulative_weights = torch.cumsum(weights[..., 0], dim=-1)  # [..., num_samples]\n            split = torch.ones((*weights.shape[:-2], 1), device=weights.device) * 0.5  # [..., 1]\n            median_index = torch.searchsorted(cumulative_weights, split, side=\"left\")  # [..., 1]\n            median_index = torch.clamp(median_index, 0, steps.shape[-2] - 1)  # [..., 1]\n            median_depth = torch.gather(steps[..., 0], dim=-1, index=median_index)  # [..., 1]\n            return median_depth\n        if self.method == \"expected\":\n            eps = 1e-10\n            steps = (ray_samples.frustums.starts + ray_samples.frustums.ends) / 2\n\n            if ray_indices is not None and num_rays is not None:\n                # Necessary for packed samples from volumetric ray sampler\n                depth = nerfacc.accumulate_along_rays(\n                    weights[..., 0], values=steps, ray_indices=ray_indices, n_rays=num_rays\n                )\n                accumulation = nerfacc.accumulate_along_rays(\n                    weights[..., 0], values=None, ray_indices=ray_indices, n_rays=num_rays\n                )\n                depth = depth / (accumulation + eps)\n            else:\n                depth = torch.sum(weights * steps, dim=-2) / (torch.sum(weights, -2) + eps)\n\n            depth = torch.clip(depth, steps.min(), steps.max())\n\n            return depth\n\n        raise NotImplementedError(f\"Method {self.method} not implemented\")\n\n\nclass UncertaintyRenderer(nn.Module):\n    \"\"\"Calculate uncertainty along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls, betas: Float[Tensor, \"*bs num_samples 1\"], weights: Float[Tensor, \"*bs num_samples 1\"]\n    ) -> Float[Tensor, \"*bs 1\"]:\n        \"\"\"Calculate uncertainty along the ray.\n\n        Args:\n            betas: Uncertainty betas for each sample.\n            weights: Weights of each sample.\n\n        Returns:\n            Rendering of uncertainty.\n        \"\"\"\n        uncertainty = torch.sum(weights * betas, dim=-2)\n        return uncertainty\n\n\nclass SemanticRenderer(nn.Module):\n    \"\"\"Calculate semantics along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        semantics: Float[Tensor, \"*bs num_samples num_classes\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        ray_indices: Optional[Int[Tensor, \"num_samples\"]] = None,\n        num_rays: Optional[int] = None,\n    ) -> Float[Tensor, \"*bs num_classes\"]:\n        \"\"\"Calculate semantics along the ray.\"\"\"\n        if ray_indices is not None and num_rays is not None:\n            # Necessary for packed samples from volumetric ray sampler\n            return nerfacc.accumulate_along_rays(\n                weights[..., 0], values=semantics, ray_indices=ray_indices, n_rays=num_rays\n            )\n        else:\n            return torch.sum(weights * semantics, dim=-2)\n\n\nclass NormalsRenderer(nn.Module):\n    \"\"\"Calculate normals along the ray.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        normals: Float[Tensor, \"*bs num_samples 3\"],\n        weights: Float[Tensor, \"*bs num_samples 1\"],\n        normalize: bool = True,\n    ) -> Float[Tensor, \"*bs 3\"]:\n        \"\"\"Calculate normals along the ray.\n\n        Args:\n            normals: Normals for each sample.\n            weights: Weights of each sample.\n            normalize: Normalize normals.\n        \"\"\"\n        n = torch.sum(weights * normals, dim=-2)\n        if normalize:\n            n = safe_normalize(n)\n        return n\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/scene_colliders.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nScene Colliders\n\"\"\"\n\nfrom __future__ import annotations\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.scene_box import SceneBox\n\n\nclass SceneCollider(nn.Module):\n    \"\"\"Module for setting near and far values for rays.\"\"\"\n\n    def __init__(self, **kwargs) -> None:\n        self.kwargs = kwargs\n        super().__init__()\n\n    def set_nears_and_fars(self, ray_bundle: RayBundle) -> RayBundle:\n        \"\"\"To be implemented.\"\"\"\n        raise NotImplementedError\n\n    def forward(self, ray_bundle: RayBundle) -> RayBundle:\n        \"\"\"Sets the nears and fars if they are not set already.\"\"\"\n        if ray_bundle.nears is not None and ray_bundle.fars is not None:\n            return ray_bundle\n        return self.set_nears_and_fars(ray_bundle)\n\n\nclass AABBBoxCollider(SceneCollider):\n    \"\"\"Module for colliding rays with the scene box to compute near and far values.\n\n    Args:\n        scene_box: scene box to apply to dataset\n    \"\"\"\n\n    def __init__(self, scene_box: SceneBox, near_plane: float = 0.0, **kwargs) -> None:\n        super().__init__(**kwargs)\n        self.scene_box = scene_box\n        self.near_plane = near_plane\n\n    def _intersect_with_aabb(\n        self, rays_o: Float[Tensor, \"num_rays 3\"], rays_d: Float[Tensor, \"num_rays 3\"], aabb: Float[Tensor, \"2 3\"]\n    ):\n        \"\"\"Returns collection of valid rays within a specified near/far bounding box along with a mask\n        specifying which rays are valid\n\n        Args:\n            rays_o: (num_rays, 3) ray origins\n            rays_d: (num_rays, 3) ray directions\n            aabb: (2, 3) This is [min point (x,y,z), max point (x,y,z)]\n        \"\"\"\n        # avoid divide by zero\n        dir_fraction = 1.0 / (rays_d + 1e-6)\n\n        # x\n        t1 = (aabb[0, 0] - rays_o[:, 0:1]) * dir_fraction[:, 0:1]\n        t2 = (aabb[1, 0] - rays_o[:, 0:1]) * dir_fraction[:, 0:1]\n        # y\n        t3 = (aabb[0, 1] - rays_o[:, 1:2]) * dir_fraction[:, 1:2]\n        t4 = (aabb[1, 1] - rays_o[:, 1:2]) * dir_fraction[:, 1:2]\n        # z\n        t5 = (aabb[0, 2] - rays_o[:, 2:3]) * dir_fraction[:, 2:3]\n        t6 = (aabb[1, 2] - rays_o[:, 2:3]) * dir_fraction[:, 2:3]\n\n        nears = torch.max(\n            torch.cat([torch.minimum(t1, t2), torch.minimum(t3, t4), torch.minimum(t5, t6)], dim=1), dim=1\n        ).values\n        fars = torch.min(\n            torch.cat([torch.maximum(t1, t2), torch.maximum(t3, t4), torch.maximum(t5, t6)], dim=1), dim=1\n        ).values\n\n        # clamp to near plane\n        near_plane = self.near_plane if self.training else 0\n        nears = torch.clamp(nears, min=near_plane)\n        fars = torch.maximum(fars, nears + 1e-6)\n\n        return nears, fars\n\n    def set_nears_and_fars(self, ray_bundle: RayBundle) -> RayBundle:\n        \"\"\"Intersects the rays with the scene box and updates the near and far values.\n        Populates nears and fars fields and returns the ray_bundle.\n\n        Args:\n            ray_bundle: specified ray bundle to operate on\n        \"\"\"\n        aabb = self.scene_box.aabb\n        nears, fars = self._intersect_with_aabb(ray_bundle.origins, ray_bundle.directions, aabb)\n        ray_bundle.nears = nears[..., None]\n        ray_bundle.fars = fars[..., None]\n        return ray_bundle\n\n\ndef _intersect_with_sphere(\n    rays_o: torch.Tensor, rays_d: torch.Tensor, center: torch.Tensor, radius: float = 1.0, near_plane: float = 0.0\n):\n    a = (rays_d * rays_d).sum(dim=-1, keepdim=True)\n    b = 2 * (rays_o - center) * rays_d\n    b = b.sum(dim=-1, keepdim=True)\n    c = (rays_o - center) * (rays_o - center)\n    c = c.sum(dim=-1, keepdim=True) - radius**2\n\n    # clamp to near plane\n    nears = (-b - torch.sqrt(torch.square(b) - 4 * a * c)) / (2 * a)\n    fars = (-b + torch.sqrt(torch.square(b) - 4 * a * c)) / (2 * a)\n\n    nears = torch.clamp(nears, min=near_plane)\n    fars = torch.maximum(fars, nears + 1e-6)\n\n    nears = torch.nan_to_num(nears, nan=0.0)\n    fars = torch.nan_to_num(fars, nan=0.0)\n\n    return nears, fars\n\n\nclass SphereCollider(SceneCollider):\n    \"\"\"Module for colliding rays with the scene box to compute near and far values.\n\n    Args:\n        center: center of sphere to intersect [3]\n        radius: radius of sphere to intersect\n        near_plane: near plane to clamp to\n    \"\"\"\n\n    def __init__(self, center: torch.Tensor, radius: float, near_plane: float = 0.0, **kwargs) -> None:\n        super().__init__(**kwargs)\n        self.center = center\n        self.radius = radius\n        self.near_plane = near_plane\n\n    def set_nears_and_fars(self, ray_bundle: RayBundle) -> RayBundle:\n        \"\"\"Intersects the rays with the scene box and updates the near and far values.\n        Populates nears and fars fields and returns the ray_bundle.\n\n        Args:\n            ray_bundle: specified ray bundle to operate on\n        \"\"\"\n        self.center = self.center.to(ray_bundle.origins.device)\n        near_plane = self.near_plane if self.training else 0\n        nears, fars = _intersect_with_sphere(\n            rays_o=ray_bundle.origins,\n            rays_d=ray_bundle.directions,\n            center=self.center,\n            radius=self.radius,\n            near_plane=near_plane,\n        )\n        ray_bundle.nears = nears\n        ray_bundle.fars = fars\n        return ray_bundle\n\n\nclass NearFarCollider(SceneCollider):\n    \"\"\"Sets the nears and fars with fixed values.\n\n    Args:\n        near_plane: distance to near plane\n        far_plane: distance to far plane\n        reset_near_plane: whether to reset the near plane to 0.0 during inference. The near plane can be\n            helpful for reducing floaters during training, but it can cause clipping artifacts during\n            inference when an evaluation or viewer camera moves closer to the object.\n    \"\"\"\n\n    def __init__(self, near_plane: float, far_plane: float, reset_near_plane: bool = True, **kwargs) -> None:\n        self.near_plane = near_plane\n        self.far_plane = far_plane\n        self.reset_near_plane = reset_near_plane\n        super().__init__(**kwargs)\n\n    def set_nears_and_fars(self, ray_bundle: RayBundle) -> RayBundle:\n        ones = torch.ones_like(ray_bundle.origins[..., 0:1])\n        near_plane = self.near_plane if (self.training or not self.reset_near_plane) else 0\n        ray_bundle.nears = ones * near_plane\n        ray_bundle.fars = ones * self.far_plane\n        return ray_bundle\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/model_components/shaders.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Shaders for rendering.\"\"\"\n\nfrom typing import Optional\n\nfrom jaxtyping import Float\nfrom torch import Tensor, nn\n\n\nclass LambertianShader(nn.Module):\n    \"\"\"Calculate Lambertian shading.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        rgb: Float[Tensor, \"*bs 3\"],\n        normals: Float[Tensor, \"*bs 3\"],\n        light_direction: Float[Tensor, \"*bs 3\"],\n        shading_weight: float = 1.0,\n        detach_normals=True,\n    ):\n        \"\"\"Calculate Lambertian shading.\n\n        Args:\n            rgb: Accumulated rgb along a ray.\n            normals: Accumulated normals along a ray.\n            light_direction: Direction of light source.\n            shading_weight: Lambertian shading (1.0) vs. ambient lighting (0.0) ratio\n            detach_normals: Detach normals from the computation graph when computing shading.\n\n        Returns:\n            Textureless Lambertian shading, Lambertian shading\n        \"\"\"\n        if detach_normals:\n            normals = normals.detach()\n\n        lambertian = (1 - shading_weight) + shading_weight * (normals @ light_direction).clamp(min=0)\n        shaded = lambertian.unsqueeze(-1).repeat(1, 3)\n        shaded_albedo = rgb * lambertian.unsqueeze(-1)\n\n        return shaded, shaded_albedo\n\n\nclass NormalsShader(nn.Module):\n    \"\"\"Calculate shading for normals.\"\"\"\n\n    @classmethod\n    def forward(\n        cls,\n        normals: Float[Tensor, \"*bs 3\"],\n        weights: Optional[Float[Tensor, \"*bs 1\"]] = None,\n    ):\n        \"\"\"Applies a rainbow colormap to the normals.\n\n        Args:\n            normals: Normalized 3D vectors.\n            weights: Optional weights to scale to the normal colors. (Can be used for masking)\n\n        Returns:\n            Colored normals\n        \"\"\"\n        normals = (normals + 1) / 2\n        if weights is not None:\n            normals = normals * weights\n        return normals\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/base_model.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nBase Model implementation which takes in RayBundles or Cameras\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom abc import abstractmethod\nfrom collections import defaultdict\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional, Tuple, Type, Union\n\nimport torch\nfrom torch import nn\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.data.scene_box import OrientedBox, SceneBox\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes\nfrom nerfstudio.model_components.scene_colliders import NearFarCollider\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n# Model related configs\n@dataclass\nclass ModelConfig(InstantiateConfig):\n    \"\"\"Configuration for model instantiation\"\"\"\n\n    _target: Type = field(default_factory=lambda: Model)\n    \"\"\"target class to instantiate\"\"\"\n    # enable_collider: bool = True\n    enable_collider: bool = False\n    \"\"\"Whether to create a scene collider to filter rays.\"\"\"\n    collider_params: Optional[Dict[str, float]] = to_immutable_dict({\"near_plane\": 2.0, \"far_plane\": 6.0})\n    \"\"\"parameters to instantiate scene collider with\"\"\"\n    loss_coefficients: Dict[str, float] = to_immutable_dict({\"rgb_loss_coarse\": 1.0, \"rgb_loss_fine\": 1.0})\n    \"\"\"parameters to instantiate density field with\"\"\"\n    eval_num_rays_per_chunk: int = 4096\n    \"\"\"specifies number of rays per chunk during eval\"\"\"\n    prompt: Optional[str] = None\n    \"\"\"A prompt to be used in text to NeRF models\"\"\"\n\n\nclass Model(nn.Module):\n    \"\"\"Model class\n    Where everything (Fields, Optimizers, Samplers, Visualization, etc) is linked together. This should be\n    subclassed for custom NeRF model.\n\n    Args:\n        config: configuration for instantiating model\n        scene_box: dataset scene box\n    \"\"\"\n\n    config: ModelConfig\n\n    def __init__(\n        self,\n        config: ModelConfig,\n        scene_box: SceneBox,\n        num_train_data: int,\n        **kwargs,\n    ) -> None:\n        super().__init__()\n        self.config = config\n        self.scene_box = scene_box\n        self.render_aabb: Optional[SceneBox] = None  # the box that we want to render - should be a subset of scene_box\n        self.num_train_data = num_train_data\n        self.kwargs = kwargs\n        self.collider = None\n\n        self.populate_modules()  # populate the modules\n        self.callbacks = None\n        # to keep track of which device the nn.Module is on\n        self.device_indicator_param = nn.Parameter(torch.empty(0))\n\n    @property\n    def device(self):\n        \"\"\"Returns the device that the model is on.\"\"\"\n        return self.device_indicator_param.device\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        \"\"\"Returns a list of callbacks that run functions at the specified training iterations.\"\"\"\n        return []\n\n    def populate_modules(self):\n        \"\"\"Set the necessary modules to get the network working.\"\"\"\n        # default instantiates optional modules that are common among many networks\n        # NOTE: call `super().populate_modules()` in subclasses\n\n        if self.config.enable_collider:\n            assert self.config.collider_params is not None\n            self.collider = NearFarCollider(\n                near_plane=self.config.collider_params[\"near_plane\"], far_plane=self.config.collider_params[\"far_plane\"]\n            )\n\n    @abstractmethod\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Obtain the parameter groups for the optimizers\n\n        Returns:\n            Mapping of different parameter groups\n        \"\"\"\n\n    @abstractmethod\n    def get_outputs(self, ray_bundle: Union[RayBundle, Cameras]) -> Dict[str, Union[torch.Tensor, List]]:\n        \"\"\"Takes in a Ray Bundle and returns a dictionary of outputs.\n\n        Args:\n            ray_bundle: Input bundle of rays. This raybundle should have all the\n            needed information to compute the outputs.\n\n        Returns:\n            Outputs of model. (ie. rendered colors)\n        \"\"\"\n\n    def forward(self, ray_bundle: Union[RayBundle, Cameras]) -> Dict[str, Union[torch.Tensor, List]]:\n        \"\"\"Run forward starting with a ray bundle. This outputs different things depending on the configuration\n        of the model and whether or not the batch is provided (whether or not we are training basically)\n\n        Args:\n            ray_bundle: containing all the information needed to render that ray latents included\n        \"\"\"\n\n        if self.collider is not None:\n            ray_bundle = self.collider(ray_bundle)\n\n        return self.get_outputs(ray_bundle)\n\n    def get_metrics_dict(self, outputs, batch) -> Dict[str, torch.Tensor]:\n        \"\"\"Compute and returns metrics.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n        \"\"\"\n\n        return {}\n\n    @abstractmethod\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        \"\"\"Computes and returns the losses dict.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n            metrics_dict: dictionary of metrics, some of which we can use for loss\n        \"\"\"\n\n    @torch.no_grad()\n    def get_outputs_for_camera(self, camera: Cameras, obb_box: Optional[OrientedBox] = None) -> Dict[str, torch.Tensor]:\n        \"\"\"Takes in a camera, generates the raybundle, and computes the output of the model.\n        Assumes a ray-based model.\n\n        Args:\n            camera: generates raybundle\n        \"\"\"\n        return self.get_outputs_for_camera_ray_bundle(\n            camera.generate_rays(camera_indices=0, keep_shape=True, obb_box=obb_box)\n        )\n\n    @torch.no_grad()\n    def get_outputs_for_camera_ray_bundle(self, camera_ray_bundle: RayBundle) -> Dict[str, torch.Tensor]:\n        \"\"\"Takes in camera parameters and computes the output of the model.\n\n        Args:\n            camera_ray_bundle: ray bundle to calculate outputs over\n        \"\"\"\n        input_device = camera_ray_bundle.directions.device\n        num_rays_per_chunk = self.config.eval_num_rays_per_chunk\n        image_height, image_width = camera_ray_bundle.origins.shape[:2]\n        num_rays = len(camera_ray_bundle)\n        outputs_lists = defaultdict(list)\n        for i in range(0, num_rays, num_rays_per_chunk):\n            start_idx = i\n            end_idx = i + num_rays_per_chunk\n            ray_bundle = camera_ray_bundle.get_row_major_sliced_ray_bundle(start_idx, end_idx)\n            # move the chunk inputs to the model device\n            ray_bundle = ray_bundle.to(self.device)\n            outputs = self.forward(ray_bundle=ray_bundle)\n            for output_name, output in outputs.items():  # type: ignore\n                if not isinstance(output, torch.Tensor):\n                    # TODO: handle lists of tensors as well\n                    continue\n                # move the chunk outputs from the model device back to the device of the inputs.\n                outputs_lists[output_name].append(output.to(input_device))\n        outputs = {}\n        for output_name, outputs_list in outputs_lists.items():\n            outputs[output_name] = torch.cat(outputs_list).view(image_height, image_width, -1)  # type: ignore\n        return outputs\n\n    def get_rgba_image(self, outputs: Dict[str, torch.Tensor], output_name: str = \"rgb\") -> torch.Tensor:\n        \"\"\"Returns the RGBA image from the outputs of the model.\n\n        Args:\n            outputs: Outputs of the model.\n\n        Returns:\n            RGBA image.\n        \"\"\"\n        accumulation_name = output_name.replace(\"rgb\", \"accumulation\")\n        if accumulation_name not in outputs:\n            raise NotImplementedError(f\"get_rgba_image is not implemented for model {self.__class__.__name__}\")\n        rgb = outputs[output_name]\n        if self.renderer_rgb.background_color == \"random\":  # type: ignore\n            acc = outputs[accumulation_name]\n            if acc.dim() < rgb.dim():\n                acc = acc.unsqueeze(-1)\n            return torch.cat((rgb / acc.clamp(min=1e-10), acc), dim=-1)\n        return torch.cat((rgb, torch.ones_like(rgb[..., :1])), dim=-1)\n\n    @abstractmethod\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        \"\"\"Writes the test image outputs.\n        TODO: This shouldn't return a loss\n\n        Args:\n            image_idx: Index of the image.\n            step: Current step.\n            batch: Batch of data.\n            outputs: Outputs of the model.\n\n        Returns:\n            A dictionary of metrics.\n        \"\"\"\n\n    def load_model(self, loaded_state: Dict[str, Any]) -> None:\n        \"\"\"Load the checkpoint from the given path\n\n        Args:\n            loaded_state: dictionary of pre-trained model states\n        \"\"\"\n        state = {key.replace(\"module.\", \"\"): value for key, value in loaded_state[\"model\"].items()}\n        self.load_state_dict(state)  # type: ignore\n\n    def update_to_step(self, step: int) -> None:\n        \"\"\"Called when loading a model from a checkpoint. Sets any model parameters that change over\n        training to the correct value, based on the training step of the checkpoint.\n\n        Args:\n            step: training step of the loaded checkpoint\n        \"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/base_surface_model.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of Base surface model.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom abc import abstractmethod\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Tuple, Type, cast\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.field_components.encodings import NeRFEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SceneContraction\nfrom nerfstudio.fields.nerfacto_field import NerfactoField\nfrom nerfstudio.fields.sdf_field import SDFFieldConfig\nfrom nerfstudio.fields.vanilla_nerf_field import NeRFField\nfrom nerfstudio.model_components.losses import L1Loss, MSELoss, ScaleAndShiftInvariantLoss, monosdf_normal_loss\nfrom nerfstudio.model_components.ray_samplers import LinearDisparitySampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer, SemanticRenderer\nfrom nerfstudio.model_components.scene_colliders import AABBBoxCollider, NearFarCollider\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps\nfrom nerfstudio.utils.colors import get_color\nfrom nerfstudio.utils.math import normalized_depth_scale_and_shift\n\n\n@dataclass\nclass SurfaceModelConfig(ModelConfig):\n    \"\"\"Surface Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: SurfaceModel)\n    near_plane: float = 0.05\n    \"\"\"How far along the ray to start sampling.\"\"\"\n    far_plane: float = 4.0\n    \"\"\"How far along the ray to stop sampling.\"\"\"\n    far_plane_bg: float = 1000.0\n    \"\"\"How far along the ray to stop sampling of the background model.\"\"\"\n    background_color: Literal[\"random\", \"last_sample\", \"white\", \"black\"] = \"black\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n    use_average_appearance_embedding: bool = False\n    \"\"\"Whether to use average appearance embedding or zeros for inference.\"\"\"\n    eikonal_loss_mult: float = 0.1\n    \"\"\"Monocular normal consistency loss multiplier.\"\"\"\n    fg_mask_loss_mult: float = 0.01\n    \"\"\"Foreground mask loss multiplier.\"\"\"\n    mono_normal_loss_mult: float = 0.0\n    \"\"\"Monocular normal consistency loss multiplier.\"\"\"\n    mono_depth_loss_mult: float = 0.0\n    \"\"\"Monocular depth consistency loss multiplier.\"\"\"\n    sdf_field: SDFFieldConfig = field(default_factory=SDFFieldConfig)\n    \"\"\"Config for SDF Field\"\"\"\n    background_model: Literal[\"grid\", \"mlp\", \"none\"] = \"mlp\"\n    \"\"\"background models\"\"\"\n    num_samples_outside: int = 32\n    \"\"\"Number of samples outside the bounding sphere for background\"\"\"\n    periodic_tvl_mult: float = 0.0\n    \"\"\"Total variational loss multiplier\"\"\"\n    overwrite_near_far_plane: bool = False\n    \"\"\"whether to use near and far collider from command line\"\"\"\n\n\nclass SurfaceModel(Model):\n    \"\"\"Base surface model\n\n    Args:\n        config: Base surface model configuration to instantiate model\n    \"\"\"\n\n    config: SurfaceModelConfig\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        self.scene_contraction = SceneContraction(order=float(\"inf\"))\n\n        # Can we also use contraction for sdf?\n        # Fields\n        self.field = self.config.sdf_field.setup(\n            aabb=self.scene_box.aabb,\n            spatial_distortion=self.scene_contraction,\n            num_images=self.num_train_data,\n            use_average_appearance_embedding=self.config.use_average_appearance_embedding,\n        )\n\n        # Collider\n        self.collider = AABBBoxCollider(self.scene_box, near_plane=0.05)\n\n        # command line near and far has highest priority\n        if self.config.overwrite_near_far_plane:\n            self.collider = NearFarCollider(near_plane=self.config.near_plane, far_plane=self.config.far_plane)\n\n        # background model\n        if self.config.background_model == \"grid\":\n            self.field_background = NerfactoField(\n                self.scene_box.aabb,\n                spatial_distortion=self.scene_contraction,\n                num_images=self.num_train_data,\n                use_average_appearance_embedding=self.config.use_average_appearance_embedding,\n            )\n        elif self.config.background_model == \"mlp\":\n            position_encoding = NeRFEncoding(\n                in_dim=3, num_frequencies=10, min_freq_exp=0.0, max_freq_exp=9.0, include_input=True\n            )\n            direction_encoding = NeRFEncoding(\n                in_dim=3, num_frequencies=4, min_freq_exp=0.0, max_freq_exp=3.0, include_input=True\n            )\n\n            self.field_background = NeRFField(\n                position_encoding=position_encoding,\n                direction_encoding=direction_encoding,\n                spatial_distortion=self.scene_contraction,\n            )\n        else:\n            # dummy background model\n            self.field_background = Parameter(torch.ones(1), requires_grad=False)\n\n        self.sampler_bg = LinearDisparitySampler(num_samples=self.config.num_samples_outside)\n\n        # renderers\n        background_color = (\n            get_color(self.config.background_color)\n            if self.config.background_color in set([\"white\", \"black\"])\n            else self.config.background_color\n        )\n        self.renderer_rgb = RGBRenderer(background_color=background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer(method=\"expected\")\n        self.renderer_normal = SemanticRenderer()\n\n        # losses\n        self.rgb_loss = L1Loss()\n        self.eikonal_loss = MSELoss()\n        self.depth_loss = ScaleAndShiftInvariantLoss(alpha=0.5, scales=1)\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity()\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        param_groups[\"fields\"] = list(self.field.parameters())\n        param_groups[\"field_background\"] = (\n            [self.field_background]\n            if isinstance(self.field_background, Parameter)\n            else list(self.field_background.parameters())\n        )\n        return param_groups\n\n    @abstractmethod\n    def sample_and_forward_field(self, ray_bundle: RayBundle) -> Dict[str, Any]:\n        \"\"\"Takes in a Ray Bundle and returns a dictionary of samples and field output.\n\n        Args:\n            ray_bundle: Input bundle of rays. This raybundle should have all the\n            needed information to compute the outputs.\n\n        Returns:\n            Outputs of model. (ie. rendered colors)\n        \"\"\"\n\n    def get_outputs(self, ray_bundle: RayBundle) -> Dict[str, torch.Tensor]:\n        \"\"\"Takes in a Ray Bundle and returns a dictionary of outputs.\n\n        Args:\n            ray_bundle: Input bundle of rays. This raybundle should have all the\n            needed information to compute the outputs.\n\n        Returns:\n            Outputs of model. (ie. rendered colors)\n        \"\"\"\n        assert (\n            ray_bundle.metadata is not None and \"directions_norm\" in ray_bundle.metadata\n        ), \"directions_norm is required in ray_bundle.metadata\"\n\n        samples_and_field_outputs = self.sample_and_forward_field(ray_bundle=ray_bundle)\n\n        # shortcuts\n        field_outputs: Dict[FieldHeadNames, torch.Tensor] = cast(\n            Dict[FieldHeadNames, torch.Tensor], samples_and_field_outputs[\"field_outputs\"]\n        )\n        ray_samples = samples_and_field_outputs[\"ray_samples\"]\n        weights = samples_and_field_outputs[\"weights\"]\n        bg_transmittance = samples_and_field_outputs[\"bg_transmittance\"]\n\n        rgb = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n        depth = self.renderer_depth(weights=weights, ray_samples=ray_samples)\n        # the rendered depth is point-to-point distance and we should convert to depth\n        depth = depth / ray_bundle.metadata[\"directions_norm\"]\n\n        normal = self.renderer_normal(semantics=field_outputs[FieldHeadNames.NORMALS], weights=weights)\n        accumulation = self.renderer_accumulation(weights=weights)\n\n        # background model\n        if self.config.background_model != \"none\":\n            assert isinstance(self.field_background, torch.nn.Module), \"field_background should be a module\"\n            assert ray_bundle.fars is not None, \"fars is required in ray_bundle\"\n            # sample inversely from far to 1000 and points and forward the bg model\n            ray_bundle.nears = ray_bundle.fars\n            assert ray_bundle.fars is not None\n            ray_bundle.fars = torch.ones_like(ray_bundle.fars) * self.config.far_plane_bg\n\n            ray_samples_bg = self.sampler_bg(ray_bundle)\n            # use the same background model for both density field and occupancy field\n            assert not isinstance(self.field_background, Parameter)\n            field_outputs_bg = self.field_background(ray_samples_bg)\n            weights_bg = ray_samples_bg.get_weights(field_outputs_bg[FieldHeadNames.DENSITY])\n\n            rgb_bg = self.renderer_rgb(rgb=field_outputs_bg[FieldHeadNames.RGB], weights=weights_bg)\n            depth_bg = self.renderer_depth(weights=weights_bg, ray_samples=ray_samples_bg)\n            accumulation_bg = self.renderer_accumulation(weights=weights_bg)\n\n            # merge background color to foregound color\n            rgb = rgb + bg_transmittance * rgb_bg\n\n            bg_outputs = {\n                \"bg_rgb\": rgb_bg,\n                \"bg_accumulation\": accumulation_bg,\n                \"bg_depth\": depth_bg,\n                \"bg_weights\": weights_bg,\n            }\n        else:\n            bg_outputs = {}\n\n        outputs = {\n            \"rgb\": rgb,\n            \"accumulation\": accumulation,\n            \"depth\": depth,\n            \"normal\": normal,\n            \"weights\": weights,\n            # used to scale z_vals for free space and sdf loss\n            \"directions_norm\": ray_bundle.metadata[\"directions_norm\"],\n        }\n        outputs.update(bg_outputs)\n\n        if self.training:\n            grad_points = field_outputs[FieldHeadNames.GRADIENT]\n            outputs.update({\"eik_grad\": grad_points})\n            outputs.update(samples_and_field_outputs)\n\n        if \"weights_list\" in samples_and_field_outputs:\n            weights_list = cast(List[torch.Tensor], samples_and_field_outputs[\"weights_list\"])\n            ray_samples_list = cast(List[torch.Tensor], samples_and_field_outputs[\"ray_samples_list\"])\n\n            for i in range(len(weights_list) - 1):\n                outputs[f\"prop_depth_{i}\"] = self.renderer_depth(\n                    weights=weights_list[i], ray_samples=ray_samples_list[i]\n                )\n        # this is used only in viewer\n        outputs[\"normal_vis\"] = (outputs[\"normal\"] + 1.0) / 2.0\n        return outputs\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        \"\"\"Computes and returns the losses dict.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n            metrics_dict: dictionary of metrics, some of which we can use for loss\n        \"\"\"\n        loss_dict = {}\n        image = batch[\"image\"].to(self.device)\n        pred_image, image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb\"],\n            pred_accumulation=outputs[\"accumulation\"],\n            gt_image=image,\n        )\n        loss_dict[\"rgb_loss\"] = self.rgb_loss(image, pred_image)\n        if self.training:\n            # eikonal loss\n            grad_theta = outputs[\"eik_grad\"]\n            loss_dict[\"eikonal_loss\"] = ((grad_theta.norm(2, dim=-1) - 1) ** 2).mean() * self.config.eikonal_loss_mult\n\n            # foreground mask loss\n            if \"fg_mask\" in batch and self.config.fg_mask_loss_mult > 0.0:\n                fg_label = batch[\"fg_mask\"].float().to(self.device)\n                weights_sum = outputs[\"weights\"].sum(dim=1).clip(1e-3, 1.0 - 1e-3)\n                loss_dict[\"fg_mask_loss\"] = (\n                    F.binary_cross_entropy(weights_sum, fg_label) * self.config.fg_mask_loss_mult\n                )\n\n            # monocular normal loss\n            if \"normal\" in batch and self.config.mono_normal_loss_mult > 0.0:\n                normal_gt = batch[\"normal\"].to(self.device)\n                normal_pred = outputs[\"normal\"]\n                loss_dict[\"normal_loss\"] = (\n                    monosdf_normal_loss(normal_pred, normal_gt) * self.config.mono_normal_loss_mult\n                )\n\n            # monocular depth loss\n            if \"depth\" in batch and self.config.mono_depth_loss_mult > 0.0:\n                depth_gt = batch[\"depth\"].to(self.device)[..., None]\n                depth_pred = outputs[\"depth\"]\n\n                mask = torch.ones_like(depth_gt).reshape(1, 32, -1).bool()\n                loss_dict[\"depth_loss\"] = (\n                    self.depth_loss(depth_pred.reshape(1, 32, -1), (depth_gt * 50 + 0.5).reshape(1, 32, -1), mask)\n                    * self.config.mono_depth_loss_mult\n                )\n\n        return loss_dict\n\n    def get_metrics_dict(self, outputs, batch) -> Dict[str, torch.Tensor]:\n        \"\"\"Compute and returns metrics.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n        \"\"\"\n        metrics_dict = {}\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        metrics_dict[\"psnr\"] = self.psnr(outputs[\"rgb\"], image)\n        return metrics_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        \"\"\"Writes the test image outputs.\n        Args:\n            outputs: Outputs of the model.\n            batch: Batch of data.\n\n        Returns:\n            A dictionary of metrics.\n        \"\"\"\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        rgb = outputs[\"rgb\"]\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n\n        normal = outputs[\"normal\"]\n        normal = (normal + 1.0) / 2.0\n\n        combined_rgb = torch.cat([image, rgb], dim=1)\n        combined_acc = torch.cat([acc], dim=1)\n        if \"depth\" in batch:\n            depth_gt = batch[\"depth\"].to(self.device)\n            depth_pred = outputs[\"depth\"]\n\n            # align to predicted depth and normalize\n            scale, shift = normalized_depth_scale_and_shift(\n                depth_pred[None, ..., 0], depth_gt[None, ...], depth_gt[None, ...] > 0.0\n            )\n            depth_pred = depth_pred * scale + shift\n\n            combined_depth = torch.cat([depth_gt[..., None], depth_pred], dim=1)\n            combined_depth = colormaps.apply_depth_colormap(combined_depth)\n        else:\n            depth = colormaps.apply_depth_colormap(\n                outputs[\"depth\"],\n                accumulation=outputs[\"accumulation\"],\n            )\n            combined_depth = torch.cat([depth], dim=1)\n\n        if \"normal\" in batch:\n            normal_gt = (batch[\"normal\"].to(self.device) + 1.0) / 2.0\n            combined_normal = torch.cat([normal_gt, normal], dim=1)\n        else:\n            combined_normal = torch.cat([normal], dim=1)\n\n        images_dict = {\n            \"img\": combined_rgb,\n            \"accumulation\": combined_acc,\n            \"depth\": combined_depth,\n            \"normal\": combined_normal,\n        }\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb = torch.moveaxis(rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(image, rgb)\n        ssim = self.ssim(image, rgb)\n        lpips = self.lpips(image, rgb)\n\n        # all of these metrics will be logged as scalars\n        metrics_dict = {\"psnr\": float(psnr.item()), \"ssim\": float(ssim)}  # type: ignore\n        metrics_dict[\"lpips\"] = float(lpips)\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/depth_nerfacto.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nNerfacto augmented with depth supervision.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, Tuple, Type\n\nimport numpy as np\nimport torch\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.model_components import losses\nfrom nerfstudio.model_components.losses import DepthLossType, depth_loss, depth_ranking_loss\nfrom nerfstudio.models.nerfacto import NerfactoModel, NerfactoModelConfig\nfrom nerfstudio.utils import colormaps\n\n\n@dataclass\nclass DepthNerfactoModelConfig(NerfactoModelConfig):\n    \"\"\"Additional parameters for depth supervision.\"\"\"\n\n    _target: Type = field(default_factory=lambda: DepthNerfactoModel)\n    depth_loss_mult: float = 1e-3\n    \"\"\"Lambda of the depth loss.\"\"\"\n    is_euclidean_depth: bool = False\n    \"\"\"Whether input depth maps are Euclidean distances (or z-distances).\"\"\"\n    depth_sigma: float = 0.01\n    \"\"\"Uncertainty around depth values in meters (defaults to 1cm).\"\"\"\n    should_decay_sigma: bool = False\n    \"\"\"Whether to exponentially decay sigma.\"\"\"\n    starting_depth_sigma: float = 0.2\n    \"\"\"Starting uncertainty around depth values in meters (defaults to 0.2m).\"\"\"\n    sigma_decay_rate: float = 0.99985\n    \"\"\"Rate of exponential decay.\"\"\"\n    depth_loss_type: DepthLossType = DepthLossType.DS_NERF\n    \"\"\"Depth loss type. Note that `PairPixelSampler` has to be used for `DepthLossType.SPARSENERF_RANKING`\n    to work as expected.\"\"\"\n\n\nclass DepthNerfactoModel(NerfactoModel):\n    \"\"\"Depth loss augmented nerfacto model.\n\n    Args:\n        config: Nerfacto configuration to instantiate model\n    \"\"\"\n\n    config: DepthNerfactoModelConfig\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        if self.config.should_decay_sigma:\n            self.depth_sigma = torch.tensor([self.config.starting_depth_sigma])\n        else:\n            self.depth_sigma = torch.tensor([self.config.depth_sigma])\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        outputs = super().get_outputs(ray_bundle)\n        if ray_bundle.metadata is not None and \"directions_norm\" in ray_bundle.metadata:\n            outputs[\"directions_norm\"] = ray_bundle.metadata[\"directions_norm\"]\n        return outputs\n\n    def get_metrics_dict(self, outputs, batch):\n        metrics_dict = super().get_metrics_dict(outputs, batch)\n        if self.training:\n            if (\n                losses.FORCE_PSEUDODEPTH_LOSS\n                and self.config.depth_loss_type not in losses.PSEUDODEPTH_COMPATIBLE_LOSSES\n            ):\n                raise ValueError(\n                    f\"Forcing pseudodepth loss, but depth loss type ({self.config.depth_loss_type}) must be one of {losses.PSEUDODEPTH_COMPATIBLE_LOSSES}\"\n                )\n            if self.config.depth_loss_type in (DepthLossType.DS_NERF, DepthLossType.URF):\n                metrics_dict[\"depth_loss\"] = 0.0\n                sigma = self._get_sigma().to(self.device)\n                termination_depth = batch[\"depth_image\"].to(self.device)\n                for i in range(len(outputs[\"weights_list\"])):\n                    metrics_dict[\"depth_loss\"] += depth_loss(\n                        weights=outputs[\"weights_list\"][i],\n                        ray_samples=outputs[\"ray_samples_list\"][i],\n                        termination_depth=termination_depth,\n                        predicted_depth=outputs[\"expected_depth\"],\n                        sigma=sigma,\n                        directions_norm=outputs[\"directions_norm\"],\n                        is_euclidean=self.config.is_euclidean_depth,\n                        depth_loss_type=self.config.depth_loss_type,\n                    ) / len(outputs[\"weights_list\"])\n            elif self.config.depth_loss_type in (DepthLossType.SPARSENERF_RANKING,):\n                metrics_dict[\"depth_ranking\"] = depth_ranking_loss(\n                    outputs[\"expected_depth\"], batch[\"depth_image\"].to(self.device)\n                )\n            else:\n                raise NotImplementedError(f\"Unknown depth loss type {self.config.depth_loss_type}\")\n\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        loss_dict = super().get_loss_dict(outputs, batch, metrics_dict)\n        if self.training:\n            assert metrics_dict is not None and (\"depth_loss\" in metrics_dict or \"depth_ranking\" in metrics_dict)\n            if \"depth_ranking\" in metrics_dict:\n                loss_dict[\"depth_ranking\"] = (\n                    self.config.depth_loss_mult\n                    * np.interp(self.step, [0, 2000], [0, 0.2])\n                    * metrics_dict[\"depth_ranking\"]\n                )\n            if \"depth_loss\" in metrics_dict:\n                loss_dict[\"depth_loss\"] = self.config.depth_loss_mult * metrics_dict[\"depth_loss\"]\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        \"\"\"Appends ground truth depth to the depth image.\"\"\"\n        metrics, images = super().get_image_metrics_and_images(outputs, batch)\n        ground_truth_depth = batch[\"depth_image\"].to(self.device)\n        if not self.config.is_euclidean_depth:\n            ground_truth_depth = ground_truth_depth * outputs[\"directions_norm\"]\n\n        ground_truth_depth_colormap = colormaps.apply_depth_colormap(ground_truth_depth)\n        predicted_depth_colormap = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n            near_plane=float(torch.min(ground_truth_depth).cpu()),\n            far_plane=float(torch.max(ground_truth_depth).cpu()),\n        )\n        images[\"depth\"] = torch.cat([ground_truth_depth_colormap, predicted_depth_colormap], dim=1)\n        depth_mask = ground_truth_depth > 0\n        metrics[\"depth_mse\"] = float(\n            torch.nn.functional.mse_loss(outputs[\"depth\"][depth_mask], ground_truth_depth[depth_mask]).cpu()\n        )\n        return metrics, images\n\n    def _get_sigma(self):\n        if not self.config.should_decay_sigma:\n            return self.depth_sigma\n\n        self.depth_sigma = torch.maximum(\n            self.config.sigma_decay_rate * self.depth_sigma, torch.tensor([self.config.depth_sigma])\n        )\n        return self.depth_sigma\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/generfacto.py",
    "content": "# Copyright 2022 The Nerfstudio Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nNerfstudio's Text to 3D model.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Optional, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom torch.nn import Parameter\nfrom typing_extensions import Literal\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.fields.density_fields import HashMLPDensityField\nfrom nerfstudio.fields.generfacto_field import GenerfactoField\nfrom nerfstudio.generative.deepfloyd import DeepFloyd\nfrom nerfstudio.generative.positional_text_embeddings import PositionalTextEmbeddings\nfrom nerfstudio.generative.stable_diffusion import StableDiffusion\nfrom nerfstudio.model_components.losses import MSELoss, distortion_loss, interlevel_loss, orientation_loss\nfrom nerfstudio.model_components.ray_samplers import ProposalNetworkSampler, UniformSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, NormalsRenderer, RGBRenderer\nfrom nerfstudio.model_components.scene_colliders import AABBBoxCollider, SphereCollider\nfrom nerfstudio.model_components.shaders import LambertianShader, NormalsShader\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps, math, misc\n\n\n@dataclass\nclass GenerfactoModelConfig(ModelConfig):\n    \"\"\"Generfacto model config\"\"\"\n\n    _target: Type = field(default_factory=lambda: GenerfactoModel)\n    \"\"\"target class to instantiate\"\"\"\n    prompt: str = \"a high quality photo of a ripe pineapple\"\n    \"\"\"prompt for stable dreamfusion\"\"\"\n    background_color: Literal[\"random\", \"last_sample\", \"black\", \"white\"] = \"white\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n    orientation_loss_mult: Tuple[float, float] = (0.001, 10.0)\n    \"\"\"Orientation loss multipier on computed normals.\"\"\"\n    orientation_loss_mult_range: Tuple[int, int] = (0, 15000)\n    \"\"\"number of iterations to reach last orientation_loss_mult value\"\"\"\n    random_light_source: bool = True\n    \"\"\"Randomizes light source per output.\"\"\"\n    initialize_density: bool = True\n    \"\"\"Initialize density in center of scene.\"\"\"\n    taper_range: Tuple[int, int] = (0, 1000)\n    \"\"\"Range of step values for the density tapering\"\"\"\n    taper_strength: Tuple[float, float] = (1.0, 0.0)\n    \"\"\"Strength schedule of center density\"\"\"\n    sphere_collider: bool = True\n    \"\"\"Use spherical collider instead of box\"\"\"\n    random_background: bool = True\n    \"\"\"Randomly choose between using background mlp and random color for background\"\"\"\n\n    target_transmittance_start: float = 0.4\n    \"\"\"target transmittance for opacity penalty. This is the percent of the scene that is\n    background when rendered at the start of training\"\"\"\n    target_transmittance_end: float = 0.7\n    \"\"\"target transmittance for opacity penalty. This is the percent of the scene that is\n    background when rendered at the end of training\"\"\"\n    transmittance_end_schedule: int = 1500\n    \"\"\"number of iterations to reach target_transmittance_end\"\"\"\n\n    num_proposal_samples_per_ray: Tuple[int, ...] = (256, 96)\n    \"\"\"Number of samples per ray for each proposal network.\"\"\"\n    num_nerf_samples_per_ray: int = 48\n    \"\"\"Number of samples per ray for the nerf network.\"\"\"\n    proposal_update_every: int = 5\n    \"\"\"Sample every n steps after the warmup\"\"\"\n    proposal_warmup: int = 5000\n    \"\"\"Scales n from 1 to proposal_update_every over this many steps\"\"\"\n    num_proposal_iterations: int = 2\n    \"\"\"Number of proposal network iterations.\"\"\"\n    use_same_proposal_network: bool = False\n    \"\"\"Use the same proposal network. Otherwise use different ones.\"\"\"\n    proposal_net_args_list: List[Dict] = field(\n        default_factory=lambda: [\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 128},\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 256},\n        ]\n    )\n    \"\"\"Arguments for the proposal density fields.\"\"\"\n    proposal_weights_anneal_slope: float = 10.0\n    \"\"\"Slope of the annealing function for the proposal weights.\"\"\"\n    proposal_weights_anneal_max_num_iters: int = 500\n    \"\"\"Max num iterations for the annealing function.\"\"\"\n    use_single_jitter: bool = True\n    \"\"\"Whether use single jitter or not for the proposal networks.\"\"\"\n    interlevel_loss_mult: float = 1.0\n    \"\"\"Proposal loss multiplier.\"\"\"\n    distortion_loss_mult: float = 1.0\n    \"\"\"Distortion loss multiplier.\"\"\"\n    start_normals_training: int = 1000\n    \"\"\"Start training normals after this many iterations\"\"\"\n    start_lambertian_training: int = 1000\n    \"\"\"start training with lambertian shading after this many iterations\"\"\"\n    opacity_penalty: bool = True\n    \"\"\"enables penalty to encourage sparse weights (penalizing for uniform density along ray)\"\"\"\n    opacity_loss_mult: float = 1\n    \"\"\"scale for opacity penalty\"\"\"\n    max_res: int = 256\n    \"\"\"Maximum resolution of the density field.\"\"\"\n\n    location_based_prompting: bool = True\n    \"\"\"enables location based prompting\"\"\"\n    interpolated_prompting: bool = False\n    \"\"\"enables interpolated location prompting\"\"\"\n    positional_prompting: Literal[\"discrete\", \"interpolated\", \"off\"] = \"discrete\"\n    \"\"\" how to incorporate position into prompt\"\"\"\n    top_prompt: str = \", overhead view\"\n    \"\"\"appended to prompt for overhead view\"\"\"\n    side_prompt: str = \", side view\"\n    \"\"\"appended to prompt for side view\"\"\"\n    front_prompt: str = \", front view\"\n    \"\"\"appended to prompt for front view\"\"\"\n    back_prompt: str = \", back view\"\n    \"\"\"appended to prompt for back view\"\"\"\n    guidance_scale: float = 20\n    \"\"\"guidance scale for sds loss\"\"\"\n    diffusion_device: Optional[str] = None\n    \"\"\"device for diffusion model\"\"\"\n    diffusion_model: Literal[\"stablediffusion\", \"deepfloyd\"] = \"deepfloyd\"\n    \"\"\"diffusion model for SDS loss\"\"\"\n    sd_version: str = \"1-5\"\n    \"\"\"model version when using stable diffusion\"\"\"\n    implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\"\n    \"\"\"Which implementation to use for the model.\"\"\"\n\n\nclass GenerfactoModel(Model):\n    \"\"\"Generfacto Model\n\n    Args:\n        config: Generfacto configuration to instantiate model\n    \"\"\"\n\n    config: GenerfactoModelConfig\n\n    def __init__(\n        self,\n        config: GenerfactoModelConfig,\n        **kwargs,\n    ) -> None:\n        self.prompt = config.prompt\n        self.cur_prompt = config.prompt\n        self.sd_version = config.sd_version\n        self.initialize_density = config.initialize_density\n        self.train_normals = False\n        self.train_shaded = False\n        self.random_background = config.random_background\n        self.density_strength = 1.0\n        self.target_transmittance = config.target_transmittance_start\n        self.grad_scaler = kwargs[\"grad_scaler\"]\n\n        self.guidance_scale = config.guidance_scale\n        self.top_prompt = config.top_prompt\n        self.side_prompt = config.side_prompt\n        self.back_prompt = config.back_prompt\n        self.front_prompt = config.front_prompt\n\n        self.diffusion_device = (\n            torch.device(kwargs[\"device\"]) if config.diffusion_device is None else torch.device(config.diffusion_device)\n        )\n\n        super().__init__(config=config, **kwargs)\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules\"\"\"\n        super().populate_modules()\n\n        if self.config.diffusion_model == \"stablediffusion\":\n            self._diffusion_model = StableDiffusion(self.diffusion_device, version=self.sd_version)\n        elif self.config.diffusion_model == \"deepfloyd\":\n            self._diffusion_model = DeepFloyd(self.diffusion_device)\n\n        self.text_embeddings = PositionalTextEmbeddings(\n            base_prompt=self.cur_prompt,\n            top_prompt=self.cur_prompt + self.top_prompt,\n            side_prompt=self.cur_prompt + self.side_prompt,\n            back_prompt=self.cur_prompt + self.back_prompt,\n            front_prompt=self.cur_prompt + self.front_prompt,\n            diffusion_model=self._diffusion_model,\n            positional_prompting=self.config.positional_prompting,\n        )\n\n        # setting up fields\n        self.field = GenerfactoField(self.scene_box.aabb, max_res=self.config.max_res)\n\n        # samplers\n        self.density_fns = []\n        num_prop_nets = self.config.num_proposal_iterations\n        # Build the proposal network(s)\n        self.proposal_networks = torch.nn.ModuleList()\n\n        for i in range(num_prop_nets):\n            prop_net_args = self.config.proposal_net_args_list[min(i, len(self.config.proposal_net_args_list) - 1)]\n            network = HashMLPDensityField(\n                self.scene_box.aabb, **prop_net_args, implementation=self.config.implementation\n            )\n            self.proposal_networks.append(network)\n        self.density_fns.extend([network.density_fn for network in self.proposal_networks])\n\n        def update_schedule(step):\n            return np.clip(\n                np.interp(step, [0, self.config.proposal_warmup], [0, self.config.proposal_update_every]),\n                1,\n                self.config.proposal_update_every,\n            )\n\n        self.proposal_sampler = ProposalNetworkSampler(\n            num_nerf_samples_per_ray=self.config.num_nerf_samples_per_ray,\n            num_proposal_samples_per_ray=self.config.num_proposal_samples_per_ray,\n            num_proposal_network_iterations=self.config.num_proposal_iterations,\n            single_jitter=self.config.use_single_jitter,\n            update_sched=update_schedule,\n            initial_sampler=UniformSampler(single_jitter=self.config.use_single_jitter),\n        )\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer()\n        self.renderer_normals = NormalsRenderer()\n\n        # shaders\n        self.shader_lambertian = LambertianShader()\n        self.shader_normals = NormalsShader()\n\n        # losses\n        self.rgb_loss = MSELoss()\n\n        # colliders\n        if self.config.sphere_collider:\n            self.collider = SphereCollider(torch.Tensor([0, 0, 0]), 1.0)\n        else:\n            self.collider = AABBBoxCollider(scene_box=self.scene_box)\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        # the callback that we want to run every X iterations after the training iteration\n        def taper_density(\n            self,\n            training_callback_attributes: TrainingCallbackAttributes,\n            step: int,  # pylint: disable=unused-argument\n        ):\n            self.density_strength = np.interp(step, self.config.taper_range, self.config.taper_strength)\n\n        def start_training_normals(\n            self,\n            training_callback_attributes: TrainingCallbackAttributes,\n            step: int,  # pylint: disable=unused-argument\n        ):\n            self.train_normals = True\n\n        def start_shaded_training(\n            self,\n            training_callback_attributes: TrainingCallbackAttributes,\n            step: int,  # pylint: disable=unused-argument\n        ):\n            self.train_shaded = True\n\n        def update_orientation_loss_mult(\n            self,\n            training_callback_attributes: TrainingCallbackAttributes,\n            step: int,  # pylint: disable=unused-argument\n        ):\n            if step <= self.config.start_normals_training:\n                self.orientation_loss_mult = 0\n            else:\n                self.orientation_loss_mult = np.interp(\n                    step,\n                    self.config.orientation_loss_mult_range,\n                    self.config.orientation_loss_mult,\n                )\n\n        # anneal the weights of the proposal network before doing PDF sampling\n        def set_anneal(step):\n            # https://arxiv.org/pdf/2111.12077.pdf eq. 18\n            train_frac = np.clip(step / self.config.proposal_weights_anneal_max_num_iters, 0, 1)\n\n            def bias(x, b):\n                return b * x / ((b - 1) * x + 1)\n\n            anneal = bias(train_frac, self.config.proposal_weights_anneal_slope)\n            self.proposal_sampler.set_anneal(anneal)\n\n        callbacks = [\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                func=taper_density,\n                update_every_num_iters=1,\n                args=[self, training_callback_attributes],\n            ),\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                iters=(self.config.start_normals_training,),\n                func=start_training_normals,\n                args=[self, training_callback_attributes],\n            ),\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                iters=(self.config.start_lambertian_training,),\n                func=start_shaded_training,\n                args=[self, training_callback_attributes],\n            ),\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                update_every_num_iters=1,\n                func=update_orientation_loss_mult,\n                args=[self, training_callback_attributes],\n            ),\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                update_every_num_iters=1,\n                func=self.proposal_sampler.step_cb,\n            ),\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                update_every_num_iters=1,\n                func=set_anneal,\n            ),\n        ]\n        return callbacks\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        param_groups[\"proposal_networks\"] = list(self.proposal_networks.parameters())\n        param_groups[\"fields\"] = list(self.field.parameters())\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):  # pylint: disable=too-many-statements\n        # uniform sampling\n        background_rgb = self.field.get_background_rgb(ray_bundle)\n        ray_samples, weights_list, ray_samples_list = self.proposal_sampler(ray_bundle, density_fns=self.density_fns)\n        field_outputs = self.field(ray_samples, compute_normals=True)\n        density = field_outputs[FieldHeadNames.DENSITY]\n\n        if self.initialize_density:\n            pos = ray_samples.frustums.get_positions()\n            density_blob = self.density_strength * (-torch.exp(torch.norm(pos, dim=-1) / 0.4) + 2)[..., None]\n            density = torch.max(density + density_blob, torch.tensor([0.0], device=self.device))\n\n        weights = ray_samples.get_weights(density)\n        weights_list.append(weights)\n        ray_samples_list.append(ray_samples)\n\n        accumulation = self.renderer_accumulation(weights)\n        depth = self.renderer_depth(weights, ray_samples)\n        rgb = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n\n        accum_mask = torch.clamp((torch.nan_to_num(accumulation, nan=0.0)), min=0.0, max=1.0)\n        accum_mask_inv = 1.0 - accum_mask\n\n        background = accum_mask_inv * background_rgb\n\n        outputs = {\n            \"rgb_only\": rgb,\n            \"background_rgb\": background_rgb,\n            \"background\": background,\n            \"accumulation\": accum_mask,\n            \"depth\": depth,\n        }\n\n        # These use a lot of GPU memory, so we avoid storing them for eval.\n        if self.training:\n            outputs[\"weights_list\"] = weights_list\n            outputs[\"ray_samples_list\"] = ray_samples_list\n\n        for i in range(self.config.num_proposal_iterations):\n            outputs[f\"prop_depth_{i}\"] = self.renderer_depth(weights=weights_list[i], ray_samples=ray_samples_list[i])\n\n        normals = self.renderer_normals(normals=field_outputs[FieldHeadNames.NORMALS], weights=weights)\n\n        # lambertian shading\n        if self.config.random_light_source:  # and self.training:\n            light_d = ray_bundle.origins[0] + torch.randn(3, dtype=torch.float).to(normals)\n        else:\n            light_d = ray_bundle.origins[0]\n        light_d = math.safe_normalize(light_d)\n\n        if (self.train_shaded and np.random.random_sample() > 0.75) or not self.training:\n            shading_weight = 0.9\n        else:\n            shading_weight = 0.0\n\n        shaded, shaded_albedo = self.shader_lambertian(\n            rgb=rgb, normals=normals, light_direction=light_d, shading_weight=shading_weight, detach_normals=False\n        )\n\n        shaded, shaded_albedo = accum_mask * shaded, accum_mask * shaded_albedo\n\n        outputs[\"normals\"] = self.shader_normals(normals, weights=accum_mask)\n        outputs[\"shaded\"] = shaded\n        outputs[\"other_train_output\"] = shaded_albedo + background\n        outputs[\"shaded_albedo\"] = shaded_albedo\n        outputs[\"rgb\"] = accum_mask * rgb + background\n\n        # while training 50% of the time use a random background\n        if np.random.random_sample() < 0.5 and self.random_background and self.training:\n            background = torch.ones_like(background) * torch.rand(3, device=self.device) * accum_mask_inv\n\n        if shading_weight > 0:\n            samp = np.random.random_sample()\n            if samp > 0.5:\n                outputs[\"train_output\"] = outputs[\"shaded\"]\n            else:\n                outputs[\"train_output\"] = shaded_albedo + background\n        else:\n            outputs[\"train_output\"] = accum_mask * rgb + background\n\n        outputs[\"rendered_orientation_loss\"] = orientation_loss(\n            weights.detach(), field_outputs[FieldHeadNames.NORMALS], ray_bundle.directions\n        )\n\n        assert weights.shape[-1] == 1\n        if self.config.opacity_penalty:\n            outputs[\"opacity_loss\"] = torch.sqrt(torch.sum(weights, dim=-2) ** 2 + 0.01) * self.config.opacity_loss_mult\n\n        return outputs\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        # Scaling metrics by coefficients to create the losses.\n\n        loss_dict = {}\n        loss_dict = misc.scale_dict(loss_dict, self.config.loss_coefficients)\n        if self.train_normals:\n            # orientation loss for computed normals\n            loss_dict[\"orientation_loss\"] = self.orientation_loss_mult * torch.mean(\n                outputs[\"rendered_orientation_loss\"]\n            )\n        else:\n            loss_dict[\"orientation_loss\"] = 0\n\n        if self.config.opacity_penalty:\n            loss_dict[\"opacity_loss\"] = self.config.opacity_loss_mult * outputs[\"opacity_loss\"].mean()\n\n        if self.prompt != self.cur_prompt:\n            self.cur_prompt = self.prompt\n            self.text_embeddings.update_prompt(\n                base_prompt=self.cur_prompt,\n                top_prompt=self.cur_prompt + self.top_prompt,\n                side_prompt=self.cur_prompt + self.side_prompt,\n                back_prompt=self.cur_prompt + self.back_prompt,\n                front_prompt=self.cur_prompt + self.front_prompt,\n            )\n\n        text_embedding = self.text_embeddings.get_text_embedding(\n            vertical_angle=batch[\"vertical\"], horizontal_angle=batch[\"central\"]\n        )\n\n        train_output = (\n            outputs[\"train_output\"]\n            .view(1, int(outputs[\"train_output\"].shape[0] ** 0.5), int(outputs[\"train_output\"].shape[0] ** 0.5), 3)\n            .permute(0, 3, 1, 2)\n        )\n\n        sds_loss = self._diffusion_model.sds_loss(\n            text_embedding.to(self.diffusion_device),\n            train_output.to(self.diffusion_device),\n            guidance_scale=int(self.guidance_scale),\n            grad_scaler=self.grad_scaler,\n        )\n\n        loss_dict[\"sds_loss\"] = sds_loss.to(self.device)\n\n        if self.training:\n            loss_dict[\"distortion_loss\"] = self.config.distortion_loss_mult * distortion_loss(\n                outputs[\"weights_list\"], outputs[\"ray_samples_list\"]\n            )\n            loss_dict[\"interlevel_loss\"] = self.config.interlevel_loss_mult * interlevel_loss(\n                outputs[\"weights_list\"], outputs[\"ray_samples_list\"]\n            )\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n        depth = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n        prop_depth_0 = colormaps.apply_depth_colormap(\n            outputs[\"prop_depth_0\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n        prop_depth_1 = colormaps.apply_depth_colormap(\n            outputs[\"prop_depth_1\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n\n        metrics_dict = {}\n        images_dict = {\n            \"img\": outputs[\"rgb\"],\n            \"accumulation\": acc,\n            \"depth\": depth,\n            \"prop_depth_0\": prop_depth_0,\n            \"prop_depth_1\": prop_depth_1,\n            \"normals\": outputs[\"normals\"],\n        }\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/instant_ngp.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of Instant NGP.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Literal, Optional, Tuple, Type, Union\n\nimport nerfacc\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SceneContraction\nfrom nerfstudio.fields.nerfacto_field import NerfactoField\nfrom nerfstudio.model_components.losses import MSELoss, scale_gradients_by_distance_squared\nfrom nerfstudio.model_components.ray_samplers import VolumetricSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps\n\n\n@dataclass\nclass InstantNGPModelConfig(ModelConfig):\n    \"\"\"Instant NGP Model Config\"\"\"\n\n    _target: Type = field(\n        default_factory=lambda: NGPModel\n    )  # We can't write `NGPModel` directly, because `NGPModel` doesn't exist yet\n    \"\"\"target class to instantiate\"\"\"\n    enable_collider: bool = False\n    \"\"\"Whether to create a scene collider to filter rays.\"\"\"\n    collider_params: Optional[Dict[str, float]] = None\n    \"\"\"Instant NGP doesn't use a collider.\"\"\"\n    grid_resolution: Union[int, List[int]] = 128\n    \"\"\"Resolution of the grid used for the field.\"\"\"\n    grid_levels: int = 4\n    \"\"\"Levels of the grid used for the field.\"\"\"\n    max_res: int = 2048\n    \"\"\"Maximum resolution of the hashmap for the base mlp.\"\"\"\n    log2_hashmap_size: int = 19\n    \"\"\"Size of the hashmap for the base mlp\"\"\"\n    alpha_thre: float = 0.01\n    \"\"\"Threshold for opacity skipping.\"\"\"\n    cone_angle: float = 0.004\n    \"\"\"Should be set to 0.0 for blender scenes but 1./256 for real scenes.\"\"\"\n    render_step_size: Optional[float] = None\n    \"\"\"Minimum step size for rendering.\"\"\"\n    near_plane: float = 0.05\n    \"\"\"How far along ray to start sampling.\"\"\"\n    far_plane: float = 1e3\n    \"\"\"How far along ray to stop sampling.\"\"\"\n    use_gradient_scaling: bool = False\n    \"\"\"Use gradient scaler where the gradients are lower for points closer to the camera.\"\"\"\n    use_appearance_embedding: bool = False\n    \"\"\"Whether to use an appearance embedding.\"\"\"\n    background_color: Literal[\"random\", \"black\", \"white\"] = \"random\"\n    \"\"\"\n    The color that is given to masked areas.\n    These areas are used to force the density in those regions to be zero.\n    \"\"\"\n    disable_scene_contraction: bool = False\n    \"\"\"Whether to disable scene contraction or not.\"\"\"\n\n\nclass NGPModel(Model):\n    \"\"\"Instant NGP model\n\n    Args:\n        config: instant NGP configuration to instantiate model\n    \"\"\"\n\n    config: InstantNGPModelConfig\n    field: NerfactoField\n\n    def __init__(self, config: InstantNGPModelConfig, **kwargs) -> None:\n        super().__init__(config=config, **kwargs)\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        if self.config.disable_scene_contraction:\n            scene_contraction = None\n        else:\n            scene_contraction = SceneContraction(order=float(\"inf\"))\n\n        self.field = NerfactoField(\n            aabb=self.scene_box.aabb,\n            appearance_embedding_dim=0 if self.config.use_appearance_embedding else 32,\n            num_images=self.num_train_data,\n            log2_hashmap_size=self.config.log2_hashmap_size,\n            max_res=self.config.max_res,\n            spatial_distortion=scene_contraction,\n        )\n\n        self.scene_aabb = Parameter(self.scene_box.aabb.flatten(), requires_grad=False)\n\n        if self.config.render_step_size is None:\n            # auto step size: ~1000 samples in the base level grid\n            self.config.render_step_size = ((self.scene_aabb[3:] - self.scene_aabb[:3]) ** 2).sum().sqrt().item() / 1000\n        # Occupancy Grid.\n        self.occupancy_grid = nerfacc.OccGridEstimator(\n            roi_aabb=self.scene_aabb,\n            resolution=self.config.grid_resolution,\n            levels=self.config.grid_levels,\n        )\n\n        # Sampler\n        self.sampler = VolumetricSampler(\n            occupancy_grid=self.occupancy_grid,\n            density_fn=self.field.density_fn,\n        )\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer(method=\"expected\")\n\n        # losses\n        self.rgb_loss = MSELoss()\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        def update_occupancy_grid(step: int):\n            self.occupancy_grid.update_every_n_steps(\n                step=step,\n                occ_eval_fn=lambda x: self.field.density_fn(x) * self.config.render_step_size,\n            )\n\n        return [\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                update_every_num_iters=1,\n                func=update_occupancy_grid,\n            ),\n        ]\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        if self.field is None:\n            raise ValueError(\"populate_fields() must be called before get_param_groups\")\n        param_groups[\"fields\"] = list(self.field.parameters())\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        assert self.field is not None\n        num_rays = len(ray_bundle)\n\n        with torch.no_grad():\n            ray_samples, ray_indices = self.sampler(\n                ray_bundle=ray_bundle,\n                near_plane=self.config.near_plane,\n                far_plane=self.config.far_plane,\n                render_step_size=self.config.render_step_size,\n                alpha_thre=self.config.alpha_thre,\n                cone_angle=self.config.cone_angle,\n            )\n\n        field_outputs = self.field(ray_samples)\n        if self.config.use_gradient_scaling:\n            field_outputs = scale_gradients_by_distance_squared(field_outputs, ray_samples)\n\n        # accumulation\n        packed_info = nerfacc.pack_info(ray_indices, num_rays)\n        weights = nerfacc.render_weight_from_density(\n            t_starts=ray_samples.frustums.starts[..., 0],\n            t_ends=ray_samples.frustums.ends[..., 0],\n            sigmas=field_outputs[FieldHeadNames.DENSITY][..., 0],\n            packed_info=packed_info,\n        )[0]\n        weights = weights[..., None]\n\n        rgb = self.renderer_rgb(\n            rgb=field_outputs[FieldHeadNames.RGB],\n            weights=weights,\n            ray_indices=ray_indices,\n            num_rays=num_rays,\n        )\n        depth = self.renderer_depth(\n            weights=weights, ray_samples=ray_samples, ray_indices=ray_indices, num_rays=num_rays\n        )\n        accumulation = self.renderer_accumulation(weights=weights, ray_indices=ray_indices, num_rays=num_rays)\n\n        outputs = {\n            \"rgb\": rgb,\n            \"accumulation\": accumulation,\n            \"depth\": depth,\n            \"num_samples_per_ray\": packed_info[:, 1],\n        }\n        return outputs\n\n    def get_metrics_dict(self, outputs, batch):\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        metrics_dict = {}\n        metrics_dict[\"psnr\"] = self.psnr(outputs[\"rgb\"], image)\n        metrics_dict[\"num_samples_per_batch\"] = outputs[\"num_samples_per_ray\"].sum()\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        image = batch[\"image\"].to(self.device)\n        pred_rgb, image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb\"],\n            pred_accumulation=outputs[\"accumulation\"],\n            gt_image=image,\n        )\n        rgb_loss = self.rgb_loss(image, pred_rgb)\n        loss_dict = {\"rgb_loss\": rgb_loss}\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        rgb = outputs[\"rgb\"]\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n        depth = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n\n        combined_rgb = torch.cat([image, rgb], dim=1)\n        combined_acc = torch.cat([acc], dim=1)\n        combined_depth = torch.cat([depth], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb = torch.moveaxis(rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(image, rgb)\n        ssim = self.ssim(image, rgb)\n        lpips = self.lpips(image, rgb)\n\n        # all of these metrics will be logged as scalars\n        metrics_dict = {\"psnr\": float(psnr.item()), \"ssim\": float(ssim), \"lpips\": float(lpips)}  # type: ignore\n        # TODO(ethan): return an image dictionary\n\n        images_dict = {\n            \"img\": combined_rgb,\n            \"accumulation\": combined_acc,\n            \"depth\": combined_depth,\n        }\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/mipnerf.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of mip-NeRF.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Dict, List, Tuple\n\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.field_components.encodings import NeRFEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.fields.vanilla_nerf_field import NeRFField\nfrom nerfstudio.model_components.losses import MSELoss, scale_gradients_by_distance_squared\nfrom nerfstudio.model_components.ray_samplers import PDFSampler, UniformSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.models.vanilla_nerf import VanillaModelConfig\nfrom nerfstudio.utils import colormaps, misc\n\n\nclass MipNerfModel(Model):\n    \"\"\"mip-NeRF model\n\n    Args:\n        config: MipNerf configuration to instantiate model\n    \"\"\"\n\n    config: VanillaModelConfig\n\n    def __init__(\n        self,\n        config: VanillaModelConfig,\n        **kwargs,\n    ) -> None:\n        self.field = None\n        assert config.collider_params is not None, \"MipNeRF model requires bounding box collider parameters.\"\n        super().__init__(config=config, **kwargs)\n        assert self.config.collider_params is not None, \"mip-NeRF requires collider parameters to be set.\"\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules\"\"\"\n        super().populate_modules()\n\n        # setting up fields\n        position_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=16, min_freq_exp=0.0, max_freq_exp=16.0, include_input=True\n        )\n        direction_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=4, min_freq_exp=0.0, max_freq_exp=4.0, include_input=True\n        )\n\n        self.field = NeRFField(\n            position_encoding=position_encoding, direction_encoding=direction_encoding, use_integrated_encoding=True\n        )\n\n        # samplers\n        self.sampler_uniform = UniformSampler(num_samples=self.config.num_coarse_samples)\n        self.sampler_pdf = PDFSampler(num_samples=self.config.num_importance_samples, include_original=False)\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer()\n\n        # losses\n        self.rgb_loss = MSELoss()\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        if self.field is None:\n            raise ValueError(\"populate_fields() must be called before get_param_groups\")\n        param_groups[\"fields\"] = list(self.field.parameters())\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        if self.field is None:\n            raise ValueError(\"populate_fields() must be called before get_outputs\")\n\n        # uniform sampling\n        ray_samples_uniform = self.sampler_uniform(ray_bundle)\n\n        # First pass:\n        field_outputs_coarse = self.field.forward(ray_samples_uniform)\n        if self.config.use_gradient_scaling:\n            field_outputs_coarse = scale_gradients_by_distance_squared(field_outputs_coarse, ray_samples_uniform)\n        weights_coarse = ray_samples_uniform.get_weights(field_outputs_coarse[FieldHeadNames.DENSITY])\n        rgb_coarse = self.renderer_rgb(\n            rgb=field_outputs_coarse[FieldHeadNames.RGB],\n            weights=weights_coarse,\n        )\n        accumulation_coarse = self.renderer_accumulation(weights_coarse)\n        depth_coarse = self.renderer_depth(weights_coarse, ray_samples_uniform)\n\n        # pdf sampling\n        ray_samples_pdf = self.sampler_pdf(ray_bundle, ray_samples_uniform, weights_coarse)\n\n        # Second pass:\n        field_outputs_fine = self.field.forward(ray_samples_pdf)\n        if self.config.use_gradient_scaling:\n            field_outputs_fine = scale_gradients_by_distance_squared(field_outputs_fine, ray_samples_pdf)\n        weights_fine = ray_samples_pdf.get_weights(field_outputs_fine[FieldHeadNames.DENSITY])\n        rgb_fine = self.renderer_rgb(\n            rgb=field_outputs_fine[FieldHeadNames.RGB],\n            weights=weights_fine,\n        )\n        accumulation_fine = self.renderer_accumulation(weights_fine)\n        depth_fine = self.renderer_depth(weights_fine, ray_samples_pdf)\n\n        outputs = {\n            \"rgb_coarse\": rgb_coarse,\n            \"rgb_fine\": rgb_fine,\n            \"accumulation_coarse\": accumulation_coarse,\n            \"accumulation_fine\": accumulation_fine,\n            \"depth_coarse\": depth_coarse,\n            \"depth_fine\": depth_fine,\n        }\n        return outputs\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        image = batch[\"image\"].to(self.device)\n        pred_coarse, image_coarse = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb_coarse\"],\n            pred_accumulation=outputs[\"accumulation_coarse\"],\n            gt_image=image,\n        )\n        pred_fine, image_fine = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb_fine\"],\n            pred_accumulation=outputs[\"accumulation_fine\"],\n            gt_image=image,\n        )\n        rgb_loss_coarse = self.rgb_loss(image_coarse, pred_coarse)\n        rgb_loss_fine = self.rgb_loss(image_fine, pred_fine)\n        loss_dict = {\"rgb_loss_coarse\": rgb_loss_coarse, \"rgb_loss_fine\": rgb_loss_fine}\n        loss_dict = misc.scale_dict(loss_dict, self.config.loss_coefficients)\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        assert self.config.collider_params is not None, \"mip-NeRF requires collider parameters to be set.\"\n        image = batch[\"image\"].to(outputs[\"rgb_coarse\"].device)\n        image = self.renderer_rgb.blend_background(image)\n        rgb_coarse = outputs[\"rgb_coarse\"]\n        rgb_fine = outputs[\"rgb_fine\"]\n        acc_coarse = colormaps.apply_colormap(outputs[\"accumulation_coarse\"])\n        acc_fine = colormaps.apply_colormap(outputs[\"accumulation_fine\"])\n\n        assert self.config.collider_params is not None\n        depth_coarse = colormaps.apply_depth_colormap(\n            outputs[\"depth_coarse\"],\n            accumulation=outputs[\"accumulation_coarse\"],\n            near_plane=self.config.collider_params[\"near_plane\"],\n            far_plane=self.config.collider_params[\"far_plane\"],\n        )\n        depth_fine = colormaps.apply_depth_colormap(\n            outputs[\"depth_fine\"],\n            accumulation=outputs[\"accumulation_fine\"],\n            near_plane=self.config.collider_params[\"near_plane\"],\n            far_plane=self.config.collider_params[\"far_plane\"],\n        )\n\n        combined_rgb = torch.cat([image, rgb_coarse, rgb_fine], dim=1)\n        combined_acc = torch.cat([acc_coarse, acc_fine], dim=1)\n        combined_depth = torch.cat([depth_coarse, depth_fine], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb_coarse = torch.moveaxis(rgb_coarse, -1, 0)[None, ...]\n        rgb_fine = torch.moveaxis(rgb_fine, -1, 0)[None, ...]\n        rgb_coarse = torch.clip(rgb_coarse, min=0, max=1)\n        rgb_fine = torch.clip(rgb_fine, min=0, max=1)\n\n        coarse_psnr = self.psnr(image, rgb_coarse)\n        fine_psnr = self.psnr(image, rgb_fine)\n        fine_ssim = self.ssim(image, rgb_fine)\n        fine_lpips = self.lpips(image, rgb_fine)\n\n        assert isinstance(fine_ssim, torch.Tensor)\n        metrics_dict = {\n            \"psnr\": float(fine_psnr.item()),\n            \"coarse_psnr\": float(coarse_psnr.item()),\n            \"fine_psnr\": float(fine_psnr.item()),\n            \"fine_ssim\": float(fine_ssim.item()),\n            \"fine_lpips\": float(fine_lpips.item()),\n        }\n        images_dict = {\"img\": combined_rgb, \"accumulation\": combined_acc, \"depth\": combined_depth}\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/nerfacto.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nNeRF implementation that combines many recent advancements.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Literal, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer, CameraOptimizerConfig\nfrom nerfstudio.cameras.rays import RayBundle, RaySamples\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SceneContraction\nfrom nerfstudio.fields.density_fields import HashMLPDensityField\nfrom nerfstudio.fields.nerfacto_field import NerfactoField\nfrom nerfstudio.model_components.losses import (\n    MSELoss,\n    distortion_loss,\n    interlevel_loss,\n    orientation_loss,\n    pred_normal_loss,\n    scale_gradients_by_distance_squared,\n)\nfrom nerfstudio.model_components.ray_samplers import ProposalNetworkSampler, UniformSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, NormalsRenderer, RGBRenderer\nfrom nerfstudio.model_components.scene_colliders import NearFarCollider\nfrom nerfstudio.model_components.shaders import NormalsShader\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass NerfactoModelConfig(ModelConfig):\n    \"\"\"Nerfacto Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: NerfactoModel)\n    near_plane: float = 0.05\n    \"\"\"How far along the ray to start sampling.\"\"\"\n    far_plane: float = 1000.0\n\n\n\n    \"\"\"How far along the ray to stop sampling.\"\"\"\n    background_color: Literal[\"random\", \"last_sample\", \"black\", \"white\"] = \"last_sample\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n    hidden_dim: int = 64\n    \"\"\"Dimension of hidden layers\"\"\"\n    hidden_dim_color: int = 64\n    \"\"\"Dimension of hidden layers for color network\"\"\"\n    hidden_dim_transient: int = 64\n    \"\"\"Dimension of hidden layers for transient network\"\"\"\n    num_levels: int = 16\n    \"\"\"Number of levels of the hashmap for the base mlp.\"\"\"\n    base_res: int = 16\n    \"\"\"Resolution of the base grid for the hashgrid.\"\"\"\n    max_res: int = 2048\n    \"\"\"Maximum resolution of the hashmap for the base mlp.\"\"\"\n    log2_hashmap_size: int = 19\n    \"\"\"Size of the hashmap for the base mlp\"\"\"\n    features_per_level: int = 2\n    \"\"\"How many hashgrid features per level\"\"\"\n    num_proposal_samples_per_ray: Tuple[int, ...] = (256, 96)\n    \"\"\"Number of samples per ray for each proposal network.\"\"\"\n    num_nerf_samples_per_ray: int = 48\n    \"\"\"Number of samples per ray for the nerf network.\"\"\"\n    proposal_update_every: int = 5\n    \"\"\"Sample every n steps after the warmup\"\"\"\n    proposal_warmup: int = 5000\n    \"\"\"Scales n from 1 to proposal_update_every over this many steps\"\"\"\n    num_proposal_iterations: int = 2\n    \"\"\"Number of proposal network iterations.\"\"\"\n    use_same_proposal_network: bool = False\n    \"\"\"Use the same proposal network. Otherwise use different ones.\"\"\"\n    proposal_net_args_list: List[Dict] = field(\n        default_factory=lambda: [\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 128, \"use_linear\": False},\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 256, \"use_linear\": False},\n        ]\n    )\n    \"\"\"Arguments for the proposal density fields.\"\"\"\n    proposal_initial_sampler: Literal[\"piecewise\", \"uniform\"] = \"piecewise\"\n    \"\"\"Initial sampler for the proposal network. Piecewise is preferred for unbounded scenes.\"\"\"\n    interlevel_loss_mult: float = 1.0\n    \"\"\"Proposal loss multiplier.\"\"\"\n    distortion_loss_mult: float = 0.002\n    \"\"\"Distortion loss multiplier.\"\"\"\n    orientation_loss_mult: float = 0.0001\n    \"\"\"Orientation loss multiplier on computed normals.\"\"\"\n    pred_normal_loss_mult: float = 0.001\n    \"\"\"Predicted normal loss multiplier.\"\"\"\n    use_proposal_weight_anneal: bool = True\n    \"\"\"Whether to use proposal weight annealing.\"\"\"\n    use_appearance_embedding: bool = True\n    \"\"\"Whether to use an appearance embedding.\"\"\"\n    use_average_appearance_embedding: bool = True\n    \"\"\"Whether to use average appearance embedding or zeros for inference.\"\"\"\n    proposal_weights_anneal_slope: float = 10.0\n    \"\"\"Slope of the annealing function for the proposal weights.\"\"\"\n    proposal_weights_anneal_max_num_iters: int = 1000\n    \"\"\"Max num iterations for the annealing function.\"\"\"\n    use_single_jitter: bool = True\n    \"\"\"Whether use single jitter or not for the proposal networks.\"\"\"\n    predict_normals: bool = False\n    \"\"\"Whether to predict normals or not.\"\"\"\n    # disable_scene_contraction: bool = False\n\n    ## NOTE: We'll disable scene contraction for Blender synthetic data\n    disable_scene_contraction: bool = False ## default values\n    # disable_scene_contraction: bool = True\n    \"\"\"Whether to disable scene contraction or not.\"\"\"\n    use_gradient_scaling: bool = False\n    \"\"\"Use gradient scaler where the gradients are lower for points closer to the camera.\"\"\"\n    implementation: Literal[\"tcnn\", \"torch\"] = \"tcnn\"\n    \"\"\"Which implementation to use for the model.\"\"\"\n    appearance_embed_dim: int = 32\n    \"\"\"Dimension of the appearance embedding.\"\"\"\n    average_init_density: float = 1.0\n    \"\"\"Average initial density output from MLP. \"\"\"\n    camera_optimizer: CameraOptimizerConfig = field(default_factory=lambda: CameraOptimizerConfig(mode=\"SO3xR3\"))\n    \"\"\"Config of the camera optimizer to use\"\"\"\n\n\nclass NerfactoModel(Model):\n    \"\"\"Nerfacto model\n\n    Args:\n        config: Nerfacto configuration to instantiate model\n    \"\"\"\n\n    config: NerfactoModelConfig\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        if self.config.disable_scene_contraction:\n            scene_contraction = None\n        else:\n            scene_contraction = SceneContraction(order=float(\"inf\"))\n\n        appearance_embedding_dim = self.config.appearance_embed_dim if self.config.use_appearance_embedding else 0\n\n        # Fields\n        self.field = NerfactoField(\n            self.scene_box.aabb,\n            hidden_dim=self.config.hidden_dim,\n            num_levels=self.config.num_levels,\n            max_res=self.config.max_res,\n            base_res=self.config.base_res,\n            features_per_level=self.config.features_per_level,\n            log2_hashmap_size=self.config.log2_hashmap_size,\n            hidden_dim_color=self.config.hidden_dim_color,\n            hidden_dim_transient=self.config.hidden_dim_transient,\n            spatial_distortion=scene_contraction,\n            num_images=self.num_train_data,\n            use_pred_normals=self.config.predict_normals,\n            use_average_appearance_embedding=self.config.use_average_appearance_embedding,\n            appearance_embedding_dim=appearance_embedding_dim,\n            average_init_density=self.config.average_init_density,\n            implementation=self.config.implementation,\n        )\n\n        self.camera_optimizer: CameraOptimizer = self.config.camera_optimizer.setup(\n            num_cameras=self.num_train_data, device=\"cpu\"\n        )\n        self.density_fns = []\n        num_prop_nets = self.config.num_proposal_iterations\n        # Build the proposal network(s)\n        self.proposal_networks = torch.nn.ModuleList()\n        if self.config.use_same_proposal_network:\n            assert len(self.config.proposal_net_args_list) == 1, \"Only one proposal network is allowed.\"\n            prop_net_args = self.config.proposal_net_args_list[0]\n            network = HashMLPDensityField(\n                self.scene_box.aabb,\n                spatial_distortion=scene_contraction,\n                **prop_net_args,\n                average_init_density=self.config.average_init_density,\n                implementation=self.config.implementation,\n            )\n            self.proposal_networks.append(network)\n            self.density_fns.extend([network.density_fn for _ in range(num_prop_nets)])\n        else:\n            for i in range(num_prop_nets):\n                prop_net_args = self.config.proposal_net_args_list[min(i, len(self.config.proposal_net_args_list) - 1)]\n                network = HashMLPDensityField(\n                    self.scene_box.aabb,\n                    spatial_distortion=scene_contraction,\n                    **prop_net_args,\n                    average_init_density=self.config.average_init_density,\n                    implementation=self.config.implementation,\n                )\n                self.proposal_networks.append(network)\n            self.density_fns.extend([network.density_fn for network in self.proposal_networks])\n\n        # Samplers\n        def update_schedule(step):\n            return np.clip(\n                np.interp(step, [0, self.config.proposal_warmup], [0, self.config.proposal_update_every]),\n                1,\n                self.config.proposal_update_every,\n            )\n\n        # Change proposal network initial sampler if uniform\n        initial_sampler = None  # None is for piecewise as default (see ProposalNetworkSampler)\n        if self.config.proposal_initial_sampler == \"uniform\":\n            initial_sampler = UniformSampler(single_jitter=self.config.use_single_jitter)\n\n        self.proposal_sampler = ProposalNetworkSampler(\n            num_nerf_samples_per_ray=self.config.num_nerf_samples_per_ray,\n            num_proposal_samples_per_ray=self.config.num_proposal_samples_per_ray,\n            num_proposal_network_iterations=self.config.num_proposal_iterations,\n            single_jitter=self.config.use_single_jitter,\n            update_sched=update_schedule,\n            initial_sampler=initial_sampler,\n        )\n\n        # Collider\n        self.collider = NearFarCollider(near_plane=self.config.near_plane, far_plane=self.config.far_plane)\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer(method=\"median\")\n        self.renderer_expected_depth = DepthRenderer(method=\"expected\")\n        self.renderer_normals = NormalsRenderer()\n\n        # shaders\n        self.normals_shader = NormalsShader()\n\n        # losses\n        self.rgb_loss = MSELoss()\n        self.step = 0\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n        self.step = 0\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        param_groups[\"proposal_networks\"] = list(self.proposal_networks.parameters())\n        param_groups[\"fields\"] = list(self.field.parameters())\n        self.camera_optimizer.get_param_groups(param_groups=param_groups)\n        return param_groups\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        callbacks = []\n        if self.config.use_proposal_weight_anneal:\n            # anneal the weights of the proposal network before doing PDF sampling\n            N = self.config.proposal_weights_anneal_max_num_iters\n\n            def set_anneal(step):\n                # https://arxiv.org/pdf/2111.12077.pdf eq. 18\n                self.step = step\n                train_frac = np.clip(step / N, 0, 1)\n                self.step = step\n\n                def bias(x, b):\n                    return b * x / ((b - 1) * x + 1)\n\n                anneal = bias(train_frac, self.config.proposal_weights_anneal_slope)\n                self.proposal_sampler.set_anneal(anneal)\n\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=set_anneal,\n                )\n            )\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=self.proposal_sampler.step_cb,\n                )\n            )\n        return callbacks\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        # apply the camera optimizer pose tweaks\n        if self.training:\n            self.camera_optimizer.apply_to_raybundle(ray_bundle)\n        ray_samples: RaySamples\n        ray_samples, weights_list, ray_samples_list = self.proposal_sampler(ray_bundle, density_fns=self.density_fns)\n        field_outputs = self.field.forward(ray_samples, compute_normals=self.config.predict_normals)\n        if self.config.use_gradient_scaling:\n            field_outputs = scale_gradients_by_distance_squared(field_outputs, ray_samples)\n\n        weights = ray_samples.get_weights(field_outputs[FieldHeadNames.DENSITY])\n        weights_list.append(weights)\n        ray_samples_list.append(ray_samples)\n\n        rgb = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n        with torch.no_grad():\n            depth = self.renderer_depth(weights=weights, ray_samples=ray_samples)\n        expected_depth = self.renderer_expected_depth(weights=weights, ray_samples=ray_samples)\n        accumulation = self.renderer_accumulation(weights=weights)\n\n        outputs = {\n            \"rgb\": rgb,\n            \"accumulation\": accumulation,\n            \"depth\": depth,\n            \"expected_depth\": expected_depth,\n        }\n\n        if self.config.predict_normals:\n            normals = self.renderer_normals(normals=field_outputs[FieldHeadNames.NORMALS], weights=weights)\n            pred_normals = self.renderer_normals(field_outputs[FieldHeadNames.PRED_NORMALS], weights=weights)\n            outputs[\"normals\"] = self.normals_shader(normals)\n            outputs[\"pred_normals\"] = self.normals_shader(pred_normals)\n        # These use a lot of GPU memory, so we avoid storing them for eval.\n        if self.training:\n            outputs[\"weights_list\"] = weights_list\n            outputs[\"ray_samples_list\"] = ray_samples_list\n\n        if self.training and self.config.predict_normals:\n            outputs[\"rendered_orientation_loss\"] = orientation_loss(\n                weights.detach(), field_outputs[FieldHeadNames.NORMALS], ray_bundle.directions\n            )\n\n            outputs[\"rendered_pred_normal_loss\"] = pred_normal_loss(\n                weights.detach(),\n                field_outputs[FieldHeadNames.NORMALS].detach(),\n                field_outputs[FieldHeadNames.PRED_NORMALS],\n            )\n\n        for i in range(self.config.num_proposal_iterations):\n            outputs[f\"prop_depth_{i}\"] = self.renderer_depth(weights=weights_list[i], ray_samples=ray_samples_list[i])\n        return outputs\n\n    def get_metrics_dict(self, outputs, batch):\n        metrics_dict = {}\n        gt_rgb = batch[\"image\"].to(self.device)  # RGB or RGBA image\n        gt_rgb = self.renderer_rgb.blend_background(gt_rgb)  # Blend if RGBA\n        predicted_rgb = outputs[\"rgb\"]\n        metrics_dict[\"psnr\"] = self.psnr(predicted_rgb, gt_rgb)\n\n        if self.training:\n            metrics_dict[\"distortion\"] = distortion_loss(outputs[\"weights_list\"], outputs[\"ray_samples_list\"])\n\n        self.camera_optimizer.get_metrics_dict(metrics_dict)\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        loss_dict = {}\n        image = batch[\"image\"].to(self.device)\n        pred_rgb, gt_rgb = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb\"],\n            pred_accumulation=outputs[\"accumulation\"],\n            gt_image=image,\n        )\n\n        loss_dict[\"rgb_loss\"] = self.rgb_loss(gt_rgb, pred_rgb)\n        if self.training:\n            loss_dict[\"interlevel_loss\"] = self.config.interlevel_loss_mult * interlevel_loss(\n                outputs[\"weights_list\"], outputs[\"ray_samples_list\"]\n            )\n            assert metrics_dict is not None and \"distortion\" in metrics_dict\n            loss_dict[\"distortion_loss\"] = self.config.distortion_loss_mult * metrics_dict[\"distortion\"]\n            if self.config.predict_normals:\n                # orientation loss for computed normals\n                loss_dict[\"orientation_loss\"] = self.config.orientation_loss_mult * torch.mean(\n                    outputs[\"rendered_orientation_loss\"]\n                )\n\n                # ground truth supervision for normals\n                loss_dict[\"pred_normal_loss\"] = self.config.pred_normal_loss_mult * torch.mean(\n                    outputs[\"rendered_pred_normal_loss\"]\n                )\n            # Add loss from camera optimizer\n            self.camera_optimizer.get_loss_dict(loss_dict)\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        gt_rgb = batch[\"image\"].to(self.device)\n        predicted_rgb = outputs[\"rgb\"]  # Blended with background (black if random background)\n        gt_rgb = self.renderer_rgb.blend_background(gt_rgb)\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n        depth = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n\n        combined_rgb = torch.cat([gt_rgb, predicted_rgb], dim=1)\n        combined_acc = torch.cat([acc], dim=1)\n        combined_depth = torch.cat([depth], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        gt_rgb = torch.moveaxis(gt_rgb, -1, 0)[None, ...]\n        predicted_rgb = torch.moveaxis(predicted_rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(gt_rgb, predicted_rgb)\n        ssim = self.ssim(gt_rgb, predicted_rgb)\n        lpips = self.lpips(gt_rgb, predicted_rgb)\n\n        # all of these metrics will be logged as scalars\n        metrics_dict = {\"psnr\": float(psnr.item()), \"ssim\": float(ssim)}  # type: ignore\n        metrics_dict[\"lpips\"] = float(lpips)\n\n        images_dict = {\"img\": combined_rgb, \"accumulation\": combined_acc, \"depth\": combined_depth}\n\n        for i in range(self.config.num_proposal_iterations):\n            key = f\"prop_depth_{i}\"\n            prop_depth_i = colormaps.apply_depth_colormap(\n                outputs[key],\n                accumulation=outputs[\"accumulation\"],\n            )\n            images_dict[key] = prop_depth_i\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/neus.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of NeuS.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Type\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.model_components.ray_samplers import NeuSSampler\nfrom nerfstudio.models.base_surface_model import SurfaceModel, SurfaceModelConfig\n\n\n@dataclass\nclass NeuSModelConfig(SurfaceModelConfig):\n    \"\"\"NeuS Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: NeuSModel)\n    num_samples: int = 64\n    \"\"\"Number of uniform samples\"\"\"\n    num_samples_importance: int = 64\n    \"\"\"Number of importance samples\"\"\"\n    num_up_sample_steps: int = 4\n    \"\"\"number of up sample step, 1 for simple coarse-to-fine sampling\"\"\"\n    base_variance: float = 64\n    \"\"\"fixed base variance in NeuS sampler, the inv_s will be base * 2 ** iter during upsample\"\"\"\n    perturb: bool = True\n    \"\"\"use to use perturb for the sampled points\"\"\"\n\n\nclass NeuSModel(SurfaceModel):\n    \"\"\"NeuS model\n\n    Args:\n        config: NeuS configuration to instantiate model\n    \"\"\"\n\n    config: NeuSModelConfig\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        self.sampler = NeuSSampler(\n            num_samples=self.config.num_samples,\n            num_samples_importance=self.config.num_samples_importance,\n            num_samples_outside=self.config.num_samples_outside,\n            num_upsample_steps=self.config.num_up_sample_steps,\n            base_variance=self.config.base_variance,\n        )\n\n        self.anneal_end = 50000\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        callbacks = []\n        # anneal for cos in NeuS\n        if self.anneal_end > 0:\n\n            def set_anneal(step):\n                anneal = min([1.0, step / self.anneal_end])\n                self.field.set_cos_anneal_ratio(anneal)\n\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=set_anneal,\n                )\n            )\n\n        return callbacks\n\n    def sample_and_forward_field(self, ray_bundle: RayBundle) -> Dict:\n        ray_samples = self.sampler(ray_bundle, sdf_fn=self.field.get_sdf)\n        field_outputs = self.field(ray_samples, return_alphas=True)\n        weights, transmittance = ray_samples.get_weights_and_transmittance_from_alphas(\n            field_outputs[FieldHeadNames.ALPHA]\n        )\n        bg_transmittance = transmittance[:, -1, :]\n\n        samples_and_field_outputs = {\n            \"ray_samples\": ray_samples,\n            \"field_outputs\": field_outputs,\n            \"weights\": weights,\n            \"bg_transmittance\": bg_transmittance,\n        }\n        return samples_and_field_outputs\n\n    def get_metrics_dict(self, outputs, batch) -> Dict:\n        metrics_dict = super().get_metrics_dict(outputs, batch)\n        if self.training:\n            # training statics\n            metrics_dict[\"s_val\"] = self.field.deviation_network.get_variance().item()\n            metrics_dict[\"inv_s\"] = 1.0 / self.field.deviation_network.get_variance().item()\n\n        return metrics_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/neus_facto.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of NeuS similar to nerfacto where proposal sampler is used.\nBased on SDFStudio https://github.com/autonomousvision/sdfstudio/\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Optional, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.fields.density_fields import HashMLPDensityField\nfrom nerfstudio.model_components.losses import interlevel_loss\nfrom nerfstudio.model_components.ray_samplers import ProposalNetworkSampler, UniformSampler\nfrom nerfstudio.models.neus import NeuSModel, NeuSModelConfig\nfrom nerfstudio.utils import colormaps\n\n\n@dataclass\nclass NeuSFactoModelConfig(NeuSModelConfig):\n    \"\"\"NeusFacto Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: NeuSFactoModel)\n    num_proposal_samples_per_ray: Tuple[int, ...] = (256, 96)\n    \"\"\"Number of samples per ray for the proposal network.\"\"\"\n    num_neus_samples_per_ray: int = 48\n    \"\"\"Number of samples per ray for the nerf network.\"\"\"\n    proposal_update_every: int = 5\n    \"\"\"Sample every n steps after the warmup\"\"\"\n    proposal_warmup: int = 5000\n    \"\"\"Scales n from 1 to proposal_update_every over this many steps\"\"\"\n    num_proposal_iterations: int = 2\n    \"\"\"Number of proposal network iterations.\"\"\"\n    use_same_proposal_network: bool = False\n    \"\"\"Use the same proposal network. Otherwise use different ones.\"\"\"\n    proposal_net_args_list: List[Dict] = field(\n        default_factory=lambda: [\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 64},\n            {\"hidden_dim\": 16, \"log2_hashmap_size\": 17, \"num_levels\": 5, \"max_res\": 256},\n        ]\n    )\n    \"\"\"Arguments for the proposal density fields.\"\"\"\n    interlevel_loss_mult: float = 1.0\n    \"\"\"Proposal loss multiplier.\"\"\"\n    use_proposal_weight_anneal: bool = True\n    \"\"\"Whether to use proposal weight annealing.\"\"\"\n    proposal_weights_anneal_slope: float = 10.0\n    \"\"\"Slope of the annealing function for the proposal weights.\"\"\"\n    proposal_weights_anneal_max_num_iters: int = 1000\n    \"\"\"Max num iterations for the annealing function.\"\"\"\n    use_single_jitter: bool = True\n    \"\"\"Whether use single jitter or not for the proposal networks.\"\"\"\n\n\nclass NeuSFactoModel(NeuSModel):\n    \"\"\"NeuSFactoModel extends NeuSModel for a more efficient sampling strategy.\n\n    The model improves the rendering speed and quality by incorporating a learning-based\n    proposal distribution to guide the sampling process.(similar to mipnerf-360)\n\n    Args:\n        config: NeuS configuration to instantiate model\n    \"\"\"\n\n    config: NeuSFactoModelConfig\n\n    def populate_modules(self):\n        \"\"\"Instantiate modules and fields, including proposal networks.\"\"\"\n        super().populate_modules()\n\n        self.density_fns = []\n        num_prop_nets = self.config.num_proposal_iterations\n        # Build the proposal network(s)\n        self.proposal_networks = torch.nn.ModuleList()\n        if self.config.use_same_proposal_network:\n            assert len(self.config.proposal_net_args_list) == 1, \"Only one proposal network is allowed.\"\n            prop_net_args = self.config.proposal_net_args_list[0]\n            network = HashMLPDensityField(\n                self.scene_box.aabb, spatial_distortion=self.scene_contraction, **prop_net_args\n            )\n            self.proposal_networks.append(network)\n            self.density_fns.extend([network.density_fn for _ in range(num_prop_nets)])\n        else:\n            for i in range(num_prop_nets):\n                prop_net_args = self.config.proposal_net_args_list[min(i, len(self.config.proposal_net_args_list) - 1)]\n                network = HashMLPDensityField(\n                    self.scene_box.aabb,\n                    spatial_distortion=self.scene_contraction,\n                    **prop_net_args,\n                )\n                self.proposal_networks.append(network)\n            self.density_fns.extend([network.density_fn for network in self.proposal_networks])\n\n        # update proposal network every iterations\n        def update_schedule(_):\n            return -1\n\n        initial_sampler = UniformSampler(single_jitter=self.config.use_single_jitter)\n        self.proposal_sampler = ProposalNetworkSampler(\n            num_nerf_samples_per_ray=self.config.num_neus_samples_per_ray,\n            num_proposal_samples_per_ray=self.config.num_proposal_samples_per_ray,\n            num_proposal_network_iterations=self.config.num_proposal_iterations,\n            single_jitter=self.config.use_single_jitter,\n            update_sched=update_schedule,\n            initial_sampler=initial_sampler,\n        )\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Return a dictionary with the parameters of the proposal networks.\"\"\"\n        param_groups = super().get_param_groups()\n        param_groups[\"proposal_networks\"] = list(self.proposal_networks.parameters())\n        return param_groups\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        callbacks = super().get_training_callbacks(training_callback_attributes)\n\n        if self.config.use_proposal_weight_anneal:\n            # anneal the weights of the proposal network before doing PDF sampling\n            N = self.config.proposal_weights_anneal_max_num_iters\n\n            def set_anneal(step: int):\n                # https://arxiv.org/pdf/2111.12077.pdf eq. 18\n                train_frac = np.clip(step / N, 0, 1)\n\n                def bias(x, b):\n                    return b * x / ((b - 1) * x + 1)\n\n                anneal = bias(train_frac, self.config.proposal_weights_anneal_slope)\n                self.proposal_sampler.set_anneal(anneal)\n\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=set_anneal,\n                )\n            )\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=self.proposal_sampler.step_cb,\n                )\n            )\n\n        return callbacks\n\n    def sample_and_forward_field(self, ray_bundle: RayBundle) -> Dict[str, Any]:\n        \"\"\"Sample rays using proposal networks and compute the corresponding field outputs.\"\"\"\n        ray_samples, weights_list, ray_samples_list = self.proposal_sampler(ray_bundle, density_fns=self.density_fns)\n\n        field_outputs = self.field(ray_samples, return_alphas=True)\n        weights, transmittance = ray_samples.get_weights_and_transmittance_from_alphas(\n            field_outputs[FieldHeadNames.ALPHA]\n        )\n        bg_transmittance = transmittance[:, -1, :]\n\n        weights_list.append(weights)\n        ray_samples_list.append(ray_samples)\n\n        samples_and_field_outputs = {\n            \"ray_samples\": ray_samples,\n            \"field_outputs\": field_outputs,\n            \"weights\": weights,\n            \"bg_transmittance\": bg_transmittance,\n            \"weights_list\": weights_list,\n            \"ray_samples_list\": ray_samples_list,\n        }\n        return samples_and_field_outputs\n\n    def get_loss_dict(\n        self, outputs: Dict[str, Any], batch: Dict[str, Any], metrics_dict: Optional[Dict[str, Any]] = None\n    ) -> Dict[str, Any]:\n        \"\"\"Compute the loss dictionary, including interlevel loss for proposal networks.\"\"\"\n        loss_dict = super().get_loss_dict(outputs, batch, metrics_dict)\n\n        if self.training:\n            loss_dict[\"interlevel_loss\"] = self.config.interlevel_loss_mult * interlevel_loss(\n                outputs[\"weights_list\"], outputs[\"ray_samples_list\"]\n            )\n\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, Any], batch: Dict[str, Any]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        \"\"\"Compute image metrics and images, including the proposal depth for each iteration.\"\"\"\n        metrics_dict, images_dict = super().get_image_metrics_and_images(outputs, batch)\n        for i in range(self.config.num_proposal_iterations):\n            key = f\"prop_depth_{i}\"\n            prop_depth_i = colormaps.apply_depth_colormap(\n                outputs[key],\n                accumulation=outputs[\"accumulation\"],\n            )\n            images_dict[key] = prop_depth_i\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/semantic_nerfw.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nSemantic NeRF-W implementation which should be fast enough to view in the viewer.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Tuple, Type\n\nimport numpy as np\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.dataparsers.base_dataparser import Semantics\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.spatial_distortions import SceneContraction\nfrom nerfstudio.fields.density_fields import HashMLPDensityField\nfrom nerfstudio.fields.nerfacto_field import NerfactoField\nfrom nerfstudio.model_components.losses import MSELoss, distortion_loss, interlevel_loss\nfrom nerfstudio.model_components.ray_samplers import ProposalNetworkSampler\nfrom nerfstudio.model_components.renderers import (\n    AccumulationRenderer,\n    DepthRenderer,\n    RGBRenderer,\n    SemanticRenderer,\n    UncertaintyRenderer,\n)\nfrom nerfstudio.model_components.scene_colliders import NearFarCollider\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.models.nerfacto import NerfactoModelConfig\nfrom nerfstudio.utils import colormaps\n\n\n@dataclass\nclass SemanticNerfWModelConfig(NerfactoModelConfig):\n    \"\"\"Nerfacto Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: SemanticNerfWModel)\n    use_transient_embedding: bool = False\n    \"\"\"Whether to use transient embedding.\"\"\"\n    semantic_loss_weight: float = 1.0\n    pass_semantic_gradients: bool = False\n\n\nclass SemanticNerfWModel(Model):\n    \"\"\"Nerfacto model\n\n    Args:\n        config: Nerfacto configuration to instantiate model\n    \"\"\"\n\n    config: SemanticNerfWModelConfig\n\n    def __init__(self, config: SemanticNerfWModelConfig, metadata: Dict, **kwargs) -> None:\n        assert \"semantics\" in metadata.keys() and isinstance(metadata[\"semantics\"], Semantics)\n        self.semantics = metadata[\"semantics\"]\n        super().__init__(config=config, **kwargs)\n        self.colormap = self.semantics.colors.clone().detach().to(self.device)\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules.\"\"\"\n        super().populate_modules()\n\n        scene_contraction = SceneContraction(order=float(\"inf\"))\n\n        if self.config.use_transient_embedding:\n            raise ValueError(\"Transient embedding is not fully working for semantic nerf-w.\")\n\n        # Fields\n        self.field = NerfactoField(\n            self.scene_box.aabb,\n            num_levels=self.config.num_levels,\n            max_res=self.config.max_res,\n            log2_hashmap_size=self.config.log2_hashmap_size,\n            spatial_distortion=scene_contraction,\n            num_images=self.num_train_data,\n            use_average_appearance_embedding=self.config.use_average_appearance_embedding,\n            use_transient_embedding=self.config.use_transient_embedding,\n            use_semantics=True,\n            num_semantic_classes=len(self.semantics.classes),\n            pass_semantic_gradients=self.config.pass_semantic_gradients,\n        )\n\n        # Build the proposal network(s)\n        self.proposal_networks = torch.nn.ModuleList()\n        if self.config.use_same_proposal_network:\n            network = HashMLPDensityField(self.scene_box.aabb, spatial_distortion=scene_contraction)\n            self.proposal_networks.append(network)\n            self.density_fns = [network.density_fn for _ in range(self.config.num_proposal_iterations)]\n        else:\n            for _ in range(self.config.num_proposal_iterations):\n                network = HashMLPDensityField(self.scene_box.aabb, spatial_distortion=scene_contraction)\n                self.proposal_networks.append(network)\n            self.density_fns = [network.density_fn for network in self.proposal_networks]\n\n        # Collider\n        self.collider = NearFarCollider(near_plane=self.config.near_plane, far_plane=self.config.far_plane)\n\n        # Samplers\n        self.proposal_sampler = ProposalNetworkSampler(\n            num_nerf_samples_per_ray=self.config.num_nerf_samples_per_ray,\n            num_proposal_samples_per_ray=self.config.num_proposal_samples_per_ray,\n            num_proposal_network_iterations=self.config.num_proposal_iterations,\n            single_jitter=self.config.use_single_jitter,\n        )\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer()\n        self.renderer_uncertainty = UncertaintyRenderer()\n        self.renderer_semantics = SemanticRenderer()\n\n        # losses\n        self.rgb_loss = MSELoss()\n        self.cross_entropy_loss = torch.nn.CrossEntropyLoss(reduction=\"mean\")\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        param_groups[\"proposal_networks\"] = list(self.proposal_networks.parameters())\n        param_groups[\"fields\"] = list(self.field.parameters())\n        return param_groups\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        callbacks = []\n        if self.config.use_proposal_weight_anneal:\n            # anneal the weights of the proposal network before doing PDF sampling\n            N = self.config.proposal_weights_anneal_max_num_iters\n\n            def set_anneal(step):\n                # https://arxiv.org/pdf/2111.12077.pdf eq. 18\n                train_frac = np.clip(step / N, 0, 1)\n\n                def bias(x, b):\n                    return b * x / ((b - 1) * x + 1)\n\n                anneal = bias(train_frac, self.config.proposal_weights_anneal_slope)\n                self.proposal_sampler.set_anneal(anneal)\n\n            callbacks.append(\n                TrainingCallback(\n                    where_to_run=[TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                    update_every_num_iters=1,\n                    func=set_anneal,\n                )\n            )\n        return callbacks\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        ray_samples, weights_list, ray_samples_list = self.proposal_sampler(ray_bundle, density_fns=self.density_fns)\n        field_outputs = self.field(ray_samples)\n\n        if self.training and self.config.use_transient_embedding:\n            density = field_outputs[FieldHeadNames.DENSITY] + field_outputs[FieldHeadNames.TRANSIENT_DENSITY]\n            weights = ray_samples.get_weights(density)\n            weights_static = ray_samples.get_weights(field_outputs[FieldHeadNames.DENSITY])\n            rgb_static_component = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n            rgb_transient_component = self.renderer_rgb(\n                rgb=field_outputs[FieldHeadNames.TRANSIENT_RGB], weights=weights\n            )\n            rgb = rgb_static_component + rgb_transient_component\n        else:\n            weights_static = ray_samples.get_weights(field_outputs[FieldHeadNames.DENSITY])\n            weights = weights_static\n            rgb = self.renderer_rgb(rgb=field_outputs[FieldHeadNames.RGB], weights=weights)\n        weights_list.append(weights_static)\n        ray_samples_list.append(ray_samples)\n\n        depth = self.renderer_depth(weights=weights_static, ray_samples=ray_samples)\n        accumulation = self.renderer_accumulation(weights=weights_static)\n\n        outputs = {\"rgb\": rgb, \"accumulation\": accumulation, \"depth\": depth}\n        outputs[\"weights_list\"] = weights_list\n        outputs[\"ray_samples_list\"] = ray_samples_list\n\n        for i in range(self.config.num_proposal_iterations):\n            outputs[f\"prop_depth_{i}\"] = self.renderer_depth(weights=weights_list[i], ray_samples=ray_samples_list[i])\n\n        # transients\n        if self.training and self.config.use_transient_embedding:\n            weights_transient = ray_samples.get_weights(field_outputs[FieldHeadNames.TRANSIENT_DENSITY])\n            uncertainty = self.renderer_uncertainty(field_outputs[FieldHeadNames.UNCERTAINTY], weights_transient)\n            outputs[\"uncertainty\"] = uncertainty + 0.03  # NOTE(ethan): this is the uncertainty min\n            outputs[\"density_transient\"] = field_outputs[FieldHeadNames.TRANSIENT_DENSITY]\n\n        # semantics\n        semantic_weights = weights_static\n        if not self.config.pass_semantic_gradients:\n            semantic_weights = semantic_weights.detach()\n        outputs[\"semantics\"] = self.renderer_semantics(\n            field_outputs[FieldHeadNames.SEMANTICS], weights=semantic_weights\n        )\n\n        # semantics colormaps\n        semantic_labels = torch.argmax(torch.nn.functional.softmax(outputs[\"semantics\"], dim=-1), dim=-1)\n        outputs[\"semantics_colormap\"] = self.colormap.to(self.device)[semantic_labels]\n\n        return outputs\n\n    def get_metrics_dict(self, outputs, batch):\n        metrics_dict = {}\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        metrics_dict[\"psnr\"] = self.psnr(outputs[\"rgb\"], image)\n        metrics_dict[\"distortion\"] = distortion_loss(outputs[\"weights_list\"], outputs[\"ray_samples_list\"])\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None):\n        loss_dict = {}\n        image = batch[\"image\"].to(self.device)\n        image = self.renderer_rgb.blend_background(image)\n        loss_dict[\"interlevel_loss\"] = self.config.interlevel_loss_mult * interlevel_loss(\n            outputs[\"weights_list\"], outputs[\"ray_samples_list\"]\n        )\n        assert metrics_dict is not None and \"distortion\" in metrics_dict\n        loss_dict[\"distortion_loss\"] = self.config.distortion_loss_mult * metrics_dict[\"distortion\"]\n\n        # transient loss\n        if self.training and self.config.use_transient_embedding:\n            betas = outputs[\"uncertainty\"]\n            loss_dict[\"uncertainty_loss\"] = 3 + torch.log(betas).mean()\n            loss_dict[\"density_loss\"] = 0.01 * outputs[\"density_transient\"].mean()\n            loss_dict[\"rgb_loss\"] = (((image - outputs[\"rgb\"]) ** 2).sum(-1) / (betas[..., 0] ** 2)).mean()\n        else:\n            loss_dict[\"rgb_loss\"] = self.rgb_loss(image, outputs[\"rgb\"])\n\n        # semantic loss\n        loss_dict[\"semantics_loss\"] = self.config.semantic_loss_weight * self.cross_entropy_loss(\n            outputs[\"semantics\"], batch[\"semantics\"][..., 0].long().to(self.device)\n        )\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        image = batch[\"image\"].to(self.device)\n        rgb = outputs[\"rgb\"]\n        rgb, image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=rgb,\n            pred_accumulation=outputs[\"accumulation\"],\n            gt_image=image,\n        )\n\n        rgb = torch.clamp(rgb, min=0, max=1)\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n        depth = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n        )\n\n        combined_rgb = torch.cat([image, rgb], dim=1)\n        combined_acc = torch.cat([acc], dim=1)\n        combined_depth = torch.cat([depth], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb = torch.moveaxis(rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(image, rgb)\n        ssim = self.ssim(image, rgb)\n        lpips = self.lpips(image, rgb)\n\n        # all of these metrics will be logged as scalars\n        metrics_dict = {\"psnr\": float(psnr.item()), \"ssim\": float(ssim)}  # type: ignore\n        metrics_dict[\"lpips\"] = float(lpips)\n\n        images_dict = {\"img\": combined_rgb, \"accumulation\": combined_acc, \"depth\": combined_depth}\n\n        for i in range(self.config.num_proposal_iterations):\n            key = f\"prop_depth_{i}\"\n            prop_depth_i = colormaps.apply_depth_colormap(\n                outputs[key],\n                accumulation=outputs[\"accumulation\"],\n            )\n            images_dict[key] = prop_depth_i\n\n        # semantics\n        semantic_labels = torch.argmax(torch.nn.functional.softmax(outputs[\"semantics\"], dim=-1), dim=-1)\n        images_dict[\"semantics_colormap\"] = self.colormap.to(self.device)[semantic_labels]\n\n        # valid mask\n        images_dict[\"mask\"] = batch[\"mask\"].repeat(1, 1, 3).to(self.device)\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/splatfacto.py",
    "content": "# ruff: noqa: E741\n# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nGaussian Splatting implementation that combines many recent advancements.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Literal, Optional, Tuple, Type, Union\n\nimport numpy as np\nimport torch\nfrom gsplat.strategy import DefaultStrategy\n\ntry:\n    from gsplat.rendering import rasterization\nexcept ImportError:\n    print(\"Please install gsplat>=1.0.0\")\nfrom pytorch_msssim import SSIM\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer, CameraOptimizerConfig\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.engine.optimizers import Optimizers\nfrom nerfstudio.model_components.lib_bilagrid import BilateralGrid, color_correct, slice, total_variation_loss\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils.colors import get_color\nfrom nerfstudio.utils.misc import torch_compile\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef num_sh_bases(degree: int) -> int:\n    \"\"\"\n    Returns the number of spherical harmonic bases for a given degree.\n    \"\"\"\n    assert degree <= 4, \"We don't support degree greater than 4.\"\n    return (degree + 1) ** 2\n\n\ndef quat_to_rotmat(quat):\n    assert quat.shape[-1] == 4, quat.shape\n    w, x, y, z = torch.unbind(quat, dim=-1)\n    mat = torch.stack(\n        [\n            1 - 2 * (y**2 + z**2),\n            2 * (x * y - w * z),\n            2 * (x * z + w * y),\n            2 * (x * y + w * z),\n            1 - 2 * (x**2 + z**2),\n            2 * (y * z - w * x),\n            2 * (x * z - w * y),\n            2 * (y * z + w * x),\n            1 - 2 * (x**2 + y**2),\n        ],\n        dim=-1,\n    )\n    return mat.reshape(quat.shape[:-1] + (3, 3))\n\n\ndef random_quat_tensor(N):\n    \"\"\"\n    Defines a random quaternion tensor of shape (N, 4)\n    \"\"\"\n    u = torch.rand(N)\n    v = torch.rand(N)\n    w = torch.rand(N)\n    return torch.stack(\n        [\n            torch.sqrt(1 - u) * torch.sin(2 * math.pi * v),\n            torch.sqrt(1 - u) * torch.cos(2 * math.pi * v),\n            torch.sqrt(u) * torch.sin(2 * math.pi * w),\n            torch.sqrt(u) * torch.cos(2 * math.pi * w),\n        ],\n        dim=-1,\n    )\n\n\ndef RGB2SH(rgb):\n    \"\"\"\n    Converts from RGB values [0,1] to the 0th spherical harmonic coefficient\n    \"\"\"\n    C0 = 0.28209479177387814\n    return (rgb - 0.5) / C0\n\n\ndef SH2RGB(sh):\n    \"\"\"\n    Converts from the 0th spherical harmonic coefficient to RGB values [0,1]\n    \"\"\"\n    C0 = 0.28209479177387814\n    return sh * C0 + 0.5\n\n\ndef resize_image(image: torch.Tensor, d: int):\n    \"\"\"\n    Downscale images using the same 'area' method in opencv\n\n    :param image shape [H, W, C]\n    :param d downscale factor (must be 2, 4, 8, etc.)\n\n    return downscaled image in shape [H//d, W//d, C]\n    \"\"\"\n    import torch.nn.functional as tf\n\n    image = image.to(torch.float32)\n    weight = (1.0 / (d * d)) * torch.ones((1, 1, d, d), dtype=torch.float32, device=image.device)\n    return tf.conv2d(image.permute(2, 0, 1)[:, None, ...], weight, stride=d).squeeze(1).permute(1, 2, 0)\n\n\n@torch_compile()\ndef get_viewmat(optimized_camera_to_world):\n    \"\"\"\n    function that converts c2w to gsplat world2camera matrix, using compile for some speed\n    \"\"\"\n    R = optimized_camera_to_world[:, :3, :3]  # 3 x 3\n    T = optimized_camera_to_world[:, :3, 3:4]  # 3 x 1\n    # flip the z and y axes to align with gsplat conventions\n    R = R * torch.tensor([[[1, -1, -1]]], device=R.device, dtype=R.dtype)\n    # analytic matrix inverse to get world2camera matrix\n    R_inv = R.transpose(1, 2)\n    T_inv = -torch.bmm(R_inv, T)\n    viewmat = torch.zeros(R.shape[0], 4, 4, device=R.device, dtype=R.dtype)\n    viewmat[:, 3, 3] = 1.0  # homogenous\n    viewmat[:, :3, :3] = R_inv\n    viewmat[:, :3, 3:4] = T_inv\n    return viewmat\n\n\n@dataclass\nclass SplatfactoModelConfig(ModelConfig):\n    \"\"\"Splatfacto Model Config, nerfstudio's implementation of Gaussian Splatting\"\"\"\n\n    _target: Type = field(default_factory=lambda: SplatfactoModel)\n    warmup_length: int = 500\n    \"\"\"period of steps where refinement is turned off\"\"\"\n    refine_every: int = 100\n    \"\"\"period of steps where gaussians are culled and densified\"\"\"\n    resolution_schedule: int = 3000\n    \"\"\"training starts at 1/d resolution, every n steps this is doubled\"\"\"\n    background_color: Literal[\"random\", \"black\", \"white\"] = \"random\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n    num_downscales: int = 2\n    \"\"\"at the beginning, resolution is 1/2^d, where d is this number\"\"\"\n    cull_alpha_thresh: float = 0.1\n    \"\"\"threshold of opacity for culling gaussians. One can set it to a lower value (e.g. 0.005) for higher quality.\"\"\"\n    cull_scale_thresh: float = 0.5\n    \"\"\"threshold of scale for culling huge gaussians\"\"\"\n    reset_alpha_every: int = 30\n    \"\"\"Every this many refinement steps, reset the alpha\"\"\"\n    densify_grad_thresh: float = 0.0008\n    \"\"\"threshold of positional gradient norm for densifying gaussians\"\"\"\n    use_absgrad: bool = True\n    \"\"\"Whether to use absgrad to densify gaussians, if False, will use grad rather than absgrad\"\"\"\n    densify_size_thresh: float = 0.01\n    \"\"\"below this size, gaussians are *duplicated*, otherwise split\"\"\"\n    n_split_samples: int = 2\n    \"\"\"number of samples to split gaussians into\"\"\"\n    sh_degree_interval: int = 1000\n    \"\"\"every n intervals turn on another sh degree\"\"\"\n    cull_screen_size: float = 0.15\n    \"\"\"if a gaussian is more than this percent of screen space, cull it\"\"\"\n    split_screen_size: float = 0.05\n    \"\"\"if a gaussian is more than this percent of screen space, split it\"\"\"\n    stop_screen_size_at: int = 4000\n    \"\"\"stop culling/splitting at this step WRT screen size of gaussians\"\"\"\n    random_init: bool = False\n    \"\"\"whether to initialize the positions uniformly randomly (not SFM points)\"\"\"\n    num_random: int = 50000\n    \"\"\"Number of gaussians to initialize if random init is used\"\"\"\n    random_scale: float = 10.0\n    \"Size of the cube to initialize random gaussians within\"\n    ssim_lambda: float = 0.2\n    \"\"\"weight of ssim loss\"\"\"\n    stop_split_at: int = 15000\n    \"\"\"stop splitting at this step\"\"\"\n    sh_degree: int = 3\n    \"\"\"maximum degree of spherical harmonics to use\"\"\"\n    use_scale_regularization: bool = False\n    \"\"\"If enabled, a scale regularization introduced in PhysGauss (https://xpandora.github.io/PhysGaussian/) is used for reducing huge spikey gaussians.\"\"\"\n    max_gauss_ratio: float = 10.0\n    \"\"\"threshold of ratio of gaussian max to min scale before applying regularization\n    loss from the PhysGaussian paper\n    \"\"\"\n    output_depth_during_training: bool = False\n    \"\"\"If True, output depth during training. Otherwise, only output depth during evaluation.\"\"\"\n    rasterize_mode: Literal[\"classic\", \"antialiased\"] = \"classic\"\n    \"\"\"\n    Classic mode of rendering will use the EWA volume splatting with a [0.3, 0.3] screen space blurring kernel. This\n    approach is however not suitable to render tiny gaussians at higher or lower resolution than the captured, which\n    results \"aliasing-like\" artifacts. The antialiased mode overcomes this limitation by calculating compensation factors\n    and apply them to the opacities of gaussians to preserve the total integrated density of splats.\n\n    However, PLY exported with antialiased rasterize mode is not compatible with classic mode. Thus many web viewers that\n    were implemented for classic mode can not render antialiased mode PLY properly without modifications.\n    \"\"\"\n    camera_optimizer: CameraOptimizerConfig = field(default_factory=lambda: CameraOptimizerConfig(mode=\"off\"))\n    \"\"\"Config of the camera optimizer to use\"\"\"\n    use_bilateral_grid: bool = False\n    \"\"\"If True, use bilateral grid to handle the ISP changes in the image space. This technique was introduced in the paper 'Bilateral Guided Radiance Field Processing' (https://bilarfpro.github.io/).\"\"\"\n    grid_shape: Tuple[int, int, int] = (16, 16, 8)\n    \"\"\"Shape of the bilateral grid (X, Y, W)\"\"\"\n    color_corrected_metrics: bool = False\n    \"\"\"If True, apply color correction to the rendered images before computing the metrics.\"\"\"\n\n\nclass SplatfactoModel(Model):\n    \"\"\"Nerfstudio's implementation of Gaussian Splatting\n\n    Args:\n        config: Splatfacto configuration to instantiate model\n    \"\"\"\n\n    config: SplatfactoModelConfig\n\n    def __init__(\n        self,\n        *args,\n        seed_points: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,\n        **kwargs,\n    ):\n        self.seed_points = seed_points\n        super().__init__(*args, **kwargs)\n\n    def populate_modules(self):\n        if self.seed_points is not None and not self.config.random_init:\n            means = torch.nn.Parameter(self.seed_points[0])  # (Location, Color)\n        else:\n            means = torch.nn.Parameter((torch.rand((self.config.num_random, 3)) - 0.5) * self.config.random_scale)\n        distances, _ = self.k_nearest_sklearn(means.data, 3)\n        distances = torch.from_numpy(distances)\n        # find the average of the three nearest neighbors for each point and use that as the scale\n        avg_dist = distances.mean(dim=-1, keepdim=True)\n        scales = torch.nn.Parameter(torch.log(avg_dist.repeat(1, 3)))\n        num_points = means.shape[0]\n        quats = torch.nn.Parameter(random_quat_tensor(num_points))\n        dim_sh = num_sh_bases(self.config.sh_degree)\n\n        if (\n            self.seed_points is not None\n            and not self.config.random_init\n            # We can have colors without points.\n            and self.seed_points[1].shape[0] > 0\n        ):\n            shs = torch.zeros((self.seed_points[1].shape[0], dim_sh, 3)).float().cuda()\n            if self.config.sh_degree > 0:\n                shs[:, 0, :3] = RGB2SH(self.seed_points[1] / 255)\n                shs[:, 1:, 3:] = 0.0\n            else:\n                CONSOLE.log(\"use color only optimization with sigmoid activation\")\n                shs[:, 0, :3] = torch.logit(self.seed_points[1] / 255, eps=1e-10)\n            features_dc = torch.nn.Parameter(shs[:, 0, :])\n            features_rest = torch.nn.Parameter(shs[:, 1:, :])\n        else:\n            features_dc = torch.nn.Parameter(torch.rand(num_points, 3))\n            features_rest = torch.nn.Parameter(torch.zeros((num_points, dim_sh - 1, 3)))\n\n        opacities = torch.nn.Parameter(torch.logit(0.1 * torch.ones(num_points, 1)))\n        self.gauss_params = torch.nn.ParameterDict(\n            {\n                \"means\": means,\n                \"scales\": scales,\n                \"quats\": quats,\n                \"features_dc\": features_dc,\n                \"features_rest\": features_rest,\n                \"opacities\": opacities,\n            }\n        )\n\n        self.camera_optimizer: CameraOptimizer = self.config.camera_optimizer.setup(\n            num_cameras=self.num_train_data, device=\"cpu\"\n        )\n\n        # metrics\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = SSIM(data_range=1.0, size_average=True, channel=3)\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n        self.step = 0\n\n        self.crop_box: Optional[OrientedBox] = None\n        if self.config.background_color == \"random\":\n            self.background_color = torch.tensor(\n                [0.1490, 0.1647, 0.2157]\n            )  # This color is the same as the default background color in Viser. This would only affect the background color when rendering.\n        else:\n            self.background_color = get_color(self.config.background_color)\n        if self.config.use_bilateral_grid:\n            self.bil_grids = BilateralGrid(\n                num=self.num_train_data,\n                grid_X=self.config.grid_shape[0],\n                grid_Y=self.config.grid_shape[1],\n                grid_W=self.config.grid_shape[2],\n            )\n\n        # Strategy for GS densification\n        self.strategy = DefaultStrategy(\n            prune_opa=self.config.cull_alpha_thresh,\n            grow_grad2d=self.config.densify_grad_thresh,\n            grow_scale3d=self.config.densify_size_thresh,\n            grow_scale2d=self.config.split_screen_size,\n            prune_scale3d=self.config.cull_scale_thresh,\n            prune_scale2d=self.config.cull_screen_size,\n            refine_scale2d_stop_iter=self.config.stop_screen_size_at,\n            refine_start_iter=self.config.warmup_length,\n            refine_stop_iter=self.config.stop_split_at,\n            reset_every=self.config.reset_alpha_every * self.config.refine_every,\n            refine_every=self.config.refine_every,\n            pause_refine_after_reset=self.num_train_data + self.config.refine_every,\n            absgrad=self.config.use_absgrad,\n            revised_opacity=False,\n            verbose=True,\n        )\n        self.strategy_state = self.strategy.initialize_state(scene_scale=1.0)\n\n    @property\n    def colors(self):\n        if self.config.sh_degree > 0:\n            return SH2RGB(self.features_dc)\n        else:\n            return torch.sigmoid(self.features_dc)\n\n    @property\n    def shs_0(self):\n        if self.config.sh_degree > 0:\n            return self.features_dc\n        else:\n            return RGB2SH(torch.sigmoid(self.features_dc))\n\n    @property\n    def shs_rest(self):\n        return self.features_rest\n\n    @property\n    def num_points(self):\n        return self.means.shape[0]\n\n    @property\n    def means(self):\n        return self.gauss_params[\"means\"]\n\n    @property\n    def scales(self):\n        return self.gauss_params[\"scales\"]\n\n    @property\n    def quats(self):\n        return self.gauss_params[\"quats\"]\n\n    @property\n    def features_dc(self):\n        return self.gauss_params[\"features_dc\"]\n\n    @property\n    def features_rest(self):\n        return self.gauss_params[\"features_rest\"]\n\n    @property\n    def opacities(self):\n        return self.gauss_params[\"opacities\"]\n\n    def load_state_dict(self, dict, **kwargs):  # type: ignore\n        # resize the parameters to match the new number of points\n        self.step = 30000\n        if \"means\" in dict:\n            # For backwards compatibility, we remap the names of parameters from\n            # means->gauss_params.means since old checkpoints have that format\n            for p in [\"means\", \"scales\", \"quats\", \"features_dc\", \"features_rest\", \"opacities\"]:\n                dict[f\"gauss_params.{p}\"] = dict[p]\n        newp = dict[\"gauss_params.means\"].shape[0]\n        for name, param in self.gauss_params.items():\n            old_shape = param.shape\n            new_shape = (newp,) + old_shape[1:]\n            self.gauss_params[name] = torch.nn.Parameter(torch.zeros(new_shape, device=self.device))\n        super().load_state_dict(dict, **kwargs)\n\n    def k_nearest_sklearn(self, x: torch.Tensor, k: int):\n        \"\"\"\n            Find k-nearest neighbors using sklearn's NearestNeighbors.\n        x: The data tensor of shape [num_samples, num_features]\n        k: The number of neighbors to retrieve\n        \"\"\"\n        # Convert tensor to numpy array\n        x_np = x.cpu().numpy()\n\n        # Build the nearest neighbors model\n        from sklearn.neighbors import NearestNeighbors\n\n        nn_model = NearestNeighbors(n_neighbors=k + 1, algorithm=\"auto\", metric=\"euclidean\").fit(x_np)\n\n        # Find the k-nearest neighbors\n        distances, indices = nn_model.kneighbors(x_np)\n\n        # Exclude the point itself from the result and return\n        return distances[:, 1:].astype(np.float32), indices[:, 1:].astype(np.float32)\n\n    def set_crop(self, crop_box: Optional[OrientedBox]):\n        self.crop_box = crop_box\n\n    def set_background(self, background_color: torch.Tensor):\n        assert background_color.shape == (3,)\n        self.background_color = background_color\n\n    def step_post_backward(self, step):\n        assert step == self.step\n        self.strategy.step_post_backward(\n            params=self.gauss_params,\n            optimizers=self.optimizers,\n            state=self.strategy_state,\n            step=self.step,\n            info=self.info,\n            packed=False,\n        )\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        cbs = []\n        cbs.append(\n            TrainingCallback(\n                [TrainingCallbackLocation.BEFORE_TRAIN_ITERATION],\n                self.step_cb,\n                args=[training_callback_attributes.optimizers],\n            )\n        )\n        cbs.append(\n            TrainingCallback(\n                [TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                self.step_post_backward,\n            )\n        )\n        return cbs\n\n    def step_cb(self, optimizers: Optimizers, step):\n        self.step = step\n        self.optimizers = optimizers.optimizers\n\n    def get_gaussian_param_groups(self) -> Dict[str, List[Parameter]]:\n        # Here we explicitly use the means, scales as parameters so that the user can override this function and\n        # specify more if they want to add more optimizable params to gaussians.\n        return {\n            name: [self.gauss_params[name]]\n            for name in [\"means\", \"scales\", \"quats\", \"features_dc\", \"features_rest\", \"opacities\"]\n        }\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Obtain the parameter groups for the optimizers\n\n        Returns:\n            Mapping of different parameter groups\n        \"\"\"\n        gps = self.get_gaussian_param_groups()\n        if self.config.use_bilateral_grid:\n            gps[\"bilateral_grid\"] = list(self.bil_grids.parameters())\n        self.camera_optimizer.get_param_groups(param_groups=gps)\n        return gps\n\n    def _get_downscale_factor(self):\n        if self.training:\n            return 2 ** max(\n                (self.config.num_downscales - self.step // self.config.resolution_schedule),\n                0,\n            )\n        else:\n            return 1\n\n    def _downscale_if_required(self, image):\n        d = self._get_downscale_factor()\n        if d > 1:\n            return resize_image(image, d)\n        return image\n\n    @staticmethod\n    def get_empty_outputs(width: int, height: int, background: torch.Tensor) -> Dict[str, Union[torch.Tensor, List]]:\n        rgb = background.repeat(height, width, 1)\n        depth = background.new_ones(*rgb.shape[:2], 1) * 10\n        accumulation = background.new_zeros(*rgb.shape[:2], 1)\n        return {\"rgb\": rgb, \"depth\": depth, \"accumulation\": accumulation, \"background\": background}\n\n    def _get_background_color(self):\n        if self.config.background_color == \"random\":\n            if self.training:\n                background = torch.rand(3, device=self.device)\n            else:\n                background = self.background_color.to(self.device)\n        elif self.config.background_color == \"white\":\n            background = torch.ones(3, device=self.device)\n        elif self.config.background_color == \"black\":\n            background = torch.zeros(3, device=self.device)\n        else:\n            raise ValueError(f\"Unknown background color {self.config.background_color}\")\n        return background\n\n    def _apply_bilateral_grid(self, rgb: torch.Tensor, cam_idx: int, H: int, W: int) -> torch.Tensor:\n        # make xy grid\n        grid_y, grid_x = torch.meshgrid(\n            torch.linspace(0, 1.0, H, device=self.device),\n            torch.linspace(0, 1.0, W, device=self.device),\n            indexing=\"ij\",\n        )\n        grid_xy = torch.stack([grid_x, grid_y], dim=-1).unsqueeze(0)\n\n        out = slice(\n            bil_grids=self.bil_grids,\n            rgb=rgb,\n            xy=grid_xy,\n            grid_idx=torch.tensor(cam_idx, device=self.device, dtype=torch.long),\n        )\n        return out[\"rgb\"]\n\n    def get_outputs(self, camera: Cameras) -> Dict[str, Union[torch.Tensor, List]]:\n        \"\"\"Takes in a camera and returns a dictionary of outputs.\n\n        Args:\n            camera: The camera(s) for which output images are rendered. It should have\n            all the needed information to compute the outputs.\n\n        Returns:\n            Outputs of model. (ie. rendered colors)\n        \"\"\"\n        if not isinstance(camera, Cameras):\n            print(\"Called get_outputs with not a camera\")\n            return {}\n\n        if self.training:\n            assert camera.shape[0] == 1, \"Only one camera at a time\"\n            optimized_camera_to_world = self.camera_optimizer.apply_to_camera(camera)\n        else:\n            optimized_camera_to_world = camera.camera_to_worlds\n\n        # cropping\n        if self.crop_box is not None and not self.training:\n            crop_ids = self.crop_box.within(self.means).squeeze()\n            if crop_ids.sum() == 0:\n                return self.get_empty_outputs(\n                    int(camera.width.item()), int(camera.height.item()), self.background_color\n                )\n        else:\n            crop_ids = None\n\n        if crop_ids is not None:\n            opacities_crop = self.opacities[crop_ids]\n            means_crop = self.means[crop_ids]\n            features_dc_crop = self.features_dc[crop_ids]\n            features_rest_crop = self.features_rest[crop_ids]\n            scales_crop = self.scales[crop_ids]\n            quats_crop = self.quats[crop_ids]\n        else:\n            opacities_crop = self.opacities\n            means_crop = self.means\n            features_dc_crop = self.features_dc\n            features_rest_crop = self.features_rest\n            scales_crop = self.scales\n            quats_crop = self.quats\n\n        colors_crop = torch.cat((features_dc_crop[:, None, :], features_rest_crop), dim=1)\n\n        camera_scale_fac = self._get_downscale_factor()\n        camera.rescale_output_resolution(1 / camera_scale_fac)\n        viewmat = get_viewmat(optimized_camera_to_world)\n        K = camera.get_intrinsics_matrices().cuda()\n        W, H = int(camera.width.item()), int(camera.height.item())\n        self.last_size = (H, W)\n        camera.rescale_output_resolution(camera_scale_fac)  # type: ignore\n\n        # apply the compensation of screen space blurring to gaussians\n        if self.config.rasterize_mode not in [\"antialiased\", \"classic\"]:\n            raise ValueError(\"Unknown rasterize_mode: %s\", self.config.rasterize_mode)\n\n        if self.config.output_depth_during_training or not self.training:\n            render_mode = \"RGB+ED\"\n        else:\n            render_mode = \"RGB\"\n\n        if self.config.sh_degree > 0:\n            sh_degree_to_use = min(self.step // self.config.sh_degree_interval, self.config.sh_degree)\n        else:\n            colors_crop = torch.sigmoid(colors_crop).squeeze(1)  # [N, 1, 3] -> [N, 3]\n            sh_degree_to_use = None\n\n        render, alpha, self.info = rasterization(\n            means=means_crop,\n            quats=quats_crop,  # rasterization does normalization internally\n            scales=torch.exp(scales_crop),\n            opacities=torch.sigmoid(opacities_crop).squeeze(-1),\n            colors=colors_crop,\n            viewmats=viewmat,  # [1, 4, 4]\n            Ks=K,  # [1, 3, 3]\n            width=W,\n            height=H,\n            packed=False,\n            near_plane=0.01,\n            far_plane=1e10,\n            render_mode=render_mode,\n            sh_degree=sh_degree_to_use,\n            sparse_grad=False,\n            absgrad=self.strategy.absgrad,\n            rasterize_mode=self.config.rasterize_mode,\n            # set some threshold to disregrad small gaussians for faster rendering.\n            # radius_clip=3.0,\n        )\n        if self.training:\n            self.strategy.step_pre_backward(\n                self.gauss_params, self.optimizers, self.strategy_state, self.step, self.info\n            )\n        alpha = alpha[:, ...]\n\n        background = self._get_background_color()\n        rgb = render[:, ..., :3] + (1 - alpha) * background\n        rgb = torch.clamp(rgb, 0.0, 1.0)\n\n        # apply bilateral grid\n        if self.config.use_bilateral_grid and self.training:\n            if camera.metadata is not None and \"cam_idx\" in camera.metadata:\n                rgb = self._apply_bilateral_grid(rgb, camera.metadata[\"cam_idx\"], H, W)\n\n        if render_mode == \"RGB+ED\":\n            depth_im = render[:, ..., 3:4]\n            depth_im = torch.where(alpha > 0, depth_im, depth_im.detach().max()).squeeze(0)\n        else:\n            depth_im = None\n\n        if background.shape[0] == 3 and not self.training:\n            background = background.expand(H, W, 3)\n\n        return {\n            \"rgb\": rgb.squeeze(0),  # type: ignore\n            \"depth\": depth_im,  # type: ignore\n            \"accumulation\": alpha.squeeze(0),  # type: ignore\n            \"background\": background,  # type: ignore\n        }  # type: ignore\n\n    def get_gt_img(self, image: torch.Tensor):\n        \"\"\"Compute groundtruth image with iteration dependent downscale factor for evaluation purpose\n\n        Args:\n            image: tensor.Tensor in type uint8 or float32\n        \"\"\"\n        if image.dtype == torch.uint8:\n            image = image.float() / 255.0\n        gt_img = self._downscale_if_required(image)\n        return gt_img.to(self.device)\n\n    def composite_with_background(self, image, background) -> torch.Tensor:\n        \"\"\"Composite the ground truth image with a background color when it has an alpha channel.\n\n        Args:\n            image: the image to composite\n            background: the background color\n        \"\"\"\n        if image.shape[2] == 4:\n            alpha = image[..., -1].unsqueeze(-1).repeat((1, 1, 3))\n            return alpha * image[..., :3] + (1 - alpha) * background\n        else:\n            return image\n\n    def get_metrics_dict(self, outputs, batch) -> Dict[str, torch.Tensor]:\n        \"\"\"Compute and returns metrics.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n        \"\"\"\n        gt_rgb = self.composite_with_background(self.get_gt_img(batch[\"image\"]), outputs[\"background\"])\n        metrics_dict = {}\n        predicted_rgb = outputs[\"rgb\"]\n\n        metrics_dict[\"psnr\"] = self.psnr(predicted_rgb, gt_rgb)\n        if self.config.color_corrected_metrics:\n            cc_rgb = color_correct(predicted_rgb, gt_rgb)\n            metrics_dict[\"cc_psnr\"] = self.psnr(cc_rgb, gt_rgb)\n\n        metrics_dict[\"gaussian_count\"] = self.num_points\n\n        self.camera_optimizer.get_metrics_dict(metrics_dict)\n        return metrics_dict\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        \"\"\"Computes and returns the losses dict.\n\n        Args:\n            outputs: the output to compute loss dict to\n            batch: ground truth batch corresponding to outputs\n            metrics_dict: dictionary of metrics, some of which we can use for loss\n        \"\"\"\n        gt_img = self.composite_with_background(self.get_gt_img(batch[\"image\"]), outputs[\"background\"])\n        pred_img = outputs[\"rgb\"]\n\n        # Set masked part of both ground-truth and rendered image to black.\n        # This is a little bit sketchy for the SSIM loss.\n        if \"mask\" in batch:\n            # batch[\"mask\"] : [H, W, 1]\n            mask = self._downscale_if_required(batch[\"mask\"])\n            mask = mask.to(self.device)\n            assert mask.shape[:2] == gt_img.shape[:2] == pred_img.shape[:2]\n            gt_img = gt_img * mask\n            pred_img = pred_img * mask\n\n        Ll1 = torch.abs(gt_img - pred_img).mean()\n        simloss = 1 - self.ssim(gt_img.permute(2, 0, 1)[None, ...], pred_img.permute(2, 0, 1)[None, ...])\n        if self.config.use_scale_regularization and self.step % 10 == 0:\n            scale_exp = torch.exp(self.scales)\n            scale_reg = (\n                torch.maximum(\n                    scale_exp.amax(dim=-1) / scale_exp.amin(dim=-1),\n                    torch.tensor(self.config.max_gauss_ratio),\n                )\n                - self.config.max_gauss_ratio\n            )\n            scale_reg = 0.1 * scale_reg.mean()\n        else:\n            scale_reg = torch.tensor(0.0).to(self.device)\n\n        loss_dict = {\n            \"main_loss\": (1 - self.config.ssim_lambda) * Ll1 + self.config.ssim_lambda * simloss,\n            \"scale_reg\": scale_reg,\n        }\n\n        if self.training:\n            # Add loss from camera optimizer\n            self.camera_optimizer.get_loss_dict(loss_dict)\n            if self.config.use_bilateral_grid:\n                loss_dict[\"tv_loss\"] = 10 * total_variation_loss(self.bil_grids.grids)\n\n        return loss_dict\n\n    @torch.no_grad()\n    def get_outputs_for_camera(self, camera: Cameras, obb_box: Optional[OrientedBox] = None) -> Dict[str, torch.Tensor]:\n        \"\"\"Takes in a camera, generates the raybundle, and computes the output of the model.\n        Overridden for a camera-based gaussian model.\n\n        Args:\n            camera: generates raybundle\n        \"\"\"\n        assert camera is not None, \"must provide camera to gaussian model\"\n        self.set_crop(obb_box)\n        outs = self.get_outputs(camera.to(self.device))\n        return outs  # type: ignore\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        \"\"\"Writes the test image outputs.\n\n        Args:\n            image_idx: Index of the image.\n            step: Current step.\n            batch: Batch of data.\n            outputs: Outputs of the model.\n\n        Returns:\n            A dictionary of metrics.\n        \"\"\"\n        gt_rgb = self.composite_with_background(self.get_gt_img(batch[\"image\"]), outputs[\"background\"])\n        predicted_rgb = outputs[\"rgb\"]\n        cc_rgb = None\n\n        combined_rgb = torch.cat([gt_rgb, predicted_rgb], dim=1)\n\n        if self.config.color_corrected_metrics:\n            cc_rgb = color_correct(predicted_rgb, gt_rgb)\n            cc_rgb = torch.moveaxis(cc_rgb, -1, 0)[None, ...]\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        gt_rgb = torch.moveaxis(gt_rgb, -1, 0)[None, ...]\n        predicted_rgb = torch.moveaxis(predicted_rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(gt_rgb, predicted_rgb)\n        ssim = self.ssim(gt_rgb, predicted_rgb)\n        lpips = self.lpips(gt_rgb, predicted_rgb)\n\n        # all of these metrics will be logged as scalars\n        metrics_dict = {\"psnr\": float(psnr.item()), \"ssim\": float(ssim)}  # type: ignore\n        metrics_dict[\"lpips\"] = float(lpips)\n\n        if self.config.color_corrected_metrics:\n            assert cc_rgb is not None\n            cc_psnr = self.psnr(gt_rgb, cc_rgb)\n            cc_ssim = self.ssim(gt_rgb, cc_rgb)\n            cc_lpips = self.lpips(gt_rgb, cc_rgb)\n            metrics_dict[\"cc_psnr\"] = float(cc_psnr.item())\n            metrics_dict[\"cc_ssim\"] = float(cc_ssim)\n            metrics_dict[\"cc_lpips\"] = float(cc_lpips)\n\n        images_dict = {\"img\": combined_rgb}\n\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/tensorf.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nTensorRF implementation.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Dict, List, Literal, Tuple, Type, cast\n\nimport numpy as np\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer, CameraOptimizerConfig\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes, TrainingCallbackLocation\nfrom nerfstudio.field_components.encodings import NeRFEncoding, TensorCPEncoding, TensorVMEncoding, TriplaneEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.fields.tensorf_field import TensoRFField\nfrom nerfstudio.model_components.losses import MSELoss, scale_gradients_by_distance_squared, tv_loss\nfrom nerfstudio.model_components.ray_samplers import PDFSampler, UniformSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer\nfrom nerfstudio.model_components.scene_colliders import AABBBoxCollider\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps, colors, misc\n\n\n@dataclass\nclass TensoRFModelConfig(ModelConfig):\n    \"\"\"TensoRF model config\"\"\"\n\n    _target: Type = field(default_factory=lambda: TensoRFModel)\n    \"\"\"target class to instantiate\"\"\"\n    init_resolution: int = 128\n    \"\"\"initial render resolution\"\"\"\n    final_resolution: int = 300\n    \"\"\"final render resolution\"\"\"\n    upsampling_iters: Tuple[int, ...] = (2000, 3000, 4000, 5500, 7000)\n    \"\"\"specifies a list of iteration step numbers to perform upsampling\"\"\"\n    loss_coefficients: Dict[str, float] = to_immutable_dict(\n        {\n            \"rgb_loss\": 1.0,\n            \"tv_reg_density\": 1e-3,\n            \"tv_reg_color\": 1e-4,\n            \"l1_reg\": 5e-4,\n        }\n    )\n    \"\"\"Loss specific weights.\"\"\"\n    num_samples: int = 50\n    \"\"\"Number of samples in field evaluation\"\"\"\n    num_uniform_samples: int = 200\n    \"\"\"Number of samples in density evaluation\"\"\"\n    num_den_components: int = 16\n    \"\"\"Number of components in density encoding\"\"\"\n    num_color_components: int = 48\n    \"\"\"Number of components in color encoding\"\"\"\n    appearance_dim: int = 27\n    \"\"\"Number of channels for color encoding\"\"\"\n    tensorf_encoding: Literal[\"triplane\", \"vm\", \"cp\"] = \"vm\"\n    regularization: Literal[\"none\", \"l1\", \"tv\"] = \"l1\"\n    \"\"\"Regularization method used in tensorf paper\"\"\"\n    camera_optimizer: CameraOptimizerConfig = field(default_factory=lambda: CameraOptimizerConfig(mode=\"SO3xR3\"))\n    \"\"\"Config of the camera optimizer to use\"\"\"\n    use_gradient_scaling: bool = False\n    \"\"\"Use gradient scaler where the gradients are lower for points closer to the camera.\"\"\"\n    background_color: Literal[\"random\", \"last_sample\", \"black\", \"white\"] = \"white\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n\n\nclass TensoRFModel(Model):\n    \"\"\"TensoRF Model\n\n    Args:\n        config: TensoRF configuration to instantiate model\n    \"\"\"\n\n    config: TensoRFModelConfig\n\n    def __init__(\n        self,\n        config: TensoRFModelConfig,\n        **kwargs,\n    ) -> None:\n        self.init_resolution = config.init_resolution\n        self.upsampling_iters = config.upsampling_iters\n        self.num_den_components = config.num_den_components\n        self.num_color_components = config.num_color_components\n        self.appearance_dim = config.appearance_dim\n        self.upsampling_steps = (\n            np.round(\n                np.exp(\n                    np.linspace(\n                        np.log(config.init_resolution),\n                        np.log(config.final_resolution),\n                        len(config.upsampling_iters) + 1,\n                    )\n                )\n            )\n            .astype(\"int\")\n            .tolist()[1:]\n        )\n        super().__init__(config=config, **kwargs)\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        # the callback that we want to run every X iterations after the training iteration\n        def reinitialize_optimizer(self, training_callback_attributes: TrainingCallbackAttributes, step: int):\n            assert training_callback_attributes.optimizers is not None\n            assert training_callback_attributes.pipeline is not None\n            index = self.upsampling_iters.index(step)\n            resolution = self.upsampling_steps[index]\n\n            # upsample the position and direction grids\n            self.field.density_encoding.upsample_grid(resolution)\n            self.field.color_encoding.upsample_grid(resolution)\n\n            # reinitialize the encodings optimizer\n            optimizers_config = training_callback_attributes.optimizers.config\n            enc = training_callback_attributes.pipeline.get_param_groups()[\"encodings\"]\n            lr_init = optimizers_config[\"encodings\"][\"optimizer\"].lr\n\n            training_callback_attributes.optimizers.optimizers[\"encodings\"] = optimizers_config[\"encodings\"][\n                \"optimizer\"\n            ].setup(params=enc)\n            if optimizers_config[\"encodings\"][\"scheduler\"]:\n                training_callback_attributes.optimizers.schedulers[\"encodings\"] = (\n                    optimizers_config[\"encodings\"][\"scheduler\"]\n                    .setup()\n                    .get_scheduler(\n                        optimizer=training_callback_attributes.optimizers.optimizers[\"encodings\"], lr_init=lr_init\n                    )\n                )\n\n        callbacks = [\n            TrainingCallback(\n                where_to_run=[TrainingCallbackLocation.AFTER_TRAIN_ITERATION],\n                iters=self.upsampling_iters,\n                func=reinitialize_optimizer,\n                args=[self, training_callback_attributes],\n            )\n        ]\n        return callbacks\n\n    def update_to_step(self, step: int) -> None:\n        if step < self.upsampling_iters[0]:\n            return\n\n        new_iters = list(self.upsampling_iters) + [step + 1]\n        new_iters.sort()\n\n        index = new_iters.index(step + 1)\n        new_grid_resolution = self.upsampling_steps[index - 1]\n\n        self.field.density_encoding.upsample_grid(new_grid_resolution)  # type: ignore\n        self.field.color_encoding.upsample_grid(new_grid_resolution)  # type: ignore\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules\"\"\"\n        super().populate_modules()\n\n        # setting up fields\n        if self.config.tensorf_encoding == \"vm\":\n            density_encoding = TensorVMEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_den_components,\n            )\n            color_encoding = TensorVMEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_color_components,\n            )\n        elif self.config.tensorf_encoding == \"cp\":\n            density_encoding = TensorCPEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_den_components,\n            )\n            color_encoding = TensorCPEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_color_components,\n            )\n        elif self.config.tensorf_encoding == \"triplane\":\n            density_encoding = TriplaneEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_den_components,\n            )\n            color_encoding = TriplaneEncoding(\n                resolution=self.init_resolution,\n                num_components=self.num_color_components,\n            )\n        else:\n            raise ValueError(f\"Encoding {self.config.tensorf_encoding} not supported\")\n\n        feature_encoding = NeRFEncoding(in_dim=self.appearance_dim, num_frequencies=2, min_freq_exp=0, max_freq_exp=2)\n        direction_encoding = NeRFEncoding(in_dim=3, num_frequencies=2, min_freq_exp=0, max_freq_exp=2)\n\n        self.field = TensoRFField(\n            self.scene_box.aabb,\n            feature_encoding=feature_encoding,\n            direction_encoding=direction_encoding,\n            density_encoding=density_encoding,\n            color_encoding=color_encoding,\n            appearance_dim=self.appearance_dim,\n            head_mlp_num_layers=2,\n            head_mlp_layer_width=128,\n            use_sh=False,\n        )\n\n        # samplers\n        self.sampler_uniform = UniformSampler(num_samples=self.config.num_uniform_samples, single_jitter=True)\n        self.sampler_pdf = PDFSampler(num_samples=self.config.num_samples, single_jitter=True, include_original=False)\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer()\n\n        # losses\n        self.rgb_loss = MSELoss()\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n\n        # colliders\n        if self.config.enable_collider:\n            self.collider = AABBBoxCollider(scene_box=self.scene_box)\n\n        # regularizations\n        if self.config.tensorf_encoding == \"cp\" and self.config.regularization == \"tv\":\n            raise RuntimeError(\"TV reg not supported for CP decomposition\")\n\n        # (optional) camera optimizer\n        self.camera_optimizer: CameraOptimizer = self.config.camera_optimizer.setup(\n            num_cameras=self.num_train_data, device=\"cpu\"\n        )\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n\n        param_groups[\"fields\"] = (\n            list(self.field.mlp_head.parameters())\n            + list(self.field.B.parameters())\n            + list(self.field.field_output_rgb.parameters())\n        )\n        param_groups[\"encodings\"] = list(self.field.color_encoding.parameters()) + list(\n            self.field.density_encoding.parameters()\n        )\n        self.camera_optimizer.get_param_groups(param_groups=param_groups)\n\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        # uniform sampling\n        if self.training:\n            self.camera_optimizer.apply_to_raybundle(ray_bundle)\n        ray_samples_uniform = self.sampler_uniform(ray_bundle)\n        dens = self.field.get_density(ray_samples_uniform)\n        weights = ray_samples_uniform.get_weights(dens)\n        coarse_accumulation = self.renderer_accumulation(weights)\n        acc_mask = torch.where(coarse_accumulation < 0.0001, False, True).reshape(-1)\n\n        # pdf sampling\n        ray_samples_pdf = self.sampler_pdf(ray_bundle, ray_samples_uniform, weights)\n\n        # fine field:\n        field_outputs_fine = self.field.forward(\n            ray_samples_pdf, mask=acc_mask, bg_color=colors.WHITE.to(weights.device)\n        )\n        if self.config.use_gradient_scaling:\n            field_outputs_fine = scale_gradients_by_distance_squared(field_outputs_fine, ray_samples_pdf)\n\n        weights_fine = ray_samples_pdf.get_weights(field_outputs_fine[FieldHeadNames.DENSITY])\n\n        accumulation = self.renderer_accumulation(weights_fine)\n        depth = self.renderer_depth(weights_fine, ray_samples_pdf)\n\n        rgb = self.renderer_rgb(\n            rgb=field_outputs_fine[FieldHeadNames.RGB],\n            weights=weights_fine,\n        )\n\n        rgb = torch.where(accumulation < 0, colors.WHITE.to(rgb.device), rgb)\n        accumulation = torch.clamp(accumulation, min=0)\n\n        outputs = {\"rgb\": rgb, \"accumulation\": accumulation, \"depth\": depth}\n        return outputs\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        # Scaling metrics by coefficients to create the losses.\n        device = outputs[\"rgb\"].device\n        image = batch[\"image\"].to(device)\n        pred_image, image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb\"],\n            pred_accumulation=outputs[\"accumulation\"],\n            gt_image=image,\n        )\n\n        rgb_loss = self.rgb_loss(image, pred_image)\n\n        loss_dict = {\"rgb_loss\": rgb_loss}\n\n        if self.config.regularization == \"l1\":\n            l1_parameters = []\n            for parameter in self.field.density_encoding.parameters():\n                l1_parameters.append(parameter.view(-1))\n            loss_dict[\"l1_reg\"] = torch.abs(torch.cat(l1_parameters)).mean()\n        elif self.config.regularization == \"tv\":\n            density_plane_coef = self.field.density_encoding.plane_coef\n            color_plane_coef = self.field.color_encoding.plane_coef\n            assert isinstance(color_plane_coef, torch.Tensor) and isinstance(\n                density_plane_coef, torch.Tensor\n            ), \"TV reg only supported for TensoRF encoding types with plane_coef attribute\"\n            loss_dict[\"tv_reg_density\"] = tv_loss(density_plane_coef)\n            loss_dict[\"tv_reg_color\"] = tv_loss(color_plane_coef)\n        elif self.config.regularization == \"none\":\n            pass\n        else:\n            raise ValueError(f\"Regularization {self.config.regularization} not supported\")\n\n        self.camera_optimizer.get_loss_dict(loss_dict)\n\n        loss_dict = misc.scale_dict(loss_dict, self.config.loss_coefficients)\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        image = batch[\"image\"].to(outputs[\"rgb\"].device)\n        image = self.renderer_rgb.blend_background(image)\n        rgb = outputs[\"rgb\"]\n        acc = colormaps.apply_colormap(outputs[\"accumulation\"])\n        assert self.config.collider_params is not None\n        depth = colormaps.apply_depth_colormap(\n            outputs[\"depth\"],\n            accumulation=outputs[\"accumulation\"],\n            near_plane=self.config.collider_params[\"near_plane\"],\n            far_plane=self.config.collider_params[\"far_plane\"],\n        )\n\n        combined_rgb = torch.cat([image, rgb], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb = torch.moveaxis(rgb, -1, 0)[None, ...]\n\n        psnr = self.psnr(image, rgb)\n        ssim = cast(torch.Tensor, self.ssim(image, rgb))\n        lpips = self.lpips(image, rgb)\n\n        metrics_dict = {\n            \"psnr\": float(psnr.item()),\n            \"ssim\": float(ssim.item()),\n            \"lpips\": float(lpips.item()),\n        }\n        self.camera_optimizer.get_metrics_dict(metrics_dict)\n\n        images_dict = {\"img\": combined_rgb, \"accumulation\": acc, \"depth\": depth}\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/models/vanilla_nerf.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nImplementation of vanilla nerf.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Literal, Tuple, Type\n\nimport torch\nfrom torch.nn import Parameter\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.configs.config_utils import to_immutable_dict\nfrom nerfstudio.field_components.encodings import NeRFEncoding\nfrom nerfstudio.field_components.field_heads import FieldHeadNames\nfrom nerfstudio.field_components.temporal_distortions import TemporalDistortionKind\nfrom nerfstudio.fields.vanilla_nerf_field import NeRFField\nfrom nerfstudio.model_components.losses import MSELoss, scale_gradients_by_distance_squared\nfrom nerfstudio.model_components.ray_samplers import PDFSampler, UniformSampler\nfrom nerfstudio.model_components.renderers import AccumulationRenderer, DepthRenderer, RGBRenderer\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import colormaps, misc\n\n\n@dataclass\nclass VanillaModelConfig(ModelConfig):\n    \"\"\"Vanilla Model Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: NeRFModel)\n    num_coarse_samples: int = 64\n    \"\"\"Number of samples in coarse field evaluation\"\"\"\n    num_importance_samples: int = 128\n    \"\"\"Number of samples in fine field evaluation\"\"\"\n\n    enable_temporal_distortion: bool = False\n    \"\"\"Specifies whether or not to include ray warping based on time.\"\"\"\n    temporal_distortion_params: Dict[str, Any] = to_immutable_dict({\"kind\": TemporalDistortionKind.DNERF})\n    \"\"\"Parameters to instantiate temporal distortion with\"\"\"\n    use_gradient_scaling: bool = False\n    \"\"\"Use gradient scaler where the gradients are lower for points closer to the camera.\"\"\"\n    background_color: Literal[\"random\", \"last_sample\", \"black\", \"white\"] = \"white\"\n    \"\"\"Whether to randomize the background color.\"\"\"\n\n\nclass NeRFModel(Model):\n    \"\"\"Vanilla NeRF model\n\n    Args:\n        config: Basic NeRF configuration to instantiate model\n    \"\"\"\n\n    config: VanillaModelConfig\n\n    def __init__(\n        self,\n        config: VanillaModelConfig,\n        **kwargs,\n    ) -> None:\n        self.field_coarse = None\n        self.field_fine = None\n        self.temporal_distortion = None\n\n        super().__init__(\n            config=config,\n            **kwargs,\n        )\n\n    def populate_modules(self):\n        \"\"\"Set the fields and modules\"\"\"\n        super().populate_modules()\n\n        # fields\n        position_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=10, min_freq_exp=0.0, max_freq_exp=8.0, include_input=True\n        )\n        direction_encoding = NeRFEncoding(\n            in_dim=3, num_frequencies=4, min_freq_exp=0.0, max_freq_exp=4.0, include_input=True\n        )\n\n        self.field_coarse = NeRFField(\n            position_encoding=position_encoding,\n            direction_encoding=direction_encoding,\n        )\n\n        self.field_fine = NeRFField(\n            position_encoding=position_encoding,\n            direction_encoding=direction_encoding,\n        )\n\n        # samplers\n        self.sampler_uniform = UniformSampler(num_samples=self.config.num_coarse_samples)\n        self.sampler_pdf = PDFSampler(num_samples=self.config.num_importance_samples)\n\n        # renderers\n        self.renderer_rgb = RGBRenderer(background_color=self.config.background_color)\n        self.renderer_accumulation = AccumulationRenderer()\n        self.renderer_depth = DepthRenderer()\n\n        # losses\n        self.rgb_loss = MSELoss()\n\n        # metrics\n        from torchmetrics.functional import structural_similarity_index_measure\n        from torchmetrics.image import PeakSignalNoiseRatio\n        from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity\n\n        self.psnr = PeakSignalNoiseRatio(data_range=1.0)\n        self.ssim = structural_similarity_index_measure\n        self.lpips = LearnedPerceptualImagePatchSimilarity(normalize=True)\n\n        if getattr(self.config, \"enable_temporal_distortion\", False):\n            params = self.config.temporal_distortion_params\n            kind = params.pop(\"kind\")\n            self.temporal_distortion = kind.to_temporal_distortion(params)\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        param_groups = {}\n        if self.field_coarse is None or self.field_fine is None:\n            raise ValueError(\"populate_fields() must be called before get_param_groups\")\n        param_groups[\"fields\"] = list(self.field_coarse.parameters()) + list(self.field_fine.parameters())\n        if self.temporal_distortion is not None:\n            param_groups[\"temporal_distortion\"] = list(self.temporal_distortion.parameters())\n        return param_groups\n\n    def get_outputs(self, ray_bundle: RayBundle):\n        if self.field_coarse is None or self.field_fine is None:\n            raise ValueError(\"populate_fields() must be called before get_outputs\")\n\n        # uniform sampling\n        ray_samples_uniform = self.sampler_uniform(ray_bundle)\n        if self.temporal_distortion is not None:\n            offsets = None\n            if ray_samples_uniform.times is not None:\n                offsets = self.temporal_distortion(\n                    ray_samples_uniform.frustums.get_positions(), ray_samples_uniform.times\n                )\n            ray_samples_uniform.frustums.set_offsets(offsets)\n\n        # coarse field:\n        field_outputs_coarse = self.field_coarse.forward(ray_samples_uniform)\n        if self.config.use_gradient_scaling:\n            field_outputs_coarse = scale_gradients_by_distance_squared(field_outputs_coarse, ray_samples_uniform)\n        weights_coarse = ray_samples_uniform.get_weights(field_outputs_coarse[FieldHeadNames.DENSITY])\n        rgb_coarse = self.renderer_rgb(\n            rgb=field_outputs_coarse[FieldHeadNames.RGB],\n            weights=weights_coarse,\n        )\n        accumulation_coarse = self.renderer_accumulation(weights_coarse)\n        depth_coarse = self.renderer_depth(weights_coarse, ray_samples_uniform)\n\n        # pdf sampling\n        ray_samples_pdf = self.sampler_pdf(ray_bundle, ray_samples_uniform, weights_coarse)\n        if self.temporal_distortion is not None:\n            offsets = None\n            if ray_samples_pdf.times is not None:\n                offsets = self.temporal_distortion(ray_samples_pdf.frustums.get_positions(), ray_samples_pdf.times)\n            ray_samples_pdf.frustums.set_offsets(offsets)\n\n        # fine field:\n        field_outputs_fine = self.field_fine.forward(ray_samples_pdf)\n        if self.config.use_gradient_scaling:\n            field_outputs_fine = scale_gradients_by_distance_squared(field_outputs_fine, ray_samples_pdf)\n        weights_fine = ray_samples_pdf.get_weights(field_outputs_fine[FieldHeadNames.DENSITY])\n        rgb_fine = self.renderer_rgb(\n            rgb=field_outputs_fine[FieldHeadNames.RGB],\n            weights=weights_fine,\n        )\n        accumulation_fine = self.renderer_accumulation(weights_fine)\n        depth_fine = self.renderer_depth(weights_fine, ray_samples_pdf)\n\n        outputs = {\n            \"rgb_coarse\": rgb_coarse,\n            \"rgb_fine\": rgb_fine,\n            \"accumulation_coarse\": accumulation_coarse,\n            \"accumulation_fine\": accumulation_fine,\n            \"depth_coarse\": depth_coarse,\n            \"depth_fine\": depth_fine,\n        }\n        return outputs\n\n    def get_loss_dict(self, outputs, batch, metrics_dict=None) -> Dict[str, torch.Tensor]:\n        # Scaling metrics by coefficients to create the losses.\n        device = outputs[\"rgb_coarse\"].device\n        image = batch[\"image\"].to(device)\n        coarse_pred, coarse_image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb_coarse\"],\n            pred_accumulation=outputs[\"accumulation_coarse\"],\n            gt_image=image,\n        )\n        fine_pred, fine_image = self.renderer_rgb.blend_background_for_loss_computation(\n            pred_image=outputs[\"rgb_fine\"],\n            pred_accumulation=outputs[\"accumulation_fine\"],\n            gt_image=image,\n        )\n\n        rgb_loss_coarse = self.rgb_loss(coarse_image, coarse_pred)\n        rgb_loss_fine = self.rgb_loss(fine_image, fine_pred)\n\n        loss_dict = {\"rgb_loss_coarse\": rgb_loss_coarse, \"rgb_loss_fine\": rgb_loss_fine}\n        loss_dict = misc.scale_dict(loss_dict, self.config.loss_coefficients)\n        return loss_dict\n\n    def get_image_metrics_and_images(\n        self, outputs: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]\n    ) -> Tuple[Dict[str, float], Dict[str, torch.Tensor]]:\n        image = batch[\"image\"].to(outputs[\"rgb_coarse\"].device)\n        image = self.renderer_rgb.blend_background(image)\n        rgb_coarse = outputs[\"rgb_coarse\"]\n        rgb_fine = outputs[\"rgb_fine\"]\n        acc_coarse = colormaps.apply_colormap(outputs[\"accumulation_coarse\"])\n        acc_fine = colormaps.apply_colormap(outputs[\"accumulation_fine\"])\n        assert self.config.collider_params is not None\n        depth_coarse = colormaps.apply_depth_colormap(\n            outputs[\"depth_coarse\"],\n            accumulation=outputs[\"accumulation_coarse\"],\n            near_plane=self.config.collider_params[\"near_plane\"],\n            far_plane=self.config.collider_params[\"far_plane\"],\n        )\n        depth_fine = colormaps.apply_depth_colormap(\n            outputs[\"depth_fine\"],\n            accumulation=outputs[\"accumulation_fine\"],\n            near_plane=self.config.collider_params[\"near_plane\"],\n            far_plane=self.config.collider_params[\"far_plane\"],\n        )\n\n        combined_rgb = torch.cat([image, rgb_coarse, rgb_fine], dim=1)\n        combined_acc = torch.cat([acc_coarse, acc_fine], dim=1)\n        combined_depth = torch.cat([depth_coarse, depth_fine], dim=1)\n\n        # Switch images from [H, W, C] to [1, C, H, W] for metrics computations\n        image = torch.moveaxis(image, -1, 0)[None, ...]\n        rgb_coarse = torch.moveaxis(rgb_coarse, -1, 0)[None, ...]\n        rgb_fine = torch.moveaxis(rgb_fine, -1, 0)[None, ...]\n\n        coarse_psnr = self.psnr(image, rgb_coarse)\n        fine_psnr = self.psnr(image, rgb_fine)\n        fine_ssim = self.ssim(image, rgb_fine)\n        fine_lpips = self.lpips(image, rgb_fine)\n        assert isinstance(fine_ssim, torch.Tensor)\n\n        metrics_dict = {\n            \"psnr\": float(fine_psnr.item()),\n            \"coarse_psnr\": float(coarse_psnr),\n            \"fine_psnr\": float(fine_psnr),\n            \"fine_ssim\": float(fine_ssim),\n            \"fine_lpips\": float(fine_lpips),\n        }\n        images_dict = {\"img\": combined_rgb, \"accumulation\": combined_acc, \"depth\": combined_depth}\n        return metrics_dict, images_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/pipelines/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/pipelines/base_pipeline.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nAbstracts for the Pipeline class.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport typing\nfrom abc import abstractmethod\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom time import time\nfrom typing import Any, Dict, List, Literal, Mapping, Optional, Tuple, Type, Union, cast\n\nimport torch\nimport torch.distributed as dist\nimport torchvision.utils as vutils\nfrom rich.progress import BarColumn, MofNCompleteColumn, Progress, TextColumn, TimeElapsedColumn\nfrom torch import nn\nfrom torch.cuda.amp.grad_scaler import GradScaler\nfrom torch.nn import Parameter\nfrom torch.nn.parallel import DistributedDataParallel as DDP\n\nfrom nerfstudio.configs.base_config import InstantiateConfig\nfrom nerfstudio.data.datamanagers.base_datamanager import DataManager, DataManagerConfig\nfrom nerfstudio.engine.callbacks import TrainingCallback, TrainingCallbackAttributes\nfrom nerfstudio.models.base_model import Model, ModelConfig\nfrom nerfstudio.utils import profiler\n\n\ndef module_wrapper(ddp_or_model: Union[DDP, Model]) -> Model:\n    \"\"\"\n    If DDP, then return the .module. Otherwise, return the model.\n    \"\"\"\n    if isinstance(ddp_or_model, DDP):\n        return cast(Model, ddp_or_model.module)\n    return ddp_or_model\n\n\nclass Pipeline(nn.Module):\n    \"\"\"The intent of this class is to provide a higher level interface for the Model\n    that will be easy to use for our Trainer class.\n\n    This class will contain high level functions for the model like getting the loss\n    dictionaries and visualization code. It should have ways to get the next iterations\n    training loss, evaluation loss, and generate whole images for visualization. Each model\n    class should be 1:1 with a pipeline that can act as a standardized interface and hide\n    differences in how each model takes in and outputs data.\n\n    This class's function is to hide the data manager and model classes from the trainer,\n    worrying about:\n    1) Fetching data with the data manager\n    2) Feeding the model the data and fetching the loss\n    Hopefully this provides a higher level interface for the trainer to use, and\n    simplifying the model classes, which each may have different forward() methods\n    and so on.\n\n    Args:\n        config: configuration to instantiate pipeline\n        device: location to place model and data\n        test_mode:\n            'train': loads train/eval datasets into memory\n            'test': loads train/test dataset into memory\n            'inference': does not load any dataset into memory\n        world_size: total number of machines available\n        local_rank: rank of current machine\n\n    Attributes:\n        datamanager: The data manager that will be used\n        model: The model that will be used\n    \"\"\"\n\n    datamanager: DataManager\n    _model: Model\n    world_size: int\n\n    @property\n    def model(self):\n        \"\"\"Returns the unwrapped model if in ddp\"\"\"\n        return module_wrapper(self._model)\n\n    @property\n    def device(self):\n        \"\"\"Returns the device that the model is on.\"\"\"\n        return self.model.device\n\n    def load_state_dict(self, state_dict: Mapping[str, Any], strict: Optional[bool] = None):\n        is_ddp_model_state = True\n        model_state = {}\n        for key, value in state_dict.items():\n            if key.startswith(\"_model.\"):\n                # remove the \"_model.\" prefix from key\n                model_state[key[len(\"_model.\") :]] = value\n                # make sure that the \"module.\" prefix comes from DDP,\n                # rather than an attribute of the model named \"module\"\n                if not key.startswith(\"_model.module.\"):\n                    is_ddp_model_state = False\n        # remove \"module.\" prefix added by DDP\n        if is_ddp_model_state:\n            model_state = {key[len(\"module.\") :]: value for key, value in model_state.items()}\n\n        pipeline_state = {key: value for key, value in state_dict.items() if not key.startswith(\"_model.\")}\n\n        try:\n            self.model.load_state_dict(model_state, strict=True)\n        except RuntimeError:\n            if not strict:\n                self.model.load_state_dict(model_state, strict=False)\n            else:\n                raise\n\n        super().load_state_dict(pipeline_state, strict=False)\n\n    @profiler.time_function\n    def get_train_loss_dict(self, step: int):\n        \"\"\"This function gets your training loss dict. This will be responsible for\n        getting the next batch of data from the DataManager and interfacing with the\n        Model class, feeding the data to the model's forward function.\n\n        Args:\n            step: current iteration step to update sampler if using DDP (distributed)\n        \"\"\"\n        if self.world_size > 1 and step:\n            assert self.datamanager.train_sampler is not None\n            self.datamanager.train_sampler.set_epoch(step)\n        ray_bundle, batch = self.datamanager.next_train(step)\n        model_outputs = self.model(ray_bundle, batch)\n        metrics_dict = self.model.get_metrics_dict(model_outputs, batch)\n        loss_dict = self.model.get_loss_dict(model_outputs, batch, metrics_dict)\n\n        return model_outputs, loss_dict, metrics_dict\n\n    @profiler.time_function\n    def get_eval_loss_dict(self, step: int):\n        \"\"\"This function gets your evaluation loss dict. It needs to get the data\n        from the DataManager and feed it to the model's forward function\n\n        Args:\n            step: current iteration step\n        \"\"\"\n        self.eval()\n        if self.world_size > 1:\n            assert self.datamanager.eval_sampler is not None\n            self.datamanager.eval_sampler.set_epoch(step)\n        ray_bundle, batch = self.datamanager.next_eval(step)\n        model_outputs = self.model(ray_bundle, batch)\n        metrics_dict = self.model.get_metrics_dict(model_outputs, batch)\n        loss_dict = self.model.get_loss_dict(model_outputs, batch, metrics_dict)\n        self.train()\n        return model_outputs, loss_dict, metrics_dict\n\n    @abstractmethod\n    @profiler.time_function\n    def get_eval_image_metrics_and_images(self, step: int):\n        \"\"\"This function gets your evaluation loss dict. It needs to get the data\n        from the DataManager and feed it to the model's forward function\n\n        Args:\n            step: current iteration step\n        \"\"\"\n\n    @abstractmethod\n    @profiler.time_function\n    def get_average_eval_image_metrics(\n        self, step: Optional[int] = None, output_path: Optional[Path] = None, get_std: bool = False\n    ):\n        \"\"\"Iterate over all the images in the eval dataset and get the average.\n\n        Args:\n            step: current training step\n            output_path: optional path to save rendered images to\n            get_std: Set True if you want to return std with the mean metric.\n        \"\"\"\n\n    def load_pipeline(self, loaded_state: Dict[str, Any], step: int) -> None:\n        \"\"\"Load the checkpoint from the given path\n\n        Args:\n            loaded_state: pre-trained model state dict\n            step: training step of the loaded checkpoint\n        \"\"\"\n\n    @abstractmethod\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        \"\"\"Returns the training callbacks from both the Dataloader and the Model.\"\"\"\n\n    @abstractmethod\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the pipeline.\n\n        Returns:\n            A list of dictionaries containing the pipeline's param groups.\n        \"\"\"\n\n\n@dataclass\nclass VanillaPipelineConfig(InstantiateConfig):\n    \"\"\"Configuration for pipeline instantiation\"\"\"\n\n    _target: Type = field(default_factory=lambda: VanillaPipeline)\n    \"\"\"target class to instantiate\"\"\"\n    datamanager: DataManagerConfig = field(default_factory=DataManagerConfig)\n    \"\"\"specifies the datamanager config\"\"\"\n    model: ModelConfig = field(default_factory=ModelConfig)\n    \"\"\"specifies the model config\"\"\"\n\n\nclass VanillaPipeline(Pipeline):\n    \"\"\"The pipeline class for the vanilla nerf setup of multiple cameras for one or a few scenes.\n\n    Args:\n        config: configuration to instantiate pipeline\n        device: location to place model and data\n        test_mode:\n            'val': loads train/val datasets into memory\n            'test': loads train/test dataset into memory\n            'inference': does not load any dataset into memory\n        world_size: total number of machines available\n        local_rank: rank of current machine\n        grad_scaler: gradient scaler used in the trainer\n\n    Attributes:\n        datamanager: The data manager that will be used\n        model: The model that will be used\n    \"\"\"\n\n    def __init__(\n        self,\n        config: VanillaPipelineConfig,\n        device: str,\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        grad_scaler: Optional[GradScaler] = None,\n    ):\n        super().__init__()\n        self.config = config\n        self.test_mode = test_mode\n        self.datamanager: DataManager = config.datamanager.setup(\n            device=device, test_mode=test_mode, world_size=world_size, local_rank=local_rank\n        )\n        # TODO make cleaner\n        seed_pts = None\n        if (\n            hasattr(self.datamanager, \"train_dataparser_outputs\")\n            and \"points3D_xyz\" in self.datamanager.train_dataparser_outputs.metadata\n        ):\n            pts = self.datamanager.train_dataparser_outputs.metadata[\"points3D_xyz\"]\n            pts_rgb = self.datamanager.train_dataparser_outputs.metadata[\"points3D_rgb\"]\n            seed_pts = (pts, pts_rgb)\n        self.datamanager.to(device)\n        # TODO(ethan): get rid of scene_bounds from the model\n        assert self.datamanager.train_dataset is not None, \"Missing input dataset\"\n\n        self._model = config.model.setup(\n            scene_box=self.datamanager.train_dataset.scene_box,\n            num_train_data=len(self.datamanager.train_dataset),\n            metadata=self.datamanager.train_dataset.metadata,\n            device=device,\n            grad_scaler=grad_scaler,\n            seed_points=seed_pts,\n        )\n        self.model.to(device)\n\n        self.world_size = world_size\n        if world_size > 1:\n            self._model = typing.cast(Model, DDP(self._model, device_ids=[local_rank], find_unused_parameters=True))\n            dist.barrier(device_ids=[local_rank])\n\n    @property\n    def device(self):\n        \"\"\"Returns the device that the model is on.\"\"\"\n        return self.model.device\n\n    @profiler.time_function\n    def get_train_loss_dict(self, step: int):\n        \"\"\"This function gets your training loss dict. This will be responsible for\n        getting the next batch of data from the DataManager and interfacing with the\n        Model class, feeding the data to the model's forward function.\n\n        Args:\n            step: current iteration step to update sampler if using DDP (distributed)\n        \"\"\"\n        ray_bundle, batch = self.datamanager.next_train(step)\n        model_outputs = self._model(ray_bundle)  # train distributed data parallel model if world_size > 1\n        metrics_dict = self.model.get_metrics_dict(model_outputs, batch)\n        loss_dict = self.model.get_loss_dict(model_outputs, batch, metrics_dict)\n\n        return model_outputs, loss_dict, metrics_dict\n\n    def forward(self):\n        \"\"\"Blank forward method\n\n        This is an nn.Module, and so requires a forward() method normally, although in our case\n        we do not need a forward() method\"\"\"\n        raise NotImplementedError\n\n    @profiler.time_function\n    def get_eval_loss_dict(self, step: int) -> Tuple[Any, Dict[str, Any], Dict[str, Any]]:\n        \"\"\"This function gets your evaluation loss dict. It needs to get the data\n        from the DataManager and feed it to the model's forward function\n\n        Args:\n            step: current iteration step\n        \"\"\"\n        self.eval()\n        ray_bundle, batch = self.datamanager.next_eval(step)\n        model_outputs = self.model(ray_bundle)\n        metrics_dict = self.model.get_metrics_dict(model_outputs, batch)\n        loss_dict = self.model.get_loss_dict(model_outputs, batch, metrics_dict)\n        self.train()\n        return model_outputs, loss_dict, metrics_dict\n\n    @profiler.time_function\n    def get_eval_image_metrics_and_images(self, step: int):\n        \"\"\"This function gets your evaluation loss dict. It needs to get the data\n        from the DataManager and feed it to the model's forward function\n\n        Args:\n            step: current iteration step\n        \"\"\"\n        self.eval()\n        camera, batch = self.datamanager.next_eval_image(step)\n        outputs = self.model.get_outputs_for_camera(camera)\n        metrics_dict, images_dict = self.model.get_image_metrics_and_images(outputs, batch)\n        assert \"num_rays\" not in metrics_dict\n        metrics_dict[\"num_rays\"] = (camera.height * camera.width * camera.size).item()\n        self.train()\n        return metrics_dict, images_dict\n\n    @profiler.time_function\n    def get_average_image_metrics(\n        self,\n        data_loader,\n        image_prefix: str,\n        step: Optional[int] = None,\n        output_path: Optional[Path] = None,\n        get_std: bool = False,\n    ):\n        \"\"\"Iterate over all the images in the dataset and get the average.\n\n        Args:\n            data_loader: the data loader to iterate over\n            image_prefix: prefix to use for the saved image filenames\n            step: current training step\n            output_path: optional path to save rendered images to\n            get_std: Set True if you want to return std with the mean metric.\n\n        Returns:\n            metrics_dict: dictionary of metrics\n        \"\"\"\n        self.eval()\n        metrics_dict_list = []\n        num_images = len(data_loader)\n        if output_path is not None:\n            output_path.mkdir(exist_ok=True, parents=True)\n        with Progress(\n            TextColumn(\"[progress.description]{task.description}\"),\n            BarColumn(),\n            TimeElapsedColumn(),\n            MofNCompleteColumn(),\n            transient=True,\n        ) as progress:\n            task = progress.add_task(\"[green]Evaluating all images...\", total=num_images)\n            idx = 0\n            for camera, batch in data_loader:\n                # time this the following line\n                inner_start = time()\n                outputs = self.model.get_outputs_for_camera(camera=camera)\n                height, width = camera.height, camera.width\n                num_rays = height * width\n                metrics_dict, image_dict = self.model.get_image_metrics_and_images(outputs, batch)\n                if output_path is not None:\n                    for key in image_dict.keys():\n                        image = image_dict[key]  # [H, W, C] order\n                        vutils.save_image(\n                            image.permute(2, 0, 1).cpu(), output_path / f\"{image_prefix}_{key}_{idx:04d}.png\"\n                        )\n\n                assert \"num_rays_per_sec\" not in metrics_dict\n                metrics_dict[\"num_rays_per_sec\"] = (num_rays / (time() - inner_start)).item()\n                fps_str = \"fps\"\n                assert fps_str not in metrics_dict\n                metrics_dict[fps_str] = (metrics_dict[\"num_rays_per_sec\"] / (height * width)).item()\n                metrics_dict_list.append(metrics_dict)\n                progress.advance(task)\n                idx = idx + 1\n\n        metrics_dict = {}\n        for key in metrics_dict_list[0].keys():\n            if get_std:\n                key_std, key_mean = torch.std_mean(\n                    torch.tensor([metrics_dict[key] for metrics_dict in metrics_dict_list])\n                )\n                metrics_dict[key] = float(key_mean)\n                metrics_dict[f\"{key}_std\"] = float(key_std)\n            else:\n                metrics_dict[key] = float(\n                    torch.mean(torch.tensor([metrics_dict[key] for metrics_dict in metrics_dict_list]))\n                )\n\n        self.train()\n        return metrics_dict\n\n    @profiler.time_function\n    def get_average_eval_image_metrics(\n        self, step: Optional[int] = None, output_path: Optional[Path] = None, get_std: bool = False\n    ):\n        \"\"\"Get the average metrics for evaluation images.\"\"\"\n        assert hasattr(\n            self.datamanager, \"fixed_indices_eval_dataloader\"\n        ), \"datamanager must have 'fixed_indices_eval_dataloader' attribute\"\n        image_prefix = \"eval\"\n        return self.get_average_image_metrics(\n            self.datamanager.fixed_indices_eval_dataloader, image_prefix, step, output_path, get_std\n        )\n\n    def load_pipeline(self, loaded_state: Dict[str, Any], step: int) -> None:\n        \"\"\"Load the checkpoint from the given path\n\n        Args:\n            loaded_state: pre-trained model state dict\n            step: training step of the loaded checkpoint\n        \"\"\"\n        state = {\n            (key[len(\"module.\") :] if key.startswith(\"module.\") else key): value for key, value in loaded_state.items()\n        }\n        self.model.update_to_step(step)\n        self.load_state_dict(state)\n\n    def get_training_callbacks(\n        self, training_callback_attributes: TrainingCallbackAttributes\n    ) -> List[TrainingCallback]:\n        \"\"\"Returns the training callbacks from both the Dataloader and the Model.\"\"\"\n        datamanager_callbacks = self.datamanager.get_training_callbacks(training_callback_attributes)\n        model_callbacks = self.model.get_training_callbacks(training_callback_attributes)\n        callbacks = datamanager_callbacks + model_callbacks\n        return callbacks\n\n    def get_param_groups(self) -> Dict[str, List[Parameter]]:\n        \"\"\"Get the param groups for the pipeline.\n\n        Returns:\n            A list of dictionaries containing the pipeline's param groups.\n        \"\"\"\n        datamanager_params = self.datamanager.get_param_groups()\n        model_params = self.model.get_param_groups()\n        # TODO(ethan): assert that key names don't overlap\n        return {**datamanager_params, **model_params}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/pipelines/dynamic_batch.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nA pipeline that dynamically chooses the number of rays to sample.\n\"\"\"\n\nfrom dataclasses import dataclass, field\nfrom typing import Literal, Optional, Type\n\nimport torch\nfrom torch.cuda.amp.grad_scaler import GradScaler\n\nfrom nerfstudio.data.datamanagers.base_datamanager import VanillaDataManager\nfrom nerfstudio.pipelines.base_pipeline import VanillaPipeline, VanillaPipelineConfig\n\n\n@dataclass\nclass DynamicBatchPipelineConfig(VanillaPipelineConfig):\n    \"\"\"Dynamic Batch Pipeline Config\"\"\"\n\n    _target: Type = field(default_factory=lambda: DynamicBatchPipeline)\n    target_num_samples: int = 262144  # 1 << 18\n    \"\"\"The target number of samples to use for an entire batch of rays.\"\"\"\n    max_num_samples_per_ray: int = 1024  # 1 << 10\n    \"\"\"The maximum number of samples to be placed along a ray.\"\"\"\n\n\nclass DynamicBatchPipeline(VanillaPipeline):\n    \"\"\"Pipeline with logic for changing the number of rays per batch.\"\"\"\n\n    config: DynamicBatchPipelineConfig\n    datamanager: VanillaDataManager\n    dynamic_num_rays_per_batch: int\n\n    def __init__(\n        self,\n        config: DynamicBatchPipelineConfig,\n        device: str,\n        test_mode: Literal[\"test\", \"val\", \"inference\"] = \"val\",\n        world_size: int = 1,\n        local_rank: int = 0,\n        grad_scaler: Optional[GradScaler] = None,\n    ):\n        super().__init__(config, device, test_mode, world_size, local_rank)\n        assert isinstance(\n            self.datamanager, VanillaDataManager\n        ), \"DynamicBatchPipeline only works with VanillaDataManager.\"\n\n        self.dynamic_num_rays_per_batch = self.config.target_num_samples // self.config.max_num_samples_per_ray\n        self._update_pixel_samplers()\n\n    def _update_pixel_samplers(self):\n        \"\"\"Update the pixel samplers for train and eval with the dynamic number of rays per batch.\"\"\"\n        if self.datamanager.train_pixel_sampler is not None:\n            self.datamanager.train_pixel_sampler.set_num_rays_per_batch(self.dynamic_num_rays_per_batch)\n        if self.datamanager.eval_pixel_sampler is not None:\n            self.datamanager.eval_pixel_sampler.set_num_rays_per_batch(self.dynamic_num_rays_per_batch)\n\n    def _update_dynamic_num_rays_per_batch(self, num_samples_per_batch: int):\n        \"\"\"Updates the dynamic number of rays per batch variable,\n        based on the total number of samples in the last batch of rays.\"\"\"\n        self.dynamic_num_rays_per_batch = int(\n            self.dynamic_num_rays_per_batch * (self.config.target_num_samples / num_samples_per_batch)\n        )\n\n    def get_train_loss_dict(self, step: int):\n        model_outputs, loss_dict, metrics_dict = super().get_train_loss_dict(step)\n\n        # update the number of rays for the next step\n        if \"num_samples_per_batch\" not in metrics_dict:\n            raise ValueError(\n                \"'num_samples_per_batch' is not in metrics_dict.\"\n                \"Please return 'num_samples_per_batch' in the models get_metrics_dict function to use this method.\"\n            )\n        self._update_dynamic_num_rays_per_batch(int(metrics_dict[\"num_samples_per_batch\"]))\n        self._update_pixel_samplers()\n\n        # add the number of rays\n        assert \"num_rays_per_batch\" not in metrics_dict\n        assert self.datamanager.train_pixel_sampler is not None\n        metrics_dict[\"num_rays_per_batch\"] = torch.tensor(self.datamanager.train_pixel_sampler.num_rays_per_batch)\n\n        return model_outputs, loss_dict, metrics_dict\n\n    def get_eval_loss_dict(self, step: int):\n        model_outputs, loss_dict, metrics_dict = super().get_eval_loss_dict(step)\n\n        # add the number of rays\n        assert \"num_rays_per_batch\" not in metrics_dict\n        assert self.datamanager.eval_pixel_sampler is not None\n        metrics_dict[\"num_rays_per_batch\"] = torch.tensor(self.datamanager.eval_pixel_sampler.num_rays_per_batch)\n\n        return model_outputs, loss_dict, metrics_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/plugins/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/plugins/registry.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nModule that keeps all registered plugins and allows for plugin discovery.\n\"\"\"\n\nimport importlib\nimport os\nimport sys\nimport typing as t\n\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.plugins.types import MethodSpecification\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nif sys.version_info < (3, 10):\n    from importlib_metadata import entry_points\nelse:\n    from importlib.metadata import entry_points\n\n\ndef discover_methods() -> t.Tuple[t.Dict[str, TrainerConfig], t.Dict[str, str]]:\n    \"\"\"\n    Discovers all methods registered using the `nerfstudio.method_configs` entrypoint.\n    And also methods in the NERFSTUDIO_METHOD_CONFIGS environment variable.\n    \"\"\"\n    methods = {}\n    descriptions = {}\n    discovered_entry_points = entry_points(group=\"nerfstudio.method_configs\")\n    for name in discovered_entry_points.names:\n        spec = discovered_entry_points[name].load()\n        if not isinstance(spec, MethodSpecification):\n            CONSOLE.print(\n                f\"[bold yellow]Warning: Could not entry point {spec} as it is not an instance of MethodSpecification\"\n            )\n            continue\n        spec = t.cast(MethodSpecification, spec)\n        methods[spec.config.method_name] = spec.config\n        descriptions[spec.config.method_name] = spec.description\n\n    if \"NERFSTUDIO_METHOD_CONFIGS\" in os.environ:\n        try:\n            strings = os.environ[\"NERFSTUDIO_METHOD_CONFIGS\"].split(\",\")\n            for definition in strings:\n                if not definition:\n                    continue\n                name, path = definition.split(\"=\")\n                CONSOLE.print(f\"[bold green]Info: Loading method {name} from environment variable\")\n                module, config_name = path.split(\":\")\n                method_config = getattr(importlib.import_module(module), config_name)\n\n                # method_config specified as function or class -> instance\n                if callable(method_config):\n                    method_config = method_config()\n\n                # check for valid instance type\n                if not isinstance(method_config, MethodSpecification):\n                    raise TypeError(\"Method is not an instance of MethodSpecification\")\n\n                # save to methods\n                methods[name] = method_config.config\n                descriptions[name] = method_config.description\n        except Exception:\n            CONSOLE.print_exception()\n            CONSOLE.print(\"[bold red]Error: Could not load methods from environment variable NERFSTUDIO_METHOD_CONFIGS\")\n\n    return methods, descriptions\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/plugins/registry_dataparser.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nModule that keeps all registered plugins and allows for plugin discovery.\n\"\"\"\n\nimport importlib\nimport os\nimport sys\nimport typing as t\nfrom dataclasses import dataclass\n\nfrom rich.progress import Console\n\nfrom nerfstudio.data.dataparsers.base_dataparser import DataParserConfig\n\nif sys.version_info < (3, 10):\n    from importlib_metadata import entry_points\nelse:\n    from importlib.metadata import entry_points\nCONSOLE = Console(width=120)\n\n\n@dataclass\nclass DataParserSpecification:\n    \"\"\"\n    DataParser specification class used to register custom dataparsers with Nerfstudio.\n    The registered dataparsers will be available in commands such as `ns-train`\n    \"\"\"\n\n    config: DataParserConfig\n    \"\"\"Dataparser configuration\"\"\"\n\n    description: t.Optional[str] = None\n    \"\"\"Description of the dataparser\"\"\"\n\n\ndef discover_dataparsers() -> t.Tuple[t.Dict[str, DataParserConfig], t.Dict[str, str]]:\n    \"\"\"\n    Discovers all dataparsers registered using the `nerfstudio.dataparser_configs` entrypoint.\n    And also dataparsers in the NERFSTUDIO_DATAPARSER_CONFIGS environment variable.\n    \"\"\"\n    dataparsers = {}\n    descriptions = {}\n    discovered_entry_points = entry_points(group=\"nerfstudio.dataparser_configs\")\n    for name in discovered_entry_points.names:\n        spec = discovered_entry_points[name].load()\n        if not isinstance(spec, DataParserSpecification):\n            CONSOLE.print(\n                f\"[bold yellow]Warning: Could not entry point {spec} as it is not an instance of DataParserSpecification\"\n            )\n            continue\n        spec = t.cast(DataParserSpecification, spec)\n        dataparsers[name] = spec.config\n        descriptions[name] = spec.description\n\n    if \"NERFSTUDIO_DATAPARSER_CONFIGS\" in os.environ:\n        try:\n            strings = os.environ[\"NERFSTUDIO_DATAPARSER_CONFIGS\"].split(\",\")\n            for definition in strings:\n                if not definition:\n                    continue\n                name, path = definition.split(\"=\")\n                CONSOLE.print(f\"[bold green]Info: Loading method {name} from environment variable\")\n                module, config_name = path.split(\":\")\n                dataparser_config = getattr(importlib.import_module(module), config_name)\n\n                # method_config specified as function or class -> instance\n                if callable(dataparser_config):\n                    dataparser_config = dataparser_config()\n\n                # check for valid instance type\n                if not isinstance(dataparser_config, DataParserSpecification):\n                    raise TypeError(\"Method is not an instance of DataParserSpecification\")\n\n                # save to methods\n                dataparsers[name] = dataparser_config.config\n                descriptions[name] = dataparser_config.description\n        except Exception:  # pylint: disable=broad-except\n            CONSOLE.print_exception()\n            CONSOLE.print(\n                \"[bold red]Error: Could not load methods from environment variable NERFSTUDIO_DATAPARSER_CONFIGS\"\n            )\n\n    return dataparsers, descriptions\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/plugins/types.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nThis package contains specifications used to register plugins.\n\"\"\"\n\nfrom dataclasses import dataclass\n\nfrom nerfstudio.engine.trainer import TrainerConfig\n\n\n@dataclass\nclass MethodSpecification:\n    \"\"\"\n    Method specification class used to register custom methods with Nerfstudio.\n    The registered methods will be available in commands such as `ns-train`\n    \"\"\"\n\n    config: TrainerConfig\n    \"\"\"Trainer configuration\"\"\"\n    description: str\n    \"\"\"Method description shown in `ns-train` help\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/base_converter_to_nerfstudio_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nBase class to process images or video into a nerfstudio dataset\n\"\"\"\n\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional\n\n\n@dataclass\nclass BaseConverterToNerfstudioDataset(ABC):\n    \"\"\"Base class to process images or video into a nerfstudio dataset.\"\"\"\n\n    data: Path\n    \"\"\"Path the data, either a video file or a directory of images.\"\"\"\n    output_dir: Path\n    \"\"\"Path to the output directory.\"\"\"\n    eval_data: Optional[Path] = None\n    \"\"\"Path the eval data, either a video file or a directory of images. If set to None, the first will be used both for training and eval\"\"\"\n    verbose: bool = False\n    \"\"\"If True, print extra logging.\"\"\"\n\n    def __post_init__(self) -> None:\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        self.image_dir.mkdir(parents=True, exist_ok=True)\n\n    @property\n    def image_dir(self) -> Path:\n        return self.output_dir / \"images\"\n\n    @abstractmethod\n    def main(self) -> None:\n        \"\"\"This method implements the conversion logic for each type of data\"\"\"\n        raise NotImplementedError(\"the main method for conversion needs to be implemented\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/colmap_converter_to_nerfstudio_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Base class to processes a video or image sequence to a nerfstudio compatible dataset.\"\"\"\n\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Dict, List, Literal, Optional, Tuple\n\nfrom nerfstudio.process_data import colmap_utils, hloc_utils, process_data_utils\nfrom nerfstudio.process_data.base_converter_to_nerfstudio_dataset import BaseConverterToNerfstudioDataset\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\nfrom nerfstudio.utils import install_checks\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ColmapConverterToNerfstudioDataset(BaseConverterToNerfstudioDataset):\n    \"\"\"Base class to process images or video into a nerfstudio dataset using colmap\"\"\"\n\n    camera_type: Literal[\"perspective\", \"fisheye\", \"equirectangular\", \"pinhole\", \"simple_pinhole\"] = \"perspective\"\n    \"\"\"Camera model to use.\"\"\"\n    matching_method: Literal[\"exhaustive\", \"sequential\", \"vocab_tree\"] = \"vocab_tree\"\n    \"\"\"Feature matching method to use. Vocab tree is recommended for a balance of speed\n    and accuracy. Exhaustive is slower but more accurate. Sequential is faster but\n    should only be used for videos.\"\"\"\n    sfm_tool: Literal[\"any\", \"colmap\", \"hloc\"] = \"any\"\n    \"\"\"Structure from motion tool to use. Colmap will use sift features, hloc can use\n    many modern methods such as superpoint features and superglue matcher\"\"\"\n    refine_pixsfm: bool = False\n    \"\"\"If True, runs refinement using Pixel Perfect SFM.\n    Only works with hloc sfm_tool\"\"\"\n    refine_intrinsics: bool = True\n    \"\"\"If True, do bundle adjustment to refine intrinsics.\n    Only works with colmap sfm_tool\"\"\"\n    feature_type: Literal[\n        \"any\",\n        \"sift\",\n        \"superpoint\",\n        \"superpoint_aachen\",\n        \"superpoint_max\",\n        \"superpoint_inloc\",\n        \"r2d2\",\n        \"d2net-ss\",\n        \"sosnet\",\n        \"disk\",\n    ] = \"any\"\n    \"\"\"Type of feature to use.\"\"\"\n    matcher_type: Literal[\n        \"any\",\n        \"NN\",\n        \"superglue\",\n        \"superglue-fast\",\n        \"NN-superpoint\",\n        \"NN-ratio\",\n        \"NN-mutual\",\n        \"adalam\",\n        \"disk+lightglue\",\n        \"superpoint+lightglue\",\n    ] = \"any\"\n    \"\"\"Matching algorithm.\"\"\"\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3 will downscale the\n       images by 2x, 4x, and 8x.\"\"\"\n    skip_colmap: bool = False\n    \"\"\"If True, skips COLMAP and generates transforms.json if possible.\"\"\"\n    skip_image_processing: bool = False\n    \"\"\"If True, skips copying and downscaling of images and only runs COLMAP if possible and enabled\"\"\"\n    colmap_model_path: Path = Path(\"colmap/sparse/0\")\n    \"\"\"Optionally sets the path of the colmap model. Used only when --skip-colmap is set to True. The path is relative\n       to the output directory.\n    \"\"\"\n    colmap_cmd: str = \"colmap\"\n    \"\"\"How to call the COLMAP executable.\"\"\"\n    images_per_equirect: Literal[8, 14] = 8\n    \"\"\"Number of samples per image to take from each equirectangular image.\n       Used only when camera-type is equirectangular.\n    \"\"\"\n    crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0)\n    \"\"\"Portion of the image to crop. All values should be in [0,1]. (top, bottom, left, right)\"\"\"\n    crop_bottom: float = 0.0\n    \"\"\"Portion of the image to crop from the bottom.\n       Can be used instead of `crop-factor 0.0 [num] 0.0 0.0` Should be in [0,1].\n    \"\"\"\n    gpu: bool = True\n    \"\"\"If True, use GPU.\"\"\"\n    use_sfm_depth: bool = False\n    \"\"\"If True, export and use depth maps induced from SfM points.\"\"\"\n    include_depth_debug: bool = False\n    \"\"\"If --use-sfm-depth and this flag is True, also export debug images showing Sf overlaid upon input images.\"\"\"\n    same_dimensions: bool = True\n    \"\"\"Whether to assume all images are same dimensions and so to use fast downscaling with no autorotation.\"\"\"\n    use_single_camera_mode: bool = True\n    \"\"\"Whether to assume all images taken with the same camera characteristics, set to False for multiple cameras in colmap (only works with hloc sfm_tool).\n    \"\"\"\n\n    @staticmethod\n    def default_colmap_path() -> Path:\n        return Path(\"colmap/sparse/0\")\n\n    @property\n    def absolute_colmap_model_path(self) -> Path:\n        return self.output_dir / self.colmap_model_path\n\n    @property\n    def absolute_colmap_path(self) -> Path:\n        return self.output_dir / \"colmap\"\n\n    def _save_transforms(\n        self,\n        num_frames: int,\n        image_id_to_depth_path: Optional[Dict[int, Path]] = None,\n        camera_mask_path: Optional[Path] = None,\n        image_rename_map: Optional[Dict[str, str]] = None,\n    ) -> List[str]:\n        \"\"\"Save colmap transforms into the output folder\n\n        Args:\n            image_id_to_depth_path: When including sfm-based depth, embed these depth file paths in the exported json\n            image_rename_map: Use these image names instead of the names embedded in the COLMAP db\n        \"\"\"\n        summary_log = []\n        if (self.absolute_colmap_model_path / \"cameras.bin\").exists():\n            with CONSOLE.status(\"[bold yellow]Saving results to transforms.json\", spinner=\"balloon\"):\n                num_matched_frames = colmap_utils.colmap_to_json(\n                    recon_dir=self.absolute_colmap_model_path,\n                    output_dir=self.output_dir,\n                    image_id_to_depth_path=image_id_to_depth_path,\n                    camera_mask_path=camera_mask_path,\n                    image_rename_map=image_rename_map,\n                    use_single_camera_mode=self.use_single_camera_mode,\n                )\n                summary_log.append(f\"Colmap matched {num_matched_frames} images\")\n            summary_log.append(colmap_utils.get_matching_summary(num_frames, num_matched_frames))\n\n        else:\n            CONSOLE.log(\n                \"[bold yellow]Warning: Could not find existing COLMAP results. \" \"Not generating transforms.json\"\n            )\n        return summary_log\n\n    def _export_depth(self) -> Tuple[Optional[Dict[int, Path]], List[str]]:\n        \"\"\"If SFM is used for creating depth image, this method will create the depth images from image in\n        `self.image_dir`.\n\n        Returns:\n            Depth file paths indexed by COLMAP image id, logs\n        \"\"\"\n        summary_log = []\n        if self.use_sfm_depth:\n            depth_dir = self.output_dir / \"depth\"\n            depth_dir.mkdir(parents=True, exist_ok=True)\n            image_id_to_depth_path = colmap_utils.create_sfm_depth(\n                recon_dir=self.absolute_colmap_model_path\n                if self.skip_colmap\n                else self.output_dir / self.default_colmap_path(),\n                output_dir=depth_dir,\n                include_depth_debug=self.include_depth_debug,\n                input_images_dir=self.image_dir,\n                verbose=self.verbose,\n            )\n            summary_log.append(\n                process_data_utils.downscale_images(\n                    depth_dir,\n                    self.num_downscales,\n                    folder_name=\"depths\",\n                    nearest_neighbor=True,\n                    verbose=self.verbose,\n                )\n            )\n            return image_id_to_depth_path, summary_log\n        return None, summary_log\n\n    def _run_colmap(self, mask_path: Optional[Path] = None):\n        \"\"\"\n        Args:\n            mask_path: Path to the camera mask. Defaults to None.\n        \"\"\"\n        self.absolute_colmap_path.mkdir(parents=True, exist_ok=True)\n\n        (\n            sfm_tool,\n            feature_type,\n            matcher_type,\n        ) = process_data_utils.find_tool_feature_matcher_combination(\n            self.sfm_tool, self.feature_type, self.matcher_type\n        )\n        # check that sfm_tool is hloc if using refine_pixsfm\n        if self.refine_pixsfm:\n            assert sfm_tool == \"hloc\", \"refine_pixsfm only works with sfm_tool hloc\"\n\n        # check that sfm_tool is hloc if using use_single_camera_mode\n        if not self.use_single_camera_mode:\n            assert sfm_tool == \"hloc\", \"not_use_single_camera_mode only works with sfm_tool hloc\"\n\n        # set the image_dir if didn't copy\n        if self.skip_image_processing:\n            image_dir = self.data\n        else:\n            image_dir = self.image_dir\n\n        if sfm_tool == \"colmap\":\n            colmap_utils.run_colmap(\n                image_dir=image_dir,\n                colmap_dir=self.absolute_colmap_path,\n                camera_model=CAMERA_MODELS[self.camera_type],\n                camera_mask_path=mask_path,\n                gpu=self.gpu,\n                verbose=self.verbose,\n                matching_method=self.matching_method,\n                refine_intrinsics=self.refine_intrinsics,\n                colmap_cmd=self.colmap_cmd,\n            )\n        elif sfm_tool == \"hloc\":\n            if mask_path is not None:\n                raise RuntimeError(\"Cannot use a mask with hloc. Please remove the cropping options \" \"and try again.\")\n\n            assert feature_type is not None\n            assert matcher_type is not None\n            assert matcher_type != \"NN\"  # Only used for colmap.\n            hloc_utils.run_hloc(\n                image_dir=image_dir,\n                colmap_dir=self.absolute_colmap_path,\n                camera_model=CAMERA_MODELS[self.camera_type],\n                verbose=self.verbose,\n                matching_method=self.matching_method,\n                feature_type=feature_type,\n                matcher_type=matcher_type,\n                refine_pixsfm=self.refine_pixsfm,\n                use_single_camera_mode=self.use_single_camera_mode,\n            )\n        else:\n            raise RuntimeError(\"Invalid combination of sfm_tool, feature_type, and matcher_type, \" \"exiting\")\n\n    def __post_init__(self) -> None:\n        super().__post_init__()\n        install_checks.check_ffmpeg_installed()\n        install_checks.check_colmap_installed(self.colmap_cmd)\n\n        if self.crop_bottom < 0.0 or self.crop_bottom > 1:\n            raise RuntimeError(\"crop_bottom must be set between 0 and 1.\")\n\n        if self.crop_bottom > 0.0:\n            self.crop_factor = (0.0, self.crop_bottom, 0.0, 0.0)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/colmap_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nTools supporting the execution of COLMAP and preparation of COLMAP-based datasets for nerfstudio training.\n\"\"\"\n\nimport json\nfrom pathlib import Path\nfrom typing import Any, Dict, Literal, Optional, Union\n\nimport appdirs\nimport cv2\nimport numpy as np\nimport requests\nimport torch\nfrom packaging.version import Version\nfrom rich.progress import track\n\n# TODO(1480) use pycolmap instead of colmap_parsing_utils\n# import pycolmap\nfrom nerfstudio.data.utils.colmap_parsing_utils import (\n    qvec2rotmat,\n    read_cameras_binary,\n    read_images_binary,\n    read_points3D_binary,\n    read_points3D_text,\n)\nfrom nerfstudio.process_data.process_data_utils import CameraModel\nfrom nerfstudio.utils import colormaps\nfrom nerfstudio.utils.rich_utils import CONSOLE, status\nfrom nerfstudio.utils.scripts import run_command\n\n\ndef get_colmap_version(colmap_cmd: str, default_version: str = \"3.8\") -> Version:\n    \"\"\"Returns the version of COLMAP.\n    This code assumes that colmap returns a version string of the form\n    \"COLMAP 3.8 ...\" which may not be true for all versions of COLMAP.\n\n    Args:\n        default_version: Default version to return if COLMAP version can't be determined.\n    Returns:\n        The version of COLMAP.\n    \"\"\"\n    output = run_command(f\"{colmap_cmd} -h\", verbose=False)\n    assert output is not None\n    for line in output.split(\"\\n\"):\n        if line.startswith(\"COLMAP\"):\n            version = line.split(\" \")[1]\n            version = Version(version)\n            return version\n    CONSOLE.print(f\"[bold red]Could not find COLMAP version. Using default {default_version}\")\n    return Version(default_version)\n\n\ndef get_vocab_tree() -> Path:\n    \"\"\"Return path to vocab tree. Downloads vocab tree if it doesn't exist.\n\n    Returns:\n        The path to the vocab tree.\n    \"\"\"\n    vocab_tree_filename = Path(appdirs.user_data_dir(\"nerfstudio\")) / \"vocab_tree.fbow\"\n\n    if not vocab_tree_filename.exists():\n        r = requests.get(\"https://demuc.de/colmap/vocab_tree_flickr100K_words32K.bin\", stream=True)\n        vocab_tree_filename.parent.mkdir(parents=True, exist_ok=True)\n        with open(vocab_tree_filename, \"wb\") as f:\n            total_length = r.headers.get(\"content-length\")\n            assert total_length is not None\n            for chunk in track(\n                r.iter_content(chunk_size=1024),\n                total=int(total_length) / 1024 + 1,\n                description=\"Downloading vocab tree...\",\n            ):\n                if chunk:\n                    f.write(chunk)\n                    f.flush()\n    return vocab_tree_filename\n\n\ndef run_colmap(\n    image_dir: Path,\n    colmap_dir: Path,\n    camera_model: CameraModel,\n    camera_mask_path: Optional[Path] = None,\n    gpu: bool = True,\n    verbose: bool = False,\n    matching_method: Literal[\"vocab_tree\", \"exhaustive\", \"sequential\"] = \"vocab_tree\",\n    refine_intrinsics: bool = True,\n    colmap_cmd: str = \"colmap\",\n) -> None:\n    \"\"\"Runs COLMAP on the images.\n\n    Args:\n        image_dir: Path to the directory containing the images.\n        colmap_dir: Path to the output directory.\n        camera_model: Camera model to use.\n        camera_mask_path: Path to the camera mask.\n        gpu: If True, use GPU.\n        verbose: If True, logs the output of the command.\n        matching_method: Matching method to use.\n        refine_intrinsics: If True, refine intrinsics.\n        colmap_cmd: Path to the COLMAP executable.\n    \"\"\"\n\n    colmap_version = get_colmap_version(colmap_cmd)\n\n    colmap_database_path = colmap_dir / \"database.db\"\n    colmap_database_path.unlink(missing_ok=True)\n\n    # Feature extraction\n    feature_extractor_cmd = [\n        f\"{colmap_cmd} feature_extractor\",\n        f\"--database_path {colmap_dir / 'database.db'}\",\n        f\"--image_path {image_dir}\",\n        \"--ImageReader.single_camera 1\",\n        f\"--ImageReader.camera_model {camera_model.value}\",\n        f\"--SiftExtraction.use_gpu {int(gpu)}\",\n    ]\n    if camera_mask_path is not None:\n        feature_extractor_cmd.append(f\"--ImageReader.camera_mask_path {camera_mask_path}\")\n    feature_extractor_cmd = \" \".join(feature_extractor_cmd)\n    with status(msg=\"[bold yellow]Running COLMAP feature extractor...\", spinner=\"moon\", verbose=verbose):\n        run_command(feature_extractor_cmd, verbose=verbose)\n\n    CONSOLE.log(\"[bold green]:tada: Done extracting COLMAP features.\")\n\n    # Feature matching\n    feature_matcher_cmd = [\n        f\"{colmap_cmd} {matching_method}_matcher\",\n        f\"--database_path {colmap_dir / 'database.db'}\",\n        f\"--SiftMatching.use_gpu {int(gpu)}\",\n    ]\n    if matching_method == \"vocab_tree\":\n        vocab_tree_filename = get_vocab_tree()\n        feature_matcher_cmd.append(f'--VocabTreeMatching.vocab_tree_path \"{vocab_tree_filename}\"')\n    feature_matcher_cmd = \" \".join(feature_matcher_cmd)\n    with status(msg=\"[bold yellow]Running COLMAP feature matcher...\", spinner=\"runner\", verbose=verbose):\n        run_command(feature_matcher_cmd, verbose=verbose)\n    CONSOLE.log(\"[bold green]:tada: Done matching COLMAP features.\")\n\n    # Bundle adjustment\n    sparse_dir = colmap_dir / \"sparse\"\n    sparse_dir.mkdir(parents=True, exist_ok=True)\n    mapper_cmd = [\n        f\"{colmap_cmd} mapper\",\n        f\"--database_path {colmap_dir / 'database.db'}\",\n        f\"--image_path {image_dir}\",\n        f\"--output_path {sparse_dir}\",\n    ]\n    if colmap_version >= Version(\"3.7\"):\n        mapper_cmd.append(\"--Mapper.ba_global_function_tolerance=1e-6\")\n\n    mapper_cmd = \" \".join(mapper_cmd)\n\n    with status(\n        msg=\"[bold yellow]Running COLMAP bundle adjustment... (This may take a while)\",\n        spinner=\"circle\",\n        verbose=verbose,\n    ):\n        run_command(mapper_cmd, verbose=verbose)\n    CONSOLE.log(\"[bold green]:tada: Done COLMAP bundle adjustment.\")\n\n    if refine_intrinsics:\n        with status(msg=\"[bold yellow]Refine intrinsics...\", spinner=\"dqpb\", verbose=verbose):\n            bundle_adjuster_cmd = [\n                f\"{colmap_cmd} bundle_adjuster\",\n                f\"--input_path {sparse_dir}/0\",\n                f\"--output_path {sparse_dir}/0\",\n                \"--BundleAdjustment.refine_principal_point 1\",\n            ]\n            run_command(\" \".join(bundle_adjuster_cmd), verbose=verbose)\n        CONSOLE.log(\"[bold green]:tada: Done refining intrinsics.\")\n\n\ndef parse_colmap_camera_params(camera) -> Dict[str, Any]:\n    \"\"\"\n    Parses all currently supported COLMAP cameras into the transforms.json metadata\n\n    Args:\n        camera: COLMAP camera\n    Returns:\n        transforms.json metadata containing camera's intrinsics and distortion parameters\n\n    \"\"\"\n    out: Dict[str, Any] = {\n        \"w\": camera.width,\n        \"h\": camera.height,\n    }\n\n    # Parameters match https://github.com/colmap/colmap/blob/dev/src/base/camera_models.h\n    camera_params = camera.params\n    if camera.model == \"SIMPLE_PINHOLE\":\n        # du = 0\n        # dv = 0\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[0])\n        out[\"cx\"] = float(camera_params[1])\n        out[\"cy\"] = float(camera_params[2])\n        out[\"k1\"] = 0.0\n        out[\"k2\"] = 0.0\n        out[\"p1\"] = 0.0\n        out[\"p2\"] = 0.0\n        camera_model = CameraModel.OPENCV\n    elif camera.model == \"PINHOLE\":\n        # f, cx, cy, k\n\n        # du = 0\n        # dv = 0\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[1])\n        out[\"cx\"] = float(camera_params[2])\n        out[\"cy\"] = float(camera_params[3])\n        out[\"k1\"] = 0.0\n        out[\"k2\"] = 0.0\n        out[\"p1\"] = 0.0\n        out[\"p2\"] = 0.0\n        camera_model = CameraModel.OPENCV\n    elif camera.model == \"SIMPLE_RADIAL\":\n        # f, cx, cy, k\n\n        # r2 = u**2 + v**2;\n        # radial = k * r2\n        # du = u * radial\n        # dv = u * radial\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[0])\n        out[\"cx\"] = float(camera_params[1])\n        out[\"cy\"] = float(camera_params[2])\n        out[\"k1\"] = float(camera_params[3])\n        out[\"k2\"] = 0.0\n        out[\"p1\"] = 0.0\n        out[\"p2\"] = 0.0\n        camera_model = CameraModel.OPENCV\n    elif camera.model == \"RADIAL\":\n        # f, cx, cy, k1, k2\n\n        # r2 = u**2 + v**2;\n        # radial = k1 * r2 + k2 * r2 ** 2\n        # du = u * radial\n        # dv = v * radial\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[0])\n        out[\"cx\"] = float(camera_params[1])\n        out[\"cy\"] = float(camera_params[2])\n        out[\"k1\"] = float(camera_params[3])\n        out[\"k2\"] = float(camera_params[4])\n        out[\"p1\"] = 0.0\n        out[\"p2\"] = 0.0\n        camera_model = CameraModel.OPENCV\n    elif camera.model == \"OPENCV\":\n        # fx, fy, cx, cy, k1, k2, p1, p2\n\n        # uv = u * v;\n        # r2 = u**2 + v**2\n        # radial = k1 * r2 + k2 * r2 ** 2\n        # du = u * radial + 2 * p1 * u*v + p2 * (r2 + 2 * u**2)\n        # dv = v * radial + 2 * p2 * u*v + p1 * (r2 + 2 * v**2)\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[1])\n        out[\"cx\"] = float(camera_params[2])\n        out[\"cy\"] = float(camera_params[3])\n        out[\"k1\"] = float(camera_params[4])\n        out[\"k2\"] = float(camera_params[5])\n        out[\"p1\"] = float(camera_params[6])\n        out[\"p2\"] = float(camera_params[7])\n        camera_model = CameraModel.OPENCV\n    elif camera.model == \"OPENCV_FISHEYE\":\n        # fx, fy, cx, cy, k1, k2, k3, k4\n\n        # r = sqrt(u**2 + v**2)\n\n        # if r > eps:\n        #    theta = atan(r)\n        #    theta2 = theta ** 2\n        #    theta4 = theta2 ** 2\n        #    theta6 = theta4 * theta2\n        #    theta8 = theta4 ** 2\n        #    thetad = theta * (1 + k1 * theta2 + k2 * theta4 + k3 * theta6 + k4 * theta8)\n        #    du = u * thetad / r - u;\n        #    dv = v * thetad / r - v;\n        # else:\n        #    du = dv = 0\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[1])\n        out[\"cx\"] = float(camera_params[2])\n        out[\"cy\"] = float(camera_params[3])\n        out[\"k1\"] = float(camera_params[4])\n        out[\"k2\"] = float(camera_params[5])\n        out[\"k3\"] = float(camera_params[6])\n        out[\"k4\"] = float(camera_params[7])\n        camera_model = CameraModel.OPENCV_FISHEYE\n    elif camera.model == \"FULL_OPENCV\":\n        # fx, fy, cx, cy, k1, k2, p1, p2, k3, k4, k5, k6\n\n        # u2 = u ** 2\n        # uv = u * v\n        # v2 = v ** 2\n        # r2 = u2 + v2\n        # r4 = r2 * r2\n        # r6 = r4 * r2\n        # radial = (1 + k1 * r2 + k2 * r4 + k3 * r6) /\n        #          (1 + k4 * r2 + k5 * r4 + k6 * r6)\n        # du = u * radial + 2 * p1 * uv + p2 * (r2 + 2 * u2) - u\n        # dv = v * radial + 2 * p2 * uv + p1 * (r2 + 2 * v2) - v\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[1])\n        out[\"cx\"] = float(camera_params[2])\n        out[\"cy\"] = float(camera_params[3])\n        out[\"k1\"] = float(camera_params[4])\n        out[\"k2\"] = float(camera_params[5])\n        out[\"p1\"] = float(camera_params[6])\n        out[\"p2\"] = float(camera_params[7])\n        out[\"k3\"] = float(camera_params[8])\n        out[\"k4\"] = float(camera_params[9])\n        out[\"k5\"] = float(camera_params[10])\n        out[\"k6\"] = float(camera_params[11])\n        raise NotImplementedError(f\"{camera.model} camera model is not supported yet!\")\n    elif camera.model == \"FOV\":\n        # fx, fy, cx, cy, omega\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[1])\n        out[\"cx\"] = float(camera_params[2])\n        out[\"cy\"] = float(camera_params[3])\n        out[\"omega\"] = float(camera_params[4])\n        raise NotImplementedError(f\"{camera.model} camera model is not supported yet!\")\n    elif camera.model == \"SIMPLE_RADIAL_FISHEYE\":\n        # f, cx, cy, k\n\n        # r = sqrt(u ** 2 + v ** 2)\n        # if r > eps:\n        #     theta = atan(r)\n        #     theta2 = theta ** 2\n        #     thetad = theta * (1 + k * theta2)\n        #     du = u * thetad / r - u;\n        #     dv = v * thetad / r - v;\n        # else:\n        #     du = dv = 0\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[0])\n        out[\"cx\"] = float(camera_params[1])\n        out[\"cy\"] = float(camera_params[2])\n        out[\"k1\"] = float(camera_params[3])\n        out[\"k2\"] = 0.0\n        out[\"k3\"] = 0.0\n        out[\"k4\"] = 0.0\n        camera_model = CameraModel.OPENCV_FISHEYE\n    elif camera.model == \"RADIAL_FISHEYE\":\n        # f, cx, cy, k1, k2\n\n        # r = sqrt(u ** 2 + v ** 2)\n        # if r > eps:\n        #     theta = atan(r)\n        #     theta2 = theta ** 2\n        #     theta4 = theta2 ** 2\n        #     thetad = theta * (1 + k * theta2)\n        #     thetad = theta * (1 + k1 * theta2 + k2 * theta4)\n        #     du = u * thetad / r - u;\n        #     dv = v * thetad / r - v;\n        # else:\n        #     du = dv = 0\n        out[\"fl_x\"] = float(camera_params[0])\n        out[\"fl_y\"] = float(camera_params[0])\n        out[\"cx\"] = float(camera_params[1])\n        out[\"cy\"] = float(camera_params[2])\n        out[\"k1\"] = float(camera_params[3])\n        out[\"k2\"] = float(camera_params[4])\n        out[\"k3\"] = 0\n        out[\"k4\"] = 0\n        camera_model = CameraModel.OPENCV_FISHEYE\n    else:\n        # THIN_PRISM_FISHEYE not supported!\n        raise NotImplementedError(f\"{camera.model} camera model is not supported yet!\")\n\n    out[\"camera_model\"] = camera_model.value\n    return out\n\n\ndef colmap_to_json(\n    recon_dir: Path,\n    output_dir: Path,\n    camera_mask_path: Optional[Path] = None,\n    image_id_to_depth_path: Optional[Dict[int, Path]] = None,\n    image_rename_map: Optional[Dict[str, str]] = None,\n    ply_filename=\"sparse_pc.ply\",\n    keep_original_world_coordinate: bool = False,\n    use_single_camera_mode: bool = True,\n) -> int:\n    \"\"\"Converts COLMAP's cameras.bin and images.bin to a JSON file.\n\n    Args:\n        recon_dir: Path to the reconstruction directory, e.g. \"sparse/0\"\n        output_dir: Path to the output directory.\n        camera_model: Camera model used.\n        camera_mask_path: Path to the camera mask.\n        image_id_to_depth_path: When including sfm-based depth, embed these depth file paths in the exported json\n        image_rename_map: Use these image names instead of the names embedded in the COLMAP db\n        keep_original_world_coordinate: If True, no extra transform will be applied to world coordinate.\n                    Colmap optimized world often have y direction of the first camera pointing towards down direction,\n                    while nerfstudio world set z direction to be up direction for viewer.\n    Returns:\n        The number of registered images.\n    \"\"\"\n\n    # TODO(1480) use pycolmap\n    # recon = pycolmap.Reconstruction(recon_dir)\n    # cam_id_to_camera = recon.cameras\n    # im_id_to_image = recon.images\n    cam_id_to_camera = read_cameras_binary(recon_dir / \"cameras.bin\")\n    im_id_to_image = read_images_binary(recon_dir / \"images.bin\")\n    if set(cam_id_to_camera.keys()) != {1}:\n        CONSOLE.print(f\"[bold yellow]Warning: More than one camera is found in {recon_dir}\")\n        print(cam_id_to_camera)\n        use_single_camera_mode = False  # update bool: one camera per frame\n        out = {}  # out = {\"camera_model\": parse_colmap_camera_params(cam_id_to_camera[1])[\"camera_model\"]}\n    else:  # one camera for all frames\n        out = parse_colmap_camera_params(cam_id_to_camera[1])\n\n    frames = []\n    for im_id, im_data in im_id_to_image.items():\n        # NB: COLMAP uses Eigen / scalar-first quaternions\n        # * https://colmap.github.io/format.html\n        # * https://github.com/colmap/colmap/blob/bf3e19140f491c3042bfd85b7192ef7d249808ec/src/base/pose.cc#L75\n        # the `rotation_matrix()` handles that format for us.\n\n        # TODO(1480) BEGIN use pycolmap API\n        # rotation = im_data.rotation_matrix()\n        rotation = qvec2rotmat(im_data.qvec)\n\n        translation = im_data.tvec.reshape(3, 1)\n        w2c = np.concatenate([rotation, translation], 1)\n        w2c = np.concatenate([w2c, np.array([[0, 0, 0, 1]])], 0)\n        c2w = np.linalg.inv(w2c)\n        # Convert from COLMAP's camera coordinate system (OpenCV) to ours (OpenGL)\n        c2w[0:3, 1:3] *= -1\n        if not keep_original_world_coordinate:\n            c2w = c2w[np.array([0, 2, 1, 3]), :]\n            c2w[2, :] *= -1\n\n        name = im_data.name\n        if image_rename_map is not None:\n            name = image_rename_map[name]\n        name = Path(f\"./images/{name}\")\n\n        frame = {\n            \"file_path\": name.as_posix(),\n            \"transform_matrix\": c2w.tolist(),\n            \"colmap_im_id\": im_id,\n        }\n        if camera_mask_path is not None:\n            frame[\"mask_path\"] = camera_mask_path.relative_to(camera_mask_path.parent.parent).as_posix()\n        if image_id_to_depth_path is not None:\n            depth_path = image_id_to_depth_path[im_id]\n            frame[\"depth_file_path\"] = str(depth_path.relative_to(depth_path.parent.parent))\n\n        if not use_single_camera_mode:  # add the camera parameters for this frame\n            frame.update(parse_colmap_camera_params(cam_id_to_camera[im_data.camera_id]))\n\n        frames.append(frame)\n\n    out[\"frames\"] = frames\n\n    applied_transform = None\n    if not keep_original_world_coordinate:\n        applied_transform = np.eye(4)[:3, :]\n        applied_transform = applied_transform[np.array([0, 2, 1]), :]\n        applied_transform[2, :] *= -1\n        out[\"applied_transform\"] = applied_transform.tolist()\n\n    # create ply from colmap\n    assert ply_filename.endswith(\".ply\"), f\"ply_filename: {ply_filename} does not end with '.ply'\"\n    create_ply_from_colmap(\n        ply_filename,\n        recon_dir,\n        output_dir,\n        torch.from_numpy(applied_transform).float() if applied_transform is not None else None,\n    )\n    out[\"ply_file_path\"] = ply_filename\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(out, f, indent=4)\n\n    return len(frames)\n\n\ndef create_sfm_depth(\n    recon_dir: Path,\n    output_dir: Path,\n    verbose: bool = True,\n    depth_scale_to_integer_factor: float = 1000.0,\n    min_depth: float = 0.001,\n    max_depth: float = 10000,\n    max_repoj_err: float = 2.5,\n    min_n_visible: int = 2,\n    include_depth_debug: bool = False,\n    input_images_dir: Optional[Path] = None,\n) -> Dict[int, Path]:\n    \"\"\"Converts COLMAP's points3d.bin to sparse depth map images encoded as\n    16-bit \"millimeter depth\" PNGs.\n\n    Notes:\n     * This facility does NOT use COLMAP dense reconstruction; it creates depth\n        maps from sparse SfM points here.\n     * COLMAP does *not* reconstruct metric depth unless you give it calibrated\n        (metric) intrinsics as input. Therefore, \"depth\" in this function has\n        potentially ambiguous units.\n\n    Args:\n        recon_dir: Path to the reconstruction directory, e.g. \"sparse/0\"\n        output_dir: Path to the output directory.\n        verbose: If True, logs progress of depth image creation.\n        depth_scale_to_integer_factor: Use this parameter to tune the conversion of\n          raw depth measurements to integer depth values.  This value should\n          be equal to 1. / `depth_unit_scale_factor`, where\n          `depth_unit_scale_factor` is the value you provide at training time.\n          E.g. for millimeter depth, leave `depth_unit_scale_factor` at 1e-3\n          and depth_scale_to_integer_factor at 1000.\n        min_depth: Discard points closer than this to the camera.\n        max_depth: Discard points farther than this from the camera.\n        max_repoj_err: Discard points with reprojection error greater than this\n          amount (in pixels).\n        min_n_visible: Discard 3D points that have been triangulated with fewer\n          than this many frames.\n        include_depth_debug: Also include debug images showing depth overlaid\n          upon RGB.\n    Returns:\n        Depth file paths indexed by COLMAP image id\n    \"\"\"\n\n    # TODO(1480) use pycolmap\n    # recon = pycolmap.Reconstruction(recon_dir)\n    # ptid_to_info = recon.points3D\n    # cam_id_to_camera = recon.cameras\n    # im_id_to_image = recon.images\n    ptid_to_info = read_points3D_binary(recon_dir / \"points3D.bin\")\n    cam_id_to_camera = read_cameras_binary(recon_dir / \"cameras.bin\")\n    im_id_to_image = read_images_binary(recon_dir / \"images.bin\")\n\n    # Only support first camera\n    CAMERA_ID = 1\n    W = cam_id_to_camera[CAMERA_ID].width\n    H = cam_id_to_camera[CAMERA_ID].height\n\n    if verbose:\n        iter_images = track(\n            im_id_to_image.items(), total=len(im_id_to_image.items()), description=\"Creating depth maps ...\"\n        )\n    else:\n        iter_images = iter(im_id_to_image.items())\n\n    image_id_to_depth_path = {}\n    for im_id, im_data in iter_images:\n        # TODO(1480) BEGIN delete when abandoning colmap_parsing_utils\n        pids = [pid for pid in im_data.point3D_ids if pid != -1]\n        xyz_world = np.array([ptid_to_info[pid].xyz for pid in pids])\n        rotation = qvec2rotmat(im_data.qvec)\n        z = (rotation @ xyz_world.T)[-1] + im_data.tvec[-1]\n        errors = np.array([ptid_to_info[pid].error for pid in pids])\n        n_visible = np.array([len(ptid_to_info[pid].image_ids) for pid in pids])\n        uv = np.array([im_data.xys[i] for i in range(len(im_data.xys)) if im_data.point3D_ids[i] != -1])\n        # TODO(1480) END delete when abandoning colmap_parsing_utils\n\n        # TODO(1480) BEGIN use pycolmap API\n\n        # # Get only keypoints that have corresponding triangulated 3D points\n        # p2ds = im_data.get_valid_points2D()\n\n        # xyz_world = np.array([ptid_to_info[p2d.point3D_id].xyz for p2d in p2ds])\n\n        # # COLMAP OpenCV convention: z is always positive\n        # z = (im_data.rotation_matrix() @ xyz_world.T)[-1] + im_data.tvec[-1]\n\n        # # Mean reprojection error in image space\n        # errors = np.array([ptid_to_info[p2d.point3D_id].error for p2d in p2ds])\n\n        # # Number of frames in which each frame is visible\n        # n_visible = np.array([ptid_to_info[p2d.point3D_id].track.length() for p2d in p2ds])\n\n        # Note: these are *unrectified* pixel coordinates that should match the original input\n        # no matter the camera model\n        # uv = np.array([p2d.xy for p2d in p2ds])\n\n        # TODO(1480) END use pycolmap API\n\n        idx = np.where(\n            (z >= min_depth)\n            & (z <= max_depth)\n            & (errors <= max_repoj_err)\n            & (n_visible >= min_n_visible)\n            & (uv[:, 0] >= 0)\n            & (uv[:, 0] < W)\n            & (uv[:, 1] >= 0)\n            & (uv[:, 1] < H)\n        )\n        z = z[idx]\n        uv = uv[idx]\n\n        uu, vv = uv[:, 0].astype(int), uv[:, 1].astype(int)\n        depth = np.zeros((H, W), dtype=np.float32)\n        depth[vv, uu] = z\n\n        # E.g. if `depth` is metric and in units of meters, and `depth_scale_to_integer_factor`\n        # is 1000, then `depth_img` will be integer millimeters.\n        depth_img = (depth_scale_to_integer_factor * depth).astype(np.uint16)\n\n        out_name = str(im_data.name)\n        depth_path = output_dir / out_name\n        if depth_path.suffix == \".jpg\":\n            depth_path = depth_path.with_suffix(\".png\")\n        cv2.imwrite(str(depth_path), depth_img)  # type: ignore\n\n        image_id_to_depth_path[im_id] = depth_path\n\n        if include_depth_debug:\n            assert input_images_dir is not None, \"Need explicit input_images_dir for debug images\"\n            assert input_images_dir.exists(), input_images_dir\n\n            depth_flat = depth.flatten()[:, None]\n            overlay = 255.0 * colormaps.apply_depth_colormap(torch.from_numpy(depth_flat)).numpy()\n            overlay = overlay.reshape([H, W, 3])\n            input_image_path = input_images_dir / im_data.name\n            input_image = cv2.imread(str(input_image_path))  # type: ignore\n            debug = 0.3 * input_image + 0.7 + overlay\n\n            out_name = out_name + \".debug.jpg\"\n            output_path = output_dir / \"debug_depth\" / out_name\n            output_path.parent.mkdir(parents=True, exist_ok=True)\n            cv2.imwrite(str(output_path), debug.astype(np.uint8))  # type: ignore\n\n    return image_id_to_depth_path\n\n\ndef get_matching_summary(num_initial_frames: int, num_matched_frames: int) -> str:\n    \"\"\"Returns a summary of the matching results.\n\n    Args:\n        num_initial_frames: The number of initial frames.\n        num_matched_frames: The number of matched frames.\n\n    Returns:\n        A summary of the matching results.\n    \"\"\"\n    match_ratio = num_matched_frames / num_initial_frames\n    if match_ratio == 1:\n        return \"[bold green]COLMAP found poses for all images, CONGRATS!\"\n    if match_ratio < 0.4:\n        result = f\"[bold red]COLMAP only found poses for {num_matched_frames / num_initial_frames * 100:.2f}%\"\n        result += \" of the images. This is low.\\nThis can be caused by a variety of reasons,\"\n        result += \" such poor scene coverage, blurry images, or large exposure changes.\"\n        return result\n    if match_ratio < 0.8:\n        result = f\"[bold yellow]COLMAP only found poses for {num_matched_frames / num_initial_frames * 100:.2f}%\"\n        result += \" of the images.\\nThis isn't great, but may be ok.\"\n        result += \"\\nMissing poses can be caused by a variety of reasons, such poor scene coverage, blurry images,\"\n        result += \" or large exposure changes.\"\n        return result\n    return f\"[bold green]COLMAP found poses for {num_matched_frames / num_initial_frames * 100:.2f}% of the images.\"\n\n\ndef create_ply_from_colmap(\n    filename: str, recon_dir: Path, output_dir: Path, applied_transform: Union[torch.Tensor, None]\n) -> None:\n    \"\"\"Writes a ply file from colmap.\n\n    Args:\n        filename: file name for .ply\n        recon_dir: Directory to grab colmap points\n        output_dir: Directory to output .ply\n    \"\"\"\n    if (recon_dir / \"points3D.bin\").exists():\n        colmap_points = read_points3D_binary(recon_dir / \"points3D.bin\")\n    elif (recon_dir / \"points3D.txt\").exists():\n        colmap_points = read_points3D_text(recon_dir / \"points3D.txt\")\n    else:\n        raise ValueError(f\"Could not find points3D.txt or points3D.bin in {recon_dir}\")\n\n    # Load point Positions\n    points3D = torch.from_numpy(np.array([p.xyz for p in colmap_points.values()], dtype=np.float32))\n    if applied_transform is not None:\n        assert applied_transform.shape == (3, 4)\n        points3D = torch.einsum(\"ij,bj->bi\", applied_transform[:3, :3], points3D) + applied_transform[:3, 3]\n\n    # Load point colours\n    points3D_rgb = torch.from_numpy(np.array([p.rgb for p in colmap_points.values()], dtype=np.uint8))\n\n    # write ply\n    with open(output_dir / filename, \"w\") as f:\n        # Header\n        f.write(\"ply\\n\")\n        f.write(\"format ascii 1.0\\n\")\n        f.write(f\"element vertex {len(points3D)}\\n\")\n        f.write(\"property float x\\n\")\n        f.write(\"property float y\\n\")\n        f.write(\"property float z\\n\")\n        f.write(\"property uint8 red\\n\")\n        f.write(\"property uint8 green\\n\")\n        f.write(\"property uint8 blue\\n\")\n        f.write(\"end_header\\n\")\n\n        for coord, color in zip(points3D, points3D_rgb):\n            x, y, z = coord\n            r, g, b = color\n            f.write(f\"{x:8f} {y:8f} {z:8f} {r} {g} {b}\\n\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/equirect_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing equirectangular data.\"\"\"\n\nimport os\nimport sys\nfrom pathlib import Path\nfrom typing import List, Tuple\n\nimport cv2\nimport numpy as np\nimport torch\nfrom rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeRemainingColumn\n\nfrom nerfstudio.utils.rich_utils import CONSOLE, ItersPerSecColumn\n\n\n# https://gist.github.com/fgolemo/94b5caf0e209a6e71ab0ce2d75ad3ed8\ndef euler_rodriguez_rotation_matrix(axis: torch.Tensor, theta: torch.Tensor) -> torch.Tensor:\n    \"\"\"Generates a 3x3 rotation matrix from an axis and angle using Euler-Rodriguez formula.\n\n    Args:\n        axis (torch.Tensor): Axis about which to rotate.\n        theta (torch.Tloat): Angle to rotate by.\n\n    Returns:\n        torch.Tensor: 3x3 Rotation matrix.\n    \"\"\"\n    axis = axis / torch.sqrt(torch.dot(axis, axis))\n    a = torch.cos(theta / 2.0)\n    b, c, d = -axis * torch.sin(theta / 2.0)\n    aa, bb, cc, dd = a * a, b * b, c * c, d * d\n    bc, ad, ac, ab, bd, cd = b * c, a * d, a * c, a * b, b * d, c * d\n    return torch.tensor(\n        [\n            [aa + bb - cc - dd, 2 * (bc + ad), 2 * (bd - ac)],\n            [2 * (bc - ad), aa + cc - bb - dd, 2 * (cd + ab)],\n            [2 * (bd + ac), 2 * (cd - ab), aa + dd - bb - cc],\n        ]\n    )\n\n\ndef remap_cubic(\n    img: torch.Tensor, map_x: torch.Tensor, map_y: torch.Tensor, border_mode: str = \"border\"\n) -> torch.Tensor:\n    \"\"\"Remap image using bicubic interpolation.\n\n    Args:\n        img (torch.Tensor): Image tensor\n        map_x (torch.Tensor): x mapping\n        map_y (torch.Tensor): y mapping\n        border_mode (str, optional): What to do with borders. Defaults to \"border\".\n\n    Returns:\n        torch.Tensor: _description_\n    \"\"\"\n    batch_size, channels, height, width = img.shape\n\n    grid_x = (map_x / width + 1) * 2 - 1\n    grid_y = (map_y / height + 1) * 2 - 1\n\n    if border_mode == \"border\":\n        grid_x = torch.clamp(grid_x, -1, 1)\n        grid_y = torch.clamp(grid_y, -1, 1)\n    elif border_mode == \"wrap\":\n        grid_x = torch.remainder(grid_x + 1, 2) - 1\n        grid_y = torch.remainder(grid_y + 1, 2) - 1\n\n    grid = torch.stack((grid_x, grid_y), dim=-1).unsqueeze(0).expand(batch_size, -1, -1, -1)\n\n    return torch.nn.functional.grid_sample(img, grid, mode=\"bicubic\", padding_mode=\"zeros\")\n\n\ndef equirect2persp(img: torch.Tensor, fov: int, theta: int, phi: int, hd: int, wd: int) -> torch.Tensor:\n    \"\"\"Pytorch reimlement of https://github.com/kaustubh-sadekar/OmniCV-Lib for equirectangular to perspective projection.\n\n    Args:\n        img (torch.Tensor): Image tensor\n        fov (int): Horizontal field of view in degrees\n        theta (int): Horizontal angle in degrees\n        phi (int): Vertical angle in degrees\n        hd (int): Number of pixels in height\n        wd (int): Number of pixels in width\n\n    Returns:\n        torch.Tensor: Planar image tensor\n    \"\"\"\n    device = img.device\n    theta_tensor = torch.tensor(theta, dtype=torch.float32, device=device)\n    phi_tensor = torch.tensor(phi, dtype=torch.float32, device=device)\n    # theta is left/right angle, phi is up/down angle, both in degree\n    equ_h, equ_w = img.shape[2:]\n\n    equ_cx = (equ_w) / 2.0\n    equ_cy = (equ_h) / 2.0\n\n    wfov = fov\n    hfov = float(hd) / wd * wfov\n\n    c_x = (wd) / 2.0\n    c_y = (hd) / 2.0\n\n    w_len = 2 * torch.tan(torch.deg2rad(torch.tensor(wfov / 2.0, device=device)))\n    w_interval = w_len / wd\n\n    h_len = 2 * torch.tan(torch.deg2rad(torch.tensor(hfov / 2.0, device=device)))\n    h_interval = h_len / hd\n\n    x_map = torch.zeros([hd, wd], dtype=torch.float32, device=device) + 1\n    y_map = torch.tile((torch.arange(0, wd, device=device) - c_x) * w_interval, [hd, 1])\n    z_map = -torch.tile((torch.arange(0, hd, device=device) - c_y) * h_interval, [wd, 1]).T\n    D = torch.sqrt(x_map**2 + y_map**2 + z_map**2)\n\n    xyz = torch.zeros([hd, wd, 3], dtype=torch.float32, device=device)\n    xyz[:, :, 0] = (x_map / D)[:, :]\n    xyz[:, :, 1] = (y_map / D)[:, :]\n    xyz[:, :, 2] = (z_map / D)[:, :]\n\n    y_axis = torch.tensor([0.0, 1.0, 0.0], dtype=torch.float32, device=device)\n    z_axis = torch.tensor([0.0, 0.0, 1.0], dtype=torch.float32, device=device)\n    R1 = euler_rodriguez_rotation_matrix(z_axis, torch.deg2rad(theta_tensor)).to(device)\n    R2 = euler_rodriguez_rotation_matrix(torch.mm(R1, y_axis.view(3, 1)).squeeze(), torch.deg2rad(-phi_tensor)).to(\n        device\n    )\n\n    xyz = xyz.view(hd * wd, 3).T\n    xyz = torch.mm(R1, xyz)\n    xyz = torch.mm(R2, xyz).T\n    lat = torch.arcsin(xyz[:, 2] / 1)\n    lon = torch.zeros([hd * wd], dtype=torch.float32, device=device)\n    theta_tensor = torch.arctan(xyz[:, 1] / xyz[:, 0])\n    idx1 = xyz[:, 0] > 0\n    idx2 = xyz[:, 1] > 0\n    idx3 = ~idx1 & idx2\n    idx4 = ~idx1 & ~idx2\n\n    lon[idx1] = theta_tensor[idx1]\n    lon[idx3] = theta_tensor[idx3] + np.pi\n    lon[idx4] = theta_tensor[idx4] - np.pi\n\n    lon = lon.view(hd, wd) / torch.pi * 180\n    lat = -lat.view(hd, wd) / torch.pi * 180\n    lon = lon / 180 * equ_cx + equ_cx\n    lat = lat / 90 * equ_cy + equ_cy\n\n    return remap_cubic(img, lon, lat, border_mode=\"wrap\")\n\n\ndef _crop_bottom(bound_arr: list, fov: int, crop_factor: float) -> List[float]:\n    \"\"\"Returns a list of vertical bounds with the bottom cropped.\n\n    Args:\n        bound_arr (list): List of vertical bounds in ascending order.\n        fov (int): Field of view of the camera.\n        crop_factor (float): Portion of the image to crop from the bottom.\n\n    Returns:\n        list: A new list of bounds with the bottom cropped.\n    \"\"\"\n    degrees_chopped = 180 * crop_factor\n    new_bottom_start = 90 - degrees_chopped - fov / 2\n    for i, el in reversed(list(enumerate(bound_arr))):\n        if el > new_bottom_start + fov / 2:\n            bound_arr[i] = None\n        elif el > new_bottom_start:\n            diff = el - new_bottom_start\n            bound_arr[i] = new_bottom_start\n            for j in range(i - 1, -1, -1):\n                bound_arr[j] -= diff / (2 ** (i - j))\n            break\n\n    return bound_arr\n\n\ndef _crop_top(bound_arr: list, fov: int, crop_factor: float) -> List[float]:\n    \"\"\"Returns a list of vertical bounds with the top cropped.\n\n    Args:\n        bound_arr (list): List of vertical bounds in ascending order.\n        fov (int): Field of view of the camera.\n        crop_factor (float): Portion of the image to crop from the top.\n\n    Returns:\n        list: A new list of bounds with the top cropped.\n    \"\"\"\n    degrees_chopped = 180 * crop_factor\n    new_top_start = -90 + degrees_chopped + fov / 2\n    for i, el in enumerate(bound_arr):\n        if el < new_top_start - fov / 2:\n            bound_arr[i] = None\n        elif el < new_top_start:\n            diff = new_top_start - el\n            bound_arr[i] = new_top_start\n            for j in range(i + 1, len(bound_arr)):\n                bound_arr[j] += diff / (2 ** (j - i))\n            break\n\n    return bound_arr\n\n\ndef _crop_bound_arr_vertical(\n    bound_arr: list, fov: int, crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0)\n) -> list:\n    \"\"\"Returns a list of vertical bounds adjusted for cropping.\n\n    Args:\n        bound_arr (list): Original list of vertical bounds in ascending order.\n        fov (int): Field of view of the camera.\n        crop_factor (Tuple[float, float, float, float]): Crop arr (top, bottom, left, right).\n\n    Returns:\n        list: Cropped bound arr\n    \"\"\"\n    if crop_factor[1] > 0:\n        bound_arr = _crop_bottom(bound_arr, fov, crop_factor[1])\n    if crop_factor[0] > 0:\n        bound_arr = _crop_top(bound_arr, fov, crop_factor[0])\n    return bound_arr\n\n\ndef generate_planar_projections_from_equirectangular(\n    image_dir: Path,\n    planar_image_size: Tuple[int, int],\n    samples_per_im: int,\n    crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0),\n) -> Path:\n    \"\"\"Generate planar projections from an equirectangular image.\n\n    Args:\n        image_dir: The directory containing the equirectangular image.\n        planar_image_size: The size of the planar projections [width, height].\n        samples_per_im: The number of samples to take per image.\n        crop_factor: The portion of the image to crop from the (top, bottom, left, and right).\n                    Values should be in [0, 1].\n    returns:\n        The path to the planar projections directory.\n    \"\"\"\n\n    for i in crop_factor:\n        if i < 0 or i > 1:\n            CONSOLE.print(\"[bold red] Invalid crop factor. All values must be in [0,1].\")\n            sys.exit(1)\n\n    device = torch.device(\"cuda\")\n\n    fov = 120\n    yaw_pitch_pairs = []\n    left_bound, right_bound = -180, 180\n    if crop_factor[3] > 0:\n        left_bound = -180 + 360 * crop_factor[3]\n    if crop_factor[2] > 0:\n        right_bound = 180 - 360 * crop_factor[2]\n\n    if samples_per_im == 8:\n        fov = 120\n        bound_arr = [-45, 0, 45]\n        bound_arr = _crop_bound_arr_vertical(bound_arr, fov, crop_factor)\n        if bound_arr[1] is not None:\n            for i in np.arange(left_bound, right_bound, 90):\n                yaw_pitch_pairs.append((i, bound_arr[1]))\n        if bound_arr[2] is not None:\n            for i in np.arange(left_bound, right_bound, 180):\n                yaw_pitch_pairs.append((i, bound_arr[2]))\n        if bound_arr[0] is not None:\n            for i in np.arange(left_bound, right_bound, 180):\n                yaw_pitch_pairs.append((i, bound_arr[0]))\n    elif samples_per_im == 14:\n        fov = 110\n        bound_arr = [-45, 0, 45]\n        bound_arr = _crop_bound_arr_vertical(bound_arr, fov, crop_factor)\n        if bound_arr[1] is not None:\n            for i in np.arange(left_bound, right_bound, 60):\n                yaw_pitch_pairs.append((i, bound_arr[1]))\n        if bound_arr[2] is not None:\n            for i in np.arange(left_bound, right_bound, 90):\n                yaw_pitch_pairs.append((i, bound_arr[2]))\n        if bound_arr[0] is not None:\n            for i in np.arange(left_bound, right_bound, 90):\n                yaw_pitch_pairs.append((i, bound_arr[0]))\n\n    frame_dir = image_dir\n    output_dir = image_dir / \"planar_projections\"\n    output_dir.mkdir(exist_ok=True)\n    num_ims = len(os.listdir(frame_dir))\n    progress = Progress(\n        TextColumn(\"[bold blue]Generating Planar Images\", justify=\"right\"),\n        BarColumn(),\n        TaskProgressColumn(show_speed=True),\n        ItersPerSecColumn(suffix=\"equirect frames/s\"),\n        TimeRemainingColumn(elapsed_when_finished=True, compact=True),\n    )\n\n    with progress:\n        for i in progress.track(os.listdir(frame_dir), description=\"\", total=num_ims):\n            if i.lower().endswith((\".jpg\", \".png\", \".jpeg\", \".tiff\", \".tif\")):\n                im = np.array(cv2.imread(os.path.join(frame_dir, i)))\n                im = torch.tensor(im, dtype=torch.float32, device=device)\n                im = torch.permute(im, (2, 0, 1)).unsqueeze(0) / 255.0\n                count = 0\n                for u_deg, v_deg in yaw_pitch_pairs:\n                    omnicv_pers_tensor = (\n                        equirect2persp(im, fov, u_deg, v_deg, planar_image_size[1], planar_image_size[0]) * 255.0\n                    )\n                    pers_image = omnicv_pers_tensor.squeeze().permute(1, 2, 0).type(torch.uint8).to(\"cpu\").numpy()\n                    cv2.imwrite(f\"{output_dir}/{i[:-4]}_{count}.jpg\", pers_image)\n                    count += 1\n\n    return output_dir\n\n\ndef compute_resolution_from_equirect(image_dir: Path, num_images: int) -> Tuple[int, int]:\n    \"\"\"Compute the resolution of the perspective projections of equirectangular images\n       from the heuristic: num_image * res**2 = orig_height * orig_width.\n\n    Args:\n        image_dir: The directory containing the equirectangular images.\n    returns:\n        The target resolution of the perspective projections.\n    \"\"\"\n\n    for i in os.listdir(image_dir):\n        if i.lower().endswith((\".jpg\", \".png\", \".jpeg\", \".tiff\", \".tif\")):\n            im = np.array(cv2.imread(os.path.join(image_dir, i)))\n            res_squared = (im.shape[0] * im.shape[1]) / num_images\n            return (int(np.sqrt(res_squared)), int(np.sqrt(res_squared)))\n    raise ValueError(\"No images found in the directory.\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/hloc_utils.py",
    "content": "\"\"\"\nCode that uses the hierarchical localization toolbox (hloc)\nto extract and match image features, estimate camera poses,\nand do sparse reconstruction.\nRequires hloc module from : https://github.com/cvg/Hierarchical-Localization\n\"\"\"\n\n# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport sys\nfrom pathlib import Path\nfrom typing import Literal\n\nfrom nerfstudio.process_data.process_data_utils import CameraModel\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef run_hloc(\n    image_dir: Path,\n    colmap_dir: Path,\n    camera_model: CameraModel,\n    verbose: bool = False,\n    matching_method: Literal[\"vocab_tree\", \"exhaustive\", \"sequential\"] = \"vocab_tree\",\n    feature_type: Literal[\n        \"sift\", \"superpoint_aachen\", \"superpoint_max\", \"superpoint_inloc\", \"r2d2\", \"d2net-ss\", \"sosnet\", \"disk\"\n    ] = \"superpoint_aachen\",\n    matcher_type: Literal[\n        \"superglue\",\n        \"superglue-fast\",\n        \"NN-superpoint\",\n        \"NN-ratio\",\n        \"NN-mutual\",\n        \"adalam\",\n        \"disk+lightglue\",\n        \"superpoint+lightglue\",\n    ] = \"superglue\",\n    num_matched: int = 50,\n    refine_pixsfm: bool = False,\n    use_single_camera_mode: bool = True,\n) -> None:\n    \"\"\"Runs hloc on the images.\n\n    Args:\n        image_dir: Path to the directory containing the images.\n        colmap_dir: Path to the output directory.\n        camera_model: Camera model to use.\n        gpu: If True, use GPU.\n        verbose: If True, logs the output of the command.\n        matching_method: Method to use for matching images.\n        feature_type: Type of visual features to use.\n        matcher_type: Type of feature matcher to use.\n        num_matched: Number of image pairs for loc.\n        refine_pixsfm: If True, refine the reconstruction using pixel-perfect-sfm.\n        use_single_camera_mode: If True, uses one camera for all frames. Otherwise uses one camera per frame.\n    \"\"\"\n\n    try:\n        # TODO(1480) un-hide pycolmap import\n        import pycolmap\n        from hloc import (  # type: ignore\n            extract_features,\n            match_features,\n            pairs_from_exhaustive,\n            pairs_from_retrieval,\n            reconstruction,\n        )\n    except ImportError:\n        _HAS_HLOC = False\n    else:\n        _HAS_HLOC = True\n\n    try:\n        from pixsfm.refine_hloc import PixSfM  # type: ignore\n    except ImportError:\n        _HAS_PIXSFM = False\n    else:\n        _HAS_PIXSFM = True\n\n    if not _HAS_HLOC:\n        CONSOLE.print(\n            f\"[bold red]Error: To use this set of parameters ({feature_type}/{matcher_type}/hloc), \"\n            \"you must install hloc toolbox!!\"\n        )\n        sys.exit(1)\n\n    if refine_pixsfm and not _HAS_PIXSFM:\n        CONSOLE.print(\"[bold red]Error: use refine_pixsfm, you must install pixel-perfect-sfm toolbox!!\")\n        sys.exit(1)\n\n    outputs = colmap_dir\n    sfm_pairs = outputs / \"pairs-netvlad.txt\"\n    sfm_dir = outputs / \"sparse\" / \"0\"\n    features = outputs / \"features.h5\"\n    matches = outputs / \"matches.h5\"\n\n    retrieval_conf = extract_features.confs[\"netvlad\"]  # type: ignore\n    feature_conf = extract_features.confs[feature_type]  # type: ignore\n    matcher_conf = match_features.confs[matcher_type]  # type: ignore\n\n    references = [p.relative_to(image_dir).as_posix() for p in image_dir.iterdir()]\n    extract_features.main(feature_conf, image_dir, image_list=references, feature_path=features)  # type: ignore\n    if matching_method == \"exhaustive\":\n        pairs_from_exhaustive.main(sfm_pairs, image_list=references)  # type: ignore\n    else:\n        retrieval_path = extract_features.main(retrieval_conf, image_dir, outputs)  # type: ignore\n        num_matched = min(len(references), num_matched)\n        pairs_from_retrieval.main(retrieval_path, sfm_pairs, num_matched=num_matched)  # type: ignore\n    match_features.main(matcher_conf, sfm_pairs, features=features, matches=matches)  # type: ignore\n\n    image_options = pycolmap.ImageReaderOptions(camera_model=camera_model.value)  # type: ignore\n\n    if use_single_camera_mode:  # one camera per all frames\n        camera_mode = pycolmap.CameraMode.SINGLE  # type: ignore\n    else:  # one camera per frame\n        camera_mode = pycolmap.CameraMode.PER_IMAGE  # type: ignore\n\n    if refine_pixsfm:\n        sfm = PixSfM(  # type: ignore\n            conf={\n                \"dense_features\": {\"use_cache\": True},\n                \"KA\": {\"dense_features\": {\"use_cache\": True}, \"max_kps_per_problem\": 1000},\n                \"BA\": {\"strategy\": \"costmaps\"},\n            }\n        )\n        refined, _ = sfm.reconstruction(\n            sfm_dir,\n            image_dir,\n            sfm_pairs,\n            features,\n            matches,\n            image_list=references,\n            camera_mode=camera_mode,  # type: ignore\n            image_options=image_options,\n            verbose=verbose,\n        )\n        print(\"Refined\", refined.summary())\n\n    else:\n        reconstruction.main(  # type: ignore\n            sfm_dir,\n            image_dir,\n            sfm_pairs,\n            features,\n            matches,\n            camera_mode=camera_mode,  # type: ignore\n            image_options=image_options,\n            verbose=verbose,\n        )\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/images_to_nerfstudio_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Processes an image sequence to a nerfstudio compatible dataset.\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nfrom nerfstudio.process_data import equirect_utils, process_data_utils\nfrom nerfstudio.process_data.colmap_converter_to_nerfstudio_dataset import ColmapConverterToNerfstudioDataset\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ImagesToNerfstudioDataset(ColmapConverterToNerfstudioDataset):\n    \"\"\"Process images into a nerfstudio dataset.\n\n    1. Scales images to a specified size.\n    2. Calculates the camera poses for each image using `COLMAP <https://colmap.github.io/>`_.\n    \"\"\"\n\n    percent_radius_crop: float = 1.0\n    \"\"\"Create circle crop mask. The radius is the percent of the image diagonal.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        require_cameras_exist = False\n        if self.colmap_model_path != ColmapConverterToNerfstudioDataset.default_colmap_path():\n            if not self.skip_colmap:\n                raise RuntimeError(\"The --colmap-model-path can only be used when --skip-colmap is not set.\")\n            if not (self.output_dir / self.colmap_model_path).exists():\n                raise RuntimeError(f\"The colmap-model-path {self.output_dir / self.colmap_model_path} does not exist.\")\n            require_cameras_exist = True\n\n        image_rename_map: Optional[dict[str, str]] = None\n\n        # Generate planar projections if equirectangular\n        if self.camera_type == \"equirectangular\":\n            if self.eval_data is not None:\n                raise ValueError(\"Cannot use eval_data with camera_type equirectangular.\")\n\n            pers_size = equirect_utils.compute_resolution_from_equirect(self.data, self.images_per_equirect)\n            CONSOLE.log(f\"Generating {self.images_per_equirect} {pers_size} sized images per equirectangular image\")\n            self.data = equirect_utils.generate_planar_projections_from_equirectangular(\n                self.data, pers_size, self.images_per_equirect, crop_factor=self.crop_factor\n            )\n\n            self.camera_type = \"perspective\"\n\n        summary_log = []\n\n        # Copy and downscale images\n        if not self.skip_image_processing:\n            # Copy images to output directory\n            image_rename_map_paths = process_data_utils.copy_images(\n                self.data,\n                image_dir=self.image_dir,\n                crop_factor=self.crop_factor,\n                image_prefix=\"frame_train_\" if self.eval_data is not None else \"frame_\",\n                verbose=self.verbose,\n                num_downscales=self.num_downscales,\n                same_dimensions=self.same_dimensions,\n                keep_image_dir=False,\n            )\n            image_rename_map = dict(\n                (a.relative_to(self.data).as_posix(), b.name) for a, b in image_rename_map_paths.items()\n            )\n            if self.eval_data is not None:\n                eval_image_rename_map_paths = process_data_utils.copy_images(\n                    self.eval_data,\n                    image_dir=self.image_dir,\n                    crop_factor=self.crop_factor,\n                    image_prefix=\"frame_eval_\",\n                    verbose=self.verbose,\n                    num_downscales=self.num_downscales,\n                    same_dimensions=self.same_dimensions,\n                    keep_image_dir=True,\n                )\n                eval_image_rename_map = dict(\n                    (a.relative_to(self.eval_data).as_posix(), b.name) for a, b in eval_image_rename_map_paths.items()\n                )\n                image_rename_map.update(eval_image_rename_map)\n\n            num_frames = len(image_rename_map)\n            summary_log.append(f\"Starting with {num_frames} images\")\n\n            # # Create mask\n            mask_path = process_data_utils.save_mask(\n                image_dir=self.image_dir,\n                num_downscales=self.num_downscales,\n                crop_factor=(0.0, 0.0, 0.0, 0.0),\n                percent_radius=self.percent_radius_crop,\n            )\n            if mask_path is not None:\n                summary_log.append(\"Saved mask(s)\")\n        else:\n            num_frames = len(process_data_utils.list_images(self.data))\n            if num_frames == 0:\n                raise RuntimeError(\"No usable images in the data folder.\")\n            summary_log.append(f\"Starting with {num_frames} images\")\n\n        # Run COLMAP\n        if not self.skip_colmap:\n            require_cameras_exist = True\n            self._run_colmap()\n            # Colmap uses renamed images\n            image_rename_map = None\n\n        # Export depth maps\n        image_id_to_depth_path, log_tmp = self._export_depth()\n        summary_log += log_tmp\n\n        if require_cameras_exist and not (self.absolute_colmap_model_path / \"cameras.bin\").exists():\n            raise RuntimeError(f\"Could not find existing COLMAP results ({self.colmap_model_path / 'cameras.bin'}).\")\n\n        summary_log += self._save_transforms(\n            num_frames,\n            image_id_to_depth_path,\n            None,\n            image_rename_map,\n        )\n\n        CONSOLE.log(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.log(summary)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/metashape_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing metashape data into the nerfstudio format.\"\"\"\n\nimport json\nimport xml.etree.ElementTree as ET\nfrom pathlib import Path\nfrom typing import Dict, List, Optional\n\nimport numpy as np\nimport open3d as o3d\n\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef _find_param(calib_xml: ET.Element, param_name: str):\n    param = calib_xml.find(param_name)\n    if param is not None:\n        return float(param.text)  # type: ignore\n    return 0.0\n\n\ndef metashape_to_json(\n    image_filename_map: Dict[str, Path],\n    xml_filename: Path,\n    output_dir: Path,\n    ply_filename: Optional[Path] = None,  # type: ignore\n    verbose: bool = False,\n) -> List[str]:\n    \"\"\"Convert Metashape data into a nerfstudio dataset.\n\n    Args:\n        image_filename_map: Mapping of original image filenames to their saved locations.\n        xml_filename: Path to the metashape cameras xml file.\n        output_dir: Path to the output directory.\n        ply_filename: Path to the exported ply file.\n        verbose: Whether to print verbose output.\n\n    Returns:\n        Summary of the conversion.\n    \"\"\"\n\n    xml_tree = ET.parse(xml_filename)\n    root = xml_tree.getroot()\n    chunk = root[0]\n    sensors = chunk.find(\"sensors\")\n\n    if sensors is None:\n        raise ValueError(\"No sensors found\")\n\n    calibrated_sensors = [\n        sensor for sensor in sensors.iter(\"sensor\") if sensor.get(\"type\") == \"spherical\" or sensor.find(\"calibration\")\n    ]\n    if not calibrated_sensors:\n        raise ValueError(\"No calibrated sensor found in Metashape XML\")\n    sensor_type = [s.get(\"type\") for s in calibrated_sensors]\n    if sensor_type.count(sensor_type[0]) != len(sensor_type):\n        raise ValueError(\n            \"All Metashape sensors do not have the same sensor type. \"\n            \"nerfstudio does not support per-frame camera_model types.\"\n            \"Only one camera type can be used: frame, fisheye or spherical (perspective, fisheye or equirectangular)\"\n        )\n    data = {}\n    if sensor_type[0] == \"frame\":\n        data[\"camera_model\"] = CAMERA_MODELS[\"perspective\"].value\n    elif sensor_type[0] == \"fisheye\":\n        data[\"camera_model\"] = CAMERA_MODELS[\"fisheye\"].value\n    elif sensor_type[0] == \"spherical\":\n        data[\"camera_model\"] = CAMERA_MODELS[\"equirectangular\"].value\n    else:\n        # Cylindrical and RPC sensor types are not supported\n        raise ValueError(f\"Unsupported Metashape sensor type '{sensor_type[0]}'\")\n\n    sensor_dict = {}\n    for sensor in calibrated_sensors:\n        s = {}\n        resolution = sensor.find(\"resolution\")\n        assert resolution is not None, \"Resolution not found in Metashape xml\"\n        s[\"w\"] = int(resolution.get(\"width\"))  # type: ignore\n        s[\"h\"] = int(resolution.get(\"height\"))  # type: ignore\n\n        calib = sensor.find(\"calibration\")\n        if calib is None:\n            assert sensor_type[0] == \"spherical\", \"Only spherical sensors should have no intrinsics\"\n            s[\"fl_x\"] = s[\"w\"] / 2.0\n            s[\"fl_y\"] = s[\"h\"]\n            s[\"cx\"] = s[\"w\"] / 2.0\n            s[\"cy\"] = s[\"h\"] / 2.0\n        else:\n            f = calib.find(\"f\")\n            assert f is not None, \"Focal length not found in Metashape xml\"\n            s[\"fl_x\"] = s[\"fl_y\"] = float(f.text)  # type: ignore\n            s[\"cx\"] = _find_param(calib, \"cx\") + s[\"w\"] / 2.0  # type: ignore\n            s[\"cy\"] = _find_param(calib, \"cy\") + s[\"h\"] / 2.0  # type: ignore\n\n            s[\"k1\"] = _find_param(calib, \"k1\")\n            s[\"k2\"] = _find_param(calib, \"k2\")\n            s[\"k3\"] = _find_param(calib, \"k3\")\n            s[\"k4\"] = _find_param(calib, \"k4\")\n            s[\"p1\"] = _find_param(calib, \"p1\")\n            s[\"p2\"] = _find_param(calib, \"p2\")\n\n        sensor_dict[sensor.get(\"id\")] = s\n\n    components = chunk.find(\"components\")\n    component_dict = {}\n    if components is not None:\n        for component in components.iter(\"component\"):\n            transform = component.find(\"transform\")\n            if transform is not None:\n                rotation = transform.find(\"rotation\")\n                if rotation is None:\n                    r = np.eye(3)\n                else:\n                    assert isinstance(rotation.text, str)\n                    r = np.array([float(x) for x in rotation.text.split()]).reshape((3, 3))\n                translation = transform.find(\"translation\")\n                if translation is None:\n                    t = np.zeros(3)\n                else:\n                    assert isinstance(translation.text, str)\n                    t = np.array([float(x) for x in translation.text.split()])\n                scale = transform.find(\"scale\")\n                if scale is None:\n                    s = 1.0\n                else:\n                    assert isinstance(scale.text, str)\n                    s = float(scale.text)\n\n                m = np.eye(4)\n                m[:3, :3] = r\n                m[:3, 3] = t / s\n                component_dict[component.get(\"id\")] = m\n\n    frames = []\n    cameras = chunk.find(\"cameras\")\n    assert cameras is not None, \"Cameras not found in Metashape xml\"\n    num_skipped = 0\n    for camera in cameras.iter(\"camera\"):\n        frame = {}\n        camera_label = camera.get(\"label\")\n        assert isinstance(camera_label, str)\n        if camera_label not in image_filename_map:\n            # Labels sometimes have a file extension. Try without the extension.\n            # (maybe it's just a '.' in the image name)\n            camera_label = camera_label.split(\".\")[0]  # type: ignore\n            if camera_label not in image_filename_map:\n                if verbose:\n                    CONSOLE.print(f\"Missing image for {camera.get('label')}, Skipping\")\n                continue\n        frame[\"file_path\"] = image_filename_map[camera_label].as_posix()\n\n        sensor_id = camera.get(\"sensor_id\")\n        if sensor_id not in sensor_dict:\n            # this should only happen when we have a sensor that doesn't have calibration\n            if verbose:\n                CONSOLE.print(f\"Missing sensor calibration for {camera.get('label')}, Skipping\")\n            num_skipped += 1\n            continue\n        # Add all sensor parameters to this frame.\n        frame.update(sensor_dict[sensor_id])\n\n        if camera.find(\"transform\") is None:\n            if verbose:\n                CONSOLE.print(f\"Missing transforms data for {camera.get('label')}, Skipping\")\n            num_skipped += 1\n            continue\n        transform = np.array([float(x) for x in camera.find(\"transform\").text.split()]).reshape((4, 4))  # type: ignore\n\n        component_id = camera.get(\"component_id\")\n        if component_id in component_dict:\n            transform = component_dict[component_id] @ transform\n\n        # Metashape camera is looking towards -Z, +X is to the right and +Y is to the top/up of the first cam\n        # Rotate the scene according to nerfstudio convention\n        transform = transform[[2, 0, 1, 3], :]\n        # Convert from Metashape's camera coordinate system (OpenCV) to ours (OpenGL)\n        transform[:, 1:3] *= -1\n        frame[\"transform_matrix\"] = transform.tolist()\n        frames.append(frame)\n\n    data[\"frames\"] = frames\n    applied_transform = np.eye(4)[:3, :]\n    applied_transform = applied_transform[np.array([2, 0, 1]), :]\n    data[\"applied_transform\"] = applied_transform.tolist()\n\n    summary = []\n\n    if ply_filename is not None:\n        assert ply_filename.exists()\n        pc = o3d.io.read_point_cloud(str(ply_filename))\n        points3D = np.asarray(pc.points)\n        points3D = np.einsum(\"ij,bj->bi\", applied_transform[:3, :3], points3D) + applied_transform[:3, 3]\n        pc.points = o3d.utility.Vector3dVector(points3D)\n        o3d.io.write_point_cloud(str(output_dir / \"sparse_pc.ply\"), pc)\n        data[\"ply_file_path\"] = \"sparse_pc.ply\"\n        summary.append(f\"Imported {ply_filename} as starting points\")\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(data, f, indent=4)\n\n    if num_skipped == 1:\n        summary.append(f\"{num_skipped} image skipped because it was missing its camera pose.\")\n    if num_skipped > 1:\n        summary.append(f\"{num_skipped} images were skipped because they were missing camera poses.\")\n\n    summary.append(f\"Final dataset is {len(data['frames'])} frames.\")\n\n    return summary\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/odm_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing ODM data into the nerfstudio format.\"\"\"\n\nimport json\nimport math\nimport os\nimport sys\nfrom pathlib import Path\nfrom typing import Dict, List\n\nimport numpy as np\n\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\n\n\ndef rodrigues_vec_to_rotation_mat(rodrigues_vec: np.ndarray) -> np.ndarray:\n    theta = np.linalg.norm(rodrigues_vec)\n    if theta < sys.float_info.epsilon:\n        rotation_mat = np.eye(3, dtype=float)\n    else:\n        r = rodrigues_vec / theta\n        ident = np.eye(3, dtype=float)\n        r_rT = np.array(\n            [\n                [r[0] * r[0], r[0] * r[1], r[0] * r[2]],\n                [r[1] * r[0], r[1] * r[1], r[1] * r[2]],\n                [r[2] * r[0], r[2] * r[1], r[2] * r[2]],\n            ]\n        )\n        r_cross = np.array([[0, -r[2], r[1]], [r[2], 0, -r[0]], [-r[1], r[0], 0]], dtype=float)\n        rotation_mat = math.cos(theta) * ident + (1 - math.cos(theta)) * r_rT + math.sin(theta) * r_cross\n\n    return rotation_mat\n\n\ndef get_reconstruction(reconstruction_file: Path):\n    with open(reconstruction_file, \"r\", encoding=\"utf-8\") as f:\n        reconstructions = json.loads(f.read())\n        return reconstructions[0]\n\n\ndef reconstruction_to_ply(reconstruction: dict, output_ply: Path):\n    points = reconstruction.get(\"points\", [])\n    coords = []\n\n    for pid in points:\n        point = points[pid]\n        p, c = point[\"coordinates\"], point[\"color\"]\n        coords.append(\"{} {} {} {} {} {}\".format(p[0], p[1], p[2], int(c[0]), int(c[1]), int(c[2])))\n\n    header = [\n        \"ply\",\n        \"format ascii 1.0\",\n        \"element vertex {}\".format(len(coords)),\n        \"property float x\",\n        \"property float y\",\n        \"property float z\",\n        \"property uchar red\",\n        \"property uchar green\",\n        \"property uchar blue\",\n        \"end_header\",\n    ]\n\n    with open(output_ply, \"w\", encoding=\"utf-8\") as of:\n        of.write(\"\\n\".join(header + coords + [\"\"]))\n\n\ndef cameras2nerfds(\n    image_filename_map: Dict[str, Path],\n    cameras_file: Path,\n    shots_file: Path,\n    reconstruction_file: Path,\n    output_dir: Path,\n    verbose: bool = False,\n) -> List[str]:\n    \"\"\"Convert ODM cameras into a nerfstudio dataset.\n\n    Args:\n        image_filename_map: Mapping of original image filenames to their saved locations.\n        cameras_file: Path to ODM's cameras.json\n        shots_file: Path to ODM's shots.geojson\n        reconstruction_file: Path to ODM's reconstruction.json\n        output_dir: Path to the output directory.\n        verbose: Whether to print verbose output.\n\n    Returns:\n        Summary of the conversion.\n    \"\"\"\n\n    with open(cameras_file, \"r\", encoding=\"utf-8\") as f:\n        cameras = json.loads(f.read())\n\n    camera_ids = list(cameras.keys())\n    if len(camera_ids) > 1:\n        raise ValueError(\"Only one camera is supported\")\n    camera_id = camera_ids[0]\n    camera = cameras[camera_id]\n    data = {}\n    if camera[\"projection_type\"] in [\"brown\", \"perspective\"]:\n        data[\"camera_model\"] = CAMERA_MODELS[\"perspective\"].value\n    elif camera[\"projection_type\"] in [\"fisheye\", \"fisheye_opencv\"]:\n        data[\"camera_model\"] = CAMERA_MODELS[\"fisheye\"].value\n    elif camera[\"projection_type\"] in [\"spherical\", \"equirectangular\"]:\n        data[\"camera_model\"] = CAMERA_MODELS[\"equirectangular\"].value\n    else:\n        raise ValueError(\"Unsupported ODM camera model: \" + data[\"camera_model\"])\n\n    sensor_dict = {}\n    s = {\"w\": int(camera[\"width\"]), \"h\": int(camera[\"height\"])}\n\n    s[\"fl_x\"] = camera.get(\"focal_x\", camera.get(\"focal\")) * max(s[\"w\"], s[\"h\"])\n    s[\"fl_y\"] = camera.get(\"focal_y\", camera.get(\"focal\")) * max(s[\"w\"], s[\"h\"])\n\n    s[\"cx\"] = camera[\"c_x\"] + (s[\"w\"] - 1.0) / 2.0\n    s[\"cy\"] = camera[\"c_y\"] + (s[\"h\"] - 1.0) / 2.0\n\n    for p in [\"k1\", \"k2\", \"p1\", \"p2\", \"k3\"]:\n        if p in camera:\n            s[p] = camera[p]\n\n        sensor_dict[camera_id] = s\n\n    shots_dict = {}\n    reconstruction = None\n\n    if reconstruction_file.exists():\n        reconstruction = get_reconstruction(reconstruction_file)\n        shots = reconstruction.get(\"shots\", [])\n        for filename in shots:\n            shot = shots[filename]\n            rotation = rodrigues_vec_to_rotation_mat(np.array(shot[\"rotation\"]))\n            translation = np.array(shot[\"translation\"]).reshape(3, 1)\n\n            w2c = np.concatenate([rotation, translation], 1)\n            w2c = np.concatenate([w2c, np.array([[0, 0, 0, 1]])], 0)\n            m = np.linalg.inv(w2c)\n\n            # Convert to OpenGL\n            m[0:3, 1:3] *= -1\n\n            name, ext = os.path.splitext(filename)\n            shots_dict[name] = m\n    else:\n        with open(shots_file, \"r\", encoding=\"utf-8\") as f:\n            shots = json.loads(f.read())\n\n        shots = shots[\"features\"]\n        for shot in shots:\n            props = shot[\"properties\"]\n            filename = props[\"filename\"]\n            rotation = rodrigues_vec_to_rotation_mat(np.array(props[\"rotation\"]) * -1)\n            translation = np.array(props[\"translation\"])\n\n            m = np.eye(4)\n            m[:3, :3] = rotation\n            m[:3, 3] = translation\n\n            name, ext = os.path.splitext(filename)\n            shots_dict[name] = m\n\n    frames = []\n    num_skipped = 0\n\n    for fname in shots_dict:\n        transform = shots_dict[fname]\n        if fname not in image_filename_map:\n            num_skipped += 1\n            continue\n\n        frame = {}\n        frame[\"file_path\"] = image_filename_map[fname].as_posix()\n        frame.update(sensor_dict[camera_id])\n\n        frame[\"transform_matrix\"] = transform.tolist()\n        frames.append(frame)\n\n    data[\"frames\"] = frames\n\n    if reconstruction is not None:\n        reconstruction_to_ply(reconstruction, output_dir / \"reconstruction.ply\")\n        data[\"ply_file_path\"] = \"reconstruction.ply\"\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(data, f, indent=4)\n\n    summary = []\n    if num_skipped == 1:\n        summary.append(f\"{num_skipped} image skipped because it was missing its camera pose.\")\n    if num_skipped > 1:\n        summary.append(f\"{num_skipped} images were skipped because they were missing camera poses.\")\n\n    summary.append(f\"Final dataset is {len(data['frames'])} frames.\")\n\n    return summary\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/polycam_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing polycam data into the nerfstudio format.\"\"\"\n\nimport json\nimport sys\nfrom pathlib import Path\nfrom typing import List, Optional, Tuple\n\nimport numpy as np\n\nfrom nerfstudio.process_data import process_data_utils\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\nfrom nerfstudio.utils import io\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef polycam_to_json(\n    image_filenames: List[Path],\n    depth_filenames: List[Path],\n    glb_filename: Optional[Path],\n    cameras_dir: Path,\n    output_dir: Path,\n    min_blur_score: float = 0.0,\n    crop_border_pixels: int = 0,\n) -> List[str]:\n    \"\"\"Convert Polycam data into a nerfstudio dataset.\n\n    Args:\n        image_filenames: List of paths to the original images.\n        depth_filenames: List of paths to the original depth maps.\n        cameras_dir: Path to the polycam cameras directory.\n        output_dir: Path to the output directory.\n        min_blur_score: Minimum blur score to use an image. Images below this value will be skipped.\n        crop_border_pixels: Number of pixels to crop from each border of the image.\n\n    Returns:\n        Summary of the conversion.\n    \"\"\"\n    use_depth = len(image_filenames) == len(depth_filenames)\n    data = {}\n    data[\"camera_model\"] = CAMERA_MODELS[\"perspective\"].value\n    # Needs to be a string for camera_utils.auto_orient_and_center_poses\n    data[\"orientation_override\"] = \"none\"\n\n    frames = []\n    skipped_frames = 0\n    for i, image_filename in enumerate(image_filenames):\n        json_filename = cameras_dir / f\"{image_filename.stem}.json\"\n        frame_json = io.load_from_json(json_filename)\n        if \"blur_score\" in frame_json and frame_json[\"blur_score\"] < min_blur_score:\n            skipped_frames += 1\n            continue\n        frame = {}\n        frame[\"fl_x\"] = frame_json[\"fx\"]\n        frame[\"fl_y\"] = frame_json[\"fy\"]\n        frame[\"cx\"] = frame_json[\"cx\"] - crop_border_pixels\n        frame[\"cy\"] = frame_json[\"cy\"] - crop_border_pixels\n        frame[\"w\"] = frame_json[\"width\"] - crop_border_pixels * 2\n        frame[\"h\"] = frame_json[\"height\"] - crop_border_pixels * 2\n        frame[\"file_path\"] = f\"./images/frame_{i+1:05d}{image_filename.suffix}\"\n        if use_depth:\n            frame[\"depth_file_path\"] = f\"./depth/frame_{i+1:05d}{depth_filenames[i].suffix}\"\n        # Transform matrix to nerfstudio format. Please refer to the documentation for coordinate system conventions.\n        frame[\"transform_matrix\"] = [\n            [frame_json[\"t_20\"], frame_json[\"t_21\"], frame_json[\"t_22\"], frame_json[\"t_23\"]],\n            [frame_json[\"t_00\"], frame_json[\"t_01\"], frame_json[\"t_02\"], frame_json[\"t_03\"]],\n            [frame_json[\"t_10\"], frame_json[\"t_11\"], frame_json[\"t_12\"], frame_json[\"t_13\"]],\n            [0.0, 0.0, 0.0, 1.0],\n        ]\n        frames.append(frame)\n    data[\"frames\"] = frames\n\n    if glb_filename is not None:\n        # If the .glb is populated, use it to save a pointcloud for splatfacto init\n        import open3d as o3d\n\n        mesh = o3d.io.read_triangle_mesh(str(glb_filename), enable_post_processing=True)\n        textures = np.asarray(mesh.textures[0])  # 2D images of color\n        vert_points = np.asarray(mesh.vertices)  # 3D positions of verts\n        tri_ids = np.asarray(mesh.triangles)  # indices of the vertices\n        points = vert_points[tri_ids.flatten()]  # get the 3D positions of the vertices\n        uvs = np.asarray(mesh.triangle_uvs)  # get the uv coords of the vertices\n        # convert uv coord to texture integer index\n        tex_ids = (uvs[:, 1] * textures.shape[0]).astype(int), (uvs[:, 0] * textures.shape[1]).astype(int)\n        colors = textures[tex_ids[0], tex_ids[1]]\n        pointcloud = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(points))\n        pointcloud.colors = o3d.utility.Vector3dVector(colors.astype(np.float64) / 255.0)\n        pointcloud = pointcloud.remove_duplicated_points()\n        # align the pointcloud to the coord system of cameras, which is provided inside the mesh_info.json file\n        mesh_info_json = json.load(open(glb_filename.parent / \"mesh_info.json\"))\n        transform = np.array(mesh_info_json[\"alignmentTransform\"]).reshape(4, 4).T\n        pointcloud = pointcloud.transform(np.linalg.inv(transform))\n        # shift the axes coordinates to match the nerfstudio ones (same as the cameras' coord system)\n        pointcloud.points = o3d.utility.Vector3dVector(np.array(pointcloud.points)[:, [2, 0, 1]])\n        o3d.io.write_point_cloud(str(output_dir / \"point_cloud.ply\"), pointcloud)\n        data[\"ply_file_path\"] = \"point_cloud.ply\"\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(data, f, indent=4)\n\n    summary = []\n    if skipped_frames > 0:\n        summary.append(f\"Skipped {skipped_frames} frames due to low blur score.\")\n    summary.append(f\"Final dataset is {len(image_filenames) - skipped_frames} frames.\")\n\n    if len(image_filenames) - skipped_frames == 0:\n        CONSOLE.print(\"[bold red]No images remain after filtering, exiting\")\n        sys.exit(1)\n\n    return summary\n\n\ndef process_images(\n    polycam_image_dir: Path,\n    image_dir: Path,\n    crop_border_pixels: int = 15,\n    max_dataset_size: int = 600,\n    num_downscales: int = 3,\n    verbose: bool = True,\n) -> Tuple[List[str], List[Path]]:\n    \"\"\"\n    Process RGB images only\n\n    Args:\n        polycam_image_dir: Path to the directory containing RGB Images\n        image_dir: Output directory for processed images\n        crop_border_pixels: Number of pixels to crop from each border of the image. Useful as borders may be\n                            black due to undistortion.\n        max_dataset_size: Max number of images to train on. If the dataset has more, images will be sampled\n                            approximately evenly. If -1, use all images.\n        num_downscales: Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n                        will downscale the images by 2x, 4x, and 8x.\n        verbose: If True, print extra logging.\n    Returns:\n        summary_log: Summary of the processing.\n        polycam_image_filenames: List of processed images paths\n    \"\"\"\n    summary_log = []\n    polycam_image_filenames, num_orig_images = process_data_utils.get_image_filenames(\n        polycam_image_dir, max_dataset_size\n    )\n\n    # Copy images to output directory\n    copied_image_paths = process_data_utils.copy_images_list(\n        polycam_image_filenames,\n        image_dir=image_dir,\n        crop_border_pixels=crop_border_pixels,\n        verbose=verbose,\n        num_downscales=num_downscales,\n    )\n    num_frames = len(copied_image_paths)\n\n    copied_image_paths = [Path(\"images/\" + copied_image_path.name) for copied_image_path in copied_image_paths]\n\n    if max_dataset_size > 0 and num_frames != num_orig_images:\n        summary_log.append(f\"Started with {num_frames} images out of {num_orig_images} total\")\n        summary_log.append(\n            \"To change the size of the dataset add the argument --max_dataset_size to larger than the \"\n            f\"current value ({max_dataset_size}), or -1 to use all images.\"\n        )\n    else:\n        summary_log.append(f\"Started with {num_frames} images\")\n\n    # Save json\n    if num_frames == 0:\n        CONSOLE.print(\"[bold red]No images found, exiting\")\n        sys.exit(1)\n\n    return summary_log, polycam_image_filenames\n\n\ndef process_depth_maps(\n    polycam_depth_dir: Path,\n    depth_dir: Path,\n    num_processed_images: int,\n    crop_border_pixels: int = 15,\n    max_dataset_size: int = 600,\n    num_downscales: int = 3,\n    verbose: bool = True,\n) -> Tuple[List[str], List[Path]]:\n    \"\"\"\n    Process Depth maps from polycam only\n\n    Args:\n        polycam_depth_dir: Path to the directory containing depth maps\n        depth_dir: Output directory for processed depth maps\n        num_processed_images: Number of RGB processed that must match the number of depth maps\n        crop_border_pixels: Number of pixels to crop from each border of the image. Useful as borders may be\n                            black due to undistortion.\n        max_dataset_size: Max number of images to train on. If the dataset has more, images will be sampled\n                         approximately evenly. If -1, use all images.\n        num_downscales: Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n                        will downscale the images by 2x, 4x, and 8x.\n        verbose: If True, print extra logging.\n    Returns:\n        summary_log: Summary of the processing.\n        polycam_depth_maps_filenames: List of processed depth maps paths\n    \"\"\"\n    summary_log = []\n    polycam_depth_maps_filenames, num_orig_depth_maps = process_data_utils.get_image_filenames(\n        polycam_depth_dir, max_dataset_size\n    )\n\n    # Copy depth images to output directory\n    copied_depth_maps_paths = process_data_utils.copy_and_upscale_polycam_depth_maps_list(\n        polycam_depth_maps_filenames,\n        depth_dir=depth_dir,\n        num_downscales=num_downscales,\n        crop_border_pixels=crop_border_pixels,\n        verbose=verbose,\n    )\n\n    num_processed_depth_maps = len(copied_depth_maps_paths)\n\n    # assert same number of images as depth maps\n    if num_processed_images != num_processed_depth_maps:\n        raise ValueError(\n            f\"Expected same amount of depth maps as images. \"\n            f\"Instead got {num_processed_images} images and {num_processed_depth_maps} depth maps\"\n        )\n\n    if crop_border_pixels > 0 and num_processed_depth_maps != num_orig_depth_maps:\n        summary_log.append(f\"Started with {num_processed_depth_maps} images out of {num_orig_depth_maps} total\")\n        summary_log.append(\n            \"To change the size of the dataset add the argument --max_dataset_size to larger than the \"\n            f\"current value ({crop_border_pixels}), or -1 to use all images.\"\n        )\n    else:\n        summary_log.append(f\"Started with {num_processed_depth_maps} images\")\n\n    return summary_log, polycam_depth_maps_filenames\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/process_data_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing data into the nerfstudio format.\"\"\"\n\nimport math\nimport random\nimport re\nimport shutil\nimport sys\nfrom enum import Enum\nfrom pathlib import Path\nfrom typing import List, Literal, Optional, OrderedDict, Tuple, Union\n\nimport cv2\nimport imageio\n\ntry:\n    import rawpy\nexcept ImportError:\n    import newrawpy as rawpy  # type: ignore\n\nimport numpy as np\n\nfrom nerfstudio.utils.rich_utils import CONSOLE, status\nfrom nerfstudio.utils.scripts import run_command\n\nPOLYCAM_UPSCALING_TIMES = 2\n\n\"\"\"Lowercase suffixes to treat as raw image.\"\"\"\nALLOWED_RAW_EXTS = [\".cr2\"]\n\"\"\"Suffix to use for converted images from raw.\"\"\"\nRAW_CONVERTED_SUFFIX = \".jpg\"\n\n\nclass CameraModel(Enum):\n    \"\"\"Enum for camera types.\"\"\"\n\n    OPENCV = \"OPENCV\"\n    OPENCV_FISHEYE = \"OPENCV_FISHEYE\"\n    EQUIRECTANGULAR = \"EQUIRECTANGULAR\"\n    PINHOLE = \"PINHOLE\"\n    SIMPLE_PINHOLE = \"SIMPLE_PINHOLE\"\n\n\nCAMERA_MODELS = {\n    \"perspective\": CameraModel.OPENCV,\n    \"fisheye\": CameraModel.OPENCV_FISHEYE,\n    \"equirectangular\": CameraModel.EQUIRECTANGULAR,\n    \"pinhole\": CameraModel.PINHOLE,\n    \"simple_pinhole\": CameraModel.SIMPLE_PINHOLE,\n}\n\n\ndef list_images(data: Path, recursive: bool = True) -> List[Path]:\n    \"\"\"Lists all supported images in a directory\n\n    Args:\n        data: Path to the directory of images.\n        recursive: Whether to search check nested folders in `data`.\n    Returns:\n        Paths to images contained in the directory\n    \"\"\"\n    allowed_exts = [\".jpg\", \".jpeg\", \".png\", \".tif\", \".tiff\"] + ALLOWED_RAW_EXTS\n    glob_str = \"**/[!.]*\" if recursive else \"[!.]*\"\n    image_paths = sorted([p for p in data.glob(glob_str) if p.suffix.lower() in allowed_exts])\n    return image_paths\n\n\ndef get_image_filenames(directory: Path, max_num_images: int = -1) -> Tuple[List[Path], int]:\n    \"\"\"Returns a list of image filenames in a directory.\n\n    Args:\n        dir: Path to the directory.\n        max_num_images: The maximum number of images to return. -1 means no limit.\n    Returns:\n        A tuple of A list of image filenames, number of original image paths.\n    \"\"\"\n    image_paths = list_images(directory)\n    num_orig_images = len(image_paths)\n\n    if max_num_images != -1 and num_orig_images > max_num_images:\n        idx = np.round(np.linspace(0, num_orig_images - 1, max_num_images)).astype(int)\n    else:\n        idx = np.arange(num_orig_images)\n\n    image_filenames = list(np.array(image_paths)[idx])\n\n    return image_filenames, num_orig_images\n\n\ndef get_num_frames_in_video(video: Path) -> int:\n    \"\"\"Returns the number of frames in a video.\n\n    Args:\n        video: Path to a video.\n\n    Returns:\n        The number of frames in a video.\n    \"\"\"\n    cmd = f'ffprobe -v error -select_streams v:0 -count_packets \\\n            -show_entries stream=nb_read_packets -of csv=p=0 \"{video}\"'\n    output = run_command(cmd)\n    assert output is not None\n    number_match = re.search(r\"\\d+\", output)\n    assert number_match is not None\n    return int(number_match[0])\n\n\ndef convert_video_to_images(\n    video_path: Path,\n    image_dir: Path,\n    num_frames_target: int,\n    num_downscales: int,\n    crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0),\n    verbose: bool = False,\n    image_prefix: str = \"frame_\",\n    keep_image_dir: bool = False,\n    random_seed: Optional[int] = None,\n) -> Tuple[List[str], int]:\n    \"\"\"Converts a video into a sequence of images.\n\n    Args:\n        video_path: Path to the video.\n        output_dir: Path to the output directory.\n        num_frames_target: Number of frames to extract.\n        num_downscales: Number of times to downscale the images. Downscales by 2 each time.\n        crop_factor: Portion of the image to crop. Should be in [0,1] (top, bottom, left, right)\n        verbose: If True, logs the output of the command.\n        image_prefix: Prefix to use for the image filenames.\n        keep_image_dir: If True, don't delete the output directory if it already exists.\n        random_seed: If set, the seed used to choose the frames of the video\n    Returns:\n        A tuple containing summary of the conversion and the number of extracted frames.\n    \"\"\"\n\n    # If keep_image_dir is False, then remove the output image directory and its downscaled versions\n    if not keep_image_dir:\n        for i in range(num_downscales + 1):\n            dir_to_remove = image_dir if i == 0 else f\"{image_dir}_{2**i}\"\n            shutil.rmtree(dir_to_remove, ignore_errors=True)\n    image_dir.mkdir(exist_ok=True, parents=True)\n\n    for i in crop_factor:\n        if i < 0 or i > 1:\n            CONSOLE.print(\"[bold red]Error: Invalid crop factor. All crops must be in [0,1].\")\n            sys.exit(1)\n\n    if video_path.is_dir():\n        CONSOLE.print(f\"[bold red]Error: Video path is a directory, not a path: {video_path}\")\n        sys.exit(1)\n    if video_path.exists() is False:\n        CONSOLE.print(f\"[bold red]Error: Video does not exist: {video_path}\")\n        sys.exit(1)\n\n    with status(msg=\"Converting video to images...\", spinner=\"bouncingBall\", verbose=verbose):\n        num_frames = get_num_frames_in_video(video_path)\n        if num_frames == 0:\n            CONSOLE.print(f\"[bold red]Error: Video has no frames: {video_path}\")\n            sys.exit(1)\n        CONSOLE.print(\"Number of frames in video:\", num_frames)\n\n        ffmpeg_cmd = f'ffmpeg -i \"{video_path}\"'\n\n        crop_cmd = \"\"\n        if crop_factor != (0.0, 0.0, 0.0, 0.0):\n            height = 1 - crop_factor[0] - crop_factor[1]\n            width = 1 - crop_factor[2] - crop_factor[3]\n            start_x = crop_factor[2]\n            start_y = crop_factor[0]\n            crop_cmd = f\"crop=w=iw*{width}:h=ih*{height}:x=iw*{start_x}:y=ih*{start_y},\"\n\n        downscale_chains = [f\"[t{i}]scale=iw/{2**i}:ih/{2**i}[out{i}]\" for i in range(num_downscales + 1)]\n        downscale_dirs = [Path(str(image_dir) + (f\"_{2**i}\" if i > 0 else \"\")) for i in range(num_downscales + 1)]\n        downscale_paths = [downscale_dirs[i] / f\"{image_prefix}%05d.png\" for i in range(num_downscales + 1)]\n\n        for dir in downscale_dirs:\n            dir.mkdir(parents=True, exist_ok=True)\n\n        downscale_chain = (\n            f\"split={num_downscales + 1}\"\n            + \"\".join([f\"[t{i}]\" for i in range(num_downscales + 1)])\n            + \";\"\n            + \";\".join(downscale_chains)\n        )\n\n        ffmpeg_cmd += \" -vsync vfr\"\n\n        # Evenly distribute frame selection if random seed does not exist\n        spacing = num_frames // num_frames_target\n        if random_seed:\n            random.seed(random_seed)\n            frame_indices = sorted(random.sample(range(num_frames), num_frames_target))\n            select_cmd = \"select='\" + \"+\".join([f\"eq(n\\,{idx})\" for idx in frame_indices]) + \"',setpts=N/TB,\"\n            CONSOLE.print(f\"Extracting {num_frames_target} frames using seed {random_seed} random selection.\")\n        elif spacing > 1:\n            CONSOLE.print(f\"Extracting {math.ceil(num_frames / spacing)} frames in evenly spaced intervals\")\n            select_cmd = f\"thumbnail={spacing},setpts=N/TB,\"\n        else:\n            CONSOLE.print(\"[bold red]Can't satisfy requested number of frames. Extracting all frames.\")\n            ffmpeg_cmd += \" -pix_fmt bgr8\"\n            select_cmd = \"\"\n\n        downscale_cmd = f' -filter_complex \"{select_cmd}{crop_cmd}{downscale_chain}\"' + \"\".join(\n            [f' -map \"[out{i}]\" \"{downscale_paths[i]}\"' for i in range(num_downscales + 1)]\n        )\n\n        ffmpeg_cmd += downscale_cmd\n\n        run_command(ffmpeg_cmd, verbose=verbose)\n\n        num_final_frames = len(list(image_dir.glob(\"*.png\")))\n        summary_log = []\n        summary_log.append(f\"Starting with {num_frames} video frames\")\n        summary_log.append(f\"We extracted {num_final_frames} images with prefix '{image_prefix}'\")\n        CONSOLE.log(\"[bold green]:tada: Done converting video to images.\")\n\n        return summary_log, num_final_frames\n\n\ndef copy_images_list(\n    image_paths: List[Path],\n    image_dir: Path,\n    num_downscales: int,\n    image_prefix: str = \"frame_\",\n    crop_border_pixels: Optional[int] = None,\n    crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0),\n    verbose: bool = False,\n    keep_image_dir: bool = False,\n    upscale_factor: Optional[int] = None,\n    nearest_neighbor: bool = False,\n    same_dimensions: bool = True,\n) -> List[Path]:\n    \"\"\"Copy all images in a list of Paths. Useful for filtering from a directory.\n    Args:\n        image_paths: List of Paths of images to copy to a new directory.\n        image_dir: Path to the output directory.\n        num_downscales: Number of times to downscale the images. Downscales by 2 each time.\n        image_prefix: Prefix for the image filenames.\n        crop_border_pixels: If not None, crops each edge by the specified number of pixels.\n        crop_factor: Portion of the image to crop. Should be in [0,1] (top, bottom, left, right)\n        verbose: If True, print extra logging.\n        keep_image_dir: If True, don't delete the output directory if it already exists.\n    Returns:\n        A list of the copied image Paths.\n    \"\"\"\n\n    # Remove original directory and its downscaled versions\n    # only if we provide a proper image folder path and keep_image_dir is False\n    if image_dir.is_dir() and len(image_paths) and not keep_image_dir:\n        # check that output directory is not the same as input directory\n        if image_dir != image_paths[0].parent:\n            for i in range(num_downscales + 1):\n                dir_to_remove = image_dir if i == 0 else f\"{image_dir}_{2**i}\"\n                shutil.rmtree(dir_to_remove, ignore_errors=True)\n    image_dir.mkdir(exist_ok=True, parents=True)\n\n    copied_image_paths = []\n\n    # Images should be 1-indexed for the rest of the pipeline.\n    for idx, image_path in enumerate(image_paths):\n        if verbose:\n            CONSOLE.log(f\"Copying image {idx + 1} of {len(image_paths)}...\")\n        copied_image_path = image_dir / f\"{image_prefix}{idx + 1:05d}{image_path.suffix}\"\n        try:\n            # if CR2 raw, we want to read raw and write RAW_CONVERTED_SUFFIX, and change the file suffix for downstream processing\n            if image_path.suffix.lower() in ALLOWED_RAW_EXTS:\n                copied_image_path = image_dir / f\"{image_prefix}{idx + 1:05d}{RAW_CONVERTED_SUFFIX}\"\n                with rawpy.imread(str(image_path)) as raw:\n                    rgb = raw.postprocess()\n                imageio.imsave(copied_image_path, rgb)\n                image_paths[idx] = copied_image_path\n            elif same_dimensions:\n                # Fast path; just copy the file\n                shutil.copy(image_path, copied_image_path)\n            else:\n                # Slow path; let ffmpeg perform autorotation (and clear metadata)\n                ffmpeg_cmd = f\"ffmpeg -y -i {image_path} -metadata:s:v:0 rotate=0 {copied_image_path}\"\n                if verbose:\n                    CONSOLE.log(f\"... {ffmpeg_cmd}\")\n                run_command(ffmpeg_cmd, verbose=verbose)\n        except shutil.SameFileError:\n            pass\n        copied_image_paths.append(copied_image_path)\n\n    nn_flag = \"\" if not nearest_neighbor else \":flags=neighbor\"\n    downscale_chains = [f\"[t{i}]scale=iw/{2**i}:ih/{2**i}{nn_flag}[out{i}]\" for i in range(num_downscales + 1)]\n    downscale_dirs = [Path(str(image_dir) + (f\"_{2**i}\" if i > 0 else \"\")) for i in range(num_downscales + 1)]\n\n    for dir in downscale_dirs:\n        dir.mkdir(parents=True, exist_ok=True)\n\n    downscale_chain = (\n        f\"split={num_downscales + 1}\"\n        + \"\".join([f\"[t{i}]\" for i in range(num_downscales + 1)])\n        + \";\"\n        + \";\".join(downscale_chains)\n    )\n\n    num_frames = len(image_paths)\n    # ffmpeg batch commands assume all images are the same dimensions.\n    # When this is not the case (e.g. mixed portrait and landscape images), we need to do individually.\n    # (Unfortunately, that is much slower.)\n    for framenum in range(1, (1 if same_dimensions else num_frames) + 1):\n        framename = f\"{image_prefix}%05d\" if same_dimensions else f\"{image_prefix}{framenum:05d}\"\n        ffmpeg_cmd = f'ffmpeg -y -noautorotate -i \"{image_dir / f\"{framename}{copied_image_paths[0].suffix}\"}\" '\n\n        crop_cmd = \"\"\n        if crop_border_pixels is not None:\n            crop_cmd = f\"crop=iw-{crop_border_pixels*2}:ih-{crop_border_pixels*2}[cropped];[cropped]\"\n        elif crop_factor != (0.0, 0.0, 0.0, 0.0):\n            height = 1 - crop_factor[0] - crop_factor[1]\n            width = 1 - crop_factor[2] - crop_factor[3]\n            start_x = crop_factor[2]\n            start_y = crop_factor[0]\n            crop_cmd = f\"crop=w=iw*{width}:h=ih*{height}:x=iw*{start_x}:y=ih*{start_y}[cropped];[cropped]\"\n\n        select_cmd = \"[0:v]\"\n        if upscale_factor is not None:\n            select_cmd = f\"[0:v]scale=iw*{upscale_factor}:ih*{upscale_factor}:flags=neighbor[upscaled];[upscaled]\"\n\n        downscale_cmd = f' -filter_complex \"{select_cmd}{crop_cmd}{downscale_chain}\"' + \"\".join(\n            [\n                f' -map \"[out{i}]\" -q:v 2 \"{downscale_dirs[i] / f\"{framename}{copied_image_paths[0].suffix}\"}\"'\n                for i in range(num_downscales + 1)\n            ]\n        )\n\n        ffmpeg_cmd += downscale_cmd\n        if verbose:\n            CONSOLE.log(f\"... {ffmpeg_cmd}\")\n        run_command(ffmpeg_cmd, verbose=verbose)\n\n    if num_frames == 0:\n        CONSOLE.log(\"[bold red]:skull: No usable images in the data folder.\")\n    else:\n        CONSOLE.log(f\"[bold green]:tada: Done copying images with prefix '{image_prefix}'.\")\n\n    return copied_image_paths\n\n\ndef copy_and_upscale_polycam_depth_maps_list(\n    polycam_depth_image_filenames: List[Path],\n    depth_dir: Path,\n    num_downscales: int,\n    crop_border_pixels: Optional[int] = None,\n    verbose: bool = False,\n) -> List[Path]:\n    \"\"\"\n    Copy depth maps to working location and upscale them to match the RGB images dimensions and finally crop them\n    equally as RGB Images.\n    Args:\n        polycam_depth_image_filenames: List of Paths of images to copy to a new directory.\n        depth_dir: Path to the output directory.\n        crop_border_pixels: If not None, crops each edge by the specified number of pixels.\n        verbose: If True, print extra logging.\n    Returns:\n        A list of the copied depth maps paths.\n    \"\"\"\n    depth_dir.mkdir(parents=True, exist_ok=True)\n\n    # copy and upscale them to new directory\n    with status(\n        msg=\"[bold yellow] Upscaling depth maps...\",\n        spinner=\"growVertical\",\n        verbose=verbose,\n    ):\n        upscale_factor = 2**POLYCAM_UPSCALING_TIMES\n        assert upscale_factor > 1\n        assert isinstance(upscale_factor, int)\n\n        copied_depth_map_paths = copy_images_list(\n            image_paths=polycam_depth_image_filenames,\n            image_dir=depth_dir,\n            num_downscales=num_downscales,\n            crop_border_pixels=crop_border_pixels,\n            verbose=verbose,\n            upscale_factor=upscale_factor,\n            nearest_neighbor=True,\n        )\n\n    CONSOLE.log(\"[bold green]:tada: Done upscaling depth maps.\")\n    return copied_depth_map_paths\n\n\ndef copy_images(\n    data: Path,\n    image_dir: Path,\n    image_prefix: str = \"frame_\",\n    verbose: bool = False,\n    keep_image_dir: bool = False,\n    crop_factor: Tuple[float, float, float, float] = (0.0, 0.0, 0.0, 0.0),\n    num_downscales: int = 0,\n    same_dimensions: bool = True,\n) -> OrderedDict[Path, Path]:\n    \"\"\"Copy images from a directory to a new directory.\n\n    Args:\n        data: Path to the directory of images.\n        image_dir: Path to the output directory.\n        image_prefix: Prefix for the image filenames.\n        verbose: If True, print extra logging.\n        crop_factor: Portion of the image to crop. Should be in [0,1] (top, bottom, left, right)\n        keep_image_dir: If True, don't delete the output directory if it already exists.\n    Returns:\n        The mapping from the original filenames to the new ones.\n    \"\"\"\n    with status(msg=\"[bold yellow]Copying images...\", spinner=\"bouncingBall\", verbose=verbose):\n        image_paths = list_images(data)\n\n        if len(image_paths) == 0:\n            CONSOLE.log(\"[bold red]:skull: No usable images in the data folder.\")\n            sys.exit(1)\n\n        copied_images = copy_images_list(\n            image_paths=image_paths,\n            image_dir=image_dir,\n            crop_factor=crop_factor,\n            verbose=verbose,\n            image_prefix=image_prefix,\n            keep_image_dir=keep_image_dir,\n            num_downscales=num_downscales,\n            same_dimensions=same_dimensions,\n        )\n        return OrderedDict((original_path, new_path) for original_path, new_path in zip(image_paths, copied_images))\n\n\ndef downscale_images(\n    image_dir: Path,\n    num_downscales: int,\n    folder_name: str = \"images\",\n    nearest_neighbor: bool = False,\n    verbose: bool = False,\n) -> str:\n    \"\"\"(Now deprecated; much faster integrated into copy_images.)\n    Downscales the images in the directory. Uses FFMPEG.\n\n    Args:\n        image_dir: Path to the directory containing the images.\n        num_downscales: Number of times to downscale the images. Downscales by 2 each time.\n        folder_name: Name of the output folder\n        nearest_neighbor: Use nearest neighbor sampling (useful for depth images)\n        verbose: If True, logs the output of the command.\n\n    Returns:\n        Summary of downscaling.\n    \"\"\"\n\n    if num_downscales == 0:\n        return \"No downscaling performed.\"\n\n    with status(\n        msg=\"[bold yellow]Downscaling images...\",\n        spinner=\"growVertical\",\n        verbose=verbose,\n    ):\n        downscale_factors = [2**i for i in range(num_downscales + 1)[1:]]\n        for downscale_factor in downscale_factors:\n            assert downscale_factor > 1\n            assert isinstance(downscale_factor, int)\n            downscale_dir = image_dir.parent / f\"{folder_name}_{downscale_factor}\"\n            downscale_dir.mkdir(parents=True, exist_ok=True)\n            # Using %05d ffmpeg commands appears to be unreliable (skips images).\n            for f in list_images(image_dir):\n                filename = f.name\n                nn_flag = \"\" if not nearest_neighbor else \":flags=neighbor\"\n                ffmpeg_cmd = [\n                    f'ffmpeg -y -noautorotate -i \"{image_dir / filename}\" ',\n                    f\"-q:v 2 -vf scale=iw/{downscale_factor}:ih/{downscale_factor}{nn_flag} \",\n                    f'\"{downscale_dir / filename}\"',\n                ]\n                ffmpeg_cmd = \" \".join(ffmpeg_cmd)\n                run_command(ffmpeg_cmd, verbose=verbose)\n\n    CONSOLE.log(\"[bold green]:tada: Done downscaling images.\")\n    downscale_text = [f\"[bold blue]{2**(i+1)}x[/bold blue]\" for i in range(num_downscales)]\n    downscale_text = \", \".join(downscale_text[:-1]) + \" and \" + downscale_text[-1]\n    return f\"We downsampled the images by {downscale_text}\"\n\n\ndef find_tool_feature_matcher_combination(\n    sfm_tool: Literal[\"any\", \"colmap\", \"hloc\"],\n    feature_type: Literal[\n        \"any\",\n        \"sift\",\n        \"superpoint\",\n        \"superpoint_aachen\",\n        \"superpoint_max\",\n        \"superpoint_inloc\",\n        \"r2d2\",\n        \"d2net-ss\",\n        \"sosnet\",\n        \"disk\",\n    ],\n    matcher_type: Literal[\n        \"any\",\n        \"NN\",\n        \"superglue\",\n        \"superglue-fast\",\n        \"NN-superpoint\",\n        \"NN-ratio\",\n        \"NN-mutual\",\n        \"adalam\",\n        \"disk+lightglue\",\n        \"superpoint+lightglue\",\n    ],\n) -> Union[\n    Tuple[None, None, None],\n    Tuple[\n        Literal[\"colmap\", \"hloc\"],\n        Literal[\n            \"sift\",\n            \"superpoint_aachen\",\n            \"superpoint_max\",\n            \"superpoint_inloc\",\n            \"r2d2\",\n            \"d2net-ss\",\n            \"sosnet\",\n            \"disk\",\n        ],\n        Literal[\n            \"NN\",\n            \"superglue\",\n            \"superglue-fast\",\n            \"NN-superpoint\",\n            \"NN-ratio\",\n            \"NN-mutual\",\n            \"adalam\",\n            \"disk+lightglue\",\n            \"superpoint+lightglue\",\n        ],\n    ],\n]:\n    \"\"\"Find a valid combination of sfm tool, feature type, and matcher type.\n    Basically, replace the default parameters 'any' by usable value\n\n    Args:\n        sfm_tool: Sfm tool name (any, colmap, hloc)\n        feature_type: Type of image features (any, sift, superpoint, ...)\n        matcher_type: Type of matching algorithm (any, NN, superglue,...)\n\n    Returns:\n        Tuple of sfm tool, feature type, and matcher type.\n        Returns (None,None,None) if no valid combination can be found\n    \"\"\"\n    if sfm_tool == \"any\":\n        if (feature_type in (\"any\", \"sift\")) and (matcher_type in (\"any\", \"NN\")):\n            sfm_tool = \"colmap\"\n        else:\n            sfm_tool = \"hloc\"\n\n    if sfm_tool == \"colmap\":\n        if (feature_type not in (\"any\", \"sift\")) or (matcher_type not in (\"any\", \"NN\")):\n            return (None, None, None)\n        return (\"colmap\", \"sift\", \"NN\")\n    if sfm_tool == \"hloc\":\n        if feature_type in (\"any\", \"superpoint\"):\n            feature_type = \"superpoint_aachen\"\n\n        if matcher_type == \"any\":\n            matcher_type = \"superglue\"\n        elif matcher_type == \"NN\":\n            matcher_type = \"NN-mutual\"\n\n        return (sfm_tool, feature_type, matcher_type)\n    return (None, None, None)\n\n\ndef generate_circle_mask(height: int, width: int, percent_radius) -> Optional[np.ndarray]:\n    \"\"\"generate a circle mask of the given size.\n\n    Args:\n        height: The height of the mask.\n        width: The width of the mask.\n        percent_radius: The radius of the circle as a percentage of the image diagonal size.\n\n    Returns:\n        The mask or None if the radius is too large.\n    \"\"\"\n    if percent_radius <= 0.0:\n        CONSOLE.log(\"[bold red]:skull: The radius of the circle mask must be positive.\")\n        sys.exit(1)\n    if percent_radius >= 1.0:\n        return None\n    mask = np.zeros((height, width), dtype=np.uint8)\n    center = (width // 2, height // 2)\n    radius = int(percent_radius * np.sqrt(width**2 + height**2) / 2.0)\n    cv2.circle(mask, center, radius, 1, -1)\n    return mask\n\n\ndef generate_crop_mask(height: int, width: int, crop_factor: Tuple[float, float, float, float]) -> Optional[np.ndarray]:\n    \"\"\"generate a crop mask of the given size.\n\n    Args:\n        height: The height of the mask.\n        width: The width of the mask.\n        crop_factor: The percent of the image to crop in each direction [top, bottom, left, right].\n\n    Returns:\n        The mask or None if no cropping is performed.\n    \"\"\"\n    if np.all(np.array(crop_factor) == 0.0):\n        return None\n    if np.any(np.array(crop_factor) < 0.0) or np.any(np.array(crop_factor) > 1.0):\n        CONSOLE.log(\"[bold red]Invalid crop percentage, must be between 0 and 1.\")\n        sys.exit(1)\n    top, bottom, left, right = crop_factor\n    mask = np.zeros((height, width), dtype=np.uint8)\n    top = int(top * height)\n    bottom = int(bottom * height)\n    left = int(left * width)\n    right = int(right * width)\n    mask[top : height - bottom, left : width - right] = 1.0\n    return mask\n\n\ndef generate_mask(\n    height: int,\n    width: int,\n    crop_factor: Tuple[float, float, float, float],\n    percent_radius: float,\n) -> Optional[np.ndarray]:\n    \"\"\"generate a mask of the given size.\n\n    Args:\n        height: The height of the mask.\n        width: The width of the mask.\n        crop_factor: The percent of the image to crop in each direction [top, bottom, left, right].\n        percent_radius: The radius of the circle as a percentage of the image diagonal size.\n\n    Returns:\n        The mask or None if no mask is needed.\n    \"\"\"\n    crop_mask = generate_crop_mask(height, width, crop_factor)\n    circle_mask = generate_circle_mask(height, width, percent_radius)\n    if crop_mask is None:\n        return circle_mask\n    if circle_mask is None:\n        return crop_mask\n    return crop_mask * circle_mask\n\n\ndef save_mask(\n    image_dir: Path,\n    num_downscales: int,\n    crop_factor: Tuple[float, float, float, float] = (0, 0, 0, 0),\n    percent_radius: float = 1.0,\n) -> Optional[Path]:\n    \"\"\"Save a mask for each image in the image directory.\n\n    Args:\n        image_dir: The directory containing the images.\n        num_downscales: The number of downscaling levels.\n        crop_factor: The percent of the image to crop in each direction [top, bottom, left, right].\n        percent_radius: The radius of the circle as a percentage of the image diagonal size.\n\n    Returns:\n        The path to the mask file or None if no mask is needed.\n    \"\"\"\n    image_path = next(image_dir.glob(\"frame_*\"))\n    image = cv2.imread(str(image_path))\n    height, width = image.shape[:2]\n    mask = generate_mask(height, width, crop_factor, percent_radius)\n    if mask is None:\n        return None\n    mask *= 255\n    mask_path = image_dir.parent / \"masks\"\n    mask_path.mkdir(exist_ok=True)\n    cv2.imwrite(str(mask_path / \"mask.png\"), mask)\n    downscale_factors = [2**i for i in range(num_downscales + 1)[1:]]\n    for downscale in downscale_factors:\n        mask_path_i = image_dir.parent / f\"masks_{downscale}\"\n        mask_path_i.mkdir(exist_ok=True)\n        mask_path_i = mask_path_i / \"mask.png\"\n        mask_i = cv2.resize(\n            mask,\n            (width // downscale, height // downscale),\n            interpolation=cv2.INTER_NEAREST,\n        )\n        cv2.imwrite(str(mask_path_i), mask_i)\n    CONSOLE.log(\":tada: Generated and saved masks.\")\n    return mask_path / \"mask.png\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/realitycapture_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper utils for processing reality capture data into the nerfstudio format.\"\"\"\n\nimport csv\nimport json\nimport shutil\nfrom pathlib import Path\nfrom typing import Dict, List, Optional\n\nimport numpy as np\nfrom PIL import Image\n\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef realitycapture_to_json(\n    image_filename_map: Dict[str, Path],\n    csv_filename: Path,\n    ply_filename: Optional[Path],\n    output_dir: Path,\n    verbose: bool = False,\n) -> List[str]:\n    \"\"\"Convert RealityCapture data into a nerfstudio dataset.\n    See https://dev.epicgames.com/community/learning/knowledge-base/vzwB/capturing-reality-realitycapture-xmp-camera-math\n\n    Args:\n        image_filenames: List of paths to the original images.\n        csv_filename: Path to the csv file containing the camera poses.\n        output_dir: Path to the output directory.\n        verbose: Whether to print verbose output.\n\n    Returns:\n        Summary of the conversion.\n    \"\"\"\n    data = {}\n    data[\"camera_model\"] = CAMERA_MODELS[\"perspective\"].value\n    # Needs to be a string for camera_utils.auto_orient_and_center_poses\n    data[\"orientation_override\"] = \"none\"\n\n    frames = []\n\n    with open(csv_filename, encoding=\"UTF-8\") as file:\n        reader = csv.DictReader(file)\n        cameras = {}\n        for row in reader:\n            for column, value in row.items():\n                cameras.setdefault(column, []).append(value)\n\n    missing_image_data = 0\n\n    for i, name in enumerate(cameras[\"#name\"]):\n        basename = name.rpartition(\".\")[0]\n        if basename not in image_filename_map:\n            if verbose:\n                CONSOLE.print(f\"Missing image for camera data {basename}, Skipping\")\n            missing_image_data += 1\n            continue\n\n        frame = {}\n        img = np.array(Image.open(output_dir / image_filename_map[basename]))\n        height, width, _ = img.shape\n        frame[\"h\"] = int(height)\n        frame[\"w\"] = int(width)\n        frame[\"file_path\"] = image_filename_map[basename].as_posix()\n        # reality capture uses the 35mm equivalent focal length\n        # See https://en.wikipedia.org/wiki/35_mm_equivalent_focal_length\n        scale = max(width, height)\n        frame[\"fl_x\"] = float(cameras[\"f\"][i]) * scale / 36.0\n        frame[\"fl_y\"] = float(cameras[\"f\"][i]) * scale / 36.0\n        frame[\"cx\"] = float(cameras[\"px\"][i]) * scale + width / 2.0\n        frame[\"cy\"] = float(cameras[\"py\"][i]) * scale + height / 2.0\n        frame[\"k1\"] = float(cameras[\"k1\"][i])\n        frame[\"k2\"] = float(cameras[\"k2\"][i])\n        frame[\"k3\"] = float(cameras[\"k3\"][i])\n        frame[\"k4\"] = float(cameras[\"k4\"][i])\n        frame[\"p1\"] = float(cameras[\"t1\"][i])\n        frame[\"p2\"] = float(cameras[\"t2\"][i])\n\n        # Transform matrix to nerfstudio format. Please refer to the documentation for coordinate system conventions.\n        rot = _get_rotation_matrix(-float(cameras[\"heading\"][i]), float(cameras[\"pitch\"][i]), float(cameras[\"roll\"][i]))\n\n        transform = np.eye(4)\n        transform[:3, :3] = rot\n        transform[:3, 3] = np.array([float(cameras[\"x\"][i]), float(cameras[\"y\"][i]), float(cameras[\"alt\"][i])])\n\n        frame[\"transform_matrix\"] = transform.tolist()\n        frames.append(frame)\n    data[\"frames\"] = frames\n\n    if ply_filename is not None:\n        shutil.copy(ply_filename, output_dir / \"sparse_pc.ply\")\n        data[\"ply_file_path\"] = \"sparse_pc.ply\"\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(data, f, indent=4)\n\n    summary = []\n    if missing_image_data > 0:\n        summary.append(f\"Missing image data for {missing_image_data} cameras.\")\n    if len(frames) < len(image_filename_map):\n        summary.append(f\"Missing camera data for {len(image_filename_map) - len(frames)} frames.\")\n    summary.append(f\"Final dataset is {len(frames)} frames.\")\n\n    return summary\n\n\ndef _get_rotation_matrix(yaw, pitch, roll):\n    \"\"\"Returns a rotation matrix given euler angles.\"\"\"\n\n    s_yaw = np.sin(np.deg2rad(yaw))\n    c_yaw = np.cos(np.deg2rad(yaw))\n    s_pitch = np.sin(np.deg2rad(pitch))\n    c_pitch = np.cos(np.deg2rad(pitch))\n    s_roll = np.sin(np.deg2rad(roll))\n    c_roll = np.cos(np.deg2rad(roll))\n\n    rot_x = np.array([[1, 0, 0], [0, c_pitch, -s_pitch], [0, s_pitch, c_pitch]])\n    rot_y = np.array([[c_roll, 0, s_roll], [0, 1, 0], [-s_roll, 0, c_roll]])\n    rot_z = np.array([[c_yaw, -s_yaw, 0], [s_yaw, c_yaw, 0], [0, 0, 1]])\n\n    return rot_z @ rot_x @ rot_y\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/record3d_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper functions for processing record3d data.\"\"\"\n\nimport json\nfrom pathlib import Path\nfrom typing import List\n\nimport numpy as np\nfrom scipy.spatial.transform import Rotation\n\nfrom nerfstudio.process_data.process_data_utils import CAMERA_MODELS\nfrom nerfstudio.utils import io\n\n\ndef record3d_to_json(images_paths: List[Path], metadata_path: Path, output_dir: Path, indices: np.ndarray) -> int:\n    \"\"\"Converts Record3D's metadata and image paths to a JSON file.\n\n    Args:\n        images_paths: list if image paths.\n        metadata_path: Path to the Record3D metadata JSON file.\n        output_dir: Path to the output directory.\n        indices: Indices to sample the metadata_path. Should be the same length as images_paths.\n\n    Returns:\n        The number of registered images.\n    \"\"\"\n\n    assert len(images_paths) == len(indices)\n\n    metadata_dict = io.load_from_json(metadata_path)\n\n    poses_data = np.array(metadata_dict[\"poses\"])  # (N, 3, 4)\n    # NB: Record3D / scipy use \"scalar-last\" format quaternions (x y z w)\n    # https://fzheng.me/2017/11/12/quaternion_conventions_en/\n    camera_to_worlds = np.concatenate(\n        [Rotation.from_quat(poses_data[:, :4]).as_matrix(), poses_data[:, 4:, None]],\n        axis=-1,\n    ).astype(np.float32)\n    camera_to_worlds = camera_to_worlds[indices]\n\n    homogeneous_coord = np.zeros_like(camera_to_worlds[..., :1, :])\n    homogeneous_coord[..., :, 3] = 1\n    camera_to_worlds = np.concatenate([camera_to_worlds, homogeneous_coord], -2)\n\n    frames = []\n    for i, im_path in enumerate(images_paths):\n        c2w = camera_to_worlds[i]\n        frame = {\n            \"file_path\": im_path.as_posix(),\n            \"transform_matrix\": c2w.tolist(),\n        }\n        frames.append(frame)\n\n    # Camera intrinsics\n    K = np.array(metadata_dict[\"K\"]).reshape((3, 3)).T\n    focal_length = K[0, 0]\n\n    H = metadata_dict[\"h\"]\n    W = metadata_dict[\"w\"]\n\n    # TODO(akristoffersen): The metadata dict comes with principle points,\n    # but caused errors in image coord indexing. Should update once that is fixed.\n    cx, cy = W / 2, H / 2\n\n    out = {\n        \"fl_x\": focal_length,\n        \"fl_y\": focal_length,\n        \"cx\": cx,\n        \"cy\": cy,\n        \"w\": W,\n        \"h\": H,\n        \"camera_model\": CAMERA_MODELS[\"perspective\"].name,\n    }\n\n    out[\"frames\"] = frames\n\n    with open(output_dir / \"transforms.json\", \"w\", encoding=\"utf-8\") as f:\n        json.dump(out, f, indent=4)\n\n    return len(frames)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/process_data/video_to_nerfstudio_dataset.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Processes a video to a nerfstudio compatible dataset.\"\"\"\n\nimport shutil\nfrom dataclasses import dataclass\nfrom typing import Literal, Optional\n\nfrom nerfstudio.process_data import equirect_utils, process_data_utils\nfrom nerfstudio.process_data.colmap_converter_to_nerfstudio_dataset import ColmapConverterToNerfstudioDataset\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass VideoToNerfstudioDataset(ColmapConverterToNerfstudioDataset):\n    \"\"\"Process videos into a nerfstudio dataset.\n\n    This script does the following:\n\n    1. Converts the video into images and downscales them.\n    2. Calculates the camera poses for each image using `COLMAP <https://colmap.github.io/>`_.\n    \"\"\"\n\n    num_frames_target: int = 300\n    \"\"\"Target number of frames to use per video, results may not be exact.\"\"\"\n    percent_radius_crop: float = 1.0\n    \"\"\"Create circle crop mask. The radius is the percent of the image diagonal.\"\"\"\n    matching_method: Literal[\"exhaustive\", \"sequential\", \"vocab_tree\"] = \"sequential\"\n    \"\"\"Feature matching method to use. Vocab tree is recommended for a balance of speed\n    and accuracy. Exhaustive is slower but more accurate. Sequential is faster but\n    should only be used for videos.\"\"\"\n    random_seed: Optional[int] = None\n    \"\"\"Random seed to select video frames for training set\"\"\"\n    eval_random_seed: Optional[int] = None\n    \"\"\"Random seed to select video frames for eval set\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process video into a nerfstudio dataset.\"\"\"\n\n        summary_log = []\n        summary_log_eval = []\n        # Convert video to images\n        if self.camera_type == \"equirectangular\":\n            # create temp images folder to store the equirect and perspective images\n            temp_image_dir = self.output_dir / \"temp_images\"\n            temp_image_dir.mkdir(parents=True, exist_ok=True)\n            summary_log, num_extracted_frames = process_data_utils.convert_video_to_images(\n                self.data,\n                image_dir=temp_image_dir,\n                num_frames_target=self.num_frames_target,\n                num_downscales=0,\n                crop_factor=(0.0, 0.0, 0.0, 0.0),\n                verbose=self.verbose,\n                random_seed=self.random_seed,\n            )\n        else:\n            # If we're not dealing with equirects we can downscale in one step.\n            summary_log, num_extracted_frames = process_data_utils.convert_video_to_images(\n                self.data,\n                image_dir=self.image_dir,\n                num_frames_target=self.num_frames_target,\n                num_downscales=self.num_downscales,\n                crop_factor=self.crop_factor,\n                verbose=self.verbose,\n                image_prefix=\"frame_train_\" if self.eval_data is not None else \"frame_\",\n                keep_image_dir=False,\n                random_seed=self.random_seed,\n            )\n            if self.eval_data is not None:\n                summary_log_eval, num_extracted_frames_eval = process_data_utils.convert_video_to_images(\n                    self.eval_data,\n                    image_dir=self.image_dir,\n                    num_frames_target=self.num_frames_target,\n                    num_downscales=self.num_downscales,\n                    crop_factor=self.crop_factor,\n                    verbose=self.verbose,\n                    image_prefix=\"frame_eval_\",\n                    keep_image_dir=True,\n                    random_seed=self.eval_random_seed,\n                )\n                summary_log += summary_log_eval\n                num_extracted_frames += num_extracted_frames_eval\n\n        # Generate planar projections if equirectangular\n        if self.camera_type == \"equirectangular\":\n            if self.eval_data is not None:\n                raise ValueError(\"Cannot use eval_data with camera_type equirectangular.\")\n\n            perspective_image_size = equirect_utils.compute_resolution_from_equirect(\n                self.output_dir / \"temp_images\", self.images_per_equirect\n            )\n\n            equirect_utils.generate_planar_projections_from_equirectangular(\n                self.output_dir / \"temp_images\",\n                perspective_image_size,\n                self.images_per_equirect,\n                crop_factor=self.crop_factor,\n            )\n\n            # copy the perspective images to the image directory\n            process_data_utils.copy_images(\n                self.output_dir / \"temp_images\" / \"planar_projections\",\n                image_dir=self.output_dir / \"images\",\n                verbose=False,\n            )\n\n            # remove the temp_images folder\n            shutil.rmtree(self.output_dir / \"temp_images\", ignore_errors=True)\n\n            self.camera_type = \"perspective\"\n\n            # # Downscale images\n            summary_log.append(\n                process_data_utils.downscale_images(self.image_dir, self.num_downscales, verbose=self.verbose)\n            )\n\n        # Create mask\n        mask_path = process_data_utils.save_mask(\n            image_dir=self.image_dir,\n            num_downscales=self.num_downscales,\n            crop_factor=(0.0, 0.0, 0.0, 0.0),\n            percent_radius=self.percent_radius_crop,\n        )\n        if mask_path is not None:\n            summary_log.append(f\"Saved mask to {mask_path}\")\n\n        # Run Colmap\n        if not self.skip_colmap:\n            self._run_colmap(mask_path)\n\n        # Export depth maps\n        image_id_to_depth_path, log_tmp = self._export_depth()\n        summary_log += log_tmp\n\n        summary_log += self._save_transforms(num_extracted_frames, image_id_to_depth_path, mask_path)\n\n        CONSOLE.log(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.log(summary)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/py.typed",
    "content": ""
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/blender/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/blender/nerfstudio_blender.py",
    "content": "# type: ignore\n\n# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nnerfstudio_blender.py\n\"\"\"\n\nbl_info = {\n    \"name\": \"Nerfstudio Add-On\",\n    \"description\": \"Create a Nerfstudio JSON camera path from the Blender camera path \\\n    or import a Nerfstudio camera path as a Blender camera to composite Blender renders \\\n    over a NeRF background render for VFX\",\n    \"author\": \"Cyrus Vachha\",\n    \"version\": (1, 0),\n    \"blender\": (3, 0, 0),\n    \"category\": \"Nerfstudio\",\n}\n\n\nimport json  # noqa: E402\nfrom math import atan, degrees, radians, tan  # noqa: E402\n\nimport bpy  # noqa: E402\nfrom mathutils import Matrix  # noqa: E402\n\n\nclass CreateJSONCameraPath(bpy.types.Operator):\n    \"\"\"Create a JSON camera path from the Blender camera animation.\"\"\"\n\n    bl_idname = \"opr.create_json_camera_path\"\n    bl_label = \"Nerfstudio Camera Path Generator\"\n\n    cam_obj = None  # the render camera is the active camera\n    nerf_bg_mesh = None  # the background NeRF as a mesh\n\n    fov_list = []  # list of FOV at each frame\n    transformed_camera_path_mat = []  # final transformed world matrix of the camera at each frame\n\n    complete_json_obj = {}  # full Nerfstudio input json object\n\n    file_path_json = \"\"  # file path input\n\n    def get_camera_coordinates(self):\n        \"\"\"Create a list of transformed Blender camera coordinates and converted FOV.\"\"\"\n\n        org_camera_path_mat = []  # list of world matrix of the active camera at each frame\n        nerf_mesh_mat_list = []  # list of world matrix of the NeRF mesh at each frame\n\n        curr_frame = bpy.context.scene.frame_start\n\n        while curr_frame <= bpy.context.scene.frame_end:\n            bpy.context.scene.frame_set(curr_frame)\n            org_camera_path_mat += [self.cam_obj.matrix_world.copy()]\n\n            if bpy.context.scene.render.resolution_y >= bpy.context.scene.render.resolution_x:\n                # portrait orientation\n\n                if self.cam_obj.data.sensor_fit == \"HORIZONTAL\":\n                    # convert horizontal fov to vertical fov with aspect ratio\n                    cam_aspect_ratio = bpy.context.scene.render.resolution_y / bpy.context.scene.render.resolution_x\n                    nerfstudio_fov = 2 * atan(tan(self.cam_obj.data.angle / 2.0) * cam_aspect_ratio)\n                else:\n                    # sensor fit is either vertical or auto\n                    nerfstudio_fov = self.cam_obj.data.angle\n\n            else:\n                # landscape orientation\n\n                if self.cam_obj.data.sensor_fit == \"VERTICAL\":\n                    nerfstudio_fov = self.cam_obj.data.angle\n                else:\n                    # sensor fit is either horizontal or auto\n                    # convert horizontal fov to vertical fov with aspect ratio\n                    cam_aspect_ratio = bpy.context.scene.render.resolution_y / bpy.context.scene.render.resolution_x\n                    nerfstudio_fov = 2 * atan(tan(self.cam_obj.data.angle / 2.0) * cam_aspect_ratio)\n\n            self.fov_list += [degrees(nerfstudio_fov)]\n            curr_frame += bpy.context.scene.frame_step\n            nerf_mesh_mat_list += [self.nerf_bg_mesh.matrix_world.copy()]\n\n            # case when step size is 0 there is only one frame\n            if bpy.context.scene.frame_step == 0:\n                break\n\n        # transform the camera world matrix based on the NeRF mesh transformation\n        for i, org_cam_path_mat_val in enumerate(org_camera_path_mat):\n            self.transformed_camera_path_mat += [nerf_mesh_mat_list[i].inverted() @ org_cam_path_mat_val]\n\n    def get_list_from_matrix_path(self, input_mat):\n        \"\"\"Flatten matrix to list for camera path.\"\"\"\n        full_arr = list(input_mat.row[0]) + list(input_mat.row[1]) + list(input_mat.row[2]) + list(input_mat.row[3])\n        return full_arr\n\n    def get_list_from_matrix_keyframe(self, input_mat):\n        \"\"\"Flatten matrix to list for keyframes.\"\"\"\n        full_arr = list(input_mat.col[0]) + list(input_mat.col[1]) + list(input_mat.col[2]) + list(input_mat.col[3])\n        return full_arr\n\n    def construct_json_obj(self):\n        \"\"\"Get fields for JSON camera path.\"\"\"\n        cam_type = self.cam_obj.data.type\n        if cam_type == \"PERSP\":\n            cam_type = \"perspective\"\n        elif cam_type == \"PANO\" and self.cam_obj.data.cycles.panorama_type == \"EQUIRECTANGULAR\":\n            cam_type = \"equirectangular\"\n        else:\n            self.report(\n                {\"WARNING\"}, \"Nerfstudio Add-on Warning: Only perspective and equirectangular cameras are supported\"\n            )\n            cam_type = \"perspective\"\n\n        render_height = int(\n            bpy.context.scene.render.resolution_y * (bpy.context.scene.render.resolution_percentage * 0.01)\n        )\n        render_width = int(\n            bpy.context.scene.render.resolution_x * (bpy.context.scene.render.resolution_percentage * 0.01)\n        )\n        render_fps = bpy.context.scene.render.fps\n\n        # case when step size is 0 there is only one frame\n        if bpy.context.scene.frame_step == 0:\n            render_seconds = 1 / render_fps\n        else:\n            render_seconds = (\n                (bpy.context.scene.frame_end - bpy.context.scene.frame_start) // (bpy.context.scene.frame_step) + 1\n            ) / render_fps\n\n        smoothness_value = 0\n        is_cycle = False\n\n        # construct camera path\n        final_camera_path = []\n\n        for i, transformed_camera_path_mat_val in enumerate(self.transformed_camera_path_mat):\n            camera_path_elem = {\n                \"camera_to_world\": self.get_list_from_matrix_path(transformed_camera_path_mat_val),\n                \"fov\": self.fov_list[i],\n                \"aspect\": 1,\n            }\n            final_camera_path += [camera_path_elem]\n\n        # construct keyframes\n        keyframe_list = []\n\n        for i, transformed_camera_path_mat_val in enumerate(self.transformed_camera_path_mat):\n            curr_properties = (\n                '[[\"FOV\",'\n                + str(self.fov_list[i])\n                + '],[\"NAME\",\"Camera '\n                + str(i)\n                + '\"],[\"TIME\",'\n                + str(i / render_fps)\n                + \"]]\"\n            )\n\n            keyframe_elem = {\n                \"matrix\": str(self.get_list_from_matrix_keyframe(self.transformed_camera_path_mat[i])),\n                \"fov\": self.fov_list[i],\n                \"aspect\": 1,\n                \"properties\": curr_properties,\n            }\n            keyframe_list += [keyframe_elem]\n\n        overall_json = {\n            \"keyframes\": keyframe_list,\n            \"camera_type\": cam_type,\n            \"render_height\": render_height,\n            \"render_width\": render_width,\n            \"camera_path\": final_camera_path,\n            \"fps\": render_fps,\n            \"seconds\": render_seconds,\n            \"smoothness_value\": smoothness_value,\n            \"is_cycle\": is_cycle,\n        }\n\n        self.complete_json_obj = json.dumps(overall_json, indent=2)\n\n    def write_json_to_file(self):\n        \"\"\"Write the JSON object to a new file.\"\"\"\n\n        full_abs_file_path = bpy.path.abspath(self.file_path_json + \"camera_path_blender.json\")\n        with open(full_abs_file_path, \"w\", encoding=\"utf8\") as output_json_camera_path:\n            output_json_camera_path.truncate(0)\n            output_json_camera_path.write(self.complete_json_obj)\n\n        self.complete_json_obj = {}\n        print(\"\\nFinished creating camera path json file at \" + full_abs_file_path + \"\\n\")\n\n    def execute(self, context):\n        \"\"\"Execute the camera path creation process.\"\"\"\n        # get user specified values from UI\n\n        self.cam_obj = bpy.context.scene.camera\n        self.nerf_bg_mesh = context.scene.NeRF\n        self.file_path_json = context.scene.JSONInputFilePath\n\n        # check input\n        if self.nerf_bg_mesh is None:\n            self.report(\n                {\"ERROR\"}, \"Nerfstudio add-on Error! - Please input NeRF representation (as mesh or point cloud)\"\n            )\n            return {\"FINISHED\"}\n\n        if self.file_path_json == \"\":\n            self.report({\"ERROR\"}, \"Nerfstudio add-on Error! - Please input a file path for the output JSON\")\n            return {\"FINISHED\"}\n\n        # reset lists before running\n        self.fov_list = []\n        self.transformed_camera_path_mat = []\n        self.complete_json_obj = {}\n\n        # create the path\n        self.get_camera_coordinates()\n        self.construct_json_obj()\n        self.write_json_to_file()\n\n        return {\"FINISHED\"}\n\n\nclass ReadJSONinputCameraPath(bpy.types.Operator):\n    \"\"\"Create a camera with an animation path based on an input Nerfstudio JSON.\"\"\"\n\n    bl_idname = \"opr.read_json_camera_path\"\n    bl_label = \"Blender Camera Generator from JSON\"\n\n    # cam_obj = None # the render camera is the active camera\n    nerf_bg_mesh = None  # the background NeRF as a mesh\n\n    fov_list = []  # list of FOV at each frame\n    transformed_camera_path_mat = []  # final transformed world matrix of the camera at each frame\n    input_json = None\n\n    def read_camera_coordinates(self):\n        \"\"\"Read the camera coordinates (world matrix and fov) from the json camera path.\"\"\"\n\n        json_cam_path = self.input_json[\"camera_path\"]\n        self.fov_list = []\n        self.transformed_camera_path_mat = []\n\n        keyframe_counter = 0\n        for cam_keyframe in json_cam_path:\n            cam_to_world = cam_keyframe[\"camera_to_world\"]\n\n            # convert cam_to_world to 4x4 matrix\n            orig_cam_mat = Matrix([cam_to_world[0:4], cam_to_world[4:8], cam_to_world[8:12], cam_to_world[12:]])\n\n            # matrix transformation based on the nerf mesh to find relative camera positions\n            self.transformed_camera_path_mat += [self.nerf_bg_mesh.matrix_world.copy() @ orig_cam_mat]\n\n            # record fov\n            self.fov_list += [cam_keyframe[\"fov\"]]\n\n            keyframe_counter += 1\n\n    def generate_camera(self):\n        \"\"\"Create a new camera with the animation (position and fov) and the corresponding type.\"\"\"\n\n        json_cam_path = self.input_json[\"camera_path\"]\n\n        camera_data = bpy.data.cameras.new(name=\"NerfstudioCamera\")\n        camera_data = bpy.data.cameras.new(name=\"NerfstudioCamera\")\n        nerfstudio_camera_object = bpy.data.objects.new(\"NerfstudioCamera\", camera_data)\n        bpy.context.scene.collection.objects.link(nerfstudio_camera_object)\n\n        curr_frame = 0\n        while curr_frame < len(json_cam_path):\n            actual_frame = curr_frame + 1\n            # animate camera transform\n            nerfstudio_camera_object.matrix_world = self.transformed_camera_path_mat[curr_frame]\n            nerfstudio_camera_object.keyframe_insert(\"location\", frame=actual_frame)\n            nerfstudio_camera_object.keyframe_insert(\"rotation_euler\", frame=actual_frame)\n\n            # set scale to 1,1,1 (scale is not keyframed)\n            nerfstudio_camera_object.scale = (1, 1, 1)\n\n            # animate fov\n            nerfstudio_camera_object.data.sensor_fit = \"VERTICAL\"\n            nerfstudio_camera_object.data.lens_unit = \"FOV\"\n            nerfstudio_camera_object.data.angle = radians(self.fov_list[curr_frame])\n\n            # set keyframe for focal length\n            nerfstudio_camera_object.data.keyframe_insert(data_path=\"lens\", frame=actual_frame)\n\n            curr_frame += 1\n\n        # set camera attributes\n        input_cam_type = self.input_json[\"camera_type\"]\n        if input_cam_type == \"perspective\":\n            nerfstudio_camera_object.data.type = \"PERSP\"\n        if input_cam_type == \"equirectangular\":\n            nerfstudio_camera_object.data.type = \"PANO\"\n            bpy.context.scene.render.engine = \"CYCLES\"\n            nerfstudio_camera_object.data.cycles.panorama_type = \"EQUIRECTANGULAR\"\n        if input_cam_type == \"fisheye\":\n            nerfstudio_camera_object.data.type = \"PERSP\"\n            self.report({\"WARNING\"}, \"Nerfstudio Add-on Warning: Fisheye cameras are not supported\")\n\n    def execute(self, context):\n        \"\"\"Execute Blender camera creation process.\"\"\"\n\n        # initializat variables\n        self.nerf_bg_mesh = context.scene.NeRF\n        file_path_ns_json = context.scene.NS_input_jsonFilePath  # input file path for the input json file\n\n        # check input\n        if self.nerf_bg_mesh is None:\n            self.report(\n                {\"ERROR\"}, \"Nerfstudio add-on Error! - Please input NeRF representation (as mesh or point cloud)\"\n            )\n            return {\"FINISHED\"}\n\n        if file_path_ns_json == \"\":\n            self.report({\"ERROR\"}, \"Nerfstudio add-on Error! - Please input a Nerfstudio JSON camera path\")\n            return {\"FINISHED\"}\n\n        # open the json file\n        full_abs_file_path = bpy.path.abspath(file_path_ns_json)\n        with open(full_abs_file_path, encoding=\"utf8\") as json_ns_file:\n            self.input_json = json.load(json_ns_file)\n\n        # call methods to read cam path and create camera\n        self.read_camera_coordinates()\n        self.generate_camera()\n\n        return {\"FINISHED\"}\n\n\n# --- Blender UI Panel --- #\n\n\nclass NerfstudioMainPanel(bpy.types.Panel):\n    \"\"\"Blender UI main panel for the add-on.\"\"\"\n\n    bl_idname = \"NERFSTUDIO_PT_NerfstudioMainPanel\"\n    bl_label = \"Nerfstudio Add-on\"\n    bl_space_type = \"PROPERTIES\"\n    bl_region_type = \"WINDOW\"\n    bl_context = \"render\"\n\n    def draw(self, context):\n        \"\"\"Main panel UI components.\"\"\"\n        # NeRF representation object input box\n        self.layout.label(text=\"NeRF Representation (mesh or point cloud)\")\n        self.layout.prop_search(context.scene, \"NeRF\", context.scene, \"objects\")\n        _ = self.layout.column()\n\n\nclass NerfstudioBgPanel(bpy.types.Panel):\n    \"\"\"Blender UI sub-panel for the camera path creation.\"\"\"\n\n    bl_idname = \"NERFSTUDIO_PT_NerfstudioBgPanel\"\n    bl_label = \"Nerfstudio Path Generator\"\n    bl_parent_id = \"NERFSTUDIO_PT_NerfstudioMainPanel\"\n    bl_space_type = \"PROPERTIES\"\n    bl_region_type = \"WINDOW\"\n    bl_context = \"render\"\n\n    def draw(self, context):\n        \"\"\"Sub-panel UI components.\"\"\"\n\n        self.layout.label(text=\"Camera path for Nerfstudio\")\n\n        col = self.layout.column()\n        for prop_name, _ in INPUT_PROPERTIES:\n            row = col.row()\n            row.prop(context.scene, prop_name)\n\n        col.operator(\"opr.create_json_camera_path\", text=\"Generate JSON File\")\n\n\nclass NerfstudioInputPanel(bpy.types.Panel):\n    \"\"\"Blender UI sub-panel for the Blender camera creation.\"\"\"\n\n    bl_idname = \"NERFSTUDIO_PT_NerfstudioInputPanel\"\n    bl_label = \"Nerfstudio Camera Generator\"\n    bl_parent_id = \"NERFSTUDIO_PT_NerfstudioMainPanel\"\n    bl_space_type = \"PROPERTIES\"\n    bl_region_type = \"WINDOW\"\n    bl_context = \"render\"\n\n    def draw(self, context):\n        \"\"\"Sub-panel UI components.\"\"\"\n\n        col = self.layout.column()\n        self.layout.label(text=\"Create Blender Camera From Nerfstudio JSON\")\n        col = self.layout.column()\n\n        for prop_name, _ in INPUT_PROPERTIES_NS_CAMERA:\n            row = col.row()\n            row.prop(context.scene, prop_name)\n\n        col.operator(\"opr.read_json_camera_path\", text=\"Create Camera from JSON\")\n\n\nCLASSES = [\n    NerfstudioMainPanel,\n    NerfstudioBgPanel,\n    NerfstudioInputPanel,\n    CreateJSONCameraPath,\n    ReadJSONinputCameraPath,\n]\n\nINPUT_PROPERTIES = [\n    (\n        \"JSONInputFilePath\",\n        bpy.props.StringProperty(name=\"JSON File Path\", default=\"//\", description=\"Path for JSON\", subtype=\"DIR_PATH\"),\n    )\n]\n\nINPUT_PROPERTIES_NS_CAMERA = [\n    (\n        \"NS_input_jsonFilePath\",\n        bpy.props.StringProperty(\n            name=\"JSON Nerfstudio File\",\n            default=\"\",\n            description=\"Path for JSON from Nerfstudio editor\",\n            subtype=\"FILE_PATH\",\n        ),\n    )\n]\n\nOBJ_PROPERTIES = [\"NeRF\", \"RenderCamera\"]\n\n\ndef register():\n    \"\"\"Register classes for UI panel.\"\"\"\n\n    for prop_name, prop_value in INPUT_PROPERTIES:\n        setattr(bpy.types.Scene, prop_name, prop_value)\n\n    for prop_name, prop_value in INPUT_PROPERTIES_NS_CAMERA:\n        setattr(bpy.types.Scene, prop_name, prop_value)\n\n    bpy.types.Scene.NeRF = bpy.props.PointerProperty(type=bpy.types.Object)\n\n    for curr_class in CLASSES:\n        bpy.utils.register_class(curr_class)\n\n\ndef unregister():\n    \"\"\"Unregister classes for UI panel.\"\"\"\n\n    for prop_name, _ in INPUT_PROPERTIES:\n        delattr(bpy.types.Scene, prop_name)\n\n    for prop_name, _ in INPUT_PROPERTIES_NS_CAMERA:\n        delattr(bpy.types.Scene, prop_name)\n\n    del bpy.types.Scene.NeRF\n\n    for curr_class in CLASSES:\n        bpy.utils.unregister_class(curr_class)\n\n\nif __name__ == \"__main__\":\n    register()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/completions/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/completions/install.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"Configuration script for setting up tab completion for nerfstudio in bash and zsh.\"\"\"\n\nimport concurrent.futures\nimport itertools\nimport os\nimport pathlib\nimport random\nimport shutil\nimport stat\nimport subprocess\nimport sys\nfrom typing import List, Literal, Optional, Union, get_args as typing_get_args\n\nimport tyro\nfrom rich.prompt import Confirm\nfrom typing_extensions import assert_never\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nif sys.version_info < (3, 10):\n    import importlib_metadata\nelse:\n    from importlib import metadata as importlib_metadata\n\nConfigureMode = Literal[\"install\", \"uninstall\"]\nShellType = Literal[\"zsh\", \"bash\"]\n\nHEADER_LINE = \"# Source nerfstudio autocompletions.\"\n\n\ndef _get_all_entry_points() -> List[str]:\n    # TODO: we should filter out entrypoints that are not tyro CLIs.\n    entry_points = importlib_metadata.distribution(\"nerfstudio\").entry_points\n    return [x.name for x in entry_points]\n\n\ndef _check_tyro_cli(script_path: pathlib.Path) -> bool:\n    \"\"\"Check if a path points to a script containing a tyro.cli() call. Also checks\n    for any permissions/shebang issues.\n\n    Args:\n        script_path: Path to prospective CLI.\n\n    Returns:\n        True if a completion is can be generated.\n    \"\"\"\n    assert script_path.suffix == \".py\"\n    script_src = script_path.read_text()\n\n    if '\\nif __name__ == \"__main__\":\\n' in script_src:\n        # Check script for execute permissions. For consistency, note that we apply this\n        # and the shebang check even if tyro isn't used.\n        execute_flags = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH\n        if not script_path.stat().st_mode & execute_flags and Confirm.ask(\n            f\"[yellow]:warning: {script_path} is not marked as executable. Fix?[/yellow]\",\n            default=True,\n        ):\n            script_path.chmod(script_path.stat().st_mode | execute_flags)\n\n        # Check that script has a shebang.\n        if not script_src.startswith(\"#!/\") and Confirm.ask(\n            f\"[yellow]:warning: {script_path} is missing a shebang. Fix?[/yellow]\",\n            default=True,\n        ):\n            script_path.write_text(\"#!/usr/bin/env python\\n\" + script_src)\n\n        # Return True only if compatible with tyro.\n        return \"import tyro\" in script_src and \"tyro.cli\" in script_src\n    return False\n\n\ndef _generate_completion(\n    path_or_entrypoint: Union[pathlib.Path, str], shell: ShellType, completions_dir: pathlib.Path\n) -> pathlib.Path:\n    \"\"\"Given a path to a tyro CLI, write a completion script to a target directory.\n\n    Args:\n        script_path: Path to Python CLI to generate completion script for.\n        shell: Shell to generate completion script for.\n        completions_dir: Directory to write completion script to.\n\n    Returns:\n        Success flag.\n    \"\"\"\n    if isinstance(path_or_entrypoint, pathlib.Path):\n        # Scripts.\n        target_name = \"_\" + path_or_entrypoint.name.replace(\".\", \"_\")\n        args = [sys.executable, str(path_or_entrypoint), \"--tyro-print-completion\", shell]\n    elif isinstance(path_or_entrypoint, str):\n        # Entry points.\n        target_name = \"_\" + path_or_entrypoint\n        args = [path_or_entrypoint, \"--tyro-print-completion\", shell]\n    else:\n        assert_never(path_or_entrypoint)\n\n    target_path = completions_dir / shell / target_name\n\n    # Generate and write the new completion.\n    try:\n        new = subprocess.run(\n            args=args,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            encoding=\"utf8\",\n            check=True,\n        ).stdout\n    except subprocess.CalledProcessError as e:\n        CONSOLE.log(f\":x: Completion script generation failed: {args}\")\n        if e.stdout is not None and len(e.stdout) > 0:\n            CONSOLE.log(e.stdout)\n        if e.stderr is not None and len(e.stderr) > 0:\n            CONSOLE.log(e.stderr)\n        raise e\n\n    target_path.parent.mkdir(parents=True, exist_ok=True)\n    if not target_path.exists():\n        target_path.write_text(new)\n        CONSOLE.log(f\":heavy_check_mark: Wrote new completion to {target_path}!\")\n    elif target_path.read_text().strip() != new.strip():\n        target_path.write_text(new)\n        CONSOLE.log(f\":heavy_check_mark: Updated completion at {target_path}!\")\n    else:\n        CONSOLE.log(f\"[dim]:heavy_check_mark: Nothing to do for {target_path}[/dim].\")\n    return target_path\n\n\ndef _exclamation() -> str:\n    return random.choice([\"Cool\", \"Nice\", \"Neat\", \"Great\", \"Exciting\", \"Excellent\", \"Ok\"]) + \"!\"\n\n\ndef _get_deactivate_script(commands: List[str], shell: Optional[ShellType], add_header=True) -> str:\n    if shell is None:\n        # Install the universal script\n        result_script = []\n        for shell_type in typing_get_args(ShellType):\n            result_script.append(f'if [ -n \"${shell_type.upper()}_VERSION\" ]; then')\n            result_script.append(_get_deactivate_script(commands, shell_type, add_header=False))\n            result_script.append(\"fi\")\n        source_lines = \"\\n\".join(result_script)\n\n    elif shell == \"zsh\":\n        source_lines = \"\\n\".join([f\"unset '_comps[{command}]' &> /dev/null\" for command in commands])\n    elif shell == \"bash\":\n        source_lines = \"\\n\".join([f\"complete -r {command} &> /dev/null\" for command in commands])\n    else:\n        assert_never(shell)\n\n    if add_header:\n        source_lines = f\"\\n{HEADER_LINE}\\n{source_lines}\"\n    return source_lines\n\n\ndef _get_source_script(completions_dir: pathlib.Path, shell: Optional[ShellType], add_header=True) -> str:\n    if shell is None:\n        # Install the universal script\n        result_script = []\n        for shell_type in typing_get_args(ShellType):\n            result_script.append(f'if [ -n \"${shell_type.upper()}_VERSION\" ]; then')\n            result_script.append(_get_source_script(completions_dir, shell_type, add_header=False))\n            result_script.append(\"fi\")\n        source_lines = \"\\n\".join(result_script)\n\n    elif shell == \"zsh\":\n        source_lines = \"\\n\".join(\n            [\n                \"if ! command -v compdef &> /dev/null; then\",\n                \"    autoload -Uz compinit\",\n                \"    compinit\",\n                \"fi\",\n                f\"source {completions_dir / 'setup.zsh'}\",\n            ]\n        )\n    elif shell == \"bash\":\n        source_lines = \"\\n\".join(\n            [\n                f\"source {completions_dir / 'setup.bash'}\",\n            ]\n        )\n    else:\n        assert_never(shell)\n\n    if add_header:\n        source_lines = f\"\\n{HEADER_LINE}\\n{source_lines}\"\n    return source_lines\n\n\ndef _update_rc(\n    completions_dir: pathlib.Path,\n    mode: ConfigureMode,\n    shell: ShellType,\n) -> None:\n    \"\"\"Try to add a `source /.../completions/setup.{shell}` line automatically to a user's zshrc or bashrc.\n\n    Args:\n        completions_dir: Path to location of this script.\n        shell: Shell to install completion scripts for.\n        mode: Install or uninstall completions.\n    \"\"\"\n\n    # Install or uninstall `source_line`.\n    source_lines = _get_source_script(completions_dir, shell)\n    rc_path = pathlib.Path(os.environ[\"HOME\"]) / f\".{shell}rc\"\n\n    # Always try to uninstall previous completions.\n    rc_source = rc_path.read_text()\n    while HEADER_LINE in rc_source:\n        before_install, _, after_install = rc_source.partition(HEADER_LINE)\n        source_file, _, after_install = after_install.partition(\"\\nsource \")[2].partition(\"\\n\")\n        assert source_file.endswith(f\"/completions/setup.{shell}\")\n        rc_source = before_install + after_install\n        rc_path.write_text(rc_source)\n        CONSOLE.log(f\":broom: Existing completions uninstalled from {rc_path}.\")\n\n    # Install completions.\n    if mode == \"install\":\n        assert source_lines not in rc_source\n        rc_path.write_text(rc_source.rstrip() + \"\\n\" + source_lines)\n        CONSOLE.log(\n            f\":person_gesturing_ok: Completions installed to {rc_path}. {_exclamation()} Open a new shell to try them\"\n            \" out.\"\n        )\n    else:\n        assert mode == \"uninstall\"\n\n\ndef _update_conda_scripts(\n    commands: List[str],\n    completions_dir: pathlib.Path,\n    mode: ConfigureMode,\n) -> None:\n    \"\"\"Try to add a `source /.../completions/setup.{shell}` line automatically to conda's activation scripts.\n\n    Args:\n        completions_dir: Path to location of this script.\n        mode: Install or uninstall completions.\n    \"\"\"\n\n    # Install or uninstall `source_line`.\n    activate_source_lines = _get_source_script(completions_dir, None)\n    deactivate_source_lines = _get_deactivate_script(commands, None)\n\n    conda_path = pathlib.Path(os.environ[\"CONDA_PREFIX\"])\n    activate_path = conda_path / \"etc/conda/activate.d/nerfstudio_activate.sh\"\n    deactivate_path = conda_path / \"etc/conda/deactivate.d/nerfstudio_deactivate.sh\"\n    if mode == \"uninstall\":\n        if activate_path.exists():\n            os.remove(activate_path)\n        if deactivate_path.exists():\n            os.remove(deactivate_path)\n        CONSOLE.log(f\":broom: Existing completions uninstalled from {conda_path}.\")\n    elif mode == \"install\":\n        # Install completions.\n        activate_path.parent.mkdir(exist_ok=True, parents=True)\n        deactivate_path.parent.mkdir(exist_ok=True, parents=True)\n        with activate_path.open(\"w+\", encoding=\"utf8\") as f:\n            f.write(activate_source_lines)\n        with deactivate_path.open(\"w+\", encoding=\"utf8\") as f:\n            f.write(deactivate_source_lines)\n        CONSOLE.log(\n            f\":person_gesturing_ok: Completions installed to {conda_path}. {_exclamation()} Reactivate the environment\"\n            \" to try them out.\"\n        )\n    else:\n        assert_never(mode)\n\n\ndef _get_conda_path() -> Optional[pathlib.Path]:\n    \"\"\"\n    Returns the path to the conda environment if\n    the nerfstudio package is installed in one.\n    \"\"\"\n    conda_path = None\n    if \"CONDA_PREFIX\" in os.environ:\n        # Conda is active, we will check if the Nerfstudio is installed in the conda env.\n        distribution = importlib_metadata.distribution(\"nerfstudio\")\n        if str(distribution.locate_file(\"nerfstudio\")).startswith(os.environ[\"CONDA_PREFIX\"]):\n            conda_path = pathlib.Path(os.environ[\"CONDA_PREFIX\"])\n    return conda_path\n\n\ndef _generate_completions_files(\n    completions_dir: pathlib.Path,\n    scripts_dir: pathlib.Path,\n    shells_supported: List[ShellType],\n    shells_found: List[ShellType],\n) -> None:\n    # Set to True to install completions for scripts as well.\n    include_scripts = False\n\n    # Find tyro CLIs.\n    script_paths = list(filter(_check_tyro_cli, scripts_dir.glob(\"**/*.py\"))) if include_scripts else []\n    script_names = tuple(p.name for p in script_paths)\n    assert len(set(script_names)) == len(script_names)\n\n    # Get existing completion files.\n    existing_completions = set()\n    for shell in shells_supported:\n        target_dir = completions_dir / shell\n        if target_dir.exists():\n            existing_completions |= set(target_dir.glob(\"*\"))\n\n    # Get all entry_points.\n    entry_points = _get_all_entry_points()\n\n    # Run generation jobs.\n    concurrent_executor = concurrent.futures.ThreadPoolExecutor()\n    with CONSOLE.status(\"[bold]:writing_hand:  Generating completions...\", spinner=\"bouncingBall\"):\n        completion_paths = list(\n            concurrent_executor.map(\n                lambda path_or_entrypoint_and_shell: _generate_completion(\n                    path_or_entrypoint_and_shell[0], path_or_entrypoint_and_shell[1], completions_dir\n                ),\n                itertools.product(script_paths + entry_points, shells_found),\n            )\n        )\n\n    # Delete obsolete completion files.\n    for unexpected_path in set(p.absolute() for p in existing_completions) - set(\n        p.absolute() for p in completion_paths\n    ):\n        if unexpected_path.is_dir():\n            shutil.rmtree(unexpected_path)\n        elif unexpected_path.exists():\n            unexpected_path.unlink()\n        CONSOLE.log(f\":broom: Deleted {unexpected_path}.\")\n\n\ndef main(mode: ConfigureMode = \"install\") -> None:\n    \"\"\"Main script.\n\n    Args:\n        mode: Choose between installing or uninstalling completions.\n        shells: Shell(s) to install or uninstall.\n    \"\"\"\n\n    if \"HOME\" not in os.environ:\n        CONSOLE.log(\"[bold red]$HOME is not set. Exiting.\")\n        return\n\n    # Get conda path if in conda environment.\n    conda_path = _get_conda_path()\n\n    # Try to locate the user's bashrc or zshrc.\n    shells_supported: List[ShellType] = list(typing_get_args(ShellType))\n    if conda_path is not None:\n        # Running in conda; we have to support all shells.\n        shells_found = shells_supported\n        CONSOLE.log(f\":mag: Detected conda environment {conda_path}!\")\n    else:\n        shells_found: List[ShellType] = []\n        for shell in shells_supported:\n            rc_path = pathlib.Path(os.environ[\"HOME\"]) / f\".{shell}rc\"\n            if not rc_path.exists():\n                CONSOLE.log(f\":person_shrugging: {rc_path.name} not found, skipping.\")\n            else:\n                CONSOLE.log(f\":mag: Found {rc_path.name}!\")\n                shells_found.append(shell)\n\n    # Get scripts/ directory.\n    completions_dir = pathlib.Path(__file__).absolute().parent\n    scripts_dir = completions_dir.parent\n    assert completions_dir.name == \"completions\"\n    assert scripts_dir.name == \"scripts\"\n\n    # Install mode: Generate completion for each tyro script.\n    if mode == \"uninstall\":\n        for shell in shells_supported:\n            # Reset target directory for each shell type.\n            target_dir = completions_dir / shell\n            if target_dir.exists():\n                assert target_dir.is_dir()\n                shutil.rmtree(target_dir, ignore_errors=True)\n                CONSOLE.log(f\":broom: Deleted existing completion directory: {target_dir}.\")\n            else:\n                CONSOLE.log(f\":heavy_check_mark: No existing completions at: {target_dir}.\")\n    elif mode == \"install\":\n        _generate_completions_files(completions_dir, scripts_dir, shells_supported, shells_found)\n    else:\n        assert_never(mode)\n\n    if conda_path is not None:\n        # In conda environment we add the completions activation scripts.\n        commands = _get_all_entry_points()\n        _update_conda_scripts(commands, completions_dir, mode)\n    else:\n        # Install or uninstall from bashrc/zshrc.\n        for shell in shells_found:\n            _update_rc(completions_dir, mode, shell)\n\n    CONSOLE.print(\"[bold]All done![/bold]\")\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(main, description=__doc__)\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n# For sphinx docs\nget_parser_fn = lambda: tyro.extras.get_parser(main)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/completions/setup.bash",
    "content": "# nerfstudio completions for bash.\n#\n# This should generally be installed automatically by `configure.py`.\n\ncompletions_dir=\"$(dirname \"$BASH_SOURCE\")\"/bash\n\nif [ ! -d \"${completions_dir}\" ]; then\n  echo \"$0: Completions are missing!\"\n  echo \"Please generate them with nerfstudio/scripts/completions/generate.py!\"\n  return 1\nfi\n\n# Source each completion script.\nfor completion_path in ${completions_dir}/*\ndo\n    source $completion_path\ndone\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/completions/setup.zsh",
    "content": "# nerfstudio completions for zsh.\n#\n# This should generally be installed automatically by `configure.py`.\n\ncompletions_dir=\"${0:a:h}\"/zsh\n\nif [ ! -d \"${completions_dir}\" ]; then\n  echo \"$0: Completions are missing!\"\n  echo \"Please generate them with nerfstudio/scripts/completions/generate.py!\"\n  return 1\nfi\n\n# Manually load and define each completion.\n#\n# Adding the completions directory to our fpath and re-initializing would work\n# as well:\n#     fpath+=${completions_dir}\n#     autoload -Uz compinit; compinit\n# But would be several orders of magnitude slower.\nfor completion_path in ${completions_dir}/*\ndo\n  # /some/path/to/_our_completion_py => _our_completion_py\n  completion_name=${completion_path##*/}\n  if [[ $name == *_py ]]; then\n    # _our_completion_py => our_completion.py\n    script_name=\"${completion_name:1:-3}.py\"\n  else\n    # _entry-point => entry-point\n    script_name=\"${completion_name:1}\"\n  fi\n\n  autoload -Uz $completion_path\n  compdef $completion_name $script_name\ndone\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/datasets/process_nuscenes_masks.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Literal, Tuple\n\nimport cv2\nimport numpy as np\nimport tyro\nfrom nuscenes.nuscenes import NuScenes as NuScenesDatabase\nfrom nuscenes.utils.geometry_utils import BoxVisibility, view_points\nfrom tqdm import tqdm\n\n\n@dataclass\nclass ProcessNuScenesMasks:\n    \"\"\"Use cuboid detections to render masks for dynamic objects.\"\"\"\n\n    data_dir: Path\n    \"\"\"Path to NuScenes dataset.\"\"\"\n    output_dir: Path\n    \"\"\"Path to the output directory.\"\"\"\n    version: Literal[\"v1.0-mini\", \"v1.0-trainval\"] = \"v1.0-mini\"\n    \"\"\"Which version of the dataset to process.\"\"\"\n    velocity_thresh: float = 0.75\n    \"\"\"Minimum speed for object to be considered dynamic.\"\"\"\n    cameras: Tuple[Literal[\"FRONT\", \"FRONT_LEFT\", \"FRONT_RIGHT\", \"BACK\", \"BACK_LEFT\", \"BACK_RIGHT\"], ...] = (\n        \"FRONT\",\n        \"FRONT_LEFT\",\n        \"FRONT_RIGHT\",\n        \"BACK\",\n        \"BACK_LEFT\",\n        \"BACK_RIGHT\",\n    )\n    \"\"\"Which cameras to use.\"\"\"\n\n    verbose: bool = False\n    \"\"\"If True, print extra logging and visualize images on screen.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Generate NuScenes dynamic object masks.\"\"\"\n\n        nusc = NuScenesDatabase(\n            version=self.version,\n            dataroot=str(self.data_dir.absolute()),\n            verbose=self.verbose,\n        )\n        cameras = [\"CAM_\" + camera for camera in self.cameras]\n\n        for camera in cameras:\n            (self.output_dir / \"masks\" / camera).mkdir(parents=True, exist_ok=True)\n\n        # get samples for scene\n        samples = [samp for samp in nusc.sample]\n\n        # sort by timestamp (only to make chronological viz easier)\n        samples.sort(key=lambda x: (x[\"scene_token\"], x[\"timestamp\"]))\n\n        # get which instances are moving in any frame (these are what we mask)\n        instances = nusc.instance\n        for instance in instances:\n            is_dynamic = False\n            ann_token = instance[\"first_annotation_token\"]\n            while ann_token:\n                velocity = nusc.box_velocity(ann_token)\n                if not np.linalg.norm(velocity) < self.velocity_thresh:\n                    is_dynamic = True\n                    break\n                ann_token = nusc.get(\"sample_annotation\", ann_token)[\"next\"]\n            instance[\"is_dynamic\"] = is_dynamic\n        instances_is_dynamic = {instance[\"token\"]: instance[\"is_dynamic\"] for instance in instances}\n\n        for sample in tqdm(samples):\n            viz = []\n            for camera in cameras:\n                camera_data = nusc.get(\"sample_data\", sample[\"data\"][camera])\n                calibrated_sensor = nusc.get(\"calibrated_sensor\", camera_data[\"calibrated_sensor_token\"])\n                intrinsics = np.array(calibrated_sensor[\"camera_intrinsic\"])\n\n                _, boxes, _ = nusc.get_sample_data(sample[\"data\"][camera], box_vis_level=BoxVisibility.ANY)\n                # TODO: BoxVisibility.ANY misses boxes that are partially behind the camera leading to missed masks\n                # Instead use BoxVisibility.NONE and make sure to rasterize box faces correctly\n\n                mask = np.ones((900, 1600), dtype=np.uint8)\n                # If is backcam, mask the truck of the ego vehicle\n                if camera == \"CAM_BACK\":\n                    mask[-100:] = 0\n\n                for box in boxes:\n                    # Dont' mask out static objects (static in all frames)\n                    instance_token = nusc.get(\"sample_annotation\", box.token)[\"instance_token\"]\n                    if not instances_is_dynamic[instance_token]:\n                        continue\n\n                    # Project box to image plane and rasterize each face\n                    corners_3d = box.corners()\n                    corners = view_points(corners_3d, intrinsics, normalize=True)[:2, :]\n                    corners = np.round(corners).astype(int).T\n\n                    # Type ignores needed because fillPoly expects cv2.Mat\n                    cv2.fillPoly(mask, [corners[[0, 1, 2, 3]]], 0)  # front # type: ignore\n                    cv2.fillPoly(mask, [corners[[4, 5, 6, 7]]], 0)  # back # type: ignore\n                    cv2.fillPoly(mask, [corners[[0, 1, 5, 4]]], 0)  # top # type: ignore\n                    cv2.fillPoly(mask, [corners[[2, 3, 7, 6]]], 0)  # bottom # type: ignore\n                    cv2.fillPoly(mask, [corners[[0, 3, 7, 4]]], 0)  # left # type: ignore\n                    cv2.fillPoly(mask, [corners[[1, 2, 6, 5]]], 0)  # right # type: ignore\n\n                maskname = os.path.split(camera_data[\"filename\"])[1].replace(\"jpg\", \"png\")\n                cv2.imwrite(\n                    str(self.output_dir / \"masks\" / camera / maskname),\n                    mask * 255,  # type: ignore\n                )\n\n                if self.verbose:\n                    img = cv2.imread(str(self.data_dir / camera_data[\"filename\"]))\n                    mask = ~mask.astype(bool)\n                    img[mask, :] = img[mask, :] - np.minimum(img[mask, :], 100)\n                    viz.append(img)\n\n            if self.verbose:\n                if len(viz) == 6:\n                    viz = np.vstack((np.hstack(viz[:3]), np.hstack(viz[3:])))\n                    viz = cv2.resize(viz, (int(1600 * 3 / 3), int(900 * 2 / 3)))\n                elif len(viz) == 3:\n                    viz = np.hstack(viz[:3])\n                    viz = cv2.resize(viz, (int(1600 * 3 / 3), int(900 / 3)))\n                elif len(viz) == 1:\n                    viz = viz[0]\n                else:\n                    raise ValueError(\"Only support 1 or 3 or 6 cameras for viz\")\n                cv2.imshow(\"\", viz)\n                cv2.waitKey(1)\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(ProcessNuScenesMasks).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/datasets/process_project_aria.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nimport sys\nimport threading\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Any, Dict, List, cast\n\nimport numpy as np\nimport open3d as o3d\nimport tyro\nfrom PIL import Image\n\ntry:\n    from projectaria_tools.core import mps\n    from projectaria_tools.core.data_provider import VrsDataProvider, create_vrs_data_provider\n    from projectaria_tools.core.mps.utils import filter_points_from_confidence\n    from projectaria_tools.core.sophus import SE3\nexcept ImportError:\n    print(\"projectaria_tools import failed, please install with pip3 install projectaria-tools'[all]'\")\n    sys.exit(1)\n\nARIA_CAMERA_MODEL = \"FISHEYE624\"\n\n# The Aria coordinate system is different than the Blender/NerfStudio coordinate system.\n# Blender / Nerfstudio: +Z = back, +Y = up, +X = right\n# Surreal: +Z = forward, +Y = down, +X = right\nT_ARIA_NERFSTUDIO = SE3.from_matrix(\n    np.array(\n        [\n            [1.0, 0.0, 0.0, 0.0],\n            [0.0, -1.0, 0.0, 0.0],\n            [0.0, 0.0, -1.0, 0.0],\n            [0.0, 0.0, 0.0, 1.0],\n        ]\n    )\n)\n\n\n@dataclass\nclass AriaCameraCalibration:\n    fx: float\n    fy: float\n    cx: float\n    cy: float\n    distortion_params: np.ndarray\n    width: int\n    height: int\n    t_device_camera: SE3\n\n\n@dataclass\nclass AriaImageFrame:\n    camera: AriaCameraCalibration\n    file_path: str\n    t_world_camera: SE3\n    timestamp_ns: float\n\n\n@dataclass\nclass TimedPoses:\n    timestamps_ns: np.ndarray\n    t_world_devices: List[SE3]\n\n\ndef get_camera_calibs(provider: VrsDataProvider, max_output_size: int) -> Dict[str, AriaCameraCalibration]:\n    \"\"\"Retrieve the per-camera factory calibration from within the VRS.\"\"\"\n\n    factory_calib = {}\n    name = \"camera-rgb\"\n    device_calib = provider.get_device_calibration()\n    assert device_calib is not None, \"Could not find device calibration\"\n    sensor_calib = device_calib.get_camera_calib(name)\n    assert sensor_calib is not None, f\"Could not find sensor calibration for {name}\"\n\n    width = sensor_calib.get_image_size()[0].item()\n    height = sensor_calib.get_image_size()[1].item()\n\n    width = sensor_calib.get_image_size()[0].item()\n    height = sensor_calib.get_image_size()[1].item()\n\n    if width > max_output_size or height > max_output_size:\n        sensor_calib = sensor_calib.rescale(\n            np.array([max_output_size, max_output_size]).astype(np.int64),\n            max_output_size / width,\n        )\n        width = sensor_calib.get_image_size()[0].item()\n        height = sensor_calib.get_image_size()[1].item()\n\n    intrinsics = sensor_calib.projection_params()\n\n    factory_calib[name] = AriaCameraCalibration(\n        fx=intrinsics[0],\n        fy=intrinsics[0],\n        cx=intrinsics[1],\n        cy=intrinsics[2],\n        distortion_params=intrinsics[3:15],\n        width=width,\n        height=height,\n        t_device_camera=sensor_calib.get_transform_device_camera(),\n    )\n\n    return factory_calib\n\n\ndef read_trajectory_csv_to_dict(file_iterable_csv: str) -> TimedPoses:\n    closed_loop_traj = mps.read_closed_loop_trajectory(file_iterable_csv)  # type: ignore\n\n    timestamps_secs, poses = zip(\n        *[(it.tracking_timestamp.total_seconds(), it.transform_world_device) for it in closed_loop_traj]\n    )\n\n    SEC_TO_NANOSEC = 1e9\n    return TimedPoses(\n        timestamps_ns=(np.array(timestamps_secs) * SEC_TO_NANOSEC).astype(int),\n        t_world_devices=poses,\n    )\n\n\ndef to_aria_image_frame(\n    provider: VrsDataProvider,\n    index: int,\n    name_to_camera: Dict[str, AriaCameraCalibration],\n    t_world_devices: TimedPoses,\n    output_dir: Path,\n    max_output_size: int,\n) -> AriaImageFrame:\n    name = \"camera-rgb\"\n\n    camera_calibration = name_to_camera[name]\n    stream_id = provider.get_stream_id_from_label(name)\n    assert stream_id is not None, f\"Could not find stream {name}\"\n\n    # Get the image corresponding to this index\n    image_data = provider.get_image_data_by_index(stream_id, index)\n    img = Image.fromarray(image_data[0].to_numpy_array())\n\n    if img.width > max_output_size or img.height > max_output_size:\n        img = img.resize((max_output_size, max_output_size))\n\n    capture_time_ns = image_data[1].capture_timestamp_ns\n\n    file_path = f\"{output_dir}/{name}_{capture_time_ns}.jpg\"\n    threading.Thread(target=lambda: img.save(file_path)).start()\n\n    # Find the nearest neighbor pose with the closest timestamp to the capture time.\n    nearest_pose_idx = np.searchsorted(t_world_devices.timestamps_ns, capture_time_ns)\n    nearest_pose_idx = np.minimum(nearest_pose_idx, len(t_world_devices.timestamps_ns) - 1)\n    assert nearest_pose_idx != -1, f\"Could not find pose for {capture_time_ns}\"\n    t_world_device = t_world_devices.t_world_devices[nearest_pose_idx]\n\n    # Compute the world to camera transform.\n    t_world_camera = t_world_device @ camera_calibration.t_device_camera @ T_ARIA_NERFSTUDIO\n\n    return AriaImageFrame(\n        camera=camera_calibration,\n        file_path=file_path,\n        t_world_camera=t_world_camera,\n        timestamp_ns=capture_time_ns,\n    )\n\n\ndef to_nerfstudio_frame(frame: AriaImageFrame) -> Dict:\n    return {\n        \"fl_x\": frame.camera.fx,\n        \"fl_y\": frame.camera.fy,\n        \"cx\": frame.camera.cx,\n        \"cy\": frame.camera.cy,\n        \"distortion_params\": frame.camera.distortion_params.tolist(),\n        \"w\": frame.camera.width,\n        \"h\": frame.camera.height,\n        \"file_path\": frame.file_path,\n        \"transform_matrix\": frame.t_world_camera.to_matrix().tolist(),\n        \"timestamp\": frame.timestamp_ns,\n    }\n\n\n@dataclass\nclass ProcessProjectAria:\n    \"\"\"Processes Project Aria data i.e. a VRS of the raw recording streams and the MPS attachments\n    that provide poses, calibration, and 3d points. More information on MPS data can be found at:\n      https://facebookresearch.github.io/projectaria_tools/docs/ARK/mps.\n    \"\"\"\n\n    vrs_file: Path\n    \"\"\"Path to the VRS file.\"\"\"\n    mps_data_dir: Path\n    \"\"\"Path to Project Aria Machine Perception Services (MPS) attachments.\"\"\"\n    output_dir: Path\n    \"\"\"Path to the output directory.\"\"\"\n    max_frames: int = 350\n    \"\"\"Number of frames to process.\"\"\"\n    max_output_size: int = 1408\n    \"\"\"Size of output images. We use the same for width/height.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Generate a nerfstudio dataset from ProjectAria data (VRS) and MPS attachments.\"\"\"\n        # Create output directory if it doesn't exist.\n        self.output_dir = self.output_dir.absolute()\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n\n        provider = create_vrs_data_provider(str(self.vrs_file.absolute()))\n        assert provider is not None, \"Cannot open file\"\n\n        name_to_camera = get_camera_calibs(provider, max_output_size=self.max_output_size)\n\n        print(\"Getting poses from closed loop trajectory CSV...\")\n        trajectory_csv = self.mps_data_dir / \"closed_loop_trajectory.csv\"\n        t_world_devices = read_trajectory_csv_to_dict(str(trajectory_csv.absolute()))\n\n        name = \"camera-rgb\"\n        stream_id = provider.get_stream_id_from_label(name)\n\n        # create an AriaImageFrame for each image in the VRS.\n        print(\"Creating Aria frames...\")\n        total_images = provider.get_num_data(stream_id)\n        if total_images >= self.max_frames:\n            indices = [int(x) for x in np.linspace(0, total_images - 1, self.max_frames)]\n        else:\n            indices = range(0, total_images)\n\n        print(f\"{total_images=}, processing {len(indices)=} \")\n\n        aria_frames = [\n            to_aria_image_frame(\n                provider,\n                index,\n                name_to_camera,\n                t_world_devices,\n                self.output_dir,\n                max_output_size=self.max_output_size,\n            )\n            for index in indices\n        ]\n\n        # create the NerfStudio frames from the AriaImageFrames.\n        print(\"Creating NerfStudio frames...\")\n        CANONICAL_RGB_VALID_RADIUS = 707.5\n        CANONICAL_RGB_WIDTH = 1408\n        rgb_valid_radius = CANONICAL_RGB_VALID_RADIUS * (aria_frames[0].camera.width / CANONICAL_RGB_WIDTH)\n        nerfstudio_frames = {\n            \"camera_model\": ARIA_CAMERA_MODEL,\n            \"frames\": [to_nerfstudio_frame(frame) for frame in aria_frames],\n            \"fisheye_crop_radius\": rgb_valid_radius,\n        }\n\n        # save global point cloud, which is useful for Gaussian Splatting.\n        points_path = self.mps_data_dir / \"global_points.csv.gz\"\n        if not points_path.exists():\n            # MPS point cloud output was renamed in Aria's December 4th, 2023 update.\n            # https://facebookresearch.github.io/projectaria_tools/docs/ARK/sw_release_notes#project-aria-updates-aria-mobile-app-v140-and-changes-to-mps\n            points_path = self.mps_data_dir / \"semidense_points.csv.gz\"\n\n        if points_path.exists():\n            print(\"Found global points, saving to PLY...\")\n            points_data = mps.read_global_point_cloud(str(points_path))  # type: ignore\n            points_data = filter_points_from_confidence(points_data)\n            pcd = o3d.geometry.PointCloud()\n            pcd.points = o3d.utility.Vector3dVector(np.array([cast(Any, it).position_world for it in points_data]))\n            ply_file_path = self.output_dir / \"global_points.ply\"\n            o3d.io.write_point_cloud(str(ply_file_path), pcd)\n\n            nerfstudio_frames[\"ply_file_path\"] = \"global_points.ply\"\n        else:\n            print(\"No global points found!\")\n\n        # write the json out to disk as transforms.json\n        print(\"Writing transforms.json\")\n        transform_file = self.output_dir / \"transforms.json\"\n        with open(transform_file, \"w\", encoding=\"UTF-8\"):\n            transform_file.write_text(json.dumps(nerfstudio_frames))\n\n\nif __name__ == \"__main__\":\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(ProcessProjectAria).main()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/docs/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/docs/add_nb_tags.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper that add tags to notebooks based on cell comments.\"\"\"\n\nimport sys\nfrom glob import glob\n\nimport nbformat as nbf\nimport tyro\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef main(check: bool = False):\n    \"\"\"Add tags to notebooks based on cell comments.\n\n    In notebook cells, you can add the following tags to the notebook by adding a comment:\n    \"# HIDDEN\" - This cell will be hidden from the notebook.\n    \"# OUTPUT_ONLY\" - This cell will only show the output.\n    \"# COLLAPSED\" - Hide the code and include a button to show the code.\n\n    Args:\n        check: check will not modify the notebooks.\n    \"\"\"\n    # Collect a list of all notebooks in the content folder\n    notebooks = glob(\"./docs/**/*.ipynb\", recursive=True)\n\n    # Text to look for in adding tags\n    text_search_dict = {\n        \"# HIDDEN\": \"remove-cell\",  # Remove the whole cell\n        \"# OUTPUT_ONLY\": \"remove-input\",  # Remove only the input\n        \"# COLLAPSED\": \"hide-input\",  # Hide the input w/ a button to show\n    }\n\n    # Search through each notebook and look for the text, add a tag if necessary\n    any_missing = False\n    for ipath in notebooks:\n        ntbk = nbf.read(ipath, nbf.NO_CONVERT)\n\n        incorrect_metadata = False\n        for cell in ntbk.cells:\n            cell_tags = cell.get(\"metadata\", {}).get(\"tags\", [])\n            found_keys = []\n            found_tags = []\n            for key, val in text_search_dict.items():\n                if key in cell.source:\n                    found_keys.append(key)\n                    found_tags.append(val)\n\n            if len(found_keys) > 1:\n                CONSOLE.print(f\"[bold yellow]Found multiple tags {found_keys} for {ipath}\")\n                sys.exit(1)\n\n            if len(cell_tags) != len(found_tags):\n                incorrect_metadata = True\n            elif len(cell_tags) == 1 and len(found_keys) == 1:\n                if found_tags[0] != cell_tags[0]:\n                    incorrect_metadata = True\n\n            cell[\"metadata\"][\"tags\"] = found_tags\n        if incorrect_metadata:\n            if check:\n                CONSOLE.print(\n                    f\"[bold yellow]{ipath} has incorrect metadata. \"\n                    \"Call `python nerfstudio.scripts.docs.add_nb_tags.py` to add it.\"\n                )\n                any_missing = True\n            else:\n                print(f\"Adding metadata to {ipath}\")\n                nbf.write(ntbk, ipath)\n\n    if not any_missing:\n        CONSOLE.print(\"[green]All notebooks have correct metadata.\")\n\n    if check and any_missing:\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(main)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/docs/build_docs.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"Simple yaml debugger\"\"\"\n\nimport subprocess\nimport sys\n\nimport tyro\nfrom rich.style import Style\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef run_command(command: str) -> None:\n    \"\"\"Run a command kill actions if it fails\n\n    Args:\n        command: command to run\n    \"\"\"\n    ret_code = subprocess.call(command, shell=True)\n    if ret_code != 0:\n        CONSOLE.print(f\"[bold red]Error: `{command}` failed. Exiting...\")\n        sys.exit(1)\n\n\ndef main(clean_cache: bool = False):\n    \"\"\"Run the github actions locally.\n\n    Args:\n        clean_cache: whether to clean the cache before building docs.\n    \"\"\"\n\n    CONSOLE.print(\"[green]Adding notebook documentation metadata\")\n    run_command(\"python nerfstudio/scripts/docs/add_nb_tags.py\")\n\n    # Add checks for building documentation\n    CONSOLE.print(\"[green]Building Documentation\")\n    if clean_cache:\n        run_command(\"cd docs/; make clean; make html SPHINXOPTS='-W;'\")\n    else:\n        run_command(\"cd docs/; make html SPHINXOPTS='-W;'\")\n\n    CONSOLE.line()\n    CONSOLE.rule(characters=\"=\", style=Style(color=\"green\"))\n    CONSOLE.print(\"[bold green]Done\")\n    CONSOLE.rule(characters=\"=\", style=Style(color=\"green\"))\n\n\nif __name__ == \"__main__\":\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(main)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/downloads/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/downloads/download_data.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Download datasets and specific captures from the datasets.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport os\nimport shutil\nimport subprocess\nimport tarfile\nimport zipfile\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Union\n\nimport gdown\nimport torch\nimport tyro\nfrom typing_extensions import Annotated\n\nfrom nerfstudio.process_data import process_data_utils\nfrom nerfstudio.scripts.downloads.utils import DatasetDownload\nfrom nerfstudio.utils import install_checks\nfrom nerfstudio.utils.scripts import run_command\n\n\n@dataclass\nclass BlenderDownload(DatasetDownload):\n    \"\"\"Download the blender dataset.\"\"\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the blender dataset.\"\"\"\n        # TODO: give this code the same structure as download_nerfstudio\n\n        # https://drive.google.com/uc?id=18JxhpWD-4ZmuFKLzKlAw-w5PpzZxXOcG\n        blender_file_id = \"18JxhpWD-4ZmuFKLzKlAw-w5PpzZxXOcG\"\n\n        final_path = save_dir / Path(\"blender\")\n        if os.path.exists(final_path):\n            shutil.rmtree(str(final_path))\n        url = f\"https://drive.google.com/uc?id={blender_file_id}\"\n        download_path = save_dir / \"blender_data.zip\"\n        gdown.download(url, output=str(download_path))\n        with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n            zip_ref.extractall(str(save_dir))\n        unzip_path = save_dir / Path(\"nerf_synthetic\")\n        final_path = save_dir / Path(\"blender\")\n        unzip_path.rename(final_path)\n        if download_path.exists():\n            download_path.unlink()\n\n\n@dataclass\nclass Sitcoms3DDownload(DatasetDownload):\n    \"\"\"Download the sitcoms3D dataset.\"\"\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the sitcoms3D dataset.\"\"\"\n\n        # https://drive.google.com/file/d/1sgKr0ZO7BQC0FYinAnRSxobIWNucAST5/view?usp=sharing\n        sitcoms3d_file_id = \"1sgKr0ZO7BQC0FYinAnRSxobIWNucAST5\"\n\n        # Download the files\n        url = f\"https://drive.google.com/uc?id={sitcoms3d_file_id}\"\n        download_path = str(save_dir / \"sitcoms3d.zip\")\n        gdown.download(url, output=download_path)\n        with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n            zip_ref.extractall(str(save_dir))\n        os.remove(download_path)\n        # The folder name of the downloaded dataset is the previously using 'friends/'\n        if os.path.exists(str(save_dir / \"friends/\")):\n            os.rename(str(save_dir / \"friends/\"), str(save_dir / \"sitcoms3d/\"))\n\n\ndef grab_file_id(zip_url: str) -> str:\n    \"\"\"Get the file id from the google drive zip url.\"\"\"\n    s = zip_url.split(\"/d/\")[1]\n    return s.split(\"/\")[0]\n\n\nnerfstudio_dataset = [\n    \"Egypt\",\n    \"person\",\n    \"kitchen\",\n    \"plane\",\n    \"dozer\",\n    \"floating-tree\",\n    \"aspen\",\n    \"stump\",\n    \"sculpture\",\n    \"Giannini-Hall\",\n]\nnerfstudio_file_ids = {\n    \"bww_entrance\": grab_file_id(\"https://drive.google.com/file/d/1ylkRHtfB3n3IRLf2wplpfxzPTq7nES9I/view?usp=sharing\"),\n    \"campanile\": grab_file_id(\"https://drive.google.com/file/d/13aOfGJRRH05pOOk9ikYGTwqFc2L1xskU/view?usp=sharing\"),\n    \"desolation\": grab_file_id(\"https://drive.google.com/file/d/14IzOOQm9KBJ3kPbunQbUTHPnXnmZus-f/view?usp=sharing\"),\n    \"library\": grab_file_id(\"https://drive.google.com/file/d/1Hjbh_-BuaWETQExn2x2qGD74UwrFugHx/view?usp=sharing\"),\n    \"poster\": grab_file_id(\"https://drive.google.com/file/d/1FceQ5DX7bbTbHeL26t0x6ku56cwsRs6t/view?usp=sharing\"),\n    \"redwoods2\": grab_file_id(\"https://drive.google.com/file/d/1rg-4NoXT8p6vkmbWxMOY6PSG4j3rfcJ8/view?usp=sharing\"),\n    \"storefront\": grab_file_id(\"https://drive.google.com/file/d/16b792AguPZWDA_YC4igKCwXJqW0Tb21o/view?usp=sharing\"),\n    \"vegetation\": grab_file_id(\"https://drive.google.com/file/d/1wBhLQ2odycrtU39y2akVurXEAt9SsVI3/view?usp=sharing\"),\n    \"Egypt\": grab_file_id(\"https://drive.google.com/file/d/1YktD85afw7uitC3nPamusk0vcBdAfjlF/view?view?usp=sharing\"),\n    \"person\": grab_file_id(\"https://drive.google.com/file/d/1HsGMwkPu-R7oU7ySMdoo6Eppq8pKhHF3/view?view?usp=sharing\"),\n    \"kitchen\": grab_file_id(\"https://drive.google.com/file/d/1IRmNyNZSNFidyj93Tt5DtaEU9h6eJdi1/view?view?usp=sharing\"),\n    \"plane\": grab_file_id(\"https://drive.google.com/file/d/1tnv2NC2Iwz4XRYNtziUWvLJjObkZNo2D/view?view?usp=sharing\"),\n    \"dozer\": grab_file_id(\"https://drive.google.com/file/d/1jQJPz5PhzTH--LOcCxvfzV_SDLEp1de3/view?view?usp=sharing\"),\n    \"floating-tree\": grab_file_id(\n        \"https://drive.google.com/file/d/1mVEHcO2ep13WPx92IPDvdQg66vLQwFSy/view?view?usp=sharing\"\n    ),\n    \"aspen\": grab_file_id(\"https://drive.google.com/file/d/1X1PQcji_QpxGfMxbETKMeK8aOnWCkuSB/view?view?usp=sharing\"),\n    \"stump\": grab_file_id(\"https://drive.google.com/file/d/1yZFAAEvtw2hs4MXrrkvhVAzEliLLXPB7/view?view?usp=sharing\"),\n    \"sculpture\": grab_file_id(\n        \"https://drive.google.com/file/d/1CUU_k0Et2gysuBn_R5qenDMfYXEhNsd1/view?view?usp=sharing\"\n    ),\n    \"Giannini-Hall\": grab_file_id(\n        \"https://drive.google.com/file/d/1UkjWXLN4qybq_a-j81FsTKghiXw39O8E/view?view?usp=sharing\"\n    ),\n    \"all\": None,\n    \"nerfstudio-dataset\": nerfstudio_dataset,\n}\n\nif TYPE_CHECKING:\n    NerfstudioCaptureName = str\nelse:\n    NerfstudioCaptureName = tyro.extras.literal_type_from_choices(nerfstudio_file_ids.keys())\n\n\ndef download_capture_name(save_dir: Path, dataset_name: str, capture_name: str, capture_name_to_file_id: dict):\n    \"\"\"Download specific captures a given dataset and capture name.\"\"\"\n\n    file_id_or_zip_url = capture_name_to_file_id[capture_name]\n    if file_id_or_zip_url.endswith(\".zip\"):\n        url = file_id_or_zip_url  # zip url\n        target_path = str(save_dir / dataset_name / capture_name)\n        os.makedirs(target_path, exist_ok=True)\n        download_path = Path(f\"{target_path}.zip\")\n        tmp_path = str(save_dir / dataset_name / f\".temp_{capture_name}\")\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        os.makedirs(tmp_path, exist_ok=True)\n        try:\n            os.remove(download_path)\n        except OSError:\n            pass\n        run_command(f\"wget {url} -O {download_path}\", verbose=True)\n    else:\n        url = f\"https://drive.google.com/uc?id={file_id_or_zip_url}\"  # file id\n        target_path = str(save_dir / dataset_name / capture_name)\n        os.makedirs(target_path, exist_ok=True)\n        download_path = Path(f\"{target_path}.zip\")\n        tmp_path = str(save_dir / dataset_name / f\".temp_{capture_name}\")\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        os.makedirs(tmp_path, exist_ok=True)\n        try:\n            os.remove(download_path)\n        except OSError:\n            pass\n        gdown.download(url, output=str(download_path))\n    with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n        zip_ref.extractall(tmp_path)\n    inner_folders = os.listdir(tmp_path)\n    inner_folders = [folder for folder in inner_folders if folder != \"__MACOSX\"]\n    assert len(inner_folders) == 1, f\"There is more than one folder inside this zip file: {inner_folders}\"\n    folder = os.path.join(tmp_path, inner_folders[0])\n    shutil.rmtree(target_path)\n    shutil.move(folder, target_path)\n    shutil.rmtree(tmp_path)\n    os.remove(download_path)\n\n\n@dataclass\nclass NerfstudioDownload(DatasetDownload):\n    \"\"\"\n    Download data in the Nerfstudio format.\n    If you are interested in the Nerfstudio Dataset subset from the SIGGRAPH 2023 paper,\n    you can obtain that by using --capture-name nerfstudio-dataset or by visiting Google Drive directly at:\n    https://drive.google.com/drive/folders/19TV6kdVGcmg3cGZ1bNIUnBBMD-iQjRbG?usp=drive_link.\n    \"\"\"\n\n    capture_name: NerfstudioCaptureName = \"bww_entrance\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the nerfstudio dataset.\"\"\"\n        if self.capture_name == \"all\":\n            for capture_name in nerfstudio_file_ids:\n                if capture_name not in (\"all\", \"nerfstudio-dataset\"):\n                    download_capture_name(save_dir, \"nerfstudio\", capture_name, nerfstudio_file_ids)\n            return\n\n        if self.capture_name == \"nerfstudio-dataset\":\n            for capture_name in nerfstudio_dataset:\n                if capture_name not in (\"all\", \"nerfstudio-dataset\"):\n                    download_capture_name(save_dir, \"nerfstudio\", capture_name, nerfstudio_file_ids)\n            return\n\n        download_capture_name(save_dir, \"nerfstudio\", self.capture_name, capture_name_to_file_id=nerfstudio_file_ids)\n\n\nrecord3d_file_ids = {\n    \"bear\": grab_file_id(\"https://drive.google.com/file/d/1WRZohWMRj0nNlYFIEBwkddDoGPvLTzkR/view?usp=sharing\")\n}\n\nif TYPE_CHECKING:\n    Record3dCaptureName = str\nelse:\n    Record3dCaptureName = tyro.extras.literal_type_from_choices(record3d_file_ids.keys())\n\n\n@dataclass\nclass Record3dDownload(DatasetDownload):\n    \"\"\"Download the record3d dataset.\"\"\"\n\n    capture_name: Record3dCaptureName = \"bear\"\n\n    def download(self, save_dir: Path):\n        download_capture_name(save_dir, \"record3d\", self.capture_name, capture_name_to_file_id=record3d_file_ids)\n\n\n@dataclass\nclass DNerfDownload(DatasetDownload):\n    \"\"\"Download the dnerf dataset.\"\"\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the D-NeRF dataset (https://github.com/albertpumarola/D-NeRF).\"\"\"\n        # TODO: give this code the same structure as download_nerfstudio\n\n        install_checks.check_curl_installed()\n        final_path = save_dir / Path(\"dnerf\")\n        if os.path.exists(final_path):\n            shutil.rmtree(str(final_path))\n        download_path = save_dir / \"dnerf_data.zip\"\n        subprocess.run(\n            [\"curl\", \"-L\", \"https://www.dropbox.com/s/raw/0bf6fl0ye2vz3vr/data.zip\", \"-o\", download_path], check=True\n        )\n        with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n            zip_ref.extractall(str(save_dir))\n        unzip_path = save_dir / Path(\"data\")\n        final_path = save_dir / Path(\"dnerf\")\n        unzip_path.rename(final_path)\n        if download_path.exists():\n            download_path.unlink()\n\n\nphototourism_downloads = {\n    \"brandenburg-gate\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/brandenburg_gate.tar.gz\",\n    \"buckingham-palace\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/buckingham_palace.tar.gz\",\n    \"colosseum-exterior\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/colosseum_exterior.tar.gz\",\n    \"grand-palace-brussels\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/grand_place_brussels.tar.gz\",\n    \"notre-dame-facade\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/notre_dame_front_facade.tar.gz\",\n    \"westminster-palace\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/palace_of_westminster.tar.gz\",\n    \"pantheon-exterior\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/pantheon_exterior.tar.gz\",\n    \"taj-mahal\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/taj_mahal.tar.gz\",\n    \"temple-nara\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/temple_nara_japan.tar.gz\",\n    \"trevi-fountain\": \"https://www.cs.ubc.ca/research/kmyi_data/imw2020/TrainingData/trevi_fountain.tar.gz\",\n    \"all\": None,\n}\n\nif TYPE_CHECKING:\n    PhototourismCaptureName = str\nelse:\n    PhototourismCaptureName = tyro.extras.literal_type_from_choices(phototourism_downloads.keys())\n\n\n@dataclass\nclass PhototourismDownload(DatasetDownload):\n    \"\"\"Download the phototourism dataset.\"\"\"\n\n    capture_name: PhototourismCaptureName = \"brandenburg-gate\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download a PhotoTourism dataset: https://www.cs.ubc.ca/~kmyi/imw2020/data.html\"\"\"\n\n        install_checks.check_curl_installed()\n        if self.capture_name == \"all\":\n            for capture_name in phototourism_downloads:\n                if capture_name != \"all\":\n                    PhototourismDownload(capture_name=capture_name).download(save_dir)\n            return\n\n        assert (\n            self.capture_name in phototourism_downloads\n        ), f\"Capture name {self.capture_name} not found in {phototourism_downloads.keys()}\"\n        url = phototourism_downloads[self.capture_name]\n        target_path = str(save_dir / \"phototourism\" / self.capture_name)\n        os.makedirs(target_path, exist_ok=True)\n        download_path = Path(f\"{target_path}.tar.gz\")\n        tmp_path = str(save_dir / \"phototourism\" / f\".temp_{self.capture_name}\")\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        os.makedirs(tmp_path, exist_ok=True)\n\n        subprocess.run([\"curl\", \"-L\", url, \"-o\", download_path], check=True)\n\n        with tarfile.open(download_path, \"r:gz\") as tar_ref:\n            tar_ref.extractall(str(tmp_path))\n\n        inner_folders = os.listdir(tmp_path)\n        assert len(inner_folders) == 1, f\"There is more than one folder inside this zip file: {inner_folders}\"\n        folder = os.path.join(tmp_path, inner_folders[0])\n        shutil.rmtree(target_path)\n        shutil.move(folder, target_path)\n        shutil.rmtree(tmp_path)\n        os.remove(download_path)\n\n\n# credit to https://autonomousvision.github.io/sdfstudio/\n\nsdfstudio_downloads = {\n    \"sdfstudio-demo-data\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/sdfstudio-demo-data.tar\",\n    \"dtu\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/DTU.tar\",\n    \"replica\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/Replica.tar\",\n    \"scannet\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/scannet.tar\",\n    \"tanks-and-temple\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/tnt_advanced.tar\",\n    \"tanks-and-temple-highres\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/highresTNT.tar\",\n    \"heritage\": \"https://s3.eu-central-1.amazonaws.com/avg-projects/monosdf/data/Heritage-Recon.tar\",\n    \"neural-rgbd-data\": \"http://kaldir.vc.in.tum.de/neural_rgbd/neural_rgbd_data.zip\",\n    \"all\": None,\n}\n\nif TYPE_CHECKING:\n    SDFstudioCaptureName = str\nelse:\n    SDFstudioCaptureName = tyro.extras.literal_type_from_choices(sdfstudio_downloads.keys())\n\n\n@dataclass\nclass SDFstudioDemoDownload(DatasetDownload):\n    \"\"\"Download the sdfstudio dataset.\"\"\"\n\n    dataset_name: SDFstudioCaptureName = \"sdfstudio-demo-data\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the sdfstudio dataset (https://autonomousvision.github.io/sdfstudio/).\"\"\"\n        # TODO: give this code the same structure as download_nerfstudio\n\n        if self.dataset_name == \"all\":\n            for dataset_name in sdfstudio_downloads:\n                if dataset_name != \"all\":\n                    SDFstudioDemoDownload(dataset_name=dataset_name).download(save_dir)\n            return\n\n        assert (\n            self.dataset_name in sdfstudio_downloads\n        ), f\"Capture name {self.dataset_name} not found in {sdfstudio_downloads.keys()}\"\n\n        url = sdfstudio_downloads[self.dataset_name]\n\n        target_path = str(save_dir / \"sdfstudio\" / self.dataset_name)\n        os.makedirs(target_path, exist_ok=True)\n\n        file_format = url[-4:]\n\n        download_path = Path(f\"{target_path}{file_format}\")\n        tmp_path = str(save_dir / \"sdfstudio\" / f\".temp_{self.dataset_name}\")\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        os.makedirs(tmp_path, exist_ok=True)\n\n        subprocess.run([\"curl\", \"-L\", url, \"-o\", download_path], check=True)\n        if file_format == \".tar\":\n            with tarfile.open(download_path, \"r\") as tar_ref:\n                tar_ref.extractall(str(tmp_path))\n        elif file_format == \".zip\":\n            with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n                zip_ref.extractall(str(target_path))\n            return\n        else:\n            raise NotImplementedError\n\n        inner_folders = os.listdir(tmp_path)\n        assert len(inner_folders) == 1, f\"There is more than one folder inside this zip file: {inner_folders}\"\n        folder = os.path.join(tmp_path, inner_folders[0])\n        shutil.rmtree(target_path)\n        shutil.move(folder, target_path)\n        shutil.rmtree(tmp_path)\n        os.remove(download_path)\n\n\nnerfosr_downloads = {\n    \"europa\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=europa&downloadStartSecret=0k2r95c1fdej\",\n    \"lk2\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=lk2&downloadStartSecret=w8kuvjzmchc\",\n    \"lwp\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=lwp&downloadStartSecret=gtnc4vmkcjq\",\n    \"rathaus\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=rathaus&downloadStartSecret=7372aewy6rr\",\n    \"schloss\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=schloss&downloadStartSecret=y8t00nqx0h\",\n    \"st\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=st&downloadStartSecret=kl9ptuxe8v\",\n    \"stjacob\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=stjacob&downloadStartSecret=sntsim6ebvm\",\n    \"stjohann\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=stjohann&downloadStartSecret=g80ug1fsbmh\",\n    \"trevi\": \"https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk/download?path=%2FData&files=trevi&downloadStartSecret=ot1483bigjm\",\n    \"all\": None,\n}\n\n\nif TYPE_CHECKING:\n    NeRFOSRCaptureName = str\nelse:\n    NeRFOSRCaptureName = tyro.extras.literal_type_from_choices(nerfosr_downloads.keys())\n\n\n@dataclass\nclass NeRFOSRDownload(DatasetDownload):\n    \"\"\"Download the NeRF-OSR dataset.\"\"\"\n\n    capture_name: NeRFOSRCaptureName = \"europa\"\n\n    def download(self, save_dir: Path):\n        \"\"\"Download the NeRF-OSR dataset: https://nextcloud.mpi-klsb.mpg.de/index.php/s/mGXYKpD8raQ8nMk\"\"\"\n\n        if self.capture_name == \"all\":\n            for capture_name in nerfosr_downloads:\n                if capture_name != \"all\":\n                    NeRFOSRDownload(capture_name=capture_name).download(save_dir)\n            return\n\n        assert (\n            self.capture_name in nerfosr_downloads\n        ), f\"Capture name {self.capture_name} not found in {nerfosr_downloads.keys()}\"\n        url = nerfosr_downloads[self.capture_name]\n        target_path = str(save_dir / \"nerfosr\" / self.capture_name)\n        os.makedirs(target_path, exist_ok=True)\n        download_path = Path(f\"{target_path}.zip\")\n        tmp_path = str(save_dir / \"nerfosr\" / f\".temp_{self.capture_name}\")\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        os.makedirs(tmp_path, exist_ok=True)\n\n        subprocess.run([\"curl\", \"-L\", url, \"-o\", download_path], check=True)\n\n        # Extract the zip file\n        with zipfile.ZipFile(download_path, \"r\") as zip_ref:\n            zip_ref.extractall(tmp_path)\n\n        inner_folders = os.listdir(tmp_path)\n        assert len(inner_folders) == 1, f\"There is more than one folder inside this zip file: {inner_folders}\"\n        folder = os.path.join(tmp_path, inner_folders[0])\n        shutil.rmtree(target_path)\n        shutil.move(folder, target_path)\n        shutil.rmtree(tmp_path)\n        os.remove(download_path)\n\n\nmill19_downloads = {\n    \"building\": \"https://storage.cmusatyalab.org/mega-nerf-data/building-pixsfm.tgz\",\n    \"rubble\": \"https://storage.cmusatyalab.org/mega-nerf-data/rubble-pixsfm.tgz\",\n    \"all\": None,\n}\n\nif TYPE_CHECKING:\n    Mill19CaptureName = str\nelse:\n    Mill19CaptureName = tyro.extras.literal_type_from_choices(mill19_downloads.keys())\n\n\n@dataclass\nclass Mill19Download(DatasetDownload):\n    \"\"\"Download the Mill 19 dataset.\"\"\"\n\n    capture_name: Mill19CaptureName = \"building\"\n\n    def download(self, save_dir: Path) -> None:\n        \"\"\"Download a Mill 19 dataset: https://meganerf.cmusatyalab.org/#data\"\"\"\n\n        install_checks.check_curl_installed()\n        if self.capture_name == \"all\":\n            for capture_name in mill19_downloads:\n                if capture_name != \"all\":\n                    Mill19Download(capture_name=capture_name).download(save_dir)\n            return\n\n        assert (\n            self.capture_name in mill19_downloads\n        ), f\"Capture name {self.capture_name} not found in {mill19_downloads.keys()}\"\n        url = mill19_downloads[self.capture_name]\n        target_path = save_dir / \"mill19\" / self.capture_name\n        target_path.mkdir(parents=True, exist_ok=True)\n        download_path = Path(f\"{target_path}.tgz\")\n        tmp_path = save_dir / \"mill19\" / f\".temp_{self.capture_name}\"\n        shutil.rmtree(tmp_path, ignore_errors=True)\n        tmp_path.mkdir(parents=True, exist_ok=True)\n\n        subprocess.run([\"curl\", \"-L\", url, \"-o\", download_path], check=True)\n\n        with tarfile.open(download_path, \"r:gz\") as tar_ref:\n            tar_ref.extractall(tmp_path)\n\n        inner_folders = list(tmp_path.iterdir())\n        assert len(inner_folders) == 1, f\"There is more than one folder inside this zip file: {inner_folders}\"\n        folder = inner_folders[0]\n        shutil.rmtree(target_path)\n        folder.rename(target_path)\n        shutil.rmtree(tmp_path)\n        download_path.unlink()\n\n        # Convert data layout into what the nerfstudio dataparser expects\n        meta = {\"frames\": []}\n        for subdir, prefix in [(\"train\", \"train_\"), (\"val\", \"eval_\")]:\n            copied_images = process_data_utils.copy_images(\n                target_path / subdir / \"rgbs\",\n                image_dir=target_path / \"images\",\n                image_prefix=prefix,\n                num_downscales=3,\n                verbose=True,\n                keep_image_dir=True,\n            )\n\n            split_filepaths = []\n            for image_path, new_image_path in copied_images.items():\n                metadata_path = image_path.parent.parent / \"metadata\" / f\"{image_path.stem}.pt\"\n                metadata = torch.load(metadata_path, map_location=\"cpu\")\n                c2w = torch.eye(4)\n                c2w[:3] = metadata[\"c2w\"]\n                file_path = str(Path(\"images\") / f\"{new_image_path.name}\")\n                split_filepaths.append(file_path)\n                meta[\"frames\"].append(\n                    {\n                        \"file_path\": file_path,\n                        \"fl_x\": metadata[\"intrinsics\"][0].item(),\n                        \"fl_y\": metadata[\"intrinsics\"][1].item(),\n                        \"cx\": metadata[\"intrinsics\"][2].item(),\n                        \"cy\": metadata[\"intrinsics\"][3].item(),\n                        \"w\": metadata[\"W\"],\n                        \"h\": metadata[\"H\"],\n                        \"transform_matrix\": c2w.tolist(),\n                    }\n                )\n            meta[f\"{subdir}_filenames\"] = split_filepaths\n\n        with (target_path / \"transforms.json\").open(\"w\") as f:\n            json.dump(meta, f, indent=4)\n\n        shutil.rmtree(target_path / \"train\")\n        shutil.rmtree(target_path / \"val\")\n\n\nCommands = Union[\n    Annotated[BlenderDownload, tyro.conf.subcommand(name=\"blender\")],\n    Annotated[Sitcoms3DDownload, tyro.conf.subcommand(name=\"sitcoms3d\")],\n    Annotated[NerfstudioDownload, tyro.conf.subcommand(name=\"nerfstudio\")],\n    Annotated[Record3dDownload, tyro.conf.subcommand(name=\"record3d\")],\n    Annotated[DNerfDownload, tyro.conf.subcommand(name=\"dnerf\")],\n    Annotated[PhototourismDownload, tyro.conf.subcommand(name=\"phototourism\")],\n    Annotated[SDFstudioDemoDownload, tyro.conf.subcommand(name=\"sdfstudio\")],\n    Annotated[NeRFOSRDownload, tyro.conf.subcommand(name=\"nerfosr\")],\n    Annotated[Mill19Download, tyro.conf.subcommand(name=\"mill19\")],\n]\n\n\n@dataclass\nclass NotInstalled(DatasetDownload):\n    def main(self) -> None: ...\n\n\n# Add eyefultower subcommand if awscli is installed.\ntry:\n    import awscli\nexcept ImportError:\n    awscli = None\n\nif awscli is not None:\n    from nerfstudio.scripts.downloads.eyeful_tower import EyefulTowerDownload\n\n    Commands = Union[\n        Commands,\n        Annotated[EyefulTowerDownload, tyro.conf.subcommand(name=\"eyefultower\")],\n    ]\nelse:\n    Commands = Union[\n        Commands,\n        Annotated[\n            NotInstalled,\n            tyro.conf.subcommand(\n                name=\"eyefultower\",\n                description=\"**Not installed.** Downloading EyefulTower data requires `pip install awscli`.\",\n            ),\n        ],\n    ]\n\n\ndef main(\n    dataset: DatasetDownload,\n):\n    \"\"\"Script to download existing datasets.\n    We currently support the datasets listed above in the Commands.\n\n    Args:\n        dataset: The dataset to download (from).\n    \"\"\"\n    dataset.save_dir.mkdir(parents=True, exist_ok=True)\n\n    dataset.download(dataset.save_dir)\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    main(tyro.cli(Commands))\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n# For sphinx docs\nget_parser_fn = lambda: tyro.extras.get_parser(Commands)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/downloads/eyeful_tower.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nimport collections\nimport copy\nimport json\nimport sys\nimport xml.etree.ElementTree as ET\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Tuple\n\nimport numpy as np\nimport tyro\n\ntry:\n    import awscli.clidriver\nexcept ImportError:\n    print(\"awscli is required for EyefulTower download. Please install it with `pip install awscli`.\")\n    sys.exit(1)\n\nfrom nerfstudio.scripts.downloads.utils import DatasetDownload\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\neyefultower_downloads = [\n    \"all\",\n    \"apartment\",\n    \"kitchen\",\n    \"office1a\",\n    \"office1b\",\n    \"office2\",\n    \"office_view1\",\n    \"office_view2\",\n    \"riverview\",\n    \"seating_area\",\n    \"table\",\n    \"workshop\",\n    \"raf_emptyroom\",\n    \"raf_furnishedroom\",\n]\n\n# Crop radii empirically chosen to try to avoid hitting the rig base or go out of bounds\neyefultower_fisheye_radii = {\n    \"office1a\": 0.43,\n    \"office2\": 0.45,\n    \"seating_area\": 0.375,  # could be .45 except for camera 2\n    \"table\": 0.45,\n    \"workshop\": 0.45,\n}\n\n\n@dataclass\nclass EyefulTowerResolutionMetadata:\n    folder_name: str\n    width: int\n    height: int\n    extension: str\n\n\neyefultower_resolutions = {\n    \"all\": None,\n    \"jpeg_1k\": EyefulTowerResolutionMetadata(\"images-jpeg-1k\", 684, 1024, \"jpg\"),\n    \"jpeg_2k\": EyefulTowerResolutionMetadata(\"images-jpeg-2k\", 1368, 2048, \"jpg\"),\n    \"jpeg_4k\": EyefulTowerResolutionMetadata(\"images-jpeg-4k\", 2736, 4096, \"jpg\"),\n    \"jpeg_8k\": EyefulTowerResolutionMetadata(\"images-jpeg\", 5784, 8660, \"jpg\"),\n    \"exr_1k\": EyefulTowerResolutionMetadata(\"images-1k\", 684, 1024, \"exr\"),\n    \"exr_2k\": EyefulTowerResolutionMetadata(\"images-2k\", 1368, 2048, \"exr\"),\n}\n\nif TYPE_CHECKING:\n    EyefulTowerCaptureName = str\n    EyefulTowerResolution = str\nelse:\n    EyefulTowerCaptureName = tyro.extras.literal_type_from_choices(eyefultower_downloads)\n    EyefulTowerResolution = tyro.extras.literal_type_from_choices(eyefultower_resolutions.keys())\n\n\n@dataclass\nclass EyefulTowerDownload(DatasetDownload):\n    \"\"\"Download the EyefulTower dataset.\n\n    Use the --help flag with the `eyefultower` subcommand to see all available datasets.\n    Find more information about the dataset at https://github.com/facebookresearch/EyefulTower.\n    \"\"\"\n\n    capture_name: Tuple[EyefulTowerCaptureName, ...] = ()\n    resolution_name: Tuple[EyefulTowerResolution, ...] = ()\n\n    @staticmethod\n    def scale_metashape_transform(xml_tree: ET.ElementTree, target_width: int, target_height: int) -> ET.ElementTree:\n        \"\"\"Rescales parameters in metashape's cameras.xml format to match target width/height.\n\n        The EyefulTower dataset provides images which have already been rescaled to smaller sizes from the original ~8K\n        resolution. However, the cameras.xml file provided, which contains the camera intrinsics in metashape's format,\n        only contains valid parameters for the original resolution. This function generates a new set of parameters\n        corresponding to a smaller resolution dataset by scaling the original values from cameras.xml. Non-uniform\n        scaling (different in X and Y) can be performed due to slight rounding differences.\n\n        Args:\n            xml_tree: XML tree loaded from Metashape's cameras.xml file\n            target_width: Width of output images\n            target_height: Height of output images\n\n        Returns:\n            Updated XML tree with scaled intrinsics and width/height parameters\n        \"\"\"\n        transformed = copy.deepcopy(xml_tree)\n\n        root = transformed.getroot()\n        assert len(root) == 1\n        chunk = root[0]\n        sensors = chunk.find(\"sensors\")\n        assert sensors is not None\n\n        for sensor in sensors:\n            resolution = sensor.find(\"resolution\")\n            assert resolution is not None, \"Resolution not found in EyefulTower camera.xml\"\n            original_width = int(resolution.get(\"width\"))  # type: ignore\n            original_height = int(resolution.get(\"height\"))  # type: ignore\n\n            if original_width > original_height:\n                target_width, target_height = max(target_width, target_height), min(target_width, target_height)\n            else:\n                target_height, target_width = max(target_width, target_height), min(target_width, target_height)\n\n            resolution.set(\"width\", str(target_width))\n            resolution.set(\"height\", str(target_height))\n\n            calib = sensor.find(\"calibration\")\n            assert calib is not None, \"Calibration not found in EyefulTower sensor\"\n\n            calib_resolution = calib.find(\"resolution\")\n            assert calib_resolution is not None\n            calib_resolution.set(\"width\", str(target_width))\n            calib_resolution.set(\"height\", str(target_height))\n\n            # Compute each scale individually and average for better rounding\n            x_scale = target_width / original_width\n            y_scale = target_height / original_height\n            scale = (x_scale + y_scale) / 2.0\n\n            f = calib.find(\"f\")\n            assert f is not None and f.text is not None, \"f not found in calib\"\n            f.text = str(float(f.text) * scale)\n\n            cx = calib.find(\"cx\")\n            assert cx is not None and cx.text is not None, \"cx not found in calib\"\n            cx.text = str(float(cx.text) * x_scale)\n\n            cy = calib.find(\"cy\")\n            assert cy is not None and cy.text is not None, \"cy not found in calib\"\n            cy.text = str(float(cy.text) * y_scale)\n\n            # TODO: Maybe update pixel_width / pixel_height / focal_length / layer_index?\n\n        return transformed\n\n    @staticmethod\n    def convert_cameras_to_nerfstudio_transforms(\n        capture_name: str, cameras: dict, splits: dict, target_width: int, target_height: int, extension: str\n    ) -> dict:\n        \"\"\"Converts EyefulTower cameras.json format to Nerfstudio's transforms.json format\n\n        The EyefulTower dataset provides a cameras.json file containing geometric calibration information for the\n        original resolution ~8K images, similar to the cameras.xml file from Metashape. The main advantage is that data\n        is provided for each individual image, rather than being structured hierarchically with rig constraints (as in\n        the Metashape cameras.xml).\n\n        This function takes the cameras.json file and converts it to the transforms.json Nerfstudio expects, with the\n        necessary scaling of intrinsics parameters applied. This function also handles the EyefulTower splits.json file,\n        describing the breakdown of training and validation images, and adds the appropriate fields to transforms.json.\n        This function works for both fisheye (V1) and pinhole (V2) cameras. Scene-specific fisheye mask radii are added\n        to the returned dictionary if needed.\n\n        Args:\n            capture_name: Which specific EyefulTower capture is being converted\n            cameras: Data loaded from EyefulTower cameras.json\n            splits: Data loaded from EyefulTower splits.json\n            target_width: Width of output images\n            target_height: Height of output images\n            extension: Extension of output images\n\n        Returns:\n            Dict in the Nerfstudio transforms.json format, with scaled camera parameters, splits, and optional metadata.\n        \"\"\"\n        output = {}\n\n        distortion_models = [c[\"distortionModel\"] for c in cameras[\"KRT\"]]\n        distortion_model = list(set(distortion_models))\n        assert len(distortion_model) == 1\n        distortion_model = distortion_model[0]\n        if distortion_model == \"RadialAndTangential\":\n            output[\"camera_model\"] = \"OPENCV\"\n        elif distortion_model == \"Fisheye\":\n            output[\"camera_model\"] = \"OPENCV_FISHEYE\"\n            output[\"fisheye_crop_radius\"] = eyefultower_fisheye_radii[capture_name]\n        else:\n            raise NotImplementedError(f\"Camera model {distortion_model} not implemented\")\n\n        split_sets = {k: set(v) for k, v in splits.items()}\n\n        frames = []\n        split_filenames = collections.defaultdict(list)\n        for camera in cameras[\"KRT\"]:\n            frame = {}\n            # TODO EXR\n            frame[\"file_path\"] = camera[\"cameraId\"] + f\".{extension}\"\n            for split in split_sets:\n                if camera[\"cameraId\"] in split_sets[split]:\n                    split_filenames[split].append(frame[\"file_path\"])\n\n            original_width = camera[\"width\"]\n            original_height = camera[\"height\"]\n            if original_width > original_height:\n                target_width, target_height = max(target_width, target_height), min(target_width, target_height)\n            else:\n                target_height, target_width = max(target_width, target_height), min(target_width, target_height)\n            x_scale = target_width / original_width\n            y_scale = target_height / original_height\n\n            frame[\"w\"] = target_width\n            frame[\"h\"] = target_height\n            K = np.array(camera[\"K\"]).T  # Data stored as column-major\n            frame[\"fl_x\"] = K[0][0] * x_scale\n            frame[\"fl_y\"] = K[1][1] * y_scale\n            frame[\"cx\"] = K[0][2] * x_scale\n            frame[\"cy\"] = K[1][2] * y_scale\n\n            if distortion_model == \"RadialAndTangential\":\n                # pinhole: [k1, k2, p1, p2, k3]\n                frame[\"k1\"] = camera[\"distortion\"][0]\n                frame[\"k2\"] = camera[\"distortion\"][1]\n                frame[\"k3\"] = camera[\"distortion\"][4]\n                frame[\"k4\"] = 0.0\n                frame[\"p1\"] = camera[\"distortion\"][2]\n                frame[\"p2\"] = camera[\"distortion\"][3]\n            elif distortion_model == \"Fisheye\":\n                # fisheye: [k1, k2, k3, _, _, _, p1, p2]\n                frame[\"k1\"] = camera[\"distortion\"][0]\n                frame[\"k2\"] = camera[\"distortion\"][1]\n                frame[\"k3\"] = camera[\"distortion\"][2]\n                frame[\"p1\"] = camera[\"distortion\"][6]\n                frame[\"p2\"] = camera[\"distortion\"][7]\n            else:\n                raise NotImplementedError(\"This shouldn't happen\")\n\n            T = np.array(camera[\"T\"]).T  # Data stored as column-major\n            T = np.linalg.inv(T)\n            T = T[[2, 0, 1, 3], :]\n            T[:, 1:3] *= -1\n            frame[\"transform_matrix\"] = T.tolist()\n\n            frames.append(frame)\n\n        frames = sorted(frames, key=lambda f: f[\"file_path\"])\n\n        output[\"frames\"] = frames\n        output[\"train_filenames\"] = split_filenames[\"train\"]\n        output[\"val_filenames\"] = split_filenames[\"test\"]\n        output[\"test_filenames\"] = []\n        return output\n\n    @staticmethod\n    def subsample_nerfstudio_transforms(transforms: dict, n: int):\n        \"\"\"Uniformly samples n frames from a Nerfstudio transforms.json dict.\n\n        Args:\n            transforms: Dictionary in Nerfstudio transforms.json format\n            n: Number of frames to uniformly subsample\n\n        Returns:\n            New transforms.json dict with n frames. All other parameters are copied.\n        \"\"\"\n        target = min(len(transforms[\"frames\"]), n)\n        indices = np.round(np.linspace(0, len(transforms[\"frames\"]) - 1, target)).astype(int)\n\n        frames = []\n        for i in indices:\n            frames.append(transforms[\"frames\"][i])\n\n        output = copy.deepcopy(transforms)\n        output[\"frames\"] = frames\n\n        # Remove the unused files from the splits\n        filenames = {f[\"file_path\"] for f in frames}\n        for key in [\"train_filenames\", \"val_filenames\"]:\n            output[key] = sorted(list(set(transforms[key]) & filenames))\n\n        return output\n\n    def download(self, save_dir: Path) -> None:\n        \"\"\"Entrypoint to download the EyefulTower dataset.\n\n        * Fetches the specified dataset(s) at the specified resolution(s) from the EyefulTower AWS S3 bucket. Redundant\n          data is not downloaded, so this function can safely (and performantly) be called multiple times with\n          increasing scope of datasets and resolutions.\n        * Generates updated Metashape cameras.xml for lower resolution downloads.\n        * Generates Nerfstudio transform.json for each resolution. Additionally generates transforms_300.json and\n          transforms_half.json containing subsets (300 frames, half the frames) of the full set to help with iteration.\n\n        Args:\n            save_dir: Directory to save dataset. Output will be in save_dir/eyefultower/<dataset>\n        \"\"\"\n        if len(self.capture_name) == 0:\n            self.capture_name = (\"riverview\",)\n            CONSOLE.print(\n                f\"No capture specified, using {self.capture_name} by default.\",\n                \"Add `--help` to this command to see all available captures.\",\n            )\n\n        if len(self.resolution_name) == 0:\n            self.resolution_name = (\"jpeg_2k\",)\n            CONSOLE.print(\n                f\"No resolution specified, using {self.resolution_name} by default.\",\n                \"Add `--help` to this command to see all available resolutions.\",\n            )\n\n        captures = set()\n        for capture in self.capture_name:\n            if capture == \"all\":\n                captures.update([c for c in eyefultower_downloads if c != \"all\"])\n            else:\n                captures.add(capture)\n        captures = sorted(captures)\n        if len(captures) == 0:\n            CONSOLE.print(\"[bold yellow]WARNING: No EyefulTower captures specified. Nothing will be downloaded.\")\n\n        resolutions = set()\n        for resolution in self.resolution_name:\n            if resolution == \"all\":\n                resolutions.update([r for r in eyefultower_resolutions.keys() if r != \"all\"])\n            else:\n                resolutions.add(resolution)\n        resolutions = sorted(resolutions)\n        if len(resolutions) == 0:\n            CONSOLE.print(\"[bold yellow]WARNING: No EyefulTower resolutions specified. Nothing will be downloaded.\")\n\n        driver = awscli.clidriver.create_clidriver()\n\n        for i, capture in enumerate(captures):\n            base_url = f\"s3://fb-baas-f32eacb9-8abb-11eb-b2b8-4857dd089e15/EyefulTower/{capture}/\"\n            output_path = save_dir / \"eyefultower\" / capture\n            includes = []\n            for resolution in resolutions:\n                includes.extend([\"--include\", f\"{eyefultower_resolutions[resolution].folder_name}/*\"])\n            command = (\n                [\"s3\", \"sync\", \"--no-sign-request\", \"--only-show-errors\", \"--exclude\", \"images*/*\"]\n                + includes\n                + [base_url, str(output_path)]\n            )\n            CONSOLE.print(f\"[EyefulTower Capture {i+1: >2d}/{len(captures)}]: '{capture}'\")\n            print(\n                f\"\\tDownloading resolutions {resolutions}\",\n                f\"to '{output_path.resolve()}' with command `aws {' '.join(command)}` ...\",\n                end=\" \",\n                flush=True,\n            )\n            driver.main(command)\n            print(\"done!\")\n\n            # After downloading, we'll insert an appropriate cameras.xml file into each directory. It's quick enough\n            # that we can just redo it every time this is called, regardless of whether new data is downloaded.\n            xml_input_path = output_path / \"cameras.xml\"\n            if not xml_input_path.exists:\n                CONSOLE.print(\n                    \"\\t[bold yellow]WARNING: cameras.xml not found. Scaled cameras.xml will not be generated.\"\n                )\n            else:\n                tree = ET.parse(output_path / \"cameras.xml\")\n\n                for resolution in resolutions:\n                    metadata = eyefultower_resolutions[resolution]\n                    xml_output_path = output_path / metadata.folder_name / \"cameras.xml\"\n                    print(\n                        f\"\\tGenerating cameras.xml for '{resolution}' to '{xml_output_path.resolve()}' ... \",\n                        end=\" \",\n                        flush=True,\n                    )\n                    scaled_tree = self.scale_metashape_transform(tree, metadata.width, metadata.height)\n                    scaled_tree.write(xml_output_path)\n                    print(\"done!\")\n\n            json_input_path = output_path / \"cameras.json\"\n            splits_input_path = output_path / \"splits.json\"\n            if not json_input_path.exists:\n                CONSOLE.print(\"\\t[bold yellow]WARNING: cameras.json not found. transforms.json will not be generated.\")\n            elif not splits_input_path.exists:\n                CONSOLE.print(\"\\t[bold yellow]WARNING: splits.json not found. transforms.json will not be generated.\")\n            else:\n                with open(json_input_path, \"r\") as f:\n                    cameras = json.load(f)\n\n                with open(splits_input_path, \"r\") as f:\n                    splits = json.load(f)\n\n                for resolution in resolutions:\n                    metadata = eyefultower_resolutions[resolution]\n                    json_output_path = output_path / metadata.folder_name / \"transforms.json\"\n                    print(\n                        f\"\\tGenerating transforms.json for '{resolution}' to '{json_output_path.resolve()}' ... \",\n                        end=\" \",\n                        flush=True,\n                    )\n                    transforms = self.convert_cameras_to_nerfstudio_transforms(\n                        capture, cameras, splits, metadata.width, metadata.height, metadata.extension\n                    )\n\n                    with open(json_output_path, \"w\", encoding=\"utf8\") as f:\n                        json.dump(transforms, f, indent=4)\n\n                    for count, name in [\n                        (300, \"transforms_300.json\"),\n                        (int(len(cameras[\"KRT\"]) // 2), \"transforms_half.json\"),\n                    ]:\n                        subsampled = self.subsample_nerfstudio_transforms(transforms, count)\n                        with open(json_output_path.with_name(name), \"w\", encoding=\"utf8\") as f:\n                            json.dump(subsampled, f, indent=4)\n\n                    print(\"done!\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/downloads/utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom dataclasses import dataclass\nfrom pathlib import Path\n\nfrom nerfstudio.configs.base_config import PrintableConfig\n\n\n@dataclass\nclass DatasetDownload(PrintableConfig):\n    \"\"\"Download a dataset\"\"\"\n\n    capture_name = None\n\n    save_dir: Path = Path(\"data/\")\n    \"\"\"The directory to save the dataset to\"\"\"\n\n    def download(self, save_dir: Path) -> None:\n        \"\"\"Download the dataset\"\"\"\n        raise NotImplementedError\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/eval.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"\neval.py\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional\n\nimport tyro\n\nfrom nerfstudio.utils.eval_utils import eval_setup\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ComputePSNR:\n    \"\"\"Load a checkpoint, compute some PSNR metrics, and save it to a JSON file.\"\"\"\n\n    # Path to config YAML file.\n    load_config: Path\n    # Name of the output file.\n    output_path: Path = Path(\"output.json\")\n    # Optional path to save rendered outputs to.\n    render_output_path: Optional[Path] = None\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        config, pipeline, checkpoint_path, _ = eval_setup(self.load_config)\n        assert self.output_path.suffix == \".json\"\n        if self.render_output_path is not None:\n            self.render_output_path.mkdir(parents=True, exist_ok=True)\n        metrics_dict = pipeline.get_average_eval_image_metrics(output_path=self.render_output_path, get_std=True)\n        self.output_path.parent.mkdir(parents=True, exist_ok=True)\n        # Get the output and define the names to save to\n        benchmark_info = {\n            \"experiment_name\": config.experiment_name,\n            \"method_name\": config.method_name,\n            \"checkpoint\": str(checkpoint_path),\n            \"results\": metrics_dict,\n        }\n        # Save output to output file\n        self.output_path.write_text(json.dumps(benchmark_info, indent=2), \"utf8\")\n        CONSOLE.print(f\"Saved results to: {self.output_path}\")\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(ComputePSNR).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n# For sphinx docs\nget_parser_fn = lambda: tyro.extras.get_parser(ComputePSNR)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/exporter.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nScript for exporting NeRF into other formats.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport os\nimport sys\nimport typing\nfrom collections import OrderedDict\nfrom dataclasses import dataclass, field\nfrom importlib.metadata import version\nfrom pathlib import Path\nfrom typing import List, Optional, Tuple, Union, cast\n\nimport numpy as np\nimport open3d as o3d\nimport torch\nimport tyro\nfrom typing_extensions import Annotated, Literal\n\nfrom nerfstudio.cameras.rays import RayBundle\nfrom nerfstudio.data.datamanagers.base_datamanager import VanillaDataManager\nfrom nerfstudio.data.datamanagers.full_images_datamanager import FullImageDatamanager\nfrom nerfstudio.data.datamanagers.parallel_datamanager import ParallelDataManager\nfrom nerfstudio.data.datamanagers.random_cameras_datamanager import RandomCamerasDataManager\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.exporter import texture_utils, tsdf_utils\nfrom nerfstudio.exporter.exporter_utils import collect_camera_poses, generate_point_cloud, get_mesh_from_filename\nfrom nerfstudio.exporter.marching_cubes import generate_mesh_with_multires_marching_cubes\nfrom nerfstudio.fields.sdf_field import SDFField  # noqa\nfrom nerfstudio.models.splatfacto import SplatfactoModel\nfrom nerfstudio.pipelines.base_pipeline import Pipeline, VanillaPipeline\nfrom nerfstudio.utils.eval_utils import eval_setup\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass Exporter:\n    \"\"\"Export the mesh from a YML config to a folder.\"\"\"\n\n    load_config: Path\n    \"\"\"Path to the config YAML file.\"\"\"\n    output_dir: Path\n    \"\"\"Path to the output directory.\"\"\"\n\n\ndef validate_pipeline(normal_method: str, normal_output_name: str, pipeline: Pipeline) -> None:\n    \"\"\"Check that the pipeline is valid for this exporter.\n\n    Args:\n        normal_method: Method to estimate normals with. Either \"open3d\" or \"model_output\".\n        normal_output_name: Name of the normal output.\n        pipeline: Pipeline to evaluate with.\n    \"\"\"\n    if normal_method == \"model_output\":\n        CONSOLE.print(\"Checking that the pipeline has a normal output.\")\n        origins = torch.zeros((1, 3), device=pipeline.device)\n        directions = torch.ones_like(origins)\n        pixel_area = torch.ones_like(origins[..., :1])\n        camera_indices = torch.zeros_like(origins[..., :1])\n        metadata = {\"directions_norm\": torch.linalg.vector_norm(directions, dim=-1, keepdim=True)}\n        ray_bundle = RayBundle(\n            origins=origins,\n            directions=directions,\n            pixel_area=pixel_area,\n            camera_indices=camera_indices,\n            metadata=metadata,\n        )\n        outputs = pipeline.model(ray_bundle)\n        if normal_output_name not in outputs:\n            CONSOLE.print(f\"[bold yellow]Warning: Normal output '{normal_output_name}' not found in pipeline outputs.\")\n            CONSOLE.print(f\"Available outputs: {list(outputs.keys())}\")\n            CONSOLE.print(\n                \"[bold yellow]Warning: Please train a model with normals \"\n                \"(e.g., nerfacto with predicted normals turned on).\"\n            )\n            CONSOLE.print(\"[bold yellow]Warning: Or change --normal-method\")\n            CONSOLE.print(\"[bold yellow]Exiting early.\")\n            sys.exit(1)\n\n\n@dataclass\nclass ExportPointCloud(Exporter):\n    \"\"\"Export NeRF as a point cloud.\"\"\"\n\n    num_points: int = 1000000\n    \"\"\"Number of points to generate. May result in less if outlier removal is used.\"\"\"\n    remove_outliers: bool = True\n    \"\"\"Remove outliers from the point cloud.\"\"\"\n    reorient_normals: bool = True\n    \"\"\"Reorient point cloud normals based on view direction.\"\"\"\n    normal_method: Literal[\"open3d\", \"model_output\"] = \"model_output\"\n    \"\"\"Method to estimate normals with.\"\"\"\n    normal_output_name: str = \"normals\"\n    \"\"\"Name of the normal output.\"\"\"\n    depth_output_name: str = \"depth\"\n    \"\"\"Name of the depth output.\"\"\"\n    rgb_output_name: str = \"rgb\"\n    \"\"\"Name of the RGB output.\"\"\"\n\n    obb_center: Optional[Tuple[float, float, float]] = None\n    \"\"\"Center of the oriented bounding box.\"\"\"\n    obb_rotation: Optional[Tuple[float, float, float]] = None\n    \"\"\"Rotation of the oriented bounding box. Expressed as RPY Euler angles in radians\"\"\"\n    obb_scale: Optional[Tuple[float, float, float]] = None\n    \"\"\"Scale of the oriented bounding box along each axis.\"\"\"\n    num_rays_per_batch: int = 32768\n    \"\"\"Number of rays to evaluate per batch. Decrease if you run out of memory.\"\"\"\n    std_ratio: float = 10.0\n    \"\"\"Threshold based on STD of the average distances across the point cloud to remove outliers.\"\"\"\n    save_world_frame: bool = False\n    \"\"\"If set, saves the point cloud in the same frame as the original dataset. Otherwise, uses the\n    scaled and reoriented coordinate space expected by the NeRF models.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Export point cloud.\"\"\"\n\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config)\n\n        validate_pipeline(self.normal_method, self.normal_output_name, pipeline)\n\n        # Increase the batchsize to speed up the evaluation.\n        assert isinstance(\n            pipeline.datamanager,\n            (VanillaDataManager, ParallelDataManager, FullImageDatamanager, RandomCamerasDataManager),\n        )\n        assert pipeline.datamanager.train_pixel_sampler is not None\n        pipeline.datamanager.train_pixel_sampler.num_rays_per_batch = self.num_rays_per_batch\n\n        # Whether the normals should be estimated based on the point cloud.\n        estimate_normals = self.normal_method == \"open3d\"\n        crop_obb = None\n        if self.obb_center is not None and self.obb_rotation is not None and self.obb_scale is not None:\n            crop_obb = OrientedBox.from_params(self.obb_center, self.obb_rotation, self.obb_scale)\n        pcd = generate_point_cloud(\n            pipeline=pipeline,\n            num_points=self.num_points,\n            remove_outliers=self.remove_outliers,\n            reorient_normals=self.reorient_normals,\n            estimate_normals=estimate_normals,\n            rgb_output_name=self.rgb_output_name,\n            depth_output_name=self.depth_output_name,\n            normal_output_name=self.normal_output_name if self.normal_method == \"model_output\" else None,\n            crop_obb=crop_obb,\n            std_ratio=self.std_ratio,\n        )\n        if self.save_world_frame:\n            # apply the inverse dataparser transform to the point cloud\n            points = np.asarray(pcd.points)\n            poses = np.eye(4, dtype=np.float32)[None, ...].repeat(points.shape[0], axis=0)[:, :3, :]\n            poses[:, :3, 3] = points\n            poses = pipeline.datamanager.train_dataparser_outputs.transform_poses_to_original_space(\n                torch.from_numpy(poses)\n            )\n            points = poses[:, :3, 3].numpy()\n            pcd.points = o3d.utility.Vector3dVector(points)\n\n        torch.cuda.empty_cache()\n\n        CONSOLE.print(f\"[bold green]:white_check_mark: Generated {pcd}\")\n        CONSOLE.print(\"Saving Point Cloud...\")\n        tpcd = o3d.t.geometry.PointCloud.from_legacy(pcd)\n        # The legacy PLY writer converts colors to UInt8,\n        # let us do the same to save space.\n        tpcd.point.colors = (tpcd.point.colors * 255).to(o3d.core.Dtype.UInt8)  # type: ignore\n        o3d.t.io.write_point_cloud(str(self.output_dir / \"point_cloud.ply\"), tpcd)\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Saving Point Cloud\")\n\n\n@dataclass\nclass ExportTSDFMesh(Exporter):\n    \"\"\"\n    Export a mesh using TSDF processing.\n    \"\"\"\n\n    downscale_factor: int = 2\n    \"\"\"Downscale the images starting from the resolution used for training.\"\"\"\n    depth_output_name: str = \"depth\"\n    \"\"\"Name of the depth output.\"\"\"\n    rgb_output_name: str = \"rgb\"\n    \"\"\"Name of the RGB output.\"\"\"\n    resolution: Union[int, List[int]] = field(default_factory=lambda: [128, 128, 128])\n    \"\"\"Resolution of the TSDF volume or [x, y, z] resolutions individually.\"\"\"\n    batch_size: int = 10\n    \"\"\"How many depth images to integrate per batch.\"\"\"\n    use_bounding_box: bool = True\n    \"\"\"Whether to use a bounding box for the TSDF volume.\"\"\"\n    bounding_box_min: Tuple[float, float, float] = (-1, -1, -1)\n    \"\"\"Minimum of the bounding box, used if use_bounding_box is True.\"\"\"\n    bounding_box_max: Tuple[float, float, float] = (1, 1, 1)\n    \"\"\"Minimum of the bounding box, used if use_bounding_box is True.\"\"\"\n    texture_method: Literal[\"tsdf\", \"nerf\"] = \"nerf\"\n    \"\"\"Method to texture the mesh with. Either 'tsdf' or 'nerf'.\"\"\"\n    px_per_uv_triangle: int = 4\n    \"\"\"Number of pixels per UV triangle.\"\"\"\n    unwrap_method: Literal[\"xatlas\", \"custom\"] = \"xatlas\"\n    \"\"\"The method to use for unwrapping the mesh.\"\"\"\n    num_pixels_per_side: int = 2048\n    \"\"\"If using xatlas for unwrapping, the pixels per side of the texture image.\"\"\"\n    target_num_faces: Optional[int] = 50000\n    \"\"\"Target number of faces for the mesh to texture.\"\"\"\n    refine_mesh_using_initial_aabb_estimate: bool = False\n    \"\"\"Refine the mesh using the initial AABB estimate.\"\"\"\n    refinement_epsilon: float = 1e-2\n    \"\"\"Refinement epsilon for the mesh. This is the distance in meters that the refined AABB/OBB will be expanded by\n    in each direction.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Export mesh\"\"\"\n\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config)\n\n        tsdf_utils.export_tsdf_mesh(\n            pipeline,\n            self.output_dir,\n            self.downscale_factor,\n            self.depth_output_name,\n            self.rgb_output_name,\n            self.resolution,\n            self.batch_size,\n            use_bounding_box=self.use_bounding_box,\n            bounding_box_min=self.bounding_box_min,\n            bounding_box_max=self.bounding_box_max,\n            refine_mesh_using_initial_aabb_estimate=self.refine_mesh_using_initial_aabb_estimate,\n            refinement_epsilon=self.refinement_epsilon,\n        )\n\n        # possibly\n        # texture the mesh with NeRF and export to a mesh.obj file\n        # and a material and texture file\n        if self.texture_method == \"nerf\":\n            # load the mesh from the tsdf export\n            mesh = get_mesh_from_filename(\n                str(self.output_dir / \"tsdf_mesh.ply\"), target_num_faces=self.target_num_faces\n            )\n            CONSOLE.print(\"Texturing mesh with NeRF\")\n            texture_utils.export_textured_mesh(\n                mesh,\n                pipeline,\n                self.output_dir,\n                px_per_uv_triangle=self.px_per_uv_triangle if self.unwrap_method == \"custom\" else None,\n                unwrap_method=self.unwrap_method,\n                num_pixels_per_side=self.num_pixels_per_side,\n            )\n\n\n@dataclass\nclass ExportPoissonMesh(Exporter):\n    \"\"\"\n    Export a mesh using poisson surface reconstruction.\n    \"\"\"\n\n    num_points: int = 1000000\n    \"\"\"Number of points to generate. May result in less if outlier removal is used.\"\"\"\n    remove_outliers: bool = True\n    \"\"\"Remove outliers from the point cloud.\"\"\"\n    reorient_normals: bool = True\n    \"\"\"Reorient point cloud normals based on view direction.\"\"\"\n    depth_output_name: str = \"depth\"\n    \"\"\"Name of the depth output.\"\"\"\n    rgb_output_name: str = \"rgb\"\n    \"\"\"Name of the RGB output.\"\"\"\n    normal_method: Literal[\"open3d\", \"model_output\"] = \"model_output\"\n    \"\"\"Method to estimate normals with.\"\"\"\n    normal_output_name: str = \"normals\"\n    \"\"\"Name of the normal output.\"\"\"\n    save_point_cloud: bool = False\n    \"\"\"Whether to save the point cloud.\"\"\"\n    use_bounding_box: bool = True\n    \"\"\"Only query points within the bounding box\"\"\"\n    bounding_box_min: Tuple[float, float, float] = (-1, -1, -1)\n    \"\"\"Minimum of the bounding box, used if use_bounding_box is True.\"\"\"\n    bounding_box_max: Tuple[float, float, float] = (1, 1, 1)\n    \"\"\"Minimum of the bounding box, used if use_bounding_box is True.\"\"\"\n    obb_center: Optional[Tuple[float, float, float]] = None\n    \"\"\"Center of the oriented bounding box.\"\"\"\n    obb_rotation: Optional[Tuple[float, float, float]] = None\n    \"\"\"Rotation of the oriented bounding box. Expressed as RPY Euler angles in radians\"\"\"\n    obb_scale: Optional[Tuple[float, float, float]] = None\n    \"\"\"Scale of the oriented bounding box along each axis.\"\"\"\n    num_rays_per_batch: int = 32768\n    \"\"\"Number of rays to evaluate per batch. Decrease if you run out of memory.\"\"\"\n    texture_method: Literal[\"point_cloud\", \"nerf\"] = \"nerf\"\n    \"\"\"Method to texture the mesh with. Either 'point_cloud' or 'nerf'.\"\"\"\n    px_per_uv_triangle: int = 4\n    \"\"\"Number of pixels per UV triangle.\"\"\"\n    unwrap_method: Literal[\"xatlas\", \"custom\"] = \"xatlas\"\n    \"\"\"The method to use for unwrapping the mesh.\"\"\"\n    num_pixels_per_side: int = 2048\n    \"\"\"If using xatlas for unwrapping, the pixels per side of the texture image.\"\"\"\n    target_num_faces: Optional[int] = 50000\n    \"\"\"Target number of faces for the mesh to texture.\"\"\"\n    std_ratio: float = 10.0\n    \"\"\"Threshold based on STD of the average distances across the point cloud to remove outliers.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Export mesh\"\"\"\n\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config)\n\n        validate_pipeline(self.normal_method, self.normal_output_name, pipeline)\n\n        # Increase the batchsize to speed up the evaluation.\n        assert isinstance(\n            pipeline.datamanager,\n            (VanillaDataManager, ParallelDataManager, FullImageDatamanager, RandomCamerasDataManager),\n        )\n        assert pipeline.datamanager.train_pixel_sampler is not None\n        pipeline.datamanager.train_pixel_sampler.num_rays_per_batch = self.num_rays_per_batch\n\n        # Whether the normals should be estimated based on the point cloud.\n        estimate_normals = self.normal_method == \"open3d\"\n        if self.obb_center is not None and self.obb_rotation is not None and self.obb_scale is not None:\n            crop_obb = OrientedBox.from_params(self.obb_center, self.obb_rotation, self.obb_scale)\n        else:\n            crop_obb = None\n\n        pcd = generate_point_cloud(\n            pipeline=pipeline,\n            num_points=self.num_points,\n            remove_outliers=self.remove_outliers,\n            reorient_normals=self.reorient_normals,\n            estimate_normals=estimate_normals,\n            rgb_output_name=self.rgb_output_name,\n            depth_output_name=self.depth_output_name,\n            normal_output_name=self.normal_output_name if self.normal_method == \"model_output\" else None,\n            crop_obb=crop_obb,\n            std_ratio=self.std_ratio,\n        )\n        torch.cuda.empty_cache()\n        CONSOLE.print(f\"[bold green]:white_check_mark: Generated {pcd}\")\n\n        if self.save_point_cloud:\n            CONSOLE.print(\"Saving Point Cloud...\")\n            o3d.io.write_point_cloud(str(self.output_dir / \"point_cloud.ply\"), pcd)\n            print(\"\\033[A\\033[A\")\n            CONSOLE.print(\"[bold green]:white_check_mark: Saving Point Cloud\")\n\n        CONSOLE.print(\"Computing Mesh... this may take a while.\")\n        mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=9)\n        vertices_to_remove = densities < np.quantile(densities, 0.1)\n        mesh.remove_vertices_by_mask(vertices_to_remove)\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Computing Mesh\")\n\n        CONSOLE.print(\"Saving Mesh...\")\n        o3d.io.write_triangle_mesh(str(self.output_dir / \"poisson_mesh.ply\"), mesh)\n        print(\"\\033[A\\033[A\")\n        CONSOLE.print(\"[bold green]:white_check_mark: Saving Mesh\")\n\n        # This will texture the mesh with NeRF and export to a mesh.obj file\n        # and a material and texture file\n        if self.texture_method == \"nerf\":\n            # load the mesh from the poisson reconstruction\n            mesh = get_mesh_from_filename(\n                str(self.output_dir / \"poisson_mesh.ply\"), target_num_faces=self.target_num_faces\n            )\n            CONSOLE.print(\"Texturing mesh with NeRF\")\n            texture_utils.export_textured_mesh(\n                mesh,\n                pipeline,\n                self.output_dir,\n                px_per_uv_triangle=self.px_per_uv_triangle if self.unwrap_method == \"custom\" else None,\n                unwrap_method=self.unwrap_method,\n                num_pixels_per_side=self.num_pixels_per_side,\n            )\n\n\n@dataclass\nclass ExportMarchingCubesMesh(Exporter):\n    \"\"\"Export a mesh using marching cubes.\"\"\"\n\n    isosurface_threshold: float = 0.0\n    \"\"\"The isosurface threshold for extraction. For SDF based methods the surface is the zero level set.\"\"\"\n    resolution: int = 1024\n    \"\"\"Marching cube resolution.\"\"\"\n    simplify_mesh: bool = False\n    \"\"\"Whether to simplify the mesh.\"\"\"\n    bounding_box_min: Tuple[float, float, float] = (-1.0, -1.0, -1.0)\n    \"\"\"Minimum of the bounding box.\"\"\"\n    bounding_box_max: Tuple[float, float, float] = (1.0, 1.0, 1.0)\n    \"\"\"Maximum of the bounding box.\"\"\"\n    px_per_uv_triangle: int = 4\n    \"\"\"Number of pixels per UV triangle.\"\"\"\n    unwrap_method: Literal[\"xatlas\", \"custom\"] = \"xatlas\"\n    \"\"\"The method to use for unwrapping the mesh.\"\"\"\n    num_pixels_per_side: int = 2048\n    \"\"\"If using xatlas for unwrapping, the pixels per side of the texture image.\"\"\"\n    target_num_faces: Optional[int] = 50000\n    \"\"\"Target number of faces for the mesh to texture.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config)\n\n        # TODO: Make this work with Density Field\n        assert hasattr(pipeline.model.config, \"sdf_field\"), \"Model must have an SDF field.\"\n\n        CONSOLE.print(\"Extracting mesh with marching cubes... which may take a while\")\n\n        assert self.resolution % 512 == 0, f\"\"\"resolution must be divisible by 512, got {self.resolution}.\n        This is important because the algorithm uses a multi-resolution approach\n        to evaluate the SDF where the minimum resolution is 512.\"\"\"\n\n        # Extract mesh using marching cubes for sdf at a multi-scale resolution.\n        multi_res_mesh = generate_mesh_with_multires_marching_cubes(\n            geometry_callable_field=lambda x: cast(SDFField, pipeline.model.field)\n            .forward_geonetwork(x)[:, 0]\n            .contiguous(),\n            resolution=self.resolution,\n            bounding_box_min=self.bounding_box_min,\n            bounding_box_max=self.bounding_box_max,\n            isosurface_threshold=self.isosurface_threshold,\n            coarse_mask=None,\n        )\n        filename = self.output_dir / \"sdf_marching_cubes_mesh.ply\"\n        multi_res_mesh.export(filename)\n\n        # load the mesh from the marching cubes export\n        mesh = get_mesh_from_filename(str(filename), target_num_faces=self.target_num_faces)\n        CONSOLE.print(\"Texturing mesh with NeRF...\")\n        texture_utils.export_textured_mesh(\n            mesh,\n            pipeline,\n            self.output_dir,\n            px_per_uv_triangle=self.px_per_uv_triangle if self.unwrap_method == \"custom\" else None,\n            unwrap_method=self.unwrap_method,\n            num_pixels_per_side=self.num_pixels_per_side,\n        )\n\n\n@dataclass\nclass ExportCameraPoses(Exporter):\n    \"\"\"\n    Export camera poses to a .json file.\n    \"\"\"\n\n    def main(self) -> None:\n        \"\"\"Export camera poses\"\"\"\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config)\n        assert isinstance(pipeline, VanillaPipeline)\n        train_frames, eval_frames = collect_camera_poses(pipeline)\n\n        for file_name, frames in [(\"transforms_train.json\", train_frames), (\"transforms_eval.json\", eval_frames)]:\n            if len(frames) == 0:\n                CONSOLE.print(f\"[bold yellow]No frames found for {file_name}. Skipping.\")\n                continue\n\n            output_file_path = os.path.join(self.output_dir, file_name)\n\n            with open(output_file_path, \"w\", encoding=\"UTF-8\") as f:\n                json.dump(frames, f, indent=4)\n\n            CONSOLE.print(f\"[bold green]:white_check_mark: Saved poses to {output_file_path}\")\n\n\n@dataclass\nclass ExportGaussianSplat(Exporter):\n    \"\"\"\n    Export 3D Gaussian Splatting model to a .ply\n    \"\"\"\n\n    output_filename: str = \"splat.ply\"\n    \"\"\"Name of the output file.\"\"\"\n    obb_center: Optional[Tuple[float, float, float]] = None\n    \"\"\"Center of the oriented bounding box.\"\"\"\n    obb_rotation: Optional[Tuple[float, float, float]] = None\n    \"\"\"Rotation of the oriented bounding box. Expressed as RPY Euler angles in radians\"\"\"\n    obb_scale: Optional[Tuple[float, float, float]] = None\n    \"\"\"Scale of the oriented bounding box along each axis.\"\"\"\n    ply_color_mode: Literal[\"sh_coeffs\", \"rgb\"] = \"sh_coeffs\"\n    \"\"\"If \"rgb\", export colors as red/green/blue fields. Otherwise, export colors as\n    spherical harmonics coefficients.\"\"\"\n\n    @staticmethod\n    def write_ply(\n        filename: str,\n        count: int,\n        map_to_tensors: typing.OrderedDict[str, np.ndarray],\n    ):\n        \"\"\"\n        Writes a PLY file with given vertex properties and a tensor of float or uint8 values in the order specified by the OrderedDict.\n        Note: All float values will be converted to float32 for writing.\n\n        Parameters:\n        filename (str): The name of the file to write.\n        count (int): The number of vertices to write.\n        map_to_tensors (OrderedDict[str, np.ndarray]): An ordered dictionary mapping property names to numpy arrays of float or uint8 values.\n            Each array should be 1-dimensional and of equal length matching 'count'. Arrays should not be empty.\n        \"\"\"\n\n        # Ensure count matches the length of all tensors\n        if not all(tensor.size == count for tensor in map_to_tensors.values()):\n            raise ValueError(\"Count does not match the length of all tensors\")\n\n        # Type check for numpy arrays of type float or uint8 and non-empty\n        if not all(\n            isinstance(tensor, np.ndarray)\n            and (tensor.dtype.kind == \"f\" or tensor.dtype == np.uint8)\n            and tensor.size > 0\n            for tensor in map_to_tensors.values()\n        ):\n            raise ValueError(\"All tensors must be numpy arrays of float or uint8 type and not empty\")\n\n        with open(filename, \"wb\") as ply_file:\n            nerfstudio_version = version(\"nerfstudio\")\n            # Write PLY header\n            ply_file.write(b\"ply\\n\")\n            ply_file.write(b\"format binary_little_endian 1.0\\n\")\n            ply_file.write(f\"comment Generated by Nerstudio {nerfstudio_version}\\n\".encode())\n            ply_file.write(b\"comment Vertical Axis: z\\n\")\n            ply_file.write(f\"element vertex {count}\\n\".encode())\n\n            # Write properties, in order due to OrderedDict\n            for key, tensor in map_to_tensors.items():\n                data_type = \"float\" if tensor.dtype.kind == \"f\" else \"uchar\"\n                ply_file.write(f\"property {data_type} {key}\\n\".encode())\n\n            ply_file.write(b\"end_header\\n\")\n\n            # Write binary data\n            # Note: If this is a performance bottleneck consider using numpy.hstack for efficiency improvement\n            for i in range(count):\n                for tensor in map_to_tensors.values():\n                    value = tensor[i]\n                    if tensor.dtype.kind == \"f\":\n                        ply_file.write(np.float32(value).tobytes())\n                    elif tensor.dtype == np.uint8:\n                        ply_file.write(value.tobytes())\n\n    def main(self) -> None:\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        _, pipeline, _, _ = eval_setup(self.load_config, test_mode=\"inference\")\n\n        assert isinstance(pipeline.model, SplatfactoModel)\n\n        model: SplatfactoModel = pipeline.model\n\n        filename = self.output_dir / self.output_filename\n\n        map_to_tensors = OrderedDict()\n\n        with torch.no_grad():\n            positions = model.means.cpu().numpy()\n            count = positions.shape[0]\n            n = count\n            map_to_tensors[\"x\"] = positions[:, 0]\n            map_to_tensors[\"y\"] = positions[:, 1]\n            map_to_tensors[\"z\"] = positions[:, 2]\n            map_to_tensors[\"nx\"] = np.zeros(n, dtype=np.float32)\n            map_to_tensors[\"ny\"] = np.zeros(n, dtype=np.float32)\n            map_to_tensors[\"nz\"] = np.zeros(n, dtype=np.float32)\n\n            if self.ply_color_mode == \"rgb\":\n                colors = torch.clamp(model.colors.clone(), 0.0, 1.0).data.cpu().numpy()\n                colors = (colors * 255).astype(np.uint8)\n                map_to_tensors[\"red\"] = colors[:, 0]\n                map_to_tensors[\"green\"] = colors[:, 1]\n                map_to_tensors[\"blue\"] = colors[:, 2]\n            elif self.ply_color_mode == \"sh_coeffs\":\n                shs_0 = model.shs_0.contiguous().cpu().numpy()\n                for i in range(shs_0.shape[1]):\n                    map_to_tensors[f\"f_dc_{i}\"] = shs_0[:, i, None]\n\n            if model.config.sh_degree > 0:\n                if self.ply_color_mode == \"rgb\":\n                    CONSOLE.print(\n                        \"Warning: model has higher level of spherical harmonics, ignoring them and only export rgb.\"\n                    )\n                elif self.ply_color_mode == \"sh_coeffs\":\n                    # transpose(1, 2) was needed to match the sh order in Inria version\n                    shs_rest = model.shs_rest.transpose(1, 2).contiguous().cpu().numpy()\n                    shs_rest = shs_rest.reshape((n, -1))\n                    for i in range(shs_rest.shape[-1]):\n                        map_to_tensors[f\"f_rest_{i}\"] = shs_rest[:, i, None]\n\n            map_to_tensors[\"opacity\"] = model.opacities.data.cpu().numpy()\n\n            scales = model.scales.data.cpu().numpy()\n            for i in range(3):\n                map_to_tensors[f\"scale_{i}\"] = scales[:, i, None]\n\n            quats = model.quats.data.cpu().numpy()\n            for i in range(4):\n                map_to_tensors[f\"rot_{i}\"] = quats[:, i, None]\n\n            if self.obb_center is not None and self.obb_rotation is not None and self.obb_scale is not None:\n                crop_obb = OrientedBox.from_params(self.obb_center, self.obb_rotation, self.obb_scale)\n                assert crop_obb is not None\n                mask = crop_obb.within(torch.from_numpy(positions)).numpy()\n                for k, t in map_to_tensors.items():\n                    map_to_tensors[k] = map_to_tensors[k][mask]\n\n                n = map_to_tensors[\"x\"].shape[0]\n                count = n\n\n        # post optimization, it is possible have NaN/Inf values in some attributes\n        # to ensure the exported ply file has finite values, we enforce finite filters.\n        select = np.ones(n, dtype=bool)\n        for k, t in map_to_tensors.items():\n            n_before = np.sum(select)\n            select = np.logical_and(select, np.isfinite(t).all(axis=-1))\n            n_after = np.sum(select)\n            if n_after < n_before:\n                CONSOLE.print(f\"{n_before - n_after} NaN/Inf elements in {k}\")\n        nan_count = np.sum(select) - n\n\n        # filter gaussians that have opacities < 1/255, because they are skipped in cuda rasterization\n        low_opacity_gaussians = (map_to_tensors[\"opacity\"]).squeeze(axis=-1) < -5.5373  # logit(1/255)\n        lowopa_count = np.sum(low_opacity_gaussians)\n        select[low_opacity_gaussians] = 0\n\n        if np.sum(select) < n:\n            CONSOLE.print(\n                f\"{nan_count} Gaussians have NaN/Inf and {lowopa_count} have low opacity, only export {np.sum(select)}/{n}\"\n            )\n            for k, t in map_to_tensors.items():\n                map_to_tensors[k] = map_to_tensors[k][select]\n            count = np.sum(select)\n\n        ExportGaussianSplat.write_ply(str(filename), count, map_to_tensors)\n\n\nCommands = tyro.conf.FlagConversionOff[\n    Union[\n        Annotated[ExportPointCloud, tyro.conf.subcommand(name=\"pointcloud\")],\n        Annotated[ExportTSDFMesh, tyro.conf.subcommand(name=\"tsdf\")],\n        Annotated[ExportPoissonMesh, tyro.conf.subcommand(name=\"poisson\")],\n        Annotated[ExportMarchingCubesMesh, tyro.conf.subcommand(name=\"marching-cubes\")],\n        Annotated[ExportCameraPoses, tyro.conf.subcommand(name=\"cameras\")],\n        Annotated[ExportGaussianSplat, tyro.conf.subcommand(name=\"gaussian-splat\")],\n    ]\n]\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(Commands).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n\ndef get_parser_fn():\n    \"\"\"Get the parser function for the sphinx docs.\"\"\"\n    return tyro.extras.get_parser(Commands)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/github/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/github/run_actions.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"Simple yaml debugger\"\"\"\n\nimport subprocess\nimport sys\n\nimport tyro\nimport yaml\nfrom rich.style import Style\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nLOCAL_TESTS = [\"Run license checks\", \"Run Ruff Linter\", \"Run Ruff Formatter\", \"Run Pyright\", \"Test with pytest\"]\n\n\ndef run_command(command: str, continue_on_fail: bool = False) -> bool:\n    \"\"\"Run a command kill actions if it fails\n\n    Args:\n        command: command to run\n        continue_on_fail: whether to continue running commands if the current one fails.\n    \"\"\"\n    ret_code = subprocess.call(command, shell=True)\n    if ret_code != 0:\n        CONSOLE.print(f\"[bold red]Error: `{command}` failed.\")\n        if not continue_on_fail:\n            sys.exit(1)\n    return ret_code == 0\n\n\ndef run_github_actions_file(filename: str, continue_on_fail: bool = False):\n    \"\"\"Run a github actions file locally.\n\n    Args:\n        filename: Which yml github actions file to run.\n        continue_on_fail: Whether or not to continue running actions commands if the current one fails\n    \"\"\"\n    with open(filename, \"rb\") as f:\n        my_dict = yaml.safe_load(f)\n    steps = my_dict[\"jobs\"][\"build\"][\"steps\"]\n\n    success = True\n\n    for step in steps:\n        if \"name\" in step and step[\"name\"] in LOCAL_TESTS:\n            curr_command = step[\"run\"].replace(\"\\n\", \";\").replace(\"\\\\\", \"\")\n            if curr_command.startswith(\"ruff\"):\n                if \"ruff check\" in curr_command:\n                    curr_command = curr_command.replace(\"ruff check\", \"ruff check --fix\")\n\n                curr_command = curr_command.replace(\" --check\", \"\")\n                curr_command = curr_command.replace(\" --diff\", \"\")\n                curr_command = curr_command.replace(\" --output-format=github\", \"\")\n\n            CONSOLE.line()\n            CONSOLE.rule(f\"[bold green]Running: {curr_command}\")\n            success = success and run_command(curr_command, continue_on_fail=continue_on_fail)\n        else:\n            skip_name = step[\"name\"] if \"name\" in step else step[\"uses\"]\n            CONSOLE.print(f\"Skipping {skip_name}\")\n\n    # Add checks for building documentation\n    CONSOLE.line()\n    CONSOLE.rule(\"[bold green]Adding notebook documentation metadata\")\n    success = success and run_command(\n        \"python nerfstudio/scripts/docs/add_nb_tags.py\", continue_on_fail=continue_on_fail\n    )\n    CONSOLE.line()\n    CONSOLE.rule(\"[bold green]Building Documentation\")\n    success = success and run_command(\"cd docs/; make html SPHINXOPTS='-W;'\", continue_on_fail=continue_on_fail)\n\n    if success:\n        CONSOLE.line()\n        CONSOLE.rule(characters=\"=\")\n        CONSOLE.print(\"[bold green]:TADA: :TADA: :TADA: ALL CHECKS PASSED :TADA: :TADA: :TADA:\", justify=\"center\")\n        CONSOLE.rule(characters=\"=\")\n    else:\n        CONSOLE.line()\n        CONSOLE.rule(characters=\"=\", style=Style(color=\"red\"))\n        CONSOLE.print(\"[bold red]:skull: :skull: :skull: ERRORS FOUND :skull: :skull: :skull:\", justify=\"center\")\n        CONSOLE.rule(characters=\"=\", style=Style(color=\"red\"))\n\n\ndef run_code_checks(continue_on_fail: bool = False):\n    \"\"\"Run a github actions file locally.\n\n    Args:\n        continue_on_fail: Whether or not to continue running actions commands if the current one fails\n    \"\"\"\n    # core code checks\n    run_github_actions_file(filename=\".github/workflows/core_code_checks.yml\", continue_on_fail=continue_on_fail)\n    # viewer build and deployment\n    # run_github_actions_file(filename=\".github/workflows/viewer_build_deploy.yml\", continue_on_fail=continue_on_fail)\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(run_code_checks)\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/process_data.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"Processes a video or image sequence to a nerfstudio compatible dataset.\"\"\"\n\nimport sys\nimport zipfile\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional, Union\n\nimport numpy as np\nimport tyro\nfrom typing_extensions import Annotated\n\nfrom nerfstudio.process_data import (\n    metashape_utils,\n    odm_utils,\n    polycam_utils,\n    process_data_utils,\n    realitycapture_utils,\n    record3d_utils,\n)\nfrom nerfstudio.process_data.colmap_converter_to_nerfstudio_dataset import BaseConverterToNerfstudioDataset\nfrom nerfstudio.process_data.images_to_nerfstudio_dataset import ImagesToNerfstudioDataset\nfrom nerfstudio.process_data.video_to_nerfstudio_dataset import VideoToNerfstudioDataset\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\n@dataclass\nclass ProcessRecord3D(BaseConverterToNerfstudioDataset):\n    \"\"\"Process Record3D data into a nerfstudio dataset.\n\n    This script does the following:\n\n    1. Scales images to a specified size.\n    2. Converts Record3D poses into the nerfstudio format.\n    \"\"\"\n\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n        will downscale the images by 2x, 4x, and 8x.\"\"\"\n    max_dataset_size: int = 300\n    \"\"\"Max number of images to train on. If the dataset has more, images will be sampled approximately evenly. If -1,\n    use all images.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        image_dir = self.output_dir / \"images\"\n        image_dir.mkdir(parents=True, exist_ok=True)\n\n        summary_log = []\n\n        record3d_image_dir = self.data / \"rgb\"\n\n        if not record3d_image_dir.exists():\n            raise ValueError(f\"Image directory {record3d_image_dir} doesn't exist\")\n\n        record3d_image_filenames = []\n        for f in record3d_image_dir.iterdir():\n            if f.stem.isdigit():  # removes possible duplicate images (for example, 123(3).jpg)\n                if f.suffix.lower() in [\".jpg\", \".jpeg\", \".png\", \".tif\", \".tiff\"]:\n                    record3d_image_filenames.append(f)\n\n        record3d_image_filenames = sorted(record3d_image_filenames, key=lambda fn: int(fn.stem))\n        num_images = len(record3d_image_filenames)\n        idx = np.arange(num_images)\n        if self.max_dataset_size != -1 and num_images > self.max_dataset_size:\n            idx = np.round(np.linspace(0, num_images - 1, self.max_dataset_size)).astype(int)\n\n        record3d_image_filenames = list(np.array(record3d_image_filenames)[idx])\n        # Copy images to output directory\n        copied_image_paths = process_data_utils.copy_images_list(\n            record3d_image_filenames,\n            image_dir=image_dir,\n            verbose=self.verbose,\n            num_downscales=self.num_downscales,\n        )\n        num_frames = len(copied_image_paths)\n\n        copied_image_paths = [Path(\"images/\" + copied_image_path.name) for copied_image_path in copied_image_paths]\n        summary_log.append(f\"Used {num_frames} images out of {num_images} total\")\n        if self.max_dataset_size > 0:\n            summary_log.append(\n                \"To change the size of the dataset add the argument [yellow]--max_dataset_size[/yellow] to \"\n                f\"larger than the current value ({self.max_dataset_size}), or -1 to use all images.\"\n            )\n\n        metadata_path = self.data / \"metadata.json\"\n        record3d_utils.record3d_to_json(copied_image_paths, metadata_path, self.output_dir, indices=idx)\n        CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.print(summary, justify=\"center\")\n        CONSOLE.rule()\n\n\n@dataclass\nclass ProcessPolycam(BaseConverterToNerfstudioDataset):\n    \"\"\"Process Polycam data into a nerfstudio dataset.\n\n    To capture data, use the Polycam app on an iPhone or iPad with LiDAR. The capture must be in LiDAR or ROOM mode.\n    Developer mode must be enabled in the app settings, this will enable a raw data export option in the export menus.\n    The exported data folder is used as the input to this script.\n\n    This script does the following:\n\n    1. Scales images to a specified size.\n    2. Converts Polycam poses into the nerfstudio format.\n    \"\"\"\n\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n        will downscale the images by 2x, 4x, and 8x.\"\"\"\n    use_uncorrected_images: bool = False\n    \"\"\"If True, use the raw images from the polycam export. If False, use the corrected images.\"\"\"\n    max_dataset_size: int = 600\n    \"\"\"Max number of images to train on. If the dataset has more, images will be sampled approximately evenly. If -1,\n    use all images.\"\"\"\n    min_blur_score: float = 25\n    \"\"\"Minimum blur score to use an image. If the blur score is below this value, the image will be skipped.\"\"\"\n    crop_border_pixels: int = 15\n    \"\"\"Number of pixels to crop from each border of the image. Useful as borders may be black due to undistortion.\"\"\"\n    use_depth: bool = False\n    \"\"\"If True, processes the generated depth maps from Polycam\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        image_dir = self.output_dir / \"images\"\n        image_dir.mkdir(parents=True, exist_ok=True)\n\n        summary_log = []\n\n        if self.data.suffix == \".zip\":\n            with zipfile.ZipFile(self.data, \"r\") as zip_ref:\n                zip_ref.extractall(self.output_dir)\n                extracted_folder = zip_ref.namelist()[0].split(\"/\")[0]\n            self.data = self.output_dir / extracted_folder\n            if not (self.data / \"keyframes\").exists():\n                # new versions of polycam data have a different structure, strip the last dir off\n                self.data = self.output_dir\n\n        if (self.data / \"keyframes\" / \"corrected_images\").exists() and not self.use_uncorrected_images:\n            polycam_image_dir = self.data / \"keyframes\" / \"corrected_images\"\n            polycam_cameras_dir = self.data / \"keyframes\" / \"corrected_cameras\"\n        else:\n            polycam_image_dir = self.data / \"keyframes\" / \"images\"\n            polycam_cameras_dir = self.data / \"keyframes\" / \"cameras\"\n            if not self.use_uncorrected_images:\n                CONSOLE.print(\"[bold yellow]Corrected images not found, using raw images.\")\n\n        if not polycam_image_dir.exists():\n            raise ValueError(f\"Image directory {polycam_image_dir} doesn't exist\")\n\n        if not (self.data / \"keyframes\" / \"depth\").exists():\n            depth_dir = self.data / \"keyframes\" / \"depth\"\n            raise ValueError(f\"Depth map directory {depth_dir} doesn't exist\")\n\n        (image_processing_log, polycam_image_filenames) = polycam_utils.process_images(\n            polycam_image_dir,\n            image_dir,\n            crop_border_pixels=self.crop_border_pixels,\n            max_dataset_size=self.max_dataset_size,\n            num_downscales=self.num_downscales,\n            verbose=self.verbose,\n        )\n\n        summary_log.extend(image_processing_log)\n\n        polycam_depth_filenames = []\n        if self.use_depth:\n            polycam_depth_image_dir = self.data / \"keyframes\" / \"depth\"\n            depth_dir = self.output_dir / \"depth\"\n            depth_dir.mkdir(parents=True, exist_ok=True)\n            (depth_processing_log, polycam_depth_filenames) = polycam_utils.process_depth_maps(\n                polycam_depth_image_dir,\n                depth_dir,\n                num_processed_images=len(polycam_image_filenames),\n                crop_border_pixels=self.crop_border_pixels,\n                max_dataset_size=self.max_dataset_size,\n                num_downscales=self.num_downscales,\n                verbose=self.verbose,\n            )\n            summary_log.extend(depth_processing_log)\n\n        summary_log.extend(\n            polycam_utils.polycam_to_json(\n                image_filenames=polycam_image_filenames,\n                depth_filenames=polycam_depth_filenames,\n                glb_filename=self.data / \"raw.glb\" if (self.data / \"raw.glb\").exists() else None,\n                cameras_dir=polycam_cameras_dir,\n                output_dir=self.output_dir,\n                min_blur_score=self.min_blur_score,\n                crop_border_pixels=self.crop_border_pixels,\n            )\n        )\n\n        CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.print(summary, justify=\"center\")\n        CONSOLE.rule()\n\n\n@dataclass\nclass _NoDefaultProcessMetashape:\n    \"\"\"Private class to order the parameters of ProcessMetashape in the right order for default values.\"\"\"\n\n    xml: Path\n    \"\"\"Path to the Metashape xml file.\"\"\"\n\n\n@dataclass\nclass ProcessMetashape(BaseConverterToNerfstudioDataset, _NoDefaultProcessMetashape):\n    \"\"\"Process Metashape data into a nerfstudio dataset.\n\n    This script assumes that cameras have been aligned using Metashape. After alignment, it is necessary to export the\n    camera poses as a `.xml` file. This option can be found under `File > Export > Export Cameras`.\n\n    Additionally, the points can be exported as pointcloud under `File > Export > Export Point Cloud`. Make sure to\n    export the data in non-binary format and exclude the normals.\n\n    This script does the following:\n\n    1. Scales images to a specified size.\n    2. Converts Metashape poses into the nerfstudio format.\n    \"\"\"\n\n    ply: Optional[Path] = None\n    \"\"\"Path to the Metashape point export ply file.\"\"\"\n\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n        will downscale the images by 2x, 4x, and 8x.\"\"\"\n    max_dataset_size: int = 600\n    \"\"\"Max number of images to train on. If the dataset has more, images will be sampled approximately evenly. If -1,\n    use all images.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        if self.xml.suffix != \".xml\":\n            raise ValueError(f\"XML file {self.xml} must have a .xml extension\")\n        if not self.xml.exists():\n            raise ValueError(f\"XML file {self.xml} doesn't exist\")\n        if self.eval_data is not None:\n            raise ValueError(\"Cannot use eval_data since cameras were already aligned with Metashape.\")\n\n        if self.ply is not None:\n            if self.ply.suffix != \".ply\":\n                raise ValueError(f\"PLY file {self.ply} must have a .ply extension\")\n            if not self.ply.exists():\n                raise ValueError(f\"PLY file {self.ply} doesn't exist\")\n\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        image_dir = self.output_dir / \"images\"\n        image_dir.mkdir(parents=True, exist_ok=True)\n\n        summary_log = []\n\n        # Copy images to output directory\n        image_filenames, num_orig_images = process_data_utils.get_image_filenames(self.data, self.max_dataset_size)\n        copied_image_paths = process_data_utils.copy_images_list(\n            image_filenames,\n            image_dir=image_dir,\n            verbose=self.verbose,\n            num_downscales=self.num_downscales,\n        )\n        num_frames = len(copied_image_paths)\n\n        copied_image_paths = [Path(\"images/\" + copied_image_path.name) for copied_image_path in copied_image_paths]\n        original_names = [image_path.stem for image_path in image_filenames]\n        image_filename_map = dict(zip(original_names, copied_image_paths))\n\n        if self.max_dataset_size > 0 and num_frames != num_orig_images:\n            summary_log.append(f\"Started with {num_frames} images out of {num_orig_images} total\")\n            summary_log.append(\n                \"To change the size of the dataset add the argument [yellow]--max_dataset_size[/yellow] to \"\n                f\"larger than the current value ({self.max_dataset_size}), or -1 to use all images.\"\n            )\n        else:\n            summary_log.append(f\"Started with {num_frames} images\")\n\n        # Save json\n        if num_frames == 0:\n            CONSOLE.print(\"[bold red]No images found, exiting\")\n            sys.exit(1)\n        summary_log.extend(\n            metashape_utils.metashape_to_json(\n                image_filename_map=image_filename_map,\n                xml_filename=self.xml,\n                output_dir=self.output_dir,\n                ply_filename=self.ply,\n                verbose=self.verbose,\n            )\n        )\n\n        CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.print(summary, justify=\"center\")\n        CONSOLE.rule()\n\n\n@dataclass\nclass _NoDefaultProcessRealityCapture:\n    \"\"\"Private class to order the parameters of ProcessRealityCapture in the right order for default values.\"\"\"\n\n    csv: Path\n    \"\"\"Path to the RealityCapture cameras CSV file.\"\"\"\n\n\n@dataclass\nclass ProcessRealityCapture(BaseConverterToNerfstudioDataset, _NoDefaultProcessRealityCapture):\n    \"\"\"Process RealityCapture data into a nerfstudio dataset.\n\n    This script assumes that cameras have been aligned using RealityCapture. After alignment, it is necessary to\n    export the camera poses as a `.csv` file using the `Internal/External camera parameters` option.\n\n    This script does the following:\n\n    1. Scales images to a specified size.\n    2. Converts RealityCapture poses into the nerfstudio format.\n    \"\"\"\n\n    ply: Optional[Path] = None\n    \"\"\"Path to the RealityCapture exported ply file\"\"\"\n\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n        will downscale the images by 2x, 4x, and 8x.\"\"\"\n    max_dataset_size: int = 600\n    \"\"\"Max number of images to train on. If the dataset has more, images will be sampled approximately evenly. If -1,\n    use all images.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        if self.csv.suffix != \".csv\":\n            raise ValueError(f\"CSV file {self.csv} must have a .csv extension\")\n        if not self.csv.exists():\n            raise ValueError(f\"CSV file {self.csv} doesn't exist\")\n        if self.eval_data is not None:\n            raise ValueError(\"Cannot use eval_data since cameras were already aligned with RealityCapture.\")\n\n        if self.ply is not None:\n            if self.ply.suffix != \".ply\":\n                raise ValueError(f\"PLY file {self.ply} must have a .ply extension\")\n            if not self.ply.exists():\n                raise ValueError(f\"PLY file {self.ply} doesn't exist\")\n\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        image_dir = self.output_dir / \"images\"\n        image_dir.mkdir(parents=True, exist_ok=True)\n\n        summary_log = []\n\n        # Copy images to output directory\n        image_filenames, num_orig_images = process_data_utils.get_image_filenames(self.data, self.max_dataset_size)\n        copied_image_paths = process_data_utils.copy_images_list(\n            image_filenames,\n            image_dir=image_dir,\n            verbose=self.verbose,\n            num_downscales=self.num_downscales,\n        )\n        num_frames = len(copied_image_paths)\n\n        copied_image_paths = [Path(\"images/\" + copied_image_path.name) for copied_image_path in copied_image_paths]\n        original_names = [image_path.stem for image_path in image_filenames]\n        image_filename_map = dict(zip(original_names, copied_image_paths))\n\n        if self.max_dataset_size > 0 and num_frames != num_orig_images:\n            summary_log.append(f\"Started with {num_frames} images out of {num_orig_images} total\")\n            summary_log.append(\n                \"To change the size of the dataset add the argument [yellow]--max_dataset_size[/yellow] to \"\n                f\"larger than the current value ({self.max_dataset_size}), or -1 to use all images.\"\n            )\n        else:\n            summary_log.append(f\"Started with {num_frames} images\")\n\n        # Save json\n        if num_frames == 0:\n            CONSOLE.print(\"[bold red]No images found, exiting\")\n            sys.exit(1)\n        summary_log.extend(\n            realitycapture_utils.realitycapture_to_json(\n                image_filename_map=image_filename_map,\n                csv_filename=self.csv,\n                ply_filename=self.ply,\n                output_dir=self.output_dir,\n                verbose=self.verbose,\n            )\n        )\n\n        CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.print(summary, justify=\"center\")\n        CONSOLE.rule()\n\n\n@dataclass\nclass ProcessODM(BaseConverterToNerfstudioDataset):\n    \"\"\"Process ODM data into a nerfstudio dataset.\n\n    This script does the following:\n\n    1. Scales images to a specified size.\n    2. Converts ODM poses into the nerfstudio format.\n    \"\"\"\n\n    num_downscales: int = 3\n    \"\"\"Number of times to downscale the images. Downscales by 2 each time. For example a value of 3\n        will downscale the images by 2x, 4x, and 8x.\"\"\"\n    max_dataset_size: int = 600\n    \"\"\"Max number of images to train on. If the dataset has more, images will be sampled approximately evenly. If -1,\n    use all images.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Process images into a nerfstudio dataset.\"\"\"\n\n        orig_images_dir = self.data / \"images\"\n        cameras_file = self.data / \"cameras.json\"\n        shots_file = self.data / \"odm_report\" / \"shots.geojson\"\n        reconstruction_file = self.data / \"opensfm\" / \"reconstruction.json\"\n\n        if not shots_file.exists():\n            raise ValueError(f\"shots file {shots_file} doesn't exist\")\n        if not shots_file.exists():\n            raise ValueError(f\"cameras file {cameras_file} doesn't exist\")\n\n        if not orig_images_dir.exists():\n            raise ValueError(f\"Images dir {orig_images_dir} doesn't exist\")\n\n        if self.eval_data is not None:\n            raise ValueError(\"Cannot use eval_data since cameras were already aligned with ODM.\")\n\n        self.output_dir.mkdir(parents=True, exist_ok=True)\n        image_dir = self.output_dir / \"images\"\n        image_dir.mkdir(parents=True, exist_ok=True)\n\n        summary_log = []\n\n        # Copy images to output directory\n        image_filenames, num_orig_images = process_data_utils.get_image_filenames(\n            orig_images_dir, self.max_dataset_size\n        )\n        copied_image_paths = process_data_utils.copy_images_list(\n            image_filenames,\n            image_dir=image_dir,\n            verbose=self.verbose,\n            num_downscales=self.num_downscales,\n        )\n        num_frames = len(copied_image_paths)\n\n        copied_image_paths = [Path(\"images/\" + copied_image_path.name) for copied_image_path in copied_image_paths]\n        original_names = [image_path.stem for image_path in image_filenames]\n        image_filename_map = dict(zip(original_names, copied_image_paths))\n\n        if self.max_dataset_size > 0 and num_frames != num_orig_images:\n            summary_log.append(f\"Started with {num_frames} images out of {num_orig_images} total\")\n            summary_log.append(\n                \"To change the size of the dataset add the argument [yellow]--max_dataset_size[/yellow] to \"\n                f\"larger than the current value ({self.max_dataset_size}), or -1 to use all images.\"\n            )\n        else:\n            summary_log.append(f\"Started with {num_frames} images\")\n\n        # Save json\n        if num_frames == 0:\n            CONSOLE.print(\"[bold red]No images found, exiting\")\n            sys.exit(1)\n        summary_log.extend(\n            odm_utils.cameras2nerfds(\n                image_filename_map=image_filename_map,\n                cameras_file=cameras_file,\n                shots_file=shots_file,\n                reconstruction_file=reconstruction_file,\n                output_dir=self.output_dir,\n                verbose=self.verbose,\n            )\n        )\n\n        CONSOLE.rule(\"[bold green]:tada: :tada: :tada: All DONE :tada: :tada: :tada:\")\n\n        for summary in summary_log:\n            CONSOLE.print(summary, justify=\"center\")\n        CONSOLE.rule()\n\n\n@dataclass\nclass NotInstalled:\n    def main(self) -> None: ...\n\n\nCommands = Union[\n    Annotated[ImagesToNerfstudioDataset, tyro.conf.subcommand(name=\"images\")],\n    Annotated[VideoToNerfstudioDataset, tyro.conf.subcommand(name=\"video\")],\n    Annotated[ProcessPolycam, tyro.conf.subcommand(name=\"polycam\")],\n    Annotated[ProcessMetashape, tyro.conf.subcommand(name=\"metashape\")],\n    Annotated[ProcessRealityCapture, tyro.conf.subcommand(name=\"realitycapture\")],\n    Annotated[ProcessRecord3D, tyro.conf.subcommand(name=\"record3d\")],\n    Annotated[ProcessODM, tyro.conf.subcommand(name=\"odm\")],\n]\n\n# Add aria subcommand if projectaria_tools is installed.\ntry:\n    import projectaria_tools\nexcept ImportError:\n    projectaria_tools = None\n\nif projectaria_tools is not None:\n    from nerfstudio.scripts.datasets.process_project_aria import ProcessProjectAria\n\n    # Note that Union[A, Union[B, C]] == Union[A, B, C].\n    Commands = Union[Commands, Annotated[ProcessProjectAria, tyro.conf.subcommand(name=\"aria\")]]\nelse:\n    Commands = Union[\n        Commands,\n        Annotated[\n            NotInstalled,\n            tyro.conf.subcommand(\n                name=\"aria\",\n                description=\"**Not installed.** Processing Project Aria data requires `pip install projectaria_tools'[all]'`.\",\n            ),\n        ],\n    ]\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    try:\n        tyro.cli(Commands).main()\n    except (RuntimeError, ValueError) as e:\n        CONSOLE.log(\"[bold red]\" + e.args[0])\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n\ndef get_parser_fn():\n    \"\"\"Get the parser function for the sphinx docs.\"\"\"\n    return tyro.extras.get_parser(Commands)  # type: ignore\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/render.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"\nrender.py\n\"\"\"\n\nfrom __future__ import annotations\n\nimport gzip\nimport json\nimport os\nimport shutil\nimport struct\nimport sys\nfrom contextlib import ExitStack, contextmanager\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\nfrom typing import Any, Dict, List, Literal, Optional, Union\n\nimport mediapy as media\nimport numpy as np\nimport torch\nimport tyro\nimport viser.transforms as tf\nfrom jaxtyping import Float\nfrom rich import box, style\nfrom rich.panel import Panel\nfrom rich.progress import BarColumn, Progress, TaskProgressColumn, TextColumn, TimeElapsedColumn, TimeRemainingColumn\nfrom rich.table import Table\nfrom torch import Tensor\nfrom typing_extensions import Annotated\n\nfrom nerfstudio.cameras.camera_paths import get_interpolated_camera_path, get_path_from_json, get_spiral_path\nfrom nerfstudio.cameras.cameras import Cameras, CameraType, RayBundle\nfrom nerfstudio.data.datamanagers.base_datamanager import VanillaDataManager, VanillaDataManagerConfig\nfrom nerfstudio.data.datamanagers.full_images_datamanager import FullImageDatamanagerConfig\nfrom nerfstudio.data.datamanagers.parallel_datamanager import ParallelDataManager\nfrom nerfstudio.data.datamanagers.random_cameras_datamanager import RandomCamerasDataManager\nfrom nerfstudio.data.datasets.base_dataset import Dataset\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.data.utils.dataloaders import FixedIndicesEvalDataloader\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.model_components import renderers\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils import colormaps, install_checks\nfrom nerfstudio.utils.eval_utils import eval_setup\nfrom nerfstudio.utils.rich_utils import CONSOLE, ItersPerSecColumn\nfrom nerfstudio.utils.scripts import run_command\n\n\ndef _render_trajectory_video(\n    pipeline: Pipeline,\n    cameras: Cameras,\n    output_filename: Path,\n    rendered_output_names: List[str],\n    crop_data: Optional[CropData] = None,\n    rendered_resolution_scaling_factor: float = 1.0,\n    seconds: float = 5.0,\n    output_format: Literal[\"images\", \"video\"] = \"video\",\n    image_format: Literal[\"jpeg\", \"png\"] = \"jpeg\",\n    jpeg_quality: int = 100,\n    depth_near_plane: Optional[float] = None,\n    depth_far_plane: Optional[float] = None,\n    colormap_options: colormaps.ColormapOptions = colormaps.ColormapOptions(),\n    render_nearest_camera=False,\n    check_occlusions: bool = False,\n) -> None:\n    \"\"\"Helper function to create a video of the spiral trajectory.\n\n    Args:\n        pipeline: Pipeline to evaluate with.\n        cameras: Cameras to render.\n        output_filename: Name of the output file.\n        rendered_output_names: List of outputs to visualise.\n        crop_data: Crop data to apply to the rendered images.\n        rendered_resolution_scaling_factor: Scaling factor to apply to the camera image resolution.\n        seconds: Length of output video.\n        output_format: How to save output data.\n        depth_near_plane: Closest depth to consider when using the colormap for depth. If None, use min value.\n        depth_far_plane: Furthest depth to consider when using the colormap for depth. If None, use max value.\n        colormap_options: Options for colormap.\n        render_nearest_camera: Whether to render the nearest training camera to the rendered camera.\n        check_occlusions: If true, checks line-of-sight occlusions when computing camera distance and rejects cameras not visible to each other\n    \"\"\"\n    CONSOLE.print(\"[bold green]Creating trajectory \" + output_format)\n    cameras.rescale_output_resolution(rendered_resolution_scaling_factor)\n    cameras = cameras.to(pipeline.device)\n    fps = len(cameras) / seconds\n\n    progress = Progress(\n        TextColumn(\":movie_camera: Rendering :movie_camera:\"),\n        BarColumn(),\n        TaskProgressColumn(\n            text_format=\"[progress.percentage]{task.completed}/{task.total:>.0f}({task.percentage:>3.1f}%)\",\n            show_speed=True,\n        ),\n        ItersPerSecColumn(suffix=\"fps\"),\n        TimeRemainingColumn(elapsed_when_finished=False, compact=False),\n        TimeElapsedColumn(),\n    )\n    output_image_dir = output_filename.parent / output_filename.stem\n    if output_format == \"images\":\n        output_image_dir.mkdir(parents=True, exist_ok=True)\n    if output_format == \"video\":\n        # make the folder if it doesn't exist\n        output_filename.parent.mkdir(parents=True, exist_ok=True)\n        # NOTE:\n        # we could use ffmpeg_args \"-movflags faststart\" for progressive download,\n        # which would force moov atom into known position before mdat,\n        # but then we would have to move all of mdat to insert metadata atom\n        # (unless we reserve enough space to overwrite with our uuid tag,\n        # but we don't know how big the video file will be, so it's not certain!)\n\n    with ExitStack() as stack:\n        writer = None\n\n        if render_nearest_camera:\n            assert pipeline.datamanager.train_dataset is not None\n            train_dataset = pipeline.datamanager.train_dataset\n            train_cameras = train_dataset.cameras.to(pipeline.device)\n        else:\n            train_dataset = None\n            train_cameras = None\n\n        with progress:\n            for camera_idx in progress.track(range(cameras.size), description=\"\"):\n                obb_box = None\n                if crop_data is not None:\n                    obb_box = crop_data.obb\n\n                max_dist, max_idx = -1, -1\n                true_max_dist, true_max_idx = -1, -1\n\n                if render_nearest_camera:\n                    assert pipeline.datamanager.train_dataset is not None\n                    assert train_dataset is not None\n                    assert train_cameras is not None\n                    cam_pos = cameras[camera_idx].camera_to_worlds[:, 3].cpu()\n                    cam_quat = tf.SO3.from_matrix(cameras[camera_idx].camera_to_worlds[:3, :3].numpy(force=True)).wxyz\n\n                    for i in range(len(train_cameras)):\n                        train_cam_pos = train_cameras[i].camera_to_worlds[:, 3].cpu()\n                        # Make sure the line of sight from rendered cam to training cam is not blocked by any object\n                        bundle = RayBundle(\n                            origins=cam_pos.view(1, 3),\n                            directions=((cam_pos - train_cam_pos) / (cam_pos - train_cam_pos).norm()).view(1, 3),\n                            pixel_area=torch.tensor(1).view(1, 1),\n                            nears=torch.tensor(0.05).view(1, 1),\n                            fars=torch.tensor(100).view(1, 1),\n                            camera_indices=torch.tensor(0).view(1, 1),\n                            metadata={},\n                        ).to(pipeline.device)\n                        outputs = pipeline.model.get_outputs(bundle)\n\n                        q = tf.SO3.from_matrix(train_cameras[i].camera_to_worlds[:3, :3].numpy(force=True)).wxyz\n                        # calculate distance between two quaternions\n                        rot_dist = 1 - np.dot(q, cam_quat) ** 2\n                        pos_dist = torch.norm(train_cam_pos - cam_pos)\n                        dist = 0.3 * rot_dist + 0.7 * pos_dist\n\n                        if true_max_dist == -1 or dist < true_max_dist:\n                            true_max_dist = dist\n                            true_max_idx = i\n\n                        if outputs[\"depth\"][0] < torch.norm(cam_pos - train_cam_pos).item():\n                            continue\n\n                        if check_occlusions and (max_dist == -1 or dist < max_dist):\n                            max_dist = dist\n                            max_idx = i\n\n                    if max_idx == -1:\n                        max_idx = true_max_idx\n\n                if crop_data is not None:\n                    with renderers.background_color_override_context(\n                        crop_data.background_color.to(pipeline.device)\n                    ), torch.no_grad():\n                        outputs = pipeline.model.get_outputs_for_camera(\n                            cameras[camera_idx : camera_idx + 1], obb_box=obb_box\n                        )\n                else:\n                    with torch.no_grad():\n                        outputs = pipeline.model.get_outputs_for_camera(\n                            cameras[camera_idx : camera_idx + 1], obb_box=obb_box\n                        )\n                        if rendered_output_names is not None and \"rgba\" in rendered_output_names:\n                            rgba = pipeline.model.get_rgba_image(outputs=outputs, output_name=\"rgb\")\n                            outputs[\"rgba\"] = rgba\n\n                render_image = []\n                for rendered_output_name in rendered_output_names:\n                    if rendered_output_name not in outputs:\n                        CONSOLE.rule(\"Error\", style=\"red\")\n                        CONSOLE.print(f\"Could not find {rendered_output_name} in the model outputs\", justify=\"center\")\n                        CONSOLE.print(\n                            f\"Please set --rendered_output_name to one of: {outputs.keys()}\", justify=\"center\"\n                        )\n                        sys.exit(1)\n                    output_image = outputs[rendered_output_name]\n                    is_depth = rendered_output_name.find(\"depth\") != -1\n                    if is_depth:\n                        output_image = (\n                            colormaps.apply_depth_colormap(\n                                output_image,\n                                accumulation=outputs[\"accumulation\"],\n                                near_plane=depth_near_plane,\n                                far_plane=depth_far_plane,\n                                colormap_options=colormap_options,\n                            )\n                            .cpu()\n                            .numpy()\n                        )\n                    elif rendered_output_name == \"rgba\":\n                        output_image = output_image.detach().cpu().numpy()\n                    else:\n                        output_image = (\n                            colormaps.apply_colormap(\n                                image=output_image,\n                                colormap_options=colormap_options,\n                            )\n                            .cpu()\n                            .numpy()\n                        )\n                    render_image.append(output_image)\n\n                # Add closest training image to the right of the rendered image\n                if render_nearest_camera:\n                    assert train_dataset is not None\n                    assert train_cameras is not None\n                    img = train_dataset.get_image_float32(max_idx)\n                    height = cameras.image_height[0]\n                    # maintain the resolution of the img to calculate the width from the height\n                    width = int(img.shape[1] * (height / img.shape[0]))\n                    resized_image = torch.nn.functional.interpolate(\n                        img.permute(2, 0, 1)[None], size=(int(height), int(width))\n                    )[0].permute(1, 2, 0)\n                    resized_image = (\n                        colormaps.apply_colormap(\n                            image=resized_image,\n                            colormap_options=colormap_options,\n                        )\n                        .cpu()\n                        .numpy()\n                    )\n                    render_image.append(resized_image)\n\n                render_image = np.concatenate(render_image, axis=1)\n                if output_format == \"images\":\n                    if image_format == \"png\":\n                        media.write_image(output_image_dir / f\"{camera_idx:05d}.png\", render_image, fmt=\"png\")\n                    if image_format == \"jpeg\":\n                        media.write_image(\n                            output_image_dir / f\"{camera_idx:05d}.jpg\", render_image, fmt=\"jpeg\", quality=jpeg_quality\n                        )\n                if output_format == \"video\":\n                    if writer is None:\n                        render_width = int(render_image.shape[1])\n                        render_height = int(render_image.shape[0])\n                        writer = stack.enter_context(\n                            media.VideoWriter(\n                                path=output_filename,\n                                shape=(render_height, render_width),\n                                fps=fps,\n                            )\n                        )\n                    writer.add_image(render_image)\n\n    table = Table(\n        title=None,\n        show_header=False,\n        box=box.MINIMAL,\n        title_style=style.Style(bold=True),\n    )\n    if output_format == \"video\":\n        if cameras.camera_type[0] == CameraType.EQUIRECTANGULAR.value:\n            CONSOLE.print(\"Adding spherical camera data\")\n            insert_spherical_metadata_into_file(output_filename)\n        table.add_row(\"Video\", str(output_filename))\n    else:\n        table.add_row(\"Images\", str(output_image_dir))\n    CONSOLE.print(Panel(table, title=\"[bold][green]:tada: Render Complete :tada:[/bold]\", expand=False))\n\n\ndef insert_spherical_metadata_into_file(\n    output_filename: Path,\n) -> None:\n    \"\"\"Inserts spherical metadata into MP4 video file in-place.\n    Args:\n        output_filename: Name of the (input and) output file.\n    \"\"\"\n    # NOTE:\n    # because we didn't use faststart, the moov atom will be at the end;\n    # to insert our metadata, we need to find (skip atoms until we get to) moov.\n    # we should have 0x00000020 ftyp, then 0x00000008 free, then variable mdat.\n    spherical_uuid = b\"\\xff\\xcc\\x82\\x63\\xf8\\x55\\x4a\\x93\\x88\\x14\\x58\\x7a\\x02\\x52\\x1f\\xdd\"\n    spherical_metadata = bytes(\n        \"\"\"<rdf:SphericalVideo\nxmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'\nxmlns:GSpherical='http://ns.google.com/videos/1.0/spherical/'>\n<GSpherical:ProjectionType>equirectangular</GSpherical:ProjectionType>\n<GSpherical:Spherical>True</GSpherical:Spherical>\n<GSpherical:Stitched>True</GSpherical:Stitched>\n<GSpherical:StitchingSoftware>nerfstudio</GSpherical:StitchingSoftware>\n</rdf:SphericalVideo>\"\"\",\n        \"utf-8\",\n    )\n    insert_size = len(spherical_metadata) + 8 + 16\n    with open(output_filename, mode=\"r+b\") as mp4file:\n        try:\n            # get file size\n            mp4file_size = os.stat(output_filename).st_size\n\n            # find moov container (probably after ftyp, free, mdat)\n            while True:\n                pos = mp4file.tell()\n                size, tag = struct.unpack(\">I4s\", mp4file.read(8))\n                if tag == b\"moov\":\n                    break\n                mp4file.seek(pos + size)\n            # if moov isn't at end, bail\n            if pos + size != mp4file_size:\n                # TODO: to support faststart, rewrite all stco offsets\n                raise Exception(\"moov container not at end of file\")\n            # go back and write inserted size\n            mp4file.seek(pos)\n            mp4file.write(struct.pack(\">I\", size + insert_size))\n            # go inside moov\n            mp4file.seek(pos + 8)\n            # find trak container (probably after mvhd)\n            while True:\n                pos = mp4file.tell()\n                size, tag = struct.unpack(\">I4s\", mp4file.read(8))\n                if tag == b\"trak\":\n                    break\n                mp4file.seek(pos + size)\n            # go back and write inserted size\n            mp4file.seek(pos)\n            mp4file.write(struct.pack(\">I\", size + insert_size))\n            # we need to read everything from end of trak to end of file in order to insert\n            # TODO: to support faststart, make more efficient (may load nearly all data)\n            mp4file.seek(pos + size)\n            rest_of_file = mp4file.read(mp4file_size - pos - size)\n            # go to end of trak (again)\n            mp4file.seek(pos + size)\n            # insert our uuid atom with spherical metadata\n            mp4file.write(struct.pack(\">I4s16s\", insert_size, b\"uuid\", spherical_uuid))\n            mp4file.write(spherical_metadata)\n            # write rest of file\n            mp4file.write(rest_of_file)\n        finally:\n            mp4file.close()\n\n\n@dataclass\nclass CropData:\n    \"\"\"Data for cropping an image.\"\"\"\n\n    background_color: Float[Tensor, \"3\"] = torch.Tensor([0.0, 0.0, 0.0])\n    \"\"\"background color\"\"\"\n    obb: OrientedBox = field(default_factory=lambda: OrientedBox(R=torch.eye(3), T=torch.zeros(3), S=torch.ones(3) * 2))\n    \"\"\"Oriented box representing the crop region\"\"\"\n\n    # properties for backwards-compatibility interface\n    @property\n    def center(self):\n        return self.obb.T\n\n    @property\n    def scale(self):\n        return self.obb.S\n\n\ndef get_crop_from_json(camera_json: Dict[str, Any]) -> Optional[CropData]:\n    \"\"\"Load crop data from a camera path JSON\n\n    args:\n        camera_json: camera path data\n    returns:\n        Crop data\n    \"\"\"\n    if \"crop\" not in camera_json or camera_json[\"crop\"] is None:\n        return None\n    bg_color = camera_json[\"crop\"][\"crop_bg_color\"]\n    center = camera_json[\"crop\"][\"crop_center\"]\n    scale = camera_json[\"crop\"][\"crop_scale\"]\n    rot = (0.0, 0.0, 0.0) if \"crop_rot\" not in camera_json[\"crop\"] else tuple(camera_json[\"crop\"][\"crop_rot\"])\n    assert len(center) == 3\n    assert len(scale) == 3\n    assert len(rot) == 3\n    return CropData(\n        background_color=torch.Tensor([bg_color[\"r\"] / 255.0, bg_color[\"g\"] / 255.0, bg_color[\"b\"] / 255.0]),\n        obb=OrientedBox.from_params(center, rot, scale),\n    )\n\n\n@dataclass\nclass BaseRender:\n    \"\"\"Base class for rendering.\"\"\"\n\n    load_config: Path\n    \"\"\"Path to config YAML file.\"\"\"\n    output_path: Path = Path(\"renders/output.mp4\")\n    \"\"\"Path to output video file.\"\"\"\n    image_format: Literal[\"jpeg\", \"png\"] = \"jpeg\"\n    \"\"\"Image format\"\"\"\n    jpeg_quality: int = 100\n    \"\"\"JPEG quality\"\"\"\n    downscale_factor: float = 1.0\n    \"\"\"Scaling factor to apply to the camera image resolution.\"\"\"\n    eval_num_rays_per_chunk: Optional[int] = None\n    \"\"\"Specifies number of rays per chunk during eval. If None, use the value in the config file.\"\"\"\n    rendered_output_names: List[str] = field(default_factory=lambda: [\"rgb\"])\n    \"\"\"Name of the renderer outputs to use. rgb, depth, etc. concatenates them along y axis\"\"\"\n    depth_near_plane: Optional[float] = None\n    \"\"\"Closest depth to consider when using the colormap for depth. If None, use min value.\"\"\"\n    depth_far_plane: Optional[float] = None\n    \"\"\"Furthest depth to consider when using the colormap for depth. If None, use max value.\"\"\"\n    colormap_options: colormaps.ColormapOptions = colormaps.ColormapOptions()\n    \"\"\"Colormap options.\"\"\"\n    render_nearest_camera: bool = False\n    \"\"\"Whether to render the nearest training camera to the rendered camera.\"\"\"\n    check_occlusions: bool = False\n    \"\"\"If true, checks line-of-sight occlusions when computing camera distance and rejects cameras not visible to each other\"\"\"\n    camera_idx: Optional[int] = None\n    \"\"\"Index of the training camera to render.\"\"\"\n\n\n@dataclass\nclass RenderCameraPath(BaseRender):\n    \"\"\"Render a camera path generated by the viewer or blender add-on.\"\"\"\n\n    camera_path_filename: Path = Path(\"camera_path.json\")\n    \"\"\"Filename of the camera path to render.\"\"\"\n    output_format: Literal[\"images\", \"video\"] = \"video\"\n    \"\"\"How to save output data.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        _, pipeline, _, _ = eval_setup(\n            self.load_config,\n            eval_num_rays_per_chunk=self.eval_num_rays_per_chunk,\n            test_mode=\"inference\",\n        )\n\n        install_checks.check_ffmpeg_installed()\n\n        with open(self.camera_path_filename, \"r\", encoding=\"utf-8\") as f:\n            camera_path = json.load(f)\n        seconds = camera_path[\"seconds\"]\n        crop_data = get_crop_from_json(camera_path)\n        camera_path = get_path_from_json(camera_path)\n\n        if (\n            camera_path.camera_type[0] == CameraType.OMNIDIRECTIONALSTEREO_L.value\n            or camera_path.camera_type[0] == CameraType.VR180_L.value\n        ):\n            # temp folder for writing left and right view renders\n            temp_folder_path = self.output_path.parent / (self.output_path.stem + \"_temp\")\n\n            Path(temp_folder_path).mkdir(parents=True, exist_ok=True)\n            left_eye_path = temp_folder_path / \"render_left.mp4\"\n\n            self.output_path = left_eye_path\n\n            if camera_path.camera_type[0] == CameraType.OMNIDIRECTIONALSTEREO_L.value:\n                CONSOLE.print(\"[bold green]:goggles: Omni-directional Stereo VR :goggles:\")\n            else:\n                CONSOLE.print(\"[bold green]:goggles: VR180 :goggles:\")\n\n            CONSOLE.print(\"Rendering left eye view\")\n\n        # add mp4 suffix to video output if none is specified\n        if self.output_format == \"video\" and str(self.output_path.suffix) == \"\":\n            self.output_path = self.output_path.with_suffix(\".mp4\")\n\n        if self.camera_idx is not None:\n            camera_path.metadata = {\"cam_idx\": self.camera_idx}\n\n        _render_trajectory_video(\n            pipeline,\n            camera_path,\n            output_filename=self.output_path,\n            rendered_output_names=self.rendered_output_names,\n            rendered_resolution_scaling_factor=1.0 / self.downscale_factor,\n            crop_data=crop_data,\n            seconds=seconds,\n            output_format=self.output_format,\n            image_format=self.image_format,\n            jpeg_quality=self.jpeg_quality,\n            depth_near_plane=self.depth_near_plane,\n            depth_far_plane=self.depth_far_plane,\n            colormap_options=self.colormap_options,\n            render_nearest_camera=self.render_nearest_camera,\n            check_occlusions=self.check_occlusions,\n        )\n\n        if (\n            camera_path.camera_type[0] == CameraType.OMNIDIRECTIONALSTEREO_L.value\n            or camera_path.camera_type[0] == CameraType.VR180_L.value\n        ):\n            # declare paths for left and right renders\n\n            left_eye_path = self.output_path\n            right_eye_path = left_eye_path.parent / \"render_right.mp4\"\n\n            self.output_path = right_eye_path\n\n            if camera_path.camera_type[0] == CameraType.OMNIDIRECTIONALSTEREO_L.value:\n                camera_path.camera_type[0] = CameraType.OMNIDIRECTIONALSTEREO_R.value\n            else:\n                camera_path.camera_type[0] = CameraType.VR180_R.value\n\n            CONSOLE.print(\"Rendering right eye view\")\n            _render_trajectory_video(\n                pipeline,\n                camera_path,\n                output_filename=self.output_path,\n                rendered_output_names=self.rendered_output_names,\n                rendered_resolution_scaling_factor=1.0 / self.downscale_factor,\n                crop_data=crop_data,\n                seconds=seconds,\n                output_format=self.output_format,\n                image_format=self.image_format,\n                jpeg_quality=self.jpeg_quality,\n                depth_near_plane=self.depth_near_plane,\n                depth_far_plane=self.depth_far_plane,\n                colormap_options=self.colormap_options,\n                render_nearest_camera=self.render_nearest_camera,\n                check_occlusions=self.check_occlusions,\n            )\n\n            self.output_path = Path(str(left_eye_path.parent)[:-5] + \".mp4\")\n\n            if camera_path.camera_type[0] == CameraType.OMNIDIRECTIONALSTEREO_R.value:\n                # stack the left and right eye renders vertically for ODS final output\n                ffmpeg_ods_command = \"\"\n                if self.output_format == \"video\":\n                    ffmpeg_ods_command = f'ffmpeg -y -i \"{left_eye_path}\" -i \"{right_eye_path}\" -filter_complex \"[0:v]pad=iw:2*ih[int];[int][1:v]overlay=0:h\" -c:v libx264 -crf 23 -preset veryfast \"{self.output_path}\"'\n                    run_command(ffmpeg_ods_command, verbose=False)\n                if self.output_format == \"images\":\n                    # create a folder for the stacked renders\n                    self.output_path = Path(str(left_eye_path.parent)[:-5])\n                    self.output_path.mkdir(parents=True, exist_ok=True)\n                    if self.image_format == \"png\":\n                        ffmpeg_ods_command = f'ffmpeg -y -pattern_type glob -i \"{str(left_eye_path.with_suffix(\"\") / \"*.png\")}\"  -pattern_type glob -i \"{str(right_eye_path.with_suffix(\"\") / \"*.png\")}\" -filter_complex vstack -start_number 0 \"{str(self.output_path)+\"//%05d.png\"}\"'\n                    elif self.image_format == \"jpeg\":\n                        ffmpeg_ods_command = f'ffmpeg -y -pattern_type glob -i \"{str(left_eye_path.with_suffix(\"\") / \"*.jpg\")}\"  -pattern_type glob -i \"{str(right_eye_path.with_suffix(\"\") / \"*.jpg\")}\" -filter_complex vstack -start_number 0 \"{str(self.output_path)+\"//%05d.jpg\"}\"'\n                    run_command(ffmpeg_ods_command, verbose=False)\n\n                # remove the temp files directory\n                if str(left_eye_path.parent)[-5:] == \"_temp\":\n                    shutil.rmtree(left_eye_path.parent, ignore_errors=True)\n                CONSOLE.print(\"[bold green]Final ODS Render Complete\")\n            else:\n                # stack the left and right eye renders horizontally for VR180 final output\n                self.output_path = Path(str(left_eye_path.parent)[:-5] + \".mp4\")\n                ffmpeg_vr180_command = \"\"\n                if self.output_format == \"video\":\n                    ffmpeg_vr180_command = f'ffmpeg -y -i \"{right_eye_path}\" -i \"{left_eye_path}\" -filter_complex \"[1:v]hstack=inputs=2\" -c:a copy \"{self.output_path}\"'\n                    run_command(ffmpeg_vr180_command, verbose=False)\n                if self.output_format == \"images\":\n                    # create a folder for the stacked renders\n                    self.output_path = Path(str(left_eye_path.parent)[:-5])\n                    self.output_path.mkdir(parents=True, exist_ok=True)\n                    if self.image_format == \"png\":\n                        ffmpeg_vr180_command = f'ffmpeg -y -pattern_type glob -i \"{str(left_eye_path.with_suffix(\"\") / \"*.png\")}\"  -pattern_type glob -i \"{str(right_eye_path.with_suffix(\"\") / \"*.png\")}\" -filter_complex hstack -start_number 0 \"{str(self.output_path)+\"//%05d.png\"}\"'\n                    elif self.image_format == \"jpeg\":\n                        ffmpeg_vr180_command = f'ffmpeg -y -pattern_type glob -i \"{str(left_eye_path.with_suffix(\"\") / \"*.jpg\")}\"  -pattern_type glob -i \"{str(right_eye_path.with_suffix(\"\") / \"*.jpg\")}\" -filter_complex hstack -start_number 0 \"{str(self.output_path)+\"//%05d.jpg\"}\"'\n                    run_command(ffmpeg_vr180_command, verbose=False)\n\n                # remove the temp files directory\n                if str(left_eye_path.parent)[-5:] == \"_temp\":\n                    shutil.rmtree(left_eye_path.parent, ignore_errors=True)\n                CONSOLE.print(\"[bold green]Final VR180 Render Complete\")\n\n\n@dataclass\nclass RenderInterpolated(BaseRender):\n    \"\"\"Render a trajectory that interpolates between training or eval dataset images.\"\"\"\n\n    pose_source: Literal[\"eval\", \"train\"] = \"eval\"\n    \"\"\"Pose source to render.\"\"\"\n    interpolation_steps: int = 10\n    \"\"\"Number of interpolation steps between eval dataset cameras.\"\"\"\n    order_poses: bool = False\n    \"\"\"Whether to order camera poses by proximity.\"\"\"\n    frame_rate: int = 24\n    \"\"\"Frame rate of the output video.\"\"\"\n    output_format: Literal[\"images\", \"video\"] = \"video\"\n    \"\"\"How to save output data.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        _, pipeline, _, _ = eval_setup(\n            self.load_config,\n            eval_num_rays_per_chunk=self.eval_num_rays_per_chunk,\n            test_mode=\"test\",\n        )\n\n        install_checks.check_ffmpeg_installed()\n\n        if self.pose_source == \"eval\":\n            assert pipeline.datamanager.eval_dataset is not None\n            cameras = pipeline.datamanager.eval_dataset.cameras\n        else:\n            assert pipeline.datamanager.train_dataset is not None\n            cameras = pipeline.datamanager.train_dataset.cameras\n\n        seconds = self.interpolation_steps * len(cameras) / self.frame_rate\n        camera_path = get_interpolated_camera_path(\n            cameras=cameras,\n            steps=self.interpolation_steps,\n            order_poses=self.order_poses,\n        )\n\n        if self.camera_idx is not None:\n            camera_path.metadata = {\"cam_idx\": self.camera_idx}\n\n        _render_trajectory_video(\n            pipeline,\n            camera_path,\n            output_filename=self.output_path,\n            rendered_output_names=self.rendered_output_names,\n            rendered_resolution_scaling_factor=1.0 / self.downscale_factor,\n            seconds=seconds,\n            output_format=self.output_format,\n            image_format=self.image_format,\n            depth_near_plane=self.depth_near_plane,\n            depth_far_plane=self.depth_far_plane,\n            colormap_options=self.colormap_options,\n            render_nearest_camera=self.render_nearest_camera,\n            check_occlusions=self.check_occlusions,\n        )\n\n\n@dataclass\nclass SpiralRender(BaseRender):\n    \"\"\"Render a spiral trajectory (often not great).\"\"\"\n\n    seconds: float = 3.0\n    \"\"\"How long the video should be.\"\"\"\n    output_format: Literal[\"images\", \"video\"] = \"video\"\n    \"\"\"How to save output data.\"\"\"\n    frame_rate: int = 24\n    \"\"\"Frame rate of the output video (only for interpolate trajectory).\"\"\"\n    radius: float = 0.1\n    \"\"\"Radius of the spiral.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        _, pipeline, _, _ = eval_setup(\n            self.load_config,\n            eval_num_rays_per_chunk=self.eval_num_rays_per_chunk,\n            test_mode=\"test\",\n        )\n\n        install_checks.check_ffmpeg_installed()\n\n        assert isinstance(\n            pipeline.datamanager,\n            (\n                VanillaDataManager,\n                ParallelDataManager,\n                RandomCamerasDataManager,\n            ),\n        )\n        steps = int(self.frame_rate * self.seconds)\n        camera_start, _ = pipeline.datamanager.eval_dataloader.get_camera(image_idx=0)\n        camera_path = get_spiral_path(camera_start, steps=steps, radius=self.radius)\n\n        if self.camera_idx is not None:\n            camera_path.metadata = {\"cam_idx\": self.camera_idx}\n\n        _render_trajectory_video(\n            pipeline,\n            camera_path,\n            output_filename=self.output_path,\n            rendered_output_names=self.rendered_output_names,\n            rendered_resolution_scaling_factor=1.0 / self.downscale_factor,\n            seconds=self.seconds,\n            output_format=self.output_format,\n            image_format=self.image_format,\n            depth_near_plane=self.depth_near_plane,\n            depth_far_plane=self.depth_far_plane,\n            colormap_options=self.colormap_options,\n            render_nearest_camera=self.render_nearest_camera,\n            check_occlusions=self.check_occlusions,\n        )\n\n\n@contextmanager\ndef _disable_datamanager_setup(cls):\n    \"\"\"\n    Disables setup_train or setup_eval for faster initialization.\n    \"\"\"\n    old_setup_train = getattr(cls, \"setup_train\")\n    old_setup_eval = getattr(cls, \"setup_eval\")\n    setattr(cls, \"setup_train\", lambda *args, **kwargs: None)\n    setattr(cls, \"setup_eval\", lambda *args, **kwargs: None)\n    yield cls\n    setattr(cls, \"setup_train\", old_setup_train)\n    setattr(cls, \"setup_eval\", old_setup_eval)\n\n\n@dataclass\nclass DatasetRender(BaseRender):\n    \"\"\"Render all images in the dataset.\"\"\"\n\n    output_path: Path = Path(\"renders\")\n    \"\"\"Path to output video file.\"\"\"\n    data: Optional[Path] = None\n    \"\"\"Override path to the dataset.\"\"\"\n    downscale_factor: Optional[float] = None\n    \"\"\"Scaling factor to apply to the camera image resolution.\"\"\"\n    split: Literal[\"train\", \"val\", \"test\", \"train+test\"] = \"test\"\n    \"\"\"Split to render.\"\"\"\n    rendered_output_names: Optional[List[str]] = field(default_factory=lambda: None)\n    \"\"\"Name of the renderer outputs to use. rgb, depth, raw-depth, gt-rgb etc. By default all outputs are rendered.\"\"\"\n    lang_positives: Optional[str] = field(default_factory=lambda: None)\n    lang_negatives: Optional[str] = field(default_factory=lambda: None)\n\n    def main(self):\n        config: TrainerConfig\n\n        def update_config(config: TrainerConfig) -> TrainerConfig:\n            data_manager_config = config.pipeline.datamanager\n            assert isinstance(data_manager_config, (VanillaDataManagerConfig, FullImageDatamanagerConfig))\n            data_manager_config.eval_num_images_to_sample_from = -1\n            data_manager_config.eval_num_times_to_repeat_images = -1\n            if isinstance(data_manager_config, VanillaDataManagerConfig):\n                data_manager_config.train_num_images_to_sample_from = -1\n                data_manager_config.train_num_times_to_repeat_images = -1\n            if self.data is not None:\n                data_manager_config.data = self.data\n            if self.downscale_factor is not None:\n                assert hasattr(data_manager_config.dataparser, \"downscale_factor\")\n                setattr(data_manager_config.dataparser, \"downscale_factor\", self.downscale_factor)\n            return config\n\n        config, pipeline, _, _ = eval_setup(\n            self.load_config,\n            eval_num_rays_per_chunk=self.eval_num_rays_per_chunk,\n            test_mode=\"inference\",\n            update_config_callback=update_config,\n        )\n        \n\n        data_manager_config = config.pipeline.datamanager\n        assert isinstance(data_manager_config, (VanillaDataManagerConfig, FullImageDatamanagerConfig))\n\n        for split in self.split.split(\"+\"):\n            datamanager: VanillaDataManager\n            dataset: Dataset\n            if split == \"train\":\n                with _disable_datamanager_setup(data_manager_config._target):  # pylint: disable=protected-access\n                    datamanager = data_manager_config.setup(test_mode=\"test\", device=pipeline.device)\n\n                dataset = datamanager.train_dataset\n                dataparser_outputs = getattr(dataset, \"_dataparser_outputs\", datamanager.train_dataparser_outputs)\n            else:\n                with _disable_datamanager_setup(data_manager_config._target):  # pylint: disable=protected-access\n                    datamanager = data_manager_config.setup(test_mode=split, device=pipeline.device)\n\n                dataset = datamanager.eval_dataset\n                dataparser_outputs = getattr(dataset, \"_dataparser_outputs\", None)\n                if dataparser_outputs is None:\n                    dataparser_outputs = datamanager.dataparser.get_dataparser_outputs(split=datamanager.test_split)\n            dataloader = FixedIndicesEvalDataloader(\n                input_dataset=dataset,\n                device=datamanager.device,\n                num_workers=datamanager.world_size * 4,\n            )\n            images_root = Path(os.path.commonpath(dataparser_outputs.image_filenames))\n            with Progress(\n                TextColumn(f\":movie_camera: Rendering split {split} :movie_camera:\"),\n                BarColumn(),\n                TaskProgressColumn(\n                    text_format=\"[progress.percentage]{task.completed}/{task.total:>.0f}({task.percentage:>3.1f}%)\",\n                    show_speed=True,\n                ),\n                ItersPerSecColumn(suffix=\"fps\"),\n                TimeRemainingColumn(elapsed_when_finished=False, compact=False),\n                TimeElapsedColumn(),\n            ) as progress:\n                for camera_idx, (camera, batch) in enumerate(progress.track(dataloader, total=len(dataset))):\n                    with torch.no_grad():\n                        outputs = pipeline.model.get_outputs_for_camera(camera)\n                        if self.rendered_output_names is not None and \"rgba\" in self.rendered_output_names:\n                            rgba = pipeline.model.get_rgba_image(outputs=outputs, output_name=\"rgb\")\n                            outputs[\"rgba\"] = rgba\n\n                    gt_batch = batch.copy()\n                    gt_batch[\"rgb\"] = gt_batch.pop(\"image\")\n                    all_outputs = (\n                        list(outputs.keys())\n                        + [f\"raw-{x}\" for x in outputs.keys()]\n                        + [f\"gt-{x}\" for x in gt_batch.keys()]\n                        + [f\"raw-gt-{x}\" for x in gt_batch.keys()]\n                    )\n                    rendered_output_names = self.rendered_output_names\n                    if rendered_output_names is None:\n                        rendered_output_names = [\"gt-rgb\"] + list(outputs.keys())\n                    for rendered_output_name in rendered_output_names:\n                        if rendered_output_name not in all_outputs:\n                            CONSOLE.rule(\"Error\", style=\"red\")\n                            CONSOLE.print(\n                                f\"Could not find {rendered_output_name} in the model outputs\", justify=\"center\"\n                            )\n                            CONSOLE.print(\n                                f\"Please set --rendered-output-name to one of: {all_outputs}\", justify=\"center\"\n                            )\n                            sys.exit(1)\n\n                        is_raw = False\n                        is_depth = rendered_output_name.find(\"depth\") != -1\n                        image_name = f\"{camera_idx:05d}\"\n\n                        # Try to get the original filename\n                        image_name = dataparser_outputs.image_filenames[camera_idx].relative_to(images_root)\n\n                        output_path = self.output_path / split / rendered_output_name / image_name\n                        output_path.parent.mkdir(exist_ok=True, parents=True)\n\n                        output_name = rendered_output_name\n                        if output_name.startswith(\"raw-\"):\n                            output_name = output_name[4:]\n                            is_raw = True\n                            if output_name.startswith(\"gt-\"):\n                                output_name = output_name[3:]\n                                output_image = gt_batch[output_name]\n                            else:\n                                output_image = outputs[output_name]\n                                if is_depth:\n                                    # Divide by the dataparser scale factor\n                                    output_image.div_(dataparser_outputs.dataparser_scale)\n                        else:\n                            if output_name.startswith(\"gt-\"):\n                                output_name = output_name[3:]\n                                output_image = gt_batch[output_name]\n                            else:\n                                output_image = outputs[output_name]\n\n                        # Map to color spaces / numpy\n                        if is_raw:\n                            output_image = output_image.cpu().numpy()\n                        elif output_name == \"rgba\":\n                            output_image = output_image.detach().cpu().numpy()\n                        elif is_depth:\n                            output_image = (\n                                colormaps.apply_depth_colormap(\n                                    output_image,\n                                    accumulation=outputs[\"accumulation\"],\n                                    near_plane=self.depth_near_plane,\n                                    far_plane=self.depth_far_plane,\n                                    colormap_options=self.colormap_options,\n                                )\n                                .cpu()\n                                .numpy()\n                            )\n                        else:\n                            output_image = (\n                                colormaps.apply_colormap(\n                                    image=output_image,\n                                    colormap_options=self.colormap_options,\n                                )\n                                .cpu()\n                                .numpy()\n                            )\n\n                        # Save to file\n                        if is_raw:\n                            with gzip.open(output_path.with_suffix(\".npy.gz\"), \"wb\") as f:\n                                np.save(f, output_image)\n                        elif self.image_format == \"png\":\n                            media.write_image(output_path.with_suffix(\".png\"), output_image, fmt=\"png\")\n                        elif self.image_format == \"jpeg\":\n                            media.write_image(\n                                output_path.with_suffix(\".jpg\"), output_image, fmt=\"jpeg\", quality=self.jpeg_quality\n                            )\n                        else:\n                            raise ValueError(f\"Unknown image format {self.image_format}\")\n\n        table = Table(\n            title=None,\n            show_header=False,\n            box=box.MINIMAL,\n            title_style=style.Style(bold=True),\n        )\n        for split in self.split.split(\"+\"):\n            table.add_row(f\"Outputs {split}\", str(self.output_path / split))\n        CONSOLE.print(Panel(table, title=\"[bold][green]:tada: Render on split {} Complete :tada:[/bold]\", expand=False))\n\n\nCommands = tyro.conf.FlagConversionOff[\n    Union[\n        Annotated[RenderCameraPath, tyro.conf.subcommand(name=\"camera-path\")],\n        Annotated[RenderInterpolated, tyro.conf.subcommand(name=\"interpolate\")],\n        Annotated[SpiralRender, tyro.conf.subcommand(name=\"spiral\")],\n        Annotated[DatasetRender, tyro.conf.subcommand(name=\"dataset\")],\n    ]\n]\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(Commands).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n\ndef get_parser_fn():\n    \"\"\"Get the parser function for the sphinx docs.\"\"\"\n    return tyro.extras.get_parser(Commands)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/texture.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nScript to texture an existing mesh file.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Literal, Optional\n\nimport tyro\n\nfrom nerfstudio.exporter import texture_utils\nfrom nerfstudio.exporter.exporter_utils import get_mesh_from_filename\nfrom nerfstudio.utils.eval_utils import eval_setup\n\n\n@dataclass\nclass TextureMesh:\n    \"\"\"\n    Export a textured mesh with color computed from the NeRF.\n    \"\"\"\n\n    load_config: Path\n    \"\"\"Path to the config YAML file.\"\"\"\n    output_dir: Path\n    \"\"\"Path to the output directory.\"\"\"\n    input_mesh_filename: Path\n    \"\"\"Mesh filename to texture.\"\"\"\n    px_per_uv_triangle: int = 4\n    \"\"\"Number of pixels per UV square.\"\"\"\n    unwrap_method: Literal[\"xatlas\", \"custom\"] = \"xatlas\"\n    \"\"\"The method to use for unwrapping the mesh.\"\"\"\n    num_pixels_per_side: int = 2048\n    \"\"\"If using xatlas for unwrapping, the pixels per side of the texture image.\"\"\"\n    target_num_faces: Optional[int] = 50000\n    \"\"\"Target number of faces for the mesh to texture.\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Export textured mesh\"\"\"\n\n        if not self.output_dir.exists():\n            self.output_dir.mkdir(parents=True)\n\n        # load the Mesh\n        mesh = get_mesh_from_filename(str(self.input_mesh_filename), target_num_faces=self.target_num_faces)\n\n        # load the Pipeline\n        _, pipeline, _, _ = eval_setup(self.load_config, test_mode=\"inference\")\n\n        # texture the mesh with NeRF and export to a mesh.obj file\n        # and a material and texture file\n        texture_utils.export_textured_mesh(\n            mesh=mesh,\n            pipeline=pipeline,\n            output_dir=self.output_dir,\n            px_per_uv_triangle=self.px_per_uv_triangle,\n            unwrap_method=self.unwrap_method,\n            num_pixels_per_side=self.num_pixels_per_side,\n        )\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(tyro.conf.FlagConversionOff[TextureMesh]).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n# For sphinx docs\nget_parser_fn = lambda: tyro.extras.get_parser(TextureMesh)  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/train.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"Train a radiance field with nerfstudio.\nFor real captures, we recommend using the [bright_yellow]nerfacto[/bright_yellow] model.\n\nNerfstudio allows for customizing your training and eval configs from the CLI in a powerful way, but there are some\nthings to understand.\n\nThe most demonstrative and helpful example of the CLI structure is the difference in output between the following\ncommands:\n\n    ns-train -h\n    ns-train nerfacto -h nerfstudio-data\n    ns-train nerfacto nerfstudio-data -h\n\nIn each of these examples, the -h applies to the previous subcommand (ns-train, nerfacto, and nerfstudio-data).\n\nIn the first example, we get the help menu for the ns-train script.\nIn the second example, we get the help menu for the nerfacto model.\nIn the third example, we get the help menu for the nerfstudio-data dataparser.\n\nWith our scripts, your arguments will apply to the preceding subcommand in your command, and thus where you put your\narguments matters! Any optional arguments you discover from running\n\n    ns-train nerfacto -h nerfstudio-data\n\nneed to come directly after the nerfacto subcommand, since these optional arguments only belong to the nerfacto\nsubcommand:\n\n    ns-train nerfacto {nerfacto optional args} nerfstudio-data\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\nimport socket\nimport traceback\nfrom datetime import timedelta\nfrom typing import Any, Callable, Literal, Optional\n\nimport numpy as np\nimport torch\nimport torch.distributed as dist\nimport torch.multiprocessing as mp\nimport tyro\nimport yaml\n\nfrom nerfstudio.configs.config_utils import convert_markup_to_ansi\nfrom nerfstudio.configs.method_configs import AnnotatedBaseConfigUnion\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.utils import comms, profiler\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nDEFAULT_TIMEOUT = timedelta(minutes=30)\n\n# speedup for when input size to model doesn't change (much)\ntorch.backends.cudnn.benchmark = True  # type: ignore\n\n\ndef _find_free_port() -> str:\n    \"\"\"Finds a free port.\"\"\"\n    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n    sock.bind((\"\", 0))\n    port = sock.getsockname()[1]\n    sock.close()\n    return port\n\n\ndef _set_random_seed(seed) -> None:\n    \"\"\"Set randomness seed in torch and numpy\"\"\"\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n\n\ndef train_loop(local_rank: int, world_size: int, config: TrainerConfig, global_rank: int = 0):\n    \"\"\"Main training function that sets up and runs the trainer per process\n\n    Args:\n        local_rank: current rank of process\n        world_size: total number of gpus available\n        config: config file specifying training regimen\n    \"\"\"\n    _set_random_seed(config.machine.seed + global_rank)\n    trainer = config.setup(local_rank=local_rank, world_size=world_size)\n    trainer.setup()\n    trainer.train()\n\n\ndef _distributed_worker(\n    local_rank: int,\n    main_func: Callable,\n    world_size: int,\n    num_devices_per_machine: int,\n    machine_rank: int,\n    dist_url: str,\n    config: TrainerConfig,\n    timeout: timedelta = DEFAULT_TIMEOUT,\n    device_type: Literal[\"cpu\", \"cuda\", \"mps\"] = \"cuda\",\n) -> Any:\n    \"\"\"Spawned distributed worker that handles the initialization of process group and handles the\n       training process on multiple processes.\n\n    Args:\n        local_rank: Current rank of process.\n        main_func: Function that will be called by the distributed workers.\n        world_size: Total number of gpus available.\n        num_devices_per_machine: Number of GPUs per machine.\n        machine_rank: Rank of this machine.\n        dist_url: URL to connect to for distributed jobs, including protocol\n            E.g., \"tcp://127.0.0.1:8686\".\n            It can be set to \"auto\" to automatically select a free port on localhost.\n        config: TrainerConfig specifying training regimen.\n        timeout: Timeout of the distributed workers.\n\n    Raises:\n        e: Exception in initializing the process group\n\n    Returns:\n        Any: TODO: determine the return type\n    \"\"\"\n    assert torch.cuda.is_available(), \"cuda is not available. Please check your installation.\"\n    global_rank = machine_rank * num_devices_per_machine + local_rank\n\n    dist.init_process_group(\n        backend=\"nccl\" if device_type == \"cuda\" else \"gloo\",\n        init_method=dist_url,\n        world_size=world_size,\n        rank=global_rank,\n        timeout=timeout,\n    )\n    assert comms.LOCAL_PROCESS_GROUP is None\n    num_machines = world_size // num_devices_per_machine\n    for i in range(num_machines):\n        ranks_on_i = list(range(i * num_devices_per_machine, (i + 1) * num_devices_per_machine))\n        pg = dist.new_group(ranks_on_i)\n        if i == machine_rank:\n            comms.LOCAL_PROCESS_GROUP = pg\n\n    assert num_devices_per_machine <= torch.cuda.device_count()\n    output = main_func(local_rank, world_size, config, global_rank)\n    comms.synchronize()\n    dist.destroy_process_group()\n    return output\n\n\ndef launch(\n    main_func: Callable,\n    num_devices_per_machine: int,\n    num_machines: int = 1,\n    machine_rank: int = 0,\n    dist_url: str = \"auto\",\n    config: Optional[TrainerConfig] = None,\n    timeout: timedelta = DEFAULT_TIMEOUT,\n    device_type: Literal[\"cpu\", \"cuda\", \"mps\"] = \"cuda\",\n) -> None:\n    \"\"\"Function that spawns multiple processes to call on main_func\n\n    Args:\n        main_func (Callable): function that will be called by the distributed workers\n        num_devices_per_machine (int): number of GPUs per machine\n        num_machines (int, optional): total number of machines\n        machine_rank (int, optional): rank of this machine.\n        dist_url (str, optional): url to connect to for distributed jobs.\n        config (TrainerConfig, optional): config file specifying training regimen.\n        timeout (timedelta, optional): timeout of the distributed workers.\n        device_type: type of device to use for training.\n    \"\"\"\n    assert config is not None\n    world_size = num_machines * num_devices_per_machine\n    if world_size == 0:\n        raise ValueError(\"world_size cannot be 0\")\n    elif world_size == 1:\n        # uses one process\n        try:\n            main_func(local_rank=0, world_size=world_size, config=config)\n        except KeyboardInterrupt:\n            # print the stack trace\n            CONSOLE.print(traceback.format_exc())\n        finally:\n            profiler.flush_profiler(config.logging)\n    elif world_size > 1:\n        # Using multiple gpus with multiple processes.\n        if dist_url == \"auto\":\n            assert num_machines == 1, \"dist_url=auto is not supported for multi-machine jobs.\"\n            port = _find_free_port()\n            dist_url = f\"tcp://127.0.0.1:{port}\"\n        if num_machines > 1 and dist_url.startswith(\"file://\"):\n            CONSOLE.log(\"file:// is not a reliable init_method in multi-machine jobs. Prefer tcp://\")\n\n        process_context = mp.spawn(\n            _distributed_worker,\n            nprocs=num_devices_per_machine,\n            join=False,\n            args=(main_func, world_size, num_devices_per_machine, machine_rank, dist_url, config, timeout, device_type),\n        )\n        # process_context won't be None because join=False, so it's okay to assert this\n        # for Pylance reasons\n        assert process_context is not None\n        try:\n            process_context.join()\n        except KeyboardInterrupt:\n            for i, process in enumerate(process_context.processes):\n                if process.is_alive():\n                    CONSOLE.log(f\"Terminating process {i}...\")\n                    process.terminate()\n                process.join()\n                CONSOLE.log(f\"Process {i} finished.\")\n        finally:\n            profiler.flush_profiler(config.logging)\n\n\ndef main(config: TrainerConfig) -> None:\n    \"\"\"Main function.\"\"\"\n\n    if config.data:\n        CONSOLE.log(\"Using --data alias for --data.pipeline.datamanager.data\")\n        config.pipeline.datamanager.data = config.data\n\n    if config.prompt:\n        CONSOLE.log(\"Using --prompt alias for --data.pipeline.model.prompt\")\n        config.pipeline.model.prompt = config.prompt\n\n    if config.load_config:\n        CONSOLE.log(f\"Loading pre-set config from: {config.load_config}\")\n        config = yaml.load(config.load_config.read_text(), Loader=yaml.Loader)\n\n    config.set_timestamp()\n\n    # print and save config\n    config.print_to_terminal()\n    config.save_config()\n\n    launch(\n        main_func=train_loop,\n        num_devices_per_machine=config.machine.num_devices,\n        device_type=config.machine.device_type,\n        num_machines=config.machine.num_machines,\n        machine_rank=config.machine.machine_rank,\n        dist_url=config.machine.dist_url,\n        config=config,\n    )\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    # Choose a base configuration and override values.\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    main(\n        tyro.cli(\n            AnnotatedBaseConfigUnion,\n            description=convert_markup_to_ansi(__doc__),\n        )\n    )\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/viewer/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/viewer/run_viewer.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#!/usr/bin/env python\n\"\"\"\nStarts viewer in eval mode.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport time\nfrom dataclasses import dataclass, field, fields\nfrom pathlib import Path\nfrom threading import Lock\nfrom typing import Literal\n\nimport tyro\n\nfrom nerfstudio.configs.base_config import ViewerConfig\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils import writer\nfrom nerfstudio.utils.eval_utils import eval_setup\nfrom nerfstudio.viewer.viewer import Viewer as ViewerState\nfrom nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState\n\n\n@dataclass\nclass ViewerConfigWithoutNumRays(ViewerConfig):\n    \"\"\"Configuration for viewer instantiation\"\"\"\n\n    num_rays_per_chunk: tyro.conf.Suppress[int] = -1\n\n    def as_viewer_config(self):\n        \"\"\"Converts the instance to ViewerConfig\"\"\"\n        return ViewerConfig(**{x.name: getattr(self, x.name) for x in fields(self)})\n\n\n@dataclass\nclass RunViewer:\n    \"\"\"Load a checkpoint and start the viewer.\"\"\"\n\n    load_config: Path\n    \"\"\"Path to config YAML file.\"\"\"\n    viewer: ViewerConfigWithoutNumRays = field(default_factory=ViewerConfigWithoutNumRays)\n    \"\"\"Viewer configuration\"\"\"\n    vis: Literal[\"viewer\", \"viewer_legacy\"] = \"viewer\"\n    \"\"\"Type of viewer\"\"\"\n\n    def main(self) -> None:\n        \"\"\"Main function.\"\"\"\n        config, pipeline, _, step = eval_setup(\n            self.load_config,\n            eval_num_rays_per_chunk=None,\n            test_mode=\"test\",\n        )\n        num_rays_per_chunk = config.viewer.num_rays_per_chunk\n        assert self.viewer.num_rays_per_chunk == -1\n        config.vis = self.vis\n        config.viewer = self.viewer.as_viewer_config()\n        config.viewer.num_rays_per_chunk = num_rays_per_chunk\n\n        _start_viewer(config, pipeline, step)\n\n    def save_checkpoint(self, *args, **kwargs):\n        \"\"\"\n        Mock method because we pass this instance to viewer_state.update_scene\n        \"\"\"\n\n\ndef _start_viewer(config: TrainerConfig, pipeline: Pipeline, step: int):\n    \"\"\"Starts the viewer\n\n    Args:\n        config: Configuration of pipeline to load\n        pipeline: Pipeline instance of which to load weights\n        step: Step at which the pipeline was saved\n    \"\"\"\n    base_dir = config.get_base_dir()\n    viewer_log_path = base_dir / config.viewer.relative_log_filename\n    banner_messages = None\n    viewer_state = None\n    viewer_callback_lock = Lock()\n    if config.vis == \"viewer_legacy\":\n        viewer_state = ViewerLegacyState(\n            config.viewer,\n            log_filename=viewer_log_path,\n            datapath=pipeline.datamanager.get_datapath(),\n            pipeline=pipeline,\n            train_lock=viewer_callback_lock,\n        )\n        banner_messages = [f\"Legacy viewer at: {viewer_state.viewer_url}\"]\n    if config.vis == \"viewer\":\n        viewer_state = ViewerState(\n            config.viewer,\n            log_filename=viewer_log_path,\n            datapath=pipeline.datamanager.get_datapath(),\n            pipeline=pipeline,\n            share=config.viewer.make_share_url,\n            train_lock=viewer_callback_lock,\n        )\n        banner_messages = viewer_state.viewer_info\n\n    # We don't need logging, but writer.GLOBAL_BUFFER needs to be populated\n    config.logging.local_writer.enable = False\n    writer.setup_local_writer(config.logging, max_iter=config.max_num_iterations, banner_messages=banner_messages)\n\n    assert viewer_state and pipeline.datamanager.train_dataset\n    viewer_state.init_scene(\n        train_dataset=pipeline.datamanager.train_dataset,\n        train_state=\"completed\",\n        eval_dataset=pipeline.datamanager.eval_dataset,\n    )\n    if isinstance(viewer_state, ViewerLegacyState):\n        viewer_state.viser_server.set_training_state(\"completed\")\n    viewer_state.update_scene(step=step)\n    while True:\n        time.sleep(0.01)\n\n\ndef entrypoint():\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(tyro.conf.FlagConversionOff[RunViewer]).main()\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n\n# For sphinx docs\nget_parser_fn = lambda: tyro.extras.get_parser(tyro.conf.FlagConversionOff[RunViewer])  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/scripts/viewer/sync_viser_message_defs.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Generate viser message definitions for TypeScript, by parsing Python dataclasses.\"\"\"\n\nimport json\nimport pathlib\nfrom datetime import datetime\n\nimport tyro\nfrom viser.infra import generate_typescript_interfaces\n\nfrom nerfstudio.viewer_legacy.viser import NerfstudioMessage\n\n\ndef main() -> None:\n    \"\"\"Generate viser message definitions for TypeScript, by parsing Python dataclasses.\"\"\"\n\n    # Generate typescript source.\n    defs = generate_typescript_interfaces(NerfstudioMessage)\n\n    # Write to file.\n    # Three parents from nerfstudio/scripts/viewer/sync_viser_message_defs.py:\n    # - nerfstudio/scripts/viewer/\n    # - nerfstudio/scripts/\n    # - nerfstudio/\n    target_path = pathlib.Path(__file__).absolute().parent.parent.parent / pathlib.Path(\n        \"viewer/app/src/modules/WebSocket/ViserMessages.tsx\"\n    )\n    assert target_path.exists()\n\n    old_defs = target_path.read_text(encoding=\"utf_8\")\n\n    if old_defs != defs:\n        target_path.write_text(defs, encoding=\"utf_8\")\n\n        with open(\"nerfstudio/viewer/app/package.json\", \"r\", encoding=\"utf_8\") as f:\n            data = json.load(f)\n\n        now = datetime.now()\n        data[\"version\"] = now.strftime(\"%y-%m-%d\") + \"-0\"\n\n        with open(\"nerfstudio/viewer/app/package.json\", \"w\", encoding=\"utf_8\") as f:\n            json.dump(data, f, indent=2)\n        print(f\"Wrote updates to {target_path}\")\n        print(f\"Current viewer version is now {data['version']}\")\n    else:\n        print(\"No update to messages.\")\n\n\ndef entrypoint() -> None:\n    \"\"\"Entrypoint for use with pyproject scripts.\"\"\"\n    # All entrypoints must currently be tyro CLIs.\n    tyro.cli(main)\n\n\nif __name__ == \"__main__\":\n    entrypoint()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/colormaps.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helper functions for visualizing outputs\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Literal, Optional\n\nimport matplotlib\nimport torch\nfrom jaxtyping import Bool, Float\nfrom torch import Tensor\n\nfrom nerfstudio.utils import colors\n\nColormaps = Literal[\"default\", \"turbo\", \"viridis\", \"magma\", \"inferno\", \"cividis\", \"gray\", \"pca\"]\n\n\n@dataclass(frozen=True)\nclass ColormapOptions:\n    \"\"\"Options for colormap\"\"\"\n\n    colormap: Colormaps = \"default\"\n    \"\"\" The colormap to use \"\"\"\n    normalize: bool = False\n    \"\"\" Whether to normalize the input tensor image \"\"\"\n    colormap_min: float = 0\n    \"\"\" Minimum value for the output colormap \"\"\"\n    colormap_max: float = 1\n    \"\"\" Maximum value for the output colormap \"\"\"\n    invert: bool = False\n    \"\"\" Whether to invert the output colormap \"\"\"\n\n\ndef apply_colormap(\n    image: Float[Tensor, \"*bs channels\"],\n    colormap_options: ColormapOptions = ColormapOptions(),\n    eps: float = 1e-9,\n) -> Float[Tensor, \"*bs rgb=3\"]:\n    \"\"\"\n    Applies a colormap to a tensor image.\n    If single channel, applies a colormap to the image.\n    If 3 channel, treats the channels as RGB.\n    If more than 3 channel, applies a PCA reduction on the dimensions to 3 channels\n\n    Args:\n        image: Input tensor image.\n        eps: Epsilon value for numerical stability.\n\n    Returns:\n        Tensor with the colormap applied.\n    \"\"\"\n\n    # default for rgb images\n    if image.shape[-1] == 3:\n        return image\n\n    # rendering depth outputs\n    if image.shape[-1] == 1 and torch.is_floating_point(image):\n        output = image\n        if colormap_options.normalize:\n            output = output - torch.min(output)\n            output = output / (torch.max(output) + eps)\n        output = (\n            output * (colormap_options.colormap_max - colormap_options.colormap_min) + colormap_options.colormap_min\n        )\n        output = torch.clip(output, 0, 1)\n        if colormap_options.invert:\n            output = 1 - output\n        return apply_float_colormap(output, colormap=colormap_options.colormap)\n\n    # rendering boolean outputs\n    if image.dtype == torch.bool:\n        return apply_boolean_colormap(image)\n\n    if image.shape[-1] > 3:\n        return apply_pca_colormap(image)\n\n    raise NotImplementedError\n\n\ndef apply_float_colormap(image: Float[Tensor, \"*bs 1\"], colormap: Colormaps = \"viridis\") -> Float[Tensor, \"*bs rgb=3\"]:\n    \"\"\"Convert single channel to a color image.\n\n    Args:\n        image: Single channel image.\n        colormap: Colormap for image.\n\n    Returns:\n        Tensor: Colored image with colors in [0, 1]\n    \"\"\"\n    if colormap == \"default\":\n        colormap = \"turbo\"\n\n    image = torch.nan_to_num(image, 0)\n    if colormap == \"gray\":\n        return image.repeat(1, 1, 3)\n    image_long = (image * 255).long()\n    image_long_min = torch.min(image_long)\n    image_long_max = torch.max(image_long)\n    assert image_long_min >= 0, f\"the min value is {image_long_min}\"\n    assert image_long_max <= 255, f\"the max value is {image_long_max}\"\n    return torch.tensor(matplotlib.colormaps[colormap].colors, device=image.device)[image_long[..., 0]]\n\n\ndef apply_depth_colormap(\n    depth: Float[Tensor, \"*bs 1\"],\n    accumulation: Optional[Float[Tensor, \"*bs 1\"]] = None,\n    near_plane: Optional[float] = None,\n    far_plane: Optional[float] = None,\n    colormap_options: ColormapOptions = ColormapOptions(),\n) -> Float[Tensor, \"*bs rgb=3\"]:\n    \"\"\"Converts a depth image to color for easier analysis.\n\n    Args:\n        depth: Depth image.\n        accumulation: Ray accumulation used for masking vis.\n        near_plane: Closest depth to consider. If None, use min image value.\n        far_plane: Furthest depth to consider. If None, use max image value.\n        colormap: Colormap to apply.\n\n    Returns:\n        Colored depth image with colors in [0, 1]\n    \"\"\"\n\n    near_plane = near_plane if near_plane is not None else float(torch.min(depth))\n    far_plane = far_plane if far_plane is not None else float(torch.max(depth))\n\n    depth = (depth - near_plane) / (far_plane - near_plane + 1e-10)\n    depth = torch.clip(depth, 0, 1)\n    # depth = torch.nan_to_num(depth, nan=0.0) # TODO(ethan): remove this\n\n    colored_image = apply_colormap(depth, colormap_options=colormap_options)\n\n    if accumulation is not None:\n        colored_image = colored_image * accumulation + (1 - accumulation)\n\n    return colored_image\n\n\ndef apply_boolean_colormap(\n    image: Bool[Tensor, \"*bs 1\"],\n    true_color: Float[Tensor, \"*bs rgb=3\"] = colors.WHITE,\n    false_color: Float[Tensor, \"*bs rgb=3\"] = colors.BLACK,\n) -> Float[Tensor, \"*bs rgb=3\"]:\n    \"\"\"Converts a depth image to color for easier analysis.\n\n    Args:\n        image: Boolean image.\n        true_color: Color to use for True.\n        false_color: Color to use for False.\n\n    Returns:\n        Colored boolean image\n    \"\"\"\n\n    colored_image = torch.ones(image.shape[:-1] + (3,))\n    colored_image[image[..., 0], :] = true_color\n    colored_image[~image[..., 0], :] = false_color\n    return colored_image\n\n\ndef apply_pca_colormap(\n    image: Float[Tensor, \"*bs dim\"], pca_mat: Optional[Float[Tensor, \"dim rgb=3\"]] = None, ignore_zeros=True\n) -> Float[Tensor, \"*bs rgb=3\"]:\n    \"\"\"Convert feature image to 3-channel RGB via PCA. The first three principle\n    components are used for the color channels, with outlier rejection per-channel\n\n    Args:\n        image: image of arbitrary vectors\n        pca_mat: an optional argument of the PCA matrix, shape (dim, 3)\n        ignore_zeros: whether to ignore zero values in the input image (they won't affect the PCA computation)\n\n    Returns:\n        Tensor: Colored image\n    \"\"\"\n    original_shape = image.shape\n    image = image.view(-1, image.shape[-1])\n    if ignore_zeros:\n        valids = (image.abs().amax(dim=-1)) > 0\n    else:\n        valids = torch.ones(image.shape[0], dtype=torch.bool)\n\n    if pca_mat is None:\n        _, _, pca_mat = torch.pca_lowrank(image[valids, :], q=3, niter=20)\n    assert pca_mat is not None\n    image = torch.matmul(image, pca_mat[..., :3])\n    d = torch.abs(image[valids, :] - torch.median(image[valids, :], dim=0).values)\n    mdev = torch.median(d, dim=0).values\n    s = d / mdev\n    m = 2.0  # this is a hyperparam controlling how many std dev outside for outliers\n    rins = image[valids, :][s[:, 0] < m, 0]\n    gins = image[valids, :][s[:, 1] < m, 1]\n    bins = image[valids, :][s[:, 2] < m, 2]\n\n    image[valids, 0] -= rins.min()\n    image[valids, 1] -= gins.min()\n    image[valids, 2] -= bins.min()\n\n    image[valids, 0] /= rins.max() - rins.min()\n    image[valids, 1] /= gins.max() - gins.min()\n    image[valids, 2] /= bins.max() - bins.min()\n\n    image = torch.clamp(image, 0, 1)\n    image_long = (image * 255).long()\n    image_long_min = torch.min(image_long)\n    image_long_max = torch.max(image_long)\n    assert image_long_min >= 0, f\"the min value is {image_long_min}\"\n    assert image_long_max <= 255, f\"the max value is {image_long_max}\"\n    return image.view(*original_shape[:-1], 3)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/colors.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Common Colors\"\"\"\n\nfrom typing import Union\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\nWHITE = torch.tensor([1.0, 1.0, 1.0])\nBLACK = torch.tensor([0.0, 0.0, 0.0])\nRED = torch.tensor([1.0, 0.0, 0.0])\nGREEN = torch.tensor([0.0, 1.0, 0.0])\nBLUE = torch.tensor([0.0, 0.0, 1.0])\n\nCOLORS_DICT = {\n    \"white\": WHITE,\n    \"black\": BLACK,\n    \"red\": RED,\n    \"green\": GREEN,\n    \"blue\": BLUE,\n}\n\n\ndef get_color(color: Union[str, list]) -> Float[Tensor, \"3\"]:\n    \"\"\"\n    Args:\n        Color as a string or a rgb list\n\n    Returns:\n        Parsed color\n    \"\"\"\n    if isinstance(color, str):\n        color = color.lower()\n        if color not in COLORS_DICT:\n            raise ValueError(f\"{color} is not a valid preset color\")\n        return COLORS_DICT[color]\n    if isinstance(color, list):\n        if len(color) != 3:\n            raise ValueError(f\"Color should be 3 values (RGB) instead got {color}\")\n        return torch.tensor(color)\n\n    raise ValueError(f\"Color should be an RGB list or string, instead got {type(color)}\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/comms.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"functionality to handle multiprocessing syncing and communicating\"\"\"\n\nimport torch.distributed as dist\n\nLOCAL_PROCESS_GROUP = None\n\n\ndef is_dist_avail_and_initialized() -> bool:\n    \"\"\"Returns True if distributed is available and initialized.\"\"\"\n    return dist.is_available() and dist.is_initialized()\n\n\ndef get_world_size() -> int:\n    \"\"\"Get total number of available gpus\"\"\"\n    if not is_dist_avail_and_initialized():\n        return 1\n    return dist.get_world_size()\n\n\ndef get_rank() -> int:\n    \"\"\"Get global rank of current thread\"\"\"\n    if not is_dist_avail_and_initialized():\n        return 0\n    return dist.get_rank()\n\n\ndef get_local_rank() -> int:\n    \"\"\"The rank of the current process within the local (per-machine) process group.\"\"\"\n    if not is_dist_avail_and_initialized():\n        return 0\n    assert (\n        LOCAL_PROCESS_GROUP is not None\n    ), \"Local process group is not created! Please use launch() to spawn processes!\"\n    return dist.get_rank(group=LOCAL_PROCESS_GROUP)\n\n\ndef get_local_size() -> int:\n    \"\"\"\n    The size of the per-machine process group,\n    i.e. the number of processes per machine.\n    \"\"\"\n    if not is_dist_avail_and_initialized():\n        return 1\n    return dist.get_world_size(group=LOCAL_PROCESS_GROUP)\n\n\ndef is_main_process() -> bool:\n    \"\"\"check to see if you are currently on the main process\"\"\"\n    return get_rank() == 0\n\n\ndef synchronize():\n    \"\"\"\n    Helper function to synchronize (barrier) among all processes when\n    using distributed training\n    \"\"\"\n    if dist.get_world_size() == 1:\n        return\n    if dist.get_backend() == dist.Backend.NCCL:\n        # This argument is needed to avoid warnings.\n        # It's valid only for NCCL backend.\n        dist.barrier(device_ids=[get_local_rank()])\n    else:\n        dist.barrier()\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/decorators.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nDecorator definitions\n\"\"\"\n\nfrom typing import Callable, List\n\nfrom nerfstudio.utils import comms\n\n\ndef decorate_all(decorators: List[Callable]) -> Callable:\n    \"\"\"A decorator to decorate all member functions of a class\n\n    Args:\n        decorators: list of decorators to add to all functions in the class\n    \"\"\"\n\n    def decorate(cls):\n        for attr in cls.__dict__:\n            if callable(getattr(cls, attr)) and attr != \"__init__\":\n                for decorator in decorators:\n                    setattr(cls, attr, decorator(getattr(cls, attr)))\n        return cls\n\n    return decorate\n\n\ndef check_profiler_enabled(func: Callable) -> Callable:\n    \"\"\"Decorator: check if profiler is enabled\"\"\"\n\n    def wrapper(self, *args, **kwargs):\n        ret = None\n        if self.config.profiler != \"none\":\n            ret = func(self, *args, **kwargs)\n        return ret\n\n    return wrapper\n\n\ndef check_viewer_enabled(func: Callable) -> Callable:\n    \"\"\"Decorator: check if the viewer or legacy viewer is enabled and only run on main process\"\"\"\n\n    def wrapper(self, *args, **kwargs):\n        ret = None\n        if (self.config.is_viewer_enabled() or self.config.is_viewer_legacy_enabled()) and comms.is_main_process():\n            ret = func(self, *args, **kwargs)\n        return ret\n\n    return wrapper\n\n\ndef check_eval_enabled(func: Callable) -> Callable:\n    \"\"\"Decorator: check if evaluation step is enabled\"\"\"\n\n    def wrapper(self, *args, **kwargs):\n        ret = None\n        if self.config.is_wandb_enabled() or self.config.is_tensorboard_enabled() or self.config.is_comet_enabled():\n            ret = func(self, *args, **kwargs)\n        return ret\n\n    return wrapper\n\n\ndef check_main_thread(func: Callable) -> Callable:\n    \"\"\"Decorator: check if you are on main thread\"\"\"\n\n    def wrapper(*args, **kwargs):\n        ret = None\n        if comms.is_main_process():\n            ret = func(*args, **kwargs)\n        return ret\n\n    return wrapper\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/eval_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nEvaluation utils\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nimport sys\nfrom pathlib import Path\nfrom typing import Callable, Literal, Optional, Tuple\n\nimport torch\nimport yaml\n\nfrom nerfstudio.configs.method_configs import all_methods\nfrom nerfstudio.engine.trainer import TrainerConfig\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef eval_load_checkpoint(config: TrainerConfig, pipeline: Pipeline) -> Tuple[Path, int]:\n    ## TODO: ideally eventually want to get this to be the same as whatever is used to load train checkpoint too\n    \"\"\"Helper function to load checkpointed pipeline\n\n    Args:\n        config (DictConfig): Configuration of pipeline to load\n        pipeline (Pipeline): Pipeline instance of which to load weights\n    Returns:\n        A tuple of the path to the loaded checkpoint and the step at which it was saved.\n    \"\"\"\n    assert config.load_dir is not None\n    if config.load_step is None:\n        CONSOLE.print(\"Loading latest checkpoint from load_dir\")\n        # NOTE: this is specific to the checkpoint name format\n        if not os.path.exists(config.load_dir):\n            CONSOLE.rule(\"Error\", style=\"red\")\n            CONSOLE.print(f\"No checkpoint directory found at {config.load_dir}, \", justify=\"center\")\n            CONSOLE.print(\n                \"Please make sure the checkpoint exists, they should be generated periodically during training\",\n                justify=\"center\",\n            )\n            sys.exit(1)\n        load_step = sorted(int(x[x.find(\"-\") + 1 : x.find(\".\")]) for x in os.listdir(config.load_dir))[-1]\n    else:\n        load_step = config.load_step\n    load_path = config.load_dir / f\"step-{load_step:09d}.ckpt\"\n    assert load_path.exists(), f\"Checkpoint {load_path} does not exist\"\n    loaded_state = torch.load(load_path, map_location=\"cpu\", weights_only=False)\n    pipeline.load_pipeline(loaded_state[\"pipeline\"], loaded_state[\"step\"])\n    CONSOLE.print(f\":white_check_mark: Done loading checkpoint from {load_path}\")\n    return load_path, load_step\n\n\ndef eval_setup(\n    config_path: Path,\n    eval_num_rays_per_chunk: Optional[int] = None,\n    test_mode: Literal[\"test\", \"val\", \"inference\"] = \"test\",\n    update_config_callback: Optional[Callable[[TrainerConfig], TrainerConfig]] = None,\n) -> Tuple[TrainerConfig, Pipeline, Path, int]:\n    \"\"\"Shared setup for loading a saved pipeline for evaluation.\n\n    Args:\n        config_path: Path to config YAML file.\n        eval_num_rays_per_chunk: Number of rays per forward pass\n        test_mode:\n            'val': loads train/val datasets into memory\n            'test': loads train/test dataset into memory\n            'inference': does not load any dataset into memory\n        update_config_callback: Callback to update the config before loading the pipeline\n\n\n    Returns:\n        Loaded config, pipeline module, corresponding checkpoint, and step\n    \"\"\"\n    # load save config\n    config = yaml.load(config_path.read_text(), Loader=yaml.Loader)\n    assert isinstance(config, TrainerConfig)\n\n    config.pipeline.datamanager._target = all_methods[config.method_name].pipeline.datamanager._target\n    if eval_num_rays_per_chunk:\n        config.pipeline.model.eval_num_rays_per_chunk = eval_num_rays_per_chunk\n\n    if update_config_callback is not None:\n        config = update_config_callback(config)\n\n    # load checkpoints from wherever they were saved\n    # TODO: expose the ability to choose an arbitrary checkpoint\n    config.load_dir = config.get_checkpoint_dir()\n\n    # setup pipeline (which includes the DataManager)\n    device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    pipeline = config.pipeline.setup(device=device, test_mode=test_mode)\n    assert isinstance(pipeline, Pipeline)\n    pipeline.eval()\n\n    # load checkpointed information\n    checkpoint_path, step = eval_load_checkpoint(config, pipeline)\n\n    return config, pipeline, checkpoint_path, step\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/external.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport sys\n\n\nclass _LazyError:\n    def __init__(self, data):\n        self.__data = data  # pylint: disable=unused-private-member\n\n    class LazyErrorObj:\n        def __init__(self, data):\n            self.__data = data  # pylint: disable=unused-private-member\n\n        def __call__(self, *args, **kwds):\n            name, exc = object.__getattribute__(self, \"__data\")\n            raise RuntimeError(f\"Could not load package {name}.\") from exc\n\n        def __getattr__(self, __name: str):\n            name, exc = object.__getattribute__(self, \"__data\")\n            raise RuntimeError(f\"Could not load package {name}\") from exc\n\n    def __getattr__(self, __name: str):\n        return _LazyError.LazyErrorObj(object.__getattribute__(self, \"__data\"))\n\n\nTCNN_EXISTS = False\ntcnn_import_exception = None\ntcnn = None\ntry:\n    import tinycudann\n\n    tcnn = tinycudann\n    del tinycudann\n    TCNN_EXISTS = True\nexcept ModuleNotFoundError as _exp:\n    tcnn_import_exception = _exp\nexcept ImportError as _exp:\n    tcnn_import_exception = _exp\nexcept EnvironmentError as _exp:\n    if \"Unknown compute capability\" not in _exp.args[0]:\n        raise _exp\n    print(\"Could not load tinycudann: \" + str(_exp), file=sys.stderr)\n    tcnn_import_exception = _exp\n\nif tcnn_import_exception is not None:\n    tcnn = _LazyError(tcnn_import_exception)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/install_checks.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Helpers for checking if programs are installed\"\"\"\n\nimport shutil\nimport subprocess\nimport sys\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef check_ffmpeg_installed():\n    \"\"\"Checks if ffmpeg is installed.\"\"\"\n    ffmpeg_path = shutil.which(\"ffmpeg\")\n    if ffmpeg_path is None:\n        CONSOLE.print(\"[bold red]Could not find ffmpeg. Please install ffmpeg.\")\n        print(\"See https://ffmpeg.org/download.html for installation instructions.\")\n        sys.exit(1)\n\n\ndef check_colmap_installed(colmap_cmd: str):\n    \"\"\"Checks if colmap is installed.\"\"\"\n    out = subprocess.run(f\"{colmap_cmd} -h\", capture_output=True, shell=True, check=False)\n    if out.returncode != 0:\n        CONSOLE.print(\"[bold red]Could not find COLMAP. Please install COLMAP.\")\n        print(\"See https://colmap.github.io/install.html for installation instructions.\")\n        sys.exit(1)\n\n\ndef check_curl_installed():\n    \"\"\"Checks if curl is installed.\"\"\"\n    curl_path = shutil.which(\"curl\")\n    if curl_path is None:\n        CONSOLE.print(\"[bold red]Could not find [yellow]curl[red], Please install [yellow]curl\")\n        sys.exit(1)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/io.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nInput/output utils.\n\"\"\"\n\nimport json\nfrom pathlib import Path\n\n\ndef load_from_json(filename: Path):\n    \"\"\"Load a dictionary from a JSON filename.\n\n    Args:\n        filename: The filename to load from.\n    \"\"\"\n    assert filename.suffix == \".json\"\n    with open(filename, encoding=\"UTF-8\") as file:\n        return json.load(file)\n\n\ndef write_to_json(filename: Path, content: dict):\n    \"\"\"Write data to a JSON file.\n\n    Args:\n        filename: The filename to write to.\n        content: The dictionary data to write.\n    \"\"\"\n    assert filename.suffix == \".json\"\n    with open(filename, \"w\", encoding=\"UTF-8\") as file:\n        json.dump(content, file)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/math.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Math Helper Functions\"\"\"\n\nimport itertools\nimport math\nfrom dataclasses import dataclass\nfrom typing import Literal, Tuple\n\nimport torch\nfrom jaxtyping import Bool, Float\nfrom torch import Tensor\n\nfrom nerfstudio.data.scene_box import OrientedBox\n\n\ndef components_from_spherical_harmonics(\n    levels: int, directions: Float[Tensor, \"*batch 3\"]\n) -> Float[Tensor, \"*batch components\"]:\n    \"\"\"\n    Returns value for each component of spherical harmonics.\n\n    Args:\n        levels: Number of spherical harmonic levels to compute.\n        directions: Spherical harmonic coefficients\n    \"\"\"\n    num_components = levels**2\n    components = torch.zeros((*directions.shape[:-1], num_components), device=directions.device)\n\n    assert 1 <= levels <= 5, f\"SH levels must be in [1,4], got {levels}\"\n    assert directions.shape[-1] == 3, f\"Direction input should have three dimensions. Got {directions.shape[-1]}\"\n\n    x = directions[..., 0]\n    y = directions[..., 1]\n    z = directions[..., 2]\n\n    xx = x**2\n    yy = y**2\n    zz = z**2\n\n    # l0\n    components[..., 0] = 0.28209479177387814\n\n    # l1\n    if levels > 1:\n        components[..., 1] = 0.4886025119029199 * y\n        components[..., 2] = 0.4886025119029199 * z\n        components[..., 3] = 0.4886025119029199 * x\n\n    # l2\n    if levels > 2:\n        components[..., 4] = 1.0925484305920792 * x * y\n        components[..., 5] = 1.0925484305920792 * y * z\n        components[..., 6] = 0.9461746957575601 * zz - 0.31539156525251999\n        components[..., 7] = 1.0925484305920792 * x * z\n        components[..., 8] = 0.5462742152960396 * (xx - yy)\n\n    # l3\n    if levels > 3:\n        components[..., 9] = 0.5900435899266435 * y * (3 * xx - yy)\n        components[..., 10] = 2.890611442640554 * x * y * z\n        components[..., 11] = 0.4570457994644658 * y * (5 * zz - 1)\n        components[..., 12] = 0.3731763325901154 * z * (5 * zz - 3)\n        components[..., 13] = 0.4570457994644658 * x * (5 * zz - 1)\n        components[..., 14] = 1.445305721320277 * z * (xx - yy)\n        components[..., 15] = 0.5900435899266435 * x * (xx - 3 * yy)\n\n    # l4\n    if levels > 4:\n        components[..., 16] = 2.5033429417967046 * x * y * (xx - yy)\n        components[..., 17] = 1.7701307697799304 * y * z * (3 * xx - yy)\n        components[..., 18] = 0.9461746957575601 * x * y * (7 * zz - 1)\n        components[..., 19] = 0.6690465435572892 * y * z * (7 * zz - 3)\n        components[..., 20] = 0.10578554691520431 * (35 * zz * zz - 30 * zz + 3)\n        components[..., 21] = 0.6690465435572892 * x * z * (7 * zz - 3)\n        components[..., 22] = 0.47308734787878004 * (xx - yy) * (7 * zz - 1)\n        components[..., 23] = 1.7701307697799304 * x * z * (xx - 3 * yy)\n        components[..., 24] = 0.6258357354491761 * (xx * (xx - 3 * yy) - yy * (3 * xx - yy))\n\n    return components\n\n\n@dataclass\nclass Gaussians:\n    \"\"\"Stores Gaussians\n\n    Args:\n        mean: Mean of multivariate Gaussian\n        cov: Covariance of multivariate Gaussian.\n    \"\"\"\n\n    mean: Float[Tensor, \"*batch dim\"]\n    cov: Float[Tensor, \"*batch dim dim\"]\n\n\ndef compute_3d_gaussian(\n    directions: Float[Tensor, \"*batch 3\"],\n    means: Float[Tensor, \"*batch 3\"],\n    dir_variance: Float[Tensor, \"*batch 1\"],\n    radius_variance: Float[Tensor, \"*batch 1\"],\n) -> Gaussians:\n    \"\"\"Compute gaussian along ray.\n\n    Args:\n        directions: Axis of Gaussian.\n        means: Mean of Gaussian.\n        dir_variance: Variance along direction axis.\n        radius_variance: Variance tangent to direction axis.\n\n    Returns:\n        Gaussians: Oriented 3D gaussian.\n    \"\"\"\n\n    dir_outer_product = directions[..., :, None] * directions[..., None, :]\n    eye = torch.eye(directions.shape[-1], device=directions.device)\n    dir_mag_sq = torch.clamp(torch.sum(directions**2, dim=-1, keepdim=True), min=1e-10)\n    null_outer_product = eye - directions[..., :, None] * (directions / dir_mag_sq)[..., None, :]\n    dir_cov_diag = dir_variance[..., None] * dir_outer_product[..., :, :]\n    radius_cov_diag = radius_variance[..., None] * null_outer_product[..., :, :]\n    cov = dir_cov_diag + radius_cov_diag\n    return Gaussians(mean=means, cov=cov)\n\n\ndef cylinder_to_gaussian(\n    origins: Float[Tensor, \"*batch 3\"],\n    directions: Float[Tensor, \"*batch 3\"],\n    starts: Float[Tensor, \"*batch 1\"],\n    ends: Float[Tensor, \"*batch 1\"],\n    radius: Float[Tensor, \"*batch 1\"],\n) -> Gaussians:\n    \"\"\"Approximates cylinders with a Gaussian distributions.\n\n    Args:\n        origins: Origins of cylinders.\n        directions: Direction (axis) of cylinders.\n        starts: Start of cylinders.\n        ends: End of cylinders.\n        radius: Radii of cylinders.\n\n    Returns:\n        Gaussians: Approximation of cylinders\n    \"\"\"\n    means = origins + directions * ((starts + ends) / 2.0)\n    dir_variance = (ends - starts) ** 2 / 12\n    radius_variance = radius**2 / 4.0\n    return compute_3d_gaussian(directions, means, dir_variance, radius_variance)\n\n\ndef conical_frustum_to_gaussian(\n    origins: Float[Tensor, \"*batch 3\"],\n    directions: Float[Tensor, \"*batch 3\"],\n    starts: Float[Tensor, \"*batch 1\"],\n    ends: Float[Tensor, \"*batch 1\"],\n    radius: Float[Tensor, \"*batch 1\"],\n) -> Gaussians:\n    \"\"\"Approximates conical frustums with a Gaussian distributions.\n\n    Uses stable parameterization described in mip-NeRF publication.\n\n    Args:\n        origins: Origins of cones.\n        directions: Direction (axis) of frustums.\n        starts: Start of conical frustums.\n        ends: End of conical frustums.\n        radius: Radii of cone a distance of 1 from the origin.\n\n    Returns:\n        Gaussians: Approximation of conical frustums\n    \"\"\"\n    mu = (starts + ends) / 2.0\n    hw = (ends - starts) / 2.0\n    means = origins + directions * (mu + (2.0 * mu * hw**2.0) / (3.0 * mu**2.0 + hw**2.0))\n    dir_variance = (hw**2) / 3 - (4 / 15) * ((hw**4 * (12 * mu**2 - hw**2)) / (3 * mu**2 + hw**2) ** 2)\n    radius_variance = radius**2 * ((mu**2) / 4 + (5 / 12) * hw**2 - 4 / 15 * (hw**4) / (3 * mu**2 + hw**2))\n    return compute_3d_gaussian(directions, means, dir_variance, radius_variance)\n\n\ndef expected_sin(x_means: torch.Tensor, x_vars: torch.Tensor) -> torch.Tensor:\n    \"\"\"Computes the expected value of sin(y) where y ~ N(x_means, x_vars)\n\n    Args:\n        x_means: Mean values.\n        x_vars: Variance of values.\n\n    Returns:\n        torch.Tensor: The expected value of sin.\n    \"\"\"\n    return torch.exp(-0.5 * x_vars) * torch.sin(x_means)\n\n\n# @torch_compile(dynamic=True, mode=\"reduce-overhead\", backend=\"eager\")\ndef intersect_aabb(\n    origins: torch.Tensor,\n    directions: torch.Tensor,\n    aabb: torch.Tensor,\n    max_bound: float = 1e10,\n    invalid_value: float = 1e10,\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"\n    Implementation of ray intersection with AABB box\n\n    Args:\n        origins: [N,3] tensor of 3d positions\n        directions: [N,3] tensor of normalized directions\n        aabb: [6] array of aabb box in the form of [x_min, y_min, z_min, x_max, y_max, z_max]\n        max_bound: Maximum value of t_max\n        invalid_value: Value to return in case of no intersection\n\n    Returns:\n        t_min, t_max - two tensors of shapes N representing distance of intersection from the origin.\n    \"\"\"\n\n    tx_min = (aabb[:3] - origins) / directions\n    tx_max = (aabb[3:] - origins) / directions\n\n    t_min = torch.stack((tx_min, tx_max)).amin(dim=0)\n    t_max = torch.stack((tx_min, tx_max)).amax(dim=0)\n\n    t_min = t_min.amax(dim=-1)\n    t_max = t_max.amin(dim=-1)\n\n    t_min = torch.clamp(t_min, min=0, max=max_bound)\n    t_max = torch.clamp(t_max, min=0, max=max_bound)\n\n    cond = t_max <= t_min\n    t_min = torch.where(cond, invalid_value, t_min)\n    t_max = torch.where(cond, invalid_value, t_max)\n\n    return t_min, t_max\n\n\ndef intersect_obb(\n    origins: torch.Tensor,\n    directions: torch.Tensor,\n    obb: OrientedBox,\n    max_bound: float = 1e10,\n    invalid_value: float = 1e10,\n):\n    \"\"\"\n    Ray intersection with an oriented bounding box (OBB)\n\n    Args:\n        origins: [N,3] tensor of 3d positions\n        directions: [N,3] tensor of normalized directions\n        R: [3,3] rotation matrix\n        T: [3] translation vector\n        S: [3] extents of the bounding box\n        max_bound: Maximum value of t_max\n        invalid_value: Value to return in case of no intersection\n    \"\"\"\n    # Transform ray to OBB space\n    R, T, S = obb.R, obb.T, obb.S.to(origins.device)\n    H = torch.eye(4, device=origins.device, dtype=origins.dtype)\n    H[:3, :3] = R\n    H[:3, 3] = T\n    H_world2bbox = torch.inverse(H)\n    origins = torch.cat((origins, torch.ones_like(origins[..., :1])), dim=-1)\n    origins = torch.matmul(H_world2bbox, origins.T).T[..., :3]\n    directions = torch.matmul(H_world2bbox[:3, :3], directions.T).T\n\n    # Compute intersection with axis-aligned bounding box with min as -S and max as +S\n    aabb = torch.concat((-S / 2, S / 2))\n    t_min, t_max = intersect_aabb(origins, directions, aabb, max_bound=max_bound, invalid_value=invalid_value)\n\n    return t_min, t_max\n\n\ndef safe_normalize(\n    vectors: Float[Tensor, \"*batch_dim N\"],\n    eps: float = 1e-10,\n) -> Float[Tensor, \"*batch_dim N\"]:\n    \"\"\"Normalizes vectors.\n\n    Args:\n        vectors: Vectors to normalize.\n        eps: Epsilon value to avoid division by zero.\n\n    Returns:\n        Normalized vectors.\n    \"\"\"\n    return vectors / (torch.norm(vectors, dim=-1, keepdim=True) + eps)\n\n\ndef masked_reduction(\n    input_tensor: Float[Tensor, \"1 32 mult\"],\n    mask: Bool[Tensor, \"1 32 mult\"],\n    reduction_type: Literal[\"image\", \"batch\"],\n) -> Tensor:\n    \"\"\"\n    Whether to consolidate the input_tensor across the batch or across the image\n    Args:\n        input_tensor: input tensor\n        mask: mask tensor\n        reduction_type: either \"batch\" or \"image\"\n    Returns:\n        input_tensor: reduced input_tensor\n    \"\"\"\n    if reduction_type == \"batch\":\n        # avoid division by 0 (if sum(M) = sum(sum(mask)) = 0: sum(image_loss) = 0)\n        divisor = torch.sum(mask)\n        if divisor == 0:\n            return torch.tensor(0, device=input_tensor.device)\n        input_tensor = torch.sum(input_tensor) / divisor\n    elif reduction_type == \"image\":\n        # avoid division by 0 (if M = sum(mask) = 0: image_loss = 0)\n        valid = mask.nonzero()\n\n        input_tensor[valid] = input_tensor[valid] / mask[valid]\n        input_tensor = torch.mean(input_tensor)\n    return input_tensor\n\n\ndef normalized_depth_scale_and_shift(\n    prediction: Float[Tensor, \"1 32 mult\"], target: Float[Tensor, \"1 32 mult\"], mask: Bool[Tensor, \"1 32 mult\"]\n):\n    \"\"\"\n    More info here: https://arxiv.org/pdf/2206.00665.pdf supplementary section A2 Depth Consistency Loss\n    This function computes scale/shift required to normalizes predicted depth map,\n    to allow for using normalized depth maps as input from monocular depth estimation networks.\n    These networks are trained such that they predict normalized depth maps.\n\n    Solves for scale/shift using a least squares approach with a closed form solution:\n    Based on:\n    https://github.com/autonomousvision/monosdf/blob/d9619e948bf3d85c6adec1a643f679e2e8e84d4b/code/model/loss.py#L7\n    Args:\n        prediction: predicted depth map\n        target: ground truth depth map\n        mask: mask of valid pixels\n    Returns:\n        scale and shift for depth prediction\n    \"\"\"\n    # system matrix: A = [[a_00, a_01], [a_10, a_11]]\n    a_00 = torch.sum(mask * prediction * prediction, (1, 2))\n    a_01 = torch.sum(mask * prediction, (1, 2))\n    a_11 = torch.sum(mask, (1, 2))\n\n    # right hand side: b = [b_0, b_1]\n    b_0 = torch.sum(mask * prediction * target, (1, 2))\n    b_1 = torch.sum(mask * target, (1, 2))\n\n    # solution: x = A^-1 . b = [[a_11, -a_01], [-a_10, a_00]] / (a_00 * a_11 - a_01 * a_10) . b\n    scale = torch.zeros_like(b_0)\n    shift = torch.zeros_like(b_1)\n\n    det = a_00 * a_11 - a_01 * a_01\n    valid = det.nonzero()\n\n    scale[valid] = (a_11[valid] * b_0[valid] - a_01[valid] * b_1[valid]) / det[valid]\n    shift[valid] = (-a_01[valid] * b_0[valid] + a_00[valid] * b_1[valid]) / det[valid]\n\n    return scale, shift\n\n\ndef columnwise_squared_l2_distance(\n    x: Float[Tensor, \"*M N\"],\n    y: Float[Tensor, \"*M N\"],\n) -> Float[Tensor, \"N N\"]:\n    \"\"\"Compute the squared Euclidean distance between all pairs of columns.\n    Adapted from https://github.com/google-research/multinerf/blob/5b4d4f64608ec8077222c52fdf814d40acc10bc1/internal/geopoly.py\n\n    Args:\n        x: tensor of floats, with shape [M, N].\n        y: tensor of floats, with shape [M, N].\n    Returns:\n        sq_dist: tensor of floats, with shape [N, N].\n    \"\"\"\n    # Use the fact that ||x - y||^2 == ||x||^2 + ||y||^2 - 2 x^T y.\n    sq_norm_x = torch.sum(x**2, 0)\n    sq_norm_y = torch.sum(y**2, 0)\n    sq_dist = sq_norm_x[:, None] + sq_norm_y[None, :] - 2 * x.T @ y\n    return sq_dist\n\n\ndef _compute_tesselation_weights(v: int) -> Tensor:\n    \"\"\"Tesselate the vertices of a triangle by a factor of `v`.\n    Adapted from https://github.com/google-research/multinerf/blob/5b4d4f64608ec8077222c52fdf814d40acc10bc1/internal/geopoly.py\n\n    Args:\n        v: int, the factor of the tesselation (v==1 is a no-op to the triangle).\n\n    Returns:\n        weights: tesselated weights.\n    \"\"\"\n    if v < 1:\n        raise ValueError(f\"v {v} must be >= 1\")\n    int_weights = []\n    for i in range(v + 1):\n        for j in range(v + 1 - i):\n            int_weights.append((i, j, v - (i + j)))\n    int_weights = torch.FloatTensor(int_weights)\n    weights = int_weights / v  # Barycentric weights.\n    return weights\n\n\ndef _tesselate_geodesic(\n    vertices: Float[Tensor, \"N 3\"], faces: Float[Tensor, \"M 3\"], v: int, eps: float = 1e-4\n) -> Tensor:\n    \"\"\"Tesselate the vertices of a geodesic polyhedron.\n\n    Adapted from https://github.com/google-research/multinerf/blob/5b4d4f64608ec8077222c52fdf814d40acc10bc1/internal/geopoly.py\n\n    Args:\n        vertices: tensor of floats, the vertex coordinates of the geodesic.\n        faces: tensor of ints, the indices of the vertices of base_verts that\n            constitute eachface of the polyhedra.\n        v: int, the factor of the tesselation (v==1 is a no-op).\n        eps: float, a small value used to determine if two vertices are the same.\n\n    Returns:\n        verts: a tensor of floats, the coordinates of the tesselated vertices.\n    \"\"\"\n    tri_weights = _compute_tesselation_weights(v)\n\n    verts = []\n    for face in faces:\n        new_verts = torch.matmul(tri_weights, vertices[face, :])\n        new_verts /= torch.sqrt(torch.sum(new_verts**2, 1, keepdim=True))\n        verts.append(new_verts)\n    verts = torch.concatenate(verts, 0)\n\n    sq_dist = columnwise_squared_l2_distance(verts.T, verts.T)\n    assignment = torch.tensor([torch.min(torch.argwhere(d <= eps)) for d in sq_dist])\n    unique = torch.unique(assignment)\n    verts = verts[unique, :]\n    return verts\n\n\ndef generate_polyhedron_basis(\n    basis_shape: Literal[\"icosahedron\", \"octahedron\"],\n    angular_tesselation: int,\n    remove_symmetries: bool = True,\n    eps: float = 1e-4,\n) -> Tensor:\n    \"\"\"Generates a 3D basis by tesselating a geometric polyhedron.\n    Basis is used to construct Fourier features for positional encoding.\n    See Mip-Nerf360 paper: https://arxiv.org/abs/2111.12077\n    Adapted from https://github.com/google-research/multinerf/blob/5b4d4f64608ec8077222c52fdf814d40acc10bc1/internal/geopoly.py\n\n    Args:\n        base_shape: string, the name of the starting polyhedron, must be either\n            'icosahedron' or 'octahedron'.\n        angular_tesselation: int, the number of times to tesselate the polyhedron,\n            must be >= 1 (a value of 1 is a no-op to the polyhedron).\n        remove_symmetries: bool, if True then remove the symmetric basis columns,\n            which is usually a good idea because otherwise projections onto the basis\n            will have redundant negative copies of each other.\n        eps: float, a small number used to determine symmetries.\n\n    Returns:\n        basis: a matrix with shape [3, n].\n    \"\"\"\n    if basis_shape == \"icosahedron\":\n        a = (math.sqrt(5) + 1) / 2\n        verts = torch.FloatTensor(\n            [\n                (-1, 0, a),\n                (1, 0, a),\n                (-1, 0, -a),\n                (1, 0, -a),\n                (0, a, 1),\n                (0, a, -1),\n                (0, -a, 1),\n                (0, -a, -1),\n                (a, 1, 0),\n                (-a, 1, 0),\n                (a, -1, 0),\n                (-a, -1, 0),\n            ]\n        ) / math.sqrt(a + 2)\n        faces = torch.tensor(\n            [\n                (0, 4, 1),\n                (0, 9, 4),\n                (9, 5, 4),\n                (4, 5, 8),\n                (4, 8, 1),\n                (8, 10, 1),\n                (8, 3, 10),\n                (5, 3, 8),\n                (5, 2, 3),\n                (2, 7, 3),\n                (7, 10, 3),\n                (7, 6, 10),\n                (7, 11, 6),\n                (11, 0, 6),\n                (0, 1, 6),\n                (6, 1, 10),\n                (9, 0, 11),\n                (9, 11, 2),\n                (9, 2, 5),\n                (7, 2, 11),\n            ]\n        )\n        verts = _tesselate_geodesic(verts, faces, angular_tesselation)\n    elif basis_shape == \"octahedron\":\n        verts = torch.FloatTensor([(0, 0, -1), (0, 0, 1), (0, -1, 0), (0, 1, 0), (-1, 0, 0), (1, 0, 0)])\n        corners = torch.FloatTensor(list(itertools.product([-1, 1], repeat=3)))\n        pairs = torch.argwhere(columnwise_squared_l2_distance(corners.T, verts.T) == 2)\n        faces, _ = torch.sort(torch.reshape(pairs[:, 1], [3, -1]).T, 1)\n        verts = _tesselate_geodesic(verts, faces, angular_tesselation)\n\n    if remove_symmetries:\n        # Remove elements of `verts` that are reflections of each other.\n        match = columnwise_squared_l2_distance(verts.T, -verts.T) < eps\n        verts = verts[torch.any(torch.triu(match), 1), :]\n\n    basis = verts.flip(-1)\n    return basis\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/misc.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nMiscellaneous helper code.\n\"\"\"\n\nimport platform\nimport typing\nimport warnings\nfrom inspect import currentframe\nfrom typing import Any, Callable, Dict, List, Optional, TypeVar, Union\n\nimport torch\n\nT = TypeVar(\"T\")\nTKey = TypeVar(\"TKey\")\n\n\ndef get_dict_to_torch(stuff: T, device: Union[torch.device, str] = \"cpu\", exclude: Optional[List[str]] = None) -> T:\n    \"\"\"Set everything in the dict to the specified torch device.\n\n    Args:\n        stuff: things to convert to torch\n        device: machine to put the \"stuff\" on\n        exclude: list of keys to skip over transferring to device\n    \"\"\"\n    if isinstance(stuff, dict):\n        for k, v in stuff.items():\n            if exclude and k in exclude:\n                stuff[k] = v\n            else:\n                stuff[k] = get_dict_to_torch(v, device)\n        return stuff\n    if isinstance(stuff, torch.Tensor):\n        return stuff.to(device)\n    return stuff\n\n\ndef get_dict_to_cpu(stuff: T) -> T:\n    \"\"\"Set everything in the dict to CPU.\n\n    Args:\n        stuff: things to place onto cpu\n    \"\"\"\n    if isinstance(stuff, dict):\n        for k, v in stuff.items():\n            stuff[k] = get_dict_to_cpu(v)\n        return stuff\n    if isinstance(stuff, torch.Tensor):\n        return stuff.detach().cpu()\n    return stuff\n\n\ndef get_masked_dict(d: Dict[TKey, torch.Tensor], mask) -> Dict[TKey, torch.Tensor]:\n    \"\"\"Return a masked dictionary.\n    TODO(ethan): add more asserts/checks so this doesn't have unpredictable behavior.\n\n    Args:\n        d: dict to process\n        mask: mask to apply to values in dictionary\n    \"\"\"\n    masked_dict = {}\n    for key, value in d.items():\n        masked_dict[key] = value[mask]\n    return masked_dict\n\n\nclass IterableWrapper:\n    \"\"\"A helper that will allow an instance of a class to return multiple kinds of iterables bound\n    to different functions of that class.\n\n    To use this, take an instance of a class. From that class, pass in the <instance>.<new_iter_function>\n    and <instance>.<new_next_function> to the IterableWrapper constructor. By passing in the instance's\n    functions instead of just the class's functions, the self argument should automatically be accounted\n    for.\n\n    Args:\n        new_iter: function that will be called instead as the __iter__() function\n        new_next: function that will be called instead as the __next__() function\n        length: length of the iterable. If -1, the iterable will be infinite.\n\n\n    Attributes:\n        new_iter: object's pointer to the function we are calling for __iter__()\n        new_next: object's pointer to the function we are calling for __next__()\n        length: length of the iterable. If -1, the iterable will be infinite.\n        i: current index of the iterable.\n\n    \"\"\"\n\n    i: int\n\n    def __init__(self, new_iter: Callable, new_next: Callable, length: int = -1):\n        self.new_iter = new_iter\n        self.new_next = new_next\n        self.length = length\n\n    def __next__(self):\n        if self.length != -1 and self.i >= self.length:\n            raise StopIteration\n        self.i += 1\n        return self.new_next()\n\n    def __iter__(self):\n        self.new_iter()\n        self.i = 0\n        return self\n\n\ndef scale_dict(dictionary: Dict[Any, Any], coefficients: Dict[str, float]) -> Dict[Any, Any]:\n    \"\"\"Scale a dictionary in-place given a coefficients dictionary.\n\n    Args:\n        dictionary: input dict to be scaled.\n        coefficients: scalar dict config for holding coefficients.\n\n    Returns:\n        Input dict scaled by coefficients.\n    \"\"\"\n    for key in dictionary:\n        if key in coefficients:\n            dictionary[key] *= coefficients[key]\n    return dictionary\n\n\ndef step_check(step, step_size, run_at_zero=False) -> bool:\n    \"\"\"Returns true based on current step and step interval.\"\"\"\n    if step_size == 0:\n        return False\n    return (run_at_zero or step != 0) and step % step_size == 0\n\n\ndef update_avg(prev_avg: float, new_val: float, step: int) -> float:\n    \"\"\"helper to calculate the running average\n\n    Args:\n        prev_avg (float): previous average value\n        new_val (float): new value to update the average with\n        step (int): current step number\n\n    Returns:\n        float: new updated average\n    \"\"\"\n    return (step * prev_avg + new_val) / (step + 1)\n\n\ndef strtobool(val) -> bool:\n    \"\"\"Cheap replacement for `distutils.util.strtobool()` which is deprecated\n    FMI https://stackoverflow.com/a/715468\n    \"\"\"\n    return val.lower() in (\"yes\", \"y\", \"true\", \"t\", \"on\", \"1\")\n\n\ndef torch_compile(*args, **kwargs) -> Any:\n    \"\"\"\n    Safe torch.compile with backward compatibility for PyTorch 1.x\n    \"\"\"\n    if not hasattr(torch, \"compile\"):\n        # Backward compatibility for PyTorch 1.x\n        warnings.warn(\n            \"PyTorch 1.x will no longer be supported by Nerstudio. Please upgrade to PyTorch 2.x.\", DeprecationWarning\n        )\n        if args and isinstance(args[0], torch.nn.Module):\n            return args[0]\n        else:\n            return torch.jit.script\n    elif platform.system() == \"Windows\":\n        # torch.compile is not supported on Windows\n        # https://github.com/orgs/pytorch/projects/27\n        # TODO: @jkulhanek, remove this once torch.compile is supported on Windows\n        warnings.warn(\n            \"Windows does not yet support torch.compile and the performance will be affected.\", RuntimeWarning\n        )\n        if args and isinstance(args[0], torch.nn.Module):\n            return args[0]\n        else:\n            return lambda x: x\n    else:\n        return torch.compile(*args, **kwargs)\n\n\ndef get_orig_class(obj, default=None):\n    \"\"\"Returns the __orig_class__ class of `obj` even when it is not initialized in __init__ (Python>=3.8).\n\n    Workaround for https://github.com/python/typing/issues/658.\n    Inspired by https://github.com/Stewori/pytypes/pull/53.\n    \"\"\"\n    try:\n        return object.__getattribute__(obj, \"__orig_class__\")\n    except AttributeError:\n        cls = object.__getattribute__(obj, \"__class__\")\n        try:\n            is_type_generic = isinstance(cls, typing.GenericMeta)  # type: ignore\n        except AttributeError:  # Python 3.8\n            is_type_generic = issubclass(cls, typing.Generic)\n        if is_type_generic:\n            frame = currentframe().f_back.f_back  # type: ignore\n            try:\n                while frame:\n                    try:\n                        res = frame.f_locals[\"self\"]\n                        if res.__origin__ is cls:\n                            return res\n                    except (KeyError, AttributeError):\n                        frame = frame.f_back\n            finally:\n                del frame\n        return default\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/plotly_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nVisualization code for plotly.\nThe function use prefix conventions in the following way:\n    - 'get_*' functions (e.g., 'get_camera_frustums')\n        return data that can be plotted with plotly\n    - 'vis_*' functions (e.g., 'vis_camera_rays')\n        return 'go.Figure' objects which are the plots. Go Figure! :')\n\"\"\"\n\nfrom typing import Any, List, Optional, Union\n\nimport numpy as np\nimport plotly.graph_objects as go\nimport torch\nimport torch.nn.functional as F\nfrom jaxtyping import Float\nfrom plotly import express as ex\nfrom torch import Tensor\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.cameras.rays import Frustums, RayBundle\nfrom nerfstudio.utils.math import Gaussians\n\n\ndef color_str(color):\n    \"\"\"Plotly color string.\n\n    Args:\n        color: list [r, g, b] in [0, 1] range\n\n    Returns:\n        str: plotly-formatted color string\n    \"\"\"\n    color = list((np.array(color) * 255.0).astype(\"int\"))\n    return f\"\"\"rgb({color[0]}, {color[1]}, {color[2]})\"\"\"\n\n\ndef get_line_segments_from_lines(\n    lines: Float[Tensor, \"num_rays 2 3\"],\n    color: str = color_str((1, 0, 0)),\n    marker_color: str = color_str((1, 0, 0)),\n    colors: Optional[List[str]] = None,\n    draw_marker: bool = True,\n    draw_line: bool = True,\n    marker_size: float = 4,\n    line_width: float = 10,\n) -> List[Any]:\n    \"\"\"Returns a list of Scatter3D objects for creating lines with plotly.\n    # TODO(ethan): make this function more efficient instead of having a list of objects.\n\n    Args:\n        lines: Tensor of lines.\n        color: Color of the lines. Defaults to red.\n        marker_color: Color of the markers. Defaults to red.\n        colors: List of colors for each line. Defaults to None.\n        draw_marker: Whether to draw markers. Defaults to True.\n        draw_line: Whether to draw lines. Defaults to True.\n        marker_size: Size of the markers. Defaults to 4.\n        line_width: Width of the lines. Defaults to 10.\n\n    Returns:\n        Scatter3D object on lines.\n    \"\"\"\n    data = []\n    for idx, line in enumerate(lines):\n        thiscolor = color if draw_line else \"rgba(0, 0, 0, 0)\"\n        if colors is not None:\n            marker_color = colors[idx]\n            thiscolor = colors[idx]\n        data.append(\n            go.Scatter3d(  # type: ignore\n                x=line[:, 0],\n                y=line[:, 1],\n                z=line[:, 2],\n                showlegend=False,\n                marker=dict(\n                    size=marker_size,\n                    color=marker_color,\n                    colorscale=\"Viridis\",\n                )\n                if draw_marker\n                else dict(color=\"rgba(0, 0, 0, 0)\"),\n                line=dict(color=thiscolor, width=line_width),\n            )\n        )\n    return data\n\n\ndef vis_dataset(\n    camera_origins: Float[Tensor, \"num_cameras 3\"],\n    ray_bundle: RayBundle,\n) -> go.FigureWidget:  # type: ignore\n    \"\"\"Visualize a dataset with plotly using our cameras and generated rays.\n\n    Args:\n        camera_origins: Tensor of camera origins.\n        ray_bundle: Ray bundle.\n\n    Returns:\n        plotly figure.\n    \"\"\"\n\n    skip = 1\n    size = 8\n    assert len(ray_bundle) < 500, \"Let's not break plotly by plotting too many rays!\"\n\n    data = []\n    data += [\n        go.Scatter3d(  # type: ignore\n            x=camera_origins[::skip, 0],\n            y=camera_origins[::skip, 1],\n            z=camera_origins[::skip, 2],\n            mode=\"markers\",\n            name=\"camera origins\",\n            marker=dict(color=\"rgba(0, 0, 0, 1)\", size=size),\n        )\n    ]\n\n    length = 2.0\n    lines = torch.stack(\n        [ray_bundle.origins, ray_bundle.origins + ray_bundle.directions * length], dim=1\n    )  # (num_rays, 2, 3)\n\n    data += get_line_segments_from_lines(lines)\n\n    layout = go.Layout(\n        autosize=False,\n        width=1000,\n        height=1000,\n        margin=go.layout.Margin(l=50, r=50, b=100, t=100, pad=4),  # type: ignore\n        scene=go.layout.Scene(  # type: ignore\n            aspectmode=\"data\",\n            camera=dict(up=dict(x=0, y=0, z=1), center=dict(x=0, y=0, z=0), eye=dict(x=1.25, y=1.25, z=1.25)),\n        ),\n    )\n    fig = go.Figure(data=data, layout=layout)  # type: ignore\n    return fig  # type: ignore\n\n\ndef get_random_color(colormap: Optional[List[str]] = None, idx: Optional[int] = None) -> str:\n    \"\"\"Get a random color from a colormap.\n\n    Args:\n        colormap: List of colors. Defaults to Plotly colors.\n        idx: Index of color to return. Defaults to None.\n\n    Returns:\n        random color string\n    \"\"\"\n    if colormap is None:\n        colormap = ex.colors.qualitative.Plotly\n    if idx is None:\n        return colormap[np.random.randint(0, len(colormap))]\n    return colormap[idx % len(colormap)]\n\n\ndef get_sphere(\n    radius: float,\n    center: Optional[Float[Tensor, \"3\"]] = None,\n    color: str = \"black\",\n    opacity: float = 1.0,\n    resolution: int = 32,\n) -> go.Mesh3d:  # type: ignore\n    \"\"\"Returns a sphere object for plotting with plotly.\n\n    Args:\n        radius: radius of sphere.\n        center: center of sphere. Defaults to origin.\n        color: color of sphere. Defaults to \"black\".\n        opacity: opacity of sphere. Defaults to 1.0.\n        resolution: resolution of sphere. Defaults to 32.\n\n    Returns:\n        sphere object.\n    \"\"\"\n    phi = torch.linspace(0, 2 * torch.pi, resolution)\n    theta = torch.linspace(-torch.pi / 2, torch.pi / 2, resolution)\n    phi, theta = torch.meshgrid(phi, theta, indexing=\"ij\")\n\n    x = torch.cos(theta) * torch.sin(phi)\n    y = torch.cos(theta) * torch.cos(phi)\n    z = torch.sin(theta)\n    pts = torch.stack((x, y, z), dim=-1)\n\n    pts *= radius\n    if center is not None:\n        pts += center\n\n    return go.Mesh3d(  # type: ignore\n        {\n            \"x\": pts[:, :, 0].flatten(),\n            \"y\": pts[:, :, 1].flatten(),\n            \"z\": pts[:, :, 2].flatten(),\n            \"alphahull\": 0,\n            \"opacity\": opacity,\n            \"color\": color,\n        }\n    )\n\n\ndef get_cube(\n    side_length: Union[float, torch.Tensor],\n    center: Optional[Float[Tensor, \"3\"]] = None,\n    color: str = \"black\",\n    opacity: float = 1.0,\n) -> go.Mesh3d:  # type: ignore\n    \"\"\"Returns a cube object for plotting with plotly.\n\n    Args:\n        side_length: side_length of cube.\n        center: center of cube.\n        color: color of cube.\n        opacity: opacity of cube.\n\n    Returns:\n        cube object.\n    \"\"\"\n\n    x = np.array([-1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0])\n    y = np.array([-1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0])\n    z = np.array([-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0])\n\n    pts = np.stack((x, y, z), axis=0)\n\n    if isinstance(side_length, float):\n        pts *= side_length / 2.0\n    else:\n        assert isinstance(side_length, torch.Tensor)\n        pts[0] *= side_length[0].item() / 2.0\n        pts[1] *= side_length[1].item() / 2.0\n        pts[2] *= side_length[2].item() / 2.0\n\n    if center is not None:\n        pts[0] = np.add(pts[0], center[0])\n        pts[1] = np.add(pts[1], center[1])\n        pts[2] = np.add(pts[2], center[2])\n\n    return go.Mesh3d(  # type: ignore\n        {\n            \"x\": pts[0],\n            \"y\": pts[1],\n            \"z\": pts[2],\n            \"alphahull\": 0,\n            \"opacity\": opacity,\n            \"color\": color,\n        }\n    )\n\n\ndef get_gaussian_ellipsiod(\n    mean: Float[Tensor, \"3\"],\n    cov: Float[Tensor, \"3 3\"],\n    n_std: int = 2,\n    color=\"lightblue\",\n    opacity: float = 0.5,\n    resolution: int = 20,\n    name: str = \"ellipse\",\n) -> go.Mesh3d:  # type: ignore\n    \"\"\"Get a plotly ellipsoid for a Gaussian.\n\n    Args:\n        mean: mean of the Gaussian.\n        cov: covariance of the Gaussian.\n        n_std: Standard deviation to visualize. Defaults to 2 (95% confidence).\n        color: Color of the ellipsoid. Defaults to None.\n        opacity: Opacity of the ellipsoid. Defaults to 0.5.\n        resolution: Resolution of the ellipsoid. Defaults to 20.\n        name: Name of the ellipsoid. Defaults to \"ellipse\".\n\n    Returns:\n        ellipsoid object.\n    \"\"\"\n\n    phi = torch.linspace(0, 2 * torch.pi, resolution)\n    theta = torch.linspace(-torch.pi / 2, torch.pi / 2, resolution)\n    phi, theta = torch.meshgrid(phi, theta, indexing=\"ij\")\n\n    x = torch.cos(theta) * torch.sin(phi)\n    y = torch.cos(theta) * torch.cos(phi)\n    z = torch.sin(theta)\n    pts = torch.stack((x, y, z), dim=-1)\n\n    eigenvals, eigenvecs = torch.linalg.eigh(cov)\n    idx = torch.sum(cov, dim=0).argsort()\n    idx = eigenvals[idx].argsort()\n    eigenvals = eigenvals[idx]\n    eigenvecs = eigenvecs[:, idx]\n\n    scaling = torch.sqrt(eigenvals) * n_std\n    pts = pts * scaling\n\n    pts = pts @ eigenvecs.t()\n\n    pts += mean\n\n    return go.Mesh3d(  # type: ignore\n        {\n            \"x\": pts[:, :, 0].flatten(),\n            \"y\": pts[:, :, 1].flatten(),\n            \"z\": pts[:, :, 2].flatten(),\n            \"alphahull\": 0,\n            \"opacity\": opacity,\n            \"color\": color,\n            \"name\": name,\n        }\n    )\n\n\ndef get_gaussian_ellipsoids_list(\n    gaussians: Gaussians, opacity: float = 0.5, color: str = \"random\", resolution: int = 20\n) -> List[Union[go.Mesh3d, go.Scatter3d]]:  # type: ignore\n    \"\"\"Get a list of plotly meshes for frustums.\n\n    Args:\n        gaussians (Gaussians): Gaussians to visualize.\n        opacity (float, optional): Opacity of the mesh. Defaults to 0.3.\n        color (str, optional): Color of the mesh. Defaults to \"random\".\n        resolution: Resolution of the mesh. Defaults to 20.\n\n    Returns:\n        List of plotly meshes\n    \"\"\"\n    data = []\n\n    vis_means = go.Scatter3d(  # type: ignore\n        x=gaussians.mean[:, 0],\n        y=gaussians.mean[:, 1],\n        z=gaussians.mean[:, 2],\n        mode=\"markers\",\n        marker=dict(size=2, color=\"black\"),\n        name=\"Means\",\n    )\n    data.append(vis_means)\n\n    for i in range(gaussians.mean.shape[0]):\n        if color == \"random\":\n            c = get_random_color()\n        else:\n            c = color\n        ellipse = get_gaussian_ellipsiod(\n            gaussians.mean[i],\n            cov=gaussians.cov[i],\n            color=c,\n            opacity=opacity,\n            resolution=resolution,\n        )\n        data.append(ellipse)\n\n    return data\n\n\ndef get_frustum_mesh(\n    frustum: Frustums, opacity: float = 0.3, color: str = \"#DC203C\", resolution: int = 20\n) -> go.Mesh3d:  # type: ignore\n    \"\"\"Get a plotly mesh for a single frustum.\n\n    Args:\n        frustum: Single frustum\n        opacity: Opacity of the mesh. Defaults to 0.3.\n        color: Color of the mesh. Defaults to \"#DC203C\".\n        resolution: Resolution of the mesh. Defaults to 20.\n\n    Returns:\n        Plotly mesh\n    \"\"\"\n\n    if frustum.ndim > 1:\n        raise ValueError(\"Frustum must be a single Frustum object.\")\n\n    base_radius = torch.sqrt(frustum.pixel_area / torch.pi)\n    f_radius = frustum.starts * base_radius\n    b_radius = frustum.ends * base_radius\n\n    x = torch.cat([torch.ones(resolution) * frustum.starts, torch.ones(resolution) * frustum.ends])\n    pts = torch.linspace(0, 2 * torch.pi, resolution)\n\n    y = torch.sin(pts)\n    z = torch.cos(pts)\n    y = torch.cat([y * f_radius, y * b_radius])\n    z = torch.cat([z * f_radius, z * b_radius])\n\n    pts = torch.stack([x, y, z], dim=-1)\n\n    forward = frustum.directions\n    up = F.normalize(torch.cross(forward, torch.tensor([0.0, 0, 1])), dim=-1)  # type: ignore\n    right = F.normalize(torch.cross(forward, up), dim=-1)  # type: ignore\n    rotation = torch.stack([forward, up, right], dim=1)\n    pts = torch.einsum(\"kj,ij->ki\", pts, rotation)\n\n    pts += frustum.origins\n    return go.Mesh3d(  # type: ignore\n        x=pts[..., 0],\n        y=pts[..., 1],\n        z=pts[..., 2],\n        opacity=opacity,\n        alphahull=0,\n        color=color,\n        flatshading=True,\n        name=\"Frustums\",\n    )\n\n\ndef get_frustums_mesh_list(\n    frustums: Frustums, opacity: float = 1.0, color: str = \"random\", resolution: int = 20\n) -> List[go.Mesh3d]:  # type: ignore\n    \"\"\"Get a list of plotly meshes for a list of frustums.\n\n    Args:\n        frustums: List of frustums\n        opacity: Opacity of the mesh. Defaults to 0.3.\n        color: Color of the mesh. Defaults to \"random\".\n        resolution: Resolution of the mesh. Defaults to 20.\n\n    Returns:\n        List of plotly meshes\n    \"\"\"\n    data = []\n    for i, frustum in enumerate(frustums.flatten()):  # type: ignore\n        if color == \"random\":\n            c = get_random_color(idx=i)\n        else:\n            c = color\n        data.append(get_frustum_mesh(frustum, opacity=opacity, color=c, resolution=resolution))\n    return data\n\n\ndef get_frustum_points(\n    frustum: Frustums, opacity: float = 1.0, color: str = \"forestgreen\", size: float = 5\n) -> go.Scatter3d:  # type: ignore\n    \"\"\"Get a set plotly points for frustums centers.\n\n    Args:\n        frustum: Frustums to visualize.\n        opacity: Opacity of the points. Defaults to 0.3.\n        color: Color of the points. Defaults to \"forestgreen\".\n        size: Size of points. Defaults to 10.\n\n    Returns:\n        Plotly points\n    \"\"\"\n\n    frustum = frustum.flatten()\n    pts = frustum.get_positions()\n\n    return go.Scatter3d(  # type: ignore\n        x=pts[..., 0],\n        y=pts[..., 1],\n        z=pts[..., 2],\n        mode=\"markers\",\n        marker=dict(\n            size=size,\n            color=color,\n            opacity=opacity,\n        ),\n        name=\"Frustums -> Positions\",\n    )\n\n\ndef get_ray_bundle_lines(\n    ray_bundle: RayBundle, length: float = 1.0, color: str = \"#DC203C\", width: float = 1\n) -> go.Scatter3d:  # type: ignore\n    \"\"\"Get a plotly line for a ray bundle.\n\n    Args:\n        ray_bundle: Ray bundle\n        length: Length of the line. Defaults to 1.0.\n        color: Color of the line.\n        width: Width of the line. Defaults to 1.\n\n    Returns:\n        Plotly lines\n    \"\"\"\n\n    origins = ray_bundle.origins.view(-1, 3)\n    directions = ray_bundle.directions.view(-1, 3)\n\n    lines = torch.empty((origins.shape[0] * 2, 3))\n    lines[0::2] = origins\n    lines[1::2] = origins + directions * length\n    return go.Scatter3d(  # type: ignore\n        x=lines[..., 0],\n        y=lines[..., 1],\n        z=lines[..., 2],\n        mode=\"lines\",\n        name=\"Ray Bundle\",\n        line=dict(color=color, width=width),\n    )\n\n\ndef vis_camera_rays(cameras: Cameras) -> go.Figure:  # type: ignore\n    \"\"\"Visualize camera rays.\n\n    Args:\n        camera: Camera to visualize.\n\n    Returns:\n        Plotly lines\n    \"\"\"\n\n    coords = cameras.get_image_coords()\n    coords[..., 0] /= cameras.image_height[0]  # All the cameras have the same image height for now\n    coords[..., 1] /= cameras.image_width[0]  # All the cameras have the same image width for now\n    coords = torch.cat([coords, torch.ones((*coords.shape[:-1], 1))], dim=-1)\n\n    ray_bundle = cameras.generate_rays(camera_indices=0)\n\n    origins = ray_bundle.origins.view(-1, 3)\n    directions = ray_bundle.directions.view(-1, 3)\n    coords = coords.view(-1, 3)\n\n    lines = torch.empty((origins.shape[0] * 2, 3))\n    lines[0::2] = origins\n    lines[1::2] = origins + directions\n\n    colors = torch.empty((coords.shape[0] * 2, 3))\n    colors[0::2] = coords\n    colors[1::2] = coords\n\n    fig = go.Figure(  # type: ignore\n        data=go.Scatter3d(  # type: ignore\n            x=lines[:, 0],\n            y=lines[:, 2],\n            z=lines[:, 1],\n            marker=dict(\n                size=4,\n                color=colors,\n            ),\n            line=dict(color=\"lightblue\", width=1),\n        )\n    )\n    fig.update_layout(\n        scene=dict(\n            xaxis=dict(title=\"x\", showspikes=False),\n            yaxis=dict(title=\"z\", showspikes=False),\n            zaxis=dict(title=\"y\", showspikes=False),\n        ),\n        margin=dict(r=0, b=10, l=0, t=10),\n        hovermode=False,\n    )\n\n    return fig\n\n\ndef get_camera_frustums(cameras: Cameras):\n    \"\"\"Returns the camera frustums for the cameras that we are using.\n\n    Args:\n        cameras: The cameras that we want to plot.\n\n    Returns:\n        A plotly scatter that can be plotted.\n    \"\"\"\n    for camera_idx in range(cameras.size):\n        json_ = cameras.to_json(camera_idx=camera_idx)\n        print(json_)\n    raise NotImplementedError\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/poses.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCommon 3D pose methods\n\"\"\"\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\n\ndef to4x4(pose: Float[Tensor, \"*batch 3 4\"]) -> Float[Tensor, \"*batch 4 4\"]:\n    \"\"\"Convert 3x4 pose matrices to a 4x4 with the addition of a homogeneous coordinate.\n\n    Args:\n        pose: Camera pose without homogenous coordinate.\n\n    Returns:\n        Camera poses with additional homogenous coordinate added.\n    \"\"\"\n    constants = torch.zeros_like(pose[..., :1, :], device=pose.device)\n    constants[..., :, 3] = 1\n    return torch.cat([pose, constants], dim=-2)\n\n\ndef inverse(pose: Float[Tensor, \"*batch 3 4\"]) -> Float[Tensor, \"*batch 3 4\"]:\n    \"\"\"Invert provided pose matrix.\n\n    Args:\n        pose: Camera pose without homogenous coordinate.\n\n    Returns:\n        Inverse of pose.\n    \"\"\"\n    R = pose[..., :3, :3]\n    t = pose[..., :3, 3:]\n    R_inverse = R.transpose(-2, -1)\n    t_inverse = -R_inverse.matmul(t)\n    return torch.cat([R_inverse, t_inverse], dim=-1)\n\n\ndef multiply(pose_a: Float[Tensor, \"*batch 3 4\"], pose_b: Float[Tensor, \"*batch 3 4\"]) -> Float[Tensor, \"*batch 3 4\"]:\n    \"\"\"Multiply two pose matrices, A @ B.\n\n    Args:\n        pose_a: Left pose matrix, usually a transformation applied to the right.\n        pose_b: Right pose matrix, usually a camera pose that will be transformed by pose_a.\n\n    Returns:\n        Camera pose matrix where pose_a was applied to pose_b.\n    \"\"\"\n    R1, t1 = pose_a[..., :3, :3], pose_a[..., :3, 3:]\n    R2, t2 = pose_b[..., :3, :3], pose_b[..., :3, 3:]\n    R = R1.matmul(R2)\n    t = t1 + R1.matmul(t2)\n    return torch.cat([R, t], dim=-1)\n\n\ndef normalize(poses: Float[Tensor, \"*batch 3 4\"]) -> Float[Tensor, \"*batch 3 4\"]:\n    \"\"\"Normalize the XYZs of poses to fit within a unit cube ([-1, 1]). Note: This operation is not in-place.\n\n    Args:\n        poses: A collection of poses to be normalized.\n\n    Returns;\n        Normalized collection of poses.\n    \"\"\"\n    pose_copy = torch.clone(poses)\n    pose_copy[..., :3, 3] /= torch.max(torch.abs(poses[..., :3, 3]))\n\n    return pose_copy\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/printing.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"A collection of common strings and print statements used throughout the codebase.\"\"\"\n\nfrom math import floor, log\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef print_tcnn_speed_warning(module_name: str):\n    \"\"\"Prints a warning about the speed of the TCNN.\"\"\"\n    CONSOLE.line()\n    CONSOLE.print(f\"[bold yellow]WARNING: Using a slow implementation for the {module_name} module. \")\n    CONSOLE.print(\n        \"[bold yellow]:person_running: :person_running: \"\n        + \"Install tcnn for speedups :person_running: :person_running:\"\n    )\n    CONSOLE.print(\"[yellow]pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch\")\n    CONSOLE.line()\n\n\ndef human_format(num):\n    \"\"\"Format a number in a more human readable way\n\n    Args:\n        num: number to format\n    \"\"\"\n    units = [\"\", \"K\", \"M\", \"B\", \"T\", \"P\"]\n    k = 1000.0\n    magnitude = int(floor(log(num, k)))\n    return f\"{(num / k**magnitude):.2f} {units[magnitude]}\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/profiler.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nProfiler base class and functionality\n\"\"\"\n\nfrom __future__ import annotations\n\nimport functools\nimport os\nimport time\nimport typing\nfrom collections import deque\nfrom contextlib import ContextDecorator, contextmanager\nfrom pathlib import Path\nfrom typing import Any, Callable, ContextManager, Dict, List, Optional, Tuple, TypeVar, Union, overload\n\nfrom torch.profiler import ProfilerActivity, profile, record_function\n\nfrom nerfstudio.configs import base_config as cfg\nfrom nerfstudio.utils import comms\nfrom nerfstudio.utils.decorators import check_main_thread, check_profiler_enabled, decorate_all\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\nPROFILER = []\nPYTORCH_PROFILER = None\n\n\nCallableT = TypeVar(\"CallableT\", bound=Callable)\n\n\n@overload\ndef time_function(name_or_func: CallableT) -> CallableT: ...\n\n\n@overload\ndef time_function(name_or_func: str) -> ContextManager[Any]: ...\n\n\ndef time_function(name_or_func: Union[CallableT, str]) -> Union[CallableT, ContextManager[Any]]:\n    \"\"\"Profile a function or block of code. Can be used either to create a context or to wrap a function.\n\n    Args:\n        name_or_func: Either the name of a context or function to profile.\n\n    Returns:\n        A wrapped function or context to use in a `with` statement.\n    \"\"\"\n    return _TimeFunction(name_or_func)\n\n\nclass _TimeFunction(ContextDecorator):\n    \"\"\"Decorator/Context manager: time a function call or a block of code\"\"\"\n\n    def __init__(self, name: Union[str, Callable]):\n        # NOTE: This is a workaround for the fact that the __new__ method of a ContextDecorator\n        # is not picked up by VSCode intellisense\n        self.name: str = typing.cast(str, name)\n        self.start = None\n        self._profiler_contexts = deque()\n        self._function_call_args: Optional[Tuple[Tuple, Dict]] = None\n\n    def __new__(cls, func: Union[str, Callable]):\n        instance = super().__new__(cls)\n        if isinstance(func, str):\n            instance.__init__(func)\n            return instance\n        if callable(func):\n            instance.__init__(func.__qualname__)\n            return instance(func)\n        raise ValueError(f\"Argument func of type {type(func)} is not a string or a callable.\")\n\n    def __enter__(self):\n        self.start = time.time()\n        if PYTORCH_PROFILER is not None:\n            args, kwargs = tuple(), {}\n            if self._function_call_args is not None:\n                args, kwargs = self._function_call_args\n            ctx = PYTORCH_PROFILER.record_function(self.name, *args, **kwargs)\n            ctx.__enter__()\n            self._profiler_contexts.append(ctx)\n            if self._function_call_args is None:\n                ctx = record_function(self.name)\n                ctx.__enter__()\n                self._profiler_contexts.append(ctx)\n\n    def __exit__(self, *args, **kwargs):\n        while self._profiler_contexts:\n            context = self._profiler_contexts.pop()\n            context.__exit__(*args, **kwargs)\n        if PROFILER:\n            PROFILER[0].update_time(self.name, self.start, time.time())\n\n    def __call__(self, func: Callable):\n        @functools.wraps(func)\n        def inner(*args, **kwargs):\n            self._function_call_args = (args, kwargs)\n            with self:\n                out = func(*args, **kwargs)\n            self._function_call_args = None\n            return out\n\n        return inner\n\n\ndef flush_profiler(config: cfg.LoggingConfig):\n    \"\"\"Method that checks if profiler is enabled before flushing\"\"\"\n    if config.profiler != \"none\" and PROFILER:\n        PROFILER[0].print_profile()\n\n\ndef setup_profiler(config: cfg.LoggingConfig, log_dir: Path):\n    \"\"\"Initialization of profilers\"\"\"\n    global PYTORCH_PROFILER\n    if comms.is_main_process():\n        PROFILER.append(Profiler(config))\n        if config.profiler == \"pytorch\":\n            PYTORCH_PROFILER = PytorchProfiler(log_dir)\n\n\nclass PytorchProfiler:\n    \"\"\"\n    Wrapper for Pytorch Profiler\n    \"\"\"\n\n    def __init__(self, output_path: Path, trace_steps: Optional[List[int]] = None):\n        self.output_path = output_path / \"profiler_traces\"\n        if trace_steps is None:\n            # Some arbitrary steps which likely do not overlap with steps usually chosen to run callbacks\n            trace_steps = [12, 17]\n        self.trace_steps = trace_steps\n\n    @contextmanager\n    def record_function(self, function: str, *args, **_kwargs):\n        \"\"\"\n        Context manager that records a function call and saves the trace to a json file.\n        Traced functions are: train_iteration, eval_iteration\n        \"\"\"\n        if function.endswith(\"train_iteration\") or function.endswith(\"eval_iteration\"):\n            step = args[1]\n            assert isinstance(step, int)\n            assert len(args) == 2\n            stage = function.split(\".\")[-1].split(\"_\")[0]\n            if step in self.trace_steps:\n                launch_kernel_blocking = self.trace_steps.index(step) % 2 == 0\n                backup_lb_var = \"\"\n                if launch_kernel_blocking:\n                    backup_lb_var = os.environ.get(\"CUDA_LAUNCH_BLOCKING\", \"\")\n                    os.environ[\"CUDA_LAUNCH_BLOCKING\"] = \"1\"\n                with profile(\n                    activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],\n                    record_shapes=True,\n                    with_stack=True,\n                    profile_memory=True,\n                ) as prof:\n                    yield None\n                if launch_kernel_blocking:\n                    os.environ[\"CUDA_LAUNCH_BLOCKING\"] = backup_lb_var\n                self.output_path.mkdir(parents=True, exist_ok=True)\n                prof.export_chrome_trace(\n                    str(self.output_path / f\"trace_{stage}_{step}{'_blocking' if launch_kernel_blocking else ''}.json\")\n                )\n                return\n        # Functions are recorded automatically\n        yield None\n        return\n\n\n@decorate_all([check_profiler_enabled, check_main_thread])\nclass Profiler:\n    \"\"\"Profiler class\"\"\"\n\n    def __init__(self, config: cfg.LoggingConfig):\n        self.config = config\n        self.profiler_dict = {}\n\n    def update_time(self, func_name: str, start_time: float, end_time: float):\n        \"\"\"update the profiler dictionary with running averages of durations\n\n        Args:\n            func_name: the function name that is being profiled\n            start_time: the start time when function is called\n            end_time: the end time when function terminated\n        \"\"\"\n        val = end_time - start_time\n        func_dict = self.profiler_dict.get(func_name, {\"val\": 0, \"step\": 0})\n        prev_val = func_dict[\"val\"]\n        prev_step = func_dict[\"step\"]\n        self.profiler_dict[func_name] = {\"val\": (prev_val * prev_step + val) / (prev_step + 1), \"step\": prev_step + 1}\n\n    def print_profile(self):\n        \"\"\"helper to print out the profiler stats\"\"\"\n        CONSOLE.print(\"Printing profiling stats, from longest to shortest duration in seconds\")\n        sorted_keys = sorted(\n            self.profiler_dict.keys(),\n            key=lambda k: self.profiler_dict[k][\"val\"],\n            reverse=True,\n        )\n        for k in sorted_keys:\n            val = f\"{self.profiler_dict[k]['val']:0.4f}\"\n            CONSOLE.print(f\"{k:<20}: {val:<20}\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/rich_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Additional rich ui components\"\"\"\n\nfrom contextlib import nullcontext\nfrom typing import Optional\n\nfrom rich.console import Console\nfrom rich.progress import BarColumn, Progress, ProgressColumn, Task, TaskProgressColumn, TextColumn, TimeRemainingColumn\nfrom rich.text import Text\n\nCONSOLE = Console(width=120)\n\n\nclass ItersPerSecColumn(ProgressColumn):\n    \"\"\"Renders the iterations per second for a progress bar.\"\"\"\n\n    def __init__(self, suffix=\"it/s\") -> None:\n        super().__init__()\n        self.suffix = suffix\n\n    def render(self, task: Task) -> Text:\n        \"\"\"Show data transfer speed.\"\"\"\n        speed = task.finished_speed or task.speed\n        if speed is None:\n            return Text(\"?\", style=\"progress.data.speed\")\n        return Text(f\"{speed:.2f} {self.suffix}\", style=\"progress.data.speed\")\n\n\ndef status(msg: str, spinner: str = \"bouncingBall\", verbose: bool = False):\n    \"\"\"A context manager that does nothing is verbose is True. Otherwise it hides logs under a message.\n\n    Args:\n        msg: The message to log.\n        spinner: The spinner to use.\n        verbose: If True, print all logs, else hide them.\n    \"\"\"\n    if verbose:\n        return nullcontext()\n    return CONSOLE.status(msg, spinner=spinner)\n\n\ndef get_progress(description: str, suffix: Optional[str] = None):\n    \"\"\"Helper function to return a rich Progress object.\"\"\"\n    progress_list = [TextColumn(description), BarColumn(), TaskProgressColumn(show_speed=True)]\n    progress_list += [ItersPerSecColumn(suffix=suffix)] if suffix else []\n    progress_list += [TimeRemainingColumn(elapsed_when_finished=True, compact=True)]\n    progress = Progress(*progress_list)\n    return progress\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/scripts.py",
    "content": "\"\"\"Helpers for running script commands.\"\"\"\n# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport subprocess\nimport sys\nfrom typing import Optional\n\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef run_command(cmd: str, verbose=False) -> Optional[str]:\n    \"\"\"Runs a command and returns the output.\n\n    Args:\n        cmd: Command to run.\n        verbose: If True, logs the output of the command.\n    Returns:\n        The output of the command if return_output is True, otherwise None.\n    \"\"\"\n    out = subprocess.run(cmd, capture_output=not verbose, shell=True, check=False)\n    if out.returncode != 0:\n        CONSOLE.rule(\"[bold red] :skull: :skull: :skull: ERROR :skull: :skull: :skull: \", style=\"red\")\n        CONSOLE.print(f\"[bold red]Error running command: {cmd}\")\n        CONSOLE.rule(style=\"red\")\n        CONSOLE.print(out.stderr.decode(\"utf-8\"))\n        sys.exit(1)\n    if out.stdout is not None:\n        return out.stdout.decode(\"utf-8\")\n    return out\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/tensor_dataclass.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Tensor dataclass\"\"\"\n\nimport dataclasses\nfrom copy import deepcopy\nfrom typing import Callable, Dict, List, NoReturn, Optional, Tuple, TypeVar, Union\n\nimport numpy as np\nimport torch\n\nTensorDataclassT = TypeVar(\"TensorDataclassT\", bound=\"TensorDataclass\")\n\n\nclass TensorDataclass:\n    \"\"\"@dataclass of tensors with the same size batch. Allows indexing and standard tensor ops.\n    Fields that are not Tensors will not be batched unless they are also a TensorDataclass.\n    Any fields that are dictionaries will have their Tensors or TensorDataclasses batched, and\n    dictionaries will have their tensors or TensorDataclasses considered in the initial broadcast.\n    Tensor fields must have at least 1 dimension, meaning that you must convert a field like torch.Tensor(1)\n    to torch.Tensor([1])\n\n    Example:\n\n    .. code-block:: python\n\n        @dataclass\n        class TestTensorDataclass(TensorDataclass):\n            a: torch.Tensor\n            b: torch.Tensor\n            c: torch.Tensor = None\n\n        # Create a new tensor dataclass with batch size of [2,3,4]\n        test = TestTensorDataclass(a=torch.ones((2, 3, 4, 2)), b=torch.ones((4, 3)))\n\n        test.shape  # [2, 3, 4]\n        test.a.shape  # [2, 3, 4, 2]\n        test.b.shape  # [2, 3, 4, 3]\n\n        test.reshape((6,4)).shape  # [6, 4]\n        test.flatten().shape  # [24,]\n\n        test[..., 0].shape  # [2, 3]\n        test[:, 0, :].shape  # [2, 4]\n    \"\"\"\n\n    _shape: tuple\n\n    # A mapping from field-name (str): n (int)\n    # Any field OR any key in a dictionary field with this name (field-name) and a corresponding\n    # torch.Tensor will be assumed to have n dimensions after the batch dims. These n final dimensions\n    # will remain the same shape when doing reshapes, broadcasting, etc on the tensordataclass\n    _field_custom_dimensions: Dict[str, int] = {}\n\n    def __post_init__(self) -> None:\n        \"\"\"Finishes setting up the TensorDataclass\n\n        This will 1) find the broadcasted shape and 2) broadcast all fields to this shape 3)\n        set _shape to be the broadcasted shape.\n        \"\"\"\n        for k, v in self._field_custom_dimensions.items():\n            assert (\n                isinstance(v, int) and v > 1\n            ), f\"Custom dimensions must be an integer greater than 1, since 1 is the default, received {k}: {v}\"\n\n        # Shim to prevent pyright from narrowing `self` to DataclassInstance.\n        self_dc = self\n        if not dataclasses.is_dataclass(self_dc):\n            raise TypeError(\"TensorDataclass must be a dataclass\")\n\n        batch_shapes = self._get_dict_batch_shapes({f.name: getattr(self, f.name) for f in dataclasses.fields(self_dc)})\n        if len(batch_shapes) == 0:\n            raise ValueError(\"TensorDataclass must have at least one tensor\")\n        batch_shape = torch.broadcast_shapes(*batch_shapes)\n\n        broadcasted_fields = self._broadcast_dict_fields(\n            {f.name: getattr(self, f.name) for f in dataclasses.fields(self_dc)}, batch_shape\n        )\n        for f, v in broadcasted_fields.items():\n            object.__setattr__(self, f, v)\n\n        object.__setattr__(self, \"_shape\", batch_shape)\n\n    def _get_dict_batch_shapes(self, dict_: Dict) -> List:\n        \"\"\"Returns batch shapes of all tensors in a dictionary\n\n        Args:\n            dict_: The dictionary to get the batch shapes of.\n\n        Returns:\n            The batch shapes of all tensors in the dictionary.\n        \"\"\"\n        batch_shapes = []\n        for k, v in dict_.items():\n            if isinstance(v, torch.Tensor):\n                if isinstance(self._field_custom_dimensions, dict) and k in self._field_custom_dimensions:\n                    batch_shapes.append(v.shape[: -self._field_custom_dimensions[k]])\n                else:\n                    batch_shapes.append(v.shape[:-1])\n            elif isinstance(v, TensorDataclass):\n                batch_shapes.append(v.shape)\n            elif isinstance(v, Dict):\n                batch_shapes.extend(self._get_dict_batch_shapes(v))\n        return batch_shapes\n\n    def _broadcast_dict_fields(self, dict_: Dict, batch_shape) -> Dict:\n        \"\"\"Broadcasts all tensors in a dictionary according to batch_shape\n\n        Args:\n            dict_: The dictionary to broadcast.\n\n        Returns:\n            The broadcasted dictionary.\n        \"\"\"\n        new_dict = {}\n        for k, v in dict_.items():\n            if isinstance(v, torch.Tensor):\n                # Apply field-specific custom dimensions.\n                if isinstance(self._field_custom_dimensions, dict) and k in self._field_custom_dimensions:\n                    new_dict[k] = v.broadcast_to(\n                        (\n                            *batch_shape,\n                            *v.shape[-self._field_custom_dimensions[k] :],\n                        )\n                    )\n                else:\n                    new_dict[k] = v.broadcast_to((*batch_shape, v.shape[-1]))\n            elif isinstance(v, TensorDataclass):\n                new_dict[k] = v.broadcast_to(batch_shape)\n            elif isinstance(v, Dict):\n                new_dict[k] = self._broadcast_dict_fields(v, batch_shape)\n            else:\n                # Don't broadcast the remaining fields\n                new_dict[k] = v\n        return new_dict\n\n    def __getitem__(self: TensorDataclassT, indices) -> TensorDataclassT:\n        if isinstance(indices, (torch.Tensor)):\n            return self._apply_fn_to_fields(lambda x: x[indices])\n        if isinstance(indices, (int, slice, type(Ellipsis))):\n            indices = (indices,)\n        assert isinstance(indices, tuple)\n\n        def tensor_fn(x):\n            return x[indices + (slice(None),)]\n\n        def dataclass_fn(x):\n            return x[indices]\n\n        def custom_tensor_dims_fn(k, v):\n            custom_dims = self._field_custom_dimensions[k]\n            return v[indices + ((slice(None),) * custom_dims)]\n\n        return self._apply_fn_to_fields(tensor_fn, dataclass_fn, custom_tensor_dims_fn=custom_tensor_dims_fn)\n\n    def __setitem__(self, indices, value) -> NoReturn:\n        raise RuntimeError(\"Index assignment is not supported for TensorDataclass\")\n\n    def __len__(self) -> int:\n        if len(self._shape) == 0:\n            raise TypeError(\"len() of a 0-d tensor\")\n        return self.shape[0]\n\n    def __bool__(self) -> bool:\n        if len(self) == 0:\n            raise ValueError(\n                f\"The truth value of {self.__class__.__name__} when `len(x) == 0` \"\n                \"is ambiguous. Use `len(x)` or `x is not None`.\"\n            )\n        return True\n\n    @property\n    def shape(self) -> Tuple[int, ...]:\n        \"\"\"Returns the batch shape of the tensor dataclass.\"\"\"\n        return self._shape\n\n    @property\n    def size(self) -> int:\n        \"\"\"Returns the number of elements in the tensor dataclass batch dimension.\"\"\"\n        if len(self._shape) == 0:\n            return 1\n        return int(np.prod(self._shape))\n\n    @property\n    def ndim(self) -> int:\n        \"\"\"Returns the number of dimensions of the tensor dataclass.\"\"\"\n        return len(self._shape)\n\n    def reshape(self: TensorDataclassT, shape: Tuple[int, ...]) -> TensorDataclassT:\n        \"\"\"Returns a new TensorDataclass with the same data but with a new shape.\n\n        This should deepcopy as well.\n\n        Args:\n            shape: The new shape of the tensor dataclass.\n\n        Returns:\n            A new TensorDataclass with the same data but with a new shape.\n        \"\"\"\n        if isinstance(shape, int):\n            shape = (shape,)\n\n        def tensor_fn(x):\n            return x.reshape((*shape, x.shape[-1]))\n\n        def dataclass_fn(x):\n            return x.reshape(shape)\n\n        def custom_tensor_dims_fn(k, v):\n            custom_dims = self._field_custom_dimensions[k]\n            return v.reshape((*shape, *v.shape[-custom_dims:]))\n\n        return self._apply_fn_to_fields(tensor_fn, dataclass_fn, custom_tensor_dims_fn=custom_tensor_dims_fn)\n\n    def flatten(self: TensorDataclassT) -> TensorDataclassT:\n        \"\"\"Returns a new TensorDataclass with flattened batch dimensions\n\n        Returns:\n            TensorDataclass: A new TensorDataclass with the same data but with a new shape.\n        \"\"\"\n        return self.reshape((-1,))\n\n    def broadcast_to(self: TensorDataclassT, shape: Union[torch.Size, Tuple[int, ...]]) -> TensorDataclassT:\n        \"\"\"Returns a new TensorDataclass broadcast to new shape.\n\n        Changes to the original tensor dataclass should effect the returned tensor dataclass,\n        meaning it is NOT a deepcopy, and they are still linked.\n\n        Args:\n            shape: The new shape of the tensor dataclass.\n\n        Returns:\n            A new TensorDataclass with the same data but with a new shape.\n        \"\"\"\n\n        def custom_tensor_dims_fn(k, v):\n            custom_dims = self._field_custom_dimensions[k]\n            return v.broadcast_to((*shape, *v.shape[-custom_dims:]))\n\n        return self._apply_fn_to_fields(\n            lambda x: x.broadcast_to((*shape, x.shape[-1])), custom_tensor_dims_fn=custom_tensor_dims_fn\n        )\n\n    def to(self: TensorDataclassT, device) -> TensorDataclassT:\n        \"\"\"Returns a new TensorDataclass with the same data but on the specified device.\n\n        Args:\n            device: The device to place the tensor dataclass.\n\n        Returns:\n            A new TensorDataclass with the same data but on the specified device.\n        \"\"\"\n        return self._apply_fn_to_fields(lambda x: x.to(device))\n\n    def pin_memory(self: TensorDataclassT) -> TensorDataclassT:\n        \"\"\"Pins the tensor dataclass memory\n\n        Returns:\n            TensorDataclass: A new TensorDataclass with the same data but pinned.\n        \"\"\"\n        return self._apply_fn_to_fields(lambda x: x.pin_memory())\n\n    def _apply_fn_to_fields(\n        self: TensorDataclassT,\n        fn: Callable,\n        dataclass_fn: Optional[Callable] = None,\n        custom_tensor_dims_fn: Optional[Callable] = None,\n    ) -> TensorDataclassT:\n        \"\"\"Applies a function to all fields of the tensor dataclass.\n\n        TODO: Someone needs to make a high level design choice for whether not not we want this\n        to apply the function to any fields in arbitray superclasses. This is an edge case until we\n        upgrade to python 3.10 and dataclasses can actually be subclassed with vanilla python and no\n        janking, but if people try to jank some subclasses that are grandchildren of TensorDataclass\n        (imagine if someone tries to subclass the RayBundle) this will matter even before upgrading\n        to 3.10 . Currently we aren't going to be able to work properly for grandchildren, but you\n        want to use self.__dict__ if you want to apply this to grandchildren instead of our dictionary\n        from dataclasses.fields(self) as we do below and in other places.\n\n        Args:\n            fn: The function to apply to tensor fields.\n            dataclass_fn: The function to apply to TensorDataclass fields.\n\n        Returns:\n            A new TensorDataclass with the same data but with a new shape.\n        \"\"\"\n\n        self_dc = self\n        assert dataclasses.is_dataclass(self_dc)\n\n        new_fields = self._apply_fn_to_dict(\n            {f.name: getattr(self, f.name) for f in dataclasses.fields(self_dc)},\n            fn,\n            dataclass_fn,\n            custom_tensor_dims_fn,\n        )\n\n        return dataclasses.replace(self_dc, **new_fields)\n\n    def _apply_fn_to_dict(\n        self,\n        dict_: Dict,\n        fn: Callable,\n        dataclass_fn: Optional[Callable] = None,\n        custom_tensor_dims_fn: Optional[Callable] = None,\n    ) -> Dict:\n        \"\"\"A helper function for _apply_fn_to_fields, applying a function to all fields of dict_\n\n        Args:\n            dict_: The dictionary to apply the function to.\n            fn: The function to apply to tensor fields.\n            dataclass_fn: The function to apply to TensorDataclass fields.\n\n        Returns:\n            A new dictionary with the same data but with a new shape. Will deep copy\"\"\"\n\n        field_names = dict_.keys()\n        new_dict = {}\n        for f in field_names:\n            v = dict_[f]\n            if v is not None:\n                if isinstance(v, TensorDataclass) and dataclass_fn is not None:\n                    new_dict[f] = dataclass_fn(v)\n                # This is the case when we have a custom dimensions tensor\n                elif (\n                    isinstance(v, torch.Tensor)\n                    and f in self._field_custom_dimensions\n                    and custom_tensor_dims_fn is not None\n                ):\n                    new_dict[f] = custom_tensor_dims_fn(f, v)\n                elif isinstance(v, (torch.Tensor, TensorDataclass)):\n                    new_dict[f] = fn(v)\n                elif isinstance(v, Dict):\n                    new_dict[f] = self._apply_fn_to_dict(v, fn, dataclass_fn)\n                else:\n                    new_dict[f] = deepcopy(v)\n\n        return new_dict\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/utils/writer.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nGeneric Writer class\n\"\"\"\n\nfrom __future__ import annotations\n\nimport enum\nimport os\nfrom abc import abstractmethod\nfrom pathlib import Path\nfrom time import time\nfrom typing import Any, Dict, List, Optional, Union\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\nfrom torch.utils.tensorboard import SummaryWriter\n\nfrom nerfstudio.configs import base_config as cfg\nfrom nerfstudio.utils.decorators import check_main_thread, decorate_all\nfrom nerfstudio.utils.printing import human_format\nfrom nerfstudio.utils.rich_utils import CONSOLE\n\n\ndef to8b(x):\n    \"\"\"Converts a torch tensor to 8 bit\"\"\"\n    return (255 * torch.clamp(x, min=0, max=1)).to(torch.uint8)\n\n\nEVENT_WRITERS = []\nEVENT_STORAGE = []\nGLOBAL_BUFFER = {}\n\n\nclass EventName(enum.Enum):\n    \"\"\"Names of possible events that can be logged via Local Writer for convenience.\n    see config/logging/default_logging.yaml\"\"\"\n\n    ITER_TRAIN_TIME = \"Train Iter (time)\"\n    TOTAL_TRAIN_TIME = \"Train Total (time)\"\n    ETA = \"ETA (time)\"\n    TRAIN_RAYS_PER_SEC = \"Train Rays / Sec\"\n    TEST_RAYS_PER_SEC = \"Test Rays / Sec\"\n    VIS_RAYS_PER_SEC = \"Vis Rays / Sec\"\n    CURR_TEST_PSNR = \"Test PSNR\"\n\n\nclass EventType(enum.Enum):\n    \"\"\"Possible Event types and their associated write function\"\"\"\n\n    IMAGE = \"write_image\"\n    SCALAR = \"write_scalar\"\n    DICT = \"write_scalar_dict\"\n    CONFIG = \"write_config\"\n\n\n@check_main_thread\ndef put_image(name, image: Float[Tensor, \"H W C\"], step: int):\n    \"\"\"Setter function to place images into the queue to be written out\n\n    Args:\n        image: image to write out\n        step: step associated with image\n    \"\"\"\n    if isinstance(name, EventName):\n        name = name.value\n\n    EVENT_STORAGE.append({\"name\": name, \"write_type\": EventType.IMAGE, \"event\": image.detach().cpu(), \"step\": step})\n\n\n@check_main_thread\ndef put_scalar(name: str, scalar: Any, step: int):\n    \"\"\"Setter function to place scalars into the queue to be written out\n\n    Args:\n        name: name of scalar\n        scalar: value\n        step: step associated with scalar\n    \"\"\"\n    if isinstance(name, EventName):\n        name = name.value\n\n    EVENT_STORAGE.append({\"name\": name, \"write_type\": EventType.SCALAR, \"event\": scalar, \"step\": step})\n\n\n@check_main_thread\ndef put_dict(name: str, scalar_dict: Dict[str, Any], step: int):\n    \"\"\"Setter function to place a dictionary of scalars into the queue to be written out\n\n    Args:\n        name: name of scalar dictionary\n        scalar_dict: values to write out\n        step: step associated with dict\n    \"\"\"\n    EVENT_STORAGE.append({\"name\": name, \"write_type\": EventType.DICT, \"event\": scalar_dict, \"step\": step})\n\n\n@check_main_thread\ndef put_config(name: str, config_dict: Dict[str, Any], step: int):\n    \"\"\"Setter function to place a dictionary of scalars into the queue to be written out\n\n    Args:\n        name: name of scalar dictionary\n        scalar_dict: values to write out\n        step: step associated with dict\n    \"\"\"\n    EVENT_STORAGE.append({\"name\": name, \"write_type\": EventType.CONFIG, \"event\": config_dict, \"step\": step})\n\n\n@check_main_thread\ndef put_time(name: str, duration: float, step: int, avg_over_steps: bool = True, update_eta: bool = False):\n    \"\"\"Setter function to place a time element into the queue to be written out.\n    Processes the time info according to the options.\n\n    Args:\n        name: name of time item\n        duration: value\n        step: step associated with value\n        avg_over_steps: if True, calculate and record a running average of the times\n        update_eta: if True, update the ETA. should only be set for the training iterations/s\n    \"\"\"\n    if isinstance(name, EventName):\n        name = name.value\n\n    if avg_over_steps:\n        GLOBAL_BUFFER[\"step\"] = step\n        curr_event = GLOBAL_BUFFER[\"events\"].get(name, {\"buffer\": [], \"avg\": 0})\n        curr_buffer = curr_event[\"buffer\"]\n        if len(curr_buffer) >= GLOBAL_BUFFER[\"max_buffer_size\"]:\n            curr_buffer.pop(0)\n        curr_buffer.append(duration)\n        curr_avg = sum(curr_buffer) / len(curr_buffer)\n        put_scalar(name, curr_avg, step)\n        GLOBAL_BUFFER[\"events\"][name] = {\"buffer\": curr_buffer, \"avg\": curr_avg}\n    else:\n        put_scalar(name, duration, step)\n\n    if update_eta:\n        # NOTE: eta should be called with avg train iteration time\n        remain_iter = GLOBAL_BUFFER[\"max_iter\"] - step\n        remain_time = remain_iter * GLOBAL_BUFFER[\"events\"][name][\"avg\"]\n        put_scalar(EventName.ETA, remain_time, step)\n        GLOBAL_BUFFER[\"events\"][EventName.ETA.value] = _format_time(remain_time)\n\n\n@check_main_thread\ndef write_out_storage():\n    \"\"\"Function that writes all the events in storage to all the writer locations\"\"\"\n    for writer in EVENT_WRITERS:\n        if isinstance(writer, LocalWriter) and len(EVENT_STORAGE) > 0:\n            writer.write_stats_log(EVENT_STORAGE[0][\"step\"])\n            continue\n        for event in EVENT_STORAGE:\n            write_func = getattr(writer, event[\"write_type\"].value)\n            write_func(event[\"name\"], event[\"event\"], event[\"step\"])\n\n    EVENT_STORAGE.clear()\n\n\ndef setup_local_writer(config: cfg.LoggingConfig, max_iter: int, banner_messages: Optional[List[str]] = None) -> None:\n    \"\"\"Initialization of all event writers specified in config\n\n    Args:\n        config: configuration to instantiate loggers\n        max_iter: maximum number of train iterations\n        banner_messages: list of messages to always display at bottom of screen\n    \"\"\"\n    if config.local_writer.enable:\n        curr_writer = config.local_writer.setup(banner_messages=banner_messages)\n        EVENT_WRITERS.append(curr_writer)\n    else:\n        CONSOLE.log(\"disabled local writer\")\n\n    # configure all the global buffer basic information\n    GLOBAL_BUFFER[\"max_iter\"] = max_iter\n    GLOBAL_BUFFER[\"max_buffer_size\"] = config.max_buffer_size\n    GLOBAL_BUFFER[\"steps_per_log\"] = config.steps_per_log\n    GLOBAL_BUFFER[\"events\"] = {}\n\n\ndef is_initialized():\n    \"\"\"\n    Returns True after setup_local_writer was called\n    \"\"\"\n    return \"events\" in GLOBAL_BUFFER\n\n\n@check_main_thread\ndef setup_event_writer(\n    is_wandb_enabled: bool,\n    is_tensorboard_enabled: bool,\n    is_comet_enabled: bool,\n    log_dir: Path,\n    experiment_name: str,\n    project_name: str = \"nerfstudio-project\",\n) -> None:\n    \"\"\"Initialization of all event writers specified in config\n    Args:\n        config: configuration to instantiate loggers\n        max_iter: maximum number of train iterations\n        banner_messages: list of messages to always display at bottom of screen\n    \"\"\"\n    using_event_writer = False\n\n    if is_comet_enabled:\n        curr_writer = CometWriter(log_dir=log_dir, experiment_name=experiment_name, project_name=project_name)\n        EVENT_WRITERS.append(curr_writer)\n        using_event_writer = True\n    if is_wandb_enabled:\n        curr_writer = WandbWriter(log_dir=log_dir, experiment_name=experiment_name, project_name=project_name)\n        EVENT_WRITERS.append(curr_writer)\n        using_event_writer = True\n    if is_tensorboard_enabled:\n        curr_writer = TensorboardWriter(log_dir=log_dir)\n        EVENT_WRITERS.append(curr_writer)\n        using_event_writer = True\n    if using_event_writer:\n        string = f\"logging events to: {log_dir}\"\n    else:\n        string = \"Disabled comet/tensorboard/wandb event writers\"\n    CONSOLE.print(f\"[bold yellow]{string}\")\n\n\nclass Writer:\n    \"\"\"Writer class\"\"\"\n\n    @abstractmethod\n    def write_image(self, name: str, image: Float[Tensor, \"H W C\"], step: int) -> None:\n        \"\"\"method to write out image\n\n        Args:\n            name: data identifier\n            image: rendered image to write\n            step: the time step to log\n        \"\"\"\n        raise NotImplementedError\n\n    @abstractmethod\n    def write_scalar(self, name: str, scalar: Union[float, torch.Tensor], step: int) -> None:\n        \"\"\"Required method to write a single scalar value to the logger\n\n        Args:\n            name: data identifier\n            scalar: value to write out\n            step: the time step to log\n        \"\"\"\n        raise NotImplementedError\n\n    @check_main_thread\n    def write_scalar_dict(self, name: str, scalar_dict: Dict[str, Any], step: int) -> None:\n        \"\"\"Function that writes out all scalars from a given dictionary to the logger\n\n        Args:\n            scalar_dict: dictionary containing all scalar values with key names and quantities\n            step: the time step to log\n        \"\"\"\n        for key, scalar in scalar_dict.items():\n            self.write_scalar(name + \"/\" + key, float(scalar), step)\n\n\nclass TimeWriter:\n    \"\"\"Timer context manager that calculates duration around wrapped functions\"\"\"\n\n    def __init__(self, writer, name, step=None, write=True):\n        self.writer = writer\n        self.name = name\n        self.step = step\n        self.write = write\n\n        self.start: float = 0.0\n        self.duration: float = 0.0\n\n    def __enter__(self):\n        self.start = time()\n        return self\n\n    def __exit__(self, *args):\n        self.duration = time() - self.start\n        update_step = self.step is not None\n        if self.write and is_initialized():\n            self.writer.put_time(\n                name=self.name,\n                duration=self.duration,\n                step=self.step if update_step else GLOBAL_BUFFER[\"max_iter\"],\n                avg_over_steps=update_step,\n                update_eta=self.name == EventName.ITER_TRAIN_TIME,\n            )\n\n\n@decorate_all([check_main_thread])\nclass WandbWriter(Writer):\n    \"\"\"WandDB Writer Class\"\"\"\n\n    def __init__(self, log_dir: Path, experiment_name: str, project_name: str = \"nerfstudio-project\"):\n        import wandb  # wandb is slow to import, so we only import it if we need it.\n\n        wandb.init(\n            project=os.environ.get(\"WANDB_PROJECT\", project_name),\n            dir=os.environ.get(\"WANDB_DIR\", str(log_dir)),\n            name=os.environ.get(\"WANDB_NAME\", experiment_name),\n            reinit=True,\n        )\n\n    def write_image(self, name: str, image: Float[Tensor, \"H W C\"], step: int) -> None:\n        import wandb  # wandb is slow to import, so we only import it if we need it.\n\n        image = torch.permute(image, (2, 0, 1))\n        wandb.log({name: wandb.Image(image)}, step=step)\n\n    def write_scalar(self, name: str, scalar: Union[float, torch.Tensor], step: int) -> None:\n        import wandb  # wandb is slow to import, so we only import it if we need it.\n\n        wandb.log({name: scalar}, step=step)\n\n    def write_config(self, name: str, config_dict: Dict[str, Any], step: int):\n        \"\"\"Function that writes out the config to wandb\n\n        Args:\n            config: config dictionary to write out\n        \"\"\"\n        import wandb  # wandb is slow to import, so we only import it if we need it.\n\n        wandb.config.update(config_dict, allow_val_change=True)  # type: ignore\n\n\n@decorate_all([check_main_thread])\nclass TensorboardWriter(Writer):\n    \"\"\"Tensorboard Writer Class\"\"\"\n\n    def __init__(self, log_dir: Path):\n        self.tb_writer = SummaryWriter(log_dir=log_dir)\n\n    def write_image(self, name: str, image: Float[Tensor, \"H W C\"], step: int) -> None:\n        image = to8b(image)\n        self.tb_writer.add_image(name, image, step, dataformats=\"HWC\")\n\n    def write_scalar(self, name: str, scalar: Union[float, torch.Tensor], step: int) -> None:\n        self.tb_writer.add_scalar(name, scalar, step)\n\n    def write_config(self, name: str, config_dict: Dict[str, Any], step: int):\n        \"\"\"Function that writes out the config to tensorboard\n\n        Args:\n            config: config dictionary to write out\n        \"\"\"\n        self.tb_writer.add_text(\"config\", str(config_dict))\n\n\n@decorate_all([check_main_thread])\nclass CometWriter(Writer):\n    \"\"\"Comet_ML Writer Class\"\"\"\n\n    def __init__(self, log_dir: Path, experiment_name: str, project_name: str = \"nerfstudio-project\"):\n        # comet_ml is slow to import, so we only do it if we need it.\n        import comet_ml\n\n        self.experiment = comet_ml.Experiment(project_name=project_name)\n        if experiment_name != \"unnamed\":\n            self.experiment.set_name(experiment_name)\n\n    def write_image(self, name: str, image: Float[Tensor, \"H W C\"], step: int) -> None:\n        self.experiment.log_image(image, name, step=step)\n\n    def write_scalar(self, name: str, scalar: Union[float, torch.Tensor], step: int) -> None:\n        self.experiment.log_metric(name, scalar, step)\n\n    def write_config(self, name: str, config_dict: Dict[str, Any], step: int):\n        \"\"\"Function that writes out the config to Comet\n\n        Args:\n            config: config dictionary to write out\n        \"\"\"\n        self.experiment.log_parameters(config_dict, step=step)\n\n\ndef _cursorup(x: int):\n    \"\"\"utility tool to move the cursor up on the terminal\n\n    Args:\n        x: amount of lines to move cursor upward\n    \"\"\"\n    print(f\"\\r\\033[{x}A\", end=\"\\x1b[1K\\r\")\n\n\ndef _format_time(seconds):\n    \"\"\"utility tool to format time in human readable form given seconds\"\"\"\n    ms = seconds % 1\n    ms = ms * 1e3\n    seconds = int(seconds)\n    days, seconds = divmod(seconds, 86400)\n    hours, seconds = divmod(seconds, 3600)\n    minutes, seconds = divmod(seconds, 60)\n    if days > 0:\n        return f\"{days} d, {hours} h, {minutes} m, {seconds} s\"\n    if hours > 0:\n        return f\"{hours} h, {minutes} m, {seconds} s\"\n    if minutes > 0:\n        return f\"{minutes} m, {seconds} s\"\n    if seconds > 0:\n        return f\"{seconds} s, {ms:0.3f} ms\"\n\n    return f\"{ms:0.3f} ms\"\n\n\n@decorate_all([check_main_thread])\nclass LocalWriter:\n    \"\"\"Local Writer Class\n    TODO: migrate to prettyprint\n\n    Args:\n        config: configuration to instantiate class\n        banner_messages: list of messages to always display at bottom of screen\n    \"\"\"\n\n    def __init__(self, config: cfg.LocalWriterConfig, banner_messages: Optional[List[str]] = None):\n        self.config = config\n        self.stats_to_track = [name.value for name in config.stats_to_track]\n        self.keys = set()\n        self.past_mssgs = [\"\", \"\"]\n        self.banner_len = 0 if banner_messages is None else len(banner_messages) + 1\n        if banner_messages:\n            self.past_mssgs.extend([\"-\" * 100])\n            self.past_mssgs.extend(banner_messages)\n        self.has_printed = False\n\n    def write_stats_log(self, step: int) -> None:\n        \"\"\"Function to write out scalars to terminal\n\n        Args:\n            step: current train step\n        \"\"\"\n        valid_step = step % GLOBAL_BUFFER[\"steps_per_log\"] == 0\n        if valid_step:\n            if not self.has_printed and self.config.max_log_size:\n                CONSOLE.log(\n                    f\"Printing max of {self.config.max_log_size} lines. \"\n                    \"Set flag [yellow]--logging.local-writer.max-log-size=0[/yellow] \"\n                    \"to disable line wrapping.\"\n                )\n            latest_map, new_key = self._consolidate_events()\n            self._update_header(latest_map, new_key)\n            self._print_stats(latest_map)\n\n    def write_config(self, name: str, config_dict: Dict[str, Any], step: int):\n        \"\"\"Function that writes out the config to local\n\n        Args:\n            config: config dictionary to write out\n        \"\"\"\n        # TODO: implement this\n\n    def _consolidate_events(self):\n        latest_map = {}\n        new_key = False\n        for event in EVENT_STORAGE:\n            name = event[\"name\"]\n            if name not in self.keys:\n                self.keys.add(name)\n                new_key = True\n            latest_map[name] = event[\"event\"]\n        return latest_map, new_key\n\n    def _update_header(self, latest_map, new_key):\n        \"\"\"helper to handle the printing of the header labels\n\n        Args:\n            latest_map: the most recent dictionary of stats that have been recorded\n            new_key: indicator whether or not there is a new key added to logger\n        \"\"\"\n        full_log_cond = not self.config.max_log_size and GLOBAL_BUFFER[\"step\"] <= GLOBAL_BUFFER[\"steps_per_log\"]\n        capped_log_cond = self.config.max_log_size and (len(self.past_mssgs) - self.banner_len <= 2 or new_key)\n        if full_log_cond or capped_log_cond:\n            mssg = f\"{'Step (% Done)':<20}\"\n            for name, _ in latest_map.items():\n                if name in self.stats_to_track:\n                    mssg += f\"{name:<20} \"\n            self.past_mssgs[0] = mssg\n            self.past_mssgs[1] = \"-\" * len(mssg)\n            if full_log_cond or not self.has_printed:\n                print(mssg)\n                print(\"-\" * len(mssg))\n\n    def _print_stats(self, latest_map, padding=\" \"):\n        \"\"\"helper to print out the stats in a readable format\n\n        Args:\n            latest_map: the most recent dictionary of stats that have been recorded\n            padding: type of characters to print to pad open space\n        \"\"\"\n        step = GLOBAL_BUFFER[\"step\"]\n        fraction_done = step / GLOBAL_BUFFER[\"max_iter\"]\n        curr_mssg = f\"{step} ({fraction_done*100:.02f}%)\"\n        curr_mssg = f\"{curr_mssg:<20}\"\n        for name, v in latest_map.items():\n            if name in self.stats_to_track:\n                if \"(time)\" in name:\n                    v = _format_time(v)\n                elif \"Rays\" in name:\n                    v = human_format(v)\n                else:\n                    v = f\"{v:0.4f}\"\n                curr_mssg += f\"{v:<20} \"\n\n        # update the history buffer\n        if self.config.max_log_size:\n            if not self.has_printed:\n                cursor_idx = len(self.past_mssgs) - self.banner_len\n                self.has_printed = True\n            else:\n                cursor_idx = len(self.past_mssgs)\n            if len(self.past_mssgs[2:]) - self.banner_len >= self.config.max_log_size:\n                self.past_mssgs.pop(2)\n            self.past_mssgs.insert(len(self.past_mssgs) - self.banner_len, curr_mssg)\n            _cursorup(cursor_idx)\n\n            for i, mssg in enumerate(self.past_mssgs):\n                pad_len = len(max(self.past_mssgs, key=len))\n                style = \"\\x1b[30;42m\" if self.banner_len and i >= len(self.past_mssgs) - self.banner_len + 1 else \"\"\n                print(f\"{style}{mssg:{padding}<{pad_len}} \\x1b[0m\")\n        else:\n            print(curr_mssg)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/control_panel.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Control panel for the viewer\"\"\"\n\nfrom collections import defaultdict\nfrom typing import Callable, DefaultDict, List, Tuple, get_args\n\nimport numpy as np\nimport torch\nimport viser\nimport viser.transforms as vtf\nfrom viser import ViserServer\n\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.utils.colormaps import ColormapOptions, Colormaps\nfrom nerfstudio.viewer.viewer_elements import (  # ViewerButtonGroup,\n    ViewerButtonGroup,\n    ViewerCheckbox,\n    ViewerDropdown,\n    ViewerElement,\n    ViewerNumber,\n    ViewerRGB,\n    ViewerSlider,\n    ViewerVec3,\n)\n\n\nclass ControlPanel:\n    \"\"\"\n    Initializes the control panel with all the elements\n    Args:\n        time_enabled: whether or not the time slider should be enabled\n        rerender_cb: a callback that will be called when the user changes a parameter that requires a rerender\n            (eg train speed, max res, etc)\n        update_output_cb: a callback that will be called when the user changes the output render\n        default_composite_depth: whether to default to compositing depth or not\n    \"\"\"\n\n    def __init__(\n        self,\n        server: ViserServer,\n        time_enabled: bool,\n        scale_ratio: float,\n        rerender_cb: Callable[[], None],\n        update_output_cb: Callable,\n        update_split_output_cb: Callable,\n        default_composite_depth: bool = True,\n    ):\n        self.viser_scale_ratio = scale_ratio\n        # elements holds a mapping from tag: [elements]\n        self.server = server\n        self._elements_by_tag: DefaultDict[str, List[ViewerElement]] = defaultdict(lambda: [])\n        self.default_composite_depth = default_composite_depth\n\n        self._train_speed = ViewerButtonGroup(\n            name=\"Train Speed\",\n            default_value=\"Mid\",\n            options=[\"Slow\", \"Mid\", \"Fast\"],\n            cb_hook=lambda han: self._train_speed_cb(),\n        )\n        self._output_render = ViewerDropdown(\n            \"Output type\",\n            \"not set\",\n            [\"not set\"],\n            cb_hook=lambda han: [self.update_control_panel(), update_output_cb(han), rerender_cb()],\n            hint=\"The output to render\",\n        )\n        self._colormap = ViewerDropdown[Colormaps](\n            \"Colormap\", \"default\", [\"default\"], cb_hook=lambda _: rerender_cb(), hint=\"The colormap to use\"\n        )\n        self._invert = ViewerCheckbox(\"Invert\", False, cb_hook=lambda _: rerender_cb(), hint=\"Invert the colormap\")\n        self._normalize = ViewerCheckbox(\n            \"Normalize\", True, cb_hook=lambda _: rerender_cb(), hint=\"Normalize the colormap\"\n        )\n        self._min = ViewerNumber(\"Min\", 0.0, cb_hook=lambda _: rerender_cb(), hint=\"Min value of the colormap\")\n        self._max = ViewerNumber(\"Max\", 1.0, cb_hook=lambda _: rerender_cb(), hint=\"Max value of the colormap\")\n\n        self._split = ViewerCheckbox(\n            \"Enable\",\n            False,\n            cb_hook=lambda han: [self.update_control_panel(), rerender_cb()],\n            hint=\"Render two outputs\",\n        )\n        self._split_percentage = ViewerSlider(\n            \"Split percentage\", 0.5, 0.0, 1.0, 0.01, cb_hook=lambda _: rerender_cb(), hint=\"Where to split\"\n        )\n        self._split_output_render = ViewerDropdown(\n            \"Output render split\",\n            \"not set\",\n            [\"not set\"],\n            cb_hook=lambda han: [self.update_control_panel(), update_split_output_cb(han), rerender_cb()],\n            hint=\"The second output\",\n        )\n        # Hack: spaces are after at the end of the names to make them unique\n        self._split_colormap = ViewerDropdown[Colormaps](\n            \"Colormap \", \"default\", [\"default\"], cb_hook=lambda _: rerender_cb(), hint=\"Colormap of the second output\"\n        )\n        self._split_invert = ViewerCheckbox(\n            \"Invert \", False, cb_hook=lambda _: rerender_cb(), hint=\"Invert the colormap of the second output\"\n        )\n        self._split_normalize = ViewerCheckbox(\n            \"Normalize \", True, cb_hook=lambda _: rerender_cb(), hint=\"Normalize the colormap of the second output\"\n        )\n        self._split_min = ViewerNumber(\n            \"Min \", 0.0, cb_hook=lambda _: rerender_cb(), hint=\"Min value of the colormap of the second output\"\n        )\n        self._split_max = ViewerNumber(\n            \"Max \", 1.0, cb_hook=lambda _: rerender_cb(), hint=\"Max value of the colormap of the second output\"\n        )\n\n        self._train_util = ViewerSlider(\n            \"Train Util\",\n            default_value=0.85,\n            min_value=0.0,\n            max_value=1,\n            step=0.05,\n            hint=\"Target training utilization, 0.0 is slow, 1.0 is fast. Doesn't affect final render quality\",\n        )\n        self._layer_depth = ViewerCheckbox(\n            \"Composite depth\",\n            self.default_composite_depth,\n            cb_hook=lambda _: rerender_cb(),\n            hint=\"Allow NeRF to occlude 3D browser objects\",\n        )\n        self._max_res = ViewerSlider(\n            \"Max res\",\n            512,\n            64,\n            2048,\n            100,\n            cb_hook=lambda _: rerender_cb(),\n            hint=\"Maximum resolution to render in viewport\",\n        )\n        self._crop_viewport = ViewerCheckbox(\n            \"Enable \",\n            False,\n            cb_hook=lambda han: [self.update_control_panel(), rerender_cb()],\n            hint=\"Crop the scene to a specified box\",\n        )\n        self._background_color = ViewerRGB(\n            \"Background color\", (38, 42, 55), cb_hook=lambda _: rerender_cb(), hint=\"Color of the background\"\n        )\n        self._crop_handle = self.server.scene.add_transform_controls(\"Crop\", depth_test=False, line_width=4.0)\n\n        def update_center(han):\n            self._crop_handle.position = tuple(p * self.viser_scale_ratio for p in han.value)  # type: ignore\n\n        self._crop_center = ViewerVec3(\n            \"Crop center\",\n            (0.0, 0.0, 0.0),\n            step=0.01,\n            cb_hook=lambda e: [rerender_cb(), update_center(e)],\n            hint=\"Center of the crop box\",\n        )\n\n        def update_rot(han):\n            self._crop_handle.wxyz = vtf.SO3.from_rpy_radians(*han.value).wxyz\n\n        self._crop_rot = ViewerVec3(\n            \"Crop rotation\",\n            (0.0, 0.0, 0.0),\n            step=0.01,\n            cb_hook=lambda e: [rerender_cb(), update_rot(e)],\n            hint=\"Rotation of the crop box\",\n        )\n\n        self._crop_scale = ViewerVec3(\n            \"Crop scale\", (1.0, 1.0, 1.0), step=0.01, cb_hook=lambda _: rerender_cb(), hint=\"Size of the crop box.\"\n        )\n\n        @self._crop_handle.on_update\n        def _update_crop_handle(han):\n            pos = self._crop_handle.position\n            self._crop_center.value = tuple(p / self.viser_scale_ratio for p in pos)  # type: ignore\n            rpy = vtf.SO3(self._crop_handle.wxyz).as_rpy_radians()\n            self._crop_rot.value = (float(rpy.roll), float(rpy.pitch), float(rpy.yaw))\n\n        self._time = ViewerSlider(\"Time\", 0.0, 0.0, 1.0, 0.01, cb_hook=lambda _: rerender_cb(), hint=\"Time to render\")\n        self._time_enabled = time_enabled\n\n        self.add_element(self._train_speed)\n        self.add_element(self._train_util)\n\n        with self.server.gui.add_folder(\"Render Options\"):\n            self.add_element(self._max_res)\n            self.add_element(self._output_render)\n            self.add_element(self._colormap)\n            self.add_element(self._layer_depth)\n            # colormap options\n            self.add_element(self._invert, additional_tags=(\"colormap\",))\n            self.add_element(self._normalize, additional_tags=(\"colormap\",))\n            self.add_element(self._min, additional_tags=(\"colormap\",))\n            self.add_element(self._max, additional_tags=(\"colormap\",))\n\n        # split options\n        with self.server.gui.add_folder(\"Split Screen\"):\n            self.add_element(self._split)\n\n            self.add_element(self._split_percentage, additional_tags=(\"split\",))\n            self.add_element(self._split_output_render, additional_tags=(\"split\",))\n            self.add_element(self._split_colormap, additional_tags=(\"split\",))\n\n            self.add_element(self._split_invert, additional_tags=(\"split_colormap\",))\n            self.add_element(self._split_normalize, additional_tags=(\"split_colormap\",))\n            self.add_element(self._split_min, additional_tags=(\"split_colormap\",))\n            self.add_element(self._split_max, additional_tags=(\"split_colormap\",))\n\n        with self.server.gui.add_folder(\"Crop Viewport\"):\n            self.add_element(self._crop_viewport)\n            # Crop options\n            self.add_element(self._background_color, additional_tags=(\"crop\",))\n            self.add_element(self._crop_center, additional_tags=(\"crop\",))\n            self.add_element(self._crop_scale, additional_tags=(\"crop\",))\n            self.add_element(self._crop_rot, additional_tags=(\"crop\",))\n\n        self.add_element(self._time, additional_tags=(\"time\",))\n        self._reset_camera = server.gui.add_button(\n            label=\"Reset Up Direction\",\n            icon=viser.Icon.ARROW_BIG_UP_LINES,\n            color=\"gray\",\n            hint=\"Set the up direction of the camera orbit controls to the camera's current up direction.\",\n        )\n        self._reset_camera.on_click(self._reset_camera_cb)\n\n    def _train_speed_cb(self) -> None:\n        pass\n\n        \"\"\"Callback for when the train speed is changed\"\"\"\n        if self._train_speed.value == \"Fast\":\n            self._train_util.value = 0.95\n            self._max_res.value = 256\n        elif self._train_speed.value == \"Mid\":\n            self._train_util.value = 0.85\n            self._max_res.value = 512\n        elif self._train_speed.value == \"Slow\":\n            self._train_util.value = 0.5\n            self._max_res.value = 1024\n\n    def _reset_camera_cb(self, _) -> None:\n        for client in self.server.get_clients().values():\n            client.camera.up_direction = vtf.SO3(client.camera.wxyz) @ np.array([0.0, -1.0, 0.0])\n\n    def update_output_options(self, new_options: List[str]):\n        \"\"\"\n        Args:\n            new_options: a list of new output options\n        \"\"\"\n        self._output_render.set_options(new_options)\n        self._split_output_render.set_options(new_options)\n        self._split_output_render.value = new_options[-1]\n\n    def add_element(self, e: ViewerElement, additional_tags: Tuple[str, ...] = tuple()) -> None:\n        \"\"\"Adds an element to the control panel\n\n        Args:\n            e: the element to add\n            additional_tags: additional tags to add to the element for selection\n        \"\"\"\n        self._elements_by_tag[\"all\"].append(e)\n        for t in additional_tags:\n            self._elements_by_tag[t].append(e)\n        e.install(self.server)\n\n    def update_control_panel(self) -> None:\n        \"\"\"\n        Sets elements to be hidden or not based on the current state of the control panel\n        \"\"\"\n        self._colormap.set_disabled(self.output_render == \"rgb\")\n        for e in self._elements_by_tag[\"colormap\"]:\n            e.set_hidden(self.output_render == \"rgb\")\n        for e in self._elements_by_tag[\"split_colormap\"]:\n            e.set_hidden(not self._split.value or self.split_output_render == \"rgb\")\n        for e in self._elements_by_tag[\"crop\"]:\n            e.set_hidden(not self.crop_viewport)\n        self._time.set_hidden(not self._time_enabled)\n        self._split_percentage.set_hidden(not self._split.value)\n        self._split_output_render.set_hidden(not self._split.value)\n        self._split_colormap.set_hidden(not self._split.value)\n        self._split_colormap.set_disabled(self.split_output_render == \"rgb\")\n        self._crop_handle.visible = self.crop_viewport\n\n    def update_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        self._colormap.set_options(_get_colormap_options(dimensions, dtype))\n\n    def update_split_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the split colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        self._split_colormap.set_options(_get_colormap_options(dimensions, dtype))\n\n    @property\n    def output_render(self) -> str:\n        \"\"\"Returns the current output render\"\"\"\n        return self._output_render.value\n\n    @property\n    def split_output_render(self) -> str:\n        \"\"\"Returns the current output for the split render\"\"\"\n        return self._split_output_render.value\n\n    @property\n    def split(self) -> bool:\n        \"\"\"Returns whether the split is enabled\"\"\"\n        return self._split.value\n\n    @property\n    def split_percentage(self) -> float:\n        \"\"\"Returns the percentage of the screen to split\"\"\"\n        return self._split_percentage.value\n\n    @property\n    def train_util(self) -> float:\n        \"\"\"Returns the current train util setting\"\"\"\n        return self._train_util.value\n\n    @property\n    def max_res(self) -> int:\n        \"\"\"Returns the current max res setting\"\"\"\n        return self._max_res.value\n\n    @property\n    def crop_viewport(self) -> bool:\n        \"\"\"Returns the current crop viewport setting\"\"\"\n        return self._crop_viewport.value\n\n    @crop_viewport.setter\n    def crop_viewport(self, value: bool):\n        \"\"\"Sets the crop viewport setting\"\"\"\n        self._crop_viewport.value = value\n\n    @property\n    def crop_obb(self):\n        \"\"\"Returns the current crop obb setting\"\"\"\n        rxyz = self._crop_rot.value\n        R = torch.tensor(vtf.SO3.from_rpy_radians(rxyz[0], rxyz[1], rxyz[2]).as_matrix())\n        obb = OrientedBox(R, torch.tensor(self._crop_center.value), torch.tensor(self._crop_scale.value))\n        return obb\n\n    @property\n    def background_color(self) -> Tuple[int, int, int]:\n        \"\"\"Returns the current background color\"\"\"\n        return self._background_color.value\n\n    @background_color.setter\n    def background_color(self, value: Tuple[int, int, int]):\n        \"\"\"Sets the background color\"\"\"\n        self._background_color.value = value\n\n    @property\n    def time(self) -> float:\n        \"\"\"Returns the current background color\"\"\"\n        return self._time.value\n\n    @time.setter\n    def time(self, value: float):\n        \"\"\"Sets the background color\"\"\"\n        self._time.value = value\n\n    @property\n    def colormap_options(self) -> ColormapOptions:\n        \"\"\"Returns the current colormap options\"\"\"\n        return ColormapOptions(\n            colormap=self._colormap.value,\n            normalize=self._normalize.value,\n            colormap_min=self._min.value,\n            colormap_max=self._max.value,\n            invert=self._invert.value,\n        )\n\n    @property\n    def split_colormap_options(self) -> ColormapOptions:\n        \"\"\"Returns the current colormap options\"\"\"\n        return ColormapOptions(\n            colormap=self._split_colormap.value,\n            normalize=self._split_normalize.value,\n            colormap_min=self._split_min.value,\n            colormap_max=self._split_max.value,\n            invert=self._split_invert.value,\n        )\n\n    @property\n    def layer_depth(self):\n        return self._layer_depth.value\n\n\ndef _get_colormap_options(dimensions: int, dtype: type) -> List[Colormaps]:\n    \"\"\"\n    Given the number of dimensions and data type, returns a list of available colormap options\n    to use with the visualize() function.\n\n    Args:\n        dimensions: the number of dimensions of the render\n        dtype: the data type of the render\n    Returns:\n        a list of available colormap options\n    \"\"\"\n    colormap_options: List[Colormaps] = []\n    if dimensions == 3:\n        colormap_options = [\"default\"]\n    if dimensions == 1 and dtype in [torch.float64, torch.float32, torch.float16, torch.bfloat16]:\n        colormap_options = [c for c in list(get_args(Colormaps)) if c not in (\"default\", \"pca\")]\n    if dimensions > 3:\n        colormap_options = [\"pca\"]\n    return colormap_options\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/export_panel.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import annotations\n\nfrom pathlib import Path\n\nimport viser\nimport viser.transforms as vtf\nfrom typing_extensions import Literal\n\nfrom nerfstudio.data.scene_box import OrientedBox\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.models.splatfacto import SplatfactoModel\nfrom nerfstudio.viewer.control_panel import ControlPanel\n\n\ndef populate_export_tab(\n    server: viser.ViserServer,\n    control_panel: ControlPanel,\n    config_path: Path,\n    viewer_model: Model,\n) -> None:\n    viewing_gsplat = isinstance(viewer_model, SplatfactoModel)\n    if not viewing_gsplat:\n        crop_output = server.gui.add_checkbox(\"Use Crop\", False)\n\n        @crop_output.on_update\n        def _(_) -> None:\n            control_panel.crop_viewport = crop_output.value\n\n    with server.gui.add_folder(\"Splat\"):\n        populate_splat_tab(server, control_panel, config_path, viewing_gsplat)\n    with server.gui.add_folder(\"Point Cloud\"):\n        populate_point_cloud_tab(server, control_panel, config_path, viewing_gsplat)\n    with server.gui.add_folder(\"Mesh\"):\n        populate_mesh_tab(server, control_panel, config_path, viewing_gsplat)\n\n\ndef show_command_modal(client: viser.ClientHandle, what: Literal[\"mesh\", \"point cloud\", \"splat\"], command: str) -> None:\n    \"\"\"Show a modal to each currently connected client.\n\n    In the future, we should only show the modal to the client that pushes the\n    generation button.\n    \"\"\"\n    with client.gui.add_modal(what.title() + \" Export\") as modal:\n        client.gui.add_markdown(\n            \"\\n\".join(\n                [\n                    f\"To export a {what}, run the following from the command line:\",\n                    \"\",\n                    \"```\",\n                    command,\n                    \"```\",\n                ]\n            )\n        )\n        close_button = client.gui.add_button(\"Close\")\n\n        @close_button.on_click\n        def _(_) -> None:\n            modal.close()\n\n\ndef get_crop_string(obb: OrientedBox, crop_viewport: bool):\n    \"\"\"Takes in an oriented bounding box and returns a string of the form \"--obb_{center,rotation,scale}\n    and each arg formatted with spaces around it\n    \"\"\"\n    if not crop_viewport:\n        return \"\"\n    rpy = vtf.SO3.from_matrix(obb.R.numpy(force=True)).as_rpy_radians()\n    rpy = [rpy.roll, rpy.pitch, rpy.yaw]\n    pos = obb.T.squeeze().tolist()\n    scale = obb.S.squeeze().tolist()\n    rpystring = \" \".join([f\"{x:.10f}\" for x in rpy])\n    posstring = \" \".join([f\"{x:.10f}\" for x in pos])\n    scalestring = \" \".join([f\"{x:.10f}\" for x in scale])\n    return f\"--obb_center {posstring} --obb_rotation {rpystring} --obb_scale {scalestring}\"\n\n\ndef populate_point_cloud_tab(\n    server: viser.ViserServer,\n    control_panel: ControlPanel,\n    config_path: Path,\n    viewing_gsplat: bool,\n) -> None:\n    if not viewing_gsplat:\n        server.gui.add_markdown(\"<small>Render depth, project to an oriented point cloud, and filter</small> \")\n        num_points = server.gui.add_number(\"# Points\", initial_value=1_000_000, min=1, max=None, step=1)\n        world_frame = server.gui.add_checkbox(\n            \"Save in world frame\",\n            False,\n            hint=(\n                \"If checked, saves the point cloud in the same frame as the original dataset. Otherwise, uses the \"\n                \"scaled and reoriented coordinate space expected by the NeRF models.\"\n            ),\n        )\n        remove_outliers = server.gui.add_checkbox(\"Remove outliers\", True)\n        normals = server.gui.add_dropdown(\n            \"Normals\",\n            # TODO: options here could depend on what's available to the model.\n            (\"open3d\", \"model_output\"),\n            initial_value=\"open3d\",\n            hint=\"Normal map source.\",\n        )\n        output_dir = server.gui.add_text(\"Output Directory\", initial_value=\"exports/pcd/\")\n        generate_command = server.gui.add_button(\"Generate Command\", icon=viser.Icon.TERMINAL_2)\n\n        @generate_command.on_click\n        def _(event: viser.GuiEvent) -> None:\n            assert event.client is not None\n            command = \" \".join(\n                [\n                    \"ns-export pointcloud\",\n                    f\"--load-config {config_path}\",\n                    f\"--output-dir {output_dir.value}\",\n                    f\"--num-points {num_points.value}\",\n                    f\"--remove-outliers {remove_outliers.value}\",\n                    f\"--normal-method {normals.value}\",\n                    f\"--save-world-frame {world_frame.value}\",\n                    get_crop_string(control_panel.crop_obb, control_panel.crop_viewport),\n                ]\n            )\n            show_command_modal(event.client, \"point cloud\", command)\n\n    else:\n        server.gui.add_markdown(\"<small>Point cloud export is not currently supported with Gaussian Splatting</small>\")\n\n\ndef populate_mesh_tab(\n    server: viser.ViserServer,\n    control_panel: ControlPanel,\n    config_path: Path,\n    viewing_gsplat: bool,\n) -> None:\n    if not viewing_gsplat:\n        server.gui.add_markdown(\n            \"<small>Render depth, project to an oriented point cloud, and run Poisson surface reconstruction</small>\"\n        )\n\n        normals = server.gui.add_dropdown(\n            \"Normals\",\n            (\"open3d\", \"model_output\"),\n            initial_value=\"open3d\",\n            hint=\"Source for normal maps.\",\n        )\n        num_faces = server.gui.add_number(\"# Faces\", initial_value=50_000, min=1)\n        texture_resolution = server.gui.add_number(\"Texture Resolution\", min=8, initial_value=2048)\n        output_directory = server.gui.add_text(\"Output Directory\", initial_value=\"exports/mesh/\")\n        num_points = server.gui.add_number(\"# Points\", initial_value=1_000_000, min=1, max=None, step=1)\n        remove_outliers = server.gui.add_checkbox(\"Remove outliers\", True)\n\n        generate_command = server.gui.add_button(\"Generate Command\", icon=viser.Icon.TERMINAL_2)\n\n        @generate_command.on_click\n        def _(event: viser.GuiEvent) -> None:\n            assert event.client is not None\n            command = \" \".join(\n                [\n                    \"ns-export poisson\",\n                    f\"--load-config {config_path}\",\n                    f\"--output-dir {output_directory.value}\",\n                    f\"--target-num-faces {num_faces.value}\",\n                    f\"--num-pixels-per-side {texture_resolution.value}\",\n                    f\"--num-points {num_points.value}\",\n                    f\"--remove-outliers {remove_outliers.value}\",\n                    f\"--normal-method {normals.value}\",\n                    get_crop_string(control_panel.crop_obb, control_panel.crop_viewport),\n                ]\n            )\n            show_command_modal(event.client, \"mesh\", command)\n\n    else:\n        server.gui.add_markdown(\"<small>Mesh export is not currently supported with Gaussian Splatting</small>\")\n\n\ndef populate_splat_tab(\n    server: viser.ViserServer,\n    control_panel: ControlPanel,\n    config_path: Path,\n    viewing_gsplat: bool,\n) -> None:\n    if viewing_gsplat:\n        server.gui.add_markdown(\"<small>Generate ply export of Gaussian Splat</small>\")\n\n        output_directory = server.gui.add_text(\"Output Directory\", initial_value=\"exports/splat/\")\n        generate_command = server.gui.add_button(\"Generate Command\", icon=viser.Icon.TERMINAL_2)\n\n        @generate_command.on_click\n        def _(event: viser.GuiEvent) -> None:\n            assert event.client is not None\n            command = \" \".join(\n                [\n                    \"ns-export gaussian-splat\",\n                    f\"--load-config {config_path}\",\n                    f\"--output-dir {output_directory.value}\",\n                    get_crop_string(control_panel.crop_obb, control_panel.crop_viewport),\n                ]\n            )\n            show_command_modal(event.client, \"splat\", command)\n\n    else:\n        server.gui.add_markdown(\"<small>Splat export is only supported with Gaussian Splatting methods</small>\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/render_panel.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import annotations\n\nimport colorsys\nimport dataclasses\nimport datetime\nimport json\nimport threading\nimport time\nfrom pathlib import Path\nfrom typing import Dict, List, Literal, Optional, Tuple, Union\n\nimport numpy as np\nimport splines\nimport splines.quaternion\nimport viser\nimport viser.transforms as tf\nfrom scipy import interpolate\n\nfrom nerfstudio.viewer.control_panel import ControlPanel\n\n\n@dataclasses.dataclass\nclass Keyframe:\n    position: np.ndarray\n    wxyz: np.ndarray\n    override_fov_enabled: bool\n    override_fov_rad: float\n    override_time_enabled: bool\n    override_time_val: float\n    aspect: float\n    override_transition_enabled: bool\n    override_transition_sec: Optional[float]\n\n    @staticmethod\n    def from_camera(camera: viser.CameraHandle, aspect: float) -> Keyframe:\n        return Keyframe(\n            camera.position,\n            camera.wxyz,\n            override_fov_enabled=False,\n            override_fov_rad=camera.fov,\n            override_time_enabled=False,\n            override_time_val=0.0,\n            aspect=aspect,\n            override_transition_enabled=False,\n            override_transition_sec=None,\n        )\n\n\nclass CameraPath:\n    def __init__(\n        self, server: viser.ViserServer, duration_element: viser.GuiInputHandle[float], time_enabled: bool = False\n    ):\n        self._server = server\n        self._keyframes: Dict[int, Tuple[Keyframe, viser.CameraFrustumHandle]] = {}\n        self._keyframe_counter: int = 0\n        self._spline_nodes: List[viser.SceneNodeHandle] = []\n        self._camera_edit_panel: Optional[viser.Gui3dContainerHandle] = None\n\n        self._orientation_spline: Optional[splines.quaternion.KochanekBartels] = None\n        self._position_spline: Optional[splines.KochanekBartels] = None\n        self._fov_spline: Optional[splines.KochanekBartels] = None\n        self._keyframes_visible: bool = True\n\n        self._duration_element = duration_element\n\n        # These parameters should be overridden externally.\n        self.loop: bool = False\n        self.framerate: float = 30.0\n        self.tension: float = 0.5  # Tension / alpha term.\n        self.default_fov: float = 0.0\n        self.time_enabled = time_enabled\n        self.default_render_time: float = 0.0\n        self.default_transition_sec: float = 0.0\n        self.show_spline: bool = True\n\n    def set_keyframes_visible(self, visible: bool) -> None:\n        self._keyframes_visible = visible\n        for keyframe in self._keyframes.values():\n            keyframe[1].visible = visible\n\n    def add_camera(self, keyframe: Keyframe, keyframe_index: Optional[int] = None) -> None:\n        \"\"\"Add a new camera, or replace an old one if `keyframe_index` is passed in.\"\"\"\n        server = self._server\n\n        # Add a keyframe if we aren't replacing an existing one.\n        if keyframe_index is None:\n            keyframe_index = self._keyframe_counter\n            self._keyframe_counter += 1\n\n        frustum_handle = server.scene.add_camera_frustum(\n            f\"/render_cameras/{keyframe_index}\",\n            fov=keyframe.override_fov_rad if keyframe.override_fov_enabled else self.default_fov,\n            aspect=keyframe.aspect,\n            scale=0.1,\n            color=(200, 10, 30),\n            wxyz=keyframe.wxyz,\n            position=keyframe.position,\n            visible=self._keyframes_visible,\n        )\n        self._server.scene.add_icosphere(\n            f\"/render_cameras/{keyframe_index}/sphere\",\n            radius=0.03,\n            color=(200, 10, 30),\n        )\n\n        @frustum_handle.on_click\n        def _(_) -> None:\n            if self._camera_edit_panel is not None:\n                self._camera_edit_panel.remove()\n                self._camera_edit_panel = None\n\n            with server.scene.add_3d_gui_container(\n                \"/camera_edit_panel\",\n                position=keyframe.position,\n            ) as camera_edit_panel:\n                self._camera_edit_panel = camera_edit_panel\n                override_fov = server.gui.add_checkbox(\"Override FOV\", initial_value=keyframe.override_fov_enabled)\n                override_fov_degrees = server.gui.add_slider(\n                    \"Override FOV (degrees)\",\n                    5.0,\n                    175.0,\n                    step=0.1,\n                    initial_value=keyframe.override_fov_rad * 180.0 / np.pi,\n                    disabled=not keyframe.override_fov_enabled,\n                )\n                if self.time_enabled:\n                    override_time = server.gui.add_checkbox(\n                        \"Override Time\", initial_value=keyframe.override_time_enabled\n                    )\n                    override_time_val = server.gui.add_slider(\n                        \"Override Time\",\n                        0.0,\n                        1.0,\n                        step=0.01,\n                        initial_value=keyframe.override_time_val,\n                        disabled=not keyframe.override_time_enabled,\n                    )\n\n                    @override_time.on_update\n                    def _(_) -> None:\n                        keyframe.override_time_enabled = override_time.value\n                        override_time_val.disabled = not override_time.value\n                        self.add_camera(keyframe, keyframe_index)\n\n                    @override_time_val.on_update\n                    def _(_) -> None:\n                        keyframe.override_time_val = override_time_val.value\n                        self.add_camera(keyframe, keyframe_index)\n\n                delete_button = server.gui.add_button(\"Delete\", color=\"red\", icon=viser.Icon.TRASH)\n                go_to_button = server.gui.add_button(\"Go to\")\n                close_button = server.gui.add_button(\"Close\")\n\n            @override_fov.on_update\n            def _(_) -> None:\n                keyframe.override_fov_enabled = override_fov.value\n                override_fov_degrees.disabled = not override_fov.value\n                self.add_camera(keyframe, keyframe_index)\n\n            @override_fov_degrees.on_update\n            def _(_) -> None:\n                keyframe.override_fov_rad = override_fov_degrees.value / 180.0 * np.pi\n                self.add_camera(keyframe, keyframe_index)\n\n            @delete_button.on_click\n            def _(event: viser.GuiEvent) -> None:\n                assert event.client is not None\n                with event.client.gui.add_modal(\"Confirm\") as modal:\n                    event.client.gui.add_markdown(\"Delete keyframe?\")\n                    confirm_button = event.client.gui.add_button(\"Yes\", color=\"red\", icon=viser.Icon.TRASH)\n                    exit_button = event.client.gui.add_button(\"Cancel\")\n\n                    @confirm_button.on_click\n                    def _(_) -> None:\n                        assert camera_edit_panel is not None\n\n                        keyframe_id = None\n                        for i, keyframe_tuple in self._keyframes.items():\n                            if keyframe_tuple[1] is frustum_handle:\n                                keyframe_id = i\n                                break\n                        assert keyframe_id is not None\n\n                        self._keyframes.pop(keyframe_id)\n                        frustum_handle.remove()\n                        camera_edit_panel.remove()\n                        self._camera_edit_panel = None\n                        modal.close()\n                        self.update_spline()\n\n                    @exit_button.on_click\n                    def _(_) -> None:\n                        modal.close()\n\n            @go_to_button.on_click\n            def _(event: viser.GuiEvent) -> None:\n                assert event.client is not None\n                client = event.client\n                T_world_current = tf.SE3.from_rotation_and_translation(\n                    tf.SO3(client.camera.wxyz), client.camera.position\n                )\n                T_world_target = tf.SE3.from_rotation_and_translation(\n                    tf.SO3(keyframe.wxyz), keyframe.position\n                ) @ tf.SE3.from_translation(np.array([0.0, 0.0, -0.5]))\n\n                T_current_target = T_world_current.inverse() @ T_world_target\n\n                for j in range(10):\n                    T_world_set = T_world_current @ tf.SE3.exp(T_current_target.log() * j / 9.0)\n\n                    # Important bit: we atomically set both the orientation and the position\n                    # of the camera.\n                    with client.atomic():\n                        client.camera.wxyz = T_world_set.rotation().wxyz\n                        client.camera.position = T_world_set.translation()\n                    time.sleep(1.0 / 30.0)\n\n            @close_button.on_click\n            def _(_) -> None:\n                assert camera_edit_panel is not None\n                camera_edit_panel.remove()\n                self._camera_edit_panel = None\n\n        self._keyframes[keyframe_index] = (keyframe, frustum_handle)\n\n    def update_aspect(self, aspect: float) -> None:\n        for keyframe_index, frame in self._keyframes.items():\n            frame = dataclasses.replace(frame[0], aspect=aspect)\n            self.add_camera(frame, keyframe_index=keyframe_index)\n\n    def get_aspect(self) -> float:\n        \"\"\"Get W/H aspect ratio, which is shared across all keyframes.\"\"\"\n        assert len(self._keyframes) > 0\n        return next(iter(self._keyframes.values()))[0].aspect\n\n    def reset(self) -> None:\n        for frame in self._keyframes.values():\n            frame[1].remove()\n        self._keyframes.clear()\n        self.update_spline()\n\n    def spline_t_from_t_sec(self, time: np.ndarray) -> np.ndarray:\n        \"\"\"From a time value in seconds, compute a t value for our geometric\n        spline interpolation. An increment of 1 for the latter will move the\n        camera forward by one keyframe.\n\n        We use a PCHIP spline here to guarantee monotonicity.\n        \"\"\"\n        transition_times_cumsum = self.compute_transition_times_cumsum()\n        spline_indices = np.arange(transition_times_cumsum.shape[0])\n\n        if self.loop:\n            # In the case of a loop, we pad the spline to match the start/end\n            # slopes.\n            interpolator = interpolate.PchipInterpolator(\n                x=np.concatenate(\n                    [\n                        [-(transition_times_cumsum[-1] - transition_times_cumsum[-2])],\n                        transition_times_cumsum,\n                        transition_times_cumsum[-1:] + transition_times_cumsum[1:2],\n                    ],\n                    axis=0,\n                ),\n                y=np.concatenate([[-1], spline_indices, [spline_indices[-1] + 1]], axis=0),\n            )\n        else:\n            interpolator = interpolate.PchipInterpolator(x=transition_times_cumsum, y=spline_indices)\n\n        # Clip to account for floating point error.\n        return np.clip(interpolator(time), 0, spline_indices[-1])\n\n    def interpolate_pose_and_fov_rad(\n        self, normalized_t: float\n    ) -> Optional[Union[Tuple[tf.SE3, float], Tuple[tf.SE3, float, float]]]:\n        if len(self._keyframes) < 2:\n            return None\n\n        self._fov_spline = splines.KochanekBartels(\n            [\n                keyframe[0].override_fov_rad if keyframe[0].override_fov_enabled else self.default_fov\n                for keyframe in self._keyframes.values()\n            ],\n            tcb=(self.tension, 0.0, 0.0),\n            endconditions=\"closed\" if self.loop else \"natural\",\n        )\n\n        self._time_spline = splines.KochanekBartels(\n            [\n                keyframe[0].override_time_val if keyframe[0].override_time_enabled else self.default_render_time\n                for keyframe in self._keyframes.values()\n            ],\n            tcb=(self.tension, 0.0, 0.0),\n            endconditions=\"closed\" if self.loop else \"natural\",\n        )\n\n        assert self._orientation_spline is not None\n        assert self._position_spline is not None\n        assert self._fov_spline is not None\n        if self.time_enabled:\n            assert self._time_spline is not None\n        max_t = self.compute_duration()\n        t = max_t * normalized_t\n        spline_t = float(self.spline_t_from_t_sec(np.array(t)))\n\n        quat = self._orientation_spline.evaluate(spline_t)\n        assert isinstance(quat, splines.quaternion.UnitQuaternion)\n        if self.time_enabled:\n            return (\n                tf.SE3.from_rotation_and_translation(\n                    tf.SO3(np.array([quat.scalar, *quat.vector])),\n                    self._position_spline.evaluate(spline_t),\n                ),\n                float(self._fov_spline.evaluate(spline_t)),\n                float(self._time_spline.evaluate(spline_t)),\n            )\n        else:\n            return (\n                tf.SE3.from_rotation_and_translation(\n                    tf.SO3(np.array([quat.scalar, *quat.vector])),\n                    self._position_spline.evaluate(spline_t),\n                ),\n                float(self._fov_spline.evaluate(spline_t)),\n            )\n\n    def update_spline(self) -> None:\n        num_frames = int(self.compute_duration() * self.framerate)\n        keyframes = list(self._keyframes.values())\n\n        if num_frames <= 0 or not self.show_spline or len(keyframes) < 2:\n            for node in self._spline_nodes:\n                node.remove()\n            self._spline_nodes.clear()\n            return\n\n        transition_times_cumsum = self.compute_transition_times_cumsum()\n\n        self._orientation_spline = splines.quaternion.KochanekBartels(\n            [\n                splines.quaternion.UnitQuaternion.from_unit_xyzw(np.roll(keyframe[0].wxyz, shift=-1))\n                for keyframe in keyframes\n            ],\n            tcb=(self.tension, 0.0, 0.0),\n            endconditions=\"closed\" if self.loop else \"natural\",\n        )\n        self._position_spline = splines.KochanekBartels(\n            [keyframe[0].position for keyframe in keyframes],\n            tcb=(self.tension, 0.0, 0.0),\n            endconditions=\"closed\" if self.loop else \"natural\",\n        )\n\n        # Update visualized spline.\n        points_array = self._position_spline.evaluate(\n            self.spline_t_from_t_sec(np.linspace(0, transition_times_cumsum[-1], num_frames))\n        )\n        colors_array = np.array([colorsys.hls_to_rgb(h, 0.5, 1.0) for h in np.linspace(0.0, 1.0, len(points_array))])\n\n        # Clear prior spline nodes.\n        for node in self._spline_nodes:\n            node.remove()\n        self._spline_nodes.clear()\n\n        self._spline_nodes.append(\n            self._server.scene.add_spline_catmull_rom(\n                \"/render_camera_spline\",\n                positions=points_array,\n                color=(220, 220, 220),\n                closed=self.loop,\n                line_width=1.0,\n                segments=points_array.shape[0] + 1,\n            )\n        )\n        self._spline_nodes.append(\n            self._server.scene.add_point_cloud(\n                \"/render_camera_spline/points\",\n                points=points_array,\n                colors=colors_array,\n                point_size=0.04,\n            )\n        )\n\n        def make_transition_handle(i: int) -> None:\n            assert self._position_spline is not None\n            transition_pos = self._position_spline.evaluate(\n                float(\n                    self.spline_t_from_t_sec(\n                        (transition_times_cumsum[i] + transition_times_cumsum[i + 1]) / 2.0,\n                    )\n                )\n            )\n            transition_sphere = self._server.scene.add_icosphere(\n                f\"/render_camera_spline/transition_{i}\",\n                radius=0.04,\n                color=(255, 0, 0),\n                position=transition_pos,\n            )\n            self._spline_nodes.append(transition_sphere)\n\n            @transition_sphere.on_click\n            def _(_) -> None:\n                server = self._server\n\n                if self._camera_edit_panel is not None:\n                    self._camera_edit_panel.remove()\n                    self._camera_edit_panel = None\n\n                keyframe_index = (i + 1) % len(self._keyframes)\n                keyframe = keyframes[keyframe_index][0]\n\n                with server.scene.add_3d_gui_container(\n                    \"/camera_edit_panel\",\n                    position=transition_pos,\n                ) as camera_edit_panel:\n                    self._camera_edit_panel = camera_edit_panel\n                    override_transition_enabled = server.gui.add_checkbox(\n                        \"Override transition\",\n                        initial_value=keyframe.override_transition_enabled,\n                    )\n                    override_transition_sec = server.gui.add_number(\n                        \"Override transition (sec)\",\n                        initial_value=keyframe.override_transition_sec\n                        if keyframe.override_transition_sec is not None\n                        else self.default_transition_sec,\n                        min=0.001,\n                        max=30.0,\n                        step=0.001,\n                        disabled=not override_transition_enabled.value,\n                    )\n                    close_button = server.gui.add_button(\"Close\")\n\n                @override_transition_enabled.on_update\n                def _(_) -> None:\n                    keyframe.override_transition_enabled = override_transition_enabled.value\n                    override_transition_sec.disabled = not override_transition_enabled.value\n                    self._duration_element.value = self.compute_duration()\n\n                @override_transition_sec.on_update\n                def _(_) -> None:\n                    keyframe.override_transition_sec = override_transition_sec.value\n                    self._duration_element.value = self.compute_duration()\n\n                @close_button.on_click\n                def _(_) -> None:\n                    assert camera_edit_panel is not None\n                    camera_edit_panel.remove()\n                    self._camera_edit_panel = None\n\n        (num_transitions_plus_1,) = transition_times_cumsum.shape\n        for i in range(num_transitions_plus_1 - 1):\n            make_transition_handle(i)\n\n        # for i in range(transition_times.shape[0])\n\n    def compute_duration(self) -> float:\n        \"\"\"Compute the total duration of the trajectory.\"\"\"\n        total = 0.0\n        for i, (keyframe, frustum) in enumerate(self._keyframes.values()):\n            if i == 0 and not self.loop:\n                continue\n            del frustum\n            total += (\n                keyframe.override_transition_sec\n                if keyframe.override_transition_enabled and keyframe.override_transition_sec is not None\n                else self.default_transition_sec\n            )\n        return total\n\n    def compute_transition_times_cumsum(self) -> np.ndarray:\n        \"\"\"Compute the total duration of the trajectory.\"\"\"\n        total = 0.0\n        out = [0.0]\n        for i, (keyframe, frustum) in enumerate(self._keyframes.values()):\n            if i == 0:\n                continue\n            del frustum\n            total += (\n                keyframe.override_transition_sec\n                if keyframe.override_transition_enabled and keyframe.override_transition_sec is not None\n                else self.default_transition_sec\n            )\n            out.append(total)\n\n        if self.loop:\n            keyframe = next(iter(self._keyframes.values()))[0]\n            total += (\n                keyframe.override_transition_sec\n                if keyframe.override_transition_enabled and keyframe.override_transition_sec is not None\n                else self.default_transition_sec\n            )\n            out.append(total)\n\n        return np.array(out)\n\n\n@dataclasses.dataclass\nclass RenderTabState:\n    \"\"\"Useful GUI handles exposed by the render tab.\"\"\"\n\n    preview_render: bool\n    preview_fov: float\n    preview_time: float\n    preview_aspect: float\n    preview_camera_type: Literal[\"Perspective\", \"Fisheye\", \"Equirectangular\"]\n\n\ndef populate_render_tab(\n    server: viser.ViserServer,\n    config_path: Path,\n    datapath: Path,\n    control_panel: Optional[ControlPanel] = None,\n) -> RenderTabState:\n    from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO\n\n    render_tab_state = RenderTabState(\n        preview_render=False,\n        preview_fov=0.0,\n        preview_time=0.0,\n        preview_aspect=1.0,\n        preview_camera_type=\"Perspective\",\n    )\n\n    fov_degrees = server.gui.add_slider(\n        \"Default FOV\",\n        initial_value=75.0,\n        min=0.1,\n        max=175.0,\n        step=0.01,\n        hint=\"Field-of-view for rendering, which can also be overridden on a per-keyframe basis.\",\n    )\n\n    render_time = None\n    if control_panel is not None and control_panel._time_enabled:\n        render_time = server.gui.add_slider(\n            \"Default Time\",\n            initial_value=0.0,\n            min=0.0,\n            max=1.0,\n            step=0.01,\n            hint=\"Rendering time step, which can also be overridden on a per-keyframe basis.\",\n        )\n\n        @render_time.on_update\n        def _(_) -> None:\n            camera_path.default_render_time = render_time.value\n\n    @fov_degrees.on_update\n    def _(_) -> None:\n        fov_radians = fov_degrees.value / 180.0 * np.pi\n        for client in server.get_clients().values():\n            client.camera.fov = fov_radians\n        camera_path.default_fov = fov_radians\n\n        # Updating the aspect ratio will also re-render the camera frustums.\n        # Could rethink this.\n        camera_path.update_aspect(resolution.value[0] / resolution.value[1])\n        compute_and_update_preview_camera_state()\n\n    resolution = server.gui.add_vector2(\n        \"Resolution\",\n        initial_value=(1920, 1080),\n        min=(50, 50),\n        max=(10_000, 10_000),\n        step=1,\n        hint=\"Render output resolution in pixels.\",\n    )\n\n    @resolution.on_update\n    def _(_) -> None:\n        camera_path.update_aspect(resolution.value[0] / resolution.value[1])\n        compute_and_update_preview_camera_state()\n\n    camera_type = server.gui.add_dropdown(\n        \"Camera type\",\n        (\"Perspective\", \"Fisheye\", \"Equirectangular\"),\n        initial_value=\"Perspective\",\n        hint=\"Camera model to render with. This is applied to all keyframes.\",\n    )\n    add_button = server.gui.add_button(\n        \"Add Keyframe\",\n        icon=viser.Icon.PLUS,\n        hint=\"Add a new keyframe at the current pose.\",\n    )\n\n    @add_button.on_click\n    def _(event: viser.GuiEvent) -> None:\n        assert event.client_id is not None\n        camera = server.get_clients()[event.client_id].camera\n\n        # Add this camera to the path.\n        camera_path.add_camera(\n            Keyframe.from_camera(\n                camera,\n                aspect=resolution.value[0] / resolution.value[1],\n            ),\n        )\n        duration_number.value = camera_path.compute_duration()\n        camera_path.update_spline()\n\n    clear_keyframes_button = server.gui.add_button(\n        \"Clear Keyframes\",\n        icon=viser.Icon.TRASH,\n        hint=\"Remove all keyframes from the render path.\",\n    )\n\n    @clear_keyframes_button.on_click\n    def _(event: viser.GuiEvent) -> None:\n        assert event.client_id is not None\n        client = server.get_clients()[event.client_id]\n        with client.atomic(), client.gui.add_modal(\"Confirm\") as modal:\n            client.gui.add_markdown(\"Clear all keyframes?\")\n            confirm_button = client.gui.add_button(\"Yes\", color=\"red\", icon=viser.Icon.TRASH)\n            exit_button = client.gui.add_button(\"Cancel\")\n\n            @confirm_button.on_click\n            def _(_) -> None:\n                camera_path.reset()\n                modal.close()\n\n                duration_number.value = camera_path.compute_duration()\n\n                # Clear move handles.\n                if len(transform_controls) > 0:\n                    for t in transform_controls:\n                        t.remove()\n                    transform_controls.clear()\n                    return\n\n            @exit_button.on_click\n            def _(_) -> None:\n                modal.close()\n\n    loop = server.gui.add_checkbox(\"Loop\", False, hint=\"Add a segment between the first and last keyframes.\")\n\n    @loop.on_update\n    def _(_) -> None:\n        camera_path.loop = loop.value\n        duration_number.value = camera_path.compute_duration()\n\n    tension_slider = server.gui.add_slider(\n        \"Spline tension\",\n        min=0.0,\n        max=1.0,\n        initial_value=0.0,\n        step=0.01,\n        hint=\"Tension parameter for adjusting smoothness of spline interpolation.\",\n    )\n\n    @tension_slider.on_update\n    def _(_) -> None:\n        camera_path.tension = tension_slider.value\n        camera_path.update_spline()\n\n    move_checkbox = server.gui.add_checkbox(\n        \"Move keyframes\",\n        initial_value=False,\n        hint=\"Toggle move handles for keyframes in the scene.\",\n    )\n\n    transform_controls: List[viser.SceneNodeHandle] = []\n\n    @move_checkbox.on_update\n    def _(event: viser.GuiEvent) -> None:\n        # Clear move handles when toggled off.\n        if move_checkbox.value is False:\n            for t in transform_controls:\n                t.remove()\n            transform_controls.clear()\n            return\n\n        def _make_transform_controls_callback(\n            keyframe: Tuple[Keyframe, viser.SceneNodeHandle],\n            controls: viser.TransformControlsHandle,\n        ) -> None:\n            @controls.on_update\n            def _(_) -> None:\n                keyframe[0].wxyz = controls.wxyz\n                keyframe[0].position = controls.position\n\n                keyframe[1].wxyz = controls.wxyz\n                keyframe[1].position = controls.position\n\n                camera_path.update_spline()\n\n        # Show move handles.\n        assert event.client is not None\n        for keyframe_index, keyframe in camera_path._keyframes.items():\n            controls = event.client.scene.add_transform_controls(\n                f\"/keyframe_move/{keyframe_index}\",\n                scale=0.4,\n                wxyz=keyframe[0].wxyz,\n                position=keyframe[0].position,\n            )\n            transform_controls.append(controls)\n            _make_transform_controls_callback(keyframe, controls)\n\n    show_keyframe_checkbox = server.gui.add_checkbox(\n        \"Show keyframes\",\n        initial_value=True,\n        hint=\"Show keyframes in the scene.\",\n    )\n\n    @show_keyframe_checkbox.on_update\n    def _(_: viser.GuiEvent) -> None:\n        camera_path.set_keyframes_visible(show_keyframe_checkbox.value)\n\n    show_spline_checkbox = server.gui.add_checkbox(\n        \"Show spline\",\n        initial_value=True,\n        hint=\"Show camera path spline in the scene.\",\n    )\n\n    @show_spline_checkbox.on_update\n    def _(_) -> None:\n        camera_path.show_spline = show_spline_checkbox.value\n        camera_path.update_spline()\n\n    playback_folder = server.gui.add_folder(\"Playback\")\n    with playback_folder:\n        play_button = server.gui.add_button(\"Play\", icon=viser.Icon.PLAYER_PLAY)\n        pause_button = server.gui.add_button(\"Pause\", icon=viser.Icon.PLAYER_PAUSE, visible=False)\n        preview_render_button = server.gui.add_button(\n            \"Preview Render\", hint=\"Show a preview of the render in the viewport.\"\n        )\n        preview_render_stop_button = server.gui.add_button(\"Exit Render Preview\", color=\"red\", visible=False)\n\n        transition_sec_number = server.gui.add_number(\n            \"Transition (sec)\",\n            min=0.001,\n            max=30.0,\n            step=0.001,\n            initial_value=2.0,\n            hint=\"Time in seconds between each keyframe, which can also be overridden on a per-transition basis.\",\n        )\n        framerate_number = server.gui.add_number(\"FPS\", min=0.1, max=240.0, step=1e-2, initial_value=30.0)\n        framerate_buttons = server.gui.add_button_group(\"\", (\"24\", \"30\", \"60\"))\n        duration_number = server.gui.add_number(\n            \"Duration (sec)\",\n            min=0.0,\n            max=1e8,\n            step=0.001,\n            initial_value=0.0,\n            disabled=True,\n        )\n\n        @framerate_buttons.on_click\n        def _(_) -> None:\n            framerate_number.value = float(framerate_buttons.value)\n\n    @transition_sec_number.on_update\n    def _(_) -> None:\n        camera_path.default_transition_sec = transition_sec_number.value\n        duration_number.value = camera_path.compute_duration()\n\n    def get_max_frame_index() -> int:\n        return max(1, int(framerate_number.value * duration_number.value) - 1)\n\n    preview_camera_handle: Optional[viser.SceneNodeHandle] = None\n\n    def remove_preview_camera() -> None:\n        nonlocal preview_camera_handle\n        if preview_camera_handle is not None:\n            preview_camera_handle.remove()\n            preview_camera_handle = None\n\n    def compute_and_update_preview_camera_state() -> Optional[Union[Tuple[tf.SE3, float], Tuple[tf.SE3, float, float]]]:\n        \"\"\"Update the render tab state with the current preview camera pose.\n        Returns current camera pose + FOV if available.\"\"\"\n\n        if preview_frame_slider is None:\n            return\n        maybe_pose_and_fov_rad = camera_path.interpolate_pose_and_fov_rad(\n            preview_frame_slider.value / get_max_frame_index()\n        )\n        if maybe_pose_and_fov_rad is None:\n            remove_preview_camera()\n            return\n        time = None\n        if len(maybe_pose_and_fov_rad) == 3:  # Time is enabled.\n            pose, fov_rad, time = maybe_pose_and_fov_rad\n            render_tab_state.preview_time = time\n        else:\n            pose, fov_rad = maybe_pose_and_fov_rad\n        render_tab_state.preview_fov = fov_rad\n        render_tab_state.preview_aspect = camera_path.get_aspect()\n        render_tab_state.preview_camera_type = camera_type.value\n\n        if time is not None:\n            return pose, fov_rad, time\n        else:\n            return pose, fov_rad\n\n    def add_preview_frame_slider() -> Optional[viser.GuiInputHandle[int]]:\n        \"\"\"Helper for creating the current frame # slider. This is removed and\n        re-added anytime the `max` value changes.\"\"\"\n\n        with playback_folder:\n            preview_frame_slider = server.gui.add_slider(\n                \"Preview frame\",\n                min=0,\n                max=get_max_frame_index(),\n                step=1,\n                initial_value=0,\n                # Place right after the pause button.\n                order=preview_render_stop_button.order + 0.01,\n                disabled=get_max_frame_index() == 1,\n            )\n            play_button.disabled = preview_frame_slider.disabled\n            preview_render_button.disabled = preview_frame_slider.disabled\n\n        @preview_frame_slider.on_update\n        def _(_) -> None:\n            nonlocal preview_camera_handle\n            maybe_pose_and_fov_rad = compute_and_update_preview_camera_state()\n            if maybe_pose_and_fov_rad is None:\n                return\n            if len(maybe_pose_and_fov_rad) == 3:  # Time is enabled.\n                pose, fov_rad, time = maybe_pose_and_fov_rad\n            else:\n                pose, fov_rad = maybe_pose_and_fov_rad\n\n            preview_camera_handle = server.scene.add_camera_frustum(\n                \"/preview_camera\",\n                fov=fov_rad,\n                aspect=resolution.value[0] / resolution.value[1],\n                scale=0.35,\n                wxyz=pose.rotation().wxyz,\n                position=pose.translation(),\n                color=(10, 200, 30),\n            )\n            if render_tab_state.preview_render:\n                for client in server.get_clients().values():\n                    client.camera.wxyz = pose.rotation().wxyz\n                    client.camera.position = pose.translation()\n\n        return preview_frame_slider\n\n    # We back up the camera poses before and after we start previewing renders.\n    camera_pose_backup_from_id: Dict[int, tuple] = {}\n\n    @preview_render_button.on_click\n    def _(_) -> None:\n        render_tab_state.preview_render = True\n        preview_render_button.visible = False\n        preview_render_stop_button.visible = True\n\n        maybe_pose_and_fov_rad = compute_and_update_preview_camera_state()\n        if maybe_pose_and_fov_rad is None:\n            remove_preview_camera()\n            return\n        if len(maybe_pose_and_fov_rad) == 3:  # Time is enabled.\n            pose, fov, time = maybe_pose_and_fov_rad\n        else:\n            pose, fov = maybe_pose_and_fov_rad\n        del fov\n\n        # Hide all scene nodes when we're previewing the render.\n        server.scene.set_global_visibility(False)\n\n        # Back up and then set camera poses.\n        for client in server.get_clients().values():\n            camera_pose_backup_from_id[client.client_id] = (\n                client.camera.position,\n                client.camera.look_at,\n                client.camera.up_direction,\n            )\n            client.camera.wxyz = pose.rotation().wxyz\n            client.camera.position = pose.translation()\n\n    @preview_render_stop_button.on_click\n    def _(_) -> None:\n        render_tab_state.preview_render = False\n        preview_render_button.visible = True\n        preview_render_stop_button.visible = False\n\n        # Revert camera poses.\n        for client in server.get_clients().values():\n            if client.client_id not in camera_pose_backup_from_id:\n                continue\n            cam_position, cam_look_at, cam_up = camera_pose_backup_from_id.pop(client.client_id)\n            client.camera.position = cam_position\n            client.camera.look_at = cam_look_at\n            client.camera.up_direction = cam_up\n            client.flush()\n\n        # Un-hide scene nodes.\n        server.scene.set_global_visibility(True)\n\n    preview_frame_slider = add_preview_frame_slider()\n\n    # Update the # of frames.\n    @duration_number.on_update\n    @framerate_number.on_update\n    def _(_) -> None:\n        remove_preview_camera()  # Will be re-added when slider is updated.\n\n        nonlocal preview_frame_slider\n        old = preview_frame_slider\n        assert old is not None\n\n        preview_frame_slider = add_preview_frame_slider()\n        if preview_frame_slider is not None:\n            old.remove()\n        else:\n            preview_frame_slider = old\n\n        camera_path.framerate = framerate_number.value\n        camera_path.update_spline()\n\n    # Play the camera trajectory when the play button is pressed.\n    @play_button.on_click\n    def _(_) -> None:\n        play_button.visible = False\n        pause_button.visible = True\n\n        def play() -> None:\n            while not play_button.visible:\n                max_frame = int(framerate_number.value * duration_number.value)\n                if max_frame > 0:\n                    assert preview_frame_slider is not None\n                    preview_frame_slider.value = (preview_frame_slider.value + 1) % max_frame\n                time.sleep(1.0 / framerate_number.value)\n\n        threading.Thread(target=play).start()\n\n    # Play the camera trajectory when the play button is pressed.\n    @pause_button.on_click\n    def _(_) -> None:\n        play_button.visible = True\n        pause_button.visible = False\n\n    # add button for loading existing path\n    load_camera_path_button = server.gui.add_button(\n        \"Load Path\", icon=viser.Icon.FOLDER_OPEN, hint=\"Load an existing camera path.\"\n    )\n\n    @load_camera_path_button.on_click\n    def _(event: viser.GuiEvent) -> None:\n        assert event.client is not None\n        camera_path_dir = datapath / \"camera_paths\"\n        camera_path_dir.mkdir(parents=True, exist_ok=True)\n        preexisting_camera_paths = list(camera_path_dir.glob(\"*.json\"))\n        preexisting_camera_filenames = [p.name for p in preexisting_camera_paths]\n\n        with event.client.gui.add_modal(\"Load Path\") as modal:\n            if len(preexisting_camera_filenames) == 0:\n                event.client.gui.add_markdown(\"No existing paths found\")\n            else:\n                event.client.gui.add_markdown(\"Select existing camera path:\")\n                camera_path_dropdown = event.client.gui.add_dropdown(\n                    label=\"Camera Path\",\n                    options=[str(p) for p in preexisting_camera_filenames],\n                    initial_value=str(preexisting_camera_filenames[0]),\n                )\n                load_button = event.client.gui.add_button(\"Load\")\n\n                @load_button.on_click\n                def _(_) -> None:\n                    # load the json file\n                    json_path = datapath / \"camera_paths\" / camera_path_dropdown.value\n                    with open(json_path, \"r\") as f:\n                        json_data = json.load(f)\n\n                    keyframes = json_data[\"keyframes\"]\n                    camera_path.reset()\n                    for i in range(len(keyframes)):\n                        frame = keyframes[i]\n                        pose = tf.SE3.from_matrix(np.array(frame[\"matrix\"]).reshape(4, 4))\n                        # apply the x rotation by 180 deg\n                        pose = tf.SE3.from_rotation_and_translation(\n                            pose.rotation() @ tf.SO3.from_x_radians(np.pi),\n                            pose.translation(),\n                        )\n                        camera_path.add_camera(\n                            Keyframe(\n                                position=pose.translation() * VISER_NERFSTUDIO_SCALE_RATIO,\n                                wxyz=pose.rotation().wxyz,\n                                # There are some floating point conversions between degrees and radians, so the fov and\n                                # default_Fov values will not be exactly matched.\n                                override_fov_enabled=abs(frame[\"fov\"] - json_data.get(\"default_fov\", 0.0)) > 1e-3,\n                                override_fov_rad=frame[\"fov\"] / 180.0 * np.pi,\n                                override_time_enabled=frame.get(\"override_time_enabled\", False),\n                                override_time_val=frame.get(\"render_time\", None),\n                                aspect=frame[\"aspect\"],\n                                override_transition_enabled=frame.get(\"override_transition_enabled\", None),\n                                override_transition_sec=frame.get(\"override_transition_sec\", None),\n                            ),\n                        )\n\n                    transition_sec_number.value = json_data.get(\"default_transition_sec\", 0.5)\n\n                    # update the render name\n                    render_name_text.value = json_path.stem\n                    camera_path.update_spline()\n                    modal.close()\n\n            cancel_button = event.client.gui.add_button(\"Cancel\")\n\n            @cancel_button.on_click\n            def _(_) -> None:\n                modal.close()\n\n    # set the initial value to the current date-time string\n    now = datetime.datetime.now()\n    render_name_text = server.gui.add_text(\n        \"Render name\",\n        initial_value=now.strftime(\"%Y-%m-%d-%H-%M-%S\"),\n        hint=\"Name of the render\",\n    )\n    render_button = server.gui.add_button(\n        \"Generate Command\",\n        color=\"green\",\n        icon=viser.Icon.FILE_EXPORT,\n        hint=\"Generate the ns-render command for rendering the camera path.\",\n    )\n\n    reset_up_button = server.gui.add_button(\n        \"Reset Up Direction\",\n        icon=viser.Icon.ARROW_BIG_UP_LINES,\n        color=\"gray\",\n        hint=\"Set the up direction of the camera orbit controls to the camera's current up direction.\",\n    )\n\n    @reset_up_button.on_click\n    def _(event: viser.GuiEvent) -> None:\n        assert event.client is not None\n        event.client.camera.up_direction = tf.SO3(event.client.camera.wxyz) @ np.array([0.0, -1.0, 0.0])\n\n    @render_button.on_click\n    def _(event: viser.GuiEvent) -> None:\n        assert event.client is not None\n        num_frames = int(framerate_number.value * duration_number.value)\n        json_data = {}\n        # json data has the properties:\n        # keyframes: list of keyframes with\n        #     matrix : flattened 4x4 matrix\n        #     fov: float in degrees\n        #     aspect: float\n        # camera_type: string of camera type\n        # render_height: int\n        # render_width: int\n        # fps: int\n        # seconds: float\n        # is_cycle: bool\n        # smoothness_value: float\n        # camera_path: list of frames with properties\n        # camera_to_world: flattened 4x4 matrix\n        # fov: float in degrees\n        # aspect: float\n        # first populate the keyframes:\n        keyframes = []\n        for keyframe, dummy in camera_path._keyframes.values():\n            pose = tf.SE3.from_rotation_and_translation(\n                tf.SO3(keyframe.wxyz) @ tf.SO3.from_x_radians(np.pi),\n                keyframe.position / VISER_NERFSTUDIO_SCALE_RATIO,\n            )\n            keyframe_dict = {\n                \"matrix\": pose.as_matrix().flatten().tolist(),\n                \"fov\": np.rad2deg(keyframe.override_fov_rad) if keyframe.override_fov_enabled else fov_degrees.value,\n                \"aspect\": keyframe.aspect,\n                \"override_transition_enabled\": keyframe.override_transition_enabled,\n                \"override_transition_sec\": keyframe.override_transition_sec,\n            }\n            if render_time is not None:\n                keyframe_dict[\"render_time\"] = (\n                    keyframe.override_time_val if keyframe.override_time_enabled else render_time.value\n                )\n                keyframe_dict[\"override_time_enabled\"] = keyframe.override_time_enabled\n            keyframes.append(keyframe_dict)\n        json_data[\"default_fov\"] = fov_degrees.value\n        if render_time is not None:\n            json_data[\"default_time\"] = render_time.value if render_time is not None else None\n        json_data[\"default_transition_sec\"] = transition_sec_number.value\n        json_data[\"keyframes\"] = keyframes\n        json_data[\"camera_type\"] = camera_type.value.lower()\n        json_data[\"render_height\"] = resolution.value[1]\n        json_data[\"render_width\"] = resolution.value[0]\n        json_data[\"fps\"] = framerate_number.value\n        json_data[\"seconds\"] = duration_number.value\n        json_data[\"is_cycle\"] = loop.value\n        json_data[\"smoothness_value\"] = tension_slider.value\n        # now populate the camera path:\n        camera_path_list = []\n        for i in range(num_frames):\n            maybe_pose_and_fov = camera_path.interpolate_pose_and_fov_rad(i / num_frames)\n            if maybe_pose_and_fov is None:\n                return\n            time = None\n            if len(maybe_pose_and_fov) == 3:  # Time is enabled.\n                pose, fov, time = maybe_pose_and_fov\n            else:\n                pose, fov = maybe_pose_and_fov\n            # rotate the axis of the camera 180 about x axis\n            pose = tf.SE3.from_rotation_and_translation(\n                pose.rotation() @ tf.SO3.from_x_radians(np.pi),\n                pose.translation() / VISER_NERFSTUDIO_SCALE_RATIO,\n            )\n            camera_path_list_dict = {\n                \"camera_to_world\": pose.as_matrix().flatten().tolist(),\n                \"fov\": np.rad2deg(fov),\n                \"aspect\": resolution.value[0] / resolution.value[1],\n            }\n            if time is not None:\n                camera_path_list_dict[\"render_time\"] = time\n            camera_path_list.append(camera_path_list_dict)\n        json_data[\"camera_path\"] = camera_path_list\n        # finally add crop data if crop is enabled\n        if control_panel is not None:\n            if control_panel.crop_viewport:\n                obb = control_panel.crop_obb\n                rpy = tf.SO3.from_matrix(obb.R.numpy()).as_rpy_radians()\n                color = control_panel.background_color\n                json_data[\"crop\"] = {\n                    \"crop_center\": obb.T.tolist(),\n                    \"crop_scale\": obb.S.tolist(),\n                    \"crop_rot\": [rpy.roll, rpy.pitch, rpy.yaw],\n                    \"crop_bg_color\": {\"r\": color[0], \"g\": color[1], \"b\": color[2]},\n                }\n\n        # now write the json file\n        json_outfile = datapath / \"camera_paths\" / f\"{render_name_text.value}.json\"\n        json_outfile.parent.mkdir(parents=True, exist_ok=True)\n        with open(json_outfile.absolute(), \"w\") as outfile:\n            json.dump(json_data, outfile)\n        # now show the command\n        with event.client.gui.add_modal(\"Render Command\") as modal:\n            dataname = datapath.name\n            command = \" \".join(\n                [\n                    \"ns-render camera-path\",\n                    f\"--load-config {config_path}\",\n                    f\"--camera-path-filename {json_outfile.absolute()}\",\n                    f\"--output-path renders/{dataname}/{render_name_text.value}.mp4\",\n                ]\n            )\n            event.client.gui.add_markdown(\n                \"\\n\".join(\n                    [\n                        \"To render the trajectory, run the following from the command line:\",\n                        \"\",\n                        \"```\",\n                        command,\n                        \"```\",\n                    ]\n                )\n            )\n            close_button = event.client.gui.add_button(\"Close\")\n\n            @close_button.on_click\n            def _(_) -> None:\n                modal.close()\n\n    if control_panel is not None:\n        camera_path = CameraPath(server, duration_number, control_panel._time_enabled)\n    else:\n        camera_path = CameraPath(server, duration_number)\n    camera_path.tension = tension_slider.value\n    camera_path.default_fov = fov_degrees.value / 180.0 * np.pi\n    camera_path.default_transition_sec = transition_sec_number.value\n\n    return render_tab_state\n\n\nif __name__ == \"__main__\":\n    populate_render_tab(\n        server=viser.ViserServer(),\n        config_path=Path(\".\"),\n        datapath=Path(\".\"),\n    )\n    while True:\n        time.sleep(10.0)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/render_state_machine.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"This file contains the render state machine, which is responsible for deciding when to render the image\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport threading\nimport time\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Dict, Literal, Optional, Tuple, get_args\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom viser import ClientHandle\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.model_components.renderers import background_color_override_context\nfrom nerfstudio.models.splatfacto import SplatfactoModel\nfrom nerfstudio.utils import colormaps, writer\nfrom nerfstudio.utils.writer import GLOBAL_BUFFER, EventName, TimeWriter\nfrom nerfstudio.viewer.utils import CameraState, get_camera\nfrom nerfstudio.viewer_legacy.server import viewer_utils\n\nif TYPE_CHECKING:\n    from nerfstudio.viewer.viewer import Viewer\n\nRenderStates = Literal[\"low_move\", \"low_static\", \"high\"]\nRenderActions = Literal[\"rerender\", \"move\", \"static\", \"step\"]\n\n\n@dataclass\nclass RenderAction:\n    \"\"\"Message to the render state machine\"\"\"\n\n    action: RenderActions\n    \"\"\"The action to take \"\"\"\n    camera_state: CameraState\n    \"\"\"The current camera state \"\"\"\n\n\nclass RenderStateMachine(threading.Thread):\n    \"\"\"The render state machine is responsible for deciding how to render the image.\n    It decides the resolution and whether to interrupt the current render.\n\n    Args:\n        viewer: the viewer state\n    \"\"\"\n\n    def __init__(self, viewer: Viewer, viser_scale_ratio: float, client: ClientHandle):\n        threading.Thread.__init__(self)\n        self.transitions: Dict[RenderStates, Dict[RenderActions, RenderStates]] = {\n            s: {} for s in get_args(RenderStates)\n        }\n        # by default, everything is a self-transition\n        for a in get_args(RenderActions):\n            for s in get_args(RenderStates):\n                self.transitions[s][a] = s\n        # then define the actions between states\n        self.transitions[\"low_move\"][\"static\"] = \"low_static\"\n        self.transitions[\"low_static\"][\"static\"] = \"high\"\n        self.transitions[\"low_static\"][\"step\"] = \"high\"\n        self.transitions[\"low_static\"][\"move\"] = \"low_move\"\n        self.transitions[\"high\"][\"move\"] = \"low_move\"\n        self.transitions[\"high\"][\"rerender\"] = \"low_static\"\n        self.next_action: Optional[RenderAction] = None\n        self.state: RenderStates = \"low_static\"\n        self.render_trigger = threading.Event()\n        self.target_fps = 30\n        self.viewer = viewer\n        self.interrupt_render_flag = False\n        self.daemon = True\n        self.output_keys = {}\n        self.viser_scale_ratio = viser_scale_ratio\n        self.client = client\n        self.running = True\n\n    def action(self, action: RenderAction):\n        \"\"\"Takes an action and updates the state machine\n\n        Args:\n            action: the action to take\n        \"\"\"\n        if self.next_action is None:\n            self.next_action = action\n        elif action.action == \"step\" and (self.state == \"low_move\" or self.next_action.action in (\"move\", \"rerender\")):\n            # ignore steps if:\n            #  1. we are in low_moving state\n            #  2. the current next_action is move, static, or rerender\n            return\n        elif self.next_action.action == \"rerender\":\n            # never overwrite rerenders\n            pass\n        elif action.action == \"static\" and self.next_action.action == \"move\":\n            # don't overwrite a move action with a static: static is always self-fired\n            return\n        else:\n            #  monimal use case, just set the next action\n            self.next_action = action\n\n        # handle interrupt logic\n        if self.state == \"high\" and self.next_action.action in (\"move\", \"rerender\"):\n            self.interrupt_render_flag = True\n        self.render_trigger.set()\n\n    def _render_img(self, camera_state: CameraState):\n        \"\"\"Takes the current camera, generates rays, and renders the image\n\n        Args:\n            camera_state: the current camera state\n        \"\"\"\n        # initialize the camera ray bundle\n        if self.viewer.control_panel.crop_viewport:\n            obb = self.viewer.control_panel.crop_obb\n        else:\n            obb = None\n\n        image_height, image_width = self._calculate_image_res(camera_state.aspect)\n\n        # These 2 lines make the control panel's time option independent from the render panel's.\n        # When outside of render preview, it will use the control panel's time.\n        if not self.viewer.render_tab_state.preview_render and self.viewer.include_time:\n            camera_state.time = self.viewer.control_panel.time\n        camera = get_camera(camera_state, image_height, image_width)\n        camera = camera.to(self.viewer.get_model().device)\n        assert isinstance(camera, Cameras)\n        assert camera is not None, \"render called before viewer connected\"\n\n        with TimeWriter(None, None, write=False) as vis_t:\n            with self.viewer.train_lock if self.viewer.train_lock is not None else contextlib.nullcontext():\n                if isinstance(self.viewer.get_model(), SplatfactoModel):\n                    color = self.viewer.control_panel.background_color\n                    background_color = torch.tensor(\n                        [color[0] / 255.0, color[1] / 255.0, color[2] / 255.0],\n                        device=self.viewer.get_model().device,\n                    )\n                    self.viewer.get_model().set_background(background_color)\n                was_training = self.viewer.get_model().training\n                self.viewer.get_model().eval()\n                step = self.viewer.step\n                try:\n                    if self.viewer.control_panel.crop_viewport:\n                        color = self.viewer.control_panel.background_color\n                        if color is None:\n                            background_color = torch.tensor([0.0, 0.0, 0.0], device=self.viewer.pipeline.model.device)\n                        else:\n                            background_color = torch.tensor(\n                                [color[0] / 255.0, color[1] / 255.0, color[2] / 255.0],\n                                device=self.viewer.get_model().device,\n                            )\n                        with background_color_override_context(\n                            background_color\n                        ), torch.no_grad(), viewer_utils.SetTrace(self.check_interrupt):\n                            outputs = self.viewer.get_model().get_outputs_for_camera(camera, obb_box=obb)\n                    else:\n                        with torch.no_grad(), viewer_utils.SetTrace(self.check_interrupt):\n                            outputs = self.viewer.get_model().get_outputs_for_camera(camera, obb_box=obb)\n                except viewer_utils.IOChangeException:\n                    raise\n                finally:\n                    if was_training:\n                        self.viewer.get_model().train()\n            num_rays = (camera.height * camera.width).item()\n            if self.viewer.control_panel.layer_depth:\n                if isinstance(self.viewer.get_model(), SplatfactoModel):\n                    # Gaussians render much faster than we can send depth images, so we do some downsampling.\n                    assert len(outputs[\"depth\"].shape) == 3\n                    assert outputs[\"depth\"].shape[-1] == 1\n\n                    desired_depth_pixels = {\"low_move\": 128, \"low_static\": 128, \"high\": 512}[self.state] ** 2\n                    current_depth_pixels = outputs[\"depth\"].shape[0] * outputs[\"depth\"].shape[1]\n\n                    # from the panel of ns-viewer, it is possible for user to enter zero resolution\n                    scale = min(desired_depth_pixels / max(1, current_depth_pixels), 1.0)\n\n                    outputs[\"gl_z_buf_depth\"] = F.interpolate(\n                        outputs[\"depth\"].squeeze(dim=-1)[None, None, ...],\n                        size=(int(outputs[\"depth\"].shape[0] * scale), int(outputs[\"depth\"].shape[1] * scale)),\n                        mode=\"bilinear\",\n                    )[0, 0, :, :, None]\n                else:\n                    # Convert to z_depth if depth compositing is enabled.\n                    R = camera.camera_to_worlds[0, 0:3, 0:3].T\n                    camera_ray_bundle = camera.generate_rays(camera_indices=0, obb_box=obb)\n                    pts = camera_ray_bundle.directions * outputs[\"depth\"]\n                    pts = (R @ (pts.view(-1, 3).T)).T.view(*camera_ray_bundle.directions.shape)\n                    outputs[\"gl_z_buf_depth\"] = -pts[..., 2:3]  # negative z axis is the coordinate convention\n        render_time = vis_t.duration\n        if writer.is_initialized() and render_time != 0:\n            writer.put_time(\n                name=EventName.VIS_RAYS_PER_SEC, duration=num_rays / render_time, step=step, avg_over_steps=True\n            )\n        return outputs\n\n    def run(self):\n        \"\"\"Main loop for the render thread\"\"\"\n        while self.running:\n            if not self.viewer.ready:\n                time.sleep(0.1)\n                continue\n            if not self.render_trigger.wait(0.2):\n                # if we haven't received a trigger in a while, send a static action\n                self.action(RenderAction(action=\"static\", camera_state=self.viewer.get_camera_state(self.client)))\n            action = self.next_action\n            self.render_trigger.clear()\n            if action is None:\n                continue\n            self.next_action = None\n            if self.state == \"high\" and action.action == \"static\":\n                # if we are in high res and we get a static action, we don't need to do anything\n                continue\n            self.state = self.transitions[self.state][action.action]\n            try:\n                outputs = self._render_img(action.camera_state)\n            except viewer_utils.IOChangeException:\n                # if we got interrupted, don't send the output to the viewer\n                continue\n            self._send_output_to_viewer(outputs, static_render=(action.action in [\"static\", \"step\"]))\n\n    def check_interrupt(self, frame, event, arg):\n        \"\"\"Raises interrupt when flag has been set and not already on lowest resolution.\n        Used in conjunction with SetTrace.\n        \"\"\"\n        if event == \"line\":\n            if self.interrupt_render_flag:\n                self.interrupt_render_flag = False\n                raise viewer_utils.IOChangeException\n        return self.check_interrupt\n\n    def _send_output_to_viewer(self, outputs: Dict[str, Any], static_render: bool = True):\n        \"\"\"Chooses the correct output and sends it to the viewer\n\n        Args:\n            outputs: the dictionary of outputs to choose from, from the model\n        \"\"\"\n        output_keys = set(outputs.keys())\n        if self.output_keys != output_keys:\n            self.output_keys = output_keys\n            self.viewer.control_panel.update_output_options(list(outputs.keys()))\n\n        output_render = self.viewer.control_panel.output_render\n        self.viewer.update_colormap_options(\n            dimensions=outputs[output_render].shape[-1], dtype=outputs[output_render].dtype\n        )\n        selected_output = colormaps.apply_colormap(\n            image=outputs[self.viewer.control_panel.output_render],\n            colormap_options=self.viewer.control_panel.colormap_options,\n        )\n\n        if self.viewer.control_panel.split:\n            split_output_render = self.viewer.control_panel.split_output_render\n            self.viewer.update_split_colormap_options(\n                dimensions=outputs[split_output_render].shape[-1], dtype=outputs[split_output_render].dtype\n            )\n            split_output = colormaps.apply_colormap(\n                image=outputs[self.viewer.control_panel.split_output_render],\n                colormap_options=self.viewer.control_panel.split_colormap_options,\n            )\n            split_index = min(\n                int(self.viewer.control_panel.split_percentage * selected_output.shape[1]),\n                selected_output.shape[1] - 1,\n            )\n            selected_output = torch.cat([selected_output[:, :split_index], split_output[:, split_index:]], dim=1)\n            selected_output[:, split_index] = torch.tensor([0.133, 0.157, 0.192], device=selected_output.device)\n\n        selected_output = (selected_output * 255).type(torch.uint8)\n        depth = (\n            outputs[\"gl_z_buf_depth\"].cpu().numpy() * self.viser_scale_ratio if \"gl_z_buf_depth\" in outputs else None\n        )\n\n        # Convert to numpy.\n        selected_output = selected_output.cpu().numpy()\n        assert selected_output.shape[-1] == 3\n\n        # Pad image if the aspect ratio (W/H) doesn't match the client!\n        current_h, current_w = selected_output.shape[:2]\n        desired_aspect = self.client.camera.aspect\n        pad_width = int(max(0, (desired_aspect * current_h - current_w) // 2))\n        pad_height = int(max(0, (current_w / desired_aspect - current_h) // 2))\n        if pad_width > 5 or pad_height > 5:\n            selected_output = np.pad(\n                selected_output,\n                ((pad_height, pad_height), (pad_width, pad_width), (0, 0)),\n                mode=\"constant\",\n                constant_values=0,\n            )\n\n        jpg_quality = (\n            self.viewer.config.jpeg_quality\n            if static_render\n            else 75\n            if self.viewer.render_tab_state.preview_render\n            else 40\n        )\n        self.client.scene.set_background_image(\n            selected_output,\n            format=self.viewer.config.image_format,\n            jpeg_quality=jpg_quality,\n            depth=depth,\n        )\n        res = f\"{selected_output.shape[1]}x{selected_output.shape[0]}px\"\n        self.viewer.stats_markdown.content = self.viewer.make_stats_markdown(None, res)\n\n    def _calculate_image_res(self, aspect_ratio: float) -> Tuple[int, int]:\n        \"\"\"Calculate the maximum image height that can be rendered in the time budget\n\n        Args:\n            apect_ratio: the aspect ratio of the current view\n        Returns:\n            image_height: the maximum image height that can be rendered in the time budget\n            image_width: the maximum image width that can be rendered in the time budget\n        \"\"\"\n        max_res = self.viewer.control_panel.max_res\n        if self.state == \"high\":\n            # high res is always static\n            image_height = max_res\n            image_width = int(image_height * aspect_ratio)\n            if image_width > max_res:\n                image_width = max_res\n                image_height = int(image_width / aspect_ratio)\n        elif self.state in (\"low_move\", \"low_static\"):\n            if writer.is_initialized() and EventName.VIS_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]:\n                vis_rays_per_sec = GLOBAL_BUFFER[\"events\"][EventName.VIS_RAYS_PER_SEC.value][\"avg\"]\n            else:\n                vis_rays_per_sec = 100000\n            target_fps = self.target_fps\n            num_vis_rays = vis_rays_per_sec / target_fps\n            image_height = (num_vis_rays / aspect_ratio) ** 0.5\n            image_height = int(round(image_height, -1))\n            image_height = max(min(max_res, image_height), 30)\n            image_width = int(image_height * aspect_ratio)\n            if image_width > max_res:\n                image_width = max_res\n                image_height = int(image_width / aspect_ratio)\n        else:\n            raise ValueError(f\"Invalid state: {self.state}\")\n\n        return image_height, image_width\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/server/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/server/viewer_elements.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Shim for viewer_elements.py, which has been moved.\n\nResolves issues like: https://github.com/ayaanzhaque/instruct-nerf2nerf/pull/88\n\"\"\"\n\nfrom ..viewer_elements import *  # noqa\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom functools import cached_property\nfrom typing import Any, List, Literal, Optional, Tuple, Type, Union\n\nimport numpy as np\nimport torch\nfrom jaxtyping import Float\nfrom torch import nn\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.models.base_model import Model\n\n\n@dataclass\nclass CameraState:\n    \"\"\"A dataclass for storing the camera state.\"\"\"\n\n    fov: float\n    \"\"\"The field of view of the camera.\"\"\"\n    aspect: float\n    \"\"\"The aspect ratio of the image. \"\"\"\n    c2w: Float[torch.Tensor, \"3 4\"]\n    \"\"\"The camera matrix.\"\"\"\n    camera_type: Literal[CameraType.PERSPECTIVE, CameraType.EQUIRECTANGULAR, CameraType.FISHEYE]\n    \"\"\"Type of camera to render.\"\"\"\n    time: float = 0.0\n    \"\"\"The rendering time of the camera state.\"\"\"\n    idx: int = 0\n    \"\"\"The index of the current camera.\"\"\"\n\n\ndef get_camera(\n    camera_state: CameraState, image_height: int, image_width: Optional[Union[int, float]] = None\n) -> Cameras:\n    \"\"\"Returns the camera intrinsics matrix and the camera to world homogeneous matrix.\n\n    Args:\n        camera_state: the camera state\n        image_size: the size of the image (height, width)\n    \"\"\"\n    # intrinsics\n    fov = camera_state.fov\n    aspect = camera_state.aspect\n    if image_width is None:\n        image_width = aspect * image_height\n    pp_w = image_width / 2.0\n    pp_h = image_height / 2.0\n    focal_length = pp_h / np.tan(fov / 2.0)\n    intrinsics_matrix = torch.tensor([[focal_length, 0, pp_w], [0, focal_length, pp_h], [0, 0, 1]], dtype=torch.float32)\n\n    if camera_state.camera_type is CameraType.EQUIRECTANGULAR:\n        fx = float(image_width / 2)\n        fy = float(image_height)\n    else:\n        fx = intrinsics_matrix[0, 0]\n        fy = intrinsics_matrix[1, 1]\n\n    camera = Cameras(\n        fx=fx,\n        fy=fy,\n        cx=pp_w,\n        cy=pp_h,\n        camera_type=camera_state.camera_type,\n        camera_to_worlds=camera_state.c2w.to(torch.float32)[None, ...],\n        times=torch.tensor([camera_state.time], dtype=torch.float32),\n        metadata={\"cam_idx\": camera_state.idx},\n    )\n    return camera\n\n\ndef update_render_aabb(\n    crop_viewport: bool, crop_min: Tuple[float, float, float], crop_max: Tuple[float, float, float], model: Model\n):\n    \"\"\"\n    update the render aabb box for the viewer:\n\n    Args:\n        crop_viewport: whether to crop the viewport\n        crop_min: min of the crop box\n        crop_max: max of the crop box\n        model: the model to render\n    \"\"\"\n\n    if crop_viewport:\n        crop_min_tensor = torch.tensor(crop_min, dtype=torch.float32)\n        crop_max_tensor = torch.tensor(crop_max, dtype=torch.float32)\n\n        if isinstance(model.render_aabb, SceneBox):\n            model.render_aabb.aabb[0] = crop_min_tensor\n            model.render_aabb.aabb[1] = crop_max_tensor\n        else:\n            model.render_aabb = SceneBox(aabb=torch.stack([crop_min_tensor, crop_max_tensor], dim=0))\n    else:\n        model.render_aabb = None\n\n\ndef parse_object(\n    obj: Any,\n    type_check: Type[Any],\n    tree_stub: str,\n) -> List[Tuple[str, Any]]:\n    \"\"\"\n    obj: the object to parse\n    type_check: recursively adds instances of this type to the output\n    tree_stub: the path down the object tree to this object\n\n    Returns:\n        a list of (path/to/object, obj), which represents the path down the object tree\n        along with the object itself\n    \"\"\"\n\n    def add(ret: List[Tuple[str, Any]], ts: str, v: Any):\n        \"\"\"\n        helper that adds to ret, and if v exists already keeps the tree stub with\n        the shortest path\n        \"\"\"\n        for i, (t, o) in enumerate(ret):\n            if o == v:\n                if len(t.split(\"/\")) > len(ts.split(\"/\")):\n                    ret[i] = (ts, v)\n                return\n        ret.append((ts, v))\n\n    if not hasattr(obj, \"__dict__\"):\n        return []\n    ret = []\n    # get a list of the properties of the object, sorted by whether things are instances of type_check\n    # we skip cached properties, which can be expensive to call `getattr()` on!\n    obj_props = [(k, getattr(obj, k)) for k in dir(obj) if not isinstance(getattr(type(obj), k, None), cached_property)]\n    for k, v in obj_props:\n        if k[0] == \"_\":\n            continue\n        new_tree_stub = f\"{tree_stub}/{k}\"\n        if isinstance(v, type_check):\n            add(ret, new_tree_stub, v)\n        elif isinstance(v, nn.Module):\n            if v is obj:\n                # some nn.Modules might contain infinite references, e.g. consider foo = nn.Module(), foo.bar = foo\n                # to stop infinite recursion, we skip such attributes\n                continue\n            lower_rets = parse_object(v, type_check, new_tree_stub)\n            # check that the values aren't already in the tree\n            for ts, o in lower_rets:\n                add(ret, ts, o)\n    return ret\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/viewer.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Manage the state of the viewer\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport threading\nimport time\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, Dict, List, Literal, Optional\n\nimport numpy as np\nimport torch\nimport viser\nimport viser.theme\nimport viser.transforms as vtf\nfrom typing_extensions import assert_never\n\nfrom nerfstudio.cameras.camera_optimizers import CameraOptimizer\nfrom nerfstudio.cameras.cameras import CameraType\nfrom nerfstudio.configs import base_config as cfg\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.models.splatfacto import SplatfactoModel\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils.decorators import check_main_thread, decorate_all\nfrom nerfstudio.utils.writer import GLOBAL_BUFFER, EventName\nfrom nerfstudio.viewer.control_panel import ControlPanel\nfrom nerfstudio.viewer.export_panel import populate_export_tab\nfrom nerfstudio.viewer.render_panel import populate_render_tab\nfrom nerfstudio.viewer.render_state_machine import RenderAction, RenderStateMachine\nfrom nerfstudio.viewer.utils import CameraState, parse_object\nfrom nerfstudio.viewer.viewer_elements import ViewerControl, ViewerElement\nfrom nerfstudio.viewer_legacy.server import viewer_utils\n\nif TYPE_CHECKING:\n    from nerfstudio.engine.trainer import Trainer\n\n\nVISER_NERFSTUDIO_SCALE_RATIO: float = 10.0\n\n\n@decorate_all([check_main_thread])\nclass Viewer:\n    \"\"\"Class to hold state for viewer variables\n\n    Args:\n        config: viewer setup configuration\n        log_filename: filename to log viewer output to\n        datapath: path to data\n        pipeline: pipeline object to use\n        trainer: trainer object to use\n        share: print a shareable URL\n\n    Attributes:\n        viewer_info: information string for the viewer\n        viser_server: the viser server\n    \"\"\"\n\n    viewer_info: List[str]\n    viser_server: viser.ViserServer\n\n    def __init__(\n        self,\n        config: cfg.ViewerConfig,\n        log_filename: Path,\n        datapath: Path,\n        pipeline: Pipeline,\n        trainer: Optional[Trainer] = None,\n        train_lock: Optional[threading.Lock] = None,\n        share: bool = False,\n    ):\n        self.ready = False  # Set to True at end of constructor.\n        self.config = config\n        self.trainer = trainer\n        self.last_step = 0\n        self.train_lock = train_lock\n        self.pipeline = pipeline\n        self.log_filename = log_filename\n        self.datapath = datapath.parent if datapath.is_file() else datapath\n        self.include_time = self.pipeline.datamanager.includes_time\n\n        if self.config.websocket_port is None:\n            websocket_port = viewer_utils.get_free_port(default_port=self.config.websocket_port_default)\n        else:\n            websocket_port = self.config.websocket_port\n        self.log_filename.parent.mkdir(exist_ok=True)\n\n        # viewer specific variables\n        self.output_type_changed = True\n        self.output_split_type_changed = True\n        self.step = 0\n        self.train_btn_state: Literal[\"training\", \"paused\", \"completed\"] = (\n            \"training\" if self.trainer is None else self.trainer.training_state\n        )\n        self._prev_train_state: Literal[\"training\", \"paused\", \"completed\"] = self.train_btn_state\n        self.last_move_time = 0\n        # track the camera index that last being clicked\n        self.current_camera_idx = 0\n\n        self.viser_server = viser.ViserServer(host=config.websocket_host, port=websocket_port)\n        # Set the name of the URL either to the share link if available, or the localhost\n        share_url = None\n        if share:\n            share_url = self.viser_server.request_share_url()\n            if share_url is None:\n                print(\"Couldn't make share URL!\")\n\n        if share_url is not None:\n            self.viewer_info = [f\"Viewer at: http://localhost:{websocket_port} or {share_url}\"]\n        elif config.websocket_host == \"0.0.0.0\":\n            # 0.0.0.0 is not a real IP address and was confusing people, so\n            # we'll just print localhost instead. There are some security\n            # (and IPv6 compatibility) implications here though, so we should\n            # note that the server is bound to 0.0.0.0!\n            self.viewer_info = [f\"Viewer running locally at: http://localhost:{websocket_port} (listening on 0.0.0.0)\"]\n        else:\n            self.viewer_info = [f\"Viewer running locally at: http://{config.websocket_host}:{websocket_port}\"]\n\n        buttons = (\n            viser.theme.TitlebarButton(\n                text=\"Getting Started\",\n                icon=None,\n                href=\"https://nerf.studio\",\n            ),\n            viser.theme.TitlebarButton(\n                text=\"Github\",\n                icon=\"GitHub\",\n                href=\"https://github.com/nerfstudio-project/nerfstudio\",\n            ),\n            viser.theme.TitlebarButton(\n                text=\"Documentation\",\n                icon=\"Description\",\n                href=\"https://docs.nerf.studio\",\n            ),\n        )\n        image = viser.theme.TitlebarImage(\n            image_url_light=\"https://docs.nerf.studio/_static/imgs/logo.png\",\n            image_url_dark=\"https://docs.nerf.studio/_static/imgs/logo-dark.png\",\n            image_alt=\"NerfStudio Logo\",\n            href=\"https://docs.nerf.studio/\",\n        )\n        titlebar_theme = viser.theme.TitlebarConfig(buttons=buttons, image=image)\n        self.viser_server.gui.configure_theme(\n            titlebar_content=titlebar_theme,\n            control_layout=\"collapsible\",\n            dark_mode=True,\n            brand_color=(255, 211, 105),\n        )\n\n        self.render_statemachines: Dict[int, RenderStateMachine] = {}\n        self.viser_server.on_client_disconnect(self.handle_disconnect)\n        self.viser_server.on_client_connect(self.handle_new_client)\n\n        # Populate the header, which includes the pause button, train cam button, and stats\n        self.pause_train = self.viser_server.gui.add_button(\n            label=\"Pause Training\", disabled=False, icon=viser.Icon.PLAYER_PAUSE_FILLED\n        )\n        self.pause_train.on_click(lambda _: self.toggle_pause_button())\n        self.pause_train.on_click(lambda han: self._toggle_training_state(han))\n        self.resume_train = self.viser_server.gui.add_button(\n            label=\"Resume Training\", disabled=False, icon=viser.Icon.PLAYER_PLAY_FILLED\n        )\n        self.resume_train.on_click(lambda _: self.toggle_pause_button())\n        self.resume_train.on_click(lambda han: self._toggle_training_state(han))\n        if self.train_btn_state == \"training\":\n            self.resume_train.visible = False\n        else:\n            self.pause_train.visible = False\n\n        # Add buttons to toggle training image visibility\n        self.hide_images = self.viser_server.gui.add_button(\n            label=\"Hide Train Cams\", disabled=False, icon=viser.Icon.EYE_OFF, color=None\n        )\n        self.hide_images.on_click(lambda _: self.set_camera_visibility(False))\n        self.hide_images.on_click(lambda _: self.toggle_cameravis_button())\n        self.show_images = self.viser_server.gui.add_button(\n            label=\"Show Train Cams\", disabled=False, icon=viser.Icon.EYE, color=None\n        )\n        self.show_images.on_click(lambda _: self.set_camera_visibility(True))\n        self.show_images.on_click(lambda _: self.toggle_cameravis_button())\n        self.show_images.visible = False\n        mkdown = self.make_stats_markdown(0, \"0x0px\")\n        self.stats_markdown = self.viser_server.gui.add_markdown(mkdown)\n        tabs = self.viser_server.gui.add_tab_group()\n        control_tab = tabs.add_tab(\"Control\", viser.Icon.SETTINGS)\n        with control_tab:\n            self.control_panel = ControlPanel(\n                self.viser_server,\n                self.include_time,\n                VISER_NERFSTUDIO_SCALE_RATIO,\n                self._trigger_rerender,\n                self._output_type_change,\n                self._output_split_type_change,\n                default_composite_depth=self.config.default_composite_depth,\n            )\n        config_path = self.log_filename.parents[0] / \"config.yml\"\n        with tabs.add_tab(\"Render\", viser.Icon.CAMERA):\n            self.render_tab_state = populate_render_tab(\n                self.viser_server, config_path, self.datapath, self.control_panel\n            )\n\n        with tabs.add_tab(\"Export\", viser.Icon.PACKAGE_EXPORT):\n            populate_export_tab(self.viser_server, self.control_panel, config_path, self.pipeline.model)\n\n        # Keep track of the pointers to generated GUI folders, because each generated folder holds a unique ID.\n        viewer_gui_folders = dict()\n\n        def prev_cb_wrapper(prev_cb):\n            # We wrap the callbacks in the train_lock so that the callbacks are thread-safe with the\n            # concurrently executing render thread. This may block rendering, however this can be necessary\n            # if the callback uses get_outputs internally.\n            def cb_lock(element):\n                with self.train_lock if self.train_lock is not None else contextlib.nullcontext():\n                    prev_cb(element)\n\n            return cb_lock\n\n        def nested_folder_install(folder_labels: List[str], prev_labels: List[str], element: ViewerElement):\n            if len(folder_labels) == 0:\n                element.install(self.viser_server)\n                # also rewire the hook to rerender\n                prev_cb = element.cb_hook\n                element.cb_hook = lambda element: [prev_cb_wrapper(prev_cb)(element), self._trigger_rerender()]\n            else:\n                # recursively create folders\n                # If the folder name is \"Custom Elements/a/b\", then:\n                #   in the beginning: folder_path will be\n                #       \"/\".join([] + [\"Custom Elements\"]) --> \"Custom Elements\"\n                #   later, folder_path will be\n                #       \"/\".join([\"Custom Elements\"] + [\"a\"]) --> \"Custom Elements/a\"\n                #       \"/\".join([\"Custom Elements\", \"a\"] + [\"b\"]) --> \"Custom Elements/a/b\"\n                #  --> the element will be installed in the folder \"Custom Elements/a/b\"\n                #\n                # Note that the gui_folder is created only when the folder is not in viewer_gui_folders,\n                # and we use the folder_path as the key to check if the folder is already created.\n                # Otherwise, use the existing folder as context manager.\n                folder_path = \"/\".join(prev_labels + [folder_labels[0]])\n                if folder_path not in viewer_gui_folders:\n                    viewer_gui_folders[folder_path] = self.viser_server.gui.add_folder(folder_labels[0])\n                with viewer_gui_folders[folder_path]:\n                    nested_folder_install(folder_labels[1:], prev_labels + [folder_labels[0]], element)\n\n        with control_tab:\n            from nerfstudio.viewer_legacy.server.viewer_elements import ViewerElement as LegacyViewerElement\n\n            if len(parse_object(pipeline, LegacyViewerElement, \"Custom Elements\")) > 0:\n                from nerfstudio.utils.rich_utils import CONSOLE\n\n                CONSOLE.print(\n                    \"Legacy ViewerElements detected in model, please import nerfstudio.viewer.viewer_elements instead\",\n                    style=\"bold yellow\",\n                )\n            self.viewer_elements = []\n            self.viewer_elements.extend(parse_object(pipeline, ViewerElement, \"Custom Elements\"))\n            for param_path, element in self.viewer_elements:\n                folder_labels = param_path.split(\"/\")[:-1]\n                nested_folder_install(folder_labels, [], element)\n\n            # scrape the trainer/pipeline for any ViewerControl objects to initialize them\n            self.viewer_controls: List[ViewerControl] = [\n                e for (_, e) in parse_object(pipeline, ViewerControl, \"Custom Elements\")\n            ]\n        for c in self.viewer_controls:\n            c._setup(self)\n\n        # Diagnostics for Gaussian Splatting: where the points are at the start of training.\n        # This is hidden by default, it can be shown from the Viser UI's scene tree table.\n        if isinstance(pipeline.model, SplatfactoModel):\n            self.viser_server.scene.add_point_cloud(\n                \"/gaussian_splatting_initial_points\",\n                points=pipeline.model.means.numpy(force=True) * VISER_NERFSTUDIO_SCALE_RATIO,\n                colors=(255, 0, 0),\n                point_size=0.01,\n                point_shape=\"circle\",\n                visible=False,  # Hidden by default.\n            )\n        self.ready = True\n\n    def toggle_pause_button(self) -> None:\n        self.pause_train.visible = not self.pause_train.visible\n        self.resume_train.visible = not self.resume_train.visible\n\n    def toggle_cameravis_button(self) -> None:\n        self.hide_images.visible = not self.hide_images.visible\n        self.show_images.visible = not self.show_images.visible\n\n    def make_stats_markdown(self, step: Optional[int], res: Optional[str]) -> str:\n        # if either are None, read it from the current stats_markdown content\n        if step is None:\n            step = int(self.stats_markdown.content.split(\"\\n\")[0].split(\": \")[1])\n        if res is None:\n            res = (self.stats_markdown.content.split(\"\\n\")[1].split(\": \")[1]).strip()\n        return f\"Step: {step}  \\nResolution: {res}\"\n\n    def update_step(self, step):\n        \"\"\"\n        Args:\n            step: the train step to set the model to\n        \"\"\"\n        self.stats_markdown.content = self.make_stats_markdown(step, None)\n\n    def get_camera_state(self, client: viser.ClientHandle) -> CameraState:\n        R = vtf.SO3(wxyz=client.camera.wxyz)\n        R = R @ vtf.SO3.from_x_radians(np.pi)\n        R = torch.tensor(R.as_matrix())\n        pos = torch.tensor(client.camera.position, dtype=torch.float64) / VISER_NERFSTUDIO_SCALE_RATIO\n        c2w = torch.concatenate([R, pos[:, None]], dim=1)\n        if self.ready and self.render_tab_state.preview_render:\n            camera_type = self.render_tab_state.preview_camera_type\n            camera_state = CameraState(\n                fov=self.render_tab_state.preview_fov,\n                aspect=self.render_tab_state.preview_aspect,\n                c2w=c2w,\n                time=self.render_tab_state.preview_time,\n                camera_type=CameraType.PERSPECTIVE\n                if camera_type == \"Perspective\"\n                else CameraType.FISHEYE\n                if camera_type == \"Fisheye\"\n                else CameraType.EQUIRECTANGULAR\n                if camera_type == \"Equirectangular\"\n                else assert_never(camera_type),\n                idx=self.current_camera_idx,\n            )\n        else:\n            camera_state = CameraState(\n                fov=client.camera.fov,\n                aspect=client.camera.aspect,\n                c2w=c2w,\n                camera_type=CameraType.PERSPECTIVE,\n                idx=self.current_camera_idx,\n            )\n        return camera_state\n\n    def handle_disconnect(self, client: viser.ClientHandle) -> None:\n        self.render_statemachines[client.client_id].running = False\n        self.render_statemachines.pop(client.client_id)\n\n    def handle_new_client(self, client: viser.ClientHandle) -> None:\n        self.render_statemachines[client.client_id] = RenderStateMachine(self, VISER_NERFSTUDIO_SCALE_RATIO, client)\n        self.render_statemachines[client.client_id].start()\n\n        @client.camera.on_update\n        def _(_: viser.CameraHandle) -> None:\n            if not self.ready:\n                return\n            self.last_move_time = time.time()\n            with self.viser_server.atomic():\n                camera_state = self.get_camera_state(client)\n                self.render_statemachines[client.client_id].action(RenderAction(\"move\", camera_state))\n\n    def set_camera_visibility(self, visible: bool) -> None:\n        \"\"\"Toggle the visibility of the training cameras.\"\"\"\n        with self.viser_server.atomic():\n            for idx in self.camera_handles:\n                self.camera_handles[idx].visible = visible\n\n    def update_camera_poses(self):\n        # TODO this fn accounts for like ~5% of total train time\n        # Update the train camera locations based on optimization\n        assert self.camera_handles is not None\n        if hasattr(self.pipeline.datamanager, \"train_camera_optimizer\"):\n            camera_optimizer = self.pipeline.datamanager.train_camera_optimizer\n        elif hasattr(self.pipeline.model, \"camera_optimizer\"):\n            camera_optimizer = self.pipeline.model.camera_optimizer\n        else:\n            return\n        idxs = list(self.camera_handles.keys())\n        with torch.no_grad():\n            assert isinstance(camera_optimizer, CameraOptimizer)\n            c2ws_delta = camera_optimizer(torch.tensor(idxs, device=camera_optimizer.device)).cpu().numpy()\n        for i, key in enumerate(idxs):\n            # both are numpy arrays\n            c2w_orig = self.original_c2w[key]\n            c2w_delta = c2ws_delta[i, ...]\n            c2w = c2w_orig @ np.concatenate((c2w_delta, np.array([[0, 0, 0, 1]])), axis=0)\n            R = vtf.SO3.from_matrix(c2w[:3, :3])  # type: ignore\n            R = R @ vtf.SO3.from_x_radians(np.pi)\n            self.camera_handles[key].position = c2w[:3, 3] * VISER_NERFSTUDIO_SCALE_RATIO\n            self.camera_handles[key].wxyz = R.wxyz\n\n    def _trigger_rerender(self) -> None:\n        \"\"\"Interrupt current render.\"\"\"\n        if not self.ready:\n            return\n        clients = self.viser_server.get_clients()\n        for id in clients:\n            camera_state = self.get_camera_state(clients[id])\n            self.render_statemachines[id].action(RenderAction(\"move\", camera_state))\n\n    def _toggle_training_state(self, _) -> None:\n        \"\"\"Toggle the trainer's training state.\"\"\"\n        if self.trainer is not None:\n            if self.trainer.training_state == \"training\":\n                self.trainer.training_state = \"paused\"\n            elif self.trainer.training_state == \"paused\":\n                self.trainer.training_state = \"training\"\n\n    def _output_type_change(self, _):\n        self.output_type_changed = True\n\n    def _output_split_type_change(self, _):\n        self.output_split_type_changed = True\n\n    def _pick_drawn_image_idxs(self, total_num: int) -> list[int]:\n        \"\"\"Determine indicies of images to display in viewer.\n\n        Args:\n            total_num: total number of training images.\n\n        Returns:\n            List of indices from [0, total_num-1].\n        \"\"\"\n        if self.config.max_num_display_images < 0:\n            num_display_images = total_num\n        else:\n            num_display_images = min(self.config.max_num_display_images, total_num)\n        # draw indices, roughly evenly spaced\n        return np.linspace(0, total_num - 1, num_display_images, dtype=np.int32).tolist()\n\n    def init_scene(\n        self,\n        train_dataset: InputDataset,\n        train_state: Literal[\"training\", \"paused\", \"completed\"],\n        eval_dataset: Optional[InputDataset] = None,\n    ) -> None:\n        \"\"\"Draw some images and the scene aabb in the viewer.\n\n        Args:\n            dataset: dataset to render in the scene\n            train_state: Current status of training\n        \"\"\"\n        # draw the training cameras and images\n        self.camera_handles: Dict[int, viser.CameraFrustumHandle] = {}\n        self.original_c2w: Dict[int, np.ndarray] = {}\n        image_indices = self._pick_drawn_image_idxs(len(train_dataset))\n        for idx in image_indices:\n            image = train_dataset[idx][\"image\"]\n            camera = train_dataset.cameras[idx]\n            image_uint8 = (image * 255).detach().type(torch.uint8)\n            image_uint8 = image_uint8.permute(2, 0, 1)\n\n            # torchvision can be slow to import, so we do it lazily.\n            import torchvision\n\n            image_uint8 = torchvision.transforms.functional.resize(image_uint8, 100, antialias=None)  # type: ignore\n            image_uint8 = image_uint8.permute(1, 2, 0)\n            image_uint8 = image_uint8.cpu().numpy()\n            c2w = camera.camera_to_worlds.cpu().numpy()\n            R = vtf.SO3.from_matrix(c2w[:3, :3])\n            R = R @ vtf.SO3.from_x_radians(np.pi)\n            camera_handle = self.viser_server.scene.add_camera_frustum(\n                name=f\"/cameras/camera_{idx:05d}\",\n                fov=float(2 * np.arctan((camera.cx / camera.fx[0]).cpu())),\n                scale=self.config.camera_frustum_scale,\n                aspect=float((camera.cx[0] / camera.cy[0]).cpu()),\n                image=image_uint8,\n                wxyz=R.wxyz,\n                position=c2w[:3, 3] * VISER_NERFSTUDIO_SCALE_RATIO,\n            )\n\n            def create_on_click_callback(capture_idx):\n                def on_click_callback(event: viser.SceneNodePointerEvent[viser.CameraFrustumHandle]) -> None:\n                    with event.client.atomic():\n                        event.client.camera.position = event.target.position\n                        event.client.camera.wxyz = event.target.wxyz\n                        self.current_camera_idx = capture_idx\n\n                return on_click_callback\n\n            camera_handle.on_click(create_on_click_callback(idx))\n\n            self.camera_handles[idx] = camera_handle\n            self.original_c2w[idx] = c2w\n\n        self.train_state = train_state\n        self.train_util = 0.9\n\n    def update_scene(self, step: int, num_rays_per_batch: Optional[int] = None) -> None:\n        \"\"\"updates the scene based on the graph weights\n\n        Args:\n            step: iteration step of training\n            num_rays_per_batch: number of rays per batch, used during training\n        \"\"\"\n        self.step = step\n\n        if len(self.render_statemachines) == 0:\n            return\n        # this stops training while moving to make the response smoother\n        while time.time() - self.last_move_time < 0.1:\n            time.sleep(0.05)\n        if self.trainer is not None and self.trainer.training_state == \"training\" and self.train_util != 1:\n            if (\n                EventName.TRAIN_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]\n                and EventName.VIS_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]\n            ):\n                train_s = GLOBAL_BUFFER[\"events\"][EventName.TRAIN_RAYS_PER_SEC.value][\"avg\"]\n                vis_s = GLOBAL_BUFFER[\"events\"][EventName.VIS_RAYS_PER_SEC.value][\"avg\"]\n                train_util = self.train_util\n                vis_n = self.control_panel.max_res**2\n                train_n = num_rays_per_batch\n                train_time = train_n / train_s\n                vis_time = vis_n / vis_s\n\n                render_freq = train_util * vis_time / (train_time - train_util * train_time)\n            else:\n                render_freq = 30\n            if step > self.last_step + render_freq:\n                self.last_step = step\n                clients = self.viser_server.get_clients()\n                for id in clients:\n                    camera_state = self.get_camera_state(clients[id])\n                    if camera_state is not None:\n                        self.render_statemachines[id].action(RenderAction(\"step\", camera_state))\n                self.update_camera_poses()\n                self.update_step(step)\n\n    def update_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        if self.output_type_changed:\n            self.control_panel.update_colormap_options(dimensions, dtype)\n            self.output_type_changed = False\n\n    def update_split_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        if self.output_split_type_changed:\n            self.control_panel.update_split_colormap_options(dimensions, dtype)\n            self.output_split_type_changed = False\n\n    def get_model(self) -> Model:\n        \"\"\"Returns the model.\"\"\"\n        return self.pipeline.model\n\n    def training_complete(self) -> None:\n        \"\"\"Called when training is complete.\"\"\"\n        self.training_state = \"completed\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer/viewer_elements.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"Viewer GUI elements for the nerfstudio viewer\"\"\"\n\nfrom __future__ import annotations\n\nimport warnings\nfrom abc import abstractmethod\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Callable, Generic, List, Literal, Optional, Tuple, Union, overload\n\nimport numpy as np\nimport torch\nimport viser.transforms as vtf\nfrom typing_extensions import LiteralString, TypeVar\nfrom viser import (\n    GuiButtonGroupHandle,\n    GuiButtonHandle,\n    GuiDropdownHandle,\n    GuiInputHandle,\n    ScenePointerEvent,\n    ViserServer,\n)\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.utils.rich_utils import CONSOLE\nfrom nerfstudio.viewer.utils import CameraState, get_camera\n\nif TYPE_CHECKING:\n    from nerfstudio.viewer.viewer import Viewer\n\nTValue = TypeVar(\"TValue\")\nTString = TypeVar(\"TString\", default=str, bound=str)\n\n\n@dataclass\nclass ViewerClick:\n    \"\"\"\n    Class representing a click in the viewer as a ray.\n    \"\"\"\n\n    # the information here matches the information in the ClickMessage,\n    # but we implement a wrapper as an abstraction layer\n    origin: Tuple[float, float, float]\n    \"\"\"The origin of the click in world coordinates (center of camera)\"\"\"\n    direction: Tuple[float, float, float]\n    \"\"\"\n    The direction of the click if projected from the camera through the clicked pixel,\n    in world coordinates\n    \"\"\"\n    screen_pos: Tuple[float, float]\n    \"\"\"The screen position of the click in OpenCV screen coordinates, normalized to [0, 1]\"\"\"\n\n\n@dataclass\nclass ViewerRectSelect:\n    \"\"\"\n    Class representing a rectangle selection in the viewer (screen-space).\n\n    The screen coordinates follow OpenCV image coordinates, with the origin at the top-left corner,\n    but the bounds are also normalized to [0, 1] in both dimensions.\n    \"\"\"\n\n    min_bounds: Tuple[float, float]\n    \"\"\"The minimum bounds of the rectangle selection in screen coordinates.\"\"\"\n    max_bounds: Tuple[float, float]\n    \"\"\"The maximum bounds of the rectangle selection in screen coordinates.\"\"\"\n\n\nclass ViewerControl:\n    \"\"\"\n    class for exposing non-gui controls of the viewer to the user\n    \"\"\"\n\n    def _setup(self, viewer: Viewer):\n        \"\"\"\n        Internal use only, setup the viewer control with the viewer state object\n\n        Args:\n            viewer: The viewer object (viewer.py)\n        \"\"\"\n        self.viewer: Viewer = viewer\n        self.viser_server: ViserServer = viewer.viser_server\n\n    def set_pose(\n        self,\n        position: Optional[Tuple[float, float, float]] = None,\n        look_at: Optional[Tuple[float, float, float]] = None,\n        instant: bool = False,\n    ):\n        \"\"\"\n        Set the camera position of the viewer camera.\n\n        Args:\n            position: The new position of the camera in world coordinates\n            look_at: The new look_at point of the camera in world coordinates\n            instant: If the camera should move instantly or animate to the new position\n        \"\"\"\n        raise NotImplementedError()\n\n    def set_fov(self, fov):\n        \"\"\"\n        Set the FOV of the viewer camera\n\n        Args:\n            fov: The new FOV of the camera in degrees\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def set_crop(self, min_point: Tuple[float, float, float], max_point: Tuple[float, float, float]):\n        \"\"\"\n        Set the scene crop box of the viewer to the specified min,max point\n\n        Args:\n            min_point: The minimum point of the crop box\n            max_point: The maximum point of the crop box\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def get_camera(self, img_height: int, img_width: int, client_id: Optional[int] = None) -> Optional[Cameras]:\n        \"\"\"\n        Returns the Cameras object representing the current camera for the viewer, or None if the viewer\n        is not connected yet\n\n        Args:\n            img_height: The height of the image to get camera intrinsics for\n            img_width: The width of the image to get camera intrinsics for\n        \"\"\"\n        clients = self.viser_server.get_clients()\n        if len(clients) == 0:\n            return None\n        if not client_id:\n            client_id = list(clients.keys())[0]\n\n        from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO\n\n        client = clients[client_id]\n        R = vtf.SO3(wxyz=client.camera.wxyz)\n        R = R @ vtf.SO3.from_x_radians(np.pi)\n        R = torch.tensor(R.as_matrix())\n        pos = torch.tensor(client.camera.position, dtype=torch.float64) / VISER_NERFSTUDIO_SCALE_RATIO\n        c2w = torch.concatenate([R, pos[:, None]], dim=1)\n        camera_state = CameraState(\n            fov=client.camera.fov, aspect=client.camera.aspect, c2w=c2w, camera_type=CameraType.PERSPECTIVE\n        )\n        return get_camera(camera_state, img_height, img_width)\n\n    def register_click_cb(self, cb: Callable):\n        \"\"\"Deprecated, use register_pointer_cb instead.\"\"\"\n        CONSOLE.log(\"`register_click_cb` is deprecated, use `register_pointer_cb` instead.\")\n        self.register_pointer_cb(\"click\", cb)\n\n    @overload\n    def register_pointer_cb(\n        self,\n        event_type: Literal[\"click\"],\n        cb: Callable[[ViewerClick], None],\n        removed_cb: Optional[Callable[[], None]] = None,\n    ): ...\n\n    @overload\n    def register_pointer_cb(\n        self,\n        event_type: Literal[\"rect-select\"],\n        cb: Callable[[ViewerRectSelect], None],\n        removed_cb: Optional[Callable[[], None]] = None,\n    ): ...\n\n    def register_pointer_cb(\n        self,\n        event_type: Literal[\"click\", \"rect-select\"],\n        cb: Callable[[ViewerClick], None] | Callable[[ViewerRectSelect], None],\n        removed_cb: Optional[Callable[[], None]] = None,\n    ):\n        \"\"\"\n        Add a callback which will be called when a scene pointer event is detected in the viewer.\n        Scene pointer events include:\n        - \"click\": A click event, which includes the origin and direction of the click\n        - \"rect-select\": A rectangle selection event, which includes the screen bounds of the box selection\n\n        The callback should take a ViewerClick object as an argument if the event type is \"click\",\n        and a ViewerRectSelect object as an argument if the event type is \"rect-select\".\n\n        Args:\n            cb: The callback to call when a click or a rect-select is detected.\n            removed_cb: The callback to run when the pointer event is removed.\n        \"\"\"\n        from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO\n\n        def wrapped_cb(scene_pointer_msg: ScenePointerEvent):\n            # Check that the event type is the same as the one we are interested in.\n            if scene_pointer_msg.event_type != event_type:\n                raise ValueError(f\"Expected event type {event_type}, got {scene_pointer_msg.event_type}\")\n\n            if scene_pointer_msg.event_type == \"click\":\n                origin = scene_pointer_msg.ray_origin\n                direction = scene_pointer_msg.ray_direction\n                screen_pos = scene_pointer_msg.screen_pos[0]\n                assert (origin is not None) and (\n                    direction is not None\n                ), \"Origin and direction should not be None for click event.\"\n                origin = tuple([x / VISER_NERFSTUDIO_SCALE_RATIO for x in origin])\n                assert len(origin) == 3\n                pointer_event = ViewerClick(origin, direction, screen_pos)\n            elif scene_pointer_msg.event_type == \"rect-select\":\n                pointer_event = ViewerRectSelect(scene_pointer_msg.screen_pos[0], scene_pointer_msg.screen_pos[1])\n            else:\n                raise ValueError(f\"Unknown event type: {scene_pointer_msg.event_type}\")\n\n            cb(pointer_event)  # type: ignore\n\n        cb_overriden = False\n        with warnings.catch_warnings(record=True) as w:\n            # Register the callback with the viser server.\n            self.viser_server.scene.on_pointer_event(event_type=event_type)(wrapped_cb)\n            # If there exists a warning, it's because a callback was overriden.\n            cb_overriden = len(w) > 0\n\n        if cb_overriden:\n            warnings.warn(\n                \"A ScenePointer callback has already been registered for this event type. \"\n                \"The new callback will override the existing one.\"\n            )\n\n        # If there exists a cleanup callback after the pointer event is done, register it.\n        if removed_cb is not None:\n            self.viser_server.scene.on_pointer_callback_removed(removed_cb)\n\n    def unregister_click_cb(self, cb: Optional[Callable] = None):\n        \"\"\"Deprecated, use unregister_pointer_cb instead. `cb` is ignored.\"\"\"\n        warnings.warn(\"`unregister_click_cb` is deprecated, use `unregister_pointer_cb` instead.\")\n        if cb is not None:\n            # raise warning\n            warnings.warn(\"cb argument is ignored in unregister_click_cb.\")\n\n        self.unregister_pointer_cb()\n\n    def unregister_pointer_cb(self):\n        \"\"\"\n        Remove a callback which will be called, when a scene pointer event is detected in the viewer.\n\n        Args:\n            cb: The callback to remove\n        \"\"\"\n        self.viser_server.scene.remove_pointer_callback()\n\n    @property\n    def server(self):\n        return self.viser_server\n\n\nclass ViewerElement(Generic[TValue]):\n    \"\"\"Base class for all viewer elements\n\n    Args:\n        name: The name of the element\n        disabled: If the element is disabled\n        visible: If the element is visible\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable = lambda element: None,\n    ) -> None:\n        self.name = name\n        self.gui_handle: Optional[Union[GuiInputHandle[TValue], GuiButtonHandle, GuiButtonGroupHandle]] = None\n        self.disabled = disabled\n        self.visible = visible\n        self.cb_hook = cb_hook\n\n    @abstractmethod\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        \"\"\"\n        Returns the GuiInputHandle object which actually controls the parameter in the gui.\n\n        Args:\n            viser_server: The server to install the gui element into.\n        \"\"\"\n        ...\n\n    def remove(self) -> None:\n        \"\"\"Removes the gui element from the viewer\"\"\"\n        if self.gui_handle is not None:\n            self.gui_handle.remove()\n            self.gui_handle = None\n\n    def set_hidden(self, hidden: bool) -> None:\n        \"\"\"Sets the hidden state of the gui element\"\"\"\n        assert self.gui_handle is not None\n        self.gui_handle.visible = not hidden\n\n    def set_disabled(self, disabled: bool) -> None:\n        \"\"\"Sets the disabled state of the gui element\"\"\"\n        assert self.gui_handle is not None\n        self.gui_handle.disabled = disabled\n\n    def set_visible(self, visible: bool) -> None:\n        \"\"\"Sets the visible state of the gui element\"\"\"\n        assert self.gui_handle is not None\n        self.gui_handle.visible = visible\n\n    @abstractmethod\n    def install(self, viser_server: ViserServer) -> None:\n        \"\"\"Installs the gui element into the given viser_server\"\"\"\n        ...\n\n\nclass ViewerButton(ViewerElement[bool]):\n    \"\"\"A button in the viewer\n\n    Args:\n        name: The name of the button\n        cb_hook: The function to call when the button is pressed\n        disabled: If the button is disabled\n        visible: If the button is visible\n    \"\"\"\n\n    gui_handle: GuiButtonHandle\n\n    def __init__(self, name: str, cb_hook: Callable[[ViewerButton], Any], disabled: bool = False, visible: bool = True):\n        super().__init__(name, disabled=disabled, visible=visible, cb_hook=cb_hook)\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.gui.add_button(label=self.name, disabled=self.disabled, visible=self.visible)\n\n    def install(self, viser_server: ViserServer) -> None:\n        self._create_gui_handle(viser_server)\n\n        assert self.gui_handle is not None\n        self.gui_handle.on_click(lambda _: self.cb_hook(self))\n\n\nclass ViewerParameter(ViewerElement[TValue], Generic[TValue]):\n    \"\"\"A viewer element with state\n\n    Args:\n        name: The name of the element\n        default_value: The default value of the element\n        disabled: If the element is disabled\n        visible: If the element is visible\n        cb_hook: Callback to call on update\n    \"\"\"\n\n    gui_handle: GuiInputHandle\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TValue,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable = lambda element: None,\n    ) -> None:\n        super().__init__(name, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.default_value = default_value\n\n    def install(self, viser_server: ViserServer) -> None:\n        \"\"\"\n        Based on the type provided by default_value, installs a gui element inside the given viser_server\n\n        Args:\n            viser_server: The server to install the gui element into.\n        \"\"\"\n        self._create_gui_handle(viser_server)\n\n        assert self.gui_handle is not None\n        self.gui_handle.on_update(lambda _: self.cb_hook(self))\n\n    @abstractmethod\n    def _create_gui_handle(self, viser_server: ViserServer) -> None: ...\n\n    @property\n    def value(self) -> TValue:\n        \"\"\"Returns the current value of the viewer element\"\"\"\n        if self.gui_handle is None:\n            return self.default_value\n        return self.gui_handle.value\n\n    @value.setter\n    def value(self, value: TValue) -> None:\n        if self.gui_handle is not None:\n            self.gui_handle.value = value\n        else:\n            self.default_value = value\n\n\nIntOrFloat = TypeVar(\"IntOrFloat\", int, float)\n\n\nclass ViewerSlider(ViewerParameter[IntOrFloat], Generic[IntOrFloat]):\n    \"\"\"A slider in the viewer\n\n    Args:\n        name: The name of the slider\n        default_value: The default value of the slider\n        min_value: The minimum value of the slider\n        max_value: The maximum value of the slider\n        step: The step size of the slider\n        disabled: If the slider is disabled\n        visible: If the slider is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: IntOrFloat,\n        min_value: IntOrFloat,\n        max_value: IntOrFloat,\n        step: IntOrFloat = 0.1,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable[[ViewerSlider], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, (float, int))\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.min = min_value\n        self.max = max_value\n        self.step = step\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_slider(\n            self.name,\n            self.min,\n            self.max,\n            self.step,\n            self.default_value,\n            disabled=self.disabled,\n            visible=self.visible,\n            hint=self.hint,\n        )\n\n\nclass ViewerText(ViewerParameter[str]):\n    \"\"\"A text field in the viewer\n\n    Args:\n        name: The name of the text field\n        default_value: The default value of the text field\n        disabled: If the text field is disabled\n        visible: If the text field is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: str,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable[[ViewerText], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, str)\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_text(\n            self.name, self.default_value, disabled=self.disabled, visible=self.visible, hint=self.hint\n        )\n\n\nclass ViewerNumber(ViewerParameter[IntOrFloat], Generic[IntOrFloat]):\n    \"\"\"A number field in the viewer\n\n    Args:\n        name: The name of the number field\n        default_value: The default value of the number field\n        disabled: If the number field is disabled\n        visible: If the number field is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    default_value: IntOrFloat\n\n    def __init__(\n        self,\n        name: str,\n        default_value: IntOrFloat,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable[[ViewerNumber], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, (float, int))\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_number(\n            self.name, self.default_value, disabled=self.disabled, visible=self.visible, hint=self.hint\n        )\n\n\nclass ViewerCheckbox(ViewerParameter[bool]):\n    \"\"\"A checkbox in the viewer\n\n    Args:\n        name: The name of the checkbox\n        default_value: The default value of the checkbox\n        disabled: If the checkbox is disabled\n        visible: If the checkbox is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: bool,\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable[[ViewerCheckbox], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, bool)\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_checkbox(\n            self.name, self.default_value, disabled=self.disabled, visible=self.visible, hint=self.hint\n        )\n\n\nTLiteralString = TypeVar(\"TLiteralString\", bound=LiteralString)\n\n\nclass ViewerDropdown(ViewerParameter[TString], Generic[TString]):\n    \"\"\"A dropdown in the viewer\n\n    Args:\n        name: The name of the dropdown\n        default_value: The default value of the dropdown\n        options: The options of the dropdown\n        disabled: If the dropdown is disabled\n        visible: If the dropdown is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    gui_handle: Optional[GuiDropdownHandle[TString]]\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TString,\n        options: List[TString],\n        disabled: bool = False,\n        visible: bool = True,\n        cb_hook: Callable[[ViewerDropdown], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert default_value in options\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.options = options\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_dropdown(\n            self.name,\n            self.options,\n            self.default_value,\n            disabled=self.disabled,\n            visible=self.visible,\n            hint=self.hint,  # type: ignore\n        )\n\n    def set_options(self, new_options: List[TString]) -> None:\n        \"\"\"\n        Sets the options of the dropdown,\n\n        Args:\n            new_options: The new options. If the current option isn't in the new options, the first option is selected.\n        \"\"\"\n        self.options = new_options\n        if self.gui_handle is not None:\n            self.gui_handle.options = new_options\n\n\nclass ViewerButtonGroup(ViewerParameter[TString], Generic[TString]):\n    \"\"\"A button group in the viewer. Unlike other fields, cannot be disabled.\n\n    Args:\n        name: The name of the button group\n        visible: If the button group is visible\n        options: The options of the button group\n        cb_hook: Callback to call on update\n    \"\"\"\n\n    gui_handle: GuiButtonGroupHandle\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TString,\n        options: List[TString],\n        visible: bool = True,\n        cb_hook: Callable[[ViewerDropdown], Any] = lambda element: None,\n    ):\n        super().__init__(name, disabled=False, visible=visible, default_value=default_value, cb_hook=cb_hook)\n        self.options = options\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.gui.add_button_group(self.name, self.options, visible=self.visible)\n\n    def install(self, viser_server: ViserServer) -> None:\n        self._create_gui_handle(viser_server)\n\n        assert self.gui_handle is not None\n        self.gui_handle.on_click(lambda _: self.cb_hook(self))\n\n\nclass ViewerRGB(ViewerParameter[Tuple[int, int, int]]):\n    \"\"\"\n    An RGB color picker for the viewer\n\n    Args:\n        name: The name of the color picker\n        default_value: The default value of the color picker\n        disabled: If the color picker is disabled\n        visible: If the color picker is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name,\n        default_value: Tuple[int, int, int],\n        disabled=False,\n        visible=True,\n        cb_hook: Callable[[ViewerRGB], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert len(default_value) == 3\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.gui.add_rgb(\n            self.name, self.default_value, disabled=self.disabled, visible=self.visible, hint=self.hint\n        )\n\n\nclass ViewerVec3(ViewerParameter[Tuple[float, float, float]]):\n    \"\"\"\n    3 number boxes in a row to input a vector\n\n    Args:\n        name: The name of the vector\n        default_value: The default value of the vector\n        step: The step of the vector\n        disabled: If the vector is disabled\n        visible: If the vector is visible\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name,\n        default_value: Tuple[float, float, float],\n        step=0.1,\n        disabled=False,\n        visible=True,\n        cb_hook: Callable[[ViewerVec3], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert len(default_value) == 3\n        super().__init__(name, default_value, disabled=disabled, visible=visible, cb_hook=cb_hook)\n        self.step = step\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.gui.add_vector3(\n            self.name, self.default_value, step=self.step, disabled=self.disabled, visible=self.visible, hint=self.hint\n        )\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/app/package.json",
    "content": "{\n  \"name\": \"viewer\",\n  \"homepage\": \".\",\n  \"version\": \"23-05-15-1\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@emotion/react\": \"^11.10.4\",\n    \"@emotion/styled\": \"^11.10.4\",\n    \"@mui/icons-material\": \"^5.10.3\",\n    \"@mui/lab\": \"^5.0.0-alpha.98\",\n    \"@mui/material\": \"^5.10.3\",\n    \"@mui/system\": \"^5.10.6\",\n    \"@mui/x-date-pickers\": \"^5.0.0\",\n    \"@reduxjs/toolkit\": \"^1.8.3\",\n    \"@testing-library/jest-dom\": \"^5.16.4\",\n    \"@testing-library/react\": \"^13.3.0\",\n    \"@testing-library/user-event\": \"^14.2.0\",\n    \"await-lock\": \"^2.2.2\",\n    \"camera-controls\": \"^2.0\",\n    \"classnames\": \"^2.3.1\",\n    \"dat.gui\": \"^0.7.9\",\n    \"dayjs\": \"^1.11.5\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"eslint-plugin-unused-imports\": \"^2.0.0\",\n    \"leva\": \"^0.9.29\",\n    \"lodash\": \"^4.17.21\",\n    \"meshline\": \"^2.0.4\",\n    \"msgpack-lite\": \"^0.1.26\",\n    \"msgpackr\": \"^1.8.5\",\n    \"prop-types\": \"^15.8.1\",\n    \"re-resizable\": \"^6.9.9\",\n    \"react\": \"^18.1.0\",\n    \"react-dom\": \"^18.1.0\",\n    \"react-icons\": \"^4.4.0\",\n    \"react-pro-sidebar\": \"^0.7.1\",\n    \"react-redux\": \"^8.0.2\",\n    \"redux\": \"^4.2.0\",\n    \"sass\": \"^1.54.8\",\n    \"socket.io-client\": \"^4.5.1\",\n    \"three\": \"^0.142.0\",\n    \"three-wtm\": \"^1.0\",\n    \"websocket\": \"^1.0.34\",\n    \"wwobjloader2\": \"^4.0\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\",\n    \"electron\": \"electron .\",\n    \"lint\": \"eslint --ext .js,.jsx .\",\n    \"lint:fix\": \"eslint --fix --ext .js,.jsx .\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"main\": \"public/electron.js\",\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"description\": \"\",\n  \"devDependencies\": {\n    \"concurrently\": \"^7.2.1\",\n    \"eslint\": \"^8.2.0\",\n    \"eslint-config-airbnb\": \"19.0.4\",\n    \"eslint-plugin-import\": \"^2.25.3\",\n    \"eslint-plugin-jsx-a11y\": \"^6.5.1\",\n    \"eslint-plugin-react\": \"^7.28.0\",\n    \"eslint-plugin-react-hooks\": \"^4.3.0\",\n    \"prettier\": \"2.7.1\",\n    \"react-scripts\": \"^5.0.1\",\n    \"typescript\": \"^5.0.3\",\n    \"wait-on\": \"^6.0.1\"\n  },\n  \"resolutions\": {\n    \"babel-loader\": \"^9.1.2\",\n    \"json5\": \"^2.2.3\",\n    \"loader-utils\": \"^3.2.1\",\n    \"nth-check\": \"^2.0.1\",\n    \"@pmmmwh/react-refresh-webpack-plugin\": \"^0.5.10\",\n    \"recursive-readdir\": \"^2.2.3\",\n    \"resolve-url-loader\": \"^5.0.0\",\n    \"yaml\": \"^2.2.2\"\n  }\n}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/app/public/manifest.json",
    "content": "{\n  \"short_name\": \"nerfstudio viewer\",\n  \"name\": \"Interactive NeRF viewer\",\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/app/run_deploy.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nCode for deploying the built viewer folder to a server and handing versioning.\nWe use the library sshconf (https://github.com/sorend/sshconf) for working with the ssh config file.\n\"\"\"\n\nimport json\nimport subprocess\nfrom os.path import expanduser\nfrom pathlib import Path\nfrom typing import Optional\n\nimport tyro\nfrom sshconf import empty_ssh_config_file, read_ssh_config\n\n\ndef run_cmd(cmd: str):\n    \"\"\"Run a command in the terminal.\"\"\"\n    print(\"cmd:\", cmd)\n    print(\"output:\")\n    subprocess.Popen(cmd, shell=True).wait()\n\n\ndef main(\n    branch_name: str = \"\",\n    ssh_key_string: Optional[str] = None,\n    ssh_key_filename: str = \" ~/.ssh/github_actions_user_key_filename\",\n    hostname_or_ip_address: str = \"34.102.68.79\",\n    local_folder: str = \"/home/eweb0124/build\",\n    remote_folder: str = \"/home/eweb0124/viewer\",\n    host: str = \"viewer_deploy_host\",\n    user: str = \"eweb0124\",\n    package_json_filename: str = \"package.json\",\n    increment_version: str = \"False\",\n):\n    \"\"\"Copy a local folder to a remote machine and handle versioning.\n\n    Args:\n        ssh_key: The private ssh key needed to ssh.\n        hostname_or_ip_address: The hostname or ip_address of the remote machine.\n    \"\"\"\n\n    print()\n    print(\"branch_name\", branch_name)\n    print(\"ssh_key_string\", ssh_key_string)\n    print(\"ssh_key_filename\", ssh_key_filename)\n    print(\"hostname_or_ip_address\", hostname_or_ip_address)\n    print(\"local_folder\", local_folder)\n    print(\"remote_folder\", remote_folder)\n    print(\"host\", host)\n    print(\"user\", user)\n    print(\"package_json_filename\", package_json_filename)\n    print(\"increment_version\", increment_version)\n    print()\n\n    # save the ssh key to a file\n    run_cmd(\"mkdir ~/.ssh\")\n    if ssh_key_string:\n        run_cmd(f\"\"\"rm -f {ssh_key_filename}\"\"\")\n        run_cmd(f\"\"\"echo \"{ssh_key_string}\" >> {ssh_key_filename}\"\"\")\n        run_cmd(f\"chmod 400 {ssh_key_filename}\")\n\n    # setup the config in ~/.ssh/config\n    config_filename = expanduser(\"~/.ssh/config\")\n    Path(config_filename).parent.mkdir(exist_ok=True)\n    try:\n        config = read_ssh_config(config_filename)\n    except FileNotFoundError:\n        config = empty_ssh_config_file()\n        config.write(config_filename)\n        config = read_ssh_config(config_filename)\n\n    # add the host if it doesn't exist\n    if not config.host(host):\n        config.add(host)\n\n    config.set(\n        host,\n        Hostname=hostname_or_ip_address,\n        User=user,\n        IdentityFile=ssh_key_filename,\n        StrictHostKeyChecking=\"No\",\n    )\n\n    # show that the config is correct\n    run_cmd(\"cat ~/.ssh/config\")\n\n    # save the config file\n    config.save()\n\n    # get the version\n    with open(package_json_filename, \"r\", encoding=\"utf-8\") as f:\n        package_json = json.load(f)\n\n    # TODO: add logic to increment the version number\n    if increment_version == \"True\":\n        raise NotImplementedError()\n    else:\n        version = package_json[\"version\"]\n\n    print(f\"\\nusing version: {version}\")\n\n    # write to the /home/eweb0124/build folder\n    run_cmd(f\"\"\"ssh {host} 'rm -rf /home/eweb0124/build'\"\"\")\n    run_cmd(f\"\"\"scp -r {local_folder} {host}:/home/eweb0124/build\"\"\")\n\n    # update the symlink of latest\n    if branch_name == \"main\":\n        # move the build folder to the correct location\n        run_cmd(f\"\"\"ssh {host} 'rm -rf {remote_folder}/{version}'\"\"\")\n        run_cmd(f\"\"\"ssh {host} 'cp -R /home/eweb0124/build {remote_folder}/{version}'\"\"\")\n\n        run_cmd(f\"\"\"ssh {host} 'rm {remote_folder}/latest'\"\"\")\n        run_cmd(f\"\"\"ssh {host} 'ln -s {remote_folder}/{version} {remote_folder}/latest'\"\"\")\n\n    # otherwise just move to some branch folder\n    else:\n        updated_branch_name = branch_name.replace(\"/\", \"-\")\n        run_cmd(f\"\"\"ssh {host} 'rm -rf {remote_folder}/branch/{updated_branch_name}'\"\"\")\n        run_cmd(f\"\"\"ssh {host} 'cp -R /home/eweb0124/build {remote_folder}/branch/{updated_branch_name}'\"\"\")\n\n\nif __name__ == \"__main__\":\n    tyro.extras.set_accent_color(\"bright_yellow\")\n    tyro.cli(main)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/app/src/themes/leva_theme.json",
    "content": "{\n  \"colors\": {\n    \"elevation1\": \"#393E46\",\n    \"elevation2\": \"#222831\",\n    \"elevation3\": \"#393E46\",\n    \"accent1\": \"#ffc640\",\n    \"accent2\": \"#FFD369\",\n    \"accent3\": \"#ffd65c\",\n    \"highlight1\": \"#d1d4db\",\n    \"highlight2\": \"#EEEEEE\",\n    \"highlight3\": \"#EEEEEE\",\n    \"disabled\": \"#595959\",\n    \"vivid1\": \"#ffcc00\"\n  },\n  \"radii\": {\n    \"xs\": \"2px\",\n    \"sm\": \"4px\",\n    \"lg\": \"10px\"\n  },\n  \"space\": {\n    \"sm\": \"6px\",\n    \"md\": \"5px\",\n    \"rowGap\": \"3px\",\n    \"colGap\": \"7px\"\n  },\n  \"fontSizes\": {\n    \"root\": \"11px\"\n  },\n  \"sizes\": {\n    \"rootWidth\": \"310px\",\n    \"controlWidth\": \"170px\",\n    \"scrubberWidth\": \"8px\",\n    \"scrubberHeight\": \"16px\",\n    \"rowHeight\": \"22px\",\n    \"folderHeight\": \"10px\",\n    \"checkboxSize\": \"16px\",\n    \"joystickWidth\": \"100px\",\n    \"joystickHeight\": \"100px\",\n    \"colorPickerWidth\": \"160px\",\n    \"colorPickerHeight\": \"100px\",\n    \"monitorHeight\": \"60px\",\n    \"titleBarHeight\": \"20px\"\n  },\n  \"borderWidths\": {\n    \"root\": \"0px\",\n    \"input\": \"1px\",\n    \"focus\": \"1px\",\n    \"hover\": \"1px\",\n    \"active\": \"1px\",\n    \"folder\": \"1px\"\n  },\n  \"fontWeights\": {\n    \"label\": \"normal\",\n    \"folder\": \"normal\",\n    \"button\": \"normal\"\n  }\n}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/app/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\"\n  },\n  \"include\": [\"src\"]\n}\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/control_panel.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Control panel for the viewer\"\"\"\n\nfrom collections import defaultdict\nfrom typing import Callable, DefaultDict, List, Tuple, get_args\n\nimport torch\n\nfrom nerfstudio.utils.colormaps import ColormapOptions, Colormaps\nfrom nerfstudio.viewer_legacy.server.viewer_elements import (\n    ViewerButtonGroup,\n    ViewerCheckbox,\n    ViewerDropdown,\n    ViewerElement,\n    ViewerNumber,\n    ViewerRGB,\n    ViewerSlider,\n    ViewerVec3,\n)\nfrom nerfstudio.viewer_legacy.viser import ViserServer\n\n\nclass ControlPanel:\n    \"\"\"\n    Initializes the control panel with all the elements\n    Args:\n        time_enabled: whether or not the time slider should be enabled\n        rerender_cb: a callback that will be called when the user changes a parameter that requires a rerender\n            (eg train speed, max res, etc)\n        crop_update_cb: a callback that will be called when the user changes the crop parameters\n        update_output_cb: a callback that will be called when the user changes the output render\n    \"\"\"\n\n    def __init__(\n        self,\n        viser_server: ViserServer,\n        time_enabled: bool,\n        rerender_cb: Callable,\n        crop_update_cb: Callable,\n        update_output_cb: Callable,\n        update_split_output_cb: Callable,\n    ):\n        # elements holds a mapping from tag: [elements]\n        self.viser_server = viser_server\n        self._elements_by_tag: DefaultDict[str, List[ViewerElement]] = defaultdict(lambda: [])\n\n        self._train_speed = ViewerButtonGroup(\n            name=\"Train Speed  \",\n            default_value=\"Balanced\",\n            options=[\"Slow\", \"Balanced\", \"Fast\"],\n            cb_hook=lambda han: self._train_speed_cb(),\n        )\n        self._output_render = ViewerDropdown(\n            \"Output Render\",\n            \"not set\",\n            [\"not set\"],\n            cb_hook=lambda han: [self.update_control_panel(), update_output_cb(han), rerender_cb(han)],\n            hint=\"The output to render\",\n        )\n        self._colormap = ViewerDropdown[Colormaps](\n            \"Colormap\", \"default\", [\"default\"], cb_hook=rerender_cb, hint=\"The colormap to use\"\n        )\n        self._invert = ViewerCheckbox(\"Invert\", False, cb_hook=rerender_cb, hint=\"Invert the colormap\")\n        self._normalize = ViewerCheckbox(\"Normalize\", True, cb_hook=rerender_cb, hint=\"Normalize the colormap\")\n        self._min = ViewerNumber(\"Min\", 0.0, cb_hook=rerender_cb, hint=\"Min value of the colormap\")\n        self._max = ViewerNumber(\"Max\", 1.0, cb_hook=rerender_cb, hint=\"Max value of the colormap\")\n\n        self._split = ViewerCheckbox(\n            \"Enable\",\n            False,\n            cb_hook=lambda han: [self.update_control_panel(), rerender_cb(han)],\n            hint=\"Render two outputs\",\n        )\n        self._split_percentage = ViewerSlider(\n            \"Split Percentage\", 0.5, 0.0, 1.0, 0.01, cb_hook=rerender_cb, hint=\"Where to split\"\n        )\n        self._split_output_render = ViewerDropdown(\n            \"Output Render Split\",\n            \"not set\",\n            [\"not set\"],\n            cb_hook=lambda han: [self.update_control_panel(), update_split_output_cb(han), rerender_cb(han)],\n            hint=\"The second output\",\n        )\n        # Hack: spaces are after at the end of the names to make them unique\n        self._split_colormap = ViewerDropdown[Colormaps](\n            \"Colormap \", \"default\", [\"default\"], cb_hook=rerender_cb, hint=\"Colormap of the second output\"\n        )\n        self._split_invert = ViewerCheckbox(\n            \"Invert \", False, cb_hook=rerender_cb, hint=\"Invert the colormap of the second output\"\n        )\n        self._split_normalize = ViewerCheckbox(\n            \"Normalize \", True, cb_hook=rerender_cb, hint=\"Normalize the colormap of the second output\"\n        )\n        self._split_min = ViewerNumber(\n            \"Min \", 0.0, cb_hook=rerender_cb, hint=\"Min value of the colormap of the second output\"\n        )\n        self._split_max = ViewerNumber(\n            \"Max \", 1.0, cb_hook=rerender_cb, hint=\"Max value of the colormap of the second output\"\n        )\n\n        self._train_util = ViewerSlider(\n            \"Train Util\",\n            default_value=0.85,\n            min_value=0.0,\n            max_value=1,\n            step=0.05,\n            hint=\"Target training utilization, 0.0 is slow, 1.0 is fast. Doesn't affect final render quality\",\n        )\n        self._max_res = ViewerSlider(\n            \"Max Res\", 512, 64, 2048, 100, cb_hook=rerender_cb, hint=\"Maximum resolution to render in viewport\"\n        )\n        self._crop_viewport = ViewerCheckbox(\n            \"Enable \",\n            False,\n            cb_hook=lambda han: [self.update_control_panel(), crop_update_cb(han), rerender_cb(han)],\n            hint=\"Crop the scene to a specified box\",\n        )\n        self._background_color = ViewerRGB(\n            \"Background color\", (38, 42, 55), cb_hook=crop_update_cb, hint=\"Color of the background\"\n        )\n        self._crop_min = ViewerVec3(\n            \"Crop Min\", (-1, -1, -1), 0.05, cb_hook=crop_update_cb, hint=\"Minimum value of the crop\"\n        )\n        self._crop_max = ViewerVec3(\n            \"Crop Max\", (1, 1, 1), 0.05, cb_hook=crop_update_cb, hint=\"Maximum value of the crop\"\n        )\n        self._time = ViewerSlider(\"Time\", 0.0, 0.0, 1.0, 0.01, cb_hook=rerender_cb, hint=\"Time to render\")\n        self._time_enabled = time_enabled\n\n        self.add_element(self._train_speed)\n        self.add_element(self._train_util)\n        with self.viser_server.gui_folder(\"Render Options\"):\n            self.add_element(self._max_res)\n            self.add_element(self._output_render)\n            self.add_element(self._colormap)\n            # colormap options\n            with self.viser_server.gui_folder(\" \"):\n                self.add_element(self._invert, additional_tags=(\"colormap\",))\n                self.add_element(self._normalize, additional_tags=(\"colormap\",))\n                self.add_element(self._min, additional_tags=(\"colormap\",))\n                self.add_element(self._max, additional_tags=(\"colormap\",))\n\n        # split options\n        with self.viser_server.gui_folder(\"Split Screen\"):\n            self.add_element(self._split)\n\n            self.add_element(self._split_percentage, additional_tags=(\"split\",))\n            self.add_element(self._split_output_render, additional_tags=(\"split\",))\n            self.add_element(self._split_colormap, additional_tags=(\"split\",))\n            with self.viser_server.gui_folder(\"  \"):\n                self.add_element(self._split_invert, additional_tags=(\"split_colormap\",))\n                self.add_element(self._split_normalize, additional_tags=(\"split_colormap\",))\n                self.add_element(self._split_min, additional_tags=(\"split_colormap\",))\n                self.add_element(self._split_max, additional_tags=(\"split_colormap\",))\n\n        with self.viser_server.gui_folder(\"Crop Viewport\"):\n            self.add_element(self._crop_viewport)\n\n            # Crop options\n            self.add_element(self._background_color, additional_tags=(\"crop\",))\n            self.add_element(self._crop_min, additional_tags=(\"crop\",))\n            self.add_element(self._crop_max, additional_tags=(\"crop\",))\n\n        self.add_element(self._time, additional_tags=(\"time\",))\n\n    def _train_speed_cb(self) -> None:\n        \"\"\"Callback for when the train speed is changed\"\"\"\n        if self._train_speed.value == \"Fast\":\n            self._train_util.value = 0.95\n            self._max_res.value = 256\n        elif self._train_speed.value == \"Balanced\":\n            self._train_util.value = 0.85\n            self._max_res.value = 512\n        elif self._train_speed.value == \"Slow\":\n            self._train_util.value = 0.5\n            self._max_res.value = 1024\n\n    def update_output_options(self, new_options: List[str]):\n        \"\"\"\n        Args:\n            new_options: a list of new output options\n        \"\"\"\n        self._output_render.set_options(new_options)\n        self._split_output_render.set_options(new_options)\n        self._split_output_render.value = new_options[-1]\n\n    def add_element(self, e: ViewerElement, additional_tags: Tuple[str, ...] = tuple()) -> None:\n        \"\"\"Adds an element to the control panel\n\n        Args:\n            e: the element to add\n            additional_tags: additional tags to add to the element for selection\n        \"\"\"\n        self._elements_by_tag[\"all\"].append(e)\n        for t in additional_tags:\n            self._elements_by_tag[t].append(e)\n        e.install(self.viser_server)\n\n    def update_control_panel(self) -> None:\n        \"\"\"\n        Sets elements to be hidden or not based on the current state of the control panel\n        \"\"\"\n        self._colormap.set_disabled(self.output_render == \"rgb\")\n        for e in self._elements_by_tag[\"colormap\"]:\n            e.set_hidden(self.output_render == \"rgb\")\n        for e in self._elements_by_tag[\"split_colormap\"]:\n            e.set_hidden(not self._split.value or self.split_output_render == \"rgb\")\n        for e in self._elements_by_tag[\"crop\"]:\n            e.set_hidden(not self.crop_viewport)\n        self._time.set_hidden(not self._time_enabled)\n        self._split_percentage.set_hidden(not self._split.value)\n        self._split_output_render.set_hidden(not self._split.value)\n        self._split_colormap.set_hidden(not self._split.value)\n        self._split_colormap.set_disabled(self.split_output_render == \"rgb\")\n\n    def update_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        self._colormap.set_options(_get_colormap_options(dimensions, dtype))\n\n    def update_split_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the split colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        self._split_colormap.set_options(_get_colormap_options(dimensions, dtype))\n\n    @property\n    def output_render(self) -> str:\n        \"\"\"Returns the current output render\"\"\"\n        return self._output_render.value\n\n    @property\n    def split_output_render(self) -> str:\n        \"\"\"Returns the current output for the split render\"\"\"\n        return self._split_output_render.value\n\n    @property\n    def split(self) -> bool:\n        \"\"\"Returns whether the split is enabled\"\"\"\n        return self._split.value\n\n    @property\n    def split_percentage(self) -> float:\n        \"\"\"Returns the percentage of the screen to split\"\"\"\n        return self._split_percentage.value\n\n    @property\n    def train_util(self) -> float:\n        \"\"\"Returns the current train util setting\"\"\"\n        return self._train_util.value\n\n    @property\n    def max_res(self) -> int:\n        \"\"\"Returns the current max res setting\"\"\"\n        return self._max_res.value\n\n    @property\n    def crop_viewport(self) -> bool:\n        \"\"\"Returns the current crop viewport setting\"\"\"\n        return self._crop_viewport.value\n\n    @crop_viewport.setter\n    def crop_viewport(self, value: bool):\n        \"\"\"Sets the crop viewport setting\"\"\"\n        self._crop_viewport.value = value\n\n    @property\n    def crop_min(self) -> Tuple[float, float, float]:\n        \"\"\"Returns the current crop min setting\"\"\"\n        return self._crop_min.value\n\n    @crop_min.setter\n    def crop_min(self, value: Tuple[float, float, float]):\n        \"\"\"Sets the crop min setting\"\"\"\n        self._crop_min.value = value\n\n    @property\n    def crop_max(self) -> Tuple[float, float, float]:\n        \"\"\"Returns the current crop max setting\"\"\"\n        return self._crop_max.value\n\n    @crop_max.setter\n    def crop_max(self, value: Tuple[float, float, float]):\n        \"\"\"Sets the crop max setting\"\"\"\n        self._crop_max.value = value\n\n    @property\n    def background_color(self) -> Tuple[int, int, int]:\n        \"\"\"Returns the current background color\"\"\"\n        return self._background_color.value\n\n    @background_color.setter\n    def background_color(self, value: Tuple[int, int, int]):\n        \"\"\"Sets the background color\"\"\"\n        self._background_color.value = value\n\n    @property\n    def time(self) -> float:\n        \"\"\"Returns the current background color\"\"\"\n        return self._time.value\n\n    @time.setter\n    def time(self, value: float):\n        \"\"\"Sets the background color\"\"\"\n        self._time.value = value\n\n    @property\n    def colormap_options(self) -> ColormapOptions:\n        \"\"\"Returns the current colormap options\"\"\"\n        return ColormapOptions(\n            colormap=self._colormap.value,\n            normalize=self._normalize.value,\n            colormap_min=self._min.value,\n            colormap_max=self._max.value,\n            invert=self._invert.value,\n        )\n\n    @property\n    def split_colormap_options(self) -> ColormapOptions:\n        \"\"\"Returns the current colormap options\"\"\"\n        return ColormapOptions(\n            colormap=self._split_colormap.value,\n            normalize=self._split_normalize.value,\n            colormap_min=self._split_min.value,\n            colormap_max=self._split_max.value,\n            invert=self._split_invert.value,\n        )\n\n\ndef _get_colormap_options(dimensions: int, dtype: type) -> List[Colormaps]:\n    \"\"\"\n    Given the number of dimensions and data type, returns a list of available colormap options\n    to use with the visualize() function.\n\n    Args:\n        dimensions: the number of dimensions of the render\n        dtype: the data type of the render\n    Returns:\n        a list of available colormap options\n    \"\"\"\n    colormap_options: List[Colormaps] = []\n    if dimensions == 3:\n        colormap_options = [\"default\"]\n    if dimensions == 1 and dtype == torch.float:\n        colormap_options = [c for c in list(get_args(Colormaps)) if c not in (\"default\", \"pca\")]\n    if dimensions > 3:\n        colormap_options = [\"pca\"]\n    return colormap_options\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/gui_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Utilities for generating custom gui elements in the viewer\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any, List, Tuple\n\nfrom torch import nn\n\n\ndef parse_object(\n    obj: Any,\n    type_check,\n    tree_stub: str,\n) -> List[Tuple[str, Any]]:\n    \"\"\"\n    obj: the object to parse\n    type_check: recursively adds instances of this type to the output\n    tree_stub: the path down the object tree to this object\n\n    Returns:\n        a list of (path/to/object, obj), which represents the path down the object tree\n        along with the object itself\n    \"\"\"\n\n    def add(ret: List[Tuple[str, Any]], ts: str, v: Any):\n        \"\"\"\n        helper that adds to ret, and if v exists already keeps the tree stub with\n        the shortest path\n        \"\"\"\n        for i, (t, o) in enumerate(ret):\n            if o == v:\n                if len(t.split(\"/\")) > len(ts.split(\"/\")):\n                    ret[i] = (ts, v)\n                return\n        ret.append((ts, v))\n\n    if not hasattr(obj, \"__dict__\"):\n        return []\n    ret = []\n    # get a list of the properties of the object, sorted by whether things are instances of type_check\n    obj_props = [(k, getattr(obj, k)) for k in dir(obj)]\n    for k, v in obj_props:\n        if k[0] == \"_\":\n            continue\n        new_tree_stub = f\"{tree_stub}/{k}\"\n        if isinstance(v, type_check):\n            add(ret, new_tree_stub, v)\n        elif isinstance(v, nn.Module):\n            if v is obj:\n                # some nn.Modules might contain infinite references, e.g. consider foo = nn.Module(), foo.bar = foo\n                # to stop infinite recursion, we skip such attributes\n                continue\n            lower_rets = parse_object(v, type_check, new_tree_stub)\n            # check that the values aren't already in the tree\n            for ts, o in lower_rets:\n                add(ret, ts, o)\n    return ret\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/path.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Path class\"\"\"\n\nfrom typing import Tuple\n\nUNICODE = str\n\n\nclass Path:\n    \"\"\"Path class\n\n    Args:\n        entries: component parts of the path\n    \"\"\"\n\n    __slots__ = [\"entries\"]\n\n    def __init__(self, entries: Tuple = tuple()):\n        self.entries = entries\n\n    def append(self, other: str) -> \"Path\":\n        \"\"\"Method that appends a new component and returns new Path\n\n        Args:\n            other: _description_\n        \"\"\"\n        new_path = self.entries\n        for element in other.split(\"/\"):\n            if len(element) == 0:\n                new_path = tuple()\n            else:\n                new_path = new_path + (element,)\n        return Path(new_path)\n\n    def lower(self):\n        \"\"\"Convert path object to serializable format\"\"\"\n        return UNICODE(\"/\" + \"/\".join(self.entries))\n\n    def __hash__(self):\n        return hash(self.entries)\n\n    def __eq__(self, other):\n        return self.entries == other.entries\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/render_state_machine.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"This file contains the render state machine, which is responsible for deciding when to render the image\"\"\"\n\nfrom __future__ import annotations\n\nimport contextlib\nimport threading\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Dict, Literal, Optional, Tuple, get_args\n\nimport torch\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.model_components.renderers import background_color_override_context\nfrom nerfstudio.models.splatfacto import SplatfactoModel\nfrom nerfstudio.utils import colormaps, writer\nfrom nerfstudio.utils.writer import GLOBAL_BUFFER, EventName, TimeWriter\nfrom nerfstudio.viewer_legacy.server import viewer_utils\nfrom nerfstudio.viewer_legacy.viser.messages import CameraMessage\n\nif TYPE_CHECKING:\n    from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState\n\nRenderStates = Literal[\"low_move\", \"low_static\", \"high\"]\nRenderActions = Literal[\"rerender\", \"move\", \"static\", \"step\"]\n\n\n@dataclass\nclass RenderAction:\n    \"\"\"Message to the render state machine\"\"\"\n\n    action: RenderActions\n    \"\"\"The action to take \"\"\"\n    cam_msg: CameraMessage\n    \"\"\"The camera message to render\"\"\"\n\n\nclass RenderStateMachine(threading.Thread):\n    \"\"\"The render state machine is responsible for deciding how to render the image.\n    It decides the resolution and whether to interrupt the current render.\n\n    Args:\n        viewer: the viewer state\n    \"\"\"\n\n    def __init__(self, viewer: ViewerLegacyState):\n        threading.Thread.__init__(self)\n        self.transitions: Dict[RenderStates, Dict[RenderActions, RenderStates]] = {\n            s: {} for s in get_args(RenderStates)\n        }\n        # by default, everything is a self-transition\n        for a in get_args(RenderActions):\n            for s in get_args(RenderStates):\n                self.transitions[s][a] = s\n        # then define the actions between states\n        self.transitions[\"low_move\"][\"static\"] = \"low_static\"\n        self.transitions[\"low_static\"][\"static\"] = \"high\"\n        self.transitions[\"low_static\"][\"step\"] = \"high\"\n        self.transitions[\"low_static\"][\"move\"] = \"low_move\"\n        self.transitions[\"high\"][\"move\"] = \"low_move\"\n        self.transitions[\"high\"][\"rerender\"] = \"low_static\"\n        self.next_action: Optional[RenderAction] = None\n        self.state: RenderStates = \"low_static\"\n        self.render_trigger = threading.Event()\n        self.target_fps = 24\n        self.viewer = viewer\n        self.interrupt_render_flag = False\n        self.daemon = True\n        self.output_keys = {}\n\n    def action(self, action: RenderAction):\n        \"\"\"Takes an action and updates the state machine\n\n        Args:\n            action: the action to take\n        \"\"\"\n        if self.next_action is None:\n            self.next_action = action\n        elif action.action == \"step\" and (\n            self.state == \"low_move\" or self.next_action.action in (\"move\", \"static\", \"rerender\")\n        ):\n            # ignore steps if:\n            #  1. we are in low_moving state\n            #  2. the current next_action is move, static, or rerender\n            return\n        elif self.next_action == \"rerender\":\n            # never overwrite rerenders\n            pass\n        else:\n            #  minimal use case, just set the next action\n            self.next_action = action\n\n        # handle interrupt logic\n        if self.state == \"high\" and self.next_action.action in (\"move\", \"rerender\"):\n            self.interrupt_render_flag = True\n        self.render_trigger.set()\n\n    def _render_img(self, cam_msg: CameraMessage):\n        \"\"\"Takes the current camera, generates rays, and renders the image\n\n        Args:\n            cam_msg: the camera message to render\n        \"\"\"\n\n        # initialize the camera ray bundle\n        viewer_utils.update_render_aabb(\n            crop_viewport=self.viewer.control_panel.crop_viewport,\n            crop_min=self.viewer.control_panel.crop_min,\n            crop_max=self.viewer.control_panel.crop_max,\n            model=self.viewer.get_model(),\n        )\n\n        image_height, image_width = self._calculate_image_res(cam_msg.aspect)\n\n        camera: Optional[Cameras] = self.viewer.get_camera(image_height, image_width)\n        assert camera is not None, \"render called before viewer connected\"\n\n        with self.viewer.train_lock if self.viewer.train_lock is not None else contextlib.nullcontext():\n            # TODO jake-austin: Make this check whether the model inherits from a camera based model or a ray based model\n            # TODO Zhuoyang: First made some dummy judgements, need to be fixed later\n            isGaussianSplattingModel = isinstance(self.viewer.get_model(), SplatfactoModel)\n            if isGaussianSplattingModel:\n                # TODO fix me before ship\n                camera_ray_bundle = camera.generate_rays(camera_indices=0, aabb_box=self.viewer.get_model().render_aabb)\n            else:\n                camera_ray_bundle = camera.generate_rays(camera_indices=0, aabb_box=self.viewer.get_model().render_aabb)\n\n            with TimeWriter(None, None, write=False) as vis_t:\n                self.viewer.get_model().eval()\n                step = self.viewer.step\n                if self.viewer.control_panel.crop_viewport:\n                    color = self.viewer.control_panel.background_color\n                    if color is None:\n                        background_color = torch.tensor([0.0, 0.0, 0.0], device=self.viewer.pipeline.model.device)\n                    else:\n                        background_color = torch.tensor(\n                            [color[0] / 255.0, color[1] / 255.0, color[2] / 255.0],\n                            device=self.viewer.get_model().device,\n                        )\n                    with background_color_override_context(background_color), torch.no_grad():\n                        if isGaussianSplattingModel:\n                            outputs = self.viewer.get_model().get_outputs_for_camera(camera)\n                        else:\n                            outputs = self.viewer.get_model().get_outputs_for_camera_ray_bundle(camera_ray_bundle)\n                else:\n                    with torch.no_grad():\n                        if isGaussianSplattingModel:\n                            outputs = self.viewer.get_model().get_outputs_for_camera(camera)\n                        else:\n                            outputs = self.viewer.get_model().get_outputs_for_camera_ray_bundle(camera_ray_bundle)\n                self.viewer.get_model().train()\n        if True:\n            num_rays = (camera.height * camera.width).item()\n        else:\n            num_rays = len(camera_ray_bundle)\n        render_time = vis_t.duration\n        if writer.is_initialized():\n            writer.put_time(\n                name=EventName.VIS_RAYS_PER_SEC, duration=num_rays / render_time, step=step, avg_over_steps=True\n            )\n        self.viewer.viser_server.send_status_message(eval_res=f\"{image_height}x{image_width}px\", step=step)\n        return outputs\n\n    def run(self):\n        \"\"\"Main loop for the render thread\"\"\"\n        while True:\n            self.render_trigger.wait()\n            self.render_trigger.clear()\n            action = self.next_action\n            assert action is not None, \"Action should never be None at this point\"\n            self.next_action = None\n            if self.state == \"high\" and action.action == \"static\":\n                # if we are in high res and we get a static action, we don't need to do anything\n                continue\n            self.state = self.transitions[self.state][action.action]\n            try:\n                with viewer_utils.SetTrace(self.check_interrupt):\n                    outputs = self._render_img(action.cam_msg)\n            except viewer_utils.IOChangeException:\n                # if we got interrupted, don't send the output to the viewer\n                continue\n            self._send_output_to_viewer(outputs)\n            # if we rendered a static low res, we need to self-trigger a static high-res\n            if self.state == \"low_static\":\n                self.action(RenderAction(\"static\", action.cam_msg))\n\n    def check_interrupt(self, frame, event, arg):\n        \"\"\"Raises interrupt when flag has been set and not already on lowest resolution.\n        Used in conjunction with SetTrace.\n        \"\"\"\n        if event == \"line\":\n            if self.interrupt_render_flag:\n                self.interrupt_render_flag = False\n                raise viewer_utils.IOChangeException\n        return self.check_interrupt\n\n    def _send_output_to_viewer(self, outputs: Dict[str, Any]):\n        \"\"\"Chooses the correct output and sends it to the viewer\n\n        Args:\n            outputs: the dictionary of outputs to choose from, from the model\n        \"\"\"\n        output_keys = set(outputs.keys())\n        if self.output_keys != output_keys:\n            self.output_keys = output_keys\n            self.viewer.viser_server.send_output_options_message(list(outputs.keys()))\n            self.viewer.control_panel.update_output_options(list(outputs.keys()))\n\n        output_render = self.viewer.control_panel.output_render\n        self.viewer.update_colormap_options(\n            dimensions=outputs[output_render].shape[-1], dtype=outputs[output_render].dtype\n        )\n        selected_output = colormaps.apply_colormap(\n            image=outputs[self.viewer.control_panel.output_render],\n            colormap_options=self.viewer.control_panel.colormap_options,\n        )\n\n        if self.viewer.control_panel.split:\n            split_output_render = self.viewer.control_panel.split_output_render\n            self.viewer.update_split_colormap_options(\n                dimensions=outputs[split_output_render].shape[-1], dtype=outputs[split_output_render].dtype\n            )\n            split_output = colormaps.apply_colormap(\n                image=outputs[self.viewer.control_panel.split_output_render],\n                colormap_options=self.viewer.control_panel.split_colormap_options,\n            )\n            split_index = min(\n                int(self.viewer.control_panel.split_percentage * selected_output.shape[1]),\n                selected_output.shape[1] - 1,\n            )\n            selected_output = torch.cat([selected_output[:, :split_index], split_output[:, split_index:]], dim=1)\n            selected_output[:, split_index] = torch.tensor([0.133, 0.157, 0.192], device=selected_output.device)\n\n        selected_output = (selected_output * 255).type(torch.uint8)\n\n        self.viewer.viser_server.set_background_image(\n            selected_output.cpu().numpy(),\n            file_format=self.viewer.config.image_format,\n            quality=self.viewer.config.jpeg_quality,\n        )\n\n    def _calculate_image_res(self, aspect_ratio: float) -> Tuple[int, int]:\n        \"\"\"Calculate the maximum image height that can be rendered in the time budget\n\n        Args:\n            aspect_ratio: the aspect ratio of the current view\n        Returns:\n            image_height: the maximum image height that can be rendered in the time budget\n            image_width: the maximum image width that can be rendered in the time budget\n        \"\"\"\n        if aspect_ratio == 0:\n            aspect_ratio = 0.001\n        max_res = self.viewer.control_panel.max_res\n        if self.state == \"high\":\n            # high res is always static\n            image_height = max_res\n            image_width = int(image_height * aspect_ratio)\n            if image_width > max_res:\n                image_width = max_res\n                image_height = int(image_width / aspect_ratio)\n        elif self.state in (\"low_move\", \"low_static\"):\n            if writer.is_initialized() and EventName.VIS_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]:\n                vis_rays_per_sec = GLOBAL_BUFFER[\"events\"][EventName.VIS_RAYS_PER_SEC.value][\"avg\"]\n            else:\n                vis_rays_per_sec = 100000\n            target_fps = self.target_fps\n            num_vis_rays = vis_rays_per_sec / target_fps\n            image_height = (num_vis_rays / aspect_ratio) ** 0.5\n            image_height = int(round(image_height, -1))\n            image_height = max(min(max_res, image_height), 30)\n            image_width = int(image_height * aspect_ratio)\n            if image_width > max_res:\n                image_width = max_res\n                image_height = int(image_width / aspect_ratio)\n        else:\n            raise ValueError(f\"Invalid state: {self.state}\")\n\n        return image_height, image_width\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/state/node.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nFor tree logic code.\n\"\"\"\n\nfrom collections import defaultdict\nfrom typing import Callable\n\n\nclass Node(defaultdict):\n    \"\"\"\n    The base class Node.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n\ndef get_tree(node_class: Callable) -> Callable:\n    \"\"\"\n    Get a tree from a node class.\n    This allows one to do tree[\"path\"][\"to\"][\"node\"]\n    and it will return a new node if it doesn't exist\n    or the current node if it does.\n    \"\"\"\n    assert isinstance(node_class(), Node)\n\n    def tree():\n        return node_class(tree)\n\n    return tree()\n\n\ndef find_node(tree, path):\n    if len(path) == 0:\n        return tree\n    else:\n        return find_node(tree[path[0]], path[1:])\n\n\ndef set_node_value(tree, path, value):\n    if len(path) == 0:\n        tree.data = value\n    else:\n        set_node_value(tree[path[0]], path[1:], value)\n\n\ndef walk(path, tree):\n    \"\"\"Walk the entire tree and return the values\n    Args:\n        tree: the root of the tree to start search\n    \"\"\"\n    yield path, tree\n    for k, v in tree.items():\n        yield from walk(path + \"/\" + k, v)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/state/state_node.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\nfrom nerfstudio.viewer_legacy.server.state.node import Node\n\n\nclass StateNode(Node):\n    \"\"\"Node that holds a hierarchy of state nodes\"\"\"\n\n    __slots__ = [\"data\"]\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.path = None\n        self.data = None\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Generic utility functions\"\"\"\n\nfrom typing import List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom typing_extensions import assert_never\n\nfrom nerfstudio.viewer_legacy.viser.messages import CameraMessage\n\n\ndef get_chunks(\n    lst: Union[List[float], Tuple[float, ...]], num_chunks: Optional[int] = None, size_of_chunk: Optional[int] = None\n) -> List[List[float]]:\n    \"\"\"Returns list of n elements, containing a sublist.\n\n    Args:\n        lst: List to be chunked up\n        num_chunks: number of chunks to split list into\n        size_of_chunk: size of each chunk\n    \"\"\"\n    if num_chunks:\n        assert not size_of_chunk\n        size = len(lst) // num_chunks\n    elif size_of_chunk:\n        assert not num_chunks\n        size = size_of_chunk\n    else:\n        assert False, \"Either `num_chunks` or `size_of_chunk` must be set\"\n\n    chunks = []\n    for i in range(0, len(lst), size):\n        chunks.append(lst[i : i + size])\n    return chunks\n\n\ndef three_js_perspective_camera_focal_length(fov: float, image_height: int):\n    \"\"\"Returns the focal length of a three.js perspective camera.\n\n    Args:\n        fov: the field of view of the camera in degrees.\n        image_height: the height of the image in pixels.\n    \"\"\"\n    if fov is None:\n        print(\"Warning: fov is None, using default value\")\n        return 50\n    pp_h = image_height / 2.0\n    focal_length = pp_h / np.tan(fov * (np.pi / 180.0) / 2.0)\n    return focal_length\n\n\ndef get_intrinsics_matrix_and_camera_to_world_h(\n    camera_message: CameraMessage, image_height: int, image_width: Optional[Union[int, float]] = None\n) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"Returns the camera intrinsics matrix and the camera to world homogeneous matrix.\n\n    Args:\n        camera_object: a Camera object.\n        image_size: the size of the image (height, width)\n    \"\"\"\n    # intrinsics\n    fov = camera_message.fov\n    aspect = camera_message.aspect\n    if image_width is None:\n        image_width = aspect * image_height\n    pp_w = image_width / 2.0\n    pp_h = image_height / 2.0\n    if camera_message.camera_type in (\"perspective\", \"fisheye\"):\n        focal_length = three_js_perspective_camera_focal_length(fov, image_height)\n        intrinsics_matrix = torch.tensor([[focal_length, 0, pp_w], [0, focal_length, pp_h], [0, 0, 1]]).float()\n    elif camera_message.camera_type == \"equirectangular\":\n        render_aspect = camera_message.render_aspect\n        if aspect < render_aspect:\n            intrinsics_matrix = torch.tensor(\n                [[pp_w, 0, pp_w], [0, image_width / render_aspect, pp_h], [0, 0, 1]]\n            ).float()\n        else:\n            intrinsics_matrix = torch.tensor(\n                [[image_height * render_aspect / 2, 0, pp_w], [0, pp_h * 2, pp_h], [0, 0, 1]]\n            ).float()\n    else:\n        assert_never(camera_message.camera_type)\n\n    # extrinsics\n    camera_to_world_h = torch.tensor(get_chunks(camera_message.matrix, size_of_chunk=4)).T.float()\n    camera_to_world_h = torch.stack(\n        [\n            camera_to_world_h[0, :],\n            camera_to_world_h[2, :],\n            camera_to_world_h[1, :],\n            camera_to_world_h[3, :],\n        ],\n        dim=0,\n    )\n\n    return intrinsics_matrix, camera_to_world_h\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/viewer_elements.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"Viewer GUI elements for the nerfstudio viewer\"\"\"\n\nfrom __future__ import annotations\n\nfrom abc import abstractmethod\nfrom dataclasses import dataclass\nfrom typing import TYPE_CHECKING, Any, Callable, Generic, List, Optional, Tuple\n\nfrom typing_extensions import TypeVar\n\nfrom nerfstudio.cameras.cameras import Cameras\nfrom nerfstudio.viewer_legacy.viser import GuiHandle, GuiSelectHandle, ViserServer\nfrom nerfstudio.viewer_legacy.viser.messages import ClickMessage\n\nif TYPE_CHECKING:\n    from nerfstudio.viewer_legacy.server.control_panel import ControlPanel\n    from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState\n\n\nTValue = TypeVar(\"TValue\")\n\n\n@dataclass\nclass ViewerClick:\n    \"\"\"\n    Class representing a click in the viewer as a ray.\n    \"\"\"\n\n    # the information here matches the information in the ClickMessage,\n    # but we implement a wrapper as an abstraction layer\n    origin: Tuple[float, float, float]\n    \"\"\"The origin of the click in world coordinates (center of camera)\"\"\"\n    direction: Tuple[float, float, float]\n    \"\"\"\n    The direction of the click if projected from the camera through the clicked pixel,\n    in world coordinates\n    \"\"\"\n\n\nclass ViewerControl:\n    \"\"\"\n    class for exposing non-gui controls of the viewer to the user\n    \"\"\"\n\n    def __init__(self):\n        # this should be a user-facing constructor, since it will be used inside the model/pipeline class\n        self.click_cbs = []\n        from nerfstudio.utils.rich_utils import CONSOLE\n\n        CONSOLE.print(\n            \"WARNING: viewer_legacy.server.viewer_elements is deprecated and will be removed in the future. Use the new nerfstudio.viewer instead\",\n            style=\"bold yellow\",\n        )\n\n    def _setup(self, viewer_state: ViewerLegacyState):\n        \"\"\"\n        Internal use only, setup the viewer control with the viewer state object\n\n        Args:\n            viewer_state: The viewer state object (viewer_state.py)\n        \"\"\"\n        self.viewer_state = viewer_state\n        self.control_panel: ControlPanel = viewer_state.control_panel\n        self.viser_server: ViserServer = viewer_state.viser_server\n\n    def set_pose(\n        self,\n        position: Optional[Tuple[float, float, float]] = None,\n        look_at: Optional[Tuple[float, float, float]] = None,\n        instant: bool = False,\n    ):\n        \"\"\"\n        Set the camera position of the viewer camera.\n\n        Args:\n            position: The new position of the camera in world coordinates\n            look_at: The new look_at point of the camera in world coordinates\n            instant: If the camera should move instantly or animate to the new position\n        \"\"\"\n        assert hasattr(self, \"viser_server\"), \"Called set_position on uninitialized ViewerControl\"\n        self.viser_server.set_camera(position=position, look_at=look_at, instant=instant)\n\n    def set_fov(self, fov):\n        \"\"\"\n        Set the FOV of the viewer camera\n\n        Args:\n            fov: The new FOV of the camera in degrees\n\n        \"\"\"\n        assert hasattr(self, \"viser_server\"), \"Called set_fov on uninitialized ViewerControl\"\n        self.viser_server.set_camera(fov=fov)\n\n    def set_crop(self, min_point: Tuple[float, float, float], max_point: Tuple[float, float, float]):\n        \"\"\"\n        Set the scene crop box of the viewer to the specified min,max point\n\n        Args:\n            min_point: The minimum point of the crop box\n            max_point: The maximum point of the crop box\n\n        \"\"\"\n        assert hasattr(self, \"viser_server\"), \"Called set_crop on uninitialized ViewerControl\"\n        self.control_panel.crop_min = min_point\n        self.control_panel.crop_max = max_point\n\n    def get_camera(self, img_height: int, img_width: int) -> Optional[Cameras]:\n        \"\"\"\n        Returns the Cameras object representing the current camera for the viewer, or None if the viewer\n        is not connected yet\n\n        Args:\n            img_height: The height of the image to get camera intrinsics for\n            img_width: The width of the image to get camera intrinsics for\n        \"\"\"\n        return self.viewer_state.get_camera(img_height, img_width)\n\n    def register_click_cb(self, cb: Callable):\n        \"\"\"\n        Add a callback which will be called when a click is detected in the viewer.\n\n        Args:\n            cb: The callback to call when a click is detected.\n                The callback should take a ViewerClick object as an argument\n        \"\"\"\n        self.click_cbs.append(cb)\n\n    def on_click(self, msg: ClickMessage):\n        \"\"\"\n        Internal use only, register a click in the viewer which propagates to all self.click_cbs\n        \"\"\"\n        click = ViewerClick(origin=msg.origin, direction=msg.direction)\n        for c in self.click_cbs:\n            c(click)\n\n\nclass ViewerElement(Generic[TValue]):\n    \"\"\"Base class for all viewer elements\n\n    Args:\n        name: The name of the element\n        disabled: If the element is disabled\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        disabled: bool = False,\n        cb_hook: Callable = lambda element: None,\n    ) -> None:\n        self.name = name\n        self.gui_handle: Optional[GuiHandle[TValue]] = None\n        self.disabled = disabled\n        self.cb_hook = cb_hook\n        from nerfstudio.utils.rich_utils import CONSOLE\n\n        CONSOLE.print(\n            \"WARNING: viewer_legacy.server.viewer_elements is deprecated and will be removed in the future. Use the new nerfstudio.viewer instead\",\n            style=\"bold yellow\",\n        )\n\n    @abstractmethod\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        \"\"\"\n        Returns the GuiHandle object which actually controls the parameter in the gui.\n\n        Args:\n            viser_server: The server to install the gui element into.\n        \"\"\"\n        ...\n\n    def remove(self) -> None:\n        \"\"\"Removes the gui element from the viewer\"\"\"\n        if self.gui_handle is not None:\n            self.gui_handle.remove()\n            self.gui_handle = None\n\n    def set_hidden(self, hidden: bool) -> None:\n        \"\"\"Sets the hidden state of the gui element\"\"\"\n        assert self.gui_handle is not None\n        self.gui_handle.set_hidden(hidden)\n\n    def set_disabled(self, disabled: bool) -> None:\n        \"\"\"Sets the disabled state of the gui element\"\"\"\n        assert self.gui_handle is not None\n        self.gui_handle.set_disabled(disabled)\n\n    @abstractmethod\n    def install(self, viser_server: ViserServer) -> None:\n        \"\"\"Installs the gui element into the given viser_server\"\"\"\n        ...\n\n\nclass ViewerButton(ViewerElement[bool]):\n    \"\"\"A button in the viewer\n\n    Args:\n        name: The name of the button\n        cb_hook: The function to call when the button is pressed\n        disabled: If the button is disabled\n    \"\"\"\n\n    def __init__(self, name: str, cb_hook: Callable[[ViewerButton], Any], disabled: bool = False):\n        super().__init__(name, disabled=disabled, cb_hook=cb_hook)\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.add_gui_button(self.name)\n        self.gui_handle.set_disabled(self.disabled)\n\n    def install(self, viser_server: ViserServer) -> None:\n        self._create_gui_handle(viser_server)\n\n        assert self.gui_handle is not None\n        self.gui_handle.on_update(lambda _: self.cb_hook(self))\n\n\nclass ViewerParameter(ViewerElement[TValue], Generic[TValue]):\n    \"\"\"A viewer element with state\n\n    Args:\n        name: The name of the element\n        default_value: The default value of the element\n        disabled: If the element is disabled\n        cb_hook: Callback to call on update\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TValue,\n        disabled: bool = False,\n        cb_hook: Callable = lambda element: None,\n    ) -> None:\n        super().__init__(name, disabled=disabled, cb_hook=cb_hook)\n        self.default_value = default_value\n\n    def install(self, viser_server: ViserServer) -> None:\n        \"\"\"\n        Based on the type provided by default_value, installs a gui element inside the given viser_server\n\n        Args:\n            viser_server: The server to install the gui element into.\n        \"\"\"\n        self._create_gui_handle(viser_server)\n\n        assert self.gui_handle is not None\n        self.gui_handle.on_update(lambda _: self.cb_hook(self))\n\n    @abstractmethod\n    def _create_gui_handle(self, viser_server: ViserServer) -> None: ...\n\n    @property\n    def value(self) -> TValue:\n        \"\"\"Returns the current value of the viewer element\"\"\"\n        if self.gui_handle is None:\n            return self.default_value\n        return self.gui_handle.get_value()\n\n    @value.setter\n    def value(self, value: TValue) -> None:\n        if self.gui_handle is not None:\n            self.gui_handle.set_value(value)\n        else:\n            self.default_value = value\n\n\nIntOrFloat = TypeVar(\"IntOrFloat\", int, float)\n\n\nclass ViewerSlider(ViewerParameter[IntOrFloat], Generic[IntOrFloat]):\n    \"\"\"A slider in the viewer\n\n    Args:\n        name: The name of the slider\n        default_value: The default value of the slider\n        min_value: The minimum value of the slider\n        max_value: The maximum value of the slider\n        step: The step size of the slider\n        disabled: If the slider is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: IntOrFloat,\n        min_value: IntOrFloat,\n        max_value: IntOrFloat,\n        step: IntOrFloat = 0.1,\n        disabled: bool = False,\n        cb_hook: Callable[[ViewerSlider], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, (float, int))\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.min = min_value\n        self.max = max_value\n        self.step = step\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_slider(\n            self.name, self.min, self.max, self.step, self.default_value, hint=self.hint\n        )\n        self.gui_handle.set_disabled(self.disabled)\n\n\nclass ViewerText(ViewerParameter[str]):\n    \"\"\"A text field in the viewer\n\n    Args:\n        name: The name of the text field\n        default_value: The default value of the text field\n        disabled: If the text field is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: str,\n        disabled: bool = False,\n        cb_hook: Callable[[ViewerText], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, str)\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_text(self.name, self.default_value, hint=self.hint)\n        self.gui_handle.set_disabled(self.disabled)\n\n\nclass ViewerNumber(ViewerParameter[IntOrFloat], Generic[IntOrFloat]):\n    \"\"\"A number field in the viewer\n\n    Args:\n        name: The name of the number field\n        default_value: The default value of the number field\n        disabled: If the number field is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    default_value: IntOrFloat\n\n    def __init__(\n        self,\n        name: str,\n        default_value: IntOrFloat,\n        disabled: bool = False,\n        cb_hook: Callable[[ViewerNumber], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, (float, int))\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_number(self.name, self.default_value, hint=self.hint)\n\n\nclass ViewerCheckbox(ViewerParameter[bool]):\n    \"\"\"A checkbox in the viewer\n\n    Args:\n        name: The name of the checkbox\n        default_value: The default value of the checkbox\n        disabled: If the checkbox is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        default_value: bool,\n        disabled: bool = False,\n        cb_hook: Callable[[ViewerCheckbox], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert isinstance(default_value, bool)\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_checkbox(self.name, self.default_value, hint=self.hint)\n        self.gui_handle.set_disabled(self.disabled)\n\n\nTString = TypeVar(\"TString\", default=str, bound=str)\n\n\nclass ViewerDropdown(ViewerParameter[TString], Generic[TString]):\n    \"\"\"A dropdown in the viewer\n\n    Args:\n        name: The name of the dropdown\n        default_value: The default value of the dropdown\n        options: The options of the dropdown\n        disabled: If the dropdown is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    gui_handle: Optional[GuiSelectHandle[str]]\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TString,\n        options: List[TString],\n        disabled: bool = False,\n        cb_hook: Callable[[ViewerDropdown], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert default_value in options\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.options = options\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_select(\n            self.name,\n            self.options,  # type: ignore\n            self.default_value,  # type: ignore\n            hint=self.hint,\n        )\n        self.gui_handle.set_disabled(self.disabled)\n\n    def set_options(self, new_options: List[TString]) -> None:\n        \"\"\"\n        Sets the options of the dropdown,\n\n        Args:\n            new_options: The new options. If the current option isn't in the new options, the first option is selected.\n        \"\"\"\n        self.options = new_options\n        if self.gui_handle is not None:\n            self.gui_handle.set_options(new_options)  # type: ignore\n\n\nclass ViewerButtonGroup(ViewerParameter[TString], Generic[TString]):\n    \"\"\"A button group in the viewer. Unlike other fields, cannot be disabled.\n\n    Args:\n        name: The name of the button group\n        default_value: The default value of the button group\n        options: The options of the button group\n        cb_hook: Callback to call on update\n    \"\"\"\n\n    gui_handle: Optional[GuiHandle[TString]]\n    default_value: TString\n\n    def __init__(\n        self,\n        name: str,\n        default_value: TString,\n        options: List[TString],\n        cb_hook: Callable[[ViewerDropdown], Any] = lambda element: None,\n    ):\n        assert default_value in options\n        super().__init__(name, default_value, disabled=False, cb_hook=cb_hook)\n        self.options = options\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        assert self.gui_handle is None, \"gui_handle should be initialized once\"\n        self.gui_handle = viser_server.add_gui_button_group(self.name, self.options, self.default_value)  # type: ignore\n\n\nclass ViewerRGB(ViewerParameter[Tuple[int, int, int]]):\n    \"\"\"\n    An RGB color picker for the viewer\n\n    Args:\n        name: The name of the color picker\n        default_value: The default value of the color picker\n        disabled: If the color picker is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name,\n        default_value: Tuple[int, int, int],\n        disabled=False,\n        cb_hook: Callable[[ViewerRGB], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert len(default_value) == 3\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.add_gui_rgb(self.name, self.default_value, hint=self.hint)\n        self.gui_handle.set_disabled(self.disabled)\n\n\nclass ViewerVec3(ViewerParameter[Tuple[float, float, float]]):\n    \"\"\"\n    3 number boxes in a row to input a vector\n\n    Args:\n        name: The name of the vector\n        default_value: The default value of the vector\n        step: The step of the vector\n        disabled: If the vector is disabled\n        cb_hook: Callback to call on update\n        hint: The hint text\n    \"\"\"\n\n    def __init__(\n        self,\n        name,\n        default_value: Tuple[float, float, float],\n        step=0.1,\n        disabled=False,\n        cb_hook: Callable[[ViewerVec3], Any] = lambda element: None,\n        hint: Optional[str] = None,\n    ):\n        assert len(default_value) == 3\n        super().__init__(name, default_value, disabled=disabled, cb_hook=cb_hook)\n        self.step = step\n        self.hint = hint\n\n    def _create_gui_handle(self, viser_server: ViserServer) -> None:\n        self.gui_handle = viser_server.add_gui_vector3(self.name, self.default_value, self.step, hint=self.hint)\n        self.gui_handle.set_disabled(self.disabled)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/viewer_state.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Manage the state of the viewer\"\"\"\n\nfrom __future__ import annotations\n\nimport threading\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING, List, Literal, Optional\n\nimport numpy as np\nimport torch\nfrom rich import box, style\nfrom rich.panel import Panel\nfrom rich.table import Table\n\nfrom nerfstudio.cameras.cameras import Cameras, CameraType\nfrom nerfstudio.configs import base_config as cfg\nfrom nerfstudio.data.datasets.base_dataset import InputDataset\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.pipelines.base_pipeline import Pipeline\nfrom nerfstudio.utils.decorators import check_main_thread, decorate_all\nfrom nerfstudio.utils.io import load_from_json, write_to_json\nfrom nerfstudio.utils.rich_utils import CONSOLE\nfrom nerfstudio.utils.writer import GLOBAL_BUFFER, EventName\nfrom nerfstudio.viewer_legacy.server import viewer_utils\nfrom nerfstudio.viewer_legacy.server.control_panel import ControlPanel\nfrom nerfstudio.viewer_legacy.server.gui_utils import parse_object\nfrom nerfstudio.viewer_legacy.server.render_state_machine import RenderAction, RenderStateMachine\nfrom nerfstudio.viewer_legacy.server.utils import get_intrinsics_matrix_and_camera_to_world_h\nfrom nerfstudio.viewer_legacy.server.viewer_elements import ViewerControl, ViewerElement\nfrom nerfstudio.viewer_legacy.viser import ViserServer\nfrom nerfstudio.viewer_legacy.viser.messages import (\n    CameraMessage,\n    CameraPathOptionsRequest,\n    CameraPathPayloadMessage,\n    ClickMessage,\n    CropParamsMessage,\n    NerfstudioMessage,\n    SaveCheckpointMessage,\n    TimeConditionMessage,\n    TrainingStateMessage,\n)\n\nif TYPE_CHECKING:\n    from nerfstudio.engine.trainer import Trainer\n\n\n@decorate_all([check_main_thread])\nclass ViewerLegacyState:\n    \"\"\"Class to hold state for viewer variables\n\n    Args:\n        config: viewer setup configuration\n        log_filename: filename to log viewer output to\n        datapath: path to data\n        pipeline: pipeline object to use\n        trainer: trainer object to use\n\n    Attributes:\n        viewer_url: url to open viewer\n    \"\"\"\n\n    viewer_url: str\n\n    def __init__(\n        self,\n        config: cfg.ViewerConfig,\n        log_filename: Path,\n        datapath: Path,\n        pipeline: Pipeline,\n        trainer: Optional[Trainer] = None,\n        train_lock: Optional[threading.Lock] = None,\n    ):\n        self.config = config\n        self.trainer = trainer\n        self.last_step = 0\n        self.train_lock = train_lock\n        self.pipeline = pipeline\n        self.log_filename = log_filename\n        self.datapath = datapath.parent if datapath.is_file() else datapath\n\n        if self.config.websocket_port is None:\n            websocket_port = viewer_utils.get_free_port(default_port=self.config.websocket_port_default)\n        else:\n            websocket_port = self.config.websocket_port\n        self.log_filename.parent.mkdir(exist_ok=True)\n\n        self.viewer_url = viewer_utils.get_viewer_url(websocket_port)\n        table = Table(\n            title=None,\n            show_header=False,\n            box=box.MINIMAL,\n            title_style=style.Style(bold=True),\n        )\n        table.add_row(\"HTTP\", f\"[link={self.viewer_url}][blue]{self.viewer_url}[/link]\")\n\n        CONSOLE.print(Panel(table, title=\"[bold][yellow]Viewer[/bold]\", expand=False))\n\n        self.include_time = self.pipeline.datamanager.includes_time\n\n        # viewer specific variables\n        self.output_type_changed = True\n        self.output_split_type_changed = True\n        self.step = 0\n        self.train_btn_state: Literal[\"training\", \"paused\", \"completed\"] = (\n            \"training\" if self.trainer is None else self.trainer.training_state\n        )\n        self._prev_train_state: Literal[\"training\", \"paused\", \"completed\"] = self.train_btn_state\n\n        self.camera_message = None\n\n        self.viser_server = ViserServer(host=config.websocket_host, port=websocket_port)\n\n        self.viser_server.register_handler(TrainingStateMessage, self._handle_training_state_message)\n        self.viser_server.register_handler(SaveCheckpointMessage, self._handle_save_checkpoint)\n        self.viser_server.register_handler(CameraMessage, self._handle_camera_update)\n        self.viser_server.register_handler(CameraPathOptionsRequest, self._handle_camera_path_option_request)\n        self.viser_server.register_handler(CameraPathPayloadMessage, self._handle_camera_path_payload)\n        self.viser_server.register_handler(CropParamsMessage, self._handle_crop_params_message)\n        self.viser_server.register_handler(ClickMessage, self._handle_click_message)\n        if self.include_time:\n            self.viser_server.use_time_conditioning()\n            self.viser_server.register_handler(TimeConditionMessage, self._handle_time_condition_message)\n\n        self.control_panel = ControlPanel(\n            self.viser_server,\n            self.include_time,\n            self._interrupt_render,\n            self._crop_params_update,\n            self._output_type_change,\n            self._output_split_type_change,\n        )\n\n        def nested_folder_install(folder_labels: List[str], element: ViewerElement):\n            if len(folder_labels) == 0:\n                element.install(self.viser_server)\n                # also rewire the hook to rerender\n                prev_cb = element.cb_hook\n                element.cb_hook = lambda element: [prev_cb(element), self._interrupt_render(element)]\n            else:\n                with self.viser_server.gui_folder(folder_labels[0]):\n                    nested_folder_install(folder_labels[1:], element)\n\n        self.viewer_elements = []\n        if self.trainer is not None:\n            self.viewer_elements.extend(parse_object(self.trainer, ViewerElement, \"Trainer\"))\n        else:\n            self.viewer_elements.extend(parse_object(pipeline, ViewerElement, \"Pipeline\"))\n        for param_path, element in self.viewer_elements:\n            folder_labels = param_path.split(\"/\")[:-1]\n            nested_folder_install(folder_labels, element)\n\n        # scrape the trainer/pipeline for any ViewerControl objects to initialize them\n        if self.trainer is not None:\n            self.viewer_controls: List[ViewerControl] = [\n                e for (_, e) in parse_object(self.trainer, ViewerControl, \"Trainer\")\n            ]\n        else:\n            self.viewer_controls: List[ViewerControl] = [\n                e for (_, e) in parse_object(self.trainer, ViewerControl, \"Pipeline\")\n            ]\n\n        for c in self.viewer_controls:\n            c._setup(self)\n        self.render_statemachine = RenderStateMachine(self)\n        self.render_statemachine.start()\n\n    def _output_type_change(self, _):\n        self.output_type_changed = True\n\n    def _output_split_type_change(self, _):\n        self.output_split_type_changed = True\n\n    def _interrupt_render(self, _) -> None:\n        \"\"\"Interrupt current render.\"\"\"\n        if self.camera_message is not None:\n            self.render_statemachine.action(RenderAction(\"rerender\", self.camera_message))\n\n    def _crop_params_update(self, _) -> None:\n        \"\"\"Update crop parameters\"\"\"\n        crop_min = torch.tensor(self.control_panel.crop_min, dtype=torch.float32)\n        crop_max = torch.tensor(self.control_panel.crop_max, dtype=torch.float32)\n        scene_box = SceneBox(aabb=torch.stack([crop_min, crop_max], dim=0))\n        self.viser_server.update_scene_box(scene_box)\n        crop_scale = crop_max - crop_min\n        crop_center = (crop_max + crop_min) / 2.0\n        self.viser_server.send_crop_params(\n            crop_enabled=self.control_panel.crop_viewport,\n            crop_bg_color=self.control_panel.background_color,\n            crop_scale=tuple(crop_scale.tolist()),  # type: ignore\n            crop_center=tuple(crop_center.tolist()),  # type: ignore\n        )\n        if self.camera_message is not None:\n            self.render_statemachine.action(RenderAction(\"rerender\", self.camera_message))\n\n    def _handle_training_state_message(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle training state message from viewer.\"\"\"\n        assert isinstance(message, TrainingStateMessage)\n        self.train_btn_state = message.training_state\n        self.training_state = message.training_state\n        self.viser_server.set_training_state(message.training_state)\n\n    def _handle_save_checkpoint(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle save checkpoint message from viewer.\"\"\"\n        assert isinstance(message, SaveCheckpointMessage)\n        if self.trainer is not None:\n            self.trainer.save_checkpoint(self.step)\n\n    def _handle_camera_update(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle camera update message from viewer.\"\"\"\n        assert isinstance(message, CameraMessage)\n        self.camera_message = message\n        if message.is_moving:\n            self.render_statemachine.action(RenderAction(\"move\", self.camera_message))\n            if self.training_state == \"training\":\n                self.training_state = \"paused\"\n        else:\n            self.render_statemachine.action(RenderAction(\"static\", self.camera_message))\n            self.training_state = self.train_btn_state\n\n    def _handle_camera_path_option_request(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle camera path option request message from viewer.\"\"\"\n        assert isinstance(message, CameraPathOptionsRequest)\n        camera_path_dir = self.datapath / \"camera_paths\"\n        if camera_path_dir.exists():\n            all_path_dict = {}\n            for path in camera_path_dir.iterdir():\n                if path.suffix == \".json\":\n                    all_path_dict[path.stem] = load_from_json(path)\n            self.viser_server.send_camera_paths(all_path_dict)\n\n    def _handle_camera_path_payload(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle camera path payload message from viewer.\"\"\"\n        assert isinstance(message, CameraPathPayloadMessage)\n        camera_path_filename = message.camera_path_filename + \".json\"\n        camera_path = message.camera_path\n        camera_paths_directory = self.datapath / \"camera_paths\"\n        camera_paths_directory.mkdir(parents=True, exist_ok=True)\n        write_to_json(camera_paths_directory / camera_path_filename, camera_path)\n\n    def _handle_crop_params_message(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle crop parameters message from viewer.\"\"\"\n        assert isinstance(message, CropParamsMessage)\n        self.control_panel.crop_viewport = message.crop_enabled\n        self.control_panel.background_color = message.crop_bg_color\n        center = np.array(message.crop_center)\n        scale = np.array(message.crop_scale)\n        crop_min = center - scale / 2.0\n        crop_max = center + scale / 2.0\n        self.control_panel.crop_min = tuple(crop_min.tolist())  # type: ignore\n        self.control_panel.crop_max = tuple(crop_max.tolist())  # type: ignore\n\n    def _handle_click_message(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle click message from viewer.\"\"\"\n        assert isinstance(message, ClickMessage)\n        for controls in self.viewer_controls:\n            controls.on_click(message)\n\n    def _handle_time_condition_message(self, message: NerfstudioMessage) -> None:\n        \"\"\"Handle time conditioning message from viewer.\"\"\"\n        assert isinstance(message, TimeConditionMessage)\n        self.control_panel.time = message.time\n\n    @property\n    def training_state(self) -> Literal[\"training\", \"paused\", \"completed\"]:\n        \"\"\"Get training state flag.\"\"\"\n        if self.trainer is not None:\n            return self.trainer.training_state\n        return self.train_btn_state\n\n    @training_state.setter\n    def training_state(self, training_state: Literal[\"training\", \"paused\", \"completed\"]) -> None:\n        \"\"\"Set training state flag.\"\"\"\n        if self.trainer is not None:\n            self.trainer.training_state = training_state\n\n    def get_camera(self, image_height: int, image_width: int) -> Optional[Cameras]:\n        \"\"\"\n        Return a Cameras object representing the camera for the viewer given the provided image height and width\n        \"\"\"\n        cam_msg: Optional[CameraMessage] = self.camera_message\n        if cam_msg is None:\n            return None\n        intrinsics_matrix, camera_to_world_h = get_intrinsics_matrix_and_camera_to_world_h(\n            cam_msg, image_height=image_height, image_width=image_width\n        )\n\n        camera_to_world = camera_to_world_h[:3, :]\n        camera_to_world = torch.stack(\n            [\n                camera_to_world[0, :],\n                camera_to_world[2, :],\n                camera_to_world[1, :],\n            ],\n            dim=0,\n        )\n\n        camera_type_msg = cam_msg.camera_type\n        if camera_type_msg == \"perspective\":\n            camera_type = CameraType.PERSPECTIVE\n        elif camera_type_msg == \"fisheye\":\n            camera_type = CameraType.FISHEYE\n        elif camera_type_msg == \"equirectangular\":\n            camera_type = CameraType.EQUIRECTANGULAR\n        else:\n            camera_type = CameraType.PERSPECTIVE\n\n        camera = Cameras(\n            fx=intrinsics_matrix[0, 0],\n            fy=intrinsics_matrix[1, 1],\n            cx=intrinsics_matrix[0, 2],\n            cy=intrinsics_matrix[1, 2],\n            camera_type=camera_type,\n            camera_to_worlds=camera_to_world[None, ...],\n            times=torch.tensor([self.control_panel.time], dtype=torch.float32),\n        )\n        camera = camera.to(self.get_model().device)\n        return camera\n\n    def _pick_drawn_image_idxs(self, total_num: int) -> np.ndarray:\n        \"\"\"Determine indices of images to display in viewer.\n\n        Args:\n            total_num: total number of training images.\n\n        Returns:\n            List of indices from [0, total_num-1].\n        \"\"\"\n        if self.config.max_num_display_images < 0:\n            num_display_images = total_num\n        else:\n            num_display_images = min(self.config.max_num_display_images, total_num)\n        # draw indices, roughly evenly spaced\n        return np.linspace(0, total_num - 1, num_display_images, dtype=np.int32)\n\n    def init_scene(\n        self,\n        train_dataset: InputDataset,\n        train_state: Literal[\"training\", \"paused\", \"completed\"],\n        eval_dataset: Optional[InputDataset] = None,\n    ) -> None:\n        \"\"\"Draw some images and the scene aabb in the viewer.\n\n        Args:\n            dataset: dataset to render in the scene\n            train_state: Current status of training\n        \"\"\"\n        self.viser_server.send_file_path_info(\n            config_base_dir=self.log_filename.parents[0],\n            data_base_dir=self.datapath,\n            export_path_name=self.log_filename.parent.stem,\n        )\n\n        # total num of images\n        num_images = len(train_dataset)\n        if eval_dataset is not None:\n            num_images += len(eval_dataset)\n\n        # draw the training cameras and images\n        image_indices = self._pick_drawn_image_idxs(num_images)\n        for idx in image_indices[image_indices < len(train_dataset)].tolist():\n            image = train_dataset[idx][\"image\"]\n            bgr = image[..., [2, 1, 0]]\n            camera_json = train_dataset.cameras.to_json(camera_idx=idx, image=bgr, max_size=100)\n            self.viser_server.add_dataset_image(idx=f\"{idx:06d}\", json=camera_json)\n\n        # draw the eval cameras and images\n        if eval_dataset is not None:\n            image_indices = image_indices[image_indices >= len(train_dataset)] - len(train_dataset)\n            for idx in image_indices.tolist():\n                image = eval_dataset[idx][\"image\"]\n                bgr = image[..., [2, 1, 0]]\n                # color the eval image borders red\n                # TODO: color the threejs frustum instead of changing the image itself like we are doing here\n                t = int(min(image.shape[:2]) * 0.1)  # border thickness as 10% of min height or width resolution\n                bc = torch.tensor((0, 0, 1.0))\n                bgr[:t, :, :] = bc\n                bgr[-t:, :, :] = bc\n                bgr[:, -t:, :] = bc\n                bgr[:, :t, :] = bc\n\n                camera_json = eval_dataset.cameras.to_json(camera_idx=idx, image=bgr, max_size=100)\n                self.viser_server.add_dataset_image(idx=f\"{idx+len(train_dataset):06d}\", json=camera_json)\n\n        # draw the scene box (i.e., the bounding box)\n        self.viser_server.update_scene_box(train_dataset.scene_box)\n\n        # set the initial state whether to train or not\n        self.train_btn_state = train_state\n        self.viser_server.set_training_state(train_state)\n\n    def update_scene(self, step: int, num_rays_per_batch: Optional[int] = None) -> None:\n        \"\"\"updates the scene based on the graph weights\n\n        Args:\n            step: iteration step of training\n            num_rays_per_batch: number of rays per batch, used during training\n        \"\"\"\n        self.step = step\n\n        if self.camera_message is None:\n            return\n\n        if (\n            self.trainer is not None\n            and self.trainer.training_state == \"training\"\n            and self.control_panel.train_util != 1\n        ):\n            if (\n                EventName.TRAIN_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]\n                and EventName.VIS_RAYS_PER_SEC.value in GLOBAL_BUFFER[\"events\"]\n            ):\n                train_s = GLOBAL_BUFFER[\"events\"][EventName.TRAIN_RAYS_PER_SEC.value][\"avg\"]\n                vis_s = GLOBAL_BUFFER[\"events\"][EventName.VIS_RAYS_PER_SEC.value][\"avg\"]\n                train_util = self.control_panel.train_util\n                vis_n = self.control_panel.max_res**2\n                train_n = num_rays_per_batch\n                train_time = train_n / train_s\n                vis_time = vis_n / vis_s\n\n                render_freq = train_util * vis_time / (train_time - train_util * train_time)\n            else:\n                render_freq = 30\n            if step > self.last_step + render_freq:\n                self.last_step = step\n                self.render_statemachine.action(RenderAction(\"step\", self.camera_message))\n\n    def update_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        if self.output_type_changed:\n            self.control_panel.update_colormap_options(dimensions, dtype)\n            self.output_type_changed = False\n\n    def update_split_colormap_options(self, dimensions: int, dtype: type) -> None:\n        \"\"\"update the colormap options based on the current render\n\n        Args:\n            dimensions: the number of dimensions of the render\n            dtype: the data type of the render\n        \"\"\"\n        if self.output_split_type_changed:\n            self.control_panel.update_split_colormap_options(dimensions, dtype)\n            self.output_split_type_changed = False\n\n    def get_model(self) -> Model:\n        \"\"\"Returns the model.\"\"\"\n        return self.pipeline.model\n\n    def training_complete(self) -> None:\n        \"\"\"Called when training is complete.\"\"\"\n        self.training_state = \"completed\"\n        self.viser_server.set_training_state(\"completed\")\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/server/viewer_utils.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"Code to interface with the `vis/` (the JS viewer).\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nimport socket\nimport sys\nfrom pathlib import Path\nfrom typing import Optional, Tuple\n\nimport torch\n\nfrom nerfstudio.data.scene_box import SceneBox\nfrom nerfstudio.models.base_model import Model\nfrom nerfstudio.utils.io import load_from_json\n\n\ndef get_viewer_version() -> str:\n    \"\"\"Return the version of the viewer.\"\"\"\n    json_filename = os.path.join(os.path.dirname(__file__), \"../app/package.json\")\n    version = load_from_json(Path(json_filename))[\"version\"]\n    return version\n\n\ndef get_viewer_url(websocket_port: int) -> str:\n    \"\"\"Generate URL for the viewer.\n\n    Args:\n        websocket_port: port to connect to the viewer\n    Returns:\n        URL to the viewer\n    \"\"\"\n    version = get_viewer_version()\n    websocket_url = f\"ws://localhost:{websocket_port}\"\n    return f\"https://viewer.nerf.studio/versions/{version}/?websocket_url={websocket_url}\"\n\n\nclass IOChangeException(Exception):\n    \"\"\"Basic camera exception to interrupt viewer\"\"\"\n\n\nclass SetTrace:\n    \"\"\"Basic trace function\"\"\"\n\n    def __init__(self, func):\n        self.func = func\n\n    def __enter__(self):\n        sys.settrace(self.func)\n        return self\n\n    def __exit__(self, ext_type, exc_value, traceback):\n        sys.settrace(None)\n\n\ndef is_port_open(port: int):\n    \"\"\"Returns True if the port is open.\n\n    Args:\n        port: Port to check.\n\n    Returns:\n        True if the port is open, False otherwise.\n    \"\"\"\n    try:\n        sock = socket.socket()\n        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n        _ = sock.bind((\"\", port))\n        sock.close()\n        return True\n    except OSError:\n        return False\n\n\ndef get_free_port(default_port: Optional[int] = None):\n    \"\"\"Returns a free port on the local machine. Try to use default_port if possible.\n\n    Args:\n        default_port: Port to try to use.\n\n    Returns:\n        A free port on the local machine.\n    \"\"\"\n    if default_port is not None:\n        if is_port_open(default_port):\n            return default_port\n    sock = socket.socket()\n    sock.bind((\"\", 0))\n    port = sock.getsockname()[1]\n    return port\n\n\ndef update_render_aabb(\n    crop_viewport: bool, crop_min: Tuple[float, float, float], crop_max: Tuple[float, float, float], model: Model\n):\n    \"\"\"\n    update the render aabb box for the viewer:\n\n    Args:\n        crop_viewport: whether to crop the viewport\n        crop_min: min of the crop box\n        crop_max: max of the crop box\n        model: the model to render\n    \"\"\"\n\n    if crop_viewport:\n        crop_min_tensor = torch.tensor(crop_min, dtype=torch.float32)\n        crop_max_tensor = torch.tensor(crop_max, dtype=torch.float32)\n\n        if isinstance(model.render_aabb, SceneBox):\n            model.render_aabb.aabb[0] = crop_min_tensor\n            model.render_aabb.aabb[1] = crop_max_tensor\n        else:\n            model.render_aabb = SceneBox(aabb=torch.stack([crop_min_tensor, crop_max_tensor], dim=0))\n    else:\n        model.render_aabb = None\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/viser/__init__.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Viser is used for the nerfstudio viewer backend\"\"\"\n\nfrom .message_api import GuiHandle as GuiHandle, GuiSelectHandle as GuiSelectHandle\nfrom .messages import NerfstudioMessage as NerfstudioMessage\nfrom .server import ViserServer as ViserServer\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/viser/gui.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n\"\"\"Manages GUI communication.\n\nShould be almost identical to: https://github.com/brentyi/viser/blob/main/viser/_gui.py\n\"\"\"\n\nfrom __future__ import annotations\n\nimport dataclasses\nimport time\nfrom typing import TYPE_CHECKING, Any, Callable, Dict, Generic, List, Optional, Type, TypeVar, Union\n\nimport numpy as onp\nfrom viser.infra import ClientId\n\nfrom .messages import GuiRemoveMessage, GuiSetHiddenMessage, GuiSetLevaConfMessage, GuiSetValueMessage\n\nif TYPE_CHECKING:\n    from .message_api import MessageApi\n\n\nT = TypeVar(\"T\")\n\n\n@dataclasses.dataclass\nclass _GuiHandleState(Generic[T]):\n    \"\"\"Internal API for GUI elements.\"\"\"\n\n    name: str\n    typ: Type[T]\n    api: MessageApi\n    value: T\n    last_updated: float\n\n    folder_labels: List[str]\n    \"\"\"Name of the folders this GUI input was placed into.\"\"\"\n\n    update_cb: List[Callable[[GuiHandle[T]], None]]\n    \"\"\"Registered functions to call when this input is updated.\"\"\"\n\n    leva_conf: Dict[str, Any]\n    \"\"\"Input config for Leva.\"\"\"\n\n    is_button: bool\n    \"\"\"Indicates a button element, which requires special handling.\"\"\"\n\n    sync_cb: Optional[Callable[[ClientId, T], None]] = None\n    \"\"\"Callback for synchronizing inputs across clients.\"\"\"\n\n    cleanup_cb: Optional[Callable[[], Any]] = None\n    \"\"\"Function to call when GUI element is removed.\"\"\"\n\n    # Encoder: run on outgoing message values.\n    # Decoder: run on incoming message values.\n    #\n    # This helps us handle cases where types used by Leva don't match what we want to\n    # expose as a Python API.\n    #\n    # noqa because ruff --fix currently breaks these lines.\n    encoder: Callable[[T], Any] = lambda x: x  # noqa\n    decoder: Callable[[Any], T] = lambda x: x  # noqa\n\n\n@dataclasses.dataclass(frozen=True)\nclass GuiHandle(Generic[T]):\n    \"\"\"Handle for a particular GUI input in our visualizer.\n\n    Lets us get values, set values, and detect updates.\"\"\"\n\n    # Let's shove private implementation details in here...\n    _impl: _GuiHandleState[T]\n\n    def on_update(self, func: Callable[[GuiHandle[T]], None]) -> Callable[[GuiHandle[T]], None]:\n        \"\"\"Attach a function to call when a GUI input is updated. Happens in a thread.\n\n        Callbacks are passed the originating GUI handle, which can be useful in loops.\n        \"\"\"\n        self._impl.update_cb.append(func)\n        return func\n\n    def get_value(self) -> T:\n        \"\"\"Get the value of the GUI input.\"\"\"\n        return self._impl.value\n\n    def get_update_timestamp(self) -> float:\n        \"\"\"Get the last time that this input was updated.\"\"\"\n        return self._impl.last_updated\n\n    def set_value(self, value: Union[T, onp.ndarray]) -> GuiHandle[T]:\n        \"\"\"Set the value of the GUI input.\"\"\"\n        if isinstance(value, onp.ndarray):\n            assert len(value.shape) <= 1, f\"{value.shape} should be at most 1D!\"\n            value = tuple(map(float, value))  # type: ignore\n\n        # Send to client, except for buttons.\n        if not self._impl.is_button:\n            self._impl.api._queue(GuiSetValueMessage(self._impl.name, self._impl.encoder(value)))  # type: ignore\n\n        # Set internal state. We automatically convert numpy arrays to the expected\n        # internal type. (eg 1D arrays to tuples)\n        self._impl.value = type(self._impl.value)(value)  # type: ignore\n        self._impl.last_updated = time.time()\n\n        # Call update callbacks.\n        for cb in self._impl.update_cb:\n            cb(self)\n\n        return self\n\n    def set_disabled(self, disabled: bool) -> GuiHandle[T]:\n        \"\"\"Allow/disallow user interaction with the input.\"\"\"\n        if self._impl.is_button:\n            self._impl.leva_conf[\"settings\"][\"disabled\"] = disabled\n            self._impl.api._queue(\n                GuiSetLevaConfMessage(self._impl.name, self._impl.leva_conf),\n            )\n        else:\n            self._impl.leva_conf[\"disabled\"] = disabled\n            self._impl.api._queue(\n                GuiSetLevaConfMessage(self._impl.name, self._impl.leva_conf),\n            )\n\n        return self\n\n    def set_hidden(self, hidden: bool) -> GuiHandle[T]:\n        \"\"\"Temporarily hide this GUI element from the visualizer.\"\"\"\n        self._impl.api._queue(GuiSetHiddenMessage(self._impl.name, hidden=hidden))\n        return self\n\n    def remove(self) -> None:\n        \"\"\"Permanently remove this GUI element from the visualizer.\"\"\"\n        self._impl.api._queue(GuiRemoveMessage(self._impl.name))\n        assert self._impl.cleanup_cb is not None\n        self._impl.cleanup_cb()\n\n\nTString = TypeVar(\"TString\", bound=str)\n\n\n@dataclasses.dataclass(frozen=True)\nclass GuiSelectHandle(GuiHandle[TString], Generic[TString]):\n    \"\"\"Handle for a particular drop-down input in our visualizer.\n\n    Lets us get values, set values, and detect updates.\"\"\"\n\n    def set_options(self, options: List[TString]) -> None:\n        \"\"\"Assign a new set of options for the dropdown menu.\n\n        For projects that care about typing: the static type of `options` should be\n        consistent with the `StringType` associated with a handle. Literal types will be\n        inferred where possible when handles are instantiated; for the most flexibility,\n        we can declare handles as `GuiHandle[str]`.\n        \"\"\"\n\n        # Make sure initial value is in options.\n        self._impl.leva_conf[\"options\"] = options\n        if self._impl.leva_conf[\"value\"] not in options:\n            self._impl.leva_conf[\"value\"] = options[0]\n\n        # Update options.\n        self._impl.api._queue(\n            GuiSetLevaConfMessage(self._impl.name, self._impl.leva_conf),\n        )\n\n        # Make sure current value is in options.\n        if self.get_value() not in options:\n            self.set_value(options[0])\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/viser/message_api.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"This module contains the MessageApi class, which is the interface for sending messages to the Viewer\"\"\"\n\nfrom __future__ import annotations\n\nimport abc\nimport base64\nimport contextlib\nimport io\nimport time\nfrom pathlib import Path\nfrom typing import (\n    TYPE_CHECKING,\n    Any,\n    Callable,\n    Dict,\n    Generator,\n    List,\n    Literal,\n    Optional,\n    Tuple,\n    TypeVar,\n    cast,\n    overload,\n)\n\nimport imageio.v3 as iio\nimport numpy as onp\nimport numpy.typing as onpt\nfrom typing_extensions import LiteralString, ParamSpec, assert_never\n\nfrom nerfstudio.data.scene_box import SceneBox\n\nfrom . import messages\nfrom .gui import GuiHandle, GuiSelectHandle, _GuiHandleState\n\nif TYPE_CHECKING:\n    from viser.infra import ClientId\n\n\nP = ParamSpec(\"P\")\n\n\ndef _colors_to_uint8(colors: onp.ndarray) -> onpt.NDArray[onp.uint8]:\n    \"\"\"Convert intensity values to uint8. We assume the range [0,1] for floats, and\n    [0,255] for integers.\"\"\"\n    if colors.dtype != onp.uint8:\n        if onp.issubdtype(colors.dtype, onp.floating):\n            colors = onp.clip(colors * 255.0, 0, 255).astype(onp.uint8)\n        if onp.issubdtype(colors.dtype, onp.integer):\n            colors = onp.clip(colors, 0, 255).astype(onp.uint8)\n    return colors\n\n\ndef _encode_image_base64(\n    image: onp.ndarray,\n    file_format: Literal[\"png\", \"jpeg\"],\n    quality: Optional[int] = None,\n) -> Tuple[Literal[\"image/png\", \"image/jpeg\"], str]:\n    \"\"\"Encode an image as a base64 string.\n\n    Args:\n        image: The image to encode.\n        file_format: The format to encode the image as.\n        quality: The quality to encode the image as. Only used for JPEG.\n\n    Returns:\n        A tuple of the media type and the base64-encoded image.\n    \"\"\"\n\n    media_type: Literal[\"image/png\", \"image/jpeg\"]\n    image = _colors_to_uint8(image)\n    with io.BytesIO() as data_buffer:\n        if file_format == \"png\":\n            media_type = \"image/png\"\n            iio.imwrite(data_buffer, image, extension=\".png\")\n        elif file_format == \"jpeg\":\n            media_type = \"image/jpeg\"\n            iio.imwrite(\n                data_buffer,\n                image[..., :3],  # Strip alpha.\n                extension=\".jpeg\",\n                quality=75 if quality is None else quality,\n            )\n        else:\n            assert_never(file_format)\n\n        base64_data = base64.b64encode(data_buffer.getvalue()).decode(\"ascii\")\n\n    return media_type, base64_data\n\n\nTVector = TypeVar(\"TVector\", bound=tuple)\n\n\ndef _cast_vector(vector: TVector | onp.ndarray, length: int) -> TVector:\n    if isinstance(vector, tuple):\n        assert len(vector) == length\n        return cast(TVector, vector)\n    assert cast(onp.ndarray, vector).shape == (length,)\n    return cast(TVector, tuple(map(float, vector)))\n\n\nT = TypeVar(\"T\")\nIntOrFloat = TypeVar(\"IntOrFloat\", int, float)\nTLiteralString = TypeVar(\"TLiteralString\", bound=LiteralString)\n\n\nclass MessageApi(abc.ABC):\n    \"\"\"Interface for all commands we can use to send messages over a websocket connection.\n\n    Should be implemented by both our global server object (for broadcasting) and by\n    individual clients.\"\"\"\n\n    def __init__(self) -> None:\n        self._handle_state_from_gui_name: Dict[str, _GuiHandleState[Any]] = {}\n        self._gui_folder_labels: List[str] = []\n\n    @abc.abstractmethod\n    def _queue(self, message: messages.NerfstudioMessage) -> None:\n        \"\"\"Abstract method for sending messages.\"\"\"\n        ...\n\n    @contextlib.contextmanager\n    def gui_folder(self, label: str) -> Generator[None, None, None]:\n        \"\"\"Context for placing all GUI elements into a particular folder.\n\n        We currently only support one folder level.\n\n        Args:\n            label: The label for the folder.\n        \"\"\"\n        self._gui_folder_labels.append(label)\n        yield\n        assert self._gui_folder_labels.pop() == label\n\n    def add_gui_button(self, name: str) -> GuiHandle[bool]:\n        \"\"\"Add a button to the GUI. The value of this input is set to `True` every time\n        it is clicked; to detect clicks, we can manually set it back to `False`.\n\n        Currently, all button names need to be unique.\n\n        Args:\n            name: The name of the gui element.\n        \"\"\"\n        return self._add_gui_impl(\n            name,\n            initial_value=False,\n            leva_conf={\"type\": \"BUTTON\", \"settings\": {}},\n            is_button=True,\n        )\n\n    def add_gui_checkbox(self, name: str, initial_value: bool, hint: Optional[str] = None) -> GuiHandle[bool]:\n        \"\"\"Add a checkbox to the GUI.\n\n        Args:\n            name: The name of the checkbox.\n            initial_value: The initial value of the checkbox.\n            hint: A hint for the checkbox.\n        \"\"\"\n        assert isinstance(initial_value, bool)\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\"value\": initial_value, \"label\": name},\n            hint=hint,\n        )\n\n    def add_gui_text(self, name: str, initial_value: str, hint: Optional[str] = None) -> GuiHandle[str]:\n        \"\"\"Add a text input to the GUI.\n\n        Args:\n            name: The name of the text input.\n            initial_value: The initial value of the text input.\n            hint: A hint for the text input.\n        \"\"\"\n        assert isinstance(initial_value, str)\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\"value\": initial_value, \"label\": name},\n            hint=hint,\n        )\n\n    def add_gui_number(self, name: str, initial_value: IntOrFloat, hint: Optional[str] = None) -> GuiHandle[IntOrFloat]:\n        \"\"\"Add a number input to the GUI.\n\n        Args:\n            name: The name of the number.\n            initial_value: The initial value of the number.\n            hint: A hint for the number.\n        \"\"\"\n        assert isinstance(initial_value, (int, float))\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\"value\": initial_value, \"label\": name},\n            hint=hint,\n        )\n\n    def add_gui_vector2(\n        self,\n        name: str,\n        initial_value: Tuple[float, float] | onp.ndarray,\n        step: Optional[float] = None,\n        hint: Optional[str] = None,\n    ) -> GuiHandle[Tuple[float, float]]:\n        \"\"\"Add a length-2 vector input to the GUI.\n\n        Args:\n            name: The name of the vector.\n            initial_value: The initial value of the vector.\n            step: The step size for the vector.\n            hint: A hint for the vector.\n        \"\"\"\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            _cast_vector(initial_value, length=2),\n            leva_conf={\n                \"value\": initial_value,\n                \"label\": name,\n                \"step\": step,\n            },\n            hint=hint,\n        )\n\n    def add_gui_vector3(\n        self,\n        name: str,\n        initial_value: Tuple[float, float, float] | onp.ndarray,\n        step: Optional[float] = None,\n        lock: bool = False,\n        hint: Optional[str] = None,\n    ) -> GuiHandle[Tuple[float, float, float]]:\n        \"\"\"Add a length-3 vector input to the GUI.\n\n        Args:\n            name: The name of the vector.\n            initial_value: The initial value of the vector.\n            step: The step size for the vector.\n            lock: Whether the vector is locked.\n        \"\"\"\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            _cast_vector(initial_value, length=3),\n            leva_conf={\n                \"label\": name,\n                \"value\": initial_value,\n                \"step\": step,\n                \"lock\": lock,\n            },\n            hint=hint,\n        )\n\n    # Resolve type of value to a Literal whenever possible.\n    @overload\n    def add_gui_select(\n        self,\n        name: str,\n        options: List[TLiteralString],\n        initial_value: Optional[TLiteralString] = None,\n        hint: Optional[str] = None,\n    ) -> GuiSelectHandle[TLiteralString]: ...\n\n    @overload\n    def add_gui_select(\n        self,\n        name: str,\n        options: List[str],\n        initial_value: Optional[str] = None,\n        hint: Optional[str] = None,\n    ) -> GuiSelectHandle[str]: ...\n\n    def add_gui_select(\n        self,\n        name: str,\n        options: List[TLiteralString] | List[str],\n        initial_value: Optional[TLiteralString | str] = None,\n        hint: Optional[str] = None,\n    ) -> GuiSelectHandle[TLiteralString] | GuiSelectHandle[str]:\n        \"\"\"Add a dropdown to the GUI.\n\n        Args:\n            name: The name of the dropdown.\n            options: The options to choose from.\n            initial_value: The initial value of the dropdown.\n            hint: A hint for the dropdown.\n        \"\"\"\n        assert len(options) > 0\n        if initial_value is None:\n            initial_value = options[0]\n        return GuiSelectHandle(\n            self._add_gui_impl(\n                \"/\".join(self._gui_folder_labels + [name]),\n                initial_value,\n                leva_conf={\n                    \"value\": initial_value,\n                    \"label\": name,\n                    \"options\": options,\n                },\n                hint=hint,\n            )._impl\n        )\n\n    # Resolve type of value to a Literal whenever possible.\n    @overload\n    def add_gui_button_group(\n        self,\n        name: str,\n        options: List[TLiteralString],\n        initial_value: Optional[TLiteralString] = None,\n    ) -> GuiHandle[TLiteralString]: ...\n\n    @overload\n    def add_gui_button_group(\n        self,\n        name: str,\n        options: List[str],\n        initial_value: Optional[str] = None,\n    ) -> GuiHandle[str]: ...\n\n    def add_gui_button_group(\n        self,\n        name: str,\n        options: List[TLiteralString] | List[str],\n        initial_value: Optional[TLiteralString | str] = None,\n    ) -> GuiHandle[TLiteralString] | GuiHandle[str]:\n        \"\"\"Add a button group to the GUI.\n\n        Args:\n            name: The name of the button group.\n            options: The options to choose from.\n            initial_value: The initial value of the button group.\n        \"\"\"\n        assert len(options) > 0\n        if initial_value is None:\n            initial_value = options[0]\n        return self._add_gui_impl(\n            name,\n            initial_value,\n            leva_conf={\"type\": \"BUTTON_GROUP\", \"label\": name, \"options\": options},\n            is_button=True,\n        )\n\n    def add_gui_slider(\n        self,\n        name: str,\n        low: IntOrFloat,\n        high: IntOrFloat,\n        step: Optional[IntOrFloat],\n        initial_value: IntOrFloat,\n        hint: Optional[str] = None,\n    ) -> GuiHandle[IntOrFloat]:\n        \"\"\"Add a slider to the GUI.\n\n        Args:\n            name: The name of the slider.\n            low: The minimum value of the slider.\n            high: The maximum value of the slider.\n            step: The step size of the slider.\n            initial_value: The initial value of the slider.\n            hint: A hint for the slider.\n        \"\"\"\n        assert high >= low\n        if step is not None:\n            assert step <= (high - low)\n        assert high >= initial_value >= low\n\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\n                \"value\": initial_value,\n                \"label\": name,\n                \"min\": low,\n                \"max\": high,\n                \"step\": step,\n            },\n            hint=hint,\n        )\n\n    def add_gui_rgb(\n        self,\n        name: str,\n        initial_value: Tuple[int, int, int],\n        hint: Optional[str] = None,\n    ) -> GuiHandle[Tuple[int, int, int]]:\n        \"\"\"Add an RGB picker to the GUI.\n\n        Args:\n            name: The name of the color picker.\n            initial_value: The initial value of the color picker.\n            hint: A hint for color picker.\n        \"\"\"\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\n                \"value\": {\n                    \"r\": initial_value[0],\n                    \"g\": initial_value[1],\n                    \"b\": initial_value[2],\n                },\n                \"label\": name,\n            },\n            encoder=lambda rgb: dict(zip(\"rgb\", rgb)),\n            decoder=lambda rgb_dict: (rgb_dict[\"r\"], rgb_dict[\"g\"], rgb_dict[\"b\"]),\n            hint=hint,\n        )\n\n    def add_gui_rgba(\n        self,\n        name: str,\n        initial_value: Tuple[int, int, int, int],\n        hint: Optional[str] = None,\n    ) -> GuiHandle[Tuple[int, int, int, int]]:\n        \"\"\"Add an RGBA picker to the GUI.\n\n        Args:\n            name: The name of the color picker.\n            initial_value: The initial value of the color picker.\n            hint: A hint for color picker.\n        \"\"\"\n        return self._add_gui_impl(\n            \"/\".join(self._gui_folder_labels + [name]),\n            initial_value,\n            leva_conf={\n                \"value\": {\n                    \"r\": initial_value[0],\n                    \"g\": initial_value[1],\n                    \"b\": initial_value[2],\n                    \"a\": initial_value[3],\n                },\n                \"label\": name,\n            },\n            encoder=lambda rgba: dict(zip(\"rgba\", rgba)),\n            decoder=lambda rgba_dict: (\n                rgba_dict[\"r\"],\n                rgba_dict[\"g\"],\n                rgba_dict[\"b\"],\n                rgba_dict[\"a\"],\n            ),\n            hint=hint,\n        )\n\n    def set_background_image(\n        self,\n        image: onp.ndarray,\n        file_format: Literal[\"png\", \"jpeg\"] = \"jpeg\",\n        quality: Optional[int] = None,\n    ) -> None:\n        \"\"\"Set the background image of the scene.\n\n        Args:\n            image: The image to set as the background. Must be a 3D numpy array of shape (H, W, 3).\n            file_format: The file format to use for the image.\n            quality: The quality of the image, if using jpeg. Must be an integer between 0 and 100.\n        \"\"\"\n        media_type, base64_data = _encode_image_base64(image, file_format, quality=quality)\n        self._queue(messages.BackgroundImageMessage(media_type=media_type, base64_data=base64_data))\n\n    def send_file_path_info(self, config_base_dir: Path, data_base_dir: Path, export_path_name: str) -> None:\n        \"\"\"Send file path info to the scene.\n\n        Args:\n            config_base_dir: The base directory for config files.\n            data_base_dir: The base directory for data files.\n            export_path_name: The name for the export folder.\n        \"\"\"\n        self._queue(\n            messages.FilePathInfoMessage(\n                config_base_dir=str(config_base_dir),\n                data_base_dir=str(data_base_dir),\n                export_path_name=export_path_name,\n            )\n        )\n\n    def update_scene_box(self, scene_box: SceneBox) -> None:\n        \"\"\"Update the scene box.\n\n        Args:\n            scene_box: The scene box.\n        \"\"\"\n        self._queue(\n            messages.SceneBoxMessage(\n                min=tuple(scene_box.aabb[0].tolist()),  # type: ignore\n                max=tuple(scene_box.aabb[1].tolist()),  # type: ignore\n            )\n        )\n\n    def add_dataset_image(self, idx: str, json: Dict) -> None:\n        \"\"\"Add a dataset image to the scene.\n\n        Args:\n            idx: The index of the image.\n            json: The json dict from the camera frustum and image.\n        \"\"\"\n        self._queue(messages.DatasetImageMessage(idx=idx, json=json))\n\n    def set_training_state(self, training_state: Literal[\"training\", \"paused\", \"completed\"]) -> None:\n        \"\"\"Set the training mode.\n\n        Args:\n            training_state: The training mode.\n        \"\"\"\n        self._queue(messages.TrainingStateMessage(training_state=training_state))\n\n    def set_camera(\n        self,\n        position: Optional[Tuple[float, float, float]] = None,\n        look_at: Optional[Tuple[float, float, float]] = None,\n        fov: Optional[int] = None,\n        instant: bool = False,\n    ) -> None:\n        \"\"\"Update the camera object in the viewer. If any of the arguments are None, the corresponding value will not\n        be set in the viewer. For example, setting position only will maintain the same look-at point while moving\n        the origin of the camera\n\n        Args:\n            position: The position in world coordinates of the camera\n            look_at: The position in world coordinates of the new look at point\n            fov: The new field of view\n            instant: Whether to move the camera instantly or animate\n        \"\"\"\n        self._queue(messages.SetCameraMessage(look_at=look_at, position=position, fov=fov, instant=instant))\n\n    def send_camera_paths(self, camera_paths: Dict[str, Any]) -> None:\n        \"\"\"Send camera paths to the scene.\n\n        Args:\n            camera_paths: A dictionary of camera paths.\n        \"\"\"\n        self._queue(messages.CameraPathsMessage(payload=camera_paths))\n\n    def send_crop_params(\n        self,\n        crop_enabled: bool,\n        crop_bg_color: Tuple[int, int, int],\n        crop_center: Tuple[float, float, float],\n        crop_scale: Tuple[float, float, float],\n    ) -> None:\n        \"\"\"Send crop parameters to the scene.\n\n        Args:\n            crop_enabled: Whether crop is enabled.\n            crop_bg_color: The background color of the crop.\n            crop_center: The center of the crop.\n            crop_scale: The scale of the crop.\n        \"\"\"\n        self._queue(\n            messages.CropParamsMessage(\n                crop_enabled=crop_enabled, crop_bg_color=crop_bg_color, crop_center=crop_center, crop_scale=crop_scale\n            )\n        )\n\n    def send_status_message(self, eval_res: str, step: int):\n        \"\"\"Send status message\n\n        Args:\n            eval_res: The resolution of the render in plain text.\n            step: The current step.\n        \"\"\"\n        self._queue(messages.StatusMessage(eval_res=eval_res, step=step))\n\n    def send_output_options_message(self, options: List[str]):\n        \"\"\"Send output options message\n\n        Args:\n            options: The list of output options\n        \"\"\"\n        self._queue(messages.OutputOptionsMessage(options=options))\n\n    def _add_gui_impl(\n        self,\n        name: str,\n        initial_value: T,\n        leva_conf: dict,\n        is_button: bool = False,\n        encoder: Callable[[T], Any] = lambda x: x,\n        decoder: Callable[[Any], T] = lambda x: x,\n        hint: Optional[str] = None,\n    ) -> GuiHandle[T]:\n        \"\"\"Private helper for adding a simple GUI element.\"\"\"\n\n        if hint is not None:\n            assert not is_button\n            leva_conf[\"hint\"] = hint\n\n        handle_state = _GuiHandleState(\n            name,\n            typ=type(initial_value),\n            api=self,\n            value=initial_value,\n            last_updated=time.time(),\n            folder_labels=self._gui_folder_labels,\n            update_cb=[],\n            leva_conf=leva_conf,\n            is_button=is_button,\n            encoder=encoder,\n            decoder=decoder,\n        )\n        self._handle_state_from_gui_name[name] = handle_state\n        handle_state.cleanup_cb = lambda: self._handle_state_from_gui_name.pop(name)\n\n        # For broadcasted GUI handles, we should synchronize all clients.\n        # This will be a no-op for client handles.\n        if not is_button:\n\n            def sync_other_clients(client_id: ClientId, value: Any) -> None:\n                message = messages.GuiSetValueMessage(name=name, value=handle_state.encoder(value))\n                message.excluded_self_client = client_id\n                self._queue(message)\n\n            handle_state.sync_cb = sync_other_clients\n\n        self._queue(\n            messages.GuiAddMessage(\n                name=name,\n                folder_labels=tuple(self._gui_folder_labels),\n                leva_conf=leva_conf,\n            )\n        )\n        return GuiHandle(handle_state)\n\n    def use_time_conditioning(self) -> None:\n        \"\"\"Use time conditioning.\"\"\"\n        self._queue(messages.UseTimeConditioningMessage())\n\n    def _handle_gui_updates(\n        self: MessageApi,\n        client_id: ClientId,\n        message: messages.GuiUpdateMessage,\n    ) -> None:\n        handle_state = self._handle_state_from_gui_name.get(message.name, None)\n        if handle_state is None:\n            return\n\n        value = handle_state.typ(handle_state.decoder(message.value))\n\n        # Only call update when value has actually changed.\n        if not handle_state.is_button and value == handle_state.value:\n            return\n\n        # Update state.\n        handle_state.value = value\n        handle_state.last_updated = time.time()\n\n        # Trigger callbacks.\n        for cb in handle_state.update_cb:\n            cb(GuiHandle(handle_state))\n        if handle_state.sync_cb is not None:\n            handle_state.sync_cb(client_id, value)\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/viser/messages.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Message type definitions. For synchronization with the TypeScript definitions, see\n`_typescript_interface_gen.py.`\"\"\"\n\nfrom __future__ import annotations\n\nimport dataclasses\nfrom typing import Any, Literal, Optional, Tuple\n\nimport viser.infra\nfrom typing_extensions import override\n\n\nclass NerfstudioMessage(viser.infra.Message):\n    \"\"\"Base message type for controlling our viewer.\"\"\"\n\n    @override\n    def redundancy_key(self) -> str:\n        return type(self).__name__\n\n\n@dataclasses.dataclass\nclass BackgroundImageMessage(NerfstudioMessage):\n    \"\"\"Message for rendering a background image.\"\"\"\n\n    media_type: Literal[\"image/jpeg\", \"image/png\"]\n    base64_data: str\n\n\n@dataclasses.dataclass\nclass GuiAddMessage(NerfstudioMessage):\n    \"\"\"Sent server->client to add a new GUI input.\"\"\"\n\n    name: str\n    folder_labels: Tuple[str, ...]\n    leva_conf: Any\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass GuiRemoveMessage(NerfstudioMessage):\n    \"\"\"Sent server->client to add a new GUI input.\"\"\"\n\n    name: str\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass GuiUpdateMessage(NerfstudioMessage):\n    \"\"\"Sent client->server when a GUI input is changed.\"\"\"\n\n    name: str\n    value: Any\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass GuiSetHiddenMessage(NerfstudioMessage):\n    \"\"\"Sent client->server when a GUI input is changed.\"\"\"\n\n    name: str\n    hidden: bool\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass GuiSetValueMessage(NerfstudioMessage):\n    \"\"\"Sent server->client to set the value of a particular input.\"\"\"\n\n    name: str\n    value: Any\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass GuiSetLevaConfMessage(NerfstudioMessage):\n    \"\"\"Sent server->client to override some part of an input's Leva config.\"\"\"\n\n    name: str\n    leva_conf: Any\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.name}\"\n\n\n@dataclasses.dataclass\nclass FilePathInfoMessage(NerfstudioMessage):\n    \"\"\"Experiment file path info\"\"\"\n\n    config_base_dir: str\n    \"\"\" Base directory for config files \"\"\"\n    data_base_dir: str\n    \"\"\" Base directory for data files \"\"\"\n    export_path_name: str\n    \"\"\" Name of the export folder \"\"\"\n\n\n@dataclasses.dataclass\nclass SetCameraMessage(NerfstudioMessage):\n    \"\"\"Set the current camera.\"\"\"\n\n    fov: Optional[float]\n    \"\"\" Field of view of the camera \"\"\"\n    look_at: Optional[Tuple[float, float, float]]\n    \"\"\"Point in 3D the camera is looking at\"\"\"\n    position: Optional[Tuple[float, float, float]]\n    \"\"\" Position of the camera\"\"\"\n    instant: bool = False\n    \"\"\" Whether to move the camera instantly or animate it\"\"\"\n\n\n@dataclasses.dataclass\nclass CameraMessage(NerfstudioMessage):\n    \"\"\"Render camera data.\"\"\"\n\n    aspect: float\n    \"\"\" Aspect ratio of the camera \"\"\"\n    render_aspect: float\n    \"\"\" Aspect ratio of the render window \"\"\"\n    fov: float\n    \"\"\" Field of view of the camera \"\"\"\n    matrix: Tuple[\n        float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float\n    ]\n    \"\"\" Camera matrix \"\"\"\n    camera_type: Literal[\"perspective\", \"fisheye\", \"equirectangular\"]\n    \"\"\" Camera type \"\"\"\n    is_moving: bool\n    \"\"\" True if the camera is moving, False otherwise \"\"\"\n    timestamp: int\n    \"\"\"JSON computed by the camera class\"\"\"\n\n\n@dataclasses.dataclass\nclass SceneBoxMessage(NerfstudioMessage):\n    \"\"\"Scene Box data.\"\"\"\n\n    min: Tuple[float, float, float]\n    \"\"\" Minimum coordinates of the scene box \"\"\"\n    max: Tuple[float, float, float]\n    \"\"\" Maximum coordinates of the scene box \"\"\"\n\n\n@dataclasses.dataclass\nclass DatasetImageMessage(NerfstudioMessage):\n    \"\"\"Message for rendering a dataset image frustum.\"\"\"\n\n    idx: str\n    \"\"\"Index of the image in the threejs scene\"\"\"\n    json: Any\n    \"\"\"JSON computed by the camera class\"\"\"\n\n    @override\n    def redundancy_key(self) -> str:\n        return f\"{type(self).__name__}_{self.idx}\"\n\n\n@dataclasses.dataclass\nclass TrainingStateMessage(NerfstudioMessage):\n    \"\"\"Whether the scene is in training mode or not.\"\"\"\n\n    training_state: Literal[\"training\", \"paused\", \"completed\"]\n    \"\"\"True if the model is currently training, False otherwise\"\"\"\n\n\n@dataclasses.dataclass\nclass CameraPathPayloadMessage(NerfstudioMessage):\n    \"\"\"Camera path\"\"\"\n\n    camera_path_filename: str\n    \"\"\" Camera path filename \"\"\"\n    camera_path: Any\n    \"\"\" Camera path data \"\"\"\n\n\n@dataclasses.dataclass\nclass CameraPathOptionsRequest(NerfstudioMessage):\n    \"\"\"Request list of existing camera paths\"\"\"\n\n\n@dataclasses.dataclass\nclass CameraPathsMessage(NerfstudioMessage):\n    \"\"\"Dictionary of camera paths\"\"\"\n\n    payload: Any\n    \"\"\" Dictionary of camera paths \"\"\"\n\n\n@dataclasses.dataclass\nclass CropParamsMessage(NerfstudioMessage):\n    \"\"\"Crop parameters\"\"\"\n\n    crop_enabled: bool\n    \"\"\" Crop parameters \"\"\"\n    crop_bg_color: Tuple[int, int, int]\n    \"\"\" Crop background color, range 0-255 \"\"\"\n    crop_center: Tuple[float, float, float]\n    \"\"\" Center of the crop box \"\"\"\n    crop_scale: Tuple[float, float, float]\n    \"\"\" Scale of the crop box \"\"\"\n\n\n@dataclasses.dataclass\nclass StatusMessage(NerfstudioMessage):\n    \"\"\"Status message.\"\"\"\n\n    eval_res: str\n    \"\"\" Resolution of the viewer display in plain text \"\"\"\n    step: int\n    \"\"\" Current step \"\"\"\n\n\n@dataclasses.dataclass\nclass SaveCheckpointMessage(NerfstudioMessage):\n    \"\"\"Save checkpoint message.\"\"\"\n\n\n@dataclasses.dataclass\nclass UseTimeConditioningMessage(NerfstudioMessage):\n    \"\"\"Use time conditioning message.\"\"\"\n\n\n@dataclasses.dataclass\nclass TimeConditionMessage(NerfstudioMessage):\n    \"\"\"Time conditioning message.\"\"\"\n\n    time: float\n    \"\"\" Time conditioning value \"\"\"\n\n\n@dataclasses.dataclass\nclass ClickMessage(NerfstudioMessage):\n    \"\"\"Click message.\"\"\"\n\n    origin: Tuple[float, float, float]\n    \"\"\"The origin of the click in world coords (center of camera)\"\"\"\n    direction: Tuple[float, float, float]\n    \"\"\"The direction of the click if projected through the clicked pixel (world coords)\"\"\"\n\n\n@dataclasses.dataclass\nclass OutputOptionsMessage(NerfstudioMessage):\n    \"\"\"Output options message which are used in the export panel.\n    TODO: remove when export panel is becomes python defined.\n    \"\"\"\n\n    options: Any\n    \"\"\" List of output option strings\"\"\"\n"
  },
  {
    "path": "third_party/nerfstudio/nerfstudio/viewer_legacy/viser/server.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Core Viser Server\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Callable, Type\n\nfrom typing_extensions import override\nfrom viser.infra import WebsockServer\n\nfrom .message_api import MessageApi\nfrom .messages import GuiUpdateMessage, NerfstudioMessage\n\n\nclass ViserServer(MessageApi):\n    \"\"\"Core visualization server. Communicates asynchronously with client applications\n    via websocket connections.\n\n    By default, all messages (eg `server.add_frame()`) are broadcasted to all connected\n    clients.\n\n    To send messages to an individual client, we can grab a client ID -> handle mapping\n    via `server.get_clients()`, and then call `client.add_frame()` on the handle.\n    \"\"\"\n\n    def __init__(\n        self,\n        host: str = \"localhost\",\n        port: int = 8080,\n    ):\n        super().__init__()\n\n        self._ws_server = WebsockServer(host, port, http_server_root=None, verbose=False)\n        self._ws_server.register_handler(GuiUpdateMessage, self._handle_gui_updates)\n        self._ws_server.start()\n\n    @override\n    def _queue(self, message: NerfstudioMessage) -> None:\n        \"\"\"Implements message enqueue required by MessageApi.\n\n        Pushes a message onto a broadcast queue.\"\"\"\n        self._ws_server.queue_message(message)\n\n    def register_handler(\n        self, message_type: Type[NerfstudioMessage], handler: Callable[[NerfstudioMessage], None]\n    ) -> None:\n        \"\"\"Register a handler for incoming messages.\n\n        Args:\n            handler: A function that takes a message, and does something\n        \"\"\"\n        self._ws_server.register_handler(message_type, lambda client_id, msg: handler(msg))\n"
  },
  {
    "path": "third_party/nerfstudio/pyproject.toml",
    "content": "[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"nerfstudio\"\nversion = \"1.1.5\"\ndescription = \"All-in-one repository for state-of-the-art NeRFs\"\nreadme = \"README.md\"\nlicense = { text=\"Apache 2.0\"}\nrequires-python = \">=3.8.0\"\nclassifiers = [\n    \"Development Status :: 3 - Alpha\",\n    \"Programming Language :: Python\",\n]\ndependencies = [\n    \"appdirs>=1.4\",\n    \"av>=9.2.0\",\n    \"comet_ml>=3.33.8\",\n    \"cryptography>=38\",\n    \"tyro>=0.9.8\",\n    \"gdown>=4.6.0\",\n    \"ninja>=1.10\",\n    \"h5py>=2.9.0\",\n    \"imageio>=2.21.1\",\n    'importlib-metadata>=6.0.0; python_version < \"3.10\"',\n    \"ipywidgets>=7.6\",\n    \"jaxtyping>=0.2.15\",\n    \"jupyterlab>=3.3.4\",\n    \"matplotlib>=3.6.0\",\n    \"mediapy>=1.1.0\",\n    \"msgpack>=1.0.4\",\n    \"msgpack_numpy>=0.4.8\",\n    \"nerfacc==0.5.2\",\n    \"open3d>=0.16.0\",\n    \"opencv-python-headless==4.10.0.84\",\n    \"Pillow>=10.3.0\",\n    \"plotly>=5.7.0\",\n    \"protobuf<=3.20.3,!=3.20.0\",\n    # TODO(1480) enable when pycolmap windows wheels are available\n    # \"pycolmap==0.3.0\",\n    # TODO(3461) and external issue cnr-isti-vclab/PyMeshLab/issues/398: Unrestrict Windows version when it isn't broken anymore.\n    \"pymeshlab>=2022.2.post2; platform_machine != 'arm64' and platform_machine != 'aarch64'\",\n    \"pymeshlab<2023.12.post2; sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64'\",\n    \"pyngrok>=5.1.0\",\n    \"python-socketio>=5.7.1\",\n    \"pyquaternion>=0.9.9\",\n    # TODO we can switch back to (non-new) rawpy if they start releasing arm64\n    # wheels. https://github.com/letmaik/rawpy/issues/171#issuecomment-1572627747\n    \"rawpy>=0.18.1; platform_machine != 'arm64'\",\n    \"newrawpy>=1.0.0b0; platform_machine == 'arm64'\",\n    \"requests\",\n    \"rich>=12.5.1\",\n    \"scikit-image>=0.19.3\",\n    \"splines==0.3.0\",\n    \"tensorboard>=2.13.0\",\n    \"torch>=1.13.1\",\n    \"torchvision>=0.14.1\",\n    \"torchmetrics[image]>=1.0.1\",\n    \"typing_extensions>=4.4.0\",\n    \"viser==0.2.7\",\n    \"nuscenes-devkit>=1.1.1\",\n    \"wandb>=0.13.3\",\n    \"xatlas\",\n    \"trimesh>=3.20.2\",\n    \"timm==0.6.7\",\n    \"gsplat==1.4.0\",\n    \"pytorch-msssim\",\n    \"pathos\",\n    \"packaging\",\n    \"fpsample\",\n    \"tensorly\"\n]\n\n[project.urls]\n\"Documentation\" = \"https://docs.nerf.studio\"\n\n\n[project.optional-dependencies]\n\n# Generative related dependencies\ngen = [\n    \"diffusers==0.16.1\",\n    \"transformers==4.29.2\",\n    \"accelerate==0.19.0\",\n    \"bitsandbytes==0.39.0\",\n    \"sentencepiece==0.1.99\",\n]\n\n\n# Development packages\ndev = [\n    \"pre-commit==3.3.2\",\n    \"pytest==7.1.2\",\n    \"pytest-xdist==2.5.0\",\n    \"ruff>=0.6.1\",\n    \"sshconf==0.2.5\",\n    \"pycolmap>=0.3.0\",  # NOTE: pycolmap==0.3.0 is not available on newer python versions\n    \"diffusers==0.16.1\",\n    \"opencv-stubs==0.0.7\",\n    \"transformers==4.29.2\",\n    \"pyright==1.1.331\",\n    # NOTE: Disabling projectaria-tools because it doesn't have prebuilt windows wheels\n    # Syntax comes from here: https://pip.pypa.io/en/stable/reference/requirement-specifiers/\n    \"projectaria-tools>=1.3.1; sys_platform != 'win32'\",\n    # pin torch to <=2.1 to fix https://github.com/pytorch/pytorch/issues/118736\n    \"torch>=1.13.1,<2.2\",\n    \"awscli==1.33.18\"\n]\n\n# Documentation related packages\ndocs = [\n    \"furo==2022.09.29\",\n    # Specifying ipython for https://github.com/ipython/ipython/issues/13845\n    \"ipython==8.6.0\",\n    \"readthedocs-sphinx-search==0.1.2\",\n    \"myst-nb==0.16.0\",\n    \"nbconvert==7.2.5\",\n    \"nbformat==5.9.2\",\n    \"sphinx==5.2.1\",\n    \"sphinxemoji==0.2.0\",\n    \"sphinx-argparse==0.3.1\",\n    \"sphinx-copybutton==0.5.0\",\n    \"sphinx-design==0.2.0\",\n    \"sphinxext-opengraph==0.6.3\"\n]\n\n[project.scripts]\n# Note, add entrypoint name to nerfstudio/scripts/completions/install.py to include CLI completion\nns-install-cli = \"nerfstudio.scripts.completions.install:entrypoint\"\nns-process-data = \"nerfstudio.scripts.process_data:entrypoint\"\nns-download-data = \"nerfstudio.scripts.downloads.download_data:entrypoint\"\nns-train = \"nerfstudio.scripts.train:entrypoint\"\nns-viewer = \"nerfstudio.scripts.viewer.run_viewer:entrypoint\"\nns-eval = \"nerfstudio.scripts.eval:entrypoint\"\nns-render = \"nerfstudio.scripts.render:entrypoint\"\nns-export = \"nerfstudio.scripts.exporter:entrypoint\"\nns-dev-test = \"nerfstudio.scripts.github.run_actions:entrypoint\"\nns-dev-sync-viser-message-defs = \"nerfstudio.scripts.viewer.sync_viser_message_defs:entrypoint\"\n\n[tool.setuptools.packages.find]\ninclude = [\"nerfstudio*\"]\n\n[tool.setuptools.package-data]\n\"*\" = [\"*.cu\", \"*.json\", \"py.typed\", \"setup.bash\", \"setup.zsh\"]\n\n[tool.pytest.ini_options]\naddopts = \"-n=4 --jaxtyping-packages=nerfstudio --disable-warnings\"\ntestpaths = [\n    \"tests\",\n]\n\n[tool.pyright]\ninclude = [\"nerfstudio\"]\nexclude = [\"**/node_modules\",\n    \"**/__pycache__\",\n]\ndefineConstant = { DEBUG = true }\n\nreportMissingImports = \"warning\"\nreportMissingTypeStubs = false\nreportPrivateImportUsage = false\n\npythonVersion = \"3.8\"\npythonPlatform = \"Linux\"\n\n[tool.ruff]\nline-length = 120\nrespect-gitignore = false\nlint.select = [\n    \"E\",  # pycodestyle errors.\n    \"F\",  # Pyflakes rules.\n    \"I\",  # isort formatting.\n    \"PLC\",  # Pylint convention warnings.\n    \"PLE\",  # Pylint errors.\n    \"PLR\",  # Pylint refactor recommendations.\n    \"PLW\",  # Pylint warnings.\n    \"NPY201\" # NumPY 2.0 migration https://numpy.org/devdocs/numpy_2_0_migration_guide.html#ruff-plugin\n]\nlint.ignore = [\n    \"E501\",  # Line too long.\n    \"F722\",  # Forward annotation false positive from jaxtyping. Should be caught by pyright.\n    \"F821\",  # Forward annotation false positive from jaxtyping. Should be caught by pyright.\n    \"PLR2004\",  # Magic value used in comparison.\n    \"PLR0915\",  # Too many statements.\n    \"PLR0913\",  # Too many arguments.\n    \"PLC0414\",  # Import alias does not rename variable. (this is used for exporting names)\n    \"PLC1901\",  # Use falsey strings.\n    \"PLR5501\",  # Use `elif` instead of `else if`.\n    \"PLR0911\",  # Too many return statements.\n    \"PLR0912\",  # Too many branches.\n    \"PLW0603\",  # Globa statement updates are discouraged.\n    \"PLW2901\",  # For loop variable overwritten.\n    \"PLR1730\",  # Replace if statement with min/max\n    \"PLC0206\",  # Extracting value from dictionary without calling `.items()`\n]\n\n[tool.ruff.lint.isort]\ncombine-as-imports = true\nknown-first-party = [\"nerfstudio\"]\nsplit-on-trailing-comma = false"
  },
  {
    "path": "third_party/vlmx/.gitignore",
    "content": "**__pycache__**\n**results**\n*.env\n**.egg-info**"
  },
  {
    "path": "third_party/vlmx/README.md",
    "content": "# vlmx\n> [!CAUTION]\n> This readme is primarily generated by a VLM (Claude 3.7 Sonnet).\n\nBecause it's 2025 and typing more than 4 letters is so 2024. Let VLMs do everything while you touch grass.\n\n## 🌟 Features\n\n- **Multi-Provider Support**: OpenAI, Claude, Gemini - we got 'em all\n- **Context Magic**: Smart file handling that just works™\n- **Artifact Handling**: Images, logs, code - vlmx remembers so you don't have to\n- **In-Context Learning**: Show, don't tell (actually, let the VLM do both)\n- **Tool Use**: Built-in Swiss Army knife for VLMs\n\n## 🚀 Quick Start\n\n```bash\ngit clone https://github.com/vlongle/vlmx.git\ncd vlmx\nconda create -n vlmx python=3.9\nconda activate vlmx\npip install -e .\n```\n\n## 📖 Basic Usage\n\n```python\nfrom vlmx.agent import Agent, AgentConfig\nfrom dotenv import load_dotenv\nimport os\n\n# Load API key from .env file\nload_dotenv()\nAPI_KEY = os.environ.get('API_KEY')\n\n\nSYSTEM_INSTRUCTION = \"Do whatever I say correctly.\"\n\nclass HelperAgent(Agent):\n    OUT_RESULT_PATH = \"test.txt\"\n\n    def _make_system_instruction(self):\n        return SYSTEM_INSTRUCTION\n\n    def _make_prompt_parts(self, question: str):\n        return question\n\n    def parse_response(self, response):\n        print(\"response:\", response.text)\n        ## string_to_file(response.txt, \"path.txt\")\n\n\n# Initialize the agent\nagent = HelperAgent(AgentConfig(\n    model_name=\"gemini-2.0-flash-thinking-exp-01-21\",\n    out_dir=\"test_results\",\n    api_key=API_KEY\n))\n\n# Generate a prediction\nresponse = agent.generate_prediction(\"What's 2+2?\")\n```\n\nFor more advanced features like context-aware agents, tool usage, and in-context learning, check out the `quickstart.ipynb` notebook in the repository.\n\n## 📚 Documentation\n\nWe have no documentation because you can just ask the VLM to explain it to you.\n\n## 🤝 Contributing\n\n1. Fork it\n2. Ask a VLM to code it\n3. PR it\n4. Profit?\n\n\n## 📄 License\n\nMIT License - Because sharing is caring, and VLMs care about everyone."
  },
  {
    "path": "third_party/vlmx/quickstart.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/vlongle/miniconda3/envs/vlmx/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\\n\",\n      \"  from .autonotebook import tqdm as notebook_tqdm\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from vlmx.agent import Agent, AgentConfig\\n\",\n    \"from dotenv import load_dotenv\\n\",\n    \"from vlmx.context_agent import ContextAwareAgent\\n\",\n    \"import os\\n\",\n    \"import tempfile\\n\",\n    \"from vlmx.tool_use_agent import ToolUseAgent, TOOL_INSTRUCTION\\n\",\n    \"from vlmx.artifact import ArtifactDisplayHandler, artifacts_to_prompt_parts, ArtifactCollector\\n\",\n    \"from typing import Dict, Any, Optional, List, Union\\n\",\n    \"import sys\\n\",\n    \"from io import StringIO\\n\",\n    \"from vlmx.utils import string_to_file, join_path, extract_code_from_string\\n\",\n    \"from contextlib import contextmanager\\n\",\n    \"from io import StringIO\\n\",\n    \"from PIL import Image\\n\",\n    \"from pathlib import Path\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## we have our API key stored in a .env file\\n\",\n    \"load_dotenv()\\n\",\n    \"API_KEY = os.environ.get('API_KEY')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Basic\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"SYSTEM_INSTRUCTION = \\\"Do whatever I say correctly.\\\"\\n\",\n    \"\\n\",\n    \"class HelperAgent(Agent):\\n\",\n    \"    OUT_RESULT_PATH = \\\"test.txt\\\"\\n\",\n    \"\\n\",\n    \"    def _make_system_instruction(self):\\n\",\n    \"        return SYSTEM_INSTRUCTION\\n\",\n    \"\\n\",\n    \"    def _make_prompt_parts(self, question: str):\\n\",\n    \"        return question\\n\",\n    \"\\n\",\n    \"    def parse_response(self, response):\\n\",\n    \"        print(\\\"response:\\\", response.text)\\n\",\n    \"        ## string_to_file(response.txt, \\\"path.txt\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"response: 4\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"cfg = AgentConfig(model_name=\\\"gemini-2.0-flash-thinking-exp-01-21\\\",\\n\",\n    \"                out_dir=f\\\"test_results\\\",\\n\",\n    \"                api_key=API_KEY)\\n\",\n    \"agent = HelperAgent(cfg)\\n\",\n    \"agent.generate_prediction(\\\"What's 2+2?\\\");\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Cursor-style File Context\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"You can use the `@` symbol to reference files in the current directory, and we will automatically include the file in the prompt, and manage duplicated files ect.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class FileContextAgent(ContextAwareAgent):\\n\",\n    \"    OUT_RESULT_PATH = \\\"out.txt\\\"\\n\",\n    \"    \\n\",\n    \"    def _make_system_instruction(self) -> str:\\n\",\n    \"        return f\\\"\\\"\\\"Answer the question correctly.\\\"\\\"\\\"\\n\",\n    \"\\n\",\n    \"    def parse_response(self, response, **kwargs):\\n\",\n    \"        print(\\\"response:\\\", response.text)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def create_temp_file(content):\\n\",\n    \"    with tempfile.NamedTemporaryFile(delete=False) as temp_file:\\n\",\n    \"        temp_file.write(content.encode('utf-8'))\\n\",\n    \"        return temp_file.name\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"a_file: /tmp/tmpkoqb_rj3\\n\",\n      \"b_file: /tmp/tmpbgthoy9r\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"a_content = \\\"x=10\\\"\\n\",\n    \"b_content = \\\"x=9**2\\\"\\n\",\n    \"\\n\",\n    \"a_file = create_temp_file(a_content)\\n\",\n    \"b_file = create_temp_file(b_content)\\n\",\n    \"\\n\",\n    \"print(\\\"a_file:\\\", a_file)\\n\",\n    \"print(\\\"b_file:\\\", b_file)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"response: The difference between [tmpkoqb_rj3] and [tmpbgthoy9r] is in the value assigned to the variable `x`.\\n\",\n      \"\\n\",\n      \"* **[tmpkoqb_rj3]** assigns the value `10` to the variable `x`.\\n\",\n      \"* **[tmpbgthoy9r]** assigns the value `81` (which is the result of `9**2`, or 9 squared) to the variable `x`.\\n\",\n      \"\\n\",\n      \"In essence, both files define a variable `x`, but they initialize it with different numerical values.  The first file uses a literal value, while the second file uses an exponentiation operation to calculate the value.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"file_agent = FileContextAgent(AgentConfig(model_name=\\\"gemini-2.0-flash-thinking-exp-01-21\\\",\\n\",\n    \"            out_dir=f\\\"test_intelligent_results\\\",\\n\",\n    \"            api_key=API_KEY))\\n\",\n    \"\\n\",\n    \"prompt_parts = [\\n\",\n    \"    f\\\"What's the difference between @{a_file} and @{b_file} ?\\\",\\n\",\n    \"]\\n\",\n    \"file_agent.generate_prediction(\\n\",\n    \"    prompt_parts,\\n\",\n    \"    overwrite=True,\\n\",\n    \");\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Tool Usage and artifacts\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We only equip the VLM with ability to `save_logs` and `save_images` to a workspace. This allows the VLM to save intermediate results and later retrieve them results for iterative refinement. Here's a basic example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class ToolAgent(ToolUseAgent):\\n\",\n    \"    OUT_RESULT_PATH = \\\"tool_use_result.txt\\\"\\n\",\n    \"    PYTHON_FILE_NAME = \\\"tool_use_agent.py\\\"\\n\",\n    \"    \\n\",\n    \"    def __init__(self, config, working_dir: str = \\\"./vlm_workspace\\\"):\\n\",\n    \"        super().__init__(config, working_dir)\\n\",\n    \"        self.artifact_handler = ArtifactDisplayHandler()\\n\",\n    \"        self.additional_context = None\\n\",\n    \"        self.previous_code = None  # Track previous code for diff generation\\n\",\n    \"\\n\",\n    \"    def _make_system_instruction(self) -> str:\\n\",\n    \"        return super().add_file_context(\\\"You're an helpful assistant.\\\"+ TOOL_INSTRUCTION) \\n\",\n    \"\\n\",\n    \"    def add_context(self, context: Dict[str, Any]):\\n\",\n    \"        \\\"\\\"\\\"Add context from previous iterations to help improve the solution\\\"\\\"\\\"\\n\",\n    \"        self.additional_context = context\\n\",\n    \"        # Extract previous code from context if available\\n\",\n    \"        if context and 'code' in context:\\n\",\n    \"            self.previous_code = context['code']\\n\",\n    \"\\n\",\n    \"    def _make_prompt_parts(self, task: str) -> List[Union[str, Image.Image]]:\\n\",\n    \"        \\\"\\\"\\\"Generate prompt parts including both text and images/videos\\\"\\\"\\\"\\n\",\n    \"        prompt_parts = [f\\\"task: {task}\\\"]\\n\",\n    \"\\n\",\n    \"        \\n\",\n    \"        # Add context from previous iterations if available\\n\",\n    \"        if self.additional_context:\\n\",\n    \"            prompt_parts.append(\\\"\\\\nPrevious attempt results:\\\")\\n\",\n    \"            prompt_parts.extend(artifacts_to_prompt_parts(self.additional_context))\\n\",\n    \"            prompt_parts.append(\\\"\\\\nPlease analyze the previous attempt and improve the solution. \\\")\\n\",\n    \"        \\n\",\n    \"        return super()._make_prompt_parts(prompt_parts)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"    @staticmethod\\n\",\n    \"    @contextmanager\\n\",\n    \"    def capture_output():\\n\",\n    \"        \\\"\\\"\\\"Capture stdout while still allowing it to print to console\\\"\\\"\\\"\\n\",\n    \"        stdout = StringIO()\\n\",\n    \"        original_stdout = sys.stdout\\n\",\n    \"        class TeePrint:\\n\",\n    \"            def write(self, data):\\n\",\n    \"                stdout.write(data)\\n\",\n    \"                original_stdout.write(data)\\n\",\n    \"            def flush(self):\\n\",\n    \"                stdout.flush()\\n\",\n    \"                original_stdout.flush()\\n\",\n    \"        \\n\",\n    \"        sys.stdout = TeePrint()\\n\",\n    \"        try:\\n\",\n    \"            yield stdout\\n\",\n    \"        finally:\\n\",\n    \"            sys.stdout = original_stdout\\n\",\n    \"\\n\",\n    \"    def parse_response(self, response, **kwargs):\\n\",\n    \"        \\\"\\\"\\\"Parse response and handle both full code and diffs\\\"\\\"\\\"\\n\",\n    \"        code = extract_code_from_string(response.text)\\n\",\n    \"\\n\",\n    \"        # Save the full response and extracted code\\n\",\n    \"        string_to_file(response.text, join_path(self.cfg.out_dir, self.OUT_RESULT_PATH))\\n\",\n    \"        string_to_file(code, join_path(self.cfg.out_dir, self.PYTHON_FILE_NAME))\\n\",\n    \"        \\n\",\n    \"        # Capture both stdout and execution results\\n\",\n    \"        with self.capture_output() as output:\\n\",\n    \"            success, error = self.execute_code(code)\\n\",\n    \"        \\n\",\n    \"        # Save stdout to output.txt\\n\",\n    \"        stdout_content = output.getvalue()\\n\",\n    \"        if stdout_content:\\n\",\n    \"            string_to_file(stdout_content, join_path(self.cfg.out_dir, \\\"stdout.txt\\\"))\\n\",\n    \"        \\n\",\n    \"        if not error:\\n\",\n    \"            print(\\\"\\\\nCode executed successfully!\\\")\\n\",\n    \"            # Display all artifacts in the working directory\\n\",\n    \"            # self.artifact_handler.display_artifacts(Path(self.working_dir))\\n\",\n    \"        else:\\n\",\n    \"            print(f\\\"Error executing code: {error}\\\")\\n\",\n    \"            # Save the error to stderr.txt\\n\",\n    \"            string_to_file(error, join_path(self.cfg.out_dir, \\\"stderr.txt\\\"))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"Code executed successfully!\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"agent = ToolAgent(AgentConfig(\\n\",\n    \"    model_name=\\\"gemini-2.0-flash-thinking-exp-01-21\\\",\\n\",\n    \"    out_dir=\\\"test_tool_use_results\\\",\\n\",\n    \"    api_key=API_KEY\\n\",\n    \"))\\n\",\n    \"\\n\",\n    \"# Test simple math problem\\n\",\n    \"question = \\\"\\\"\\\"Calculate the square of numbers from 1 to 5. \\n\",\n    \"Plot the results and save both the data and plot.\\\"\\\"\\\"\\n\",\n    \"\\n\",\n    \"agent.generate_prediction(question);\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"PosixPath('test_tool_use_results/vlm_workspace')\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"agent.working_dir\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"ls: cannot access 'test_tool_use/vlm_workspace/images': No such file or directory\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"!ls test_tool_use/vlm_workspace/images\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'code': 'import matplotlib.pyplot as plt\\\\n\\\\n# Calculate squares\\\\nnumbers = list(range(1, 6))\\\\nsquares = [n**2 for n in numbers]\\\\n\\\\n# Create plot\\\\nplt.plot(numbers, squares)\\\\nplt.xlabel(\\\"Numbers\\\")\\\\nplt.ylabel(\\\"Squares\\\")\\\\nplt.title(\\\"Squares of Numbers from 1 to 5\\\")\\\\nplt.grid(True)\\\\n\\\\n# Save plot\\\\nsave_image(\\\"squares_plot\\\", plt.gcf())\\\\n\\\\n# Save data\\\\ndata = {\\\"numbers\\\": numbers, \\\"squares\\\": squares}\\\\nlog_data(\\\"squares_data\\\", data)',\\n\",\n       \" 'stdout': None,\\n\",\n       \" 'stderr': None,\\n\",\n       \" 'images': [{'name': 'squares_plot_20250224_191625.png',\\n\",\n       \"   'data': <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=640x480>}],\\n\",\n       \" 'videos': [],\\n\",\n       \" 'logs': [{'name': 'squares_data_20250224_191625.json',\\n\",\n       \"   'data': {'numbers': [1, 2, 3, 4, 5], 'squares': [1, 4, 9, 16, 25]}}]}\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"context = ArtifactCollector(Path(agent.cfg.out_dir)).collect()\\n\",\n    \"## agent.add_context(context) ## for iterative refinement.\\n\",\n    \"context\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"=== Code ===\\n\",\n      \"\\n\",\n      \"📁 tool_use_agent.py\\n\",\n      \"\\u001b[34mimport\\u001b[39;49;00m\\u001b[37m \\u001b[39;49;00m\\u001b[04m\\u001b[36mmatplotlib\\u001b[39;49;00m\\u001b[04m\\u001b[36m.\\u001b[39;49;00m\\u001b[04m\\u001b[36mpyplot\\u001b[39;49;00m\\u001b[37m \\u001b[39;49;00m\\u001b[34mas\\u001b[39;49;00m\\u001b[37m \\u001b[39;49;00m\\u001b[04m\\u001b[36mplt\\u001b[39;49;00m\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m# Calculate squares\\u001b[39;49;00m\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"numbers = \\u001b[36mlist\\u001b[39;49;00m(\\u001b[36mrange\\u001b[39;49;00m(\\u001b[34m1\\u001b[39;49;00m, \\u001b[34m6\\u001b[39;49;00m))\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"squares = [n**\\u001b[34m2\\u001b[39;49;00m \\u001b[34mfor\\u001b[39;49;00m n \\u001b[35min\\u001b[39;49;00m numbers]\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m# Create plot\\u001b[39;49;00m\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"plt.plot(numbers, squares)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"plt.xlabel(\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33mNumbers\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"plt.ylabel(\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33mSquares\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"plt.title(\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33mSquares of Numbers from 1 to 5\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"plt.grid(\\u001b[34mTrue\\u001b[39;49;00m)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m# Save plot\\u001b[39;49;00m\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"save_image(\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33msquares_plot\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m, plt.gcf())\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\u001b[37m# Save data\\u001b[39;49;00m\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"data = {\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33mnumbers\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m: numbers, \\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33msquares\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m: squares}\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"log_data(\\u001b[33m\\\"\\u001b[39;49;00m\\u001b[33msquares_data\\u001b[39;49;00m\\u001b[33m\\\"\\u001b[39;49;00m, data)\\u001b[37m\\u001b[39;49;00m\\n\",\n      \"\\n\",\n      \"\\n\",\n      \"=== Standard Output ===\\n\",\n      \"\\n\",\n      \"📁 stdout.txt\\n\",\n      \"\\n\",\n      \"=== Standard Error ===\\n\",\n      \"\\n\",\n      \"📁 stderr.txt\\n\",\n      \"\\n\",\n      \"=== Images ===\\n\",\n      \"\\n\",\n      \"=== Artifacts in images ===\\n\",\n      \"\\n\",\n      \"📁 squares_plot_20250224_191625.png\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<IPython.core.display.Image object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"=== Videos ===\\n\",\n      \"No artifacts found in test_tool_use_results/vlm_workspace/videos\\n\",\n      \"\\n\",\n      \"=== Logs ===\\n\",\n      \"\\n\",\n      \"=== Artifacts in logs ===\\n\",\n      \"\\n\",\n      \"📁 squares_data_20250224_191625.json\\n\",\n      \"{\\n\",\n      \"  \\\"numbers\\\": [\\n\",\n      \"    1,\\n\",\n      \"    2,\\n\",\n      \"    3,\\n\",\n      \"    4,\\n\",\n      \"    5\\n\",\n      \"  ],\\n\",\n      \"  \\\"squares\\\": [\\n\",\n      \"    1,\\n\",\n      \"    4,\\n\",\n      \"    9,\\n\",\n      \"    16,\\n\",\n      \"    25\\n\",\n      \"  ]\\n\",\n      \"}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"ArtifactDisplayHandler(Path(agent.cfg.out_dir)).display_all()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"vlmx\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.21\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "third_party/vlmx/setup.py",
    "content": "from setuptools import setup, find_packages\n\n\nINSTALL_REQUIRES = [\n    'google-generativeai',\n    'ipykernel',\n    'matplotlib',\n    'markdown2',\n    'scikit-learn',\n    'opencv-python',\n    'hydra-core',\n    'termcolor',\n    'python-dotenv',\n    'plotly',\n    'nbformat',\n    'openai',\n    'anthropic',\n    'moviepy',\n    'astor',\n]\n\n\n\n\nsetup(\n    name='vlmx',\n    version='0.1.0',\n    description='VLMX does everything and you just profit.',\n    install_requires=INSTALL_REQUIRES, \n    packages=find_packages(),\n    python_requires='>=3.8',\n)\n"
  },
  {
    "path": "third_party/vlmx/vlmx/__init__.py",
    "content": ""
  },
  {
    "path": "third_party/vlmx/vlmx/agent.py",
    "content": "from dataclasses import dataclass\nfrom typing import Optional\nfrom vlmx.utils import (\n    create_dir,\n    load_json,\n    join_path,\n    file_to_string,\n)\nfrom vlmx.prompt_utils import (\n    setup_vlm_model,\n    save_prompt_parts_as_html,\n)\nfrom omegaconf import OmegaConf\nimport os\nimport logging\nfrom IPython.display import display, HTML\n\nGEN_CONFIG = {\n    \"temperature\": 0.5,\n}\n\n\n@dataclass\nclass AgentConfig:\n    model_name: str\n    out_dir: str\n    api_key: Optional[str] = None\n\n\nclass Agent:\n    def __init__(\n        self, cfg: AgentConfig,\n    ):\n        self.cfg = cfg\n        create_dir(cfg.out_dir)\n        self.system_instruction = self.make_system_instruction()\n        self.model = setup_vlm_model(\n            model_name=cfg.model_name, system_instruction=self.system_instruction, api_key=cfg.api_key\n        )\n        print(f\"Model: {self.model}\")\n        self._save_public_config()\n\n    def _save_public_config(self):\n        cfg_dict = OmegaConf.to_container(self.cfg, resolve=True)\n        assert isinstance(cfg_dict, dict), \"Agent config must be a dictionary-like object.\"\n        self._drop_api_key_fields(cfg_dict)\n        OmegaConf.save(OmegaConf.create(cfg_dict), join_path(self.cfg.out_dir, \"config.json\"))\n\n    @staticmethod\n    def _drop_api_key_fields(node):\n        if isinstance(node, dict):\n            for key in list(node.keys()):\n                key_lower = str(key).lower()\n                if \"api\" in key_lower and \"key\" in key_lower:\n                    node.pop(key, None)\n                    continue\n                Agent._drop_api_key_fields(node[key])\n            return\n        if isinstance(node, list):\n            for item in node:\n                Agent._drop_api_key_fields(item)\n\n    @ property\n    def out_path(self):\n        return join_path(self.cfg.out_dir, self.OUT_RESULT_PATH)\n\n    @ property\n    def error_path(self):\n        return join_path(self.cfg.out_dir, \"error.txt\")\n\n    def make_system_instruction(self):\n        system_instruction = self._make_system_instruction()\n        save_prompt_parts_as_html(\n            system_instruction, join_path(\n                self.cfg.out_dir, \"system_instruction.html\")\n        )\n        return system_instruction\n\n    def load_system_instruction(self):\n        return display(HTML(join_path(self.cfg.out_dir, \"system_instruction.json\")))\n\n    def load_prompt_parts(self):\n        return display(HTML(join_path(self.cfg.out_dir, \"prompt.html\")))\n\n    def make_prompt_parts(self, *args, **kwargs):\n        prompt_parts = self._make_prompt_parts(*args, **kwargs)\n        save_prompt_parts_as_html(\n            prompt_parts, join_path(self.cfg.out_dir, \"prompt.html\")\n        )\n        return prompt_parts\n\n    def parse_response(self, response):\n        raise NotImplementedError\n\n    def _make_system_instruction(self):\n        raise NotImplementedError\n\n    def _make_prompt_parts(self, *args, **kwargs):\n        raise NotImplementedError\n\n    def generate_prediction(self, *args, gen_config=None, overwrite=False, **kwargs):\n        out_path = join_path(self.cfg.out_dir, self.OUT_RESULT_PATH)\n        if (\n            os.path.exists(out_path)\n            and not overwrite\n        ):\n            logging.info(\n                f\"{self.__class__.__name__}: Prediction already exists at {out_path}. Skipping generation.\"\n            )\n            return self.load_prediction()\n\n        if gen_config is None:\n            gen_config = GEN_CONFIG\n\n        logging.info(f\"{self.__class__.__name__}: Generating content.\")\n        prompt_parts = self.make_prompt_parts(*args, **kwargs)\n        logging.info(f\"Prompt: {prompt_parts}\")\n\n        response = self.model.generate_content(\n            prompt_parts,\n            generation_config=gen_config,\n        )\n        # logging.info(f\"Usage: {response.usage_metadata}\")\n\n        self.parse_response(response, **kwargs)\n        return response\n\n    def load_prediction(self):\n        if \".json\" in self.OUT_RESULT_PATH:\n            return load_json(join_path(self.cfg.out_dir, self.OUT_RESULT_PATH))\n        return file_to_string(join_path(self.cfg.out_dir, self.OUT_RESULT_PATH))"
  },
  {
    "path": "third_party/vlmx/vlmx/artifact.py",
    "content": "from typing import Dict, Type, Callable, Any, Optional, List, Union\nfrom pathlib import Path\nfrom IPython.display import display, Image as IPyImage\nimport json\nfrom PIL import Image\nimport base64\nfrom io import BytesIO\nfrom dataclasses import dataclass\nfrom vlmx.utils import file_to_string, get_frames_from_video\n\n\n@dataclass\nclass ArtifactPaths:\n    \"\"\"Paths to different types of artifacts in an iteration\"\"\"\n    workspace: Path\n    images: Path\n    videos: Path\n    logs: Path\n    code: Path\n    stdout: Path\n    stderr: Path\n\n    @classmethod\n    def from_iteration_dir(cls, iter_dir: Path) -> 'ArtifactPaths':\n        workspace = iter_dir / \"vlm_workspace\"\n        return cls(\n            workspace=workspace,\n            images=workspace / \"images\",\n            videos=workspace / \"videos\",\n            logs=workspace / \"logs\",\n            code=iter_dir / \"tool_use_agent.py\", ## NOTE: remember to change this to the correct code file\n            stdout=iter_dir / \"stdout.txt\",\n            stderr=iter_dir / \"stderr.txt\"\n        )\n\n\nclass ArtifactHandler:\n    \"\"\"Base class for handling artifacts (display and processing)\"\"\"\n    \n    @staticmethod\n    def image_to_base64(img: Image.Image) -> str:\n        \"\"\"Convert PIL Image to base64 string\"\"\"\n        buffered = BytesIO()\n        img.save(buffered, format=\"PNG\")\n        return base64.b64encode(buffered.getvalue()).decode()\n\n    @staticmethod\n    def read_file(path: Path) -> Optional[str]:\n        \"\"\"Safely read a file's contents\"\"\"\n        try:\n            return file_to_string(path)\n        except Exception as e:\n            # print(f\"Error reading file {path}: {e}\")\n            return None\n\n\nclass ArtifactDisplayHandler(ArtifactHandler):\n    \"\"\"Handles the display of different types of artifacts\"\"\"\n    \n    def __init__(self, iter_dir: Optional[Path] = None):\n        self.handlers: Dict[str, Callable] = {\n            '.png': self.display_image,\n            '.jpg': self.display_image,\n            '.jpeg': self.display_image,\n            '.json': self.display_json,\n            '.py': self.display_code,\n            '.txt': self.display_text,\n            '.mp4': self.display_video,\n        }\n        self.paths = ArtifactPaths.from_iteration_dir(iter_dir) if iter_dir else None\n\n    def display_image(self, path: Path) -> None:\n        \"\"\"Display image files\"\"\"\n        display(IPyImage(filename=str(path)))\n    \n    def display_json(self, path: Path) -> None:\n        \"\"\"Display JSON files with pretty formatting\"\"\"\n        content = self.read_file(path)\n        if content:\n            print(json.dumps(json.loads(content), indent=2))\n    \n    def display_code(self, path: Path) -> None:\n        \"\"\"Display code files with syntax highlighting if available\"\"\"\n        try:\n            from pygments import highlight\n            from pygments.lexers import PythonLexer\n            from pygments.formatters import TerminalFormatter\n            \n            content = self.read_file(path)\n            if content:\n                print(highlight(content, PythonLexer(), TerminalFormatter()))\n        except ImportError:\n            self.display_text(path)\n    \n    def display_text(self, path: Path) -> None:\n        \"\"\"Display text files\"\"\"\n        content = self.read_file(path)\n        if content:\n            print(content)\n    \n    def display_video(self, path: Path) -> None:\n        \"\"\"Display video as frames\"\"\"\n        frames = get_frames_from_video(str(path))\n        for i, frame in enumerate(frames):\n            display(IPyImage(frame))\n    \n    def register_handler(self, extension: str, handler: Callable) -> None:\n        \"\"\"Register a new file handler\"\"\"\n        self.handlers[extension.lower()] = handler\n    \n    def display_artifact(self, path: Path) -> None:\n        \"\"\"Display a single artifact\"\"\"\n        extension = path.suffix.lower()\n        if extension in self.handlers:\n            print(f\"\\n📁 {path.name}\")\n            self.handlers[extension](path)\n        else:\n            print(f\"\\n📁 {path.name} (No display handler available)\")\n    \n\n\n    def display_artifacts(self, directory: Path) -> None:\n        \"\"\"Display all artifacts in a directory\"\"\"\n        if not directory.exists():\n            print(f\"Directory {directory} does not exist!\")\n            return\n            \n        files = sorted(directory.glob(\"*\"))\n        if not files:\n            print(f\"No artifacts found in {directory}\")\n            return\n            \n        print(f\"\\n=== Artifacts in {directory.name} ===\")\n        for file_path in files:\n            self.display_artifact(file_path)\n            \n\n    def display_all(self) -> None:\n        \"\"\"Display all artifacts from the iteration directory\"\"\"\n        if not self.paths:\n            raise ValueError(\"No iteration directory was provided\")\n            \n        print(\"\\n=== Code ===\")\n        self.display_artifact(self.paths.code)\n        \n        print(\"\\n=== Standard Output ===\")\n        self.display_artifact(self.paths.stdout)\n        \n        print(\"\\n=== Standard Error ===\")\n        self.display_artifact(self.paths.stderr)\n        \n        print(\"\\n=== Images ===\")\n        self.display_artifacts(self.paths.images)\n        \n        print(\"\\n=== Videos ===\")\n        self.display_artifacts(self.paths.videos)\n        \n        print(\"\\n=== Logs ===\")\n        self.display_artifacts(self.paths.logs)\n\n\nclass ArtifactCollector(ArtifactHandler):\n    \"\"\"Collects and processes artifacts for LLM context\"\"\"\n    \n    def __init__(self, iter_dir: Path):\n        self.paths = ArtifactPaths.from_iteration_dir(iter_dir)\n\n    def collect_images(self) -> List[Dict[str, str]]:\n        \"\"\"Collect and process image artifacts\"\"\"\n        if not self.paths.images.exists():\n            return []\n        \n        images = []\n        for img_path in self.paths.images.glob(\"*.png\"):\n            try:\n                img = Image.open(img_path)\n                images.append({\n                    'name': img_path.name,\n                    # 'data': self.image_to_base64(img)\n                    'data': img\n                })\n            except Exception as e:\n                print(f\"Error processing image {img_path}: {e}\")\n        return images\n\n    def collect_videos(self) -> List[Dict[str, Any]]:\n        \"\"\"Collect and process video artifacts\"\"\"\n        if not self.paths.videos.exists():\n            return []\n        \n        videos = []\n        for video_path in self.paths.videos.glob(\"*.mp4\"):\n            try:\n                frames = get_frames_from_video(str(video_path))\n                videos.append({\n                    'name': video_path.name,\n                    # 'frames': [self.image_to_base64(frame) for frame in frames]\n                    'frames': frames,\n                })\n            except Exception as e:\n                print(f\"Error processing video {video_path}: {e}\")\n        return videos\n\n    def collect_logs(self) -> List[Dict[str, Any]]:\n        \"\"\"Collect and process log artifacts\"\"\"\n        if not self.paths.logs.exists():\n            return []\n        \n        logs = []\n        for log_path in self.paths.logs.glob(\"*.json\"):\n            content = self.read_file(log_path)\n            if content:\n                logs.append({\n                    'name': log_path.name,\n                    'data': json.loads(content)\n                })\n        return logs\n\n    def collect(self) -> Dict[str, Any]:\n        \"\"\"Collect all artifacts and return organized context\"\"\"\n        return {\n            'code': self.read_file(self.paths.code),\n            'stdout': self.read_file(self.paths.stdout),\n            'stderr': self.read_file(self.paths.stderr),\n            'images': self.collect_images(),\n            'videos': self.collect_videos(),\n            'logs': self.collect_logs()\n        }\n\n\ndef artifacts_to_prompt_parts(artifacts: Dict[str, Any]) -> List[Union[str, Image.Image]]:\n    \"\"\"Convert collected artifacts into a list of prompt parts for the VLM.\n    \n    Args:\n        artifacts: Dictionary of artifacts from ArtifactCollector.collect()\n    \n    Returns:\n        List of strings and images that can be directly fed to the VLM\n    \"\"\"\n    prompt_parts = []\n    \n    # Add code if available\n    if artifacts['code']:\n        prompt_parts.append(f\"\\nPrevious code:\\n```python\\n{artifacts['code']}\\n```\")\n    \n    # Add stderr if there were errors\n    if artifacts['stderr']:\n        prompt_parts.append(f\"\\nPrevious error:\\n```\\n{artifacts['stderr']}\\n```\")\n    \n    # Add stdout if available\n    if artifacts['stdout']:\n        prompt_parts.append(f\"\\nPrevious output:\\n```\\n{artifacts['stdout']}\\n```\")\n    \n    # Add images\n    if artifacts['images']:\n        prompt_parts.append(\"\\nPrevious attempt images:\")\n        for img_obj in artifacts['images']:\n            prompt_parts.extend([f\"\\n{img_obj['name']}:\", img_obj['data']])\n    \n    # Add videos (as frames)\n    if artifacts['videos']:\n        prompt_parts.append(\"\\nPrevious attempt video frames:\")\n        for video_obj in artifacts['videos']:\n            prompt_parts.extend([f\"\\n{video_obj['name']} frames:\"] + video_obj['frames'])\n    \n    # Add logs\n    if artifacts['logs']:\n        for log in artifacts['logs']:\n            prompt_parts.append(\n                f\"\\n{log['name']}:\\n```json\\n{json.dumps(log['data'], indent=2)}\\n```\"\n            )\n    \n    return prompt_parts\n"
  },
  {
    "path": "third_party/vlmx/vlmx/context_agent.py",
    "content": "from dataclasses import dataclass\nfrom typing import List, Dict, Union\nfrom vlmx.agent import Agent\nfrom vlmx.utils import file_to_string\nimport logging\nfrom PIL import Image\nimport re\nimport os\n\n@dataclass\nclass FileContext:\n    \"\"\"Represents a file and its content\"\"\"\n    file_path: str\n    content: str\n\nclass ContextMixin:\n    \"\"\"A mixin that adds file context handling to any agent\"\"\"\n    \n    def __init__(self, *args, **kwargs):\n        self.file_contexts: Dict[str, FileContext] = {}  # Track all seen file contexts\n        super().__init__(*args, **kwargs)\n    \n    def add_file_context(self, text: str) -> str:\n        \"\"\"Process text for file contexts and return cleaned text\"\"\"\n        # Split only on whitespace-bounded @file references\n        file_references = re.finditer(r'\\s@(\\S+)', ' ' + text)\n        \n        # Collect all file paths and their positions\n        replacements = []\n        new_file_contexts = []\n        for match in file_references:\n            file_path = match.group(1)\n\n            if file_path in self.file_contexts or file_path in new_file_contexts:\n                continue\n\n            if not os.path.exists(file_path):\n                logging.error(f\"File {file_path} does not exist\")\n                continue\n\n            ## add the file context to the list\n            content = file_to_string(file_path)\n            self.file_contexts[file_path] = FileContext(file_path, content)\n            new_file_contexts.append(FileContext(file_path, content))\n            \n            # Replace @file.py with [file.py]\n            basename = os.path.basename(file_path)\n            replacements.append((match.group(0), f' [{basename}]'))\n        \n        # Apply replacements in reverse order\n        cleaned_text = text\n        for old, new in sorted(replacements, key=lambda x: x[0], reverse=True):\n            cleaned_text = cleaned_text.replace(old, new)\n                \n        cleaned_text = cleaned_text.strip()\n\n        ## now prepend the file contexts to the cleaned text\n        parts = []\n        for ctx in new_file_contexts:\n            parts.append(\n                f\"\\nContent of `{ctx.file_path}`:\\n```\\n{ctx.content}\\n```\\n\"\n            )\n        parts.append(cleaned_text)\n        return \"\\n\".join(parts)\n\nclass ContextAwareAgent(ContextMixin, Agent): \n    \"\"\"A base agent class that's aware of file contexts\"\"\"\n\n    def _make_prompt_parts(self, prompt_parts: Union[str, List[Union[str, Image.Image]]], \n                           *args, **kwargs) -> List[Union[str, Image.Image]]:\n\n        if isinstance(prompt_parts, str):\n            prompt_parts = [prompt_parts]\n\n        cleaned_parts = []\n        for part in prompt_parts:\n            if isinstance(part, str):\n                cleaned_parts.append(self.add_file_context(part))\n            else:\n                cleaned_parts.append(part)\n        return cleaned_parts"
  },
  {
    "path": "third_party/vlmx/vlmx/multimodal_incontext_agent.py",
    "content": "from omegaconf import DictConfig\nimport random\nfrom vlmx.agent.agent import Agent\n\n\nclass InContextExampleModel(Agent):\n\n    def _make_prompt_parts(self, *args, **kwargs):\n        prompt_parts = [\n            \"Here are some examples. Study each of these examples carefully:\\n\"\n        ]\n        prompt_parts.extend(self._get_in_context_examples())  # examples\n        prompt_parts.append(\"## Your task\\n\")\n        prompt_parts.extend(self._format_content(*args, **kwargs))  # your task\n        return prompt_parts\n\n    def _get_in_context_examples(self):\n        examples = []\n        example_paths = self.get_example_paths()\n        selected_examples = self._select_examples(example_paths)\n\n        if self.cfg.in_context.shuffle_examples:\n            random.shuffle(selected_examples)\n\n        for i, example_path in enumerate(selected_examples):\n            example_kwargs = self._extract_example_kwargs(example_path)\n            if example_kwargs:\n                formatted_example = self._format_content(**example_kwargs)\n                examples.append(f\"## Example {i + 1}:\\n\")\n                examples.extend(formatted_example)\n        return examples\n\n    def _select_examples(self, example_paths):\n        if isinstance(self.cfg.in_context.num_examples, int):\n            assert self.cfg.in_context.num_examples >= 0, \"num_examples must be a non-negative integer\"\n            return random.sample(example_paths, min(self.cfg.in_context.num_examples, len(example_paths)))\n        else:\n            return example_paths\n\n    def get_example_paths(self):\n        \"\"\"\n        Returns a list of paths to example files or directories.\n        Subclasses should implement this method based on their specific needs.\n        \"\"\"\n        raise NotImplementedError(\n            \"Subclasses must implement get_example_paths\")\n\n    def _make_system_instruction(self):\n        raise NotImplementedError(\n            \"Subclasses must implement _make_system_instruction\")\n\n    def _format_content(self, *args, **kwargs):\n        \"\"\"\n        This should format content the same way as _make_prompt_parts in the `basic` prompting\n        agent\n        \"\"\"\n        raise NotImplementedError(\"Subclasses must implement _format_content\")\n\n    def _extract_example_kwargs(self, example_path):\n        \"\"\"\n        Returns the kwargs to pass into _format_content based on the example_path.\n        \"\"\"\n        raise NotImplementedError(\n            \"Subclasses must implement _extract_example_kwargs\")"
  },
  {
    "path": "third_party/vlmx/vlmx/prompt_utils.py",
    "content": "import logging\nimport random\nimport astor\nimport ast\nimport re\nimport os\nimport google.generativeai as genai\nfrom vlmx.utils import string_to_file\nimport textwrap\nimport markdown2\nfrom io import BytesIO\nimport base64\nfrom PIL import Image\nimport anthropic\nfrom openai import OpenAI\n \n# Add required imports at the top, after existing imports\nimport torch\nimport tempfile\nimport os\nfrom transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor\nfrom qwen_vl_utils import process_vision_info\nfrom PIL import Image\nfrom io import BytesIO\nimport base64\n\ndef setup_gemini(model_name, system_instruction=None, api_key=None):\n    logging.info(f\"Setting up Google's model {model_name} with API key {api_key}\")\n    api_key = api_key or os.environ.get(\"API_KEY\")\n    if not api_key:\n        return None\n\n    genai.configure(api_key=api_key)\n\n    # genai.list_models()\n    return genai.GenerativeModel(\n        model_name,\n        system_instruction=system_instruction,\n    )\n\n\n\n\ndef setup_vlm_model(model_name, system_instruction=None, api_key=None):\n    # return setup_gemini(model_name, system_instruction, api_key)\n    # return setup_gpt(model_name, system_instruction, api_key)\n    logging.info(\"VLM model name: {}\".format(model_name))\n    logging.info(f\"Setting up VLM's model {model_name} with API key {api_key}\")\n    if \"gemini\" in model_name:\n        return setup_gemini(model_name, system_instruction, api_key)\n    elif \"claude\" in model_name:\n        return setup_claude(model_name, system_instruction, api_key)\n    elif \"gpt\" in model_name or 'o' in model_name:\n        return setup_gpt(model_name, system_instruction, api_key)\n    elif \"qwen\" in model_name.lower():\n        return setup_qwen(model_name, system_instruction, api_key)\n    else:\n        raise ValueError(\"Model name must contain 'gpt' `claude` or `o` or 'gemini' or 'qwen'. Got: {}\".format(model_name))\n\ndef setup_gemini(model_name, system_instruction=None, api_key=None):\n    api_key = api_key or os.environ.get(\"API_KEY\")\n    if not api_key:\n        return None\n\n    genai.configure(api_key=api_key)\n\n    # genai.list_models()\n    return genai.GenerativeModel(\n        model_name,\n        system_instruction=system_instruction,\n    )\n\n\n# Add this after setup_gpt\n\nclass QwenWrapper:\n    def __init__(self, model_name, system_instruction, api_key=None):\n        self.model_name = model_name\n        self.system_instruction = system_instruction\n        self.model = Qwen2_5_VLForConditionalGeneration.from_pretrained(\n            model_name,\n            torch_dtype=torch.bfloat16,\n            attn_implementation=\"flash_attention_2\",\n            device_map=\"auto\",\n        )\n        min_pixels = 256 * 28 * 28\n        max_pixels = 512 * 28 * 28  # Reduced for memory efficiency\n        self.processor = AutoProcessor.from_pretrained(\n            model_name, min_pixels=min_pixels, max_pixels=max_pixels\n        )\n\n    def _save_pil_to_temp(self, pil_image):\n        temp_fd, temp_path = tempfile.mkstemp(suffix='.jpg')\n        os.close(temp_fd)\n        # Convert to RGB if the image is in a mode that can't be saved as JPEG\n        # print(f\"DEBUG: Image mode is: {pil_image.mode}\")\n        if pil_image.mode in ['RGBA', 'P', 'LA', 'PA']:\n            # print(f\"DEBUG: Converting from {pil_image.mode} to RGB\")\n            pil_image = pil_image.convert('RGB')\n        # print(f\"DEBUG: Final image mode before saving: {pil_image.mode}\")\n        pil_image.save(temp_path)\n        return temp_path\n\n    def generate_content(self, prompt_parts, generation_config={}):\n        content = []\n        temp_files = []\n        for part in prompt_parts:\n            if isinstance(part, str):\n                content.append({\"type\": \"text\", \"text\": part})\n            elif isinstance(part, dict) and part.get(\"type\") in [\"image\", \"video\"]:\n                content.append(part)\n            elif isinstance(part, Image.Image):\n                temp_path = self._save_pil_to_temp(part)\n                temp_files.append(temp_path)\n                content.append({\"type\": \"image\", \"image\": temp_path})\n            else:\n                raise ValueError(f\"Unsupported part type: {type(part)}\")\n\n        messages = [\n            {\n                \"role\": \"system\",\n                \"content\": [{\"type\": \"text\", \"text\": self.system_instruction}],\n            },\n            {\n                \"role\": \"user\",\n                \"content\": content,\n            },\n        ]\n\n        text = self.processor.apply_chat_template(\n            messages, tokenize=False, add_generation_prompt=True\n        )\n        image_inputs, video_inputs = process_vision_info(messages)\n        inputs = self.processor(\n            text=[text],\n            images=image_inputs,\n            videos=video_inputs,\n            padding=True,\n            return_tensors=\"pt\",\n        )\n        inputs = inputs.to(\"cuda\")\n\n        max_new_tokens = 30720\n        print(f\"DEBUG: max_new_tokens: {max_new_tokens}\")\n        max_new_tokens = generation_config.get(\"max_new_tokens\", max_new_tokens)\n        temperature = generation_config.get(\"temperature\", 0.5)\n        do_sample = temperature > 0\n\n        generated_ids = self.model.generate(\n            **inputs,\n            max_new_tokens=max_new_tokens,\n            do_sample=do_sample,\n            temperature=temperature if do_sample else None,\n        )\n\n        generated_ids_trimmed = generated_ids[0, inputs.input_ids.shape[1] :]\n        output_text = self.processor.decode(\n            generated_ids_trimmed, skip_special_tokens=True\n        )\n\n        # Clean up temp files\n        for f in temp_files:\n            os.remove(f)\n\n        class MockResponse:\n            def __init__(self, text):\n                self.text = text\n\n        return MockResponse(output_text)\n\n\ndef setup_qwen(model_name, system_instruction=None, api_key=None):\n    return QwenWrapper(model_name, system_instruction, api_key)\n\n\nclass ClaudeWrapper:\n    def __init__(self, model_name, system_instruction, api_key):\n        self.model_name = model_name\n        self.system_instruction = system_instruction\n        self.api_key = api_key\n        self.client = anthropic.Anthropic(api_key=self.api_key)\n    \n    def _encode_image_to_base64(self, pil_image):\n        \"\"\"Convert PIL Image to base64 string\"\"\"\n        buffered = BytesIO()\n        if pil_image.mode == 'RGBA':\n            pil_image = pil_image.convert('RGB')\n        pil_image.save(buffered, format=\"JPEG\")\n        img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')\n        return img_str\n\n    def _format_content(self, prompt_parts):\n        \"\"\"Format content for Claude API, handling both text and images\"\"\"\n        if not isinstance(prompt_parts, list):\n            return [{\"type\": \"text\", \"text\": prompt_parts}]\n        \n        formatted_content = []\n        \n        for part in prompt_parts:\n            if isinstance(part, str):\n                formatted_content.append({\n                    \"type\": \"text\",\n                    \"text\": part\n                })\n            elif isinstance(part, Image.Image):\n                base64_image = self._encode_image_to_base64(part)\n                formatted_content.append({\n                    \"type\": \"image\",\n                    \"source\": {\n                        \"type\": \"base64\",\n                        \"media_type\": \"image/jpeg\",\n                        \"data\": base64_image\n                    }\n                })\n            elif isinstance(part, dict):\n                formatted_content.append(part)\n        \n        return formatted_content\n    \n    def generate_content(self, prompt_parts, generation_config={}):\n        temperature = generation_config.get(\"temperature\", 0)\n        max_tokens = generation_config.get(\"max_tokens\", 3072)\n        \n        formatted_content = self._format_content(prompt_parts)\n        \n        message = self.client.messages.create(\n            model=self.model_name,\n            max_tokens=max_tokens,\n            temperature=temperature,\n            system=self.system_instruction,\n            messages=[\n                {\n                    \"role\": \"user\",\n                    \"content\": formatted_content\n                }\n            ]\n        )\n        print(\">>> USAGE\", message.usage)\n        \n        class MockResponse:\n            def __init__(self, text):\n                self.text = text\n        \n        return MockResponse(message.content[0].text)\n    \n\ndef setup_claude(model_name, system_instruction=None, api_key=None):\n    \"\"\"\n    Setup function for Claude models.\n    \n    Args:\n        model_name (str): Name of the Claude model (e.g., \"claude-3-opus-20240229\")\n        system_instruction (str, optional): System instruction for the model\n        api_key (str, optional): Anthropic API key. If not provided, will look for ANTHROPIC_API_KEY in environment\n        \n    Returns:\n        ClaudeWrapper or None: Initialized wrapper if successful, None if no API key available\n    \"\"\"\n    logging.info(f\"Setting up Claude's model {model_name} with API key {api_key}\")\n    api_key = api_key or os.environ.get(\"API_KEY\")\n    if not api_key:\n        return None\n    \n    return ClaudeWrapper(\n        model_name=model_name,\n        system_instruction=system_instruction,\n        api_key=api_key\n    )\n\n\n\n\nclass GPTWrapper:\n    def __init__(self, model_name, system_instruction, api_key):\n        self.model_name = model_name\n        self.system_instruction = system_instruction\n        self.api_key = api_key\n        self.client = OpenAI(api_key=self.api_key)\n\n    def _encode_image_to_base64(self, pil_image):\n        \"\"\"Convert PIL Image to base64 string\"\"\"\n        buffered = BytesIO()\n        if pil_image.mode == 'RGBA':\n            pil_image = pil_image.convert('RGB')\n        pil_image.save(buffered, format=\"JPEG\")\n        img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')\n        return img_str\n\n    def _format_content(self, prompt_parts):\n        \"\"\"Format content for OpenAI API, handling both text and images\"\"\"\n        if not isinstance(prompt_parts, list):\n            return prompt_parts  # Return as is if it's just a string\n\n        formatted_content = []\n        \n        for part in prompt_parts:\n            if isinstance(part, str):\n                formatted_content.append(part)\n            elif isinstance(part, Image.Image):\n                # Convert PIL Image to base64 and format for OpenAI\n                base64_image = self._encode_image_to_base64(part)\n                formatted_content.append({\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": f\"data:image/jpeg;base64,{base64_image}\",\n                        \"detail\": \"low\"\n                    }\n                })\n            elif isinstance(part, dict) and part.get(\"type\") == \"image_url\":\n                # If it's already in the correct format, pass it through\n                formatted_content.append(part)\n        \n        return formatted_content\n\n    def generate_content(self, prompt_parts, generation_config={}):\n        temperature = generation_config.get(\"temperature\", 0.5)\n        \n        # Format the content for OpenAI\n        formatted_content = self._format_content(prompt_parts)\n        \n        completion = self.client.chat.completions.create(\n            model=self.model_name,\n            messages=[\n                # {\"role\": \"system\", \"content\": self.system_instruction},\n                {\"role\": \"assistant\", \"content\": self.system_instruction},\n                {\"role\": \"user\", \"content\": formatted_content},\n            ],\n            temperature=temperature)\n            \n        # Format response to match Gemini's format\n        response_text = completion.choices[0].message.content\n        \n        # Create a MockResponse class to mimic the structure expected by parse_response\n        class MockResponse:\n            def __init__(self, text):\n                self.text = text\n        return MockResponse(response_text)\n\ndef setup_gpt(model_name, system_instruction=None, api_key=None):\n    logging.info(f\"Setting up OpenAI's model {model_name} with API key {api_key}\")\n    api_key = api_key or os.environ.get(\"API_KEY\")\n    if not api_key:\n        return None\n    \n    return GPTWrapper(model_name=model_name, \n                      system_instruction=system_instruction, \n                      api_key=api_key)\n    \n\n\n\n\n\ndef save_prompt_parts_as_html(prompt_parts, html_file_path):\n    html_content = prompt_parts_to_html(prompt_parts)\n    string_to_file(html_content, html_file_path)\n\n\ndef prompt_parts_to_html(prompt_parts, max_image_width=300, max_image_height=300):\n    if isinstance(prompt_parts, (str, Image.Image)):\n        # If a single string or image is passed, convert to a list\n        prompt_parts = [prompt_parts]\n\n    html_content = \"\"\"\n    <!DOCTYPE html>\n    <html>\n    <head>\n        <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/default.min.css\">\n        <script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js\"></script>\n        <script>hljs.highlightAll();</script>\n        <style>\n            .image-row {{\n                display: flex;\n                flex-wrap: nowrap;\n                margin-bottom: 20px;\n            }}\n            .image-row img {{\n                margin-right: 1px;\n                max-width: {max_width}px;\n                max-height: {max_height}px;\n                height: auto;\n            }}\n        </style>\n    </head>\n    <body>\n    \"\"\".format(\n        max_width=max_image_width, max_height=max_image_height\n    )\n\n    image_row_open = False\n\n    for part in prompt_parts:\n        if isinstance(part, str):\n            if image_row_open:\n                html_content += \"</div>\"\n                image_row_open = False\n            formatted_text = to_markdown(part)\n            html_content += f\"<p>{markdown2.markdown(formatted_text, extras=['fenced-code-blocks', 'code-friendly'])}</p>\"\n        elif isinstance(part, Image.Image):\n            if not image_row_open:\n                html_content += '<div class=\"image-row\">'\n                image_row_open = True\n            buffered = BytesIO()\n            part.save(buffered, format=\"PNG\")\n            img_str = base64.b64encode(buffered.getvalue()).decode(\"utf-8\")\n            html_content += f'<img src=\"data:image/png;base64,{img_str}\">'\n\n    if image_row_open:\n        html_content += \"</div>\"\n\n    html_content += \"\"\"\n    </body>\n    </html>\n    \"\"\"\n\n    return html_content\n\n\ndef to_markdown(text):\n    text = text.replace(\"•\", \"  *\")\n    return textwrap.indent(text, \"> \", predicate=lambda _: True)\n\n\n\n\ndef remove_lines_containing(content: str, keyword: str) -> str:\n    \"\"\"Removes lines containing a specific keyword from the content string.\n\n    Args:\n        content (str): The content string to process.\n        keyword (str): The keyword to search for.\n\n    Returns:\n        str: The content string with lines containing the keyword removed.\n    \"\"\"\n    lines = content.split(\"\\n\")\n    filtered_lines = [line for line in lines if keyword not in line]\n    return \"\\n\".join(filtered_lines)\n\n\ndef categorize_nodes(python_code: str):\n    tree = ast.parse(python_code)\n\n    imports = []\n    other_top_level = []\n    functions = []\n\n    for node in tree.body:\n        if isinstance(node, (ast.Import, ast.ImportFrom)):\n            imports.append(node)\n        elif isinstance(node, ast.FunctionDef):\n            functions.append(node)\n        else:\n            other_top_level.append(node)\n\n    return imports, other_top_level, functions\n\n\ndef create_new_module(imports, other_top_level, selected_functions):\n    module = ast.Module(body=imports + other_top_level +\n                        selected_functions, type_ignores=[])\n    return astor.to_source(module)\n\n\ndef select_random_functions(functions, num_examples):\n    num_examples = min(num_examples, len(functions))\n    logging.info(\n        f\"Selecting {num_examples} examples\")\n    return random.sample(functions, num_examples)\n\n\ndef get_n_examples_from_python_code(python_code, num_examples):\n    if isinstance(num_examples, int) and num_examples >= 0:\n        imports, other_top_level, functions = categorize_nodes(python_code)\n        selected_functions = select_random_functions(functions, num_examples)\n        python_code = create_new_module(\n            imports, other_top_level, selected_functions)\n    return python_code"
  },
  {
    "path": "third_party/vlmx/vlmx/tool_use_agent.py",
    "content": "from typing import Dict, Any, Optional\nfrom pathlib import Path\nimport json\nimport matplotlib.pyplot as plt\nfrom datetime import datetime\nfrom vlmx.context_agent import ContextAwareAgent\nimport tempfile\nfrom vlmx.utils import string_to_file, join_path\n\n\nTOOL_INSTRUCTION = \"\"\"\n## Tool Use Instructions\n\nWhen responding:\n\n1. First explain your approach in plain text\n2. Then provide your code in a single Python code block marked with ```python\n3. Finally explain what the code does and what files were saved\n\nAvailable tools:\n\n1. save_image(name, image) -> saves matplotlib figure or numpy array as image\n2. log_data(name, data) -> saves data as JSON file\nNote: you can call the above tool-use functions directly as they'll be made available in the global scope. No need to import them.\n\nExample response format:\nI'll help you solve this problem by...\n```python\n[code]\n```\n\nThe code will save the following files:\n[files]\n\n\"\"\"\nPYTHON_DIFF_INSTRUCTION = \"\"\"\n## Diff instructions\n\nWhen modifying existing code:\n1. First explain your approach in plain text\n2. Then provide your changes as a unified diff marked with ```diff\n3. Finally explain what the changes do\n\nThe diff should be in standard unified diff format:\n```diff\n[diff]\n```\n\nAs we will use this function to apply your diff:\n\n```python\ndef apply_unified_diff(original_code: str, diff_text: str) -> str:\n    \"Applies a unified diff using the `patch` library.\"\n    patch_set = patch.fromstring(diff_text.encode('utf-8'))  # Convert string to bytes\n    patched_code = patch_set.apply(original_code.encode('utf-8'))\n    return patched_code.decode('utf-8')  # Convert bytes back to string\n```\n\nExample response format:\nI'll modify the code by...\n```diff\n[diff]\n```\n\nThe changes will...\n\n\n\n__Important Note for New Function Definitions__\n\nWhen adding a new function definition immediately after another, ensure there's a blank line separating them. \nOtherwise, Python may raise indentation errors due to how the function boundaries are parsed.\n\n\"\"\"\n\n\n\nclass ToolUseAgent(ContextAwareAgent):\n    \"\"\"\n    An agent that can use tools and save/analyze artifacts during execution.\n    Extends ContextAwareAgent to support file references in prompts.\n    \"\"\"\n    \n    def __init__(self, config, working_dir: Optional[str] = \"./vlm_workspace\"):\n        super().__init__(config)\n        self.working_dir = Path(join_path(self.cfg.out_dir, working_dir))\n        self.working_dir.mkdir(exist_ok=True)\n        \n        # Create subdirectories for different types of outputs\n        self.img_dir = self.working_dir / \"images\"\n        self.video_dir = self.working_dir / \"videos\" \n        self.log_dir = self.working_dir / \"logs\"\n        self.code_dir = self.working_dir / \"code\"\n        \n        for dir in [self.img_dir, self.video_dir, self.log_dir, self.code_dir]:\n            dir.mkdir(exist_ok=True)\n\n    def save_image(self, name: str, image: Any) -> str:\n        \"\"\"Save image and return path that can be referenced with @\"\"\"\n        timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n        path = self.img_dir / f\"{name}_{timestamp}.png\"\n        \n        if isinstance(image, plt.Figure):\n            # If it's a matplotlib figure, save it directly\n            image.savefig(str(path))\n            plt.close(image)  # Clean up the figure\n        else:\n            # Create a new figure and axis\n            plt.figure(figsize=(8, 8))\n            # Handle numpy arrays\n            if hasattr(image, 'shape') and len(image.shape) == 2:\n                plt.imshow(image, cmap='gray')\n            else:\n                plt.imshow(image)\n            plt.grid(True)\n            # Show axis labels and ticks\n            plt.xlabel('X Pixel')\n            plt.ylabel('Y Pixel')\n            plt.savefig(str(path))\n            plt.close()  # Clean up the figure\n        return str(path)\n\n    def save_video(self, name: str, video_path: str) -> str:\n        \"\"\"Copy video to workspace and return path that can be referenced with @\"\"\"\n        timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n        new_path = self.video_dir / f\"{name}_{timestamp}.mp4\"\n        import shutil\n        shutil.copy2(video_path, new_path)\n        return str(new_path)\n\n    def log_data(self, name: str, data: Any) -> str:\n        \"\"\"Log data and return path that can be referenced with @\"\"\"\n        timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n        path = self.log_dir / f\"{name}_{timestamp}.json\"\n        with open(path, 'w') as f:\n            json.dump(data, f, indent=2)\n        return str(path)\n\n    # def save_code(self, name: str, code: str) -> str:\n    #     \"\"\"Save code and return path that can be referenced with @\"\"\"\n    #     timestamp = datetime.now().strftime(\"%Y%m%d_%H%M%S\")\n    #     path = self.code_dir / f\"{name}_{timestamp}.py\"\n    #     string_to_file(code, str(path))\n    #     return str(path)\n\n    def execute_code(self, code: str, globals_dict: Optional[Dict] = None) -> tuple[bool, Optional[str]]:\n        \"\"\"\n        Execute code with provided globals and return success status and error message if any.\n        The code can reference saved artifacts using @ syntax.\n        \"\"\"\n        if globals_dict is None:\n            globals_dict = {}\n            \n        # Add tool functions to globals\n        globals_dict.update({\n            'save_image': self.save_image,\n            'save_video': self.save_video,\n            'log_data': self.log_data,\n            # 'save_code': self.save_code\n        })\n        \n        try:\n            # Save code to temporary file for potential reference\n            with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:\n                f.write(code)\n                code_path = f.name\n            \n            # Execute the code\n            exec(code, globals_dict)\n            return True, None\n        except Exception as e:\n            import traceback\n            return False, f\"Error: {str(e)}\\n\\nTraceback:\\n{traceback.format_exc()}\"\n        finally:\n            if 'code_path' in locals():\n                import os\n                os.unlink(code_path)\n\n    def _make_system_instruction(self) -> str:\n        return TOOL_INSTRUCTION\n\n\n"
  },
  {
    "path": "third_party/vlmx/vlmx/utils.py",
    "content": "import matplotlib.pyplot as plt\nfrom PIL import Image, ImageChops\nimport cv2\nimport sys\nfrom collections import defaultdict\nimport subprocess\nfrom typing import List, Dict, Any\nfrom hydra.core.global_hydra import GlobalHydra\nfrom hydra import initialize, compose\nimport os\nimport random\nimport logging\nimport numpy as np\nimport json\nfrom omegaconf import DictConfig, OmegaConf\nfrom copy import deepcopy\nimport re\n\n\ndef extract_code_from_string(code_string, code_type=\"python\"):\n    \"\"\"Extracts code or diff from a string.\"\"\"\n    pattern = f\"```{code_type}\\n([\\s\\S]*?)```\"\n    matches = re.findall(pattern, code_string, re.DOTALL)\n    \n    if matches:\n        return matches[0].strip()\n    return None\n\n\n\ndef seed_everything(seed: int, torch_deterministic=False) -> None:\n    # import torch\n    logging.info(f\"Setting seed {seed}\")\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    # if torch_deterministic:\n    #     os.environ[\"CUBLAS_WORKSPACE_CONFIG\"] = \":16:8\"\n    #     torch.manual_seed(seed)\n    #     torch.cuda.manual_seed(seed)\n    #     torch.backends.cudnn.deterministic = True\n    #     torch.backends.cudnn.benchmark = True\n    #     torch.use_deterministic_algorithms(True)\n\n\ndef join_path(*args):\n    return os.path.join(*args)\n\n\ndef save_json(data, filename):\n    with open(filename, 'w') as f:\n        json.dump(data, f, indent=4)\n\n\ndef load_json(filename):\n    with open(filename, 'r') as f:\n        return json.load(f)\n\n\ndef create_dir(path):\n    os.makedirs(path, exist_ok=True)\n\n\ndef string_to_file(string: str, filename: str) -> None:\n    with open(filename, 'w') as file:\n        file.write(string)\n\n\ndef file_to_string(filename: str) -> str:\n    with open(filename, 'r') as file:\n        return file.read()\n\n\ndef create_task_config(cfg: DictConfig, task_name) -> DictConfig:\n    task_config = deepcopy(cfg)\n    task_config.out_dir = join_path(task_config.out_dir, task_name)\n    return task_config\n\n\ndef load_config(config_path=\"../../conf\", config_name=\"config\"):\n    \"\"\"\n    Load and merge Hydra configuration.\n\n    :param config_path: Path to the config directory\n    :param config_name: Name of the main config file (without .yaml extension)\n    :return: Merged configuration object\n    \"\"\"\n    # Initialize Hydra\n    GlobalHydra.instance().clear()\n    initialize(version_base=None, config_path=config_path)\n\n    # Compose the configuration\n    cfg = compose(config_name=config_name)\n\n    return cfg\n\n\ndef flatten_dict(d: Dict[str, Any], parent_key: str = '', sep: str = '.') -> Dict[str, Any]:\n    items = []\n    for k, v in d.items():\n        new_key = f\"{parent_key}{sep}{k}\" if parent_key else k\n        if isinstance(v, dict):\n            items.extend(flatten_dict(v, new_key, sep=sep).items())\n        else:\n            items.append((new_key, v))\n    return dict(items)\n\n\ndef config_to_command(cfg: DictConfig, script_path: str, conda_env: str = \"articulate-anything-clean\") -> List[str]:\n    \"\"\"\n    Convert a configuration to a command-line command, flattening nested structures.\n\n    Args:\n    cfg (DictConfig): The configuration to convert.\n    script_path (str): The path to the Python script to run.\n    conda_env (str): The name of the Conda environment to use.\n\n    Returns:\n    List[str]: The command as a list of strings.\n    \"\"\"\n    # Convert the configuration to a flat dictionary\n    flat_cfg = flatten_dict(OmegaConf.to_container(cfg, resolve=True))\n\n    # Convert the flat dictionary to command-line arguments\n    cmd_args = [f\"{k}={v}\" for k, v in flat_cfg.items() if v is not None]\n    return make_cmd(script_path, conda_env, cmd_args)\n\n\ndef make_cmd(script_path: str, conda_env: str = \"articulate-anything-clean\",\n             cmd_args=[]):\n    # Construct the command\n    command = [\n        \"conda\", \"run\", \"-n\", conda_env,\n        \"python\", script_path\n    ] + cmd_args\n\n    return command\n\n\ndef run_subprocess(command: List[str], env=None) -> None:\n    \"\"\"\n    Run a command as a subprocess.\n\n    Args:\n    command (List[str]): The command to run as a list of strings.\n\n    Raises:\n    subprocess.CalledProcessError: If the command fails.\n    \"\"\"\n    # convert all element in command to string\n    command = [str(c) for c in command]\n    if env is None:\n        env = os.environ.copy()\n    try:\n        subprocess.run(command, check=True, env=env)\n\n    except subprocess.CalledProcessError as e:\n        logging.error(f\"Command failed with error: {e}\")\n\n\nclass Steps:\n    def __init__(self):\n        self.steps = defaultdict(dict)\n        self.order = []\n\n    def add_step(self, name: str, result: Any):\n        self.steps[name] = result\n        self.order.append(name)\n\n    def __getitem__(self, name):\n        return self.steps[name]\n\n    def __iter__(self):\n        for name in self.order:\n            yield name, self.steps[name]\n\n    def __str__(self):\n        return str(self.steps)\n\n    def __repr__(self):\n        return str(self.steps)\n\n\nclass HideOutput(object):\n    # https://stackoverflow.com/questions/5081657/how-do-i-prevent-a-c-shared-library-to-print-on-stdout-in-python/\n    '''\n    A context manager that block stdout for its scope, usage:\n\n    with HideOutput():\n        os.system('ls -l')\n    '''\n\n    def __init__(self, *args, **kw):\n        sys.stdout.flush()\n        self._origstdout = sys.stdout\n        self._oldstdout_fno = os.dup(sys.stdout.fileno())\n        self._devnull = os.open(os.devnull, os.O_WRONLY)\n\n    def __enter__(self):\n        self._newstdout = os.dup(1)\n        os.dup2(self._devnull, 1)\n        os.close(self._devnull)\n        sys.stdout = os.fdopen(self._newstdout, 'w')\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        sys.stdout = self._origstdout\n        sys.stdout.flush()\n        os.dup2(self._oldstdout_fno, 1)\n\n\ndef get_video_frame_count(video_path):\n    video = cv2.VideoCapture(video_path)\n    frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))\n    return frame_count\n\n\ndef extract_frames(video_path, method=\"fixed\", num_frames=5, interval=1, start_time=None, end_time=None):\n    \"\"\"\n    Extract frames from a video either based on a fixed number of frames or at regular intervals.\n\n    Parameters:\n    - video_path (str): Path to the video file.\n    - method (str): Method to extract frames ('fixed' or 'interval').\n    - num_frames (int): Number of frames to extract (used if method is 'fixed'). If -1, returns all frames.\n    - interval (int): Interval in seconds between frames (used if method is 'interval').\n    - start_time (float): Start time in seconds. If None, starts from beginning.\n    - end_time (float): End time in seconds. If None, goes until end.\n\n    Returns:\n    - frames (list): List of extracted frames.\n    - frame_info (dict): Dictionary with video and frame extraction details.\n    \"\"\"\n    video = cv2.VideoCapture(video_path)\n\n    if not video.isOpened():\n        raise Exception(f\"Could not open video file: {video_path}\")\n\n    frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))\n    fps = int(video.get(cv2.CAP_PROP_FPS))\n    duration = frame_count / fps\n    width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))\n    height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))\n\n    # Convert time to frame numbers\n    start_frame = 0 if start_time is None else int(start_time * fps)\n    end_frame = frame_count if end_time is None else int(end_time * fps)\n    \n    # Ensure valid frame range\n    start_frame = max(0, min(start_frame, frame_count - 1))\n    end_frame = max(start_frame + 1, min(end_frame, frame_count))\n    \n    frames = []\n\n    if method == \"fixed\":\n        if num_frames == -1:\n            # Return all frames in the specified range\n            sample_indices = list(range(start_frame, end_frame))\n        else:\n            # Sample a fixed number of frames from the range\n            range_size = end_frame - start_frame\n            sample_indices = [start_frame + int(range_size * i / num_frames)\n                          for i in range(num_frames)]\n    elif method == \"interval\":\n        # Sample frames at regular intervals within the range\n        current_time = start_time if start_time is not None else 0\n        end_time = end_time if end_time is not None else duration\n        sample_indices = [\n            int(fps * t) for t in np.arange(current_time, end_time, interval)\n        ]\n        # Filter indices to be within valid range\n        sample_indices = [idx for idx in sample_indices if start_frame <= idx < end_frame]\n    else:\n        raise ValueError(\"Invalid method. Use 'fixed' or 'interval'.\")\n\n    print(\"getting frames\", sample_indices)\n    for idx in sample_indices:\n        video.set(cv2.CAP_PROP_POS_FRAMES, idx)\n        ret, frame = video.read()\n        if ret:\n            frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n\n    video.release()\n\n    frame_info = {\n        \"frame_count\": frame_count,\n        \"fps\": fps,\n        \"duration\": duration,\n        \"width\": width,\n        \"height\": height,\n        \"extracted_frame_indices\": sample_indices,\n        \"start_time\": start_time,\n        \"end_time\": end_time,\n    }\n    return frames, frame_info\n\n\ndef concatenate_frames_horizontally(frames):\n    \"\"\"\n    Concatenates frames into a single image horizontally.\n\n    Args:\n        frames (list): List of PIL Images or numpy arrays to be concatenated.\n\n    Returns:\n        np.array: Concatenated image.\n    \"\"\"\n    # Convert PIL Images to numpy arrays if necessary\n    if isinstance(frames[0], Image.Image):\n        frames = [np.array(frame) for frame in frames]\n\n    frames = np.array(frames)\n\n    if frames.ndim != 4 or frames.shape[0] == 0:\n        raise ValueError(\n            \"The frames array must have shape (n, height, width, channels).\"\n        )\n\n    concatenated_image = np.concatenate(frames, axis=1)\n    return concatenated_image\n\n\ndef crop_white(image):\n    \"\"\"\n    Crop white space from around a PIL image\n\n    :param image: PIL Image object\n    :return: Cropped PIL Image object\n    \"\"\"\n    # Convert image to RGB if it's not already\n    if image.mode != 'RGB':\n        image = image.convert('RGB')\n\n    # Get the bounding box of the non-white area\n    bg = Image.new(image.mode, image.size, (255, 255, 255))\n    diff = ImageChops.difference(image, bg)\n    bbox = diff.getbbox()\n\n    if bbox:\n        return image.crop(bbox)\n    return image  # return the original image if it's all white\n\n\ndef resize_frame(frame, width, height):\n    if width is None and height is None:\n        return frame\n\n    original_width, original_height = frame.size\n\n    if width is None:\n        # Calculate width to maintain aspect ratio\n        aspect_ratio = original_width / original_height\n        width = int(height * aspect_ratio)\n    elif height is None:\n        # Calculate height to maintain aspect ratio\n        aspect_ratio = original_height / original_width\n        height = int(width * aspect_ratio)\n\n    return frame.resize((width, height), Image.LANCZOS)\n\n\ndef get_frames_from_video(\n    video_path,\n    num_frames=5,\n    video_encoding_strategy=\"individual\",\n    to_crop_white=True,\n    flip_horizontal=False,\n    width=None,\n    height=None,\n    start_time=None,\n    end_time=None,\n):\n    \"\"\"\n    Extract frames from a video and process them according to specified parameters.\n    \n    Parameters:\n    - video_path (str): Path to the video file\n    - num_frames (int): Number of frames to extract. If -1, returns all frames\n    - video_encoding_strategy (str): How to encode the video frames ('individual' or 'concatenate')\n    - to_crop_white (bool): Whether to crop white space from frames\n    - flip_horizontal (bool): Whether to flip frames horizontally\n    - width (int): Target width for resizing\n    - height (int): Target height for resizing\n    - start_time (float): Start time in seconds. If None, starts from beginning\n    - end_time (float): End time in seconds. If None, goes until end\n    \n    Returns:\n    - list: List of processed frames as PIL Images\n    \"\"\"\n    frames, _ = extract_frames(video_path, num_frames=num_frames, \n                             start_time=start_time, end_time=end_time)\n    pil_frames = [Image.fromarray(frame) for frame in frames]\n\n    if flip_horizontal:\n        pil_frames = [frame.transpose(Image.FLIP_LEFT_RIGHT)\n                      for frame in pil_frames]\n\n    if to_crop_white:\n        pil_frames = [frame.transpose(Image.FLIP_LEFT_RIGHT)\n                      for frame in pil_frames]\n\n    # Get the size of the first frame as reference\n    if pil_frames:\n        reference_size = pil_frames[0].size\n        # Resize all frames to match the first frame's size\n        pil_frames = [frame.resize(reference_size, Image.LANCZOS) for frame in pil_frames]\n\n    if width is not None or height is not None:\n        # Resize the frames if either width or height is specified\n        pil_frames = [resize_frame(frame, width, height)\n                      for frame in pil_frames]\n\n    if video_encoding_strategy == \"concatenate\":\n        return [Image.fromarray(concatenate_frames_horizontally(pil_frames))]\n    elif video_encoding_strategy == \"individual\":\n        return pil_frames\n    else:\n        raise ValueError(\n            \"Invalid video_encoding_strategy. Use 'concatenate' or 'individual'.\"\n        )\n\n\ndef convert_mp4_to_gif(input_path, output_path, start_time=0, end_time=None, resize=None, overwrite=False):\n    if os.path.exists(output_path) and not overwrite:\n        return output_path\n\n    with HideOutput():\n        # Load the video file\n        clip = VideoFileClip(input_path)\n        # .subclip(start_time, end_time)\n\n        # Resize if needed\n        if resize:\n            clip = clip.resize(resize)\n\n        # Attempt a simpler write_gif call\n        clip.write_gif(output_path, fps=10)\n    return output_path\n\n\ndef display_frames(\n    frames,\n    titles=None,\n    cols=5,\n    figsize=(20, 10),\n    border_color=None,\n    border_width=20,\n    wspace=0.0,\n    hspace=0.0,\n    save_file=None,\n):\n    \"\"\"\n    Display a list of frames with optional titles and optional colored borders.\n\n    Parameters:\n    - frames (list): List of frames to display.\n    - titles (list): Optional list of titles for each frame.\n    - cols (int): Number of columns in the display grid.\n    - figsize (tuple): Size of the figure.\n    - border_color (str): Optional color for the border around each frame.\n    - border_width (int): Width of the border around each frame.\n    - wspace (float): Width space between subplots.\n    - hspace (float): Height space between subplots.\n    \"\"\"\n    num_frames = len(frames)\n    # Calculate the number of rows needed\n    rows = (num_frames + cols - 1) // cols\n\n    if border_color:\n        frames = [draw_frame(frame, border_color, border_width)\n                  for frame in frames]\n\n    plt.figure(figsize=figsize)\n    plt.ioff()\n    for i, frame in enumerate(frames):\n        ax = plt.subplot(rows, cols, i + 1)\n        ax.axis(\"off\")\n        plt.imshow(frame)\n        if titles and i < len(titles):\n            plt.title(titles[i])\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=wspace, hspace=hspace)\n    if save_file is not None:\n        plt.savefig(save_file, bbox_inches=\"tight\")\n        print(f\"Saved to {save_file}\")\n        plt.close()  # Close the figure after saving\n    else:\n        plt.show()\n\n\ndef show_video(video, overwrite=True, use_gif=False,\n               num_frames=5, flip_horizontal=False):\n    from IPython.display import Video, Image\n    if use_gif:\n        gif = convert_mp4_to_gif(video, video.replace(\".mp4\", \".gif\"),\n                                 overwrite=overwrite)\n        display(Image(gif))\n    else:\n        frames = get_frames_from_video(video, to_crop_white=True,\n                                       num_frames=num_frames,\n                                       flip_horizontal=flip_horizontal)\n        display_frames(frames, cols=5)\n\n\ndef display_overlay_frames(\n    frames,\n    x_delta: int = 0,  # Horizontal offset applied cumulatively to each subsequent frame\n    y_delta: int = 0,  # Vertical offset applied cumulatively to each subsequent frame\n    z_delta: int = 0,  # Placeholder for z-offset, currently unused in this 2D context\n    figsize=(10, 10),\n    save_file=None,\n    initial_opacity=0.5,\n):\n    \"\"\"\n    Display frames overlaid on top of each other with increasing opacity for later frames.\n    Frames can be offset using x_delta and y_delta.\n    \n    Parameters:\n    - frames (list): List of frames to overlay (PIL Images or numpy arrays)\n    - x_delta (int): Horizontal offset applied cumulatively to each subsequent frame (e.g., frame N is offset by N*x_delta).\n    - y_delta (int): Vertical offset applied cumulatively to each subsequent frame (e.g., frame N is offset by N*y_delta).\n    - z_delta (int): Placeholder for z-offset, currently unused.\n    - figsize (tuple): Size of the figure\n    - save_file (str): Optional path to save the output image\n    \"\"\"\n    if not frames:\n        return\n        \n    # Convert numpy arrays to PIL Images if needed, or copy PIL images\n    temp_pil_frames = []\n    if isinstance(frames[0], np.ndarray):\n        temp_pil_frames = [Image.fromarray(frame) for frame in frames]\n    else:\n        # Ensure we are working with copies if input is already PIL Images\n        temp_pil_frames = [frame.copy() for frame in frames]\n    \n    if not temp_pil_frames:\n        return\n\n    base_size = temp_pil_frames[0].size\n    \n    # Resize all frames to match the first frame's size and convert to RGBA for transparency handling\n    pil_frames_rgba = [frame.resize(base_size, Image.LANCZOS).convert('RGBA') for frame in temp_pil_frames]\n    \n    # Start with the first frame (it's already RGBA)\n    result = pil_frames_rgba[0].copy()\n    \n    # Overlay subsequent frames with increasing opacity and offsets\n    # Iterate over the rest of the frames (from the second frame onwards)\n    for i, current_frame_rgba in enumerate(pil_frames_rgba[1:], 1):\n        # i will be 1 for pil_frames_rgba[1], 2 for pil_frames_rgba[2], etc.\n        # This index `i` is used for cumulative offset and opacity calculation.\n        opacity = min(initial_opacity + (i * 0.1), 1.0)\n        \n        # Create a transparent canvas for the current_frame_rgba, same size as base\n        offset_canvas = Image.new('RGBA', base_size, (0, 0, 0, 0))\n        \n        # Calculate cumulative offset for current_frame_rgba (which is effectively original_frames[i])\n        # The first frame (original_frames[0]) is the base and is not offset.\n        # original_frames[1] (current_frame_rgba when i=1) is offset by (1*x_delta, 1*y_delta)\n        current_x_offset = i * x_delta\n        current_y_offset = i * y_delta\n        \n        # Paste the current_frame_rgba onto the offset_canvas using its own alpha as mask\n        offset_canvas.paste(current_frame_rgba, (current_x_offset, current_y_offset), current_frame_rgba)\n        \n        # Blend the offset_canvas (containing the single, offsetted frame) with the accumulated result\n        result = Image.blend(result, offset_canvas, opacity)\n        ## do compositing\n        # result = Image.composite(offset_canvas, result, offset_canvas)\n    \n    # Display the result\n    plt.figure(figsize=figsize)\n    plt.imshow(result)\n    plt.axis('off')\n    \n    if save_file is not None:\n        plt.savefig(save_file, bbox_inches='tight')\n        plt.close()\n    else:\n        plt.show()"
  }
]